diff --git a/source/spidermonkey-test-runner.js b/source/spidermonkey-test-runner.js new file mode 100644 index 00000000..394c7a06 --- /dev/null +++ b/source/spidermonkey-test-runner.js @@ -0,0 +1,238 @@ +/***************************************************************************** +* +* Higgs JavaScript Virtual Machine +* +* This file is part of the Higgs project. The project is distributed at: +* https://github.com/maximecb/Higgs +* +* Copyright (c) 2014, Maxime Chevalier-Boisvert. All rights reserved. +* +* This software is licensed under the following license (Modified BSD +* License): +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions are +* met: +* 1. Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* 2. Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions and the following disclaimer in the +* documentation and/or other materials provided with the distribution. +* 3. The name of the author may not be used to endorse or promote +* products derived from this software without specific prior written +* permission. +* +* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +* NOT LIMITED TO PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +* +*****************************************************************************/ + +/* +Test-runner runs all js files in the specified dir in a forked instance of higgs. +If any tests fail the program exist abnormally (i.e. exit(1);) +*/ + +(function() +{ + var console = require("lib/console"); + var ffi = require("lib/ffi"); + var std = require("lib/stdlib"); + var fs = require("lib/dir"); + + var test = require("lib/test"); + + var tests_dir = "./spidermonkey-tests"; + + // Don't run tests in tests_dir/core + // and don't run any files/dirs the user provides as arguments + test_environment = [ + 'browser.js', + 'shell.js', + 'jsref.js', + 'template.js', + 'user.js', + 'sta.js', + 'test262-browser.js', + 'test262-shell.js', + 'test402-browser.js', + 'test402-shell.js', + 'testBuiltInObject.js', + 'testIntl.js', + 'js-test-driver-begin.js', + 'js-test-driver-end.js', + ] + var ignores = Object.create(null) + test_environment.forEach( + function (x) { ignores[x] = true; } + ); + ignores["core"] = true; + global.arguments.forEach( + function(n) { ignores[n] = true; } + ); + + // Stats for the tests + var tests_run = 0; + var tests_passed = 0; + var tests_failed = 0; + + // Track which directory we're in + var current = ""; + + // Space for the exit status of the forked vm + var child_status = std.malloc(4); + + // included_files is a list of jsref.js, shell.js, browser.js etc. + // which the spidermonkey tests expect. + function runTest(file, included_files) + { + file = current + "/" + file; + console.log("Running: " + file + " and including: ", included_files); + + // fork before running test + var pid = ffi.c.fork(); + + if (pid < 0) + { + console.log("FORK FAILED!"); + std.exit(1); + } + else if (pid === 0) + { + // run the test in this child process + try + { + included_files.forEach(load) + load(file); + } + catch (e) + { + if (typeof e === "object") + console.log(e.toString()); + else if (typeof e === "string") + console.log(e); + + std.exit(1); + } + + std.exit(0); + } + else + { + // parent, wait for test to finish + ffi.c.waitpid(pid, child_status, 0); + tests_run +=1; + + // pull out return code and check for pass/fail + var status = $ir_load_u32(child_status, 0); + if (status !== 0) + { + console.log("***** FAILED! *****"); + tests_failed += 1; + } + else + { + tests_passed += 1; + } + } + } + + function runTests(dir_name) + { + var dir = fs.dir(dir_name); + + // update where we are + current = dir_name; + + dir.getDirNames().sort().forEach( + function(next_dir) + { + if (!ignores[next_dir]) { + runVersion(dir_name + "/" + next_dir); + } + } + ); + } + + function runVersion(dir_name) + { + + var dir = fs.dir(dir_name); + + // update where we are + current = dir_name; + included_files = [] + + dir.getFileNames().sort().forEach( + function(file) + { + if (test_environment.indexOf(file) > -1) + { + included_files.push(dir_name + "/" + file) + } + } + ); + // run tests in any subdirectories + dir.getDirNames().sort().forEach( + function(next_dir) + { + if (!ignores[next_dir]) { + runSuite(dir_name + "/" + next_dir, included_files); + } + } + ); + } + + function runSuite(dir_name, included_files) + { + + var dir = fs.dir(dir_name); + + // update where we are + current = dir_name; + + dir.getFileNames().sort().forEach( + function(file) + { + if (test_environment.indexOf(file) > -1) + { + included_files.push(dir_name + "/" + file) + } + } + ); + dir.getFileNames().sort().forEach( + function(file) + { + if (!ignores[file] && file.split('.').pop() === "js") + { + runTest(file, included_files) + } + } + ); + + } + + console.log("Starting spidermonkey-test-runner.js..."); + console.log(" --- "); + + // run tests + runTests(tests_dir); + + console.log("spidermonkey-test-runner.js results:"); + console.log(" --- "); + console.log("Tests run:", tests_run); + if (tests_run !== tests_passed) + console.log("Tests passed:", tests_passed); + console.log("Tests failed:", tests_failed); + + if (tests_failed) + std.exit(1); +})(); + diff --git a/source/spidermonkey-tests/LICENSE b/source/spidermonkey-tests/LICENSE new file mode 100644 index 00000000..373395d7 --- /dev/null +++ b/source/spidermonkey-tests/LICENSE @@ -0,0 +1,9 @@ +Please see the file toolkit/content/license.html for the copyright licensing +conditions attached to this codebase, including copies of the licenses +concerned. + +You are not granted rights or licenses to the trademarks of the +Mozilla Foundation or any party, including without limitation the +Firefox name or logo. + +For more information, see: http://www.mozilla.org/foundation/licensing.html diff --git a/source/spidermonkey-tests/README.txt b/source/spidermonkey-tests/README.txt new file mode 100644 index 00000000..c598477d --- /dev/null +++ b/source/spidermonkey-tests/README.txt @@ -0,0 +1,54 @@ +JS Test Suite Readme +==================== + +The JS test suite is a fairly extensive collection of correctness and regression +tests for the Spidermonkey engine. Two harnesses run these tests: the shell test +harness in this directory and the "reftest" harness built into the browser, used +by Tinderbox. The browser reftests require additional manifest files; these are +generated automatically by the build phase 'package-tests' using the +'--make-manifests' option to jstests.py. + +Creating a test +--------------- +For general information, see +https://developer.mozilla.org/en-US/docs/SpiderMonkey/Creating_JavaScript_tests + +Adding a test +------------- + Drop it in an appropriate directory under the tests directory. + + Some names are forbidden. Do not name your test browser.js, + shell.js, jsref.js, template.js, user.js, js-test-driver-begin.js, or + js-test-driver-end.js, or any of the names of the files in supporting/. + + +Adjusting when and how a test runs +---------------------------------- + Put a comment at the top of the header matching the format: + // |reftest| -- + + Where is a standard reftest string, as documented by: + http://mxr.mozilla.org/mozilla-central/source/layout/tools/reftest/README.txt + + Example: + // |reftest| skip-if(!xulRuntime.shell) -- does not always dismiss alert + + Either // or /* */ style comments may be used. The entire + comment must appear in the first 512 bytes of the file. The control + string must be in its own comment block. + + When adding such comments to individual files is not feasible (e.g., for + imported tests), reftest manifest entries can be added to jstests.list + instead. Combining in-file comments with entries in this manifest file for + the same files is not supported (the one from the manifest file will be + used). Only the following two forms are supported: + include + script + The "include" indicates that should apply to all test + cases within a directory. A statement for a nested directory or script + overrides one for an enclosing directory. + +Running tests +------------- +See +https://developer.mozilla.org/en-US/docs/SpiderMonkey/Running_Automated_JavaScript_Tests diff --git a/source/spidermonkey-tests/browser.js b/source/spidermonkey-tests/browser.js new file mode 100644 index 00000000..1f6c0097 --- /dev/null +++ b/source/spidermonkey-tests/browser.js @@ -0,0 +1,558 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var gPageCompleted; +var GLOBAL = this + ''; + +// Variables local to jstests harness. +var jstestsTestPassesUnlessItThrows = false; +var jstestsRestoreFunction; +var jstestsOptions; + +/* + * Signals to this script that the current test case should be considered to + * have passed if it doesn't throw an exception. + * + * Overrides the same-named function in shell.js. + */ +function testPassesUnlessItThrows() { + jstestsTestPassesUnlessItThrows = true; +} + +/* + * Requests to load the given JavaScript file before the file containing the + * test case. + */ +function include(file) { + outputscripttag(file, {language: "type", mimetype: "text/javascript"}); +} + +/* + * Sets a restore function which restores the standard built-in ECMAScript + * properties after a destructive test case, and which will be called after + * the test case terminates. + */ +function setRestoreFunction(restore) { + jstestsRestoreFunction = restore; +} + +function htmlesc(str) { + if (str == '<') + return '<'; + if (str == '>') + return '>'; + if (str == '&') + return '&'; + return str; +} + +function DocumentWrite(s) +{ + try + { + var msgDiv = document.createElement('div'); + msgDiv.innerHTML = s; + document.body.appendChild(msgDiv); + msgDiv = null; + } + catch(excp) + { + document.write(s + '
\n'); + } +} + +function print() { + var s = 'TEST-INFO | '; + var a; + for (var i = 0; i < arguments.length; i++) + { + a = arguments[i]; + s += String(a) + ' '; + } + + if (typeof dump == 'function') + { + dump( s + '\n'); + } + + s = s.replace(/[<>&]/g, htmlesc); + + DocumentWrite(s); +} + +function writeHeaderToLog( string ) { + string = String(string); + + if (typeof dump == 'function') + { + dump( string + '\n'); + } + + string = string.replace(/[<>&]/g, htmlesc); + + DocumentWrite( "

" + string + "

" ); +} + +function writeFormattedResult( expect, actual, string, passed ) { + string = String(string); + + if (typeof dump == 'function') + { + dump( string + '\n'); + } + + string = string.replace(/[<>&]/g, htmlesc); + + var s = ""+ string ; + s += "" ; + s += ( passed ) ? "  " + PASSED + : " " + FAILED + expect; + + DocumentWrite( s + "
" ); + return passed; +} + +window.onerror = function (msg, page, line) +{ + jstestsTestPassesUnlessItThrows = false; + + // Restore options in case a test case used this common variable name. + options = jstestsOptions; + + // Restore the ECMAScript environment after potentially destructive tests. + if (typeof jstestsRestoreFunction === "function") { + jstestsRestoreFunction(); + } + + optionsPush(); + + if (typeof DESCRIPTION == 'undefined') + { + DESCRIPTION = 'Unknown'; + } + if (typeof EXPECTED == 'undefined') + { + EXPECTED = 'Unknown'; + } + + var testcase = new TestCase("unknown-test-name", DESCRIPTION, EXPECTED, "error"); + + if (document.location.href.indexOf('-n.js') != -1) + { + // negative test + testcase.passed = true; + } + + testcase.reason = page + ':' + line + ': ' + msg; + + reportFailure(msg); + + optionsReset(); +}; + +function gc() +{ + try + { + SpecialPowers.forceGC(); + } + catch(ex) + { + print('gc: ' + ex); + } +} + +function quit() +{ +} + +function options(aOptionName) +{ + // return value of options() is a comma delimited list + // of the previously set values + + var value = ''; + for (var optionName in options.currvalues) + { + value += optionName + ','; + } + if (value) + { + value = value.substring(0, value.length-1); + } + + if (aOptionName) { + if (!(aOptionName in SpecialPowers.Cu)) { + // This test is trying to flip an unsupported option, so it's + // likely no longer testing what it was supposed to. Fail it + // hard. + throw "Unsupported JSContext option '"+ aOptionName +"'"; + } + + if (options.currvalues.hasOwnProperty(aOptionName)) + // option is set, toggle it to unset + delete options.currvalues[aOptionName]; + else + // option is not set, toggle it to set + options.currvalues[aOptionName] = true; + + SpecialPowers.Cu[aOptionName] = + options.currvalues.hasOwnProperty(aOptionName); + } + + return value; +} + +// Keep a reference to options around so that we can restore it after running +// a test case, which may have used this common name for one of its own +// variables. +jstestsOptions = options; + +function optionsInit() { + + // hash containing the set options. + options.currvalues = { + strict: true, + werror: true, + strict_mode: true + }; + + // record initial values to support resetting + // options to their initial values + options.initvalues = {}; + + // record values in a stack to support pushing + // and popping options + options.stackvalues = []; + + for (var optionName in options.currvalues) + { + var propName = optionName; + + if (!(propName in SpecialPowers.Cu)) + { + throw "options.currvalues is out of sync with Components.utils"; + } + if (!SpecialPowers.Cu[propName]) + { + delete options.currvalues[optionName]; + } + else + { + options.initvalues[optionName] = true; + } + } +} + +function gczeal(z) +{ + SpecialPowers.setGCZeal(z); +} + +function jit(on) +{ +} + +function jsTestDriverBrowserInit() +{ + + if (typeof dump != 'function') + { + dump = print; + } + + optionsInit(); + optionsClear(); + + if (document.location.search.indexOf('?') != 0) + { + // not called with a query string + return; + } + + var properties = {}; + var fields = document.location.search.slice(1).split(';'); + for (var ifield = 0; ifield < fields.length; ifield++) + { + var propertycaptures = /^([^=]+)=(.*)$/.exec(fields[ifield]); + if (!propertycaptures) + { + properties[fields[ifield]] = true; + } + else + { + properties[propertycaptures[1]] = decodeURIComponent(propertycaptures[2]); + if (propertycaptures[1] == 'language') + { + // language=(type|language);mimetype + properties.mimetype = fields[ifield+1]; + } + } + } + + if (properties.language != 'type') + { + try + { + properties.version = /javascript([.0-9]+)/.exec(properties.mimetype)[1]; + } + catch(ex) + { + } + } + + if (!properties.version && navigator.userAgent.indexOf('Gecko/') != -1) + { + // If the version is not specified, and the browser is Gecko, + // use the default version corresponding to the shell's version(0). + // See https://bugzilla.mozilla.org/show_bug.cgi?id=522760#c11 + // Otherwise adjust the version to match the suite version for 1.6, + // and later due to the use of for-each, let, yield, etc. + // + // The logic to upgrade the JS version in the shell lives in the + // corresponding shell.js. + // + // Note that js1_8, js1_8_1, and js1_8_5 are treated identically in + // the browser. + if (properties.test.match(/^js1_6/)) + { + properties.version = '1.6'; + } + else if (properties.test.match(/^js1_7/)) + { + properties.version = '1.7'; + } + else if (properties.test.match(/^js1_8/)) + { + properties.version = '1.8'; + } + else if (properties.test.match(/^ecma_6\/LexicalEnvironment/)) + { + properties.version = '1.8'; + } + } + + // default to language=type;text/javascript. required for + // reftest style manifests. + if (!properties.language) + { + properties.language = 'type'; + properties.mimetype = 'text/javascript'; + } + + gTestPath = properties.test; + + if (properties.gczeal) + { + gczeal(Number(properties.gczeal)); + } + + /* + * since the default setting of jit changed from false to true + * in http://hg.mozilla.org/tracemonkey/rev/685e00e68be9 + * bisections which depend upon jit settings can be thrown off. + * default jit(false) when not running jsreftests to make bisections + * depending upon jit settings consistent over time. This is not needed + * in shell tests as the default jit setting has not changed there. + */ + + if (properties.jit || !document.location.href.match(/jsreftest.html/)) + jit(properties.jit); + + var testpathparts = properties.test.split(/\//); + + if (testpathparts.length < 3) + { + // must have at least suitepath/subsuite/testcase.js + return; + } + + document.write('' + properties.test + '<\/title>'); + + // XXX bc - the first document.written script is ignored if the protocol + // is file:. insert an empty script tag, to work around it. + document.write('<script></script>'); + + // Output script tags for shell.js, then browser.js, at each level of the + // test path hierarchy. + var prepath = ""; + var i = 0; + for (end = testpathparts.length - 1; i < end; i++) { + prepath += testpathparts[i] + "/"; + outputscripttag(prepath + "shell.js", properties); + outputscripttag(prepath + "browser.js", properties); + } + + // Output the test script itself. + outputscripttag(prepath + testpathparts[i], properties); + + // Finally output the driver-end script to advance to the next test. + outputscripttag('js-test-driver-end.js', properties); + return; +} + +function outputscripttag(src, properties) +{ + if (!src) + { + return; + } + + var s = '<script src="' + src + '" charset="utf-8" '; + + if (properties.language != 'type') + { + s += 'language="javascript'; + if (properties.version) + { + s += properties.version; + } + } + else + { + s += 'type="' + properties.mimetype; + if (properties.version) + { + s += ';version=' + properties.version; + } + } + s += '"><\/script>'; + + document.write(s); +} + +function jsTestDriverEnd() +{ + // gDelayTestDriverEnd is used to + // delay collection of the test result and + // signal to Spider so that tests can continue + // to run after page load has fired. They are + // responsible for setting gDelayTestDriverEnd = true + // then when completed, setting gDelayTestDriverEnd = false + // then calling jsTestDriverEnd() + + if (gDelayTestDriverEnd) + { + return; + } + + window.onerror = null; + + // Restore options in case a test case used this common variable name. + options = jstestsOptions; + + // Restore the ECMAScript environment after potentially destructive tests. + if (typeof jstestsRestoreFunction === "function") { + jstestsRestoreFunction(); + } + + if (jstestsTestPassesUnlessItThrows) { + var testcase = new TestCase("unknown-test-name", "", true, true); + print(PASSED); + jstestsTestPassesUnlessItThrows = false; + } + + try + { + optionsReset(); + } + catch(ex) + { + dump('jsTestDriverEnd ' + ex); + } + + if (window.opener && window.opener.runNextTest) + { + if (window.opener.reportCallBack) + { + window.opener.reportCallBack(window.opener.gWindow); + } + setTimeout('window.opener.runNextTest()', 250); + } + else + { + for (var i = 0; i < gTestcases.length; i++) + { + gTestcases[i].dump(); + } + + // tell reftest the test is complete. + document.documentElement.className = ''; + // tell Spider page is complete + gPageCompleted = true; + } +} + +//var dlog = (function (s) { print('debug: ' + s); }); +var dlog = (function (s) {}); + +// dialog closer from http://bclary.com/projects/spider/spider/chrome/content/spider/dialog-closer.js + +var gDialogCloser; +var gDialogCloserObserver; + +function registerDialogCloser() +{ + gDialogCloser = SpecialPowers. + Cc['@mozilla.org/embedcomp/window-watcher;1']. + getService(SpecialPowers.Ci.nsIWindowWatcher); + + gDialogCloserObserver = {observe: dialogCloser_observe}; + + gDialogCloser.registerNotification(gDialogCloserObserver); +} + +function unregisterDialogCloser() +{ + gczeal(0); + + if (!gDialogCloserObserver || !gDialogCloser) + { + return; + } + + gDialogCloser.unregisterNotification(gDialogCloserObserver); + + gDialogCloserObserver = null; + gDialogCloser = null; +} + +// use an array to handle the case where multiple dialogs +// appear at one time +var gDialogCloserSubjects = []; + +function dialogCloser_observe(subject, topic, data) +{ + if (subject instanceof ChromeWindow && topic == 'domwindowopened' ) + { + gDialogCloserSubjects.push(subject); + // timeout of 0 needed when running under reftest framework. + subject.setTimeout(closeDialog, 0); + } +} + +function closeDialog() +{ + var subject; + + while ( (subject = gDialogCloserSubjects.pop()) != null) + { + if (subject.document instanceof XULDocument && + subject.document.documentURI == 'chrome://global/content/commonDialog.xul') + { + subject.close(); + } + else + { + // alerts inside of reftest framework are not XULDocument dialogs. + subject.close(); + } + } +} + +registerDialogCloser(); +window.addEventListener('unload', unregisterDialogCloser, true); + +jsTestDriverBrowserInit(); diff --git a/source/spidermonkey-tests/ecma/Array/.15.4-1.js.swp b/source/spidermonkey-tests/ecma/Array/.15.4-1.js.swp new file mode 100644 index 00000000..31ddef4a Binary files /dev/null and b/source/spidermonkey-tests/ecma/Array/.15.4-1.js.swp differ diff --git a/source/spidermonkey-tests/ecma/Array/15.4-1.js b/source/spidermonkey-tests/ecma/Array/15.4-1.js new file mode 100644 index 00000000..5371d71b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4-1.js @@ -0,0 +1,99 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4-1.js + ECMA Section: 15.4 Array Objects + + Description: Every Array object has a length property whose value + is always an integer with positive sign and less than + Math.pow(2,32). + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array Objects"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr[Math.pow(2,32)-2]", + "hi", + eval("var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr[Math.pow(2,32)-2]") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr.length", + (Math.pow(2,32)-1), + eval("var myarr = new Array(); myarr[Math.pow(2,32)-2]='hi'; myarr.length") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr[Math.pow(2,32)-3]", + "hi", + eval("var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr[Math.pow(2,32)-3]") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr.length", + (Math.pow(2,32)-2), + eval("var myarr = new Array(); myarr[Math.pow(2,32)-3]='hi'; myarr.length") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr[Math.pow(2,31)-2]", + "hi", + eval("var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr[Math.pow(2,31)-2]") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr.length", + (Math.pow(2,31)-1), + eval("var myarr = new Array(); myarr[Math.pow(2,31)-2]='hi'; myarr.length") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr[Math.pow(2,31)-1]", + "hi", + eval("var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr[Math.pow(2,31)-1]") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr.length", + (Math.pow(2,31)), + eval("var myarr = new Array(); myarr[Math.pow(2,31)-1]='hi'; myarr.length") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr[Math.pow(2,31)]", + "hi", + eval("var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr[Math.pow(2,31)]") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr.length", + (Math.pow(2,31)+1), + eval("var myarr = new Array(); myarr[Math.pow(2,31)]='hi'; myarr.length") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr[Math.pow(2,30)-2]", + "hi", + eval("var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr[Math.pow(2,30)-2]") + ); + +new TestCase(SECTION, + "var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr.length", + (Math.pow(2,30)-1), + eval("var myarr = new Array(); myarr[Math.pow(2,30)-2]='hi'; myarr.length") + ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Array/15.4-2.js b/source/spidermonkey-tests/ecma/Array/15.4-2.js new file mode 100644 index 00000000..d1616784 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4-2.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4-2.js + ECMA Section: 15.4 Array Objects + + Description: Whenever a property is added whose name is an array + index, the length property is changed, if necessary, + to be one more than the numeric value of that array + index; and whenever the length property is changed, + every property whose name is an array index whose value + is not smaller than the new length is automatically + deleted. This constraint applies only to the Array + object itself, and is unaffected by length or array + index properties that may be inherited from its + prototype. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.4-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array Objects"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var arr=new Array(); arr[Math.pow(2,16)] = 'hi'; arr.length", + Math.pow(2,16)+1, + eval("var arr=new Array(); arr[Math.pow(2,16)] = 'hi'; arr.length") ); + +new TestCase( SECTION, + "var arr=new Array(); arr[Math.pow(2,30)-2] = 'hi'; arr.length", + Math.pow(2,30)-1, + eval("var arr=new Array(); arr[Math.pow(2,30)-2] = 'hi'; arr.length") ); + +new TestCase( SECTION, + "var arr=new Array(); arr[Math.pow(2,30)-1] = 'hi'; arr.length", + Math.pow(2,30), + eval("var arr=new Array(); arr[Math.pow(2,30)-1] = 'hi'; arr.length") ); + +new TestCase( SECTION, + "var arr=new Array(); arr[Math.pow(2,30)] = 'hi'; arr.length", + Math.pow(2,30)+1, + eval("var arr=new Array(); arr[Math.pow(2,30)] = 'hi'; arr.length") ); + + +new TestCase( SECTION, + "var arr=new Array(); arr[Math.pow(2,31)-2] = 'hi'; arr.length", + Math.pow(2,31)-1, + eval("var arr=new Array(); arr[Math.pow(2,31)-2] = 'hi'; arr.length") ); + +new TestCase( SECTION, + "var arr=new Array(); arr[Math.pow(2,31)-1] = 'hi'; arr.length", + Math.pow(2,31), + eval("var arr=new Array(); arr[Math.pow(2,31)-1] = 'hi'; arr.length") ); + +new TestCase( SECTION, + "var arr=new Array(); arr[Math.pow(2,31)] = 'hi'; arr.length", + Math.pow(2,31)+1, + eval("var arr=new Array(); arr[Math.pow(2,31)] = 'hi'; arr.length") ); + +new TestCase( SECTION, + "var arr = new Array(0,1,2,3,4,5); arr.length = 2; String(arr)", + "0,1", + eval("var arr = new Array(0,1,2,3,4,5); arr.length = 2; String(arr)") ); + +new TestCase( SECTION, + "var arr = new Array(0,1); arr.length = 3; String(arr)", + "0,1,", + eval("var arr = new Array(0,1); arr.length = 3; String(arr)") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Array/15.4.1.1.js b/source/spidermonkey-tests/ecma/Array/15.4.1.1.js new file mode 100644 index 00000000..b6419851 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.1.1.js @@ -0,0 +1,77 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.1.1.js + ECMA Section: 15.4.1 Array( item0, item1,... ) + + Description: When Array is called as a function rather than as a + constructor, it creates and initializes a new array + object. Thus, the function call Array(...) is + equivalent to the object creation new Array(...) with + the same arguments. + + An array is created and returned as if by the expression + new Array( item0, item1, ... ). + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.1.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "typeof Array(1,2)", + "object", + typeof Array(1,2) ); + +new TestCase( SECTION, + "(Array(1,2)).toString", + Array.prototype.toString, + (Array(1,2)).toString ); + +new TestCase( SECTION, + "var arr = Array(1,2,3); arr.toString = Object.prototype.toString; arr.toString()", + "[object Array]", + eval("var arr = Array(1,2,3); arr.toString = Object.prototype.toString; arr.toString()") ); + +new TestCase( SECTION, + "(Array(1,2)).length", + 2, + (Array(1,2)).length ); + +new TestCase( SECTION, + "var arr = (Array(1,2)); arr[0]", + 1, + eval("var arr = (Array(1,2)); arr[0]") ); + +new TestCase( SECTION, + "var arr = (Array(1,2)); arr[1]", + 2, + eval("var arr = (Array(1,2)); arr[1]") ); + +new TestCase( SECTION, + "var arr = (Array(1,2)); String(arr)", + "1,2", + eval("var arr = (Array(1,2)); String(arr)") ); + +test(); + +function ToUint32( n ) { + n = Number( n ); + if( isNaN(n) || n == 0 || n == Number.POSITIVE_INFINITY || + n == Number.NEGATIVE_INFINITY ) { + return 0; + } + var sign = n < 0 ? -1 : 1; + + return ( sign * ( n * Math.floor( Math.abs(n) ) ) ) % Math.pow(2, 32); +} + diff --git a/source/spidermonkey-tests/ecma/Array/15.4.1.2.js b/source/spidermonkey-tests/ecma/Array/15.4.1.2.js new file mode 100644 index 00000000..08e3c0d7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.1.2.js @@ -0,0 +1,128 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.1.2.js + ECMA Section: 15.4.1.2 Array(len) + + Description: When Array is called as a function rather than as a + constructor, it creates and initializes a new array + object. Thus, the function call Array(...) is + equivalent to the object creationi new Array(...) with + the same arguments. + + An array is created and returned as if by the + expression new Array(len). + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.1.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array Constructor Called as a Function: Array(len)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "(Array()).length", + 0, + (Array()).length ); + +new TestCase( SECTION, + "(Array(0)).length", + 0, + (Array(0)).length ); + +new TestCase( SECTION, + "(Array(1)).length", + 1, + (Array(1)).length ); + +new TestCase( SECTION, + "(Array(10)).length", + 10, + (Array(10)).length ); + +new TestCase( SECTION, + "(Array('1')).length", + 1, + (Array('1')).length ); + +new TestCase( SECTION, + "(Array(1000)).length", + 1000, + (Array(1000)).length ); + +new TestCase( SECTION, + "(Array('1000')).length", + 1, + (Array('1000')).length ); + +new TestCase( SECTION, + "(Array(4294967295)).length", + ToUint32(4294967295), + (Array(4294967295)).length ); + +new TestCase( SECTION, + "(Array(Math.pow(2,31)-1)).length", + ToUint32(Math.pow(2,31)-1), + (Array(Math.pow(2,31)-1)).length ); + +new TestCase( SECTION, + "(Array(Math.pow(2,31))).length", + ToUint32(Math.pow(2,31)), + (Array(Math.pow(2,31))).length ); + +new TestCase( SECTION, + "(Array(Math.pow(2,31)+1)).length", + ToUint32(Math.pow(2,31)+1), + (Array(Math.pow(2,31)+1)).length ); + +new TestCase( SECTION, + "(Array('8589934592')).length", + 1, + (Array("8589934592")).length ); + +new TestCase( SECTION, + "(Array('4294967296')).length", + 1, + (Array("4294967296")).length ); + +new TestCase( SECTION, + "(Array(1073741823)).length", + ToUint32(1073741823), + (Array(1073741823)).length ); + +new TestCase( SECTION, + "(Array(1073741824)).length", + ToUint32(1073741824), + (Array(1073741824)).length ); + +new TestCase( SECTION, + "(Array('a string')).length", + 1, + (Array("a string")).length ); + +test(); + +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.1.3.js b/source/spidermonkey-tests/ecma/Array/15.4.1.3.js new file mode 100644 index 00000000..b6f09ce8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.1.3.js @@ -0,0 +1,50 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.1.3.js + ECMA Section: 15.4.1.3 Array() + + Description: When Array is called as a function rather than as a + constructor, it creates and initializes a new array + object. Thus, the function call Array(...) is + equivalent to the object creationi new Array(...) with + the same arguments. + + An array is created and returned as if by the + expression new Array(len). + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.1.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array Constructor Called as a Function: Array()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "typeof Array()", + "object", + typeof Array() ); + +new TestCase( SECTION, + "MYARR = new Array();MYARR.getClass = Object.prototype.toString;MYARR.getClass()", + "[object Array]", + eval("MYARR = Array();MYARR.getClass = Object.prototype.toString;MYARR.getClass()") ); + +new TestCase( SECTION, + "(Array()).length", + 0, + (Array()).length ); + +new TestCase( SECTION, + "Array().toString()", + "", + Array().toString() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.1.js b/source/spidermonkey-tests/ecma/Array/15.4.1.js new file mode 100644 index 00000000..18208b1b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.1.js @@ -0,0 +1,98 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.1.js + ECMA Section: 15.4.1 The Array Constructor Called as a Function + + Description: When Array is called as a function rather than as a + constructor, it creates and initializes a new array + object. Thus, the function call Array(...) is + equivalent to the object creationi new Array(...) with + the same arguments. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Array Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Array() +''", + "", + Array() +"" ); + +new TestCase( SECTION, + "typeof Array()", + "object", + typeof Array() ); + +new TestCase( SECTION, + "var arr = Array(); arr.getClass = Object.prototype.toString; arr.getClass()", + "[object Array]", + eval("var arr = Array(); arr.getClass = Object.prototype.toString; arr.getClass()") ); + +new TestCase( SECTION, + "var arr = Array(); arr.toString == Array.prototype.toString", + true, + eval("var arr = Array(); arr.toString == Array.prototype.toString") ); + +new TestCase( SECTION, + "Array().length", + 0, + Array().length ); + +new TestCase( SECTION, + "Array(1,2,3) +''", + "1,2,3", + Array(1,2,3) +"" ); + +new TestCase( SECTION, + "typeof Array(1,2,3)", + "object", + typeof Array(1,2,3) ); + +new TestCase( SECTION, + "var arr = Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()", + "[object Array]", + eval("var arr = Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()") ); + +new TestCase( SECTION, + "var arr = Array(1,2,3); arr.toString == Array.prototype.toString", + true, + eval("var arr = Array(1,2,3); arr.toString == Array.prototype.toString") ); + +new TestCase( SECTION, + "Array(1,2,3).length", + 3, + Array(1,2,3).length ); + +new TestCase( SECTION, + "typeof Array(12345)", + "object", + typeof Array(12345) ); + +new TestCase( SECTION, + "var arr = Array(12345); arr.getClass = Object.prototype.toString; arr.getClass()", + "[object Array]", + eval("var arr = Array(12345); arr.getClass = Object.prototype.toString; arr.getClass()") ); + +new TestCase( SECTION, + "var arr = Array(1,2,3,4,5); arr.toString == Array.prototype.toString", + true, + eval("var arr = Array(1,2,3,4,5); arr.toString == Array.prototype.toString") ); + +new TestCase( SECTION, + "Array(12345).length", + 12345, + Array(12345).length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.2.1-1.js b/source/spidermonkey-tests/ecma/Array/15.4.2.1-1.js new file mode 100644 index 00000000..af31fed8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.2.1-1.js @@ -0,0 +1,78 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.2.1-1.js + ECMA Section: 15.4.2.1 new Array( item0, item1, ... ) + Description: This description only applies of the constructor is + given two or more arguments. + + The [[Prototype]] property of the newly constructed + object is set to the original Array prototype object, + the one that is the initial value of Array.prototype + (15.4.3.1). + + The [[Class]] property of the newly constructed object + is set to "Array". + + The length property of the newly constructed object is + set to the number of arguments. + + The 0 property of the newly constructed object is set + to item0... in general, for as many arguments as there + are, the k property of the newly constructed object is + set to argument k, where the first argument is + considered to be argument number 0. + + This file tests the typeof the newly constructed object. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.2.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Array Constructor: new Array( item0, item1, ...)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "typeof new Array(1,2)", + "object", + typeof new Array(1,2) ); + +new TestCase( SECTION, + "(new Array(1,2)).toString", + Array.prototype.toString, + (new Array(1,2)).toString ); + +new TestCase( SECTION, + "var arr = new Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()", + "[object Array]", + eval("var arr = new Array(1,2,3); arr.getClass = Object.prototype.toString; arr.getClass()") ); + +new TestCase( SECTION, + "(new Array(1,2)).length", + 2, + (new Array(1,2)).length ); + +new TestCase( SECTION, + "var arr = (new Array(1,2)); arr[0]", + 1, + eval("var arr = (new Array(1,2)); arr[0]") ); + +new TestCase( SECTION, + "var arr = (new Array(1,2)); arr[1]", + 2, + eval("var arr = (new Array(1,2)); arr[1]") ); + +new TestCase( SECTION, + "var arr = (new Array(1,2)); String(arr)", + "1,2", + eval("var arr = (new Array(1,2)); String(arr)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.2.1-2.js b/source/spidermonkey-tests/ecma/Array/15.4.2.1-2.js new file mode 100644 index 00000000..4cb1ce2b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.2.1-2.js @@ -0,0 +1,67 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.2.1-2.js + ECMA Section: 15.4.2.1 new Array( item0, item1, ... ) + Description: This description only applies of the constructor is + given two or more arguments. + + The [[Prototype]] property of the newly constructed + object is set to the original Array prototype object, + the one that is the initial value of Array.prototype + (15.4.3.1). + + The [[Class]] property of the newly constructed object + is set to "Array". + + The length property of the newly constructed object is + set to the number of arguments. + + The 0 property of the newly constructed object is set + to item0... in general, for as many arguments as there + are, the k property of the newly constructed object is + set to argument k, where the first argument is + considered to be argument number 0. + + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.2.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Array Constructor: new Array( item0, item1, ...)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var TEST_STRING = "new Array("; +var ARGUMENTS = "" + var TEST_LENGTH = Math.pow(2,10); //Math.pow(2,32); + +for ( var index = 0; index < TEST_LENGTH; index++ ) { + ARGUMENTS += index; + ARGUMENTS += (index == (TEST_LENGTH-1) ) ? "" : ","; +} + +TEST_STRING += ARGUMENTS + ")"; + +TEST_ARRAY = eval( TEST_STRING ); + +for ( var item = 0; item < TEST_LENGTH; item++ ) { + new TestCase( SECTION, + "["+item+"]", + item, + TEST_ARRAY[item] ); +} + +new TestCase( SECTION, + "new Array( ["+TEST_LENGTH+" arguments] ) +''", + ARGUMENTS, + TEST_ARRAY +"" ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.2.1-3.js b/source/spidermonkey-tests/ecma/Array/15.4.2.1-3.js new file mode 100644 index 00000000..36910aef --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.2.1-3.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.2.1-3.js + ECMA Section: 15.4.2.1 new Array( item0, item1, ... ) + Description: This description only applies of the constructor is + given two or more arguments. + + The [[Prototype]] property of the newly constructed + object is set to the original Array prototype object, + the one that is the initial value of Array.prototype + (15.4.3.1). + + The [[Class]] property of the newly constructed object + is set to "Array". + + The length property of the newly constructed object is + set to the number of arguments. + + The 0 property of the newly constructed object is set + to item0... in general, for as many arguments as there + are, the k property of the newly constructed object is + set to argument k, where the first argument is + considered to be argument number 0. + + This test stresses the number of arguments presented to + the Array constructor. Should support up to Math.pow + (2,32) arguments, since that is the maximum length of an + ECMAScript array. + + ***Change TEST_LENGTH to Math.pow(2,32) when larger array + lengths are supported. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.2.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Array Constructor: new Array( item0, item1, ...)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = "new Array("; +var ARGUMENTS = "" + var TEST_LENGTH = Math.pow(2,10); //Math.pow(2,32); + +for ( var index = 0; index < TEST_LENGTH; index++ ) { + ARGUMENTS += index; + ARGUMENTS += (index == (TEST_LENGTH-1) ) ? "" : ","; +} + +TEST_STRING += ARGUMENTS + ")"; + +TEST_ARRAY = eval( TEST_STRING ); + +for ( var item = 0; item < TEST_LENGTH; item++ ) { + new TestCase( SECTION, + "TEST_ARRAY["+item+"]", + item, + TEST_ARRAY[item] ); +} + +new TestCase( SECTION, + "new Array( ["+TEST_LENGTH+" arguments] ) +''", + ARGUMENTS, + TEST_ARRAY +"" ); + +new TestCase( SECTION, + "TEST_ARRAY.toString", + Array.prototype.toString, + TEST_ARRAY.toString ); + +new TestCase( SECTION, + "TEST_ARRAY.join", + Array.prototype.join, + TEST_ARRAY.join ); + +new TestCase( SECTION, + "TEST_ARRAY.sort", + Array.prototype.sort, + TEST_ARRAY.sort ); + +new TestCase( SECTION, + "TEST_ARRAY.reverse", + Array.prototype.reverse, + TEST_ARRAY.reverse ); + +new TestCase( SECTION, + "TEST_ARRAY.length", + TEST_LENGTH, + TEST_ARRAY.length ); + +new TestCase( SECTION, + "TEST_ARRAY.toString = Object.prototype.toString; TEST_ARRAY.toString()", + "[object Array]", + eval("TEST_ARRAY.toString = Object.prototype.toString; TEST_ARRAY.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.2.2-1.js b/source/spidermonkey-tests/ecma/Array/15.4.2.2-1.js new file mode 100644 index 00000000..6a895611 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.2.2-1.js @@ -0,0 +1,149 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.2.2-1.js + ECMA Section: 15.4.2.2 new Array(len) + + Description: This description only applies of the constructor is + given two or more arguments. + + The [[Prototype]] property of the newly constructed + object is set to the original Array prototype object, + the one that is the initial value of Array.prototype(0) + (15.4.3.1). + + The [[Class]] property of the newly constructed object + is set to "Array". + + If the argument len is a number, then the length + property of the newly constructed object is set to + ToUint32(len). + + If the argument len is not a number, then the length + property of the newly constructed object is set to 1 + and the 0 property of the newly constructed object is + set to len. + + This file tests cases where len is a number. + + The cases in this test need to be updated since the + ToUint32_t description has changed. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.2.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Array Constructor: new Array( len )"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "new Array(0)", + "", + (new Array(0)).toString() ); + +new TestCase( SECTION, + "typeof new Array(0)", + "object", + (typeof new Array(0)) ); + +new TestCase( SECTION, + "(new Array(0)).length", + 0, + (new Array(0)).length ); + +new TestCase( SECTION, + "(new Array(0)).toString", + Array.prototype.toString, + (new Array(0)).toString ); + +new TestCase( SECTION, + "new Array(1)", + "", + (new Array(1)).toString() ); + +new TestCase( SECTION, + "new Array(1).length", + 1, + (new Array(1)).length ); + +new TestCase( SECTION, + "(new Array(1)).toString", + Array.prototype.toString, + (new Array(1)).toString ); + +new TestCase( SECTION, + "(new Array(-0)).length", + 0, + (new Array(-0)).length ); + +new TestCase( SECTION, + "(new Array(0)).length", + 0, + (new Array(0)).length ); + +new TestCase( SECTION, + "(new Array(10)).length", + 10, + (new Array(10)).length ); + +new TestCase( SECTION, + "(new Array('1')).length", + 1, + (new Array('1')).length ); + +new TestCase( SECTION, + "(new Array(1000)).length", + 1000, + (new Array(1000)).length ); + +new TestCase( SECTION, + "(new Array('1000')).length", + 1, + (new Array('1000')).length ); + +new TestCase( SECTION, + "(new Array(4294967295)).length", + ToUint32(4294967295), + (new Array(4294967295)).length ); + +new TestCase( SECTION, + "(new Array('8589934592')).length", + 1, + (new Array("8589934592")).length ); + +new TestCase( SECTION, + "(new Array('4294967296')).length", + 1, + (new Array("4294967296")).length ); + +new TestCase( SECTION, + "(new Array(1073741824)).length", + ToUint32(1073741824), + (new Array(1073741824)).length ); + +test(); + +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.2.2-2.js b/source/spidermonkey-tests/ecma/Array/15.4.2.2-2.js new file mode 100644 index 00000000..f8c88f86 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.2.2-2.js @@ -0,0 +1,84 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.2.2-2.js + ECMA Section: 15.4.2.2 new Array(len) + + Description: This description only applies of the constructor is + given two or more arguments. + + The [[Prototype]] property of the newly constructed + object is set to the original Array prototype object, + the one that is the initial value of Array.prototype(0) + (15.4.3.1). + + The [[Class]] property of the newly constructed object + is set to "Array". + + If the argument len is a number, then the length + property of the newly constructed object is set to + ToUint32(len). + + If the argument len is not a number, then the length + property of the newly constructed object is set to 1 + and the 0 property of the newly constructed object is + set to len. + + This file tests length of the newly constructed array + when len is not a number. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.2.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Array Constructor: new Array( len )"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "(new Array(new Number(1073741823))).length", + 1, + (new Array(new Number(1073741823))).length ); + +new TestCase( SECTION, + "(new Array(new Number(0))).length", + 1, + (new Array(new Number(0))).length ); + +new TestCase( SECTION, + "(new Array(new Number(1000))).length", + 1, + (new Array(new Number(1000))).length ); + +new TestCase( SECTION, + "(new Array('mozilla, larryzilla, curlyzilla')).length", + 1, + (new Array('mozilla, larryzilla, curlyzilla')).length ); + +new TestCase( SECTION, + "(new Array(true)).length", + 1, + (new Array(true)).length ); + +new TestCase( SECTION, + "(new Array(false)).length", + 1, + (new Array(false)).length); + +new TestCase( SECTION, + "(new Array(new Boolean(true)).length", + 1, + (new Array(new Boolean(true))).length ); + +new TestCase( SECTION, + "(new Array(new Boolean(false)).length", + 1, + (new Array(new Boolean(false))).length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.2.3.js b/source/spidermonkey-tests/ecma/Array/15.4.2.3.js new file mode 100644 index 00000000..5ec7989d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.2.3.js @@ -0,0 +1,67 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.2.3.js + ECMA Section: 15.4.2.3 new Array() + Description: The [[Prototype]] property of the newly constructed + object is set to the origianl Array prototype object, + the one that is the initial value of Array.prototype. + The [[Class]] property of the new object is set to + "Array". The length of the object is set to 0. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.2.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Array Constructor: new Array()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "new Array() +''", + "", + (new Array()) +"" ); + +new TestCase( SECTION, + "typeof new Array()", + "object", + (typeof new Array()) ); + +new TestCase( SECTION, + "var arr = new Array(); arr.getClass = Object.prototype.toString; arr.getClass()", + "[object Array]", + eval("var arr = new Array(); arr.getClass = Object.prototype.toString; arr.getClass()") ); + +new TestCase( SECTION, + "(new Array()).length", + 0, + (new Array()).length ); + +new TestCase( SECTION, + "(new Array()).toString == Array.prototype.toString", + true, + (new Array()).toString == Array.prototype.toString ); + +new TestCase( SECTION, + "(new Array()).join == Array.prototype.join", + true, + (new Array()).join == Array.prototype.join ); + +new TestCase( SECTION, + "(new Array()).reverse == Array.prototype.reverse", + true, + (new Array()).reverse == Array.prototype.reverse ); + +new TestCase( SECTION, + "(new Array()).sort == Array.prototype.sort", + true, + (new Array()).sort == Array.prototype.sort ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.3.1-2.js b/source/spidermonkey-tests/ecma/Array/15.4.3.1-2.js new file mode 100644 index 00000000..70f38f83 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.3.1-2.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.3.1-1.js + ECMA Section: 15.4.3.1 Array.prototype + Description: The initial value of Array.prototype is the built-in + Array prototype object (15.4.4). + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.3.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var ARRAY_PROTO = Array.prototype; + +new TestCase( SECTION, + "var props = ''; for ( p in Array ) { props += p } props", + "", + eval("var props = ''; for ( p in Array ) { props += p } props") ); + +new TestCase( SECTION, + "Array.prototype = null; Array.prototype", + ARRAY_PROTO, + eval("Array.prototype = null; Array.prototype") ); + +new TestCase( SECTION, + "delete Array.prototype", + false, + delete Array.prototype ); + +new TestCase( SECTION, + "delete Array.prototype; Array.prototype", + ARRAY_PROTO, + eval("delete Array.prototype; Array.prototype") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.3.2.js b/source/spidermonkey-tests/ecma/Array/15.4.3.2.js new file mode 100644 index 00000000..33d50005 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.3.2.js @@ -0,0 +1,28 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.3.2.js + ECMA Section: 15.4.3.2 Array.length + Description: The length property is 1. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.3.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.length"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Array.length", + 1, + Array.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.1.js b/source/spidermonkey-tests/ecma/Array/15.4.4.1.js new file mode 100644 index 00000000..7ffe5600 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.1.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.1.js + ECMA Section: 15.4.4.1 Array.prototype.constructor + Description: The initial value of Array.prototype.constructor + is the built-in Array constructor. + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.prototype.constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, + "Array.prototype.constructor == Array", + true, + Array.prototype.constructor == Array); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.2.js b/source/spidermonkey-tests/ecma/Array/15.4.4.2.js new file mode 100644 index 00000000..a471da1c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.2.js @@ -0,0 +1,76 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.2.js + ECMA Section: 15.4.4.2 Array.prototype.toString() + Description: The elements of this object are converted to strings + and these strings are then concatenated, separated by + comma characters. The result is the same as if the + built-in join method were invoiked for this object + with no argument. + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.4.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.prototype.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Array.prototype.toString.length", + 0, + Array.prototype.toString.length ); + +new TestCase( SECTION, + "(new Array()).toString()", + "", + (new Array()).toString() ); + +new TestCase( SECTION, + "(new Array(2)).toString()", + ",", + (new Array(2)).toString() ); + +new TestCase( SECTION, + "(new Array(0,1)).toString()", + "0,1", + (new Array(0,1)).toString() ); + +new TestCase( SECTION, + "(new Array( Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY)).toString()", + "NaN,Infinity,-Infinity", + (new Array( Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY)).toString() ); + +new TestCase( SECTION, + "(new Array( Boolean(1), Boolean(0))).toString()", + "true,false", + (new Array(Boolean(1),Boolean(0))).toString() ); + +new TestCase( SECTION, + "(new Array(void 0,null)).toString()", + ",", + (new Array(void 0,null)).toString() ); + +var EXPECT_STRING = ""; +var MYARR = new Array(); + +for ( var i = -50; i < 50; i+= 0.25 ) { + MYARR[MYARR.length] = i; + EXPECT_STRING += i +","; +} + +EXPECT_STRING = EXPECT_STRING.substring( 0, EXPECT_STRING.length -1 ); + +new TestCase( SECTION, + "MYARR.toString()", + EXPECT_STRING, + MYARR.toString() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.3-1.js b/source/spidermonkey-tests/ecma/Array/15.4.4.3-1.js new file mode 100644 index 00000000..be0a99e0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.3-1.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.3-1.js + ECMA Section: 15.4.4.3-1 Array.prototype.join() + Description: The elements of this object are converted to strings and + these strings are then concatenated, separated by comma + characters. The result is the same as if the built-in join + method were invoiked for this object with no argument. + Author: christine@netscape.com, pschwartau@netscape.com + Date: 07 October 1997 + Modified: 14 July 2002 + Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155285 + ECMA-262 Ed.3 Section 15.4.4.5 Array.prototype.join() + Step 3: If |separator| is |undefined|, let |separator| + be the single-character string "," + * + */ + +var SECTION = "15.4.4.3-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Array.prototype.join()"); + +var ARR_PROTOTYPE = Array.prototype; + +new TestCase( SECTION, "Array.prototype.join.length", 1, Array.prototype.join.length ); +new TestCase( SECTION, "delete Array.prototype.join.length", false, delete Array.prototype.join.length ); +new TestCase( SECTION, "delete Array.prototype.join.length; Array.prototype.join.length", 1, eval("delete Array.prototype.join.length; Array.prototype.join.length") ); + +// case where array length is 0 + +new TestCase( SECTION, + "var TEST_ARRAY = new Array(); TEST_ARRAY.join()", + "", + eval("var TEST_ARRAY = new Array(); TEST_ARRAY.join()") ); + +// array length is 0, but spearator is specified + +new TestCase( SECTION, + "var TEST_ARRAY = new Array(); TEST_ARRAY.join(' ')", + "", + eval("var TEST_ARRAY = new Array(); TEST_ARRAY.join(' ')") ); + +// length is greater than 0, separator is supplied +new TestCase( SECTION, + "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('&')", + "&&true&false&123&[object Object]&true", + eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('&')") ); + +// length is greater than 0, separator is empty string +new TestCase( SECTION, + "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('')", + "truefalse123[object Object]true", + eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('')") ); + +// length is greater than 0, separator is undefined +new TestCase( SECTION, + "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join(void 0)", + ",,true,false,123,[object Object],true", + eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join(void 0)") ); + +// length is greater than 0, separator is not supplied +new TestCase( SECTION, + "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join()", + ",,true,false,123,[object Object],true", + eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join()") ); + +// separator is a control character +new TestCase( SECTION, + "var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('\v')", + decodeURIComponent("%0B%0Btrue%0Bfalse%0B123%0B[object Object]%0Btrue"), + eval("var TEST_ARRAY = new Array(null, void 0, true, false, 123, new Object(), new Boolean(true) ); TEST_ARRAY.join('\v')") ); + +// length of array is 1 +new TestCase( SECTION, + "var TEST_ARRAY = new Array(true) ); TEST_ARRAY.join('\v')", + "true", + eval("var TEST_ARRAY = new Array(true); TEST_ARRAY.join('\v')") ); + + +SEPARATOR = "\t" + TEST_LENGTH = 100; +TEST_STRING = ""; +ARGUMENTS = ""; +TEST_RESULT = ""; + +for ( var index = 0; index < TEST_LENGTH; index++ ) { + ARGUMENTS += index; + ARGUMENTS += ( index == TEST_LENGTH -1 ) ? "" : ","; + + TEST_RESULT += index; + TEST_RESULT += ( index == TEST_LENGTH -1 ) ? "" : SEPARATOR; +} + +TEST_ARRAY = eval( "new Array( "+ARGUMENTS +")" ); + +new TestCase( SECTION, + "TEST_ARRAY.join("+SEPARATOR+")", + TEST_RESULT, + TEST_ARRAY.join( SEPARATOR ) ); + +new TestCase( SECTION, + "(new Array( Boolean(true), Boolean(false), null, void 0, Number(1e+21), Number(1e-7))).join()", + "true,false,,,1e+21,1e-7", + (new Array( Boolean(true), Boolean(false), null, void 0, Number(1e+21), Number(1e-7))).join() ); + +// this is not an Array object +new TestCase( SECTION, + "var OB = new Object_1('true,false,111,0.5,1.23e6,NaN,void 0,null'); OB.join(':')", + "true:false:111:0.5:1230000:NaN::", + eval("var OB = new Object_1('true,false,111,0.5,1.23e6,NaN,void 0,null'); OB.join(':')") ); + +test(); + +function Object_1( value ) { + this.array = value.split(","); + this.length = this.array.length; + for ( var i = 0; i < this.length; i++ ) { + this[i] = eval(this.array[i]); + } + this.join = Array.prototype.join; + this.getClass = Object.prototype.toString; +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.3-2.js b/source/spidermonkey-tests/ecma/Array/15.4.4.3-2.js new file mode 100644 index 00000000..9b01737c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.3-2.js @@ -0,0 +1,39 @@ +var arr = [0,1,,3,4]; +Object.prototype[2] = 2; + +assertEq(arr.join(""), "01234"); +assertEq(arr.join(","), "0,1,2,3,4"); + +arr[2] = "porkchops"; +assertEq(arr.join("*"), "0*1*porkchops*3*4"); + +delete Object.prototype[2]; +assertEq(arr.join("*"), "0*1*porkchops*3*4"); + +delete arr[2]; +assertEq(arr.join("*"), "0*1**3*4"); + +Object.prototype[2] = null; +assertEq(arr.join("*"), "0*1**3*4"); +Object.prototype[2] = undefined; +assertEq(arr.join("*"), "0*1**3*4"); +arr[2] = null; +assertEq(arr.join("*"), "0*1**3*4"); +arr[2] = undefined; +assertEq(arr.join("*"), "0*1**3*4"); + +var arr = new Array(10); +assertEq(arr.join(""), ""); +assertEq(arr.join(), ",,,,,,,,,"); +assertEq(arr.join("|"), "|||||||||"); + +arr[2] = "doubt"; +assertEq(arr.join(","), ",,doubt,,,,,,,"); + +arr[9] = "failure"; +assertEq(arr.join(","), ",,doubt,,,,,,,failure"); + +delete arr[2]; +assertEq(arr.join(","), ",,,,,,,,,failure"); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.4-1.js b/source/spidermonkey-tests/ecma/Array/15.4.4.4-1.js new file mode 100644 index 00000000..71d8370b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.4-1.js @@ -0,0 +1,260 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.3-1.js + ECMA Section: 15.4.4.3-1 Array.prototype.reverse() + Description: + + The elements of the array are rearranged so as to reverse their order. + This object is returned as the result of the call. + + 1. Call the [[Get]] method of this object with argument "length". + 2. Call ToUint32(Result(1)). + 3. Compute floor(Result(2)/2). + 4. Let k be 0. + 5. If k equals Result(3), return this object. + 6. Compute Result(2)k1. + 7. Call ToString(k). + 8. ToString(Result(6)). + 9. Call the [[Get]] method of this object with argument Result(7). + 10. Call the [[Get]] method of this object with argument Result(8). + 11. If this object has a property named by Result(8), go to step 12; but + if this object has no property named by Result(8), then go to either + step 12 or step 14, depending on the implementation. + 12. Call the [[Put]] method of this object with arguments Result(7) and + Result(10). + 13. Go to step 15. + 14. Call the [[Delete]] method on this object, providing Result(7) as the + name of the property to delete. + 15. If this object has a property named by Result(7), go to step 16; but if + this object has no property named by Result(7), then go to either step 16 + or step 18, depending on the implementation. + 16. Call the [[Put]] method of this object with arguments Result(8) and + Result(9). + 17. Go to step 19. + 18. Call the [[Delete]] method on this object, providing Result(8) as the + name of the property to delete. + 19. Increase k by 1. + 20. Go to step 5. + + Note that the reverse function is intentionally generic; it does not require + that its this value be an Array object. Therefore it can be transferred to other + kinds of objects for use as a method. Whether the reverse function can be applied + successfully to a host object is implementation dependent. + + Note: Array.prototype.reverse allows some flexibility in implementation + regarding array indices that have not been populated. This test covers the + cases in which unpopulated indices are not deleted, since the JavaScript + implementation does not delete uninitialzed indices. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.4.4.4-1"; +var VERSION = "ECMA_1"; +var BUGNUMBER="123724"; +startTest(); + +writeHeaderToLog( SECTION + " Array.prototype.reverse()"); + +var ARR_PROTOTYPE = Array.prototype; + +new TestCase( SECTION, + "Array.prototype.reverse.length", + 0, + Array.prototype.reverse.length ); + +new TestCase( SECTION, + "delete Array.prototype.reverse.length", + false, + delete Array.prototype.reverse.length ); + +new TestCase( SECTION, + "delete Array.prototype.reverse.length; Array.prototype.reverse.length", + 0, + eval("delete Array.prototype.reverse.length; Array.prototype.reverse.length") ); + +// length of array is 0 +new TestCase( SECTION, + "var A = new Array(); A.reverse(); A.length", + 0, + eval("var A = new Array(); A.reverse(); A.length") ); + +// length of array is 1 +var A = new Array(true); +var R = Reverse(A); + +new TestCase( SECTION, + "var A = new Array(true); A.reverse(); A.length", + R.length, + eval("var A = new Array(true); A.reverse(); A.length") ); + +CheckItems( R, A ); + +// length of array is 2 +var S = "var A = new Array( true,false )"; +eval(S); +var R = Reverse(A); + +new TestCase( SECTION, + S +"; A.reverse(); A.length", + R.length, + eval( S + "; A.reverse(); A.length") ); + +CheckItems( R, A ); + +// length of array is 3 +var S = "var A = new Array( true,false,null )"; +eval(S); +var R = Reverse(A); + +new TestCase( SECTION, + S +"; A.reverse(); A.length", + R.length, + eval( S + "; A.reverse(); A.length") ); + +CheckItems( R, A ); + +// length of array is 4 +var S = "var A = new Array( true,false,null,void 0 )"; +eval(S); +var R = Reverse(A); + +new TestCase( SECTION, + S +"; A.reverse(); A.length", + R.length, + eval( S + "; A.reverse(); A.length") ); +CheckItems( R, A ); + + +// some array indexes have not been set +var S = "var A = new Array(); A[8] = 'hi', A[3] = 'yo'"; +eval(S); +var R = Reverse(A); + +new TestCase( SECTION, + S +"; A.reverse(); A.length", + R.length, + eval( S + "; A.reverse(); A.length") ); + +CheckItems( R, A ); + + +var OBJECT_OBJECT = new Object(); +var FUNCTION_OBJECT = new Function( 'return this' ); +var BOOLEAN_OBJECT = new Boolean; +var DATE_OBJECT = new Date(0); +var STRING_OBJECT = new String('howdy'); +var NUMBER_OBJECT = new Number(Math.PI); +var ARRAY_OBJECT= new Array(1000); + +var args = "null, void 0, Math.pow(2,32), 1.234e-32, OBJECT_OBJECT, BOOLEAN_OBJECT, FUNCTION_OBJECT, DATE_OBJECT, STRING_OBJECT,"+ + "ARRAY_OBJECT, NUMBER_OBJECT, Math, true, false, 123, '90210'"; + +var S = "var A = new Array("+args+")"; +eval(S); +var R = Reverse(A); + +new TestCase( SECTION, + S +"; A.reverse(); A.length", + R.length, + eval( S + "; A.reverse(); A.length") ); + +CheckItems( R, A ); + +var limit = 1000; +var args = ""; +for (var i = 0; i < limit; i++ ) { + args += i +""; + if ( i + 1 < limit ) { + args += ","; + } +} + +var S = "var A = new Array("+args+")"; +eval(S); +var R = Reverse(A); + +new TestCase( SECTION, + S +"; A.reverse(); A.length", + R.length, + eval( S + "; A.reverse(); A.length") ); + +CheckItems( R, A ); + +var S = "var MYOBJECT = new Object_1( \"void 0, 1, null, 2, \'\'\" )"; +eval(S); +var R = Reverse( A ); + +new TestCase( SECTION, + S +"; A.reverse(); A.length", + R.length, + eval( S + "; A.reverse(); A.length") ); + +CheckItems( R, A ); + +test(); + +function CheckItems( R, A ) { + for ( var i = 0; i < R.length; i++ ) { + new TestCase( + SECTION, + "A["+i+ "]", + R[i], + A[i] ); + } +} + +function Object_1( value ) { + this.array = value.split(","); + this.length = this.array.length; + for ( var i = 0; i < this.length; i++ ) { + this[i] = eval(this.array[i]); + } + this.join = Array.prototype.reverse; + this.getClass = Object.prototype.toString; +} + +function Reverse( array ) { + var r2 = array.length; + var k = 0; + var r3 = Math.floor( r2/2 ); + if ( r3 == k ) { + return array; + } + + for ( k = 0; k < r3; k++ ) { + var r6 = r2 - k - 1; +// var r7 = String( k ); + var r7 = k; + var r8 = String( r6 ); + + var r9 = array[r7]; + var r10 = array[r8]; + + array[r7] = r10; + array[r8] = r9; + } + + return array; +} + +function Iterate( array ) { + for ( var i = 0; i < array.length; i++ ) { +// print( i+": "+ array[String(i)] ); + } +} + +function Object_1( value ) { + this.array = value.split(","); + this.length = this.array.length; + for ( var i = 0; i < this.length; i++ ) { + this[i] = this.array[i]; + } + this.reverse = Array.prototype.reverse; + this.getClass = Object.prototype.toString; +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.4-2.js b/source/spidermonkey-tests/ecma/Array/15.4.4.4-2.js new file mode 100644 index 00000000..8ffb2d6d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.4-2.js @@ -0,0 +1,135 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.3-1.js + ECMA Section: 15.4.4.3-1 Array.prototype.reverse() + Description: + + The elements of the array are rearranged so as to reverse their order. + This object is returned as the result of the call. + + 1. Call the [[Get]] method of this object with argument "length". + 2. Call ToUint32(Result(1)). + 3. Compute floor(Result(2)/2). + 4. Let k be 0. + 5. If k equals Result(3), return this object. + 6. Compute Result(2)k1. + 7. Call ToString(k). + 8. ToString(Result(6)). + 9. Call the [[Get]] method of this object with argument Result(7). + 10. Call the [[Get]] method of this object with argument Result(8). + 11. If this object has a property named by Result(8), go to step 12; but + if this object has no property named by Result(8), then go to either + step 12 or step 14, depending on the implementation. + 12. Call the [[Put]] method of this object with arguments Result(7) and + Result(10). + 13. Go to step 15. + 14. Call the [[Delete]] method on this object, providing Result(7) as the + name of the property to delete. + 15. If this object has a property named by Result(7), go to step 16; but if + this object has no property named by Result(7), then go to either step 16 + or step 18, depending on the implementation. + 16. Call the [[Put]] method of this object with arguments Result(8) and + Result(9). + 17. Go to step 19. + 18. Call the [[Delete]] method on this object, providing Result(8) as the + name of the property to delete. + 19. Increase k by 1. + 20. Go to step 5. + + Note that the reverse function is intentionally generic; it does not require + that its this value be an Array object. Therefore it can be transferred to other + kinds of objects for use as a method. Whether the reverse function can be applied + successfully to a host object is implementation dependent. + + Note: Array.prototype.reverse allows some flexibility in implementation + regarding array indices that have not been populated. This test covers the + cases in which unpopulated indices are not deleted, since the JavaScript + implementation does not delete uninitialzed indices. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.4.4-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Array.prototype.reverse()"); + +var ARR_PROTOTYPE = Array.prototype; + +new TestCase( SECTION, "Array.prototype.reverse.length", 0, Array.prototype.reverse.length ); +new TestCase( SECTION, "delete Array.prototype.reverse.length", false, delete Array.prototype.reverse.length ); +new TestCase( SECTION, "delete Array.prototype.reverse.length; Array.prototype.reverse.length", 0, eval("delete Array.prototype.reverse.length; Array.prototype.reverse.length") ); + +// length of array is 0 +new TestCase( SECTION, + "var A = new Array(); A.reverse(); A.length", + 0, + eval("var A = new Array(); A.reverse(); A.length") ); + +test(); + +function CheckItems( R, A ) { + for ( var i = 0; i < R.length; i++ ) { + new TestCase( + SECTION, + "A["+i+ "]", + R[i], + A[i] ); + } +} +test(); + +function Object_1( value ) { + this.array = value.split(","); + this.length = this.array.length; + for ( var i = 0; i < this.length; i++ ) { + this[i] = eval(this.array[i]); + } + this.join = Array.prototype.reverse; + this.getClass = Object.prototype.toString; +} +function Reverse( array ) { + var r2 = array.length; + var k = 0; + var r3 = Math.floor( r2/2 ); + if ( r3 == k ) { + return array; + } + + for ( k = 0; k < r3; k++ ) { + var r6 = r2 - k - 1; +// var r7 = String( k ); + var r7 = k; + var r8 = String( r6 ); + + var r9 = array[r7]; + var r10 = array[r8]; + + array[r7] = r10; + array[r8] = r9; + } + + return array; +} +function Iterate( array ) { + for ( var i = 0; i < array.length; i++ ) { +// print( i+": "+ array[String(i)] ); + } +} + +function Object_1( value ) { + this.array = value.split(","); + this.length = this.array.length; + for ( var i = 0; i < this.length; i++ ) { + this[i] = this.array[i]; + } + this.reverse = Array.prototype.reverse; + this.getClass = Object.prototype.toString; +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.5-1.js b/source/spidermonkey-tests/ecma/Array/15.4.4.5-1.js new file mode 100644 index 00000000..967e5471 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.5-1.js @@ -0,0 +1,191 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.5.js + ECMA Section: Array.prototype.sort(comparefn) + Description: + + This test file tests cases in which the compare function is not supplied. + + The elements of this array are sorted. The sort is not necessarily stable. + If comparefn is provided, it should be a function that accepts two arguments + x and y and returns a negative value if x < y, zero if x = y, or a positive + value if x > y. + + 1. Call the [[Get]] method of this object with argument "length". + 2. Call ToUint32(Result(1)). + 1. Perform an implementation-dependent sequence of calls to the + [[Get]] , [[Put]], and [[Delete]] methods of this object and + toSortCompare (described below), where the first argument for each call + to [[Get]], [[Put]] , or [[Delete]] is a nonnegative integer less + than Result(2) and where the arguments for calls to SortCompare are + results of previous calls to the [[Get]] method. After this sequence + is complete, this object must have the following two properties. + (1) There must be some mathematical permutation of the nonnegative + integers less than Result(2), such that for every nonnegative integer + j less than Result(2), if property old[j] existed, then new[(j)] is + exactly the same value as old[j],. but if property old[j] did not exist, + then new[(j)] either does not exist or exists with value undefined. + (2) If comparefn is not supplied or is a consistent comparison + function for the elements of this array, then for all nonnegative + integers j and k, each less than Result(2), if old[j] compares less + than old[k] (see SortCompare below), then (j) < (k). Here we use the + notation old[j] to refer to the hypothetical result of calling the [ + [Get]] method of this object with argument j before this step is + executed, and the notation new[j] to refer to the hypothetical result + of calling the [[Get]] method of this object with argument j after this + step has been completely executed. A function is a consistent + comparison function for a set of values if (a) for any two of those + values (possibly the same value) considered as an ordered pair, it + always returns the same value when given that pair of values as its + two arguments, and the result of applying ToNumber to this value is + not NaN; (b) when considered as a relation, where the pair (x, y) is + considered to be in the relation if and only if applying the function + to x and y and then applying ToNumber to the result produces a + negative value, this relation is a partial order; and (c) when + considered as a different relation, where the pair (x, y) is considered + to be in the relation if and only if applying the function to x and y + and then applying ToNumber to the result produces a zero value (of either + sign), this relation is an equivalence relation. In this context, the + phrase "x compares less than y" means applying Result(2) to x and y and + then applying ToNumber to the result produces a negative value. + 3.Return this object. + + When the SortCompare operator is called with two arguments x and y, the following steps are taken: + 1.If x and y are both undefined, return +0. + 2.If x is undefined, return 1. + 3.If y is undefined, return 1. + 4.If the argument comparefn was not provided in the call to sort, go to step 7. + 5.Call comparefn with arguments x and y. + 6.Return Result(5). + 7.Call ToString(x). + 8.Call ToString(y). + 9.If Result(7) < Result(8), return 1. + 10.If Result(7) > Result(8), return 1. + 11.Return +0. + + Note that, because undefined always compared greater than any other value, undefined and nonexistent + property values always sort to the end of the result. It is implementation-dependent whether or not such + properties will exist or not at the end of the array when the sort is concluded. + + Note that the sort function is intentionally generic; it does not require that its this value be an Array object. + Therefore it can be transferred to other kinds of objects for use as a method. Whether the sort function can be + applied successfully to a host object is implementation dependent . + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + + +var SECTION = "15.4.4.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.prototype.sort(comparefn)"; + +writeHeaderToLog( SECTION + " "+ TITLE); +var S = new Array(); +var item = 0; + +// array is empty. +S[item++] = "var A = new Array()"; + +// array contains one item +S[item++] = "var A = new Array( true )"; + +// length of array is 2 +S[item++] = "var A = new Array( true, false, new Boolean(true), new Boolean(false), 'true', 'false' )"; + +S[item++] = "var A = new Array(); A[3] = 'undefined'; A[6] = null; A[8] = 'null'; A[0] = void 0"; + +S[item] = "var A = new Array( "; + +var limit = 0x0061; +for ( var i = 0x007A; i >= limit; i-- ) { + S[item] += "\'"+ String.fromCharCode(i) +"\'" ; + if ( i > limit ) { + S[item] += ","; + } +} + +S[item] += ")"; + +item++; + +for ( var i = 0; i < S.length; i++ ) { + CheckItems( S[i] ); +} + +test(); + +function CheckItems( S ) { + eval( S ); + var E = Sort( A ); + + new TestCase( SECTION, + S +"; A.sort(); A.length", + E.length, + eval( S + "; A.sort(); A.length") ); + + for ( var i = 0; i < E.length; i++ ) { + new TestCase( + SECTION, + "A["+i+ "].toString()", + E[i] +"", + A[i] +""); + + if ( A[i] == void 0 && typeof A[i] == "undefined" ) { + new TestCase( + SECTION, + "typeof A["+i+ "]", + typeof E[i], + typeof A[i] ); + } + } +} +function Object_1( value ) { + this.array = value.split(","); + this.length = this.array.length; + for ( var i = 0; i < this.length; i++ ) { + this[i] = eval(this.array[i]); + } + this.sort = Array.prototype.sort; + this.getClass = Object.prototype.toString; +} +function Sort( a ) { + for ( i = 0; i < a.length; i++ ) { + for ( j = i+1; j < a.length; j++ ) { + var lo = a[i]; + var hi = a[j]; + var c = Compare( lo, hi ); + if ( c == 1 ) { + a[i] = hi; + a[j] = lo; + } + } + } + return a; +} +function Compare( x, y ) { + if ( x == void 0 && y == void 0 && typeof x == "undefined" && typeof y == "undefined" ) { + return +0; + } + if ( x == void 0 && typeof x == "undefined" ) { + return 1; + } + if ( y == void 0 && typeof y == "undefined" ) { + return -1; + } + x = String(x); + y = String(y); + if ( x < y ) { + return -1; + } + if ( x > y ) { + return 1; + } + return 0; +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.5-2.js b/source/spidermonkey-tests/ecma/Array/15.4.4.5-2.js new file mode 100644 index 00000000..c242cddb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.5-2.js @@ -0,0 +1,193 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.5-2.js + ECMA Section: Array.prototype.sort(comparefn) + Description: + + This test file tests cases in which the compare function is supplied. + In this cases, the sort creates a reverse sort. + + The elements of this array are sorted. The sort is not necessarily stable. + If comparefn is provided, it should be a function that accepts two arguments + x and y and returns a negative value if x < y, zero if x = y, or a positive + value if x > y. + + 1. Call the [[Get]] method of this object with argument "length". + 2. Call ToUint32(Result(1)). + 1. Perform an implementation-dependent sequence of calls to the + [[Get]] , [[Put]], and [[Delete]] methods of this object and + toSortCompare (described below), where the first argument for each call + to [[Get]], [[Put]] , or [[Delete]] is a nonnegative integer less + than Result(2) and where the arguments for calls to SortCompare are + results of previous calls to the [[Get]] method. After this sequence + is complete, this object must have the following two properties. + (1) There must be some mathematical permutation of the nonnegative + integers less than Result(2), such that for every nonnegative integer + j less than Result(2), if property old[j] existed, then new[(j)] is + exactly the same value as old[j],. but if property old[j] did not exist, + then new[(j)] either does not exist or exists with value undefined. + (2) If comparefn is not supplied or is a consistent comparison + function for the elements of this array, then for all nonnegative + integers j and k, each less than Result(2), if old[j] compares less + than old[k] (see SortCompare below), then (j) < (k). Here we use the + notation old[j] to refer to the hypothetical result of calling the [ + [Get]] method of this object with argument j before this step is + executed, and the notation new[j] to refer to the hypothetical result + of calling the [[Get]] method of this object with argument j after this + step has been completely executed. A function is a consistent + comparison function for a set of values if (a) for any two of those + values (possibly the same value) considered as an ordered pair, it + always returns the same value when given that pair of values as its + two arguments, and the result of applying ToNumber to this value is + not NaN; (b) when considered as a relation, where the pair (x, y) is + considered to be in the relation if and only if applying the function + to x and y and then applying ToNumber to the result produces a + negative value, this relation is a partial order; and (c) when + considered as a different relation, where the pair (x, y) is considered + to be in the relation if and only if applying the function to x and y + and then applying ToNumber to the result produces a zero value (of either + sign), this relation is an equivalence relation. In this context, the + phrase "x compares less than y" means applying Result(2) to x and y and + then applying ToNumber to the result produces a negative value. + 3.Return this object. + + When the SortCompare operator is called with two arguments x and y, the following steps are taken: + 1.If x and y are both undefined, return +0. + 2.If x is undefined, return 1. + 3.If y is undefined, return 1. + 4.If the argument comparefn was not provided in the call to sort, go to step 7. + 5.Call comparefn with arguments x and y. + 6.Return Result(5). + 7.Call ToString(x). + 8.Call ToString(y). + 9.If Result(7) < Result(8), return 1. + 10.If Result(7) > Result(8), return 1. + 11.Return +0. + + Note that, because undefined always compared greater than any other value, undefined and nonexistent + property values always sort to the end of the result. It is implementation-dependent whether or not such + properties will exist or not at the end of the array when the sort is concluded. + + Note that the sort function is intentionally generic; it does not require that its this value be an Array object. + Therefore it can be transferred to other kinds of objects for use as a method. Whether the sort function can be + applied successfully to a host object is implementation dependent . + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + + +var SECTION = "15.4.4.5-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.prototype.sort(comparefn)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var S = new Array(); +var item = 0; + +// array is empty. +S[item++] = "var A = new Array()"; + +// array contains one item +S[item++] = "var A = new Array( true )"; + +// length of array is 2 +S[item++] = "var A = new Array( true, false, new Boolean(true), new Boolean(false), 'true', 'false' )"; + +S[item++] = "var A = new Array(); A[3] = 'undefined'; A[6] = null; A[8] = 'null'; A[0] = void 0"; + +S[item] = "var A = new Array( "; + +var limit = 0x0061; +for ( var i = 0x007A; i >= limit; i-- ) { + S[item] += "\'"+ String.fromCharCode(i) +"\'" ; + if ( i > limit ) { + S[item] += ","; + } +} + +S[item] += ")"; + +for ( var i = 0; i < S.length; i++ ) { + CheckItems( S[i] ); +} + +test(); + +function CheckItems( S ) { + eval( S ); + var E = Sort( A ); + + new TestCase( SECTION, + S +"; A.sort(Compare); A.length", + E.length, + eval( S + "; A.sort(Compare); A.length") ); + + for ( var i = 0; i < E.length; i++ ) { + new TestCase( + SECTION, + "A["+i+ "].toString()", + E[i] +"", + A[i] +""); + + if ( A[i] == void 0 && typeof A[i] == "undefined" ) { + new TestCase( + SECTION, + "typeof A["+i+ "]", + typeof E[i], + typeof A[i] ); + } + } +} +function Object_1( value ) { + this.array = value.split(","); + this.length = this.array.length; + for ( var i = 0; i < this.length; i++ ) { + this[i] = eval(this.array[i]); + } + this.sort = Array.prototype.sort; + this.getClass = Object.prototype.toString; +} +function Sort( a ) { + var r1 = a.length; + for ( i = 0; i < a.length; i++ ) { + for ( j = i+1; j < a.length; j++ ) { + var lo = a[i]; + var hi = a[j]; + var c = Compare( lo, hi ); + if ( c == 1 ) { + a[i] = hi; + a[j] = lo; + } + } + } + return a; +} +function Compare( x, y ) { + if ( x == void 0 && y == void 0 && typeof x == "undefined" && typeof y == "undefined" ) { + return +0; + } + if ( x == void 0 && typeof x == "undefined" ) { + return 1; + } + if ( y == void 0 && typeof y == "undefined" ) { + return -1; + } + x = String(x); + y = String(y); + if ( x < y ) { + return 1; + } + if ( x > y ) { + return -1; + } + return 0; +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.5-3.js b/source/spidermonkey-tests/ecma/Array/15.4.4.5-3.js new file mode 100644 index 00000000..5b69e33e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.5-3.js @@ -0,0 +1,148 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.5-3.js + ECMA Section: Array.prototype.sort(comparefn) + Description: + + This is a regression test for + http://scopus/bugsplat/show_bug.cgi?id=117144 + + Verify that sort is successfull, even if the sort compare function returns + a very large negative or positive value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + + +var SECTION = "15.4.4.5-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.prototype.sort(comparefn)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var array = new Array(); + +array[array.length] = new Date( TIME_2000 * Math.PI ); +array[array.length] = new Date( TIME_2000 * 10 ); +array[array.length] = new Date( TIME_1900 + TIME_1900 ); +array[array.length] = new Date(0); +array[array.length] = new Date( TIME_2000 ); +array[array.length] = new Date( TIME_1900 + TIME_1900 +TIME_1900 ); +array[array.length] = new Date( TIME_1900 * Math.PI ); +array[array.length] = new Date( TIME_1900 * 10 ); +array[array.length] = new Date( TIME_1900 ); +array[array.length] = new Date( TIME_2000 + TIME_2000 ); +array[array.length] = new Date( 1899, 0, 1 ); +array[array.length] = new Date( 2000, 1, 29 ); +array[array.length] = new Date( 2000, 0, 1 ); +array[array.length] = new Date( 1999, 11, 31 ); + +var testarr1 = new Array(); +clone( array, testarr1 ); +testarr1.sort( comparefn1 ); + +var testarr2 = new Array(); +clone( array, testarr2 ); +testarr2.sort( comparefn2 ); + +testarr3 = new Array(); +clone( array, testarr3 ); +testarr3.sort( comparefn3 ); + +// when there's no sort function, sort sorts by the toString value of Date. + +var testarr4 = new Array(); +clone( array, testarr4 ); +testarr4.sort(); + +var realarr = new Array(); +clone( array, realarr ); +realarr.sort( realsort ); + +var stringarr = new Array(); +clone( array, stringarr ); +stringarr.sort( stringsort ); + +for ( var i = 0; i < array.length; i++) { + new TestCase( + SECTION, + "testarr1["+i+"]", + realarr[i], + testarr1[i] ); +} + +for ( var i=0; i < array.length; i++) { + new TestCase( + SECTION, + "testarr2["+i+"]", + realarr[i], + testarr2[i] ); +} + +for ( var i=0; i < array.length; i++) { + new TestCase( + SECTION, + "testarr3["+i+"]", + realarr[i], + testarr3[i] ); +} + +for ( var i=0; i < array.length; i++) { + new TestCase( + SECTION, + "testarr4["+i+"]", + stringarr[i].toString(), + testarr4[i].toString() ); +} + +test(); + +function comparefn1( x, y ) { + return x - y; +} +function comparefn2( x, y ) { + return x.valueOf() - y.valueOf(); +} +function realsort( x, y ) { + return ( x.valueOf() == y.valueOf() ? 0 : ( x.valueOf() > y.valueOf() ? 1 : -1 ) ); +} +function comparefn3( x, y ) { + return ( x == y ? 0 : ( x > y ? 1: -1 ) ); +} +function clone( source, target ) { + for (i = 0; i < source.length; i++ ) { + target[i] = source[i]; + } +} +function stringsort( x, y ) { + for ( var i = 0; i < x.toString().length; i++ ) { + var d = (x.toString()).charCodeAt(i) - (y.toString()).charCodeAt(i); + if ( d > 0 ) { + return 1; + } else { + if ( d < 0 ) { + return -1; + } else { + continue; + } + } + + var d = x.length - y.length; + + if ( d > 0 ) { + return 1; + } else { + if ( d < 0 ) { + return -1; + } + } + } + return 0; +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.4.js b/source/spidermonkey-tests/ecma/Array/15.4.4.js new file mode 100644 index 00000000..b3410d87 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.4.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.4.js + ECMA Section: 15.4.4 Properties of the Array Prototype Object + Description: The value of the internal [[Prototype]] property of + the Array prototype object is the Object prototype + object. + + Note that the Array prototype object is itself an + array; it has a length property (whose initial value + is (0) and the special [[Put]] method. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Array Prototype Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, "Array.prototype.length", 0, Array.prototype.length ); + +// verify that prototype object is an Array object. +new TestCase( SECTION, "typeof Array.prototype", "object", typeof Array.prototype ); + +new TestCase( SECTION, + "Array.prototype.toString = Object.prototype.toString; Array.prototype.toString()", + "[object Array]", + eval("Array.prototype.toString = Object.prototype.toString; Array.prototype.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.5.1-1.js b/source/spidermonkey-tests/ecma/Array/15.4.5.1-1.js new file mode 100644 index 00000000..724710aa --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.5.1-1.js @@ -0,0 +1,138 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.5.1-1.js + ECMA Section: [[ Put]] (P, V) + Description: + Array objects use a variation of the [[Put]] method used for other native + ECMAScript objects (section 8.6.2.2). + + Assume A is an Array object and P is a string. + + When the [[Put]] method of A is called with property P and value V, the + following steps are taken: + + 1. Call the [[CanPut]] method of A with name P. + 2. If Result(1) is false, return. + 3. If A doesn't have a property with name P, go to step 7. + 4. If P is "length", go to step 12. + 5. Set the value of property P of A to V. + 6. Go to step 8. + 7. Create a property with name P, set its value to V and give it empty + attributes. + 8. If P is not an array index, return. + 9. If A itself has a property (not an inherited property) named "length", + andToUint32(P) is less than the value of the length property of A, then + return. + 10. Change (or set) the value of the length property of A to ToUint32(P)+1. + 11. Return. + 12. Compute ToUint32(V). + 13. For every integer k that is less than the value of the length property + of A but not less than Result(12), if A itself has a property (not an + inherited property) named ToString(k), then delete that property. + 14. Set the value of property P of A to Result(12). + 15. Return. + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.4.5.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array [[Put]] (P, V)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +// P is "length" + +new TestCase( SECTION, + "var A = new Array(); A.length = 1000; A.length", + 1000, + eval("var A = new Array(); A.length = 1000; A.length") ); + +// A has Property P, and P is not length or an array index +new TestCase( SECTION, + "var A = new Array(1000); A.name = 'name of this array'; A.name", + 'name of this array', + eval("var A = new Array(1000); A.name = 'name of this array'; A.name") ); + +new TestCase( SECTION, + "var A = new Array(1000); A.name = 'name of this array'; A.length", + 1000, + eval("var A = new Array(1000); A.name = 'name of this array'; A.length") ); + + +// A has Property P, P is not length, P is an array index, and ToUint32(p) is less than the +// value of length + +new TestCase( SECTION, + "var A = new Array(1000); A[123] = 'hola'; A[123]", + 'hola', + eval("var A = new Array(1000); A[123] = 'hola'; A[123]") ); + +new TestCase( SECTION, + "var A = new Array(1000); A[123] = 'hola'; A.length", + 1000, + eval("var A = new Array(1000); A[123] = 'hola'; A.length") ); + + +for ( var i = 0X0020, TEST_STRING = "var A = new Array( " ; i < 0x00ff; i++ ) { + if (i === "u".charCodeAt(0) || i === "x".charCodeAt(0)) + continue; + TEST_STRING += "\'\\"+ String.fromCharCode( i ) +"\'"; + if ( i < 0x00FF - 1 ) { + TEST_STRING += ","; + } else { + TEST_STRING += ");" + } +} + +var LENGTH = 0x00ff - 0x0020 - 2 /* "u"/"x" exclusions above */; + +new TestCase( SECTION, + TEST_STRING +" A[150] = 'hello'; A[150]", + 'hello', + eval( TEST_STRING + " A[150] = 'hello'; A[150]" ) ); + +new TestCase( SECTION, + TEST_STRING +" A[150] = 'hello'; A[150]", + LENGTH, + eval( TEST_STRING + " A[150] = 'hello'; A.length" ) ); + +// A has Property P, P is not length, P is an array index, and ToUint32(p) is not less than the +// value of length + +new TestCase( SECTION, + "var A = new Array(); A[123] = true; A.length", + 124, + eval("var A = new Array(); A[123] = true; A.length") ); + +new TestCase( SECTION, + "var A = new Array(0,1,2,3,4,5,6,7,8,9,10); A[15] ='15'; A.length", + 16, + eval("var A = new Array(0,1,2,3,4,5,6,7,8,9,10); A[15] ='15'; A.length") ); + +for ( var i = 0; i < A.length; i++ ) { + new TestCase( SECTION, + "var A = new Array(0,1,2,3,4,5,6,7,8,9,10); A[15] ='15'; A[" +i +"]", + (i <= 10) ? i : ( i == 15 ? '15' : void 0 ), + A[i] ); +} +// P is not an array index, and P is not "length" + +new TestCase( SECTION, + "var A = new Array(); A.join.length = 4; A.join.length", + 1, + eval("var A = new Array(); A.join.length = 4; A.join.length") ); + +new TestCase( SECTION, + "var A = new Array(); A.join.length = 4; A.length", + 0, + eval("var A = new Array(); A.join.length = 4; A.length") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Array/15.4.5.1-2.js b/source/spidermonkey-tests/ecma/Array/15.4.5.1-2.js new file mode 100644 index 00000000..6cb93fc3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.5.1-2.js @@ -0,0 +1,118 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.5.1-2.js + ECMA Section: [[ Put]] (P, V) + Description: + Array objects use a variation of the [[Put]] method used for other native + ECMAScript objects (section 8.6.2.2). + + Assume A is an Array object and P is a string. + + When the [[Put]] method of A is called with property P and value V, the + following steps are taken: + + 1. Call the [[CanPut]] method of A with name P. + 2. If Result(1) is false, return. + 3. If A doesn't have a property with name P, go to step 7. + 4. If P is "length", go to step 12. + 5. Set the value of property P of A to V. + 6. Go to step 8. + 7. Create a property with name P, set its value to V and give it empty + attributes. + 8. If P is not an array index, return. + 9. If A itself has a property (not an inherited property) named "length", + andToUint32(P) is less than the value of the length property of A, then + return. + 10. Change (or set) the value of the length property of A to ToUint32(P)+1. + 11. Return. + 12. Compute ToUint32(V). + 13. For every integer k that is less than the value of the length property + of A but not less than Result(12), if A itself has a property (not an + inherited property) named ToString(k), then delete that property. + 14. Set the value of property P of A to Result(12). + 15. Return. + + + These are gTestcases from Waldemar, detailed in + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=123552 + + Author: christine@netscape.com + Date: 15 June 1998 +*/ + +var SECTION = "15.4.5.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array [[Put]] (P,V)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = new Array(); + +AddCase( "3.00", "three" ); +AddCase( "00010", "eight" ); +AddCase( "37xyz", "thirty-five" ); +AddCase("5000000000", 5) + AddCase( "-2", -3 ); + +new TestCase( SECTION, + "a[10]", + void 0, + a[10] ); + +new TestCase( SECTION, + "a[3]", + void 0, + a[3] ); + +a[4] = "four"; + +new TestCase( SECTION, + "a[4] = \"four\"; a[4]", + "four", + a[4] ); + +new TestCase( SECTION, + "a[\"4\"]", + "four", + a["4"] ); + +new TestCase( SECTION, + "a[\"4.00\"]", + void 0, + a["4.00"] ); + +new TestCase( SECTION, + "a.length", + 5, + a.length ); + + +a["5000000000"] = 5; + +new TestCase( SECTION, + "a[\"5000000000\"] = 5; a.length", + 5, + a.length ); + +new TestCase( SECTION, + "a[\"-2\"] = -3; a.length", + 5, + a.length ); + +test(); + +function AddCase ( arg, value ) { + + a[arg] = value; + + new TestCase( SECTION, + "a[\"" + arg + "\"] = "+ value +"; a.length", + 0, + a.length ); +} diff --git a/source/spidermonkey-tests/ecma/Array/15.4.5.2-1.js b/source/spidermonkey-tests/ecma/Array/15.4.5.2-1.js new file mode 100644 index 00000000..767c85c6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.5.2-1.js @@ -0,0 +1,52 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.5.2-1.js + ECMA Section: Array.length + Description: + 15.4.5.2 length + The length property of this Array object is always numerically greater + than the name of every property whose name is an array index. + + The length property has the attributes { DontEnum, DontDelete }. + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.4.5.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.length"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var A = new Array(); A.length", + 0, + eval("var A = new Array(); A.length") ); +new TestCase( SECTION, + "var A = new Array(); A[Math.pow(2,32)-2] = 'hi'; A.length", + Math.pow(2,32)-1, + eval("var A = new Array(); A[Math.pow(2,32)-2] = 'hi'; A.length") ); +new TestCase( SECTION, + "var A = new Array(); A.length = 123; A.length", + 123, + eval("var A = new Array(); A.length = 123; A.length") ); +new TestCase( SECTION, + "var A = new Array(); A.length = 123; var PROPS = ''; for ( var p in A ) { PROPS += ( p == 'length' ? p : ''); } PROPS", + "", + eval("var A = new Array(); A.length = 123; var PROPS = ''; for ( var p in A ) { PROPS += ( p == 'length' ? p : ''); } PROPS") ); +new TestCase( SECTION, + "var A = new Array(); A.length = 123; delete A.length", + false , + eval("var A = new Array(); A.length = 123; delete A.length") ); +new TestCase( SECTION, + "var A = new Array(); A.length = 123; delete A.length; A.length", + 123, + eval("var A = new Array(); A.length = 123; delete A.length; A.length") ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Array/15.4.5.2-2.js b/source/spidermonkey-tests/ecma/Array/15.4.5.2-2.js new file mode 100644 index 00000000..7a21410b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/15.4.5.2-2.js @@ -0,0 +1,93 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.5.2-2.js + ECMA Section: Array.length + Description: + 15.4.5.2 length + The length property of this Array object is always numerically greater + than the name of every property whose name is an array index. + + The length property has the attributes { DontEnum, DontDelete }. + + This test verifies that the Array.length property is not Read Only. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.4.5.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Array.length"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addCase( new Array(), 0, Math.pow(2,14), Math.pow(2,14) ); + +addCase( new Array(), 0, 1, 1 ); + +addCase( new Array(Math.pow(2,12)), Math.pow(2,12), 0, 0 ); +addCase( new Array(Math.pow(2,13)), Math.pow(2,13), Math.pow(2,12), Math.pow(2,12) ); +addCase( new Array(Math.pow(2,12)), Math.pow(2,12), Math.pow(2,12), Math.pow(2,12) ); +addCase( new Array(Math.pow(2,14)), Math.pow(2,14), Math.pow(2,12), Math.pow(2,12) ) + +// some tests where array is not empty +// array is populated with strings + for ( var arg = "", i = 0; i < Math.pow(2,12); i++ ) { + arg += String(i) + ( i != Math.pow(2,12)-1 ? "," : "" ); + + } +// print(i +":"+arg); + +var a = eval( "new Array("+arg+")" ); + +addCase( a, i, i, i ); +addCase( a, i, Math.pow(2,12)+i+1, Math.pow(2,12)+i+1, true ); +addCase( a, Math.pow(2,12)+5, 0, 0, true ); + +test(); + +function addCase( object, old_len, set_len, new_len, checkitems ) { + object.length = set_len; + + new TestCase( SECTION, + "array = new Array("+ old_len+"); array.length = " + set_len + + "; array.length", + new_len, + object.length ); + + if ( checkitems ) { + // verify that items between old and newlen are all undefined + if ( new_len < old_len ) { + var passed = true; + for ( var i = new_len; i < old_len; i++ ) { + if ( object[i] != void 0 ) { + passed = false; + } + } + new TestCase( SECTION, + "verify that array items have been deleted", + true, + passed ); + } + if ( new_len > old_len ) { + var passed = true; + for ( var i = old_len; i < new_len; i++ ) { + if ( object[i] != void 0 ) { + passed = false; + } + } + new TestCase( SECTION, + "verify that new items are undefined", + true, + passed ); + } + } + +} + diff --git a/source/spidermonkey-tests/ecma/Array/array-length-set-on-nonarray.js b/source/spidermonkey-tests/ecma/Array/array-length-set-on-nonarray.js new file mode 100644 index 00000000..bc47c747 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Array/array-length-set-on-nonarray.js @@ -0,0 +1,26 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 548671; +var summary = + "Don't use a shared-permanent inherited property to implement " + + "[].length or (function(){}).length"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var a = []; +a.p = 1; +var x = Object.create(a); +assertEq(x.length, 0); +assertEq(x.p, 1); +assertEq(a.length, 0); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma/Array/browser.js b/source/spidermonkey-tests/ecma/Array/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Array/shell.js b/source/spidermonkey-tests/ecma/Array/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.1.js b/source/spidermonkey-tests/ecma/Boolean/15.6.1.js new file mode 100644 index 00000000..8725c978 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.1.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.1.js + ECMA Section: 15.6.1 The Boolean Function + 15.6.1.1 Boolean( value ) + 15.6.1.2 Boolean () + Description: Boolean( value ) should return a Boolean value + not a Boolean object) computed by + Boolean.toBooleanValue( value) + + 15.6.1.2 Boolean() returns false + + Author: christine@netscape.com + Date: 27 jun 1997 + + + Data File Fields: + VALUE Argument passed to the Boolean function + TYPE typeof VALUE (not used, but helpful in understanding + the data file) + E_RETURN Expected return value of Boolean( VALUE ) +*/ +var SECTION = "15.6.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Boolean constructor called as a function: Boolean( value ) and Boolean()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var array = new Array(); +var item = 0; + +new TestCase( SECTION, "Boolean(1)", true, Boolean(1) ); +new TestCase( SECTION, "Boolean(0)", false, Boolean(0) ); +new TestCase( SECTION, "Boolean(-1)", true, Boolean(-1) ); +new TestCase( SECTION, "Boolean('1')", true, Boolean("1") ); +new TestCase( SECTION, "Boolean('0')", true, Boolean("0") ); +new TestCase( SECTION, "Boolean('-1')", true, Boolean("-1") ); +new TestCase( SECTION, "Boolean(true)", true, Boolean(true) ); +new TestCase( SECTION, "Boolean(false)", false, Boolean(false) ); + +new TestCase( SECTION, "Boolean('true')", true, Boolean("true") ); +new TestCase( SECTION, "Boolean('false')", true, Boolean("false") ); +new TestCase( SECTION, "Boolean(null)", false, Boolean(null) ); + +new TestCase( SECTION, "Boolean(-Infinity)", true, Boolean(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "Boolean(NaN)", false, Boolean(Number.NaN) ); +new TestCase( SECTION, "Boolean(void(0))", false, Boolean( void(0) ) ); +new TestCase( SECTION, "Boolean(x=0)", false, Boolean( x=0 ) ); +new TestCase( SECTION, "Boolean(x=1)", true, Boolean( x=1 ) ); +new TestCase( SECTION, "Boolean(x=false)", false, Boolean( x=false ) ); +new TestCase( SECTION, "Boolean(x=true)", true, Boolean( x=true ) ); +new TestCase( SECTION, "Boolean(x=null)", false, Boolean( x=null ) ); +new TestCase( SECTION, "Boolean()", false, Boolean() ); +// array[item++] = new TestCase( SECTION, "Boolean(var someVar)", false, Boolean( someVar ) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.2.js b/source/spidermonkey-tests/ecma/Boolean/15.6.2.js new file mode 100644 index 00000000..781e3961 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.2.js @@ -0,0 +1,127 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.2.js + ECMA Section: 15.6.2 The Boolean Constructor + 15.6.2.1 new Boolean( value ) + 15.6.2.2 new Boolean() + + This test verifies that the Boolean constructor + initializes a new object (typeof should return + "object"). The prototype of the new object should + be Boolean.prototype. The value of the object + should be ToBoolean( value ) (a boolean value). + + Description: + Author: christine@netscape.com + Date: june 27, 1997 + +*/ +var SECTION = "15.6.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "15.6.2 The Boolean Constructor; 15.6.2.1 new Boolean( value ); 15.6.2.2 new Boolean()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var array = new Array(); +var item = 0; + +new TestCase( SECTION, "typeof (new Boolean(1))", "object", typeof (new Boolean(1)) ); +new TestCase( SECTION, "(new Boolean(1)).constructor", Boolean.prototype.constructor, (new Boolean(1)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(1)).valueOf()", true, (new Boolean(1)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(1)", "object", typeof new Boolean(1) ); +new TestCase( SECTION, "(new Boolean(0)).constructor", Boolean.prototype.constructor, (new Boolean(0)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(0)).valueOf()", false, (new Boolean(0)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(0)", "object", typeof new Boolean(0) ); +new TestCase( SECTION, "(new Boolean(-1)).constructor", Boolean.prototype.constructor, (new Boolean(-1)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(-1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(-1);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(-1)).valueOf()", true, (new Boolean(-1)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(-1)", "object", typeof new Boolean(-1) ); +new TestCase( SECTION, "(new Boolean('1')).constructor", Boolean.prototype.constructor, (new Boolean('1')).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean('1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean('1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean('1')).valueOf()", true, (new Boolean('1')).valueOf() ); +new TestCase( SECTION, "typeof new Boolean('1')", "object", typeof new Boolean('1') ); +new TestCase( SECTION, "(new Boolean('0')).constructor", Boolean.prototype.constructor, (new Boolean('0')).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean('0');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean('0');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean('0')).valueOf()", true, (new Boolean('0')).valueOf() ); +new TestCase( SECTION, "typeof new Boolean('0')", "object", typeof new Boolean('0') ); +new TestCase( SECTION, "(new Boolean('-1')).constructor", Boolean.prototype.constructor, (new Boolean('-1')).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean('-1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean('-1');TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean('-1')).valueOf()", true, (new Boolean('-1')).valueOf() ); +new TestCase( SECTION, "typeof new Boolean('-1')", "object", typeof new Boolean('-1') ); +new TestCase( SECTION, "(new Boolean(new Boolean(true))).constructor", Boolean.prototype.constructor, (new Boolean(new Boolean(true))).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(new Boolean(true));TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(new Boolean(true));TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(new Boolean(true))).valueOf()", true, (new Boolean(new Boolean(true))).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(new Boolean(true))", "object", typeof new Boolean(new Boolean(true)) ); +new TestCase( SECTION, "(new Boolean(Number.NaN)).constructor", Boolean.prototype.constructor, (new Boolean(Number.NaN)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(Number.NaN);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(Number.NaN);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(Number.NaN)).valueOf()", false, (new Boolean(Number.NaN)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(Number.NaN)", "object", typeof new Boolean(Number.NaN) ); +new TestCase( SECTION, "(new Boolean(null)).constructor", Boolean.prototype.constructor, (new Boolean(null)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(null);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(null);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(null)).valueOf()", false, (new Boolean(null)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(null)", "object", typeof new Boolean(null) ); +new TestCase( SECTION, "(new Boolean(void 0)).constructor", Boolean.prototype.constructor, (new Boolean(void 0)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(void 0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(void 0);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(void 0)).valueOf()", false, (new Boolean(void 0)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(void 0)", "object", typeof new Boolean(void 0) ); +new TestCase( SECTION, "(new Boolean(Number.POSITIVE_INFINITY)).constructor", Boolean.prototype.constructor, (new Boolean(Number.POSITIVE_INFINITY)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(Number.POSITIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(Number.POSITIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(Number.POSITIVE_INFINITY)).valueOf()", true, (new Boolean(Number.POSITIVE_INFINITY)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(Number.POSITIVE_INFINITY)", "object", typeof new Boolean(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "(new Boolean(Number.NEGATIVE_INFINITY)).constructor", Boolean.prototype.constructor, (new Boolean(Number.NEGATIVE_INFINITY)).constructor ); +new TestCase( SECTION, + "TESTBOOL=new Boolean(Number.NEGATIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean(Number.NEGATIVE_INFINITY);TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( SECTION, "(new Boolean(Number.NEGATIVE_INFINITY)).valueOf()", true, (new Boolean(Number.NEGATIVE_INFINITY)).valueOf() ); +new TestCase( SECTION, "typeof new Boolean(Number.NEGATIVE_INFINITY)", "object", typeof new Boolean(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "(new Boolean(Number.NEGATIVE_INFINITY)).constructor", Boolean.prototype.constructor, (new Boolean(Number.NEGATIVE_INFINITY)).constructor ); +new TestCase( "15.6.2.2", + "TESTBOOL=new Boolean();TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()", + "[object Boolean]", + eval("TESTBOOL=new Boolean();TESTBOOL.toString=Object.prototype.toString;TESTBOOL.toString()") ); +new TestCase( "15.6.2.2", "(new Boolean()).valueOf()", false, (new Boolean()).valueOf() ); +new TestCase( "15.6.2.2", "typeof new Boolean()", "object", typeof new Boolean() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-1.js b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-1.js new file mode 100644 index 00000000..5ab8d98c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-1.js @@ -0,0 +1,38 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.3.1-1.js + ECMA Section: 15.6.3 Boolean.prototype + + Description: The initial value of Boolean.prototype is the built-in + Boolean prototype object (15.6.4). + + The property shall have the attributes [DontEnum, + DontDelete, ReadOnly ]. + + This tests the DontEnum property of Boolean.prototype + + Author: christine@netscape.com + Date: june 27, 1997 + +*/ +var SECTION = "15.6.3.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var array = new Array(); +var item = 0; + +new TestCase( SECTION, + "var str='';for ( p in Boolean ) { str += p } str;", + "", + eval("var str='';for ( p in Boolean ) { str += p } str;") ); +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-2.js b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-2.js new file mode 100644 index 00000000..ae9a52da --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-2.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.3.1-2.js + ECMA Section: 15.6.3.1 Boolean.prototype + + Description: The initial valu eof Boolean.prototype is the built-in + Boolean prototype object (15.6.4). + + The property shall have the attributes [DontEnum, + DontDelete, ReadOnly ]. + + This tests the DontDelete property of Boolean.prototype + + Author: christine@netscape.com + Date: june 27, 1997 + +*/ +var SECTION = "15.6.3.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype" + writeHeaderToLog( SECTION + TITLE ); + +var array = new Array(); +var item = 0; + +new TestCase( SECTION, + "delete( Boolean.prototype)", + false, + delete( Boolean.prototype) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-3.js b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-3.js new file mode 100644 index 00000000..f682294f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-3.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.3.1-3.js + ECMA Section: 15.6.3.1 Boolean.prototype + + Description: The initial valu eof Boolean.prototype is the built-in + Boolean prototype object (15.6.4). + + The property shall have the attributes [DontEnum, + DontDelete, ReadOnly ]. + + This tests the DontDelete property of Boolean.prototype + + Author: christine@netscape.com + Date: june 27, 1997 + +*/ +var SECTION = "15.6.3.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype" + writeHeaderToLog( SECTION + TITLE ); + +var array = new Array(); +var item = 0; + +new TestCase( SECTION, + "delete( Boolean.prototype); Boolean.prototype", + Boolean.prototype, + eval("delete( Boolean.prototype); Boolean.prototype") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-4.js b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-4.js new file mode 100644 index 00000000..baca269f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1-4.js @@ -0,0 +1,41 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.3.1-4.js + ECMA Section: 15.6.3.1 Properties of the Boolean Prototype Object + + Description: The initial value of Boolean.prototype is the built-in + Boolean prototype object (15.6.4). + + The property shall have the attributes [DontEnum, + DontDelete, ReadOnly ]. + + This tests the ReadOnly property of Boolean.prototype + + Author: christine@netscape.com + Date: 30 september 1997 + +*/ +var SECTION = "15.6.3.1-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype" + writeHeaderToLog( SECTION + TITLE ); + +var BOOL_PROTO = Boolean.prototype; + +new TestCase( SECTION, + "var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == BOOL_PROTO", + true, + eval("var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == BOOL_PROTO") ); + +new TestCase( SECTION, + "var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == null", + false, + eval("var BOOL_PROTO = Boolean.prototype; Boolean.prototype=null; Boolean.prototype == null") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.3.1.js b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1.js new file mode 100644 index 00000000..b4752435 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.3.1.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.3.1.js + ECMA Section: 15.6.3.1 Boolean.prototype + + Description: The initial valu eof Boolean.prototype is the built-in + Boolean prototype object (15.6.4). + + The property shall have the attributes [DontEnum, + DontDelete, ReadOnly ]. + + It has the internal [[Call]] and [[Construct]] + properties (not tested), and the length property. + + Author: christine@netscape.com + Date: june 27, 1997 + +*/ + +var SECTION = "15.6.3.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "Boolean.prototype.valueOf()", false, Boolean.prototype.valueOf() ); +new TestCase( SECTION, "Boolean.length", 1, Boolean.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4-1.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4-1.js new file mode 100644 index 00000000..e1e53b5c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4-1.js @@ -0,0 +1,38 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4-1.js + ECMA Section: 15.6.4 Properties of the Boolean Prototype Object + + Description: + The Boolean prototype object is itself a Boolean object (its [[Class]] is + "Boolean") whose value is false. + + The value of the internal [[Prototype]] property of the Boolean prototype object + is the Object prototype object (15.2.3.1). + + Author: christine@netscape.com + Date: 30 september 1997 + +*/ + + +var VERSION = "ECMA_1" + startTest(); +var SECTION = "15.6.4-1"; + +writeHeaderToLog( SECTION + " Properties of the Boolean Prototype Object"); + +new TestCase( SECTION, "typeof Boolean.prototype == typeof( new Boolean )", true, typeof Boolean.prototype == typeof( new Boolean ) ); +new TestCase( SECTION, "typeof( Boolean.prototype )", "object", typeof(Boolean.prototype) ); +new TestCase( SECTION, + "Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()", + "[object Boolean]", + eval("Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()") ); +new TestCase( SECTION, "Boolean.prototype.valueOf()", false, Boolean.prototype.valueOf() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.1.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.1.js new file mode 100644 index 00000000..d2cf73c9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.1.js @@ -0,0 +1,28 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.1.js + ECMA Section: 15.6.4.1 Boolean.prototype.constructor + + Description: The initial value of Boolean.prototype.constructor + is the built-in Boolean constructor. + + Author: christine@netscape.com + Date: 30 september 1997 + +*/ +var SECTION = "15.6.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.constructor" + writeHeaderToLog( SECTION + TITLE ); + +new TestCase( SECTION, + "( Boolean.prototype.constructor == Boolean )", + true , + (Boolean.prototype.constructor == Boolean) ); +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-1.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-1.js new file mode 100644 index 00000000..f2f3e1a4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-1.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.2.js + ECMA Section: 15.6.4.2-1 Boolean.prototype.toString() + Description: If this boolean value is true, then the string "true" + is returned; otherwise this boolean value must be false, + and the string "false" is returned. + + The toString function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + +var SECTION = "15.6.4.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.toString()" + writeHeaderToLog( SECTION + TITLE ); + + +new TestCase( SECTION, "new Boolean(1)", "true", (new Boolean(1)).toString() ); +new TestCase( SECTION, "new Boolean(0)", "false", (new Boolean(0)).toString() ); +new TestCase( SECTION, "new Boolean(-1)", "true", (new Boolean(-1)).toString() ); +new TestCase( SECTION, "new Boolean('1')", "true", (new Boolean("1")).toString() ); +new TestCase( SECTION, "new Boolean('0')", "true", (new Boolean("0")).toString() ); +new TestCase( SECTION, "new Boolean(true)", "true", (new Boolean(true)).toString() ); +new TestCase( SECTION, "new Boolean(false)", "false", (new Boolean(false)).toString() ); +new TestCase( SECTION, "new Boolean('true')", "true", (new Boolean('true')).toString() ); +new TestCase( SECTION, "new Boolean('false')", "true", (new Boolean('false')).toString() ); + +new TestCase( SECTION, "new Boolean('')", "false", (new Boolean('')).toString() ); +new TestCase( SECTION, "new Boolean(null)", "false", (new Boolean(null)).toString() ); +new TestCase( SECTION, "new Boolean(void(0))", "false", (new Boolean(void(0))).toString() ); +new TestCase( SECTION, "new Boolean(-Infinity)", "true", (new Boolean(Number.NEGATIVE_INFINITY)).toString() ); +new TestCase( SECTION, "new Boolean(NaN)", "false", (new Boolean(Number.NaN)).toString() ); +new TestCase( SECTION, "new Boolean()", "false", (new Boolean()).toString() ); +new TestCase( SECTION, "new Boolean(x=1)", "true", (new Boolean(x=1)).toString() ); +new TestCase( SECTION, "new Boolean(x=0)", "false", (new Boolean(x=0)).toString() ); +new TestCase( SECTION, "new Boolean(x=false)", "false", (new Boolean(x=false)).toString() ); +new TestCase( SECTION, "new Boolean(x=true)", "true", (new Boolean(x=true)).toString() ); +new TestCase( SECTION, "new Boolean(x=null)", "false", (new Boolean(x=null)).toString() ); +new TestCase( SECTION, "new Boolean(x='')", "false", (new Boolean(x="")).toString() ); +new TestCase( SECTION, "new Boolean(x=' ')", "true", (new Boolean(x=" ")).toString() ); + +new TestCase( SECTION, "new Boolean(new MyObject(true))", "true", (new Boolean(new MyObject(true))).toString() ); +new TestCase( SECTION, "new Boolean(new MyObject(false))", "true", (new Boolean(new MyObject(false))).toString() ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); + return this; +} diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-2.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-2.js new file mode 100644 index 00000000..93c6ba4b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-2.js @@ -0,0 +1,39 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.2-2.js + ECMA Section: 15.6.4.2 Boolean.prototype.toString() + Description: Returns this boolean value. + + The toString function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + +var SECTION = "15.6.4.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.toString()" + writeHeaderToLog( SECTION + TITLE ); + +new TestCase( SECTION, + "tostr=Boolean.prototype.toString; x=new Boolean(); x.toString=tostr;x.toString()", + "false", + eval("tostr=Boolean.prototype.toString; x=new Boolean(); x.toString=tostr;x.toString()") ); +new TestCase( SECTION, + "tostr=Boolean.prototype.toString; x=new Boolean(true); x.toString=tostr; x.toString()", + "true", + eval("tostr=Boolean.prototype.toString; x=new Boolean(true); x.toString=tostr; x.toString()") ); +new TestCase( SECTION, + "tostr=Boolean.prototype.toString; x=new Boolean(false); x.toString=tostr;x.toString()", + "false", + eval("tostr=Boolean.prototype.toString; x=new Boolean(); x.toString=tostr;x.toString()") ); +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-3.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-3.js new file mode 100644 index 00000000..1dbb63af --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-3.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.2-3.js + ECMA Section: 15.6.4.2 Boolean.prototype.toString() + Description: Returns this boolean value. + + The toString function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + + +var SECTION = "15.6.4.2-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.toString()" + writeHeaderToLog( SECTION + TITLE ); + +new TestCase( SECTION, "tostr=Boolean.prototype.toString; x=true; x.toString=tostr;x.toString()", "true", eval("tostr=Boolean.prototype.toString; x=true; x.toString=tostr;x.toString()") ); +new TestCase( SECTION, "tostr=Boolean.prototype.toString; x=false; x.toString=tostr;x.toString()", "false", eval("tostr=Boolean.prototype.toString; x=false; x.toString=tostr;x.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-4-n.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-4-n.js new file mode 100644 index 00000000..3539a80c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.2-4-n.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.2-4.js + ECMA Section: 15.6.4.2 Boolean.prototype.toString() + Description: Returns this boolean value. + + The toString function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + +var SECTION = "15.6.4.2-4-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.toString()"; +writeHeaderToLog( SECTION +" "+ TITLE ); + +DESCRIPTION = "tostr=Boolean.prototype.toString; x=new String( 'hello' ); x.toString=tostr; x.toString()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "tostr=Boolean.prototype.toString; x=new String( 'hello' ); x.toString=tostr; x.toString()", + "error", + eval("tostr=Boolean.prototype.toString; x=new String( 'hello' ); x.toString=tostr; x.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-1.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-1.js new file mode 100644 index 00000000..8f139f94 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-1.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.3.js + ECMA Section: 15.6.4.3 Boolean.prototype.valueOf() + Description: Returns this boolean value. + + The valueOf function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + +var SECTION = "15.6.4.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.valueOf()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "new Boolean(1)", true, (new Boolean(1)).valueOf() ); + +new TestCase( SECTION, "new Boolean(0)", false, (new Boolean(0)).valueOf() ); +new TestCase( SECTION, "new Boolean(-1)", true, (new Boolean(-1)).valueOf() ); +new TestCase( SECTION, "new Boolean('1')", true, (new Boolean("1")).valueOf() ); +new TestCase( SECTION, "new Boolean('0')", true, (new Boolean("0")).valueOf() ); +new TestCase( SECTION, "new Boolean(true)", true, (new Boolean(true)).valueOf() ); +new TestCase( SECTION, "new Boolean(false)", false, (new Boolean(false)).valueOf() ); +new TestCase( SECTION, "new Boolean('true')", true, (new Boolean("true")).valueOf() ); +new TestCase( SECTION, "new Boolean('false')", true, (new Boolean('false')).valueOf() ); + +new TestCase( SECTION, "new Boolean('')", false, (new Boolean('')).valueOf() ); +new TestCase( SECTION, "new Boolean(null)", false, (new Boolean(null)).valueOf() ); +new TestCase( SECTION, "new Boolean(void(0))", false, (new Boolean(void(0))).valueOf() ); +new TestCase( SECTION, "new Boolean(-Infinity)", true, (new Boolean(Number.NEGATIVE_INFINITY)).valueOf() ); +new TestCase( SECTION, "new Boolean(NaN)", false, (new Boolean(Number.NaN)).valueOf() ); +new TestCase( SECTION, "new Boolean()", false, (new Boolean()).valueOf() ); + +new TestCase( SECTION, "new Boolean(x=1)", true, (new Boolean(x=1)).valueOf() ); +new TestCase( SECTION, "new Boolean(x=0)", false, (new Boolean(x=0)).valueOf() ); +new TestCase( SECTION, "new Boolean(x=false)", false, (new Boolean(x=false)).valueOf() ); +new TestCase( SECTION, "new Boolean(x=true)", true, (new Boolean(x=true)).valueOf() ); +new TestCase( SECTION, "new Boolean(x=null)", false, (new Boolean(x=null)).valueOf() ); +new TestCase( SECTION, "new Boolean(x='')", false, (new Boolean(x="")).valueOf() ); +new TestCase( SECTION, "new Boolean(x=' ')", true, (new Boolean(x=" ")).valueOf() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-2.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-2.js new file mode 100644 index 00000000..52752411 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-2.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.3-2.js + ECMA Section: 15.6.4.3 Boolean.prototype.valueOf() + Description: Returns this boolean value. + + The valueOf function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + +var SECTION = "15.6.4.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.valueOf()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, "valof=Boolean.prototype.valueOf; x=new Boolean(); x.valueOf=valof;x.valueOf()", false, eval("valof=Boolean.prototype.valueOf; x=new Boolean(); x.valueOf=valof;x.valueOf()") ); + +new TestCase( SECTION, "valof=Boolean.prototype.valueOf; x=new Boolean(true); x.valueOf=valof;x.valueOf()", true, eval("valof=Boolean.prototype.valueOf; x=new Boolean(true); x.valueOf=valof;x.valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-3.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-3.js new file mode 100644 index 00000000..06d7ecb8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-3.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.3-3.js + ECMA Section: 15.6.4.3 Boolean.prototype.valueOf() + Description: Returns this boolean value. + + The valueOf function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + +var SECTION = "15.6.4.3-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.valueOf()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "x=true; x.valueOf=Boolean.prototype.valueOf;x.valueOf()", + true, + eval("x=true; x.valueOf=Boolean.prototype.valueOf;x.valueOf()") ); +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-4-n.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-4-n.js new file mode 100644 index 00000000..cdba1210 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3-4-n.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.3-4.js + ECMA Section: 15.6.4.3 Boolean.prototype.valueOf() + Description: Returns this boolean value. + + The valueOf function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ +var SECTION = "15.6.4.3-4-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean.prototype.valueOf()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "valof=Boolean.prototype.valueOf; x=new String( 'hello' ); x.valueOf=valof;x.valueOf()" + EXPECTED = "error"; + +new TestCase( SECTION, + "valof=Boolean.prototype.valueOf; x=new String( 'hello' ); x.valueOf=valof;x.valueOf()", + "error", + eval("valof=Boolean.prototype.valueOf; x=new String( 'hello' ); x.valueOf=valof;x.valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.3.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3.js new file mode 100644 index 00000000..ca622ebb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.3.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.3.js + ECMA Section: 15.6.4.3 Boolean.prototype.valueOf() + Description: Returns this boolean value. + + The valueOf function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ + + + +new TestCase( "15.8.6.4", "new Boolean(1)", true, (new Boolean(1)).valueOf() ); + +new TestCase( "15.8.6.4", "new Boolean(0)", false, (new Boolean(0)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(-1)", true, (new Boolean(-1)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean('1')", true, (new Boolean("1")).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean('0')", true, (new Boolean("0")).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(true)", true, (new Boolean(true)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(false)", false, (new Boolean(false)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean('true')", true, (new Boolean("true")).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean('false')", true, (new Boolean('false')).valueOf() ); + +new TestCase( "15.8.6.4", "new Boolean('')", false, (new Boolean('')).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(null)", false, (new Boolean(null)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(void(0))", false, (new Boolean(void(0))).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(-Infinity)", true, (new Boolean(Number.NEGATIVE_INFINITY)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(NaN)", false, (new Boolean(Number.NaN)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean()", false, (new Boolean()).valueOf() ); + +new TestCase( "15.8.6.4", "new Boolean(x=1)", true, (new Boolean(x=1)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(x=0)", false, (new Boolean(x=0)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(x=false)", false, (new Boolean(x=false)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(x=true)", true, (new Boolean(x=true)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(x=null)", false, (new Boolean(x=null)).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(x='')", false, (new Boolean(x="")).valueOf() ); +new TestCase( "15.8.6.4", "new Boolean(x=' ')", true, (new Boolean(x=" ")).valueOf() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/15.6.4.js b/source/spidermonkey-tests/ecma/Boolean/15.6.4.js new file mode 100644 index 00000000..df98a67e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Boolean/15.6.4.js @@ -0,0 +1,46 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4.js + ECMA Section: Properties of the Boolean Prototype Object + Description: + The Boolean prototype object is itself a Boolean object (its [[Class]] is " + Boolean") whose value is false. + + The value of the internal [[Prototype]] property of the Boolean prototype + object is the Object prototype object (15.2.3.1). + + In following descriptions of functions that are properties of the Boolean + prototype object, the phrase "this Boolean object" refers to the object that + is the this value for the invocation of the function; it is an error if + this does not refer to an object for which the value of the internal + [[Class]] property is "Boolean". Also, the phrase "this boolean value" + refers to the boolean value represented by this Boolean object, that is, + the value of the internal [[Value]] property of this Boolean object. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.6.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Boolean Prototype Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Boolean.prototype == false", + true, + Boolean.prototype == false ); + +new TestCase( SECTION, + "Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()", + "[object Boolean]", + eval("Boolean.prototype.toString = Object.prototype.toString; Boolean.prototype.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Boolean/browser.js b/source/spidermonkey-tests/ecma/Boolean/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Boolean/shell.js b/source/spidermonkey-tests/ecma/Boolean/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Date/15.9.1.1-1.js b/source/spidermonkey-tests/ecma/Date/15.9.1.1-1.js new file mode 100644 index 00000000..08032ae4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.1.1-1.js @@ -0,0 +1,61 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.1.1-1.js + ECMA Section: 15.9.1.1 Time Range + Description: + - leap seconds are ignored + - assume 86400000 ms / day + - numbers range fom +/- 9,007,199,254,740,991 + - ms precision for any instant that is within + approximately +/-285,616 years from 1 jan 1970 + UTC + - range of times supported is -100,000,000 days + to 100,000,000 days from 1 jan 1970 12:00 am + - time supported is 8.64e5*10e8 milliseconds from + 1 jan 1970 UTC (+/-273972.6027397 years) + + - this test generates its own data -- it does not + read data from a file. + Author: christine@netscape.com + Date: 7 july 1997 + + Static variables: + FOUR_HUNDRED_YEARS + +*/ + +// every one hundred years contains: +// 24 years with 366 days +// +// every four hundred years contains: +// 97 years with 366 days +// 303 years with 365 days +// +// 86400000*365*97 = 3067372800000 +// +86400000*366*303 = + 9555408000000 +// = 1.26227808e+13 +var FOUR_HUNDRED_YEARS = 1.26227808e+13; +var SECTION = "15.9.1.1-1"; + +writeHeaderToLog("15.9.1.1 Time Range"); + +var M_SECS; +var CURRENT_YEAR; + +for ( M_SECS = 0, CURRENT_YEAR = 1970; + M_SECS < 8640000000000000; + M_SECS += FOUR_HUNDRED_YEARS, CURRENT_YEAR += 400 ) { + + new TestCase( SECTION, + "new Date("+M_SECS+")", + CURRENT_YEAR, + (new Date( M_SECS)).getUTCFullYear() ); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.1.1-2.js b/source/spidermonkey-tests/ecma/Date/15.9.1.1-2.js new file mode 100644 index 00000000..3013265b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.1.1-2.js @@ -0,0 +1,56 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.1.1-2.js + ECMA Section: 15.9.1.1 Time Range + Description: + - leap seconds are ignored + - assume 86400000 ms / day + - numbers range fom +/- 9,007,199,254,740,991 + - ms precision for any instant that is within + approximately +/-285,616 years from 1 jan 1970 + UTC + - range of times supported is -100,000,000 days + to 100,000,000 days from 1 jan 1970 12:00 am + - time supported is 8.64e5*10e8 milliseconds from + 1 jan 1970 UTC (+/-273972.6027397 years) + Author: christine@netscape.com + Date: 9 july 1997 +*/ + +// every one hundred years contains: +// 24 years with 366 days +// +// every four hundred years contains: +// 97 years with 366 days +// 303 years with 365 days +// +// 86400000*366*97 = 3067372800000 +// +86400000*365*303 = + 9555408000000 +// = 1.26227808e+13 + +var FOUR_HUNDRED_YEARS = 1.26227808e+13; +var SECTION = "15.9.1.1-2"; + +writeHeaderToLog("15.9.1.1 Time Range"); + +var M_SECS; +var CURRENT_YEAR; + +for ( M_SECS = 0, CURRENT_YEAR = 1970; + M_SECS > -8640000000000000; + M_SECS -= FOUR_HUNDRED_YEARS, CURRENT_YEAR -= 400 ) { + + new TestCase( SECTION, + "new Date("+M_SECS+")", + CURRENT_YEAR, + (new Date( M_SECS )).getUTCFullYear() ); + +} + +test(); + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.1.13-1.js b/source/spidermonkey-tests/ecma/Date/15.9.1.13-1.js new file mode 100644 index 00000000..ff52d93d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.1.13-1.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.1.13-1.js + ECMA Section: 15.9.1.1 MakeDate(day, time) + Description: + + The operator MakeDate calculates a number of milliseconds from its + two arguments, which must be ECMAScript number values. This + operator functions as follows: + + 1. If day is not finite or time is not finite, return NaN. + + 2. Compute day * msPerDay + time. + + 3. Return Result(2). +*/ + +new TestCase( SECTION, + "MakeDate(Number.POSITIVE_INFINITY, 0)", + Number.NaN, + MakeDate(Number.POSITIVE_INFINITY, 0)); + +new TestCase( SECTION, + "MakeDate(Number.NEGATIVE_INFINITY, 0)", + Number.NaN, + MakeDate(Number.NEGATIVE_INFINITY, 0)); + +new TestCase( SECTION, + "MakeDate(0, Number.POSITIVE_INFINITY)", + Number.NaN, + MakeDate(0, Number.POSITIVE_INFINITY)); + +new TestCase( SECTION, + "MakeDate(0, Number.NEGATIVE_INFINITY)", + Number.NaN, + MakeDate(0, Number.NEGATIVE_INFINITY)); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.2.1.js b/source/spidermonkey-tests/ecma/Date/15.9.2.1.js new file mode 100644 index 00000000..0d9ce106 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.2.1.js @@ -0,0 +1,140 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.2.1.js + ECMA Section: 15.9.2.1 Date constructor used as a function + Date( year, month, date, hours, minutes, seconds, ms ) + Description: The arguments are accepted, but are completely ignored. + A string is created and returned as if by the + expression (new Date()).toString(). + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.9.2.1"; +var TITLE = "Date Constructor used as a function"; +var TYPEOF = "string"; +var TOLERANCE = 1000; + +writeHeaderToLog("15.9.2.1 The Date Constructor Called as a Function: " + + "Date( year, month, date, hours, minutes, seconds, ms )" ); + +// allow up to 1 second difference due to possibility +// the date may change by 1 second in between calls to Date + +var d1; +var d2; + +// Dates around 1970 + +d1 = new Date(); +d2 = Date.parse(Date(1970,0,1,0,0,0,0)); +new TestCase(SECTION, "Date(1970,0,1,0,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1969,11,31,15,59,59,999)); +new TestCase(SECTION, "Date(1969,11,31,15,59,59,999)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1969,11,31,16,0,0,0)); +new TestCase(SECTION, "Date(1969,11,31,16,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1969,11,31,16,0,0,1)); +new TestCase(SECTION, "Date(1969,11,31,16,0,0,1)", true, d2 - d1 <= 1000); + +// Dates around 2000 +d1 = new Date(); +d2 = Date.parse(Date(1999,11,15,59,59,999)); +new TestCase(SECTION, "Date(1999,11,15,59,59,999)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1999,11,16,0,0,0,0)); +new TestCase(SECTION, "Date(1999,11,16,0,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1999,11,31,23,59,59,999)); +new TestCase(SECTION, "Date(1999,11,31,23,59,59,999)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,0,0,0,0,0,0)); +new TestCase(SECTION, "Date(2000,0,1,0,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,0,0,0,0,0,1)); +new TestCase(SECTION, "Date(2000,0,1,0,0,0,1)", true, d2 - d1 <= 1000); + +// Dates around 1900 + +d1 = new Date(); +d2 = Date.parse(Date(1899,11,31,23,59,59,999)); +new TestCase(SECTION, "Date(1899,11,31,23,59,59,999)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1900,0,1,0,0,0,0)); +new TestCase(SECTION, "Date(1900,0,1,0,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1900,0,1,0,0,0,1)); +new TestCase(SECTION, "Date(1900,0,1,0,0,0,1)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1899,11,31,16,0,0,0,0)); +new TestCase(SECTION, "Date(1899,11,31,16,0,0,0,0)", true, d2 - d1 <= 1000); + +// Dates around feb 29, 2000 + +d1 = new Date(); +d2 = Date.parse(Date(2000,1,29,0,0,0,0)); +new TestCase(SECTION, "Date(2000,1,29,0,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,1,28,23,59,59,999)); +new TestCase(SECTION, "Date(2000,1,28,23,59,59,999)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,1,27,16,0,0,0)); +new TestCase(SECTION, "Date(2000,1,27,16,0,0,0)", true, d2 - d1 <= 1000); + +// Dates around jan 1, 2005 +d1 = new Date(); +d2 = Date.parse(Date(2004,11,31,23,59,59,999)); +new TestCase(SECTION, "Date(2004,11,31,23,59,59,999)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2005,0,1,0,0,0,0)); +new TestCase(SECTION, "Date(2005,0,1,0,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2005,0,1,0,0,0,1)); +new TestCase(SECTION, "Date(2005,0,1,0,0,0,1)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2004,11,31,16,0,0,0,0)); +new TestCase(SECTION, "Date(2004,11,31,16,0,0,0,0)", true, d2 - d1 <= 1000); + +// Dates around jan 1, 2032 +d1 = new Date(); +d2 = Date.parse(Date(2031,11,31,23,59,59,999)); +new TestCase(SECTION, "Date(2031,11,31,23,59,59,999)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2032,0,1,0,0,0,0)); +new TestCase(SECTION, "Date(2032,0,1,0,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2032,0,1,0,0,0,1)); +new TestCase(SECTION, "Date(2032,0,1,0,0,0,1)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2031,11,31,16,0,0,0,0)); +new TestCase(SECTION, "Date(2031,11,31,16,0,0,0,0)", true, d2 - d1 <= 1000); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.2.2-1.js b/source/spidermonkey-tests/ecma/Date/15.9.2.2-1.js new file mode 100644 index 00000000..af786a91 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.2.2-1.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.2.2.js + ECMA Section: 15.9.2.2 Date constructor used as a function + Date( year, month, date, hours, minutes, seconds ) + Description: The arguments are accepted, but are completely ignored. + A string is created and returned as if by the + expression (new Date()).toString(). + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ +var VERSION = 9706; +startTest(); +var SECTION = "15.9.2.2"; +var TOLERANCE = 100; +var TITLE = "The Date Constructor Called as a Function"; + +writeHeaderToLog(SECTION+" "+TITLE ); + +// allow up to 1 second difference due to possibility +// the date may change by 1 second in between calls to Date + +var d1; +var d2; + +// Dates around 1970 + +d1 = new Date(); +d2 = Date.parse(Date(1970,0,1,0,0,0)); +new TestCase(SECTION, "Date(1970,0,1,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1969,11,31,15,59,59)); +new TestCase(SECTION, "Date(1969,11,31,15,59,59)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1969,11,31,16,0,0)); +new TestCase(SECTION, "Date(1969,11,31,16,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1969,11,31,16,0,1)); +new TestCase(SECTION, "Date(1969,11,31,16,0,1)", true, d2 - d1 <= 1000); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.2.2-2.js b/source/spidermonkey-tests/ecma/Date/15.9.2.2-2.js new file mode 100644 index 00000000..6da589bc --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.2.2-2.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.2.2.js + ECMA Section: 15.9.2.2 Date constructor used as a function + Date( year, month, date, hours, minutes, seconds ) + Description: The arguments are accepted, but are completely ignored. + A string is created and returned as if by the + expression (new Date()).toString(). + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ +var VERSION = 9706; +startTest(); +var SECTION = "15.9.2.2"; +var TOLERANCE = 100; +var TITLE = "The Date Constructor Called as a Function"; + +writeHeaderToLog(SECTION+" "+TITLE ); + +// allow up to 1 second difference due to possibility +// the date may change by 1 second in between calls to Date + +var d1; +var d2; + +// Dates around 2000 +d1 = new Date(); +d2 = Date.parse(Date(1999,11,15,59,59)); +new TestCase( SECTION, "Date(1999,11,15,59,59)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1999,11,16,0,0,0)); +new TestCase( SECTION, "Date(1999,11,16,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1999,11,31,23,59,59)); +new TestCase( SECTION, "Date(1999,11,31,23,59,59)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,0,0,0,0,0)); +new TestCase( SECTION, "Date(2000,0,1,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,0,0,0,0,1)); +new TestCase( SECTION, "Date(2000,0,1,0,0,1)", true, d2 - d1 <= 1000) + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.2.2-3.js b/source/spidermonkey-tests/ecma/Date/15.9.2.2-3.js new file mode 100644 index 00000000..36459b9b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.2.2-3.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.2.2.js + ECMA Section: 15.9.2.2 Date constructor used as a function + Date( year, month, date, hours, minutes, seconds ) + Description: The arguments are accepted, but are completely ignored. + A string is created and returned as if by the + expression (new Date()).toString(). + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ +var VERSION = 9706; +startTest(); +var SECTION = "15.9.2.2"; +var TOLERANCE = 100; +var TITLE = "The Date Constructor Called as a Function"; + +writeHeaderToLog(SECTION+" "+TITLE ); + +// allow up to 1 second difference due to possibility +// the date may change by 1 second in between calls to Date + +var d1; +var d2; + +// Dates around 1900 + +d1 = new Date(); +d2 = Date.parse(Date(1899,11,31,23,59,59)); +new TestCase( SECTION, "Date(1899,11,31,23,59,59)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1900,0,1,0,0,0)); +new TestCase( SECTION, "Date(1900,0,1,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1900,0,1,0,0,1) ); +new TestCase( SECTION, "Date(1900,0,1,0,0,1)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(1899,11,31,16,0,0,0)); +new TestCase( SECTION, "Date(1899,11,31,16,0,0,0)", true, d2 - d1 <= 1000); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.2.2-4.js b/source/spidermonkey-tests/ecma/Date/15.9.2.2-4.js new file mode 100644 index 00000000..b90651de --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.2.2-4.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.2.2.js + ECMA Section: 15.9.2.2 Date constructor used as a function + Date( year, month, date, hours, minutes, seconds ) + Description: The arguments are accepted, but are completely ignored. + A string is created and returned as if by the + expression (new Date()).toString(). + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ +var VERSION = 9706; +startTest(); +var SECTION = "15.9.2.2"; +var TOLERANCE = 100; +var TITLE = "The Date Constructor Called as a Function"; + +writeHeaderToLog(SECTION+" "+TITLE ); + +// allow up to 1 second difference due to possibility +// the date may change by 1 second in between calls to Date + +var d1; +var d2; + +// Dates around feb 29, 2000 + +d1 = new Date(); +d2 = Date.parse(Date(2000,1,29,0,0,0)); +new TestCase(SECTION, "Date(2000,1,29,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,1,28,23,59,59)); +new TestCase(SECTION, "Date(2000,1,28,23,59,59)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2000,1,27,16,0,0)); +new TestCase(SECTION, "Date(2000,1,27,16,0,0)", true, d2 - d1 <= 1000); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.2.2-5.js b/source/spidermonkey-tests/ecma/Date/15.9.2.2-5.js new file mode 100644 index 00000000..48cb2613 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.2.2-5.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.2.2.js + ECMA Section: 15.9.2.2 Date constructor used as a function + Date( year, month, date, hours, minutes, seconds ) + Description: The arguments are accepted, but are completely ignored. + A string is created and returned as if by the + expression (new Date()).toString(). + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ +var VERSION = 9706; +startTest(); +var SECTION = "15.9.2.2"; +var TOLERANCE = 100; +var TITLE = "The Date Constructor Called as a Function"; + +writeHeaderToLog(SECTION+" "+TITLE ); + +// allow up to 1 second difference due to possibility +// the date may change by 1 second in between calls to Date + +var d1; +var d2; + +// Dates around jan 1, 2005 + +d1 = new Date(); +d2 = Date.parse(Date(2004,11,31,23,59,59)); +new TestCase( SECTION, "Date(2004,11,31,23,59,59)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2005,0,1,0,0,0) ); +new TestCase( SECTION, "Date(2005,0,1,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2005,0,1,0,0,1) ); +new TestCase( SECTION, "Date(2005,0,1,0,0,1)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2004,11,31,16,0,0,0)); +new TestCase( SECTION, "Date(2004,11,31,16,0,0,0)", true, d2 - d1 <= 1000); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.2.2-6.js b/source/spidermonkey-tests/ecma/Date/15.9.2.2-6.js new file mode 100644 index 00000000..619686e9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.2.2-6.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.2.2.js + ECMA Section: 15.9.2.2 Date constructor used as a function + Date( year, month, date, hours, minutes, seconds ) + Description: The arguments are accepted, but are completely ignored. + A string is created and returned as if by the + expression (new Date()).toString(). + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ +var VERSION = 9706; +startTest(); +var SECTION = "15.9.2.2"; +var TOLERANCE = 100; +var TITLE = "The Date Constructor Called as a Function"; + +writeHeaderToLog(SECTION+" "+TITLE ); + +// allow up to 1 second difference due to possibility +// the date may change by 1 second in between calls to Date + +var d1; +var d2; + +// Dates around jan 1, 2032 +d1 = new Date(); +d2 = Date.parse(Date(2031,11,31,23,59,59)); +new TestCase(SECTION, "Date(2031,11,31,23,59,59)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2032,0,1,0,0,0)); +new TestCase(SECTION, "Date(2032,0,1,0,0,0)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2032,0,1,0,0,1)); +new TestCase(SECTION, "Date(2032,0,1,0,0,1)", true, d2 - d1 <= 1000); + +d1 = new Date(); +d2 = Date.parse(Date(2031,11,31,16,0,0,0)); +new TestCase(SECTION, "Date(2031,11,31,16,0,0,0)", true, d2 - d1 <= 1000); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.1-1.js b/source/spidermonkey-tests/ecma/Date/15.9.3.1-1.js new file mode 100644 index 00000000..c5ecc19d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.1-1.js @@ -0,0 +1,205 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.9.3.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Dates around 1970 + +addNewTestCase( new Date( 1969,11,31,15,59,59,999), + "new Date( 1969,11,31,15,59,59,999)", + [TIME_1970-1,1969,11,31,3,23,59,59,999,1969,11,31,3,15,59,59,999] ); + +addNewTestCase( new Date( 1969,11,31,23,59,59,999), + "new Date( 1969,11,31,23,59,59,999)", + [TIME_1970-PST_ADJUST-1,1970,0,1,4,7,59,59,999,1969,11,31,3,23,59,59,999] ); + +addNewTestCase( new Date( 1970,0,1,0,0,0,0), + "new Date( 1970,0,1,0,0,0,0)", + [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date( 1969,11,31,16,0,0,0), + "new Date( 1969,11,31,16,0,0,0)", + [TIME_1970,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +addNewTestCase( new Date(1969,12,1,0,0,0,0), + "new Date(1969,12,1,0,0,0,0)", + [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date(1969,11,32,0,0,0,0), + "new Date(1969,11,32,0,0,0,0)", + [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date(1969,11,31,24,0,0,0), + "new Date(1969,11,31,24,0,0,0)", + [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date(1969,11,31,23,60,0,0), + "new Date(1969,11,31,23,60,0,0)", + [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date(1969,11,31,23,59,60,0), + "new Date(1969,11,31,23,59,60,0)", + [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date(1969,11,31,23,59,59,1000), + "new Date(1969,11,31,23,59,59,1000)", + [TIME_1970-PST_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +// Dates around 2000 + +addNewTestCase( new Date( 1999,11,31,15,59,59,999), + "new Date( 1999,11,31,15,59,59,999)", + [TIME_2000-1,1999,11,31,5,23,59,59,999,1999,11,31,5,15,59,59,999] ); + +addNewTestCase( new Date( 1999,11,31,16,0,0,0), + "new Date( 1999,11,31,16,0,0,0)", + [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] ); + +addNewTestCase( new Date( 1999,11,31,23,59,59,999), + "new Date( 1999,11,31,23,59,59,999)", + [TIME_2000-PST_ADJUST-1,2000,0,1,6,7,59,59,999,1999,11,31,5,23,59,59,999] ); + +addNewTestCase( new Date( 2000,0,1,0,0,0,0), + "new Date( 2000,0,1,0,0,0,0)", + [TIME_2000-PST_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date( 2000,0,1,0,0,0,1), + "new Date( 2000,0,1,0,0,0,1)", + [TIME_2000-PST_ADJUST+1,2000,0,1,6,8,0,0,1,2000,0,1,6,0,0,0,1] ); + +// Dates around 29 Feb 2000 + +addNewTestCase( new Date(2000,1,28,16,0,0,0), + "new Date(2000,1,28,16,0,0,0)", + [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); + +addNewTestCase( new Date(2000,1,29,0,0,0,0), + "new Date(2000,1,29,0,0,0,0)", + [UTC_FEB_29_2000-PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + +addNewTestCase( new Date(2000,1,28,24,0,0,0), + "new Date(2000,1,28,24,0,0,0)", + [UTC_FEB_29_2000-PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + +// Dates around 1900 + +addNewTestCase( new Date(1899,11,31,16,0,0,0), + "new Date(1899,11,31,16,0,0,0)", + [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); + +addNewTestCase( new Date(1899,11,31,15,59,59,999), + "new Date(1899,11,31,15,59,59,999)", + [TIME_1900-1,1899,11,31,0,23,59,59,999,1899,11,31,0,15,59,59,999] ); + +addNewTestCase( new Date(1899,11,31,23,59,59,999), + "new Date(1899,11,31,23,59,59,999)", + [TIME_1900-PST_ADJUST-1,1900,0,1,1,7,59,59,999,1899,11,31,0,23,59,59,999] ); + +addNewTestCase( new Date(1900,0,1,0,0,0,0), + "new Date(1900,0,1,0,0,0,0)", + [TIME_1900-PST_ADJUST,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); + +addNewTestCase( new Date(1900,0,1,0,0,0,1), + "new Date(1900,0,1,0,0,0,1)", + [TIME_1900-PST_ADJUST+1,1900,0,1,1,8,0,0,1,1900,0,1,1,0,0,0,1] ); + +// Dates around 2005 + +addNewTestCase( new Date(2005,0,1,0,0,0,0), + "new Date(2005,0,1,0,0,0,0)", + [UTC_JAN_1_2005-PST_ADJUST,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date(2004,11,31,16,0,0,0), + "new Date(2004,11,31,16,0,0,0)", + [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] ); + +test(); + + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.1-2.js b/source/spidermonkey-tests/ecma/Date/15.9.3.1-2.js new file mode 100644 index 00000000..81a88e37 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.1-2.js @@ -0,0 +1,118 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.9.3.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - + +// Dates around 2000 + +addNewTestCase( new Date( 1999,11,31,15,59,59,999), + "new Date( 1999,11,31,15,59,59,999)", + [TIME_2000-1,1999,11,31,5,23,59,59,999,1999,11,31,5,15,59,59,999] ); + +addNewTestCase( new Date( 1999,11,31,16,0,0,0), + "new Date( 1999,11,31,16,0,0,0)", + [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] ); + +addNewTestCase( new Date( 1999,11,31,23,59,59,999), + "new Date( 1999,11,31,23,59,59,999)", + [TIME_2000-PST_ADJUST-1,2000,0,1,6,7,59,59,999,1999,11,31,5,23,59,59,999] ); + +addNewTestCase( new Date( 2000,0,1,0,0,0,0), + "new Date( 2000,0,1,0,0,0,0)", + [TIME_2000-PST_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date( 2000,0,1,0,0,0,1), + "new Date( 2000,0,1,0,0,0,1)", + [TIME_2000-PST_ADJUST+1,2000,0,1,6,8,0,0,1,2000,0,1,6,0,0,0,1] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.1-3.js b/source/spidermonkey-tests/ecma/Date/15.9.3.1-3.js new file mode 100644 index 00000000..2cca3958 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.1-3.js @@ -0,0 +1,107 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.9.3.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - +addNewTestCase( new Date(2000,1,28,16,0,0,0), + "new Date(2000,1,28,16,0,0,0)", + [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); + +addNewTestCase( new Date(2000,1,29,0,0,0,0), + "new Date(2000,1,29,0,0,0,0)", + [UTC_FEB_29_2000 - PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + +addNewTestCase( new Date(2000,1,28,24,0,0,0), + "new Date(2000,1,28,24,0,0,0)", + [UTC_FEB_29_2000 - PST_ADJUST,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.1-4.js b/source/spidermonkey-tests/ecma/Date/15.9.3.1-4.js new file mode 100644 index 00000000..4925dcf4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.1-4.js @@ -0,0 +1,117 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.9.3.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - + +// Dates around 1900 + +addNewTestCase( new Date(1899,11,31,16,0,0,0), + "new Date(1899,11,31,16,0,0,0)", + [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); + +addNewTestCase( new Date(1899,11,31,15,59,59,999), + "new Date(1899,11,31,15,59,59,999)", + [TIME_1900-1,1899,11,31,0,23,59,59,999,1899,11,31,0,15,59,59,999] ); + +addNewTestCase( new Date(1899,11,31,23,59,59,999), + "new Date(1899,11,31,23,59,59,999)", + [TIME_1900-PST_ADJUST-1,1900,0,1,1,7,59,59,999,1899,11,31,0,23,59,59,999] ); + +addNewTestCase( new Date(1900,0,1,0,0,0,0), + "new Date(1900,0,1,0,0,0,0)", + [TIME_1900-PST_ADJUST,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); + +addNewTestCase( new Date(1900,0,1,0,0,0,1), + "new Date(1900,0,1,0,0,0,1)", + [TIME_1900-PST_ADJUST+1,1900,0,1,1,8,0,0,1,1900,0,1,1,0,0,0,1] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.1-5.js b/source/spidermonkey-tests/ecma/Date/15.9.3.1-5.js new file mode 100644 index 00000000..51b997ef --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.1-5.js @@ -0,0 +1,106 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1) is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.9.3.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "new Date( year, month, date, hours, minutes, seconds, ms )"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - + +// Dates around 2005 + +addNewTestCase( new Date(2005,0,1,0,0,0,0), + "new Date(2005,0,1,0,0,0,0)", + [UTC_JAN_1_2005-PST_ADJUST,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date(2004,11,31,16,0,0,0), + "new Date(2004,11,31,16,0,0,0)", + [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.2-1.js b/source/spidermonkey-tests/ecma/Date/15.9.3.2-1.js new file mode 100644 index 00000000..77661db3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.2-1.js @@ -0,0 +1,116 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +// for TCMS, the gTestcases array must be global. +var SECTION = "15.9.3.1"; +var TITLE = "Date( year, month, date, hours, minutes, seconds )"; + +writeHeaderToLog( SECTION+" " +TITLE ); + +// Dates around 1970 + +addNewTestCase( new Date( 1969,11,31,15,59,59), + "new Date( 1969,11,31,15,59,59)", + [-1000,1969,11,31,3,23,59,59,0,1969,11,31,3,15,59,59,0] ); + +addNewTestCase( new Date( 1969,11,31,16,0,0), + "new Date( 1969,11,31,16,0,0)", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +addNewTestCase( new Date( 1969,11,31,23,59,59), + "new Date( 1969,11,31,23,59,59)", + [28799000,1970,0,1,4,7,59,59,0,1969,11,31,3,23,59,59,0] ); + +addNewTestCase( new Date( 1970, 0, 1, 0, 0, 0), + "new Date( 1970, 0, 1, 0, 0, 0)", + [28800000,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date( 1969,11,31,16,0,0), + "new Date( 1969,11,31,16,0,0)", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); + +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.2-2.js b/source/spidermonkey-tests/ecma/Date/15.9.3.2-2.js new file mode 100644 index 00000000..ff2ea987 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.2-2.js @@ -0,0 +1,107 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +// for TCMS, the gTestcases array must be global. +var SECTION = "15.9.3.1"; +var TITLE = "Date( year, month, date, hours, minutes, seconds )"; + +writeHeaderToLog( SECTION+" " +TITLE ); + +// Dates around 2000 + +addNewTestCase( new Date( 1999,11,31,15,59,59), + "new Date( 1999,11,31,15,59,59)", + [946684799000,1999,11,31,5,23,59,59,0,1999,11,31,5,15,59,59,0] ); + +addNewTestCase( new Date( 1999,11,31,16,0,0), + "new Date( 1999,11,31,16,0,0)", + [946684800000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] ); + +addNewTestCase( new Date( 2000,0,1,0,0,0), + "new Date( 2000,0,1,0,0,0)", + [946713600000,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); + +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.2-3.js b/source/spidermonkey-tests/ecma/Date/15.9.3.2-3.js new file mode 100644 index 00000000..dee9cba1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.2-3.js @@ -0,0 +1,111 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +// for TCMS, the gTestcases array must be global. +var SECTION = "15.9.3.1"; +var TITLE = "Date( year, month, date, hours, minutes, seconds )"; + +writeHeaderToLog( SECTION+" " +TITLE ); + +// Dates around 1900 + +addNewTestCase( new Date(1899,11,31,16,0,0), + "new Date(1899,11,31,16,0,0)", + [-2208988800000,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); + +addNewTestCase( new Date(1899,11,31,15,59,59), + "new Date(1899,11,31,15,59,59)", + [-2208988801000,1899,11,31,0,23,59,59,0,1899,11,31,0,15,59,59,0] ); + +addNewTestCase( new Date(1900,0,1,0,0,0), + "new Date(1900,0,1,0,0,0)", + [-2208960000000,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); + +addNewTestCase( new Date(1900,0,1,0,0,1), + "new Date(1900,0,1,0,0,1)", + [-2208959999000,1900,0,1,1,8,0,1,0,1900,0,1,1,0,0,1,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); + +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.2-4.js b/source/spidermonkey-tests/ecma/Date/15.9.3.2-4.js new file mode 100644 index 00000000..33c1d0c6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.2-4.js @@ -0,0 +1,108 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +// for TCMS, the gTestcases array must be global. +var SECTION = "15.9.3.1"; +var TITLE = "Date( year, month, date, hours, minutes, seconds )"; + +writeHeaderToLog( SECTION+" " +TITLE ); + +var PST_FEB_29_2000 = UTC_FEB_29_2000 + 8*msPerHour; + +// Dates around Feb 29, 2000 +addNewTestCase( new Date(2000,1,28,16,0,0,0), + "new Date(2000,1,28,16,0,0,0)", + [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0,0] ); + +addNewTestCase( new Date(2000,1,29,0,0,0,0), + "new Date(2000,1,29,0,0,0,0)", + [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + +addNewTestCase( new Date(2000,1,29,24,0,0,0), + "new Date(2000,1,29,24,0,0,0)", + [PST_FEB_29_2000+msPerDay,2000,2,1,3,8,0,0,0,2000,2,1,3,0,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); + +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.2-5.js b/source/spidermonkey-tests/ecma/Date/15.9.3.2-5.js new file mode 100644 index 00000000..17990faf --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.2-5.js @@ -0,0 +1,105 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.1.js + ECMA Section: 15.9.3.1 new Date (year, month, date, hours, minutes, seconds, ms) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial value of Date.prototype. + + The [[Class]] property of the newly constructed object + is set as follows: + 1. Call ToNumber(year) + 2. Call ToNumber(month) + 3. Call ToNumber(date) + 4. Call ToNumber(hours) + 5. Call ToNumber(minutes) + 6. Call ToNumber(seconds) + 7. Call ToNumber(ms) + 8. If Result(1)is NaN and 0 <= ToInteger(Result(1)) <= + 99, Result(8) is 1900+ToInteger(Result(1)); otherwise, + Result(8) is Result(1) + 9. Compute MakeDay(Result(8), Result(2), Result(3) + 10. Compute MakeTime(Result(4), Result(5), Result(6), + Result(7) + 11. Compute MakeDate(Result(9), Result(10)) + 12. Set the [[Value]] property of the newly constructed + object to TimeClip(UTC(Result(11))). + + + This tests the returned value of a newly constructed + Date object. + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + +// for TCMS, the gTestcases array must be global. +var SECTION = "15.9.3.1"; +var TITLE = "Date( year, month, date, hours, minutes, seconds )"; + +writeHeaderToLog( SECTION+" " +TITLE ); + +// Dates around Jan 1, 2005 + +var PST_JAN_1_2005 = UTC_JAN_1_2005 + 8*msPerHour; + +addNewTestCase( new Date(2005,0,1,0,0,0,0), + "new Date(2005,0,1,0,0,0,0)", + [PST_JAN_1_2005,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date(2004,11,31,16,0,0,0), + "new Date(2004,11,31,16,0,0,0)", + [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { +//adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); + +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.8-1.js b/source/spidermonkey-tests/ecma/Date/15.9.3.8-1.js new file mode 100644 index 00000000..beda72d4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.8-1.js @@ -0,0 +1,121 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.8.js + ECMA Section: 15.9.3.8 The Date Constructor + new Date( value ) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial valiue of Date.prototype. + + The [[Class]] property of the newly constructed object is + set to "Date". + + The [[Value]] property of the newly constructed object is + set as follows: + + 1. Call ToPrimitive(value) + 2. If Type( Result(1) ) is String, then go to step 5. + 3. Let V be ToNumber( Result(1) ). + 4. Set the [[Value]] property of the newly constructed + object to TimeClip(V) and return. + 5. Parse Result(1) as a date, in exactly the same manner + as for the parse method. Let V be the time value for + this date. + 6. Go to step 4. + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.9.3.8"; +var TYPEOF = "object"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + + +// for TCMS, the gTestcases array must be global. +var gTc= 0; +var TITLE = "Date constructor: new Date( value )"; +var SECTION = "15.9.3.8"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION +" " + TITLE ); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - +var TZ_ADJUST = -TZ_PST * msPerHour; + + +// Dates around 1970 +addNewTestCase( new Date(0), + "new Date(0)", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +addNewTestCase( new Date(1), + "new Date(1)", + [1,1970,0,1,4,0,0,0,1,1969,11,31,3,16,0,0,1] ); + +addNewTestCase( new Date(true), + "new Date(true)", + [1,1970,0,1,4,0,0,0,1,1969,11,31,3,16,0,0,1] ); + +addNewTestCase( new Date(false), + "new Date(false)", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +addNewTestCase( new Date( (new Date(0)).toString() ), + "new Date(\""+ (new Date(0)).toString()+"\" )", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray, 'msMode'); + + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.8-2.js b/source/spidermonkey-tests/ecma/Date/15.9.3.8-2.js new file mode 100644 index 00000000..a53f5ce1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.8-2.js @@ -0,0 +1,119 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.8.js + ECMA Section: 15.9.3.8 The Date Constructor + new Date( value ) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial valiue of Date.prototype. + + The [[Class]] property of the newly constructed object is + set to "Date". + + The [[Value]] property of the newly constructed object is + set as follows: + + 1. Call ToPrimitive(value) + 2. If Type( Result(1) ) is String, then go to step 5. + 3. Let V be ToNumber( Result(1) ). + 4. Set the [[Value]] property of the newly constructed + object to TimeClip(V) and return. + 5. Parse Result(1) as a date, in exactly the same manner + as for the parse method. Let V be the time value for + this date. + 6. Go to step 4. + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.9.3.8"; +var TYPEOF = "object"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + + +// for TCMS, the gTestcases array must be global. +var gTc= 0; +var TITLE = "Date constructor: new Date( value )"; +var SECTION = "15.9.3.8"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION +" " + TITLE ); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - +var TZ_ADJUST = -TZ_PST * msPerHour; + +addNewTestCase( new Date((new Date(0)).toUTCString()), + "new Date(\""+ (new Date(0)).toUTCString()+"\" )", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +addNewTestCase( new Date((new Date(1)).toString()), + "new Date(\""+ (new Date(1)).toString()+"\" )", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +addNewTestCase( new Date( TZ_ADJUST ), + "new Date(" + TZ_ADJUST+")", + [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +addNewTestCase( new Date((new Date(TZ_ADJUST)).toString()), + "new Date(\""+ (new Date(TZ_ADJUST)).toString()+"\")", + [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + + +addNewTestCase( new Date( (new Date(TZ_ADJUST)).toUTCString() ), + "new Date(\""+ (new Date(TZ_ADJUST)).toUTCString()+"\")", + [TZ_ADJUST,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray, 'msMode'); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.8-3.js b/source/spidermonkey-tests/ecma/Date/15.9.3.8-3.js new file mode 100644 index 00000000..fc3ba43e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.8-3.js @@ -0,0 +1,126 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.8.js + ECMA Section: 15.9.3.8 The Date Constructor + new Date( value ) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial valiue of Date.prototype. + + The [[Class]] property of the newly constructed object is + set to "Date". + + The [[Value]] property of the newly constructed object is + set as follows: + + 1. Call ToPrimitive(value) + 2. If Type( Result(1) ) is String, then go to step 5. + 3. Let V be ToNumber( Result(1) ). + 4. Set the [[Value]] property of the newly constructed + object to TimeClip(V) and return. + 5. Parse Result(1) as a date, in exactly the same manner + as for the parse method. Let V be the time value for + this date. + 6. Go to step 4. + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.9.3.8"; +var TYPEOF = "object"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + + +// for TCMS, the gTestcases array must be global. +var gTc= 0; +var TITLE = "Date constructor: new Date( value )"; +var SECTION = "15.9.3.8"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION +" " + TITLE ); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - +var TZ_ADJUST = -TZ_PST * msPerHour; + + +// Dates around 2000 + +addNewTestCase( new Date(TIME_2000+TZ_ADJUST), + "new Date(" +(TIME_2000+TZ_ADJUST)+")", + [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date(TIME_2000), + "new Date(" +TIME_2000+")", + [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); + +addNewTestCase( new Date( (new Date(TIME_2000+TZ_ADJUST)).toString()), + "new Date(\"" +(new Date(TIME_2000+TZ_ADJUST)).toString()+"\")", + [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date((new Date(TIME_2000)).toString()), + "new Date(\"" +(new Date(TIME_2000)).toString()+"\")", + [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); + + +addNewTestCase( new Date( (new Date(TIME_2000+TZ_ADJUST)).toUTCString()), + "new Date(\"" +(new Date(TIME_2000+TZ_ADJUST)).toUTCString()+"\")", + [TIME_2000+TZ_ADJUST,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); + +addNewTestCase( new Date( (new Date(TIME_2000)).toUTCString()), + "new Date(\"" +(new Date(TIME_2000)).toUTCString()+"\")", + [TIME_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray, 'msMode'); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.8-4.js b/source/spidermonkey-tests/ecma/Date/15.9.3.8-4.js new file mode 100644 index 00000000..f28c6b65 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.8-4.js @@ -0,0 +1,127 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.8.js + ECMA Section: 15.9.3.8 The Date Constructor + new Date( value ) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial valiue of Date.prototype. + + The [[Class]] property of the newly constructed object is + set to "Date". + + The [[Value]] property of the newly constructed object is + set as follows: + + 1. Call ToPrimitive(value) + 2. If Type( Result(1) ) is String, then go to step 5. + 3. Let V be ToNumber( Result(1) ). + 4. Set the [[Value]] property of the newly constructed + object to TimeClip(V) and return. + 5. Parse Result(1) as a date, in exactly the same manner + as for the parse method. Let V be the time value for + this date. + 6. Go to step 4. + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.9.3.8"; +var TYPEOF = "object"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + + +// for TCMS, the gTestcases array must be global. +var gTc= 0; +var TITLE = "Date constructor: new Date( value )"; +var SECTION = "15.9.3.8"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION +" " + TITLE ); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - +var TZ_ADJUST = -TZ_PST * msPerHour; + +// Dates around Feb 29, 2000 + +var PST_FEB_29_2000 = UTC_FEB_29_2000 + TZ_ADJUST; + +addNewTestCase( new Date(UTC_FEB_29_2000), + "new Date("+UTC_FEB_29_2000+")", + [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); + +addNewTestCase( new Date(PST_FEB_29_2000), + "new Date("+PST_FEB_29_2000+")", + [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + +addNewTestCase( new Date( (new Date(UTC_FEB_29_2000)).toString() ), + "new Date(\""+(new Date(UTC_FEB_29_2000)).toString()+"\")", + [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); + +addNewTestCase( new Date( (new Date(PST_FEB_29_2000)).toString() ), + "new Date(\""+(new Date(PST_FEB_29_2000)).toString()+"\")", + [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + + +addNewTestCase( new Date( (new Date(UTC_FEB_29_2000)).toGMTString() ), + "new Date(\""+(new Date(UTC_FEB_29_2000)).toGMTString()+"\")", + [UTC_FEB_29_2000,2000,1,29,2,0,0,0,0,2000,1,28,1,16,0,0,0] ); + +addNewTestCase( new Date( (new Date(PST_FEB_29_2000)).toGMTString() ), + "new Date(\""+(new Date(PST_FEB_29_2000)).toGMTString()+"\")", + [PST_FEB_29_2000,2000,1,29,2,8,0,0,0,2000,1,29,2,0,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray, 'msMode'); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.3.8-5.js b/source/spidermonkey-tests/ecma/Date/15.9.3.8-5.js new file mode 100644 index 00000000..126ccb3c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.3.8-5.js @@ -0,0 +1,127 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.3.8.js + ECMA Section: 15.9.3.8 The Date Constructor + new Date( value ) + Description: The [[Prototype]] property of the newly constructed + object is set to the original Date prototype object, + the one that is the initial valiue of Date.prototype. + + The [[Class]] property of the newly constructed object is + set to "Date". + + The [[Value]] property of the newly constructed object is + set as follows: + + 1. Call ToPrimitive(value) + 2. If Type( Result(1) ) is String, then go to step 5. + 3. Let V be ToNumber( Result(1) ). + 4. Set the [[Value]] property of the newly constructed + object to TimeClip(V) and return. + 5. Parse Result(1) as a date, in exactly the same manner + as for the parse method. Let V be the time value for + this date. + 6. Go to step 4. + + Author: christine@netscape.com + Date: 28 october 1997 + Version: 9706 + +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.9.3.8"; +var TYPEOF = "object"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; + + +// for TCMS, the gTestcases array must be global. +var gTc= 0; +var TITLE = "Date constructor: new Date( value )"; +var SECTION = "15.9.3.8"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION +" " + TITLE ); + +// all the "ResultArrays" below are hard-coded to Pacific Standard Time values - +var TZ_ADJUST = -TZ_PST * msPerHour; + + +// Dates around 1900 + +var PST_1900 = TIME_1900 + 8*msPerHour; + +addNewTestCase( new Date( TIME_1900 ), + "new Date("+TIME_1900+")", + [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); + +addNewTestCase( new Date(PST_1900), + "new Date("+PST_1900+")", + [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); + +addNewTestCase( new Date( (new Date(TIME_1900)).toString() ), + "new Date(\""+(new Date(TIME_1900)).toString()+"\")", + [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); + +addNewTestCase( new Date( (new Date(PST_1900)).toString() ), + "new Date(\""+(new Date(PST_1900 )).toString()+"\")", + [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); + +addNewTestCase( new Date( (new Date(TIME_1900)).toUTCString() ), + "new Date(\""+(new Date(TIME_1900)).toUTCString()+"\")", + [TIME_1900,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); + +addNewTestCase( new Date( (new Date(PST_1900)).toUTCString() ), + "new Date(\""+(new Date(PST_1900 )).toUTCString()+"\")", + [ PST_1900,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + //adjust hard-coded ResultArray for tester's timezone instead of PST + adjustResultArray(ResultArray, 'msMode'); + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + new TestCase( SECTION, DateString+".getUTCFullYear()", ResultArray[UTC_YEAR], DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", ResultArray[UTC_MONTH], DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", ResultArray[UTC_DATE], DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", ResultArray[UTC_DAY], DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", ResultArray[UTC_HOURS], DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", ResultArray[UTC_MINUTES],DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", ResultArray[UTC_SECONDS],DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", ResultArray[UTC_MS], DateCase.getUTCMilliseconds() ); + new TestCase( SECTION, DateString+".getFullYear()", ResultArray[YEAR], DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", ResultArray[MONTH], DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", ResultArray[DATE], DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", ResultArray[DAY], DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", ResultArray[HOURS], DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", ResultArray[MINUTES], DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", ResultArray[SECONDS], DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", ResultArray[MS], DateCase.getMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.4.2-1.js b/source/spidermonkey-tests/ecma/Date/15.9.4.2-1.js new file mode 100644 index 00000000..2ebd6725 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.4.2-1.js @@ -0,0 +1,48 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: + * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=4088 + * Description: Date parsing gets 12:30 AM wrong. + * New behavior: + * js> d = new Date('1/1/1999 13:30 AM') + * Invalid Date + * js> d = new Date('1/1/1999 13:30 PM') + * Invalid Date + * js> d = new Date('1/1/1999 12:30 AM') + * Fri Jan 01 00:30:00 GMT-0800 (PST) 1999 + * js> d = new Date('1/1/1999 12:30 PM') + * Fri Jan 01 12:30:00 GMT-0800 (PST) 1999 + * Author: christine@netscape.com + */ + +var SECTION = "15.9.4.2-1"; // provide a document reference (ie, ECMA section) +var VERSION = "ECMA"; // Version of JavaScript or ECMA +var TITLE = "Regression Test for Date.parse"; // Provide ECMA section title or a description +var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=4088"; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + +AddTestCase( "new Date('1/1/1999 12:30 AM').toString()", + new Date(1999,0,1,0,30).toString(), + new Date('1/1/1999 12:30 AM').toString() ); + +AddTestCase( "new Date('1/1/1999 12:30 PM').toString()", + new Date( 1999,0,1,12,30 ).toString(), + new Date('1/1/1999 12:30 PM').toString() ); + +AddTestCase( "new Date('1/1/1999 13:30 AM')", + "Invalid Date", + new Date('1/1/1999 13:30 AM').toString() ); + + +AddTestCase( "new Date('1/1/1999 13:30 PM')", + "Invalid Date", + new Date('1/1/1999 13:30 PM').toString() ); + +test(); // leave this alone. this executes the test cases and +// displays results. diff --git a/source/spidermonkey-tests/ecma/Date/15.9.4.2.js b/source/spidermonkey-tests/ecma/Date/15.9.4.2.js new file mode 100644 index 00000000..883fa621 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.4.2.js @@ -0,0 +1,157 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.4.2.js + ECMA Section: 15.9.4.2 Date.parse() + Description: The parse() function applies the to ToString() operator + to its argument and interprets the resulting string as + a date. It returns a number, the UTC time value + corresponding to the date. + + The string may be interpreted as a local time, a UTC + time, or a time in some other time zone, depending on + the contents of the string. + + (need to test strings containing stuff with the time + zone specified, and verify that parse() returns the + correct GMT time) + + so for any Date object x, all of these things should + be equal: + + value tested in function: + x.valueOf() test_value() + Date.parse(x.toString()) test_tostring() + Date.parse(x.toGMTString()) test_togmt() + + Date.parse(x.toLocaleString()) is not required to + produce the same number value as the preceding three + expressions. in general the value produced by + Date.parse is implementation dependent when given any + string value that could not be produced in that + implementation by the toString or toGMTString method. + + value tested in function: + Date.parse( x.toLocaleString()) test_tolocale() + + Author: christine@netscape.com + Date: 10 july 1997 + +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.9.4.2"; +var TITLE = "Date.parse()"; + +var TIME = 0; +var UTC_YEAR = 1; +var UTC_MONTH = 2; +var UTC_DATE = 3; +var UTC_DAY = 4; +var UTC_HOURS = 5; +var UTC_MINUTES = 6; +var UTC_SECONDS = 7; +var UTC_MS = 8; + +var YEAR = 9; +var MONTH = 10; +var DATE = 11; +var DAY = 12; +var HOURS = 13; +var MINUTES = 14; +var SECONDS = 15; +var MS = 16; +var TYPEOF = "object"; + +// for TCMS, the gTestcases array must be global. +writeHeaderToLog("15.9.4.2 Date.parse()" ); + +// Dates around 1970 + +addNewTestCase( new Date(0), + "new Date(0)", + [0,1970,0,1,4,0,0,0,0,1969,11,31,3,16,0,0,0] ); + +addNewTestCase( new Date(-1), + "new Date(-1)", + [-1,1969,11,31,3,23,59,59,999,1969,11,31,3,15,59,59,999] ); +addNewTestCase( new Date(28799999), + "new Date(28799999)", + [28799999,1970,0,1,4,7,59,59,999,1969,11,31,3,23,59,59,999] ); +addNewTestCase( new Date(28800000), + "new Date(28800000)", + [28800000,1970,0,1,4,8,0,0,0,1970,0,1,4,0,0,0,0] ); + +// Dates around 2000 + +addNewTestCase( new Date(946684799999), + "new Date(946684799999)", + [946684799999,1999,11,31,5,23,59,59,999,1999,11,31,5,15,59,59,999] ); +addNewTestCase( new Date(946713599999), + "new Date(946713599999)", + [946713599999,2000,0,1,6,7,59,59,999,1999,11,31,5,23,59,59,999] ); +addNewTestCase( new Date(946684800000), + "new Date(946684800000)", + [946684800000,2000,0,1,6,0,0,0,0,1999,11,31,5, 16,0,0,0] ); +addNewTestCase( new Date(946713600000), + "new Date(946713600000)", + [946713600000,2000,0,1,6,8,0,0,0,2000,0,1,6,0,0,0,0] ); + +// Dates around 1900 + +addNewTestCase( new Date(-2208988800000), + "new Date(-2208988800000)", + [-2208988800000,1900,0,1,1,0,0,0,0,1899,11,31,0,16,0,0,0] ); + +addNewTestCase( new Date(-2208988800001), + "new Date(-2208988800001)", + [-2208988800001,1899,11,31,0,23,59,59,999,1899,11,31,0,15,59,59,999] ); + +addNewTestCase( new Date(-2208960000001), + "new Date(-2208960000001)", + [-2208960000001,1900,0,1,1,7,59,59,0,1899,11,31,0,23,59,59,999] ); +addNewTestCase( new Date(-2208960000000), + "new Date(-2208960000000)", + [-2208960000000,1900,0,1,1,8,0,0,0,1900,0,1,1,0,0,0,0] ); +addNewTestCase( new Date(-2208959999999), + "new Date(-2208959999999)", + [-2208959999999,1900,0,1,1,8,0,0,1,1900,0,1,1,0,0,0,1] ); + +// Dates around Feb 29, 2000 + +var PST_FEB_29_2000 = UTC_FEB_29_2000 + 8*msPerHour; + +addNewTestCase( new Date(UTC_FEB_29_2000), + "new Date(" + UTC_FEB_29_2000 +")", + [UTC_FEB_29_2000,2000,0,1,6,0,0,0,0,1999,11,31,5,16,0,0,0] ); +addNewTestCase( new Date(PST_FEB_29_2000), + "new Date(" + PST_FEB_29_2000 +")", + [PST_FEB_29_2000,2000,0,1,6,8.0,0,0,2000,0,1,6,0,0,0,0]); + +// Dates around Jan 1 2005 + +var PST_JAN_1_2005 = UTC_JAN_1_2005 + 8*msPerHour; + +addNewTestCase( new Date(UTC_JAN_1_2005), + "new Date("+ UTC_JAN_1_2005 +")", + [UTC_JAN_1_2005,2005,0,1,6,0,0,0,0,2004,11,31,5,16,0,0,0] ); +addNewTestCase( new Date(PST_JAN_1_2005), + "new Date("+ PST_JAN_1_2005 +")", + [PST_JAN_1_2005,2005,0,1,6,8,0,0,0,2005,0,1,6,0,0,0,0] ); + + +test(); + +function addNewTestCase( DateCase, DateString, ResultArray ) { + DateCase = DateCase; + + new TestCase( SECTION, DateString+".getTime()", ResultArray[TIME], DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", ResultArray[TIME], DateCase.valueOf() ); + new TestCase( SECTION, "Date.parse(" + DateCase.toString() +")", Math.floor(ResultArray[TIME]/1000)*1000, Date.parse(DateCase.toString()) ); + new TestCase( SECTION, "Date.parse(" + DateCase.toGMTString() +")", Math.floor(ResultArray[TIME]/1000)*1000, Date.parse(DateCase.toGMTString()) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.4.3.js b/source/spidermonkey-tests/ecma/Date/15.9.4.3.js new file mode 100644 index 00000000..85abcf48 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.4.3.js @@ -0,0 +1,151 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var SECTION = "15.9.4.3"; +var TITLE = "Date.UTC( year, month, date, hours, minutes, seconds, ms )"; + +// Dates around 1970 + +addNewTestCase( Date.UTC( 1970,0,1,0,0,0,0), + "Date.UTC( 1970,0,1,0,0,0,0)", + utc(1970,0,1,0,0,0,0) ); + +addNewTestCase( Date.UTC( 1969,11,31,23,59,59,999), + "Date.UTC( 1969,11,31,23,59,59,999)", + utc(1969,11,31,23,59,59,999) ); +addNewTestCase( Date.UTC( 1972,1,29,23,59,59,999), + "Date.UTC( 1972,1,29,23,59,59,999)", + utc(1972,1,29,23,59,59,999) ); +addNewTestCase( Date.UTC( 1972,2,1,23,59,59,999), + "Date.UTC( 1972,2,1,23,59,59,999)", + utc(1972,2,1,23,59,59,999) ); +addNewTestCase( Date.UTC( 1968,1,29,23,59,59,999), + "Date.UTC( 1968,1,29,23,59,59,999)", + utc(1968,1,29,23,59,59,999) ); +addNewTestCase( Date.UTC( 1968,2,1,23,59,59,999), + "Date.UTC( 1968,2,1,23,59,59,999)", + utc(1968,2,1,23,59,59,999) ); +addNewTestCase( Date.UTC( 1969,0,1,0,0,0,0), + "Date.UTC( 1969,0,1,0,0,0,0)", + utc(1969,0,1,0,0,0,0) ); +addNewTestCase( Date.UTC( 1969,11,31,23,59,59,1000), + "Date.UTC( 1969,11,31,23,59,59,1000)", + utc(1970,0,1,0,0,0,0) ); +addNewTestCase( Date.UTC( 1969,Number.NaN,31,23,59,59,999), + "Date.UTC( 1969,Number.NaN,31,23,59,59,999)", + utc(1969,Number.NaN,31,23,59,59,999) ); + +// Dates around 2000 + +addNewTestCase( Date.UTC( 1999,11,31,23,59,59,999), + "Date.UTC( 1999,11,31,23,59,59,999)", + utc(1999,11,31,23,59,59,999) ); +addNewTestCase( Date.UTC( 2000,0,1,0,0,0,0), + "Date.UTC( 2000,0,1,0,0,0,0)", + utc(2000,0,1,0,0,0,0) ); + +// Dates around 1900 +addNewTestCase( Date.UTC( 1899,11,31,23,59,59,999), + "Date.UTC( 1899,11,31,23,59,59,999)", + utc(1899,11,31,23,59,59,999) ); +addNewTestCase( Date.UTC( 1900,0,1,0,0,0,0), + "Date.UTC( 1900,0,1,0,0,0,0)", + utc(1900,0,1,0,0,0,0) ); +addNewTestCase( Date.UTC( 1973,0,1,0,0,0,0), + "Date.UTC( 1973,0,1,0,0,0,0)", + utc(1973,0,1,0,0,0,0) ); +addNewTestCase( Date.UTC( 1776,6,4,12,36,13,111), + "Date.UTC( 1776,6,4,12,36,13,111)", + utc(1776,6,4,12,36,13,111) ); +addNewTestCase( Date.UTC( 2525,9,18,15,30,1,123), + "Date.UTC( 2525,9,18,15,30,1,123)", + utc(2525,9,18,15,30,1,123) ); + +// Dates around 29 Feb 2000 + +addNewTestCase( Date.UTC( 2000,1,29,0,0,0,0 ), + "Date.UTC( 2000,1,29,0,0,0,0 )", + utc(2000,1,29,0,0,0,0) ); +addNewTestCase( Date.UTC( 2000,1,29,8,0,0,0 ), + "Date.UTC( 2000,1,29,8,0,0,0 )", + utc(2000,1,29,8,0,0,0) ); + +// Dates around 1 Jan 2005 + +addNewTestCase( Date.UTC( 2005,0,1,0,0,0,0 ), + "Date.UTC( 2005,0,1,0,0,0,0 )", + utc(2005,0,1,0,0,0,0) ); +addNewTestCase( Date.UTC( 2004,11,31,16,0,0,0 ), + "Date.UTC( 2004,11,31,16,0,0,0 )", + utc(2004,11,31,16,0,0,0) ); + +test(); + +function addNewTestCase( DateCase, DateString, ExpectDate) { + DateCase = DateCase; + + new TestCase( SECTION, DateString, ExpectDate.value, DateCase ); + new TestCase( SECTION, DateString, ExpectDate.value, DateCase ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} + +function utc( year, month, date, hours, minutes, seconds, ms ) { + d = new MyDate(); + d.year = Number(year); + + if (month) + d.month = Number(month); + if (date) + d.date = Number(date); + if (hours) + d.hours = Number(hours); + if (minutes) + d.minutes = Number(minutes); + if (seconds) + d.seconds = Number(seconds); + if (ms) + d.ms = Number(ms); + + if ( isNaN(d.year) && 0 <= ToInteger(d.year) && d.year <= 99 ) { + d.year = 1900 + ToInteger(d.year); + } + + if (isNaN(month) || isNaN(year) || isNaN(date) || isNaN(hours) || + isNaN(minutes) || isNaN(seconds) || isNaN(ms) ) { + d.year = Number.NaN; + d.month = Number.NaN; + d.date = Number.NaN; + d.hours = Number.NaN; + d.minutes = Number.NaN; + d.seconds = Number.NaN; + d.ms = Number.NaN; + d.value = Number.NaN; + d.time = Number.NaN; + d.day =Number.NaN; + return d; + } + + d.day = MakeDay( d.year, d.month, d.date ); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = (TimeClip( MakeDate(d.day,d.time))); + + return d; +} + +function UTCTime( t ) { + sign = ( t < 0 ) ? -1 : 1; + return ( (t +(TZ_DIFF*msPerHour)) ); +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.1.js new file mode 100644 index 00000000..165637b5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.1.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.1.js + ECMA Section: 15.9.5.1 Date.prototype.constructor + Description: + The initial value of Date.prototype.constructor is the built-in Date + constructor. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Date.prototype.constructor == Date", + true, + Date.prototype.constructor == Date ); +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-1.js new file mode 100644 index 00000000..b4986599 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-1.js @@ -0,0 +1,51 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-10.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-10.js new file mode 100644 index 00000000..a12c29c8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-10.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some daylight savings time cases + +var DST_START_1998 = GetDSTStart(TimeFromYear(1998)); + +addTestCase( DST_START_1998+1 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-11.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-11.js new file mode 100644 index 00000000..6dd84bd9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-11.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some daylight savings time cases + +var DST_END_1998 = GetDSTEnd(TimeFromYear(1998)); + +addTestCase( DST_END_1998 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-12.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-12.js new file mode 100644 index 00000000..d572ea3f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-12.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some daylight savings time cases + +var DST_END_1998 = GetDSTEnd(TimeFromYear(1998)); + +addTestCase( DST_END_1998-1 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-13.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-13.js new file mode 100644 index 00000000..affe27e9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-13.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some daylight savings time cases + +var DST_END_1998 = GetDSTEnd(TimeFromYear(1998)); + +addTestCase( DST_END_1998+1 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-2.js new file mode 100644 index 00000000..02a3c703 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-2.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_0000 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-3.js new file mode 100644 index 00000000..896b83e7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-3.js @@ -0,0 +1,51 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1970 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-4.js new file mode 100644 index 00000000..030865f0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-4.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1900 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-5.js new file mode 100644 index 00000000..99e323a6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-5.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_2000 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-6.js new file mode 100644 index 00000000..c2c0da3f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-6.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_FEB_29_2000 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-7.js new file mode 100644 index 00000000..57423d74 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-7.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-8.js new file mode 100644 index 00000000..4c53da49 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-8.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some daylight savings time cases + +var DST_START_1998 = GetDSTStart(TimeFromYear(1998)); + +addTestCase( DST_START_1998 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.10-9.js b/source/spidermonkey-tests/ecma/Date/15.9.5.10-9.js new file mode 100644 index 00000000..84e7f54b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.10-9.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.10.js + ECMA Section: 15.9.5.10 + Description: Date.prototype.getDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return DateFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some daylight savings time cases + +var DST_START_1998 = GetDSTStart(TimeFromYear(1998)); + +addTestCase( DST_START_1998-1 ); + +new TestCase( SECTION, + "(new Date(NaN)).getDate()", + NaN, + (new Date(NaN)).getDate() ); + +new TestCase( SECTION, + "Date.prototype.getDate.length", + 0, + Date.prototype.getDate.length ); +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDate()", + DateFromTime(LocalTime(d)), + (new Date(d)).getDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.11-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.11-1.js new file mode 100644 index 00000000..5e0b9819 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.11-1.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.11.js + ECMA Section: 15.9.5.11 + Description: Date.prototype.getUTCDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 1.Return DateFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDate()", + DateFromTime(d), + (new Date(d)).getUTCDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.11-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.11-2.js new file mode 100644 index 00000000..87a5e0c3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.11-2.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.11 + ECMA Section: 15.9.5.11 + Description: Date.prototype.getUTCDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 1.Return DateFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_0000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDate()", + DateFromTime(d), + (new Date(d)).getUTCDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.11-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.11-3.js new file mode 100644 index 00000000..4b7c5ba2 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.11-3.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.11.js + ECMA Section: 15.9.5.11 + Description: Date.prototype.getUTCDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 1.Return DateFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1970 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDate()", + DateFromTime(d), + (new Date(d)).getUTCDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.11-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.11-4.js new file mode 100644 index 00000000..4ea30924 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.11-4.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.11.js + ECMA Section: 15.9.5.11 + Description: Date.prototype.getUTCDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 1.Return DateFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1900 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDate()", + DateFromTime(d), + (new Date(d)).getUTCDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.11-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.11-5.js new file mode 100644 index 00000000..9d895eff --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.11-5.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.11.js + ECMA Section: 15.9.5.11 + Description: Date.prototype.getUTCDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 1.Return DateFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_2000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDate()", + DateFromTime(d), + (new Date(d)).getUTCDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.11-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.11-6.js new file mode 100644 index 00000000..921929ca --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.11-6.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.11.js + ECMA Section: 15.9.5.11 + Description: Date.prototype.getUTCDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 1.Return DateFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_FEB_29_2000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDate()", + DateFromTime(d), + (new Date(d)).getUTCDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.11-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.11-7.js new file mode 100644 index 00000000..4b4e23ac --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.11-7.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.11.js + ECMA Section: 15.9.5.11 + Description: Date.prototype.getUTCDate + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 1.Return DateFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDate()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_JAN_1_2005 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDate()", + DateFromTime(d), + (new Date(d)).getUTCDate() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-1.js new file mode 100644 index 00000000..a6b07e18 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-1.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12.js + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDay()", + WeekDay((LocalTime(d))), + (new Date(d)).getDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-2.js new file mode 100644 index 00000000..9aabb985 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-2.js @@ -0,0 +1,44 @@ +// |reftest| skip-if(!xulRuntime.shell&&xulRuntime.OS=="Linux"&&xulRuntime.XPCOMABI.match(/x86_64/)) -- bug xxx crash +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12.js + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_0000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDay()", + WeekDay((LocalTime(d))), + (new Date(d)).getDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-3.js new file mode 100644 index 00000000..4d824e00 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-3.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12.js + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1970 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDay()", + WeekDay((LocalTime(d))), + (new Date(d)).getDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-4.js new file mode 100644 index 00000000..93440fe7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-4.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12.js + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1900 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDay()", + WeekDay((LocalTime(d))), + (new Date(d)).getDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-5.js new file mode 100644 index 00000000..2a8cd984 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-5.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12.js + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_2000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDay()", + WeekDay((LocalTime(d))), + (new Date(d)).getDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-6.js new file mode 100644 index 00000000..4f2b270a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-6.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12.js + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_FEB_29_2000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDay()", + WeekDay((LocalTime(d))), + (new Date(d)).getDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-7.js new file mode 100644 index 00000000..7a0196a9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-7.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12.js + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_JAN_1_2005 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getDay()", + WeekDay((LocalTime(d))), + (new Date(d)).getDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.12-8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.12-8.js new file mode 100644 index 00000000..f832958e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.12-8.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.12 + ECMA Section: 15.9.5.12 + Description: Date.prototype.getDay + + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return WeekDay(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "(new Date(NaN)).getDay()", + NaN, + (new Date(NaN)).getDay() ); + +new TestCase( SECTION, + "Date.prototype.getDay.length", + 0, + Date.prototype.getDay.length ); +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-1.js new file mode 100644 index 00000000..2fa44698 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-1.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13.js + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// get the current time +var now = (new Date()).valueOf(); + +addTestCase( now ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDay()", + WeekDay((d)), + (new Date(d)).getUTCDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-2.js new file mode 100644 index 00000000..02eca4ea --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-2.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13 + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_0000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDay()", + WeekDay((d)), + (new Date(d)).getUTCDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-3.js new file mode 100644 index 00000000..9370ceef --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-3.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13.js + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1970 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDay()", + WeekDay((d)), + (new Date(d)).getUTCDay() ); + } +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-4.js new file mode 100644 index 00000000..211f502f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-4.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13.js + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1900 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDay()", + WeekDay((d)), + (new Date(d)).getUTCDay() ); + } +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-5.js new file mode 100644 index 00000000..d68e5b38 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-5.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13.js + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_2000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDay()", + WeekDay((d)), + (new Date(d)).getUTCDay() ); + } +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-6.js new file mode 100644 index 00000000..34393527 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-6.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13.js + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_FEB_29_2000 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDay()", + WeekDay((d)), + (new Date(d)).getUTCDay() ); + } +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-7.js new file mode 100644 index 00000000..34c5d6b3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-7.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13.js + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_JAN_1_2005 ); + +test(); + +function addTestCase( t ) { + var start = TimeFromYear(YearFromTime(t)); + var stop = TimeFromYear(YearFromTime(t) + 1); + + for (var d = start; d < stop; d += msPerDay) + { + new TestCase( SECTION, + "(new Date("+d+")).getUTCDay()", + WeekDay((d)), + (new Date(d)).getUTCDay() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.13-8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.13-8.js new file mode 100644 index 00000000..a73bd8e0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.13-8.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.13.js + ECMA Section: 15.9.5.13 + Description: Date.prototype.getUTCDay + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return WeekDay(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCDay()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "(new Date(NaN)).getUTCDay()", + NaN, + (new Date(NaN)).getUTCDay() ); + +new TestCase( SECTION, + "Date.prototype.getUTCDay.length", + 0, + Date.prototype.getUTCDay.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.14.js b/source/spidermonkey-tests/ecma/Date/15.9.5.14.js new file mode 100644 index 00000000..65acda91 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.14.js @@ -0,0 +1,54 @@ +// |reftest| random +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.14.js + ECMA Section: 15.9.5.14 + Description: Date.prototype.getHours + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return HourFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.14"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getHours()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getHours()", + NaN, + (new Date(NaN)).getHours() ); + +new TestCase( SECTION, + "Date.prototype.getHours.length", + 0, + Date.prototype.getHours.length ); +test(); + +function addTestCase( t ) { + for ( h = 0; h < 24; h+=4 ) { + t += msPerHour; + new TestCase( SECTION, + "(new Date("+t+")).getHours()", + HourFromTime((LocalTime(t))), + (new Date(t)).getHours() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.15.js b/source/spidermonkey-tests/ecma/Date/15.9.5.15.js new file mode 100644 index 00000000..c32d815f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.15.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.15.js + ECMA Section: 15.9.5.15 + Description: Date.prototype.getUTCHours + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return HourFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.15"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCHours()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getUTCHours()", + NaN, + (new Date(NaN)).getUTCHours() ); + +new TestCase( SECTION, + "Date.prototype.getUTCHours.length", + 0, + Date.prototype.getUTCHours.length ); +test(); + +function addTestCase( t ) { + for ( h = 0; h < 24; h+=3 ) { + t += msPerHour; + new TestCase( SECTION, + "(new Date("+t+")).getUTCHours()", + HourFromTime((t)), + (new Date(t)).getUTCHours() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.16.js b/source/spidermonkey-tests/ecma/Date/15.9.5.16.js new file mode 100644 index 00000000..6168aac7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.16.js @@ -0,0 +1,54 @@ +// |reftest| skip-if(!xulRuntime.shell&&xulRuntime.OS=="Linux"&&xulRuntime.XPCOMABI.match(/x86_64/)) -- bug xxx crash +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.16.js + ECMA Section: 15.9.5.16 + Description: Date.prototype.getMinutes + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return MinFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.16"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getMinutes()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getMinutes()", + NaN, + (new Date(NaN)).getMinutes() ); + +new TestCase( SECTION, + "Date.prototype.getMinutes.length", + 0, + Date.prototype.getMinutes.length ); +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 60; m+=10 ) { + t += msPerMinute; + new TestCase( SECTION, + "(new Date("+t+")).getMinutes()", + MinFromTime((LocalTime(t))), + (new Date(t)).getMinutes() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.17.js b/source/spidermonkey-tests/ecma/Date/15.9.5.17.js new file mode 100644 index 00000000..de10f047 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.17.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.17.js + ECMA Section: 15.9.5.17 + Description: Date.prototype.getUTCMinutes + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return MinFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.17"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMinutes()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getUTCMinutes()", + NaN, + (new Date(NaN)).getUTCMinutes() ); + +new TestCase( SECTION, + "Date.prototype.getUTCMinutes.length", + 0, + Date.prototype.getUTCMinutes.length ); +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 60; m+=10 ) { + t += msPerMinute; + new TestCase( SECTION, + "(new Date("+t+")).getUTCMinutes()", + MinFromTime(t), + (new Date(t)).getUTCMinutes() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.18.js b/source/spidermonkey-tests/ecma/Date/15.9.5.18.js new file mode 100644 index 00000000..7ed3c0c7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.18.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.18.js + ECMA Section: 15.9.5.18 + Description: Date.prototype.getSeconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return SecFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.18"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getSeconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getSeconds()", + NaN, + (new Date(NaN)).getSeconds() ); + +new TestCase( SECTION, + "Date.prototype.getSeconds.length", + 0, + Date.prototype.getSeconds.length ); +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 60; m+=10 ) { + t += 1000; + new TestCase( SECTION, + "(new Date("+t+")).getSeconds()", + SecFromTime(LocalTime(t)), + (new Date(t)).getSeconds() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.19.js b/source/spidermonkey-tests/ecma/Date/15.9.5.19.js new file mode 100644 index 00000000..3dae49f9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.19.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.19.js + ECMA Section: 15.9.5.19 + Description: Date.prototype.getUTCSeconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return SecFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.19"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCSeconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getUTCSeconds()", + NaN, + (new Date(NaN)).getUTCSeconds() ); + +new TestCase( SECTION, + "Date.prototype.getUTCSeconds.length", + 0, + Date.prototype.getUTCSeconds.length ); +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 60; m+=10 ) { + t += 1000; + new TestCase( SECTION, + "(new Date("+t+")).getUTCSeconds()", + SecFromTime(t), + (new Date(t)).getUTCSeconds() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.2-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.2-1.js new file mode 100644 index 00000000..71c3568d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.2-1.js @@ -0,0 +1,117 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.2.js + ECMA Section: 15.9.5.2 Date.prototype.toString + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the Date in a + convenient, human-readable form in the current time zone. + + The toString function is not generic; it generates a runtime error if its + this value is not a Date object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Date.prototype.toString.length", + 0, + Date.prototype.toString.length ); + +var now = new Date(); + +// can't test the content of the string, but can verify that the string is +// parsable by Date.parse + +new TestCase( SECTION, + "Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000", + true, + Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000 ); + +new TestCase( SECTION, + "typeof now.toString()", + "string", + typeof now.toString() ); +// 1970 + +new TestCase( SECTION, + "Date.parse( (new Date(0)).toString() )", + 0, + Date.parse( (new Date(0)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+TZ_ADJUST+")).toString() )", + TZ_ADJUST, + Date.parse( (new Date(TZ_ADJUST)).toString() ) ); + +// 1900 +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_1900+")).toString() )", + TIME_1900, + Date.parse( (new Date(TIME_1900)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_1900 -TZ_ADJUST+")).toString() )", + TIME_1900 -TZ_ADJUST, + Date.parse( (new Date(TIME_1900 -TZ_ADJUST)).toString() ) ); + +// 2000 +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_2000+")).toString() )", + TIME_2000, + Date.parse( (new Date(TIME_2000)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_2000 -TZ_ADJUST+")).toString() )", + TIME_2000 -TZ_ADJUST, + Date.parse( (new Date(TIME_2000 -TZ_ADJUST)).toString() ) ); + +// 29 Feb 2000 + +new TestCase( SECTION, + "Date.parse( (new Date("+UTC_FEB_29_2000+")).toString() )", + UTC_FEB_29_2000, + Date.parse( (new Date(UTC_FEB_29_2000)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_FEB_29_2000-1000)+")).toString() )", + UTC_FEB_29_2000-1000, + Date.parse( (new Date(UTC_FEB_29_2000-1000)).toString() ) ); + + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_FEB_29_2000-TZ_ADJUST)+")).toString() )", + UTC_FEB_29_2000-TZ_ADJUST, + Date.parse( (new Date(UTC_FEB_29_2000-TZ_ADJUST)).toString() ) ); +// 2O05 + +new TestCase( SECTION, + "Date.parse( (new Date("+UTC_JAN_1_2005+")).toString() )", + UTC_JAN_1_2005, + Date.parse( (new Date(UTC_JAN_1_2005)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_JAN_1_2005-1000)+")).toString() )", + UTC_JAN_1_2005-1000, + Date.parse( (new Date(UTC_JAN_1_2005-1000)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_JAN_1_2005-TZ_ADJUST)+")).toString() )", + UTC_JAN_1_2005-TZ_ADJUST, + Date.parse( (new Date(UTC_JAN_1_2005-TZ_ADJUST)).toString() ) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.2-2-n.js b/source/spidermonkey-tests/ecma/Date/15.9.5.2-2-n.js new file mode 100644 index 00000000..643ae300 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.2-2-n.js @@ -0,0 +1,50 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.2-2.js + ECMA Section: 15.9.5.2 Date.prototype.toString + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the Date in a + convenient, human-readable form in the current time zone. + + The toString function is not generic; it generates a runtime error if its + this value is not a Date object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + + This verifies that calling toString on an object that is not a string + generates a runtime error. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var OBJ = new MyObject( new Date(0) ); + +DESCRIPTION = "var OBJ = new MyObject( new Date(0) ); OBJ.toString()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var OBJ = new MyObject( new Date(0) ); OBJ.toString()", + "error", + eval("OBJ.toString()") ); +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); + this.toString = Date.prototype.toString; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.2.js new file mode 100644 index 00000000..71c3568d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.2.js @@ -0,0 +1,117 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.2.js + ECMA Section: 15.9.5.2 Date.prototype.toString + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the Date in a + convenient, human-readable form in the current time zone. + + The toString function is not generic; it generates a runtime error if its + this value is not a Date object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Date.prototype.toString.length", + 0, + Date.prototype.toString.length ); + +var now = new Date(); + +// can't test the content of the string, but can verify that the string is +// parsable by Date.parse + +new TestCase( SECTION, + "Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000", + true, + Math.abs(Date.parse(now.toString()) - now.valueOf()) < 1000 ); + +new TestCase( SECTION, + "typeof now.toString()", + "string", + typeof now.toString() ); +// 1970 + +new TestCase( SECTION, + "Date.parse( (new Date(0)).toString() )", + 0, + Date.parse( (new Date(0)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+TZ_ADJUST+")).toString() )", + TZ_ADJUST, + Date.parse( (new Date(TZ_ADJUST)).toString() ) ); + +// 1900 +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_1900+")).toString() )", + TIME_1900, + Date.parse( (new Date(TIME_1900)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_1900 -TZ_ADJUST+")).toString() )", + TIME_1900 -TZ_ADJUST, + Date.parse( (new Date(TIME_1900 -TZ_ADJUST)).toString() ) ); + +// 2000 +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_2000+")).toString() )", + TIME_2000, + Date.parse( (new Date(TIME_2000)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+TIME_2000 -TZ_ADJUST+")).toString() )", + TIME_2000 -TZ_ADJUST, + Date.parse( (new Date(TIME_2000 -TZ_ADJUST)).toString() ) ); + +// 29 Feb 2000 + +new TestCase( SECTION, + "Date.parse( (new Date("+UTC_FEB_29_2000+")).toString() )", + UTC_FEB_29_2000, + Date.parse( (new Date(UTC_FEB_29_2000)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_FEB_29_2000-1000)+")).toString() )", + UTC_FEB_29_2000-1000, + Date.parse( (new Date(UTC_FEB_29_2000-1000)).toString() ) ); + + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_FEB_29_2000-TZ_ADJUST)+")).toString() )", + UTC_FEB_29_2000-TZ_ADJUST, + Date.parse( (new Date(UTC_FEB_29_2000-TZ_ADJUST)).toString() ) ); +// 2O05 + +new TestCase( SECTION, + "Date.parse( (new Date("+UTC_JAN_1_2005+")).toString() )", + UTC_JAN_1_2005, + Date.parse( (new Date(UTC_JAN_1_2005)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_JAN_1_2005-1000)+")).toString() )", + UTC_JAN_1_2005-1000, + Date.parse( (new Date(UTC_JAN_1_2005-1000)).toString() ) ); + +new TestCase( SECTION, + "Date.parse( (new Date("+(UTC_JAN_1_2005-TZ_ADJUST)+")).toString() )", + UTC_JAN_1_2005-TZ_ADJUST, + Date.parse( (new Date(UTC_JAN_1_2005-TZ_ADJUST)).toString() ) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.20.js b/source/spidermonkey-tests/ecma/Date/15.9.5.20.js new file mode 100644 index 00000000..07c0df78 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.20.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.20.js + ECMA Section: 15.9.5.20 + Description: Date.prototype.getMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.20"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getMilliseconds()", + NaN, + (new Date(NaN)).getMilliseconds() ); + +new TestCase( SECTION, + "Date.prototype.getMilliseconds.length", + 0, + Date.prototype.getMilliseconds.length ); +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getMilliseconds()", + msFromTime(LocalTime(t)), + (new Date(t)).getMilliseconds() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-1.js new file mode 100644 index 00000000..d3e3730b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-1.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCMilliseconds()", + msFromTime(t), + (new Date(t)).getUTCMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-2.js new file mode 100644 index 00000000..89aabb0b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_0000 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCMilliseconds()", + msFromTime(t), + (new Date(t)).getUTCMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-3.js new file mode 100644 index 00000000..7df5193b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-3.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1970 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCMilliseconds()", + msFromTime(t), + (new Date(t)).getUTCMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-4.js new file mode 100644 index 00000000..1d07d04d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-4.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1900 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCMilliseconds()", + msFromTime(t), + (new Date(t)).getUTCMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-5.js new file mode 100644 index 00000000..e4c1874b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-5.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_2000 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCMilliseconds()", + msFromTime(t), + (new Date(t)).getUTCMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-6.js new file mode 100644 index 00000000..0949dbfc --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-6.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_FEB_29_2000 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCMilliseconds()", + msFromTime(t), + (new Date(t)).getUTCMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-7.js new file mode 100644 index 00000000..7998231f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-7.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_JAN_1_2005 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCMilliseconds()", + msFromTime(t), + (new Date(t)).getUTCMilliseconds() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.21-8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.21-8.js new file mode 100644 index 00000000..6f5218c4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.21-8.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.21.js + ECMA Section: 15.9.5.21 + Description: Date.prototype.getUTCMilliseconds + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return msFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.21"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMilliseconds()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "(new Date(NaN)).getUTCMilliseconds()", + NaN, + (new Date(NaN)).getUTCMilliseconds() ); + +new TestCase( SECTION, + "Date.prototype.getUTCMilliseconds.length", + 0, + Date.prototype.getUTCMilliseconds.length ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-1.js new file mode 100644 index 00000000..6286efcb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-1.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getTimezoneOffset()", + NaN, + (new Date(NaN)).getTimezoneOffset() ); + +new TestCase( SECTION, + "Date.prototype.getTimezoneOffset.length", + 0, + Date.prototype.getTimezoneOffset.length ); + +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getTimezoneOffset()", + (t - LocalTime(t)) / msPerMinute, + (new Date(t)).getTimezoneOffset() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-2.js new file mode 100644 index 00000000..92fbc6fc --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-2.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_0000 ); + +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getTimezoneOffset()", + (t - LocalTime(t)) / msPerMinute, + (new Date(t)).getTimezoneOffset() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-3.js new file mode 100644 index 00000000..f56b0178 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-3.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1970 ); + +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getTimezoneOffset()", + (t - LocalTime(t)) / msPerMinute, + (new Date(t)).getTimezoneOffset() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-4.js new file mode 100644 index 00000000..dba2ade9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-4.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_1900 ); + +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getTimezoneOffset()", + (t - LocalTime(t)) / msPerMinute, + (new Date(t)).getTimezoneOffset() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-5.js new file mode 100644 index 00000000..5b087fef --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-5.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_2000 ); + +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getTimezoneOffset()", + (t - LocalTime(t)) / msPerMinute, + (new Date(t)).getTimezoneOffset() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-6.js new file mode 100644 index 00000000..65cd5808 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-6.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_FEB_29_2000 ); + +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getTimezoneOffset()", + (t - LocalTime(t)) / msPerMinute, + (new Date(t)).getTimezoneOffset() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-7.js new file mode 100644 index 00000000..e2c5dcd9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-7.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( UTC_JAN_1_2005 ); + +test(); + +function addTestCase( t ) { + for ( m = 0; m <= 1000; m+=100 ) { + t++; + new TestCase( SECTION, + "(new Date("+t+")).getTimezoneOffset()", + (t - LocalTime(t)) / msPerMinute, + (new Date(t)).getTimezoneOffset() ); + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.22-8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.22-8.js new file mode 100644 index 00000000..d12feca5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.22-8.js @@ -0,0 +1,38 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.22.js + ECMA Section: 15.9.5.22 + Description: Date.prototype.getTimezoneOffset + + Returns the difference between local time and UTC time in minutes. + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return (t - LocalTime(t)) / msPerMinute. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.22"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTimezoneOffset()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "(new Date(NaN)).getTimezoneOffset()", + NaN, + (new Date(NaN)).getTimezoneOffset() ); + +new TestCase( SECTION, + "Date.prototype.getTimezoneOffset.length", + 0, + Date.prototype.getTimezoneOffset.length ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-1.js new file mode 100644 index 00000000..b9922f7f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-1.js @@ -0,0 +1,105 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( 0, 0 ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-10.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-10.js new file mode 100644 index 00000000..3a44b25f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-10.js @@ -0,0 +1,105 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, -2208988800000 ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-11.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-11.js new file mode 100644 index 00000000..b3e73eef --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-11.js @@ -0,0 +1,106 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, -86400000 ); + +test(); + + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} + + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-12.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-12.js new file mode 100644 index 00000000..9bfcc39f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-12.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, 946684800000 ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-13.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-13.js new file mode 100644 index 00000000..1165a6f0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-13.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-13"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, -2208988800000 ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-14.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-14.js new file mode 100644 index 00000000..61f3842c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-14.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-14"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, 946684800000 ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-15.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-15.js new file mode 100644 index 00000000..58efd6c9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-15.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, 0 ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-16.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-16.js new file mode 100644 index 00000000..fad28d3d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-16.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, String( TIME_1900 ) ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-17.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-17.js new file mode 100644 index 00000000..24e328af --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-17.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, String( TZ_DIFF* msPerHour ) ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-18.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-18.js new file mode 100644 index 00000000..27523980 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-18.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-1.js + ECMA Section: 15.9.5.23 Date.prototype.setTime(time) + Description: + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.9.5.23-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " Date.prototype.setTime(time)"); + +var now = "now"; +addTestCase( now, String( TIME_2000 ) ); + +test(); + +function addTestCase( startTime, setTime ) { + if ( startTime == "now" ) { + DateCase = new Date(); + } else { + DateCase = new Date( startTime ); + } + + DateCase.setTime( setTime ); + var DateString = "var d = new Date("+startTime+"); d.setTime("+setTime+"); d" ; + var UTCDate = UTCDateFromTime ( Number(setTime) ); + var LocalDate = LocalDateFromTime( Number(setTime) ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-2.js new file mode 100644 index 00000000..2204ef41 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-2.js @@ -0,0 +1,75 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-2.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.23-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +test_times = new Array( TIME_NOW, TIME_1970, TIME_1900, TIME_2000 ); + +for ( var j = 0; j < test_times.length; j++ ) { + addTestCase( new Date(TIME_NOW), test_times[j] ); +} + +new TestCase( SECTION, + "(new Date(NaN)).setTime()", + NaN, + (new Date(NaN)).setTime() ); + +new TestCase( SECTION, + "Date.prototype.setTime.length", + 1, + Date.prototype.setTime.length ); +test(); + +function addTestCase( d, t ) { + new TestCase( SECTION, + "( "+d+" ).setTime("+t+")", + t, + d.setTime(t) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1.1)+")", + TimeClip(t+1.1), + d.setTime(t+1.1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1)+")", + t+1, + d.setTime(t+1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-1)+")", + t-1, + d.setTime(t-1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-TZ_ADJUST)+")", + t-TZ_ADJUST, + d.setTime(t-TZ_ADJUST) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+TZ_ADJUST)+")", + t+TZ_ADJUST, + d.setTime(t+TZ_ADJUST) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-3-n.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-3-n.js new file mode 100644 index 00000000..e395c8e1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-3-n.js @@ -0,0 +1,45 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-3-n.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.23-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MYDATE = new MyDate(TIME_1970); + +DESCRIPTION = "MYDATE.setTime(TIME_2000)"; +EXPECTED = "error"; + +new TestCase( SECTION, + "MYDATE.setTime(TIME_2000)", + "error", + eval("MYDATE.setTime(TIME_2000)") ); + +test(); + +function MyDate(value) { + this.value = value; + this.setTime = Date.prototype.setTime; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-4.js new file mode 100644 index 00000000..824f033e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-4.js @@ -0,0 +1,78 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-2.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.23-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000, + UTC_FEB_29_2000, UTC_JAN_1_2005 ); + + +for ( var j = 0; j < test_times.length; j++ ) { + addTestCase( new Date(TIME_0000), test_times[j] ); +} + +new TestCase( SECTION, + "(new Date(NaN)).setTime()", + NaN, + (new Date(NaN)).setTime() ); + +new TestCase( SECTION, + "Date.prototype.setTime.length", + 1, + Date.prototype.setTime.length ); +test(); + +function addTestCase( d, t ) { + new TestCase( SECTION, + "( "+d+" ).setTime("+t+")", + t, + d.setTime(t) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1.1)+")", + TimeClip(t+1.1), + d.setTime(t+1.1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1)+")", + t+1, + d.setTime(t+1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-1)+")", + t-1, + d.setTime(t-1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-TZ_ADJUST)+")", + t-TZ_ADJUST, + d.setTime(t-TZ_ADJUST) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+TZ_ADJUST)+")", + t+TZ_ADJUST, + d.setTime(t+TZ_ADJUST) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-5.js new file mode 100644 index 00000000..0ac39ad4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-5.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-2.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.23-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000, + UTC_FEB_29_2000, UTC_JAN_1_2005 ); + + +for ( var j = 0; j < test_times.length; j++ ) { + addTestCase( new Date(TIME_1970), test_times[j] ); +} + + +new TestCase( SECTION, + "(new Date(NaN)).setTime()", + NaN, + (new Date(NaN)).setTime() ); + +new TestCase( SECTION, + "Date.prototype.setTime.length", + 1, + Date.prototype.setTime.length ); +test(); + +function addTestCase( d, t ) { + new TestCase( SECTION, + "( "+d+" ).setTime("+t+")", + t, + d.setTime(t) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1.1)+")", + TimeClip(t+1.1), + d.setTime(t+1.1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1)+")", + t+1, + d.setTime(t+1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-1)+")", + t-1, + d.setTime(t-1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-TZ_ADJUST)+")", + t-TZ_ADJUST, + d.setTime(t-TZ_ADJUST) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+TZ_ADJUST)+")", + t+TZ_ADJUST, + d.setTime(t+TZ_ADJUST) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-6.js new file mode 100644 index 00000000..a7af7438 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-6.js @@ -0,0 +1,78 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-2.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.23-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000, + UTC_FEB_29_2000, UTC_JAN_1_2005 ); + + +for ( var j = 0; j < test_times.length; j++ ) { + addTestCase( new Date(TIME_1900), test_times[j] ); +} + + +new TestCase( SECTION, + "(new Date(NaN)).setTime()", + NaN, + (new Date(NaN)).setTime() ); + +new TestCase( SECTION, + "Date.prototype.setTime.length", + 1, + Date.prototype.setTime.length ); +test(); +function addTestCase( d, t ) { + new TestCase( SECTION, + "( "+d+" ).setTime("+t+")", + t, + d.setTime(t) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1.1)+")", + TimeClip(t+1.1), + d.setTime(t+1.1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1)+")", + t+1, + d.setTime(t+1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-1)+")", + t-1, + d.setTime(t-1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-TZ_ADJUST)+")", + t-TZ_ADJUST, + d.setTime(t-TZ_ADJUST) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+TZ_ADJUST)+")", + t+TZ_ADJUST, + d.setTime(t+TZ_ADJUST) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-7.js new file mode 100644 index 00000000..4e09d7cb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-7.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-2.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.23-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000, + UTC_FEB_29_2000, UTC_JAN_1_2005 ); + + +for ( var j = 0; j < test_times.length; j++ ) { + addTestCase( new Date(TIME_2000), test_times[j] ); +} + + +new TestCase( SECTION, + "(new Date(NaN)).setTime()", + NaN, + (new Date(NaN)).setTime() ); + +new TestCase( SECTION, + "Date.prototype.setTime.length", + 1, + Date.prototype.setTime.length ); +test(); + +function addTestCase( d, t ) { + new TestCase( SECTION, + "( "+d+" ).setTime("+t+")", + t, + d.setTime(t) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1.1)+")", + TimeClip(t+1.1), + d.setTime(t+1.1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1)+")", + t+1, + d.setTime(t+1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-1)+")", + t-1, + d.setTime(t-1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-TZ_ADJUST)+")", + t-TZ_ADJUST, + d.setTime(t-TZ_ADJUST) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+TZ_ADJUST)+")", + t+TZ_ADJUST, + d.setTime(t+TZ_ADJUST) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-8.js new file mode 100644 index 00000000..4de029f6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-8.js @@ -0,0 +1,69 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-2.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.23-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000, + UTC_FEB_29_2000, UTC_JAN_1_2005 ); + + +for ( var j = 0; j < test_times.length; j++ ) { + addTestCase( new Date(UTC_FEB_29_2000), test_times[j] ); +} + +test(); + +function addTestCase( d, t ) { + new TestCase( SECTION, + "( "+d+" ).setTime("+t+")", + t, + d.setTime(t) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1.1)+")", + TimeClip(t+1.1), + d.setTime(t+1.1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1)+")", + t+1, + d.setTime(t+1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-1)+")", + t-1, + d.setTime(t-1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-TZ_ADJUST)+")", + t-TZ_ADJUST, + d.setTime(t-TZ_ADJUST) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+TZ_ADJUST)+")", + t+TZ_ADJUST, + d.setTime(t+TZ_ADJUST) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.23-9.js b/source/spidermonkey-tests/ecma/Date/15.9.5.23-9.js new file mode 100644 index 00000000..2288bb59 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.23-9.js @@ -0,0 +1,69 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.23-2.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.23-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.setTime()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +test_times = new Array( TIME_NOW, TIME_0000, TIME_1970, TIME_1900, TIME_2000, + UTC_FEB_29_2000, UTC_JAN_1_2005 ); + + +for ( var j = 0; j < test_times.length; j++ ) { + addTestCase( new Date(UTC_JAN_1_2005), test_times[j] ); +} + +test(); + +function addTestCase( d, t ) { + new TestCase( SECTION, + "( "+d+" ).setTime("+t+")", + t, + d.setTime(t) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1.1)+")", + TimeClip(t+1.1), + d.setTime(t+1.1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+1)+")", + t+1, + d.setTime(t+1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-1)+")", + t-1, + d.setTime(t-1) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t-TZ_ADJUST)+")", + t-TZ_ADJUST, + d.setTime(t-TZ_ADJUST) ); + + new TestCase( SECTION, + "( "+d+" ).setTime("+(t+TZ_ADJUST)+")", + t+TZ_ADJUST, + d.setTime(t+TZ_ADJUST) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-1.js new file mode 100644 index 00000000..627b8cfa --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-1.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + + +addTestCase( 0, 0 ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-2.js new file mode 100644 index 00000000..27bd97f4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-2.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + + +addTestCase( 0, -86400000 ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-3.js new file mode 100644 index 00000000..e8d8ddb6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-3.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + + +addTestCase( 0, -2208988800000 ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-4.js new file mode 100644 index 00000000..58ed4144 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-4.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + + +addTestCase( 0, 946684800000 ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-5.js new file mode 100644 index 00000000..1107ab9e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-5.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + + +addTestCase( 0, "0" ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-6.js new file mode 100644 index 00000000..0375cb19 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-6.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + + +addTestCase( 0, "-2208988800000" ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-7.js new file mode 100644 index 00000000..171786cf --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-7.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + + +addTestCase( 0, "-86400000" ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.24-8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.24-8.js new file mode 100644 index 00000000..96a07b68 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.24-8.js @@ -0,0 +1,100 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.24-1.js + ECMA Section: 15.9.5.24 Date.prototype.setTime(time) + Description: + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var TITLE = "Date.prototype.setTime" + var SECTION = "15.9.5.24-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMilliseconds(ms)"); + +addTestCase( 0, "946684800000" ); + +test(); + +function addTestCase( startms, newms ) { + + var DateCase = new Date( startms ); + DateCase.setMilliseconds( newms ); + var DateString = "var date = new Date("+ startms +"); date.setMilliseconds("+ newms +"); date"; + var localms = UTC( Number(newms) + LocalTime( Number(startms) ) ); + var UTCDate = UTCDateFromTime( localms ); + var LocalDate = LocalDateFromTime( localms ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.25-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.25-1.js new file mode 100644 index 00000000..d6f7e9d7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.25-1.js @@ -0,0 +1,140 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.25-1.js + ECMA Section: 15.9.5.25 Date.prototype.setUTCMilliseconds(ms) + Description: + 1. Let t be this time value. + 2. Call ToNumber(ms). + 3. Compute MakeTime(HourFromTime(t), MinFromTime(t), SecFromTime(t), Result(2)). + 4. Compute MakeDate(Day(t), Result(3)). + 5. Set the [[Value]] property of the this value to TimeClip(Result(4)). + 6. Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.25-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCMilliseconds(ms)"); + +addNewTestCase( 0, 0, "TDATE = new Date(0);(TDATE).setUTCMilliseconds(0);TDATE", + UTCDateFromTime(SetUTCMilliseconds(0,0)), + LocalDateFromTime(SetUTCMilliseconds(0,0)) ); +addNewTestCase( 28800000,999, + "TDATE = new Date(28800000);(TDATE).setUTCMilliseconds(999);TDATE", + UTCDateFromTime(SetUTCMilliseconds(28800000,999)), + LocalDateFromTime(SetUTCMilliseconds(28800000,999)) ); +addNewTestCase( 28800000,-28800000, + "TDATE = new Date(28800000);(TDATE).setUTCMilliseconds(-28800000);TDATE", + UTCDateFromTime(SetUTCMilliseconds(28800000,-28800000)), + LocalDateFromTime(SetUTCMilliseconds(28800000,-28800000)) ); +addNewTestCase( 946684800000,1234567, + "TDATE = new Date(946684800000);(TDATE).setUTCMilliseconds(1234567);TDATE", + UTCDateFromTime(SetUTCMilliseconds(946684800000,1234567)), + LocalDateFromTime(SetUTCMilliseconds(946684800000,1234567)) ); +addNewTestCase( 946684800000, 123456789, + "TDATE = new Date(946684800000);(TDATE).setUTCMilliseconds(123456789);TDATE", + UTCDateFromTime(SetUTCMilliseconds(946684800000,123456789)), + LocalDateFromTime(SetUTCMilliseconds(946684800000,123456789)) ); + +addNewTestCase( -2208988800000,123456789, + "TDATE = new Date(-2208988800000);(TDATE).setUTCMilliseconds(123456789);TDATE", + UTCDateFromTime(SetUTCMilliseconds(-2208988800000,123456789)), + LocalDateFromTime(SetUTCMilliseconds(-2208988800000,123456789)) ); + +addNewTestCase( -2208988800000,123456, + "TDATE = new Date(-2208988800000);(TDATE).setUTCMilliseconds(123456);TDATE", + UTCDateFromTime(SetUTCMilliseconds(-2208988800000,123456)), + LocalDateFromTime(SetUTCMilliseconds(-2208988800000,123456)) ); + +addNewTestCase( -2208988800000,-123456, + "TDATE = new Date(-2208988800000);(TDATE).setUTCMilliseconds(-123456);TDATE", + UTCDateFromTime(SetUTCMilliseconds(-2208988800000,-123456)), + LocalDateFromTime(SetUTCMilliseconds(-2208988800000,-123456)) ); + +addNewTestCase( 0,-999, + "TDATE = new Date(0);(TDATE).setUTCMilliseconds(-999);TDATE", + UTCDateFromTime(SetUTCMilliseconds(0,-999)), + LocalDateFromTime(SetUTCMilliseconds(0,-999)) ); + +test(); + +function addNewTestCase( initialTime, ms, DateString, UTCDate, LocalDate) { + DateCase = new Date(initialTime); + DateCase.setUTCMilliseconds(ms); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} + +function SetUTCMilliseconds( T, MS ) { + T = Number( T ); + TIME = MakeTime( HourFromTime(T), + MinFromTime(T), + SecFromTime(T), + MS ); + return( MakeDate( Day(T), TIME )); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.26-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.26-1.js new file mode 100644 index 00000000..f9c6c6eb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.26-1.js @@ -0,0 +1,149 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** File Name: 15.9.5.26-1.js + ECMA Section: 15.9.5.26 Date.prototype.setSeconds(sec [,ms]) + Description: + + If ms is not specified, this behaves as if ms were specified with the + value getMilliseconds( ). + + 1. Let t be the result of LocalTime(this time value). + 2. Call ToNumber(sec). + 3. If ms is not specified, compute msFromTime(t); otherwise, call + ToNumber(ms). + 4. Compute MakeTime(HourFromTime(t), MinFromTime(t), Result(2), + Result(3)). + 5. Compute UTC(MakeDate(Day(t), Result(4))). + 6. Set the [[Value]] property of the this value to TimeClip(Result(5)). + 7. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.26-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setSeconds(sec [,ms] )"); + +addNewTestCase( 0, 0, 0, + "TDATE = new Date(0);(TDATE).setSeconds(0,0);TDATE", + UTCDateFromTime(SetSeconds(0,0,0)), + LocalDateFromTime(SetSeconds(0,0,0)) ); + +addNewTestCase( 28800000,59,999, + "TDATE = new Date(28800000);(TDATE).setSeconds(59,999);TDATE", + UTCDateFromTime(SetSeconds(28800000,59,999)), + LocalDateFromTime(SetSeconds(28800000,59,999)) ); + +addNewTestCase( 28800000,999,999, + "TDATE = new Date(28800000);(TDATE).setSeconds(999,999);TDATE", + UTCDateFromTime(SetSeconds(28800000,999,999)), + LocalDateFromTime(SetSeconds(28800000,999,999)) ); + +addNewTestCase( 28800000,999, void 0, + "TDATE = new Date(28800000);(TDATE).setSeconds(999);TDATE", + UTCDateFromTime(SetSeconds(28800000,999,0)), + LocalDateFromTime(SetSeconds(28800000,999,0)) ); + +addNewTestCase( 28800000,-28800, void 0, + "TDATE = new Date(28800000);(TDATE).setSeconds(-28800);TDATE", + UTCDateFromTime(SetSeconds(28800000,-28800)), + LocalDateFromTime(SetSeconds(28800000,-28800)) ); + +addNewTestCase( 946684800000,1234567,void 0, + "TDATE = new Date(946684800000);(TDATE).setSeconds(1234567);TDATE", + UTCDateFromTime(SetSeconds(946684800000,1234567)), + LocalDateFromTime(SetSeconds(946684800000,1234567)) ); + +addNewTestCase( -2208988800000,59,999, + "TDATE = new Date(-2208988800000);(TDATE).setSeconds(59,999);TDATE", + UTCDateFromTime(SetSeconds(-2208988800000,59,999)), + LocalDateFromTime(SetSeconds(-2208988800000,59,999)) ); + +test(); + +function addNewTestCase( startTime, sec, ms, DateString,UTCDate, LocalDate) { + DateCase = new Date( startTime ); + if ( ms != void 0 ) { + DateCase.setSeconds( sec, ms ); + } else { + DateCase.setSeconds( sec ); + } + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetSeconds( t, s, m ) { + var MS = ( m == void 0 ) ? msFromTime(t) : Number( m ); + var TIME = LocalTime( t ); + var SEC = Number(s); + var RESULT4 = MakeTime( HourFromTime( TIME ), + MinFromTime( TIME ), + SEC, + MS ); + var UTC_TIME = UTC(MakeDate(Day(TIME), RESULT4)); + return ( TimeClip(UTC_TIME) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.27-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.27-1.js new file mode 100644 index 00000000..bb7a99a3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.27-1.js @@ -0,0 +1,149 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.27-1.js + ECMA Section: 15.9.5.27 Date.prototype.setUTCSeconds(sec [,ms]) + Description: + + If ms is not specified, this behaves as if ms were specified with the + value getUTCMilliseconds( ). + + 1. Let t be this time value. + 2. Call ToNumber(sec). + 3. If ms is not specified, compute msFromTime(t); otherwise, call + ToNumber(ms) + 4. Compute MakeTime(HourFromTime(t), MinFromTime(t), Result(2), Result(3)) + 5. Compute MakeDate(Day(t), Result(4)). + 6. Set the [[Value]] property of the this value to TimeClip(Result(5)). + 7. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.27-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCSeconds(sec [,ms] )"); + +addNewTestCase( 0, 0, 0, "TDATE = new Date(0);(TDATE).setUTCSeconds(0,0);TDATE", + UTCDateFromTime(SetUTCSeconds(0,0,0)), + LocalDateFromTime(SetUTCSeconds(0,0,0)) ); + +addNewTestCase( 28800000,59,999, + "TDATE = new Date(28800000);(TDATE).setUTCSeconds(59,999);TDATE", + UTCDateFromTime(SetUTCSeconds(28800000,59,999)), + LocalDateFromTime(SetUTCSeconds(28800000,59,999)) ); + +addNewTestCase( 28800000,999,999, + "TDATE = new Date(28800000);(TDATE).setUTCSeconds(999,999);TDATE", + UTCDateFromTime(SetUTCSeconds(28800000,999,999)), + LocalDateFromTime(SetUTCSeconds(28800000,999,999)) ); + +addNewTestCase( 28800000, 999, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCSeconds(999);TDATE", + UTCDateFromTime(SetUTCSeconds(28800000,999,0)), + LocalDateFromTime(SetUTCSeconds(28800000,999,0)) ); + +addNewTestCase( 28800000, -28800, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCSeconds(-28800);TDATE", + UTCDateFromTime(SetUTCSeconds(28800000,-28800)), + LocalDateFromTime(SetUTCSeconds(28800000,-28800)) ); + +addNewTestCase( 946684800000, 1234567, void 0, + "TDATE = new Date(946684800000);(TDATE).setUTCSeconds(1234567);TDATE", + UTCDateFromTime(SetUTCSeconds(946684800000,1234567)), + LocalDateFromTime(SetUTCSeconds(946684800000,1234567)) ); + +addNewTestCase( -2208988800000,59,999, + "TDATE = new Date(-2208988800000);(TDATE).setUTCSeconds(59,999);TDATE", + UTCDateFromTime(SetUTCSeconds(-2208988800000,59,999)), + LocalDateFromTime(SetUTCSeconds(-2208988800000,59,999)) ); + +test(); + +function addNewTestCase( startTime, sec, ms, DateString, UTCDate, LocalDate) { + DateCase = new Date( startTime ); + if ( ms == void 0) { + DateCase.setSeconds( sec ); + } else { + DateCase.setSeconds( sec, ms ); + } + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} + +function SetUTCSeconds( t, s, m ) { + var TIME = t; + var SEC = Number(s); + var MS = ( m == void 0 ) ? msFromTime(TIME) : Number( m ); + var RESULT4 = MakeTime( HourFromTime( TIME ), + MinFromTime( TIME ), + SEC, + MS ); + return ( TimeClip(MakeDate(Day(TIME), RESULT4)) ); +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.28-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.28-1.js new file mode 100644 index 00000000..4bbc0251 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.28-1.js @@ -0,0 +1,163 @@ +// |reftest| random-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.28-1.js + ECMA Section: 15.9.5.28 Date.prototype.setMinutes(min [, sec [, ms ]] ) + Description: + If sec is not specified, this behaves as if sec were specified with the + value getSeconds ( ). + + If ms is not specified, this behaves as if ms were specified with the + value getMilliseconds( ). + + 1. Let t be the result of LocalTime(this time value). + 2. Call ToNumber(min). + 3. If sec is not specified, compute SecFromTime(t); otherwise, call ToNumber(sec). + 4. If ms is not specified, compute msFromTime(t); otherwise, call ToNumber(ms). + 5. Compute MakeTime(HourFromTime(t), Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Day(t), Result(5))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.28-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMinutes(sec [,ms] )"); + +addNewTestCase( 0, 0, void 0, void 0, + "TDATE = new Date(0);(TDATE).setMinutes(0);TDATE", + UTCDateFromTime(SetMinutes(0,0,0,0)), + LocalDateFromTime(SetMinutes(0,0,0,0)) ); + +addNewTestCase( 28800000, 59, 59, void 0, + "TDATE = new Date(28800000);(TDATE).setMinutes(59,59);TDATE", + UTCDateFromTime(SetMinutes(28800000,59,59)), + LocalDateFromTime(SetMinutes(28800000,59,59)) ); + +addNewTestCase( 28800000, 59, 59, 999, + "TDATE = new Date(28800000);(TDATE).setMinutes(59,59,999);TDATE", + UTCDateFromTime(SetMinutes(28800000,59,59,999)), + LocalDateFromTime(SetMinutes(28800000,59,59,999)) ); + +addNewTestCase( 28800000, 59, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setMinutes(59);TDATE", + UTCDateFromTime(SetMinutes(28800000,59,0)), + LocalDateFromTime(SetMinutes(28800000,59,0)) ); + +addNewTestCase( 28800000, -480, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setMinutes(-480);TDATE", + UTCDateFromTime(SetMinutes(28800000,-480)), + LocalDateFromTime(SetMinutes(28800000,-480)) ); + +addNewTestCase( 946684800000, 1234567, void 0, void 0, + "TDATE = new Date(946684800000);(TDATE).setMinutes(1234567);TDATE", + UTCDateFromTime(SetMinutes(946684800000,1234567)), + LocalDateFromTime(SetMinutes(946684800000,1234567)) ); + +addNewTestCase( -2208988800000,59, 59, void 0, + "TDATE = new Date(-2208988800000);(TDATE).setMinutes(59,59);TDATE", + UTCDateFromTime(SetMinutes(-2208988800000,59,59)), + LocalDateFromTime(SetMinutes(-2208988800000,59,59)) ); + +addNewTestCase( -2208988800000, 59, 59, 999, + "TDATE = new Date(-2208988800000);(TDATE).setMinutes(59,59,999);TDATE", + UTCDateFromTime(SetMinutes(-2208988800000,59,59,999)), + LocalDateFromTime(SetMinutes(-2208988800000,59,59,999)) ); + +test(); + +function addNewTestCase( time, min, sec, ms, DateString, UTCDate, LocalDate) { + DateCase = new Date( time ); + + if ( sec == void 0 ) { + DateCase.setMinutes( min ); + } else { + if ( ms == void 0 ) { + DateCase.setMinutes( min, sec ); + } else { + DateCase.setMinutes( min, sec, ms ); + } + } + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} + +function SetMinutes( t, min, sec, ms ) { + var TIME = LocalTime(t); + var MIN = Number(min); + var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec); + var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms); + var RESULT5 = MakeTime( HourFromTime( TIME ), + MIN, + SEC, + MS ); + return ( TimeClip(UTC( MakeDate(Day(TIME),RESULT5))) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.29-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.29-1.js new file mode 100644 index 00000000..172e95a7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.29-1.js @@ -0,0 +1,158 @@ +// |reftest| random-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.29-1.js + ECMA Section: 15.9.5.29 Date.prototype.setUTCMinutes(min [, sec [, ms ]] ) + Description: + If sec is not specified, this behaves as if sec were specified with the + value getUTCSeconds ( ). + + If ms is not specified, this behaves as if ms were specified with the value + getUTCMilliseconds( ). + + 1. Let t be this time value. + 2. Call ToNumber(min). + 3. If sec is not specified, compute SecFromTime(t); otherwise, call + ToNumber(sec). + 4. If ms is not specified, compute msFromTime(t); otherwise, call + ToNumber(ms). + 5. Compute MakeTime(HourFromTime(t), Result(2), Result(3), Result(4)). + 6. Compute MakeDate(Day(t), Result(5)). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.29-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCMinutes( min [, sec, ms] )"); + +addNewTestCase( 0, 0, void 0, void 0, + "TDATE = new Date(0);(TDATE).setUTCMinutes(0);TDATE", + UTCDateFromTime(SetUTCMinutes(0,0,0,0)), + LocalDateFromTime(SetUTCMinutes(0,0,0,0)) ); + +addNewTestCase( 28800000, 59, 59, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCMinutes(59,59);TDATE", + UTCDateFromTime(SetUTCMinutes(28800000,59,59)), + LocalDateFromTime(SetUTCMinutes(28800000,59,59)) ); + +addNewTestCase( 28800000, 59, 59, 999, + "TDATE = new Date(28800000);(TDATE).setUTCMinutes(59,59,999);TDATE", + UTCDateFromTime(SetUTCMinutes(28800000,59,59,999)), + LocalDateFromTime(SetUTCMinutes(28800000,59,59,999)) ); + +addNewTestCase( 28800000, 59, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCMinutes(59);TDATE", + UTCDateFromTime(SetUTCMinutes(28800000,59)), + LocalDateFromTime(SetUTCMinutes(28800000,59)) ); + +addNewTestCase( 28800000, -480, 0, 0, + "TDATE = new Date(28800000);(TDATE).setUTCMinutes(-480);TDATE", + UTCDateFromTime(SetUTCMinutes(28800000,-480)), + LocalDateFromTime(SetUTCMinutes(28800000,-480)) ); + +addNewTestCase( 946684800000, 1234567, void 0, void 0, + "TDATE = new Date(946684800000);(TDATE).setUTCMinutes(1234567);TDATE", + UTCDateFromTime(SetUTCMinutes(946684800000,1234567)), + LocalDateFromTime(SetUTCMinutes(946684800000,1234567)) ); + +addNewTestCase( -2208988800000, 59, 999, void 0, + "TDATE = new Date(-2208988800000);(TDATE).setUTCMinutes(59,999);TDATE", + UTCDateFromTime(SetUTCMinutes(-2208988800000,59,999)), + LocalDateFromTime(SetUTCMinutes(-2208988800000,59,999)) ); + +test(); + +function addNewTestCase( time, min, sec, ms, DateString, UTCDate, LocalDate) { + var DateCase = new Date( time ); + + if ( sec == void 0 ) { + DateCase.setUTCMinutes( min ); + } else { + if ( ms == void 0 ) { + DateCase.setUTCMinutes( min, sec ); + } else { + DateCase.setUTCMinutes( min, sec, ms ); + } + } + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCMinutes( t, min, sec, ms ) { + var TIME = t; + var MIN = Number(min); + var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec); + var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms); + var RESULT5 = MakeTime( HourFromTime( TIME ), + MIN, + SEC, + MS ); + return ( TimeClip(MakeDate(Day(TIME),RESULT5)) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.3-1-n.js b/source/spidermonkey-tests/ecma/Date/15.9.5.3-1-n.js new file mode 100644 index 00000000..3bcc3af2 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.3-1-n.js @@ -0,0 +1,46 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.3-1.js + ECMA Section: 15.9.5.3-1 Date.prototype.valueOf + Description: + + The valueOf function returns a number, which is this time value. + + The valueOf function is not generic; it generates a runtime error if + its this value is not a Date object. Therefore it cannot be transferred + to other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.3-1-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.valueOf"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var OBJ = new MyObject( new Date(0) ); + +DESCRIPTION = "var OBJ = new MyObject( new Date(0) ); OBJ.valueOf()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var OBJ = new MyObject( new Date(0) ); OBJ.valueOf()", + "error", + eval("OBJ.valueOf()") ); +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = Date.prototype.valueOf; +// The following line causes an infinte loop +// this.toString = new Function( "return this+\"\";"); + return this; +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.3-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.3-2.js new file mode 100644 index 00000000..bc46a27b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.3-2.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.3-2.js + ECMA Section: 15.9.5.3-2 Date.prototype.valueOf + Description: + + The valueOf function returns a number, which is this time value. + + The valueOf function is not generic; it generates a runtime error if + its this value is not a Date object. Therefore it cannot be transferred + to other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.valueOf"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+").valueOf()", + t, + (new Date(t)).valueOf() ); + + new TestCase( SECTION, + "(new Date("+(t+1)+").valueOf()", + t+1, + (new Date(t+1)).valueOf() ); + + new TestCase( SECTION, + "(new Date("+(t-1)+").valueOf()", + t-1, + (new Date(t-1)).valueOf() ); + + new TestCase( SECTION, + "(new Date("+(t-TZ_ADJUST)+").valueOf()", + t-TZ_ADJUST, + (new Date(t-TZ_ADJUST)).valueOf() ); + + new TestCase( SECTION, + "(new Date("+(t+TZ_ADJUST)+").valueOf()", + t+TZ_ADJUST, + (new Date(t+TZ_ADJUST)).valueOf() ); +} + +function MyObject( value ) { + this.value = value; + this.valueOf = Date.prototype.valueOf; + this.toString = new Function( "return this+\"\";"); + return this; +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.30-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.30-1.js new file mode 100644 index 00000000..4461ee36 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.30-1.js @@ -0,0 +1,158 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.30-1.js + ECMA Section: 15.9.5.30 Date.prototype.setHours(hour [, min [, sec [, ms ]]] ) + Description: + If min is not specified, this behaves as if min were specified with the + value getMinutes( ). If sec is not specified, this behaves as if sec were + specified with the value getSeconds ( ). If ms is not specified, this + behaves as if ms were specified with the value getMilliseconds( ). + + 1. Let t be the result of LocalTime(this time value). + 2. Call ToNumber(hour). + 3. If min is not specified, compute MinFromTime(t); otherwise, call + ToNumber(min). + 4. If sec is not specified, compute SecFromTime(t); otherwise, call + ToNumber(sec). + 5. If ms is not specified, compute msFromTime(t); otherwise, call + ToNumber(ms). + 6. Compute MakeTime(Result(2), Result(3), Result(4), Result(5)). + 7. Compute UTC(MakeDate(Day(t), Result(6))). + 8. Set the [[Value]] property of the this value to TimeClip(Result(7)). + 9. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.30-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setHours( hour [, min, sec, ms] )"); + +addNewTestCase( 0,0,0,0,void 0, + "TDATE = new Date(0);(TDATE).setHours(0);TDATE" ); + +addNewTestCase( 28800000, 23, 59, 999,void 0, + "TDATE = new Date(28800000);(TDATE).setHours(23,59,999);TDATE" ); + +addNewTestCase( 28800000, 999, 999, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setHours(999,999);TDATE" ); + +addNewTestCase( 28800000,999,0, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setHours(999);TDATE" ); + +addNewTestCase( 28800000,-8, void 0, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setHours(-8);TDATE" ); + +addNewTestCase( 946684800000,8760, void 0, void 0, void 0, + "TDATE = new Date(946684800000);(TDATE).setHours(8760);TDATE" ); + +addNewTestCase( TIME_2000 - msPerDay, 23, 59, 59, 999, + "d = new Date( " + (TIME_2000-msPerDay) +"); d.setHours(23,59,59,999)" ); + +addNewTestCase( TIME_2000 - msPerDay, 23, 59, 59, 1000, + "d = new Date( " + (TIME_2000-msPerDay) +"); d.setHours(23,59,59,1000)" ); + +test(); + +function addNewTestCase( time, hours, min, sec, ms, DateString) { + var UTCDate = UTCDateFromTime( SetHours( time, hours, min, sec, ms )); + var LocalDate = LocalDateFromTime( SetHours( time, hours, min, sec, ms )); + + var DateCase = new Date( time ); + + if ( min == void 0 ) { + DateCase.setHours( hours ); + } else { + if ( sec == void 0 ) { + DateCase.setHours( hours, min ); + } else { + if ( ms == void 0 ) { + DateCase.setHours( hours, min, sec ); + } else { + DateCase.setHours( hours, min, sec, ms ); + } + } + } + + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.day = WeekDay( t ); + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + + return (d); +} +function SetHours( t, hour, min, sec, ms ) { + var TIME = LocalTime(t); + var HOUR = Number(hour); + var MIN = ( min == void 0) ? MinFromTime(TIME) : Number(min); + var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec); + var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms); + var RESULT6 = MakeTime( HOUR, + MIN, + SEC, + MS ); + var UTC_TIME = UTC( MakeDate(Day(TIME), RESULT6) ); + return ( TimeClip(UTC_TIME) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.31-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.31-1.js new file mode 100644 index 00000000..d9eda402 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.31-1.js @@ -0,0 +1,188 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.31-1.js + + ECMA Section: + 15.9.5.31 Date.prototype.setUTCHours(hour [, min [, sec [, ms ]]] ) + + Description: + + If min is not specified, this behaves as if min were specified with + the value getUTCMinutes( ). If sec is not specified, this behaves + as if sec were specified with the value getUTCSeconds ( ). If ms + is not specified, this behaves as if ms were specified with the + value getUTCMilliseconds( ). + + 1.Let t be this time value. + 2.Call ToNumber(hour). + 3.If min is not specified, compute MinFromTime(t); + otherwise, call ToNumber(min). + 4.If sec is not specified, compute SecFromTime(t); + otherwise, call ToNumber(sec). + 5.If ms is not specified, compute msFromTime(t); + otherwise, call ToNumber(ms). + 6.Compute MakeTime(Result(2), Result(3), Result(4), Result(5)). + 7.Compute MakeDate(Day(t), Result(6)). + 8.Set the [[Value]] property of the this value to TimeClip(Result(7)). + + 1.Return the value of the [[Value]] property of the this value. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.31-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog(SECTION + + " Date.prototype.setUTCHours(hour [, min [, sec [, ms ]]] )"); + +addNewTestCase( 0, 0, void 0, void 0, void 0, + "TDATE = new Date(0);(TDATE).setUTCHours(0);TDATE", + UTCDateFromTime(SetUTCHours(0,0,0,0)), + LocalDateFromTime(SetUTCHours(0,0,0,0)) ); + +addNewTestCase( 28800000, 23, 59, 999, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCHours(23,59,999);TDATE", + UTCDateFromTime(SetUTCHours(28800000,23,59,999)), + LocalDateFromTime(SetUTCHours(28800000,23,59,999)) ); + +addNewTestCase( 28800000,999,999, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCHours(999,999);TDATE", + UTCDateFromTime(SetUTCHours(28800000,999,999)), + LocalDateFromTime(SetUTCHours(28800000,999,999)) ); + +addNewTestCase( 28800000, 999, void 0, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCHours(999);TDATE", + UTCDateFromTime(SetUTCHours(28800000,999,0)), + LocalDateFromTime(SetUTCHours(28800000,999,0)) ); + +addNewTestCase( 28800000, -8670, void 0, void 0, void 0, + "TDATE = new Date(28800000);(TDATE).setUTCHours(-8670);TDATE", + UTCDateFromTime(SetUTCHours(28800000,-8670)), + LocalDateFromTime(SetUTCHours(28800000,-8670)) ); + +// modify hours to remove dst ambiguity +addNewTestCase( 946684800000, 1235567, void 0, void 0, void 0, + "TDATE = new Date(946684800000);(TDATE).setUTCHours(1235567);TDATE", + UTCDateFromTime(SetUTCHours(946684800000,1235567)), + LocalDateFromTime(SetUTCHours(946684800000,1235567)) ); + +addNewTestCase( -2208988800000, 59, 999, void 0, void 0, + "TDATE = new Date(-2208988800000);(TDATE).setUTCHours(59,999);TDATE", + UTCDateFromTime(SetUTCHours(-2208988800000,59,999)), + LocalDateFromTime(SetUTCHours(-2208988800000,59,999)) ); + +test(); + +function addNewTestCase( time, hours, min, sec, ms, DateString, UTCDate, LocalDate) { + + DateCase = new Date(time); + if ( min == void 0 ) { + DateCase.setUTCHours( hours ); + } else { + if ( sec == void 0 ) { + DateCase.setUTCHours( hours, min ); + } else { + if ( ms == void 0 ) { + DateCase.setUTCHours( hours, min, sec ); + } else { + DateCase.setUTCHours( hours, min, sec, ms ); + } + } + } + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, + DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, + DateCase.valueOf() ); + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, + DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, + DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, + DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, + DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, + DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, + DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, + DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, + DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, + DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, + DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, + DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, + DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, + DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, + DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, + DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, + DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;" + + DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCHours( t, hour, min, sec, ms ) { + var TIME = t; + var HOUR = Number(hour); + var MIN = ( min == void 0) ? MinFromTime(TIME) : Number(min); + var SEC = ( sec == void 0) ? SecFromTime(TIME) : Number(sec); + var MS = ( ms == void 0 ) ? msFromTime(TIME) : Number(ms); + var RESULT6 = MakeTime( HOUR, + MIN, + SEC, + MS ); + return ( TimeClip(MakeDate(Day(TIME), RESULT6)) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.32-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.32-1.js new file mode 100644 index 00000000..3e68178a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.32-1.js @@ -0,0 +1,107 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.32-1.js + ECMA Section: 15.9.5.32 Date.prototype.setDate(date) + Description: + 1. Let t be the result of LocalTime(this time value). + 2. Call ToNumber(date). + 3. Compute MakeDay(YearFromTime(t), MonthFromTime(t), Result(2)). + 4. Compute UTC(MakeDate(Result(3), TimeWithinDay(t))). + 5. Set the [[Value]] property of the this value to TimeClip(Result(4)). + 6. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.32-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setDate(date) "); + +addNewTestCase( 0, 1, + "TDATE = new Date(0);(TDATE).setDate(1);TDATE" ); + +test(); + +function addNewTestCase( t, d, DateString ) { + var DateCase = new Date( t ); + DateCase.setDate( d ); + + var UTCDate = UTCDateFromTime(SetDate(t, d)); + var LocalDate=LocalDateFromTime(SetDate(t,d)); + + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} + +function SetDate( t, date ) { + var T = LocalTime( t ); + var DATE = Number( date ); + var RESULT3 = MakeDay(YearFromTime(T), MonthFromTime(T), DATE ); + var UTC_DATE = UTC( MakeDate(RESULT3, TimeWithinDay(T)) ); + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.33-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.33-1.js new file mode 100644 index 00000000..cf46d3a6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.33-1.js @@ -0,0 +1,111 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.33-1.js + ECMA Section: 15.9.5.33 Date.prototype.setUTCDate(date) + Description: + 1. Let t be this time value. + 2. Call ToNumber(date). + 3. Compute MakeDay(YearFromTime(t), MonthFromTime(t), Result(2)). + 4. Compute MakeDate(Result(3), TimeWithinDay(t)). + 5. Set the [[Value]] property of the this value to TimeClip(Result(4)). + 6. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.33-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCDate(date) "); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCDate(31);TDATE", + UTCDateFromTime(SetUTCDate(0,31)), + LocalDateFromTime(SetUTCDate(0,31)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCDate(1);TDATE", + UTCDateFromTime(SetUTCDate(0,1)), + LocalDateFromTime(SetUTCDate(0,1)) ); + +addNewTestCase( "TDATE = new Date(86400000);(TDATE).setUTCDate(1);TDATE", + UTCDateFromTime(SetUTCDate(86400000,1)), + LocalDateFromTime(SetUTCDate(86400000,1)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCDate( t, date ) { + var T = t; + var DATE = Number( date ); + var RESULT3 = MakeDay(YearFromTime(T), MonthFromTime(T), DATE ); + return ( TimeClip(MakeDate(RESULT3, TimeWithinDay(t))) ); +} + diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.34-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.34-1.js new file mode 100644 index 00000000..8e18482c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.34-1.js @@ -0,0 +1,149 @@ +// |reftest| random +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.34-1.js + ECMA Section: 15.9.5.34 Date.prototype.setMonth(mon [, date ] ) + Description: + If date is not specified, this behaves as if date were specified with the + value getDate( ). + + 1. Let t be the result of LocalTime(this time value). + 2. Call ToNumber(date). + 3. If date is not specified, compute DateFromTime(t); otherwise, call ToNumber(date). + 4. Compute MakeDay(YearFromTime(t), Result(2), Result(3)). + 5. Compute UTC(MakeDate(Result(4), TimeWithinDay(t))). + 6. Set the [[Value]] property of the this value to TimeClip(Result(5)). + 7. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.34-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setMonth(mon [, date ] )"); + +getFunctionCases(); + +// regression test for http://scopus.mcom.com/bugsplat/show_bug.cgi?id=112404 +d = new Date(0); +d.setMonth(1,1,1,1,1,1); + +addNewTestCase( + "TDATE = new Date(0); TDATE.setMonth(1,1,1,1,1,1); TDATE", + UTCDateFromTime(SetMonth(0,1,1)), + LocalDateFromTime(SetMonth(0,1,1)) ); + + +// whatever today is + +addNewTestCase( "TDATE = new Date(TIME_NOW); (TDATE).setMonth(11,31); TDATE", + UTCDateFromTime(SetMonth(TIME_NOW,11,31)), + LocalDateFromTime(SetMonth(TIME_NOW,11,31)) ); + +// 1970 + +addNewTestCase( "TDATE = new Date(0);(TDATE).setMonth(0,1);TDATE", + UTCDateFromTime(SetMonth(0,0,1)), + LocalDateFromTime(SetMonth(0,0,1)) ); + +addNewTestCase( "TDATE = new Date("+TIME_1900+"); "+ + "(TDATE).setMonth(11,31); TDATE", + UTCDateFromTime( SetMonth(TIME_1900,11,31) ), + LocalDateFromTime( SetMonth(TIME_1900,11,31) ) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function getFunctionCases() { + // some tests for all functions + new TestCase( + SECTION, + "Date.prototype.setMonth.length", + 2, + Date.prototype.setMonth.length ); + + new TestCase( + SECTION, + "typeof Date.prototype.setMonth", + "function", + typeof Date.prototype.setMonth ); + +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetMonth( t, mon, date ) { + var TIME = LocalTime(t); + var MONTH = Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(TIME) : Number( date ); + var DAY = MakeDay( YearFromTime(TIME), MONTH, DATE ); + return ( TimeClip (UTC(MakeDate( DAY, TimeWithinDay(TIME) ))) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.35-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.35-1.js new file mode 100644 index 00000000..68a0d7a3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.35-1.js @@ -0,0 +1,106 @@ +// |reftest| random-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.35-1.js + ECMA Section: 15.9.5.35 Date.prototype.setUTCMonth(mon [,date]) + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.35-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCMonth(mon [,date] ) "); +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCMonth(0);TDATE", + UTCDateFromTime(SetUTCMonth(0,0)), + LocalDateFromTime(SetUTCMonth(0,0)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCMonth(11);TDATE", + UTCDateFromTime(SetUTCMonth(0,11)), + LocalDateFromTime(SetUTCMonth(0,11)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCMonth(5,4);TDATE", + UTCDateFromTime(SetUTCMonth(0,5,4)), + LocalDateFromTime(SetUTCMonth(0,5,4)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes, DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds, DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCMonth( t, month, date ) { + var T = t; + var MONTH = Number( month ); + var DATE = ( date == void 0) ? DateFromTime(T) : Number( date ); + + var RESULT4 = MakeDay(YearFromTime(T), MONTH, DATE ); + var RESULT5 = MakeDate( RESULT4, TimeWithinDay(T)); + + return ( TimeClip(RESULT5) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.36-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.36-1.js new file mode 100644 index 00000000..5722c8d7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.36-1.js @@ -0,0 +1,131 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.36-1.js + ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getMonth( ). If date is not specified, this behaves as if date were + specified with the value getDate( ). + + 1. Let t be the result of LocalTime(this time value); but if this time + value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added test cases for Year 2000 Compatilibity Testing. + +*/ +var SECTION = "15.9.5.36-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )"); + + +// 1969 + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1969);TDATE", + UTCDateFromTime(SetFullYear(0,1969)), + LocalDateFromTime(SetFullYear(0,1969)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1969,11);TDATE", + UTCDateFromTime(SetFullYear(0,1969,11)), + LocalDateFromTime(SetFullYear(0,1969,11)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1969,11,31);TDATE", + UTCDateFromTime(SetFullYear(0,1969,11,31)), + LocalDateFromTime(SetFullYear(0,1969,11,31)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetFullYear( t, year, mon, date ) { + var T = ( isNaN(t) ) ? 0 : LocalTime(t) ; + var YEAR = Number( year ); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + + var DAY = MakeDay( YEAR, MONTH, DATE ); + var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T))); + + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.36-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.36-2.js new file mode 100644 index 00000000..c963c7d7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.36-2.js @@ -0,0 +1,130 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.36-1.js + ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getMonth( ). If date is not specified, this behaves as if date were + specified with the value getDate( ). + + 1. Let t be the result of LocalTime(this time value); but if this time + value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added test cases for Year 2000 Compatilibity Testing. + +*/ +var SECTION = "15.9.5.36-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )"); + +// 1970 + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970);TDATE", + UTCDateFromTime(SetFullYear(0,1970)), + LocalDateFromTime(SetFullYear(0,1970)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970,0);TDATE", + UTCDateFromTime(SetFullYear(0,1970,0)), + LocalDateFromTime(SetFullYear(0,1970,0)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1970,0,1);TDATE", + UTCDateFromTime(SetFullYear(0,1970,0,1)), + LocalDateFromTime(SetFullYear(0,1970,0,1)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetFullYear( t, year, mon, date ) { + var T = ( isNaN(t) ) ? 0 : LocalTime(t) ; + var YEAR = Number( year ); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + + var DAY = MakeDay( YEAR, MONTH, DATE ); + var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T))); + + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.36-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.36-3.js new file mode 100644 index 00000000..b217b6ea --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.36-3.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.36-1.js + ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getMonth( ). If date is not specified, this behaves as if date were + specified with the value getDate( ). + + 1. Let t be the result of LocalTime(this time value); but if this time + value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added test cases for Year 2000 Compatilibity Testing. + +*/ +var SECTION = "15.9.5.36-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )"); + +// 1971 +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971);TDATE", + UTCDateFromTime(SetFullYear(0,1971)), + LocalDateFromTime(SetFullYear(0,1971)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971,0);TDATE", + UTCDateFromTime(SetFullYear(0,1971,0)), + LocalDateFromTime(SetFullYear(0,1971,0)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1971,0,1);TDATE", + UTCDateFromTime(SetFullYear(0,1971,0,1)), + LocalDateFromTime(SetFullYear(0,1971,0,1)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetFullYear( t, year, mon, date ) { + var T = ( isNaN(t) ) ? 0 : LocalTime(t) ; + var YEAR = Number( year ); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + + var DAY = MakeDay( YEAR, MONTH, DATE ); + var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T))); + + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.36-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.36-4.js new file mode 100644 index 00000000..178e0226 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.36-4.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.36-1.js + ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getMonth( ). If date is not specified, this behaves as if date were + specified with the value getDate( ). + + 1. Let t be the result of LocalTime(this time value); but if this time + value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added test cases for Year 2000 Compatilibity Testing. + +*/ +var SECTION = "15.9.5.36-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )"); + +// 1999 +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999);TDATE", + UTCDateFromTime(SetFullYear(0,1999)), + LocalDateFromTime(SetFullYear(0,1999)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999,11);TDATE", + UTCDateFromTime(SetFullYear(0,1999,11)), + LocalDateFromTime(SetFullYear(0,1999,11)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(1999,11,31);TDATE", + UTCDateFromTime(SetFullYear(0,1999,11,31)), + LocalDateFromTime(SetFullYear(0,1999,11,31)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetFullYear( t, year, mon, date ) { + var T = ( isNaN(t) ) ? 0 : LocalTime(t) ; + var YEAR = Number( year ); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + + var DAY = MakeDay( YEAR, MONTH, DATE ); + var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T))); + + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.36-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.36-5.js new file mode 100644 index 00000000..e55cac09 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.36-5.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.36-1.js + ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getMonth( ). If date is not specified, this behaves as if date were + specified with the value getDate( ). + + 1. Let t be the result of LocalTime(this time value); but if this time + value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added test cases for Year 2000 Compatilibity Testing. + +*/ +var SECTION = "15.9.5.36-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )"); + +// 2000 +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000);TDATE", + UTCDateFromTime(SetFullYear(0,2000)), + LocalDateFromTime(SetFullYear(0,2000)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,0);TDATE", + UTCDateFromTime(SetFullYear(0,2000,0)), + LocalDateFromTime(SetFullYear(0,2000,0)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,0,1);TDATE", + UTCDateFromTime(SetFullYear(0,2000,0,1)), + LocalDateFromTime(SetFullYear(0,2000,0,1)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetFullYear( t, year, mon, date ) { + var T = ( isNaN(t) ) ? 0 : LocalTime(t) ; + var YEAR = Number( year ); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + + var DAY = MakeDay( YEAR, MONTH, DATE ); + var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T))); + + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.36-6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.36-6.js new file mode 100644 index 00000000..3985e4ff --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.36-6.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.36-1.js + ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getMonth( ). If date is not specified, this behaves as if date were + specified with the value getDate( ). + + 1. Let t be the result of LocalTime(this time value); but if this time + value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added test cases for Year 2000 Compatilibity Testing. + +*/ +var SECTION = "15.9.5.36-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )"); + +// feb 29, 2000 +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000);TDATE", + UTCDateFromTime(SetFullYear(0,2000)), + LocalDateFromTime(SetFullYear(0,2000)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,1);TDATE", + UTCDateFromTime(SetFullYear(0,2000,1)), + LocalDateFromTime(SetFullYear(0,2000,1)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2000,1,29);TDATE", + UTCDateFromTime(SetFullYear(0,2000,1,29)), + LocalDateFromTime(SetFullYear(0,2000,1,29)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetFullYear( t, year, mon, date ) { + var T = ( isNaN(t) ) ? 0 : LocalTime(t) ; + var YEAR = Number( year ); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + + var DAY = MakeDay( YEAR, MONTH, DATE ); + var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T))); + + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.36-7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.36-7.js new file mode 100644 index 00000000..31ba9b13 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.36-7.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.36-1.js + ECMA Section: 15.9.5.36 Date.prototype.setFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getMonth( ). If date is not specified, this behaves as if date were + specified with the value getDate( ). + + 1. Let t be the result of LocalTime(this time value); but if this time + value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute UTC(MakeDate(Result(5), TimeWithinDay(t))). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added test cases for Year 2000 Compatilibity Testing. + +*/ +var SECTION = "15.9.5.36-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setFullYear(year [, mon [, date ]] )"); + +// Jan 1, 2005 +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005);TDATE", + UTCDateFromTime(SetFullYear(0,2005)), + LocalDateFromTime(SetFullYear(0,2005)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005,0);TDATE", + UTCDateFromTime(SetFullYear(0,2005,0)), + LocalDateFromTime(SetFullYear(0,2005,0)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setFullYear(2005,0,1);TDATE", + UTCDateFromTime(SetFullYear(0,2005,0,1)), + LocalDateFromTime(SetFullYear(0,2005,0,1)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetFullYear( t, year, mon, date ) { + var T = ( isNaN(t) ) ? 0 : LocalTime(t) ; + var YEAR = Number( year ); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + + var DAY = MakeDay( YEAR, MONTH, DATE ); + var UTC_DATE = UTC(MakeDate( DAY, TimeWithinDay(T))); + + return ( TimeClip(UTC_DATE) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.37-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.37-1.js new file mode 100644 index 00000000..6200e79e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.37-1.js @@ -0,0 +1,139 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.37-1.js + ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getUTCMonth( ). If date is not specified, this behaves as if date + were specified with the value getUTCDate( ). + + 1. Let t be this time value; but if this time value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute MakeDate(Result(5), TimeWithinDay(t)). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added some Year 2000 test cases. +*/ +var SECTION = "15.9.5.37-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )"); + + +// Dates around 1970 + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1970);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1970)), + LocalDateFromTime(SetUTCFullYear(0,1970)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1971);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1971)), + LocalDateFromTime(SetUTCFullYear(0,1971)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1972);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1972)), + LocalDateFromTime(SetUTCFullYear(0,1972)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1968);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1968)), + LocalDateFromTime(SetUTCFullYear(0,1968)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1969);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1969)), + LocalDateFromTime(SetUTCFullYear(0,1969)) ); + +addNewTestCase( "TDATE = new Date(0);(TDATE).setUTCFullYear(1969);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1969)), + LocalDateFromTime(SetUTCFullYear(0,1969)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCFullYear( t, year, mon, date ) { + var T = ( t != t ) ? 0 : t; + var YEAR = Number(year); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + var DAY = MakeDay( YEAR, MONTH, DATE ); + + return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.37-2.js b/source/spidermonkey-tests/ecma/Date/15.9.5.37-2.js new file mode 100644 index 00000000..db5e4ee4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.37-2.js @@ -0,0 +1,127 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.37-1.js + ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getUTCMonth( ). If date is not specified, this behaves as if date + were specified with the value getUTCDate( ). + + 1. Let t be this time value; but if this time value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute MakeDate(Result(5), TimeWithinDay(t)). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added some Year 2000 test cases. +*/ +var SECTION = "15.9.5.37-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )"); + + +// Dates around 2000 + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2000);TDATE", + UTCDateFromTime(SetUTCFullYear(0,2000)), + LocalDateFromTime(SetUTCFullYear(0,2000)) ); + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2001);TDATE", + UTCDateFromTime(SetUTCFullYear(0,2001)), + LocalDateFromTime(SetUTCFullYear(0,2001)) ); + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1999);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1999)), + LocalDateFromTime(SetUTCFullYear(0,1999)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCFullYear( t, year, mon, date ) { + var T = ( t != t ) ? 0 : t; + var YEAR = Number(year); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + var DAY = MakeDay( YEAR, MONTH, DATE ); + + return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.37-3.js b/source/spidermonkey-tests/ecma/Date/15.9.5.37-3.js new file mode 100644 index 00000000..e0bfd394 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.37-3.js @@ -0,0 +1,130 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.37-1.js + ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getUTCMonth( ). If date is not specified, this behaves as if date + were specified with the value getUTCDate( ). + + 1. Let t be this time value; but if this time value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute MakeDate(Result(5), TimeWithinDay(t)). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added some Year 2000 test cases. +*/ +var SECTION = "15.9.5.37-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )"); + + +// Dates around 29 February 2000 + +var UTC_FEB_29_1972 = TIME_1970 + TimeInYear(1970) + TimeInYear(1971) + + 31*msPerDay + 28*msPerDay; + +var PST_FEB_29_1972 = UTC_FEB_29_1972 - TZ_DIFF * msPerHour; + +addNewTestCase( "TDATE = new Date("+UTC_FEB_29_1972+"); "+ + "TDATE.setUTCFullYear(2000);TDATE", + UTCDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)), + LocalDateFromTime(SetUTCFullYear(UTC_FEB_29_1972,2000)) ); + +addNewTestCase( "TDATE = new Date("+PST_FEB_29_1972+"); "+ + "TDATE.setUTCFullYear(2000);TDATE", + UTCDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)), + LocalDateFromTime(SetUTCFullYear(PST_FEB_29_1972,2000)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCFullYear( t, year, mon, date ) { + var T = ( t != t ) ? 0 : t; + var YEAR = Number(year); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + var DAY = MakeDay( YEAR, MONTH, DATE ); + + return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.37-4.js b/source/spidermonkey-tests/ecma/Date/15.9.5.37-4.js new file mode 100644 index 00000000..6d87d2f4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.37-4.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.37-1.js + ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getUTCMonth( ). If date is not specified, this behaves as if date + were specified with the value getUTCDate( ). + + 1. Let t be this time value; but if this time value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute MakeDate(Result(5), TimeWithinDay(t)). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added some Year 2000 test cases. +*/ +var SECTION = "15.9.5.37-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )"); + +// Dates around 2005 + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2005);TDATE", + UTCDateFromTime(SetUTCFullYear(0,2005)), + LocalDateFromTime(SetUTCFullYear(0,2005)) ); + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2004);TDATE", + UTCDateFromTime(SetUTCFullYear(0,2004)), + LocalDateFromTime(SetUTCFullYear(0,2004)) ); + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(2006);TDATE", + UTCDateFromTime(SetUTCFullYear(0,2006)), + LocalDateFromTime(SetUTCFullYear(0,2006)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + +// fixed_year = ( ExpectDate.year >=1900 || ExpectDate.year < 2000 ) ? ExpectDate.year - 1900 : ExpectDate.year; + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCFullYear( t, year, mon, date ) { + var T = ( t != t ) ? 0 : t; + var YEAR = Number(year); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + var DAY = MakeDay( YEAR, MONTH, DATE ); + + return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.37-5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.37-5.js new file mode 100644 index 00000000..c7889f24 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.37-5.js @@ -0,0 +1,125 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.37-1.js + ECMA Section: 15.9.5.37 Date.prototype.setUTCFullYear(year [, mon [, date ]] ) + Description: + + If mon is not specified, this behaves as if mon were specified with the + value getUTCMonth( ). If date is not specified, this behaves as if date + were specified with the value getUTCDate( ). + + 1. Let t be this time value; but if this time value is NaN, let t be +0. + 2. Call ToNumber(year). + 3. If mon is not specified, compute MonthFromTime(t); otherwise, call + ToNumber(mon). + 4. If date is not specified, compute DateFromTime(t); otherwise, call + ToNumber(date). + 5. Compute MakeDay(Result(2), Result(3), Result(4)). + 6. Compute MakeDate(Result(5), TimeWithinDay(t)). + 7. Set the [[Value]] property of the this value to TimeClip(Result(6)). + 8. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 + + Added some Year 2000 test cases. +*/ +var SECTION = "15.9.5.37-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Date.prototype.setUTCFullYear(year [, mon [, date ]] )"); + +// Dates around 1900 +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1900);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1900)), + LocalDateFromTime(SetUTCFullYear(0,1900)) ); + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1899);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1899)), + LocalDateFromTime(SetUTCFullYear(0,1899)) ); + +addNewTestCase( "TDATE = new Date(0); TDATE.setUTCFullYear(1901);TDATE", + UTCDateFromTime(SetUTCFullYear(0,1901)), + LocalDateFromTime(SetUTCFullYear(0,1901)) ); + +test(); + +function addNewTestCase( DateString, UTCDate, LocalDate) { + DateCase = eval( DateString ); + + new TestCase( SECTION, DateString+".getTime()", UTCDate.value, DateCase.getTime() ); + new TestCase( SECTION, DateString+".valueOf()", UTCDate.value, DateCase.valueOf() ); + + new TestCase( SECTION, DateString+".getUTCFullYear()", UTCDate.year, DateCase.getUTCFullYear() ); + new TestCase( SECTION, DateString+".getUTCMonth()", UTCDate.month, DateCase.getUTCMonth() ); + new TestCase( SECTION, DateString+".getUTCDate()", UTCDate.date, DateCase.getUTCDate() ); + new TestCase( SECTION, DateString+".getUTCDay()", UTCDate.day, DateCase.getUTCDay() ); + new TestCase( SECTION, DateString+".getUTCHours()", UTCDate.hours, DateCase.getUTCHours() ); + new TestCase( SECTION, DateString+".getUTCMinutes()", UTCDate.minutes,DateCase.getUTCMinutes() ); + new TestCase( SECTION, DateString+".getUTCSeconds()", UTCDate.seconds,DateCase.getUTCSeconds() ); + new TestCase( SECTION, DateString+".getUTCMilliseconds()", UTCDate.ms, DateCase.getUTCMilliseconds() ); + + new TestCase( SECTION, DateString+".getFullYear()", LocalDate.year, DateCase.getFullYear() ); + new TestCase( SECTION, DateString+".getMonth()", LocalDate.month, DateCase.getMonth() ); + new TestCase( SECTION, DateString+".getDate()", LocalDate.date, DateCase.getDate() ); + new TestCase( SECTION, DateString+".getDay()", LocalDate.day, DateCase.getDay() ); + new TestCase( SECTION, DateString+".getHours()", LocalDate.hours, DateCase.getHours() ); + new TestCase( SECTION, DateString+".getMinutes()", LocalDate.minutes, DateCase.getMinutes() ); + new TestCase( SECTION, DateString+".getSeconds()", LocalDate.seconds, DateCase.getSeconds() ); + new TestCase( SECTION, DateString+".getMilliseconds()", LocalDate.ms, DateCase.getMilliseconds() ); + + DateCase.toString = Object.prototype.toString; + + new TestCase( SECTION, + DateString+".toString=Object.prototype.toString;"+DateString+".toString()", + "[object Date]", + DateCase.toString() ); +} + +function MyDate() { + this.year = 0; + this.month = 0; + this.date = 0; + this.hours = 0; + this.minutes = 0; + this.seconds = 0; + this.ms = 0; +} +function LocalDateFromTime(t) { + t = LocalTime(t); + return ( MyDateFromTime(t) ); +} +function UTCDateFromTime(t) { + return ( MyDateFromTime(t) ); +} +function MyDateFromTime( t ) { + var d = new MyDate(); + d.year = YearFromTime(t); + d.month = MonthFromTime(t); + d.date = DateFromTime(t); + d.hours = HourFromTime(t); + d.minutes = MinFromTime(t); + d.seconds = SecFromTime(t); + d.ms = msFromTime(t); + + d.time = MakeTime( d.hours, d.minutes, d.seconds, d.ms ); + d.value = TimeClip( MakeDate( MakeDay( d.year, d.month, d.date ), d.time ) ); + d.day = WeekDay( d.value ); + + return (d); +} +function SetUTCFullYear( t, year, mon, date ) { + var T = ( t != t ) ? 0 : t; + var YEAR = Number(year); + var MONTH = ( mon == void 0 ) ? MonthFromTime(T) : Number( mon ); + var DATE = ( date == void 0 ) ? DateFromTime(T) : Number( date ); + var DAY = MakeDay( YEAR, MONTH, DATE ); + + return ( TimeClip(MakeDate(DAY, TimeWithinDay(T))) ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.4-1.js b/source/spidermonkey-tests/ecma/Date/15.9.5.4-1.js new file mode 100644 index 00000000..9ed4be4c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.4-1.js @@ -0,0 +1,59 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.4-1.js + ECMA Section: 15.9.5.4-1 Date.prototype.getTime + Description: + + 1. If the this value is not an object whose [[Class]] property is "Date", + generate a runtime error. + 2. Return this time value. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.9.5.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTime"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+").getTime()", + t, + (new Date(t)).getTime() ); + + new TestCase( SECTION, + "(new Date("+(t+1)+").getTime()", + t+1, + (new Date(t+1)).getTime() ); + + new TestCase( SECTION, + "(new Date("+(t-1)+").getTime()", + t-1, + (new Date(t-1)).getTime() ); + + new TestCase( SECTION, + "(new Date("+(t-TZ_ADJUST)+").getTime()", + t-TZ_ADJUST, + (new Date(t-TZ_ADJUST)).getTime() ); + + new TestCase( SECTION, + "(new Date("+(t+TZ_ADJUST)+").getTime()", + t+TZ_ADJUST, + (new Date(t+TZ_ADJUST)).getTime() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.4-2-n.js b/source/spidermonkey-tests/ecma/Date/15.9.5.4-2-n.js new file mode 100644 index 00000000..4f08cd7b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.4-2-n.js @@ -0,0 +1,42 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.4-2-n.js + ECMA Section: 15.9.5.4-1 Date.prototype.getTime + Description: + + 1. If the this value is not an object whose [[Class]] property is "Date", + generate a runtime error. + 2. Return this time value. + Author: christine@netscape.com + Date: 12 november 1997 +*/ + + +var SECTION = "15.9.5.4-2-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getTime"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MYDATE = new MyDate( TIME_2000 ); + +DESCRIPTION = "MYDATE.getTime()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "MYDATE.getTime()", + "error", + eval("MYDATE.getTime()") ); + +test(); + +function MyDate( value ) { + this.value = value; + this.getTime = Date.prototype.getTime; +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.5.js new file mode 100644 index 00000000..0bf476f0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.5.js @@ -0,0 +1,78 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.5.js + ECMA Section: 15.9.5.5 + Description: Date.prototype.getYear + + This function is specified here for backwards compatibility only. The + function getFullYear is much to be preferred for nearly all purposes, + because it avoids the "year 2000 problem." + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return YearFromTime(LocalTime(t)) 1900. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getYear()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); + +new TestCase( SECTION, + "(new Date(NaN)).getYear()", + NaN, + (new Date(NaN)).getYear() ); + +new TestCase( SECTION, + "Date.prototype.getYear.length", + 0, + Date.prototype.getYear.length ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getYear()", + GetYear(YearFromTime(LocalTime(t))), + (new Date(t)).getYear() ); + + new TestCase( SECTION, + "(new Date("+(t+1)+")).getYear()", + GetYear(YearFromTime(LocalTime(t+1))), + (new Date(t+1)).getYear() ); + + new TestCase( SECTION, + "(new Date("+(t-1)+")).getYear()", + GetYear(YearFromTime(LocalTime(t-1))), + (new Date(t-1)).getYear() ); + + new TestCase( SECTION, + "(new Date("+(t-TZ_ADJUST)+")).getYear()", + GetYear(YearFromTime(LocalTime(t-TZ_ADJUST))), + (new Date(t-TZ_ADJUST)).getYear() ); + + new TestCase( SECTION, + "(new Date("+(t+TZ_ADJUST)+")).getYear()", + GetYear(YearFromTime(LocalTime(t+TZ_ADJUST))), + (new Date(t+TZ_ADJUST)).getYear() ); +} +function GetYear( year ) { + return year - 1900; +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.6.js b/source/spidermonkey-tests/ecma/Date/15.9.5.6.js new file mode 100644 index 00000000..9c53381c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.6.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.6.js + ECMA Section: 15.9.5.6 + Description: Date.prototype.getFullYear + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return YearFromTime(LocalTime(t)). + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getFullYear()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getFullYear()", + NaN, + (new Date(NaN)).getFullYear() ); + +new TestCase( SECTION, + "Date.prototype.getFullYear.length", + 0, + Date.prototype.getFullYear.length ); + +test(); +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getFullYear()", + YearFromTime(LocalTime(t)), + (new Date(t)).getFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t+1)+")).getFullYear()", + YearFromTime(LocalTime(t+1)), + (new Date(t+1)).getFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t-1)+")).getFullYear()", + YearFromTime(LocalTime(t-1)), + (new Date(t-1)).getFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t-TZ_ADJUST)+")).getFullYear()", + YearFromTime(LocalTime(t-TZ_ADJUST)), + (new Date(t-TZ_ADJUST)).getFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t+TZ_ADJUST)+")).getFullYear()", + YearFromTime(LocalTime(t+TZ_ADJUST)), + (new Date(t+TZ_ADJUST)).getFullYear() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.7.js b/source/spidermonkey-tests/ecma/Date/15.9.5.7.js new file mode 100644 index 00000000..f1a8d6cb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.7.js @@ -0,0 +1,71 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.7.js + ECMA Section: 15.9.5.7 + Description: Date.prototype.getUTCFullYear + + 1.Let t be this time value. + 2.If t is NaN, return NaN. + 3.Return YearFromTime(t). + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.7"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCFullYear()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getUTCFullYear()", + NaN, + (new Date(NaN)).getUTCFullYear() ); + +new TestCase( SECTION, + "Date.prototype.getUTCFullYear.length", + 0, + Date.prototype.getUTCFullYear.length ); + +test(); + +function addTestCase( t ) { + new TestCase( SECTION, + "(new Date("+t+")).getUTCFullYear()", + YearFromTime(t), + (new Date(t)).getUTCFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t+1)+")).getUTCFullYear()", + YearFromTime(t+1), + (new Date(t+1)).getUTCFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t-1)+")).getUTCFullYear()", + YearFromTime(t-1), + (new Date(t-1)).getUTCFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t-TZ_ADJUST)+")).getUTCFullYear()", + YearFromTime(t-TZ_ADJUST), + (new Date(t-TZ_ADJUST)).getUTCFullYear() ); + + new TestCase( SECTION, + "(new Date("+(t+TZ_ADJUST)+")).getUTCFullYear()", + YearFromTime(t+TZ_ADJUST), + (new Date(t+TZ_ADJUST)).getUTCFullYear() ); +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.8.js b/source/spidermonkey-tests/ecma/Date/15.9.5.8.js new file mode 100644 index 00000000..62027257 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.8.js @@ -0,0 +1,80 @@ +// |reftest| random-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.8.js + ECMA Section: 15.9.5.8 + Description: Date.prototype.getMonth + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return MonthFromTime(LocalTime(t)). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.8"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getMonth()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getMonth()", + NaN, + (new Date(NaN)).getMonth() ); + +new TestCase( SECTION, + "Date.prototype.getMonth.length", + 0, + Date.prototype.getMonth.length ); +test(); + +function addTestCase( t ) { + var leap = InLeapYear(t); + + for ( var m = 0; m < 12; m++ ) { + + t += TimeInMonth(m, leap); + + new TestCase( SECTION, + "(new Date("+t+")).getMonth()", + MonthFromTime(LocalTime(t)), + (new Date(t)).getMonth() ); + + new TestCase( SECTION, + "(new Date("+(t+1)+")).getMonth()", + MonthFromTime(LocalTime(t+1)), + (new Date(t+1)).getMonth() ); + + new TestCase( SECTION, + "(new Date("+(t-1)+")).getMonth()", + MonthFromTime(LocalTime(t-1)), + (new Date(t-1)).getMonth() ); + + new TestCase( SECTION, + "(new Date("+(t-TZ_ADJUST)+")).getMonth()", + MonthFromTime(LocalTime(t-TZ_ADJUST)), + (new Date(t-TZ_ADJUST)).getMonth() ); + + new TestCase( SECTION, + "(new Date("+(t+TZ_ADJUST)+")).getMonth()", + MonthFromTime(LocalTime(t+TZ_ADJUST)), + (new Date(t+TZ_ADJUST)).getMonth() ); + + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.9.js b/source/spidermonkey-tests/ecma/Date/15.9.5.9.js new file mode 100644 index 00000000..32adbbfe --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.9.js @@ -0,0 +1,80 @@ +// |reftest| skip-if(Android) -- bug 686143, skip temporarily to see what happens to the frequency and location of Android timeouts +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.9.js + ECMA Section: 15.9.5.9 + Description: Date.prototype.getUTCMonth + + 1. Let t be this time value. + 2. If t is NaN, return NaN. + 3. Return MonthFromTime(t). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5.9"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Date.prototype.getUTCMonth()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +addTestCase( TIME_NOW ); +addTestCase( TIME_0000 ); +addTestCase( TIME_1970 ); +addTestCase( TIME_1900 ); +addTestCase( TIME_2000 ); +addTestCase( UTC_FEB_29_2000 ); +addTestCase( UTC_JAN_1_2005 ); + +new TestCase( SECTION, + "(new Date(NaN)).getUTCMonth()", + NaN, + (new Date(NaN)).getUTCMonth() ); + +new TestCase( SECTION, + "Date.prototype.getUTCMonth.length", + 0, + Date.prototype.getUTCMonth.length ); +test(); + +function addTestCase( t ) { + var leap = InLeapYear(t); + + for ( var m = 0; m < 12; m++ ) { + + t += TimeInMonth(m, leap); + + new TestCase( SECTION, + "(new Date("+t+")).getUTCMonth()", + MonthFromTime(t), + (new Date(t)).getUTCMonth() ); + + new TestCase( SECTION, + "(new Date("+(t+1)+")).getUTCMonth()", + MonthFromTime(t+1), + (new Date(t+1)).getUTCMonth() ); + + new TestCase( SECTION, + "(new Date("+(t-1)+")).getUTCMonth()", + MonthFromTime(t-1), + (new Date(t-1)).getUTCMonth() ); + + new TestCase( SECTION, + "(new Date("+(t-TZ_ADJUST)+")).getUTCMonth()", + MonthFromTime(t-TZ_ADJUST), + (new Date(t-TZ_ADJUST)).getUTCMonth() ); + + new TestCase( SECTION, + "(new Date("+(t+TZ_ADJUST)+")).getUTCMonth()", + MonthFromTime(t+TZ_ADJUST), + (new Date(t+TZ_ADJUST)).getUTCMonth() ); + + } +} diff --git a/source/spidermonkey-tests/ecma/Date/15.9.5.js b/source/spidermonkey-tests/ecma/Date/15.9.5.js new file mode 100644 index 00000000..07c5832b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/15.9.5.js @@ -0,0 +1,49 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.js + ECMA Section: 15.9.5 Properties of the Date prototype object + Description: + + The Date prototype object is itself a Date object (its [[Class]] is + "Date") whose value is NaN. + + The value of the internal [[Prototype]] property of the Date prototype + object is the Object prototype object (15.2.3.1). + + In following descriptions of functions that are properties of the Date + prototype object, the phrase "this Date object" refers to the object that + is the this value for the invocation of the function; it is an error if + this does not refer to an object for which the value of the internal + [[Class]] property is "Date". Also, the phrase "this time value" refers + to the number value for the time represented by this Date object, that is, + the value of the internal [[Value]] property of this Date object. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Date Prototype Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +Date.prototype.getClass = Object.prototype.toString; + +new TestCase( SECTION, + "Date.prototype.getClass", + "[object Date]", + Date.prototype.getClass() ); +new TestCase( SECTION, + "Date.prototype.valueOf()", + NaN, + Date.prototype.valueOf() ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Date/browser.js b/source/spidermonkey-tests/ecma/Date/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-1-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-1-of-8.js new file mode 100644 index 00000000..95a88e9a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-1-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(1, 8); diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-2-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-2-of-8.js new file mode 100644 index 00000000..0810f911 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-2-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(2, 8); diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-3-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-3-of-8.js new file mode 100644 index 00000000..a70559af --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-3-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(3, 8); diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-4-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-4-of-8.js new file mode 100644 index 00000000..3bda28d6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-4-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(4, 8); diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-5-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-5-of-8.js new file mode 100644 index 00000000..a15692ff --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-5-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(5, 8); diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-6-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-6-of-8.js new file mode 100644 index 00000000..d2ce8e90 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-6-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(6, 8); diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-7-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-7-of-8.js new file mode 100644 index 00000000..aaa560c2 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-7-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(7, 8); diff --git a/source/spidermonkey-tests/ecma/Date/dst-offset-caching-8-of-8.js b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-8-of-8.js new file mode 100644 index 00000000..30a6f781 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/dst-offset-caching-8-of-8.js @@ -0,0 +1,6 @@ +// |reftest| slow +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ +runDSTOffsetCachingTestsFraction(8, 8); diff --git a/source/spidermonkey-tests/ecma/Date/shell.js b/source/spidermonkey-tests/ecma/Date/shell.js new file mode 100644 index 00000000..fc78d24b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Date/shell.js @@ -0,0 +1,149 @@ + +var BUGNUMBER; +var summary; + +function runDSTOffsetCachingTestsFraction(part, parts) +{ + BUGNUMBER = 563938; + summary = 'Cache DST offsets to improve SunSpider score'; + + print(BUGNUMBER + ": " + summary); + + var MAX_UNIX_TIMET = 2145859200; + var RANGE_EXPANSION_AMOUNT = 30 * 24 * 60 * 60; + + /** + * Computes the time zone offset in minutes at the given timestamp. + */ + function tzOffsetFromUnixTimestamp(timestamp) + { + var d = new Date(NaN); + d.setTime(timestamp); // local slot = NaN, UTC slot = timestamp + return d.getTimezoneOffset(); // get UTC, calculate local => diff in minutes + } + + /** + * Clear the DST offset cache, leaving it initialized to include a timestamp + * completely unlike the provided one (i.e. one very, very far away in time + * from it). Thus an immediately following lookup for the provided timestamp + * will cache-miss and compute a clean value. + */ + function clearDSTOffsetCache(undesiredTimestamp) + { + var opposite = (undesiredTimestamp + MAX_UNIX_TIMET / 2) % MAX_UNIX_TIMET; + + // Generic purge to known, but not necessarily desired, state + tzOffsetFromUnixTimestamp(0); + tzOffsetFromUnixTimestamp(MAX_UNIX_TIMET); + + // Purge to desired state. Cycle 2x in case opposite or undesiredTimestamp + // is close to 0 or MAX_UNIX_TIMET. + tzOffsetFromUnixTimestamp(opposite); + tzOffsetFromUnixTimestamp(undesiredTimestamp); + tzOffsetFromUnixTimestamp(opposite); + tzOffsetFromUnixTimestamp(undesiredTimestamp); + } + + function computeCanonicalTZOffset(timestamp) + { + clearDSTOffsetCache(timestamp); + return tzOffsetFromUnixTimestamp(timestamp); + } + + var TEST_TIMESTAMPS_SECONDS = + [ + // Special-ish timestamps + 0, + RANGE_EXPANSION_AMOUNT, + MAX_UNIX_TIMET, + ]; + + var ONE_DAY = 24 * 60 * 60; + var EIGHTY_THREE_HOURS = 83 * 60 * 60; + var NINETY_EIGHT_HOURS = 98 * 60 * 60; + function nextIncrement(i) + { + return i === EIGHTY_THREE_HOURS ? NINETY_EIGHT_HOURS : EIGHTY_THREE_HOURS; + } + + // Now add a long sequence of non-special timestamps, from a fixed range, that + // overlaps a DST change by "a bit" on each side. 67 days should be enough + // displacement that we can occasionally exercise the implementation's + // thirty-day expansion and the DST-offset-change logic. Use two different + // increments just to be safe and catch something a single increment might not. + var DST_CHANGE_DATE = 1268553600; // March 14, 2010 + for (var t = DST_CHANGE_DATE - 67 * ONE_DAY, + i = nextIncrement(NINETY_EIGHT_HOURS), + end = DST_CHANGE_DATE + 67 * ONE_DAY; + t < end; + i = nextIncrement(i), t += i) + { + TEST_TIMESTAMPS_SECONDS.push(t); + } + + var TEST_TIMESTAMPS = + TEST_TIMESTAMPS_SECONDS.map(function(v) { return v * 1000; }); + + /************** + * BEGIN TEST * + **************/ + + // Compute the correct time zone offsets for all timestamps to be tested. + var CORRECT_TZOFFSETS = TEST_TIMESTAMPS.map(computeCanonicalTZOffset); + + // Intentionally and knowingly invoking every single logic path in the cache + // isn't easy for a human to get right (and know he's gotten it right), so + // let's do it the easy way: exhaustively try all possible four-date sequences + // selecting from our array of possible timestamps. + + var sz = TEST_TIMESTAMPS.length; + var start = Math.floor((part - 1) / parts * sz); + var end = Math.floor(part / parts * sz); + + print("Exhaustively testing timestamps " + + "[" + start + ", " + end + ") of " + sz + "..."); + + try + { + for (var i = start; i < end; i++) + { + print("Testing timestamp " + i + "..."); + + var t1 = TEST_TIMESTAMPS[i]; + for (var j = 0; j < sz; j++) + { + var t2 = TEST_TIMESTAMPS[j]; + for (var k = 0; k < sz; k++) + { + var t3 = TEST_TIMESTAMPS[k]; + for (var w = 0; w < sz; w++) + { + var t4 = TEST_TIMESTAMPS[w]; + + clearDSTOffsetCache(t1); + + var tzo1 = tzOffsetFromUnixTimestamp(t1); + var tzo2 = tzOffsetFromUnixTimestamp(t2); + var tzo3 = tzOffsetFromUnixTimestamp(t3); + var tzo4 = tzOffsetFromUnixTimestamp(t4); + + assertEq(tzo1, CORRECT_TZOFFSETS[i]); + assertEq(tzo2, CORRECT_TZOFFSETS[j]); + assertEq(tzo3, CORRECT_TZOFFSETS[k]); + assertEq(tzo4, CORRECT_TZOFFSETS[w]); + } + } + } + } + } + catch (e) + { + assertEq(true, false, + "Error when testing with timestamps " + + i + ", " + j + ", " + k + ", " + w + + " (" + t1 + ", " + t2 + ", " + t3 + ", " + t4 + ")!"); + } + + reportCompare(true, true); + print("All tests passed!"); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3-1.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3-1.js new file mode 100644 index 00000000..f493858f --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3-1.js @@ -0,0 +1,73 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.3-1.js + ECMA Section: 10.1.3 + Description: + + For each formal parameter, as defined in the FormalParameterList, create + a property of the variable object whose name is the Identifier and whose + attributes are determined by the type of code. The values of the + parameters are supplied by the caller. If the caller supplies fewer + parameter values than there are formal parameters, the extra formal + parameters have value undefined. If two or more formal parameters share + the same name, hence the same property, the corresponding property is + given the value that was supplied for the last parameter with this name. + If the value of this last parameter was not supplied by the caller, + the value of the corresponding property is undefined. + + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104191 + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.1.3-1"; +var VERSION = "ECMA_1"; +var TITLE = "Variable Instantiation: Formal Parameters"; +var BUGNUMBER="104191"; +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var myfun1 = new Function( "a", "a", "return a" ); +var myfun2 = new Function( "a", "b", "a", "return a" ); + +function myfun3(a, b, a) { + return a; +} + +// myfun1, myfun2, myfun3 tostring + + +new TestCase( + SECTION, + String(myfun2) +"; myfun2(2,4,8)", + 8, + myfun2(2,4,8) ); + +new TestCase( + SECTION, + "myfun2(2,4)", + void 0, + myfun2(2,4)); + +new TestCase( + SECTION, + String(myfun3) +"; myfun3(2,4,8)", + 8, + myfun3(2,4,8) ); + +new TestCase( + SECTION, + "myfun3(2,4)", + void 0, + myfun3(2,4) ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3-2.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3-2.js new file mode 100644 index 00000000..c18d9b78 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3-2.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.3-1.js + ECMA Section: 10.1.3 + Description: + + Author: mozilla@florian.loitsch.com + Date: 27 July 2005 +*/ + +var SECTION = "10.1.3-2"; +var VERSION = "ECMA_1"; +var TITLE = "Variable Instantiation: Function Declarations"; +var BUGNUMBER="299639"; +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +function f(g) +{ + function g() { + return "g"; + }; + return g; +} + +new TestCase( + SECTION, + "typeof f(\"parameter\")", + "function", + typeof f("parameter") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3.js new file mode 100644 index 00000000..897a5b37 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.3.js @@ -0,0 +1,136 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.3.js + ECMA Section: 10.1.3.js Variable Instantiation + Description: + Author: christine@netscape.com + Date: 11 september 1997 +*/ + +var SECTION = "10.1.3"; +var VERSION = "ECMA_1"; +var TITLE = "Variable instantiation"; +var BUGNUMBER = "20256"; +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + + +// overriding a variable or function name with a function should succeed + +new TestCase(SECTION, + "function t() { return \"first\" };" + + "function t() { return \"second\" };t() ", + "second", + eval("function t() { return \"first\" };" + + "function t() { return \"second\" };t()")); + + +new TestCase(SECTION, + "var t; function t(){}; typeof(t)", + "function", + eval("var t; function t(){}; typeof(t)")); + + +// formal parameter tests + +new TestCase(SECTION, + "function t1(a,b) { return b; }; t1( 4 );", + void 0, + eval("function t1(a,b) { return b; }; t1( 4 );") ); + +new TestCase(SECTION, + "function t1(a,b) { return a; }; t1(4);", + 4, + eval("function t1(a,b) { return a; }; t1(4)")); + +new TestCase(SECTION, + "function t1(a,b) { return a; }; t1();", + void 0, + eval("function t1(a,b) { return a; }; t1()")); + +new TestCase(SECTION, + "function t1(a,b) { return a; }; t1(1,2,4);", + 1, + eval("function t1(a,b) { return a; }; t1(1,2,4)")); +/* + +new TestCase(SECTION, "function t1(a,a) { return a; }; t1( 4 );", +void 0, +eval("function t1(a,a) { return a; }; t1( 4 )")); + +new TestCase(SECTION, +"function t1(a,a) { return a; }; t1( 1,2 );", +2, +eval("function t1(a,a) { return a; }; t1( 1,2 )")); +*/ +// variable declarations + +new TestCase(SECTION, + "function t1(a,b) { return a; }; t1( false, true );", + false, + eval("function t1(a,b) { return a; }; t1( false, true );")); + +new TestCase(SECTION, + "function t1(a,b) { return b; }; t1( false, true );", + true, + eval("function t1(a,b) { return b; }; t1( false, true );")); + +new TestCase(SECTION, + "function t1(a,b) { return a+b; }; t1( 4, 2 );", + 6, + eval("function t1(a,b) { return a+b; }; t1( 4, 2 );")); + +new TestCase(SECTION, + "function t1(a,b) { return a+b; }; t1( 4 );", + Number.NaN, + eval("function t1(a,b) { return a+b; }; t1( 4 );")); + +// overriding a function name with a variable should fail + +new TestCase(SECTION, + "function t() { return 'function' };" + + "var t = 'variable'; typeof(t)", + "string", + eval("function t() { return 'function' };" + + "var t = 'variable'; typeof(t)")); + +// function as a constructor + +new TestCase(SECTION, + "function t1(a,b) { var a = b; return a; } t1(1,3);", + 3, + eval("function t1(a, b){ var a = b; return a;}; t1(1,3)")); + +new TestCase(SECTION, + "function t2(a,b) { this.a = b; } x = new t2(1,3); x.a", + 3, + eval("function t2(a,b) { this.a = b; };" + + "x = new t2(1,3); x.a")); + +new TestCase(SECTION, + "function t2(a,b) { this.a = a; } x = new t2(1,3); x.a", + 1, + eval("function t2(a,b) { this.a = a; };" + + "x = new t2(1,3); x.a")); + +new TestCase(SECTION, + "function t2(a,b) { this.a = b; this.b = a; } " + + "x = new t2(1,3);x.a;", + 3, + eval("function t2(a,b) { this.a = b; this.b = a; };" + + "x = new t2(1,3);x.a;")); + +new TestCase(SECTION, + "function t2(a,b) { this.a = b; this.b = a; }" + + "x = new t2(1,3);x.b;", + 1, + eval("function t2(a,b) { this.a = b; this.b = a; };" + + "x = new t2(1,3);x.b;") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-1.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-1.js new file mode 100644 index 00000000..82d3ad3b --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-1.js @@ -0,0 +1,77 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-1.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", "with MyObject, eval should return square of " ); + +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var INPUT = 2; + gTestcases[gTc].description += "( " + INPUT +" )" ; + + with ( MYOBJECT ) { + gTestcases[gTc].actual = eval( INPUT ); + gTestcases[gTc].expect = Math.pow(INPUT,2); + } + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} + +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-10.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-10.js new file mode 100644 index 00000000..7fe5d13f --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-10.js @@ -0,0 +1,71 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-10.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-10"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", "MYOBJECT.toString()" ); + +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + var VALUE = 12345; + var MYOBJECT = new Number( VALUE ); + + with ( MYOBJECT ) { + gTestcases[gTc].actual = toString(); + gTestcases[gTc].expect = String(VALUE); + } + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-2.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-2.js new file mode 100644 index 00000000..8fadad52 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-2.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-1.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", "with MyObject, eval should return square of " ); + +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var INPUT = 2; + gTestcases[gTc].description += "( "+INPUT +" )" ; + + with ( this ) { + with ( MYOBJECT ) { + gTestcases[gTc].actual = eval( INPUT ); + gTestcases[gTc].expect = Math.pow(INPUT,2); + } + } + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} + +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-3.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-3.js new file mode 100644 index 00000000..b8d8411a --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-3.js @@ -0,0 +1,77 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-1.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", + "with MyObject, eval should be [object Global].eval " ); + +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var INPUT = 2; + gTestcases[gTc].description += ( INPUT +"" ); + + with ( MYOBJECT ) { + eval( INPUT ); + } + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} + +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-4.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-4.js new file mode 100644 index 00000000..bd7c49a4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-4.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-1.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", + "with MyObject, eval should be [object Global].eval " ); +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var INPUT = 2; + gTestcases[gTc].description += ( INPUT +"" ); + + with ( MYOBJECT ) { + eval( INPUT ); + } + + gTestcases[gTc].actual = eval( INPUT ); + gTestcases[gTc].expect = INPUT; + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} + +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-5.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-5.js new file mode 100644 index 00000000..b3940034 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-5.js @@ -0,0 +1,78 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-1.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", + "with MyObject, eval should be [object Global].eval " ); +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var INPUT = 2; + gTestcases[gTc].description += ( INPUT +"" ); + + with ( MYOBJECT ) { + eval = null; + } + + gTestcases[gTc].actual = eval( INPUT ); + gTestcases[gTc].expect = INPUT; + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-6.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-6.js new file mode 100644 index 00000000..d5b13812 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-6.js @@ -0,0 +1,66 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-1.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-6"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + + +var testcase = new TestCase( "SECTION", + "with MyObject, eval should be [object Global].eval " ); + +var MYOBJECT = new MyObject(); +var INPUT = 2; +testcase.description += ( INPUT +"" ); + +with ( MYOBJECT ) { + ; +} +testcase.actual = eval( INPUT ); +testcase.expect = INPUT; + +test(); + + +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-7.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-7.js new file mode 100644 index 00000000..2aa7ddd8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-7.js @@ -0,0 +1,78 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-7.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-7"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", + "with MyObject, eval should be [object Global].eval " ); +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var INPUT = 2; + gTestcases[gTc].description += ( INPUT +"" ); + + with ( MYOBJECT ) { + delete( eval ); + gTestcases[gTc].actual = eval( INPUT ); + gTestcases[gTc].expect = INPUT; + } + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} + +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-8.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-8.js new file mode 100644 index 00000000..602d432c --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.4-8.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-1.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( "SECTION", + "with MyObject, eval should cube INPUT: " ); +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var INPUT = 2; + gTestcases[gTc].description += ( INPUT +"" ); + + with ( MYOBJECT ) { + eval = new Function ( "x", "return(Math.pow(Number(x),3))" ); + + gTestcases[gTc].actual = eval( INPUT ); + gTestcases[gTc].expect = Math.pow(INPUT,3); + } + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} + +function MyObject() { + this.eval = new Function( "x", "return(Math.pow(Number(x),2))" ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-1.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-1.js new file mode 100644 index 00000000..17dae58b --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-1.js @@ -0,0 +1,84 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.5-1.js + ECMA Section: 10.1.5 Global Object + Description: + There is a unique global object which is created before control enters + any execution context. Initially the global object has the following + properties: + + Built-in objects such as Math, String, Date, parseInt, etc. These have + attributes { DontEnum }. + + Additional host defined properties. This may include a property whose + value is the global object itself, for example window in HTML. + + As control enters execution contexts, and as ECMAScript code is executed, + additional properties may be added to the global object and the initial + properties may be changed. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.5.1-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Global Object"); + + +new TestCase( "SECTION", "Global Code check" ); + +if ( Object == null ) { + gTestcases[0].reason += " Object == null" ; +} +if ( Function == null ) { + gTestcases[0].reason += " Function == null"; +} +if ( String == null ) { + gTestcases[0].reason += " String == null"; +} +if ( Array == null ) { + gTestcases[0].reason += " Array == null"; +} +if ( Number == null ) { + gTestcases[0].reason += " Function == null"; +} +if ( Math == null ) { + gTestcases[0].reason += " Math == null"; +} +if ( Boolean == null ) { + gTestcases[0].reason += " Boolean == null"; +} +if ( Date == null ) { + gTestcases[0].reason += " Date == null"; +} +/* + if ( NaN == null ) { + gTestcases[0].reason += " NaN == null"; + } + if ( Infinity == null ) { + gTestcases[0].reason += " Infinity == null"; + } +*/ +if ( eval == null ) { + gTestcases[0].reason += " eval == null"; +} +if ( parseInt == null ) { + gTestcases[0].reason += " parseInt == null"; +} + +if ( gTestcases[0].reason != "" ) { + gTestcases[0].actual = "fail"; +} else { + gTestcases[0].actual = "pass"; +} +gTestcases[0].expect = "pass"; + +test(); + diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-2.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-2.js new file mode 100644 index 00000000..e27c7b03 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-2.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.5-2.js + ECMA Section: 10.1.5 Global Object + Description: + There is a unique global object which is created before control enters + any execution context. Initially the global object has the following + properties: + + Built-in objects such as Math, String, Date, parseInt, etc. These have + attributes { DontEnum }. + + Additional host defined properties. This may include a property whose + value is the global object itself, for example window in HTML. + + As control enters execution contexts, and as ECMAScript code is executed, + additional properties may be added to the global object and the initial + properties may be changed. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.5.1-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Global Object"); + +new TestCase( "SECTION", "Eval Code check" ); + +var EVAL_STRING = 'if ( Object == null ) { gTestcases[0].reason += " Object == null" ; }' + + 'if ( Function == null ) { gTestcases[0].reason += " Function == null"; }' + + 'if ( String == null ) { gTestcases[0].reason += " String == null"; }' + + 'if ( Array == null ) { gTestcases[0].reason += " Array == null"; }' + + 'if ( Number == null ) { gTestcases[0].reason += " Function == null";}' + + 'if ( Math == null ) { gTestcases[0].reason += " Math == null"; }' + + 'if ( Boolean == null ) { gTestcases[0].reason += " Boolean == null"; }' + + 'if ( Date == null ) { gTestcases[0].reason += " Date == null"; }' + + 'if ( eval == null ) { gTestcases[0].reason += " eval == null"; }' + + 'if ( parseInt == null ) { gTestcases[0].reason += " parseInt == null"; }' ; + +eval( EVAL_STRING ); + +/* + if ( NaN == null ) { + gTestcases[0].reason += " NaN == null"; + } + if ( Infinity == null ) { + gTestcases[0].reason += " Infinity == null"; + } +*/ + +if ( gTestcases[0].reason != "" ) { + gTestcases[0].actual = "fail"; +} else { + gTestcases[0].actual = "pass"; +} +gTestcases[0].expect = "pass"; + +test(); + diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-3.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-3.js new file mode 100644 index 00000000..d8fe0079 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-3.js @@ -0,0 +1,96 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.5-3.js + ECMA Section: 10.1.5 Global Object + Description: + There is a unique global object which is created before control enters + any execution context. Initially the global object has the following + properties: + + Built-in objects such as Math, String, Date, parseInt, etc. These have + attributes { DontEnum }. + + Additional host defined properties. This may include a property whose + value is the global object itself, for example window in HTML. + + As control enters execution contexts, and as ECMAScript code is executed, + additional properties may be added to the global object and the initial + properties may be changed. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.5.1-3"; +var VERSION = "ECMA_1"; +startTest(); +writeHeaderToLog( SECTION + " Global Object"); + +new TestCase( "SECTION", "Function Code check" ); + +test(); + +function test() { + if ( Object == null ) { + gTestcases[0].reason += " Object == null" ; + } + if ( Function == null ) { + gTestcases[0].reason += " Function == null"; + } + if ( String == null ) { + gTestcases[0].reason += " String == null"; + } + if ( Array == null ) { + gTestcases[0].reason += " Array == null"; + } + if ( Number == null ) { + gTestcases[0].reason += " Function == null"; + } + if ( Math == null ) { + gTestcases[0].reason += " Math == null"; + } + if ( Boolean == null ) { + gTestcases[0].reason += " Boolean == null"; + } + if ( Date == null ) { + gTestcases[0].reason += " Date == null"; + } +/* + if ( NaN == null ) { + gTestcases[0].reason += " NaN == null"; + } + if ( Infinity == null ) { + gTestcases[0].reason += " Infinity == null"; + } +*/ + if ( eval == null ) { + gTestcases[0].reason += " eval == null"; + } + if ( parseInt == null ) { + gTestcases[0].reason += " parseInt == null"; + } + + if ( gTestcases[0].reason != "" ) { + gTestcases[0].actual = "fail"; + } else { + gTestcases[0].actual = "pass"; + } + gTestcases[0].expect = "pass"; + + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-4.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-4.js new file mode 100644 index 00000000..14d2c248 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.5-4.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.5-4.js + ECMA Section: 10.1.5 Global Object + Description: + There is a unique global object which is created before control enters + any execution context. Initially the global object has the following + properties: + + Built-in objects such as Math, String, Date, parseInt, etc. These have + attributes { DontEnum }. + + Additional host defined properties. This may include a property whose + value is the global object itself, for example window in HTML. + + As control enters execution contexts, and as ECMAScript code is executed, + additional properties may be added to the global object and the initial + properties may be changed. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.5.1-4"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Global Object"); + +new TestCase( "SECTION", "Anonymous Code check" ); + + +var EVAL_STRING = 'if ( Object == null ) { gTestcases[0].reason += " Object == null" ; }' + + 'if ( Function == null ) { gTestcases[0].reason += " Function == null"; }' + + 'if ( String == null ) { gTestcases[0].reason += " String == null"; }' + + 'if ( Array == null ) { gTestcases[0].reason += " Array == null"; }' + + 'if ( Number == null ) { gTestcases[0].reason += " Function == null";}' + + 'if ( Math == null ) { gTestcases[0].reason += " Math == null"; }' + + 'if ( Boolean == null ) { gTestcases[0].reason += " Boolean == null"; }' + + 'if ( Date == null ) { gTestcases[0].reason += " Date == null"; }' + + 'if ( eval == null ) { gTestcases[0].reason += " eval == null"; }' + + 'if ( parseInt == null ) { gTestcases[0].reason += " parseInt == null"; }' ; + +var NEW_FUNCTION = new Function( EVAL_STRING ); + +if ( gTestcases[0].reason != "" ) { + gTestcases[0].actual = "fail"; +} else { + gTestcases[0].actual = "pass"; +} +gTestcases[0].expect = "pass"; + +test(); diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.8-2.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.8-2.js new file mode 100644 index 00000000..27762b49 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.8-2.js @@ -0,0 +1,86 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.8-2 + ECMA Section: Arguments Object + Description: + + When control enters an execution context for declared function code, + anonymous code, or implementation-supplied code, an arguments object is + created and initialized as follows: + + The [[Prototype]] of the arguments object is to the original Object + prototype object, the one that is the initial value of Object.prototype + (section 15.2.3.1). + + A property is created with name callee and property attributes {DontEnum}. + The initial value of this property is the function object being executed. + This allows anonymous functions to be recursive. + + A property is created with name length and property attributes {DontEnum}. + The initial value of this property is the number of actual parameter values + supplied by the caller. + + For each non-negative integer, iarg, less than the value of the length + property, a property is created with name ToString(iarg) and property + attributes { DontEnum }. The initial value of this property is the value + of the corresponding actual parameter supplied by the caller. The first + actual parameter value corresponds to iarg = 0, the second to iarg = 1 and + so on. In the case when iarg is less than the number of formal parameters + for the function object, this property shares its value with the + corresponding property of the activation object. This means that changing + this property changes the corresponding property of the activation object + and vice versa. The value sharing mechanism depends on the implementation. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.1.8-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Arguments Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Tests for anonymous functions + +var GetCallee = new Function( "var c = arguments.callee; return c" ); +var GetArguments = new Function( "var a = arguments; return a" ); +var GetLength = new Function( "var l = arguments.length; return l" ); + +var ARG_STRING = "value of the argument property"; + +new TestCase( SECTION, + "GetCallee()", + GetCallee, + GetCallee() ); + +var LIMIT = 100; + +for ( var i = 0, args = "" ; i < LIMIT; i++ ) { + args += String(i) + ( i+1 < LIMIT ? "," : "" ); + +} + +var LENGTH = eval( "GetLength("+ args +")" ); + +new TestCase( SECTION, + "GetLength("+args+")", + 100, + LENGTH ); + +var ARGUMENTS = eval( "GetArguments( " +args+")" ); + +for ( var i = 0; i < 100; i++ ) { + new TestCase( SECTION, + "GetArguments("+args+")["+i+"]", + i, + ARGUMENTS[i] ); +} + +test(); diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.8-3.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.8-3.js new file mode 100644 index 00000000..a928c291 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.1.8-3.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.8-3 + ECMA Section: Arguments Object + Description: + + The [[Prototype]] of the arguments object is to the original Object + prototype object, the one that is the initial value of Object.prototype + (section 15.2.3.1). + + ... + + Test that "typeof arguments" is thus "object". + +*/ + +var SECTION = "10.1.8-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Arguments Object"; +writeHeaderToLog( SECTION + " "+ TITLE); + +var expected = "object"; +var actual = (function () { return typeof arguments; })(); +reportCompare(expected, actual, "typeof arguments == object"); + diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.1.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.1.js new file mode 100644 index 00000000..e6797153 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.1.js @@ -0,0 +1,51 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.2.1.js + ECMA Section: 10.2.1 Global Code + Description: + + The scope chain is created and initialized to contain the global object and + no others. + + Variable instantiation is performed using the global object as the variable + object and using empty property attributes. + + The this value is the global object. + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.2.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Global Code"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var THIS = this; + +new TestCase( SECTION, + "this +''", + GLOBAL, + THIS + "" ); + +var GLOBAL_PROPERTIES = new Array(); +var i = 0; + +for ( p in this ) { + GLOBAL_PROPERTIES[i++] = p; +} + +for ( i = 0; i < GLOBAL_PROPERTIES.length; i++ ) { + new TestCase( SECTION, + GLOBAL_PROPERTIES[i] +" == void 0", + false, + eval("GLOBAL_PROPERTIES["+i+"] == void 0")); +} + +test(); diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.2-1.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.2-1.js new file mode 100644 index 00000000..c41ad46b --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.2-1.js @@ -0,0 +1,89 @@ +// |reftest| skip-if(Android) -- bug - nsIDOMWindow.crypto throws NS_ERROR_NOT_IMPLEMENTED on Android +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.2.2-1.js + ECMA Section: 10.2.2 Eval Code + Description: + + When control enters an execution context for eval code, the previous + active execution context, referred to as the calling context, is used to + determine the scope chain, the variable object, and the this value. If + there is no calling context, then initializing the scope chain, variable + instantiation, and determination of the this value are performed just as + for global code. + + The scope chain is initialized to contain the same objects, in the same + order, as the calling context's scope chain. This includes objects added + to the calling context's scope chain by WithStatement. + + Variable instantiation is performed using the calling context's variable + object and using empty property attributes. + + The this value is the same as the this value of the calling context. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.2.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Eval Code"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var THIS = eval("this"); + +new TestCase( SECTION, + "this +''", + GLOBAL, + THIS + "" ); + +var GLOBAL_PROPERTIES = new Array(); +var i = 0; + +for ( p in THIS ) { + GLOBAL_PROPERTIES[i++] = p; +} + +for ( i = 0; i < GLOBAL_PROPERTIES.length; i++ ) { + new TestCase( SECTION, + GLOBAL_PROPERTIES[i] +" == THIS["+GLOBAL_PROPERTIES[i]+"]", + true, + eval(GLOBAL_PROPERTIES[i]) == eval( "THIS[GLOBAL_PROPERTIES[i]]") ); +} + +// this in eval statements is the same as this value of the calling context + +var RESULT = THIS == this; + +new TestCase( SECTION, + "eval( 'this == THIS' )", + true, + RESULT ); + +var RESULT = THIS +''; + +new TestCase( SECTION, + "eval( 'this + \"\"' )", + GLOBAL, + RESULT ); + + +new TestCase( SECTION, + "eval( 'this == THIS' )", + true, + eval( "this == THIS" ) ); + +new TestCase( SECTION, + "eval( 'this + \"\"' )", + GLOBAL, + eval( "this +''") ); + + +test(); diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.2-2.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.2-2.js new file mode 100644 index 00000000..fbcd522c --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.2-2.js @@ -0,0 +1,100 @@ +// |reftest| skip-if(Android) -- bug - nsIDOMWindow.crypto throws NS_ERROR_NOT_IMPLEMENTED on Android +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.2.2-2.js + ECMA Section: 10.2.2 Eval Code + Description: + + When control enters an execution context for eval code, the previous + active execution context, referred to as the calling context, is used to + determine the scope chain, the variable object, and the this value. If + there is no calling context, then initializing the scope chain, variable + instantiation, and determination of the this value are performed just as + for global code. + + The scope chain is initialized to contain the same objects, in the same + order, as the calling context's scope chain. This includes objects added + to the calling context's scope chain by WithStatement. + + Variable instantiation is performed using the calling context's variable + object and using empty property attributes. + + The this value is the same as the this value of the calling context. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.2.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Eval Code"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Test Objects + +var OBJECT = new MyObject( "hello" ); +var GLOBAL_PROPERTIES = new Array(); +var i = 0; + +for ( p in this ) { + GLOBAL_PROPERTIES[i++] = p; +} + +with ( OBJECT ) { + var THIS = this; + new TestCase( SECTION, + "eval( 'this == THIS' )", + true, + eval("this == THIS") ); + new TestCase( SECTION, + "this in a with() block", + GLOBAL, + this+"" ); + new TestCase( SECTION, + "new MyObject('hello').value", + "hello", + value ); + new TestCase( SECTION, + "eval(new MyObject('hello').value)", + "hello", + eval("value") ); + new TestCase( SECTION, + "new MyObject('hello').getClass()", + "[object Object]", + getClass() ); + new TestCase( SECTION, + "eval(new MyObject('hello').getClass())", + "[object Object]", + eval("getClass()") ); + new TestCase( SECTION, + "eval(new MyObject('hello').toString())", + "hello", + eval("toString()") ); + new TestCase( SECTION, + "eval('getClass') == Object.prototype.toString", + true, + eval("getClass") == Object.prototype.toString ); + + for ( i = 0; i < GLOBAL_PROPERTIES.length; i++ ) { + new TestCase( SECTION, GLOBAL_PROPERTIES[i] + + " == THIS["+GLOBAL_PROPERTIES[i]+"]", true, + eval(GLOBAL_PROPERTIES[i]) == eval( "THIS[GLOBAL_PROPERTIES[i]]") ); + } + +} + +test(); + +function MyObject( value ) { + this.value = value; + this.getClass = Object.prototype.toString; + this.toString = new Function( "return this.value+''" ); + return this; +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.3-1.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.3-1.js new file mode 100644 index 00000000..e7dd029f --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.3-1.js @@ -0,0 +1,52 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.2.3-1.js + ECMA Section: 10.2.3 Function and Anonymous Code + Description: + + The scope chain is initialized to contain the activation object followed + by the global object. Variable instantiation is performed using the + activation by the global object. Variable instantiation is performed using + the activation object as the variable object and using property attributes + { DontDelete }. The caller provides the this value. If the this value + provided by the caller is not an object (including the case where it is + null), then the this value is the global object. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.2.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Eval Code"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var o = new MyObject("hello") + + new TestCase( SECTION, + "var o = new MyObject('hello'); o.THIS == x", + true, + o.THIS == o ); + +var o = MyFunction(); + +new TestCase( SECTION, + "var o = MyFunction(); o == this", + true, + o == this ); + +test(); + +function MyFunction( value ) { + return this; +} +function MyObject( value ) { + this.THIS = this; +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.3-2.js b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.3-2.js new file mode 100644 index 00000000..389be93c --- /dev/null +++ b/source/spidermonkey-tests/ecma/ExecutionContexts/10.2.3-2.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.2.3-2.js + ECMA Section: 10.2.3 Function and Anonymous Code + Description: + + The scope chain is initialized to contain the activation object followed + by the global object. Variable instantiation is performed using the + activation by the global object. Variable instantiation is performed using + the activation object as the variable object and using property attributes + { DontDelete }. The caller provides the this value. If the this value + provided by the caller is not an object (including the case where it is + null), then the this value is the global object. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.2.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function and Anonymous Code"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var o = new MyObject("hello"); + +new TestCase( SECTION, + "MyFunction(\"PASSED!\")", + "PASSED!", + MyFunction("PASSED!") ); + +var o = MyFunction(); + +new TestCase( SECTION, + "MyOtherFunction(true);", + false, + MyOtherFunction(true) ); + +test(); + +function MyFunction( value ) { + var x = value; + delete x; + return x; +} +function MyOtherFunction(value) { + var x = value; + return delete x; +} +function MyObject( value ) { + this.THIS = this; +} diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/browser.js b/source/spidermonkey-tests/ecma/ExecutionContexts/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/ExecutionContexts/shell.js b/source/spidermonkey-tests/ecma/ExecutionContexts/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Expressions/11.1.1.js b/source/spidermonkey-tests/ecma/Expressions/11.1.1.js new file mode 100644 index 00000000..f1310ac8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.1.1.js @@ -0,0 +1,103 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.1.1.js + ECMA Section: 11.1.1 The this keyword + Description: + + The this keyword evaluates to the this value of the execution context. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.1.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The this keyword"); + +var GLOBAL_OBJECT = this.toString(); + +// this in global code and eval(this) in global code should return the global object. + +new TestCase( SECTION, + "Global Code: this.toString()", + GLOBAL_OBJECT, + this.toString() ); + +new TestCase( SECTION, + "Global Code: eval('this.toString()')", + GLOBAL_OBJECT, + eval('this.toString()') ); + +// this in anonymous code called as a function should return the global object. + +new TestCase( SECTION, + "Anonymous Code: var MYFUNC = new Function('return this.toString()'); MYFUNC()", + GLOBAL_OBJECT, + eval("var MYFUNC = new Function('return this.toString()'); MYFUNC()") ); + +// eval( this ) in anonymous code called as a function should return that function's activation object + +new TestCase( SECTION, + "Anonymous Code: var MYFUNC = new Function('return (eval(\"this.toString()\")'); (MYFUNC()).toString()", + GLOBAL_OBJECT, + eval("var MYFUNC = new Function('return eval(\"this.toString()\")'); (MYFUNC()).toString()") ); + +// this and eval( this ) in anonymous code called as a constructor should return the object + +new TestCase( SECTION, + "Anonymous Code: var MYFUNC = new Function('this.THIS = this'); ((new MYFUNC()).THIS).toString()", + "[object Object]", + eval("var MYFUNC = new Function('this.THIS = this'); ((new MYFUNC()).THIS).toString()") ); + +new TestCase( SECTION, + "Anonymous Code: var MYFUNC = new Function('this.THIS = this'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1", + true, + eval("var MYFUNC = new Function('this.THIS = this'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1") ); + +new TestCase( SECTION, + "Anonymous Code: var MYFUNC = new Function('this.THIS = eval(\"this\")'); ((new MYFUNC().THIS).toString()", + "[object Object]", + eval("var MYFUNC = new Function('this.THIS = eval(\"this\")'); ((new MYFUNC()).THIS).toString()") ); + +new TestCase( SECTION, + "Anonymous Code: var MYFUNC = new Function('this.THIS = eval(\"this\")'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1", + true, + eval("var MYFUNC = new Function('this.THIS = eval(\"this\")'); var FUN1 = new MYFUNC(); FUN1.THIS == FUN1") ); + +// this and eval(this) in function code called as a function should return the global object. +new TestCase( SECTION, + "Function Code: ReturnThis()", + GLOBAL_OBJECT, + ReturnThis() ); + +new TestCase( SECTION, + "Function Code: ReturnEvalThis()", + GLOBAL_OBJECT, + ReturnEvalThis() ); + +// this and eval(this) in function code called as a contructor should return the object. +new TestCase( SECTION, + "var MYOBJECT = new ReturnThis(); MYOBJECT.toString()", + "[object Object]", + eval("var MYOBJECT = new ReturnThis(); MYOBJECT.toString()") ); + +new TestCase( SECTION, + "var MYOBJECT = new ReturnEvalThis(); MYOBJECT.toString()", + "[object Object]", + eval("var MYOBJECT = new ReturnEvalThis(); MYOBJECT.toString()") ); + +test(); + +function ReturnThis() { + return this.toString(); +} + +function ReturnEvalThis() { + return( eval("this.toString()") ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.10-1.js b/source/spidermonkey-tests/ecma/Expressions/11.10-1.js new file mode 100644 index 00000000..a9926f27 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.10-1.js @@ -0,0 +1,236 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.10-1.js + ECMA Section: 11.10-1 Binary Bitwise Operators: & + Description: + Semantics + + The production A : A @ B, where @ is one of the bitwise operators in the + productions &, ^, | , is evaluated as follows: + + 1. Evaluate A. + 2. Call GetValue(Result(1)). + 3. Evaluate B. + 4. Call GetValue(Result(3)). + 5. Call ToInt32(Result(2)). + 6. Call ToInt32(Result(4)). + 7. Apply the bitwise operator @ to Result(5) and Result(6). The result is + a signed 32 bit integer. + 8. Return Result(7). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.10-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Binary Bitwise Operators: &"); + +var shiftexp = 0; +var addexp = 0; + +// for ( shiftpow = 0; shiftpow < 33; shiftpow++ ) { +for ( shiftpow = 0; shiftpow < 1; shiftpow++ ) { + shiftexp += Math.pow( 2, shiftpow ); + + for ( addpow = 0; addpow < 33; addpow++ ) { + addexp += Math.pow(2, addpow); + + new TestCase( SECTION, + shiftexp + " & " + addexp, + And( shiftexp, addexp ), + shiftexp & addexp ); + } +} + +test(); + +function ToInteger( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( n != n ) { + return 0; + } + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) { + return n; + } + return ( sign * Math.floor(Math.abs(n)) ); +} +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + + return ( n ); +} +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} +function ToUint16( n ) { + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16); + + if (n <0) { + n += Math.pow(2,16); + } + + return ( n ); +} +function Mask( b, n ) { + b = ToUint32BitString( b ); + b = b.substring( b.length - n ); + b = ToUint32Decimal( b ); + return ( b ); +} +function ToUint32BitString( n ) { + var b = ""; + for ( p = 31; p >=0; p-- ) { + if ( n >= Math.pow(2,p) ) { + b += "1"; + n -= Math.pow(2,p); + } else { + b += "0"; + } + } + return b; +} +function ToInt32BitString( n ) { + var b = ""; + var sign = ( n < 0 ) ? -1 : 1; + + b += ( sign == 1 ) ? "0" : "1"; + + for ( p = 30; p >=0; p-- ) { + if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) { + b += ( sign == 1 ) ? "1" : "0"; + n -= sign * Math.pow( 2, p ); + } else { + b += ( sign == 1 ) ? "0" : "1"; + } + } + + return b; +} +function ToInt32Decimal( bin ) { + var r = 0; + var sign; + + if ( Number(bin.charAt(0)) == 0 ) { + sign = 1; + r = 0; + } else { + sign = -1; + r = -(Math.pow(2,31)); + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function ToUint32Decimal( bin ) { + var r = 0; + + + for ( l = bin.length; l < 32; l++ ) { + bin = "0" + bin; + } + + for ( j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + + } + + return r; +} +function And( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( bs.charAt(bit) == "1" && ba.charAt(bit) == "1" ) { + result += "1"; + } else { + result += "0"; + } + } + return ToInt32Decimal(result); +} +function Xor( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( (bs.charAt(bit) == "1" && ba.charAt(bit) == "0") || + (bs.charAt(bit) == "0" && ba.charAt(bit) == "1") + ) { + result += "1"; + } else { + result += "0"; + } + } + + return ToInt32Decimal(result); +} +function Or( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( bs.charAt(bit) == "1" || ba.charAt(bit) == "1" ) { + result += "1"; + } else { + result += "0"; + } + } + + return ToInt32Decimal(result); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.10-2.js b/source/spidermonkey-tests/ecma/Expressions/11.10-2.js new file mode 100644 index 00000000..144392f8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.10-2.js @@ -0,0 +1,235 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.10-2.js + ECMA Section: 11.10-2 Binary Bitwise Operators: | + Description: + Semantics + + The production A : A @ B, where @ is one of the bitwise operators in the + productions &, ^, | , is evaluated as follows: + + 1. Evaluate A. + 2. Call GetValue(Result(1)). + 3. Evaluate B. + 4. Call GetValue(Result(3)). + 5. Call ToInt32(Result(2)). + 6. Call ToInt32(Result(4)). + 7. Apply the bitwise operator @ to Result(5) and Result(6). The result is + a signed 32 bit integer. + 8. Return Result(7). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.10-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Binary Bitwise Operators: |"); + +var shiftexp = 0; +var addexp = 0; + +for ( shiftpow = 0; shiftpow < 33; shiftpow++ ) { + shiftexp += Math.pow( 2, shiftpow ); + + for ( addpow = 0; addpow < 33; addpow++ ) { + addexp += Math.pow(2, addpow); + + new TestCase( SECTION, + shiftexp + " | " + addexp, + Or( shiftexp, addexp ), + shiftexp | addexp ); + } +} + +test(); + +function ToInteger( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( n != n ) { + return 0; + } + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) { + return n; + } + return ( sign * Math.floor(Math.abs(n)) ); +} +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + + return ( n ); +} +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} +function ToUint16( n ) { + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16); + + if (n <0) { + n += Math.pow(2,16); + } + + return ( n ); +} +function Mask( b, n ) { + b = ToUint32BitString( b ); + b = b.substring( b.length - n ); + b = ToUint32Decimal( b ); + return ( b ); +} +function ToUint32BitString( n ) { + var b = ""; + for ( p = 31; p >=0; p-- ) { + if ( n >= Math.pow(2,p) ) { + b += "1"; + n -= Math.pow(2,p); + } else { + b += "0"; + } + } + return b; +} +function ToInt32BitString( n ) { + var b = ""; + var sign = ( n < 0 ) ? -1 : 1; + + b += ( sign == 1 ) ? "0" : "1"; + + for ( p = 30; p >=0; p-- ) { + if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) { + b += ( sign == 1 ) ? "1" : "0"; + n -= sign * Math.pow( 2, p ); + } else { + b += ( sign == 1 ) ? "0" : "1"; + } + } + + return b; +} +function ToInt32Decimal( bin ) { + var r = 0; + var sign; + + if ( Number(bin.charAt(0)) == 0 ) { + sign = 1; + r = 0; + } else { + sign = -1; + r = -(Math.pow(2,31)); + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function ToUint32Decimal( bin ) { + var r = 0; + + + for ( l = bin.length; l < 32; l++ ) { + bin = "0" + bin; + } + + for ( j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + + } + + return r; +} +function And( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( bs.charAt(bit) == "1" && ba.charAt(bit) == "1" ) { + result += "1"; + } else { + result += "0"; + } + } + return ToInt32Decimal(result); +} +function Xor( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( (bs.charAt(bit) == "1" && ba.charAt(bit) == "0") || + (bs.charAt(bit) == "0" && ba.charAt(bit) == "1") + ) { + result += "1"; + } else { + result += "0"; + } + } + + return ToInt32Decimal(result); +} +function Or( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( bs.charAt(bit) == "1" || ba.charAt(bit) == "1" ) { + result += "1"; + } else { + result += "0"; + } + } + + return ToInt32Decimal(result); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.10-3.js b/source/spidermonkey-tests/ecma/Expressions/11.10-3.js new file mode 100644 index 00000000..5ebb186a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.10-3.js @@ -0,0 +1,234 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.10-3.js + ECMA Section: 11.10-3 Binary Bitwise Operators: ^ + Description: + Semantics + + The production A : A @ B, where @ is one of the bitwise operators in the + productions &, ^, | , is evaluated as follows: + + 1. Evaluate A. + 2. Call GetValue(Result(1)). + 3. Evaluate B. + 4. Call GetValue(Result(3)). + 5. Call ToInt32(Result(2)). + 6. Call ToInt32(Result(4)). + 7. Apply the bitwise operator @ to Result(5) and Result(6). The result is + a signed 32 bit integer. + 8. Return Result(7). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.10-3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Binary Bitwise Operators: ^"); + +var shiftexp = 0; +var addexp = 0; + +for ( shiftpow = 0; shiftpow < 33; shiftpow++ ) { + shiftexp += Math.pow( 2, shiftpow ); + + for ( addpow = 0; addpow < 33; addpow++ ) { + addexp += Math.pow(2, addpow); + + new TestCase( SECTION, + shiftexp + " ^ " + addexp, + Xor( shiftexp, addexp ), + shiftexp ^ addexp ); + } +} + +test(); + +function ToInteger( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( n != n ) { + return 0; + } + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) { + return n; + } + return ( sign * Math.floor(Math.abs(n)) ); +} +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + + return ( n ); +} +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} +function ToUint16( n ) { + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16); + + if (n <0) { + n += Math.pow(2,16); + } + + return ( n ); +} +function Mask( b, n ) { + b = ToUint32BitString( b ); + b = b.substring( b.length - n ); + b = ToUint32Decimal( b ); + return ( b ); +} +function ToUint32BitString( n ) { + var b = ""; + for ( p = 31; p >=0; p-- ) { + if ( n >= Math.pow(2,p) ) { + b += "1"; + n -= Math.pow(2,p); + } else { + b += "0"; + } + } + return b; +} +function ToInt32BitString( n ) { + var b = ""; + var sign = ( n < 0 ) ? -1 : 1; + + b += ( sign == 1 ) ? "0" : "1"; + + for ( p = 30; p >=0; p-- ) { + if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) { + b += ( sign == 1 ) ? "1" : "0"; + n -= sign * Math.pow( 2, p ); + } else { + b += ( sign == 1 ) ? "0" : "1"; + } + } + + return b; +} +function ToInt32Decimal( bin ) { + var r = 0; + var sign; + + if ( Number(bin.charAt(0)) == 0 ) { + sign = 1; + r = 0; + } else { + sign = -1; + r = -(Math.pow(2,31)); + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function ToUint32Decimal( bin ) { + var r = 0; + + for ( l = bin.length; l < 32; l++ ) { + bin = "0" + bin; + } + + for ( j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + + } + + return r; +} +function And( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( bs.charAt(bit) == "1" && ba.charAt(bit) == "1" ) { + result += "1"; + } else { + result += "0"; + } + } + return ToInt32Decimal(result); +} +function Xor( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( (bs.charAt(bit) == "1" && ba.charAt(bit) == "0") || + (bs.charAt(bit) == "0" && ba.charAt(bit) == "1") + ) { + result += "1"; + } else { + result += "0"; + } + } + + return ToInt32Decimal(result); +} +function Or( s, a ) { + s = ToInt32( s ); + a = ToInt32( a ); + + var bs = ToInt32BitString( s ); + var ba = ToInt32BitString( a ); + + var result = ""; + + for ( var bit = 0; bit < bs.length; bit++ ) { + if ( bs.charAt(bit) == "1" || ba.charAt(bit) == "1" ) { + result += "1"; + } else { + result += "0"; + } + } + + return ToInt32Decimal(result); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.12-1.js b/source/spidermonkey-tests/ecma/Expressions/11.12-1.js new file mode 100644 index 00000000..8c244120 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.12-1.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.12.js + ECMA Section: 11.12 Conditional Operator + Description: + Logi + + calORExpression ? AssignmentExpression : AssignmentExpression + + Semantics + + The production ConditionalExpression : + LogicalORExpression ? AssignmentExpression : AssignmentExpression + is evaluated as follows: + + 1. Evaluate LogicalORExpression. + 2. Call GetValue(Result(1)). + 3. Call ToBoolean(Result(2)). + 4. If Result(3) is false, go to step 8. + 5. Evaluate the first AssignmentExpression. + 6. Call GetValue(Result(5)). + 7. Return Result(6). + 8. Evaluate the second AssignmentExpression. + 9. Call GetValue(Result(8)). + 10. Return Result(9). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.12"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Conditional operator( ? : )"); + +new TestCase( SECTION, + "true ? 'PASSED' : 'FAILED'", + "PASSED", + (true?"PASSED":"FAILED")); + +new TestCase( SECTION, + "false ? 'FAILED' : 'PASSED'", + "PASSED", + (false?"FAILED":"PASSED")); + +new TestCase( SECTION, + "1 ? 'PASSED' : 'FAILED'", + "PASSED", + (true?"PASSED":"FAILED")); + +new TestCase( SECTION, + "0 ? 'FAILED' : 'PASSED'", + "PASSED", + (false?"FAILED":"PASSED")); + +new TestCase( SECTION, + "-1 ? 'PASSED' : 'FAILED'", + "PASSED", + (true?"PASSED":"FAILED")); + +new TestCase( SECTION, + "NaN ? 'FAILED' : 'PASSED'", + "PASSED", + (Number.NaN?"FAILED":"PASSED")); + +new TestCase( SECTION, + "var VAR = true ? , : 'FAILED'", + "PASSED", + (VAR = true ? "PASSED" : "FAILED") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.12-2-n.js b/source/spidermonkey-tests/ecma/Expressions/11.12-2-n.js new file mode 100644 index 00000000..f4f22f2a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.12-2-n.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.12-2-n.js + ECMA Section: 11.12 + Description: + + The grammar for a ConditionalExpression in ECMAScript is a little bit + different from that in C and Java, which each allow the second + subexpression to be an Expression but restrict the third expression to + be a ConditionalExpression. The motivation for this difference in + ECMAScript is to allow an assignment expression to be governed by either + arm of a conditional and to eliminate the confusing and fairly useless + case of a comma expression as the center expression. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.12-2-n"; +var VERSION = "ECMA_1"; +startTest(); +writeHeaderToLog( SECTION + " Conditional operator ( ? : )"); + +// the following expression should be an error in JS. + +DESCRIPTION = "var MYVAR = true ? 'EXPR1', 'EXPR2' : 'EXPR3'; MYVAR"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var MYVAR = true ? 'EXPR1', 'EXPR2' : 'EXPR3'; MYVAR", + "error", + eval("var MYVAR = true ? 'EXPR1', 'EXPR2' : 'EXPR3'; MYVAR") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.12-3.js b/source/spidermonkey-tests/ecma/Expressions/11.12-3.js new file mode 100644 index 00000000..e7c9f609 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.12-3.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.12-3.js + ECMA Section: 11.12 + Description: + + The grammar for a ConditionalExpression in ECMAScript is a little bit + different from that in C and Java, which each allow the second + subexpression to be an Expression but restrict the third expression to + be a ConditionalExpression. The motivation for this difference in + ECMAScript is to allow an assignment expression to be governed by either + arm of a conditional and to eliminate the confusing and fairly useless + case of a comma expression as the center expression. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.12-3"; +var VERSION = "ECMA_1"; +startTest(); +writeHeaderToLog( SECTION + " Conditional operator ( ? : )"); + +// the following expression should NOT be an error in JS. + +new TestCase( SECTION, + "var MYVAR = true ? ('FAIL1', 'PASSED') : 'FAIL2'; MYVAR", + "PASSED", + eval("var MYVAR = true ? ('FAIL1', 'PASSED') : 'FAIL2'; MYVAR")); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.12-4.js b/source/spidermonkey-tests/ecma/Expressions/11.12-4.js new file mode 100644 index 00000000..b99b0229 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.12-4.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.12-4.js + ECMA Section: 11.12 + Description: + + The grammar for a ConditionalExpression in ECMAScript is a little bit + different from that in C and Java, which each allow the second + subexpression to be an Expression but restrict the third expression to + be a ConditionalExpression. The motivation for this difference in + ECMAScript is to allow an assignment expression to be governed by either + arm of a conditional and to eliminate the confusing and fairly useless + case of a comma expression as the center expression. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.12-4"; +var VERSION = "ECMA_1"; +startTest(); +writeHeaderToLog( SECTION + " Conditional operator ( ? : )"); + +// the following expression should NOT be an error in JS. + +new TestCase( SECTION, + "true ? MYVAR1 = 'PASSED' : MYVAR1 = 'FAILED'; MYVAR1", + "PASSED", + eval("true ? MYVAR1 = 'PASSED' : MYVAR1 = 'FAILED'; MYVAR1") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.13.1.js b/source/spidermonkey-tests/ecma/Expressions/11.13.1.js new file mode 100644 index 00000000..2048af1c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.13.1.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.13.1.js + ECMA Section: 11.13.1 Simple assignment + Description: + + 11.13.1 Simple Assignment ( = ) + + The production AssignmentExpression : + LeftHandSideExpression = AssignmentExpression is evaluated as follows: + + 1. Evaluate LeftHandSideExpression. + 2. Evaluate AssignmentExpression. + 3. Call GetValue(Result(2)). + 4. Call PutValue(Result(1), Result(3)). + 5. Return Result(3). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.13.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Simple Assignment ( = )"); + +new TestCase( SECTION, + "SOMEVAR = true", + true, + SOMEVAR = true ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.13.2-1.js b/source/spidermonkey-tests/ecma/Expressions/11.13.2-1.js new file mode 100644 index 00000000..5d0fe096 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.13.2-1.js @@ -0,0 +1,197 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.13.2-1.js + ECMA Section: 11.13.2 Compound Assignment: *= + Description: + + *= /= %= += -= <<= >>= >>>= &= ^= |= + + 11.13.2 Compound assignment ( op= ) + + The production AssignmentExpression : + LeftHandSideExpression @ = AssignmentExpression, where @ represents one of + the operators indicated above, is evaluated as follows: + + 1. Evaluate LeftHandSideExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AssignmentExpression. + 4. Call GetValue(Result(3)). + 5. Apply operator @ to Result(2) and Result(4). + 6. Call PutValue(Result(1), Result(5)). + 7. Return Result(5). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.13.2-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Compound Assignment: *="); + + +// NaN cases + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=1; VAR1 *= VAR2", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=1; VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=1; VAR1 *= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=1; VAR1 *= VAR2; VAR1") ); + +// number cases +new TestCase( SECTION, + "VAR1 = 0; VAR2=1; VAR1 *= VAR2", + 0, + eval("VAR1 = 0; VAR2=1; VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2=1; VAR1 *= VAR2;VAR1", + 0, + eval("VAR1 = 0; VAR2=1; VAR1 *= VAR2;VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0xFF; VAR2 = 0xA, VAR1 *= VAR2", + 2550, + eval("VAR1 = 0XFF; VAR2 = 0XA, VAR1 *= VAR2") ); + +// special multiplication cases + +new TestCase( SECTION, + "VAR1 = 0; VAR2= Infinity; VAR1 *= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= Infinity; VAR1 *= VAR2", + Number.NaN, + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -Infinity; VAR1 *= VAR2", + Number.NaN, + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -Infinity; VAR1 *= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= Infinity; VAR2 *= VAR1", + Number.NaN, + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 *= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= Infinity; VAR2 *= VAR1", + Number.NaN, + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 *= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -Infinity; VAR2 *= VAR1", + Number.NaN, + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 *= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -Infinity; VAR2 *= VAR1", + Number.NaN, + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 *= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = Infinity; VAR2= Infinity; VAR1 *= VAR2", + Number.POSITIVE_INFINITY, + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = Infinity; VAR2= -Infinity; VAR1 *= VAR2", + Number.NEGATIVE_INFINITY, + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 =-Infinity; VAR2= Infinity; VAR1 *= VAR2", + Number.NEGATIVE_INFINITY, + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 =-Infinity; VAR2=-Infinity; VAR1 *= VAR2", + Number.POSITIVE_INFINITY, + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 *= VAR2; VAR1") ); + +// string cases +new TestCase( SECTION, + "VAR1 = 10; VAR2 = '255', VAR1 *= VAR2", + 2550, + eval("VAR1 = 10; VAR2 = '255', VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = '255'; VAR2 = 10, VAR1 *= VAR2", + 2550, + eval("VAR1 = '255'; VAR2 = 10, VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = 10; VAR2 = '0XFF', VAR1 *= VAR2", + 2550, + eval("VAR1 = 10; VAR2 = '0XFF', VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 *= VAR2", + 2550, + eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = '10'; VAR2 = '255', VAR1 *= VAR2", + 2550, + eval("VAR1 = '10'; VAR2 = '255', VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = '10'; VAR2 = '0XFF', VAR1 *= VAR2", + 2550, + eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 *= VAR2", + 2550, + eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 *= VAR2") ); + +// boolean cases +new TestCase( SECTION, + "VAR1 = true; VAR2 = false; VAR1 *= VAR2", + 0, + eval("VAR1 = true; VAR2 = false; VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = true; VAR2 = true; VAR1 *= VAR2", + 1, + eval("VAR1 = true; VAR2 = true; VAR1 *= VAR2") ); + +// object cases +new TestCase( SECTION, + "VAR1 = new Boolean(true); VAR2 = 10; VAR1 *= VAR2;VAR1", + 10, + eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = new Number(11); VAR2 = 10; VAR1 *= VAR2; VAR1", + 110, + eval("VAR1 = new Number(11); VAR2 = 10; VAR1 *= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 *= VAR2", + 110, + eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 *= VAR2") ); + +new TestCase( SECTION, + "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 *= VAR2", + 225, + eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 *= VAR2") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.13.2-2.js b/source/spidermonkey-tests/ecma/Expressions/11.13.2-2.js new file mode 100644 index 00000000..9e0e071a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.13.2-2.js @@ -0,0 +1,219 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.13.2-2js + ECMA Section: 11.13.2 Compound Assignment: /= + Description: + + *= /= %= += -= <<= >>= >>>= &= ^= |= + + 11.13.2 Compound assignment ( op= ) + + The production AssignmentExpression : + LeftHandSideExpression @ = AssignmentExpression, where @ represents one of + the operators indicated above, is evaluated as follows: + + 1. Evaluate LeftHandSideExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AssignmentExpression. + 4. Call GetValue(Result(3)). + 5. Apply operator @ to Result(2) and Result(4). + 6. Call PutValue(Result(1), Result(5)). + 7. Return Result(5). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.13.2-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Compound Assignment: /="); + + +// NaN cases + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=1; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2") ); + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=1; VAR1 /= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=1; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=0; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2") ); + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=0; VAR1 /= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2=NaN; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2=NaN; VAR1 /= VAR2; VAR1", + Number.NaN, + eval("VAR1 = 0; VAR2=Number.NaN; VAR1 /= VAR2; VAR1") ); + +// number cases +new TestCase( SECTION, + "VAR1 = 0; VAR2=1; VAR1 /= VAR2", + 0, + eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1", + 0, + eval("VAR1 = 0; VAR2=1; VAR1 /= VAR2;VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0xFF; VAR2 = 0xA, VAR1 /= VAR2", + 25.5, + eval("VAR1 = 0XFF; VAR2 = 0XA, VAR1 /= VAR2") ); + +// special division cases + +new TestCase( SECTION, + "VAR1 = 0; VAR2= Infinity; VAR1 /= VAR2", + 0, + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= Infinity; VAR1 /= VAR2", + 0, + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -Infinity; VAR1 /= VAR2", + 0, + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -Infinity; VAR1 /= VAR2", + 0, + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= Infinity; VAR2 /= VAR1", + Number.POSITIVE_INFINITY, + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 /= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= Infinity; VAR2 /= VAR1", + Number.NEGATIVE_INFINITY, + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 /= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -Infinity; VAR2 /= VAR1", + Number.POSITIVE_INFINITY, + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 /= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -Infinity; VAR2 /= VAR1", + Number.NEGATIVE_INFINITY, + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 /= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = Infinity; VAR2= Infinity; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = Infinity; VAR2= -Infinity; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 =-Infinity; VAR2= Infinity; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 =-Infinity; VAR2=-Infinity; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= 0; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2 = 0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -0; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2 = -0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= 0; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = -0; VAR2 = 0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -0; VAR1 /= VAR2", + Number.NaN, + eval("VAR1 = -0; VAR2 = -0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= 0; VAR1 /= VAR2", + Number.POSITIVE_INFINITY, + eval("VAR1 = 1; VAR2 = 0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= -0; VAR1 /= VAR2", + Number.NEGATIVE_INFINITY, + eval("VAR1 = 1; VAR2 = -0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= 0; VAR1 /= VAR2", + Number.NEGATIVE_INFINITY, + eval("VAR1 = -1; VAR2 = 0; VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= -0; VAR1 /= VAR2", + Number.POSITIVE_INFINITY, + eval("VAR1 = -1; VAR2 = -0; VAR1 /= VAR2; VAR1") ); + +// string cases +new TestCase( SECTION, + "VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1", + 100, + eval("VAR1 = 1000; VAR2 = '10', VAR1 /= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1", + 100, + eval("VAR1 = '1000'; VAR2 = 10, VAR1 /= VAR2; VAR1") ); +/* + new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 /= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 /= VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 /= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 /= VAR2") ); + + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 /= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 /= VAR2") ); + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 /= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 /= VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 /= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 /= VAR2") ); + + // boolean cases + new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 /= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 /= VAR2") ); + new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 /= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 /= VAR2") ); + + // object cases + new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 /= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 /= VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 /= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 /= VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 /= VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 /= VAR2") ); + new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 /= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 /= VAR2") ); + +*/ + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.13.2-3.js b/source/spidermonkey-tests/ecma/Expressions/11.13.2-3.js new file mode 100644 index 00000000..b77343aa --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.13.2-3.js @@ -0,0 +1,266 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.13.2-4.js + ECMA Section: 11.13.2 Compound Assignment: %= + Description: + + *= /= %= += -= <<= >>= >>>= &= ^= |= + + 11.13.2 Compound assignment ( op= ) + + The production AssignmentExpression : + LeftHandSideExpression @ = AssignmentExpression, where @ represents one of + the operators indicated above, is evaluated as follows: + + 1. Evaluate LeftHandSideExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AssignmentExpression. + 4. Call GetValue(Result(3)). + 5. Apply operator @ to Result(2) and Result(4). + 6. Call PutValue(Result(1), Result(5)). + 7. Return Result(5). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.13.2-3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Compound Assignment: +="); + +// If either operand is NaN, result is NaN + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=1; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2") ); + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=1; VAR1 %= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=1; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2") ); + +new TestCase( SECTION, + "VAR1 = NaN; VAR2=0; VAR1 %= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.NaN; VAR2=0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2=NaN; VAR1 %= VAR2; VAR1", + Number.NaN, + eval("VAR1 = 0; VAR2=Number.NaN; VAR1 %= VAR2; VAR1") ); + +// if the dividend is infinity or the divisor is zero or both, the result is NaN + +new TestCase( SECTION, + "VAR1 = Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = Infinity; VAR2= -Infinity; VAR1 %= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 =-Infinity; VAR2= Infinity; VAR1 %= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 =-Infinity; VAR2=-Infinity; VAR1 %= VAR2; VAR1", + Number.NaN, + eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= -Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= -Infinity; VAR2 %= VAR1", + Number.NaN, + eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR2 %= VAR1; VAR2") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= 0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2 = 0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = 0; VAR2 = -0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= 0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = -0; VAR2 = 0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = -0; VAR2 = -0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= 0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = 1; VAR2 = 0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= -0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = 1; VAR2 = -0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= 0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = -1; VAR2 = 0; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= -0; VAR1 %= VAR2", + Number.NaN, + eval("VAR1 = -1; VAR2 = -0; VAR1 %= VAR2; VAR1") ); + +// if the dividend is finite and the divisor is an infinity, the result equals the dividend. + +new TestCase( SECTION, + "VAR1 = 0; VAR2= Infinity; VAR1 %= VAR2;VAR1", + 0, + eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= Infinity; VAR1 %= VAR2;VAR1", + -0, + eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -Infinity; VAR1 %= VAR2;VAR1", + -0, + eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -Infinity; VAR1 %= VAR2;VAR1", + 0, + eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= Infinity; VAR1 %= VAR2;VAR1", + 1, + eval("VAR1 = 1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= Infinity; VAR1 %= VAR2;VAR1", + -1, + eval("VAR1 = -1; VAR2 = Number.POSITIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -1; VAR2= -Infinity; VAR1 %= VAR2;VAR1", + -1, + eval("VAR1 = -1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 1; VAR2= -Infinity; VAR1 %= VAR2;VAR1", + 1, + eval("VAR1 = 1; VAR2 = Number.NEGATIVE_INFINITY; VAR1 %= VAR2; VAR1") ); + +// if the dividend is a zero and the divisor is finite, the result is the same as the dividend + +new TestCase( SECTION, + "VAR1 = 0; VAR2= 1; VAR1 %= VAR2; VAR1", + 0, + eval("VAR1 = 0; VAR2 = 1; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= 1; VAR1 %= VAR2; VAR1", + -0, + eval("VAR1 = -0; VAR2 = 1; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = -0; VAR2= -1; VAR1 %= VAR2; VAR1", + -0, + eval("VAR1 = -0; VAR2 = -1; VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = 0; VAR2= -1; VAR1 %= VAR2; VAR1", + 0, + eval("VAR1 = 0; VAR2 = -1; VAR1 %= VAR2; VAR1") ); + +// string cases +new TestCase( SECTION, + "VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1", + 0, + eval("VAR1 = 1000; VAR2 = '10', VAR1 %= VAR2; VAR1") ); + +new TestCase( SECTION, + "VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1", + 0, + eval("VAR1 = '1000'; VAR2 = 10, VAR1 %= VAR2; VAR1") ); +/* + new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 %= VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") ); + + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 %= VAR2") ); + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 %= VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 %= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 %= VAR2") ); + + // boolean cases + new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 %= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 %= VAR2") ); + new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 %= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 %= VAR2") ); + + // object cases + new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 %= VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 %= VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 %= VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 %= VAR2") ); + new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 %= VAR2") ); + +*/ + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.13.2-4.js b/source/spidermonkey-tests/ecma/Expressions/11.13.2-4.js new file mode 100644 index 00000000..56e55070 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.13.2-4.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.13.2-4.js + ECMA Section: 11.13.2 Compound Assignment:+= + Description: + + *= /= %= += -= <<= >>= >>>= &= ^= |= + + 11.13.2 Compound assignment ( op= ) + + The production AssignmentExpression : + LeftHandSideExpression @ = AssignmentExpression, where @ represents one of + the operators indicated above, is evaluated as follows: + + 1. Evaluate LeftHandSideExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AssignmentExpression. + 4. Call GetValue(Result(3)). + 5. Apply operator @ to Result(2) and Result(4). + 6. Call PutValue(Result(1), Result(5)). + 7. Return Result(5). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.13.2-4"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Compound Assignment: +="); + +// If either operand is NaN, result is NaN + +new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 += VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 += VAR2") ); +new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 += VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 += VAR2") ); +new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 += VAR2", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 += VAR2") ); +new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 += VAR2; VAR1") ); + +// the sum of two Infinities the same sign is the infinity of that sign +// the sum of two Infinities of opposite sign is NaN + +new TestCase( SECTION, "VAR1 = Infinity; VAR2= Infinity; VAR1 += VAR2; VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = Infinity; VAR2= -Infinity; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 =-Infinity; VAR2= Infinity; VAR1 += VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 =-Infinity; VAR2=-Infinity; VAR1 += VAR2; VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") ); + +// the sum of an infinity and a finite value is equal to the infinite operand + +new TestCase( SECTION, "VAR1 = 0; VAR2= Infinity; VAR1 += VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= Infinity; VAR1 += VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= -Infinity; VAR1 += VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2= -Infinity; VAR1 += VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 += VAR2; VAR1") ); + +// the sum of two negative zeros is -0. the sum of two positive zeros, or of two zeros of opposite sign, is +0 + +new TestCase( SECTION, "VAR1 = 0; VAR2= 0; VAR1 += VAR2", 0, eval("VAR1 = 0; VAR2 = 0; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2= -0; VAR1 += VAR2", 0, eval("VAR1 = 0; VAR2 = -0; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= 0; VAR1 += VAR2", 0, eval("VAR1 = -0; VAR2 = 0; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= -0; VAR1 += VAR2", -0, eval("VAR1 = -0; VAR2 = -0; VAR1 += VAR2; VAR1") ); + +// the sum of a zero and a nonzero finite value is eqal to the nonzero operand + +new TestCase( SECTION, "VAR1 = 0; VAR2= 1; VAR2 += VAR1; VAR2", 1, eval("VAR1 = 0; VAR2 = 1; VAR2 += VAR1; VAR2") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= 1; VAR2 += VAR1; VAR2", 1, eval("VAR1 = -0; VAR2 = 1; VAR2 += VAR1; VAR2") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= -1; VAR2 += VAR1; VAR2", -1, eval("VAR1 = -0; VAR2 = -1; VAR2 += VAR1; VAR2") ); +new TestCase( SECTION, "VAR1 = 0; VAR2= -1; VAR2 += VAR1; VAR2", -1, eval("VAR1 = 0; VAR2 = -1; VAR2 += VAR1; VAR2") ); + +// the sum of a zero and a nozero finite value is equal to the nonzero operand. +new TestCase( SECTION, "VAR1 = 0; VAR2=1; VAR1 += VAR2", 1, eval("VAR1 = 0; VAR2=1; VAR1 += VAR2") ); +new TestCase( SECTION, "VAR1 = 0; VAR2=1; VAR1 += VAR2;VAR1", 1, eval("VAR1 = 0; VAR2=1; VAR1 += VAR2;VAR1") ); + +// the sum of two nonzero finite values of the same magnitude and opposite sign is +0 +new TestCase( SECTION, "VAR1 = Number.MAX_VALUE; VAR2= -Number.MAX_VALUE; VAR1 += VAR2; VAR1", 0, eval("VAR1 = Number.MAX_VALUE; VAR2= -Number.MAX_VALUE; VAR1 += VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = Number.MIN_VALUE; VAR2= -Number.MIN_VALUE; VAR1 += VAR2; VAR1", 0, eval("VAR1 = Number.MIN_VALUE; VAR2= -Number.MIN_VALUE; VAR1 += VAR2; VAR1") ); + +/* + new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 += VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 += VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 += VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 += VAR2") ); + + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 += VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 += VAR2") ); + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 += VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 += VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 += VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 += VAR2") ); + + // boolean cases + new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 += VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 += VAR2") ); + new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 += VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 += VAR2") ); + + // object cases + new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 += VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 += VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 += VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 += VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 += VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 += VAR2") ); + new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 += VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 += VAR2") ); + +*/ + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.13.2-5.js b/source/spidermonkey-tests/ecma/Expressions/11.13.2-5.js new file mode 100644 index 00000000..46c8cc60 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.13.2-5.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.13.2-5.js + ECMA Section: 11.13.2 Compound Assignment: -= + Description: + + *= /= %= -= -= <<= >>= >>>= &= ^= |= + + 11.13.2 Compound assignment ( op= ) + + The production AssignmentExpression : + LeftHandSideExpression @ = AssignmentExpression, where @ represents one of + the operators indicated above, is evaluated as follows: + + 1. Evaluate LeftHandSideExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AssignmentExpression. + 4. Call GetValue(Result(3)). + 5. Apply operator @ to Result(2) and Result(4). + 6. Call PutValue(Result(1), Result(5)). + 7. Return Result(5). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.13.2-5"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Compound Assignment: -="); + +// If either operand is NaN, result is NaN + +new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 -= VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 -= VAR2") ); +new TestCase( SECTION, "VAR1 = NaN; VAR2=1; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=1; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 -= VAR2", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 -= VAR2") ); +new TestCase( SECTION, "VAR1 = NaN; VAR2=0; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NaN; VAR2=0; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 -= VAR2", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 -= VAR2") ); +new TestCase( SECTION, "VAR1 = 0; VAR2=NaN; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = 0; VAR2=Number.NaN; VAR1 -= VAR2; VAR1") ); + +// the sum of two Infinities the same sign is the infinity of that sign +// the sum of two Infinities of opposite sign is NaN + +new TestCase( SECTION, "VAR1 = Infinity; VAR2= Infinity; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = Infinity; VAR2= -Infinity; VAR1 -= VAR2; VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = Number.POSITIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 =-Infinity; VAR2= Infinity; VAR1 -= VAR2; VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 =-Infinity; VAR2=-Infinity; VAR1 -= VAR2; VAR1", Number.NaN, eval("VAR1 = Number.NEGATIVE_INFINITY; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") ); + +// the sum of an infinity and a finite value is equal to the infinite operand + +new TestCase( SECTION, "VAR1 = 0; VAR2= Infinity; VAR1 -= VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= Infinity; VAR1 -= VAR2;VAR1", Number.NEGATIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.POSITIVE_INFINITY; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2= -Infinity; VAR1 -= VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = 0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= -Infinity; VAR1 -= VAR2;VAR1", Number.POSITIVE_INFINITY, eval("VAR1 = -0; VAR2 = Number.NEGATIVE_INFINITY; VAR1 -= VAR2; VAR1") ); + +// the sum of two negative zeros is -0. the sum of two positive zeros, or of two zeros of opposite sign, is +0 + +new TestCase( SECTION, "VAR1 = 0; VAR2= -0; VAR1 -= VAR2", 0, eval("VAR1 = 0; VAR2 = 0; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2= 0; VAR1 -= VAR2", 0, eval("VAR1 = 0; VAR2 = -0; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= -0; VAR1 -= VAR2", 0, eval("VAR1 = -0; VAR2 = 0; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= 0; VAR1 -= VAR2", -0, eval("VAR1 = -0; VAR2 = -0; VAR1 -= VAR2; VAR1") ); + +// the sum of a zero and a nonzero finite value is eqal to the nonzero operand + +new TestCase( SECTION, "VAR1 = 0; VAR2= -1; VAR1 -= VAR2; VAR1", 1, eval("VAR1 = 0; VAR2 = -1; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= -1; VAR1 -= VAR2; VAR1", 1, eval("VAR1 = -0; VAR2 = -1; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = -0; VAR2= 1; VAR1 -= VAR2; VAR1", -1, eval("VAR1 = -0; VAR2 = 1; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2= 1; VAR1 -= VAR2; VAR1", -1, eval("VAR1 = 0; VAR2 = 1; VAR1 -= VAR2; VAR1") ); + +// the sum of a zero and a nozero finite value is equal to the nonzero operand. +new TestCase( SECTION, "VAR1 = 0; VAR2=-1; VAR1 -= VAR2", 1, eval("VAR1 = 0; VAR2=-1; VAR1 -= VAR2;VAR1") ); +new TestCase( SECTION, "VAR1 = 0; VAR2=-1; VAR1 -= VAR2;VAR1", 1, eval("VAR1 = 0; VAR2=-1; VAR1 -= VAR2;VAR1") ); + +// the sum of two nonzero finite values of the same magnitude and opposite sign is +0 +new TestCase( SECTION, "VAR1 = Number.MAX_VALUE; VAR2= Number.MAX_VALUE; VAR1 -= VAR2; VAR1", 0, eval("VAR1 = Number.MAX_VALUE; VAR2= Number.MAX_VALUE; VAR1 -= VAR2; VAR1") ); +new TestCase( SECTION, "VAR1 = Number.MIN_VALUE; VAR2= Number.MIN_VALUE; VAR1 -= VAR2; VAR1", 0, eval("VAR1 = Number.MIN_VALUE; VAR2= Number.MIN_VALUE; VAR1 -= VAR2; VAR1") ); + +/* + new TestCase( SECTION, "VAR1 = 10; VAR2 = '0XFF', VAR1 -= VAR2", 2550, eval("VAR1 = 10; VAR2 = '0XFF', VAR1 -= VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 -= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 -= VAR2") ); + + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '255', VAR1 -= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '255', VAR1 -= VAR2") ); + new TestCase( SECTION, "VAR1 = '10'; VAR2 = '0XFF', VAR1 -= VAR2", 2550, eval("VAR1 = '10'; VAR2 = '0XFF', VAR1 -= VAR2") ); + new TestCase( SECTION, "VAR1 = '0xFF'; VAR2 = 0xA, VAR1 -= VAR2", 2550, eval("VAR1 = '0XFF'; VAR2 = 0XA, VAR1 -= VAR2") ); + + // boolean cases + new TestCase( SECTION, "VAR1 = true; VAR2 = false; VAR1 -= VAR2", 0, eval("VAR1 = true; VAR2 = false; VAR1 -= VAR2") ); + new TestCase( SECTION, "VAR1 = true; VAR2 = true; VAR1 -= VAR2", 1, eval("VAR1 = true; VAR2 = true; VAR1 -= VAR2") ); + + // object cases + new TestCase( SECTION, "VAR1 = new Boolean(true); VAR2 = 10; VAR1 -= VAR2;VAR1", 10, eval("VAR1 = new Boolean(true); VAR2 = 10; VAR1 -= VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = 10; VAR1 -= VAR2; VAR1", 110, eval("VAR1 = new Number(11); VAR2 = 10; VAR1 -= VAR2; VAR1") ); + new TestCase( SECTION, "VAR1 = new Number(11); VAR2 = new Number(10); VAR1 -= VAR2", 110, eval("VAR1 = new Number(11); VAR2 = new Number(10); VAR1 -= VAR2") ); + new TestCase( SECTION, "VAR1 = new String('15'); VAR2 = new String('0xF'); VAR1 -= VAR2", 255, eval("VAR1 = String('15'); VAR2 = new String('0xF'); VAR1 -= VAR2") ); + +*/ + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.13.js b/source/spidermonkey-tests/ecma/Expressions/11.13.js new file mode 100644 index 00000000..3dd40bab --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.13.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.12.js + ECMA Section: 11.12 Conditional Operator + Description: + Logi + + calORExpression ? AssignmentExpression : AssignmentExpression + + Semantics + + The production ConditionalExpression : + LogicalORExpression ? AssignmentExpression : AssignmentExpression + is evaluated as follows: + + 1. Evaluate LogicalORExpression. + 2. Call GetValue(Result(1)). + 3. Call ToBoolean(Result(2)). + 4. If Result(3) is false, go to step 8. + 5. Evaluate the first AssignmentExpression. + 6. Call GetValue(Result(5)). + 7. Return Result(6). + 8. Evaluate the second AssignmentExpression. + 9. Call GetValue(Result(8)). + 10. Return Result(9). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.12"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Conditional operator( ? : )"); + +new TestCase( SECTION, "true ? 'PASSED' : 'FAILED'", "PASSED", (true?"PASSED":"FAILED")); +new TestCase( SECTION, "false ? 'FAILED' : 'PASSED'", "PASSED", (false?"FAILED":"PASSED")); + +new TestCase( SECTION, "1 ? 'PASSED' : 'FAILED'", "PASSED", (true?"PASSED":"FAILED")); +new TestCase( SECTION, "0 ? 'FAILED' : 'PASSED'", "PASSED", (false?"FAILED":"PASSED")); +new TestCase( SECTION, "-1 ? 'PASSED' : 'FAILED'", "PASSED", (true?"PASSED":"FAILED")); + +new TestCase( SECTION, "NaN ? 'FAILED' : 'PASSED'", "PASSED", (Number.NaN?"FAILED":"PASSED")); + +new TestCase( SECTION, "var VAR = true ? , : 'FAILED'", "PASSED", (VAR = true ? "PASSED" : "FAILED") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.14-1.js b/source/spidermonkey-tests/ecma/Expressions/11.14-1.js new file mode 100644 index 00000000..c9bbbb00 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.14-1.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.14-1.js + ECMA Section: 11.14 Comma operator (,) + Description: + Expression : + + AssignmentExpression + Expression , AssignmentExpression + + Semantics + + The production Expression : Expression , AssignmentExpression is evaluated as follows: + + 1. Evaluate Expression. + 2. Call GetValue(Result(1)). + 3. Evaluate AssignmentExpression. + 4. Call GetValue(Result(3)). + 5. Return Result(4). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.14-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Comma operator (,)"); + +new TestCase( SECTION, "true, false", false, eval("true, false") ); +new TestCase( SECTION, "VAR1=true, VAR2=false", false, eval("VAR1=true, VAR2=false") ); +new TestCase( SECTION, "VAR1=true, VAR2=false;VAR1", true, eval("VAR1=true, VAR2=false; VAR1") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.1-1.js b/source/spidermonkey-tests/ecma/Expressions/11.2.1-1.js new file mode 100644 index 00000000..dfc7c943 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.1-1.js @@ -0,0 +1,238 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.1-1.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Properties are accessed by name, using either the dot notation: + MemberExpression . Identifier + CallExpression . Identifier + + or the bracket notation: MemberExpression [ Expression ] + CallExpression [ Expression ] + + The dot notation is explained by the following syntactic conversion: + MemberExpression . Identifier + is identical in its behavior to + MemberExpression [ <identifier-string> ] + and similarly + CallExpression . Identifier + is identical in its behavior to + CallExpression [ <identifier-string> ] + where <identifier-string> is a string literal containing the same sequence + of characters as the Identifier. + + The production MemberExpression : MemberExpression [ Expression ] is + evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Expression. + 4. Call GetValue(Result(3)). + 5. Call ToObject(Result(2)). + 6. Call ToString(Result(4)). + 7. Return a value of type Reference whose base object is Result(5) and + whose property name is Result(6). + + The production CallExpression : CallExpression [ Expression ] is evaluated + in exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.2.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); + +// go through all Native Function objects, methods, and properties and get their typeof. + +var PROPERTY = new Array(); +var p = 0; + +// properties and functions of the global object + +PROPERTY[p++] = new Property( "this", "NaN", "number" ); +PROPERTY[p++] = new Property( "this", "Infinity", "number" ); +PROPERTY[p++] = new Property( "this", "eval", "function" ); +PROPERTY[p++] = new Property( "this", "parseInt", "function" ); +PROPERTY[p++] = new Property( "this", "parseFloat", "function" ); +PROPERTY[p++] = new Property( "this", "escape", "function" ); +PROPERTY[p++] = new Property( "this", "unescape", "function" ); +PROPERTY[p++] = new Property( "this", "isNaN", "function" ); +PROPERTY[p++] = new Property( "this", "isFinite", "function" ); +PROPERTY[p++] = new Property( "this", "Object", "function" ); +PROPERTY[p++] = new Property( "this", "Number", "function" ); +PROPERTY[p++] = new Property( "this", "Function", "function" ); +PROPERTY[p++] = new Property( "this", "Array", "function" ); +PROPERTY[p++] = new Property( "this", "String", "function" ); +PROPERTY[p++] = new Property( "this", "Boolean", "function" ); +PROPERTY[p++] = new Property( "this", "Date", "function" ); +PROPERTY[p++] = new Property( "this", "Math", "object" ); + +// properties and methods of Object objects + +PROPERTY[p++] = new Property( "Object", "prototype", "object" ); +PROPERTY[p++] = new Property( "Object", "toString", "function" ); +PROPERTY[p++] = new Property( "Object", "valueOf", "function" ); +PROPERTY[p++] = new Property( "Object", "constructor", "function" ); + +// properties of the Function object + +PROPERTY[p++] = new Property( "Function", "prototype", "function" ); +PROPERTY[p++] = new Property( "Function.prototype", "toString", "function" ); +PROPERTY[p++] = new Property( "Function.prototype", "length", "number" ); +PROPERTY[p++] = new Property( "Function.prototype", "valueOf", "function" ); + +Function.prototype.myProperty = "hi"; + +PROPERTY[p++] = new Property( "Function.prototype", "myProperty", "string" ); + +// properties of the Array object +PROPERTY[p++] = new Property( "Array", "prototype", "object" ); +PROPERTY[p++] = new Property( "Array", "length", "number" ); +PROPERTY[p++] = new Property( "Array.prototype", "constructor", "function" ); +PROPERTY[p++] = new Property( "Array.prototype", "toString", "function" ); +PROPERTY[p++] = new Property( "Array.prototype", "join", "function" ); +PROPERTY[p++] = new Property( "Array.prototype", "reverse", "function" ); +PROPERTY[p++] = new Property( "Array.prototype", "sort", "function" ); + +// properties of the String object +PROPERTY[p++] = new Property( "String", "prototype", "object" ); +PROPERTY[p++] = new Property( "String", "fromCharCode", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "toString", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "constructor", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "valueOf", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "charAt", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "charCodeAt", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "indexOf", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "lastIndexOf", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "split", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "substring", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "toLowerCase", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "toUpperCase", "function" ); +PROPERTY[p++] = new Property( "String.prototype", "length", "number" ); + +// properties of the Boolean object +PROPERTY[p++] = new Property( "Boolean", "prototype", "object" ); +PROPERTY[p++] = new Property( "Boolean", "constructor", "function" ); +PROPERTY[p++] = new Property( "Boolean.prototype", "valueOf", "function" ); +PROPERTY[p++] = new Property( "Boolean.prototype", "toString", "function" ); + +// properties of the Number object + +PROPERTY[p++] = new Property( "Number", "MAX_VALUE", "number" ); +PROPERTY[p++] = new Property( "Number", "MIN_VALUE", "number" ); +PROPERTY[p++] = new Property( "Number", "NaN", "number" ); +PROPERTY[p++] = new Property( "Number", "NEGATIVE_INFINITY", "number" ); +PROPERTY[p++] = new Property( "Number", "POSITIVE_INFINITY", "number" ); +PROPERTY[p++] = new Property( "Number.prototype", "toString", "function" ); +PROPERTY[p++] = new Property( "Number.prototype", "constructor", "function" ); +PROPERTY[p++] = new Property( "Number.prototype", "valueOf", "function" ); + +// properties of the Math Object. +PROPERTY[p++] = new Property( "Math", "E", "number" ); +PROPERTY[p++] = new Property( "Math", "LN10", "number" ); +PROPERTY[p++] = new Property( "Math", "LN2", "number" ); +PROPERTY[p++] = new Property( "Math", "LOG2E", "number" ); +PROPERTY[p++] = new Property( "Math", "LOG10E", "number" ); +PROPERTY[p++] = new Property( "Math", "PI", "number" ); +PROPERTY[p++] = new Property( "Math", "SQRT1_2", "number" ); +PROPERTY[p++] = new Property( "Math", "SQRT2", "number" ); +PROPERTY[p++] = new Property( "Math", "abs", "function" ); +PROPERTY[p++] = new Property( "Math", "acos", "function" ); +PROPERTY[p++] = new Property( "Math", "asin", "function" ); +PROPERTY[p++] = new Property( "Math", "atan", "function" ); +PROPERTY[p++] = new Property( "Math", "atan2", "function" ); +PROPERTY[p++] = new Property( "Math", "ceil", "function" ); +PROPERTY[p++] = new Property( "Math", "cos", "function" ); +PROPERTY[p++] = new Property( "Math", "exp", "function" ); +PROPERTY[p++] = new Property( "Math", "floor", "function" ); +PROPERTY[p++] = new Property( "Math", "log", "function" ); +PROPERTY[p++] = new Property( "Math", "max", "function" ); +PROPERTY[p++] = new Property( "Math", "min", "function" ); +PROPERTY[p++] = new Property( "Math", "pow", "function" ); +PROPERTY[p++] = new Property( "Math", "random", "function" ); +PROPERTY[p++] = new Property( "Math", "round", "function" ); +PROPERTY[p++] = new Property( "Math", "sin", "function" ); +PROPERTY[p++] = new Property( "Math", "sqrt", "function" ); +PROPERTY[p++] = new Property( "Math", "tan", "function" ); + +// properties of the Date object +PROPERTY[p++] = new Property( "Date", "parse", "function" ); +PROPERTY[p++] = new Property( "Date", "prototype", "object" ); +PROPERTY[p++] = new Property( "Date", "UTC", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "constructor", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "toString", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "valueOf", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getTime", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getYear", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getFullYear", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCFullYear", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getMonth", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCMonth", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getDate", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCDate", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getDay", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCDay", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getHours", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCHours", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getMinutes", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCMinutes", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getSeconds", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCSeconds", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getMilliseconds","function" ); +PROPERTY[p++] = new Property( "Date.prototype", "getUTCMilliseconds", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setTime", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setMilliseconds","function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setUTCMilliseconds", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setSeconds", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setUTCSeconds", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setMinutes", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setUTCMinutes", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setHours", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setUTCHours", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setDate", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setUTCDate", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setMonth", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setUTCMonth", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setFullYear", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setUTCFullYear", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "setYear", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "toLocaleString", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "toUTCString", "function" ); +PROPERTY[p++] = new Property( "Date.prototype", "toGMTString", "function" ); + +for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) { + RESULT = eval("typeof " + PROPERTY[i].object + "." + PROPERTY[i].name ); + + new TestCase( SECTION, + "typeof " + PROPERTY[i].object + "." + PROPERTY[i].name, + PROPERTY[i].type, + RESULT ); + + RESULT = eval("typeof " + PROPERTY[i].object + "['" + PROPERTY[i].name +"']"); + + new TestCase( SECTION, + "typeof " + PROPERTY[i].object + "['" + PROPERTY[i].name +"']", + PROPERTY[i].type, + RESULT ); +} + +test(); + +function MyObject( arg0, arg1, arg2, arg3, arg4 ) { + this.name = arg0; +} +function Property( object, name, type ) { + this.object = object; + this.name = name; + this.type = type; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.1-2.js b/source/spidermonkey-tests/ecma/Expressions/11.2.1-2.js new file mode 100644 index 00000000..c37831d7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.1-2.js @@ -0,0 +1,94 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.1-2.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Properties are accessed by name, using either the dot notation: + MemberExpression . Identifier + CallExpression . Identifier + + or the bracket notation: MemberExpression [ Expression ] + CallExpression [ Expression ] + + The dot notation is explained by the following syntactic conversion: + MemberExpression . Identifier + is identical in its behavior to + MemberExpression [ <identifier-string> ] + and similarly + CallExpression . Identifier + is identical in its behavior to + CallExpression [ <identifier-string> ] + where <identifier-string> is a string literal containing the same sequence + of characters as the Identifier. + + The production MemberExpression : MemberExpression [ Expression ] is + evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Expression. + 4. Call GetValue(Result(3)). + 5. Call ToObject(Result(2)). + 6. Call ToString(Result(4)). + 7. Return a value of type Reference whose base object is Result(5) and + whose property name is Result(6). + + The production CallExpression : CallExpression [ Expression ] is evaluated + in exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.2.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); + +// go through all Native Function objects, methods, and properties and get their typeof. + +var PROPERTY = new Array(); +var p = 0; + +// try to access properties of primitive types + +PROPERTY[p++] = new Property( "\"hi\"", "hi", "hi", NaN ); +PROPERTY[p++] = new Property( NaN, NaN, "NaN", NaN ); +// PROPERTY[p++] = new Property( 3, 3, "3", 3 ); +PROPERTY[p++] = new Property( true, true, "true", 1 ); +PROPERTY[p++] = new Property( false, false, "false", 0 ); + +for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) { + new TestCase( SECTION, + PROPERTY[i].object + ".valueOf()", + PROPERTY[i].value, + eval( PROPERTY[i].object+ ".valueOf()" ) ); + + new TestCase( SECTION, + PROPERTY[i].object + ".toString()", + PROPERTY[i].string, + eval( PROPERTY[i].object+ ".toString()" ) ); + +} + +test(); + +function MyObject( value ) { + this.value = value; + this.stringValue = value +""; + this.numberValue = Number(value); + return this; +} +function Property( object, value, string, number ) { + this.object = object; + this.string = String(value); + this.number = Number(value); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.1-3-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.1-3-n.js new file mode 100644 index 00000000..3e50e310 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.1-3-n.js @@ -0,0 +1,94 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.1-2.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Properties are accessed by name, using either the dot notation: + MemberExpression . Identifier + CallExpression . Identifier + + or the bracket notation: MemberExpression [ Expression ] + CallExpression [ Expression ] + + The dot notation is explained by the following syntactic conversion: + MemberExpression . Identifier + is identical in its behavior to + MemberExpression [ <identifier-string> ] + and similarly + CallExpression . Identifier + is identical in its behavior to + CallExpression [ <identifier-string> ] + where <identifier-string> is a string literal containing the same sequence + of characters as the Identifier. + + The production MemberExpression : MemberExpression [ Expression ] is + evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Expression. + 4. Call GetValue(Result(3)). + 5. Call ToObject(Result(2)). + 6. Call ToString(Result(4)). + 7. Return a value of type Reference whose base object is Result(5) and + whose property name is Result(6). + + The production CallExpression : CallExpression [ Expression ] is evaluated + in exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.2.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); + +// go through all Native Function objects, methods, and properties and get their typeof. + +var PROPERTY = new Array(); +var p = 0; + +// try to access properties of primitive types + +PROPERTY[p++] = new Property( "undefined", void 0, "undefined", NaN ); + +for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) { + + DESCRIPTION = PROPERTY[i].object + ".valueOf()"; + EXPECTED = "error"; + + new TestCase( SECTION, + PROPERTY[i].object + ".valueOf()", + PROPERTY[i].value, + eval( PROPERTY[i].object+ ".valueOf()" ) ); + + new TestCase( SECTION, + PROPERTY[i].object + ".toString()", + PROPERTY[i].string, + eval(PROPERTY[i].object+ ".toString()") ); +} +test(); + + +function MyObject( value ) { + this.value = value; + this.stringValue = value +""; + this.numberValue = Number(value); + return this; +} + +function Property( object, value, string, number ) { + this.object = object; + this.string = String(value); + this.number = Number(value); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.1-4-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.1-4-n.js new file mode 100644 index 00000000..173addbc --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.1-4-n.js @@ -0,0 +1,94 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.1-4-n.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Properties are accessed by name, using either the dot notation: + MemberExpression . Identifier + CallExpression . Identifier + + or the bracket notation: MemberExpression [ Expression ] + CallExpression [ Expression ] + + The dot notation is explained by the following syntactic conversion: + MemberExpression . Identifier + is identical in its behavior to + MemberExpression [ <identifier-string> ] + and similarly + CallExpression . Identifier + is identical in its behavior to + CallExpression [ <identifier-string> ] + where <identifier-string> is a string literal containing the same sequence + of characters as the Identifier. + + The production MemberExpression : MemberExpression [ Expression ] is + evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Expression. + 4. Call GetValue(Result(3)). + 5. Call ToObject(Result(2)). + 6. Call ToString(Result(4)). + 7. Return a value of type Reference whose base object is Result(5) and + whose property name is Result(6). + + The production CallExpression : CallExpression [ Expression ] is evaluated + in exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.2.1-4-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); + +// go through all Native Function objects, methods, and properties and get their typeof. + +var PROPERTY = new Array(); +var p = 0; + +// try to access properties of primitive types + +PROPERTY[p++] = new Property( "null", null, "null", 0 ); + +for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) { + + DESCRIPTION = PROPERTY[i].object + ".valueOf()"; + EXPECTED = "error"; + + new TestCase( SECTION, + PROPERTY[i].object + ".valueOf()", + PROPERTY[i].value, + eval( PROPERTY[i].object+ ".valueOf()" ) ); + + new TestCase( SECTION, + PROPERTY[i].object + ".toString()", + PROPERTY[i].string, + eval(PROPERTY[i].object+ ".toString()") ); + +} + +test(); + +function MyObject( value ) { + this.value = value; + this.stringValue = value +""; + this.numberValue = Number(value); + return this; +} +function Property( object, value, string, number ) { + this.object = object; + this.string = String(value); + this.number = Number(value); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.1-5.js b/source/spidermonkey-tests/ecma/Expressions/11.2.1-5.js new file mode 100644 index 00000000..22750b04 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.1-5.js @@ -0,0 +1,94 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.1-5.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Properties are accessed by name, using either the dot notation: + MemberExpression . Identifier + CallExpression . Identifier + + or the bracket notation: MemberExpression [ Expression ] + CallExpression [ Expression ] + + The dot notation is explained by the following syntactic conversion: + MemberExpression . Identifier + is identical in its behavior to + MemberExpression [ <identifier-string> ] + and similarly + CallExpression . Identifier + is identical in its behavior to + CallExpression [ <identifier-string> ] + where <identifier-string> is a string literal containing the same sequence + of characters as the Identifier. + + The production MemberExpression : MemberExpression [ Expression ] is + evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Expression. + 4. Call GetValue(Result(3)). + 5. Call ToObject(Result(2)). + 6. Call ToString(Result(4)). + 7. Return a value of type Reference whose base object is Result(5) and + whose property name is Result(6). + + The production CallExpression : CallExpression [ Expression ] is evaluated + in exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.2.1-5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); + +// go through all Native Function objects, methods, and properties and get their typeof. + +var PROPERTY = new Array(); +var p = 0; + +// try to access properties of primitive types + +PROPERTY[p++] = new Property( new String("hi"), "hi", "hi", NaN ); +PROPERTY[p++] = new Property( new Number(NaN), NaN, "NaN", NaN ); +PROPERTY[p++] = new Property( new Number(3), 3, "3", 3 ); +PROPERTY[p++] = new Property( new Boolean(true), true, "true", 1 ); +PROPERTY[p++] = new Property( new Boolean(false), false, "false", 0 ); + +for ( var i = 0, RESULT; i < PROPERTY.length; i++ ) { + new TestCase( SECTION, + PROPERTY[i].object + ".valueOf()", + PROPERTY[i].value, + eval( "PROPERTY[i].object.valueOf()" ) ); + + new TestCase( SECTION, + PROPERTY[i].object + ".toString()", + PROPERTY[i].string, + eval( "PROPERTY[i].object.toString()" ) ); + +} + +test(); + +function MyObject( value ) { + this.value = value; + this.stringValue = value +""; + this.numberValue = Number(value); + return this; +} +function Property( object, value, string, number ) { + this.object = object; + this.string = String(value); + this.number = Number(value); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-1-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-1-n.js new file mode 100644 index 00000000..6b7f1835 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-1-n.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-1.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-1-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var OBJECT = new Object(); + +DESCRIPTION = "OBJECT = new Object; var o = new OBJECT()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "OBJECT = new Object; var o = new OBJECT()", + "error", + eval("o = new OBJECT()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-1.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-1.js new file mode 100644 index 00000000..3be78b50 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-1.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-1.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "(new TestFunction(0,1,2,3,4,5)).length", + 6, + (new TestFunction(0,1,2,3,4,5)).length ); + +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-10-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-10-n.js new file mode 100644 index 00000000..1a2ac973 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-10-n.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-9-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-9-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var m = new Math()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var m = new Math()", + "error", + eval("m = new Math()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-11.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-11.js new file mode 100644 index 00000000..258d7aca --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-11.js @@ -0,0 +1,70 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-9-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-9-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var FUNCTION = new Function(); + +new TestCase( SECTION, + "var FUNCTION = new Function(); f = new FUNCTION(); typeof f", + "object", + eval("var FUNCTION = new Function(); f = new FUNCTION(); typeof f") ); + +new TestCase( SECTION, + "var FUNCTION = new Function('return this'); f = new FUNCTION(); typeof f", + "object", + eval("var FUNCTION = new Function('return this'); f = new FUNCTION(); typeof f") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-2-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-2-n.js new file mode 100644 index 00000000..82512fcd --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-2-n.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-2.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-2-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var UNDEFINED = void 0; + +DESCRIPTION = "UNDEFINED = void 0; var o = new UNDEFINED()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "UNDEFINED = void 0; var o = new UNDEFINED()", + "error", + eval("o = new UNDEFINED()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-3-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-3-n.js new file mode 100644 index 00000000..a1a6ec3a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-3-n.js @@ -0,0 +1,66 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-3-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-3-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var DESCRIPTION = "NULL = null; var o = new NULL()"; +var EXPECTED = "error"; +var NULL = null; + +new TestCase( SECTION, + "NULL = null; var o = new NULL()", + "error", + eval("o = new NULL()") ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-4-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-4-n.js new file mode 100644 index 00000000..71d642a3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-4-n.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-4-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-4-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var STRING = ""; + +DESCRIPTION = "STRING = '', var s = new STRING()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "STRING = '', var s = new STRING()", + "error", + eval("s = new STRING()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-5-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-5-n.js new file mode 100644 index 00000000..80caff6b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-5-n.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-5-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-5-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var NUMBER = 0; + +DESCRIPTION = "NUMBER=0, var n = new NUMBER()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "NUMBER=0, var n = new NUMBER()", + "error", + eval("n = new NUMBER()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-6-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-6-n.js new file mode 100644 index 00000000..7b48da67 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-6-n.js @@ -0,0 +1,69 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-6-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.2.2-6-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var BOOLEAN = true; +DESCRIPTION = "BOOLEAN = true; var b = new BOOLEAN()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "BOOLEAN = true; var b = new BOOLEAN()", + "error", + eval("b = new BOOLEAN()") ); +test(); + +function TestFunction() { + return arguments; +} + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-7-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-7-n.js new file mode 100644 index 00000000..67ca27d0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-7-n.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-6-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-6-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var STRING = new String("hi"); + +DESCRIPTION = "var STRING = new String('hi'); var s = new STRING()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var STRING = new String('hi'); var s = new STRING()", + "error", + eval("s = new STRING()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-8-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-8-n.js new file mode 100644 index 00000000..a2fbbc0c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-8-n.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-8-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-8-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var NUMBER = new Number(1); + +DESCRIPTION = "var NUMBER = new Number(1); var n = new NUMBER()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var NUMBER = new Number(1); var n = new NUMBER()", + "error", + eval("n = new NUMBER()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.2-9-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.2-9-n.js new file mode 100644 index 00000000..66fb7619 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.2-9-n.js @@ -0,0 +1,70 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.2-9-n.js + ECMA Section: 11.2.2. The new operator + Description: + + MemberExpression: + PrimaryExpression + MemberExpression[Expression] + MemberExpression.Identifier + new MemberExpression Arguments + + new NewExpression + + The production NewExpression : new NewExpression is evaluated as follows: + + 1. Evaluate NewExpression. + 2. Call GetValue(Result(1)). + 3. If Type(Result(2)) is not Object, generate a runtime error. + 4. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 5. Call the [[Construct]] method on Result(2), providing no arguments + (that is, an empty list of arguments). + 6. If Type(Result(5)) is not Object, generate a runtime error. + 7. Return Result(5). + + The production MemberExpression : new MemberExpression Arguments is evaluated as follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate Arguments, producing an internal list of argument values + (section 0). + 4. If Type(Result(2)) is not Object, generate a runtime error. + 5. If Result(2) does not implement the internal [[Construct]] method, + generate a runtime error. + 6. Call the [[Construct]] method on Result(2), providing the list + Result(3) as the argument values. + 7. If Type(Result(6)) is not Object, generate a runtime error. + 8 .Return Result(6). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.2-9-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The new operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var BOOLEAN = new Boolean(); + +DESCRIPTION = "var BOOLEAN = new Boolean(); var b = new BOOLEAN()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var BOOLEAN = new Boolean(); var b = new BOOLEAN()", + "error", + eval("b = new BOOLEAN()") ); +test(); + +function TestFunction() { + return arguments; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.3-1.js b/source/spidermonkey-tests/ecma/Expressions/11.2.3-1.js new file mode 100644 index 00000000..591304f9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.3-1.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.3-1.js + ECMA Section: 11.2.3. Function Calls + Description: + + The production CallExpression : MemberExpression Arguments is evaluated as + follows: + + 1.Evaluate MemberExpression. + 2.Evaluate Arguments, producing an internal list of argument values + (section 0). + 3.Call GetValue(Result(1)). + 4.If Type(Result(3)) is not Object, generate a runtime error. + 5.If Result(3) does not implement the internal [[Call]] method, generate a + runtime error. + 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise, + Result(6) is null. + 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is + the same as Result(6). + 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value + and providing the list Result(2) as the argument values. + 9.Return Result(8). + + The production CallExpression : CallExpression Arguments is evaluated in + exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Note: Result(8) will never be of type Reference if Result(3) is a native + ECMAScript object. Whether calling a host object can return a value of + type Reference is implementation-dependent. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function Calls"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +/* this.eval() is no longer legal syntax. +// MemberExpression : this + +new TestCase( SECTION, +"this.eval()", +void 0, +this.eval() ); + +new TestCase( SECTION, +"this.eval('NaN')", +NaN, +this.eval("NaN") ); +*/ +// MemberExpression: Identifier + +var OBJECT = true; + +new TestCase( SECTION, + "OBJECT.toString()", + "true", + OBJECT.toString() ); + +// MemberExpression[ Expression] + +new TestCase( SECTION, + "(new Array())['length'].valueOf()", + 0, + (new Array())["length"].valueOf() ); + +// MemberExpression . Identifier +new TestCase( SECTION, + "(new Array()).length.valueOf()", + 0, + (new Array()).length.valueOf() ); +// new MemberExpression Arguments + +new TestCase( SECTION, + "(new Array(20))['length'].valueOf()", + 20, + (new Array(20))["length"].valueOf() ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.3-2-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.3-2-n.js new file mode 100644 index 00000000..609eac9d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.3-2-n.js @@ -0,0 +1,60 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.3-2-n.js + ECMA Section: 11.2.3. Function Calls + Description: + + The production CallExpression : MemberExpression Arguments is evaluated as + follows: + + 1.Evaluate MemberExpression. + 2.Evaluate Arguments, producing an internal list of argument values + (section 0). + 3.Call GetValue(Result(1)). + 4.If Type(Result(3)) is not Object, generate a runtime error. + 5.If Result(3) does not implement the internal [[Call]] method, generate a + runtime error. + 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise, + Result(6) is null. + 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is + the same as Result(6). + 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value + and providing the list Result(2) as the argument values. + 9.Return Result(8). + + The production CallExpression : CallExpression Arguments is evaluated in + exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Note: Result(8) will never be of type Reference if Result(3) is a native + ECMAScript object. Whether calling a host object can return a value of + type Reference is implementation-dependent. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.3-2-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function Calls"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "3.valueOf()", + 3, + eval("3.valueOf()") ); + +new TestCase( SECTION, + "(3).valueOf()", + 3, + eval("(3).valueOf()") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.3-3-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.3-3-n.js new file mode 100644 index 00000000..9d9aec59 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.3-3-n.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.3-3-n.js + ECMA Section: 11.2.3. Function Calls + Description: + + The production CallExpression : MemberExpression Arguments is evaluated as + follows: + + 1.Evaluate MemberExpression. + 2.Evaluate Arguments, producing an internal list of argument values + (section 0). + 3.Call GetValue(Result(1)). + 4.If Type(Result(3)) is not Object, generate a runtime error. + 5.If Result(3) does not implement the internal [[Call]] method, generate a + runtime error. + 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise, + Result(6) is null. + 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is + the same as Result(6). + 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value + and providing the list Result(2) as the argument values. + 9.Return Result(8). + + The production CallExpression : CallExpression Arguments is evaluated in + exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Note: Result(8) will never be of type Reference if Result(3) is a native + ECMAScript object. Whether calling a host object can return a value of + type Reference is implementation-dependent. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.3-3-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function Calls"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "(void 0).valueOf()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "(void 0).valueOf()", + "error", + eval("(void 0).valueOf()") ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.3-4-n.js b/source/spidermonkey-tests/ecma/Expressions/11.2.3-4-n.js new file mode 100644 index 00000000..7d097303 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.3-4-n.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.3-4-n.js + ECMA Section: 11.2.3. Function Calls + Description: + + The production CallExpression : MemberExpression Arguments is evaluated as + follows: + + 1.Evaluate MemberExpression. + 2.Evaluate Arguments, producing an internal list of argument values + (section 0). + 3.Call GetValue(Result(1)). + 4.If Type(Result(3)) is not Object, generate a runtime error. + 5.If Result(3) does not implement the internal [[Call]] method, generate a + runtime error. + 6.If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise, + Result(6) is null. + 7.If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is + the same as Result(6). + 8.Call the [[Call]] method on Result(3), providing Result(7) as the this value + and providing the list Result(2) as the argument values. + 9.Return Result(8). + + The production CallExpression : CallExpression Arguments is evaluated in + exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Note: Result(8) will never be of type Reference if Result(3) is a native + ECMAScript object. Whether calling a host object can return a value of + type Reference is implementation-dependent. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.3-4-n.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function Calls"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "null.valueOf()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "null.valueOf()", + "error", + eval("null.valueOf()") ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.2.3-5.js b/source/spidermonkey-tests/ecma/Expressions/11.2.3-5.js new file mode 100644 index 00000000..8914867f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.2.3-5.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.2.3-5-n.js + ECMA Section: 11.2.3. Function Calls + Description: + + The production CallExpression : MemberExpression Arguments is evaluated as + follows: + + 1. Evaluate MemberExpression. + 2. Evaluate Arguments, producing an internal list of argument values + (section 0). + 3. Call GetValue(Result(1)). + 4. If Type(Result(3)) is not Object, generate a runtime error. + 5. If Result(3) does not implement the internal [[Call]] method, generate a + runtime error. + 6. If Type(Result(1)) is Reference, Result(6) is GetBase(Result(1)). Otherwise, + Result(6) is null. + 7. If Result(6) is an activation object, Result(7) is null. Otherwise, Result(7) is + the same as Result(6). + 8. Call the [[Call]] method on Result(3), providing Result(7) as the this value + and providing the list Result(2) as the argument values. + 9. Return Result(8). + + The production CallExpression : CallExpression Arguments is evaluated in + exactly the same manner, except that the contained CallExpression is + evaluated in step 1. + + Note: Result(8) will never be of type Reference if Result(3) is a native + ECMAScript object. Whether calling a host object can return a value of + type Reference is implementation-dependent. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "11.2.3-5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function Calls"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "true.valueOf()", true, true.valueOf() ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.3.1.js b/source/spidermonkey-tests/ecma/Expressions/11.3.1.js new file mode 100644 index 00000000..9b11d00c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.3.1.js @@ -0,0 +1,119 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.3.1.js + ECMA Section: 11.3.1 Postfix increment operator + Description: + The production MemberExpression : MemberExpression ++ is evaluated as + follows: + + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Call ToNumber(Result(2)). + 4. Add the value 1 to Result(3), using the same rules as for the + + operator (section 0). + 5. Call PutValue(Result(1), Result(4)). + 6. Return Result(3). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.3.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Postfix increment operator"); + +// special numbers +new TestCase( SECTION, "var MYVAR; MYVAR++", NaN, eval("var MYVAR; MYVAR++") ); +new TestCase( SECTION, "var MYVAR= void 0; MYVAR++", NaN, eval("var MYVAR=void 0; MYVAR++") ); +new TestCase( SECTION, "var MYVAR=null; MYVAR++", 0, eval("var MYVAR=null; MYVAR++") ); +new TestCase( SECTION, "var MYVAR=true; MYVAR++", 1, eval("var MYVAR=true; MYVAR++") ); +new TestCase( SECTION, "var MYVAR=false; MYVAR++", 0, eval("var MYVAR=false; MYVAR++") ); + +// verify return value + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR++", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR++") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR++", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR++") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR++;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR++;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR++;MYVAR") ); + +// number primitives +new TestCase( SECTION, "var MYVAR=0;MYVAR++", 0, eval("var MYVAR=0;MYVAR++") ); +new TestCase( SECTION, "var MYVAR=0.2345;MYVAR++", 0.2345, eval("var MYVAR=0.2345;MYVAR++") ); +new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR++", -0.2345, eval("var MYVAR=-0.2345;MYVAR++") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0.2345;MYVAR++;MYVAR", 1.2345, eval("var MYVAR=0.2345;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR++;MYVAR", 0.7655, eval("var MYVAR=-0.2345;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;MYVAR++;MYVAR", 1, eval("var MYVAR=0;MYVAR++;MYVAR") ); + +// boolean values +// verify return value + +new TestCase( SECTION, "var MYVAR=true;MYVAR++", 1, eval("var MYVAR=true;MYVAR++") ); +new TestCase( SECTION, "var MYVAR=false;MYVAR++", 0, eval("var MYVAR=false;MYVAR++") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=true;MYVAR++;MYVAR", 2, eval("var MYVAR=true;MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=false;MYVAR++;MYVAR", 1, eval("var MYVAR=false;MYVAR++;MYVAR") ); + +// boolean objects +// verify return value + +new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR++", 1, eval("var MYVAR=true;MYVAR++") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR++", 0, eval("var MYVAR=false;MYVAR++") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR++;MYVAR", 2, eval("var MYVAR=new Boolean(true);MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR++;MYVAR", 1, eval("var MYVAR=new Boolean(false);MYVAR++;MYVAR") ); + +// string primitives +new TestCase( SECTION, "var MYVAR='string';MYVAR++", Number.NaN, eval("var MYVAR='string';MYVAR++") ); +new TestCase( SECTION, "var MYVAR='12345';MYVAR++", 12345, eval("var MYVAR='12345';MYVAR++") ); +new TestCase( SECTION, "var MYVAR='-12345';MYVAR++", -12345, eval("var MYVAR='-12345';MYVAR++") ); +new TestCase( SECTION, "var MYVAR='0Xf';MYVAR++", 15, eval("var MYVAR='0Xf';MYVAR++") ); +new TestCase( SECTION, "var MYVAR='077';MYVAR++", 77, eval("var MYVAR='077';MYVAR++") ); +new TestCase( SECTION, "var MYVAR=''; MYVAR++", 0, eval("var MYVAR='';MYVAR++") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR='string';MYVAR++;MYVAR", Number.NaN, eval("var MYVAR='string';MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR='12345';MYVAR++;MYVAR", 12346, eval("var MYVAR='12345';MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR='-12345';MYVAR++;MYVAR", -12344, eval("var MYVAR='-12345';MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR='0xf';MYVAR++;MYVAR", 16, eval("var MYVAR='0xf';MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR='077';MYVAR++;MYVAR", 78, eval("var MYVAR='077';MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR='';MYVAR++;MYVAR", 1, eval("var MYVAR='';MYVAR++;MYVAR") ); + +// string objects +new TestCase( SECTION, "var MYVAR=new String('string');MYVAR++", Number.NaN, eval("var MYVAR=new String('string');MYVAR++") ); +new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR++", 12345, eval("var MYVAR=new String('12345');MYVAR++") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR++", -12345, eval("var MYVAR=new String('-12345');MYVAR++") ); +new TestCase( SECTION, "var MYVAR=new String('0Xf');MYVAR++", 15, eval("var MYVAR=new String('0Xf');MYVAR++") ); +new TestCase( SECTION, "var MYVAR=new String('077');MYVAR++", 77, eval("var MYVAR=new String('077');MYVAR++") ); +new TestCase( SECTION, "var MYVAR=new String(''); MYVAR++", 0, eval("var MYVAR=new String('');MYVAR++") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new String('string');MYVAR++;MYVAR", Number.NaN, eval("var MYVAR=new String('string');MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR++;MYVAR", 12346, eval("var MYVAR=new String('12345');MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR++;MYVAR", -12344, eval("var MYVAR=new String('-12345');MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('0xf');MYVAR++;MYVAR", 16, eval("var MYVAR=new String('0xf');MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('077');MYVAR++;MYVAR", 78, eval("var MYVAR=new String('077');MYVAR++;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('');MYVAR++;MYVAR", 1, eval("var MYVAR=new String('');MYVAR++;MYVAR") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.3.2.js b/source/spidermonkey-tests/ecma/Expressions/11.3.2.js new file mode 100644 index 00000000..1e436794 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.3.2.js @@ -0,0 +1,119 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.3.2.js + ECMA Section: 11.3.2 Postfix decrement operator + Description: + + 11.3.2 Postfix decrement operator + + The production MemberExpression : MemberExpression -- is evaluated as follows: + 1. Evaluate MemberExpression. + 2. Call GetValue(Result(1)). + 3. Call ToNumber(Result(2)). + 4. Subtract the value 1 from Result(3), using the same rules as for the - + operator (section 0). + 5. Call PutValue(Result(1), Result(4)). + 6. Return Result(3). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.3.2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Postfix decrement operator"); + +// special numbers +new TestCase( SECTION, "var MYVAR; MYVAR--", NaN, eval("var MYVAR; MYVAR--") ); +new TestCase( SECTION, "var MYVAR= void 0; MYVAR--", NaN, eval("var MYVAR=void 0; MYVAR--") ); +new TestCase( SECTION, "var MYVAR=null; MYVAR--", 0, eval("var MYVAR=null; MYVAR--") ); +new TestCase( SECTION, "var MYVAR=true; MYVAR--", 1, eval("var MYVAR=true; MYVAR--") ); +new TestCase( SECTION, "var MYVAR=false; MYVAR--", 0, eval("var MYVAR=false; MYVAR--") ); + +// verify return value + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR--", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR--") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR--", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR--") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;MYVAR--;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;MYVAR--;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;MYVAR--;MYVAR") ); + +// number primitives +new TestCase( SECTION, "var MYVAR=0;MYVAR--", 0, eval("var MYVAR=0;MYVAR--") ); +new TestCase( SECTION, "var MYVAR=0.2345;MYVAR--", 0.2345, eval("var MYVAR=0.2345;MYVAR--") ); +new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR--", -0.2345, eval("var MYVAR=-0.2345;MYVAR--") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0.2345;MYVAR--;MYVAR", -0.7655, eval("var MYVAR=0.2345;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=-0.2345;MYVAR--;MYVAR", -1.2345, eval("var MYVAR=-0.2345;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;MYVAR--;MYVAR", -1, eval("var MYVAR=0;MYVAR--;MYVAR") ); + +// boolean values +// verify return value + +new TestCase( SECTION, "var MYVAR=true;MYVAR--", 1, eval("var MYVAR=true;MYVAR--") ); +new TestCase( SECTION, "var MYVAR=false;MYVAR--", 0, eval("var MYVAR=false;MYVAR--") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=true;MYVAR--;MYVAR", 0, eval("var MYVAR=true;MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=false;MYVAR--;MYVAR", -1, eval("var MYVAR=false;MYVAR--;MYVAR") ); + +// boolean objects +// verify return value + +new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR--", 1, eval("var MYVAR=true;MYVAR--") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR--", 0, eval("var MYVAR=false;MYVAR--") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new Boolean(true);MYVAR--;MYVAR", 0, eval("var MYVAR=new Boolean(true);MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);MYVAR--;MYVAR", -1, eval("var MYVAR=new Boolean(false);MYVAR--;MYVAR") ); + +// string primitives +new TestCase( SECTION, "var MYVAR='string';MYVAR--", Number.NaN, eval("var MYVAR='string';MYVAR--") ); +new TestCase( SECTION, "var MYVAR='12345';MYVAR--", 12345, eval("var MYVAR='12345';MYVAR--") ); +new TestCase( SECTION, "var MYVAR='-12345';MYVAR--", -12345, eval("var MYVAR='-12345';MYVAR--") ); +new TestCase( SECTION, "var MYVAR='0Xf';MYVAR--", 15, eval("var MYVAR='0Xf';MYVAR--") ); +new TestCase( SECTION, "var MYVAR='077';MYVAR--", 77, eval("var MYVAR='077';MYVAR--") ); +new TestCase( SECTION, "var MYVAR=''; MYVAR--", 0, eval("var MYVAR='';MYVAR--") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR='string';MYVAR--;MYVAR", Number.NaN, eval("var MYVAR='string';MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR='12345';MYVAR--;MYVAR", 12344, eval("var MYVAR='12345';MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR='-12345';MYVAR--;MYVAR", -12346, eval("var MYVAR='-12345';MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR='0xf';MYVAR--;MYVAR", 14, eval("var MYVAR='0xf';MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR='077';MYVAR--;MYVAR", 76, eval("var MYVAR='077';MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR='';MYVAR--;MYVAR", -1, eval("var MYVAR='';MYVAR--;MYVAR") ); + +// string objects +new TestCase( SECTION, "var MYVAR=new String('string');MYVAR--", Number.NaN, eval("var MYVAR=new String('string');MYVAR--") ); +new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR--", 12345, eval("var MYVAR=new String('12345');MYVAR--") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR--", -12345, eval("var MYVAR=new String('-12345');MYVAR--") ); +new TestCase( SECTION, "var MYVAR=new String('0Xf');MYVAR--", 15, eval("var MYVAR=new String('0Xf');MYVAR--") ); +new TestCase( SECTION, "var MYVAR=new String('077');MYVAR--", 77, eval("var MYVAR=new String('077');MYVAR--") ); +new TestCase( SECTION, "var MYVAR=new String(''); MYVAR--", 0, eval("var MYVAR=new String('');MYVAR--") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new String('string');MYVAR--;MYVAR", Number.NaN, eval("var MYVAR=new String('string');MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('12345');MYVAR--;MYVAR", 12344, eval("var MYVAR=new String('12345');MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');MYVAR--;MYVAR", -12346, eval("var MYVAR=new String('-12345');MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('0xf');MYVAR--;MYVAR", 14, eval("var MYVAR=new String('0xf');MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('077');MYVAR--;MYVAR", 76, eval("var MYVAR=new String('077');MYVAR--;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('');MYVAR--;MYVAR", -1, eval("var MYVAR=new String('');MYVAR--;MYVAR") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.1.js b/source/spidermonkey-tests/ecma/Expressions/11.4.1.js new file mode 100644 index 00000000..d247f60f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.1.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.1.js + ECMA Section: 11.4.1 the Delete Operator + Description: returns true if the property could be deleted + returns false if it could not be deleted + Author: christine@netscape.com + Date: 7 july 1997 + +*/ + + +var SECTION = "11.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The delete operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// new TestCase( SECTION, "x=[9,8,7];delete(x[2]);x.length", 2, eval("x=[9,8,7];delete(x[2]);x.length") ); +// new TestCase( SECTION, "x=[9,8,7];delete(x[2]);x.toString()", "9,8", eval("x=[9,8,7];delete(x[2]);x.toString()") ); +new TestCase( SECTION, "x=new Date();delete x;typeof(x)", "undefined", eval("x=new Date();delete x;typeof(x)") ); + +// array[item++] = new TestCase( SECTION, "delete(x=new Date())", true, delete(x=new Date()) ); +// array[item++] = new TestCase( SECTION, "delete('string primitive')", true, delete("string primitive") ); +// array[item++] = new TestCase( SECTION, "delete(new String( 'string object' ) )", true, delete(new String("string object")) ); +// array[item++] = new TestCase( SECTION, "delete(new Number(12345) )", true, delete(new Number(12345)) ); +new TestCase( SECTION, "delete(Math.PI)", false, delete(Math.PI) ); +// array[item++] = new TestCase( SECTION, "delete(null)", true, delete(null) ); +// array[item++] = new TestCase( SECTION, "delete(void(0))", true, delete(void(0)) ); + +// variables declared with the var statement are not deletable. + +var abc; +new TestCase( SECTION, "var abc; delete(abc)", false, delete abc ); + +new TestCase( SECTION, + "var OB = new MyObject(); for ( p in OB ) { delete p }", + true, + eval("var OB = new MyObject(); for ( p in OB ) { delete p }") ); + +test(); + +function MyObject() { + this.prop1 = true; + this.prop2 = false; + this.prop3 = null; + this.prop4 = void 0; + this.prop5 = "hi"; + this.prop6 = 42; + this.prop7 = new Date(); + this.prop8 = Math.PI; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.2.js b/source/spidermonkey-tests/ecma/Expressions/11.4.2.js new file mode 100644 index 00000000..28071120 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.2.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.2.js + ECMA Section: 11.4.2 the Void Operator + Description: always returns undefined (?) + Author: christine@netscape.com + Date: 7 july 1997 + +*/ +var SECTION = "11.4.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The void operator"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "void(new String('string object'))", void 0, void(new String( 'string object' )) ); +new TestCase( SECTION, "void('string primitive')", void 0, void("string primitive") ); +new TestCase( SECTION, "void(Number.NaN)", void 0, void(Number.NaN) ); +new TestCase( SECTION, "void(Number.POSITIVE_INFINITY)", void 0, void(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "void(1)", void 0, void(1) ); +new TestCase( SECTION, "void(0)", void 0, void(0) ); +new TestCase( SECTION, "void(-1)", void 0, void(-1) ); +new TestCase( SECTION, "void(Number.NEGATIVE_INFINITY)", void 0, void(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "void(Math.PI)", void 0, void(Math.PI) ); +new TestCase( SECTION, "void(true)", void 0, void(true) ); +new TestCase( SECTION, "void(false)", void 0, void(false) ); +new TestCase( SECTION, "void(null)", void 0, void(null) ); +new TestCase( SECTION, "void new String('string object')", void 0, void new String( 'string object' ) ); +new TestCase( SECTION, "void 'string primitive'", void 0, void "string primitive" ); +new TestCase( SECTION, "void Number.NaN", void 0, void Number.NaN ); +new TestCase( SECTION, "void Number.POSITIVE_INFINITY", void 0, void Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "void 1", void 0, void 1 ); +new TestCase( SECTION, "void 0", void 0, void 0 ); +new TestCase( SECTION, "void -1", void 0, void -1 ); +new TestCase( SECTION, "void Number.NEGATIVE_INFINITY", void 0, void Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "void Math.PI", void 0, void Math.PI ); +new TestCase( SECTION, "void true", void 0, void true ); +new TestCase( SECTION, "void false", void 0, void false ); +new TestCase( SECTION, "void null", void 0, void null ); + +// array[item++] = new TestCase( SECTION, "void()", void 0, void() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.3.js b/source/spidermonkey-tests/ecma/Expressions/11.4.3.js new file mode 100644 index 00000000..d2d06e8c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.3.js @@ -0,0 +1,77 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: typeof_1.js + ECMA Section: 11.4.3 typeof operator + Description: typeof evaluates unary expressions: + undefined "undefined" + null "object" + Boolean "boolean" + Number "number" + String "string" + Object "object" [native, doesn't implement Call] + Object "function" [native, implements [Call]] + Object implementation dependent + [not sure how to test this] + Author: christine@netscape.com + Date: june 30, 1997 + +*/ + +var SECTION = "11.4.3"; + +var VERSION = "ECMA_1"; +startTest(); +var TITLE = " The typeof operator"; +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "typeof(void(0))", "undefined", typeof(void(0)) ); +new TestCase( SECTION, "typeof(null)", "object", typeof(null) ); +new TestCase( SECTION, "typeof(true)", "boolean", typeof(true) ); +new TestCase( SECTION, "typeof(false)", "boolean", typeof(false) ); +new TestCase( SECTION, "typeof(new Boolean())", "object", typeof(new Boolean()) ); +new TestCase( SECTION, "typeof(new Boolean(true))", "object", typeof(new Boolean(true)) ); +new TestCase( SECTION, "typeof(Boolean())", "boolean", typeof(Boolean()) ); +new TestCase( SECTION, "typeof(Boolean(false))", "boolean", typeof(Boolean(false)) ); +new TestCase( SECTION, "typeof(Boolean(true))", "boolean", typeof(Boolean(true)) ); +new TestCase( SECTION, "typeof(NaN)", "number", typeof(Number.NaN) ); +new TestCase( SECTION, "typeof(Infinity)", "number", typeof(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "typeof(-Infinity)", "number", typeof(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "typeof(Math.PI)", "number", typeof(Math.PI) ); +new TestCase( SECTION, "typeof(0)", "number", typeof(0) ); +new TestCase( SECTION, "typeof(1)", "number", typeof(1) ); +new TestCase( SECTION, "typeof(-1)", "number", typeof(-1) ); +new TestCase( SECTION, "typeof('0')", "string", typeof("0") ); +new TestCase( SECTION, "typeof(Number())", "number", typeof(Number()) ); +new TestCase( SECTION, "typeof(Number(0))", "number", typeof(Number(0)) ); +new TestCase( SECTION, "typeof(Number(1))", "number", typeof(Number(1)) ); +new TestCase( SECTION, "typeof(Nubmer(-1))", "number", typeof(Number(-1)) ); +new TestCase( SECTION, "typeof(new Number())", "object", typeof(new Number()) ); +new TestCase( SECTION, "typeof(new Number(0))", "object", typeof(new Number(0)) ); +new TestCase( SECTION, "typeof(new Number(1))", "object", typeof(new Number(1)) ); + +// Math does not implement [[Construct]] or [[Call]] so its type is object. + +new TestCase( SECTION, "typeof(Math)", "object", typeof(Math) ); + +new TestCase( SECTION, "typeof(Number.prototype.toString)", "function", typeof(Number.prototype.toString) ); + +new TestCase( SECTION, "typeof('a string')", "string", typeof("a string") ); +new TestCase( SECTION, "typeof('')", "string", typeof("") ); +new TestCase( SECTION, "typeof(new Date())", "object", typeof(new Date()) ); +new TestCase( SECTION, "typeof(new Array(1,2,3))", "object", typeof(new Array(1,2,3)) ); +new TestCase( SECTION, "typeof(new String('string object'))", "object", typeof(new String("string object")) ); +new TestCase( SECTION, "typeof(String('string primitive'))", "string", typeof(String("string primitive")) ); +new TestCase( SECTION, "typeof(['array', 'of', 'strings'])", "object", typeof(["array", "of", "strings"]) ); +new TestCase( SECTION, "typeof(new Function())", "function", typeof( new Function() ) ); +new TestCase( SECTION, "typeof(parseInt)", "function", typeof( parseInt ) ); +new TestCase( SECTION, "typeof(test)", "function", typeof( test ) ); +new TestCase( SECTION, "typeof(String.fromCharCode)", "function", typeof( String.fromCharCode ) ); + + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.4.js b/source/spidermonkey-tests/ecma/Expressions/11.4.4.js new file mode 100644 index 00000000..744c9e38 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.4.js @@ -0,0 +1,122 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.4.js + ECMA Section: 11.4.4 Prefix increment operator + Description: + The production UnaryExpression : ++ UnaryExpression is evaluated as + follows: + + 1. Evaluate UnaryExpression. + 2. Call GetValue(Result(1)). + 3. Call ToNumber(Result(2)). + 4. Add the value 1 to Result(3), using the same rules as for the + + operator (section 11.6.3). + 5. Call PutValue(Result(1), Result(4)). + 6. Return Result(4). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.4.4"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Prefix increment operator"); + +// special case: var is not defined + +new TestCase( SECTION, "var MYVAR; ++MYVAR", NaN, eval("var MYVAR; ++MYVAR") ); +new TestCase( SECTION, "var MYVAR= void 0; ++MYVAR", NaN, eval("var MYVAR=void 0; ++MYVAR") ); +new TestCase( SECTION, "var MYVAR=null; ++MYVAR", 1, eval("var MYVAR=null; ++MYVAR") ); +new TestCase( SECTION, "var MYVAR=true; ++MYVAR", 2, eval("var MYVAR=true; ++MYVAR") ); +new TestCase( SECTION, "var MYVAR=false; ++MYVAR", 1, eval("var MYVAR=false; ++MYVAR") ); + +// special numbers +// verify return value + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;++MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;++MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;++MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;++MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;++MYVAR;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;++MYVAR;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;++MYVAR;MYVAR") ); + + +// number primitives +new TestCase( SECTION, "var MYVAR=0;++MYVAR", 1, eval("var MYVAR=0;++MYVAR") ); +new TestCase( SECTION, "var MYVAR=0.2345;++MYVAR", 1.2345, eval("var MYVAR=0.2345;++MYVAR") ); +new TestCase( SECTION, "var MYVAR=-0.2345;++MYVAR", 0.7655, eval("var MYVAR=-0.2345;++MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0.2345;++MYVAR;MYVAR", 1.2345, eval("var MYVAR=0.2345;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=-0.2345;++MYVAR;MYVAR", 0.7655, eval("var MYVAR=-0.2345;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;++MYVAR;MYVAR", 1, eval("var MYVAR=0;++MYVAR;MYVAR") ); + +// boolean values +// verify return value + +new TestCase( SECTION, "var MYVAR=true;++MYVAR", 2, eval("var MYVAR=true;++MYVAR") ); +new TestCase( SECTION, "var MYVAR=false;++MYVAR", 1, eval("var MYVAR=false;++MYVAR") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=true;++MYVAR;MYVAR", 2, eval("var MYVAR=true;++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=false;++MYVAR;MYVAR", 1, eval("var MYVAR=false;++MYVAR;MYVAR") ); + +// boolean objects +// verify return value + +new TestCase( SECTION, "var MYVAR=new Boolean(true);++MYVAR", 2, eval("var MYVAR=true;++MYVAR") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);++MYVAR", 1, eval("var MYVAR=false;++MYVAR") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new Boolean(true);++MYVAR;MYVAR", 2, eval("var MYVAR=new Boolean(true);++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);++MYVAR;MYVAR", 1, eval("var MYVAR=new Boolean(false);++MYVAR;MYVAR") ); + +// string primitives +new TestCase( SECTION, "var MYVAR='string';++MYVAR", Number.NaN, eval("var MYVAR='string';++MYVAR") ); +new TestCase( SECTION, "var MYVAR='12345';++MYVAR", 12346, eval("var MYVAR='12345';++MYVAR") ); +new TestCase( SECTION, "var MYVAR='-12345';++MYVAR", -12344, eval("var MYVAR='-12345';++MYVAR") ); +new TestCase( SECTION, "var MYVAR='0Xf';++MYVAR", 16, eval("var MYVAR='0Xf';++MYVAR") ); +new TestCase( SECTION, "var MYVAR='077';++MYVAR", 78, eval("var MYVAR='077';++MYVAR") ); +new TestCase( SECTION, "var MYVAR=''; ++MYVAR", 1, eval("var MYVAR='';++MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR='string';++MYVAR;MYVAR", Number.NaN, eval("var MYVAR='string';++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='12345';++MYVAR;MYVAR", 12346, eval("var MYVAR='12345';++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='-12345';++MYVAR;MYVAR", -12344, eval("var MYVAR='-12345';++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='0xf';++MYVAR;MYVAR", 16, eval("var MYVAR='0xf';++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='077';++MYVAR;MYVAR", 78, eval("var MYVAR='077';++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='';++MYVAR;MYVAR", 1, eval("var MYVAR='';++MYVAR;MYVAR") ); + +// string objects +new TestCase( SECTION, "var MYVAR=new String('string');++MYVAR", Number.NaN, eval("var MYVAR=new String('string');++MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('12345');++MYVAR", 12346, eval("var MYVAR=new String('12345');++MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');++MYVAR", -12344, eval("var MYVAR=new String('-12345');++MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('0Xf');++MYVAR", 16, eval("var MYVAR=new String('0Xf');++MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('077');++MYVAR", 78, eval("var MYVAR=new String('077');++MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String(''); ++MYVAR", 1, eval("var MYVAR=new String('');++MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new String('string');++MYVAR;MYVAR", Number.NaN, eval("var MYVAR=new String('string');++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('12345');++MYVAR;MYVAR", 12346, eval("var MYVAR=new String('12345');++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');++MYVAR;MYVAR", -12344, eval("var MYVAR=new String('-12345');++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('0xf');++MYVAR;MYVAR", 16, eval("var MYVAR=new String('0xf');++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('077');++MYVAR;MYVAR", 78, eval("var MYVAR=new String('077');++MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('');++MYVAR;MYVAR", 1, eval("var MYVAR=new String('');++MYVAR;MYVAR") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.5.js b/source/spidermonkey-tests/ecma/Expressions/11.4.5.js new file mode 100644 index 00000000..1d3ca78f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.5.js @@ -0,0 +1,120 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.5.js + ECMA Section: 11.4.5 Prefix decrement operator + Description: + + The production UnaryExpression : -- UnaryExpression is evaluated as follows: + + 1.Evaluate UnaryExpression. + 2.Call GetValue(Result(1)). + 3.Call ToNumber(Result(2)). + 4.Subtract the value 1 from Result(3), using the same rules as for the - operator (section 11.6.3). + 5.Call PutValue(Result(1), Result(4)). + + 1.Return Result(4). + Author: christine@netscape.com + Date: \ 12 november 1997 +*/ +var SECTION = "11.4.5"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Prefix decrement operator"); + +// +new TestCase( SECTION, "var MYVAR; --MYVAR", NaN, eval("var MYVAR; --MYVAR") ); +new TestCase( SECTION, "var MYVAR= void 0; --MYVAR", NaN, eval("var MYVAR=void 0; --MYVAR") ); +new TestCase( SECTION, "var MYVAR=null; --MYVAR", -1, eval("var MYVAR=null; --MYVAR") ); +new TestCase( SECTION, "var MYVAR=true; --MYVAR", 0, eval("var MYVAR=true; --MYVAR") ); +new TestCase( SECTION, "var MYVAR=false; --MYVAR", -1, eval("var MYVAR=false; --MYVAR") ); + +// special numbers +// verify return value + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;--MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;--MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;--MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;--MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=Number.POSITIVE_INFINITY;--MYVAR;MYVAR", Number.POSITIVE_INFINITY, eval("var MYVAR=Number.POSITIVE_INFINITY;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR;MYVAR", Number.NEGATIVE_INFINITY, eval("var MYVAR=Number.NEGATIVE_INFINITY;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=Number.NaN;--MYVAR;MYVAR", Number.NaN, eval("var MYVAR=Number.NaN;--MYVAR;MYVAR") ); + + +// number primitives +new TestCase( SECTION, "var MYVAR=0;--MYVAR", -1, eval("var MYVAR=0;--MYVAR") ); +new TestCase( SECTION, "var MYVAR=0.2345;--MYVAR", -0.7655, eval("var MYVAR=0.2345;--MYVAR") ); +new TestCase( SECTION, "var MYVAR=-0.2345;--MYVAR", -1.2345, eval("var MYVAR=-0.2345;--MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0.2345;--MYVAR;MYVAR", -0.7655, eval("var MYVAR=0.2345;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=-0.2345;--MYVAR;MYVAR", -1.2345, eval("var MYVAR=-0.2345;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=0;--MYVAR;MYVAR", -1, eval("var MYVAR=0;--MYVAR;MYVAR") ); + +// boolean values +// verify return value + +new TestCase( SECTION, "var MYVAR=true;--MYVAR", 0, eval("var MYVAR=true;--MYVAR") ); +new TestCase( SECTION, "var MYVAR=false;--MYVAR", -1, eval("var MYVAR=false;--MYVAR") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=true;--MYVAR;MYVAR", 0, eval("var MYVAR=true;--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=false;--MYVAR;MYVAR", -1, eval("var MYVAR=false;--MYVAR;MYVAR") ); + +// boolean objects +// verify return value + +new TestCase( SECTION, "var MYVAR=new Boolean(true);--MYVAR", 0, eval("var MYVAR=true;--MYVAR") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);--MYVAR", -1, eval("var MYVAR=false;--MYVAR") ); +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new Boolean(true);--MYVAR;MYVAR", 0, eval("var MYVAR=new Boolean(true);--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new Boolean(false);--MYVAR;MYVAR", -1, eval("var MYVAR=new Boolean(false);--MYVAR;MYVAR") ); + +// string primitives +new TestCase( SECTION, "var MYVAR='string';--MYVAR", Number.NaN, eval("var MYVAR='string';--MYVAR") ); +new TestCase( SECTION, "var MYVAR='12345';--MYVAR", 12344, eval("var MYVAR='12345';--MYVAR") ); +new TestCase( SECTION, "var MYVAR='-12345';--MYVAR", -12346, eval("var MYVAR='-12345';--MYVAR") ); +new TestCase( SECTION, "var MYVAR='0Xf';--MYVAR", 14, eval("var MYVAR='0Xf';--MYVAR") ); +new TestCase( SECTION, "var MYVAR='077';--MYVAR", 76, eval("var MYVAR='077';--MYVAR") ); +new TestCase( SECTION, "var MYVAR=''; --MYVAR", -1, eval("var MYVAR='';--MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR='string';--MYVAR;MYVAR", Number.NaN, eval("var MYVAR='string';--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='12345';--MYVAR;MYVAR", 12344, eval("var MYVAR='12345';--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='-12345';--MYVAR;MYVAR", -12346, eval("var MYVAR='-12345';--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='0xf';--MYVAR;MYVAR", 14, eval("var MYVAR='0xf';--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='077';--MYVAR;MYVAR", 76, eval("var MYVAR='077';--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR='';--MYVAR;MYVAR", -1, eval("var MYVAR='';--MYVAR;MYVAR") ); + +// string objects +new TestCase( SECTION, "var MYVAR=new String('string');--MYVAR", Number.NaN, eval("var MYVAR=new String('string');--MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('12345');--MYVAR", 12344, eval("var MYVAR=new String('12345');--MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');--MYVAR", -12346, eval("var MYVAR=new String('-12345');--MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('0Xf');--MYVAR", 14, eval("var MYVAR=new String('0Xf');--MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('077');--MYVAR", 76, eval("var MYVAR=new String('077');--MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String(''); --MYVAR", -1, eval("var MYVAR=new String('');--MYVAR") ); + +// verify value of variable + +new TestCase( SECTION, "var MYVAR=new String('string');--MYVAR;MYVAR", Number.NaN, eval("var MYVAR=new String('string');--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('12345');--MYVAR;MYVAR", 12344, eval("var MYVAR=new String('12345');--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('-12345');--MYVAR;MYVAR", -12346, eval("var MYVAR=new String('-12345');--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('0xf');--MYVAR;MYVAR", 14, eval("var MYVAR=new String('0xf');--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('077');--MYVAR;MYVAR", 76, eval("var MYVAR=new String('077');--MYVAR;MYVAR") ); +new TestCase( SECTION, "var MYVAR=new String('');--MYVAR;MYVAR", -1, eval("var MYVAR=new String('');--MYVAR;MYVAR") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.6.js b/source/spidermonkey-tests/ecma/Expressions/11.4.6.js new file mode 100644 index 00000000..16238f02 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.6.js @@ -0,0 +1,265 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.6.js + ECMA Section: 11.4.6 Unary + Operator + Description: convert operand to Number type + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "11.4.6"; +var VERSION = "ECMA_1"; +var BUGNUMBER="77391"; + +startTest(); + +writeHeaderToLog( SECTION + " Unary + operator"); + +new TestCase( SECTION, "+('')", 0, +("") ); +new TestCase( SECTION, "+(' ')", 0, +(" ") ); +new TestCase( SECTION, "+(\\t)", 0, +("\t") ); +new TestCase( SECTION, "+(\\n)", 0, +("\n") ); +new TestCase( SECTION, "+(\\r)", 0, +("\r") ); +new TestCase( SECTION, "+(\\f)", 0, +("\f") ); + +new TestCase( SECTION, "+(String.fromCharCode(0x0009)", 0, +(String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "+(String.fromCharCode(0x0020)", 0, +(String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "+(String.fromCharCode(0x000C)", 0, +(String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "+(String.fromCharCode(0x000B)", 0, +(String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "+(String.fromCharCode(0x000D)", 0, +(String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "+(String.fromCharCode(0x000A)", 0, +(String.fromCharCode(0x000A)) ); + +// a StringNumericLiteral may be preceeded or followed by whitespace and/or +// line terminators + +new TestCase( SECTION, "+( ' ' + 999 )", 999, +( ' '+999) ); +new TestCase( SECTION, "+( '\\n' + 999 )", 999, +( '\n' +999) ); +new TestCase( SECTION, "+( '\\r' + 999 )", 999, +( '\r' +999) ); +new TestCase( SECTION, "+( '\\t' + 999 )", 999, +( '\t' +999) ); +new TestCase( SECTION, "+( '\\f' + 999 )", 999, +( '\f' +999) ); + +new TestCase( SECTION, "+( 999 + ' ' )", 999, +( 999+' ') ); +new TestCase( SECTION, "+( 999 + '\\n' )", 999, +( 999+'\n' ) ); +new TestCase( SECTION, "+( 999 + '\\r' )", 999, +( 999+'\r' ) ); +new TestCase( SECTION, "+( 999 + '\\t' )", 999, +( 999+'\t' ) ); +new TestCase( SECTION, "+( 999 + '\\f' )", 999, +( 999+'\f' ) ); + +new TestCase( SECTION, "+( '\\n' + 999 + '\\n' )", 999, +( '\n' +999+'\n' ) ); +new TestCase( SECTION, "+( '\\r' + 999 + '\\r' )", 999, +( '\r' +999+'\r' ) ); +new TestCase( SECTION, "+( '\\t' + 999 + '\\t' )", 999, +( '\t' +999+'\t' ) ); +new TestCase( SECTION, "+( '\\f' + 999 + '\\f' )", 999, +( '\f' +999+'\f' ) ); + +new TestCase( SECTION, "+( ' ' + '999' )", 999, +( ' '+'999') ); +new TestCase( SECTION, "+( '\\n' + '999' )", 999, +( '\n' +'999') ); +new TestCase( SECTION, "+( '\\r' + '999' )", 999, +( '\r' +'999') ); +new TestCase( SECTION, "+( '\\t' + '999' )", 999, +( '\t' +'999') ); +new TestCase( SECTION, "+( '\\f' + '999' )", 999, +( '\f' +'999') ); + +new TestCase( SECTION, "+( '999' + ' ' )", 999, +( '999'+' ') ); +new TestCase( SECTION, "+( '999' + '\\n' )", 999, +( '999'+'\n' ) ); +new TestCase( SECTION, "+( '999' + '\\r' )", 999, +( '999'+'\r' ) ); +new TestCase( SECTION, "+( '999' + '\\t' )", 999, +( '999'+'\t' ) ); +new TestCase( SECTION, "+( '999' + '\\f' )", 999, +( '999'+'\f' ) ); + +new TestCase( SECTION, "+( '\\n' + '999' + '\\n' )", 999, +( '\n' +'999'+'\n' ) ); +new TestCase( SECTION, "+( '\\r' + '999' + '\\r' )", 999, +( '\r' +'999'+'\r' ) ); +new TestCase( SECTION, "+( '\\t' + '999' + '\\t' )", 999, +( '\t' +'999'+'\t' ) ); +new TestCase( SECTION, "+( '\\f' + '999' + '\\f' )", 999, +( '\f' +'999'+'\f' ) ); + +new TestCase( SECTION, "+( String.fromCharCode(0x0009) + '99' )", 99, +( String.fromCharCode(0x0009) + '99' ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x0020) + '99' )", 99, +( String.fromCharCode(0x0020) + '99' ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000C) + '99' )", 99, +( String.fromCharCode(0x000C) + '99' ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000B) + '99' )", 99, +( String.fromCharCode(0x000B) + '99' ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000D) + '99' )", 99, +( String.fromCharCode(0x000D) + '99' ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000A) + '99' )", 99, +( String.fromCharCode(0x000A) + '99' ) ); + +new TestCase( SECTION, "+( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x0020) + '99' + String.fromCharCode(0x0020)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000C) + '99' + String.fromCharCode(0x000C)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000D) + '99' + String.fromCharCode(0x000D)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000B) + '99' + String.fromCharCode(0x000B)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000A) + '99' + String.fromCharCode(0x000A)", 99, +( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "+( '99' + String.fromCharCode(0x0009)", 99, +( '99' + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "+( '99' + String.fromCharCode(0x0020)", 99, +( '99' + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000C)", 99, +( '99' + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000D)", 99, +( '99' + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000B)", 99, +( '99' + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "+( '99' + String.fromCharCode(0x000A)", 99, +( '99' + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "+( String.fromCharCode(0x0009) + 99 )", 99, +( String.fromCharCode(0x0009) + 99 ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x0020) + 99 )", 99, +( String.fromCharCode(0x0020) + 99 ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000C) + 99 )", 99, +( String.fromCharCode(0x000C) + 99 ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000B) + 99 )", 99, +( String.fromCharCode(0x000B) + 99 ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000D) + 99 )", 99, +( String.fromCharCode(0x000D) + 99 ) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000A) + 99 )", 99, +( String.fromCharCode(0x000A) + 99 ) ); + +new TestCase( SECTION, "+( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x0020) + 99 + String.fromCharCode(0x0020)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000C) + 99 + String.fromCharCode(0x000C)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000D) + 99 + String.fromCharCode(0x000D)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000B) + 99 + String.fromCharCode(0x000B)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "+( String.fromCharCode(0x000A) + 99 + String.fromCharCode(0x000A)", 99, +( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "+( 99 + String.fromCharCode(0x0009)", 99, +( 99 + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "+( 99 + String.fromCharCode(0x0020)", 99, +( 99 + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000C)", 99, +( 99 + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000D)", 99, +( 99 + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000B)", 99, +( 99 + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "+( 99 + String.fromCharCode(0x000A)", 99, +( 99 + String.fromCharCode(0x000A)) ); + + +// StrNumericLiteral:::StrDecimalLiteral:::Infinity + +new TestCase( SECTION, "+('Infinity')", Math.pow(10,10000), +("Infinity") ); +new TestCase( SECTION, "+('-Infinity')", -Math.pow(10,10000), +("-Infinity") ); +new TestCase( SECTION, "+('+Infinity')", Math.pow(10,10000), +("+Infinity") ); + +// StrNumericLiteral::: StrDecimalLiteral ::: DecimalDigits . DecimalDigits opt ExponentPart opt + +new TestCase( SECTION, "+('0')", 0, +("0") ); +new TestCase( SECTION, "+('-0')", -0, +("-0") ); +new TestCase( SECTION, "+('+0')", 0, +("+0") ); + +new TestCase( SECTION, "+('1')", 1, +("1") ); +new TestCase( SECTION, "+('-1')", -1, +("-1") ); +new TestCase( SECTION, "+('+1')", 1, +("+1") ); + +new TestCase( SECTION, "+('2')", 2, +("2") ); +new TestCase( SECTION, "+('-2')", -2, +("-2") ); +new TestCase( SECTION, "+('+2')", 2, +("+2") ); + +new TestCase( SECTION, "+('3')", 3, +("3") ); +new TestCase( SECTION, "+('-3')", -3, +("-3") ); +new TestCase( SECTION, "+('+3')", 3, +("+3") ); + +new TestCase( SECTION, "+('4')", 4, +("4") ); +new TestCase( SECTION, "+('-4')", -4, +("-4") ); +new TestCase( SECTION, "+('+4')", 4, +("+4") ); + +new TestCase( SECTION, "+('5')", 5, +("5") ); +new TestCase( SECTION, "+('-5')", -5, +("-5") ); +new TestCase( SECTION, "+('+5')", 5, +("+5") ); + +new TestCase( SECTION, "+('6')", 6, +("6") ); +new TestCase( SECTION, "+('-6')", -6, +("-6") ); +new TestCase( SECTION, "+('+6')", 6, +("+6") ); + +new TestCase( SECTION, "+('7')", 7, +("7") ); +new TestCase( SECTION, "+('-7')", -7, +("-7") ); +new TestCase( SECTION, "+('+7')", 7, +("+7") ); + +new TestCase( SECTION, "+('8')", 8, +("8") ); +new TestCase( SECTION, "+('-8')", -8, +("-8") ); +new TestCase( SECTION, "+('+8')", 8, +("+8") ); + +new TestCase( SECTION, "+('9')", 9, +("9") ); +new TestCase( SECTION, "+('-9')", -9, +("-9") ); +new TestCase( SECTION, "+('+9')", 9, +("+9") ); + +new TestCase( SECTION, "+('3.14159')", 3.14159, +("3.14159") ); +new TestCase( SECTION, "+('-3.14159')", -3.14159, +("-3.14159") ); +new TestCase( SECTION, "+('+3.14159')", 3.14159, +("+3.14159") ); + +new TestCase( SECTION, "+('3.')", 3, +("3.") ); +new TestCase( SECTION, "+('-3.')", -3, +("-3.") ); +new TestCase( SECTION, "+('+3.')", 3, +("+3.") ); + +new TestCase( SECTION, "+('3.e1')", 30, +("3.e1") ); +new TestCase( SECTION, "+('-3.e1')", -30, +("-3.e1") ); +new TestCase( SECTION, "+('+3.e1')", 30, +("+3.e1") ); + +new TestCase( SECTION, "+('3.e+1')", 30, +("3.e+1") ); +new TestCase( SECTION, "+('-3.e+1')", -30, +("-3.e+1") ); +new TestCase( SECTION, "+('+3.e+1')", 30, +("+3.e+1") ); + +new TestCase( SECTION, "+('3.e-1')", .30, +("3.e-1") ); +new TestCase( SECTION, "+('-3.e-1')", -.30, +("-3.e-1") ); +new TestCase( SECTION, "+('+3.e-1')", .30, +("+3.e-1") ); + +// StrDecimalLiteral::: .DecimalDigits ExponentPart opt + +new TestCase( SECTION, "+('.00001')", 0.00001, +(".00001") ); +new TestCase( SECTION, "+('+.00001')", 0.00001, +("+.00001") ); +new TestCase( SECTION, "+('-0.0001')", -0.00001, +("-.00001") ); + +new TestCase( SECTION, "+('.01e2')", 1, +(".01e2") ); +new TestCase( SECTION, "+('+.01e2')", 1, +("+.01e2") ); +new TestCase( SECTION, "+('-.01e2')", -1, +("-.01e2") ); + +new TestCase( SECTION, "+('.01e+2')", 1, +(".01e+2") ); +new TestCase( SECTION, "+('+.01e+2')", 1, +("+.01e+2") ); +new TestCase( SECTION, "+('-.01e+2')", -1, +("-.01e+2") ); + +new TestCase( SECTION, "+('.01e-2')", 0.0001, +(".01e-2") ); +new TestCase( SECTION, "+('+.01e-2')", 0.0001, +("+.01e-2") ); +new TestCase( SECTION, "+('-.01e-2')", -0.0001, +("-.01e-2") ); + +// StrDecimalLiteral::: DecimalDigits ExponentPart opt + +new TestCase( SECTION, "+('1234e5')", 123400000, +("1234e5") ); +new TestCase( SECTION, "+('+1234e5')", 123400000, +("+1234e5") ); +new TestCase( SECTION, "+('-1234e5')", -123400000, +("-1234e5") ); + +new TestCase( SECTION, "+('1234e+5')", 123400000, +("1234e+5") ); +new TestCase( SECTION, "+('+1234e+5')", 123400000, +("+1234e+5") ); +new TestCase( SECTION, "+('-1234e+5')", -123400000, +("-1234e+5") ); + +new TestCase( SECTION, "+('1234e-5')", 0.01234, +("1234e-5") ); +new TestCase( SECTION, "+('+1234e-5')", 0.01234, +("+1234e-5") ); +new TestCase( SECTION, "+('-1234e-5')", -0.01234, +("-1234e-5") ); + +// StrNumericLiteral::: HexIntegerLiteral + +new TestCase( SECTION, "+('0x0')", 0, +("0x0")); +new TestCase( SECTION, "+('0x1')", 1, +("0x1")); +new TestCase( SECTION, "+('0x2')", 2, +("0x2")); +new TestCase( SECTION, "+('0x3')", 3, +("0x3")); +new TestCase( SECTION, "+('0x4')", 4, +("0x4")); +new TestCase( SECTION, "+('0x5')", 5, +("0x5")); +new TestCase( SECTION, "+('0x6')", 6, +("0x6")); +new TestCase( SECTION, "+('0x7')", 7, +("0x7")); +new TestCase( SECTION, "+('0x8')", 8, +("0x8")); +new TestCase( SECTION, "+('0x9')", 9, +("0x9")); +new TestCase( SECTION, "+('0xa')", 10, +("0xa")); +new TestCase( SECTION, "+('0xb')", 11, +("0xb")); +new TestCase( SECTION, "+('0xc')", 12, +("0xc")); +new TestCase( SECTION, "+('0xd')", 13, +("0xd")); +new TestCase( SECTION, "+('0xe')", 14, +("0xe")); +new TestCase( SECTION, "+('0xf')", 15, +("0xf")); +new TestCase( SECTION, "+('0xA')", 10, +("0xA")); +new TestCase( SECTION, "+('0xB')", 11, +("0xB")); +new TestCase( SECTION, "+('0xC')", 12, +("0xC")); +new TestCase( SECTION, "+('0xD')", 13, +("0xD")); +new TestCase( SECTION, "+('0xE')", 14, +("0xE")); +new TestCase( SECTION, "+('0xF')", 15, +("0xF")); + +new TestCase( SECTION, "+('0X0')", 0, +("0X0")); +new TestCase( SECTION, "+('0X1')", 1, +("0X1")); +new TestCase( SECTION, "+('0X2')", 2, +("0X2")); +new TestCase( SECTION, "+('0X3')", 3, +("0X3")); +new TestCase( SECTION, "+('0X4')", 4, +("0X4")); +new TestCase( SECTION, "+('0X5')", 5, +("0X5")); +new TestCase( SECTION, "+('0X6')", 6, +("0X6")); +new TestCase( SECTION, "+('0X7')", 7, +("0X7")); +new TestCase( SECTION, "+('0X8')", 8, +("0X8")); +new TestCase( SECTION, "+('0X9')", 9, +("0X9")); +new TestCase( SECTION, "+('0Xa')", 10, +("0Xa")); +new TestCase( SECTION, "+('0Xb')", 11, +("0Xb")); +new TestCase( SECTION, "+('0Xc')", 12, +("0Xc")); +new TestCase( SECTION, "+('0Xd')", 13, +("0Xd")); +new TestCase( SECTION, "+('0Xe')", 14, +("0Xe")); +new TestCase( SECTION, "+('0Xf')", 15, +("0Xf")); +new TestCase( SECTION, "+('0XA')", 10, +("0XA")); +new TestCase( SECTION, "+('0XB')", 11, +("0XB")); +new TestCase( SECTION, "+('0XC')", 12, +("0XC")); +new TestCase( SECTION, "+('0XD')", 13, +("0XD")); +new TestCase( SECTION, "+('0XE')", 14, +("0XE")); +new TestCase( SECTION, "+('0XF')", 15, +("0XF")); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.7-01.js b/source/spidermonkey-tests/ecma/Expressions/11.4.7-01.js new file mode 100644 index 00000000..28e996ff --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.7-01.js @@ -0,0 +1,265 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.7-01.js + ECMA Section: 11.4.7 Unary - Operator + Description: convert operand to Number type and change sign + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "11.4.7"; +var VERSION = "ECMA_1"; +var BUGNUMBER="77391"; + +startTest(); + +writeHeaderToLog( SECTION + " Unary + operator"); + +new TestCase( SECTION, "-('')", -0, -("") ); +new TestCase( SECTION, "-(' ')", -0, -(" ") ); +new TestCase( SECTION, "-(\\t)", -0, -("\t") ); +new TestCase( SECTION, "-(\\n)", -0, -("\n") ); +new TestCase( SECTION, "-(\\r)", -0, -("\r") ); +new TestCase( SECTION, "-(\\f)", -0, -("\f") ); + +new TestCase( SECTION, "-(String.fromCharCode(0x0009)", -0, -(String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "-(String.fromCharCode(0x0020)", -0, -(String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "-(String.fromCharCode(0x000C)", -0, -(String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "-(String.fromCharCode(0x000B)", -0, -(String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "-(String.fromCharCode(0x000D)", -0, -(String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "-(String.fromCharCode(0x000A)", -0, -(String.fromCharCode(0x000A)) ); + +// a StringNumericLiteral may be preceeded or followed by whitespace and/or +// line terminators + +new TestCase( SECTION, "-( ' ' + 999 )", -999, -( ' '+999) ); +new TestCase( SECTION, "-( '\\n' + 999 )", -999, -( '\n' +999) ); +new TestCase( SECTION, "-( '\\r' + 999 )", -999, -( '\r' +999) ); +new TestCase( SECTION, "-( '\\t' + 999 )", -999, -( '\t' +999) ); +new TestCase( SECTION, "-( '\\f' + 999 )", -999, -( '\f' +999) ); + +new TestCase( SECTION, "-( 999 + ' ' )", -999, -( 999+' ') ); +new TestCase( SECTION, "-( 999 + '\\n' )", -999, -( 999+'\n' ) ); +new TestCase( SECTION, "-( 999 + '\\r' )", -999, -( 999+'\r' ) ); +new TestCase( SECTION, "-( 999 + '\\t' )", -999, -( 999+'\t' ) ); +new TestCase( SECTION, "-( 999 + '\\f' )", -999, -( 999+'\f' ) ); + +new TestCase( SECTION, "-( '\\n' + 999 + '\\n' )", -999, -( '\n' +999+'\n' ) ); +new TestCase( SECTION, "-( '\\r' + 999 + '\\r' )", -999, -( '\r' +999+'\r' ) ); +new TestCase( SECTION, "-( '\\t' + 999 + '\\t' )", -999, -( '\t' +999+'\t' ) ); +new TestCase( SECTION, "-( '\\f' + 999 + '\\f' )", -999, -( '\f' +999+'\f' ) ); + +new TestCase( SECTION, "-( ' ' + '999' )", -999, -( ' '+'999') ); +new TestCase( SECTION, "-( '\\n' + '999' )", -999, -( '\n' +'999') ); +new TestCase( SECTION, "-( '\\r' + '999' )", -999, -( '\r' +'999') ); +new TestCase( SECTION, "-( '\\t' + '999' )", -999, -( '\t' +'999') ); +new TestCase( SECTION, "-( '\\f' + '999' )", -999, -( '\f' +'999') ); + +new TestCase( SECTION, "-( '999' + ' ' )", -999, -( '999'+' ') ); +new TestCase( SECTION, "-( '999' + '\\n' )", -999, -( '999'+'\n' ) ); +new TestCase( SECTION, "-( '999' + '\\r' )", -999, -( '999'+'\r' ) ); +new TestCase( SECTION, "-( '999' + '\\t' )", -999, -( '999'+'\t' ) ); +new TestCase( SECTION, "-( '999' + '\\f' )", -999, -( '999'+'\f' ) ); + +new TestCase( SECTION, "-( '\\n' + '999' + '\\n' )", -999, -( '\n' +'999'+'\n' ) ); +new TestCase( SECTION, "-( '\\r' + '999' + '\\r' )", -999, -( '\r' +'999'+'\r' ) ); +new TestCase( SECTION, "-( '\\t' + '999' + '\\t' )", -999, -( '\t' +'999'+'\t' ) ); +new TestCase( SECTION, "-( '\\f' + '999' + '\\f' )", -999, -( '\f' +'999'+'\f' ) ); + +new TestCase( SECTION, "-( String.fromCharCode(0x0009) + '99' )", -99, -( String.fromCharCode(0x0009) + '99' ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x0020) + '99' )", -99, -( String.fromCharCode(0x0020) + '99' ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000C) + '99' )", -99, -( String.fromCharCode(0x000C) + '99' ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000B) + '99' )", -99, -( String.fromCharCode(0x000B) + '99' ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000D) + '99' )", -99, -( String.fromCharCode(0x000D) + '99' ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000A) + '99' )", -99, -( String.fromCharCode(0x000A) + '99' ) ); + +new TestCase( SECTION, "-( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x0020) + '99' + String.fromCharCode(0x0020)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000C) + '99' + String.fromCharCode(0x000C)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000D) + '99' + String.fromCharCode(0x000D)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000B) + '99' + String.fromCharCode(0x000B)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000A) + '99' + String.fromCharCode(0x000A)", -99, -( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "-( '99' + String.fromCharCode(0x0009)", -99, -( '99' + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "-( '99' + String.fromCharCode(0x0020)", -99, -( '99' + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000C)", -99, -( '99' + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000D)", -99, -( '99' + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000B)", -99, -( '99' + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "-( '99' + String.fromCharCode(0x000A)", -99, -( '99' + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "-( String.fromCharCode(0x0009) + 99 )", -99, -( String.fromCharCode(0x0009) + 99 ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x0020) + 99 )", -99, -( String.fromCharCode(0x0020) + 99 ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000C) + 99 )", -99, -( String.fromCharCode(0x000C) + 99 ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000B) + 99 )", -99, -( String.fromCharCode(0x000B) + 99 ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000D) + 99 )", -99, -( String.fromCharCode(0x000D) + 99 ) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000A) + 99 )", -99, -( String.fromCharCode(0x000A) + 99 ) ); + +new TestCase( SECTION, "-( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x0020) + 99 + String.fromCharCode(0x0020)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000C) + 99 + String.fromCharCode(0x000C)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000D) + 99 + String.fromCharCode(0x000D)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000B) + 99 + String.fromCharCode(0x000B)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "-( String.fromCharCode(0x000A) + 99 + String.fromCharCode(0x000A)", -99, -( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "-( 99 + String.fromCharCode(0x0009)", -99, -( 99 + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "-( 99 + String.fromCharCode(0x0020)", -99, -( 99 + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000C)", -99, -( 99 + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000D)", -99, -( 99 + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000B)", -99, -( 99 + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "-( 99 + String.fromCharCode(0x000A)", -99, -( 99 + String.fromCharCode(0x000A)) ); + + +// StrNumericLiteral:::StrDecimalLiteral:::Infinity + +new TestCase( SECTION, "-('Infinity')", -Math.pow(10,10000), -("Infinity") ); +new TestCase( SECTION, "-('-Infinity')", +Math.pow(10,10000), -("-Infinity") ); +new TestCase( SECTION, "-('+Infinity')", -Math.pow(10,10000), -("+Infinity") ); + +// StrNumericLiteral::: StrDecimalLiteral ::: DecimalDigits . DecimalDigits opt ExponentPart opt + +new TestCase( SECTION, "-('0')", -0, -("0") ); +new TestCase( SECTION, "-('-0')", +0, -("-0") ); +new TestCase( SECTION, "-('+0')", -0, -("+0") ); + +new TestCase( SECTION, "-('1')", -1, -("1") ); +new TestCase( SECTION, "-('-1')", +1, -("-1") ); +new TestCase( SECTION, "-('+1')", -1, -("+1") ); + +new TestCase( SECTION, "-('2')", -2, -("2") ); +new TestCase( SECTION, "-('-2')", +2, -("-2") ); +new TestCase( SECTION, "-('+2')", -2, -("+2") ); + +new TestCase( SECTION, "-('3')", -3, -("3") ); +new TestCase( SECTION, "-('-3')", +3, -("-3") ); +new TestCase( SECTION, "-('+3')", -3, -("+3") ); + +new TestCase( SECTION, "-('4')", -4, -("4") ); +new TestCase( SECTION, "-('-4')", +4, -("-4") ); +new TestCase( SECTION, "-('+4')", -4, -("+4") ); + +new TestCase( SECTION, "-('5')", -5, -("5") ); +new TestCase( SECTION, "-('-5')", +5, -("-5") ); +new TestCase( SECTION, "-('+5')", -5, -("+5") ); + +new TestCase( SECTION, "-('6')", -6, -("6") ); +new TestCase( SECTION, "-('-6')", +6, -("-6") ); +new TestCase( SECTION, "-('+6')", -6, -("+6") ); + +new TestCase( SECTION, "-('7')", -7, -("7") ); +new TestCase( SECTION, "-('-7')", +7, -("-7") ); +new TestCase( SECTION, "-('+7')", -7, -("+7") ); + +new TestCase( SECTION, "-('8')", -8, -("8") ); +new TestCase( SECTION, "-('-8')", +8, -("-8") ); +new TestCase( SECTION, "-('+8')", -8, -("+8") ); + +new TestCase( SECTION, "-('9')", -9, -("9") ); +new TestCase( SECTION, "-('-9')", +9, -("-9") ); +new TestCase( SECTION, "-('+9')", -9, -("+9") ); + +new TestCase( SECTION, "-('3.14159')", -3.14159, -("3.14159") ); +new TestCase( SECTION, "-('-3.14159')", +3.14159, -("-3.14159") ); +new TestCase( SECTION, "-('+3.14159')", -3.14159, -("+3.14159") ); + +new TestCase( SECTION, "-('3.')", -3, -("3.") ); +new TestCase( SECTION, "-('-3.')", +3, -("-3.") ); +new TestCase( SECTION, "-('+3.')", -3, -("+3.") ); + +new TestCase( SECTION, "-('3.e1')", -30, -("3.e1") ); +new TestCase( SECTION, "-('-3.e1')", +30, -("-3.e1") ); +new TestCase( SECTION, "-('+3.e1')", -30, -("+3.e1") ); + +new TestCase( SECTION, "-('3.e+1')", -30, -("3.e+1") ); +new TestCase( SECTION, "-('-3.e+1')", +30, -("-3.e+1") ); +new TestCase( SECTION, "-('+3.e+1')", -30, -("+3.e+1") ); + +new TestCase( SECTION, "-('3.e-1')", -.30, -("3.e-1") ); +new TestCase( SECTION, "-('-3.e-1')", +.30, -("-3.e-1") ); +new TestCase( SECTION, "-('+3.e-1')", -.30, -("+3.e-1") ); + +// StrDecimalLiteral::: .DecimalDigits ExponentPart opt + +new TestCase( SECTION, "-('.00001')", -0.00001, -(".00001") ); +new TestCase( SECTION, "-('+.00001')", -0.00001, -("+.00001") ); +new TestCase( SECTION, "-('-0.0001')", +0.00001, -("-.00001") ); + +new TestCase( SECTION, "-('.01e2')", -1, -(".01e2") ); +new TestCase( SECTION, "-('+.01e2')", -1, -("+.01e2") ); +new TestCase( SECTION, "-('-.01e2')", +1, -("-.01e2") ); + +new TestCase( SECTION, "-('.01e+2')", -1, -(".01e+2") ); +new TestCase( SECTION, "-('+.01e+2')", -1, -("+.01e+2") ); +new TestCase( SECTION, "-('-.01e+2')", +1, -("-.01e+2") ); + +new TestCase( SECTION, "-('.01e-2')", -0.0001, -(".01e-2") ); +new TestCase( SECTION, "-('+.01e-2')", -0.0001, -("+.01e-2") ); +new TestCase( SECTION, "-('-.01e-2')", +0.0001, -("-.01e-2") ); + +// StrDecimalLiteral::: DecimalDigits ExponentPart opt + +new TestCase( SECTION, "-('1234e5')", -123400000, -("1234e5") ); +new TestCase( SECTION, "-('+1234e5')", -123400000, -("+1234e5") ); +new TestCase( SECTION, "-('-1234e5')", +123400000, -("-1234e5") ); + +new TestCase( SECTION, "-('1234e+5')", -123400000, -("1234e+5") ); +new TestCase( SECTION, "-('+1234e+5')", -123400000, -("+1234e+5") ); +new TestCase( SECTION, "-('-1234e+5')", +123400000, -("-1234e+5") ); + +new TestCase( SECTION, "-('1234e-5')", -0.01234, -("1234e-5") ); +new TestCase( SECTION, "-('+1234e-5')", -0.01234, -("+1234e-5") ); +new TestCase( SECTION, "-('-1234e-5')", +0.01234, -("-1234e-5") ); + +// StrNumericLiteral::: HexIntegerLiteral + +new TestCase( SECTION, "-('0x0')", -0, -("0x0")); +new TestCase( SECTION, "-('0x1')", -1, -("0x1")); +new TestCase( SECTION, "-('0x2')", -2, -("0x2")); +new TestCase( SECTION, "-('0x3')", -3, -("0x3")); +new TestCase( SECTION, "-('0x4')", -4, -("0x4")); +new TestCase( SECTION, "-('0x5')", -5, -("0x5")); +new TestCase( SECTION, "-('0x6')", -6, -("0x6")); +new TestCase( SECTION, "-('0x7')", -7, -("0x7")); +new TestCase( SECTION, "-('0x8')", -8, -("0x8")); +new TestCase( SECTION, "-('0x9')", -9, -("0x9")); +new TestCase( SECTION, "-('0xa')", -10, -("0xa")); +new TestCase( SECTION, "-('0xb')", -11, -("0xb")); +new TestCase( SECTION, "-('0xc')", -12, -("0xc")); +new TestCase( SECTION, "-('0xd')", -13, -("0xd")); +new TestCase( SECTION, "-('0xe')", -14, -("0xe")); +new TestCase( SECTION, "-('0xf')", -15, -("0xf")); +new TestCase( SECTION, "-('0xA')", -10, -("0xA")); +new TestCase( SECTION, "-('0xB')", -11, -("0xB")); +new TestCase( SECTION, "-('0xC')", -12, -("0xC")); +new TestCase( SECTION, "-('0xD')", -13, -("0xD")); +new TestCase( SECTION, "-('0xE')", -14, -("0xE")); +new TestCase( SECTION, "-('0xF')", -15, -("0xF")); + +new TestCase( SECTION, "-('0X0')", -0, -("0X0")); +new TestCase( SECTION, "-('0X1')", -1, -("0X1")); +new TestCase( SECTION, "-('0X2')", -2, -("0X2")); +new TestCase( SECTION, "-('0X3')", -3, -("0X3")); +new TestCase( SECTION, "-('0X4')", -4, -("0X4")); +new TestCase( SECTION, "-('0X5')", -5, -("0X5")); +new TestCase( SECTION, "-('0X6')", -6, -("0X6")); +new TestCase( SECTION, "-('0X7')", -7, -("0X7")); +new TestCase( SECTION, "-('0X8')", -8, -("0X8")); +new TestCase( SECTION, "-('0X9')", -9, -("0X9")); +new TestCase( SECTION, "-('0Xa')", -10, -("0Xa")); +new TestCase( SECTION, "-('0Xb')", -11, -("0Xb")); +new TestCase( SECTION, "-('0Xc')", -12, -("0Xc")); +new TestCase( SECTION, "-('0Xd')", -13, -("0Xd")); +new TestCase( SECTION, "-('0Xe')", -14, -("0Xe")); +new TestCase( SECTION, "-('0Xf')", -15, -("0Xf")); +new TestCase( SECTION, "-('0XA')", -10, -("0XA")); +new TestCase( SECTION, "-('0XB')", -11, -("0XB")); +new TestCase( SECTION, "-('0XC')", -12, -("0XC")); +new TestCase( SECTION, "-('0XD')", -13, -("0XD")); +new TestCase( SECTION, "-('0XE')", -14, -("0XE")); +new TestCase( SECTION, "-('0XF')", -15, -("0XF")); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.7-02.js b/source/spidermonkey-tests/ecma/Expressions/11.4.7-02.js new file mode 100644 index 00000000..1ff02053 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.7-02.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: 11.4.7-02.js + * Reference: https://bugzilla.mozilla.org/show_bug.cgi?id=432881 + * Description: ecma 11.4.7 + */ + +var SECTION = "11.4.7"; +var VERSION = "ECMA"; +var TITLE = "Unary - Operator"; +var BUGNUMBER = "432881"; + +startTest(); + +test_negation(0, -0.0); +test_negation(-0.0, 0); +test_negation(1, -1); +test_negation(1.0/0.0, -1.0/0.0); +test_negation(-1.0/0.0, 1.0/0.0); + +//1073741824 == (1 << 30) +test_negation(1073741824, -1073741824); +test_negation(-1073741824, 1073741824); + +//1073741824 == (1 << 30) - 1 +test_negation(1073741823, -1073741823); +test_negation(-1073741823, 1073741823); + +//1073741824 == (1 << 30) +test_negation(1073741824, -1073741824); +test_negation(-1073741824, 1073741824); + +//1073741824 == (1 << 30) - 1 +test_negation(1073741823, -1073741823); +test_negation(-1073741823, 1073741823); + +//2147483648 == (1 << 31) +test_negation(2147483648, -2147483648); +test_negation(-2147483648, 2147483648); + +//2147483648 == (1 << 31) - 1 +test_negation(2147483647, -2147483647); +test_negation(-2147483647, 2147483647); + +function test_negation(value, expected) +{ + var actual = -value; + reportCompare(expected, actual, '-(' + value + ') == ' + expected); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.8.js b/source/spidermonkey-tests/ecma/Expressions/11.4.8.js new file mode 100644 index 00000000..d80d8955 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.8.js @@ -0,0 +1,181 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.8.js + ECMA Section: 11.4.8 Bitwise NOT Operator + Description: flip bits up to 32 bits + no special cases + Author: christine@netscape.com + Date: 7 july 1997 + + Data File Fields: + VALUE value passed as an argument to the ~ operator + E_RESULT expected return value of ~ VALUE; + + Static variables: + none + +*/ + +var SECTION = "11.4.8"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Bitwise Not operator"); + +for ( var i = 0; i < 35; i++ ) { + var p = Math.pow(2,i); + + new TestCase( SECTION, "~"+p, Not(p), ~p ); + +} +for ( i = 0; i < 35; i++ ) { + var p = -Math.pow(2,i); + + new TestCase( SECTION, "~"+p, Not(p), ~p ); + +} + +test(); + +function ToInteger( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( n != n ) { + return 0; + } + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) { + return n; + } + return ( sign * Math.floor(Math.abs(n)) ); +} +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + + return ( n ); +} +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} +function ToUint16( n ) { + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16); + + if (n <0) { + n += Math.pow(2,16); + } + + return ( n ); +} +function Mask( b, n ) { + b = ToUint32BitString( b ); + b = b.substring( b.length - n ); + b = ToUint32Decimal( b ); + return ( b ); +} +function ToUint32BitString( n ) { + var b = ""; + for ( var p = 31; p >=0; p-- ) { + if ( n >= Math.pow(2,p) ) { + b += "1"; + n -= Math.pow(2,p); + } else { + b += "0"; + } + } + return b; +} +function ToInt32BitString( n ) { + var b = ""; + var sign = ( n < 0 ) ? -1 : 1; + + b += ( sign == 1 ) ? "0" : "1"; + + for ( var p = 30; p >=0; p-- ) { + if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) { + b += ( sign == 1 ) ? "1" : "0"; + n -= sign * Math.pow( 2, p ); + } else { + b += ( sign == 1 ) ? "0" : "1"; + } + } + + return b; +} +function ToInt32Decimal( bin ) { + var r = 0; + var sign; + + if ( Number(bin.charAt(0)) == 0 ) { + sign = 1; + r = 0; + } else { + sign = -1; + r = -(Math.pow(2,31)); + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function ToUint32Decimal( bin ) { + var r = 0; + + for ( var l = bin.length; l < 32; l++ ) { + bin = "0" + bin; + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function Not( n ) { + n = ToInt32(n); + n = ToInt32BitString(n); + + var r = ""; + + for( var l = 0; l < n.length; l++ ) { + r += ( n.charAt(l) == "0" ) ? "1" : "0"; + } + + n = ToInt32Decimal(r); + + return n; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.4.9.js b/source/spidermonkey-tests/ecma/Expressions/11.4.9.js new file mode 100644 index 00000000..58bb2657 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.4.9.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.4.9.js + ECMA Section: 11.4.9 Logical NOT Operator (!) + Description: if the ToBoolean( VALUE ) result is true, return + true. else return false. + Author: christine@netscape.com + Date: 7 july 1997 + + Static variables: + none +*/ +var SECTION = "11.4.9"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Logical NOT operator (!)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "!(null)", true, !(null) ); +new TestCase( SECTION, "!(var x)", true, !(eval("var x")) ); +new TestCase( SECTION, "!(void 0)", true, !(void 0) ); + +new TestCase( SECTION, "!(false)", true, !(false) ); +new TestCase( SECTION, "!(true)", false, !(true) ); +new TestCase( SECTION, "!()", true, !(eval()) ); +new TestCase( SECTION, "!(0)", true, !(0) ); +new TestCase( SECTION, "!(-0)", true, !(-0) ); +new TestCase( SECTION, "!(NaN)", true, !(Number.NaN) ); +new TestCase( SECTION, "!(Infinity)", false, !(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "!(-Infinity)", false, !(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "!(Math.PI)", false, !(Math.PI) ); +new TestCase( SECTION, "!(1)", false, !(1) ); +new TestCase( SECTION, "!(-1)", false, !(-1) ); +new TestCase( SECTION, "!('')", true, !("") ); +new TestCase( SECTION, "!('\t')", false, !("\t") ); +new TestCase( SECTION, "!('0')", false, !("0") ); +new TestCase( SECTION, "!('string')", false, !("string") ); +new TestCase( SECTION, "!(new String(''))", false, !(new String("")) ); +new TestCase( SECTION, "!(new String('string'))", false, !(new String("string")) ); +new TestCase( SECTION, "!(new String())", false, !(new String()) ); +new TestCase( SECTION, "!(new Boolean(true))", false, !(new Boolean(true)) ); +new TestCase( SECTION, "!(new Boolean(false))", false, !(new Boolean(false)) ); +new TestCase( SECTION, "!(new Array())", false, !(new Array()) ); +new TestCase( SECTION, "!(new Array(1,2,3)", false, !(new Array(1,2,3)) ); +new TestCase( SECTION, "!(new Number())", false, !(new Number()) ); +new TestCase( SECTION, "!(new Number(0))", false, !(new Number(0)) ); +new TestCase( SECTION, "!(new Number(NaN))", false, !(new Number(Number.NaN)) ); +new TestCase( SECTION, "!(new Number(Infinity))", false, !(new Number(Number.POSITIVE_INFINITY)) ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.5.1.js b/source/spidermonkey-tests/ecma/Expressions/11.5.1.js new file mode 100644 index 00000000..409147f0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.5.1.js @@ -0,0 +1,81 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.5.1.js + ECMA Section: 11.5.1 Applying the * operator + Description: + + 11.5.1 Applying the * operator + + The * operator performs multiplication, producing the product of its + operands. Multiplication is commutative. Multiplication is not always + associative in ECMAScript, because of finite precision. + + The result of a floating-point multiplication is governed by the rules + of IEEE 754 double-precision arithmetic: + + If either operand is NaN, the result is NaN. + The sign of the result is positive if both operands have the same sign, + negative if the operands have different signs. + Multiplication of an infinity by a zero results in NaN. + Multiplication of an infinity by an infinity results in an infinity. + The sign is determined by the rule already stated above. + Multiplication of an infinity by a finite non-zero value results in a + signed infinity. The sign is determined by the rule already stated above. + In the remaining cases, where neither an infinity or NaN is involved, the + product is computed and rounded to the nearest representable value using IEEE + 754 round-to-nearest mode. If the magnitude is too large to represent, + the result is then an infinity of appropriate sign. If the magnitude is + oo small to represent, the result is then a zero + of appropriate sign. The ECMAScript language requires support of gradual + underflow as defined by IEEE 754. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.5.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Applying the * operator"); + +new TestCase( SECTION, "Number.NaN * Number.NaN", Number.NaN, Number.NaN * Number.NaN ); +new TestCase( SECTION, "Number.NaN * 1", Number.NaN, Number.NaN * 1 ); +new TestCase( SECTION, "1 * Number.NaN", Number.NaN, 1 * Number.NaN ); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY * 0", Number.NaN, Number.POSITIVE_INFINITY * 0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY * 0", Number.NaN, Number.NEGATIVE_INFINITY * 0 ); +new TestCase( SECTION, "0 * Number.POSITIVE_INFINITY", Number.NaN, 0 * Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "0 * Number.NEGATIVE_INFINITY", Number.NaN, 0 * Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "-0 * Number.POSITIVE_INFINITY", Number.NaN, -0 * Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-0 * Number.NEGATIVE_INFINITY", Number.NaN, -0 * Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY * -0", Number.NaN, Number.POSITIVE_INFINITY * -0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY * -0", Number.NaN, Number.NEGATIVE_INFINITY * -0 ); + +new TestCase( SECTION, "0 * -0", -0, 0 * -0 ); +new TestCase( SECTION, "-0 * 0", -0, -0 * 0 ); +new TestCase( SECTION, "-0 * -0", 0, -0 * -0 ); +new TestCase( SECTION, "0 * 0", 0, 0 * 0 ); + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY * Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY * Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY * Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY * Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY * Number.POSITIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY * Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY * Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY * Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY * 1 ", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY * 1 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY * -1 ", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY * -1 ); +new TestCase( SECTION, "1 * Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY, 1 * Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "-1 * Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY, -1 * Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY * 1 ", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY * 1 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY * -1 ", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY * -1 ); +new TestCase( SECTION, "1 * Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY, 1 * Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-1 * Number.POSITIVE_INFINITY", Number.NEGATIVE_INFINITY, -1 * Number.POSITIVE_INFINITY ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.5.2.js b/source/spidermonkey-tests/ecma/Expressions/11.5.2.js new file mode 100644 index 00000000..9e5a37f3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.5.2.js @@ -0,0 +1,120 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.5.2.js + ECMA Section: 11.5.2 Applying the / operator + Description: + + The / operator performs division, producing the quotient of its operands. + The left operand is the dividend and the right operand is the divisor. + ECMAScript does not perform integer division. The operands and result of all + division operations are double-precision floating-point numbers. + The result of division is determined by the specification of IEEE 754 arithmetic: + + If either operand is NaN, the result is NaN. + The sign of the result is positive if both operands have the same sign, negative if the operands have different + signs. + Division of an infinity by an infinity results in NaN. + Division of an infinity by a zero results in an infinity. The sign is determined by the rule already stated above. + Division of an infinity by a non-zero finite value results in a signed infinity. The sign is determined by the rule + already stated above. + Division of a finite value by an infinity results in zero. The sign is determined by the rule already stated above. + Division of a zero by a zero results in NaN; division of zero by any other finite value results in zero, with the sign + determined by the rule already stated above. + Division of a non-zero finite value by a zero results in a signed infinity. The sign is determined by the rule + already stated above. + In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved, the quotient is computed and + rounded to the nearest representable value using IEEE 754 round-to-nearest mode. If the magnitude is too + large to represent, we say the operation overflows; the result is then an infinity of appropriate sign. If the + magnitude is too small to represent, we say the operation underflows and the result is a zero of the appropriate + sign. The ECMAScript language requires support of gradual underflow as defined by IEEE 754. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.5.2"; +var VERSION = "ECMA_1"; +var BUGNUMBER="111202"; +startTest(); + +writeHeaderToLog( SECTION + " Applying the / operator"); + +// if either operand is NaN, the result is NaN. + +new TestCase( SECTION, "Number.NaN / Number.NaN", Number.NaN, Number.NaN / Number.NaN ); +new TestCase( SECTION, "Number.NaN / 1", Number.NaN, Number.NaN / 1 ); +new TestCase( SECTION, "1 / Number.NaN", Number.NaN, 1 / Number.NaN ); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.NaN", Number.NaN, Number.POSITIVE_INFINITY / Number.NaN ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.NaN", Number.NaN, Number.NEGATIVE_INFINITY / Number.NaN ); + +// Division of an infinity by an infinity results in NaN. + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY / Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY / Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY / Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY / Number.POSITIVE_INFINITY ); + +// Division of an infinity by a zero results in an infinity. + +new TestCase( SECTION, "Number.POSITIVE_INFINITY / 0", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY / 0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / 0", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY / 0 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY / -0", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY / -0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / -0", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY / -0 ); + +// Division of an infinity by a non-zero finite value results in a signed infinity. + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / 1 ", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY / 1 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / -1 ", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY / -1 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY / 1 ", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY / 1 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY / -1 ", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY / -1 ); + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / Number.MAX_VALUE ", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY / Number.MAX_VALUE ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY / -Number.MAX_VALUE ", Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY / -Number.MAX_VALUE ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY / Number.MAX_VALUE ", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY / Number.MAX_VALUE ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY / -Number.MAX_VALUE ", Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY / -Number.MAX_VALUE ); + +// Division of a finite value by an infinity results in zero. + +new TestCase( SECTION, "1 / Number.NEGATIVE_INFINITY", -0, 1 / Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "1 / Number.POSITIVE_INFINITY", 0, 1 / Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-1 / Number.POSITIVE_INFINITY", -0, -1 / Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-1 / Number.NEGATIVE_INFINITY", 0, -1 / Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "Number.MAX_VALUE / Number.NEGATIVE_INFINITY", -0, Number.MAX_VALUE / Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE / Number.POSITIVE_INFINITY", 0, Number.MAX_VALUE / Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-Number.MAX_VALUE / Number.POSITIVE_INFINITY", -0, -Number.MAX_VALUE / Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-Number.MAX_VALUE / Number.NEGATIVE_INFINITY", 0, -Number.MAX_VALUE / Number.NEGATIVE_INFINITY ); + +// Division of a zero by a zero results in NaN + +new TestCase( SECTION, "0 / -0", Number.NaN, 0 / -0 ); +new TestCase( SECTION, "-0 / 0", Number.NaN, -0 / 0 ); +new TestCase( SECTION, "-0 / -0", Number.NaN, -0 / -0 ); +new TestCase( SECTION, "0 / 0", Number.NaN, 0 / 0 ); + +// division of zero by any other finite value results in zero + +new TestCase( SECTION, "0 / 1", 0, 0 / 1 ); +new TestCase( SECTION, "0 / -1", -0, 0 / -1 ); +new TestCase( SECTION, "-0 / 1", -0, -0 / 1 ); +new TestCase( SECTION, "-0 / -1", 0, -0 / -1 ); + +// Division of a non-zero finite value by a zero results in a signed infinity. + +new TestCase( SECTION, "1 / 0", Number.POSITIVE_INFINITY, 1/0 ); +new TestCase( SECTION, "1 / -0", Number.NEGATIVE_INFINITY, 1/-0 ); +new TestCase( SECTION, "-1 / 0", Number.NEGATIVE_INFINITY, -1/0 ); +new TestCase( SECTION, "-1 / -0", Number.POSITIVE_INFINITY, -1/-0 ); + +new TestCase( SECTION, "0 / Number.POSITIVE_INFINITY", 0, 0 / Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "0 / Number.NEGATIVE_INFINITY", -0, 0 / Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "-0 / Number.POSITIVE_INFINITY", -0, -0 / Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-0 / Number.NEGATIVE_INFINITY", 0, -0 / Number.NEGATIVE_INFINITY ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.5.3.js b/source/spidermonkey-tests/ecma/Expressions/11.5.3.js new file mode 100644 index 00000000..1bbf94ef --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.5.3.js @@ -0,0 +1,127 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.5.3.js + ECMA Section: 11.5.3 Applying the % operator + Description: + + The binary % operator is said to yield the remainder of its operands from + an implied division; the left operand is the dividend and the right operand + is the divisor. In C and C++, the remainder operator accepts only integral + operands, but in ECMAScript, it also accepts floating-point operands. + + The result of a floating-point remainder operation as computed by the % + operator is not the same as the "remainder" operation defined by IEEE 754. + The IEEE 754 "remainder" operation computes the remainder from a rounding + division, not a truncating division, and so its behavior is not analogous + to that of the usual integer remainder operator. Instead the ECMAScript + language defines % on floating-point operations to behave in a manner + analogous to that of the Java integer remainder operator; this may be + compared with the C library function fmod. + + The result of a ECMAScript floating-point remainder operation is determined by the rules of IEEE arithmetic: + + If either operand is NaN, the result is NaN. + The sign of the result equals the sign of the dividend. + If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. + If the dividend is finite and the divisor is an infinity, the result equals the dividend. + If the dividend is a zero and the divisor is finite, the result is the same as the dividend. + In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved, the floating-point remainder r + from a dividend n and a divisor d is defined by the mathematical relation r = n (d * q) where q is an integer that + is negative only if n/d is negative and positive only if n/d is positive, and whose magnitude is as large as + possible without exceeding the magnitude of the true mathematical quotient of n and d. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.5.3"; +var VERSION = "ECMA_1"; +var BUGNUMBER="111202"; +startTest(); + + +writeHeaderToLog( SECTION + " Applying the % operator"); + +// if either operand is NaN, the result is NaN. + +new TestCase( SECTION, "Number.NaN % Number.NaN", Number.NaN, Number.NaN % Number.NaN ); +new TestCase( SECTION, "Number.NaN % 1", Number.NaN, Number.NaN % 1 ); +new TestCase( SECTION, "1 % Number.NaN", Number.NaN, 1 % Number.NaN ); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.NaN", Number.NaN, Number.POSITIVE_INFINITY % Number.NaN ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.NaN", Number.NaN, Number.NEGATIVE_INFINITY % Number.NaN ); + +// If the dividend is an infinity, or the divisor is a zero, or both, the result is NaN. +// dividend is an infinity + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.NEGATIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY % Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.NEGATIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY % Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.POSITIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY % Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.POSITIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY % Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY % 0", Number.NaN, Number.POSITIVE_INFINITY % 0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % 0", Number.NaN, Number.NEGATIVE_INFINITY % 0 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY % -0", Number.NaN, Number.POSITIVE_INFINITY % -0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % -0", Number.NaN, Number.NEGATIVE_INFINITY % -0 ); + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % 1 ", Number.NaN, Number.NEGATIVE_INFINITY % 1 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % -1 ", Number.NaN, Number.NEGATIVE_INFINITY % -1 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY % 1 ", Number.NaN, Number.POSITIVE_INFINITY % 1 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY % -1 ", Number.NaN, Number.POSITIVE_INFINITY % -1 ); + +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % Number.MAX_VALUE ", Number.NaN, Number.NEGATIVE_INFINITY % Number.MAX_VALUE ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY % -Number.MAX_VALUE ", Number.NaN, Number.NEGATIVE_INFINITY % -Number.MAX_VALUE ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY % Number.MAX_VALUE ", Number.NaN, Number.POSITIVE_INFINITY % Number.MAX_VALUE ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY % -Number.MAX_VALUE ", Number.NaN, Number.POSITIVE_INFINITY % -Number.MAX_VALUE ); + +// divisor is 0 +new TestCase( SECTION, "0 % -0", Number.NaN, 0 % -0 ); +new TestCase( SECTION, "-0 % 0", Number.NaN, -0 % 0 ); +new TestCase( SECTION, "-0 % -0", Number.NaN, -0 % -0 ); +new TestCase( SECTION, "0 % 0", Number.NaN, 0 % 0 ); + +new TestCase( SECTION, "1 % 0", Number.NaN, 1%0 ); +new TestCase( SECTION, "1 % -0", Number.NaN, 1%-0 ); +new TestCase( SECTION, "-1 % 0", Number.NaN, -1%0 ); +new TestCase( SECTION, "-1 % -0", Number.NaN, -1%-0 ); + +new TestCase( SECTION, "Number.MAX_VALUE % 0", Number.NaN, Number.MAX_VALUE%0 ); +new TestCase( SECTION, "Number.MAX_VALUE % -0", Number.NaN, Number.MAX_VALUE%-0 ); +new TestCase( SECTION, "-Number.MAX_VALUE % 0", Number.NaN, -Number.MAX_VALUE%0 ); +new TestCase( SECTION, "-Number.MAX_VALUE % -0", Number.NaN, -Number.MAX_VALUE%-0 ); + +// If the dividend is finite and the divisor is an infinity, the result equals the dividend. + +new TestCase( SECTION, "1 % Number.NEGATIVE_INFINITY", 1, 1 % Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "1 % Number.POSITIVE_INFINITY", 1, 1 % Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-1 % Number.POSITIVE_INFINITY", -1, -1 % Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-1 % Number.NEGATIVE_INFINITY", -1, -1 % Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "Number.MAX_VALUE % Number.NEGATIVE_INFINITY", Number.MAX_VALUE, Number.MAX_VALUE % Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE % Number.POSITIVE_INFINITY", Number.MAX_VALUE, Number.MAX_VALUE % Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-Number.MAX_VALUE % Number.POSITIVE_INFINITY", -Number.MAX_VALUE, -Number.MAX_VALUE % Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-Number.MAX_VALUE % Number.NEGATIVE_INFINITY", -Number.MAX_VALUE, -Number.MAX_VALUE % Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "0 % Number.POSITIVE_INFINITY", 0, 0 % Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "0 % Number.NEGATIVE_INFINITY", 0, 0 % Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "-0 % Number.POSITIVE_INFINITY", -0, -0 % Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "-0 % Number.NEGATIVE_INFINITY", -0, -0 % Number.NEGATIVE_INFINITY ); + +// If the dividend is a zero and the divisor is finite, the result is the same as the dividend. + +new TestCase( SECTION, "0 % 1", 0, 0 % 1 ); +new TestCase( SECTION, "0 % -1", -0, 0 % -1 ); +new TestCase( SECTION, "-0 % 1", -0, -0 % 1 ); +new TestCase( SECTION, "-0 % -1", 0, -0 % -1 ); + +// In the remaining cases, where neither an infinity, nor a zero, nor NaN is involved, the floating-point remainder r +// from a dividend n and a divisor d is defined by the mathematical relation r = n (d * q) where q is an integer that +// is negative only if n/d is negative and positive only if n/d is positive, and whose magnitude is as large as +// possible without exceeding the magnitude of the true mathematical quotient of n and d. + +test(); + diff --git a/source/spidermonkey-tests/ecma/Expressions/11.6.1-1.js b/source/spidermonkey-tests/ecma/Expressions/11.6.1-1.js new file mode 100644 index 00000000..40669e53 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.6.1-1.js @@ -0,0 +1,126 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.1-1.js + ECMA Section: 11.6.1 The addition operator ( + ) + Description: + + The addition operator either performs string concatenation or numeric + addition. + + The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression + is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToPrimitive(Result(2)). + 6. Call ToPrimitive(Result(4)). + 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12. + (Note that this step differs from step 3 in the algorithm for comparison + for the relational operators in using or instead of and.) + 8. Call ToNumber(Result(5)). + 9. Call ToNumber(Result(6)). + 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3). + 11. Return Result(10). + 12. Call ToString(Result(5)). + 13. Call ToString(Result(6)). + 14. Concatenate Result(12) followed by Result(13). + 15. Return Result(14). + + Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6. + All native ECMAScript objects except Date objects handle the absence of a + hint as if the hint Number were given; Date objects handle the absence of a + hint as if the hint String were given. Host objects may handle the absence + of a hint in some other manner. + + This test does not cover cases where the Additive or Mulplicative expression + ToPrimitive is string. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.1-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The Addition operator ( + )"); + +// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is +// a boolean primitive and a boolean object. + +new TestCase( SECTION, + "var EXP_1 = true; var EXP_2 = false; EXP_1 + EXP_2", + 1, + eval("var EXP_1 = true; var EXP_2 = false; EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 + EXP_2", + 1, + eval("var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 + EXP_2", + 1, + eval("var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2", + 1, + eval("var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 + EXP_2", + 1, + eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2", + "[object Object][object Object]", + eval("var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2") ); + +// tests for number primitive, number object, Object object, a "MyObject" whose value is +// a number primitive and a number object. + +new TestCase( SECTION, + "var EXP_1 = 100; var EXP_2 = -1; EXP_1 + EXP_2", + 99, + eval("var EXP_1 = 100; var EXP_2 = -1; EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Number(100); var EXP_2 = new Number(-1); EXP_1 + EXP_2", + 99, + eval("var EXP_1 = new Number(100); var EXP_2 = new Number(-1); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(100); var EXP_2 = new Object(-1); EXP_1 + EXP_2", + 99, + eval("var EXP_1 = new Object(100); var EXP_2 = new Object(-1); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2", + 99, + eval("var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(-1); EXP_1 + EXP_2", + 99, + eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(-1); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2", + "[object Object][object Object]", + eval("var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2") ); + + +test(); + +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.6.1-2.js b/source/spidermonkey-tests/ecma/Expressions/11.6.1-2.js new file mode 100644 index 00000000..a04256d5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.6.1-2.js @@ -0,0 +1,130 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.1-2.js + ECMA Section: 11.6.1 The addition operator ( + ) + Description: + + The addition operator either performs string concatenation or numeric + addition. + + The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression + is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToPrimitive(Result(2)). + 6. Call ToPrimitive(Result(4)). + 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12. + (Note that this step differs from step 3 in the algorithm for comparison + for the relational operators in using or instead of and.) + 8. Call ToNumber(Result(5)). + 9. Call ToNumber(Result(6)). + 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3). + 11. Return Result(10). + 12. Call ToString(Result(5)). + 13. Call ToString(Result(6)). + 14. Concatenate Result(12) followed by Result(13). + 15. Return Result(14). + + Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6. + All native ECMAScript objects except Date objects handle the absence of a + hint as if the hint Number were given; Date objects handle the absence of a + hint as if the hint String were given. Host objects may handle the absence + of a hint in some other manner. + + This test does only covers cases where the Additive or Mulplicative expression + ToPrimitive is a string. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.1-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The Addition operator ( + )"); + +// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is +// a boolean primitive and a boolean object. + +new TestCase( SECTION, + "var EXP_1 = 'string'; var EXP_2 = false; EXP_1 + EXP_2", + "stringfalse", + eval("var EXP_1 = 'string'; var EXP_2 = false; EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = true; var EXP_2 = 'string'; EXP_1 + EXP_2", + "truestring", + eval("var EXP_1 = true; var EXP_2 = 'string'; EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Boolean(true); var EXP_2 = new String('string'); EXP_1 + EXP_2", + "truestring", + eval("var EXP_1 = new Boolean(true); var EXP_2 = new String('string'); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(true); var EXP_2 = new Object('string'); EXP_1 + EXP_2", + "truestring", + eval("var EXP_1 = new Object(true); var EXP_2 = new Object('string'); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2", + "stringfalse", + eval("var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Boolean(false)); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2", + "truestring", + eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2", + "[object Object][object Object]", + eval("var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 + EXP_2") ); + +// tests for number primitive, number object, Object object, a "MyObject" whose value is +// a number primitive and a number object. + +new TestCase( SECTION, + "var EXP_1 = 100; var EXP_2 = 'string'; EXP_1 + EXP_2", + "100string", + eval("var EXP_1 = 100; var EXP_2 = 'string'; EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new String('string'); var EXP_2 = new Number(-1); EXP_1 + EXP_2", + "string-1", + eval("var EXP_1 = new String('string'); var EXP_2 = new Number(-1); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(100); var EXP_2 = new Object('string'); EXP_1 + EXP_2", + "100string", + eval("var EXP_1 = new Object(100); var EXP_2 = new Object('string'); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2", + "string-1", + eval("var EXP_1 = new Object(new String('string')); var EXP_2 = new Object(new Number(-1)); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2", + "100string", + eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject('string'); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2", + "[object Object][object Object]", + eval("var EXP_1 = new MyObject(new String('string')); var EXP_2 = new MyObject(new Number(-1)); EXP_1 + EXP_2") ); + +test(); + +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.6.1-3.js b/source/spidermonkey-tests/ecma/Expressions/11.6.1-3.js new file mode 100644 index 00000000..c8d0781e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.6.1-3.js @@ -0,0 +1,116 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.1-3.js + ECMA Section: 11.6.1 The addition operator ( + ) + Description: + + The addition operator either performs string concatenation or numeric + addition. + + The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression + is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToPrimitive(Result(2)). + 6. Call ToPrimitive(Result(4)). + 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12. + (Note that this step differs from step 3 in the algorithm for comparison + for the relational operators in using or instead of and.) + 8. Call ToNumber(Result(5)). + 9. Call ToNumber(Result(6)). + 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3). + 11. Return Result(10). + 12. Call ToString(Result(5)). + 13. Call ToString(Result(6)). + 14. Concatenate Result(12) followed by Result(13). + 15. Return Result(14). + + Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6. + All native ECMAScript objects except Date objects handle the absence of a + hint as if the hint Number were given; Date objects handle the absence of a + hint as if the hint String were given. Host objects may handle the absence + of a hint in some other manner. + + This test does only covers cases where the Additive or Mulplicative expression + is a Date. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.1-3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The Addition operator ( + )"); + +// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is +// a boolean primitive and a boolean object. + +var DATE1 = new Date(); + +new TestCase( SECTION, + "var DATE1 = new Date(); DATE1 + DATE1", + DATE1.toString() + DATE1.toString(), + DATE1 + DATE1 ); + +new TestCase( SECTION, + "var DATE1 = new Date(); DATE1 + 0", + DATE1.toString() + 0, + DATE1 + 0 ); + +new TestCase( SECTION, + "var DATE1 = new Date(); DATE1 + new Number(0)", + DATE1.toString() + 0, + DATE1 + new Number(0) ); + +new TestCase( SECTION, + "var DATE1 = new Date(); DATE1 + true", + DATE1.toString() + "true", + DATE1 + true ); + +new TestCase( SECTION, + "var DATE1 = new Date(); DATE1 + new Boolean(true)", + DATE1.toString() + "true", + DATE1 + new Boolean(true) ); + +new TestCase( SECTION, + "var DATE1 = new Date(); DATE1 + new Boolean(true)", + DATE1.toString() + "true", + DATE1 + new Boolean(true) ); + +var MYOB1 = new MyObject( DATE1 ); + +new TestCase( SECTION, + "MYOB1 = new MyObject(DATE1); MYOB1 + new Number(1)", + "[object Object]1", + MYOB1 + new Number(1) ); + +new TestCase( SECTION, + "MYOB1 = new MyObject(DATE1); MYOB1 + 1", + "[object Object]1", + MYOB1 + 1 ); + +new TestCase( SECTION, + "MYOB1 = new MyObject(DATE1); MYOB1 + true", + "[object Object]true", + MYOB1 + true ); + +test(); + +function MyPrototypeObject(value) { + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return (this.value + '');" ); + this.value = value; +} +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.6.2-1.js b/source/spidermonkey-tests/ecma/Expressions/11.6.2-1.js new file mode 100644 index 00000000..97d8ed79 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.6.2-1.js @@ -0,0 +1,131 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.2-1.js + ECMA Section: 11.6.2 The Subtraction operator ( - ) + Description: + + The production AdditiveExpression : AdditiveExpression - + MultiplicativeExpression is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToNumber(Result(2)). + 6. Call ToNumber(Result(4)). + 7. Apply the subtraction operation to Result(5) and Result(6). See the + discussion below (11.6.3). + 8. Return Result(7). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.2-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The subtraction operator ( - )"); + +// tests for boolean primitive, boolean object, Object object, a "MyObject" whose value is +// a boolean primitive and a boolean object. + +new TestCase( SECTION, + "var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2", + 1, + eval("var EXP_1 = true; var EXP_2 = false; EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2", + 1, + eval("var EXP_1 = new Boolean(true); var EXP_2 = new Boolean(false); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2", + 1, + eval("var EXP_1 = new Object(true); var EXP_2 = new Object(false); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2", + 1, + eval("var EXP_1 = new Object(new Boolean(true)); var EXP_2 = new Object(new Boolean(false)); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2", + 1, + eval("var EXP_1 = new MyObject(true); var EXP_2 = new MyObject(false); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2", + Number.NaN, + eval("var EXP_1 = new MyObject(new Boolean(true)); var EXP_2 = new MyObject(new Boolean(false)); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2", + Number.NaN, + eval("var EXP_1 = new MyOtherObject(new Boolean(true)); var EXP_2 = new MyOtherObject(new Boolean(false)); EXP_1 - EXP_2") ); + +// tests for number primitive, number object, Object object, a "MyObject" whose value is +// a number primitive and a number object. + +new TestCase( SECTION, + "var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2", + 99, + eval("var EXP_1 = 100; var EXP_2 = 1; EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2", + 99, + eval("var EXP_1 = new Number(100); var EXP_2 = new Number(1); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2", + 99, + eval("var EXP_1 = new Object(100); var EXP_2 = new Object(1); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2", + 99, + eval("var EXP_1 = new Object(new Number(100)); var EXP_2 = new Object(new Number(1)); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2", + 99, + eval("var EXP_1 = new MyObject(100); var EXP_2 = new MyObject(1); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2", + Number.NaN, + eval("var EXP_1 = new MyObject(new Number(100)); var EXP_2 = new MyObject(new Number(1)); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2", + 99, + eval("var EXP_1 = new MyOtherObject(new Number(100)); var EXP_2 = new MyOtherObject(new Number(1)); EXP_1 - EXP_2") ); + +// same thing with string! +new TestCase( SECTION, + "var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1'); EXP_1 - EXP_2", + 254, + eval("var EXP_1 = new MyOtherObject(new String('0xff')); var EXP_2 = new MyOtherObject(new String('1')); EXP_1 - EXP_2") ); + +test(); + +function MyPrototypeObject(value) { + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return (this.value + '');" ); + this.value = value; +} +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} +function MyOtherObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.toString = new Function ( "return this.value + ''" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.6.3.js b/source/spidermonkey-tests/ecma/Expressions/11.6.3.js new file mode 100644 index 00000000..b2eb75e6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.6.3.js @@ -0,0 +1,81 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.3.js + ECMA Section: 11.6.3 Applying the additive operators + (+, -) to numbers + Description: + The + operator performs addition when applied to two operands of numeric + type, producing the sum of the operands. The - operator performs + subtraction, producing the difference of two numeric operands. + + Addition is a commutative operation, but not always associative. + + The result of an addition is determined using the rules of IEEE 754 + double-precision arithmetic: + + If either operand is NaN, the result is NaN. + The sum of two infinities of opposite sign is NaN. + The sum of two infinities of the same sign is the infinity of that sign. + The sum of an infinity and a finite value is equal to the infinite operand. + The sum of two negative zeros is 0. The sum of two positive zeros, or of + two zeros of opposite sign, is +0. + The sum of a zero and a nonzero finite value is equal to the nonzero + operand. + The sum of two nonzero finite values of the same magnitude and opposite + sign is +0. + In the remaining cases, where neither an infinity, nor a zero, nor NaN is + involved, and the operands have the same sign or have different + magnitudes, the sum is computed and rounded to the nearest + representable value using IEEE 754 round-to-nearest mode. If the + magnitude is too large to represent, the operation overflows and + the result is then an infinity of appropriate sign. The ECMAScript + language requires support of gradual underflow as defined by IEEE 754. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Applying the additive operators (+,-) to numbers"); + +new TestCase( SECTION, "Number.NaN + 1", Number.NaN, Number.NaN + 1 ); +new TestCase( SECTION, "1 + Number.NaN", Number.NaN, 1 + Number.NaN ); + +new TestCase( SECTION, "Number.NaN - 1", Number.NaN, Number.NaN - 1 ); +new TestCase( SECTION, "1 - Number.NaN", Number.NaN, 1 - Number.NaN ); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY + Number.POSITIVE_INFINITY", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY + Number.POSITIVE_INFINITY); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY + Number.NEGATIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY + Number.NEGATIVE_INFINITY); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY + Number.NEGATIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY + Number.NEGATIVE_INFINITY); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY + Number.POSITIVE_INFINITY); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY - Number.POSITIVE_INFINITY", Number.NaN, Number.POSITIVE_INFINITY - Number.POSITIVE_INFINITY); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY - Number.NEGATIVE_INFINITY", Number.NaN, Number.NEGATIVE_INFINITY - Number.NEGATIVE_INFINITY); + +new TestCase( SECTION, "Number.POSITIVE_INFINITY - Number.NEGATIVE_INFINITY", Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY - Number.NEGATIVE_INFINITY); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY - Number.POSITIVE_INFINITY", Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY - Number.POSITIVE_INFINITY); + +new TestCase( SECTION, "-0 + -0", -0, -0 + -0 ); +new TestCase( SECTION, "-0 - 0", -0, -0 - 0 ); + +new TestCase( SECTION, "0 + 0", 0, 0 + 0 ); +new TestCase( SECTION, "0 + -0", 0, 0 + -0 ); +new TestCase( SECTION, "0 - -0", 0, 0 - -0 ); +new TestCase( SECTION, "0 - 0", 0, 0 - 0 ); +new TestCase( SECTION, "-0 - -0", 0, -0 - -0 ); +new TestCase( SECTION, "-0 + 0", 0, -0 + 0 ); + +new TestCase( SECTION, "Number.MAX_VALUE - Number.MAX_VALUE", 0, Number.MAX_VALUE - Number.MAX_VALUE ); +new TestCase( SECTION, "1/Number.MAX_VALUE - 1/Number.MAX_VALUE", 0, 1/Number.MAX_VALUE - 1/Number.MAX_VALUE ); + +new TestCase( SECTION, "Number.MIN_VALUE - Number.MIN_VALUE", 0, Number.MIN_VALUE - Number.MIN_VALUE ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Expressions/11.7.1.js b/source/spidermonkey-tests/ecma/Expressions/11.7.1.js new file mode 100644 index 00000000..5c527453 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.7.1.js @@ -0,0 +1,194 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.7.1.js + ECMA Section: 11.7.1 The Left Shift Operator ( << ) + Description: + Performs a bitwise left shift operation on the left argument by the amount + specified by the right argument. + + The production ShiftExpression : ShiftExpression << AdditiveExpression is + evaluated as follows: + + 1. Evaluate ShiftExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AdditiveExpression. + 4. Call GetValue(Result(3)). + 5. Call ToInt32(Result(2)). + 6. Call ToUint32(Result(4)). + 7. Mask out all but the least significant 5 bits of Result(6), that is, + compute Result(6) & 0x1F. + 8. Left shift Result(5) by Result(7) bits. The result is a signed 32 bit + integer. + 9. Return Result(8). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.7.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The left shift operator ( << )"); + +for ( power = 0; power < 33; power++ ) { + shiftexp = Math.pow( 2, power ); + + for ( addexp = 0; addexp < 33; addexp++ ) { + new TestCase( SECTION, + shiftexp + " << " + addexp, + LeftShift( shiftexp, addexp ), + shiftexp << addexp ); + } +} + +test(); + +function ToInteger( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( n != n ) { + return 0; + } + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) { + return n; + } + return ( sign * Math.floor(Math.abs(n)) ); +} +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + + return ( n ); +} +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} +function ToUint16( n ) { + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16); + + if (n <0) { + n += Math.pow(2,16); + } + + return ( n ); +} +function Mask( b, n ) { + b = ToUint32BitString( b ); + b = b.substring( b.length - n ); + b = ToUint32Decimal( b ); + return ( b ); +} +function ToUint32BitString( n ) { + var b = ""; + for ( p = 31; p >=0; p-- ) { + if ( n >= Math.pow(2,p) ) { + b += "1"; + n -= Math.pow(2,p); + } else { + b += "0"; + } + } + return b; +} +function ToInt32BitString( n ) { + var b = ""; + var sign = ( n < 0 ) ? -1 : 1; + + b += ( sign == 1 ) ? "0" : "1"; + + for ( p = 30; p >=0; p-- ) { + if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) { + b += ( sign == 1 ) ? "1" : "0"; + n -= sign * Math.pow( 2, p ); + } else { + b += ( sign == 1 ) ? "0" : "1"; + } + } + + return b; +} +function ToInt32Decimal( bin ) { + var r = 0; + var sign; + + if ( Number(bin.charAt(0)) == 0 ) { + sign = 1; + r = 0; + } else { + sign = -1; + r = -(Math.pow(2,31)); + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function ToUint32Decimal( bin ) { + var r = 0; + + + for ( l = bin.length; l < 32; l++ ) { + bin = "0" + bin; + } + + for ( j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + + } + + return r; +} +function LeftShift( s, a ) { + var shift = ToInt32( s ); + var add = ToUint32( a ); + add = Mask( add, 5 ); + var exp = LShift( shift, add ); + + return ( exp ); +} +function LShift( s, a ) { + s = ToInt32BitString( s ); + + for ( var z = 0; z < a; z++ ) { + s += "0"; + } + + s = s.substring( a, s.length); + + return ToInt32(ToInt32Decimal(s)); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.7.2.js b/source/spidermonkey-tests/ecma/Expressions/11.7.2.js new file mode 100644 index 00000000..95cee343 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.7.2.js @@ -0,0 +1,212 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.7.2.js + ECMA Section: 11.7.2 The signed right shift operator ( >> ) + Description: + Performs a sign-filling bitwise right shift operation on the left argument + by the amount specified by the right argument. + + The production ShiftExpression : ShiftExpression >> AdditiveExpression is + evaluated as follows: + + 1. Evaluate ShiftExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AdditiveExpression. + 4. Call GetValue(Result(3)). + 5. Call ToInt32(Result(2)). + 6. Call ToUint32(Result(4)). + 7. Mask out all but the least significant 5 bits of Result(6), that is, + compute Result(6) & 0x1F. + 8. Perform sign-extending right shift of Result(5) by Result(7) bits. The + most significant bit is propagated. The result is a signed 32 bit + integer. + 9. Return Result(8). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.7.2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The signed right shift operator ( >> )"); + +var power = 0; +var addexp = 0; + +for ( power = 0; power <= 32; power++ ) { + shiftexp = Math.pow( 2, power ); + + for ( addexp = 0; addexp <= 32; addexp++ ) { + new TestCase( SECTION, + shiftexp + " >> " + addexp, + SignedRightShift( shiftexp, addexp ), + shiftexp >> addexp ); + } +} + +for ( power = 0; power <= 32; power++ ) { + shiftexp = -Math.pow( 2, power ); + + for ( addexp = 0; addexp <= 32; addexp++ ) { + new TestCase( SECTION, + shiftexp + " >> " + addexp, + SignedRightShift( shiftexp, addexp ), + shiftexp >> addexp ); + } +} + +test(); + +function ToInteger( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( n != n ) { + return 0; + } + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) { + return n; + } + return ( sign * Math.floor(Math.abs(n)) ); +} +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + + return ( n ); +} +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} +function ToUint16( n ) { + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16); + + if (n <0) { + n += Math.pow(2,16); + } + + return ( n ); +} +function Mask( b, n ) { + b = ToUint32BitString( b ); + b = b.substring( b.length - n ); + b = ToUint32Decimal( b ); + return ( b ); +} +function ToUint32BitString( n ) { + var b = ""; + for ( p = 31; p >=0; p-- ) { + if ( n >= Math.pow(2,p) ) { + b += "1"; + n -= Math.pow(2,p); + } else { + b += "0"; + } + } + return b; +} +function ToInt32BitString( n ) { + var b = ""; + var sign = ( n < 0 ) ? -1 : 1; + + b += ( sign == 1 ) ? "0" : "1"; + + for ( p = 30; p >=0; p-- ) { + if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) { + b += ( sign == 1 ) ? "1" : "0"; + n -= sign * Math.pow( 2, p ); + } else { + b += ( sign == 1 ) ? "0" : "1"; + } + } + + return b; +} +function ToInt32Decimal( bin ) { + var r = 0; + var sign; + + if ( Number(bin.charAt(0)) == 0 ) { + sign = 1; + r = 0; + } else { + sign = -1; + r = -(Math.pow(2,31)); + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function ToUint32Decimal( bin ) { + var r = 0; + + for ( l = bin.length; l < 32; l++ ) { + bin = "0" + bin; + } + + for ( j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function SignedRightShift( s, a ) { + s = ToInt32( s ); + a = ToUint32( a ); + a = Mask( a, 5 ); + return ( SignedRShift( s, a ) ); +} +function SignedRShift( s, a ) { + s = ToInt32BitString( s ); + + var firstbit = s.substring(0,1); + + s = s.substring( 1, s.length ); + + for ( var z = 0; z < a; z++ ) { + s = firstbit + s; + } + + s = s.substring( 0, s.length - a); + + s = firstbit +s; + + + return ToInt32(ToInt32Decimal(s)); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.7.3.js b/source/spidermonkey-tests/ecma/Expressions/11.7.3.js new file mode 100644 index 00000000..948b5402 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.7.3.js @@ -0,0 +1,196 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.7.3.js + ECMA Section: 11.7.3 The unsigned right shift operator ( >>> ) + Description: + 11.7.3 The unsigned right shift operator ( >>> ) + Performs a zero-filling bitwise right shift operation on the left argument + by the amount specified by the right argument. + + The production ShiftExpression : ShiftExpression >>> AdditiveExpression is + evaluated as follows: + + 1. Evaluate ShiftExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate AdditiveExpression. + 4. Call GetValue(Result(3)). + 5. Call ToUint32(Result(2)). + 6. Call ToUint32(Result(4)). + 7. Mask out all but the least significant 5 bits of Result(6), that is, + compute Result(6) & 0x1F. + 8. Perform zero-filling right shift of Result(5) by Result(7) bits. + Vacated bits are filled with zero. The result is an unsigned 32 bit + integer. + 9. Return Result(8). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.7.3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The unsigned right shift operator ( >>> )"); + +var addexp = 0; +var power = 0; + +for ( power = 0; power <= 32; power++ ) { + shiftexp = Math.pow( 2, power ); + + for ( addexp = 0; addexp <= 32; addexp++ ) { + new TestCase( SECTION, + shiftexp + " >>> " + addexp, + UnsignedRightShift( shiftexp, addexp ), + shiftexp >>> addexp ); + } +} + +test(); + + +function ToInteger( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( n != n ) { + return 0; + } + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY ) { + return n; + } + return ( sign * Math.floor(Math.abs(n)) ); +} +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + + return ( n ); +} +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} +function ToUint16( n ) { + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = ( sign * Math.floor( Math.abs(n) ) ) % Math.pow(2,16); + + if (n <0) { + n += Math.pow(2,16); + } + + return ( n ); +} +function Mask( b, n ) { + b = ToUint32BitString( b ); + b = b.substring( b.length - n ); + b = ToUint32Decimal( b ); + return ( b ); +} +function ToUint32BitString( n ) { + var b = ""; + for ( p = 31; p >=0; p-- ) { + if ( n >= Math.pow(2,p) ) { + b += "1"; + n -= Math.pow(2,p); + } else { + b += "0"; + } + } + return b; +} +function ToInt32BitString( n ) { + var b = ""; + var sign = ( n < 0 ) ? -1 : 1; + + b += ( sign == 1 ) ? "0" : "1"; + + for ( p = 30; p >=0; p-- ) { + if ( (sign == 1 ) ? sign * n >= Math.pow(2,p) : sign * n > Math.pow(2,p) ) { + b += ( sign == 1 ) ? "1" : "0"; + n -= sign * Math.pow( 2, p ); + } else { + b += ( sign == 1 ) ? "0" : "1"; + } + } + + return b; +} +function ToInt32Decimal( bin ) { + var r = 0; + var sign; + + if ( Number(bin.charAt(0)) == 0 ) { + sign = 1; + r = 0; + } else { + sign = -1; + r = -(Math.pow(2,31)); + } + + for ( var j = 0; j < 31; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + } + + return r; +} +function ToUint32Decimal( bin ) { + var r = 0; + + + for ( l = bin.length; l < 32; l++ ) { + bin = "0" + bin; + } + + for ( j = 0; j < 32; j++ ) { + r += Math.pow( 2, j ) * Number(bin.charAt(31-j)); + + } + + return r; +} +function RShift( s, a ) { + s = ToUint32BitString( s ); + for ( z = 0; z < a; z++ ) { + s = "0" + s; + } + s = s.substring( 0, s.length - a ); + + return ToUint32Decimal(s); +} +function UnsignedRightShift( s, a ) { + s = ToUint32( s ); + a = ToUint32( a ); + a = Mask( a, 5 ); + return ( RShift( s, a ) ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.8.1.js b/source/spidermonkey-tests/ecma/Expressions/11.8.1.js new file mode 100644 index 00000000..2902bf13 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.8.1.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.8.1.js + ECMA Section: 11.8.1 The less-than operator ( < ) + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.8.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The less-than operator ( < )"); + +new TestCase( SECTION, "true < false", false, true < false ); +new TestCase( SECTION, "false < true", true, false < true ); +new TestCase( SECTION, "false < false", false, false < false ); +new TestCase( SECTION, "true < true", false, true < true ); + +new TestCase( SECTION, "new Boolean(true) < new Boolean(true)", false, new Boolean(true) < new Boolean(true) ); +new TestCase( SECTION, "new Boolean(true) < new Boolean(false)", false, new Boolean(true) < new Boolean(false) ); +new TestCase( SECTION, "new Boolean(false) < new Boolean(true)", true, new Boolean(false) < new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) < new Boolean(false)", false, new Boolean(false) < new Boolean(false) ); + +new TestCase( SECTION, "new MyObject(Infinity) < new MyObject(Infinity)", false, new MyObject( Number.POSITIVE_INFINITY ) < new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) < new MyObject(Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) < new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) < new MyObject(-Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) < new MyObject( Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, "new MyValueObject(false) < new MyValueObject(true)", true, new MyValueObject(false) < new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(true) < new MyValueObject(true)", false, new MyValueObject(true) < new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(false) < new MyValueObject(false)", false, new MyValueObject(false) < new MyValueObject(false) ); + +new TestCase( SECTION, "new MyStringObject(false) < new MyStringObject(true)", true, new MyStringObject(false) < new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(true) < new MyStringObject(true)", false, new MyStringObject(true) < new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(false) < new MyStringObject(false)", false, new MyStringObject(false) < new MyStringObject(false) ); + +new TestCase( SECTION, "Number.NaN < Number.NaN", false, Number.NaN < Number.NaN ); +new TestCase( SECTION, "0 < Number.NaN", false, 0 < Number.NaN ); +new TestCase( SECTION, "Number.NaN < 0", false, Number.NaN < 0 ); + +new TestCase( SECTION, "0 < -0", false, 0 < -0 ); +new TestCase( SECTION, "-0 < 0", false, -0 < 0 ); + +new TestCase( SECTION, "Infinity < 0", false, Number.POSITIVE_INFINITY < 0 ); +new TestCase( SECTION, "Infinity < Number.MAX_VALUE", false, Number.POSITIVE_INFINITY < Number.MAX_VALUE ); +new TestCase( SECTION, "Infinity < Infinity", false, Number.POSITIVE_INFINITY < Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 < Infinity", true, 0 < Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE < Infinity", true, Number.MAX_VALUE < Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 < -Infinity", false, 0 < Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE < -Infinity", false, Number.MAX_VALUE < Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "-Infinity < -Infinity", false, Number.NEGATIVE_INFINITY < Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "-Infinity < 0", true, Number.NEGATIVE_INFINITY < 0 ); +new TestCase( SECTION, "-Infinity < -Number.MAX_VALUE", true, Number.NEGATIVE_INFINITY < -Number.MAX_VALUE ); +new TestCase( SECTION, "-Infinity < Number.MIN_VALUE", true, Number.NEGATIVE_INFINITY < Number.MIN_VALUE ); + +new TestCase( SECTION, "'string' < 'string'", false, 'string' < 'string' ); +new TestCase( SECTION, "'astring' < 'string'", true, 'astring' < 'string' ); +new TestCase( SECTION, "'strings' < 'stringy'", true, 'strings' < 'stringy' ); +new TestCase( SECTION, "'strings' < 'stringier'", false, 'strings' < 'stringier' ); +new TestCase( SECTION, "'string' < 'astring'", false, 'string' < 'astring' ); +new TestCase( SECTION, "'string' < 'strings'", true, 'string' < 'strings' ); + +test(); + +function MyObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); + this.toString = new Function( "return this.value +''" ); +} +function MyValueObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} +function MyStringObject(value) { + this.value = value; + this.toString = new Function( "return this.value +''" ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.8.2.js b/source/spidermonkey-tests/ecma/Expressions/11.8.2.js new file mode 100644 index 00000000..d8a7315c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.8.2.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.8.2.js + ECMA Section: 11.8.2 The greater-than operator ( > ) + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.8.2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The greater-than operator ( > )"); + +new TestCase( SECTION, "true > false", true, true > false ); +new TestCase( SECTION, "false > true", false, false > true ); +new TestCase( SECTION, "false > false", false, false > false ); +new TestCase( SECTION, "true > true", false, true > true ); + +new TestCase( SECTION, "new Boolean(true) > new Boolean(true)", false, new Boolean(true) > new Boolean(true) ); +new TestCase( SECTION, "new Boolean(true) > new Boolean(false)", true, new Boolean(true) > new Boolean(false) ); +new TestCase( SECTION, "new Boolean(false) > new Boolean(true)", false, new Boolean(false) > new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) > new Boolean(false)", false, new Boolean(false) > new Boolean(false) ); + +new TestCase( SECTION, "new MyObject(Infinity) > new MyObject(Infinity)", false, new MyObject( Number.POSITIVE_INFINITY ) > new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) > new MyObject(Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) > new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) > new MyObject(-Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) > new MyObject( Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, "new MyValueObject(false) > new MyValueObject(true)", false, new MyValueObject(false) > new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(true) > new MyValueObject(true)", false, new MyValueObject(true) > new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(false) > new MyValueObject(false)", false, new MyValueObject(false) > new MyValueObject(false) ); + +new TestCase( SECTION, "new MyStringObject(false) > new MyStringObject(true)", false, new MyStringObject(false) > new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(true) > new MyStringObject(true)", false, new MyStringObject(true) > new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(false) > new MyStringObject(false)", false, new MyStringObject(false) > new MyStringObject(false) ); + +new TestCase( SECTION, "Number.NaN > Number.NaN", false, Number.NaN > Number.NaN ); +new TestCase( SECTION, "0 > Number.NaN", false, 0 > Number.NaN ); +new TestCase( SECTION, "Number.NaN > 0", false, Number.NaN > 0 ); + +new TestCase( SECTION, "0 > -0", false, 0 > -0 ); +new TestCase( SECTION, "-0 > 0", false, -0 > 0 ); + +new TestCase( SECTION, "Infinity > 0", true, Number.POSITIVE_INFINITY > 0 ); +new TestCase( SECTION, "Infinity > Number.MAX_VALUE", true, Number.POSITIVE_INFINITY > Number.MAX_VALUE ); +new TestCase( SECTION, "Infinity > Infinity", false, Number.POSITIVE_INFINITY > Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 > Infinity", false, 0 > Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE > Infinity", false, Number.MAX_VALUE > Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 > -Infinity", true, 0 > Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE > -Infinity", true, Number.MAX_VALUE > Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "-Infinity > -Infinity", false, Number.NEGATIVE_INFINITY > Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "-Infinity > 0", false, Number.NEGATIVE_INFINITY > 0 ); +new TestCase( SECTION, "-Infinity > -Number.MAX_VALUE", false, Number.NEGATIVE_INFINITY > -Number.MAX_VALUE ); +new TestCase( SECTION, "-Infinity > Number.MIN_VALUE", false, Number.NEGATIVE_INFINITY > Number.MIN_VALUE ); + +new TestCase( SECTION, "'string' > 'string'", false, 'string' > 'string' ); +new TestCase( SECTION, "'astring' > 'string'", false, 'astring' > 'string' ); +new TestCase( SECTION, "'strings' > 'stringy'", false, 'strings' > 'stringy' ); +new TestCase( SECTION, "'strings' > 'stringier'", true, 'strings' > 'stringier' ); +new TestCase( SECTION, "'string' > 'astring'", true, 'string' > 'astring' ); +new TestCase( SECTION, "'string' > 'strings'", false, 'string' > 'strings' ); + +test(); + +function MyObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); + this.toString = new Function( "return this.value +''" ); +} +function MyValueObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} +function MyStringObject(value) { + this.value = value; + this.toString = new Function( "return this.value +''" ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.8.3.js b/source/spidermonkey-tests/ecma/Expressions/11.8.3.js new file mode 100644 index 00000000..324a5d5f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.8.3.js @@ -0,0 +1,86 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.8.3.js + ECMA Section: 11.8.3 The less-than-or-equal operator ( <= ) + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.8.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The less-than-or-equal operator ( <= )"); + +new TestCase( SECTION, "true <= false", false, true <= false ); +new TestCase( SECTION, "false <= true", true, false <= true ); +new TestCase( SECTION, "false <= false", true, false <= false ); +new TestCase( SECTION, "true <= true", true, true <= true ); + +new TestCase( SECTION, "new Boolean(true) <= new Boolean(true)", true, new Boolean(true) <= new Boolean(true) ); +new TestCase( SECTION, "new Boolean(true) <= new Boolean(false)", false, new Boolean(true) <= new Boolean(false) ); +new TestCase( SECTION, "new Boolean(false) <= new Boolean(true)", true, new Boolean(false) <= new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) <= new Boolean(false)", true, new Boolean(false) <= new Boolean(false) ); + +new TestCase( SECTION, "new MyObject(Infinity) <= new MyObject(Infinity)", true, new MyObject( Number.POSITIVE_INFINITY ) <= new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) <= new MyObject(Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) <= new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) <= new MyObject(-Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) <= new MyObject( Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, "new MyValueObject(false) <= new MyValueObject(true)", true, new MyValueObject(false) <= new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(true) <= new MyValueObject(true)", true, new MyValueObject(true) <= new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(false) <= new MyValueObject(false)", true, new MyValueObject(false) <= new MyValueObject(false) ); + +new TestCase( SECTION, "new MyStringObject(false) <= new MyStringObject(true)", true, new MyStringObject(false) <= new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(true) <= new MyStringObject(true)", true, new MyStringObject(true) <= new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(false) <= new MyStringObject(false)", true, new MyStringObject(false) <= new MyStringObject(false) ); + +new TestCase( SECTION, "Number.NaN <= Number.NaN", false, Number.NaN <= Number.NaN ); +new TestCase( SECTION, "0 <= Number.NaN", false, 0 <= Number.NaN ); +new TestCase( SECTION, "Number.NaN <= 0", false, Number.NaN <= 0 ); + +new TestCase( SECTION, "0 <= -0", true, 0 <= -0 ); +new TestCase( SECTION, "-0 <= 0", true, -0 <= 0 ); + +new TestCase( SECTION, "Infinity <= 0", false, Number.POSITIVE_INFINITY <= 0 ); +new TestCase( SECTION, "Infinity <= Number.MAX_VALUE", false, Number.POSITIVE_INFINITY <= Number.MAX_VALUE ); +new TestCase( SECTION, "Infinity <= Infinity", true, Number.POSITIVE_INFINITY <= Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 <= Infinity", true, 0 <= Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE <= Infinity", true, Number.MAX_VALUE <= Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 <= -Infinity", false, 0 <= Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE <= -Infinity", false, Number.MAX_VALUE <= Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "-Infinity <= -Infinity", true, Number.NEGATIVE_INFINITY <= Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "-Infinity <= 0", true, Number.NEGATIVE_INFINITY <= 0 ); +new TestCase( SECTION, "-Infinity <= -Number.MAX_VALUE", true, Number.NEGATIVE_INFINITY <= -Number.MAX_VALUE ); +new TestCase( SECTION, "-Infinity <= Number.MIN_VALUE", true, Number.NEGATIVE_INFINITY <= Number.MIN_VALUE ); + +new TestCase( SECTION, "'string' <= 'string'", true, 'string' <= 'string' ); +new TestCase( SECTION, "'astring' <= 'string'", true, 'astring' <= 'string' ); +new TestCase( SECTION, "'strings' <= 'stringy'", true, 'strings' <= 'stringy' ); +new TestCase( SECTION, "'strings' <= 'stringier'", false, 'strings' <= 'stringier' ); +new TestCase( SECTION, "'string' <= 'astring'", false, 'string' <= 'astring' ); +new TestCase( SECTION, "'string' <= 'strings'", true, 'string' <= 'strings' ); + +test(); + +function MyObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); + this.toString = new Function( "return this.value +''" ); +} +function MyValueObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} +function MyStringObject(value) { + this.value = value; + this.toString = new Function( "return this.value +''" ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.8.4.js b/source/spidermonkey-tests/ecma/Expressions/11.8.4.js new file mode 100644 index 00000000..19ed1084 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.8.4.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.8.4.js + ECMA Section: 11.8.4 The greater-than-or-equal operator ( >= ) + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.8.4"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The greater-than-or-equal operator ( >= )"); + +new TestCase( SECTION, "true >= false", true, true >= false ); +new TestCase( SECTION, "false >= true", false, false >= true ); +new TestCase( SECTION, "false >= false", true, false >= false ); +new TestCase( SECTION, "true >= true", true, true >= true ); + +new TestCase( SECTION, "new Boolean(true) >= new Boolean(true)", true, new Boolean(true) >= new Boolean(true) ); +new TestCase( SECTION, "new Boolean(true) >= new Boolean(false)", true, new Boolean(true) >= new Boolean(false) ); +new TestCase( SECTION, "new Boolean(false) >= new Boolean(true)", false, new Boolean(false) >= new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) >= new Boolean(false)", true, new Boolean(false) >= new Boolean(false) ); + +new TestCase( SECTION, "new MyObject(Infinity) >= new MyObject(Infinity)", true, new MyObject( Number.POSITIVE_INFINITY ) >= new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) >= new MyObject(Infinity)", false, new MyObject( Number.NEGATIVE_INFINITY ) >= new MyObject( Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "new MyObject(-Infinity) >= new MyObject(-Infinity)", true, new MyObject( Number.NEGATIVE_INFINITY ) >= new MyObject( Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, "new MyValueObject(false) >= new MyValueObject(true)", false, new MyValueObject(false) >= new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(true) >= new MyValueObject(true)", true, new MyValueObject(true) >= new MyValueObject(true) ); +new TestCase( SECTION, "new MyValueObject(false) >= new MyValueObject(false)", true, new MyValueObject(false) >= new MyValueObject(false) ); + +new TestCase( SECTION, "new MyStringObject(false) >= new MyStringObject(true)", false, new MyStringObject(false) >= new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(true) >= new MyStringObject(true)", true, new MyStringObject(true) >= new MyStringObject(true) ); +new TestCase( SECTION, "new MyStringObject(false) >= new MyStringObject(false)", true, new MyStringObject(false) >= new MyStringObject(false) ); + +new TestCase( SECTION, "Number.NaN >= Number.NaN", false, Number.NaN >= Number.NaN ); +new TestCase( SECTION, "0 >= Number.NaN", false, 0 >= Number.NaN ); +new TestCase( SECTION, "Number.NaN >= 0", false, Number.NaN >= 0 ); + +new TestCase( SECTION, "0 >= -0", true, 0 >= -0 ); +new TestCase( SECTION, "-0 >= 0", true, -0 >= 0 ); + +new TestCase( SECTION, "Infinity >= 0", true, Number.POSITIVE_INFINITY >= 0 ); +new TestCase( SECTION, "Infinity >= Number.MAX_VALUE", true, Number.POSITIVE_INFINITY >= Number.MAX_VALUE ); +new TestCase( SECTION, "Infinity >= Infinity", true, Number.POSITIVE_INFINITY >= Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 >= Infinity", false, 0 >= Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE >= Infinity", false, Number.MAX_VALUE >= Number.POSITIVE_INFINITY ); + +new TestCase( SECTION, "0 >= -Infinity", true, 0 >= Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "Number.MAX_VALUE >= -Infinity", true, Number.MAX_VALUE >= Number.NEGATIVE_INFINITY ); +new TestCase( SECTION, "-Infinity >= -Infinity", true, Number.NEGATIVE_INFINITY >= Number.NEGATIVE_INFINITY ); + +new TestCase( SECTION, "-Infinity >= 0", false, Number.NEGATIVE_INFINITY >= 0 ); +new TestCase( SECTION, "-Infinity >= -Number.MAX_VALUE", false, Number.NEGATIVE_INFINITY >= -Number.MAX_VALUE ); +new TestCase( SECTION, "-Infinity >= Number.MIN_VALUE", false, Number.NEGATIVE_INFINITY >= Number.MIN_VALUE ); + +new TestCase( SECTION, "'string' > 'string'", false, 'string' > 'string' ); +new TestCase( SECTION, "'astring' > 'string'", false, 'astring' > 'string' ); +new TestCase( SECTION, "'strings' > 'stringy'", false, 'strings' > 'stringy' ); +new TestCase( SECTION, "'strings' > 'stringier'", true, 'strings' > 'stringier' ); +new TestCase( SECTION, "'string' > 'astring'", true, 'string' > 'astring' ); +new TestCase( SECTION, "'string' > 'strings'", false, 'string' > 'strings' ); + +test(); + +function MyObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); + this.toString = new Function( "return this.value +''" ); +} +function MyValueObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} +function MyStringObject(value) { + this.value = value; + this.toString = new Function( "return this.value +''" ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.9.1.js b/source/spidermonkey-tests/ecma/Expressions/11.9.1.js new file mode 100644 index 00000000..3d11a0f3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.9.1.js @@ -0,0 +1,125 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.9.1.js + ECMA Section: 11.9.1 The equals operator ( == ) + Description: + + The production EqualityExpression: + EqualityExpression == RelationalExpression is evaluated as follows: + + 1. Evaluate EqualityExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate RelationalExpression. + 4. Call GetValue(Result(3)). + 5. Perform the comparison Result(4) == Result(2). (See section 11.9.3) + 6. Return Result(5). + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.9.1"; +var VERSION = "ECMA_1"; +var BUGNUMBER="77391"; +startTest(); + +writeHeaderToLog( SECTION + " The equals operator ( == )"); + +// type x and type y are the same. if type x is undefined or null, return true + +new TestCase( SECTION, "void 0 = void 0", true, void 0 == void 0 ); +new TestCase( SECTION, "null == null", true, null == null ); + +// if x is NaN, return false. if y is NaN, return false. + +new TestCase( SECTION, "NaN == NaN", false, Number.NaN == Number.NaN ); +new TestCase( SECTION, "NaN == 0", false, Number.NaN == 0 ); +new TestCase( SECTION, "0 == NaN", false, 0 == Number.NaN ); +new TestCase( SECTION, "NaN == Infinity", false, Number.NaN == Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Infinity == NaN", false, Number.POSITIVE_INFINITY == Number.NaN ); + +// if x is the same number value as y, return true. + +new TestCase( SECTION, "Number.MAX_VALUE == Number.MAX_VALUE", true, Number.MAX_VALUE == Number.MAX_VALUE ); +new TestCase( SECTION, "Number.MIN_VALUE == Number.MIN_VALUE", true, Number.MIN_VALUE == Number.MIN_VALUE ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY", true, Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY", true, Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY ); + +// if xis 0 and y is -0, return true. if x is -0 and y is 0, return true. + +new TestCase( SECTION, "0 == 0", true, 0 == 0 ); +new TestCase( SECTION, "0 == -0", true, 0 == -0 ); +new TestCase( SECTION, "-0 == 0", true, -0 == 0 ); +new TestCase( SECTION, "-0 == -0", true, -0 == -0 ); + +// return false. + +new TestCase( SECTION, "0.9 == 1", false, 0.9 == 1 ); +new TestCase( SECTION, "0.999999 == 1", false, 0.999999 == 1 ); +new TestCase( SECTION, "0.9999999999 == 1", false, 0.9999999999 == 1 ); +new TestCase( SECTION, "0.9999999999999 == 1", false, 0.9999999999999 == 1 ); + +// type x and type y are the same type, but not numbers. + + +// x and y are strings. return true if x and y are exactly the same sequence of characters. +// otherwise, return false. + +new TestCase( SECTION, "'hello' == 'hello'", true, "hello" == "hello" ); + +// x and y are booleans. return true if both are true or both are false. + +new TestCase( SECTION, "true == true", true, true == true ); +new TestCase( SECTION, "false == false", true, false == false ); +new TestCase( SECTION, "true == false", false, true == false ); +new TestCase( SECTION, "false == true", false, false == true ); + +// return true if x and y refer to the same object. otherwise return false. + +new TestCase( SECTION, "new MyObject(true) == new MyObject(true)", false, new MyObject(true) == new MyObject(true) ); +new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) ); + + +new TestCase( SECTION, "x = new MyObject(true); y = x; z = x; z == y", true, eval("x = new MyObject(true); y = x; z = x; z == y") ); +new TestCase( SECTION, "x = new MyObject(false); y = x; z = x; z == y", true, eval("x = new MyObject(false); y = x; z = x; z == y") ); +new TestCase( SECTION, "x = new Boolean(true); y = x; z = x; z == y", true, eval("x = new Boolean(true); y = x; z = x; z == y") ); +new TestCase( SECTION, "x = new Boolean(false); y = x; z = x; z == y", true, eval("x = new Boolean(false); y = x; z = x; z == y") ); + +new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) ); + +// if x is null and y is undefined, return true. if x is undefined and y is null return true. + +new TestCase( SECTION, "null == void 0", true, null == void 0 ); +new TestCase( SECTION, "void 0 == null", true, void 0 == null ); + +// if type(x) is Number and type(y) is string, return the result of the comparison x == ToNumber(y). + +new TestCase( SECTION, "1 == '1'", true, 1 == '1' ); +new TestCase( SECTION, "255 == '0xff'", true, 255 == '0xff' ); +new TestCase( SECTION, "0 == '\r'", true, 0 == "\r" ); +new TestCase( SECTION, "1e19 == '1e19'", true, 1e19 == "1e19" ); + + +new TestCase( SECTION, "new Boolean(true) == true", true, true == new Boolean(true) ); +new TestCase( SECTION, "new MyObject(true) == true", true, true == new MyObject(true) ); + +new TestCase( SECTION, "new Boolean(false) == false", true, new Boolean(false) == false ); +new TestCase( SECTION, "new MyObject(false) == false", true, new MyObject(false) == false ); + +new TestCase( SECTION, "true == new Boolean(true)", true, true == new Boolean(true) ); +new TestCase( SECTION, "true == new MyObject(true)", true, true == new MyObject(true) ); + +new TestCase( SECTION, "false == new Boolean(false)", true, false == new Boolean(false) ); +new TestCase( SECTION, "false == new MyObject(false)", true, false == new MyObject(false) ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.9.2.js b/source/spidermonkey-tests/ecma/Expressions/11.9.2.js new file mode 100644 index 00000000..196d7e82 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.9.2.js @@ -0,0 +1,125 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.9.2.js + ECMA Section: 11.9.2 The equals operator ( == ) + Description: + + The production EqualityExpression: + EqualityExpression == RelationalExpression is evaluated as follows: + + 1. Evaluate EqualityExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate RelationalExpression. + 4. Call GetValue(Result(3)). + 5. Perform the comparison Result(4) == Result(2). (See section 11.9.3) + 6. Return Result(5). + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.9.2"; +var VERSION = "ECMA_1"; +var BUGNUMBER="77391"; +startTest(); + +writeHeaderToLog( SECTION + " The equals operator ( == )"); + +// type x and type y are the same. if type x is undefined or null, return true + +new TestCase( SECTION, "void 0 == void 0", false, void 0 != void 0 ); +new TestCase( SECTION, "null == null", false, null != null ); + +// if x is NaN, return false. if y is NaN, return false. + +new TestCase( SECTION, "NaN != NaN", true, Number.NaN != Number.NaN ); +new TestCase( SECTION, "NaN != 0", true, Number.NaN != 0 ); +new TestCase( SECTION, "0 != NaN", true, 0 != Number.NaN ); +new TestCase( SECTION, "NaN != Infinity", true, Number.NaN != Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Infinity != NaN", true, Number.POSITIVE_INFINITY != Number.NaN ); + +// if x is the same number value as y, return true. + +new TestCase( SECTION, "Number.MAX_VALUE != Number.MAX_VALUE", false, Number.MAX_VALUE != Number.MAX_VALUE ); +new TestCase( SECTION, "Number.MIN_VALUE != Number.MIN_VALUE", false, Number.MIN_VALUE != Number.MIN_VALUE ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY != Number.POSITIVE_INFINITY", false, Number.POSITIVE_INFINITY != Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY != Number.NEGATIVE_INFINITY", false, Number.NEGATIVE_INFINITY != Number.NEGATIVE_INFINITY ); + +// if xis 0 and y is -0, return true. if x is -0 and y is 0, return true. + +new TestCase( SECTION, "0 != 0", false, 0 != 0 ); +new TestCase( SECTION, "0 != -0", false, 0 != -0 ); +new TestCase( SECTION, "-0 != 0", false, -0 != 0 ); +new TestCase( SECTION, "-0 != -0", false, -0 != -0 ); + +// return false. + +new TestCase( SECTION, "0.9 != 1", true, 0.9 != 1 ); +new TestCase( SECTION, "0.999999 != 1", true, 0.999999 != 1 ); +new TestCase( SECTION, "0.9999999999 != 1", true, 0.9999999999 != 1 ); +new TestCase( SECTION, "0.9999999999999 != 1", true, 0.9999999999999 != 1 ); + +// type x and type y are the same type, but not numbers. + + +// x and y are strings. return true if x and y are exactly the same sequence of characters. +// otherwise, return false. + +new TestCase( SECTION, "'hello' != 'hello'", false, "hello" != "hello" ); + +// x and y are booleans. return true if both are true or both are false. + +new TestCase( SECTION, "true != true", false, true != true ); +new TestCase( SECTION, "false != false", false, false != false ); +new TestCase( SECTION, "true != false", true, true != false ); +new TestCase( SECTION, "false != true", true, false != true ); + +// return true if x and y refer to the same object. otherwise return false. + +new TestCase( SECTION, "new MyObject(true) != new MyObject(true)", true, new MyObject(true) != new MyObject(true) ); +new TestCase( SECTION, "new Boolean(true) != new Boolean(true)", true, new Boolean(true) != new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) != new Boolean(false)", true, new Boolean(false) != new Boolean(false) ); + + +new TestCase( SECTION, "x = new MyObject(true); y = x; z = x; z != y", false, eval("x = new MyObject(true); y = x; z = x; z != y") ); +new TestCase( SECTION, "x = new MyObject(false); y = x; z = x; z != y", false, eval("x = new MyObject(false); y = x; z = x; z != y") ); +new TestCase( SECTION, "x = new Boolean(true); y = x; z = x; z != y", false, eval("x = new Boolean(true); y = x; z = x; z != y") ); +new TestCase( SECTION, "x = new Boolean(false); y = x; z = x; z != y", false, eval("x = new Boolean(false); y = x; z = x; z != y") ); + +new TestCase( SECTION, "new Boolean(true) != new Boolean(true)", true, new Boolean(true) != new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) != new Boolean(false)", true, new Boolean(false) != new Boolean(false) ); + +// if x is null and y is undefined, return true. if x is undefined and y is null return true. + +new TestCase( SECTION, "null != void 0", false, null != void 0 ); +new TestCase( SECTION, "void 0 != null", false, void 0 != null ); + +// if type(x) is Number and type(y) is string, return the result of the comparison x != ToNumber(y). + +new TestCase( SECTION, "1 != '1'", false, 1 != '1' ); +new TestCase( SECTION, "255 != '0xff'", false, 255 != '0xff' ); +new TestCase( SECTION, "0 != '\r'", false, 0 != "\r" ); +new TestCase( SECTION, "1e19 != '1e19'", false, 1e19 != "1e19" ); + + +new TestCase( SECTION, "new Boolean(true) != true", false, true != new Boolean(true) ); +new TestCase( SECTION, "new MyObject(true) != true", false, true != new MyObject(true) ); + +new TestCase( SECTION, "new Boolean(false) != false", false, new Boolean(false) != false ); +new TestCase( SECTION, "new MyObject(false) != false", false, new MyObject(false) != false ); + +new TestCase( SECTION, "true != new Boolean(true)", false, true != new Boolean(true) ); +new TestCase( SECTION, "true != new MyObject(true)", false, true != new MyObject(true) ); + +new TestCase( SECTION, "false != new Boolean(false)", false, false != new Boolean(false) ); +new TestCase( SECTION, "false != new MyObject(false)", false, false != new MyObject(false) ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/11.9.3.js b/source/spidermonkey-tests/ecma/Expressions/11.9.3.js new file mode 100644 index 00000000..5fa0d35b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Expressions/11.9.3.js @@ -0,0 +1,125 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.9.3.js + ECMA Section: 11.9.3 The equals operator ( == ) + Description: + + The production EqualityExpression: + EqualityExpression == RelationalExpression is evaluated as follows: + + 1. Evaluate EqualityExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate RelationalExpression. + 4. Call GetValue(Result(3)). + 5. Perform the comparison Result(4) == Result(2). (See section 11.9.3) + 6. Return Result(5). + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.9.3"; +var VERSION = "ECMA_1"; +var BUGNUMBER="77391"; +startTest(); + +writeHeaderToLog( SECTION + " The equals operator ( == )"); + +// type x and type y are the same. if type x is undefined or null, return true + +new TestCase( SECTION, "void 0 = void 0", true, void 0 == void 0 ); +new TestCase( SECTION, "null == null", true, null == null ); + +// if x is NaN, return false. if y is NaN, return false. + +new TestCase( SECTION, "NaN == NaN", false, Number.NaN == Number.NaN ); +new TestCase( SECTION, "NaN == 0", false, Number.NaN == 0 ); +new TestCase( SECTION, "0 == NaN", false, 0 == Number.NaN ); +new TestCase( SECTION, "NaN == Infinity", false, Number.NaN == Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Infinity == NaN", false, Number.POSITIVE_INFINITY == Number.NaN ); + +// if x is the same number value as y, return true. + +new TestCase( SECTION, "Number.MAX_VALUE == Number.MAX_VALUE", true, Number.MAX_VALUE == Number.MAX_VALUE ); +new TestCase( SECTION, "Number.MIN_VALUE == Number.MIN_VALUE", true, Number.MIN_VALUE == Number.MIN_VALUE ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY", true, Number.POSITIVE_INFINITY == Number.POSITIVE_INFINITY ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY", true, Number.NEGATIVE_INFINITY == Number.NEGATIVE_INFINITY ); + +// if xis 0 and y is -0, return true. if x is -0 and y is 0, return true. + +new TestCase( SECTION, "0 == 0", true, 0 == 0 ); +new TestCase( SECTION, "0 == -0", true, 0 == -0 ); +new TestCase( SECTION, "-0 == 0", true, -0 == 0 ); +new TestCase( SECTION, "-0 == -0", true, -0 == -0 ); + +// return false. + +new TestCase( SECTION, "0.9 == 1", false, 0.9 == 1 ); +new TestCase( SECTION, "0.999999 == 1", false, 0.999999 == 1 ); +new TestCase( SECTION, "0.9999999999 == 1", false, 0.9999999999 == 1 ); +new TestCase( SECTION, "0.9999999999999 == 1", false, 0.9999999999999 == 1 ); + +// type x and type y are the same type, but not numbers. + + +// x and y are strings. return true if x and y are exactly the same sequence of characters. +// otherwise, return false. + +new TestCase( SECTION, "'hello' == 'hello'", true, "hello" == "hello" ); + +// x and y are booleans. return true if both are true or both are false. + +new TestCase( SECTION, "true == true", true, true == true ); +new TestCase( SECTION, "false == false", true, false == false ); +new TestCase( SECTION, "true == false", false, true == false ); +new TestCase( SECTION, "false == true", false, false == true ); + +// return true if x and y refer to the same object. otherwise return false. + +new TestCase( SECTION, "new MyObject(true) == new MyObject(true)", false, new MyObject(true) == new MyObject(true) ); +new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) ); + + +new TestCase( SECTION, "x = new MyObject(true); y = x; z = x; z == y", true, eval("x = new MyObject(true); y = x; z = x; z == y") ); +new TestCase( SECTION, "x = new MyObject(false); y = x; z = x; z == y", true, eval("x = new MyObject(false); y = x; z = x; z == y") ); +new TestCase( SECTION, "x = new Boolean(true); y = x; z = x; z == y", true, eval("x = new Boolean(true); y = x; z = x; z == y") ); +new TestCase( SECTION, "x = new Boolean(false); y = x; z = x; z == y", true, eval("x = new Boolean(false); y = x; z = x; z == y") ); + +new TestCase( SECTION, "new Boolean(true) == new Boolean(true)", false, new Boolean(true) == new Boolean(true) ); +new TestCase( SECTION, "new Boolean(false) == new Boolean(false)", false, new Boolean(false) == new Boolean(false) ); + +// if x is null and y is undefined, return true. if x is undefined and y is null return true. + +new TestCase( SECTION, "null == void 0", true, null == void 0 ); +new TestCase( SECTION, "void 0 == null", true, void 0 == null ); + +// if type(x) is Number and type(y) is string, return the result of the comparison x == ToNumber(y). + +new TestCase( SECTION, "1 == '1'", true, 1 == '1' ); +new TestCase( SECTION, "255 == '0xff'", true, 255 == '0xff' ); +new TestCase( SECTION, "0 == '\r'", true, 0 == "\r" ); +new TestCase( SECTION, "1e19 == '1e19'", true, 1e19 == "1e19" ); + + +new TestCase( SECTION, "new Boolean(true) == true", true, true == new Boolean(true) ); +new TestCase( SECTION, "new MyObject(true) == true", true, true == new MyObject(true) ); + +new TestCase( SECTION, "new Boolean(false) == false", true, new Boolean(false) == false ); +new TestCase( SECTION, "new MyObject(false) == false", true, new MyObject(false) == false ); + +new TestCase( SECTION, "true == new Boolean(true)", true, true == new Boolean(true) ); +new TestCase( SECTION, "true == new MyObject(true)", true, true == new MyObject(true) ); + +new TestCase( SECTION, "false == new Boolean(false)", true, false == new Boolean(false) ); +new TestCase( SECTION, "false == new MyObject(false)", true, false == new MyObject(false) ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/Expressions/browser.js b/source/spidermonkey-tests/ecma/Expressions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Expressions/shell.js b/source/spidermonkey-tests/ecma/Expressions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-1.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-1.js new file mode 100644 index 00000000..62d66cbc --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-1.js @@ -0,0 +1,102 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.1.1.js + ECMA Section: 15.3.1.1 The Function Constructor Called as a Function + + Description: + When the Function function is called with some arguments p1, p2, . . . , pn, body + (where n might be 0, that is, there are no "p" arguments, and where body might + also not be provided), the following steps are taken: + + 1. Create and return a new Function object exactly if the function constructor had + been called with the same arguments (15.3.2.1). + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.1.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MyObject = Function( "value", "this.value = value; this.valueOf = Function( 'return this.value' ); this.toString = Function( 'return String(this.value);' )" ); + + +var myfunc = Function(); +myfunc.toString = Object.prototype.toString; + +// not going to test toString here since it is implementation dependent. +// new TestCase( SECTION, "myfunc.toString()", "function anonymous() { }", myfunc.toString() ); + +myfunc.toString = Object.prototype.toString; +new TestCase( SECTION, + "myfunc = Function(); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc.toString() ); + +new TestCase( SECTION, + "myfunc.length", + 0, + myfunc.length ); + +new TestCase( SECTION, + "myfunc.prototype.toString()", + "[object Object]", + myfunc.prototype.toString() ); + +new TestCase( SECTION, + "myfunc.prototype.constructor", + myfunc, + myfunc.prototype.constructor ); + +new TestCase( SECTION, + "myfunc.arguments", + null, + myfunc.arguments ); + +new TestCase( SECTION, + "var OBJ = new MyObject(true); OBJ.valueOf()", + true, + eval("var OBJ = new MyObject(true); OBJ.valueOf()") ); + +new TestCase( SECTION, + "OBJ.toString()", + "true", + OBJ.toString() ); + +new TestCase( SECTION, + "OBJ.toString = Object.prototype.toString; OBJ.toString()", + "[object Object]", + eval("OBJ.toString = Object.prototype.toString; OBJ.toString()") ); + +new TestCase( SECTION, + "MyObject.toString = Object.prototype.toString; MyObject.toString()", + "[object Function]", + eval("MyObject.toString = Object.prototype.toString; MyObject.toString()") ); + +new TestCase( SECTION, + "MyObject.length", + 1, + MyObject.length ); + +new TestCase( SECTION, + "MyObject.prototype.constructor", + MyObject, + MyObject.prototype.constructor ); + +new TestCase( SECTION, + "MyObject.arguments", + null, + MyObject.arguments ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-2.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-2.js new file mode 100644 index 00000000..1cea3c1c --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-2.js @@ -0,0 +1,149 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.1.1-2.js + ECMA Section: 15.3.1.1 The Function Constructor Called as a Function + Function(p1, p2, ..., pn, body ) + + Description: + When the Function function is called with some arguments p1, p2, . . . , pn, + body (where n might be 0, that is, there are no "p" arguments, and where body + might also not be provided), the following steps are taken: + + 1. Create and return a new Function object exactly if the function constructor + had been called with the same arguments (15.3.2.1). + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.1.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var myfunc1 = Function("a","b","c", "return a+b+c" ); +var myfunc2 = Function("a, b, c", "return a+b+c" ); +var myfunc3 = Function("a,b", "c", "return a+b+c" ); + +myfunc1.toString = Object.prototype.toString; +myfunc2.toString = Object.prototype.toString; +myfunc3.toString = Object.prototype.toString; + +new TestCase( SECTION, + "myfunc1 = Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc1.toString() ); + +new TestCase( SECTION, + "myfunc1.length", + 3, + myfunc1.length ); + +new TestCase( SECTION, + "myfunc1.prototype.toString()", + "[object Object]", + myfunc1.prototype.toString() ); + +new TestCase( SECTION, + "myfunc1.prototype.constructor", + myfunc1, + myfunc1.prototype.constructor ); + +new TestCase( SECTION, + "myfunc1.arguments", + null, + myfunc1.arguments ); + +new TestCase( SECTION, + "myfunc1(1,2,3)", + 6, + myfunc1(1,2,3) ); + +new TestCase( SECTION, + "var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS", + "", + eval("var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS") ); + +new TestCase( SECTION, + "myfunc2 = Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc2.toString() ); + +new TestCase( SECTION, + "myfunc2.length", + 3, + myfunc2.length ); + +new TestCase( SECTION, + "myfunc2.prototype.toString()", + "[object Object]", + myfunc2.prototype.toString() ); + +new TestCase( SECTION, + "myfunc2.prototype.constructor", + myfunc2, + myfunc2.prototype.constructor ); + +new TestCase( SECTION, + "myfunc2.arguments", + null, + myfunc2.arguments ); + +new TestCase( SECTION, + "myfunc2( 1000, 200, 30 )", + 1230, + myfunc2(1000,200,30) ); + +new TestCase( SECTION, + "var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS", + "", + eval("var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS") ); + +new TestCase( SECTION, + "myfunc3 = Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc3.toString() ); + +new TestCase( SECTION, + "myfunc3.length", + 3, + myfunc3.length ); + +new TestCase( SECTION, + "myfunc3.prototype.toString()", + "[object Object]", + myfunc3.prototype.toString() ); + +new TestCase( SECTION, + "myfunc3.prototype.valueOf() +''", + "[object Object]", + myfunc3.prototype.valueOf() +'' ); + +new TestCase( SECTION, + "myfunc3.prototype.constructor", + myfunc3, + myfunc3.prototype.constructor ); + +new TestCase( SECTION, + "myfunc3.arguments", + null, + myfunc3.arguments ); + +new TestCase( SECTION, + "myfunc3(-100,100,NaN)", + Number.NaN, + myfunc3(-100,100,NaN) ); + +new TestCase( SECTION, + "var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS", + "", + eval("var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-3.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-3.js new file mode 100644 index 00000000..7c3e2b00 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.1.1-3.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.1.1-3.js + ECMA Section: 15.3.1.1 The Function Constructor Called as a Function + + new Function(p1, p2, ..., pn, body ) + + Description: The last argument specifies the body (executable code) + of a function; any preceding arguments sepcify formal + parameters. + + See the text for description of this section. + + This test examples from the specification. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.1.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var args = ""; + +for ( var i = 0; i < 2000; i++ ) { + args += "arg"+i; + if ( i != 1999 ) { + args += ","; + } +} + +var s = ""; + +for ( var i = 0; i < 2000; i++ ) { + s += ".0005"; + if ( i != 1999 ) { + s += ","; + } +} + +MyFunc = Function( args, "var r=0; for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; else r += eval('arg'+i); }; return r"); +MyObject = Function( args, "for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; eval('this.arg'+i +'=arg'+i); };"); + +var MY_OB = eval( "MyFunc("+ s +")" ); + +new TestCase( SECTION, "MyFunc.length", 2000, MyFunc.length ); +new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, MY_OB ); +new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, eval("var MY_OB = MyFunc("+s+"); MY_OB") ); + +new TestCase( SECTION, "MyObject.length", 2000, MyObject.length ); + +new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1.length", 3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1.length") ); +new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1()", 3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1()") ); +new TestCase( SECTION, "FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)", 3, eval("FUN1 = Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-1.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-1.js new file mode 100644 index 00000000..2f3334fd --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-1.js @@ -0,0 +1,98 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.2.1.js + ECMA Section: 15.3.2.1 The Function Constructor + new Function(p1, p2, ..., pn, body ) + + Description: The last argument specifies the body (executable code) + of a function; any preceding arguments sepcify formal + parameters. + + See the text for description of this section. + + This test examples from the specification. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.2.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MyObject = new Function( "value", "this.value = value; this.valueOf = new Function( 'return this.value' ); this.toString = new Function( 'return String(this.value);' )" ); + +var myfunc = new Function(); + +// not going to test toString here since it is implementation dependent. +// new TestCase( SECTION, "myfunc.toString()", "function anonymous() { }", myfunc.toString() ); + +myfunc.toString = Object.prototype.toString; + +new TestCase( SECTION, "myfunc = new Function(); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc.toString() ); + +new TestCase( SECTION, + "myfunc.length", + 0, + myfunc.length ); + +new TestCase( SECTION, + "myfunc.prototype.toString()", + "[object Object]", + myfunc.prototype.toString() ); + +new TestCase( SECTION, + "myfunc.prototype.constructor", + myfunc, + myfunc.prototype.constructor ); + +new TestCase( SECTION, + "myfunc.arguments", + null, + myfunc.arguments ); + +new TestCase( SECTION, + "var OBJ = new MyObject(true); OBJ.valueOf()", + true, + eval("var OBJ = new MyObject(true); OBJ.valueOf()") ); + +new TestCase( SECTION, + "OBJ.toString()", + "true", + OBJ.toString() ); + +new TestCase( SECTION, + "OBJ.toString = Object.prototype.toString; OBJ.toString()", "[object Object]", + eval("OBJ.toString = Object.prototype.toString; OBJ.toString()") ); + +new TestCase( SECTION, + "MyObject.toString = Object.prototype.toString; MyObject.toString()", + "[object Function]", + eval("MyObject.toString = Object.prototype.toString; MyObject.toString()") ); + +new TestCase( SECTION, + "MyObject.length", + 1, + MyObject.length ); + +new TestCase( SECTION, + "MyObject.prototype.constructor", + MyObject, + MyObject.prototype.constructor ); + +new TestCase( SECTION, + "MyObject.arguments", + null, + MyObject.arguments ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-2.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-2.js new file mode 100644 index 00000000..7740480a --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-2.js @@ -0,0 +1,73 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.2.1.js + ECMA Section: 15.3.2.1 The Function Constructor + new Function(p1, p2, ..., pn, body ) + + Description: + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.2.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var myfunc1 = new Function("a","b","c", "return a+b+c" ); +var myfunc2 = new Function("a, b, c", "return a+b+c" ); +var myfunc3 = new Function("a,b", "c", "return a+b+c" ); + +myfunc1.toString = Object.prototype.toString; +myfunc2.toString = Object.prototype.toString; +myfunc3.toString = Object.prototype.toString; + +new TestCase( SECTION, "myfunc1 = new Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc1.toString() ); + +new TestCase( SECTION, "myfunc1.length", 3, myfunc1.length ); +new TestCase( SECTION, "myfunc1.prototype.toString()", "[object Object]", myfunc1.prototype.toString() ); + +new TestCase( SECTION, "myfunc1.prototype.constructor", myfunc1, myfunc1.prototype.constructor ); +new TestCase( SECTION, "myfunc1.arguments", null, myfunc1.arguments ); +new TestCase( SECTION, "myfunc1(1,2,3)", 6, myfunc1(1,2,3) ); +new TestCase( SECTION, "var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS", + "", + eval("var MYPROPS = ''; for ( var p in myfunc1.prototype ) { MYPROPS += p; }; MYPROPS") ); + +new TestCase( SECTION, "myfunc2 = new Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc2.toString() ); +new TestCase( SECTION, "myfunc2.length", 3, myfunc2.length ); +new TestCase( SECTION, "myfunc2.prototype.toString()", "[object Object]", myfunc2.prototype.toString() ); + +new TestCase( SECTION, "myfunc2.prototype.constructor", myfunc2, myfunc2.prototype.constructor ); +new TestCase( SECTION, "myfunc2.arguments", null, myfunc2.arguments ); +new TestCase( SECTION, "myfunc2( 1000, 200, 30 )", 1230, myfunc2(1000,200,30) ); +new TestCase( SECTION, "var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS", + "", + eval("var MYPROPS = ''; for ( var p in myfunc2.prototype ) { MYPROPS += p; }; MYPROPS") ); + +new TestCase( SECTION, "myfunc3 = new Function('a','b','c'); myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + myfunc3.toString() ); +new TestCase( SECTION, "myfunc3.length", 3, myfunc3.length ); +new TestCase( SECTION, "myfunc3.prototype.toString()", "[object Object]", myfunc3.prototype.toString() ); +new TestCase( SECTION, "myfunc3.prototype.valueOf() +''", "[object Object]", myfunc3.prototype.valueOf() +'' ); +new TestCase( SECTION, "myfunc3.prototype.constructor", myfunc3, myfunc3.prototype.constructor ); +new TestCase( SECTION, "myfunc3.arguments", null, myfunc3.arguments ); +new TestCase( SECTION, "myfunc3(-100,100,NaN)", Number.NaN, myfunc3(-100,100,NaN) ); + +new TestCase( SECTION, "var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS", + "", + eval("var MYPROPS = ''; for ( var p in myfunc3.prototype ) { MYPROPS += p; }; MYPROPS") ); +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-3.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-3.js new file mode 100644 index 00000000..36860057 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.2.1-3.js @@ -0,0 +1,61 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.2.1-3.js + ECMA Section: 15.3.2.1 The Function Constructor + new Function(p1, p2, ..., pn, body ) + + Description: The last argument specifies the body (executable code) + of a function; any preceding arguments sepcify formal + parameters. + + See the text for description of this section. + + This test examples from the specification. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.2.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var args = ""; + +for ( var i = 0; i < 2000; i++ ) { + args += "arg"+i; + if ( i != 1999 ) { + args += ","; + } +} + +var s = ""; + +for ( var i = 0; i < 2000; i++ ) { + s += ".0005"; + if ( i != 1999 ) { + s += ","; + } +} + +MyFunc = new Function( args, "var r=0; for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; else r += eval('arg'+i); }; return r"); +MyObject = new Function( args, "for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; eval('this.arg'+i +'=arg'+i); };"); + +new TestCase( SECTION, "MyFunc.length", 2000, MyFunc.length ); +new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, eval("var MY_OB = MyFunc("+s+"); MY_OB") ); + +new TestCase( SECTION, "MyObject.length", 2000, MyObject.length ); + +new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length") ); +new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()") ); +new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-2.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-2.js new file mode 100644 index 00000000..c3a3f26b --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.3.1-2.js + ECMA Section: 15.3.3.1 Properties of the Function Constructor + Function.prototype + + Description: The initial value of Function.prototype is the built-in + Function prototype object. + + This property shall have the attributes [DontEnum | + DontDelete | ReadOnly] + + This test the DontEnum property of Function.prototype. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.3.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var str='';for (prop in Function ) str += prop; str;", + "", + eval("var str='';for (prop in Function) str += prop; str;") + ); +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-3.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-3.js new file mode 100644 index 00000000..c1192875 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-3.js @@ -0,0 +1,45 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.3.1-3.js + ECMA Section: 15.3.3.1 Properties of the Function Constructor + Function.prototype + + Description: The initial value of Function.prototype is the built-in + Function prototype object. + + This property shall have the attributes [DontEnum | + DontDelete | ReadOnly] + + This test the DontDelete property of Function.prototype. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.3.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var FUN_PROTO = Function.prototype; + +new TestCase( SECTION, + "delete Function.prototype", + false, + delete Function.prototype + ); + +new TestCase( SECTION, + "delete Function.prototype; Function.prototype", + FUN_PROTO, + eval("delete Function.prototype; Function.prototype") + ); +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-4.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-4.js new file mode 100644 index 00000000..3b5b64dc --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.1-4.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.3.1-4.js + ECMA Section: 15.3.3.1 Properties of the Function Constructor + Function.prototype + + Description: The initial value of Function.prototype is the built-in + Function prototype object. + + This property shall have the attributes [DontEnum | + DontDelete | ReadOnly] + + This test the ReadOnly property of Function.prototype. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.3.1-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Function.prototype = null; Function.prototype", + Function.prototype, + eval("Function.prototype = null; Function.prototype") + ); +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.2.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.2.js new file mode 100644 index 00000000..d9246310 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.3.2.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.3.2.js + ECMA Section: 15.3.3.2 Properties of the Function Constructor + Function.length + + Description: The length property is 1. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.3.3.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function.length"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "Function.length", 1, Function.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4-1.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4-1.js new file mode 100644 index 00000000..49892a38 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4-1.js @@ -0,0 +1,60 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.4-1.js + ECMA Section: 15.3.4 Properties of the Function Prototype Object + + Description: The Function prototype object is itself a Function + object ( its [[Class]] is "Function") that, when + invoked, accepts any arguments and returns undefined. + + The value of the internal [[Prototype]] property + object is the Object prototype object. + + It is a function with an "empty body"; if it is + invoked, it merely returns undefined. + + The Function prototype object does not have a valueOf + property of its own; however it inherits the valueOf + property from the Object prototype Object. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.3.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Function Prototype Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + eval("var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()")); + + +// new TestCase( SECTION, "Function.prototype.__proto__", Object.prototype, Function.prototype.__proto__ ); + +new TestCase( SECTION, + "Function.prototype.valueOf", + Object.prototype.valueOf, + Function.prototype.valueOf ); + +new TestCase( SECTION, + "Function.prototype()", + (void 0), + Function.prototype() ); + +new TestCase( SECTION, + "Function.prototype(1,true,false,'string', new Date(),null)", + (void 0), + Function.prototype(1,true,false,'string', new Date(),null) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4.1.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4.1.js new file mode 100644 index 00000000..e8f669d4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4.1.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.4.1.js + ECMA Section: 15.3.4.1 Function.prototype.constructor + + Description: The initial value of Function.prototype.constructor + is the built-in Function constructor. + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.3.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function.prototype.constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "Function.prototype.constructor", Function, Function.prototype.constructor ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4.js new file mode 100644 index 00000000..3ce16e9f --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.4.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.4.js + ECMA Section: 15.3.4 Properties of the Function Prototype Object + + Description: The Function prototype object is itself a Function + object ( its [[Class]] is "Function") that, when + invoked, accepts any arguments and returns undefined. + + The value of the internal [[Prototype]] property + object is the Object prototype object. + + It is a function with an "empty body"; if it is + invoked, it merely returns undefined. + + The Function prototype object does not have a valueOf + property of its own; however it inherits the valueOf + property from the Object prototype Object. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Function Prototype Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()", + "[object Function]", + eval("var myfunc = Function.prototype; myfunc.toString = Object.prototype.toString; myfunc.toString()")); + + +// new TestCase( SECTION, "Function.prototype.__proto__", Object.prototype, Function.prototype.__proto__ ); +new TestCase( SECTION, "Function.prototype.valueOf", Object.prototype.valueOf, Function.prototype.valueOf ); +new TestCase( SECTION, "Function.prototype()", (void 0), Function.prototype() ); +new TestCase( SECTION, "Function.prototype(1,true,false,'string', new Date(),null)", (void 0), Function.prototype(1,true,false,'string', new Date(),null) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5-1.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5-1.js new file mode 100644 index 00000000..b6561ab9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5-1.js @@ -0,0 +1,83 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.5-1.js + ECMA Section: 15.3.5 Properties of Function Instances + new Function(p1, p2, ..., pn, body ) + + Description: + + 15.3.5.1 length + + The value of the length property is usually an integer that indicates + the "typical" number of arguments expected by the function. However, + the language permits the function to be invoked with some other number + of arguments. The behavior of a function when invoked on a number of + arguments other than the number specified by its length property depends + on the function. + + 15.3.5.2 prototype + The value of the prototype property is used to initialize the internal [[ + Prototype]] property of a newly created object before the Function object + is invoked as a constructor for that newly created object. + + 15.3.5.3 arguments + + The value of the arguments property is normally null if there is no + outstanding invocation of the function in progress (that is, the function has been called + but has not yet returned). When a non-internal Function object (15.3.2.1) is invoked, its + arguments property is "dynamically bound" to a newly created object that contains the + arguments on which it was invoked (see 10.1.6 and 10.1.8). Note that the use of this + property is discouraged; it is provided principally for compatibility with existing old code. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.3.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of Function Instances"; + +writeHeaderToLog( SECTION + " "+TITLE); + +var args = ""; + +for ( var i = 0; i < 2000; i++ ) { + args += "arg"+i; + if ( i != 1999 ) { + args += ","; + } +} + +var s = ""; + +for ( var i = 0; i < 2000; i++ ) { + s += ".0005"; + if ( i != 1999 ) { + s += ","; + } +} + +MyFunc = new Function( args, "var r=0; for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; else r += eval('arg'+i); }; return r"); +MyObject = new Function( args, "for (var i = 0; i < MyFunc.length; i++ ) { if ( eval('arg'+i) == void 0) break; eval('this.arg'+i +'=arg'+i); };"); + + +new TestCase( SECTION, "MyFunc.length", 2000, MyFunc.length ); +new TestCase( SECTION, "var MY_OB = eval('MyFunc(s)')", 1, eval("var MY_OB = MyFunc("+s+"); MY_OB") ); +new TestCase( SECTION, "MyFunc.prototype.toString()", "[object Object]", MyFunc.prototype.toString() ); +new TestCase( SECTION, "typeof MyFunc.prototype", "object", typeof MyFunc.prototype ); + + +new TestCase( SECTION, "MyObject.length", 2000, MyObject.length ); + +new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1.length") ); +new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1()") ); +new TestCase( SECTION, "FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)", 3, eval("FUN1 = new Function( 'a','b','c', 'return FUN1.length' ); FUN1(1,2,3,4,5)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5-2.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5-2.js new file mode 100644 index 00000000..50593481 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5-2.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.5-1.js + ECMA Section: 15.3.5 Properties of Function Instances + new Function(p1, p2, ..., pn, body ) + + Description: + + 15.3.5.1 length + + The value of the length property is usually an integer that indicates + the "typical" number of arguments expected by the function. However, + the language permits the function to be invoked with some other number + of arguments. The behavior of a function when invoked on a number of + arguments other than the number specified by its length property depends + on the function. + + 15.3.5.2 prototype + The value of the prototype property is used to initialize the internal [[ + Prototype]] property of a newly created object before the Function object + is invoked as a constructor for that newly created object. + + 15.3.5.3 arguments + + The value of the arguments property is normally null if there is no + outstanding invocation of the function in progress (that is, the function has been called + but has not yet returned). When a non-internal Function object (15.3.2.1) is invoked, its + arguments property is "dynamically bound" to a newly created object that contains the + arguments on which it was invoked (see 10.1.6 and 10.1.8). Note that the use of this + property is discouraged; it is provided principally for compatibility with existing old code. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.3.5-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of Function Instances"; + +writeHeaderToLog( SECTION + " "+TITLE); + +var MyObject = new Function( 'a', 'b', 'c', 'this.a = a; this.b = b; this.c = c; this.value = a+b+c; this.valueOf = new Function( "return this.value" )' ); + +new TestCase( SECTION, "MyObject.length", 3, MyObject.length ); +new TestCase( SECTION, "typeof MyObject.prototype", "object", typeof MyObject.prototype ); +new TestCase( SECTION, "typeof MyObject.prototype.constructor", "function", typeof MyObject.prototype.constructor ); +new TestCase( SECTION, "MyObject.arguments", null, MyObject.arguments ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5.1.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5.1.js new file mode 100644 index 00000000..5a6eb145 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5.1.js @@ -0,0 +1,49 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.5.1.js + ECMA Section: Function.length + Description: + + The value of the length property is usually an integer that indicates the + "typical" number of arguments expected by the function. However, the + language permits the function to be invoked with some other number of + arguments. The behavior of a function when invoked on a number of arguments + other than the number specified by its length property depends on the function. + + this test needs a 1.2 version check. + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104204 + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.3.5.1"; +var VERSION = "ECMA_1"; +var TITLE = "Function.length"; +var BUGNUMBER="104204"; +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var f = new Function( "a","b", "c", "return f.length"); + +new TestCase( SECTION, + 'var f = new Function( "a","b", "c", "return f.length"); f()', + 3, + f() ); + + +new TestCase( SECTION, + 'var f = new Function( "a","b", "c", "return f.length"); f(1,2,3,4,5)', + 3, + f(1,2,3,4,5) ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5.3.js b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5.3.js new file mode 100644 index 00000000..6274d310 --- /dev/null +++ b/source/spidermonkey-tests/ecma/FunctionObjects/15.3.5.3.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.5.3.js + ECMA Section: Function.arguments + Description: + + The value of the arguments property is normally null if there is no + outstanding invocation of the function in progress (that is, the + function has been called but has not yet returned). When a non-internal + Function object (15.3.2.1) is invoked, its arguments property is + "dynamically bound" to a newly created object that contains the arguments + on which it was invoked (see 10.1.6 and 10.1.8). Note that the use of this + property is discouraged; it is provided principally for compatibility + with existing old code. + + See sections 10.1.6 and 10.1.8 for more extensive tests. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.3.5.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Function.arguments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MYFUNCTION = new Function( "return this.arguments" ); + +new TestCase( SECTION, "var MYFUNCTION = new Function( 'return this.arguments' ); MYFUNCTION.arguments", null, MYFUNCTION.arguments ); + +test(); diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/browser.js b/source/spidermonkey-tests/ecma/FunctionObjects/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/FunctionObjects/shell.js b/source/spidermonkey-tests/ecma/FunctionObjects/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1-1-n.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1-1-n.js new file mode 100644 index 00000000..5f9e2128 --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1-1-n.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1-1-n.js + ECMA Section: The global object + Description: + + The global object does not have a [[Construct]] property; it is not + possible to use the global object as a constructor with the new operator. + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.1-1-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Global Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var MY_GLOBAL = new this()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var MY_GLOBAL = new this()", + "error", + eval("var MY_GLOBAL = new this()") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1-2-n.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1-2-n.js new file mode 100644 index 00000000..4307914c --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1-2-n.js @@ -0,0 +1,33 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1-2-n.js + ECMA Section: The global object + Description: + + The global object does not have a [[Call]] property; it is not possible + to invoke the global object as a function. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.1-2-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Global Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var MY_GLOBAL = this()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var MY_GLOBAL = this()", + "error", + eval("var MY_GLOBAL = this()") ); +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.1.1.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.1.1.js new file mode 100644 index 00000000..b37eca38 --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.1.1.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.1.1.js + ECMA Section: 15.1.1.1 NaN + + Description: The initial value of NaN is NaN. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.1.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "NaN"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, "NaN", Number.NaN, NaN ); +new TestCase( SECTION, "this.NaN", Number.NaN, this.NaN ); +new TestCase( SECTION, "typeof NaN", "number", typeof NaN ); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.1.2.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.1.2.js new file mode 100644 index 00000000..970b3847 --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.1.2.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.1.2.js + ECMA Section: 15.1.1.2 Infinity + + Description: The initial value of Infinity is +Infinity. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.1.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Infinity"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "Infinity", Number.POSITIVE_INFINITY, Infinity ); +new TestCase( SECTION, "this.Infinity", Number.POSITIVE_INFINITY, this.Infinity ); +new TestCase( SECTION, "typeof Infinity", "number", typeof Infinity ); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.1-2.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.1-2.js new file mode 100644 index 00000000..3737275a --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.1-2.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.1-2.js + ECMA Section: 15.1.2.1 eval(x) + + Parse x as an ECMAScript Program. If the parse fails, + generate a runtime error. Evaluate the program. If + result is "Normal completion after value V", return + the value V. Else, return undefined. + Description: + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.1.2.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "eval(x)"; +var BUGNUMBER = "none"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "d = new Date(0); with (d) { x = getUTCMonth() +'/'+ getUTCDate() +'/'+ getUTCFullYear(); } x", + "0/1/1970", + eval( "d = new Date(0); with (d) { x = getUTCMonth() +'/'+ getUTCDate() +'/'+ getUTCFullYear(); } x" )); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.2-1.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.2-1.js new file mode 100644 index 00000000..e7f097da --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.2-1.js @@ -0,0 +1,378 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.2-1.js + ECMA Section: 15.1.2.2 Function properties of the global object + parseInt( string, radix ) + + Description: + + The parseInt function produces an integer value dictated by intepretation + of the contents of the string argument according to the specified radix. + + When the parseInt function is called, the following steps are taken: + + 1. Call ToString(string). + 2. Compute a substring of Result(1) consisting of the leftmost character + that is not a StrWhiteSpaceChar and all characters to the right of + that character. (In other words, remove leading whitespace.) + 3. Let sign be 1. + 4. If Result(2) is not empty and the first character of Result(2) is a + minus sign -, let sign be -1. + 5. If Result(2) is not empty and the first character of Result(2) is a + plus sign + or a minus sign -, then Result(5) is the substring of + Result(2) produced by removing the first character; otherwise, Result(5) + is Result(2). + 6. If the radix argument is not supplied, go to step 12. + 7. Call ToInt32(radix). + 8. If Result(7) is zero, go to step 12; otherwise, if Result(7) < 2 or + Result(7) > 36, return NaN. + 9. Let R be Result(7). + 10. If R = 16 and the length of Result(5) is at least 2 and the first two + characters of Result(5) are either "0x" or "0X", let S be the substring + of Result(5) consisting of all but the first two characters; otherwise, + let S be Result(5). + 11. Go to step 22. + 12. If Result(5) is empty or the first character of Result(5) is not 0, + go to step 20. + 13. If the length of Result(5) is at least 2 and the second character of + Result(5) is x or X, go to step 17. + 14. Let R be 8. + 15. Let S be Result(5). + 16. Go to step 22. + 17. Let R be 16. + 18. Let S be the substring of Result(5) consisting of all but the first + two characters. + 19. Go to step 22. + 20. Let R be 10. + 21. Let S be Result(5). + 22. If S contains any character that is not a radix-R digit, then let Z be + the substring of S consisting of all characters to the left of the + leftmost such character; otherwise, let Z be S. + 23. If Z is empty, return NaN. + 24. Compute the mathematical integer value that is represented by Z in + radix-R notation. (But if R is 10 and Z contains more than 20 + significant digits, every digit after the 20th may be replaced by a 0 + digit, at the option of the implementation; and if R is not 2, 4, 8, + 10, 16, or 32, then Result(24) may be an implementation-dependent + approximation to the mathematical integer value that is represented + by Z in radix-R notation.) + 25. Compute the number value for Result(24). + 26. Return sign Result(25). + + Note that parseInt may interpret only a leading portion of the string as + an integer value; it ignores any characters that cannot be interpreted as + part of the notation of an integer, and no indication is given that any + such characters were ignored. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.2.2-1"; +var VERSION = "ECMA_1"; +var TITLE = "parseInt(string, radix)"; +var BUGNUMBER = "none"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var HEX_STRING = "0x0"; +var HEX_VALUE = 0; + +new TestCase( SECTION, + "parseInt.length", + 2, + parseInt.length ); + +new TestCase( SECTION, + "parseInt.length = 0; parseInt.length", + 2, + eval("parseInt.length = 0; parseInt.length") ); + +new TestCase( SECTION, + "var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS", "", + eval("var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS") ); + +new TestCase( SECTION, + "delete parseInt.length", + false, + delete parseInt.length ); + +new TestCase( SECTION, + "delete parseInt.length; parseInt.length", + 2, + eval("delete parseInt.length; parseInt.length") ); + +new TestCase( SECTION, + "parseInt.length = null; parseInt.length", + 2, + eval("parseInt.length = null; parseInt.length") ); + +new TestCase( SECTION, + "parseInt()", + NaN, + parseInt() ); + +new TestCase( SECTION, + "parseInt('')", + NaN, + parseInt("") ); + +new TestCase( SECTION, + "parseInt('','')", + NaN, + parseInt("","") ); + +new TestCase( SECTION, + "parseInt(\" 0xabcdef ", + 11259375, + parseInt( " 0xabcdef " )); + +new TestCase( SECTION, + "parseInt(\" 0XABCDEF ", + 11259375, + parseInt( " 0XABCDEF " ) ); + +new TestCase( SECTION, + "parseInt( 0xabcdef )", + 11259375, + parseInt( "0xabcdef") ); + +new TestCase( SECTION, + "parseInt( 0XABCDEF )", + 11259375, + parseInt( "0XABCDEF") ); + +for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "0X0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"', null)", HEX_VALUE, parseInt(HEX_STRING,null) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"', void 0)", HEX_VALUE, parseInt(HEX_STRING, void 0) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} + +// a few tests with spaces + +for ( var space = " ", HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; + POWER < 15; + POWER++, HEX_STRING = HEX_STRING +"f", space += " ") +{ + new TestCase( SECTION, "parseInt('"+space+HEX_STRING+space+"', void 0)", HEX_VALUE, parseInt(space+HEX_STRING+space, void 0) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} + +new TestCase(SECTION, "parseInt(BOM + '123', 10)", 123, parseInt("\uFEFF" + "123", 10)); + +// a few tests with negative numbers +for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) ); + HEX_VALUE -= Math.pow(16,POWER)*15; +} + +// we should stop parsing when we get to a value that is not a numeric literal for the type we expect + +for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"g', 16)", HEX_VALUE, parseInt(HEX_STRING+"g",16) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"G', 16)", HEX_VALUE, parseInt(HEX_STRING+"G",16) ); + HEX_VALUE += Math.pow(16,POWER)*15; +} + +for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) ); + HEX_VALUE -= Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "-0X0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"')", HEX_VALUE, parseInt(HEX_STRING) ); + HEX_VALUE -= Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) ); + HEX_VALUE -= Math.pow(16,POWER)*15; +} +for ( HEX_STRING = "-0x0", HEX_VALUE = 0, POWER = 0; POWER < 15; POWER++, HEX_STRING = HEX_STRING +"f" ) { + new TestCase( SECTION, "parseInt('"+HEX_STRING+"', 16)", HEX_VALUE, parseInt(HEX_STRING,16) ); + HEX_VALUE -= Math.pow(16,POWER)*15; +} + +// Numbers that start with 0 and do not provide a radix should use 10 as radix +// per ES5, not octal (as it was in ES3). + +var OCT_STRING = "0"; +var OCT_VALUE = 0; + +for ( OCT_STRING = "0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) { + new TestCase( SECTION, "parseInt('"+OCT_STRING+"')", OCT_VALUE, parseInt(OCT_STRING) ); + OCT_VALUE += Math.pow(10,POWER)*7; +} + +for ( OCT_STRING = "-0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) { + new TestCase( SECTION, "parseInt('"+OCT_STRING+"')", OCT_VALUE, parseInt(OCT_STRING) ); + OCT_VALUE -= Math.pow(10,POWER)*7; +} + +// should get octal-based results if we provid the radix of 8 (or 010) + +for ( OCT_STRING = "0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) { + new TestCase( SECTION, "parseInt('"+OCT_STRING+"', 8)", OCT_VALUE, parseInt(OCT_STRING,8) ); + OCT_VALUE += Math.pow(8,POWER)*7; +} +for ( OCT_STRING = "-0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) { + new TestCase( SECTION, "parseInt('"+OCT_STRING+"', 010)", OCT_VALUE, parseInt(OCT_STRING,010) ); + OCT_VALUE -= Math.pow(8,POWER)*7; +} + +// we shall stop parsing digits when we get one that isn't a numeric literal of the type we think +// it should be. +for ( OCT_STRING = "0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) { + new TestCase( SECTION, "parseInt('"+OCT_STRING+"8', 8)", OCT_VALUE, parseInt(OCT_STRING+"8",8) ); + OCT_VALUE += Math.pow(8,POWER)*7; +} +for ( OCT_STRING = "-0", OCT_VALUE = 0, POWER = 0; POWER < 15; POWER++, OCT_STRING = OCT_STRING +"7" ) { + new TestCase( SECTION, "parseInt('"+OCT_STRING+"8', 010)", OCT_VALUE, parseInt(OCT_STRING+"8",010) ); + OCT_VALUE -= Math.pow(8,POWER)*7; +} + +new TestCase( SECTION, + "parseInt( '0x' )", + NaN, + parseInt("0x") ); + +new TestCase( SECTION, + "parseInt( '0X' )", + NaN, + parseInt("0X") ); + +new TestCase( SECTION, + "parseInt( '11111111112222222222' )", + 11111111112222222222, + parseInt("11111111112222222222") ); + +new TestCase( SECTION, + "parseInt( '111111111122222222223' )", + 111111111122222222220, + parseInt("111111111122222222223") ); + +new TestCase( SECTION, + "parseInt( '11111111112222222222',10 )", + 11111111112222222222, + parseInt("11111111112222222222",10) ); + +new TestCase( SECTION, + "parseInt( '111111111122222222223',10 )", + 111111111122222222220, + parseInt("111111111122222222223",10) ); + +new TestCase( SECTION, + "parseInt( '01234567890', -1 )", + Number.NaN, + parseInt("01234567890",-1) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 0 )", + 1234567890, + parseInt("01234567890", 0) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 1 )", + Number.NaN, + parseInt("01234567890",1) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 2 )", + 1, + parseInt("01234567890",2) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 3 )", + 5, + parseInt("01234567890",3) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 4 )", + 27, + parseInt("01234567890",4) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 5 )", + 194, + parseInt("01234567890",5) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 6 )", + 1865, + parseInt("01234567890",6) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 7 )", + 22875, + parseInt("01234567890",7) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 8 )", + 342391, + parseInt("01234567890",8) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 9 )", + 6053444, + parseInt("01234567890",9) ); + +new TestCase( SECTION, + "parseInt( '01234567890', 10 )", + 1234567890, + parseInt("01234567890",10) ); + +// need more test cases with hex radix + +new TestCase( SECTION, + "parseInt( '1234567890', '0xa')", + 1234567890, + parseInt("1234567890","0xa") ); + +new TestCase( SECTION, + "parseInt( '012345', 11 )", + 17715, + parseInt("012345",11) ); + +new TestCase( SECTION, + "parseInt( '012345', 35 )", + 1590195, + parseInt("012345",35) ); + +new TestCase( SECTION, + "parseInt( '012345', 36 )", + 1776965, + parseInt("012345",36) ); + +new TestCase( SECTION, + "parseInt( '012345', 37 )", + Number.NaN, + parseInt("012345",37) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.2-2.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.2-2.js new file mode 100644 index 00000000..d6692b4a --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.2-2.js @@ -0,0 +1,209 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.2-1.js + ECMA Section: 15.1.2.2 Function properties of the global object + parseInt( string, radix ) + + Description: parseInt test cases written by waldemar, and documented in + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=123874. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.2.2-2"; +var VERSION = "ECMA_1"; +var TITLE = "parseInt(string, radix)"; +var BUGNUMBER = "none"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + 'parseInt("000000100000000100100011010001010110011110001001101010111100",2)', + 9027215253084860, + parseInt("000000100000000100100011010001010110011110001001101010111100",2) ); + +new TestCase( SECTION, + 'parseInt("000000100000000100100011010001010110011110001001101010111101",2)', + 9027215253084860, + parseInt("000000100000000100100011010001010110011110001001101010111101",2)); + +new TestCase( SECTION, + 'parseInt("000000100000000100100011010001010110011110001001101010111111",2)', + 9027215253084864, + parseInt("000000100000000100100011010001010110011110001001101010111111",2) ); + +new TestCase( SECTION, + 'parseInt("0000001000000001001000110100010101100111100010011010101111010",2)', + 18054430506169720, + parseInt("0000001000000001001000110100010101100111100010011010101111010",2) ); + +new TestCase( SECTION, + 'parseInt("0000001000000001001000110100010101100111100010011010101111011",2)', + 18054430506169724, + parseInt("0000001000000001001000110100010101100111100010011010101111011",2)); + +new TestCase( SECTION, + 'parseInt("0000001000000001001000110100010101100111100010011010101111100",2)', + 18054430506169724, + parseInt("0000001000000001001000110100010101100111100010011010101111100",2) ); + +new TestCase( SECTION, + 'parseInt("0000001000000001001000110100010101100111100010011010101111110",2)', + 18054430506169728, + parseInt("0000001000000001001000110100010101100111100010011010101111110",2) ); + +new TestCase( SECTION, + 'parseInt("yz",35)', + 34, + parseInt("yz",35) ); + +new TestCase( SECTION, + 'parseInt("yz",36)', + 1259, + parseInt("yz",36) ); + +new TestCase( SECTION, + 'parseInt("yz",37)', + NaN, + parseInt("yz",37) ); + +new TestCase( SECTION, + 'parseInt("+77")', + 77, + parseInt("+77") ); + +new TestCase( SECTION, + 'parseInt("-77",9)', + -70, + parseInt("-77",9) ); + +new TestCase( SECTION, + 'parseInt("\u20001234\u2000")', + 1234, + parseInt("\u20001234\u2000") ); + +new TestCase( SECTION, + 'parseInt("123456789012345678")', + 123456789012345680, + parseInt("123456789012345678") ); + +new TestCase( SECTION, + 'parseInt("9",8)', + NaN, + parseInt("9",8) ); + +new TestCase( SECTION, + 'parseInt("1e2")', + 1, + parseInt("1e2") ); + +new TestCase( SECTION, + 'parseInt("1.9999999999999999999")', + 1, + parseInt("1.9999999999999999999") ); + +new TestCase( SECTION, + 'parseInt("0x10")', + 16, + parseInt("0x10") ); + +new TestCase( SECTION, + 'parseInt("0x10",10)', + 0, + parseInt("0x10",10)); + +new TestCase( SECTION, + 'parseInt("0022")', + 22, + parseInt("0022")); + +new TestCase( SECTION, + 'parseInt("0022", 8)', + 18, + parseInt("0022", 8)); + +new TestCase( SECTION, + 'parseInt("0022", 10)', + 22, + parseInt("0022", 10) ); + +new TestCase( SECTION, + 'parseInt("0x1000000000000080")', + 1152921504606847000, + parseInt("0x1000000000000080") ); + +new TestCase( SECTION, + 'parseInt("0x1000000000000081")', + 1152921504606847200, + parseInt("0x1000000000000081") ); + +s = + "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + + s += "0000000000000000000000000000000000000"; + +new TestCase( SECTION, + "s = " + s +"; -s", + -1.7976931348623157e+308, + -s ); + +s = + "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; +s += "0000000000000000000000000000000000001"; + +new TestCase( SECTION, + "s = " + s +"; -s", + -1.7976931348623157e+308, + -s ); + + +s = "0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + +s += "0000000000000000000000000000000000000" + + +new TestCase( SECTION, + "s = " + s + "; -s", + -Infinity, + -s ); + +s = "0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; +s += "0000000000000000000000000000000000001"; + +new TestCase( SECTION, + "s = " + s + "; -s", + -1.7976931348623157e+308, + -s ); + +s += "0" + +new TestCase( SECTION, + "s = " + s + "; -s", + -Infinity, + -s ); + +new TestCase( SECTION, + 'parseInt(s)', + Infinity, + parseInt(s) ); + +new TestCase( SECTION, + 'parseInt(s,32)', + 0, + parseInt(s,32) ); + +new TestCase( SECTION, + 'parseInt(s,36)', + Infinity, + parseInt(s,36)); + +test(); + diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.3-1.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.3-1.js new file mode 100644 index 00000000..1963c10b --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.3-1.js @@ -0,0 +1,407 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.3.js + ECMA Section: 15.1.2.3 Function properties of the global object: + parseFloat( string ) + + Description: The parseFloat function produces a number value dictated + by the interpretation of the contents of the string + argument defined as a decimal literal. + + When the parseFloat function is called, the following + steps are taken: + + 1. Call ToString( string ). + 2. Remove leading whitespace Result(1). + 3. If neither Result(2) nor any prefix of Result(2) + satisfies the syntax of a StrDecimalLiteral, + return NaN. + 4. Compute the longest prefix of Result(2) which might + be Resusult(2) itself, that satisfies the syntax of + a StrDecimalLiteral + 5. Return the number value for the MV of Result(4). + + Note that parseFloate may interpret only a leading + portion of the string as a number value; it ignores any + characters that cannot be interpreted as part of the + notation of a decimal literal, and no indication is given + that such characters were ignored. + + StrDecimalLiteral:: + Infinity + DecimalDigits.DecimalDigits opt ExponentPart opt + .DecimalDigits ExponentPart opt + DecimalDigits ExponentPart opt + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.1.2.3-1"; +var VERSION = "ECMA_1"; +var TITLE = "parseFloat(string)"; +var BUGNUMBER="none"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "parseFloat.length", 1, parseFloat.length ); + +new TestCase( SECTION, "parseFloat.length = null; parseFloat.length", 1, eval("parseFloat.length = null; parseFloat.length") ); +new TestCase( SECTION, "delete parseFloat.length", false, delete parseFloat.length ); +new TestCase( SECTION, "delete parseFloat.length; parseFloat.length", 1, eval("delete parseFloat.length; parseFloat.length") ); +new TestCase( SECTION, "var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS") ); + +new TestCase( SECTION, "parseFloat()", Number.NaN, parseFloat() ); +new TestCase( SECTION, "parseFloat('')", Number.NaN, parseFloat('') ); + +new TestCase( SECTION, "parseFloat(' ')", Number.NaN, parseFloat(' ') ); +new TestCase( SECTION, "parseFloat(true)", Number.NaN, parseFloat(true) ); +new TestCase( SECTION, "parseFloat(false)", Number.NaN, parseFloat(false) ); +new TestCase( SECTION, "parseFloat('string')", Number.NaN, parseFloat("string") ); + +new TestCase( SECTION, "parseFloat(' Infinity')", Infinity, parseFloat("Infinity") ); +new TestCase( SECTION, "parseFloat(' Infinity ')", Infinity, parseFloat(' Infinity ') ); + +new TestCase( SECTION, "parseFloat('Infinity')", Infinity, parseFloat("Infinity") ); +new TestCase( SECTION, "parseFloat(Infinity)", Infinity, parseFloat(Infinity) ); + + +new TestCase( SECTION, "parseFloat(' +Infinity')", +Infinity, parseFloat("+Infinity") ); +new TestCase( SECTION, "parseFloat(' -Infinity ')", -Infinity, parseFloat(' -Infinity ') ); + +new TestCase( SECTION, "parseFloat('+Infinity')", +Infinity, parseFloat("+Infinity") ); +new TestCase( SECTION, "parseFloat(-Infinity)", -Infinity, parseFloat(-Infinity) ); + +new TestCase( SECTION, "parseFloat('0')", 0, parseFloat("0") ); +new TestCase( SECTION, "parseFloat('-0')", -0, parseFloat("-0") ); +new TestCase( SECTION, "parseFloat('+0')", 0, parseFloat("+0") ); + +new TestCase( SECTION, "parseFloat('1')", 1, parseFloat("1") ); +new TestCase( SECTION, "parseFloat('-1')", -1, parseFloat("-1") ); +new TestCase( SECTION, "parseFloat('+1')", 1, parseFloat("+1") ); + +new TestCase( SECTION, "parseFloat('2')", 2, parseFloat("2") ); +new TestCase( SECTION, "parseFloat('-2')", -2, parseFloat("-2") ); +new TestCase( SECTION, "parseFloat('+2')", 2, parseFloat("+2") ); + +new TestCase( SECTION, "parseFloat('3')", 3, parseFloat("3") ); +new TestCase( SECTION, "parseFloat('-3')", -3, parseFloat("-3") ); +new TestCase( SECTION, "parseFloat('+3')", 3, parseFloat("+3") ); + +new TestCase( SECTION, "parseFloat('4')", 4, parseFloat("4") ); +new TestCase( SECTION, "parseFloat('-4')", -4, parseFloat("-4") ); +new TestCase( SECTION, "parseFloat('+4')", 4, parseFloat("+4") ); + +new TestCase( SECTION, "parseFloat('5')", 5, parseFloat("5") ); +new TestCase( SECTION, "parseFloat('-5')", -5, parseFloat("-5") ); +new TestCase( SECTION, "parseFloat('+5')", 5, parseFloat("+5") ); + +new TestCase( SECTION, "parseFloat('6')", 6, parseFloat("6") ); +new TestCase( SECTION, "parseFloat('-6')", -6, parseFloat("-6") ); +new TestCase( SECTION, "parseFloat('+6')", 6, parseFloat("+6") ); + +new TestCase( SECTION, "parseFloat('7')", 7, parseFloat("7") ); +new TestCase( SECTION, "parseFloat('-7')", -7, parseFloat("-7") ); +new TestCase( SECTION, "parseFloat('+7')", 7, parseFloat("+7") ); + +new TestCase( SECTION, "parseFloat('8')", 8, parseFloat("8") ); +new TestCase( SECTION, "parseFloat('-8')", -8, parseFloat("-8") ); +new TestCase( SECTION, "parseFloat('+8')", 8, parseFloat("+8") ); + +new TestCase( SECTION, "parseFloat('9')", 9, parseFloat("9") ); +new TestCase( SECTION, "parseFloat('-9')", -9, parseFloat("-9") ); +new TestCase( SECTION, "parseFloat('+9')", 9, parseFloat("+9") ); + +new TestCase( SECTION, "parseFloat('3.14159')", 3.14159, parseFloat("3.14159") ); +new TestCase( SECTION, "parseFloat('-3.14159')", -3.14159, parseFloat("-3.14159") ); +new TestCase( SECTION, "parseFloat('+3.14159')", 3.14159, parseFloat("+3.14159") ); + +new TestCase( SECTION, "parseFloat('3.')", 3, parseFloat("3.") ); +new TestCase( SECTION, "parseFloat('-3.')", -3, parseFloat("-3.") ); +new TestCase( SECTION, "parseFloat('+3.')", 3, parseFloat("+3.") ); + +new TestCase( SECTION, "parseFloat('3.e1')", 30, parseFloat("3.e1") ); +new TestCase( SECTION, "parseFloat('-3.e1')", -30, parseFloat("-3.e1") ); +new TestCase( SECTION, "parseFloat('+3.e1')", 30, parseFloat("+3.e1") ); + +new TestCase( SECTION, "parseFloat('3.e+1')", 30, parseFloat("3.e+1") ); +new TestCase( SECTION, "parseFloat('-3.e+1')", -30, parseFloat("-3.e+1") ); +new TestCase( SECTION, "parseFloat('+3.e+1')", 30, parseFloat("+3.e+1") ); + +new TestCase( SECTION, "parseFloat('3.e-1')", .30, parseFloat("3.e-1") ); +new TestCase( SECTION, "parseFloat('-3.e-1')", -.30, parseFloat("-3.e-1") ); +new TestCase( SECTION, "parseFloat('+3.e-1')", .30, parseFloat("+3.e-1") ); + +// StrDecimalLiteral::: .DecimalDigits ExponentPart opt + +new TestCase( SECTION, "parseFloat('.00001')", 0.00001, parseFloat(".00001") ); +new TestCase( SECTION, "parseFloat('+.00001')", 0.00001, parseFloat("+.00001") ); +new TestCase( SECTION, "parseFloat('-0.0001')", -0.00001, parseFloat("-.00001") ); + +new TestCase( SECTION, "parseFloat('.01e2')", 1, parseFloat(".01e2") ); +new TestCase( SECTION, "parseFloat('+.01e2')", 1, parseFloat("+.01e2") ); +new TestCase( SECTION, "parseFloat('-.01e2')", -1, parseFloat("-.01e2") ); + +new TestCase( SECTION, "parseFloat('.01e+2')", 1, parseFloat(".01e+2") ); +new TestCase( SECTION, "parseFloat('+.01e+2')", 1, parseFloat("+.01e+2") ); +new TestCase( SECTION, "parseFloat('-.01e+2')", -1, parseFloat("-.01e+2") ); + +new TestCase( SECTION, "parseFloat('.01e-2')", 0.0001, parseFloat(".01e-2") ); +new TestCase( SECTION, "parseFloat('+.01e-2')", 0.0001, parseFloat("+.01e-2") ); +new TestCase( SECTION, "parseFloat('-.01e-2')", -0.0001, parseFloat("-.01e-2") ); + +// StrDecimalLiteral::: DecimalDigits ExponentPart opt + +new TestCase( SECTION, "parseFloat('1234e5')", 123400000, parseFloat("1234e5") ); +new TestCase( SECTION, "parseFloat('+1234e5')", 123400000, parseFloat("+1234e5") ); +new TestCase( SECTION, "parseFloat('-1234e5')", -123400000, parseFloat("-1234e5") ); + +new TestCase( SECTION, "parseFloat('1234e+5')", 123400000, parseFloat("1234e+5") ); +new TestCase( SECTION, "parseFloat('+1234e+5')", 123400000, parseFloat("+1234e+5") ); +new TestCase( SECTION, "parseFloat('-1234e+5')", -123400000, parseFloat("-1234e+5") ); + +new TestCase( SECTION, "parseFloat('1234e-5')", 0.01234, parseFloat("1234e-5") ); +new TestCase( SECTION, "parseFloat('+1234e-5')", 0.01234, parseFloat("+1234e-5") ); +new TestCase( SECTION, "parseFloat('-1234e-5')", -0.01234, parseFloat("-1234e-5") ); + + +new TestCase( SECTION, "parseFloat(0)", 0, parseFloat(0) ); +new TestCase( SECTION, "parseFloat(-0)", -0, parseFloat(-0) ); + +new TestCase( SECTION, "parseFloat(1)", 1, parseFloat(1) ); +new TestCase( SECTION, "parseFloat(-1)", -1, parseFloat(-1) ); + +new TestCase( SECTION, "parseFloat(2)", 2, parseFloat(2) ); +new TestCase( SECTION, "parseFloat(-2)", -2, parseFloat(-2) ); + +new TestCase( SECTION, "parseFloat(3)", 3, parseFloat(3) ); +new TestCase( SECTION, "parseFloat(-3)", -3, parseFloat(-3) ); + +new TestCase( SECTION, "parseFloat(4)", 4, parseFloat(4) ); +new TestCase( SECTION, "parseFloat(-4)", -4, parseFloat(-4) ); + +new TestCase( SECTION, "parseFloat(5)", 5, parseFloat(5) ); +new TestCase( SECTION, "parseFloat(-5)", -5, parseFloat(-5) ); + +new TestCase( SECTION, "parseFloat(6)", 6, parseFloat(6) ); +new TestCase( SECTION, "parseFloat(-6)", -6, parseFloat(-6) ); + +new TestCase( SECTION, "parseFloat(7)", 7, parseFloat(7) ); +new TestCase( SECTION, "parseFloat(-7)", -7, parseFloat(-7) ); + +new TestCase( SECTION, "parseFloat(8)", 8, parseFloat(8) ); +new TestCase( SECTION, "parseFloat(-8)", -8, parseFloat(-8) ); + +new TestCase( SECTION, "parseFloat(9)", 9, parseFloat(9) ); +new TestCase( SECTION, "parseFloat(-9)", -9, parseFloat(-9) ); + +new TestCase( SECTION, "parseFloat(3.14159)", 3.14159, parseFloat(3.14159) ); +new TestCase( SECTION, "parseFloat(-3.14159)", -3.14159, parseFloat(-3.14159) ); + +new TestCase( SECTION, "parseFloat(3.)", 3, parseFloat(3.) ); +new TestCase( SECTION, "parseFloat(-3.)", -3, parseFloat(-3.) ); + +new TestCase( SECTION, "parseFloat(3.e1)", 30, parseFloat(3.e1) ); +new TestCase( SECTION, "parseFloat(-3.e1)", -30, parseFloat(-3.e1) ); + +new TestCase( SECTION, "parseFloat(3.e+1)", 30, parseFloat(3.e+1) ); +new TestCase( SECTION, "parseFloat(-3.e+1)", -30, parseFloat(-3.e+1) ); + +new TestCase( SECTION, "parseFloat(3.e-1)", .30, parseFloat(3.e-1) ); +new TestCase( SECTION, "parseFloat(-3.e-1)", -.30, parseFloat(-3.e-1) ); + + +new TestCase( SECTION, "parseFloat(3.E1)", 30, parseFloat(3.E1) ); +new TestCase( SECTION, "parseFloat(-3.E1)", -30, parseFloat(-3.E1) ); + +new TestCase( SECTION, "parseFloat(3.E+1)", 30, parseFloat(3.E+1) ); +new TestCase( SECTION, "parseFloat(-3.E+1)", -30, parseFloat(-3.E+1) ); + +new TestCase( SECTION, "parseFloat(3.E-1)", .30, parseFloat(3.E-1) ); +new TestCase( SECTION, "parseFloat(-3.E-1)", -.30, parseFloat(-3.E-1) ); + +// StrDecimalLiteral::: .DecimalDigits ExponentPart opt + +new TestCase( SECTION, "parseFloat(.00001)", 0.00001, parseFloat(.00001) ); +new TestCase( SECTION, "parseFloat(-0.0001)", -0.00001, parseFloat(-.00001) ); + +new TestCase( SECTION, "parseFloat(.01e2)", 1, parseFloat(.01e2) ); +new TestCase( SECTION, "parseFloat(-.01e2)", -1, parseFloat(-.01e2) ); + +new TestCase( SECTION, "parseFloat(.01e+2)", 1, parseFloat(.01e+2) ); +new TestCase( SECTION, "parseFloat(-.01e+2)", -1, parseFloat(-.01e+2) ); + +new TestCase( SECTION, "parseFloat(.01e-2)", 0.0001, parseFloat(.01e-2) ); +new TestCase( SECTION, "parseFloat(-.01e-2)", -0.0001, parseFloat(-.01e-2) ); + +// StrDecimalLiteral::: DecimalDigits ExponentPart opt + +new TestCase( SECTION, "parseFloat(1234e5)", 123400000, parseFloat(1234e5) ); +new TestCase( SECTION, "parseFloat(-1234e5)", -123400000, parseFloat(-1234e5) ); + +new TestCase( SECTION, "parseFloat(1234e+5)", 123400000, parseFloat(1234e+5) ); +new TestCase( SECTION, "parseFloat(-1234e+5)", -123400000, parseFloat(-1234e+5) ); + +new TestCase( SECTION, "parseFloat(1234e-5)", 0.01234, parseFloat(1234e-5) ); +new TestCase( SECTION, "parseFloat(-1234e-5)", -0.01234, parseFloat(-1234e-5) ); + +// hex cases should all return 0 (0 is the longest string that satisfies a StringDecimalLiteral) + +new TestCase( SECTION, "parseFloat('0x0')", 0, parseFloat("0x0")); +new TestCase( SECTION, "parseFloat('0x1')", 0, parseFloat("0x1")); +new TestCase( SECTION, "parseFloat('0x2')", 0, parseFloat("0x2")); +new TestCase( SECTION, "parseFloat('0x3')", 0, parseFloat("0x3")); +new TestCase( SECTION, "parseFloat('0x4')", 0, parseFloat("0x4")); +new TestCase( SECTION, "parseFloat('0x5')", 0, parseFloat("0x5")); +new TestCase( SECTION, "parseFloat('0x6')", 0, parseFloat("0x6")); +new TestCase( SECTION, "parseFloat('0x7')", 0, parseFloat("0x7")); +new TestCase( SECTION, "parseFloat('0x8')", 0, parseFloat("0x8")); +new TestCase( SECTION, "parseFloat('0x9')", 0, parseFloat("0x9")); +new TestCase( SECTION, "parseFloat('0xa')", 0, parseFloat("0xa")); +new TestCase( SECTION, "parseFloat('0xb')", 0, parseFloat("0xb")); +new TestCase( SECTION, "parseFloat('0xc')", 0, parseFloat("0xc")); +new TestCase( SECTION, "parseFloat('0xd')", 0, parseFloat("0xd")); +new TestCase( SECTION, "parseFloat('0xe')", 0, parseFloat("0xe")); +new TestCase( SECTION, "parseFloat('0xf')", 0, parseFloat("0xf")); +new TestCase( SECTION, "parseFloat('0xA')", 0, parseFloat("0xA")); +new TestCase( SECTION, "parseFloat('0xB')", 0, parseFloat("0xB")); +new TestCase( SECTION, "parseFloat('0xC')", 0, parseFloat("0xC")); +new TestCase( SECTION, "parseFloat('0xD')", 0, parseFloat("0xD")); +new TestCase( SECTION, "parseFloat('0xE')", 0, parseFloat("0xE")); +new TestCase( SECTION, "parseFloat('0xF')", 0, parseFloat("0xF")); + +new TestCase( SECTION, "parseFloat('0X0')", 0, parseFloat("0X0")); +new TestCase( SECTION, "parseFloat('0X1')", 0, parseFloat("0X1")); +new TestCase( SECTION, "parseFloat('0X2')", 0, parseFloat("0X2")); +new TestCase( SECTION, "parseFloat('0X3')", 0, parseFloat("0X3")); +new TestCase( SECTION, "parseFloat('0X4')", 0, parseFloat("0X4")); +new TestCase( SECTION, "parseFloat('0X5')", 0, parseFloat("0X5")); +new TestCase( SECTION, "parseFloat('0X6')", 0, parseFloat("0X6")); +new TestCase( SECTION, "parseFloat('0X7')", 0, parseFloat("0X7")); +new TestCase( SECTION, "parseFloat('0X8')", 0, parseFloat("0X8")); +new TestCase( SECTION, "parseFloat('0X9')", 0, parseFloat("0X9")); +new TestCase( SECTION, "parseFloat('0Xa')", 0, parseFloat("0Xa")); +new TestCase( SECTION, "parseFloat('0Xb')", 0, parseFloat("0Xb")); +new TestCase( SECTION, "parseFloat('0Xc')", 0, parseFloat("0Xc")); +new TestCase( SECTION, "parseFloat('0Xd')", 0, parseFloat("0Xd")); +new TestCase( SECTION, "parseFloat('0Xe')", 0, parseFloat("0Xe")); +new TestCase( SECTION, "parseFloat('0Xf')", 0, parseFloat("0Xf")); +new TestCase( SECTION, "parseFloat('0XA')", 0, parseFloat("0XA")); +new TestCase( SECTION, "parseFloat('0XB')", 0, parseFloat("0XB")); +new TestCase( SECTION, "parseFloat('0XC')", 0, parseFloat("0XC")); +new TestCase( SECTION, "parseFloat('0XD')", 0, parseFloat("0XD")); +new TestCase( SECTION, "parseFloat('0XE')", 0, parseFloat("0XE")); +new TestCase( SECTION, "parseFloat('0XF')", 0, parseFloat("0XF")); +new TestCase( SECTION, "parseFloat(' 0XF ')", 0, parseFloat(" 0XF ")); + +// hex literals should still succeed + +new TestCase( SECTION, "parseFloat(0x0)", 0, parseFloat(0x0)); +new TestCase( SECTION, "parseFloat(0x1)", 1, parseFloat(0x1)); +new TestCase( SECTION, "parseFloat(0x2)", 2, parseFloat(0x2)); +new TestCase( SECTION, "parseFloat(0x3)", 3, parseFloat(0x3)); +new TestCase( SECTION, "parseFloat(0x4)", 4, parseFloat(0x4)); +new TestCase( SECTION, "parseFloat(0x5)", 5, parseFloat(0x5)); +new TestCase( SECTION, "parseFloat(0x6)", 6, parseFloat(0x6)); +new TestCase( SECTION, "parseFloat(0x7)", 7, parseFloat(0x7)); +new TestCase( SECTION, "parseFloat(0x8)", 8, parseFloat(0x8)); +new TestCase( SECTION, "parseFloat(0x9)", 9, parseFloat(0x9)); +new TestCase( SECTION, "parseFloat(0xa)", 10, parseFloat(0xa)); +new TestCase( SECTION, "parseFloat(0xb)", 11, parseFloat(0xb)); +new TestCase( SECTION, "parseFloat(0xc)", 12, parseFloat(0xc)); +new TestCase( SECTION, "parseFloat(0xd)", 13, parseFloat(0xd)); +new TestCase( SECTION, "parseFloat(0xe)", 14, parseFloat(0xe)); +new TestCase( SECTION, "parseFloat(0xf)", 15, parseFloat(0xf)); +new TestCase( SECTION, "parseFloat(0xA)", 10, parseFloat(0xA)); +new TestCase( SECTION, "parseFloat(0xB)", 11, parseFloat(0xB)); +new TestCase( SECTION, "parseFloat(0xC)", 12, parseFloat(0xC)); +new TestCase( SECTION, "parseFloat(0xD)", 13, parseFloat(0xD)); +new TestCase( SECTION, "parseFloat(0xE)", 14, parseFloat(0xE)); +new TestCase( SECTION, "parseFloat(0xF)", 15, parseFloat(0xF)); + +new TestCase( SECTION, "parseFloat(0X0)", 0, parseFloat(0X0)); +new TestCase( SECTION, "parseFloat(0X1)", 1, parseFloat(0X1)); +new TestCase( SECTION, "parseFloat(0X2)", 2, parseFloat(0X2)); +new TestCase( SECTION, "parseFloat(0X3)", 3, parseFloat(0X3)); +new TestCase( SECTION, "parseFloat(0X4)", 4, parseFloat(0X4)); +new TestCase( SECTION, "parseFloat(0X5)", 5, parseFloat(0X5)); +new TestCase( SECTION, "parseFloat(0X6)", 6, parseFloat(0X6)); +new TestCase( SECTION, "parseFloat(0X7)", 7, parseFloat(0X7)); +new TestCase( SECTION, "parseFloat(0X8)", 8, parseFloat(0X8)); +new TestCase( SECTION, "parseFloat(0X9)", 9, parseFloat(0X9)); +new TestCase( SECTION, "parseFloat(0Xa)", 10, parseFloat(0Xa)); +new TestCase( SECTION, "parseFloat(0Xb)", 11, parseFloat(0Xb)); +new TestCase( SECTION, "parseFloat(0Xc)", 12, parseFloat(0Xc)); +new TestCase( SECTION, "parseFloat(0Xd)", 13, parseFloat(0Xd)); +new TestCase( SECTION, "parseFloat(0Xe)", 14, parseFloat(0Xe)); +new TestCase( SECTION, "parseFloat(0Xf)", 15, parseFloat(0Xf)); +new TestCase( SECTION, "parseFloat(0XA)", 10, parseFloat(0XA)); +new TestCase( SECTION, "parseFloat(0XB)", 11, parseFloat(0XB)); +new TestCase( SECTION, "parseFloat(0XC)", 12, parseFloat(0XC)); +new TestCase( SECTION, "parseFloat(0XD)", 13, parseFloat(0XD)); +new TestCase( SECTION, "parseFloat(0XE)", 14, parseFloat(0XE)); +new TestCase( SECTION, "parseFloat(0XF)", 15, parseFloat(0XF)); + + +// A StringNumericLiteral may not use octal notation + +new TestCase( SECTION, "parseFloat('00')", 0, parseFloat("00")); +new TestCase( SECTION, "parseFloat('01')", 1, parseFloat("01")); +new TestCase( SECTION, "parseFloat('02')", 2, parseFloat("02")); +new TestCase( SECTION, "parseFloat('03')", 3, parseFloat("03")); +new TestCase( SECTION, "parseFloat('04')", 4, parseFloat("04")); +new TestCase( SECTION, "parseFloat('05')", 5, parseFloat("05")); +new TestCase( SECTION, "parseFloat('06')", 6, parseFloat("06")); +new TestCase( SECTION, "parseFloat('07')", 7, parseFloat("07")); +new TestCase( SECTION, "parseFloat('010')", 10, parseFloat("010")); +new TestCase( SECTION, "parseFloat('011')", 11, parseFloat("011")); + +// A StringNumericLIteral may have any number of leading 0 digits + +new TestCase( SECTION, "parseFloat('001')", 1, parseFloat("001")); +new TestCase( SECTION, "parseFloat('0001')", 1, parseFloat("0001")); +new TestCase( SECTION, "parseFloat(' 0001 ')", 1, parseFloat(" 0001 ")); + +// an octal numeric literal should be treated as an octal + +new TestCase( SECTION, "parseFloat(00)", 0, parseFloat(00)); +new TestCase( SECTION, "parseFloat(01)", 1, parseFloat(01)); +new TestCase( SECTION, "parseFloat(02)", 2, parseFloat(02)); +new TestCase( SECTION, "parseFloat(03)", 3, parseFloat(03)); +new TestCase( SECTION, "parseFloat(04)", 4, parseFloat(04)); +new TestCase( SECTION, "parseFloat(05)", 5, parseFloat(05)); +new TestCase( SECTION, "parseFloat(06)", 6, parseFloat(06)); +new TestCase( SECTION, "parseFloat(07)", 7, parseFloat(07)); +new TestCase( SECTION, "parseFloat(010)", 8, parseFloat(010)); +new TestCase( SECTION, "parseFloat(011)", 9, parseFloat(011)); + +// A StringNumericLIteral may have any number of leading 0 digits + +new TestCase( SECTION, "parseFloat(001)", 1, parseFloat(001)); +new TestCase( SECTION, "parseFloat(0001)", 1, parseFloat(0001)); + +// make sure it's reflexive +new TestCase( SECTION, "parseFloat(Math.PI)", Math.PI, parseFloat(Math.PI)); +new TestCase( SECTION, "parseFloat(Math.LN2)", Math.LN2, parseFloat(Math.LN2)); +new TestCase( SECTION, "parseFloat(Math.LN10)", Math.LN10, parseFloat(Math.LN10)); +new TestCase( SECTION, "parseFloat(Math.LOG2E)", Math.LOG2E, parseFloat(Math.LOG2E)); +new TestCase( SECTION, "parseFloat(Math.LOG10E)", Math.LOG10E, parseFloat(Math.LOG10E)); +new TestCase( SECTION, "parseFloat(Math.SQRT2)", Math.SQRT2, parseFloat(Math.SQRT2)); +new TestCase( SECTION, "parseFloat(Math.SQRT1_2)", Math.SQRT1_2, parseFloat(Math.SQRT1_2)); + +new TestCase( SECTION, "parseFloat(Math.PI+'')", Math.PI, parseFloat(Math.PI+'')); +new TestCase( SECTION, "parseFloat(Math.LN2+'')", Math.LN2, parseFloat(Math.LN2+'')); +new TestCase( SECTION, "parseFloat(Math.LN10+'')", Math.LN10, parseFloat(Math.LN10+'')); +new TestCase( SECTION, "parseFloat(Math.LOG2E+'')", Math.LOG2E, parseFloat(Math.LOG2E+'')); +new TestCase( SECTION, "parseFloat(Math.LOG10E+'')", Math.LOG10E, parseFloat(Math.LOG10E+'')); +new TestCase( SECTION, "parseFloat(Math.SQRT2+'')", Math.SQRT2, parseFloat(Math.SQRT2+'')); +new TestCase( SECTION, "parseFloat(Math.SQRT1_2+'')", Math.SQRT1_2, parseFloat(Math.SQRT1_2+'')); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.3-2.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.3-2.js new file mode 100644 index 00000000..456c18aa --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.3-2.js @@ -0,0 +1,257 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.3-2.js + ECMA Section: 15.1.2.3 Function properties of the global object: + parseFloat( string ) + + Description: The parseFloat function produces a number value dictated + by the interpretation of the contents of the string + argument defined as a decimal literal. + + When the parseFloat function is called, the following + steps are taken: + + 1. Call ToString( string ). + 2. Remove leading whitespace Result(1). + 3. If neither Result(2) nor any prefix of Result(2) + satisfies the syntax of a StrDecimalLiteral, + return NaN. + 4. Compute the longest prefix of Result(2) which might + be Resusult(2) itself, that satisfies the syntax of + a StrDecimalLiteral + 5. Return the number value for the MV of Result(4). + + Note that parseFloate may interpret only a leading + portion of the string as a number value; it ignores any + characters that cannot be interpreted as part of the + notation of a decimal literal, and no indication is given + that such characters were ignored. + + StrDecimalLiteral:: + Infinity + DecimalDigits.DecimalDigits opt ExponentPart opt + .DecimalDigits ExponentPart opt + DecimalDigits ExponentPart opt + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.2.3-2"; +var VERSION = "ECMA_1"; +startTest(); + +var BUGNUMBER="none"; + +new TestCase( SECTION, "parseFloat(true)", Number.NaN, parseFloat(true) ); +new TestCase( SECTION, "parseFloat(false)", Number.NaN, parseFloat(false) ); +new TestCase( SECTION, "parseFloat('string')", Number.NaN, parseFloat("string") ); + +new TestCase( SECTION, "parseFloat(' Infinity')", Number.POSITIVE_INFINITY, parseFloat("Infinity") ); +// new TestCase( SECTION, "parseFloat(Infinity)", Number.POSITIVE_INFINITY, parseFloat(Infinity) ); + +new TestCase( SECTION, "parseFloat(' 0')", 0, parseFloat(" 0") ); +new TestCase( SECTION, "parseFloat(' -0')", -0, parseFloat(" -0") ); +new TestCase( SECTION, "parseFloat(' +0')", 0, parseFloat(" +0") ); + +new TestCase( SECTION, "parseFloat(' 1')", 1, parseFloat(" 1") ); +new TestCase( SECTION, "parseFloat(' -1')", -1, parseFloat(" -1") ); +new TestCase( SECTION, "parseFloat(' +1')", 1, parseFloat(" +1") ); + +new TestCase( SECTION, "parseFloat(' 2')", 2, parseFloat(" 2") ); +new TestCase( SECTION, "parseFloat(' -2')", -2, parseFloat(" -2") ); +new TestCase( SECTION, "parseFloat(' +2')", 2, parseFloat(" +2") ); + +new TestCase( SECTION, "parseFloat(' 3')", 3, parseFloat(" 3") ); +new TestCase( SECTION, "parseFloat(' -3')", -3, parseFloat(" -3") ); +new TestCase( SECTION, "parseFloat(' +3')", 3, parseFloat(" +3") ); + +new TestCase( SECTION, "parseFloat(' 4')", 4, parseFloat(" 4") ); +new TestCase( SECTION, "parseFloat(' -4')", -4, parseFloat(" -4") ); +new TestCase( SECTION, "parseFloat(' +4')", 4, parseFloat(" +4") ); + +new TestCase( SECTION, "parseFloat(' 5')", 5, parseFloat(" 5") ); +new TestCase( SECTION, "parseFloat(' -5')", -5, parseFloat(" -5") ); +new TestCase( SECTION, "parseFloat(' +5')", 5, parseFloat(" +5") ); + +new TestCase( SECTION, "parseFloat(' 6')", 6, parseFloat(" 6") ); +new TestCase( SECTION, "parseFloat(' -6')", -6, parseFloat(" -6") ); +new TestCase( SECTION, "parseFloat(' +6')", 6, parseFloat(" +6") ); + +new TestCase( SECTION, "parseFloat(' 7')", 7, parseFloat(" 7") ); +new TestCase( SECTION, "parseFloat(' -7')", -7, parseFloat(" -7") ); +new TestCase( SECTION, "parseFloat(' +7')", 7, parseFloat(" +7") ); + +new TestCase( SECTION, "parseFloat(' 8')", 8, parseFloat(" 8") ); +new TestCase( SECTION, "parseFloat(' -8')", -8, parseFloat(" -8") ); +new TestCase( SECTION, "parseFloat(' +8')", 8, parseFloat(" +8") ); + +new TestCase( SECTION, "parseFloat(' 9')", 9, parseFloat(" 9") ); +new TestCase( SECTION, "parseFloat(' -9')", -9, parseFloat(" -9") ); +new TestCase( SECTION, "parseFloat(' +9')", 9, parseFloat(" +9") ); + +new TestCase( SECTION, "parseFloat(' 3.14159')", 3.14159, parseFloat(" 3.14159") ); +new TestCase( SECTION, "parseFloat(' -3.14159')", -3.14159, parseFloat(" -3.14159") ); +new TestCase( SECTION, "parseFloat(' +3.14159')", 3.14159, parseFloat(" +3.14159") ); + +new TestCase( SECTION, "parseFloat(' 3.')", 3, parseFloat(" 3.") ); +new TestCase( SECTION, "parseFloat(' -3.')", -3, parseFloat(" -3.") ); +new TestCase( SECTION, "parseFloat(' +3.')", 3, parseFloat(" +3.") ); + +new TestCase( SECTION, "parseFloat(' 3.e1')", 30, parseFloat(" 3.e1") ); +new TestCase( SECTION, "parseFloat(' -3.e1')", -30, parseFloat(" -3.e1") ); +new TestCase( SECTION, "parseFloat(' +3.e1')", 30, parseFloat(" +3.e1") ); + +new TestCase( SECTION, "parseFloat(' 3.e+1')", 30, parseFloat(" 3.e+1") ); +new TestCase( SECTION, "parseFloat(' -3.e+1')", -30, parseFloat(" -3.e+1") ); +new TestCase( SECTION, "parseFloat(' +3.e+1')", 30, parseFloat(" +3.e+1") ); + +new TestCase( SECTION, "parseFloat(' 3.e-1')", .30, parseFloat(" 3.e-1") ); +new TestCase( SECTION, "parseFloat(' -3.e-1')", -.30, parseFloat(" -3.e-1") ); +new TestCase( SECTION, "parseFloat(' +3.e-1')", .30, parseFloat(" +3.e-1") ); + +// StrDecimalLiteral::: .DecimalDigits ExponentPart opt + +new TestCase( SECTION, "parseFloat(' .00001')", 0.00001, parseFloat(" .00001") ); +new TestCase( SECTION, "parseFloat(' +.00001')", 0.00001, parseFloat(" +.00001") ); +new TestCase( SECTION, "parseFloat(' -0.0001')", -0.00001, parseFloat(" -.00001") ); + +new TestCase( SECTION, "parseFloat(' .01e2')", 1, parseFloat(" .01e2") ); +new TestCase( SECTION, "parseFloat(' +.01e2')", 1, parseFloat(" +.01e2") ); +new TestCase( SECTION, "parseFloat(' -.01e2')", -1, parseFloat(" -.01e2") ); + +new TestCase( SECTION, "parseFloat(' .01e+2')", 1, parseFloat(" .01e+2") ); +new TestCase( SECTION, "parseFloat(' +.01e+2')", 1, parseFloat(" +.01e+2") ); +new TestCase( SECTION, "parseFloat(' -.01e+2')", -1, parseFloat(" -.01e+2") ); + +new TestCase( SECTION, "parseFloat(' .01e-2')", 0.0001, parseFloat(" .01e-2") ); +new TestCase( SECTION, "parseFloat(' +.01e-2')", 0.0001, parseFloat(" +.01e-2") ); +new TestCase( SECTION, "parseFloat(' -.01e-2')", -0.0001, parseFloat(" -.01e-2") ); + +// StrDecimalLiteral::: DecimalDigits ExponentPart opt + +new TestCase( SECTION, "parseFloat(' 1234e5')", 123400000, parseFloat(" 1234e5") ); +new TestCase( SECTION, "parseFloat(' +1234e5')", 123400000, parseFloat(" +1234e5") ); +new TestCase( SECTION, "parseFloat(' -1234e5')", -123400000, parseFloat(" -1234e5") ); + +new TestCase( SECTION, "parseFloat(' 1234e+5')", 123400000, parseFloat(" 1234e+5") ); +new TestCase( SECTION, "parseFloat(' +1234e+5')", 123400000, parseFloat(" +1234e+5") ); +new TestCase( SECTION, "parseFloat(' -1234e+5')", -123400000, parseFloat(" -1234e+5") ); + +new TestCase( SECTION, "parseFloat(' 1234e-5')", 0.01234, parseFloat(" 1234e-5") ); +new TestCase( SECTION, "parseFloat(' +1234e-5')", 0.01234, parseFloat(" +1234e-5") ); +new TestCase( SECTION, "parseFloat(' -1234e-5')", -0.01234, parseFloat(" -1234e-5") ); + + +new TestCase( SECTION, "parseFloat(' .01E2')", 1, parseFloat(" .01E2") ); +new TestCase( SECTION, "parseFloat(' +.01E2')", 1, parseFloat(" +.01E2") ); +new TestCase( SECTION, "parseFloat(' -.01E2')", -1, parseFloat(" -.01E2") ); + +new TestCase( SECTION, "parseFloat(' .01E+2')", 1, parseFloat(" .01E+2") ); +new TestCase( SECTION, "parseFloat(' +.01E+2')", 1, parseFloat(" +.01E+2") ); +new TestCase( SECTION, "parseFloat(' -.01E+2')", -1, parseFloat(" -.01E+2") ); + +new TestCase( SECTION, "parseFloat(' .01E-2')", 0.0001, parseFloat(" .01E-2") ); +new TestCase( SECTION, "parseFloat(' +.01E-2')", 0.0001, parseFloat(" +.01E-2") ); +new TestCase( SECTION, "parseFloat(' -.01E-2')", -0.0001, parseFloat(" -.01E-2") ); + +// StrDecimalLiteral::: DecimalDigits ExponentPart opt +new TestCase( SECTION, "parseFloat(' 1234E5')", 123400000, parseFloat(" 1234E5") ); +new TestCase( SECTION, "parseFloat(' +1234E5')", 123400000, parseFloat(" +1234E5") ); +new TestCase( SECTION, "parseFloat(' -1234E5')", -123400000, parseFloat(" -1234E5") ); + +new TestCase( SECTION, "parseFloat(' 1234E+5')", 123400000, parseFloat(" 1234E+5") ); +new TestCase( SECTION, "parseFloat(' +1234E+5')", 123400000, parseFloat(" +1234E+5") ); +new TestCase( SECTION, "parseFloat(' -1234E+5')", -123400000, parseFloat(" -1234E+5") ); + +new TestCase( SECTION, "parseFloat(' 1234E-5')", 0.01234, parseFloat(" 1234E-5") ); +new TestCase( SECTION, "parseFloat(' +1234E-5')", 0.01234, parseFloat(" +1234E-5") ); +new TestCase( SECTION, "parseFloat(' -1234E-5')", -0.01234, parseFloat(" -1234E-5") ); + + +// hex cases should all return NaN + +new TestCase( SECTION, "parseFloat(' 0x0')", 0, parseFloat(" 0x0")); +new TestCase( SECTION, "parseFloat(' 0x1')", 0, parseFloat(" 0x1")); +new TestCase( SECTION, "parseFloat(' 0x2')", 0, parseFloat(" 0x2")); +new TestCase( SECTION, "parseFloat(' 0x3')", 0, parseFloat(" 0x3")); +new TestCase( SECTION, "parseFloat(' 0x4')", 0, parseFloat(" 0x4")); +new TestCase( SECTION, "parseFloat(' 0x5')", 0, parseFloat(" 0x5")); +new TestCase( SECTION, "parseFloat(' 0x6')", 0, parseFloat(" 0x6")); +new TestCase( SECTION, "parseFloat(' 0x7')", 0, parseFloat(" 0x7")); +new TestCase( SECTION, "parseFloat(' 0x8')", 0, parseFloat(" 0x8")); +new TestCase( SECTION, "parseFloat(' 0x9')", 0, parseFloat(" 0x9")); +new TestCase( SECTION, "parseFloat(' 0xa')", 0, parseFloat(" 0xa")); +new TestCase( SECTION, "parseFloat(' 0xb')", 0, parseFloat(" 0xb")); +new TestCase( SECTION, "parseFloat(' 0xc')", 0, parseFloat(" 0xc")); +new TestCase( SECTION, "parseFloat(' 0xd')", 0, parseFloat(" 0xd")); +new TestCase( SECTION, "parseFloat(' 0xe')", 0, parseFloat(" 0xe")); +new TestCase( SECTION, "parseFloat(' 0xf')", 0, parseFloat(" 0xf")); +new TestCase( SECTION, "parseFloat(' 0xA')", 0, parseFloat(" 0xA")); +new TestCase( SECTION, "parseFloat(' 0xB')", 0, parseFloat(" 0xB")); +new TestCase( SECTION, "parseFloat(' 0xC')", 0, parseFloat(" 0xC")); +new TestCase( SECTION, "parseFloat(' 0xD')", 0, parseFloat(" 0xD")); +new TestCase( SECTION, "parseFloat(' 0xE')", 0, parseFloat(" 0xE")); +new TestCase( SECTION, "parseFloat(' 0xF')", 0, parseFloat(" 0xF")); + +new TestCase( SECTION, "parseFloat(' 0X0')", 0, parseFloat(" 0X0")); +new TestCase( SECTION, "parseFloat(' 0X1')", 0, parseFloat(" 0X1")); +new TestCase( SECTION, "parseFloat(' 0X2')", 0, parseFloat(" 0X2")); +new TestCase( SECTION, "parseFloat(' 0X3')", 0, parseFloat(" 0X3")); +new TestCase( SECTION, "parseFloat(' 0X4')", 0, parseFloat(" 0X4")); +new TestCase( SECTION, "parseFloat(' 0X5')", 0, parseFloat(" 0X5")); +new TestCase( SECTION, "parseFloat(' 0X6')", 0, parseFloat(" 0X6")); +new TestCase( SECTION, "parseFloat(' 0X7')", 0, parseFloat(" 0X7")); +new TestCase( SECTION, "parseFloat(' 0X8')", 0, parseFloat(" 0X8")); +new TestCase( SECTION, "parseFloat(' 0X9')", 0, parseFloat(" 0X9")); +new TestCase( SECTION, "parseFloat(' 0Xa')", 0, parseFloat(" 0Xa")); +new TestCase( SECTION, "parseFloat(' 0Xb')", 0, parseFloat(" 0Xb")); +new TestCase( SECTION, "parseFloat(' 0Xc')", 0, parseFloat(" 0Xc")); +new TestCase( SECTION, "parseFloat(' 0Xd')", 0, parseFloat(" 0Xd")); +new TestCase( SECTION, "parseFloat(' 0Xe')", 0, parseFloat(" 0Xe")); +new TestCase( SECTION, "parseFloat(' 0Xf')", 0, parseFloat(" 0Xf")); +new TestCase( SECTION, "parseFloat(' 0XA')", 0, parseFloat(" 0XA")); +new TestCase( SECTION, "parseFloat(' 0XB')", 0, parseFloat(" 0XB")); +new TestCase( SECTION, "parseFloat(' 0XC')", 0, parseFloat(" 0XC")); +new TestCase( SECTION, "parseFloat(' 0XD')", 0, parseFloat(" 0XD")); +new TestCase( SECTION, "parseFloat(' 0XE')", 0, parseFloat(" 0XE")); +new TestCase( SECTION, "parseFloat(' 0XF')", 0, parseFloat(" 0XF")); + +// A StringNumericLiteral may not use octal notation + +new TestCase( SECTION, "parseFloat(' 00')", 0, parseFloat(" 00")); +new TestCase( SECTION, "parseFloat(' 01')", 1, parseFloat(" 01")); +new TestCase( SECTION, "parseFloat(' 02')", 2, parseFloat(" 02")); +new TestCase( SECTION, "parseFloat(' 03')", 3, parseFloat(" 03")); +new TestCase( SECTION, "parseFloat(' 04')", 4, parseFloat(" 04")); +new TestCase( SECTION, "parseFloat(' 05')", 5, parseFloat(" 05")); +new TestCase( SECTION, "parseFloat(' 06')", 6, parseFloat(" 06")); +new TestCase( SECTION, "parseFloat(' 07')", 7, parseFloat(" 07")); +new TestCase( SECTION, "parseFloat(' 010')", 10, parseFloat(" 010")); +new TestCase( SECTION, "parseFloat(' 011')", 11, parseFloat(" 011")); + +// A StringNumericLIteral may have any number of leading 0 digits + +new TestCase( SECTION, "parseFloat(' 001')", 1, parseFloat(" 001")); +new TestCase( SECTION, "parseFloat(' 0001')", 1, parseFloat(" 0001")); + +// A StringNumericLIteral may have any number of leading 0 digits + +new TestCase( SECTION, "parseFloat(001)", 1, parseFloat(001)); +new TestCase( SECTION, "parseFloat(0001)", 1, parseFloat(0001)); + +// make sure it' s reflexive +new TestCase( SECTION, "parseFloat( ' ' +Math.PI+' ')", Math.PI, parseFloat( ' ' +Math.PI+' ')); +new TestCase( SECTION, "parseFloat( ' ' +Math.LN2+' ')", Math.LN2, parseFloat( ' ' +Math.LN2+' ')); +new TestCase( SECTION, "parseFloat( ' ' +Math.LN10+' ')", Math.LN10, parseFloat( ' ' +Math.LN10+' ')); +new TestCase( SECTION, "parseFloat( ' ' +Math.LOG2E+' ')", Math.LOG2E, parseFloat( ' ' +Math.LOG2E+' ')); +new TestCase( SECTION, "parseFloat( ' ' +Math.LOG10E+' ')", Math.LOG10E, parseFloat( ' ' +Math.LOG10E+' ')); +new TestCase( SECTION, "parseFloat( ' ' +Math.SQRT2+' ')", Math.SQRT2, parseFloat( ' ' +Math.SQRT2+' ')); +new TestCase( SECTION, "parseFloat( ' ' +Math.SQRT1_2+' ')", Math.SQRT1_2, parseFloat( ' ' +Math.SQRT1_2+' ')); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.4.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.4.js new file mode 100644 index 00000000..06050bf8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.4.js @@ -0,0 +1,171 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.4.js + ECMA Section: 15.1.2.4 Function properties of the global object + escape( string ) + + Description: + The escape function computes a new version of a string value in which + certain characters have been replaced by a hexadecimal escape sequence. + The result thus contains no special characters that might have special + meaning within a URL. + + For characters whose Unicode encoding is 0xFF or less, a two-digit + escape sequence of the form %xx is used in accordance with RFC1738. + For characters whose Unicode encoding is greater than 0xFF, a four- + digit escape sequence of the form %uxxxx is used. + + When the escape function is called with one argument string, the + following steps are taken: + + 1. Call ToString(string). + 2. Compute the number of characters in Result(1). + 3. Let R be the empty string. + 4. Let k be 0. + 5. If k equals Result(2), return R. + 6. Get the character at position k within Result(1). + 7. If Result(6) is one of the 69 nonblank ASCII characters + ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz + 0123456789 @*_+-./, go to step 14. + 8. Compute the 16-bit unsigned integer that is the Unicode character + encoding of Result(6). + 9. If Result(8), is less than 256, go to step 12. + 10. Let S be a string containing six characters "%uwxyz" where wxyz are + four hexadecimal digits encoding the value of Result(8). + 11. Go to step 15. + 12. Let S be a string containing three characters "%xy" where xy are two + hexadecimal digits encoding the value of Result(8). + 13. Go to step 15. + 14. Let S be a string containing the single character Result(6). + 15. Let R be a new string value computed by concatenating the previous value + of R and S. + 16. Increase k by 1. + 17. Go to step 5. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.2.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "escape(string)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "escape.length", 1, escape.length ); +new TestCase( SECTION, "escape.length = null; escape.length", 1, eval("escape.length = null; escape.length") ); +new TestCase( SECTION, "delete escape.length", false, delete escape.length ); +new TestCase( SECTION, "delete escape.length; escape.length", 1, eval("delete escape.length; escape.length") ); +new TestCase( SECTION, "var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS", "", eval("var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS") ); + +new TestCase( SECTION, "escape()", "undefined", escape() ); +new TestCase( SECTION, "escape('')", "", escape('') ); +new TestCase( SECTION, "escape( null )", "null", escape(null) ); +new TestCase( SECTION, "escape( void 0 )", "undefined", escape(void 0) ); +new TestCase( SECTION, "escape( true )", "true", escape( true ) ); +new TestCase( SECTION, "escape( false )", "false", escape( false ) ); + +new TestCase( SECTION, "escape( new Boolean(true) )", "true", escape(new Boolean(true)) ); +new TestCase( SECTION, "escape( new Boolean(false) )", "false", escape(new Boolean(false)) ); + +new TestCase( SECTION, "escape( Number.NaN )", "NaN", escape(Number.NaN) ); +new TestCase( SECTION, "escape( -0 )", "0", escape( -0 ) ); +new TestCase( SECTION, "escape( 'Infinity' )", "Infinity", escape( "Infinity" ) ); +new TestCase( SECTION, "escape( Number.POSITIVE_INFINITY )", "Infinity", escape( Number.POSITIVE_INFINITY ) ); +new TestCase( SECTION, "escape( Number.NEGATIVE_INFINITY )", "-Infinity", escape( Number.NEGATIVE_INFINITY ) ); + +var ASCII_TEST_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_+-./"; + +new TestCase( SECTION, "escape( " +ASCII_TEST_STRING+" )", ASCII_TEST_STRING, escape( ASCII_TEST_STRING ) ); + +// ASCII value less than + +for ( var CHARCODE = 0; CHARCODE < 32; CHARCODE++ ) { + new TestCase( SECTION, + "escape(String.fromCharCode("+CHARCODE+"))", + "%"+ToHexString(CHARCODE), + escape(String.fromCharCode(CHARCODE)) ); +} +for ( var CHARCODE = 128; CHARCODE < 256; CHARCODE++ ) { + new TestCase( SECTION, + "escape(String.fromCharCode("+CHARCODE+"))", + "%"+ToHexString(CHARCODE), + escape(String.fromCharCode(CHARCODE)) ); +} + +for ( var CHARCODE = 256; CHARCODE < 1024; CHARCODE++ ) { + new TestCase( SECTION, + "escape(String.fromCharCode("+CHARCODE+"))", + "%u"+ ToUnicodeString(CHARCODE), + escape(String.fromCharCode(CHARCODE)) ); +} +for ( var CHARCODE = 65500; CHARCODE < 65536; CHARCODE++ ) { + new TestCase( SECTION, + "escape(String.fromCharCode("+CHARCODE+"))", + "%u"+ ToUnicodeString(CHARCODE), + escape(String.fromCharCode(CHARCODE)) ); +} + +test(); + +function ToUnicodeString( n ) { + var string = ToHexString(n); + + for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) { + string = "0" + string; + } + + return string; +} +function ToHexString( n ) { + var hex = new Array(); + + for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) { + ; + } + + for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) { + hex[index] = Math.floor( n / Math.pow(16,mag) ); + n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) ); + } + + hex[hex.length] = n % 16; + + var string =""; + + for ( var index = 0 ; index < hex.length ; index++ ) { + switch ( hex[index] ) { + case 10: + string += "A"; + break; + case 11: + string += "B"; + break; + case 12: + string += "C"; + break; + case 13: + string += "D"; + break; + case 14: + string += "E"; + break; + case 15: + string += "F"; + break; + default: + string += hex[index]; + } + } + + if ( string.length == 1 ) { + string = "0" + string; + } + return string; +} diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-1.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-1.js new file mode 100644 index 00000000..09fd97cf --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-1.js @@ -0,0 +1,172 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.5-1.js + ECMA Section: 15.1.2.5 Function properties of the global object + unescape( string ) + + Description: + The unescape function computes a new version of a string value in which + each escape sequences of the sort that might be introduced by the escape + function is replaced with the character that it represents. + + When the unescape function is called with one argument string, the + following steps are taken: + + 1. Call ToString(string). + 2. Compute the number of characters in Result(1). + 3. Let R be the empty string. + 4. Let k be 0. + 5. If k equals Result(2), return R. + 6. Let c be the character at position k within Result(1). + 7. If c is not %, go to step 18. + 8. If k is greater than Result(2)-6, go to step 14. + 9. If the character at position k+1 within result(1) is not u, go to step + 14. + 10. If the four characters at positions k+2, k+3, k+4, and k+5 within + Result(1) are not all hexadecimal digits, go to step 14. + 11. Let c be the character whose Unicode encoding is the integer represented + by the four hexadecimal digits at positions k+2, k+3, k+4, and k+5 + within Result(1). + 12. Increase k by 5. + 13. Go to step 18. + 14. If k is greater than Result(2)-3, go to step 18. + 15. If the two characters at positions k+1 and k+2 within Result(1) are not + both hexadecimal digits, go to step 18. + 16. Let c be the character whose Unicode encoding is the integer represented + by two zeroes plus the two hexadecimal digits at positions k+1 and k+2 + within Result(1). + 17. Increase k by 2. + 18. Let R be a new string value computed by concatenating the previous value + of R and c. + 19. Increase k by 1. + 20. Go to step 5. + Author: christine@netscape.com + Date: 28 october 1997 +*/ + +var SECTION = "15.1.2.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "unescape(string)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "unescape.length", 1, unescape.length ); +new TestCase( SECTION, "unescape.length = null; unescape.length", 1, eval("unescape.length=null; unescape.length") ); +new TestCase( SECTION, "delete unescape.length", false, delete unescape.length ); +new TestCase( SECTION, "delete unescape.length; unescape.length", 1, eval("delete unescape.length; unescape.length") ); +new TestCase( SECTION, "var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS") ); + +new TestCase( SECTION, "unescape()", "undefined", unescape() ); +new TestCase( SECTION, "unescape('')", "", unescape('') ); +new TestCase( SECTION, "unescape( null )", "null", unescape(null) ); +new TestCase( SECTION, "unescape( void 0 )", "undefined", unescape(void 0) ); +new TestCase( SECTION, "unescape( true )", "true", unescape( true ) ); +new TestCase( SECTION, "unescape( false )", "false", unescape( false ) ); + +new TestCase( SECTION, "unescape( new Boolean(true) )", "true", unescape(new Boolean(true)) ); +new TestCase( SECTION, "unescape( new Boolean(false) )", "false", unescape(new Boolean(false)) ); + +new TestCase( SECTION, "unescape( Number.NaN )", "NaN", unescape(Number.NaN) ); +new TestCase( SECTION, "unescape( -0 )", "0", unescape( -0 ) ); +new TestCase( SECTION, "unescape( 'Infinity' )", "Infinity", unescape( "Infinity" ) ); +new TestCase( SECTION, "unescape( Number.POSITIVE_INFINITY )", "Infinity", unescape( Number.POSITIVE_INFINITY ) ); +new TestCase( SECTION, "unescape( Number.NEGATIVE_INFINITY )", "-Infinity", unescape( Number.NEGATIVE_INFINITY ) ); + +var ASCII_TEST_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789@*_+-./"; + +new TestCase( SECTION, "unescape( " +ASCII_TEST_STRING+" )", ASCII_TEST_STRING, unescape( ASCII_TEST_STRING ) ); + +// escaped chars with ascii values less than 256 + +for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) { + new TestCase( SECTION, + "unescape( %"+ ToHexString(CHARCODE)+" )", + String.fromCharCode(CHARCODE), + unescape( "%" + ToHexString(CHARCODE) ) ); +} + +// unicode chars represented by two hex digits +for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) { + new TestCase( SECTION, + "unescape( %u"+ ToHexString(CHARCODE)+" )", + "%u"+ToHexString(CHARCODE), + unescape( "%u" + ToHexString(CHARCODE) ) ); +} +/* + for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) { + new TestCase( SECTION, + "unescape( %u"+ ToUnicodeString(CHARCODE)+" )", + String.fromCharCode(CHARCODE), + unescape( "%u" + ToUnicodeString(CHARCODE) ) ); + } + for ( var CHARCODE = 256; CHARCODE < 65536; CHARCODE+= 333 ) { + new TestCase( SECTION, + "unescape( %u"+ ToUnicodeString(CHARCODE)+" )", + String.fromCharCode(CHARCODE), + unescape( "%u" + ToUnicodeString(CHARCODE) ) ); + } +*/ + +test(); + +function ToUnicodeString( n ) { + var string = ToHexString(n); + + for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) { + string = "0" + string; + } + + return string; +} +function ToHexString( n ) { + var hex = new Array(); + + for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) { + ; + } + + for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) { + hex[index] = Math.floor( n / Math.pow(16,mag) ); + n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) ); + } + + hex[hex.length] = n % 16; + + var string =""; + + for ( var index = 0 ; index < hex.length ; index++ ) { + switch ( hex[index] ) { + case 10: + string += "A"; + break; + case 11: + string += "B"; + break; + case 12: + string += "C"; + break; + case 13: + string += "D"; + break; + case 14: + string += "E"; + break; + case 15: + string += "F"; + break; + default: + string += hex[index]; + } + } + + if ( string.length == 1 ) { + string = "0" + string; + } + return string; +} diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-2.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-2.js new file mode 100644 index 00000000..5aa2a36a --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-2.js @@ -0,0 +1,149 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.5-2.js + ECMA Section: 15.1.2.5 Function properties of the global object + unescape( string ) + Description: + + This tests the cases where there are fewer than 4 characters following "%u", + or fewer than 2 characters following "%" or "%u". + + The unescape function computes a new version of a string value in which + each escape sequences of the sort that might be introduced by the escape + function is replaced with the character that it represents. + + When the unescape function is called with one argument string, the + following steps are taken: + + 1. Call ToString(string). + 2. Compute the number of characters in Result(1). + 3. Let R be the empty string. + 4. Let k be 0. + 5. If k equals Result(2), return R. + 6. Let c be the character at position k within Result(1). + 7. If c is not %, go to step 18. + 8. If k is greater than Result(2)-6, go to step 14. + 9. If the character at position k+1 within result(1) is not u, go to step + 14. + 10. If the four characters at positions k+2, k+3, k+4, and k+5 within + Result(1) are not all hexadecimal digits, go to step 14. + 11. Let c be the character whose Unicode encoding is the integer represented + by the four hexadecimal digits at positions k+2, k+3, k+4, and k+5 + within Result(1). + 12. Increase k by 5. + 13. Go to step 18. + 14. If k is greater than Result(2)-3, go to step 18. + 15. If the two characters at positions k+1 and k+2 within Result(1) are not + both hexadecimal digits, go to step 18. + 16. Let c be the character whose Unicode encoding is the integer represented + by two zeroes plus the two hexadecimal digits at positions k+1 and k+2 + within Result(1). + 17. Increase k by 2. + 18. Let R be a new string value computed by concatenating the previous value + of R and c. + 19. Increase k by 1. + 20. Go to step 5. + Author: christine@netscape.com + Date: 28 october 1997 +*/ + +var SECTION = "15.1.2.5-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "unescape(string)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// since there is only one character following "%", no conversion should occur. + +for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE += 16 ) { + new TestCase( SECTION, + "unescape( %"+ (ToHexString(CHARCODE)).substring(0,1) +" )", + "%"+(ToHexString(CHARCODE)).substring(0,1), + unescape( "%" + (ToHexString(CHARCODE)).substring(0,1) ) ); +} + +// since there is only one character following "%u", no conversion should occur. + +for ( var CHARCODE = 0; CHARCODE < 256; CHARCODE +=16 ) { + new TestCase( SECTION, + "unescape( %u"+ (ToHexString(CHARCODE)).substring(0,1) +" )", + "%u"+(ToHexString(CHARCODE)).substring(0,1), + unescape( "%u" + (ToHexString(CHARCODE)).substring(0,1) ) ); +} + + +// three char unicode string. no conversion should occur + +for ( var CHARCODE = 1024; CHARCODE < 65536; CHARCODE+= 1234 ) { + new TestCase + ( SECTION, + "unescape( %u"+ (ToUnicodeString(CHARCODE)).substring(0,3)+ " )", + + "%u"+(ToUnicodeString(CHARCODE)).substring(0,3), + unescape( "%u"+(ToUnicodeString(CHARCODE)).substring(0,3) ) + ); +} + +test(); + +function ToUnicodeString( n ) { + var string = ToHexString(n); + + for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) { + string = "0" + string; + } + + return string; +} +function ToHexString( n ) { + var hex = new Array(); + + for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) { + ; + } + + for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) { + hex[index] = Math.floor( n / Math.pow(16,mag) ); + n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) ); + } + + hex[hex.length] = n % 16; + + var string =""; + + for ( var index = 0 ; index < hex.length ; index++ ) { + switch ( hex[index] ) { + case 10: + string += "A"; + break; + case 11: + string += "B"; + break; + case 12: + string += "C"; + break; + case 13: + string += "D"; + break; + case 14: + string += "E"; + break; + case 15: + string += "F"; + break; + default: + string += hex[index]; + } + } + + if ( string.length == 1 ) { + string = "0" + string; + } + return string; +} diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-3.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-3.js new file mode 100644 index 00000000..e7e5008e --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.5-3.js @@ -0,0 +1,173 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.5-3.js + ECMA Section: 15.1.2.5 Function properties of the global object + unescape( string ) + + Description: + This tests the cases where one of the four characters following "%u" is + not a hexidecimal character, or one of the two characters following "%" + or "%u" is not a hexidecimal character. + + The unescape function computes a new version of a string value in which + each escape sequences of the sort that might be introduced by the escape + function is replaced with the character that it represents. + + When the unescape function is called with one argument string, the + following steps are taken: + + 1. Call ToString(string). + 2. Compute the number of characters in Result(1). + 3. Let R be the empty string. + 4. Let k be 0. + 5. If k equals Result(2), return R. + 6. Let c be the character at position k within Result(1). + 7. If c is not %, go to step 18. + 8. If k is greater than Result(2)-6, go to step 14. + 9. If the character at position k+1 within result(1) is not u, go to step + 14. + 10. If the four characters at positions k+2, k+3, k+4, and k+5 within + Result(1) are not all hexadecimal digits, go to step 14. + 11. Let c be the character whose Unicode encoding is the integer represented + by the four hexadecimal digits at positions k+2, k+3, k+4, and k+5 + within Result(1). + 12. Increase k by 5. + 13. Go to step 18. + 14. If k is greater than Result(2)-3, go to step 18. + 15. If the two characters at positions k+1 and k+2 within Result(1) are not + both hexadecimal digits, go to step 18. + 16. Let c be the character whose Unicode encoding is the integer represented + by two zeroes plus the two hexadecimal digits at positions k+1 and k+2 + within Result(1). + 17. Increase k by 2. + 18. Let R be a new string value computed by concatenating the previous value + of R and c. + 19. Increase k by 1. + 20. Go to step 5. + Author: christine@netscape.com + Date: 28 october 1997 +*/ + + +var SECTION = "15.1.2.5-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "unescape(string)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +for ( var CHARCODE = 0, NONHEXCHARCODE = 0; CHARCODE < 256; CHARCODE++, NONHEXCHARCODE++ ) { + NONHEXCHARCODE = getNextNonHexCharCode( NONHEXCHARCODE ); + + new TestCase( SECTION, + "unescape( %"+ (ToHexString(CHARCODE)).substring(0,1) + + String.fromCharCode( NONHEXCHARCODE ) +" )" + + "[where last character is String.fromCharCode("+NONHEXCHARCODE+")]", + "%"+(ToHexString(CHARCODE)).substring(0,1)+ + String.fromCharCode( NONHEXCHARCODE ), + unescape( "%" + (ToHexString(CHARCODE)).substring(0,1)+ + String.fromCharCode( NONHEXCHARCODE ) ) ); +} +for ( var CHARCODE = 0, NONHEXCHARCODE = 0; CHARCODE < 256; CHARCODE++, NONHEXCHARCODE++ ) { + NONHEXCHARCODE = getNextNonHexCharCode( NONHEXCHARCODE ); + + new TestCase( SECTION, + "unescape( %u"+ (ToHexString(CHARCODE)).substring(0,1) + + String.fromCharCode( NONHEXCHARCODE ) +" )" + + "[where last character is String.fromCharCode("+NONHEXCHARCODE+")]", + "%u"+(ToHexString(CHARCODE)).substring(0,1)+ + String.fromCharCode( NONHEXCHARCODE ), + unescape( "%u" + (ToHexString(CHARCODE)).substring(0,1)+ + String.fromCharCode( NONHEXCHARCODE ) ) ); +} + +for ( var CHARCODE = 0, NONHEXCHARCODE = 0 ; CHARCODE < 65536; CHARCODE+= 54321, NONHEXCHARCODE++ ) { + NONHEXCHARCODE = getNextNonHexCharCode( NONHEXCHARCODE ); + + new TestCase( SECTION, + "unescape( %u"+ (ToUnicodeString(CHARCODE)).substring(0,3) + + String.fromCharCode( NONHEXCHARCODE ) +" )" + + "[where last character is String.fromCharCode("+NONHEXCHARCODE+")]", + + String.fromCharCode(eval("0x"+ (ToUnicodeString(CHARCODE)).substring(0,2))) + + (ToUnicodeString(CHARCODE)).substring(2,3) + + String.fromCharCode( NONHEXCHARCODE ), + + unescape( "%" + (ToUnicodeString(CHARCODE)).substring(0,3)+ + String.fromCharCode( NONHEXCHARCODE ) ) ); +} + +test(); + +function getNextNonHexCharCode( n ) { + for ( ; n < Math.pow(2,16); n++ ) { + if ( ( n == 43 || n == 45 || n == 46 || n == 47 || + (n >= 71 && n <= 90) || (n >= 103 && n <= 122) || + n == 64 || n == 95 ) ) { + break; + } else { + n = ( n > 122 ) ? 0 : n; + } + } + return n; +} +function ToUnicodeString( n ) { + var string = ToHexString(n); + + for ( var PAD = (4 - string.length ); PAD > 0; PAD-- ) { + string = "0" + string; + } + + return string; +} +function ToHexString( n ) { + var hex = new Array(); + + for ( var mag = 1; Math.pow(16,mag) <= n ; mag++ ) { + ; + } + + for ( index = 0, mag -= 1; mag > 0; index++, mag-- ) { + hex[index] = Math.floor( n / Math.pow(16,mag) ); + n -= Math.pow(16,mag) * Math.floor( n/Math.pow(16,mag) ); + } + + hex[hex.length] = n % 16; + + var string =""; + + for ( var index = 0 ; index < hex.length ; index++ ) { + switch ( hex[index] ) { + case 10: + string += "A"; + break; + case 11: + string += "B"; + break; + case 12: + string += "C"; + break; + case 13: + string += "D"; + break; + case 14: + string += "E"; + break; + case 15: + string += "F"; + break; + default: + string += hex[index]; + } + } + + if ( string.length == 1 ) { + string = "0" + string; + } + return string; +} diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.6.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.6.js new file mode 100644 index 00000000..d46e198d --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.6.js @@ -0,0 +1,91 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.6.js + ECMA Section: 15.1.2.6 isNaN( x ) + + Description: Applies ToNumber to its argument, then returns true if + the result isNaN and otherwise returns false. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.2.6"; +var VERSION = "ECMA_1"; +var TITLE = "isNaN( x )"; +var BUGNUMBER = "none"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "isNaN.length", 1, isNaN.length ); +new TestCase( SECTION, "var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS") ); +new TestCase( SECTION, "isNaN.length = null; isNaN.length", 1, eval("isNaN.length=null; isNaN.length") ); +new TestCase( SECTION, "delete isNaN.length", false, delete isNaN.length ); +new TestCase( SECTION, "delete isNaN.length; isNaN.length", 1, eval("delete isNaN.length; isNaN.length") ); + +// new TestCase( SECTION, "isNaN.__proto__", Function.prototype, isNaN.__proto__ ); + +new TestCase( SECTION, "isNaN()", true, isNaN() ); +new TestCase( SECTION, "isNaN( null )", false, isNaN(null) ); +new TestCase( SECTION, "isNaN( void 0 )", true, isNaN(void 0) ); +new TestCase( SECTION, "isNaN( true )", false, isNaN(true) ); +new TestCase( SECTION, "isNaN( false)", false, isNaN(false) ); +new TestCase( SECTION, "isNaN( ' ' )", false, isNaN( " " ) ); + +new TestCase( SECTION, "isNaN( 0 )", false, isNaN(0) ); +new TestCase( SECTION, "isNaN( 1 )", false, isNaN(1) ); +new TestCase( SECTION, "isNaN( 2 )", false, isNaN(2) ); +new TestCase( SECTION, "isNaN( 3 )", false, isNaN(3) ); +new TestCase( SECTION, "isNaN( 4 )", false, isNaN(4) ); +new TestCase( SECTION, "isNaN( 5 )", false, isNaN(5) ); +new TestCase( SECTION, "isNaN( 6 )", false, isNaN(6) ); +new TestCase( SECTION, "isNaN( 7 )", false, isNaN(7) ); +new TestCase( SECTION, "isNaN( 8 )", false, isNaN(8) ); +new TestCase( SECTION, "isNaN( 9 )", false, isNaN(9) ); + +new TestCase( SECTION, "isNaN( '0' )", false, isNaN('0') ); +new TestCase( SECTION, "isNaN( '1' )", false, isNaN('1') ); +new TestCase( SECTION, "isNaN( '2' )", false, isNaN('2') ); +new TestCase( SECTION, "isNaN( '3' )", false, isNaN('3') ); +new TestCase( SECTION, "isNaN( '4' )", false, isNaN('4') ); +new TestCase( SECTION, "isNaN( '5' )", false, isNaN('5') ); +new TestCase( SECTION, "isNaN( '6' )", false, isNaN('6') ); +new TestCase( SECTION, "isNaN( '7' )", false, isNaN('7') ); +new TestCase( SECTION, "isNaN( '8' )", false, isNaN('8') ); +new TestCase( SECTION, "isNaN( '9' )", false, isNaN('9') ); + + +new TestCase( SECTION, "isNaN( 0x0a )", false, isNaN( 0x0a ) ); +new TestCase( SECTION, "isNaN( 0xaa )", false, isNaN( 0xaa ) ); +new TestCase( SECTION, "isNaN( 0x0A )", false, isNaN( 0x0A ) ); +new TestCase( SECTION, "isNaN( 0xAA )", false, isNaN( 0xAA ) ); + +new TestCase( SECTION, "isNaN( '0x0a' )", false, isNaN( "0x0a" ) ); +new TestCase( SECTION, "isNaN( '0xaa' )", false, isNaN( "0xaa" ) ); +new TestCase( SECTION, "isNaN( '0x0A' )", false, isNaN( "0x0A" ) ); +new TestCase( SECTION, "isNaN( '0xAA' )", false, isNaN( "0xAA" ) ); + +new TestCase( SECTION, "isNaN( 077 )", false, isNaN( 077 ) ); +new TestCase( SECTION, "isNaN( '077' )", false, isNaN( "077" ) ); + + +new TestCase( SECTION, "isNaN( Number.NaN )", true, isNaN(Number.NaN) ); +new TestCase( SECTION, "isNaN( Number.POSITIVE_INFINITY )", false, isNaN(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "isNaN( Number.NEGATIVE_INFINITY )", false, isNaN(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "isNaN( Number.MAX_VALUE )", false, isNaN(Number.MAX_VALUE) ); +new TestCase( SECTION, "isNaN( Number.MIN_VALUE )", false, isNaN(Number.MIN_VALUE) ); + +new TestCase( SECTION, "isNaN( NaN )", true, isNaN(NaN) ); +new TestCase( SECTION, "isNaN( Infinity )", false, isNaN(Infinity) ); + +new TestCase( SECTION, "isNaN( 'Infinity' )", false, isNaN("Infinity") ); +new TestCase( SECTION, "isNaN( '-Infinity' )", false, isNaN("-Infinity") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.7.js b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.7.js new file mode 100644 index 00000000..05e5fbcb --- /dev/null +++ b/source/spidermonkey-tests/ecma/GlobalObject/15.1.2.7.js @@ -0,0 +1,96 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.7.js + ECMA Section: 15.1.2.7 isFinite(number) + + Description: Applies ToNumber to its argument, then returns false if + the result is NaN, Infinity, or -Infinity, and otherwise + returns true. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.1.2.7"; +var VERSION = "ECMA_1"; +var TITLE = "isFinite( x )"; +var BUGNUMBER= "none"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "isFinite.length", 1, isFinite.length ); +new TestCase( SECTION, "isFinite.length = null; isFinite.length", 1, eval("isFinite.length=null; isFinite.length") ); +new TestCase( SECTION, "delete isFinite.length", false, delete isFinite.length ); +new TestCase( SECTION, "delete isFinite.length; isFinite.length", 1, eval("delete isFinite.length; isFinite.length") ); +new TestCase( SECTION, "var MYPROPS=''; for ( p in isFinite ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( p in isFinite ) { MYPROPS += p }; MYPROPS") ); + +new TestCase( SECTION, "isFinite()", false, isFinite() ); +new TestCase( SECTION, "isFinite( null )", true, isFinite(null) ); +new TestCase( SECTION, "isFinite( void 0 )", false, isFinite(void 0) ); +new TestCase( SECTION, "isFinite( false )", true, isFinite(false) ); +new TestCase( SECTION, "isFinite( true)", true, isFinite(true) ); +new TestCase( SECTION, "isFinite( ' ' )", true, isFinite( " " ) ); + +new TestCase( SECTION, "isFinite( new Boolean(true) )", true, isFinite(new Boolean(true)) ); +new TestCase( SECTION, "isFinite( new Boolean(false) )", true, isFinite(new Boolean(false)) ); + +new TestCase( SECTION, "isFinite( 0 )", true, isFinite(0) ); +new TestCase( SECTION, "isFinite( 1 )", true, isFinite(1) ); +new TestCase( SECTION, "isFinite( 2 )", true, isFinite(2) ); +new TestCase( SECTION, "isFinite( 3 )", true, isFinite(3) ); +new TestCase( SECTION, "isFinite( 4 )", true, isFinite(4) ); +new TestCase( SECTION, "isFinite( 5 )", true, isFinite(5) ); +new TestCase( SECTION, "isFinite( 6 )", true, isFinite(6) ); +new TestCase( SECTION, "isFinite( 7 )", true, isFinite(7) ); +new TestCase( SECTION, "isFinite( 8 )", true, isFinite(8) ); +new TestCase( SECTION, "isFinite( 9 )", true, isFinite(9) ); + +new TestCase( SECTION, "isFinite( '0' )", true, isFinite('0') ); +new TestCase( SECTION, "isFinite( '1' )", true, isFinite('1') ); +new TestCase( SECTION, "isFinite( '2' )", true, isFinite('2') ); +new TestCase( SECTION, "isFinite( '3' )", true, isFinite('3') ); +new TestCase( SECTION, "isFinite( '4' )", true, isFinite('4') ); +new TestCase( SECTION, "isFinite( '5' )", true, isFinite('5') ); +new TestCase( SECTION, "isFinite( '6' )", true, isFinite('6') ); +new TestCase( SECTION, "isFinite( '7' )", true, isFinite('7') ); +new TestCase( SECTION, "isFinite( '8' )", true, isFinite('8') ); +new TestCase( SECTION, "isFinite( '9' )", true, isFinite('9') ); + +new TestCase( SECTION, "isFinite( 0x0a )", true, isFinite( 0x0a ) ); +new TestCase( SECTION, "isFinite( 0xaa )", true, isFinite( 0xaa ) ); +new TestCase( SECTION, "isFinite( 0x0A )", true, isFinite( 0x0A ) ); +new TestCase( SECTION, "isFinite( 0xAA )", true, isFinite( 0xAA ) ); + +new TestCase( SECTION, "isFinite( '0x0a' )", true, isFinite( "0x0a" ) ); +new TestCase( SECTION, "isFinite( '0xaa' )", true, isFinite( "0xaa" ) ); +new TestCase( SECTION, "isFinite( '0x0A' )", true, isFinite( "0x0A" ) ); +new TestCase( SECTION, "isFinite( '0xAA' )", true, isFinite( "0xAA" ) ); + +new TestCase( SECTION, "isFinite( 077 )", true, isFinite( 077 ) ); +new TestCase( SECTION, "isFinite( '077' )", true, isFinite( "077" ) ); + +new TestCase( SECTION, "isFinite( new String('Infinity') )", false, isFinite(new String("Infinity")) ); +new TestCase( SECTION, "isFinite( new String('-Infinity') )", false, isFinite(new String("-Infinity")) ); + +new TestCase( SECTION, "isFinite( 'Infinity' )", false, isFinite("Infinity") ); +new TestCase( SECTION, "isFinite( '-Infinity' )", false, isFinite("-Infinity") ); +new TestCase( SECTION, "isFinite( Number.POSITIVE_INFINITY )", false, isFinite(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "isFinite( Number.NEGATIVE_INFINITY )", false, isFinite(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "isFinite( Number.NaN )", false, isFinite(Number.NaN) ); + +new TestCase( SECTION, "isFinite( Infinity )", false, isFinite(Infinity) ); +new TestCase( SECTION, "isFinite( -Infinity )", false, isFinite(-Infinity) ); +new TestCase( SECTION, "isFinite( NaN )", false, isFinite(NaN) ); + + +new TestCase( SECTION, "isFinite( Number.MAX_VALUE )", true, isFinite(Number.MAX_VALUE) ); +new TestCase( SECTION, "isFinite( Number.MIN_VALUE )", true, isFinite(Number.MIN_VALUE) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/GlobalObject/browser.js b/source/spidermonkey-tests/ecma/GlobalObject/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/GlobalObject/shell.js b/source/spidermonkey-tests/ecma/GlobalObject/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.1-1.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.1-1.js new file mode 100644 index 00000000..202ffec0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.1-1.js @@ -0,0 +1,48 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.1-1.js + ECMA Section: 7.1 White Space + Description: - readability + - separate tokens + - otherwise should be insignificant + - in strings, white space characters are significant + - cannot appear within any other kind of token + + white space characters are: + unicode name formal name string representation + \u0009 tab <TAB> \t + \u000B veritical tab <VT> \v + \U000C form feed <FF> \f + \u0020 space <SP> " " + + Author: christine@netscape.com + Date: 11 september 1997 +*/ + +var SECTION = "7.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "White Space"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// whitespace between var keyword and identifier + +new TestCase( SECTION, 'var'+'\t'+'MYVAR1=10;MYVAR1', 10, eval('var'+'\t'+'MYVAR1=10;MYVAR1') ); +new TestCase( SECTION, 'var'+'\f'+'MYVAR2=10;MYVAR2', 10, eval('var'+'\f'+'MYVAR2=10;MYVAR2') ); +new TestCase( SECTION, 'var'+'\v'+'MYVAR2=10;MYVAR2', 10, eval('var'+'\v'+'MYVAR2=10;MYVAR2') ); +new TestCase( SECTION, 'var'+'\ '+'MYVAR2=10;MYVAR2', 10, eval('var'+'\ '+'MYVAR2=10;MYVAR2') ); + +// use whitespace between tokens object name, dot operator, and object property + +new TestCase( SECTION, + "var a = new Array(12345); a\t\v\f .\\u0009\\000B\\u000C\\u0020length", + 12345, + eval("var a = new Array(12345); a\t\v\f .\u0009\u0020\u000C\u000Blength") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.1-2.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.1-2.js new file mode 100644 index 00000000..2e22212f --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.1-2.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.1-2.js + ECMA Section: 7.1 White Space + Description: - readability + - separate tokens + - otherwise should be insignificant + - in strings, white space characters are significant + - cannot appear within any other kind of token + + white space characters are: + unicode name formal name string representation + \u0009 tab <TAB> \t + \u000B veritical tab <VT> ?? + \U000C form feed <FF> \f + \u0020 space <SP> " " + + Author: christine@netscape.com + Date: 11 september 1997 +*/ + +var SECTION = "7.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "White Space"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "'var'+'\u000B'+'MYVAR1=10;MYVAR1'", 10, eval('var'+'\u000B'+'MYVAR1=10;MYVAR1') ); +new TestCase( SECTION, "'var'+'\u0009'+'MYVAR2=10;MYVAR2'", 10, eval('var'+'\u0009'+'MYVAR2=10;MYVAR2') ); +new TestCase( SECTION, "'var'+'\u000C'+'MYVAR3=10;MYVAR3'", 10, eval('var'+'\u000C'+'MYVAR3=10;MYVAR3') ); +new TestCase( SECTION, "'var'+'\u0020'+'MYVAR4=10;MYVAR4'", 10, eval('var'+'\u0020'+'MYVAR4=10;MYVAR4') ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.1-3.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.1-3.js new file mode 100644 index 00000000..1f4d253b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.1-3.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.1-3.js + ECMA Section: 7.1 White Space + Description: - readability + - separate tokens + - otherwise should be insignificant + - in strings, white space characters are significant + - cannot appear within any other kind of token + + white space characters are: + unicode name formal name string representation + \u0009 tab <TAB> \t + \u000B veritical tab <VT> ?? + \U000C form feed <FF> \f + \u0020 space <SP> " " + + Author: christine@netscape.com + Date: 11 september 1997 +*/ + +var SECTION = "7.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "White Space"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "'var'+'\u000B'+'MYVAR1=10;MYVAR1'", 10, eval('var'+'\u000B'+'MYVAR1=10;MYVAR1') ); +new TestCase( SECTION, "'var'+'\u0009'+'MYVAR2=10;MYVAR2'", 10, eval('var'+'\u0009'+'MYVAR2=10;MYVAR2') ); +new TestCase( SECTION, "'var'+'\u000C'+'MYVAR3=10;MYVAR3'", 10, eval('var'+'\u000C'+'MYVAR3=10;MYVAR3') ); +new TestCase( SECTION, "'var'+'\u0020'+'MYVAR4=10;MYVAR4'", 10, eval('var'+'\u0020'+'MYVAR4=10;MYVAR4') ); + +// +<white space>+ should be interpreted as the unary + operator twice, not as a post or prefix increment operator + +new TestCase( SECTION, + "var VAR = 12345; + + VAR", + 12345, + eval("var VAR = 12345; + + VAR") ); + +new TestCase( SECTION, + "var VAR = 12345;VAR+ + VAR", + 24690, + eval("var VAR = 12345;VAR+ +VAR") ); +new TestCase( SECTION, + "var VAR = 12345;VAR - - VAR", + 24690, + eval("var VAR = 12345;VAR- -VAR") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.2-1.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-1.js new file mode 100644 index 00000000..f17143af --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-1.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.2-1.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Line Terminators"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, "var a\nb = 5; ab=10;ab;", 10, eval("var a\nb = 5; ab=10;ab") ); +new TestCase( SECTION, "var a\nb = 5; ab=10;b;", 5, eval("var a\nb = 5; ab=10;b") ); +new TestCase( SECTION, "var a\rb = 5; ab=10;ab;", 10, eval("var a\rb = 5; ab=10;ab") ); +new TestCase( SECTION, "var a\rb = 5; ab=10;b;", 5, eval("var a\rb = 5; ab=10;b") ); +new TestCase( SECTION, "var a\r\nb = 5; ab=10;ab;", 10, eval("var a\r\nb = 5; ab=10;ab") ); +new TestCase( SECTION, "var a\r\nb = 5; ab=10;b;", 5, eval("var a\r\nb = 5; ab=10;b") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.2-2-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-2-n.js new file mode 100644 index 00000000..7f3bb867 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-2-n.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.2.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + this test uses onerror to capture line numbers. because + we use on error, we can only have one test case per file. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Line Terminators"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "\r\r\r\nb"; +EXPECTED = "error" + + new TestCase( SECTION, DESCRIPTION, "error", eval("\r\r\r\nb")); + +test(); + diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.2-3-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-3-n.js new file mode 100644 index 00000000..0d78e549 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-3-n.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.2-3.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + this test uses onerror to capture line numbers. because + we use on error, we can only have one test case per file. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.2-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Line Terminators"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +DESCRIPTION = "\r\nb"; +EXPECTED = "error" + + new TestCase( SECTION, "<cr>a", "error", eval("\r\nb")); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.2-4-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-4-n.js new file mode 100644 index 00000000..36a55d28 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-4-n.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.2.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + this test uses onerror to capture line numbers. because + we use on error, we can only have one test case per file. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.2-6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Line Terminators"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "\nb"; +EXPECTED = "error"; + +new TestCase( SECTION, "\nb", "error", eval("\nb")); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.2-5-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-5-n.js new file mode 100644 index 00000000..44fd905b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-5-n.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.2.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + this test uses onerror to capture line numbers. because + we use on error, we can only have one test case per file. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.2-5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Line Terminators"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = + EXPECTED = "error"; + +new TestCase( SECTION, "\rb", "error", eval("\rb")); +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.2-6.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-6.js new file mode 100644 index 00000000..030a6a6b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.2-6.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.2-6.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.2-6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Line Terminators"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "var a\u000Ab = 5; ab=10;ab;", 10, eval("var a\nb = 5; ab=10;ab") ); +new TestCase( SECTION, "var a\u000Db = 5; ab=10;b;", 5, eval("var a\nb = 5; ab=10;b") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-1.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-1.js new file mode 100644 index 00000000..dff7153f --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-1.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-1.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase; + +testcase = new TestCase( SECTION, + "a comment with a line terminator string, and text following", + "pass", + "pass"); + +// "\u000A" testcase.actual = "fail"; + + +testcase = new TestCase( SECTION, + "// test \\n testcase.actual = \"pass\"", + "pass", + "" ); + +var x = "// test \n testcase.actual = 'pass'"; + +testcase.actual = eval(x); + +test(); + +// XXX bc replace test() +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +": "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : " ignored chars after line terminator of single-line comment"; + } + stopTest(); + return ( gTestcases ); +} diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-10.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-10.js new file mode 100644 index 00000000..494f8da0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-10.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-10.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "code following multiline comment", + "pass", + "fail"); + +/*//*/testcase.actual="pass"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-11.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-11.js new file mode 100644 index 00000000..7ac777fb --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-11.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-11.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var testcase = new TestCase( SECTION, + "code following multiline comment", + "pass", + "pass"); + +////testcase.actual="fail"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-12.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-12.js new file mode 100644 index 00000000..8700d26a --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-12.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-12.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "code following multiline comment", + "pass", + "pass"); +/*testcase.actual="fail";**/ + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-13-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-13-n.js new file mode 100644 index 00000000..ce26b91e --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-13-n.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-13-n.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-13-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "nested comment"; +EXPECTED = "error"; + +var testcase = new TestCase( SECTION, + "nested comment", + "error", + eval("/*/*\"fail\";*/*/")); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-2.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-2.js new file mode 100644 index 00000000..0b42cb84 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-2.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-2.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "a comment with a carriage return, and text following", + "pass", + "pass"); + +// "\u000D" testcase.actual = "fail"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-3.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-3.js new file mode 100644 index 00000000..c4e629aa --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-3.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-3.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "source text directly following a single-line comment", + "pass", + "fail"); +// a comment string +testcase.actual = "pass"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-4.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-4.js new file mode 100644 index 00000000..11a7bac8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-4.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-4.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "multiline comment ", + "pass", + "pass"); + +/*testcase.actual = "fail";*/ + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-5.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-5.js new file mode 100644 index 00000000..bb3b7876 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-5.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-5.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "a comment with a carriage return, and text following", + "pass", + "pass"); + +// "\u000A" testcase.actual = "fail"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-6.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-6.js new file mode 100644 index 00000000..59e4e7cc --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-6.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-6.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); +var testcase = new TestCase( SECTION, + "comment with multiple asterisks", + "pass", + "fail"); + +/* +***/testcase.actual="pass"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-7.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-7.js new file mode 100644 index 00000000..f82ac011 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-7.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-7.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-7"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "single line comment following multiline comment", + "pass", + "pass"); + +/* +***///testcase.actual="fail"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-8.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-8.js new file mode 100644 index 00000000..75796864 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-8.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-7.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-8"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "code following multiline comment", + "pass", + "fail"); + +/**/testcase.actual="pass"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.3-9.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-9.js new file mode 100644 index 00000000..e91047d7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.3-9.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.3-9.js + ECMA Section: 7.3 Comments + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.3-9"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Comments"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "code following multiline comment", + "pass", + "fail"); + +/*/*/testcase.actual="pass"; + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-1-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-1-n.js new file mode 100644 index 00000000..f5044b85 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-1-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.1-1-n.js + ECMA Section: 7.4.1 + + Description: + + Reserved words cannot be used as identifiers. + + ReservedWord :: + Keyword + FutureReservedWord + NullLiteral + BooleanLiteral + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-1-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var null = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var null = true", "error", eval("var null = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-2-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-2-n.js new file mode 100644 index 00000000..8012fbfe --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-2-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.1-2.js + ECMA Section: 7.4.1 + + Description: + + Reserved words cannot be used as identifiers. + + ReservedWord :: + Keyword + FutureReservedWord + NullLiteral + BooleanLiteral + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-2-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var true = false"; +EXPECTED = "error"; + +new TestCase( SECTION, "var true = false", "error", eval("var true = false") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-3-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-3-n.js new file mode 100644 index 00000000..2060370f --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.1-3-n.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.1-3-n.js + ECMA Section: 7.4.1 + + Description: + + Reserved words cannot be used as identifiers. + + ReservedWord :: + Keyword + FutureReservedWord + NullLiteral + BooleanLiteral + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +DESCRIPTION = "var false = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var false = true", "error", eval("var false = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-1-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-1-n.js new file mode 100644 index 00000000..cf9ae9c6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-1-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-1.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.2-1-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var break = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var break = true", "error", eval("var break = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-10-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-10-n.js new file mode 100644 index 00000000..83a2fb12 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-10-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-10.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-10-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var if = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var if = true", "error", eval("var if = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-11-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-11-n.js new file mode 100644 index 00000000..21f45e13 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-11-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-11-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-11-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var this = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var this = true", "error", eval("var this = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-12-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-12-n.js new file mode 100644 index 00000000..fb403365 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-12-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-12-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-12-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var while = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var while = true", "error", eval("var while = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-13-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-13-n.js new file mode 100644 index 00000000..7deec947 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-13-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-13-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-13-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var else = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var else = true", "error", eval("var else = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-14-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-14-n.js new file mode 100644 index 00000000..00eafcee --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-14-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-14-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-14-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var in = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var in = true", "error", eval("var in = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-15-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-15-n.js new file mode 100644 index 00000000..4b224fc2 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-15-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-15-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-15-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var typeof = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var typeof = true", "error", eval("var typeof = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-16-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-16-n.js new file mode 100644 index 00000000..08418bbc --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-16-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-16-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-16-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var with = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var with = true", "error", eval("var with = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-2-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-2-n.js new file mode 100644 index 00000000..54085e21 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-2-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-2-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-2-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var for = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var for = true", "error", eval("var for = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-3-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-3-n.js new file mode 100644 index 00000000..194ec14b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-3-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-3-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.2-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var new = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var new = true", "error", eval("var new = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-4-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-4-n.js new file mode 100644 index 00000000..1784ceef --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-4-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-4-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.2-4-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var var = true"; +EXPECTED = "error"; + +TestCase( SECTION, "var var = true", "error", eval("var var = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-5-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-5-n.js new file mode 100644 index 00000000..df54b433 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-5-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-5-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.2-5-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var continue = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var continue = true", "error", eval("var continue = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-6-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-6-n.js new file mode 100644 index 00000000..4c43976c --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-6-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-6.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.2-6-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var function = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var function = true", "error", eval("var function = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-7-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-7-n.js new file mode 100644 index 00000000..d038de1c --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-7-n.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-7-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.2-7"; +var VERSION = "ECMA_1"; +startTest(); +writeHeaderToLog( SECTION + " Keywords"); + +DESCRIPTION = "var return = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var return = true", "error", eval("var return = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-8-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-8-n.js new file mode 100644 index 00000000..a1d06f3b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-8-n.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-8-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.2-8"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Keywords"); + +DESCRIPTION = "var void = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var void = true", "error", eval("var void = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-9-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-9-n.js new file mode 100644 index 00000000..2c3dfb8b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.2-9-n.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-9-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "7.4.1-9-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Keywords"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var delete = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var delete = true", "error", eval("var delete = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-1-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-1-n.js new file mode 100644 index 00000000..b984db0c --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-1-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-1-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-1-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var case = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var case = true", "error", eval("var case = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-10-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-10-n.js new file mode 100644 index 00000000..370d50f0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-10-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-10-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-10-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var do = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var do = true", "error", eval("var do = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-11-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-11-n.js new file mode 100644 index 00000000..625154cd --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-11-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-11-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-11-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var finally = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var finally = true", "error", eval("var finally = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-12-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-12-n.js new file mode 100644 index 00000000..ef1c29e0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-12-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-12-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-12-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var throw = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var throw = true", "error", eval("var throw = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-13-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-13-n.js new file mode 100644 index 00000000..a4ec57f8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-13-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-13-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-13-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var const = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var const = true", "error", eval("var const = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-14-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-14-n.js new file mode 100644 index 00000000..748cb718 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-14-n.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-14-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-14-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var actual = 'no error'; +var prefValue; + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +try +{ + eval("var enum = true"); +} +catch(e) +{ + actual = 'error'; +} + +DESCRIPTION = "var enum = true"; +EXPECTED = "error"; + +// force exception since this is a negative test +if (actual == 'error') +{ + throw actual; +} + +new TestCase( SECTION, + "var enum = true", + "error", + actual ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-15-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-15-n.js new file mode 100644 index 00000000..5a3d62c8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-15-n.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-15-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-15-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var actual = 'no error'; +var prefValue; + +print("This test requires option javascript.options.strict enabled"); + +options('strict'); +options('werror'); + +try +{ + eval("var import = true"); +} +catch(e) +{ + actual = 'error'; +} + +DESCRIPTION = "var import = true"; +EXPECTED = "error"; + +// force exception since this is a negative test +if (actual == 'error') +{ + throw actual; +} + +new TestCase( SECTION, + "var import = true", + "error", + actual ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-16-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-16-n.js new file mode 100644 index 00000000..5a42152e --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-16-n.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-023.js + Corresponds To: 7.4.3-16-n.js + ECMA Section: 7.4.3 + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-023.js"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; +/* + try { + try = true; + } catch ( e ) { + result = expect; + exception = e.toString(); + } +*/ + +DESCRIPTION = "try = true"; +EXPECTED = "error"; + +new TestCase( + SECTION, + "try = true" + + " (threw " + exception +")", + "error", + eval("try = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-2-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-2-n.js new file mode 100644 index 00000000..6e3e557e --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-2-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-2-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-2-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var debugger = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var debugger = true", "error", eval("var debugger = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-3-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-3-n.js new file mode 100644 index 00000000..f3b0b38d --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-3-n.js @@ -0,0 +1,38 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-3-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var export = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var export = true", "error", eval("var export = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-4-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-4-n.js new file mode 100644 index 00000000..5cea867e --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-4-n.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-4-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-4-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var actual = 'no error'; +var prefValue; + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +try +{ + eval("var super = true"); +} +catch(e) +{ + actual = 'error'; +} + +DESCRIPTION = "var super = true" + EXPECTED = "error"; + +// force exception since this is a negative test +if (actual == 'error') +{ + throw actual; +} + +new TestCase( SECTION, + "var super = true", + "error", + actual ); +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-5-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-5-n.js new file mode 100644 index 00000000..7c27b51d --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-5-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-5-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-5-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var catch = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var catch = true", "error", eval("var catch = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-6-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-6-n.js new file mode 100644 index 00000000..00770ff4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-6-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-6-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-6-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var default = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var default = true", "error", eval("var default = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-7-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-7-n.js new file mode 100644 index 00000000..b6f1bc07 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-7-n.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-7-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-7-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var actual = 'no error'; +var prefValue; + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +try +{ + eval("var extends = true"); +} +catch(e) +{ + actual = 'error'; +} + +DESCRIPTION = "var extends = true"; +EXPECTED = "error"; + +// force exception since this is a negative test +if (actual == 'error') +{ + throw actual; +} + +new TestCase( SECTION, + "var extends = true", + "error", + actual); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-8-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-8-n.js new file mode 100644 index 00000000..f6d5f86b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-8-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-8-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-9-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var switch = true"; +EXPECTED = "error"; + +new TestCase( SECTION, "var switch = true", "error", eval("var switch = true") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-9-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-9-n.js new file mode 100644 index 00000000..94bcdca6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.4.3-9-n.js @@ -0,0 +1,70 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.3-9-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "7.4.3-9-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Future Reserved Words"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var actual = 'no error'; +var prefValue; + +DESCRIPTION = "var class = true"; +EXPECTED = "error"; + + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +try +{ + eval("var class = true"); +} +catch(e) +{ + actual = 'error'; +} + +// force exception since this is a negative test +if (actual == 'error') +{ + throw actual; +} + +new TestCase( SECTION, + "var class = true", + "error", + actual ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-1.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-1.js new file mode 100644 index 00000000..9888f17c --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-1.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-1.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "var $123 = 5", 5, eval("var $123 = 5;$123") ); +new TestCase( SECTION, "var _123 = 5", 5, eval("var _123 = 5;_123") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-10-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-10-n.js new file mode 100644 index 00000000..dca2cbfc --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-10-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-9-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-9-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var 123=\"hi\""; +EXPECTED = "error"; + +new TestCase( SECTION, "var 123=\"hi\"", "error", eval("123 = \"hi\"; array[item] = 123;") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-2-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-2-n.js new file mode 100644 index 00000000..3f909751 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-2-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-2-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-2-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var 0abc"; +EXPECTED = "error"; + +new TestCase( SECTION, "var 0abc", "error", eval("var 0abc") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-3-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-3-n.js new file mode 100644 index 00000000..f88cc771 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-3-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-2.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var 1abc"; +EXPECTED = "error"; + +new TestCase( SECTION, "var 1abc", "error", eval("var 1abc") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-4-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-4-n.js new file mode 100644 index 00000000..393a57af --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-4-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-4-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-4-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var 2abc"; +EXPECTED = "error"; + +new TestCase( SECTION, "var 2abc", "error", eval("var 2abc") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-5-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-5-n.js new file mode 100644 index 00000000..c04138b6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-5-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-5-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-5-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var 3abc"; +EXPECTED = "error"; + +new TestCase( SECTION, "var 3abc", "error", eval("var 3abc") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-6.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-6.js new file mode 100644 index 00000000..cca79cc2 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-6.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-6.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "var _0abc = 5", 5, eval("var _0abc = 5; _0abc") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-7.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-7.js new file mode 100644 index 00000000..3c6bf48c --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-7.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-7.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-7"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "var $0abc = 5", 5, eval("var $0abc = 5; $0abc") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-8-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-8-n.js new file mode 100644 index 00000000..efb30e9d --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-8-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-8-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-8-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var @0abc = 5; @0abc"; +EXPECTED = "error"; + +new TestCase( SECTION, "var @0abc = 5; @0abc", "error", eval("var @0abc = 5; @0abc") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.5-9-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-9-n.js new file mode 100644 index 00000000..9d6c0127 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.5-9-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.5-9-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "7.5-9-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Identifiers"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var 123=\"hi\""; +EXPECTED = "error"; + +new TestCase( SECTION, "var 123=\"hi\"", "error", eval("var 123 = \"hi\";array[item] = 123;") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.6.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.6.js new file mode 100644 index 00000000..b86ee962 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.6.js @@ -0,0 +1,279 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.6.js + ECMA Section: Punctuators + Description: + + This tests verifies that all ECMA punctutors are recognized as a + token separator, but does not attempt to verify the functionality + of any punctuator. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "7.6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Punctuators"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// == +new TestCase( SECTION, + "var c,d;c==d", + true, + eval("var c,d;c==d") ); + +// = + +new TestCase( SECTION, + "var a=true;a", + true, + eval("var a=true;a") ); + +// > +new TestCase( SECTION, + "var a=true,b=false;a>b", + true, + eval("var a=true,b=false;a>b") ); + +// < +new TestCase( SECTION, + "var a=true,b=false;a<b", + false, + eval("var a=true,b=false;a<b") ); + +// <= +new TestCase( SECTION, + "var a=0xFFFF,b=0X0FFF;a<=b", + false, + eval("var a=0xFFFF,b=0X0FFF;a<=b") ); + +// >= +new TestCase( SECTION, + "var a=0xFFFF,b=0XFFFE;a>=b", + true, + eval("var a=0xFFFF,b=0XFFFE;a>=b") ); + +// != +new TestCase( SECTION, + "var a=true,b=false;a!=b", + true, + eval("var a=true,b=false;a!=b") ); + +new TestCase( SECTION, + "var a=false,b=false;a!=b", + false, + eval("var a=false,b=false;a!=b") ); +// , +new TestCase( SECTION, + "var a=true,b=false;a,b", + false, + eval("var a=true,b=false;a,b") ); +// ! +new TestCase( SECTION, + "var a=true,b=false;!a", + false, + eval("var a=true,b=false;!a") ); + +// ~ +new TestCase( SECTION, + "var a=true;~a", + -2, + eval("var a=true;~a") ); +// ? +new TestCase( SECTION, + "var a=true; (a ? 'PASS' : '')", + "PASS", + eval("var a=true; (a ? 'PASS' : '')") ); + +// : + +new TestCase( SECTION, + "var a=false; (a ? 'FAIL' : 'PASS')", + "PASS", + eval("var a=false; (a ? 'FAIL' : 'PASS')") ); +// . + +new TestCase( SECTION, + "var a=Number;a.NaN", + NaN, + eval("var a=Number;a.NaN") ); + +// && +new TestCase( SECTION, + "var a=true,b=true;if(a&&b)'PASS';else'FAIL'", + "PASS", + eval("var a=true,b=true;if(a&&b)'PASS';else'FAIL'") ); + +// || +new TestCase( SECTION, + "var a=false,b=false;if(a||b)'FAIL';else'PASS'", + "PASS", + eval("var a=false,b=false;if(a||b)'FAIL';else'PASS'") ); +// ++ +new TestCase( SECTION, + "var a=false,b=false;++a", + 1, + eval("var a=false,b=false;++a") ); +// -- +new TestCase( SECTION, + "var a=true,b=false--a", + 0, + eval("var a=true,b=false;--a") ); +// + + +new TestCase( SECTION, + "var a=true,b=true;a+b", + 2, + eval("var a=true,b=true;a+b") ); +// - +new TestCase( SECTION, + "var a=true,b=true;a-b", + 0, + eval("var a=true,b=true;a-b") ); +// * +new TestCase( SECTION, + "var a=true,b=true;a*b", + 1, + eval("var a=true,b=true;a*b") ); +// / +new TestCase( SECTION, + "var a=true,b=true;a/b", + 1, + eval("var a=true,b=true;a/b") ); +// & +new TestCase( SECTION, + "var a=3,b=2;a&b", + 2, + eval("var a=3,b=2;a&b") ); +// | +new TestCase( SECTION, + "var a=4,b=3;a|b", + 7, + eval("var a=4,b=3;a|b") ); + +// | +new TestCase( SECTION, + "var a=4,b=3;a^b", + 7, + eval("var a=4,b=3;a^b") ); + +// % +new TestCase( SECTION, + "var a=4,b=3;a|b", + 1, + eval("var a=4,b=3;a%b") ); + +// << +new TestCase( SECTION, + "var a=4,b=3;a<<b", + 32, + eval("var a=4,b=3;a<<b") ); + +// >> +new TestCase( SECTION, + "var a=4,b=1;a>>b", + 2, + eval("var a=4,b=1;a>>b") ); + +// >>> +new TestCase( SECTION, + "var a=1,b=1;a>>>b", + 0, + eval("var a=1,b=1;a>>>b") ); +// += +new TestCase( SECTION, + "var a=4,b=3;a+=b;a", + 7, + eval("var a=4,b=3;a+=b;a") ); + +// -= +new TestCase( SECTION, + "var a=4,b=3;a-=b;a", + 1, + eval("var a=4,b=3;a-=b;a") ); +// *= +new TestCase( SECTION, + "var a=4,b=3;a*=b;a", + 12, + eval("var a=4,b=3;a*=b;a") ); +// += +new TestCase( SECTION, + "var a=4,b=3;a+=b;a", + 7, + eval("var a=4,b=3;a+=b;a") ); +// /= +new TestCase( SECTION, + "var a=12,b=3;a/=b;a", + 4, + eval("var a=12,b=3;a/=b;a") ); + +// &= +new TestCase( SECTION, + "var a=4,b=5;a&=b;a", + 4, + eval("var a=4,b=5;a&=b;a") ); + +// |= +new TestCase( SECTION, + "var a=4,b=5;a&=b;a", + 5, + eval("var a=4,b=5;a|=b;a") ); +// ^= +new TestCase( SECTION, + "var a=4,b=5;a^=b;a", + 1, + eval("var a=4,b=5;a^=b;a") ); +// %= +new TestCase( SECTION, + "var a=12,b=5;a%=b;a", + 2, + eval("var a=12,b=5;a%=b;a") ); +// <<= +new TestCase( SECTION, + "var a=4,b=3;a<<=b;a", + 32, + eval("var a=4,b=3;a<<=b;a") ); + +// >> +new TestCase( SECTION, + "var a=4,b=1;a>>=b;a", + 2, + eval("var a=4,b=1;a>>=b;a") ); + +// >>> +new TestCase( SECTION, + "var a=1,b=1;a>>>=b;a", + 0, + eval("var a=1,b=1;a>>>=b;a") ); + +// () +new TestCase( SECTION, + "var a=4,b=3;(a)", + 4, + eval("var a=4,b=3;(a)") ); +// {} +new TestCase( SECTION, + "var a=4,b=3;{b}", + 3, + eval("var a=4,b=3;{b}") ); + +// [] +new TestCase( SECTION, + "var a=new Array('hi');a[0]", + "hi", + eval("var a=new Array('hi');a[0]") ); +// [] +new TestCase( SECTION, + ";", + void 0, + eval(";") ); +test(); + diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.7.1.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.1.js new file mode 100644 index 00000000..c50a3787 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.1.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.7.1.js + ECMA Section: 7.7.1 Null Literals + + Description: NullLiteral:: + null + + + The value of the null literal null is the sole value + of the Null type, namely null. + + Author: christine@netscape.com + Date: 21 october 1997 +*/ +var SECTION = "7.7.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Null Literals"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "null", null, null); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.7.2.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.2.js new file mode 100644 index 00000000..77ebdea6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.2.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.7.2.js + ECMA Section: 7.7.2 Boolean Literals + + Description: BooleanLiteral:: + true + false + + The value of the Boolean literal true is a value of the + Boolean type, namely true. + + The value of the Boolean literal false is a value of the + Boolean type, namely false. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "7.7.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Boolean Literals"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// StringLiteral:: "" and '' + +new TestCase( SECTION, "true", Boolean(true), true ); +new TestCase( SECTION, "false", Boolean(false), false ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3-1.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3-1.js new file mode 100644 index 00000000..e5bc48e1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3-1.js @@ -0,0 +1,164 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.7.3-1.js + ECMA Section: 7.7.3 Numeric Literals + + Description: A numeric literal stands for a value of the Number type + This value is determined in two steps: first a + mathematical value (MV) is derived from the literal; + second, this mathematical value is rounded, ideally + using IEEE 754 round-to-nearest mode, to a reprentable + value of of the number type. + + These test cases came from Waldemar. + + Author: christine@netscape.com + Date: 12 June 1998 +*/ + +var SECTION = "7.7.3-1"; +var VERSION = "ECMA_1"; +var TITLE = "Numeric Literals"; +var BUGNUMBER="122877"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "0x12345678", + 305419896, + 0x12345678 ); + +new TestCase( SECTION, + "0x80000000", + 2147483648, + 0x80000000 ); + +new TestCase( SECTION, + "0xffffffff", + 4294967295, + 0xffffffff ); + +new TestCase( SECTION, + "0x100000000", + 4294967296, + 0x100000000 ); + +new TestCase( SECTION, + "077777777777777777", + 2251799813685247, + 077777777777777777 ); + +new TestCase( SECTION, + "077777777777777776", + 2251799813685246, + 077777777777777776 ); + +new TestCase( SECTION, + "0x1fffffffffffff", + 9007199254740991, + 0x1fffffffffffff ); + +new TestCase( SECTION, + "0x20000000000000", + 9007199254740992, + 0x20000000000000 ); + +new TestCase( SECTION, + "0x20123456789abc", + 9027215253084860, + 0x20123456789abc ); + +new TestCase( SECTION, + "0x20123456789abd", + 9027215253084860, + 0x20123456789abd ); + +new TestCase( SECTION, + "0x20123456789abe", + 9027215253084862, + 0x20123456789abe ); + +new TestCase( SECTION, + "0x20123456789abf", + 9027215253084864, + 0x20123456789abf ); + +new TestCase( SECTION, + "0x1000000000000080", + 1152921504606847000, + 0x1000000000000080 ); + +new TestCase( SECTION, + "0x1000000000000081", + 1152921504606847200, + 0x1000000000000081 ); + +new TestCase( SECTION, + "0x1000000000000100", + 1152921504606847200, + 0x1000000000000100 ); + +new TestCase( SECTION, + "0x100000000000017f", + 1152921504606847200, + 0x100000000000017f ); + +new TestCase( SECTION, + "0x1000000000000180", + 1152921504606847500, + 0x1000000000000180 ); + +new TestCase( SECTION, + "0x1000000000000181", + 1152921504606847500, + 0x1000000000000181 ); + +new TestCase( SECTION, + "0x10000000000001f0", + 1152921504606847500, + 0x10000000000001f0 ); + +new TestCase( SECTION, + "0x1000000000000200", + 1152921504606847500, + 0x1000000000000200 ); + +new TestCase( SECTION, + "0x100000000000027f", + 1152921504606847500, + 0x100000000000027f ); + +new TestCase( SECTION, + "0x1000000000000280", + 1152921504606847500, + 0x1000000000000280 ); + +new TestCase( SECTION, + "0x1000000000000281", + 1152921504606847700, + 0x1000000000000281 ); + +new TestCase( SECTION, + "0x10000000000002ff", + 1152921504606847700, + 0x10000000000002ff ); + +new TestCase( SECTION, + "0x1000000000000300", + 1152921504606847700, + 0x1000000000000300 ); + +new TestCase( SECTION, + "0x10000000000000000", + 18446744073709552000, + 0x10000000000000000 ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3-2.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3-2.js new file mode 100644 index 00000000..41aee54e --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3-2.js @@ -0,0 +1,59 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.7.3-2.js + ECMA Section: 7.7.3 Numeric Literals + + Description: + + This is a regression test for + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122884 + + Waldemar's comments: + + A numeric literal that starts with either '08' or '09' is interpreted as a + decimal literal; it should be an error instead. (Strictly speaking, according + to ECMA v1 such literals should be interpreted as two integers -- a zero + followed by a decimal number whose first digit is 8 or 9, but this is a bug in + ECMA that will be fixed in v2. In any case, there is no place in the grammar + where two consecutive numbers would be legal.) + + Author: christine@netscape.com + Date: 15 june 1998 + +*/ +var SECTION = "7.7.3-2"; +var VERSION = "ECMA_1"; +var TITLE = "Numeric Literals"; +var BUGNUMBER="122884"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "9", + 9, + 9 ); + +new TestCase( SECTION, + "09", + 9, + 09 ); + +new TestCase( SECTION, + "099", + 99, + 099 ); + + +new TestCase( SECTION, + "077", + 63, + 077 ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3.js new file mode 100644 index 00000000..15dfaa8b --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.3.js @@ -0,0 +1,297 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.7.3.js + ECMA Section: 7.7.3 Numeric Literals + + Description: A numeric literal stands for a value of the Number type + This value is determined in two steps: first a + mathematical value (MV) is derived from the literal; + second, this mathematical value is rounded, ideally + using IEEE 754 round-to-nearest mode, to a reprentable + value of of the number type. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "7.7.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Numeric Literals"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "0", 0, 0 ); +new TestCase( SECTION, "1", 1, 1 ); +new TestCase( SECTION, "2", 2, 2 ); +new TestCase( SECTION, "3", 3, 3 ); +new TestCase( SECTION, "4", 4, 4 ); +new TestCase( SECTION, "5", 5, 5 ); +new TestCase( SECTION, "6", 6, 6 ); +new TestCase( SECTION, "7", 7, 7 ); +new TestCase( SECTION, "8", 8, 8 ); +new TestCase( SECTION, "9", 9, 9 ); + +new TestCase( SECTION, "0.", 0, 0. ); +new TestCase( SECTION, "1.", 1, 1. ); +new TestCase( SECTION, "2.", 2, 2. ); +new TestCase( SECTION, "3.", 3, 3. ); +new TestCase( SECTION, "4.", 4, 4. ); + +new TestCase( SECTION, "0.e0", 0, 0.e0 ); +new TestCase( SECTION, "1.e1", 10, 1.e1 ); +new TestCase( SECTION, "2.e2", 200, 2.e2 ); +new TestCase( SECTION, "3.e3", 3000, 3.e3 ); +new TestCase( SECTION, "4.e4", 40000, 4.e4 ); + +new TestCase( SECTION, "0.1e0", .1, 0.1e0 ); +new TestCase( SECTION, "1.1e1", 11, 1.1e1 ); +new TestCase( SECTION, "2.2e2", 220, 2.2e2 ); +new TestCase( SECTION, "3.3e3", 3300, 3.3e3 ); +new TestCase( SECTION, "4.4e4", 44000, 4.4e4 ); + +new TestCase( SECTION, ".1e0", .1, .1e0 ); +new TestCase( SECTION, ".1e1", 1, .1e1 ); +new TestCase( SECTION, ".2e2", 20, .2e2 ); +new TestCase( SECTION, ".3e3", 300, .3e3 ); +new TestCase( SECTION, ".4e4", 4000, .4e4 ); + +new TestCase( SECTION, "0e0", 0, 0e0 ); +new TestCase( SECTION, "1e1", 10, 1e1 ); +new TestCase( SECTION, "2e2", 200, 2e2 ); +new TestCase( SECTION, "3e3", 3000, 3e3 ); +new TestCase( SECTION, "4e4", 40000, 4e4 ); + +new TestCase( SECTION, "0e0", 0, 0e0 ); +new TestCase( SECTION, "1e1", 10, 1e1 ); +new TestCase( SECTION, "2e2", 200, 2e2 ); +new TestCase( SECTION, "3e3", 3000, 3e3 ); +new TestCase( SECTION, "4e4", 40000, 4e4 ); + +new TestCase( SECTION, "0E0", 0, 0E0 ); +new TestCase( SECTION, "1E1", 10, 1E1 ); +new TestCase( SECTION, "2E2", 200, 2E2 ); +new TestCase( SECTION, "3E3", 3000, 3E3 ); +new TestCase( SECTION, "4E4", 40000, 4E4 ); + +new TestCase( SECTION, "1.e-1", 0.1, 1.e-1 ); +new TestCase( SECTION, "2.e-2", 0.02, 2.e-2 ); +new TestCase( SECTION, "3.e-3", 0.003, 3.e-3 ); +new TestCase( SECTION, "4.e-4", 0.0004, 4.e-4 ); + +new TestCase( SECTION, "0.1e-0", .1, 0.1e-0 ); +new TestCase( SECTION, "1.1e-1", 0.11, 1.1e-1 ); +new TestCase( SECTION, "2.2e-2", .022, 2.2e-2 ); +new TestCase( SECTION, "3.3e-3", .0033, 3.3e-3 ); +new TestCase( SECTION, "4.4e-4", .00044, 4.4e-4 ); + +new TestCase( SECTION, ".1e-0", .1, .1e-0 ); +new TestCase( SECTION, ".1e-1", .01, .1e-1 ); +new TestCase( SECTION, ".2e-2", .002, .2e-2 ); +new TestCase( SECTION, ".3e-3", .0003, .3e-3 ); +new TestCase( SECTION, ".4e-4", .00004, .4e-4 ); + +new TestCase( SECTION, "1.e+1", 10, 1.e+1 ); +new TestCase( SECTION, "2.e+2", 200, 2.e+2 ); +new TestCase( SECTION, "3.e+3", 3000, 3.e+3 ); +new TestCase( SECTION, "4.e+4", 40000, 4.e+4 ); + +new TestCase( SECTION, "0.1e+0", .1, 0.1e+0 ); +new TestCase( SECTION, "1.1e+1", 11, 1.1e+1 ); +new TestCase( SECTION, "2.2e+2", 220, 2.2e+2 ); +new TestCase( SECTION, "3.3e+3", 3300, 3.3e+3 ); +new TestCase( SECTION, "4.4e+4", 44000, 4.4e+4 ); + +new TestCase( SECTION, ".1e+0", .1, .1e+0 ); +new TestCase( SECTION, ".1e+1", 1, .1e+1 ); +new TestCase( SECTION, ".2e+2", 20, .2e+2 ); +new TestCase( SECTION, ".3e+3", 300, .3e+3 ); +new TestCase( SECTION, ".4e+4", 4000, .4e+4 ); + +new TestCase( SECTION, "0x0", 0, 0x0 ); +new TestCase( SECTION, "0x1", 1, 0x1 ); +new TestCase( SECTION, "0x2", 2, 0x2 ); +new TestCase( SECTION, "0x3", 3, 0x3 ); +new TestCase( SECTION, "0x4", 4, 0x4 ); +new TestCase( SECTION, "0x5", 5, 0x5 ); +new TestCase( SECTION, "0x6", 6, 0x6 ); +new TestCase( SECTION, "0x7", 7, 0x7 ); +new TestCase( SECTION, "0x8", 8, 0x8 ); +new TestCase( SECTION, "0x9", 9, 0x9 ); +new TestCase( SECTION, "0xa", 10, 0xa ); +new TestCase( SECTION, "0xb", 11, 0xb ); +new TestCase( SECTION, "0xc", 12, 0xc ); +new TestCase( SECTION, "0xd", 13, 0xd ); +new TestCase( SECTION, "0xe", 14, 0xe ); +new TestCase( SECTION, "0xf", 15, 0xf ); + +new TestCase( SECTION, "0X0", 0, 0X0 ); +new TestCase( SECTION, "0X1", 1, 0X1 ); +new TestCase( SECTION, "0X2", 2, 0X2 ); +new TestCase( SECTION, "0X3", 3, 0X3 ); +new TestCase( SECTION, "0X4", 4, 0X4 ); +new TestCase( SECTION, "0X5", 5, 0X5 ); +new TestCase( SECTION, "0X6", 6, 0X6 ); +new TestCase( SECTION, "0X7", 7, 0X7 ); +new TestCase( SECTION, "0X8", 8, 0X8 ); +new TestCase( SECTION, "0X9", 9, 0X9 ); +new TestCase( SECTION, "0Xa", 10, 0Xa ); +new TestCase( SECTION, "0Xb", 11, 0Xb ); +new TestCase( SECTION, "0Xc", 12, 0Xc ); +new TestCase( SECTION, "0Xd", 13, 0Xd ); +new TestCase( SECTION, "0Xe", 14, 0Xe ); +new TestCase( SECTION, "0Xf", 15, 0Xf ); + +new TestCase( SECTION, "0x0", 0, 0x0 ); +new TestCase( SECTION, "0x1", 1, 0x1 ); +new TestCase( SECTION, "0x2", 2, 0x2 ); +new TestCase( SECTION, "0x3", 3, 0x3 ); +new TestCase( SECTION, "0x4", 4, 0x4 ); +new TestCase( SECTION, "0x5", 5, 0x5 ); +new TestCase( SECTION, "0x6", 6, 0x6 ); +new TestCase( SECTION, "0x7", 7, 0x7 ); +new TestCase( SECTION, "0x8", 8, 0x8 ); +new TestCase( SECTION, "0x9", 9, 0x9 ); +new TestCase( SECTION, "0xA", 10, 0xA ); +new TestCase( SECTION, "0xB", 11, 0xB ); +new TestCase( SECTION, "0xC", 12, 0xC ); +new TestCase( SECTION, "0xD", 13, 0xD ); +new TestCase( SECTION, "0xE", 14, 0xE ); +new TestCase( SECTION, "0xF", 15, 0xF ); + +new TestCase( SECTION, "0X0", 0, 0X0 ); +new TestCase( SECTION, "0X1", 1, 0X1 ); +new TestCase( SECTION, "0X2", 2, 0X2 ); +new TestCase( SECTION, "0X3", 3, 0X3 ); +new TestCase( SECTION, "0X4", 4, 0X4 ); +new TestCase( SECTION, "0X5", 5, 0X5 ); +new TestCase( SECTION, "0X6", 6, 0X6 ); +new TestCase( SECTION, "0X7", 7, 0X7 ); +new TestCase( SECTION, "0X8", 8, 0X8 ); +new TestCase( SECTION, "0X9", 9, 0X9 ); +new TestCase( SECTION, "0XA", 10, 0XA ); +new TestCase( SECTION, "0XB", 11, 0XB ); +new TestCase( SECTION, "0XC", 12, 0XC ); +new TestCase( SECTION, "0XD", 13, 0XD ); +new TestCase( SECTION, "0XE", 14, 0XE ); +new TestCase( SECTION, "0XF", 15, 0XF ); + + +new TestCase( SECTION, "00", 0, 00 ); +new TestCase( SECTION, "01", 1, 01 ); +new TestCase( SECTION, "02", 2, 02 ); +new TestCase( SECTION, "03", 3, 03 ); +new TestCase( SECTION, "04", 4, 04 ); +new TestCase( SECTION, "05", 5, 05 ); +new TestCase( SECTION, "06", 6, 06 ); +new TestCase( SECTION, "07", 7, 07 ); + +new TestCase( SECTION, "000", 0, 000 ); +new TestCase( SECTION, "011", 9, 011 ); +new TestCase( SECTION, "022", 18, 022 ); +new TestCase( SECTION, "033", 27, 033 ); +new TestCase( SECTION, "044", 36, 044 ); +new TestCase( SECTION, "055", 45, 055 ); +new TestCase( SECTION, "066", 54, 066 ); +new TestCase( SECTION, "077", 63, 077 ); + +new TestCase( SECTION, "0.00000000001", 0.00000000001, 0.00000000001 ); +new TestCase( SECTION, "0.00000000001e-2", 0.0000000000001, 0.00000000001e-2 ); + + +new TestCase( SECTION, + "123456789012345671.9999", + "123456789012345660", + 123456789012345671.9999 +""); +new TestCase( SECTION, + "123456789012345672", + "123456789012345660", + 123456789012345672 +""); + +new TestCase( SECTION, + "123456789012345672.000000000000000000000000000", + "123456789012345660", + 123456789012345672.000000000000000000000000000 +""); + +new TestCase( SECTION, + "123456789012345672.01", + "123456789012345680", + 123456789012345672.01 +""); + +new TestCase( SECTION, + "123456789012345672.000000000000000000000000001+'' == 123456789012345680 || 123456789012345660", + true, + ( 123456789012345672.00000000000000000000000000 +"" == 1234567890 * 100000000 + 12345680 ) + || + ( 123456789012345672.00000000000000000000000000 +"" == 1234567890 * 100000000 + 12345660) ); + +new TestCase( SECTION, + "123456789012345673", + "123456789012345680", + 123456789012345673 +"" ); + +new TestCase( SECTION, + "-123456789012345671.9999", + "-123456789012345660", + -123456789012345671.9999 +"" ); + +new TestCase( SECTION, + "-123456789012345672", + "-123456789012345660", + -123456789012345672+""); + +new TestCase( SECTION, + "-123456789012345672.000000000000000000000000000", + "-123456789012345660", + -123456789012345672.000000000000000000000000000 +""); + +new TestCase( SECTION, + "-123456789012345672.01", + "-123456789012345680", + -123456789012345672.01 +"" ); + +new TestCase( SECTION, + "-123456789012345672.000000000000000000000000001 == -123456789012345680 or -123456789012345660", + true, + (-123456789012345672.000000000000000000000000001 +"" == -1234567890 * 100000000 -12345680) + || + (-123456789012345672.000000000000000000000000001 +"" == -1234567890 * 100000000 -12345660)); + +new TestCase( SECTION, + -123456789012345673, + "-123456789012345680", + -123456789012345673 +""); + +new TestCase( SECTION, + "12345678901234567890", + "12345678901234567000", + 12345678901234567890 +"" ); + + +/* + new TestCase( SECTION, "12345678901234567", "12345678901234567", 12345678901234567+"" ); + new TestCase( SECTION, "123456789012345678", "123456789012345678", 123456789012345678+"" ); + new TestCase( SECTION, "1234567890123456789", "1234567890123456789", 1234567890123456789+"" ); + new TestCase( SECTION, "12345678901234567890", "12345678901234567890", 12345678901234567890+"" ); + new TestCase( SECTION, "123456789012345678900", "123456789012345678900", 123456789012345678900+"" ); + new TestCase( SECTION, "1234567890123456789000", "1234567890123456789000", 1234567890123456789000+"" ); +*/ +new TestCase( SECTION, "0x1", 1, 0x1 ); +new TestCase( SECTION, "0x10", 16, 0x10 ); +new TestCase( SECTION, "0x100", 256, 0x100 ); +new TestCase( SECTION, "0x1000", 4096, 0x1000 ); +new TestCase( SECTION, "0x10000", 65536, 0x10000 ); +new TestCase( SECTION, "0x100000", 1048576, 0x100000 ); +new TestCase( SECTION, "0x1000000", 16777216, 0x1000000 ); +new TestCase( SECTION, "0x10000000", 268435456, 0x10000000 ); +/* + new TestCase( SECTION, "0x100000000", 4294967296, 0x100000000 ); + new TestCase( SECTION, "0x1000000000", 68719476736, 0x1000000000 ); + new TestCase( SECTION, "0x10000000000", 1099511627776, 0x10000000000 ); +*/ + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.7.4.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.4.js new file mode 100644 index 00000000..afbe4c12 --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.7.4.js @@ -0,0 +1,208 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.7.4.js + ECMA Section: 7.7.4 String Literals + + Description: A string literal is zero or more characters enclosed in + single or double quotes. Each character may be + represented by an escape sequence. + + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "7.7.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String Literals"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// StringLiteral:: "" and '' + +new TestCase( SECTION, "\"\"", "", "" ); +new TestCase( SECTION, "\'\'", "", '' ); + +// DoubleStringCharacters:: DoubleStringCharacter :: EscapeSequence :: CharacterEscapeSequence +new TestCase( SECTION, "\\\"", String.fromCharCode(0x0022), "\"" ); +new TestCase( SECTION, "\\\'", String.fromCharCode(0x0027), "\'" ); +new TestCase( SECTION, "\\", String.fromCharCode(0x005C), "\\" ); +new TestCase( SECTION, "\\b", String.fromCharCode(0x0008), "\b" ); +new TestCase( SECTION, "\\f", String.fromCharCode(0x000C), "\f" ); +new TestCase( SECTION, "\\n", String.fromCharCode(0x000A), "\n" ); +new TestCase( SECTION, "\\r", String.fromCharCode(0x000D), "\r" ); +new TestCase( SECTION, "\\t", String.fromCharCode(0x0009), "\t" ); +new TestCase( SECTION, "\\v", String.fromCharCode(0x000B), "\v" ); + +// DoubleStringCharacters:DoubleStringCharacter::EscapeSequence::OctalEscapeSequence + +new TestCase( SECTION, "\\00", String.fromCharCode(0x0000), "\00" ); +new TestCase( SECTION, "\\01", String.fromCharCode(0x0001), "\01" ); +new TestCase( SECTION, "\\02", String.fromCharCode(0x0002), "\02" ); +new TestCase( SECTION, "\\03", String.fromCharCode(0x0003), "\03" ); +new TestCase( SECTION, "\\04", String.fromCharCode(0x0004), "\04" ); +new TestCase( SECTION, "\\05", String.fromCharCode(0x0005), "\05" ); +new TestCase( SECTION, "\\06", String.fromCharCode(0x0006), "\06" ); +new TestCase( SECTION, "\\07", String.fromCharCode(0x0007), "\07" ); + +new TestCase( SECTION, "\\010", String.fromCharCode(0x0008), "\010" ); +new TestCase( SECTION, "\\011", String.fromCharCode(0x0009), "\011" ); +new TestCase( SECTION, "\\012", String.fromCharCode(0x000A), "\012" ); +new TestCase( SECTION, "\\013", String.fromCharCode(0x000B), "\013" ); +new TestCase( SECTION, "\\014", String.fromCharCode(0x000C), "\014" ); +new TestCase( SECTION, "\\015", String.fromCharCode(0x000D), "\015" ); +new TestCase( SECTION, "\\016", String.fromCharCode(0x000E), "\016" ); +new TestCase( SECTION, "\\017", String.fromCharCode(0x000F), "\017" ); +new TestCase( SECTION, "\\020", String.fromCharCode(0x0010), "\020" ); +new TestCase( SECTION, "\\042", String.fromCharCode(0x0022), "\042" ); + +new TestCase( SECTION, "\\0", String.fromCharCode(0x0000), "\0" ); +new TestCase( SECTION, "\\1", String.fromCharCode(0x0001), "\1" ); +new TestCase( SECTION, "\\2", String.fromCharCode(0x0002), "\2" ); +new TestCase( SECTION, "\\3", String.fromCharCode(0x0003), "\3" ); +new TestCase( SECTION, "\\4", String.fromCharCode(0x0004), "\4" ); +new TestCase( SECTION, "\\5", String.fromCharCode(0x0005), "\5" ); +new TestCase( SECTION, "\\6", String.fromCharCode(0x0006), "\6" ); +new TestCase( SECTION, "\\7", String.fromCharCode(0x0007), "\7" ); + +new TestCase( SECTION, "\\10", String.fromCharCode(0x0008), "\10" ); +new TestCase( SECTION, "\\11", String.fromCharCode(0x0009), "\11" ); +new TestCase( SECTION, "\\12", String.fromCharCode(0x000A), "\12" ); +new TestCase( SECTION, "\\13", String.fromCharCode(0x000B), "\13" ); +new TestCase( SECTION, "\\14", String.fromCharCode(0x000C), "\14" ); +new TestCase( SECTION, "\\15", String.fromCharCode(0x000D), "\15" ); +new TestCase( SECTION, "\\16", String.fromCharCode(0x000E), "\16" ); +new TestCase( SECTION, "\\17", String.fromCharCode(0x000F), "\17" ); +new TestCase( SECTION, "\\20", String.fromCharCode(0x0010), "\20" ); +new TestCase( SECTION, "\\42", String.fromCharCode(0x0022), "\42" ); + +new TestCase( SECTION, "\\000", String.fromCharCode(0), "\000" ); +new TestCase( SECTION, "\\111", String.fromCharCode(73), "\111" ); +new TestCase( SECTION, "\\222", String.fromCharCode(146), "\222" ); +new TestCase( SECTION, "\\333", String.fromCharCode(219), "\333" ); + +// following line commented out as it causes a compile time error +// new TestCase( SECTION, "\\444", "444", "\444" ); + +// DoubleStringCharacters:DoubleStringCharacter::EscapeSequence::HexEscapeSequence +new TestCase( SECTION, "\\xF0", String.fromCharCode(240), "\xF0" ); +new TestCase( SECTION, "\\xE1", String.fromCharCode(225), "\xE1" ); +new TestCase( SECTION, "\\xD2", String.fromCharCode(210), "\xD2" ); +new TestCase( SECTION, "\\xC3", String.fromCharCode(195), "\xC3" ); +new TestCase( SECTION, "\\xB4", String.fromCharCode(180), "\xB4" ); +new TestCase( SECTION, "\\xA5", String.fromCharCode(165), "\xA5" ); +new TestCase( SECTION, "\\x96", String.fromCharCode(150), "\x96" ); +new TestCase( SECTION, "\\x87", String.fromCharCode(135), "\x87" ); +new TestCase( SECTION, "\\x78", String.fromCharCode(120), "\x78" ); +new TestCase( SECTION, "\\x69", String.fromCharCode(105), "\x69" ); +new TestCase( SECTION, "\\x5A", String.fromCharCode(90), "\x5A" ); +new TestCase( SECTION, "\\x4B", String.fromCharCode(75), "\x4B" ); +new TestCase( SECTION, "\\x3C", String.fromCharCode(60), "\x3C" ); +new TestCase( SECTION, "\\x2D", String.fromCharCode(45), "\x2D" ); +new TestCase( SECTION, "\\x1E", String.fromCharCode(30), "\x1E" ); +new TestCase( SECTION, "\\x0F", String.fromCharCode(15), "\x0F" ); + +// string literals only take up to two hext digits. therefore, the third character in this string +// should be interpreted as a StringCharacter and not part of the HextEscapeSequence + +new TestCase( SECTION, "\\xF0F", String.fromCharCode(240)+"F", "\xF0F" ); +new TestCase( SECTION, "\\xE1E", String.fromCharCode(225)+"E", "\xE1E" ); +new TestCase( SECTION, "\\xD2D", String.fromCharCode(210)+"D", "\xD2D" ); +new TestCase( SECTION, "\\xC3C", String.fromCharCode(195)+"C", "\xC3C" ); +new TestCase( SECTION, "\\xB4B", String.fromCharCode(180)+"B", "\xB4B" ); +new TestCase( SECTION, "\\xA5A", String.fromCharCode(165)+"A", "\xA5A" ); +new TestCase( SECTION, "\\x969", String.fromCharCode(150)+"9", "\x969" ); +new TestCase( SECTION, "\\x878", String.fromCharCode(135)+"8", "\x878" ); +new TestCase( SECTION, "\\x787", String.fromCharCode(120)+"7", "\x787" ); +new TestCase( SECTION, "\\x696", String.fromCharCode(105)+"6", "\x696" ); +new TestCase( SECTION, "\\x5A5", String.fromCharCode(90)+"5", "\x5A5" ); +new TestCase( SECTION, "\\x4B4", String.fromCharCode(75)+"4", "\x4B4" ); +new TestCase( SECTION, "\\x3C3", String.fromCharCode(60)+"3", "\x3C3" ); +new TestCase( SECTION, "\\x2D2", String.fromCharCode(45)+"2", "\x2D2" ); +new TestCase( SECTION, "\\x1E1", String.fromCharCode(30)+"1", "\x1E1" ); +new TestCase( SECTION, "\\x0F0", String.fromCharCode(15)+"0", "\x0F0" ); + +// DoubleStringCharacter::EscapeSequence::CharacterEscapeSequence::\ NonEscapeCharacter +new TestCase( SECTION, "\\a", "a", "\a" ); +new TestCase( SECTION, "\\c", "c", "\c" ); +new TestCase( SECTION, "\\d", "d", "\d" ); +new TestCase( SECTION, "\\e", "e", "\e" ); +new TestCase( SECTION, "\\g", "g", "\g" ); +new TestCase( SECTION, "\\h", "h", "\h" ); +new TestCase( SECTION, "\\i", "i", "\i" ); +new TestCase( SECTION, "\\j", "j", "\j" ); +new TestCase( SECTION, "\\k", "k", "\k" ); +new TestCase( SECTION, "\\l", "l", "\l" ); +new TestCase( SECTION, "\\m", "m", "\m" ); +new TestCase( SECTION, "\\o", "o", "\o" ); +new TestCase( SECTION, "\\p", "p", "\p" ); +new TestCase( SECTION, "\\q", "q", "\q" ); +new TestCase( SECTION, "\\s", "s", "\s" ); +new TestCase( SECTION, "\\w", "w", "\w" ); +new TestCase( SECTION, "\\y", "y", "\y" ); +new TestCase( SECTION, "\\z", "z", "\z" ); +new TestCase( SECTION, "\\9", "9", "\9" ); + +new TestCase( SECTION, "\\A", "A", "\A" ); +new TestCase( SECTION, "\\B", "B", "\B" ); +new TestCase( SECTION, "\\C", "C", "\C" ); +new TestCase( SECTION, "\\D", "D", "\D" ); +new TestCase( SECTION, "\\E", "E", "\E" ); +new TestCase( SECTION, "\\F", "F", "\F" ); +new TestCase( SECTION, "\\G", "G", "\G" ); +new TestCase( SECTION, "\\H", "H", "\H" ); +new TestCase( SECTION, "\\I", "I", "\I" ); +new TestCase( SECTION, "\\J", "J", "\J" ); +new TestCase( SECTION, "\\K", "K", "\K" ); +new TestCase( SECTION, "\\L", "L", "\L" ); +new TestCase( SECTION, "\\M", "M", "\M" ); +new TestCase( SECTION, "\\N", "N", "\N" ); +new TestCase( SECTION, "\\O", "O", "\O" ); +new TestCase( SECTION, "\\P", "P", "\P" ); +new TestCase( SECTION, "\\Q", "Q", "\Q" ); +new TestCase( SECTION, "\\R", "R", "\R" ); +new TestCase( SECTION, "\\S", "S", "\S" ); +new TestCase( SECTION, "\\T", "T", "\T" ); +new TestCase( SECTION, "\\U", "U", "\U" ); +new TestCase( SECTION, "\\V", "V", "\V" ); +new TestCase( SECTION, "\\W", "W", "\W" ); +new TestCase( SECTION, "\\X", "X", "\X" ); +new TestCase( SECTION, "\\Y", "Y", "\Y" ); +new TestCase( SECTION, "\\Z", "Z", "\Z" ); + +// DoubleStringCharacter::EscapeSequence::UnicodeEscapeSequence + +new TestCase( SECTION, "\\u0020", " ", "\u0020" ); +new TestCase( SECTION, "\\u0021", "!", "\u0021" ); +new TestCase( SECTION, "\\u0022", "\"", "\u0022" ); +new TestCase( SECTION, "\\u0023", "#", "\u0023" ); +new TestCase( SECTION, "\\u0024", "$", "\u0024" ); +new TestCase( SECTION, "\\u0025", "%", "\u0025" ); +new TestCase( SECTION, "\\u0026", "&", "\u0026" ); +new TestCase( SECTION, "\\u0027", "'", "\u0027" ); +new TestCase( SECTION, "\\u0028", "(", "\u0028" ); +new TestCase( SECTION, "\\u0029", ")", "\u0029" ); +new TestCase( SECTION, "\\u002A", "*", "\u002A" ); +new TestCase( SECTION, "\\u002B", "+", "\u002B" ); +new TestCase( SECTION, "\\u002C", ",", "\u002C" ); +new TestCase( SECTION, "\\u002D", "-", "\u002D" ); +new TestCase( SECTION, "\\u002E", ".", "\u002E" ); +new TestCase( SECTION, "\\u002F", "/", "\u002F" ); +new TestCase( SECTION, "\\u0030", "0", "\u0030" ); +new TestCase( SECTION, "\\u0031", "1", "\u0031" ); +new TestCase( SECTION, "\\u0032", "2", "\u0032" ); +new TestCase( SECTION, "\\u0033", "3", "\u0033" ); +new TestCase( SECTION, "\\u0034", "4", "\u0034" ); +new TestCase( SECTION, "\\u0035", "5", "\u0035" ); +new TestCase( SECTION, "\\u0036", "6", "\u0036" ); +new TestCase( SECTION, "\\u0037", "7", "\u0037" ); +new TestCase( SECTION, "\\u0038", "8", "\u0038" ); +new TestCase( SECTION, "\\u0039", "9", "\u0039" ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/7.8.2-n.js b/source/spidermonkey-tests/ecma/LexicalConventions/7.8.2-n.js new file mode 100644 index 00000000..0675322e --- /dev/null +++ b/source/spidermonkey-tests/ecma/LexicalConventions/7.8.2-n.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.8.2.js + ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion + Description: compare some specific examples of the automatic + insertion rules in the EMCA specification. + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION="7.8.2"; +var VERSION="ECMA_1" + startTest(); +writeHeaderToLog(SECTION+" "+"Examples of Semicolon Insertion"); + + +// new TestCase( "7.8.2", "{ 1 \n 2 } 3", 3, eval("{ 1 \n 2 } 3") ); + +DESCRIPTION = "{ 1 2 } 3"; +EXPECTED = "error"; + +new TestCase( "7.8.2", "{ 1 2 } 3", "error", eval("{1 2 } 3") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/browser.js b/source/spidermonkey-tests/ecma/LexicalConventions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/LexicalConventions/shell.js b/source/spidermonkey-tests/ecma/LexicalConventions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Math/15.8-2-n.js b/source/spidermonkey-tests/ecma/Math/15.8-2-n.js new file mode 100644 index 00000000..9915f64e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8-2-n.js @@ -0,0 +1,48 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8-2.js + ECMA Section: 15.8 The Math Object + + Description: + + The Math object is merely a single object that has some named properties, + some of which are functions. + + The value of the internal [[Prototype]] property of the Math object is the + Object prototype object (15.2.3.1). + + The Math object does not have a [[Construct]] property; it is not possible + to use the Math object as a constructor with the new operator. + + The Math object does not have a [[Call]] property; it is not possible to + invoke the Math object as a function. + + Recall that, in this specification, the phrase "the number value for x" has + a technical meaning defined in section 8.5. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ + +var SECTION = "15.8-2-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Math Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "MYMATH = new Math()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "MYMATH = new Math()", + "error", + eval("MYMATH = new Math()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8-3-n.js b/source/spidermonkey-tests/ecma/Math/15.8-3-n.js new file mode 100644 index 00000000..eb238069 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8-3-n.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8-3.js + ECMA Section: 15.8 The Math Object + + Description: + + The Math object is merely a single object that has some named properties, + some of which are functions. + + The value of the internal [[Prototype]] property of the Math object is the + Object prototype object (15.2.3.1). + + The Math object does not have a [[Construct]] property; it is not possible + to use the Math object as a constructor with the new operator. + + The Math object does not have a [[Call]] property; it is not possible to + invoke the Math object as a function. + + Recall that, in this specification, the phrase "the number value for x" has + a technical meaning defined in section 8.5. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "15.8-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Math Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "MYMATH = Math()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "MYMATH = Math()", + "error", + eval("MYMATH = Math()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.1-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.1-1.js new file mode 100644 index 00000000..9b21b00a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.1-1.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.1-1.js + ECMA Section: 15.8.1.1.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.E + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.8.1.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.E"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.E = 0; Math.E", + 2.7182818284590452354, + eval("Math.E=0;Math.E") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.1-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.1-2.js new file mode 100644 index 00000000..6efa56bd --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.1-2.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.1-2.js + ECMA Section: 15.8.1.1.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.E + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.8.1.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.E"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MATH_E = 2.7182818284590452354 + new TestCase( SECTION, + "delete(Math.E)", + false, + eval("delete Math.E") ); +new TestCase( SECTION, + "delete(Math.E); Math.E", + MATH_E, + eval("delete Math.E; Math.E") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.2-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.2-1.js new file mode 100644 index 00000000..558914e2 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.2-1.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.2-1.js + ECMA Section: 15.8.2.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.LN10 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.8.1.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LN10"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.LN10=0; Math.LN10", + 2.302585092994046, + eval("Math.LN10=0; Math.LN10") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.2-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.2-2.js new file mode 100644 index 00000000..0f161492 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.2-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.2-1.js + ECMA Section: 15.8.2.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.LN10 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LN10"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete( Math.LN10 ); Math.LN10", + 2.302585092994046, + eval("delete(Math.LN10); Math.LN10") ); + +new TestCase( SECTION, + "delete( Math.LN10 ); ", + false, + eval("delete(Math.LN10)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.3-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.3-1.js new file mode 100644 index 00000000..63dbea87 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.3-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.3-1.js + ECMA Section: 15.8.1.3.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.LN2 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LN2"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.LN2=0; Math.LN2", + 0.6931471805599453, + eval("Math.LN2=0; Math.LN2") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.3-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.3-2.js new file mode 100644 index 00000000..d9c71bfa --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.3-2.js @@ -0,0 +1,38 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.3-3.js + ECMA Section: 15.8.1.3.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.LN2 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LN2"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MATH_LN2 = 0.6931471805599453; + +new TestCase( SECTION, + "delete(Math.LN2)", + false, + eval("delete(Math.LN2)") ); + +new TestCase( SECTION, + "delete(Math.LN2); Math.LN2", + MATH_LN2, + eval("delete(Math.LN2); Math.LN2") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.4-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.4-1.js new file mode 100644 index 00000000..d29d114e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.4-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.4-1.js + ECMA Section: 15.8.1.4.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.LOG2E + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LOG2E"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.L0G2E=0; Math.LOG2E", + 1.4426950408889634, + eval("Math.LOG2E=0; Math.LOG2E") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.4-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.4-2.js new file mode 100644 index 00000000..ff462086 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.4-2.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.4-2.js + ECMA Section: 15.8.1.4.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.LOG2E + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.4-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LOG2E"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete(Math.L0G2E);Math.LOG2E", + 1.4426950408889634, + eval("delete(Math.LOG2E);Math.LOG2E") ); +new TestCase( SECTION, + "delete(Math.L0G2E)", + false, + eval("delete(Math.LOG2E)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.5-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.5-1.js new file mode 100644 index 00000000..4f83a1ad --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.5-1.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.5-1.js + ECMA Section: 15.8.1.5.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.LOG10E + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.8.1.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LOG10E"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.LOG10E=0; Math.LOG10E", + 0.4342944819032518, + eval("Math.LOG10E=0; Math.LOG10E") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.5-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.5-2.js new file mode 100644 index 00000000..3203f0bc --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.5-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.5-2.js + ECMA Section: 15.8.1.5.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.LOG10E + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.5-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.LOG10E"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete Math.LOG10E; Math.LOG10E", + 0.4342944819032518, + eval("delete Math.LOG10E; Math.LOG10E") ); + +new TestCase( SECTION, + "delete Math.LOG10E", + false, + eval("delete Math.LOG10E") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.6-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.6-1.js new file mode 100644 index 00000000..4a3fa1b1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.6-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.6-1.js + ECMA Section: 15.8.1.6.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.PI + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.6-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.PI"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.PI=0; Math.PI", + 3.1415926535897923846, + eval("Math.PI=0; Math.PI") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.6-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.6-2.js new file mode 100644 index 00000000..ad5fe3df --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.6-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.6-2.js + ECMA Section: 15.8.1.6.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.PI + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.6-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.PI"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete Math.PI; Math.PI", + 3.1415926535897923846, + eval("delete Math.PI; Math.PI") ); + +new TestCase( SECTION, + "delete Math.PI; Math.PI", + false, + eval("delete Math.PI") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.7-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.7-1.js new file mode 100644 index 00000000..bb41c1d1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.7-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.7-1.js + ECMA Section: 15.8.1.7.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.SQRT1_2 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.7-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.SQRT1_2"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.SQRT1_2=0; Math.SQRT1_2", + 0.7071067811865476, + eval("Math.SQRT1_2=0; Math.SQRT1_2") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.7-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.7-2.js new file mode 100644 index 00000000..0c931e73 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.7-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.7-2.js + ECMA Section: 15.8.1.7.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.SQRT1_2 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.7-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.SQRT1_2"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete Math.SQRT1_2; Math.SQRT1_2", + 0.7071067811865476, + eval("delete Math.SQRT1_2; Math.SQRT1_2") ); + +new TestCase( SECTION, + "delete Math.SQRT1_2", + false, + eval("delete Math.SQRT1_2") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.8-1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.8-1.js new file mode 100644 index 00000000..6f9b4b98 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.8-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.8-1.js + ECMA Section: 15.8.1.8.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Math.SQRT2 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.1.8-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.SQRT2"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.SQRT2=0; Math.SQRT2", + 1.4142135623730951, + eval("Math.SQRT2=0; Math.SQRT2") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.8-2.js b/source/spidermonkey-tests/ecma/Math/15.8.1.8-2.js new file mode 100644 index 00000000..c276ab9b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.8-2.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.8-2.js + ECMA Section: 15.8.1.8.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.SQRT2 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.8.1.8-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.SQRT2"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete Math.SQRT2; Math.SQRT2", + 1.4142135623730951, + eval("delete Math.SQRT2; Math.SQRT2") ); + +new TestCase( SECTION, + "delete Math.SQRT2", + false, + eval("delete Math.SQRT2") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.8-3.js b/source/spidermonkey-tests/ecma/Math/15.8.1.8-3.js new file mode 100644 index 00000000..eae3d945 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.8-3.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.8-3.js + ECMA Section: 15.8.1.8.js + Description: All value properties of the Math object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Math.SQRT2 + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.8.1.8-3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Math.SQRT2: DontDelete"); + +new TestCase( SECTION, + "delete Math.SQRT2", + false, + eval("delete Math.SQRT2") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.1.js b/source/spidermonkey-tests/ecma/Math/15.8.1.js new file mode 100644 index 00000000..3105fefb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.1.js @@ -0,0 +1,115 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.1.js + ECMA Section: 15.8.1.js Value Properties of the Math Object + 15.8.1.1 E + 15.8.1.2 LN10 + 15.8.1.3 LN2 + 15.8.1.4 LOG2E + 15.8.1.5 LOG10E + 15.8.1.6 PI + 15.8.1.7 SQRT1_2 + 15.8.1.8 SQRT2 + Description: verify the values of some math constants + Author: christine@netscape.com + Date: 7 july 1997 + +*/ +var SECTION = "15.8.1" + var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Value Properties of the Math Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( "15.8.1.1", "Math.E", + 2.7182818284590452354, + Math.E ); + +new TestCase( "15.8.1.1", + "typeof Math.E", + "number", + typeof Math.E ); + +new TestCase( "15.8.1.2", + "Math.LN10", + 2.302585092994046, + Math.LN10 ); + +new TestCase( "15.8.1.2", + "typeof Math.LN10", + "number", + typeof Math.LN10 ); + +new TestCase( "15.8.1.3", + "Math.LN2", + 0.6931471805599453, + Math.LN2 ); + +new TestCase( "15.8.1.3", + "typeof Math.LN2", + "number", + typeof Math.LN2 ); + +new TestCase( "15.8.1.4", + "Math.LOG2E", + 1.4426950408889634, + Math.LOG2E ); + +new TestCase( "15.8.1.4", + "typeof Math.LOG2E", + "number", + typeof Math.LOG2E ); + +new TestCase( "15.8.1.5", + "Math.LOG10E", + 0.4342944819032518, + Math.LOG10E); + +new TestCase( "15.8.1.5", + "typeof Math.LOG10E", + "number", + typeof Math.LOG10E); + +new TestCase( "15.8.1.6", + "Math.PI", + 3.14159265358979323846, + Math.PI ); + +new TestCase( "15.8.1.6", + "typeof Math.PI", + "number", + typeof Math.PI ); + +new TestCase( "15.8.1.7", + "Math.SQRT1_2", + 0.7071067811865476, + Math.SQRT1_2); + +new TestCase( "15.8.1.7", + "typeof Math.SQRT1_2", + "number", + typeof Math.SQRT1_2); + +new TestCase( "15.8.1.8", + "Math.SQRT2", + 1.4142135623730951, + Math.SQRT2 ); + +new TestCase( "15.8.1.8", + "typeof Math.SQRT2", + "number", + typeof Math.SQRT2 ); + +new TestCase( SECTION, + "var MATHPROPS='';for( p in Math ){ MATHPROPS +=p; };MATHPROPS", + "", + eval("var MATHPROPS='';for( p in Math ){ MATHPROPS +=p; };MATHPROPS") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.1.js b/source/spidermonkey-tests/ecma/Math/15.8.2.1.js new file mode 100644 index 00000000..d5ea4947 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.1.js @@ -0,0 +1,192 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.1.js + ECMA Section: 15.8.2.1 abs( x ) + Description: return the absolute value of the argument, + which should be the magnitude of the argument + with a positive sign. + - if x is NaN, return NaN + - if x is -0, result is +0 + - if x is -Infinity, result is +Infinity + Author: christine@netscape.com + Date: 7 july 1997 +*/ +var SECTION = "15.8.2.1"; +var VERSION = "ECMA_1"; +var TITLE = "Math.abs()"; +var BUGNUMBER = "77391"; +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.abs.length", + 1, + Math.abs.length ); + +new TestCase( SECTION, + "Math.abs()", + Number.NaN, + Math.abs() ); + +new TestCase( SECTION, + "Math.abs( void 0 )", + Number.NaN, + Math.abs(void 0) ); + +new TestCase( SECTION, + "Math.abs( null )", + 0, + Math.abs(null) ); + +new TestCase( SECTION, + "Math.abs( true )", + 1, + Math.abs(true) ); + +new TestCase( SECTION, + "Math.abs( false )", + 0, + Math.abs(false) ); + +new TestCase( SECTION, + "Math.abs( string primitive)", + Number.NaN, + Math.abs("a string primitive") ); + +new TestCase( SECTION, + "Math.abs( string object )", + Number.NaN, + Math.abs(new String( 'a String object' )) ); + +new TestCase( SECTION, + "Math.abs( Number.NaN )", + Number.NaN, + Math.abs(Number.NaN) ); + +new TestCase( SECTION, + "Math.abs(0)", + 0, + Math.abs( 0 ) ); + +new TestCase( SECTION, + "Math.abs( -0 )", + 0, + Math.abs(-0) ); + +new TestCase( SECTION, + "Infinity/Math.abs(-0)", + Infinity, + Infinity/Math.abs(-0) ); + +new TestCase( SECTION, + "Math.abs( -Infinity )", + Number.POSITIVE_INFINITY, + Math.abs( Number.NEGATIVE_INFINITY ) ); + +new TestCase( SECTION, + "Math.abs( Infinity )", + Number.POSITIVE_INFINITY, + Math.abs( Number.POSITIVE_INFINITY ) ); + +new TestCase( SECTION, + "Math.abs( - MAX_VALUE )", + Number.MAX_VALUE, + Math.abs( - Number.MAX_VALUE ) ); + +new TestCase( SECTION, + "Math.abs( - MIN_VALUE )", + Number.MIN_VALUE, + Math.abs( -Number.MIN_VALUE ) ); + +new TestCase( SECTION, + "Math.abs( MAX_VALUE )", + Number.MAX_VALUE, + Math.abs( Number.MAX_VALUE ) ); + +new TestCase( SECTION, + "Math.abs( MIN_VALUE )", + Number.MIN_VALUE, + Math.abs( Number.MIN_VALUE ) ); + +new TestCase( SECTION, + "Math.abs( -1 )", + 1, + Math.abs( -1 ) ); + +new TestCase( SECTION, + "Math.abs( new Number( -1 ) )", + 1, + Math.abs( new Number(-1) ) ); + +new TestCase( SECTION, + "Math.abs( 1 )", + 1, + Math.abs( 1 ) ); + +new TestCase( SECTION, + "Math.abs( Math.PI )", + Math.PI, + Math.abs( Math.PI ) ); + +new TestCase( SECTION, + "Math.abs( -Math.PI )", + Math.PI, + Math.abs( -Math.PI ) ); + +new TestCase( SECTION, + "Math.abs(-1/100000000)", + 1/100000000, + Math.abs(-1/100000000) ); + +new TestCase( SECTION, + "Math.abs(-Math.pow(2,32))", + Math.pow(2,32), + Math.abs(-Math.pow(2,32)) ); + +new TestCase( SECTION, + "Math.abs(Math.pow(2,32))", + Math.pow(2,32), + Math.abs(Math.pow(2,32)) ); + +new TestCase( SECTION, + "Math.abs( -0xfff )", + 4095, + Math.abs( -0xfff ) ); + +new TestCase( SECTION, + "Math.abs( -0777 )", + 511, + Math.abs(-0777 ) ); + +new TestCase( SECTION, + "Math.abs('-1e-1')", + 0.1, + Math.abs('-1e-1') ); + +new TestCase( SECTION, + "Math.abs('0xff')", + 255, + Math.abs('0xff') ); + +new TestCase( SECTION, + "Math.abs('077')", + 77, + Math.abs('077') ); + +new TestCase( SECTION, + "Math.abs( 'Infinity' )", + Infinity, + Math.abs('Infinity') ); + +new TestCase( SECTION, + "Math.abs( '-Infinity' )", + Infinity, + Math.abs('-Infinity') ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.10.js b/source/spidermonkey-tests/ecma/Math/15.8.2.10.js new file mode 100644 index 00000000..6b53a132 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.10.js @@ -0,0 +1,119 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.10.js + ECMA Section: 15.8.2.10 Math.log(x) + Description: return an approximiation to the natural logarithm of + the argument. + special cases: + - if arg is NaN result is NaN + - if arg is <0 result is NaN + - if arg is 0 or -0 result is -Infinity + - if arg is 1 result is 0 + - if arg is Infinity result is Infinity + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.8.2.10"; +var VERSION = "ECMA_1"; +var TITLE = "Math.log(x)"; +var BUGNUMBER = "77391"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, + "Math.log.length", + 1, + Math.log.length ); + + +new TestCase( SECTION, + "Math.log()", + Number.NaN, + Math.log() ); + +new TestCase( SECTION, + "Math.log(void 0)", + Number.NaN, + Math.log(void 0) ); + +new TestCase( SECTION, + "Math.log(null)", + Number.NEGATIVE_INFINITY, + Math.log(null) ); + +new TestCase( SECTION, + "Math.log(true)", + 0, + Math.log(true) ); + +new TestCase( SECTION, + "Math.log(false)", + -Infinity, + Math.log(false) ); + +new TestCase( SECTION, + "Math.log('0')", + -Infinity, + Math.log('0') ); + +new TestCase( SECTION, + "Math.log('1')", + 0, + Math.log('1') ); + +new TestCase( SECTION, + "Math.log('Infinity')", + Infinity, + Math.log("Infinity") ); + + +new TestCase( SECTION, + "Math.log(NaN)", + Number.NaN, + Math.log(Number.NaN) ); + +new TestCase( SECTION, + "Math.log(-0.0000001)", + Number.NaN, + Math.log(-0.000001) ); + +new TestCase( SECTION, + "Math.log(-1)", + Number.NaN, + Math.log(-1) ); + +new TestCase( SECTION, + "Math.log(0)", + Number.NEGATIVE_INFINITY, + Math.log(0) ); + +new TestCase( SECTION, + "Math.log(-0)", + Number.NEGATIVE_INFINITY, + Math.log(-0)); + +new TestCase( SECTION, + "Math.log(1)", + 0, + Math.log(1) ); + +new TestCase( SECTION, + "Math.log(Infinity)", + Number.POSITIVE_INFINITY, + Math.log(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.log(-Infinity)", + Number.NaN, + Math.log(Number.NEGATIVE_INFINITY) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.11.js b/source/spidermonkey-tests/ecma/Math/15.8.2.11.js new file mode 100644 index 00000000..5b3bbfe8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.11.js @@ -0,0 +1,166 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.11.js + ECMA Section: 15.8.2.11 Math.max(x, y) + Description: return the smaller of the two arguments. + special cases: + - if x is NaN or y is NaN return NaN + - if x < y return x + - if y > x return y + - if x is +0 and y is +0 return +0 + - if x is +0 and y is -0 return -0 + - if x is -0 and y is +0 return -0 + - if x is -0 and y is -0 return -0 + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.8.2.11"; +var VERSION = "ECMA_1"; +var TITLE = "Math.max(x, y)"; +var BUGNUMBER="76439"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.max.length", + 2, + Math.max.length ); + +new TestCase( SECTION, + "Math.max()", + -Infinity, + Math.max() ); + +new TestCase( SECTION, + "Math.max(void 0, 1)", + Number.NaN, + Math.max( void 0, 1 ) ); + +new TestCase( SECTION, + "Math.max(void 0, void 0)", + Number.NaN, + Math.max( void 0, void 0 ) ); + +new TestCase( SECTION, + "Math.max(null, 1)", + 1, + Math.max( null, 1 ) ); + +new TestCase( SECTION, + "Math.max(-1, null)", + 0, + Math.max( -1, null ) ); + +new TestCase( SECTION, + "Math.max(true, false)", + 1, + Math.max(true,false) ); + +new TestCase( SECTION, + "Math.max('-99','99')", + 99, + Math.max( "-99","99") ); + +new TestCase( SECTION, + "Math.max(NaN, Infinity)", + Number.NaN, + Math.max(Number.NaN,Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.max(NaN, 0)", + Number.NaN, + Math.max(Number.NaN, 0) ); + +new TestCase( SECTION, + "Math.max('a string', 0)", + Number.NaN, + Math.max("a string", 0) ); + +new TestCase( SECTION, + "Math.max(NaN, 1)", + Number.NaN, + Math.max(Number.NaN,1) ); + +new TestCase( SECTION, + "Math.max('a string',Infinity)", + Number.NaN, + Math.max("a string", Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.max(Infinity, NaN)", + Number.NaN, + Math.max( Number.POSITIVE_INFINITY, Number.NaN) ); + +new TestCase( SECTION, + "Math.max(NaN, NaN)", + Number.NaN, + Math.max(Number.NaN, Number.NaN) ); + +new TestCase( SECTION, + "Math.max(0,NaN)", + Number.NaN, + Math.max(0,Number.NaN) ); + +new TestCase( SECTION, + "Math.max(1, NaN)", + Number.NaN, + Math.max(1, Number.NaN) ); + +new TestCase( SECTION, + "Math.max(0,0)", + 0, + Math.max(0,0) ); + +new TestCase( SECTION, + "Math.max(0,-0)", + 0, + Math.max(0,-0) ); + +new TestCase( SECTION, + "Math.max(-0,0)", + 0, + Math.max(-0,0) ); + +new TestCase( SECTION, + "Math.max(-0,-0)", + -0, + Math.max(-0,-0) ); + +new TestCase( SECTION, + "Infinity/Math.max(-0,-0)", + -Infinity, + Infinity/Math.max(-0,-0) ); + +new TestCase( SECTION, + "Math.max(Infinity, Number.MAX_VALUE)", Number.POSITIVE_INFINITY, + Math.max(Number.POSITIVE_INFINITY, Number.MAX_VALUE) ); + +new TestCase( SECTION, + "Math.max(Infinity, Infinity)", + Number.POSITIVE_INFINITY, + Math.max(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.max(-Infinity,-Infinity)", + Number.NEGATIVE_INFINITY, + Math.max(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.max(1,.99999999999999)", + 1, + Math.max(1,.99999999999999) ); + +new TestCase( SECTION, + "Math.max(-1,-.99999999999999)", + -.99999999999999, + Math.max(-1,-.99999999999999) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.12.js b/source/spidermonkey-tests/ecma/Math/15.8.2.12.js new file mode 100644 index 00000000..9c67be1c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.12.js @@ -0,0 +1,143 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.12.js + ECMA Section: 15.8.2.12 Math.min(x, y) + Description: return the smaller of the two arguments. + special cases: + - if x is NaN or y is NaN return NaN + - if x < y return x + - if y > x return y + - if x is +0 and y is +0 return +0 + - if x is +0 and y is -0 return -0 + - if x is -0 and y is +0 return -0 + - if x is -0 and y is -0 return -0 + Author: christine@netscape.com + Date: 7 july 1997 +*/ + + +var SECTION = "15.8.2.12"; +var VERSION = "ECMA_1"; +var TITLE = "Math.min(x, y)"; +var BUGNUMBER="76439"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.min.length", + 2, + Math.min.length ); + +new TestCase( SECTION, + "Math.min()", + Infinity, + Math.min() ); + +new TestCase( SECTION, + "Math.min(void 0, 1)", + Number.NaN, + Math.min( void 0, 1 ) ); + +new TestCase( SECTION, + "Math.min(void 0, void 0)", + Number.NaN, + Math.min( void 0, void 0 ) ); + +new TestCase( SECTION, + "Math.min(null, 1)", + 0, + Math.min( null, 1 ) ); + +new TestCase( SECTION, + "Math.min(-1, null)", + -1, + Math.min( -1, null ) ); + +new TestCase( SECTION, + "Math.min(true, false)", + 0, + Math.min(true,false) ); + +new TestCase( SECTION, + "Math.min('-99','99')", + -99, + Math.min( "-99","99") ); + +new TestCase( SECTION, + "Math.min(NaN,0)", + Number.NaN, + Math.min(Number.NaN,0) ); + +new TestCase( SECTION, + "Math.min(NaN,1)", + Number.NaN, + Math.min(Number.NaN,1) ); + +new TestCase( SECTION, + "Math.min(NaN,-1)", + Number.NaN, + Math.min(Number.NaN,-1) ); + +new TestCase( SECTION, + "Math.min(0,NaN)", + Number.NaN, + Math.min(0,Number.NaN) ); + +new TestCase( SECTION, + "Math.min(1,NaN)", + Number.NaN, + Math.min(1,Number.NaN) ); + +new TestCase( SECTION, + "Math.min(-1,NaN)", + Number.NaN, + Math.min(-1,Number.NaN) ); + +new TestCase( SECTION, + "Math.min(NaN,NaN)", + Number.NaN, + Math.min(Number.NaN,Number.NaN) ); + +new TestCase( SECTION, + "Math.min(1,1.0000000001)", + 1, + Math.min(1,1.0000000001) ); + +new TestCase( SECTION, + "Math.min(1.0000000001,1)", + 1, + Math.min(1.0000000001,1) ); + +new TestCase( SECTION, + "Math.min(0,0)", + 0, + Math.min(0,0) ); + +new TestCase( SECTION, + "Math.min(0,-0)", + -0, + Math.min(0,-0) ); + +new TestCase( SECTION, + "Math.min(-0,-0)", + -0, + Math.min(-0,-0) ); + +new TestCase( SECTION, + "Infinity/Math.min(0,-0)", + -Infinity, + Infinity/Math.min(0,-0) ); + +new TestCase( SECTION, + "Infinity/Math.min(-0,-0)", + -Infinity, + Infinity/Math.min(-0,-0) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.13.js b/source/spidermonkey-tests/ecma/Math/15.8.2.13.js new file mode 100644 index 00000000..c7d56221 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.13.js @@ -0,0 +1,351 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.13.js + ECMA Section: 15.8.2.13 Math.pow(x, y) + Description: return an approximation to the result of x + to the power of y. there are many special cases; + refer to the spec. + Author: christine@netscape.com + Date: 9 july 1997 +*/ + +var SECTION = "15.8.2.13"; +var VERSION = "ECMA_1"; +var TITLE = "Math.pow(x, y)"; +var BUGNUMBER="77141"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.pow.length", + 2, + Math.pow.length ); + +new TestCase( SECTION, + "Math.pow()", + Number.NaN, + Math.pow() ); + +new TestCase( SECTION, + "Math.pow(null, null)", + 1, + Math.pow(null,null) ); + +new TestCase( SECTION, + "Math.pow(void 0, void 0)", + Number.NaN, + Math.pow(void 0, void 0)); + +new TestCase( SECTION, + "Math.pow(true, false)", + 1, + Math.pow(true, false) ); + +new TestCase( SECTION, + "Math.pow(false,true)", + 0, + Math.pow(false,true) ); + +new TestCase( SECTION, + "Math.pow('2','32')", + 4294967296, + Math.pow('2','32') ); + +new TestCase( SECTION, + "Math.pow(1,NaN)", + Number.NaN, + Math.pow(1,Number.NaN) ); + +new TestCase( SECTION, + "Math.pow(0,NaN)", + Number.NaN, + Math.pow(0,Number.NaN) ); + +new TestCase( SECTION, + "Math.pow(NaN,0)", + 1, + Math.pow(Number.NaN,0) ); + +new TestCase( SECTION, + "Math.pow(NaN,-0)", + 1, + Math.pow(Number.NaN,-0) ); + +new TestCase( SECTION, + "Math.pow(NaN,1)", + Number.NaN, + Math.pow(Number.NaN, 1) ); + +new TestCase( SECTION, + "Math.pow(NaN,.5)", + Number.NaN, + Math.pow(Number.NaN, .5) ); + +new TestCase( SECTION, + "Math.pow(1.00000001, Infinity)", + Number.POSITIVE_INFINITY, + Math.pow(1.00000001, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(1.00000001, -Infinity)", + 0, + Math.pow(1.00000001, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-1.00000001, Infinity)", + Number.POSITIVE_INFINITY, + Math.pow(-1.00000001,Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-1.00000001, -Infinity)", + 0, + Math.pow(-1.00000001,Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(1, Infinity)", + Number.NaN, + Math.pow(1, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(1, -Infinity)", + Number.NaN, + Math.pow(1, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-1, Infinity)", + Number.NaN, + Math.pow(-1, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-1, -Infinity)", + Number.NaN, + Math.pow(-1, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(.0000000009, Infinity)", + 0, + Math.pow(.0000000009, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-.0000000009, Infinity)", + 0, + Math.pow(-.0000000009, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(.0000000009, -Infinity)", + Number.POSITIVE_INFINITY, + Math.pow(-.0000000009, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(Infinity, .00000000001)", + Number.POSITIVE_INFINITY, + Math.pow(Number.POSITIVE_INFINITY,.00000000001) ); + +new TestCase( SECTION, + "Math.pow(Infinity, 1)", + Number.POSITIVE_INFINITY, + Math.pow(Number.POSITIVE_INFINITY, 1) ); + +new TestCase( SECTION, + "Math.pow(Infinity, -.00000000001)", + 0, + Math.pow(Number.POSITIVE_INFINITY, -.00000000001) ); + +new TestCase( SECTION, + "Math.pow(Infinity, -1)", + 0, + Math.pow(Number.POSITIVE_INFINITY, -1) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, 1)", + Number.NEGATIVE_INFINITY, + Math.pow(Number.NEGATIVE_INFINITY, 1) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, 333)", + Number.NEGATIVE_INFINITY, + Math.pow(Number.NEGATIVE_INFINITY, 333) ); + +new TestCase( SECTION, + "Math.pow(Infinity, 2)", + Number.POSITIVE_INFINITY, + Math.pow(Number.POSITIVE_INFINITY, 2) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, 666)", + Number.POSITIVE_INFINITY, + Math.pow(Number.NEGATIVE_INFINITY, 666) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, 0.5)", + Number.POSITIVE_INFINITY, + Math.pow(Number.NEGATIVE_INFINITY, 0.5) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, Infinity)", + Number.POSITIVE_INFINITY, + Math.pow(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, -1)", + -0, + Math.pow(Number.NEGATIVE_INFINITY, -1) ); + +new TestCase( SECTION, + "Infinity/Math.pow(-Infinity, -1)", + -Infinity, + Infinity/Math.pow(Number.NEGATIVE_INFINITY, -1) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, -3)", + -0, + Math.pow(Number.NEGATIVE_INFINITY, -3) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, -2)", + 0, + Math.pow(Number.NEGATIVE_INFINITY, -2) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, -0.5)", + 0, + Math.pow(Number.NEGATIVE_INFINITY,-0.5) ); + +new TestCase( SECTION, + "Math.pow(-Infinity, -Infinity)", + 0, + Math.pow(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(0, 1)", + 0, + Math.pow(0,1) ); + +new TestCase( SECTION, + "Math.pow(0, 0)", + 1, + Math.pow(0,0) ); + +new TestCase( SECTION, + "Math.pow(1, 0)", + 1, + Math.pow(1,0) ); + +new TestCase( SECTION, + "Math.pow(-1, 0)", + 1, + Math.pow(-1,0) ); + +new TestCase( SECTION, + "Math.pow(0, 0.5)", + 0, + Math.pow(0,0.5) ); + +new TestCase( SECTION, + "Math.pow(0, 1000)", + 0, + Math.pow(0,1000) ); + +new TestCase( SECTION, + "Math.pow(0, Infinity)", + 0, + Math.pow(0, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(0, -1)", + Number.POSITIVE_INFINITY, + Math.pow(0, -1) ); + +new TestCase( SECTION, + "Math.pow(0, -0.5)", + Number.POSITIVE_INFINITY, + Math.pow(0, -0.5) ); + +new TestCase( SECTION, + "Math.pow(0, -1000)", + Number.POSITIVE_INFINITY, + Math.pow(0, -1000) ); + +new TestCase( SECTION, + "Math.pow(0, -Infinity)", + Number.POSITIVE_INFINITY, + Math.pow(0, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-0, 1)", + -0, + Math.pow(-0, 1) ); + +new TestCase( SECTION, + "Math.pow(-0, 3)", + -0, + Math.pow(-0,3) ); + +new TestCase( SECTION, + "Infinity/Math.pow(-0, 1)", + -Infinity, + Infinity/Math.pow(-0, 1) ); + +new TestCase( SECTION, + "Infinity/Math.pow(-0, 3)", + -Infinity, + Infinity/Math.pow(-0,3) ); + +new TestCase( SECTION, + "Math.pow(-0, 2)", + 0, + Math.pow(-0,2) ); + +new TestCase( SECTION, + "Math.pow(-0, Infinity)", + 0, + Math.pow(-0, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-0, -1)", + Number.NEGATIVE_INFINITY, + Math.pow(-0, -1) ); + +new TestCase( SECTION, + "Math.pow(-0, -10001)", + Number.NEGATIVE_INFINITY, + Math.pow(-0, -10001) ); + +new TestCase( SECTION, + "Math.pow(-0, -2)", + Number.POSITIVE_INFINITY, + Math.pow(-0, -2) ); + +new TestCase( SECTION, + "Math.pow(-0, 0.5)", + 0, + Math.pow(-0, 0.5) ); + +new TestCase( SECTION, + "Math.pow(-0, Infinity)", + 0, + Math.pow(-0, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.pow(-1, 0.5)", + Number.NaN, + Math.pow(-1, 0.5) ); + +new TestCase( SECTION, + "Math.pow(-1, NaN)", + Number.NaN, + Math.pow(-1, Number.NaN) ); + +new TestCase( SECTION, + "Math.pow(-1, -0.5)", + Number.NaN, + Math.pow(-1, -0.5) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.14.js b/source/spidermonkey-tests/ecma/Math/15.8.2.14.js new file mode 100644 index 00000000..2c15a848 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.14.js @@ -0,0 +1,45 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.14.js + ECMA Section: 15.8.2.14 Math.random() + returns a number value x with a positive sign + with 1 > x >= 0 with approximately uniform + distribution over that range, using an + implementation-dependent algorithm or strategy. + This function takes no arguments. + + Description: + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.8.2.14"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.random()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +for ( var item = 0; item < 100; item++ ) { + var testcase = new TestCase( SECTION, + "Math.random()", + "pass", + null ); + testcase.reason = Math.random(); + testcase.actual = "pass"; + + if ( ! ( testcase.reason >= 0) ) { + testcase.actual = "fail"; + } + + if ( ! (testcase.reason < 1) ) { + testcase.actual = "fail"; + } +} + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.15.js b/source/spidermonkey-tests/ecma/Math/15.8.2.15.js new file mode 100644 index 00000000..4ef74821 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.15.js @@ -0,0 +1,168 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.15.js + ECMA Section: 15.8.2.15 Math.round(x) + Description: return the greatest number value that is closest to the + argument and is an integer. if two integers are equally + close to the argument. then the result is the number value + that is closer to Infinity. if the argument is an integer, + return the argument. + special cases: + - if x is NaN return NaN + - if x = +0 return +0 + - if x = -0 return -0 + - if x = Infinity return Infinity + - if x = -Infinity return -Infinity + - if 0 < x < 0.5 return 0 + - if -0.5 <= x < 0 return -0 + example: + Math.round( 3.5 ) == 4 + Math.round( -3.5 ) == 3 + also: + - Math.round(x) == Math.floor( x + 0.5 ) + except if x = -0. in that case, Math.round(x) = -0 + + and Math.floor( x+0.5 ) = +0 + + + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.8.2.15"; +var VERSION = "ECMA_1"; +var TITLE = "Math.round(x)"; +var BUGNUMBER="331411"; + +var EXCLUDE = "true"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.round.length", + 1, + Math.round.length ); + +new TestCase( SECTION, + "Math.round()", + Number.NaN, + Math.round() ); + +new TestCase( SECTION, + "Math.round(null)", + 0, + Math.round(0) ); + +new TestCase( SECTION, + "Math.round(void 0)", + Number.NaN, + Math.round(void 0) ); + +new TestCase( SECTION, + "Math.round(true)", + 1, + Math.round(true) ); + +new TestCase( SECTION, + "Math.round(false)", + 0, + Math.round(false) ); + +new TestCase( SECTION, + "Math.round('.99999')", + 1, + Math.round('.99999') ); + +new TestCase( SECTION, + "Math.round('12345e-2')", + 123, + Math.round('12345e-2') ); + +new TestCase( SECTION, + "Math.round(NaN)", + Number.NaN, + Math.round(Number.NaN) ); + +new TestCase( SECTION, + "Math.round(0)", + 0, + Math.round(0) ); + +new TestCase( SECTION, + "Math.round(-0)", + -0, + Math.round(-0)); + +new TestCase( SECTION, + "Infinity/Math.round(-0)", + -Infinity, + Infinity/Math.round(-0) ); + +new TestCase( SECTION, + "Math.round(Infinity)", + Number.POSITIVE_INFINITY, + Math.round(Number.POSITIVE_INFINITY)); + +new TestCase( SECTION, + "Math.round(-Infinity)", + Number.NEGATIVE_INFINITY, + Math.round(Number.NEGATIVE_INFINITY)); + +new TestCase( SECTION, + "Math.round(0.49)", + 0, + Math.round(0.49)); + +new TestCase( SECTION, + "Math.round(0.5)", + 1, + Math.round(0.5)); + +new TestCase( SECTION, + "Math.round(0.51)", + 1, + Math.round(0.51)); + +new TestCase( SECTION, + "Math.round(-0.49)", + -0, + Math.round(-0.49)); + +new TestCase( SECTION, + "Math.round(-0.5)", + -0, + Math.round(-0.5)); + +new TestCase( SECTION, + "Infinity/Math.round(-0.49)", + -Infinity, + Infinity/Math.round(-0.49)); + +new TestCase( SECTION, + "Infinity/Math.round(-0.5)", + -Infinity, + Infinity/Math.round(-0.5)); + +new TestCase( SECTION, + "Math.round(-0.51)", + -1, + Math.round(-0.51)); + +new TestCase( SECTION, + "Math.round(3.5)", + 4, + Math.round(3.5)); + +new TestCase( SECTION, + "Math.round(-3.5)", + -3, + Math.round(-3)); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.16.js b/source/spidermonkey-tests/ecma/Math/15.8.2.16.js new file mode 100644 index 00000000..56a12ee0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.16.js @@ -0,0 +1,98 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.16.js + ECMA Section: 15.8.2.16 sin( x ) + Description: return an approximation to the sine of the + argument. argument is expressed in radians + Author: christine@netscape.com + Date: 7 july 1997 + +*/ +var SECTION = "15.8.2.16"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.sin(x)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.sin.length", + 1, + Math.sin.length ); + +new TestCase( SECTION, + "Math.sin()", + Number.NaN, + Math.sin() ); + +new TestCase( SECTION, + "Math.sin(null)", + 0, + Math.sin(null) ); + +new TestCase( SECTION, + "Math.sin(void 0)", + Number.NaN, + Math.sin(void 0) ); + +new TestCase( SECTION, + "Math.sin(false)", + 0, + Math.sin(false) ); + +new TestCase( SECTION, + "Math.sin('2.356194490192')", + 0.7071067811865, + Math.sin('2.356194490192') ); + +new TestCase( SECTION, + "Math.sin(NaN)", + Number.NaN, + Math.sin(Number.NaN) ); + +new TestCase( SECTION, + "Math.sin(0)", + 0, + Math.sin(0) ); + +new TestCase( SECTION, + "Math.sin(-0)", + -0, + Math.sin(-0)); + +new TestCase( SECTION, + "Math.sin(Infinity)", + Number.NaN, + Math.sin(Number.POSITIVE_INFINITY)); + +new TestCase( SECTION, + "Math.sin(-Infinity)", + Number.NaN, + Math.sin(Number.NEGATIVE_INFINITY)); + +new TestCase( SECTION, + "Math.sin(0.7853981633974)", + 0.7071067811865, + Math.sin(0.7853981633974)); + +new TestCase( SECTION, + "Math.sin(1.570796326795)", + 1, + Math.sin(1.570796326795)); + +new TestCase( SECTION, + "Math.sin(2.356194490192)", + 0.7071067811865, + Math.sin(2.356194490192)); + +new TestCase( SECTION, + "Math.sin(3.14159265359)", + 0, + Math.sin(3.14159265359)); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.17.js b/source/spidermonkey-tests/ecma/Math/15.8.2.17.js new file mode 100644 index 00000000..10e17609 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.17.js @@ -0,0 +1,183 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.17.js + ECMA Section: 15.8.2.17 Math.sqrt(x) + Description: return an approximation to the squareroot of the argument. + special cases: + - if x is NaN return NaN + - if x < 0 return NaN + - if x == 0 return 0 + - if x == -0 return -0 + - if x == Infinity return Infinity + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.8.2.17"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.sqrt(x)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.sqrt.length", + 1, + Math.sqrt.length ); + +new TestCase( SECTION, + "Math.sqrt()", + Number.NaN, + Math.sqrt() ); + +new TestCase( SECTION, + "Math.sqrt(void 0)", + Number.NaN, + Math.sqrt(void 0) ); + +new TestCase( SECTION, + "Math.sqrt(null)", + 0, + Math.sqrt(null) ); + +new TestCase( SECTION, + "Math.sqrt(true)", + 1, + Math.sqrt(1) ); + +new TestCase( SECTION, + "Math.sqrt(false)", + 0, + Math.sqrt(false) ); + +new TestCase( SECTION, + "Math.sqrt('225')", + 15, + Math.sqrt('225') ); + +new TestCase( SECTION, + "Math.sqrt(NaN)", + Number.NaN, + Math.sqrt(Number.NaN) ); + +new TestCase( SECTION, + "Math.sqrt(-Infinity)", + Number.NaN, + Math.sqrt(Number.NEGATIVE_INFINITY)); + +new TestCase( SECTION, + "Math.sqrt(-1)", + Number.NaN, + Math.sqrt(-1)); + +new TestCase( SECTION, + "Math.sqrt(-0.5)", + Number.NaN, + Math.sqrt(-0.5)); + +new TestCase( SECTION, + "Math.sqrt(0)", + 0, + Math.sqrt(0)); + +new TestCase( SECTION, + "Math.sqrt(-0)", + -0, + Math.sqrt(-0)); + +new TestCase( SECTION, + "Infinity/Math.sqrt(-0)", + -Infinity, + Infinity/Math.sqrt(-0) ); + +new TestCase( SECTION, + "Math.sqrt(Infinity)", + Number.POSITIVE_INFINITY, + Math.sqrt(Number.POSITIVE_INFINITY)); + +new TestCase( SECTION, + "Math.sqrt(1)", + 1, + Math.sqrt(1)); + +new TestCase( SECTION, + "Math.sqrt(2)", + Math.SQRT2, + Math.sqrt(2)); + +new TestCase( SECTION, + "Math.sqrt(0.5)", + Math.SQRT1_2, + Math.sqrt(0.5)); + +new TestCase( SECTION, + "Math.sqrt(4)", + 2, + Math.sqrt(4)); + +new TestCase( SECTION, + "Math.sqrt(9)", + 3, + Math.sqrt(9)); + +new TestCase( SECTION, + "Math.sqrt(16)", + 4, + Math.sqrt(16)); + +new TestCase( SECTION, + "Math.sqrt(25)", + 5, + Math.sqrt(25)); + +new TestCase( SECTION, + "Math.sqrt(36)", + 6, + Math.sqrt(36)); + +new TestCase( SECTION, + "Math.sqrt(49)", + 7, + Math.sqrt(49)); + +new TestCase( SECTION, + "Math.sqrt(64)", + 8, + Math.sqrt(64)); + +new TestCase( SECTION, + "Math.sqrt(256)", + 16, + Math.sqrt(256)); + +new TestCase( SECTION, + "Math.sqrt(10000)", + 100, + Math.sqrt(10000)); + +new TestCase( SECTION, + "Math.sqrt(65536)", + 256, + Math.sqrt(65536)); + +new TestCase( SECTION, + "Math.sqrt(0.09)", + 0.3, + Math.sqrt(0.09)); + +new TestCase( SECTION, + "Math.sqrt(0.01)", + 0.1, + Math.sqrt(0.01)); + +new TestCase( SECTION, + "Math.sqrt(0.00000001)", + 0.0001, + Math.sqrt(0.00000001)); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.18.js b/source/spidermonkey-tests/ecma/Math/15.8.2.18.js new file mode 100644 index 00000000..d857599e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.18.js @@ -0,0 +1,131 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.18.js + ECMA Section: 15.8.2.18 tan( x ) + Description: return an approximation to the tan of the + argument. argument is expressed in radians + special cases: + - if x is NaN result is NaN + - if x is 0 result is 0 + - if x is -0 result is -0 + - if x is Infinity or -Infinity result is NaN + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.8.2.18"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.tan(x)"; +var EXCLUDE = "true"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.tan.length", + 1, + Math.tan.length ); + +new TestCase( SECTION, + "Math.tan()", + Number.NaN, + Math.tan() ); + +new TestCase( SECTION, + "Math.tan(void 0)", + Number.NaN, + Math.tan(void 0)); + +new TestCase( SECTION, + "Math.tan(null)", + 0, + Math.tan(null) ); + +new TestCase( SECTION, + "Math.tan(false)", + 0, + Math.tan(false) ); + +new TestCase( SECTION, + "Math.tan(NaN)", + Number.NaN, + Math.tan(Number.NaN) ); + +new TestCase( SECTION, + "Math.tan(0)", + 0, + Math.tan(0)); + +new TestCase( SECTION, + "Math.tan(-0)", + -0, + Math.tan(-0)); + +new TestCase( SECTION, + "Math.tan(Infinity)", + Number.NaN, + Math.tan(Number.POSITIVE_INFINITY)); + +new TestCase( SECTION, + "Math.tan(-Infinity)", + Number.NaN, + Math.tan(Number.NEGATIVE_INFINITY)); + +new TestCase( SECTION, + "Math.tan(Math.PI/4)", + 1, + Math.tan(Math.PI/4)); + +new TestCase( SECTION, + "Math.tan(3*Math.PI/4)", + -1, + Math.tan(3*Math.PI/4)); + +new TestCase( SECTION, + "Math.tan(Math.PI)", + -0, + Math.tan(Math.PI)); + +new TestCase( SECTION, + "Math.tan(5*Math.PI/4)", + 1, + Math.tan(5*Math.PI/4)); + +new TestCase( SECTION, + "Math.tan(7*Math.PI/4)", + -1, + Math.tan(7*Math.PI/4)); + +new TestCase( SECTION, + "Infinity/Math.tan(-0)", + -Infinity, + Infinity/Math.tan(-0) ); + +/* + Arctan (x) ~ PI/2 - 1/x for large x. For x = 1.6x10^16, 1/x is about the last binary digit of double precision PI/2. + That is to say, perturbing PI/2 by this much is about the smallest rounding error possible. + + This suggests that the answer Christine is getting and a real Infinity are "adjacent" results from the tangent function. I + suspect that tan (PI/2 + one ulp) is a negative result about the same size as tan (PI/2) and that this pair are the closest + results to infinity that the algorithm can deliver. + + In any case, my call is that the answer we're seeing is "right". I suggest the test pass on any result this size or larger. + = C = +*/ + +new TestCase( SECTION, + "Math.tan(3*Math.PI/2) >= 5443000000000000", + true, + Math.tan(3*Math.PI/2) >= 5443000000000000 ); + +new TestCase( SECTION, + "Math.tan(Math.PI/2) >= 5443000000000000", + true, + Math.tan(Math.PI/2) >= 5443000000000000 ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.2.js b/source/spidermonkey-tests/ecma/Math/15.8.2.2.js new file mode 100644 index 00000000..0f72734d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.2.js @@ -0,0 +1,122 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.2.js + ECMA Section: 15.8.2.2 acos( x ) + Description: return an approximation to the arc cosine of the + argument. the result is expressed in radians and + range is from +0 to +PI. special cases: + - if x is NaN, return NaN + - if x > 1, the result is NaN + - if x < -1, the result is NaN + - if x == 1, the result is +0 + Author: christine@netscape.com + Date: 7 july 1997 +*/ +var SECTION = "15.8.2.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.acos()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.acos.length", + 1, + Math.acos.length ); + +new TestCase( SECTION, + "Math.acos(void 0)", + Number.NaN, + Math.acos(void 0) ); + +new TestCase( SECTION, + "Math.acos()", + Number.NaN, + Math.acos() ); + +new TestCase( SECTION, + "Math.acos(null)", + Math.PI/2, + Math.acos(null) ); + +new TestCase( SECTION, + "Math.acos(NaN)", + Number.NaN, + Math.acos(Number.NaN) ); + +new TestCase( SECTION, + "Math.acos(a string)", + Number.NaN, + Math.acos("a string") ); + +new TestCase( SECTION, + "Math.acos('0')", + Math.PI/2, + Math.acos('0') ); + +new TestCase( SECTION, + "Math.acos('1')", + 0, + Math.acos('1') ); + +new TestCase( SECTION, + "Math.acos('-1')", + Math.PI, + Math.acos('-1') ); + +new TestCase( SECTION, + "Math.acos(1.00000001)", + Number.NaN, + Math.acos(1.00000001) ); + +new TestCase( SECTION, + "Math.acos(11.00000001)", + Number.NaN, + Math.acos(-1.00000001) ); + +new TestCase( SECTION, + "Math.acos(1)", + 0, + Math.acos(1) ); + +new TestCase( SECTION, + "Math.acos(-1)", + Math.PI, + Math.acos(-1) ); + +new TestCase( SECTION, + "Math.acos(0)", + Math.PI/2, + Math.acos(0) ); + +new TestCase( SECTION, + "Math.acos(-0)", + Math.PI/2, + Math.acos(-0) ); + +new TestCase( SECTION, + "Math.acos(Math.SQRT1_2)", + Math.PI/4, + Math.acos(Math.SQRT1_2)); + +new TestCase( SECTION, + "Math.acos(-Math.SQRT1_2)", + Math.PI/4*3, + Math.acos(-Math.SQRT1_2)); + +new TestCase( SECTION, + "Math.acos(0.9999619230642)", + Math.PI/360, + Math.acos(0.9999619230642)); + +new TestCase( SECTION, + "Math.acos(-3.0)", + Number.NaN, + Math.acos(-3.0)); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.3.js b/source/spidermonkey-tests/ecma/Math/15.8.2.3.js new file mode 100644 index 00000000..f4f61d5a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.3.js @@ -0,0 +1,124 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.3.js + ECMA Section: 15.8.2.3 asin( x ) + Description: return an approximation to the arc sine of the + argument. the result is expressed in radians and + range is from -PI/2 to +PI/2. special cases: + - if x is NaN, the result is NaN + - if x > 1, the result is NaN + - if x < -1, the result is NaN + - if x == +0, the result is +0 + - if x == -0, the result is -0 + Author: christine@netscape.com + Date: 7 july 1997 + +*/ +var SECTION = "15.8.2.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.asin()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.asin()", + Number.NaN, + Math.asin() ); + +new TestCase( SECTION, + "Math.asin(void 0)", + Number.NaN, + Math.asin(void 0) ); + +new TestCase( SECTION, + "Math.asin(null)", + 0, + Math.asin(null) ); + +new TestCase( SECTION, + "Math.asin(NaN)", + Number.NaN, + Math.asin(Number.NaN) ); + +new TestCase( SECTION, + "Math.asin('string')", + Number.NaN, + Math.asin("string") ); + +new TestCase( SECTION, + "Math.asin('0')", + 0, + Math.asin("0") ); + +new TestCase( SECTION, + "Math.asin('1')", + Math.PI/2, + Math.asin("1") ); + +new TestCase( SECTION, + "Math.asin('-1')", + -Math.PI/2, + Math.asin("-1") ); + +new TestCase( SECTION, + "Math.asin(Math.SQRT1_2+'')", + Math.PI/4, + Math.asin(Math.SQRT1_2+'') ); + +new TestCase( SECTION, + "Math.asin(-Math.SQRT1_2+'')", + -Math.PI/4, + Math.asin(-Math.SQRT1_2+'') ); + +new TestCase( SECTION, + "Math.asin(1.000001)", + Number.NaN, + Math.asin(1.000001) ); + +new TestCase( SECTION, + "Math.asin(-1.000001)", + Number.NaN, + Math.asin(-1.000001) ); + +new TestCase( SECTION, + "Math.asin(0)", + 0, + Math.asin(0) ); + +new TestCase( SECTION, + "Math.asin(-0)", + -0, + Math.asin(-0) ); + +new TestCase( SECTION, + "Infinity/Math.asin(-0)", + -Infinity, + Infinity/Math.asin(-0) ); + +new TestCase( SECTION, + "Math.asin(1)", + Math.PI/2, + Math.asin(1) ); + +new TestCase( SECTION, + "Math.asin(-1)", + -Math.PI/2, + Math.asin(-1) ); + +new TestCase( SECTION, + "Math.asin(Math.SQRT1_2))", + Math.PI/4, + Math.asin(Math.SQRT1_2) ); + +new TestCase( SECTION, + "Math.asin(-Math.SQRT1_2))", + -Math.PI/4, + Math.asin(-Math.SQRT1_2)); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.4.js b/source/spidermonkey-tests/ecma/Math/15.8.2.4.js new file mode 100644 index 00000000..5d73424a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.4.js @@ -0,0 +1,122 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.4.js + ECMA Section: 15.8.2.4 atan( x ) + Description: return an approximation to the arc tangent of the + argument. the result is expressed in radians and + range is from -PI/2 to +PI/2. special cases: + - if x is NaN, the result is NaN + - if x == +0, the result is +0 + - if x == -0, the result is -0 + - if x == +Infinity, the result is approximately +PI/2 + - if x == -Infinity, the result is approximately -PI/2 + Author: christine@netscape.com + Date: 7 july 1997 + +*/ + +var SECTION = "15.8.2.4"; +var VERSION = "ECMA_1"; +var TITLE = "Math.atan()"; +var BUGNUMBER="77391"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.atan.length", + 1, + Math.atan.length ); + +new TestCase( SECTION, + "Math.atan()", + Number.NaN, + Math.atan() ); + +new TestCase( SECTION, + "Math.atan(void 0)", + Number.NaN, + Math.atan(void 0) ); + +new TestCase( SECTION, + "Math.atan(null)", + 0, + Math.atan(null) ); + +new TestCase( SECTION, + "Math.atan(NaN)", + Number.NaN, + Math.atan(Number.NaN) ); + +new TestCase( SECTION, + "Math.atan('a string')", + Number.NaN, + Math.atan("a string") ); + +new TestCase( SECTION, + "Math.atan('0')", + 0, + Math.atan('0') ); + +new TestCase( SECTION, + "Math.atan('1')", + Math.PI/4, + Math.atan('1') ); + +new TestCase( SECTION, + "Math.atan('-1')", + -Math.PI/4, + Math.atan('-1') ); + +new TestCase( SECTION, + "Math.atan('Infinity)", + Math.PI/2, + Math.atan('Infinity') ); + +new TestCase( SECTION, + "Math.atan('-Infinity)", + -Math.PI/2, + Math.atan('-Infinity') ); + +new TestCase( SECTION, + "Math.atan(0)", + 0, + Math.atan(0) ); + +new TestCase( SECTION, + "Math.atan(-0)", + -0, + Math.atan(-0) ); + +new TestCase( SECTION, + "Infinity/Math.atan(-0)", + -Infinity, + Infinity/Math.atan(-0) ); + +new TestCase( SECTION, + "Math.atan(Infinity)", + Math.PI/2, + Math.atan(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan(-Infinity)", + -Math.PI/2, + Math.atan(Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan(1)", + Math.PI/4, + Math.atan(1) ); + +new TestCase( SECTION, + "Math.atan(-1)", + -Math.PI/4, + Math.atan(-1) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.5.js b/source/spidermonkey-tests/ecma/Math/15.8.2.5.js new file mode 100644 index 00000000..bae8c688 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.5.js @@ -0,0 +1,210 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.5.js + ECMA Section: 15.8.2.5 atan2( y, x ) + Description: + + Author: christine@netscape.com + Date: 7 july 1997 + +*/ +var SECTION = "15.8.2.5"; +var VERSION = "ECMA_1"; +var TITLE = "Math.atan2(x,y)"; +var BUGNUMBER="76111"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.atan2.length", + 2, + Math.atan2.length ); + +new TestCase( SECTION, + "Math.atan2(NaN, 0)", + Number.NaN, + Math.atan2(Number.NaN,0) ); + +new TestCase( SECTION, + "Math.atan2(null, null)", + 0, + Math.atan2(null, null) ); + +new TestCase( SECTION, + "Math.atan2(void 0, void 0)", + Number.NaN, + Math.atan2(void 0, void 0) ); + +new TestCase( SECTION, + "Math.atan2()", + Number.NaN, + Math.atan2() ); + +new TestCase( SECTION, + "Math.atan2(0, NaN)", + Number.NaN, + Math.atan2(0,Number.NaN) ); + +new TestCase( SECTION, + "Math.atan2(1, 0)", + Math.PI/2, + Math.atan2(1,0) ); + +new TestCase( SECTION, + "Math.atan2(1,-0)", + Math.PI/2, + Math.atan2(1,-0) ); + +new TestCase( SECTION, + "Math.atan2(0,0.001)", + 0, + Math.atan2(0,0.001) ); + +new TestCase( SECTION, + "Math.atan2(0,0)", + 0, + Math.atan2(0,0) ); + +new TestCase( SECTION, + "Math.atan2(0, -0)", + Math.PI, + Math.atan2(0,-0) ); + +new TestCase( SECTION, + "Math.atan2(0, -1)", + Math.PI, + Math.atan2(0, -1) ); + +new TestCase( SECTION, + "Math.atan2(-0, 1)", + -0, + Math.atan2(-0, 1) ); + +new TestCase( SECTION, + "Infinity/Math.atan2(-0, 1)", + -Infinity, + Infinity/Math.atan2(-0,1) ); + +new TestCase( SECTION, + "Math.atan2(-0, 0)", + -0, + Math.atan2(-0,0) ); + +new TestCase( SECTION, + "Math.atan2(-0, -0)", + -Math.PI, + Math.atan2(-0, -0) ); + +new TestCase( SECTION, + "Math.atan2(-0, -1)", + -Math.PI, + Math.atan2(-0, -1) ); + +new TestCase( SECTION, + "Math.atan2(-1, 0)", + -Math.PI/2, + Math.atan2(-1, 0) ); + +new TestCase( SECTION, + "Math.atan2(-1, -0)", + -Math.PI/2, + Math.atan2(-1, -0) ); + +new TestCase( SECTION, + "Math.atan2(1, Infinity)", + 0, + Math.atan2(1, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan2(1,-Infinity)", + Math.PI, + Math.atan2(1, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan2(-1, Infinity)", + -0, + Math.atan2(-1,Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Infinity/Math.atan2(-1, Infinity)", + -Infinity, + Infinity/Math.atan2(-1,Infinity) ); + +new TestCase( SECTION, + "Math.atan2(-1,-Infinity)", + -Math.PI, + Math.atan2(-1,Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan2(Infinity, 0)", + Math.PI/2, + Math.atan2(Number.POSITIVE_INFINITY, 0) ); + +new TestCase( SECTION, + "Math.atan2(Infinity, 1)", + Math.PI/2, + Math.atan2(Number.POSITIVE_INFINITY, 1) ); + +new TestCase( SECTION, + "Math.atan2(Infinity,-1)", + Math.PI/2, + Math.atan2(Number.POSITIVE_INFINITY,-1) ); + +new TestCase( SECTION, + "Math.atan2(Infinity,-0)", + Math.PI/2, + Math.atan2(Number.POSITIVE_INFINITY,-0) ); + +new TestCase( SECTION, + "Math.atan2(-Infinity, 0)", + -Math.PI/2, + Math.atan2(Number.NEGATIVE_INFINITY, 0) ); + +new TestCase( SECTION, + "Math.atan2(-Infinity,-0)", + -Math.PI/2, + Math.atan2(Number.NEGATIVE_INFINITY,-0) ); + +new TestCase( SECTION, + "Math.atan2(-Infinity, 1)", + -Math.PI/2, + Math.atan2(Number.NEGATIVE_INFINITY, 1) ); + +new TestCase( SECTION, + "Math.atan2(-Infinity, -1)", + -Math.PI/2, + Math.atan2(Number.NEGATIVE_INFINITY,-1) ); + +new TestCase( SECTION, + "Math.atan2(Infinity, Infinity)", + Math.PI/4, + Math.atan2(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan2(Infinity, -Infinity)", + 3*Math.PI/4, + Math.atan2(Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan2(-Infinity, Infinity)", + -Math.PI/4, + Math.atan2(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan2(-Infinity, -Infinity)", + -3*Math.PI/4, + Math.atan2(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.atan2(-1, 1)", + -Math.PI/4, + Math.atan2( -1, 1) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.6.js b/source/spidermonkey-tests/ecma/Math/15.8.2.6.js new file mode 100644 index 00000000..1385e63e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.6.js @@ -0,0 +1,198 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.6.js + ECMA Section: 15.8.2.6 Math.ceil(x) + Description: return the smallest number value that is not less than the + argument and is equal to a mathematical integer. if the + number is already an integer, return the number itself. + special cases: + - if x is NaN return NaN + - if x = +0 return +0 + - if x = 0 return -0 + - if x = Infinity return Infinity + - if x = -Infinity return -Infinity + - if ( -1 < x < 0 ) return -0 + also: + - the value of Math.ceil(x) == -Math.ceil(-x) + Author: christine@netscape.com + Date: 7 july 1997 +*/ +var SECTION = "15.8.2.6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.ceil(x)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.ceil.length", + 1, + Math.ceil.length ); + +new TestCase( SECTION, + "Math.ceil(NaN)", + Number.NaN, + Math.ceil(Number.NaN) ); + +new TestCase( SECTION, + "Math.ceil(null)", + 0, + Math.ceil(null) ); + +new TestCase( SECTION, + "Math.ceil()", + Number.NaN, + Math.ceil() ); + +new TestCase( SECTION, + "Math.ceil(void 0)", + Number.NaN, + Math.ceil(void 0) ); + +new TestCase( SECTION, + "Math.ceil('0')", + 0, + Math.ceil('0') ); + +new TestCase( SECTION, + "Math.ceil('-0')", + -0, + Math.ceil('-0') ); + +new TestCase( SECTION, + "Infinity/Math.ceil('0')", + Infinity, + Infinity/Math.ceil('0')); + +new TestCase( SECTION, + "Infinity/Math.ceil('-0')", + -Infinity, + Infinity/Math.ceil('-0')); + +new TestCase( SECTION, + "Math.ceil(0)", + 0, + Math.ceil(0) ); + +new TestCase( SECTION, + "Math.ceil(-0)", + -0, + Math.ceil(-0) ); + +new TestCase( SECTION, + "Infinity/Math.ceil(0)", + Infinity, + Infinity/Math.ceil(0)); + +new TestCase( SECTION, + "Infinity/Math.ceil(-0)", + -Infinity, + Infinity/Math.ceil(-0)); + + +new TestCase( SECTION, + "Math.ceil(Infinity)", + Number.POSITIVE_INFINITY, + Math.ceil(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.ceil(-Infinity)", + Number.NEGATIVE_INFINITY, + Math.ceil(Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.ceil(-Number.MIN_VALUE)", + -0, + Math.ceil(-Number.MIN_VALUE) ); + +new TestCase( SECTION, + "Infinity/Math.ceil(-Number.MIN_VALUE)", + -Infinity, + Infinity/Math.ceil(-Number.MIN_VALUE) ); + +new TestCase( SECTION, + "Math.ceil(1)", + 1, + Math.ceil(1) ); + +new TestCase( SECTION, + "Math.ceil(-1)", + -1, + Math.ceil(-1) ); + +new TestCase( SECTION, + "Math.ceil(-0.9)", + -0, + Math.ceil(-0.9) ); + +new TestCase( SECTION, + "Infinity/Math.ceil(-0.9)", + -Infinity, + Infinity/Math.ceil(-0.9) ); + +new TestCase( SECTION, + "Math.ceil(0.9 )", + 1, + Math.ceil( 0.9) ); + +new TestCase( SECTION, + "Math.ceil(-1.1)", + -1, + Math.ceil( -1.1)); + +new TestCase( SECTION, + "Math.ceil( 1.1)", + 2, + Math.ceil( 1.1)); + +new TestCase( SECTION, + "Math.ceil(Infinity)", + -Math.floor(-Infinity), + Math.ceil(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.ceil(-Infinity)", + -Math.floor(Infinity), + Math.ceil(Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.ceil(-Number.MIN_VALUE)", + -Math.floor(Number.MIN_VALUE), + Math.ceil(-Number.MIN_VALUE) ); + +new TestCase( SECTION, + "Math.ceil(1)", + -Math.floor(-1), + Math.ceil(1) ); + +new TestCase( SECTION, + "Math.ceil(-1)", + -Math.floor(1), + Math.ceil(-1) ); + +new TestCase( SECTION, + "Math.ceil(-0.9)", + -Math.floor(0.9), + Math.ceil(-0.9) ); + +new TestCase( SECTION, + "Math.ceil(0.9 )", + -Math.floor(-0.9), + Math.ceil( 0.9) ); + +new TestCase( SECTION, + "Math.ceil(-1.1)", + -Math.floor(1.1), + Math.ceil( -1.1)); + +new TestCase( SECTION, + "Math.ceil( 1.1)", + -Math.floor(-1.1), + Math.ceil( 1.1)); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.7.js b/source/spidermonkey-tests/ecma/Math/15.8.2.7.js new file mode 100644 index 00000000..fd1e798c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.7.js @@ -0,0 +1,249 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.7.js + ECMA Section: 15.8.2.7 cos( x ) + Description: return an approximation to the cosine of the + argument. argument is expressed in radians + Author: christine@netscape.com + Date: 7 july 1997 + +*/ + +var SECTION = "15.8.2.7"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.cos(x)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.cos.length", + 1, + Math.cos.length ); + +new TestCase( SECTION, + "Math.cos()", + Number.NaN, + Math.cos() ); + +new TestCase( SECTION, + "Math.cos(void 0)", + Number.NaN, + Math.cos(void 0) ); + +new TestCase( SECTION, + "Math.cos(false)", + 1, + Math.cos(false) ); + +new TestCase( SECTION, + "Math.cos(null)", + 1, + Math.cos(null) ); + +new TestCase( SECTION, + "Math.cos('0')", + 1, + Math.cos('0') ); + +new TestCase( SECTION, + "Math.cos('Infinity')", + Number.NaN, + Math.cos("Infinity") ); + +new TestCase( SECTION, + "Math.cos('3.14159265359')", + -1, + Math.cos('3.14159265359') ); + +new TestCase( SECTION, + "Math.cos(NaN)", + Number.NaN, + Math.cos(Number.NaN) ); + +new TestCase( SECTION, + "Math.cos(0)", + 1, + Math.cos(0) ); + +new TestCase( SECTION, + "Math.cos(-0)", + 1, + Math.cos(-0) ); + +new TestCase( SECTION, + "Math.cos(Infinity)", + Number.NaN, + Math.cos(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.cos(-Infinity)", + Number.NaN, + Math.cos(Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.cos(0.7853981633974)", + 0.7071067811865, + Math.cos(0.7853981633974) ); + +new TestCase( SECTION, + "Math.cos(1.570796326795)", + 0, + Math.cos(1.570796326795) ); + +new TestCase( SECTION, + "Math.cos(2.356194490192)", + -0.7071067811865, + Math.cos(2.356194490192) ); + +new TestCase( SECTION, + "Math.cos(3.14159265359)", + -1, + Math.cos(3.14159265359) ); + +new TestCase( SECTION, + "Math.cos(3.926990816987)", + -0.7071067811865, + Math.cos(3.926990816987) ); + +new TestCase( SECTION, + "Math.cos(4.712388980385)", + 0, + Math.cos(4.712388980385) ); + +new TestCase( SECTION, + "Math.cos(5.497787143782)", + 0.7071067811865, + Math.cos(5.497787143782) ); + +new TestCase( SECTION, + "Math.cos(Math.PI*2)", + 1, + Math.cos(Math.PI*2) ); + +new TestCase( SECTION, + "Math.cos(Math.PI/4)", + Math.SQRT2/2, + Math.cos(Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(Math.PI/2)", + 0, + Math.cos(Math.PI/2) ); + +new TestCase( SECTION, + "Math.cos(3*Math.PI/4)", + -Math.SQRT2/2, + Math.cos(3*Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(Math.PI)", + -1, + Math.cos(Math.PI) ); + +new TestCase( SECTION, + "Math.cos(5*Math.PI/4)", + -Math.SQRT2/2, + Math.cos(5*Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(3*Math.PI/2)", + 0, + Math.cos(3*Math.PI/2) ); + +new TestCase( SECTION, + "Math.cos(7*Math.PI/4)", + Math.SQRT2/2, + Math.cos(7*Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(Math.PI*2)", + 1, + Math.cos(2*Math.PI) ); + +new TestCase( SECTION, + "Math.cos(-0.7853981633974)", + 0.7071067811865, + Math.cos(-0.7853981633974) ); + +new TestCase( SECTION, + "Math.cos(-1.570796326795)", + 0, + Math.cos(-1.570796326795) ); + +new TestCase( SECTION, + "Math.cos(-2.3561944901920)", + -.7071067811865, + Math.cos(2.3561944901920) ); + +new TestCase( SECTION, + "Math.cos(-3.14159265359)", + -1, + Math.cos(3.14159265359) ); + +new TestCase( SECTION, + "Math.cos(-3.926990816987)", + -0.7071067811865, + Math.cos(3.926990816987) ); + +new TestCase( SECTION, + "Math.cos(-4.712388980385)", + 0, + Math.cos(4.712388980385) ); + +new TestCase( SECTION, + "Math.cos(-5.497787143782)", + 0.7071067811865, + Math.cos(5.497787143782) ); + +new TestCase( SECTION, + "Math.cos(-6.28318530718)", + 1, + Math.cos(6.28318530718) ); + +new TestCase( SECTION, + "Math.cos(-Math.PI/4)", + Math.SQRT2/2, + Math.cos(-Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(-Math.PI/2)", + 0, + Math.cos(-Math.PI/2) ); + +new TestCase( SECTION, + "Math.cos(-3*Math.PI/4)", + -Math.SQRT2/2, + Math.cos(-3*Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(-Math.PI)", + -1, + Math.cos(-Math.PI) ); + +new TestCase( SECTION, + "Math.cos(-5*Math.PI/4)", + -Math.SQRT2/2, + Math.cos(-5*Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(-3*Math.PI/2)", + 0, + Math.cos(-3*Math.PI/2) ); + +new TestCase( SECTION, + "Math.cos(-7*Math.PI/4)", + Math.SQRT2/2, + Math.cos(-7*Math.PI/4) ); + +new TestCase( SECTION, + "Math.cos(-Math.PI*2)", + 1, + Math.cos(-Math.PI*2) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.8.js b/source/spidermonkey-tests/ecma/Math/15.8.2.8.js new file mode 100644 index 00000000..54b68c7e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.8.js @@ -0,0 +1,100 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.8.js + ECMA Section: 15.8.2.8 Math.exp(x) + Description: return an approximation to the exponential function of + the argument (e raised to the power of the argument) + special cases: + - if x is NaN return NaN + - if x is 0 return 1 + - if x is -0 return 1 + - if x is Infinity return Infinity + - if x is -Infinity return 0 + Author: christine@netscape.com + Date: 7 july 1997 +*/ + + +var SECTION = "15.8.2.8"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.exp(x)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.exp.length", + 1, + Math.exp.length ); + +new TestCase( SECTION, + "Math.exp()", + Number.NaN, + Math.exp() ); + +new TestCase( SECTION, + "Math.exp(null)", + 1, + Math.exp(null) ); + +new TestCase( SECTION, + "Math.exp(void 0)", + Number.NaN, + Math.exp(void 0) ); + +new TestCase( SECTION, + "Math.exp(1)", + Math.E, + Math.exp(1) ); + +new TestCase( SECTION, + "Math.exp(true)", + Math.E, + Math.exp(true) ); + +new TestCase( SECTION, + "Math.exp(false)", + 1, + Math.exp(false) ); + +new TestCase( SECTION, + "Math.exp('1')", + Math.E, + Math.exp('1') ); + +new TestCase( SECTION, + "Math.exp('0')", + 1, + Math.exp('0') ); + +new TestCase( SECTION, + "Math.exp(NaN)", + Number.NaN, + Math.exp(Number.NaN) ); + +new TestCase( SECTION, + "Math.exp(0)", + 1, + Math.exp(0) ); + +new TestCase( SECTION, + "Math.exp(-0)", + 1, + Math.exp(-0) ); + +new TestCase( SECTION, + "Math.exp(Infinity)", + Number.POSITIVE_INFINITY, + Math.exp(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.exp(-Infinity)", + 0, + Math.exp(Number.NEGATIVE_INFINITY) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/15.8.2.9.js b/source/spidermonkey-tests/ecma/Math/15.8.2.9.js new file mode 100644 index 00000000..9fe0ab1d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Math/15.8.2.9.js @@ -0,0 +1,157 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8.2.9.js + ECMA Section: 15.8.2.9 Math.floor(x) + Description: return the greatest number value that is not greater + than the argument and is equal to a mathematical integer. + if the number is already an integer, return the number + itself. special cases: + - if x is NaN return NaN + - if x = +0 return +0 + - if x = -0 return -0 + - if x = Infinity return Infinity + - if x = -Infinity return -Infinity + - if ( -1 < x < 0 ) return -0 + also: + - the value of Math.floor(x) == -Math.ceil(-x) + Author: christine@netscape.com + Date: 7 july 1997 +*/ + +var SECTION = "15.8.2.9"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Math.floor(x)"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.floor.length", + 1, + Math.floor.length ); + +new TestCase( SECTION, + "Math.floor()", + Number.NaN, + Math.floor() ); + +new TestCase( SECTION, + "Math.floor(void 0)", + Number.NaN, + Math.floor(void 0) ); + +new TestCase( SECTION, + "Math.floor(null)", + 0, + Math.floor(null) ); + +new TestCase( SECTION, + "Math.floor(true)", + 1, + Math.floor(true) ); + +new TestCase( SECTION, + "Math.floor(false)", + 0, + Math.floor(false) ); + +new TestCase( SECTION, + "Math.floor('1.1')", + 1, + Math.floor("1.1") ); + +new TestCase( SECTION, + "Math.floor('-1.1')", + -2, + Math.floor("-1.1") ); + +new TestCase( SECTION, + "Math.floor('0.1')", + 0, + Math.floor("0.1") ); + +new TestCase( SECTION, + "Math.floor('-0.1')", + -1, + Math.floor("-0.1") ); + +new TestCase( SECTION, + "Math.floor(NaN)", + Number.NaN, + Math.floor(Number.NaN) ); + +new TestCase( SECTION, + "Math.floor(NaN)==-Math.ceil(-NaN)", + false, + Math.floor(Number.NaN) == -Math.ceil(-Number.NaN) ); + +new TestCase( SECTION, + "Math.floor(0)", + 0, + Math.floor(0) ); + +new TestCase( SECTION, + "Math.floor(0)==-Math.ceil(-0)", + true, + Math.floor(0) == -Math.ceil(-0) ); + +new TestCase( SECTION, + "Math.floor(-0)", + -0, + Math.floor(-0) ); + +new TestCase( SECTION, + "Infinity/Math.floor(-0)", + -Infinity, + Infinity/Math.floor(-0) ); + +new TestCase( SECTION, + "Math.floor(-0)==-Math.ceil(0)", + true, + Math.floor(-0)== -Math.ceil(0) ); + +new TestCase( SECTION, + "Math.floor(Infinity)", + Number.POSITIVE_INFINITY, + Math.floor(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.floor(Infinity)==-Math.ceil(-Infinity)", + true, + Math.floor(Number.POSITIVE_INFINITY) == -Math.ceil(Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.floor(-Infinity)", + Number.NEGATIVE_INFINITY, + Math.floor(Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.floor(-Infinity)==-Math.ceil(Infinity)", + true, + Math.floor(Number.NEGATIVE_INFINITY) == -Math.ceil(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, + "Math.floor(0.0000001)", + 0, + Math.floor(0.0000001) ); + +new TestCase( SECTION, + "Math.floor(0.0000001)==-Math.ceil(0.0000001)", true, + Math.floor(0.0000001)==-Math.ceil(-0.0000001) ); + +new TestCase( SECTION, + "Math.floor(-0.0000001)", + -1, + Math.floor(-0.0000001) ); + +new TestCase( SECTION, + "Math.floor(0.0000001)==-Math.ceil(0.0000001)", + true, + Math.floor(-0.0000001)==-Math.ceil(0.0000001) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Math/browser.js b/source/spidermonkey-tests/ecma/Math/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Math/shell.js b/source/spidermonkey-tests/ecma/Math/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/NativeObjects/browser.js b/source/spidermonkey-tests/ecma/NativeObjects/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/NativeObjects/shell.js b/source/spidermonkey-tests/ecma/NativeObjects/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Number/0x-without-following-hexdigits.js b/source/spidermonkey-tests/ecma/Number/0x-without-following-hexdigits.js new file mode 100644 index 00000000..ffb329e5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/0x-without-following-hexdigits.js @@ -0,0 +1,30 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 582643; +var summary = "'0x' not followed by hex digits should be a syntax error"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + eval("0x"); + throw new Error("didn't throw parsing 0x (with no subsequent hex digits)"); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "bad exception thrown: " + e); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.1.js b/source/spidermonkey-tests/ecma/Number/15.7.1.js new file mode 100644 index 00000000..a1a7069d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.1.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.1.js + ECMA Section: 15.7.1 The Number Constructor Called as a Function + 15.7.1.1 + 15.7.1.2 + + Description: When Number is called as a function rather than as a + constructor, it performs a type conversion. + 15.7.1.1 Return a number value (not a Number object) + computed by ToNumber( value ) + 15.7.1.2 Number() returns 0. + + need to add more test cases. see the testcases for + TypeConversion ToNumber. + + Author: christine@netscape.com + Date: 29 september 1997 +*/ + +var SECTION = "15.7.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Number Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase(SECTION, "Number()", 0, Number() ); +new TestCase(SECTION, "Number(void 0)", Number.NaN, Number(void 0) ); +new TestCase(SECTION, "Number(null)", 0, Number(null) ); +new TestCase(SECTION, "Number()", 0, Number() ); +new TestCase(SECTION, "Number(new Number())", 0, Number( new Number() ) ); +new TestCase(SECTION, "Number(0)", 0, Number(0) ); +new TestCase(SECTION, "Number(1)", 1, Number(1) ); +new TestCase(SECTION, "Number(-1)", -1, Number(-1) ); +new TestCase(SECTION, "Number(NaN)", Number.NaN, Number( Number.NaN ) ); +new TestCase(SECTION, "Number('string')", Number.NaN, Number( "string") ); +new TestCase(SECTION, "Number(new String())", 0, Number( new String() ) ); +new TestCase(SECTION, "Number('')", 0, Number( "" ) ); +new TestCase(SECTION, "Number(Infinity)", Number.POSITIVE_INFINITY, Number("Infinity") ); + +new TestCase(SECTION, "Number(new MyObject(100))", 100, Number(new MyObject(100)) ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/Number/15.7.2.js b/source/spidermonkey-tests/ecma/Number/15.7.2.js new file mode 100644 index 00000000..4be91d5a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.2.js @@ -0,0 +1,134 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.2.js + ECMA Section: 15.7.2 The Number Constructor + 15.7.2.1 + 15.7.2.2 + + Description: 15.7.2 When Number is called as part of a new + expression, it is a constructor: it initializes + the newly created object. + + 15.7.2.1 The [[Prototype]] property of the newly + constructed object is set to othe original Number + prototype object, the one that is the initial value + of Number.prototype(0). The [[Class]] property is + set to "Number". The [[Value]] property of the + newly constructed object is set to ToNumber(value) + + 15.7.2.2 new Number(). same as in 15.7.2.1, except + the [[Value]] property is set to +0. + + need to add more test cases. see the testcases for + TypeConversion ToNumber. + + Author: christine@netscape.com + Date: 29 september 1997 +*/ + +var SECTION = "15.7.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Number Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// To verify that the object's prototype is the Number.prototype, check to see if the object's +// constructor property is the same as Number.prototype.constructor. + +new TestCase(SECTION, "(new Number()).constructor", Number.prototype.constructor, (new Number()).constructor ); + +new TestCase(SECTION, "typeof (new Number())", "object", typeof (new Number()) ); +new TestCase(SECTION, "(new Number()).valueOf()", 0, (new Number()).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number(0)).constructor", Number.prototype.constructor, (new Number(0)).constructor ); +new TestCase(SECTION, "typeof (new Number(0))", "object", typeof (new Number(0)) ); +new TestCase(SECTION, "(new Number(0)).valueOf()", 0, (new Number(0)).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number(0);NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number(0);NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number(1)).constructor", Number.prototype.constructor, (new Number(1)).constructor ); +new TestCase(SECTION, "typeof (new Number(1))", "object", typeof (new Number(1)) ); +new TestCase(SECTION, "(new Number(1)).valueOf()", 1, (new Number(1)).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number(1);NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number(1);NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number(-1)).constructor", Number.prototype.constructor, (new Number(-1)).constructor ); +new TestCase(SECTION, "typeof (new Number(-1))", "object", typeof (new Number(-1)) ); +new TestCase(SECTION, "(new Number(-1)).valueOf()", -1, (new Number(-1)).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number(-1);NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number(-1);NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number(Number.NaN)).constructor", Number.prototype.constructor, (new Number(Number.NaN)).constructor ); +new TestCase(SECTION, "typeof (new Number(Number.NaN))", "object", typeof (new Number(Number.NaN)) ); +new TestCase(SECTION, "(new Number(Number.NaN)).valueOf()", Number.NaN, (new Number(Number.NaN)).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number(Number.NaN);NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number(Number.NaN);NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number('string')).constructor", Number.prototype.constructor, (new Number('string')).constructor ); +new TestCase(SECTION, "typeof (new Number('string'))", "object", typeof (new Number('string')) ); +new TestCase(SECTION, "(new Number('string')).valueOf()", Number.NaN, (new Number('string')).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number('string');NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number('string');NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number(new String())).constructor", Number.prototype.constructor, (new Number(new String())).constructor ); +new TestCase(SECTION, "typeof (new Number(new String()))", "object", typeof (new Number(new String())) ); +new TestCase(SECTION, "(new Number(new String())).valueOf()", 0, (new Number(new String())).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number(new String());NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number(new String());NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number('')).constructor", Number.prototype.constructor, (new Number('')).constructor ); +new TestCase(SECTION, "typeof (new Number(''))", "object", typeof (new Number('')) ); +new TestCase(SECTION, "(new Number('')).valueOf()", 0, (new Number('')).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number('');NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number('');NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number(Number.POSITIVE_INFINITY)).constructor", Number.prototype.constructor, (new Number(Number.POSITIVE_INFINITY)).constructor ); +new TestCase(SECTION, "typeof (new Number(Number.POSITIVE_INFINITY))", "object", typeof (new Number(Number.POSITIVE_INFINITY)) ); +new TestCase(SECTION, "(new Number(Number.POSITIVE_INFINITY)).valueOf()", Number.POSITIVE_INFINITY, (new Number(Number.POSITIVE_INFINITY)).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number(Number.POSITIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number(Number.POSITIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +new TestCase(SECTION, "(new Number(Number.NEGATIVE_INFINITY)).constructor", Number.prototype.constructor, (new Number(Number.NEGATIVE_INFINITY)).constructor ); +new TestCase(SECTION, "typeof (new Number(Number.NEGATIVE_INFINITY))", "object", typeof (new Number(Number.NEGATIVE_INFINITY)) ); +new TestCase(SECTION, "(new Number(Number.NEGATIVE_INFINITY)).valueOf()", Number.NEGATIVE_INFINITY, (new Number(Number.NEGATIVE_INFINITY)).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number(Number.NEGATIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number(Number.NEGATIVE_INFINITY);NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + + +new TestCase(SECTION, "(new Number()).constructor", Number.prototype.constructor, (new Number()).constructor ); +new TestCase(SECTION, "typeof (new Number())", "object", typeof (new Number()) ); +new TestCase(SECTION, "(new Number()).valueOf()", 0, (new Number()).valueOf() ); +new TestCase(SECTION, + "NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()", + "[object Number]", + eval("NUMB = new Number();NUMB.toString=Object.prototype.toString;NUMB.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.1-1.js b/source/spidermonkey-tests/ecma/Number/15.7.3.1-1.js new file mode 100644 index 00000000..7a1249d4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.1-1.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.1-2.js + ECMA Section: 15.7.3.1 Number.prototype + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Number.prototype + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.3.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.prototype"; + +writeHeaderToLog( SECTION +" "+ TITLE); + +new TestCase(SECTION, + "var NUM_PROT = Number.prototype; delete( Number.prototype ); NUM_PROT == Number.prototype", + true, + eval("var NUM_PROT = Number.prototype; delete( Number.prototype ); NUM_PROT == Number.prototype") ); + +new TestCase(SECTION, + "delete( Number.prototype )", + false, + eval("delete( Number.prototype )") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.1-2.js b/source/spidermonkey-tests/ecma/Number/15.7.3.1-2.js new file mode 100644 index 00000000..51e53a04 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.1-2.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.1-2.js + ECMA Section: 15.7.3.1 Number.prototype + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Number.prototype + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.3.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var NUM_PROT = Number.prototype; Number.prototype = null; Number.prototype == NUM_PROT", + true, + eval("var NUM_PROT = Number.prototype; Number.prototype = null; Number.prototype == NUM_PROT") ); + +new TestCase( SECTION, + "Number.prototype=0; Number.prototype", + Number.prototype, + eval("Number.prototype=0; Number.prototype") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.1-3.js b/source/spidermonkey-tests/ecma/Number/15.7.3.1-3.js new file mode 100644 index 00000000..97d89038 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.1-3.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.1-4.js + ECMA Section: 15.7.3.1 Number.prototype + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontEnum attribute of Number.prototype + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "15.7.3.1-3"; +var TITLE = "Number.prototype"; + +writeHeaderToLog( SECTION + " Number.prototype: DontEnum Attribute"); + +new TestCase( + SECTION, + "var string = ''; for ( prop in Number ) { string += ( prop == 'prototype' ) ? prop: '' } string;", + "", + eval("var string = ''; for ( prop in Number ) { string += ( prop == 'prototype' ) ? prop : '' } string;") + ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.2-1.js b/source/spidermonkey-tests/ecma/Number/15.7.3.2-1.js new file mode 100644 index 00000000..f4fe0e22 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.2-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.2-1.js + ECMA Section: 15.7.3.2 Number.MAX_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the value of MAX_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.MAX_VALUE"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Number.MAX_VALUE", + 1.7976931348623157e308, + Number.MAX_VALUE ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.2-2.js b/source/spidermonkey-tests/ecma/Number/15.7.3.2-2.js new file mode 100644 index 00000000..64caa6b6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.2-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.2-2.js + ECMA Section: 15.7.3.2 Number.MAX_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Number.MAX_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.MAX_VALUE: DontDelete Attribute"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete( Number.MAX_VALUE ); Number.MAX_VALUE", + 1.7976931348623157e308, + eval("delete( Number.MAX_VALUE );Number.MAX_VALUE") ); + +new TestCase( SECTION, + "delete( Number.MAX_VALUE )", + false, + eval("delete( Number.MAX_VALUE )") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.2-3.js b/source/spidermonkey-tests/ecma/Number/15.7.3.2-3.js new file mode 100644 index 00000000..48a32a3e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.2-3.js @@ -0,0 +1,33 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.2-3.js + ECMA Section: 15.7.3.2 Number.MAX_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Number.MAX_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.2-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.MAX_VALUE"; + +writeHeaderToLog( SECTION + " "+ TITLE ); + +var MAX_VAL = 1.7976931348623157e308; + +new TestCase( SECTION, + "Number.MAX_VALUE=0; Number.MAX_VALUE", + MAX_VAL, + eval("Number.MAX_VALUE=0; Number.MAX_VALUE") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.2-4.js b/source/spidermonkey-tests/ecma/Number/15.7.3.2-4.js new file mode 100644 index 00000000..96bc7071 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.2-4.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.2-4.js + ECMA Section: 15.7.3.2 Number.MAX_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontEnum attribute of Number.MAX_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.3.2-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.MAX_VALUE: DontEnum Attribute"; +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var string = ''; for ( prop in Number ) { string += ( prop == 'MAX_VALUE' ) ? prop : '' } string;", + "", + eval("var string = ''; for ( prop in Number ) { string += ( prop == 'MAX_VALUE' ) ? prop : '' } string;") + ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.3-1.js b/source/spidermonkey-tests/ecma/Number/15.7.3.3-1.js new file mode 100644 index 00000000..b71fd3db --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.3-1.js @@ -0,0 +1,34 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.3-1.js + ECMA Section: 15.7.3.3 Number.MIN_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the value of Number.MIN_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.3.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.MIN_VALUE"; + +writeHeaderToLog( SECTION + " "+ TITLE ); + +var MIN_VAL = 5e-324; + +new TestCase( SECTION, + "Number.MIN_VALUE", + MIN_VAL, + Number.MIN_VALUE ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.3-2.js b/source/spidermonkey-tests/ecma/Number/15.7.3.3-2.js new file mode 100644 index 00000000..345f7049 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.3-2.js @@ -0,0 +1,39 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.3-2.js + ECMA Section: 15.7.3.3 Number.MIN_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Number.MIN_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.3.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.MIN_VALUE"; + +writeHeaderToLog( SECTION + " "+ TITLE ); + +var MIN_VAL = 5e-324; + +new TestCase( SECTION, + "delete( Number.MIN_VALUE )", + false, + eval("delete( Number.MIN_VALUE )") ); + +new TestCase( SECTION, + "delete( Number.MIN_VALUE ); Number.MIN_VALUE", + MIN_VAL, + eval("delete( Number.MIN_VALUE );Number.MIN_VALUE") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.3-3.js b/source/spidermonkey-tests/ecma/Number/15.7.3.3-3.js new file mode 100644 index 00000000..67cbae26 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.3-3.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.3-3.js + ECMA Section: 15.7.3.3 Number.MIN_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Number.MIN_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.3.3-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.MIN_VALUE: ReadOnly Attribute"; + +writeHeaderToLog( SECTION + " "+TITLE ); + +new TestCase( SECTION, + "Number.MIN_VALUE=0; Number.MIN_VALUE", + Number.MIN_VALUE, + eval("Number.MIN_VALUE=0; Number.MIN_VALUE" )); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.3-4.js b/source/spidermonkey-tests/ecma/Number/15.7.3.3-4.js new file mode 100644 index 00000000..13d57bc5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.3-4.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.3-4.js + ECMA Section: 15.7.3.3 Number.MIN_VALUE + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontEnum attribute of Number.MIN_VALUE + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.3.3-4"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Number.MIN_VALUE: DontEnum Attribute"); + +new TestCase( SECTION, + "var string = ''; for ( prop in Number ) { string += ( prop == 'MIN_VALUE' ) ? prop : '' } string;", + "", + eval("var string = ''; for ( prop in Number ) { string += ( prop == 'MIN_VALUE' ) ? prop : '' } string;") + ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.4-1.js b/source/spidermonkey-tests/ecma/Number/15.7.3.4-1.js new file mode 100644 index 00000000..c811c05e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.4-1.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.4-1.js + ECMA Section: 15.7.3.4 Number.NaN + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the value of Number.NaN + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.3.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NaN"; + +writeHeaderToLog( SECTION + " "+ TITLE ); + +new TestCase(SECTION, + "NaN", + NaN, + Number.NaN ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.4-2.js b/source/spidermonkey-tests/ecma/Number/15.7.3.4-2.js new file mode 100644 index 00000000..3ce2e5ed --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.4-2.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.4-2.js + ECMA Section: 15.7.3.4 Number.NaN + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Number.NaN + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.3.4-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NaN"; + +writeHeaderToLog( SECTION + " "+ TITLE ); + +new TestCase(SECTION, + "delete( Number.NaN ); Number.NaN", + NaN, + eval("delete( Number.NaN );Number.NaN" )); + +new TestCase( SECTION, + "delete( Number.NaN )", + false, + eval("delete( Number.NaN )") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.4-3.js b/source/spidermonkey-tests/ecma/Number/15.7.3.4-3.js new file mode 100644 index 00000000..f01506ac --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.4-3.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.4-3.js + ECMA Section: 15.7.3.4 Number.NaN + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Number.NaN + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.4-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NaN"; + +writeHeaderToLog( SECTION + " "+ TITLE ); + +new TestCase( SECTION, + "Number.NaN=0; Number.NaN", + Number.NaN, + eval("Number.NaN=0; Number.NaN") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.4-4.js b/source/spidermonkey-tests/ecma/Number/15.7.3.4-4.js new file mode 100644 index 00000000..e650b2b5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.4-4.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.4-4.js + ECMA Section: 15.7.3.4 Number.NaN + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontEnum attribute of Number.NaN + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.4-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NaN"; + +writeHeaderToLog( SECTION + " " + TITLE); + +new TestCase( SECTION, + "var string = ''; for ( prop in Number ) { string += ( prop == 'NaN' ) ? prop : '' } string;", + "", + eval("var string = ''; for ( prop in Number ) { string += ( prop == 'NaN' ) ? prop : '' } string;") + ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.5-1.js b/source/spidermonkey-tests/ecma/Number/15.7.3.5-1.js new file mode 100644 index 00000000..27ab946a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.5-1.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.5-1.js + ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the value of Number.NEGATIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.3.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NEGATIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase(SECTION, + "Number.NEGATIVE_INFINITY", + -Infinity, + Number.NEGATIVE_INFINITY ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.5-2.js b/source/spidermonkey-tests/ecma/Number/15.7.3.5-2.js new file mode 100644 index 00000000..be2ba396 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.5-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.5-2.js + ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Number.NEGATIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.5-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NEGATIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "delete( Number.NEGATIVE_INFINITY )", + false, + eval("delete( Number.NEGATIVE_INFINITY )") ); + +new TestCase( SECTION, + "delete( Number.NEGATIVE_INFINITY ); Number.NEGATIVE_INFINITY", + -Infinity, + eval("delete( Number.NEGATIVE_INFINITY );Number.NEGATIVE_INFINITY") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.5-3.js b/source/spidermonkey-tests/ecma/Number/15.7.3.5-3.js new file mode 100644 index 00000000..cb2b271a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.5-3.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.5-3.js + ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Number.NEGATIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.5-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NEGATIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "Number.NEGATIVE_INFINITY=0; Number.NEGATIVE_INFINITY", + -Infinity, + eval("Number.NEGATIVE_INFINITY=0; Number.NEGATIVE_INFINITY") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.5-4.js b/source/spidermonkey-tests/ecma/Number/15.7.3.5-4.js new file mode 100644 index 00000000..d44b0f64 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.5-4.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.5-4.js + ECMA Section: 15.7.3.5 Number.NEGATIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontEnum attribute of Number.NEGATIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.5-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.NEGATIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "var string = ''; for ( prop in Number ) { string += ( prop == 'NEGATIVE_INFINITY' ) ? prop : '' } string;", + "", + eval("var string = ''; for ( prop in Number ) { string += ( prop == 'NEGATIVE_INFINITY' ) ? prop : '' } string;") + ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.6-1.js b/source/spidermonkey-tests/ecma/Number/15.7.3.6-1.js new file mode 100644 index 00000000..2c9f4990 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.6-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.6-1.js + ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the value of Number.POSITIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.6-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.POSITIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "Number.POSITIVE_INFINITY", + Infinity, + Number.POSITIVE_INFINITY ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.6-2.js b/source/spidermonkey-tests/ecma/Number/15.7.3.6-2.js new file mode 100644 index 00000000..55553adb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.6-2.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.6-2.js + ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontDelete attribute of Number.POSITIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.3.6-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.POSITIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase(SECTION, + "delete( Number.POSITIVE_INFINITY )", + false, + eval("delete( Number.POSITIVE_INFINITY )") ); + +new TestCase(SECTION, + "delete( Number.POSITIVE_INFINITY ); Number.POSITIVE_INFINITY", + Infinity, + eval("delete( Number.POSITIVE_INFINITY );Number.POSITIVE_INFINITY") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.6-3.js b/source/spidermonkey-tests/ecma/Number/15.7.3.6-3.js new file mode 100644 index 00000000..b08b4a96 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.6-3.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.6-3.js + ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the ReadOnly attribute of Number.POSITIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ + +var SECTION = "15.7.3.6-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.POSITIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "Number.POSITIVE_INFINITY=0; Number.POSITIVE_INFINITY", + Number.POSITIVE_INFINITY, + eval("Number.POSITIVE_INFINITY=0; Number.POSITIVE_INFINITY") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.6-4.js b/source/spidermonkey-tests/ecma/Number/15.7.3.6-4.js new file mode 100644 index 00000000..79250d9e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.6-4.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.6-4.js + ECMA Section: 15.7.3.6 Number.POSITIVE_INFINITY + Description: All value properties of the Number object should have + the attributes [DontEnum, DontDelete, ReadOnly] + + this test checks the DontEnum attribute of Number.POSITIVE_INFINITY + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.3.6-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.POSITIVE_INFINITY"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "var string = ''; for ( prop in Number ) { string += ( prop == 'POSITIVE_INFINITY' ) ? prop : '' } string;", + "", + eval("var string = ''; for ( prop in Number ) { string += ( prop == 'POSITIVE_INFINITY' ) ? prop : '' } string;") + ); + + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.3.js b/source/spidermonkey-tests/ecma/Number/15.7.3.js new file mode 100644 index 00000000..9ac4c4b1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.3.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.js + 15.7.3 Properties of the Number Constructor + + Description: The value of the internal [[Prototype]] property + of the Number constructor is the Function prototype + object. The Number constructor also has the internal + [[Call]] and [[Construct]] properties, and the length + property. + + Other properties are in subsequent tests. + + Author: christine@netscape.com + Date: 29 september 1997 +*/ + +var SECTION = "15.7.3"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Properties of the Number Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase(SECTION, + "Number.length", + 1, + Number.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4-1.js b/source/spidermonkey-tests/ecma/Number/15.7.4-1.js new file mode 100644 index 00000000..05d16a5c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4-1.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4-1.js + ECMA Section: 15.7.4.1 Properties of the Number Prototype Object + Description: + Author: christine@netscape.com + Date: 16 september 1997 +*/ + + +var SECTION = "15.7.4-1"; +var VERSION = "ECMA_1"; +startTest(); +writeHeaderToLog( SECTION + "Properties of the Number prototype object"); + +new TestCase(SECTION, "Number.prototype.valueOf()", 0, Number.prototype.valueOf() ); +new TestCase(SECTION, "typeof(Number.prototype)", "object", typeof(Number.prototype) ); +new TestCase(SECTION, "Number.prototype.constructor == Number", true, Number.prototype.constructor == Number ); +// new TestCase(SECTION, "Number.prototype == Number.__proto__", true, Number.prototype == Number.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.1.js b/source/spidermonkey-tests/ecma/Number/15.7.4.1.js new file mode 100644 index 00000000..da8c2050 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.1.js @@ -0,0 +1,28 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.1.js + ECMA Section: 15.7.4.1.1 Number.prototype.constructor + + Number.prototype.constructor is the built-in Number constructor. + + Description: + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Number.prototype.constructor"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "Number.prototype.constructor", + Number, + Number.prototype.constructor ); +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.2-1.js b/source/spidermonkey-tests/ecma/Number/15.7.4.2-1.js new file mode 100644 index 00000000..05939a6e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.2-1.js @@ -0,0 +1,77 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.2.js + ECMA Section: 15.7.4.2.1 Number.prototype.toString() + Description: + If the radix is the number 10 or not supplied, then this number value is + given as an argument to the ToString operator; the resulting string value + is returned. + + If the radix is supplied and is an integer from 2 to 36, but not 10, the + result is a string, the choice of which is implementation dependent. + + The toString function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.2-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Number.prototype.toString()"); + +// the following two lines cause navigator to crash -- cmb 9/16/97 +new TestCase(SECTION, + "Number.prototype.toString()", + "0", + eval("Number.prototype.toString()") ); + +new TestCase(SECTION, + "typeof(Number.prototype.toString())", + "string", + eval("typeof(Number.prototype.toString())") ); + +new TestCase(SECTION, + "s = Number.prototype.toString; o = new Number(); o.toString = s; o.toString()", + "0", + eval("s = Number.prototype.toString; o = new Number(); o.toString = s; o.toString()") ); + +new TestCase(SECTION, + "s = Number.prototype.toString; o = new Number(1); o.toString = s; o.toString()", + "1", + eval("s = Number.prototype.toString; o = new Number(1); o.toString = s; o.toString()") ); + +new TestCase(SECTION, + "s = Number.prototype.toString; o = new Number(-1); o.toString = s; o.toString()", + "-1", + eval("s = Number.prototype.toString; o = new Number(-1); o.toString = s; o.toString()") ); + +new TestCase(SECTION, + "var MYNUM = new Number(255); MYNUM.toString(10)", + "255", + eval("var MYNUM = new Number(255); MYNUM.toString(10)") ); + +new TestCase(SECTION, + "var MYNUM = new Number(Number.NaN); MYNUM.toString(10)", + "NaN", + eval("var MYNUM = new Number(Number.NaN); MYNUM.toString(10)") ); + +new TestCase(SECTION, + "var MYNUM = new Number(Infinity); MYNUM.toString(10)", + "Infinity", + eval("var MYNUM = new Number(Infinity); MYNUM.toString(10)") ); + +new TestCase(SECTION, + "var MYNUM = new Number(-Infinity); MYNUM.toString(10)", + "-Infinity", + eval("var MYNUM = new Number(-Infinity); MYNUM.toString(10)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.2-2-n.js b/source/spidermonkey-tests/ecma/Number/15.7.4.2-2-n.js new file mode 100644 index 00000000..83eef466 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.2-2-n.js @@ -0,0 +1,42 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.2-2-n.js + ECMA Section: 15.7.4.2.1 Number.prototype.toString() + Description: + If the radix is the number 10 or not supplied, then this number value is + given as an argument to the ToString operator; the resulting string value + is returned. + + If the radix is supplied and is an integer from 2 to 36, but not 10, the + result is a string, the choice of which is implementation dependent. + + The toString function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.2-2-n"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Number.prototype.toString()"); + +DESCRIPTION = "o = new Object(); o.toString = Number.prototype.toString; o.toString()"; +EXPECTED = "error"; + +new TestCase(SECTION, + "o = new Object(); o.toString = Number.prototype.toString; o.toString()", + "error", + eval("o = new Object(); o.toString = Number.prototype.toString; o.toString()") ); + +// new TestCase(SECTION, "o = new String(); o.toString = Number.prototype.toString; o.toString()", "error", eval("o = new String(); o.toString = Number.prototype.toString; o.toString()") ); +// new TestCase(SECTION, "o = 3; o.toString = Number.prototype.toString; o.toString()", "error", eval("o = 3; o.toString = Number.prototype.toString; o.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.2-3-n.js b/source/spidermonkey-tests/ecma/Number/15.7.4.2-3-n.js new file mode 100644 index 00000000..adaf443e --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.2-3-n.js @@ -0,0 +1,39 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.2-3-n.js + ECMA Section: 15.7.4.2.1 Number.prototype.toString() + Description: + If the radix is the number 10 or not supplied, then this number value is + given as an argument to the ToString operator; the resulting string value + is returned. + + If the radix is supplied and is an integer from 2 to 36, but not 10, the + result is a string, the choice of which is implementation dependent. + + The toString function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.2-3-n"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Number.prototype.toString()"); + +DESCRIPTION = "o = new String(); o.toString = Number.prototype.toString; o.toString()"; +EXPECTED = "error"; + +new TestCase(SECTION, + "o = new String(); o.toString = Number.prototype.toString; o.toString()", + "error", + eval("o = new String(); o.toString = Number.prototype.toString; o.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.2-4.js b/source/spidermonkey-tests/ecma/Number/15.7.4.2-4.js new file mode 100644 index 00000000..9eaee4d6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.2-4.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.2-4.js + ECMA Section: 15.7.4.2.1 Number.prototype.toString() + Description: + If the radix is the number 10 or not supplied, then this number value is + given as an argument to the ToString operator; the resulting string value + is returned. + + If the radix is supplied and is an integer from 2 to 36, but not 10, the + result is a string, the choice of which is implementation dependent. + + The toString function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.2-4"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Number.prototype.toString()"); + +new TestCase(SECTION, + "o = 3; o.toString = Number.prototype.toString; o.toString()", + "3", + eval("o = 3; o.toString = Number.prototype.toString; o.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.3-1.js b/source/spidermonkey-tests/ecma/Number/15.7.4.3-1.js new file mode 100644 index 00000000..04d5e125 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.3-1.js @@ -0,0 +1,63 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.3-1.js + ECMA Section: 15.7.4.3.1 Number.prototype.valueOf() + Description: + Returns this number value. + + The valueOf function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.3-1"; +var VERSION = "ECMA_1"; +startTest(); + + +writeHeaderToLog( SECTION + " Number.prototype.valueOf()"); + +// the following two line causes navigator to crash -- cmb 9/16/97 +new TestCase("SECTION", + "Number.prototype.valueOf()", + 0, + eval("Number.prototype.valueOf()") ); + +new TestCase("SECTION", + "(new Number(1)).valueOf()", + 1, + eval("(new Number(1)).valueOf()") ); + +new TestCase("SECTION", + "(new Number(-1)).valueOf()", + -1, + eval("(new Number(-1)).valueOf()") ); + +new TestCase("SECTION", + "(new Number(0)).valueOf()", + 0, + eval("(new Number(0)).valueOf()") ); + +new TestCase("SECTION", + "(new Number(Number.POSITIVE_INFINITY)).valueOf()", + Number.POSITIVE_INFINITY, + eval("(new Number(Number.POSITIVE_INFINITY)).valueOf()") ); + +new TestCase("SECTION", + "(new Number(Number.NaN)).valueOf()", + Number.NaN, + eval("(new Number(Number.NaN)).valueOf()") ); + +new TestCase("SECTION", + "(new Number()).valueOf()", + 0, + eval("(new Number()).valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.3-2.js b/source/spidermonkey-tests/ecma/Number/15.7.4.3-2.js new file mode 100644 index 00000000..4af1a2fc --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.3-2.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.3-2.js + ECMA Section: 15.7.4.3.1 Number.prototype.valueOf() + Description: + Returns this number value. + + The valueOf function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.3-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Number.prototype.valueOf()"); + +new TestCase(SECTION, + "v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()", + 3, + eval("v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/15.7.4.3-3-n.js b/source/spidermonkey-tests/ecma/Number/15.7.4.3-3-n.js new file mode 100644 index 00000000..ded89575 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Number/15.7.4.3-3-n.js @@ -0,0 +1,38 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.3-3.js + ECMA Section: 15.7.4.3.1 Number.prototype.valueOf() + Description: + Returns this number value. + + The valueOf function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.7.4.3-3-n"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Number.prototype.valueOf()"); + +// new TestCase("15.7.4.1", "v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()", "error", eval("v = Number.prototype.valueOf; num = 3; num.valueOf = v; num.valueOf()") ); + +DESCRIPTION = "v = Number.prototype.valueOf; o = new String('Infinity'); o.valueOf = v; o.valueOf()"; +EXPECTED = "error"; + +new TestCase("15.7.4.1", + "v = Number.prototype.valueOf; o = new String('Infinity'); o.valueOf = v; o.valueOf()", + "error", + eval("v = Number.prototype.valueOf; o = new String('Infinity'); o.valueOf = v; o.valueOf()") ); + +// new TestCase("15.7.4.1", "v = Number.prototype.valueOf; o = new Object(); o.valueOf = v; o.valueOf()", "error", eval("v = Number.prototype.valueOf; o = new Object(); o.valueOf = v; o.valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Number/browser.js b/source/spidermonkey-tests/ecma/Number/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Number/shell.js b/source/spidermonkey-tests/ecma/Number/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.1.1.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.1.1.js new file mode 100644 index 00000000..11195e01 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.1.1.js @@ -0,0 +1,112 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.1.1.js + ECMA Section: 15.2.1.1 The Object Constructor Called as a Function: + Object(value) + Description: When Object is called as a function rather than as a + constructor, the following steps are taken: + + 1. If value is null or undefined, create and return a + new object with no properties other than internal + properties exactly as if the object constructor + had been called on that same value (15.2.2.1). + 2. Return ToObject (value), whose rules are: + + undefined generate a runtime error + null generate a runtime error + boolean create a new Boolean object whose default + value is the value of the boolean. + number Create a new Number object whose default + value is the value of the number. + string Create a new String object whose default + value is the value of the string. + object Return the input argument (no conversion). + + Author: christine@netscape.com + Date: 17 july 1997 +*/ + +var SECTION = "15.2.1.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object( value )"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var NULL_OBJECT = Object(null); + +new TestCase( SECTION, "Object(null).valueOf()", NULL_OBJECT, (NULL_OBJECT).valueOf() ); +new TestCase( SECTION, "typeof Object(null)", "object", typeof (Object(null)) ); + +var UNDEFINED_OBJECT = Object( void 0 ); + +new TestCase( SECTION, "Object(void 0).valueOf()", UNDEFINED_OBJECT, (UNDEFINED_OBJECT).valueOf() ); +new TestCase( SECTION, "typeof Object(void 0)", "object", typeof (Object(void 0)) ); + +new TestCase( SECTION, "Object(true).valueOf()", true, (Object(true)).valueOf() ); +new TestCase( SECTION, "typeof Object(true)", "object", typeof Object(true) ); +new TestCase( SECTION, "var MYOB = Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("var MYOB = Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(false).valueOf()", false, (Object(false)).valueOf() ); +new TestCase( SECTION, "typeof Object(false)", "object", typeof Object(false) ); +new TestCase( SECTION, "var MYOB = Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("var MYOB = Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(0).valueOf()", 0, (Object(0)).valueOf() ); +new TestCase( SECTION, "typeof Object(0)", "object", typeof Object(0) ); +new TestCase( SECTION, "var MYOB = Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(-0).valueOf()", -0, (Object(-0)).valueOf() ); +new TestCase( SECTION, "typeof Object(-0)", "object", typeof Object(-0) ); +new TestCase( SECTION, "var MYOB = Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(1).valueOf()", 1, (Object(1)).valueOf() ); +new TestCase( SECTION, "typeof Object(1)", "object", typeof Object(1) ); +new TestCase( SECTION, "var MYOB = Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(-1).valueOf()", -1, (Object(-1)).valueOf() ); +new TestCase( SECTION, "typeof Object(-1)", "object", typeof Object(-1) ); +new TestCase( SECTION, "var MYOB = Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(Number.MAX_VALUE).valueOf()", 1.7976931348623157e308, (Object(Number.MAX_VALUE)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.MAX_VALUE)", "object", typeof Object(Number.MAX_VALUE) ); +new TestCase( SECTION, "var MYOB = Object(Number.MAX_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.MAX_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(Number.MIN_VALUE).valueOf()", 5e-324, (Object(Number.MIN_VALUE)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.MIN_VALUE)", "object", typeof Object(Number.MIN_VALUE) ); +new TestCase( SECTION, "var MYOB = Object(Number.MIN_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.MIN_VALUE); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(Number.POSITIVE_INFINITY).valueOf()", Number.POSITIVE_INFINITY, (Object(Number.POSITIVE_INFINITY)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.POSITIVE_INFINITY)", "object", typeof Object(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "var MYOB = Object(Number.POSITIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.POSITIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(Number.NEGATIVE_INFINITY).valueOf()", Number.NEGATIVE_INFINITY, (Object(Number.NEGATIVE_INFINITY)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.NEGATIVE_INFINITY)", "object", typeof Object(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "var MYOB = Object(Number.NEGATIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.NEGATIVE_INFINITY); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object(Number.NaN).valueOf()", Number.NaN, (Object(Number.NaN)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.NaN)", "object", typeof Object(Number.NaN) ); +new TestCase( SECTION, "var MYOB = Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("var MYOB = Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object('a string').valueOf()", "a string", (Object("a string")).valueOf() ); +new TestCase( SECTION, "typeof Object('a string')", "object", typeof (Object("a string")) ); +new TestCase( SECTION, "var MYOB = Object('a string'); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object('a string'); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object('').valueOf()", "", (Object("")).valueOf() ); +new TestCase( SECTION, "typeof Object('')", "object", typeof (Object("")) ); +new TestCase( SECTION, "var MYOB = Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object('\\r\\t\\b\\n\\v\\f').valueOf()", "\r\t\b\n\v\f", (Object("\r\t\b\n\v\f")).valueOf() ); +new TestCase( SECTION, "typeof Object('\\r\\t\\b\\n\\v\\f')", "object", typeof (Object("\\r\\t\\b\\n\\v\\f")) ); +new TestCase( SECTION, "var MYOB = Object('\\r\\t\\b\\n\\v\\f'); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object('\\r\\t\\b\\n\\v\\f'); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "Object( '\\\'\\\"\\' ).valueOf()", "\'\"\\", (Object("\'\"\\")).valueOf() ); +new TestCase( SECTION, "typeof Object( '\\\'\\\"\\' )", "object", typeof Object("\'\"\\") ); +// new TestCase( SECTION, "var MYOB = Object( '\\\'\\\"\\' ); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("var MYOB = Object( '\\\'\\\"\\' ); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.1.2.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.1.2.js new file mode 100644 index 00000000..2cbbe06d --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.1.2.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.1.2.js + ECMA Section: 15.2.1.2 The Object Constructor Called as a Function: + Object(value) + Description: When Object is called as a function rather than as a + constructor, the following steps are taken: + + 1. If value is null or undefined, create and return a + new object with no proerties other than internal + properties exactly as if the object constructor + had been called on that same value (15.2.2.1). + 2. Return ToObject (value), whose rules are: + + undefined generate a runtime error + null generate a runtime error + boolean create a new Boolean object whose default + value is the value of the boolean. + number Create a new Number object whose default + value is the value of the number. + string Create a new String object whose default + value is the value of the string. + object Return the input argument (no conversion). + + Author: christine@netscape.com + Date: 17 july 1997 +*/ + +var SECTION = "15.2.1.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MYOB = Object(); + +new TestCase( SECTION, "var MYOB = Object(); MYOB.valueOf()", MYOB, MYOB.valueOf() ); +new TestCase( SECTION, "typeof Object()", "object", typeof (Object(null)) ); +new TestCase( SECTION, "var MYOB = Object(); MYOB.toString()", "[object Object]", eval("var MYOB = Object(); MYOB.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.2.1.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.2.1.js new file mode 100644 index 00000000..f9d15c9e --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.2.1.js @@ -0,0 +1,104 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.2.1.js + ECMA Section: 15.2.2.1 The Object Constructor: new Object( value ) + + 1.If the type of the value is not Object, go to step 4. + 2.If the value is a native ECMAScript object, do not create a new object; simply return value. + 3.If the value is a host object, then actions are taken and a result is returned in an + implementation-dependent manner that may depend on the host object. + 4.If the type of the value is String, return ToObject(value). + 5.If the type of the value is Boolean, return ToObject(value). + 6.If the type of the value is Number, return ToObject(value). + 7.(The type of the value must be Null or Undefined.) Create a new native ECMAScript object. + The [[Prototype]] property of the newly constructed object is set to the Object prototype object. + The [[Class]] property of the newly constructed object is set to "Object". + The newly constructed object has no [[Value]] property. + Return the newly created native object. + + Description: This does not test cases where the object is a host object. + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.2.2.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "new Object( value )"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, "typeof new Object(null)", "object", typeof new Object(null) ); +new TestCase( SECTION, "MYOB = new Object(null); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Object]", eval("MYOB = new Object(null); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "typeof new Object(void 0)", "object", typeof new Object(void 0) ); +new TestCase( SECTION, "MYOB = new Object(new Object(void 0)); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Object]", eval("MYOB = new Object(new Object(void 0)); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); + +new TestCase( SECTION, "typeof new Object('string')", "object", typeof new Object('string') ); +new TestCase( SECTION, "MYOB = (new Object('string'); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("MYOB = new Object('string'); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object('string').valueOf()", "string", (new Object('string')).valueOf() ); + +new TestCase( SECTION, "typeof new Object('')", "object", typeof new Object('') ); +new TestCase( SECTION, "MYOB = (new Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object String]", eval("MYOB = new Object(''); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object('').valueOf()", "", (new Object('')).valueOf() ); + +new TestCase( SECTION, "typeof new Object(Number.NaN)", "object", typeof new Object(Number.NaN) ); +new TestCase( SECTION, "MYOB = (new Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(Number.NaN); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(Number.NaN).valueOf()", Number.NaN, (new Object(Number.NaN)).valueOf() ); + +new TestCase( SECTION, "typeof new Object(0)", "object", typeof new Object(0) ); +new TestCase( SECTION, "MYOB = (new Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(0); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(0).valueOf()", 0, (new Object(0)).valueOf() ); + +new TestCase( SECTION, "typeof new Object(-0)", "object", typeof new Object(-0) ); +new TestCase( SECTION, "MYOB = (new Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(-0); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(-0).valueOf()", -0, (new Object(-0)).valueOf() ); + +new TestCase( SECTION, "typeof new Object(1)", "object", typeof new Object(1) ); +new TestCase( SECTION, "MYOB = (new Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(1); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(1).valueOf()", 1, (new Object(1)).valueOf() ); + +new TestCase( SECTION, "typeof new Object(-1)", "object", typeof new Object(-1) ); +new TestCase( SECTION, "MYOB = (new Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Number]", eval("MYOB = new Object(-1); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(-1).valueOf()", -1, (new Object(-1)).valueOf() ); + +new TestCase( SECTION, "typeof new Object(true)", "object", typeof new Object(true) ); +new TestCase( SECTION, "MYOB = (new Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("MYOB = new Object(true); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(true).valueOf()", true, (new Object(true)).valueOf() ); + +new TestCase( SECTION, "typeof new Object(false)", "object", typeof new Object(false) ); +new TestCase( SECTION, "MYOB = (new Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("MYOB = new Object(false); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(false).valueOf()", false, (new Object(false)).valueOf() ); + +new TestCase( SECTION, "typeof new Object(Boolean())", "object", typeof new Object(Boolean()) ); +new TestCase( SECTION, "MYOB = (new Object(Boolean()); MYOB.toString = Object.prototype.toString; MYOB.toString()", "[object Boolean]", eval("MYOB = new Object(Boolean()); MYOB.toString = Object.prototype.toString; MYOB.toString()") ); +new TestCase( SECTION, "(new Object(Boolean()).valueOf()", Boolean(), (new Object(Boolean())).valueOf() ); + + +var myglobal = this; +var myobject = new Object( "my new object" ); +var myarray = new Array(); +var myboolean = new Boolean(); +var mynumber = new Number(); +var mystring = new String(); +var myobject = new Object(); +var myfunction = new Function( "x", "return x"); +var mymath = Math; + +new TestCase( SECTION, "myglobal = new Object( this )", myglobal, new Object(this) ); +new TestCase( SECTION, "myobject = new Object('my new object'); new Object(myobject)", myobject, new Object(myobject) ); +new TestCase( SECTION, "myarray = new Array(); new Object(myarray)", myarray, new Object(myarray) ); +new TestCase( SECTION, "myboolean = new Boolean(); new Object(myboolean)", myboolean, new Object(myboolean) ); +new TestCase( SECTION, "mynumber = new Number(); new Object(mynumber)", mynumber, new Object(mynumber) ); +new TestCase( SECTION, "mystring = new String9); new Object(mystring)", mystring, new Object(mystring) ); +new TestCase( SECTION, "myobject = new Object(); new Object(mynobject)", myobject, new Object(myobject) ); +new TestCase( SECTION, "myfunction = new Function(); new Object(myfunction)", myfunction, new Object(myfunction) ); +new TestCase( SECTION, "mymath = Math; new Object(mymath)", mymath, new Object(mymath) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.2.2.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.2.2.js new file mode 100644 index 00000000..f93895e7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.2.2.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.2.2.js + ECMA Section: 15.2.2.2 new Object() + Description: + + When the Object constructor is called with no argument, the following + step is taken: + + 1. Create a new native ECMAScript object. + The [[Prototype]] property of the newly constructed object is set to + the Object prototype object. + + The [[Class]] property of the newly constructed object is set + to "Object". + + The newly constructed object has no [[Value]] property. + + Return the newly created native object. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ +var SECTION = "15.2.2.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "new Object()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "typeof new Object()", "object", typeof new Object() ); +new TestCase( SECTION, "Object.prototype.toString()", "[object Object]", Object.prototype.toString() ); +new TestCase( SECTION, "(new Object()).toString()", "[object Object]", (new Object()).toString() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3-1.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3-1.js new file mode 100644 index 00000000..1e48b82b --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3-1.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.3-1.js + ECMA Section: 15.2.3 Properties of the Object Constructor + + Description: The value of the internal [[Prototype]] property of the + Object constructor is the Function prototype object. + + Besides the call and construct propreties and the length + property, the Object constructor has properties described + in 15.2.3.1. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.2.3"; +var VERSION = "ECMA_2"; +startTest(); + +writeHeaderToLog( SECTION + " Properties of the Object Constructor"); + +new TestCase( SECTION, "Object.length", 1, Object.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-1.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-1.js new file mode 100644 index 00000000..8742b37e --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-1.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.3.1-1.js + ECMA Section: 15.2.3.1 Object.prototype + + Description: The initial value of Object.prototype is the built-in + Object prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete ReadOnly ] + + This tests the [DontEnum] property of Object.prototype + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.2.3.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var str = '';for ( p in Object ) { str += p; }; str", + "", + eval( "var str = ''; for ( p in Object ) { str += p; }; str" ) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-2.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-2.js new file mode 100644 index 00000000..8dae5f2f --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-2.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.3.1-2.js + ECMA Section: 15.2.3.1 Object.prototype + + Description: The initial value of Object.prototype is the built-in + Object prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete ReadOnly ] + + This tests the [DontDelete] property of Object.prototype + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.2.3.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete( Object.prototype )", + false, + eval("delete( Object.prototype )") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-3.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-3.js new file mode 100644 index 00000000..609f49d3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-3.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.3.1-3.js + ECMA Section: 15.2.3.1 Object.prototype + + Description: The initial value of Object.prototype is the built-in + Object prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete ReadOnly ] + + This tests the [ReadOnly] property of Object.prototype + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.2.3.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Object.prototype = null; Object.prototype", + Object.prototype, + eval("Object.prototype = null; Object.prototype")); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-4.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-4.js new file mode 100644 index 00000000..6c032064 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.1-4.js @@ -0,0 +1,36 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.3.1-4.js + ECMA Section: 15.2.3.1 Object.prototype + + Description: The initial value of Object.prototype is the built-in + Object prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete ReadOnly ] + + This tests the [DontDelete] property of Object.prototype + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.2.3.1-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "delete( Object.prototype ); Object.prototype", + Object.prototype, + eval("delete(Object.prototype); Object.prototype") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.js new file mode 100644 index 00000000..2dcd9dfb --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.3.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.3.js + ECMA Section: 15.2.3 Properties of the Object Constructor + + Description: The value of the internal [[Prototype]] property of the + Object constructor is the Function prototype object. + + Besides the call and construct propreties and the length + property, the Object constructor has properties described + in 15.2.3.1. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.2.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Object Constructor"; + +writeHeaderToLog( SECTION + " " + TITLE); + +// new TestCase( SECTION, "Object.__proto__", Function.prototype, Object.__proto__ ); +new TestCase( SECTION, "Object.length", 1, Object.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.1.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.1.js new file mode 100644 index 00000000..1fda30d3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.1.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.4.1.js + ECMA Section: 15.2.4 Object.prototype.constructor + + Description: The initial value of the Object.prototype.constructor + is the built-in Object constructor. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.2.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object.prototype.constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Object.prototype.constructor", + Object, + Object.prototype.constructor ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.2.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.2.js new file mode 100644 index 00000000..eb461f7e --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.2.js @@ -0,0 +1,96 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.4.2.js + ECMA Section: 15.2.4.2 Object.prototype.toString() + + Description: When the toString method is called, the following + steps are taken: + 1. Get the [[Class]] property of this object + 2. Call ToString( Result(1) ) + 3. Compute a string value by concatenating the three + strings "[object " + Result(2) + "]" + 4. Return Result(3). + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.2.4.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object.prototype.toString()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "(new Object()).toString()", "[object Object]", (new Object()).toString() ); + +new TestCase( SECTION, "myvar = this; myvar.toString = Object.prototype.toString; myvar.toString()", + GLOBAL.replace(/ @ 0x[0-9a-fA-F]+ \(native @ 0x[0-9a-fA-F]+\)/, ''), + eval("myvar = this; myvar.toString = Object.prototype.toString; myvar.toString()") + ); + +new TestCase( SECTION, "myvar = MyObject; myvar.toString = Object.prototype.toString; myvar.toString()", + "[object Function]", + eval("myvar = MyObject; myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = new MyObject( true ); myvar.toString = Object.prototype.toString; myvar.toString()", + '[object Object]', + eval("myvar = new MyObject( true ); myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = new Number(0); myvar.toString = Object.prototype.toString; myvar.toString()", + "[object Number]", + eval("myvar = new Number(0); myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = new String(''); myvar.toString = Object.prototype.toString; myvar.toString()", + "[object String]", + eval("myvar = new String(''); myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = Math; myvar.toString = Object.prototype.toString; myvar.toString()", + "[object Math]", + eval("myvar = Math; myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = new Function(); myvar.toString = Object.prototype.toString; myvar.toString()", + "[object Function]", + eval("myvar = new Function(); myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = new Array(); myvar.toString = Object.prototype.toString; myvar.toString()", + "[object Array]", + eval("myvar = new Array(); myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = new Boolean(); myvar.toString = Object.prototype.toString; myvar.toString()", + "[object Boolean]", + eval("myvar = new Boolean(); myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "myvar = new Date(); myvar.toString = Object.prototype.toString; myvar.toString()", + "[object Date]", + eval("myvar = new Date(); myvar.toString = Object.prototype.toString; myvar.toString()") ); + +new TestCase( SECTION, "var MYVAR = new Object( this ); MYVAR.toString()", + GLOBAL.replace(/ @ 0x[0-9a-fA-F]+ \(native @ 0x[0-9a-fA-F]+\)/, ''), + eval("var MYVAR = new Object( this ); MYVAR.toString()") + ); + +new TestCase( SECTION, "var MYVAR = new Object(); MYVAR.toString()", + "[object Object]", + eval("var MYVAR = new Object(); MYVAR.toString()") ); + +new TestCase( SECTION, "var MYVAR = new Object(void 0); MYVAR.toString()", + "[object Object]", + eval("var MYVAR = new Object(void 0); MYVAR.toString()") ); + +new TestCase( SECTION, "var MYVAR = new Object(null); MYVAR.toString()", + "[object Object]", + eval("var MYVAR = new Object(null); MYVAR.toString()") ); + + +function MyObject( value ) { + this.value = new Function( "return this.value" ); + this.toString = new Function ( "return this.value+''"); +} + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.3.js b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.3.js new file mode 100644 index 00000000..6842a6f1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/ObjectObjects/15.2.4.3.js @@ -0,0 +1,83 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.4.3.js + ECMA Section: 15.2.4.3 Object.prototype.valueOf() + + Description: As a rule, the valueOf method for an object simply + returns the object; but if the object is a "wrapper" + for a host object, as may perhaps be created by the + Object constructor, then the contained host object + should be returned. + + This only covers native objects. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.2.4.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object.prototype.valueOf()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var myarray = new Array(); +myarray.valueOf = Object.prototype.valueOf; +var myboolean = new Boolean(); +myboolean.valueOf = Object.prototype.valueOf; +var myfunction = new Function(); +myfunction.valueOf = Object.prototype.valueOf; +var myobject = new Object(); +myobject.valueOf = Object.prototype.valueOf; +var mymath = Math; +mymath.valueOf = Object.prototype.valueOf; +var mydate = new Date(); +mydate.valueOf = Object.prototype.valueOf; +var mynumber = new Number(); +mynumber.valueOf = Object.prototype.valueOf; +var mystring = new String(); +mystring.valueOf = Object.prototype.valueOf; + +new TestCase( SECTION, "Object.prototype.valueOf.length", 0, Object.prototype.valueOf.length ); + +new TestCase( SECTION, + "myarray = new Array(); myarray.valueOf = Object.prototype.valueOf; myarray.valueOf()", + myarray, + myarray.valueOf() ); +new TestCase( SECTION, + "myboolean = new Boolean(); myboolean.valueOf = Object.prototype.valueOf; myboolean.valueOf()", + myboolean, + myboolean.valueOf() ); +new TestCase( SECTION, + "myfunction = new Function(); myfunction.valueOf = Object.prototype.valueOf; myfunction.valueOf()", + myfunction, + myfunction.valueOf() ); +new TestCase( SECTION, + "myobject = new Object(); myobject.valueOf = Object.prototype.valueOf; myobject.valueOf()", + myobject, + myobject.valueOf() ); +new TestCase( SECTION, + "mymath = Math; mymath.valueOf = Object.prototype.valueOf; mymath.valueOf()", + mymath, + mymath.valueOf() ); +new TestCase( SECTION, + "mynumber = new Number(); mynumber.valueOf = Object.prototype.valueOf; mynumber.valueOf()", + mynumber, + mynumber.valueOf() ); +new TestCase( SECTION, + "mystring = new String(); mystring.valueOf = Object.prototype.valueOf; mystring.valueOf()", + mystring, + mystring.valueOf() ); +new TestCase( SECTION, + "mydate = new Date(); mydate.valueOf = Object.prototype.valueOf; mydate.valueOf()", + mydate, + mydate.valueOf() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/browser.js b/source/spidermonkey-tests/ecma/ObjectObjects/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/ObjectObjects/shell.js b/source/spidermonkey-tests/ecma/ObjectObjects/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/README b/source/spidermonkey-tests/ecma/README new file mode 100644 index 00000000..91f174ab --- /dev/null +++ b/source/spidermonkey-tests/ecma/README @@ -0,0 +1 @@ +ECMA 262 Edition 1 diff --git a/source/spidermonkey-tests/ecma/SourceText/6-1.js b/source/spidermonkey-tests/ecma/SourceText/6-1.js new file mode 100644 index 00000000..d618e7da --- /dev/null +++ b/source/spidermonkey-tests/ecma/SourceText/6-1.js @@ -0,0 +1,94 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 6-1.js + ECMA Section: Source Text + Description: + + ECMAScript source text is represented as a sequence of characters + representable using the Unicode version 2.0 character encoding. + + SourceCharacter :: + any Unicode character + + However, it is possible to represent every ECMAScript program using + only ASCII characters (which are equivalent to the first 128 Unicode + characters). Non-ASCII Unicode characters may appear only within comments + and string literals. In string literals, any Unicode character may also be + expressed as a Unicode escape sequence consisting of six ASCII characters, + namely \u plus four hexadecimal digits. Within a comment, such an escape + sequence is effectively ignored as part of the comment. Within a string + literal, the Unicode escape sequence contributes one character to the string + value of the literal. + + Note that ECMAScript differs from the Java programming language in the + behavior of Unicode escape sequences. In a Java program, if the Unicode escape + sequence \u000A, for example, occurs within a single-line comment, it is + interpreted as a line terminator (Unicode character 000A is line feed) and + therefore the next character is not part of the comment. Similarly, if the + Unicode escape sequence \u000A occurs within a string literal in a Java + program, it is likewise interpreted as a line terminator, which is not + allowed within a string literal-one must write \n instead of \u000A to + cause a line feed to be part of the string value of a string literal. In + an ECMAScript program, a Unicode escape sequence occurring within a comment + is never interpreted and therefore cannot contribute to termination of the + comment. Similarly, a Unicode escape sequence occurring within a string literal + in an ECMAScript program always contributes a character to the string value of + the literal and is never interpreted as a line terminator or as a quote mark + that might terminate the string literal. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "6-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Source Text"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var testcase = new TestCase( SECTION, + "// the following character should not be interpreted as a line terminator in a comment: \u000A", + 'PASSED', + "PASSED" ); + +// \u000A testcase.actual = "FAILED!"; + +testcase = + new TestCase( SECTION, + "// the following character should not be interpreted as a line terminator in a comment: \\n 'FAILED'", + 'PASSED', + 'PASSED' ); + +// the following character should noy be interpreted as a line terminator: \\n testcase.actual = "FAILED" + +testcase = + new TestCase( SECTION, + "// the following character should not be interpreted as a line terminator in a comment: \\u000A 'FAILED'", + 'PASSED', + 'PASSED' ); + +// the following character should not be interpreted as a line terminator: \u000A testcase.actual = "FAILED" + +testcase = + new TestCase( SECTION, + "// the following character should not be interpreted as a line terminator in a comment: \n 'PASSED'", + 'PASSED', + 'PASSED' ); +// the following character should not be interpreted as a line terminator: \n testcase.actual = 'FAILED' + +testcase = + new TestCase( SECTION, + "// the following character should not be interpreted as a line terminator in a comment: u000D", + 'PASSED', + 'PASSED' ); + +// the following character should not be interpreted as a line terminator: \u000D testcase.actual = "FAILED" + +test(); + diff --git a/source/spidermonkey-tests/ecma/SourceText/6-2.js b/source/spidermonkey-tests/ecma/SourceText/6-2.js new file mode 100644 index 00000000..d7bb0907 --- /dev/null +++ b/source/spidermonkey-tests/ecma/SourceText/6-2.js @@ -0,0 +1,97 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 6-1.js + ECMA Section: Source Text + Description: + + ECMAScript source text is represented as a sequence of characters + representable using the Unicode version 2.0 character encoding. + + SourceCharacter :: + any Unicode character + + However, it is possible to represent every ECMAScript program using + only ASCII characters (which are equivalent to the first 128 Unicode + characters). Non-ASCII Unicode characters may appear only within comments + and string literals. In string literals, any Unicode character may also be + expressed as a Unicode escape sequence consisting of six ASCII characters, + namely \u plus four hexadecimal digits. Within a comment, such an escape + sequence is effectively ignored as part of the comment. Within a string + literal, the Unicode escape sequence contributes one character to the string + value of the literal. + + Note that ECMAScript differs from the Java programming language in the + behavior of Unicode escape sequences. In a Java program, if the Unicode escape + sequence \u000A, for example, occurs within a single-line comment, it is + interpreted as a line terminator (Unicode character 000A is line feed) and + therefore the next character is not part of the comment. Similarly, if the + Unicode escape sequence \u000A occurs within a string literal in a Java + program, it is likewise interpreted as a line terminator, which is not + allowed within a string literal-one must write \n instead of \u000A to + cause a line feed to be part of the string value of a string literal. In + an ECMAScript program, a Unicode escape sequence occurring within a comment + is never interpreted and therefore cannot contribute to termination of the + comment. Similarly, a Unicode escape sequence occurring within a string literal + in an ECMAScript program always contributes a character to the string value of + the literal and is never interpreted as a line terminator or as a quote mark + that might terminate the string literal. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "6-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Source Text"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// encoded quotes should not end a quote + +new TestCase( SECTION, + "var s = 'PAS\\u0022SED'; s", + "PAS\"SED", + eval("var s = 'PAS\\u0022SED'; s") ); + +new TestCase( SECTION, + 'var s = "PAS\\u0022SED"; s', + "PAS\"SED", + eval('var s = "PAS\\u0022SED"; s') ); + + +new TestCase( SECTION, + "var s = 'PAS\\u0027SED'; s", + "PAS\'SED", + eval("var s = 'PAS\\u0027SED'; s") ); + + +new TestCase( SECTION, + 'var s = "PAS\\u0027SED"; s', + "PAS\'SED", + eval('var s = "PAS\\u0027SED"; s') ); + +var testcase = new TestCase( SECTION, + 'var s="PAS\\u0027SED"; s', + "PAS\'SED", + "" ); +var s = "PAS\u0027SED"; + +testcase.actual = s; + +testcase = new TestCase( SECTION, + 'var s = "PAS\\u0022SED"; s', + "PAS\"SED", + "" ); +var s = "PAS\u0022SED"; + +testcase.actual = s; + + +test(); + diff --git a/source/spidermonkey-tests/ecma/SourceText/browser.js b/source/spidermonkey-tests/ecma/SourceText/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/SourceText/shell.js b/source/spidermonkey-tests/ecma/SourceText/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Statements/12.10-1.js b/source/spidermonkey-tests/ecma/Statements/12.10-1.js new file mode 100644 index 00000000..8e4f67c8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.10-1.js @@ -0,0 +1,117 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.10-1.js + ECMA Section: 12.10 The with statement + Description: + WithStatement : + with ( Expression ) Statement + + The with statement adds a computed object to the front of the scope chain + of the current execution context, then executes a statement with this + augmented scope chain, then restores the scope chain. + + Semantics + + The production WithStatement : with ( Expression ) Statement is evaluated + as follows: + 1. Evaluate Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Add Result(3) to the front of the scope chain. + 5. Evaluate Statement using the augmented scope chain from step 4. + 6. Remove Result(3) from the front of the scope chain. + 7. Return Result(5). + + Discussion + Note that no matter how control leaves the embedded Statement, whether + normally or by some form of abrupt completion, the scope chain is always + restored to its former state. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "12.10-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The with statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +// although the scope chain changes, the this value is immutable for a given +// execution context. + +new TestCase( SECTION, + "with( new Number() ) { this +'' }", + GLOBAL, + eval("with( new Number() ) { this +'' }") ); + +// the object's functions and properties should override those of the +// global object. + +new TestCase( + SECTION, + "var MYOB = new WithObject(true); with (MYOB) { parseInt() }", + true, + eval("var MYOB = new WithObject(true); with (MYOB) { parseInt() }") ); + +new TestCase( + SECTION, + "var MYOB = new WithObject(false); with (MYOB) { NaN }", + false, + eval("var MYOB = new WithObject(false); with (MYOB) { NaN }") ); + +new TestCase( + SECTION, + "var MYOB = new WithObject(NaN); with (MYOB) { Infinity }", + Number.NaN, + eval("var MYOB = new WithObject(NaN); with (MYOB) { Infinity }") ); + +new TestCase( + SECTION, + "var MYOB = new WithObject(false); with (MYOB) { }; Infinity", + Number.POSITIVE_INFINITY, + eval("var MYOB = new WithObject(false); with (MYOB) { }; Infinity") ); + + +new TestCase( + SECTION, + "var MYOB = new WithObject(0); with (MYOB) { delete Infinity; Infinity }", + Number.POSITIVE_INFINITY, + eval("var MYOB = new WithObject(0); with (MYOB) { delete Infinity; Infinity }") ); + +// let us leave the with block via a break. + +new TestCase( + SECTION, + "var MYOB = new WithObject(0); while (true) { with (MYOB) { Infinity; break; } } Infinity", + Number.POSITIVE_INFINITY, + eval("var MYOB = new WithObject(0); while (true) { with (MYOB) { Infinity; break; } } Infinity") ); + + +test(); + +function WithObject( value ) { + this.prop1 = 1; + this.prop2 = new Boolean(true); + this.prop3 = "a string"; + this.value = value; + + // now we will override global functions + + this.parseInt = new Function( "return this.value" ); + this.NaN = value; + this.Infinity = value; + this.unescape = new Function( "return this.value" ); + this.escape = new Function( "return this.value" ); + this.eval = new Function( "return this.value" ); + this.parseFloat = new Function( "return this.value" ); + this.isNaN = new Function( "return this.value" ); + this.isFinite = new Function( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.10.js b/source/spidermonkey-tests/ecma/Statements/12.10.js new file mode 100644 index 00000000..90643092 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.10.js @@ -0,0 +1,27 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.10-1.js + ECMA Section: 12.10 The with statement + Description: + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.10-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The with statement"; + +writeHeaderToLog( SECTION +" "+ TITLE); + +new TestCase( SECTION, + "var x; with (7) x = valueOf(); typeof x;", + "number", + eval("var x; with(7) x = valueOf(); typeof x;") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Statements/12.2-1.js b/source/spidermonkey-tests/ecma/Statements/12.2-1.js new file mode 100644 index 00000000..a0ece24f --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.2-1.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.2-1.js + ECMA Section: The variable statement + Description: + + If the variable statement occurs inside a FunctionDeclaration, the + variables are defined with function-local scope in that function, as + described in section 10.1.3. Otherwise, they are defined with global + scope, that is, they are created as members of the global object, as + described in section 0. Variables are created when the execution scope + is entered. A Block does not define a new execution scope. Only Program and + FunctionDeclaration produce a new scope. Variables are initialized to the + undefined value when created. A variable with an Initializer is assigned + the value of its AssignmentExpression when the VariableStatement is executed, + not when the variable is created. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "12.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The variable statement"; + +writeHeaderToLog( SECTION +" "+ TITLE); + +new TestCase( "SECTION", + "var x = 3; function f() { var a = x; var x = 23; return a; }; f()", + void 0, + eval("var x = 3; function f() { var a = x; var x = 23; return a; }; f()") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.5-1.js b/source/spidermonkey-tests/ecma/Statements/12.5-1.js new file mode 100644 index 00000000..c5bd6b59 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.5-1.js @@ -0,0 +1,68 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.5-1.js + ECMA Section: The if statement + Description: + + The production IfStatement : if ( Expression ) Statement else Statement + is evaluated as follows: + + 1.Evaluate Expression. + 2.Call GetValue(Result(1)). + 3.Call ToBoolean(Result(2)). + 4.If Result(3) is false, go to step 7. + 5.Evaluate the first Statement. + 6.Return Result(5). + 7.Evaluate the second Statement. + 8.Return Result(7). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + + +var SECTION = "12.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The if statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, + "var MYVAR; if ( true ) MYVAR='PASSED'; else MYVAR= 'FAILED';", + "PASSED", + eval("var MYVAR; if ( true ) MYVAR='PASSED'; else MYVAR= 'FAILED';") ); + +new TestCase( SECTION, + "var MYVAR; if ( false ) MYVAR='FAILED'; else MYVAR= 'PASSED';", + "PASSED", + eval("var MYVAR; if ( false ) MYVAR='FAILED'; else MYVAR= 'PASSED';") ); + +new TestCase( SECTION, + "var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; else MYVAR= 'FAILED';", + "PASSED", + eval("var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; else MYVAR= 'FAILED';") ); + +new TestCase( SECTION, + "var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; else MYVAR= 'FAILED';", + "PASSED", + eval("var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; else MYVAR= 'FAILED';") ); + +new TestCase( SECTION, + "var MYVAR; if ( 1 ) MYVAR='PASSED'; else MYVAR= 'FAILED';", + "PASSED", + eval("var MYVAR; if ( 1 ) MYVAR='PASSED'; else MYVAR= 'FAILED';") ); + +new TestCase( SECTION, + "var MYVAR; if ( 0 ) MYVAR='FAILED'; else MYVAR= 'PASSED';", + "PASSED", + eval("var MYVAR; if ( 0 ) MYVAR='FAILED'; else MYVAR= 'PASSED';") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.5-2.js b/source/spidermonkey-tests/ecma/Statements/12.5-2.js new file mode 100644 index 00000000..f7c58b02 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.5-2.js @@ -0,0 +1,65 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.5-2.js + ECMA Section: The if statement + Description: + + The production IfStatement : if ( Expression ) Statement else Statement + is evaluated as follows: + + 1.Evaluate Expression. + 2.Call GetValue(Result(1)). + 3.Call ToBoolean(Result(2)). + 4.If Result(3) is false, go to step 7. + 5.Evaluate the first Statement. + 6.Return Result(5). + 7.Evaluate the second Statement. + 8.Return Result(7). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "12.5-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The if statement" ; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var MYVAR; if ( true ) MYVAR='PASSED'; MYVAR", + "PASSED", + eval("var MYVAR; if ( true ) MYVAR='PASSED'; MYVAR") ); + +new TestCase( SECTION, + "var MYVAR; if ( false ) MYVAR='FAILED'; MYVAR;", + "PASSED", + eval("var MYVAR=\"PASSED\"; if ( false ) MYVAR='FAILED'; MYVAR;") ); + +new TestCase( SECTION, + "var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; MYVAR", + "PASSED", + eval("var MYVAR; if ( new Boolean(true) ) MYVAR='PASSED'; MYVAR") ); + +new TestCase( SECTION, + "var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; MYVAR", + "PASSED", + eval("var MYVAR; if ( new Boolean(false) ) MYVAR='PASSED'; MYVAR") ); + +new TestCase( SECTION, + "var MYVAR; if ( 1 ) MYVAR='PASSED'; MYVAR", + "PASSED", + eval("var MYVAR; if ( 1 ) MYVAR='PASSED'; MYVAR") ); + +new TestCase( SECTION, + "var MYVAR; if ( 0 ) MYVAR='FAILED'; MYVAR;", + "PASSED", + eval("var MYVAR=\"PASSED\"; if ( 0 ) MYVAR='FAILED'; MYVAR;") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.1-1.js b/source/spidermonkey-tests/ecma/Statements/12.6.1-1.js new file mode 100644 index 00000000..5a575f05 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.1-1.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.1-1.js + ECMA Section: The while statement + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "12.6.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The While statement"; +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, + "var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) break; } MYVAR ", + 1, + eval("var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) break; } MYVAR ")); + +new TestCase( SECTION, + "var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) continue; else break; } MYVAR ", + 100, + eval("var MYVAR = 0; while( MYVAR++ < 100) { if ( MYVAR < 100 ) continue; else break; } MYVAR ")); + +new TestCase( SECTION, + "function MYFUN( arg1 ) { while ( arg1++ < 100 ) { if ( arg1 < 100 ) return arg1; } }; MYFUN(1)", + 2, + eval("function MYFUN( arg1 ) { while ( arg1++ < 100 ) { if ( arg1 < 100 ) return arg1; } }; MYFUN(1)")); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-1.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-1.js new file mode 100644 index 00000000..53f62341 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-1.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-1.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is not present. + 2. second expression is not present + 3. third expression is not present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "12.6.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( "12.6.2-1", "for statement", 99, testprogram() ); + +test(); + + +function testprogram() { + myVar = 0; + + for ( ; ; ) { + if ( ++myVar == 99 ) + break; + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-2.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-2.js new file mode 100644 index 00000000..04a958c9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-2.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-2.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is not present. + 2. second expression is not present + 3. third expression is present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ +var SECTION = "12.6.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "for statement", 99, testprogram() ); + +test(); + +function testprogram() { + myVar = 0; + + for ( ; ; myVar++ ) { + if ( myVar < 99 ) { + continue; + } else { + break; + } + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-3.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-3.js new file mode 100644 index 00000000..049ba250 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-3.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-3.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is not present. + 2. second expression is present + 3. third expression is present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ +var SECTION = "12.6.2-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "for statement", 100, testprogram() ); + +test(); + +function testprogram() { + myVar = 0; + + for ( ; myVar < 100 ; myVar++ ) { + continue; + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-4.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-4.js new file mode 100644 index 00000000..e9a0e7cf --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-4.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-4.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is not present. + 2. second expression is present + 3. third expression is present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "12.6.2-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "for statement", 100, testprogram() ); + +test(); + +function testprogram() { + myVar = 0; + + for ( ; myVar < 100 ; myVar++ ) { + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-5.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-5.js new file mode 100644 index 00000000..1386f04b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-5.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-5.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is not present. + 2. second expression is present + 3. third expression is present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ +var SECTION = "12.6.2-5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "for statement", 99, testprogram() ); + +test(); + +function testprogram() { + myVar = 0; + + for ( ; myVar < 100 ; myVar++ ) { + if (myVar == 99) + break; + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-6.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-6.js new file mode 100644 index 00000000..624ccbfb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-6.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-6.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is present. + 2. second expression is not present + 3. third expression is present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ +var SECTION = "12.6.2-6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( "12.6.2-6", "for statement", 256, testprogram() ); + +test(); + +function testprogram() { + var myVar; + + for ( myVar=2; ; myVar *= myVar ) { + + if (myVar > 100) + break; + continue; + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-7.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-7.js new file mode 100644 index 00000000..1038723b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-7.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-7.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is present. + 2. second expression is not present + 3. third expression is present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ +var SECTION = "12.6.2-7"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "for statement", 256, testprogram() ); + +test(); + +function testprogram() { + var myVar; + + for ( myVar=2; myVar < 100 ; myVar *= myVar ) { + + continue; + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-8.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-8.js new file mode 100644 index 00000000..d76fb35a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-8.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-8.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is present. + 2. second expression is present + 3. third expression is present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ +var SECTION = "12.6.2-8"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "for statement", 256, testprogram() ); + +test(); + +function testprogram() { + var myVar; + + for ( myVar=2; myVar < 256; myVar *= myVar ) { + } + + return myVar; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.2-9-n.js b/source/spidermonkey-tests/ecma/Statements/12.6.2-9-n.js new file mode 100644 index 00000000..2b594111 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.2-9-n.js @@ -0,0 +1,42 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.2-9-n.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is not present. + 2. second expression is not present + 3. third expression is not present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ + + +var SECTION = "12.6.2-9-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "for (i)"; +EXPECTED = "error"; + +new TestCase( SECTION, + "for (i)", + "error", + eval("for (i) { }") ); + +/* + for (i) { + } + +*/ +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-1.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-1.js new file mode 100644 index 00000000..06294d6d --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-1.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + + Author: christine@netscape.com + Date: 11 september 1997 +*/ + +var SECTION = "12.6.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var x; Number.prototype.foo = 34; for ( j in 7 ) x = j; x", + "foo", + eval("var x; Number.prototype.foo = 34; for ( j in 7 ){x = j;} x") ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-10.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-10.js new file mode 100644 index 00000000..8481458c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-10.js @@ -0,0 +1,81 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-10.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-10"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +var count = 0; +function f() { count++; return new Array("h","e","l","l","o"); } + +var result = ""; +for ( p in f() ) { result += f()[p] }; + +new TestCase( SECTION, + "count = 0; result = \"\"; "+ + "function f() { count++; return new Array(\"h\",\"e\",\"l\",\"l\",\"o\"); }"+ + "for ( p in f() ) { result += f()[p] }; count", + 6, + count ); + +new TestCase( SECTION, + "result", + "hello", + result ); + +// LeftHandSideExpression:NewExpression:MemberExpression [ Expression ] +// LeftHandSideExpression:NewExpression:MemberExpression . Identifier +// LeftHandSideExpression:NewExpression:new MemberExpression Arguments +// LeftHandSideExpression:NewExpression:PrimaryExpression:( Expression ) +// LeftHandSideExpression:CallExpression:MemberExpression Arguments +// LeftHandSideExpression:CallExpression Arguments +// LeftHandSideExpression:CallExpression [ Expression ] +// LeftHandSideExpression:CallExpression . Identifier + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-11.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-11.js new file mode 100644 index 00000000..8e92635a --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-11.js @@ -0,0 +1,64 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-11.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-11"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 5. Get the name of the next property of Result(3) that doesn't have the +// DontEnum attribute. If there is no such property, go to step 14. + +var result = ""; + +for ( p in Number ) { result += String(p) }; + +new TestCase( SECTION, + "result = \"\"; for ( p in Number ) { result += String(p) };", + "", + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-12.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-12.js new file mode 100644 index 00000000..14035580 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-12.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-12.js + ECMA Section: 12.6.3 The for...in Statement + Description: + + This is a regression test for http://bugzilla.mozilla.org/show_bug.cgi?id=9802. + + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-12"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "PASSED"; + +for ( aVar in this ) { + if (aVar == "aVar") { + result = "FAILED" + } +}; + +new TestCase( + SECTION, + "var result=''; for ( aVar in this ) { " + + "if (aVar == 'aVar') {return a failure}; result", + "PASSED", + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-19.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-19.js new file mode 100644 index 00000000..fce562cb --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-19.js @@ -0,0 +1,83 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +var count = 0; +function f() { count++; return new Array("h","e","l","l","o"); } + +var result = ""; +for ( p in f() ) { result += f()[p] }; + +new TestCase( SECTION, + "count = 0; result = \"\"; "+ + "function f() { count++; return new Array(\"h\",\"e\",\"l\",\"l\",\"o\"); }"+ + "for ( p in f() ) { result += f()[p] }; count", + 6, + count ); + +new TestCase( SECTION, + "result", + "hello", + result ); + + + +// LeftHandSideExpression:NewExpression:MemberExpression [ Expression ] +// LeftHandSideExpression:NewExpression:MemberExpression . Identifier +// LeftHandSideExpression:NewExpression:new MemberExpression Arguments +// LeftHandSideExpression:NewExpression:PrimaryExpression:( Expression ) +// LeftHandSideExpression:CallExpression:MemberExpression Arguments +// LeftHandSideExpression:CallExpression Arguments +// LeftHandSideExpression:CallExpression [ Expression ] +// LeftHandSideExpression:CallExpression . Identifier + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-2.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-2.js new file mode 100644 index 00000000..bbd0a1be --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-2.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-2.js + ECMA Section: 12.6.3 The for...in Statement + Description: Check the Boolean Object + + + Author: christine@netscape.com + Date: 11 september 1997 +*/ + +var SECTION = "12.6.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Boolean.prototype.foo = 34; for ( j in Boolean ) Boolean[j]", + 34, + eval("Boolean.prototype.foo = 34; for ( j in Boolean ) Boolean[j] ") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-3.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-3.js new file mode 100644 index 00000000..6adb35c9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-3.js @@ -0,0 +1,39 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-3.js + ECMA Section: for..in loops + Description: + + This verifies the fix to + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=112156 + for..in should take general lvalue for first argument + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "12.6.3-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var o = {}; + +var result = ""; + +for ( o.a in [1,2,3] ) { result += String( [1,2,3][o.a] ); } + +new TestCase( SECTION, + "for ( o.a in [1,2,3] ) { result += String( [1,2,3][o.a] ); } result", + "123", + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-4.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-4.js new file mode 100644 index 00000000..e56b6a6c --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-4.js @@ -0,0 +1,168 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression (it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; +var BUGNUMBER="http://scopus.mcom.com/bugsplat/show_bug.cgi?id=344855"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +var o = new MyObject(); +var result = 0; + +for ( MyObject in o ) { + result += o[MyObject]; +} + +new TestCase( SECTION, + "for ( MyObject in o ) { result += o[MyObject] }", + 6, + result ); + +var result = 0; + +for ( value in o ) { + result += o[value]; +} + +new TestCase( SECTION, + "for ( value in o ) { result += o[value]", + 6, + result ); + +var value = "value"; +var result = 0; +for ( value in o ) { + result += o[value]; +} + +new TestCase( SECTION, + "value = \"value\"; for ( value in o ) { result += o[value]", + 6, + result ); + +var value = 0; +var result = 0; +for ( value in o ) { + result += o[value]; +} + +new TestCase( SECTION, + "value = 0; for ( value in o ) { result += o[value]", + 6, + result ); + +// this causes a segv + +var ob = { 0:"hello" }; +var result = 0; +for ( ob[0] in o ) { + result += o[ob[0]]; +} + +new TestCase( SECTION, + "ob = { 0:\"hello\" }; for ( ob[0] in o ) { result += o[ob[0]]", + 6, + result ); + +var result = 0; +for ( ob["0"] in o ) { + result += o[ob["0"]]; +} + +new TestCase( SECTION, + "value = 0; for ( ob[\"0\"] in o ) { result += o[o[\"0\"]]", + 6, + result ); + +var result = 0; +var ob = { value:"hello" }; +for ( ob[value] in o ) { + result += o[ob[value]]; +} + +new TestCase( SECTION, + "ob = { 0:\"hello\" }; for ( ob[value] in o ) { result += o[ob[value]]", + 6, + result ); + +var result = 0; +for ( ob["value"] in o ) { + result += o[ob["value"]]; +} + +new TestCase( SECTION, + "value = 0; for ( ob[\"value\"] in o ) { result += o[ob[\"value\"]]", + 6, + result ); + +var result = 0; +for ( ob.value in o ) { + result += o[ob.value]; +} + +new TestCase( SECTION, + "value = 0; for ( ob.value in o ) { result += o[ob.value]", + 6, + result ); + +// LeftHandSideExpression:NewExpression:MemberExpression [ Expression ] +// LeftHandSideExpression:NewExpression:MemberExpression . Identifier +// LeftHandSideExpression:NewExpression:new MemberExpression Arguments +// LeftHandSideExpression:NewExpression:PrimaryExpression:( Expression ) +// LeftHandSideExpression:CallExpression:MemberExpression Arguments +// LeftHandSideExpression:CallExpression Arguments +// LeftHandSideExpression:CallExpression [ Expression ] +// LeftHandSideExpression:CallExpression . Identifier + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-5-n.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-5-n.js new file mode 100644 index 00000000..2465b628 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-5-n.js @@ -0,0 +1,76 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +DESCRIPTION = "more than one member expression"; +EXPECTED = "error"; + +new TestCase( SECTION, + "more than one member expression", + "error", + eval("var o = new MyObject(); var result = 0; for ( var i, p in this) { result += this[p]; }") ); + +/* + var o = new MyObject(); + var result = 0; + + for ( var i, p in this) { + result += this[p]; + } +*/ + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-6-n.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-6-n.js new file mode 100644 index 00000000..c217f49b --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-6-n.js @@ -0,0 +1,75 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +DESCRIPTION = "bad left-hand side expression"; +EXPECTED = "error"; + +new TestCase( SECTION, + "bad left-hand side expression", + "error", + eval("var o = new MyObject(); var result = 0; for ( this in o) { result += this[p]; }") ); +/* + var o = new MyObject(); + var result = 0; + + for ( this in o) { + result += this[p]; + } +*/ + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-7-n.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-7-n.js new file mode 100644 index 00000000..f420ccba --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-7-n.js @@ -0,0 +1,76 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +DESCRIPTION = "bad left-hand side expression"; +EXPECTED = "error"; + +new TestCase( SECTION, + "bad left-hand side expression", + "error", + eval("var o = new MyObject(); var result = 0; for ( \"a\" in o) { result += this[p]; } ") ); + +/* + var o = new MyObject(); + var result = 0; + + for ( "a" in o) { + result += this[p]; + } +*/ + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-8-n.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-8-n.js new file mode 100644 index 00000000..c427bbf6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-8-n.js @@ -0,0 +1,76 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-8-n.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +DESCRIPTION = "bad left-hand side expression"; +EXPECTED = "error"; + +new TestCase( SECTION, + "bad left-hand side expression", + "error", + eval("var o = new MyObject(); var result = 0; for ( 1 in o) { result += this[p]; } ") ); + +/* + var o = new MyObject(); + var result = 0; + + for ( 1 in o) { + result += this[p]; + } +*/ + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.6.3-9-n.js b/source/spidermonkey-tests/ecma/Statements/12.6.3-9-n.js new file mode 100644 index 00000000..c356c3d7 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.6.3-9-n.js @@ -0,0 +1,75 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.6.3-9-n.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "12.6.3-9-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The for..in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// for ( LeftHandSideExpression in Expression ) +// LeftHandSideExpression:NewExpression:MemberExpression + +DESCRIPTION = "object is not defined"; +EXPECTED = "error"; + +new TestCase( SECTION, + "object is not defined", + "error", + eval("var o = new MyObject(); var result = 0; for ( var o in foo) { result += this[o]; } ") ); +/* + var o = new MyObject(); + var result = 0; + + for ( var o in foo) { + result += this[o]; + } +*/ + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma/Statements/12.7-1-n.js b/source/spidermonkey-tests/ecma/Statements/12.7-1-n.js new file mode 100644 index 00000000..3a01acea --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.7-1-n.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.7-1-n.js + ECMA Section: 12.7 The continue statement + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "12.7.1-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The continue statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "continue"; +EXPECTED = "error"; + +new TestCase( SECTION, + "continue", + "error", + eval("continue") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Statements/12.8-1-n.js b/source/spidermonkey-tests/ecma/Statements/12.8-1-n.js new file mode 100644 index 00000000..ea8a4743 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.8-1-n.js @@ -0,0 +1,33 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.8-1-n.js + ECMA Section: 12.8 The break statement + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "12.8-1-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The break in statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "break"; +EXPECTED = "error"; + +new TestCase( SECTION, + "break", + "error", + eval("break") ); + + +test(); + diff --git a/source/spidermonkey-tests/ecma/Statements/12.9-1-n.js b/source/spidermonkey-tests/ecma/Statements/12.9-1-n.js new file mode 100644 index 00000000..d47f21e9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Statements/12.9-1-n.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.9-1-n.js + ECMA Section: 12.9 The return statement + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "12.9-1-n"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The return statement"); + +DESCRIPTION = "return"; +EXPECTED = "error"; + +new TestCase( SECTION, + "return", + "error", + eval("return") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/Statements/browser.js b/source/spidermonkey-tests/ecma/Statements/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Statements/shell.js b/source/spidermonkey-tests/ecma/Statements/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/String/15.5.1.js b/source/spidermonkey-tests/ecma/String/15.5.1.js new file mode 100644 index 00000000..b5be9aab --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.1.js @@ -0,0 +1,100 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.1.js + ECMA Section: 15.5.1 The String Constructor called as a Function + 15.5.1.1 String(value) + 15.5.1.2 String() + + Description: When String is called as a function rather than as + a constructor, it performs a type conversion. + - String(value) returns a string value (not a String + object) computed by ToString(value) + - String() returns the empty string "" + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The String Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String('string primitive')", "string primitive", String('string primitive') ); +new TestCase( SECTION, "String(void 0)", "undefined", String( void 0) ); +new TestCase( SECTION, "String(null)", "null", String( null ) ); +new TestCase( SECTION, "String(true)", "true", String( true) ); +new TestCase( SECTION, "String(false)", "false", String( false ) ); +new TestCase( SECTION, "String(Boolean(true))", "true", String(Boolean(true)) ); +new TestCase( SECTION, "String(Boolean(false))", "false", String(Boolean(false)) ); +new TestCase( SECTION, "String(Boolean())", "false", String(Boolean(false)) ); +new TestCase( SECTION, "String(new Array())", "", String( new Array()) ); +new TestCase( SECTION, "String(new Array(1,2,3))", "1,2,3", String( new Array(1,2,3)) ); + + +new TestCase( SECTION, "String( Number.NaN )", "NaN", String( Number.NaN ) ); +new TestCase( SECTION, "String( 0 )", "0", String( 0 ) ); +new TestCase( SECTION, "String( -0 )", "0", String( -0 ) ); +new TestCase( SECTION, "String( Number.POSITIVE_INFINITY )", "Infinity", String( Number.POSITIVE_INFINITY ) ); +new TestCase( SECTION, "String( Number.NEGATIVE_INFINITY )", "-Infinity", String( Number.NEGATIVE_INFINITY ) ); +new TestCase( SECTION, "String( -1 )", "-1", String( -1 ) ); + +// cases in step 6: integers 1e21 > x >= 1 or -1 >= x > -1e21 + +new TestCase( SECTION, "String( 1 )", "1", String( 1 ) ); +new TestCase( SECTION, "String( 10 )", "10", String( 10 ) ); +new TestCase( SECTION, "String( 100 )", "100", String( 100 ) ); +new TestCase( SECTION, "String( 1000 )", "1000", String( 1000 ) ); +new TestCase( SECTION, "String( 10000 )", "10000", String( 10000 ) ); +new TestCase( SECTION, "String( 10000000000 )", "10000000000", String( 10000000000 ) ); +new TestCase( SECTION, "String( 10000000000000000000 )", "10000000000000000000", String( 10000000000000000000 ) ); +new TestCase( SECTION, "String( 100000000000000000000 )","100000000000000000000",String( 100000000000000000000 ) ); + +new TestCase( SECTION, "String( 12345 )", "12345", String( 12345 ) ); +new TestCase( SECTION, "String( 1234567890 )", "1234567890", String( 1234567890 ) ); + +new TestCase( SECTION, "String( -1 )", "-1", String( -1 ) ); +new TestCase( SECTION, "String( -10 )", "-10", String( -10 ) ); +new TestCase( SECTION, "String( -100 )", "-100", String( -100 ) ); +new TestCase( SECTION, "String( -1000 )", "-1000", String( -1000 ) ); +new TestCase( SECTION, "String( -1000000000 )", "-1000000000", String( -1000000000 ) ); +new TestCase( SECTION, "String( -1000000000000000 )", "-1000000000000000", String( -1000000000000000 ) ); +new TestCase( SECTION, "String( -100000000000000000000 )", "-100000000000000000000", String( -100000000000000000000 ) ); +new TestCase( SECTION, "String( -1000000000000000000000 )", "-1e+21", String( -1000000000000000000000 ) ); + +new TestCase( SECTION, "String( -12345 )", "-12345", String( -12345 ) ); +new TestCase( SECTION, "String( -1234567890 )", "-1234567890", String( -1234567890 ) ); + +// cases in step 7: numbers with a fractional component, 1e21> x >1 or -1 > x > -1e21, +new TestCase( SECTION, "String( 1.0000001 )", "1.0000001", String( 1.0000001 ) ); + + +// cases in step 8: fractions between 1 > x > -1, exclusive of 0 and -0 + +// cases in step 9: numbers with 1 significant digit >= 1e+21 or <= 1e-6 + +new TestCase( SECTION, "String( 1000000000000000000000 )", "1e+21", String( 1000000000000000000000 ) ); +new TestCase( SECTION, "String( 10000000000000000000000 )", "1e+22", String( 10000000000000000000000 ) ); + +// cases in step 10: numbers with more than 1 significant digit >= 1e+21 or <= 1e-6 +new TestCase( SECTION, "String( 1.2345 )", "1.2345", String( 1.2345)); +new TestCase( SECTION, "String( 1.234567890 )", "1.23456789", String( 1.234567890 )); + +new TestCase( SECTION, "String( .12345 )", "0.12345", String(.12345 ) ); +new TestCase( SECTION, "String( .012345 )", "0.012345", String(.012345) ); +new TestCase( SECTION, "String( .0012345 )", "0.0012345", String(.0012345) ); +new TestCase( SECTION, "String( .00012345 )", "0.00012345", String(.00012345) ); +new TestCase( SECTION, "String( .000012345 )", "0.000012345", String(.000012345) ); +new TestCase( SECTION, "String( .0000012345 )", "0.0000012345", String(.0000012345) ); +new TestCase( SECTION, "String( .00000012345 )", "1.2345e-7", String(.00000012345)); + +new TestCase( "15.5.2", "String()", "", String() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.2.js b/source/spidermonkey-tests/ecma/String/15.5.2.js new file mode 100644 index 00000000..de065b81 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.2.js @@ -0,0 +1,76 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.2.js + ECMA Section: 15.5.2 The String Constructor + 15.5.2.1 new String(value) + 15.5.2.2 new String() + + Description: When String is called as part of a new expression, it + is a constructor; it initializes the newly constructed + object. + + - The prototype property of the newly constructed + object is set to the original String prototype object, + the one that is the intial value of String.prototype + - The internal [[Class]] property of the object is "String" + - The value of the object is ToString(value). + - If no value is specified, its value is the empty string. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The String Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, "typeof new String('string primitive')", "object", typeof new String('string primitive') ); +new TestCase( SECTION, "var TESTSTRING = new String('string primitive'); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String('string primitive'); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String('string primitive')).valueOf()", 'string primitive', (new String('string primitive')).valueOf() ); +new TestCase( SECTION, "(new String('string primitive')).substring", String.prototype.substring, (new String('string primitive')).substring ); + +new TestCase( SECTION, "typeof new String(void 0)", "object", typeof new String(void 0) ); +new TestCase( SECTION, "var TESTSTRING = new String(void 0); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(void 0); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String(void 0)).valueOf()", "undefined", (new String(void 0)).valueOf() ); +new TestCase( SECTION, "(new String(void 0)).toString", String.prototype.toString, (new String(void 0)).toString ); + +new TestCase( SECTION, "typeof new String(null)", "object", typeof new String(null) ); +new TestCase( SECTION, "var TESTSTRING = new String(null); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(null); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String(null)).valueOf()", "null", (new String(null)).valueOf() ); +new TestCase( SECTION, "(new String(null)).valueOf", String.prototype.valueOf, (new String(null)).valueOf ); + +new TestCase( SECTION, "typeof new String(true)", "object", typeof new String(true) ); +new TestCase( SECTION, "var TESTSTRING = new String(true); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(true); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String(true)).valueOf()", "true", (new String(true)).valueOf() ); +new TestCase( SECTION, "(new String(true)).charAt", String.prototype.charAt, (new String(true)).charAt ); + +new TestCase( SECTION, "typeof new String(false)", "object", typeof new String(false) ); +new TestCase( SECTION, "var TESTSTRING = new String(false); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(false); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String(false)).valueOf()", "false", (new String(false)).valueOf() ); +new TestCase( SECTION, "(new String(false)).charCodeAt", String.prototype.charCodeAt, (new String(false)).charCodeAt ); + +new TestCase( SECTION, "typeof new String(new Boolean(true))", "object", typeof new String(new Boolean(true)) ); +new TestCase( SECTION, "var TESTSTRING = new String(new Boolean(true)); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(new Boolean(true)); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String(new Boolean(true))).valueOf()", "true", (new String(new Boolean(true))).valueOf() ); +new TestCase( SECTION, "(new String(new Boolean(true))).indexOf", String.prototype.indexOf, (new String(new Boolean(true))).indexOf ); + +new TestCase( SECTION, "typeof new String()", "object", typeof new String() ); +new TestCase( SECTION, "var TESTSTRING = new String(); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String()).valueOf()", '', (new String()).valueOf() ); +new TestCase( SECTION, "(new String()).lastIndexOf", String.prototype.lastIndexOf, (new String()).lastIndexOf ); + +new TestCase( SECTION, "typeof new String('')", "object", typeof new String('') ); +new TestCase( SECTION, "var TESTSTRING = new String(''); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()", "[object String]", eval("var TESTSTRING = new String(''); TESTSTRING.toString=Object.prototype.toString;TESTSTRING.toString()") ); +new TestCase( SECTION, "(new String('')).valueOf()", '', (new String('')).valueOf() ); +new TestCase( SECTION, "(new String('')).split", String.prototype.split, (new String('')).split ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.1-1.js b/source/spidermonkey-tests/ecma/String/15.5.3.1-1.js new file mode 100644 index 00000000..f95feb50 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.1-1.js @@ -0,0 +1,37 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.1-1.js + ECMA Section: 15.5.3.1 Properties of the String Constructor + + Description: The initial value of String.prototype is the built-in + String prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete, ReadOnly] + + This tests the DontEnum attribute. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.3.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the String Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.length", 0, String.prototype.length ); + +new TestCase( SECTION, + "var str='';for ( p in String ) { if ( p == 'prototype' ) str += p; } str", + "", + eval("var str='';for ( p in String ) { if ( p == 'prototype' ) str += p; } str") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.1-2.js b/source/spidermonkey-tests/ecma/String/15.5.3.1-2.js new file mode 100644 index 00000000..d3b24e42 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.1-2.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.1-2.js + ECMA Section: 15.5.3.1 Properties of the String Constructor + + Description: The initial value of String.prototype is the built-in + String prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete, ReadOnly] + + This tests the ReadOnly attribute. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.3.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the String Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "String.prototype=null;String.prototype", + String.prototype, + eval("String.prototype=null;String.prototype") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.1-3.js b/source/spidermonkey-tests/ecma/String/15.5.3.1-3.js new file mode 100644 index 00000000..69066091 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.1-3.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.1-3.js + ECMA Section: 15.5.3.1 Properties of the String Constructor + + Description: The initial value of String.prototype is the built-in + String prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete, ReadOnly] + + This tests the DontDelete attribute. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.3.1-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the String Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "delete( String.prototype )", false, eval("delete ( String.prototype )") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.1-4.js b/source/spidermonkey-tests/ecma/String/15.5.3.1-4.js new file mode 100644 index 00000000..7605de7a --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.1-4.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.1-4.js + ECMA Section: 15.5.3.1 Properties of the String Constructor + + Description: The initial value of String.prototype is the built-in + String prototype object. + + This property shall have the attributes [ DontEnum, + DontDelete, ReadOnly] + + This tests the DontDelete attribute. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.3.1-4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the String Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "delete( String.prototype );String.prototype", String.prototype, eval("delete ( String.prototype );String.prototype") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.2-1.js b/source/spidermonkey-tests/ecma/String/15.5.3.2-1.js new file mode 100644 index 00000000..f351ec05 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.2-1.js @@ -0,0 +1,156 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.2-1.js + ECMA Section: 15.5.3.2 String.fromCharCode( char0, char1, ... ) + Description: Return a string value containing as many characters + as the number of arguments. Each argument specifies + one character of the resulting string, with the first + argument specifying the first character, and so on, + from left to right. An argument is converted to a + character by applying the operation ToUint16_t and + regarding the resulting 16bit integeras the Unicode + encoding of a character. If no arguments are supplied, + the result is the empty string. + + This test covers Basic Latin (range U+0020 - U+007F) + + Author: christine@netscape.com + Date: 2 october 1997 +*/ + +var SECTION = "15.5.3.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.fromCharCode()"; + +new TestCase( SECTION, "typeof String.fromCharCode", "function", typeof String.fromCharCode ); +new TestCase( SECTION, "typeof String.prototype.fromCharCode", "undefined", typeof String.prototype.fromCharCode ); +new TestCase( SECTION, "var x = new String(); typeof x.fromCharCode", "undefined", eval("var x = new String(); typeof x.fromCharCode") ); +new TestCase( SECTION, "String.fromCharCode.length", 1, String.fromCharCode.length ); + +new TestCase( SECTION, "String.fromCharCode()", "", String.fromCharCode() ); +new TestCase( SECTION, "String.fromCharCode(0x0020)", " ", String.fromCharCode(0x0020) ); +new TestCase( SECTION, "String.fromCharCode(0x0021)", "!", String.fromCharCode(0x0021) ); +new TestCase( SECTION, "String.fromCharCode(0x0022)", "\"", String.fromCharCode(0x0022) ); +new TestCase( SECTION, "String.fromCharCode(0x0023)", "#", String.fromCharCode(0x0023) ); +new TestCase( SECTION, "String.fromCharCode(0x0024)", "$", String.fromCharCode(0x0024) ); +new TestCase( SECTION, "String.fromCharCode(0x0025)", "%", String.fromCharCode(0x0025) ); +new TestCase( SECTION, "String.fromCharCode(0x0026)", "&", String.fromCharCode(0x0026) ); +new TestCase( SECTION, "String.fromCharCode(0x0027)", "\'", String.fromCharCode(0x0027) ); +new TestCase( SECTION, "String.fromCharCode(0x0028)", "(", String.fromCharCode(0x0028) ); +new TestCase( SECTION, "String.fromCharCode(0x0029)", ")", String.fromCharCode(0x0029) ); +new TestCase( SECTION, "String.fromCharCode(0x002A)", "*", String.fromCharCode(0x002A) ); +new TestCase( SECTION, "String.fromCharCode(0x002B)", "+", String.fromCharCode(0x002B) ); +new TestCase( SECTION, "String.fromCharCode(0x002C)", ",", String.fromCharCode(0x002C) ); +new TestCase( SECTION, "String.fromCharCode(0x002D)", "-", String.fromCharCode(0x002D) ); +new TestCase( SECTION, "String.fromCharCode(0x002E)", ".", String.fromCharCode(0x002E) ); +new TestCase( SECTION, "String.fromCharCode(0x002F)", "/", String.fromCharCode(0x002F) ); + +new TestCase( SECTION, "String.fromCharCode(0x0030)", "0", String.fromCharCode(0x0030) ); +new TestCase( SECTION, "String.fromCharCode(0x0031)", "1", String.fromCharCode(0x0031) ); +new TestCase( SECTION, "String.fromCharCode(0x0032)", "2", String.fromCharCode(0x0032) ); +new TestCase( SECTION, "String.fromCharCode(0x0033)", "3", String.fromCharCode(0x0033) ); +new TestCase( SECTION, "String.fromCharCode(0x0034)", "4", String.fromCharCode(0x0034) ); +new TestCase( SECTION, "String.fromCharCode(0x0035)", "5", String.fromCharCode(0x0035) ); +new TestCase( SECTION, "String.fromCharCode(0x0036)", "6", String.fromCharCode(0x0036) ); +new TestCase( SECTION, "String.fromCharCode(0x0037)", "7", String.fromCharCode(0x0037) ); +new TestCase( SECTION, "String.fromCharCode(0x0038)", "8", String.fromCharCode(0x0038) ); +new TestCase( SECTION, "String.fromCharCode(0x0039)", "9", String.fromCharCode(0x0039) ); +new TestCase( SECTION, "String.fromCharCode(0x003A)", ":", String.fromCharCode(0x003A) ); +new TestCase( SECTION, "String.fromCharCode(0x003B)", ";", String.fromCharCode(0x003B) ); +new TestCase( SECTION, "String.fromCharCode(0x003C)", "<", String.fromCharCode(0x003C) ); +new TestCase( SECTION, "String.fromCharCode(0x003D)", "=", String.fromCharCode(0x003D) ); +new TestCase( SECTION, "String.fromCharCode(0x003E)", ">", String.fromCharCode(0x003E) ); +new TestCase( SECTION, "String.fromCharCode(0x003F)", "?", String.fromCharCode(0x003F) ); + +new TestCase( SECTION, "String.fromCharCode(0x0040)", "@", String.fromCharCode(0x0040) ); +new TestCase( SECTION, "String.fromCharCode(0x0041)", "A", String.fromCharCode(0x0041) ); +new TestCase( SECTION, "String.fromCharCode(0x0042)", "B", String.fromCharCode(0x0042) ); +new TestCase( SECTION, "String.fromCharCode(0x0043)", "C", String.fromCharCode(0x0043) ); +new TestCase( SECTION, "String.fromCharCode(0x0044)", "D", String.fromCharCode(0x0044) ); +new TestCase( SECTION, "String.fromCharCode(0x0045)", "E", String.fromCharCode(0x0045) ); +new TestCase( SECTION, "String.fromCharCode(0x0046)", "F", String.fromCharCode(0x0046) ); +new TestCase( SECTION, "String.fromCharCode(0x0047)", "G", String.fromCharCode(0x0047) ); +new TestCase( SECTION, "String.fromCharCode(0x0048)", "H", String.fromCharCode(0x0048) ); +new TestCase( SECTION, "String.fromCharCode(0x0049)", "I", String.fromCharCode(0x0049) ); +new TestCase( SECTION, "String.fromCharCode(0x004A)", "J", String.fromCharCode(0x004A) ); +new TestCase( SECTION, "String.fromCharCode(0x004B)", "K", String.fromCharCode(0x004B) ); +new TestCase( SECTION, "String.fromCharCode(0x004C)", "L", String.fromCharCode(0x004C) ); +new TestCase( SECTION, "String.fromCharCode(0x004D)", "M", String.fromCharCode(0x004D) ); +new TestCase( SECTION, "String.fromCharCode(0x004E)", "N", String.fromCharCode(0x004E) ); +new TestCase( SECTION, "String.fromCharCode(0x004F)", "O", String.fromCharCode(0x004F) ); + +new TestCase( SECTION, "String.fromCharCode(0x0040)", "@", String.fromCharCode(0x0040) ); +new TestCase( SECTION, "String.fromCharCode(0x0041)", "A", String.fromCharCode(0x0041) ); +new TestCase( SECTION, "String.fromCharCode(0x0042)", "B", String.fromCharCode(0x0042) ); +new TestCase( SECTION, "String.fromCharCode(0x0043)", "C", String.fromCharCode(0x0043) ); +new TestCase( SECTION, "String.fromCharCode(0x0044)", "D", String.fromCharCode(0x0044) ); +new TestCase( SECTION, "String.fromCharCode(0x0045)", "E", String.fromCharCode(0x0045) ); +new TestCase( SECTION, "String.fromCharCode(0x0046)", "F", String.fromCharCode(0x0046) ); +new TestCase( SECTION, "String.fromCharCode(0x0047)", "G", String.fromCharCode(0x0047) ); +new TestCase( SECTION, "String.fromCharCode(0x0048)", "H", String.fromCharCode(0x0048) ); +new TestCase( SECTION, "String.fromCharCode(0x0049)", "I", String.fromCharCode(0x0049) ); +new TestCase( SECTION, "String.fromCharCode(0x004A)", "J", String.fromCharCode(0x004A) ); +new TestCase( SECTION, "String.fromCharCode(0x004B)", "K", String.fromCharCode(0x004B) ); +new TestCase( SECTION, "String.fromCharCode(0x004C)", "L", String.fromCharCode(0x004C) ); +new TestCase( SECTION, "String.fromCharCode(0x004D)", "M", String.fromCharCode(0x004D) ); +new TestCase( SECTION, "String.fromCharCode(0x004E)", "N", String.fromCharCode(0x004E) ); +new TestCase( SECTION, "String.fromCharCode(0x004F)", "O", String.fromCharCode(0x004F) ); + +new TestCase( SECTION, "String.fromCharCode(0x0050)", "P", String.fromCharCode(0x0050) ); +new TestCase( SECTION, "String.fromCharCode(0x0051)", "Q", String.fromCharCode(0x0051) ); +new TestCase( SECTION, "String.fromCharCode(0x0052)", "R", String.fromCharCode(0x0052) ); +new TestCase( SECTION, "String.fromCharCode(0x0053)", "S", String.fromCharCode(0x0053) ); +new TestCase( SECTION, "String.fromCharCode(0x0054)", "T", String.fromCharCode(0x0054) ); +new TestCase( SECTION, "String.fromCharCode(0x0055)", "U", String.fromCharCode(0x0055) ); +new TestCase( SECTION, "String.fromCharCode(0x0056)", "V", String.fromCharCode(0x0056) ); +new TestCase( SECTION, "String.fromCharCode(0x0057)", "W", String.fromCharCode(0x0057) ); +new TestCase( SECTION, "String.fromCharCode(0x0058)", "X", String.fromCharCode(0x0058) ); +new TestCase( SECTION, "String.fromCharCode(0x0059)", "Y", String.fromCharCode(0x0059) ); +new TestCase( SECTION, "String.fromCharCode(0x005A)", "Z", String.fromCharCode(0x005A) ); +new TestCase( SECTION, "String.fromCharCode(0x005B)", "[", String.fromCharCode(0x005B) ); +new TestCase( SECTION, "String.fromCharCode(0x005C)", "\\", String.fromCharCode(0x005C) ); +new TestCase( SECTION, "String.fromCharCode(0x005D)", "]", String.fromCharCode(0x005D) ); +new TestCase( SECTION, "String.fromCharCode(0x005E)", "^", String.fromCharCode(0x005E) ); +new TestCase( SECTION, "String.fromCharCode(0x005F)", "_", String.fromCharCode(0x005F) ); + +new TestCase( SECTION, "String.fromCharCode(0x0060)", "`", String.fromCharCode(0x0060) ); +new TestCase( SECTION, "String.fromCharCode(0x0061)", "a", String.fromCharCode(0x0061) ); +new TestCase( SECTION, "String.fromCharCode(0x0062)", "b", String.fromCharCode(0x0062) ); +new TestCase( SECTION, "String.fromCharCode(0x0063)", "c", String.fromCharCode(0x0063) ); +new TestCase( SECTION, "String.fromCharCode(0x0064)", "d", String.fromCharCode(0x0064) ); +new TestCase( SECTION, "String.fromCharCode(0x0065)", "e", String.fromCharCode(0x0065) ); +new TestCase( SECTION, "String.fromCharCode(0x0066)", "f", String.fromCharCode(0x0066) ); +new TestCase( SECTION, "String.fromCharCode(0x0067)", "g", String.fromCharCode(0x0067) ); +new TestCase( SECTION, "String.fromCharCode(0x0068)", "h", String.fromCharCode(0x0068) ); +new TestCase( SECTION, "String.fromCharCode(0x0069)", "i", String.fromCharCode(0x0069) ); +new TestCase( SECTION, "String.fromCharCode(0x006A)", "j", String.fromCharCode(0x006A) ); +new TestCase( SECTION, "String.fromCharCode(0x006B)", "k", String.fromCharCode(0x006B) ); +new TestCase( SECTION, "String.fromCharCode(0x006C)", "l", String.fromCharCode(0x006C) ); +new TestCase( SECTION, "String.fromCharCode(0x006D)", "m", String.fromCharCode(0x006D) ); +new TestCase( SECTION, "String.fromCharCode(0x006E)", "n", String.fromCharCode(0x006E) ); +new TestCase( SECTION, "String.fromCharCode(0x006F)", "o", String.fromCharCode(0x006F) ); + +new TestCase( SECTION, "String.fromCharCode(0x0070)", "p", String.fromCharCode(0x0070) ); +new TestCase( SECTION, "String.fromCharCode(0x0071)", "q", String.fromCharCode(0x0071) ); +new TestCase( SECTION, "String.fromCharCode(0x0072)", "r", String.fromCharCode(0x0072) ); +new TestCase( SECTION, "String.fromCharCode(0x0073)", "s", String.fromCharCode(0x0073) ); +new TestCase( SECTION, "String.fromCharCode(0x0074)", "t", String.fromCharCode(0x0074) ); +new TestCase( SECTION, "String.fromCharCode(0x0075)", "u", String.fromCharCode(0x0075) ); +new TestCase( SECTION, "String.fromCharCode(0x0076)", "v", String.fromCharCode(0x0076) ); +new TestCase( SECTION, "String.fromCharCode(0x0077)", "w", String.fromCharCode(0x0077) ); +new TestCase( SECTION, "String.fromCharCode(0x0078)", "x", String.fromCharCode(0x0078) ); +new TestCase( SECTION, "String.fromCharCode(0x0079)", "y", String.fromCharCode(0x0079) ); +new TestCase( SECTION, "String.fromCharCode(0x007A)", "z", String.fromCharCode(0x007A) ); +new TestCase( SECTION, "String.fromCharCode(0x007B)", "{", String.fromCharCode(0x007B) ); +new TestCase( SECTION, "String.fromCharCode(0x007C)", "|", String.fromCharCode(0x007C) ); +new TestCase( SECTION, "String.fromCharCode(0x007D)", "}", String.fromCharCode(0x007D) ); +new TestCase( SECTION, "String.fromCharCode(0x007E)", "~", String.fromCharCode(0x007E) ); +// new TestCase( SECTION, "String.fromCharCode(0x0020, 0x007F)", "", String.fromCharCode(0x0040, 0x007F) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.2-2.js b/source/spidermonkey-tests/ecma/String/15.5.3.2-2.js new file mode 100644 index 00000000..624a418e --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.2-2.js @@ -0,0 +1,43 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.2-2.js + ECMA Section: 15.5.3.2 String.fromCharCode( char0, char1, ... ) + Description: Return a string value containing as many characters + as the number of arguments. Each argument specifies + one character of the resulting string, with the first + argument specifying the first character, and so on, + from left to right. An argument is converted to a + character by applying the operation ToUint16_t and + regarding the resulting 16bit integeras the Unicode + encoding of a character. If no arguments are supplied, + the result is the empty string. + + This tests String.fromCharCode with multiple arguments. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ + +var SECTION = "15.5.3.2-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.fromCharCode()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var MYSTRING = String.fromCharCode(eval(\"var args=''; for ( i = 0x0020; i < 0x007f; i++ ) { args += ( i == 0x007e ) ? i : i + ', '; } args;\")); MYSTRING", + " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~", + eval( "var MYSTRING = String.fromCharCode(" + eval("var args=''; for ( i = 0x0020; i < 0x007f; i++ ) { args += ( i == 0x007e ) ? i : i + ', '; } args;") +"); MYSTRING" )); + +new TestCase( SECTION, + "MYSTRING.length", + 0x007f - 0x0020, + MYSTRING.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.2-3.js b/source/spidermonkey-tests/ecma/String/15.5.3.2-3.js new file mode 100644 index 00000000..8a731236 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.2-3.js @@ -0,0 +1,87 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.2-1.js + ECMA Section: 15.5.3.2 String.fromCharCode( char0, char1, ... ) + Description: Return a string value containing as many characters + as the number of arguments. Each argument specifies + one character of the resulting string, with the first + argument specifying the first character, and so on, + from left to right. An argument is converted to a + character by applying the operation ToUint16_t and + regarding the resulting 16bit integeras the Unicode + encoding of a character. If no arguments are supplied, + the result is the empty string. + + This test covers Basic Latin (range U+0020 - U+007F) + + Author: christine@netscape.com + Date: 2 october 1997 +*/ + +var SECTION = "15.5.3.2-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.fromCharCode()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +for ( CHARCODE = 0; CHARCODE < 256; CHARCODE++ ) { + new TestCase( SECTION, + "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)", + ToUint16(CHARCODE), + (String.fromCharCode(CHARCODE)).charCodeAt(0) + ); +} +for ( CHARCODE = 256; CHARCODE < 65536; CHARCODE+=333 ) { + new TestCase( SECTION, + "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)", + ToUint16(CHARCODE), + (String.fromCharCode(CHARCODE)).charCodeAt(0) + ); +} +for ( CHARCODE = 65535; CHARCODE < 65538; CHARCODE++ ) { + new TestCase( SECTION, + "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)", + ToUint16(CHARCODE), + (String.fromCharCode(CHARCODE)).charCodeAt(0) + ); +} +for ( CHARCODE = Math.pow(2,32)-1; CHARCODE < Math.pow(2,32)+1; CHARCODE++ ) { + new TestCase( SECTION, + "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)", + ToUint16(CHARCODE), + (String.fromCharCode(CHARCODE)).charCodeAt(0) + ); +} +for ( CHARCODE = 0; CHARCODE > -65536; CHARCODE-=3333 ) { + new TestCase( SECTION, + "(String.fromCharCode(" + CHARCODE +")).charCodeAt(0)", + ToUint16(CHARCODE), + (String.fromCharCode(CHARCODE)).charCodeAt(0) + ); +} +new TestCase( SECTION, "(String.fromCharCode(65535)).charCodeAt(0)", 65535, (String.fromCharCode(65535)).charCodeAt(0) ); +new TestCase( SECTION, "(String.fromCharCode(65536)).charCodeAt(0)", 0, (String.fromCharCode(65536)).charCodeAt(0) ); +new TestCase( SECTION, "(String.fromCharCode(65537)).charCodeAt(0)", 1, (String.fromCharCode(65537)).charCodeAt(0) ); + +test(); + +function ToUint16( num ) { + num = Number( num ); + if ( isNaN( num ) || num == 0 || num == Number.POSITIVE_INFINITY || num == Number.NEGATIVE_INFINITY ) { + return 0; + } + + var sign = ( num < 0 ) ? -1 : 1; + + num = sign * Math.floor( Math.abs( num ) ); + num = num % Math.pow(2,16); + num = ( num > -65536 && num < 0) ? 65536 + num : num; + return num; +} + diff --git a/source/spidermonkey-tests/ecma/String/15.5.3.js b/source/spidermonkey-tests/ecma/String/15.5.3.js new file mode 100644 index 00000000..097f15b8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.3.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.1.js + ECMA Section: 15.5.3 Properties of the String Constructor + + Description: The value of the internal [[Prototype]] property of + the String constructor is the Function prototype + object. + + In addition to the internal [[Call]] and [[Construct]] + properties, the String constructor also has the length + property, as well as properties described in 15.5.3.1 + and 15.5.3.2. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.3"; +var VERSION = "ECMA_2"; +startTest(); +var passed = true; +writeHeaderToLog( SECTION + " Properties of the String Constructor" ); + +new TestCase( SECTION, "String.length", 1, String.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.1.js b/source/spidermonkey-tests/ecma/String/15.5.4.1.js new file mode 100644 index 00000000..4bc73fa8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.1.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.1.js + ECMA Section: 15.5.4.1 String.prototype.constructor + + Description: + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.5.4.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.constructor == String", true, String.prototype.constructor == String ); + +new TestCase( SECTION, "var STRING = new String.prototype.constructor('hi'); STRING.getClass = Object.prototype.toString; STRING.getClass()", + "[object String]", + eval("var STRING = new String.prototype.constructor('hi'); STRING.getClass = Object.prototype.toString; STRING.getClass()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.10-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.10-1.js new file mode 100644 index 00000000..5fc127ea --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.10-1.js @@ -0,0 +1,183 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.10-1.js + ECMA Section: 15.5.4.10 String.prototype.substring( start, end ) + Description: + + 15.5.4.10 String.prototype.substring(start, end) + + Returns a substring of the result of converting this object to a string, + starting from character position start and running to character position + end of the string. The result is a string value, not a String object. + + If either argument is NaN or negative, it is replaced with zero; if either + argument is larger than the length of the string, it is replaced with the + length of the string. + + If start is larger than end, they are swapped. + + When the substring method is called with two arguments start and end, the + following steps are taken: + + 1. Call ToString, giving it the this value as its argument. + 2. Call ToInteger(start). + 3. Call ToInteger (end). + 4. Compute the number of characters in Result(1). + 5. Compute min(max(Result(2), 0), Result(4)). + 6. Compute min(max(Result(3), 0), Result(4)). + 7. Compute min(Result(5), Result(6)). + 8. Compute max(Result(5), Result(6)). + 9. Return a string whose length is the difference between Result(8) and + Result(7), containing characters from Result(1), namely the characters + with indices Result(7) through Result(8)1, in ascending order. + + Note that the substring function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.10-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.substring( start, end )"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.substring.length", 2, String.prototype.substring.length ); +new TestCase( SECTION, "delete String.prototype.substring.length", false, delete String.prototype.substring.length ); +new TestCase( SECTION, "delete String.prototype.substring.length; String.prototype.substring.length", 2, eval("delete String.prototype.substring.length; String.prototype.substring.length") ); + +// test cases for when substring is called with no arguments. + +// this is a string object + +new TestCase( SECTION, + "var s = new String('this is a string object'); typeof s.substring()", + "string", + eval("var s = new String('this is a string object'); typeof s.substring()") ); + +new TestCase( SECTION, + "var s = new String(''); s.substring(1,0)", + "", + eval("var s = new String(''); s.substring(1,0)") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(true, false)", + "t", + eval("var s = new String('this is a string object'); s.substring(false, true)") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(NaN, Infinity)", + "this is a string object", + eval("var s = new String('this is a string object'); s.substring(NaN, Infinity)") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(Infinity, NaN)", + "this is a string object", + eval("var s = new String('this is a string object'); s.substring(Infinity, NaN)") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(Infinity, Infinity)", + "", + eval("var s = new String('this is a string object'); s.substring(Infinity, Infinity)") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(-0.01, 0)", + "", + eval("var s = new String('this is a string object'); s.substring(-0.01,0)") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(s.length, s.length)", + "", + eval("var s = new String('this is a string object'); s.substring(s.length, s.length)") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(s.length+1, 0)", + "this is a string object", + eval("var s = new String('this is a string object'); s.substring(s.length+1, 0)") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)", + "", + eval("var s = new String('this is a string object'); s.substring(-Infinity, -Infinity)") ); + +// this is not a String object, start is not an integer + + +new TestCase( SECTION, + "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)", + "1,2,3,4,5", + eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(Infinity,-Infinity)") ); + +new TestCase( SECTION, + "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)", + "1", + eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true, false)") ); + +new TestCase( SECTION, + "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')", + "3", + eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4', '5')") ); + + +// this is an object object +new TestCase( SECTION, + "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)", + "[object ", + eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,0)") ); + +new TestCase( SECTION, + "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8,obj.toString().length)", + "Object]", + eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8, obj.toString().length)") ); + +// this is a function object +new TestCase( SECTION, + "var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8, Infinity)", + "Function]", + eval("var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8,Infinity)") ); +// this is a number object +new TestCase( SECTION, + "var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)", + "NaN", + eval("var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(Infinity, NaN)") ); + +// this is the Math object +new TestCase( SECTION, + "var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)", + "[ob", + eval("var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI, -10)") ); + +// this is a Boolean object + +new TestCase( SECTION, + "var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))", + "f", + eval("var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array(), new Boolean(1))") ); + +// this is a user defined object + +new TestCase( SECTION, + "var obj = new MyObject( void 0 ); obj.substring(0, 100)", + "undefined", + eval( "var obj = new MyObject( void 0 ); obj.substring(0,100)") ); + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.11-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.11-1.js new file mode 100644 index 00000000..94006a6a --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.11-1.js @@ -0,0 +1,484 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.11-1.js + ECMA Section: 15.5.4.11 String.prototype.toLowerCase() + Description: + + Returns a string equal in length to the length of the result of converting + this object to a string. The result is a string value, not a String object. + + Every character of the result is equal to the corresponding character of the + string, unless that character has a Unicode 2.0 uppercase equivalent, in which + case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case + mapping shall be used, which does not depend on implementation or locale.) + + Note that the toLowerCase function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.11-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toLowerCase()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.toLowerCase.length", 0, String.prototype.toLowerCase.length ); +new TestCase( SECTION, "delete String.prototype.toLowerCase.length", false, delete String.prototype.toLowerCase.length ); +new TestCase( SECTION, "delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length", 0, eval("delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length") ); + +// Basic Latin, Latin-1 Supplement, Latin Extended A +for ( var i = 0; i <= 0x017f; i++ ) { + var U = new Unicode(i); +/* + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()", + String.fromCharCode(U.lower), + eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") ); +*/ + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)", + U.lower, + eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") ); + +} + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} +function Unicode( c ) { + u = GetUnicodeValues( c ); + this.upper = u[0]; + this.lower = u[1] + return this; +} +function GetUnicodeValues( c ) { + u = new Array(); + + u[0] = c; + u[1] = c; + + // upper case Basic Latin + + if ( c >= 0x0041 && c <= 0x005A) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Basic Latin + if ( c >= 0x0061 && c <= 0x007a ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // upper case Latin-1 Supplement + if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Latin-1 Supplement + if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) { + u[0] = c - 32; + u[1] = c; + return u; + } + if ( c == 0x00FF ) { + u[0] = 0x0178; + u[1] = c; + return u; + } + // Latin Extended A + if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) { + // special case for capital I + if ( c == 0x0130 ) { + u[0] = c; + u[1] = 0x0069; + return u; + } + if ( c == 0x0131 ) { + u[0] = 0x0049; + u[1] = c; + return u; + } + + if ( c % 2 == 0 ) { + // if it's even, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's odd, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x0178 ) { + u[0] = c; + u[1] = 0x00FF; + return u; + } + + if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) { + if ( c % 2 == 1 ) { + // if it's odd, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's even, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x017F ) { + u[0] = 0x0053; + u[1] = c; + } + + // Latin Extended B + // need to improve this set + + if ( c >= 0x0200 && c <= 0x0217 ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c+1; + } else { + u[0] = c-1; + u[1] = c; + } + return u; + } + + // Latin Extended Additional + // Range: U+1E00 to U+1EFF + // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html + + // Spacing Modifier Leters + // Range: U+02B0 to U+02FF + + // Combining Diacritical Marks + // Range: U+0300 to U+036F + + // skip Greek for now + // Greek + // Range: U+0370 to U+03FF + + // Cyrillic + // Range: U+0400 to U+04FF + + if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) { + u[0] = c; + u[1] = c + 80; + return u; + } + + + if ( c >= 0x0410 && c <= 0x042F ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0x0430 && c<= 0x044F ) { + u[0] = c - 32; + u[1] = c; + return u; + + } + if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) { + u[0] = c -80; + u[1] = c; + return u; + } + + if ( c >= 0x0460 && c <= 0x047F ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c +1; + } else { + u[0] = c - 1; + u[1] = c; + } + return u; + } + + // Armenian + // Range: U+0530 to U+058F + if ( c >= 0x0531 && c <= 0x0556 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x0561 && c < 0x0587 ) { + u[0] = c - 48; + u[1] = c; + return u; + } + + // Hebrew + // Range: U+0590 to U+05FF + + + // Arabic + // Range: U+0600 to U+06FF + + // Devanagari + // Range: U+0900 to U+097F + + + // Bengali + // Range: U+0980 to U+09FF + + + // Gurmukhi + // Range: U+0A00 to U+0A7F + + + // Gujarati + // Range: U+0A80 to U+0AFF + + + // Oriya + // Range: U+0B00 to U+0B7F + // no capital / lower case + + + // Tamil + // Range: U+0B80 to U+0BFF + // no capital / lower case + + + // Telugu + // Range: U+0C00 to U+0C7F + // no capital / lower case + + + // Kannada + // Range: U+0C80 to U+0CFF + // no capital / lower case + + + // Malayalam + // Range: U+0D00 to U+0D7F + + // Thai + // Range: U+0E00 to U+0E7F + + + // Lao + // Range: U+0E80 to U+0EFF + + + // Tibetan + // Range: U+0F00 to U+0FBF + + // Georgian + // Range: U+10A0 to U+10F0 + if ( c >= 0x10A0 && c <= 0x10C5 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x10D0 && c <= 0x10F5 ) { + u[0] = c; + u[1] = c; + return u; + } + + // Hangul Jamo + // Range: U+1100 to U+11FF + + // Greek Extended + // Range: U+1F00 to U+1FFF + // skip for now + + + // General Punctuation + // Range: U+2000 to U+206F + + // Superscripts and Subscripts + // Range: U+2070 to U+209F + + // Currency Symbols + // Range: U+20A0 to U+20CF + + + // Combining Diacritical Marks for Symbols + // Range: U+20D0 to U+20FF + // skip for now + + + // Number Forms + // Range: U+2150 to U+218F + // skip for now + + + // Arrows + // Range: U+2190 to U+21FF + + // Mathematical Operators + // Range: U+2200 to U+22FF + + // Miscellaneous Technical + // Range: U+2300 to U+23FF + + // Control Pictures + // Range: U+2400 to U+243F + + // Optical Character Recognition + // Range: U+2440 to U+245F + + // Enclosed Alphanumerics + // Range: U+2460 to U+24FF + + // Box Drawing + // Range: U+2500 to U+257F + + // Block Elements + // Range: U+2580 to U+259F + + // Geometric Shapes + // Range: U+25A0 to U+25FF + + // Miscellaneous Symbols + // Range: U+2600 to U+26FF + + // Dingbats + // Range: U+2700 to U+27BF + + // CJK Symbols and Punctuation + // Range: U+3000 to U+303F + + // Hiragana + // Range: U+3040 to U+309F + + // Katakana + // Range: U+30A0 to U+30FF + + // Bopomofo + // Range: U+3100 to U+312F + + // Hangul Compatibility Jamo + // Range: U+3130 to U+318F + + // Kanbun + // Range: U+3190 to U+319F + + + // Enclosed CJK Letters and Months + // Range: U+3200 to U+32FF + + // CJK Compatibility + // Range: U+3300 to U+33FF + + // Hangul Syllables + // Range: U+AC00 to U+D7A3 + + // High Surrogates + // Range: U+D800 to U+DB7F + + // Private Use High Surrogates + // Range: U+DB80 to U+DBFF + + // Low Surrogates + // Range: U+DC00 to U+DFFF + + // Private Use Area + // Range: U+E000 to U+F8FF + + // CJK Compatibility Ideographs + // Range: U+F900 to U+FAFF + + // Alphabetic Presentation Forms + // Range: U+FB00 to U+FB4F + + // Arabic Presentation Forms-A + // Range: U+FB50 to U+FDFF + + // Combining Half Marks + // Range: U+FE20 to U+FE2F + + // CJK Compatibility Forms + // Range: U+FE30 to U+FE4F + + // Small Form Variants + // Range: U+FE50 to U+FE6F + + // Arabic Presentation Forms-B + // Range: U+FE70 to U+FEFF + + // Halfwidth and Fullwidth Forms + // Range: U+FF00 to U+FFEF + + if ( c >= 0xFF21 && c <= 0xFF3A ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0xFF41 && c <= 0xFF5A ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // Specials + // Range: U+FFF0 to U+FFFF + + return u; +} + +function DecimalToHexString( n ) { + n = Number( n ); + var h = "0x"; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.11-3.js b/source/spidermonkey-tests/ecma/String/15.5.4.11-3.js new file mode 100644 index 00000000..d7fe9e02 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.11-3.js @@ -0,0 +1,480 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.11-2.js + ECMA Section: 15.5.4.11 String.prototype.toLowerCase() + Description: + + Returns a string equal in length to the length of the result of converting + this object to a string. The result is a string value, not a String object. + + Every character of the result is equal to the corresponding character of the + string, unless that character has a Unicode 2.0 uppercase equivalent, in which + case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case + mapping shall be used, which does not depend on implementation or locale.) + + Note that the toLowerCase function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.11-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toLowerCase()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Halfwidth and Fullwidth Forms +// Range: U+FF00 to U+FFEF +for ( var i = 0xFF00; i <= 0xFFEF; i++ ) { + var U = new Unicode(i); +/* + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()", + String.fromCharCode(U.lower), + eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") ); +*/ + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)", + U.lower, + eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") ); +} + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} +function Unicode( c ) { + u = GetUnicodeValues( c ); + this.upper = u[0]; + this.lower = u[1] + return this; +} +function GetUnicodeValues( c ) { + u = new Array(); + + u[0] = c; + u[1] = c; + + // upper case Basic Latin + + if ( c >= 0x0041 && c <= 0x005A) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Basic Latin + if ( c >= 0x0061 && c <= 0x007a ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // upper case Latin-1 Supplement + if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Latin-1 Supplement + if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) { + u[0] = c - 32; + u[1] = c; + return u; + } + if ( c == 0x00FF ) { + u[0] = 0x0178; + u[1] = c; + return u; + } + // Latin Extended A + if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) { + // special case for capital I + if ( c == 0x0130 ) { + u[0] = c; + u[1] = 0x0069; + return u; + } + if ( c == 0x0131 ) { + u[0] = 0x0049; + u[1] = c; + return u; + } + + if ( c % 2 == 0 ) { + // if it's even, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's odd, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x0178 ) { + u[0] = c; + u[1] = 0x00FF; + return u; + } + + if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) { + if ( c % 2 == 1 ) { + // if it's odd, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's even, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x017F ) { + u[0] = 0x0053; + u[1] = c; + } + + // Latin Extended B + // need to improve this set + + if ( c >= 0x0200 && c <= 0x0217 ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c+1; + } else { + u[0] = c-1; + u[1] = c; + } + return u; + } + + // Latin Extended Additional + // Range: U+1E00 to U+1EFF + // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html + + // Spacing Modifier Leters + // Range: U+02B0 to U+02FF + + // Combining Diacritical Marks + // Range: U+0300 to U+036F + + // skip Greek for now + // Greek + // Range: U+0370 to U+03FF + + // Cyrillic + // Range: U+0400 to U+04FF + + if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) { + u[0] = c; + u[1] = c + 80; + return u; + } + + + if ( c >= 0x0410 && c <= 0x042F ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0x0430 && c<= 0x044F ) { + u[0] = c - 32; + u[1] = c; + return u; + + } + if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) { + u[0] = c -80; + u[1] = c; + return u; + } + + if ( c >= 0x0460 && c <= 0x047F ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c +1; + } else { + u[0] = c - 1; + u[1] = c; + } + return u; + } + + // Armenian + // Range: U+0530 to U+058F + if ( c >= 0x0531 && c <= 0x0556 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x0561 && c < 0x0587 ) { + u[0] = c - 48; + u[1] = c; + return u; + } + + // Hebrew + // Range: U+0590 to U+05FF + + + // Arabic + // Range: U+0600 to U+06FF + + // Devanagari + // Range: U+0900 to U+097F + + + // Bengali + // Range: U+0980 to U+09FF + + + // Gurmukhi + // Range: U+0A00 to U+0A7F + + + // Gujarati + // Range: U+0A80 to U+0AFF + + + // Oriya + // Range: U+0B00 to U+0B7F + // no capital / lower case + + + // Tamil + // Range: U+0B80 to U+0BFF + // no capital / lower case + + + // Telugu + // Range: U+0C00 to U+0C7F + // no capital / lower case + + + // Kannada + // Range: U+0C80 to U+0CFF + // no capital / lower case + + + // Malayalam + // Range: U+0D00 to U+0D7F + + // Thai + // Range: U+0E00 to U+0E7F + + + // Lao + // Range: U+0E80 to U+0EFF + + + // Tibetan + // Range: U+0F00 to U+0FBF + + // Georgian + // Range: U+10A0 to U+10F0 + if ( c >= 0x10A0 && c <= 0x10C5 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x10D0 && c <= 0x10F5 ) { + u[0] = c; + u[1] = c; + return u; + } + + // Hangul Jamo + // Range: U+1100 to U+11FF + + // Greek Extended + // Range: U+1F00 to U+1FFF + // skip for now + + + // General Punctuation + // Range: U+2000 to U+206F + + // Superscripts and Subscripts + // Range: U+2070 to U+209F + + // Currency Symbols + // Range: U+20A0 to U+20CF + + + // Combining Diacritical Marks for Symbols + // Range: U+20D0 to U+20FF + // skip for now + + + // Number Forms + // Range: U+2150 to U+218F + // skip for now + + + // Arrows + // Range: U+2190 to U+21FF + + // Mathematical Operators + // Range: U+2200 to U+22FF + + // Miscellaneous Technical + // Range: U+2300 to U+23FF + + // Control Pictures + // Range: U+2400 to U+243F + + // Optical Character Recognition + // Range: U+2440 to U+245F + + // Enclosed Alphanumerics + // Range: U+2460 to U+24FF + + // Box Drawing + // Range: U+2500 to U+257F + + // Block Elements + // Range: U+2580 to U+259F + + // Geometric Shapes + // Range: U+25A0 to U+25FF + + // Miscellaneous Symbols + // Range: U+2600 to U+26FF + + // Dingbats + // Range: U+2700 to U+27BF + + // CJK Symbols and Punctuation + // Range: U+3000 to U+303F + + // Hiragana + // Range: U+3040 to U+309F + + // Katakana + // Range: U+30A0 to U+30FF + + // Bopomofo + // Range: U+3100 to U+312F + + // Hangul Compatibility Jamo + // Range: U+3130 to U+318F + + // Kanbun + // Range: U+3190 to U+319F + + + // Enclosed CJK Letters and Months + // Range: U+3200 to U+32FF + + // CJK Compatibility + // Range: U+3300 to U+33FF + + // Hangul Syllables + // Range: U+AC00 to U+D7A3 + + // High Surrogates + // Range: U+D800 to U+DB7F + + // Private Use High Surrogates + // Range: U+DB80 to U+DBFF + + // Low Surrogates + // Range: U+DC00 to U+DFFF + + // Private Use Area + // Range: U+E000 to U+F8FF + + // CJK Compatibility Ideographs + // Range: U+F900 to U+FAFF + + // Alphabetic Presentation Forms + // Range: U+FB00 to U+FB4F + + // Arabic Presentation Forms-A + // Range: U+FB50 to U+FDFF + + // Combining Half Marks + // Range: U+FE20 to U+FE2F + + // CJK Compatibility Forms + // Range: U+FE30 to U+FE4F + + // Small Form Variants + // Range: U+FE50 to U+FE6F + + // Arabic Presentation Forms-B + // Range: U+FE70 to U+FEFF + + // Halfwidth and Fullwidth Forms + // Range: U+FF00 to U+FFEF + + if ( c >= 0xFF21 && c <= 0xFF3A ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0xFF41 && c <= 0xFF5A ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // Specials + // Range: U+FFF0 to U+FFFF + + return u; +} + +function DecimalToHexString( n ) { + n = Number( n ); + var h = "0x"; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.11-4.js b/source/spidermonkey-tests/ecma/String/15.5.4.11-4.js new file mode 100644 index 00000000..f51116ca --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.11-4.js @@ -0,0 +1,473 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.11-2.js + ECMA Section: 15.5.4.11 String.prototype.toLowerCase() + Description: + + Returns a string equal in length to the length of the result of converting + this object to a string. The result is a string value, not a String object. + + Every character of the result is equal to the corresponding character of the + string, unless that character has a Unicode 2.0 uppercase equivalent, in which + case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case + mapping shall be used, which does not depend on implementation or locale.) + + Note that the toLowerCase function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.11-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toLowerCase()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Hiragana (no upper / lower case) +// Range: U+3040 to U+309F + +for ( var i = 0x3040; i <= 0x309F; i++ ) { + var U = new Unicode( i ); +/* + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()", + String.fromCharCode(U.lower), + eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") ); +*/ + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)", + U.lower, + eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") ); +} + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} +function Unicode( c ) { + this.upper = c; + this.lower = c; + + // upper case Basic Latin + + if ( c >= 0x0041 && c <= 0x005A) { + this.upper = c; + this.lower = c + 32; + return this; + } + + // lower case Basic Latin + if ( c >= 0x0061 && c <= 0x007a ) { + this.upper = c - 32; + this.lower = c; + return this; + } + + // upper case Latin-1 Supplement + if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) { + this.upper = c; + this.lower = c + 32; + return this; + } + + // lower case Latin-1 Supplement + if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) { + this.upper = c - 32; + this.lower = c; + return this; + } + if ( c == 0x00FF ) { + this.upper = 0x0178; + this.lower = c; + return this; + } + // Latin Extended A + if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) { + // special case for capital I + if ( c == 0x0130 ) { + this.upper = c; + this.lower = 0x0069; + return this; + } + if ( c == 0x0131 ) { + this.upper = 0x0049; + this.lower = c; + return this; + } + + if ( c % 2 == 0 ) { + // if it's even, it's a capital and the lower case is c +1 + this.upper = c; + this.lower = c+1; + } else { + // if it's odd, it's a lower case and upper case is c-1 + this.upper = c-1; + this.lower = c; + } + return this; + } + if ( c == 0x0178 ) { + this.upper = c; + this.lower = 0x00FF; + return this; + } + + if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) { + if ( c % 2 == 1 ) { + // if it's odd, it's a capital and the lower case is c +1 + this.upper = c; + this.lower = c+1; + } else { + // if it's even, it's a lower case and upper case is c-1 + this.upper = c-1; + this.lower = c; + } + return this; + } + if ( c == 0x017F ) { + this.upper = 0x0053; + this.lower = c; + } + + // Latin Extended B + // need to improve this set + + if ( c >= 0x0200 && c <= 0x0217 ) { + if ( c % 2 == 0 ) { + this.upper = c; + this.lower = c+1; + } else { + this.upper = c-1; + this.lower = c; + } + return this; + } + + // Latin Extended Additional + // Range: U+1E00 to U+1EFF + // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html + + // Spacing Modifier Leters + // Range: U+02B0 to U+02FF + + // Combining Diacritical Marks + // Range: U+0300 to U+036F + + // skip Greek for now + // Greek + // Range: U+0370 to U+03FF + + // Cyrillic + // Range: U+0400 to U+04FF + + if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) { + this.upper = c; + this.lower = c + 80; + return this; + } + + + if ( c >= 0x0410 && c <= 0x042F ) { + this.upper = c; + this.lower = c + 32; + return this; + } + + if ( c >= 0x0430 && c<= 0x044F ) { + this.upper = c - 32; + this.lower = c; + return this; + + } + if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) { + this.upper = c -80; + this.lower = c; + return this; + } + + if ( c >= 0x0460 && c <= 0x047F ) { + if ( c % 2 == 0 ) { + this.upper = c; + this.lower = c +1; + } else { + this.upper = c - 1; + this.lower = c; + } + return this; + } + + // Armenian + // Range: U+0530 to U+058F + if ( c >= 0x0531 && c <= 0x0556 ) { + this.upper = c; + this.lower = c + 48; + return this; + } + if ( c >= 0x0561 && c < 0x0587 ) { + this.upper = c - 48; + this.lower = c; + return this; + } + + // Hebrew + // Range: U+0590 to U+05FF + + + // Arabic + // Range: U+0600 to U+06FF + + // Devanagari + // Range: U+0900 to U+097F + + + // Bengali + // Range: U+0980 to U+09FF + + + // Gurmukhi + // Range: U+0A00 to U+0A7F + + + // Gujarati + // Range: U+0A80 to U+0AFF + + + // Oriya + // Range: U+0B00 to U+0B7F + // no capital / lower case + + + // Tamil + // Range: U+0B80 to U+0BFF + // no capital / lower case + + + // Telugu + // Range: U+0C00 to U+0C7F + // no capital / lower case + + + // Kannada + // Range: U+0C80 to U+0CFF + // no capital / lower case + + + // Malayalam + // Range: U+0D00 to U+0D7F + + // Thai + // Range: U+0E00 to U+0E7F + + + // Lao + // Range: U+0E80 to U+0EFF + + + // Tibetan + // Range: U+0F00 to U+0FBF + + // Georgian + // Range: U+10A0 to U+10F0 + if ( c >= 0x10A0 && c <= 0x10C5 ) { + this.upper = c; + this.lower = c + 48; + return this; + } + if ( c >= 0x10D0 && c <= 0x10F5 ) { + this.upper = c; + this.lower = c; + return this; + } + + // Hangul Jamo + // Range: U+1100 to U+11FF + + // Greek Extended + // Range: U+1F00 to U+1FFF + // skip for now + + + // General Punctuation + // Range: U+2000 to U+206F + + // Superscripts and Subscripts + // Range: U+2070 to U+209F + + // Currency Symbols + // Range: U+20A0 to U+20CF + + + // Combining Diacritical Marks for Symbols + // Range: U+20D0 to U+20FF + // skip for now + + + // Number Forms + // Range: U+2150 to U+218F + // skip for now + + + // Arrows + // Range: U+2190 to U+21FF + + // Mathematical Operators + // Range: U+2200 to U+22FF + + // Miscellaneous Technical + // Range: U+2300 to U+23FF + + // Control Pictures + // Range: U+2400 to U+243F + + // Optical Character Recognition + // Range: U+2440 to U+245F + + // Enclosed Alphanumerics + // Range: U+2460 to U+24FF + + // Box Drawing + // Range: U+2500 to U+257F + + // Block Elements + // Range: U+2580 to U+259F + + // Geometric Shapes + // Range: U+25A0 to U+25FF + + // Miscellaneous Symbols + // Range: U+2600 to U+26FF + + // Dingbats + // Range: U+2700 to U+27BF + + // CJK Symbols and Punctuation + // Range: U+3000 to U+303F + + // Hiragana + // Range: U+3040 to U+309F + + // Katakana + // Range: U+30A0 to U+30FF + + // Bopomofo + // Range: U+3100 to U+312F + + // Hangul Compatibility Jamo + // Range: U+3130 to U+318F + + // Kanbun + // Range: U+3190 to U+319F + + + // Enclosed CJK Letters and Months + // Range: U+3200 to U+32FF + + // CJK Compatibility + // Range: U+3300 to U+33FF + + // Hangul Syllables + // Range: U+AC00 to U+D7A3 + + // High Surrogates + // Range: U+D800 to U+DB7F + + // Private Use High Surrogates + // Range: U+DB80 to U+DBFF + + // Low Surrogates + // Range: U+DC00 to U+DFFF + + // Private Use Area + // Range: U+E000 to U+F8FF + + // CJK Compatibility Ideographs + // Range: U+F900 to U+FAFF + + // Alphabetic Presentation Forms + // Range: U+FB00 to U+FB4F + + // Arabic Presentation Forms-A + // Range: U+FB50 to U+FDFF + + // Combining Half Marks + // Range: U+FE20 to U+FE2F + + // CJK Compatibility Forms + // Range: U+FE30 to U+FE4F + + // Small Form Variants + // Range: U+FE50 to U+FE6F + + // Arabic Presentation Forms-B + // Range: U+FE70 to U+FEFF + + // Halfwidth and Fullwidth Forms + // Range: U+FF00 to U+FFEF + + if ( c >= 0xFF21 && c <= 0xFF3A ) { + this.upper = c; + this.lower = c + 32; + return this; + } + + if ( c >= 0xFF41 && c <= 0xFF5A ) { + this.upper = c - 32; + this.lower = c; + return this; + } + + // Specials + // Range: U+FFF0 to U+FFFF + + return this; +} + +function DecimalToHexString( n ) { + n = Number( n ); + var h = "0x"; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.11-6.js b/source/spidermonkey-tests/ecma/String/15.5.4.11-6.js new file mode 100644 index 00000000..8432e76f --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.11-6.js @@ -0,0 +1,482 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.11-6.js + ECMA Section: 15.5.4.11 String.prototype.toLowerCase() + Description: + + Returns a string equal in length to the length of the result of converting + this object to a string. The result is a string value, not a String object. + + Every character of the result is equal to the corresponding character of the + string, unless that character has a Unicode 2.0 uppercase equivalent, in which + case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case + mapping shall be used, which does not depend on implementation or locale.) + + Note that the toLowerCase function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.11-6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toLowerCase()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Armenian +// Range: U+0530 to U+058F +for ( var i = 0x0530; i <= 0x058F; i++ ) { + + var U = new Unicode( i ); +/* + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()", + String.fromCharCode(U.lower), + eval("var s = new String( String.fromCharCode("+i+") ); s.toLowerCase()") ); +*/ + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toLowerCase().charCodeAt(0)", + U.lower, + eval("var s = new String( String.fromCharCode(i) ); s.toLowerCase().charCodeAt(0)") ); + +} + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} +function Unicode( c ) { + u = GetUnicodeValues( c ); + this.upper = u[0]; + this.lower = u[1] + return this; +} +function GetUnicodeValues( c ) { + u = new Array(); + + u[0] = c; + u[1] = c; + + // upper case Basic Latin + + if ( c >= 0x0041 && c <= 0x005A) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Basic Latin + if ( c >= 0x0061 && c <= 0x007a ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // upper case Latin-1 Supplement + if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Latin-1 Supplement + if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) { + u[0] = c - 32; + u[1] = c; + return u; + } + if ( c == 0x00FF ) { + u[0] = 0x0178; + u[1] = c; + return u; + } + // Latin Extended A + if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) { + // special case for capital I + if ( c == 0x0130 ) { + u[0] = c; + u[1] = 0x0069; + return u; + } + if ( c == 0x0131 ) { + u[0] = 0x0049; + u[1] = c; + return u; + } + + if ( c % 2 == 0 ) { + // if it's even, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's odd, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x0178 ) { + u[0] = c; + u[1] = 0x00FF; + return u; + } + + if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) { + if ( c % 2 == 1 ) { + // if it's odd, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's even, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x017F ) { + u[0] = 0x0053; + u[1] = c; + } + + // Latin Extended B + // need to improve this set + + if ( c >= 0x0200 && c <= 0x0217 ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c+1; + } else { + u[0] = c-1; + u[1] = c; + } + return u; + } + + // Latin Extended Additional + // Range: U+1E00 to U+1EFF + // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html + + // Spacing Modifier Leters + // Range: U+02B0 to U+02FF + + // Combining Diacritical Marks + // Range: U+0300 to U+036F + + // skip Greek for now + // Greek + // Range: U+0370 to U+03FF + + // Cyrillic + // Range: U+0400 to U+04FF + + if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) { + u[0] = c; + u[1] = c + 80; + return u; + } + + + if ( c >= 0x0410 && c <= 0x042F ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0x0430 && c<= 0x044F ) { + u[0] = c - 32; + u[1] = c; + return u; + + } + if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) { + u[0] = c -80; + u[1] = c; + return u; + } + + if ( c >= 0x0460 && c <= 0x047F ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c +1; + } else { + u[0] = c - 1; + u[1] = c; + } + return u; + } + + // Armenian + // Range: U+0530 to U+058F + if ( c >= 0x0531 && c <= 0x0556 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x0561 && c < 0x0587 ) { + u[0] = c - 48; + u[1] = c; + return u; + } + + // Hebrew + // Range: U+0590 to U+05FF + + + // Arabic + // Range: U+0600 to U+06FF + + // Devanagari + // Range: U+0900 to U+097F + + + // Bengali + // Range: U+0980 to U+09FF + + + // Gurmukhi + // Range: U+0A00 to U+0A7F + + + // Gujarati + // Range: U+0A80 to U+0AFF + + + // Oriya + // Range: U+0B00 to U+0B7F + // no capital / lower case + + + // Tamil + // Range: U+0B80 to U+0BFF + // no capital / lower case + + + // Telugu + // Range: U+0C00 to U+0C7F + // no capital / lower case + + + // Kannada + // Range: U+0C80 to U+0CFF + // no capital / lower case + + + // Malayalam + // Range: U+0D00 to U+0D7F + + // Thai + // Range: U+0E00 to U+0E7F + + + // Lao + // Range: U+0E80 to U+0EFF + + + // Tibetan + // Range: U+0F00 to U+0FBF + + // Georgian + // Range: U+10A0 to U+10F0 + if ( c >= 0x10A0 && c <= 0x10C5 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x10D0 && c <= 0x10F5 ) { + u[0] = c; + u[1] = c; + return u; + } + + // Hangul Jamo + // Range: U+1100 to U+11FF + + // Greek Extended + // Range: U+1F00 to U+1FFF + // skip for now + + + // General Punctuation + // Range: U+2000 to U+206F + + // Superscripts and Subscripts + // Range: U+2070 to U+209F + + // Currency Symbols + // Range: U+20A0 to U+20CF + + + // Combining Diacritical Marks for Symbols + // Range: U+20D0 to U+20FF + // skip for now + + + // Number Forms + // Range: U+2150 to U+218F + // skip for now + + + // Arrows + // Range: U+2190 to U+21FF + + // Mathematical Operators + // Range: U+2200 to U+22FF + + // Miscellaneous Technical + // Range: U+2300 to U+23FF + + // Control Pictures + // Range: U+2400 to U+243F + + // Optical Character Recognition + // Range: U+2440 to U+245F + + // Enclosed Alphanumerics + // Range: U+2460 to U+24FF + + // Box Drawing + // Range: U+2500 to U+257F + + // Block Elements + // Range: U+2580 to U+259F + + // Geometric Shapes + // Range: U+25A0 to U+25FF + + // Miscellaneous Symbols + // Range: U+2600 to U+26FF + + // Dingbats + // Range: U+2700 to U+27BF + + // CJK Symbols and Punctuation + // Range: U+3000 to U+303F + + // Hiragana + // Range: U+3040 to U+309F + + // Katakana + // Range: U+30A0 to U+30FF + + // Bopomofo + // Range: U+3100 to U+312F + + // Hangul Compatibility Jamo + // Range: U+3130 to U+318F + + // Kanbun + // Range: U+3190 to U+319F + + + // Enclosed CJK Letters and Months + // Range: U+3200 to U+32FF + + // CJK Compatibility + // Range: U+3300 to U+33FF + + // Hangul Syllables + // Range: U+AC00 to U+D7A3 + + // High Surrogates + // Range: U+D800 to U+DB7F + + // Private Use High Surrogates + // Range: U+DB80 to U+DBFF + + // Low Surrogates + // Range: U+DC00 to U+DFFF + + // Private Use Area + // Range: U+E000 to U+F8FF + + // CJK Compatibility Ideographs + // Range: U+F900 to U+FAFF + + // Alphabetic Presentation Forms + // Range: U+FB00 to U+FB4F + + // Arabic Presentation Forms-A + // Range: U+FB50 to U+FDFF + + // Combining Half Marks + // Range: U+FE20 to U+FE2F + + // CJK Compatibility Forms + // Range: U+FE30 to U+FE4F + + // Small Form Variants + // Range: U+FE50 to U+FE6F + + // Arabic Presentation Forms-B + // Range: U+FE70 to U+FEFF + + // Halfwidth and Fullwidth Forms + // Range: U+FF00 to U+FFEF + + if ( c >= 0xFF21 && c <= 0xFF3A ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0xFF41 && c <= 0xFF5A ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // Specials + // Range: U+FFF0 to U+FFFF + + return u; +} + +function DecimalToHexString( n ) { + n = Number( n ); + var h = "0x"; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.12-2.js b/source/spidermonkey-tests/ecma/String/15.5.4.12-2.js new file mode 100644 index 00000000..476a6786 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.12-2.js @@ -0,0 +1,484 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.12-2.js + ECMA Section: 15.5.4.12 String.prototype.toUpperCase() + Description: + + Returns a string equal in length to the length of the result of converting + this object to a string. The result is a string value, not a String object. + + Every character of the result is equal to the corresponding character of the + string, unless that character has a Unicode 2.0 uppercase equivalent, in which + case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case + mapping shall be used, which does not depend on implementation or locale.) + + Note that the toUpperCase function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.12-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toUpperCase()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = ""; +var EXPECT_STRING = ""; + +// basic latin test + +for ( var i = 0; i < 0x007A; i++ ) { + var u = new Unicode(i); + TEST_STRING += String.fromCharCode(i); + EXPECT_STRING += String.fromCharCode( u.upper ); +} + +// don't print out the value of the strings since they contain control +// characters that break the driver +var isEqual = EXPECT_STRING == (new String( TEST_STRING )).toUpperCase(); + +new TestCase( SECTION, + "isEqual", + true, + isEqual); +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} +function Unicode( c ) { + u = GetUnicodeValues( c ); + this.upper = u[0]; + this.lower = u[1] + return this; +} +function GetUnicodeValues( c ) { + u = new Array(); + + u[0] = c; + u[1] = c; + + // upper case Basic Latin + + if ( c >= 0x0041 && c <= 0x005A) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Basic Latin + if ( c >= 0x0061 && c <= 0x007a ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // upper case Latin-1 Supplement + if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Latin-1 Supplement + if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) { + u[0] = c - 32; + u[1] = c; + return u; + } + if ( c == 0x00FF ) { + u[0] = 0x0178; + u[1] = c; + return u; + } + // Latin Extended A + if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) { + // special case for capital I + if ( c == 0x0130 ) { + u[0] = c; + u[1] = 0x0069; + return u; + } + if ( c == 0x0131 ) { + u[0] = 0x0049; + u[1] = c; + return u; + } + + if ( c % 2 == 0 ) { + // if it's even, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's odd, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x0178 ) { + u[0] = c; + u[1] = 0x00FF; + return u; + } + + if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) { + if ( c % 2 == 1 ) { + // if it's odd, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's even, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x017F ) { + u[0] = 0x0053; + u[1] = c; + } + + // Latin Extended B + // need to improve this set + + if ( c >= 0x0200 && c <= 0x0217 ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c+1; + } else { + u[0] = c-1; + u[1] = c; + } + return u; + } + + // Latin Extended Additional + // Range: U+1E00 to U+1EFF + // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html + + // Spacing Modifier Leters + // Range: U+02B0 to U+02FF + + // Combining Diacritical Marks + // Range: U+0300 to U+036F + + // skip Greek for now + // Greek + // Range: U+0370 to U+03FF + + // Cyrillic + // Range: U+0400 to U+04FF + + if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) { + u[0] = c; + u[1] = c + 80; + return u; + } + + + if ( c >= 0x0410 && c <= 0x042F ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0x0430 && c<= 0x044F ) { + u[0] = c - 32; + u[1] = c; + return u; + + } + if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) { + u[0] = c -80; + u[1] = c; + return u; + } + + if ( c >= 0x0460 && c <= 0x047F ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c +1; + } else { + u[0] = c - 1; + u[1] = c; + } + return u; + } + + // Armenian + // Range: U+0530 to U+058F + if ( c >= 0x0531 && c <= 0x0556 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x0561 && c < 0x0587 ) { + u[0] = c - 48; + u[1] = c; + return u; + } + + // Hebrew + // Range: U+0590 to U+05FF + + + // Arabic + // Range: U+0600 to U+06FF + + // Devanagari + // Range: U+0900 to U+097F + + + // Bengali + // Range: U+0980 to U+09FF + + + // Gurmukhi + // Range: U+0A00 to U+0A7F + + + // Gujarati + // Range: U+0A80 to U+0AFF + + + // Oriya + // Range: U+0B00 to U+0B7F + // no capital / lower case + + + // Tamil + // Range: U+0B80 to U+0BFF + // no capital / lower case + + + // Telugu + // Range: U+0C00 to U+0C7F + // no capital / lower case + + + // Kannada + // Range: U+0C80 to U+0CFF + // no capital / lower case + + + // Malayalam + // Range: U+0D00 to U+0D7F + + // Thai + // Range: U+0E00 to U+0E7F + + + // Lao + // Range: U+0E80 to U+0EFF + + + // Tibetan + // Range: U+0F00 to U+0FBF + + // Georgian + // Range: U+10A0 to U+10F0 + if ( c >= 0x10A0 && c <= 0x10C5 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x10D0 && c <= 0x10F5 ) { + u[0] = c; + u[1] = c; + return u; + } + + // Hangul Jamo + // Range: U+1100 to U+11FF + + // Greek Extended + // Range: U+1F00 to U+1FFF + // skip for now + + + // General Punctuation + // Range: U+2000 to U+206F + + // Superscripts and Subscripts + // Range: U+2070 to U+209F + + // Currency Symbols + // Range: U+20A0 to U+20CF + + + // Combining Diacritical Marks for Symbols + // Range: U+20D0 to U+20FF + // skip for now + + + // Number Forms + // Range: U+2150 to U+218F + // skip for now + + + // Arrows + // Range: U+2190 to U+21FF + + // Mathematical Operators + // Range: U+2200 to U+22FF + + // Miscellaneous Technical + // Range: U+2300 to U+23FF + + // Control Pictures + // Range: U+2400 to U+243F + + // Optical Character Recognition + // Range: U+2440 to U+245F + + // Enclosed Alphanumerics + // Range: U+2460 to U+24FF + + // Box Drawing + // Range: U+2500 to U+257F + + // Block Elements + // Range: U+2580 to U+259F + + // Geometric Shapes + // Range: U+25A0 to U+25FF + + // Miscellaneous Symbols + // Range: U+2600 to U+26FF + + // Dingbats + // Range: U+2700 to U+27BF + + // CJK Symbols and Punctuation + // Range: U+3000 to U+303F + + // Hiragana + // Range: U+3040 to U+309F + + // Katakana + // Range: U+30A0 to U+30FF + + // Bopomofo + // Range: U+3100 to U+312F + + // Hangul Compatibility Jamo + // Range: U+3130 to U+318F + + // Kanbun + // Range: U+3190 to U+319F + + + // Enclosed CJK Letters and Months + // Range: U+3200 to U+32FF + + // CJK Compatibility + // Range: U+3300 to U+33FF + + // Hangul Syllables + // Range: U+AC00 to U+D7A3 + + // High Surrogates + // Range: U+D800 to U+DB7F + + // Private Use High Surrogates + // Range: U+DB80 to U+DBFF + + // Low Surrogates + // Range: U+DC00 to U+DFFF + + // Private Use Area + // Range: U+E000 to U+F8FF + + // CJK Compatibility Ideographs + // Range: U+F900 to U+FAFF + + // Alphabetic Presentation Forms + // Range: U+FB00 to U+FB4F + + // Arabic Presentation Forms-A + // Range: U+FB50 to U+FDFF + + // Combining Half Marks + // Range: U+FE20 to U+FE2F + + // CJK Compatibility Forms + // Range: U+FE30 to U+FE4F + + // Small Form Variants + // Range: U+FE50 to U+FE6F + + // Arabic Presentation Forms-B + // Range: U+FE70 to U+FEFF + + // Halfwidth and Fullwidth Forms + // Range: U+FF00 to U+FFEF + + if ( c >= 0xFF21 && c <= 0xFF3A ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0xFF41 && c <= 0xFF5A ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // Specials + // Range: U+FFF0 to U+FFFF + + return u; +} + +function DecimalToHexString( n ) { + n = Number( n ); + var h = "0x"; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} + diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.12-3.js b/source/spidermonkey-tests/ecma/String/15.5.4.12-3.js new file mode 100644 index 00000000..ea7a5d44 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.12-3.js @@ -0,0 +1,525 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.12-3.js + ECMA Section: 15.5.4.12 String.prototype.toUpperCase() + Description: + + Returns a string equal in length to the length of the result of converting + this object to a string. The result is a string value, not a String object. + + Every character of the result is equal to the corresponding character of the + string, unless that character has a Unicode 2.0 uppercase equivalent, in which + case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case + mapping shall be used, which does not depend on implementation or locale.) + + Note that the toUpperCase function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.12-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toUpperCase()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Georgian +// Range: U+10A0 to U+10FF +for ( var i = 0x10A0; i <= 0x10FF; i++ ) { + var U = new Unicode( i ); +/* + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()", + String.fromCharCode(U.upper), + eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") ); +*/ + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)", + U.upper, + eval("var s = new String( String.fromCharCode(i) ); s.toUpperCase().charCodeAt(0)") ); + +} + +// Halfwidth and Fullwidth Forms +// Range: U+FF00 to U+FFEF +for ( var i = 0xFF00; i <= 0xFFEF; i++ ) { + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()", + eval( "var u = new Unicode( i ); String.fromCharCode(u.upper)" ), + eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") ); + + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)", + eval( "var u = new Unicode( i ); u.upper" ), + eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)") ); +} + +// Hiragana (no upper / lower case) +// Range: U+3040 to U+309F + +for ( var i = 0x3040; i <= 0x309F; i++ ) { + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()", + eval( "var u = new Unicode( i ); String.fromCharCode(u.upper)" ), + eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") ); + + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)", + eval( "var u = new Unicode( i ); u.upper" ), + eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)") ); +} + + +/* + var TEST_STRING = ""; + var EXPECT_STRING = ""; + + // basic latin test + + for ( var i = 0; i < 0x007A; i++ ) { + var u = new Unicode(i); + TEST_STRING += String.fromCharCode(i); + EXPECT_STRING += String.fromCharCode( u.upper ); + } +*/ + + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} +function Unicode( c ) { + u = GetUnicodeValues( c ); + this.upper = u[0]; + this.lower = u[1] + return this; +} +function GetUnicodeValues( c ) { + u = new Array(); + + u[0] = c; + u[1] = c; + + // upper case Basic Latin + + if ( c >= 0x0041 && c <= 0x005A) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Basic Latin + if ( c >= 0x0061 && c <= 0x007a ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // upper case Latin-1 Supplement + if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Latin-1 Supplement + if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) { + u[0] = c - 32; + u[1] = c; + return u; + } + if ( c == 0x00FF ) { + u[0] = 0x0178; + u[1] = c; + return u; + } + // Latin Extended A + if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) { + // special case for capital I + if ( c == 0x0130 ) { + u[0] = c; + u[1] = 0x0069; + return u; + } + if ( c == 0x0131 ) { + u[0] = 0x0049; + u[1] = c; + return u; + } + + if ( c % 2 == 0 ) { + // if it's even, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's odd, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x0178 ) { + u[0] = c; + u[1] = 0x00FF; + return u; + } + + if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) { + if ( c % 2 == 1 ) { + // if it's odd, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's even, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x017F ) { + u[0] = 0x0053; + u[1] = c; + } + + // Latin Extended B + // need to improve this set + + if ( c >= 0x0200 && c <= 0x0217 ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c+1; + } else { + u[0] = c-1; + u[1] = c; + } + return u; + } + + // Latin Extended Additional + // Range: U+1E00 to U+1EFF + // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html + + // Spacing Modifier Leters + // Range: U+02B0 to U+02FF + + // Combining Diacritical Marks + // Range: U+0300 to U+036F + + // skip Greek for now + // Greek + // Range: U+0370 to U+03FF + + // Cyrillic + // Range: U+0400 to U+04FF + + if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) { + u[0] = c; + u[1] = c + 80; + return u; + } + + + if ( c >= 0x0410 && c <= 0x042F ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0x0430 && c<= 0x044F ) { + u[0] = c - 32; + u[1] = c; + return u; + + } + if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) { + u[0] = c -80; + u[1] = c; + return u; + } + + if ( c >= 0x0460 && c <= 0x047F ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c +1; + } else { + u[0] = c - 1; + u[1] = c; + } + return u; + } + + // Armenian + // Range: U+0530 to U+058F + if ( c >= 0x0531 && c <= 0x0556 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x0561 && c < 0x0587 ) { + u[0] = c - 48; + u[1] = c; + return u; + } + + // Hebrew + // Range: U+0590 to U+05FF + + + // Arabic + // Range: U+0600 to U+06FF + + // Devanagari + // Range: U+0900 to U+097F + + + // Bengali + // Range: U+0980 to U+09FF + + + // Gurmukhi + // Range: U+0A00 to U+0A7F + + + // Gujarati + // Range: U+0A80 to U+0AFF + + + // Oriya + // Range: U+0B00 to U+0B7F + // no capital / lower case + + + // Tamil + // Range: U+0B80 to U+0BFF + // no capital / lower case + + + // Telugu + // Range: U+0C00 to U+0C7F + // no capital / lower case + + + // Kannada + // Range: U+0C80 to U+0CFF + // no capital / lower case + + + // Malayalam + // Range: U+0D00 to U+0D7F + + // Thai + // Range: U+0E00 to U+0E7F + + + // Lao + // Range: U+0E80 to U+0EFF + + + // Tibetan + // Range: U+0F00 to U+0FBF + + // Georgian + // Range: U+10A0 to U+10F0 + if ( c >= 0x10A0 && c <= 0x10C5 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x10D0 && c <= 0x10F5 ) { + u[0] = c; + u[1] = c; + return u; + } + + // Hangul Jamo + // Range: U+1100 to U+11FF + + // Greek Extended + // Range: U+1F00 to U+1FFF + // skip for now + + + // General Punctuation + // Range: U+2000 to U+206F + + // Superscripts and Subscripts + // Range: U+2070 to U+209F + + // Currency Symbols + // Range: U+20A0 to U+20CF + + + // Combining Diacritical Marks for Symbols + // Range: U+20D0 to U+20FF + // skip for now + + + // Number Forms + // Range: U+2150 to U+218F + // skip for now + + + // Arrows + // Range: U+2190 to U+21FF + + // Mathematical Operators + // Range: U+2200 to U+22FF + + // Miscellaneous Technical + // Range: U+2300 to U+23FF + + // Control Pictures + // Range: U+2400 to U+243F + + // Optical Character Recognition + // Range: U+2440 to U+245F + + // Enclosed Alphanumerics + // Range: U+2460 to U+24FF + + // Box Drawing + // Range: U+2500 to U+257F + + // Block Elements + // Range: U+2580 to U+259F + + // Geometric Shapes + // Range: U+25A0 to U+25FF + + // Miscellaneous Symbols + // Range: U+2600 to U+26FF + + // Dingbats + // Range: U+2700 to U+27BF + + // CJK Symbols and Punctuation + // Range: U+3000 to U+303F + + // Hiragana + // Range: U+3040 to U+309F + + // Katakana + // Range: U+30A0 to U+30FF + + // Bopomofo + // Range: U+3100 to U+312F + + // Hangul Compatibility Jamo + // Range: U+3130 to U+318F + + // Kanbun + // Range: U+3190 to U+319F + + + // Enclosed CJK Letters and Months + // Range: U+3200 to U+32FF + + // CJK Compatibility + // Range: U+3300 to U+33FF + + // Hangul Syllables + // Range: U+AC00 to U+D7A3 + + // High Surrogates + // Range: U+D800 to U+DB7F + + // Private Use High Surrogates + // Range: U+DB80 to U+DBFF + + // Low Surrogates + // Range: U+DC00 to U+DFFF + + // Private Use Area + // Range: U+E000 to U+F8FF + + // CJK Compatibility Ideographs + // Range: U+F900 to U+FAFF + + // Alphabetic Presentation Forms + // Range: U+FB00 to U+FB4F + + // Arabic Presentation Forms-A + // Range: U+FB50 to U+FDFF + + // Combining Half Marks + // Range: U+FE20 to U+FE2F + + // CJK Compatibility Forms + // Range: U+FE30 to U+FE4F + + // Small Form Variants + // Range: U+FE50 to U+FE6F + + // Arabic Presentation Forms-B + // Range: U+FE70 to U+FEFF + + // Halfwidth and Fullwidth Forms + // Range: U+FF00 to U+FFEF + + if ( c >= 0xFF21 && c <= 0xFF3A ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0xFF41 && c <= 0xFF5A ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // Specials + // Range: U+FFF0 to U+FFFF + + return u; +} + +function DecimalToHexString( n ) { + n = Number( n ); + var h = "0x"; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.12-5.js b/source/spidermonkey-tests/ecma/String/15.5.4.12-5.js new file mode 100644 index 00000000..505fadd0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.12-5.js @@ -0,0 +1,481 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.12-1.js + ECMA Section: 15.5.4.12 String.prototype.toUpperCase() + Description: + + Returns a string equal in length to the length of the result of converting + this object to a string. The result is a string value, not a String object. + + Every character of the result is equal to the corresponding character of the + string, unless that character has a Unicode 2.0 uppercase equivalent, in which + case the uppercase equivalent is used instead. (The canonical Unicode 2.0 case + mapping shall be used, which does not depend on implementation or locale.) + + Note that the toUpperCase function is intentionally generic; it does not require + that its this value be a String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.12-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toUpperCase()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// Armenian +// Range: U+0530 to U+058F +for ( var i = 0x0530; i <= 0x058F; i++ ) { + var U = new Unicode( i ); +/* + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()", + String.fromCharCode(U.upper), + eval("var s = new String( String.fromCharCode("+i+") ); s.toUpperCase()") ); +*/ + new TestCase( SECTION, + "var s = new String( String.fromCharCode("+i+") ); s.toUpperCase().charCodeAt(0)", + U.upper, + eval("var s = new String( String.fromCharCode(i) ); s.toUpperCase().charCodeAt(0)") ); + +} + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} +function Unicode( c ) { + u = GetUnicodeValues( c ); + this.upper = u[0]; + this.lower = u[1] + return this; +} +function GetUnicodeValues( c ) { + u = new Array(); + + u[0] = c; + u[1] = c; + + // upper case Basic Latin + + if ( c >= 0x0041 && c <= 0x005A) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Basic Latin + if ( c >= 0x0061 && c <= 0x007a ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // upper case Latin-1 Supplement + if ( (c >= 0x00C0 && c <= 0x00D6) || (c >= 0x00D8 && c<=0x00DE) ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + // lower case Latin-1 Supplement + if ( (c >= 0x00E0 && c <= 0x00F6) || (c >= 0x00F8 && c <= 0x00FE) ) { + u[0] = c - 32; + u[1] = c; + return u; + } + if ( c == 0x00FF ) { + u[0] = 0x0178; + u[1] = c; + return u; + } + // Latin Extended A + if ( (c >= 0x0100 && c < 0x0138) || (c > 0x0149 && c < 0x0178) ) { + // special case for capital I + if ( c == 0x0130 ) { + u[0] = c; + u[1] = 0x0069; + return u; + } + if ( c == 0x0131 ) { + u[0] = 0x0049; + u[1] = c; + return u; + } + + if ( c % 2 == 0 ) { + // if it's even, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's odd, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x0178 ) { + u[0] = c; + u[1] = 0x00FF; + return u; + } + + if ( (c >= 0x0139 && c < 0x0149) || (c > 0x0178 && c < 0x017F) ) { + if ( c % 2 == 1 ) { + // if it's odd, it's a capital and the lower case is c +1 + u[0] = c; + u[1] = c+1; + } else { + // if it's even, it's a lower case and upper case is c-1 + u[0] = c-1; + u[1] = c; + } + return u; + } + if ( c == 0x017F ) { + u[0] = 0x0053; + u[1] = c; + } + + // Latin Extended B + // need to improve this set + + if ( c >= 0x0200 && c <= 0x0217 ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c+1; + } else { + u[0] = c-1; + u[1] = c; + } + return u; + } + + // Latin Extended Additional + // Range: U+1E00 to U+1EFF + // http://www.unicode.org/Unicode.charts/glyphless/U1E00.html + + // Spacing Modifier Leters + // Range: U+02B0 to U+02FF + + // Combining Diacritical Marks + // Range: U+0300 to U+036F + + // skip Greek for now + // Greek + // Range: U+0370 to U+03FF + + // Cyrillic + // Range: U+0400 to U+04FF + + if ( (c >= 0x0401 && c <= 0x040C) || ( c>= 0x040E && c <= 0x040F ) ) { + u[0] = c; + u[1] = c + 80; + return u; + } + + + if ( c >= 0x0410 && c <= 0x042F ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0x0430 && c<= 0x044F ) { + u[0] = c - 32; + u[1] = c; + return u; + + } + if ( (c >= 0x0451 && c <= 0x045C) || (c >=0x045E && c<= 0x045F) ) { + u[0] = c -80; + u[1] = c; + return u; + } + + if ( c >= 0x0460 && c <= 0x047F ) { + if ( c % 2 == 0 ) { + u[0] = c; + u[1] = c +1; + } else { + u[0] = c - 1; + u[1] = c; + } + return u; + } + + // Armenian + // Range: U+0530 to U+058F + if ( c >= 0x0531 && c <= 0x0556 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x0561 && c < 0x0587 ) { + u[0] = c - 48; + u[1] = c; + return u; + } + + // Hebrew + // Range: U+0590 to U+05FF + + + // Arabic + // Range: U+0600 to U+06FF + + // Devanagari + // Range: U+0900 to U+097F + + + // Bengali + // Range: U+0980 to U+09FF + + + // Gurmukhi + // Range: U+0A00 to U+0A7F + + + // Gujarati + // Range: U+0A80 to U+0AFF + + + // Oriya + // Range: U+0B00 to U+0B7F + // no capital / lower case + + + // Tamil + // Range: U+0B80 to U+0BFF + // no capital / lower case + + + // Telugu + // Range: U+0C00 to U+0C7F + // no capital / lower case + + + // Kannada + // Range: U+0C80 to U+0CFF + // no capital / lower case + + + // Malayalam + // Range: U+0D00 to U+0D7F + + // Thai + // Range: U+0E00 to U+0E7F + + + // Lao + // Range: U+0E80 to U+0EFF + + + // Tibetan + // Range: U+0F00 to U+0FBF + + // Georgian + // Range: U+10A0 to U+10F0 + if ( c >= 0x10A0 && c <= 0x10C5 ) { + u[0] = c; + u[1] = c + 48; + return u; + } + if ( c >= 0x10D0 && c <= 0x10F5 ) { + u[0] = c; + u[1] = c; + return u; + } + + // Hangul Jamo + // Range: U+1100 to U+11FF + + // Greek Extended + // Range: U+1F00 to U+1FFF + // skip for now + + + // General Punctuation + // Range: U+2000 to U+206F + + // Superscripts and Subscripts + // Range: U+2070 to U+209F + + // Currency Symbols + // Range: U+20A0 to U+20CF + + + // Combining Diacritical Marks for Symbols + // Range: U+20D0 to U+20FF + // skip for now + + + // Number Forms + // Range: U+2150 to U+218F + // skip for now + + + // Arrows + // Range: U+2190 to U+21FF + + // Mathematical Operators + // Range: U+2200 to U+22FF + + // Miscellaneous Technical + // Range: U+2300 to U+23FF + + // Control Pictures + // Range: U+2400 to U+243F + + // Optical Character Recognition + // Range: U+2440 to U+245F + + // Enclosed Alphanumerics + // Range: U+2460 to U+24FF + + // Box Drawing + // Range: U+2500 to U+257F + + // Block Elements + // Range: U+2580 to U+259F + + // Geometric Shapes + // Range: U+25A0 to U+25FF + + // Miscellaneous Symbols + // Range: U+2600 to U+26FF + + // Dingbats + // Range: U+2700 to U+27BF + + // CJK Symbols and Punctuation + // Range: U+3000 to U+303F + + // Hiragana + // Range: U+3040 to U+309F + + // Katakana + // Range: U+30A0 to U+30FF + + // Bopomofo + // Range: U+3100 to U+312F + + // Hangul Compatibility Jamo + // Range: U+3130 to U+318F + + // Kanbun + // Range: U+3190 to U+319F + + + // Enclosed CJK Letters and Months + // Range: U+3200 to U+32FF + + // CJK Compatibility + // Range: U+3300 to U+33FF + + // Hangul Syllables + // Range: U+AC00 to U+D7A3 + + // High Surrogates + // Range: U+D800 to U+DB7F + + // Private Use High Surrogates + // Range: U+DB80 to U+DBFF + + // Low Surrogates + // Range: U+DC00 to U+DFFF + + // Private Use Area + // Range: U+E000 to U+F8FF + + // CJK Compatibility Ideographs + // Range: U+F900 to U+FAFF + + // Alphabetic Presentation Forms + // Range: U+FB00 to U+FB4F + + // Arabic Presentation Forms-A + // Range: U+FB50 to U+FDFF + + // Combining Half Marks + // Range: U+FE20 to U+FE2F + + // CJK Compatibility Forms + // Range: U+FE30 to U+FE4F + + // Small Form Variants + // Range: U+FE50 to U+FE6F + + // Arabic Presentation Forms-B + // Range: U+FE70 to U+FEFF + + // Halfwidth and Fullwidth Forms + // Range: U+FF00 to U+FFEF + + if ( c >= 0xFF21 && c <= 0xFF3A ) { + u[0] = c; + u[1] = c + 32; + return u; + } + + if ( c >= 0xFF41 && c <= 0xFF5A ) { + u[0] = c - 32; + u[1] = c; + return u; + } + + // Specials + // Range: U+FFF0 to U+FFFF + + return u; +} + +function DecimalToHexString( n ) { + n = Number( n ); + var h = "0x"; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.2-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.2-1.js new file mode 100644 index 00000000..1dc7e118 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.2-1.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.2-1.js + ECMA Section: 15.5.4.2 String.prototype.toString() + + Description: Returns this string value. Note that, for a String + object, the toString() method happens to return the same + thing as the valueOf() method. + + The toString function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.4.2-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.toString()", "", String.prototype.toString() ); +new TestCase( SECTION, "(new String()).toString()", "", (new String()).toString() ); +new TestCase( SECTION, "(new String(\"\")).toString()", "", (new String("")).toString() ); +new TestCase( SECTION, "(new String( String() )).toString()","", (new String(String())).toString() ); +new TestCase( SECTION, "(new String( \"h e l l o\" )).toString()", "h e l l o", (new String("h e l l o")).toString() ); +new TestCase( SECTION, "(new String( 0 )).toString()", "0", (new String(0)).toString() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.2-2-n.js b/source/spidermonkey-tests/ecma/String/15.5.4.2-2-n.js new file mode 100644 index 00000000..61b26ca0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.2-2-n.js @@ -0,0 +1,39 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.2-2-n.js + ECMA Section: 15.5.4.2 String.prototype.toString() + + Description: Returns this string value. Note that, for a String + object, the toString() method happens to return the same + thing as the valueOf() method. + + The toString function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.4.2-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var tostr=String.prototype.toString; astring=new Number(); astring.toString = tostr; astring.toString()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var tostr=String.prototype.toString; astring=new Number(); astring.toString = tostr; astring.toString()", + "error", + eval("var tostr=String.prototype.toString; astring=new Number(); astring.toString = tostr; astring.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.2-3.js b/source/spidermonkey-tests/ecma/String/15.5.4.2-3.js new file mode 100644 index 00000000..3c28c8a3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.2-3.js @@ -0,0 +1,49 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.2-3.js + ECMA Section: 15.5.4.2 String.prototype.toString() + + Description: Returns this string value. Note that, for a String + object, the toString() method happens to return the same + thing as the valueOf() method. + + The toString function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + + +var SECTION = "15.5.4.2-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var tostr=String.prototype.toString; astring=new String(); astring.toString = tostr; astring.toString()", + "", + eval("var tostr=String.prototype.toString; astring=new String(); astring.toString = tostr; astring.toString()") ); +new TestCase( SECTION, + "var tostr=String.prototype.toString; astring=new String(0); astring.toString = tostr; astring.toString()", + "0", + eval("var tostr=String.prototype.toString; astring=new String(0); astring.toString = tostr; astring.toString()") ); +new TestCase( SECTION, + "var tostr=String.prototype.toString; astring=new String('hello'); astring.toString = tostr; astring.toString()", + "hello", + eval("var tostr=String.prototype.toString; astring=new String('hello'); astring.toString = tostr; astring.toString()") ); +new TestCase( SECTION, + "var tostr=String.prototype.toString; astring=new String(''); astring.toString = tostr; astring.toString()", + "", + eval("var tostr=String.prototype.toString; astring=new String(''); astring.toString = tostr; astring.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.2.js b/source/spidermonkey-tests/ecma/String/15.5.4.2.js new file mode 100644 index 00000000..e431e027 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.2.js @@ -0,0 +1,53 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.2.js + ECMA Section: 15.5.4.2 String.prototype.toString + + Description: + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.5.4.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.tostring"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "String.prototype.toString() == String.prototype.valueOf()", + true, + String.prototype.toString() == String.prototype.valueOf() ); + +new TestCase( SECTION, "String.prototype.toString()", "", String.prototype.toString() ); +new TestCase( SECTION, "String.prototype.toString.length", 0, String.prototype.toString.length ); + + +new TestCase( SECTION, + "TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()", + true, + eval("TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()") ); +new TestCase( SECTION, + "TESTSTRING = new String(true);TESTSTRING.valueOf() == TESTSTRING.toString()", + true, + eval("TESTSTRING = new String(true);TESTSTRING.valueOf() == TESTSTRING.toString()") ); +new TestCase( SECTION, + "TESTSTRING = new String(false);TESTSTRING.valueOf() == TESTSTRING.toString()", + true, + eval("TESTSTRING = new String(false);TESTSTRING.valueOf() == TESTSTRING.toString()") ); +new TestCase( SECTION, + "TESTSTRING = new String(Math.PI);TESTSTRING.valueOf() == TESTSTRING.toString()", + true, + eval("TESTSTRING = new String(Math.PI);TESTSTRING.valueOf() == TESTSTRING.toString()") ); +new TestCase( SECTION, + "TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()", + true, + eval("TESTSTRING = new String();TESTSTRING.valueOf() == TESTSTRING.toString()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.3-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.3-1.js new file mode 100644 index 00000000..c52bc283 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.3-1.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.3-1.js + ECMA Section: 15.5.4.3 String.prototype.valueOf() + + Description: Returns this string value. + + The valueOf function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.4.3-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.valueOf"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.valueOf.length", 0, String.prototype.valueOf.length ); + +new TestCase( SECTION, "String.prototype.valueOf()", "", String.prototype.valueOf() ); +new TestCase( SECTION, "(new String()).valueOf()", "", (new String()).valueOf() ); +new TestCase( SECTION, "(new String(\"\")).valueOf()", "", (new String("")).valueOf() ); +new TestCase( SECTION, "(new String( String() )).valueOf()","", (new String(String())).valueOf() ); +new TestCase( SECTION, "(new String( \"h e l l o\" )).valueOf()", "h e l l o", (new String("h e l l o")).valueOf() ); +new TestCase( SECTION, "(new String( 0 )).valueOf()", "0", (new String(0)).valueOf() ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.3-2.js b/source/spidermonkey-tests/ecma/String/15.5.4.3-2.js new file mode 100644 index 00000000..d1a3774e --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.3-2.js @@ -0,0 +1,56 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.3-2.js + ECMA Section: 15.5.4.3 String.prototype.valueOf() + + Description: Returns this string value. + + The valueOf function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + + +var SECTION = "15.5.4.3-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.valueOf"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var valof=String.prototype.valueOf; astring=new String(); astring.valueOf = valof; astring.valof()", + "", + eval("var valof=String.prototype.valueOf; astring=new String(); astring.valueOf = valof; astring.valueOf()") ); + +new TestCase( SECTION, + "var valof=String.prototype.valueOf; astring=new String(0); astring.valueOf = valof; astring.valof()", + "0", + eval("var valof=String.prototype.valueOf; astring=new String(0); astring.valueOf = valof; astring.valueOf()") ); + +new TestCase( SECTION, + "var valof=String.prototype.valueOf; astring=new String('hello'); astring.valueOf = valof; astring.valof()", + "hello", + eval("var valof=String.prototype.valueOf; astring=new String('hello'); astring.valueOf = valof; astring.valueOf()") ); + +new TestCase( SECTION, + "var valof=String.prototype.valueOf; astring=new String(''); astring.valueOf = valof; astring.valof()", + "", + eval("var valof=String.prototype.valueOf; astring=new String(''); astring.valueOf = valof; astring.valueOf()") ); +/* + new TestCase( SECTION, + "var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valof()", + "error", + eval("var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valueOf()") ); +*/ + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.3-3-n.js b/source/spidermonkey-tests/ecma/String/15.5.4.3-3-n.js new file mode 100644 index 00000000..e4e410de --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.3-3-n.js @@ -0,0 +1,38 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.3-3-n.js + ECMA Section: 15.5.4.3 String.prototype.valueOf() + + Description: Returns this string value. + + The valueOf function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + + +var SECTION = "15.5.4.3-3-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.valueOf"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valof()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valof()", + "error", + eval("var valof=String.prototype.valueOf; astring=new Number(); astring.valueOf = valof; astring.valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.4-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.4-1.js new file mode 100644 index 00000000..762c1461 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.4-1.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.4-1.js + ECMA Section: 15.5.4.4 String.prototype.charAt(pos) + Description: Returns a string containing the character at position + pos in the string. If there is no character at that + string, the result is the empty string. The result is + a string value, not a String object. + + When the charAt method is called with one argument, + pos, the following steps are taken: + 1. Call ToString, with this value as its argument + 2. Call ToInteger pos + + In this test, this is a String, pos is an integer, and + all pos are in range. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.charAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); + +var item = 0; +var i; + +for ( i = 0x0020; i < 0x007e; i++, item++) { + new TestCase( SECTION, + "TEST_STRING.charAt("+item+")", + String.fromCharCode( i ), + TEST_STRING.charAt( item ) ); +} + +for ( i = 0x0020; i < 0x007e; i++, item++) { + new TestCase( SECTION, + "TEST_STRING.charAt("+item+") == TEST_STRING.substring( "+item +", "+ (item+1) + ")", + true, + TEST_STRING.charAt( item ) == TEST_STRING.substring( item, item+1 ) + ); +} + +new TestCase( SECTION, "String.prototype.charAt.length", 1, String.prototype.charAt.length ); + +print( "TEST_STRING = new String(\" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\")" ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.4-2.js b/source/spidermonkey-tests/ecma/String/15.5.4.4-2.js new file mode 100644 index 00000000..70f801a3 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.4-2.js @@ -0,0 +1,102 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.4-1.js + ECMA Section: 15.5.4.4 String.prototype.charAt(pos) + Description: Returns a string containing the character at position + pos in the string. If there is no character at that + string, the result is the empty string. The result is + a string value, not a String object. + + When the charAt method is called with one argument, + pos, the following steps are taken: + 1. Call ToString, with this value as its argument + 2. Call ToInteger pos + 3. Compute the number of characters in Result(1) + 4. If Result(2) is less than 0 is or not less than + Result(3), return the empty string + 5. Return a string of length 1 containing one character + from result (1), the character at position Result(2). + + Note that the charAt function is intentionally generic; + it does not require that its this value be a String + object. Therefore it can be transferred to other kinds + of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.4-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.charAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(0)", "t", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(0)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(1)", "r", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(1)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(2)", "u", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(2)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(3)", "e", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(3)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(4)", "", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(4)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(-1)", "", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(-1)") ); + +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(true)", "r", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(true)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(false)", "t", eval("x = new Boolean(true); x.charAt=String.prototype.charAt;x.charAt(false)") ); + +new TestCase( SECTION, "x = new String(); x.charAt(0)", "", eval("x=new String();x.charAt(0)") ); +new TestCase( SECTION, "x = new String(); x.charAt(1)", "", eval("x=new String();x.charAt(1)") ); +new TestCase( SECTION, "x = new String(); x.charAt(-1)", "", eval("x=new String();x.charAt(-1)") ); + +new TestCase( SECTION, "x = new String(); x.charAt(NaN)", "", eval("x=new String();x.charAt(Number.NaN)") ); +new TestCase( SECTION, "x = new String(); x.charAt(Number.POSITIVE_INFINITY)", "", eval("x=new String();x.charAt(Number.POSITIVE_INFINITY)") ); +new TestCase( SECTION, "x = new String(); x.charAt(Number.NEGATIVE_INFINITY)", "", eval("x=new String();x.charAt(Number.NEGATIVE_INFINITY)") ); + +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(0)", "1", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(0)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(1)", "2", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(1)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(2)", "3", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(2)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(3)", "4", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(3)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(4)", "5", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(4)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(5)", "6", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(5)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(6)", "7", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(6)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(7)", "8", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(7)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(8)", "9", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(8)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(9)", "0", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(9)") ); +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(10)", "", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(10)") ); + +new TestCase( SECTION, "var MYOB = new MyObject(1234567890); MYOB.charAt(Math.PI)", "4", eval("var MYOB = new MyObject(1234567890); MYOB.charAt(Math.PI)") ); + +// MyOtherObject.toString will return "[object Object] + +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(0)", "[", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(0)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(1)", "o", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(1)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(2)", "b", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(2)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(3)", "j", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(3)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(4)", "e", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(4)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(5)", "c", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(5)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(6)", "t", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(6)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(7)", " ", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(7)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(8)", "O", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(8)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(9)", "b", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(9)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(10)", "j", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(10)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(11)", "e", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(11)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(12)", "c", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(12)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(13)", "t", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(13)") ); +new TestCase( SECTION, "var MYOB = new MyOtherObject(1234567890); MYOB.charAt(14)", "]", eval("var MYOB = new MyOtherObject(1234567890); MYOB.charAt(14)") ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return this.value +''" ); + this.charAt = String.prototype.charAt; +} +function MyOtherObject(value) { + this.value = value; + this.valueOf = new Function( "return this.value;" ); + this.charAt = String.prototype.charAt; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.4-3.js b/source/spidermonkey-tests/ecma/String/15.5.4.4-3.js new file mode 100644 index 00000000..795d4e08 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.4-3.js @@ -0,0 +1,78 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.4-3.js + ECMA Section: 15.5.4.4 String.prototype.charAt(pos) + Description: Returns a string containing the character at position + pos in the string. If there is no character at that + string, the result is the empty string. The result is + a string value, not a String object. + + When the charAt method is called with one argument, + pos, the following steps are taken: + 1. Call ToString, with this value as its argument + 2. Call ToInteger pos + 3. Compute the number of characters in Result(1) + 4. If Result(2) is less than 0 is or not less than + Result(3), return the empty string + 5. Return a string of length 1 containing one character + from result (1), the character at position Result(2). + + Note that the charAt function is intentionally generic; + it does not require that its this value be a String + object. Therefore it can be transferred to other kinds + of objects for use as a method. + + This tests assiging charAt to a user-defined function. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.4-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.charAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var foo = new MyObject('hello'); + + +new TestCase( SECTION, "var foo = new MyObject('hello'); ", "h", foo.charAt(0) ); +new TestCase( SECTION, "var foo = new MyObject('hello'); ", "e", foo.charAt(1) ); +new TestCase( SECTION, "var foo = new MyObject('hello'); ", "l", foo.charAt(2) ); +new TestCase( SECTION, "var foo = new MyObject('hello'); ", "l", foo.charAt(3) ); +new TestCase( SECTION, "var foo = new MyObject('hello'); ", "o", foo.charAt(4) ); +new TestCase( SECTION, "var foo = new MyObject('hello'); ", "", foo.charAt(-1) ); +new TestCase( SECTION, "var foo = new MyObject('hello'); ", "", foo.charAt(5) ); + +var boo = new MyObject(true); + +new TestCase( SECTION, "var boo = new MyObject(true); ", "t", boo.charAt(0) ); +new TestCase( SECTION, "var boo = new MyObject(true); ", "r", boo.charAt(1) ); +new TestCase( SECTION, "var boo = new MyObject(true); ", "u", boo.charAt(2) ); +new TestCase( SECTION, "var boo = new MyObject(true); ", "e", boo.charAt(3) ); + +var noo = new MyObject( Math.PI ); + +new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "3", noo.charAt(0) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", ".", noo.charAt(1) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "1", noo.charAt(2) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "4", noo.charAt(3) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "1", noo.charAt(4) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "5", noo.charAt(5) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); ", "9", noo.charAt(6) ); + +test(); + +function MyObject (v) { + this.value = v; + this.toString = new Function( "return this.value +'';" ); + this.valueOf = new Function( "return this.value" ); + this.charAt = String.prototype.charAt; +} + diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.4-4.js b/source/spidermonkey-tests/ecma/String/15.5.4.4-4.js new file mode 100644 index 00000000..d06a9f93 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.4-4.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.4-4.js + ECMA Section: 15.5.4.4 String.prototype.charAt(pos) + Description: Returns a string containing the character at position + pos in the string. If there is no character at that + string, the result is the empty string. The result is + a string value, not a String object. + + When the charAt method is called with one argument, + pos, the following steps are taken: + 1. Call ToString, with this value as its argument + 2. Call ToInteger pos + 3. Compute the number of characters in Result(1) + 4. If Result(2) is less than 0 is or not less than + Result(3), return the empty string + 5. Return a string of length 1 containing one character + from result (1), the character at position Result(2). + + Note that the charAt function is intentionally generic; + it does not require that its this value be a String + object. Therefore it can be transferred to other kinds + of objects for use as a method. + + This tests assiging charAt to primitive types.. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.4-4"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "String.prototype.charAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(0)", "1", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(1)", ",", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(2)", "2", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(2)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(3)", ",", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(3)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(4)", "3", eval("x=new Array(1,2,3); x.charAt = String.prototype.charAt; x.charAt(4)") ); + +new TestCase( SECTION, "x = new Array(); x.charAt = String.prototype.charAt; x.charAt(0)", "", eval("x = new Array(); x.charAt = String.prototype.charAt; x.charAt(0)") ); + +new TestCase( SECTION, "x = new Number(123); x.charAt = String.prototype.charAt; x.charAt(0)", "1", eval("x=new Number(123); x.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = new Number(123); x.charAt = String.prototype.charAt; x.charAt(1)", "2", eval("x=new Number(123); x.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = new Number(123); x.charAt = String.prototype.charAt; x.charAt(2)", "3", eval("x=new Number(123); x.charAt = String.prototype.charAt; x.charAt(2)") ); + +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(0)", "[", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(1)", "o", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(2)", "b", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(2)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(3)", "j", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(3)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(4)", "e", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(4)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(5)", "c", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(5)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(6)", "t", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(6)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(7)", " ", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(7)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(8)", "O", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(8)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(9)", "b", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(9)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(10)", "j", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(10)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(11)", "e", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(11)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(12)", "c", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(12)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(13)", "t", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(13)") ); +new TestCase( SECTION, "x = new Object(); x.charAt = String.prototype.charAt; x.charAt(14)", "]", eval("x=new Object(); x.charAt = String.prototype.charAt; x.charAt(14)") ); + +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(0)", "[", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(1)", "o", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(2)", "b", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(2)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(3)", "j", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(3)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(4)", "e", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(4)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(5)", "c", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(5)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(6)", "t", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(6)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(7)", " ", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(7)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(8)", "F", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(8)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(9)", "u", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(9)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(10)", "n", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(10)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(11)", "c", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(11)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(12)", "t", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(12)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(13)", "i", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(13)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(14)", "o", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(14)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(15)", "n", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(15)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(16)", "]", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(16)") ); +new TestCase( SECTION, "x = new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(17)", "", eval("x=new Function(); x.toString = Object.prototype.toString; x.charAt = String.prototype.charAt; x.charAt(17)") ); + + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.5-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.5-1.js new file mode 100644 index 00000000..937f4be4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.5-1.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.5.1.js + ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos) + Description: Returns a number (a nonnegative integer less than 2^16) + representing the Unicode encoding of the character at + position pos in this string. If there is no character + at that position, the number is NaN. + + When the charCodeAt method is called with one argument + pos, the following steps are taken: + 1. Call ToString, giving it the theis value as its + argument + 2. Call ToInteger(pos) + 3. Compute the number of characters in result(1). + 4. If Result(2) is less than 0 or is not less than + Result(3), return NaN. + 5. Return a value of Number type, of positive sign, whose + magnitude is the Unicode encoding of one character + from result 1, namely the characer at position Result + (2), where the first character in Result(1) is + considered to be at position 0. + + Note that the charCodeAt function is intentionally + generic; it does not require that its this value be a + String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.5-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.charCodeAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); + +for ( j = 0, i = 0x0020; i < 0x007e; i++, j++ ) { + new TestCase( SECTION, "TEST_STRING.charCodeAt("+j+")", i, TEST_STRING.charCodeAt( j ) ); +} + +new TestCase( SECTION, 'TEST_STRING.charCodeAt('+i+')', NaN, TEST_STRING.charCodeAt( i ) ); + + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.5-2.js b/source/spidermonkey-tests/ecma/String/15.5.4.5-2.js new file mode 100644 index 00000000..75590c3d --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.5-2.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.5.1.js + ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos) + Description: Returns a number (a nonnegative integer less than 2^16) + representing the Unicode encoding of the character at + position pos in this string. If there is no character + at that position, the number is NaN. + + When the charCodeAt method is called with one argument + pos, the following steps are taken: + 1. Call ToString, giving it the theis value as its + argument + 2. Call ToInteger(pos) + 3. Compute the number of characters in result(1). + 4. If Result(2) is less than 0 or is not less than + Result(3), return NaN. + 5. Return a value of Number type, of positive sign, whose + magnitude is the Unicode encoding of one character + from result 1, namely the characer at position Result + (2), where the first character in Result(1) is + considered to be at position 0. + + Note that the charCodeAt function is intentionally + generic; it does not require that its this value be a + String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.5-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.charCodeAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); + +var x; + +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)", 0x0075, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)", 0x0065, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)") ); + +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)") ); + +new TestCase( SECTION, "x = new String(); x.charCodeAt(0)", Number.NaN, eval("x=new String();x.charCodeAt(0)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(1)", Number.NaN, eval("x=new String();x.charCodeAt(1)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(-1)", Number.NaN, eval("x=new String();x.charCodeAt(-1)") ); + +new TestCase( SECTION, "x = new String(); x.charCodeAt(NaN)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NaN)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.POSITIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.POSITIVE_INFINITY)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.NEGATIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NEGATIVE_INFINITY)") ); + +new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(0)", 0x0031, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(0)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(1)", 0x002C, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(1)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(2)", 0x0032, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(2)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(3)", 0x002C, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(3)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(4)", 0x0033, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(4)") ); +new TestCase( SECTION, "x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(5)", NaN, eval("x = new Array(1,2,3); x.charCodeAt = String.prototype.charCodeAt; x.charCodeAt(5)") ); + +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(0)", 0x005B, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(0)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(1)", 0x006F, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(1)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(2)", 0x0062, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(2)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(3)", 0x006A, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(3)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(4)", 0x0065, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(4)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(5)", 0x0063, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(5)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(6)", 0x0074, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(6)") ); + +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(7)", 0x0020, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(7)") ); + +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(8)", 0x004F, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(8)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(9)", 0x0062, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(9)") ); +new TestCase( SECTION, "x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(10)", 0x006A, eval("x = new Function( 'this.charCodeAt = String.prototype.charCodeAt' ); f = new x(); f.charCodeAt(10)") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.5-3.js b/source/spidermonkey-tests/ecma/String/15.5.4.5-3.js new file mode 100644 index 00000000..aa40c8b5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.5-3.js @@ -0,0 +1,97 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.5-3.js + ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos) + Description: Returns a number (a nonnegative integer less than 2^16) + representing the Unicode encoding of the character at + position pos in this string. If there is no character + at that position, the number is NaN. + + When the charCodeAt method is called with one argument + pos, the following steps are taken: + 1. Call ToString, giving it the theis value as its + argument + 2. Call ToInteger(pos) + 3. Compute the number of characters in result(1). + 4. If Result(2) is less than 0 or is not less than + Result(3), return NaN. + 5. Return a value of Number type, of positive sign, whose + magnitude is the Unicode encoding of one character + from result 1, namely the characer at position Result + (2), where the first character in Result(1) is + considered to be at position 0. + + Note that the charCodeAt function is intentionally + generic; it does not require that its this value be a + String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.5-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.charCodeAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); + + +var foo = new MyObject('hello'); + +new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(0)", 0x0068, foo.charCodeAt(0) ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(1)", 0x0065, foo.charCodeAt(1) ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(2)", 0x006c, foo.charCodeAt(2) ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(3)", 0x006c, foo.charCodeAt(3) ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(4)", 0x006f, foo.charCodeAt(4) ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(-1)", Number.NaN, foo.charCodeAt(-1) ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.charCodeAt(5)", Number.NaN, foo.charCodeAt(5) ); + +var boo = new MyObject(true); + +new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(0)", 0x0074, boo.charCodeAt(0) ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(1)", 0x0072, boo.charCodeAt(1) ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(2)", 0x0075, boo.charCodeAt(2) ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.charCodeAt(3)", 0x0065, boo.charCodeAt(3) ); + +var noo = new MyObject( Math.PI ); + +new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(0)", 0x0033, noo.charCodeAt(0) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(1)", 0x002E, noo.charCodeAt(1) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(2)", 0x0031, noo.charCodeAt(2) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(3)", 0x0034, noo.charCodeAt(3) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(4)", 0x0031, noo.charCodeAt(4) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(5)", 0x0035, noo.charCodeAt(5) ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI);noo.charCodeAt(6)", 0x0039, noo.charCodeAt(6) ); + +var noo = new MyObject( null ); + +new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(0)", 0x006E, noo.charCodeAt(0) ); +new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(1)", 0x0075, noo.charCodeAt(1) ); +new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(2)", 0x006C, noo.charCodeAt(2) ); +new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(3)", 0x006C, noo.charCodeAt(3) ); +new TestCase( SECTION, "var noo = new MyObject(null);noo.charCodeAt(4)", NaN, noo.charCodeAt(4) ); + +var noo = new MyObject( void 0 ); + +new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(0)", 0x0075, noo.charCodeAt(0) ); +new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(1)", 0x006E, noo.charCodeAt(1) ); +new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(2)", 0x0064, noo.charCodeAt(2) ); +new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(3)", 0x0065, noo.charCodeAt(3) ); +new TestCase( SECTION, "var noo = new MyObject(void 0);noo.charCodeAt(4)", 0x0066, noo.charCodeAt(4) ); + +test(); + + +function MyObject (v) { + this.value = v; + this.toString = new Function ( "return this.value +\"\"" ); + this.charCodeAt = String.prototype.charCodeAt; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.5-4.js b/source/spidermonkey-tests/ecma/String/15.5.4.5-4.js new file mode 100644 index 00000000..bf6bb052 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.5-4.js @@ -0,0 +1,41 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.5-4.js + ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos) + + Description: Returns a nonnegative integer less than 2^16. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var VERSION = "0697"; +startTest(); +var SECTION = "15.5.4.5-4"; + +writeHeaderToLog( SECTION + " String.prototype.charCodeAt(pos)" ); + +var MAXCHARCODE = Math.pow(2,16); +var item=0, CHARCODE; + +for ( CHARCODE=0; CHARCODE <256; CHARCODE++ ) { + new TestCase( SECTION, + "(String.fromCharCode("+CHARCODE+")).charCodeAt(0)", + CHARCODE, + (String.fromCharCode(CHARCODE)).charCodeAt(0) ); +} +for ( CHARCODE=256; CHARCODE < 65536; CHARCODE+=999 ) { + new TestCase( SECTION, + "(String.fromCharCode("+CHARCODE+")).charCodeAt(0)", + CHARCODE, + (String.fromCharCode(CHARCODE)).charCodeAt(0) ); +} + +new TestCase( SECTION, "(String.fromCharCode(65535)).charCodeAt(0)", 65535, (String.fromCharCode(65535)).charCodeAt(0) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.5-5.js b/source/spidermonkey-tests/ecma/String/15.5.4.5-5.js new file mode 100644 index 00000000..74ec5c7e --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.5-5.js @@ -0,0 +1,72 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.5.1.js + ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos) + Description: Returns a number (a nonnegative integer less than 2^16) + representing the Unicode encoding of the character at + position pos in this string. If there is no character + at that position, the number is NaN. + + When the charCodeAt method is called with one argument + pos, the following steps are taken: + 1. Call ToString, giving it the theis value as its + argument + 2. Call ToInteger(pos) + 3. Compute the number of characters in result(1). + 4. If Result(2) is less than 0 or is not less than + Result(3), return NaN. + 5. Return a value of Number type, of positive sign, whose + magnitude is the Unicode encoding of one character + from result 1, namely the characer at position Result + (2), where the first character in Result(1) is + considered to be at position 0. + + Note that the charCodeAt function is intentionally + generic; it does not require that its this value be a + String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.5-5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.charCodeAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = ""; + +for ( var i = 0x0000; i < 255; i++ ) { + TEST_STRING += String.fromCharCode( i ); +} + +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(0)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(1)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)", 0x0075, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(2)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)", 0x0065, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(3)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(4)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)", Number.NaN, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(-1)") ); + +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)", 0x0072, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(true)") ); +new TestCase( SECTION, "x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)", 0x0074, eval("x = new Boolean(true); x.charCodeAt=String.prototype.charCodeAt;x.charCodeAt(false)") ); + +new TestCase( SECTION, "x = new String(); x.charCodeAt(0)", Number.NaN, eval("x=new String();x.charCodeAt(0)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(1)", Number.NaN, eval("x=new String();x.charCodeAt(1)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(-1)", Number.NaN, eval("x=new String();x.charCodeAt(-1)") ); + +new TestCase( SECTION, "x = new String(); x.charCodeAt(NaN)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NaN)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.POSITIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.POSITIVE_INFINITY)") ); +new TestCase( SECTION, "x = new String(); x.charCodeAt(Number.NEGATIVE_INFINITY)", Number.NaN, eval("x=new String();x.charCodeAt(Number.NEGATIVE_INFINITY)") ); + +for ( var j = 0; j < 255; j++ ) { + new TestCase( SECTION, "TEST_STRING.charCodeAt("+j+")", j, TEST_STRING.charCodeAt(j) ); +} + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.6-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.6-1.js new file mode 100644 index 00000000..2e616df4 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.6-1.js @@ -0,0 +1,121 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.6-1.js + ECMA Section: 15.5.4.6 String.prototype.indexOf( searchString, pos) + Description: If the given searchString appears as a substring of the + result of converting this object to a string, at one or + more positions that are at or to the right of the + specified position, then the index of the leftmost such + position is returned; otherwise -1 is returned. If + positionis undefined or not supplied, 0 is assumed, so + as to search all of the string. + + When the indexOf method is called with two arguments, + searchString and pos, the following steps are taken: + + 1. Call ToString, giving it the this value as its + argument. + 2. Call ToString(searchString). + 3. Call ToInteger(position). (If position is undefined + or not supplied, this step produces the value 0). + 4. Compute the number of characters in Result(1). + 5. Compute min(max(Result(3), 0), Result(4)). + 6. Compute the number of characters in the string that + is Result(2). + 7. Compute the smallest possible integer k not smaller + than Result(5) such that k+Result(6) is not greater + than Result(4), and for all nonnegative integers j + less than Result(6), the character at position k+j + of Result(1) is the same as the character at position + j of Result(2); but if there is no such integer k, + then compute the value -1. + 8. Return Result(7). + + Note that the indexOf function is intentionally generic; + it does not require that its this value be a String object. + Therefore it can be transferred to other kinds of objects + for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.6-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.protoype.indexOf"; + +var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var j = 0; + +for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) { + new TestCase( SECTION, + "String.indexOf(" +String.fromCharCode(i)+ ", 0)", + k, + TEST_STRING.indexOf( String.fromCharCode(i), 0 ) ); +} + +for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) { + new TestCase( SECTION, + "String.indexOf("+String.fromCharCode(i)+ ", "+ k +")", + k, + TEST_STRING.indexOf( String.fromCharCode(i), k ) ); +} + +for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) { + new TestCase( SECTION, + "String.indexOf("+String.fromCharCode(i)+ ", "+k+1+")", + -1, + TEST_STRING.indexOf( String.fromCharCode(i), k+1 ) ); +} + +for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) { + new TestCase( SECTION, + "String.indexOf("+(String.fromCharCode(i) + + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)) +", "+0+")", + k, + TEST_STRING.indexOf( (String.fromCharCode(i)+ + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)), + 0 ) ); +} + +for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) { + new TestCase( SECTION, + "String.indexOf("+(String.fromCharCode(i) + + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)) +", "+ k +")", + k, + TEST_STRING.indexOf( (String.fromCharCode(i)+ + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)), + k ) ); +} +for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) { + new TestCase( SECTION, + "String.indexOf("+(String.fromCharCode(i) + + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)) +", "+ k+1 +")", + -1, + TEST_STRING.indexOf( (String.fromCharCode(i)+ + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)), + k+1 ) ); +} + +new TestCase( SECTION, "String.indexOf(" +TEST_STRING + ", 0 )", 0, TEST_STRING.indexOf( TEST_STRING, 0 ) ); + +new TestCase( SECTION, "String.indexOf(" +TEST_STRING + ", 1 )", -1, TEST_STRING.indexOf( TEST_STRING, 1 )); + +print( "TEST_STRING = new String(\" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\")" ); + + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.6-2.js b/source/spidermonkey-tests/ecma/String/15.5.4.6-2.js new file mode 100644 index 00000000..a760bf7d --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.6-2.js @@ -0,0 +1,220 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.6-1.js + ECMA Section: 15.5.4.6 String.prototype.indexOf( searchString, pos) + Description: If the given searchString appears as a substring of the + result of converting this object to a string, at one or + more positions that are at or to the right of the + specified position, then the index of the leftmost such + position is returned; otherwise -1 is returned. If + positionis undefined or not supplied, 0 is assumed, so + as to search all of the string. + + When the indexOf method is called with two arguments, + searchString and pos, the following steps are taken: + + 1. Call ToString, giving it the this value as its + argument. + 2. Call ToString(searchString). + 3. Call ToInteger(position). (If position is undefined + or not supplied, this step produces the value 0). + 4. Compute the number of characters in Result(1). + 5. Compute min(max(Result(3), 0), Result(4)). + 6. Compute the number of characters in the string that + is Result(2). + 7. Compute the smallest possible integer k not smaller + than Result(5) such that k+Result(6) is not greater + than Result(4), and for all nonnegative integers j + less than Result(6), the character at position k+j + of Result(1) is the same as the character at position + j of Result(2); but if there is no such integer k, + then compute the value -1. + 8. Return Result(7). + + Note that the indexOf function is intentionally generic; + it does not require that its this value be a String object. + Therefore it can be transferred to other kinds of objects + for use as a method. + + Author: christine@netscape.com, pschwartau@netscape.com + Date: 02 October 1997 + Modified: 14 July 2002 + Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155289 + ECMA-262 Ed.3 Section 15.5.4.7 + The length property of the indexOf method is 1 + * + */ +var SECTION = "15.5.4.6-2"; +var VERSION = "ECMA_1"; +var TITLE = "String.protoype.indexOf"; +var BUGNUMBER="105721"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + + +// the following test regresses http://scopus/bugsplat/show_bug.cgi?id=105721 + +// regress http://scopus/bugsplat/show_bug.cgi?id=105721 + +new TestCase( SECTION, + "function f() { return this; }; function g() { var h = f; return h(); }; g().toString()", + GLOBAL, + g().toString() + ); + + +new TestCase( SECTION, "String.prototype.indexOf.length", 1, String.prototype.indexOf.length ); +new TestCase( SECTION, "String.prototype.indexOf.length = null; String.prototype.indexOf.length", 1, eval("String.prototype.indexOf.length = null; String.prototype.indexOf.length") ); +new TestCase( SECTION, "delete String.prototype.indexOf.length", false, delete String.prototype.indexOf.length ); +new TestCase( SECTION, "delete String.prototype.indexOf.length; String.prototype.indexOf.length", 1, eval("delete String.prototype.indexOf.length; String.prototype.indexOf.length") ); + +new TestCase( SECTION, + "var s = new String(); s.indexOf()", + -1, + eval("var s = new String(); s.indexOf()") ); + +// some Unicode tests. + +// generate a test string. + +var TEST_STRING = ""; + +for ( var u = 0x00A1; u <= 0x00FF; u++ ) { + TEST_STRING += String.fromCharCode( u ); +} + +for ( var u = 0x00A1, i = 0; u <= 0x00FF; u++, i++ ) { + new TestCase( SECTION, + "TEST_STRING.indexOf( " + String.fromCharCode(u) + " )", + i, + TEST_STRING.indexOf( String.fromCharCode(u) ) ); +} +for ( var u = 0x00A1, i = 0; u <= 0x00FF; u++, i++ ) { + new TestCase( SECTION, + "TEST_STRING.indexOf( " + String.fromCharCode(u) + ", void 0 )", + i, + TEST_STRING.indexOf( String.fromCharCode(u), void 0 ) ); +} + + + +var foo = new MyObject('hello'); + +new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('h')", 0, foo.indexOf("h") ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('e')", 1, foo.indexOf("e") ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('l')", 2, foo.indexOf("l") ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('l')", 2, foo.indexOf("l") ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('o')", 4, foo.indexOf("o") ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf('X')", -1, foo.indexOf("X") ); +new TestCase( SECTION, "var foo = new MyObject('hello');foo.indexOf(5) ", -1, foo.indexOf(5) ); + +var boo = new MyObject(true); + +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('t')", 0, boo.indexOf("t") ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('r')", 1, boo.indexOf("r") ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('u')", 2, boo.indexOf("u") ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('e')", 3, boo.indexOf("e") ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('true')", 0, boo.indexOf("true") ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('rue')", 1, boo.indexOf("rue") ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('ue')", 2, boo.indexOf("ue") ); +new TestCase( SECTION, "var boo = new MyObject(true);boo.indexOf('oy')", -1, boo.indexOf("oy") ); + + +var noo = new MyObject( Math.PI ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('3') ", 0, noo.indexOf('3') ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('.') ", 1, noo.indexOf('.') ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('1') ", 2, noo.indexOf('1') ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('4') ", 3, noo.indexOf('4') ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('1') ", 2, noo.indexOf('1') ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('5') ", 5, noo.indexOf('5') ); +new TestCase( SECTION, "var noo = new MyObject(Math.PI); noo.indexOf('9') ", 6, noo.indexOf('9') ); + +new TestCase( SECTION, + "var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf('new')", + 0, + eval("var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf('new')") ); + +new TestCase( SECTION, + "var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf(',zoo,')", + 3, + eval("var arr = new Array('new','zoo','revue'); arr.indexOf = String.prototype.indexOf; arr.indexOf(',zoo,')") ); + +new TestCase( SECTION, + "var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('[object Object]')", + 0, + eval("var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('[object Object]')") ); + +new TestCase( SECTION, + "var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('bject')", + 2, + eval("var obj = new Object(); obj.indexOf = String.prototype.indexOf; obj.indexOf('bject')") ); + +new TestCase( SECTION, + "var f = new Function(); f.toString = Object.prototype.toString; f.indexOf = String.prototype.indexOf; f.indexOf('[object Function]')", + 0, + eval("var f = new Function(); f.toString = Object.prototype.toString; f.indexOf = String.prototype.indexOf; f.indexOf('[object Function]')") ); + +new TestCase( SECTION, + "var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('true')", + -1, + eval("var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('true')") ); + +new TestCase( SECTION, + "var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 1)", + -1, + eval("var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 1)") ); + +new TestCase( SECTION, + "var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 0)", + 0, + eval("var b = new Boolean(); b.indexOf = String.prototype.indexOf; b.indexOf('false', 0)") ); + +new TestCase( SECTION, + "var n = new Number(1e21); n.indexOf = String.prototype.indexOf; n.indexOf('e')", + 1, + eval("var n = new Number(1e21); n.indexOf = String.prototype.indexOf; n.indexOf('e')") ); + +new TestCase( SECTION, + "var n = new Number(-Infinity); n.indexOf = String.prototype.indexOf; n.indexOf('-')", + 0, + eval("var n = new Number(-Infinity); n.indexOf = String.prototype.indexOf; n.indexOf('-')") ); + +new TestCase( SECTION, + "var n = new Number(0xFF); n.indexOf = String.prototype.indexOf; n.indexOf('5')", + 1, + eval("var n = new Number(0xFF); n.indexOf = String.prototype.indexOf; n.indexOf('5')") ); + +new TestCase( SECTION, + "var m = Math; m.indexOf = String.prototype.indexOf; m.indexOf( 'Math' )", + 8, + eval("var m = Math; m.indexOf = String.prototype.indexOf; m.indexOf( 'Math' )") ); + +// new Date(0) has '31' or '01' at index 8 depending on whether tester is (GMT-) or (GMT+), respectively +new TestCase( SECTION, + "var d = new Date(0); d.indexOf = String.prototype.indexOf; d.getTimezoneOffset()>0 ? d.indexOf('31') : d.indexOf('01')", + 8, + eval("var d = new Date(0); d.indexOf = String.prototype.indexOf; d.getTimezoneOffset()>0 ? d.indexOf('31') : d.indexOf('01')") ); + +test(); + +function f() { + return this; +} +function g() { + var h = f; + return h(); +} + +function MyObject (v) { + this.value = v; + this.toString = new Function ( "return this.value +\"\""); + this.indexOf = String.prototype.indexOf; +} + diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.7-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.7-1.js new file mode 100644 index 00000000..8559bea6 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.7-1.js @@ -0,0 +1,185 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.7-1.js + ECMA Section: 15.5.4.7 String.prototype.lastIndexOf( searchString, pos) + Description: + + If the given searchString appears as a substring of the result of + converting this object to a string, at one or more positions that are + at or to the left of the specified position, then the index of the + rightmost such position is returned; otherwise -1 is returned. If position + is undefined or not supplied, the length of this string value is assumed, + so as to search all of the string. + + When the lastIndexOf method is called with two arguments searchString and + position, the following steps are taken: + + 1.Call ToString, giving it the this value as its argument. + 2.Call ToString(searchString). + 3.Call ToNumber(position). (If position is undefined or not supplied, this step produces the value NaN). + 4.If Result(3) is NaN, use +; otherwise, call ToInteger(Result(3)). + 5.Compute the number of characters in Result(1). + 6.Compute min(max(Result(4), 0), Result(5)). + 7.Compute the number of characters in the string that is Result(2). + 8.Compute the largest possible integer k not larger than Result(6) such that k+Result(7) is not greater + than Result(5), and for all nonnegative integers j less than Result(7), the character at position k+j of + Result(1) is the same as the character at position j of Result(2); but if there is no such integer k, then + compute the value -1. + + 1.Return Result(8). + + Note that the lastIndexOf function is intentionally generic; it does not require that its this value be a + String object. Therefore it can be transferred to other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.7-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.protoype.lastIndexOf"; + +var TEST_STRING = new String( " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" ); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var j = 0; + +for ( k = 0, i = 0x0021; i < 0x007e; i++, j++, k++ ) { + new TestCase( SECTION, + "String.lastIndexOf(" +String.fromCharCode(i)+ ", 0)", + -1, + TEST_STRING.lastIndexOf( String.fromCharCode(i), 0 ) ); +} + +for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) { + new TestCase( SECTION, + "String.lastIndexOf("+String.fromCharCode(i)+ ", "+ k +")", + k, + TEST_STRING.lastIndexOf( String.fromCharCode(i), k ) ); +} + +for ( k = 0, i = 0x0020; i < 0x007e; i++, j++, k++ ) { + new TestCase( SECTION, + "String.lastIndexOf("+String.fromCharCode(i)+ ", "+k+1+")", + k, + TEST_STRING.lastIndexOf( String.fromCharCode(i), k+1 ) ); +} + +for ( k = 9, i = 0x0021; i < 0x007d; i++, j++, k++ ) { + new TestCase( SECTION, + + "String.lastIndexOf("+(String.fromCharCode(i) + + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)) +", "+ 0 + ")", + LastIndexOf( TEST_STRING, String.fromCharCode(i) + + String.fromCharCode(i+1)+String.fromCharCode(i+2), 0), + TEST_STRING.lastIndexOf( (String.fromCharCode(i)+ + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)), + 0 ) ); +} + +for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) { + new TestCase( SECTION, + "String.lastIndexOf("+(String.fromCharCode(i) + + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)) +", "+ k +")", + k, + TEST_STRING.lastIndexOf( (String.fromCharCode(i)+ + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)), + k ) ); +} +for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) { + new TestCase( SECTION, + "String.lastIndexOf("+(String.fromCharCode(i) + + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)) +", "+ k+1 +")", + k, + TEST_STRING.lastIndexOf( (String.fromCharCode(i)+ + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)), + k+1 ) ); +} +for ( k = 0, i = 0x0020; i < 0x007d; i++, j++, k++ ) { + new TestCase( SECTION, + "String.lastIndexOf("+ + (String.fromCharCode(i) + + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)) +", "+ (k-1) +")", + LastIndexOf( TEST_STRING, String.fromCharCode(i) + + String.fromCharCode(i+1)+String.fromCharCode(i+2), k-1), + TEST_STRING.lastIndexOf( (String.fromCharCode(i)+ + String.fromCharCode(i+1)+ + String.fromCharCode(i+2)), + k-1 ) ); +} + +new TestCase( SECTION, "String.lastIndexOf(" +TEST_STRING + ", 0 )", 0, TEST_STRING.lastIndexOf( TEST_STRING, 0 ) ); + +// new TestCase( SECTION, "String.lastIndexOf(" +TEST_STRING + ", 1 )", 0, TEST_STRING.lastIndexOf( TEST_STRING, 1 )); + +new TestCase( SECTION, "String.lastIndexOf(" +TEST_STRING + ")", 0, TEST_STRING.lastIndexOf( TEST_STRING )); + +print( "TEST_STRING = new String(\" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\")" ); + +test(); + +function LastIndexOf( string, search, position ) { + string = String( string ); + search = String( search ); + + position = Number( position ) + + if ( isNaN( position ) ) { + position = Infinity; + } else { + position = ToInteger( position ); + } + + result5= string.length; + result6 = Math.min(Math.max(position, 0), result5); + result7 = search.length; + + if (result7 == 0) { + return Math.min(position, result5); + } + + result8 = -1; + + for ( k = 0; k <= result6; k++ ) { + if ( k+ result7 > result5 ) { + break; + } + for ( j = 0; j < result7; j++ ) { + if ( string.charAt(k+j) != search.charAt(j) ){ + break; + } else { + if ( j == result7 -1 ) { + result8 = k; + } + } + } + } + + return result8; +} +function ToInteger( n ) { + n = Number( n ); + if ( isNaN(n) ) { + return 0; + } + if ( Math.abs(n) == 0 || Math.abs(n) == Infinity ) { + return n; + } + + var sign = ( n < 0 ) ? -1 : 1; + + return ( sign * Math.floor(Math.abs(n)) ); +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.7-2.js b/source/spidermonkey-tests/ecma/String/15.5.4.7-2.js new file mode 100644 index 00000000..96c97ec1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.7-2.js @@ -0,0 +1,183 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.7-2.js + ECMA Section: 15.5.4.7 String.prototype.lastIndexOf( searchString, pos) + Description: + + If the given searchString appears as a substring of the result of + converting this object to a string, at one or more positions that are + at or to the left of the specified position, then the index of the + rightmost such position is returned; otherwise -1 is returned. If position + is undefined or not supplied, the length of this string value is assumed, + so as to search all of the string. + + When the lastIndexOf method is called with two arguments searchString and + position, the following steps are taken: + + 1.Call ToString, giving it the this value as its argument. + 2.Call ToString(searchString). + 3.Call ToNumber(position). (If position is undefined or not supplied, this step produces the value NaN). + 4.If Result(3) is NaN, use +; otherwise, call ToInteger(Result(3)). + 5.Compute the number of characters in Result(1). + 6.Compute min(max(Result(4), 0), Result(5)). + 7.Compute the number of characters in the string that is Result(2). + 8.Compute the largest possible integer k not larger than Result(6) such that k+Result(7) is not greater + than Result(5), and for all nonnegative integers j less than Result(7), the character at position k+j of + Result(1) is the same as the character at position j of Result(2); but if there is no such integer k, then + compute the value -1. + + 1.Return Result(8). + + Note that the lastIndexOf function is intentionally generic; it does not require that its this value be a + String object. Therefore it can be transferred to other kinds of objects for use as a method. + + Author: christine@netscape.com, pschwartau@netscape.com + Date: 02 October 1997 + Modified: 14 July 2002 + Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155289 + ECMA-262 Ed.3 Section 15.5.4.8 + The length property of the lastIndexOf method is 1 + * + */ +var SECTION = "15.5.4.7-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.protoype.lastIndexOf"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, "String.prototype.lastIndexOf.length", 1, String.prototype.lastIndexOf.length ); +new TestCase( SECTION, "delete String.prototype.lastIndexOf.length", false, delete String.prototype.lastIndexOf.length ); +new TestCase( SECTION, "delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.length", 1, eval("delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.length" ) ); + +new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('', 0)", LastIndexOf("","",0), eval("var s = new String(''); s.lastIndexOf('', 0)") ); +new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('')", LastIndexOf("",""), eval("var s = new String(''); s.lastIndexOf('')") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('', 0)", LastIndexOf("hello","",0), eval("var s = new String('hello'); s.lastIndexOf('',0)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('')", LastIndexOf("hello",""), eval("var s = new String('hello'); s.lastIndexOf('')") ); + +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll')", LastIndexOf("hello","ll"), eval("var s = new String('hello'); s.lastIndexOf('ll')") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 0)", LastIndexOf("hello","ll",0), eval("var s = new String('hello'); s.lastIndexOf('ll', 0)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 1)", LastIndexOf("hello","ll",1), eval("var s = new String('hello'); s.lastIndexOf('ll', 1)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 2)", LastIndexOf("hello","ll",2), eval("var s = new String('hello'); s.lastIndexOf('ll', 2)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 3)", LastIndexOf("hello","ll",3), eval("var s = new String('hello'); s.lastIndexOf('ll', 3)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 4)", LastIndexOf("hello","ll",4), eval("var s = new String('hello'); s.lastIndexOf('ll', 4)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 5)", LastIndexOf("hello","ll",5), eval("var s = new String('hello'); s.lastIndexOf('ll', 5)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 6)", LastIndexOf("hello","ll",6), eval("var s = new String('hello'); s.lastIndexOf('ll', 6)") ); + +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 1.5)", LastIndexOf('hello','ll', 1.5), eval("var s = new String('hello'); s.lastIndexOf('ll', 1.5)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', 2.5)", LastIndexOf('hello','ll', 2.5), eval("var s = new String('hello'); s.lastIndexOf('ll', 2.5)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -1)", LastIndexOf('hello','ll', -1), eval("var s = new String('hello'); s.lastIndexOf('ll', -1)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -1.5)",LastIndexOf('hello','ll', -1.5), eval("var s = new String('hello'); s.lastIndexOf('ll', -1.5)") ); + +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -Infinity)", LastIndexOf("hello","ll",-Infinity), eval("var s = new String('hello'); s.lastIndexOf('ll', -Infinity)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', Infinity)", LastIndexOf("hello","ll",Infinity), eval("var s = new String('hello'); s.lastIndexOf('ll', Infinity)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', NaN)", LastIndexOf("hello","ll",NaN), eval("var s = new String('hello'); s.lastIndexOf('ll', NaN)") ); +new TestCase( SECTION, "var s = new String('hello'); s.lastIndexOf('ll', -0)", LastIndexOf("hello","ll",-0), eval("var s = new String('hello'); s.lastIndexOf('ll', -0)") ); +for ( var i = 0; i < ( "[object Object]" ).length; i++ ) { + new TestCase( SECTION, + "var o = new Object(); o.lastIndexOf = String.prototype.lastIndexOf; o.lastIndexOf('b', "+ i + ")", + ( i < 2 ? -1 : ( i < 9 ? 2 : 9 )) , + eval("var o = new Object(); o.lastIndexOf = String.prototype.lastIndexOf; o.lastIndexOf('b', "+ i + ")") ); +} +for ( var i = 0; i < 5; i ++ ) { + new TestCase( SECTION, + "var b = new Boolean(); b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('l', "+ i + ")", + ( i < 2 ? -1 : 2 ), + eval("var b = new Boolean(); b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('l', "+ i + ")") ); +} +for ( var i = 0; i < 5; i ++ ) { + new TestCase( SECTION, + "var b = new Boolean(); b.toString = Object.prototype.toString; b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('o', "+ i + ")", + ( i < 1 ? -1 : ( i < 9 ? 1 : ( i < 10 ? 9 : 10 ) ) ), + eval("var b = new Boolean(); b.toString = Object.prototype.toString; b.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('o', "+ i + ")") ); +} +for ( var i = 0; i < 9; i++ ) { + new TestCase( SECTION, + "var n = new Number(Infinity); n.lastIndexOf = String.prototype.lastIndexOf; n.lastIndexOf( 'i', " + i + " )", + ( i < 3 ? -1 : ( i < 5 ? 3 : 5 ) ), + eval("var n = new Number(Infinity); n.lastIndexOf = String.prototype.lastIndexOf; n.lastIndexOf( 'i', " + i + " )") ); +} +var a = new Array( "abc","def","ghi","jkl","mno","pqr","stu","vwx","yz" ); + +for ( var i = 0; i < (a.toString()).length; i++ ) { + new TestCase( SECTION, + "var a = new Array( 'abc','def','ghi','jkl','mno','pqr','stu','vwx','yz' ); a.lastIndexOf = String.prototype.lastIndexOf; a.lastIndexOf( ',mno,p', "+i+" )", + ( i < 15 ? -1 : 15 ), + eval("var a = new Array( 'abc','def','ghi','jkl','mno','pqr','stu','vwx','yz' ); a.lastIndexOf = String.prototype.lastIndexOf; a.lastIndexOf( ',mno,p', "+i+" )") ); +} + +for ( var i = 0; i < 15; i ++ ) { + new TestCase( SECTION, + "var m = Math; m.lastIndexOf = String.prototype.lastIndexOf; m.lastIndexOf('t', "+ i + ")", + ( i < 6 ? -1 : ( i < 10 ? 6 : 10 ) ), + eval("var m = Math; m.lastIndexOf = String.prototype.lastIndexOf; m.lastIndexOf('t', "+ i + ")") ); +} +/* + for ( var i = 0; i < 15; i++ ) { + new TestCase( SECTION, + "var d = new Date(); d.lastIndexOf = String.prototype.lastIndexOf; d.lastIndexOf( '0' )", + ) + } + +*/ + +test(); + +function LastIndexOf( string, search, position ) { + string = String( string ); + search = String( search ); + + position = Number( position ) + + if ( isNaN( position ) ) { + position = Infinity; + } else { + position = ToInteger( position ); + } + + result5= string.length; + result6 = Math.min(Math.max(position, 0), result5); + result7 = search.length; + + if (result7 == 0) { + return Math.min(position, result5); + } + + result8 = -1; + + for ( k = 0; k <= result6; k++ ) { + if ( k+ result7 > result5 ) { + break; + } + for ( j = 0; j < result7; j++ ) { + if ( string.charAt(k+j) != search.charAt(j) ){ + break; + } else { + if ( j == result7 -1 ) { + result8 = k; + } + } + } + } + + return result8; +} +function ToInteger( n ) { + n = Number( n ); + if ( isNaN(n) ) { + return 0; + } + if ( Math.abs(n) == 0 || Math.abs(n) == Infinity ) { + return n; + } + + var sign = ( n < 0 ) ? -1 : 1; + + return ( sign * Math.floor(Math.abs(n)) ); +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.8-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.8-1.js new file mode 100644 index 00000000..97b5df71 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.8-1.js @@ -0,0 +1,198 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.8-1.js + ECMA Section: 15.5.4.8 String.prototype.split( separator ) + Description: + + Returns an Array object into which substrings of the result of converting + this object to a string have been stored. The substrings are determined by + searching from left to right for occurrences of the given separator; these + occurrences are not part of any substring in the returned array, but serve + to divide up this string value. The separator may be a string of any length. + + As a special case, if the separator is the empty string, the string is split + up into individual characters; the length of the result array equals the + length of the string, and each substring contains one character. + + If the separator is not supplied, then the result array contains just one + string, which is the string. + + Author: christine@netscape.com, pschwartau@netscape.com + Date: 12 November 1997 + Modified: 14 July 2002 + Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155289 + ECMA-262 Ed.3 Section 15.5.4.14 + The length property of the split method is 2 + * + */ + +var SECTION = "15.5.4.8-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.split"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.split.length", 2, String.prototype.split.length ); +new TestCase( SECTION, "delete String.prototype.split.length", false, delete String.prototype.split.length ); +new TestCase( SECTION, "delete String.prototype.split.length; String.prototype.split.length", 2, eval("delete String.prototype.split.length; String.prototype.split.length") ); + +// test cases for when split is called with no arguments. + +// this is a string object + +new TestCase( SECTION, + "var s = new String('this is a string object'); typeof s.split()", + "object", + eval("var s = new String('this is a string object'); typeof s.split()") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); Array.prototype.getClass = Object.prototype.toString; (s.split()).getClass()", + "[object Array]", + eval("var s = new String('this is a string object'); Array.prototype.getClass = Object.prototype.toString; (s.split()).getClass()") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.split().length", + 1, + eval("var s = new String('this is a string object'); s.split().length") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.split()[0]", + "this is a string object", + eval("var s = new String('this is a string object'); s.split()[0]") ); + +// this is an object object +new TestCase( SECTION, + "var obj = new Object(); obj.split = String.prototype.split; typeof obj.split()", + "object", + eval("var obj = new Object(); obj.split = String.prototype.split; typeof obj.split()") ); + +new TestCase( SECTION, + "var obj = new Object(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()", + "[object Array]", + eval("var obj = new Object(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") ); + +new TestCase( SECTION, + "var obj = new Object(); obj.split = String.prototype.split; obj.split().length", + 1, + eval("var obj = new Object(); obj.split = String.prototype.split; obj.split().length") ); + +new TestCase( SECTION, + "var obj = new Object(); obj.split = String.prototype.split; obj.split()[0]", + "[object Object]", + eval("var obj = new Object(); obj.split = String.prototype.split; obj.split()[0]") ); + +// this is a function object +new TestCase( SECTION, + "var obj = new Function(); obj.split = String.prototype.split; typeof obj.split()", + "object", + eval("var obj = new Function(); obj.split = String.prototype.split; typeof obj.split()") ); + +new TestCase( SECTION, + "var obj = new Function(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()", + "[object Array]", + eval("var obj = new Function(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") ); + +new TestCase( SECTION, + "var obj = new Function(); obj.split = String.prototype.split; obj.split().length", + 1, + eval("var obj = new Function(); obj.split = String.prototype.split; obj.split().length") ); + +new TestCase( SECTION, + "var obj = new Function(); obj.split = String.prototype.split; obj.toString = Object.prototype.toString; obj.split()[0]", + "[object Function]", + eval("var obj = new Function(); obj.split = String.prototype.split; obj.toString = Object.prototype.toString; obj.split()[0]") ); + +// this is a number object +new TestCase( SECTION, + "var obj = new Number(NaN); obj.split = String.prototype.split; typeof obj.split()", + "object", + eval("var obj = new Number(NaN); obj.split = String.prototype.split; typeof obj.split()") ); + +new TestCase( SECTION, + "var obj = new Number(Infinity); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()", + "[object Array]", + eval("var obj = new Number(Infinity); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") ); + +new TestCase( SECTION, + "var obj = new Number(-1234567890); obj.split = String.prototype.split; obj.split().length", + 1, + eval("var obj = new Number(-1234567890); obj.split = String.prototype.split; obj.split().length") ); + +new TestCase( SECTION, + "var obj = new Number(-1e21); obj.split = String.prototype.split; obj.split()[0]", + "-1e+21", + eval("var obj = new Number(-1e21); obj.split = String.prototype.split; obj.split()[0]") ); + + +// this is the Math object +new TestCase( SECTION, + "var obj = Math; obj.split = String.prototype.split; typeof obj.split()", + "object", + eval("var obj = Math; obj.split = String.prototype.split; typeof obj.split()") ); + +new TestCase( SECTION, + "var obj = Math; obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()", + "[object Array]", + eval("var obj = Math; obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") ); + +new TestCase( SECTION, + "var obj = Math; obj.split = String.prototype.split; obj.split().length", + 1, + eval("var obj = Math; obj.split = String.prototype.split; obj.split().length") ); + +new TestCase( SECTION, + "var obj = Math; obj.split = String.prototype.split; obj.split()[0]", + "[object Math]", + eval("var obj = Math; obj.split = String.prototype.split; obj.split()[0]") ); + +// this is an array object +new TestCase( SECTION, + "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; typeof obj.split()", + "object", + eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; typeof obj.split()") ); + +new TestCase( SECTION, + "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()", + "[object Array]", + eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") ); + +new TestCase( SECTION, + "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split().length", + 1, + eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split().length") ); + +new TestCase( SECTION, + "var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split()[0]", + "1,2,3,4,5", + eval("var obj = new Array(1,2,3,4,5); obj.split = String.prototype.split; obj.split()[0]") ); + +// this is a Boolean object + +new TestCase( SECTION, + "var obj = new Boolean(); obj.split = String.prototype.split; typeof obj.split()", + "object", + eval("var obj = new Boolean(); obj.split = String.prototype.split; typeof obj.split()") ); + +new TestCase( SECTION, + "var obj = new Boolean(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.getClass()", + "[object Array]", + eval("var obj = new Boolean(); obj.split = String.prototype.split; Array.prototype.getClass = Object.prototype.toString; obj.split().getClass()") ); + +new TestCase( SECTION, + "var obj = new Boolean(); obj.split = String.prototype.split; obj.split().length", + 1, + eval("var obj = new Boolean(); obj.split = String.prototype.split; obj.split().length") ); + +new TestCase( SECTION, + "var obj = new Boolean(); obj.split = String.prototype.split; obj.split()[0]", + "false", + eval("var obj = new Boolean(); obj.split = String.prototype.split; obj.split()[0]") ); + + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.8-2.js b/source/spidermonkey-tests/ecma/String/15.5.4.8-2.js new file mode 100644 index 00000000..158e3a8f --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.8-2.js @@ -0,0 +1,213 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.8-2.js + ECMA Section: 15.5.4.8 String.prototype.split( separator ) + Description: + + Returns an Array object into which substrings of the result of converting + this object to a string have been stored. The substrings are determined by + searching from left to right for occurrences of the given separator; these + occurrences are not part of any substring in the returned array, but serve + to divide up this string value. The separator may be a string of any length. + + As a special case, if the separator is the empty string, the string is split + up into individual characters; the length of the result array equals the + length of the string, and each substring contains one character. + + If the separator is not supplied, then the result array contains just one + string, which is the string. + + When the split method is called with one argument separator, the following steps are taken: + + 1. Call ToString, giving it the this value as its argument. + 2. Create a new Array object of length 0 and call it A. + 3. If separator is not supplied, call the [[Put]] method of A with 0 and + Result(1) as arguments, and then return A. + 4. Call ToString(separator). + 5. Compute the number of characters in Result(1). + 6. Compute the number of characters in the string that is Result(4). + 7. Let p be 0. + 8. If Result(6) is zero (the separator string is empty), go to step 17. + 9. Compute the smallest possible integer k not smaller than p such that + k+Result(6) is not greater than Result(5), and for all nonnegative + integers j less than Result(6), the character at position k+j of + Result(1) is the same as the character at position j of Result(2); + but if there is no such integer k, then go to step 14. + 10. Compute a string value equal to the substring of Result(1), consisting + of the characters at positions p through k1, inclusive. + 11. Call the [[Put]] method of A with A.length and Result(10) as arguments. + 12. Let p be k+Result(6). + 13. Go to step 9. + 14. Compute a string value equal to the substring of Result(1), consisting + of the characters from position p to the end of Result(1). + 15. Call the [[Put]] method of A with A.length and Result(14) as arguments. + 16. Return A. + 17. If p equals Result(5), return A. + 18. Compute a string value equal to the substring of Result(1), consisting of + the single character at position p. + 19. Call the [[Put]] method of A with A.length and Result(18) as arguments. + 20. Increase p by 1. + 21. Go to step 17. + + Note that the split function is intentionally generic; it does not require that its this value be a String + object. Therefore it can be transferred to other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.8-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.split"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// case where separator is the empty string. + +var TEST_STRING = "this is a string object"; + +new TestCase( SECTION, + "var s = new String( "+ TEST_STRING +" ); s.split('').length", + TEST_STRING.length, + eval("var s = new String( TEST_STRING ); s.split('').length") ); + +for ( var i = 0; i < TEST_STRING.length; i++ ) { + + new TestCase( SECTION, + "var s = new String( "+TEST_STRING+" ); s.split('')["+i+"]", + TEST_STRING.charAt(i), + eval("var s = new String( TEST_STRING ); s.split('')["+i+"]") ); +} + +// case where the value of the separator is undefined. in this case, +// the this value is returned. + +var TEST_STRING = "thisundefinedisundefinedaundefinedstringundefinedobject"; +var EXPECT_STRING = new Array( TEST_STRING ); + +new TestCase( SECTION, + "var s = new String( "+ TEST_STRING +" ); s.split(void 0).length", + EXPECT_STRING.length, + eval("var s = new String( TEST_STRING ); s.split(void 0).length") ); + +for ( var i = 0; i < EXPECT_STRING.length; i++ ) { + new TestCase( SECTION, + "var s = new String( "+TEST_STRING+" ); s.split(void 0)["+i+"]", + EXPECT_STRING[i], + eval("var s = new String( TEST_STRING ); s.split(void 0)["+i+"]") ); +} + +// case where the value of the separator is null. in this case the value of the separator is "null". +TEST_STRING = "thisnullisnullanullstringnullobject"; +var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" ); + +new TestCase( SECTION, + "var s = new String( "+ TEST_STRING +" ); s.split(null).length", + EXPECT_STRING.length, + eval("var s = new String( TEST_STRING ); s.split(null).length") ); + +for ( var i = 0; i < EXPECT_STRING.length; i++ ) { + new TestCase( SECTION, + "var s = new String( "+TEST_STRING+" ); s.split(null)["+i+"]", + EXPECT_STRING[i], + eval("var s = new String( TEST_STRING ); s.split(null)["+i+"]") ); +} + +// case where the value of the separator is a boolean. +TEST_STRING = "thistrueistrueatruestringtrueobject"; +var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" ); + +new TestCase( SECTION, + "var s = new String( "+ TEST_STRING +" ); s.split(true).length", + EXPECT_STRING.length, + eval("var s = new String( TEST_STRING ); s.split(true).length") ); + +for ( var i = 0; i < EXPECT_STRING.length; i++ ) { + new TestCase( SECTION, + "var s = new String( "+TEST_STRING+" ); s.split(true)["+i+"]", + EXPECT_STRING[i], + eval("var s = new String( TEST_STRING ); s.split(true)["+i+"]") ); +} + +// case where the value of the separator is a number +TEST_STRING = "this123is123a123string123object"; +var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" ); + +new TestCase( SECTION, + "var s = new String( "+ TEST_STRING +" ); s.split(123).length", + EXPECT_STRING.length, + eval("var s = new String( TEST_STRING ); s.split(123).length") ); + +for ( var i = 0; i < EXPECT_STRING.length; i++ ) { + new TestCase( SECTION, + "var s = new String( "+TEST_STRING+" ); s.split(123)["+i+"]", + EXPECT_STRING[i], + eval("var s = new String( TEST_STRING ); s.split(123)["+i+"]") ); +} + + +// case where the value of the separator is a number +TEST_STRING = "this123is123a123string123object"; +var EXPECT_STRING = new Array( "this", "is", "a", "string", "object" ); + +new TestCase( SECTION, + "var s = new String( "+ TEST_STRING +" ); s.split(123).length", + EXPECT_STRING.length, + eval("var s = new String( TEST_STRING ); s.split(123).length") ); + +for ( var i = 0; i < EXPECT_STRING.length; i++ ) { + new TestCase( SECTION, + "var s = new String( "+TEST_STRING+" ); s.split(123)["+i+"]", + EXPECT_STRING[i], + eval("var s = new String( TEST_STRING ); s.split(123)["+i+"]") ); +} + +// case where the separator is not in the string +TEST_STRING = "this is a string"; +EXPECT_STRING = new Array( "this is a string" ); + +new TestCase( SECTION, + "var s = new String( " + TEST_STRING + " ); s.split(':').length", + 1, + eval("var s = new String( TEST_STRING ); s.split(':').length") ); + +new TestCase( SECTION, + "var s = new String( " + TEST_STRING + " ); s.split(':')[0]", + TEST_STRING, + eval("var s = new String( TEST_STRING ); s.split(':')[0]") ); + +// case where part but not all of separator is in the string. +TEST_STRING = "this is a string"; +EXPECT_STRING = new Array( "this is a string" ); +new TestCase( SECTION, + "var s = new String( " + TEST_STRING + " ); s.split('strings').length", + 1, + eval("var s = new String( TEST_STRING ); s.split('strings').length") ); + +new TestCase( SECTION, + "var s = new String( " + TEST_STRING + " ); s.split('strings')[0]", + TEST_STRING, + eval("var s = new String( TEST_STRING ); s.split('strings')[0]") ); + +// case where the separator is at the end of the string +TEST_STRING = "this is a string"; +EXPECT_STRING = new Array( "this is a " ); +new TestCase( SECTION, + "var s = new String( " + TEST_STRING + " ); s.split('string').length", + 2, + eval("var s = new String( TEST_STRING ); s.split('string').length") ); + +for ( var i = 0; i < EXPECT_STRING.length; i++ ) { + new TestCase( SECTION, + "var s = new String( "+TEST_STRING+" ); s.split('string')["+i+"]", + EXPECT_STRING[i], + eval("var s = new String( TEST_STRING ); s.split('string')["+i+"]") ); +} + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.8-3.js b/source/spidermonkey-tests/ecma/String/15.5.4.8-3.js new file mode 100644 index 00000000..91405fe5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.8-3.js @@ -0,0 +1,170 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.8-3.js + ECMA Section: 15.5.4.8 String.prototype.split( separator ) + Description: + + Returns an Array object into which substrings of the result of converting + this object to a string have been stored. The substrings are determined by + searching from left to right for occurrences of the given separator; these + occurrences are not part of any substring in the returned array, but serve + to divide up this string value. The separator may be a string of any length. + + As a special case, if the separator is the empty string, the string is split + up into individual characters; the length of the result array equals the + length of the string, and each substring contains one character. + + If the separator is not supplied, then the result array contains just one + string, which is the string. + + When the split method is called with one argument separator, the following steps are taken: + + 1. Call ToString, giving it the this value as its argument. + 2. Create a new Array object of length 0 and call it A. + 3. If separator is not supplied, call the [[Put]] method of A with 0 and + Result(1) as arguments, and then return A. + 4. Call ToString(separator). + 5. Compute the number of characters in Result(1). + 6. Compute the number of characters in the string that is Result(4). + 7. Let p be 0. + 8. If Result(6) is zero (the separator string is empty), go to step 17. + 9. Compute the smallest possible integer k not smaller than p such that + k+Result(6) is not greater than Result(5), and for all nonnegative + integers j less than Result(6), the character at position k+j of + Result(1) is the same as the character at position j of Result(2); + but if there is no such integer k, then go to step 14. + 10. Compute a string value equal to the substring of Result(1), consisting + of the characters at positions p through k1, inclusive. + 11. Call the [[Put]] method of A with A.length and Result(10) as arguments. + 12. Let p be k+Result(6). + 13. Go to step 9. + 14. Compute a string value equal to the substring of Result(1), consisting + of the characters from position p to the end of Result(1). + 15. Call the [[Put]] method of A with A.length and Result(14) as arguments. + 16. Return A. + 17. If p equals Result(5), return A. + 18. Compute a string value equal to the substring of Result(1), consisting of + the single character at position p. + 19. Call the [[Put]] method of A with A.length and Result(18) as arguments. + 20. Increase p by 1. + 21. Go to step 17. + + Note that the split function is intentionally generic; it does not require that its this value be a String + object. Therefore it can be transferred to other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.8-3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.split"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var TEST_STRING = ""; +var EXPECT = new Array(); + +// this.toString is the empty string. + +new TestCase( SECTION, + "var s = new String(); s.split().length", + 1, + eval("var s = new String(); s.split().length") ); + +new TestCase( SECTION, + "var s = new String(); s.split()[0]", + "", + eval("var s = new String(); s.split()[0]") ); + +// this.toString() is the empty string, separator is specified. + +new TestCase( SECTION, + "var s = new String(); s.split('').length", + 0, + eval("var s = new String(); s.split('').length") ); + +new TestCase( SECTION, + "var s = new String(); s.split(' ').length", + 1, + eval("var s = new String(); s.split(' ').length") ); + +// this to string is " " +new TestCase( SECTION, + "var s = new String(' '); s.split().length", + 1, + eval("var s = new String(' '); s.split().length") ); + +new TestCase( SECTION, + "var s = new String(' '); s.split()[0]", + " ", + eval("var s = new String(' '); s.split()[0]") ); + +new TestCase( SECTION, + "var s = new String(' '); s.split('').length", + 1, + eval("var s = new String(' '); s.split('').length") ); + +new TestCase( SECTION, + "var s = new String(' '); s.split('')[0]", + " ", + eval("var s = new String(' '); s.split('')[0]") ); + +new TestCase( SECTION, + "var s = new String(' '); s.split(' ').length", + 2, + eval("var s = new String(' '); s.split(' ').length") ); + +new TestCase( SECTION, + "var s = new String(' '); s.split(' ')[0]", + "", + eval("var s = new String(' '); s.split(' ')[0]") ); + +new TestCase( SECTION, + "\"\".split(\"\").length", + 0, + ("".split("")).length ); + +new TestCase( SECTION, + "\"\".split(\"x\").length", + 1, + ("".split("x")).length ); + +new TestCase( SECTION, + "\"\".split(\"x\")[0]", + "", + ("".split("x"))[0] ); + +test(); + +function Split( string, separator ) { + string = String( string ); + + var A = new Array(); + + if ( arguments.length < 2 ) { + A[0] = string; + return A; + } + + separator = String( separator ); + + var str_len = String( string ).length; + var sep_len = String( separator ).length; + + var p = 0; + var k = 0; + + if ( sep_len == 0 ) { + for ( ; p < str_len; p++ ) { + A[A.length] = String( string.charAt(p) ); + } + } + return A; +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.9-1.js b/source/spidermonkey-tests/ecma/String/15.5.4.9-1.js new file mode 100644 index 00000000..9392e329 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.9-1.js @@ -0,0 +1,168 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.9-1.js + ECMA Section: 15.5.4.9 String.prototype.substring( start ) + Description: + + 15.5.4.9 String.prototype.substring(start) + + Returns a substring of the result of converting this object to a string, + starting from character position start and running to the end of the + string. The result is a string value, not a String object. + + If the argument is NaN or negative, it is replaced with zero; if the + argument is larger than the length of the string, it is replaced with the + length of the string. + + When the substring method is called with one argument start, the following + steps are taken: + + 1.Call ToString, giving it the this value as its argument. + 2.Call ToInteger(start). + 3.Compute the number of characters in Result(1). + 4.Compute min(max(Result(2), 0), Result(3)). + 5.Return a string whose length is the difference between Result(3) and Result(4), + containing characters from Result(1), namely the characters with indices Result(4) + through Result(3)1, in ascending order. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.4.9-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.substring( start )"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.substring.length", 2, String.prototype.substring.length ); +new TestCase( SECTION, "delete String.prototype.substring.length", false, delete String.prototype.substring.length ); +new TestCase( SECTION, "delete String.prototype.substring.length; String.prototype.substring.length", 2, eval("delete String.prototype.substring.length; String.prototype.substring.length") ); + +// test cases for when substring is called with no arguments. + +// this is a string object + +new TestCase( SECTION, + "var s = new String('this is a string object'); typeof s.substring()", + "string", + eval("var s = new String('this is a string object'); typeof s.substring()") ); + +new TestCase( SECTION, + "var s = new String(''); s.substring()", + "", + eval("var s = new String(''); s.substring()") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring()", + "this is a string object", + eval("var s = new String('this is a string object'); s.substring()") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(NaN)", + "this is a string object", + eval("var s = new String('this is a string object'); s.substring(NaN)") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(-0.01)", + "this is a string object", + eval("var s = new String('this is a string object'); s.substring(-0.01)") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(s.length)", + "", + eval("var s = new String('this is a string object'); s.substring(s.length)") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(s.length+1)", + "", + eval("var s = new String('this is a string object'); s.substring(s.length+1)") ); + + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(Infinity)", + "", + eval("var s = new String('this is a string object'); s.substring(Infinity)") ); + +new TestCase( SECTION, + "var s = new String('this is a string object'); s.substring(-Infinity)", + "this is a string object", + eval("var s = new String('this is a string object'); s.substring(-Infinity)") ); + +// this is not a String object, start is not an integer + + +new TestCase( SECTION, + "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring()", + "1,2,3,4,5", + eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring()") ); + +new TestCase( SECTION, + "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true)", + ",2,3,4,5", + eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring(true)") ); + +new TestCase( SECTION, + "var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4')", + "3,4,5", + eval("var s = new Array(1,2,3,4,5); s.substring = String.prototype.substring; s.substring('4')") ); + +new TestCase( SECTION, + "var s = new Array(); s.substring = String.prototype.substring; s.substring('4')", + "", + eval("var s = new Array(); s.substring = String.prototype.substring; s.substring('4')") ); + +// this is an object object +new TestCase( SECTION, + "var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8)", + "Object]", + eval("var obj = new Object(); obj.substring = String.prototype.substring; obj.substring(8)") ); + +// this is a function object +new TestCase( SECTION, + "var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8)", + "Function]", + eval("var obj = new Function(); obj.substring = String.prototype.substring; obj.toString = Object.prototype.toString; obj.substring(8)") ); +// this is a number object +new TestCase( SECTION, + "var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(false)", + "NaN", + eval("var obj = new Number(NaN); obj.substring = String.prototype.substring; obj.substring(false)") ); + +// this is the Math object +new TestCase( SECTION, + "var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI)", + "ject Math]", + eval("var obj = Math; obj.substring = String.prototype.substring; obj.substring(Math.PI)") ); + +// this is a Boolean object + +new TestCase( SECTION, + "var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array())", + "false", + eval("var obj = new Boolean(); obj.substring = String.prototype.substring; obj.substring(new Array())") ); + +// this is a user defined object + +new TestCase( SECTION, + "var obj = new MyObject( null ); obj.substring(0)", + "null", + eval( "var obj = new MyObject( null ); obj.substring(0)") ); + + +test(); + +function MyObject( value ) { + this.value = value; + this.substring = String.prototype.substring; + this.toString = new Function ( "return this.value+''" ); +} diff --git a/source/spidermonkey-tests/ecma/String/15.5.4.js b/source/spidermonkey-tests/ecma/String/15.5.4.js new file mode 100644 index 00000000..0e17afba --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.4.js @@ -0,0 +1,74 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.js + ECMA Section: 15.5.4 Properties of the String prototype object + + Description: + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.5.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the String Prototype objecta"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, + "String.prototype.getClass = Object.prototype.toString; String.prototype.getClass()", + "[object String]", + eval("String.prototype.getClass = Object.prototype.toString; String.prototype.getClass()") ); + +delete String.prototype.getClass; + +new TestCase( SECTION, + "typeof String.prototype", + "object", + typeof String.prototype ); + +new TestCase( SECTION, + "String.prototype.valueOf()", + "", + String.prototype.valueOf() ); + +new TestCase( SECTION, + "String.prototype +''", + "", + String.prototype + '' ); + +new TestCase( SECTION, + "String.prototype.length", + 0, + String.prototype.length ); + +var prop; +var value; + +value = ''; +for (prop in "") +{ + value += prop; +} +new TestCase( SECTION, + 'String "" has no enumerable properties', + '', + value ); + +value = ''; +for (prop in String.prototype) +{ + value += prop; +} +new TestCase( SECTION, + 'String.prototype has no enumerable properties', + '', + value ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/15.5.5.1.js b/source/spidermonkey-tests/ecma/String/15.5.5.1.js new file mode 100644 index 00000000..9c9f8798 --- /dev/null +++ b/source/spidermonkey-tests/ecma/String/15.5.5.1.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.5.1 + ECMA Section: String.length + Description: + + The number of characters in the String value represented by this String + object. + + Once a String object is created, this property is unchanging. It has the + attributes { DontEnum, DontDelete, ReadOnly }. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.5.5.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.length"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var s = new String(); s.length", + 0, + eval("var s = new String(); s.length") ); + +new TestCase( SECTION, + "var s = new String(); s.length = 10; s.length", + 0, + eval("var s = new String(); s.length = 10; s.length") ); + +new TestCase( SECTION, + "var s = new String(); var props = ''; for ( var p in s ) { props += p; }; props", + "", + eval("var s = new String(); var props = ''; for ( var p in s ) { props += p; }; props") ); + +new TestCase( SECTION, + "var s = new String(); delete s.length", + false, + eval("var s = new String(); delete s.length") ); + +new TestCase( SECTION, + "var s = new String('hello'); delete s.length; s.length", + 5, + eval("var s = new String('hello'); delete s.length; s.length") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/String/browser.js b/source/spidermonkey-tests/ecma/String/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/String/shell.js b/source/spidermonkey-tests/ecma/String/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.2.js b/source/spidermonkey-tests/ecma/TypeConversion/9.2.js new file mode 100644 index 00000000..16a72f89 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.2.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.2.js + ECMA Section: 9.2 Type Conversion: ToBoolean + Description: rules for converting an argument to a boolean. + undefined false + Null false + Boolean input argument( no conversion ) + Number returns false for 0, -0, and NaN + otherwise return true + String return false if the string is empty + (length is 0) otherwise the result is + true + Object all return true + + Author: christine@netscape.com + Date: 14 july 1997 +*/ +var SECTION = "9.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "ToBoolean"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// special cases here + +new TestCase( SECTION, "Boolean()", false, Boolean() ); +new TestCase( SECTION, "Boolean(var x)", false, Boolean(eval("var x")) ); +new TestCase( SECTION, "Boolean(void 0)", false, Boolean(void 0) ); +new TestCase( SECTION, "Boolean(null)", false, Boolean(null) ); +new TestCase( SECTION, "Boolean(false)", false, Boolean(false) ); +new TestCase( SECTION, "Boolean(true)", true, Boolean(true) ); +new TestCase( SECTION, "Boolean(0)", false, Boolean(0) ); +new TestCase( SECTION, "Boolean(-0)", false, Boolean(-0) ); +new TestCase( SECTION, "Boolean(NaN)", false, Boolean(Number.NaN) ); +new TestCase( SECTION, "Boolean('')", false, Boolean("") ); + +// normal test cases here + +new TestCase( SECTION, "Boolean(Infinity)", true, Boolean(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "Boolean(-Infinity)", true, Boolean(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "Boolean(Math.PI)", true, Boolean(Math.PI) ); +new TestCase( SECTION, "Boolean(1)", true, Boolean(1) ); +new TestCase( SECTION, "Boolean(-1)", true, Boolean(-1) ); +new TestCase( SECTION, "Boolean([tab])", true, Boolean("\t") ); +new TestCase( SECTION, "Boolean('0')", true, Boolean("0") ); +new TestCase( SECTION, "Boolean('string')", true, Boolean("string") ); + +// ToBoolean (object) should always return true. +new TestCase( SECTION, "Boolean(new String() )", true, Boolean(new String()) ); +new TestCase( SECTION, "Boolean(new String('') )", true, Boolean(new String("")) ); + +new TestCase( SECTION, "Boolean(new Boolean(true))", true, Boolean(new Boolean(true)) ); +new TestCase( SECTION, "Boolean(new Boolean(false))", true, Boolean(new Boolean(false)) ); +new TestCase( SECTION, "Boolean(new Boolean() )", true, Boolean(new Boolean()) ); + +new TestCase( SECTION, "Boolean(new Array())", true, Boolean(new Array()) ); + +new TestCase( SECTION, "Boolean(new Number())", true, Boolean(new Number()) ); +new TestCase( SECTION, "Boolean(new Number(-0))", true, Boolean(new Number(-0)) ); +new TestCase( SECTION, "Boolean(new Number(0))", true, Boolean(new Number(0)) ); +new TestCase( SECTION, "Boolean(new Number(NaN))", true, Boolean(new Number(Number.NaN)) ); + +new TestCase( SECTION, "Boolean(new Number(-1))", true, Boolean(new Number(-1)) ); +new TestCase( SECTION, "Boolean(new Number(Infinity))", true, Boolean(new Number(Number.POSITIVE_INFINITY)) ); +new TestCase( SECTION, "Boolean(new Number(-Infinity))",true, Boolean(new Number(Number.NEGATIVE_INFINITY)) ); + +new TestCase( SECTION, "Boolean(new Object())", true, Boolean(new Object()) ); +new TestCase( SECTION, "Boolean(new Function())", true, Boolean(new Function()) ); +new TestCase( SECTION, "Boolean(new Date())", true, Boolean(new Date()) ); +new TestCase( SECTION, "Boolean(new Date(0))", true, Boolean(new Date(0)) ); +new TestCase( SECTION, "Boolean(Math)", true, Boolean(Math) ); + +// bug 375793 +new TestCase( SECTION, + "NaN ? true : false", + false, + (NaN ? true : false) ); +new TestCase( SECTION, + "1000 % 0 ? true : false", + false, + (1000 % 0 ? true : false) ); +new TestCase( SECTION, + "(function(a,b){ return a % b ? true : false })(1000, 0)", + false, + ((function(a,b){ return a % b ? true : false })(1000, 0)) ); + +new TestCase( SECTION, + "(function(x) { return !(x) })(0/0)", + true, + ((function(x) { return !(x) })(0/0)) ); +new TestCase( SECTION, + "!(0/0)", + true, + (!(0/0)) ); +test(); + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.3-1.js b/source/spidermonkey-tests/ecma/TypeConversion/9.3-1.js new file mode 100644 index 00000000..912b2196 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.3-1.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.3-1.js + ECMA Section: 9.3 Type Conversion: ToNumber + Description: rules for converting an argument to a number. + see 9.3.1 for cases for converting strings to numbers. + special cases: + undefined NaN + Null NaN + Boolean 1 if true; +0 if false + Number the argument ( no conversion ) + String see test 9.3.1 + Object see test 9.3-1 + + + This tests ToNumber applied to the object type, except + if object is string. See 9.3-2 for + ToNumber( String object). + + Author: christine@netscape.com + Date: 10 july 1997 + +*/ +var SECTION = "9.3-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " ToNumber"); + +// object is Number +new TestCase( SECTION, "Number(new Number())", 0, Number(new Number()) ); +new TestCase( SECTION, "typeof Number(new Number())", "number", typeof Number(new Number()) ); + +new TestCase( SECTION, "Number(new Number(Number.NaN))", Number.NaN, Number(new Number(Number.NaN)) ); +new TestCase( SECTION, "typeof Number(new Number(Number.NaN))","number", typeof Number(new Number(Number.NaN)) ); + +new TestCase( SECTION, "Number(new Number(0))", 0, Number(new Number(0)) ); +new TestCase( SECTION, "typeof Number(new Number(0))", "number", typeof Number(new Number(0)) ); + +new TestCase( SECTION, "Number(new Number(null))", 0, Number(new Number(null)) ); +new TestCase( SECTION, "typeof Number(new Number(null))", "number", typeof Number(new Number(null)) ); + + +// new TestCase( SECTION, "Number(new Number(void 0))", Number.NaN, Number(new Number(void 0)) ); +new TestCase( SECTION, "Number(new Number(true))", 1, Number(new Number(true)) ); +new TestCase( SECTION, "typeof Number(new Number(true))", "number", typeof Number(new Number(true)) ); + +new TestCase( SECTION, "Number(new Number(false))", 0, Number(new Number(false)) ); +new TestCase( SECTION, "typeof Number(new Number(false))", "number", typeof Number(new Number(false)) ); + +// object is boolean +new TestCase( SECTION, "Number(new Boolean(true))", 1, Number(new Boolean(true)) ); +new TestCase( SECTION, "typeof Number(new Boolean(true))", "number", typeof Number(new Boolean(true)) ); + +new TestCase( SECTION, "Number(new Boolean(false))", 0, Number(new Boolean(false)) ); +new TestCase( SECTION, "typeof Number(new Boolean(false))", "number", typeof Number(new Boolean(false)) ); + +// object is array +new TestCase( SECTION, "Number(new Array(2,4,8,16,32))", Number.NaN, Number(new Array(2,4,8,16,32)) ); +new TestCase( SECTION, "typeof Number(new Array(2,4,8,16,32))", "number", typeof Number(new Array(2,4,8,16,32)) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-1.js b/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-1.js new file mode 100644 index 00000000..70e80c5a --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-1.js @@ -0,0 +1,308 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.3.1-1.js + ECMA Section: 9.3 Type Conversion: ToNumber + Description: rules for converting an argument to a number. + see 9.3.1 for cases for converting strings to numbers. + special cases: + undefined NaN + Null NaN + Boolean 1 if true; +0 if false + Number the argument ( no conversion ) + String see test 9.3.1 + Object see test 9.3-1 + + + This tests ToNumber applied to the string type + + Author: christine@netscape.com + Date: 10 july 1997 + +*/ +var SECTION = "9.3.1-1"; +var VERSION = "ECMA_1"; +var TITLE = "ToNumber applied to the String type"; +var BUGNUMBER="77391"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + + +// StringNumericLiteral:::StrWhiteSpace:::StrWhiteSpaceChar StrWhiteSpace::: +// +// Name Unicode Value Escape Sequence +// <TAB> 0X0009 \t +// <SP> 0X0020 +// <FF> 0X000C \f +// <VT> 0X000B +// <CR> 0X000D \r +// <LF> 0X000A \n +new TestCase( SECTION, "Number('')", 0, Number("") ); +new TestCase( SECTION, "Number(' ')", 0, Number(" ") ); +new TestCase( SECTION, "Number(\\t)", 0, Number("\t") ); +new TestCase( SECTION, "Number(\\n)", 0, Number("\n") ); +new TestCase( SECTION, "Number(\\r)", 0, Number("\r") ); +new TestCase( SECTION, "Number(\\f)", 0, Number("\f") ); + +new TestCase( SECTION, "Number(String.fromCharCode(0x0009)", 0, Number(String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "Number(String.fromCharCode(0x0020)", 0, Number(String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "Number(String.fromCharCode(0x000C)", 0, Number(String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "Number(String.fromCharCode(0x000B)", 0, Number(String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "Number(String.fromCharCode(0x000D)", 0, Number(String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "Number(String.fromCharCode(0x000A)", 0, Number(String.fromCharCode(0x000A)) ); + +// a StringNumericLiteral may be preceeded or followed by whitespace and/or +// line terminators + +new TestCase( SECTION, "Number( ' ' + 999 )", 999, Number( ' '+999) ); +new TestCase( SECTION, "Number( '\\n' + 999 )", 999, Number( '\n' +999) ); +new TestCase( SECTION, "Number( '\\r' + 999 )", 999, Number( '\r' +999) ); +new TestCase( SECTION, "Number( '\\t' + 999 )", 999, Number( '\t' +999) ); +new TestCase( SECTION, "Number( '\\f' + 999 )", 999, Number( '\f' +999) ); + +new TestCase( SECTION, "Number( 999 + ' ' )", 999, Number( 999+' ') ); +new TestCase( SECTION, "Number( 999 + '\\n' )", 999, Number( 999+'\n' ) ); +new TestCase( SECTION, "Number( 999 + '\\r' )", 999, Number( 999+'\r' ) ); +new TestCase( SECTION, "Number( 999 + '\\t' )", 999, Number( 999+'\t' ) ); +new TestCase( SECTION, "Number( 999 + '\\f' )", 999, Number( 999+'\f' ) ); + +new TestCase( SECTION, "Number( '\\n' + 999 + '\\n' )", 999, Number( '\n' +999+'\n' ) ); +new TestCase( SECTION, "Number( '\\r' + 999 + '\\r' )", 999, Number( '\r' +999+'\r' ) ); +new TestCase( SECTION, "Number( '\\t' + 999 + '\\t' )", 999, Number( '\t' +999+'\t' ) ); +new TestCase( SECTION, "Number( '\\f' + 999 + '\\f' )", 999, Number( '\f' +999+'\f' ) ); + +new TestCase( SECTION, "Number( ' ' + '999' )", 999, Number( ' '+'999') ); +new TestCase( SECTION, "Number( '\\n' + '999' )", 999, Number( '\n' +'999') ); +new TestCase( SECTION, "Number( '\\r' + '999' )", 999, Number( '\r' +'999') ); +new TestCase( SECTION, "Number( '\\t' + '999' )", 999, Number( '\t' +'999') ); +new TestCase( SECTION, "Number( '\\f' + '999' )", 999, Number( '\f' +'999') ); + +new TestCase( SECTION, "Number( '999' + ' ' )", 999, Number( '999'+' ') ); +new TestCase( SECTION, "Number( '999' + '\\n' )", 999, Number( '999'+'\n' ) ); +new TestCase( SECTION, "Number( '999' + '\\r' )", 999, Number( '999'+'\r' ) ); +new TestCase( SECTION, "Number( '999' + '\\t' )", 999, Number( '999'+'\t' ) ); +new TestCase( SECTION, "Number( '999' + '\\f' )", 999, Number( '999'+'\f' ) ); + +new TestCase( SECTION, "Number( '\\n' + '999' + '\\n' )", 999, Number( '\n' +'999'+'\n' ) ); +new TestCase( SECTION, "Number( '\\r' + '999' + '\\r' )", 999, Number( '\r' +'999'+'\r' ) ); +new TestCase( SECTION, "Number( '\\t' + '999' + '\\t' )", 999, Number( '\t' +'999'+'\t' ) ); +new TestCase( SECTION, "Number( '\\f' + '999' + '\\f' )", 999, Number( '\f' +'999'+'\f' ) ); + +var ws = ["", + " ", + " ", + " "]; + +for (var i = 0, sz = ws.length; i < sz; i++) +{ + var start = ws[i]; + for (var j = 0; j < sz; j++) + { + var end = ws[j]; + new TestCase( SECTION, "Number( '" + start + "' + '0xA' )", 10, Number( start+'0xA') ); + + new TestCase( SECTION, "Number( '0xA' + '" + end + "' )", 10, Number( '0xA'+end) ); + + new TestCase( SECTION, "Number( '" + start + "' + '0xA' + '" + end + "' )", 10, Number( start +'0xA'+end ) ); + } +} + +new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + '99' )", 99, Number( String.fromCharCode(0x0009) + '99' ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + '99' )", 99, Number( String.fromCharCode(0x0020) + '99' ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + '99' )", 99, Number( String.fromCharCode(0x000C) + '99' ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + '99' )", 99, Number( String.fromCharCode(0x000B) + '99' ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + '99' )", 99, Number( String.fromCharCode(0x000D) + '99' ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + '99' )", 99, Number( String.fromCharCode(0x000A) + '99' ) ); + +new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + '99' + String.fromCharCode(0x0020)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + '99' + String.fromCharCode(0x000C)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + '99' + String.fromCharCode(0x000D)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + '99' + String.fromCharCode(0x000B)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + '99' + String.fromCharCode(0x000A)", 99, Number( String.fromCharCode(0x0009) + '99' + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x0009)", 99, Number( '99' + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x0020)", 99, Number( '99' + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000C)", 99, Number( '99' + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000D)", 99, Number( '99' + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000B)", 99, Number( '99' + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "Number( '99' + String.fromCharCode(0x000A)", 99, Number( '99' + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + 99 )", 99, Number( String.fromCharCode(0x0009) + 99 ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + 99 )", 99, Number( String.fromCharCode(0x0020) + 99 ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + 99 )", 99, Number( String.fromCharCode(0x000C) + 99 ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + 99 )", 99, Number( String.fromCharCode(0x000B) + 99 ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + 99 )", 99, Number( String.fromCharCode(0x000D) + 99 ) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + 99 )", 99, Number( String.fromCharCode(0x000A) + 99 ) ); + +new TestCase( SECTION, "Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x0020) + 99 + String.fromCharCode(0x0020)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000C) + 99 + String.fromCharCode(0x000C)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000D) + 99 + String.fromCharCode(0x000D)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000B) + 99 + String.fromCharCode(0x000B)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "Number( String.fromCharCode(0x000A) + 99 + String.fromCharCode(0x000A)", 99, Number( String.fromCharCode(0x0009) + 99 + String.fromCharCode(0x000A)) ); + +new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x0009)", 99, Number( 99 + String.fromCharCode(0x0009)) ); +new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x0020)", 99, Number( 99 + String.fromCharCode(0x0020)) ); +new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000C)", 99, Number( 99 + String.fromCharCode(0x000C)) ); +new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000D)", 99, Number( 99 + String.fromCharCode(0x000D)) ); +new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000B)", 99, Number( 99 + String.fromCharCode(0x000B)) ); +new TestCase( SECTION, "Number( 99 + String.fromCharCode(0x000A)", 99, Number( 99 + String.fromCharCode(0x000A)) ); + + +// StrNumericLiteral:::StrDecimalLiteral:::Infinity + +new TestCase( SECTION, "Number('Infinity')", Math.pow(10,10000), Number("Infinity") ); +new TestCase( SECTION, "Number('-Infinity')", -Math.pow(10,10000), Number("-Infinity") ); +new TestCase( SECTION, "Number('+Infinity')", Math.pow(10,10000), Number("+Infinity") ); + +// StrNumericLiteral::: StrDecimalLiteral ::: DecimalDigits . DecimalDigits opt ExponentPart opt + +new TestCase( SECTION, "Number('0')", 0, Number("0") ); +new TestCase( SECTION, "Number('-0')", -0, Number("-0") ); +new TestCase( SECTION, "Number('+0')", 0, Number("+0") ); + +new TestCase( SECTION, "Number('1')", 1, Number("1") ); +new TestCase( SECTION, "Number('-1')", -1, Number("-1") ); +new TestCase( SECTION, "Number('+1')", 1, Number("+1") ); + +new TestCase( SECTION, "Number('2')", 2, Number("2") ); +new TestCase( SECTION, "Number('-2')", -2, Number("-2") ); +new TestCase( SECTION, "Number('+2')", 2, Number("+2") ); + +new TestCase( SECTION, "Number('3')", 3, Number("3") ); +new TestCase( SECTION, "Number('-3')", -3, Number("-3") ); +new TestCase( SECTION, "Number('+3')", 3, Number("+3") ); + +new TestCase( SECTION, "Number('4')", 4, Number("4") ); +new TestCase( SECTION, "Number('-4')", -4, Number("-4") ); +new TestCase( SECTION, "Number('+4')", 4, Number("+4") ); + +new TestCase( SECTION, "Number('5')", 5, Number("5") ); +new TestCase( SECTION, "Number('-5')", -5, Number("-5") ); +new TestCase( SECTION, "Number('+5')", 5, Number("+5") ); + +new TestCase( SECTION, "Number('6')", 6, Number("6") ); +new TestCase( SECTION, "Number('-6')", -6, Number("-6") ); +new TestCase( SECTION, "Number('+6')", 6, Number("+6") ); + +new TestCase( SECTION, "Number('7')", 7, Number("7") ); +new TestCase( SECTION, "Number('-7')", -7, Number("-7") ); +new TestCase( SECTION, "Number('+7')", 7, Number("+7") ); + +new TestCase( SECTION, "Number('8')", 8, Number("8") ); +new TestCase( SECTION, "Number('-8')", -8, Number("-8") ); +new TestCase( SECTION, "Number('+8')", 8, Number("+8") ); + +new TestCase( SECTION, "Number('9')", 9, Number("9") ); +new TestCase( SECTION, "Number('-9')", -9, Number("-9") ); +new TestCase( SECTION, "Number('+9')", 9, Number("+9") ); + +new TestCase( SECTION, "Number('3.14159')", 3.14159, Number("3.14159") ); +new TestCase( SECTION, "Number('-3.14159')", -3.14159, Number("-3.14159") ); +new TestCase( SECTION, "Number('+3.14159')", 3.14159, Number("+3.14159") ); + +new TestCase( SECTION, "Number('3.')", 3, Number("3.") ); +new TestCase( SECTION, "Number('-3.')", -3, Number("-3.") ); +new TestCase( SECTION, "Number('+3.')", 3, Number("+3.") ); + +new TestCase( SECTION, "Number('3.e1')", 30, Number("3.e1") ); +new TestCase( SECTION, "Number('-3.e1')", -30, Number("-3.e1") ); +new TestCase( SECTION, "Number('+3.e1')", 30, Number("+3.e1") ); + +new TestCase( SECTION, "Number('3.e+1')", 30, Number("3.e+1") ); +new TestCase( SECTION, "Number('-3.e+1')", -30, Number("-3.e+1") ); +new TestCase( SECTION, "Number('+3.e+1')", 30, Number("+3.e+1") ); + +new TestCase( SECTION, "Number('3.e-1')", .30, Number("3.e-1") ); +new TestCase( SECTION, "Number('-3.e-1')", -.30, Number("-3.e-1") ); +new TestCase( SECTION, "Number('+3.e-1')", .30, Number("+3.e-1") ); + +// StrDecimalLiteral::: .DecimalDigits ExponentPart opt + +new TestCase( SECTION, "Number('.00001')", 0.00001, Number(".00001") ); +new TestCase( SECTION, "Number('+.00001')", 0.00001, Number("+.00001") ); +new TestCase( SECTION, "Number('-0.0001')", -0.00001, Number("-.00001") ); + +new TestCase( SECTION, "Number('.01e2')", 1, Number(".01e2") ); +new TestCase( SECTION, "Number('+.01e2')", 1, Number("+.01e2") ); +new TestCase( SECTION, "Number('-.01e2')", -1, Number("-.01e2") ); + +new TestCase( SECTION, "Number('.01e+2')", 1, Number(".01e+2") ); +new TestCase( SECTION, "Number('+.01e+2')", 1, Number("+.01e+2") ); +new TestCase( SECTION, "Number('-.01e+2')", -1, Number("-.01e+2") ); + +new TestCase( SECTION, "Number('.01e-2')", 0.0001, Number(".01e-2") ); +new TestCase( SECTION, "Number('+.01e-2')", 0.0001, Number("+.01e-2") ); +new TestCase( SECTION, "Number('-.01e-2')", -0.0001, Number("-.01e-2") ); + +// StrDecimalLiteral::: DecimalDigits ExponentPart opt + +new TestCase( SECTION, "Number('1234e5')", 123400000, Number("1234e5") ); +new TestCase( SECTION, "Number('+1234e5')", 123400000, Number("+1234e5") ); +new TestCase( SECTION, "Number('-1234e5')", -123400000, Number("-1234e5") ); + +new TestCase( SECTION, "Number('1234e+5')", 123400000, Number("1234e+5") ); +new TestCase( SECTION, "Number('+1234e+5')", 123400000, Number("+1234e+5") ); +new TestCase( SECTION, "Number('-1234e+5')", -123400000, Number("-1234e+5") ); + +new TestCase( SECTION, "Number('1234e-5')", 0.01234, Number("1234e-5") ); +new TestCase( SECTION, "Number('+1234e-5')", 0.01234, Number("+1234e-5") ); +new TestCase( SECTION, "Number('-1234e-5')", -0.01234, Number("-1234e-5") ); + +// StrNumericLiteral::: HexIntegerLiteral + +new TestCase( SECTION, "Number('0x0')", 0, Number("0x0")); +new TestCase( SECTION, "Number('0x1')", 1, Number("0x1")); +new TestCase( SECTION, "Number('0x2')", 2, Number("0x2")); +new TestCase( SECTION, "Number('0x3')", 3, Number("0x3")); +new TestCase( SECTION, "Number('0x4')", 4, Number("0x4")); +new TestCase( SECTION, "Number('0x5')", 5, Number("0x5")); +new TestCase( SECTION, "Number('0x6')", 6, Number("0x6")); +new TestCase( SECTION, "Number('0x7')", 7, Number("0x7")); +new TestCase( SECTION, "Number('0x8')", 8, Number("0x8")); +new TestCase( SECTION, "Number('0x9')", 9, Number("0x9")); +new TestCase( SECTION, "Number('0xa')", 10, Number("0xa")); +new TestCase( SECTION, "Number('0xb')", 11, Number("0xb")); +new TestCase( SECTION, "Number('0xc')", 12, Number("0xc")); +new TestCase( SECTION, "Number('0xd')", 13, Number("0xd")); +new TestCase( SECTION, "Number('0xe')", 14, Number("0xe")); +new TestCase( SECTION, "Number('0xf')", 15, Number("0xf")); +new TestCase( SECTION, "Number('0xA')", 10, Number("0xA")); +new TestCase( SECTION, "Number('0xB')", 11, Number("0xB")); +new TestCase( SECTION, "Number('0xC')", 12, Number("0xC")); +new TestCase( SECTION, "Number('0xD')", 13, Number("0xD")); +new TestCase( SECTION, "Number('0xE')", 14, Number("0xE")); +new TestCase( SECTION, "Number('0xF')", 15, Number("0xF")); + +new TestCase( SECTION, "Number('0X0')", 0, Number("0X0")); +new TestCase( SECTION, "Number('0X1')", 1, Number("0X1")); +new TestCase( SECTION, "Number('0X2')", 2, Number("0X2")); +new TestCase( SECTION, "Number('0X3')", 3, Number("0X3")); +new TestCase( SECTION, "Number('0X4')", 4, Number("0X4")); +new TestCase( SECTION, "Number('0X5')", 5, Number("0X5")); +new TestCase( SECTION, "Number('0X6')", 6, Number("0X6")); +new TestCase( SECTION, "Number('0X7')", 7, Number("0X7")); +new TestCase( SECTION, "Number('0X8')", 8, Number("0X8")); +new TestCase( SECTION, "Number('0X9')", 9, Number("0X9")); +new TestCase( SECTION, "Number('0Xa')", 10, Number("0Xa")); +new TestCase( SECTION, "Number('0Xb')", 11, Number("0Xb")); +new TestCase( SECTION, "Number('0Xc')", 12, Number("0Xc")); +new TestCase( SECTION, "Number('0Xd')", 13, Number("0Xd")); +new TestCase( SECTION, "Number('0Xe')", 14, Number("0Xe")); +new TestCase( SECTION, "Number('0Xf')", 15, Number("0Xf")); +new TestCase( SECTION, "Number('0XA')", 10, Number("0XA")); +new TestCase( SECTION, "Number('0XB')", 11, Number("0XB")); +new TestCase( SECTION, "Number('0XC')", 12, Number("0XC")); +new TestCase( SECTION, "Number('0XD')", 13, Number("0XD")); +new TestCase( SECTION, "Number('0XE')", 14, Number("0XE")); +new TestCase( SECTION, "Number('0XF')", 15, Number("0XF")); + +test(); + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-2.js b/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-2.js new file mode 100644 index 00000000..67134598 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-2.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.3.1-2.js + ECMA Section: 9.3 Type Conversion: ToNumber + Description: rules for converting an argument to a number. + see 9.3.1 for cases for converting strings to numbers. + special cases: + undefined NaN + Null NaN + Boolean 1 if true; +0 if false + Number the argument ( no conversion ) + String see test 9.3.1 + Object see test 9.3-1 + + This tests special cases of ToNumber(string) that are + not covered in 9.3.1-1.js. + + Author: christine@netscape.com + Date: 10 july 1997 + +*/ +var SECTION = "9.3.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "ToNumber applied to the String type"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// A StringNumericLiteral may not use octal notation + +new TestCase( SECTION, "Number(00)", 0, Number("00")); +new TestCase( SECTION, "Number(01)", 1, Number("01")); +new TestCase( SECTION, "Number(02)", 2, Number("02")); +new TestCase( SECTION, "Number(03)", 3, Number("03")); +new TestCase( SECTION, "Number(04)", 4, Number("04")); +new TestCase( SECTION, "Number(05)", 5, Number("05")); +new TestCase( SECTION, "Number(06)", 6, Number("06")); +new TestCase( SECTION, "Number(07)", 7, Number("07")); +new TestCase( SECTION, "Number(010)", 10, Number("010")); +new TestCase( SECTION, "Number(011)", 11, Number("011")); + +// A StringNumericLIteral may have any number of leading 0 digits + +new TestCase( SECTION, "Number(001)", 1, Number("001")); +new TestCase( SECTION, "Number(0001)", 1, Number("0001")); + +test(); + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-3.js b/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-3.js new file mode 100644 index 00000000..18544e95 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.3.1-3.js @@ -0,0 +1,718 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.3.1-3.js + ECMA Section: 9.3 Type Conversion: ToNumber + Description: rules for converting an argument to a number. + see 9.3.1 for cases for converting strings to numbers. + special cases: + undefined NaN + Null NaN + Boolean 1 if true; +0 if false + Number the argument ( no conversion ) + String see test 9.3.1 + Object see test 9.3-1 + + + Test cases provided by waldemar. + + + Author: christine@netscape.com + Date: 10 june 1998 + +*/ + +var SECTION = "9.3.1-3"; +var VERSION = "ECMA_1"; +var BUGNUMBER="129087"; + +var TITLE = "Number To String, String To Number"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +// test case from http://scopus.mcom.com/bugsplat/show_bug.cgi?id=312954 +var z = 0; + +new TestCase( + SECTION, + "var z = 0; print(1/-z)", + -Infinity, + 1/-z ); + + + + + +// test cases from bug http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122882 + + + +new TestCase( SECTION, + '- -"0x80000000"', + 2147483648, + - -"0x80000000" ); + +new TestCase( SECTION, + '- -"0x100000000"', + 4294967296, + - -"0x100000000" ); + +new TestCase( SECTION, + '- "-0x123456789abcde8"', + NaN, + - "-0x123456789abcde8" ); + +new TestCase( SECTION, + '- "+0x123456789abcde8"', + NaN, + - "+0x123456789abcde8" ); + +// Convert some large numbers to string + + +new TestCase( SECTION, + "1e2000 +''", + "Infinity", + 1e2000 +"" ); + +new TestCase( SECTION, + "1e2000", + Infinity, + 1e2000 ); + +new TestCase( SECTION, + "-1e2000 +''", + "-Infinity", + -1e2000 +"" ); + +new TestCase( SECTION, + "-\"1e2000\"", + -Infinity, + -"1e2000" ); + +new TestCase( SECTION, + "-\"-1e2000\" +''", + "Infinity", + -"-1e2000" +"" ); + +new TestCase( SECTION, + "1e-2000", + 0, + 1e-2000 ); + +new TestCase( SECTION, + "1/1e-2000", + Infinity, + 1/1e-2000 ); + +// convert some strings to large numbers + +new TestCase( SECTION, + "1/-1e-2000", + -Infinity, + 1/-1e-2000 ); + +new TestCase( SECTION, + "1/\"1e-2000\"", + Infinity, + 1/"1e-2000" ); + +new TestCase( SECTION, + "1/\"-1e-2000\"", + -Infinity, + 1/"-1e-2000" ); + +new TestCase( SECTION, + "parseFloat(\"1e2000\")", + Infinity, + parseFloat("1e2000") ); + +new TestCase( SECTION, + "parseFloat(\"1e-2000\")", + 0, + parseFloat("1e-2000") ); + +new TestCase( SECTION, + "1.7976931348623157E+308", + 1.7976931348623157e+308, + 1.7976931348623157E+308 ); + +new TestCase( SECTION, + "1.7976931348623158e+308", + 1.7976931348623157e+308, + 1.7976931348623158e+308 ); + +new TestCase( SECTION, + "1.7976931348623159e+308", + Infinity, + 1.7976931348623159e+308 ); + +s = + "17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068"; + +print("s = " + s); +print("-s = " + (-s)); + +new TestCase( SECTION, + "s = " + s +"; s +="+ + "\"190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779\""+ + + +"; s", + "17976931348623158079372897140530341507993413271003782693617377898044496829276475094664901797758720709633028641669288791094655554785194040263065748867150582068190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779", + s += + "190890200070838367627385484581771153176447573027006985557136695962284291481986083493647529271907416844436551070434271155969950809304288017790417449779" + ); + +s1 = s+1; + +print("s1 = " + s1); +print("-s1 = " + (-s1)); + +new TestCase( SECTION, + "s1 = s+1; s1", + "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497791", + s1 ); + +/***** This answer is preferred but -Infinity is also acceptable here *****/ + +new TestCase( SECTION, + "-s1 == Infinity || s1 == 1.7976931348623157e+308", + true, + -s1 == Infinity || s1 == 1.7976931348623157e+308 ); + +s2 = s + 2; + +print("s2 = " + s2); +print("-s2 = " + (-s2)); + +new TestCase( SECTION, + "s2 = s+2; s2", + "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497792", + s2 ); + +// ***** This answer is preferred but -1.7976931348623157e+308 is also acceptable here ***** +new TestCase( SECTION, + "-s2 == -Infinity || -s2 == -1.7976931348623157e+308 ", + true, + -s2 == -Infinity || -s2 == -1.7976931348623157e+308 ); + +s3 = s+3; + +print("s3 = " + s3); +print("-s3 = " + (-s3)); + +new TestCase( SECTION, + "s3 = s+3; s3", + "179769313486231580793728971405303415079934132710037826936173778980444968292764750946649017977587207096330286416692887910946555547851940402630657488671505820681908902000708383676273854845817711531764475730270069855571366959622842914819860834936475292719074168444365510704342711559699508093042880177904174497793", + s3 ); + +//***** This answer is preferred but -1.7976931348623157e+308 is also acceptable here ***** + +new TestCase( SECTION, + "-s3 == -Infinity || -s3 == -1.7976931348623157e+308", + true, + -s3 == -Infinity || -s3 == -1.7976931348623157e+308 ); + + +//***** This answer is preferred but Infinity is also acceptable here ***** + +new TestCase( SECTION, + "parseInt(s1,10) == 1.7976931348623157e+308 || parseInt(s1,10) == Infinity", + true, + parseInt(s1,10) == 1.7976931348623157e+308 || parseInt(s1,10) == Infinity ); + +//***** This answer is preferred but 1.7976931348623157e+308 is also acceptable here ***** +new TestCase( SECTION, + "parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308", + true , + parseInt(s2,10) == Infinity || parseInt(s2,10) == 1.7976931348623157e+308 ); + +//***** This answer is preferred but Infinity is also acceptable here ***** + +new TestCase( SECTION, + "parseInt(s1) == 1.7976931348623157e+308 || parseInt(s1) == Infinity", + true, + parseInt(s1) == 1.7976931348623157e+308 || parseInt(s1) == Infinity); + +//***** This answer is preferred but 1.7976931348623157e+308 is also acceptable here ***** +new TestCase( SECTION, + "parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308", + true, + parseInt(s2) == Infinity || parseInt(s2) == 1.7976931348623157e+308 ); + +new TestCase( SECTION, + "0x12345678", + 305419896, + 0x12345678 ); + +new TestCase( SECTION, + "0x80000000", + 2147483648, + 0x80000000 ); + +new TestCase( SECTION, + "0xffffffff", + 4294967295, + 0xffffffff ); + +new TestCase( SECTION, + "0x100000000", + 4294967296, + 0x100000000 ); + +new TestCase( SECTION, + "077777777777777777", + 2251799813685247, + 077777777777777777 ); + +new TestCase( SECTION, + "077777777777777776", + 2251799813685246, + 077777777777777776 ); + +new TestCase( SECTION, + "0x1fffffffffffff", + 9007199254740991, + 0x1fffffffffffff ); + +new TestCase( SECTION, + "0x20000000000000", + 9007199254740992, + 0x20000000000000 ); + +new TestCase( SECTION, + "0x20123456789abc", + 9027215253084860, + 0x20123456789abc ); + +new TestCase( SECTION, + "0x20123456789abd", + 9027215253084860, + 0x20123456789abd ); + +new TestCase( SECTION, + "0x20123456789abe", + 9027215253084862, + 0x20123456789abe ); + +new TestCase( SECTION, + "0x20123456789abf", + 9027215253084864, + 0x20123456789abf ); + +/***** These test the round-to-nearest-or-even-if-equally-close rule *****/ + +new TestCase( SECTION, + "0x1000000000000080", + 1152921504606847000, + 0x1000000000000080 ); + +new TestCase( SECTION, + "0x1000000000000081", + 1152921504606847200, + 0x1000000000000081 ); + +new TestCase( SECTION, + "0x1000000000000100", + 1152921504606847200, + 0x1000000000000100 ); +new TestCase( SECTION, + "0x100000000000017f", + 1152921504606847200, + 0x100000000000017f ); + +new TestCase( SECTION, + "0x1000000000000180", + 1152921504606847500, + 0x1000000000000180 ); + +new TestCase( SECTION, + "0x1000000000000181", + 1152921504606847500, + 0x1000000000000181 ); + +new TestCase( SECTION, + "0x10000000000001f0", + 1152921504606847500, + 0x10000000000001f0 ); + +new TestCase( SECTION, + "0x1000000000000200", + 1152921504606847500, + 0x1000000000000200 ); + +new TestCase( SECTION, + "0x100000000000027f", + 1152921504606847500, + 0x100000000000027f ); + +new TestCase( SECTION, + "0x1000000000000280", + 1152921504606847500, + 0x1000000000000280 ); + +new TestCase( SECTION, + "0x1000000000000281", + 1152921504606847700, + 0x1000000000000281 ); + +new TestCase( SECTION, + "0x10000000000002ff", + 1152921504606847700, + 0x10000000000002ff ); + +new TestCase( SECTION, + "0x1000000000000300", + 1152921504606847700, + 0x1000000000000300 ); + +new TestCase( SECTION, + "0x10000000000000000", + 18446744073709552000, + 0x10000000000000000 ); + +new TestCase( SECTION, + "parseInt(\"000000100000000100100011010001010110011110001001101010111100\",2)", + 9027215253084860, + parseInt("000000100000000100100011010001010110011110001001101010111100",2) ); + +new TestCase( SECTION, + "parseInt(\"000000100000000100100011010001010110011110001001101010111101\",2)", + 9027215253084860, + parseInt("000000100000000100100011010001010110011110001001101010111101",2) ); + +new TestCase( SECTION, + "parseInt(\"000000100000000100100011010001010110011110001001101010111111\",2)", + 9027215253084864, + parseInt("000000100000000100100011010001010110011110001001101010111111",2) ); + +new TestCase( SECTION, + "parseInt(\"0000001000000001001000110100010101100111100010011010101111010\",2)", + 18054430506169720, + parseInt("0000001000000001001000110100010101100111100010011010101111010",2)); + +new TestCase( SECTION, + "parseInt(\"0000001000000001001000110100010101100111100010011010101111011\",2)", + 18054430506169724, + parseInt("0000001000000001001000110100010101100111100010011010101111011",2) ); + +new TestCase( SECTION, + "parseInt(\"0000001000000001001000110100010101100111100010011010101111100\",2)", + 18054430506169724, + parseInt("0000001000000001001000110100010101100111100010011010101111100",2)); + +new TestCase( SECTION, + "parseInt(\"0000001000000001001000110100010101100111100010011010101111110\",2)", + 18054430506169728, + parseInt("0000001000000001001000110100010101100111100010011010101111110",2)); + +new TestCase( SECTION, + "parseInt(\"yz\",35)", + 34, + parseInt("yz",35) ); + +new TestCase( SECTION, + "parseInt(\"yz\",36)", + 1259, + parseInt("yz",36) ); + +new TestCase( SECTION, + "parseInt(\"yz\",37)", + NaN, + parseInt("yz",37) ); + +new TestCase( SECTION, + "parseInt(\"+77\")", + 77, + parseInt("+77") ); + +new TestCase( SECTION, + "parseInt(\"-77\",9)", + -70, + parseInt("-77",9) ); + +new TestCase( SECTION, + "parseInt(\"\\u20001234\\u2000\")", + 1234, + parseInt("\u20001234\u2000") ); + +new TestCase( SECTION, + "parseInt(\"123456789012345678\")", + 123456789012345680, + parseInt("123456789012345678") ); + +new TestCase( SECTION, + "parseInt(\"9\",8)", + NaN, + parseInt("9",8) ); + +new TestCase( SECTION, + "parseInt(\"1e2\")", + 1, + parseInt("1e2") ); + +new TestCase( SECTION, + "parseInt(\"1.9999999999999999999\")", + 1, + parseInt("1.9999999999999999999") ); + +new TestCase( SECTION, + "parseInt(\"0x10\")", + 16, + parseInt("0x10") ); + +new TestCase( SECTION, + "parseInt(\"0x10\",10)", + 0, + parseInt("0x10",10) ); + +new TestCase( SECTION, + "parseInt(\"0022\")", + 22, + parseInt("0022") ); + +new TestCase( SECTION, + "parseInt(\"0022\", 8)", + 18, + parseInt("0022", 8) ); + +new TestCase( SECTION, + "parseInt(\"0022\",10)", + 22, + parseInt("0022",10) ); + +new TestCase( SECTION, + "parseInt(\"0x1000000000000080\")", + 1152921504606847000, + parseInt("0x1000000000000080") ); + +new TestCase( SECTION, + "parseInt(\"0x1000000000000081\")", + 1152921504606847200, + parseInt("0x1000000000000081") ); + +s = + "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + +new TestCase( SECTION, "s = "+ + "\"0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";"+ + "s", + "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + s ); + + +new TestCase( SECTION, "s +="+ + "\"0000000000000000000000000000000000000\"; s", + "0xFFFFFFFFFFFFF800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + s += "0000000000000000000000000000000000000" ); + +new TestCase( SECTION, "-s", + -1.7976931348623157e+308, + -s ); + +s = + "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + +new TestCase( SECTION, "s ="+ + "\"0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";"+ + "s", + "0xFFFFFFFFFFFFF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + s ); + +new TestCase( SECTION, + "s += \"0000000000000000000000000000000000001\"", + "0xFFFFFFFFFFFFF800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + s += "0000000000000000000000000000000000001" ); + +new TestCase( SECTION, + "-s", + -1.7976931348623157e+308, + -s ); + +s = + "0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + +new TestCase( SECTION, + "s ="+ + "\"0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";"+ + "s", + "0xFFFFFFFFFFFFFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + s ); + + +new TestCase( SECTION, + "s += \"0000000000000000000000000000000000000\"", + "0xFFFFFFFFFFFFFC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + s += "0000000000000000000000000000000000000"); + + +new TestCase( SECTION, + "-s", + -Infinity, + -s ); + +s = + "0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + +new TestCase( SECTION, + "s = "+ + "\"0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\";s", + "0xFFFFFFFFFFFFFB0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + s); + +new TestCase( SECTION, + "s += \"0000000000000000000000000000000000001\"", + "0xFFFFFFFFFFFFFB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + s += "0000000000000000000000000000000000001" ); + +new TestCase( SECTION, + "-s", + -1.7976931348623157e+308, + -s ); + +new TestCase( SECTION, + "s += \"0\"", + "0xFFFFFFFFFFFFFB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010", + s += "0" ); + +new TestCase( SECTION, + "-s", + -Infinity, + -s ); + +new TestCase( SECTION, + "parseInt(s)", + Infinity, + parseInt(s) ); + +new TestCase( SECTION, + "parseInt(s,32)", + 0, + parseInt(s,32) ); + +new TestCase( SECTION, + "parseInt(s,36)", + Infinity, + parseInt(s,36) ); + +new TestCase( SECTION, + "-\"\"", + 0, + -"" ); + +new TestCase( SECTION, + "-\" \"", + 0, + -" " ); + +new TestCase( SECTION, + "-\"999\"", + -999, + -"999" ); + +new TestCase( SECTION, + "-\" 999\"", + -999, + -" 999" ); + +new TestCase( SECTION, + "-\"\\t999\"", + -999, + -"\t999" ); + +new TestCase( SECTION, + "-\"013 \"", + -13, + -"013 " ); + +new TestCase( SECTION, + "-\"999\\t\"", + -999, + -"999\t" ); + +new TestCase( SECTION, + "-\"-Infinity\"", + Infinity, + -"-Infinity" ); + +new TestCase( SECTION, + "-\"+Infinity\"", + -Infinity, + -"+Infinity" ); + +new TestCase( SECTION, + "-\"+Infiniti\"", + NaN, + -"+Infiniti" ); + +new TestCase( SECTION, + "- -\"0x80000000\"", + 2147483648, + - -"0x80000000" ); + +new TestCase( SECTION, + "- -\"0x100000000\"", + 4294967296, + - -"0x100000000" ); + +new TestCase( SECTION, + "- \"-0x123456789abcde8\"", + NaN, + - "-0x123456789abcde8" ); + +new TestCase( SECTION, + "- \"+0x123456789abcde8\"", + NaN, + - "+0x123456789abcde8" ); + +// the following two tests are not strictly ECMA 1.0 + +new TestCase( SECTION, + "-\"\\u20001234\\u2001\"", + -1234, + -"\u20001234\u2001" ); + +new TestCase( SECTION, + "-\"\\u20001234\\0\"", + NaN, + -"\u20001234\0" ); + +new TestCase( SECTION, + "-\"0x10\"", + -16, + -"0x10" ); + +new TestCase( SECTION, + "-\"+\"", + NaN, + -"+" ); + +new TestCase( SECTION, + "-\"-\"", + NaN, + -"-" ); + +new TestCase( SECTION, + "-\"-0-\"", + NaN, + -"-0-" ); + +new TestCase( SECTION, + "-\"1e-\"", + NaN, + -"1e-" ); + +new TestCase( SECTION, + "-\"1e-1\"", + -0.1, + -"1e-1" ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.3.js b/source/spidermonkey-tests/ecma/TypeConversion/9.3.js new file mode 100644 index 00000000..21e2b3d8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.3.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.3.js + ECMA Section: 9.3 Type Conversion: ToNumber + Description: rules for converting an argument to a number. + see 9.3.1 for cases for converting strings to numbers. + special cases: + undefined NaN + Null NaN + Boolean 1 if true; +0 if false + Number the argument ( no conversion ) + String see test 9.3.1 + Object see test 9.3-1 + + For ToNumber applied to the String type, see test 9.3.1. + For ToNumber applied to the object type, see test 9.3-1. + + Author: christine@netscape.com + Date: 10 july 1997 + +*/ +var SECTION = "9.3"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "ToNumber"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// special cases here + +new TestCase( SECTION, "Number()", 0, Number() ); +new TestCase( SECTION, "Number(eval('var x'))", Number.NaN, Number(eval("var x")) ); +new TestCase( SECTION, "Number(void 0)", Number.NaN, Number(void 0) ); +new TestCase( SECTION, "Number(null)", 0, Number(null) ); +new TestCase( SECTION, "Number(true)", 1, Number(true) ); +new TestCase( SECTION, "Number(false)", 0, Number(false) ); +new TestCase( SECTION, "Number(0)", 0, Number(0) ); +new TestCase( SECTION, "Number(-0)", -0, Number(-0) ); +new TestCase( SECTION, "Number(1)", 1, Number(1) ); +new TestCase( SECTION, "Number(-1)", -1, Number(-1) ); +new TestCase( SECTION, "Number(Number.MAX_VALUE)", 1.7976931348623157e308, Number(Number.MAX_VALUE) ); +new TestCase( SECTION, "Number(Number.MIN_VALUE)", 5e-324, Number(Number.MIN_VALUE) ); + +new TestCase( SECTION, "Number(Number.NaN)", Number.NaN, Number(Number.NaN) ); +new TestCase( SECTION, "Number(Number.POSITIVE_INFINITY)", Number.POSITIVE_INFINITY, Number(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "Number(Number.NEGATIVE_INFINITY)", Number.NEGATIVE_INFINITY, Number(Number.NEGATIVE_INFINITY) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.4-1.js b/source/spidermonkey-tests/ecma/TypeConversion/9.4-1.js new file mode 100644 index 00000000..61a42227 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.4-1.js @@ -0,0 +1,78 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.4-1.js + ECMA Section: 9.4 ToInteger + Description: 1. Call ToNumber on the input argument + 2. If Result(1) is NaN, return +0 + 3. If Result(1) is +0, -0, Infinity, or -Infinity, + return Result(1). + 4. Compute sign(Result(1)) * floor(abs(Result(1))). + 5. Return Result(4). + + To test ToInteger, this test uses new Date(value), + 15.9.3.7. The Date constructor sets the [[Value]] + property of the new object to TimeClip(value), which + uses the rules: + + TimeClip(time) + 1. If time is not finite, return NaN + 2. If abs(Result(1)) > 8.64e15, return NaN + 3. Return an implementation dependent choice of either + ToInteger(Result(2)) or ToInteger(Result(2)) + (+0) + (Adding a positive 0 converts -0 to +0). + + This tests ToInteger for values -8.64e15 > value > 8.64e15, + not including -0 and +0. + + For additional special cases (0, +0, Infinity, -Infinity, + and NaN, see 9.4-2.js). For value is String, see 9.4-3.js. + + Author: christine@netscape.com + Date: 10 july 1997 + +*/ +var SECTION = "9.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "ToInteger"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some special cases + +new TestCase( SECTION, "td = new Date(Number.NaN); td.valueOf()", Number.NaN, eval("td = new Date(Number.NaN); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.POSITIVE_INFINITY); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.NEGATIVE_INFINITY); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-0); td.valueOf()", -0, eval("td = new Date(-0); td.valueOf()" ) ); +new TestCase( SECTION, "td = new Date(0); td.valueOf()", 0, eval("td = new Date(0); td.valueOf()") ); + +// value is not an integer + +new TestCase( SECTION, "td = new Date(3.14159); td.valueOf()", 3, eval("td = new Date(3.14159); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(Math.PI); td.valueOf()", 3, eval("td = new Date(Math.PI); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-Math.PI);td.valueOf()", -3, eval("td = new Date(-Math.PI);td.valueOf()") ); +new TestCase( SECTION, "td = new Date(3.14159e2); td.valueOf()", 314, eval("td = new Date(3.14159e2); td.valueOf()") ); + +new TestCase( SECTION, "td = new Date(.692147e1); td.valueOf()", 6, eval("td = new Date(.692147e1);td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-.692147e1);td.valueOf()", -6, eval("td = new Date(-.692147e1);td.valueOf()") ); + +// value is not a number + +new TestCase( SECTION, "td = new Date(true); td.valueOf()", 1, eval("td = new Date(true); td.valueOf()" ) ); +new TestCase( SECTION, "td = new Date(false); td.valueOf()", 0, eval("td = new Date(false); td.valueOf()") ); + +new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") ); + +// edge cases +new TestCase( SECTION, "td = new Date(8.64e15); td.valueOf()", 8.64e15, eval("td = new Date(8.64e15); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-8.64e15); td.valueOf()", -8.64e15, eval("td = new Date(-8.64e15); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(8.64e-15); td.valueOf()", 0, eval("td = new Date(8.64e-15); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-8.64e-15); td.valueOf()", 0, eval("td = new Date(-8.64e-15); td.valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.4-2.js b/source/spidermonkey-tests/ecma/TypeConversion/9.4-2.js new file mode 100644 index 00000000..61a42227 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.4-2.js @@ -0,0 +1,78 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.4-1.js + ECMA Section: 9.4 ToInteger + Description: 1. Call ToNumber on the input argument + 2. If Result(1) is NaN, return +0 + 3. If Result(1) is +0, -0, Infinity, or -Infinity, + return Result(1). + 4. Compute sign(Result(1)) * floor(abs(Result(1))). + 5. Return Result(4). + + To test ToInteger, this test uses new Date(value), + 15.9.3.7. The Date constructor sets the [[Value]] + property of the new object to TimeClip(value), which + uses the rules: + + TimeClip(time) + 1. If time is not finite, return NaN + 2. If abs(Result(1)) > 8.64e15, return NaN + 3. Return an implementation dependent choice of either + ToInteger(Result(2)) or ToInteger(Result(2)) + (+0) + (Adding a positive 0 converts -0 to +0). + + This tests ToInteger for values -8.64e15 > value > 8.64e15, + not including -0 and +0. + + For additional special cases (0, +0, Infinity, -Infinity, + and NaN, see 9.4-2.js). For value is String, see 9.4-3.js. + + Author: christine@netscape.com + Date: 10 july 1997 + +*/ +var SECTION = "9.4-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "ToInteger"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +// some special cases + +new TestCase( SECTION, "td = new Date(Number.NaN); td.valueOf()", Number.NaN, eval("td = new Date(Number.NaN); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.POSITIVE_INFINITY); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-Infinity); td.valueOf()", Number.NaN, eval("td = new Date(Number.NEGATIVE_INFINITY); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-0); td.valueOf()", -0, eval("td = new Date(-0); td.valueOf()" ) ); +new TestCase( SECTION, "td = new Date(0); td.valueOf()", 0, eval("td = new Date(0); td.valueOf()") ); + +// value is not an integer + +new TestCase( SECTION, "td = new Date(3.14159); td.valueOf()", 3, eval("td = new Date(3.14159); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(Math.PI); td.valueOf()", 3, eval("td = new Date(Math.PI); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-Math.PI);td.valueOf()", -3, eval("td = new Date(-Math.PI);td.valueOf()") ); +new TestCase( SECTION, "td = new Date(3.14159e2); td.valueOf()", 314, eval("td = new Date(3.14159e2); td.valueOf()") ); + +new TestCase( SECTION, "td = new Date(.692147e1); td.valueOf()", 6, eval("td = new Date(.692147e1);td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-.692147e1);td.valueOf()", -6, eval("td = new Date(-.692147e1);td.valueOf()") ); + +// value is not a number + +new TestCase( SECTION, "td = new Date(true); td.valueOf()", 1, eval("td = new Date(true); td.valueOf()" ) ); +new TestCase( SECTION, "td = new Date(false); td.valueOf()", 0, eval("td = new Date(false); td.valueOf()") ); + +new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(new Number(Math.PI)); td.valueOf()", 3, eval("td = new Date(new Number(Math.PI)); td.valueOf()") ); + +// edge cases +new TestCase( SECTION, "td = new Date(8.64e15); td.valueOf()", 8.64e15, eval("td = new Date(8.64e15); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-8.64e15); td.valueOf()", -8.64e15, eval("td = new Date(-8.64e15); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(8.64e-15); td.valueOf()", 0, eval("td = new Date(8.64e-15); td.valueOf()") ); +new TestCase( SECTION, "td = new Date(-8.64e-15); td.valueOf()", 0, eval("td = new Date(-8.64e-15); td.valueOf()") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.5-2.js b/source/spidermonkey-tests/ecma/TypeConversion/9.5-2.js new file mode 100644 index 00000000..6f39ac54 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.5-2.js @@ -0,0 +1,139 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.5-2.js + ECMA Section: 9.5 Type Conversion: ToInt32 + Description: rules for converting an argument to a signed 32 bit integer + + this test uses << 0 to convert the argument to a 32bit + integer. + + The operator ToInt32 converts its argument to one of 2^32 + integer values in the range -2^31 through 2^31 inclusive. + This operator functions as follows: + + 1 call ToNumber on argument + 2 if result is NaN, 0, -0, return 0 + 3 compute (sign (result(1)) * floor(abs(result 1))) + 4 compute result(3) modulo 2^32: + 5 if result(4) is greater than or equal to 2^31, return + result(5)-2^32. otherwise, return result(5) + + special cases: + -0 returns 0 + Infinity returns 0 + -Infinity returns 0 + ToInt32(ToUint32(x)) == ToInt32(x) for all values of x + Numbers greater than 2^31 (see step 5 above) + (note http://bugzilla.mozilla.org/show_bug.cgi?id=120083) + + Author: christine@netscape.com + Date: 17 july 1997 +*/ +var SECTION = "9.5-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " ToInt32"); + +new TestCase( SECTION, "0 << 0", 0, 0 << 0 ); +new TestCase( SECTION, "-0 << 0", 0, -0 << 0 ); +new TestCase( SECTION, "Infinity << 0", 0, "Infinity" << 0 ); +new TestCase( SECTION, "-Infinity << 0", 0, "-Infinity" << 0 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY << 0", 0, Number.POSITIVE_INFINITY << 0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY << 0", 0, Number.NEGATIVE_INFINITY << 0 ); +new TestCase( SECTION, "Number.NaN << 0", 0, Number.NaN << 0 ); + +new TestCase( SECTION, "Number.MIN_VALUE << 0", 0, Number.MIN_VALUE << 0 ); +new TestCase( SECTION, "-Number.MIN_VALUE << 0", 0, -Number.MIN_VALUE << 0 ); +new TestCase( SECTION, "0.1 << 0", 0, 0.1 << 0 ); +new TestCase( SECTION, "-0.1 << 0", 0, -0.1 << 0 ); +new TestCase( SECTION, "1 << 0", 1, 1 << 0 ); +new TestCase( SECTION, "1.1 << 0", 1, 1.1 << 0 ); +new TestCase( SECTION, "-1 << 0", ToInt32(-1), -1 << 0 ); + + +new TestCase( SECTION, "2147483647 << 0", ToInt32(2147483647), 2147483647 << 0 ); +new TestCase( SECTION, "2147483648 << 0", ToInt32(2147483648), 2147483648 << 0 ); +new TestCase( SECTION, "2147483649 << 0", ToInt32(2147483649), 2147483649 << 0 ); + +new TestCase( SECTION, "(Math.pow(2,31)-1) << 0", ToInt32(2147483647), (Math.pow(2,31)-1) << 0 ); +new TestCase( SECTION, "Math.pow(2,31) << 0", ToInt32(2147483648), Math.pow(2,31) << 0 ); +new TestCase( SECTION, "(Math.pow(2,31)+1) << 0", ToInt32(2147483649), (Math.pow(2,31)+1) << 0 ); + +new TestCase( SECTION, "(Math.pow(2,32)-1) << 0", ToInt32(4294967295), (Math.pow(2,32)-1) << 0 ); +new TestCase( SECTION, "(Math.pow(2,32)) << 0", ToInt32(4294967296), (Math.pow(2,32)) << 0 ); +new TestCase( SECTION, "(Math.pow(2,32)+1) << 0", ToInt32(4294967297), (Math.pow(2,32)+1) << 0 ); + +new TestCase( SECTION, "4294967295 << 0", ToInt32(4294967295), 4294967295 << 0 ); +new TestCase( SECTION, "4294967296 << 0", ToInt32(4294967296), 4294967296 << 0 ); +new TestCase( SECTION, "4294967297 << 0", ToInt32(4294967297), 4294967297 << 0 ); + +new TestCase( SECTION, "'2147483647' << 0", ToInt32(2147483647), '2147483647' << 0 ); +new TestCase( SECTION, "'2147483648' << 0", ToInt32(2147483648), '2147483648' << 0 ); +new TestCase( SECTION, "'2147483649' << 0", ToInt32(2147483649), '2147483649' << 0 ); + +new TestCase( SECTION, "'4294967295' << 0", ToInt32(4294967295), '4294967295' << 0 ); +new TestCase( SECTION, "'4294967296' << 0", ToInt32(4294967296), '4294967296' << 0 ); +new TestCase( SECTION, "'4294967297' << 0", ToInt32(4294967297), '4294967297' << 0 ); + +new TestCase( SECTION, "-2147483647 << 0", ToInt32(-2147483647), -2147483647 << 0 ); +new TestCase( SECTION, "-2147483648 << 0", ToInt32(-2147483648), -2147483648 << 0 ); +new TestCase( SECTION, "-2147483649 << 0", ToInt32(-2147483649), -2147483649 << 0 ); + +new TestCase( SECTION, "-4294967295 << 0", ToInt32(-4294967295), -4294967295 << 0 ); +new TestCase( SECTION, "-4294967296 << 0", ToInt32(-4294967296), -4294967296 << 0 ); +new TestCase( SECTION, "-4294967297 << 0", ToInt32(-4294967297), -4294967297 << 0 ); + +/* + * Numbers between 2^31 and 2^32 will have a negative ToInt32 per ECMA (see step 5 of introduction) + * (These are by stevechapel@earthlink.net; cf. http://bugzilla.mozilla.org/show_bug.cgi?id=120083) + */ +new TestCase( SECTION, "2147483648.25 << 0", ToInt32(2147483648.25), 2147483648.25 << 0 ); +new TestCase( SECTION, "2147483648.5 << 0", ToInt32(2147483648.5), 2147483648.5 << 0 ); +new TestCase( SECTION, "2147483648.75 << 0", ToInt32(2147483648.75), 2147483648.75 << 0 ); +new TestCase( SECTION, "4294967295.25 << 0", ToInt32(4294967295.25), 4294967295.25 << 0 ); +new TestCase( SECTION, "4294967295.5 << 0", ToInt32(4294967295.5), 4294967295.5 << 0 ); +new TestCase( SECTION, "4294967295.75 << 0", ToInt32(4294967295.75), 4294967295.75 << 0 ); +new TestCase( SECTION, "3000000000.25 << 0", ToInt32(3000000000.25), 3000000000.25 << 0 ); +new TestCase( SECTION, "3000000000.5 << 0", ToInt32(3000000000.5), 3000000000.5 << 0 ); +new TestCase( SECTION, "3000000000.75 << 0", ToInt32(3000000000.75), 3000000000.75 << 0 ); + +/* + * Numbers between - 2^31 and - 2^32 + */ +new TestCase( SECTION, "-2147483648.25 << 0", ToInt32(-2147483648.25), -2147483648.25 << 0 ); +new TestCase( SECTION, "-2147483648.5 << 0", ToInt32(-2147483648.5), -2147483648.5 << 0 ); +new TestCase( SECTION, "-2147483648.75 << 0", ToInt32(-2147483648.75), -2147483648.75 << 0 ); +new TestCase( SECTION, "-4294967295.25 << 0", ToInt32(-4294967295.25), -4294967295.25 << 0 ); +new TestCase( SECTION, "-4294967295.5 << 0", ToInt32(-4294967295.5), -4294967295.5 << 0 ); +new TestCase( SECTION, "-4294967295.75 << 0", ToInt32(-4294967295.75), -4294967295.75 << 0 ); +new TestCase( SECTION, "-3000000000.25 << 0", ToInt32(-3000000000.25), -3000000000.25 << 0 ); +new TestCase( SECTION, "-3000000000.5 << 0", ToInt32(-3000000000.5), -3000000000.5 << 0 ); +new TestCase( SECTION, "-3000000000.75 << 0", ToInt32(-3000000000.75), -3000000000.75 << 0 ); + + +test(); + +function ToInt32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + + n = (sign * Math.floor( Math.abs(n) )) % Math.pow(2,32); + if ( sign == -1 ) { + n = ( n < -Math.pow(2,31) ) ? n + Math.pow(2,32) : n; + } else{ + n = ( n >= Math.pow(2,31) ) ? n - Math.pow(2,32) : n; + } + + return ( n ); +} + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.6.js b/source/spidermonkey-tests/ecma/TypeConversion/9.6.js new file mode 100644 index 00000000..533b21fc --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.6.js @@ -0,0 +1,106 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.6.js + ECMA Section: 9.6 Type Conversion: ToUint32 + Description: rules for converting an argument to an unsigned + 32 bit integer + + this test uses >>> 0 to convert the argument to + an unsigned 32bit integer. + + 1 call ToNumber on argument + 2 if result is NaN, 0, -0, Infinity, -Infinity + return 0 + 3 compute (sign (result(1)) * floor(abs(result 1))) + 4 compute result(3) modulo 2^32: + 5 return result(4) + + special cases: + -0 returns 0 + Infinity returns 0 + -Infinity returns 0 + 0 returns 0 + ToInt32(ToUint32(x)) == ToInt32(x) for all values of x + ** NEED TO DO THIS PART IN A SEPARATE TEST FILE ** + + + Author: christine@netscape.com + Date: 17 july 1997 +*/ + +var SECTION = "9.6"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Type Conversion: ToUint32"); + +new TestCase( SECTION, "0 >>> 0", 0, 0 >>> 0 ); +// new TestCase( SECTION, "+0 >>> 0", 0, +0 >>> 0); +new TestCase( SECTION, "-0 >>> 0", 0, -0 >>> 0 ); +new TestCase( SECTION, "'Infinity' >>> 0", 0, "Infinity" >>> 0 ); +new TestCase( SECTION, "'-Infinity' >>> 0", 0, "-Infinity" >>> 0); +new TestCase( SECTION, "'+Infinity' >>> 0", 0, "+Infinity" >>> 0 ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY >>> 0", 0, Number.POSITIVE_INFINITY >>> 0 ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY >>> 0", 0, Number.NEGATIVE_INFINITY >>> 0 ); +new TestCase( SECTION, "Number.NaN >>> 0", 0, Number.NaN >>> 0 ); + +new TestCase( SECTION, "Number.MIN_VALUE >>> 0", 0, Number.MIN_VALUE >>> 0 ); +new TestCase( SECTION, "-Number.MIN_VALUE >>> 0", 0, Number.MIN_VALUE >>> 0 ); +new TestCase( SECTION, "0.1 >>> 0", 0, 0.1 >>> 0 ); +new TestCase( SECTION, "-0.1 >>> 0", 0, -0.1 >>> 0 ); +new TestCase( SECTION, "1 >>> 0", 1, 1 >>> 0 ); +new TestCase( SECTION, "1.1 >>> 0", 1, 1.1 >>> 0 ); + +new TestCase( SECTION, "-1.1 >>> 0", ToUint32(-1.1), -1.1 >>> 0 ); +new TestCase( SECTION, "-1 >>> 0", ToUint32(-1), -1 >>> 0 ); + +new TestCase( SECTION, "2147483647 >>> 0", ToUint32(2147483647), 2147483647 >>> 0 ); +new TestCase( SECTION, "2147483648 >>> 0", ToUint32(2147483648), 2147483648 >>> 0 ); +new TestCase( SECTION, "2147483649 >>> 0", ToUint32(2147483649), 2147483649 >>> 0 ); + +new TestCase( SECTION, "4294967295 >>> 0", ToUint32(4294967295), 4294967295 >>> 0 ); +new TestCase( SECTION, "4294967296 >>> 0", ToUint32(4294967296), 4294967296 >>> 0 ); +new TestCase( SECTION, "4294967297 >>> 0", ToUint32(4294967297), 4294967297 >>> 0 ); + +new TestCase( SECTION, "-2147483647 >>> 0", ToUint32(-2147483647), -2147483647 >>> 0 ); +new TestCase( SECTION, "-2147483648 >>> 0", ToUint32(-2147483648), -2147483648 >>> 0 ); +new TestCase( SECTION, "-2147483649 >>> 0", ToUint32(-2147483649), -2147483649 >>> 0 ); + +new TestCase( SECTION, "-4294967295 >>> 0", ToUint32(-4294967295), -4294967295 >>> 0 ); +new TestCase( SECTION, "-4294967296 >>> 0", ToUint32(-4294967296), -4294967296 >>> 0 ); +new TestCase( SECTION, "-4294967297 >>> 0", ToUint32(-4294967297), -4294967297 >>> 0 ); + +new TestCase( SECTION, "'2147483647' >>> 0", ToUint32(2147483647), '2147483647' >>> 0 ); +new TestCase( SECTION, "'2147483648' >>> 0", ToUint32(2147483648), '2147483648' >>> 0 ); +new TestCase( SECTION, "'2147483649' >>> 0", ToUint32(2147483649), '2147483649' >>> 0 ); + +new TestCase( SECTION, "'4294967295' >>> 0", ToUint32(4294967295), '4294967295' >>> 0 ); +new TestCase( SECTION, "'4294967296' >>> 0", ToUint32(4294967296), '4294967296' >>> 0 ); +new TestCase( SECTION, "'4294967297' >>> 0", ToUint32(4294967297), '4294967297' >>> 0 ); + + +test(); + +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 || Math.abs( n ) == Number.POSITIVE_INFINITY) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.7.js b/source/spidermonkey-tests/ecma/TypeConversion/9.7.js new file mode 100644 index 00000000..1d89583e --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.7.js @@ -0,0 +1,126 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.7.js + ECMA Section: 9.7 Type Conversion: ToInt16 + Description: rules for converting an argument to an unsigned + 16 bit integer in the range 0 to 2^16-1. + + this test uses String.prototype.fromCharCode() and + String.prototype.charCodeAt() to test ToInt16. + + special cases: + -0 returns 0 + Infinity returns 0 + -Infinity returns 0 + 0 returns 0 + + Author: christine@netscape.com + Date: 17 july 1997 +*/ +var SECTION = "9.7"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " Type Conversion: ToInt16"); + +/* + new TestCase( "9.7", "String.fromCharCode(0).charCodeAt(0)", 0, String.fromCharCode(0).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(-0).charCodeAt(0)", 0, String.fromCharCode(-0).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(1).charCodeAt(0)", 1, String.fromCharCode(1).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(64).charCodeAt(0)", 64, String.fromCharCode(64).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(126).charCodeAt(0)", 126, String.fromCharCode(126).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(127).charCodeAt(0)", 127, String.fromCharCode(127).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(128).charCodeAt(0)", 128, String.fromCharCode(128).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(130).charCodeAt(0)", 130, String.fromCharCode(130).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(255).charCodeAt(0)", 255, String.fromCharCode(255).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(256).charCodeAt(0)", 256, String.fromCharCode(256).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0)", 65535, String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0) ); + new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)).charCodeAt(0)", 0, String.fromCharCode(Math.pow(2,16)).charCodeAt(0) ); +*/ + + +new TestCase( "9.7", "String.fromCharCode(0).charCodeAt(0)", ToInt16(0), String.fromCharCode(0).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-0).charCodeAt(0)", ToInt16(0), String.fromCharCode(-0).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(1).charCodeAt(0)", ToInt16(1), String.fromCharCode(1).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(64).charCodeAt(0)", ToInt16(64), String.fromCharCode(64).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(126).charCodeAt(0)", ToInt16(126), String.fromCharCode(126).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(127).charCodeAt(0)", ToInt16(127), String.fromCharCode(127).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(128).charCodeAt(0)", ToInt16(128), String.fromCharCode(128).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(130).charCodeAt(0)", ToInt16(130), String.fromCharCode(130).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(255).charCodeAt(0)", ToInt16(255), String.fromCharCode(255).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(256).charCodeAt(0)", ToInt16(256), String.fromCharCode(256).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0)", 65535, String.fromCharCode(Math.pow(2,16)-1).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(Math.pow(2,16)).charCodeAt(0)", 0, String.fromCharCode(Math.pow(2,16)).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode(65535).charCodeAt(0)", ToInt16(65535), String.fromCharCode(65535).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(65536).charCodeAt(0)", ToInt16(65536), String.fromCharCode(65536).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(65537).charCodeAt(0)", ToInt16(65537), String.fromCharCode(65537).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode(131071).charCodeAt(0)", ToInt16(131071), String.fromCharCode(131071).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(131072).charCodeAt(0)", ToInt16(131072), String.fromCharCode(131072).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(131073).charCodeAt(0)", ToInt16(131073), String.fromCharCode(131073).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode('65535').charCodeAt(0)", 65535, String.fromCharCode("65535").charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode('65536').charCodeAt(0)", 0, String.fromCharCode("65536").charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode(-1).charCodeAt(0)", ToInt16(-1), String.fromCharCode(-1).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-64).charCodeAt(0)", ToInt16(-64), String.fromCharCode(-64).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-126).charCodeAt(0)", ToInt16(-126), String.fromCharCode(-126).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-127).charCodeAt(0)", ToInt16(-127), String.fromCharCode(-127).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-128).charCodeAt(0)", ToInt16(-128), String.fromCharCode(-128).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-130).charCodeAt(0)", ToInt16(-130), String.fromCharCode(-130).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-255).charCodeAt(0)", ToInt16(-255), String.fromCharCode(-255).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-256).charCodeAt(0)", ToInt16(-256), String.fromCharCode(-256).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode(-Math.pow(2,16)-1).charCodeAt(0)", 65535, String.fromCharCode(-Math.pow(2,16)-1).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-Math.pow(2,16)).charCodeAt(0)", 0, String.fromCharCode(-Math.pow(2,16)).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode(-65535).charCodeAt(0)", ToInt16(-65535), String.fromCharCode(-65535).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-65536).charCodeAt(0)", ToInt16(-65536), String.fromCharCode(-65536).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-65537).charCodeAt(0)", ToInt16(-65537), String.fromCharCode(-65537).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode(-131071).charCodeAt(0)", ToInt16(-131071), String.fromCharCode(-131071).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-131072).charCodeAt(0)", ToInt16(-131072), String.fromCharCode(-131072).charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode(-131073).charCodeAt(0)", ToInt16(-131073), String.fromCharCode(-131073).charCodeAt(0) ); + +new TestCase( "9.7", "String.fromCharCode('-65535').charCodeAt(0)", ToInt16(-65535), String.fromCharCode("-65535").charCodeAt(0) ); +new TestCase( "9.7", "String.fromCharCode('-65536').charCodeAt(0)", ToInt16(-65536), String.fromCharCode("-65536").charCodeAt(0) ); + + +// new TestCase( "9.7", "String.fromCharCode(2147483648).charCodeAt(0)", ToInt16(2147483648), String.fromCharCode(2147483648).charCodeAt(0) ); + + + +// the following test cases cause a runtime error. see: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=78878 + +// new TestCase( "9.7", "String.fromCharCode(Infinity).charCodeAt(0)", 0, String.fromCharCode("Infinity").charCodeAt(0) ); +// new TestCase( "9.7", "String.fromCharCode(-Infinity).charCodeAt(0)", 0, String.fromCharCode("-Infinity").charCodeAt(0) ); +// new TestCase( "9.7", "String.fromCharCode(NaN).charCodeAt(0)", 0, String.fromCharCode(Number.NaN).charCodeAt(0) ); +// new TestCase( "9.7", "String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0)", 0, String.fromCharCode(Number.POSITIVE_INFINITY).charCodeAt(0) ); +// new TestCase( "9.7", "String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0)", 0, String.fromCharCode(Number.NEGATIVE_INFINITY).charCodeAt(0) ); + +test(); + +function ToInt16( num ) { + num = Number( num ); + if ( isNaN( num ) || num == 0 || num == Number.POSITIVE_INFINITY || num == Number.NEGATIVE_INFINITY ) { + return 0; + } + + var sign = ( num < 0 ) ? -1 : 1; + + num = sign * Math.floor( Math.abs( num ) ); + + num = num % Math.pow(2,16); + + num = ( num > -65536 && num < 0) ? 65536 + num : num; + + return num; +} + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.8.1.js b/source/spidermonkey-tests/ecma/TypeConversion/9.8.1.js new file mode 100644 index 00000000..1f626830 --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.8.1.js @@ -0,0 +1,133 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.8.1.js + ECMA Section: 9.8.1 ToString Applied to the Number Type + Description: The operator ToString convers a number m to string + as follows: + + 1. if m is NaN, return the string "NaN" + 2. if m is +0 or -0, return the string "0" + 3. if m is less than zero, return the string + concatenation of the string "-" and ToString(-m). + 4. If m is Infinity, return the string "Infinity". + 5. Otherwise, let n, k, and s be integers such that + k >= 1, 10k1 <= s < 10k, the number value for s10nk + is m, and k is as small as possible. Note that k is + the number of digits in the decimal representation + of s, that s is not divisible by 10, and that the + least significant digit of s is not necessarily + uniquely determined by these criteria. + 6. If k <= n <= 21, return the string consisting of the + k digits of the decimal representation of s (in order, + with no leading zeroes), followed by n-k occurences + of the character '0'. + 7. If 0 < n <= 21, return the string consisting of the + most significant n digits of the decimal + representation of s, followed by a decimal point + '.', followed by the remaining kn digits of the + decimal representation of s. + 8. If 6 < n <= 0, return the string consisting of the + character '0', followed by a decimal point '.', + followed by n occurences of the character '0', + followed by the k digits of the decimal + representation of s. + 9. Otherwise, if k = 1, return the string consisting + of the single digit of s, followed by lowercase + character 'e', followed by a plus sign '+' or minus + sign '' according to whether n1 is positive or + negative, followed by the decimal representation + of the integer abs(n1) (with no leading zeros). + 10. Return the string consisting of the most significant + digit of the decimal representation of s, followed + by a decimal point '.', followed by the remaining k1 + digits of the decimal representation of s, followed + by the lowercase character 'e', followed by a plus + sign '+' or minus sign '' according to whether n1 is + positive or negative, followed by the decimal + representation of the integer abs(n1) (with no + leading zeros). + + Note that if x is any number value other than 0, then + ToNumber(ToString(x)) is exactly the same number value as x. + + As noted, the least significant digit of s is not always + uniquely determined by the requirements listed in step 5. + The following specification for step 5 was considered, but + not adopted: + + Author: christine@netscape.com + Date: 10 july 1997 +*/ + +var SECTION = "9.8.1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " ToString applied to the Number type"); + +new TestCase( SECTION, "Number.NaN", "NaN", Number.NaN + "" ); +new TestCase( SECTION, "0", "0", 0 + "" ); +new TestCase( SECTION, "-0", "0", -0 + "" ); +new TestCase( SECTION, "Number.POSITIVE_INFINITY", "Infinity", Number.POSITIVE_INFINITY + "" ); +new TestCase( SECTION, "Number.NEGATIVE_INFINITY", "-Infinity", Number.NEGATIVE_INFINITY + "" ); +new TestCase( SECTION, "-1", "-1", -1 + "" ); + +// cases in step 6: integers 1e21 > x >= 1 or -1 >= x > -1e21 + +new TestCase( SECTION, "1", "1", 1 + "" ); +new TestCase( SECTION, "10", "10", 10 + "" ); +new TestCase( SECTION, "100", "100", 100 + "" ); +new TestCase( SECTION, "1000", "1000", 1000 + "" ); +new TestCase( SECTION, "10000", "10000", 10000 + "" ); +new TestCase( SECTION, "10000000000", "10000000000", 10000000000 + "" ); +new TestCase( SECTION, "10000000000000000000", "10000000000000000000", 10000000000000000000 + "" ); +new TestCase( SECTION, "100000000000000000000","100000000000000000000",100000000000000000000 + "" ); + +new TestCase( SECTION, "12345", "12345", 12345 + "" ); +new TestCase( SECTION, "1234567890", "1234567890", 1234567890 + "" ); + +new TestCase( SECTION, "-1", "-1", -1 + "" ); +new TestCase( SECTION, "-10", "-10", -10 + "" ); +new TestCase( SECTION, "-100", "-100", -100 + "" ); +new TestCase( SECTION, "-1000", "-1000", -1000 + "" ); +new TestCase( SECTION, "-1000000000", "-1000000000", -1000000000 + "" ); +new TestCase( SECTION, "-1000000000000000", "-1000000000000000", -1000000000000000 + "" ); +new TestCase( SECTION, "-100000000000000000000", "-100000000000000000000", -100000000000000000000 + "" ); +new TestCase( SECTION, "-1000000000000000000000", "-1e+21", -1000000000000000000000 + "" ); + +new TestCase( SECTION, "-12345", "-12345", -12345 + "" ); +new TestCase( SECTION, "-1234567890", "-1234567890", -1234567890 + "" ); + +// cases in step 7: numbers with a fractional component, 1e21> x >1 or -1 > x > -1e21, +new TestCase( SECTION, "1.0000001", "1.0000001", 1.0000001 + "" ); + +// cases in step 8: fractions between 1 > x > -1, exclusive of 0 and -0 + +// cases in step 9: numbers with 1 significant digit >= 1e+21 or <= 1e-6 + +new TestCase( SECTION, "1000000000000000000000", "1e+21", 1000000000000000000000 + "" ); +new TestCase( SECTION, "10000000000000000000000", "1e+22", 10000000000000000000000 + "" ); + +// cases in step 10: numbers with more than 1 significant digit >= 1e+21 or <= 1e-6 + +new TestCase( SECTION, "1.2345", "1.2345", String( 1.2345)); +new TestCase( SECTION, "1.234567890", "1.23456789", String( 1.234567890 )); + + +new TestCase( SECTION, ".12345", "0.12345", String(.12345 ) ); +new TestCase( SECTION, ".012345", "0.012345", String(.012345) ); +new TestCase( SECTION, ".0012345", "0.0012345", String(.0012345) ); +new TestCase( SECTION, ".00012345", "0.00012345", String(.00012345) ); +new TestCase( SECTION, ".000012345", "0.000012345", String(.000012345) ); +new TestCase( SECTION, ".0000012345", "0.0000012345", String(.0000012345) ); +new TestCase( SECTION, ".00000012345", "1.2345e-7", String(.00000012345)); + +new TestCase( SECTION, "-1e21", "-1e+21", String(-1e21) ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/TypeConversion/9.9-1.js b/source/spidermonkey-tests/ecma/TypeConversion/9.9-1.js new file mode 100644 index 00000000..b252f68c --- /dev/null +++ b/source/spidermonkey-tests/ecma/TypeConversion/9.9-1.js @@ -0,0 +1,85 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.9-1.js + ECMA Section: 9.9 Type Conversion: ToObject + Description: + + undefined generate a runtime error + null generate a runtime error + boolean create a new Boolean object whose default + value is the value of the boolean. + number Create a new Number object whose default + value is the value of the number. + string Create a new String object whose default + value is the value of the string. + object Return the input argument (no conversion). + Author: christine@netscape.com + Date: 17 july 1997 +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "9.9-1"; + +writeHeaderToLog( SECTION + " Type Conversion: ToObject" ); + +new TestCase( SECTION, "Object(true).valueOf()", true, (Object(true)).valueOf() ); +new TestCase( SECTION, "typeof Object(true)", "object", typeof Object(true) ); + +new TestCase( SECTION, "Object(false).valueOf()", false, (Object(false)).valueOf() ); +new TestCase( SECTION, "typeof Object(false)", "object", typeof Object(false) ); + +new TestCase( SECTION, "Object(0).valueOf()", 0, (Object(0)).valueOf() ); +new TestCase( SECTION, "typeof Object(0)", "object", typeof Object(0) ); + +new TestCase( SECTION, "Object(-0).valueOf()", -0, (Object(-0)).valueOf() ); +new TestCase( SECTION, "typeof Object(-0)", "object", typeof Object(-0) ); + +new TestCase( SECTION, "Object(1).valueOf()", 1, (Object(1)).valueOf() ); +new TestCase( SECTION, "typeof Object(1)", "object", typeof Object(1) ); + +new TestCase( SECTION, "Object(-1).valueOf()", -1, (Object(-1)).valueOf() ); +new TestCase( SECTION, "typeof Object(-1)", "object", typeof Object(-1) ); + +new TestCase( SECTION, "Object(Number.MAX_VALUE).valueOf()", 1.7976931348623157e308, (Object(Number.MAX_VALUE)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.MAX_VALUE)", "object", typeof Object(Number.MAX_VALUE) ); + +new TestCase( SECTION, "Object(Number.MIN_VALUE).valueOf()", 5e-324, (Object(Number.MIN_VALUE)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.MIN_VALUE)", "object", typeof Object(Number.MIN_VALUE) ); + +new TestCase( SECTION, "Object(Number.POSITIVE_INFINITY).valueOf()", Number.POSITIVE_INFINITY, (Object(Number.POSITIVE_INFINITY)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.POSITIVE_INFINITY)", "object", typeof Object(Number.POSITIVE_INFINITY) ); + +new TestCase( SECTION, "Object(Number.NEGATIVE_INFINITY).valueOf()", Number.NEGATIVE_INFINITY, (Object(Number.NEGATIVE_INFINITY)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.NEGATIVE_INFINITY)", "object", typeof Object(Number.NEGATIVE_INFINITY) ); + +new TestCase( SECTION, "Object(Number.NaN).valueOf()", Number.NaN, (Object(Number.NaN)).valueOf() ); +new TestCase( SECTION, "typeof Object(Number.NaN)", "object", typeof Object(Number.NaN) ); + +new TestCase( SECTION, "Object('a string').valueOf()", "a string", (Object("a string")).valueOf() ); +new TestCase( SECTION, "typeof Object('a string')", "object", typeof (Object("a string")) ); + +new TestCase( SECTION, "Object('').valueOf()", "", (Object("")).valueOf() ); +new TestCase( SECTION, "typeof Object('')", "object", typeof (Object("")) ); + +new TestCase( SECTION, "Object('\\r\\t\\b\\n\\v\\f').valueOf()", "\r\t\b\n\v\f", (Object("\r\t\b\n\v\f")).valueOf() ); +new TestCase( SECTION, "typeof Object('\\r\\t\\b\\n\\v\\f')", "object", typeof (Object("\\r\\t\\b\\n\\v\\f")) ); + +new TestCase( SECTION, "Object( '\\\'\\\"\\' ).valueOf()", "\'\"\\", (Object("\'\"\\")).valueOf() ); +new TestCase( SECTION, "typeof Object( '\\\'\\\"\\' )", "object", typeof Object("\'\"\\") ); + +new TestCase( SECTION, "Object( new MyObject(true) ).valueOf()", true, eval("Object( new MyObject(true) ).valueOf()") ); +new TestCase( SECTION, "typeof Object( new MyObject(true) )", "object", eval("typeof Object( new MyObject(true) )") ); +new TestCase( SECTION, "(Object( new MyObject(true) )).toString()", "[object Object]", eval("(Object( new MyObject(true) )).toString()") ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function ( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/TypeConversion/browser.js b/source/spidermonkey-tests/ecma/TypeConversion/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/TypeConversion/shell.js b/source/spidermonkey-tests/ecma/TypeConversion/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Types/8.1.js b/source/spidermonkey-tests/ecma/Types/8.1.js new file mode 100644 index 00000000..532ebaab --- /dev/null +++ b/source/spidermonkey-tests/ecma/Types/8.1.js @@ -0,0 +1,41 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 8.1.js + ECMA Section: The undefined type + Description: + + The Undefined type has exactly one value, called undefined. Any variable + that has not been assigned a value is of type Undefined. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "8.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The undefined type"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var x; typeof x", + "undefined", + eval("var x; typeof x") ); + +new TestCase( SECTION, + "var x; typeof x == 'undefined", + true, + eval("var x; typeof x == 'undefined'") ); + +new TestCase( SECTION, + "var x; x == void 0", + true, + eval("var x; x == void 0") ); +test(); + diff --git a/source/spidermonkey-tests/ecma/Types/8.4.js b/source/spidermonkey-tests/ecma/Types/8.4.js new file mode 100644 index 00000000..60cf12d1 --- /dev/null +++ b/source/spidermonkey-tests/ecma/Types/8.4.js @@ -0,0 +1,96 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 8.4.js + ECMA Section: The String type + Description: + + The String type is the set of all finite ordered sequences of zero or more + Unicode characters. Each character is regarded as occupying a position + within the sequence. These positions are identified by nonnegative + integers. The leftmost character (if any) is at position 0, the next + character (if any) at position 1, and so on. The length of a string is the + number of distinct positions within it. The empty string has length zero + and therefore contains no characters. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "8.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The String type"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var s = ''; s.length", + 0, + eval("var s = ''; s.length") ); + +new TestCase( SECTION, + "var s = ''; s.charAt(0)", + "", + eval("var s = ''; s.charAt(0)") ); + + +for ( var i = 0x0041, TEST_STRING = "", EXPECT_STRING = ""; i < 0x007B; i++ ) { + TEST_STRING += ("\\u"+ DecimalToHexString( i ) ); + EXPECT_STRING += String.fromCharCode(i); +} + +new TestCase( SECTION, + "var s = '" + TEST_STRING+ "'; s", + EXPECT_STRING, + eval("var s = '" + TEST_STRING+ "'; s") ); + +new TestCase( SECTION, + "var s = '" + TEST_STRING+ "'; s.length", + 0x007B-0x0041, + eval("var s = '" + TEST_STRING+ "'; s.length") ); + +test(); + +function DecimalToHexString( n ) { + n = Number( n ); + var h = ""; + + for ( var i = 3; i >= 0; i-- ) { + if ( n >= Math.pow(16, i) ){ + var t = Math.floor( n / Math.pow(16, i)); + n -= t * Math.pow(16, i); + if ( t >= 10 ) { + if ( t == 10 ) { + h += "A"; + } + if ( t == 11 ) { + h += "B"; + } + if ( t == 12 ) { + h += "C"; + } + if ( t == 13 ) { + h += "D"; + } + if ( t == 14 ) { + h += "E"; + } + if ( t == 15 ) { + h += "F"; + } + } else { + h += String( t ); + } + } else { + h += "0"; + } + } + + return h; +} + diff --git a/source/spidermonkey-tests/ecma/Types/8.6.2.1-1.js b/source/spidermonkey-tests/ecma/Types/8.6.2.1-1.js new file mode 100644 index 00000000..627c8cba --- /dev/null +++ b/source/spidermonkey-tests/ecma/Types/8.6.2.1-1.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 8.6.2.1-1.js + ECMA Section: 8.6.2.1 Get (Value) + Description: + + When the [[Get]] method of O is called with property name P, the following + steps are taken: + + 1. If O doesn't have a property with name P, go to step 4. + 2. Get the value of the property. + 3. Return Result(2). + 4. If the [[Prototype]] of O is null, return undefined. + 5. Call the [[Get]] method of [[Prototype]] with property name P. + 6. Return Result(5). + + This tests [[Get]] (Value). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "8.6.2.1-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " [[Get]] (Value)"); + +new TestCase( SECTION, "var OBJ = new MyObject(true); OBJ.valueOf()", true, eval("var OBJ = new MyObject(true); OBJ.valueOf()") ); + +new TestCase( SECTION, "var OBJ = new MyObject(Number.POSITIVE_INFINITY); OBJ.valueOf()", Number.POSITIVE_INFINITY, eval("var OBJ = new MyObject(Number.POSITIVE_INFINITY); OBJ.valueOf()") ); + +new TestCase( SECTION, "var OBJ = new MyObject('string'); OBJ.valueOf()", 'string', eval("var OBJ = new MyObject('string'); OBJ.valueOf()") ); + +test(); + +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/Types/browser.js b/source/spidermonkey-tests/ecma/Types/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/Types/shell.js b/source/spidermonkey-tests/ecma/Types/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/browser.js b/source/spidermonkey-tests/ecma/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/extensions/10.1.4-9.js b/source/spidermonkey-tests/ecma/extensions/10.1.4-9.js new file mode 100644 index 00000000..a8c2435d --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/10.1.4-9.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.4-9.js + ECMA Section: 10.1.4 Scope Chain and Identifier Resolution + Description: + Every execution context has associated with it a scope chain. This is + logically a list of objects that are searched when binding an Identifier. + When control enters an execution context, the scope chain is created and + is populated with an initial set of objects, depending on the type of + code. When control leaves the execution context, the scope chain is + destroyed. + + During execution, the scope chain of the execution context is affected + only by WithStatement. When execution enters a with block, the object + specified in the with statement is added to the front of the scope chain. + When execution leaves a with block, whether normally or via a break or + continue statement, the object is removed from the scope chain. The object + being removed will always be the first object in the scope chain. + + During execution, the syntactic production PrimaryExpression : Identifier + is evaluated using the following algorithm: + + 1. Get the next object in the scope chain. If there isn't one, go to step 5. + 2. Call the [[HasProperty]] method of Result(l), passing the Identifier as + the property. + 3. If Result(2) is true, return a value of type Reference whose base object + is Result(l) and whose property name is the Identifier. + 4. Go to step 1. + 5. Return a value of type Reference whose base object is null and whose + property name is the Identifier. + The result of binding an identifier is always a value of type Reference with + its member name component equal to the identifier string. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "10.1.4-9"; +var VERSION = "ECMA_2"; +startTest(); + +writeHeaderToLog( SECTION + " Scope Chain and Identifier Resolution"); + +new TestCase( SECTION, "NEW_PROPERTY = " ); + +test(); + +function test() { + for ( gTc=0; gTc < gTestcases.length; gTc++ ) { + + var MYOBJECT = new MyObject(); + var RESULT = "hello"; + + with ( MYOBJECT ) { + NEW_PROPERTY = RESULT; + } + gTestcases[gTc].actual = NEW_PROPERTY; + gTestcases[gTc].expect = RESULT; + + gTestcases[gTc].passed = writeTestCaseResult( + gTestcases[gTc].expect, + gTestcases[gTc].actual, + gTestcases[gTc].description +" = "+ + gTestcases[gTc].actual ); + + gTestcases[gTc].reason += ( gTestcases[gTc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( gTestcases ); +} +function MyObject( n ) { + this.__proto__ = Number.prototype; +} diff --git a/source/spidermonkey-tests/ecma/extensions/10.1.6.js b/source/spidermonkey-tests/ecma/extensions/10.1.6.js new file mode 100644 index 00000000..35cca874 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/10.1.6.js @@ -0,0 +1,93 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.6 + ECMA Section: Activation Object + Description: + + If the function object being invoked has an arguments property, let x be + the value of that property; the activation object is also given an internal + property [[OldArguments]] whose initial value is x; otherwise, an arguments + property is created for the function object but the activation object is + not given an [[OldArguments]] property. Next, arguments object described + below (the same one stored in the arguments property of the activation + object) is used as the new value of the arguments property of the function + object. This new value is installed even if the arguments property already + exists and has the ReadOnly attribute (as it will for native Function + objects). (These actions are taken to provide compatibility with a form of + program syntax that is now discouraged: to access the arguments object for + function f within the body of f by using the expression f.arguments. + The recommended way to access the arguments object for function f within + the body of f is simply to refer to the variable arguments.) + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.1.6"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Activation Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var arguments = "FAILED!"; + +var ARG_STRING = "value of the argument property"; + +new TestCase( SECTION, + "(new TestObject(0,1,2,3,4,5)).length", + 6, + (new TestObject(0,1,2,3,4,5)).length ); + +for ( i = 0; i < 6; i++ ) { + + new TestCase( SECTION, + "(new TestObject(0,1,2,3,4,5))["+i+"]", + i, + (new TestObject(0,1,2,3,4,5))[i]); +} + + +// The current object already has an arguments property. + +new TestCase( SECTION, + "(new AnotherTestObject(1,2,3)).arguments", + ARG_STRING, + (new AnotherTestObject(1,2,3)).arguments ); + +// The function invoked with [[Call]] + +new TestCase( SECTION, + "TestFunction(1,2,3)", + ARG_STRING, + TestFunction() + '' ); + + +test(); + + + +function Prototype() { + this.arguments = ARG_STRING; +} +function TestObject() { + this.__proto__ = new Prototype(); + return arguments; +} +function AnotherTestObject() { + this.__proto__ = new Prototype(); + return this; +} +function TestFunction() { + arguments = ARG_STRING; + return arguments; +} +function AnotherTestFunction() { + this.__proto__ = new Prototype(); + return this; +} diff --git a/source/spidermonkey-tests/ecma/extensions/10.1.8-1.js b/source/spidermonkey-tests/ecma/extensions/10.1.8-1.js new file mode 100644 index 00000000..f0acd7b0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/10.1.8-1.js @@ -0,0 +1,101 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 10.1.8 + ECMA Section: Arguments Object + Description: + + When control enters an execution context for declared function code, + anonymous code, or implementation-supplied code, an arguments object is + created and initialized as follows: + + The [[Prototype]] of the arguments object is to the original Object + prototype object, the one that is the initial value of Object.prototype + (section 15.2.3.1). + + A property is created with name callee and property attributes {DontEnum}. + The initial value of this property is the function object being executed. + This allows anonymous functions to be recursive. + + A property is created with name length and property attributes {DontEnum}. + The initial value of this property is the number of actual parameter values + supplied by the caller. + + For each non-negative integer, iarg, less than the value of the length + property, a property is created with name ToString(iarg) and property + attributes { DontEnum }. The initial value of this property is the value + of the corresponding actual parameter supplied by the caller. The first + actual parameter value corresponds to iarg = 0, the second to iarg = 1 and + so on. In the case when iarg is less than the number of formal parameters + for the function object, this property shares its value with the + corresponding property of the activation object. This means that changing + this property changes the corresponding property of the activation object + and vice versa. The value sharing mechanism depends on the implementation. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "10.1.8"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Arguments Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var ARG_STRING = "value of the argument property"; + +new TestCase( SECTION, + "GetCallee()", + GetCallee, + GetCallee() ); + +var LIMIT = 100; + +for ( var i = 0, args = "" ; i < LIMIT; i++ ) { + args += String(i) + ( i+1 < LIMIT ? "," : "" ); + +} + +var LENGTH = eval( "GetLength("+ args +")" ); + +new TestCase( SECTION, + "GetLength("+args+")", + 100, + LENGTH ); + +var ARGUMENTS = eval( "GetArguments( " +args+")" ); + +for ( var i = 0; i < 100; i++ ) { + new TestCase( SECTION, + "GetArguments("+args+")["+i+"]", + i, + ARGUMENTS[i] ); +} + +test(); + +function TestFunction() { + var arg_proto = arguments.__proto__; +} +function GetCallee() { + var c = arguments.callee; + return c; +} +function GetArguments() { + var a = arguments; + return a; +} +function GetLength() { + var l = arguments.length; + return l; +} + +function AnotherTestFunction() { + this.__proto__ = new Prototype(); + return this; +} diff --git a/source/spidermonkey-tests/ecma/extensions/11.6.1-1.js b/source/spidermonkey-tests/ecma/extensions/11.6.1-1.js new file mode 100644 index 00000000..94e241e0 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/11.6.1-1.js @@ -0,0 +1,111 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.1-1.js + ECMA Section: 11.6.1 The addition operator ( + ) + Description: + + The addition operator either performs string concatenation or numeric + addition. + + The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression + is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToPrimitive(Result(2)). + 6. Call ToPrimitive(Result(4)). + 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12. + (Note that this step differs from step 3 in the algorithm for comparison + for the relational operators in using or instead of and.) + 8. Call ToNumber(Result(5)). + 9. Call ToNumber(Result(6)). + 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3). + 11. Return Result(10). + 12. Call ToString(Result(5)). + 13. Call ToString(Result(6)). + 14. Concatenate Result(12) followed by Result(13). + 15. Return Result(14). + + Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6. + All native ECMAScript objects except Date objects handle the absence of a + hint as if the hint Number were given; Date objects handle the absence of a + hint as if the hint String were given. Host objects may handle the absence + of a hint in some other manner. + + This test does not cover cases where the Additive or Mulplicative expression + ToPrimitive is string. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.1-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The Addition operator ( + )"); + +// tests for "MyValuelessObject", where the value is +// set in the object's prototype, not the object itself. + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2", + 1, + eval("var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2", + "truefalse", + eval("var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2") ); + +// tests for "MyValuelessObject", where the value is +// set in the object's prototype, not the object itself. + + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(-1); EXP_1 + EXP_2", + 99, + eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(-1); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2", + "100-1", + eval("var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject( new MyValuelessObject( new Boolean(true) ) ); EXP_1 + EXP_1", + "truetrue", + eval("var EXP_1 = new MyValuelessObject( new MyValuelessObject( new Boolean(true) ) ); EXP_1 + EXP_1") ); + +test(); + +function MyProtoValuelessObject() { + this.valueOf = new Function ( "" ); + this.__proto__ = null; +} + +function MyProtolessObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.__proto__ = null; + this.value = value; +} + +function MyValuelessObject(value) { + this.__proto__ = new MyPrototypeObject(value); +} +function MyPrototypeObject(value) { + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return (this.value + '');" ); + this.value = value; +} + +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/extensions/11.6.1-2.js b/source/spidermonkey-tests/ecma/extensions/11.6.1-2.js new file mode 100644 index 00000000..90ed10f5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/11.6.1-2.js @@ -0,0 +1,102 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.1-2.js + ECMA Section: 11.6.1 The addition operator ( + ) + Description: + + The addition operator either performs string concatenation or numeric + addition. + + The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression + is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToPrimitive(Result(2)). + 6. Call ToPrimitive(Result(4)). + 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12. + (Note that this step differs from step 3 in the algorithm for comparison + for the relational operators in using or instead of and.) + 8. Call ToNumber(Result(5)). + 9. Call ToNumber(Result(6)). + 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3). + 11. Return Result(10). + 12. Call ToString(Result(5)). + 13. Call ToString(Result(6)). + 14. Concatenate Result(12) followed by Result(13). + 15. Return Result(14). + + Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6. + All native ECMAScript objects except Date objects handle the absence of a + hint as if the hint Number were given; Date objects handle the absence of a + hint as if the hint String were given. Host objects may handle the absence + of a hint in some other manner. + + This test does only covers cases where the Additive or Mulplicative expression + ToPrimitive is a string. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.1-2"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The Addition operator ( + )"); + +// tests for "MyValuelessObject", where the value is +// set in the object's prototype, not the object itself. + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject('string'); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2", + "stringfalse", + eval("var EXP_1 = new MyValuelessObject('string'); var EXP_2 = new MyValuelessObject(false); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2", + "stringfalse", + eval("var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 + EXP_2") ); + +// tests for "MyValuelessObject", where the value is +// set in the object's prototype, not the object itself. + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject('string'); EXP_1 + EXP_2", + "100string", + eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject('string'); EXP_1 + EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2", + "string-1", + eval("var EXP_1 = new MyValuelessObject(new String('string')); var EXP_2 = new MyValuelessObject(new Number(-1)); EXP_1 + EXP_2") ); + +test(); + +function MyProtoValuelessObject() { + this.valueOf = new Function ( "" ); + this.__proto__ = null; +} +function MyProtolessObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.__proto__ = null; + this.value = value; +} +function MyValuelessObject(value) { + this.__proto__ = new MyPrototypeObject(value); +} +function MyPrototypeObject(value) { + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return (this.value + '');" ); + this.value = value; +} +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/extensions/11.6.1-3.js b/source/spidermonkey-tests/ecma/extensions/11.6.1-3.js new file mode 100644 index 00000000..48dbaf4f --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/11.6.1-3.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.1-3.js + ECMA Section: 11.6.1 The addition operator ( + ) + Description: + + The addition operator either performs string concatenation or numeric + addition. + + The production AdditiveExpression : AdditiveExpression + MultiplicativeExpression + is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToPrimitive(Result(2)). + 6. Call ToPrimitive(Result(4)). + 7. If Type(Result(5)) is String or Type(Result(6)) is String, go to step 12. + (Note that this step differs from step 3 in the algorithm for comparison + for the relational operators in using or instead of and.) + 8. Call ToNumber(Result(5)). + 9. Call ToNumber(Result(6)). + 10. Apply the addition operation to Result(8) and Result(9). See the discussion below (11.6.3). + 11. Return Result(10). + 12. Call ToString(Result(5)). + 13. Call ToString(Result(6)). + 14. Concatenate Result(12) followed by Result(13). + 15. Return Result(14). + + Note that no hint is provided in the calls to ToPrimitive in steps 5 and 6. + All native ECMAScript objects except Date objects handle the absence of a + hint as if the hint Number were given; Date objects handle the absence of a + hint as if the hint String were given. Host objects may handle the absence + of a hint in some other manner. + + This test does only covers cases where the Additive or Mulplicative expression + is a Date. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.1-3"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The Addition operator ( + )"); + +// tests for a boolean primitive and a boolean object, and +// "MyValuelessObject", where the value is set in the object's +// prototype, not the object itself. + +var DATE1 = new Date(); + +var MYOB1 = new MyObject( DATE1 ); +var MYOB2 = new MyValuelessObject( DATE1 ); +var MYOB3 = new MyProtolessObject( DATE1 ); +var MYOB4 = new MyProtoValuelessObject( DATE1 ); + +new TestCase( SECTION, + "MYOB2 = new MyValuelessObject(DATE1); MYOB3 + 'string'", + DATE1.toString() + "string", + MYOB2 + 'string' ); + +new TestCase( SECTION, + "MYOB2 = new MyValuelessObject(DATE1); MYOB3 + new String('string')", + DATE1.toString() + "string", + MYOB2 + new String('string') ); +/* + new TestCase( SECTION, + "MYOB3 = new MyProtolessObject(DATE1); MYOB3 + new Boolean(true)", + DATE1.toString() + "true", + MYOB3 + new Boolean(true) ); +*/ + +test(); + +function MyProtoValuelessObject() { + this.valueOf = new Function ( "" ); + this.__proto__ = null; +} +function MyProtolessObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.__proto__ = null; + this.value = value; +} +function MyValuelessObject(value) { + this.__proto__ = new MyPrototypeObject(value); +} +function MyPrototypeObject(value) { + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return (this.value + '');" ); + this.value = value; +} +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/extensions/11.6.2-1.js b/source/spidermonkey-tests/ecma/extensions/11.6.2-1.js new file mode 100644 index 00000000..d9b6ea35 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/11.6.2-1.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 11.6.2-1.js + ECMA Section: 11.6.2 The Subtraction operator ( - ) + Description: + + The production AdditiveExpression : AdditiveExpression - + MultiplicativeExpression is evaluated as follows: + + 1. Evaluate AdditiveExpression. + 2. Call GetValue(Result(1)). + 3. Evaluate MultiplicativeExpression. + 4. Call GetValue(Result(3)). + 5. Call ToNumber(Result(2)). + 6. Call ToNumber(Result(4)). + 7. Apply the subtraction operation to Result(5) and Result(6). See the + discussion below (11.6.3). + 8. Return Result(7). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "11.6.2-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " The subtraction operator ( - )"); + +// tests "MyValuelessObject", where the value is +// set in the object's prototype, not the object itself. + + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2", + 1, + eval("var EXP_1 = new MyValuelessObject(true); var EXP_2 = new MyValuelessObject(false); EXP_1 - EXP_2") ); + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 - EXP_2", + Number.NaN, + eval("var EXP_1 = new MyValuelessObject(new Boolean(true)); var EXP_2 = new MyValuelessObject(new Boolean(false)); EXP_1 - EXP_2") ); + +// tests "MyValuelessObject", where the value is +// set in the object's prototype, not the object itself. + +new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2", + 99, + eval("var EXP_1 = new MyValuelessObject(100); var EXP_2 = new MyValuelessObject(1); EXP_1 - EXP_2") ); +/* + new TestCase( SECTION, + "var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(1)); EXP_1 - EXP_2", + Number.NaN, + eval("var EXP_1 = new MyValuelessObject(new Number(100)); var EXP_2 = new MyValuelessObject(new Number(1)); EXP_1 - EXP_2") ); +*/ +// same thing with string! + +test(); + +function MyProtoValuelessObject() { + this.valueOf = new Function ( "" ); + this.__proto__ = null; +} +function MyProtolessObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.__proto__ = null; + this.value = value; +} +function MyValuelessObject(value) { + this.__proto__ = new MyPrototypeObject(value); +} +function MyPrototypeObject(value) { + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return (this.value + '');" ); + this.value = value; +} +function MyObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.value = value; +} +function MyOtherObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.toString = new Function ( "return this.value + ''" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/extensions/15-1.js b/source/spidermonkey-tests/ecma/extensions/15-1.js new file mode 100644 index 00000000..e70cb2ca --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15-1.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.js + ECMA Section: 15 Native ECMAScript Objects + Description: Every built-in prototype object has the Object prototype + object, which is the value of the expression + Object.prototype (15.2.3.1) as the value of its internal + [[Prototype]] property, except the Object prototype + object itself. + + Every native object associated with a program-created + function also has the Object prototype object as the + value of its internal [[Prototype]] property. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Native ECMAScript Objects"; + +writeHeaderToLog( SECTION + " "+ TITLE); +/* + new TestCase( SECTION, "Function.prototype.__proto__", Object.prototype, Function.prototype.__proto__ ); + new TestCase( SECTION, "Array.prototype.__proto__", Object.prototype, Array.prototype.__proto__ ); + new TestCase( SECTION, "String.prototype.__proto__", Object.prototype, String.prototype.__proto__ ); + new TestCase( SECTION, "Boolean.prototype.__proto__", Object.prototype, Boolean.prototype.__proto__ ); + new TestCase( SECTION, "Number.prototype.__proto__", Object.prototype, Number.prototype.__proto__ ); +// new TestCase( SECTION, "Math.prototype.__proto__", Object.prototype, Math.prototype.__proto__ ); +new TestCase( SECTION, "Date.prototype.__proto__", Object.prototype, Date.prototype.__proto__ ); +new TestCase( SECTION, "TestCase.prototype.__proto__", Object.prototype, TestCase.prototype.__proto__ ); + +new TestCase( SECTION, "MyObject.prototype.__proto__", Object.prototype, MyObject.prototype.__proto__ ); +*/ +new TestCase( SECTION, "Function.prototype.__proto__ == Object.prototype", true, Function.prototype.__proto__ == Object.prototype ); +new TestCase( SECTION, "Array.prototype.__proto__ == Object.prototype", true, Array.prototype.__proto__ == Object.prototype ); +new TestCase( SECTION, "String.prototype.__proto__ == Object.prototype", true, String.prototype.__proto__ == Object.prototype ); +new TestCase( SECTION, "Boolean.prototype.__proto__ == Object.prototype", true, Boolean.prototype.__proto__ == Object.prototype ); +new TestCase( SECTION, "Number.prototype.__proto__ == Object.prototype", true, Number.prototype.__proto__ == Object.prototype ); +// new TestCase( SECTION, "Math.prototype.__proto__ == Object.prototype", true, Math.prototype.__proto__ == Object.prototype ); +new TestCase( SECTION, "Date.prototype.__proto__ == Object.prototype", true, Date.prototype.__proto__ == Object.prototype ); +new TestCase( SECTION, "TestCase.prototype.__proto__ == Object.prototype", true, TestCase.prototype.__proto__ == Object.prototype ); + +new TestCase( SECTION, "MyObject.prototype.__proto__ == Object.prototype", true, MyObject.prototype.__proto__ == Object.prototype ); + + +test(); + + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/extensions/15-2.js b/source/spidermonkey-tests/ecma/extensions/15-2.js new file mode 100644 index 00000000..81724949 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15-2.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15-2.js + ECMA Section: 15 Native ECMAScript Objects + + Description: Every built-in function and every built-in constructor + has the Function prototype object, which is the value of + the expression Function.prototype as the value of its + internal [[Prototype]] property, except the Function + prototype object itself. + + That is, the __proto__ property of builtin functions and + constructors should be the Function.prototype object. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Native ECMAScript Objects"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "Object.__proto__", Function.prototype, Object.__proto__ ); +new TestCase( SECTION, "Array.__proto__", Function.prototype, Array.__proto__ ); +new TestCase( SECTION, "String.__proto__", Function.prototype, String.__proto__ ); +new TestCase( SECTION, "Boolean.__proto__", Function.prototype, Boolean.__proto__ ); +new TestCase( SECTION, "Number.__proto__", Function.prototype, Number.__proto__ ); +new TestCase( SECTION, "Date.__proto__", Function.prototype, Date.__proto__ ); +new TestCase( SECTION, "TestCase.__proto__", Function.prototype, TestCase.__proto__ ); + +new TestCase( SECTION, "eval.__proto__", Function.prototype, eval.__proto__ ); +new TestCase( SECTION, "Math.pow.__proto__", Function.prototype, Math.pow.__proto__ ); +new TestCase( SECTION, "String.prototype.indexOf.__proto__", Function.prototype, String.prototype.indexOf.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.1.2.1-1.js b/source/spidermonkey-tests/ecma/extensions/15.1.2.1-1.js new file mode 100644 index 00000000..d5aa8d3a --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.1.2.1-1.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.1.2.1-1.js + ECMA Section: 15.1.2.1 eval(x) + + if x is not a string object, return x. + Description: + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "15.1.2.1-1"; +var VERSION = "ECMA_1"; +var TITLE = "eval(x)"; +var BUGNUMBER = "none"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "eval.length", 1, eval.length ); +new TestCase( SECTION, "delete eval.length", false, delete eval.length ); +new TestCase( SECTION, "var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS", "", eval("var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS") ); +new TestCase( SECTION, "eval.length = null; eval.length", 1, eval( "eval.length = null; eval.length") ); +// new TestCase( SECTION, "eval.__proto__", Function.prototype, eval.__proto__ ); + +// test cases where argument is not a string. should return the argument. + +new TestCase( SECTION, "eval()", void 0, eval() ); +new TestCase( SECTION, "eval(void 0)", void 0, eval( void 0) ); +new TestCase( SECTION, "eval(null)", null, eval( null ) ); +new TestCase( SECTION, "eval(true)", true, eval( true ) ); +new TestCase( SECTION, "eval(false)", false, eval( false ) ); + +new TestCase( SECTION, "typeof eval(new String('Infinity/-0')", "object", typeof eval(new String('Infinity/-0')) ); + +new TestCase( SECTION, "eval([1,2,3,4,5,6])", "1,2,3,4,5,6", ""+eval([1,2,3,4,5,6]) ); +new TestCase( SECTION, "eval(new Array(0,1,2,3)", "1,2,3", ""+ eval(new Array(1,2,3)) ); +new TestCase( SECTION, "eval(1)", 1, eval(1) ); +new TestCase( SECTION, "eval(0)", 0, eval(0) ); +new TestCase( SECTION, "eval(-1)", -1, eval(-1) ); +new TestCase( SECTION, "eval(Number.NaN)", Number.NaN, eval(Number.NaN) ); +new TestCase( SECTION, "eval(Number.MIN_VALUE)", 5e-308, eval(Number.MIN_VALUE) ); +new TestCase( SECTION, "eval(-Number.MIN_VALUE)", -5e-308, eval(-Number.MIN_VALUE) ); +new TestCase( SECTION, "eval(Number.POSITIVE_INFINITY)", Number.POSITIVE_INFINITY, eval(Number.POSITIVE_INFINITY) ); +new TestCase( SECTION, "eval(Number.NEGATIVE_INFINITY)", Number.NEGATIVE_INFINITY, eval(Number.NEGATIVE_INFINITY) ); +new TestCase( SECTION, "eval( 4294967296 )", 4294967296, eval(4294967296) ); +new TestCase( SECTION, "eval( 2147483648 )", 2147483648, eval(2147483648) ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.2.1.1.js b/source/spidermonkey-tests/ecma/extensions/15.2.1.1.js new file mode 100644 index 00000000..3acaf24d --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.2.1.1.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.1.1.js + ECMA Section: 15.2.1.1 The Object Constructor Called as a Function: + Object(value) + Description: When Object is called as a function rather than as a + constructor, the following steps are taken: + + 1. If value is null or undefined, create and return a + new object with no properties other than internal + properties exactly as if the object constructor + had been called on that same value (15.2.2.1). + 2. Return ToObject (value), whose rules are: + + undefined generate a runtime error + null generate a runtime error + boolean create a new Boolean object whose default + value is the value of the boolean. + number Create a new Number object whose default + value is the value of the number. + string Create a new String object whose default + value is the value of the string. + object Return the input argument (no conversion). + + Author: christine@netscape.com + Date: 17 july 1997 +*/ + +var SECTION = "15.2.1.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Object( value )"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var NULL_OBJECT = Object(null); + +new TestCase( SECTION, "Object(null).__proto__", Object.prototype, (Object(null)).__proto__ ); + +new TestCase( SECTION, "Object(void 0).__proto__", Object.prototype, (Object(void 0)).__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.2.3-1.js b/source/spidermonkey-tests/ecma/extensions/15.2.3-1.js new file mode 100644 index 00000000..a7aaf20b --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.2.3-1.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.3-1.js + ECMA Section: 15.2.3 Properties of the Object Constructor + + Description: The value of the internal [[Prototype]] property of the + Object constructor is the Function prototype object. + + Besides the call and construct propreties and the length + property, the Object constructor has properties described + in 15.2.3.1. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.2.3"; +var VERSION = "ECMA_2"; +startTest(); + +writeHeaderToLog( SECTION + " Properties of the Object Constructor"); + +new TestCase( SECTION, "Object.__proto__", Function.prototype, Object.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.2.4.js b/source/spidermonkey-tests/ecma/extensions/15.2.4.js new file mode 100644 index 00000000..f5620094 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.2.4.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.2.4.js + ECMA Section: 15.2.4 Properties of the Object prototype object + + Description: The value of the internal [[Prototype]] property of + the Object prototype object is null + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ + +var SECTION = "15.2.4"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Properties of the Object.prototype object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Object.prototype.__proto__", + null, + Object.prototype.__proto__ ); + +test(); + diff --git a/source/spidermonkey-tests/ecma/extensions/15.3.1.1-1.js b/source/spidermonkey-tests/ecma/extensions/15.3.1.1-1.js new file mode 100644 index 00000000..cf21dbb9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.3.1.1-1.js @@ -0,0 +1,48 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.1.1.js + ECMA Section: 15.3.1.1 The Function Constructor Called as a Function + + Description: + When the Function function is called with some arguments p1, p2, . . . , pn, body + (where n might be 0, that is, there are no "p" arguments, and where body might + also not be provided), the following steps are taken: + + 1. Create and return a new Function object exactly if the function constructor had + been called with the same arguments (15.3.2.1). + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.1.1-1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MyObject = Function( "value", "this.value = value; this.valueOf = Function( 'return this.value' ); this.toString = Function( 'return String(this.value);' )" ); + + +var myfunc = Function(); +myfunc.toString = Object.prototype.toString; + +// not going to test toString here since it is implementation dependent. +// new TestCase( SECTION, "myfunc.toString()", "function anonymous() { }", myfunc.toString() ); + +myfunc.toString = Object.prototype.toString; + +new TestCase( SECTION, + "MyObject.__proto__ == Function.prototype", + true, + MyObject.__proto__ == Function.prototype ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma/extensions/15.3.1.1-2.js b/source/spidermonkey-tests/ecma/extensions/15.3.1.1-2.js new file mode 100644 index 00000000..ab9bbf91 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.3.1.1-2.js @@ -0,0 +1,48 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.1.1-2.js + ECMA Section: 15.3.1.1 The Function Constructor Called as a Function + Function(p1, p2, ..., pn, body ) + + Description: + When the Function function is called with some arguments p1, p2, . . . , pn, + body (where n might be 0, that is, there are no "p" arguments, and where body + might also not be provided), the following steps are taken: + + 1. Create and return a new Function object exactly if the function constructor + had been called with the same arguments (15.3.2.1). + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.1.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor Called as a Function"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var myfunc2 = Function("a, b, c", "return a+b+c" ); +var myfunc3 = Function("a,b", "c", "return a+b+c" ); + +myfunc2.toString = Object.prototype.toString; +myfunc3.toString = Object.prototype.toString; + + +new TestCase( SECTION, + "myfunc2.__proto__", + Function.prototype, + myfunc2.__proto__ ); + +new TestCase( SECTION, + "myfunc3.__proto__", + Function.prototype, + myfunc3.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.3.2.1-1.js b/source/spidermonkey-tests/ecma/extensions/15.3.2.1-1.js new file mode 100644 index 00000000..201fbeb9 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.3.2.1-1.js @@ -0,0 +1,38 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.2.1.js + ECMA Section: 15.3.2.1 The Function Constructor + new Function(p1, p2, ..., pn, body ) + + Description: The last argument specifies the body (executable code) + of a function; any preceding arguments sepcify formal + parameters. + + See the text for description of this section. + + This test examples from the specification. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.2.1"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var MyObject = new Function( "value", "this.value = value; this.valueOf = new Function( 'return this.value' ); this.toString = new Function( 'return String(this.value);' )" ); + +new TestCase( SECTION, + "MyObject.__proto__ == Function.prototype", + true, + MyObject.__proto__ == Function.prototype ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.3.2.1-2.js b/source/spidermonkey-tests/ecma/extensions/15.3.2.1-2.js new file mode 100644 index 00000000..3a6d404b --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.3.2.1-2.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.2.1.js + ECMA Section: 15.3.2.1 The Function Constructor + new Function(p1, p2, ..., pn, body ) + + Description: + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.2.1-2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "The Function Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +var myfunc1 = new Function("a","b","c", "return a+b+c" ); +var myfunc2 = new Function("a, b, c", "return a+b+c" ); +var myfunc3 = new Function("a,b", "c", "return a+b+c" ); + +myfunc1.toString = Object.prototype.toString; +myfunc2.toString = Object.prototype.toString; +myfunc3.toString = Object.prototype.toString; + + +new TestCase( SECTION, "myfunc2.__proto__", Function.prototype, myfunc2.__proto__ ); + +new TestCase( SECTION, "myfunc3.__proto__", Function.prototype, myfunc3.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.3.3.1-1.js b/source/spidermonkey-tests/ecma/extensions/15.3.3.1-1.js new file mode 100644 index 00000000..88e1608c --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.3.3.1-1.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.3.1-1.js + ECMA Section: 15.3.3.1 Properties of the Function Constructor + Function.prototype + + Description: The initial value of Function.prototype is the built-in + Function prototype object. + + This property shall have the attributes [DontEnum | + DontDelete | ReadOnly] + + This test the value of Function.prototype. + + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.3.3.1-1"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Function.prototype"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "Function.prototype == Function.__proto__", true, Function.__proto__ == Function.prototype ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.4.3.js b/source/spidermonkey-tests/ecma/extensions/15.4.3.js new file mode 100644 index 00000000..31ae0f2e --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.4.3.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.4.3.js + ECMA Section: 15.4.3 Properties of the Array Constructor + Description: The value of the internal [[Prototype]] property of the + Array constructor is the Function prototype object. + + Author: christine@netscape.com + Date: 7 october 1997 +*/ + +var SECTION = "15.4.3"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Properties of the Array Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Array.__proto__", + Function.prototype, + Array.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.5.3.js b/source/spidermonkey-tests/ecma/extensions/15.5.3.js new file mode 100644 index 00000000..a45d289e --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.5.3.js @@ -0,0 +1,32 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.3.1.js + ECMA Section: 15.5.3 Properties of the String Constructor + + Description: The value of the internal [[Prototype]] property of + the String constructor is the Function prototype + object. + + In addition to the internal [[Call]] and [[Construct]] + properties, the String constructor also has the length + property, as well as properties described in 15.5.3.1 + and 15.5.3.2. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ + +var SECTION = "15.5.3"; +var VERSION = "ECMA_2"; +startTest(); +var passed = true; +writeHeaderToLog( SECTION + " Properties of the String Constructor" ); + +new TestCase( SECTION, "String.prototype", Function.prototype, String.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.5.4.2.js b/source/spidermonkey-tests/ecma/extensions/15.5.4.2.js new file mode 100644 index 00000000..b67bdbda --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.5.4.2.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.2.js + ECMA Section: 15.5.4.2 String.prototype.toString + + Description: + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var SECTION = "15.5.4.2"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "String.prototype.tostring"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String.prototype.toString.__proto__", Function.prototype, String.prototype.toString.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.5.4.4-4.js b/source/spidermonkey-tests/ecma/extensions/15.5.4.4-4.js new file mode 100644 index 00000000..4da338ce --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.5.4.4-4.js @@ -0,0 +1,73 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.4-4.js + ECMA Section: 15.5.4.4 String.prototype.charAt(pos) + Description: Returns a string containing the character at position + pos in the string. If there is no character at that + string, the result is the empty string. The result is + a string value, not a String object. + + When the charAt method is called with one argument, + pos, the following steps are taken: + 1. Call ToString, with this value as its argument + 2. Call ToInteger pos + 3. Compute the number of characters in Result(1) + 4. If Result(2) is less than 0 is or not less than + Result(3), return the empty string + 5. Return a string of length 1 containing one character + from result (1), the character at position Result(2). + + Note that the charAt function is intentionally generic; + it does not require that its this value be a String + object. Therefore it can be transferred to other kinds + of objects for use as a method. + + This tests assiging charAt to primitive types.. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.4-4"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "String.prototype.charAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +/* + new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "n", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") ); + new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "u", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") ); + new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "l", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") ); + new TestCase( SECTION, "x = null; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "l", eval("x=null; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") ); + + new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "u", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") ); + new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "n", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") ); + new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "d", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") ); + new TestCase( SECTION, "x = undefined; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "e", eval("x=undefined; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") ); +*/ +new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "f", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "a", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "l", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") ); +new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "s", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") ); +new TestCase( SECTION, "x = false; x.__proto.charAt = String.prototype.charAt; x.charAt(4)", "e", eval("x=false; x.__proto__.charAt = String.prototype.charAt; x.charAt(4)") ); + +new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "t", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "r", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "u", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") ); +new TestCase( SECTION, "x = true; x.__proto.charAt = String.prototype.charAt; x.charAt(3)", "e", eval("x=true; x.__proto__.charAt = String.prototype.charAt; x.charAt(3)") ); + +new TestCase( SECTION, "x = NaN; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "N", eval("x=NaN; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = NaN; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "a", eval("x=NaN; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = NaN; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "N", eval("x=NaN; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") ); + +new TestCase( SECTION, "x = 123; x.__proto.charAt = String.prototype.charAt; x.charAt(0)", "1", eval("x=123; x.__proto__.charAt = String.prototype.charAt; x.charAt(0)") ); +new TestCase( SECTION, "x = 123; x.__proto.charAt = String.prototype.charAt; x.charAt(1)", "2", eval("x=123; x.__proto__.charAt = String.prototype.charAt; x.charAt(1)") ); +new TestCase( SECTION, "x = 123; x.__proto.charAt = String.prototype.charAt; x.charAt(2)", "3", eval("x=123; x.__proto__.charAt = String.prototype.charAt; x.charAt(2)") ); + + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.5.4.5-6.js b/source/spidermonkey-tests/ecma/extensions/15.5.4.5-6.js new file mode 100644 index 00000000..8c3470e8 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.5.4.5-6.js @@ -0,0 +1,60 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.5-6.js + ECMA Section: 15.5.4.5 String.prototype.charCodeAt(pos) + Description: Returns a number (a nonnegative integer less than 2^16) + representing the Unicode encoding of the character at + position pos in this string. If there is no character + at that position, the number is NaN. + + When the charCodeAt method is called with one argument + pos, the following steps are taken: + 1. Call ToString, giving it the theis value as its + argument + 2. Call ToInteger(pos) + 3. Compute the number of characters in result(1). + 4. If Result(2) is less than 0 or is not less than + Result(3), return NaN. + 5. Return a value of Number type, of positive sign, whose + magnitude is the Unicode encoding of one character + from result 1, namely the characer at position Result + (2), where the first character in Result(1) is + considered to be at position 0. + + Note that the charCodeAt function is intentionally + generic; it does not require that its this value be a + String object. Therefore it can be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.5-6"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "String.prototype.charCodeAt"; + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, + "var obj = true; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s", + "true", + eval("var obj = true; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s") ); + +new TestCase( SECTION, + "var obj = 1234; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s", + "1234", + eval("var obj = 1234; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 4; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s") ); + +new TestCase( SECTION, + "var obj = 'hello'; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 5; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s", + "hello", + eval("var obj = 'hello'; obj.__proto__.charCodeAt = String.prototype.charCodeAt; var s = ''; for ( var i = 0; i < 5; i++ ) s+= String.fromCharCode( obj.charCodeAt(i) ); s") ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.5.4.7-3.js b/source/spidermonkey-tests/ecma/extensions/15.5.4.7-3.js new file mode 100644 index 00000000..3db9df4f --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.5.4.7-3.js @@ -0,0 +1,127 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.5.4.7-3.js + ECMA Section: 15.5.4.7 String.prototype.lastIndexOf( searchString, pos) + Description: + + If the given searchString appears as a substring of the result of + converting this object to a string, at one or more positions that are + at or to the left of the specified position, then the index of the + rightmost such position is returned; otherwise -1 is returned. If position + is undefined or not supplied, the length of this string value is assumed, + so as to search all of the string. + + When the lastIndexOf method is called with two arguments searchString and + position, the following steps are taken: + + 1.Call ToString, giving it the this value as its argument. + 2.Call ToString(searchString). + 3.Call ToNumber(position). (If position is undefined or not supplied, this step produces the value NaN). + 4.If Result(3) is NaN, use +; otherwise, call ToInteger(Result(3)). + 5.Compute the number of characters in Result(1). + 6.Compute min(max(Result(4), 0), Result(5)). + 7.Compute the number of characters in the string that is Result(2). + 8.Compute the largest possible integer k not larger than Result(6) such that k+Result(7) is not greater + than Result(5), and for all nonnegative integers j less than Result(7), the character at position k+j of + Result(1) is the same as the character at position j of Result(2); but if there is no such integer k, then + compute the value -1. + + 1.Return Result(8). + + Note that the lastIndexOf function is intentionally generic; it does not require that its this value be a + String object. Therefore it can be transferred to other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 2 october 1997 +*/ +var SECTION = "15.5.4.7-3"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "String.protoype.lastIndexOf"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 0 )", + -1, + eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 0 )") ); + +new TestCase( SECTION, + "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 1 )", + 1, + eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 1 )") ); + +new TestCase( SECTION, + "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 2 )", + 1, + eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 2 )") ); + +new TestCase( SECTION, + "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 10 )", + 1, + eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r', 10 )") ); + +new TestCase( SECTION, + "var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r' )", + 1, + eval("var b = true; b.__proto__.lastIndexOf = String.prototype.lastIndexOf; b.lastIndexOf('r' )") ); + +test(); + +function LastIndexOf( string, search, position ) { + string = String( string ); + search = String( search ); + + position = Number( position ) + + if ( isNaN( position ) ) { + position = Infinity; + } else { + position = ToInteger( position ); + } + + result5= string.length; + result6 = Math.min(Math.max(position, 0), result5); + result7 = search.length; + + if (result7 == 0) { + return Math.min(position, result5); + } + + result8 = -1; + + for ( k = 0; k <= result6; k++ ) { + if ( k+ result7 > result5 ) { + break; + } + for ( j = 0; j < result7; j++ ) { + if ( string.charAt(k+j) != search.charAt(j) ){ + break; + } else { + if ( j == result7 -1 ) { + result8 = k; + } + } + } + } + + return result8; +} +function ToInteger( n ) { + n = Number( n ); + if ( isNaN(n) ) { + return 0; + } + if ( Math.abs(n) == 0 || Math.abs(n) == Infinity ) { + return n; + } + + var sign = ( n < 0 ) ? -1 : 1; + + return ( sign * Math.floor(Math.abs(n)) ); +} diff --git a/source/spidermonkey-tests/ecma/extensions/15.6.3.1-5.js b/source/spidermonkey-tests/ecma/extensions/15.6.3.1-5.js new file mode 100644 index 00000000..05475c69 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.6.3.1-5.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.3.1-5.js + ECMA Section: 15.6.3.1 Boolean.prototype + Description: + Author: christine@netscape.com + Date: 28 october 1997 + +*/ +var VERSION = "ECMA_2"; +startTest(); +var SECTION = "15.6.3.1-5"; +var TITLE = "Boolean.prototype" + + writeHeaderToLog( SECTION + " " + TITLE ); + +new TestCase( SECTION, "Function.prototype == Boolean.__proto__", true, Function.prototype == Boolean.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.6.3.js b/source/spidermonkey-tests/ecma/extensions/15.6.3.js new file mode 100644 index 00000000..76ca0015 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.6.3.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.3.js + ECMA Section: 15.6.3 Properties of the Boolean Constructor + + Description: The value of the internal prototype property is + the Function prototype object. + + It has the internal [[Call]] and [[Construct]] + properties, and the length property. + + Author: christine@netscape.com + Date: june 27, 1997 + +*/ +var SECTION = "15.6.3"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Properties of the Boolean Constructor" + writeHeaderToLog( SECTION + TITLE ); + + +new TestCase( SECTION, "Boolean.__proto__ == Function.prototype", true, Boolean.__proto__ == Function.prototype ); +new TestCase( SECTION, "Boolean.length", 1, Boolean.length ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.6.4-2.js b/source/spidermonkey-tests/ecma/extensions/15.6.4-2.js new file mode 100644 index 00000000..c4f994e5 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.6.4-2.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.6.4-2.js + ECMA Section: 15.6.4 Properties of the Boolean Prototype Object + + Description: + The Boolean prototype object is itself a Boolean object (its [[Class]] is + "Boolean") whose value is false. + + The value of the internal [[Prototype]] property of the Boolean prototype object + is the Object prototype object (15.2.3.1). + + Author: christine@netscape.com + Date: 30 september 1997 + +*/ + + +var VERSION = "ECMA_2" + startTest(); +var SECTION = "15.6.4-2"; + +writeHeaderToLog( SECTION + " Properties of the Boolean Prototype Object"); + +new TestCase( SECTION, "Boolean.prototype.__proto__", Object.prototype, Boolean.prototype.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.7.3.js b/source/spidermonkey-tests/ecma/extensions/15.7.3.js new file mode 100644 index 00000000..5bf3b5eb --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.7.3.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.3.js + 15.7.3 Properties of the Number Constructor + + Description: The value of the internal [[Prototype]] property + of the Number constructor is the Function prototype + object. The Number constructor also has the internal + [[Call]] and [[Construct]] properties, and the length + property. + + Other properties are in subsequent tests. + + Author: christine@netscape.com + Date: 29 september 1997 +*/ + +var SECTION = "15.7.3"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Properties of the Number Constructor"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase(SECTION, + "Number.__proto__", + Function.prototype, + Number.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.7.4.js b/source/spidermonkey-tests/ecma/extensions/15.7.4.js new file mode 100644 index 00000000..b62ba409 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.7.4.js @@ -0,0 +1,56 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.7.4.js + ECMA Section: 15.7.4 + + Description: + + The Number prototype object is itself a Number object (its [[Class]] is + "Number") whose value is +0. + + The value of the internal [[Prototype]] property of the Number prototype + object is the Object prototype object (15.2.3.1). + + In following descriptions of functions that are properties of the Number + prototype object, the phrase "this Number object" refers to the object + that is the this value for the invocation of the function; it is an error + if this does not refer to an object for which the value of the internal + [[Class]] property is "Number". Also, the phrase "this number value" refers + to the number value represented by this Number object, that is, the value + of the internal [[Value]] property of this Number object. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "15.7.4"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Number Prototype Object"; + +writeHeaderToLog( SECTION + " "+TITLE); + +new TestCase( SECTION, + "Number.prototype.toString=Object.prototype.toString;Number.prototype.toString()", + "[object Number]", + eval("Number.prototype.toString=Object.prototype.toString;Number.prototype.toString()") ); + +new TestCase( SECTION, + "typeof Number.prototype", + "object", + typeof Number.prototype ); + +new TestCase( SECTION, + "Number.prototype.valueOf()", + 0, + Number.prototype.valueOf() ); + +// The __proto__ property cannot be used in ECMA_1 tests. +// new TestCase( SECTION, "Number.prototype.__proto__", Object.prototype, Number.prototype.__proto__ ); +// new TestCase( SECTION, "Number.prototype.__proto__ == Object.prototype", true, Number.prototype.__proto__ == Object.prototype ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.8-1.js b/source/spidermonkey-tests/ecma/extensions/15.8-1.js new file mode 100644 index 00000000..ce4b029b --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.8-1.js @@ -0,0 +1,50 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.8-1.js + ECMA Section: 15.8 The Math Object + + Description: + + The Math object is merely a single object that has some named properties, + some of which are functions. + + The value of the internal [[Prototype]] property of the Math object is the + Object prototype object (15.2.3.1). + + The Math object does not have a [[Construct]] property; it is not possible + to use the Math object as a constructor with the new operator. + + The Math object does not have a [[Call]] property; it is not possible to + invoke the Math object as a function. + + Recall that, in this specification, the phrase "the number value for x" has + a technical meaning defined in section 8.5. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ + +var SECTION = "15.8-1"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "The Math Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Math.__proto__ == Object.prototype", + true, + Math.__proto__ == Object.prototype ); + +new TestCase( SECTION, + "Math.__proto__", + Object.prototype, + Math.__proto__ ); + +test(); diff --git a/source/spidermonkey-tests/ecma/extensions/15.9.5.js b/source/spidermonkey-tests/ecma/extensions/15.9.5.js new file mode 100644 index 00000000..596deb60 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/15.9.5.js @@ -0,0 +1,42 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.js + ECMA Section: 15.9.5 Properties of the Date prototype object + Description: + + The Date prototype object is itself a Date object (its [[Class]] is + "Date") whose value is NaN. + + The value of the internal [[Prototype]] property of the Date prototype + object is the Object prototype object (15.2.3.1). + + In following descriptions of functions that are properties of the Date + prototype object, the phrase "this Date object" refers to the object that + is the this value for the invocation of the function; it is an error if + this does not refer to an object for which the value of the internal + [[Class]] property is "Date". Also, the phrase "this time value" refers + to the number value for the time represented by this Date object, that is, + the value of the internal [[Value]] property of this Date object. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "15.9.5"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "Properties of the Date Prototype Object"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "Date.prototype.__proto__ == Object.prototype", + true, + Date.prototype.__proto__ == Object.prototype ); +test(); + diff --git a/source/spidermonkey-tests/ecma/extensions/8.6.2.1-1.js b/source/spidermonkey-tests/ecma/extensions/8.6.2.1-1.js new file mode 100644 index 00000000..8e9ccd12 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/8.6.2.1-1.js @@ -0,0 +1,64 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 8.6.2.1-1.js + ECMA Section: 8.6.2.1 Get (Value) + Description: + + When the [[Get]] method of O is called with property name P, the following + steps are taken: + + 1. If O doesn't have a property with name P, go to step 4. + 2. Get the value of the property. + 3. Return Result(2). + 4. If the [[Prototype]] of O is null, return undefined. + 5. Call the [[Get]] method of [[Prototype]] with property name P. + 6. Return Result(5). + + This tests [[Get]] (Value). + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "8.6.2.1-1"; +var VERSION = "ECMA_1"; +startTest(); + +writeHeaderToLog( SECTION + " [[Get]] (Value)"); + +new TestCase( SECTION, "var OBJ = new MyValuelessObject(true); OBJ.valueOf()", true, eval("var OBJ = new MyValuelessObject(true); OBJ.valueOf()") ); +// new TestCase( SECTION, "var OBJ = new MyProtoValuelessObject(true); OBJ + ''", "undefined", eval("var OBJ = new MyProtoValuelessObject(); OBJ + ''") ); +new TestCase( SECTION, "var OBJ = new MyProtolessObject(true); OBJ.valueOf()", true, eval("var OBJ = new MyProtolessObject(true); OBJ.valueOf()") ); + +new TestCase( SECTION, "var OBJ = new MyValuelessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()", Number.POSITIVE_INFINITY, eval("var OBJ = new MyValuelessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()") ); +// new TestCase( SECTION, "var OBJ = new MyProtoValuelessObject(Number.POSITIVE_INFINITY); OBJ + ''", "undefined", eval("var OBJ = new MyProtoValuelessObject(); OBJ + ''") ); +new TestCase( SECTION, "var OBJ = new MyProtolessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()", Number.POSITIVE_INFINITY, eval("var OBJ = new MyProtolessObject(Number.POSITIVE_INFINITY); OBJ.valueOf()") ); + +new TestCase( SECTION, "var OBJ = new MyValuelessObject('string'); OBJ.valueOf()", 'string', eval("var OBJ = new MyValuelessObject('string'); OBJ.valueOf()") ); +// new TestCase( SECTION, "var OBJ = new MyProtoValuelessObject('string'); OJ + ''", "undefined", eval("var OBJ = new MyProtoValuelessObject(); OBJ + ''") ); +new TestCase( SECTION, "var OBJ = new MyProtolessObject('string'); OBJ.valueOf()", 'string', eval("var OBJ = new MyProtolessObject('string'); OBJ.valueOf()") ); + +test(); + +function MyProtoValuelessObject(value) { + this.valueOf = new Function ( "" ); + this.__proto__ = null; +} + +function MyProtolessObject( value ) { + this.valueOf = new Function( "return this.value" ); + this.__proto__ = null; + this.value = value; +} +function MyValuelessObject(value) { + this.__proto__ = new MyPrototypeObject(value); +} +function MyPrototypeObject(value) { + this.valueOf = new Function( "return this.value;" ); + this.toString = new Function( "return (this.value + '');" ); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma/extensions/9.9-1.js b/source/spidermonkey-tests/ecma/extensions/9.9-1.js new file mode 100644 index 00000000..a9312e2c --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/9.9-1.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 9.9-1.js + ECMA Section: 9.9 Type Conversion: ToObject + Description: + + undefined generate a runtime error + null generate a runtime error + boolean create a new Boolean object whose default + value is the value of the boolean. + number Create a new Number object whose default + value is the value of the number. + string Create a new String object whose default + value is the value of the string. + object Return the input argument (no conversion). + Author: christine@netscape.com + Date: 17 july 1997 +*/ + +var VERSION = "ECMA_1"; +startTest(); +var SECTION = "9.9-1"; + +writeHeaderToLog( SECTION + " Type Conversion: ToObject" ); + +new TestCase( SECTION, "(Object(true)).__proto__", Boolean.prototype, (Object(true)).__proto__ ); + +new TestCase( SECTION, "(Object(true)).__proto__", Boolean.prototype, (Object(true)).__proto__ ); + +new TestCase( SECTION, "(Object(0)).__proto__", Number.prototype, (Object(0)).__proto__ ); + +new TestCase( SECTION, "(Object(-0)).__proto__", Number.prototype, (Object(-0)).__proto__ ); + +new TestCase( SECTION, "(Object(1)).__proto__", Number.prototype, (Object(1)).__proto__ ); + +new TestCase( SECTION, "(Object(-1)).__proto__", Number.prototype, (Object(-1)).__proto__ ); + +new TestCase( SECTION, "(Object(Number.MAX_VALUE)).__proto__", Number.prototype, (Object(Number.MAX_VALUE)).__proto__ ); + +new TestCase( SECTION, "(Object(Number.MIN_VALUE)).__proto__", Number.prototype, (Object(Number.MIN_VALUE)).__proto__ ); + +new TestCase( SECTION, "(Object(Number.POSITIVE_INFINITY)).__proto__", Number.prototype, (Object(Number.POSITIVE_INFINITY)).__proto__ ); + +new TestCase( SECTION, "(Object(Number.NEGATIVE_INFINITY)).__proto__", Number.prototype, (Object(Number.NEGATIVE_INFINITY)).__proto__ ); + +new TestCase( SECTION, "(Object(Number.NaN)).__proto__", Number.prototype, (Object(Number.NaN)).__proto__ ); + +new TestCase( SECTION, "(Object('a string')).__proto__", String.prototype, (Object("a string")).__proto__ ); + +new TestCase( SECTION, "(Object('')).__proto__", String.prototype, (Object("")).__proto__ ); + +new TestCase( SECTION, "(Object('\\r\\t\\b\\n\\v\\f')).__proto__", String.prototype, (Object("\\r\\t\\b\\n\\v\\f")).__proto__ ); + +new TestCase( SECTION, "Object( '\\\'\\\"\\' ).__proto__", String.prototype, (Object("\'\"\\")).__proto__ ); + +new TestCase( SECTION, "(Object( new MyObject(true) )).toString()", "[object Object]", eval("(Object( new MyObject(true) )).toString()") ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function ( "return this.value" ); +} diff --git a/source/spidermonkey-tests/ecma/extensions/browser.js b/source/spidermonkey-tests/ecma/extensions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/extensions/errorcolumnblame.js b/source/spidermonkey-tests/ecma/extensions/errorcolumnblame.js new file mode 100644 index 00000000..6ddd7a55 --- /dev/null +++ b/source/spidermonkey-tests/ecma/extensions/errorcolumnblame.js @@ -0,0 +1,75 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 568142; +var summary = 'error reporting blames column as well as line'; + +function test(f, col) { + var caught = false; + try { + f(); + } catch (e) { + caught = true; + assertEq(e.columnNumber, col); + } + assertEq(caught, true); +} + +/* Note single hard tab before return! */ +function foo(o) { + return o.p; +} +test(foo, 1); + +//234567890123456789 +test(function(f) { return f.bar; }, 19); +// 1 2 +//2345678901234567890123456 +test(function(f) { return f(); }, 26); +/* Cover negative colspan case using for(;;) loop with error in update part. */ +test(function(){ + //0 1 2 3 4 + //012345678901234567890123456789012345678901 + eval("function baz() { for (var i = 0; i < 10; i += a.b); assertEq(i !== i, true); }"); + baz(); +}, 41); + +// 1 2 3 +//234567890123456789012345678901234 +test(function() { var tmp = null; tmp(); }, 34) +test(function() { var tmp = null; tmp.foo; }, 35) + +/* Just a generic 'throw'. */ +test(function() { +//234567890123456789 + foo({}); throw new Error('a'); +}, 19); + +/* Be sure to report the right statement */ +test(function() { + function f() { return true; } + function g() { return false; } +//234567890123456789012345678 + f(); g(); f(); if (f()) a += e; +}, 28); + +//2345678901234567890 +test(function() { e++; }, 18); +test(function() {print += e; }, 17); +test(function(){e += 1 }, 16); +test(function() { print[e]; }, 19); +test(function() { e[1]; }, 18); +test(function() { e(); }, 18); +test(function() { 1(); }, 18); +test(function() { Object.defineProperty() }, 18); + +test(function() { +//23456789012345678901 + function foo() { asdf; } foo() +}, 21); + +reportCompare(0, 0, "ok"); + +printStatus("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma/extensions/shell.js b/source/spidermonkey-tests/ecma/extensions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma/jsref.js b/source/spidermonkey-tests/ecma/jsref.js new file mode 100644 index 00000000..e4f2fc0b --- /dev/null +++ b/source/spidermonkey-tests/ecma/jsref.js @@ -0,0 +1,632 @@ +var completed = false; +var testcases; +var tc = 0; + +SECTION = ""; +VERSION = ""; +BUGNUMBER = ""; +TITLE = ""; + +/* + * constant strings + */ +var GLOBAL = "[object global]"; +var PASSED = " PASSED!" +var FAILED = " FAILED! expected: "; +var DEBUG = false; + +TZ_DIFF = -8; + +var TT = ""; +var TT_ = ""; +var BR = ""; +var NBSP = " "; +var CR = "\n"; +var FONT = ""; +var FONT_ = ""; +var FONT_RED = ""; +var FONT_GREEN = ""; +var B = ""; +var B_ = "" +var H2 = ""; +var H2_ = ""; +var HR = ""; +var DEBUG = false; + +var PASSED = " PASSED!" +var FAILED = " FAILED! expected: "; + +function test() { + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ + testcases[tc].actual ); + + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); +} +/* wrapper for test cas constructor that doesn't require the SECTION + * argument. + */ + +function AddTestCase( description, expect, actual ) { + testcases[tc++] = new TestCase( SECTION, description, expect, actual ); +} + +function TestCase( n, d, e, a ) { + this.name = n; + this.description = d; + this.expect = e; + this.actual = a; + this.passed = true; + this.reason = ""; + this.bugnumber = BUGNUMBER; + + this.passed = getTestCaseResult( this.expect, this.actual ); + if ( DEBUG ) { + print( "added " + this.description ); + } +} + +/* + * Set up test environment. + * + */ +function startTest() { + if ( version ) { + // JavaScript 1.3 is supposed to be compliant ecma version 1.0 + if ( VERSION == "ECMA_1" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.3" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.2" ) { + version ( "120" ); + } + if ( VERSION == "JS_1.1" ) { + version ( "110" ); + } + // for ecma version 2.0, we will leave the javascript version to + // the default ( for now ). + } + + // print out bugnumber + + if ( BUGNUMBER ) { + print ("BUGNUMBER: " + BUGNUMBER ); + } + + testcases = new Array(); + tc = 0; +} + + +function test() { + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ testcases[tc].actual ); + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); +} + + +function getTestCaseResult( expect, actual ) { + // because ( NaN == NaN ) always returns false, need to do + // a special compare to see if we got the right result. + if ( actual != actual ) { + if ( typeof actual == "object" ) { + actual = "NaN object"; + } else { + actual = "NaN number"; + } + } + if ( expect != expect ) { + if ( typeof expect == "object" ) { + expect = "NaN object"; + } else { + expect = "NaN number"; + } + } + + var passed = ( expect == actual ) ? true : false; + + // if both objects are numbers + // need to replace w/ IEEE standard for rounding + if ( !passed + && typeof(actual) == "number" + && typeof(expect) == "number" + ) { + if ( Math.abs(actual-expect) < 0.0000001 ) { + passed = true; + } + } + + // verify type is the same + if ( typeof(expect) != typeof(actual) ) { + passed = false; + } + + return passed; +} +function writeTestCaseResult( expect, actual, string ) { + var passed = getTestCaseResult( expect, actual ); + writeFormattedResult( expect, actual, string, passed ); + return passed; +} +function writeFormattedResult( expect, actual, string, passed ) { + var s = TT + string ; + + for ( k = 0; + k < (60 - string.length >= 0 ? 60 - string.length : 5) ; + k++ ) { + } + + s += B ; + s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ; + + print( s + FONT_ + B_ + TT_ ); + + return passed; +} + +function writeHeaderToLog( string ) { + print( H2 + string + H2_ ); +} +function stopTest() +{ + var sizeTag = "<#TEST CASES SIZE>"; + var doneTag = "<#TEST CASES DONE>"; + var beginTag = "<#TEST CASE "; + var endTag = ">"; + + print(sizeTag); + print(testcases.length); + for (tc = 0; tc < testcases.length; tc++) + { + print(beginTag + 'PASSED' + endTag); + print(testcases[tc].passed); + print(beginTag + 'NAME' + endTag); + print(testcases[tc].name); + print(beginTag + 'EXPECTED' + endTag); + print(testcases[tc].expect); + print(beginTag + 'ACTUAL' + endTag); + print(testcases[tc].actual); + print(beginTag + 'DESCRIPTION' + endTag); + print(testcases[tc].description); + print(beginTag + 'REASON' + endTag); + print(( testcases[tc].passed ) ? "" : "wrong value "); + print(beginTag + 'BUGNUMBER' + endTag); + print( BUGNUMBER ); + } + print(doneTag); + print( HR ); + gc(); +} +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} +function err( msg, page, line ) { + testcases[tc].actual = "error"; + testcases[tc].reason = msg; + writeTestCaseResult( testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ testcases[tc].actual + + ": " + testcases[tc].reason ); + stopTest(); + return true; +} + +/** + * Type Conversion functions used by Type Conversion + * + */ + + + + /* + * Date functions used by tests in Date suite + * + */ +var msPerDay = 86400000; +var HoursPerDay = 24; +var MinutesPerHour = 60; +var SecondsPerMinute = 60; +var msPerSecond = 1000; +var msPerMinute = 60000; // msPerSecond * SecondsPerMinute +var msPerHour = 3600000; // msPerMinute * MinutesPerHour + +var TIME_1970 = 0; +var TIME_2000 = 946684800000; +var TIME_1900 = -2208988800000; + +function Day( t ) { + return ( Math.floor(t/msPerDay ) ); +} +function DaysInYear( y ) { + if ( y % 4 != 0 ) { + return 365; + } + if ( (y % 4 == 0) && (y % 100 != 0) ) { + return 366; + } + if ( (y % 100 == 0) && (y % 400 != 0) ) { + return 365; + } + if ( (y % 400 == 0) ){ + return 366; + } else { + return "ERROR: DaysInYear(" + y + ") case not covered"; + } +} +function TimeInYear( y ) { + return ( DaysInYear(y) * msPerDay ); +} +function DayNumber( t ) { + return ( Math.floor( t / msPerDay ) ); +} +function TimeWithinDay( t ) { + if ( t < 0 ) { + return ( (t % msPerDay) + msPerDay ); + } else { + return ( t % msPerDay ); + } +} +function YearNumber( t ) { +} +function TimeFromYear( y ) { + return ( msPerDay * DayFromYear(y) ); +} +function DayFromYear( y ) { + return ( 365*(y-1970) + + Math.floor((y-1969)/4) - + Math.floor((y-1901)/100) + + Math.floor((y-1601)/400) ); +} +function InLeapYear( t ) { + if ( DaysInYear(YearFromTime(t)) == 365 ) { + return 0; + } + if ( DaysInYear(YearFromTime(t)) == 366 ) { + return 1; + } else { + return "ERROR: InLeapYear("+t+") case not covered"; + } +} +function YearFromTime( t ) { + t = Number( t ); + var sign = ( t < 0 ) ? -1 : 1; + var year = ( sign < 0 ) ? 1969 : 1970; + for ( var timeToTimeZero = t; ; ) { + // subtract the current year's time from the time that's left. + timeToTimeZero -= sign * TimeInYear(year) + + // if there's less than the current year's worth of time left, then break. + if ( sign < 0 ) { + if ( sign * timeToTimeZero <= 0 ) { + break; + } else { + year += sign; + } + } else { + if ( sign * timeToTimeZero < 0 ) { + break; + } else { + year += sign; + } + } + } + return ( year ); +} +function MonthFromTime( t ) { + // i know i could use switch but i'd rather not until it's part of ECMA + var day = DayWithinYear( t ); + var leap = InLeapYear(t); + + if ( (0 <= day) && (day < 31) ) { + return 0; + } + if ( (31 <= day) && (day < (59+leap)) ) { + return 1; + } + if ( ((59+leap) <= day) && (day < (90+leap)) ) { + return 2; + } + if ( ((90+leap) <= day) && (day < (120+leap)) ) { + return 3; + } + if ( ((120+leap) <= day) && (day < (151+leap)) ) { + return 4; + } + if ( ((151+leap) <= day) && (day < (181+leap)) ) { + return 5; + } + if ( ((181+leap) <= day) && (day < (212+leap)) ) { + return 6; + } + if ( ((212+leap) <= day) && (day < (243+leap)) ) { + return 7; + } + if ( ((243+leap) <= day) && (day < (273+leap)) ) { + return 8; + } + if ( ((273+leap) <= day) && (day < (304+leap)) ) { + return 9; + } + if ( ((304+leap) <= day) && (day < (334+leap)) ) { + return 10; + } + if ( ((334+leap) <= day) && (day < (365+leap)) ) { + return 11; + } else { + return "ERROR: MonthFromTime("+t+") not known"; + } +} +function DayWithinYear( t ) { + return( Day(t) - DayFromYear(YearFromTime(t))); +} +function DateFromTime( t ) { + var day = DayWithinYear(t); + var month = MonthFromTime(t); + + if ( month == 0 ) { + return ( day + 1 ); + } + if ( month == 1 ) { + return ( day - 30 ); + } + if ( month == 2 ) { + return ( day - 58 - InLeapYear(t) ); + } + if ( month == 3 ) { + return ( day - 89 - InLeapYear(t)); + } + if ( month == 4 ) { + return ( day - 119 - InLeapYear(t)); + } + if ( month == 5 ) { + return ( day - 150- InLeapYear(t)); + } + if ( month == 6 ) { + return ( day - 180- InLeapYear(t)); + } + if ( month == 7 ) { + return ( day - 211- InLeapYear(t)); + } + if ( month == 8 ) { + return ( day - 242- InLeapYear(t)); + } + if ( month == 9 ) { + return ( day - 272- InLeapYear(t)); + } + if ( month == 10 ) { + return ( day - 303- InLeapYear(t)); + } + if ( month == 11 ) { + return ( day - 333- InLeapYear(t)); + } + + return ("ERROR: DateFromTime("+t+") not known" ); +} +function WeekDay( t ) { + var weekday = (Day(t)+4) % 7; + return( weekday < 0 ? 7 + weekday : weekday ); +} + +// missing daylight savins time adjustment + +function HourFromTime( t ) { + var h = Math.floor( t / msPerHour ) % HoursPerDay; + return ( (h<0) ? HoursPerDay + h : h ); +} +function MinFromTime( t ) { + var min = Math.floor( t / msPerMinute ) % MinutesPerHour; + return( ( min < 0 ) ? MinutesPerHour + min : min ); +} +function SecFromTime( t ) { + var sec = Math.floor( t / msPerSecond ) % SecondsPerMinute; + return ( (sec < 0 ) ? SecondsPerMinute + sec : sec ); +} +function msFromTime( t ) { + var ms = t % msPerSecond; + return ( (ms < 0 ) ? msPerSecond + ms : ms ); +} +function LocalTZA() { + return ( TZ_DIFF * msPerHour ); +} +function UTC( t ) { + return ( t - LocalTZA() - DaylightSavingTA(t - LocalTZA()) ); +} +function DaylightSavingTA( t ) { + t = t - LocalTZA(); + + var dst_start = GetFirstSundayInApril(t) + 2*msPerHour; + var dst_end = GetLastSundayInOctober(t)+ 2*msPerHour; + + if ( t >= dst_start && t < dst_end ) { + return msPerHour; + } else { + return 0; + } + + // Daylight Savings Time starts on the first Sunday in April at 2:00AM in + // PST. Other time zones will need to override this function. + + print( new Date( UTC(dst_start + LocalTZA())) ); + + return UTC(dst_start + LocalTZA()); +} +function GetFirstSundayInApril( t ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + + var april = TimeFromYear(year) + TimeInMonth(0, leap) + TimeInMonth(1,leap) + + TimeInMonth(2,leap); + + for ( var first_sunday = april; WeekDay(first_sunday) > 0; + first_sunday += msPerDay ) + { + ; + } + + return first_sunday; +} +function GetLastSundayInOctober( t ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + + for ( var oct = TimeFromYear(year), m = 0; m < 9; m++ ) { + oct += TimeInMonth(m, leap); + } + for ( var last_sunday = oct + 30*msPerDay; WeekDay(last_sunday) > 0; + last_sunday -= msPerDay ) + { + ; + } + return last_sunday; +} +function LocalTime( t ) { + return ( t + LocalTZA() + DaylightSavingTA(t) ); +} +function MakeTime( hour, min, sec, ms ) { + if ( isNaN( hour ) || isNaN( min ) || isNaN( sec ) || isNaN( ms ) ) { + return Number.NaN; + } + + hour = ToInteger(hour); + min = ToInteger( min); + sec = ToInteger( sec); + ms = ToInteger( ms ); + + return( (hour*msPerHour) + (min*msPerMinute) + + (sec*msPerSecond) + ms ); +} +function MakeDay( year, month, date ) { + if ( isNaN(year) || isNaN(month) || isNaN(date) ) { + return Number.NaN; + } + year = ToInteger(year); + month = ToInteger(month); + date = ToInteger(date ); + + var sign = ( year < 1970 ) ? -1 : 1; + var t = ( year < 1970 ) ? 1 : 0; + var y = ( year < 1970 ) ? 1969 : 1970; + + var result5 = year + Math.floor( month/12 ); + var result6 = month % 12; + + if ( year < 1970 ) { + for ( y = 1969; y >= year; y += sign ) { + t += sign * TimeInYear(y); + } + } else { + for ( y = 1970 ; y < year; y += sign ) { + t += sign * TimeInYear(y); + } + } + + var leap = InLeapYear( t ); + + for ( var m = 0; m < month; m++ ) { + t += TimeInMonth( m, leap ); + } + + if ( YearFromTime(t) != result5 ) { + return Number.NaN; + } + if ( MonthFromTime(t) != result6 ) { + return Number.NaN; + } + if ( DateFromTime(t) != 1 ) { + return Number.NaN; + } + + return ( (Day(t)) + date - 1 ); +} +function TimeInMonth( month, leap ) { + // september april june november + // jan 0 feb 1 mar 2 apr 3 may 4 june 5 jul 6 + // aug 7 sep 8 oct 9 nov 10 dec 11 + + if ( month == 3 || month == 5 || month == 8 || month == 10 ) { + return ( 30*msPerDay ); + } + + // all the rest + if ( month == 0 || month == 2 || month == 4 || month == 6 || + month == 7 || month == 9 || month == 11 ) { + return ( 31*msPerDay ); + } + + // save february + return ( (leap == 0) ? 28*msPerDay : 29*msPerDay ); +} +function MakeDate( day, time ) { + if ( day == Number.POSITIVE_INFINITY || + day == Number.NEGATIVE_INFINITY || + day == Number.NaN ) { + return Number.NaN; + } + if ( time == Number.POSITIVE_INFINITY || + time == Number.POSITIVE_INFINITY || + day == Number.NaN) { + return Number.NaN; + } + return ( day * msPerDay ) + time; +} +function TimeClip( t ) { + if ( isNaN( t ) ) { + return ( Number.NaN ); + } + if ( Math.abs( t ) > 8.64e15 ) { + return ( Number.NaN ); + } + + return ( ToInteger( t ) ); +} +function ToInteger( t ) { + t = Number( t ); + + if ( isNaN( t ) ){ + return ( Number.NaN ); + } + if ( t == 0 || t == -0 || + t == Number.POSITIVE_INFINITY || t == Number.NEGATIVE_INFINITY ) { + return 0; + } + + var sign = ( t < 0 ) ? -1 : 1; + + return ( sign * Math.floor( Math.abs( t ) ) ); +} +function Enumerate ( o ) { + var properties = new Array(); + for ( p in o ) { + properties[ properties.length ] = new Array( p, o[p] ); + } + return properties; +} +function AddTestCase( description, expect, actual ) { + testcases[tc++] = new TestCase( SECTION, description, expect, actual ); +} + +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} diff --git a/source/spidermonkey-tests/ecma/shell.js b/source/spidermonkey-tests/ecma/shell.js new file mode 100644 index 00000000..1927eb5d --- /dev/null +++ b/source/spidermonkey-tests/ecma/shell.js @@ -0,0 +1,651 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/* + * Date functions used by tests in Date suite + * + */ +var msPerYear = 31536000000; +var msPerDay = 86400000; +var HoursPerDay = 24; +var MinutesPerHour = 60; +var SecondsPerMinute = 60; +var msPerSecond = 1000; +var msPerMinute = 60000; // msPerSecond * SecondsPerMinute +var msPerHour = 3600000; // msPerMinute * MinutesPerHour + +var TZ_PST = -8; // offset of Pacific Standard Time from UTC +var TZ_DIFF_RAW = GetRawTimezoneOffset(); // raw offset of tester's timezone from UTC +var TZ_DIFF = GetTimezoneOffset(); // offset of tester's timezone from UTC +var PST_DIFF_RAW = TZ_DIFF_RAW - TZ_PST; // raw offset of tester's timezone from PST +var PST_DIFF = TZ_DIFF - TZ_PST; // offset of tester's timezone from PST +var TZ_ADJUST = TZ_DIFF_RAW * msPerHour; +var PST_ADJUST = TZ_PST * msPerHour; + +var DST_PERIOD = DaylightSavingPeriod(); // time period when DST is used +var DST_1970 = DaylightSavingObserved(1970); // Was DST observed in 1970? +var DST_1971 = DaylightSavingObserved(1971); // Was DST observed in 1971? + +var TIME_0000 = (function () + { // calculate time for year 0 + for ( var time = 0, year = 1969; year >= 0; year-- ) { + time -= TimeInYear(year); + } + return time; + })(); +var TIME_1970 = 0; +var TIME_2000 = 946684800000; +var TIME_1900 = -2208988800000; +var UTC_FEB_29_2000 = TIME_2000 + 31*msPerDay + 28*msPerDay; +var UTC_JAN_1_2005 = TIME_2000 + TimeInYear(2000) + TimeInYear(2001) + + TimeInYear(2002) + TimeInYear(2003) + TimeInYear(2004); +var now = new Date(); +var TIME_NOW = now.valueOf(); //valueOf() is to accurate to the millisecond + //Date.parse() is accurate only to the second + +/* + * Originally, the test suite used a hard-coded value TZ_DIFF = -8. + * But that was only valid for testers in the Pacific Standard Time Zone! + * We calculate the proper number dynamically for any tester. We just + * have to be careful not to use a date subject to Daylight Savings Time... + */ +function GetRawTimezoneOffset() +{ + var t1 = new Date(2000, 1, 1).getTimezoneOffset(); + var t2 = new Date(2000, 1 + 6, 1).getTimezoneOffset(); + if ((t1 - t2) >= 0) { + // 1) timezone without daylight saving time + // 2) northern hemisphere with daylight saving time + return -t1 / MinutesPerHour; + } else { + // 3) southern hemisphere with daylight saving time + return -t2 / MinutesPerHour; + } +} + +/* + * Returns the timezone offset, possibly including daylight saving time. + * (This function is only used to obtain the relative timezone offset to PST, + * see TZ_DIFF and PST_DIFF in adjustResultArray().) + */ +function GetTimezoneOffset() +{ + return -(new Date(2000, 1, 1).getTimezoneOffset()) / MinutesPerHour; +} + +/* + * Determine when daylight saving time is used in the current timezone. + */ +function DaylightSavingPeriod() +{ + var t1 = new Date(2000, 1, 1).getTimezoneOffset(); + var t2 = new Date(2000, 1 + 6, 1).getTimezoneOffset(); + if (t1 == t2) { + // timezone without daylight saving time + return 0; + } else if ((t1 - t2) > 0) { + // northern hemisphere with daylight saving time + return 1; + } else { + // southern hemisphere with daylight saving time + return -1; + } +} + +/* + * Test whether daylight time saving was observed in the supplied year + */ +function DaylightSavingObserved(y) +{ + var t1 = new Date(y, 1, 1).getTimezoneOffset(); + var t2 = new Date(y, 1 + 6, 1).getTimezoneOffset(); + return (t1 != t2); +} + +/* + * Don't apply DST near start of epoch unless absolutely necessary + */ +function IgnoreDaylightSaving(t) +{ + if ((0 <= t && t < msPerYear) && !DST_1970) { + return true; + } + if ((msPerYear <= t && t < 2*msPerYear) && !DST_1971) { + return true; + } + return false; +} + +/* + * Date test "ResultArrays" are hard-coded for Pacific Standard Time. + * We must adjust them for the tester's own timezone - + */ +function adjustResultArray(ResultArray, msMode) +{ + // If the tester's system clock is in PST, no need to continue - +// if (!PST_DIFF) {return;} + + /* The date testcases instantiate Date objects in two different ways: + * + * millisecond mode: e.g. dt = new Date(10000000); + * year-month-day mode: dt = new Date(2000, 5, 1, ...); + * + * In the first case, the date is measured from Time 0 in Greenwich (i.e. UTC). + * In the second case, it is measured with reference to the tester's local timezone. + * + * In the first case we must correct those values expected for local measurements, + * like dt.getHours() etc. No correction is necessary for dt.getUTCHours() etc. + * + * In the second case, it is exactly the other way around - + */ + if (msMode) + { + // The hard-coded UTC milliseconds from Time 0 derives from a UTC date. + // Shift to the right by the offset between UTC and the tester. + if (IgnoreDaylightSaving(ResultArray[TIME])) { + var t = ResultArray[TIME] + TZ_DIFF_RAW*msPerHour; + } else { + var t = ResultArray[TIME] + TZ_DIFF*msPerHour; + } + + // Use our date arithmetic functions to determine the local hour, day, etc. + ResultArray[HOURS] = HourFromTime(t); + ResultArray[DAY] = WeekDay(t); + ResultArray[DATE] = DateFromTime(t); + ResultArray[MONTH] = MonthFromTime(t); + ResultArray[YEAR] = YearFromTime(t); + } + else + { + // The hard-coded UTC milliseconds from Time 0 derives from a PST date. + // Shift to the left by the offset between PST and the tester. + var t = ResultArray[TIME] - PST_DIFF*msPerHour; + + // Use our date arithmetic functions to determine the UTC hour, day, etc. + ResultArray[TIME] = t; + ResultArray[UTC_HOURS] = HourFromTime(t); + ResultArray[UTC_DAY] = WeekDay(t); + ResultArray[UTC_DATE] = DateFromTime(t); + ResultArray[UTC_MONTH] = MonthFromTime(t); + ResultArray[UTC_YEAR] = YearFromTime(t); + } +} + +function Day( t ) { + return ( Math.floor(t/msPerDay ) ); +} +function DaysInYear( y ) { + if ( y % 4 != 0 ) { + return 365; + } + if ( (y % 4 == 0) && (y % 100 != 0) ) { + return 366; + } + if ( (y % 100 == 0) && (y % 400 != 0) ) { + return 365; + } + if ( (y % 400 == 0) ){ + return 366; + } else { + return "ERROR: DaysInYear(" + y + ") case not covered"; + } +} +function TimeInYear( y ) { + return ( DaysInYear(y) * msPerDay ); +} +function DayNumber( t ) { + return ( Math.floor( t / msPerDay ) ); +} +function TimeWithinDay( t ) { + + var r = t % msPerDay; + + if (r < 0) + { + r += msPerDay; + } + return r; + +} +function YearNumber( t ) { +} +function TimeFromYear( y ) { + return ( msPerDay * DayFromYear(y) ); +} +function DayFromYear( y ) { + return ( 365*(y-1970) + + Math.floor((y-1969)/4) - + Math.floor((y-1901)/100) + + Math.floor((y-1601)/400) ); +} +function InLeapYear( t ) { + if ( DaysInYear(YearFromTime(t)) == 365 ) { + return 0; + } + if ( DaysInYear(YearFromTime(t)) == 366 ) { + return 1; + } else { + return "ERROR: InLeapYear("+ t + ") case not covered"; + } +} +function YearFromTime( t ) { + t = Number( t ); + var sign = ( t < 0 ) ? -1 : 1; + var year = ( sign < 0 ) ? 1969 : 1970; + for ( var timeToTimeZero = t; ; ) { + // subtract the current year's time from the time that's left. + timeToTimeZero -= sign * TimeInYear(year) + + // if there's less than the current year's worth of time left, then break. + if ( sign < 0 ) { + if ( sign * timeToTimeZero <= 0 ) { + break; + } else { + year += sign; + } + } else { + if ( sign * timeToTimeZero < 0 ) { + break; + } else { + year += sign; + } + } + } + return ( year ); +} +function MonthFromTime( t ) { + // i know i could use switch but i'd rather not until it's part of ECMA + var day = DayWithinYear( t ); + var leap = InLeapYear(t); + + if ( (0 <= day) && (day < 31) ) { + return 0; + } + if ( (31 <= day) && (day < (59+leap)) ) { + return 1; + } + if ( ((59+leap) <= day) && (day < (90+leap)) ) { + return 2; + } + if ( ((90+leap) <= day) && (day < (120+leap)) ) { + return 3; + } + if ( ((120+leap) <= day) && (day < (151+leap)) ) { + return 4; + } + if ( ((151+leap) <= day) && (day < (181+leap)) ) { + return 5; + } + if ( ((181+leap) <= day) && (day < (212+leap)) ) { + return 6; + } + if ( ((212+leap) <= day) && (day < (243+leap)) ) { + return 7; + } + if ( ((243+leap) <= day) && (day < (273+leap)) ) { + return 8; + } + if ( ((273+leap) <= day) && (day < (304+leap)) ) { + return 9; + } + if ( ((304+leap) <= day) && (day < (334+leap)) ) { + return 10; + } + if ( ((334+leap) <= day) && (day < (365+leap)) ) { + return 11; + } else { + return "ERROR: MonthFromTime("+t+") not known"; + } +} +function DayWithinYear( t ) { + return( Day(t) - DayFromYear(YearFromTime(t))); +} +function DateFromTime( t ) { + var day = DayWithinYear(t); + var month = MonthFromTime(t); + + if ( month == 0 ) { + return ( day + 1 ); + } + if ( month == 1 ) { + return ( day - 30 ); + } + if ( month == 2 ) { + return ( day - 58 - InLeapYear(t) ); + } + if ( month == 3 ) { + return ( day - 89 - InLeapYear(t)); + } + if ( month == 4 ) { + return ( day - 119 - InLeapYear(t)); + } + if ( month == 5 ) { + return ( day - 150- InLeapYear(t)); + } + if ( month == 6 ) { + return ( day - 180- InLeapYear(t)); + } + if ( month == 7 ) { + return ( day - 211- InLeapYear(t)); + } + if ( month == 8 ) { + return ( day - 242- InLeapYear(t)); + } + if ( month == 9 ) { + return ( day - 272- InLeapYear(t)); + } + if ( month == 10 ) { + return ( day - 303- InLeapYear(t)); + } + if ( month == 11 ) { + return ( day - 333- InLeapYear(t)); + } + + return ("ERROR: DateFromTime("+t+") not known" ); +} +function WeekDay( t ) { + var weekday = (Day(t)+4) % 7; + return( weekday < 0 ? 7 + weekday : weekday ); +} + +// missing daylight savings time adjustment + +function HourFromTime( t ) { + var h = Math.floor( t / msPerHour ) % HoursPerDay; + return ( (h<0) ? HoursPerDay + h : h ); +} +function MinFromTime( t ) { + var min = Math.floor( t / msPerMinute ) % MinutesPerHour; + return( ( min < 0 ) ? MinutesPerHour + min : min ); +} +function SecFromTime( t ) { + var sec = Math.floor( t / msPerSecond ) % SecondsPerMinute; + return ( (sec < 0 ) ? SecondsPerMinute + sec : sec ); +} +function msFromTime( t ) { + var ms = t % msPerSecond; + return ( (ms < 0 ) ? msPerSecond + ms : ms ); +} +function LocalTZA() { + return ( TZ_DIFF_RAW * msPerHour ); +} +function UTC( t ) { + return ( t - LocalTZA() - DaylightSavingTA(t - LocalTZA()) ); +} +function LocalTime( t ) { + return ( t + LocalTZA() + DaylightSavingTA(t) ); +} +function DaylightSavingTA( t ) { + if (IgnoreDaylightSaving(t)) { + return 0; + } + + if (DST_PERIOD > 0) { + // northern hemisphere + var dst_start = GetDSTStart(t); + var dst_end = GetDSTEnd(t); + + if ( t >= dst_start && t < dst_end ) + return msPerHour; + } else if (DST_PERIOD < 0) { + // southern hemisphere + var dst_start = GetDSTStart_Southern(t); + var dst_end = GetDSTEnd_Southern(t); + + if ( t >= dst_start && t < GetDSTEnd_Southern(t + msPerYear) ) + return msPerHour; + if ( t < dst_end && t >= GetDSTEnd_Southern(t - msPerYear) ) + return msPerHour; + } + + return 0; +} + +function GetFirstSundayInMonth( t, m ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + +// month m 0..11 +// april == 3 +// march == 2 + + // set time to first day of month m + var time = TimeFromYear(year); + for (var i = 0; i < m; ++i) + { + time += TimeInMonth(i, leap); + } + + for ( var first_sunday = time; WeekDay(first_sunday) > 0; + first_sunday += msPerDay ) + { + ; + } + + return first_sunday; +} + +function GetLastSundayInMonth( t, m ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + +// month m 0..11 +// april == 3 +// march == 2 + + // first day of following month + var time = TimeFromYear(year); + for (var i = 0; i <= m; ++i) + { + time += TimeInMonth(i, leap); + } + // prev day == last day of month + time -= msPerDay; + + for ( var last_sunday = time; WeekDay(last_sunday) > 0; + last_sunday -= msPerDay ) + { + ; + } + return last_sunday; +} + +/* + 15.9.1.9 Daylight Saving Time Adjustment + + The implementation of ECMAScript should not try to determine whether + the exact time was subject to daylight saving time, but just whether + daylight saving time would have been in effect if the current + daylight saving time algorithm had been used at the time. This avoids + complications such as taking into account the years that the locale + observed daylight saving time year round. +*/ + +/* + US DST algorithm + + Before 2007, DST starts first Sunday in April at 2 AM and ends last + Sunday in October at 2 AM + + Starting in 2007, DST starts second Sunday in March at 2 AM and ends + first Sunday in November at 2 AM + + Note that different operating systems behave differently. + + Fully patched Windows XP uses the 2007 algorithm for all dates while + fully patched Fedora Core 6 and RHEL 4 Linux use the algorithm in + effect at the time. + + Since pre-2007 DST is a subset of 2007 DST rules, this only affects + tests that occur in the period Mar-Apr and Oct-Nov where the two + algorithms do not agree. + +*/ + +function GetDSTStart( t ) +{ + return (GetFirstSundayInMonth(t, 2) + 7*msPerDay + 2*msPerHour - LocalTZA()); +} + +function GetDSTEnd( t ) +{ + return (GetFirstSundayInMonth(t, 10) + 2*msPerHour - LocalTZA()); +} + +function GetOldDSTStart( t ) +{ + return (GetFirstSundayInMonth(t, 3) + 2*msPerHour - LocalTZA()); +} + +function GetOldDSTEnd( t ) +{ + return (GetLastSundayInMonth(t, 9) + 2*msPerHour - LocalTZA()); +} + +/* + * Daylight saving time start/end date for 'Australia' + * (arbitrarily chosen as a representative for the southern hemisphere) + */ + +function GetDSTStart_Southern( t ) +{ + return (GetFirstSundayInMonth(t, 9) + 2*msPerHour - LocalTZA()); +} + +function GetDSTEnd_Southern( t ) +{ + return (GetFirstSundayInMonth(t, 3) + 2*msPerHour - LocalTZA()); +} + +function MakeTime( hour, min, sec, ms ) { + if ( isNaN( hour ) || isNaN( min ) || isNaN( sec ) || isNaN( ms ) ) { + return Number.NaN; + } + + hour = ToInteger(hour); + min = ToInteger( min); + sec = ToInteger( sec); + ms = ToInteger( ms ); + + return( (hour*msPerHour) + (min*msPerMinute) + + (sec*msPerSecond) + ms ); +} +function MakeDay( year, month, date ) { + if ( isNaN(year) || isNaN(month) || isNaN(date) ) { + return Number.NaN; + } + year = ToInteger(year); + month = ToInteger(month); + date = ToInteger(date ); + + var sign = ( year < 1970 ) ? -1 : 1; + var t = ( year < 1970 ) ? 1 : 0; + var y = ( year < 1970 ) ? 1969 : 1970; + + var result5 = year + Math.floor( month/12 ); + var result6 = month % 12; + + if ( year < 1970 ) { + for ( y = 1969; y >= year; y += sign ) { + t += sign * TimeInYear(y); + } + } else { + for ( y = 1970 ; y < year; y += sign ) { + t += sign * TimeInYear(y); + } + } + + var leap = InLeapYear( t ); + + for ( var m = 0; m < month; m++ ) { + t += TimeInMonth( m, leap ); + } + + if ( YearFromTime(t) != result5 ) { + return Number.NaN; + } + if ( MonthFromTime(t) != result6 ) { + return Number.NaN; + } + if ( DateFromTime(t) != 1 ) { + return Number.NaN; + } + + return ( (Day(t)) + date - 1 ); +} +function TimeInMonth( month, leap ) { + // september april june november + // jan 0 feb 1 mar 2 apr 3 may 4 june 5 jul 6 + // aug 7 sep 8 oct 9 nov 10 dec 11 + + if ( month == 3 || month == 5 || month == 8 || month == 10 ) { + return ( 30*msPerDay ); + } + + // all the rest + if ( month == 0 || month == 2 || month == 4 || month == 6 || + month == 7 || month == 9 || month == 11 ) { + return ( 31*msPerDay ); + } + + // save february + return ( (leap == 0) ? 28*msPerDay : 29*msPerDay ); +} +function MakeDate( day, time ) { + if ( day == Number.POSITIVE_INFINITY || + day == Number.NEGATIVE_INFINITY ) { + return Number.NaN; + } + if ( time == Number.POSITIVE_INFINITY || + time == Number.NEGATIVE_INFINITY ) { + return Number.NaN; + } + return ( day * msPerDay ) + time; +} +function TimeClip( t ) { + if ( isNaN( t ) ) { + return ( Number.NaN ); + } + if ( Math.abs( t ) > 8.64e15 ) { + return ( Number.NaN ); + } + + return ( ToInteger( t ) ); +} +function ToInteger( t ) { + t = Number( t ); + + if ( isNaN( t ) ){ + return ( Number.NaN ); + } + if ( t == 0 || t == -0 || + t == Number.POSITIVE_INFINITY || t == Number.NEGATIVE_INFINITY ) { + return 0; + } + + var sign = ( t < 0 ) ? -1 : 1; + + return ( sign * Math.floor( Math.abs( t ) ) ); +} +function Enumerate ( o ) { + var p; + for ( p in o ) { + print( p +": " + o[p] ); + } +} + +/* these functions are useful for running tests manually in Rhino */ + +function GetContext() { + return Packages.com.netscape.javascript.Context.getCurrentContext(); +} +function OptLevel( i ) { + i = Number(i); + var cx = GetContext(); + cx.setOptimizationLevel(i); +} +/* end of Rhino functions */ + diff --git a/source/spidermonkey-tests/ecma/template.js b/source/spidermonkey-tests/ecma/template.js new file mode 100644 index 00000000..56da21cb --- /dev/null +++ b/source/spidermonkey-tests/ecma/template.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + */ + + +/** + * File Name: template.js + * Reference: ** replace with bugzilla URL or document reference ** + * Description: ** replace with description of test ** + * Author: ** replace with your e-mail address ** + */ + +var SECTION = ""; // provide a document reference (ie, ECMA section) +var VERSION = "ECMA"; // Version of JavaScript or ECMA +var TITLE = ""; // Provide ECMA section title or a description +var BUGNUMBER = ""; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + +/* + * Calls to AddTestCase here. AddTestCase is a function that is defined + * in shell.js and takes three arguments: + * - a string representation of what is being tested + * - the expected result + * - the actual result + * + * For example, a test might look like this: + * + * AddTestCase("** description", + * "** expected value", + * "** actual value"); + */ + +// leave this alone. this executes the test cases and +// displays results. +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/boolean-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/boolean-001.js new file mode 100644 index 00000000..d2cea72b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/boolean-001.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: boolean-001.js + Description: Corresponds to ecma/Boolean/15.6.4.2-4-n.js + + The toString function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: june 27, 1997 +*/ +var SECTION = "boolean-001.js"; +var VERSION = "JS1_4"; +var TITLE = "Boolean.prototype.toString()"; +startTest(); +writeHeaderToLog( SECTION +" "+ TITLE ); + +var exception = "No exception thrown"; +var result = "Failed"; + +var TO_STRING = Boolean.prototype.toString; + +try { + var s = new String("Not a Boolean"); + s.toString = TO_STRING; + s.toString(); +} catch ( e ) { + result = "Passed!"; + exception = e.toString(); +} + +new TestCase( + SECTION, + "Assigning Boolean.prototype.toString to a String object "+ + "(threw " +exception +")", + "Passed!", + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/boolean-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/boolean-002.js new file mode 100644 index 00000000..8dd55ed6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/boolean-002.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: boolean-001.js + Description: Corresponds to ecma/Boolean/15.6.4.3-4-n.js + + 15.6.4.3 Boolean.prototype.valueOf() + Returns this boolean value. + + The valueOf function is not generic; it generates + a runtime error if its this value is not a Boolean + object. Therefore it cannot be transferred to other + kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 09 september 1998 +*/ +var SECTION = "boolean-002.js"; +var VERSION = "JS1_4"; +var TITLE = "Boolean.prototype.valueOf()"; +startTest(); +writeHeaderToLog( SECTION +" "+ TITLE ); + + +var exception = "No exception thrown"; +var result = "Failed"; + +var VALUE_OF = Boolean.prototype.valueOf; + +try { + var s = new String("Not a Boolean"); + s.valueOf = VALUE_0F; + s.valueOf(); +} catch ( e ) { + result = "Passed!"; + exception = e.toString(); +} + +new TestCase( + SECTION, + "Assigning Boolean.prototype.valueOf to a String object "+ + "(threw " +exception +")", + "Passed!", + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/browser.js b/source/spidermonkey-tests/ecma_2/Exceptions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/date-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/date-001.js new file mode 100644 index 00000000..24cfd102 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/date-001.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: date-001.js + Corresponds To: 15.9.5.2-2.js + ECMA Section: 15.9.5.2 Date.prototype.toString + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the Date in a + convenient, human-readable form in the current time zone. + + The toString function is not generic; it generates a runtime error if its + this value is not a Date object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + + This verifies that calling toString on an object that is not a string + generates a runtime error. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "date-001"; +var VERSION = "JS1_4"; +var TITLE = "Date.prototype.toString"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var OBJ = new MyObject( new Date(0) ); + result = OBJ.toString(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "OBJECT = new MyObject( new Date(0)) ; result = OBJ.toString()" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function( "return this.value" ); + this.toString = Date.prototype.toString; + return this; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/date-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/date-002.js new file mode 100644 index 00000000..0f379b54 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/date-002.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: date-002.js + Corresponds To: 15.9.5.23-3-n.js + ECMA Section: 15.9.5.23 + Description: Date.prototype.setTime + + 1. If the this value is not a Date object, generate a runtime error. + 2. Call ToNumber(time). + 3. Call TimeClip(Result(1)). + 4. Set the [[Value]] property of the this value to Result(2). + 5. Return the value of the [[Value]] property of the this value. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "date-002"; +var VERSION = "JS1_4"; +var TITLE = "Date.prototype.setTime()"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var MYDATE = new MyDate(); + result = MYDATE.setTime(0); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "MYDATE = new MyDate(); MYDATE.setTime(0)" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyDate(value) { + this.value = value; + this.setTime = Date.prototype.setTime; + return this; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/date-003.js b/source/spidermonkey-tests/ecma_2/Exceptions/date-003.js new file mode 100644 index 00000000..f8f48c69 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/date-003.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: date-003.js + Corresponds To 15.9.5.3-1.js + ECMA Section: 15.9.5.3-1 Date.prototype.valueOf + Description: + + The valueOf function returns a number, which is this time value. + + The valueOf function is not generic; it generates a runtime error if + its this value is not a Date object. Therefore it cannot be transferred + to other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "date-003"; +var VERSION = "JS1_4"; +var TITLE = "Date.prototype.valueOf"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var OBJ = new MyObject( new Date(0) ); + result = OBJ.valueOf(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "OBJ = new MyObject( new Date(0)); OBJ.valueOf()" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyObject( value ) { + this.value = value; + this.valueOf = Date.prototype.valueOf; +// The following line causes an infinte loop +// this.toString = new Function( "return this+\"\";"); + return this; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/date-004.js b/source/spidermonkey-tests/ecma_2/Exceptions/date-004.js new file mode 100644 index 00000000..fd8733cb --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/date-004.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: date-004.js + Corresponds To: 15.9.5.4-2-n.js + ECMA Section: 15.9.5.4-1 Date.prototype.getTime + Description: + + 1. If the this value is not an object whose [[Class]] property is "Date", + generate a runtime error. + 2. Return this time value. + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "date-004"; +var VERSION = "JS1_4"; +var TITLE = "Date.prototype.getTime"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var MYDATE = new MyDate(); + result = MYDATE.getTime(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "MYDATE = new MyDate(); MYDATE.getTime()" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyDate( value ) { + this.value = value; + this.getTime = Date.prototype.getTime; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-001.js new file mode 100644 index 00000000..987ba0af --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-001.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-001 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * Call error. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-001"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: CallError"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +Call_1(); + +test(); + +function Call_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + Math(); + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "Math() [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-002.js new file mode 100644 index 00000000..74ce79a9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-002.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-002 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * Construct error. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-002"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: ConstructError"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +Construct_1(); + +test(); + +function Construct_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + result = new Math(); + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "new Math() [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-003.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-003.js new file mode 100644 index 00000000..7bc02a62 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-003.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-003 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * Target error. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-003"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: TargetError"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +Target_1(); + +test(); + +function Target_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + string = new String("hi"); + string.toString = Boolean.prototype.toString; + string.toString(); + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "string = new String(\"hi\");"+ + "string.toString = Boolean.prototype.toString" + + "string.toString() [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-004.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-004.js new file mode 100644 index 00000000..41b7ac3a --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-004.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-004 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * ToObject error. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-004"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: ToObjectError"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +ToObject_1(); + +test(); + +function ToObject_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + result = foo["bar"]; + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "foo[\"bar\"] [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-005.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-005.js new file mode 100644 index 00000000..152aebe4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-005.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-005 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * ToObject error. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-005"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: ToObjectError"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +ToObject_1(); + +test(); + +function ToObject_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + result = foo["bar"]; + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "foo[\"bar\"] [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-006.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-006.js new file mode 100644 index 00000000..cf9df729 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-006.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-006 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * ToPrimitive error. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-006"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: TypeError"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +ToPrimitive_1(); + +test(); + + +/** + * Getting the [[DefaultValue]] of any instances of MyObject + * should result in a runtime error in ToPrimitive. + */ + +function MyObject() { + this.toString = void 0; + this.valueOf = void 0; +} + +function ToPrimitive_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + result = new MyObject() + new MyObject(); + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "new MyObject() + new MyObject() [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-007.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-007.js new file mode 100644 index 00000000..bae0027b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-007.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-007 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * DefaultValue error. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-007"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: TypeError"; +var BUGNUMBER="318250"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DefaultValue_1(); + +test(); + + +/** + * Getting the [[DefaultValue]] of any instances of MyObject + * should result in a runtime error in ToPrimitive. + */ + +function MyObject() { + this.toString = void 0; + this.valueOf = new Object(); +} + +function DefaultValue_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + result = new MyObject() + new MyObject(); + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "new MyObject() + new MyObject() [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-008.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-008.js new file mode 100644 index 00000000..f7efa9fb --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-008.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-008 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * SyntaxError. + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-008"; +var VERSION = "js1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: SyntaxError"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +Syntax_1(); + +test(); + +function Syntax_1() { + result = "failed: no exception thrown"; + exception = null; + + try { + result = eval("continue;"); + } catch ( e ) { + result = "passed: threw exception", + exception = e.toString(); + } finally { + new TestCase( + SECTION, + "eval(\"continue\") [ exception is " + exception +" ]", + "passed: threw exception", + result ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-009.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-009.js new file mode 100644 index 00000000..1229bf56 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-009.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: exception-009 + * ECMA Section: + * Description: Tests for JavaScript Standard Exceptions + * + * Regression test for nested try blocks. + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=312964 + * + * Author: christine@netscape.com + * Date: 31 August 1998 + */ +var SECTION = "exception-009"; +var VERSION = "JS1_4"; +var TITLE = "Tests for JavaScript Standard Exceptions: SyntaxError"; +var BUGNUMBER= "312964"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +try { + expect = "passed: no exception thrown"; + result = expect; + Nested_1(); +} catch ( e ) { + result = "failed: threw " + e; +} finally { + new TestCase( + SECTION, + "nested try", + expect, + result ); +} + + +test(); + +function Nested_1() { + try { + try { + } catch (a) { + } finally { + } + } catch (b) { + } finally { + } +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-010-n.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-010-n.js new file mode 100644 index 00000000..46fe72fd --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-010-n.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var SECTION = "exception-010"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Don't Crash throwing null"; + +writeHeaderToLog( SECTION + " "+ TITLE); +print("Null throw test."); +print("BUGNUMBER: 21799"); + +DESCRIPTION = "throw null"; +EXPECTED = "error"; + +new TestCase( SECTION, "throw null", "error", eval("throw null" )); + +test(); + +print("FAILED!: Should have exited with uncaught exception."); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/exception-011-n.js b/source/spidermonkey-tests/ecma_2/Exceptions/exception-011-n.js new file mode 100644 index 00000000..17f19723 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/exception-011-n.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var SECTION = "exception-011"; +var VERSION = "ECMA_2"; +startTest(); +var TITLE = "Don't Crash throwing undefined"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +print("Undefined throw test."); + +DESCRIPTION = "throw undefined"; +EXPECTED = "error"; + +new TestCase( SECTION, "throw undefined", "error", eval("throw (void 0)") ); + +test(); + +print("FAILED!: Should have exited with uncaught exception."); + + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-001.js new file mode 100644 index 00000000..90b44839 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-001.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-001.js + Corresponds to: ecma/Expressions/11.12-2-n.js + ECMA Section: 11.12 + Description: + + The grammar for a ConditionalExpression in ECMAScript is a little bit + different from that in C and Java, which each allow the second + subexpression to be an Expression but restrict the third expression to + be a ConditionalExpression. The motivation for this difference in + ECMAScript is to allow an assignment expression to be governed by either + arm of a conditional and to eliminate the confusing and fairly useless + case of a comma expression as the center expression. + + Author: christine@netscape.com + Date: 09 september 1998 +*/ +var SECTION = "expression-001"; +var VERSION = "JS1_4"; +var TITLE = "Conditional operator ( ? : )" + startTest(); +writeHeaderToLog( SECTION + " " + TITLE ); + +// the following expression should be an error in JS. + +var result = "Failed" + var exception = "No exception was thrown"; + +try { + eval("var MY_VAR = true ? \"EXPR1\", \"EXPR2\" : \"EXPR3\""); +} catch ( e ) { + result = "Passed"; + exception = e.toString(); +} + +new TestCase( + SECTION, + "comma expression in a conditional statement "+ + "(threw "+ exception +")", + "Passed", + result ); + + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-002.js new file mode 100644 index 00000000..0110f23b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-002.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expressions-002.js + Corresponds to: ecma/Expressions/11.2.1-3-n.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Try to access properties of an object whose value is undefined. + + Author: christine@netscape.com + Date: 09 september 1998 +*/ +var SECTION = "expressions-002.js"; +var VERSION = "JS1_4"; +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); + +startTest(); + +// go through all Native Function objects, methods, and properties and get their typeof. + +var PROPERTY = new Array(); +var p = 0; + +// try to access properties of primitive types + +OBJECT = new Property( "undefined", void 0, "undefined", NaN ); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = OBJECT.value.valueOf(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + + +new TestCase( + SECTION, + "Get the value of an object whose value is undefined "+ + "(threw " + exception +")", + expect, + result ); + +test(); + +function Property( object, value, string, number ) { + this.object = object; + this.string = String(value); + this.number = Number(value); + this.valueOf = value; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-003.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-003.js new file mode 100644 index 00000000..ba5f9c07 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-003.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expressions-003.js + Corresponds to: ecma/Expressions/11.2.1-3-n.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Try to access properties of an object whose value is undefined. + + Author: christine@netscape.com + Date: 09 september 1998 +*/ +var SECTION = "expressions-003.js"; +var VERSION = "JS1_4"; +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); + +startTest(); + +// try to access properties of primitive types + +OBJECT = new Property( "undefined", void 0, "undefined", NaN ); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = OBJECT.value.toString(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + + +new TestCase( + SECTION, + "Get the toString value of an object whose value is undefined "+ + "(threw " + exception +")", + expect, + result ); + +test(); + +function Property( object, value, string, number ) { + this.object = object; + this.string = String(value); + this.number = Number(value); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-004.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-004.js new file mode 100644 index 00000000..5bf19d9e --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-004.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-004.js + Corresponds To: 11.2.1-4-n.js + ECMA Section: 11.2.1 Property Accessors + Description: + + Author: christine@netscape.com + Date: 09 september 1998 +*/ +var SECTION = "expression-004"; +var VERSION = "JS1_4"; +var TITLE = "Property Accessors"; +writeHeaderToLog( SECTION + " "+TITLE ); +startTest(); + +var OBJECT = new Property( "null", null, "null", 0 ); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = OBJECT.value.toString(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "Get the toString value of an object whose value is null "+ + "(threw " + exception +")", + expect, + result ); + +test(); + +function Property( object, value, string, number ) { + this.object = object; + this.string = String(value); + this.number = Number(value); + this.value = value; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-005.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-005.js new file mode 100644 index 00000000..c1e76b7c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-005.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-005.js + Corresponds To: 11.2.2-10-n.js + ECMA Section: 11.2.2. The new operator + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "expression-005"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var expect = "Passed"; +var exception = "No exception thrown"; + +try { + result = new Math(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "result= new Math() (threw " + exception + ")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-006.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-006.js new file mode 100644 index 00000000..2ab13479 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-006.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-006.js + Corresponds to: 11.2.2-1-n.js + ECMA Section: 11.2.2. The new operator + Description: + + http://scopus/bugsplat/show_bug.cgi?id=327765 + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-006.js"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; +var BUGNUMBER="327765"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var OBJECT = new Object(); + result = new OBJECT(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "OBJECT = new Object; result = new OBJECT()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-007.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-007.js new file mode 100644 index 00000000..3e01e0d8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-007.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-007.js + Corresponds To: 11.2.2-2-n.js + ECMA Section: 11.2.2. The new operator + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-007"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + UNDEFINED = void 0; + result = new UNDEFINED(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "UNDEFINED = void 0; result = new UNDEFINED()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-008.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-008.js new file mode 100644 index 00000000..caf31019 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-008.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-008 + Corresponds To: 11.2.2-3-n.js + ECMA Section: 11.2.2. The new operator + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-008"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var NULL = null; +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = new NULL(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "NULL = null; result = new NULL()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-009.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-009.js new file mode 100644 index 00000000..9a997d7f --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-009.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-009 + Corresponds to: ecma/Expressions/11.2.2-4-n.js + ECMA Section: 11.2.2. The new operator + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-009"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var STRING = ""; + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = new STRING(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "STRING = ''; result = new STRING()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-010.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-010.js new file mode 100644 index 00000000..f8ad983c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-010.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-010.js + Corresponds To: 11.2.2-5-n.js + ECMA Section: 11.2.2. The new operator + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-010"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var NUMBER = 0; + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = new NUMBER(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "NUMBER=0, result = new NUMBER()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-011.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-011.js new file mode 100644 index 00000000..8337b9b7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-011.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-011.js + Corresponds To: ecma/Expressions/11.2.2-6-n.js + ECMA Section: 11.2.2. The new operator + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-011"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var BOOLEAN = true; + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var OBJECT = new BOOLEAN(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "BOOLEAN = true; result = new BOOLEAN()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-012.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-012.js new file mode 100644 index 00000000..69e39ba4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-012.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-012.js + Corresponds To: ecma/Expressions/11.2.2-6-n.js + ECMA Section: 11.2.2. The new operator + Description: + http://scopus/bugsplat/show_bug.cgi?id=327765 + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-012"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; +var BUGNUMBER= "327765"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var STRING = new String("hi"); +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = new STRING(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "STRING = new String(\"hi\"); result = new STRING()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-013.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-013.js new file mode 100644 index 00000000..f4986a5c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-013.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-013.js + Corresponds To: ecma/Expressions/11.2.2-8-n.js + ECMA Section: 11.2.2. The new operator + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-013"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; +var BUGNUMBER= "327765"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var NUMBER = new Number(1); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = new NUMBER(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "NUMBER = new Number(1); result = new NUMBER()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-014.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-014.js new file mode 100644 index 00000000..ac2dadae --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-014.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-014.js + Corresponds To: ecma/Expressions/11.2.2-9-n.js + ECMA Section: 11.2.2. The new operator + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-014.js"; +var VERSION = "ECMA_1"; +var TITLE = "The new operator"; +var BUGNUMBER= "327765"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var BOOLEAN = new Boolean(); + + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = new BOOLEAN(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "BOOLEAN = new Boolean(); result = new BOOLEAN()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-015.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-015.js new file mode 100644 index 00000000..4febd4c3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-015.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-015.js + Corresponds To: ecma/Expressions/11.2.3-2-n.js + ECMA Section: 11.2.3. Function Calls + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-015"; +var VERSION = "JS1_4"; +var TITLE = "Function Calls"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("result = 3.valueOf();"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "3.valueOf()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-016.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-016.js new file mode 100644 index 00000000..9d0bfcef --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-016.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-016.js + Corresponds To: ecma/Expressions/11.2.3-3-n.js + ECMA Section: 11.2.3. Function Calls + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-016"; +var VERSION = "JS1_4"; +var TITLE = "Function Calls"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = (void 0).valueOf(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "(void 0).valueOf()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-017.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-017.js new file mode 100644 index 00000000..1e357ead --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-017.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-07.js + Corresponds To: ecma/Expressions/11.2.3-4-n.js + ECMA Section: 11.2.3. Function Calls + Description: + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-017"; +var VERSION = "JS1_4"; +var TITLE = "Function Calls"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = nullvalueOf(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "null.valueOf()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/expression-019.js b/source/spidermonkey-tests/ecma_2/Exceptions/expression-019.js new file mode 100644 index 00000000..76c26bca --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/expression-019.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: expression-019.js + Corresponds To: 11.2.2-7-n.js + ECMA Section: 11.2.2. The new operator + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "expression-019"; +var VERSION = "JS1_4"; +var TITLE = "The new operator"; +var BUGNUMBER= "327765"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var STRING = new String("hi"); + result = new STRING(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var STRING = new String(\"hi\"); result = new STRING();" + + " (threw " + exception + ")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/function-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/function-001.js new file mode 100644 index 00000000..ab8b9fa7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/function-001.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: boolean-001.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232 + * + * eval("function f(){}function g(){}") at top level is an error for JS1.2 + * and above (missing ; between named function expressions), but declares f + * and g as functions below 1.2. + * + * Fails to produce error regardless of version: + * js> version(100) + * 120 + * js> eval("function f(){}function g(){}") + * js> version(120); + * 100 + * js> eval("function f(){}function g(){}") + * js> + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "function-001.js"; +var VERSION = "JS_12"; +var TITLE = "functions not separated by semicolons are errors in version 120 and higher"; +var BUGNUMBER="10278"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "pass"; +var exception = "no exception thrown"; + +try { + eval("function f(){}function g(){}"); +} catch ( e ) { + result = "fail"; + exception = e.toString(); +} + +new TestCase( + SECTION, + "eval(\"function f(){}function g(){}\") (threw "+exception, + "pass", + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/global-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/global-001.js new file mode 100644 index 00000000..228b110c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/global-001.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: global-001 + Corresponds To: ecma/GlobalObject/15.1-1-n.js + ECMA Section: The global object + Description: + + The global object does not have a [[Construct]] property; it is not + possible to use the global object as a constructor with the new operator. + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "global-001"; +var VERSION = "ECMA_1"; +var TITLE = "The Global Object"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = new this(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "result = new this()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/global-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/global-002.js new file mode 100644 index 00000000..1639a34b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/global-002.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: global-002 + Corresponds To: ecma/GlobalObject/15.1-2-n.js + ECMA Section: The global object + Description: + + The global object does not have a [[Construct]] property; it is not + possible to use the global object as a constructor with the new operator. + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "global-002"; +var VERSION = "JS1_4"; +var TITLE = "The Global Object"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = this(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "result = this()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-001.js new file mode 100644 index 00000000..3dbd61d9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-001.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-001.js + CorrespondsTo: ecma/LexicalConventions/7.2.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + this test uses onerror to capture line numbers. because + we use on error, we can only have one test case per file. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "lexical-001"; +var VERSION = "JS1_4"; +var TITLE = "Line Terminators"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = eval("\r\n\expect"); +} catch ( e ) { + exception = e.toString(); +} + +new TestCase( + SECTION, + "OBJECT = new Object; result = new OBJECT()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-002.js new file mode 100644 index 00000000..19eb30c0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-002.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-002.js + Corresponds To: ecma/LexicalConventions/7.2-3-n.js + ECMA Section: 7.2 Line Terminators + Description: - readability + - separate tokens + - may occur between any two tokens + - cannot occur within any token, not even a string + - affect the process of automatic semicolon insertion. + + white space characters are: + unicode name formal name string representation + \u000A line feed <LF> \n + \u000D carriage return <CR> \r + + this test uses onerror to capture line numbers. because + we use on error, we can only have one test case per file. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "lexical-002"; +var VERSION = "JS1_4"; +var TITLE = "Line Terminators"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + result = eval("\r\n\expect"); +} catch ( e ) { + exception = e.toString(); +} + +new TestCase( + SECTION, + "result=eval(\"\r\nexpect\")" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-003.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-003.js new file mode 100644 index 00000000..46d60cb7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-003.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-003.js + Corresponds To: 7.3-13-n.js + ECMA Section: 7.3 Comments + Description: + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-003.js"; +var VERSION = "JS1_4"; +var TITLE = "Comments"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("/*\n/* nested comment */\n*/\n"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "/*/*nested comment*/ */" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-004.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-004.js new file mode 100644 index 00000000..853887db --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-004.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-004.js + Corresponds To: ecma/LexicalExpressions/7.4.1-1-n.js + ECMA Section: 7.4.1 + + Description: + + Reserved words cannot be used as identifiers. + + ReservedWord :: + Keyword + FutureReservedWord + NullLiteral + BooleanLiteral + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-004"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var null = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var null = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-005.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-005.js new file mode 100644 index 00000000..2f3d3bdd --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-005.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-005.js + Corresponds To: 7.4.1-2.js + ECMA Section: 7.4.1 + + Description: + + Reserved words cannot be used as identifiers. + + ReservedWord :: + Keyword + FutureReservedWord + NullLiteral + BooleanLiteral + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-005"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("true = false;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "true = false" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-006.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-006.js new file mode 100644 index 00000000..b37fe0d5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-006.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-006.js + Corresponds To: 7.4.2-1.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-006"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("break = new Object();"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "break = new Object()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-007.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-007.js new file mode 100644 index 00000000..255a8b85 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-007.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-005.js + Corresponds To: 7.4.1-3-n.js + ECMA Section: 7.4.1 + + Description: + + Reserved words cannot be used as identifiers. + + ReservedWord :: + Keyword + FutureReservedWord + NullLiteral + BooleanLiteral + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-005"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("false = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "false = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-008.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-008.js new file mode 100644 index 00000000..b24b8587 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-008.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-008.js + Corresponds To: 7.4.3-1-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-008.js"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("case = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "case = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-009.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-009.js new file mode 100644 index 00000000..d5dc0ed4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-009.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-009 + Corresponds To: 7.4.3-2-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-009"; +var VERSION = "ECMA_1"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("debugger = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "debugger = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-010.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-010.js new file mode 100644 index 00000000..7e7f8f9f --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-010.js @@ -0,0 +1,52 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-010.js + Corresponds To: 7.4.3-3-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-010"; +var VERSION = "ECMA_1"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("export = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "export = true" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-011.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-011.js new file mode 100644 index 00000000..b6703284 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-011.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-011.js + Corresponds To: 7.4.3-4-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-011"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("super = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "super = true" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-012.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-012.js new file mode 100644 index 00000000..bed3322d --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-012.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-012.js + Corresponds To: 7.4.3-5-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-012"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("catch = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "catch = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-013.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-013.js new file mode 100644 index 00000000..1fc0bf38 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-013.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-013.js + Corresponds To: 7.4.3-6-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-013"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("default = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "default = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-014.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-014.js new file mode 100644 index 00000000..05f0c3cf --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-014.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-014.js + Corresponds To: 7.4.3-7-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-014.js"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("extends = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "extends = true" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-015.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-015.js new file mode 100644 index 00000000..7d8c8e80 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-015.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-015.js + Corresponds To: 7.4.3-8-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-015"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("switch = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "switch = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-016.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-016.js new file mode 100644 index 00000000..419af22c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-016.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-016 + Corresponds To: 7.4.3-9-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-016"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("class = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "class = true" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-017.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-017.js new file mode 100644 index 00000000..d7d33b4f --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-017.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-017.js + Corresponds To: 7.4.3-10-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-017"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("do = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "do = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-018.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-018.js new file mode 100644 index 00000000..4d151e67 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-018.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-018 + Corresponds To: 7.4.3-11-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-018"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("finally = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "finally = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-019.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-019.js new file mode 100644 index 00000000..0280b771 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-019.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-019.js + Corresponds To: 7.4.3-12-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-019"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("throw = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "throw = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-020.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-020.js new file mode 100644 index 00000000..7be91918 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-020.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-020.js + Corresponds To 7.4.3-13-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-020"; +var VERSION = "JS1_4"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("const = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "const = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-021.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-021.js new file mode 100644 index 00000000..a3b4422c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-021.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-021.js + Corresponds To: 7.4.3-14-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-021.js"; +var VERSION = "ECMA_1"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("enum = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "enum = true" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-022.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-022.js new file mode 100644 index 00000000..d8671a45 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-022.js @@ -0,0 +1,54 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-022 + Corresponds To 7.4.3-15-n.js + ECMA Section: 7.4.3 + + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-022.js"; +var VERSION = "ECMA_1"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("import = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "import = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-023.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-023.js new file mode 100644 index 00000000..d5df7ce7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-023.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-023.js + Corresponds To: 7.4.3-16-n.js + ECMA Section: 7.4.3 + Description: + The following words are used as keywords in proposed extensions and are + therefore reserved to allow for the possibility of future adoption of + those extensions. + + FutureReservedWord :: one of + case debugger export super + catch default extends switch + class do finally throw + const enum import try + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "lexical-023.js"; +var VERSION = "ECMA_1"; +var TITLE = "Future Reserved Words"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("try = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "try = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-024.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-024.js new file mode 100644 index 00000000..be1c3a7b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-024.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-024 + Corresponds To: 7.4.2-1-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-024"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var break;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var break" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-025.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-025.js new file mode 100644 index 00000000..0dbb3ac6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-025.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-025.js + Corresponds To 7.4.2-2-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-025"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var for;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var for" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-026.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-026.js new file mode 100644 index 00000000..2711de08 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-026.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-026.js + Corresponds To: 7.4.2-3-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-026"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var new;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var new" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-027.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-027.js new file mode 100644 index 00000000..0d8ddf07 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-027.js @@ -0,0 +1,61 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-027.js + Corresponds To: 7.4.2-4-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + var + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-027"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var var;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var var" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-028.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-028.js new file mode 100644 index 00000000..2b75204c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-028.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-028.js + Corresponds To: 7.4.2-5-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-028"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var continue=true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var continue=true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-029.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-029.js new file mode 100644 index 00000000..f559b5d0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-029.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-029.js + Corresponds To: 7.4.2-6.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-029"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var function = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var function = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-030.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-030.js new file mode 100644 index 00000000..f5fc0962 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-030.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-030.js + Corresponds To: 7.4.2-7-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-030"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var return = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var return = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-031.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-031.js new file mode 100644 index 00000000..53f0c399 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-031.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-031.js + Corresponds To: 7.4.2-8-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-031"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var return;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var return" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-032.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-032.js new file mode 100644 index 00000000..a4196950 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-032.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-032.js + Corresponds To: 7.4.2-9-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-032"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("delete = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "delete = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-033.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-033.js new file mode 100644 index 00000000..f36daaff --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-033.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-033.js + Corresponds To: 7.4.2-10.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-033"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("if = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "if = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-034.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-034.js new file mode 100644 index 00000000..b160e3d0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-034.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 7.4.2-11-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-034"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("this = true"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "this = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-035.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-035.js new file mode 100644 index 00000000..c061c60a --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-035.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-035.js + Correpsonds To: 7.4.2-12-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-035"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var while"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var while" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-036.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-036.js new file mode 100644 index 00000000..6b0c3e9e --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-036.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-036.js + Corresponds To: 7.4.2-13-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-036"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("else = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "else = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-037.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-037.js new file mode 100644 index 00000000..d42c1317 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-037.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-037.js + Corresponds To: 7.4.2-14-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-028"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var in;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var in" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-038.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-038.js new file mode 100644 index 00000000..abcb8579 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-038.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-038.js + Corresponds To: 7.4.2-15-n.js + ECMA Section: 7.4.2 + + Description: + The following tokens are ECMAScript keywords and may not be used as + identifiers in ECMAScript programs. + + Syntax + + Keyword :: one of + break for new var + continue function return void + delete if this while + else in typeof with + + This test verifies that the keyword cannot be used as an identifier. + Functioinal tests of the keyword may be found in the section corresponding + to the function of the keyword. + + Author: christine@netscape.com + Date: 12 november 1997 + +*/ +var SECTION = "lexical-038"; +var VERSION = "JS1_4"; +var TITLE = "Keywords"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("typeof = true;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "typeof = true" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-039.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-039.js new file mode 100644 index 00000000..01e4407b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-039.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-039 + Corresponds To: 7.5-2-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "lexical-039"; +var VERSION = "JS1_4"; +var TITLE = "Identifiers"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var 0abc;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var 0abc" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-040.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-040.js new file mode 100644 index 00000000..34634557 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-040.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-040.js + Corresponds To: 7.5-2.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "lexical-040"; +var VERSION = "JS1_4"; +var TITLE = "Identifiers"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var 1abc;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var 1abc" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-041.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-041.js new file mode 100644 index 00000000..9687c7ad --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-041.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-041.js + Corresponds To: 7.5-8-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "lexical-041"; +var VERSION = "ECMA_1"; +var TITLE = "Identifiers"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var @abc;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var @abc" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-042.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-042.js new file mode 100644 index 00000000..0defe970 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-042.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-042.js + Corresponds To: 7.5-9-n.js + ECMA Section: 7.5 Identifiers + Description: Identifiers are of unlimited length + - can contain letters, a decimal digit, _, or $ + - the first character cannot be a decimal digit + - identifiers are case sensitive + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "lexical-042"; +var VERSION = "JS1_4"; +var TITLE = "Identifiers"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("var 123;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "var 123" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-047.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-047.js new file mode 100644 index 00000000..7fa084bd --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-047.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-047.js + Corresponds To: 7.8.1-7-n.js + ECMA Section: 7.8.1 + Description: + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "lexical-047"; +var VERSION = "JS1_4"; +var TITLE = "for loops"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var counter = 0; + eval("for ( counter = 0\n" + + "counter <= 1\n" + + "counter++ )\n" + + "{\n" + + "result += \": got to inner loop\";\n" + + "}\n"); + +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "line breaks within a for expression" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-048.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-048.js new file mode 100644 index 00000000..788c3240 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-048.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-048.js + Corresponds To: 7.8.1-1.js + ECMA Section: 7.8.1 Rules of Automatic Semicolon Insertion + Description: + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "lexical-048"; +var VERSION = "JS1_4"; +var TITLE = "The Rules of Automatic Semicolon Insertion"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var counter = 0; + eval( "for ( counter = 0;\ncounter <= 1\ncounter++ ) {\nresult += \": got inside for loop\")"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "line breaks within a for expression" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-049.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-049.js new file mode 100644 index 00000000..ea2483fd --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-049.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-049 + Corresponds To: 7.8.1-1.js + ECMA Section: 7.8.1 Rules of Automatic Semicolon Insertioin + Description: + Author: christine@netscape.com + Date: 15 september 1997 +*/ +var SECTION = "lexical-049"; +var VERSION = "JS1_4"; +var TITLE = "The Rules of Automatic Semicolon Insertion"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var counter = 0; + eval("for ( counter = 0\n" + + "counter <= 1;\n" + + "counter++ )\n" + + "{\n" + + "result += \": got inside for loop\";\n" + + "}\n"); + +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "line breaks within a for expression" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-050.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-050.js new file mode 100644 index 00000000..d0079468 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-050.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-050.js + Corresponds to: 7.8.2-1-n.js + ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion + Description: compare some specific examples of the automatic + insertion rules in the EMCA specification. + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "lexical-050"; +var VERSION = "JS1_4"; +var TITLE = "Examples of Automatic Semicolon Insertion"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("{ 1 2 } 3"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "{ 1 2 } 3" + + " (threw " + exception +")", + expect, + result ); + +test(); + + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-051.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-051.js new file mode 100644 index 00000000..1fec695d --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-051.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-051.js + Corresponds to: 7.8.2-3-n.js + ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion + Description: compare some specific examples of the automatic + insertion rules in the EMCA specification. + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "lexical-051"; +var VERSION = "JS1_4"; +var TITLE = "Examples of Automatic Semicolon Insertion"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("for (a; b\n) result += \": got to inner loop\";") + } catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "for (a; b\n)" + + " (threw " + exception +")", + expect, + result ); + +test(); + + + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-052.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-052.js new file mode 100644 index 00000000..b134b974 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-052.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-052.js + Corresponds to: 7.8.2-4-n.js + ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion + Description: compare some specific examples of the automatic + insertion rules in the EMCA specification. + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "lexical-052"; +var VERSION = "JS1_4"; +var TITLE = "Examples of Automatic Semicolon Insertion"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + MyFunction(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "calling return indirectly" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyFunction() { + var s = "return"; + eval(s); +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-053.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-053.js new file mode 100644 index 00000000..8739afba --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-053.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-053.js + Corresponds to: 7.8.2-7-n.js + ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion + Description: compare some specific examples of the automatic + insertion rules in the EMCA specification. + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "lexical-053"; +var VERSION = "JS1_4"; +var TITLE = "Examples of Automatic Semicolon Insertion"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + a = true + b = false + + eval('if (a > b)\nelse result += ": got to else statement"'); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "calling return indirectly" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/lexical-054.js b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-054.js new file mode 100644 index 00000000..1b6e995c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/lexical-054.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: lexical-054.js + Corresponds to: 7.8.2-7-n.js + ECMA Section: 7.8.2 Examples of Automatic Semicolon Insertion + Description: compare some specific examples of the automatic + insertion rules in the EMCA specification. + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "lexical-054"; +var VERSION = "JS1_4"; +var TITLE = "Examples of Automatic Semicolon Insertion"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + a=0; + b=1; + c=2; + d=3; + eval("if (a > b)\nelse c = d"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "if (a > b)\nelse c = d" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/number-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/number-001.js new file mode 100644 index 00000000..37ba1b79 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/number-001.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: number-001 + Corresponds To: 15.7.4.2-2-n.js + ECMA Section: 15.7.4.2.2 Number.prototype.toString() + Description: + If the radix is the number 10 or not supplied, then this number value is + given as an argument to the ToString operator; the resulting string value + is returned. + + If the radix is supplied and is an integer from 2 to 36, but not 10, the + result is a string, the choice of which is implementation dependent. + + The toString function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "number-001"; +var VERSION = "JS1_4"; +var TITLE = "Exceptions for Number.toString()"; + +startTest(); +writeHeaderToLog( SECTION + " Number.prototype.toString()"); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + object= new Object(); + object.toString = Number.prototype.toString; + result = object.toString(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "object = new Object(); object.toString = Number.prototype.toString; object.toString()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/number-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/number-002.js new file mode 100644 index 00000000..5f4462e0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/number-002.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: number-002.js + Corresponds To: ecma/Number/15.7.4.3-2-n.js + ECMA Section: 15.7.4.3.1 Number.prototype.valueOf() + Description: + Returns this number value. + + The valueOf function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "number-002"; +var VERSION = "JS1_4"; +var TITLE = "Exceptions for Number.valueOf()"; + +startTest(); +writeHeaderToLog( SECTION + " Number.prototype.valueOf()"); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + object= new Object(); + object.toString = Number.prototype.valueOf; + result = object.toString(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "object = new Object(); object.valueOf = Number.prototype.valueOf; object.valueOf()" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/number-003.js b/source/spidermonkey-tests/ecma_2/Exceptions/number-003.js new file mode 100644 index 00000000..8d0ad83d --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/number-003.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: number-003.js + Corresponds To: 15.7.4.3-3.js + ECMA Section: 15.7.4.3.1 Number.prototype.valueOf() + Description: + Returns this number value. + + The valueOf function is not generic; it generates a runtime error if its + this value is not a Number object. Therefore it cannot be transferred to + other kinds of objects for use as a method. + + Author: christine@netscape.com + Date: 16 september 1997 +*/ +var SECTION = "number-003"; +var VERSION = "JS1_4"; +var TITLE = "Exceptions for Number.valueOf()"; + +startTest(); +writeHeaderToLog( SECTION + " Number.prototype.valueOf()"); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + VALUE_OF = Number.prototype.valueOf; + OBJECT = new String("Infinity"); + OBJECT.valueOf = VALUE_OF; + result = OBJECT.valueOf(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "Assigning Number.prototype.valueOf as the valueOf of a String object " + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/shell.js b/source/spidermonkey-tests/ecma_2/Exceptions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-001.js new file mode 100644 index 00000000..087f3f74 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-001.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-001.js + Corresponds To: 12.6.2-9-n.js + ECMA Section: 12.6.2 The for Statement + + 1. first expression is not present. + 2. second expression is not present + 3. third expression is not present + + + Author: christine@netscape.com + Date: 15 september 1997 +*/ + +var SECTION = "statement-001.js"; +// var SECTION = "12.6.2-9-n"; +var VERSION = "ECMA_1"; +var TITLE = "The for statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("for (i) {\n}"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "for(i) {}" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-002.js new file mode 100644 index 00000000..7ac63305 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-002.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-002.js + Corresponds To: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "statement-002"; +var VERSION = "JS1_4"; +var TITLE = "The for..in statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval(" for ( var i, p in this) { result += this[p]; }"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "more than one member expression" + + " (threw " + exception +")", + expect, + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-003.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-003.js new file mode 100644 index 00000000..7e257675 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-003.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-003 + Corresponds To: 12.6.3-7-n.js + ECMA Section: 12.6.3 The for...in Statement + Description: + The production IterationStatement : for ( LeftHandSideExpression in Expression ) + Statement is evaluated as follows: + + 1. Evaluate the Expression. + 2. Call GetValue(Result(1)). + 3. Call ToObject(Result(2)). + 4. Let C be "normal completion". + 5. Get the name of the next property of Result(3) that doesn't have the + DontEnum attribute. If there is no such property, go to step 14. + 6. Evaluate the LeftHandSideExpression ( it may be evaluated repeatedly). + 7. Call PutValue(Result(6), Result(5)). PutValue( V, W ): + 1. If Type(V) is not Reference, generate a runtime error. + 2. Call GetBase(V). + 3. If Result(2) is null, go to step 6. + 4. Call the [[Put]] method of Result(2), passing GetPropertyName(V) + for the property name and W for the value. + 5. Return. + 6. Call the [[Put]] method for the global object, passing + GetPropertyName(V) for the property name and W for the value. + 7. Return. + 8. Evaluate Statement. + 9. If Result(8) is a value completion, change C to be "normal completion + after value V" where V is the value carried by Result(8). + 10. If Result(8) is a break completion, go to step 14. + 11. If Result(8) is a continue completion, go to step 5. + 12. If Result(8) is a return completion, return Result(8). + 13. Go to step 5. + 14. Return C. + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "statement-003"; +var VERSION = "JS1_4"; +var TITLE = "The for..in statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var o = new MyObject(); + var result = 0; + + eval("for ( this in o) {\n" + + "result += this[p];\n" + + "}\n"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "bad left-hand side expression" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-004.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-004.js new file mode 100644 index 00000000..056e0452 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-004.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-004.js + Corresponds To: 12.6.3-1.js + ECMA Section: 12.6.3 The for...in Statement + Description: + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "statement-004"; +var VERSION = "JS1_4"; +var TITLE = "The for..in statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var o = new MyObject(); + + eval("for ( \"a\" in o) {\n" + + "result += this[p];\n" + + "}"); + +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "bad left-hand side expression" + + " (threw " + exception +")", + expect, + result ); + +test(); + + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-005.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-005.js new file mode 100644 index 00000000..404a157e --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-005.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-005.js + Corresponds To: 12.6.3-8-n.js + ECMA Section: 12.6.3 The for...in Statement + Description: + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "statement-005"; +var VERSION = "JS1_4"; +var TITLE = "The for..in statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var o = new MyObject(); + result = 0; + + eval("for (1 in o) {\n" + + "result += this[p];" + + "}\n"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "bad left-hand side expression" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-006.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-006.js new file mode 100644 index 00000000..24839d84 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-006.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-006.js + Corresponds To: 12.6.3-9-n.js + ECMA Section: 12.6.3 The for...in Statement + Description: + + Author: christine@netscape.com + Date: 11 september 1997 +*/ +var SECTION = "statement-006"; +var VERSION = "JS1_4"; +var TITLE = "The for..in statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var o = new MyObject(); + var result = 0; + for ( var o in foo) { + result += this[o]; + } +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "object is not defined" + + " (threw " + exception +")", + expect, + result ); + +test(); + +function MyObject() { + this.value = 2; + this[0] = 4; + return this; +} diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-007.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-007.js new file mode 100644 index 00000000..bb561b69 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-007.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-007.js + Corresponds To: 12.7-1-n.js + ECMA Section: 12.7 The continue statement + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "statement-007"; +var VERSION = "JS1_4"; +var TITLE = "The continue statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("continue;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "continue outside of an iteration statement" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-008.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-008.js new file mode 100644 index 00000000..a71fc266 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-008.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: statement-008.js + Corresponds To: 12.8-1-n.js + ECMA Section: 12.8 The break statement + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "statement-008"; +var VERSION = "JS1_4"; +var TITLE = "The break in statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("break;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "break outside of an iteration statement" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/statement-009.js b/source/spidermonkey-tests/ecma_2/Exceptions/statement-009.js new file mode 100644 index 00000000..9be1de74 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/statement-009.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 12.9-1-n.js + ECMA Section: 12.9 The return statement + Description: + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "12.9-1-n"; +var VERSION = "ECMA_1"; +var TITLE = "The return statement"; + +startTest(); +writeHeaderToLog( SECTION + " The return statement"); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + eval("return;"); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "return outside of a function" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/string-001.js b/source/spidermonkey-tests/ecma_2/Exceptions/string-001.js new file mode 100644 index 00000000..68bfe181 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/string-001.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: string-001.js + Corresponds To: 15.5.4.2-2-n.js + ECMA Section: 15.5.4.2 String.prototype.toString() + + Description: Returns this string value. Note that, for a String + object, the toString() method happens to return the same + thing as the valueOf() method. + + The toString function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ +var SECTION = "string-001"; +var VERSION = "JS1_4"; +var TITLE = "String.prototype.toString"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + OBJECT = new Object(); + OBJECT.toString = String.prototype.toString(); + result = OBJECT.toString(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "OBJECT = new Object; "+ + " OBJECT.toString = String.prototype.toString; OBJECT.toString()" + + " (threw " + exception +")", + expect, + result ); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Exceptions/string-002.js b/source/spidermonkey-tests/ecma_2/Exceptions/string-002.js new file mode 100644 index 00000000..b68f2a15 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Exceptions/string-002.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: string-002.js + Corresponds To: 15.5.4.3-3-n.js + ECMA Section: 15.5.4.3 String.prototype.valueOf() + + Description: Returns this string value. + + The valueOf function is not generic; it generates a + runtime error if its this value is not a String object. + Therefore it connot be transferred to the other kinds of + objects for use as a method. + + Author: christine@netscape.com + Date: 1 october 1997 +*/ +var SECTION = "string-002"; +var VERSION = "JS1_4"; +var TITLE = "String.prototype.valueOf"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var result = "Failed"; +var exception = "No exception thrown"; +var expect = "Passed"; + +try { + var OBJECT =new Object(); + OBJECT.valueOf = String.prototype.valueOf; + result = OBJECT.valueOf(); +} catch ( e ) { + result = expect; + exception = e.toString(); +} + +new TestCase( + SECTION, + "OBJECT = new Object; OBJECT.valueOf = String.prototype.valueOf;"+ + "result = OBJECT.valueOf();" + + " (threw " + exception +")", + expect, + result ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/Expressions/StrictEquality-001.js b/source/spidermonkey-tests/ecma_2/Expressions/StrictEquality-001.js new file mode 100644 index 00000000..c96d1be3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Expressions/StrictEquality-001.js @@ -0,0 +1,73 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: StrictEquality-001.js + * ECMA Section: 11.9.6.js + * Description: + * + * Author: christine@netscape.com + * Date: 4 september 1998 + */ +var SECTION = "StrictEquality-001 - 11.9.6"; +var VERSION = "ECMA_2"; +var TITLE = "The strict equality operator ( === )"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 1. If Type(x) is different from Type(y) return false + +StrictEquality( true, new Boolean(true), false ); +StrictEquality( new Boolean(), false, false ); +StrictEquality( "", new String(), false ); +StrictEquality( new String("hi"), "hi", false ); + +// 2. If Type(x) is not Number go to step 9. + +// 3. If x is NaN, return false +StrictEquality( NaN, NaN, false ); +StrictEquality( NaN, 0, false ); + +// 4. If y is NaN, return false. +StrictEquality( 0, NaN, false ); + +// 5. if x is the same number value as y, return true + +// 6. If x is +0 and y is -0, return true + +// 7. If x is -0 and y is +0, return true + +// 8. Return false. + + +// 9. If Type(x) is String, then return true if x and y are exactly +// the same sequence of characters ( same length and same characters +// in corresponding positions.) Otherwise return false. + +// 10. If Type(x) is Boolean, return true if x and y are both true or +// both false. otherwise return false. + + +// Return true if x and y refer to the same object. Otherwise return +// false. + +// Return false. + + +test(); + +function StrictEquality( x, y, expect ) { + result = ( x === y ); + + new TestCase( + SECTION, + x +" === " + y, + expect, + result ); +} + diff --git a/source/spidermonkey-tests/ecma_2/Expressions/browser.js b/source/spidermonkey-tests/ecma_2/Expressions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/Expressions/shell.js b/source/spidermonkey-tests/ecma_2/Expressions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/FunctionObjects/apply-001-n.js b/source/spidermonkey-tests/ecma_2/FunctionObjects/apply-001-n.js new file mode 100644 index 00000000..eac05844 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/FunctionObjects/apply-001-n.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +print("STATUS: f.apply crash test."); + +print("BUGNUMBER: 21836"); + +function f () +{ +} + +var SECTION = "apply-001-n"; +var VERSION = "ECMA_1"; +startTest(); +var TITLE = "f.apply(2,2) doesn't crash"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +DESCRIPTION = "f.apply(2,2) doesn't crash"; +EXPECTED = "error"; + +new TestCase( SECTION, "f.apply(2,2) doesn't crash", "error", eval("f.apply(2,2)") ); + +test(); + + diff --git a/source/spidermonkey-tests/ecma_2/FunctionObjects/browser.js b/source/spidermonkey-tests/ecma_2/FunctionObjects/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/FunctionObjects/call-1.js b/source/spidermonkey-tests/ecma_2/FunctionObjects/call-1.js new file mode 100644 index 00000000..9ff19555 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/FunctionObjects/call-1.js @@ -0,0 +1,42 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: call-1.js + Section: Function.prototype.call + Description: + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "call-1"; +var VERSION = "ECMA_2"; +var TITLE = "Function.prototype.call"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, + "ConvertToString.call(this, this)", + GLOBAL, + ConvertToString.call(this, this)); + +new TestCase( SECTION, + "ConvertToString.call(Boolean, Boolean.prototype)", + "false", + ConvertToString.call(Boolean, Boolean.prototype)); + +new TestCase( SECTION, + "ConvertToString.call(Boolean, Boolean.prototype.valueOf())", + "false", + ConvertToString.call(Boolean, Boolean.prototype.valueOf())); + +test(); + +function ConvertToString(obj) { + return obj +""; +} diff --git a/source/spidermonkey-tests/ecma_2/FunctionObjects/shell.js b/source/spidermonkey-tests/ecma_2/FunctionObjects/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/LexicalConventions/browser.js b/source/spidermonkey-tests/ecma_2/LexicalConventions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/LexicalConventions/keywords-001.js b/source/spidermonkey-tests/ecma_2/LexicalConventions/keywords-001.js new file mode 100644 index 00000000..41138610 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/LexicalConventions/keywords-001.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: + * ECMA Section: + * Description: + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = ""; +var VERSION = "ECMA_2"; +var TITLE = "Keywords"; + +startTest(); + +print("This test requires option javascript.options.strict enabled"); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var result = "failed"; + +try { + eval("super;"); +} +catch (x) { + if (x instanceof SyntaxError) + result = x.name; +} + +AddTestCase( + "using the expression \"super\" shouldn't cause js to crash", + "SyntaxError", + result ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/LexicalConventions/regexp-literals-001.js b/source/spidermonkey-tests/ecma_2/LexicalConventions/regexp-literals-001.js new file mode 100644 index 00000000..cb2448d1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/LexicalConventions/regexp-literals-001.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: LexicalConventions/regexp-literals-001.js + * ECMA Section: 7.8.5 + * Description: + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "LexicalConventions/regexp-literals-001.js"; +var VERSION = "ECMA_2"; +var TITLE = "Regular Expression Literals"; + +startTest(); + +// Regular Expression Literals may not be empty; // should be regarded +// as a comment, not a RegExp literal. + +s = //; + + "passed"; + +AddTestCase( + "// should be a comment, not a regular expression literal", + "passed", + String(s)); + +AddTestCase( + "// typeof object should be type of object declared on following line", + "passed", + (typeof s) == "string" ? "passed" : "failed" ); + +AddTestCase( + "// should not return an object of the type RegExp", + "passed", + (typeof s == "object") ? "failed" : "passed" ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/LexicalConventions/regexp-literals-002.js b/source/spidermonkey-tests/ecma_2/LexicalConventions/regexp-literals-002.js new file mode 100644 index 00000000..5b256dd2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/LexicalConventions/regexp-literals-002.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: LexicalConventions/regexp-literals-002.js + * ECMA Section: 7.8.5 + * Description: Based on ECMA 2 Draft 8 October 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "LexicalConventions/regexp-literals-002.js"; +var VERSION = "ECMA_2"; +var TITLE = "Regular Expression Literals"; + +startTest(); + +// A regular expression literal represents an object of type RegExp. + +AddTestCase( + "// A regular expression literal represents an object of type RegExp.", + "true", + (/x*/ instanceof RegExp).toString() ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/LexicalConventions/shell.js b/source/spidermonkey-tests/ecma_2/LexicalConventions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/README b/source/spidermonkey-tests/ecma_2/README new file mode 100644 index 00000000..6da6cdd5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/README @@ -0,0 +1 @@ +ECMA 262 Edition 2 diff --git a/source/spidermonkey-tests/ecma_2/RegExp/browser.js b/source/spidermonkey-tests/ecma_2/RegExp/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/RegExp/constructor-001.js b/source/spidermonkey-tests/ecma_2/RegExp/constructor-001.js new file mode 100644 index 00000000..35ba5ada --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/constructor-001.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/constructor-001.js + * ECMA Section: 15.7.3.3 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/constructor-001"; +var VERSION = "ECMA_2"; +var TITLE = "new RegExp()"; + +startTest(); + +/* + * for each test case, verify: + * - verify that [[Class]] property is RegExp + * - prototype property should be set to RegExp.prototype + * - source is set to the empty string + * - global property is set to false + * - ignoreCase property is set to false + * - multiline property is set to false + * - lastIndex property is set to 0 + */ + +RegExp.prototype.getClassProperty = Object.prototype.toString; +var re = new RegExp(); + +AddTestCase( + "RegExp.prototype.getClassProperty = Object.prototype.toString; " + + "(new RegExp()).getClassProperty()", + "[object RegExp]", + re.getClassProperty() ); + +AddTestCase( + "(new RegExp()).source", + "", + re.source ); + +AddTestCase( + "(new RegExp()).global", + false, + re.global ); + +AddTestCase( + "(new RegExp()).ignoreCase", + false, + re.ignoreCase ); + +AddTestCase( + "(new RegExp()).multiline", + false, + re.multiline ); + +AddTestCase( + "(new RegExp()).lastIndex", + 0, + re.lastIndex ); + +test() diff --git a/source/spidermonkey-tests/ecma_2/RegExp/exec-001.js b/source/spidermonkey-tests/ecma_2/RegExp/exec-001.js new file mode 100644 index 00000000..18ced906 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/exec-001.js @@ -0,0 +1,41 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/exec-001.js + * ECMA Section: 15.7.5.3 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/exec-001"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp.prototype.exec(string)"; + +startTest(); + +/* + * for each test case, verify: + * - type of object returned + * - length of the returned array + * - value of lastIndex + * - value of index + * - value of input + * - value of the array indices + */ + +// test cases without subpatterns +// test cases with subpatterns +// global property is true +// global property is false +// test cases in which the exec returns null + +AddTestCase("NO TESTS EXIST", "PASSED", "Test not implemented"); + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/RegExp/exec-002.js b/source/spidermonkey-tests/ecma_2/RegExp/exec-002.js new file mode 100644 index 00000000..86d8ccb9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/exec-002.js @@ -0,0 +1,188 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/exec-002.js + * ECMA Section: 15.7.5.3 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Test cases provided by rogerl@netscape.com + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/exec-002"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp.prototype.exec(string)"; + +startTest(); + +/* + * for each test case, verify: + * - type of object returned + * - length of the returned array + * - value of lastIndex + * - value of index + * - value of input + * - value of the array indices + */ + +AddRegExpCases( + /(a|d|q|)x/i, + "bcaDxqy", + 3, + ["Dx", "D"] ); + +AddRegExpCases( + /(a|(e|q))(x|y)/, + "bcaddxqy", + 6, + ["qy","q","q","y"] ); + + +AddRegExpCases( + /a+b+d/, + "aabbeeaabbs", + 0, + null ); + +AddRegExpCases( + /a*b/, + "aaadaabaaa", + 4, + ["aab"] ); + +AddRegExpCases( + /a*b/, + "dddb", + 3, + ["b"] ); + +AddRegExpCases( + /a*b/, + "xxx", + 0, + null ); + +AddRegExpCases( + /x\d\dy/, + "abcx45ysss235", + 3, + ["x45y"] ); + +AddRegExpCases( + /[^abc]def[abc]+/, + "abxdefbb", + 2, + ["xdefbb"] ); + +AddRegExpCases( + /(a*)baa/, + "ccdaaabaxaabaa", + 9, + ["aabaa", "aa"] ); + +AddRegExpCases( + /(a*)baa/, + "aabaa", + 0, + ["aabaa", "aa"] ); + +AddRegExpCases( + /q(a|b)*q/, + "xxqababqyy", + 2, + ["qababq", "b"] ); + +AddRegExpCases( + /(a(.|[^d])c)*/, + "adcaxc", + 0, + ["adcaxc", "axc", "x"] ); + +AddRegExpCases( + /(a*)b\1/, + "abaaaxaabaayy", + 0, + ["aba", "a"] ); + +AddRegExpCases( + /(a*)b\1/, + "abaaaxaabaayy", + 0, + ["aba", "a"] ); + +AddRegExpCases( + /(a*)b\1/, + "cccdaaabaxaabaayy", + 6, + ["aba", "a"] ); + +AddRegExpCases( + /(a*)b\1/, + "cccdaaabqxaabaayy", + 7, + ["b", ""] ); + +AddRegExpCases( + /"(.|[^"\\\\])*"/, + 'xx\"makudonarudo\"yy', + 2, + ["\"makudonarudo\"", "o"] ); + + AddRegExpCases( + /"(.|[^"\\\\])*"/, + "xx\"ma\"yy", + 2, + ["\"ma\"", "a"] ); + + test(); + + function AddRegExpCases( + regexp, pattern, index, matches_array ) { + +// prevent a runtime error + + if ( regexp.exec(pattern) == null || matches_array == null ) { + AddTestCase( + regexp + ".exec(" + pattern +")", + matches_array, + regexp.exec(pattern) ); + + return; + } + AddTestCase( + regexp + ".exec(" + pattern +").length", + matches_array.length, + regexp.exec(pattern).length ); + + AddTestCase( + regexp + ".exec(" + pattern +").index", + index, + regexp.exec(pattern).index ); + + AddTestCase( + regexp + ".exec(" + pattern +").input", + pattern, + regexp.exec(pattern).input ); + + AddTestCase( + regexp + ".exec(" + pattern +").toString()", + matches_array.toString(), + regexp.exec(pattern).toString() ); +/* + var limit = matches_array.length > regexp.exec(pattern).length + ? matches_array.length + : regexp.exec(pattern).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + regexp + ".exec(" + pattern +")[" + matches +"]", + matches_array[matches], + regexp.exec(pattern)[matches] ); + } +*/ + } diff --git a/source/spidermonkey-tests/ecma_2/RegExp/function-001.js b/source/spidermonkey-tests/ecma_2/RegExp/function-001.js new file mode 100644 index 00000000..8e280383 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/function-001.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/function-001.js + * ECMA Section: 15.7.2.1 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/function-001"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp( pattern, flags )"; + +startTest(); + +/* + * for each test case, verify: + * - verify that [[Class]] property is RegExp + * - prototype property should be set to RegExp.prototype + * - source is set to the empty string + * - global property is set to false + * - ignoreCase property is set to false + * - multiline property is set to false + * - lastIndex property is set to 0 + */ + +RegExp.prototype.getClassProperty = Object.prototype.toString; +var re = new RegExp(); + +AddTestCase( + "RegExp.prototype.getClassProperty = Object.prototype.toString; " + + "(new RegExp()).getClassProperty()", + "[object RegExp]", + re.getClassProperty() ); + +AddTestCase( + "(new RegExp()).source", + "", + re.source ); + +AddTestCase( + "(new RegExp()).global", + false, + re.global ); + +AddTestCase( + "(new RegExp()).ignoreCase", + false, + re.ignoreCase ); + +AddTestCase( + "(new RegExp()).multiline", + false, + re.multiline ); + +AddTestCase( + "(new RegExp()).lastIndex", + 0, + re.lastIndex ); + +test() diff --git a/source/spidermonkey-tests/ecma_2/RegExp/hex-001.js b/source/spidermonkey-tests/ecma_2/RegExp/hex-001.js new file mode 100644 index 00000000..04c3a97b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/hex-001.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/hex-001.js + * ECMA Section: 15.7.3.1 + * Description: Based on ECMA 2 Draft 7 February 1999 + * Positive test cases for constructing a RegExp object + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/hex-001"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp patterns that contain HexicdecimalEscapeSequences"; + +startTest(); + +// These examples come from 15.7.1, HexidecimalEscapeSequence + +AddRegExpCases( new RegExp("\x41"), "new RegExp('\\x41')", "A", "A", 1, 0, ["A"] ); +AddRegExpCases( new RegExp("\x412"),"new RegExp('\\x412')", "A2", "A2", 1, 0, ["A2"] ); + +AddRegExpCases( new RegExp("A"), "new RegExp('A')", "\x41", "\\x41", 1, 0, ["A"] ); +AddRegExpCases( new RegExp("A"), "new RegExp('A')", "\x412", "\\x412", 1, 0, ["A"] ); +AddRegExpCases( new RegExp("^x"), "new RegExp('^x')", "x412", "x412", 1, 0, ["x"]); +AddRegExpCases( new RegExp("A"), "new RegExp('A')", "A2", "A2", 1, 0, ["A"] ); + +test(); + +function AddRegExpCases( + regexp, str_regexp, pattern, str_pattern, length, index, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(pattern) == null || matches_array == null ) { + AddTestCase( + str_regexp + ".exec(" + pattern +")", + matches_array, + regexp.exec(pattern) ); + + return; + } + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").length", + length, + regexp.exec(pattern).length ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").index", + index, + regexp.exec(pattern).index ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").input", + pattern, + regexp.exec(pattern).input ); + + for ( var matches = 0; matches < matches_array.length; matches++ ) { + AddTestCase( + str_regexp + ".exec(" + str_pattern +")[" + matches +"]", + matches_array[matches], + regexp.exec(pattern)[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/multiline-001.js b/source/spidermonkey-tests/ecma_2/RegExp/multiline-001.js new file mode 100644 index 00000000..9e69022d --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/multiline-001.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/multiline-001.js + * ECMA Section: + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Date: 19 February 1999 + */ + +var SECTION = "RegExp/multiline-001"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp: multiline flag"; +var BUGNUMBER="343901"; + +startTest(); + +var woodpeckers = "ivory-billed\ndowny\nhairy\nacorn\nyellow-bellied sapsucker\n" + + "northern flicker\npileated\n"; + +AddRegExpCases( /.*[y]$/m, woodpeckers, woodpeckers.indexOf("downy"), ["downy"] ); + +AddRegExpCases( /.*[d]$/m, woodpeckers, woodpeckers.indexOf("ivory-billed"), ["ivory-billed"] ); + +test(); + + +function AddRegExpCases +( regexp, pattern, index, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(pattern) == null || matches_array == null ) { + AddTestCase( + regexp + ".exec(" + pattern +")", + matches_array, + regexp.exec(pattern) ); + + return; + } + + AddTestCase( + regexp.toString() + ".exec(" + pattern +").length", + matches_array.length, + regexp.exec(pattern).length ); + + AddTestCase( + regexp.toString() + ".exec(" + pattern +").index", + index, + regexp.exec(pattern).index ); + + AddTestCase( + regexp + ".exec(" + pattern +").input", + pattern, + regexp.exec(pattern).input ); + + + for ( var matches = 0; matches < matches_array.length; matches++ ) { + AddTestCase( + regexp + ".exec(" + pattern +")[" + matches +"]", + matches_array[matches], + regexp.exec(pattern)[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/octal-001.js b/source/spidermonkey-tests/ecma_2/RegExp/octal-001.js new file mode 100644 index 00000000..0aa1d040 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/octal-001.js @@ -0,0 +1,78 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/octal-001.js + * ECMA Section: 15.7.1 + * Description: Based on ECMA 2 Draft 7 February 1999 + * Simple test cases for matching OctalEscapeSequences. + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/octal-001.js"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp patterns that contain OctalEscapeSequences"; +var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=346196"; + +startTest(); + + +// backreference +AddRegExpCases( + /(.)\1/, + "/(.)\\1/", + "HI!!", + "HI!", + 2, + ["!!", "!"] ); + +test(); + +function AddRegExpCases( + regexp, str_regexp, pattern, str_pattern, index, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(pattern) == null || matches_array == null ) { + AddTestCase( + regexp + ".exec(" + str_pattern +")", + matches_array, + regexp.exec(pattern) ); + + return; + } + AddTestCase( + str_regexp + ".exec(" + str_pattern +").length", + matches_array.length, + regexp.exec(pattern).length ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").index", + index, + regexp.exec(pattern).index ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").input", + pattern, + regexp.exec(pattern).input ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").toString()", + matches_array.toString(), + regexp.exec(pattern).toString() ); +/* + var limit = matches_array.length > regexp.exec(pattern).length + ? matches_array.length + : regexp.exec(pattern).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + str_regexp + ".exec(" + str_pattern +")[" + matches +"]", + matches_array[matches], + regexp.exec(pattern)[matches] ); + } +*/ +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/octal-002.js b/source/spidermonkey-tests/ecma_2/RegExp/octal-002.js new file mode 100644 index 00000000..309fff47 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/octal-002.js @@ -0,0 +1,93 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/octal-002.js + * ECMA Section: 15.7.1 + * Description: Based on ECMA 2 Draft 7 February 1999 + * Simple test cases for matching OctalEscapeSequences. + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/octal-002.js"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp patterns that contain OctalEscapeSequences"; +var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=346189"; + +startTest(); + +// backreference +AddRegExpCases( + /(.)(.)(.)(.)(.)(.)(.)(.)\8/, + "/(.)(.)(.)(.)(.)(.)(.)(.)\\8", + "aabbccaaabbbccc", + "aabbccaaabbbccc", + 0, + ["aabbccaaa", "a", "a", "b", "b", "c", "c", "a", "a"] ); + +AddRegExpCases( + /(.)(.)(.)(.)(.)(.)(.)(.)(.)\9/, + "/(.)(.)(.)(.)(.)(.)(.)(.)\\9", + "aabbccaabbcc", + "aabbccaabbcc", + 0, + ["aabbccaabb", "a", "a", "b", "b", "c", "c", "a", "a", "b"] ); + +AddRegExpCases( + /(.)(.)(.)(.)(.)(.)(.)(.)(.)\8/, + "/(.)(.)(.)(.)(.)(.)(.)(.)(.)\\8", + "aabbccaababcc", + "aabbccaababcc", + 0, + ["aabbccaaba", "a", "a", "b", "b", "c", "c", "a", "a", "b"] ); + +test(); + +function AddRegExpCases( + regexp, str_regexp, pattern, str_pattern, index, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(pattern) == null || matches_array == null ) { + AddTestCase( + regexp + ".exec(" + str_pattern +")", + matches_array, + regexp.exec(pattern) ); + + return; + } + AddTestCase( + str_regexp + ".exec(" + str_pattern +").length", + matches_array.length, + regexp.exec(pattern).length ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").index", + index, + regexp.exec(pattern).index ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").input", + pattern, + regexp.exec(pattern).input ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").toString()", + matches_array.toString(), + regexp.exec(pattern).toString() ); +/* + var limit = matches_array.length > regexp.exec(pattern).length + ? matches_array.length + : regexp.exec(pattern).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + str_regexp + ".exec(" + str_pattern +")[" + matches +"]", + matches_array[matches], + regexp.exec(pattern)[matches] ); + } +*/ +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/octal-003.js b/source/spidermonkey-tests/ecma_2/RegExp/octal-003.js new file mode 100644 index 00000000..a73d7d40 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/octal-003.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/octal-003.js + * ECMA Section: 15.7.1 + * Description: Based on ECMA 2 Draft 7 February 1999 + * Simple test cases for matching OctalEscapeSequences. + * Author: christine@netscape.com + * Date: 19 February 1999 + * + * Revised: 02 August 2002 + * Author: pschwartau@netscape.com + * + * WHY: the original test expected the regexp /.\011/ + * to match 'a' + String.fromCharCode(0) + '11' + * + * This is incorrect: the string is a 4-character string consisting of + * the characters <'a'>, <nul>, <'1'>, <'1'>. By contrast, the \011 in the + * regexp should be parsed as a single token: it is the octal escape sequence + * for the horizontal tab character '\t' === '\u0009' === '\x09' === '\011'. + * + * So the regexp consists of 2 characters: <any-character>, <'\t'>. + * There is no match between the regexp and the string. + * + * See the testcase ecma_3/RegExp/octal-002.js for an elaboration. + * + */ +var SECTION = "RegExp/octal-003.js"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp patterns that contain OctalEscapeSequences"; +var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=346132"; + +startTest(); + +AddRegExpCases( /.\011/, "/\\011/", "a" + String.fromCharCode(0) + "11", "a\\011", 0, null ); + +test(); + +function AddRegExpCases( + regexp, str_regexp, pattern, str_pattern, index, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(pattern) == null || matches_array == null ) { + AddTestCase( + regexp + ".exec(" + str_pattern +")", + matches_array, + regexp.exec(pattern) ); + + return; + } + AddTestCase( + str_regexp + ".exec(" + str_pattern +").length", + matches_array.length, + regexp.exec(pattern).length ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").index", + index, + regexp.exec(pattern).index ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").input", + escape(pattern), + escape(regexp.exec(pattern).input) ); + + AddTestCase( + str_regexp + ".exec(" + str_pattern +").toString()", + matches_array.toString(), + escape(regexp.exec(pattern).toString()) ); + + var limit = matches_array.length > regexp.exec(pattern).length + ? matches_array.length + : regexp.exec(pattern).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + str_regexp + ".exec(" + str_pattern +")[" + matches +"]", + matches_array[matches], + escape(regexp.exec(pattern)[matches]) ); + } + +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/properties-001.js b/source/spidermonkey-tests/ecma_2/RegExp/properties-001.js new file mode 100644 index 00000000..b8ef2817 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/properties-001.js @@ -0,0 +1,91 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/properties-001.js + * ECMA Section: 15.7.6.js + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/properties-001.js"; +var VERSION = "ECMA_2"; +var TITLE = "Properties of RegExp Instances"; +var BUGNUMBER =""; + +startTest(); + +AddRegExpCases( new RegExp, "", false, false, false, 0 ); +AddRegExpCases( /.*/, ".*", false, false, false, 0 ); +AddRegExpCases( /[\d]{5}/g, "[\\d]{5}", true, false, false, 0 ); +AddRegExpCases( /[\S]?$/i, "[\\S]?$", false, true, false, 0 ); +AddRegExpCases( /^([a-z]*)[^\w\s\f\n\r]+/m, "^([a-z]*)[^\\w\\s\\f\\n\\r]+", false, false, true, 0 ); +AddRegExpCases( /[\D]{1,5}[\ -][\d]/gi, "[\\D]{1,5}[\\ -][\\d]", true, true, false, 0 ); +AddRegExpCases( /[a-zA-Z0-9]*/gm, "[a-zA-Z0-9]*", true, false, true, 0 ); +AddRegExpCases( /x|y|z/gim, "x|y|z", true, true, true, 0 ); + +AddRegExpCases( /\u0051/im, "\\u0051", false, true, true, 0 ); +AddRegExpCases( /\x45/gm, "\\x45", true, false, true, 0 ); +AddRegExpCases( /\097/gi, "\\097", true, true, false, 0 ); + +test(); + +function AddRegExpCases( re, s, g, i, m, l ) { + + AddTestCase( re + ".test == RegExp.prototype.test", + true, + re.test == RegExp.prototype.test ); + + AddTestCase( re + ".toString == RegExp.prototype.toString", + true, + re.toString == RegExp.prototype.toString ); + + AddTestCase( re + ".contructor == RegExp.prototype.constructor", + true, + re.constructor == RegExp.prototype.constructor ); + + AddTestCase( re + ".compile == RegExp.prototype.compile", + true, + re.compile == RegExp.prototype.compile ); + + AddTestCase( re + ".exec == RegExp.prototype.exec", + true, + re.exec == RegExp.prototype.exec ); + + // properties + + AddTestCase( re + ".source", + s, + re.source ); + +/* + * http://bugzilla.mozilla.org/show_bug.cgi?id=225550 changed + * the behavior of toString() and toSource() on empty regexps. + * So branch if |s| is the empty string - + */ + var S = s? s : '(?:)'; + + AddTestCase( re + ".toString()", + "/" + S +"/" + (g?"g":"") + (i?"i":"") +(m?"m":""), + re.toString() ); + + AddTestCase( re + ".global", + g, + re.global ); + + AddTestCase( re + ".ignoreCase", + i, + re.ignoreCase ); + + AddTestCase( re + ".multiline", + m, + re.multiline); + + AddTestCase( re + ".lastIndex", + l, + re.lastIndex ); +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/properties-002.js b/source/spidermonkey-tests/ecma_2/RegExp/properties-002.js new file mode 100644 index 00000000..330fe4bd --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/properties-002.js @@ -0,0 +1,129 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/properties-002.js + * ECMA Section: 15.7.6.js + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +//----------------------------------------------------------------------------- +var SECTION = "RegExp/properties-002.js"; +var VERSION = "ECMA_2"; +var TITLE = "Properties of RegExp Instances"; +var BUGNUMBER ="124339"; + +startTest(); + +re_1 = /\cA?/g; +re_1.lastIndex = Math.pow(2,31); +AddRegExpCases( re_1, "\\cA?", true, false, false, Math.pow(2,31) ); + +re_2 = /\w*/i; +re_2.lastIndex = Math.pow(2,32) -1; +AddRegExpCases( re_2, "\\w*", false, true, false, Math.pow(2,32)-1 ); + +re_3 = /\*{0,80}/m; +re_3.lastIndex = Math.pow(2,31) -1; +AddRegExpCases( re_3, "\\*{0,80}", false, false, true, Math.pow(2,31) -1 ); + +re_4 = /^./gim; +re_4.lastIndex = Math.pow(2,30) -1; +AddRegExpCases( re_4, "^.", true, true, true, Math.pow(2,30) -1 ); + +re_5 = /\B/; +re_5.lastIndex = Math.pow(2,30); +AddRegExpCases( re_5, "\\B", false, false, false, Math.pow(2,30) ); + +/* + * Brendan: "need to test cases Math.pow(2,32) and greater to see + * whether they round-trip." Reason: thanks to the work done in + * http://bugzilla.mozilla.org/show_bug.cgi?id=124339, lastIndex + * is now stored as a double instead of a uint32_t (unsigned integer). + * + * Note 2^32 -1 is the upper bound for uint32's, but doubles can go + * all the way up to Number.MAX_VALUE. So that's why we need cases + * between those two numbers. + * + */ +re_6 = /\B/; +re_6.lastIndex = Math.pow(2,32); +AddRegExpCases( re_6, "\\B", false, false, false, Math.pow(2,32) ); + +re_7 = /\B/; +re_7.lastIndex = Math.pow(2,32) + 1; +AddRegExpCases( re_7, "\\B", false, false, false, Math.pow(2,32) + 1 ); + +re_8 = /\B/; +re_8.lastIndex = Math.pow(2,32) * 2; +AddRegExpCases( re_8, "\\B", false, false, false, Math.pow(2,32) * 2 ); + +re_9 = /\B/; +re_9.lastIndex = Math.pow(2,40); +AddRegExpCases( re_9, "\\B", false, false, false, Math.pow(2,40) ); + +re_10 = /\B/; +re_10.lastIndex = Number.MAX_VALUE; +AddRegExpCases( re_10, "\\B", false, false, false, Number.MAX_VALUE ); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function AddRegExpCases( re, s, g, i, m, l ){ + + AddTestCase( re + ".test == RegExp.prototype.test", + true, + re.test == RegExp.prototype.test ); + + AddTestCase( re + ".toString == RegExp.prototype.toString", + true, + re.toString == RegExp.prototype.toString ); + + AddTestCase( re + ".contructor == RegExp.prototype.constructor", + true, + re.constructor == RegExp.prototype.constructor ); + + AddTestCase( re + ".compile == RegExp.prototype.compile", + true, + re.compile == RegExp.prototype.compile ); + + AddTestCase( re + ".exec == RegExp.prototype.exec", + true, + re.exec == RegExp.prototype.exec ); + + // properties + + AddTestCase( re + ".source", + s, + re.source ); + + AddTestCase( re + ".toString()", + "/" + s +"/" + (g?"g":"") + (i?"i":"") +(m?"m":""), + re.toString() ); + + AddTestCase( re + ".global", + g, + re.global ); + + AddTestCase( re + ".ignoreCase", + i, + re.ignoreCase ); + + AddTestCase( re + ".multiline", + m, + re.multiline); + + AddTestCase( re + ".lastIndex", + l, + re.lastIndex ); +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/regexp-enumerate-001.js b/source/spidermonkey-tests/ecma_2/RegExp/regexp-enumerate-001.js new file mode 100644 index 00000000..d1f3f213 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/regexp-enumerate-001.js @@ -0,0 +1,88 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: regexp-enumerate-001.js + ECMA V2 Section: + Description: Regression Test. + + If instance Native Object have properties that are enumerable, + JavaScript enumerated through the properties twice. This only + happened if objects had been instantiated, but their properties + had not been enumerated. ie, the object inherited properties + from its prototype that are enumerated. + + In the core JavaScript, this is only a problem with RegExp + objects, since the inherited properties of most core JavaScript + objects are not enumerated. + + Author: christine@netscape.com, pschwartau@netscape.com + Date: 12 November 1997 + Modified: 14 July 2002 + Reason: See http://bugzilla.mozilla.org/show_bug.cgi?id=155291 + ECMA-262 Ed.3 Sections 15.10.7.1 through 15.10.7.5 + RegExp properties should be DontEnum + * + */ +// onerror = err; + +var SECTION = "regexp-enumerate-001"; +var VERSION = "ECMA_2"; +var TITLE = "Regression Test for Enumerating Properties"; + +var BUGNUMBER="339403"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +/* + * This test expects RegExp instances to have four enumerated properties: + * source, global, ignoreCase, and lastIndex + * + * 99.01.25: now they also have a multiLine instance property. + * + */ + + +var r = new RegExp(); + +var e = new Array(); + +var t = new TestRegExp(); + +for ( p in r ) { e[e.length] = { property:p, value:r[p] }; t.addProperty( p, r[p]) }; + +new TestCase( SECTION, + "r = new RegExp(); e = new Array(); "+ + "for ( p in r ) { e[e.length] = { property:p, value:r[p] }; e.length", + 0, + e.length ); + +test(); + +function TestRegExp() { + this.addProperty = addProperty; +} +function addProperty(name, value) { + var pass = false; + + if ( eval("this."+name) != void 0 ) { + pass = true; + } else { + eval( "this."+ name+" = "+ false ); + } + + new TestCase( SECTION, + "Property: " + name +" already enumerated?", + false, + pass ); + + if ( gTestcases[ gTestcases.length-1].passed == false ) { + gTestcases[gTestcases.length-1].reason = "property already enumerated"; + + } + +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/regress-001.js b/source/spidermonkey-tests/ecma_2/RegExp/regress-001.js new file mode 100644 index 00000000..9282cd80 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/regress-001.js @@ -0,0 +1,45 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/regress-001.js + * ECMA Section: N/A + * Description: Regression test case: + * JS regexp anchoring on empty match bug + * http://bugzilla.mozilla.org/show_bug.cgi?id=2157 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/hex-001.js"; +var VERSION = "ECMA_2"; +var TITLE = "JS regexp anchoring on empty match bug"; +var BUGNUMBER = "2157"; + +startTest(); + +AddRegExpCases( /a||b/.exec(''), + "/a||b/.exec('')", + 1, + [''] ); + +test(); + +function AddRegExpCases( regexp, str_regexp, length, matches_array ) { + + AddTestCase( + "( " + str_regexp + " ).length", + regexp.length, + regexp.length ); + + + for ( var matches = 0; matches < matches_array.length; matches++ ) { + AddTestCase( + "( " + str_regexp + " )[" + matches +"]", + matches_array[matches], + regexp[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/RegExp/shell.js b/source/spidermonkey-tests/ecma_2/RegExp/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/RegExp/unicode-001.js b/source/spidermonkey-tests/ecma_2/RegExp/unicode-001.js new file mode 100644 index 00000000..ab6fbd37 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/RegExp/unicode-001.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/unicode-001.js + * ECMA Section: 15.7.3.1 + * Description: Based on ECMA 2 Draft 7 February 1999 + * Positive test cases for constructing a RegExp object + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/unicode-001.js"; +var VERSION = "ECMA_2"; +var TITLE = "new RegExp( pattern, flags )"; + +startTest(); + +// These examples come from 15.7.1, UnicodeEscapeSequence + +AddRegExpCases( /\u0041/, "/\\u0041/", "A", "A", 1, 0, ["A"] ); +AddRegExpCases( /\u00412/, "/\\u00412/", "A2", "A2", 1, 0, ["A2"] ); +AddRegExpCases( /\u00412/, "/\\u00412/", "A2", "A2", 1, 0, ["A2"] ); +AddRegExpCases( /\u001g/, "/\\u001g/", "u001g", "u001g", 1, 0, ["u001g"] ); + +AddRegExpCases( /A/, "/A/", "\u0041", "\\u0041", 1, 0, ["A"] ); +AddRegExpCases( /A/, "/A/", "\u00412", "\\u00412", 1, 0, ["A"] ); +AddRegExpCases( /A2/, "/A2/", "\u00412", "\\u00412", 1, 0, ["A2"]); +AddRegExpCases( /A/, "/A/", "A2", "A2", 1, 0, ["A"] ); + +test(); + +function AddRegExpCases( + regexp, str_regexp, pattern, str_pattern, length, index, matches_array ) { + + AddTestCase( + str_regexp + " .exec(" + str_pattern +").length", + length, + regexp.exec(pattern).length ); + + AddTestCase( + str_regexp + " .exec(" + str_pattern +").index", + index, + regexp.exec(pattern).index ); + + AddTestCase( + str_regexp + " .exec(" + str_pattern +").input", + pattern, + regexp.exec(pattern).input ); + + for ( var matches = 0; matches < matches_array.length; matches++ ) { + AddTestCase( + str_regexp + " .exec(" + str_pattern +")[" + matches +"]", + matches_array[matches], + regexp.exec(pattern)[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/browser.js b/source/spidermonkey-tests/ecma_2/Statements/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/Statements/dowhile-001.js b/source/spidermonkey-tests/ecma_2/Statements/dowhile-001.js new file mode 100644 index 00000000..d9a7a033 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/dowhile-001.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: dowhile-001 + * ECMA Section: + * Description: do...while statements + * + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "dowhile-002"; +var VERSION = "ECMA_2"; +var TITLE = "do...while with a labeled continue statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +LabeledContinue( 0, 1 ); +LabeledContinue( 1, 1 ); +LabeledContinue( -1, 1 ); +LabeledContinue( 5, 5 ); + +test(); + +function LabeledContinue( limit, expect ) { + i = 0; +woohoo: + do { + i++; + continue woohoo; + } while ( i < limit ); + + new TestCase( + SECTION, + "do while ( " + i +" < " + limit +" )", + expect, + i ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/dowhile-002.js b/source/spidermonkey-tests/ecma_2/Statements/dowhile-002.js new file mode 100644 index 00000000..e25557e7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/dowhile-002.js @@ -0,0 +1,71 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: dowhile-002 + * ECMA Section: + * Description: do...while statements + * + * Verify that code after a labeled break is not executed. Verify that + * a labeled break breaks you out of the whole labeled block, and not + * just the current iteration statement. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "dowhile-002"; +var VERSION = "ECMA_2"; +var TITLE = "do...while with a labeled continue statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +LabeledContinue( 0, 1 ); +LabeledContinue( 1, 1 ); +LabeledContinue( -1, 1 ); +LabeledContinue( 5, 5 ); + +test(); + +// The labeled statement contains statements after the labeled break. +// Verify that the statements after the break are not executed. + +function LabeledContinue( limit, expect ) { + i = 0; + result1 = "pass"; + result2 = "pass"; + +woohoo: { + do { + i++; + if ( ! (i < limit) ) { + break woohoo; + result1 = "fail: evaluated statement after a labeled break"; + } + } while ( true ); + + result2 = "failed: broke out of loop, but not out of labeled block"; + } + + new TestCase( + SECTION, + "do while ( " + i +" < " + limit +" )", + expect, + i ); + + new TestCase( + SECTION, + "breaking out of a do... while loop", + "pass", + result1 ); + + + new TestCase( + SECTION, + "breaking out of a labeled do...while loop", + "pass", + result2 ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/dowhile-003.js b/source/spidermonkey-tests/ecma_2/Statements/dowhile-003.js new file mode 100644 index 00000000..b482823e --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/dowhile-003.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: dowhile-003 + * ECMA Section: + * Description: do...while statements + * + * Test do while, when the while expression is a JavaScript Number object. + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "dowhile-003"; +var VERSION = "ECMA_2"; +var TITLE = "do...while with a labeled continue statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile( new DoWhileObject( 1, 1, 0 )); +DoWhile( new DoWhileObject( 1000, 1000, 0 )); +DoWhile( new DoWhileObject( 1001, 1001, 0 )); +DoWhile( new DoWhileObject( 1002, 1001, 1 )); +DoWhile( new DoWhileObject( -1, 1001, -1002 )); + +test(); + +function DoWhileObject( value, iterations, endvalue ) { + this.value = value; + this.iterations = iterations; + this.endvalue = endvalue; +} + +function DoWhile( object ) { + var i = 0; + + do { + object.value = --object.value; + i++; + if ( i > 1000 ) + break; + } while( object.value ); + + new TestCase( + SECTION, + "loop iterations", + object.iterations, + i + ); + + new TestCase( + SECTION, + "object.value", + object.endvalue, + Number( object.value ) + ); + +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/dowhile-004.js b/source/spidermonkey-tests/ecma_2/Statements/dowhile-004.js new file mode 100644 index 00000000..90e376fd --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/dowhile-004.js @@ -0,0 +1,67 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: dowhile-004 + * ECMA Section: + * Description: do...while statements + * + * Test a labeled do...while. Break out of the loop with no label + * should break out of the loop, but not out of the label. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "dowhile-004"; +var VERSION = "ECMA_2"; +var TITLE = "do...while with a labeled continue statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile( 0, 1 ); +DoWhile( 1, 1 ); +DoWhile( -1, 1 ); +DoWhile( 5, 5 ); + +test(); + +function DoWhile( limit, expect ) { + i = 0; + result1 = "pass"; + result2 = "failed: broke out of labeled statement unexpectedly"; + +foo: { + do { + i++; + if ( ! (i < limit) ) { + break; + result1 = "fail: evaluated statement after a labeled break"; + } + } while ( true ); + + result2 = "pass"; + } + + new TestCase( + SECTION, + "do while ( " + i +" < " + limit +" )", + expect, + i ); + + new TestCase( + SECTION, + "breaking out of a do... while loop", + "pass", + result1 ); + + + new TestCase( + SECTION, + "breaking out of a labeled do...while loop", + "pass", + result2 ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/dowhile-005.js b/source/spidermonkey-tests/ecma_2/Statements/dowhile-005.js new file mode 100644 index 00000000..3c339f49 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/dowhile-005.js @@ -0,0 +1,73 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: dowhile-005 + * ECMA Section: + * Description: do...while statements + * + * Test a labeled do...while. Break out of the loop with no label + * should break out of the loop, but not out of the label. + * + * Currently causes an infinite loop in the monkey. Uncomment the + * print statement below and it works OK. + * + * Author: christine@netscape.com + * Date: 26 August 1998 + */ +var SECTION = "dowhile-005"; +var VERSION = "ECMA_2"; +var TITLE = "do...while with a labeled continue statement"; +var BUGNUMBER = "316293"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +NestedLabel(); + + +test(); + +function NestedLabel() { + i = 0; + result1 = "pass"; + result2 = "fail: did not hit code after inner loop"; + result3 = "pass"; + +outer: { + do { + inner: { +// print( i ); + break inner; + result1 = "fail: did break out of inner label"; + } + result2 = "pass"; + break outer; + print(i); + } while ( i++ < 100 ); + + } + + result3 = "fail: did not break out of outer label"; + + new TestCase( + SECTION, + "number of loop iterations", + 0, + i ); + + new TestCase( + SECTION, + "break out of inner loop", + "pass", + result1 ); + + new TestCase( + SECTION, + "break out of outer loop", + "pass", + result2 ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/dowhile-006.js b/source/spidermonkey-tests/ecma_2/Statements/dowhile-006.js new file mode 100644 index 00000000..0a1aa701 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/dowhile-006.js @@ -0,0 +1,89 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: dowhile-006 + * ECMA Section: + * Description: do...while statements + * + * A general do...while test. + * + * Author: christine@netscape.com + * Date: 26 August 1998 + */ +var SECTION = "dowhile-006"; +var VERSION = "ECMA_2"; +var TITLE = "do...while"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile( new DoWhileObject( false, false, 10 ) ); +DoWhile( new DoWhileObject( true, false, 2 ) ); +DoWhile( new DoWhileObject( false, true, 3 ) ); +DoWhile( new DoWhileObject( true, true, 4 ) ); + +test(); + +function looping( object ) { + object.iterations--; + + if ( object.iterations <= 0 ) { + return false; + } else { + return true; + } +} +function DoWhileObject( breakOut, breakIn, iterations, loops ) { + this.iterations = iterations; + this.loops = loops; + this.breakOut = breakOut; + this.breakIn = breakIn; + this.looping = looping; +} +function DoWhile( object ) { + var result1 = false; + var result2 = false; + +outie: { + innie: { + do { + if ( object.breakOut ) + break outie; + + if ( object.breakIn ) + break innie; + + } while ( looping(object) ); + + // statements should be executed if: + // do...while exits normally + // do...while exits abruptly with no label + + result1 = true; + + } + +// statements should be executed if: +// do...while breaks out with label "innie" +// do...while exits normally +// do...while does not break out with "outie" + + result2 = true; + } + + new TestCase( + SECTION, + "hit code after loop in inner loop", + ( object.breakIn || object.breakOut ) ? false : true , + result1 ); + + new TestCase( + SECTION, + "hit code after loop in outer loop", + ( object.breakOut ) ? false : true, + result2 ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/dowhile-007.js b/source/spidermonkey-tests/ecma_2/Statements/dowhile-007.js new file mode 100644 index 00000000..44adbcaf --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/dowhile-007.js @@ -0,0 +1,97 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: dowhile-007 + * ECMA Section: + * Description: do...while statements + * + * A general do...while test. + * + * Author: christine@netscape.com + * Date: 26 August 1998 + */ +var SECTION = "dowhile-007"; +var VERSION = "ECMA_2"; +var TITLE = "do...while"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile( new DoWhileObject( false, false, false, false )); +DoWhile( new DoWhileObject( true, false, false, false )); +DoWhile( new DoWhileObject( true, true, false, false )); +DoWhile( new DoWhileObject( true, true, true, false )); +DoWhile( new DoWhileObject( true, true, true, true )); +DoWhile( new DoWhileObject( false, false, false, true )); +DoWhile( new DoWhileObject( false, false, true, true )); +DoWhile( new DoWhileObject( false, true, true, true )); +DoWhile( new DoWhileObject( false, false, true, false )); + +test(); + +function DoWhileObject( out1, out2, out3, in1 ) { + this.breakOutOne = out1; + this.breakOutTwo = out2; + this.breakOutThree = out3; + this.breakIn = in1; +} +function DoWhile( object ) { + result1 = false; + result2 = false; + result3 = false; + result4 = false; + +outie: + do { + if ( object.breakOutOne ) { + break outie; + } + result1 = true; + + innie: + do { + if ( object.breakOutTwo ) { + break outie; + } + result2 = true; + + if ( object.breakIn ) { + break innie; + } + result3 = true; + + } while ( false ); + if ( object.breakOutThree ) { + break outie; + } + result4 = true; + } while ( false ); + + new TestCase( + SECTION, + "break one: ", + (object.breakOutOne) ? false : true, + result1 ); + + new TestCase( + SECTION, + "break two: ", + (object.breakOutOne||object.breakOutTwo) ? false : true, + result2 ); + + new TestCase( + SECTION, + "break three: ", + (object.breakOutOne||object.breakOutTwo||object.breakIn) ? false : true, + result3 ); + + new TestCase( + SECTION, + "break four: ", + (object.breakOutOne||object.breakOutTwo||object.breakOutThree) ? false: true, + result4 ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/forin-001.js b/source/spidermonkey-tests/ecma_2/Statements/forin-001.js new file mode 100644 index 00000000..215de6c4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/forin-001.js @@ -0,0 +1,297 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: forin-001.js + * ECMA Section: + * Description: The forin-001 statement + * + * Verify that the property name is assigned to the property on the left + * hand side of the for...in expression. + * + * Author: christine@netscape.com + * Date: 28 August 1998 + */ +var SECTION = "forin-001"; +var VERSION = "ECMA_2"; +var TITLE = "The for...in statement"; +var BUGNUMBER="330890"; +var BUGNUMBER="http://scopus.mcom.com/bugsplat/show_bug.cgi?id=344855"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +ForIn_1( { length:4, company:"netscape", year:2000, 0:"zero" } ); +ForIn_2( { length:4, company:"netscape", year:2000, 0:"zero" } ); +ForIn_3( { length:4, company:"netscape", year:2000, 0:"zero" } ); + +// ForIn_6({ length:4, company:"netscape", year:2000, 0:"zero" }); +// ForIn_7({ length:4, company:"netscape", year:2000, 0:"zero" }); +ForIn_8({ length:4, company:"netscape", year:2000, 0:"zero" }); + +test(); + +/** + * Verify that the left side argument is evaluated with every iteration. + * Verify that the name of each property of the object is assigned to a + * a property. + * + */ +function ForIn_1( object ) { + PropertyArray = new Array(); + ValueArray = new Array(); + + for ( PropertyArray[PropertyArray.length] in object ) { + ValueArray[ValueArray.length] = + object[PropertyArray[PropertyArray.length-1]]; + } + + for ( var i = 0; i < PropertyArray.length; i++ ) { + new TestCase( + SECTION, + "object[" + PropertyArray[i] +"]", + object[PropertyArray[i]], + ValueArray[i] + ); + } + + new TestCase( + SECTION, + "object.length", + PropertyArray.length, + object.length ); +} + +/** + * Similar to ForIn_1, except it should increment the counter variable + * every time the left hand expression is evaluated. + */ +function ForIn_2( object ) { + PropertyArray = new Array(); + ValueArray = new Array(); + var i = 0; + + for ( PropertyArray[i++] in object ) { + ValueArray[ValueArray.length] = + object[PropertyArray[PropertyArray.length-1]]; + } + + for ( i = 0; i < PropertyArray.length; i++ ) { + new TestCase( + SECTION, + "object[" + PropertyArray[i] +"]", + object[PropertyArray[i]], + ValueArray[i] + ); + } + + new TestCase( + SECTION, + "object.length", + PropertyArray.length, + object.length ); +} + +/** + * Break out of a for...in loop + * + * + */ +function ForIn_3( object ) { + var checkBreak = "pass"; + var properties = new Array(); + var values = new Array(); + + for ( properties[properties.length] in object ) { + values[values.length] = object[properties[properties.length-1]]; + break; + checkBreak = "fail"; + } + + new TestCase( + SECTION, + "check break out of for...in", + "pass", + checkBreak ); + + new TestCase( + SECTION, + "properties.length", + 1, + properties.length ); + + new TestCase( + SECTION, + "object["+properties[0]+"]", + values[0], + object[properties[0]] ); +} + +/** + * Break out of a labeled for...in loop. + */ +function ForIn_4( object ) { + var result1 = 0; + var result2 = 0; + var result3 = 0; + var result4 = 0; + var i = 0; + var property = new Array(); + +butterbean: { + result1++; + + for ( property[i++] in object ) { + result2++; + break; + result4++; + } + result3++; + } + + new TestCase( + SECTION, + "verify labeled statement is only executed once", + true, + result1 == 1 ); + + new TestCase( + SECTION, + "verify statements in for loop are evaluated", + true, + result2 == i ); + + new TestCase( + SECTION, + "verify break out of labeled for...in loop", + true, + result4 == 0 ); + + new TestCase( + SECTION, + "verify break out of labeled block", + true, + result3 == 0 ); +} + +/** + * Labeled break out of a labeled for...in loop. + */ +function ForIn_5 (object) { + var result1 = 0; + var result2 = 0; + var result3 = 0; + var result4 = 0; + var i = 0; + var property = new Array(); + +bigredbird: { + result1++; + for ( property[i++] in object ) { + result2++; + break bigredbird; + result4++; + } + result3++; + } + + new TestCase( + SECTION, + "verify labeled statement is only executed once", + true, + result1 == 1 ); + + new TestCase( + SECTION, + "verify statements in for loop are evaluated", + true, + result2 == i ); + + new TestCase( + SECTION, + "verify break out of labeled for...in loop", + true, + result4 == 0 ); + + new TestCase( + SECTION, + "verify break out of labeled block", + true, + result3 == 0 ); +} + +/** + * Labeled continue from a labeled for...in loop + */ +function ForIn_7( object ) { + var result1 = 0; + var result2 = 0; + var result3 = 0; + var result4 = 0; + var i = 0; + var property = new Array(); + +bigredbird: + for ( property[i++] in object ) { + result2++; + continue bigredbird; + result4++; + } + + new TestCase( + SECTION, + "verify statements in for loop are evaluated", + true, + result2 == i ); + + new TestCase( + SECTION, + "verify break out of labeled for...in loop", + true, + result4 == 0 ); + + new TestCase( + SECTION, + "verify break out of labeled block", + true, + result3 == 1 ); +} + + +/** + * continue in a for...in loop + * + */ +function ForIn_8( object ) { + var checkBreak = "pass"; + var properties = new Array(); + var values = new Array(); + + for ( properties[properties.length] in object ) { + values[values.length] = object[properties[properties.length-1]]; + break; + checkBreak = "fail"; + } + + new TestCase( + SECTION, + "check break out of for...in", + "pass", + checkBreak ); + + new TestCase( + SECTION, + "properties.length", + 1, + properties.length ); + + new TestCase( + SECTION, + "object["+properties[0]+"]", + values[0], + object[properties[0]] ); +} + diff --git a/source/spidermonkey-tests/ecma_2/Statements/forin-002.js b/source/spidermonkey-tests/ecma_2/Statements/forin-002.js new file mode 100644 index 00000000..7d898d6b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/forin-002.js @@ -0,0 +1,77 @@ +// |reftest| skip-if(Android) -- bug - nsIDOMWindow.crypto throws NS_ERROR_NOT_IMPLEMENTED on Android +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: forin-002.js + * ECMA Section: + * Description: The forin-001 statement + * + * Verify that the property name is assigned to the property on the left + * hand side of the for...in expression. + * + * Author: christine@netscape.com + * Date: 28 August 1998 + */ +var SECTION = "forin-002"; +var VERSION = "ECMA_2"; +var TITLE = "The for...in statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function MyObject( value ) { + this.value = value; + this.valueOf = new Function ( "return this.value" ); + this.toString = new Function ( "return this.value + \"\"" ); + this.toNumber = new Function ( "return this.value + 0" ); + this.toBoolean = new Function ( "return Boolean( this.value )" ); +} + +ForIn_1(this); +ForIn_2(this); + +ForIn_1(new MyObject(true)); +ForIn_2(new MyObject(new Boolean(true))); + +ForIn_2(3); + +test(); + +/** + * For ... In in a With Block + * + */ +function ForIn_1( object) { + with ( object ) { + for ( property in object ) { + new TestCase( + SECTION, + "with loop in a for...in loop. ("+object+")["+property +"] == "+ + "eval ( " + property +" )", + true, + object[property] == eval(property) ); + } + } +} + +/** + * With block in a For...In loop + * + */ +function ForIn_2(object) { + for ( property in object ) { + with ( object ) { + new TestCase( + SECTION, + "with loop in a for...in loop. ("+object+")["+property +"] == "+ + "eval ( " + property +" )", + true, + object[property] == eval(property) ); + } + } +} + diff --git a/source/spidermonkey-tests/ecma_2/Statements/if-001.js b/source/spidermonkey-tests/ecma_2/Statements/if-001.js new file mode 100644 index 00000000..ffc621a3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/if-001.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: if-001.js + * ECMA Section: + * Description: The if statement + * + * Verify that assignment in the if expression is evaluated correctly. + * Verifies the fix for bug http://scopus/bugsplat/show_bug.cgi?id=148822. + * + * Author: christine@netscape.com + * Date: 28 August 1998 + */ +var SECTION = "for-001"; +var VERSION = "ECMA_2"; +var TITLE = "The if statement"; +var BUGNUMBER="148822"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = 0; +var b = 0; +var result = "passed"; + +if ( a = b ) { + result = "failed: a = b should return 0"; +} + +new TestCase( + SECTION, + "if ( a = b ), where a and b are both equal to 0", + "passed", + result ); + + +test(); + diff --git a/source/spidermonkey-tests/ecma_2/Statements/label-001.js b/source/spidermonkey-tests/ecma_2/Statements/label-001.js new file mode 100644 index 00000000..391732a2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/label-001.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: label-001.js + * ECMA Section: + * Description: Labeled statements + * + * Labeled break and continue within a for loop. + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "label-003"; +var VERSION = "ECMA_2"; +var TITLE = "Labeled statements"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +LabelTest(0, 0); +LabelTest(1, 1) + LabelTest(-1, 1000); +LabelTest(false, 0); +LabelTest(true, 1); + +test(); + +function LabelTest( limit, expect) { +woo: for ( var result = 0; result < 1000; result++ ) { if (result == limit) { break woo; } else { continue woo; } }; + + new TestCase( + SECTION, + "break out of a labeled for loop: "+ limit, + expect, + result ); +} + diff --git a/source/spidermonkey-tests/ecma_2/Statements/label-002.js b/source/spidermonkey-tests/ecma_2/Statements/label-002.js new file mode 100644 index 00000000..1e2b63ad --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/label-002.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: label-002.js + * ECMA Section: + * Description: Labeled statements + * + * Labeled break and continue within a for-in loop. + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "label-002"; +var VERSION = "ECMA_2"; +var TITLE = "Labeled statements"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +LabelTest( { p1:"hi,", p2:" norris" }, "hi, norris", " norrishi," ); +LabelTest( { 0:"zero", 1:"one" }, "zeroone", "onezero" ); + +LabelTest2( { p1:"hi,", p2:" norris" }, "hi,", " norris" ); +LabelTest2( { 0:"zero", 1:"one" }, "zero", "one" ); + +test(); + +function LabelTest( object, expect1, expect2 ) { + result = ""; + +yoohoo: { for ( property in object ) { result += object[property]; }; break yoohoo }; + + new TestCase( + SECTION, + "yoohoo: for ( property in object ) { result += object[property]; } break yoohoo }", + true, + result == expect1 || result == expect2 ); +} + +function LabelTest2( object, expect1, expect2 ) { + result = ""; + +yoohoo: { for ( property in object ) { result += object[property]; break yoohoo } }; ; + + new TestCase( + SECTION, + "yoohoo: for ( property in object ) { result += object[property]; break yoohoo }}", + true, + result == expect1 || result == expect2 ); +} + diff --git a/source/spidermonkey-tests/ecma_2/Statements/label-003.js b/source/spidermonkey-tests/ecma_2/Statements/label-003.js new file mode 100644 index 00000000..93473294 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/label-003.js @@ -0,0 +1,15 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// The colon for a labeled statement may be on a separate line. +var x; +label +: { + x = 1; + break label; + x = 2; +} +assertEq(x, 1); +reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_2/Statements/shell.js b/source/spidermonkey-tests/ecma_2/Statements/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/Statements/switch-001.js b/source/spidermonkey-tests/ecma_2/Statements/switch-001.js new file mode 100644 index 00000000..44e72985 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/switch-001.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: switch-001.js + * ECMA Section: + * Description: The switch Statement + * + * A simple switch test with no abrupt completions. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * + */ +var SECTION = "switch-001"; +var VERSION = "ECMA_2"; +var TITLE = "The switch statement"; + +var BUGNUMBER="315767"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +SwitchTest( 0, 126 ); +SwitchTest( 1, 124 ); +SwitchTest( 2, 120 ); +SwitchTest( 3, 112 ); +SwitchTest( 4, 64 ); +SwitchTest( 5, 96 ); +SwitchTest( true, 96 ); +SwitchTest( false, 96 ); +SwitchTest( null, 96 ); +SwitchTest( void 0, 96 ); +SwitchTest( "0", 96 ); + +test(); + +function SwitchTest( input, expect ) { + var result = 0; + + switch ( input ) { + case 0: + result += 2; + case 1: + result += 4; + case 2: + result += 8; + case 3: + result += 16; + default: + result += 32; + case 4: + result +=64; + } + + new TestCase( + SECTION, + "switch with no breaks, case expressions are numbers. input is "+ + input, + expect, + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/switch-002.js b/source/spidermonkey-tests/ecma_2/Statements/switch-002.js new file mode 100644 index 00000000..3e08630b --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/switch-002.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: switch-002.js + * ECMA Section: + * Description: The switch Statement + * + * A simple switch test with no abrupt completions. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * + */ +var SECTION = "switch-002"; +var VERSION = "ECMA_2"; +var TITLE = "The switch statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +SwitchTest( 0, 6 ); +SwitchTest( 1, 4 ); +SwitchTest( 2, 56 ); +SwitchTest( 3, 48 ); +SwitchTest( 4, 64 ); +SwitchTest( true, 32 ); +SwitchTest( false, 32 ); +SwitchTest( null, 32 ); +SwitchTest( void 0, 32 ); +SwitchTest( "0", 32 ); + +test(); + +function SwitchTest( input, expect ) { + var result = 0; + + switch ( input ) { + case 0: + result += 2; + case 1: + result += 4; + break; + case 2: + result += 8; + case 3: + result += 16; + default: + result += 32; + break; + case 4: + result += 64; + } + + new TestCase( + SECTION, + "switch with no breaks: input is " + input, + expect, + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/switch-003.js b/source/spidermonkey-tests/ecma_2/Statements/switch-003.js new file mode 100644 index 00000000..5ceaade6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/switch-003.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: switch-003.js + * ECMA Section: + * Description: The switch Statement + * + * Attempt to verify that case statements are evaluated in source order + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * + */ +var SECTION = "switch-003"; +var VERSION = "ECMA_2"; +var TITLE = "The switch statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +SwitchTest( "a", "abc" ); +SwitchTest( "b", "bc" ); +SwitchTest( "c", "c" ); +SwitchTest( "d", "*abc" ); +SwitchTest( "v", "*abc" ); +SwitchTest( "w", "w*abc" ); +SwitchTest( "x", "xw*abc" ); +SwitchTest( "y", "yxw*abc" ); +SwitchTest( "z", "zyxw*abc" ); +// SwitchTest( new java.lang.String("z"), "*abc" ); + +test(); + +function SwitchTest( input, expect ) { + var result = ""; + + switch ( input ) { + case "z": result += "z"; + case "y": result += "y"; + case "x": result += "x"; + case "w": result += "w"; + default: result += "*"; + case "a": result += "a"; + case "b": result += "b"; + case "c": result += "c"; + } + + new TestCase( + SECTION, + "switch with no breaks: input is " + input, + expect, + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/switch-004.js b/source/spidermonkey-tests/ecma_2/Statements/switch-004.js new file mode 100644 index 00000000..0572874a --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/switch-004.js @@ -0,0 +1,94 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: switch-003.js + * ECMA Section: + * Description: The switch Statement + * + * This uses variables and objects as case expressions in switch statements. + * This verifies a bunch of bugs: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315988 + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315975 + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315954 + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * + */ +var SECTION = "switch-003"; +var VERSION = "ECMA_2"; +var TITLE = "The switch statement"; +var BUGNUMBER= "315988"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +ONE = new Number(1); +ZERO = new Number(0); +var A = new String("A"); +var B = new String("B"); +TRUE = new Boolean( true ); +FALSE = new Boolean( false ); +UNDEFINED = void 0; +NULL = null; + +SwitchTest( ZERO, "ZERO" ); +SwitchTest( NULL, "NULL" ); +SwitchTest( UNDEFINED, "UNDEFINED" ); +SwitchTest( FALSE, "FALSE" ); +SwitchTest( false, "false" ); +SwitchTest( 0, "0" ); + +SwitchTest ( TRUE, "TRUE" ); +SwitchTest( 1, "1" ); +SwitchTest( ONE, "ONE" ); +SwitchTest( true, "true" ); + +SwitchTest( "a", "a" ); +SwitchTest( A, "A" ); +SwitchTest( "b", "b" ); +SwitchTest( B, "B" ); + +SwitchTest( new Boolean( true ), "default" ); +SwitchTest( new Boolean(false ), "default" ); +SwitchTest( new String( "A" ), "default" ); +SwitchTest( new Number( 0 ), "default" ); + +test(); + +function SwitchTest( input, expect ) { + var result = ""; + + switch ( input ) { + default: result += "default"; break; + case "a": result += "a"; break; + case "b": result += "b"; break; + case A: result += "A"; break; + case B: result += "B"; break; + case new Boolean(true): result += "new TRUE"; break; + case new Boolean(false): result += "new FALSE"; break; + case NULL: result += "NULL"; break; + case UNDEFINED: result += "UNDEFINED"; break; + case true: result += "true"; break; + case false: result += "false"; break; + case TRUE: result += "TRUE"; break; + case FALSE: result += "FALSE"; break; + case 0: result += "0"; break; + case 1: result += "1"; break; + case new Number(0) : result += "new ZERO"; break; + case new Number(1) : result += "new ONE"; break; + case ONE: result += "ONE"; break; + case ZERO: result += "ZERO"; break; + } + + new TestCase( + SECTION, + "switch with no breaks: input is " + input, + expect, + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-001.js b/source/spidermonkey-tests/ecma_2/Statements/try-001.js new file mode 100644 index 00000000..931837cd --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-001.js @@ -0,0 +1,83 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-001.js + * ECMA Section: + * Description: The try statement + * + * This test contains try, catch, and finally blocks. An exception is + * sometimes thrown by a function called from within the try block. + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = ""; +var VERSION = "ECMA_2"; +var TITLE = "The try statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var INVALID_JAVA_INTEGER_VALUE = "Invalid value for java.lang.Integer constructor"; + +TryNewJavaInteger( "3.14159", INVALID_JAVA_INTEGER_VALUE ); +TryNewJavaInteger( NaN, INVALID_JAVA_INTEGER_VALUE ); +TryNewJavaInteger( 0, 0 ); +TryNewJavaInteger( -1, -1 ); +TryNewJavaInteger( 1, 1 ); +TryNewJavaInteger( Infinity, Infinity ); + +test(); + +/** + * Check to see if the input is valid for java.lang.Integer. If it is + * not valid, throw INVALID_JAVA_INTEGER_VALUE. If input is valid, + * return Number( v ) + * + */ + +function newJavaInteger( v ) { + value = Number( v ); + if ( Math.floor(value) != value || isNaN(value) ) { + throw ( INVALID_JAVA_INTEGER_VALUE ); + } else { + return value; + } +} + +/** + * Call newJavaInteger( value ) from within a try block. Catch any + * exception, and store it in result. Verify that we got the right + * return value from newJavaInteger in cases in which we do not expect + * exceptions, and that we got the exception in cases where an exception + * was expected. + */ +function TryNewJavaInteger( value, expect ) { + var finalTest = false; + + try { + result = newJavaInteger( value ); + } catch ( e ) { + result = String( e ); + } finally { + finalTest = true; + } + new TestCase( + SECTION, + "newJavaValue( " + value +" )", + expect, + result); + + new TestCase( + SECTION, + "newJavaValue( " + value +" ) hit finally block", + true, + finalTest); + +} + diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-003.js b/source/spidermonkey-tests/ecma_2/Statements/try-003.js new file mode 100644 index 00000000..9244fcb5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-003.js @@ -0,0 +1,82 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-003.js + * ECMA Section: + * Description: The try statement + * + * This test has a try with no catch, and a finally. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-003"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement"; +var BUGNUMBER="http://scopus.mcom.com/bugsplat/show_bug.cgi?id=313585"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// Tests start here. + +TrySomething( "x = \"hi\"", false ); +TrySomething( "throw \"boo\"", true ); +TrySomething( "throw 3", true ); + +test(); + +/** + * This function contains a try block with no catch block, + * but it does have a finally block. Try to evaluate expressions + * that do and do not throw exceptions. + */ + +function TrySomething( expression, throwing ) { + innerFinally = "FAIL: DID NOT HIT INNER FINALLY BLOCK"; + if (throwing) { + outerCatch = "FAILED: NO EXCEPTION CAUGHT"; + } else { + outerCatch = "PASS"; + } + outerFinally = "FAIL: DID NOT HIT OUTER FINALLY BLOCK"; + + try { + try { + eval( expression ); + } finally { + innerFinally = "PASS"; + } + } catch ( e ) { + if (throwing) { + outerCatch = "PASS"; + } else { + outerCatch = "FAIL: HIT OUTER CATCH BLOCK"; + } + } finally { + outerFinally = "PASS"; + } + + + new TestCase( + SECTION, + "eval( " + expression +" )", + "PASS", + innerFinally ); + new TestCase( + SECTION, + "eval( " + expression +" )", + "PASS", + outerCatch ); + new TestCase( + SECTION, + "eval( " + expression +" )", + "PASS", + outerFinally ); + + +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-004.js b/source/spidermonkey-tests/ecma_2/Statements/try-004.js new file mode 100644 index 00000000..dbc55455 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-004.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-004.js + * ECMA Section: + * Description: The try statement + * + * This test has a try with one catch block but no finally. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-004"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +TryToCatch( "Math.PI", Math.PI ); +TryToCatch( "Thrower(5)", "Caught 5" ); +TryToCatch( "Thrower(\"some random exception\")", "Caught some random exception" ); + +test(); + +function Thrower( v ) { + throw "Caught " + v; +} + +/** + * Evaluate a string. Catch any exceptions thrown. If no exception is + * expected, verify the result of the evaluation. If an exception is + * expected, verify that we got the right exception. + */ + +function TryToCatch( value, expect ) { + try { + result = eval( value ); + } catch ( e ) { + result = e; + } + + new TestCase( + SECTION, + "eval( " + value +" )", + expect, + result ); +} + + diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-005.js b/source/spidermonkey-tests/ecma_2/Statements/try-005.js new file mode 100644 index 00000000..b50c5bf5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-005.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-005.js + * ECMA Section: + * Description: The try statement + * + * This test has a try with one catch block but no finally. Same + * as try-004, but the eval statement is called from a function, not + * directly from within the try block. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-005"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +TryToCatch( "Math.PI", Math.PI ); +TryToCatch( "Thrower(5)", "Caught 5" ); +TryToCatch( "Thrower(\"some random exception\")", "Caught some random exception" ); + +test(); + +function Thrower( v ) { + throw "Caught " + v; +} +function Eval( v ) { + return eval( v ); +} + +/** + * Evaluate a string. Catch any exceptions thrown. If no exception is + * expected, verify the result of the evaluation. If an exception is + * expected, verify that we got the right exception. + */ + +function TryToCatch( value, expect ) { + try { + result = Eval( value ); + } catch ( e ) { + result = e; + } + + new TestCase( + SECTION, + "eval( " + value +" )", + expect, + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-006.js b/source/spidermonkey-tests/ecma_2/Statements/try-006.js new file mode 100644 index 00000000..0a85200a --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-006.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-006.js + * ECMA Section: + * Description: The try statement + * + * Throw an exception from within a With block in a try block. Verify + * that any expected exceptions are caught. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-006"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +/** + * This is the "check" function for test objects that will + * throw an exception. + */ +function throwException() { + throw EXCEPTION_STRING +": " + this.valueOf(); +} +var EXCEPTION_STRING = "Exception thrown:"; + +/** + * This is the "check" function for test objects that do not + * throw an exception + */ +function noException() { + return this.valueOf(); +} + +/** + * Add test cases here + */ +TryWith( new TryObject( "hello", throwException, true )); +TryWith( new TryObject( "hola", noException, false )); + +/** + * Run the test. + */ + +test(); + +/** + * This is the object that will be the "this" in a with block. + */ +function TryObject( value, fun, exception ) { + this.value = value; + this.exception = exception; + + this.valueOf = new Function ( "return this.value" ); + this.check = fun; +} + +/** + * This function has the try block that has a with block within it. + * Test cases are added in this function. Within the with block, the + * object's "check" function is called. If the test object's exception + * property is true, we expect the result to be the exception value. + * If exception is false, then we expect the result to be the value of + * the object. + */ +function TryWith( object ) { + try { + with ( object ) { + result = check(); + } + } catch ( e ) { + result = e; + } + + new TestCase( + SECTION, + "TryWith( " + object.value +" )", + (object.exception ? EXCEPTION_STRING +": " + object.valueOf() : object.valueOf()), + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-007.js b/source/spidermonkey-tests/ecma_2/Statements/try-007.js new file mode 100644 index 00000000..93e08a0a --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-007.js @@ -0,0 +1,92 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-007.js + * ECMA Section: + * Description: The try statement + * + * This test has a for-in statement within a try block. + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-007"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement: for-in"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +/** + * This is the "check" function for test objects that will + * throw an exception. + */ +function throwException() { + throw EXCEPTION_STRING +": " + this.valueOf(); +} +var EXCEPTION_STRING = "Exception thrown:"; + +/** + * This is the "check" function for test objects that do not + * throw an exception + */ +function noException() { + return this.valueOf(); +} + +/** + * Add test cases here + */ +TryForIn( new TryObject( "hello", throwException, true )); +TryForIn( new TryObject( "hola", noException, false )); + +/** + * Run the test. + */ + +test(); + +/** + * This is the object that will be the "this" in a with block. + * The check function is either throwException() or noException(). + * See above. + * + */ +function TryObject( value, fun, exception ) { + this.value = value; + this.exception = exception; + + this.check = fun; + this.valueOf = function () { return this.value; } +} + +/** + * This function has a for-in statement within a try block. Test cases + * are added after the try-catch-finally statement. Within the for-in + * block, call a function that can throw an exception. Verify that any + * exceptions are properly caught. + */ + +function TryForIn( object ) { + try { + for ( p in object ) { + if ( typeof object[p] == "function" ) { + result = object[p](); + } + } + } catch ( e ) { + result = e; + } + + new TestCase( + SECTION, + "TryForIn( " + object+ " )", + (object.exception ? EXCEPTION_STRING +": " + object.value : object.value), + result ); + +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-008.js b/source/spidermonkey-tests/ecma_2/Statements/try-008.js new file mode 100644 index 00000000..d47ced0a --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-008.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-008.js + * ECMA Section: + * Description: The try statement + * + * This test has a try block in a constructor. + * + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-008"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement: try in a constructor"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Integer( value, exception ) { + try { + this.value = checkValue( value ); + } catch ( e ) { + this.value = e.toString(); + } + + new TestCase( + SECTION, + "Integer( " + value +" )", + (exception ? INVALID_INTEGER_VALUE +": " + value : this.value), + this.value ); +} + +var INVALID_INTEGER_VALUE = "Invalid value for java.lang.Integer constructor"; + +function checkValue( value ) { + if ( Math.floor(value) != value || isNaN(value) ) { + throw ( INVALID_INTEGER_VALUE +": " + value ); + } else { + return value; + } +} + +// add test cases + +new Integer( 3, false ); +new Integer( NaN, true ); +new Integer( 0, false ); +new Integer( Infinity, false ); +new Integer( -2.12, true ); +new Integer( Math.LN2, true ); + + +test(); diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-009.js b/source/spidermonkey-tests/ecma_2/Statements/try-009.js new file mode 100644 index 00000000..d3e0ebaa --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-009.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-009.js + * ECMA Section: + * Description: The try statement + * + * This test has a try block within a while block. Verify that an exception + * breaks out of the while. I don't really know why this is an interesting + * test case but Mike Shaver had two of these so what the hey. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-009"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement: try in a while block"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var EXCEPTION_STRING = "Exception thrown: "; +var NO_EXCEPTION_STRING = "No exception thrown: "; + + +TryInWhile( new TryObject( "hello", ThrowException, true ) ); +TryInWhile( new TryObject( "aloha", NoException, false )); + +test(); + +function TryObject( value, throwFunction, result ) { + this.value = value; + this.thrower = throwFunction; + this.result = result; +} +function ThrowException() { + throw EXCEPTION_STRING + this.value; +} +function NoException() { + return NO_EXCEPTION_STRING + this.value; +} +function TryInWhile( object ) { + result = null; + while ( true ) { + try { + object.thrower(); + result = NO_EXCEPTION_STRING + object.value; + break; + } catch ( e ) { + result = e; + break; + } + } + + new TestCase( + SECTION, + "( "+ object +".thrower() )", + (object.result + ? EXCEPTION_STRING + object.value : + NO_EXCEPTION_STRING + object.value), + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-010.js b/source/spidermonkey-tests/ecma_2/Statements/try-010.js new file mode 100644 index 00000000..5ee472c3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-010.js @@ -0,0 +1,73 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-010.js + * ECMA Section: + * Description: The try statement + * + * This has a try block nested in the try block. Verify that the + * exception is caught by the right try block, and all finally blocks + * are executed. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-010"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement: try in a tryblock"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var EXCEPTION_STRING = "Exception thrown: "; +var NO_EXCEPTION_STRING = "No exception thrown: "; + + +NestedTry( new TryObject( "No Exceptions Thrown", NoException, NoException, 43 ) ); +NestedTry( new TryObject( "Throw Exception in Outer Try", ThrowException, NoException, 48 )); +NestedTry( new TryObject( "Throw Exception in Inner Try", NoException, ThrowException, 45 )); +NestedTry( new TryObject( "Throw Exception in Both Trys", ThrowException, ThrowException, 48 )); + +test(); + +function TryObject( description, tryOne, tryTwo, result ) { + this.description = description; + this.tryOne = tryOne; + this.tryTwo = tryTwo; + this.result = result; +} +function ThrowException() { + throw EXCEPTION_STRING + this.value; +} +function NoException() { + return NO_EXCEPTION_STRING + this.value; +} +function NestedTry( object ) { + result = 0; + try { + object.tryOne(); + result += 1; + try { + object.tryTwo(); + result += 2; + } catch ( e ) { + result +=4; + } finally { + result += 8; + } + } catch ( e ) { + result += 16; + } finally { + result += 32; + } + + new TestCase( + SECTION, + object.description, + object.result, + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/try-012.js b/source/spidermonkey-tests/ecma_2/Statements/try-012.js new file mode 100644 index 00000000..3ee7d102 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/try-012.js @@ -0,0 +1,95 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: try-012.js + * ECMA Section: + * Description: The try statement + * + * This test has a try with no catch, and a finally. This is like try-003, + * but throws from a finally block, not the try block. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "try-012"; +var VERSION = "ECMA_2"; +var TITLE = "The try statement"; +var BUGNUMBER="336872"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// Tests start here. + +TrySomething( "x = \"hi\"", true ); +TrySomething( "throw \"boo\"", true ); +TrySomething( "throw 3", true ); + +test(); + +/** + * This function contains a try block with no catch block, + * but it does have a finally block. Try to evaluate expressions + * that do and do not throw exceptions. + * + * The productioni TryStatement Block Finally is evaluated as follows: + * 1. Evaluate Block + * 2. Evaluate Finally + * 3. If Result(2).type is normal return result 1 (in the test case, result 1 has + * the completion type throw) + * 4. return result 2 (does not get hit in this case) + * + */ + +function TrySomething( expression, throwing ) { + innerFinally = "FAIL: DID NOT HIT INNER FINALLY BLOCK"; + if (throwing) { + outerCatch = "FAILED: NO EXCEPTION CAUGHT"; + } else { + outerCatch = "PASS"; + } + outerFinally = "FAIL: DID NOT HIT OUTER FINALLY BLOCK"; + + + // If the inner finally does not throw an exception, the result + // of the try block should be returned. (Type of inner return + // value should be throw if finally executes correctly + + try { + try { + throw 0; + } finally { + innerFinally = "PASS"; + eval( expression ); + } + } catch ( e ) { + if (throwing) { + outerCatch = "PASS"; + } else { + outerCatch = "FAIL: HIT OUTER CATCH BLOCK"; + } + } finally { + outerFinally = "PASS"; + } + + + new TestCase( + SECTION, + "eval( " + expression +" ): evaluated inner finally block", + "PASS", + innerFinally ); + new TestCase( + SECTION, + "eval( " + expression +" ): evaluated outer catch block ", + "PASS", + outerCatch ); + new TestCase( + SECTION, + "eval( " + expression +" ): evaluated outer finally block", + "PASS", + outerFinally ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/while-001.js b/source/spidermonkey-tests/ecma_2/Statements/while-001.js new file mode 100644 index 00000000..88fd8dfe --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/while-001.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: while-001 + * ECMA Section: + * Description: while statement + * + * Verify that the while statement is not executed if the while expression is + * false + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "while-001"; +var VERSION = "ECMA_2"; +var TITLE = "while statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile(); +test(); + +function DoWhile() { + result = "pass"; + + while (false) { + result = "fail"; + break; + } + + new TestCase( + SECTION, + "while statement: don't evaluate statement is expression is false", + "pass", + result ); + +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/while-002.js b/source/spidermonkey-tests/ecma_2/Statements/while-002.js new file mode 100644 index 00000000..a3c315bf --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/while-002.js @@ -0,0 +1,86 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: while-002 + * ECMA Section: + * Description: while statement + * + * Verify that the while statement is not executed if the while expression is + * false + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "while-002"; +var VERSION = "ECMA_2"; +var TITLE = "while statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile( new DoWhileObject( + "while expression is null", + null, + "result = \"fail: should not have evaluated statements in while block;break" + ) ); + +DoWhile( new DoWhileObject( + "while expression is undefined", + void 0, + "result = \"fail: should not have evaluated statements in while block; break" + )); + +DoWhile( new DoWhileObject( + "while expression is 0", + 0, + "result = \"fail: should not have evaluated statements in while block; break;" + )); + +DoWhile( new DoWhileObject( + "while expression is eval(\"\")", + eval(""), + "result = \"fail: should not have evaluated statements in while block; break" + )); + +DoWhile( new DoWhileObject( + "while expression is NaN", + NaN, + "result = \"fail: should not have evaluated statements in while block; break" + )); + +test(); + +function DoWhileObject( d, e, s ) { + this.description = d; + this.whileExpression = e; + this.statements = s; +} + +function DoWhile( object ) { + result = "pass"; + + while ( expression = object.whileExpression ) { + eval( object.statements ); + } + + // verify that the while expression was evaluated + + new TestCase( + SECTION, + "verify that while expression was evaluated (should be "+ + object.whileExpression +")", + "pass", + (object.whileExpression == expression || + ( isNaN(object.whileExpression) && isNaN(expression) ) + ) ? "pass" : "fail" ); + + new TestCase( + SECTION, + object.description, + "pass", + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/while-003.js b/source/spidermonkey-tests/ecma_2/Statements/while-003.js new file mode 100644 index 00000000..b47d09a7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/while-003.js @@ -0,0 +1,87 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: while-003 + * ECMA Section: + * Description: while statement + * + * The while expression evaluates to true, Statement returns abrupt completion. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "while-003"; +var VERSION = "ECMA_2"; +var TITLE = "while statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile( new DoWhileObject( + "while expression is true", + true, + "result = \"pass\";" )); + +DoWhile( new DoWhileObject( + "while expression is 1", + 1, + "result = \"pass\";" )); + +DoWhile( new DoWhileObject( + "while expression is new Boolean(false)", + new Boolean(false), + "result = \"pass\";" )); + +DoWhile( new DoWhileObject( + "while expression is new Object()", + new Object(), + "result = \"pass\";" )); + +DoWhile( new DoWhileObject( + "while expression is \"hi\"", + "hi", + "result = \"pass\";" )); +/* + DoWhile( new DoWhileObject( + "while expression has a continue in it", + "true", + "if ( i == void 0 ) i = 0; result=\"pass\"; if ( ++i == 1 ) {continue;} else {break;} result=\"fail\";" + )); +*/ +test(); + +function DoWhileObject( d, e, s ) { + this.description = d; + this.whileExpression = e; + this.statements = s; +} + +function DoWhile( object ) { + result = "fail: statements in while block were not evaluated"; + + while ( expression = object.whileExpression ) { + eval( object.statements ); + break; + } + + // verify that the while expression was evaluated + + new TestCase( + SECTION, + "verify that while expression was evaluated (should be "+ + object.whileExpression +")", + "pass", + (object.whileExpression == expression || + ( isNaN(object.whileExpression) && isNaN(expression) ) + ) ? "pass" : "fail" ); + + new TestCase( + SECTION, + object.description, + "pass", + result ); +} diff --git a/source/spidermonkey-tests/ecma_2/Statements/while-004.js b/source/spidermonkey-tests/ecma_2/Statements/while-004.js new file mode 100644 index 00000000..393e680e --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/Statements/while-004.js @@ -0,0 +1,217 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: while-004 + * ECMA Section: + * Description: while statement + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "while-004"; +var VERSION = "ECMA_2"; +var TITLE = "while statement"; +var BUGNUMBER="316725"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +DoWhile_1(); +DoWhile_2(); +DoWhile_3(); +DoWhile_4(); +DoWhile_5(); + +test(); + +/** + * Break out of a while by calling return. + * + * Tests: 12.6.2 step 6. + */ +function dowhile() { + result = "pass"; + + while (true) { + return result; + result = "fail: hit code after return statement"; + break; + } +} + +function DoWhile_1() { + description = "return statement in a while block"; + + result = dowhile(); + + new TestCase( + SECTION, + "DoWhile_1" + description, + "pass", + result ); +} + +/** + * While with a labeled continue statement. Verify that statements + * after the continue statement are not evaluated. + * + * Tests: 12.6.2 step 8. + * + */ +function DoWhile_2() { + var description = "while with a labeled continue statement"; + var result1 = "pass"; + var result2 = "fail: did not execute code after loop, but inside label"; + var i = 0; + var j = 0; + +theloop: + while( i++ < 10 ) { + j++; + continue theloop; + result1 = "failed: hit code after continue statement"; + } + result2 = "pass"; + + new TestCase( + SECTION, + "DoWhile_2: " +description + " - code inside the loop, before the continue should be executed ("+j+")", + true, + j == 10 ); + + new TestCase( + SECTION, + "DoWhile_2: " +description +" - code after labeled continue should not be executed", + "pass", + result1 ); + + new TestCase( + SECTION, + "DoWhile_2: " +description +" - code after loop but inside label should be executed", + "pass", + result2 ); +} + +/** + * While with a labeled break. + * + */ +function DoWhile_3() { + var description = "while with a labeled break statement"; + var result1 = "pass"; + var result2 = "pass"; + var result3 = "fail: did not get to code after label"; + +woohoo: { + while( true ) { + break woohoo; + result1 = "fail: got to code after a break"; + } + result2 = "fail: got to code outside of loop but inside label"; + } + + result3 = "pass"; + + new TestCase( + SECTION, + "DoWhile_3: " +description +" - verify break out of loop", + "pass", + result1 ); + + + new TestCase( + SECTION, + "DoWhile_3: " +description +" - verify break out of label", + "pass", + result2 ); + + new TestCase( + SECTION, + "DoWhile_3: " +description + " - verify correct exit from label", + "pass", + result3 ); +} + + +/** + * Labled while with an unlabeled break + * + */ +function DoWhile_4() { + var description = "labeled while with an unlabeled break"; + var result1 = "pass"; + var result2 = "pass"; + var result3 = "fail: did not evaluate statement after label"; + +woohooboy: { + while( true ) { + break woohooboy; + result1 = "fail: got to code after the break"; + } + result2 = "fail: broke out of while, but not out of label"; + } + result3 = "pass"; + + new TestCase( + SECTION, + "DoWhile_4: " +description +" - verify break out of while loop", + "pass", + result1 ); + + new TestCase( + SECTION, + "DoWhile_4: " +description + " - verify break out of label", + "pass", + result2 ); + + new TestCase( + SECTION, + "DoWhile_4: " +description +" - verify that statements after label are evaluated", + "pass", + result3 ); +} + +/** + * in this case, should behave the same way as + * + * + */ +function DoWhile_5() { + var description = "while with a labeled continue statement"; + var result1 = "pass"; + var result2 = "fail: did not execute code after loop, but inside label"; + var i = 0; + var j = 0; + +theloop: { + j++; + while( i++ < 10 ) { + continue; + result1 = "failed: hit code after continue statement"; + } + result2 = "pass"; + } + + new TestCase( + SECTION, + "DoWhile_5: " +description + " - continue should not execute statements above the loop", + true, + ( j == 1 ) ); + + new TestCase( + SECTION, + "DoWhile_5: " +description +" - code after labeled continue should not be executed", + "pass", + result1 ); + + new TestCase( + SECTION, + "DoWhile_5: " +description +" - code after loop but inside label should be executed", + "pass", + result2 ); +} + diff --git a/source/spidermonkey-tests/ecma_2/String/browser.js b/source/spidermonkey-tests/ecma_2/String/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/String/match-001.js b/source/spidermonkey-tests/ecma_2/String/match-001.js new file mode 100644 index 00000000..ab6082a1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/String/match-001.js @@ -0,0 +1,106 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: String/match-001.js + * ECMA Section: 15.6.4.9 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ + +/* + * String.match( regexp ) + * + * If regexp is not an object of type RegExp, it is replaced with result + * of the expression new RegExp(regexp). Let string denote the result of + * converting the this value to a string. If regexp.global is false, + * return the result obtained by invoking RegExp.prototype.exec (see + * section 15.7.5.3) on regexp with string as parameter. + * + * Otherwise, set the regexp.lastIndex property to 0 and invoke + * RegExp.prototype.exec repeatedly until there is no match. If there is a + * match with an empty string (in other words, if the value of + * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1. + * The value returned is an array with the properties 0 through n-1 + * corresponding to the first element of the result of each matching + * invocation of RegExp.prototype.exec. + * + * Note that the match function is intentionally generic; it does not + * require that its this value be a string object. Therefore, it can be + * transferred to other kinds of objects for use as a method. + */ + +var SECTION = "String/match-001.js"; +var VERSION = "ECMA_2"; +var TITLE = "String.prototype.match( regexp )"; + +startTest(); + +// the regexp argument is not a RegExp object +// this is not a string object + +// cases in which the regexp global property is false + +AddRegExpCases( 3, "3", "1234567890", 1, 2, ["3"] ); + +// cases in which the regexp object global property is true + +AddGlobalRegExpCases( /34/g, "/34/g", "343443444", 3, ["34", "34", "34"] ); +AddGlobalRegExpCases( /\d{1}/g, "/d{1}/g", "123456abcde7890", 10, + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] ); + +AddGlobalRegExpCases( /\d{2}/g, "/d{2}/g", "123456abcde7890", 5, + ["12", "34", "56", "78", "90"] ); + +AddGlobalRegExpCases( /\D{2}/g, "/d{2}/g", "123456abcde7890", 2, + ["ab", "cd"] ); + +test(); + + +function AddRegExpCases( + regexp, str_regexp, string, length, index, matches_array ) { + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").length", + length, + string.match(regexp).length ); + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").index", + index, + string.match(regexp).index ); + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").input", + string, + string.match(regexp).input ); + + for ( var matches = 0; matches < matches_array.length; matches++ ) { + AddTestCase( + "( " + string + " ).match(" + str_regexp +")[" + matches +"]", + matches_array[matches], + string.match(regexp)[matches] ); + } +} + +function AddGlobalRegExpCases( + regexp, str_regexp, string, length, matches_array ) { + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").length", + length, + string.match(regexp).length ); + + for ( var matches = 0; matches < matches_array.length; matches++ ) { + AddTestCase( + "( " + string + " ).match(" + str_regexp +")[" + matches +"]", + matches_array[matches], + string.match(regexp)[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/String/match-002.js b/source/spidermonkey-tests/ecma_2/String/match-002.js new file mode 100644 index 00000000..21b83250 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/String/match-002.js @@ -0,0 +1,174 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: String/match-002.js + * ECMA Section: 15.6.4.9 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ + +/* + * String.match( regexp ) + * + * If regexp is not an object of type RegExp, it is replaced with result + * of the expression new RegExp(regexp). Let string denote the result of + * converting the this value to a string. If regexp.global is false, + * return the result obtained by invoking RegExp.prototype.exec (see + * section 15.7.5.3) on regexp with string as parameter. + * + * Otherwise, set the regexp.lastIndex property to 0 and invoke + * RegExp.prototype.exec repeatedly until there is no match. If there is a + * match with an empty string (in other words, if the value of + * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1. + * The value returned is an array with the properties 0 through n-1 + * corresponding to the first element of the result of each matching + * invocation of RegExp.prototype.exec. + * + * Note that the match function is intentionally generic; it does not + * require that its this value be a string object. Therefore, it can be + * transferred to other kinds of objects for use as a method. + * + * This file tests cases in which regexp.global is false. Therefore, + * results should behave as regexp.exec with string passed as a parameter. + * + */ + +var SECTION = "String/match-002.js"; +var VERSION = "ECMA_2"; +var TITLE = "String.prototype.match( regexp )"; + +startTest(); + +// the regexp argument is not a RegExp object +// this is not a string object + +AddRegExpCases( /([\d]{5})([-\ ]?[\d]{4})?$/, + "/([\d]{5})([-\ ]?[\d]{4})?$/", + "Boston, Mass. 02134", + 14, + ["02134", "02134", undefined]); + +AddGlobalRegExpCases( /([\d]{5})([-\ ]?[\d]{4})?$/g, + "/([\d]{5})([-\ ]?[\d]{4})?$/g", + "Boston, Mass. 02134", + ["02134"]); + +// set the value of lastIndex +re = /([\d]{5})([-\ ]?[\d]{4})?$/; +re.lastIndex = 0; + +s = "Boston, MA 02134"; + +AddRegExpCases( re, + "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex =0", + s, + s.lastIndexOf("0"), + ["02134", "02134", undefined]); + + +re.lastIndex = s.length; + +AddRegExpCases( re, + "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " + + s.length, + s, + s.lastIndexOf("0"), + ["02134", "02134", undefined] ); + +re.lastIndex = s.lastIndexOf("0"); + +AddRegExpCases( re, + "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " + + s.lastIndexOf("0"), + s, + s.lastIndexOf("0"), + ["02134", "02134", undefined]); + +re.lastIndex = s.lastIndexOf("0") + 1; + +AddRegExpCases( re, + "re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " + + s.lastIndexOf("0") +1, + s, + s.lastIndexOf("0"), + ["02134", "02134", undefined]); + +test(); + +function AddRegExpCases( + regexp, str_regexp, string, index, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(string) == null || matches_array == null ) { + AddTestCase( + string + ".match(" + regexp +")", + matches_array, + string.match(regexp) ); + + return; + } + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").length", + matches_array.length, + string.match(regexp).length ); + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").index", + index, + string.match(regexp).index ); + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").input", + string, + string.match(regexp).input ); + + var limit = matches_array.length > string.match(regexp).length ? + matches_array.length : + string.match(regexp).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + "( " + string + " ).match(" + str_regexp +")[" + matches +"]", + matches_array[matches], + string.match(regexp)[matches] ); + } +} + +function AddGlobalRegExpCases( + regexp, str_regexp, string, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(string) == null || matches_array == null ) { + AddTestCase( + regexp + ".exec(" + string +")", + matches_array, + regexp.exec(string) ); + + return; + } + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").length", + matches_array.length, + string.match(regexp).length ); + + var limit = matches_array.length > string.match(regexp).length ? + matches_array.length : + string.match(regexp).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + "( " + string + " ).match(" + str_regexp +")[" + matches +"]", + matches_array[matches], + string.match(regexp)[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/String/match-003.js b/source/spidermonkey-tests/ecma_2/String/match-003.js new file mode 100644 index 00000000..24453e62 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/String/match-003.js @@ -0,0 +1,132 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: String/match-003.js + * ECMA Section: 15.6.4.9 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ + +/* + * String.match( regexp ) + * + * If regexp is not an object of type RegExp, it is replaced with result + * of the expression new RegExp(regexp). Let string denote the result of + * converting the this value to a string. If regexp.global is false, + * return the result obtained by invoking RegExp.prototype.exec (see + * section 15.7.5.3) on regexp with string as parameter. + * + * Otherwise, set the regexp.lastIndex property to 0 and invoke + * RegExp.prototype.exec repeatedly until there is no match. If there is a + * match with an empty string (in other words, if the value of + * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1. + * The value returned is an array with the properties 0 through n-1 + * corresponding to the first element of the result of each matching + * invocation of RegExp.prototype.exec. + * + * Note that the match function is intentionally generic; it does not + * require that its this value be a string object. Therefore, it can be + * transferred to other kinds of objects for use as a method. + */ + +var SECTION = "String/match-003.js"; +var VERSION = "ECMA_2"; +var TITLE = "String.prototype.match( regexp )"; + +startTest(); + +// the regexp argument is not a RegExp object +// this is not a string object + + +// [if regexp.global is true] set the regexp.lastIndex property to 0 and +// invoke RegExp.prototype.exec repeatedly until there is no match. If +// there is a match with an empty string (in other words, if the value of +// regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1. +// The value returned is an array with the properties 0 through n-1 +// corresponding to the first element of the result of each matching invocation +// of RegExp.prototype.exec. + + +// set the value of lastIndex +re = /([\d]{5})([-\ ]?[\d]{4})?$/g; + + +s = "Boston, MA 02134"; + +AddGlobalRegExpCases( re, + "re = " + re, + s, + ["02134" ]); + +re.lastIndex = 0; + +AddGlobalRegExpCases( + re, + "re = " + re + "; re.lastIndex = 0 ", + s, + ["02134"]); + + +re.lastIndex = s.length; + +AddGlobalRegExpCases( + re, + "re = " + re + "; re.lastIndex = " + s.length, + s, + ["02134"] ); + +re.lastIndex = s.lastIndexOf("0"); + +AddGlobalRegExpCases( + re, + "re = "+ re +"; re.lastIndex = " + s.lastIndexOf("0"), + s, + ["02134"]); + +re.lastIndex = s.lastIndexOf("0") + 1; + +AddGlobalRegExpCases( + re, + "re = " +re+ "; re.lastIndex = " + (s.lastIndexOf("0") +1), + s, + ["02134"]); + +test(); + +function AddGlobalRegExpCases( + regexp, str_regexp, string, matches_array ) { + + // prevent a runtime error + + if ( string.match(regexp) == null || matches_array == null ) { + AddTestCase( + string + ".match(" + str_regexp +")", + matches_array, + string.match(regexp) ); + + return; + } + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").length", + matches_array.length, + string.match(regexp).length ); + + var limit = matches_array.length > string.match(regexp).length ? + matches_array.length : + string.match(regexp).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + "( " + string + " ).match(" + str_regexp +")[" + matches +"]", + matches_array[matches], + string.match(regexp)[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/String/match-004.js b/source/spidermonkey-tests/ecma_2/String/match-004.js new file mode 100644 index 00000000..7c17396a --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/String/match-004.js @@ -0,0 +1,173 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: String/match-004.js + * ECMA Section: 15.6.4.9 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ + +/* + * String.match( regexp ) + * + * If regexp is not an object of type RegExp, it is replaced with result + * of the expression new RegExp(regexp). Let string denote the result of + * converting the this value to a string. If regexp.global is false, + * return the result obtained by invoking RegExp.prototype.exec (see + * section 15.7.5.3) on regexp with string as parameter. + * + * Otherwise, set the regexp.lastIndex property to 0 and invoke + * RegExp.prototype.exec repeatedly until there is no match. If there is a + * match with an empty string (in other words, if the value of + * regexp.lastIndex is left unchanged) increment regexp.lastIndex by 1. + * The value returned is an array with the properties 0 through n-1 + * corresponding to the first element of the result of each matching + * invocation of RegExp.prototype.exec. + * + * Note that the match function is intentionally generic; it does not + * require that its this value be a string object. Therefore, it can be + * transferred to other kinds of objects for use as a method. + * + * + * The match function should be intentionally generic, and not require + * this to be a string. + * + */ + +var SECTION = "String/match-004.js"; +var VERSION = "ECMA_2"; +var TITLE = "String.prototype.match( regexp )"; + +var BUGNUMBER="http://scopus/bugsplat/show_bug.cgi?id=345818"; + +startTest(); + +// set the value of lastIndex +re = /0./; +s = 10203040506070809000; + +Number.prototype.match = String.prototype.match; + +AddRegExpCases( re, + "re = " + re , + s, + String(s), + 1, + ["02"]); + + +re.lastIndex = 0; +AddRegExpCases( re, + "re = " + re +" [lastIndex is " + re.lastIndex+"]", + s, + String(s), + 1, + ["02"]); +/* + +re.lastIndex = s.length; + +AddRegExpCases( re, +"re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " + +s.length, +s, +s.lastIndexOf("0"), +null ); + +re.lastIndex = s.lastIndexOf("0"); + +AddRegExpCases( re, +"re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " + +s.lastIndexOf("0"), +s, +s.lastIndexOf("0"), +["02134"]); + +re.lastIndex = s.lastIndexOf("0") + 1; + +AddRegExpCases( re, +"re = /([\d]{5})([-\ ]?[\d]{4})?$/; re.lastIndex = " + +s.lastIndexOf("0") +1, +s, +0, +null); +*/ +test(); + +function AddRegExpCases( + regexp, str_regexp, string, str_string, index, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(string) == null || matches_array == null ) { + AddTestCase( + string + ".match(" + regexp +")", + matches_array, + string.match(regexp) ); + + return; + } + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").length", + matches_array.length, + string.match(regexp).length ); + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").index", + index, + string.match(regexp).index ); + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").input", + str_string, + string.match(regexp).input ); + + var limit = matches_array.length > string.match(regexp).length ? + matches_array.length : + string.match(regexp).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + "( " + string + " ).match(" + str_regexp +")[" + matches +"]", + matches_array[matches], + string.match(regexp)[matches] ); + } +} + +function AddGlobalRegExpCases( + regexp, str_regexp, string, matches_array ) { + + // prevent a runtime error + + if ( regexp.exec(string) == null || matches_array == null ) { + AddTestCase( + regexp + ".exec(" + string +")", + matches_array, + regexp.exec(string) ); + + return; + } + + AddTestCase( + "( " + string + " ).match(" + str_regexp +").length", + matches_array.length, + string.match(regexp).length ); + + var limit = matches_array.length > string.match(regexp).length ? + matches_array.length : + string.match(regexp).length; + + for ( var matches = 0; matches < limit; matches++ ) { + AddTestCase( + "( " + string + " ).match(" + str_regexp +")[" + matches +"]", + matches_array[matches], + string.match(regexp)[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/String/shell.js b/source/spidermonkey-tests/ecma_2/String/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/String/split-001.js b/source/spidermonkey-tests/ecma_2/String/split-001.js new file mode 100644 index 00000000..f8e2c762 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/String/split-001.js @@ -0,0 +1,112 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: String/split-001.js + * ECMA Section: 15.6.4.9 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ + +/* + * Since regular expressions have been part of JavaScript since 1.2, there + * are already tests for regular expressions in the js1_2/regexp folder. + * + * These new tests try to supplement the existing tests, and verify that + * our implementation of RegExp conforms to the ECMA specification, but + * does not try to be as exhaustive as in previous tests. + * + * The [,limit] argument to String.split is new, and not covered in any + * existing tests. + * + * String.split cases are covered in ecma/String/15.5.4.8-*.js. + * String.split where separator is a RegExp are in + * js1_2/regexp/string_split.js + * + */ + +var SECTION = "ecma_2/String/split-001.js"; +var VERSION = "ECMA_2"; +var TITLE = "String.prototype.split( regexp, [,limit] )"; + +startTest(); + +// the separator is not supplied +// separator is undefined +// separator is an empty string + +AddSplitCases( "splitme", "", "''", ["s", "p", "l", "i", "t", "m", "e"] ); +AddSplitCases( "splitme", new RegExp(), "new RegExp()", ["s", "p", "l", "i", "t", "m", "e"] ); + +// separartor is a regexp +// separator regexp value global setting is set +// string is an empty string +// if separator is an empty string, split each by character + +// this is not a String object + +// limit is not a number +// limit is undefined +// limit is larger than 2^32-1 +// limit is a negative number + +test(); + +function AddSplitCases( string, separator, str_sep, split_array ) { + + // verify that the result of split is an object of type Array + AddTestCase( + "( " + string + " ).split(" + str_sep +").constructor == Array", + true, + string.split(separator).constructor == Array ); + + // check the number of items in the array + AddTestCase( + "( " + string + " ).split(" + str_sep +").length", + split_array.length, + string.split(separator).length ); + + // check the value of each array item + var limit = (split_array.length > string.split(separator).length ) + ? split_array.length : string.split(separator).length; + + for ( var matches = 0; matches < split_array.length; matches++ ) { + AddTestCase( + "( " + string + " ).split(" + str_sep +")[" + matches +"]", + split_array[matches], + string.split( separator )[matches] ); + } +} + +function AddLimitedSplitCases( + string, separator, str_sep, limit, str_limit, split_array ) { + + // verify that the result of split is an object of type Array + + AddTestCase( + "( " + string + " ).split(" + str_sep +", " + str_limit + + " ).constructor == Array", + true, + string.split(separator, limit).constructor == Array ); + + // check the length of the array + + AddTestCase( + "( " + string + " ).split(" + str_sep +", " + str_limit + " ).length", + length, + string.split(separator).length ); + + // check the value of each array item + + for ( var matches = 0; matches < split_array.length; matches++ ) { + AddTestCase( + "( " + string + " ).split(" + str_sep +", " + str_limit + " )[" + matches +"]", + split_array[matches], + string.split( separator )[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/String/split-002.js b/source/spidermonkey-tests/ecma_2/String/split-002.js new file mode 100644 index 00000000..8f14e4fa --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/String/split-002.js @@ -0,0 +1,270 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: String/split-002.js + * ECMA Section: 15.6.4.9 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ + +/* + * Since regular expressions have been part of JavaScript since 1.2, there + * are already tests for regular expressions in the js1_2/regexp folder. + * + * These new tests try to supplement the existing tests, and verify that + * our implementation of RegExp conforms to the ECMA specification, but + * does not try to be as exhaustive as in previous tests. + * + * The [,limit] argument to String.split is new, and not covered in any + * existing tests. + * + * String.split cases are covered in ecma/String/15.5.4.8-*.js. + * String.split where separator is a RegExp are in + * js1_2/regexp/string_split.js + * + */ + +var SECTION = "ecma_2/String/split-002.js"; +var VERSION = "ECMA_2"; +var TITLE = "String.prototype.split( regexp, [,limit] )"; + +startTest(); + +// the separator is not supplied +// separator is undefined +// separator is an empty string + +// AddSplitCases( "splitme", "", "''", ["s", "p", "l", "i", "t", "m", "e"] ); +// AddSplitCases( "splitme", new RegExp(), "new RegExp()", ["s", "p", "l", "i", "t", "m", "e"] ); + +// separator is an empty regexp +// separator is not supplied + +CompareSplit( "hello", "ll" ); + +CompareSplit( "hello", "l" ); +CompareSplit( "hello", "x" ); +CompareSplit( "hello", "h" ); +CompareSplit( "hello", "o" ); +CompareSplit( "hello", "hello" ); +CompareSplit( "hello", undefined ); + +CompareSplit( "hello", ""); +CompareSplit( "hello", "hellothere" ); + +CompareSplit( new String("hello" ) ); + + +Number.prototype.split = String.prototype.split; + +CompareSplit( new Number(100111122133144155), 1 ); +CompareSplitWithLimit(new Number(100111122133144155), 1, 1 ); + +CompareSplitWithLimit(new Number(100111122133144155), 1, 2 ); +CompareSplitWithLimit(new Number(100111122133144155), 1, 0 ); +CompareSplitWithLimit(new Number(100111122133144155), 1, 100 ); +CompareSplitWithLimit(new Number(100111122133144155), 1, void 0 ); +CompareSplitWithLimit(new Number(100111122133144155), 1, Math.pow(2,32)-1 ); +CompareSplitWithLimit(new Number(100111122133144155), 1, "boo" ); +CompareSplitWithLimit(new Number(100111122133144155), 1, -(Math.pow(2,32)-1) ); +CompareSplitWithLimit( "hello", "l", NaN ); +CompareSplitWithLimit( "hello", "l", 0 ); +CompareSplitWithLimit( "hello", "l", 1 ); +CompareSplitWithLimit( "hello", "l", 2 ); +CompareSplitWithLimit( "hello", "l", 3 ); +CompareSplitWithLimit( "hello", "l", 4 ); + + +/* + CompareSplitWithLimit( "hello", "ll", 0 ); + CompareSplitWithLimit( "hello", "ll", 1 ); + CompareSplitWithLimit( "hello", "ll", 2 ); + CompareSplit( "", " " ); + CompareSplit( "" ); +*/ + +// separartor is a regexp +// separator regexp value global setting is set +// string is an empty string +// if separator is an empty string, split each by character + +// this is not a String object + +// limit is not a number +// limit is undefined +// limit is larger than 2^32-1 +// limit is a negative number + +test(); + +function CompareSplit( string, separator ) { + split_1 = string.split( separator ); + split_2 = string_split( string, separator ); + + AddTestCase( + "( " + string +".split(" + separator + ") ).length" , + split_2.length, + split_1.length ); + + var limit = split_1.length > split_2.length ? + split_1.length : split_2.length; + + for ( var split_item = 0; split_item < limit; split_item++ ) { + AddTestCase( + string + ".split(" + separator + ")["+split_item+"]", + split_2[split_item], + split_1[split_item] ); + } +} + +function CompareSplitWithLimit( string, separator, splitlimit ) { + split_1 = string.split( separator, splitlimit ); + split_2 = string_split( string, separator, splitlimit ); + + AddTestCase( + "( " + string +".split(" + separator + ", " + splitlimit+") ).length" , + split_2.length, + split_1.length ); + + var limit = split_1.length > split_2.length ? + split_1.length : split_2.length; + + for ( var split_item = 0; split_item < limit; split_item++ ) { + AddTestCase( + string + ".split(" + separator + ", " + splitlimit+")["+split_item+"]", + split_2[split_item], + split_1[split_item] ); + } +} + +function string_split ( __this, separator, limit ) { + var S = String(__this ); // 1 + + var A = new Array(); // 2 + + if ( limit == undefined ) { // 3 + lim = Math.pow(2, 31 ) -1; + } else { + lim = ToUint32( limit ); + } + + var s = S.length; // 4 + var p = 0; // 5 + + if ( separator == undefined ) { // 8 + A[0] = S; + return A; + } + + if ( separator.constructor == RegExp ) // 6 + R = separator; + else + R = separator.toString(); + + if (lim == 0) return A; // 7 + + if ( separator == undefined ) { // 8 + A[0] = S; + return A; + } + + if (s == 0) { // 9 + z = SplitMatch(R, S, 0); + if (z != false) return A; + A[0] = S; + return A; + } + + var q = p; // 10 +loop: + while (true ) { + + if ( q == s ) break; // 11 + + z = SplitMatch(R, S, q); // 12 + +//print("Returned ", z); + + if (z != false) { // 13 + e = z.endIndex; // 14 + cap = z.captures; // 14 + if (e != p) { // 15 +//print("S = ", S, ", p = ", p, ", q = ", q); + T = S.slice(p, q); // 16 +//print("T = ", T); + A[A.length] = T; // 17 + if (A.length == lim) return A; // 18 + p = e; // 19 + i = 0; // 20 + while (true) { // 25 + if (i == cap.length) { // 21 + q = p; // 10 + continue loop; + } + i = i + 1; // 22 + A[A.length] = cap[i] // 23 + if (A.length == lim) return A; // 24 + } + } + } + + q = q + 1; // 26 + } + + T = S.slice(p, q); + A[A.length] = T; + return A; +} + +function SplitMatch(R, S, q) +{ + if (R.constructor == RegExp) { // 1 + var reResult = R.match(S, q); // 8 + if (reResult == undefined) + return false; + else { + a = new Array(reResult.length - 1); + for (var i = 1; i < reResult.length; i++) + a[a.length] = reResult[i]; + return { endIndex : reResult.index + reResult[0].length, captures : cap }; + } + } + else { + var r = R.length; // 2 + s = S.length; // 3 + if ((q + r) > s) return false; // 4 + for (var i = 0; i < r; i++) { +//print("S.charAt(", q + i, ") = ", S.charAt(q + i), ", R.charAt(", i, ") = ", R.charAt(i)); + if (S.charAt(q + i) != R.charAt(i)) // 5 + return false; + } + cap = new Array(); // 6 + return { endIndex : q + r, captures : cap }; // 7 + } +} + +function ToUint32( n ) { + n = Number( n ); + var sign = ( n < 0 ) ? -1 : 1; + + if ( Math.abs( n ) == 0 + || Math.abs( n ) == Number.POSITIVE_INFINITY + || n != n) { + return 0; + } + n = sign * Math.floor( Math.abs(n) ) + + n = n % Math.pow(2,32); + + if ( n < 0 ){ + n += Math.pow(2,32); + } + + return ( n ); +} diff --git a/source/spidermonkey-tests/ecma_2/String/split-003.js b/source/spidermonkey-tests/ecma_2/String/split-003.js new file mode 100644 index 00000000..e887dbe0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/String/split-003.js @@ -0,0 +1,123 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: String/split-003.js + * ECMA Section: 15.6.4.9 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ + +/* + * Since regular expressions have been part of JavaScript since 1.2, there + * are already tests for regular expressions in the js1_2/regexp folder. + * + * These new tests try to supplement the existing tests, and verify that + * our implementation of RegExp conforms to the ECMA specification, but + * does not try to be as exhaustive as in previous tests. + * + * The [,limit] argument to String.split is new, and not covered in any + * existing tests. + * + * String.split cases are covered in ecma/String/15.5.4.8-*.js. + * String.split where separator is a RegExp are in + * js1_2/regexp/string_split.js + * + */ + +var SECTION = "ecma_2/String/split-003.js"; +var VERSION = "ECMA_2"; +var TITLE = "String.prototype.split( regexp, [,limit] )"; + +startTest(); + +// separator is a regexp +// separator regexp value global setting is set +// string is an empty string +// if separator is an empty string, split each by character + + +AddSplitCases( "hello", new RegExp, "new RegExp", ["h","e","l","l","o"] ); + +AddSplitCases( "hello", /l/, "/l/", ["he","","o"] ); +AddLimitedSplitCases( "hello", /l/, "/l/", 0, [] ); +AddLimitedSplitCases( "hello", /l/, "/l/", 1, ["he"] ); +AddLimitedSplitCases( "hello", /l/, "/l/", 2, ["he",""] ); +AddLimitedSplitCases( "hello", /l/, "/l/", 3, ["he","","o"] ); +AddLimitedSplitCases( "hello", /l/, "/l/", 4, ["he","","o"] ); +AddLimitedSplitCases( "hello", /l/, "/l/", void 0, ["he","","o"] ); +AddLimitedSplitCases( "hello", /l/, "/l/", "hi", [] ); +AddLimitedSplitCases( "hello", /l/, "/l/", undefined, ["he","","o"] ); + +AddSplitCases( "hello", new RegExp, "new RegExp", ["h","e","l","l","o"] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 0, [] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 1, ["h"] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 2, ["h","e"] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 3, ["h","e","l"] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", 4, ["h","e","l","l"] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", void 0, ["h","e","l","l","o"] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", "hi", [] ); +AddLimitedSplitCases( "hello", new RegExp, "new RegExp", undefined, ["h","e","l","l","o"] ); + +test(); + +function AddSplitCases( string, separator, str_sep, split_array ) { + // verify that the result of split is an object of type Array + AddTestCase( + "( " + string + " ).split(" + str_sep +").constructor == Array", + true, + string.split(separator).constructor == Array ); + + // check the number of items in the array + AddTestCase( + "( " + string + " ).split(" + str_sep +").length", + split_array.length, + string.split(separator).length ); + + // check the value of each array item + var limit = (split_array.length > string.split(separator).length ) + ? split_array.length : string.split(separator).length; + + for ( var matches = 0; matches < split_array.length; matches++ ) { + AddTestCase( + "( " + string + " ).split(" + str_sep +")[" + matches +"]", + split_array[matches], + string.split( separator )[matches] ); + } +} + +function AddLimitedSplitCases( + string, separator, str_sep, limit, split_array ) { + + // verify that the result of split is an object of type Array + + AddTestCase( + "( " + string + " ).split(" + str_sep +", " + limit + + " ).constructor == Array", + true, + string.split(separator, limit).constructor == Array ); + + // check the length of the array + + AddTestCase( + "( " + string + " ).split(" + str_sep +", " + limit + " ).length", + split_array.length, + string.split(separator, limit).length ); + + // check the value of each array item + + var slimit = (split_array.length > string.split(separator).length ) + ? split_array.length : string.split(separator, limit).length; + + for ( var matches = 0; matches < slimit; matches++ ) { + AddTestCase( + "( " + string + " ).split(" + str_sep +", " + limit + " )[" + matches +"]", + split_array[matches], + string.split( separator, limit )[matches] ); + } +} diff --git a/source/spidermonkey-tests/ecma_2/browser.js b/source/spidermonkey-tests/ecma_2/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/extensions/browser.js b/source/spidermonkey-tests/ecma_2/extensions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/extensions/constructor-001.js b/source/spidermonkey-tests/ecma_2/extensions/constructor-001.js new file mode 100644 index 00000000..5c546600 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/constructor-001.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/constructor-001.js + * ECMA Section: 15.7.3.3 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/constructor-001"; +var VERSION = "ECMA_2"; +var TITLE = "new RegExp()"; + +startTest(); + +/* + * for each test case, verify: + * - verify that [[Class]] property is RegExp + * - prototype property should be set to RegExp.prototype + * - source is set to the empty string + * - global property is set to false + * - ignoreCase property is set to false + * - multiline property is set to false + * - lastIndex property is set to 0 + */ + +RegExp.prototype.getClassProperty = Object.prototype.toString; +var re = new RegExp(); + +AddTestCase( + "new RegExp().__proto__", + RegExp.prototype, + re.__proto__ + ); + +test() diff --git a/source/spidermonkey-tests/ecma_2/extensions/function-001.js b/source/spidermonkey-tests/ecma_2/extensions/function-001.js new file mode 100644 index 00000000..df45e048 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/function-001.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: RegExp/function-001.js + * ECMA Section: 15.7.2.1 + * Description: Based on ECMA 2 Draft 7 February 1999 + * + * Author: christine@netscape.com + * Date: 19 February 1999 + */ +var SECTION = "RegExp/function-001"; +var VERSION = "ECMA_2"; +var TITLE = "RegExp( pattern, flags )"; + +startTest(); + +/* + * for each test case, verify: + * - verify that [[Class]] property is RegExp + * - prototype property should be set to RegExp.prototype + * - source is set to the empty string + * - global property is set to false + * - ignoreCase property is set to false + * - multiline property is set to false + * - lastIndex property is set to 0 + */ + +RegExp.prototype.getClassProperty = Object.prototype.toString; +var re = new RegExp(); + +AddTestCase( + "new RegExp().__proto__", + RegExp.prototype, + re.__proto__ + ); + +test() diff --git a/source/spidermonkey-tests/ecma_2/extensions/instanceof-001.js b/source/spidermonkey-tests/ecma_2/extensions/instanceof-001.js new file mode 100644 index 00000000..69aab1bf --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/instanceof-001.js @@ -0,0 +1,111 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: instanceof-001.js + * ECMA Section: 11.8.6 + * Description: + * + * RelationalExpression instanceof Identifier + * + * Author: christine@netscape.com + * Date: 2 September 1998 + */ +var SECTION = "instanceof-001"; +var VERSION = "ECMA_2"; +var TITLE = "instanceof" + + startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object_1, object_2, expect ) { + result = object_1 instanceof object_2; + + new TestCase( + SECTION, + "(" + object_1 + ") instanceof " + object_2, + expect, + result ); +} + +function Gen3(value) { + this.value = value; + this.generation = 3; + this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" ); +} +Gen3.name = 3; +Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\""); + +function Gen2(value) { + this.value = value; + this.generation = 2; +} +Gen2.name = 2; +Gen2.prototype = new Gen3(); + +function Gen1(value) { + this.value = value; + this.generation = 1; +} +Gen1.name = 1; +Gen1.prototype = new Gen2(); + +function Gen0(value) { + this.value = value; + this.generation = 0; +} +Gen0.name = 0; +Gen0.prototype = new Gen1(); + + +function GenA(value) { + this.value = value; + this.generation = "A"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); + +} +GenA.prototype = new Gen0(); +GenA.name = "A"; + +function GenB(value) { + this.value = value; + this.generation = "B"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); +} +GenB.name = "B" + GenB.prototype = void 0; + +// RelationalExpression is not an object. + +InstanceOf( true, Boolean, false ); +InstanceOf( new Boolean(false), Boolean, true ); + +// __proto__ of RelationalExpression is null. should return false +genA = new GenA(); +genA.__proto__ = null; + +InstanceOf( genA, GenA, false ); + +// RelationalExpression.__proto__ == (but not ===) Identifier.prototype + +InstanceOf( new Gen2(), Gen0, false ); +InstanceOf( new Gen2(), Gen1, false ); +InstanceOf( new Gen2(), Gen2, true ); +InstanceOf( new Gen2(), Gen3, true ); + +// RelationalExpression.__proto__.__proto__ === Identifier.prototype +InstanceOf( new Gen0(), Gen0, true ); +InstanceOf( new Gen0(), Gen1, true ); +InstanceOf( new Gen0(), Gen2, true ); +InstanceOf( new Gen0(), Gen3, true ); + +InstanceOf( new Gen0(), Object, true ); +InstanceOf( new Gen0(), Function, false ); + +InstanceOf( Gen0, Function, true ); +InstanceOf( Gen0, Object, true ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/extensions/instanceof-002.js b/source/spidermonkey-tests/ecma_2/extensions/instanceof-002.js new file mode 100644 index 00000000..65708f12 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/instanceof-002.js @@ -0,0 +1,127 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: instanceof-002.js + Section: + Description: Determining Instance Relationships + + This test is the same as js1_3/inherit/proto-002, except that it uses + the builtin instanceof operator rather than a user-defined function + called InstanceOf. + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +// onerror = err; + +var SECTION = "instanceof-002"; +var VERSION = "ECMA_2"; +var TITLE = "Determining Instance Relationships"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object, constructor ) { + while ( object != null ) { + if ( object == constructor.prototype ) { + return true; + } + object = object.__proto__; + } + return false; +} + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} + +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer ( name, projs, machine ) { + this.base = WorkerBee; + this.base( name, "engineering", projs ) + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + +var pat = new Engineer(); + +new TestCase( SECTION, + "pat.__proto__ == Engineer.prototype", + true, + pat.__proto__ == Engineer.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__ == WorkerBee.prototype", + true, + pat.__proto__.__proto__ == WorkerBee.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__.__proto__ == Employee.prototype", + true, + pat.__proto__.__proto__.__proto__ == Employee.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype", + true, + pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null", + true, + pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null ); + +new TestCase( SECTION, + "pat instanceof Engineer", + true, + pat instanceof Engineer ); + +new TestCase( SECTION, + "pat instanceof WorkerBee )", + true, + pat instanceof WorkerBee ); + +new TestCase( SECTION, + "pat instanceof Employee )", + true, + pat instanceof Employee ); + +new TestCase( SECTION, + "pat instanceof Object )", + true, + pat instanceof Object ); + +new TestCase( SECTION, + "pat instanceof SalesPerson )", + false, + pat instanceof SalesPerson ); +test(); diff --git a/source/spidermonkey-tests/ecma_2/extensions/instanceof-003-n.js b/source/spidermonkey-tests/ecma_2/extensions/instanceof-003-n.js new file mode 100644 index 00000000..1b3937ac --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/instanceof-003-n.js @@ -0,0 +1,88 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: instanceof-001.js + * ECMA Section: 11.8.6 + * Description: + * + * RelationalExpression instanceof Identifier + * + * Author: christine@netscape.com + * Date: 2 September 1998 + */ +var SECTION = "instanceof-003-n"; +var VERSION = "ECMA_2"; +var TITLE = "instanceof" + + startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object_1, object_2, expect ) { + + result = object_1 instanceof object_2; + + new TestCase( + SECTION, + "(" + object_1 + ") instanceof " + object_2, + expect, + result ); +} + +function Gen3(value) { + this.value = value; + this.generation = 3; + this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" ); +} +Gen3.name = 3; +Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\""); + +function Gen2(value) { + this.value = value; + this.generation = 2; +} +Gen2.name = 2; +Gen2.prototype = new Gen3(); + +function Gen1(value) { + this.value = value; + this.generation = 1; +} +Gen1.name = 1; +Gen1.prototype = new Gen2(); + +function Gen0(value) { + this.value = value; + this.generation = 0; +} +Gen0.name = 0; +Gen0.prototype = new Gen1(); + + +function GenA(value) { + this.value = value; + this.generation = "A"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); + +} +GenA.prototype = new Gen0(); +GenA.name = "A"; + +function GenB(value) { + this.value = value; + this.generation = "B"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); +} +GenB.name = "B" + GenB.prototype = void 0; + +// Identifier is not a function +DESCRIPTION = "Identifier is not a function"; +EXPECTED = "error"; + +InstanceOf( true, true, "error" ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/extensions/instanceof-004-n.js b/source/spidermonkey-tests/ecma_2/extensions/instanceof-004-n.js new file mode 100644 index 00000000..18de1c8d --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/instanceof-004-n.js @@ -0,0 +1,88 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: instanceof-001.js + * ECMA Section: 11.8.6 + * Description: + * + * RelationalExpression instanceof Identifier + * + * Author: christine@netscape.com + * Date: 2 September 1998 + */ +var SECTION = "instanceof-004-n"; +var VERSION = "ECMA_2"; +var TITLE = "instanceof" + + startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object_1, object_2, expect ) { + result = object_1 instanceof object_2; + + new TestCase( + SECTION, + "(" + object_1 + ") instanceof " + object_2, + expect, + result ); +} + +function Gen3(value) { + this.value = value; + this.generation = 3; + this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" ); +} +Gen3.name = 3; +Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\""); + +function Gen2(value) { + this.value = value; + this.generation = 2; +} +Gen2.name = 2; +Gen2.prototype = new Gen3(); + +function Gen1(value) { + this.value = value; + this.generation = 1; +} +Gen1.name = 1; +Gen1.prototype = new Gen2(); + +function Gen0(value) { + this.value = value; + this.generation = 0; +} +Gen0.name = 0; +Gen0.prototype = new Gen1(); + + +function GenA(value) { + this.value = value; + this.generation = "A"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); + +} +GenA.prototype = new Gen0(); +GenA.name = "A"; + +function GenB(value) { + this.value = value; + this.generation = "B"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); +} +GenB.name = "B" + GenB.prototype = void 0; + +// Identifier is not a function + +DESCRIPTION = "Identifier is not a function"; +EXPECTED = "error"; + +InstanceOf( new Boolean(true), false, "error" ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/extensions/instanceof-005-n.js b/source/spidermonkey-tests/ecma_2/extensions/instanceof-005-n.js new file mode 100644 index 00000000..8f02162c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/instanceof-005-n.js @@ -0,0 +1,89 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: instanceof-001.js + * ECMA Section: 11.8.6 + * Description: + * + * RelationalExpression instanceof Identifier + * + * Author: christine@netscape.com + * Date: 2 September 1998 + */ +var SECTION = "instanceof-005-n"; +var VERSION = "ECMA_2"; +var TITLE = "instanceof" + + startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object_1, object_2, expect ) { + result = object_1 instanceof object_2; + + new TestCase( + SECTION, + "(" + object_1 + ") instanceof " + object_2, + expect, + result ); +} + +function Gen3(value) { + this.value = value; + this.generation = 3; + this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" ); +} +Gen3.name = 3; +Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\""); + +function Gen2(value) { + this.value = value; + this.generation = 2; +} +Gen2.name = 2; +Gen2.prototype = new Gen3(); + +function Gen1(value) { + this.value = value; + this.generation = 1; +} +Gen1.name = 1; +Gen1.prototype = new Gen2(); + +function Gen0(value) { + this.value = value; + this.generation = 0; +} +Gen0.name = 0; +Gen0.prototype = new Gen1(); + + +function GenA(value) { + this.value = value; + this.generation = "A"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); + +} +GenA.prototype = new Gen0(); +GenA.name = "A"; + +function GenB(value) { + this.value = value; + this.generation = "B"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); +} +GenB.name = "B" + GenB.prototype = void 0; + + +// Identifier is a function, prototype of Identifier is not an object + +DESCRIPTION = "Identifier is a function, prototype of Identifier is not an object"; +EXPECTED = "error"; + +InstanceOf( new GenB(), GenB, "error" ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/extensions/instanceof-006.js b/source/spidermonkey-tests/ecma_2/extensions/instanceof-006.js new file mode 100644 index 00000000..9f18c4e1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/extensions/instanceof-006.js @@ -0,0 +1,86 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: instanceof-001.js + * ECMA Section: 11.8.6 + * Description: + * + * RelationalExpression instanceof Identifier + * + * Author: christine@netscape.com + * Date: 2 September 1998 + */ +var SECTION = "instanceof-001"; +var VERSION = "ECMA_2"; +var TITLE = "instanceof" + + startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object_1, object_2, expect ) { + result = object_1 instanceof object_2; + + new TestCase( + SECTION, + "(" + object_1 + ") instanceof " + object_2, + expect, + result ); +} + +function Gen3(value) { + this.value = value; + this.generation = 3; + this.toString = new Function ( "return \"(Gen\"+this.generation+\" instance)\"" ); +} +Gen3.name = 3; +Gen3.__proto__.toString = new Function( "return \"(\"+this.name+\" object)\""); + +function Gen2(value) { + this.value = value; + this.generation = 2; +} +Gen2.name = 2; +Gen2.prototype = new Gen3(); + +function Gen1(value) { + this.value = value; + this.generation = 1; +} +Gen1.name = 1; +Gen1.prototype = new Gen2(); + +function Gen0(value) { + this.value = value; + this.generation = 0; +} +Gen0.name = 0; +Gen0.prototype = new Gen1(); + + +function GenA(value) { + this.value = value; + this.generation = "A"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); + +} +GenA.prototype = new Gen0(); +GenA.name = "A"; + +function GenB(value) { + this.value = value; + this.generation = "B"; + this.toString = new Function ( "return \"(instance of Gen\"+this.generation+\")\"" ); +} +GenB.name = "B" + GenB.prototype = void 0; + +// RelationalExpression is not an object. + +// InstanceOf( true, Boolean, false ); +InstanceOf( new Boolean(false), Boolean, true ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/extensions/shell.js b/source/spidermonkey-tests/ecma_2/extensions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/instanceof/browser.js b/source/spidermonkey-tests/ecma_2/instanceof/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/instanceof/instanceof-001.js b/source/spidermonkey-tests/ecma_2/instanceof/instanceof-001.js new file mode 100644 index 00000000..9bdc7bfe --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/instanceof/instanceof-001.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: instanceof-1.js + ECMA Section: + Description: instanceof operator + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = ""; +var VERSION = "ECMA_2"; +var TITLE = "instanceof operator"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var b = new Boolean(); + +new TestCase( SECTION, + "var b = new Boolean(); b instanceof Boolean", + true, + b instanceof Boolean ); + +new TestCase( SECTION, + "b instanceof Object", + true, + b instanceof Object ); + +test(); diff --git a/source/spidermonkey-tests/ecma_2/instanceof/instanceof-002.js b/source/spidermonkey-tests/ecma_2/instanceof/instanceof-002.js new file mode 100644 index 00000000..6b2bb7f4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/instanceof/instanceof-002.js @@ -0,0 +1,51 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: + ECMA Section: + Description: Call Objects + + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = ""; +var VERSION = "ECMA_2"; +var TITLE = "The Call Constructor"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var b = new Boolean(); + +new TestCase( SECTION, + "var b = new Boolean(); b instanceof Boolean", + true, + b instanceof Boolean ); + +new TestCase( SECTION, + "b instanceof Object", + true, + b instanceof Object ); + +new TestCase( SECTION, + "b instanceof Array", + false, + b instanceof Array ); + +new TestCase( SECTION, + "true instanceof Boolean", + false, + true instanceof Boolean ); + +new TestCase( SECTION, + "Boolean instanceof Object", + true, + Boolean instanceof Object ); +test(); + diff --git a/source/spidermonkey-tests/ecma_2/instanceof/instanceof-003.js b/source/spidermonkey-tests/ecma_2/instanceof/instanceof-003.js new file mode 100644 index 00000000..1021914e --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/instanceof/instanceof-003.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: instanceof-003.js + ECMA Section: + Description: http://bugzilla.mozilla.org/show_bug.cgi?id=7635 + + js> function Foo() {} + js> theproto = {}; + [object Object] + js> Foo.prototype = theproto + [object Object] + js> theproto instanceof Foo + true + + I think this should be 'false' + + + Author: christine@netscape.com + Date: 12 november 1997 + + Modified to conform to ECMA3 + https://bugzilla.mozilla.org/show_bug.cgi?id=281606 +*/ +var SECTION = "instanceof-003"; +var VERSION = "ECMA_2"; +var TITLE = "instanceof operator"; +var BUGNUMBER ="7635"; + +startTest(); + +function Foo() {}; +theproto = {}; +Foo.prototype = theproto; + +AddTestCase( + "function Foo() = {}; theproto = {}; Foo.prototype = theproto; " + + "theproto instanceof Foo", + false, + theproto instanceof Foo ); + + +var o = {}; + +// https://bugzilla.mozilla.org/show_bug.cgi?id=281606 +try +{ + AddTestCase( + "o = {}; o instanceof o", + "error", + o instanceof o ); +} +catch(e) +{ + AddTestCase( + "o = {}; o instanceof o", + "error", + "error" ); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_2/instanceof/regress-7635.js b/source/spidermonkey-tests/ecma_2/instanceof/regress-7635.js new file mode 100644 index 00000000..7ea94e03 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/instanceof/regress-7635.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: regress-7635.js + * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=7635 + * Description: instanceof tweaks + * Author: + */ + +var SECTION = "instanceof"; // provide a document reference (ie, ECMA section) +var VERSION = "ECMA_2"; // Version of JavaScript or ECMA +var TITLE = "Regression test for Bugzilla #7635"; // Provide ECMA section title or a description +var BUGNUMBER = "7635"; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + +/* + * Calls to AddTestCase here. AddTestCase is a function that is defined + * in shell.js and takes three arguments: + * - a string representation of what is being tested + * - the expected result + * - the actual result + * + * For example, a test might look like this: + * + * var zip = /[\d]{5}$/; + * + * AddTestCase( + * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test + * "02134", // expected result + * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result + * + */ + +function Foo() {} +theproto = {}; +Foo.prototype = theproto + theproto instanceof Foo + + + AddTestCase( "function Foo() {}; theproto = {}; Foo.prototype = theproto; theproto instanceof Foo", + false, + theproto instanceof Foo ); + +var f = new Function(); + +AddTestCase( "var f = new Function(); f instanceof f", false, f instanceof f ); + + +test(); // leave this alone. this executes the test cases and +// displays results. diff --git a/source/spidermonkey-tests/ecma_2/instanceof/shell.js b/source/spidermonkey-tests/ecma_2/instanceof/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_2/jsref.js b/source/spidermonkey-tests/ecma_2/jsref.js new file mode 100644 index 00000000..e5a3ddfe --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/jsref.js @@ -0,0 +1,591 @@ +var completed = false; +var testcases; +var tc = 0; + +SECTION = ""; +VERSION = ""; +BUGNUMBER = ""; +EXCLUDE = ""; +BUGNUMBER = ""; + + +TZ_DIFF = -8; + +var TT = ""; +var TT_ = ""; +var BR = ""; +var NBSP = " "; +var CR = "\n"; +var FONT = ""; +var FONT_ = ""; +var FONT_RED = ""; +var FONT_GREEN = ""; +var B = ""; +var B_ = "" +var H2 = ""; +var H2_ = ""; +var HR = ""; +var DEBUG = false; + + +var PASSED = " PASSED!" +var FAILED = " FAILED! expected: "; +function test() { + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ + testcases[tc].actual ); + + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); +} + +function TestCase( n, d, e, a ) { + this.name = n; + this.description = d; + this.expect = e; + this.actual = a; + this.passed = true; + this.reason = ""; + this.bugnumber = BUGNUMBER; + + this.passed = getTestCaseResult( this.expect, this.actual ); + if ( DEBUG ) { + print( "added " + this.description ); + } +} +function startTest() { + // JavaScript 1.3 is supposed to be compliant ecma version 1.0 + if ( VERSION == "ECMA_1" ) { + version ( "130" ); + } + if ( VERSION == "JS_13" ) { + version ( "130" ); + } + if ( VERSION == "JS_12" ) { + version ( "120" ); + } + if ( VERSION == "JS_11" ) { + version ( "110" ); + } + // for ecma version 2.0, we will leave the javascript version to + // the default ( for now ). + writeHeaderToLog( SECTION + " "+ TITLE); + testcases = new Array(); + tc = 0; + +} +function getTestCaseResult( expect, actual ) { + // because ( NaN == NaN ) always returns false, need to do + // a special compare to see if we got the right result. + if ( actual != actual ) { + if ( typeof actual == "object" ) { + actual = "NaN object"; + } else { + actual = "NaN number"; + } + } + if ( expect != expect ) { + if ( typeof expect == "object" ) { + expect = "NaN object"; + } else { + expect = "NaN number"; + } + } + + var passed = ( expect == actual ) ? true : false; + + // if both objects are numbers + // need to replace w/ IEEE standard for rounding + if ( !passed + && typeof(actual) == "number" + && typeof(expect) == "number" + ) { + if ( Math.abs(actual-expect) < 0.0000001 ) { + passed = true; + } + } + + // verify type is the same + if ( typeof(expect) != typeof(actual) ) { + passed = false; + } + + return passed; +} +function writeTestCaseResult( expect, actual, string ) { + var passed = getTestCaseResult( expect, actual ); + writeFormattedResult( expect, actual, string, passed ); + return passed; +} +function writeFormattedResult( expect, actual, string, passed ) { + var s = TT + string ; + + for ( k = 0; + k < (60 - string.length >= 0 ? 60 - string.length : 5) ; + k++ ) { + } + + s += B ; + s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ; + + print( s + FONT_ + B_ + TT_ ); + + return passed; +} + +function writeHeaderToLog( string ) { + print( H2 + string + H2_ ); +} +function stopTest() +{ + var sizeTag = "<#TEST CASES SIZE>"; + var doneTag = "<#TEST CASES DONE>"; + var beginTag = "<#TEST CASE "; + var endTag = ">"; + + print(sizeTag); + print(testcases.length); + for (tc = 0; tc < testcases.length; tc++) + { + print(beginTag + 'PASSED' + endTag); + print(testcases[tc].passed); + print(beginTag + 'NAME' + endTag); + print(testcases[tc].name); + print(beginTag + 'EXPECTED' + endTag); + print(testcases[tc].expect); + print(beginTag + 'ACTUAL' + endTag); + print(testcases[tc].actual); + print(beginTag + 'DESCRIPTION' + endTag); + print(testcases[tc].description); + print(beginTag + 'REASON' + endTag); + print(( testcases[tc].passed ) ? "" : "wrong value "); + print(beginTag + 'BUGNUMBER' + endTag); + print( BUGNUMBER ); + } + print(doneTag); + print( HR ); + gc(); +} +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} +function err( msg, page, line ) { + testcases[tc].actual = "error"; + testcases[tc].reason = msg; + writeTestCaseResult( testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ testcases[tc].actual + + ": " + testcases[tc].reason ); + stopTest(); + return true; +} + +/** + * Type Conversion functions used by Type Conversion + * + */ + + + + /* + * Date functions used by tests in Date suite + * + */ +var msPerDay = 86400000; +var HoursPerDay = 24; +var MinutesPerHour = 60; +var SecondsPerMinute = 60; +var msPerSecond = 1000; +var msPerMinute = 60000; // msPerSecond * SecondsPerMinute +var msPerHour = 3600000; // msPerMinute * MinutesPerHour + +var TIME_1970 = 0; +var TIME_2000 = 946684800000; +var TIME_1900 = -2208988800000; + +function Day( t ) { + return ( Math.floor(t/msPerDay ) ); +} +function DaysInYear( y ) { + if ( y % 4 != 0 ) { + return 365; + } + if ( (y % 4 == 0) && (y % 100 != 0) ) { + return 366; + } + if ( (y % 100 == 0) && (y % 400 != 0) ) { + return 365; + } + if ( (y % 400 == 0) ){ + return 366; + } else { + return "ERROR: DaysInYear(" + y + ") case not covered"; + } +} +function TimeInYear( y ) { + return ( DaysInYear(y) * msPerDay ); +} +function DayNumber( t ) { + return ( Math.floor( t / msPerDay ) ); +} +function TimeWithinDay( t ) { + if ( t < 0 ) { + return ( (t % msPerDay) + msPerDay ); + } else { + return ( t % msPerDay ); + } +} +function YearNumber( t ) { +} +function TimeFromYear( y ) { + return ( msPerDay * DayFromYear(y) ); +} +function DayFromYear( y ) { + return ( 365*(y-1970) + + Math.floor((y-1969)/4) - + Math.floor((y-1901)/100) + + Math.floor((y-1601)/400) ); +} +function InLeapYear( t ) { + if ( DaysInYear(YearFromTime(t)) == 365 ) { + return 0; + } + if ( DaysInYear(YearFromTime(t)) == 366 ) { + return 1; + } else { + return "ERROR: InLeapYear("+t+") case not covered"; + } +} +function YearFromTime( t ) { + t = Number( t ); + var sign = ( t < 0 ) ? -1 : 1; + var year = ( sign < 0 ) ? 1969 : 1970; + for ( var timeToTimeZero = t; ; ) { + // subtract the current year's time from the time that's left. + timeToTimeZero -= sign * TimeInYear(year) + + // if there's less than the current year's worth of time left, then break. + if ( sign < 0 ) { + if ( sign * timeToTimeZero <= 0 ) { + break; + } else { + year += sign; + } + } else { + if ( sign * timeToTimeZero < 0 ) { + break; + } else { + year += sign; + } + } + } + return ( year ); +} +function MonthFromTime( t ) { + // i know i could use switch but i'd rather not until it's part of ECMA + var day = DayWithinYear( t ); + var leap = InLeapYear(t); + + if ( (0 <= day) && (day < 31) ) { + return 0; + } + if ( (31 <= day) && (day < (59+leap)) ) { + return 1; + } + if ( ((59+leap) <= day) && (day < (90+leap)) ) { + return 2; + } + if ( ((90+leap) <= day) && (day < (120+leap)) ) { + return 3; + } + if ( ((120+leap) <= day) && (day < (151+leap)) ) { + return 4; + } + if ( ((151+leap) <= day) && (day < (181+leap)) ) { + return 5; + } + if ( ((181+leap) <= day) && (day < (212+leap)) ) { + return 6; + } + if ( ((212+leap) <= day) && (day < (243+leap)) ) { + return 7; + } + if ( ((243+leap) <= day) && (day < (273+leap)) ) { + return 8; + } + if ( ((273+leap) <= day) && (day < (304+leap)) ) { + return 9; + } + if ( ((304+leap) <= day) && (day < (334+leap)) ) { + return 10; + } + if ( ((334+leap) <= day) && (day < (365+leap)) ) { + return 11; + } else { + return "ERROR: MonthFromTime("+t+") not known"; + } +} +function DayWithinYear( t ) { + return( Day(t) - DayFromYear(YearFromTime(t))); +} +function DateFromTime( t ) { + var day = DayWithinYear(t); + var month = MonthFromTime(t); + + if ( month == 0 ) { + return ( day + 1 ); + } + if ( month == 1 ) { + return ( day - 30 ); + } + if ( month == 2 ) { + return ( day - 58 - InLeapYear(t) ); + } + if ( month == 3 ) { + return ( day - 89 - InLeapYear(t)); + } + if ( month == 4 ) { + return ( day - 119 - InLeapYear(t)); + } + if ( month == 5 ) { + return ( day - 150- InLeapYear(t)); + } + if ( month == 6 ) { + return ( day - 180- InLeapYear(t)); + } + if ( month == 7 ) { + return ( day - 211- InLeapYear(t)); + } + if ( month == 8 ) { + return ( day - 242- InLeapYear(t)); + } + if ( month == 9 ) { + return ( day - 272- InLeapYear(t)); + } + if ( month == 10 ) { + return ( day - 303- InLeapYear(t)); + } + if ( month == 11 ) { + return ( day - 333- InLeapYear(t)); + } + + return ("ERROR: DateFromTime("+t+") not known" ); +} +function WeekDay( t ) { + var weekday = (Day(t)+4) % 7; + return( weekday < 0 ? 7 + weekday : weekday ); +} + +// missing daylight savins time adjustment + +function HourFromTime( t ) { + var h = Math.floor( t / msPerHour ) % HoursPerDay; + return ( (h<0) ? HoursPerDay + h : h ); +} +function MinFromTime( t ) { + var min = Math.floor( t / msPerMinute ) % MinutesPerHour; + return( ( min < 0 ) ? MinutesPerHour + min : min ); +} +function SecFromTime( t ) { + var sec = Math.floor( t / msPerSecond ) % SecondsPerMinute; + return ( (sec < 0 ) ? SecondsPerMinute + sec : sec ); +} +function msFromTime( t ) { + var ms = t % msPerSecond; + return ( (ms < 0 ) ? msPerSecond + ms : ms ); +} +function LocalTZA() { + return ( TZ_DIFF * msPerHour ); +} +function UTC( t ) { + return ( t - LocalTZA() - DaylightSavingTA(t - LocalTZA()) ); +} +function DaylightSavingTA( t ) { + t = t - LocalTZA(); + + var dst_start = GetFirstSundayInApril(t) + 2*msPerHour; + var dst_end = GetLastSundayInOctober(t)+ 2*msPerHour; + + if ( t >= dst_start && t < dst_end ) { + return msPerHour; + } else { + return 0; + } + + // Daylight Savings Time starts on the first Sunday in April at 2:00AM in + // PST. Other time zones will need to override this function. + + print( new Date( UTC(dst_start + LocalTZA())) ); + + return UTC(dst_start + LocalTZA()); +} +function GetFirstSundayInApril( t ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + + var april = TimeFromYear(year) + TimeInMonth(0, leap) + TimeInMonth(1,leap) + + TimeInMonth(2,leap); + + for ( var first_sunday = april; WeekDay(first_sunday) > 0; + first_sunday += msPerDay ) + { + ; + } + + return first_sunday; +} +function GetLastSundayInOctober( t ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + + for ( var oct = TimeFromYear(year), m = 0; m < 9; m++ ) { + oct += TimeInMonth(m, leap); + } + for ( var last_sunday = oct + 30*msPerDay; WeekDay(last_sunday) > 0; + last_sunday -= msPerDay ) + { + ; + } + return last_sunday; +} +function LocalTime( t ) { + return ( t + LocalTZA() + DaylightSavingTA(t) ); +} +function MakeTime( hour, min, sec, ms ) { + if ( isNaN( hour ) || isNaN( min ) || isNaN( sec ) || isNaN( ms ) ) { + return Number.NaN; + } + + hour = ToInteger(hour); + min = ToInteger( min); + sec = ToInteger( sec); + ms = ToInteger( ms ); + + return( (hour*msPerHour) + (min*msPerMinute) + + (sec*msPerSecond) + ms ); +} +function MakeDay( year, month, date ) { + if ( isNaN(year) || isNaN(month) || isNaN(date) ) { + return Number.NaN; + } + year = ToInteger(year); + month = ToInteger(month); + date = ToInteger(date ); + + var sign = ( year < 1970 ) ? -1 : 1; + var t = ( year < 1970 ) ? 1 : 0; + var y = ( year < 1970 ) ? 1969 : 1970; + + var result5 = year + Math.floor( month/12 ); + var result6 = month % 12; + + if ( year < 1970 ) { + for ( y = 1969; y >= year; y += sign ) { + t += sign * TimeInYear(y); + } + } else { + for ( y = 1970 ; y < year; y += sign ) { + t += sign * TimeInYear(y); + } + } + + var leap = InLeapYear( t ); + + for ( var m = 0; m < month; m++ ) { + t += TimeInMonth( m, leap ); + } + + if ( YearFromTime(t) != result5 ) { + return Number.NaN; + } + if ( MonthFromTime(t) != result6 ) { + return Number.NaN; + } + if ( DateFromTime(t) != 1 ) { + return Number.NaN; + } + + return ( (Day(t)) + date - 1 ); +} +function TimeInMonth( month, leap ) { + // september april june november + // jan 0 feb 1 mar 2 apr 3 may 4 june 5 jul 6 + // aug 7 sep 8 oct 9 nov 10 dec 11 + + if ( month == 3 || month == 5 || month == 8 || month == 10 ) { + return ( 30*msPerDay ); + } + + // all the rest + if ( month == 0 || month == 2 || month == 4 || month == 6 || + month == 7 || month == 9 || month == 11 ) { + return ( 31*msPerDay ); + } + + // save february + return ( (leap == 0) ? 28*msPerDay : 29*msPerDay ); +} +function MakeDate( day, time ) { + if ( day == Number.POSITIVE_INFINITY || + day == Number.NEGATIVE_INFINITY || + day == Number.NaN ) { + return Number.NaN; + } + if ( time == Number.POSITIVE_INFINITY || + time == Number.POSITIVE_INFINITY || + day == Number.NaN) { + return Number.NaN; + } + return ( day * msPerDay ) + time; +} +function TimeClip( t ) { + if ( isNaN( t ) ) { + return ( Number.NaN ); + } + if ( Math.abs( t ) > 8.64e15 ) { + return ( Number.NaN ); + } + + return ( ToInteger( t ) ); +} +function ToInteger( t ) { + t = Number( t ); + + if ( isNaN( t ) ){ + return ( Number.NaN ); + } + if ( t == 0 || t == -0 || + t == Number.POSITIVE_INFINITY || t == Number.NEGATIVE_INFINITY ) { + return 0; + } + + var sign = ( t < 0 ) ? -1 : 1; + + return ( sign * Math.floor( Math.abs( t ) ) ); +} +function Enumerate ( o ) { + var properties = new Array(); + for ( p in o ) { + properties[ properties.length ] = new Array( p, o[p] ); + } + return properties; +} +function AddTestCase( description, expect, actual ) { + testcases[tc++] = new TestCase( SECTION, description, expect, actual ); +} +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} diff --git a/source/spidermonkey-tests/ecma_2/shell.js b/source/spidermonkey-tests/ecma_2/shell.js new file mode 100644 index 00000000..f744c6d2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/shell.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var TZ_DIFF = getTimeZoneDiff(); + +/* + * Originally, the test suite used a hard-coded value TZ_DIFF = -8. + * But that was only valid for testers in the Pacific Standard Time Zone! + * We calculate the proper number dynamically for any tester. We just + * have to be careful to use a date not subject to Daylight Savings Time... + */ +function getTimeZoneDiff() +{ + return -((new Date(2000, 1, 1)).getTimezoneOffset())/60; +} diff --git a/source/spidermonkey-tests/ecma_2/template.js b/source/spidermonkey-tests/ecma_2/template.js new file mode 100644 index 00000000..6217968c --- /dev/null +++ b/source/spidermonkey-tests/ecma_2/template.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + */ + + +/** + * File Name: template.js + * Reference: ** replace with bugzilla URL or document reference ** + * Description: ** replace with description of test ** + * Author: ** replace with your e-mail address ** + */ + +var SECTION = ""; // if ECMA test, provide section number +var VERSION = "ECMA_2"; // Version of JavaScript or ECMA +var TITLE = ""; // Provide ECMA section title or description +var BUGNUMBER = ""; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + + +/* Calls to AddTestCase here */ + +test(); // leave this alone diff --git a/source/spidermonkey-tests/ecma_3/Array/15.4.4.11-01.js b/source/spidermonkey-tests/ecma_3/Array/15.4.4.11-01.js new file mode 100644 index 00000000..d92ad5fc --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/15.4.4.11-01.js @@ -0,0 +1,28 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 312138; +var summary = 'Array.sort should not eat exceptions'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = "e=1 N=1"; + +var N = 0; +var array = [4,3,2,1]; + +try { + array.sort(function() { + throw ++N; + }); +} catch (e) { + actual = ("e="+e+" N="+N); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/Array/15.4.4.3-1.js b/source/spidermonkey-tests/ecma_3/Array/15.4.4.3-1.js new file mode 100644 index 00000000..f4283431 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/15.4.4.3-1.js @@ -0,0 +1,54 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 12 Mar 2001 + * + * + * SUMMARY: Testing Array.prototype.toLocaleString() + * See http://bugzilla.mozilla.org/show_bug.cgi?id=56883 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=58031 + * + * By ECMA3 15.4.4.3, myArray.toLocaleString() means that toLocaleString() + * should be applied to each element of the array, and the results should be + * concatenated with an implementation-specific delimiter. For example: + * + * myArray[0].toLocaleString() + ',' + myArray[1].toLocaleString() + etc. + * + * In this testcase toLocaleString is a user-defined property of each + * array element; therefore it is the function that should be + * invoked. This function increments a global variable. Therefore the + * end value of this variable should be myArray.length. + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 56883; +var summary = 'Testing Array.prototype.toLocaleString() -'; +var actual = ''; +var expect = ''; +var n = 0; +var obj = {toLocaleString: function() {n++}}; +var myArray = [obj, obj, obj]; + + +myArray.toLocaleString(); +actual = n; +expect = 3; // (see explanation above) + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/15.4.4.4-001.js b/source/spidermonkey-tests/ecma_3/Array/15.4.4.4-001.js new file mode 100644 index 00000000..60262495 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/15.4.4.4-001.js @@ -0,0 +1,119 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 19 September 2002 + * SUMMARY: Testing Array.prototype.concat() + * See http://bugzilla.mozilla.org/show_bug.cgi?id=169795 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 169795; +var summary = 'Testing Array.prototype.concat()'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var x; + + +status = inSection(1); +x = "Hello"; +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(2); +x = 999; +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(3); +x = /Hello/g; +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(4); +x = new Error("Hello"); +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(5); +x = function() {return "Hello";}; +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(6); +x = [function() {return "Hello";}]; +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(7); +x = [1,2,3].concat([4,5,6]); +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(8); +x = eval('this'); +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +/* + * The next two sections are by igor@icesoft.no; see + * http://bugzilla.mozilla.org/show_bug.cgi?id=169795#c3 + */ +status = inSection(9); +x={length:0}; +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + +status = inSection(10); +x={length:2, 0:0, 1:1}; +actual = [].concat(x).toString(); +expect = x.toString(); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/15.4.5.1-01.js b/source/spidermonkey-tests/ecma_3/Array/15.4.5.1-01.js new file mode 100644 index 00000000..96acdef6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/15.4.5.1-01.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = "(none)"; +var summary = '15.4.5.1 - array.length coverage'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var a = []; + + expect = 'RangeError: invalid array length'; + actual = ''; + try + { + a.length = -1; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + actual = ''; + try + { + a.length = 12345678901234567890; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + actual = ''; + try + { + a.length = 'a'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/15.5.4.8-01.js b/source/spidermonkey-tests/ecma_3/Array/15.5.4.8-01.js new file mode 100644 index 00000000..9901a556 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/15.5.4.8-01.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 480096; +var summary = 'Array.lastIndexOf'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '-12'; + actual = 0; + actual += Array.lastIndexOf([2, 3,, 4, 5, 6]); + actual += [2, 3,, 4, 5, 6].lastIndexOf(); + actual += Array.prototype.lastIndexOf.call([2, 3,, 4, 5, 6]); + actual += Array.prototype.lastIndexOf.apply([2, 3,, 4, 5, 6], [, -4]); + actual += Array.prototype.lastIndexOf.apply([2, 3,, 4, 5, 6], [undefined, -4]); + actual += Array.prototype.lastIndexOf.apply([2, 3,, 4, 5, 6], [undefined, -5]); + actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined); + actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 1); + actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 2); + actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined); + actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 1); + actual += Array.lastIndexOf([2, 3,, 4, 5, 6], undefined, 2); + + actual = String(actual); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/browser.js b/source/spidermonkey-tests/ecma_3/Array/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-101488.js b/source/spidermonkey-tests/ecma_3/Array/regress-101488.js new file mode 100644 index 00000000..b5563745 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-101488.js @@ -0,0 +1,138 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 24 September 2001 + * + * SUMMARY: Try assigning arr.length = new Number(n) + * From correspondence with Igor Bukanov <igor@icesoft.no> + * See http://bugzilla.mozilla.org/show_bug.cgi?id=101488 + * + * Without the "new" keyword, assigning arr.length = Number(n) worked. + * But with it, Rhino was giving an error "Inappropriate array length" + * and SpiderMonkey was exiting without giving any error or return value - + * + * Comments on the Rhino code by igor@icesoft.no: + * + * jsSet_length requires that the new length value should be an instance + * of Number. But according to Ecma 15.4.5.1, item 12-13, an error should + * be thrown only if ToUint32(length_value) != ToNumber(length_value) + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 101488; +var summary = 'Try assigning arr.length = new Number(n)'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var arr = []; + + +status = inSection(1); +arr = Array(); +tryThis('arr.length = new Number(1);'); +actual = arr.length; +expect = 1; +addThis(); + +status = inSection(2); +arr = Array(5); +tryThis('arr.length = new Number(1);'); +actual = arr.length; +expect = 1; +addThis(); + +status = inSection(3); +arr = Array(); +tryThis('arr.length = new Number(17);'); +actual = arr.length; +expect = 17; +addThis(); + +status = inSection(4); +arr = Array(5); +tryThis('arr.length = new Number(17);'); +actual = arr.length; +expect = 17; +addThis(); + + +/* + * Also try the above with the "new" keyword before Array(). + * Array() and new Array() should be equivalent, by ECMA 15.4.1.1 + */ +status = inSection(5); +arr = new Array(); +tryThis('arr.length = new Number(1);'); +actual = arr.length; +expect = 1; +addThis(); + +status = inSection(6); +arr = new Array(5); +tryThis('arr.length = new Number(1);'); +actual = arr.length; +expect = 1; +addThis(); + +arr = new Array(); +tryThis('arr.length = new Number(17);'); +actual = arr.length; +expect = 17; +addThis(); + +status = inSection(7); +arr = new Array(5); +tryThis('arr.length = new Number(17);'); +actual = arr.length; +expect = 17; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function tryThis(s) +{ + try + { + eval(s); + } + catch(e) + { + // keep going + } +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-130451.js b/source/spidermonkey-tests/ecma_3/Array/regress-130451.js new file mode 100644 index 00000000..9dc5dc41 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-130451.js @@ -0,0 +1,185 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 25 Mar 2002 + * SUMMARY: Array.prototype.sort() should not (re-)define .length + * See http://bugzilla.mozilla.org/show_bug.cgi?id=130451 + * + * From the ECMA-262 Edition 3 Final spec: + * + * NOTE: The sort function is intentionally generic; it does not require that + * its |this| value be an Array object. Therefore, it can be transferred to + * other kinds of objects for use as a method. Whether the sort function can + * be applied successfully to a host object is implementation-dependent. + * + * The interesting parts of this testcase are the contrasting expectations for + * Brendan's test below, when applied to Array objects vs. non-Array objects. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 130451; +var summary = 'Array.prototype.sort() should not (re-)define .length'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var arr = []; +var cmp = new Function(); + + +/* + * First: test Array.prototype.sort() on Array objects + */ +status = inSection(1); +arr = [0,1,2,3]; +cmp = function(x,y) {return x-y;}; +actual = arr.sort(cmp).length; +expect = 4; +addThis(); + +status = inSection(2); +arr = [0,1,2,3]; +cmp = function(x,y) {return y-x;}; +actual = arr.sort(cmp).length; +expect = 4; +addThis(); + +status = inSection(3); +arr = [0,1,2,3]; +cmp = function(x,y) {return x-y;}; +arr.length = 1; +actual = arr.sort(cmp).length; +expect = 1; +addThis(); + +/* + * This test is by Brendan. Setting arr.length to + * 2 and then 4 should cause elements to be deleted. + */ +arr = [0,1,2,3]; +cmp = function(x,y) {return x-y;}; +arr.sort(cmp); + +status = inSection(4); +actual = arr.join(); +expect = '0,1,2,3'; +addThis(); + +status = inSection(5); +actual = arr.length; +expect = 4; +addThis(); + +status = inSection(6); +arr.length = 2; +actual = arr.join(); +expect = '0,1'; +addThis(); + +status = inSection(7); +arr.length = 4; +actual = arr.join(); +expect = '0,1,,'; //<---- see how 2,3 have been lost +addThis(); + + + +/* + * Now test Array.prototype.sort() on non-Array objects + */ +status = inSection(8); +var obj = new Object(); +obj.sort = Array.prototype.sort; +obj.length = 4; +obj[0] = 0; +obj[1] = 1; +obj[2] = 2; +obj[3] = 3; +cmp = function(x,y) {return x-y;}; +actual = obj.sort(cmp).length; +expect = 4; +addThis(); + + +/* + * Here again is Brendan's test. Unlike the array case + * above, the setting of obj.length to 2 and then 4 + * should NOT cause elements to be deleted + */ +obj = new Object(); +obj.sort = Array.prototype.sort; +obj.length = 4; +obj[0] = 3; +obj[1] = 2; +obj[2] = 1; +obj[3] = 0; +cmp = function(x,y) {return x-y;}; +obj.sort(cmp); //<---- this is what triggered the buggy behavior below +obj.join = Array.prototype.join; + +status = inSection(9); +actual = obj.join(); +expect = '0,1,2,3'; +addThis(); + +status = inSection(10); +actual = obj.length; +expect = 4; +addThis(); + +status = inSection(11); +obj.length = 2; +actual = obj.join(); +expect = '0,1'; +addThis(); + +/* + * Before this bug was fixed, |actual| held the value '0,1,,' + * as in the Array-object case at top. This bug only occurred + * if Array.prototype.sort() had been applied to |obj|, + * as we have done higher up. + */ +status = inSection(12); +obj.length = 4; +actual = obj.join(); +expect = '0,1,2,3'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-322135-01.js b/source/spidermonkey-tests/ecma_3/Array/regress-322135-01.js new file mode 100644 index 00000000..2f65724e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-322135-01.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 322135; +var summary = 'Array.prototype.push on Array with length 2^32-1'; +var actual = 'Completed'; +var expect = 'Completed'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('This bug passes if it does not cause an out of memory error'); +printStatus('Other issues related to array length are not tested.'); + +var length = 4294967295; +var array = new Array(length); + +printStatus('before array.length = ' + array.length); + +try +{ + array.push('Kibo'); +} +catch(ex) +{ + printStatus(ex.name + ': ' + ex.message); +} +reportCompare(expect, actual, summary); + +//expect = 'Kibo'; +//actual = array[length]; +//reportCompare(expect, actual, summary + ': element appended'); + +//expect = length; +//actual = array.length; +//reportCompare(expect, actual, summary + ': array length unchanged'); diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-322135-02.js b/source/spidermonkey-tests/ecma_3/Array/regress-322135-02.js new file mode 100644 index 00000000..4991cf51 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-322135-02.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 322135; +var summary = 'Array.prototype.concat on Array with length 2^32-1'; +var actual = 'Completed'; +var expect = 'Completed'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('This bug passes if it does not cause an out of memory error'); +printStatus('Other issues related to array length are not tested.'); + +var length = 4294967295; +var array1 = new Array(length); +var array2 = ['Kibo']; +var array; + +try +{ + array = array1.concat(array2); +} +catch(ex) +{ + printStatus(ex.name + ': ' + ex.message); +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-322135-03.js b/source/spidermonkey-tests/ecma_3/Array/regress-322135-03.js new file mode 100644 index 00000000..1ff42eb6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-322135-03.js @@ -0,0 +1,40 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 322135; +var summary = 'Array.prototype.splice on Array with length 2^32-1'; +var actual = 'Completed'; +var expect = 'Completed'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('This bug passes if it does not cause an out of memory error'); +printStatus('Other issues related to array length are not tested.'); + +var length = 4294967295; +var array = new Array(length); +var array1 = ['Kibo']; +var array; + +try +{ + array.splice(0, 0, array1); +} +catch(ex) +{ + printStatus(ex.name + ': ' + ex.message); +} +reportCompare(expect, actual, summary + ': RangeError'); + +//expect = 'Kibo'; +//actual = array[0]; +//reportCompare(expect, actual, summary + ': element prepended'); + +//expect = length; +//actual = array.length; +//reportCompare(expect, actual, summary + ': array length unchanged'); diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-322135-04.js b/source/spidermonkey-tests/ecma_3/Array/regress-322135-04.js new file mode 100644 index 00000000..c1858ea2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-322135-04.js @@ -0,0 +1,38 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 322135; +var summary = 'Array.prototype.unshift on Array with length 2^32-1'; +var actual = 'Completed'; +var expect = 'Completed'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('This bug passes if it does not cause an out of memory error'); +printStatus('Other issues related to array length are not tested.'); + +var length = 4294967295; +var array = new Array(length); + +try +{ + array.unshift('Kibo'); +} +catch(ex) +{ + printStatus(ex.name + ': ' + ex.message); +} +reportCompare(expect, actual, summary); + +//expect = 'Kibo'; +//actual = array[0]; +//reportCompare(expect, actual, summary + ': first prepended'); + +//expect = length; +//actual = array.length; +//reportCompare(expect, actual, summary + ': array length unchanged'); diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-387501.js b/source/spidermonkey-tests/ecma_3/Array/regress-387501.js new file mode 100644 index 00000000..9646fe5e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-387501.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 387501; +var summary = + 'Array.prototype.toString|toLocaleString|toSource are generic'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '[object String]'; + actual = Array.prototype.toString.call((new String('foo'))); + assertEq(actual, expect, summary); + + expect = 'f,o,o'; + actual = Array.prototype.toLocaleString.call((new String('foo'))); + assertEq(actual, expect, summary); + + assertEq('["f", "o", "o"]', Array.prototype.toSource.call(new String('foo'))); + + if (typeof Array.prototype.toSource != 'undefined') + { + try + { + Array.prototype.toSource.call('foo'); + throw new Error("didn't throw"); + } + catch(ex) + { + assertEq(ex instanceof TypeError, true, + "wrong error thrown: expected TypeError, got " + ex); + } + } + + reportCompare(true, true, "Tests complete"); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-390598.js b/source/spidermonkey-tests/ecma_3/Array/regress-390598.js new file mode 100644 index 00000000..f100050e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-390598.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 390598; +var summary = 'Override inherited length of Array-like object'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + function F() {} + F.prototype = []; + + // override inherited length from the prototype. + expect = 10; + var x = new F(); + + print('x = new F(); x instanceof Array: ' + (x instanceof Array)); + + x.length = expect; + actual = x.length; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-421325.js b/source/spidermonkey-tests/ecma_3/Array/regress-421325.js new file mode 100644 index 00000000..84f884ba --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-421325.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 421325; +var summary = 'Dense Arrays and holes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Array.prototype[1] = 'bar'; + + var a = []; + a[0]='foo'; + a[2] = 'baz'; + expect = 'foo,bar,baz'; + actual = a + ''; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-430717.js b/source/spidermonkey-tests/ecma_3/Array/regress-430717.js new file mode 100644 index 00000000..31b3b832 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-430717.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430717; +var summary = 'Dense Arrays should inherit deleted elements from Array.prototype'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Array.prototype[2] = "two"; + var a = [0,1,2,3]; + delete a[2]; + + expect = 'two'; + actual = a[2]; + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-488989.js b/source/spidermonkey-tests/ecma_3/Array/regress-488989.js new file mode 100644 index 00000000..a610f413 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-488989.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 488989; +var summary = 'Array.prototype.push for non-arrays near max-array-index limit'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var stack = { push: [].push }; stack.length = Math.pow(2, 37); + stack.push(-2, -1, 0); + + var stack = { push: [].push }; stack.length = Math.pow(2, 5); + stack.push(-2, -1, 0); + + var stack = { push: [].push }; stack.length = Math.pow(2, 32) -2; + stack.push(-2, -1, 0); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Array/regress-619970.js b/source/spidermonkey-tests/ecma_3/Array/regress-619970.js new file mode 100644 index 00000000..6ec94fc3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Array/regress-619970.js @@ -0,0 +1,8 @@ +function test() { + delete arguments[1]; + return Array.prototype.join.call(arguments); +} +assertEq(test(1,2,3), "1,,3"); +Object.prototype[1] = "ponies!!!1"; +assertEq(test(1,2,3), "1,ponies!!!1,3"); +reportCompare(true,true); diff --git a/source/spidermonkey-tests/ecma_3/Array/shell.js b/source/spidermonkey-tests/ecma_3/Array/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.1.2-01.js b/source/spidermonkey-tests/ecma_3/Date/15.9.1.2-01.js new file mode 100644 index 00000000..9b12e318 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.1.2-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 264727; +var summary = '15.9.1.2 - TimeWithinDay(TIME_1900) == 0'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 0; + actual = TimeWithinDay(TIME_1900); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.3.2-1.js b/source/spidermonkey-tests/ecma_3/Date/15.9.3.2-1.js new file mode 100644 index 00000000..0aa43cfe --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.3.2-1.js @@ -0,0 +1,60 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Bob Clary + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 273292; +var summary = '15.9.3.2 new Date(value)'; +var actual = ''; +var expect = ''; +var date1; +var date2; +var i; +var validDateStrings = [ + "11/69/2004", + "11/70/2004", + "69/69/2004", + "69/69/69", + "69/69/1969", + "70/69/70", + "70/69/1970", + "70/69/2004" + ]; + +var invalidDateStrings = [ + "70/70/70", + "70/70/1970", + "70/70/2004" + ]; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 0; + +for (i = 0; i < validDateStrings.length; i++) +{ + date1 = new Date(validDateStrings[i]); + date2 = new Date(date1.toDateString()); + actual = date2 - date1; + + reportCompare(expect, actual, inSection(i) + ' ' + + validDateStrings[i]); +} + +expect = true; + +var offset = validDateStrings.length; + +for (i = 0; i < invalidDateStrings.length; i++) +{ + date1 = new Date(invalidDateStrings[i]); + actual = isNaN(date1); + + reportCompare(expect, actual, inSection(i + offset) + ' ' + + invalidDateStrings[i] + ' is invalid.'); +} + diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.4.3.js b/source/spidermonkey-tests/ecma_3/Date/15.9.4.3.js new file mode 100644 index 00000000..ba4d4d7c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.4.3.js @@ -0,0 +1,200 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 363578; +var summary = '15.9.4.3 - Date.UTC edge-case arguments.'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // + + expect = 31; + actual = (new Date(Date.UTC(2006, 0, 0)).getUTCDate()); + reportCompare(expect, actual, summary + ': date 0'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, 0)).getUTCHours()); + reportCompare(expect, actual, summary + ': hours 0'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, 0, 0)).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes 0'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0)).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds 0'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0, 0)).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds 0'); + + // + + expect = 30; + actual = (new Date(Date.UTC(2006, 0, -1)).getUTCDate()); + reportCompare(expect, actual, summary + ': date -1'); + + expect = 23; + actual = (new Date(Date.UTC(2006, 0, 0, -1)).getUTCHours()); + reportCompare(expect, actual, summary + ': hours -1'); + + expect = 59; + actual = (new Date(Date.UTC(2006, 0, 0, 0, -1)).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes -1'); + + expect = 59; + actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, -1)).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds -1'); + + expect = 999; + actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0, -1)).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds -1'); + + // + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, undefined)).getUTCDate()); + reportCompare(expect, actual, summary + ': date undefined'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, undefined)).getUTCHours()); + reportCompare(expect, actual, summary + ': hours undefined'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, undefined)).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes undefined'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, undefined)).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds undefined'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, undefined)).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds undefined'); + + // + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, {})).getUTCDate()); + reportCompare(expect, actual, summary + ': date {}'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, {})).getUTCHours()); + reportCompare(expect, actual, summary + ': hours {}'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, {})).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes {}'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, {})).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds {}'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, {})).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds {}'); + + // + + expect = 31; + actual = (new Date(Date.UTC(2006, 0, null)).getUTCDate()); + reportCompare(expect, actual, summary + ': date null'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, null)).getUTCHours()); + reportCompare(expect, actual, summary + ': hours null'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, 0, null)).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes null'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, null)).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds null'); + + expect = 0; + actual = (new Date(Date.UTC(2006, 0, 0, 0, 0, 0, null)).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds null'); + + // + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, Infinity)).getUTCDate()); + reportCompare(expect, actual, summary + ': date Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, Infinity)).getUTCHours()); + reportCompare(expect, actual, summary + ': hours Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, Infinity)).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, Infinity)).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, Infinity)).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds Infinity'); + + // + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, -Infinity)).getUTCDate()); + reportCompare(expect, actual, summary + ': date -Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, -Infinity)).getUTCHours()); + reportCompare(expect, actual, summary + ': hours -Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, -Infinity)).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes -Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, -Infinity)).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds -Infinity'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, -Infinity)).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds -Infinity'); + + // + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, NaN)).getUTCDate()); + reportCompare(expect, actual, summary + ': date NaN'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, NaN)).getUTCHours()); + reportCompare(expect, actual, summary + ': hours NaN'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, NaN)).getUTCMinutes()); + reportCompare(expect, actual, summary + ': minutes NaN'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, NaN)).getUTCSeconds()); + reportCompare(expect, actual, summary + ': seconds NaN'); + + expect = true; + actual = isNaN(new Date(Date.UTC(2006, 0, 0, 0, 0, 0, NaN)).getUTCMilliseconds()); + reportCompare(expect, actual, summary + ': milliseconds NaN'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.5.3.js b/source/spidermonkey-tests/ecma_3/Date/15.9.5.3.js new file mode 100644 index 00000000..e3f072b4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.5.3.js @@ -0,0 +1,118 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + File Name: 15.9.5.3.js + ECMA Section: 15.9.5.3 Date.prototype.toDateString() + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the "date" + portion of the Date in the current time zone in a convenient, + human-readable form. We can't test the content of the string, + but can verify that the string is parsable by Date.parse + + The toDateString function is not generic; it generates a runtime error + if its 'this' value is not a Date object. Therefore it cannot be transferred + to other kinds of objects for use as a method. + + Author: pschwartau@netscape.com + Date: 14 november 2000 (adapted from ecma/Date/15.9.5.2.js) +*/ + +var SECTION = "15.9.5.3"; +var VERSION = "ECMA_3"; +var TITLE = "Date.prototype.toDateString()"; + +var status = ''; +var actual = ''; +var expect = ''; + + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// first, some generic tests - + +status = "typeof (now.toDateString())"; +actual = typeof (now.toDateString()); +expect = "string"; +addTestCase(); + +status = "Date.prototype.toDateString.length"; +actual = Date.prototype.toDateString.length; +expect = 0; +addTestCase(); + +/* + * Date.parse is accurate to the second; valueOf() to the millisecond. + * Here we expect them to coincide, as we expect a time of exactly + * midnight - + */ +status = "(Date.parse(now.toDateString()) - (midnight(now)).valueOf()) == 0"; +actual = (Date.parse(now.toDateString()) - (midnight(now)).valueOf()) == 0; +expect = true; +addTestCase(); + + + +// 1970 +addDateTestCase(0); +addDateTestCase(TZ_ADJUST); + + +// 1900 +addDateTestCase(TIME_1900); +addDateTestCase(TIME_1900 - TZ_ADJUST); + + +// 2000 +addDateTestCase(TIME_2000); +addDateTestCase(TIME_2000 - TZ_ADJUST); + + +// 29 Feb 2000 +addDateTestCase(UTC_29_FEB_2000); +addDateTestCase(UTC_29_FEB_2000 - 1000); +addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST); + + +// 2005 +addDateTestCase(UTC_1_JAN_2005); +addDateTestCase(UTC_1_JAN_2005 - 1000); +addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addTestCase() +{ + new TestCase( + SECTION, + status, + expect, + actual); +} + +function addDateTestCase(date_given_in_milliseconds) +{ + var givenDate = new Date(date_given_in_milliseconds); + + status = 'Date.parse(' + givenDate + ').toDateString())'; + actual = Date.parse(givenDate.toDateString()); + expect = Date.parse(midnight(givenDate)); + addTestCase(); +} + + +function midnight(givenDate) +{ + // midnight on the given date - + return new Date(givenDate.getFullYear(), givenDate.getMonth(), givenDate.getDate()); +} + diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.5.4.js b/source/spidermonkey-tests/ecma_3/Date/15.9.5.4.js new file mode 100644 index 00000000..89a29657 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.5.4.js @@ -0,0 +1,151 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + File Name: 15.9.5.4.js + ECMA Section: 15.9.5.4 Date.prototype.toTimeString() + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the "time" + portion of the Date in the current time zone in a convenient, + human-readable form. We test the content of the string by checking + that d.toDateString() + d.toTimeString() == d.toString() + + Author: pschwartau@netscape.com + Date: 14 november 2000 + Revised: 07 january 2002 because of a change in JS Date format: + + See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey) + See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino) +*/ +//----------------------------------------------------------------------------- +var SECTION = "15.9.5.4"; +var VERSION = "ECMA_3"; +var TITLE = "Date.prototype.toTimeString()"; + +var status = ''; +var actual = ''; +var expect = ''; +var givenDate; +var year = ''; +var regexp = ''; +var reducedDateString = ''; +var hopeThisIsTimeString = ''; +var cnEmptyString = ''; +var cnERR ='OOPS! FATAL ERROR: no regexp match in extractTimeString()'; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// first, a couple of generic tests - + +status = "typeof (now.toTimeString())"; +actual = typeof (now.toTimeString()); +expect = "string"; +addTestCase(); + +status = "Date.prototype.toTimeString.length"; +actual = Date.prototype.toTimeString.length; +expect = 0; +addTestCase(); + +// 1970 +addDateTestCase(0); +addDateTestCase(TZ_ADJUST); + + +// 1900 +addDateTestCase(TIME_1900); +addDateTestCase(TIME_1900 - TZ_ADJUST); + + +// 2000 +addDateTestCase(TIME_2000); +addDateTestCase(TIME_2000 - TZ_ADJUST); + + +// 29 Feb 2000 +addDateTestCase(UTC_29_FEB_2000); +addDateTestCase(UTC_29_FEB_2000 - 1000); +addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST); + + +// Now +addDateTestCase( TIME_NOW); +addDateTestCase( TIME_NOW - TZ_ADJUST); + + +// 2005 +addDateTestCase(UTC_1_JAN_2005); +addDateTestCase(UTC_1_JAN_2005 - 1000); +addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST); + +//----------------------------------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------------------------------- + +function addTestCase() +{ + new TestCase( + SECTION, + status, + expect, + actual); +} + +function addDateTestCase(date_given_in_milliseconds) +{ + givenDate = new Date(date_given_in_milliseconds); + + status = '(' + givenDate + ').toTimeString()'; + actual = givenDate.toTimeString(); + expect = extractTimeString(givenDate); + addTestCase(); +} + + +/* + * As of 2002-01-07, the format for JavaScript dates changed. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey) + * See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino) + * + * WAS: Mon Jan 07 13:40:34 GMT-0800 (Pacific Standard Time) 2002 + * NOW: Mon Jan 07 2002 13:40:34 GMT-0800 (Pacific Standard Time) + * + * Thus, use a regexp of the form /date.toDateString()(.*)$/ + * to capture the TimeString into the first backreference - + */ +function extractTimeString(date) +{ + regexp = new RegExp(date.toDateString() + '(.*)' + '$'); + + try + { + hopeThisIsTimeString = date.toString().match(regexp)[1]; + } + catch(e) + { + return cnERR; + } + + // trim any leading or trailing spaces - + return trimL(trimR(hopeThisIsTimeString)); +} + + +function trimL(s) +{ + if (!s) {return cnEmptyString;}; + for (var i = 0; i!=s.length; i++) {if (s[i] != ' ') {break;}} + return s.substring(i); +} + + +function trimR(s) +{ + if (!s) {return cnEmptyString;}; + for (var i = (s.length - 1); i!=-1; i--) {if (s[i] != ' ') {break;}} + return s.substring(0, i+1); +} diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.5.5-02.js b/source/spidermonkey-tests/ecma_3/Date/15.9.5.5-02.js new file mode 100644 index 00000000..56f95178 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.5.5-02.js @@ -0,0 +1,66 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 398485; +var summary = 'Date.prototype.toLocaleString should not clamp year'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var d; + var y; + var l; + var maxms = 8640000000000000; + + d = new Date(-maxms ); + y = d.getFullYear(); + + actual = y; + expect = -271821; + reportCompare(expect, actual, summary + ': check year'); + + l = d.toLocaleString(); + print(l); + if (this.hasOwnProperty("Intl")) { + // ECMA-402 specifies that toLocaleString uses a proleptic Gregorian + // calender without year 0. + // Also, localized strings usually use era indicators such as "BC" + // instead of minus signs. + expect = Math.abs(y - 1) + ''; + } else { + // ECMA-262 up to edition 5.1 didn't specify toLocaleString; + // the previous implementation assumed a calendar with year 0 and used + // minus sign. + expect = y + ''; + } + actual = l.match(/-?[0-9]{3,}/) + ''; + reportCompare(expect, actual, summary + ': check toLocaleString'); + + d = new Date(maxms ); + y = d.getFullYear(); + l = d.toLocaleString(); + print(l); + + actual = y; + expect = 275760; + reportCompare(expect, actual, summary + ': check year'); + + actual = l.match(new RegExp(y)) + ''; + expect = y + ''; + reportCompare(expect, actual, summary + ': check toLocaleString'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.5.5.js b/source/spidermonkey-tests/ecma_3/Date/15.9.5.5.js new file mode 100644 index 00000000..27a2df95 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.5.5.js @@ -0,0 +1,111 @@ +// |reftest| random-if(xulRuntime.OS=="Linux") +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.5.js + ECMA Section: 15.9.5.5 Date.prototype.toLocaleString() + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the "date" + portion of the Date in the current time zone in a convenient, + human-readable form. We can't test the content of the string, + but can verify that the string is parsable by Date.parse + + The toLocaleString function is not generic; it generates a runtime error + if its 'this' value is not a Date object. Therefore it cannot be transferred + to other kinds of objects for use as a method. + + Note: This test isn't supposed to work with a non-English locale per spec. + + Author: pschwartau@netscape.com + Date: 14 november 2000 +*/ + +var SECTION = "15.9.5.5"; +var VERSION = "ECMA_3"; +var TITLE = "Date.prototype.toLocaleString()"; + +var status = ''; +var actual = ''; +var expect = ''; + + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// first, some generic tests - + +status = "typeof (now.toLocaleString())"; +actual = typeof (now.toLocaleString()); +expect = "string"; +addTestCase(); + +status = "Date.prototype.toLocaleString.length"; +actual = Date.prototype.toLocaleString.length; +expect = 0; +addTestCase(); + +// Date.parse is accurate to the second; valueOf() to the millisecond - +status = "Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000"; +actual = Math.abs(Date.parse(now.toLocaleString('en-US')) - now.valueOf()) < 1000; +expect = true; +addTestCase(); + + + +// 1970 +addDateTestCase(0); +addDateTestCase(TZ_ADJUST); + + +// 1900 +addDateTestCase(TIME_1900); +addDateTestCase(TIME_1900 -TZ_ADJUST); + + +// 2000 +addDateTestCase(TIME_2000); +addDateTestCase(TIME_2000 -TZ_ADJUST); + + +// 29 Feb 2000 +addDateTestCase(UTC_29_FEB_2000); +addDateTestCase(UTC_29_FEB_2000 - 1000); +addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST); + + +// 2005 +addDateTestCase(UTC_1_JAN_2005); +addDateTestCase(UTC_1_JAN_2005 - 1000); +addDateTestCase(UTC_1_JAN_2005-TZ_ADJUST); + + + +//----------------------------------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------------------------------- + + +function addTestCase() +{ + AddTestCase( + status, + expect, + actual); +} + + +function addDateTestCase(date_given_in_milliseconds) +{ + var givenDate = new Date(date_given_in_milliseconds); + + status = 'Date.parse(' + givenDate + ').toLocaleString("en-US"))'; + actual = Date.parse(givenDate.toLocaleString("en-US")); + expect = date_given_in_milliseconds; + addTestCase(); +} + diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.5.6.js b/source/spidermonkey-tests/ecma_3/Date/15.9.5.6.js new file mode 100644 index 00000000..6d091b60 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.5.6.js @@ -0,0 +1,119 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.9.5.6.js + ECMA Section: 15.9.5.6 Date.prototype.toLocaleDateString() + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the "date" + portion of the Date in the current time zone in a convenient, + human-readable form. We can't test the content of the string, + but can verify that the string is parsable by Date.parse + + The toLocaleDateString function is not generic; it generates a runtime error + if its 'this' value is not a Date object. Therefore it cannot be transferred + to other kinds of objects for use as a method. + + Note: This test isn't supposed to work with a non-English locale per spec. + + Author: pschwartau@netscape.com + Date: 14 november 2000 +*/ + +var SECTION = "15.9.5.6"; +var VERSION = "ECMA_3"; +var TITLE = "Date.prototype.toLocaleDateString()"; + +var status = ''; +var actual = ''; +var expect = ''; + + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// first, some generic tests - + +status = "typeof (now.toLocaleDateString())"; +actual = typeof (now.toLocaleDateString()); +expect = "string"; +addTestCase(); + +status = "Date.prototype.toLocaleDateString.length"; +actual = Date.prototype.toLocaleDateString.length; +expect = 0; +addTestCase(); + +/* Date.parse is accurate to the second; valueOf() to the millisecond. + Here we expect them to coincide, as we expect a time of exactly midnight - */ +status = "(Date.parse(now.toLocaleDateString('en-US')) - (midnight(now)).valueOf()) == 0"; +actual = (Date.parse(now.toLocaleDateString('en-US')) - (midnight(now)).valueOf()) == 0; +expect = true; +addTestCase(); + + + +// 1970 +addDateTestCase(0); +addDateTestCase(TZ_ADJUST); + + +// 1900 +addDateTestCase(TIME_1900); +addDateTestCase(TIME_1900 - TZ_ADJUST); + + +// 2000 +addDateTestCase(TIME_2000); +addDateTestCase(TIME_2000 - TZ_ADJUST); + + +// 29 Feb 2000 +addDateTestCase(UTC_29_FEB_2000); +addDateTestCase(UTC_29_FEB_2000 - 1000); +addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST); + + +// 2005 +addDateTestCase(UTC_1_JAN_2005); +addDateTestCase(UTC_1_JAN_2005 - 1000); +addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST); + + + +//----------------------------------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------------------------------- + + +function addTestCase() +{ + new TestCase( + "unknown-test-name", + status, + expect, + actual); +} + + +function addDateTestCase(date_given_in_milliseconds) +{ + var givenDate = new Date(date_given_in_milliseconds); + + status = 'Date.parse(' + givenDate + ').toLocaleDateString("en-US"))'; + actual = Date.parse(givenDate.toLocaleDateString("en-US")); + expect = Date.parse(midnight(givenDate)); + addTestCase(); +} + + +function midnight(givenDate) +{ + // midnight on the given date - + return new Date(givenDate.getFullYear(), givenDate.getMonth(), givenDate.getDate()); +} + diff --git a/source/spidermonkey-tests/ecma_3/Date/15.9.5.7.js b/source/spidermonkey-tests/ecma_3/Date/15.9.5.7.js new file mode 100644 index 00000000..f116f3e6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/15.9.5.7.js @@ -0,0 +1,108 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + File Name: 15.9.5.7.js + ECMA Section: 15.9.5.7 Date.prototype.toLocaleTimeString() + Description: + This function returns a string value. The contents of the string are + implementation dependent, but are intended to represent the "time" + portion of the Date in the current time zone in a convenient, + human-readable form. We test the content of the string by checking + that + + new Date(d.toDateString() + " " + d.toLocaleTimeString()) == d + + Author: pschwartau@netscape.com + Date: 14 november 2000 + Revised: 07 january 2002 because of a change in JS Date format: + Revised: 21 November 2005 since the string comparison stuff is horked. + bclary + + See http://bugzilla.mozilla.org/show_bug.cgi?id=118266 (SpiderMonkey) + See http://bugzilla.mozilla.org/show_bug.cgi?id=118636 (Rhino) +*/ +//----------------------------------------------------------------------------- +var SECTION = "15.9.5.7"; +var VERSION = "ECMA_3"; +var TITLE = "Date.prototype.toLocaleTimeString()"; + +var status = ''; +var actual = ''; +var expect = ''; +var givenDate; +var year = ''; +var regexp = ''; +var TimeString = ''; +var reducedDateString = ''; +var hopeThisIsLocaleTimeString = ''; +var cnERR ='OOPS! FATAL ERROR: no regexp match in extractLocaleTimeString()'; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// first, a couple generic tests - + +status = "typeof (now.toLocaleTimeString())"; +actual = typeof (now.toLocaleTimeString()); +expect = "string"; +addTestCase(); + +status = "Date.prototype.toLocaleTimeString.length"; +actual = Date.prototype.toLocaleTimeString.length; +expect = 0; +addTestCase(); + +// 1970 +addDateTestCase(0); +addDateTestCase(TZ_ADJUST); + +// 1900 +addDateTestCase(TIME_1900); +addDateTestCase(TIME_1900 - TZ_ADJUST); + +// 2000 +addDateTestCase(TIME_2000); +addDateTestCase(TIME_2000 - TZ_ADJUST); + +// 29 Feb 2000 +addDateTestCase(UTC_29_FEB_2000); +addDateTestCase(UTC_29_FEB_2000 - 1000); +addDateTestCase(UTC_29_FEB_2000 - TZ_ADJUST); + +// Now +addDateTestCase( TIME_NOW); +addDateTestCase( TIME_NOW - TZ_ADJUST); + +// 2005 +addDateTestCase(UTC_1_JAN_2005); +addDateTestCase(UTC_1_JAN_2005 - 1000); +addDateTestCase(UTC_1_JAN_2005 - TZ_ADJUST); + +test(); + +function addTestCase() +{ + new TestCase( + SECTION, + status, + expect, + actual); +} + + +function addDateTestCase(date_given_in_milliseconds) +{ + var s = 'new Date(' + date_given_in_milliseconds + ')'; + givenDate = new Date(date_given_in_milliseconds); + + status = 'd = ' + s + + '; d == new Date(d.toDateString() + " " + d.toLocaleTimeString())'; + expect = givenDate.toString(); + actual = new Date(givenDate.toDateString() + + ' ' + givenDate.toLocaleTimeString()).toString(); + addTestCase(); +} + diff --git a/source/spidermonkey-tests/ecma_3/Date/browser.js b/source/spidermonkey-tests/ecma_3/Date/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Date/regress-452786.js b/source/spidermonkey-tests/ecma_3/Date/regress-452786.js new file mode 100644 index 00000000..a140a844 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/regress-452786.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452786; +var summary = 'Do not crash with (new Date()).getMonth.call(new Function())'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (new Date()).getMonth.call(new Function()); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Date/shell.js b/source/spidermonkey-tests/ecma_3/Date/shell.js new file mode 100644 index 00000000..bc01272b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Date/shell.js @@ -0,0 +1,530 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/* + * Date functions used by tests in Date suite + * + */ +var msPerDay = 86400000; +var HoursPerDay = 24; +var MinutesPerHour = 60; +var SecondsPerMinute = 60; +var msPerSecond = 1000; +var msPerMinute = 60000; // msPerSecond * SecondsPerMinute +var msPerHour = 3600000; // msPerMinute * MinutesPerHour +var TZ_DIFF = getTimeZoneDiff(); // offset of tester's timezone from UTC +var TZ_ADJUST = TZ_DIFF * msPerHour; +var TZ_PST = -8; // offset of Pacific Standard Time from UTC +var PST_DIFF = TZ_DIFF - TZ_PST; // offset of tester's timezone from PST +var TIME_1970 = 0; +var TIME_2000 = 946684800000; +var TIME_1900 = -2208988800000; +var UTC_29_FEB_2000 = TIME_2000 + 31*msPerDay + 28*msPerDay; +var UTC_1_JAN_2005 = TIME_2000 + TimeInYear(2000) + TimeInYear(2001) + + TimeInYear(2002) + TimeInYear(2003) + TimeInYear(2004); +var now = new Date(); +var TIME_NOW = now.valueOf(); //valueOf() is to accurate to the millisecond + //Date.parse() is accurate only to the second + +/* + * Originally, the test suite used a hard-coded value TZ_DIFF = -8. + * But that was only valid for testers in the Pacific Standard Time Zone! + * We calculate the proper number dynamically for any tester. We just + * have to be careful not to use a date subject to Daylight Savings Time... + */ +function getTimeZoneDiff() +{ + return -((new Date(2000, 1, 1)).getTimezoneOffset())/60; +} + + +/* + * Date test "ResultArrays" are hard-coded for Pacific Standard Time. + * We must adjust them for the tester's own timezone - + */ +function adjustResultArray(ResultArray, msMode) +{ + // If the tester's system clock is in PST, no need to continue - + if (!PST_DIFF) {return;} + + /* The date testcases instantiate Date objects in two different ways: + * + * millisecond mode: e.g. dt = new Date(10000000); + * year-month-day mode: dt = new Date(2000, 5, 1, ...); + * + * In the first case, the date is measured from Time 0 in Greenwich (i.e. UTC). + * In the second case, it is measured with reference to the tester's local timezone. + * + * In the first case we must correct those values expected for local measurements, + * like dt.getHours() etc. No correction is necessary for dt.getUTCHours() etc. + * + * In the second case, it is exactly the other way around - + */ + if (msMode) + { + // The hard-coded UTC milliseconds from Time 0 derives from a UTC date. + // Shift to the right by the offset between UTC and the tester. + var t = ResultArray[TIME] + TZ_DIFF*msPerHour; + + // Use our date arithmetic functions to determine the local hour, day, etc. + ResultArray[HOURS] = HourFromTime(t); + ResultArray[DAY] = WeekDay(t); + ResultArray[DATE] = DateFromTime(t); + ResultArray[MONTH] = MonthFromTime(t); + ResultArray[YEAR] = YearFromTime(t); + } + else + { + // The hard-coded UTC milliseconds from Time 0 derives from a PST date. + // Shift to the left by the offset between PST and the tester. + var t = ResultArray[TIME] - PST_DIFF*msPerHour; + + // Use our date arithmetic functions to determine the UTC hour, day, etc. + ResultArray[TIME] = t; + ResultArray[UTC_HOURS] = HourFromTime(t); + ResultArray[UTC_DAY] = WeekDay(t); + ResultArray[UTC_DATE] = DateFromTime(t); + ResultArray[UTC_MONTH] = MonthFromTime(t); + ResultArray[UTC_YEAR] = YearFromTime(t); + } +} + + +function Day( t ) { + return ( Math.floor(t/msPerDay ) ); +} +function DaysInYear( y ) { + if ( y % 4 != 0 ) { + return 365; + } + if ( (y % 4 == 0) && (y % 100 != 0) ) { + return 366; + } + if ( (y % 100 == 0) && (y % 400 != 0) ) { + return 365; + } + if ( (y % 400 == 0) ){ + return 366; + } else { + return "ERROR: DaysInYear(" + y + ") case not covered"; + } +} +function TimeInYear( y ) { + return ( DaysInYear(y) * msPerDay ); +} +function DayNumber( t ) { + return ( Math.floor( t / msPerDay ) ); +} +function TimeWithinDay( t ) { + + var r = t % msPerDay; + + if (r < 0) + { + r += msPerDay; + } + return r; + +} +function YearNumber( t ) { +} +function TimeFromYear( y ) { + return ( msPerDay * DayFromYear(y) ); +} +function DayFromYear( y ) { + return ( 365*(y-1970) + + Math.floor((y-1969)/4) - + Math.floor((y-1901)/100) + + Math.floor((y-1601)/400) ); +} +function InLeapYear( t ) { + if ( DaysInYear(YearFromTime(t)) == 365 ) { + return 0; + } + if ( DaysInYear(YearFromTime(t)) == 366 ) { + return 1; + } else { + return "ERROR: InLeapYear("+ t + ") case not covered"; + } +} +function YearFromTime( t ) { + t = Number( t ); + var sign = ( t < 0 ) ? -1 : 1; + var year = ( sign < 0 ) ? 1969 : 1970; + for ( var timeToTimeZero = t; ; ) { + // subtract the current year's time from the time that's left. + timeToTimeZero -= sign * TimeInYear(year) + + // if there's less than the current year's worth of time left, then break. + if ( sign < 0 ) { + if ( sign * timeToTimeZero <= 0 ) { + break; + } else { + year += sign; + } + } else { + if ( sign * timeToTimeZero < 0 ) { + break; + } else { + year += sign; + } + } + } + return ( year ); +} +function MonthFromTime( t ) { + // i know i could use switch but i'd rather not until it's part of ECMA + var day = DayWithinYear( t ); + var leap = InLeapYear(t); + + if ( (0 <= day) && (day < 31) ) { + return 0; + } + if ( (31 <= day) && (day < (59+leap)) ) { + return 1; + } + if ( ((59+leap) <= day) && (day < (90+leap)) ) { + return 2; + } + if ( ((90+leap) <= day) && (day < (120+leap)) ) { + return 3; + } + if ( ((120+leap) <= day) && (day < (151+leap)) ) { + return 4; + } + if ( ((151+leap) <= day) && (day < (181+leap)) ) { + return 5; + } + if ( ((181+leap) <= day) && (day < (212+leap)) ) { + return 6; + } + if ( ((212+leap) <= day) && (day < (243+leap)) ) { + return 7; + } + if ( ((243+leap) <= day) && (day < (273+leap)) ) { + return 8; + } + if ( ((273+leap) <= day) && (day < (304+leap)) ) { + return 9; + } + if ( ((304+leap) <= day) && (day < (334+leap)) ) { + return 10; + } + if ( ((334+leap) <= day) && (day < (365+leap)) ) { + return 11; + } else { + return "ERROR: MonthFromTime("+t+") not known"; + } +} +function DayWithinYear( t ) { + return( Day(t) - DayFromYear(YearFromTime(t))); +} +function DateFromTime( t ) { + var day = DayWithinYear(t); + var month = MonthFromTime(t); + + if ( month == 0 ) { + return ( day + 1 ); + } + if ( month == 1 ) { + return ( day - 30 ); + } + if ( month == 2 ) { + return ( day - 58 - InLeapYear(t) ); + } + if ( month == 3 ) { + return ( day - 89 - InLeapYear(t)); + } + if ( month == 4 ) { + return ( day - 119 - InLeapYear(t)); + } + if ( month == 5 ) { + return ( day - 150- InLeapYear(t)); + } + if ( month == 6 ) { + return ( day - 180- InLeapYear(t)); + } + if ( month == 7 ) { + return ( day - 211- InLeapYear(t)); + } + if ( month == 8 ) { + return ( day - 242- InLeapYear(t)); + } + if ( month == 9 ) { + return ( day - 272- InLeapYear(t)); + } + if ( month == 10 ) { + return ( day - 303- InLeapYear(t)); + } + if ( month == 11 ) { + return ( day - 333- InLeapYear(t)); + } + + return ("ERROR: DateFromTime("+t+") not known" ); +} +function WeekDay( t ) { + var weekday = (Day(t)+4) % 7; + return( weekday < 0 ? 7 + weekday : weekday ); +} + +// missing daylight savings time adjustment + +function HourFromTime( t ) { + var h = Math.floor( t / msPerHour ) % HoursPerDay; + return ( (h<0) ? HoursPerDay + h : h ); +} +function MinFromTime( t ) { + var min = Math.floor( t / msPerMinute ) % MinutesPerHour; + return( ( min < 0 ) ? MinutesPerHour + min : min ); +} +function SecFromTime( t ) { + var sec = Math.floor( t / msPerSecond ) % SecondsPerMinute; + return ( (sec < 0 ) ? SecondsPerMinute + sec : sec ); +} +function msFromTime( t ) { + var ms = t % msPerSecond; + return ( (ms < 0 ) ? msPerSecond + ms : ms ); +} +function LocalTZA() { + return ( TZ_DIFF * msPerHour ); +} +function UTC( t ) { + return ( t - LocalTZA() - DaylightSavingTA(t - LocalTZA()) ); +} + +function DaylightSavingTA( t ) { + t = t - LocalTZA(); + + var dst_start = GetDSTStart(t); + var dst_end = GetDSTEnd(t); + + if ( t >= dst_start && t < dst_end ) + return msPerHour; + + return 0; +} + +function GetFirstSundayInMonth( t, m ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + +// month m 0..11 +// april == 3 +// march == 2 + + // set time to first day of month m + var time = TimeFromYear(year); + for (var i = 0; i < m; ++i) + { + time += TimeInMonth(i, leap); + } + + for ( var first_sunday = time; WeekDay(first_sunday) > 0; + first_sunday += msPerDay ) + { + ; + } + + return first_sunday; +} + +function GetLastSundayInMonth( t, m ) { + var year = YearFromTime(t); + var leap = InLeapYear(t); + +// month m 0..11 +// april == 3 +// march == 2 + + // first day of following month + var time = TimeFromYear(year); + for (var i = 0; i <= m; ++i) + { + time += TimeInMonth(i, leap); + } + // prev day == last day of month + time -= msPerDay; + + for ( var last_sunday = time; WeekDay(last_sunday) > 0; + last_sunday -= msPerDay ) + { + ; + } + return last_sunday; +} + +/* + 15.9.1.9 Daylight Saving Time Adjustment + + The implementation of ECMAScript should not try to determine whether + the exact time was subject to daylight saving time, but just whether + daylight saving time would have been in effect if the current + daylight saving time algorithm had been used at the time. This avoids + complications such as taking into account the years that the locale + observed daylight saving time year round. +*/ + +/* + US DST algorithm + + Before 2007, DST starts first Sunday in April at 2 AM and ends last + Sunday in October at 2 AM + + Starting in 2007, DST starts second Sunday in March at 2 AM and ends + first Sunday in November at 2 AM + + Note that different operating systems behave differently. + + Fully patched Windows XP uses the 2007 algorithm for all dates while + fully patched Fedora Core 6 and RHEL 4 Linux use the algorithm in + effect at the time. + + Since pre-2007 DST is a subset of 2007 DST rules, this only affects + tests that occur in the period Mar-Apr and Oct-Nov where the two + algorithms do not agree. + +*/ + +function GetDSTStart( t ) +{ + return (GetFirstSundayInMonth(t, 2) + 7*msPerDay + 2*msPerHour - LocalTZA()); +} + +function GetDSTEnd( t ) +{ + return (GetFirstSundayInMonth(t, 10) + 2*msPerHour - LocalTZA()); +} + +function GetOldDSTStart( t ) +{ + return (GetFirstSundayInMonth(t, 3) + 2*msPerHour - LocalTZA()); +} + +function GetOldDSTEnd( t ) +{ + return (GetLastSundayInMonth(t, 9) + 2*msPerHour - LocalTZA()); +} + +function LocalTime( t ) { + return ( t + LocalTZA() + DaylightSavingTA(t) ); +} +function MakeTime( hour, min, sec, ms ) { + if ( isNaN( hour ) || isNaN( min ) || isNaN( sec ) || isNaN( ms ) ) { + return Number.NaN; + } + + hour = ToInteger(hour); + min = ToInteger( min); + sec = ToInteger( sec); + ms = ToInteger( ms ); + + return( (hour*msPerHour) + (min*msPerMinute) + + (sec*msPerSecond) + ms ); +} +function MakeDay( year, month, date ) { + if ( isNaN(year) || isNaN(month) || isNaN(date) ) { + return Number.NaN; + } + year = ToInteger(year); + month = ToInteger(month); + date = ToInteger(date ); + + var sign = ( year < 1970 ) ? -1 : 1; + var t = ( year < 1970 ) ? 1 : 0; + var y = ( year < 1970 ) ? 1969 : 1970; + + var result5 = year + Math.floor( month/12 ); + var result6 = month % 12; + + if ( year < 1970 ) { + for ( y = 1969; y >= year; y += sign ) { + t += sign * TimeInYear(y); + } + } else { + for ( y = 1970 ; y < year; y += sign ) { + t += sign * TimeInYear(y); + } + } + + var leap = InLeapYear( t ); + + for ( var m = 0; m < month; m++ ) { + t += TimeInMonth( m, leap ); + } + + if ( YearFromTime(t) != result5 ) { + return Number.NaN; + } + if ( MonthFromTime(t) != result6 ) { + return Number.NaN; + } + if ( DateFromTime(t) != 1 ) { + return Number.NaN; + } + + return ( (Day(t)) + date - 1 ); +} +function TimeInMonth( month, leap ) { + // september april june november + // jan 0 feb 1 mar 2 apr 3 may 4 june 5 jul 6 + // aug 7 sep 8 oct 9 nov 10 dec 11 + + if ( month == 3 || month == 5 || month == 8 || month == 10 ) { + return ( 30*msPerDay ); + } + + // all the rest + if ( month == 0 || month == 2 || month == 4 || month == 6 || + month == 7 || month == 9 || month == 11 ) { + return ( 31*msPerDay ); + } + + // save february + return ( (leap == 0) ? 28*msPerDay : 29*msPerDay ); +} +function MakeDate( day, time ) { + if ( day == Number.POSITIVE_INFINITY || + day == Number.NEGATIVE_INFINITY ) { + return Number.NaN; + } + if ( time == Number.POSITIVE_INFINITY || + time == Number.NEGATIVE_INFINITY ) { + return Number.NaN; + } + return ( day * msPerDay ) + time; +} +function TimeClip( t ) { + if ( isNaN( t ) ) { + return ( Number.NaN ); + } + if ( Math.abs( t ) > 8.64e15 ) { + return ( Number.NaN ); + } + + return ( ToInteger( t ) ); +} +function ToInteger( t ) { + t = Number( t ); + + if ( isNaN( t ) ){ + return ( Number.NaN ); + } + if ( t == 0 || t == -0 || + t == Number.POSITIVE_INFINITY || t == Number.NEGATIVE_INFINITY ) { + return 0; + } + + var sign = ( t < 0 ) ? -1 : 1; + + return ( sign * Math.floor( Math.abs( t ) ) ); +} +function Enumerate ( o ) { + var p; + for ( p in o ) { + print( p +": " + o[p] ); + } +} + diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/15.11.1.1.js b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.1.1.js new file mode 100644 index 00000000..bcba1613 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.1.1.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 27 Nov 2002 + * SUMMARY: Ensuring normal function call of Error (ECMA-262 Ed.3 15.11.1.1). + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = ''; +var summary = 'Ensuring normal function call of Error (ECMA-262 Ed.3 15.11.1.1)'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var EMPTY_STRING = ''; +var EXPECTED_FORMAT = 0; + + +function otherScope(msg) +{ + return Error(msg); +} + + +status = inSection(1); +var err1 = Error('msg1'); +actual = examineThis(err1, 'msg1'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(2); +var err2 = otherScope('msg2'); +actual = examineThis(err2, 'msg2'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(3); +var err3 = otherScope(); +actual = examineThis(err3, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(4); +var err4 = eval("Error('msg4')"); +actual = examineThis(err4, 'msg4'); +expect = EXPECTED_FORMAT; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Searches err.toString() for err.name + ':' + err.message, + * with possible whitespace on each side of the colon sign. + * + * We allow for no colon in case err.message was not provided by the user. + * In such a case, SpiderMonkey and Rhino currently set err.message = '', + * as allowed for by ECMA 15.11.4.3. This makes |pattern| work in this case. + * + * If this is ever changed to a non-empty string, e.g. 'undefined', + * you may have to modify |pattern| to take that into account - + * + */ +function examineThis(err, msg) +{ + var pattern = err.name + '\\s*:?\\s*' + msg; + return err.toString().search(RegExp(pattern)); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/15.11.4.4-1.js b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.4.4-1.js new file mode 100644 index 00000000..33346013 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.4.4-1.js @@ -0,0 +1,140 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 22 Jan 2002 + * SUMMARY: Testing Error.prototype.toString() + * + * Revised: 25 Nov 2002 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=181909 + * + * Note that ECMA-262 3rd Edition Final, Section 15.11.4.4 states that + * Error.prototype.toString() returns an implementation-dependent string. + * Therefore any testcase on this property is somewhat arbitrary. + * + * However, d-russo@ti.com pointed out that Rhino was returning this: + * + * js> err = new Error() + * undefined: undefined + * + * js> err = new Error("msg") + * undefined: msg + * + * + * We expect Rhino to return what SpiderMonkey currently does: + * + * js> err = new Error() + * Error + * + * js> err = new Error("msg") + * Error: msg + * + * + * i.e. we expect err.toString() === err.name if err.message is not defined; + * otherwise, we expect err.toString() === err.name + ': ' + err.message. + * + * See also ECMA 15.11.4.2, 15.11.4.3 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing Error.prototype.toString()'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var EMPTY_STRING = ''; +var EXPECTED_FORMAT = 0; + + +status = inSection(1); +var err1 = new Error('msg1'); +actual = examineThis(err1, 'msg1'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(2); +var err2 = new Error(err1); +actual = examineThis(err2, err1); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(3); +var err3 = new Error(); +actual = examineThis(err3, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(4); +var err4 = new Error(EMPTY_STRING); +actual = examineThis(err4, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +// now generate a run-time error - +status = inSection(5); +try +{ + eval('1=2'); +} +catch(err5) +{ + actual = examineThis(err5, '.*'); +} +expect = EXPECTED_FORMAT; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Searches err.toString() for err.name + ':' + err.message, + * with possible whitespace on each side of the colon sign. + * + * We allow for no colon in case err.message was not provided by the user. + * In such a case, SpiderMonkey and Rhino currently set err.message = '', + * as allowed for by ECMA 15.11.4.3. This makes |pattern| work in this case. + * + * If this is ever changed to a non-empty string, e.g. 'undefined', + * you may have to modify |pattern| to take that into account - + * + */ +function examineThis(err, msg) +{ + var pattern = err.name + '\\s*:?\\s*' + msg; + return err.toString().search(RegExp(pattern)); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/15.11.5.js b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.5.js new file mode 100644 index 00000000..06902708 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.5.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 4 Oct 2010 + * SUMMARY: Error instances have no special properties beyond those inherited + * from the Error prototype object + */ +//----------------------------------------------------------------------------- +var summary = 'Error instances have no special properties beyond those inherited the Error prototype object'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printStatus (summary); + + var actual = ''; + var expect = 'TypeError: Error.prototype is not a constructor'; + try { + new Error.prototype; + } catch (e) { + actual = '' + e; + } + + reportCompare(actual, expect, "not a constructor"); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-001.js b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-001.js new file mode 100644 index 00000000..4c7dfb86 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-001.js @@ -0,0 +1,96 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 14 April 2003 + * SUMMARY: Prototype of predefined error objects should be DontEnum + * See http://bugzilla.mozilla.org/show_bug.cgi?id=201989 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 201989; +var summary = 'Prototype of predefined error objects should be DontEnum'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Tests that |F.prototype| is not enumerable in |F| + */ +function testDontEnum(F) +{ + var proto = F.prototype; + + for (var prop in F) + { + if (F[prop] === proto) + return false; + } + return true; +} + + +var list = [ + "Error", + "ConversionError", + "EvalError", + "RangeError", + "ReferenceError", + "SyntaxError", + "TypeError", + "URIError" + ]; + + +for (i in list) +{ + var F = this[list[i]]; + + // Test for |F|; e.g. Rhino defines |ConversionError| while SM does not. + if (F) + { + status = 'Testing DontEnum attribute of |' + list[i] + '.prototype|'; + actual = testDontEnum(F); + expect = true; + addThis(); + } +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-002.js b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-002.js new file mode 100644 index 00000000..b2a27921 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-002.js @@ -0,0 +1,98 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 14 April 2003 + * SUMMARY: Prototype of predefined error objects should be DontDelete + * See http://bugzilla.mozilla.org/show_bug.cgi?id=201989 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 201989; +var summary = 'Prototype of predefined error objects should be DontDelete'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Tests that |F.prototype| is DontDelete + */ +function testDontDelete(F) +{ + var e; + var orig = F.prototype; + try + { + delete F.prototype; + } + catch (e) + { + } + return F.prototype === orig; +} + + +var list = [ + "Error", + "ConversionError", + "EvalError", + "RangeError", + "ReferenceError", + "SyntaxError", + "TypeError", + "URIError" + ]; + + +for (i in list) +{ + var F = this[list[i]]; + + // Test for |F|; e.g. Rhino defines |ConversionError| while SM does not. + if (F) + { + status = 'Testing DontDelete attribute of |' + list[i] + '.prototype|'; + actual = testDontDelete(F); + expect = true; + addThis(); + } +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-003.js b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-003.js new file mode 100644 index 00000000..faf8e133 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/15.11.7.6-003.js @@ -0,0 +1,98 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 14 April 2003 + * SUMMARY: Prototype of predefined error objects should be ReadOnly + * See http://bugzilla.mozilla.org/show_bug.cgi?id=201989 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 201989; +var summary = 'Prototype of predefined error objects should be ReadOnly'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Tests that |F.prototype| is ReadOnly + */ +function testReadOnly(F) +{ + var e; + var orig = F.prototype; + try + { + F.prototype = new Object(); + } + catch (e) + { + } + return F.prototype === orig; +} + + +var list = [ + "Error", + "ConversionError", + "EvalError", + "RangeError", + "ReferenceError", + "SyntaxError", + "TypeError", + "URIError" + ]; + + +for (i in list) +{ + var F = this[list[i]]; + + // Test for |F|; e.g. Rhino defines |ConversionError| while SM does not. + if (F) + { + status = 'Testing ReadOnly attribute of |' + list[i] + '.prototype|'; + actual = testReadOnly(F); + expect = true; + addThis(); + } +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/binding-001.js b/source/spidermonkey-tests/ecma_3/Exceptions/binding-001.js new file mode 100644 index 00000000..dc070ac9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/binding-001.js @@ -0,0 +1,94 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-08-27 + * + * SUMMARY: Testing binding of function names + * + * Brendan: + * + * "... the question is, does Rhino bind 'sum' in the global object + * for the following test? If it does, it's buggy. + * + * var f = function sum(){}; + * print(sum); // should fail with 'sum is not defined' " + * + */ + +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing binding of function names'; +var ERR_REF_YES = 'ReferenceError'; +var ERR_REF_NO = 'did NOT generate a ReferenceError'; +var statusitems = []; +var actualvalues = []; +var expectedvalues = []; +var status = summary; +var actual = ERR_REF_NO; +var expect= ERR_REF_YES; + + +try +{ + var f = function sum(){}; + print(sum); +} +catch (e) +{ + status = 'Section 1 of test'; + actual = e instanceof ReferenceError; + expect = true; + addThis(); + + + /* + * This test is more literal, and one day may not be valid. + * Searching for literal string "ReferenceError" in e.toString() + */ + status = 'Section 2 of test'; + var match = e.toString().search(/ReferenceError/); + actual = (match > -1); + expect = true; + addThis(); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = isReferenceError(actual); + expectedvalues[UBound] = isReferenceError(expect); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +// converts a Boolean result into a textual result - +function isReferenceError(bResult) +{ + return bResult? ERR_REF_YES : ERR_REF_NO; +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/browser.js b/source/spidermonkey-tests/ecma_3/Exceptions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/regress-181654.js b/source/spidermonkey-tests/ecma_3/Exceptions/regress-181654.js new file mode 100644 index 00000000..2dbbd070 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/regress-181654.js @@ -0,0 +1,121 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 23 Nov 2002 + * SUMMARY: Calling toString for an object derived from the Error class + * results in an TypeError (Rhino only) + * See http://bugzilla.mozilla.org/show_bug.cgi?id=181654 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '181654'; +var summary = 'Calling toString for an object derived from the Error class should be possible.'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var EMPTY_STRING = ''; +var EXPECTED_FORMAT = 0; + + +// derive MyError from Error +function MyError( msg ) +{ + this.message = msg; +} +MyError.prototype = new Error(); +MyError.prototype.name = "MyError"; + + +status = inSection(1); +var err1 = new MyError('msg1'); +actual = examineThis(err1, 'msg1'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(2); +var err2 = new MyError(String(err1)); +actual = examineThis(err2, err1); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(3); +var err3 = new MyError(); +actual = examineThis(err3, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(4); +var err4 = new MyError(EMPTY_STRING); +actual = examineThis(err4, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +// now generate an error - +status = inSection(5); +try +{ + throw new MyError("thrown"); +} +catch(err5) +{ + actual = examineThis(err5, "thrown"); +} +expect = EXPECTED_FORMAT; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Searches err.toString() for err.name + ':' + err.message, + * with possible whitespace on each side of the colon sign. + * + * We allow for no colon in case err.message was not provided by the user. + * In such a case, SpiderMonkey and Rhino currently set err.message = '', + * as allowed for by ECMA 15.11.4.3. This makes |pattern| work in this case. + * + * If this is ever changed to a non-empty string, e.g. 'undefined', + * you may have to modify |pattern| to take that into account - + * + */ +function examineThis(err, msg) +{ + var pattern = err.name + '\\s*:?\\s*' + msg; + return err.toString().search(RegExp(pattern)); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/regress-181914.js b/source/spidermonkey-tests/ecma_3/Exceptions/regress-181914.js new file mode 100644 index 00000000..88934ee7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/regress-181914.js @@ -0,0 +1,160 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 25 Nov 2002 + * SUMMARY: Calling a user-defined superconstructor + * See http://bugzilla.mozilla.org/show_bug.cgi?id=181914, esp. Comment 10. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '181914'; +var summary = 'Calling a user-defined superconstructor'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var EMPTY_STRING = ''; +var EXPECTED_FORMAT = 0; + + +// make a user-defined version of the Error constructor +function _Error(msg) +{ + this.message = msg; +} +_Error.prototype = new Error(); +_Error.prototype.name = '_Error'; + + +// derive MyApplyError from _Error +function MyApplyError(msg) +{ + if(this instanceof MyApplyError) + _Error.apply(this, arguments); + else + return new MyApplyError(msg); +} +MyApplyError.prototype = new _Error(); +MyApplyError.prototype.name = "MyApplyError"; + + +// derive MyCallError from _Error +function MyCallError(msg) +{ + if(this instanceof MyCallError) + _Error.call(this, msg); + else + return new MyCallError(msg); +} +MyCallError.prototype = new _Error(); +MyCallError.prototype.name = "MyCallError"; + + +function otherScope(msg) +{ + return MyApplyError(msg); +} + + +status = inSection(1); +var err1 = new MyApplyError('msg1'); +actual = examineThis(err1, 'msg1'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(2); +var err2 = new MyCallError('msg2'); +actual = examineThis(err2, 'msg2'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(3); +var err3 = MyApplyError('msg3'); +actual = examineThis(err3, 'msg3'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(4); +var err4 = MyCallError('msg4'); +actual = examineThis(err4, 'msg4'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(5); +var err5 = otherScope('msg5'); +actual = examineThis(err5, 'msg5'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(6); +var err6 = otherScope(); +actual = examineThis(err6, EMPTY_STRING); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(7); +var err7 = eval("MyApplyError('msg7')"); +actual = examineThis(err7, 'msg7'); +expect = EXPECTED_FORMAT; +addThis(); + +status = inSection(8); +var err8; +try +{ + throw MyApplyError('msg8'); +} +catch(e) +{ + if(e instanceof Error) + err8 = e; +} +actual = examineThis(err8, 'msg8'); +expect = EXPECTED_FORMAT; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +// Searches |err.toString()| for |err.name + ':' + err.message| +function examineThis(err, msg) +{ + var pattern = err.name + '\\s*:?\\s*' + msg; + return err.toString().search(RegExp(pattern)); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/regress-58946.js b/source/spidermonkey-tests/ecma_3/Exceptions/regress-58946.js new file mode 100644 index 00000000..e24ccc77 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/regress-58946.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//------------------------------------------------------------------------------------------------- +var BUGNUMBER = '58946'; +var stat = 'Testing a return statement inside a catch statement inside a function'; + +test(); + +function test() { + enterFunc ("test"); + printBugNumber(BUGNUMBER); + printStatus (stat); + + expect = 'PASS'; + + function f() + { + try + { + throw 'PASS'; + } + catch(e) + { + return e; + } + } + + actual = f(); + + reportCompare(expect, actual, stat); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/regress-95101.js b/source/spidermonkey-tests/ecma_3/Exceptions/regress-95101.js new file mode 100644 index 00000000..5585ae04 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Exceptions/regress-95101.js @@ -0,0 +1,84 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 13 August 2001 + * + * SUMMARY: Invoking an undefined function should produce a ReferenceError + * See http://bugzilla.mozilla.org/show_bug.cgi?id=95101 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 95101; +var summary = 'Invoking an undefined function should produce a ReferenceError'; +var msgERR_REF_YES = 'ReferenceError'; +var msgERR_REF_NO = 'did NOT generate a ReferenceError'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +try +{ + xxxyyyzzz(); +} +catch (e) +{ + status = 'Section 1 of test'; + actual = e instanceof ReferenceError; + expect = true; + addThis(); + + + /* + * This test is more literal, and may one day be invalid. + * Searching for literal string "ReferenceError" in e.toString() + */ + status = 'Section 2 of test'; + var match = e.toString().search(/ReferenceError/); + actual = (match > -1); + expect = true; + addThis(); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = isReferenceError(actual); + expectedvalues[UBound] = isReferenceError(expect); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +// converts a Boolean result into a textual result - +function isReferenceError(bResult) +{ + return bResult? msgERR_REF_YES : msgERR_REF_NO; +} diff --git a/source/spidermonkey-tests/ecma_3/Exceptions/shell.js b/source/spidermonkey-tests/ecma_3/Exceptions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3-1.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3-1.js new file mode 100644 index 00000000..eb29e55e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3-1.js @@ -0,0 +1,167 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 11 Feb 2002 + * SUMMARY: Testing functions having duplicate formal parameter names + * + * Note: given function f(x,x,x,x) {return x;}; f(1,2,3,4) should return 4. + * See ECMA-262 3rd Edition Final Section 10.1.3: Variable Instantiation + * + * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=124900 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 124900; +var summary = 'Testing functions having duplicate formal parameter names'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f1(x,x) +{ + return x; +} +status = inSection(1); +actual = f1(1,2); +expect = 2; +addThis(); + + +function f2(x,x,x) +{ + return x*x*x; +} +status = inSection(2); +actual = f2(1,2,3); +expect = 27; +addThis(); + + +function f3(x,x,x,x) +{ + return 'a' + x + 'b' + x + 'c' + x ; +} +status = inSection(3); +actual = f3(1,2,3,4); +expect = 'a4b4c4'; +addThis(); + + +/* + * If the value of the last duplicate parameter is not provided by + * the function caller, the value of this parameter is undefined + */ +function f4(x,a,b,x,z) +{ + return x; +} +status = inSection(4); +actual = f4(1,2); +expect = undefined; +addThis(); + + +/* + * f.toString() should preserve any duplicate formal parameter names that exist + */ +function f5(x,x,x,x) +{ +} +status = inSection(5); +actual = f5.toString().match(/\((.*)\)/)[1]; +actual = actual.replace(/\s/g, ''); // for definiteness, remove any white space +expect = 'x,x,x,x'; +addThis(); + + +function f6(x,x,x,x) +{ + var ret = []; + + for (var i=0; i<arguments.length; i++) + ret.push(arguments[i]); + + return ret.toString(); +} +status = inSection(6); +actual = f6(1,2,3,4); +expect = '1,2,3,4'; +addThis(); + + +/* + * This variation (assigning to x inside f) is from nboyd@atg.com + * See http://bugzilla.mozilla.org/show_bug.cgi?id=124900 + */ +function f7(x,x,x,x) +{ + x = 999; + var ret = []; + + for (var i=0; i<arguments.length; i++) + ret.push(arguments[i]); + + return ret.toString(); +} +status = inSection(7); +actual = f7(1,2,3,4); +expect = '1,2,3,999'; +addThis(); + + +/* + * Same as above, but with |var| keyword added - + */ +function f8(x,x,x,x) +{ + var x = 999; + var ret = []; + + for (var i=0; i<arguments.length; i++) + ret.push(arguments[i]); + + return ret.toString(); +} +status = inSection(8); +actual = f8(1,2,3,4); +expect = '1,2,3,999'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3-2.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3-2.js new file mode 100644 index 00000000..295a58d4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3-2.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 395907; +var summary = 'eval of function declaration should change existing variable'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'typeof x: number, typeof x: function, x(): true'; + var x = "string"; + function f () { + var x = 0; + actual += 'typeof x: ' + (typeof x) + ', '; + eval('function x() { return true; }'); + actual += 'typeof x: ' + (typeof x) + ', '; + actual += 'x(): ' + x(); + } + f(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3.js new file mode 100644 index 00000000..0911afcb --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.3.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + ECMA Section: 10.1.3: Variable Instantiation + FunctionDeclarations are processed before VariableDeclarations, and + VariableDeclarations don't replace existing values with undefined +*/ + +test(); + +function f() +{ + var x; + + return typeof x; + + function x() + { + return 7; + } +} + +function test() +{ + enterFunc ("test"); + + printStatus ("ECMA Section: 10.1.3: Variable Instantiation."); + printBugNumber (17290); + + reportCompare ("function", f(), "Declaration precedence test"); + + exitFunc("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.4-1.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.4-1.js new file mode 100644 index 00000000..95cc5b47 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.1.4-1.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + ECMA Section: 10.1.4.1 Entering An Execution Context + ECMA says: + * Global Code, Function Code + Variable instantiation is performed using the global object as the + variable object and using property attributes { DontDelete }. + + * Eval Code + Variable instantiation is performed using the calling context's + variable object and using empty property attributes. +*/ + +var BUGNUMBER = '(none)'; +var summary = '10.1.4.1 Entering An Execution Context'; +var actual = ''; +var expect = ''; + +test(); + +function test() +{ + enterFunc ("test"); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var y; + eval("var x = 1"); + + if (delete y) + reportCompare('PASS', 'FAIL', "Expected *NOT* to be able to delete y"); + + if (typeof x == "undefined") + reportCompare('PASS', 'FAIL', "x did not remain defined after eval()"); + else if (x != 1) + reportCompare('PASS', 'FAIL', "x did not retain it's value after eval()"); + + if (!delete x) + reportCompare('PASS', 'FAIL', "Expected to be able to delete x"); + + reportCompare('PASS', 'PASS', '10.1.4.1 Entering An Execution Context'); + + exitFunc("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.6.1-01.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.6.1-01.js new file mode 100644 index 00000000..3de64457 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/ExecutionContexts/10.6.1-01.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 290774; +var summary = 'activation object never delegates to Object.prototype'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var toStringResult; +var evalResult; +var watchResult; +var parseIntResult; + +var eval = 'fooEval'; +var watch = undefined; +var parseInt = 'fooParseInt'; + + +function toString() +{ + return 'fooString'; +} + +function normal() +{ + toStringResult = toString; + evalResult = eval; + watchResult = watch; + parseIntResult = parseInt; +} + +function outerinnervar() +{ + toStringResult = toString; + evalResult = eval; + watchResult = watch; + parseIntResult = parseInt; + function inner() + { + // addition of any statement + // which accesses a variable + // from the outer scope causes the bug + printStatus(toString); + } +} + +expect = true; + +printStatus('normal'); +printStatus('======'); +normal(); + +printStatus('toStringResult ' + toStringResult); +printStatus('toString ' + toString); +actual = ((toStringResult + '') == (toString + '')); +reportCompare(expect, actual, inSection(1)); + +printStatus('evalResult ' + evalResult); +printStatus('eval ' + eval); +actual = ((evalResult + '') == (eval + '')); +reportCompare(expect, actual, inSection(2)); + +printStatus('watchResult ' + watchResult); +printStatus('watch ' + watch); +actual = ((watchResult + '') == (watch + '')); +reportCompare(expect, actual, inSection(3)); + +printStatus('parseIntResult ' + parseIntResult); +printStatus('parseInt ' + parseInt); +actual = ((parseIntResult + '') == (parseInt + '')); +reportCompare(expect, actual, inSection(4)); + +printStatus('outerinner'); +printStatus('=========='); + +outerinnervar(); + +printStatus('toStringResult ' + toStringResult); +printStatus('toString ' + toString); +actual = ((toStringResult + '') == (toString + '')); +reportCompare(expect, actual, inSection(5)); + + +printStatus('evalResult ' + evalResult); +printStatus('eval ' + eval); +actual = ((evalResult + '') == (eval + '')); +reportCompare(expect, actual, inSection(6)); + +printStatus('watchResult ' + watchResult); +printStatus('watch ' + watch); +actual = ((watchResult + '') == (watch + '')); +reportCompare(expect, actual, inSection(7)); + +printStatus('parseIntResult ' + parseIntResult); +printStatus('parseInt ' + parseInt); +actual = ((parseIntResult + '') == (parseInt + '')); +reportCompare(expect, actual, inSection(8)); diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/browser.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/regress-23346.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/regress-23346.js new file mode 100644 index 00000000..1b22b8c5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/ExecutionContexts/regress-23346.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var CALL_CALLED = "PASSED"; + +test(); + +function f(x) +{ + if (x) + return call(); + + return "FAILED!"; +} + +function call() +{ + return CALL_CALLED; +} + +function test() +{ + enterFunc ("test"); + + printStatus ("ECMA Section: 10.1.3: Variable Instantiation."); + printBugNumber (23346); + + reportCompare ("PASSED", f(true), + "Unqualified reference should not see Function.prototype"); + + exitFunc("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/regress-448595-01.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/regress-448595-01.js new file mode 100644 index 00000000..36359eb2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/ExecutionContexts/regress-448595-01.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 448595; +var summary = 'scope chain var declaration with initialiser in |with| clauses'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + + expect = 'bar'; + + f = function(){ + var e = "bar"; + with({e:"foo"}) { + var e = "wibble"; + }; + + actual = e; + } + + f(); + + reportCompare(expect, actual, summary + ': with'); + + f = function(){ + var e = "bar"; + try + { + throw {e:"foo"}; + } + catch(e) { + var e = "wibble"; + }; + + actual = e; + } + + f(); + + reportCompare(expect, actual, summary + ': catch'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/ExecutionContexts/shell.js b/source/spidermonkey-tests/ecma_3/ExecutionContexts/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.10-01.js b/source/spidermonkey-tests/ecma_3/Expressions/11.10-01.js new file mode 100644 index 00000000..1810f579 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.10-01.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396969; +var summary = '11.10 - & should evaluate operands in order'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'o.valueOf, p.valueOf'; + var actualval; + var expectval = 2; + + var o = { + valueOf: (function (){ actual += 'o.valueOf'; return this.value}), + value:42 + }; + + var p = { + valueOf: (function (){ actual += ', p.valueOf'; return this.value}), + value:2 + }; + + actualval = (o & p); + + reportCompare(expectval, actualval, summary + ': value'); + reportCompare(expect, actual, summary + ': order'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.10-02.js b/source/spidermonkey-tests/ecma_3/Expressions/11.10-02.js new file mode 100644 index 00000000..2f3e3c99 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.10-02.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396969; +var summary = '11.10 - ^ should evaluate operands in order'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'o.valueOf, p.valueOf'; + var actualval; + var expectval = 40; + + var o = { + valueOf: (function (){ actual += 'o.valueOf'; return this.value}), + value:42 + }; + + var p = { + valueOf: (function (){ actual += ', p.valueOf'; return this.value}), + value:2 + }; + + actualval = (o ^ p); + + reportCompare(expectval, actualval, summary + ': value'); + reportCompare(expect, actual, summary + ': order'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.10-03.js b/source/spidermonkey-tests/ecma_3/Expressions/11.10-03.js new file mode 100644 index 00000000..fba85c8f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.10-03.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396969; +var summary = '11.10 - | should evaluate operands in order'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'o.valueOf, p.valueOf'; + var actualval; + var expectval = 42; + + var o = { + valueOf: (function (){ actual += 'o.valueOf'; return this.value}), + value:42 + }; + + var p = { + valueOf: (function (){ actual += ', p.valueOf'; return this.value}), + value:2 + }; + + actualval = (o | p); + + reportCompare(expectval, actualval, summary + ': value'); + reportCompare(expect, actual, summary + ': order'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.6.1-1.js b/source/spidermonkey-tests/ecma_3/Expressions/11.6.1-1.js new file mode 100644 index 00000000..76e71f30 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.6.1-1.js @@ -0,0 +1,142 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 14 Mar 2003 + * SUMMARY: Testing left-associativity of the + operator + * + * See ECMA-262 Ed.3, Section 11.6.1, "The Addition operator" + * See http://bugzilla.mozilla.org/show_bug.cgi?id=196290 + * + * The upshot: |a + b + c| should always equal |(a + b) + c| + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 196290; +var summary = 'Testing left-associativity of the + operator'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +actual = 1 + 1 + 'px'; +expect = '2px'; +addThis(); + +status = inSection(2); +actual = 'px' + 1 + 1; +expect = 'px11'; +addThis(); + +status = inSection(3); +actual = 1 + 1 + 1 + 'px'; +expect = '3px'; +addThis(); + +status = inSection(4); +actual = 1 + 1 + 'a' + 1 + 1 + 'b'; +expect = '2a11b'; +addThis(); + +/* + * The next sections test the + operator via eval() + */ +status = inSection(5); +actual = sumThese(1, 1, 'a', 1, 1, 'b'); +expect = '2a11b'; +addThis(); + +status = inSection(6); +actual = sumThese(new Number(1), new Number(1), 'a'); +expect = '2a'; +addThis(); + +status = inSection(7); +actual = sumThese('a', new Number(1), new Number(1)); +expect = 'a11'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + +/* + * Applies the + operator to the provided arguments via eval(). + * + * Form an eval string of the form 'arg1 + arg2 + arg3', but + * remember to add double-quotes inside the eval string around + * any argument that is of string type. For example, suppose the + * arguments were 11, 'a', 22. Then the eval string should be + * + * arg1 + quoteThis(arg2) + arg3 + * + * If we didn't put double-quotes around the string argument, + * we'd get this for an eval string: + * + * '11 + a + 22' + * + * If we eval() this, we get 'ReferenceError: a is not defined'. + * With proper quoting, we get eval('11 + "a" + 22') as desired. + */ +function sumThese() +{ + var sEval = ''; + var arg; + var i; + + var L = arguments.length; + for (i=0; i<L; i++) + { + arg = arguments[i]; + if (typeof arg === 'string') + arg = quoteThis(arg); + + if (i < L-1) + sEval += arg + ' + '; + else + sEval += arg; + } + + return eval(sEval); +} + + +function quoteThis(x) +{ + return '"' + x + '"'; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.7.1-01.js b/source/spidermonkey-tests/ecma_3/Expressions/11.7.1-01.js new file mode 100644 index 00000000..b839c295 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.7.1-01.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396969; +var summary = '11.7.1 - << should evaluate operands in order'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'o.valueOf, p.valueOf'; + var actualval; + var expectval = 168; + + var o = { + valueOf: (function (){ actual += 'o.valueOf'; return this.value}), + value:42 + }; + + var p = { + valueOf: (function (){ actual += ', p.valueOf'; return this.value}), + value:2 + }; + + actualval = (o << p); + + reportCompare(expectval, actualval, summary + ': value'); + reportCompare(expect, actual, summary + ': order'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.7.2-01.js b/source/spidermonkey-tests/ecma_3/Expressions/11.7.2-01.js new file mode 100644 index 00000000..072edc7b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.7.2-01.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396969; +var summary = '11.7.2 - >> should evaluate operands in order'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'o.valueOf, p.valueOf'; + var actualval; + var expectval = 10; + + var o = { + valueOf: (function (){ actual += 'o.valueOf'; return this.value}), + value:42 + }; + + var p = { + valueOf: (function (){ actual += ', p.valueOf'; return this.value}), + value:2 + }; + + actualval = (o >> p); + + reportCompare(expectval, actualval, summary + ': value'); + reportCompare(expect, actual, summary + ': order'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.7.3-01.js b/source/spidermonkey-tests/ecma_3/Expressions/11.7.3-01.js new file mode 100644 index 00000000..75227e24 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.7.3-01.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396969; +var summary = '11.7.3 - >>> should evaluate operands in order'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'o.valueOf, p.valueOf'; + var actualval; + var expectval = 10; + + var o = { + valueOf: (function (){ actual += 'o.valueOf'; return this.value}), + value:42 + }; + + var p = { + valueOf: (function (){ actual += ', p.valueOf'; return this.value}), + value:2 + }; + + actualval = (o >>> p); + + reportCompare(expectval, actualval, summary + ': value'); + reportCompare(expect, actual, summary + ': order'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/11.9.6-1.js b/source/spidermonkey-tests/ecma_3/Expressions/11.9.6-1.js new file mode 100644 index 00000000..ccf9e7b6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Expressions/11.9.6-1.js @@ -0,0 +1,179 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 20 Feb 2002 + * SUMMARY: Testing the comparison |undefined === null| + * See http://bugzilla.mozilla.org/show_bug.cgi?id=126722 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 126722; +var summary = 'Testing the comparison |undefined === null|'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +if (undefined === null) + actual = true; +else + actual = false; +expect = false; +addThis(); + + + +status = inSection(2); +switch(true) +{ +case (undefined === null) : + actual = true; + break; + +default: + actual = false; +} +expect = false; +addThis(); + + + +status = inSection(3); +function f3(x) +{ + var res = false; + + switch(true) + { + case (x === null) : + res = true; + break; + + default: + // do nothing + } + + return res; +} + +actual = f3(undefined); +expect = false; +addThis(); + + + +status = inSection(4); +function f4(arr) +{ + var elt = ''; + var res = false; + + for (i=0; i<arr.length; i++) + { + elt = arr[i]; + + switch(true) + { + case (elt === null) : + res = true; + break; + + default: + // do nothing + } + } + + return res; +} + +var arr = Array('a', undefined); +actual = f4(arr); +expect = false; +addThis(); + + + +status = inSection(5); +function f5(arr) +{ + var len = arr.length; + + for(var i=0; (arr[i]===undefined) && (i<len); i++) + ; //do nothing + + return i; +} + +/* + * An array of 5 undefined elements. Note: + * + * The return value of eval(a STATEMENT) is undefined. + * A non-existent PROPERTY is undefined, not a ReferenceError. + * No undefined element exists AFTER trailing comma at end. + * + */ +var arrUndef = [ , undefined, eval('var x = 0'), this.NOT_A_PROPERTY, , ]; +actual = f5(arrUndef); +expect = 5; +addThis(); + + + +status = inSection(6); +function f6(arr) +{ + var len = arr.length; + + for(var i=0; (arr[i]===null) && (i<len); i++) + ; //do nothing + + return i; +} + +/* + * Use same array as above. This time we're comparing to |null|, so we expect 0 + */ +actual = f6(arrUndef); +expect = 0; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Expressions/browser.js b/source/spidermonkey-tests/ecma_3/Expressions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Expressions/shell.js b/source/spidermonkey-tests/ecma_3/Expressions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/browser.js b/source/spidermonkey-tests/ecma_3/FunExpr/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/fe-001-n.js b/source/spidermonkey-tests/ecma_3/FunExpr/fe-001-n.js new file mode 100644 index 00000000..2af7bfa2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/fe-001-n.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "Previous statement should have thrown a ReferenceError"; +EXPECTED = "error"; + +test(); + +function test() +{ + enterFunc ("test"); + printStatus ("Function Expression test."); + + var x = function f(){return "inner";}(); + var y = f(); + reportCompare('PASS', 'FAIL', "Previous statement should have thrown a ReferenceError"); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/fe-001.js b/source/spidermonkey-tests/ecma_3/FunExpr/fe-001.js new file mode 100644 index 00000000..65c9b737 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/fe-001.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +if (1) function f() {return 1;} +if (0) function f() {return 0;} + +function test() +{ + enterFunc ("test"); + + printStatus ("Function Expression Statements basic test."); + + reportCompare (1, f(), "Both functions were defined."); + + exitFunc ("test"); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/fe-002.js b/source/spidermonkey-tests/ecma_3/FunExpr/fe-002.js new file mode 100644 index 00000000..bb0f1a71 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/fe-002.js @@ -0,0 +1,25 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +function f() +{ + return "outer"; +} + +function test() +{ + enterFunc ("test"); + printStatus ("Function Expression test."); + + var x = function f(){return "inner";}(); + + reportCompare ("outer", f(), + "Inner function statement should not have been called."); + + exitFunc ("test"); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/regress-518103.js b/source/spidermonkey-tests/ecma_3/FunExpr/regress-518103.js new file mode 100644 index 00000000..70bab0d5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/regress-518103.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 518103; +var summary = 'lambda constructor "method" vs. instanceof'; +var actual; +var expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var Y = {widget: {}}; + +Y.widget.DataSource = function () {}; +Y.widget.DS_JSArray = function (A) { this.data = A; }; +Y.widget.DS_JSArray.prototype = new Y.widget.DataSource(); + +var J = new Y.widget.DS_JSArray( [ ] ); + +actual = J instanceof Y.widget.DataSource; +expect = true; + +reportCompare(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/regress-524826.js b/source/spidermonkey-tests/ecma_3/FunExpr/regress-524826.js new file mode 100644 index 00000000..da1dfbba --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/regress-524826.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 524826; +var summary = 'null-closure property initialiser mis-brands object literal scope'; +var actual; +var expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function make(g) { + var o = {f: function(a,b) { return a*b; }, g: g}; + return o; +} +var z = -1; +var x = make(function(c) { return c*z; }); +var y = make(function(c) { return -c*z; }); + +function callg(o, c) { return o.g(c); }; +actual = callg(x, 1); +expect = -callg(y, 1); + +reportCompare(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/regress-528082.js b/source/spidermonkey-tests/ecma_3/FunExpr/regress-528082.js new file mode 100644 index 00000000..1ca7b77c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/regress-528082.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 528082; +var summary = 'named function expression function-name-as-upvar slot botch'; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function f() { + return function g(a) { return function () { return g; }(); }(); +} +var actual = typeof f(); +var expect = "function"; + +reportCompare(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/regress-533254.js b/source/spidermonkey-tests/ecma_3/FunExpr/regress-533254.js new file mode 100644 index 00000000..b0e31981 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/regress-533254.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 533254; +var summary = 'init-method late in table-big initialiser screwup'; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function f() { + var proto = {p8:8}; + var obj = { + p0:0, p1:1, p2:2, p3:3, p4:4, p5:5, p6:6, p7:7, p8:8, p9:9, + p10:0, p11:1, p12:2, p13:3, p14:4, p15:5, p16:6, p17:7, p18:8, p19:9, + m: function() { return 42; } + }; + return obj; +} +var expect = f(), + actual = f(); + +expect += ''; +actual += ''; +reportCompare(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/regress-545980.js b/source/spidermonkey-tests/ecma_3/FunExpr/regress-545980.js new file mode 100644 index 00000000..1ecf1c9b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/FunExpr/regress-545980.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 518103; +var summary = 'partial flat closures must not reach across funargs'; +var actual = "no crash"; +var expect = actual; + +function Timer(){} +Timer.prototype = { initWithCallback: function (o) {Timer.q.push(o)} }; +Timer.q = []; + +var later; +var ac = {startSearch: function(q,s,n,o){later=o}}; + +var bm = {insertBookmark: function(){}, getIdForItemAt: function(){}}; + +function run_test() { + var tagIds = []; + + (function doSearch(query) { + ac.startSearch(query, "", null, { + onSearchResult: function() { + var num = tagIds.length; + + var timer = new Timer; + var next = query.slice(1); + timer.initWithCallback({ notify: function() doSearch(next) }); + } + }); + })("title"); +} + +run_test(); +later.onSearchResult(); +for (var i in Timer.q) + Timer.q[i].notify(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/FunExpr/shell.js b/source/spidermonkey-tests/ecma_3/FunExpr/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Function/15.3.4.3-1.js b/source/spidermonkey-tests/ecma_3/Function/15.3.4.3-1.js new file mode 100644 index 00000000..5fd49ea3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/15.3.4.3-1.js @@ -0,0 +1,176 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 21 May 2002 + * SUMMARY: ECMA conformance of Function.prototype.apply + * + * Function.prototype.apply(thisArg, argArray) + * + * See ECMA-262 Edition 3 Final, Section 15.3.4.3 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 145791; +var summary = 'Testing ECMA conformance of Function.prototype.apply'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function F0(a) +{ + return "" + this + arguments.length; +} + +function F1(a) +{ + return "" + this + a; +} + +function F2() +{ + return "" + this; +} + + + +/* + * Function.prototype.apply.length should return 2 + */ +status = inSection(1); +actual = Function.prototype.apply.length; +expect = 2; +addThis(); + + +/* + * When |thisArg| is not provided to the apply() method, the + * called function must be passed the global object as |this| + */ +status = inSection(2); +actual = F0.apply(); +expect = "" + this + 0; +addThis(); + + +/* + * If |argArray| is not provided to the apply() method, the + * called function should be invoked with an empty argument list + */ +status = inSection(3); +actual = F0.apply(""); +expect = "" + "" + 0; +addThis(); + +status = inSection(4); +actual = F0.apply(true); +expect = "" + true + 0; +addThis(); + + +/* + * Function.prototype.apply(x) and + * Function.prototype.apply(x, undefined) should return the same result + */ +status = inSection(5); +actual = F1.apply(0, undefined); +expect = F1.apply(0); +addThis(); + +status = inSection(6); +actual = F1.apply("", undefined); +expect = F1.apply(""); +addThis(); + +status = inSection(7); +actual = F1.apply(null, undefined); +expect = F1.apply(null); +addThis(); + +status = inSection(8); +actual = F1.apply(undefined, undefined); +expect = F1.apply(undefined); +addThis(); + + +/* + * Function.prototype.apply(x) and + * Function.prototype.apply(x, null) should return the same result + */ +status = inSection(9); +actual = F1.apply(0, null); +expect = F1.apply(0); +addThis(); + +status = inSection(10); +actual = F1.apply("", null); +expect = F1.apply(""); +addThis(); + +status = inSection(11); +actual = F1.apply(null, null); +expect = F1.apply(null); +addThis(); + +status = inSection(12); +actual = F1.apply(undefined, null); +expect = F1.apply(undefined); +addThis(); + + +/* + * Function.prototype.apply() and + * Function.prototype.apply(undefined) should return the same result + */ +status = inSection(13); +actual = F2.apply(undefined); +expect = F2.apply(); +addThis(); + + +/* + * Function.prototype.apply() and + * Function.prototype.apply(null) should return the same result + */ +status = inSection(14); +actual = F2.apply(null); +expect = F2.apply(); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/15.3.4.4-1.js b/source/spidermonkey-tests/ecma_3/Function/15.3.4.4-1.js new file mode 100644 index 00000000..fed244a9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/15.3.4.4-1.js @@ -0,0 +1,162 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 21 May 2002 + * SUMMARY: ECMA conformance of Function.prototype.call + * + * Function.prototype.call(thisArg [,arg1 [,arg2, ...]]) + * + * See ECMA-262 Edition 3 Final, Section 15.3.4.4 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 145791; +var summary = 'Testing ECMA conformance of Function.prototype.call'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function F0(a) +{ + return "" + this + arguments.length; +} + +function F1(a) +{ + return "" + this + a; +} + +function F2() +{ + return "" + this; +} + + + +/* + * Function.prototype.call.length should return 1 + */ +status = inSection(1); +actual = Function.prototype.call.length; +expect = 1; +addThis(); + + +/* + * When |thisArg| is not provided to the call() method, the + * called function must be passed the global object as |this| + */ +status = inSection(2); +actual = F0.call(); +expect = "" + this + 0; +addThis(); + + +/* + * If [,arg1 [,arg2, ...]] are not provided to the call() method, + * the called function should be invoked with an empty argument list + */ +status = inSection(3); +actual = F0.call(""); +expect = "" + "" + 0; +addThis(); + +status = inSection(4); +actual = F0.call(true); +expect = "" + true + 0; +addThis(); + + +/* + * Function.prototype.call(x) and + * Function.prototype.call(x, undefined) should return the same result + */ +status = inSection(5); +actual = F1.call(0, undefined); +expect = F1.call(0); +addThis(); + +status = inSection(6); +actual = F1.call("", undefined); +expect = F1.call(""); +addThis(); + +status = inSection(7); +actual = F1.call(null, undefined); +expect = F1.call(null); +addThis(); + +status = inSection(8); +actual = F1.call(undefined, undefined); +expect = F1.call(undefined); +addThis(); + + +/* + * Function.prototype.call() and + * Function.prototype.call(undefined) should return the same result + */ +status = inSection(9); +actual = F2.call(undefined); +expect = F2.call(); +addThis(); + + +/* + * Function.prototype.call() and + * Function.prototype.call(null) should return the same result + */ +status = inSection(10); +actual = F2.call(null); +expect = F2.call(); +addThis(); + +if (typeof newGlobal === "function") +{ + /* + * Function.prototype.call gets lexical globals, not caller globals + */ + status = inSection(11); + actual = g2 = newGlobal(); + g2.eval("boundMethod = Function('return this');"); + expect = g2.boundMethod.call(); + addThis(); +} + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/arguments-001.js b/source/spidermonkey-tests/ecma_3/Function/arguments-001.js new file mode 100644 index 00000000..7804aa85 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/arguments-001.js @@ -0,0 +1,135 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 07 May 2001 + * + * SUMMARY: Testing the arguments object + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=72884 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 72884; +var summary = 'Testing the arguments object'; +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; +var a = ''; + + +status = inSection(1); +function f() +{ + delete arguments.length; + return arguments; +} + +a = f(); +actual = a instanceof Object; +expect = true; +addThis(); + +actual = a instanceof Array; +expect = false; +addThis(); + +actual = a.length; +expect = undefined; +addThis(); + + + +status = inSection(2); +a = f(1,2,3); +actual = a instanceof Object; +expect = true; +addThis(); + +actual = a instanceof Array; +expect = false; +addThis(); + +actual = a.length; +expect = undefined; +addThis(); + +actual = a[0]; +expect = 1; +addThis(); + +actual = a[1]; +expect = 2; +addThis(); + +actual = a[2]; +expect = 3; +addThis(); + + + +status = inSection(3); +/* + * Brendan: + * + * Note that only callee and length can be overridden, so deleting an indexed + * property and asking for it again causes it to be recreated by args_resolve: + * + * function g(){delete arguments[0]; return arguments[0]} + * g(42) // should this print 42? + * + * I'm not positive this violates ECMA, which allows in chapter 16 for extensions + * including properties (does it allow for magically reappearing properties?). The + * delete operator successfully deletes arguments[0] and results in true, but that + * is not distinguishable from the case where arguments[0] was delegated to + * Arguments.prototype[0], which was how the bad old code worked. + * + * I'll ponder this last detail... + * + * UPDATE: Per ECMA-262, delete on an arguments[i] should succeed + * and remove that property from the arguments object, leaving any get + * of it after the delete to evaluate to undefined. + */ +function g() +{ + delete arguments[0]; + return arguments[0]; +} +actual = g(42); +expect = undefined; // not 42... +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/arguments-002.js b/source/spidermonkey-tests/ecma_3/Function/arguments-002.js new file mode 100644 index 00000000..7e592749 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/arguments-002.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383269; +var summary = 'Allow override of arguments'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var expect1 = '33,42'; + var expect2 = 33; + var actual1 = ''; + var actual2 = ''; + + function f(){ + var a=arguments; actual1 = a[0]; arguments=42; actual1 += ',' + arguments; return a; + } + + actual2 = f(33)[0]; + + expect = expect1 + ':' + expect2; + actual = actual1 + ':' + actual2; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/browser.js b/source/spidermonkey-tests/ecma_3/Function/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Function/call-001.js b/source/spidermonkey-tests/ecma_3/Function/call-001.js new file mode 100644 index 00000000..319a75e3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/call-001.js @@ -0,0 +1,119 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-13 + * + * SUMMARY: Applying Function.prototype.call to the Function object itself + * + * + * ECMA-262 15.3.4.4 Function.prototype.call (thisArg [,arg1 [,arg2,…] ] ) + * + * When applied to the Function object itself, thisArg should be ignored. + * As explained by Waldemar (waldemar@netscape.com): + * + * Function.call(obj, "print(this)") is equivalent to invoking + * Function("print(this)") with this set to obj. Now, Function("print(this)") + * is equivalent to new Function("print(this)") (see 15.3.1.1), and the latter + * ignores the this value that you passed it and constructs a function + * (which we'll call F) which will print the value of the this that will be + * passed in when F will be invoked. + * + * With the last set of () you're invoking F(), which means you're calling it + * with no this value. When you don't provide a this value, it defaults to the + * global object. + * + */ + +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Applying Function.prototype.call to the Function object itself'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var self = this; // capture a reference to the global object +var cnOBJECT_GLOBAL = self.toString(); +var cnOBJECT_OBJECT = (new Object).toString(); +var cnHello = 'Hello'; +var cnRed = 'red'; +var objTEST = {color:cnRed}; +var f = new Function(); +var g = new Function(); + + +f = Function.call(self, 'return cnHello'); +g = Function.call(objTEST, 'return cnHello'); + +status = 'Section A of test'; +actual = f(); +expect = cnHello; +captureThis(); + +status = 'Section B of test'; +actual = g(); +expect = cnHello; +captureThis(); + + +f = Function.call(self, 'return this.toString()'); +g = Function.call(objTEST, 'return this.toString()'); + +status = 'Section C of test'; +actual = f(); +expect = cnOBJECT_GLOBAL; +captureThis(); + +status = 'Section D of test'; +actual = g(); +expect = cnOBJECT_GLOBAL; +captureThis(); + + +f = Function.call(self, 'return this.color'); +g = Function.call(objTEST, 'return this.color'); + +status = 'Section E of test'; +actual = f(); +expect = undefined; +captureThis(); + +status = 'Section F of test'; +actual = g(); +expect = undefined; +captureThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function captureThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-131964.js b/source/spidermonkey-tests/ecma_3/Function/regress-131964.js new file mode 100644 index 00000000..b1364df8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-131964.js @@ -0,0 +1,162 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 19 Mar 2002 + * SUMMARY: Function declarations in global or function scope are {DontDelete}. + * Function declarations in eval scope are not {DontDelete}. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=131964 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 131964; +var summary = 'Functions defined in global or function scope are {DontDelete}'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +function f() +{ + return 'f lives!'; +} +delete f; + +try +{ + actual = f(); +} +catch(e) +{ + actual = 'f was deleted'; +} + +expect = 'f lives!'; +addThis(); + + + +/* + * Try the same test in function scope - + */ +status = inSection(2); +function g() +{ + function f() + { + return 'f lives!'; + } + delete f; + + try + { + actual = f(); + } + catch(e) + { + actual = 'f was deleted'; + } + + expect = 'f lives!'; + addThis(); +} +g(); + + + +/* + * Try the same test in eval scope - here we EXPECT the function to be deleted (?) + */ +status = inSection(3); +var s = ''; +s += 'function h()'; +s += '{ '; +s += ' return "h lives!";'; +s += '}'; +s += 'delete h;'; + +s += 'try'; +s += '{'; +s += ' actual = h();'; +s += '}'; +s += 'catch(e)'; +s += '{'; +s += ' actual = "h was deleted";'; +s += '}'; + +s += 'expect = "h was deleted";'; +s += 'addThis();'; +eval(s); + + +/* + * Define the function in eval scope, but delete it in global scope - + */ +status = inSection(4); +s = ''; +s += 'function k()'; +s += '{ '; +s += ' return "k lives!";'; +s += '}'; +eval(s); + +delete k; + +try +{ + actual = k(); +} +catch(e) +{ + actual = 'k was deleted'; +} + +expect = 'k was deleted'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function wasDeleted(functionName) +{ + return functionName + ' was deleted...'; +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-137181.js b/source/spidermonkey-tests/ecma_3/Function/regress-137181.js new file mode 100644 index 00000000..ecd2883b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-137181.js @@ -0,0 +1,79 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 12 Apr 2002 + * SUMMARY: delete arguments[i] should break connection to local reference + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=137181 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 137181; +var summary = 'delete arguments[i] should break connection to local reference'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +function f1(x) +{ + x = 1; + delete arguments[0]; + return x; +} +actual = f1(0); // (bug: Rhino was returning |undefined|) +expect = 1; +addThis(); + + +status = inSection(2); +function f2(x) +{ + x = 1; + delete arguments[0]; + arguments[0] = -1; + return x; +} +actual = f2(0); // (bug: Rhino was returning -1) +expect = 1; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-193555.js b/source/spidermonkey-tests/ecma_3/Function/regress-193555.js new file mode 100644 index 00000000..00077a9e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-193555.js @@ -0,0 +1,102 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 17 February 2003 + * SUMMARY: Testing access to function name from inside function + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=193555 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 193555; +var summary = 'Testing access to function name from inside function'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// test via function statement +status = inSection(1); +function f() {return f.toString();}; +actual = f(); +expect = f.toString(); +addThis(); + +// test via function expression +status = inSection(2); +var x = function g() {return g.toString();}; +actual = x(); +expect = x.toString(); +addThis(); + +// test via eval() outside function +status = inSection(3); +eval ('function a() {return a.toString();}'); +actual = a(); +expect = a.toString(); +addThis(); + +status = inSection(4); +eval ('var y = function b() {return b.toString();}'); +actual = y(); +expect = y.toString(); +addThis(); + +// test via eval() inside function +status = inSection(5); +function c() {return eval('c').toString();}; +actual = c(); +expect = c.toString(); +addThis(); + +status = inSection(6); +var z = function d() {return eval('d').toString();}; +actual = z(); +expect = z.toString(); +addThis(); + +// test via two evals! +status = inSection(7); +eval('var w = function e() {return eval("e").toString();}'); +actual = w(); +expect = w.toString(); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-313570.js b/source/spidermonkey-tests/ecma_3/Function/regress-313570.js new file mode 100644 index 00000000..eb303965 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-313570.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313570; +var summary = 'length of objects whose prototype chain includes a function'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function tmp() {} +tmp.prototype = function(a, b, c) {}; +var obj = new tmp(); + +// arity +expect = 3; +actual = obj.length; +reportCompare(expect, actual, summary + ': arity'); + +// immutable +obj.length = 10; + +expect = 3; +actual = obj.length; +reportCompare(expect, actual, summary + ': immutable'); + diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-49286.js b/source/spidermonkey-tests/ecma_3/Function/regress-49286.js new file mode 100644 index 00000000..8ae5fd95 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-49286.js @@ -0,0 +1,103 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-10 + * + * SUMMARY: Invoking try...catch through Function.call + * See http://bugzilla.mozilla.org/show_bug.cgi?id=49286 + * + * 1) Define a function with a try...catch block in it + * 2) Invoke the function via the call method of Function + * 3) Pass bad syntax to the try...catch block + * 4) We should catch the error! + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 49286; +var summary = 'Invoking try...catch through Function.call'; +var cnErrorCaught = 'Error caught'; +var cnErrorNotCaught = 'Error NOT caught'; +var cnGoodSyntax = '1==2'; +var cnBadSyntax = '1=2'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var obj = new testObject(); + +status = 'Section A of test: direct call of f'; +actual = f.call(obj); +expect = cnErrorCaught; +addThis(); + +status = 'Section B of test: indirect call of f'; +actual = g.call(obj); +expect = cnErrorCaught; +addThis(); + + + +//----------------------------------------- +test(); +//----------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +// An object storing bad syntax as a property - +function testObject() +{ + this.badSyntax = cnBadSyntax; + this.goodSyntax = cnGoodSyntax; +} + + +// A function wrapping a try...catch block +function f() +{ + try + { + eval(this.badSyntax); + } + catch(e) + { + return cnErrorCaught; + } + return cnErrorNotCaught; +} + + +// A function wrapping a call to f - +function g() +{ + return f.call(this); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-58274.js b/source/spidermonkey-tests/ecma_3/Function/regress-58274.js new file mode 100644 index 00000000..3d326c27 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-58274.js @@ -0,0 +1,192 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 15 July 2002 + * SUMMARY: Testing functions with double-byte names + * See http://bugzilla.mozilla.org/show_bug.cgi?id=58274 + * + * Here is a sample of the problem: + * + * js> function f\u02B1 () {} + * + * js> f\u02B1.toSource(); + * function f¦() {} + * + * js> f\u02B1.toSource().toSource(); + * (new String("function f\xB1() {}")) + * + * + * See how the high-byte information (the 02) has been lost? + * The same thing was happening with the toString() method: + * + * js> f\u02B1.toString(); + * + * function f¦() { + * } + * + * js> f\u02B1.toString().toSource(); + * (new String("\nfunction f\xB1() {\n}\n")) + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 58274; +var summary = 'Testing functions with double-byte names'; +var ERR = 'UNEXPECTED ERROR! \n'; +var ERR_MALFORMED_NAME = ERR + 'Could not find function name in: \n\n'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var sEval; +var sName; + + +sEval = "function f\u02B2() {return 42;}"; +eval(sEval); +sName = getFunctionName(f\u02B2); + +// Test function call - +status = inSection(1); +actual = f\u02B2(); +expect = 42; +addThis(); + +// Test both characters of function name - +status = inSection(2); +actual = sName[0]; +expect = sEval[9]; +addThis(); + +status = inSection(3); +actual = sName[1]; +expect = sEval[10]; +addThis(); + + + +sEval = "function f\u02B2\u0AAA () {return 84;}"; +eval(sEval); +sName = getFunctionName(f\u02B2\u0AAA); + +// Test function call - +status = inSection(4); +actual = f\u02B2\u0AAA(); +expect = 84; +addThis(); + +// Test all three characters of function name - +status = inSection(5); +actual = sName[0]; +expect = sEval[9]; +addThis(); + +status = inSection(6); +actual = sName[1]; +expect = sEval[10]; +addThis(); + +status = inSection(7); +actual = sName[2]; +expect = sEval[11]; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Goal: test that f.toString() contains the proper function name. + * + * Note, however, f.toString() is implementation-independent. For example, + * it may begin with '\nfunction' instead of 'function'. Therefore we use + * a regexp to make sure we extract the name properly. + * + * Here we assume that f has been defined by means of a function statement, + * and not a function expression (where it wouldn't have to have a name). + * + * Rhino uses a Unicode representation for f.toString(); whereas + * SpiderMonkey uses an ASCII representation, putting escape sequences + * for non-ASCII characters. For example, if a function is called f\u02B1, + * then in Rhino the toString() method will present a 2-character Unicode + * string for its name, whereas SpiderMonkey will present a 7-character + * ASCII string for its name: the string literal 'f\u02B1'. + * + * So we force the lexer to condense the string before using it. + * This will give uniform results in Rhino and SpiderMonkey. + */ +function getFunctionName(f) +{ + var s = condenseStr(f.toString()); + var re = /\s*function\s+(\S+)\s*\(/; + var arr = s.match(re); + + if (!(arr && arr[1])) + return ERR_MALFORMED_NAME + s; + return arr[1]; +} + + +/* + * This function is the opposite of functions like escape(), which take + * Unicode characters and return escape sequences for them. Here, we force + * the lexer to turn escape sequences back into single characters. + * + * Note we can't simply do |eval(str)|, since in practice |str| will be an + * identifier somewhere in the program (e.g. a function name); thus |eval(str)| + * would return the object that the identifier represents: not what we want. + * + * So we surround |str| lexicographically with quotes to force the lexer to + * evaluate it as a string. Have to strip out any linefeeds first, however - + */ +function condenseStr(str) +{ + /* + * You won't be able to do the next step if |str| has + * any carriage returns or linefeeds in it. For example: + * + * js> eval("'" + '\nHello' + "'"); + * 1: SyntaxError: unterminated string literal: + * 1: ' + * 1: ^ + * + * So replace them with the empty string - + */ + str = str.replace(/[\r\n]/g, '') + return eval("'" + str + "'"); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-85880.js b/source/spidermonkey-tests/ecma_3/Function/regress-85880.js new file mode 100644 index 00000000..4d0eb65f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-85880.js @@ -0,0 +1,139 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-06-14 + * + * SUMMARY: Regression test for Bugzilla bug 85880 + * + * Rhino interpreted mode was nulling out the arguments object of a + * function if it happened to call another function inside its body. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=85880 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 85880; +var summary = 'Arguments object of g(){f()} should not be null'; +var cnNonNull = 'Arguments != null'; +var cnNull = 'Arguments == null'; +var cnRecurse = true; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f1(x) +{ +} + + +function f2() +{ + return f2.arguments; +} +status = 'Section A of test'; +actual = (f2() == null); +expect = false; +addThis(); + +status = 'Section B of test'; +actual = (f2(0) == null); +expect = false; +addThis(); + + +function f3() +{ + f1(); + return f3.arguments; +} +status = 'Section C of test'; +actual = (f3() == null); +expect = false; +addThis(); + +status = 'Section D of test'; +actual = (f3(0) == null); +expect = false; +addThis(); + + +function f4() +{ + f1(); + f2(); + f3(); + return f4.arguments; +} +status = 'Section E of test'; +actual = (f4() == null); +expect = false; +addThis(); + +status = 'Section F of test'; +actual = (f4(0) == null); +expect = false; +addThis(); + + +function f5() +{ + if (cnRecurse) + { + cnRecurse = false; + f5(); + } + return f5.arguments; +} +status = 'Section G of test'; +actual = (f5() == null); +expect = false; +addThis(); + +status = 'Section H of test'; +actual = (f5(0) == null); +expect = false; +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = isThisNull(actual); + expectedvalues[UBound] = isThisNull(expect); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function isThisNull(bool) +{ + return bool? cnNull : cnNonNull + } diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-94506.js b/source/spidermonkey-tests/ecma_3/Function/regress-94506.js new file mode 100644 index 00000000..735b0d54 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-94506.js @@ -0,0 +1,129 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 08 August 2001 + * + * SUMMARY: When we invoke a function, the arguments object should take + * a back seat to any local identifier named "arguments". + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=94506 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 94506; +var summary = 'Testing functions employing identifiers named "arguments"'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var TYPE_OBJECT = typeof new Object(); +var arguments = 5555; + + +// use a parameter named "arguments" +function F1(arguments) +{ + return arguments; +} + + +// use a local variable named "arguments" +function F2() +{ + var arguments = 55; + return arguments; +} + + +// same thing in a different order. CHANGES THE RESULT! +function F3() +{ + return arguments; + var arguments = 555; +} + + +// use the global variable above named "arguments" +function F4() +{ + return arguments; +} + + + +/* + * In Sections 1 and 2, expect the local identifier, not the arguments object. + * In Sections 3 and 4, expect the arguments object, not the the identifier. + */ + +status = 'Section 1 of test'; +actual = F1(5); +expect = 5; +addThis(); + + +status = 'Section 2 of test'; +actual = F2(); +expect = 55; +addThis(); + + +status = 'Section 3 of test'; +actual = typeof F3(); +expect = TYPE_OBJECT; +addThis(); + + +status = 'Section 4 of test'; +actual = typeof F4(); +expect = TYPE_OBJECT; +addThis(); + + +// Let's try calling F1 without providing a parameter - +status = 'Section 5 of test'; +actual = F1(); +expect = undefined; +addThis(); + + +// Let's try calling F1 with too many parameters - +status = 'Section 6 of test'; +actual = F1(3,33,333); +expect = 3; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/regress-97921.js b/source/spidermonkey-tests/ecma_3/Function/regress-97921.js new file mode 100644 index 00000000..2b015438 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/regress-97921.js @@ -0,0 +1,118 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 10 September 2001 + * + * SUMMARY: Testing with() statement with nested functions + * See http://bugzilla.mozilla.org/show_bug.cgi?id=97921 + * + * Brendan: "The bug is peculiar to functions that have formal parameters, + * but that are called with fewer actual arguments than the declared number + * of formal parameters." + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 97921; +var summary = 'Testing with() statement with nested functions'; +var cnYES = 'Inner value === outer value'; +var cnNO = "Inner value !== outer value!"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var outerValue = ''; +var innerValue = ''; +var useWith = ''; + + +function F(i) +{ + i = 0; + if(useWith) with(1){i;} + i++; + + outerValue = i; // capture value of i in outer function + F1 = function() {innerValue = i;}; // capture value of i in inner function + F1(); +} + + +status = inSection(1); +useWith=false; +F(); // call F without supplying the argument +actual = innerValue === outerValue; +expect = true; +addThis(); + +status = inSection(2); +useWith=true; +F(); // call F without supplying the argument +actual = innerValue === outerValue; +expect = true; +addThis(); + + +function G(i) +{ + i = 0; + with (new Object()) {i=100}; + i++; + + outerValue = i; // capture value of i in outer function + G1 = function() {innerValue = i;}; // capture value of i in inner function + G1(); +} + + +status = inSection(3); +G(); // call G without supplying the argument +actual = innerValue === 101; +expect = true; +addThis(); + +status = inSection(4); +G(); // call G without supplying the argument +actual = innerValue === outerValue; +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = areTheseEqual(actual); + expectedvalues[UBound] = areTheseEqual(expect); + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function areTheseEqual(yes) +{ + return yes? cnYES : cnNO + } diff --git a/source/spidermonkey-tests/ecma_3/Function/scope-001.js b/source/spidermonkey-tests/ecma_3/Function/scope-001.js new file mode 100644 index 00000000..a7b42b4e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/scope-001.js @@ -0,0 +1,231 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 28 May 2001 + * + * SUMMARY: Functions are scoped statically, not dynamically + * + * See ECMA Section 10.1.4 Scope Chain and Identifier Resolution + * (This section defines the scope chain of an execution context) + * + * See ECMA Section 12.10 The with Statement + * + * See ECMA Section 13 Function Definition + * (This section defines the scope chain of a function object as that + * of the running execution context when the function was declared) + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing that functions are scoped statically, not dynamically'; +var self = this; // capture a reference to the global object +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; + +/* + * In this section the expected value is 1, not 2. + * + * Why? f captures its scope chain from when it's declared, and imposes that chain + * when it's executed. In other words, f's scope chain is from when it was compiled. + * Since f is a top-level function, this is the global object only. Hence 'a' resolves to 1. + */ +status = 'Section A of test'; +var a = 1; +function f() +{ + return a; +} +var obj = {a:2}; +with (obj) +{ + actual = f(); +} +expect = 1; +addThis(); + + +/* + * In this section the expected value is 2, not 1. That is because here + * f's associated scope chain now includes 'obj' before the global object. + */ +status = 'Section B of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + function f() + { + return a; + } + actual = f(); +} +expect = 2; +addThis(); + + +/* + * Like Section B , except that we call f outside the with block. + * By the principles explained above, we still expect 2 - + */ +status = 'Section C of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + function f() + { + return a; + } +} +actual = f(); +expect = 2; +addThis(); + + +/* + * Like Section C, but with one more level of indirection - + */ +status = 'Section D of test'; +var a = 1; +var obj = {a:2, obj:{a:3}}; +with (obj) +{ + with (obj) + { + function f() + { + return a; + } + } +} +actual = f(); +expect = 3; +addThis(); + + +/* + * Like Section C, but here we actually delete obj before calling f. + * We still expect 2 - + */ +status = 'Section E of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + function f() + { + return a; + } +} +delete obj; +actual = f(); +expect = 2; +addThis(); + + +/* + * Like Section E. Here we redefine obj and call f under with (obj) - + * We still expect 2 - + */ +status = 'Section F of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + function f() + { + return a; + } +} +delete obj; +var obj = {a:3}; +with (obj) +{ + actual = f(); +} +expect = 2; // NOT 3 !!! +addThis(); + + +/* + * Explicitly verify that f exists at global level, even though + * it was defined under the with(obj) block - + */ +status = 'Section G of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + function f() + { + return a; + } +} +actual = String([obj.hasOwnProperty('f'), self.hasOwnProperty('f')]); +expect = String([false, true]); +addThis(); + + +/* + * Explicitly verify that f exists at global level, even though + * it was defined under the with(obj) block - + */ +status = 'Section H of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + function f() + { + return a; + } +} +actual = String(['f' in obj, 'f' in self]); +expect = String([false, true]); +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; + resetTestVars(); +} + + +function resetTestVars() +{ + delete a; + delete obj; + delete f; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/scope-002.js b/source/spidermonkey-tests/ecma_3/Function/scope-002.js new file mode 100644 index 00000000..20e3fa52 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Function/scope-002.js @@ -0,0 +1,211 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 28 May 2001 + * + * SUMMARY: Functions are scoped statically, not dynamically + * + * See ECMA Section 10.1.4 Scope Chain and Identifier Resolution + * (This section defines the scope chain of an execution context) + * + * See ECMA Section 12.10 The with Statement + * + * See ECMA Section 13 Function Definition + * (This section defines the scope chain of a function object as that + * of the running execution context when the function was declared) + * + * Like scope-001.js, but using assignment var f = function expression + * instead of a function declaration: function f() {} etc. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing that functions are scoped statically, not dynamically'; +var self = this; // capture a reference to the global object +var status = ''; +var statusitems = [ ]; +var actual = ''; +var actualvalues = [ ]; +var expect= ''; +var expectedvalues = [ ]; + + +/* + * In this section the expected value is 1, not 2. + * + * Why? f captures its scope chain from when it's declared, and imposes that chain + * when it's executed. In other words, f's scope chain is from when it was compiled. + * Since f is a top-level function, this is the global object only. Hence 'a' resolves to 1. + */ +status = 'Section A of test'; +var a = 1; +var f = function () {return a;}; +var obj = {a:2}; +with (obj) +{ + actual = f(); +} +expect = 1; +addThis(); + + +/* + * In this section the expected value is 2, not 1. That is because here + * f's associated scope chain now includes 'obj' before the global object. + */ +status = 'Section B of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + var f = function () {return a;}; + actual = f(); +} +expect = 2; +addThis(); + + +/* + * Like Section B , except that we call f outside the with block. + * By the principles explained above, we still expect 2 - + */ +status = 'Section C of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + var f = function () {return a;}; +} +actual = f(); +expect = 2; +addThis(); + + +/* + * Like Section C, but with one more level of indirection - + */ +status = 'Section D of test'; +var a = 1; +var obj = {a:2, obj:{a:3}}; +with (obj) +{ + with (obj) + { + var f = function () {return a;}; + } +} +actual = f(); +expect = 3; +addThis(); + + +/* + * Like Section C, but here we actually delete obj before calling f. + * We still expect 2 - + */ +status = 'Section E of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + var f = function () {return a;}; +} +delete obj; +actual = f(); +expect = 2; +addThis(); + + +/* + * Like Section E. Here we redefine obj and call f under with (obj) - + * We still expect 2 - + */ +status = 'Section F of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + var f = function () {return a;}; +} +delete obj; +var obj = {a:3}; +with (obj) +{ + actual = f(); +} +expect = 2; // NOT 3 !!! +addThis(); + + +/* + * Explicitly verify that f exists at global level, even though + * it was defined under the with(obj) block - + */ +status = 'Section G of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + var f = function () {return a;}; +} +actual = String([obj.hasOwnProperty('f'), self.hasOwnProperty('f')]); +expect = String([false, true]); +addThis(); + + +/* + * Explicitly verify that f exists at global level, even though + * it was defined under the with(obj) block - + */ +status = 'Section H of test'; +var a = 1; +var obj = {a:2}; +with (obj) +{ + var f = function () {return a;}; +} +actual = String(['f' in obj, 'f' in self]); +expect = String([false, true]); +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; + resetTestVars(); +} + + +function resetTestVars() +{ + delete a; + delete obj; + delete f; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Function/shell.js b/source/spidermonkey-tests/ecma_3/Function/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/LexicalConventions/7.4-01.js b/source/spidermonkey-tests/ecma_3/LexicalConventions/7.4-01.js new file mode 100644 index 00000000..2ec702e9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/LexicalConventions/7.4-01.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 475834; +var summary = ' /**/ comments with newlines in them must act as line breaks'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f() { + L: for (var i=0; i<2; i++) { + for (var j=0; j<2; j++) { + break/* + */L; + } + return "conformant!"; + } + return "non-conformant!"; + } + + expect = 'conformant!'; + print(actual = f()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/LexicalConventions/7.8.3-01.js b/source/spidermonkey-tests/ecma_3/LexicalConventions/7.8.3-01.js new file mode 100644 index 00000000..e323738f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/LexicalConventions/7.8.3-01.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 523401; +var summary = 'identifier starts immediately after numeric literal'; +var expect = "SyntaxError: identifier starts immediately after numeric literal"; +var actual; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +try { + eval("actual = 0in [1]"); +} catch (e) { + actual = e; +} +actual = '' + actual; + +reportCompare(expect, actual, summary); + +printStatus("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_3/LexicalConventions/7.9.1.js b/source/spidermonkey-tests/ecma_3/LexicalConventions/7.9.1.js new file mode 100644 index 00000000..7e11692c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/LexicalConventions/7.9.1.js @@ -0,0 +1,124 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 402386; +var summary = 'Automatic Semicolon insertion in postfix expressions'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var expr; + var code; + + // LeftHandSideExpression [no LineTerminator here] ++ + + code = 'expr ++'; + expr = 0; + expect = 1; + + try + { + eval(code); + actual = expr; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + code); + + code = 'expr\n++'; + expr = 0; + expect = 'SyntaxError: expected expression, got end of script'; + + try + { + eval(code); + actual = expr; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + code); + + // LeftHandSideExpression [no LineTerminator here] -- + + code = 'expr --'; + expr = 0; + expect = -1; + + try + { + eval(code); + actual = expr; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + code); + + code = 'expr\n--'; + expr = 0; + expect = 'SyntaxError: expected expression, got end of script'; + + try + { + eval(code); + actual = expr; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + code); + + // + + var x = 1; + var y = 1; + code = '(x\n)-- y'; + expect = 'SyntaxError: missing ; before statement'; + + try + { + eval(code); + actual = expr; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + code); + + code = '(x)-- y'; + expect = 'SyntaxError: missing ; before statement'; + + try + { + eval(code); + actual = expr; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + code); + + exitFunc ('test'); +} + diff --git a/source/spidermonkey-tests/ecma_3/LexicalConventions/browser.js b/source/spidermonkey-tests/ecma_3/LexicalConventions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/LexicalConventions/shell.js b/source/spidermonkey-tests/ecma_3/LexicalConventions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Number/15.7.4.2-01.js b/source/spidermonkey-tests/ecma_3/Number/15.7.4.2-01.js new file mode 100644 index 00000000..a2cc265e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/15.7.4.2-01.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = "411889"; +var summary = "num.toString(), num.toString(10), and num.toString(undefined)" + + " should all be equivalent"; +var actual, expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/************** + * BEGIN TEST * + **************/ + +var failed = false; + +try +{ + var noargs = 3.3.toString(); + var tenarg = 3.3.toString(10); + var undefarg = 3.3.toString(undefined); + + if (noargs !== tenarg) + throw "() !== (10): " + noargs + " !== " + tenarg; + if (tenarg !== undefarg) + throw "(10) !== (undefined): " + tenarg + " !== " + undefarg; +} +catch (e) +{ + failed = e; +} + +expect = false; +actual = failed; + +reportCompare(expect, actual, summary); + +expect = 1; +actual = 3.3.toString.length; +reportCompare(expect, actual, '3.3.toString.length should be 1'); diff --git a/source/spidermonkey-tests/ecma_3/Number/15.7.4.3-01.js b/source/spidermonkey-tests/ecma_3/Number/15.7.4.3-01.js new file mode 100644 index 00000000..2f1f3fff --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/15.7.4.3-01.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = "412068"; +var summary = "num.toLocaleString incorrectly accesses its first argument " + + "even when no first argument has been given"; +var actual, expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/************** + * BEGIN TEST * + **************/ + +var failed = false; + +try +{ + if ("3" !== 3..toLocaleString()) + throw '"3" should equal 3..toLocaleString()'; + if ("9" !== 9..toLocaleString(8)) + throw 'Number.prototype.toLocaleString should ignore its first argument'; +} +catch (e) +{ + failed = e; +} + +expect = false; +actual = failed; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/Number/15.7.4.5-1.js b/source/spidermonkey-tests/ecma_3/Number/15.7.4.5-1.js new file mode 100644 index 00000000..ab7f356c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/15.7.4.5-1.js @@ -0,0 +1,111 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-15 + * + * SUMMARY: Testing Number.prototype.toFixed(fractionDigits) + * See EMCA 262 Edition 3 Section 15.7.4.5 + * + * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=90551 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing Number.prototype.toFixed(fractionDigits)'; +var cnIsRangeError = 'instanceof RangeError'; +var cnNotRangeError = 'NOT instanceof RangeError'; +var cnNoErrorCaught = 'NO ERROR CAUGHT...'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var testNum = 234.2040506; + + +status = 'Section A of test: no error intended!'; +actual = testNum.toFixed(4); +expect = '234.2041'; +captureThis(); + + +/////////////////////////// OOPS.... /////////////////////////////// +/************************************************************************* + * 15.7.4.5 Number.prototype.toFixed(fractionDigits) + * + * An implementation is permitted to extend the behaviour of toFixed + * for values of fractionDigits less than 0 or greater than 20. In this + * case toFixed would not necessarily throw RangeError for such values. + +status = 'Section B of test: expect RangeError because fractionDigits < 0'; +actual = catchError('testNum.toFixed(-4)'); +expect = cnIsRangeError; +captureThis(); + +status = 'Section C of test: expect RangeError because fractionDigits > 20 '; +actual = catchError('testNum.toFixed(21)'); +expect = cnIsRangeError; +captureThis(); +*************************************************************************/ + + +status = 'Section D of test: no error intended!'; +actual = 0.00001.toFixed(2); +expect = '0.00'; +captureThis(); + +status = 'Section E of test: no error intended!'; +actual = 0.000000000000000000001.toFixed(20); +expect = '0.00000000000000000000'; +captureThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function captureThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function catchError(sEval) +{ + try {eval(sEval);} + catch(e) {return isRangeError(e);} + return cnNoErrorCaught; +} + + +function isRangeError(obj) +{ + if (obj instanceof RangeError) + return cnIsRangeError; + return cnNotRangeError; +} diff --git a/source/spidermonkey-tests/ecma_3/Number/15.7.4.5-2.js b/source/spidermonkey-tests/ecma_3/Number/15.7.4.5-2.js new file mode 100644 index 00000000..f9c75ea1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/15.7.4.5-2.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 469397; +var summary = '(0.5).toFixed(0) == 1'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '1'; + actual = (0.5).toFixed(0); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Number/15.7.4.6-1.js b/source/spidermonkey-tests/ecma_3/Number/15.7.4.6-1.js new file mode 100644 index 00000000..084ec9fd --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/15.7.4.6-1.js @@ -0,0 +1,116 @@ +// |reftest| fails +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-15 + * + * SUMMARY: Testing Number.prototype.toExponential(fractionDigits) + * See EMCA 262 Edition 3 Section 15.7.4.6 + * + * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=90551 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing Number.prototype.toExponential(fractionDigits)'; +var cnIsRangeError = 'instanceof RangeError'; +var cnNotRangeError = 'NOT instanceof RangeError'; +var cnNoErrorCaught = 'NO ERROR CAUGHT...'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var testNum = 77.1234; + + +status = 'Section A of test: no error intended!'; +actual = testNum.toExponential(4); +expect = '7.7123e+1'; +captureThis(); + +status = 'Section B of test: Infinity.toExponential() with out-of-range fractionDigits'; +actual = Number.POSITIVE_INFINITY.toExponential(-3); +expect = 'Infinity'; +captureThis(); + +status = 'Section C of test: -Infinity.toExponential() with out-of-range fractionDigits'; +actual = Number.NEGATIVE_INFINITY.toExponential(-3); +expect = '-Infinity'; +captureThis(); + +status = 'Section D of test: NaN.toExponential() with out-of-range fractionDigits'; +actual = Number.NaN.toExponential(-3); +expect = 'NaN'; +captureThis(); + + +/////////////////////////// OOPS.... /////////////////////////////// +/************************************************************************* + * 15.7.4.6 Number.prototype.toExponential(fractionDigits) + * + * An implementation is permitted to extend the behaviour of toExponential + * for values of fractionDigits less than 0 or greater than 20. In this + * case toExponential would not necessarily throw RangeError for such values. + +status = 'Section B of test: expect RangeError because fractionDigits < 0'; +actual = catchError('testNum.toExponential(-4)'); +expect = cnIsRangeError; +captureThis(); + +status = 'Section C of test: expect RangeError because fractionDigits > 20 '; +actual = catchError('testNum.toExponential(21)'); +expect = cnIsRangeError; +captureThis(); +*************************************************************************/ + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function captureThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function catchError(sEval) +{ + try {eval(sEval);} + catch(e) {return isRangeError(e);} + return cnNoErrorCaught; +} + + +function isRangeError(obj) +{ + if (obj instanceof RangeError) + return cnIsRangeError; + return cnNotRangeError; +} diff --git a/source/spidermonkey-tests/ecma_3/Number/15.7.4.7-1.js b/source/spidermonkey-tests/ecma_3/Number/15.7.4.7-1.js new file mode 100644 index 00000000..98cc8687 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/15.7.4.7-1.js @@ -0,0 +1,121 @@ +// |reftest| fails +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-15 + * + * SUMMARY: Testing Number.prototype.toPrecision(precision) + * See EMCA 262 Edition 3 Section 15.7.4.7 + * + * Also see http://bugzilla.mozilla.org/show_bug.cgi?id=90551 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing Number.prototype.toPrecision(precision)'; +var cnIsRangeError = 'instanceof RangeError'; +var cnNotRangeError = 'NOT instanceof RangeError'; +var cnNoErrorCaught = 'NO ERROR CAUGHT...'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var testNum = 5.123456; + + +status = 'Section A of test: no error intended!'; +actual = testNum.toPrecision(4); +expect = '5.123'; +captureThis(); + +status = 'Section B of test: Infinity.toPrecision() with out-of-range fractionDigits'; +actual = Number.POSITIVE_INFINITY.toPrecision(-3); +expect = 'Infinity'; +captureThis(); + +status = 'Section C of test: -Infinity.toPrecision() with out-of-range fractionDigits'; +actual = Number.NEGATIVE_INFINITY.toPrecision(-3); +expect = '-Infinity'; +captureThis(); + +status = 'Section D of test: NaN.toPrecision() with out-of-range fractionDigits'; +actual = Number.NaN.toPrecision(-3); +expect = 'NaN'; +captureThis(); + + +/////////////////////////// OOPS.... /////////////////////////////// +/************************************************************************* + * 15.7.4.7 Number.prototype.toPrecision(precision) + * + * An implementation is permitted to extend the behaviour of toPrecision + * for values of precision less than 1 or greater than 21. In this + * case toPrecision would not necessarily throw RangeError for such values. + +status = 'Section B of test: expect RangeError because precision < 1'; +actual = catchError('testNum.toPrecision(0)'); +expect = cnIsRangeError; +captureThis(); + +status = 'Section C of test: expect RangeError because precision < 1'; +actual = catchError('testNum.toPrecision(-4)'); +expect = cnIsRangeError; +captureThis(); + +status = 'Section D of test: expect RangeError because precision > 21 '; +actual = catchError('testNum.toPrecision(22)'); +expect = cnIsRangeError; +captureThis(); +*************************************************************************/ + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function captureThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function catchError(sEval) +{ + try {eval(sEval);} + catch(e) {return isRangeError(e);} + return cnNoErrorCaught; +} + + +function isRangeError(obj) +{ + if (obj instanceof RangeError) + return cnIsRangeError; + return cnNotRangeError; +} diff --git a/source/spidermonkey-tests/ecma_3/Number/15.7.4.7-2.js b/source/spidermonkey-tests/ecma_3/Number/15.7.4.7-2.js new file mode 100644 index 00000000..6845b308 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/15.7.4.7-2.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = "411893"; +var summary = "num.toPrecision(undefined) should equal num.toString()"; +var actual, expect; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +/************** + * BEGIN TEST * + **************/ + +var failed = false; + +try +{ + var prec = 3.3.toPrecision(undefined); + var str = 3.3.toString(); + if (prec !== str) + { + throw "not equal! " + + "3.3.toPrecision(undefined) === '" + prec + "', " + + "3.3.toString() === '" + str + "'"; + } +} +catch (e) +{ + failed = e; +} + +expect = false; +actual = failed; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/Number/browser.js b/source/spidermonkey-tests/ecma_3/Number/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Number/regress-442242-01.js b/source/spidermonkey-tests/ecma_3/Number/regress-442242-01.js new file mode 100644 index 00000000..5202c004 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Number/regress-442242-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 442242; +var summary = 'Do not assert: INT_FITS_IN_JSVAL(i)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var i = 28800000; + -i; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Number/shell.js b/source/spidermonkey-tests/ecma_3/Number/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/NumberFormatting/browser.js b/source/spidermonkey-tests/ecma_3/NumberFormatting/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/NumberFormatting/shell.js b/source/spidermonkey-tests/ecma_3/NumberFormatting/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/NumberFormatting/tostring-001.js b/source/spidermonkey-tests/ecma_3/NumberFormatting/tostring-001.js new file mode 100644 index 00000000..efc13f78 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/NumberFormatting/tostring-001.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + var n0 = 1e23; + var n1 = 5e22; + var n2 = 1.6e24; + + printStatus ("Number formatting test."); + printBugNumber ("11178"); + + reportCompare ("1e+23", n0.toString(), "1e23 toString()"); + reportCompare ("5e+22", n1.toString(), "5e22 toString()"); + reportCompare ("1.6e+24", n2.toString(), "1.6e24 toString()"); + +} + + diff --git a/source/spidermonkey-tests/ecma_3/Object/8.6.1-01.js b/source/spidermonkey-tests/ecma_3/Object/8.6.1-01.js new file mode 100644 index 00000000..14bfef7c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/8.6.1-01.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- + +var BUGNUMBER = 315436; +var summary = 'In strict mode, setting a read-only property should generate a warning'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +enterFunc (String (BUGNUMBER)); + +// should throw an error in strict mode +var actual = ''; +var expect = '"length" is read-only'; +var status = summary + ': Throw if STRICT and WERROR is enabled'; + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +try +{ + var s = new String ('abc'); + s.length = 0; +} +catch (e) +{ + actual = e.message; +} + +reportCompare(expect, actual, status); + +// should not throw an error if in strict mode and WERROR is false + +actual = 'did not throw'; +expect = 'did not throw'; +var status = summary + ': Do not throw if STRICT is enabled and WERROR is disabled'; + +// toggle werror off +options('werror'); + +try +{ + s.length = 0; +} +catch (e) +{ + actual = e.message; +} + +reportCompare(expect, actual, status); + +// should not throw an error if not in strict mode + +actual = 'did not throw'; +expect = 'did not throw'; +var status = summary + ': Do not throw if not in strict mode'; + +// toggle strict off +options('strict'); + +try +{ + s.length = 0; +} +catch (e) +{ + actual = e.message; +} + +reportCompare(expect, actual, status); diff --git a/source/spidermonkey-tests/ecma_3/Object/8.6.2.6-001.js b/source/spidermonkey-tests/ecma_3/Object/8.6.2.6-001.js new file mode 100644 index 00000000..9e7c9934 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/8.6.2.6-001.js @@ -0,0 +1,79 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 September 2002 + * SUMMARY: Test for TypeError on invalid default string value of object + * See ECMA reference at http://bugzilla.mozilla.org/show_bug.cgi?id=167325 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 167325; +var summary = "Test for TypeError on invalid default string value of object"; +var TEST_PASSED = 'TypeError'; +var TEST_FAILED = 'Generated an error, but NOT a TypeError!'; +var TEST_FAILED_BADLY = 'Did not generate ANY error!!!'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +expect = TEST_PASSED; +actual = TEST_FAILED_BADLY; +/* + * This should generate a TypeError. See ECMA reference + * at http://bugzilla.mozilla.org/show_bug.cgi?id=167325 + */ +try +{ + var obj = {toString: function() {return new Object();}} + obj == 'abc'; +} +catch(e) +{ + if (e instanceof TypeError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Object/8.6.2.6-002.js b/source/spidermonkey-tests/ecma_3/Object/8.6.2.6-002.js new file mode 100644 index 00000000..f2e24b28 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/8.6.2.6-002.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 476624; +var summary = '[[DefaultValue]] should not call valueOf, toString with an argument'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No exception'; + + try + { + var o = { + valueOf: function() + { + if (arguments.length !== 0) + throw "unexpected arguments! arg1 type=" + typeof arguments[0] + ", value=" + + arguments[0]; + return 2; + } + }; + o + 3; + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Object/browser.js b/source/spidermonkey-tests/ecma_3/Object/browser.js new file mode 100644 index 00000000..0e57d1fc --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/browser.js @@ -0,0 +1,7 @@ +var GLOBAL = 'Window'; + +function isObject(obj) +{ + return obj instanceof Object || obj == window; +} + diff --git a/source/spidermonkey-tests/ecma_3/Object/class-001.js b/source/spidermonkey-tests/ecma_3/Object/class-001.js new file mode 100644 index 00000000..0445ec87 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/class-001.js @@ -0,0 +1,122 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 Mar 2001 + * + * SUMMARY: Testing the internal [[Class]] property of objects + * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2 + * + * The getJSClass() function we use is in a utility file, e.g. "shell.js". + */ +//----------------------------------------------------------------------------- +var i = 0; +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing the internal [[Class]] property of objects'; +var statprefix = 'Current object is: '; +var status = ''; var statusList = [ ]; +var actual = ''; var actualvalue = [ ]; +var expect= ''; var expectedvalue = [ ]; + + +status = 'the global object'; +actual = getJSClass(this); +expect = GLOBAL; +if (expect == 'Window' && actual == 'XPCCrossOriginWrapper') +{ + print('Skipping global object due to XPCCrossOriginWrapper. See bug 390946'); +} +else +{ + addThis(); +} + +status = 'new Object()'; +actual = getJSClass(new Object()); +expect = 'Object'; +addThis(); + +status = 'new Function()'; +actual = getJSClass(new Function()); +expect = 'Function'; +addThis(); + +status = 'new Array()'; +actual = getJSClass(new Array()); +expect = 'Array'; +addThis(); + +status = 'new String()'; +actual = getJSClass(new String()); +expect = 'String'; +addThis(); + +status = 'new Boolean()'; +actual = getJSClass(new Boolean()); +expect = 'Boolean'; +addThis(); + +status = 'new Number()'; +actual = getJSClass(new Number()); +expect = 'Number'; +addThis(); + +status = 'Math'; +actual = getJSClass(Math); // can't use 'new' with the Math object (EMCA3, 15.8) +expect = 'Math'; +addThis(); + +status = 'new Date()'; +actual = getJSClass(new Date()); +expect = 'Date'; +addThis(); + +status = 'new RegExp()'; +actual = getJSClass(new RegExp()); +expect = 'RegExp'; +addThis(); + +status = 'new Error()'; +actual = getJSClass(new Error()); +expect = 'Error'; +addThis(); + + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + + +function addThis() +{ + statusList[UBound] = status; + actualvalue[UBound] = actual; + expectedvalue[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i = 0; i < UBound; i++) + { + reportCompare(expectedvalue[i], actualvalue[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusList[i]; +} diff --git a/source/spidermonkey-tests/ecma_3/Object/class-002.js b/source/spidermonkey-tests/ecma_3/Object/class-002.js new file mode 100644 index 00000000..d6ea450e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/class-002.js @@ -0,0 +1,112 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 Mar 2001 + * + * SUMMARY: Testing the [[Class]] property of native constructors. + * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2 re [[Class]] property. + * + * Same as class-001.js - but testing the constructors here, not + * object instances. Therefore we expect the [[Class]] property to + * equal 'Function' in each case. + * + * The getJSClass() function we use is in a utility file, e.g. "shell.js" + */ +//----------------------------------------------------------------------------- +var i = 0; +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing the internal [[Class]] property of native constructors'; +var statprefix = 'Current constructor is: '; +var status = ''; var statusList = [ ]; +var actual = ''; var actualvalue = [ ]; +var expect= ''; var expectedvalue = [ ]; + +/* + * We set the expect variable each time only for readability. + * We expect 'Function' every time; see discussion above - + */ +status = 'Object'; +actual = getJSClass(Object); +expect = 'Function'; +addThis(); + +status = 'Function'; +actual = getJSClass(Function); +expect = 'Function'; +addThis(); + +status = 'Array'; +actual = getJSClass(Array); +expect = 'Function'; +addThis(); + +status = 'String'; +actual = getJSClass(String); +expect = 'Function'; +addThis(); + +status = 'Boolean'; +actual = getJSClass(Boolean); +expect = 'Function'; +addThis(); + +status = 'Number'; +actual = getJSClass(Number); +expect = 'Function'; +addThis(); + +status = 'Date'; +actual = getJSClass(Date); +expect = 'Function'; +addThis(); + +status = 'RegExp'; +actual = getJSClass(RegExp); +expect = 'Function'; +addThis(); + +status = 'Error'; +actual = getJSClass(Error); +expect = 'Function'; +addThis(); + + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + + +function addThis() +{ + statusList[UBound] = status; + actualvalue[UBound] = actual; + expectedvalue[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i = 0; i < UBound; i++) + { + reportCompare(expectedvalue[i], actualvalue[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusList[i]; +} diff --git a/source/spidermonkey-tests/ecma_3/Object/class-003.js b/source/spidermonkey-tests/ecma_3/Object/class-003.js new file mode 100644 index 00000000..3c935253 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/class-003.js @@ -0,0 +1,105 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 Mar 2001 + * + * SUMMARY: Testing the [[Class]] property of native error types. + * See ECMA-262 Edition 3, Section 8.6.2 for the [[Class]] property. + * + * Same as class-001.js - but testing only the native error types here. + * See ECMA-262 Edition 3, Section 15.11.6 for a list of these types. + * + * ECMA expects the [[Class]] property to equal 'Error' in each case. + * See ECMA-262 Edition 3, Sections 15.11.1.1 and 15.11.7.2 for this. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=56868 + * + * The getJSClass() function we use is in a utility file, e.g. "shell.js" + */ +//----------------------------------------------------------------------------- +var i = 0; +var UBound = 0; +var BUGNUMBER = 56868; +var summary = 'Testing the internal [[Class]] property of native error types'; +var statprefix = 'Current object is: '; +var status = ''; var statusList = [ ]; +var actual = ''; var actualvalue = [ ]; +var expect= ''; var expectedvalue = [ ]; + +/* + * We set the expect variable each time only for readability. + * We expect 'Error' every time; see discussion above - + */ +status = 'new Error()'; +actual = getJSClass(new Error()); +expect = 'Error'; +addThis(); + +status = 'new EvalError()'; +actual = getJSClass(new EvalError()); +expect = 'Error'; +addThis(); + +status = 'new RangeError()'; +actual = getJSClass(new RangeError()); +expect = 'Error'; +addThis(); + +status = 'new ReferenceError()'; +actual = getJSClass(new ReferenceError()); +expect = 'Error'; +addThis(); + +status = 'new SyntaxError()'; +actual = getJSClass(new SyntaxError()); +expect = 'Error'; +addThis(); + +status = 'new TypeError()'; +actual = getJSClass(new TypeError()); +expect = 'Error'; +addThis(); + +status = 'new URIError()'; +actual = getJSClass(new URIError()); +expect = 'Error'; +addThis(); + + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + + +function addThis() +{ + statusList[UBound] = status; + actualvalue[UBound] = actual; + expectedvalue[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i = 0; i < UBound; i++) + { + reportCompare(expectedvalue[i], actualvalue[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusList[i]; +} diff --git a/source/spidermonkey-tests/ecma_3/Object/class-004.js b/source/spidermonkey-tests/ecma_3/Object/class-004.js new file mode 100644 index 00000000..a3f9b12f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/class-004.js @@ -0,0 +1,105 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 Mar 2001 + * + * SUMMARY: Testing [[Class]] property of native error constructors. + * See ECMA-262 Edition 3, Section 8.6.2 for the [[Class]] property. + * + * See ECMA-262 Edition 3, Section 15.11.6 for the native error types. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=56868 + * + * Same as class-003.js - but testing the constructors here, not + * object instances. Therefore we expect the [[Class]] property to + * equal 'Function' in each case. + * + * The getJSClass() function we use is in a utility file, e.g. "shell.js" + */ +//----------------------------------------------------------------------------- +var i = 0; +var UBound = 0; +var BUGNUMBER = 56868; +var summary = 'Testing the internal [[Class]] property of native error constructors'; +var statprefix = 'Current constructor is: '; +var status = ''; var statusList = [ ]; +var actual = ''; var actualvalue = [ ]; +var expect= ''; var expectedvalue = [ ]; + +/* + * We set the expect variable each time only for readability. + * We expect 'Function' every time; see discussion above - + */ +status = 'Error'; +actual = getJSClass(Error); +expect = 'Function'; +addThis(); + +status = 'EvalError'; +actual = getJSClass(EvalError); +expect = 'Function'; +addThis(); + +status = 'RangeError'; +actual = getJSClass(RangeError); +expect = 'Function'; +addThis(); + +status = 'ReferenceError'; +actual = getJSClass(ReferenceError); +expect = 'Function'; +addThis(); + +status = 'SyntaxError'; +actual = getJSClass(SyntaxError); +expect = 'Function'; +addThis(); + +status = 'TypeError'; +actual = getJSClass(TypeError); +expect = 'Function'; +addThis(); + +status = 'URIError'; +actual = getJSClass(URIError); +expect = 'Function'; +addThis(); + + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + + +function addThis() +{ + statusList[UBound] = status; + actualvalue[UBound] = actual; + expectedvalue[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i = 0; i < UBound; i++) + { + reportCompare(expectedvalue[i], actualvalue[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusList[i]; +} diff --git a/source/spidermonkey-tests/ecma_3/Object/class-005.js b/source/spidermonkey-tests/ecma_3/Object/class-005.js new file mode 100644 index 00000000..1ccdc94b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/class-005.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 Mar 2001 + * + * SUMMARY: Testing the internal [[Class]] property of user-defined types. + * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2 re [[Class]] property. + * + * Same as class-001.js - but testing user-defined types here, not + * native types. Therefore we expect the [[Class]] property to equal + * 'Object' in each case - + * + * The getJSClass() function we use is in a utility file, e.g. "shell.js" + */ +//----------------------------------------------------------------------------- +var i = 0; +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing the internal [[Class]] property of user-defined types'; +var statprefix = 'Current user-defined type is: '; +var status = ''; var statusList = [ ]; +var actual = ''; var actualvalue = [ ]; +var expect= ''; var expectedvalue = [ ]; + + +Calf.prototype= new Cow(); + +/* + * We set the expect variable each time only for readability. + * We expect 'Object' every time; see discussion above - + */ +status = 'new Cow()'; +actual = getJSClass(new Cow()); +expect = 'Object'; +addThis(); + +status = 'new Calf()'; +actual = getJSClass(new Calf()); +expect = 'Object'; +addThis(); + + +//--------------------------------------------------------------------------------- +test(); +//--------------------------------------------------------------------------------- + + +function addThis() +{ + statusList[UBound] = status; + actualvalue[UBound] = actual; + expectedvalue[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i = 0; i < UBound; i++) + { + reportCompare(expectedvalue[i], actualvalue[i], getStatus(i)); + } + + exitFunc ('test'); +} + + +function getStatus(i) +{ + return statprefix + statusList[i]; +} + + +function Cow(name) +{ + this.name=name; +} + + +function Calf(name) +{ + this.name=name; +} diff --git a/source/spidermonkey-tests/ecma_3/Object/regress-361274.js b/source/spidermonkey-tests/ecma_3/Object/regress-361274.js new file mode 100644 index 00000000..7b798143 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/regress-361274.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361274; +var summary = 'Embedded nulls in property names'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x='123'+'\0'+'456'; + var y='123'+'\0'+'789'; + var a={}; + a[x]=1; + a[y]=2; + + reportCompare(1, a[x], summary + ': 123\\0456'); + reportCompare(2, a[y], summary + ': 123\\0789'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Object/regress-385393-07.js b/source/spidermonkey-tests/ecma_3/Object/regress-385393-07.js new file mode 100644 index 00000000..90cace67 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/regress-385393-07.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385393; +var summary = 'Regression test for bug 385393'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (2).eval(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Object/regress-459405.js b/source/spidermonkey-tests/ecma_3/Object/regress-459405.js new file mode 100644 index 00000000..1e9f97cc --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/regress-459405.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459405; +var summary = 'Math is not ReadOnly'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'foo'; + + try + { + var Math = 'foo'; + actual = Math; + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Object/regress-72773.js b/source/spidermonkey-tests/ecma_3/Object/regress-72773.js new file mode 100644 index 00000000..2b772208 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/regress-72773.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 09 May 2001 + * + * SUMMARY: Regression test: we shouldn't crash on this code + * See http://bugzilla.mozilla.org/show_bug.cgi?id=72773 + * + * See ECMA-262 Edition 3 13-Oct-1999, Section 8.6.2 re [[Class]] property. + * + * Same as class-001.js - but testing user-defined types here, not + * native types. Therefore we expect the [[Class]] property to equal + * 'Object' in each case - + * + * The getJSClass() function we use is in a utility file, e.g. "shell.js" + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 72773; +var summary = "Regression test: we shouldn't crash on this code"; +var status = ''; +var actual = ''; +var expect = ''; +var sToEval = ''; + +/* + * This code should produce an error, but not a crash. + * 'TypeError: Function.prototype.toString called on incompatible object' + */ +sToEval += 'function Cow(name){this.name = name;}' +sToEval += 'function Calf(str){this.name = str;}' +sToEval += 'Calf.prototype = Cow;' +sToEval += 'new Calf().toString();' + +status = 'Trying to catch an expected error'; +try +{ + eval(sToEval); +} +catch(e) +{ + actual = getJSClass(e); + expect = 'Error'; +} + + +//---------------------------------------------------------------------------------------------- +test(); +//---------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + reportCompare(expect, actual, status); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Object/regress-79129-001.js b/source/spidermonkey-tests/ecma_3/Object/regress-79129-001.js new file mode 100644 index 00000000..66e170d3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/regress-79129-001.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 06 May 2001 + * + * SUMMARY: Regression test: we shouldn't crash on this code + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=79129 + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 79129; +var summary = "Regression test: we shouldn't crash on this code"; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + tryThis(); + reportCompare('No Crash', 'No Crash', 'Should not crash'); + exitFunc ('test'); +} + + +function tryThis() +{ + obj={}; + obj.a = obj.b = obj.c = 1; + delete obj.a; + delete obj.b; + delete obj.c; + obj.d = obj.e = 1; + obj.a=1; + obj.b=1; + obj.c=1; + obj.d=1; + obj.e=1; +} diff --git a/source/spidermonkey-tests/ecma_3/Object/shell.js b/source/spidermonkey-tests/ecma_3/Object/shell.js new file mode 100644 index 00000000..583d545f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Object/shell.js @@ -0,0 +1,71 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 14 Mar 2001 + * + * SUMMARY: Utility functions for testing objects - + * + * Suppose obj is an instance of a native type, e.g. Number. + * Then obj.toString() invokes Number.prototype.toString(). + * We would also like to access Object.prototype.toString(). + * + * The difference is this: suppose obj = new Number(7). + * Invoking Number.prototype.toString() on this just returns 7. + * Object.prototype.toString() on this returns '[object Number]'. + * + * The getJSType() function below will return '[object Number]' for us. + * The getJSClass() function returns 'Number', the [[Class]] property of obj. + * See ECMA-262 Edition 3, 13-Oct-1999, Section 8.6.2 + */ +//----------------------------------------------------------------------------- + + +var cnNoObject = 'Unexpected Error!!! Parameter to this function must be an object'; +var cnNoClass = 'Unexpected Error!!! Cannot find Class property'; +var cnObjectToString = Object.prototype.toString; +var GLOBAL = 'global'; + +// checks that it's safe to call findType() +function getJSType(obj) +{ + if (isObject(obj)) + return findType(obj); + return cnNoObject; +} + + +// checks that it's safe to call findType() +function getJSClass(obj) +{ + if (isObject(obj)) + return findClass(findType(obj)); + return cnNoObject; +} + + +function findType(obj) +{ + return cnObjectToString.apply(obj); +} + + +// given '[object Number]', return 'Number' +function findClass(sType) +{ + var re = /^\[.*\s+(\w+)\s*\]$/; + var a = sType.match(re); + + if (a && a[1]) + return a[1]; + return cnNoClass; +} + + +function isObject(obj) +{ + return obj instanceof Object; +} + diff --git a/source/spidermonkey-tests/ecma_3/Operators/11.13.1-001.js b/source/spidermonkey-tests/ecma_3/Operators/11.13.1-001.js new file mode 100644 index 00000000..8df71af8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Operators/11.13.1-001.js @@ -0,0 +1,118 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 08 May 2003 + * SUMMARY: JS should evaluate RHS before binding LHS implicit variable + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=204919 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 204919; +var summary = 'JS should evaluate RHS before binding LHS implicit variable'; +var TEST_PASSED = 'ReferenceError'; +var TEST_FAILED = 'Generated an error, but NOT a ReferenceError!'; +var TEST_FAILED_BADLY = 'Did not generate ANY error!!!'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * global scope - + */ +status = inSection(1); +try +{ + x = x; + actual = TEST_FAILED_BADLY; +} +catch(e) +{ + if (e instanceof ReferenceError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +expect = TEST_PASSED; +addThis(); + + +/* + * function scope - + */ +status = inSection(2); +try +{ + (function() {y = y;})(); + actual = TEST_FAILED_BADLY; +} +catch(e) +{ + if (e instanceof ReferenceError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +expect = TEST_PASSED; +addThis(); + + +/* + * eval scope - + */ +status = inSection(3); +try +{ + eval('z = z'); + actual = TEST_FAILED_BADLY; +} +catch(e) +{ + if (e instanceof ReferenceError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +expect = TEST_PASSED; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Operators/11.13.1-002.js b/source/spidermonkey-tests/ecma_3/Operators/11.13.1-002.js new file mode 100644 index 00000000..4ccc4bb1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Operators/11.13.1-002.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 312354; +var summary = '11.13.1 Simple Assignment should return type of RHS'; +var actual = ''; +var expect = ''; + +// XXX this test should really test each property of the native +// objects, but I'm too lazy. Patches accepted. + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var re = /x/g; +var y = re.lastIndex = "7"; + +expect = "string"; +actual = typeof y; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/Operators/11.4.1-001.js b/source/spidermonkey-tests/ecma_3/Operators/11.4.1-001.js new file mode 100644 index 00000000..ea0fb448 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Operators/11.4.1-001.js @@ -0,0 +1,86 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 14 April 2003 + * SUMMARY: |delete x.y| should return |true| if |x| has no property |y| + * See http://bugzilla.mozilla.org/show_bug.cgi?id=201987 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 201987; +var summary = '|delete x.y| should return |true| if |x| has no property |y|'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +var x = {}; +actual = delete x.y; +expect = true; +addThis(); + +status = inSection(2); +actual = delete {}.y; +expect = true; +addThis(); + +status = inSection(3); +actual = delete "".y; +expect = true; +addThis(); + +status = inSection(4); +actual = delete /abc/.y; +expect = true; +addThis(); + +status = inSection(5); +actual = delete (new Date()).y; +expect = true; +addThis(); + +status = inSection(6); +var x = 99; +actual = delete x.y; +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Operators/11.4.1-002.js b/source/spidermonkey-tests/ecma_3/Operators/11.4.1-002.js new file mode 100644 index 00000000..41d58438 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Operators/11.4.1-002.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 423300; +var summary = '11.4.1 - The delete Operator - delete f()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function f() {} + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = true; + + try + { + actual = delete f(); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Operators/browser.js b/source/spidermonkey-tests/ecma_3/Operators/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Operators/order-01.js b/source/spidermonkey-tests/ecma_3/Operators/order-01.js new file mode 100644 index 00000000..38d187a7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Operators/order-01.js @@ -0,0 +1,75 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 433672; +var summary = 'operator evaluation order'; +var actual = ''; +var expect = ''; + +function makeObject(label) +{ + var o = (function (){}); + + o.label = label; + o.valueOf = (function() { actual += this.label + ' valueOf, '; return Object.prototype.valueOf.call(this); }); + o.toString = (function() { actual += this.label + ' toString, '; return Object.prototype.toString.call(this); }); + + return o; +} + +operators = [ + {section: '11.5.1', operator: '*'}, + {section: '11.5.2', operator: '/'}, + {section: '11.5.3', operator: '%'}, + {section: '11.6.1', operator: '+'}, + {section: '11.6.2', operator: '-'}, + {section: '11.7.1', operator: '<<'}, + {section: '11.7.2', operator: '>>'}, + {section: '11.7.3', operator: '>>>'}, + {section: '11.8.1', operator: '<'}, + {section: '11.8.2', operator: '>'}, + {section: '11.8.3', operator: '<='}, + {section: '11.8.4', operator: '>='}, + {section: '11.10', operator: '&'}, + {section: '11.10', operator: '^'}, + {section: '11.10', operator: '|'}, + {section: '11.13.2', operator: '*='}, + {section: '11.13.2', operator: '/='}, + {section: '11.13.2', operator: '%='}, + {section: '11.13.2', operator: '+='}, + {section: '11.13.2', operator: '<<='}, + {section: '11.13.2', operator: '>>='}, + {section: '11.13.2', operator: '>>>='}, + {section: '11.13.2', operator: '&='}, + {section: '11.13.2', operator: '^='}, + {section: '11.13.2', operator: '|='}, + ]; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < operators.length; i++) + { + expect = 'left valueOf, left toString, right valueOf, right toString, '; + actual = ''; + + var left = makeObject('left'); + var right = makeObject('right'); + + eval('left ' + operators[i].operator + ' right'); + + reportCompare(expect, actual, summary + ': ' + operators[i].section + ' ' + operators[i].operator); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Operators/shell.js b/source/spidermonkey-tests/ecma_3/Operators/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/README b/source/spidermonkey-tests/ecma_3/README new file mode 100644 index 00000000..eebd421c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/README @@ -0,0 +1 @@ +ECMA 262 Edition 3 diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.2-1.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.2-1.js new file mode 100644 index 00000000..c2f41453 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.2-1.js @@ -0,0 +1,147 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 July 2002 + * SUMMARY: RegExp conformance test + * + * These testcases are derived from the examples in the ECMA-262 Ed.3 spec + * scattered through section 15.10.2. + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = '(none)'; +var summary = 'RegExp conformance test'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +pattern = /a|ab/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(2); +pattern = /((a)|(ab))((c)|(bc))/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc', 'a', 'a', undefined, 'bc', undefined, 'bc'); +addThis(); + +status = inSection(3); +pattern = /a[a-z]{2,4}/; +string = 'abcdefghi'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcde'); +addThis(); + +status = inSection(4); +pattern = /a[a-z]{2,4}?/; +string = 'abcdefghi'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(5); +pattern = /(aa|aabaac|ba|b|c)*/; +string = 'aabaac'; +actualmatch = string.match(pattern); +expectedmatch = Array('aaba', 'ba'); +addThis(); + +status = inSection(6); +pattern = /^(a+)\1*,\1+$/; +string = 'aaaaaaaaaa,aaaaaaaaaaaaaaa'; +actualmatch = string.match(pattern); +expectedmatch = Array('aaaaaaaaaa,aaaaaaaaaaaaaaa', 'aaaaa'); +addThis(); + +status = inSection(7); +pattern = /(z)((a+)?(b+)?(c))*/; +string = 'zaacbbbcac'; +actualmatch = string.match(pattern); +expectedmatch = Array('zaacbbbcac', 'z', 'ac', 'a', undefined, 'c'); +addThis(); + +status = inSection(8); +pattern = /(a*)*/; +string = 'b'; +actualmatch = string.match(pattern); +expectedmatch = Array('', undefined); +addThis(); + +status = inSection(9); +pattern = /(a*)b\1+/; +string = 'baaaac'; +actualmatch = string.match(pattern); +expectedmatch = Array('b', ''); +addThis(); + +status = inSection(10); +pattern = /(?=(a+))/; +string = 'baaabac'; +actualmatch = string.match(pattern); +expectedmatch = Array('', 'aaa'); +addThis(); + +status = inSection(11); +pattern = /(?=(a+))a*b\1/; +string = 'baaabac'; +actualmatch = string.match(pattern); +expectedmatch = Array('aba', 'a'); +addThis(); + +status = inSection(12); +pattern = /(.*?)a(?!(a+)b\2c)\2(.*)/; +string = 'baaabaac'; +actualmatch = string.match(pattern); +expectedmatch = Array('baaabaac', 'ba', undefined, 'abaac'); +addThis(); + +status = inSection(13); +pattern = /(?=(a+))/; +string = 'baaabac'; +actualmatch = string.match(pattern); +expectedmatch = Array('', 'aaa'); +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.2.12.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.2.12.js new file mode 100644 index 00000000..c2adfdfb --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.2.12.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 378738; +var summary = '15.10.2.12 - CharacterClassEscape \d'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = false; + actual = /\d/.test("\uFF11"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.3.1-1.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.3.1-1.js new file mode 100644 index 00000000..74ff25e4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.3.1-1.js @@ -0,0 +1,102 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 November 2000 + * + * + * SUMMARY: Passing (RegExp object, flag) to RegExp() function. + * This test arose from Bugzilla bug 61266. The ECMA3 section is: + * + * 15.10.3 The RegExp Constructor Called as a Function + * + * 15.10.3.1 RegExp(pattern, flags) + * + * If pattern is an object R whose [[Class]] property is "RegExp" + * and flags is undefined, then return R unchanged. Otherwise + * call the RegExp constructor (section 15.10.4.1), passing it the + * pattern and flags arguments and return the object constructed + * by that constructor. + * + * + * The current test will check the first scenario outlined above: + * + * "pattern" is itself a RegExp object R + * "flags" is undefined + * + * The flags parameter will be undefined in the sense of not being + * provided. We check that RegExp(R) returns R - + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = '61266'; +var summary = 'Passing (RegExp object,flag) to RegExp() function'; +var statprefix = 'RegExp(new RegExp('; +var comma = ', '; var singlequote = "'"; var closeparens = '))'; +var cnSUCCESS = 'RegExp() returned the supplied RegExp object'; +var cnFAILURE = 'RegExp() did NOT return the supplied RegExp object'; +var i = -1; var j = -1; var s = ''; var f = ''; +var obj = {}; +var status = ''; var actual = ''; var expect = ''; +var patterns = new Array(); +var flags = new Array(); + + +// various regular expressions to try - +patterns[0] = ''; +patterns[1] = 'abc'; +patterns[2] = '(.*)(3-1)\s\w'; +patterns[3] = '(.*)(...)\\s\\w'; +patterns[4] = '[^A-Za-z0-9_]'; +patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + +// various flags to try - +flags[0] = 'i'; +flags[1] = 'g'; +flags[2] = 'm'; +flags[3] = undefined; + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i in patterns) + { + s = patterns[i]; + + for (j in flags) + { + f = flags[j]; + status = getStatus(s, f); + obj = new RegExp(s, f); + + actual = (obj == RegExp(obj))? cnSUCCESS : cnFAILURE; + expect = cnSUCCESS; + reportCompare (expect, actual, status); + } + } + + exitFunc ('test'); +} + + +function getStatus(regexp, flag) +{ + return (statprefix + quote(regexp) + comma + flag + closeparens); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.3.1-2.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.3.1-2.js new file mode 100644 index 00000000..777bb43d --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.3.1-2.js @@ -0,0 +1,110 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 November 2000 + * + * + * SUMMARY: Passing (RegExp object, flag) to RegExp() function. + * This test arose from Bugzilla bug 61266. The ECMA3 section is: + * + * 15.10.3 The RegExp Constructor Called as a Function + * + * 15.10.3.1 RegExp(pattern, flags) + * + * If pattern is an object R whose [[Class]] property is "RegExp" + * and flags is undefined, then return R unchanged. Otherwise + * call the RegExp constructor (section 15.10.4.1), passing it the + * pattern and flags arguments and return the object constructed + * by that constructor. + * + * + * The current test will check the first scenario outlined above: + * + * "pattern" is itself a RegExp object R + * "flags" is undefined + * + * This test is identical to test 15.10.3.1-1.js, except here we do: + * + * RegExp(R, undefined); + * + * instead of: + * + * RegExp(R); + * + * + * We check that RegExp(R, undefined) returns R - + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = '61266'; +var summary = 'Passing (RegExp object,flag) to RegExp() function'; +var statprefix = 'RegExp(new RegExp('; +var comma = ', '; var singlequote = "'"; var closeparens = '))'; +var cnSUCCESS = 'RegExp() returned the supplied RegExp object'; +var cnFAILURE = 'RegExp() did NOT return the supplied RegExp object'; +var i = -1; var j = -1; var s = ''; var f = ''; +var obj = {}; +var status = ''; var actual = ''; var expect = ''; +var patterns = new Array(); +var flags = new Array(); + + +// various regular expressions to try - +patterns[0] = ''; +patterns[1] = 'abc'; +patterns[2] = '(.*)(3-1)\s\w'; +patterns[3] = '(.*)(...)\\s\\w'; +patterns[4] = '[^A-Za-z0-9_]'; +patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + +// various flags to try - +flags[0] = 'i'; +flags[1] = 'g'; +flags[2] = 'm'; +flags[3] = undefined; + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i in patterns) + { + s = patterns[i]; + + for (j in flags) + { + f = flags[j]; + status = getStatus(s, f); + obj = new RegExp(s, f); + + actual = (obj == RegExp(obj, undefined))? cnSUCCESS : cnFAILURE ; + expect = cnSUCCESS; + reportCompare (expect, actual, status); + } + } + + exitFunc ('test'); +} + + +function getStatus(regexp, flag) +{ + return (statprefix + quote(regexp) + comma + flag + closeparens); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-1.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-1.js new file mode 100644 index 00000000..6a3ff20a --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-1.js @@ -0,0 +1,93 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 November 2000 + * + * + *SUMMARY: Passing a RegExp object to a RegExp() constructor. + *This test arose from Bugzilla bug 61266. The ECMA3 section is: + * + * 15.10.4.1 new RegExp(pattern, flags) + * + * If pattern is an object R whose [[Class]] property is "RegExp" and + * flags is undefined, then let P be the pattern used to construct R + * and let F be the flags used to construct R. If pattern is an object R + * whose [[Class]] property is "RegExp" and flags is not undefined, + * then throw a TypeError exception. Otherwise, let P be the empty string + * if pattern is undefined and ToString(pattern) otherwise, and let F be + * the empty string if flags is undefined and ToString(flags) otherwise. + * + * + *The current test will check the first scenario outlined above: + * + * "pattern" is itself a RegExp object R + * "flags" is undefined + * + * We check that a new RegExp object obj2 defined from these parameters + * is morally the same as the original RegExp object obj1. Of course, they + * can't be equal as objects - so we check their enumerable properties... + * + * In this test, the initial RegExp object obj1 will not include a + * flag. The flags parameter for obj2 will be undefined in the sense + * of not being provided. + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = '61266'; +var summary = 'Passing a RegExp object to a RegExp() constructor'; +var statprefix = 'Applying RegExp() twice to pattern '; +var statsuffix = '; testing property '; +var singlequote = "'"; +var i = -1; var s = ''; +var obj1 = {}; var obj2 = {}; +var status = ''; var actual = ''; var expect = ''; var msg = ''; +var patterns = new Array(); + + +// various regular expressions to try - +patterns[0] = ''; +patterns[1] = 'abc'; +patterns[2] = '(.*)(3-1)\s\w'; +patterns[3] = '(.*)(...)\\s\\w'; +patterns[4] = '[^A-Za-z0-9_]'; +patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i in patterns) + { + s = patterns[i]; + status =getStatus(s); + obj1 = new RegExp(s); + obj2 = new RegExp(obj1); + + reportCompare (obj1 + '', obj2 + '', status); + } + + exitFunc ('test'); +} + + +function getStatus(regexp) +{ + return (statprefix + quote(regexp) + statsuffix); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-2.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-2.js new file mode 100644 index 00000000..71fe58d1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-2.js @@ -0,0 +1,99 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 November 2000 + * + * + *SUMMARY: Passing a RegExp object to a RegExp() constructor. + *This test arose from Bugzilla bug 61266. The ECMA3 section is: + * + * 15.10.4.1 new RegExp(pattern, flags) + * + * If pattern is an object R whose [[Class]] property is "RegExp" and + * flags is undefined, then let P be the pattern used to construct R + * and let F be the flags used to construct R. If pattern is an object R + * whose [[Class]] property is "RegExp" and flags is not undefined, + * then throw a TypeError exception. Otherwise, let P be the empty string + * if pattern is undefined and ToString(pattern) otherwise, and let F be + * the empty string if flags is undefined and ToString(flags) otherwise. + * + * + *The current test will check the first scenario outlined above: + * + * "pattern" is itself a RegExp object R + * "flags" is undefined + * + * We check that a new RegExp object obj2 defined from these parameters + * is morally the same as the original RegExp object obj1. Of course, they + * can't be equal as objects - so we check their enumerable properties... + * + * In this test, the initial RegExp object obj1 will not include a + * flag. This test is identical to test 15.10.4.1-1.js, except that + * here we use this syntax: + * + * obj2 = new RegExp(obj1, undefined); + * + * instead of: + * + * obj2 = new RegExp(obj1); + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = '61266'; +var summary = 'Passing a RegExp object to a RegExp() constructor'; +var statprefix = 'Applying RegExp() twice to pattern '; +var statsuffix = '; testing property '; +var singlequote = "'"; +var i = -1; var s = ''; +var obj1 = {}; var obj2 = {}; +var status = ''; var actual = ''; var expect = ''; var msg = ''; +var patterns = new Array(); + + +// various regular expressions to try - +patterns[0] = ''; +patterns[1] = 'abc'; +patterns[2] = '(.*)(3-1)\s\w'; +patterns[3] = '(.*)(...)\\s\\w'; +patterns[4] = '[^A-Za-z0-9_]'; +patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i in patterns) + { + s = patterns[i]; + status =getStatus(s); + obj1 = new RegExp(s); + obj2 = new RegExp(obj1, undefined); // see introduction to bug + + reportCompare (obj1 + '', obj2 + '', status); + } + + exitFunc ('test'); +} + + +function getStatus(regexp) +{ + return (statprefix + quote(regexp) + statsuffix); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-3.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-3.js new file mode 100644 index 00000000..15959ef5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-3.js @@ -0,0 +1,105 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 November 2000 + * + * + *SUMMARY: Passing a RegExp object to a RegExp() constructor. + *This test arose from Bugzilla bug 61266. The ECMA3 section is: + * + * 15.10.4.1 new RegExp(pattern, flags) + * + * If pattern is an object R whose [[Class]] property is "RegExp" and + * flags is undefined, then let P be the pattern used to construct R + * and let F be the flags used to construct R. If pattern is an object R + * whose [[Class]] property is "RegExp" and flags is not undefined, + * then throw a TypeError exception. Otherwise, let P be the empty string + * if pattern is undefined and ToString(pattern) otherwise, and let F be + * the empty string if flags is undefined and ToString(flags) otherwise. + * + * + *The current test will check the first scenario outlined above: + * + * "pattern" is itself a RegExp object R + * "flags" is undefined + * + * We check that a new RegExp object obj2 defined from these parameters + * is morally the same as the original RegExp object obj1. Of course, they + * can't be equal as objects - so we check their enumerable properties... + * + * In this test, the initial RegExp obj1 will include a flag. The flags + * parameter for obj2 will be undefined in the sense of not being provided. + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = '61266'; +var summary = 'Passing a RegExp object to a RegExp() constructor'; +var statprefix = 'Applying RegExp() twice to pattern '; +var statmiddle = ' and flag '; +var statsuffix = '; testing property '; +var singlequote = "'"; +var i = -1; var j = -1; var s = ''; +var obj1 = {}; var obj2 = {}; +var status = ''; var actual = ''; var expect = ''; var msg = ''; +var patterns = new Array(); +var flags = new Array(); + + +// various regular expressions to try - +patterns[0] = ''; +patterns[1] = 'abc'; +patterns[2] = '(.*)(3-1)\s\w'; +patterns[3] = '(.*)(...)\\s\\w'; +patterns[4] = '[^A-Za-z0-9_]'; +patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + +// various flags to try - +flags[0] = 'i'; +flags[1] = 'g'; +flags[2] = 'm'; +flags[3] = undefined; + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i in patterns) + { + s = patterns[i]; + + for (j in flags) + { + f = flags[j]; + status = getStatus(s, f); + obj1 = new RegExp(s, f); + obj2 = new RegExp(obj1); + + reportCompare (obj1 + '', obj2 + '', status); + } + } + + exitFunc ('test'); +} + + +function getStatus(regexp, flag) +{ + return (statprefix + quote(regexp) + statmiddle + flag + statsuffix); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-4.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-4.js new file mode 100644 index 00000000..455e1d24 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-4.js @@ -0,0 +1,112 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 November 2000 + * + * + *SUMMARY: Passing a RegExp object to a RegExp() constructor. + *This test arose from Bugzilla bug 61266. The ECMA3 section is: + * + * 15.10.4.1 new RegExp(pattern, flags) + * + * If pattern is an object R whose [[Class]] property is "RegExp" and + * flags is undefined, then let P be the pattern used to construct R + * and let F be the flags used to construct R. If pattern is an object R + * whose [[Class]] property is "RegExp" and flags is not undefined, + * then throw a TypeError exception. Otherwise, let P be the empty string + * if pattern is undefined and ToString(pattern) otherwise, and let F be + * the empty string if flags is undefined and ToString(flags) otherwise. + * + * + *The current test will check the first scenario outlined above: + * + * "pattern" is itself a RegExp object R + * "flags" is undefined + * + * We check that a new RegExp object obj2 defined from these parameters + * is morally the same as the original RegExp object obj1. Of course, they + * can't be equal as objects - so we check their enumerable properties... + * + * In this test, the initial RegExp object obj1 will include a + * flag. This test is identical to test 15.10.4.1-3.js, except that + * here we use this syntax: + * + * obj2 = new RegExp(obj1, undefined); + * + * instead of: + * + * obj2 = new RegExp(obj1); + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = '61266'; +var summary = 'Passing a RegExp object to a RegExp() constructor'; +var statprefix = 'Applying RegExp() twice to pattern '; +var statmiddle = ' and flag '; +var statsuffix = '; testing property '; +var singlequote = "'"; +var i = -1; var j = -1; var s = ''; +var obj1 = {}; var obj2 = {}; +var status = ''; var actual = ''; var expect = ''; var msg = ''; +var patterns = new Array(); +var flags = new Array(); + + +// various regular expressions to try - +patterns[0] = ''; +patterns[1] = 'abc'; +patterns[2] = '(.*)(3-1)\s\w'; +patterns[3] = '(.*)(...)\\s\\w'; +patterns[4] = '[^A-Za-z0-9_]'; +patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + +// various flags to try - +flags[0] = 'i'; +flags[1] = 'g'; +flags[2] = 'm'; +flags[3] = undefined; + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i in patterns) + { + s = patterns[i]; + + for (j in flags) + { + f = flags[j]; + status = getStatus(s, f); + obj1 = new RegExp(s, f); + obj2 = new RegExp(obj1, undefined); // see introduction to bug + + reportCompare (obj1 + '', obj2 + '', status); + } + } + + exitFunc ('test'); +} + + +function getStatus(regexp, flag) +{ + return (statprefix + quote(regexp) + statmiddle + flag + statsuffix); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-5-n.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-5-n.js new file mode 100644 index 00000000..23ce2ff5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-5-n.js @@ -0,0 +1,105 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 26 November 2000 + * + * + *SUMMARY: Passing a RegExp object to a RegExp() constructor. + *This test arose from Bugzilla bug 61266. The ECMA3 section is: + * + * 15.10.4.1 new RegExp(pattern, flags) + * + * If pattern is an object R whose [[Class]] property is "RegExp" and + * flags is undefined, then let P be the pattern used to construct R + * and let F be the flags used to construct R. If pattern is an object R + * whose [[Class]] property is "RegExp" and flags is not undefined, + * then throw a TypeError exception. Otherwise, let P be the empty string + * if pattern is undefined and ToString(pattern) otherwise, and let F be + * the empty string if flags is undefined and ToString(flags) otherwise. + * + * + *The current test will check the second scenario outlined above: + * + * "pattern" is itself a RegExp object R + * "flags" is NOT undefined + * + * This should throw an exception ... we test for this. + * + */ + +//------------------------------------------------------------------------------------------------- +var BUGNUMBER = '61266'; +var summary = 'Negative test: Passing (RegExp object, flag) to RegExp() constructor'; +var statprefix = 'Passing RegExp object on pattern '; +var statsuffix = '; passing flag '; +var cnFAILURE = 'Expected an exception to be thrown, but none was -'; +var singlequote = "'"; +var i = -1; var j = -1; var s = ''; var f = ''; +var obj1 = {}; var obj2 = {}; +var patterns = new Array(); +var flags = new Array(); + + +// various regular expressions to try - +patterns[0] = ''; +patterns[1] = 'abc'; +patterns[2] = '(.*)(3-1)\s\w'; +patterns[3] = '(.*)(...)\\s\\w'; +patterns[4] = '[^A-Za-z0-9_]'; +patterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + +// various flags to try - +flags[0] = 'i'; +flags[1] = 'g'; +flags[2] = 'm'; + + +DESCRIPTION = "Negative test: Passing (RegExp object, flag) to RegExp() constructor" + EXPECTED = "error"; + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (i in patterns) + { + s = patterns[i]; + + for (j in flags) + { + f = flags[j]; + printStatus(getStatus(s, f)); + obj1 = new RegExp(s, f); + obj2 = new RegExp(obj1, f); // this should cause an exception + + // WE SHOULD NEVER REACH THIS POINT - + reportCompare('PASS', 'FAIL', cnFAILURE); + } + } + + exitFunc ('test'); +} + + +function getStatus(regexp, flag) +{ + return (statprefix + quote(regexp) + statsuffix + flag); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-6.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-6.js new file mode 100644 index 00000000..104e83ee --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.4.1-6.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + 15.10.4.1 new RegExp(pattern, flags) + + If F contains any character other than "g", "i", or" m", or if it + contains the same one more than once, then throw a SyntaxError + exception. +*/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 476940; +var summary = 'Section 15.10.4.1 - RegExp with invalid flags'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var invalidflags = ['ii', 'gg', 'mm', 'a']; + + for (var i = 0; i < invalidflags.length; i++) + { + var flag = invalidflags[i]; + expect = 'SyntaxError: invalid regular expression flag ' + flag.charAt(0); + actual = ''; + try + { + new RegExp('bar', flag); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + + ': new RegExp("bar", "' + flag + '")'); + + actual = ''; + try + { + eval("/bar/" + flag); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /bar/' + flag + ')'); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.6.2-1.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.6.2-1.js new file mode 100644 index 00000000..9717ba21 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.6.2-1.js @@ -0,0 +1,106 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 23 October 2001 + * + * SUMMARY: Testing regexps with the global flag set. + * NOT every substring fitting the given pattern will be matched. + * The parent string is CONSUMED as successive matches are found. + * + * From the ECMA-262 Final spec: + * + * 15.10.6.2 RegExp.prototype.exec(string) + * Performs a regular expression match of string against the regular + * expression and returns an Array object containing the results of + * the match, or null if the string did not match. + * + * The string ToString(string) is searched for an occurrence of the + * regular expression pattern as follows: + * + * 1. Let S be the value of ToString(string). + * 2. Let length be the length of S. + * 3. Let lastIndex be the value of the lastIndex property. + * 4. Let i be the value of ToInteger(lastIndex). + * 5. If the global property is false, let i = 0. + * 6. If i < 0 or i > length then set lastIndex to 0 and return null. + * 7. Call [[Match]], giving it the arguments S and i. + * If [[Match]] returned failure, go to step 8; + * otherwise let r be its State result and go to step 10. + * 8. Let i = i+1. + * 9. Go to step 6. + * 10. Let e be r's endIndex value. + * 11. If the global property is true, set lastIndex to e. + * + * etc. + * + * + * So when the global flag is set, |lastIndex| is incremented every time + * there is a match; not from i to i+1, but from i to "endIndex" e: + * + * e = (index of last input character matched so far by the pattern) + 1 + * + * Thus in the example below, the first endIndex e occurs after the + * first match 'a b'. The next match will begin AFTER this, and so + * will NOT be 'b c', but rather 'c d'. Similarly, 'd e' won't be matched. + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing regexps with the global flag set'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +string = 'a b c d e'; +pattern = /\w\s\w/g; +actualmatch = string.match(pattern); +expectedmatch = ['a b','c d']; // see above explanation - +addThis(); + + +status = inSection(2); +string = '12345678'; +pattern = /\d\d\d/g; +actualmatch = string.match(pattern); +expectedmatch = ['123','456']; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/15.10.6.2-2.js b/source/spidermonkey-tests/ecma_3/RegExp/15.10.6.2-2.js new file mode 100644 index 00000000..cc01abe2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/15.10.6.2-2.js @@ -0,0 +1,333 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 18 Feb 2002 + * SUMMARY: Testing re.exec(str) when re.lastIndex is < 0 or > str.length + * + * Case 1: If re has the global flag set, then re(str) should be null + * Case 2: If re doesn't have this set, then re(str) should be unaffected + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=76717 + * + * + * From the ECMA-262 Final spec: + * + * 15.10.6.2 RegExp.prototype.exec(string) + * Performs a regular expression match of string against the regular + * expression and returns an Array object containing the results of + * the match, or null if the string did not match. + * + * The string ToString(string) is searched for an occurrence of the + * regular expression pattern as follows: + * + * 1. Let S be the value of ToString(string). + * 2. Let length be the length of S. + * 3. Let lastIndex be the value of the lastIndex property. + * 4. Let i be the value of ToInteger(lastIndex). + * 5. If the global property is false, let i = 0. + * 6. If i < 0 or i > length then set lastIndex to 0 and return null. + * 7. Call [[Match]], giving it the arguments S and i. + * If [[Match]] returned failure, go to step 8; + * otherwise let r be its State result and go to step 10. + * 8. Let i = i+1. + * 9. Go to step 6. + * 10. Let e be r's endIndex value. + * 11. If the global property is true, set lastIndex to e. + * + * etc. + * + * + * So: + * + * A. If the global flag is not set, |lastIndex| is set to 0 + * before the match is attempted; thus the match is unaffected. + * + * B. If the global flag IS set and re.lastIndex is >= 0 and <= str.length, + * |lastIndex| is incremented every time there is a match; not from + * i to i+1, but from i to "endIndex" e: + * + * e = (index of last input character matched so far by the pattern) + 1 + * + * The match is then attempted from this position in the string (Step 7). + * + * C. When the global flag IS set and re.lastIndex is < 0 or > str.length, + * |lastIndex| is set to 0 and the match returns null. + * + * + * Note the |lastIndex| property is writeable, and may be set arbitrarily + * by the programmer - and we will do that below. + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 76717; +var summary = 'Testing re.exec(str) when re.lastIndex is < 0 or > str.length'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +/****************************************************************************** + * + * Case 1 : when the global flag is set - + * + *****************************************************************************/ +pattern = /abc/gi; +string = 'AbcaBcabC'; + +status = inSection(1); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc'); +addThis(); + +status = inSection(2); +actualmatch = pattern.exec(string); +expectedmatch = Array('aBc'); +addThis(); + +status = inSection(3); +actualmatch = pattern.exec(string); +expectedmatch = Array('abC'); +addThis(); + +/* + * At this point |lastIndex| is > string.length, so the match should be null - + */ +status = inSection(4); +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +/* + * Now let's set |lastIndex| to -1, so the match should again be null - + */ +status = inSection(5); +pattern.lastIndex = -1; +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +/* + * Now try some edge-case values. Thanks to the work done in + * http://bugzilla.mozilla.org/show_bug.cgi?id=124339, |lastIndex| + * is now stored as a double instead of a uint32_t (unsigned integer). + * + * Note 2^32 -1 is the upper bound for uint32's, but doubles can go + * all the way up to Number.MAX_VALUE. So that's why we need cases + * between those two numbers. + */ +status = inSection(6); +pattern.lastIndex = Math.pow(2,32); +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(7); +pattern.lastIndex = -Math.pow(2,32); +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(8); +pattern.lastIndex = Math.pow(2,32) + 1; +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(9); +pattern.lastIndex = -(Math.pow(2,32) + 1); +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(10); +pattern.lastIndex = Math.pow(2,32) * 2; +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(11); +pattern.lastIndex = -Math.pow(2,32) * 2; +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(12); +pattern.lastIndex = Math.pow(2,40); +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(13); +pattern.lastIndex = -Math.pow(2,40); +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(14); +pattern.lastIndex = Number.MAX_VALUE; +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + +status = inSection(15); +pattern.lastIndex = -Number.MAX_VALUE; +actualmatch = pattern.exec(string); +expectedmatch = null; +addThis(); + + + +/****************************************************************************** + * + * Case 2: repeat all the above cases WITHOUT the global flag set. + * According to EMCA. |lastIndex| should get set to 0 before the match. + * + * Therefore re.exec(str) should be unaffected; thus our expected values + * below are now DIFFERENT when |lastIndex| is < 0 or > str.length + * + *****************************************************************************/ + +pattern = /abc/i; +string = 'AbcaBcabC'; + +status = inSection(16); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc'); +addThis(); + +status = inSection(17); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc'); // NOT Array('aBc') as before - +addThis(); + +status = inSection(18); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc'); // NOT Array('abC') as before - +addThis(); + +/* + * At this point above, |lastIndex| WAS > string.length, but not here - + */ +status = inSection(19); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +/* + * Now let's set |lastIndex| to -1 + */ +status = inSection(20); +pattern.lastIndex = -1; +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +/* + * Now try some edge-case values. Thanks to the work done in + * http://bugzilla.mozilla.org/show_bug.cgi?id=124339, |lastIndex| + * is now stored as a double instead of a uint32_t (unsigned integer). + * + * Note 2^32 -1 is the upper bound for uint32's, but doubles can go + * all the way up to Number.MAX_VALUE. So that's why we need cases + * between those two numbers. + */ +status = inSection(21); +pattern.lastIndex = Math.pow(2,32); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(22); +pattern.lastIndex = -Math.pow(2,32); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(23); +pattern.lastIndex = Math.pow(2,32) + 1; +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(24); +pattern.lastIndex = -(Math.pow(2,32) + 1); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(25); +pattern.lastIndex = Math.pow(2,32) * 2; +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(26); +pattern.lastIndex = -Math.pow(2,32) * 2; +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(27); +pattern.lastIndex = Math.pow(2,40); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before -; + addThis(); + +status = inSection(28); +pattern.lastIndex = -Math.pow(2,40); +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(29); +pattern.lastIndex = Number.MAX_VALUE; +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + +status = inSection(30); +pattern.lastIndex = -Number.MAX_VALUE; +actualmatch = pattern.exec(string); +expectedmatch = Array('Abc') // NOT null as before - + addThis(); + + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/browser.js b/source/spidermonkey-tests/ecma_3/RegExp/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/RegExp/octal-001.js b/source/spidermonkey-tests/ecma_3/RegExp/octal-001.js new file mode 100644 index 00000000..449384b4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/octal-001.js @@ -0,0 +1,102 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 18 July 2002 + * SUMMARY: Testing octal sequences in regexps + * See http://bugzilla.mozilla.org/show_bug.cgi?id=141078 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 141078; +var summary = 'Testing octal sequences in regexps'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +pattern = /\240/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +/* + * In the following sections, we test the octal escape sequence '\052'. + * This is character code 42, representing the asterisk character '*'. + * The Unicode escape for it would be '\u002A', the hex escape '\x2A'. + */ +status = inSection(2); +pattern = /ab\052c/; +string = 'ab*c'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab*c'); +addThis(); + +status = inSection(3); +pattern = /ab\052*c/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(4); +pattern = /ab(\052)+c/; +string = 'ab****c'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab****c', '*'); +addThis(); + +status = inSection(5); +pattern = /ab((\052)+)c/; +string = 'ab****c'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab****c', '****', '*'); +addThis(); + +status = inSection(6); +pattern = /(?:\052)c/; +string = 'ab****c'; +actualmatch = string.match(pattern); +expectedmatch = Array('*c'); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/octal-002.js b/source/spidermonkey-tests/ecma_3/RegExp/octal-002.js new file mode 100644 index 00000000..947031a9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/octal-002.js @@ -0,0 +1,184 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 31 July 2002 + * SUMMARY: Testing regexps containing octal escape sequences + * This is an elaboration of mozilla/js/tests/ecma_2/RegExp/octal-003.js + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=141078 + * for a reference on octal escape sequences in regexps. + * + * NOTE: + * We will use the identities '\011' === '\u0009' === '\x09' === '\t' + * + * The first is an octal escape sequence (\(0-3)OO; O an octal digit). + * See ECMA-262 Edition 2, Section 7.7.4 "String Literals". These were + * dropped in Edition 3 but we support them for backward compatibility. + * + * The second is a Unicode escape sequence (\uHHHH; H a hex digit). + * Since octal 11 = hex 9, the two escapes define the same character. + * + * The third is a hex escape sequence (\xHH; H a hex digit). + * Since hex 09 = hex 0009, this defines the same character. + * + * The fourth is the familiar escape sequence for a horizontal tab, + * defined in the ECMA spec as having Unicode value \u0009. + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 141078; +var summary = 'Testing regexps containing octal escape sequences'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +/* + * Test a string containing the null character '\0' followed by the string '11' + * + * 'a' + String.fromCharCode(0) + '11'; + * + * Note we can't simply write 'a\011', because '\011' would be interpreted + * as the octal escape sequence for the tab character (see above). + * + * We should get no match from the regexp /.\011/, because it should be + * looking for the octal escape sequence \011, i.e. the tab character - + * + */ +status = inSection(1); +pattern = /.\011/; +string = 'a' + String.fromCharCode(0) + '11'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + + +/* + * Try same thing with 'xx' in place of '11'. + * + * Should get a match now, because the octal escape sequence in the regexp + * has been reduced from \011 to \0, and '\0' is present in the string - + */ +status = inSection(2); +pattern = /.\0xx/; +string = 'a' + String.fromCharCode(0) + 'xx'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + +/* + * Same thing; don't use |String.fromCharCode(0)| this time. + * There is no ambiguity in '\0xx': it is the null character + * followed by two x's, no other interpretation is possible. + */ +status = inSection(3); +pattern = /.\0xx/; +string = 'a\0xx'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + +/* + * This one should produce a match. The two-character string + * 'a' + '\011' is duplicated in the pattern and test string: + */ +status = inSection(4); +pattern = /.\011/; +string = 'a\011'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + +/* + * Same as above, only now, for the second character of the string, + * use the Unicode escape '\u0009' instead of the octal escape '\011' + */ +status = inSection(5); +pattern = /.\011/; +string = 'a\u0009'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + +/* + * Same as above, only now for the second character of the string, + * use the hex escape '\x09' instead of the octal escape '\011' + */ +status = inSection(6); +pattern = /.\011/; +string = 'a\x09'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + +/* + * Same as above, only now for the second character of the string, + * use the escape '\t' instead of the octal escape '\011' + */ +status = inSection(7); +pattern = /.\011/; +string = 'a\t'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + +/* + * Return to the string from Section 1. + * + * Unlike Section 1, use the RegExp() function to create the + * regexp pattern: null character followed by the string '11'. + * + * Since this is exactly what the string is, we should get a match - + */ +status = inSection(8); +string = 'a' + String.fromCharCode(0) + '11'; +pattern = RegExp(string); +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/perlstress-001.js b/source/spidermonkey-tests/ecma_3/RegExp/perlstress-001.js new file mode 100644 index 00000000..ba23360d --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/perlstress-001.js @@ -0,0 +1,3196 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 2002-07-07 + * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine. + * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested. + * + * This test was created by running various patterns and strings through the + * Perl 5 RegExp engine. We saved the results below to test the JS engine. + * + * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented + * out such sections altogether, or modified them to fit what we expect from JS. + * + * EXAMPLES: + * + * - In JS, regexp captures (/(a) etc./) must hold |undefined| if not used. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=123437. + * By contrast, in Perl, unmatched captures hold the empty string. + * We have modified such sections accordingly. Example: + + pattern = /^([^a-z])|(\^)$/; + string = '.'; + actualmatch = string.match(pattern); + //expectedmatch = Array('.', '.', ''); <<<--- Perl + expectedmatch = Array('.', '.', undefined); <<<--- JS + addThis(); + + + * - In JS, you can't refer to a capture before it's encountered & completed + * + * - Perl supports ] & ^] inside a [], ECMA does not + * + * - ECMA does support (?: (?= and (?! operators, but doesn't support (?< etc. + * + * - ECMA doesn't support (?imsx or (?-imsx + * + * - ECMA doesn't support (?(condition) + * + * - Perl has \Z has end-of-line, ECMA doesn't + * + * - In ECMA, ^ matches only the empty string before the first character + * + * - In ECMA, $ matches only the empty string at end of input (unless multiline) + * + * - ECMA spec says that each atom in a range must be a single character + * + * - ECMA doesn't support \A + * + * - ECMA doesn't have rules for [: + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 85721; +var summary = 'Testing regular expression edge cases'; +var cnSingleSpace = ' '; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); +var cnLBOUND = 1; +var cnUBOUND = 1000; + + +status = inSection(1); +pattern = /abc/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(2); +pattern = /abc/; +string = 'xabcy'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(3); +pattern = /abc/; +string = 'ababc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(4); +pattern = /ab*c/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(5); +pattern = /ab*bc/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(6); +pattern = /ab*bc/; +string = 'abbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbc'); +addThis(); + +status = inSection(7); +pattern = /ab*bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbbbc'); +addThis(); + +status = inSection(8); +pattern = /.{1}/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(9); +pattern = /.{3,4}/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbb'); +addThis(); + +status = inSection(10); +pattern = /ab{0,}bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbbbc'); +addThis(); + +status = inSection(11); +pattern = /ab+bc/; +string = 'abbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbc'); +addThis(); + +status = inSection(12); +pattern = /ab+bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbbbc'); +addThis(); + +status = inSection(13); +pattern = /ab{1,}bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbbbc'); +addThis(); + +status = inSection(14); +pattern = /ab{1,3}bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbbbc'); +addThis(); + +status = inSection(15); +pattern = /ab{3,4}bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbbbc'); +addThis(); + +status = inSection(16); +pattern = /ab?bc/; +string = 'abbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbc'); +addThis(); + +status = inSection(17); +pattern = /ab?bc/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(18); +pattern = /ab{0,1}bc/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(19); +pattern = /ab?c/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(20); +pattern = /ab{0,1}c/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(21); +pattern = /^abc$/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(22); +pattern = /^abc/; +string = 'abcc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(23); +pattern = /abc$/; +string = 'aabc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(24); +pattern = /^/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array(''); +addThis(); + +status = inSection(25); +pattern = /$/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array(''); +addThis(); + +status = inSection(26); +pattern = /a.c/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(27); +pattern = /a.c/; +string = 'axc'; +actualmatch = string.match(pattern); +expectedmatch = Array('axc'); +addThis(); + +status = inSection(28); +pattern = /a.*c/; +string = 'axyzc'; +actualmatch = string.match(pattern); +expectedmatch = Array('axyzc'); +addThis(); + +status = inSection(29); +pattern = /a[bc]d/; +string = 'abd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abd'); +addThis(); + +status = inSection(30); +pattern = /a[b-d]e/; +string = 'ace'; +actualmatch = string.match(pattern); +expectedmatch = Array('ace'); +addThis(); + +status = inSection(31); +pattern = /a[b-d]/; +string = 'aac'; +actualmatch = string.match(pattern); +expectedmatch = Array('ac'); +addThis(); + +status = inSection(32); +pattern = /a[-b]/; +string = 'a-'; +actualmatch = string.match(pattern); +expectedmatch = Array('a-'); +addThis(); + +status = inSection(33); +pattern = /a[b-]/; +string = 'a-'; +actualmatch = string.match(pattern); +expectedmatch = Array('a-'); +addThis(); + +status = inSection(34); +pattern = /a]/; +string = 'a]'; +actualmatch = string.match(pattern); +expectedmatch = Array('a]'); +addThis(); + +/* Perl supports ] & ^] inside a [], ECMA does not + pattern = /a[]]b/; + status = inSection(35); + string = 'a]b'; + actualmatch = string.match(pattern); + expectedmatch = Array('a]b'); + addThis(); +*/ + +status = inSection(36); +pattern = /a[^bc]d/; +string = 'aed'; +actualmatch = string.match(pattern); +expectedmatch = Array('aed'); +addThis(); + +status = inSection(37); +pattern = /a[^-b]c/; +string = 'adc'; +actualmatch = string.match(pattern); +expectedmatch = Array('adc'); +addThis(); + +/* Perl supports ] & ^] inside a [], ECMA does not + status = inSection(38); + pattern = /a[^]b]c/; + string = 'adc'; + actualmatch = string.match(pattern); + expectedmatch = Array('adc'); + addThis(); +*/ + +status = inSection(39); +pattern = /\ba\b/; +string = 'a-'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(40); +pattern = /\ba\b/; +string = '-a'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(41); +pattern = /\ba\b/; +string = '-a-'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(42); +pattern = /\By\b/; +string = 'xy'; +actualmatch = string.match(pattern); +expectedmatch = Array('y'); +addThis(); + +status = inSection(43); +pattern = /\by\B/; +string = 'yz'; +actualmatch = string.match(pattern); +expectedmatch = Array('y'); +addThis(); + +status = inSection(44); +pattern = /\By\B/; +string = 'xyz'; +actualmatch = string.match(pattern); +expectedmatch = Array('y'); +addThis(); + +status = inSection(45); +pattern = /\w/; +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(46); +pattern = /\W/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = Array('-'); +addThis(); + +status = inSection(47); +pattern = /a\Sb/; +string = 'a-b'; +actualmatch = string.match(pattern); +expectedmatch = Array('a-b'); +addThis(); + +status = inSection(48); +pattern = /\d/; +string = '1'; +actualmatch = string.match(pattern); +expectedmatch = Array('1'); +addThis(); + +status = inSection(49); +pattern = /\D/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = Array('-'); +addThis(); + +status = inSection(50); +pattern = /[\w]/; +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(51); +pattern = /[\W]/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = Array('-'); +addThis(); + +status = inSection(52); +pattern = /a[\S]b/; +string = 'a-b'; +actualmatch = string.match(pattern); +expectedmatch = Array('a-b'); +addThis(); + +status = inSection(53); +pattern = /[\d]/; +string = '1'; +actualmatch = string.match(pattern); +expectedmatch = Array('1'); +addThis(); + +status = inSection(54); +pattern = /[\D]/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = Array('-'); +addThis(); + +status = inSection(55); +pattern = /ab|cd/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab'); +addThis(); + +status = inSection(56); +pattern = /ab|cd/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab'); +addThis(); + +status = inSection(57); +pattern = /()ef/; +string = 'def'; +actualmatch = string.match(pattern); +expectedmatch = Array('ef', ''); +addThis(); + +status = inSection(58); +pattern = /a\(b/; +string = 'a(b'; +actualmatch = string.match(pattern); +expectedmatch = Array('a(b'); +addThis(); + +status = inSection(59); +pattern = /a\(*b/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab'); +addThis(); + +status = inSection(60); +pattern = /a\(*b/; +string = 'a((b'; +actualmatch = string.match(pattern); +expectedmatch = Array('a((b'); +addThis(); + +status = inSection(61); +pattern = /a\\b/; +string = 'a\\b'; +actualmatch = string.match(pattern); +expectedmatch = Array('a\\b'); +addThis(); + +status = inSection(62); +pattern = /((a))/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', 'a', 'a'); +addThis(); + +status = inSection(63); +pattern = /(a)b(c)/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc', 'a', 'c'); +addThis(); + +status = inSection(64); +pattern = /a+b+c/; +string = 'aabbabc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(65); +pattern = /a{1,}b{1,}c/; +string = 'aabbabc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(66); +pattern = /a.+?c/; +string = 'abcabc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc'); +addThis(); + +status = inSection(67); +pattern = /(a+|b)*/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab', 'b'); +addThis(); + +status = inSection(68); +pattern = /(a+|b){0,}/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab', 'b'); +addThis(); + +status = inSection(69); +pattern = /(a+|b)+/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab', 'b'); +addThis(); + +status = inSection(70); +pattern = /(a+|b){1,}/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab', 'b'); +addThis(); + +status = inSection(71); +pattern = /(a+|b)?/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', 'a'); +addThis(); + +status = inSection(72); +pattern = /(a+|b){0,1}/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', 'a'); +addThis(); + +status = inSection(73); +pattern = /[^ab]*/; +string = 'cde'; +actualmatch = string.match(pattern); +expectedmatch = Array('cde'); +addThis(); + +status = inSection(74); +pattern = /([abc])*d/; +string = 'abbbcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abbbcd', 'c'); +addThis(); + +status = inSection(75); +pattern = /([abc])*bcd/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcd', 'a'); +addThis(); + +status = inSection(76); +pattern = /a|b|c|d|e/; +string = 'e'; +actualmatch = string.match(pattern); +expectedmatch = Array('e'); +addThis(); + +status = inSection(77); +pattern = /(a|b|c|d|e)f/; +string = 'ef'; +actualmatch = string.match(pattern); +expectedmatch = Array('ef', 'e'); +addThis(); + +status = inSection(78); +pattern = /abcd*efg/; +string = 'abcdefg'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcdefg'); +addThis(); + +status = inSection(79); +pattern = /ab*/; +string = 'xabyabbbz'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab'); +addThis(); + +status = inSection(80); +pattern = /ab*/; +string = 'xayabbbz'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +status = inSection(81); +pattern = /(ab|cd)e/; +string = 'abcde'; +actualmatch = string.match(pattern); +expectedmatch = Array('cde', 'cd'); +addThis(); + +status = inSection(82); +pattern = /[abhgefdc]ij/; +string = 'hij'; +actualmatch = string.match(pattern); +expectedmatch = Array('hij'); +addThis(); + +status = inSection(83); +pattern = /(abc|)ef/; +string = 'abcdef'; +actualmatch = string.match(pattern); +expectedmatch = Array('ef', ''); +addThis(); + +status = inSection(84); +pattern = /(a|b)c*d/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('bcd', 'b'); +addThis(); + +status = inSection(85); +pattern = /(ab|ab*)bc/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc', 'a'); +addThis(); + +status = inSection(86); +pattern = /a([bc]*)c*/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc', 'bc'); +addThis(); + +status = inSection(87); +pattern = /a([bc]*)(c*d)/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcd', 'bc', 'd'); +addThis(); + +status = inSection(88); +pattern = /a([bc]+)(c*d)/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcd', 'bc', 'd'); +addThis(); + +status = inSection(89); +pattern = /a([bc]*)(c+d)/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcd', 'b', 'cd'); +addThis(); + +status = inSection(90); +pattern = /a[bcd]*dcdcde/; +string = 'adcdcde'; +actualmatch = string.match(pattern); +expectedmatch = Array('adcdcde'); +addThis(); + +status = inSection(91); +pattern = /(ab|a)b*c/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc', 'ab'); +addThis(); + +status = inSection(92); +pattern = /((a)(b)c)(d)/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcd', 'abc', 'a', 'b', 'd'); +addThis(); + +status = inSection(93); +pattern = /[a-zA-Z_][a-zA-Z0-9_]*/; +string = 'alpha'; +actualmatch = string.match(pattern); +expectedmatch = Array('alpha'); +addThis(); + +status = inSection(94); +pattern = /^a(bc+|b[eh])g|.h$/; +string = 'abh'; +actualmatch = string.match(pattern); +expectedmatch = Array('bh', undefined); +addThis(); + +status = inSection(95); +pattern = /(bc+d$|ef*g.|h?i(j|k))/; +string = 'effgz'; +actualmatch = string.match(pattern); +expectedmatch = Array('effgz', 'effgz', undefined); +addThis(); + +status = inSection(96); +pattern = /(bc+d$|ef*g.|h?i(j|k))/; +string = 'ij'; +actualmatch = string.match(pattern); +expectedmatch = Array('ij', 'ij', 'j'); +addThis(); + +status = inSection(97); +pattern = /(bc+d$|ef*g.|h?i(j|k))/; +string = 'reffgz'; +actualmatch = string.match(pattern); +expectedmatch = Array('effgz', 'effgz', undefined); +addThis(); + +status = inSection(98); +pattern = /((((((((((a))))))))))/; +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); +addThis(); + +status = inSection(99); +pattern = /((((((((((a))))))))))\10/; +string = 'aa'; +actualmatch = string.match(pattern); +expectedmatch = Array('aa', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); +addThis(); + +status = inSection(100); +pattern = /((((((((((a))))))))))/; +string = 'a!'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); +addThis(); + +status = inSection(101); +pattern = /(((((((((a)))))))))/; +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); +addThis(); + +status = inSection(102); +pattern = /(.*)c(.*)/; +string = 'abcde'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcde', 'ab', 'de'); +addThis(); + +status = inSection(103); +pattern = /abcd/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcd'); +addThis(); + +status = inSection(104); +pattern = /a(bc)d/; +string = 'abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcd', 'bc'); +addThis(); + +status = inSection(105); +pattern = /a[-]?c/; +string = 'ac'; +actualmatch = string.match(pattern); +expectedmatch = Array('ac'); +addThis(); + +status = inSection(106); +pattern = /(abc)\1/; +string = 'abcabc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcabc', 'abc'); +addThis(); + +status = inSection(107); +pattern = /([a-c]*)\1/; +string = 'abcabc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abcabc', 'abc'); +addThis(); + +status = inSection(108); +pattern = /(a)|\1/; +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', 'a'); +addThis(); + +status = inSection(109); +pattern = /(([a-c])b*?\2)*/; +string = 'ababbbcbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('ababb', 'bb', 'b'); +addThis(); + +status = inSection(110); +pattern = /(([a-c])b*?\2){3}/; +string = 'ababbbcbc'; +actualmatch = string.match(pattern); +expectedmatch = Array('ababbbcbc', 'cbc', 'c'); +addThis(); + +/* Can't refer to a capture before it's encountered & completed + status = inSection(111); + pattern = /((\3|b)\2(a)x)+/; + string = 'aaaxabaxbaaxbbax'; + actualmatch = string.match(pattern); + expectedmatch = Array('bbax', 'bbax', 'b', 'a'); + addThis(); + + status = inSection(112); + pattern = /((\3|b)\2(a)){2,}/; + string = 'bbaababbabaaaaabbaaaabba'; + actualmatch = string.match(pattern); + expectedmatch = Array('bbaaaabba', 'bba', 'b', 'a'); + addThis(); +*/ + +status = inSection(113); +pattern = /abc/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(114); +pattern = /abc/i; +string = 'XABCY'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(115); +pattern = /abc/i; +string = 'ABABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(116); +pattern = /ab*c/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(117); +pattern = /ab*bc/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(118); +pattern = /ab*bc/i; +string = 'ABBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBC'); +addThis(); + +status = inSection(119); +pattern = /ab*?bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBBBC'); +addThis(); + +status = inSection(120); +pattern = /ab{0,}?bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBBBC'); +addThis(); + +status = inSection(121); +pattern = /ab+?bc/i; +string = 'ABBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBC'); +addThis(); + +status = inSection(122); +pattern = /ab+bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBBBC'); +addThis(); + +status = inSection(123); +pattern = /ab{1,}?bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBBBC'); +addThis(); + +status = inSection(124); +pattern = /ab{1,3}?bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBBBC'); +addThis(); + +status = inSection(125); +pattern = /ab{3,4}?bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBBBC'); +addThis(); + +status = inSection(126); +pattern = /ab??bc/i; +string = 'ABBC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBC'); +addThis(); + +status = inSection(127); +pattern = /ab??bc/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(128); +pattern = /ab{0,1}?bc/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(129); +pattern = /ab??c/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(130); +pattern = /ab{0,1}?c/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(131); +pattern = /^abc$/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(132); +pattern = /^abc/i; +string = 'ABCC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(133); +pattern = /abc$/i; +string = 'AABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(134); +pattern = /^/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array(''); +addThis(); + +status = inSection(135); +pattern = /$/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array(''); +addThis(); + +status = inSection(136); +pattern = /a.c/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(137); +pattern = /a.c/i; +string = 'AXC'; +actualmatch = string.match(pattern); +expectedmatch = Array('AXC'); +addThis(); + +status = inSection(138); +pattern = /a.*?c/i; +string = 'AXYZC'; +actualmatch = string.match(pattern); +expectedmatch = Array('AXYZC'); +addThis(); + +status = inSection(139); +pattern = /a[bc]d/i; +string = 'ABD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABD'); +addThis(); + +status = inSection(140); +pattern = /a[b-d]e/i; +string = 'ACE'; +actualmatch = string.match(pattern); +expectedmatch = Array('ACE'); +addThis(); + +status = inSection(141); +pattern = /a[b-d]/i; +string = 'AAC'; +actualmatch = string.match(pattern); +expectedmatch = Array('AC'); +addThis(); + +status = inSection(142); +pattern = /a[-b]/i; +string = 'A-'; +actualmatch = string.match(pattern); +expectedmatch = Array('A-'); +addThis(); + +status = inSection(143); +pattern = /a[b-]/i; +string = 'A-'; +actualmatch = string.match(pattern); +expectedmatch = Array('A-'); +addThis(); + +status = inSection(144); +pattern = /a]/i; +string = 'A]'; +actualmatch = string.match(pattern); +expectedmatch = Array('A]'); +addThis(); + +/* Perl supports ] & ^] inside a [], ECMA does not + status = inSection(145); + pattern = /a[]]b/i; + string = 'A]B'; + actualmatch = string.match(pattern); + expectedmatch = Array('A]B'); + addThis(); +*/ + +status = inSection(146); +pattern = /a[^bc]d/i; +string = 'AED'; +actualmatch = string.match(pattern); +expectedmatch = Array('AED'); +addThis(); + +status = inSection(147); +pattern = /a[^-b]c/i; +string = 'ADC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ADC'); +addThis(); + +/* Perl supports ] & ^] inside a [], ECMA does not + status = inSection(148); + pattern = /a[^]b]c/i; + string = 'ADC'; + actualmatch = string.match(pattern); + expectedmatch = Array('ADC'); + addThis(); +*/ + +status = inSection(149); +pattern = /ab|cd/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB'); +addThis(); + +status = inSection(150); +pattern = /ab|cd/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB'); +addThis(); + +status = inSection(151); +pattern = /()ef/i; +string = 'DEF'; +actualmatch = string.match(pattern); +expectedmatch = Array('EF', ''); +addThis(); + +status = inSection(152); +pattern = /a\(b/i; +string = 'A(B'; +actualmatch = string.match(pattern); +expectedmatch = Array('A(B'); +addThis(); + +status = inSection(153); +pattern = /a\(*b/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB'); +addThis(); + +status = inSection(154); +pattern = /a\(*b/i; +string = 'A((B'; +actualmatch = string.match(pattern); +expectedmatch = Array('A((B'); +addThis(); + +status = inSection(155); +pattern = /a\\b/i; +string = 'A\\B'; +actualmatch = string.match(pattern); +expectedmatch = Array('A\\B'); +addThis(); + +status = inSection(156); +pattern = /((a))/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', 'A', 'A'); +addThis(); + +status = inSection(157); +pattern = /(a)b(c)/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC', 'A', 'C'); +addThis(); + +status = inSection(158); +pattern = /a+b+c/i; +string = 'AABBABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(159); +pattern = /a{1,}b{1,}c/i; +string = 'AABBABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(160); +pattern = /a.+?c/i; +string = 'ABCABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(161); +pattern = /a.*?c/i; +string = 'ABCABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(162); +pattern = /a.{0,5}?c/i; +string = 'ABCABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC'); +addThis(); + +status = inSection(163); +pattern = /(a+|b)*/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB', 'B'); +addThis(); + +status = inSection(164); +pattern = /(a+|b){0,}/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB', 'B'); +addThis(); + +status = inSection(165); +pattern = /(a+|b)+/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB', 'B'); +addThis(); + +status = inSection(166); +pattern = /(a+|b){1,}/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB', 'B'); +addThis(); + +status = inSection(167); +pattern = /(a+|b)?/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', 'A'); +addThis(); + +status = inSection(168); +pattern = /(a+|b){0,1}/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', 'A'); +addThis(); + +status = inSection(169); +pattern = /(a+|b){0,1}?/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('', undefined); +addThis(); + +status = inSection(170); +pattern = /[^ab]*/i; +string = 'CDE'; +actualmatch = string.match(pattern); +expectedmatch = Array('CDE'); +addThis(); + +status = inSection(171); +pattern = /([abc])*d/i; +string = 'ABBBCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABBBCD', 'C'); +addThis(); + +status = inSection(172); +pattern = /([abc])*bcd/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCD', 'A'); +addThis(); + +status = inSection(173); +pattern = /a|b|c|d|e/i; +string = 'E'; +actualmatch = string.match(pattern); +expectedmatch = Array('E'); +addThis(); + +status = inSection(174); +pattern = /(a|b|c|d|e)f/i; +string = 'EF'; +actualmatch = string.match(pattern); +expectedmatch = Array('EF', 'E'); +addThis(); + +status = inSection(175); +pattern = /abcd*efg/i; +string = 'ABCDEFG'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCDEFG'); +addThis(); + +status = inSection(176); +pattern = /ab*/i; +string = 'XABYABBBZ'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB'); +addThis(); + +status = inSection(177); +pattern = /ab*/i; +string = 'XAYABBBZ'; +actualmatch = string.match(pattern); +expectedmatch = Array('A'); +addThis(); + +status = inSection(178); +pattern = /(ab|cd)e/i; +string = 'ABCDE'; +actualmatch = string.match(pattern); +expectedmatch = Array('CDE', 'CD'); +addThis(); + +status = inSection(179); +pattern = /[abhgefdc]ij/i; +string = 'HIJ'; +actualmatch = string.match(pattern); +expectedmatch = Array('HIJ'); +addThis(); + +status = inSection(180); +pattern = /(abc|)ef/i; +string = 'ABCDEF'; +actualmatch = string.match(pattern); +expectedmatch = Array('EF', ''); +addThis(); + +status = inSection(181); +pattern = /(a|b)c*d/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('BCD', 'B'); +addThis(); + +status = inSection(182); +pattern = /(ab|ab*)bc/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC', 'A'); +addThis(); + +status = inSection(183); +pattern = /a([bc]*)c*/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC', 'BC'); +addThis(); + +status = inSection(184); +pattern = /a([bc]*)(c*d)/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCD', 'BC', 'D'); +addThis(); + +status = inSection(185); +pattern = /a([bc]+)(c*d)/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCD', 'BC', 'D'); +addThis(); + +status = inSection(186); +pattern = /a([bc]*)(c+d)/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCD', 'B', 'CD'); +addThis(); + +status = inSection(187); +pattern = /a[bcd]*dcdcde/i; +string = 'ADCDCDE'; +actualmatch = string.match(pattern); +expectedmatch = Array('ADCDCDE'); +addThis(); + +status = inSection(188); +pattern = /(ab|a)b*c/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABC', 'AB'); +addThis(); + +status = inSection(189); +pattern = /((a)(b)c)(d)/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCD', 'ABC', 'A', 'B', 'D'); +addThis(); + +status = inSection(190); +pattern = /[a-zA-Z_][a-zA-Z0-9_]*/i; +string = 'ALPHA'; +actualmatch = string.match(pattern); +expectedmatch = Array('ALPHA'); +addThis(); + +status = inSection(191); +pattern = /^a(bc+|b[eh])g|.h$/i; +string = 'ABH'; +actualmatch = string.match(pattern); +expectedmatch = Array('BH', undefined); +addThis(); + +status = inSection(192); +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; +string = 'EFFGZ'; +actualmatch = string.match(pattern); +expectedmatch = Array('EFFGZ', 'EFFGZ', undefined); +addThis(); + +status = inSection(193); +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; +string = 'IJ'; +actualmatch = string.match(pattern); +expectedmatch = Array('IJ', 'IJ', 'J'); +addThis(); + +status = inSection(194); +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; +string = 'REFFGZ'; +actualmatch = string.match(pattern); +expectedmatch = Array('EFFGZ', 'EFFGZ', undefined); +addThis(); + +status = inSection(195); +pattern = /((((((((((a))))))))))/i; +string = 'A'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); +addThis(); + +status = inSection(196); +pattern = /((((((((((a))))))))))\10/i; +string = 'AA'; +actualmatch = string.match(pattern); +expectedmatch = Array('AA', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); +addThis(); + +status = inSection(197); +pattern = /((((((((((a))))))))))/i; +string = 'A!'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); +addThis(); + +status = inSection(198); +pattern = /(((((((((a)))))))))/i; +string = 'A'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); +addThis(); + +status = inSection(199); +pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i; +string = 'A'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', 'A'); +addThis(); + +status = inSection(200); +pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i; +string = 'C'; +actualmatch = string.match(pattern); +expectedmatch = Array('C', 'C'); +addThis(); + +status = inSection(201); +pattern = /(.*)c(.*)/i; +string = 'ABCDE'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCDE', 'AB', 'DE'); +addThis(); + +status = inSection(202); +pattern = /abcd/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCD'); +addThis(); + +status = inSection(203); +pattern = /a(bc)d/i; +string = 'ABCD'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCD', 'BC'); +addThis(); + +status = inSection(204); +pattern = /a[-]?c/i; +string = 'AC'; +actualmatch = string.match(pattern); +expectedmatch = Array('AC'); +addThis(); + +status = inSection(205); +pattern = /(abc)\1/i; +string = 'ABCABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCABC', 'ABC'); +addThis(); + +status = inSection(206); +pattern = /([a-c]*)\1/i; +string = 'ABCABC'; +actualmatch = string.match(pattern); +expectedmatch = Array('ABCABC', 'ABC'); +addThis(); + +status = inSection(207); +pattern = /a(?!b)./; +string = 'abad'; +actualmatch = string.match(pattern); +expectedmatch = Array('ad'); +addThis(); + +status = inSection(208); +pattern = /a(?=d)./; +string = 'abad'; +actualmatch = string.match(pattern); +expectedmatch = Array('ad'); +addThis(); + +status = inSection(209); +pattern = /a(?=c|d)./; +string = 'abad'; +actualmatch = string.match(pattern); +expectedmatch = Array('ad'); +addThis(); + +status = inSection(210); +pattern = /a(?:b|c|d)(.)/; +string = 'ace'; +actualmatch = string.match(pattern); +expectedmatch = Array('ace', 'e'); +addThis(); + +status = inSection(211); +pattern = /a(?:b|c|d)*(.)/; +string = 'ace'; +actualmatch = string.match(pattern); +expectedmatch = Array('ace', 'e'); +addThis(); + +status = inSection(212); +pattern = /a(?:b|c|d)+?(.)/; +string = 'ace'; +actualmatch = string.match(pattern); +expectedmatch = Array('ace', 'e'); +addThis(); + +status = inSection(213); +pattern = /a(?:b|c|d)+?(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acd', 'd'); +addThis(); + +status = inSection(214); +pattern = /a(?:b|c|d)+(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdbe', 'e'); +addThis(); + +status = inSection(215); +pattern = /a(?:b|c|d){2}(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdb', 'b'); +addThis(); + +status = inSection(216); +pattern = /a(?:b|c|d){4,5}(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdb', 'b'); +addThis(); + +status = inSection(217); +pattern = /a(?:b|c|d){4,5}?(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcd', 'd'); +addThis(); + +// MODIFIED - ECMA has different rules for paren contents +status = inSection(218); +pattern = /((foo)|(bar))*/; +string = 'foobar'; +actualmatch = string.match(pattern); +//expectedmatch = Array('foobar', 'bar', 'foo', 'bar'); +expectedmatch = Array('foobar', 'bar', undefined, 'bar'); +addThis(); + +status = inSection(219); +pattern = /a(?:b|c|d){6,7}(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdbe', 'e'); +addThis(); + +status = inSection(220); +pattern = /a(?:b|c|d){6,7}?(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdbe', 'e'); +addThis(); + +status = inSection(221); +pattern = /a(?:b|c|d){5,6}(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdbe', 'e'); +addThis(); + +status = inSection(222); +pattern = /a(?:b|c|d){5,6}?(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdb', 'b'); +addThis(); + +status = inSection(223); +pattern = /a(?:b|c|d){5,7}(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdbe', 'e'); +addThis(); + +status = inSection(224); +pattern = /a(?:b|c|d){5,7}?(.)/; +string = 'acdbcdbe'; +actualmatch = string.match(pattern); +expectedmatch = Array('acdbcdb', 'b'); +addThis(); + +status = inSection(225); +pattern = /a(?:b|(c|e){1,2}?|d)+?(.)/; +string = 'ace'; +actualmatch = string.match(pattern); +expectedmatch = Array('ace', 'c', 'e'); +addThis(); + +status = inSection(226); +pattern = /^(.+)?B/; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = Array('AB', 'A'); +addThis(); + +/* MODIFIED - ECMA has different rules for paren contents */ +status = inSection(227); +pattern = /^([^a-z])|(\^)$/; +string = '.'; +actualmatch = string.match(pattern); +//expectedmatch = Array('.', '.', ''); +expectedmatch = Array('.', '.', undefined); +addThis(); + +status = inSection(228); +pattern = /^[<>]&/; +string = '<&OUT'; +actualmatch = string.match(pattern); +expectedmatch = Array('<&'); +addThis(); + +/* Can't refer to a capture before it's encountered & completed + status = inSection(229); + pattern = /^(a\1?){4}$/; + string = 'aaaaaaaaaa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaaaaaaaaa', 'aaaa'); + addThis(); + + status = inSection(230); + pattern = /^(a(?(1)\1)){4}$/; + string = 'aaaaaaaaaa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaaaaaaaaa', 'aaaa'); + addThis(); +*/ + +status = inSection(231); +pattern = /((a{4})+)/; +string = 'aaaaaaaaa'; +actualmatch = string.match(pattern); +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa'); +addThis(); + +status = inSection(232); +pattern = /(((aa){2})+)/; +string = 'aaaaaaaaaa'; +actualmatch = string.match(pattern); +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa'); +addThis(); + +status = inSection(233); +pattern = /(((a{2}){2})+)/; +string = 'aaaaaaaaaa'; +actualmatch = string.match(pattern); +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa'); +addThis(); + +status = inSection(234); +pattern = /(?:(f)(o)(o)|(b)(a)(r))*/; +string = 'foobar'; +actualmatch = string.match(pattern); +//expectedmatch = Array('foobar', 'f', 'o', 'o', 'b', 'a', 'r'); +expectedmatch = Array('foobar', undefined, undefined, undefined, 'b', 'a', 'r'); +addThis(); + +/* ECMA supports (?: (?= and (?! but doesn't support (?< etc. + status = inSection(235); + pattern = /(?<=a)b/; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('b'); + addThis(); + + status = inSection(236); + pattern = /(?<!c)b/; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('b'); + addThis(); + + status = inSection(237); + pattern = /(?<!c)b/; + string = 'b'; + actualmatch = string.match(pattern); + expectedmatch = Array('b'); + addThis(); + + status = inSection(238); + pattern = /(?<!c)b/; + string = 'b'; + actualmatch = string.match(pattern); + expectedmatch = Array('b'); + addThis(); +*/ + +status = inSection(239); +pattern = /(?:..)*a/; +string = 'aba'; +actualmatch = string.match(pattern); +expectedmatch = Array('aba'); +addThis(); + +status = inSection(240); +pattern = /(?:..)*?a/; +string = 'aba'; +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +/* + * MODIFIED - ECMA has different rules for paren contents. Note + * this regexp has two non-capturing parens, and one capturing + * + * The issue: shouldn't the match be ['ab', undefined]? Because the + * '\1' matches the undefined value of the second iteration of the '*' + * (in which the 'b' part of the '|' matches). But Perl wants ['ab','b']. + * + * Answer: waldemar@netscape.com: + * + * The correct answer is ['ab', undefined]. Perl doesn't match + * ECMAScript here, and I'd say that Perl is wrong in this case. + */ +status = inSection(241); +pattern = /^(?:b|a(?=(.)))*\1/; +string = 'abc'; +actualmatch = string.match(pattern); +//expectedmatch = Array('ab', 'b'); +expectedmatch = Array('ab', undefined); +addThis(); + +status = inSection(242); +pattern = /^(){3,5}/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('', ''); +addThis(); + +status = inSection(243); +pattern = /^(a+)*ax/; +string = 'aax'; +actualmatch = string.match(pattern); +expectedmatch = Array('aax', 'a'); +addThis(); + +status = inSection(244); +pattern = /^((a|b)+)*ax/; +string = 'aax'; +actualmatch = string.match(pattern); +expectedmatch = Array('aax', 'a', 'a'); +addThis(); + +status = inSection(245); +pattern = /^((a|bc)+)*ax/; +string = 'aax'; +actualmatch = string.match(pattern); +expectedmatch = Array('aax', 'a', 'a'); +addThis(); + +/* MODIFIED - ECMA has different rules for paren contents */ +status = inSection(246); +pattern = /(a|x)*ab/; +string = 'cab'; +actualmatch = string.match(pattern); +//expectedmatch = Array('ab', ''); +expectedmatch = Array('ab', undefined); +addThis(); + +status = inSection(247); +pattern = /(a)*ab/; +string = 'cab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab', undefined); +addThis(); + +/* ECMA doesn't support (?imsx or (?-imsx + status = inSection(248); + pattern = /(?:(?i)a)b/; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + + status = inSection(249); + pattern = /((?i)a)b/; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab', 'a'); + addThis(); + + status = inSection(250); + pattern = /(?:(?i)a)b/; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('Ab'); + addThis(); + + status = inSection(251); + pattern = /((?i)a)b/; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('Ab', 'A'); + addThis(); + + status = inSection(252); + pattern = /(?i:a)b/; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + + status = inSection(253); + pattern = /((?i:a))b/; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab', 'a'); + addThis(); + + status = inSection(254); + pattern = /(?i:a)b/; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('Ab'); + addThis(); + + status = inSection(255); + pattern = /((?i:a))b/; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('Ab', 'A'); + addThis(); + + status = inSection(256); + pattern = /(?:(?-i)a)b/i; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + + status = inSection(257); + pattern = /((?-i)a)b/i; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab', 'a'); + addThis(); + + status = inSection(258); + pattern = /(?:(?-i)a)b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB'); + addThis(); + + status = inSection(259); + pattern = /((?-i)a)b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB', 'a'); + addThis(); + + status = inSection(260); + pattern = /(?:(?-i)a)b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB'); + addThis(); + + status = inSection(261); + pattern = /((?-i)a)b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB', 'a'); + addThis(); + + status = inSection(262); + pattern = /(?-i:a)b/i; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + + status = inSection(263); + pattern = /((?-i:a))b/i; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab', 'a'); + addThis(); + + status = inSection(264); + pattern = /(?-i:a)b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB'); + addThis(); + + status = inSection(265); + pattern = /((?-i:a))b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB', 'a'); + addThis(); + + status = inSection(266); + pattern = /(?-i:a)b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB'); + addThis(); + + status = inSection(267); + pattern = /((?-i:a))b/i; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = Array('aB', 'a'); + addThis(); + + status = inSection(268); + pattern = /((?s-i:a.))b/i; + string = 'a\nB'; + actualmatch = string.match(pattern); + expectedmatch = Array('a\nB', 'a\n'); + addThis(); +*/ + +status = inSection(269); +pattern = /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/; +string = 'cabbbb'; +actualmatch = string.match(pattern); +expectedmatch = Array('cabbbb'); +addThis(); + +status = inSection(270); +pattern = /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/; +string = 'caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'; +actualmatch = string.match(pattern); +expectedmatch = Array('caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'); +addThis(); + +status = inSection(271); +pattern = /(ab)\d\1/i; +string = 'Ab4ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('Ab4ab', 'Ab'); +addThis(); + +status = inSection(272); +pattern = /(ab)\d\1/i; +string = 'ab4Ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab4Ab', 'ab'); +addThis(); + +status = inSection(273); +pattern = /foo\w*\d{4}baz/; +string = 'foobar1234baz'; +actualmatch = string.match(pattern); +expectedmatch = Array('foobar1234baz'); +addThis(); + +status = inSection(274); +pattern = /x(~~)*(?:(?:F)?)?/; +string = 'x~~'; +actualmatch = string.match(pattern); +expectedmatch = Array('x~~', '~~'); +addThis(); + +/* Perl supports (?# but JS doesn't + status = inSection(275); + pattern = /^a(?#xxx){3}c/; + string = 'aaac'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaac'); + addThis(); +*/ + +/* ECMA doesn't support (?< etc + status = inSection(276); + pattern = /(?<![cd])[ab]/; + string = 'dbaacb'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(277); + pattern = /(?<!(c|d))[ab]/; + string = 'dbaacb'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(278); + pattern = /(?<!cd)[ab]/; + string = 'cdaccb'; + actualmatch = string.match(pattern); + expectedmatch = Array('b'); + addThis(); + + status = inSection(279); + pattern = /((?s)^a(.))((?m)^b$)/; + string = 'a\nb\nc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('a\nb', 'a\n', '\n', 'b'); + addThis(); + + status = inSection(280); + pattern = /((?m)^b$)/; + string = 'a\nb\nc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('b', 'b'); + addThis(); + + status = inSection(281); + pattern = /(?m)^b/; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('b'); + addThis(); + + status = inSection(282); + pattern = /(?m)^(b)/; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('b', 'b'); + addThis(); + + status = inSection(283); + pattern = /((?m)^b)/; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('b', 'b'); + addThis(); + + status = inSection(284); + pattern = /\n((?m)^b)/; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('\nb', 'b'); + addThis(); + + status = inSection(285); + pattern = /((?s).)c(?!.)/; + string = 'a\nb\nc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('\nc', '\n'); + addThis(); + + status = inSection(286); + pattern = /((?s).)c(?!.)/; + string = 'a\nb\nc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('\nc', '\n'); + addThis(); + + status = inSection(287); + pattern = /((?s)b.)c(?!.)/; + string = 'a\nb\nc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('b\nc', 'b\n'); + addThis(); + + status = inSection(288); + pattern = /((?s)b.)c(?!.)/; + string = 'a\nb\nc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('b\nc', 'b\n'); + addThis(); + + status = inSection(289); + pattern = /((?m)^b)/; + string = 'a\nb\nc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('b', 'b'); + addThis(); +*/ + +/* ECMA doesn't support (?(condition) + status = inSection(290); + pattern = /(?(1)b|a)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(291); + pattern = /(x)?(?(1)b|a)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(292); + pattern = /()?(?(1)b|a)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(293); + pattern = /()?(?(1)a|b)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(294); + pattern = /^(\()?blah(?(1)(\)))$/; + string = '(blah)'; + actualmatch = string.match(pattern); + expectedmatch = Array('(blah)', '(', ')'); + addThis(); + + status = inSection(295); + pattern = /^(\()?blah(?(1)(\)))$/; + string = 'blah'; + actualmatch = string.match(pattern); + expectedmatch = Array('blah'); + addThis(); + + status = inSection(296); + pattern = /^(\(+)?blah(?(1)(\)))$/; + string = '(blah)'; + actualmatch = string.match(pattern); + expectedmatch = Array('(blah)', '(', ')'); + addThis(); + + status = inSection(297); + pattern = /^(\(+)?blah(?(1)(\)))$/; + string = 'blah'; + actualmatch = string.match(pattern); + expectedmatch = Array('blah'); + addThis(); + + status = inSection(298); + pattern = /(?(?!a)b|a)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(299); + pattern = /(?(?=a)a|b)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); +*/ + +status = inSection(300); +pattern = /(?=(a+?))(\1ab)/; +string = 'aaab'; +actualmatch = string.match(pattern); +expectedmatch = Array('aab', 'a', 'aab'); +addThis(); + +status = inSection(301); +pattern = /(\w+:)+/; +string = 'one:'; +actualmatch = string.match(pattern); +expectedmatch = Array('one:', 'one:'); +addThis(); + +/* ECMA doesn't support (?< etc + status = inSection(302); + pattern = /$(?<=^(a))/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('', 'a'); + addThis(); +*/ + +status = inSection(303); +pattern = /(?=(a+?))(\1ab)/; +string = 'aaab'; +actualmatch = string.match(pattern); +expectedmatch = Array('aab', 'a', 'aab'); +addThis(); + +/* MODIFIED - ECMA has different rules for paren contents */ +status = inSection(304); +pattern = /([\w:]+::)?(\w+)$/; +string = 'abcd'; +actualmatch = string.match(pattern); +//expectedmatch = Array('abcd', '', 'abcd'); +expectedmatch = Array('abcd', undefined, 'abcd'); +addThis(); + +status = inSection(305); +pattern = /([\w:]+::)?(\w+)$/; +string = 'xy:z:::abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd'); +addThis(); + +status = inSection(306); +pattern = /^[^bcd]*(c+)/; +string = 'aexycd'; +actualmatch = string.match(pattern); +expectedmatch = Array('aexyc', 'c'); +addThis(); + +status = inSection(307); +pattern = /(a*)b+/; +string = 'caab'; +actualmatch = string.match(pattern); +expectedmatch = Array('aab', 'aa'); +addThis(); + +/* MODIFIED - ECMA has different rules for paren contents */ +status = inSection(308); +pattern = /([\w:]+::)?(\w+)$/; +string = 'abcd'; +actualmatch = string.match(pattern); +//expectedmatch = Array('abcd', '', 'abcd'); +expectedmatch = Array('abcd', undefined, 'abcd'); +addThis(); + +status = inSection(309); +pattern = /([\w:]+::)?(\w+)$/; +string = 'xy:z:::abcd'; +actualmatch = string.match(pattern); +expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd'); +addThis(); + +status = inSection(310); +pattern = /^[^bcd]*(c+)/; +string = 'aexycd'; +actualmatch = string.match(pattern); +expectedmatch = Array('aexyc', 'c'); +addThis(); + +/* ECMA doesn't support (?> + status = inSection(311); + pattern = /(?>a+)b/; + string = 'aaab'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaab'); + addThis(); +*/ + +status = inSection(312); +pattern = /([[:]+)/; + string = 'a:[b]:'; + actualmatch = string.match(pattern); + expectedmatch = Array(':[', ':['); + addThis(); + + status = inSection(313); + pattern = /([[=]+)/; + string = 'a=[b]='; + actualmatch = string.match(pattern); + expectedmatch = Array('=[', '=['); + addThis(); + + status = inSection(314); + pattern = /([[.]+)/; + string = 'a.[b].'; + actualmatch = string.match(pattern); + expectedmatch = Array('.[', '.['); + addThis(); + +/* ECMA doesn't have rules for [: + status = inSection(315); + pattern = /[a[:]b[:c]/; + string = 'abc'; + actualmatch = string.match(pattern); + expectedmatch = Array('abc'); + addThis(); +*/ + +/* ECMA doesn't support (?> + status = inSection(316); + pattern = /((?>a+)b)/; + string = 'aaab'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaab', 'aaab'); + addThis(); + + status = inSection(317); + pattern = /(?>(a+))b/; + string = 'aaab'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaab', 'aaa'); + addThis(); + + status = inSection(318); + pattern = /((?>[^()]+)|\([^()]*\))+/; + string = '((abc(ade)ufh()()x'; + actualmatch = string.match(pattern); + expectedmatch = Array('abc(ade)ufh()()x', 'x'); + addThis(); +*/ + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(319); + pattern = /\Z/; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + + status = inSection(320); + pattern = /\z/; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); +*/ + + status = inSection(321); + pattern = /$/; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(322); + pattern = /\Z/; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + + status = inSection(323); + pattern = /\z/; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); +*/ + + status = inSection(324); + pattern = /$/; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(325); + pattern = /\Z/; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + + status = inSection(326); + pattern = /\z/; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); +*/ + + status = inSection(327); + pattern = /$/; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(328); + pattern = /\Z/m; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + + status = inSection(329); + pattern = /\z/m; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); +*/ + + status = inSection(330); + pattern = /$/m; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(331); + pattern = /\Z/m; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + + status = inSection(332); + pattern = /\z/m; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); +*/ + + status = inSection(333); + pattern = /$/m; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(334); + pattern = /\Z/m; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + + status = inSection(335); + pattern = /\z/m; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); +*/ + + status = inSection(336); + pattern = /$/m; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array(''); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(337); + pattern = /a\Z/; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); +*/ + +/* $ only matches end of input unless multiline + status = inSection(338); + pattern = /a$/; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); +*/ + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(339); + pattern = /a\Z/; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(340); + pattern = /a\z/; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); +*/ + + status = inSection(341); + pattern = /a$/; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(342); + pattern = /a$/m; + string = 'a\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(343); + pattern = /a\Z/m; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); +*/ + + status = inSection(344); + pattern = /a$/m; + string = 'b\na\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(345); + pattern = /a\Z/m; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + + status = inSection(346); + pattern = /a\z/m; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); +*/ + + status = inSection(347); + pattern = /a$/m; + string = 'b\na'; + actualmatch = string.match(pattern); + expectedmatch = Array('a'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(348); + pattern = /aa\Z/; + string = 'b\naa\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); +*/ + +/* $ only matches end of input unless multiline + status = inSection(349); + pattern = /aa$/; + string = 'b\naa\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); +*/ + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(350); + pattern = /aa\Z/; + string = 'b\naa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); + + status = inSection(351); + pattern = /aa\z/; + string = 'b\naa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); +*/ + + status = inSection(352); + pattern = /aa$/; + string = 'b\naa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); + + status = inSection(353); + pattern = /aa$/m; + string = 'aa\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(354); + pattern = /aa\Z/m; + string = 'b\naa\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); +*/ + + status = inSection(355); + pattern = /aa$/m; + string = 'b\naa\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(356); + pattern = /aa\Z/m; + string = 'b\naa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); + + status = inSection(357); + pattern = /aa\z/m; + string = 'b\naa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); +*/ + + status = inSection(358); + pattern = /aa$/m; + string = 'b\naa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aa'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(359); + pattern = /ab\Z/; + string = 'b\nab\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); +*/ + +/* $ only matches end of input unless multiline + status = inSection(360); + pattern = /ab$/; + string = 'b\nab\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); +*/ + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(361); + pattern = /ab\Z/; + string = 'b\nab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + + status = inSection(362); + pattern = /ab\z/; + string = 'b\nab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); +*/ + + status = inSection(363); + pattern = /ab$/; + string = 'b\nab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + + status = inSection(364); + pattern = /ab$/m; + string = 'ab\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(365); + pattern = /ab\Z/m; + string = 'b\nab\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); +*/ + + status = inSection(366); + pattern = /ab$/m; + string = 'b\nab\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(367); + pattern = /ab\Z/m; + string = 'b\nab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + + status = inSection(368); + pattern = /ab\z/m; + string = 'b\nab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); +*/ + + status = inSection(369); + pattern = /ab$/m; + string = 'b\nab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(370); + pattern = /abb\Z/; + string = 'b\nabb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); +*/ + +/* $ only matches end of input unless multiline + status = inSection(371); + pattern = /abb$/; + string = 'b\nabb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); +*/ + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(372); + pattern = /abb\Z/; + string = 'b\nabb'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); + + status = inSection(373); + pattern = /abb\z/; + string = 'b\nabb'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); +*/ + + status = inSection(374); + pattern = /abb$/; + string = 'b\nabb'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); + + status = inSection(375); + pattern = /abb$/m; + string = 'abb\nb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(376); + pattern = /abb\Z/m; + string = 'b\nabb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); +*/ + + status = inSection(377); + pattern = /abb$/m; + string = 'b\nabb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); + +/* Perl has \Z has end-of-line, ECMA doesn't + status = inSection(378); + pattern = /abb\Z/m; + string = 'b\nabb'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); + + status = inSection(379); + pattern = /abb\z/m; + string = 'b\nabb'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); +*/ + + status = inSection(380); + pattern = /abb$/m; + string = 'b\nabb'; + actualmatch = string.match(pattern); + expectedmatch = Array('abb'); + addThis(); + + status = inSection(381); + pattern = /(^|x)(c)/; + string = 'ca'; + actualmatch = string.match(pattern); + expectedmatch = Array('c', '', 'c'); + addThis(); + + status = inSection(382); + pattern = /foo.bart/; + string = 'foo.bart'; + actualmatch = string.match(pattern); + expectedmatch = Array('foo.bart'); + addThis(); + + status = inSection(383); + pattern = /^d[x][x][x]/m; + string = 'abcd\ndxxx'; + actualmatch = string.match(pattern); + expectedmatch = Array('dxxx'); + addThis(); + + status = inSection(384); + pattern = /tt+$/; + string = 'xxxtt'; + actualmatch = string.match(pattern); + expectedmatch = Array('tt'); + addThis(); + +/* ECMA spec says that each atom in a range must be a single character + status = inSection(385); + pattern = /([a-\d]+)/; + string = 'za-9z'; + actualmatch = string.match(pattern); + expectedmatch = Array('9', '9'); + addThis(); + + status = inSection(386); + pattern = /([\d-z]+)/; + string = 'a0-za'; + actualmatch = string.match(pattern); + expectedmatch = Array('0-z', '0-z'); + addThis(); +*/ + +/* ECMA doesn't support [: + status = inSection(387); + pattern = /([a-[:digit:]]+)/; + string = 'za-9z'; + actualmatch = string.match(pattern); + expectedmatch = Array('a-9', 'a-9'); + addThis(); + + status = inSection(388); + pattern = /([[:digit:]-z]+)/; + string = '=0-z='; + actualmatch = string.match(pattern); + expectedmatch = Array('0-z', '0-z'); + addThis(); + + status = inSection(389); + pattern = /([[:digit:]-[:alpha:]]+)/; + string = '=0-z='; + actualmatch = string.match(pattern); + expectedmatch = Array('0-z', '0-z'); + addThis(); +*/ + + status = inSection(390); + pattern = /(\d+\.\d+)/; + string = '3.1415926'; + actualmatch = string.match(pattern); + expectedmatch = Array('3.1415926', '3.1415926'); + addThis(); + + status = inSection(391); + pattern = /\.c(pp|xx|c)?$/i; + string = 'IO.c'; + actualmatch = string.match(pattern); + expectedmatch = Array('.c', undefined); + addThis(); + + status = inSection(392); + pattern = /(\.c(pp|xx|c)?$)/i; + string = 'IO.c'; + actualmatch = string.match(pattern); + expectedmatch = Array('.c', '.c', undefined); + addThis(); + + status = inSection(393); + pattern = /(^|a)b/; + string = 'ab'; + actualmatch = string.match(pattern); + expectedmatch = Array('ab', 'a'); + addThis(); + + status = inSection(394); + pattern = /^([ab]*?)(b)?(c)$/; + string = 'abac'; + actualmatch = string.match(pattern); + expectedmatch = Array('abac', 'aba', undefined, 'c'); + addThis(); + + status = inSection(395); + pattern = /^(?:.,){2}c/i; + string = 'a,b,c'; + actualmatch = string.match(pattern); + expectedmatch = Array('a,b,c'); + addThis(); + + status = inSection(396); + pattern = /^(.,){2}c/i; + string = 'a,b,c'; + actualmatch = string.match(pattern); + expectedmatch = Array('a,b,c', 'b,'); + addThis(); + + status = inSection(397); + pattern = /^(?:[^,]*,){2}c/; + string = 'a,b,c'; + actualmatch = string.match(pattern); + expectedmatch = Array('a,b,c'); + addThis(); + + status = inSection(398); + pattern = /^([^,]*,){2}c/; + string = 'a,b,c'; + actualmatch = string.match(pattern); + expectedmatch = Array('a,b,c', 'b,'); + addThis(); + + status = inSection(399); + pattern = /^([^,]*,){3}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(400); + pattern = /^([^,]*,){3,}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(401); + pattern = /^([^,]*,){0,3}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(402); + pattern = /^([^,]{1,3},){3}d/i; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(403); + pattern = /^([^,]{1,3},){3,}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(404); + pattern = /^([^,]{1,3},){0,3}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(405); + pattern = /^([^,]{1,},){3}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(406); + pattern = /^([^,]{1,},){3,}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(407); + pattern = /^([^,]{1,},){0,3}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(408); + pattern = /^([^,]{0,3},){3}d/i; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(409); + pattern = /^([^,]{0,3},){3,}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + + status = inSection(410); + pattern = /^([^,]{0,3},){0,3}d/; + string = 'aaa,b,c,d'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaa,b,c,d', 'c,'); + addThis(); + +/* ECMA doesn't support \A + status = inSection(411); + pattern = /(?!\A)x/m; + string = 'a\nxb\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('\n'); + addThis(); +*/ + + status = inSection(412); + pattern = /^(a(b)?)+$/; + string = 'aba'; + actualmatch = string.match(pattern); + expectedmatch = Array('aba', 'a', undefined); + addThis(); + + status = inSection(413); + pattern = /^(aa(bb)?)+$/; + string = 'aabbaa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aabbaa', 'aa', undefined); + addThis(); + + status = inSection(414); + pattern = /^.{9}abc.*\n/m; + string = '123\nabcabcabcabc\n'; + actualmatch = string.match(pattern); + expectedmatch = Array('abcabcabcabc\n'); + addThis(); + + status = inSection(415); + pattern = /^(a)?a$/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = Array('a', undefined); + addThis(); + + status = inSection(416); + pattern = /^(a\1?)(a\1?)(a\2?)(a\3?)$/; + string = 'aaaaaa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaaaaa', 'a', 'aa', 'a', 'aa'); + addThis(); + +/* Can't refer to a capture before it's encountered & completed + status = inSection(417); + pattern = /^(a\1?){4}$/; + string = 'aaaaaa'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaaaaa', 'aaa'); + addThis(); +*/ + + status = inSection(418); + pattern = /^(0+)?(?:x(1))?/; + string = 'x1'; + actualmatch = string.match(pattern); + expectedmatch = Array('x1', undefined, '1'); + addThis(); + + status = inSection(419); + pattern = /^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?/; + string = '012cxx0190'; + actualmatch = string.match(pattern); + expectedmatch = Array('012cxx0190', '012c', undefined, '0190'); + addThis(); + + status = inSection(420); + pattern = /^(b+?|a){1,2}c/; + string = 'bbbac'; + actualmatch = string.match(pattern); + expectedmatch = Array('bbbac', 'a'); + addThis(); + + status = inSection(421); + pattern = /^(b+?|a){1,2}c/; + string = 'bbbbac'; + actualmatch = string.match(pattern); + expectedmatch = Array('bbbbac', 'a'); + addThis(); + + status = inSection(422); + pattern = /((?:aaaa|bbbb)cccc)?/; + string = 'aaaacccc'; + actualmatch = string.match(pattern); + expectedmatch = Array('aaaacccc', 'aaaacccc'); + addThis(); + + status = inSection(423); + pattern = /((?:aaaa|bbbb)cccc)?/; + string = 'bbbbcccc'; + actualmatch = string.match(pattern); + expectedmatch = Array('bbbbcccc', 'bbbbcccc'); + addThis(); + + + + +//----------------------------------------------------------------------------- + test(); +//----------------------------------------------------------------------------- + + + + function addThis() + { + if(omitCurrentSection()) + return; + + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; + } + + + function omitCurrentSection() + { + try + { + // current section number is in global status variable + var n = status.match(/(\d+)/)[1]; + return ((n < cnLBOUND) || (n > cnUBOUND)); + } + catch(e) + { + return false; + } + } + + + function test() + { + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); + } diff --git a/source/spidermonkey-tests/ecma_3/RegExp/perlstress-002.js b/source/spidermonkey-tests/ecma_3/RegExp/perlstress-002.js new file mode 100644 index 00000000..126d12bc --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/perlstress-002.js @@ -0,0 +1,1808 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 2002-07-07 + * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine. + * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested. + * + * This test was created by running various patterns and strings through the + * Perl 5 RegExp engine. We saved the results below to test the JS engine. + * + * Each of the examples below is a negative test; that is, each produces a + * null match in Perl. Thus we set |expectedmatch| = |null| in each section. + * + * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented + * out such sections altogether, or modified them to fit what we expect from JS. + * + * EXAMPLES: + * + * - ECMA does support (?: (?= and (?! operators, but doesn't support (?< etc. + * + * - ECMA doesn't support (?(condition) + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 85721; +var summary = 'Testing regular expression edge cases'; +var cnSingleSpace = ' '; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); +var cnLBOUND = 0; +var cnUBOUND = 1000; + + +status = inSection(1); +pattern = /abc/; +string = 'xbc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(2); +pattern = /abc/; +string = 'axc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(3); +pattern = /abc/; +string = 'abx'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(4); +pattern = /ab+bc/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(5); +pattern = /ab+bc/; +string = 'abq'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(6); +pattern = /ab{1,}bc/; +string = 'abq'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(7); +pattern = /ab{4,5}bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(8); +pattern = /ab?bc/; +string = 'abbbbc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(9); +pattern = /^abc$/; +string = 'abcc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(10); +pattern = /^abc$/; +string = 'aabc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(11); +pattern = /abc$/; +string = 'aabcd'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(12); +pattern = /a.*c/; +string = 'axyzd'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(13); +pattern = /a[bc]d/; +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(14); +pattern = /a[b-d]e/; +string = 'abd'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(15); +pattern = /a[^bc]d/; +string = 'abd'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(16); +pattern = /a[^-b]c/; +string = 'a-c'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(17); +pattern = /a[^]b]c/; +string = 'a]c'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(18); +pattern = /\by\b/; +string = 'xy'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(19); +pattern = /\by\b/; +string = 'yz'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(20); +pattern = /\by\b/; +string = 'xyz'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(21); +pattern = /\Ba\B/; +string = 'a-'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(22); +pattern = /\Ba\B/; +string = '-a'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(23); +pattern = /\Ba\B/; +string = '-a-'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(24); +pattern = /\w/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(25); +pattern = /\W/; +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(26); +pattern = /a\sb/; +string = 'a-b'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(27); +pattern = /\d/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(28); +pattern = /\D/; +string = '1'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(29); +pattern = /[\w]/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(30); +pattern = /[\W]/; +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(31); +pattern = /a[\s]b/; +string = 'a-b'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(32); +pattern = /[\d]/; +string = '-'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(33); +pattern = /[\D]/; +string = '1'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(34); +pattern = /$b/; +string = 'b'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(35); +pattern = /^(ab|cd)e/; +string = 'abcde'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(36); +pattern = /a[bcd]+dcdcde/; +string = 'adcdcde'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(37); +pattern = /(bc+d$|ef*g.|h?i(j|k))/; +string = 'effg'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(38); +pattern = /(bc+d$|ef*g.|h?i(j|k))/; +string = 'bcdd'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(39); +pattern = /[k]/; +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +// MODIFIED - ECMA has different rules for paren contents. +status = inSection(40); +pattern = /(a)|\1/; +string = 'x'; +actualmatch = string.match(pattern); +//expectedmatch = null; +expectedmatch = Array("", undefined); +addThis(); + +// MODIFIED - ECMA has different rules for paren contents. +status = inSection(41); +pattern = /((\3|b)\2(a)x)+/; +string = 'aaxabxbaxbbx'; +actualmatch = string.match(pattern); +//expectedmatch = null; +expectedmatch = Array("ax", "ax", "", "a"); +addThis(); + +status = inSection(42); +pattern = /abc/i; +string = 'XBC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(43); +pattern = /abc/i; +string = 'AXC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(44); +pattern = /abc/i; +string = 'ABX'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(45); +pattern = /ab+bc/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(46); +pattern = /ab+bc/i; +string = 'ABQ'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(47); +pattern = /ab{1,}bc/i; +string = 'ABQ'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(48); +pattern = /ab{4,5}?bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(49); +pattern = /ab??bc/i; +string = 'ABBBBC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(50); +pattern = /^abc$/i; +string = 'ABCC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(51); +pattern = /^abc$/i; +string = 'AABC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(52); +pattern = /a.*c/i; +string = 'AXYZD'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(53); +pattern = /a[bc]d/i; +string = 'ABC'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(54); +pattern = /a[b-d]e/i; +string = 'ABD'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(55); +pattern = /a[^bc]d/i; +string = 'ABD'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(56); +pattern = /a[^-b]c/i; +string = 'A-C'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(57); +pattern = /a[^]b]c/i; +string = 'A]C'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(58); +pattern = /$b/i; +string = 'B'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(59); +pattern = /^(ab|cd)e/i; +string = 'ABCDE'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(60); +pattern = /a[bcd]+dcdcde/i; +string = 'ADCDCDE'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(61); +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; +string = 'EFFG'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(62); +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; +string = 'BCDD'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(63); +pattern = /[k]/i; +string = 'AB'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(64); +pattern = /^(a\1?){4}$/; +string = 'aaaaaaaaa'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(65); +pattern = /^(a\1?){4}$/; +string = 'aaaaaaaaaaa'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +/* ECMA doesn't support (?( + status = inSection(66); + pattern = /^(a(?(1)\1)){4}$/; + string = 'aaaaaaaaa'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(67); + pattern = /^(a(?(1)\1)){4}$/; + string = 'aaaaaaaaaaa'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); +*/ + +/* ECMA doesn't support (?< + status = inSection(68); + pattern = /(?<=a)b/; + string = 'cb'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(69); + pattern = /(?<=a)b/; + string = 'b'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(70); + pattern = /(?<!c)b/; + string = 'cb'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); +*/ + +/* ECMA doesn't support (?(condition) + status = inSection(71); + pattern = /(?:(?i)a)b/; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(72); + pattern = /((?i)a)b/; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(73); + pattern = /(?i:a)b/; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(74); + pattern = /((?i:a))b/; + string = 'aB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(75); + pattern = /(?:(?-i)a)b/i; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(76); + pattern = /((?-i)a)b/i; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(77); + pattern = /(?:(?-i)a)b/i; + string = 'AB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(78); + pattern = /((?-i)a)b/i; + string = 'AB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(79); + pattern = /(?-i:a)b/i; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(80); + pattern = /((?-i:a))b/i; + string = 'Ab'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(81); + pattern = /(?-i:a)b/i; + string = 'AB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(82); + pattern = /((?-i:a))b/i; + string = 'AB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(83); + pattern = /((?-i:a.))b/i; + string = 'a\nB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(84); + pattern = /((?s-i:a.))b/i; + string = 'B\nB'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); +*/ + +/* ECMA doesn't support (?< + status = inSection(85); + pattern = /(?<![cd])b/; + string = 'dbcb'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(86); + pattern = /(?<!(c|d))b/; + string = 'dbcb'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); +*/ + +status = inSection(87); +pattern = /^(?:a?b?)*$/; +string = 'a--'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(88); +pattern = /^b/; +string = 'a\nb\nc\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(89); +pattern = /()^b/; +string = 'a\nb\nc\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +/* ECMA doesn't support (?( + status = inSection(90); + pattern = /(?(1)a|b)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(91); + pattern = /(x)?(?(1)a|b)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(92); + pattern = /()(?(1)b|a)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(93); + pattern = /^(\()?blah(?(1)(\)))$/; + string = 'blah)'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(94); + pattern = /^(\()?blah(?(1)(\)))$/; + string = '(blah'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(95); + pattern = /^(\(+)?blah(?(1)(\)))$/; + string = 'blah)'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(96); + pattern = /^(\(+)?blah(?(1)(\)))$/; + string = '(blah'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(97); + pattern = /(?(?{0})a|b)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(98); + pattern = /(?(?{1})b|a)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(99); + pattern = /(?(?!a)a|b)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); + + status = inSection(100); + pattern = /(?(?=a)b|a)/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); +*/ + +status = inSection(101); +pattern = /^(?=(a+?))\1ab/; +string = 'aaab'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(102); +pattern = /^(?=(a+?))\1ab/; +string = 'aaab'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(103); +pattern = /([\w:]+::)?(\w+)$/; +string = 'abcd:'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(104); +pattern = /([\w:]+::)?(\w+)$/; +string = 'abcd:'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(105); +pattern = /(>a+)ab/; +string = 'aaab'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(106); +pattern = /a\Z/; +string = 'a\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(107); +pattern = /a\z/; +string = 'a\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(108); +pattern = /a$/; +string = 'a\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(109); +pattern = /a\z/; +string = 'b\na\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(110); +pattern = /a\z/m; +string = 'a\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(111); +pattern = /a\z/m; +string = 'b\na\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(112); +pattern = /aa\Z/; +string = 'aa\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(113); +pattern = /aa\z/; +string = 'aa\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(114); +pattern = /aa$/; +string = 'aa\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(115); +pattern = /aa\z/; +string = 'b\naa\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(116); +pattern = /aa\z/m; +string = 'aa\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(117); +pattern = /aa\z/m; +string = 'b\naa\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(118); +pattern = /aa\Z/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(119); +pattern = /aa\z/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(120); +pattern = /aa$/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(121); +pattern = /aa\Z/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(122); +pattern = /aa\z/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(123); +pattern = /aa$/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(124); +pattern = /aa\Z/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(125); +pattern = /aa\z/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(126); +pattern = /aa$/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(127); +pattern = /aa\Z/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(128); +pattern = /aa\z/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(129); +pattern = /aa$/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(130); +pattern = /aa\Z/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(131); +pattern = /aa\z/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(132); +pattern = /aa$/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(133); +pattern = /aa\Z/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(134); +pattern = /aa\z/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(135); +pattern = /aa$/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(136); +pattern = /aa\Z/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(137); +pattern = /aa\z/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(138); +pattern = /aa$/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(139); +pattern = /aa\Z/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(140); +pattern = /aa\z/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(141); +pattern = /aa$/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(142); +pattern = /aa\Z/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(143); +pattern = /aa\z/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(144); +pattern = /aa$/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(145); +pattern = /aa\Z/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(146); +pattern = /aa\z/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(147); +pattern = /aa$/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(148); +pattern = /aa\Z/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(149); +pattern = /aa\z/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(150); +pattern = /aa$/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(151); +pattern = /aa\Z/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(152); +pattern = /aa\z/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(153); +pattern = /aa$/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(154); +pattern = /ab\Z/; +string = 'ab\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(155); +pattern = /ab\z/; +string = 'ab\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(156); +pattern = /ab$/; +string = 'ab\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(157); +pattern = /ab\z/; +string = 'b\nab\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(158); +pattern = /ab\z/m; +string = 'ab\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(159); +pattern = /ab\z/m; +string = 'b\nab\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(160); +pattern = /ab\Z/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(161); +pattern = /ab\z/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(162); +pattern = /ab$/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(163); +pattern = /ab\Z/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(164); +pattern = /ab\z/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(165); +pattern = /ab$/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(166); +pattern = /ab\Z/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(167); +pattern = /ab\z/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(168); +pattern = /ab$/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(169); +pattern = /ab\Z/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(170); +pattern = /ab\z/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(171); +pattern = /ab$/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(172); +pattern = /ab\Z/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(173); +pattern = /ab\z/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(174); +pattern = /ab$/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(175); +pattern = /ab\Z/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(176); +pattern = /ab\z/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(177); +pattern = /ab$/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(178); +pattern = /ab\Z/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(179); +pattern = /ab\z/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(180); +pattern = /ab$/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(181); +pattern = /ab\Z/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(182); +pattern = /ab\z/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(183); +pattern = /ab$/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(184); +pattern = /ab\Z/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(185); +pattern = /ab\z/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(186); +pattern = /ab$/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(187); +pattern = /ab\Z/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(188); +pattern = /ab\z/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(189); +pattern = /ab$/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(190); +pattern = /ab\Z/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(191); +pattern = /ab\z/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(192); +pattern = /ab$/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(193); +pattern = /ab\Z/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(194); +pattern = /ab\z/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(195); +pattern = /ab$/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(196); +pattern = /abb\Z/; +string = 'abb\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(197); +pattern = /abb\z/; +string = 'abb\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(198); +pattern = /abb$/; +string = 'abb\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(199); +pattern = /abb\z/; +string = 'b\nabb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(200); +pattern = /abb\z/m; +string = 'abb\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(201); +pattern = /abb\z/m; +string = 'b\nabb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(202); +pattern = /abb\Z/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(203); +pattern = /abb\z/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(204); +pattern = /abb$/; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(205); +pattern = /abb\Z/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(206); +pattern = /abb\z/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(207); +pattern = /abb$/; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(208); +pattern = /abb\Z/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(209); +pattern = /abb\z/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(210); +pattern = /abb$/; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(211); +pattern = /abb\Z/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(212); +pattern = /abb\z/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(213); +pattern = /abb$/m; +string = 'ac\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(214); +pattern = /abb\Z/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(215); +pattern = /abb\z/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(216); +pattern = /abb$/m; +string = 'b\nac\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(217); +pattern = /abb\Z/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(218); +pattern = /abb\z/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(219); +pattern = /abb$/m; +string = 'b\nac'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(220); +pattern = /abb\Z/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(221); +pattern = /abb\z/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(222); +pattern = /abb$/; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(223); +pattern = /abb\Z/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(224); +pattern = /abb\z/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(225); +pattern = /abb$/; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(226); +pattern = /abb\Z/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(227); +pattern = /abb\z/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(228); +pattern = /abb$/; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(229); +pattern = /abb\Z/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(230); +pattern = /abb\z/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(231); +pattern = /abb$/m; +string = 'ca\nb\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(232); +pattern = /abb\Z/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(233); +pattern = /abb\z/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(234); +pattern = /abb$/m; +string = 'b\nca\n'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(235); +pattern = /abb\Z/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(236); +pattern = /abb\z/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(237); +pattern = /abb$/m; +string = 'b\nca'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(238); +pattern = /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/; +string = 'x'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(239); +pattern = /\GX.*X/; +string = 'aaaXbX'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(240); +pattern = /\.c(pp|xx|c)?$/i; +string = 'Changes'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(241); +pattern = /^([a-z]:)/; +string = 'C:/'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(242); +pattern = /(\w)?(abc)\1b/; +string = 'abcab'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +/* ECMA doesn't support (?( + status = inSection(243); + pattern = /^(a)?(?(1)a|b)+$/; + string = 'a'; + actualmatch = string.match(pattern); + expectedmatch = null; + addThis(); +*/ + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + if(omitCurrentSection()) + return; + + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function omitCurrentSection() +{ + try + { + // current section number is in global status variable + var n = status.match(/(\d+)/)[1]; + return ((n < cnLBOUND) || (n > cnUBOUND)); + } + catch(e) + { + return false; + } +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-100199.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-100199.js new file mode 100644 index 00000000..2c162677 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-100199.js @@ -0,0 +1,273 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 17 September 2001 + * + * SUMMARY: Regression test for Bugzilla bug 100199 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=100199 + * + * The empty character class [] is a valid RegExp construct: the condition + * that a given character belong to a set containing no characters. As such, + * it can never be met and is always FALSE. Similarly, [^] is a condition + * that matches any given character and is always TRUE. + * + * Neither one of these conditions should cause syntax errors in a RegExp. + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 100199; +var summary = '[], [^] are valid RegExp conditions. Should not cause errors -'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +pattern = /[]/; +string = 'abc'; +status = inSection(1); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = ''; +status = inSection(2); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '['; +status = inSection(3); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '/'; +status = inSection(4); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '['; +status = inSection(5); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = ']'; +status = inSection(6); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '[]'; +status = inSection(7); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '[ ]'; +status = inSection(8); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = ']['; +status = inSection(9); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + + +pattern = /a[]/; +string = 'abc'; +status = inSection(10); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = ''; +status = inSection(11); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = 'a['; +status = inSection(12); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = 'a[]'; +status = inSection(13); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '['; +status = inSection(14); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = ']'; +status = inSection(15); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '[]'; +status = inSection(16); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = '[ ]'; +status = inSection(17); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +string = ']['; +status = inSection(18); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + + +pattern = /[^]/; +string = 'abc'; +status = inSection(19); +actualmatch = string.match(pattern); +expectedmatch = Array('a'); +addThis(); + +string = ''; +status = inSection(20); +actualmatch = string.match(pattern); +expectedmatch = null; //there are no characters to test against the condition +addThis(); + +string = '\/'; +status = inSection(21); +actualmatch = string.match(pattern); +expectedmatch = Array('/'); +addThis(); + +string = '\['; +status = inSection(22); +actualmatch = string.match(pattern); +expectedmatch = Array('['); +addThis(); + +string = '['; +status = inSection(23); +actualmatch = string.match(pattern); +expectedmatch = Array('['); +addThis(); + +string = ']'; +status = inSection(24); +actualmatch = string.match(pattern); +expectedmatch = Array(']'); +addThis(); + +string = '[]'; +status = inSection(25); +actualmatch = string.match(pattern); +expectedmatch = Array('['); +addThis(); + +string = '[ ]'; +status = inSection(26); +actualmatch = string.match(pattern); +expectedmatch = Array('['); +addThis(); + +string = ']['; +status = inSection(27); +actualmatch = string.match(pattern); +expectedmatch = Array(']'); +addThis(); + + +pattern = /a[^]/; +string = 'abc'; +status = inSection(28); +actualmatch = string.match(pattern); +expectedmatch = Array('ab'); +addThis(); + +string = ''; +status = inSection(29); +actualmatch = string.match(pattern); +expectedmatch = null; //there are no characters to test against the condition +addThis(); + +string = 'a['; +status = inSection(30); +actualmatch = string.match(pattern); +expectedmatch = Array('a['); +addThis(); + +string = 'a]'; +status = inSection(31); +actualmatch = string.match(pattern); +expectedmatch = Array('a]'); +addThis(); + +string = 'a[]'; +status = inSection(32); +actualmatch = string.match(pattern); +expectedmatch = Array('a['); +addThis(); + +string = 'a[ ]'; +status = inSection(33); +actualmatch = string.match(pattern); +expectedmatch = Array('a['); +addThis(); + +string = 'a]['; +status = inSection(34); +actualmatch = string.match(pattern); +expectedmatch = Array('a]'); +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-105972.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-105972.js new file mode 100644 index 00000000..4d08fa44 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-105972.js @@ -0,0 +1,123 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 22 October 2001 + * + * SUMMARY: Regression test for Bugzilla bug 105972: + * "/^.*?$/ will not match anything" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=105972 + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 105972; +var summary = 'Regression test for Bugzilla bug 105972'; +var cnEmptyString = ''; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +/* + * The bug: this match was coming up null in Rhino and SpiderMonkey. + * It should match the whole string. The reason: + * + * The * operator is greedy, but *? is non-greedy: it will stop + * at the simplest match it can find. But the pattern here asks us + * to match till the end of the string. So the simplest match must + * go all the way out to the end, and *? has no choice but to do it. + */ +status = inSection(1); +pattern = /^.*?$/; +string = 'Hello World'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + + +/* + * Leave off the '$' condition - here we expect the empty string. + * Unlike the above pattern, we don't have to match till the end of + * the string, so the non-greedy operator *? doesn't try to... + */ +status = inSection(2); +pattern = /^.*?/; +string = 'Hello World'; +actualmatch = string.match(pattern); +expectedmatch = Array(cnEmptyString); +addThis(); + + +/* + * Try '$' combined with an 'or' operator. + * + * The operator *? will consume the string from left to right, + * attempting to satisfy the condition (:|$). When it hits ':', + * the match will stop because the operator *? is non-greedy. + * + * The submatch $1 = (:|$) will contain the ':' + */ +status = inSection(3); +pattern = /^.*?(:|$)/; +string = 'Hello: World'; +actualmatch = string.match(pattern); +expectedmatch = Array('Hello:', ':'); +addThis(); + + +/* + * Again, '$' combined with an 'or' operator. + * + * The operator * will consume the string from left to right, + * attempting to satisfy the condition (:|$). When it hits ':', + * the match will not stop since * is greedy. The match will + * continue until it hits $, the end-of-string boundary. + * + * The submatch $1 = (:|$) will contain the empty string + * conceived to exist at the end-of-string boundary. + */ +status = inSection(4); +pattern = /^.*(:|$)/; +string = 'Hello: World'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, cnEmptyString); +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-119909.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-119909.js new file mode 100644 index 00000000..f0d3d08f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-119909.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 14 Jan 2002 + * SUMMARY: Shouldn't crash on regexps with many nested parentheses + * See http://bugzilla.mozilla.org/show_bug.cgi?id=119909 + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 119909; +var summary = "Shouldn't crash on regexps with many nested parentheses"; +var NO_BACKREFS = false; +var DO_BACKREFS = true; + + +//-------------------------------------------------- +test(); +//-------------------------------------------------- + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + testThis(500, NO_BACKREFS, 'hello', 'goodbye'); + testThis(500, DO_BACKREFS, 'hello', 'goodbye'); + + reportCompare('No Crash', 'No Crash', ''); + + exitFunc('test'); +} + + +/* + * Creates a regexp pattern like (((((((((hello))))))))) + * and tests str.search(), str.match(), str.replace() + */ +function testThis(numParens, doBackRefs, strOriginal, strReplace) +{ + var openParen = doBackRefs? '(' : '(?:'; + var closeParen = ')'; + var pattern = ''; + + for (var i=0; i<numParens; i++) {pattern += openParen;} + pattern += strOriginal; + for (i=0; i<numParens; i++) {pattern += closeParen;} + var re = new RegExp(pattern); + + var res = strOriginal.search(re); + res = strOriginal.match(re); + res = strOriginal.replace(re, strReplace); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-122076.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-122076.js new file mode 100644 index 00000000..d4b16dbd --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-122076.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 12 Feb 2002 + * SUMMARY: Don't crash on invalid regexp literals / \\/ / + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=122076 + * The function checkURL() below sometimes caused a compile-time error: + * + * SyntaxError: unterminated parenthetical (: + * + * However, sometimes it would cause a crash instead. The presence of + * other functions below is merely fodder to help provoke the crash. + * The constant |STRESS| is number of times we'll try to crash on this. + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 122076; +var summary = "Don't crash on invalid regexp literals / \\/ /"; +var STRESS = 10; +var sEval = ''; + +printBugNumber(BUGNUMBER); +printStatus(summary); + + +sEval += 'function checkDate()' +sEval += '{' +sEval += 'return (this.value.search(/^[012]?\d\/[0123]?\d\/[0]\d$/) != -1);' +sEval += '}' + +sEval += 'function checkDNSName()' +sEval += '{' +sEval += ' return (this.value.search(/^([\w\-]+\.)+([\w\-]{2,3})$/) != -1);' +sEval += '}' + +sEval += 'function checkEmail()' +sEval += '{' +sEval += ' return (this.value.search(/^([\w\-]+\.)*[\w\-]+@([\w\-]+\.)+([\w\-]{2,3})$/) != -1);' +sEval += '}' + +sEval += 'function checkHostOrIP()' +sEval += '{' +sEval += ' if (this.value.search(/^([\w\-]+\.)+([\w\-]{2,3})$/) == -1)' +sEval += ' return (this.value.search(/^[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}$/) != -1);' +sEval += ' else' +sEval += ' return true;' +sEval += '}' + +sEval += 'function checkIPAddress()' +sEval += '{' +sEval += ' return (this.value.search(/^[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}\.[1-2]?\d{1,2}$/) != -1);' +sEval += '}' + +sEval += 'function checkURL()' +sEval += '{' +sEval += ' return (this.value.search(/^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,4}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\/\*\$+@&#;`~=%!]*)(\.\w{2,})?)*\/?)$/) != -1);' +sEval += '}' + + +for (var i=0; i<STRESS; i++) +{ + try + { + eval(sEval); + } + catch(e) + { + } +} + +reportCompare('No Crash', 'No Crash', ''); diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-123437.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-123437.js new file mode 100644 index 00000000..e3791d32 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-123437.js @@ -0,0 +1,78 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 04 Feb 2002 + * SUMMARY: regexp backreferences must hold |undefined| if not used + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=123437 (SpiderMonkey) + * See http://bugzilla.mozilla.org/show_bug.cgi?id=123439 (Rhino) + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 123437; +var summary = 'regexp backreferences must hold |undefined| if not used'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +pattern = /(a)?a/; +string = 'a'; +status = inSection(1); +actualmatch = string.match(pattern); +expectedmatch = Array('a', undefined); +addThis(); + +pattern = /a|(b)/; +string = 'a'; +status = inSection(2); +actualmatch = string.match(pattern); +expectedmatch = Array('a', undefined); +addThis(); + +pattern = /(a)?(a)/; +string = 'a'; +status = inSection(3); +actualmatch = string.match(pattern); +expectedmatch = Array('a', undefined, 'a'); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-165353.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-165353.js new file mode 100644 index 00000000..ba5acc15 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-165353.js @@ -0,0 +1,88 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 31 August 2002 + * SUMMARY: RegExp conformance test + * See http://bugzilla.mozilla.org/show_bug.cgi?id=165353 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 165353; +var summary = 'RegExp conformance test'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +pattern = /^([a-z]+)*[a-z]$/; +status = inSection(1); +string = 'a'; +actualmatch = string.match(pattern); +expectedmatch = Array('a', undefined); +addThis(); + +status = inSection(2); +string = 'ab'; +actualmatch = string.match(pattern); +expectedmatch = Array('ab', 'a'); +addThis(); + +status = inSection(3); +string = 'abc'; +actualmatch = string.match(pattern); +expectedmatch = Array('abc', 'ab'); +addThis(); + + +string = 'www.netscape.com'; +status = inSection(4); +pattern = /^(([a-z]+)*[a-z]\.)+[a-z]{2,}$/; +actualmatch = string.match(pattern); +expectedmatch = Array('www.netscape.com', 'netscape.', 'netscap'); +addThis(); + +// add one more capturing parens to the previous regexp - +status = inSection(5); +pattern = /^(([a-z]+)*([a-z])\.)+[a-z]{2,}$/; +actualmatch = string.match(pattern); +expectedmatch = Array('www.netscape.com', 'netscape.', 'netscap', 'e'); +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-169497.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-169497.js new file mode 100644 index 00000000..82959640 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-169497.js @@ -0,0 +1,71 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 31 August 2002 + * SUMMARY: RegExp conformance test + * See http://bugzilla.mozilla.org/show_bug.cgi?id=169497 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 169497; +var summary = 'RegExp conformance test'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var sBody = ''; +var sHTML = ''; +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + +sBody += '<body onXXX="alert(event.type);">\n'; +sBody += '<p>Kibology for all<\/p>\n'; +sBody += '<p>All for Kibology<\/p>\n'; +sBody += '<\/body>'; + +sHTML += '<html>\n'; +sHTML += sBody; +sHTML += '\n<\/html>'; + +status = inSection(1); +string = sHTML; +pattern = /<body.*>((.*\n?)*?)<\/body>/i; +actualmatch = string.match(pattern); +expectedmatch = Array(sBody, '\n<p>Kibology for all</p>\n<p>All for Kibology</p>\n', '<p>All for Kibology</p>\n'); +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-169534.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-169534.js new file mode 100644 index 00000000..7c9d6213 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-169534.js @@ -0,0 +1,61 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 20 Sep 2002 + * SUMMARY: RegExp conformance test + * See http://bugzilla.mozilla.org/show_bug.cgi?id=169534 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 169534; +var summary = 'RegExp conformance test'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +var re = /(\|)([\w\x81-\xff ]*)(\|)([\/a-z][\w:\/\.]*\.[a-z]{3,4})(\|)/ig; +var str = "To sign up click |here|https://www.xxxx.org/subscribe.htm|"; +actual = str.replace(re, '<a href="$4">$2</a>'); +expect = 'To sign up click <a href="https://www.xxxx.org/subscribe.htm">here</a>'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-187133.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-187133.js new file mode 100644 index 00000000..032b801f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-187133.js @@ -0,0 +1,108 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 06 January 2003 + * SUMMARY: RegExp conformance test + * See http://bugzilla.mozilla.org/show_bug.cgi?id=187133 + * + * The tests here employ the regular expression construct: + * + * (?!pattern) + * + * This is a "zero-width lookahead negative assertion". + * From the Perl documentation: + * + * For example, /foo(?!bar)/ matches any occurrence + * of 'foo' that isn't followed by 'bar'. + * + * It is "zero-width" means that it does not consume any characters and that + * the parens are non-capturing. A non-null match array in the example above + * will have only have length 1, not 2. + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 187133; +var summary = 'RegExp conformance test'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +pattern = /(\.(?!com|org)|\/)/; +status = inSection(1); +string = 'ah.info'; +actualmatch = string.match(pattern); +expectedmatch = ['.', '.']; +addThis(); + +status = inSection(2); +string = 'ah/info'; +actualmatch = string.match(pattern); +expectedmatch = ['/', '/']; +addThis(); + +status = inSection(3); +string = 'ah.com'; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + + +pattern = /(?!a|b)|c/; +status = inSection(4); +string = ''; +actualmatch = string.match(pattern); +expectedmatch = ['']; +addThis(); + +status = inSection(5); +string = 'bc'; +actualmatch = string.match(pattern); +expectedmatch = ['']; +addThis(); + +status = inSection(6); +string = 'd'; +actualmatch = string.match(pattern); +expectedmatch = ['']; +addThis(); + + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-188206.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-188206.js new file mode 100644 index 00000000..506bdc9e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-188206.js @@ -0,0 +1,185 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 21 January 2003 + * SUMMARY: Invalid use of regexp quantifiers should generate SyntaxErrors + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=188206 + * and http://bugzilla.mozilla.org/show_bug.cgi?id=85721#c48 etc. + * and http://bugzilla.mozilla.org/show_bug.cgi?id=190685 + * and http://bugzilla.mozilla.org/show_bug.cgi?id=197451 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 188206; +var summary = 'Invalid use of regexp quantifiers should generate SyntaxErrors'; +var TEST_PASSED = 'SyntaxError'; +var TEST_FAILED = 'Generated an error, but NOT a SyntaxError!'; +var TEST_FAILED_BADLY = 'Did not generate ANY error!!!'; +var CHECK_PASSED = 'Should not generate an error'; +var CHECK_FAILED = 'Generated an error!'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * All the following are invalid uses of regexp quantifiers and + * should generate SyntaxErrors. That's what we're testing for. + * + * To allow the test to compile and run, we have to hide the errors + * inside eval strings, and check they are caught at run-time - + * + */ +status = inSection(1); +testThis(' /a**/ '); + +status = inSection(2); +testThis(' /a***/ '); + +status = inSection(3); +testThis(' /a++/ '); + +status = inSection(4); +testThis(' /a+++/ '); + +/* + * The ? quantifier, unlike * or +, may appear twice in succession. + * Thus we need at least three in a row to provoke a SyntaxError - + */ + +status = inSection(5); +testThis(' /a???/ '); + +status = inSection(6); +testThis(' /a????/ '); + + +/* + * Now do some weird things on the left side of the regexps - + */ +status = inSection(9); +testThis(' /+a/ '); + +status = inSection(10); +testThis(' /++a/ '); + +status = inSection(11); +testThis(' /?a/ '); + +status = inSection(12); +testThis(' /??a/ '); + + +/* + * Misusing the {DecmalDigits} quantifier - according to BOTH ECMA and Perl. + * + * Just as with the * and + quantifiers above, can't have two {DecmalDigits} + * quantifiers in succession - it's a SyntaxError. + */ +status = inSection(28); +testThis(' /x{1}{1}/ '); + +status = inSection(29); +testThis(' /x{1,}{1}/ '); + +status = inSection(30); +testThis(' /x{1,2}{1}/ '); + +status = inSection(31); +testThis(' /x{1}{1,}/ '); + +status = inSection(32); +testThis(' /x{1,}{1,}/ '); + +status = inSection(33); +testThis(' /x{1,2}{1,}/ '); + +status = inSection(34); +testThis(' /x{1}{1,2}/ '); + +status = inSection(35); +testThis(' /x{1,}{1,2}/ '); + +status = inSection(36); +testThis(' /x{1,2}{1,2}/ '); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Invalid syntax should generate a SyntaxError + */ +function testThis(sInvalidSyntax) +{ + expect = TEST_PASSED; + actual = TEST_FAILED_BADLY; + + try + { + eval(sInvalidSyntax); + } + catch(e) + { + if (e instanceof SyntaxError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; + } + + statusitems[UBound] = status; + expectedvalues[UBound] = expect; + actualvalues[UBound] = actual; + UBound++; +} + + +/* + * Allowed syntax shouldn't generate any errors + */ +function checkThis(sAllowedSyntax) +{ + expect = CHECK_PASSED; + actual = CHECK_PASSED; + + try + { + eval(sAllowedSyntax); + } + catch(e) + { + actual = CHECK_FAILED; + } + + statusitems[UBound] = status; + expectedvalues[UBound] = expect; + actualvalues[UBound] = actual; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-191479.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-191479.js new file mode 100644 index 00000000..daa8d0da --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-191479.js @@ -0,0 +1,164 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 31 January 2003 + * SUMMARY: Testing regular expressions of form /(x|y){n,}/ + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=191479 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 191479; +var summary = 'Testing regular expressions of form /(x|y){n,}/'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +string = '12 3 45'; +pattern = /(\d|\d\s){2,}/; +actualmatch = string.match(pattern); +expectedmatch = Array('12', '2'); +addThis(); + +status = inSection(2); +string = '12 3 45'; +pattern = /(\d|\d\s){4,}/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '5'); +addThis(); + +status = inSection(3); +string = '12 3 45'; +pattern = /(\d|\d\s)+/; +actualmatch = string.match(pattern); +expectedmatch = Array('12', '2'); +addThis(); + +status = inSection(4); +string = '12 3 45'; +pattern = /(\d\s?){4,}/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '5'); +addThis(); + +/* + * Let's reverse the operands in Sections 1-3 above - + */ +status = inSection(5); +string = '12 3 45'; +pattern = /(\d\s|\d){2,}/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '5'); +addThis(); + +status = inSection(6); +string = '12 3 45'; +pattern = /(\d\s|\d){4,}/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '5'); +addThis(); + +status = inSection(7); +string = '12 3 45'; +pattern = /(\d\s|\d)+/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '5'); +addThis(); + + +/* + * Let's take all 7 sections above and make each quantifer non-greedy. + * + * This is done by appending ? to it. It doesn't change the meaning of + * the quantifier, but makes it non-greedy, which affects the results - + */ +status = inSection(8); +string = '12 3 45'; +pattern = /(\d|\d\s){2,}?/; +actualmatch = string.match(pattern); +expectedmatch = Array('12', '2'); +addThis(); + +status = inSection(9); +string = '12 3 45'; +pattern = /(\d|\d\s){4,}?/; +actualmatch = string.match(pattern); +expectedmatch = Array('12 3 4', '4'); +addThis(); + +status = inSection(10); +string = '12 3 45'; +pattern = /(\d|\d\s)+?/; +actualmatch = string.match(pattern); +expectedmatch = Array('1', '1'); +addThis(); + +status = inSection(11); +string = '12 3 45'; +pattern = /(\d\s?){4,}?/; +actualmatch = string.match(pattern); +expectedmatch = Array('12 3 4', '4'); +addThis(); + +status = inSection(12); +string = '12 3 45'; +pattern = /(\d\s|\d){2,}?/; +actualmatch = string.match(pattern); +expectedmatch = Array('12 ', '2 '); +addThis(); + +status = inSection(13); +string = '12 3 45'; +pattern = /(\d\s|\d){4,}?/; +actualmatch = string.match(pattern); +expectedmatch = Array('12 3 4', '4'); +addThis(); + +status = inSection(14); +string = '12 3 45'; +pattern = /(\d\s|\d)+?/; +actualmatch = string.match(pattern); +expectedmatch = Array('1', '1'); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-202564.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-202564.js new file mode 100644 index 00000000..48854d2c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-202564.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 18 April 2003 + * SUMMARY: Testing regexp with many backreferences + * See http://bugzilla.mozilla.org/show_bug.cgi?id=202564 + * + * Note that in Section 1 below, we expect the 1st and 4th backreferences + * to hold |undefined| instead of the empty strings one gets in Perl and IE6. + * This is because per ECMA, regexp backreferences must hold |undefined| + * if not used. See http://bugzilla.mozilla.org/show_bug.cgi?id=123437. + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 202564; +var summary = 'Testing regexp with many backreferences'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +string = 'Seattle, WA to Buckley, WA'; +pattern = /(?:(.+), )?(.+), (..) to (?:(.+), )?(.+), (..)/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, undefined, "Seattle", "WA", undefined, "Buckley", "WA"); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-209067.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-209067.js new file mode 100644 index 00000000..efee909b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-209067.js @@ -0,0 +1,1072 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 12 June 2003 + * SUMMARY: Testing complicated str.replace() + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=209067 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 209067; +var summary = 'Testing complicated str.replace()'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function formatHTML(h) +{ + // a replace function used in the succeeding lines - + function S(s) + { + return s.replace(/</g,'<').replace(/>/g,'>'); + } + + h+='\n'; + h=h.replace(/&([^\s]+;)/g,'<&$1>'); + h=h.replace(new RegExp('<!-'+'-[\\s\\S]*-'+'->','g'), S); + h=h.replace(/"[^"]*"/g,S); + h=h.replace(/'[^']*'/g,S); + + + h=h.replace(/<([^>]*)>/g, + function(s,p) + { + if(s.match(/!doctype/i)) + return'<span class=doctype><' + p + '></span>'; + + p=p.replace(/\\'/g,'\\'').replace(/\\"/g,'\\"').replace(/^\s/,''); +p=p.replace(/(\s)([^<]+)$/g, + function(s,p1,p2) + { + p2=p2.replace(/(=)(\s*[^"'][^\s]*)(\s|$)/g,'$1<span class=attribute-value>$2</span>$3'); + p2=p2.replace(/("[^"]*")/g,'<span class=attribute-value>$1</span>'); + p2=p2.replace(/('[^']*')/g,'<span class=attribute-value>$1</span>'); + return p1 + '<span class=attribute-name>'+p2+'</span>'; + } + ) + + return'<<span class=' + (s.match(/<\s*\//)?'end-tag':'start-tag') + '>' + p + '</span>>'; + } + ) + + + h=h.replace(/<(&[^\s]+;)>/g,'<span class=entity>$1</span>'); + h=h.replace(/(<!--[\s\S]*-->)/g,'<span class=comment>$1</span>'); + + + numer=1; + h=h.replace(/(.*\n)/g, + function(s,p) + { + return (numer++) +'. ' + p; + } + ) + + + return'<span class=text>' + h + '</span>'; +} + + + +/* + * sanity check + */ +status = inSection(1); +actual = formatHTML('abc'); +expect = '<span class=text>1. abc\n</span>'; +addThis(); + + +/* + * The real test: can we run this without crashing? + * We are not validating the result, just running it. + */ +status = inSection(2); +var HUGE_TEST_STRING = hugeString(); +formatHTML(HUGE_TEST_STRING); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i<UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} + + +function hugeString() +{ +var s = ''; + +s += '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'; +s += '<html lang="en">'; +s += '<head>'; +s += ' <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">'; +s += ' <meta http-equiv="refresh" content="1800">'; +s += ' <title>CNN.com'; +s += ' '; +s += ' '; +s += ' '; +s += ' '; +s += ''; +s += ''; +s += ''; +s += ''; +s += ''; +s += ' '; +s += ''; +s += ''; +s += ''; +s += ''; +s += ''; +s += ''; +s += 'Click here to skip to main content.'; +s += ''; +s += ' '; +s += ' '; +s += ' '; +s += ' '; +s += ' '; +s += ' '; +s += ' '; +s += ' '; +s += ' '; +s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ''; + s += '
'; +s += '
CNN.com'; +s += ' '; +s += ''; + s += ' '; + s += ''; + s += ''; + s += ''; + s += ''; + s += '
'; + s += '
'; + s += ''; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
SEARCH
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
  The Web  CNN.com   
enhanced by Google
'; + s += '
'; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ''; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
'; + s += '
SERVICES
 
 
 
SEARCH
'; + s += ''; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
WebCNN.com
enhanced by Google
'; + s += ''; + s += ''; + s += ''; + s += '
'; + s += ''; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
Updated: 05:53 p.m. EDT (2153 GMT) June 12, 2003
'; + s += '
'; + s += ''; + s += ''; + s += ' '; + s += ' Oscar-winner Peck dies'; + s += ''; + s += '
'; + s += '

Oscar-winner Peck dies

'; + s += '

'; + s += 'Actor Gregory Peck, who won an Oscar for his portrayal of upstanding lawyer Atticus Finch in 1962s "To Kill a Mockingbird," has died at age 87. Peck was best known for roles of dignified statesmen and people who followed a strong code of ethics. But he also could play against type. All told, Peck was nominated for five Academy Awards.'; + s += '

'; + s += '

'; + s += ' FULL STORY'; + s += '

'; + s += ''; + s += ''; + s += ''; + s += '• Video: premium content A leading mans leading man
'; + s += ''; + s += ''; + s += ''; + s += ' '; + s += '• Interactive: Gregory Peck through the years
'; + s += ''; + s += ' '; + s += '• Gregory Peck filmographyexternal link
'; + s += ''; + s += ' '; + s += '• Pecks Finch chararcter AFIs top heroexternal link
'; + s += '
'; + s += ''; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += '
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
MORE TOP STORIES Hot Stories
'; + s += '
'; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += ''; + s += '
'; + s += ''; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ' '; + s += '
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += '
'; + s += ' CNNRADIO'; + s += '
Listen to latest updates'; + s += '
'; + s += ''; + s += '
'; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
VIDEOMORE VIDEO
'; + s += ' Soldier broke dozens of hearts over e-mail
'; + s += ' premium content PLAY VIDEO
'; + s += '
'; + s += ' '; + s += '
'; + s += ' '; + s += '
'; + s += ''; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ''; + s += '
'; + s += '
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
ON THE SCENEmore reports
'; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ''; + s += ''; + s += ' '; + s += '
Jeffrey Toobin: "It takes guts" for Peterson defense to subpoena judge over wiretap issue.'; + s += 'Full Storyimage
'; + s += '
'; + s += '
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
BUSINESS'; + s += '  at CNN/Money  Business News
'; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
STOCK/FUND QUOTES:
enter symbol
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
sponsored by:Click Here
'; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += '
MARKETS: '; + s += ''; + s += '4:30pm ET, 6/12
DJIA+13.309196.50+ 0.14%
NAS+ 7.601653.62+ 0.46%
S&P+ 1.03998.51+ 0.10%
'; + s += '
'; + s += ''; + s += '
'; + s += ''; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
MORE REAL TVMore Entertainment
'; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ' '; + s += ' Go ahead, follow me
'; + s += 'New reality series and the movie debut of "Idol" finalists'; + s += '
Go ahead, follow me
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ' '; + s += '
'; + s += ''; + s += '
'; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
GIFT IDEASBusiness News
'; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ''; + s += ''; + s += 'CNN/Money: Fathers Day
'; + s += 'Smaller is better --from digital cameras to iPod'; + s += '
Fathers Day
'; + s += '
'; + s += '
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '

U.S. News:
'; + s += ''; + s += ' '; + s += '• Miami police link 4 rapes to serial rapist
'; + s += ''; + s += ' '; + s += '• Woman mistaken for fugitive jailed
'; + s += ''; + s += ' '; + s += '• Pregnant woman impaled on mic stand
'; + s += '
World News:
'; + s += ''; + s += ' '; + s += '• NATO reshapes for new era
'; + s += ''; + s += ' '; + s += '• U.N. reviews Bunia peace force
'; + s += ''; + s += ''; + s += ''; + s += '• TIME.com: Saddams curtain trailexternal link
'; + s += '
Sci-Tech News:
'; + s += ''; + s += ' '; + s += '• Another reason to throw out your VCR
'; + s += ''; + s += ' '; + s += '• Flat screen TV prices dropping
'; + s += '
Entertainment News:
'; + s += ''; + s += ' '; + s += '• CNN hires Soledad OBrien for "AM"
'; + s += ''; + s += ' '; + s += '• Dating show star let go by law firm
'; + s += '
Politics News:
'; + s += ''; + s += ' '; + s += '• Schwarzenegger on California politics
'; + s += ''; + s += ' '; + s += '• House approves extension on child tax credit
'; + s += '
Law News:
'; + s += ''; + s += ' '; + s += '• Court bars cash advances to plaintiffs
'; + s += ''; + s += ' '; + s += '• Lawsuit against Jackson settled
'; + s += '
Health News:
'; + s += ''; + s += ' '; + s += '• Monkeypox spreading person-to-person?
'; + s += ''; + s += ' '; + s += '• A full body X-ray in 13 seconds
'; + s += '
Space News:
'; + s += ''; + s += ' '; + s += '• Hydrogen fuel may disturb ozone layer
'; + s += ''; + s += ' '; + s += '• New threat found for shuttle launches
'; + s += '
Travel News:
'; + s += ''; + s += ' '; + s += '• Walking America from coast to coast
'; + s += ''; + s += ' '; + s += '• Airline execs not seeing sunny skies yet
'; + s += '
Education News:
'; + s += ''; + s += ' '; + s += '• Arab students seek prom balance
'; + s += ''; + s += ' '; + s += '• Public schools turn to upscale fundraising
'; + s += '
Sports News:
'; + s += ''; + s += '• Woods eyes third U.S. Open title
'; + s += '• Judge denies Jordan's former lover $5M payoff
'; + s += '
Business News:
'; + s += '• Here come the "Duppies"
'; + s += '• Oracle beats estimates
'; + s += '
'; + s += '
'; + s += '
'; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
WATCH CNN TV
On CNN TV
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += '
American Morning, 7 a.m. ETAmerican Morning (7 a.m. ET): Tomorrow, singer Carnie Wilson talks about her new book, "Im Still Hungry."'; + s += '
'; + s += ''; + s += ''; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
ANALYSIS
U.S. News
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += 'Fight It, Martha'; + s += ''; + s += ''; + s += 'NYTimes: Fight It, Martha
'; + s += 'William Safire: I hope Martha Stewart beats this bum rap'; + s += ''; + s += ''; + s += ''; + s += ''; + s += '
'; + s += '
'; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
OFFBEAT
more offbeat
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += 'Waiting list'; + s += ' '; + s += ' Waiting list
'; + s += 'Chinas "smart sperm" bank needs donors'; + s += '
'; + s += '
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
 WEATHER
Get your hometown weather on the home page! Enter city name or U.S. Zip Code:
Or select location from a list
'; + s += ''; + s += ''; + s += ''; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
Quick Vote'; + s += ''; + s += 'Click Here'; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += '
Should an international peacekeeping force be sent to the Mideast?
Yes'; + s += '
No'; + s += '
'; + s += ''; + s += '
VIEW RESULTS
'; + s += ''; + s += '
'; + s += ''; + s += '
'; + s += '
'; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += '
From our Partners'; + s += '  External site icon
'; + s += 'Time:
  Subscribe to TIME  

'; + s += 'CNNsi.com:
'; + s += '• Marty Burns: Nets pull out all stops
'; + s += '• Michael Farber: Sens look good for "04
'; + s += '• Tim Layden: NFL or bust for Neuheisel
'; + s += '
'; + s += '
  Subscribe to Sports Illustrated  
'; + s += '

'; + s += 'New York Times:
  Get 50% OFF the NY Times  
'; + s += '
'; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += ''; + s += ''; + s += '
'; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ''; + s += ' '; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
International Edition
CNN TVCNN InternationalHeadline NewsTranscriptsPreferencesAbout CNN.com
'; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
'; + s += '© 2003 Cable News Network LP, LLLP.
'; + s += 'An AOL Time Warner Company. All Rights Reserved.
'; + s += 'Terms under which this service is provided to you.
'; + s += 'Read our privacy guidelines. Contact us.'; + s += '
'; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += ' '; + s += '
external link
All external sites will open in a new browser.
'; + s += ' CNN.com does not endorse external sites.
'; + s += ''; + s += '
 Premium content icon Denotes premium content.
'; + s += ''; + s += '
'; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ' '; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + s += ''; + + return s; + } diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-209919.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-209919.js new file mode 100644 index 00000000..369b63df --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-209919.js @@ -0,0 +1,140 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 19 June 2003 + * SUMMARY: Testing regexp submatches with quantifiers + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=209919 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 209919; +var summary = 'Testing regexp submatches with quantifiers'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +/* + * Waldemar: "ECMA-262 15.10.2.5, third algorithm, step 2.1 states that + * once the minimum repeat count (which is 0 for *, 1 for +, etc.) has + * been satisfied, an atom being repeated must not match the empty string." + * + * In this example, the minimum repeat count is 0, so the last thing the + * capturing parens is permitted to contain is the 'a'. It may NOT go on + * to capture the '' at the $ position of 'a', even though '' satifies + * the condition b* + * + */ +status = inSection(1); +string = 'a'; +pattern = /(a|b*)*/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'a'); +addThis(); + + +/* + * In this example, the minimum repeat count is 5, so the capturing parens + * captures the 'a', then goes on to capture the '' at the $ position of 'a' + * 4 times before it has to stop. Therefore the last thing it contains is ''. + */ +status = inSection(2); +string = 'a'; +pattern = /(a|b*){5,}/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, ''); +addThis(); + + +/* + * Reduction of the above examples to contain only the condition b* + * inside the capturing parens. This can be even harder to grasp! + * + * The global match is the '' at the ^ position of 'a', but the parens + * is NOT permitted to capture it since the minimum repeat count is 0! + */ +status = inSection(3); +string = 'a'; +pattern = /(b*)*/; +actualmatch = string.match(pattern); +expectedmatch = Array('', undefined); +addThis(); + + +/* + * Here we have used the + quantifier (repeat count 1) outside the parens. + * Therefore the parens must capture at least once before stopping, so it + * does capture the '' this time - + */ +status = inSection(4); +string = 'a'; +pattern = /(b*)+/; +actualmatch = string.match(pattern); +expectedmatch = Array('', ''); +addThis(); + + +/* + * More complex examples - + */ +pattern = /^\-?(\d{1,}|\.{0,})*(\,\d{1,})?$/; + +status = inSection(5); +string = '100.00'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '00', undefined); +addThis(); + +status = inSection(6); +string = '100,00'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '100', ',00'); +addThis(); + +status = inSection(7); +string = '1.000,00'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '000', ',00'); +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-216591.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-216591.js new file mode 100644 index 00000000..4c293559 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-216591.js @@ -0,0 +1,83 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 19 August 2003 + * SUMMARY: Regexp conformance test + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=216591 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 216591; +var summary = 'Regexp conformance test'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +string = 'a {result.data.DATA} b'; +pattern = /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/i; +actualmatch = string.match(pattern); +expectedmatch = Array('{result.data.DATA}', 'result.data.', 'data.', 'DATA'); +addThis(); + +/* + * Add a global flag to the regexp. In Perl 5, this gives the same results as above. Compare: + * + * [ ] perl -e '"a {result.data.DATA} b" =~ /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/i; print("$&, $1, $2, $3");' + * {result.data.DATA}, result.data., data., DATA + * + * [ ] perl -e '"a {result.data.DATA} b" =~ /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/gi; print("$&, $1, $2, $3");' + * {result.data.DATA}, result.data., data., DATA + * + * + * But in JavaScript, there will no longer be any sub-captures: + */ +status = inSection(2); +string = 'a {result.data.DATA} b'; +pattern = /\{(([a-z0-9\-_]+?\.)+?)([a-z0-9\-_]+?)\}/gi; +actualmatch = string.match(pattern); +expectedmatch = Array('{result.data.DATA}'); +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-220367-001.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-220367-001.js new file mode 100644 index 00000000..05ef7210 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-220367-001.js @@ -0,0 +1,70 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 26 September 2003 + * SUMMARY: Regexp conformance test + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=220367 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 220367; +var summary = 'Regexp conformance test'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +string = 'a'; +pattern = /(a)|(b)/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'a', undefined); +addThis(); + +status = inSection(2); +string = 'b'; +pattern = /(a)|(b)/; +actualmatch = string.match(pattern); +expectedmatch = Array(string, undefined, 'b'); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-223273.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-223273.js new file mode 100644 index 00000000..0d88d101 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-223273.js @@ -0,0 +1,245 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 23 October 2003 + * SUMMARY: Unescaped, unbalanced parens in a regexp should cause SyntaxError. + * + * The same would also be true for unescaped, unbalanced brackets or braces + * if we followed the ECMA-262 Ed. 3 spec on this. But it was decided for + * backward compatibility reasons to follow Perl 5, which permits + * + * 1. an unescaped, unbalanced right bracket ] + * 2. an unescaped, unbalanced left brace { + * 3. an unescaped, unbalanced right brace } + * + * If any of these should occur, Perl treats each as a literal + * character. Therefore we permit all three of these cases, even + * though not ECMA-compliant. Note Perl errors on an unescaped, + * unbalanced left bracket; so will we. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=223273 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 223273; +var summary = 'Unescaped, unbalanced parens in regexp should be a SyntaxError'; +var TEST_PASSED = 'SyntaxError'; +var TEST_FAILED = 'Generated an error, but NOT a SyntaxError!'; +var TEST_FAILED_BADLY = 'Did not generate ANY error!!!'; +var CHECK_PASSED = 'Should not generate an error'; +var CHECK_FAILED = 'Generated an error!'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * All the following contain unescaped, unbalanced parens and + * should generate SyntaxErrors. That's what we're testing for. + * + * To allow the test to compile and run, we have to hide the errors + * inside eval strings, and check they are caught at run-time. + * + * Inside such strings, remember to escape any escape character! + */ +status = inSection(1); +testThis(' /(/ '); + +status = inSection(2); +testThis(' /)/ '); + +status = inSection(3); +testThis(' /(abc\\)def(g/ '); + +status = inSection(4); +testThis(' /\\(abc)def)g/ '); + + +/* + * These regexp patterns are correct and should not generate + * any errors. Note we use checkThis() instead of testThis(). + */ +status = inSection(5); +checkThis(' /\\(/ '); + +status = inSection(6); +checkThis(' /\\)/ '); + +status = inSection(7); +checkThis(' /(abc)def\\(g/ '); + +status = inSection(8); +checkThis(' /(abc\\)def)g/ '); + +status = inSection(9); +checkThis(' /(abc(\\))def)g/ '); + +status = inSection(10); +checkThis(' /(abc([x\\)yz]+)def)g/ '); + + + +/* + * Unescaped, unbalanced left brackets should be a SyntaxError + */ +status = inSection(11); +testThis(' /[/ '); + +status = inSection(12); +testThis(' /[abc\\]def[g/ '); + + +/* + * We permit unescaped, unbalanced right brackets, as does Perl. + * No error should result, even though this is not ECMA-compliant. + * Note we use checkThis() instead of testThis(). + */ +status = inSection(13); +checkThis(' /]/ '); + +status = inSection(14); +checkThis(' /\\[abc]def]g/ '); + + +/* + * These regexp patterns are correct and should not generate + * any errors. Note we use checkThis() instead of testThis(). + */ +status = inSection(15); +checkThis(' /\\[/ '); + +status = inSection(16); +checkThis(' /\\]/ '); + +status = inSection(17); +checkThis(' /[abc]def\\[g/ '); + +status = inSection(18); +checkThis(' /[abc\\]def]g/ '); + +status = inSection(19); +checkThis(' /(abc[\\]]def)g/ '); + +status = inSection(20); +checkThis(' /[abc(x\\]yz+)def]g/ '); + + + +/* + * Run some tests for unbalanced braces. We again follow Perl, and + * thus permit unescaped unbalanced braces - both left and right, + * even though this is not ECMA-compliant. + * + * Note we use checkThis() instead of testThis(). + */ +status = inSection(21); +checkThis(' /abc{def/ '); + +status = inSection(22); +checkThis(' /abc}def/ '); + +status = inSection(23); +checkThis(' /a{2}bc{def/ '); + +status = inSection(24); +checkThis(' /a}b{3}c}def/ '); + + +/* + * These regexp patterns are correct and should not generate + * any errors. Note we use checkThis() instead of testThis(). + */ +status = inSection(25); +checkThis(' /abc\\{def/ '); + +status = inSection(26); +checkThis(' /abc\\}def/ '); + +status = inSection(27); +checkThis(' /a{2}bc\\{def/ '); + +status = inSection(28); +checkThis(' /a\\}b{3}c\\}def/ '); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + + +/* + * Invalid syntax should generate a SyntaxError + */ +function testThis(sInvalidSyntax) +{ + expect = TEST_PASSED; + actual = TEST_FAILED_BADLY; + + try + { + eval(sInvalidSyntax); + } + catch(e) + { + if (e instanceof SyntaxError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; + } + + statusitems[UBound] = status; + expectedvalues[UBound] = expect; + actualvalues[UBound] = actual; + UBound++; +} + + +/* + * Valid syntax shouldn't generate any errors + */ +function checkThis(sValidSyntax) +{ + expect = CHECK_PASSED; + actual = CHECK_PASSED; + + try + { + eval(sValidSyntax); + } + catch(e) + { + actual = CHECK_FAILED; + } + + statusitems[UBound] = status; + expectedvalues[UBound] = expect; + actualvalues[UBound] = actual; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i])*-->', 'g'), ''); +printStatus(data); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-309840.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-309840.js new file mode 100644 index 00000000..ff1e5927 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-309840.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 309840; +var summary = 'Treat / in a literal regexp class as valid'; +var actual = 'No error'; +var expect = 'No error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + var re = eval('/[/]/'); +} +catch(e) +{ + actual = e.toString(); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-312351.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-312351.js new file mode 100644 index 00000000..72a52a18 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-312351.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 312351; +var summary = 'Do not crash on RegExp(null)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var x = RegExp(null); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-31316.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-31316.js new file mode 100644 index 00000000..fc6fd94e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-31316.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 01 May 2001 + * + * SUMMARY: Regression test for Bugzilla bug 31316: + * "Rhino: Regexp matches return garbage" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=31316 + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 31316; +var summary = 'Regression test for Bugzilla bug 31316'; +var cnEmptyString = ''; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +pattern = /<([^\/<>][^<>]*[^\/])>|<([^\/<>])>/; +string = '

Some
test

'; +actualmatch = string.match(pattern); +expectedmatch = Array('

', undefined, 'p'); +addThis(); + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-330684.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-330684.js new file mode 100644 index 00000000..f6a3bb76 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-330684.js @@ -0,0 +1,21 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 330684; +var summary = 'Do not hang on RegExp'; +var actual = 'Do not hang on RegExp'; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var re = /^(?:(?:%[0-9A-Fa-f]{2})*[!\$&'\*-;=\?-Z_a-z]*)+$/; +var url = "http://tw.yimg.com/a/tw/wenchuan/cam_240x400_381615_030806_2.swf?clickTAG=javascript:VRECopenWindow(1)"; + +printStatus(re.test(url)); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-334158.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-334158.js new file mode 100644 index 00000000..a5614455 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-334158.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334158; +var summary = 'Parse error in control letter escapes (RegExp)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = true; +actual = /\ca/.test( "\x01" ); +reportCompare(expect, actual, summary + ':/\ca/.test( "\x01" )'); + +expect = false + actual = /\ca/.test( "\\ca" ); +reportCompare(expect, actual, summary + ': /\ca/.test( "\\ca" )'); + +expect = false + actual = /\c[a/]/.test( "\x1ba/]" ); +reportCompare(expect, actual, summary + ': /\c[a/]/.test( "\x1ba/]" )'); diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-346090.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-346090.js new file mode 100644 index 00000000..265c3e8d --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-346090.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346090; +var summary = 'Do not crash with this regexp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var r = /%((h[^l]+)|(l[^h]+)){0,2}?a/g; + r.exec('%lld %d'); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-367888.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-367888.js new file mode 100644 index 00000000..d2e7529b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-367888.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367888; +var summary = 'RegExp /(|)??x/g.exec("y") barfs'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = null; + actual = /(|)??x/g.exec("y"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-375642.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-375642.js new file mode 100644 index 00000000..267abde7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-375642.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375642; +var summary = 'RegExp /(?:a??)+?/.exec("")'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + /(?:a??)+?/.exec("") + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-375651.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-375651.js new file mode 100644 index 00000000..8c8aa05c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-375651.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375651; +var summary = 'Do not assert with regexp quantifiers'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + /(.{2,3}){0,2}?t/.exec("abt"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-375711.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-375711.js new file mode 100644 index 00000000..420b8ba4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-375711.js @@ -0,0 +1,85 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375711; +var summary = 'Do not assert with /[Q-b]/i.exec("")'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var s; + + // see bug 416933 + print('see bug 416933 for changed behavior on Gecko 1.9'); + + try + { + s = '/[Q-b]/.exec("")'; + expect = 'No Error'; + print(s + ' expect ' + expect); + eval(s); + actual = 'No Error'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + s); + + try + { + s ='/[Q-b]/i.exec("")'; + expect = 'No Error'; + print(s + ' expect ' + expect); + eval(s); + actual = 'No Error'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + s); + + try + { + s = '/[q-b]/.exec("")'; + expect = 'SyntaxError: invalid range in character class'; + print(s + ' expect ' + expect); + eval(s); + actual = 'No Error'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + s); + + try + { + s ='/[q-b]/i.exec("")'; + expect = 'SyntaxError: invalid range in character class'; + print(s + ' expect ' + expect); + eval(s); + actual = 'No Error'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + s); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-01-n.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-01-n.js new file mode 100644 index 00000000..dbb988ea --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-01-n.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375715; +var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // note that the assertion does not fire if the regexp is + // evald or used in new RegExp, so this test must be an -n + // with uncaught SyntaxError. + + /[\Wb-G]/.exec(""); + reportCompare(expect, actual, summary + ' /[\Wb-G]/.exec("")'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-02.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-02.js new file mode 100644 index 00000000..7d1965ab --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-02.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375715; +var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + /[\s-:]/; + reportCompare(expect, actual, summary + '/[\s-:]/'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-03.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-03.js new file mode 100644 index 00000000..f701997e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-03.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375715; +var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + /[_-t]/i.exec(""); + reportCompare(expect, actual, summary + '/[_-t]/i.exec("")'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-04.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-04.js new file mode 100644 index 00000000..bb37474b --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-375715-04.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375715; +var summary = 'Do not assert: (c2 <= cs->length) && (c1 <= c2)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + expect = 'SyntaxError: invalid range in character class'; + (new RegExp("[\xDF-\xC7]]", "i")).exec(""); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + '(new RegExp("[\xDF-\xC7]]", "i")).exec("")'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-436700.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-436700.js new file mode 100644 index 00000000..d595b018 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-436700.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 436700; +var summary = 'Do not assert: 1 <= num && num <= 0x10000'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + /\2147483648/.exec(String.fromCharCode(140) + "7483648").toString(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-465862.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-465862.js new file mode 100644 index 00000000..f63f6b96 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-465862.js @@ -0,0 +1,84 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465862; +var summary = 'Do case-insensitive matching correctly in JIT for non-ASCII-letters'; + +var i = 0; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + +// Note: we must call the RegExp constructor here instead of using +// literals. Otherwise, because the regexps are compiled at parse +// time, they will not be compiled to native code and we will not +// actually be testing jitted regexps. + +jit(true); + +status = inSection(1); +string = '@'; +pattern = new RegExp('@', 'i'); +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + +status = inSection(2); +string = '`'; +pattern = new RegExp('`', 'i'); +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + +status = inSection(3); +string = '@'; +pattern = new RegExp('`', 'i'); +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(4); +string = '`'; +pattern = new RegExp('@', 'i'); +print(string + ' ' + pattern); +actualmatch = string.match(pattern); +print('z ' + actualmatch); +print('`'.match(/@/i)); +expectedmatch = null; +addThis(); + +jit(false); + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-57572.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-57572.js new file mode 100644 index 00000000..3f1383f1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-57572.js @@ -0,0 +1,116 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 28 December 2000 + * + * SUMMARY: Testing regular expressions containing the ? character. + * Arose from Bugzilla bug 57572: "RegExp with ? matches incorrectly" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=57572 + * + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 57572; +var summary = 'Testing regular expressions containing "?"'; +var cnEmptyString = ''; var cnSingleSpace = ' '; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +status = inSection(1); +pattern = /(\S+)?(.*)/; +string = 'Test this'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'Test', ' this'); //single space in front of 'this' +addThis(); + +status = inSection(2); +pattern = /(\S+)? ?(.*)/; //single space between the ? characters +string= 'Test this'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'Test', 'this'); //NO space in front of 'this' +addThis(); + +status = inSection(3); +pattern = /(\S+)?(.*)/; +string = 'Stupid phrase, with six - (short) words'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'Stupid', ' phrase, with six - (short) words'); //single space in front of 'phrase' +addThis(); + +status = inSection(4); +pattern = /(\S+)? ?(.*)/; //single space between the ? characters +string = 'Stupid phrase, with six - (short) words'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'Stupid', 'phrase, with six - (short) words'); //NO space in front of 'phrase' +addThis(); + + +// let's add an extra back-reference this time - three instead of two - +status = inSection(5); +pattern = /(\S+)?( ?)(.*)/; //single space before second ? character +string = 'Stupid phrase, with six - (short) words'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'Stupid', cnSingleSpace, 'phrase, with six - (short) words'); +addThis(); + +status = inSection(6); +pattern = /^(\S+)?( ?)(B+)$/; //single space before second ? character +string = 'AAABBB'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'AAABB', cnEmptyString, 'B'); +addThis(); + +status = inSection(7); +pattern = /(\S+)?(!?)(.*)/; +string = 'WOW !!! !!!'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'WOW', cnEmptyString, ' !!! !!!'); +addThis(); + +status = inSection(8); +pattern = /(.+)?(!?)(!+)/; +string = 'WOW !!! !!!'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'WOW !!! !!', cnEmptyString, '!'); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-57631.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-57631.js new file mode 100644 index 00000000..5995fe49 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-57631.js @@ -0,0 +1,118 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 26 November 2000 + * + * + * SUMMARY: This test arose from Bugzilla bug 57631: + * "RegExp with invalid pattern or invalid flag causes segfault" + * + * Either error should throw an exception of type SyntaxError, + * and we check to see that it does... + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = '57631'; +var summary = 'Testing new RegExp(pattern,flag) with illegal pattern or flag'; +var statprefix = 'Testing for error creating illegal RegExp object on pattern '; +var statsuffix = 'and flag '; +var cnSUCCESS = 'SyntaxError'; +var cnFAILURE = 'not a SyntaxError'; +var singlequote = "'"; +var i = -1; var j = -1; var s = ''; var f = ''; +var obj = {}; +var status = ''; var actual = ''; var expect = ''; var msg = ''; +var legalpatterns = new Array(); var illegalpatterns = new Array(); +var legalflags = new Array(); var illegalflags = new Array(); + + +// valid regular expressions to try - +legalpatterns[0] = ''; +legalpatterns[1] = 'abc'; +legalpatterns[2] = '(.*)(3-1)\s\w'; +legalpatterns[3] = '(.*)(...)\\s\\w'; +legalpatterns[4] = '[^A-Za-z0-9_]'; +legalpatterns[5] = '[^\f\n\r\t\v](123.5)([4 - 8]$)'; + +// invalid regular expressions to try - +illegalpatterns[0] = '(?)'; +illegalpatterns[1] = '(a'; +illegalpatterns[2] = '( ]'; +//illegalpatterns[3] = '\d{1,s}'; + +// valid flags to try - +legalflags[0] = 'i'; +legalflags[1] = 'g'; +legalflags[2] = 'm'; +legalflags[3] = undefined; + +// invalid flags to try - +illegalflags[0] = 'a'; +illegalflags[1] = 123; +illegalflags[2] = new RegExp(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + testIllegalRegExps(legalpatterns, illegalflags); + testIllegalRegExps(illegalpatterns, legalflags); + testIllegalRegExps(illegalpatterns, illegalflags); + + exitFunc ('test'); +} + + +// This function will only be called where all the patterns are illegal, or all the flags +function testIllegalRegExps(patterns, flags) +{ + for (i in patterns) + { + s = patterns[i]; + + for (j in flags) + { + f = flags[j]; + status = getStatus(s, f); + actual = cnFAILURE; + expect = cnSUCCESS; + + try + { + // This should cause an exception if either s or f is illegal - + eval('obj = new RegExp(s, f);'); + } + catch(e) + { + // We expect to get a SyntaxError - test for this: + if (e instanceof SyntaxError) + actual = cnSUCCESS; + } + + reportCompare(expect, actual, status); + } + } +} + + +function getStatus(regexp, flag) +{ + return (statprefix + quote(regexp) + statsuffix + quote(flag)); +} + + +function quote(text) +{ + return (singlequote + text + singlequote); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-67773.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-67773.js new file mode 100644 index 00000000..68cdae68 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-67773.js @@ -0,0 +1,177 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 06 February 2001 + * + * SUMMARY: Arose from Bugzilla bug 67773: + * "Regular subexpressions followed by + failing to run to completion" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=67773 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=69989 + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 67773; +var summary = 'Testing regular subexpressions followed by ? or +\n'; +var cnSingleSpace = ' '; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +pattern = /^(\S+)?( ?)(B+)$/; //single space before second ? character +status = inSection(1); +string = 'AAABBB AAABBB '; //single space at middle and at end - +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(2); +string = 'AAABBB BBB'; //single space in the middle +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'AAABBB', cnSingleSpace, 'BBB'); +addThis(); + +status = inSection(3); +string = 'AAABBB AAABBB'; //single space in the middle +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + + +pattern = /^(A+B)+$/; +status = inSection(4); +string = 'AABAAB'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'AAB'); +addThis(); + +status = inSection(5); +string = 'ABAABAAAAAAB'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'AAAAAAB'); +addThis(); + +status = inSection(6); +string = 'ABAABAABAB'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'AB'); +addThis(); + +status = inSection(7); +string = 'ABAABAABABB'; +actualmatch = string.match(pattern); +expectedmatch = null; // because string doesn't match at end +addThis(); + + +pattern = /^(A+1)+$/; +status = inSection(8); +string = 'AA1AA1'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'AA1'); +addThis(); + + +pattern = /^(\w+\-)+$/; +status = inSection(9); +string = ''; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(10); +string = 'bla-'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, string); +addThis(); + +status = inSection(11); +string = 'bla-bla'; // hyphen missing at end - +actualmatch = string.match(pattern); +expectedmatch = null; //because string doesn't match at end +addThis(); + +status = inSection(12); +string = 'bla-bla-'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'bla-'); +addThis(); + + +pattern = /^(\S+)+(A+)$/; +status = inSection(13); +string = 'asdldflkjAAA'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'asdldflkjAA', 'A'); +addThis(); + +status = inSection(14); +string = 'asdldflkj AAA'; // space in middle +actualmatch = string.match(pattern); +expectedmatch = null; //because of the space +addThis(); + + +pattern = /^(\S+)+(\d+)$/; +status = inSection(15); +string = 'asdldflkj122211'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'asdldflkj12221', '1'); +addThis(); + +status = inSection(16); +string = 'asdldflkj1111111aaa1'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, 'asdldflkj1111111aaa', '1'); +addThis(); + + +/* + * This one comes from Stephen Ostermiller. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=69989 + */ +pattern = /^[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)+$/; +status = inSection(17); +string = 'some.host.tld'; +actualmatch = string.match(pattern); +expectedmatch = Array(string, '.tld', '.'); +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-72964.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-72964.js new file mode 100644 index 00000000..b41b74c3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-72964.js @@ -0,0 +1,87 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 2001-07-17 + * + * SUMMARY: Regression test for Bugzilla bug 72964: + * "String method for pattern matching failed for Chinese Simplified (GB2312)" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=72964 + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 72964; +var summary = 'Testing regular expressions containing non-Latin1 characters'; +var cnSingleSpace = ' '; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +pattern = /[\S]+/; +// 4 low Unicode chars = Latin1; whole string should match +status = inSection(1); +string = '\u00BF\u00CD\u00BB\u00A7'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + +// Now put a space in the middle; first half of string should match +status = inSection(2); +string = '\u00BF\u00CD \u00BB\u00A7'; +actualmatch = string.match(pattern); +expectedmatch = Array('\u00BF\u00CD'); +addThis(); + + +// 4 high Unicode chars = non-Latin1; whole string should match +status = inSection(3); +string = '\u4e00\uac00\u4e03\u4e00'; +actualmatch = string.match(pattern); +expectedmatch = Array(string); +addThis(); + +// Now put a space in the middle; first half of string should match +status = inSection(4); +string = '\u4e00\uac00 \u4e03\u4e00'; +actualmatch = string.match(pattern); +expectedmatch = Array('\u4e00\uac00'); +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-76683.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-76683.js new file mode 100644 index 00000000..8b840644 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-76683.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 01 May 2001 + * + * SUMMARY: Regression test for Bugzilla bug 76683 on Rhino: + * "RegExp regression (NullPointerException)" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=76683 + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 76683; +var summary = 'Regression test for Bugzilla bug 76683'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +/* + * Rhino (2001-04-19) crashed on the 3rd regular expression below. + * It didn't matter what the string was. No problem in SpiderMonkey - + */ +string = 'abc'; +status = inSection(1); +pattern = /()|(<([\$\w:\.\-]+)((([ ][^\/>]*)?\/>)|(([ ][^>]*)?>)))/; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +status = inSection(2); +pattern = /()|(<(tagPattern)((([ ][^\/>]*)?\/>)|(([ ][^>]*)?>)))/; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + +// This was the one causing a Rhino crash - +status = inSection(3); +pattern = /()|(<(tagPattern)((([ ][^\/>]*)?\/>)|(([ ][^>]*)?>)))|(<\/tagPattern[^>]*>)/; +actualmatch = string.match(pattern); +expectedmatch = null; +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-78156.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-78156.js new file mode 100644 index 00000000..0bd99097 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-78156.js @@ -0,0 +1,89 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 06 February 2001 + * + * SUMMARY: Arose from Bugzilla bug 78156: + * "m flag of regular expression does not work with $" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=78156 + * + * The m flag means a regular expression should search strings + * across multiple lines, i.e. across '\n', '\r'. + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 78156; +var summary = 'Testing regular expressions with ^, $, and the m flag -'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + +/* + * All patterns have an m flag; all strings are multiline. + * Looking for digit characters at beginning/end of lines. + */ + +string = 'aaa\n789\r\nccc\r\n345'; +status = inSection(1); +pattern = /^\d/gm; +actualmatch = string.match(pattern); +expectedmatch = ['7','3']; +addThis(); + +status = inSection(2); +pattern = /\d$/gm; +actualmatch = string.match(pattern); +expectedmatch = ['9','5']; +addThis(); + +string = 'aaa\n789\r\nccc\r\nddd'; +status = inSection(3); +pattern = /^\d/gm; +actualmatch = string.match(pattern); +expectedmatch = ['7']; +addThis(); + +status = inSection(4); +pattern = /\d$/gm; +actualmatch = string.match(pattern); +expectedmatch = ['9']; +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-85721.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-85721.js new file mode 100644 index 00000000..e04ae97f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-85721.js @@ -0,0 +1,243 @@ +// |reftest| random -- bogus perf test (bug 467263) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 14 Feb 2002 + * SUMMARY: Performance: Regexp performance degraded from 4.7 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=85721 + * + * Adjust this testcase if necessary. The FAST constant defines + * an upper bound in milliseconds for any execution to take. + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 85721; +var summary = 'Performance: execution of regular expression'; +var FAST = 100; // execution should be 100 ms or less to pass the test +var MSG_FAST = 'Execution took less than ' + FAST + ' ms'; +var MSG_SLOW = 'Execution took '; +var MSG_MS = ' ms'; +var str = ''; +var re = ''; +var status = ''; +var actual = ''; +var expect= ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function elapsedTime(startTime) +{ + return new Date() - startTime; +} + + +function isThisFast(ms) +{ + if (ms <= FAST) + return MSG_FAST; + return MSG_SLOW + ms + MSG_MS; +} + + + +/* + * The first regexp. We'll test for performance (Section 1) and accuracy (Section 2). + */ +str=' www.m.com drive.class\nfoo goo '; +re = /\s*\s*([^\r\n]*?)\s*<\/sql:url>\s*\s*([^\r\n]*?)\s*<\/sql:driver>\s*(\s*\s*([^\r\n]*?)\s*<\/sql:userId>\s*)?\s*(\s*\s*([^\r\n]*?)\s*<\/sql:password>\s*)?\s*<\/sql:connection>/; +expect = Array(" www.m.com drive.class\nfoo goo ","conn1","www.m.com","drive.class","foo ","foo","goo ","goo"); + +/* + * Check performance - + */ +status = inSection(1); +var start = new Date(); +var result = re.exec(str); +actual = elapsedTime(start); +reportCompare(isThisFast(FAST), isThisFast(actual), status); + +/* + * Check accuracy - + */ +status = inSection(2); +testRegExp([status], [re], [str], [result], [expect]); + + + +/* + * The second regexp (HUGE!). We'll test for performance (Section 3) and accuracy (Section 4). + * It comes from the O'Reilly book "Mastering Regular Expressions" by Jeffrey Friedl, Appendix B + */ + +//# Some things for avoiding backslashitis later on. +$esc = '\\\\'; +$Period = '\.'; +$space = '\040'; $tab = '\t'; +$OpenBR = '\\['; $CloseBR = '\\]'; +$OpenParen = '\\('; $CloseParen = '\\)'; +$NonASCII = '\x80-\xff'; $ctrl = '\000-\037'; +$CRlist = '\n\015'; //# note: this should really be only \015. +// Items 19, 20, 21 +$qtext = '[^' + $esc + $NonASCII + $CRlist + '\"]'; // # for within "..." +$dtext = '[^' + $esc + $NonASCII + $CRlist + $OpenBR + $CloseBR + ']'; // # for within [...] +$quoted_pair = $esc + '[^' + $NonASCII + ']'; // # an escaped character + +//############################################################################## +//# Items 22 and 23, comment. +//# Impossible to do properly with a regex, I make do by allowing at most one level of nesting. +$ctext = '[^' + $esc + $NonASCII + $CRlist + '()]'; + +//# $Cnested matches one non-nested comment. +//# It is unrolled, with normal of $ctext, special of $quoted_pair. +$Cnested = + $OpenParen + // # ( + $ctext + '*' + // # normal* + '(?:' + $quoted_pair + $ctext + '*)*' + // # (special normal*)* + $CloseParen; // # ) + + +//# $comment allows one level of nested parentheses +//# It is unrolled, with normal of $ctext, special of ($quoted_pair|$Cnested) +$comment = + $OpenParen + // # ( + $ctext + '*' + // # normal* + '(?:' + // # ( + '(?:' + $quoted_pair + '|' + $Cnested + ')' + // # special + $ctext + '*' + // # normal* + ')*' + // # )* + $CloseParen; // # ) + + +//############################################################################## +//# $X is optional whitespace/comments. +$X = + '[' + $space + $tab + ']*' + // # Nab whitespace. + '(?:' + $comment + '[' + $space + $tab + ']*)*'; // # If comment found, allow more spaces. + + +//# Item 10: atom +$atom_char = '[^(' + $space + '<>\@,;:\".' + $esc + $OpenBR + $CloseBR + $ctrl + $NonASCII + ']'; +$atom = + $atom_char + '+' + // # some number of atom characters... + '(?!' + $atom_char + ')'; // # ..not followed by something that could be part of an atom + +// # Item 11: doublequoted string, unrolled. +$quoted_str = + '\"' + // # " + $qtext + '*' + // # normal + '(?:' + $quoted_pair + $qtext + '*)*' + // # ( special normal* )* + '\"'; // # " + +//# Item 7: word is an atom or quoted string +$word = + '(?:' + + $atom + // # Atom + '|' + // # or + $quoted_str + // # Quoted string + ')' + +//# Item 12: domain-ref is just an atom + $domain_ref = $atom; + +//# Item 13: domain-literal is like a quoted string, but [...] instead of "..." +$domain_lit = + $OpenBR + // # [ + '(?:' + $dtext + '|' + $quoted_pair + ')*' + // # stuff + $CloseBR; // # ] + +// # Item 9: sub-domain is a domain-ref or domain-literal +$sub_domain = + '(?:' + + $domain_ref + + '|' + + $domain_lit + + ')' + + $X; // # optional trailing comments + +// # Item 6: domain is a list of subdomains separated by dots. +$domain = + $sub_domain + + '(?:' + + $Period + $X + $sub_domain + + ')*'; + +//# Item 8: a route. A bunch of "@ $domain" separated by commas, followed by a colon. +$route = + '\@' + $X + $domain + + '(?:,' + $X + '\@' + $X + $domain + ')*' + // # additional domains + ':' + + $X; // # optional trailing comments + +//# Item 6: local-part is a bunch of $word separated by periods +$local_part = + $word + $X + '(?:' + + $Period + $X + $word + $X + // # additional words + ')*'; + +// # Item 2: addr-spec is local@domain +$addr_spec = + $local_part + '\@' + $X + $domain; + +//# Item 4: route-addr is +$route_addr = + '<' + $X + // # < + '(?:' + $route + ')?' + // # optional route + $addr_spec + // # address spec + '>'; // # > + +//# Item 3: phrase........ +$phrase_ctrl = '\000-\010\012-\037'; // # like ctrl, but without tab + +//# Like atom-char, but without listing space, and uses phrase_ctrl. +//# Since the class is negated, this matches the same as atom-char plus space and tab +$phrase_char = + '[^()<>\@,;:\".' + $esc + $OpenBR + $CloseBR + $NonASCII + $phrase_ctrl + ']'; + +// # We've worked it so that $word, $comment, and $quoted_str to not consume trailing $X +// # because we take care of it manually. +$phrase = + $word + // # leading word + $phrase_char + '*' + // # "normal" atoms and/or spaces + '(?:' + + '(?:' + $comment + '|' + $quoted_str + ')' + // # "special" comment or quoted string + $phrase_char + '*' + // # more "normal" + ')*'; + +// ## Item #1: mailbox is an addr_spec or a phrase/route_addr +$mailbox = + $X + // # optional leading comment + '(?:' + + $phrase + $route_addr + // # name and address + '|' + // # or + $addr_spec + // # address + ')'; + + +//########################################################################### + + +re = new RegExp($mailbox, "g"); +str = 'Jeffy<"That Tall Guy"@ora.com (this address is no longer active)>'; +expect = Array('Jeffy<"That Tall Guy"@ora.com (this address is no longer active)>'); + +/* + * Check performance - + */ +status = inSection(3); +var start = new Date(); +var result = re.exec(str); +actual = elapsedTime(start); +reportCompare(isThisFast(FAST), isThisFast(actual), status); + +/* + * Check accuracy - + */ +status = inSection(4); +testRegExp([status], [re], [str], [result], [expect]); diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-87231.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-87231.js new file mode 100644 index 00000000..7f36519c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-87231.js @@ -0,0 +1,111 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 22 June 2001 + * + * SUMMARY: Regression test for Bugzilla bug 87231: + * "Regular expression /(A)?(A.*)/ picks 'A' twice" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=87231 + * Key case: + * + * pattern = /^(A)?(A.*)$/; + * string = 'A'; + * expectedmatch = Array('A', '', 'A'); + * + * + * We expect the 1st subexpression (A)? NOT to consume the single 'A'. + * Recall that "?" means "match 0 or 1 times". Here, it should NOT do + * greedy matching: it should match 0 times instead of 1. This allows + * the 2nd subexpression to make the only match it can: the single 'A'. + * Such "altruism" is the only way there can be a successful global match... + */ +//----------------------------------------------------------------------------- +var i = 0; +var BUGNUMBER = 87231; +var cnEmptyString = ''; +var summary = 'Testing regular expression /(A)?(A.*)/'; +var status = ''; +var statusmessages = new Array(); +var pattern = ''; +var patterns = new Array(); +var string = ''; +var strings = new Array(); +var actualmatch = ''; +var actualmatches = new Array(); +var expectedmatch = ''; +var expectedmatches = new Array(); + + +pattern = /^(A)?(A.*)$/; +status = inSection(1); +string = 'AAA'; +actualmatch = string.match(pattern); +expectedmatch = Array('AAA', 'A', 'AA'); +addThis(); + +status = inSection(2); +string = 'AA'; +actualmatch = string.match(pattern); +expectedmatch = Array('AA', 'A', 'A'); +addThis(); + +status = inSection(3); +string = 'A'; +actualmatch = string.match(pattern); +expectedmatch = Array('A', undefined, 'A'); // 'altruistic' case: see above +addThis(); + + +pattern = /(A)?(A.*)/; +var strL = 'zxcasd;fl\\\ ^'; +var strR = 'aaAAaaaf;lrlrzs'; + +status = inSection(4); +string = strL + 'AAA' + strR; +actualmatch = string.match(pattern); +expectedmatch = Array('AAA' + strR, 'A', 'AA' + strR); +addThis(); + +status = inSection(5); +string = strL + 'AA' + strR; +actualmatch = string.match(pattern); +expectedmatch = Array('AA' + strR, 'A', 'A' + strR); +addThis(); + +status = inSection(6); +string = strL + 'A' + strR; +actualmatch = string.match(pattern); +expectedmatch = Array('A' + strR, undefined, 'A' + strR); // 'altruistic' case: see above +addThis(); + + + +//------------------------------------------------------------------------------------------------- +test(); +//------------------------------------------------------------------------------------------------- + + + +function addThis() +{ + statusmessages[i] = status; + patterns[i] = pattern; + strings[i] = string; + actualmatches[i] = actualmatch; + expectedmatches[i] = expectedmatch; + i++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/RegExp/regress-98306.js b/source/spidermonkey-tests/ecma_3/RegExp/regress-98306.js new file mode 100644 index 00000000..fbe315ac --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/RegExp/regress-98306.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 04 September 2001 + * + * SUMMARY: Regression test for Bugzilla bug 98306 + * "JS parser crashes in ParseAtom for script using Regexp()" + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=98306 + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 98306; +var summary = "Testing that we don't crash on this code -"; +var cnUBOUND = 10; +var re; +var s; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + s = '"Hello".match(/[/]/)'; + tryThis(s); + + s = 're = /[/'; + tryThis(s); + + s = 're = /[/]/'; + tryThis(s); + + s = 're = /[//]/'; + tryThis(s); + + reportCompare('No Crash', 'No Crash', ''); + exitFunc ('test'); +} + + +// Try to provoke a crash - +function tryThis(sCode) +{ + // sometimes more than one attempt is necessary - + for (var i=0; i 5) + throw "bad"; + i++; + continue; + } + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Regress/regress-469937.js b/source/spidermonkey-tests/ecma_3/Regress/regress-469937.js new file mode 100644 index 00000000..753735c1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Regress/regress-469937.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 469937; +var summary = 'Properties without DontEnum are sometimes not enumerated'; +var actual = false; +var expect = true; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +(function(){ + var o = { } + o.PageLeft = 1; + o.Rect2 = 6; + delete o.Rect2; + for (var p in o); + o.Rect3 = 7; + found = false; + for (var p in o) if (p == 'Rect3') found = true; + actual = found; +})(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_3/Regress/regress-580544.js b/source/spidermonkey-tests/ecma_3/Regress/regress-580544.js new file mode 100644 index 00000000..4e0ca92f --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Regress/regress-580544.js @@ -0,0 +1,30 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'regress-580544.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 580544; +var summary = 'Do not assert: new (this.prototype = this)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try { + new (this.prototype = this); + } catch (e) { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Regress/shell.js b/source/spidermonkey-tests/ecma_3/Regress/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Statements/12.10-01.js b/source/spidermonkey-tests/ecma_3/Statements/12.10-01.js new file mode 100644 index 00000000..031aac4e --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Statements/12.10-01.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 462734; +var summary = 'evaluating lhs "Reference" *before* evaluating rhs'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = 1; + var o = {}; + with (o) + x = o.x = 2; + print(x); + + expect = 4; + actual = x + o.x; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Statements/12.6.3.js b/source/spidermonkey-tests/ecma_3/Statements/12.6.3.js new file mode 100644 index 00000000..a5092d75 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Statements/12.6.3.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 292731; +var summary = 'for-in should not call valueOf method'; +var actual = ''; +var expect = ''; +var i; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function MyObject() +{ +} + +MyObject.prototype.valueOf = function() +{ + actual += 'MyObject.prototype.valueOf called. '; +} + + var myobject = new MyObject(); + +var myfunction = new function() +{ + this.valueOf = function() + { + actual += 'this.valueOf called. '; + } +} + + actual = ''; +for (i in myobject) +{ + //calls valueOf +} +reportCompare(expect, actual, 'for-in custom object'); + +actual = ''; +for (i in myfunction) +{ + //calls valueOf +} +reportCompare(expect, actual, 'for-in function expression'); diff --git a/source/spidermonkey-tests/ecma_3/Statements/browser.js b/source/spidermonkey-tests/ecma_3/Statements/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Statements/regress-121744.js b/source/spidermonkey-tests/ecma_3/Statements/regress-121744.js new file mode 100644 index 00000000..369bc03c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Statements/regress-121744.js @@ -0,0 +1,184 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 30 Jan 2002 + * Revised: 10 Apr 2002 + * Revised: 14 July 2002 + * + * SUMMARY: JS should error on |for(i in undefined)|, |for(i in null)| + * See http://bugzilla.mozilla.org/show_bug.cgi?id=121744 + * + * ECMA-262 3rd Edition Final spec says such statements should error. See: + * + * Section 12.6.4 The for-in Statement + * Section 9.9 ToObject + * + * + * BUT: SpiderMonkey has decided NOT to follow this; it's a bug in the spec. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=131348 + * + * UPDATE: Rhino has also decided not to follow the spec on this. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=136893 + * + + |--------------------------------------------------------------------| + | | + | So for now, adding an early return for this test so it won't run. | + | | + |--------------------------------------------------------------------| + + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 121744; +var summary = 'JS should error on |for(i in undefined)|, |for(i in null)|'; +var TEST_PASSED = 'TypeError'; +var TEST_FAILED = 'Generated an error, but NOT a TypeError!'; +var TEST_FAILED_BADLY = 'Did not generate ANY error!!!'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +/* + * AS OF 14 JULY 2002, DON'T RUN THIS TEST IN EITHER RHINO OR SPIDERMONKEY - + */ +quit(); + + +status = inSection(1); +expect = TEST_PASSED; +actual = TEST_FAILED_BADLY; +/* + * OK, this should generate a TypeError + */ +try +{ + for (var i in undefined) + { + print(i); + } +} +catch(e) +{ + if (e instanceof TypeError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +addThis(); + + + +status = inSection(2); +expect = TEST_PASSED; +actual = TEST_FAILED_BADLY; +/* + * OK, this should generate a TypeError + */ +try +{ + for (var i in null) + { + print(i); + } +} +catch(e) +{ + if (e instanceof TypeError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +addThis(); + + + +status = inSection(3); +expect = TEST_PASSED; +actual = TEST_FAILED_BADLY; +/* + * Variable names that cannot be looked up generate ReferenceErrors; however, + * property names like obj.ZZZ that cannot be looked up are set to |undefined| + * + * Therefore, this should indirectly test | for (var i in undefined) | + */ +try +{ + for (var i in this.ZZZ) + { + print(i); + } +} +catch(e) +{ + if(e instanceof TypeError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +addThis(); + + + +status = inSection(4); +expect = TEST_PASSED; +actual = TEST_FAILED_BADLY; +/* + * The result of an unsuccessful regexp match is the null value + * Therefore, this should indirectly test | for (var i in null) | + */ +try +{ + for (var i in 'bbb'.match(/aaa/)) + { + print(i); + } +} +catch(e) +{ + if(e instanceof TypeError) + actual = TEST_PASSED; + else + actual = TEST_FAILED; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i 'aaZaa' + expect = strJim.replace(new RegExp(strA), strB); // expect 'aa$aaZ' + reportCompare(expect, actual, status); + + + * + * Note: 'Zabc' is the result we expect for 'abc'.replace('', 'Z'). + * + * The string '' is supposed to be equivalent to new RegExp('') = //. + * The regexp // means we should match the "empty string" conceived of + * at the beginning boundary of the word, before the first character. + * + status = 'Section F of test'; + strA = cnEmptyString; + actual = str.replace(strA, strB); + expect = 'Zabc'; + reportCompare(expect, actual, status); + + status = 'Section G of test'; + strA = cnEmptyString; + actual = str.replace(strA, strB); + expect = str.replace(new RegExp(strA), strB); + reportCompare(expect, actual, status); + + ************************* END OF INCORRECT CASES ****************************/ + + +////////////////////////// OK, LET'S START OVER ////////////////////////////// + + status = 'Section 1 of test'; + actual = 'abc'.replace('a', 'Z'); + expect = 'Zbc'; + reportCompare(expect, actual, status); + + status = 'Section 2 of test'; + actual = 'abc'.replace('b', 'Z'); + expect = 'aZc'; + reportCompare(expect, actual, status); + + status = 'Section 3 of test'; + actual = 'abc'.replace(undefined, 'Z'); + expect = 'abc'; // String(undefined) == 'undefined'; no replacement possible + reportCompare(expect, actual, status); + + status = 'Section 4 of test'; + actual = 'abc'.replace(null, 'Z'); + expect = 'abc'; // String(null) == 'null'; no replacement possible + reportCompare(expect, actual, status); + + status = 'Section 5 of test'; + actual = 'abc'.replace(true, 'Z'); + expect = 'abc'; // String(true) == 'true'; no replacement possible + reportCompare(expect, actual, status); + + status = 'Section 6 of test'; + actual = 'abc'.replace(false, 'Z'); + expect = 'abc'; // String(false) == 'false'; no replacement possible + reportCompare(expect, actual, status); + + status = 'Section 7 of test'; + actual = 'aa$aa'.replace('$', 'Z'); + expect = 'aaZaa'; // NOT 'aa$aaZ' as in ECMA Final Draft; see above + reportCompare(expect, actual, status); + + status = 'Section 8 of test'; + actual = 'abc'.replace('.*', 'Z'); + expect = 'abc'; // not 'Z' as in EMCA Final Draft + reportCompare(expect, actual, status); + + status = 'Section 9 of test'; + actual = 'abc'.replace('', 'Z'); + expect = 'Zabc'; // Still expect 'Zabc' for this + reportCompare(expect, actual, status); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/String/shell.js b/source/spidermonkey-tests/ecma_3/String/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Unicode/browser.js b/source/spidermonkey-tests/ecma_3/Unicode/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Unicode/regress-352044-01.js b/source/spidermonkey-tests/ecma_3/Unicode/regress-352044-01.js new file mode 100644 index 00000000..0c98d726 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/regress-352044-01.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352044; +var summary = 'issues with Unicode escape sequences in JavaScript source code'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'SyntaxError: illegal character'; + + try + { + var i = 1; + eval('i \\u002b= 1'); + print(i); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Unicode/regress-352044-02-n.js b/source/spidermonkey-tests/ecma_3/Unicode/regress-352044-02-n.js new file mode 100644 index 00000000..ea975d4a --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/regress-352044-02-n.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352044; +var summary = 'issues with Unicode escape sequences in JavaScript source code'; +var actual = 'No Error'; +var expect = 'SyntaxError'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test case is expected to throw an uncaught SyntaxError'); + + try + { + var i = 1; + i \u002b= 1; + print(i); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_3/Unicode/shell.js b/source/spidermonkey-tests/ecma_3/Unicode/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_3/Unicode/uc-001-n.js b/source/spidermonkey-tests/ecma_3/Unicode/uc-001-n.js new file mode 100644 index 00000000..8ed4cfad --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/uc-001-n.js @@ -0,0 +1,26 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + printStatus ("Unicode Characters 1C-1F negative test."); + printBugNumber (23612); + + reportCompare ("error", eval ("'no'\u001C+' error'"), + "Unicode whitespace test (1C.)"); + reportCompare ("error", eval ("'no'\u001D+' error'"), + "Unicode whitespace test (1D.)"); + reportCompare ("error", eval ("'no'\u001E+' error'"), + "Unicode whitespace test (1E.)"); + reportCompare ("error", eval ("'no'\u001F+' error'"), + "Unicode whitespace test (1F.)"); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/Unicode/uc-001.js b/source/spidermonkey-tests/ecma_3/Unicode/uc-001.js new file mode 100644 index 00000000..bfb8fd51 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/uc-001.js @@ -0,0 +1,21 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + printStatus ("Unicode format-control character (Category Cf) test."); + printBugNumber (23610); + + reportCompare ("no error", eval('"no\u200E error"'), + "Unicode format-control character test (Category Cf.)"); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/Unicode/uc-002-n.js b/source/spidermonkey-tests/ecma_3/Unicode/uc-002-n.js new file mode 100644 index 00000000..0bf64bad --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/uc-002-n.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "Non-character escapes in identifiers negative test."; +EXPECTED = "error"; + +enterFunc ("test"); + +printStatus ("Non-character escapes in identifiers negative test."); +printBugNumber (23607); + +eval("\u0020 = 5"); +reportCompare('PASS', 'FAIL', "Previous statement should have thrown an error."); + +exitFunc ("test"); + diff --git a/source/spidermonkey-tests/ecma_3/Unicode/uc-002.js b/source/spidermonkey-tests/ecma_3/Unicode/uc-002.js new file mode 100644 index 00000000..6e33f147 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/uc-002.js @@ -0,0 +1,24 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + printStatus ("Unicode non-breaking space character test."); + printBugNumber (23613); + + reportCompare ("no error", eval("'no'\u00A0+ ' error'"), + "Unicode non-breaking space character test."); + + var str = "\u00A0foo"; + reportCompare (0, str.search(/^\sfoo$/), + "Unicode non-breaking space character regexp test."); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/Unicode/uc-003.js b/source/spidermonkey-tests/ecma_3/Unicode/uc-003.js new file mode 100644 index 00000000..541cf36c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/uc-003.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + var \u0041 = 5; + var A\u03B2 = 15; + + printStatus ("Escapes in identifiers test."); + printBugNumber (23608); + printBugNumber (23607); + + reportCompare (5, eval("\u0041"), + "Escaped ASCII Identifier test."); + reportCompare (6, eval("++\u0041"), + "Escaped ASCII Identifier test"); + reportCompare (15, eval("A\u03B2"), + "Escaped non-ASCII Identifier test"); + reportCompare (16, eval("++A\u03B2"), + "Escaped non-ASCII Identifier test"); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/Unicode/uc-004.js b/source/spidermonkey-tests/ecma_3/Unicode/uc-004.js new file mode 100644 index 00000000..4c89a760 --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/uc-004.js @@ -0,0 +1,29 @@ +/* -*- tab-width: 8; indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +test(); + +function test() +{ + enterFunc ("test"); + + printStatus ("Unicode Characters 1C-1F with regexps test."); + printBugNumber (23612); + + var ary = ["\u001Cfoo", "\u001Dfoo", "\u001Efoo", "\u001Ffoo"]; + + for (var i in ary) + { + reportCompare (0, ary[Number(i)].search(/^\Sfoo$/), + "Unicode characters 1C-1F in regexps, ary[" + + i + "] did not match \\S test (it should not.)"); + reportCompare (-1, ary[Number(i)].search(/^\sfoo$/), + "Unicode characters 1C-1F in regexps, ary[" + + i + "] matched \\s test (it should not.)"); + } + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/ecma_3/Unicode/uc-005.js b/source/spidermonkey-tests/ecma_3/Unicode/uc-005.js new file mode 100644 index 00000000..4693d50c --- /dev/null +++ b/source/spidermonkey-tests/ecma_3/Unicode/uc-005.js @@ -0,0 +1,242 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 15 July 2002 + * SUMMARY: Testing identifiers with double-byte names + * See http://bugzilla.mozilla.org/show_bug.cgi?id=58274 + * + * Here is a sample of the problem: + * + * js> function f\u02B1 () {} + * + * js> f\u02B1.toSource(); + * function f¦() {} + * + * js> f\u02B1.toSource().toSource(); + * (new String("function f\xB1() {}")) + * + * + * See how the high-byte information (the 02) has been lost? + * The same thing was happening with the toString() method: + * + * js> f\u02B1.toString(); + * + * function f¦() { + * } + * + * js> f\u02B1.toString().toSource(); + * (new String("\nfunction f\xB1() {\n}\n")) + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 58274; +var summary = 'Testing identifiers with double-byte names'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +/* + * Define a function that uses double-byte identifiers in + * "every possible way" + * + * Then recover each double-byte identifier via f.toString(). + * To make this easier, put a 'Z' token before every one. + * + * Our eval string will be: + * + * sEval = "function Z\u02b1(Z\u02b2, b) { + * try { Z\u02b3 : var Z\u02b4 = Z\u02b1; } + * catch (Z\u02b5) { for (var Z\u02b6 in Z\u02b5) + * {for (1; 1<0; Z\u02b7++) {new Array()[Z\u02b6] = 1;} };} }"; + * + * It will be helpful to build this string in stages: + */ +var s0 = 'function Z'; +var s1 = '\u02b1(Z'; +var s2 = '\u02b2, b) {try { Z'; +var s3 = '\u02b3 : var Z'; +var s4 = '\u02b4 = Z'; +var s5 = '\u02b1; } catch (Z' + var s6 = '\u02b5) { for (var Z'; +var s7 = '\u02b6 in Z'; +var s8 = '\u02b5){for (1; 1<0; Z'; +var s9 = '\u02b7++) {new Array()[Z'; +var s10 = '\u02b6] = 1;} };} }'; + + +/* + * Concatenate these and eval() to create the function Z\u02b1 + */ +var sEval = s0 + s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10; +eval(sEval); + + +/* + * Recover all the double-byte identifiers via Z\u02b1.toString(). + * We'll recover the 1st one as arrID[1], the 2nd one as arrID[2], + * and so on ... + */ +var arrID = getIdentifiers(Z\u02b1); + + +/* + * Now check that we got back what we put in - + */ +status = inSection(1); +actual = arrID[1]; +expect = s1.charAt(0); +addThis(); + +status = inSection(2); +actual = arrID[2]; +expect = s2.charAt(0); +addThis(); + +status = inSection(3); +actual = arrID[3]; +expect = s3.charAt(0); +addThis(); + +status = inSection(4); +actual = arrID[4]; +expect = s4.charAt(0); +addThis(); + +status = inSection(5); +actual = arrID[5]; +expect = s5.charAt(0); +addThis(); + +status = inSection(6); +actual = arrID[6]; +expect = s6.charAt(0); +addThis(); + +status = inSection(7); +actual = arrID[7]; +expect = s7.charAt(0); +addThis(); + +status = inSection(8); +actual = arrID[8]; +expect = s8.charAt(0); +addThis(); + +status = inSection(9); +actual = arrID[9]; +expect = s9.charAt(0); +addThis(); + +status = inSection(10); +actual = arrID[10]; +expect = s10.charAt(0); +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Goal: recover the double-byte identifiers from f.toString() + * by getting the very next character after each 'Z' token. + * + * The return value will be an array |arr| indexed such that + * |arr[1]| is the 1st identifier, |arr[2]| the 2nd, and so on. + * + * Note, however, f.toString() is implementation-independent. + * For example, it may begin with '\nfunction' instead of 'function'. + * + * Rhino uses a Unicode representation for f.toString(); whereas + * SpiderMonkey uses an ASCII representation, putting escape sequences + * for non-ASCII characters. For example, if a function is called f\u02B1, + * then in Rhino the toString() method will present a 2-character Unicode + * string for its name, whereas SpiderMonkey will present a 7-character + * ASCII string for its name: the string literal 'f\u02B1'. + * + * So we force the lexer to condense the string before we use it. + * This will give uniform results in Rhino and SpiderMonkey. + */ +function getIdentifiers(f) +{ + var str = condenseStr(f.toString()); + var arr = str.split('Z'); + + /* + * The identifiers are the 1st char of each split substring + * EXCEPT the first one, which is just ('\n' +) 'function '. + * + * Thus note the 1st identifier will be stored in |arr[1]|, + * the 2nd one in |arr[2]|, etc., making the indexing easy - + */ + for (i in arr) + arr[i] = arr[i].charAt(0); + return arr; +} + + +/* + * This function is the opposite of a functions like escape(), which take + * Unicode characters and return escape sequences for them. Here, we force + * the lexer to turn escape sequences back into single characters. + * + * Note we can't simply do |eval(str)|, since in practice |str| will be an + * identifier somewhere in the program (e.g. a function name); thus |eval(str)| + * would return the object that the identifier represents: not what we want. + * + * So we surround |str| lexicographically with quotes to force the lexer to + * evaluate it as a string. Have to strip out any linefeeds first, however - + */ +function condenseStr(str) +{ + /* + * You won't be able to do the next step if |str| has + * any carriage returns or linefeeds in it. For example: + * + * js> eval("'" + '\nHello' + "'"); + * 1: SyntaxError: unterminated string literal: + * 1: ' + * 1: ^ + * + * So replace them with the empty string - + */ + str = str.replace(/[\r\n]/g, '') + return eval("'" + str + "'") + } + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i?"; +var UntilRSBs = "[^]]*]([^]]+])*]+"; +var CDATA_CE = UntilRSBs + "([^]>]" + UntilRSBs + ")*>"; +var S = "[ \\n\\t\\r]+"; +var QuoteSE = '"[^"]' + "*" + '"' + "|'[^']*'"; +var DT_IdentSE = S + Name + "(" + S + "(" + Name + "|" + QuoteSE + "))*"; +var MarkupDeclCE = "([^]\"'><]+|" + QuoteSE + ")*>"; +var S1 = "[\\n\\r\\t ]"; +var UntilQMs = "[^?]*\\?+"; +var PI_Tail = "\\?>|" + S1 + UntilQMs + "([^>?]" + UntilQMs + ")*>"; +var DT_ItemSE = "<(!(--" + Until2Hyphens + ">|[^-]" + MarkupDeclCE + ")|\\?" + Name + "(" + PI_Tail + "))|%" + Name + ";|" + S; +var DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*](" + S + ")?)?>?"; +var DeclCE = "--(" + CommentCE + ")?|\\[CDATA\\[(" + CDATA_CE + ")?|DOCTYPE(" + DocTypeCE + ")?"; +var PI_CE = Name + "(" + PI_Tail + ")?"; +var EndTagCE = Name + "(" + S + ")?>?"; +var AttValSE = '"[^<"]' + "*" + '"' + "|'[^<']*'"; +var ElemTagCE = Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>?"; +var MarkupSPE = "<(!(" + DeclCE + ")?|\\?(" + PI_CE + ")?|/(" + EndTagCE + ")?|(" + ElemTagCE + ")?)"; +var XML_SPE = TextSE + "|" + MarkupSPE; +var CommentRE = " */": " ",\n' + + ' " s p a c e d " :[1,2 , 3\n' + + '\n' + + ',\n' + + '\n' + + '4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],\n' + + ' "jsontext": "{\\"object with 1 member\\":[\\"array with 1 element\\"]}",\n' + + ' "quotes": "" \\u0022 %22 0x22 034 "",\n' + + ' "\\/\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?"\n' + + ': "A key can be any string"\n' + + ' },\n' + + ' 0.5 ,98.6\n' + + ',\n' + + '99.44\n' + + ',\n' + + '\n' + + '1066,\n' + + '1e1,\n' + + '0.1e1,\n' + + '1e-1,\n' + + '1e00,2e+00,2e-00\n' + + ',"rosebud"]\n'; + +var x = JSON.parse(str); + +assertEq(x[0], "JSON Test Pattern pass1"); +assertEq(x[1]["object with 1 member"][0], "array with 1 element"); +assertEq(x[2].constructor, Object); +assertEq(x[3].constructor, Array); +assertEq(x[4], -42); +assertEq(x[5], true); +assertEq(x[6], false); +assertEq(x[7], null); +assertEq(x[8].constructor, Object); +assertEq(x[8]["integer"], 1234567890); +assertEq(x[8]["real"], -9876.543210); +assertEq(x[8]["e"], 0.123456789e-12); +assertEq(x[8]["E"], 1.234567890E+34); +assertEq(x[8][""], 23456789012E66); +assertEq(x[8]["zero"], 0); +assertEq(x[8]["one"], 1); +assertEq(x[8]["space"], " "); +assertEq(x[8]["quote"], "\""); +assertEq(x[8]["backslash"], "\\"); +assertEq(x[8]["controls"], "\b\f\n\r\t"); +assertEq(x[8]["slash"], "/ & /"); +assertEq(x[8]["alpha"], "abcdefghijklmnopqrstuvwyz"); +assertEq(x[8]["ALPHA"], "ABCDEFGHIJKLMNOPQRSTUVWYZ"); +assertEq(x[8]["digit"], "0123456789"); +assertEq(x[8]["0123456789"], "digit"); +assertEq(x[8]["special"], "`1~!@#$%^&*()_+-={':[,]}|;.?"); +assertEq(x[8]["hex"], "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A"); +assertEq(x[8]["true"], true); +assertEq(x[8]["false"], false); +assertEq(x[8]["null"], null); +assertEq(x[8]["array"].length, 0); +assertEq(x[8]["object"].constructor, Object); +assertEq(x[8]["address"], "50 St. James Street"); +assertEq(x[8]["url"], "http://www.JSON.org/"); +assertEq(x[8]["comment"], "// /* */"], " "); +assertEq(x[8][" s p a c e d "].length, 7); +assertEq(x[8]["compact"].length, 7); +assertEq(x[8]["jsontext"], "{\"object with 1 member\":[\"array with 1 element\"]}"); +assertEq(x[8]["quotes"], "" \u0022 %22 0x22 034 ""); +assertEq(x[8]["\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"], "A key can be any string"); +assertEq(x[9], 0.5); +assertEq(x[10], 98.6); +assertEq(x[11], 99.44); +assertEq(x[12], 1066); +assertEq(x[13], 1e1); +assertEq(x[14], 0.1e1); +assertEq(x[15], 1e-1); +assertEq(x[16], 1e00); +assertEq(x[17], 2e+00); +assertEq(x[18], 2e-00); +assertEq(x[19], "rosebud"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-mega-huge-array.js b/source/spidermonkey-tests/ecma_5/JSON/parse-mega-huge-array.js new file mode 100644 index 00000000..93c5c390 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-mega-huge-array.js @@ -0,0 +1,28 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'parse-mega-huge-array.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 667527; +var summary = "JSON.parse should parse arrays of essentially unlimited size"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var str = '['; +for (var i = 0, sz = Math.pow(2, 21); i < sz; i++) + str += '0,'; +str += '0]'; + +var arr = JSON.parse(str); +assertEq(arr.length, Math.pow(2, 21) + 1); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-number-syntax.js b/source/spidermonkey-tests/ecma_5/JSON/parse-number-syntax.js new file mode 100644 index 00000000..42dbbe0b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-number-syntax.js @@ -0,0 +1,32 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +testJSON('-', true); +testJSON('+', true); +testJSON('-f', true); +testJSON('+f', true); +testJSON('00', true); +testJSON('01', true); +testJSON('1.', true); +testJSON('1.0e', true); +testJSON('1.0e+', true); +testJSON('1.0e-', true); +testJSON('1.0e+z', true); +testJSON('1.0e-z', true); +testJSON('1.0ee', true); +testJSON('1.e1', true); +testJSON('1.e+1', true); +testJSON('1.e-1', true); +testJSON('.', true); +testJSON('.1', true); +testJSON('.1e', true); +testJSON('.1e1', true); +testJSON('.1e+1', true); +testJSON('.1e-1', true); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-octal-syntax-error.js b/source/spidermonkey-tests/ecma_5/JSON/parse-octal-syntax-error.js new file mode 100644 index 00000000..f7b0a13a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-octal-syntax-error.js @@ -0,0 +1,8 @@ +testJSON('{"Numbers cannot have leading zeroes": 013}', true); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-primitives.js b/source/spidermonkey-tests/ecma_5/JSON/parse-primitives.js new file mode 100644 index 00000000..450e1a65 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-primitives.js @@ -0,0 +1,62 @@ +var x; + +// check an empty object, just for sanity +var emptyObject = "{}"; +x = JSON.parse(emptyObject); +assertEq(typeof x, "object"); +assertEq(x instanceof Object, true); + +x = JSON.parse(emptyObject); +assertEq(typeof x, "object"); + +// booleans and null +x = JSON.parse("true"); +assertEq(x, true); + +x = JSON.parse("true "); +assertEq(x, true); + +x = JSON.parse("false"); +assertEq(x, false); + +x = JSON.parse(" null "); +assertEq(x, null); + +// numbers +x = JSON.parse("1234567890"); +assertEq(x, 1234567890); + +x = JSON.parse("-9876.543210"); +assertEq(x, -9876.543210); + +x = JSON.parse("0.123456789e-12"); +assertEq(x, 0.123456789e-12); + +x = JSON.parse("1.234567890E+34"); +assertEq(x, 1.234567890E+34); + +x = JSON.parse(" 23456789012E66 \r\r\r\r \n\n\n\n "); +assertEq(x, 23456789012E66); + +// strings +x = JSON.parse('"foo"'); +assertEq(x, "foo"); + +x = JSON.parse('"\\r\\n"'); +assertEq(x, "\r\n"); + +x = JSON.parse(' "\\uabcd\uef4A"'); +assertEq(x, "\uabcd\uef4A"); + +x = JSON.parse('"\\uabcd" '); +assertEq(x, "\uabcd"); + +x = JSON.parse('"\\f"'); +assertEq(x, "\f"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-reviver-array-delete.js b/source/spidermonkey-tests/ecma_5/JSON/parse-reviver-array-delete.js new file mode 100644 index 00000000..c3430587 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-reviver-array-delete.js @@ -0,0 +1,89 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'parse-reviver-array-delete.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 999999; +var summary = "JSON.parse with a reviver which elides array elements"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* + * The reviver deletes all properties from the to-be-returned array. Thus + * stringification reveals properties on the prototype chain -- but there are + * none, so this result is unsurprising. + */ +assertEq(JSON.parse('[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]', + function revive(k, v) + { + if (k === "") + return v; + return undefined; + }) + "", + ",,,,,,,,,,,,,,,,,,,"); + +/* + * Now let's try a reviver that deletes every property but a mega-huge one. + */ +var str = "["; +var expected = ""; +var expected2 = ""; +for (var i = 0; i < 2048; i++) +{ + str += "1,"; + if (i === 2047) + { + expected += "1"; + expected2 += "1"; + } + if (i === 3) + expected2 += "17"; + expected += ","; + expected2 += ","; +} +str += "1]"; + +assertEq(JSON.parse(str, + function reviver(k, v) + { + if (k === "" || k === "2047") + return v; + return undefined; + }) + "", + expected); + + +Array.prototype[3] = 17; + +/* Now, with a property on the prototype chain, it'll show through. */ +assertEq(JSON.parse('[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]', + function revive(k, v) + { + if (k === "") + return v; + return undefined; + }) + "", + ",,,17,,,,,,,,,,,,,,,,"); + + +/* And here too. */ +assertEq(JSON.parse(str, + function reviver(k, v) + { + if (k === "" || k === "2047") + return v; + return undefined; + }) + "", + expected2); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-reviver.js b/source/spidermonkey-tests/ecma_5/JSON/parse-reviver.js new file mode 100644 index 00000000..41e3daf7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-reviver.js @@ -0,0 +1,45 @@ +function doubler(k, v) +{ + assertEq(typeof k, "string"); + + if (typeof v == "number") + return 2 * v; + + return v; +} + +var x = JSON.parse('{"a":5,"b":6}', doubler); +assertEq(x.hasOwnProperty('a'), true); +assertEq(x.hasOwnProperty('b'), true); +assertEq(x.a, 10); +assertEq(x.b, 12); + +x = JSON.parse('[3, 4, 5]', doubler); +assertEq(x[0], 6); +assertEq(x[1], 8); +assertEq(x[2], 10); + +// make sure reviver isn't called after a failed parse +var called = false; +function dontCallMe(k, v) +{ + called = true; +} + +try +{ + JSON.parse('{{{{{{{}}}}', dontCallMe); + throw new Error("didn't throw?"); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, "wrong exception: " + e); +} +assertEq(called, false); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-01.js b/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-01.js new file mode 100644 index 00000000..cbb49b0e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-01.js @@ -0,0 +1,13 @@ +testJSON("{}...", true); +testJSON('{"foo": truBBBB}', true); +testJSON('{foo: truBBBB}', true); +testJSON('{"foo": undefined}', true); +testJSON('{"foo": ]', true); +testJSON('{"foo', true); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-02.js b/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-02.js new file mode 100644 index 00000000..b304e07c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-02.js @@ -0,0 +1,43 @@ +testJSON('"Unterminated string literal', true); +testJSON('["Unclosed array"', true); +testJSON('{unquoted_key: "keys must be quoted"}', true); +testJSON('["extra comma",]', true); +testJSON('["double extra comma",,]', true); +testJSON('[ , "<-- missing value"]', true); +testJSON('["Comma after the close"],', true); +testJSON('["Extra close"]]', true); +testJSON('{"Extra comma": true,}', true); +testJSON('{"Extra value after close": true} "misplaced quoted value"', true); +testJSON('{"Illegal expression": 1 + 2}', true); +testJSON('{"Illegal invocation": alert()}', true); +testJSON('{"Numbers cannot be hex": 0x14}', true); +testJSON('["Illegal backslash escape: \\x15"]', true); +testJSON('[\\naked]', true); +testJSON('["Illegal backslash escape: \\017"]', true); +testJSON('{"Missing colon" null}', true); +testJSON('{"Double colon":: null}', true); +testJSON('{"Comma instead of colon", null}', true); +testJSON('["Colon instead of comma": false]', true); +testJSON('["Bad value", truth]', true); +testJSON("['single quote']", true); +testJSON('[" tab character in string "]', true); +testJSON('["tab\\ character\\ in\\ string\\ "]', true); +testJSON('["line\rbreak"]', true); +testJSON('["line\nbreak"]', true); +testJSON('["line\r\nbreak"]', true); +testJSON('["line\\\rbreak"]', true); +testJSON('["line\\\nbreak"]', true); +testJSON('["line\\\r\nbreak"]', true); +testJSON('[0e]', true); +testJSON('[0e+]', true); +testJSON('[0e+-1]', true); +testJSON('{"Comma instead of closing brace": true,', true); +testJSON('["mismatch"}', true); +testJSON('0{', true); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-03.js b/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-03.js new file mode 100644 index 00000000..5cdf585a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse-syntax-errors-03.js @@ -0,0 +1,55 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +testJSON('[', true); +testJSON('[1', true); +testJSON('[1,]', true); +testJSON('[1,{', true); +testJSON('[1,}', true); +testJSON('[1,{]', true); +testJSON('[1,}]', true); +testJSON('[1,{"', true); +testJSON('[1,}"', true); +testJSON('[1,{"\\', true); +testJSON('[1,}"\\', true); +testJSON('[1,"', true); +testJSON('[1,"\\', true); + +testJSON('{', true); +testJSON('{1', true); +testJSON('{,', true); +testJSON('{"', true); +testJSON('{"\\', true); +testJSON('{"\\u', true); +testJSON('{"\\uG', true); +testJSON('{"\\u0', true); +testJSON('{"\\u01', true); +testJSON('{"\\u012', true); +testJSON('{"\\u0123', true); +testJSON('{"\\u0123"', true); +testJSON('{"a"', true); +testJSON('{"a"}', true); +testJSON('{"a":', true); +testJSON('{"a",}', true); +testJSON('{"a":}', true); +testJSON('{"a":,}', true); +testJSON('{"a":5,}', true); +testJSON('{"a":5,[', true); +testJSON('{"a":5,"', true); +testJSON('{"a":5,"', true); +testJSON('{"a":5,"\\', true); +testJSON("a[false ]".substring(1, 7) /* "[false" */, true); + +testJSON('this', true); + +testJSON('[1,{}]', false); +testJSON('{}', false); +testJSON('{"a":5}', false); +testJSON('{"\\u0123":5}', false); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/parse.js b/source/spidermonkey-tests/ecma_5/JSON/parse.js new file mode 100644 index 00000000..ff9dc51a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/parse.js @@ -0,0 +1,175 @@ +function assertIsObject(x) +{ + assertEq(typeof x, "object"); + assertEq(x instanceof Object, true); +} + +function assertIsArray(x) +{ + assertIsObject(x); + assertEq(Array.isArray(x), true); + assertEq(Object.getPrototypeOf(x), Array.prototype); + assertEq(x instanceof Array, true); + assertEq(x.constructor, Array); +} + +var x; +var props; + +// empty object +x = JSON.parse("{}"); +assertIsObject(x); +assertEq(Object.getOwnPropertyNames(x).length, 0); + +// empty array +x = JSON.parse("[]"); +assertIsArray(x); +assertEq(x.length, 0); + +// one element array +x = JSON.parse("[[]]"); +assertIsArray(x); +assertEq(x.length, 1); +assertIsArray(x[0]); +assertEq(x[0].length, 0); + +// multiple arrays +x = JSON.parse("[[],[],[]]"); +assertIsArray(x); +assertEq(x.length, 3); +assertIsArray(x[0]); +assertEq(x[0].length, 0); +assertIsArray(x[1]); +assertEq(x[1].length, 0); +assertIsArray(x[2]); +assertEq(x[2].length, 0); + +// array key/value +x = JSON.parse('{"foo":[]}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assertEq(props.length, 1); +assertEq(props[0], "foo"); +assertIsArray(x.foo); +assertEq(x.foo.length, 0); + +x = JSON.parse('{"foo":[], "bar":[]}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x).sort(); +assertEq(props.length, 2); +assertEq(props[0], "bar"); +assertEq(props[1], "foo"); +assertIsArray(x.foo); +assertEq(x.foo.length, 0); +assertIsArray(x.bar); +assertEq(x.bar.length, 0); + +// nesting +x = JSON.parse('{"foo":[{}]}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assertEq(props.length, 1); +assertEq(props[0], "foo"); +assertIsArray(x.foo); +assertEq(x.foo.length, 1); +assertIsObject(x.foo[0]); +assertEq(Object.getOwnPropertyNames(x.foo[0]).length, 0); + +x = JSON.parse('{"foo":[{"foo":[{"foo":{}}]}]}'); +assertIsObject(x.foo[0].foo[0].foo); + +x = JSON.parse('{"foo":[{"foo":[{"foo":[]}]}]}'); +assertIsArray(x.foo[0].foo[0].foo); + +// strings +x = JSON.parse('{"foo":"bar"}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assertEq(props.length, 1); +assertEq(props[0], "foo"); +assertEq(x.foo, "bar"); + +x = JSON.parse('["foo", "bar", "baz"]'); +assertIsArray(x); +assertEq(x.length, 3); +assertEq(x[0], "foo"); +assertEq(x[1], "bar"); +assertEq(x[2], "baz"); + +// numbers +x = JSON.parse('{"foo":5.5, "bar":5}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x).sort(); +assertEq(props.length, 2); +assertEq(props[0], "bar"); +assertEq(props[1], "foo"); +assertEq(x.foo, 5.5); +assertEq(x.bar, 5); + +// keywords +x = JSON.parse('{"foo": true, "bar":false, "baz":null}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x).sort(); +assertEq(props.length, 3); +assertEq(props[0], "bar"); +assertEq(props[1], "baz"); +assertEq(props[2], "foo"); +assertEq(x.foo, true); +assertEq(x.bar, false); +assertEq(x.baz, null); + +// short escapes +x = JSON.parse('{"foo": "\\"", "bar":"\\\\", "baz":"\\b","qux":"\\f", "quux":"\\n", "quuux":"\\r","quuuux":"\\t"}'); +props = Object.getOwnPropertyNames(x).sort(); +assertEq(props.length, 7); +assertEq(props[0], "bar"); +assertEq(props[1], "baz"); +assertEq(props[2], "foo"); +assertEq(props[3], "quuuux"); +assertEq(props[4], "quuux"); +assertEq(props[5], "quux"); +assertEq(props[6], "qux"); +assertEq(x.foo, '"'); +assertEq(x.bar, '\\'); +assertEq(x.baz, '\b'); +assertEq(x.qux, '\f'); +assertEq(x.quux, "\n"); +assertEq(x.quuux, "\r"); +assertEq(x.quuuux, "\t"); + +// unicode escape +x = JSON.parse('{"foo":"hmm\\u006dmm"}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assertEq(props.length, 1); +assertEq(props[0], "foo"); +assertEq("hmm\u006dmm", x.foo); + +x = JSON.parse('{"hmm\\u006dmm":"foo"}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assertEq(props.length, 1); +assertEq(props[0], "hmmmmm"); +assertEq(x.hmm\u006dmm, "foo"); + +// miscellaneous +x = JSON.parse('{"JSON Test Pattern pass3": {"The outermost value": "must be an object or array.","In this test": "It is an object." }}'); +assertIsObject(x); +props = Object.getOwnPropertyNames(x); +assertEq(props.length, 1); +assertEq(props[0], "JSON Test Pattern pass3"); +assertIsObject(x["JSON Test Pattern pass3"]); +props = Object.getOwnPropertyNames(x["JSON Test Pattern pass3"]).sort(); +assertEq(props.length, 2); +assertEq(props[0], "In this test"); +assertEq(props[1], "The outermost value"); +assertEq(x["JSON Test Pattern pass3"]["The outermost value"], + "must be an object or array."); +assertEq(x["JSON Test Pattern pass3"]["In this test"], "It is an object."); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/shell.js b/source/spidermonkey-tests/ecma_5/JSON/shell.js new file mode 100644 index 00000000..ac2c6984 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/shell.js @@ -0,0 +1,112 @@ +gTestsubsuite='JSON'; + +function testJSON(str, expectSyntaxError) +{ + // Leading and trailing whitespace never affect parsing, so test the string + // multiple times with and without whitespace around it as it's easy and can + // potentially detect bugs. + + // Try the provided string + try + { + JSON.parse(str); + reportCompare(false, expectSyntaxError, + "string <" + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string <" + str + "> threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string <" + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } + + // Now try the provided string with trailing whitespace + try + { + JSON.parse(str + " "); + reportCompare(false, expectSyntaxError, + "string <" + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string <" + str + " > threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string <" + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } + + // Now try the provided string with leading whitespace + try + { + JSON.parse(" " + str); + reportCompare(false, expectSyntaxError, + "string < " + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string < " + str + "> threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string < " + str + "> " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } + + // Now try the provided string with whitespace surrounding it + try + { + JSON.parse(" " + str + " "); + reportCompare(false, expectSyntaxError, + "string < " + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON"); + } + catch (e) + { + if (!(e instanceof SyntaxError)) + { + reportCompare(true, false, + "parsing string < " + str + " > threw a non-SyntaxError " + + "exception: " + e); + } + else + { + reportCompare(true, expectSyntaxError, + "string < " + str + " > " + + "should" + (expectSyntaxError ? "n't" : "") + " " + + "have parsed as JSON, exception: " + e); + } + } +} diff --git a/source/spidermonkey-tests/ecma_5/JSON/small-codepoints.js b/source/spidermonkey-tests/ecma_5/JSON/small-codepoints.js new file mode 100644 index 00000000..6afa5f8c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/small-codepoints.js @@ -0,0 +1,16 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'small-codepoints.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 554079; +var summary = 'JSON.parse should reject U+0000 through U+001F'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (var i = 0; i <= 0x1F; i++) + testJSON('["a' + String.fromCharCode(i) + 'c"]', true); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-boxed-primitives.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-boxed-primitives.js new file mode 100644 index 00000000..0769c2ec --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-boxed-primitives.js @@ -0,0 +1,127 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-boxed-primitives.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Stringification of Boolean/String/Number objects"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function redefine(obj, prop, fun) +{ + var desc = + { value: fun, writable: true, configurable: true, enumerable: false }; + Object.defineProperty(obj, prop, desc); +} + +assertEq(JSON.stringify(new Boolean(false)), "false"); + +assertEq(JSON.stringify(new Number(5)), "5"); + +assertEq(JSON.stringify(new String("foopy")), '"foopy"'); + + +var numToString = Number.prototype.toString; +var numValueOf = Number.prototype.valueOf; +var objToString = Object.prototype.toString; +var objValueOf = Object.prototype.valueOf; +var boolToString = Boolean.prototype.toString; +var boolValueOf = Boolean.prototype.valueOf; + +redefine(Boolean.prototype, "toString", function() { return 17; }); +assertEq(JSON.stringify(new Boolean(false)), "false") +delete Boolean.prototype.toString; +assertEq(JSON.stringify(new Boolean(false)), "false"); +delete Object.prototype.toString; +assertEq(JSON.stringify(new Boolean(false)), "false"); +delete Boolean.prototype.valueOf; +assertEq(JSON.stringify(new Boolean(false)), "false"); +delete Object.prototype.valueOf; +assertEq(JSON.stringify(new Boolean(false)), "false"); + + +redefine(Boolean.prototype, "toString", boolToString); +redefine(Boolean.prototype, "valueOf", boolValueOf); +redefine(Object.prototype, "toString", objToString); +redefine(Object.prototype, "valueOf", objValueOf); + +redefine(Number.prototype, "toString", function() { return 42; }); +assertEq(JSON.stringify(new Number(5)), "5"); +redefine(Number.prototype, "valueOf", function() { return 17; }); +assertEq(JSON.stringify(new Number(5)), "17"); +delete Number.prototype.toString; +assertEq(JSON.stringify(new Number(5)), "17"); +delete Number.prototype.valueOf; +assertEq(JSON.stringify(new Number(5)), "null"); // isNaN(Number("[object Number]")) +delete Object.prototype.toString; +try +{ + JSON.stringify(new Number(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "ToNumber failure, should throw TypeError"); +} +delete Object.prototype.valueOf; +try +{ + JSON.stringify(new Number(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "ToNumber failure, should throw TypeError"); +} + + +redefine(Number.prototype, "toString", numToString); +redefine(Number.prototype, "valueOf", numValueOf); +redefine(Object.prototype, "toString", objToString); +redefine(Object.prototype, "valueOf", objValueOf); + + +redefine(String.prototype, "valueOf", function() { return 17; }); +assertEq(JSON.stringify(new String(5)), '"5"'); +redefine(String.prototype, "toString", function() { return 42; }); +assertEq(JSON.stringify(new String(5)), '"42"'); +delete String.prototype.toString; +assertEq(JSON.stringify(new String(5)), '"[object String]"'); +delete Object.prototype.toString; +assertEq(JSON.stringify(new String(5)), '"17"'); +delete String.prototype.valueOf; +try +{ + JSON.stringify(new String(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "ToString failure, should throw TypeError"); +} +delete Object.prototype.valueOf; +try +{ + JSON.stringify(new String(5)); + throw new Error("didn't throw"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "ToString failure, should throw TypeError"); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-call-replacer-once.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-call-replacer-once.js new file mode 100644 index 00000000..34e549b6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-call-replacer-once.js @@ -0,0 +1,34 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-call-replacer-once.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Call replacer function exactly once per value"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var factor = 1; +function replacer(k, v) +{ + if (k === "") + return v; + + return v * ++factor; +} + +var obj = { a: 1, b: 2, c: 3 }; + +assertEq(JSON.stringify(obj, replacer), '{"a":2,"b":6,"c":12}'); +assertEq(factor, 4); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-call-toJSON-once.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-call-toJSON-once.js new file mode 100644 index 00000000..23917975 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-call-toJSON-once.js @@ -0,0 +1,32 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-call-toJSON-once.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Stringification of Boolean/String/Number objects"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + p: { + toJSON: function() + { + return { toJSON: function() { return 17; } }; + } + } + }; + +assertEq(JSON.stringify(obj), '{"p":{}}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-dropping-elements.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-dropping-elements.js new file mode 100644 index 00000000..58838e10 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-dropping-elements.js @@ -0,0 +1,20 @@ +assertEq(JSON.stringify({foo: 123}), + '{"foo":123}'); +assertEq(JSON.stringify({foo: 123, bar: function () {}}), + '{"foo":123}'); +assertEq(JSON.stringify({foo: 123, bar: function () {}, baz: 123}), + '{"foo":123,"baz":123}'); + +assertEq(JSON.stringify([123]), + '[123]'); +assertEq(JSON.stringify([123, function () {}]), + '[123,null]'); +assertEq(JSON.stringify([123, function () {}, 456]), + '[123,null,456]'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-gap.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-gap.js new file mode 100644 index 00000000..8480b4b3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-gap.js @@ -0,0 +1,61 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-gap.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = + "JSON.stringify(_1, _2, numberGreaterThanOne) produces wrong output"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var LF = "\n"; +var GAP = " "; + +var obj = { a: { b: [1, 2], c: { d: 3, e: 4 }, f: [], g: {}, h: [5], i: { j: 6 } } }; + +var expected = + '{\n' + + ' "a": {\n' + + ' "b": [\n' + + ' 1,\n' + + ' 2\n' + + ' ],\n' + + ' "c": {\n' + + ' "d": 3,\n' + + ' "e": 4\n' + + ' },\n' + + ' "f": [],\n' + + ' "g": {},\n' + + ' "h": [\n' + + ' 5\n' + + ' ],\n' + + ' "i": {\n' + + ' "j": 6\n' + + ' }\n' + + ' }\n' + + '}'; + +assertEq(JSON.stringify(obj, null, 3), expected); +assertEq(JSON.stringify(obj, null, " "), expected); + +obj = [1, 2, 3]; + +String.prototype.toString = function() { return "--"; }; + +assertEq(JSON.stringify(obj, null, new String(" ")), "[\n--1,\n--2,\n--3\n]"); + +Number.prototype.valueOf = function() { return 0; }; + +assertEq(JSON.stringify(obj, null, new Number(3)), "[1,2,3]"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-ignore-noncallable-toJSON.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-ignore-noncallable-toJSON.js new file mode 100644 index 00000000..e4ce0ce9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-ignore-noncallable-toJSON.js @@ -0,0 +1,28 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-ignore-noncallable-toJSON.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "If the toJSON property isn't callable, don't try to call it"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + p: { toJSON: null }, + m: { toJSON: {} } + }; + +assertEq(JSON.stringify(obj), '{"p":{"toJSON":null},"m":{"toJSON":{}}}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-large-replacer-array.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-large-replacer-array.js new file mode 100644 index 00000000..28180b4b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-large-replacer-array.js @@ -0,0 +1,26 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-large-replacer-array.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 816033; +var summary = "JSON.stringify with a large replacer array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var replacer = []; +for (var i = 0; i < 4096; i++) + replacer.push(i); + +assertEq(JSON.stringify({ "foopy": "FAIL", "4093": 17 }, replacer), '{"4093":17}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-missing-arguments.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-missing-arguments.js new file mode 100644 index 00000000..18ca6083 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-missing-arguments.js @@ -0,0 +1,22 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-missing-arguments.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = "JSON.stringify with no arguments"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(JSON.stringify(), undefined); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-nonarray-noncallable-replacer.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-nonarray-noncallable-replacer.js new file mode 100644 index 00000000..440fbc0a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-nonarray-noncallable-replacer.js @@ -0,0 +1,41 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-nonarray-noncallable-replacer.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 653782; +var summary = + "Treat non-array, non-callable replacers as if none had been specified"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = { p: 2 }; +var str = '{"p":2}'; + +assertEq(JSON.stringify(obj), str); +assertEq(JSON.stringify(obj, ["p"]), str); +assertEq(JSON.stringify(obj, null), str); +assertEq(JSON.stringify(obj, undefined), str); +assertEq(JSON.stringify(obj, 2), str); +assertEq(JSON.stringify(obj, Math.PI), str); +assertEq(JSON.stringify(obj, NaN), str); +assertEq(JSON.stringify(obj, true), str); +assertEq(JSON.stringify(obj, false), str); +assertEq(JSON.stringify(obj, Infinity), str); +assertEq(JSON.stringify(obj, "foopy"), str); +assertEq(JSON.stringify(obj, {}), str); +assertEq(JSON.stringify(obj, /abcd/), str); +assertEq(JSON.stringify(obj, new Boolean(true)), str); +assertEq(JSON.stringify(obj, new Number(42)), str); +assertEq(JSON.stringify(obj, new String("aequorin")), str); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-primitives.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-primitives.js new file mode 100644 index 00000000..3f48638b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-primitives.js @@ -0,0 +1,39 @@ +// sanity +var x = JSON.stringify({}); +assertEq(x, "{}"); + +// booleans and null +x = JSON.stringify(true); +assertEq(x, "true"); + +x = JSON.stringify(false); +assertEq(x, "false"); + +x = JSON.stringify(new Boolean(false)); +assertEq(x, "false"); + +x = JSON.stringify(null); +assertEq(x, "null"); + +x = JSON.stringify(1234); +assertEq(x, "1234"); + +x = JSON.stringify(new Number(1234)); +assertEq(x, "1234"); + +x = JSON.stringify("asdf"); +assertEq(x, '"asdf"'); + +x = JSON.stringify(new String("asdf")); +assertEq(x, '"asdf"'); + +assertEq(JSON.stringify(undefined), undefined); +assertEq(JSON.stringify(function(){}), undefined); +assertEq(JSON.stringify(JSON.stringify), undefined); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-boxed-elements.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-boxed-elements.js new file mode 100644 index 00000000..561f7009 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-boxed-elements.js @@ -0,0 +1,60 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-replacer-array-boxed-elements.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = "Boxed-string/number objects in replacer arrays"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var S = new String(3); +var N = new Number(4); + +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"3":3}'); +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"4":4}'); + +Number.prototype.toString = function() { return 3; }; +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"3":3}'); + +String.prototype.toString = function() { return 4; }; +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"4":4}'); + +Number.prototype.toString = function() { return new String(42); }; +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"4":4}'); + +String.prototype.toString = function() { return new Number(17); }; +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"3":3}'); + +Number.prototype.toString = null; +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [N]), + '{"4":4}'); + +String.prototype.toString = null; +assertEq(JSON.stringify({ 3: 3, 4: 4 }, [S]), + '{"3":3}'); + +Number.prototype.valueOf = function() { return 17; }; +assertEq(JSON.stringify({ 4: 4, 17: 17 }, [N]), + '{"17":17}'); + +String.prototype.valueOf = function() { return 42; }; +assertEq(JSON.stringify({ 3: 3, 42: 42 }, [S]), + '{"42":42}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-duplicated-element.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-duplicated-element.js new file mode 100644 index 00000000..69192e6c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-duplicated-element.js @@ -0,0 +1,69 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-replacer-array-hijinks.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var bigOdd = Math.pow(2, 50) + 1; + +function two() +{ + return Math.random() < 0.5 ? 2 : "2"; +} + +assertEq(JSON.stringify({ 1: 1 }, [1, 1]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [1, "1"]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [1, bigOdd % two()]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, ["1", 1]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, ["1", "1"]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, ["1", bigOdd % two()]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), 1]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), "1"]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), bigOdd % two()]), '{"1":1}'); + + +assertEq(JSON.stringify({ 1: 1 }, [1, new String(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [1, new Number(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, ["1", new Number(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, ["1", new String(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), new Number(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [bigOdd % two(), new String(1)]), '{"1":1}'); + + +assertEq(JSON.stringify({ 1: 1 }, [new String(1), new String(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [new String(1), new Number(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [new Number(1), new String(1)]), '{"1":1}'); + +assertEq(JSON.stringify({ 1: 1 }, [new Number(1), new Number(1)]), '{"1":1}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-edgecase-jsid-elements.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-edgecase-jsid-elements.js new file mode 100644 index 00000000..e7be4c6e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-edgecase-jsid-elements.js @@ -0,0 +1,77 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-replacer-array-edgecase-jsid-elements.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* JSID_INT_MIN/MAX copied from jsapi.h. */ + +var obj = + { + /* [JSID_INT_MIN - 1, JSID_INT_MIN + 1] */ + "-1073741825": -1073741825, + "-1073741824": -1073741824, + "-1073741823": -1073741823, + + "-2.5": -2.5, + "-1": -1, + + 0: 0, + + 1: 1, + 2.5: 2.5, + + /* [JSID_INT_MAX - 1, JSID_INT_MAX + 1] */ + 1073741822: 1073741822, + 1073741823: 1073741823, + 1073741824: 1073741824, + }; + +for (var s in obj) +{ + var n = obj[s]; + assertEq(+s, n); + assertEq(JSON.stringify(obj, [n]), + '{"' + s + '":' + n + '}', + "Failed to stringify numeric property " + n + "correctly"); + assertEq(JSON.stringify(obj, [s]), + '{"' + s + '":' + n + '}', + "Failed to stringify string property " + n + "correctly"); + assertEq(JSON.stringify(obj, [s, ]), + '{"' + s + '":' + n + '}', + "Failed to stringify string then number properties ('" + s + "', " + n + ") correctly"); + assertEq(JSON.stringify(obj, [n, s]), + '{"' + s + '":' + n + '}', + "Failed to stringify number then string properties (" + n + ", '" + s + "') correctly"); +} + +// -0 is tricky, because ToString(-0) === "0", so test it specially. +assertEq(JSON.stringify({ "-0": 17, 0: 42 }, [-0]), + '{"0":42}', + "Failed to stringify numeric property -0 correctly"); +assertEq(JSON.stringify({ "-0": 17, 0: 42 }, ["-0"]), + '{"-0":17}', + "Failed to stringify string property -0 correctly"); +assertEq(JSON.stringify({ "-0": 17, 0: 42 }, ["-0", -0]), + '{"-0":17,"0":42}', + "Failed to stringify string then number properties ('-0', -0) correctly"); +assertEq(JSON.stringify({ "-0": 17, 0: 42 }, [-0, "-0"]), + '{"0":42,"-0":17}', + "Failed to stringify number then string properties (-0, '-0) correctly"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-hijinks.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-hijinks.js new file mode 100644 index 00000000..60c949a5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-hijinks.js @@ -0,0 +1,59 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-replacer-array-hijinks.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var replacer = [0, 1, 2, 3]; +Object.prototype[3] = 3; +Object.defineProperty(replacer, 1, { + get: function() + { + Object.defineProperty(replacer, 4, { value: 4 }); + delete replacer[2]; + delete replacer[3]; + replacer[5] = 5; + return 1; + } +}); + +var s = + JSON.stringify({0: { 1: { 3: { 4: { 5: { 2: "omitted" } } } } } }, replacer); + +// The replacer array's length is as seen on first query, so property names are +// accumulated for indexes i ∈ {0, 1, 2, 3}, but index 1 deletes 2 and 3, so 2 +// isn't seen but 3 is seen as Object.prototype[3]. +assertEq('{"0":{"1":{"3":{"3":3}},"3":3},"3":3}', s); + + +var replacer = [0, 1, 2, 3]; +Object.defineProperty(replacer, 0, { + get: function() + { + replacer.length = 0; + return {}; + } +}); + +// The replacer.length truncation means only properties on the prototype chain +// shine through, but it doesn't affect the original bounds of the iteration +// used to determine property names which will be included in the final string. +assertEq(JSON.stringify({ 0: 0, 1: 1, 2: 2, 3: 3 }, replacer), + '{"3":3}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-skipped-element.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-skipped-element.js new file mode 100644 index 00000000..6297c3a5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-array-skipped-element.js @@ -0,0 +1,62 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-replacer-array-skipped-element.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 648471; +var summary = + "Better/more correct handling for replacer arrays with getter array index " + + "properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(JSON.stringify({ 3: 3, 4: 4 }, + ["3", { toString: function() { return "4" } }]), + '{"3":3}'); + +assertEq(JSON.stringify({ 3: 3, true: 4 }, ["3", true]), + '{"3":3}'); + +assertEq(JSON.stringify({ 3: 3, true: 4 }, ["3", "true", true]), + '{"3":3,"true":4}'); + +assertEq(JSON.stringify({ 3: 3, true: 4 }, ["3", true, "true"]), + '{"3":3,"true":4}'); + +assertEq(JSON.stringify({ 3: 3, false: 4 }, ["3", false]), + '{"3":3}'); + +assertEq(JSON.stringify({ 3: 3, false: 4 }, ["3", "false", false]), + '{"3":3,"false":4}'); + +assertEq(JSON.stringify({ 3: 3, false: 4 }, ["3", false, "false"]), + '{"3":3,"false":4}'); + +assertEq(JSON.stringify({ 3: 3, undefined: 4 }, ["3", undefined]), + '{"3":3}'); + +assertEq(JSON.stringify({ 3: 3, undefined: 4 }, ["3", "undefined", undefined]), + '{"3":3,"undefined":4}'); + +assertEq(JSON.stringify({ 3: 3, undefined: 4 }, ["3", undefined, "undefined"]), + '{"3":3,"undefined":4}'); + +assertEq(JSON.stringify({ 3: 3, null: 4 }, ["3", null]), + '{"3":3}'); + +assertEq(JSON.stringify({ 3: 3, null: 4 }, ["3", "null", null]), + '{"3":3,"null":4}'); + +assertEq(JSON.stringify({ 3: 3, null: 4 }, ["3", null, "null"]), + '{"3":3,"null":4}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-with-array-indexes.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-with-array-indexes.js new file mode 100644 index 00000000..0b3f6896 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer-with-array-indexes.js @@ -0,0 +1,56 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-replacer-with-array-indexes.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = + "Call the replacer function for array elements with stringified indexes"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = [0, 1, 2, 3, 4]; + +var seenTopmost = false; +var index = 0; +function replacer() +{ + assertEq(arguments.length, 2); + + var key = arguments[0], value = arguments[1]; + + // Topmost array: ignore replacer call. + if (key === "") + { + assertEq(seenTopmost, false); + seenTopmost = true; + return value; + } + + assertEq(seenTopmost, true); + + assertEq(typeof key, "string"); + assertEq(key === index, false); + assertEq(key === index + "", true); + + assertEq(value, index); + + index++; + + assertEq(this, arr); + + return value; +} + +assertEq(JSON.stringify(arr, replacer), '[0,1,2,3,4]'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer.js new file mode 100644 index 00000000..37497fd3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-replacer.js @@ -0,0 +1,155 @@ +/** + * These return* functions are used by the + * replacer tests taken from bug 512447 + */ +function returnObjectFor1(k, v) +{ + if (k == "1") + return {}; + return v; +} +function returnArrayFor1(k, v) +{ + if (k == "1") + return []; + return v; +} +function returnNullFor1(k, v) +{ + if (k == "1") + return null; + return v; +} +function returnStringForUndefined(k, v) +{ + if (v === undefined) + return "undefined value"; + return v; +} +var cycleObject = {}; cycleObject.cycle = cycleObject; +function returnCycleObjectFor1(k, v) +{ + if (k == "1") + return cycleObject; + return v; +} +var array = [0, 1, 2]; array[3] = array; +function returnCycleArrayFor1(k, v) +{ + if (k == "1") + return array; + return v; +} + +// BEGIN TEST +var x; + +x = JSON.stringify({ key: 2 }, + function(k,v) { return k ? undefined : v; }); +assertEq(x, "{}"); + +x = JSON.stringify(["hmm", "hmm"], + function(k,v) { return k !== "" ? undefined : v; }); +assertEq(x, "[null,null]"); + +var foo = ["hmm"]; +function censor(k, v) +{ + if (v !== foo) + return "XXX"; + return v; +} +x = JSON.stringify(foo, censor); +assertEq(x, '["XXX"]'); + +foo = ["bar", ["baz"], "qux"]; +x = JSON.stringify(foo, censor); +assertEq(x, '["XXX","XXX","XXX"]'); + +function censor2(k, v) +{ + if (typeof(v) == "string") + return "XXX"; + return v; +} + +foo = ["bar", ["baz"], "qux"]; +x = JSON.stringify(foo, censor2); +assertEq(x, '["XXX",["XXX"],"XXX"]'); + +foo = { bar: 42, qux: 42, quux: 42 }; +x = JSON.stringify(foo, ["bar"]); +assertEq(x, '{"bar":42}'); + +foo = {bar: {bar: 42, schmoo:[]}, qux: 42, quux: 42}; +x = JSON.stringify(foo, ["bar", "schmoo"]); +assertEq(x, '{"bar":{"bar":42,"schmoo":[]}}'); + +x = JSON.stringify(foo, null, ""); +assertEq(x, '{"bar":{"bar":42,"schmoo":[]},"qux":42,"quux":42}'); + +x = JSON.stringify(foo, null, " "); +assertEq(x, '{\n "bar": {\n "bar": 42,\n "schmoo": []\n },\n "qux": 42,\n "quux": 42\n}'); + +foo = {bar:{bar:{}}} +x = JSON.stringify(foo, null, " "); +assertEq(x, '{\n "bar": {\n "bar": {}\n }\n}'); + +x = JSON.stringify({ x: 1, arr: [1] }, + function (k,v) { return typeof v === 'number' ? 3 : v; }); +assertEq(x, '{"x":3,"arr":[3]}'); + +foo = ['e']; +x = JSON.stringify(foo, null, '\t'); +assertEq(x, '[\n\t"e"\n]'); + +foo = {0:0, 1:1, 2:2, 3:undefined}; +x = JSON.stringify(foo, returnObjectFor1); +assertEq(x, '{"0":0,"1":{},"2":2}'); + +x = JSON.stringify(foo, returnArrayFor1); +assertEq(x, '{"0":0,"1":[],"2":2}'); + +x = JSON.stringify(foo, returnNullFor1); +assertEq(x, '{"0":0,"1":null,"2":2}'); + +x = JSON.stringify(foo, returnStringForUndefined); +assertEq(x, '{"0":0,"1":1,"2":2,"3":"undefined value"}'); + +try +{ + JSON.stringify(foo, returnCycleObjectFor1); + throw new Error("no error thrown"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, "no TypeError thrown: " + e); +} + +try +{ + JSON.stringify(foo, returnCycleArrayFor1); + throw new Error("no error thrown"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, "no TypeError thrown: " + e); +} + +foo = [0, 1, 2, undefined]; +try +{ + JSON.stringify(foo, returnCycleObjectFor1); + throw new Error("no error thrown"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, "no TypeError thrown: " + e); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-special-escapes.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-special-escapes.js new file mode 100644 index 00000000..cf3d8c28 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-special-escapes.js @@ -0,0 +1,227 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-special-escapes.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 512266; +var summary = + "JSON.stringify of \\b\\f\\n\\r\\t should use one-character escapes, not hex"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(JSON.stringify("\u0000"), '"\\u0000"'); +assertEq(JSON.stringify("\u0001"), '"\\u0001"'); +assertEq(JSON.stringify("\u0002"), '"\\u0002"'); +assertEq(JSON.stringify("\u0003"), '"\\u0003"'); +assertEq(JSON.stringify("\u0004"), '"\\u0004"'); +assertEq(JSON.stringify("\u0005"), '"\\u0005"'); +assertEq(JSON.stringify("\u0006"), '"\\u0006"'); +assertEq(JSON.stringify("\u0007"), '"\\u0007"'); +assertEq(JSON.stringify("\u0008"), '"\\b"'); +assertEq(JSON.stringify("\u0009"), '"\\t"'); +assertEq(JSON.stringify("\u000A"), '"\\n"'); +assertEq(JSON.stringify("\u000B"), '"\\u000b"'); +assertEq(JSON.stringify("\u000C"), '"\\f"'); +assertEq(JSON.stringify("\u000D"), '"\\r"'); +assertEq(JSON.stringify("\u000E"), '"\\u000e"'); +assertEq(JSON.stringify("\u000F"), '"\\u000f"'); +assertEq(JSON.stringify("\u0010"), '"\\u0010"'); +assertEq(JSON.stringify("\u0011"), '"\\u0011"'); +assertEq(JSON.stringify("\u0012"), '"\\u0012"'); +assertEq(JSON.stringify("\u0013"), '"\\u0013"'); +assertEq(JSON.stringify("\u0014"), '"\\u0014"'); +assertEq(JSON.stringify("\u0015"), '"\\u0015"'); +assertEq(JSON.stringify("\u0016"), '"\\u0016"'); +assertEq(JSON.stringify("\u0017"), '"\\u0017"'); +assertEq(JSON.stringify("\u0018"), '"\\u0018"'); +assertEq(JSON.stringify("\u0019"), '"\\u0019"'); +assertEq(JSON.stringify("\u001A"), '"\\u001a"'); +assertEq(JSON.stringify("\u001B"), '"\\u001b"'); +assertEq(JSON.stringify("\u001C"), '"\\u001c"'); +assertEq(JSON.stringify("\u001D"), '"\\u001d"'); +assertEq(JSON.stringify("\u001E"), '"\\u001e"'); +assertEq(JSON.stringify("\u001F"), '"\\u001f"'); +assertEq(JSON.stringify("\u0020"), '" "'); + +assertEq(JSON.stringify("\\u0000"), '"\\\\u0000"'); +assertEq(JSON.stringify("\\u0001"), '"\\\\u0001"'); +assertEq(JSON.stringify("\\u0002"), '"\\\\u0002"'); +assertEq(JSON.stringify("\\u0003"), '"\\\\u0003"'); +assertEq(JSON.stringify("\\u0004"), '"\\\\u0004"'); +assertEq(JSON.stringify("\\u0005"), '"\\\\u0005"'); +assertEq(JSON.stringify("\\u0006"), '"\\\\u0006"'); +assertEq(JSON.stringify("\\u0007"), '"\\\\u0007"'); +assertEq(JSON.stringify("\\u0008"), '"\\\\u0008"'); +assertEq(JSON.stringify("\\u0009"), '"\\\\u0009"'); +assertEq(JSON.stringify("\\u000A"), '"\\\\u000A"'); +assertEq(JSON.stringify("\\u000B"), '"\\\\u000B"'); +assertEq(JSON.stringify("\\u000C"), '"\\\\u000C"'); +assertEq(JSON.stringify("\\u000D"), '"\\\\u000D"'); +assertEq(JSON.stringify("\\u000E"), '"\\\\u000E"'); +assertEq(JSON.stringify("\\u000F"), '"\\\\u000F"'); +assertEq(JSON.stringify("\\u0010"), '"\\\\u0010"'); +assertEq(JSON.stringify("\\u0011"), '"\\\\u0011"'); +assertEq(JSON.stringify("\\u0012"), '"\\\\u0012"'); +assertEq(JSON.stringify("\\u0013"), '"\\\\u0013"'); +assertEq(JSON.stringify("\\u0014"), '"\\\\u0014"'); +assertEq(JSON.stringify("\\u0015"), '"\\\\u0015"'); +assertEq(JSON.stringify("\\u0016"), '"\\\\u0016"'); +assertEq(JSON.stringify("\\u0017"), '"\\\\u0017"'); +assertEq(JSON.stringify("\\u0018"), '"\\\\u0018"'); +assertEq(JSON.stringify("\\u0019"), '"\\\\u0019"'); +assertEq(JSON.stringify("\\u001A"), '"\\\\u001A"'); +assertEq(JSON.stringify("\\u001B"), '"\\\\u001B"'); +assertEq(JSON.stringify("\\u001C"), '"\\\\u001C"'); +assertEq(JSON.stringify("\\u001D"), '"\\\\u001D"'); +assertEq(JSON.stringify("\\u001E"), '"\\\\u001E"'); +assertEq(JSON.stringify("\\u001F"), '"\\\\u001F"'); +assertEq(JSON.stringify("\\u0020"), '"\\\\u0020"'); + + +assertEq(JSON.stringify("a\u0000"), '"a\\u0000"'); +assertEq(JSON.stringify("a\u0001"), '"a\\u0001"'); +assertEq(JSON.stringify("a\u0002"), '"a\\u0002"'); +assertEq(JSON.stringify("a\u0003"), '"a\\u0003"'); +assertEq(JSON.stringify("a\u0004"), '"a\\u0004"'); +assertEq(JSON.stringify("a\u0005"), '"a\\u0005"'); +assertEq(JSON.stringify("a\u0006"), '"a\\u0006"'); +assertEq(JSON.stringify("a\u0007"), '"a\\u0007"'); +assertEq(JSON.stringify("a\u0008"), '"a\\b"'); +assertEq(JSON.stringify("a\u0009"), '"a\\t"'); +assertEq(JSON.stringify("a\u000A"), '"a\\n"'); +assertEq(JSON.stringify("a\u000B"), '"a\\u000b"'); +assertEq(JSON.stringify("a\u000C"), '"a\\f"'); +assertEq(JSON.stringify("a\u000D"), '"a\\r"'); +assertEq(JSON.stringify("a\u000E"), '"a\\u000e"'); +assertEq(JSON.stringify("a\u000F"), '"a\\u000f"'); +assertEq(JSON.stringify("a\u0010"), '"a\\u0010"'); +assertEq(JSON.stringify("a\u0011"), '"a\\u0011"'); +assertEq(JSON.stringify("a\u0012"), '"a\\u0012"'); +assertEq(JSON.stringify("a\u0013"), '"a\\u0013"'); +assertEq(JSON.stringify("a\u0014"), '"a\\u0014"'); +assertEq(JSON.stringify("a\u0015"), '"a\\u0015"'); +assertEq(JSON.stringify("a\u0016"), '"a\\u0016"'); +assertEq(JSON.stringify("a\u0017"), '"a\\u0017"'); +assertEq(JSON.stringify("a\u0018"), '"a\\u0018"'); +assertEq(JSON.stringify("a\u0019"), '"a\\u0019"'); +assertEq(JSON.stringify("a\u001A"), '"a\\u001a"'); +assertEq(JSON.stringify("a\u001B"), '"a\\u001b"'); +assertEq(JSON.stringify("a\u001C"), '"a\\u001c"'); +assertEq(JSON.stringify("a\u001D"), '"a\\u001d"'); +assertEq(JSON.stringify("a\u001E"), '"a\\u001e"'); +assertEq(JSON.stringify("a\u001F"), '"a\\u001f"'); +assertEq(JSON.stringify("a\u0020"), '"a "'); + +assertEq(JSON.stringify("a\\u0000"), '"a\\\\u0000"'); +assertEq(JSON.stringify("a\\u0001"), '"a\\\\u0001"'); +assertEq(JSON.stringify("a\\u0002"), '"a\\\\u0002"'); +assertEq(JSON.stringify("a\\u0003"), '"a\\\\u0003"'); +assertEq(JSON.stringify("a\\u0004"), '"a\\\\u0004"'); +assertEq(JSON.stringify("a\\u0005"), '"a\\\\u0005"'); +assertEq(JSON.stringify("a\\u0006"), '"a\\\\u0006"'); +assertEq(JSON.stringify("a\\u0007"), '"a\\\\u0007"'); +assertEq(JSON.stringify("a\\u0008"), '"a\\\\u0008"'); +assertEq(JSON.stringify("a\\u0009"), '"a\\\\u0009"'); +assertEq(JSON.stringify("a\\u000A"), '"a\\\\u000A"'); +assertEq(JSON.stringify("a\\u000B"), '"a\\\\u000B"'); +assertEq(JSON.stringify("a\\u000C"), '"a\\\\u000C"'); +assertEq(JSON.stringify("a\\u000D"), '"a\\\\u000D"'); +assertEq(JSON.stringify("a\\u000E"), '"a\\\\u000E"'); +assertEq(JSON.stringify("a\\u000F"), '"a\\\\u000F"'); +assertEq(JSON.stringify("a\\u0010"), '"a\\\\u0010"'); +assertEq(JSON.stringify("a\\u0011"), '"a\\\\u0011"'); +assertEq(JSON.stringify("a\\u0012"), '"a\\\\u0012"'); +assertEq(JSON.stringify("a\\u0013"), '"a\\\\u0013"'); +assertEq(JSON.stringify("a\\u0014"), '"a\\\\u0014"'); +assertEq(JSON.stringify("a\\u0015"), '"a\\\\u0015"'); +assertEq(JSON.stringify("a\\u0016"), '"a\\\\u0016"'); +assertEq(JSON.stringify("a\\u0017"), '"a\\\\u0017"'); +assertEq(JSON.stringify("a\\u0018"), '"a\\\\u0018"'); +assertEq(JSON.stringify("a\\u0019"), '"a\\\\u0019"'); +assertEq(JSON.stringify("a\\u001A"), '"a\\\\u001A"'); +assertEq(JSON.stringify("a\\u001B"), '"a\\\\u001B"'); +assertEq(JSON.stringify("a\\u001C"), '"a\\\\u001C"'); +assertEq(JSON.stringify("a\\u001D"), '"a\\\\u001D"'); +assertEq(JSON.stringify("a\\u001E"), '"a\\\\u001E"'); +assertEq(JSON.stringify("a\\u001F"), '"a\\\\u001F"'); +assertEq(JSON.stringify("a\\u0020"), '"a\\\\u0020"'); + + +assertEq(JSON.stringify("\u0000Q"), '"\\u0000Q"'); +assertEq(JSON.stringify("\u0001Q"), '"\\u0001Q"'); +assertEq(JSON.stringify("\u0002Q"), '"\\u0002Q"'); +assertEq(JSON.stringify("\u0003Q"), '"\\u0003Q"'); +assertEq(JSON.stringify("\u0004Q"), '"\\u0004Q"'); +assertEq(JSON.stringify("\u0005Q"), '"\\u0005Q"'); +assertEq(JSON.stringify("\u0006Q"), '"\\u0006Q"'); +assertEq(JSON.stringify("\u0007Q"), '"\\u0007Q"'); +assertEq(JSON.stringify("\u0008Q"), '"\\bQ"'); +assertEq(JSON.stringify("\u0009Q"), '"\\tQ"'); +assertEq(JSON.stringify("\u000AQ"), '"\\nQ"'); +assertEq(JSON.stringify("\u000BQ"), '"\\u000bQ"'); +assertEq(JSON.stringify("\u000CQ"), '"\\fQ"'); +assertEq(JSON.stringify("\u000DQ"), '"\\rQ"'); +assertEq(JSON.stringify("\u000EQ"), '"\\u000eQ"'); +assertEq(JSON.stringify("\u000FQ"), '"\\u000fQ"'); +assertEq(JSON.stringify("\u0010Q"), '"\\u0010Q"'); +assertEq(JSON.stringify("\u0011Q"), '"\\u0011Q"'); +assertEq(JSON.stringify("\u0012Q"), '"\\u0012Q"'); +assertEq(JSON.stringify("\u0013Q"), '"\\u0013Q"'); +assertEq(JSON.stringify("\u0014Q"), '"\\u0014Q"'); +assertEq(JSON.stringify("\u0015Q"), '"\\u0015Q"'); +assertEq(JSON.stringify("\u0016Q"), '"\\u0016Q"'); +assertEq(JSON.stringify("\u0017Q"), '"\\u0017Q"'); +assertEq(JSON.stringify("\u0018Q"), '"\\u0018Q"'); +assertEq(JSON.stringify("\u0019Q"), '"\\u0019Q"'); +assertEq(JSON.stringify("\u001AQ"), '"\\u001aQ"'); +assertEq(JSON.stringify("\u001BQ"), '"\\u001bQ"'); +assertEq(JSON.stringify("\u001CQ"), '"\\u001cQ"'); +assertEq(JSON.stringify("\u001DQ"), '"\\u001dQ"'); +assertEq(JSON.stringify("\u001EQ"), '"\\u001eQ"'); +assertEq(JSON.stringify("\u001FQ"), '"\\u001fQ"'); +assertEq(JSON.stringify("\u0020Q"), '" Q"'); + +assertEq(JSON.stringify("\\u0000Q"), '"\\\\u0000Q"'); +assertEq(JSON.stringify("\\u0001Q"), '"\\\\u0001Q"'); +assertEq(JSON.stringify("\\u0002Q"), '"\\\\u0002Q"'); +assertEq(JSON.stringify("\\u0003Q"), '"\\\\u0003Q"'); +assertEq(JSON.stringify("\\u0004Q"), '"\\\\u0004Q"'); +assertEq(JSON.stringify("\\u0005Q"), '"\\\\u0005Q"'); +assertEq(JSON.stringify("\\u0006Q"), '"\\\\u0006Q"'); +assertEq(JSON.stringify("\\u0007Q"), '"\\\\u0007Q"'); +assertEq(JSON.stringify("\\u0008Q"), '"\\\\u0008Q"'); +assertEq(JSON.stringify("\\u0009Q"), '"\\\\u0009Q"'); +assertEq(JSON.stringify("\\u000AQ"), '"\\\\u000AQ"'); +assertEq(JSON.stringify("\\u000BQ"), '"\\\\u000BQ"'); +assertEq(JSON.stringify("\\u000CQ"), '"\\\\u000CQ"'); +assertEq(JSON.stringify("\\u000DQ"), '"\\\\u000DQ"'); +assertEq(JSON.stringify("\\u000EQ"), '"\\\\u000EQ"'); +assertEq(JSON.stringify("\\u000FQ"), '"\\\\u000FQ"'); +assertEq(JSON.stringify("\\u0010Q"), '"\\\\u0010Q"'); +assertEq(JSON.stringify("\\u0011Q"), '"\\\\u0011Q"'); +assertEq(JSON.stringify("\\u0012Q"), '"\\\\u0012Q"'); +assertEq(JSON.stringify("\\u0013Q"), '"\\\\u0013Q"'); +assertEq(JSON.stringify("\\u0014Q"), '"\\\\u0014Q"'); +assertEq(JSON.stringify("\\u0015Q"), '"\\\\u0015Q"'); +assertEq(JSON.stringify("\\u0016Q"), '"\\\\u0016Q"'); +assertEq(JSON.stringify("\\u0017Q"), '"\\\\u0017Q"'); +assertEq(JSON.stringify("\\u0018Q"), '"\\\\u0018Q"'); +assertEq(JSON.stringify("\\u0019Q"), '"\\\\u0019Q"'); +assertEq(JSON.stringify("\\u001AQ"), '"\\\\u001AQ"'); +assertEq(JSON.stringify("\\u001BQ"), '"\\\\u001BQ"'); +assertEq(JSON.stringify("\\u001CQ"), '"\\\\u001CQ"'); +assertEq(JSON.stringify("\\u001DQ"), '"\\\\u001DQ"'); +assertEq(JSON.stringify("\\u001EQ"), '"\\\\u001EQ"'); +assertEq(JSON.stringify("\\u001FQ"), '"\\\\u001FQ"'); +assertEq(JSON.stringify("\\u0020Q"), '"\\\\u0020Q"'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify-toJSON-arguments.js b/source/spidermonkey-tests/ecma_5/JSON/stringify-toJSON-arguments.js new file mode 100644 index 00000000..7c2013d5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify-toJSON-arguments.js @@ -0,0 +1,34 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'stringify-toJSON-arguments.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 584909; +var summary = "Arguments when an object's toJSON method is called"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + p: { + toJSON: function(key) + { + assertEq(arguments.length, 1); + assertEq(key, "p"); + return 17; + } + } + }; + +assertEq(JSON.stringify(obj), '{"p":17}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/stringify.js b/source/spidermonkey-tests/ecma_5/JSON/stringify.js new file mode 100644 index 00000000..1a7e9b15 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/stringify.js @@ -0,0 +1,84 @@ +function assertStringify(v, expect) +{ + assertEq(JSON.stringify(v), expect); +} + +assertStringify({}, "{}"); +assertStringify([], "[]"); +assertStringify({"foo":"bar"}, '{"foo":"bar"}'); +assertStringify({"null":null}, '{"null":null}'); +assertStringify({"five":5}, '{"five":5}'); +assertStringify({"five":5, "six":6}, '{"five":5,"six":6}'); +assertStringify({"x":{"y":"z"}}, '{"x":{"y":"z"}}'); +assertStringify({"w":{"x":{"y":"z"}}}, '{"w":{"x":{"y":"z"}}}'); +assertStringify([1,2,3], '[1,2,3]'); +assertStringify({"w":{"x":{"y":[1,2,3]}}}, '{"w":{"x":{"y":[1,2,3]}}}'); +assertStringify({"false":false}, '{"false":false}'); +assertStringify({"true":true}, '{"true":true}'); +assertStringify({"child has two members": {"this":"one", 2:"and this one"}}, + '{"child has two members":{"2":"and this one","this":"one"}}'); +assertStringify({"x":{"a":"b","c":{"y":"z"},"f":"g"}}, + '{"x":{"a":"b","c":{"y":"z"},"f":"g"}}'); +assertStringify({"x":[1,{"y":"z"},3]}, '{"x":[1,{"y":"z"},3]}'); +assertStringify([new String("hmm")], '["hmm"]'); +assertStringify([new Boolean(true)], '[true]'); +assertStringify([new Number(42)], '[42]'); +assertStringify([new Date(Date.UTC(1978, 8, 13, 12, 24, 34, 23))], + '["1978-09-13T12:24:34.023Z"]'); +assertStringify([1,,3], '[1,null,3]'); +assertStringify({"mm\"mm":"hmm"}, '{"mm\\\"mm":"hmm"}'); +assertStringify({"mm\"mm\"mm":"hmm"}, '{"mm\\\"mm\\\"mm":"hmm"}'); +assertStringify({'"':"hmm"}, '{"\\\"":"hmm"}'); +assertStringify({'\\':"hmm"}, '{"\\\\":"hmm"}'); +assertStringify({'mmm\\mmm':"hmm"}, '{"mmm\\\\mmm":"hmm"}'); +assertStringify({'mmm\\mmm\\mmm':"hmm"}, '{"mmm\\\\mmm\\\\mmm":"hmm"}'); +assertStringify({"mm\u000bmm":"hmm"}, '{"mm\\u000bmm":"hmm"}'); +assertStringify({"mm\u0000mm":"hmm"}, '{"mm\\u0000mm":"hmm"}'); + +var x = {"free":"variable"}; +assertStringify(x, '{"free":"variable"}'); +assertStringify({"y":x}, '{"y":{"free":"variable"}}'); + +// array prop +assertStringify({ a: [1,2,3] }, '{"a":[1,2,3]}'); + +assertStringify({"y": { foo: function(hmm) { return hmm; } } }, '{"y":{}}'); + +// test toJSON +var hmm = { toJSON: function() { return {"foo":"bar"} } }; +assertStringify({"hmm":hmm}, '{"hmm":{"foo":"bar"}}'); +assertStringify(hmm, '{"foo":"bar"}'); // on the root + +// toJSON on prototype +var Y = function() { + this.not = "there?"; + this.d = "e"; +}; +Y.prototype = { + not: "there?", + toJSON: function() { return {"foo":"bar"}} +}; +var y = new Y(); +assertStringify(y.toJSON(), '{"foo":"bar"}'); +assertStringify(y, '{"foo":"bar"}'); + +// return undefined from toJSON +assertStringify({"hmm": { toJSON: function() { return; } } }, '{}'); + +// array with named prop +var x = new Array(); +x[0] = 1; +x.foo = "bar"; +assertStringify(x, '[1]'); + +// prototype +var X = function() { this.a = "b" }; +X.prototype = { c: "d" }; +assertStringify(new X(), '{"a":"b"}'); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/JSON/trailing-comma.js b/source/spidermonkey-tests/ecma_5/JSON/trailing-comma.js new file mode 100644 index 00000000..0dc20e71 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/JSON/trailing-comma.js @@ -0,0 +1,32 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var gTestfile = 'trailing-comma.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 564621; +var summary = 'JSON.parse should reject {"a" : "b",} or [1,]'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +testJSON('[]', false); +testJSON('[1]', false); +testJSON('["a"]', false); +testJSON('{}', false); +testJSON('{"a":1}', false); +testJSON('{"a":"b"}', false); +testJSON('{"a":true}', false); +testJSON('[{}]', false); + +testJSON('[1,]', true); +testJSON('["a",]', true); +testJSON('{,}', true); +testJSON('{"a":1,}', true); +testJSON('{"a":"b",}', true); +testJSON('{"a":true,}', true); +testJSON('[{,}]', true); +testJSON('[[1,]]', true); +testJSON('[{"a":"b",}]', true); diff --git a/source/spidermonkey-tests/ecma_5/Number/15.7.4.2.js b/source/spidermonkey-tests/ecma_5/Number/15.7.4.2.js new file mode 100644 index 00000000..36443394 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Number/15.7.4.2.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(raisesException(TypeError)('Number.prototype.toString.call(true)'), true); +assertEq(raisesException(TypeError)('Number.prototype.toString.call("")'), true); +assertEq(raisesException(TypeError)('Number.prototype.toString.call({})'), true); +assertEq(raisesException(TypeError)('Number.prototype.toString.call(null)'), true); +assertEq(raisesException(TypeError)('Number.prototype.toString.call([])'), true); +assertEq(raisesException(TypeError)('Number.prototype.toString.call(undefined)'), true); +assertEq(raisesException(TypeError)('Number.prototype.toString.call(new Boolean(true))'), true); + +assertEq(completesNormally('Number.prototype.toString.call(42)'), true); +assertEq(completesNormally('Number.prototype.toString.call(new Number(42))'), true); + +function testAround(middle) +{ + var range = 260; + var low = middle - range/2; + for (var i = 0; i < range; ++i) + assertEq(low + i, parseInt(String(low + i))); +} + +testAround(-Math.pow(2,32)); +testAround(-Math.pow(2,16)); +testAround(0); +testAround(+Math.pow(2,16)); +testAround(+Math.pow(2,32)); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/Number/browser.js b/source/spidermonkey-tests/ecma_5/Number/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/Number/conversion-invalid-precision.js b/source/spidermonkey-tests/ecma_5/Number/conversion-invalid-precision.js new file mode 100644 index 00000000..76c3a94d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Number/conversion-invalid-precision.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommonn.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 795745; +var summary = + "Number.prototype.to* should throw a RangeError when passed a bad precision"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function test(method, prec) +{ + try + { + Number.prototype[method].call(0, prec); + throw "should have thrown"; + } + catch (e) + { + assertEq(e instanceof RangeError, true, + "expected RangeError for " + method + " with precision " + prec + + ", got " + e); + } +} + +test("toExponential", -32); +test("toFixed", -32); +test("toPrecision", -32); + +test("toExponential", 9999999); +test("toFixed", 9999999); +test("toPrecision", 9999999); + +test("toPrecision", 0); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/Number/defaultvalue.js b/source/spidermonkey-tests/ecma_5/Number/defaultvalue.js new file mode 100644 index 00000000..15bf0216 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Number/defaultvalue.js @@ -0,0 +1,170 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommonn.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 645464; +var summary = + "[[DefaultValue]] behavior wrong for Number with overridden valueOf/toString"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + + +// equality + +var n = new Number(); +assertEq(n == 0, true); + +var n2 = new Number(); +n2.valueOf = function() { return 17; }; +assertEq(n2 == 17, true); + +var n3 = new Number(); +n3.toString = function() { return 42; }; +assertEq(n3 == 0, true); + +function testEquality() +{ + var n = new Number(); + assertEq(n == 0, true); + + var n2 = new Number(); + n2.valueOf = function() { return 17; }; + assertEq(n2 == 17, true); + + var n3 = new Number(); + n3.toString = function() { return 42; }; + assertEq(n3 == 0, true); +} +testEquality(); + + +// addition of Number to number + +var n = new Number(); +assertEq(n + 5, 5); + +var n2 = new Number(); +n2.toString = function() { return 9; }; +assertEq(n2 + 3, 3); + +var n3 = new Number(); +n3.valueOf = function() { return 17; }; +assertEq(n3 + 5, 22); + +function testNumberAddition() +{ + var n = new Number(); + assertEq(n + 5, 5); + + var n2 = new Number(); + n2.toString = function() { return 9; }; + assertEq(n2 + 3, 3); + + var n3 = new Number(); + n3.valueOf = function() { return 17; }; + assertEq(n3 + 5, 22); +} +testNumberAddition(); + + +// addition of Number to Number + +var n = new Number(); +assertEq(n + n, 0); + +var n2 = new Number(); +n2.toString = function() { return 5; }; +assertEq(n2 + n2, 0); + +var n3 = new Number(); +n3.valueOf = function() { return 8.5; }; +assertEq(n3 + n3, 17); + +function testNonNumberAddition() +{ + var n = new Number(); + assertEq(n + n, 0); + + var n2 = new Number(); + n2.toString = function() { return 5; }; + assertEq(n2 + n2, 0); + + var n3 = new Number(); + n3.valueOf = function() { return 8.5; }; + assertEq(n3 + n3, 17); +} +testNonNumberAddition(); + + +// Number as bracketed property name + +var obj = { 0: 17, 8: 42, 9: 8675309 }; + +var n = new Number(); +assertEq(obj[n], 17); + +var n2 = new Number(); +n2.valueOf = function() { return 8; } +assertEq(obj[n2], 17); + +var n3 = new Number(); +n3.toString = function() { return 9; }; +assertEq(obj[n3], 8675309); + +function testPropertyNameToNumber() +{ + var obj = { 0: 17, 8: 42, 9: 8675309 }; + + var n = new Number(); + assertEq(obj[n], 17); + + var n2 = new Number(); + n2.valueOf = function() { return 8; } + assertEq(obj[n2], 17); + + var n3 = new Number(); + n3.toString = function() { return 9; }; + assertEq(obj[n3], 8675309); +} +testPropertyNameToNumber(); + + +// Number as property name with |in| operator + +var n = new Number(); +assertEq(n in { 0: 5 }, true); + +var n2 = new Number(); +n2.toString = function() { return "baz"; }; +assertEq(n2 in { baz: 42 }, true); + +var n3 = new Number(); +n3.valueOf = function() { return "quux"; }; +assertEq(n3 in { 0: 17 }, true); + +function testInOperatorName() +{ + var n = new Number(); + assertEq(n in { 0: 5 }, true); + + var n2 = new Number(); + n2.toString = function() { return "baz"; }; + assertEq(n2 in { baz: 42 }, true); + + var n3 = new Number(); + n3.valueOf = function() { return "quux"; }; + assertEq(n3 in { 0: 17 }, true); +} +testInOperatorName(); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Number/shell.js b/source/spidermonkey-tests/ecma_5/Number/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/Number/toString-radix-handling.js b/source/spidermonkey-tests/ecma_5/Number/toString-radix-handling.js new file mode 100644 index 00000000..dd91675a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Number/toString-radix-handling.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommonn.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 647385; +var summary = + "Number.prototype.toString should use ToInteger on the radix and should " + + "throw a RangeError if the radix is bad"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function test(r) +{ + try + { + 5..toString(r); + throw "should have thrown"; + } + catch (e) + { + assertEq(e instanceof RangeError, true, "expected a RangeError, got " + e); + } +} +test(Math.pow(2, 32) + 10); +test(55); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Number/tonumber-string-hex.js b/source/spidermonkey-tests/ecma_5/Number/tonumber-string-hex.js new file mode 100644 index 00000000..ed1e9b9d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Number/tonumber-string-hex.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommonn.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 872853; +var summary = 'Various tests of ToNumber(string), particularly +"0x" being NaN'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(+"0x", NaN); +assertEq(+"\t0x", NaN); +assertEq(+"0x\n", NaN); +assertEq(+"\n0x\t", NaN); +assertEq(+"0x0", 0); +assertEq(+"0xa", 10); +assertEq(+"0xff", 255); +assertEq(+"-0x", NaN); +assertEq(+"-0xa", NaN); +assertEq(+"-0xff", NaN); +assertEq(+"0xInfinity", NaN); +assertEq(+"+Infinity", Infinity); +assertEq(+"-Infinity", -Infinity); +assertEq(+"\t+Infinity", Infinity); +assertEq(+"-Infinity\n", -Infinity); +assertEq(+"+ Infinity", NaN); +assertEq(+"- Infinity", NaN); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.12.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.12.js new file mode 100644 index 00000000..00593a24 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.12.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Object.isFrozen */ + +assertEq(Object.isFrozen({}), false); + +assertEq(Object.isFrozen(Object.preventExtensions({})), true); + +var o = Object.defineProperty({}, 'x', { writable:true, configurable:true }); +Object.preventExtensions(o); +assertEq(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:false, configurable:true }); +Object.preventExtensions(o); +assertEq(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:true, configurable:false }); +Object.preventExtensions(o); +assertEq(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:false, configurable:false }); +assertEq(Object.isFrozen(o), false); + +var o = Object.defineProperty({}, 'x', { writable:false, configurable:false }); +Object.preventExtensions(o); +assertEq(Object.isFrozen(o), true); + +var o = Object.defineProperties({}, { x: { writable:true, configurable:true }, + y: { writable:false, configurable:false } }); +Object.preventExtensions(o); +assertEq(Object.isFrozen(o), false); + +var o = Object.defineProperties({}, { x: { writable:false, configurable:false }, + y: { writable:true, configurable:true } }); +Object.preventExtensions(o); +assertEq(Object.isFrozen(o), false); + +var o = Object.defineProperties({}, { x: { writable:true, configurable:true }, + y: { writable:true, configurable:true } }); +Object.preventExtensions(o); +assertEq(Object.isFrozen(o), false); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.14-01.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.14-01.js new file mode 100644 index 00000000..81ab3fe3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.14-01.js @@ -0,0 +1,92 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 307791; +var summary = 'ES5 Object.keys(O)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +function arraysEqual(a1, a2) +{ + return a1.length === a2.length && + a1.every(function(v, i) { return v === a2[i]; }); +} + +/************** + * BEGIN TEST * + **************/ + +assertEq(Object.keys.length, 1); + +var o, keys; + +o = { a: 3, b: 2 }; +keys = Object.keys(o); +assertEq(arraysEqual(keys, ["a", "b"]), true, + "" + keys); + +o = { get a() { return 17; }, b: 2 }; +keys = Object.keys(o), +assertEq(arraysEqual(keys, ["a", "b"]), true, + "" + keys); + +o = { __iterator__: function() { return Iterator({a: 2, b: 3}); } }; +keys = Object.keys(o); +assertEq(arraysEqual(keys, ["__iterator__"]), true, + "" + keys); + +o = { a: 1, b: 2 }; +delete o.a; +o.a = 3; +keys = Object.keys(o); +assertEq(arraysEqual(keys, ["b", "a"]), true, + "" + keys); + +o = [0, 1, 2]; +keys = Object.keys(o); +assertEq(arraysEqual(keys, ["0", "1", "2"]), true, + "" + keys); + +o = /./.exec("abc"); +keys = Object.keys(o); +assertEq(arraysEqual(keys, ["0", "index", "input"]), true, + "" + keys); + +o = { a: 1, b: 2, c: 3 }; +delete o.b; +o.b = 5; +keys = Object.keys(o); +assertEq(arraysEqual(keys, ["a", "c", "b"]), true, + "" + keys); + +function f() { } +f.prototype.p = 1; +o = new f(); +o.g = 1; +keys = Object.keys(o); +assertEq(arraysEqual(keys, ["g"]), true, + "" + keys); + +if (typeof Namespace !== "undefined" && typeof QName !== "undefined") +{ + var o2 = {}; + var qn = new QName(new Namespace("foo"), "v"); + o2.f = 1; + o2[qn] = 3; + o2.baz = 4; + var keys2 = Object.keys(o2); + assertEq(arraysEqual(keys2, ["f", "foo::v", "baz"]), true, + "" + keys2); +} + +/******************************************************************************/ + +reportCompare(expect, actual, "Object.keys"); + +printStatus("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.3-01.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.3-01.js new file mode 100644 index 00000000..c9b9df39 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.3-01.js @@ -0,0 +1,329 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 505587; +var summary = 'ES5 Object.getOwnPropertyDescriptor(O)'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/************** + * BEGIN TEST * + **************/ + +function assertEq(a, e, msg) +{ + function SameValue(v1, v2) + { + if (v1 === 0 && v2 === 0) + return 1 / v1 === 1 / v2; + if (v1 !== v1 && v2 !== v2) + return true; + return v1 === v2; + } + + if (!SameValue(a, e)) + { + var stack = new Error().stack || ""; + throw "Assertion failed: got " + a + ", expected " + e + + (msg ? ": " + msg : "") + + (stack ? "\nStack:\n" + stack : ""); + } +} + +function expectDescriptor(actual, expected) +{ + if (actual === undefined && expected === undefined) + return; + + assertEq(typeof actual, "object"); + assertEq(typeof expected, "object"); + + var fields = + { + value: true, + get: true, + set: true, + enumerable: true, + writable: true, + configurable: true + }; + for (var p in fields) + assertEq(actual.hasOwnProperty(p), expected.hasOwnProperty(p), p); + for (var p in actual) + assertEq(p in fields, true, p); + for (var p in expected) + assertEq(p in fields, true, p); + + assertEq(actual.hasOwnProperty("value"), actual.hasOwnProperty("writable")); + assertEq(actual.hasOwnProperty("get"), actual.hasOwnProperty("set")); + if (actual.hasOwnProperty("value")) + { + assertEq(actual.value, expected.value); + assertEq(actual.writable, expected.writable); + } + else + { + assertEq(actual.get, expected.get); + assertEq(actual.set, expected.set); + } + + assertEq(actual.hasOwnProperty("enumerable"), true); + assertEq(actual.hasOwnProperty("configurable"), true); + assertEq(actual.enumerable, expected.enumerable); + assertEq(actual.configurable, expected.configurable); +} + +function adjustDescriptorField(o, actual, expect, field) +{ + assertEq(field === "get" || field === "set", true); + var lookup = "__lookup" + (field === "get" ? "G" : "S") + "etter"; + if (typeof o[lookup] === "function") + expect[field] = o[lookup](field); + else + actual[field] = expect[field] = undefined; /* censor if we can't lookup */ +} + +/******************************************************************************/ + +var o, pd, expected; + +o = { get x() { return 12; } }; + +pd = Object.getOwnPropertyDescriptor(o, "x"); +expected = + { + set: undefined, + enumerable: true, + configurable: true + }; +adjustDescriptorField(o, pd, expected, "get"); + +expectDescriptor(pd, expected); + +/******************************************************************************/ + +var o2; + +o = Object.create(Object.prototype, { x: {get: function () { return 12; } } }); + +pd = Object.getOwnPropertyDescriptor(o, "x"); +expected = + { + set: undefined, + enumerable: false, + configurable: false + }; +adjustDescriptorField(o, pd, expected, "get"); + +expectDescriptor(pd, expected); + +o2 = Object.create(o); +assertEq(Object.getOwnPropertyDescriptor(o2, "x"), undefined); + +/******************************************************************************/ + +o = {}; +o.b = 12; + +pd = Object.getOwnPropertyDescriptor(o, "b"); +expected = + { + value: 12, + writable: true, + enumerable: true, + configurable: true + }; +expectDescriptor(pd, expected); + +/******************************************************************************/ + +o = { get y() { return 17; }, set y(z) { } }; + +pd = Object.getOwnPropertyDescriptor(o, "y"); +expected = + { + enumerable: true, + configurable: true + }; +adjustDescriptorField(o, pd, expected, "get"); +adjustDescriptorField(o, pd, expected, "set"); + +expectDescriptor(pd, expected); + +/******************************************************************************/ + +o = {}; + +pd = Object.getOwnPropertyDescriptor(o, "absent"); + +expectDescriptor(pd, undefined); + +/******************************************************************************/ + +pd = Object.getOwnPropertyDescriptor([], "length"); +expected = + { + value: 0, + writable: true, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor([1], "length"); +expected = + { + value: 1, + writable: true, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor([1,], "length"); +expected = + { + value: 1, + writable: true, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor([1,,], "length"); +expected = + { + value: 2, + writable: true, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +/******************************************************************************/ + +pd = Object.getOwnPropertyDescriptor(new String("foobar"), "length"); +expected = + { + value: 6, + writable: false, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +/******************************************************************************/ + +function foo() { } +o = foo; + +pd = Object.getOwnPropertyDescriptor(o, "length"); +expected = + { + value: 0, + writable: false, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor(o, "prototype"); +expected = + { + value: foo.prototype, + writable: true, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +/******************************************************************************/ + +pd = Object.getOwnPropertyDescriptor(Function, "length"); +expected = + { + value: 1, + writable: false, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +/******************************************************************************/ + +o = /foo/im; + +pd = Object.getOwnPropertyDescriptor(o, "source"); +expected = + { + value: "foo", + writable: false, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor(o, "global"); +expected = + { + value: false, + writable: false, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor(o, "ignoreCase"); +expected = + { + value: true, + writable: false, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor(o, "multiline"); +expected = + { + value: true, + writable: false, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +pd = Object.getOwnPropertyDescriptor(o, "lastIndex"); +expected = + { + value: 0, + writable: true, + enumerable: false, + configurable: false + }; + +expectDescriptor(pd, expected); + +/******************************************************************************/ + +reportCompare(expect, actual, "Object.getOwnPropertyDescriptor"); + +printStatus("All tests passed"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-01.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-01.js new file mode 100644 index 00000000..3a84f0b6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-01.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = + 'Object.getOwnPropertyNames should play nicely with enumerator caching'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (var p in JSON); +var names = Object.getOwnPropertyNames(JSON); +assertEq(names.length >= 2, true, + "wrong number of property names? [" + names + "]"); +assertEq(names.indexOf("parse") >= 0, true); +assertEq(names.indexOf("stringify") >= 0, true); + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-02.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-02.js new file mode 100644 index 00000000..b5e0842c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-02.js @@ -0,0 +1,52 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = 'Object.getOwnPropertyNames: array objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var a, names, expected; + +function arraysEqual(a1, a2) +{ + return a1.length === a2.length && + a1.every(function(v, i) { return v === a2[i]; }); +} + + +a = [0, 1, 2]; + +names = Object.getOwnPropertyNames(a).sort(); +expected = ["0", "1", "2", "length"].sort(); + +a = [1, , , 7]; +a.p = 2; +Object.defineProperty(a, "q", { value: 42, enumerable: false }); + +names = Object.getOwnPropertyNames(a).sort(); +expected = ["0", "3", "p", "q", "length"].sort(); +assertEq(arraysEqual(names, expected), true); + + +a = []; + +names = Object.getOwnPropertyNames(a).sort(); +expected = ["length"]; +assertEq(arraysEqual(names, expected), true); + + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-03.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-03.js new file mode 100644 index 00000000..55dcc139 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-03.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = 'Object.getOwnPropertyNames: function objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function two(a, b) { } + +assertEq(Object.getOwnPropertyNames(two).indexOf("length") >= 0, true); + +var bound0 = Function.prototype.bind + ? two.bind("this") + : function two(a, b) { }; + +assertEq(Object.getOwnPropertyNames(bound0).indexOf("length") >= 0, true); +assertEq(bound0.length, 2); + +var bound1 = Function.prototype.bind + ? two.bind("this", 1) + : function one(a) { }; + +assertEq(Object.getOwnPropertyNames(bound1).indexOf("length") >= 0, true); +assertEq(bound1.length, 1); + +var bound2 = Function.prototype.bind + ? two.bind("this", 1, 2) + : function zero() { }; + +assertEq(Object.getOwnPropertyNames(bound2).indexOf("length") >= 0, true); +assertEq(bound2.length, 0); + +var bound3 = Function.prototype.bind + ? two.bind("this", 1, 2, 3) + : function zero() { }; + +assertEq(Object.getOwnPropertyNames(bound3).indexOf("length") >= 0, true); +assertEq(bound3.length, 0); + + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-04.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-04.js new file mode 100644 index 00000000..378a52e7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.4-04.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 518663; +var summary = 'Object.getOwnPropertyNames: regular expression objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var actual = Object.getOwnPropertyNames(/a/); +var expected = ["lastIndex", "source", "global", "ignoreCase", "multiline"]; + +for (var i = 0; i < expected.length; i++) +{ + reportCompare(actual.indexOf(expected[i]) >= 0, true, + expected[i] + " should be a property name on a RegExp"); +} + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.5-01.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.5-01.js new file mode 100644 index 00000000..70cfd64f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.5-01.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 492840; +var summary = 'ES5 Object.create(O [, Properties])'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq("create" in Object, true); +assertEq(Object.create.length, 2); + +var o, desc, props, proto; + +o = Object.create(null); +assertEq(Object.getPrototypeOf(o), null, "bad null-proto"); + +o = Object.create(null, { a: { value: 17, enumerable: false } }); +assertEq(Object.getPrototypeOf(o), null, "bad null-proto"); +assertEq("a" in o, true); +desc = Object.getOwnPropertyDescriptor(o, "a"); +assertEq(desc !== undefined, true, "no descriptor?"); +assertEq(desc.value, 17); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq(desc.writable, false); + +props = Object.create({ bar: 15 }); +Object.defineProperty(props, "foo", { enumerable: false, value: 42 }); +proto = { baz: 12 }; +o = Object.create(proto, props); +assertEq(Object.getPrototypeOf(o), proto); +assertEq(Object.getOwnPropertyDescriptor(o, "foo"), undefined); +assertEq("foo" in o, false); +assertEq(Object.getOwnPropertyDescriptor(o, "bar"), undefined); +assertEq("bar" in o, false); +assertEq(Object.getOwnPropertyDescriptor(o, "baz"), undefined); +assertEq(o.baz, 12); +assertEq(o.hasOwnProperty("baz"), false); + +try { + var actual = + Object.create(Object.create({}, + { boom: { get: function() { return "base"; }}}), + { boom: { get: function() { return "overridden"; }}}).boom +} catch (e) { +} +assertEq(actual, "overridden"); + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-define-over-method.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-define-over-method.js new file mode 100644 index 00000000..1cc9e13e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-define-over-method.js @@ -0,0 +1,24 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 568786; +var summary = + 'Do not assert: !(attrs & (JSPROP_GETTER | JSPROP_SETTER)) with ' + + 'Object.defineProperty'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var o = { x: function(){} }; +Object.defineProperty(o, "x", { get: function(){} }); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-01-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-01-of-32.js new file mode 100644 index 00000000..d5ef02d0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-01-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(1, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-02-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-02-of-32.js new file mode 100644 index 00000000..15ec6da1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-02-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(2, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-03-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-03-of-32.js new file mode 100644 index 00000000..ee1c71e9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-03-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(3, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-04-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-04-of-32.js new file mode 100644 index 00000000..b461f64c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-04-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(4, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-05-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-05-of-32.js new file mode 100644 index 00000000..710331f6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-05-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(5, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-06-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-06-of-32.js new file mode 100644 index 00000000..930ead6b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-06-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(6, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-07-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-07-of-32.js new file mode 100644 index 00000000..bdf5dbcf --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-07-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(7, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-08-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-08-of-32.js new file mode 100644 index 00000000..495d7b12 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-08-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(8, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-09-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-09-of-32.js new file mode 100644 index 00000000..d957644e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-09-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(9, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-10-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-10-of-32.js new file mode 100644 index 00000000..dcb14794 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-10-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(10, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-11-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-11-of-32.js new file mode 100644 index 00000000..d01dae49 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-11-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(11, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-12-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-12-of-32.js new file mode 100644 index 00000000..dc3c1e90 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-12-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(12, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-13-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-13-of-32.js new file mode 100644 index 00000000..9f718ecd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-13-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(13, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-14-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-14-of-32.js new file mode 100644 index 00000000..97648ec0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-14-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(14, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-15-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-15-of-32.js new file mode 100644 index 00000000..8c2fe764 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-15-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(15, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-16-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-16-of-32.js new file mode 100644 index 00000000..dfdd97a2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-16-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(16, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-17-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-17-of-32.js new file mode 100644 index 00000000..ca8d6724 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-17-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(17, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-18-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-18-of-32.js new file mode 100644 index 00000000..34434cb2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-18-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(18, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-19-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-19-of-32.js new file mode 100644 index 00000000..1f68fc15 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-19-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(19, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-20-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-20-of-32.js new file mode 100644 index 00000000..c7aef96e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-20-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(20, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-21-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-21-of-32.js new file mode 100644 index 00000000..67861407 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-21-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(21, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-22-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-22-of-32.js new file mode 100644 index 00000000..bfda5267 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-22-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(22, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-23-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-23-of-32.js new file mode 100644 index 00000000..1f1b3e21 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-23-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(23, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-24-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-24-of-32.js new file mode 100644 index 00000000..0e553eef --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-24-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(24, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-25-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-25-of-32.js new file mode 100644 index 00000000..1c013a99 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-25-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(25, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-26-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-26-of-32.js new file mode 100644 index 00000000..51fad26b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-26-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(26, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-27-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-27-of-32.js new file mode 100644 index 00000000..6ff4b046 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-27-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(27, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-28-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-28-of-32.js new file mode 100644 index 00000000..27f1137d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-28-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(28, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-29-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-29-of-32.js new file mode 100644 index 00000000..185e92fe --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-29-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(29, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-30-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-30-of-32.js new file mode 100644 index 00000000..6c297b36 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-30-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(30, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-31-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-31-of-32.js new file mode 100644 index 00000000..b827b30c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-31-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(31, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-32-of-32.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-32-of-32.js new file mode 100644 index 00000000..5c44cff0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-dictionary-redefinition-32-of-32.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runDictionaryPropertyPresentTestsFraction(32, 32); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-function-length.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-function-length.js new file mode 100644 index 00000000..bc6475c1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-function-length.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = 'ES5 Object.defineProperty(O, P, Attributes): Function.length'; + +print(BUGNUMBER + ": " + summary); + +load("ecma_5/Object/defineProperty-setup.js"); + +/************** + * BEGIN TEST * + **************/ + +try +{ + new TestRunner().runFunctionLengthTests(); +} +catch (e) +{ + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-1-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-1-of-8.js new file mode 100644 index 00000000..fc1d0fca --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-1-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(1, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-2-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-2-of-8.js new file mode 100644 index 00000000..4023e160 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-2-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(2, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-3-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-3-of-8.js new file mode 100644 index 00000000..38b1d287 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-3-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(3, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-4-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-4-of-8.js new file mode 100644 index 00000000..f3abac42 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-4-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(4, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-5-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-5-of-8.js new file mode 100644 index 00000000..cce2114f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-5-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(5, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-6-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-6-of-8.js new file mode 100644 index 00000000..16c231c7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-6-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(6, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-7-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-7-of-8.js new file mode 100644 index 00000000..bf3b2b49 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-7-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(7, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-8-of-8.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-8-of-8.js new file mode 100644 index 00000000..7fa0b807 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-middle-redefinition-8-of-8.js @@ -0,0 +1,6 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +load("ecma_5/Object/defineProperty-setup.js"); +runNonTerminalPropertyPresentTestsFraction(8, 8); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-miscellaneous.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-miscellaneous.js new file mode 100644 index 00000000..9f671c52 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-miscellaneous.js @@ -0,0 +1,74 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = 'ES5 Object.defineProperty(O, P, Attributes)'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var o = []; +Object.defineProperty(o, 0, { value: 17 }); +var desc = Object.getOwnPropertyDescriptor(o, 0); +assertEq(desc !== undefined, true); +assertEq(desc.value, 17); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq(desc.writable, false); + +desc = Object.getOwnPropertyDescriptor(o, "length"); +assertEq(desc !== undefined, true); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq(desc.writable, true); +assertEq(desc.value, 1); +assertEq(o.length, 1); + +Object.defineProperty(o, "foobar", + { value: 42, enumerable: false, configurable: true }); +assertEq(o.foobar, 42); +desc = Object.getOwnPropertyDescriptor(o, "foobar"); +assertEq(desc !== undefined, true); +assertEq(desc.value, 42); +assertEq(desc.configurable, true); +assertEq(desc.enumerable, false); +assertEq(desc.writable, false); + +var called = false; +o = { set x(a) { called = true; } }; +Object.defineProperty(o, "x", { get: function() { return "get"; } }); +desc = Object.getOwnPropertyDescriptor(o, "x"); +assertEq("set" in desc, true); +assertEq("get" in desc, true); +assertEq(called, false); +o.x = 13; +assertEq(called, true); + +var toSource = Object.prototype.toSource || function() { }; +toSource.call(o); // a test for this not crashing + +var called = false; +var o = + Object.defineProperty({}, "foo", + { get: function() { return 17; }, + set: function(v) { called = true; } }); + +assertEq(o.foo, 17); +o.foo = 42; +assertEq(called, true); + +/* + * XXX need tests for Object.defineProperty(array, "length", { ... }) when we + * support it! + */ + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-new-definition.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-new-definition.js new file mode 100644 index 00000000..ce5c3883 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-new-definition.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = 'ES5 Object.defineProperty(O, P, Attributes): new definition'; + +print(BUGNUMBER + ": " + summary); + +load("ecma_5/Object/defineProperty-setup.js"); + +/************** + * BEGIN TEST * + **************/ + +try +{ + new TestRunner().runNotPresentTests(); +} +catch (e) +{ + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-1-of-4.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-1-of-4.js new file mode 100644 index 00000000..55c11744 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-1-of-4.js @@ -0,0 +1,39 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var PART = 1, PARTS = 4; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = + 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' + + PART + ' of ' + PARTS; + +print(BUGNUMBER + ": " + summary); + +load("ecma_5/Object/defineProperty-setup.js"); + +/************** + * BEGIN TEST * + **************/ + +try +{ + new TestRunner().runPropertyPresentTestsFraction(PART, PARTS); +} +catch (e) +{ + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-2-of-4.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-2-of-4.js new file mode 100644 index 00000000..ef74b558 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-2-of-4.js @@ -0,0 +1,39 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var PART = 2, PARTS = 4; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = + 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' + + PART + ' of ' + PARTS; + +print(BUGNUMBER + ": " + summary); + +load("ecma_5/Object/defineProperty-setup.js"); + +/************** + * BEGIN TEST * + **************/ + +try +{ + new TestRunner().runPropertyPresentTestsFraction(PART, PARTS); +} +catch (e) +{ + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-3-of-4.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-3-of-4.js new file mode 100644 index 00000000..b0c58f3c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-3-of-4.js @@ -0,0 +1,39 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var PART = 3, PARTS = 4; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = + 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' + + PART + ' of ' + PARTS; + +print(BUGNUMBER + ": " + summary); + +load("ecma_5/Object/defineProperty-setup.js"); + +/************** + * BEGIN TEST * + **************/ + +try +{ + new TestRunner().runPropertyPresentTestsFraction(PART, PARTS); +} +catch (e) +{ + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-4-of-4.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-4-of-4.js new file mode 100644 index 00000000..09994df4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.6-redefinition-4-of-4.js @@ -0,0 +1,39 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses shell load() function +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var PART = 4, PARTS = 4; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = + 'ES5 Object.defineProperty(O, P, Attributes): redefinition ' + + PART + ' of ' + PARTS; + +print(BUGNUMBER + ": " + summary); + +load("ecma_5/Object/defineProperty-setup.js"); + +/************** + * BEGIN TEST * + **************/ + +try +{ + new TestRunner().runPropertyPresentTestsFraction(PART, PARTS); +} +catch (e) +{ + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.7-01.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.7-01.js new file mode 100644 index 00000000..5220e148 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.7-01.js @@ -0,0 +1,137 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 430133; +var summary = 'ES5 Object.defineProperties(O, Properties)'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq("defineProperties" in Object, true); +assertEq(Object.defineProperties.length, 2); + +var o, props, desc, passed; + +o = {}; +props = + { + a: { value: 17, enumerable: true, configurable: true, writable: true }, + b: { value: 42, enumerable: false, configurable: false, writable: false } + }; +Object.defineProperties(o, props); +assertEq("a" in o, true); +assertEq("b" in o, true); +desc = Object.getOwnPropertyDescriptor(o, "a"); +assertEq(desc.value, 17); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, true); +assertEq(desc.writable, true); +desc = Object.getOwnPropertyDescriptor(o, "b"); +assertEq(desc.value, 42); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq(desc.writable, false); + +props = + { + c: { value: NaN, enumerable: false, configurable: true, writable: true }, + b: { value: 44 } + }; +var error = "before"; +try +{ + Object.defineProperties(o, props); + error = "no exception thrown"; +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assertEq(error, "typeerror", "didn't throw or threw wrongly"); +assertEq("c" in o, true, "new property added"); +assertEq(o.b, 42, "old property value preserved"); + +function Properties() { } +Properties.prototype = { b: { value: 42, enumerable: true } }; +props = new Properties(); +Object.defineProperty(props, "a", { enumerable: false }); +o = {}; +Object.defineProperties(o, props); +assertEq("a" in o, false); +assertEq(Object.getOwnPropertyDescriptor(o, "a"), undefined, + "Object.defineProperties(O, Properties) should only use enumerable " + + "properties on Properties"); +assertEq("b" in o, false); +assertEq(Object.getOwnPropertyDescriptor(o, "b"), undefined, + "Object.defineProperties(O, Properties) should only use enumerable " + + "properties directly on Properties"); + +Number.prototype.foo = { value: 17, enumerable: true }; +Boolean.prototype.bar = { value: 8675309, enumerable: true }; +String.prototype.quux = { value: "Are you HAPPY yet?", enumerable: true }; +o = {}; +Object.defineProperties(o, 5); // ToObject only throws for null/undefined +assertEq("foo" in o, false, "foo is not an enumerable own property"); +Object.defineProperties(o, false); +assertEq("bar" in o, false, "bar is not an enumerable own property"); +Object.defineProperties(o, ""); +assertEq("quux" in o, false, "quux is not an enumerable own property"); + +error = "before"; +try +{ + Object.defineProperties(o, "1"); +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assertEq(error, "typeerror", + "should throw on Properties == '1' due to '1'[0] not being a " + + "property descriptor"); + +error = "before"; +try +{ + Object.defineProperties(o, null); +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assertEq(error, "typeerror", "should throw on Properties == null"); + +error = "before"; +try +{ + Object.defineProperties(o, undefined); +} +catch (e) +{ + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; +} +assertEq(error, "typeerror", "should throw on Properties == undefined"); + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/15.2.3.9.js b/source/spidermonkey-tests/ecma_5/Object/15.2.3.9.js new file mode 100644 index 00000000..c73437fa --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/15.2.3.9.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Object.freeze */ + +function getme() { return 42; }; +function setme(x) { }; + +var properties = { all: { value:1, writable:true, configurable:true, enumerable: true }, + readOnly: { value:2, writable:false, configurable:true, enumerable: true }, + nonConfig: { value:3, writable:true, configurable:false, enumerable: true }, + none: { value:4, writable:false, configurable:false, enumerable: true }, + getter: { get: getme, configurable:false, enumerable: true }, + setter: { set: setme, configurable:false, enumerable: true }, + getandset: { get: getme, set: setme, configurable:false, enumerable: true } + }; +var o = Object.defineProperties({}, properties); + +Object.freeze(o); + +function getPropertyOf(obj) { + return function (prop) { + return Object.getOwnPropertyDescriptor(obj, prop); + }; +}; + +assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'all'), + { value: 1, writable:false, enumerable:true, configurable:false }), + true); +assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'readOnly'), + { value: 2, writable:false, enumerable:true, configurable:false }), + true); +assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'nonConfig'), + { value: 3, writable:false, enumerable:true, configurable:false }), + true); +assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'none'), + { value: 4, writable:false, enumerable:true, configurable:false }), + true); +assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'getter'), + { get: getme, set: (void 0), enumerable:true, configurable:false }), + true); +assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'setter'), + { set: setme, get: (void 0), enumerable:true, configurable:false }), + true); +assertEq(deepEqual(Object.getOwnPropertyDescriptor(o, 'getandset'), + { get: getme, set: setme, enumerable:true, configurable:false }), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/Object/add-property-non-extensible.js b/source/spidermonkey-tests/ecma_5/Object/add-property-non-extensible.js new file mode 100644 index 00000000..2089a567 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/add-property-non-extensible.js @@ -0,0 +1,118 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +var gTestfile = 'add-property-non-extensible.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 602144; +var summary = + 'Properly method-compile attempted addition of properties to ' + + 'non-extensible objects'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// No property + +var o1 = {}; +for (var i = 0; i < 5; i++) + o1.a = 3; +assertEq(o1.a, 3); + +var o2 = Object.preventExtensions({}); +for (var i = 0; i < 5; i++) + o2.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o2, "a"), undefined); + +var o3 = Object.seal({}); +for (var i = 0; i < 5; i++) + o3.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o3, "a"), undefined); + +var o4 = Object.freeze({}); +for (var i = 0; i < 5; i++) + o4.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o4, "a"), undefined); + + +// Has property + +var o5 = { a: 2 }; +for (var i = 0; i < 5; i++) + o5.a = 3; +assertEq(o5.a, 3); + +var o6 = Object.preventExtensions({ a: 2 }); +for (var i = 0; i < 5; i++) + o6.a = 3; +assertEq(o6.a, 3); + +var o7 = Object.seal({ a: 2 }); +for (var i = 0; i < 5; i++) + o7.a = 3; +assertEq(o7.a, 3); + +var o8 = Object.freeze({ a: 2 }); +for (var i = 0; i < 5; i++) + o8.a = 3; +assertEq(o8.a, 2); + + +// Extensible, hit up the prototype chain + +var o9 = Object.create({ a: 2 }); +for (var i = 0; i < 5; i++) + o9.a = 3; +assertEq(o9.a, 3); + +var o10 = Object.create(Object.preventExtensions({ a: 2 })); +for (var i = 0; i < 5; i++) + o10.a = 3; +assertEq(o10.a, 3); + +var o11 = Object.create(Object.seal({ a: 2 })); +for (var i = 0; i < 5; i++) + o11.a = 3; +assertEq(o11.a, 3); + +var o12 = Object.create(Object.freeze({ a: 2 })); +for (var i = 0; i < 5; i++) + o12.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o12, "a"), undefined); + + +// Not extensible, hit up the prototype chain + +var o13 = Object.preventExtensions(Object.create({ a: 2 })); +for (var i = 0; i < 5; i++) + o13.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o13, "a"), undefined); + +var o14 = + Object.preventExtensions(Object.create(Object.preventExtensions({ a: 2 }))); +for (var i = 0; i < 5; i++) + o14.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o14, "a"), undefined); + +var o15 = Object.preventExtensions(Object.create(Object.seal({ a: 2 }))); +for (var i = 0; i < 5; i++) + o15.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o15, "a"), undefined); + +var o16 = Object.preventExtensions(Object.create(Object.freeze({ a: 2 }))); +for (var i = 0; i < 5; i++) + o16.a = 3; +assertEq(Object.getOwnPropertyDescriptor(o16, "a"), undefined); + + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/browser.js b/source/spidermonkey-tests/ecma_5/Object/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/Object/clear-dictionary-accessor-getset.js b/source/spidermonkey-tests/ecma_5/Object/clear-dictionary-accessor-getset.js new file mode 100644 index 00000000..f0d9e11c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/clear-dictionary-accessor-getset.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "clear-dictionary-accessor-getset.js"; +var BUGNUMBER = 1082662; +var summary = + "Properly handle GC of a dictionary accessor property whose [[Get]] or " + + "[[Set]] has been changed to |undefined|"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function test(field) +{ + var prop = "[[" + field[0].toUpperCase() + field.substring(1) + "]]"; + print("Testing for GC crashes after setting " + prop + " to undefined..."); + + function inner() + { + // Create an object with an accessor property. + var obj = { x: 42, get y() {}, set y(v) {} }; + + // 1) convert it to dictionary mode, in the process 2) creating a new + // version of that accessor property whose [[Get]] and [[Set]] are objects + // that trigger post barriers. + delete obj.x; + + var desc = {}; + desc[field] = undefined; + + // Overwrite [[field]] with undefined. Note #1 above is necessary so this + // is an actual *overwrite*, and not (possibly) a shape-tree fork that + // doesn't overwrite. + Object.defineProperty(obj, "y", desc); + + } + + inner(); + gc(); // In unfixed code, this crashes trying to mark a null [[field]]. +} + +test("get"); +test("set"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/Object/defineProperty-setup.js b/source/spidermonkey-tests/ecma_5/Object/defineProperty-setup.js new file mode 100644 index 00000000..6994d1de --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/defineProperty-setup.js @@ -0,0 +1,1106 @@ +// |reftest| skip -- not a test. +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +assertEq("defineProperty" in Object, true); +assertEq(Object.defineProperty.length, 3); + +/* + * Disable an assertion that is pathologically slow given the exhaustiveness of + * these tests. + */ +if (typeof enableStackWalkingAssertion === "function") + enableStackWalkingAssertion(false); + +if (!Object.prototype.toSource) +{ + Object.defineProperty(Object.prototype, "toSource", + { + value: function toSource() + { + if (this instanceof RegExp) + { + var v = "new RegExp(" + uneval(this.source); + var f = (this.multiline ? "m" : "") + + (this.global ? "g" : "") + + (this.ignoreCase ? "i" : ""); + return v + (f ? ", '" + f + "'" : "") + ")"; + } + return JSON.stringify(this); + }, + enumerable: false, + configurable: true, + writable: true + }); +} +if (!("uneval" in this)) +{ + Object.defineProperty(this, "uneval", + { + value: function uneval(v) + { + if (v === null) + return "null"; + if (typeof v === "object") + return v.toSource(); + if (typeof v === "string") + { + v = JSON.stringify({v:v}); + return v.substring(5, v.length - 1); + } + return "" + v; + }, + enumerable: false, + configurable: true, + writable: true + }); +} + +// reimplemented for the benefit of engines which don't have this helper +function assertEq(v1, v2, m) +{ + if (!SameValue(v1, v2)) + { + throw "assertion failed: " + + "got " + uneval(v1) + ", expected " + uneval(v2) + + (m ? ": " + m : ""); + } +} + +function SameValue(v1, v2) +{ + if (v1 === 0 && v2 === 0) + return 1 / v1 === 1 / v2; + if (v1 !== v1 && v2 !== v2) + return true; + return v1 === v2; +} + +function PropertyDescriptor(pd) +{ + if (pd) + this.update(pd); +} +PropertyDescriptor.prototype.update = function update(pd) +{ + if ("get" in pd) + this.get = pd.get; + if ("set" in pd) + this.set = pd.set; + if ("configurable" in pd) + this.configurable = pd.configurable; + if ("writable" in pd) + this.writable = pd.writable; + if ("enumerable" in pd) + this.enumerable = pd.enumerable; + if ("value" in pd) + this.value = pd.value; +}; +PropertyDescriptor.prototype.convertToDataDescriptor = function convertToDataDescriptor() +{ + delete this.get; + delete this.set; + this.writable = false; + this.value = undefined; +}; +PropertyDescriptor.prototype.convertToAccessorDescriptor = function convertToAccessorDescriptor() +{ + delete this.writable; + delete this.value; + this.get = undefined; + this.set = undefined; +}; + +function compareDescriptors(d1, d2) +{ + if (d1 === undefined) + { + assertEq(d2, undefined, "non-descriptors"); + return; + } + if (d2 === undefined) + { + assertEq(true, false, "descriptor-equality mismatch: " + uneval(d1) + ", " + uneval(d2)); + return; + } + + var props = ["value", "get", "set", "enumerable", "configurable", "writable"]; + for (var i = 0, sz = props.length; i < sz; i++) + { + var p = props[i]; + assertEq(p in d1, p in d2, p + " different in d1/d2"); + if (p in d1) + assertEq(d1[p], d2[p], p); + } +} + +function examine(desc, field, allowDefault) +{ + if (field in desc) + return desc[field]; + assertEq(allowDefault, true, "reimplementation error"); + switch (field) + { + case "value": + case "get": + case "set": + return undefined; + case "writable": + case "enumerable": + case "configurable": + return false; + default: + assertEq(true, false, "bad field name: " + field); + } +} + +function IsAccessorDescriptor(desc) +{ + if (!desc) + return false; + if (!("get" in desc) && !("set" in desc)) + return false; + return true; +} + +function IsDataDescriptor(desc) +{ + if (!desc) + return false; + if (!("value" in desc) && !("writable" in desc)) + return false; + return true; +} + +function IsGenericDescriptor(desc) +{ + if (!desc) + return false; + if (!IsAccessorDescriptor(desc) && !IsDataDescriptor(desc)) + return true; + return false; +} + + + +function CustomObject() +{ + this.properties = {}; + this.extensible = true; +} +CustomObject.prototype = +{ + _reject: function _reject(throwing, msg) + { + if (throwing) + throw new TypeError(msg + "; rejected!"); + return false; + }, + defineOwnProperty: function defineOwnProperty(propname, desc, throwing) + { + assertEq(typeof propname, "string", "non-string propname"); + + // Step 1. + var current = this.properties[propname]; + + // Step 2. + var extensible = this.extensible; + + // Step 3. + if (current === undefined && !extensible) + return this._reject(throwing, "object not extensible"); + + // Step 4. + if (current === undefined && extensible) + { + var p; + // Step 4(a). + if (IsGenericDescriptor(desc) || IsDataDescriptor(desc)) + { + p = new PropertyDescriptor(); + p.value = examine(desc, "value", true); + p.writable = examine(desc, "writable", true); + p.enumerable = examine(desc, "enumerable", true); + p.configurable = examine(desc, "configurable", true); + } + // Step 4(b). + else + { + p = new PropertyDescriptor(); + p.get = examine(desc, "get", true); + p.set = examine(desc, "set", true); + p.enumerable = examine(desc, "enumerable", true); + p.configurable = examine(desc, "configurable", true); + } + + this.properties[propname] = p; + + // Step 4(c). + return true; + } + + // Step 5. + if (!("value" in desc) && !("get" in desc) && !("set" in desc) && + !("writable" in desc) && !("enumerable" in desc) && + !("configurable" in desc)) + { + return; + } + + // Step 6. + do + { + if ("value" in desc) + { + if (!("value" in current) || !SameValue(desc.value, current.value)) + break; + } + if ("get" in desc) + { + if (!("get" in current) || !SameValue(desc.get, current.get)) + break; + } + if ("set" in desc) + { + if (!("set" in current) || !SameValue(desc.set, current.set)) + break; + } + if ("writable" in desc) + { + if (!("writable" in current) || + !SameValue(desc.writable, current.writable)) + { + break; + } + } + if ("enumerable" in desc) + { + if (!("enumerable" in current) || + !SameValue(desc.enumerable, current.enumerable)) + { + break; + } + } + if ("configurable" in desc) + { + if (!("configurable" in current) || + !SameValue(desc.configurable, current.configurable)) + { + break; + } + } + + // all fields in desc also in current, with the same values + return true; + } + while (false); + + // Step 7. + if (!examine(current, "configurable")) + { + if ("configurable" in desc && examine(desc, "configurable")) + return this._reject(throwing, "can't make configurable again"); + if ("enumerable" in desc && + examine(current, "enumerable") !== examine(desc, "enumerable")) + { + return this._reject(throwing, "can't change enumerability"); + } + } + + // Step 8. + if (IsGenericDescriptor(desc)) + { + // do nothing + } + // Step 9. + else if (IsDataDescriptor(current) !== IsDataDescriptor(desc)) + { + // Step 9(a). + if (!examine(current, "configurable")) + return this._reject(throwing, "can't change unconfigurable descriptor's type"); + // Step 9(b). + if (IsDataDescriptor(current)) + current.convertToAccessorDescriptor(); + // Step 9(c). + else + current.convertToDataDescriptor(); + } + // Step 10. + else if (IsDataDescriptor(current) && IsDataDescriptor(desc)) + { + // Step 10(a) + if (!examine(current, "configurable")) + { + // Step 10(a).i. + if (!examine(current, "writable") && + "writable" in desc && examine(desc, "writable")) + { + return this._reject(throwing, "can't make data property writable again"); + } + // Step 10(a).ii. + if (!examine(current, "writable")) + { + if ("value" in desc && + !SameValue(examine(desc, "value"), examine(current, "value"))) + { + return this._reject(throwing, "can't change value if not writable"); + } + } + } + // Step 10(b). + else + { + assertEq(examine(current, "configurable"), true, + "spec bug step 10(b)"); + } + } + // Step 11. + else + { + assertEq(IsAccessorDescriptor(current) && IsAccessorDescriptor(desc), + true, + "spec bug"); + + // Step 11(a). + if (!examine(current, "configurable")) + { + // Step 11(a).i. + if ("set" in desc && + !SameValue(examine(desc, "set"), examine(current, "set"))) + { + return this._reject(throwing, "can't change setter if not configurable"); + } + // Step 11(a).ii. + if ("get" in desc && + !SameValue(examine(desc, "get"), examine(current, "get"))) + { + return this._reject(throwing, "can't change getter if not configurable"); + } + } + } + + // Step 12. + current.update(desc); + + // Step 13. + return true; + } +}; + +function IsCallable(v) +{ + return typeof v === "undefined" || typeof v === "function"; +} + +var NativeTest = + { + newObject: function newObject() + { + return {}; + }, + defineProperty: function defineProperty(obj, propname, propdesc) + { + Object.defineProperty(obj, propname, propdesc); + }, + getDescriptor: function getDescriptor(obj, propname) + { + return Object.getOwnPropertyDescriptor(obj, propname); + } + }; + +var ReimplTest = + { + newObject: function newObject() + { + return new CustomObject(); + }, + defineProperty: function defineProperty(obj, propname, propdesc) + { + assertEq(obj instanceof CustomObject, true, "obj not instanceof CustomObject"); + if ("get" in propdesc || "set" in propdesc) + { + if ("value" in propdesc || "writable" in propdesc) + throw new TypeError("get/set and value/writable"); + if (!IsCallable(propdesc.get)) + throw new TypeError("get defined, uncallable"); + if (!IsCallable(propdesc.set)) + throw new TypeError("set defined, uncallable"); + } + return obj.defineOwnProperty(propname, propdesc, true); + }, + getDescriptor: function getDescriptor(obj, propname) + { + if (!(propname in obj.properties)) + return undefined; + + return new PropertyDescriptor(obj.properties[propname]); + } + }; + +var JSVAL_INT_MAX = Math.pow(2, 30) - 1; +var JSVAL_INT_MIN = -Math.pow(2, 30); + + +function isValidDescriptor(propdesc) +{ + if ("get" in propdesc || "set" in propdesc) + { + if ("value" in propdesc || "writable" in propdesc) + return false; + + // We permit null here simply because this test's author believes the + // implementation may sometime be susceptible to making mistakes in this + // regard and would prefer to be cautious. + if (propdesc.get !== null && propdesc.get !== undefined && !IsCallable(propdesc.get)) + return false; + if (propdesc.set !== null && propdesc.set !== undefined && !IsCallable(propdesc.set)) + return false; + } + + return true; +} + + +var OMIT = {}; +var VALUES = + [-Infinity, JSVAL_INT_MIN, -0, +0, 1.5, JSVAL_INT_MAX, Infinity, + NaN, "foo", "bar", null, undefined, true, false, {}, /a/, OMIT]; +var GETS = + [undefined, function get1() { return 1; }, function get2() { return 2; }, + null, 5, OMIT]; +var SETS = + [undefined, function set1() { return 1; }, function set2() { return 2; }, + null, 5, OMIT]; +var ENUMERABLES = [true, false, OMIT]; +var CONFIGURABLES = [true, false, OMIT]; +var WRITABLES = [true, false, OMIT]; + +function mapTestDescriptors(filter) +{ + var descs = []; + var desc = {}; + + function put(field, value) + { + if (value !== OMIT) + desc[field] = value; + } + + VALUES.forEach(function(value) + { + GETS.forEach(function(get) + { + SETS.forEach(function(set) + { + ENUMERABLES.forEach(function(enumerable) + { + CONFIGURABLES.forEach(function(configurable) + { + WRITABLES.forEach(function(writable) + { + desc = {}; + put("value", value); + put("get", get); + put("set", set); + put("enumerable", enumerable); + put("configurable", configurable); + put("writable", writable); + if (filter(desc)) + descs.push(desc); + }); + }); + }); + }); + }); + }); + + return descs; +} + +var ALL_DESCRIPTORS = mapTestDescriptors(function(d) { return true; }); +var VALID_DESCRIPTORS = mapTestDescriptors(isValidDescriptor); + +var SKIP_FULL_FUNCTION_LENGTH_TESTS = true; + +function TestRunner() +{ + this._logLines = []; +} +TestRunner.prototype = + { + // MAIN METHODS + + runFunctionLengthTests: function runFunctionLengthTests() + { + var self = this; + function functionLengthTests() + { + if (SKIP_FULL_FUNCTION_LENGTH_TESTS) + { + print("Skipping full tests for redefining Function.length for now " + + "because we don't support redefinition of properties with " + + "native getter or setter..."); + self._simpleFunctionLengthTests(); + } + else + { + self._simpleFunctionLengthTests(); + self._fullFunctionLengthTests(function() { }, 0); + self._fullFunctionLengthTests(function(one) { }, 1); + self._fullFunctionLengthTests(function(one, two) { }, 2); + } + } + + this._runTestSet(functionLengthTests, "Function length tests completed!"); + }, + + runNotPresentTests: function runNotPresentTests() + { + var self = this; + function notPresentTests() + { + print("Running not-present tests now..."); + + for (var i = 0, sz = ALL_DESCRIPTORS.length; i < sz; i++) + self._runSingleNotPresentTest(ALL_DESCRIPTORS[i]); + }; + + this._runTestSet(notPresentTests, "Not-present length tests completed!"); + }, + + runPropertyPresentTestsFraction: + function runPropertyPresentTestsFraction(part, parts) + { + var self = this; + function propertyPresentTests() + { + print("Running already-present tests now..."); + + var total = VALID_DESCRIPTORS.length; + var start = Math.floor((part - 1) / parts * total); + var end = Math.floor(part / parts * total); + + for (var i = start; i < end; i++) + { + var old = VALID_DESCRIPTORS[i]; + print("Starting test with old descriptor " + old.toSource() + "..."); + + for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++) + self._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j], []); + } + } + + this._runTestSet(propertyPresentTests, + "Property-present fraction " + part + " of " + parts + + " completed!"); + }, + + runNonTerminalPropertyPresentTestsFraction: + function runNonTerminalPropertyPresentTestsFraction(part, parts) + { + var self = this; + + /* + * A plain old property to define on the object before redefining the + * originally-added property, to test redefinition of a property that's + * not also lastProperty. NB: we could loop over every possible + * descriptor here if we wanted, even try adding more than one, but we'd + * hit cubic complexity and worse, and SpiderMonkey only distinguishes by + * the mere presence of the middle property, not its precise details. + */ + var middleDefines = + [{ + property: "middle", + descriptor: + { value: 17, writable: true, configurable: true, enumerable: true } + }]; + + function nonTerminalPropertyPresentTests() + { + print("Running non-terminal already-present tests now..."); + + var total = VALID_DESCRIPTORS.length; + var start = Math.floor((part - 1) / parts * total); + var end = Math.floor(part / parts * total); + + for (var i = start; i < end; i++) + { + var old = VALID_DESCRIPTORS[i]; + print("Starting test with old descriptor " + old.toSource() + "..."); + + for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++) + { + self._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j], + middleDefines); + } + } + } + + this._runTestSet(nonTerminalPropertyPresentTests, + "Non-terminal property-present fraction " + + part + " of " + parts + " completed!"); + }, + + runDictionaryPropertyPresentTestsFraction: + function runDictionaryPropertyPresentTestsFraction(part, parts) + { + var self = this; + + /* + * Add and readd properties such that the scope for the object is in + * dictionary mode. + */ + var middleDefines = + [ + { + property: "mid1", + descriptor: + { value: 17, writable: true, configurable: true, enumerable: true } + }, + { + property: "mid2", + descriptor: + { value: 17, writable: true, configurable: true, enumerable: true } + }, + { + property: "mid1", + descriptor: + { get: function g() { }, set: function s(v){}, configurable: false, + enumerable: true } + }, + ]; + + function dictionaryPropertyPresentTests() + { + print("Running dictionary already-present tests now..."); + + var total = VALID_DESCRIPTORS.length; + var start = Math.floor((part - 1) / parts * total); + var end = Math.floor(part / parts * total); + + for (var i = start; i < end; i++) + { + var old = VALID_DESCRIPTORS[i]; + print("Starting test with old descriptor " + old.toSource() + "..."); + + for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++) + { + self._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j], + middleDefines); + } + } + } + + this._runTestSet(dictionaryPropertyPresentTests, + "Dictionary property-present fraction " + + part + " of " + parts + " completed!"); + }, + + + // HELPERS + + runPropertyPresentTests: function runPropertyPresentTests() + { + print("Running already-present tests now..."); + + for (var i = 0, sz = VALID_DESCRIPTORS.length; i < sz; i++) + { + var old = VALID_DESCRIPTORS[i]; + print("Starting test with old descriptor " + old.toSource() + "..."); + + for (var j = 0, sz2 = VALID_DESCRIPTORS.length; j < sz2; j++) + this._runSinglePropertyPresentTest(old, VALID_DESCRIPTORS[j], []); + } + }, + _runTestSet: function _runTestSet(fun, completeMessage) + { + try + { + fun(); + + print(completeMessage); + } + catch (e) + { + print("ERROR, EXITING (line " + (e.lineNumber || -1) + "): " + e); + throw e; + } + finally + { + this._reportAllErrors(); + } + }, + _reportAllErrors: function _reportAllErrors() + { + var errorCount = this._logLines.length; + print("Full accumulated number of errors: " + errorCount); + if (errorCount > 0) + throw errorCount + " errors detected, FAIL"; + }, + _simpleFunctionLengthTests: function _simpleFunctionLengthTests(fun) + { + print("Running simple Function.length tests now.."); + + function expectThrowTypeError(o, p, desc) + { + var err = "", passed = false; + try + { + Object.defineProperty(o, p, desc); + } + catch (e) + { + err = e; + passed = e instanceof TypeError; + } + assertEq(passed, true, fun + " didn't throw TypeError when called: " + err); + } + + expectThrowTypeError(function a() { }, "length", { value: 1 }); + expectThrowTypeError(function a() { }, "length", { enumerable: true }); + expectThrowTypeError(function a() { }, "length", { configurable: true }); + expectThrowTypeError(function a() { }, "length", { writable: true }); + }, + _fullFunctionLengthTests: function _fullFunctionLengthTests(fun) + { + var len = fun.length; + print("Running Function.length (" + len + ") tests now..."); + + var desc; + var gen = new DescriptorState(); + while ((desc = gen.nextDescriptor())) + this._runSingleFunctionLengthTest(fun, len, desc); + }, + _log: function _log(v) + { + var m = "" + v; + print(m); + this._logLines.push(m); + }, + _runSingleNotPresentTest: function _runSingleNotPresentTest(desc) + { + var nativeObj = NativeTest.newObject(); + var reimplObj = ReimplTest.newObject(); + + try + { + NativeTest.defineProperty(nativeObj, "foo", desc); + } + catch (e) + { + try + { + ReimplTest.defineProperty(reimplObj, "foo", desc); + } + catch (e2) + { + if (e.constructor !== e2.constructor) + { + this._log("Difference when comparing native/reimplementation " + + "behavior for new descriptor " + desc.toSource() + + ", native threw " + e + ", reimpl threw " + e2); + } + return; + } + this._log("Difference when comparing native/reimplementation " + + "behavior for new descriptor " + desc.toSource() + + ", error " + e); + return; + } + + try + { + ReimplTest.defineProperty(reimplObj, "foo", desc); + } + catch (e) + { + this._log("Reimpl threw defining new descriptor " + desc.toSource() + + ", error: " + e); + return; + } + + var nativeDesc = NativeTest.getDescriptor(nativeObj, "foo"); + var reimplDesc = ReimplTest.getDescriptor(reimplObj, "foo"); + try + { + compareDescriptors(nativeDesc, reimplDesc); + } + catch (e) + { + this._log("Difference comparing returned descriptors for new " + + "property defined with descriptor " + desc.toSource() + + "; error: " + e); + return; + } + }, + _runSinglePropertyPresentTest: + function _runSinglePropertyPresentTest(old, add, middleDefines) + { + var nativeObj = NativeTest.newObject(); + var reimplObj = ReimplTest.newObject(); + + try + { + NativeTest.defineProperty(nativeObj, "foo", old); + } + catch (e) + { + if (!SameValue(NativeTest.getDescriptor(nativeObj, "foo"), undefined)) + { + this._log("defining bad property descriptor: " + old.toSource()); + return; + } + + try + { + ReimplTest.defineProperty(reimplObj, "foo", old); + } + catch (e2) + { + if (!SameValue(ReimplTest.getDescriptor(reimplObj, "foo"), + undefined)) + { + this._log("defining bad property descriptor: " + old.toSource() + + "; reimplObj: " + uneval(reimplObj)); + } + + if (e.constructor !== e2.constructor) + { + this._log("Different errors defining bad property descriptor: " + + old.toSource() + "; native threw " + e + ", reimpl " + + "threw " + e2); + } + + return; + } + + this._log("Difference defining a property with descriptor " + + old.toSource() + ", error " + e); + return; + } + + try + { + ReimplTest.defineProperty(reimplObj, "foo", old); + } + catch (e) + { + this._log("Difference when comparing native/reimplementation " + + "behavior when adding descriptor " + add.toSource() + + ", error: " + e); + return; + } + + // Now add (or even readd) however many properties were specified between + // the original property to add and the new one, to test redefining + // non-last-properties and properties in scopes in dictionary mode. + for (var i = 0, sz = middleDefines.length; i < sz; i++) + { + var middle = middleDefines[i]; + var prop = middle.property; + var desc = middle.descriptor; + + try + { + NativeTest.defineProperty(nativeObj, prop, desc); + ReimplTest.defineProperty(reimplObj, prop, desc); + } + catch (e) + { + this._log("failure defining middle descriptor: " + desc.toSource() + + ", error " + e); + return; + } + + // Sanity check + var nativeDesc = NativeTest.getDescriptor(nativeObj, prop); + var reimplDesc = ReimplTest.getDescriptor(reimplObj, prop); + + compareDescriptors(nativeDesc, reimplDesc); + compareDescriptors(nativeDesc, desc); + } + + try + { + NativeTest.defineProperty(nativeObj, "foo", add); + } + catch (e) + { + try + { + ReimplTest.defineProperty(reimplObj, "foo", add); + } + catch (e2) + { + if (e.constructor !== e2.constructor) + { + this._log("Difference when comparing native/reimplementation " + + "behavior for descriptor " + add.toSource() + + " overwriting descriptor " + old.toSource() + "; " + + "native threw " + e + ", reimpl threw " + e2); + } + return; + } + this._log("Difference when comparing native/reimplementation " + + "behavior for added descriptor " + add.toSource() + ", " + + "initial was " + old.toSource() + "; error: " + e); + return; + } + + try + { + ReimplTest.defineProperty(reimplObj, "foo", add); + } + catch (e) + { + this._log("Difference when comparing native/reimplementation " + + "behavior for readded descriptor " + add.toSource() + ", " + + "initial was " + old.toSource() + "; native readd didn't " + + "throw, reimpl add did, error: " + e); + return; + } + + var nativeDesc = NativeTest.getDescriptor(nativeObj, "foo"); + var reimplDesc = ReimplTest.getDescriptor(reimplObj, "foo"); + try + { + compareDescriptors(nativeDesc, reimplDesc); + } + catch (e) + { + this._log("Difference comparing returned descriptors for readded " + + "property defined with descriptor " + add.toSource() + "; " + + "initial was " + old.toSource() + "; error: " + e); + return; + } + }, + _runSingleFunctionLengthTest: function _runSingleFunctionLengthTest(fun, len, desc) + { + var nativeObj = fun; + var reimplObj = ReimplTest.newObject(); + ReimplTest.defineProperty(reimplObj, "length", + { + value: len, + enumerable: false, + configurable: false, + writable: false + }); + + try + { + NativeTest.defineProperty(nativeObj, "length", desc); + } + catch (e) + { + try + { + ReimplTest.defineProperty(reimplObj, "length", desc); + } + catch (e2) + { + if (e.constructor !== e2.constructor) + { + this._log("Difference when comparing native/reimplementation " + + "behavior defining fun.length with " + desc.toSource() + + "; native threw " + e + ", reimpl threw " + e2); + } + return; + } + this._log("Difference when comparing Function.length native/reimpl " + + "behavior for descriptor " + desc.toSource() + + ", native impl threw error " + e); + return; + } + + try + { + ReimplTest.defineProperty(reimplObj, "length", desc); + } + catch (e) + { + this._log("Difference defining new Function.length descriptor: impl " + + "succeeded, reimpl threw for descriptor " + + desc.toSource() + ", error: " + e); + return; + } + + var nativeDesc = NativeTest.getDescriptor(nativeObj, "length"); + var reimplDesc = ReimplTest.getDescriptor(reimplObj, "length"); + try + { + compareDescriptors(nativeDesc, reimplDesc); + } + catch (e) + { + this._log("Difference comparing returned descriptors for " + + "Function.length with descriptor " + desc.toSource() + + "; error: " + e); + return; + } + } + }; + +function runDictionaryPropertyPresentTestsFraction(PART, PARTS) +{ + var testfile = + '15.2.3.6-dictionary-redefinition-' + PART + '-of-' + PARTS + '.js'; + var BUGNUMBER = 560566; + var summary = + 'ES5 Object.defineProperty(O, P, Attributes): dictionary redefinition ' + + PART + ' of ' + PARTS; + + print(BUGNUMBER + ": " + summary); + + try + { + new TestRunner().runDictionaryPropertyPresentTestsFraction(PART, PARTS); + } + catch (e) + { + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); + } + + if (typeof reportCompare === "function") + reportCompare(true, true); + + print("Tests complete!"); +} + +function runNonTerminalPropertyPresentTestsFraction(PART, PARTS) +{ + var BUGNUMBER = 560566; + var summary = + 'ES5 Object.defineProperty(O, P, Attributes): middle redefinition ' + + PART + ' of ' + PARTS; + + print(BUGNUMBER + ": " + summary); + + + /************** + * BEGIN TEST * + **************/ + + try + { + new TestRunner().runNonTerminalPropertyPresentTestsFraction(PART, PARTS); + } + catch (e) + { + throw "Error thrown during testing: " + e + + " at line " + e.lineNumber + "\n" + + (e.stack + ? "Stack: " + e.stack.split("\n").slice(2).join("\n") + "\n" + : ""); + } + + /******************************************************************************/ + + if (typeof reportCompare === "function") + reportCompare(true, true); + + print("Tests complete!"); +} diff --git a/source/spidermonkey-tests/ecma_5/Object/extensibility-01.js b/source/spidermonkey-tests/ecma_5/Object/extensibility-01.js new file mode 100644 index 00000000..c001f382 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/extensibility-01.js @@ -0,0 +1,103 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +var gTestfile = '15.2.3.10-01.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 492849; +var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function trySetProperty(o, p, v, strict) +{ + function strictSetProperty() + { + "use strict"; + o[p] = v; + } + + function setProperty() + { + o[p] = v; + } + + assertEq(Object.prototype.hasOwnProperty.call(o, p), false); + + try + { + if (strict) + strictSetProperty(); + else + setProperty(); + if (o[p] === v) + return "set"; + if (p in o) + return "set-converted"; + return "swallowed"; + } + catch (e) + { + return "throw"; + } +} + +function tryDefineProperty(o, p, v) +{ + assertEq(Object.prototype.hasOwnProperty.call(o, p), false); + + try + { + Object.defineProperty(o, p, { value: v }); + if (o[p] === v) + return "set"; + if (p in o) + return "set-converted"; + return "swallowed"; + } + catch (e) + { + return "throw"; + } +} + +assertEq(typeof Object.preventExtensions, "function"); +assertEq(Object.preventExtensions.length, 1); + +var slowArray = [1, 2, 3]; +slowArray.slow = 5; +var objs = + [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/]; + +for (var i = 0, sz = objs.length; i < sz; i++) +{ + var o = objs[i]; + assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?"); + + var o2 = Object.preventExtensions(o); + assertEq(o, o2); + + assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?"); + + assertEq(trySetProperty(o, "baz", 17, true), "throw", + "unexpected behavior for strict-mode property-addition to " + + "object " + i); + assertEq(trySetProperty(o, "baz", 17, false), "swallowed", + "unexpected behavior for property-addition to object " + i); + + assertEq(tryDefineProperty(o, "baz", 17), "throw", + "unexpected behavior for new property definition on object " + i); +} + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/extensibility-02.js b/source/spidermonkey-tests/ecma_5/Object/extensibility-02.js new file mode 100644 index 00000000..c61e3672 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/extensibility-02.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +var gTestfile = '15.2.3.4-01.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 492849; +var summary = 'ES5: Implement Object.preventExtensions, Object.isExtensible'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(typeof Object.isExtensible, "function"); +assertEq(Object.isExtensible.length, 1); + +var slowArray = [1, 2, 3]; +slowArray.slow = 5; +var objs = + [{}, { 1: 2 }, { a: 3 }, [], [1], [, 1], slowArray, function a(){}, /a/]; + +for (var i = 0, sz = objs.length; i < sz; i++) +{ + var o = objs[i]; + assertEq(Object.isExtensible(o), true, "object " + i + " not extensible?"); + + var o2 = Object.preventExtensions(o); + assertEq(o, o2); + + assertEq(Object.isExtensible(o), false, "object " + i + " is extensible?"); +} + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/freeze-global-eval-const.js b/source/spidermonkey-tests/ecma_5/Object/freeze-global-eval-const.js new file mode 100644 index 00000000..a43f5c51 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/freeze-global-eval-const.js @@ -0,0 +1,13 @@ +// |reftest| skip-if(!xulRuntime.shell) -- uses evalcx +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +try { + evalcx("Object.freeze(this); eval('const q = undefined;')"); +} catch (e) { + assertEq(e.message, "({lazy:false}) is not extensible"); +} + +reportCompare(0, 0, "don't crash"); diff --git a/source/spidermonkey-tests/ecma_5/Object/gOPD-vs-prototype-accessor.js b/source/spidermonkey-tests/ecma_5/Object/gOPD-vs-prototype-accessor.js new file mode 100644 index 00000000..472887f9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/gOPD-vs-prototype-accessor.js @@ -0,0 +1,15 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(function testcase() { + var proto = {}; + Object.defineProperty(proto, "prop", {get: function () {return {};}, enumerable: true}); + var ConstructFun = function () {}; + ConstructFun.prototype = proto; + var child = new ConstructFun; + return Object.getOwnPropertyNames(child).indexOf('prop'); +}(), -1); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_5/Object/getPrototypeOf-array.js b/source/spidermonkey-tests/ecma_5/Object/getPrototypeOf-array.js new file mode 100644 index 00000000..e482f89b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/getPrototypeOf-array.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'getPrototypeOf-array.js'; +var BUGNUMBER = 769041; +var summary = + "The [[Prototype]] of an object whose prototype chain contains an array " + + "isn't that array's [[Prototype]]"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +assertEq(Array.isArray(arr), true); +var objWithArrPrototype = Object.create(arr); +assertEq(!Array.isArray(objWithArrPrototype), true); +assertEq(Object.getPrototypeOf(objWithArrPrototype), arr); +var objWithArrGrandPrototype = Object.create(objWithArrPrototype); +assertEq(!Array.isArray(objWithArrGrandPrototype), true); +assertEq(Object.getPrototypeOf(objWithArrGrandPrototype), objWithArrPrototype); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/Object/isPrototypeOf.js b/source/spidermonkey-tests/ecma_5/Object/isPrototypeOf.js new file mode 100644 index 00000000..a2d78f65 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/isPrototypeOf.js @@ -0,0 +1,86 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'isPrototypeOf.js'; +var BUGNUMBER = 619283; +var summary = "Object.prototype.isPrototypeOf"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(fun) +{ + try + { + var r = fun(); + throw new Error("didn't throw TypeError, returned " + r); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "didn't throw TypeError, got: " + e); + } +} + +var isPrototypeOf = Object.prototype.isPrototypeOf; + +/* + * 1. If V is not an Object, return false. + */ +assertEq(isPrototypeOf(), false); +assertEq(isPrototypeOf(1), false); +assertEq(isPrototypeOf(Number.MAX_VALUE), false); +assertEq(isPrototypeOf(NaN), false); +assertEq(isPrototypeOf(""), false); +assertEq(isPrototypeOf("sesquicentennial"), false); +assertEq(isPrototypeOf(true), false); +assertEq(isPrototypeOf(false), false); +assertEq(isPrototypeOf(0.72), false); +assertEq(isPrototypeOf(undefined), false); +assertEq(isPrototypeOf(null), false); + + +/* + * 2. Let O be the result of calling ToObject passing the this value as the + * argument. + */ +var protoGlobal = Object.create(this); +expectThrowTypeError(function() { isPrototypeOf.call(null, {}); }); +expectThrowTypeError(function() { isPrototypeOf.call(undefined, {}); }); +expectThrowTypeError(function() { isPrototypeOf({}); }); +expectThrowTypeError(function() { isPrototypeOf.call(null, protoGlobal); }); +expectThrowTypeError(function() { isPrototypeOf.call(undefined, protoGlobal); }); +expectThrowTypeError(function() { isPrototypeOf(protoGlobal); }); + + +/* + * 3. Repeat + */ + +/* + * 3a. Let V be the value of the [[Prototype]] internal property of V. + * 3b. If V is null, return false. + */ +assertEq(Object.prototype.isPrototypeOf(Object.prototype), false); +assertEq(String.prototype.isPrototypeOf({}), false); +assertEq(Object.prototype.isPrototypeOf(Object.create(null)), false); + +/* 3c. If O and V refer to the same object, return true. */ +assertEq(Object.prototype.isPrototypeOf({}), true); +assertEq(this.isPrototypeOf(protoGlobal), true); +assertEq(Object.prototype.isPrototypeOf({}), true); +assertEq(Object.prototype.isPrototypeOf(new Number(17)), true); +assertEq(Object.prototype.isPrototypeOf(function(){}), true); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/mutation-prevention-methods.js b/source/spidermonkey-tests/ecma_5/Object/mutation-prevention-methods.js new file mode 100644 index 00000000..01b4c19c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/mutation-prevention-methods.js @@ -0,0 +1,124 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +var gTestfile = 'mutation-prevention-methods.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 492849; +var summary = 'Object.is{Sealed,Frozen}, Object.{seal,freeze}'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Empty object + +var o1 = {}; + +assertEq(Object.isExtensible(o1), true); +assertEq(Object.isSealed(o1), false); +assertEq(Object.isFrozen(o1), false); + +Object.preventExtensions(o1); + +// An non-extensible empty object has no properties, so it is vacuously sealed +// and frozen. +assertEq(Object.isExtensible(o1), false); +assertEq(Object.isSealed(o1), true); +assertEq(Object.isFrozen(o1), true); + + +// Object with a data property + +var o2 = { 1: 2 }; + +assertEq(Object.isExtensible(o2), true); +assertEq(Object.isSealed(o2), false); +assertEq(Object.isFrozen(o2), false); + +Object.preventExtensions(o2); + +assertEq(Object.isExtensible(o2), false); +assertEq(Object.isSealed(o2), false); +assertEq(Object.isFrozen(o2), false); + +Object.seal(o2); + +assertEq(Object.isExtensible(o2), false); +assertEq(Object.isSealed(o2), true); +assertEq(Object.isFrozen(o2), false); + +assertEq(o2[1], 2); + +var desc; + +desc = Object.getOwnPropertyDescriptor(o2, "1"); +assertEq(typeof desc, "object"); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, false); +assertEq(desc.value, 2); +assertEq(desc.writable, true); + +o2[1] = 17; + +assertEq(o2[1], 17); + +desc = Object.getOwnPropertyDescriptor(o2, "1"); +assertEq(typeof desc, "object"); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, false); +assertEq(desc.value, 17); +assertEq(desc.writable, true); + +Object.freeze(o2); + +assertEq(o2[1], 17); + +desc = Object.getOwnPropertyDescriptor(o2, "1"); +assertEq(typeof desc, "object"); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, false); +assertEq(desc.value, 17); +assertEq(desc.writable, false); + + +// Object with an accessor property + +var o3 = { get foo() { return 17; } }; + +assertEq(Object.isExtensible(o3), true); +assertEq(Object.isSealed(o3), false); +assertEq(Object.isFrozen(o3), false); + +Object.preventExtensions(o3); + +assertEq(Object.isExtensible(o3), false); +assertEq(Object.isSealed(o3), false); +assertEq(Object.isFrozen(o3), false); + +Object.seal(o3); + +// An accessor property in a sealed object is unchanged if that object is +// frozen, so a sealed object containing only accessor properties is also +// vacuously frozen. +assertEq(Object.isExtensible(o3), false); +assertEq(Object.isSealed(o3), true); +assertEq(Object.isFrozen(o3), true); + +Object.freeze(o3); + +assertEq(Object.isExtensible(o3), false); +assertEq(Object.isSealed(o3), true); +assertEq(Object.isFrozen(o3), true); + + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/object-toString-01.js b/source/spidermonkey-tests/ecma_5/Object/object-toString-01.js new file mode 100644 index 00000000..6a8c4e86 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/object-toString-01.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +var gTestfile = 'object-toString-01.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 575522; +var summary = '({}).toString.call(null) == "[object Null]", ' + + '({}).toString.call(undefined) == "[object Undefined]", '; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var toString = Object.prototype.toString; + +assertEq(toString.call(null), "[object Null]"); +assertEq(toString.call(undefined), "[object Undefined]"); + +assertEq(toString.call(true), "[object Boolean]"); +assertEq(toString.call(false), "[object Boolean]"); + +assertEq(toString.call(0), "[object Number]"); +assertEq(toString.call(-0), "[object Number]"); +assertEq(toString.call(1), "[object Number]"); +assertEq(toString.call(-1), "[object Number]"); +assertEq(toString.call(NaN), "[object Number]"); +assertEq(toString.call(Infinity), "[object Number]"); +assertEq(toString.call(-Infinity), "[object Number]"); + +assertEq(toString.call("foopy"), "[object String]"); + +assertEq(toString.call({}), "[object Object]"); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/preventExtensions-idempotent.js b/source/spidermonkey-tests/ecma_5/Object/preventExtensions-idempotent.js new file mode 100644 index 00000000..c0b16d89 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/preventExtensions-idempotent.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +var gTestfile = 'preventExtensions-idempotent.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 599459; +var summary = 'Object.preventExtensions should be idempotent'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = {}; +assertEq(Object.preventExtensions(obj), obj); +assertEq(Object.isExtensible(obj), false); +assertEq(Object.preventExtensions(obj), obj); +assertEq(Object.isExtensible(obj), false); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/propertyIsEnumerable.js b/source/spidermonkey-tests/ecma_5/Object/propertyIsEnumerable.js new file mode 100644 index 00000000..e9b09d0b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/propertyIsEnumerable.js @@ -0,0 +1,199 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'propertyIsEnumerable.js'; +var BUGNUMBER = 619283; +var summary = "Object.prototype.propertyIsEnumerable"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowError(errorCtor, fun) +{ + try + { + var r = fun(); + throw "didn't throw TypeError, returned " + r; + } + catch (e) + { + assertEq(e instanceof errorCtor, true, + "didn't throw " + errorCtor.prototype.name + ", got: " + e); + } +} + +function expectThrowTypeError(fun) +{ + expectThrowError(TypeError, fun); +} + +function withToString(fun) +{ + return { toString: fun }; +} + +function withValueOf(fun) +{ + return { toString: null, valueOf: fun }; +} + +var propertyIsEnumerable = Object.prototype.propertyIsEnumerable; + +/* + * 1. Let P be ToString(V). + */ +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable(withToString(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { fahslkjdfhlkjdsl; })); +}); + +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable(withValueOf(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { fahslkjdfhlkjdsl; })); +}); +expectThrowError(ReferenceError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { fahslkjdfhlkjdsl; })); +}); + +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable(withToString(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { eval("}"); })); +}); + +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable(withValueOf(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { eval("}"); })); +}); +expectThrowError(SyntaxError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { eval("}"); })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withToString(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { [].length = -1; })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withValueOf(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { [].length = -1; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = -1; })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withToString(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withToString(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withToString(function() { [].length = 0.7; })); +}); + +expectThrowError(RangeError, function() +{ + propertyIsEnumerable(withValueOf(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(null, withValueOf(function() { [].length = 0.7; })); +}); +expectThrowError(RangeError, function() +{ + propertyIsEnumerable.call(undefined, withValueOf(function() { [].length = 0.7; })); +}); + +/* + * 2. Let O be the result of calling ToObject passing the this value as the + * argument. + */ +expectThrowTypeError(function() { propertyIsEnumerable("s"); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, "s"); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, "s"); }); +expectThrowTypeError(function() { propertyIsEnumerable(true); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, true); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, true); }); +expectThrowTypeError(function() { propertyIsEnumerable(NaN); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, NaN); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, NaN); }); + +expectThrowTypeError(function() { propertyIsEnumerable({}); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(null, {}); }); +expectThrowTypeError(function() { propertyIsEnumerable.call(undefined, {}); }); + +/* + * 3. Let desc be the result of calling the [[GetOwnProperty]] internal method + * of O passing P as the argument. + * 4. If desc is undefined, return false. + */ +assertEq(propertyIsEnumerable.call({}, "valueOf"), false); +assertEq(propertyIsEnumerable.call({}, "toString"), false); +assertEq(propertyIsEnumerable.call("s", 1), false); +assertEq(propertyIsEnumerable.call({}, "dsfiodjfs"), false); +assertEq(propertyIsEnumerable.call(true, "toString"), false); +assertEq(propertyIsEnumerable.call({}, "__proto__"), false); + +assertEq(propertyIsEnumerable.call(Object, "getOwnPropertyDescriptor"), false); +assertEq(propertyIsEnumerable.call(this, "expectThrowTypeError"), true); +assertEq(propertyIsEnumerable.call("s", "length"), false); +assertEq(propertyIsEnumerable.call("s", 0), true); +assertEq(propertyIsEnumerable.call(Number, "MAX_VALUE"), false); +assertEq(propertyIsEnumerable.call({ x: 9 }, "x"), true); +assertEq(propertyIsEnumerable.call(function() { }, "prototype"), false); +assertEq(propertyIsEnumerable.call(function() { }, "length"), false); +assertEq(propertyIsEnumerable.call(function() { "use strict"; }, "caller"), false); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/proto-property-change-writability-set.js b/source/spidermonkey-tests/ecma_5/Object/proto-property-change-writability-set.js new file mode 100644 index 00000000..d81f844e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/proto-property-change-writability-set.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributors: + * Gary Kwong + * Jeff Walden + * Jason Orendorff + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 713944; +var summary = + "Don't assert anything about a shape from the property cache until it's " + + "known the cache entry matches"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var accDesc = { set: function() {} }; +var dataDesc = { value: 3 }; + +function f() +{ + propertyIsEnumerable = {}; +} +function g() +{ + propertyIsEnumerable = {}; +} + +Object.defineProperty(Object.prototype, "propertyIsEnumerable", accDesc); +f(); +Object.defineProperty(Object.prototype, "propertyIsEnumerable", dataDesc); +assertEq(propertyIsEnumerable, 3); +f(); +assertEq(propertyIsEnumerable, 3); +g(); +assertEq(propertyIsEnumerable, 3); + + + +var a = { p1: 1, p2: 2 }; +var b = Object.create(a); +Object.defineProperty(a, "p1", {set: function () {}}); +for (var i = 0; i < 2; i++) +{ + b.p1 = {}; + Object.defineProperty(a, "p1", {value: 3}); +} +assertEq(b.p1, 3); +assertEq(a.p1, 3); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/Object/shell.js b/source/spidermonkey-tests/ecma_5/Object/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/Object/toLocaleString.js b/source/spidermonkey-tests/ecma_5/Object/toLocaleString.js new file mode 100644 index 00000000..e42c4a09 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/toLocaleString.js @@ -0,0 +1,102 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'toLocaleString.js'; +var BUGNUMBER = 653789; +var summary = "Object.prototype.toLocaleString"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(fun) +{ + try + { + var r = fun(); + throw "didn't throw TypeError, returned " + r; + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "didn't throw TypeError, got: " + e); + } +} + +var toLocaleString = Object.prototype.toLocaleString; + +/* + * 1. Let O be the result of calling ToObject passing the this value as the + * argument. + */ +expectThrowTypeError(function() { toLocaleString.call(null); }); +expectThrowTypeError(function() { toLocaleString.call(undefined); }); +expectThrowTypeError(function() { toLocaleString.apply(null); }); +expectThrowTypeError(function() { toLocaleString.apply(undefined); }); + + +/* + * 2. Let toString be the result of calling the [[Get]] internal method of O + * passing "toString" as the argument. + */ +try +{ + toLocaleString.call({ get toString() { throw 17; } }); + throw new Error("didn't throw"); +} +catch (e) +{ + assertEq(e, 17); +} + + +/* 3. If IsCallable(toString) is false, throw a TypeError exception. */ +expectThrowTypeError(function() { toLocaleString.call({ toString: 12 }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: 0.3423423452352e9 }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: undefined }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: false }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: [] }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: {} }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: new String }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: new Number(7.7) }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: new Boolean(true) }); }); +expectThrowTypeError(function() { toLocaleString.call({ toString: JSON }); }); + +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 12 }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: 0.3423423452352e9 }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: undefined }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: false }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: [] }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: {} }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new String }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Number(7.7) }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: new Boolean(true) }); }); +expectThrowTypeError(function() { toLocaleString.call({ valueOf: 0, toString: JSON }); }); + + +/* + * 4. Return the result of calling the [[Call]] internal method of toString + * passing O as the this value and no arguments. + */ +assertEq(toLocaleString.call({ get toString() { return function() { return "foo"; } } }), + "foo"); + +var obj = { toString: function() { assertEq(this, obj); assertEq(arguments.length, 0); return 5; } }; +assertEq(toLocaleString.call(obj), 5); + +assertEq(toLocaleString.call({ toString: function() { return obj; } }), obj); + +assertEq(toLocaleString.call({ toString: function() { return obj; }, + valueOf: function() { return "abc"; } }), + obj); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/Object/vacuous-accessor-unqualified-name.js b/source/spidermonkey-tests/ecma_5/Object/vacuous-accessor-unqualified-name.js new file mode 100644 index 00000000..f8c7dca2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Object/vacuous-accessor-unqualified-name.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'vacuous-accessor-unqualified-name.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 560216; +var summary = + "Using a name referring to a { get: undefined, set: undefined } descriptor " + + "shouldn't assert"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +Object.defineProperty(this, "x", { set: undefined }); +x; + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/README b/source/spidermonkey-tests/ecma_5/README new file mode 100644 index 00000000..e7c87e9c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/README @@ -0,0 +1 @@ +ECMA 5 diff --git a/source/spidermonkey-tests/ecma_5/RegExp/15.10.5-01.js b/source/spidermonkey-tests/ecma_5/RegExp/15.10.5-01.js new file mode 100644 index 00000000..2f842921 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/15.10.5-01.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 614603; +var summary = "RegExp.length"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(RegExp.length, 2); +assertEq(/a/.constructor.length, 2); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/15.10.7.5-01.js b/source/spidermonkey-tests/ecma_5/RegExp/15.10.7.5-01.js new file mode 100644 index 00000000..ab9d071a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/15.10.7.5-01.js @@ -0,0 +1,71 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 465199; +var summary = "RegExp lastIndex property set should not coerce type to number"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var called = false; +var o = { valueOf: function() { called = true; return 1; } }; +var r = /a/g; +var desc, m; + +assertEq(r.lastIndex, 0); + +desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq(desc.value, 0); +assertEq(desc.writable, true); + +r.lastIndex = o; + +assertEq(r.lastIndex, o); + +desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq(desc.value, o); +assertEq(desc.writable, true); + +assertEq(called, false); +assertEq(r.exec("aaaa").length, 1); +assertEq(called, true); +assertEq(r.lastIndex, 2); + +desc = Object.getOwnPropertyDescriptor(r, "lastIndex"); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq(desc.value, 2); +assertEq(desc.writable, true); + + +r.lastIndex = -0.2; +assertEq(r.lastIndex, -0.2); + +m = r.exec("aaaa"); +assertEq(Array.isArray(m), true); +assertEq(m.length, 1); +assertEq(m[0], "a"); +assertEq(r.lastIndex, 1); + +m = r.exec("aaaa"); +assertEq(Array.isArray(m), true); +assertEq(m.length, 1); +assertEq(m[0], "a"); +assertEq(r.lastIndex, 2); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/7.8.5-01.js b/source/spidermonkey-tests/ecma_5/RegExp/7.8.5-01.js new file mode 100644 index 00000000..be09bbc1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/7.8.5-01.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 615070; +var summary = "Line terminator after backslash is invalid in regexp literals"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var regexps = ["/\\\u000A/", "/\\\u000D/", "/\\\u2028/", "/\\\u2029/", + "/ab\\\n/", "/ab\\\r/", "/ab\\\u2028/", "/ab\\\u2029/", + "/ab[c\\\n]/", "/a[bc\\", "/\\"]; + +for(var i=0; i + */ + +var BUGNUMBER = 646490; +var summary = + "RegExp.prototype.exec doesn't get the lastIndex and ToInteger() it for " + + "non-global regular expressions when it should"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var re = /./, called = 0; +re.lastIndex = {valueOf: function() { called++; return 0; }}; +re.exec("."); +re.lastIndex = {toString: function() { called++; return "0"; }}; +re.exec("."); +re.lastIndex = { + valueOf: function() { called++; return 0; }, + toString: function() { called--; } +}; +re.exec("."); +assertEq(called, 3, "FAIL, got " + called); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/exec.js b/source/spidermonkey-tests/ecma_5/RegExp/exec.js new file mode 100644 index 00000000..411f348d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/exec.js @@ -0,0 +1,240 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 646490; +var summary = + "RegExp.prototype.exec doesn't get the lastIndex and ToInteger() it for " + + "non-global regular expressions when it should"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectThrowTypeError(fun) +{ + try + { + var r = fun(); + throw new Error("didn't throw TypeError, returned " + r); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "didn't throw TypeError, got: " + e); + } +} + +function checkExec(description, regex, args, obj) +{ + var lastIndex = obj.lastIndex; + var index = obj.index; + var input = obj.input; + var indexArray = obj.indexArray; + + var res = regex.exec.apply(regex, args); + + assertEq(Array.isArray(res), true, description + ": not an array"); + assertEq(regex.lastIndex, lastIndex, description + ": wrong lastIndex"); + assertEq(res.index, index, description + ": wrong index"); + assertEq(res.input, input, description + ": wrong input"); + assertEq(res.length, indexArray.length, description + ": wrong length"); + for (var i = 0, sz = indexArray.length; i < sz; i++) + assertEq(res[i], indexArray[i], description + " " + i + ": wrong index value"); +} + +var exec = RegExp.prototype.exec; +var r, res, called, obj; + +/* 1. Let R be this RegExp object. */ +expectThrowTypeError(function() { exec.call(null); }); +expectThrowTypeError(function() { exec.call(""); }); +expectThrowTypeError(function() { exec.call(5); }); +expectThrowTypeError(function() { exec.call({}); }); +expectThrowTypeError(function() { exec.call([]); }); +expectThrowTypeError(function() { exec.call(); }); +expectThrowTypeError(function() { exec.call(true); }); +expectThrowTypeError(function() { exec.call(Object.create(RegExp.prototype)); }); +expectThrowTypeError(function() { exec.call(Object.create(/a/)); }); + + +/* 2. Let S be the value of ToString(string). */ +called = false; +r = /a/; +assertEq(r.lastIndex, 0); + +checkExec("/a/", r, [{ toString: function() { called = true; return 'ba'; } }], + { lastIndex: 0, + index: 1, + input: "ba", + indexArray: ["a"] }); +assertEq(called, true); + +called = false; +try +{ + res = r.exec({ toString: null, valueOf: function() { called = true; throw 17; } }); + throw new Error("didn't throw"); +} +catch (e) +{ + assertEq(e, 17); +} + +assertEq(called, true); + +called = false; +obj = r.lastIndex = { valueOf: function() { assertEq(true, false, "shouldn't have been called"); } }; +try +{ + res = r.exec({ toString: null, valueOf: function() { assertEq(called, false); called = true; throw 17; } }); + throw new Error("didn't throw"); +} +catch (e) +{ + assertEq(e, 17); +} + +assertEq(called, true); +assertEq(r.lastIndex, obj); + +// We don't test lack of an argument because of RegExp statics non-standard +// behaviors overriding what really should happen for lack of an argument, sigh. + + +/* + * 3. Let length be the length of S. + * 4. Let lastIndex be the result of calling the [[Get]] internal method of R with argument "lastIndex". + * 5. Let i be the value of ToInteger(lastIndex). + */ +r = /b/; +r.lastIndex = { valueOf: {}, toString: {} }; +expectThrowTypeError(function() { r.exec("foopy"); }); +r.lastIndex = { valueOf: function() { throw new TypeError(); } }; +expectThrowTypeError(function() { r.exec("foopy"); }); + + +/* + * 6. Let global be the result of calling the [[Get]] internal method of R with argument "global". + * 7. If global is false, then let i = 0. + */ +obj = { valueOf: function() { return 5; } }; +r = /abc/; +r.lastIndex = obj; + +checkExec("/abc/ take one", r, ["abc-------abc"], + { lastIndex: obj, + index: 0, + input: "abc-------abc", + indexArray: ["abc"] }); + +checkExec("/abc/ take two", r, ["abc-------abc"], + { lastIndex: obj, + index: 0, + input: "abc-------abc", + indexArray: ["abc"] }); + + +/* + * 8. Let matchSucceeded be false. + * 9. Repeat, while matchSucceeded is false + * a. If i < 0 or i > length, then + * i. Call the [[Put]] internal method of R with arguments "lastIndex", 0, and true. + * ii. Return null. + * b. Call the [[Match]] internal method of R with arguments S and i. + * c. If [[Match]] returned failure, then + * i. Let i = i+1. + * d. else + * i. Let r be the State result of the call to [[Match]]. + * ii. Set matchSucceeded to true. + * e. Let i = i+1. + */ +r = /abc()?/; +r.lastIndex = -5; +checkExec("/abc()?/ with lastIndex -5", r, ["abc-------abc"], + { lastIndex: -5, + index: 0, + input: "abc-------abc", + indexArray: ["abc", undefined] }); + + +r = /abc/; +r.lastIndex = -17; +res = r.exec("cdefg"); +assertEq(res, null); +assertEq(r.lastIndex, 0); + +r = /abc/g; +r.lastIndex = -42; +res = r.exec("cdefg"); +assertEq(res, null); +assertEq(r.lastIndex, 0); + + +/* + * 10. Let e be r's endIndex value. + * 11. If global is true, + * a. Call the [[Put]] internal method of R with arguments "lastIndex", e, and true. + */ +r = /abc/g; +r.lastIndex = 17; +assertEq(r.exec("sdfs"), null); +assertEq(r.lastIndex, 0); + +r = /abc/g; +r.lastIndex = 2; +checkExec("/abc/g", r, ["00abc"], + { lastIndex: 5, + index: 2, + input: "00abc", + indexArray: ["abc"] }); + + + +r = /a(b)c/g; +r.lastIndex = 2; +checkExec("/a(b)c/g take two", r, ["00abcd"], + { lastIndex: 5, + index: 2, + input: "00abcd", + indexArray: ["abc", "b"] }); + + +/* + * 12. Let n be the length of r's captures array. (This is the same value as + * 15.10.2.1's NCapturingParens.) + * 13. Let A be a new array created as if by the expression new Array() where + * Array is the standard built-in constructor with that name. + * 14. Let matchIndex be the position of the matched substring within the + * complete String S. + * 15. Call the [[DefineOwnProperty]] internal method of A with arguments + * "index", Property Descriptor {[[Value]]: matchIndex, [[Writable]: true, + * [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 16. Call the [[DefineOwnProperty]] internal method of A with arguments + * "input", Property Descriptor {[[Value]]: S, [[Writable]: true, + * [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 17. Call the [[DefineOwnProperty]] internal method of A with arguments + * "length", Property Descriptor {[[Value]]: n + 1}, and true. + * 18. Let matchedSubstr be the matched substring (i.e. the portion of S + * between offset i inclusive and offset e exclusive). + * 19. Call the [[DefineOwnProperty]] internal method of A with arguments "0", + * Property Descriptor {[[Value]]: matchedSubstr, [[Writable]: true, + * [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 20. For each integer i such that I > 0 and I ≤ n + * a. Let captureI be i th element of r's captures array. + * b. Call the [[DefineOwnProperty]] internal method of A with arguments + * ToString(i), Property Descriptor {[[Value]]: captureI, [[Writable]: + * true, [[Enumerable]]: true, [[Configurable]]: true}, and true. + * 21. Return A. + */ +// throughout, above (and in other tests) + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/instance-property-storage-introspection.js b/source/spidermonkey-tests/ecma_5/RegExp/instance-property-storage-introspection.js new file mode 100644 index 00000000..42fb189a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/instance-property-storage-introspection.js @@ -0,0 +1,153 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 640072; +var summary = + "Represent /a/.{lastIndex,global,source,multiline,sticky,ignoreCase} with " + + "plain old data properties"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function checkDataProperty(obj, p, expect, msg) +{ + var d = Object.getOwnPropertyDescriptor(obj, p); + + assertEq(d.value, expect.value, msg + ": bad value for " + p); + assertEq(d.writable, expect.writable, msg + ": bad writable for " + p); + assertEq(d.enumerable, expect.enumerable, msg + ": bad enumerable for " + p); + assertEq(d.configurable, expect.configurable, msg + ": bad configurable for " + p); + + // Try redefining the property using its initial values: these should all be + // silent no-ops. + Object.defineProperty(obj, p, { value: expect.value }); + Object.defineProperty(obj, p, { writable: expect.writable }); + Object.defineProperty(obj, p, { enumerable: expect.enumerable }); + Object.defineProperty(obj, p, { configurable: expect.configurable }); + + var d2 = Object.getOwnPropertyDescriptor(obj, p); + assertEq(d.value, d2.value, msg + ": value changed on redefinition of " + p + "?"); + assertEq(d.writable, d2.writable, msg + ": writable changed on redefinition of " + p + "?"); + assertEq(d.enumerable, d2.enumerable, msg + ": enumerable changed on redefinition of " + p + "?"); + assertEq(d.configurable, d2.configurable, msg + ": configurable changed on redefinition of " + p + "?"); +} + + +// Check a bunch of "empty" regular expressions first. + +var choices = [{ msg: "RegExp.prototype", + get: function() { return RegExp.prototype; } }, + { msg: "new RegExp()", + get: function() { return new RegExp(); } }, + { msg: "/(?:)/", + get: Function("return /(?:)/;") }]; + +function checkRegExp(r, msg, lastIndex, global, ignoreCase, multiline) +{ + var expect; + + expect = { value: lastIndex, enumerable: false, configurable: false, writable: true }; + checkDataProperty(r, "lastIndex", expect, msg); + + // check source specially: its value is under-defined in the spec + var d = Object.getOwnPropertyDescriptor(r, "source"); + assertEq(d.writable, false, "bad writable: " + msg); + assertEq(d.enumerable, false, "bad enumerable: " + msg); + assertEq(d.configurable, false, "bad configurable: " + msg); + + expect = { value: global, enumerable: false, configurable: false, writable: false }; + checkDataProperty(r, "global", expect, msg); + + expect = { value: ignoreCase, enumerable: false, configurable: false, writable: false }; + checkDataProperty(r, "ignoreCase", expect, msg); + + expect = { value: multiline, enumerable: false, configurable: false, writable: false }; + checkDataProperty(r, "multiline", expect, msg); +} + +checkRegExp(RegExp.prototype, "RegExp.prototype", 0, false, false, false); +checkRegExp(new RegExp(), "new RegExp()", 0, false, false, false); +checkRegExp(/(?:)/, "/(?:)/", 0, false, false, false); +checkRegExp(Function("return /(?:)/;")(), 'Function("return /(?:)/;")()', 0, false, false, false); + +for (var i = 0; i < choices.length; i++) +{ + var choice = choices[i]; + var msg = choice.msg; + var r = choice.get(); + + checkRegExp(r, msg, 0, false, false, false); +} + +// Now test less generic regular expressions + +checkRegExp(/a/gim, "/a/gim", 0, true, true, true); + +var r; + +do +{ + r = /abcd/mg; + checkRegExp(r, "/abcd/mg initially", 0, true, false, true); + r.exec("abcdefg"); + checkRegExp(r, "/abcd/mg step 1", 4, true, false, true); + r.exec("abcdabcd"); + checkRegExp(r, "/abcd/mg step 2", 8, true, false, true); + r.exec("abcdabcd"); + checkRegExp(r, "/abcd/mg end", 0, true, false, true); + + r = /cde/ig; + checkRegExp(r, "/cde/ig initially", 0, true, true, false); + var obj = r.lastIndex = { valueOf: function() { return 2; } }; + checkRegExp(r, "/cde/ig after lastIndex", obj, true, true, false); + r.exec("aaacdef"); + checkRegExp(r, "/cde/ig after exec", 6, true, true, false); + Object.defineProperty(r, "lastIndex", { value: 3 }); + checkRegExp(r, "/cde/ig after define 3", 3, true, true, false); + Object.defineProperty(r, "lastIndex", { value: obj }); + checkRegExp(r, "/cde/ig after lastIndex", obj, true, true, false); + + + // Tricky bits of testing: make sure that redefining lastIndex doesn't change + // the slot where the lastIndex property is initially stored, even if + // the redefinition also changes writability. + r = /a/g; + checkRegExp(r, "/a/g initially", 0, true, false, false); + Object.defineProperty(r, "lastIndex", { value: 2 }); + r.exec("aabbbba"); + checkRegExp(r, "/a/g after first exec", 7, true, false, false); + assertEq(r.lastIndex, 7); + r.lastIndex = 2; + checkRegExp(r, "/a/g after assign", 2, true, false, false); + r.exec("aabbbba"); + assertEq(r.lastIndex, 7); // check in reverse order + checkRegExp(r, "/a/g after second exec", 7, true, false, false); + + r = /c/g; + r.lastIndex = 2; + checkRegExp(r, "/c/g initially", 2, true, false, false); + Object.defineProperty(r, "lastIndex", { writable: false }); + assertEq(Object.getOwnPropertyDescriptor(r, "lastIndex").writable, false); + try { r.exec("aabbbba"); } catch (e) { /* swallow error if thrown */ } + assertEq(Object.getOwnPropertyDescriptor(r, "lastIndex").writable, false); + assertEq(Object.getOwnPropertyDescriptor(r, "source").writable, false); + assertEq(Object.getOwnPropertyDescriptor(r, "global").value, true); + assertEq(Object.getOwnPropertyDescriptor(r, "global").writable, false); + assertEq(Object.getOwnPropertyDescriptor(r, "ignoreCase").value, false); + assertEq(Object.getOwnPropertyDescriptor(r, "ignoreCase").writable, false); + assertEq(Object.getOwnPropertyDescriptor(r, "multiline").value, false); + assertEq(Object.getOwnPropertyDescriptor(r, "multiline").writable, false); +} +while (Math.random() > 17); // fake loop to discourage RegExp object caching + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/regexp-space-character-class.js b/source/spidermonkey-tests/ecma_5/RegExp/regexp-space-character-class.js new file mode 100644 index 00000000..5a19e407 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/regexp-space-character-class.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public +* License, v. 2.0. If a copy of the MPL was not distributed with this +* file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var gTestfile = 'regexp-space-character-class.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 514808; +var summary = 'Correct space character class in regexes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +var spaces = [ "\u0009", "\u000b", "\u000c", "\u0020", "\u00a0", "\u1680", +"\u180e", "\u2000", "\u2001", "\u2002", "\u2003", "\u2004", +"\u2005", "\u2006", "\u2007", "\u2008", "\u2009", "\u200a", +"\u202f", "\u205f", "\u3000", "\ufeff" ]; +var line_terminators = [ "\u2028", "\u2029", "\u000a", "\u000d" ]; +var space_chars = [].concat(spaces, line_terminators); + +var non_space_chars = [ "\u200b", "\u200c", "\u200d" ]; + +var chars = [].concat(space_chars, non_space_chars); +var is_space = [].concat(space_chars.map(function(ch) { return true; }), +non_space_chars.map(function(ch) { return false; })); +var expect = is_space.join(','); + +var actual = chars.map(function(ch) { return /\s/.test(ch); }).join(','); +reportCompare(expect, actual, summary); + +jit(true); +var actual = chars.map(function(ch) { return /\s/.test(ch); }).join(','); +reportCompare(expect, actual, summary); +jit(false); + +exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_5/RegExp/regress-429241.js b/source/spidermonkey-tests/ecma_5/RegExp/regress-429241.js new file mode 100644 index 00000000..a4b588fe --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/regress-429241.js @@ -0,0 +1,200 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var gTestfile = 'regress-429241.js'; +var BUGNUMBER = 429241; +var summary = '\\x or \\u followed by too few hex digits'; +var r; + +reportCompare( + "x", + (r = /[\x]+/.exec("\\x\0")) && r[0], + "Section 1" +); + +reportCompare( + "xy", + (r = /[\xy]+/.exec("\\xy\0")) && r[0], + "Section 2" +); + +reportCompare( + "x0", + (r = /[\x0]+/.exec("\\x0\0")) && r[0], + "Section 3" +); + +reportCompare( + "x0y", + (r = /[\x0y]+/.exec("\\x0y\0")) && r[0], + "Section 4" +); + +reportCompare( + "\0", + (r = /[\x00]+/.exec("\\x\0")) && r[0], + "Section 5" +); + +reportCompare( + "0\0", + (r = /[\x000]+/.exec("0\0")) && r[0], + "Section 6" +); + +reportCompare( + "x", + (r = /^\x$/.exec("x")) && r[0], + "Section 7" +); + +reportCompare( + "xy", + (r = /^\xy$/.exec("xy")) && r[0], + "Section 8" +); + +reportCompare( + "x0", + (r = /^\x0$/.exec("x0")) && r[0], + "Section 9" +); + +reportCompare( + "x0y", + (r = /^\x0y$/.exec("x0y")) && r[0], + "Section 10" +); + +reportCompare( + null, + /^\x00$/.exec("\0" + "0"), + "Section 11" +); + +reportCompare( + "\0" + "0", + (r = /^\x000$/.exec("\0" + "0")) && r[0], + "Section 12" +); + +reportCompare( + "u", + (r = /[\u]+/.exec("\\u\0")) && r[0], + "Section 13" +); + +reportCompare( + "uy", + (r = /[\uy]+/.exec("\\uy\0")) && r[0], + "Section 14" +); + +reportCompare( + "u0", + (r = /[\u0]+/.exec("\\u0\0")) && r[0], + "Section 15" +); + +reportCompare( + "u0", + (r = /[\u00]+/.exec("\\u0\0")) && r[0], + "Section 16" +); + +reportCompare( + "u0", + (r = /[\u000]+/.exec("\\u0\0")) && r[0], + "Section 17" +); + +reportCompare( + "u0y", + (r = /[\u0y]+/.exec("\\u0y\0")) && r[0], + "Section 18" +); + +reportCompare( + "u0y", + (r = /[\u00y]+/.exec("\\u0y\0")) && r[0], + "Section 19" +); + +reportCompare( + "u0y", + (r = /[\u000y]+/.exec("\\u0y\0")) && r[0], + "Section 20" +); + +reportCompare( + "\0", + (r = /[\u0000]+/.exec("\\u\0")) && r[0], + "Section 21" +); + +reportCompare( + "0\0", + (r = /[\u00000]+/.exec("0\0")) && r[0], + "Section 22" +); + +reportCompare( + "u", + (r = /^\u$/.exec("u")) && r[0], + "Section 23" +); + +reportCompare( + "uy", + (r = /^\uy$/.exec("uy")) && r[0], + "Section 24" +); + +reportCompare( + "u0", + (r = /^\u0$/.exec("u0")) && r[0], + "Section 25" +); + +reportCompare( + "u00", + (r = /^\u00$/.exec("u00")) && r[0], + "Section 26" +); + +reportCompare( + "u000", + (r = /^\u000$/.exec("u000")) && r[0], + "Section 27" +); + +reportCompare( + "u0y", + (r = /^\u0y$/.exec("u0y")) && r[0], + "Section 28" +); + +reportCompare( + "u00y", + (r = /^\u00y$/.exec("u00y")) && r[0], + "Section 29" +); + +reportCompare( + "u000y", + (r = /^\u000y$/.exec("u000y")) && r[0], + "Section 30" +); + +reportCompare( + null, + /^\u0000$/.exec("\0" + "0"), + "Section 31" +); + +reportCompare( + "\0" + "0", + (r = /^\u00000$/.exec("\0" + "0")) && r[0], + "Section 32" +); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/regress-576828.js b/source/spidermonkey-tests/ecma_5/RegExp/regress-576828.js new file mode 100644 index 00000000..45e97dc3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/regress-576828.js @@ -0,0 +1,8 @@ +var re = /(z\1){3}/; +var str = 'zzz'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['zzz', 'z'], 0, str); +checkRegExpMatch(actual, expected); + +if (typeof reportCompare == 'function') + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-1.js b/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-1.js new file mode 100644 index 00000000..e5e755b2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-1.js @@ -0,0 +1,9 @@ +/* Back reference is actually a forwards reference. */ +var re = /(\2(a)){2}/; +var str = 'aaa'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['aa', 'a', 'a'], 0, str); +checkRegExpMatch(actual, expected); + +if (typeof reportCompare === 'function') + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-2.js b/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-2.js new file mode 100644 index 00000000..5db7244b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-2.js @@ -0,0 +1,9 @@ +/* Resetting of inner capture groups across quantified capturing parens. */ +var re = /(?:(f)(o)(o)|(b)(a)(r))*/; +var str = 'foobar'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['foobar', undefined, undefined, undefined, 'b', 'a', 'r'], 0, str); +checkRegExpMatch(actual, expected); + +if (typeof reportCompare === 'function') + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-3.js b/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-3.js new file mode 100644 index 00000000..126e838f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/regress-613820-3.js @@ -0,0 +1,9 @@ +/* Capture group reset to undefined during second iteration, so backreference doesn't see prior result. */ +var re = /(?:^(a)|\1(a)|(ab)){2}/; +var str = 'aab'; +var actual = re.exec(str); +var expected = makeExpectedMatch(['aa', undefined, 'a', undefined], 0, str); +checkRegExpMatch(actual, expected); + +if (typeof reportCompare === 'function') + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/regress-617935.js b/source/spidermonkey-tests/ecma_5/RegExp/regress-617935.js new file mode 100644 index 00000000..3764d81b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/regress-617935.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(!xulRuntime.shell&&(Android||xulRuntime.OS=="WINNT")) silentfail +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * + * Author: Christian Holler + */ + +expectExitCode(0); +expectExitCode(5); + +/* Length of 32 */ +var foo = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + +/* Make len(foo) 32768 */ +for (i = 0; i < 10; ++i) { + foo += foo; +} + +/* Add one "a" to cause overflow later */ +foo += "a"; + +var bar = "bbbbbbbbbbbbbbbb"; + +/* Make len(bar) 8192 */ +for (i = 0; i < 9; ++i) { + bar += bar; +} + +/* + * Resulting string should be + * len(foo) * len(bar) = (2**10 * 32 + 1) * 8192 = 268443648 + * which will be larger than the max string length (2**28, or 268435456). + */ +try { + foo.replace(/[a]/g, bar); +} catch (e) { + reportCompare(e instanceof InternalError, true, "Internal error due to overallocation is ok."); +} +reportCompare(true, true, "No crash occurred."); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/RegExp/shell.js b/source/spidermonkey-tests/ecma_5/RegExp/shell.js new file mode 100644 index 00000000..0ce9f087 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/RegExp/shell.js @@ -0,0 +1,21 @@ +function makeExpectedMatch(arr, index, input) { + var expectedMatch = { + index: index, + input: input, + length: arr.length, + }; + + for (var i = 0; i < arr.length; ++i) + expectedMatch[i] = arr[i]; + + return expectedMatch; +} + +function checkRegExpMatch(actual, expected) { + assertEq(actual.length, expected.length); + for (var i = 0; i < actual.length; ++i) + assertEq(actual[i], expected[i]); + + assertEq(actual.index, expected.index); + assertEq(actual.input, expected.input); +} diff --git a/source/spidermonkey-tests/ecma_5/String/15.5.4.11-01.js b/source/spidermonkey-tests/ecma_5/String/15.5.4.11-01.js new file mode 100644 index 00000000..2125cbf8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/15.5.4.11-01.js @@ -0,0 +1,66 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 587366; +var summary = "String.prototype.replace with non-regexp searchValue"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* + * Check that regexp statics are preserved across the whole test. + * If the engine is trying to cheat by turning stuff into regexps, + * we should catch it! + */ +/(a|(b)|c)+/.exec('abcabc'); +var before = { + "source" : RegExp.source, + "$`": RegExp.leftContext, + "$'": RegExp.rightContext, + "$&": RegExp.lastMatch, + "$1": RegExp.$1, + "$2": RegExp.$2 +}; + +var text = 'I once was lost but now am found.'; +var searchValue = 'found'; +var replaceValue; + +/* Lambda substitution. */ +replaceValue = function(matchStr, matchStart, textStr) { + assertEq(matchStr, searchValue); + assertEq(matchStart, 27); + assertEq(textStr, text); + return 'not watching that show anymore'; +} +var result = text.replace(searchValue, replaceValue); +assertEq(result, 'I once was lost but now am not watching that show anymore.'); + +/* Dollar substitution. */ +replaceValue = "...wait, where was I again? And where is all my $$$$$$? Oh right, $`$&$'" + + " But with no $$$$$$"; /* Note the dot is not replaced and trails the end. */ +result = text.replace(searchValue, replaceValue); +assertEq(result, 'I once was lost but now am ...wait, where was I again?' + + ' And where is all my $$$? Oh right, I once was lost but now am found.' + + ' But with no $$$.'); + +/* Missing capture group dollar substitution. */ +replaceValue = "$1$&$2$'$3"; +result = text.replace(searchValue, replaceValue); +assertEq(result, 'I once was lost but now am $1found$2.$3.'); + +/* Check RegExp statics haven't been mutated. */ +for (var ident in before) + assertEq(RegExp[ident], before[ident]); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/String/15.5.4.2.js b/source/spidermonkey-tests/ecma_5/String/15.5.4.2.js new file mode 100644 index 00000000..46c7ccb6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/15.5.4.2.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(raisesException(TypeError)('String.prototype.toString.call(42)'), true); +assertEq(raisesException(TypeError)('String.prototype.toString.call(true)'), true); +assertEq(raisesException(TypeError)('String.prototype.toString.call({})'), true); +assertEq(raisesException(TypeError)('String.prototype.toString.call(null)'), true); +assertEq(raisesException(TypeError)('String.prototype.toString.call([])'), true); +assertEq(raisesException(TypeError)('String.prototype.toString.call(undefined)'), true); +assertEq(completesNormally('String.prototype.toString.call("")'), true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/String/15.5.4.7.js b/source/spidermonkey-tests/ecma_5/String/15.5.4.7.js new file mode 100644 index 00000000..4303b797 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/15.5.4.7.js @@ -0,0 +1,20 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 612838; +var summary = "String.prototype.indexOf with empty searchString"; + +print(BUGNUMBER + ": " + summary); + +assertEq("123".indexOf("", -1), 0); +assertEq("123".indexOf("", 0), 0); +assertEq("123".indexOf("", 1), 1); +assertEq("123".indexOf("", 3), 3); +assertEq("123".indexOf("", 4), 3); +assertEq("123".indexOf("", 12345), 3); + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/String/browser.js b/source/spidermonkey-tests/ecma_5/String/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/String/defaultvalue.js b/source/spidermonkey-tests/ecma_5/String/defaultvalue.js new file mode 100644 index 00000000..50b4fe00 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/defaultvalue.js @@ -0,0 +1,169 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 645464; +var summary = + "[[DefaultValue]] behavior wrong for String with overridden valueOf/toString"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// equality + +var s = new String("c"); +assertEq(s == "c", true); + +var s2 = new String(); +s2.valueOf = function() { return "foo"; }; +assertEq(s2 == "foo", true); + +var s3 = new String(); +s3.toString = function() { return "bar"; }; +assertEq(s3 == "", true); + +function testEquality() +{ + var s = new String("c"); + assertEq(s == "c", true); + + var s2 = new String(); + s2.valueOf = function() { return "foo"; }; + assertEq(s2 == "foo", true); + + var s3 = new String(); + s3.toString = function() { return "bar"; }; + assertEq(s3 == "", true); +} +testEquality(); + + +// addition of String to string + +var s = new String(); +assertEq(s + "", ""); + +var s2 = new String(); +s2.toString = function() { return "bar"; }; +assertEq(s2 + "", ""); + +var s3 = new String(); +s3.valueOf = function() { return "baz"; }; +assertEq(s3 + "", "baz"); + +function testStringAddition() +{ + var s = new String(); + assertEq(s + "", ""); + + var s2 = new String(); + s2.toString = function() { return "bar"; }; + assertEq(s2 + "", ""); + + var s3 = new String(); + s3.valueOf = function() { return "baz"; }; + assertEq(s3 + "", "baz"); +} +testStringAddition(); + + +// addition of String to String + +var s = new String(); +assertEq(s + s, ""); + +var s2 = new String(); +s2.toString = function() { return "baz"; }; +assertEq(s2 + s2, ""); + +var s3 = new String(); +s3.valueOf = function() { return "quux"; }; +assertEq(s3 + s3, "quuxquux"); + +function testNonStringAddition() +{ + var s = new String(); + assertEq(s + s, ""); + + var s2 = new String(); + s2.toString = function() { return "baz"; }; + assertEq(s2 + s2, ""); + + var s3 = new String(); + s3.valueOf = function() { return "quux"; }; + assertEq(s3 + s3, "quuxquux"); +} +testNonStringAddition(); + + +// String as bracketed property name + +var obj = { primitive: 17, valueOf: 42, toString: 8675309 }; + +var s = new String("primitive"); +assertEq(obj[s], 17); + +var s2 = new String("primitive"); +s2.valueOf = function() { return "valueOf"; } +assertEq(obj[s2], 17); + +var s3 = new String("primitive"); +s3.toString = function() { return "toString"; }; +assertEq(obj[s3], 8675309); + +function testPropertyNameToString() +{ + var obj = { primitive: 17, valueOf: 42, toString: 8675309 }; + + var s = new String("primitive"); + assertEq(obj[s], 17); + + var s2 = new String("primitive"); + s2.valueOf = function() { return "valueOf"; } + assertEq(obj[s2], 17); + + var s3 = new String("primitive"); + s3.toString = function() { return "toString"; }; + assertEq(obj[s3], 8675309); +} +testPropertyNameToString(); + + +// String as property name with |in| operator + +var s = new String(); +assertEq(s in { "": 5 }, true); + +var s2 = new String(); +s.toString = function() { return "baz"; }; +assertEq(s in { baz: 42 }, true); + +var s3 = new String(); +s3.valueOf = function() { return "quux"; }; +assertEq(s3 in { "": 17 }, true); + +function testInOperatorName() +{ + var s = new String(); + assertEq(s in { "": 5 }, true); + + var s2 = new String(); + s.toString = function() { return "baz"; }; + assertEq(s in { baz: 42 }, true); + + var s3 = new String(); + s3.valueOf = function() { return "quux"; }; + assertEq(s3 in { "": 17 }, true); +} +testInOperatorName(); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/String/match-defines-match-elements.js b/source/spidermonkey-tests/ecma_5/String/match-defines-match-elements.js new file mode 100644 index 00000000..e1a38e30 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/match-defines-match-elements.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 677820; +var summary = + "String.prototype.match must define matches on the returned array, not set " + + "them"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var called = false; +function setterFunction(v) { called = true; } +function getterFunction(v) { return "getter"; } + +Object.defineProperty(Array.prototype, 1, + { get: getterFunction, set: setterFunction }); + +assertEq(called, false); +var matches = "abcdef".match(/./g); +assertEq(called, false); +assertEq(matches.length, 6); +assertEq(matches[0], "a"); +assertEq(matches[1], "b"); +assertEq(matches[2], "c"); +assertEq(matches[3], "d"); +assertEq(matches[4], "e"); +assertEq(matches[5], "f"); + +var desc = Object.getOwnPropertyDescriptor(Array.prototype, 1); +assertEq(desc.get, getterFunction); +assertEq(desc.set, setterFunction); +assertEq(desc.enumerable, false); +assertEq(desc.configurable, false); +assertEq([][1], "getter"); + +assertEq(called, false); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/String/match-forward-lookahead.js b/source/spidermonkey-tests/ecma_5/String/match-forward-lookahead.js new file mode 100644 index 00000000..6097b660 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/match-forward-lookahead.js @@ -0,0 +1,27 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 501739; +var summary = + "String.prototype.match behavior with zero-length matches involving " + + "forward lookahead"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var r = /(?=x)/g; + +var res = "aaaaaaaaaxaaaaaaaaax".match(r); +assertEq(res.length, 2); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/String/match-throws-nonwritable-lastIndex-global.js b/source/spidermonkey-tests/ecma_5/String/match-throws-nonwritable-lastIndex-global.js new file mode 100644 index 00000000..b36916d4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/match-throws-nonwritable-lastIndex-global.js @@ -0,0 +1,88 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 501739; +var summary = + "String.prototype.match should throw when called with a global RegExp " + + "whose .lastIndex is non-writable"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; + +// First time with .lastIndex === 0 + +var p1 = /x/g; +Object.defineProperty(p1, "lastIndex", { writable: false }); + +try +{ + s.match(p1); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +// Second time with .lastIndex !== 0 + +var p2 = /x/g; +Object.defineProperty(p2, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.match(p2); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +// Third time with .lastIndex === 0, no matches + +var p3 = /q/g; +Object.defineProperty(p3, "lastIndex", { writable: false }); + +try +{ + s.match(p3); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +// Fourth time with .lastIndex !== 0, no matches + +var p4 = /q/g; +Object.defineProperty(p4, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.match(p4); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/String/match-updates-global-lastIndex.js b/source/spidermonkey-tests/ecma_5/String/match-updates-global-lastIndex.js new file mode 100644 index 00000000..cc18219a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/match-updates-global-lastIndex.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 501739; +var summary = + "String.prototype.match should zero the .lastIndex when called with a " + + "global RegExp"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; +var p = /x/g; +p.lastIndex = 3; + +var arr = s.match(p); +assertEq(arr.length, 4); +arr.forEach(function(v) { assertEq(v, "x"); }); +assertEq(p.lastIndex, 0); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/String/replace-math.js b/source/spidermonkey-tests/ecma_5/String/replace-math.js new file mode 100644 index 00000000..bfe3ec02 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/replace-math.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 805121; +var summary = "Be more careful with string math to avoid wrong results"; + +print(BUGNUMBER + ": " + summary); + +/******************************************************************************/ + +function puff(x, n) +{ + while(x.length < n) + x += x; + return x.substring(0, n); +} + +var x = puff("1", 1 << 20); +var rep = puff("$1", 1 << 16); + +try +{ + var y = x.replace(/(.+)/g, rep); + assertEq(y.length, Math.pow(2, 36)); +} +catch (e) +{ + // OOM also acceptable +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/String/replace-throws-nonwritable-lastIndex-global.js b/source/spidermonkey-tests/ecma_5/String/replace-throws-nonwritable-lastIndex-global.js new file mode 100644 index 00000000..8e1c967f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/replace-throws-nonwritable-lastIndex-global.js @@ -0,0 +1,126 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 501739; +var summary = + "String.prototype.replace should throw when called with a global RegExp " + + "whose .lastIndex is non-writable"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; + +// First time with .lastIndex === 0, replacing to '' + +var p1 = /x/g; +Object.defineProperty(p1, "lastIndex", { writable: false }); + +try +{ + s.replace(p1, ''); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assertEq(p1.lastIndex, 0); +} + +// Second time with .lastIndex !== 0, replacing to '' + +var p2 = /x/g; +Object.defineProperty(p2, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.replace(p2, ''); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assertEq(p2.lastIndex, 3); +} + +// Third time with .lastIndex === 0, replacing to 'y' + +var p3 = /x/g; +Object.defineProperty(p3, "lastIndex", { writable: false }); + +try +{ + s.replace(p3, 'y'); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assertEq(p3.lastIndex, 0); +} + +// Fourth time with .lastIndex !== 0, replacing to 'y' + +var p4 = /x/g; +Object.defineProperty(p4, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.replace(p4, ''); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assertEq(p4.lastIndex, 3); +} + +// Fifth time with .lastIndex === 0, replacing to 'y', but no match + +var p5 = /q/g; +Object.defineProperty(p5, "lastIndex", { writable: false }); + +try +{ + s.replace(p5, 'y'); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assertEq(p5.lastIndex, 0); +} + +// Sixth time with .lastIndex !== 0, replacing to 'y', but no match + +var p6 = /q/g; +Object.defineProperty(p6, "lastIndex", { writable: false, value: 3 }); + +try +{ + s.replace(p6, ''); + throw "didn't throw"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "should have thrown a TypeError, instead got: " + e); + assertEq(p6.lastIndex, 3); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/String/replace-updates-global-lastIndex.js b/source/spidermonkey-tests/ecma_5/String/replace-updates-global-lastIndex.js new file mode 100644 index 00000000..c859d709 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/replace-updates-global-lastIndex.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 501739; +var summary = + "String.prototype.relace should zero the .lastIndex when called with a " + + "global RegExp"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var s = '0x2x4x6x8'; + +var p1 = /x/g; +p1.lastIndex = 3; +s.replace(p1, ''); +assertEq(p1.lastIndex, 0); + +var p2 = /x/g; +p2.lastIndex = 3; +var c = 0; +s.replace(p2, function(s) { + assertEq(p2.lastIndex++, c++); + return 'y'; +}); +assertEq(p2.lastIndex, 4); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/String/shell.js b/source/spidermonkey-tests/ecma_5/String/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/String/split-01.js b/source/spidermonkey-tests/ecma_5/String/split-01.js new file mode 100644 index 00000000..3eda3b14 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/split-01.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 614608; +var summary = "String.prototype.split tests"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function assertEqArr(a1, a2) { + assertEq(a1.length, a2.length); + + for(var i=0; iboldandcoded".split(/<(\/)?([^<>]+)>/), + ["A", undefined, "B", "bold", "/", "B", "and", undefined, + "CODE", "coded", "/", "CODE", ""]); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/String/split-undefined-separator.js b/source/spidermonkey-tests/ecma_5/String/split-undefined-separator.js new file mode 100644 index 00000000..46aa6c16 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/String/split-undefined-separator.js @@ -0,0 +1,37 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 614608; +var summary = "String.prototype.split with undefined separator"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function assertEqArr(a1, a2) { + assertEq(a1.length, a2.length); + + for(var i=0; i + * + * Distributed under the terms of the MIT license. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +var BUGNUMBER = 614608; +var summary = "String.prototype.split with regexp separator"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var ecmaSampleRe = /<(\/)?([^<>]+)>/; + +var testCode = [ + ["''.split()", [""]], + ["''.split(/./)", [""]], + ["''.split(/.?/)", []], + ["''.split(/.??/)", []], + ["'ab'.split(/a*/)", ["", "b"]], + ["'ab'.split(/a*?/)", ["a", "b"]], + ["'ab'.split(/(?:ab)/)", ["", ""]], + ["'ab'.split(/(?:ab)*/)", ["", ""]], + ["'ab'.split(/(?:ab)*?/)", ["a", "b"]], + ["'test'.split('')", ["t", "e", "s", "t"]], + ["'test'.split()", ["test"]], + ["'111'.split(1)", ["", "", "", ""]], + ["'test'.split(/(?:)/, 2)", ["t", "e"]], + ["'test'.split(/(?:)/, -1)", ["t", "e", "s", "t"]], + ["'test'.split(/(?:)/, undefined)", ["t", "e", "s", "t"]], + ["'test'.split(/(?:)/, null)", []], + ["'test'.split(/(?:)/, NaN)", []], + ["'test'.split(/(?:)/, true)", ["t"]], + ["'test'.split(/(?:)/, '2')", ["t", "e"]], + ["'test'.split(/(?:)/, 'two')", []], + ["'a'.split(/-/)", ["a"]], + ["'a'.split(/-?/)", ["a"]], + ["'a'.split(/-??/)", ["a"]], + ["'a'.split(/a/)", ["", ""]], + ["'a'.split(/a?/)", ["", ""]], + ["'a'.split(/a??/)", ["a"]], + ["'ab'.split(/-/)", ["ab"]], + ["'ab'.split(/-?/)", ["a", "b"]], + ["'ab'.split(/-??/)", ["a", "b"]], + ["'a-b'.split(/-/)", ["a", "b"]], + ["'a-b'.split(/-?/)", ["a", "b"]], + ["'a-b'.split(/-??/)", ["a", "-", "b"]], + ["'a--b'.split(/-/)", ["a", "", "b"]], + ["'a--b'.split(/-?/)", ["a", "", "b"]], + ["'a--b'.split(/-??/)", ["a", "-", "-", "b"]], + ["''.split(/()()/)", []], + ["'.'.split(/()()/)", ["."]], + ["'.'.split(/(.?)(.?)/)", ["", ".", "", ""]], + ["'.'.split(/(.??)(.??)/)", ["."]], + ["'.'.split(/(.)?(.)?/)", ["", ".", undefined, ""]], + ["'Aboldandcoded'.split(ecmaSampleRe)", + ["A", undefined, "B", "bold", "/", "B", + "and", undefined, "CODE", "coded", "/", + "CODE", ""]], + ["'tesst'.split(/(s)*/)", ["t", undefined, "e", "s", "t"]], + ["'tesst'.split(/(s)*?/)", ["t", undefined, "e", undefined, "s", + undefined, "s", undefined, "t"]], + ["'tesst'.split(/(s*)/)", ["t", "", "e", "ss", "t"]], + ["'tesst'.split(/(s*?)/)", ["t", "", "e", "", "s", "", "s", "", "t"]], + ["'tesst'.split(/(?:s)*/)", ["t", "e", "t"]], + ["'tesst'.split(/(?=s+)/)", ["te", "s", "st"]], + ["'test'.split('t')", ["", "es", ""]], + ["'test'.split('es')", ["t", "t"]], + ["'test'.split(/t/)", ["", "es", ""]], + ["'test'.split(/es/)", ["t", "t"]], + ["'test'.split(/(t)/)", ["", "t", "es", "t", ""]], + ["'test'.split(/(es)/)", ["t", "es", "t"]], + ["'test'.split(/(t)(e)(s)(t)/)", ["", "t", "e", "s", "t", ""]], + ["'.'.split(/(((.((.??)))))/)", ["", ".", ".", ".", "", "", ""]], + ["'.'.split(/(((((.??)))))/)", ["."]] +]; + +function testSplit() { + for (var i = 0; i < testCode.length; i++) { + var actual = eval(testCode[i][0]); + var expected = testCode[i][1]; + + assertEq(actual.length, expected.length); + + for(var j=0; j (NULL) */ + [0x1, 0x1], /* (START OF HEADING) */ + [0x2, 0x2], /* (START OF TEXT) */ + [0x3, 0x3], /* (END OF TEXT) */ + [0x4, 0x4], /* (END OF TRANSMISSION) */ + [0x5, 0x5], /* (ENQUIRY) */ + [0x6, 0x6], /* (ACKNOWLEDGE) */ + [0x7, 0x7], /* (BELL) */ + [0x8, 0x8], /* (BACKSPACE) */ + [0x9, 0x9], /* (CHARACTER TABULATION) */ + [0xa, 0xa], /* (LINE FEED (LF)) */ + [0xb, 0xb], /* (LINE TABULATION) */ + [0xc, 0xc], /* (FORM FEED (FF)) */ + [0xd, 0xd], /* (CARRIAGE RETURN (CR)) */ + [0xe, 0xe], /* (SHIFT OUT) */ + [0xf, 0xf], /* (SHIFT IN) */ + [0x10, 0x10], /* (DATA LINK ESCAPE) */ + [0x11, 0x11], /* (DEVICE CONTROL ONE) */ + [0x12, 0x12], /* (DEVICE CONTROL TWO) */ + [0x13, 0x13], /* (DEVICE CONTROL THREE) */ + [0x14, 0x14], /* (DEVICE CONTROL FOUR) */ + [0x15, 0x15], /* (NEGATIVE ACKNOWLEDGE) */ + [0x16, 0x16], /* (SYNCHRONOUS IDLE) */ + [0x17, 0x17], /* (END OF TRANSMISSION BLOCK) */ + [0x18, 0x18], /* (CANCEL) */ + [0x19, 0x19], /* (END OF MEDIUM) */ + [0x1a, 0x1a], /* (SUBSTITUTE) */ + [0x1b, 0x1b], /* (ESCAPE) */ + [0x1c, 0x1c], /* (INFORMATION SEPARATOR FOUR) */ + [0x1d, 0x1d], /* (INFORMATION SEPARATOR THREE) */ + [0x1e, 0x1e], /* (INFORMATION SEPARATOR TWO) */ + [0x1f, 0x1f], /* (INFORMATION SEPARATOR ONE) */ + [0x20, 0x20], /* SPACE */ + [0x21, 0x21], /* EXCLAMATION MARK */ + [0x22, 0x22], /* QUOTATION MARK */ + [0x23, 0x23], /* NUMBER SIGN */ + [0x24, 0x24], /* DOLLAR SIGN */ + [0x25, 0x25], /* PERCENT SIGN */ + [0x26, 0x26], /* AMPERSAND */ + [0x27, 0x27], /* APOSTROPHE (APOSTROPHE-QUOTE) */ + [0x28, 0x28], /* LEFT PARENTHESIS (OPENING PARENTHESIS) */ + [0x29, 0x29], /* RIGHT PARENTHESIS (CLOSING PARENTHESIS) */ + [0x2a, 0x2a], /* ASTERISK */ + [0x2b, 0x2b], /* PLUS SIGN */ + [0x2c, 0x2c], /* COMMA */ + [0x2d, 0x2d], /* HYPHEN-MINUS */ + [0x2e, 0x2e], /* FULL STOP (PERIOD) */ + [0x2f, 0x2f], /* SOLIDUS (SLASH) */ + [0x30, 0x30], /* DIGIT ZERO */ + [0x31, 0x31], /* DIGIT ONE */ + [0x32, 0x32], /* DIGIT TWO */ + [0x33, 0x33], /* DIGIT THREE */ + [0x34, 0x34], /* DIGIT FOUR */ + [0x35, 0x35], /* DIGIT FIVE */ + [0x36, 0x36], /* DIGIT SIX */ + [0x37, 0x37], /* DIGIT SEVEN */ + [0x38, 0x38], /* DIGIT EIGHT */ + [0x39, 0x39], /* DIGIT NINE */ + [0x3a, 0x3a], /* COLON */ + [0x3b, 0x3b], /* SEMICOLON */ + [0x3c, 0x3c], /* LESS-THAN SIGN */ + [0x3d, 0x3d], /* EQUALS SIGN */ + [0x3e, 0x3e], /* GREATER-THAN SIGN */ + [0x3f, 0x3f], /* QUESTION MARK */ + [0x40, 0x40], /* COMMERCIAL AT */ + [0x41, 0x61], /* LATIN CAPITAL LETTER A */ + [0x42, 0x62], /* LATIN CAPITAL LETTER B */ + [0x43, 0x63], /* LATIN CAPITAL LETTER C */ + [0x44, 0x64], /* LATIN CAPITAL LETTER D */ + [0x45, 0x65], /* LATIN CAPITAL LETTER E */ + [0x46, 0x66], /* LATIN CAPITAL LETTER F */ + [0x47, 0x67], /* LATIN CAPITAL LETTER G */ + [0x48, 0x68], /* LATIN CAPITAL LETTER H */ + [0x49, 0x69], /* LATIN CAPITAL LETTER I */ + [0x4a, 0x6a], /* LATIN CAPITAL LETTER J */ + [0x4b, 0x6b], /* LATIN CAPITAL LETTER K */ + [0x4c, 0x6c], /* LATIN CAPITAL LETTER L */ + [0x4d, 0x6d], /* LATIN CAPITAL LETTER M */ + [0x4e, 0x6e], /* LATIN CAPITAL LETTER N */ + [0x4f, 0x6f], /* LATIN CAPITAL LETTER O */ + [0x50, 0x70], /* LATIN CAPITAL LETTER P */ + [0x51, 0x71], /* LATIN CAPITAL LETTER Q */ + [0x52, 0x72], /* LATIN CAPITAL LETTER R */ + [0x53, 0x73], /* LATIN CAPITAL LETTER S */ + [0x54, 0x74], /* LATIN CAPITAL LETTER T */ + [0x55, 0x75], /* LATIN CAPITAL LETTER U */ + [0x56, 0x76], /* LATIN CAPITAL LETTER V */ + [0x57, 0x77], /* LATIN CAPITAL LETTER W */ + [0x58, 0x78], /* LATIN CAPITAL LETTER X */ + [0x59, 0x79], /* LATIN CAPITAL LETTER Y */ + [0x5a, 0x7a], /* LATIN CAPITAL LETTER Z */ + [0x5b, 0x5b], /* LEFT SQUARE BRACKET (OPENING SQUARE BRACKET) */ + [0x5c, 0x5c], /* REVERSE SOLIDUS (BACKSLASH) */ + [0x5d, 0x5d], /* RIGHT SQUARE BRACKET (CLOSING SQUARE BRACKET) */ + [0x5e, 0x5e], /* CIRCUMFLEX ACCENT (SPACING CIRCUMFLEX) */ + [0x5f, 0x5f], /* LOW LINE (SPACING UNDERSCORE) */ + [0x60, 0x60], /* GRAVE ACCENT (SPACING GRAVE) */ + [0x41, 0x61], /* LATIN SMALL LETTER A */ + [0x42, 0x62], /* LATIN SMALL LETTER B */ + [0x43, 0x63], /* LATIN SMALL LETTER C */ + [0x44, 0x64], /* LATIN SMALL LETTER D */ + [0x45, 0x65], /* LATIN SMALL LETTER E */ + [0x46, 0x66], /* LATIN SMALL LETTER F */ + [0x47, 0x67], /* LATIN SMALL LETTER G */ + [0x48, 0x68], /* LATIN SMALL LETTER H */ + [0x49, 0x69], /* LATIN SMALL LETTER I */ + [0x4a, 0x6a], /* LATIN SMALL LETTER J */ + [0x4b, 0x6b], /* LATIN SMALL LETTER K */ + [0x4c, 0x6c], /* LATIN SMALL LETTER L */ + [0x4d, 0x6d], /* LATIN SMALL LETTER M */ + [0x4e, 0x6e], /* LATIN SMALL LETTER N */ + [0x4f, 0x6f], /* LATIN SMALL LETTER O */ + [0x50, 0x70], /* LATIN SMALL LETTER P */ + [0x51, 0x71], /* LATIN SMALL LETTER Q */ + [0x52, 0x72], /* LATIN SMALL LETTER R */ + [0x53, 0x73], /* LATIN SMALL LETTER S */ + [0x54, 0x74], /* LATIN SMALL LETTER T */ + [0x55, 0x75], /* LATIN SMALL LETTER U */ + [0x56, 0x76], /* LATIN SMALL LETTER V */ + [0x57, 0x77], /* LATIN SMALL LETTER W */ + [0x58, 0x78], /* LATIN SMALL LETTER X */ + [0x59, 0x79], /* LATIN SMALL LETTER Y */ + [0x5a, 0x7a], /* LATIN SMALL LETTER Z */ + [0x7b, 0x7b], /* LEFT CURLY BRACKET (OPENING CURLY BRACKET) */ + [0x7c, 0x7c], /* VERTICAL LINE (VERTICAL BAR) */ + [0x7d, 0x7d], /* RIGHT CURLY BRACKET (CLOSING CURLY BRACKET) */ + [0x7e, 0x7e], /* TILDE */ + [0x7f, 0x7f], /* (DELETE) */ + [0x80, 0x80], /* */ + [0x81, 0x81], /* */ + [0x82, 0x82], /* (BREAK PERMITTED HERE) */ + [0x83, 0x83], /* (NO BREAK HERE) */ + [0x84, 0x84], /* */ + [0x85, 0x85], /* (NEXT LINE (NEL)) */ + [0x86, 0x86], /* (START OF SELECTED AREA) */ + [0x87, 0x87], /* (END OF SELECTED AREA) */ + [0x88, 0x88], /* (CHARACTER TABULATION SET) */ + [0x89, 0x89], /* (CHARACTER TABULATION WITH JUSTIFICATION) */ + [0x8a, 0x8a], /* (LINE TABULATION SET) */ + [0x8b, 0x8b], /* (PARTIAL LINE FORWARD) */ + [0x8c, 0x8c], /* (PARTIAL LINE BACKWARD) */ + [0x8d, 0x8d], /* (REVERSE LINE FEED) */ + [0x8e, 0x8e], /* (SINGLE SHIFT TWO) */ + [0x8f, 0x8f], /* (SINGLE SHIFT THREE) */ + [0x90, 0x90], /* (DEVICE CONTROL STRING) */ + [0x91, 0x91], /* (PRIVATE USE ONE) */ + [0x92, 0x92], /* (PRIVATE USE TWO) */ + [0x93, 0x93], /* (SET TRANSMIT STATE) */ + [0x94, 0x94], /* (CANCEL CHARACTER) */ + [0x95, 0x95], /* (MESSAGE WAITING) */ + [0x96, 0x96], /* (START OF GUARDED AREA) */ + [0x97, 0x97], /* (END OF GUARDED AREA) */ + [0x98, 0x98], /* (START OF STRING) */ + [0x99, 0x99], /* */ + [0x9a, 0x9a], /* (SINGLE CHARACTER INTRODUCER) */ + [0x9b, 0x9b], /* (CONTROL SEQUENCE INTRODUCER) */ + [0x9c, 0x9c], /* (STRING TERMINATOR) */ + [0x9d, 0x9d], /* (OPERATING SYSTEM COMMAND) */ + [0x9e, 0x9e], /* (PRIVACY MESSAGE) */ + [0x9f, 0x9f], /* (APPLICATION PROGRAM COMMAND) */ + [0xa0, 0xa0], /* NO-BREAK SPACE (NON-BREAKING SPACE) */ + [0xa1, 0xa1], /* INVERTED EXCLAMATION MARK */ + [0xa2, 0xa2], /* CENT SIGN */ + [0xa3, 0xa3], /* POUND SIGN */ + [0xa4, 0xa4], /* CURRENCY SIGN */ + [0xa5, 0xa5], /* YEN SIGN */ + [0xa6, 0xa6], /* BROKEN BAR (BROKEN VERTICAL BAR) */ + [0xa7, 0xa7], /* SECTION SIGN */ + [0xa8, 0xa8], /* DIAERESIS (SPACING DIAERESIS) */ + [0xa9, 0xa9], /* COPYRIGHT SIGN */ + [0xaa, 0xaa], /* FEMININE ORDINAL INDICATOR */ + [0xab, 0xab], /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (LEFT POINTING GUILLEMET) */ + [0xac, 0xac], /* NOT SIGN */ + [0xad, 0xad], /* SOFT HYPHEN */ + [0xae, 0xae], /* REGISTERED SIGN (REGISTERED TRADE MARK SIGN) */ + [0xaf, 0xaf], /* MACRON (SPACING MACRON) */ + [0xb0, 0xb0], /* DEGREE SIGN */ + [0xb1, 0xb1], /* PLUS-MINUS SIGN (PLUS-OR-MINUS SIGN) */ + [0xb2, 0xb2], /* SUPERSCRIPT TWO (SUPERSCRIPT DIGIT TWO) */ + [0xb3, 0xb3], /* SUPERSCRIPT THREE (SUPERSCRIPT DIGIT THREE) */ + [0xb4, 0xb4], /* ACUTE ACCENT (SPACING ACUTE) */ + [0x39c, 0xb5], /* MICRO SIGN */ + [0xb6, 0xb6], /* PILCROW SIGN (PARAGRAPH SIGN) */ + [0xb7, 0xb7], /* MIDDLE DOT */ + [0xb8, 0xb8], /* CEDILLA (SPACING CEDILLA) */ + [0xb9, 0xb9], /* SUPERSCRIPT ONE (SUPERSCRIPT DIGIT ONE) */ + [0xba, 0xba], /* MASCULINE ORDINAL INDICATOR */ + [0xbb, 0xbb], /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (RIGHT POINTING GUILLEMET) */ + [0xbc, 0xbc], /* VULGAR FRACTION ONE QUARTER (FRACTION ONE QUARTER) */ + [0xbd, 0xbd], /* VULGAR FRACTION ONE HALF (FRACTION ONE HALF) */ + [0xbe, 0xbe], /* VULGAR FRACTION THREE QUARTERS (FRACTION THREE QUARTERS) */ + [0xbf, 0xbf], /* INVERTED QUESTION MARK */ + [0xc0, 0xe0], /* LATIN CAPITAL LETTER A WITH GRAVE (LATIN CAPITAL LETTER A GRAVE) */ + [0xc1, 0xe1], /* LATIN CAPITAL LETTER A WITH ACUTE (LATIN CAPITAL LETTER A ACUTE) */ + [0xc2, 0xe2], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX (LATIN CAPITAL LETTER A CIRCUMFLEX) */ + [0xc3, 0xe3], /* LATIN CAPITAL LETTER A WITH TILDE (LATIN CAPITAL LETTER A TILDE) */ + [0xc4, 0xe4], /* LATIN CAPITAL LETTER A WITH DIAERESIS (LATIN CAPITAL LETTER A DIAERESIS) */ + [0xc5, 0xe5], /* LATIN CAPITAL LETTER A WITH RING ABOVE (LATIN CAPITAL LETTER A RING) */ + [0xc6, 0xe6], /* LATIN CAPITAL LETTER AE (LATIN CAPITAL LETTER A E) */ + [0xc7, 0xe7], /* LATIN CAPITAL LETTER C WITH CEDILLA (LATIN CAPITAL LETTER C CEDILLA) */ + [0xc8, 0xe8], /* LATIN CAPITAL LETTER E WITH GRAVE (LATIN CAPITAL LETTER E GRAVE) */ + [0xc9, 0xe9], /* LATIN CAPITAL LETTER E WITH ACUTE (LATIN CAPITAL LETTER E ACUTE) */ + [0xca, 0xea], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX (LATIN CAPITAL LETTER E CIRCUMFLEX) */ + [0xcb, 0xeb], /* LATIN CAPITAL LETTER E WITH DIAERESIS (LATIN CAPITAL LETTER E DIAERESIS) */ + [0xcc, 0xec], /* LATIN CAPITAL LETTER I WITH GRAVE (LATIN CAPITAL LETTER I GRAVE) */ + [0xcd, 0xed], /* LATIN CAPITAL LETTER I WITH ACUTE (LATIN CAPITAL LETTER I ACUTE) */ + [0xce, 0xee], /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX (LATIN CAPITAL LETTER I CIRCUMFLEX) */ + [0xcf, 0xef], /* LATIN CAPITAL LETTER I WITH DIAERESIS (LATIN CAPITAL LETTER I DIAERESIS) */ + [0xd0, 0xf0], /* LATIN CAPITAL LETTER ETH */ + [0xd1, 0xf1], /* LATIN CAPITAL LETTER N WITH TILDE (LATIN CAPITAL LETTER N TILDE) */ + [0xd2, 0xf2], /* LATIN CAPITAL LETTER O WITH GRAVE (LATIN CAPITAL LETTER O GRAVE) */ + [0xd3, 0xf3], /* LATIN CAPITAL LETTER O WITH ACUTE (LATIN CAPITAL LETTER O ACUTE) */ + [0xd4, 0xf4], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX (LATIN CAPITAL LETTER O CIRCUMFLEX) */ + [0xd5, 0xf5], /* LATIN CAPITAL LETTER O WITH TILDE (LATIN CAPITAL LETTER O TILDE) */ + [0xd6, 0xf6], /* LATIN CAPITAL LETTER O WITH DIAERESIS (LATIN CAPITAL LETTER O DIAERESIS) */ + [0xd7, 0xd7], /* MULTIPLICATION SIGN */ + [0xd8, 0xf8], /* LATIN CAPITAL LETTER O WITH STROKE (LATIN CAPITAL LETTER O SLASH) */ + [0xd9, 0xf9], /* LATIN CAPITAL LETTER U WITH GRAVE (LATIN CAPITAL LETTER U GRAVE) */ + [0xda, 0xfa], /* LATIN CAPITAL LETTER U WITH ACUTE (LATIN CAPITAL LETTER U ACUTE) */ + [0xdb, 0xfb], /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX (LATIN CAPITAL LETTER U CIRCUMFLEX) */ + [0xdc, 0xfc], /* LATIN CAPITAL LETTER U WITH DIAERESIS (LATIN CAPITAL LETTER U DIAERESIS) */ + [0xdd, 0xfd], /* LATIN CAPITAL LETTER Y WITH ACUTE (LATIN CAPITAL LETTER Y ACUTE) */ + [0xde, 0xfe], /* LATIN CAPITAL LETTER THORN */ + [0xdf, 0xdf], /* LATIN SMALL LETTER SHARP S */ + [0xc0, 0xe0], /* LATIN SMALL LETTER A WITH GRAVE (LATIN SMALL LETTER A GRAVE) */ + [0xc1, 0xe1], /* LATIN SMALL LETTER A WITH ACUTE (LATIN SMALL LETTER A ACUTE) */ + [0xc2, 0xe2], /* LATIN SMALL LETTER A WITH CIRCUMFLEX (LATIN SMALL LETTER A CIRCUMFLEX) */ + [0xc3, 0xe3], /* LATIN SMALL LETTER A WITH TILDE (LATIN SMALL LETTER A TILDE) */ + [0xc4, 0xe4], /* LATIN SMALL LETTER A WITH DIAERESIS (LATIN SMALL LETTER A DIAERESIS) */ + [0xc5, 0xe5], /* LATIN SMALL LETTER A WITH RING ABOVE (LATIN SMALL LETTER A RING) */ + [0xc6, 0xe6], /* LATIN SMALL LETTER AE (LATIN SMALL LETTER A E) */ + [0xc7, 0xe7], /* LATIN SMALL LETTER C WITH CEDILLA (LATIN SMALL LETTER C CEDILLA) */ + [0xc8, 0xe8], /* LATIN SMALL LETTER E WITH GRAVE (LATIN SMALL LETTER E GRAVE) */ + [0xc9, 0xe9], /* LATIN SMALL LETTER E WITH ACUTE (LATIN SMALL LETTER E ACUTE) */ + [0xca, 0xea], /* LATIN SMALL LETTER E WITH CIRCUMFLEX (LATIN SMALL LETTER E CIRCUMFLEX) */ + [0xcb, 0xeb], /* LATIN SMALL LETTER E WITH DIAERESIS (LATIN SMALL LETTER E DIAERESIS) */ + [0xcc, 0xec], /* LATIN SMALL LETTER I WITH GRAVE (LATIN SMALL LETTER I GRAVE) */ + [0xcd, 0xed], /* LATIN SMALL LETTER I WITH ACUTE (LATIN SMALL LETTER I ACUTE) */ + [0xce, 0xee], /* LATIN SMALL LETTER I WITH CIRCUMFLEX (LATIN SMALL LETTER I CIRCUMFLEX) */ + [0xcf, 0xef], /* LATIN SMALL LETTER I WITH DIAERESIS (LATIN SMALL LETTER I DIAERESIS) */ + [0xd0, 0xf0], /* LATIN SMALL LETTER ETH */ + [0xd1, 0xf1], /* LATIN SMALL LETTER N WITH TILDE (LATIN SMALL LETTER N TILDE) */ + [0xd2, 0xf2], /* LATIN SMALL LETTER O WITH GRAVE (LATIN SMALL LETTER O GRAVE) */ + [0xd3, 0xf3], /* LATIN SMALL LETTER O WITH ACUTE (LATIN SMALL LETTER O ACUTE) */ + [0xd4, 0xf4], /* LATIN SMALL LETTER O WITH CIRCUMFLEX (LATIN SMALL LETTER O CIRCUMFLEX) */ + [0xd5, 0xf5], /* LATIN SMALL LETTER O WITH TILDE (LATIN SMALL LETTER O TILDE) */ + [0xd6, 0xf6], /* LATIN SMALL LETTER O WITH DIAERESIS (LATIN SMALL LETTER O DIAERESIS) */ + [0xf7, 0xf7], /* DIVISION SIGN */ + [0xd8, 0xf8], /* LATIN SMALL LETTER O WITH STROKE (LATIN SMALL LETTER O SLASH) */ + [0xd9, 0xf9], /* LATIN SMALL LETTER U WITH GRAVE (LATIN SMALL LETTER U GRAVE) */ + [0xda, 0xfa], /* LATIN SMALL LETTER U WITH ACUTE (LATIN SMALL LETTER U ACUTE) */ + [0xdb, 0xfb], /* LATIN SMALL LETTER U WITH CIRCUMFLEX (LATIN SMALL LETTER U CIRCUMFLEX) */ + [0xdc, 0xfc], /* LATIN SMALL LETTER U WITH DIAERESIS (LATIN SMALL LETTER U DIAERESIS) */ + [0xdd, 0xfd], /* LATIN SMALL LETTER Y WITH ACUTE (LATIN SMALL LETTER Y ACUTE) */ + [0xde, 0xfe], /* LATIN SMALL LETTER THORN */ + [0x178, 0xff], /* LATIN SMALL LETTER Y WITH DIAERESIS (LATIN SMALL LETTER Y DIAERESIS) */ + [0x100, 0x101], /* LATIN CAPITAL LETTER A WITH MACRON (LATIN CAPITAL LETTER A MACRON) */ + [0x100, 0x101], /* LATIN SMALL LETTER A WITH MACRON (LATIN SMALL LETTER A MACRON) */ + [0x102, 0x103], /* LATIN CAPITAL LETTER A WITH BREVE (LATIN CAPITAL LETTER A BREVE) */ + [0x102, 0x103], /* LATIN SMALL LETTER A WITH BREVE (LATIN SMALL LETTER A BREVE) */ + [0x104, 0x105], /* LATIN CAPITAL LETTER A WITH OGONEK (LATIN CAPITAL LETTER A OGONEK) */ + [0x104, 0x105], /* LATIN SMALL LETTER A WITH OGONEK (LATIN SMALL LETTER A OGONEK) */ + [0x106, 0x107], /* LATIN CAPITAL LETTER C WITH ACUTE (LATIN CAPITAL LETTER C ACUTE) */ + [0x106, 0x107], /* LATIN SMALL LETTER C WITH ACUTE (LATIN SMALL LETTER C ACUTE) */ + [0x108, 0x109], /* LATIN CAPITAL LETTER C WITH CIRCUMFLEX (LATIN CAPITAL LETTER C CIRCUMFLEX) */ + [0x108, 0x109], /* LATIN SMALL LETTER C WITH CIRCUMFLEX (LATIN SMALL LETTER C CIRCUMFLEX) */ + [0x10a, 0x10b], /* LATIN CAPITAL LETTER C WITH DOT ABOVE (LATIN CAPITAL LETTER C DOT) */ + [0x10a, 0x10b], /* LATIN SMALL LETTER C WITH DOT ABOVE (LATIN SMALL LETTER C DOT) */ + [0x10c, 0x10d], /* LATIN CAPITAL LETTER C WITH CARON (LATIN CAPITAL LETTER C HACEK) */ + [0x10c, 0x10d], /* LATIN SMALL LETTER C WITH CARON (LATIN SMALL LETTER C HACEK) */ + [0x10e, 0x10f], /* LATIN CAPITAL LETTER D WITH CARON (LATIN CAPITAL LETTER D HACEK) */ + [0x10e, 0x10f], /* LATIN SMALL LETTER D WITH CARON (LATIN SMALL LETTER D HACEK) */ + [0x110, 0x111], /* LATIN CAPITAL LETTER D WITH STROKE (LATIN CAPITAL LETTER D BAR) */ + [0x110, 0x111], /* LATIN SMALL LETTER D WITH STROKE (LATIN SMALL LETTER D BAR) */ + [0x112, 0x113], /* LATIN CAPITAL LETTER E WITH MACRON (LATIN CAPITAL LETTER E MACRON) */ + [0x112, 0x113], /* LATIN SMALL LETTER E WITH MACRON (LATIN SMALL LETTER E MACRON) */ + [0x114, 0x115], /* LATIN CAPITAL LETTER E WITH BREVE (LATIN CAPITAL LETTER E BREVE) */ + [0x114, 0x115], /* LATIN SMALL LETTER E WITH BREVE (LATIN SMALL LETTER E BREVE) */ + [0x116, 0x117], /* LATIN CAPITAL LETTER E WITH DOT ABOVE (LATIN CAPITAL LETTER E DOT) */ + [0x116, 0x117], /* LATIN SMALL LETTER E WITH DOT ABOVE (LATIN SMALL LETTER E DOT) */ + [0x118, 0x119], /* LATIN CAPITAL LETTER E WITH OGONEK (LATIN CAPITAL LETTER E OGONEK) */ + [0x118, 0x119], /* LATIN SMALL LETTER E WITH OGONEK (LATIN SMALL LETTER E OGONEK) */ + [0x11a, 0x11b], /* LATIN CAPITAL LETTER E WITH CARON (LATIN CAPITAL LETTER E HACEK) */ + [0x11a, 0x11b], /* LATIN SMALL LETTER E WITH CARON (LATIN SMALL LETTER E HACEK) */ + [0x11c, 0x11d], /* LATIN CAPITAL LETTER G WITH CIRCUMFLEX (LATIN CAPITAL LETTER G CIRCUMFLEX) */ + [0x11c, 0x11d], /* LATIN SMALL LETTER G WITH CIRCUMFLEX (LATIN SMALL LETTER G CIRCUMFLEX) */ + [0x11e, 0x11f], /* LATIN CAPITAL LETTER G WITH BREVE (LATIN CAPITAL LETTER G BREVE) */ + [0x11e, 0x11f], /* LATIN SMALL LETTER G WITH BREVE (LATIN SMALL LETTER G BREVE) */ + [0x120, 0x121], /* LATIN CAPITAL LETTER G WITH DOT ABOVE (LATIN CAPITAL LETTER G DOT) */ + [0x120, 0x121], /* LATIN SMALL LETTER G WITH DOT ABOVE (LATIN SMALL LETTER G DOT) */ + [0x122, 0x123], /* LATIN CAPITAL LETTER G WITH CEDILLA (LATIN CAPITAL LETTER G CEDILLA) */ + [0x122, 0x123], /* LATIN SMALL LETTER G WITH CEDILLA (LATIN SMALL LETTER G CEDILLA) */ + [0x124, 0x125], /* LATIN CAPITAL LETTER H WITH CIRCUMFLEX (LATIN CAPITAL LETTER H CIRCUMFLEX) */ + [0x124, 0x125], /* LATIN SMALL LETTER H WITH CIRCUMFLEX (LATIN SMALL LETTER H CIRCUMFLEX) */ + [0x126, 0x127], /* LATIN CAPITAL LETTER H WITH STROKE (LATIN CAPITAL LETTER H BAR) */ + [0x126, 0x127], /* LATIN SMALL LETTER H WITH STROKE (LATIN SMALL LETTER H BAR) */ + [0x128, 0x129], /* LATIN CAPITAL LETTER I WITH TILDE (LATIN CAPITAL LETTER I TILDE) */ + [0x128, 0x129], /* LATIN SMALL LETTER I WITH TILDE (LATIN SMALL LETTER I TILDE) */ + [0x12a, 0x12b], /* LATIN CAPITAL LETTER I WITH MACRON (LATIN CAPITAL LETTER I MACRON) */ + [0x12a, 0x12b], /* LATIN SMALL LETTER I WITH MACRON (LATIN SMALL LETTER I MACRON) */ + [0x12c, 0x12d], /* LATIN CAPITAL LETTER I WITH BREVE (LATIN CAPITAL LETTER I BREVE) */ + [0x12c, 0x12d], /* LATIN SMALL LETTER I WITH BREVE (LATIN SMALL LETTER I BREVE) */ + [0x12e, 0x12f], /* LATIN CAPITAL LETTER I WITH OGONEK (LATIN CAPITAL LETTER I OGONEK) */ + [0x12e, 0x12f], /* LATIN SMALL LETTER I WITH OGONEK (LATIN SMALL LETTER I OGONEK) */ + [0x130, 0x69], /* LATIN CAPITAL LETTER I WITH DOT ABOVE (LATIN CAPITAL LETTER I DOT) */ + [0x49, 0x131], /* LATIN SMALL LETTER DOTLESS I */ + [0x132, 0x133], /* LATIN CAPITAL LIGATURE IJ (LATIN CAPITAL LETTER I J) */ + [0x132, 0x133], /* LATIN SMALL LIGATURE IJ (LATIN SMALL LETTER I J) */ + [0x134, 0x135], /* LATIN CAPITAL LETTER J WITH CIRCUMFLEX (LATIN CAPITAL LETTER J CIRCUMFLEX) */ + [0x134, 0x135], /* LATIN SMALL LETTER J WITH CIRCUMFLEX (LATIN SMALL LETTER J CIRCUMFLEX) */ + [0x136, 0x137], /* LATIN CAPITAL LETTER K WITH CEDILLA (LATIN CAPITAL LETTER K CEDILLA) */ + [0x136, 0x137], /* LATIN SMALL LETTER K WITH CEDILLA (LATIN SMALL LETTER K CEDILLA) */ + [0x138, 0x138], /* LATIN SMALL LETTER KRA */ + [0x139, 0x13a], /* LATIN CAPITAL LETTER L WITH ACUTE (LATIN CAPITAL LETTER L ACUTE) */ + [0x139, 0x13a], /* LATIN SMALL LETTER L WITH ACUTE (LATIN SMALL LETTER L ACUTE) */ + [0x13b, 0x13c], /* LATIN CAPITAL LETTER L WITH CEDILLA (LATIN CAPITAL LETTER L CEDILLA) */ + [0x13b, 0x13c], /* LATIN SMALL LETTER L WITH CEDILLA (LATIN SMALL LETTER L CEDILLA) */ + [0x13d, 0x13e], /* LATIN CAPITAL LETTER L WITH CARON (LATIN CAPITAL LETTER L HACEK) */ + [0x13d, 0x13e], /* LATIN SMALL LETTER L WITH CARON (LATIN SMALL LETTER L HACEK) */ + [0x13f, 0x140], /* LATIN CAPITAL LETTER L WITH MIDDLE DOT */ + [0x13f, 0x140], /* LATIN SMALL LETTER L WITH MIDDLE DOT */ + [0x141, 0x142], /* LATIN CAPITAL LETTER L WITH STROKE (LATIN CAPITAL LETTER L SLASH) */ + [0x141, 0x142], /* LATIN SMALL LETTER L WITH STROKE (LATIN SMALL LETTER L SLASH) */ + [0x143, 0x144], /* LATIN CAPITAL LETTER N WITH ACUTE (LATIN CAPITAL LETTER N ACUTE) */ + [0x143, 0x144], /* LATIN SMALL LETTER N WITH ACUTE (LATIN SMALL LETTER N ACUTE) */ + [0x145, 0x146], /* LATIN CAPITAL LETTER N WITH CEDILLA (LATIN CAPITAL LETTER N CEDILLA) */ + [0x145, 0x146], /* LATIN SMALL LETTER N WITH CEDILLA (LATIN SMALL LETTER N CEDILLA) */ + [0x147, 0x148], /* LATIN CAPITAL LETTER N WITH CARON (LATIN CAPITAL LETTER N HACEK) */ + [0x147, 0x148], /* LATIN SMALL LETTER N WITH CARON (LATIN SMALL LETTER N HACEK) */ + [0x149, 0x149], /* LATIN SMALL LETTER N PRECEDED BY APOSTROPHE (LATIN SMALL LETTER APOSTROPHE N) */ + [0x14a, 0x14b], /* LATIN CAPITAL LETTER ENG */ + [0x14a, 0x14b], /* LATIN SMALL LETTER ENG */ + [0x14c, 0x14d], /* LATIN CAPITAL LETTER O WITH MACRON (LATIN CAPITAL LETTER O MACRON) */ + [0x14c, 0x14d], /* LATIN SMALL LETTER O WITH MACRON (LATIN SMALL LETTER O MACRON) */ + [0x14e, 0x14f], /* LATIN CAPITAL LETTER O WITH BREVE (LATIN CAPITAL LETTER O BREVE) */ + [0x14e, 0x14f], /* LATIN SMALL LETTER O WITH BREVE (LATIN SMALL LETTER O BREVE) */ + [0x150, 0x151], /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE (LATIN CAPITAL LETTER O DOUBLE ACUTE) */ + [0x150, 0x151], /* LATIN SMALL LETTER O WITH DOUBLE ACUTE (LATIN SMALL LETTER O DOUBLE ACUTE) */ + [0x152, 0x153], /* LATIN CAPITAL LIGATURE OE (LATIN CAPITAL LETTER O E) */ + [0x152, 0x153], /* LATIN SMALL LIGATURE OE (LATIN SMALL LETTER O E) */ + [0x154, 0x155], /* LATIN CAPITAL LETTER R WITH ACUTE (LATIN CAPITAL LETTER R ACUTE) */ + [0x154, 0x155], /* LATIN SMALL LETTER R WITH ACUTE (LATIN SMALL LETTER R ACUTE) */ + [0x156, 0x157], /* LATIN CAPITAL LETTER R WITH CEDILLA (LATIN CAPITAL LETTER R CEDILLA) */ + [0x156, 0x157], /* LATIN SMALL LETTER R WITH CEDILLA (LATIN SMALL LETTER R CEDILLA) */ + [0x158, 0x159], /* LATIN CAPITAL LETTER R WITH CARON (LATIN CAPITAL LETTER R HACEK) */ + [0x158, 0x159], /* LATIN SMALL LETTER R WITH CARON (LATIN SMALL LETTER R HACEK) */ + [0x15a, 0x15b], /* LATIN CAPITAL LETTER S WITH ACUTE (LATIN CAPITAL LETTER S ACUTE) */ + [0x15a, 0x15b], /* LATIN SMALL LETTER S WITH ACUTE (LATIN SMALL LETTER S ACUTE) */ + [0x15c, 0x15d], /* LATIN CAPITAL LETTER S WITH CIRCUMFLEX (LATIN CAPITAL LETTER S CIRCUMFLEX) */ + [0x15c, 0x15d], /* LATIN SMALL LETTER S WITH CIRCUMFLEX (LATIN SMALL LETTER S CIRCUMFLEX) */ + [0x15e, 0x15f], /* LATIN CAPITAL LETTER S WITH CEDILLA (LATIN CAPITAL LETTER S CEDILLA) */ + [0x15e, 0x15f], /* LATIN SMALL LETTER S WITH CEDILLA (LATIN SMALL LETTER S CEDILLA) */ + [0x160, 0x161], /* LATIN CAPITAL LETTER S WITH CARON (LATIN CAPITAL LETTER S HACEK) */ + [0x160, 0x161], /* LATIN SMALL LETTER S WITH CARON (LATIN SMALL LETTER S HACEK) */ + [0x162, 0x163], /* LATIN CAPITAL LETTER T WITH CEDILLA (LATIN CAPITAL LETTER T CEDILLA) */ + [0x162, 0x163], /* LATIN SMALL LETTER T WITH CEDILLA (LATIN SMALL LETTER T CEDILLA) */ + [0x164, 0x165], /* LATIN CAPITAL LETTER T WITH CARON (LATIN CAPITAL LETTER T HACEK) */ + [0x164, 0x165], /* LATIN SMALL LETTER T WITH CARON (LATIN SMALL LETTER T HACEK) */ + [0x166, 0x167], /* LATIN CAPITAL LETTER T WITH STROKE (LATIN CAPITAL LETTER T BAR) */ + [0x166, 0x167], /* LATIN SMALL LETTER T WITH STROKE (LATIN SMALL LETTER T BAR) */ + [0x168, 0x169], /* LATIN CAPITAL LETTER U WITH TILDE (LATIN CAPITAL LETTER U TILDE) */ + [0x168, 0x169], /* LATIN SMALL LETTER U WITH TILDE (LATIN SMALL LETTER U TILDE) */ + [0x16a, 0x16b], /* LATIN CAPITAL LETTER U WITH MACRON (LATIN CAPITAL LETTER U MACRON) */ + [0x16a, 0x16b], /* LATIN SMALL LETTER U WITH MACRON (LATIN SMALL LETTER U MACRON) */ + [0x16c, 0x16d], /* LATIN CAPITAL LETTER U WITH BREVE (LATIN CAPITAL LETTER U BREVE) */ + [0x16c, 0x16d], /* LATIN SMALL LETTER U WITH BREVE (LATIN SMALL LETTER U BREVE) */ + [0x16e, 0x16f], /* LATIN CAPITAL LETTER U WITH RING ABOVE (LATIN CAPITAL LETTER U RING) */ + [0x16e, 0x16f], /* LATIN SMALL LETTER U WITH RING ABOVE (LATIN SMALL LETTER U RING) */ + [0x170, 0x171], /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE (LATIN CAPITAL LETTER U DOUBLE ACUTE) */ + [0x170, 0x171], /* LATIN SMALL LETTER U WITH DOUBLE ACUTE (LATIN SMALL LETTER U DOUBLE ACUTE) */ + [0x172, 0x173], /* LATIN CAPITAL LETTER U WITH OGONEK (LATIN CAPITAL LETTER U OGONEK) */ + [0x172, 0x173], /* LATIN SMALL LETTER U WITH OGONEK (LATIN SMALL LETTER U OGONEK) */ + [0x174, 0x175], /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX (LATIN CAPITAL LETTER W CIRCUMFLEX) */ + [0x174, 0x175], /* LATIN SMALL LETTER W WITH CIRCUMFLEX (LATIN SMALL LETTER W CIRCUMFLEX) */ + [0x176, 0x177], /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX (LATIN CAPITAL LETTER Y CIRCUMFLEX) */ + [0x176, 0x177], /* LATIN SMALL LETTER Y WITH CIRCUMFLEX (LATIN SMALL LETTER Y CIRCUMFLEX) */ + [0x178, 0xff], /* LATIN CAPITAL LETTER Y WITH DIAERESIS (LATIN CAPITAL LETTER Y DIAERESIS) */ + [0x179, 0x17a], /* LATIN CAPITAL LETTER Z WITH ACUTE (LATIN CAPITAL LETTER Z ACUTE) */ + [0x179, 0x17a], /* LATIN SMALL LETTER Z WITH ACUTE (LATIN SMALL LETTER Z ACUTE) */ + [0x17b, 0x17c], /* LATIN CAPITAL LETTER Z WITH DOT ABOVE (LATIN CAPITAL LETTER Z DOT) */ + [0x17b, 0x17c], /* LATIN SMALL LETTER Z WITH DOT ABOVE (LATIN SMALL LETTER Z DOT) */ + [0x17d, 0x17e], /* LATIN CAPITAL LETTER Z WITH CARON (LATIN CAPITAL LETTER Z HACEK) */ + [0x17d, 0x17e], /* LATIN SMALL LETTER Z WITH CARON (LATIN SMALL LETTER Z HACEK) */ + [0x53, 0x17f], /* LATIN SMALL LETTER LONG S */ + [0x243, 0x180], /* LATIN SMALL LETTER B WITH STROKE (LATIN SMALL LETTER B BAR) */ + [0x181, 0x253], /* LATIN CAPITAL LETTER B WITH HOOK (LATIN CAPITAL LETTER B HOOK) */ + [0x182, 0x183], /* LATIN CAPITAL LETTER B WITH TOPBAR (LATIN CAPITAL LETTER B TOPBAR) */ + [0x182, 0x183], /* LATIN SMALL LETTER B WITH TOPBAR (LATIN SMALL LETTER B TOPBAR) */ + [0x184, 0x185], /* LATIN CAPITAL LETTER TONE SIX */ + [0x184, 0x185], /* LATIN SMALL LETTER TONE SIX */ + [0x186, 0x254], /* LATIN CAPITAL LETTER OPEN O */ + [0x187, 0x188], /* LATIN CAPITAL LETTER C WITH HOOK (LATIN CAPITAL LETTER C HOOK) */ + [0x187, 0x188], /* LATIN SMALL LETTER C WITH HOOK (LATIN SMALL LETTER C HOOK) */ + [0x189, 0x256], /* LATIN CAPITAL LETTER AFRICAN D */ + [0x18a, 0x257], /* LATIN CAPITAL LETTER D WITH HOOK (LATIN CAPITAL LETTER D HOOK) */ + [0x18b, 0x18c], /* LATIN CAPITAL LETTER D WITH TOPBAR (LATIN CAPITAL LETTER D TOPBAR) */ + [0x18b, 0x18c], /* LATIN SMALL LETTER D WITH TOPBAR (LATIN SMALL LETTER D TOPBAR) */ + [0x18d, 0x18d], /* LATIN SMALL LETTER TURNED DELTA */ + [0x18e, 0x1dd], /* LATIN CAPITAL LETTER REVERSED E (LATIN CAPITAL LETTER TURNED E) */ + [0x18f, 0x259], /* LATIN CAPITAL LETTER SCHWA */ + [0x190, 0x25b], /* LATIN CAPITAL LETTER OPEN E (LATIN CAPITAL LETTER EPSILON) */ + [0x191, 0x192], /* LATIN CAPITAL LETTER F WITH HOOK (LATIN CAPITAL LETTER F HOOK) */ + [0x191, 0x192], /* LATIN SMALL LETTER F WITH HOOK (LATIN SMALL LETTER SCRIPT F) */ + [0x193, 0x260], /* LATIN CAPITAL LETTER G WITH HOOK (LATIN CAPITAL LETTER G HOOK) */ + [0x194, 0x263], /* LATIN CAPITAL LETTER GAMMA */ + [0x1f6, 0x195], /* LATIN SMALL LETTER HV (LATIN SMALL LETTER H V) */ + [0x196, 0x269], /* LATIN CAPITAL LETTER IOTA */ + [0x197, 0x268], /* LATIN CAPITAL LETTER I WITH STROKE (LATIN CAPITAL LETTER BARRED I) */ + [0x198, 0x199], /* LATIN CAPITAL LETTER K WITH HOOK (LATIN CAPITAL LETTER K HOOK) */ + [0x198, 0x199], /* LATIN SMALL LETTER K WITH HOOK (LATIN SMALL LETTER K HOOK) */ + [0x23d, 0x19a], /* LATIN SMALL LETTER L WITH BAR (LATIN SMALL LETTER BARRED L) */ + [0x19b, 0x19b], /* LATIN SMALL LETTER LAMBDA WITH STROKE (LATIN SMALL LETTER BARRED LAMBDA) */ + [0x19c, 0x26f], /* LATIN CAPITAL LETTER TURNED M */ + [0x19d, 0x272], /* LATIN CAPITAL LETTER N WITH LEFT HOOK (LATIN CAPITAL LETTER N HOOK) */ + [0x220, 0x19e], /* LATIN SMALL LETTER N WITH LONG RIGHT LEG */ + [0x19f, 0x275], /* LATIN CAPITAL LETTER O WITH MIDDLE TILDE (LATIN CAPITAL LETTER BARRED O) */ + [0x1a0, 0x1a1], /* LATIN CAPITAL LETTER O WITH HORN (LATIN CAPITAL LETTER O HORN) */ + [0x1a0, 0x1a1], /* LATIN SMALL LETTER O WITH HORN (LATIN SMALL LETTER O HORN) */ + [0x1a2, 0x1a3], /* LATIN CAPITAL LETTER OI (LATIN CAPITAL LETTER O I) */ + [0x1a2, 0x1a3], /* LATIN SMALL LETTER OI (LATIN SMALL LETTER O I) */ + [0x1a4, 0x1a5], /* LATIN CAPITAL LETTER P WITH HOOK (LATIN CAPITAL LETTER P HOOK) */ + [0x1a4, 0x1a5], /* LATIN SMALL LETTER P WITH HOOK (LATIN SMALL LETTER P HOOK) */ + [0x1a6, 0x280], /* LATIN LETTER YR (LATIN LETTER Y R) */ + [0x1a7, 0x1a8], /* LATIN CAPITAL LETTER TONE TWO */ + [0x1a7, 0x1a8], /* LATIN SMALL LETTER TONE TWO */ + [0x1a9, 0x283], /* LATIN CAPITAL LETTER ESH */ + [0x1aa, 0x1aa], /* LATIN LETTER REVERSED ESH LOOP */ + [0x1ab, 0x1ab], /* LATIN SMALL LETTER T WITH PALATAL HOOK (LATIN SMALL LETTER T PALATAL HOOK) */ + [0x1ac, 0x1ad], /* LATIN CAPITAL LETTER T WITH HOOK (LATIN CAPITAL LETTER T HOOK) */ + [0x1ac, 0x1ad], /* LATIN SMALL LETTER T WITH HOOK (LATIN SMALL LETTER T HOOK) */ + [0x1ae, 0x288], /* LATIN CAPITAL LETTER T WITH RETROFLEX HOOK (LATIN CAPITAL LETTER T RETROFLEX HOOK) */ + [0x1af, 0x1b0], /* LATIN CAPITAL LETTER U WITH HORN (LATIN CAPITAL LETTER U HORN) */ + [0x1af, 0x1b0], /* LATIN SMALL LETTER U WITH HORN (LATIN SMALL LETTER U HORN) */ + [0x1b1, 0x28a], /* LATIN CAPITAL LETTER UPSILON */ + [0x1b2, 0x28b], /* LATIN CAPITAL LETTER V WITH HOOK (LATIN CAPITAL LETTER SCRIPT V) */ + [0x1b3, 0x1b4], /* LATIN CAPITAL LETTER Y WITH HOOK (LATIN CAPITAL LETTER Y HOOK) */ + [0x1b3, 0x1b4], /* LATIN SMALL LETTER Y WITH HOOK (LATIN SMALL LETTER Y HOOK) */ + [0x1b5, 0x1b6], /* LATIN CAPITAL LETTER Z WITH STROKE (LATIN CAPITAL LETTER Z BAR) */ + [0x1b5, 0x1b6], /* LATIN SMALL LETTER Z WITH STROKE (LATIN SMALL LETTER Z BAR) */ + [0x1b7, 0x292], /* LATIN CAPITAL LETTER EZH (LATIN CAPITAL LETTER YOGH) */ + [0x1b8, 0x1b9], /* LATIN CAPITAL LETTER EZH REVERSED (LATIN CAPITAL LETTER REVERSED YOGH) */ + [0x1b8, 0x1b9], /* LATIN SMALL LETTER EZH REVERSED (LATIN SMALL LETTER REVERSED YOGH) */ + [0x1ba, 0x1ba], /* LATIN SMALL LETTER EZH WITH TAIL (LATIN SMALL LETTER YOGH WITH TAIL) */ + [0x1bb, 0x1bb], /* LATIN LETTER TWO WITH STROKE (LATIN LETTER TWO BAR) */ + [0x1bc, 0x1bd], /* LATIN CAPITAL LETTER TONE FIVE */ + [0x1bc, 0x1bd], /* LATIN SMALL LETTER TONE FIVE */ + [0x1be, 0x1be], /* LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE (LATIN LETTER INVERTED GLOTTAL STOP BAR) */ + [0x1f7, 0x1bf], /* LATIN LETTER WYNN */ + [0x1c0, 0x1c0], /* LATIN LETTER DENTAL CLICK (LATIN LETTER PIPE) */ + [0x1c1, 0x1c1], /* LATIN LETTER LATERAL CLICK (LATIN LETTER DOUBLE PIPE) */ + [0x1c2, 0x1c2], /* LATIN LETTER ALVEOLAR CLICK (LATIN LETTER PIPE DOUBLE BAR) */ + [0x1c3, 0x1c3], /* LATIN LETTER RETROFLEX CLICK (LATIN LETTER EXCLAMATION MARK) */ + [0x1c4, 0x1c6], /* LATIN CAPITAL LETTER DZ WITH CARON (LATIN CAPITAL LETTER D Z HACEK) */ + [0x1c4, 0x1c6], /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON (LATIN LETTER CAPITAL D SMALL Z HACEK) */ + [0x1c4, 0x1c6], /* LATIN SMALL LETTER DZ WITH CARON (LATIN SMALL LETTER D Z HACEK) */ + [0x1c7, 0x1c9], /* LATIN CAPITAL LETTER LJ (LATIN CAPITAL LETTER L J) */ + [0x1c7, 0x1c9], /* LATIN CAPITAL LETTER L WITH SMALL LETTER J (LATIN LETTER CAPITAL L SMALL J) */ + [0x1c7, 0x1c9], /* LATIN SMALL LETTER LJ (LATIN SMALL LETTER L J) */ + [0x1ca, 0x1cc], /* LATIN CAPITAL LETTER NJ (LATIN CAPITAL LETTER N J) */ + [0x1ca, 0x1cc], /* LATIN CAPITAL LETTER N WITH SMALL LETTER J (LATIN LETTER CAPITAL N SMALL J) */ + [0x1ca, 0x1cc], /* LATIN SMALL LETTER NJ (LATIN SMALL LETTER N J) */ + [0x1cd, 0x1ce], /* LATIN CAPITAL LETTER A WITH CARON (LATIN CAPITAL LETTER A HACEK) */ + [0x1cd, 0x1ce], /* LATIN SMALL LETTER A WITH CARON (LATIN SMALL LETTER A HACEK) */ + [0x1cf, 0x1d0], /* LATIN CAPITAL LETTER I WITH CARON (LATIN CAPITAL LETTER I HACEK) */ + [0x1cf, 0x1d0], /* LATIN SMALL LETTER I WITH CARON (LATIN SMALL LETTER I HACEK) */ + [0x1d1, 0x1d2], /* LATIN CAPITAL LETTER O WITH CARON (LATIN CAPITAL LETTER O HACEK) */ + [0x1d1, 0x1d2], /* LATIN SMALL LETTER O WITH CARON (LATIN SMALL LETTER O HACEK) */ + [0x1d3, 0x1d4], /* LATIN CAPITAL LETTER U WITH CARON (LATIN CAPITAL LETTER U HACEK) */ + [0x1d3, 0x1d4], /* LATIN SMALL LETTER U WITH CARON (LATIN SMALL LETTER U HACEK) */ + [0x1d5, 0x1d6], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER U DIAERESIS MACRON) */ + [0x1d5, 0x1d6], /* LATIN SMALL LETTER U WITH DIAERESIS AND MACRON (LATIN SMALL LETTER U DIAERESIS MACRON) */ + [0x1d7, 0x1d8], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE (LATIN CAPITAL LETTER U DIAERESIS ACUTE) */ + [0x1d7, 0x1d8], /* LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE (LATIN SMALL LETTER U DIAERESIS ACUTE) */ + [0x1d9, 0x1da], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON (LATIN CAPITAL LETTER U DIAERESIS HACEK) */ + [0x1d9, 0x1da], /* LATIN SMALL LETTER U WITH DIAERESIS AND CARON (LATIN SMALL LETTER U DIAERESIS HACEK) */ + [0x1db, 0x1dc], /* LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE (LATIN CAPITAL LETTER U DIAERESIS GRAVE) */ + [0x1db, 0x1dc], /* LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE (LATIN SMALL LETTER U DIAERESIS GRAVE) */ + [0x18e, 0x1dd], /* LATIN SMALL LETTER TURNED E */ + [0x1de, 0x1df], /* LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON (LATIN CAPITAL LETTER A DIAERESIS MACRON) */ + [0x1de, 0x1df], /* LATIN SMALL LETTER A WITH DIAERESIS AND MACRON (LATIN SMALL LETTER A DIAERESIS MACRON) */ + [0x1e0, 0x1e1], /* LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON (LATIN CAPITAL LETTER A DOT MACRON) */ + [0x1e0, 0x1e1], /* LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON (LATIN SMALL LETTER A DOT MACRON) */ + [0x1e2, 0x1e3], /* LATIN CAPITAL LETTER AE WITH MACRON (LATIN CAPITAL LETTER A E MACRON) */ + [0x1e2, 0x1e3], /* LATIN SMALL LETTER AE WITH MACRON (LATIN SMALL LETTER A E MACRON) */ + [0x1e4, 0x1e5], /* LATIN CAPITAL LETTER G WITH STROKE (LATIN CAPITAL LETTER G BAR) */ + [0x1e4, 0x1e5], /* LATIN SMALL LETTER G WITH STROKE (LATIN SMALL LETTER G BAR) */ + [0x1e6, 0x1e7], /* LATIN CAPITAL LETTER G WITH CARON (LATIN CAPITAL LETTER G HACEK) */ + [0x1e6, 0x1e7], /* LATIN SMALL LETTER G WITH CARON (LATIN SMALL LETTER G HACEK) */ + [0x1e8, 0x1e9], /* LATIN CAPITAL LETTER K WITH CARON (LATIN CAPITAL LETTER K HACEK) */ + [0x1e8, 0x1e9], /* LATIN SMALL LETTER K WITH CARON (LATIN SMALL LETTER K HACEK) */ + [0x1ea, 0x1eb], /* LATIN CAPITAL LETTER O WITH OGONEK (LATIN CAPITAL LETTER O OGONEK) */ + [0x1ea, 0x1eb], /* LATIN SMALL LETTER O WITH OGONEK (LATIN SMALL LETTER O OGONEK) */ + [0x1ec, 0x1ed], /* LATIN CAPITAL LETTER O WITH OGONEK AND MACRON (LATIN CAPITAL LETTER O OGONEK MACRON) */ + [0x1ec, 0x1ed], /* LATIN SMALL LETTER O WITH OGONEK AND MACRON (LATIN SMALL LETTER O OGONEK MACRON) */ + [0x1ee, 0x1ef], /* LATIN CAPITAL LETTER EZH WITH CARON (LATIN CAPITAL LETTER YOGH HACEK) */ + [0x1ee, 0x1ef], /* LATIN SMALL LETTER EZH WITH CARON (LATIN SMALL LETTER YOGH HACEK) */ + [0x1f0, 0x1f0], /* LATIN SMALL LETTER J WITH CARON (LATIN SMALL LETTER J HACEK) */ + [0x1f1, 0x1f3], /* LATIN CAPITAL LETTER DZ */ + [0x1f1, 0x1f3], /* LATIN CAPITAL LETTER D WITH SMALL LETTER Z */ + [0x1f1, 0x1f3], /* LATIN SMALL LETTER DZ */ + [0x1f4, 0x1f5], /* LATIN CAPITAL LETTER G WITH ACUTE */ + [0x1f4, 0x1f5], /* LATIN SMALL LETTER G WITH ACUTE */ + [0x1f6, 0x195], /* LATIN CAPITAL LETTER HWAIR */ + [0x1f7, 0x1bf], /* LATIN CAPITAL LETTER WYNN */ + [0x1f8, 0x1f9], /* LATIN CAPITAL LETTER N WITH GRAVE */ + [0x1f8, 0x1f9], /* LATIN SMALL LETTER N WITH GRAVE */ + [0x1fa, 0x1fb], /* LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE */ + [0x1fa, 0x1fb], /* LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE */ + [0x1fc, 0x1fd], /* LATIN CAPITAL LETTER AE WITH ACUTE */ + [0x1fc, 0x1fd], /* LATIN SMALL LETTER AE WITH ACUTE */ + [0x1fe, 0x1ff], /* LATIN CAPITAL LETTER O WITH STROKE AND ACUTE */ + [0x1fe, 0x1ff], /* LATIN SMALL LETTER O WITH STROKE AND ACUTE */ + [0x200, 0x201], /* LATIN CAPITAL LETTER A WITH DOUBLE GRAVE */ + [0x200, 0x201], /* LATIN SMALL LETTER A WITH DOUBLE GRAVE */ + [0x202, 0x203], /* LATIN CAPITAL LETTER A WITH INVERTED BREVE */ + [0x202, 0x203], /* LATIN SMALL LETTER A WITH INVERTED BREVE */ + [0x204, 0x205], /* LATIN CAPITAL LETTER E WITH DOUBLE GRAVE */ + [0x204, 0x205], /* LATIN SMALL LETTER E WITH DOUBLE GRAVE */ + [0x206, 0x207], /* LATIN CAPITAL LETTER E WITH INVERTED BREVE */ + [0x206, 0x207], /* LATIN SMALL LETTER E WITH INVERTED BREVE */ + [0x208, 0x209], /* LATIN CAPITAL LETTER I WITH DOUBLE GRAVE */ + [0x208, 0x209], /* LATIN SMALL LETTER I WITH DOUBLE GRAVE */ + [0x20a, 0x20b], /* LATIN CAPITAL LETTER I WITH INVERTED BREVE */ + [0x20a, 0x20b], /* LATIN SMALL LETTER I WITH INVERTED BREVE */ + [0x20c, 0x20d], /* LATIN CAPITAL LETTER O WITH DOUBLE GRAVE */ + [0x20c, 0x20d], /* LATIN SMALL LETTER O WITH DOUBLE GRAVE */ + [0x20e, 0x20f], /* LATIN CAPITAL LETTER O WITH INVERTED BREVE */ + [0x20e, 0x20f], /* LATIN SMALL LETTER O WITH INVERTED BREVE */ + [0x210, 0x211], /* LATIN CAPITAL LETTER R WITH DOUBLE GRAVE */ + [0x210, 0x211], /* LATIN SMALL LETTER R WITH DOUBLE GRAVE */ + [0x212, 0x213], /* LATIN CAPITAL LETTER R WITH INVERTED BREVE */ + [0x212, 0x213], /* LATIN SMALL LETTER R WITH INVERTED BREVE */ + [0x214, 0x215], /* LATIN CAPITAL LETTER U WITH DOUBLE GRAVE */ + [0x214, 0x215], /* LATIN SMALL LETTER U WITH DOUBLE GRAVE */ + [0x216, 0x217], /* LATIN CAPITAL LETTER U WITH INVERTED BREVE */ + [0x216, 0x217], /* LATIN SMALL LETTER U WITH INVERTED BREVE */ + [0x218, 0x219], /* LATIN CAPITAL LETTER S WITH COMMA BELOW */ + [0x218, 0x219], /* LATIN SMALL LETTER S WITH COMMA BELOW */ + [0x21a, 0x21b], /* LATIN CAPITAL LETTER T WITH COMMA BELOW */ + [0x21a, 0x21b], /* LATIN SMALL LETTER T WITH COMMA BELOW */ + [0x21c, 0x21d], /* LATIN CAPITAL LETTER YOGH */ + [0x21c, 0x21d], /* LATIN SMALL LETTER YOGH */ + [0x21e, 0x21f], /* LATIN CAPITAL LETTER H WITH CARON */ + [0x21e, 0x21f], /* LATIN SMALL LETTER H WITH CARON */ + [0x220, 0x19e], /* LATIN CAPITAL LETTER N WITH LONG RIGHT LEG */ + [0x221, 0x221], /* LATIN SMALL LETTER D WITH CURL */ + [0x222, 0x223], /* LATIN CAPITAL LETTER OU */ + [0x222, 0x223], /* LATIN SMALL LETTER OU */ + [0x224, 0x225], /* LATIN CAPITAL LETTER Z WITH HOOK */ + [0x224, 0x225], /* LATIN SMALL LETTER Z WITH HOOK */ + [0x226, 0x227], /* LATIN CAPITAL LETTER A WITH DOT ABOVE */ + [0x226, 0x227], /* LATIN SMALL LETTER A WITH DOT ABOVE */ + [0x228, 0x229], /* LATIN CAPITAL LETTER E WITH CEDILLA */ + [0x228, 0x229], /* LATIN SMALL LETTER E WITH CEDILLA */ + [0x22a, 0x22b], /* LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON */ + [0x22a, 0x22b], /* LATIN SMALL LETTER O WITH DIAERESIS AND MACRON */ + [0x22c, 0x22d], /* LATIN CAPITAL LETTER O WITH TILDE AND MACRON */ + [0x22c, 0x22d], /* LATIN SMALL LETTER O WITH TILDE AND MACRON */ + [0x22e, 0x22f], /* LATIN CAPITAL LETTER O WITH DOT ABOVE */ + [0x22e, 0x22f], /* LATIN SMALL LETTER O WITH DOT ABOVE */ + [0x230, 0x231], /* LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON */ + [0x230, 0x231], /* LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON */ + [0x232, 0x233], /* LATIN CAPITAL LETTER Y WITH MACRON */ + [0x232, 0x233], /* LATIN SMALL LETTER Y WITH MACRON */ + [0x234, 0x234], /* LATIN SMALL LETTER L WITH CURL */ + [0x235, 0x235], /* LATIN SMALL LETTER N WITH CURL */ + [0x236, 0x236], /* LATIN SMALL LETTER T WITH CURL */ + [0x237, 0x237], /* LATIN SMALL LETTER DOTLESS J */ + [0x238, 0x238], /* LATIN SMALL LETTER DB DIGRAPH */ + [0x239, 0x239], /* LATIN SMALL LETTER QP DIGRAPH */ + [0x23a, 0x2c65], /* LATIN CAPITAL LETTER A WITH STROKE */ + [0x23b, 0x23c], /* LATIN CAPITAL LETTER C WITH STROKE */ + [0x23b, 0x23c], /* LATIN SMALL LETTER C WITH STROKE */ + [0x23d, 0x19a], /* LATIN CAPITAL LETTER L WITH BAR */ + [0x23e, 0x2c66], /* LATIN CAPITAL LETTER T WITH DIAGONAL STROKE */ + [0x2c7e, 0x23f], /* LATIN SMALL LETTER S WITH SWASH TAIL */ + [0x2c7f, 0x240], /* LATIN SMALL LETTER Z WITH SWASH TAIL */ + [0x241, 0x242], /* LATIN CAPITAL LETTER GLOTTAL STOP */ + [0x241, 0x242], /* LATIN SMALL LETTER GLOTTAL STOP */ + [0x243, 0x180], /* LATIN CAPITAL LETTER B WITH STROKE */ + [0x244, 0x289], /* LATIN CAPITAL LETTER U BAR */ + [0x245, 0x28c], /* LATIN CAPITAL LETTER TURNED V */ + [0x246, 0x247], /* LATIN CAPITAL LETTER E WITH STROKE */ + [0x246, 0x247], /* LATIN SMALL LETTER E WITH STROKE */ + [0x248, 0x249], /* LATIN CAPITAL LETTER J WITH STROKE */ + [0x248, 0x249], /* LATIN SMALL LETTER J WITH STROKE */ + [0x24a, 0x24b], /* LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL */ + [0x24a, 0x24b], /* LATIN SMALL LETTER Q WITH HOOK TAIL */ + [0x24c, 0x24d], /* LATIN CAPITAL LETTER R WITH STROKE */ + [0x24c, 0x24d], /* LATIN SMALL LETTER R WITH STROKE */ + [0x24e, 0x24f], /* LATIN CAPITAL LETTER Y WITH STROKE */ + [0x24e, 0x24f], /* LATIN SMALL LETTER Y WITH STROKE */ + [0x2c6f, 0x250], /* LATIN SMALL LETTER TURNED A */ + [0x2c6d, 0x251], /* LATIN SMALL LETTER ALPHA (LATIN SMALL LETTER SCRIPT A) */ + [0x2c70, 0x252], /* LATIN SMALL LETTER TURNED ALPHA (LATIN SMALL LETTER TURNED SCRIPT A) */ + [0x181, 0x253], /* LATIN SMALL LETTER B WITH HOOK (LATIN SMALL LETTER B HOOK) */ + [0x186, 0x254], /* LATIN SMALL LETTER OPEN O */ + [0x255, 0x255], /* LATIN SMALL LETTER C WITH CURL (LATIN SMALL LETTER C CURL) */ + [0x189, 0x256], /* LATIN SMALL LETTER D WITH TAIL (LATIN SMALL LETTER D RETROFLEX HOOK) */ + [0x18a, 0x257], /* LATIN SMALL LETTER D WITH HOOK (LATIN SMALL LETTER D HOOK) */ + [0x258, 0x258], /* LATIN SMALL LETTER REVERSED E */ + [0x18f, 0x259], /* LATIN SMALL LETTER SCHWA */ + [0x25a, 0x25a], /* LATIN SMALL LETTER SCHWA WITH HOOK (LATIN SMALL LETTER SCHWA HOOK) */ + [0x190, 0x25b], /* LATIN SMALL LETTER OPEN E (LATIN SMALL LETTER EPSILON) */ + [0x25c, 0x25c], /* LATIN SMALL LETTER REVERSED OPEN E (LATIN SMALL LETTER REVERSED EPSILON) */ + [0x25d, 0x25d], /* LATIN SMALL LETTER REVERSED OPEN E WITH HOOK (LATIN SMALL LETTER REVERSED EPSILON HOOK) */ + [0x25e, 0x25e], /* LATIN SMALL LETTER CLOSED REVERSED OPEN E (LATIN SMALL LETTER CLOSED REVERSED EPSILON) */ + [0x25f, 0x25f], /* LATIN SMALL LETTER DOTLESS J WITH STROKE (LATIN SMALL LETTER DOTLESS J BAR) */ + [0x193, 0x260], /* LATIN SMALL LETTER G WITH HOOK (LATIN SMALL LETTER G HOOK) */ + [0x261, 0x261], /* LATIN SMALL LETTER SCRIPT G */ + [0x262, 0x262], /* LATIN LETTER SMALL CAPITAL G */ + [0x194, 0x263], /* LATIN SMALL LETTER GAMMA */ + [0x264, 0x264], /* LATIN SMALL LETTER RAMS HORN (LATIN SMALL LETTER BABY GAMMA) */ + [0xa78d, 0x265], /* LATIN SMALL LETTER TURNED H */ + [0xa7aa, 0x266], /* LATIN SMALL LETTER H WITH HOOK (LATIN SMALL LETTER H HOOK) */ + [0x267, 0x267], /* LATIN SMALL LETTER HENG WITH HOOK (LATIN SMALL LETTER HENG HOOK) */ + [0x197, 0x268], /* LATIN SMALL LETTER I WITH STROKE (LATIN SMALL LETTER BARRED I) */ + [0x196, 0x269], /* LATIN SMALL LETTER IOTA */ + [0x26a, 0x26a], /* LATIN LETTER SMALL CAPITAL I */ + [0x2c62, 0x26b], /* LATIN SMALL LETTER L WITH MIDDLE TILDE */ + [0x26c, 0x26c], /* LATIN SMALL LETTER L WITH BELT (LATIN SMALL LETTER L BELT) */ + [0x26d, 0x26d], /* LATIN SMALL LETTER L WITH RETROFLEX HOOK (LATIN SMALL LETTER L RETROFLEX HOOK) */ + [0x26e, 0x26e], /* LATIN SMALL LETTER LEZH (LATIN SMALL LETTER L YOGH) */ + [0x19c, 0x26f], /* LATIN SMALL LETTER TURNED M */ + [0x270, 0x270], /* LATIN SMALL LETTER TURNED M WITH LONG LEG */ + [0x2c6e, 0x271], /* LATIN SMALL LETTER M WITH HOOK (LATIN SMALL LETTER M HOOK) */ + [0x19d, 0x272], /* LATIN SMALL LETTER N WITH LEFT HOOK (LATIN SMALL LETTER N HOOK) */ + [0x273, 0x273], /* LATIN SMALL LETTER N WITH RETROFLEX HOOK (LATIN SMALL LETTER N RETROFLEX HOOK) */ + [0x274, 0x274], /* LATIN LETTER SMALL CAPITAL N */ + [0x19f, 0x275], /* LATIN SMALL LETTER BARRED O */ + [0x276, 0x276], /* LATIN LETTER SMALL CAPITAL OE (LATIN LETTER SMALL CAPITAL O E) */ + [0x277, 0x277], /* LATIN SMALL LETTER CLOSED OMEGA */ + [0x278, 0x278], /* LATIN SMALL LETTER PHI */ + [0x279, 0x279], /* LATIN SMALL LETTER TURNED R */ + [0x27a, 0x27a], /* LATIN SMALL LETTER TURNED R WITH LONG LEG */ + [0x27b, 0x27b], /* LATIN SMALL LETTER TURNED R WITH HOOK (LATIN SMALL LETTER TURNED R HOOK) */ + [0x27c, 0x27c], /* LATIN SMALL LETTER R WITH LONG LEG */ + [0x2c64, 0x27d], /* LATIN SMALL LETTER R WITH TAIL (LATIN SMALL LETTER R HOOK) */ + [0x27e, 0x27e], /* LATIN SMALL LETTER R WITH FISHHOOK (LATIN SMALL LETTER FISHHOOK R) */ + [0x27f, 0x27f], /* LATIN SMALL LETTER REVERSED R WITH FISHHOOK (LATIN SMALL LETTER REVERSED FISHHOOK R) */ + [0x1a6, 0x280], /* LATIN LETTER SMALL CAPITAL R */ + [0x281, 0x281], /* LATIN LETTER SMALL CAPITAL INVERTED R */ + [0x282, 0x282], /* LATIN SMALL LETTER S WITH HOOK (LATIN SMALL LETTER S HOOK) */ + [0x1a9, 0x283], /* LATIN SMALL LETTER ESH */ + [0x284, 0x284], /* LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK (LATIN SMALL LETTER DOTLESS J BAR HOOK) */ + [0x285, 0x285], /* LATIN SMALL LETTER SQUAT REVERSED ESH */ + [0x286, 0x286], /* LATIN SMALL LETTER ESH WITH CURL (LATIN SMALL LETTER ESH CURL) */ + [0x287, 0x287], /* LATIN SMALL LETTER TURNED T */ + [0x1ae, 0x288], /* LATIN SMALL LETTER T WITH RETROFLEX HOOK (LATIN SMALL LETTER T RETROFLEX HOOK) */ + [0x244, 0x289], /* LATIN SMALL LETTER U BAR */ + [0x1b1, 0x28a], /* LATIN SMALL LETTER UPSILON */ + [0x1b2, 0x28b], /* LATIN SMALL LETTER V WITH HOOK (LATIN SMALL LETTER SCRIPT V) */ + [0x245, 0x28c], /* LATIN SMALL LETTER TURNED V */ + [0x28d, 0x28d], /* LATIN SMALL LETTER TURNED W */ + [0x28e, 0x28e], /* LATIN SMALL LETTER TURNED Y */ + [0x28f, 0x28f], /* LATIN LETTER SMALL CAPITAL Y */ + [0x290, 0x290], /* LATIN SMALL LETTER Z WITH RETROFLEX HOOK (LATIN SMALL LETTER Z RETROFLEX HOOK) */ + [0x291, 0x291], /* LATIN SMALL LETTER Z WITH CURL (LATIN SMALL LETTER Z CURL) */ + [0x1b7, 0x292], /* LATIN SMALL LETTER EZH (LATIN SMALL LETTER YOGH) */ + [0x293, 0x293], /* LATIN SMALL LETTER EZH WITH CURL (LATIN SMALL LETTER YOGH CURL) */ + [0x294, 0x294], /* LATIN LETTER GLOTTAL STOP */ + [0x295, 0x295], /* LATIN LETTER PHARYNGEAL VOICED FRICATIVE (LATIN LETTER REVERSED GLOTTAL STOP) */ + [0x296, 0x296], /* LATIN LETTER INVERTED GLOTTAL STOP */ + [0x297, 0x297], /* LATIN LETTER STRETCHED C */ + [0x298, 0x298], /* LATIN LETTER BILABIAL CLICK (LATIN LETTER BULLSEYE) */ + [0x299, 0x299], /* LATIN LETTER SMALL CAPITAL B */ + [0x29a, 0x29a], /* LATIN SMALL LETTER CLOSED OPEN E (LATIN SMALL LETTER CLOSED EPSILON) */ + [0x29b, 0x29b], /* LATIN LETTER SMALL CAPITAL G WITH HOOK (LATIN LETTER SMALL CAPITAL G HOOK) */ + [0x29c, 0x29c], /* LATIN LETTER SMALL CAPITAL H */ + [0x29d, 0x29d], /* LATIN SMALL LETTER J WITH CROSSED-TAIL (LATIN SMALL LETTER CROSSED-TAIL J) */ + [0x29e, 0x29e], /* LATIN SMALL LETTER TURNED K */ + [0x29f, 0x29f], /* LATIN LETTER SMALL CAPITAL L */ + [0x2a0, 0x2a0], /* LATIN SMALL LETTER Q WITH HOOK (LATIN SMALL LETTER Q HOOK) */ + [0x2a1, 0x2a1], /* LATIN LETTER GLOTTAL STOP WITH STROKE (LATIN LETTER GLOTTAL STOP BAR) */ + [0x2a2, 0x2a2], /* LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE (LATIN LETTER REVERSED GLOTTAL STOP BAR) */ + [0x2a3, 0x2a3], /* LATIN SMALL LETTER DZ DIGRAPH (LATIN SMALL LETTER D Z) */ + [0x2a4, 0x2a4], /* LATIN SMALL LETTER DEZH DIGRAPH (LATIN SMALL LETTER D YOGH) */ + [0x2a5, 0x2a5], /* LATIN SMALL LETTER DZ DIGRAPH WITH CURL (LATIN SMALL LETTER D Z CURL) */ + [0x2a6, 0x2a6], /* LATIN SMALL LETTER TS DIGRAPH (LATIN SMALL LETTER T S) */ + [0x2a7, 0x2a7], /* LATIN SMALL LETTER TESH DIGRAPH (LATIN SMALL LETTER T ESH) */ + [0x2a8, 0x2a8], /* LATIN SMALL LETTER TC DIGRAPH WITH CURL (LATIN SMALL LETTER T C CURL) */ + [0x2a9, 0x2a9], /* LATIN SMALL LETTER FENG DIGRAPH */ + [0x2aa, 0x2aa], /* LATIN SMALL LETTER LS DIGRAPH */ + [0x2ab, 0x2ab], /* LATIN SMALL LETTER LZ DIGRAPH */ + [0x2ac, 0x2ac], /* LATIN LETTER BILABIAL PERCUSSIVE */ + [0x2ad, 0x2ad], /* LATIN LETTER BIDENTAL PERCUSSIVE */ + [0x2ae, 0x2ae], /* LATIN SMALL LETTER TURNED H WITH FISHHOOK */ + [0x2af, 0x2af], /* LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL */ + [0x2b0, 0x2b0], /* MODIFIER LETTER SMALL H */ + [0x2b1, 0x2b1], /* MODIFIER LETTER SMALL H WITH HOOK (MODIFIER LETTER SMALL H HOOK) */ + [0x2b2, 0x2b2], /* MODIFIER LETTER SMALL J */ + [0x2b3, 0x2b3], /* MODIFIER LETTER SMALL R */ + [0x2b4, 0x2b4], /* MODIFIER LETTER SMALL TURNED R */ + [0x2b5, 0x2b5], /* MODIFIER LETTER SMALL TURNED R WITH HOOK (MODIFIER LETTER SMALL TURNED R HOOK) */ + [0x2b6, 0x2b6], /* MODIFIER LETTER SMALL CAPITAL INVERTED R */ + [0x2b7, 0x2b7], /* MODIFIER LETTER SMALL W */ + [0x2b8, 0x2b8], /* MODIFIER LETTER SMALL Y */ + [0x2b9, 0x2b9], /* MODIFIER LETTER PRIME */ + [0x2ba, 0x2ba], /* MODIFIER LETTER DOUBLE PRIME */ + [0x2bb, 0x2bb], /* MODIFIER LETTER TURNED COMMA */ + [0x2bc, 0x2bc], /* MODIFIER LETTER APOSTROPHE */ + [0x2bd, 0x2bd], /* MODIFIER LETTER REVERSED COMMA */ + [0x2be, 0x2be], /* MODIFIER LETTER RIGHT HALF RING */ + [0x2bf, 0x2bf], /* MODIFIER LETTER LEFT HALF RING */ + [0x2c0, 0x2c0], /* MODIFIER LETTER GLOTTAL STOP */ + [0x2c1, 0x2c1], /* MODIFIER LETTER REVERSED GLOTTAL STOP */ + [0x2c2, 0x2c2], /* MODIFIER LETTER LEFT ARROWHEAD */ + [0x2c3, 0x2c3], /* MODIFIER LETTER RIGHT ARROWHEAD */ + [0x2c4, 0x2c4], /* MODIFIER LETTER UP ARROWHEAD */ + [0x2c5, 0x2c5], /* MODIFIER LETTER DOWN ARROWHEAD */ + [0x2c6, 0x2c6], /* MODIFIER LETTER CIRCUMFLEX ACCENT (MODIFIER LETTER CIRCUMFLEX) */ + [0x2c7, 0x2c7], /* CARON (MODIFIER LETTER HACEK) */ + [0x2c8, 0x2c8], /* MODIFIER LETTER VERTICAL LINE */ + [0x2c9, 0x2c9], /* MODIFIER LETTER MACRON */ + [0x2ca, 0x2ca], /* MODIFIER LETTER ACUTE ACCENT (MODIFIER LETTER ACUTE) */ + [0x2cb, 0x2cb], /* MODIFIER LETTER GRAVE ACCENT (MODIFIER LETTER GRAVE) */ + [0x2cc, 0x2cc], /* MODIFIER LETTER LOW VERTICAL LINE */ + [0x2cd, 0x2cd], /* MODIFIER LETTER LOW MACRON */ + [0x2ce, 0x2ce], /* MODIFIER LETTER LOW GRAVE ACCENT (MODIFIER LETTER LOW GRAVE) */ + [0x2cf, 0x2cf], /* MODIFIER LETTER LOW ACUTE ACCENT (MODIFIER LETTER LOW ACUTE) */ + [0x2d0, 0x2d0], /* MODIFIER LETTER TRIANGULAR COLON */ + [0x2d1, 0x2d1], /* MODIFIER LETTER HALF TRIANGULAR COLON */ + [0x2d2, 0x2d2], /* MODIFIER LETTER CENTRED RIGHT HALF RING (MODIFIER LETTER CENTERED RIGHT HALF RING) */ + [0x2d3, 0x2d3], /* MODIFIER LETTER CENTRED LEFT HALF RING (MODIFIER LETTER CENTERED LEFT HALF RING) */ + [0x2d4, 0x2d4], /* MODIFIER LETTER UP TACK */ + [0x2d5, 0x2d5], /* MODIFIER LETTER DOWN TACK */ + [0x2d6, 0x2d6], /* MODIFIER LETTER PLUS SIGN */ + [0x2d7, 0x2d7], /* MODIFIER LETTER MINUS SIGN */ + [0x2d8, 0x2d8], /* BREVE (SPACING BREVE) */ + [0x2d9, 0x2d9], /* DOT ABOVE (SPACING DOT ABOVE) */ + [0x2da, 0x2da], /* RING ABOVE (SPACING RING ABOVE) */ + [0x2db, 0x2db], /* OGONEK (SPACING OGONEK) */ + [0x2dc, 0x2dc], /* SMALL TILDE (SPACING TILDE) */ + [0x2dd, 0x2dd], /* DOUBLE ACUTE ACCENT (SPACING DOUBLE ACUTE) */ + [0x2de, 0x2de], /* MODIFIER LETTER RHOTIC HOOK */ + [0x2df, 0x2df], /* MODIFIER LETTER CROSS ACCENT */ + [0x2e0, 0x2e0], /* MODIFIER LETTER SMALL GAMMA */ + [0x2e1, 0x2e1], /* MODIFIER LETTER SMALL L */ + [0x2e2, 0x2e2], /* MODIFIER LETTER SMALL S */ + [0x2e3, 0x2e3], /* MODIFIER LETTER SMALL X */ + [0x2e4, 0x2e4], /* MODIFIER LETTER SMALL REVERSED GLOTTAL STOP */ + [0x2e5, 0x2e5], /* MODIFIER LETTER EXTRA-HIGH TONE BAR */ + [0x2e6, 0x2e6], /* MODIFIER LETTER HIGH TONE BAR */ + [0x2e7, 0x2e7], /* MODIFIER LETTER MID TONE BAR */ + [0x2e8, 0x2e8], /* MODIFIER LETTER LOW TONE BAR */ + [0x2e9, 0x2e9], /* MODIFIER LETTER EXTRA-LOW TONE BAR */ + [0x2ea, 0x2ea], /* MODIFIER LETTER YIN DEPARTING TONE MARK */ + [0x2eb, 0x2eb], /* MODIFIER LETTER YANG DEPARTING TONE MARK */ + [0x2ec, 0x2ec], /* MODIFIER LETTER VOICING */ + [0x2ed, 0x2ed], /* MODIFIER LETTER UNASPIRATED */ + [0x2ee, 0x2ee], /* MODIFIER LETTER DOUBLE APOSTROPHE */ + [0x2ef, 0x2ef], /* MODIFIER LETTER LOW DOWN ARROWHEAD */ + [0x2f0, 0x2f0], /* MODIFIER LETTER LOW UP ARROWHEAD */ + [0x2f1, 0x2f1], /* MODIFIER LETTER LOW LEFT ARROWHEAD */ + [0x2f2, 0x2f2], /* MODIFIER LETTER LOW RIGHT ARROWHEAD */ + [0x2f3, 0x2f3], /* MODIFIER LETTER LOW RING */ + [0x2f4, 0x2f4], /* MODIFIER LETTER MIDDLE GRAVE ACCENT */ + [0x2f5, 0x2f5], /* MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT */ + [0x2f6, 0x2f6], /* MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT */ + [0x2f7, 0x2f7], /* MODIFIER LETTER LOW TILDE */ + [0x2f8, 0x2f8], /* MODIFIER LETTER RAISED COLON */ + [0x2f9, 0x2f9], /* MODIFIER LETTER BEGIN HIGH TONE */ + [0x2fa, 0x2fa], /* MODIFIER LETTER END HIGH TONE */ + [0x2fb, 0x2fb], /* MODIFIER LETTER BEGIN LOW TONE */ + [0x2fc, 0x2fc], /* MODIFIER LETTER END LOW TONE */ + [0x2fd, 0x2fd], /* MODIFIER LETTER SHELF */ + [0x2fe, 0x2fe], /* MODIFIER LETTER OPEN SHELF */ + [0x2ff, 0x2ff], /* MODIFIER LETTER LOW LEFT ARROW */ + [0x300, 0x300], /* COMBINING GRAVE ACCENT (NON-SPACING GRAVE) */ + [0x301, 0x301], /* COMBINING ACUTE ACCENT (NON-SPACING ACUTE) */ + [0x302, 0x302], /* COMBINING CIRCUMFLEX ACCENT (NON-SPACING CIRCUMFLEX) */ + [0x303, 0x303], /* COMBINING TILDE (NON-SPACING TILDE) */ + [0x304, 0x304], /* COMBINING MACRON (NON-SPACING MACRON) */ + [0x305, 0x305], /* COMBINING OVERLINE (NON-SPACING OVERSCORE) */ + [0x306, 0x306], /* COMBINING BREVE (NON-SPACING BREVE) */ + [0x307, 0x307], /* COMBINING DOT ABOVE (NON-SPACING DOT ABOVE) */ + [0x308, 0x308], /* COMBINING DIAERESIS (NON-SPACING DIAERESIS) */ + [0x309, 0x309], /* COMBINING HOOK ABOVE (NON-SPACING HOOK ABOVE) */ + [0x30a, 0x30a], /* COMBINING RING ABOVE (NON-SPACING RING ABOVE) */ + [0x30b, 0x30b], /* COMBINING DOUBLE ACUTE ACCENT (NON-SPACING DOUBLE ACUTE) */ + [0x30c, 0x30c], /* COMBINING CARON (NON-SPACING HACEK) */ + [0x30d, 0x30d], /* COMBINING VERTICAL LINE ABOVE (NON-SPACING VERTICAL LINE ABOVE) */ + [0x30e, 0x30e], /* COMBINING DOUBLE VERTICAL LINE ABOVE (NON-SPACING DOUBLE VERTICAL LINE ABOVE) */ + [0x30f, 0x30f], /* COMBINING DOUBLE GRAVE ACCENT (NON-SPACING DOUBLE GRAVE) */ + [0x310, 0x310], /* COMBINING CANDRABINDU (NON-SPACING CANDRABINDU) */ + [0x311, 0x311], /* COMBINING INVERTED BREVE (NON-SPACING INVERTED BREVE) */ + [0x312, 0x312], /* COMBINING TURNED COMMA ABOVE (NON-SPACING TURNED COMMA ABOVE) */ + [0x313, 0x313], /* COMBINING COMMA ABOVE (NON-SPACING COMMA ABOVE) */ + [0x314, 0x314], /* COMBINING REVERSED COMMA ABOVE (NON-SPACING REVERSED COMMA ABOVE) */ + [0x315, 0x315], /* COMBINING COMMA ABOVE RIGHT (NON-SPACING COMMA ABOVE RIGHT) */ + [0x316, 0x316], /* COMBINING GRAVE ACCENT BELOW (NON-SPACING GRAVE BELOW) */ + [0x317, 0x317], /* COMBINING ACUTE ACCENT BELOW (NON-SPACING ACUTE BELOW) */ + [0x318, 0x318], /* COMBINING LEFT TACK BELOW (NON-SPACING LEFT TACK BELOW) */ + [0x319, 0x319], /* COMBINING RIGHT TACK BELOW (NON-SPACING RIGHT TACK BELOW) */ + [0x31a, 0x31a], /* COMBINING LEFT ANGLE ABOVE (NON-SPACING LEFT ANGLE ABOVE) */ + [0x31b, 0x31b], /* COMBINING HORN (NON-SPACING HORN) */ + [0x31c, 0x31c], /* COMBINING LEFT HALF RING BELOW (NON-SPACING LEFT HALF RING BELOW) */ + [0x31d, 0x31d], /* COMBINING UP TACK BELOW (NON-SPACING UP TACK BELOW) */ + [0x31e, 0x31e], /* COMBINING DOWN TACK BELOW (NON-SPACING DOWN TACK BELOW) */ + [0x31f, 0x31f], /* COMBINING PLUS SIGN BELOW (NON-SPACING PLUS SIGN BELOW) */ + [0x320, 0x320], /* COMBINING MINUS SIGN BELOW (NON-SPACING MINUS SIGN BELOW) */ + [0x321, 0x321], /* COMBINING PALATALIZED HOOK BELOW (NON-SPACING PALATALIZED HOOK BELOW) */ + [0x322, 0x322], /* COMBINING RETROFLEX HOOK BELOW (NON-SPACING RETROFLEX HOOK BELOW) */ + [0x323, 0x323], /* COMBINING DOT BELOW (NON-SPACING DOT BELOW) */ + [0x324, 0x324], /* COMBINING DIAERESIS BELOW (NON-SPACING DOUBLE DOT BELOW) */ + [0x325, 0x325], /* COMBINING RING BELOW (NON-SPACING RING BELOW) */ + [0x326, 0x326], /* COMBINING COMMA BELOW (NON-SPACING COMMA BELOW) */ + [0x327, 0x327], /* COMBINING CEDILLA (NON-SPACING CEDILLA) */ + [0x328, 0x328], /* COMBINING OGONEK (NON-SPACING OGONEK) */ + [0x329, 0x329], /* COMBINING VERTICAL LINE BELOW (NON-SPACING VERTICAL LINE BELOW) */ + [0x32a, 0x32a], /* COMBINING BRIDGE BELOW (NON-SPACING BRIDGE BELOW) */ + [0x32b, 0x32b], /* COMBINING INVERTED DOUBLE ARCH BELOW (NON-SPACING INVERTED DOUBLE ARCH BELOW) */ + [0x32c, 0x32c], /* COMBINING CARON BELOW (NON-SPACING HACEK BELOW) */ + [0x32d, 0x32d], /* COMBINING CIRCUMFLEX ACCENT BELOW (NON-SPACING CIRCUMFLEX BELOW) */ + [0x32e, 0x32e], /* COMBINING BREVE BELOW (NON-SPACING BREVE BELOW) */ + [0x32f, 0x32f], /* COMBINING INVERTED BREVE BELOW (NON-SPACING INVERTED BREVE BELOW) */ + [0x330, 0x330], /* COMBINING TILDE BELOW (NON-SPACING TILDE BELOW) */ + [0x331, 0x331], /* COMBINING MACRON BELOW (NON-SPACING MACRON BELOW) */ + [0x332, 0x332], /* COMBINING LOW LINE (NON-SPACING UNDERSCORE) */ + [0x333, 0x333], /* COMBINING DOUBLE LOW LINE (NON-SPACING DOUBLE UNDERSCORE) */ + [0x334, 0x334], /* COMBINING TILDE OVERLAY (NON-SPACING TILDE OVERLAY) */ + [0x335, 0x335], /* COMBINING SHORT STROKE OVERLAY (NON-SPACING SHORT BAR OVERLAY) */ + [0x336, 0x336], /* COMBINING LONG STROKE OVERLAY (NON-SPACING LONG BAR OVERLAY) */ + [0x337, 0x337], /* COMBINING SHORT SOLIDUS OVERLAY (NON-SPACING SHORT SLASH OVERLAY) */ + [0x338, 0x338], /* COMBINING LONG SOLIDUS OVERLAY (NON-SPACING LONG SLASH OVERLAY) */ + [0x339, 0x339], /* COMBINING RIGHT HALF RING BELOW (NON-SPACING RIGHT HALF RING BELOW) */ + [0x33a, 0x33a], /* COMBINING INVERTED BRIDGE BELOW (NON-SPACING INVERTED BRIDGE BELOW) */ + [0x33b, 0x33b], /* COMBINING SQUARE BELOW (NON-SPACING SQUARE BELOW) */ + [0x33c, 0x33c], /* COMBINING SEAGULL BELOW (NON-SPACING SEAGULL BELOW) */ + [0x33d, 0x33d], /* COMBINING X ABOVE (NON-SPACING X ABOVE) */ + [0x33e, 0x33e], /* COMBINING VERTICAL TILDE (NON-SPACING VERTICAL TILDE) */ + [0x33f, 0x33f], /* COMBINING DOUBLE OVERLINE (NON-SPACING DOUBLE OVERSCORE) */ + [0x340, 0x340], /* COMBINING GRAVE TONE MARK (NON-SPACING GRAVE TONE MARK) */ + [0x341, 0x341], /* COMBINING ACUTE TONE MARK (NON-SPACING ACUTE TONE MARK) */ + [0x342, 0x342], /* COMBINING GREEK PERISPOMENI */ + [0x343, 0x343], /* COMBINING GREEK KORONIS */ + [0x344, 0x344], /* COMBINING GREEK DIALYTIKA TONOS (GREEK NON-SPACING DIAERESIS TONOS) */ + [0x399, 0x345], /* COMBINING GREEK YPOGEGRAMMENI (GREEK NON-SPACING IOTA BELOW) */ + [0x346, 0x346], /* COMBINING BRIDGE ABOVE */ + [0x347, 0x347], /* COMBINING EQUALS SIGN BELOW */ + [0x348, 0x348], /* COMBINING DOUBLE VERTICAL LINE BELOW */ + [0x349, 0x349], /* COMBINING LEFT ANGLE BELOW */ + [0x34a, 0x34a], /* COMBINING NOT TILDE ABOVE */ + [0x34b, 0x34b], /* COMBINING HOMOTHETIC ABOVE */ + [0x34c, 0x34c], /* COMBINING ALMOST EQUAL TO ABOVE */ + [0x34d, 0x34d], /* COMBINING LEFT RIGHT ARROW BELOW */ + [0x34e, 0x34e], /* COMBINING UPWARDS ARROW BELOW */ + [0x34f, 0x34f], /* COMBINING GRAPHEME JOINER */ + [0x350, 0x350], /* COMBINING RIGHT ARROWHEAD ABOVE */ + [0x351, 0x351], /* COMBINING LEFT HALF RING ABOVE */ + [0x352, 0x352], /* COMBINING FERMATA */ + [0x353, 0x353], /* COMBINING X BELOW */ + [0x354, 0x354], /* COMBINING LEFT ARROWHEAD BELOW */ + [0x355, 0x355], /* COMBINING RIGHT ARROWHEAD BELOW */ + [0x356, 0x356], /* COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW */ + [0x357, 0x357], /* COMBINING RIGHT HALF RING ABOVE */ + [0x358, 0x358], /* COMBINING DOT ABOVE RIGHT */ + [0x359, 0x359], /* COMBINING ASTERISK BELOW */ + [0x35a, 0x35a], /* COMBINING DOUBLE RING BELOW */ + [0x35b, 0x35b], /* COMBINING ZIGZAG ABOVE */ + [0x35c, 0x35c], /* COMBINING DOUBLE BREVE BELOW */ + [0x35d, 0x35d], /* COMBINING DOUBLE BREVE */ + [0x35e, 0x35e], /* COMBINING DOUBLE MACRON */ + [0x35f, 0x35f], /* COMBINING DOUBLE MACRON BELOW */ + [0x360, 0x360], /* COMBINING DOUBLE TILDE */ + [0x361, 0x361], /* COMBINING DOUBLE INVERTED BREVE */ + [0x362, 0x362], /* COMBINING DOUBLE RIGHTWARDS ARROW BELOW */ + [0x363, 0x363], /* COMBINING LATIN SMALL LETTER A */ + [0x364, 0x364], /* COMBINING LATIN SMALL LETTER E */ + [0x365, 0x365], /* COMBINING LATIN SMALL LETTER I */ + [0x366, 0x366], /* COMBINING LATIN SMALL LETTER O */ + [0x367, 0x367], /* COMBINING LATIN SMALL LETTER U */ + [0x368, 0x368], /* COMBINING LATIN SMALL LETTER C */ + [0x369, 0x369], /* COMBINING LATIN SMALL LETTER D */ + [0x36a, 0x36a], /* COMBINING LATIN SMALL LETTER H */ + [0x36b, 0x36b], /* COMBINING LATIN SMALL LETTER M */ + [0x36c, 0x36c], /* COMBINING LATIN SMALL LETTER R */ + [0x36d, 0x36d], /* COMBINING LATIN SMALL LETTER T */ + [0x36e, 0x36e], /* COMBINING LATIN SMALL LETTER V */ + [0x36f, 0x36f], /* COMBINING LATIN SMALL LETTER X */ + [0x370, 0x371], /* GREEK CAPITAL LETTER HETA */ + [0x370, 0x371], /* GREEK SMALL LETTER HETA */ + [0x372, 0x373], /* GREEK CAPITAL LETTER ARCHAIC SAMPI */ + [0x372, 0x373], /* GREEK SMALL LETTER ARCHAIC SAMPI */ + [0x374, 0x374], /* GREEK NUMERAL SIGN (GREEK UPPER NUMERAL SIGN) */ + [0x375, 0x375], /* GREEK LOWER NUMERAL SIGN */ + [0x376, 0x377], /* GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA */ + [0x376, 0x377], /* GREEK SMALL LETTER PAMPHYLIAN DIGAMMA */ + [0x378, 0x378], + [0x379, 0x379], + [0x37a, 0x37a], /* GREEK YPOGEGRAMMENI (GREEK SPACING IOTA BELOW) */ + [0x3fd, 0x37b], /* GREEK SMALL REVERSED LUNATE SIGMA SYMBOL */ + [0x3fe, 0x37c], /* GREEK SMALL DOTTED LUNATE SIGMA SYMBOL */ + [0x3ff, 0x37d], /* GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL */ + [0x37e, 0x37e], /* GREEK QUESTION MARK */ + [0x37f, 0x37f], + [0x380, 0x380], + [0x381, 0x381], + [0x382, 0x382], + [0x383, 0x383], + [0x384, 0x384], /* GREEK TONOS (GREEK SPACING TONOS) */ + [0x385, 0x385], /* GREEK DIALYTIKA TONOS (GREEK SPACING DIAERESIS TONOS) */ + [0x386, 0x3ac], /* GREEK CAPITAL LETTER ALPHA WITH TONOS (GREEK CAPITAL LETTER ALPHA TONOS) */ + [0x387, 0x387], /* GREEK ANO TELEIA */ + [0x388, 0x3ad], /* GREEK CAPITAL LETTER EPSILON WITH TONOS (GREEK CAPITAL LETTER EPSILON TONOS) */ + [0x389, 0x3ae], /* GREEK CAPITAL LETTER ETA WITH TONOS (GREEK CAPITAL LETTER ETA TONOS) */ + [0x38a, 0x3af], /* GREEK CAPITAL LETTER IOTA WITH TONOS (GREEK CAPITAL LETTER IOTA TONOS) */ + [0x38b, 0x38b], + [0x38c, 0x3cc], /* GREEK CAPITAL LETTER OMICRON WITH TONOS (GREEK CAPITAL LETTER OMICRON TONOS) */ + [0x38d, 0x38d], + [0x38e, 0x3cd], /* GREEK CAPITAL LETTER UPSILON WITH TONOS (GREEK CAPITAL LETTER UPSILON TONOS) */ + [0x38f, 0x3ce], /* GREEK CAPITAL LETTER OMEGA WITH TONOS (GREEK CAPITAL LETTER OMEGA TONOS) */ + [0x390, 0x390], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER IOTA DIAERESIS TONOS) */ + [0x391, 0x3b1], /* GREEK CAPITAL LETTER ALPHA */ + [0x392, 0x3b2], /* GREEK CAPITAL LETTER BETA */ + [0x393, 0x3b3], /* GREEK CAPITAL LETTER GAMMA */ + [0x394, 0x3b4], /* GREEK CAPITAL LETTER DELTA */ + [0x395, 0x3b5], /* GREEK CAPITAL LETTER EPSILON */ + [0x396, 0x3b6], /* GREEK CAPITAL LETTER ZETA */ + [0x397, 0x3b7], /* GREEK CAPITAL LETTER ETA */ + [0x398, 0x3b8], /* GREEK CAPITAL LETTER THETA */ + [0x399, 0x3b9], /* GREEK CAPITAL LETTER IOTA */ + [0x39a, 0x3ba], /* GREEK CAPITAL LETTER KAPPA */ + [0x39b, 0x3bb], /* GREEK CAPITAL LETTER LAMDA (GREEK CAPITAL LETTER LAMBDA) */ + [0x39c, 0x3bc], /* GREEK CAPITAL LETTER MU */ + [0x39d, 0x3bd], /* GREEK CAPITAL LETTER NU */ + [0x39e, 0x3be], /* GREEK CAPITAL LETTER XI */ + [0x39f, 0x3bf], /* GREEK CAPITAL LETTER OMICRON */ + [0x3a0, 0x3c0], /* GREEK CAPITAL LETTER PI */ + [0x3a1, 0x3c1], /* GREEK CAPITAL LETTER RHO */ + [0x3a2, 0x3a2], + [0x3a3, 0x3c3], /* GREEK CAPITAL LETTER SIGMA */ + [0x3a4, 0x3c4], /* GREEK CAPITAL LETTER TAU */ + [0x3a5, 0x3c5], /* GREEK CAPITAL LETTER UPSILON */ + [0x3a6, 0x3c6], /* GREEK CAPITAL LETTER PHI */ + [0x3a7, 0x3c7], /* GREEK CAPITAL LETTER CHI */ + [0x3a8, 0x3c8], /* GREEK CAPITAL LETTER PSI */ + [0x3a9, 0x3c9], /* GREEK CAPITAL LETTER OMEGA */ + [0x3aa, 0x3ca], /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA (GREEK CAPITAL LETTER IOTA DIAERESIS) */ + [0x3ab, 0x3cb], /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA (GREEK CAPITAL LETTER UPSILON DIAERESIS) */ + [0x386, 0x3ac], /* GREEK SMALL LETTER ALPHA WITH TONOS (GREEK SMALL LETTER ALPHA TONOS) */ + [0x388, 0x3ad], /* GREEK SMALL LETTER EPSILON WITH TONOS (GREEK SMALL LETTER EPSILON TONOS) */ + [0x389, 0x3ae], /* GREEK SMALL LETTER ETA WITH TONOS (GREEK SMALL LETTER ETA TONOS) */ + [0x38a, 0x3af], /* GREEK SMALL LETTER IOTA WITH TONOS (GREEK SMALL LETTER IOTA TONOS) */ + [0x3b0, 0x3b0], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS (GREEK SMALL LETTER UPSILON DIAERESIS TONOS) */ + [0x391, 0x3b1], /* GREEK SMALL LETTER ALPHA */ + [0x392, 0x3b2], /* GREEK SMALL LETTER BETA */ + [0x393, 0x3b3], /* GREEK SMALL LETTER GAMMA */ + [0x394, 0x3b4], /* GREEK SMALL LETTER DELTA */ + [0x395, 0x3b5], /* GREEK SMALL LETTER EPSILON */ + [0x396, 0x3b6], /* GREEK SMALL LETTER ZETA */ + [0x397, 0x3b7], /* GREEK SMALL LETTER ETA */ + [0x398, 0x3b8], /* GREEK SMALL LETTER THETA */ + [0x399, 0x3b9], /* GREEK SMALL LETTER IOTA */ + [0x39a, 0x3ba], /* GREEK SMALL LETTER KAPPA */ + [0x39b, 0x3bb], /* GREEK SMALL LETTER LAMDA (GREEK SMALL LETTER LAMBDA) */ + [0x39c, 0x3bc], /* GREEK SMALL LETTER MU */ + [0x39d, 0x3bd], /* GREEK SMALL LETTER NU */ + [0x39e, 0x3be], /* GREEK SMALL LETTER XI */ + [0x39f, 0x3bf], /* GREEK SMALL LETTER OMICRON */ + [0x3a0, 0x3c0], /* GREEK SMALL LETTER PI */ + [0x3a1, 0x3c1], /* GREEK SMALL LETTER RHO */ + [0x3a3, 0x3c2], /* GREEK SMALL LETTER FINAL SIGMA */ + [0x3a3, 0x3c3], /* GREEK SMALL LETTER SIGMA */ + [0x3a4, 0x3c4], /* GREEK SMALL LETTER TAU */ + [0x3a5, 0x3c5], /* GREEK SMALL LETTER UPSILON */ + [0x3a6, 0x3c6], /* GREEK SMALL LETTER PHI */ + [0x3a7, 0x3c7], /* GREEK SMALL LETTER CHI */ + [0x3a8, 0x3c8], /* GREEK SMALL LETTER PSI */ + [0x3a9, 0x3c9], /* GREEK SMALL LETTER OMEGA */ + [0x3aa, 0x3ca], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA (GREEK SMALL LETTER IOTA DIAERESIS) */ + [0x3ab, 0x3cb], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA (GREEK SMALL LETTER UPSILON DIAERESIS) */ + [0x38c, 0x3cc], /* GREEK SMALL LETTER OMICRON WITH TONOS (GREEK SMALL LETTER OMICRON TONOS) */ + [0x38e, 0x3cd], /* GREEK SMALL LETTER UPSILON WITH TONOS (GREEK SMALL LETTER UPSILON TONOS) */ + [0x38f, 0x3ce], /* GREEK SMALL LETTER OMEGA WITH TONOS (GREEK SMALL LETTER OMEGA TONOS) */ + [0x3cf, 0x3d7], /* GREEK CAPITAL KAI SYMBOL */ + [0x392, 0x3d0], /* GREEK BETA SYMBOL (GREEK SMALL LETTER CURLED BETA) */ + [0x398, 0x3d1], /* GREEK THETA SYMBOL (GREEK SMALL LETTER SCRIPT THETA) */ + [0x3d2, 0x3d2], /* GREEK UPSILON WITH HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK) */ + [0x3d3, 0x3d3], /* GREEK UPSILON WITH ACUTE AND HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK TONOS) */ + [0x3d4, 0x3d4], /* GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL (GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS) */ + [0x3a6, 0x3d5], /* GREEK PHI SYMBOL (GREEK SMALL LETTER SCRIPT PHI) */ + [0x3a0, 0x3d6], /* GREEK PI SYMBOL (GREEK SMALL LETTER OMEGA PI) */ + [0x3cf, 0x3d7], /* GREEK KAI SYMBOL */ + [0x3d8, 0x3d9], /* GREEK LETTER ARCHAIC KOPPA */ + [0x3d8, 0x3d9], /* GREEK SMALL LETTER ARCHAIC KOPPA */ + [0x3da, 0x3db], /* GREEK LETTER STIGMA (GREEK CAPITAL LETTER STIGMA) */ + [0x3da, 0x3db], /* GREEK SMALL LETTER STIGMA */ + [0x3dc, 0x3dd], /* GREEK LETTER DIGAMMA (GREEK CAPITAL LETTER DIGAMMA) */ + [0x3dc, 0x3dd], /* GREEK SMALL LETTER DIGAMMA */ + [0x3de, 0x3df], /* GREEK LETTER KOPPA (GREEK CAPITAL LETTER KOPPA) */ + [0x3de, 0x3df], /* GREEK SMALL LETTER KOPPA */ + [0x3e0, 0x3e1], /* GREEK LETTER SAMPI (GREEK CAPITAL LETTER SAMPI) */ + [0x3e0, 0x3e1], /* GREEK SMALL LETTER SAMPI */ + [0x3e2, 0x3e3], /* COPTIC CAPITAL LETTER SHEI (GREEK CAPITAL LETTER SHEI) */ + [0x3e2, 0x3e3], /* COPTIC SMALL LETTER SHEI (GREEK SMALL LETTER SHEI) */ + [0x3e4, 0x3e5], /* COPTIC CAPITAL LETTER FEI (GREEK CAPITAL LETTER FEI) */ + [0x3e4, 0x3e5], /* COPTIC SMALL LETTER FEI (GREEK SMALL LETTER FEI) */ + [0x3e6, 0x3e7], /* COPTIC CAPITAL LETTER KHEI (GREEK CAPITAL LETTER KHEI) */ + [0x3e6, 0x3e7], /* COPTIC SMALL LETTER KHEI (GREEK SMALL LETTER KHEI) */ + [0x3e8, 0x3e9], /* COPTIC CAPITAL LETTER HORI (GREEK CAPITAL LETTER HORI) */ + [0x3e8, 0x3e9], /* COPTIC SMALL LETTER HORI (GREEK SMALL LETTER HORI) */ + [0x3ea, 0x3eb], /* COPTIC CAPITAL LETTER GANGIA (GREEK CAPITAL LETTER GANGIA) */ + [0x3ea, 0x3eb], /* COPTIC SMALL LETTER GANGIA (GREEK SMALL LETTER GANGIA) */ + [0x3ec, 0x3ed], /* COPTIC CAPITAL LETTER SHIMA (GREEK CAPITAL LETTER SHIMA) */ + [0x3ec, 0x3ed], /* COPTIC SMALL LETTER SHIMA (GREEK SMALL LETTER SHIMA) */ + [0x3ee, 0x3ef], /* COPTIC CAPITAL LETTER DEI (GREEK CAPITAL LETTER DEI) */ + [0x3ee, 0x3ef], /* COPTIC SMALL LETTER DEI (GREEK SMALL LETTER DEI) */ + [0x39a, 0x3f0], /* GREEK KAPPA SYMBOL (GREEK SMALL LETTER SCRIPT KAPPA) */ + [0x3a1, 0x3f1], /* GREEK RHO SYMBOL (GREEK SMALL LETTER TAILED RHO) */ + [0x3f9, 0x3f2], /* GREEK LUNATE SIGMA SYMBOL (GREEK SMALL LETTER LUNATE SIGMA) */ + [0x3f3, 0x3f3], /* GREEK LETTER YOT */ + [0x3f4, 0x3b8], /* GREEK CAPITAL THETA SYMBOL */ + [0x395, 0x3f5], /* GREEK LUNATE EPSILON SYMBOL */ + [0x3f6, 0x3f6], /* GREEK REVERSED LUNATE EPSILON SYMBOL */ + [0x3f7, 0x3f8], /* GREEK CAPITAL LETTER SHO */ + [0x3f7, 0x3f8], /* GREEK SMALL LETTER SHO */ + [0x3f9, 0x3f2], /* GREEK CAPITAL LUNATE SIGMA SYMBOL */ + [0x3fa, 0x3fb], /* GREEK CAPITAL LETTER SAN */ + [0x3fa, 0x3fb], /* GREEK SMALL LETTER SAN */ + [0x3fc, 0x3fc], /* GREEK RHO WITH STROKE SYMBOL */ + [0x3fd, 0x37b], /* GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL */ + [0x3fe, 0x37c], /* GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL */ + [0x3ff, 0x37d], /* GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL */ + [0x400, 0x450], /* CYRILLIC CAPITAL LETTER IE WITH GRAVE */ + [0x401, 0x451], /* CYRILLIC CAPITAL LETTER IO */ + [0x402, 0x452], /* CYRILLIC CAPITAL LETTER DJE */ + [0x403, 0x453], /* CYRILLIC CAPITAL LETTER GJE */ + [0x404, 0x454], /* CYRILLIC CAPITAL LETTER UKRAINIAN IE (CYRILLIC CAPITAL LETTER E) */ + [0x405, 0x455], /* CYRILLIC CAPITAL LETTER DZE */ + [0x406, 0x456], /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC CAPITAL LETTER I) */ + [0x407, 0x457], /* CYRILLIC CAPITAL LETTER YI */ + [0x408, 0x458], /* CYRILLIC CAPITAL LETTER JE */ + [0x409, 0x459], /* CYRILLIC CAPITAL LETTER LJE */ + [0x40a, 0x45a], /* CYRILLIC CAPITAL LETTER NJE */ + [0x40b, 0x45b], /* CYRILLIC CAPITAL LETTER TSHE */ + [0x40c, 0x45c], /* CYRILLIC CAPITAL LETTER KJE */ + [0x40d, 0x45d], /* CYRILLIC CAPITAL LETTER I WITH GRAVE */ + [0x40e, 0x45e], /* CYRILLIC CAPITAL LETTER SHORT U */ + [0x40f, 0x45f], /* CYRILLIC CAPITAL LETTER DZHE */ + [0x410, 0x430], /* CYRILLIC CAPITAL LETTER A */ + [0x411, 0x431], /* CYRILLIC CAPITAL LETTER BE */ + [0x412, 0x432], /* CYRILLIC CAPITAL LETTER VE */ + [0x413, 0x433], /* CYRILLIC CAPITAL LETTER GHE (CYRILLIC CAPITAL LETTER GE) */ + [0x414, 0x434], /* CYRILLIC CAPITAL LETTER DE */ + [0x415, 0x435], /* CYRILLIC CAPITAL LETTER IE */ + [0x416, 0x436], /* CYRILLIC CAPITAL LETTER ZHE */ + [0x417, 0x437], /* CYRILLIC CAPITAL LETTER ZE */ + [0x418, 0x438], /* CYRILLIC CAPITAL LETTER I (CYRILLIC CAPITAL LETTER II) */ + [0x419, 0x439], /* CYRILLIC CAPITAL LETTER SHORT I (CYRILLIC CAPITAL LETTER SHORT II) */ + [0x41a, 0x43a], /* CYRILLIC CAPITAL LETTER KA */ + [0x41b, 0x43b], /* CYRILLIC CAPITAL LETTER EL */ + [0x41c, 0x43c], /* CYRILLIC CAPITAL LETTER EM */ + [0x41d, 0x43d], /* CYRILLIC CAPITAL LETTER EN */ + [0x41e, 0x43e], /* CYRILLIC CAPITAL LETTER O */ + [0x41f, 0x43f], /* CYRILLIC CAPITAL LETTER PE */ + [0x420, 0x440], /* CYRILLIC CAPITAL LETTER ER */ + [0x421, 0x441], /* CYRILLIC CAPITAL LETTER ES */ + [0x422, 0x442], /* CYRILLIC CAPITAL LETTER TE */ + [0x423, 0x443], /* CYRILLIC CAPITAL LETTER U */ + [0x424, 0x444], /* CYRILLIC CAPITAL LETTER EF */ + [0x425, 0x445], /* CYRILLIC CAPITAL LETTER HA (CYRILLIC CAPITAL LETTER KHA) */ + [0x426, 0x446], /* CYRILLIC CAPITAL LETTER TSE */ + [0x427, 0x447], /* CYRILLIC CAPITAL LETTER CHE */ + [0x428, 0x448], /* CYRILLIC CAPITAL LETTER SHA */ + [0x429, 0x449], /* CYRILLIC CAPITAL LETTER SHCHA */ + [0x42a, 0x44a], /* CYRILLIC CAPITAL LETTER HARD SIGN */ + [0x42b, 0x44b], /* CYRILLIC CAPITAL LETTER YERU (CYRILLIC CAPITAL LETTER YERI) */ + [0x42c, 0x44c], /* CYRILLIC CAPITAL LETTER SOFT SIGN */ + [0x42d, 0x44d], /* CYRILLIC CAPITAL LETTER E (CYRILLIC CAPITAL LETTER REVERSED E) */ + [0x42e, 0x44e], /* CYRILLIC CAPITAL LETTER YU (CYRILLIC CAPITAL LETTER IU) */ + [0x42f, 0x44f], /* CYRILLIC CAPITAL LETTER YA (CYRILLIC CAPITAL LETTER IA) */ + [0x410, 0x430], /* CYRILLIC SMALL LETTER A */ + [0x411, 0x431], /* CYRILLIC SMALL LETTER BE */ + [0x412, 0x432], /* CYRILLIC SMALL LETTER VE */ + [0x413, 0x433], /* CYRILLIC SMALL LETTER GHE (CYRILLIC SMALL LETTER GE) */ + [0x414, 0x434], /* CYRILLIC SMALL LETTER DE */ + [0x415, 0x435], /* CYRILLIC SMALL LETTER IE */ + [0x416, 0x436], /* CYRILLIC SMALL LETTER ZHE */ + [0x417, 0x437], /* CYRILLIC SMALL LETTER ZE */ + [0x418, 0x438], /* CYRILLIC SMALL LETTER I (CYRILLIC SMALL LETTER II) */ + [0x419, 0x439], /* CYRILLIC SMALL LETTER SHORT I (CYRILLIC SMALL LETTER SHORT II) */ + [0x41a, 0x43a], /* CYRILLIC SMALL LETTER KA */ + [0x41b, 0x43b], /* CYRILLIC SMALL LETTER EL */ + [0x41c, 0x43c], /* CYRILLIC SMALL LETTER EM */ + [0x41d, 0x43d], /* CYRILLIC SMALL LETTER EN */ + [0x41e, 0x43e], /* CYRILLIC SMALL LETTER O */ + [0x41f, 0x43f], /* CYRILLIC SMALL LETTER PE */ + [0x420, 0x440], /* CYRILLIC SMALL LETTER ER */ + [0x421, 0x441], /* CYRILLIC SMALL LETTER ES */ + [0x422, 0x442], /* CYRILLIC SMALL LETTER TE */ + [0x423, 0x443], /* CYRILLIC SMALL LETTER U */ + [0x424, 0x444], /* CYRILLIC SMALL LETTER EF */ + [0x425, 0x445], /* CYRILLIC SMALL LETTER HA (CYRILLIC SMALL LETTER KHA) */ + [0x426, 0x446], /* CYRILLIC SMALL LETTER TSE */ + [0x427, 0x447], /* CYRILLIC SMALL LETTER CHE */ + [0x428, 0x448], /* CYRILLIC SMALL LETTER SHA */ + [0x429, 0x449], /* CYRILLIC SMALL LETTER SHCHA */ + [0x42a, 0x44a], /* CYRILLIC SMALL LETTER HARD SIGN */ + [0x42b, 0x44b], /* CYRILLIC SMALL LETTER YERU (CYRILLIC SMALL LETTER YERI) */ + [0x42c, 0x44c], /* CYRILLIC SMALL LETTER SOFT SIGN */ + [0x42d, 0x44d], /* CYRILLIC SMALL LETTER E (CYRILLIC SMALL LETTER REVERSED E) */ + [0x42e, 0x44e], /* CYRILLIC SMALL LETTER YU (CYRILLIC SMALL LETTER IU) */ + [0x42f, 0x44f], /* CYRILLIC SMALL LETTER YA (CYRILLIC SMALL LETTER IA) */ + [0x400, 0x450], /* CYRILLIC SMALL LETTER IE WITH GRAVE */ + [0x401, 0x451], /* CYRILLIC SMALL LETTER IO */ + [0x402, 0x452], /* CYRILLIC SMALL LETTER DJE */ + [0x403, 0x453], /* CYRILLIC SMALL LETTER GJE */ + [0x404, 0x454], /* CYRILLIC SMALL LETTER UKRAINIAN IE (CYRILLIC SMALL LETTER E) */ + [0x405, 0x455], /* CYRILLIC SMALL LETTER DZE */ + [0x406, 0x456], /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I (CYRILLIC SMALL LETTER I) */ + [0x407, 0x457], /* CYRILLIC SMALL LETTER YI */ + [0x408, 0x458], /* CYRILLIC SMALL LETTER JE */ + [0x409, 0x459], /* CYRILLIC SMALL LETTER LJE */ + [0x40a, 0x45a], /* CYRILLIC SMALL LETTER NJE */ + [0x40b, 0x45b], /* CYRILLIC SMALL LETTER TSHE */ + [0x40c, 0x45c], /* CYRILLIC SMALL LETTER KJE */ + [0x40d, 0x45d], /* CYRILLIC SMALL LETTER I WITH GRAVE */ + [0x40e, 0x45e], /* CYRILLIC SMALL LETTER SHORT U */ + [0x40f, 0x45f], /* CYRILLIC SMALL LETTER DZHE */ + [0x460, 0x461], /* CYRILLIC CAPITAL LETTER OMEGA */ + [0x460, 0x461], /* CYRILLIC SMALL LETTER OMEGA */ + [0x462, 0x463], /* CYRILLIC CAPITAL LETTER YAT */ + [0x462, 0x463], /* CYRILLIC SMALL LETTER YAT */ + [0x464, 0x465], /* CYRILLIC CAPITAL LETTER IOTIFIED E */ + [0x464, 0x465], /* CYRILLIC SMALL LETTER IOTIFIED E */ + [0x466, 0x467], /* CYRILLIC CAPITAL LETTER LITTLE YUS */ + [0x466, 0x467], /* CYRILLIC SMALL LETTER LITTLE YUS */ + [0x468, 0x469], /* CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS */ + [0x468, 0x469], /* CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS */ + [0x46a, 0x46b], /* CYRILLIC CAPITAL LETTER BIG YUS */ + [0x46a, 0x46b], /* CYRILLIC SMALL LETTER BIG YUS */ + [0x46c, 0x46d], /* CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS */ + [0x46c, 0x46d], /* CYRILLIC SMALL LETTER IOTIFIED BIG YUS */ + [0x46e, 0x46f], /* CYRILLIC CAPITAL LETTER KSI */ + [0x46e, 0x46f], /* CYRILLIC SMALL LETTER KSI */ + [0x470, 0x471], /* CYRILLIC CAPITAL LETTER PSI */ + [0x470, 0x471], /* CYRILLIC SMALL LETTER PSI */ + [0x472, 0x473], /* CYRILLIC CAPITAL LETTER FITA */ + [0x472, 0x473], /* CYRILLIC SMALL LETTER FITA */ + [0x474, 0x475], /* CYRILLIC CAPITAL LETTER IZHITSA */ + [0x474, 0x475], /* CYRILLIC SMALL LETTER IZHITSA */ + [0x476, 0x477], /* CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE) */ + [0x476, 0x477], /* CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT (CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE) */ + [0x478, 0x479], /* CYRILLIC CAPITAL LETTER UK (CYRILLIC CAPITAL LETTER UK DIGRAPH) */ + [0x478, 0x479], /* CYRILLIC SMALL LETTER UK (CYRILLIC SMALL LETTER UK DIGRAPH) */ + [0x47a, 0x47b], /* CYRILLIC CAPITAL LETTER ROUND OMEGA */ + [0x47a, 0x47b], /* CYRILLIC SMALL LETTER ROUND OMEGA */ + [0x47c, 0x47d], /* CYRILLIC CAPITAL LETTER OMEGA WITH TITLO (CYRILLIC CAPITAL LETTER OMEGA TITLO) */ + [0x47c, 0x47d], /* CYRILLIC SMALL LETTER OMEGA WITH TITLO (CYRILLIC SMALL LETTER OMEGA TITLO) */ + [0x47e, 0x47f], /* CYRILLIC CAPITAL LETTER OT */ + [0x47e, 0x47f], /* CYRILLIC SMALL LETTER OT */ + [0x480, 0x481], /* CYRILLIC CAPITAL LETTER KOPPA */ + [0x480, 0x481], /* CYRILLIC SMALL LETTER KOPPA */ + [0x482, 0x482], /* CYRILLIC THOUSANDS SIGN */ + [0x483, 0x483], /* COMBINING CYRILLIC TITLO (CYRILLIC NON-SPACING TITLO) */ + [0x484, 0x484], /* COMBINING CYRILLIC PALATALIZATION (CYRILLIC NON-SPACING PALATALIZATION) */ + [0x485, 0x485], /* COMBINING CYRILLIC DASIA PNEUMATA (CYRILLIC NON-SPACING DASIA PNEUMATA) */ + [0x486, 0x486], /* COMBINING CYRILLIC PSILI PNEUMATA (CYRILLIC NON-SPACING PSILI PNEUMATA) */ + [0x487, 0x487], /* COMBINING CYRILLIC POKRYTIE */ + [0x488, 0x488], /* COMBINING CYRILLIC HUNDRED THOUSANDS SIGN */ + [0x489, 0x489], /* COMBINING CYRILLIC MILLIONS SIGN */ + [0x48a, 0x48b], /* CYRILLIC CAPITAL LETTER SHORT I WITH TAIL */ + [0x48a, 0x48b], /* CYRILLIC SMALL LETTER SHORT I WITH TAIL */ + [0x48c, 0x48d], /* CYRILLIC CAPITAL LETTER SEMISOFT SIGN */ + [0x48c, 0x48d], /* CYRILLIC SMALL LETTER SEMISOFT SIGN */ + [0x48e, 0x48f], /* CYRILLIC CAPITAL LETTER ER WITH TICK */ + [0x48e, 0x48f], /* CYRILLIC SMALL LETTER ER WITH TICK */ + [0x490, 0x491], /* CYRILLIC CAPITAL LETTER GHE WITH UPTURN (CYRILLIC CAPITAL LETTER GE WITH UPTURN) */ + [0x490, 0x491], /* CYRILLIC SMALL LETTER GHE WITH UPTURN (CYRILLIC SMALL LETTER GE WITH UPTURN) */ + [0x492, 0x493], /* CYRILLIC CAPITAL LETTER GHE WITH STROKE (CYRILLIC CAPITAL LETTER GE BAR) */ + [0x492, 0x493], /* CYRILLIC SMALL LETTER GHE WITH STROKE (CYRILLIC SMALL LETTER GE BAR) */ + [0x494, 0x495], /* CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER GE HOOK) */ + [0x494, 0x495], /* CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER GE HOOK) */ + [0x496, 0x497], /* CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER) */ + [0x496, 0x497], /* CYRILLIC SMALL LETTER ZHE WITH DESCENDER (CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER) */ + [0x498, 0x499], /* CYRILLIC CAPITAL LETTER ZE WITH DESCENDER (CYRILLIC CAPITAL LETTER ZE CEDILLA) */ + [0x498, 0x499], /* CYRILLIC SMALL LETTER ZE WITH DESCENDER (CYRILLIC SMALL LETTER ZE CEDILLA) */ + [0x49a, 0x49b], /* CYRILLIC CAPITAL LETTER KA WITH DESCENDER (CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER) */ + [0x49a, 0x49b], /* CYRILLIC SMALL LETTER KA WITH DESCENDER (CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER) */ + [0x49c, 0x49d], /* CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER KA VERTICAL BAR) */ + [0x49c, 0x49d], /* CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE (CYRILLIC SMALL LETTER KA VERTICAL BAR) */ + [0x49e, 0x49f], /* CYRILLIC CAPITAL LETTER KA WITH STROKE (CYRILLIC CAPITAL LETTER KA BAR) */ + [0x49e, 0x49f], /* CYRILLIC SMALL LETTER KA WITH STROKE (CYRILLIC SMALL LETTER KA BAR) */ + [0x4a0, 0x4a1], /* CYRILLIC CAPITAL LETTER BASHKIR KA (CYRILLIC CAPITAL LETTER REVERSED GE KA) */ + [0x4a0, 0x4a1], /* CYRILLIC SMALL LETTER BASHKIR KA (CYRILLIC SMALL LETTER REVERSED GE KA) */ + [0x4a2, 0x4a3], /* CYRILLIC CAPITAL LETTER EN WITH DESCENDER (CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER) */ + [0x4a2, 0x4a3], /* CYRILLIC SMALL LETTER EN WITH DESCENDER (CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER) */ + [0x4a4, 0x4a5], /* CYRILLIC CAPITAL LIGATURE EN GHE (CYRILLIC CAPITAL LETTER EN GE) */ + [0x4a4, 0x4a5], /* CYRILLIC SMALL LIGATURE EN GHE (CYRILLIC SMALL LETTER EN GE) */ + [0x4a6, 0x4a7], /* CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK (CYRILLIC CAPITAL LETTER PE HOOK) */ + [0x4a6, 0x4a7], /* CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK (CYRILLIC SMALL LETTER PE HOOK) */ + [0x4a8, 0x4a9], /* CYRILLIC CAPITAL LETTER ABKHASIAN HA (CYRILLIC CAPITAL LETTER O HOOK) */ + [0x4a8, 0x4a9], /* CYRILLIC SMALL LETTER ABKHASIAN HA (CYRILLIC SMALL LETTER O HOOK) */ + [0x4aa, 0x4ab], /* CYRILLIC CAPITAL LETTER ES WITH DESCENDER (CYRILLIC CAPITAL LETTER ES CEDILLA) */ + [0x4aa, 0x4ab], /* CYRILLIC SMALL LETTER ES WITH DESCENDER (CYRILLIC SMALL LETTER ES CEDILLA) */ + [0x4ac, 0x4ad], /* CYRILLIC CAPITAL LETTER TE WITH DESCENDER (CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER) */ + [0x4ac, 0x4ad], /* CYRILLIC SMALL LETTER TE WITH DESCENDER (CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER) */ + [0x4ae, 0x4af], /* CYRILLIC CAPITAL LETTER STRAIGHT U */ + [0x4ae, 0x4af], /* CYRILLIC SMALL LETTER STRAIGHT U */ + [0x4b0, 0x4b1], /* CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE (CYRILLIC CAPITAL LETTER STRAIGHT U BAR) */ + [0x4b0, 0x4b1], /* CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE (CYRILLIC SMALL LETTER STRAIGHT U BAR) */ + [0x4b2, 0x4b3], /* CYRILLIC CAPITAL LETTER HA WITH DESCENDER (CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER) */ + [0x4b2, 0x4b3], /* CYRILLIC SMALL LETTER HA WITH DESCENDER (CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER) */ + [0x4b4, 0x4b5], /* CYRILLIC CAPITAL LIGATURE TE TSE (CYRILLIC CAPITAL LETTER TE TSE) */ + [0x4b4, 0x4b5], /* CYRILLIC SMALL LIGATURE TE TSE (CYRILLIC SMALL LETTER TE TSE) */ + [0x4b6, 0x4b7], /* CYRILLIC CAPITAL LETTER CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER) */ + [0x4b6, 0x4b7], /* CYRILLIC SMALL LETTER CHE WITH DESCENDER (CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER) */ + [0x4b8, 0x4b9], /* CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE (CYRILLIC CAPITAL LETTER CHE VERTICAL BAR) */ + [0x4b8, 0x4b9], /* CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE (CYRILLIC SMALL LETTER CHE VERTICAL BAR) */ + [0x4ba, 0x4bb], /* CYRILLIC CAPITAL LETTER SHHA (CYRILLIC CAPITAL LETTER H) */ + [0x4ba, 0x4bb], /* CYRILLIC SMALL LETTER SHHA (CYRILLIC SMALL LETTER H) */ + [0x4bc, 0x4bd], /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE (CYRILLIC CAPITAL LETTER IE HOOK) */ + [0x4bc, 0x4bd], /* CYRILLIC SMALL LETTER ABKHASIAN CHE (CYRILLIC SMALL LETTER IE HOOK) */ + [0x4be, 0x4bf], /* CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC CAPITAL LETTER IE HOOK OGONEK) */ + [0x4be, 0x4bf], /* CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER (CYRILLIC SMALL LETTER IE HOOK OGONEK) */ + [0x4c0, 0x4cf], /* CYRILLIC LETTER PALOCHKA (CYRILLIC LETTER I) */ + [0x4c1, 0x4c2], /* CYRILLIC CAPITAL LETTER ZHE WITH BREVE (CYRILLIC CAPITAL LETTER SHORT ZHE) */ + [0x4c1, 0x4c2], /* CYRILLIC SMALL LETTER ZHE WITH BREVE (CYRILLIC SMALL LETTER SHORT ZHE) */ + [0x4c3, 0x4c4], /* CYRILLIC CAPITAL LETTER KA WITH HOOK (CYRILLIC CAPITAL LETTER KA HOOK) */ + [0x4c3, 0x4c4], /* CYRILLIC SMALL LETTER KA WITH HOOK (CYRILLIC SMALL LETTER KA HOOK) */ + [0x4c5, 0x4c6], /* CYRILLIC CAPITAL LETTER EL WITH TAIL */ + [0x4c5, 0x4c6], /* CYRILLIC SMALL LETTER EL WITH TAIL */ + [0x4c7, 0x4c8], /* CYRILLIC CAPITAL LETTER EN WITH HOOK (CYRILLIC CAPITAL LETTER EN HOOK) */ + [0x4c7, 0x4c8], /* CYRILLIC SMALL LETTER EN WITH HOOK (CYRILLIC SMALL LETTER EN HOOK) */ + [0x4c9, 0x4ca], /* CYRILLIC CAPITAL LETTER EN WITH TAIL */ + [0x4c9, 0x4ca], /* CYRILLIC SMALL LETTER EN WITH TAIL */ + [0x4cb, 0x4cc], /* CYRILLIC CAPITAL LETTER KHAKASSIAN CHE (CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER) */ + [0x4cb, 0x4cc], /* CYRILLIC SMALL LETTER KHAKASSIAN CHE (CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER) */ + [0x4cd, 0x4ce], /* CYRILLIC CAPITAL LETTER EM WITH TAIL */ + [0x4cd, 0x4ce], /* CYRILLIC SMALL LETTER EM WITH TAIL */ + [0x4c0, 0x4cf], /* CYRILLIC SMALL LETTER PALOCHKA */ + [0x4d0, 0x4d1], /* CYRILLIC CAPITAL LETTER A WITH BREVE */ + [0x4d0, 0x4d1], /* CYRILLIC SMALL LETTER A WITH BREVE */ + [0x4d2, 0x4d3], /* CYRILLIC CAPITAL LETTER A WITH DIAERESIS */ + [0x4d2, 0x4d3], /* CYRILLIC SMALL LETTER A WITH DIAERESIS */ + [0x4d4, 0x4d5], /* CYRILLIC CAPITAL LIGATURE A IE */ + [0x4d4, 0x4d5], /* CYRILLIC SMALL LIGATURE A IE */ + [0x4d6, 0x4d7], /* CYRILLIC CAPITAL LETTER IE WITH BREVE */ + [0x4d6, 0x4d7], /* CYRILLIC SMALL LETTER IE WITH BREVE */ + [0x4d8, 0x4d9], /* CYRILLIC CAPITAL LETTER SCHWA */ + [0x4d8, 0x4d9], /* CYRILLIC SMALL LETTER SCHWA */ + [0x4da, 0x4db], /* CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS */ + [0x4da, 0x4db], /* CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS */ + [0x4dc, 0x4dd], /* CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS */ + [0x4dc, 0x4dd], /* CYRILLIC SMALL LETTER ZHE WITH DIAERESIS */ + [0x4de, 0x4df], /* CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS */ + [0x4de, 0x4df], /* CYRILLIC SMALL LETTER ZE WITH DIAERESIS */ + [0x4e0, 0x4e1], /* CYRILLIC CAPITAL LETTER ABKHASIAN DZE */ + [0x4e0, 0x4e1], /* CYRILLIC SMALL LETTER ABKHASIAN DZE */ + [0x4e2, 0x4e3], /* CYRILLIC CAPITAL LETTER I WITH MACRON */ + [0x4e2, 0x4e3], /* CYRILLIC SMALL LETTER I WITH MACRON */ + [0x4e4, 0x4e5], /* CYRILLIC CAPITAL LETTER I WITH DIAERESIS */ + [0x4e4, 0x4e5], /* CYRILLIC SMALL LETTER I WITH DIAERESIS */ + [0x4e6, 0x4e7], /* CYRILLIC CAPITAL LETTER O WITH DIAERESIS */ + [0x4e6, 0x4e7], /* CYRILLIC SMALL LETTER O WITH DIAERESIS */ + [0x4e8, 0x4e9], /* CYRILLIC CAPITAL LETTER BARRED O */ + [0x4e8, 0x4e9], /* CYRILLIC SMALL LETTER BARRED O */ + [0x4ea, 0x4eb], /* CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS */ + [0x4ea, 0x4eb], /* CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS */ + [0x4ec, 0x4ed], /* CYRILLIC CAPITAL LETTER E WITH DIAERESIS */ + [0x4ec, 0x4ed], /* CYRILLIC SMALL LETTER E WITH DIAERESIS */ + [0x4ee, 0x4ef], /* CYRILLIC CAPITAL LETTER U WITH MACRON */ + [0x4ee, 0x4ef], /* CYRILLIC SMALL LETTER U WITH MACRON */ + [0x4f0, 0x4f1], /* CYRILLIC CAPITAL LETTER U WITH DIAERESIS */ + [0x4f0, 0x4f1], /* CYRILLIC SMALL LETTER U WITH DIAERESIS */ + [0x4f2, 0x4f3], /* CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE */ + [0x4f2, 0x4f3], /* CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE */ + [0x4f4, 0x4f5], /* CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS */ + [0x4f4, 0x4f5], /* CYRILLIC SMALL LETTER CHE WITH DIAERESIS */ + [0x4f6, 0x4f7], /* CYRILLIC CAPITAL LETTER GHE WITH DESCENDER */ + [0x4f6, 0x4f7], /* CYRILLIC SMALL LETTER GHE WITH DESCENDER */ + [0x4f8, 0x4f9], /* CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS */ + [0x4f8, 0x4f9], /* CYRILLIC SMALL LETTER YERU WITH DIAERESIS */ + [0x4fa, 0x4fb], /* CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK */ + [0x4fa, 0x4fb], /* CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK */ + [0x4fc, 0x4fd], /* CYRILLIC CAPITAL LETTER HA WITH HOOK */ + [0x4fc, 0x4fd], /* CYRILLIC SMALL LETTER HA WITH HOOK */ + [0x4fe, 0x4ff], /* CYRILLIC CAPITAL LETTER HA WITH STROKE */ + [0x4fe, 0x4ff], /* CYRILLIC SMALL LETTER HA WITH STROKE */ + [0x500, 0x501], /* CYRILLIC CAPITAL LETTER KOMI DE */ + [0x500, 0x501], /* CYRILLIC SMALL LETTER KOMI DE */ + [0x502, 0x503], /* CYRILLIC CAPITAL LETTER KOMI DJE */ + [0x502, 0x503], /* CYRILLIC SMALL LETTER KOMI DJE */ + [0x504, 0x505], /* CYRILLIC CAPITAL LETTER KOMI ZJE */ + [0x504, 0x505], /* CYRILLIC SMALL LETTER KOMI ZJE */ + [0x506, 0x507], /* CYRILLIC CAPITAL LETTER KOMI DZJE */ + [0x506, 0x507], /* CYRILLIC SMALL LETTER KOMI DZJE */ + [0x508, 0x509], /* CYRILLIC CAPITAL LETTER KOMI LJE */ + [0x508, 0x509], /* CYRILLIC SMALL LETTER KOMI LJE */ + [0x50a, 0x50b], /* CYRILLIC CAPITAL LETTER KOMI NJE */ + [0x50a, 0x50b], /* CYRILLIC SMALL LETTER KOMI NJE */ + [0x50c, 0x50d], /* CYRILLIC CAPITAL LETTER KOMI SJE */ + [0x50c, 0x50d], /* CYRILLIC SMALL LETTER KOMI SJE */ + [0x50e, 0x50f], /* CYRILLIC CAPITAL LETTER KOMI TJE */ + [0x50e, 0x50f], /* CYRILLIC SMALL LETTER KOMI TJE */ + [0x510, 0x511], /* CYRILLIC CAPITAL LETTER REVERSED ZE */ + [0x510, 0x511], /* CYRILLIC SMALL LETTER REVERSED ZE */ + [0x512, 0x513], /* CYRILLIC CAPITAL LETTER EL WITH HOOK */ + [0x512, 0x513], /* CYRILLIC SMALL LETTER EL WITH HOOK */ + [0x514, 0x515], /* CYRILLIC CAPITAL LETTER LHA */ + [0x514, 0x515], /* CYRILLIC SMALL LETTER LHA */ + [0x516, 0x517], /* CYRILLIC CAPITAL LETTER RHA */ + [0x516, 0x517], /* CYRILLIC SMALL LETTER RHA */ + [0x518, 0x519], /* CYRILLIC CAPITAL LETTER YAE */ + [0x518, 0x519], /* CYRILLIC SMALL LETTER YAE */ + [0x51a, 0x51b], /* CYRILLIC CAPITAL LETTER QA */ + [0x51a, 0x51b], /* CYRILLIC SMALL LETTER QA */ + [0x51c, 0x51d], /* CYRILLIC CAPITAL LETTER WE */ + [0x51c, 0x51d], /* CYRILLIC SMALL LETTER WE */ + [0x51e, 0x51f], /* CYRILLIC CAPITAL LETTER ALEUT KA */ + [0x51e, 0x51f], /* CYRILLIC SMALL LETTER ALEUT KA */ + [0x520, 0x521], /* CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK */ + [0x520, 0x521], /* CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK */ + [0x522, 0x523], /* CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK */ + [0x522, 0x523], /* CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK */ + [0x524, 0x525], /* CYRILLIC CAPITAL LETTER PE WITH DESCENDER */ + [0x524, 0x525], /* CYRILLIC SMALL LETTER PE WITH DESCENDER */ + [0x526, 0x527], /* CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER */ + [0x526, 0x527], /* CYRILLIC SMALL LETTER SHHA WITH DESCENDER */ + [0x528, 0x528], + [0x529, 0x529], + [0x52a, 0x52a], + [0x52b, 0x52b], + [0x52c, 0x52c], + [0x52d, 0x52d], + [0x52e, 0x52e], + [0x52f, 0x52f], + [0x530, 0x530], + [0x531, 0x561], /* ARMENIAN CAPITAL LETTER AYB */ + [0x532, 0x562], /* ARMENIAN CAPITAL LETTER BEN */ + [0x533, 0x563], /* ARMENIAN CAPITAL LETTER GIM */ + [0x534, 0x564], /* ARMENIAN CAPITAL LETTER DA */ + [0x535, 0x565], /* ARMENIAN CAPITAL LETTER ECH */ + [0x536, 0x566], /* ARMENIAN CAPITAL LETTER ZA */ + [0x537, 0x567], /* ARMENIAN CAPITAL LETTER EH */ + [0x538, 0x568], /* ARMENIAN CAPITAL LETTER ET */ + [0x539, 0x569], /* ARMENIAN CAPITAL LETTER TO */ + [0x53a, 0x56a], /* ARMENIAN CAPITAL LETTER ZHE */ + [0x53b, 0x56b], /* ARMENIAN CAPITAL LETTER INI */ + [0x53c, 0x56c], /* ARMENIAN CAPITAL LETTER LIWN */ + [0x53d, 0x56d], /* ARMENIAN CAPITAL LETTER XEH */ + [0x53e, 0x56e], /* ARMENIAN CAPITAL LETTER CA */ + [0x53f, 0x56f], /* ARMENIAN CAPITAL LETTER KEN */ + [0x540, 0x570], /* ARMENIAN CAPITAL LETTER HO */ + [0x541, 0x571], /* ARMENIAN CAPITAL LETTER JA */ + [0x542, 0x572], /* ARMENIAN CAPITAL LETTER GHAD (ARMENIAN CAPITAL LETTER LAD) */ + [0x543, 0x573], /* ARMENIAN CAPITAL LETTER CHEH */ + [0x544, 0x574], /* ARMENIAN CAPITAL LETTER MEN */ + [0x545, 0x575], /* ARMENIAN CAPITAL LETTER YI */ + [0x546, 0x576], /* ARMENIAN CAPITAL LETTER NOW */ + [0x547, 0x577], /* ARMENIAN CAPITAL LETTER SHA */ + [0x548, 0x578], /* ARMENIAN CAPITAL LETTER VO */ + [0x549, 0x579], /* ARMENIAN CAPITAL LETTER CHA */ + [0x54a, 0x57a], /* ARMENIAN CAPITAL LETTER PEH */ + [0x54b, 0x57b], /* ARMENIAN CAPITAL LETTER JHEH */ + [0x54c, 0x57c], /* ARMENIAN CAPITAL LETTER RA */ + [0x54d, 0x57d], /* ARMENIAN CAPITAL LETTER SEH */ + [0x54e, 0x57e], /* ARMENIAN CAPITAL LETTER VEW */ + [0x54f, 0x57f], /* ARMENIAN CAPITAL LETTER TIWN */ + [0x550, 0x580], /* ARMENIAN CAPITAL LETTER REH */ + [0x551, 0x581], /* ARMENIAN CAPITAL LETTER CO */ + [0x552, 0x582], /* ARMENIAN CAPITAL LETTER YIWN */ + [0x553, 0x583], /* ARMENIAN CAPITAL LETTER PIWR */ + [0x554, 0x584], /* ARMENIAN CAPITAL LETTER KEH */ + [0x555, 0x585], /* ARMENIAN CAPITAL LETTER OH */ + [0x556, 0x586], /* ARMENIAN CAPITAL LETTER FEH */ + [0x557, 0x557], + [0x558, 0x558], + [0x559, 0x559], /* ARMENIAN MODIFIER LETTER LEFT HALF RING */ + [0x55a, 0x55a], /* ARMENIAN APOSTROPHE (ARMENIAN MODIFIER LETTER RIGHT HALF RING) */ + [0x55b, 0x55b], /* ARMENIAN EMPHASIS MARK */ + [0x55c, 0x55c], /* ARMENIAN EXCLAMATION MARK */ + [0x55d, 0x55d], /* ARMENIAN COMMA */ + [0x55e, 0x55e], /* ARMENIAN QUESTION MARK */ + [0x55f, 0x55f], /* ARMENIAN ABBREVIATION MARK */ + [0x560, 0x560], + [0x531, 0x561], /* ARMENIAN SMALL LETTER AYB */ + [0x532, 0x562], /* ARMENIAN SMALL LETTER BEN */ + [0x533, 0x563], /* ARMENIAN SMALL LETTER GIM */ + [0x534, 0x564], /* ARMENIAN SMALL LETTER DA */ + [0x535, 0x565], /* ARMENIAN SMALL LETTER ECH */ + [0x536, 0x566], /* ARMENIAN SMALL LETTER ZA */ + [0x537, 0x567], /* ARMENIAN SMALL LETTER EH */ + [0x538, 0x568], /* ARMENIAN SMALL LETTER ET */ + [0x539, 0x569], /* ARMENIAN SMALL LETTER TO */ + [0x53a, 0x56a], /* ARMENIAN SMALL LETTER ZHE */ + [0x53b, 0x56b], /* ARMENIAN SMALL LETTER INI */ + [0x53c, 0x56c], /* ARMENIAN SMALL LETTER LIWN */ + [0x53d, 0x56d], /* ARMENIAN SMALL LETTER XEH */ + [0x53e, 0x56e], /* ARMENIAN SMALL LETTER CA */ + [0x53f, 0x56f], /* ARMENIAN SMALL LETTER KEN */ + [0x540, 0x570], /* ARMENIAN SMALL LETTER HO */ + [0x541, 0x571], /* ARMENIAN SMALL LETTER JA */ + [0x542, 0x572], /* ARMENIAN SMALL LETTER GHAD (ARMENIAN SMALL LETTER LAD) */ + [0x543, 0x573], /* ARMENIAN SMALL LETTER CHEH */ + [0x544, 0x574], /* ARMENIAN SMALL LETTER MEN */ + [0x545, 0x575], /* ARMENIAN SMALL LETTER YI */ + [0x546, 0x576], /* ARMENIAN SMALL LETTER NOW */ + [0x547, 0x577], /* ARMENIAN SMALL LETTER SHA */ + [0x548, 0x578], /* ARMENIAN SMALL LETTER VO */ + [0x549, 0x579], /* ARMENIAN SMALL LETTER CHA */ + [0x54a, 0x57a], /* ARMENIAN SMALL LETTER PEH */ + [0x54b, 0x57b], /* ARMENIAN SMALL LETTER JHEH */ + [0x54c, 0x57c], /* ARMENIAN SMALL LETTER RA */ + [0x54d, 0x57d], /* ARMENIAN SMALL LETTER SEH */ + [0x54e, 0x57e], /* ARMENIAN SMALL LETTER VEW */ + [0x54f, 0x57f], /* ARMENIAN SMALL LETTER TIWN */ + [0x550, 0x580], /* ARMENIAN SMALL LETTER REH */ + [0x551, 0x581], /* ARMENIAN SMALL LETTER CO */ + [0x552, 0x582], /* ARMENIAN SMALL LETTER YIWN */ + [0x553, 0x583], /* ARMENIAN SMALL LETTER PIWR */ + [0x554, 0x584], /* ARMENIAN SMALL LETTER KEH */ + [0x555, 0x585], /* ARMENIAN SMALL LETTER OH */ + [0x556, 0x586], /* ARMENIAN SMALL LETTER FEH */ + [0x587, 0x587], /* ARMENIAN SMALL LIGATURE ECH YIWN */ + [0x588, 0x588], + [0x589, 0x589], /* ARMENIAN FULL STOP (ARMENIAN PERIOD) */ + [0x58a, 0x58a], /* ARMENIAN HYPHEN */ + [0x58b, 0x58b], + [0x58c, 0x58c], + [0x58d, 0x58d], + [0x58e, 0x58e], + [0x58f, 0x58f], /* ARMENIAN DRAM SIGN */ + [0x590, 0x590], + [0x591, 0x591], /* HEBREW ACCENT ETNAHTA */ + [0x592, 0x592], /* HEBREW ACCENT SEGOL */ + [0x593, 0x593], /* HEBREW ACCENT SHALSHELET */ + [0x594, 0x594], /* HEBREW ACCENT ZAQEF QATAN */ + [0x595, 0x595], /* HEBREW ACCENT ZAQEF GADOL */ + [0x596, 0x596], /* HEBREW ACCENT TIPEHA */ + [0x597, 0x597], /* HEBREW ACCENT REVIA */ + [0x598, 0x598], /* HEBREW ACCENT ZARQA */ + [0x599, 0x599], /* HEBREW ACCENT PASHTA */ + [0x59a, 0x59a], /* HEBREW ACCENT YETIV */ + [0x59b, 0x59b], /* HEBREW ACCENT TEVIR */ + [0x59c, 0x59c], /* HEBREW ACCENT GERESH */ + [0x59d, 0x59d], /* HEBREW ACCENT GERESH MUQDAM */ + [0x59e, 0x59e], /* HEBREW ACCENT GERSHAYIM */ + [0x59f, 0x59f], /* HEBREW ACCENT QARNEY PARA */ + [0x5a0, 0x5a0], /* HEBREW ACCENT TELISHA GEDOLA */ + [0x5a1, 0x5a1], /* HEBREW ACCENT PAZER */ + [0x5a2, 0x5a2], /* HEBREW ACCENT ATNAH HAFUKH */ + [0x5a3, 0x5a3], /* HEBREW ACCENT MUNAH */ + [0x5a4, 0x5a4], /* HEBREW ACCENT MAHAPAKH */ + [0x5a5, 0x5a5], /* HEBREW ACCENT MERKHA */ + [0x5a6, 0x5a6], /* HEBREW ACCENT MERKHA KEFULA */ + [0x5a7, 0x5a7], /* HEBREW ACCENT DARGA */ + [0x5a8, 0x5a8], /* HEBREW ACCENT QADMA */ + [0x5a9, 0x5a9], /* HEBREW ACCENT TELISHA QETANA */ + [0x5aa, 0x5aa], /* HEBREW ACCENT YERAH BEN YOMO */ + [0x5ab, 0x5ab], /* HEBREW ACCENT OLE */ + [0x5ac, 0x5ac], /* HEBREW ACCENT ILUY */ + [0x5ad, 0x5ad], /* HEBREW ACCENT DEHI */ + [0x5ae, 0x5ae], /* HEBREW ACCENT ZINOR */ + [0x5af, 0x5af], /* HEBREW MARK MASORA CIRCLE */ + [0x5b0, 0x5b0], /* HEBREW POINT SHEVA */ + [0x5b1, 0x5b1], /* HEBREW POINT HATAF SEGOL */ + [0x5b2, 0x5b2], /* HEBREW POINT HATAF PATAH */ + [0x5b3, 0x5b3], /* HEBREW POINT HATAF QAMATS */ + [0x5b4, 0x5b4], /* HEBREW POINT HIRIQ */ + [0x5b5, 0x5b5], /* HEBREW POINT TSERE */ + [0x5b6, 0x5b6], /* HEBREW POINT SEGOL */ + [0x5b7, 0x5b7], /* HEBREW POINT PATAH */ + [0x5b8, 0x5b8], /* HEBREW POINT QAMATS */ + [0x5b9, 0x5b9], /* HEBREW POINT HOLAM */ + [0x5ba, 0x5ba], /* HEBREW POINT HOLAM HASER FOR VAV */ + [0x5bb, 0x5bb], /* HEBREW POINT QUBUTS */ + [0x5bc, 0x5bc], /* HEBREW POINT DAGESH OR MAPIQ (HEBREW POINT DAGESH) */ + [0x5bd, 0x5bd], /* HEBREW POINT METEG */ + [0x5be, 0x5be], /* HEBREW PUNCTUATION MAQAF */ + [0x5bf, 0x5bf], /* HEBREW POINT RAFE */ + [0x5c0, 0x5c0], /* HEBREW PUNCTUATION PASEQ (HEBREW POINT PASEQ) */ + [0x5c1, 0x5c1], /* HEBREW POINT SHIN DOT */ + [0x5c2, 0x5c2], /* HEBREW POINT SIN DOT */ + [0x5c3, 0x5c3], /* HEBREW PUNCTUATION SOF PASUQ */ + [0x5c4, 0x5c4], /* HEBREW MARK UPPER DOT */ + [0x5c5, 0x5c5], /* HEBREW MARK LOWER DOT */ + [0x5c6, 0x5c6], /* HEBREW PUNCTUATION NUN HAFUKHA */ + [0x5c7, 0x5c7], /* HEBREW POINT QAMATS QATAN */ + [0x5c8, 0x5c8], + [0x5c9, 0x5c9], + [0x5ca, 0x5ca], + [0x5cb, 0x5cb], + [0x5cc, 0x5cc], + [0x5cd, 0x5cd], + [0x5ce, 0x5ce], + [0x5cf, 0x5cf], + [0x5d0, 0x5d0], /* HEBREW LETTER ALEF */ + [0x5d1, 0x5d1], /* HEBREW LETTER BET */ + [0x5d2, 0x5d2], /* HEBREW LETTER GIMEL */ + [0x5d3, 0x5d3], /* HEBREW LETTER DALET */ + [0x5d4, 0x5d4], /* HEBREW LETTER HE */ + [0x5d5, 0x5d5], /* HEBREW LETTER VAV */ + [0x5d6, 0x5d6], /* HEBREW LETTER ZAYIN */ + [0x5d7, 0x5d7], /* HEBREW LETTER HET */ + [0x5d8, 0x5d8], /* HEBREW LETTER TET */ + [0x5d9, 0x5d9], /* HEBREW LETTER YOD */ + [0x5da, 0x5da], /* HEBREW LETTER FINAL KAF */ + [0x5db, 0x5db], /* HEBREW LETTER KAF */ + [0x5dc, 0x5dc], /* HEBREW LETTER LAMED */ + [0x5dd, 0x5dd], /* HEBREW LETTER FINAL MEM */ + [0x5de, 0x5de], /* HEBREW LETTER MEM */ + [0x5df, 0x5df], /* HEBREW LETTER FINAL NUN */ + [0x5e0, 0x5e0], /* HEBREW LETTER NUN */ + [0x5e1, 0x5e1], /* HEBREW LETTER SAMEKH */ + [0x5e2, 0x5e2], /* HEBREW LETTER AYIN */ + [0x5e3, 0x5e3], /* HEBREW LETTER FINAL PE */ + [0x5e4, 0x5e4], /* HEBREW LETTER PE */ + [0x5e5, 0x5e5], /* HEBREW LETTER FINAL TSADI */ + [0x5e6, 0x5e6], /* HEBREW LETTER TSADI */ + [0x5e7, 0x5e7], /* HEBREW LETTER QOF */ + [0x5e8, 0x5e8], /* HEBREW LETTER RESH */ + [0x5e9, 0x5e9], /* HEBREW LETTER SHIN */ + [0x5ea, 0x5ea], /* HEBREW LETTER TAV */ + [0x5eb, 0x5eb], + [0x5ec, 0x5ec], + [0x5ed, 0x5ed], + [0x5ee, 0x5ee], + [0x5ef, 0x5ef], + [0x5f0, 0x5f0], /* HEBREW LIGATURE YIDDISH DOUBLE VAV (HEBREW LETTER DOUBLE VAV) */ + [0x5f1, 0x5f1], /* HEBREW LIGATURE YIDDISH VAV YOD (HEBREW LETTER VAV YOD) */ + [0x5f2, 0x5f2], /* HEBREW LIGATURE YIDDISH DOUBLE YOD (HEBREW LETTER DOUBLE YOD) */ + [0x5f3, 0x5f3], /* HEBREW PUNCTUATION GERESH */ + [0x5f4, 0x5f4], /* HEBREW PUNCTUATION GERSHAYIM */ + [0x5f5, 0x5f5], + [0x5f6, 0x5f6], + [0x5f7, 0x5f7], + [0x5f8, 0x5f8], + [0x5f9, 0x5f9], + [0x5fa, 0x5fa], + [0x5fb, 0x5fb], + [0x5fc, 0x5fc], + [0x5fd, 0x5fd], + [0x5fe, 0x5fe], + [0x5ff, 0x5ff], + [0x600, 0x600], /* ARABIC NUMBER SIGN */ + [0x601, 0x601], /* ARABIC SIGN SANAH */ + [0x602, 0x602], /* ARABIC FOOTNOTE MARKER */ + [0x603, 0x603], /* ARABIC SIGN SAFHA */ + [0x604, 0x604], /* ARABIC SIGN SAMVAT */ + [0x605, 0x605], + [0x606, 0x606], /* ARABIC-INDIC CUBE ROOT */ + [0x607, 0x607], /* ARABIC-INDIC FOURTH ROOT */ + [0x608, 0x608], /* ARABIC RAY */ + [0x609, 0x609], /* ARABIC-INDIC PER MILLE SIGN */ + [0x60a, 0x60a], /* ARABIC-INDIC PER TEN THOUSAND SIGN */ + [0x60b, 0x60b], /* AFGHANI SIGN */ + [0x60c, 0x60c], /* ARABIC COMMA */ + [0x60d, 0x60d], /* ARABIC DATE SEPARATOR */ + [0x60e, 0x60e], /* ARABIC POETIC VERSE SIGN */ + [0x60f, 0x60f], /* ARABIC SIGN MISRA */ + [0x610, 0x610], /* ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM */ + [0x611, 0x611], /* ARABIC SIGN ALAYHE ASSALLAM */ + [0x612, 0x612], /* ARABIC SIGN RAHMATULLAH ALAYHE */ + [0x613, 0x613], /* ARABIC SIGN RADI ALLAHOU ANHU */ + [0x614, 0x614], /* ARABIC SIGN TAKHALLUS */ + [0x615, 0x615], /* ARABIC SMALL HIGH TAH */ + [0x616, 0x616], /* ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH */ + [0x617, 0x617], /* ARABIC SMALL HIGH ZAIN */ + [0x618, 0x618], /* ARABIC SMALL FATHA */ + [0x619, 0x619], /* ARABIC SMALL DAMMA */ + [0x61a, 0x61a], /* ARABIC SMALL KASRA */ + [0x61b, 0x61b], /* ARABIC SEMICOLON */ + [0x61c, 0x61c], + [0x61d, 0x61d], + [0x61e, 0x61e], /* ARABIC TRIPLE DOT PUNCTUATION MARK */ + [0x61f, 0x61f], /* ARABIC QUESTION MARK */ + [0x620, 0x620], /* ARABIC LETTER KASHMIRI YEH */ + [0x621, 0x621], /* ARABIC LETTER HAMZA (ARABIC LETTER HAMZAH) */ + [0x622, 0x622], /* ARABIC LETTER ALEF WITH MADDA ABOVE (ARABIC LETTER MADDAH ON ALEF) */ + [0x623, 0x623], /* ARABIC LETTER ALEF WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON ALEF) */ + [0x624, 0x624], /* ARABIC LETTER WAW WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON WAW) */ + [0x625, 0x625], /* ARABIC LETTER ALEF WITH HAMZA BELOW (ARABIC LETTER HAMZAH UNDER ALEF) */ + [0x626, 0x626], /* ARABIC LETTER YEH WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON YA) */ + [0x627, 0x627], /* ARABIC LETTER ALEF */ + [0x628, 0x628], /* ARABIC LETTER BEH (ARABIC LETTER BAA) */ + [0x629, 0x629], /* ARABIC LETTER TEH MARBUTA (ARABIC LETTER TAA MARBUTAH) */ + [0x62a, 0x62a], /* ARABIC LETTER TEH (ARABIC LETTER TAA) */ + [0x62b, 0x62b], /* ARABIC LETTER THEH (ARABIC LETTER THAA) */ + [0x62c, 0x62c], /* ARABIC LETTER JEEM */ + [0x62d, 0x62d], /* ARABIC LETTER HAH (ARABIC LETTER HAA) */ + [0x62e, 0x62e], /* ARABIC LETTER KHAH (ARABIC LETTER KHAA) */ + [0x62f, 0x62f], /* ARABIC LETTER DAL */ + [0x630, 0x630], /* ARABIC LETTER THAL */ + [0x631, 0x631], /* ARABIC LETTER REH (ARABIC LETTER RA) */ + [0x632, 0x632], /* ARABIC LETTER ZAIN */ + [0x633, 0x633], /* ARABIC LETTER SEEN */ + [0x634, 0x634], /* ARABIC LETTER SHEEN */ + [0x635, 0x635], /* ARABIC LETTER SAD */ + [0x636, 0x636], /* ARABIC LETTER DAD */ + [0x637, 0x637], /* ARABIC LETTER TAH */ + [0x638, 0x638], /* ARABIC LETTER ZAH (ARABIC LETTER DHAH) */ + [0x639, 0x639], /* ARABIC LETTER AIN */ + [0x63a, 0x63a], /* ARABIC LETTER GHAIN */ + [0x63b, 0x63b], /* ARABIC LETTER KEHEH WITH TWO DOTS ABOVE */ + [0x63c, 0x63c], /* ARABIC LETTER KEHEH WITH THREE DOTS BELOW */ + [0x63d, 0x63d], /* ARABIC LETTER FARSI YEH WITH INVERTED V */ + [0x63e, 0x63e], /* ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE */ + [0x63f, 0x63f], /* ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE */ + [0x640, 0x640], /* ARABIC TATWEEL */ + [0x641, 0x641], /* ARABIC LETTER FEH (ARABIC LETTER FA) */ + [0x642, 0x642], /* ARABIC LETTER QAF */ + [0x643, 0x643], /* ARABIC LETTER KAF (ARABIC LETTER CAF) */ + [0x644, 0x644], /* ARABIC LETTER LAM */ + [0x645, 0x645], /* ARABIC LETTER MEEM */ + [0x646, 0x646], /* ARABIC LETTER NOON */ + [0x647, 0x647], /* ARABIC LETTER HEH (ARABIC LETTER HA) */ + [0x648, 0x648], /* ARABIC LETTER WAW */ + [0x649, 0x649], /* ARABIC LETTER ALEF MAKSURA (ARABIC LETTER ALEF MAQSURAH) */ + [0x64a, 0x64a], /* ARABIC LETTER YEH (ARABIC LETTER YA) */ + [0x64b, 0x64b], /* ARABIC FATHATAN */ + [0x64c, 0x64c], /* ARABIC DAMMATAN */ + [0x64d, 0x64d], /* ARABIC KASRATAN */ + [0x64e, 0x64e], /* ARABIC FATHA (ARABIC FATHAH) */ + [0x64f, 0x64f], /* ARABIC DAMMA (ARABIC DAMMAH) */ + [0x650, 0x650], /* ARABIC KASRA (ARABIC KASRAH) */ + [0x651, 0x651], /* ARABIC SHADDA (ARABIC SHADDAH) */ + [0x652, 0x652], /* ARABIC SUKUN */ + [0x653, 0x653], /* ARABIC MADDAH ABOVE */ + [0x654, 0x654], /* ARABIC HAMZA ABOVE */ + [0x655, 0x655], /* ARABIC HAMZA BELOW */ + [0x656, 0x656], /* ARABIC SUBSCRIPT ALEF */ + [0x657, 0x657], /* ARABIC INVERTED DAMMA */ + [0x658, 0x658], /* ARABIC MARK NOON GHUNNA */ + [0x659, 0x659], /* ARABIC ZWARAKAY */ + [0x65a, 0x65a], /* ARABIC VOWEL SIGN SMALL V ABOVE */ + [0x65b, 0x65b], /* ARABIC VOWEL SIGN INVERTED SMALL V ABOVE */ + [0x65c, 0x65c], /* ARABIC VOWEL SIGN DOT BELOW */ + [0x65d, 0x65d], /* ARABIC REVERSED DAMMA */ + [0x65e, 0x65e], /* ARABIC FATHA WITH TWO DOTS */ + [0x65f, 0x65f], /* ARABIC WAVY HAMZA BELOW */ + [0x660, 0x660], /* ARABIC-INDIC DIGIT ZERO */ + [0x661, 0x661], /* ARABIC-INDIC DIGIT ONE */ + [0x662, 0x662], /* ARABIC-INDIC DIGIT TWO */ + [0x663, 0x663], /* ARABIC-INDIC DIGIT THREE */ + [0x664, 0x664], /* ARABIC-INDIC DIGIT FOUR */ + [0x665, 0x665], /* ARABIC-INDIC DIGIT FIVE */ + [0x666, 0x666], /* ARABIC-INDIC DIGIT SIX */ + [0x667, 0x667], /* ARABIC-INDIC DIGIT SEVEN */ + [0x668, 0x668], /* ARABIC-INDIC DIGIT EIGHT */ + [0x669, 0x669], /* ARABIC-INDIC DIGIT NINE */ + [0x66a, 0x66a], /* ARABIC PERCENT SIGN */ + [0x66b, 0x66b], /* ARABIC DECIMAL SEPARATOR */ + [0x66c, 0x66c], /* ARABIC THOUSANDS SEPARATOR */ + [0x66d, 0x66d], /* ARABIC FIVE POINTED STAR */ + [0x66e, 0x66e], /* ARABIC LETTER DOTLESS BEH */ + [0x66f, 0x66f], /* ARABIC LETTER DOTLESS QAF */ + [0x670, 0x670], /* ARABIC LETTER SUPERSCRIPT ALEF (ARABIC ALEF ABOVE) */ + [0x671, 0x671], /* ARABIC LETTER ALEF WASLA (ARABIC LETTER HAMZAT WASL ON ALEF) */ + [0x672, 0x672], /* ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE (ARABIC LETTER WAVY HAMZAH ON ALEF) */ + [0x673, 0x673], /* ARABIC LETTER ALEF WITH WAVY HAMZA BELOW (ARABIC LETTER WAVY HAMZAH UNDER ALEF) */ + [0x674, 0x674], /* ARABIC LETTER HIGH HAMZA (ARABIC LETTER HIGH HAMZAH) */ + [0x675, 0x675], /* ARABIC LETTER HIGH HAMZA ALEF (ARABIC LETTER HIGH HAMZAH ALEF) */ + [0x676, 0x676], /* ARABIC LETTER HIGH HAMZA WAW (ARABIC LETTER HIGH HAMZAH WAW) */ + [0x677, 0x677], /* ARABIC LETTER U WITH HAMZA ABOVE (ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH) */ + [0x678, 0x678], /* ARABIC LETTER HIGH HAMZA YEH (ARABIC LETTER HIGH HAMZAH YA) */ + [0x679, 0x679], /* ARABIC LETTER TTEH (ARABIC LETTER TAA WITH SMALL TAH) */ + [0x67a, 0x67a], /* ARABIC LETTER TTEHEH (ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE) */ + [0x67b, 0x67b], /* ARABIC LETTER BEEH (ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW) */ + [0x67c, 0x67c], /* ARABIC LETTER TEH WITH RING (ARABIC LETTER TAA WITH RING) */ + [0x67d, 0x67d], /* ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS (ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD) */ + [0x67e, 0x67e], /* ARABIC LETTER PEH (ARABIC LETTER TAA WITH THREE DOTS BELOW) */ + [0x67f, 0x67f], /* ARABIC LETTER TEHEH (ARABIC LETTER TAA WITH FOUR DOTS ABOVE) */ + [0x680, 0x680], /* ARABIC LETTER BEHEH (ARABIC LETTER BAA WITH FOUR DOTS BELOW) */ + [0x681, 0x681], /* ARABIC LETTER HAH WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON HAA) */ + [0x682, 0x682], /* ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE (ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE) */ + [0x683, 0x683], /* ARABIC LETTER NYEH (ARABIC LETTER HAA WITH MIDDLE TWO DOTS) */ + [0x684, 0x684], /* ARABIC LETTER DYEH (ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL) */ + [0x685, 0x685], /* ARABIC LETTER HAH WITH THREE DOTS ABOVE (ARABIC LETTER HAA WITH THREE DOTS ABOVE) */ + [0x686, 0x686], /* ARABIC LETTER TCHEH (ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD) */ + [0x687, 0x687], /* ARABIC LETTER TCHEHEH (ARABIC LETTER HAA WITH MIDDLE FOUR DOTS) */ + [0x688, 0x688], /* ARABIC LETTER DDAL (ARABIC LETTER DAL WITH SMALL TAH) */ + [0x689, 0x689], /* ARABIC LETTER DAL WITH RING */ + [0x68a, 0x68a], /* ARABIC LETTER DAL WITH DOT BELOW */ + [0x68b, 0x68b], /* ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH */ + [0x68c, 0x68c], /* ARABIC LETTER DAHAL (ARABIC LETTER DAL WITH TWO DOTS ABOVE) */ + [0x68d, 0x68d], /* ARABIC LETTER DDAHAL (ARABIC LETTER DAL WITH TWO DOTS BELOW) */ + [0x68e, 0x68e], /* ARABIC LETTER DUL (ARABIC LETTER DAL WITH THREE DOTS ABOVE) */ + [0x68f, 0x68f], /* ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS (ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD) */ + [0x690, 0x690], /* ARABIC LETTER DAL WITH FOUR DOTS ABOVE */ + [0x691, 0x691], /* ARABIC LETTER RREH (ARABIC LETTER RA WITH SMALL TAH) */ + [0x692, 0x692], /* ARABIC LETTER REH WITH SMALL V (ARABIC LETTER RA WITH SMALL V) */ + [0x693, 0x693], /* ARABIC LETTER REH WITH RING (ARABIC LETTER RA WITH RING) */ + [0x694, 0x694], /* ARABIC LETTER REH WITH DOT BELOW (ARABIC LETTER RA WITH DOT BELOW) */ + [0x695, 0x695], /* ARABIC LETTER REH WITH SMALL V BELOW (ARABIC LETTER RA WITH SMALL V BELOW) */ + [0x696, 0x696], /* ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE (ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE) */ + [0x697, 0x697], /* ARABIC LETTER REH WITH TWO DOTS ABOVE (ARABIC LETTER RA WITH TWO DOTS ABOVE) */ + [0x698, 0x698], /* ARABIC LETTER JEH (ARABIC LETTER RA WITH THREE DOTS ABOVE) */ + [0x699, 0x699], /* ARABIC LETTER REH WITH FOUR DOTS ABOVE (ARABIC LETTER RA WITH FOUR DOTS ABOVE) */ + [0x69a, 0x69a], /* ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE */ + [0x69b, 0x69b], /* ARABIC LETTER SEEN WITH THREE DOTS BELOW */ + [0x69c, 0x69c], /* ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE */ + [0x69d, 0x69d], /* ARABIC LETTER SAD WITH TWO DOTS BELOW */ + [0x69e, 0x69e], /* ARABIC LETTER SAD WITH THREE DOTS ABOVE */ + [0x69f, 0x69f], /* ARABIC LETTER TAH WITH THREE DOTS ABOVE */ + [0x6a0, 0x6a0], /* ARABIC LETTER AIN WITH THREE DOTS ABOVE */ + [0x6a1, 0x6a1], /* ARABIC LETTER DOTLESS FEH (ARABIC LETTER DOTLESS FA) */ + [0x6a2, 0x6a2], /* ARABIC LETTER FEH WITH DOT MOVED BELOW (ARABIC LETTER FA WITH DOT MOVED BELOW) */ + [0x6a3, 0x6a3], /* ARABIC LETTER FEH WITH DOT BELOW (ARABIC LETTER FA WITH DOT BELOW) */ + [0x6a4, 0x6a4], /* ARABIC LETTER VEH (ARABIC LETTER FA WITH THREE DOTS ABOVE) */ + [0x6a5, 0x6a5], /* ARABIC LETTER FEH WITH THREE DOTS BELOW (ARABIC LETTER FA WITH THREE DOTS BELOW) */ + [0x6a6, 0x6a6], /* ARABIC LETTER PEHEH (ARABIC LETTER FA WITH FOUR DOTS ABOVE) */ + [0x6a7, 0x6a7], /* ARABIC LETTER QAF WITH DOT ABOVE */ + [0x6a8, 0x6a8], /* ARABIC LETTER QAF WITH THREE DOTS ABOVE */ + [0x6a9, 0x6a9], /* ARABIC LETTER KEHEH (ARABIC LETTER OPEN CAF) */ + [0x6aa, 0x6aa], /* ARABIC LETTER SWASH KAF (ARABIC LETTER SWASH CAF) */ + [0x6ab, 0x6ab], /* ARABIC LETTER KAF WITH RING (ARABIC LETTER CAF WITH RING) */ + [0x6ac, 0x6ac], /* ARABIC LETTER KAF WITH DOT ABOVE (ARABIC LETTER CAF WITH DOT ABOVE) */ + [0x6ad, 0x6ad], /* ARABIC LETTER NG (ARABIC LETTER CAF WITH THREE DOTS ABOVE) */ + [0x6ae, 0x6ae], /* ARABIC LETTER KAF WITH THREE DOTS BELOW (ARABIC LETTER CAF WITH THREE DOTS BELOW) */ + [0x6af, 0x6af], /* ARABIC LETTER GAF */ + [0x6b0, 0x6b0], /* ARABIC LETTER GAF WITH RING */ + [0x6b1, 0x6b1], /* ARABIC LETTER NGOEH (ARABIC LETTER GAF WITH TWO DOTS ABOVE) */ + [0x6b2, 0x6b2], /* ARABIC LETTER GAF WITH TWO DOTS BELOW */ + [0x6b3, 0x6b3], /* ARABIC LETTER GUEH (ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW) */ + [0x6b4, 0x6b4], /* ARABIC LETTER GAF WITH THREE DOTS ABOVE */ + [0x6b5, 0x6b5], /* ARABIC LETTER LAM WITH SMALL V */ + [0x6b6, 0x6b6], /* ARABIC LETTER LAM WITH DOT ABOVE */ + [0x6b7, 0x6b7], /* ARABIC LETTER LAM WITH THREE DOTS ABOVE */ + [0x6b8, 0x6b8], /* ARABIC LETTER LAM WITH THREE DOTS BELOW */ + [0x6b9, 0x6b9], /* ARABIC LETTER NOON WITH DOT BELOW */ + [0x6ba, 0x6ba], /* ARABIC LETTER NOON GHUNNA (ARABIC LETTER DOTLESS NOON) */ + [0x6bb, 0x6bb], /* ARABIC LETTER RNOON (ARABIC LETTER DOTLESS NOON WITH SMALL TAH) */ + [0x6bc, 0x6bc], /* ARABIC LETTER NOON WITH RING */ + [0x6bd, 0x6bd], /* ARABIC LETTER NOON WITH THREE DOTS ABOVE */ + [0x6be, 0x6be], /* ARABIC LETTER HEH DOACHASHMEE (ARABIC LETTER KNOTTED HA) */ + [0x6bf, 0x6bf], /* ARABIC LETTER TCHEH WITH DOT ABOVE */ + [0x6c0, 0x6c0], /* ARABIC LETTER HEH WITH YEH ABOVE (ARABIC LETTER HAMZAH ON HA) */ + [0x6c1, 0x6c1], /* ARABIC LETTER HEH GOAL (ARABIC LETTER HA GOAL) */ + [0x6c2, 0x6c2], /* ARABIC LETTER HEH GOAL WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON HA GOAL) */ + [0x6c3, 0x6c3], /* ARABIC LETTER TEH MARBUTA GOAL (ARABIC LETTER TAA MARBUTAH GOAL) */ + [0x6c4, 0x6c4], /* ARABIC LETTER WAW WITH RING */ + [0x6c5, 0x6c5], /* ARABIC LETTER KIRGHIZ OE (ARABIC LETTER WAW WITH BAR) */ + [0x6c6, 0x6c6], /* ARABIC LETTER OE (ARABIC LETTER WAW WITH SMALL V) */ + [0x6c7, 0x6c7], /* ARABIC LETTER U (ARABIC LETTER WAW WITH DAMMAH) */ + [0x6c8, 0x6c8], /* ARABIC LETTER YU (ARABIC LETTER WAW WITH ALEF ABOVE) */ + [0x6c9, 0x6c9], /* ARABIC LETTER KIRGHIZ YU (ARABIC LETTER WAW WITH INVERTED SMALL V) */ + [0x6ca, 0x6ca], /* ARABIC LETTER WAW WITH TWO DOTS ABOVE */ + [0x6cb, 0x6cb], /* ARABIC LETTER VE (ARABIC LETTER WAW WITH THREE DOTS ABOVE) */ + [0x6cc, 0x6cc], /* ARABIC LETTER FARSI YEH (ARABIC LETTER DOTLESS YA) */ + [0x6cd, 0x6cd], /* ARABIC LETTER YEH WITH TAIL (ARABIC LETTER YA WITH TAIL) */ + [0x6ce, 0x6ce], /* ARABIC LETTER YEH WITH SMALL V (ARABIC LETTER YA WITH SMALL V) */ + [0x6cf, 0x6cf], /* ARABIC LETTER WAW WITH DOT ABOVE */ + [0x6d0, 0x6d0], /* ARABIC LETTER E (ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW) */ + [0x6d1, 0x6d1], /* ARABIC LETTER YEH WITH THREE DOTS BELOW (ARABIC LETTER YA WITH THREE DOTS BELOW) */ + [0x6d2, 0x6d2], /* ARABIC LETTER YEH BARREE (ARABIC LETTER YA BARREE) */ + [0x6d3, 0x6d3], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE (ARABIC LETTER HAMZAH ON YA BARREE) */ + [0x6d4, 0x6d4], /* ARABIC FULL STOP (ARABIC PERIOD) */ + [0x6d5, 0x6d5], /* ARABIC LETTER AE */ + [0x6d6, 0x6d6], /* ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA */ + [0x6d7, 0x6d7], /* ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA */ + [0x6d8, 0x6d8], /* ARABIC SMALL HIGH MEEM INITIAL FORM */ + [0x6d9, 0x6d9], /* ARABIC SMALL HIGH LAM ALEF */ + [0x6da, 0x6da], /* ARABIC SMALL HIGH JEEM */ + [0x6db, 0x6db], /* ARABIC SMALL HIGH THREE DOTS */ + [0x6dc, 0x6dc], /* ARABIC SMALL HIGH SEEN */ + [0x6dd, 0x6dd], /* ARABIC END OF AYAH */ + [0x6de, 0x6de], /* ARABIC START OF RUB EL HIZB */ + [0x6df, 0x6df], /* ARABIC SMALL HIGH ROUNDED ZERO */ + [0x6e0, 0x6e0], /* ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO */ + [0x6e1, 0x6e1], /* ARABIC SMALL HIGH DOTLESS HEAD OF KHAH */ + [0x6e2, 0x6e2], /* ARABIC SMALL HIGH MEEM ISOLATED FORM */ + [0x6e3, 0x6e3], /* ARABIC SMALL LOW SEEN */ + [0x6e4, 0x6e4], /* ARABIC SMALL HIGH MADDA */ + [0x6e5, 0x6e5], /* ARABIC SMALL WAW */ + [0x6e6, 0x6e6], /* ARABIC SMALL YEH */ + [0x6e7, 0x6e7], /* ARABIC SMALL HIGH YEH */ + [0x6e8, 0x6e8], /* ARABIC SMALL HIGH NOON */ + [0x6e9, 0x6e9], /* ARABIC PLACE OF SAJDAH */ + [0x6ea, 0x6ea], /* ARABIC EMPTY CENTRE LOW STOP */ + [0x6eb, 0x6eb], /* ARABIC EMPTY CENTRE HIGH STOP */ + [0x6ec, 0x6ec], /* ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE */ + [0x6ed, 0x6ed], /* ARABIC SMALL LOW MEEM */ + [0x6ee, 0x6ee], /* ARABIC LETTER DAL WITH INVERTED V */ + [0x6ef, 0x6ef], /* ARABIC LETTER REH WITH INVERTED V */ + [0x6f0, 0x6f0], /* EXTENDED ARABIC-INDIC DIGIT ZERO (EASTERN ARABIC-INDIC DIGIT ZERO) */ + [0x6f1, 0x6f1], /* EXTENDED ARABIC-INDIC DIGIT ONE (EASTERN ARABIC-INDIC DIGIT ONE) */ + [0x6f2, 0x6f2], /* EXTENDED ARABIC-INDIC DIGIT TWO (EASTERN ARABIC-INDIC DIGIT TWO) */ + [0x6f3, 0x6f3], /* EXTENDED ARABIC-INDIC DIGIT THREE (EASTERN ARABIC-INDIC DIGIT THREE) */ + [0x6f4, 0x6f4], /* EXTENDED ARABIC-INDIC DIGIT FOUR (EASTERN ARABIC-INDIC DIGIT FOUR) */ + [0x6f5, 0x6f5], /* EXTENDED ARABIC-INDIC DIGIT FIVE (EASTERN ARABIC-INDIC DIGIT FIVE) */ + [0x6f6, 0x6f6], /* EXTENDED ARABIC-INDIC DIGIT SIX (EASTERN ARABIC-INDIC DIGIT SIX) */ + [0x6f7, 0x6f7], /* EXTENDED ARABIC-INDIC DIGIT SEVEN (EASTERN ARABIC-INDIC DIGIT SEVEN) */ + [0x6f8, 0x6f8], /* EXTENDED ARABIC-INDIC DIGIT EIGHT (EASTERN ARABIC-INDIC DIGIT EIGHT) */ + [0x6f9, 0x6f9], /* EXTENDED ARABIC-INDIC DIGIT NINE (EASTERN ARABIC-INDIC DIGIT NINE) */ + [0x6fa, 0x6fa], /* ARABIC LETTER SHEEN WITH DOT BELOW */ + [0x6fb, 0x6fb], /* ARABIC LETTER DAD WITH DOT BELOW */ + [0x6fc, 0x6fc], /* ARABIC LETTER GHAIN WITH DOT BELOW */ + [0x6fd, 0x6fd], /* ARABIC SIGN SINDHI AMPERSAND */ + [0x6fe, 0x6fe], /* ARABIC SIGN SINDHI POSTPOSITION MEN */ + [0x6ff, 0x6ff], /* ARABIC LETTER HEH WITH INVERTED V */ + [0x700, 0x700], /* SYRIAC END OF PARAGRAPH */ + [0x701, 0x701], /* SYRIAC SUPRALINEAR FULL STOP */ + [0x702, 0x702], /* SYRIAC SUBLINEAR FULL STOP */ + [0x703, 0x703], /* SYRIAC SUPRALINEAR COLON */ + [0x704, 0x704], /* SYRIAC SUBLINEAR COLON */ + [0x705, 0x705], /* SYRIAC HORIZONTAL COLON */ + [0x706, 0x706], /* SYRIAC COLON SKEWED LEFT */ + [0x707, 0x707], /* SYRIAC COLON SKEWED RIGHT */ + [0x708, 0x708], /* SYRIAC SUPRALINEAR COLON SKEWED LEFT */ + [0x709, 0x709], /* SYRIAC SUBLINEAR COLON SKEWED RIGHT */ + [0x70a, 0x70a], /* SYRIAC CONTRACTION */ + [0x70b, 0x70b], /* SYRIAC HARKLEAN OBELUS */ + [0x70c, 0x70c], /* SYRIAC HARKLEAN METOBELUS */ + [0x70d, 0x70d], /* SYRIAC HARKLEAN ASTERISCUS */ + [0x70e, 0x70e], + [0x70f, 0x70f], /* SYRIAC ABBREVIATION MARK */ + [0x710, 0x710], /* SYRIAC LETTER ALAPH */ + [0x711, 0x711], /* SYRIAC LETTER SUPERSCRIPT ALAPH */ + [0x712, 0x712], /* SYRIAC LETTER BETH */ + [0x713, 0x713], /* SYRIAC LETTER GAMAL */ + [0x714, 0x714], /* SYRIAC LETTER GAMAL GARSHUNI */ + [0x715, 0x715], /* SYRIAC LETTER DALATH */ + [0x716, 0x716], /* SYRIAC LETTER DOTLESS DALATH RISH */ + [0x717, 0x717], /* SYRIAC LETTER HE */ + [0x718, 0x718], /* SYRIAC LETTER WAW */ + [0x719, 0x719], /* SYRIAC LETTER ZAIN */ + [0x71a, 0x71a], /* SYRIAC LETTER HETH */ + [0x71b, 0x71b], /* SYRIAC LETTER TETH */ + [0x71c, 0x71c], /* SYRIAC LETTER TETH GARSHUNI */ + [0x71d, 0x71d], /* SYRIAC LETTER YUDH */ + [0x71e, 0x71e], /* SYRIAC LETTER YUDH HE */ + [0x71f, 0x71f], /* SYRIAC LETTER KAPH */ + [0x720, 0x720], /* SYRIAC LETTER LAMADH */ + [0x721, 0x721], /* SYRIAC LETTER MIM */ + [0x722, 0x722], /* SYRIAC LETTER NUN */ + [0x723, 0x723], /* SYRIAC LETTER SEMKATH */ + [0x724, 0x724], /* SYRIAC LETTER FINAL SEMKATH */ + [0x725, 0x725], /* SYRIAC LETTER E */ + [0x726, 0x726], /* SYRIAC LETTER PE */ + [0x727, 0x727], /* SYRIAC LETTER REVERSED PE */ + [0x728, 0x728], /* SYRIAC LETTER SADHE */ + [0x729, 0x729], /* SYRIAC LETTER QAPH */ + [0x72a, 0x72a], /* SYRIAC LETTER RISH */ + [0x72b, 0x72b], /* SYRIAC LETTER SHIN */ + [0x72c, 0x72c], /* SYRIAC LETTER TAW */ + [0x72d, 0x72d], /* SYRIAC LETTER PERSIAN BHETH */ + [0x72e, 0x72e], /* SYRIAC LETTER PERSIAN GHAMAL */ + [0x72f, 0x72f], /* SYRIAC LETTER PERSIAN DHALATH */ + [0x730, 0x730], /* SYRIAC PTHAHA ABOVE */ + [0x731, 0x731], /* SYRIAC PTHAHA BELOW */ + [0x732, 0x732], /* SYRIAC PTHAHA DOTTED */ + [0x733, 0x733], /* SYRIAC ZQAPHA ABOVE */ + [0x734, 0x734], /* SYRIAC ZQAPHA BELOW */ + [0x735, 0x735], /* SYRIAC ZQAPHA DOTTED */ + [0x736, 0x736], /* SYRIAC RBASA ABOVE */ + [0x737, 0x737], /* SYRIAC RBASA BELOW */ + [0x738, 0x738], /* SYRIAC DOTTED ZLAMA HORIZONTAL */ + [0x739, 0x739], /* SYRIAC DOTTED ZLAMA ANGULAR */ + [0x73a, 0x73a], /* SYRIAC HBASA ABOVE */ + [0x73b, 0x73b], /* SYRIAC HBASA BELOW */ + [0x73c, 0x73c], /* SYRIAC HBASA-ESASA DOTTED */ + [0x73d, 0x73d], /* SYRIAC ESASA ABOVE */ + [0x73e, 0x73e], /* SYRIAC ESASA BELOW */ + [0x73f, 0x73f], /* SYRIAC RWAHA */ + [0x740, 0x740], /* SYRIAC FEMININE DOT */ + [0x741, 0x741], /* SYRIAC QUSHSHAYA */ + [0x742, 0x742], /* SYRIAC RUKKAKHA */ + [0x743, 0x743], /* SYRIAC TWO VERTICAL DOTS ABOVE */ + [0x744, 0x744], /* SYRIAC TWO VERTICAL DOTS BELOW */ + [0x745, 0x745], /* SYRIAC THREE DOTS ABOVE */ + [0x746, 0x746], /* SYRIAC THREE DOTS BELOW */ + [0x747, 0x747], /* SYRIAC OBLIQUE LINE ABOVE */ + [0x748, 0x748], /* SYRIAC OBLIQUE LINE BELOW */ + [0x749, 0x749], /* SYRIAC MUSIC */ + [0x74a, 0x74a], /* SYRIAC BARREKH */ + [0x74b, 0x74b], + [0x74c, 0x74c], + [0x74d, 0x74d], /* SYRIAC LETTER SOGDIAN ZHAIN */ + [0x74e, 0x74e], /* SYRIAC LETTER SOGDIAN KHAPH */ + [0x74f, 0x74f], /* SYRIAC LETTER SOGDIAN FE */ + [0x750, 0x750], /* ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW */ + [0x751, 0x751], /* ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE */ + [0x752, 0x752], /* ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW */ + [0x753, 0x753], /* ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE */ + [0x754, 0x754], /* ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE */ + [0x755, 0x755], /* ARABIC LETTER BEH WITH INVERTED SMALL V BELOW */ + [0x756, 0x756], /* ARABIC LETTER BEH WITH SMALL V */ + [0x757, 0x757], /* ARABIC LETTER HAH WITH TWO DOTS ABOVE */ + [0x758, 0x758], /* ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW */ + [0x759, 0x759], /* ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH */ + [0x75a, 0x75a], /* ARABIC LETTER DAL WITH INVERTED SMALL V BELOW */ + [0x75b, 0x75b], /* ARABIC LETTER REH WITH STROKE */ + [0x75c, 0x75c], /* ARABIC LETTER SEEN WITH FOUR DOTS ABOVE */ + [0x75d, 0x75d], /* ARABIC LETTER AIN WITH TWO DOTS ABOVE */ + [0x75e, 0x75e], /* ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE */ + [0x75f, 0x75f], /* ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE */ + [0x760, 0x760], /* ARABIC LETTER FEH WITH TWO DOTS BELOW */ + [0x761, 0x761], /* ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW */ + [0x762, 0x762], /* ARABIC LETTER KEHEH WITH DOT ABOVE */ + [0x763, 0x763], /* ARABIC LETTER KEHEH WITH THREE DOTS ABOVE */ + [0x764, 0x764], /* ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW */ + [0x765, 0x765], /* ARABIC LETTER MEEM WITH DOT ABOVE */ + [0x766, 0x766], /* ARABIC LETTER MEEM WITH DOT BELOW */ + [0x767, 0x767], /* ARABIC LETTER NOON WITH TWO DOTS BELOW */ + [0x768, 0x768], /* ARABIC LETTER NOON WITH SMALL TAH */ + [0x769, 0x769], /* ARABIC LETTER NOON WITH SMALL V */ + [0x76a, 0x76a], /* ARABIC LETTER LAM WITH BAR */ + [0x76b, 0x76b], /* ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE */ + [0x76c, 0x76c], /* ARABIC LETTER REH WITH HAMZA ABOVE */ + [0x76d, 0x76d], /* ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE */ + [0x76e, 0x76e], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW */ + [0x76f, 0x76f], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS */ + [0x770, 0x770], /* ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS */ + [0x771, 0x771], /* ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS */ + [0x772, 0x772], /* ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE */ + [0x773, 0x773], /* ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + [0x774, 0x774], /* ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + [0x775, 0x775], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + [0x776, 0x776], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + [0x777, 0x777], /* ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW */ + [0x778, 0x778], /* ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + [0x779, 0x779], /* ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + [0x77a, 0x77a], /* ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE */ + [0x77b, 0x77b], /* ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE */ + [0x77c, 0x77c], /* ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW */ + [0x77d, 0x77d], /* ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE */ + [0x77e, 0x77e], /* ARABIC LETTER SEEN WITH INVERTED V */ + [0x77f, 0x77f], /* ARABIC LETTER KAF WITH TWO DOTS ABOVE */ + [0x780, 0x780], /* THAANA LETTER HAA */ + [0x781, 0x781], /* THAANA LETTER SHAVIYANI */ + [0x782, 0x782], /* THAANA LETTER NOONU */ + [0x783, 0x783], /* THAANA LETTER RAA */ + [0x784, 0x784], /* THAANA LETTER BAA */ + [0x785, 0x785], /* THAANA LETTER LHAVIYANI */ + [0x786, 0x786], /* THAANA LETTER KAAFU */ + [0x787, 0x787], /* THAANA LETTER ALIFU */ + [0x788, 0x788], /* THAANA LETTER VAAVU */ + [0x789, 0x789], /* THAANA LETTER MEEMU */ + [0x78a, 0x78a], /* THAANA LETTER FAAFU */ + [0x78b, 0x78b], /* THAANA LETTER DHAALU */ + [0x78c, 0x78c], /* THAANA LETTER THAA */ + [0x78d, 0x78d], /* THAANA LETTER LAAMU */ + [0x78e, 0x78e], /* THAANA LETTER GAAFU */ + [0x78f, 0x78f], /* THAANA LETTER GNAVIYANI */ + [0x790, 0x790], /* THAANA LETTER SEENU */ + [0x791, 0x791], /* THAANA LETTER DAVIYANI */ + [0x792, 0x792], /* THAANA LETTER ZAVIYANI */ + [0x793, 0x793], /* THAANA LETTER TAVIYANI */ + [0x794, 0x794], /* THAANA LETTER YAA */ + [0x795, 0x795], /* THAANA LETTER PAVIYANI */ + [0x796, 0x796], /* THAANA LETTER JAVIYANI */ + [0x797, 0x797], /* THAANA LETTER CHAVIYANI */ + [0x798, 0x798], /* THAANA LETTER TTAA */ + [0x799, 0x799], /* THAANA LETTER HHAA */ + [0x79a, 0x79a], /* THAANA LETTER KHAA */ + [0x79b, 0x79b], /* THAANA LETTER THAALU */ + [0x79c, 0x79c], /* THAANA LETTER ZAA */ + [0x79d, 0x79d], /* THAANA LETTER SHEENU */ + [0x79e, 0x79e], /* THAANA LETTER SAADHU */ + [0x79f, 0x79f], /* THAANA LETTER DAADHU */ + [0x7a0, 0x7a0], /* THAANA LETTER TO */ + [0x7a1, 0x7a1], /* THAANA LETTER ZO */ + [0x7a2, 0x7a2], /* THAANA LETTER AINU */ + [0x7a3, 0x7a3], /* THAANA LETTER GHAINU */ + [0x7a4, 0x7a4], /* THAANA LETTER QAAFU */ + [0x7a5, 0x7a5], /* THAANA LETTER WAAVU */ + [0x7a6, 0x7a6], /* THAANA ABAFILI */ + [0x7a7, 0x7a7], /* THAANA AABAAFILI */ + [0x7a8, 0x7a8], /* THAANA IBIFILI */ + [0x7a9, 0x7a9], /* THAANA EEBEEFILI */ + [0x7aa, 0x7aa], /* THAANA UBUFILI */ + [0x7ab, 0x7ab], /* THAANA OOBOOFILI */ + [0x7ac, 0x7ac], /* THAANA EBEFILI */ + [0x7ad, 0x7ad], /* THAANA EYBEYFILI */ + [0x7ae, 0x7ae], /* THAANA OBOFILI */ + [0x7af, 0x7af], /* THAANA OABOAFILI */ + [0x7b0, 0x7b0], /* THAANA SUKUN */ + [0x7b1, 0x7b1], /* THAANA LETTER NAA */ + [0x7b2, 0x7b2], + [0x7b3, 0x7b3], + [0x7b4, 0x7b4], + [0x7b5, 0x7b5], + [0x7b6, 0x7b6], + [0x7b7, 0x7b7], + [0x7b8, 0x7b8], + [0x7b9, 0x7b9], + [0x7ba, 0x7ba], + [0x7bb, 0x7bb], + [0x7bc, 0x7bc], + [0x7bd, 0x7bd], + [0x7be, 0x7be], + [0x7bf, 0x7bf], + [0x7c0, 0x7c0], /* NKO DIGIT ZERO */ + [0x7c1, 0x7c1], /* NKO DIGIT ONE */ + [0x7c2, 0x7c2], /* NKO DIGIT TWO */ + [0x7c3, 0x7c3], /* NKO DIGIT THREE */ + [0x7c4, 0x7c4], /* NKO DIGIT FOUR */ + [0x7c5, 0x7c5], /* NKO DIGIT FIVE */ + [0x7c6, 0x7c6], /* NKO DIGIT SIX */ + [0x7c7, 0x7c7], /* NKO DIGIT SEVEN */ + [0x7c8, 0x7c8], /* NKO DIGIT EIGHT */ + [0x7c9, 0x7c9], /* NKO DIGIT NINE */ + [0x7ca, 0x7ca], /* NKO LETTER A */ + [0x7cb, 0x7cb], /* NKO LETTER EE */ + [0x7cc, 0x7cc], /* NKO LETTER I */ + [0x7cd, 0x7cd], /* NKO LETTER E */ + [0x7ce, 0x7ce], /* NKO LETTER U */ + [0x7cf, 0x7cf], /* NKO LETTER OO */ + [0x7d0, 0x7d0], /* NKO LETTER O */ + [0x7d1, 0x7d1], /* NKO LETTER DAGBASINNA */ + [0x7d2, 0x7d2], /* NKO LETTER N */ + [0x7d3, 0x7d3], /* NKO LETTER BA */ + [0x7d4, 0x7d4], /* NKO LETTER PA */ + [0x7d5, 0x7d5], /* NKO LETTER TA */ + [0x7d6, 0x7d6], /* NKO LETTER JA */ + [0x7d7, 0x7d7], /* NKO LETTER CHA */ + [0x7d8, 0x7d8], /* NKO LETTER DA */ + [0x7d9, 0x7d9], /* NKO LETTER RA */ + [0x7da, 0x7da], /* NKO LETTER RRA */ + [0x7db, 0x7db], /* NKO LETTER SA */ + [0x7dc, 0x7dc], /* NKO LETTER GBA */ + [0x7dd, 0x7dd], /* NKO LETTER FA */ + [0x7de, 0x7de], /* NKO LETTER KA */ + [0x7df, 0x7df], /* NKO LETTER LA */ + [0x7e0, 0x7e0], /* NKO LETTER NA WOLOSO */ + [0x7e1, 0x7e1], /* NKO LETTER MA */ + [0x7e2, 0x7e2], /* NKO LETTER NYA */ + [0x7e3, 0x7e3], /* NKO LETTER NA */ + [0x7e4, 0x7e4], /* NKO LETTER HA */ + [0x7e5, 0x7e5], /* NKO LETTER WA */ + [0x7e6, 0x7e6], /* NKO LETTER YA */ + [0x7e7, 0x7e7], /* NKO LETTER NYA WOLOSO */ + [0x7e8, 0x7e8], /* NKO LETTER JONA JA */ + [0x7e9, 0x7e9], /* NKO LETTER JONA CHA */ + [0x7ea, 0x7ea], /* NKO LETTER JONA RA */ + [0x7eb, 0x7eb], /* NKO COMBINING SHORT HIGH TONE */ + [0x7ec, 0x7ec], /* NKO COMBINING SHORT LOW TONE */ + [0x7ed, 0x7ed], /* NKO COMBINING SHORT RISING TONE */ + [0x7ee, 0x7ee], /* NKO COMBINING LONG DESCENDING TONE */ + [0x7ef, 0x7ef], /* NKO COMBINING LONG HIGH TONE */ + [0x7f0, 0x7f0], /* NKO COMBINING LONG LOW TONE */ + [0x7f1, 0x7f1], /* NKO COMBINING LONG RISING TONE */ + [0x7f2, 0x7f2], /* NKO COMBINING NASALIZATION MARK */ + [0x7f3, 0x7f3], /* NKO COMBINING DOUBLE DOT ABOVE */ + [0x7f4, 0x7f4], /* NKO HIGH TONE APOSTROPHE */ + [0x7f5, 0x7f5], /* NKO LOW TONE APOSTROPHE */ + [0x7f6, 0x7f6], /* NKO SYMBOL OO DENNEN */ + [0x7f7, 0x7f7], /* NKO SYMBOL GBAKURUNEN */ + [0x7f8, 0x7f8], /* NKO COMMA */ + [0x7f9, 0x7f9], /* NKO EXCLAMATION MARK */ + [0x7fa, 0x7fa], /* NKO LAJANYALAN */ + [0x7fb, 0x7fb], + [0x7fc, 0x7fc], + [0x7fd, 0x7fd], + [0x7fe, 0x7fe], + [0x7ff, 0x7ff], + [0x800, 0x800], /* SAMARITAN LETTER ALAF */ + [0x801, 0x801], /* SAMARITAN LETTER BIT */ + [0x802, 0x802], /* SAMARITAN LETTER GAMAN */ + [0x803, 0x803], /* SAMARITAN LETTER DALAT */ + [0x804, 0x804], /* SAMARITAN LETTER IY */ + [0x805, 0x805], /* SAMARITAN LETTER BAA */ + [0x806, 0x806], /* SAMARITAN LETTER ZEN */ + [0x807, 0x807], /* SAMARITAN LETTER IT */ + [0x808, 0x808], /* SAMARITAN LETTER TIT */ + [0x809, 0x809], /* SAMARITAN LETTER YUT */ + [0x80a, 0x80a], /* SAMARITAN LETTER KAAF */ + [0x80b, 0x80b], /* SAMARITAN LETTER LABAT */ + [0x80c, 0x80c], /* SAMARITAN LETTER MIM */ + [0x80d, 0x80d], /* SAMARITAN LETTER NUN */ + [0x80e, 0x80e], /* SAMARITAN LETTER SINGAAT */ + [0x80f, 0x80f], /* SAMARITAN LETTER IN */ + [0x810, 0x810], /* SAMARITAN LETTER FI */ + [0x811, 0x811], /* SAMARITAN LETTER TSAADIY */ + [0x812, 0x812], /* SAMARITAN LETTER QUF */ + [0x813, 0x813], /* SAMARITAN LETTER RISH */ + [0x814, 0x814], /* SAMARITAN LETTER SHAN */ + [0x815, 0x815], /* SAMARITAN LETTER TAAF */ + [0x816, 0x816], /* SAMARITAN MARK IN */ + [0x817, 0x817], /* SAMARITAN MARK IN-ALAF */ + [0x818, 0x818], /* SAMARITAN MARK OCCLUSION */ + [0x819, 0x819], /* SAMARITAN MARK DAGESH */ + [0x81a, 0x81a], /* SAMARITAN MODIFIER LETTER EPENTHETIC YUT */ + [0x81b, 0x81b], /* SAMARITAN MARK EPENTHETIC YUT */ + [0x81c, 0x81c], /* SAMARITAN VOWEL SIGN LONG E */ + [0x81d, 0x81d], /* SAMARITAN VOWEL SIGN E */ + [0x81e, 0x81e], /* SAMARITAN VOWEL SIGN OVERLONG AA */ + [0x81f, 0x81f], /* SAMARITAN VOWEL SIGN LONG AA */ + [0x820, 0x820], /* SAMARITAN VOWEL SIGN AA */ + [0x821, 0x821], /* SAMARITAN VOWEL SIGN OVERLONG A */ + [0x822, 0x822], /* SAMARITAN VOWEL SIGN LONG A */ + [0x823, 0x823], /* SAMARITAN VOWEL SIGN A */ + [0x824, 0x824], /* SAMARITAN MODIFIER LETTER SHORT A */ + [0x825, 0x825], /* SAMARITAN VOWEL SIGN SHORT A */ + [0x826, 0x826], /* SAMARITAN VOWEL SIGN LONG U */ + [0x827, 0x827], /* SAMARITAN VOWEL SIGN U */ + [0x828, 0x828], /* SAMARITAN MODIFIER LETTER I */ + [0x829, 0x829], /* SAMARITAN VOWEL SIGN LONG I */ + [0x82a, 0x82a], /* SAMARITAN VOWEL SIGN I */ + [0x82b, 0x82b], /* SAMARITAN VOWEL SIGN O */ + [0x82c, 0x82c], /* SAMARITAN VOWEL SIGN SUKUN */ + [0x82d, 0x82d], /* SAMARITAN MARK NEQUDAA */ + [0x82e, 0x82e], + [0x82f, 0x82f], + [0x830, 0x830], /* SAMARITAN PUNCTUATION NEQUDAA */ + [0x831, 0x831], /* SAMARITAN PUNCTUATION AFSAAQ */ + [0x832, 0x832], /* SAMARITAN PUNCTUATION ANGED */ + [0x833, 0x833], /* SAMARITAN PUNCTUATION BAU */ + [0x834, 0x834], /* SAMARITAN PUNCTUATION ATMAAU */ + [0x835, 0x835], /* SAMARITAN PUNCTUATION SHIYYAALAA */ + [0x836, 0x836], /* SAMARITAN ABBREVIATION MARK */ + [0x837, 0x837], /* SAMARITAN PUNCTUATION MELODIC QITSA */ + [0x838, 0x838], /* SAMARITAN PUNCTUATION ZIQAA */ + [0x839, 0x839], /* SAMARITAN PUNCTUATION QITSA */ + [0x83a, 0x83a], /* SAMARITAN PUNCTUATION ZAEF */ + [0x83b, 0x83b], /* SAMARITAN PUNCTUATION TURU */ + [0x83c, 0x83c], /* SAMARITAN PUNCTUATION ARKAANU */ + [0x83d, 0x83d], /* SAMARITAN PUNCTUATION SOF MASHFAAT */ + [0x83e, 0x83e], /* SAMARITAN PUNCTUATION ANNAAU */ + [0x83f, 0x83f], + [0x840, 0x840], /* MANDAIC LETTER HALQA */ + [0x841, 0x841], /* MANDAIC LETTER AB */ + [0x842, 0x842], /* MANDAIC LETTER AG */ + [0x843, 0x843], /* MANDAIC LETTER AD */ + [0x844, 0x844], /* MANDAIC LETTER AH */ + [0x845, 0x845], /* MANDAIC LETTER USHENNA */ + [0x846, 0x846], /* MANDAIC LETTER AZ */ + [0x847, 0x847], /* MANDAIC LETTER IT */ + [0x848, 0x848], /* MANDAIC LETTER ATT */ + [0x849, 0x849], /* MANDAIC LETTER AKSA */ + [0x84a, 0x84a], /* MANDAIC LETTER AK */ + [0x84b, 0x84b], /* MANDAIC LETTER AL */ + [0x84c, 0x84c], /* MANDAIC LETTER AM */ + [0x84d, 0x84d], /* MANDAIC LETTER AN */ + [0x84e, 0x84e], /* MANDAIC LETTER AS */ + [0x84f, 0x84f], /* MANDAIC LETTER IN */ + [0x850, 0x850], /* MANDAIC LETTER AP */ + [0x851, 0x851], /* MANDAIC LETTER ASZ */ + [0x852, 0x852], /* MANDAIC LETTER AQ */ + [0x853, 0x853], /* MANDAIC LETTER AR */ + [0x854, 0x854], /* MANDAIC LETTER ASH */ + [0x855, 0x855], /* MANDAIC LETTER AT */ + [0x856, 0x856], /* MANDAIC LETTER DUSHENNA */ + [0x857, 0x857], /* MANDAIC LETTER KAD */ + [0x858, 0x858], /* MANDAIC LETTER AIN */ + [0x859, 0x859], /* MANDAIC AFFRICATION MARK */ + [0x85a, 0x85a], /* MANDAIC VOCALIZATION MARK */ + [0x85b, 0x85b], /* MANDAIC GEMINATION MARK */ + [0x85c, 0x85c], + [0x85d, 0x85d], + [0x85e, 0x85e], /* MANDAIC PUNCTUATION */ + [0x85f, 0x85f], + [0x860, 0x860], + [0x861, 0x861], + [0x862, 0x862], + [0x863, 0x863], + [0x864, 0x864], + [0x865, 0x865], + [0x866, 0x866], + [0x867, 0x867], + [0x868, 0x868], + [0x869, 0x869], + [0x86a, 0x86a], + [0x86b, 0x86b], + [0x86c, 0x86c], + [0x86d, 0x86d], + [0x86e, 0x86e], + [0x86f, 0x86f], + [0x870, 0x870], + [0x871, 0x871], + [0x872, 0x872], + [0x873, 0x873], + [0x874, 0x874], + [0x875, 0x875], + [0x876, 0x876], + [0x877, 0x877], + [0x878, 0x878], + [0x879, 0x879], + [0x87a, 0x87a], + [0x87b, 0x87b], + [0x87c, 0x87c], + [0x87d, 0x87d], + [0x87e, 0x87e], + [0x87f, 0x87f], + [0x880, 0x880], + [0x881, 0x881], + [0x882, 0x882], + [0x883, 0x883], + [0x884, 0x884], + [0x885, 0x885], + [0x886, 0x886], + [0x887, 0x887], + [0x888, 0x888], + [0x889, 0x889], + [0x88a, 0x88a], + [0x88b, 0x88b], + [0x88c, 0x88c], + [0x88d, 0x88d], + [0x88e, 0x88e], + [0x88f, 0x88f], + [0x890, 0x890], + [0x891, 0x891], + [0x892, 0x892], + [0x893, 0x893], + [0x894, 0x894], + [0x895, 0x895], + [0x896, 0x896], + [0x897, 0x897], + [0x898, 0x898], + [0x899, 0x899], + [0x89a, 0x89a], + [0x89b, 0x89b], + [0x89c, 0x89c], + [0x89d, 0x89d], + [0x89e, 0x89e], + [0x89f, 0x89f], + [0x8a0, 0x8a0], /* ARABIC LETTER BEH WITH SMALL V BELOW */ + [0x8a1, 0x8a1], + [0x8a2, 0x8a2], /* ARABIC LETTER JEEM WITH TWO DOTS ABOVE */ + [0x8a3, 0x8a3], /* ARABIC LETTER TAH WITH TWO DOTS ABOVE */ + [0x8a4, 0x8a4], /* ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE */ + [0x8a5, 0x8a5], /* ARABIC LETTER QAF WITH DOT BELOW */ + [0x8a6, 0x8a6], /* ARABIC LETTER LAM WITH DOUBLE BAR */ + [0x8a7, 0x8a7], /* ARABIC LETTER MEEM WITH THREE DOTS ABOVE */ + [0x8a8, 0x8a8], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE */ + [0x8a9, 0x8a9], /* ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE */ + [0x8aa, 0x8aa], /* ARABIC LETTER REH WITH LOOP */ + [0x8ab, 0x8ab], /* ARABIC LETTER WAW WITH DOT WITHIN */ + [0x8ac, 0x8ac], /* ARABIC LETTER ROHINGYA YEH */ + [0x8ad, 0x8ad], + [0x8ae, 0x8ae], + [0x8af, 0x8af], + [0x8b0, 0x8b0], + [0x8b1, 0x8b1], + [0x8b2, 0x8b2], + [0x8b3, 0x8b3], + [0x8b4, 0x8b4], + [0x8b5, 0x8b5], + [0x8b6, 0x8b6], + [0x8b7, 0x8b7], + [0x8b8, 0x8b8], + [0x8b9, 0x8b9], + [0x8ba, 0x8ba], + [0x8bb, 0x8bb], + [0x8bc, 0x8bc], + [0x8bd, 0x8bd], + [0x8be, 0x8be], + [0x8bf, 0x8bf], + [0x8c0, 0x8c0], + [0x8c1, 0x8c1], + [0x8c2, 0x8c2], + [0x8c3, 0x8c3], + [0x8c4, 0x8c4], + [0x8c5, 0x8c5], + [0x8c6, 0x8c6], + [0x8c7, 0x8c7], + [0x8c8, 0x8c8], + [0x8c9, 0x8c9], + [0x8ca, 0x8ca], + [0x8cb, 0x8cb], + [0x8cc, 0x8cc], + [0x8cd, 0x8cd], + [0x8ce, 0x8ce], + [0x8cf, 0x8cf], + [0x8d0, 0x8d0], + [0x8d1, 0x8d1], + [0x8d2, 0x8d2], + [0x8d3, 0x8d3], + [0x8d4, 0x8d4], + [0x8d5, 0x8d5], + [0x8d6, 0x8d6], + [0x8d7, 0x8d7], + [0x8d8, 0x8d8], + [0x8d9, 0x8d9], + [0x8da, 0x8da], + [0x8db, 0x8db], + [0x8dc, 0x8dc], + [0x8dd, 0x8dd], + [0x8de, 0x8de], + [0x8df, 0x8df], + [0x8e0, 0x8e0], + [0x8e1, 0x8e1], + [0x8e2, 0x8e2], + [0x8e3, 0x8e3], + [0x8e4, 0x8e4], /* ARABIC CURLY FATHA */ + [0x8e5, 0x8e5], /* ARABIC CURLY DAMMA */ + [0x8e6, 0x8e6], /* ARABIC CURLY KASRA */ + [0x8e7, 0x8e7], /* ARABIC CURLY FATHATAN */ + [0x8e8, 0x8e8], /* ARABIC CURLY DAMMATAN */ + [0x8e9, 0x8e9], /* ARABIC CURLY KASRATAN */ + [0x8ea, 0x8ea], /* ARABIC TONE ONE DOT ABOVE */ + [0x8eb, 0x8eb], /* ARABIC TONE TWO DOTS ABOVE */ + [0x8ec, 0x8ec], /* ARABIC TONE LOOP ABOVE */ + [0x8ed, 0x8ed], /* ARABIC TONE ONE DOT BELOW */ + [0x8ee, 0x8ee], /* ARABIC TONE TWO DOTS BELOW */ + [0x8ef, 0x8ef], /* ARABIC TONE LOOP BELOW */ + [0x8f0, 0x8f0], /* ARABIC OPEN FATHATAN */ + [0x8f1, 0x8f1], /* ARABIC OPEN DAMMATAN */ + [0x8f2, 0x8f2], /* ARABIC OPEN KASRATAN */ + [0x8f3, 0x8f3], /* ARABIC SMALL HIGH WAW */ + [0x8f4, 0x8f4], /* ARABIC FATHA WITH RING */ + [0x8f5, 0x8f5], /* ARABIC FATHA WITH DOT ABOVE */ + [0x8f6, 0x8f6], /* ARABIC KASRA WITH DOT BELOW */ + [0x8f7, 0x8f7], /* ARABIC LEFT ARROWHEAD ABOVE */ + [0x8f8, 0x8f8], /* ARABIC RIGHT ARROWHEAD ABOVE */ + [0x8f9, 0x8f9], /* ARABIC LEFT ARROWHEAD BELOW */ + [0x8fa, 0x8fa], /* ARABIC RIGHT ARROWHEAD BELOW */ + [0x8fb, 0x8fb], /* ARABIC DOUBLE RIGHT ARROWHEAD ABOVE */ + [0x8fc, 0x8fc], /* ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT */ + [0x8fd, 0x8fd], /* ARABIC RIGHT ARROWHEAD ABOVE WITH DOT */ + [0x8fe, 0x8fe], /* ARABIC DAMMA WITH DOT */ + [0x8ff, 0x8ff], + [0x900, 0x900], /* DEVANAGARI SIGN INVERTED CANDRABINDU */ + [0x901, 0x901], /* DEVANAGARI SIGN CANDRABINDU */ + [0x902, 0x902], /* DEVANAGARI SIGN ANUSVARA */ + [0x903, 0x903], /* DEVANAGARI SIGN VISARGA */ + [0x904, 0x904], /* DEVANAGARI LETTER SHORT A */ + [0x905, 0x905], /* DEVANAGARI LETTER A */ + [0x906, 0x906], /* DEVANAGARI LETTER AA */ + [0x907, 0x907], /* DEVANAGARI LETTER I */ + [0x908, 0x908], /* DEVANAGARI LETTER II */ + [0x909, 0x909], /* DEVANAGARI LETTER U */ + [0x90a, 0x90a], /* DEVANAGARI LETTER UU */ + [0x90b, 0x90b], /* DEVANAGARI LETTER VOCALIC R */ + [0x90c, 0x90c], /* DEVANAGARI LETTER VOCALIC L */ + [0x90d, 0x90d], /* DEVANAGARI LETTER CANDRA E */ + [0x90e, 0x90e], /* DEVANAGARI LETTER SHORT E */ + [0x90f, 0x90f], /* DEVANAGARI LETTER E */ + [0x910, 0x910], /* DEVANAGARI LETTER AI */ + [0x911, 0x911], /* DEVANAGARI LETTER CANDRA O */ + [0x912, 0x912], /* DEVANAGARI LETTER SHORT O */ + [0x913, 0x913], /* DEVANAGARI LETTER O */ + [0x914, 0x914], /* DEVANAGARI LETTER AU */ + [0x915, 0x915], /* DEVANAGARI LETTER KA */ + [0x916, 0x916], /* DEVANAGARI LETTER KHA */ + [0x917, 0x917], /* DEVANAGARI LETTER GA */ + [0x918, 0x918], /* DEVANAGARI LETTER GHA */ + [0x919, 0x919], /* DEVANAGARI LETTER NGA */ + [0x91a, 0x91a], /* DEVANAGARI LETTER CA */ + [0x91b, 0x91b], /* DEVANAGARI LETTER CHA */ + [0x91c, 0x91c], /* DEVANAGARI LETTER JA */ + [0x91d, 0x91d], /* DEVANAGARI LETTER JHA */ + [0x91e, 0x91e], /* DEVANAGARI LETTER NYA */ + [0x91f, 0x91f], /* DEVANAGARI LETTER TTA */ + [0x920, 0x920], /* DEVANAGARI LETTER TTHA */ + [0x921, 0x921], /* DEVANAGARI LETTER DDA */ + [0x922, 0x922], /* DEVANAGARI LETTER DDHA */ + [0x923, 0x923], /* DEVANAGARI LETTER NNA */ + [0x924, 0x924], /* DEVANAGARI LETTER TA */ + [0x925, 0x925], /* DEVANAGARI LETTER THA */ + [0x926, 0x926], /* DEVANAGARI LETTER DA */ + [0x927, 0x927], /* DEVANAGARI LETTER DHA */ + [0x928, 0x928], /* DEVANAGARI LETTER NA */ + [0x929, 0x929], /* DEVANAGARI LETTER NNNA */ + [0x92a, 0x92a], /* DEVANAGARI LETTER PA */ + [0x92b, 0x92b], /* DEVANAGARI LETTER PHA */ + [0x92c, 0x92c], /* DEVANAGARI LETTER BA */ + [0x92d, 0x92d], /* DEVANAGARI LETTER BHA */ + [0x92e, 0x92e], /* DEVANAGARI LETTER MA */ + [0x92f, 0x92f], /* DEVANAGARI LETTER YA */ + [0x930, 0x930], /* DEVANAGARI LETTER RA */ + [0x931, 0x931], /* DEVANAGARI LETTER RRA */ + [0x932, 0x932], /* DEVANAGARI LETTER LA */ + [0x933, 0x933], /* DEVANAGARI LETTER LLA */ + [0x934, 0x934], /* DEVANAGARI LETTER LLLA */ + [0x935, 0x935], /* DEVANAGARI LETTER VA */ + [0x936, 0x936], /* DEVANAGARI LETTER SHA */ + [0x937, 0x937], /* DEVANAGARI LETTER SSA */ + [0x938, 0x938], /* DEVANAGARI LETTER SA */ + [0x939, 0x939], /* DEVANAGARI LETTER HA */ + [0x93a, 0x93a], /* DEVANAGARI VOWEL SIGN OE */ + [0x93b, 0x93b], /* DEVANAGARI VOWEL SIGN OOE */ + [0x93c, 0x93c], /* DEVANAGARI SIGN NUKTA */ + [0x93d, 0x93d], /* DEVANAGARI SIGN AVAGRAHA */ + [0x93e, 0x93e], /* DEVANAGARI VOWEL SIGN AA */ + [0x93f, 0x93f], /* DEVANAGARI VOWEL SIGN I */ + [0x940, 0x940], /* DEVANAGARI VOWEL SIGN II */ + [0x941, 0x941], /* DEVANAGARI VOWEL SIGN U */ + [0x942, 0x942], /* DEVANAGARI VOWEL SIGN UU */ + [0x943, 0x943], /* DEVANAGARI VOWEL SIGN VOCALIC R */ + [0x944, 0x944], /* DEVANAGARI VOWEL SIGN VOCALIC RR */ + [0x945, 0x945], /* DEVANAGARI VOWEL SIGN CANDRA E */ + [0x946, 0x946], /* DEVANAGARI VOWEL SIGN SHORT E */ + [0x947, 0x947], /* DEVANAGARI VOWEL SIGN E */ + [0x948, 0x948], /* DEVANAGARI VOWEL SIGN AI */ + [0x949, 0x949], /* DEVANAGARI VOWEL SIGN CANDRA O */ + [0x94a, 0x94a], /* DEVANAGARI VOWEL SIGN SHORT O */ + [0x94b, 0x94b], /* DEVANAGARI VOWEL SIGN O */ + [0x94c, 0x94c], /* DEVANAGARI VOWEL SIGN AU */ + [0x94d, 0x94d], /* DEVANAGARI SIGN VIRAMA */ + [0x94e, 0x94e], /* DEVANAGARI VOWEL SIGN PRISHTHAMATRA E */ + [0x94f, 0x94f], /* DEVANAGARI VOWEL SIGN AW */ + [0x950, 0x950], /* DEVANAGARI OM */ + [0x951, 0x951], /* DEVANAGARI STRESS SIGN UDATTA */ + [0x952, 0x952], /* DEVANAGARI STRESS SIGN ANUDATTA */ + [0x953, 0x953], /* DEVANAGARI GRAVE ACCENT */ + [0x954, 0x954], /* DEVANAGARI ACUTE ACCENT */ + [0x955, 0x955], /* DEVANAGARI VOWEL SIGN CANDRA LONG E */ + [0x956, 0x956], /* DEVANAGARI VOWEL SIGN UE */ + [0x957, 0x957], /* DEVANAGARI VOWEL SIGN UUE */ + [0x958, 0x958], /* DEVANAGARI LETTER QA */ + [0x959, 0x959], /* DEVANAGARI LETTER KHHA */ + [0x95a, 0x95a], /* DEVANAGARI LETTER GHHA */ + [0x95b, 0x95b], /* DEVANAGARI LETTER ZA */ + [0x95c, 0x95c], /* DEVANAGARI LETTER DDDHA */ + [0x95d, 0x95d], /* DEVANAGARI LETTER RHA */ + [0x95e, 0x95e], /* DEVANAGARI LETTER FA */ + [0x95f, 0x95f], /* DEVANAGARI LETTER YYA */ + [0x960, 0x960], /* DEVANAGARI LETTER VOCALIC RR */ + [0x961, 0x961], /* DEVANAGARI LETTER VOCALIC LL */ + [0x962, 0x962], /* DEVANAGARI VOWEL SIGN VOCALIC L */ + [0x963, 0x963], /* DEVANAGARI VOWEL SIGN VOCALIC LL */ + [0x964, 0x964], /* DEVANAGARI DANDA */ + [0x965, 0x965], /* DEVANAGARI DOUBLE DANDA */ + [0x966, 0x966], /* DEVANAGARI DIGIT ZERO */ + [0x967, 0x967], /* DEVANAGARI DIGIT ONE */ + [0x968, 0x968], /* DEVANAGARI DIGIT TWO */ + [0x969, 0x969], /* DEVANAGARI DIGIT THREE */ + [0x96a, 0x96a], /* DEVANAGARI DIGIT FOUR */ + [0x96b, 0x96b], /* DEVANAGARI DIGIT FIVE */ + [0x96c, 0x96c], /* DEVANAGARI DIGIT SIX */ + [0x96d, 0x96d], /* DEVANAGARI DIGIT SEVEN */ + [0x96e, 0x96e], /* DEVANAGARI DIGIT EIGHT */ + [0x96f, 0x96f], /* DEVANAGARI DIGIT NINE */ + [0x970, 0x970], /* DEVANAGARI ABBREVIATION SIGN */ + [0x971, 0x971], /* DEVANAGARI SIGN HIGH SPACING DOT */ + [0x972, 0x972], /* DEVANAGARI LETTER CANDRA A */ + [0x973, 0x973], /* DEVANAGARI LETTER OE */ + [0x974, 0x974], /* DEVANAGARI LETTER OOE */ + [0x975, 0x975], /* DEVANAGARI LETTER AW */ + [0x976, 0x976], /* DEVANAGARI LETTER UE */ + [0x977, 0x977], /* DEVANAGARI LETTER UUE */ + [0x978, 0x978], + [0x979, 0x979], /* DEVANAGARI LETTER ZHA */ + [0x97a, 0x97a], /* DEVANAGARI LETTER HEAVY YA */ + [0x97b, 0x97b], /* DEVANAGARI LETTER GGA */ + [0x97c, 0x97c], /* DEVANAGARI LETTER JJA */ + [0x97d, 0x97d], /* DEVANAGARI LETTER GLOTTAL STOP */ + [0x97e, 0x97e], /* DEVANAGARI LETTER DDDA */ + [0x97f, 0x97f], /* DEVANAGARI LETTER BBA */ + [0x980, 0x980], + [0x981, 0x981], /* BENGALI SIGN CANDRABINDU */ + [0x982, 0x982], /* BENGALI SIGN ANUSVARA */ + [0x983, 0x983], /* BENGALI SIGN VISARGA */ + [0x984, 0x984], + [0x985, 0x985], /* BENGALI LETTER A */ + [0x986, 0x986], /* BENGALI LETTER AA */ + [0x987, 0x987], /* BENGALI LETTER I */ + [0x988, 0x988], /* BENGALI LETTER II */ + [0x989, 0x989], /* BENGALI LETTER U */ + [0x98a, 0x98a], /* BENGALI LETTER UU */ + [0x98b, 0x98b], /* BENGALI LETTER VOCALIC R */ + [0x98c, 0x98c], /* BENGALI LETTER VOCALIC L */ + [0x98d, 0x98d], + [0x98e, 0x98e], + [0x98f, 0x98f], /* BENGALI LETTER E */ + [0x990, 0x990], /* BENGALI LETTER AI */ + [0x991, 0x991], + [0x992, 0x992], + [0x993, 0x993], /* BENGALI LETTER O */ + [0x994, 0x994], /* BENGALI LETTER AU */ + [0x995, 0x995], /* BENGALI LETTER KA */ + [0x996, 0x996], /* BENGALI LETTER KHA */ + [0x997, 0x997], /* BENGALI LETTER GA */ + [0x998, 0x998], /* BENGALI LETTER GHA */ + [0x999, 0x999], /* BENGALI LETTER NGA */ + [0x99a, 0x99a], /* BENGALI LETTER CA */ + [0x99b, 0x99b], /* BENGALI LETTER CHA */ + [0x99c, 0x99c], /* BENGALI LETTER JA */ + [0x99d, 0x99d], /* BENGALI LETTER JHA */ + [0x99e, 0x99e], /* BENGALI LETTER NYA */ + [0x99f, 0x99f], /* BENGALI LETTER TTA */ + [0x9a0, 0x9a0], /* BENGALI LETTER TTHA */ + [0x9a1, 0x9a1], /* BENGALI LETTER DDA */ + [0x9a2, 0x9a2], /* BENGALI LETTER DDHA */ + [0x9a3, 0x9a3], /* BENGALI LETTER NNA */ + [0x9a4, 0x9a4], /* BENGALI LETTER TA */ + [0x9a5, 0x9a5], /* BENGALI LETTER THA */ + [0x9a6, 0x9a6], /* BENGALI LETTER DA */ + [0x9a7, 0x9a7], /* BENGALI LETTER DHA */ + [0x9a8, 0x9a8], /* BENGALI LETTER NA */ + [0x9a9, 0x9a9], + [0x9aa, 0x9aa], /* BENGALI LETTER PA */ + [0x9ab, 0x9ab], /* BENGALI LETTER PHA */ + [0x9ac, 0x9ac], /* BENGALI LETTER BA */ + [0x9ad, 0x9ad], /* BENGALI LETTER BHA */ + [0x9ae, 0x9ae], /* BENGALI LETTER MA */ + [0x9af, 0x9af], /* BENGALI LETTER YA */ + [0x9b0, 0x9b0], /* BENGALI LETTER RA */ + [0x9b1, 0x9b1], + [0x9b2, 0x9b2], /* BENGALI LETTER LA */ + [0x9b3, 0x9b3], + [0x9b4, 0x9b4], + [0x9b5, 0x9b5], + [0x9b6, 0x9b6], /* BENGALI LETTER SHA */ + [0x9b7, 0x9b7], /* BENGALI LETTER SSA */ + [0x9b8, 0x9b8], /* BENGALI LETTER SA */ + [0x9b9, 0x9b9], /* BENGALI LETTER HA */ + [0x9ba, 0x9ba], + [0x9bb, 0x9bb], + [0x9bc, 0x9bc], /* BENGALI SIGN NUKTA */ + [0x9bd, 0x9bd], /* BENGALI SIGN AVAGRAHA */ + [0x9be, 0x9be], /* BENGALI VOWEL SIGN AA */ + [0x9bf, 0x9bf], /* BENGALI VOWEL SIGN I */ + [0x9c0, 0x9c0], /* BENGALI VOWEL SIGN II */ + [0x9c1, 0x9c1], /* BENGALI VOWEL SIGN U */ + [0x9c2, 0x9c2], /* BENGALI VOWEL SIGN UU */ + [0x9c3, 0x9c3], /* BENGALI VOWEL SIGN VOCALIC R */ + [0x9c4, 0x9c4], /* BENGALI VOWEL SIGN VOCALIC RR */ + [0x9c5, 0x9c5], + [0x9c6, 0x9c6], + [0x9c7, 0x9c7], /* BENGALI VOWEL SIGN E */ + [0x9c8, 0x9c8], /* BENGALI VOWEL SIGN AI */ + [0x9c9, 0x9c9], + [0x9ca, 0x9ca], + [0x9cb, 0x9cb], /* BENGALI VOWEL SIGN O */ + [0x9cc, 0x9cc], /* BENGALI VOWEL SIGN AU */ + [0x9cd, 0x9cd], /* BENGALI SIGN VIRAMA */ + [0x9ce, 0x9ce], /* BENGALI LETTER KHANDA TA */ + [0x9cf, 0x9cf], + [0x9d0, 0x9d0], + [0x9d1, 0x9d1], + [0x9d2, 0x9d2], + [0x9d3, 0x9d3], + [0x9d4, 0x9d4], + [0x9d5, 0x9d5], + [0x9d6, 0x9d6], + [0x9d7, 0x9d7], /* BENGALI AU LENGTH MARK */ + [0x9d8, 0x9d8], + [0x9d9, 0x9d9], + [0x9da, 0x9da], + [0x9db, 0x9db], + [0x9dc, 0x9dc], /* BENGALI LETTER RRA */ + [0x9dd, 0x9dd], /* BENGALI LETTER RHA */ + [0x9de, 0x9de], + [0x9df, 0x9df], /* BENGALI LETTER YYA */ + [0x9e0, 0x9e0], /* BENGALI LETTER VOCALIC RR */ + [0x9e1, 0x9e1], /* BENGALI LETTER VOCALIC LL */ + [0x9e2, 0x9e2], /* BENGALI VOWEL SIGN VOCALIC L */ + [0x9e3, 0x9e3], /* BENGALI VOWEL SIGN VOCALIC LL */ + [0x9e4, 0x9e4], + [0x9e5, 0x9e5], + [0x9e6, 0x9e6], /* BENGALI DIGIT ZERO */ + [0x9e7, 0x9e7], /* BENGALI DIGIT ONE */ + [0x9e8, 0x9e8], /* BENGALI DIGIT TWO */ + [0x9e9, 0x9e9], /* BENGALI DIGIT THREE */ + [0x9ea, 0x9ea], /* BENGALI DIGIT FOUR */ + [0x9eb, 0x9eb], /* BENGALI DIGIT FIVE */ + [0x9ec, 0x9ec], /* BENGALI DIGIT SIX */ + [0x9ed, 0x9ed], /* BENGALI DIGIT SEVEN */ + [0x9ee, 0x9ee], /* BENGALI DIGIT EIGHT */ + [0x9ef, 0x9ef], /* BENGALI DIGIT NINE */ + [0x9f0, 0x9f0], /* BENGALI LETTER RA WITH MIDDLE DIAGONAL */ + [0x9f1, 0x9f1], /* BENGALI LETTER RA WITH LOWER DIAGONAL (BENGALI LETTER VA WITH LOWER DIAGONAL) */ + [0x9f2, 0x9f2], /* BENGALI RUPEE MARK */ + [0x9f3, 0x9f3], /* BENGALI RUPEE SIGN */ + [0x9f4, 0x9f4], /* BENGALI CURRENCY NUMERATOR ONE */ + [0x9f5, 0x9f5], /* BENGALI CURRENCY NUMERATOR TWO */ + [0x9f6, 0x9f6], /* BENGALI CURRENCY NUMERATOR THREE */ + [0x9f7, 0x9f7], /* BENGALI CURRENCY NUMERATOR FOUR */ + [0x9f8, 0x9f8], /* BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR */ + [0x9f9, 0x9f9], /* BENGALI CURRENCY DENOMINATOR SIXTEEN */ + [0x9fa, 0x9fa], /* BENGALI ISSHAR */ + [0x9fb, 0x9fb], /* BENGALI GANDA MARK */ + [0x9fc, 0x9fc], + [0x9fd, 0x9fd], + [0x9fe, 0x9fe], + [0x9ff, 0x9ff], + [0xa00, 0xa00], + [0xa01, 0xa01], /* GURMUKHI SIGN ADAK BINDI */ + [0xa02, 0xa02], /* GURMUKHI SIGN BINDI */ + [0xa03, 0xa03], /* GURMUKHI SIGN VISARGA */ + [0xa04, 0xa04], + [0xa05, 0xa05], /* GURMUKHI LETTER A */ + [0xa06, 0xa06], /* GURMUKHI LETTER AA */ + [0xa07, 0xa07], /* GURMUKHI LETTER I */ + [0xa08, 0xa08], /* GURMUKHI LETTER II */ + [0xa09, 0xa09], /* GURMUKHI LETTER U */ + [0xa0a, 0xa0a], /* GURMUKHI LETTER UU */ + [0xa0b, 0xa0b], + [0xa0c, 0xa0c], + [0xa0d, 0xa0d], + [0xa0e, 0xa0e], + [0xa0f, 0xa0f], /* GURMUKHI LETTER EE */ + [0xa10, 0xa10], /* GURMUKHI LETTER AI */ + [0xa11, 0xa11], + [0xa12, 0xa12], + [0xa13, 0xa13], /* GURMUKHI LETTER OO */ + [0xa14, 0xa14], /* GURMUKHI LETTER AU */ + [0xa15, 0xa15], /* GURMUKHI LETTER KA */ + [0xa16, 0xa16], /* GURMUKHI LETTER KHA */ + [0xa17, 0xa17], /* GURMUKHI LETTER GA */ + [0xa18, 0xa18], /* GURMUKHI LETTER GHA */ + [0xa19, 0xa19], /* GURMUKHI LETTER NGA */ + [0xa1a, 0xa1a], /* GURMUKHI LETTER CA */ + [0xa1b, 0xa1b], /* GURMUKHI LETTER CHA */ + [0xa1c, 0xa1c], /* GURMUKHI LETTER JA */ + [0xa1d, 0xa1d], /* GURMUKHI LETTER JHA */ + [0xa1e, 0xa1e], /* GURMUKHI LETTER NYA */ + [0xa1f, 0xa1f], /* GURMUKHI LETTER TTA */ + [0xa20, 0xa20], /* GURMUKHI LETTER TTHA */ + [0xa21, 0xa21], /* GURMUKHI LETTER DDA */ + [0xa22, 0xa22], /* GURMUKHI LETTER DDHA */ + [0xa23, 0xa23], /* GURMUKHI LETTER NNA */ + [0xa24, 0xa24], /* GURMUKHI LETTER TA */ + [0xa25, 0xa25], /* GURMUKHI LETTER THA */ + [0xa26, 0xa26], /* GURMUKHI LETTER DA */ + [0xa27, 0xa27], /* GURMUKHI LETTER DHA */ + [0xa28, 0xa28], /* GURMUKHI LETTER NA */ + [0xa29, 0xa29], + [0xa2a, 0xa2a], /* GURMUKHI LETTER PA */ + [0xa2b, 0xa2b], /* GURMUKHI LETTER PHA */ + [0xa2c, 0xa2c], /* GURMUKHI LETTER BA */ + [0xa2d, 0xa2d], /* GURMUKHI LETTER BHA */ + [0xa2e, 0xa2e], /* GURMUKHI LETTER MA */ + [0xa2f, 0xa2f], /* GURMUKHI LETTER YA */ + [0xa30, 0xa30], /* GURMUKHI LETTER RA */ + [0xa31, 0xa31], + [0xa32, 0xa32], /* GURMUKHI LETTER LA */ + [0xa33, 0xa33], /* GURMUKHI LETTER LLA */ + [0xa34, 0xa34], + [0xa35, 0xa35], /* GURMUKHI LETTER VA */ + [0xa36, 0xa36], /* GURMUKHI LETTER SHA */ + [0xa37, 0xa37], + [0xa38, 0xa38], /* GURMUKHI LETTER SA */ + [0xa39, 0xa39], /* GURMUKHI LETTER HA */ + [0xa3a, 0xa3a], + [0xa3b, 0xa3b], + [0xa3c, 0xa3c], /* GURMUKHI SIGN NUKTA */ + [0xa3d, 0xa3d], + [0xa3e, 0xa3e], /* GURMUKHI VOWEL SIGN AA */ + [0xa3f, 0xa3f], /* GURMUKHI VOWEL SIGN I */ + [0xa40, 0xa40], /* GURMUKHI VOWEL SIGN II */ + [0xa41, 0xa41], /* GURMUKHI VOWEL SIGN U */ + [0xa42, 0xa42], /* GURMUKHI VOWEL SIGN UU */ + [0xa43, 0xa43], + [0xa44, 0xa44], + [0xa45, 0xa45], + [0xa46, 0xa46], + [0xa47, 0xa47], /* GURMUKHI VOWEL SIGN EE */ + [0xa48, 0xa48], /* GURMUKHI VOWEL SIGN AI */ + [0xa49, 0xa49], + [0xa4a, 0xa4a], + [0xa4b, 0xa4b], /* GURMUKHI VOWEL SIGN OO */ + [0xa4c, 0xa4c], /* GURMUKHI VOWEL SIGN AU */ + [0xa4d, 0xa4d], /* GURMUKHI SIGN VIRAMA */ + [0xa4e, 0xa4e], + [0xa4f, 0xa4f], + [0xa50, 0xa50], + [0xa51, 0xa51], /* GURMUKHI SIGN UDAAT */ + [0xa52, 0xa52], + [0xa53, 0xa53], + [0xa54, 0xa54], + [0xa55, 0xa55], + [0xa56, 0xa56], + [0xa57, 0xa57], + [0xa58, 0xa58], + [0xa59, 0xa59], /* GURMUKHI LETTER KHHA */ + [0xa5a, 0xa5a], /* GURMUKHI LETTER GHHA */ + [0xa5b, 0xa5b], /* GURMUKHI LETTER ZA */ + [0xa5c, 0xa5c], /* GURMUKHI LETTER RRA */ + [0xa5d, 0xa5d], + [0xa5e, 0xa5e], /* GURMUKHI LETTER FA */ + [0xa5f, 0xa5f], + [0xa60, 0xa60], + [0xa61, 0xa61], + [0xa62, 0xa62], + [0xa63, 0xa63], + [0xa64, 0xa64], + [0xa65, 0xa65], + [0xa66, 0xa66], /* GURMUKHI DIGIT ZERO */ + [0xa67, 0xa67], /* GURMUKHI DIGIT ONE */ + [0xa68, 0xa68], /* GURMUKHI DIGIT TWO */ + [0xa69, 0xa69], /* GURMUKHI DIGIT THREE */ + [0xa6a, 0xa6a], /* GURMUKHI DIGIT FOUR */ + [0xa6b, 0xa6b], /* GURMUKHI DIGIT FIVE */ + [0xa6c, 0xa6c], /* GURMUKHI DIGIT SIX */ + [0xa6d, 0xa6d], /* GURMUKHI DIGIT SEVEN */ + [0xa6e, 0xa6e], /* GURMUKHI DIGIT EIGHT */ + [0xa6f, 0xa6f], /* GURMUKHI DIGIT NINE */ + [0xa70, 0xa70], /* GURMUKHI TIPPI */ + [0xa71, 0xa71], /* GURMUKHI ADDAK */ + [0xa72, 0xa72], /* GURMUKHI IRI */ + [0xa73, 0xa73], /* GURMUKHI URA */ + [0xa74, 0xa74], /* GURMUKHI EK ONKAR */ + [0xa75, 0xa75], /* GURMUKHI SIGN YAKASH */ + [0xa76, 0xa76], + [0xa77, 0xa77], + [0xa78, 0xa78], + [0xa79, 0xa79], + [0xa7a, 0xa7a], + [0xa7b, 0xa7b], + [0xa7c, 0xa7c], + [0xa7d, 0xa7d], + [0xa7e, 0xa7e], + [0xa7f, 0xa7f], + [0xa80, 0xa80], + [0xa81, 0xa81], /* GUJARATI SIGN CANDRABINDU */ + [0xa82, 0xa82], /* GUJARATI SIGN ANUSVARA */ + [0xa83, 0xa83], /* GUJARATI SIGN VISARGA */ + [0xa84, 0xa84], + [0xa85, 0xa85], /* GUJARATI LETTER A */ + [0xa86, 0xa86], /* GUJARATI LETTER AA */ + [0xa87, 0xa87], /* GUJARATI LETTER I */ + [0xa88, 0xa88], /* GUJARATI LETTER II */ + [0xa89, 0xa89], /* GUJARATI LETTER U */ + [0xa8a, 0xa8a], /* GUJARATI LETTER UU */ + [0xa8b, 0xa8b], /* GUJARATI LETTER VOCALIC R */ + [0xa8c, 0xa8c], /* GUJARATI LETTER VOCALIC L */ + [0xa8d, 0xa8d], /* GUJARATI VOWEL CANDRA E */ + [0xa8e, 0xa8e], + [0xa8f, 0xa8f], /* GUJARATI LETTER E */ + [0xa90, 0xa90], /* GUJARATI LETTER AI */ + [0xa91, 0xa91], /* GUJARATI VOWEL CANDRA O */ + [0xa92, 0xa92], + [0xa93, 0xa93], /* GUJARATI LETTER O */ + [0xa94, 0xa94], /* GUJARATI LETTER AU */ + [0xa95, 0xa95], /* GUJARATI LETTER KA */ + [0xa96, 0xa96], /* GUJARATI LETTER KHA */ + [0xa97, 0xa97], /* GUJARATI LETTER GA */ + [0xa98, 0xa98], /* GUJARATI LETTER GHA */ + [0xa99, 0xa99], /* GUJARATI LETTER NGA */ + [0xa9a, 0xa9a], /* GUJARATI LETTER CA */ + [0xa9b, 0xa9b], /* GUJARATI LETTER CHA */ + [0xa9c, 0xa9c], /* GUJARATI LETTER JA */ + [0xa9d, 0xa9d], /* GUJARATI LETTER JHA */ + [0xa9e, 0xa9e], /* GUJARATI LETTER NYA */ + [0xa9f, 0xa9f], /* GUJARATI LETTER TTA */ + [0xaa0, 0xaa0], /* GUJARATI LETTER TTHA */ + [0xaa1, 0xaa1], /* GUJARATI LETTER DDA */ + [0xaa2, 0xaa2], /* GUJARATI LETTER DDHA */ + [0xaa3, 0xaa3], /* GUJARATI LETTER NNA */ + [0xaa4, 0xaa4], /* GUJARATI LETTER TA */ + [0xaa5, 0xaa5], /* GUJARATI LETTER THA */ + [0xaa6, 0xaa6], /* GUJARATI LETTER DA */ + [0xaa7, 0xaa7], /* GUJARATI LETTER DHA */ + [0xaa8, 0xaa8], /* GUJARATI LETTER NA */ + [0xaa9, 0xaa9], + [0xaaa, 0xaaa], /* GUJARATI LETTER PA */ + [0xaab, 0xaab], /* GUJARATI LETTER PHA */ + [0xaac, 0xaac], /* GUJARATI LETTER BA */ + [0xaad, 0xaad], /* GUJARATI LETTER BHA */ + [0xaae, 0xaae], /* GUJARATI LETTER MA */ + [0xaaf, 0xaaf], /* GUJARATI LETTER YA */ + [0xab0, 0xab0], /* GUJARATI LETTER RA */ + [0xab1, 0xab1], + [0xab2, 0xab2], /* GUJARATI LETTER LA */ + [0xab3, 0xab3], /* GUJARATI LETTER LLA */ + [0xab4, 0xab4], + [0xab5, 0xab5], /* GUJARATI LETTER VA */ + [0xab6, 0xab6], /* GUJARATI LETTER SHA */ + [0xab7, 0xab7], /* GUJARATI LETTER SSA */ + [0xab8, 0xab8], /* GUJARATI LETTER SA */ + [0xab9, 0xab9], /* GUJARATI LETTER HA */ + [0xaba, 0xaba], + [0xabb, 0xabb], + [0xabc, 0xabc], /* GUJARATI SIGN NUKTA */ + [0xabd, 0xabd], /* GUJARATI SIGN AVAGRAHA */ + [0xabe, 0xabe], /* GUJARATI VOWEL SIGN AA */ + [0xabf, 0xabf], /* GUJARATI VOWEL SIGN I */ + [0xac0, 0xac0], /* GUJARATI VOWEL SIGN II */ + [0xac1, 0xac1], /* GUJARATI VOWEL SIGN U */ + [0xac2, 0xac2], /* GUJARATI VOWEL SIGN UU */ + [0xac3, 0xac3], /* GUJARATI VOWEL SIGN VOCALIC R */ + [0xac4, 0xac4], /* GUJARATI VOWEL SIGN VOCALIC RR */ + [0xac5, 0xac5], /* GUJARATI VOWEL SIGN CANDRA E */ + [0xac6, 0xac6], + [0xac7, 0xac7], /* GUJARATI VOWEL SIGN E */ + [0xac8, 0xac8], /* GUJARATI VOWEL SIGN AI */ + [0xac9, 0xac9], /* GUJARATI VOWEL SIGN CANDRA O */ + [0xaca, 0xaca], + [0xacb, 0xacb], /* GUJARATI VOWEL SIGN O */ + [0xacc, 0xacc], /* GUJARATI VOWEL SIGN AU */ + [0xacd, 0xacd], /* GUJARATI SIGN VIRAMA */ + [0xace, 0xace], + [0xacf, 0xacf], + [0xad0, 0xad0], /* GUJARATI OM */ + [0xad1, 0xad1], + [0xad2, 0xad2], + [0xad3, 0xad3], + [0xad4, 0xad4], + [0xad5, 0xad5], + [0xad6, 0xad6], + [0xad7, 0xad7], + [0xad8, 0xad8], + [0xad9, 0xad9], + [0xada, 0xada], + [0xadb, 0xadb], + [0xadc, 0xadc], + [0xadd, 0xadd], + [0xade, 0xade], + [0xadf, 0xadf], + [0xae0, 0xae0], /* GUJARATI LETTER VOCALIC RR */ + [0xae1, 0xae1], /* GUJARATI LETTER VOCALIC LL */ + [0xae2, 0xae2], /* GUJARATI VOWEL SIGN VOCALIC L */ + [0xae3, 0xae3], /* GUJARATI VOWEL SIGN VOCALIC LL */ + [0xae4, 0xae4], + [0xae5, 0xae5], + [0xae6, 0xae6], /* GUJARATI DIGIT ZERO */ + [0xae7, 0xae7], /* GUJARATI DIGIT ONE */ + [0xae8, 0xae8], /* GUJARATI DIGIT TWO */ + [0xae9, 0xae9], /* GUJARATI DIGIT THREE */ + [0xaea, 0xaea], /* GUJARATI DIGIT FOUR */ + [0xaeb, 0xaeb], /* GUJARATI DIGIT FIVE */ + [0xaec, 0xaec], /* GUJARATI DIGIT SIX */ + [0xaed, 0xaed], /* GUJARATI DIGIT SEVEN */ + [0xaee, 0xaee], /* GUJARATI DIGIT EIGHT */ + [0xaef, 0xaef], /* GUJARATI DIGIT NINE */ + [0xaf0, 0xaf0], /* GUJARATI ABBREVIATION SIGN */ + [0xaf1, 0xaf1], /* GUJARATI RUPEE SIGN */ + [0xaf2, 0xaf2], + [0xaf3, 0xaf3], + [0xaf4, 0xaf4], + [0xaf5, 0xaf5], + [0xaf6, 0xaf6], + [0xaf7, 0xaf7], + [0xaf8, 0xaf8], + [0xaf9, 0xaf9], + [0xafa, 0xafa], + [0xafb, 0xafb], + [0xafc, 0xafc], + [0xafd, 0xafd], + [0xafe, 0xafe], + [0xaff, 0xaff], + [0xb00, 0xb00], + [0xb01, 0xb01], /* ORIYA SIGN CANDRABINDU */ + [0xb02, 0xb02], /* ORIYA SIGN ANUSVARA */ + [0xb03, 0xb03], /* ORIYA SIGN VISARGA */ + [0xb04, 0xb04], + [0xb05, 0xb05], /* ORIYA LETTER A */ + [0xb06, 0xb06], /* ORIYA LETTER AA */ + [0xb07, 0xb07], /* ORIYA LETTER I */ + [0xb08, 0xb08], /* ORIYA LETTER II */ + [0xb09, 0xb09], /* ORIYA LETTER U */ + [0xb0a, 0xb0a], /* ORIYA LETTER UU */ + [0xb0b, 0xb0b], /* ORIYA LETTER VOCALIC R */ + [0xb0c, 0xb0c], /* ORIYA LETTER VOCALIC L */ + [0xb0d, 0xb0d], + [0xb0e, 0xb0e], + [0xb0f, 0xb0f], /* ORIYA LETTER E */ + [0xb10, 0xb10], /* ORIYA LETTER AI */ + [0xb11, 0xb11], + [0xb12, 0xb12], + [0xb13, 0xb13], /* ORIYA LETTER O */ + [0xb14, 0xb14], /* ORIYA LETTER AU */ + [0xb15, 0xb15], /* ORIYA LETTER KA */ + [0xb16, 0xb16], /* ORIYA LETTER KHA */ + [0xb17, 0xb17], /* ORIYA LETTER GA */ + [0xb18, 0xb18], /* ORIYA LETTER GHA */ + [0xb19, 0xb19], /* ORIYA LETTER NGA */ + [0xb1a, 0xb1a], /* ORIYA LETTER CA */ + [0xb1b, 0xb1b], /* ORIYA LETTER CHA */ + [0xb1c, 0xb1c], /* ORIYA LETTER JA */ + [0xb1d, 0xb1d], /* ORIYA LETTER JHA */ + [0xb1e, 0xb1e], /* ORIYA LETTER NYA */ + [0xb1f, 0xb1f], /* ORIYA LETTER TTA */ + [0xb20, 0xb20], /* ORIYA LETTER TTHA */ + [0xb21, 0xb21], /* ORIYA LETTER DDA */ + [0xb22, 0xb22], /* ORIYA LETTER DDHA */ + [0xb23, 0xb23], /* ORIYA LETTER NNA */ + [0xb24, 0xb24], /* ORIYA LETTER TA */ + [0xb25, 0xb25], /* ORIYA LETTER THA */ + [0xb26, 0xb26], /* ORIYA LETTER DA */ + [0xb27, 0xb27], /* ORIYA LETTER DHA */ + [0xb28, 0xb28], /* ORIYA LETTER NA */ + [0xb29, 0xb29], + [0xb2a, 0xb2a], /* ORIYA LETTER PA */ + [0xb2b, 0xb2b], /* ORIYA LETTER PHA */ + [0xb2c, 0xb2c], /* ORIYA LETTER BA */ + [0xb2d, 0xb2d], /* ORIYA LETTER BHA */ + [0xb2e, 0xb2e], /* ORIYA LETTER MA */ + [0xb2f, 0xb2f], /* ORIYA LETTER YA */ + [0xb30, 0xb30], /* ORIYA LETTER RA */ + [0xb31, 0xb31], + [0xb32, 0xb32], /* ORIYA LETTER LA */ + [0xb33, 0xb33], /* ORIYA LETTER LLA */ + [0xb34, 0xb34], + [0xb35, 0xb35], /* ORIYA LETTER VA */ + [0xb36, 0xb36], /* ORIYA LETTER SHA */ + [0xb37, 0xb37], /* ORIYA LETTER SSA */ + [0xb38, 0xb38], /* ORIYA LETTER SA */ + [0xb39, 0xb39], /* ORIYA LETTER HA */ + [0xb3a, 0xb3a], + [0xb3b, 0xb3b], + [0xb3c, 0xb3c], /* ORIYA SIGN NUKTA */ + [0xb3d, 0xb3d], /* ORIYA SIGN AVAGRAHA */ + [0xb3e, 0xb3e], /* ORIYA VOWEL SIGN AA */ + [0xb3f, 0xb3f], /* ORIYA VOWEL SIGN I */ + [0xb40, 0xb40], /* ORIYA VOWEL SIGN II */ + [0xb41, 0xb41], /* ORIYA VOWEL SIGN U */ + [0xb42, 0xb42], /* ORIYA VOWEL SIGN UU */ + [0xb43, 0xb43], /* ORIYA VOWEL SIGN VOCALIC R */ + [0xb44, 0xb44], /* ORIYA VOWEL SIGN VOCALIC RR */ + [0xb45, 0xb45], + [0xb46, 0xb46], + [0xb47, 0xb47], /* ORIYA VOWEL SIGN E */ + [0xb48, 0xb48], /* ORIYA VOWEL SIGN AI */ + [0xb49, 0xb49], + [0xb4a, 0xb4a], + [0xb4b, 0xb4b], /* ORIYA VOWEL SIGN O */ + [0xb4c, 0xb4c], /* ORIYA VOWEL SIGN AU */ + [0xb4d, 0xb4d], /* ORIYA SIGN VIRAMA */ + [0xb4e, 0xb4e], + [0xb4f, 0xb4f], + [0xb50, 0xb50], + [0xb51, 0xb51], + [0xb52, 0xb52], + [0xb53, 0xb53], + [0xb54, 0xb54], + [0xb55, 0xb55], + [0xb56, 0xb56], /* ORIYA AI LENGTH MARK */ + [0xb57, 0xb57], /* ORIYA AU LENGTH MARK */ + [0xb58, 0xb58], + [0xb59, 0xb59], + [0xb5a, 0xb5a], + [0xb5b, 0xb5b], + [0xb5c, 0xb5c], /* ORIYA LETTER RRA */ + [0xb5d, 0xb5d], /* ORIYA LETTER RHA */ + [0xb5e, 0xb5e], + [0xb5f, 0xb5f], /* ORIYA LETTER YYA */ + [0xb60, 0xb60], /* ORIYA LETTER VOCALIC RR */ + [0xb61, 0xb61], /* ORIYA LETTER VOCALIC LL */ + [0xb62, 0xb62], /* ORIYA VOWEL SIGN VOCALIC L */ + [0xb63, 0xb63], /* ORIYA VOWEL SIGN VOCALIC LL */ + [0xb64, 0xb64], + [0xb65, 0xb65], + [0xb66, 0xb66], /* ORIYA DIGIT ZERO */ + [0xb67, 0xb67], /* ORIYA DIGIT ONE */ + [0xb68, 0xb68], /* ORIYA DIGIT TWO */ + [0xb69, 0xb69], /* ORIYA DIGIT THREE */ + [0xb6a, 0xb6a], /* ORIYA DIGIT FOUR */ + [0xb6b, 0xb6b], /* ORIYA DIGIT FIVE */ + [0xb6c, 0xb6c], /* ORIYA DIGIT SIX */ + [0xb6d, 0xb6d], /* ORIYA DIGIT SEVEN */ + [0xb6e, 0xb6e], /* ORIYA DIGIT EIGHT */ + [0xb6f, 0xb6f], /* ORIYA DIGIT NINE */ + [0xb70, 0xb70], /* ORIYA ISSHAR */ + [0xb71, 0xb71], /* ORIYA LETTER WA */ + [0xb72, 0xb72], /* ORIYA FRACTION ONE QUARTER */ + [0xb73, 0xb73], /* ORIYA FRACTION ONE HALF */ + [0xb74, 0xb74], /* ORIYA FRACTION THREE QUARTERS */ + [0xb75, 0xb75], /* ORIYA FRACTION ONE SIXTEENTH */ + [0xb76, 0xb76], /* ORIYA FRACTION ONE EIGHTH */ + [0xb77, 0xb77], /* ORIYA FRACTION THREE SIXTEENTHS */ + [0xb78, 0xb78], + [0xb79, 0xb79], + [0xb7a, 0xb7a], + [0xb7b, 0xb7b], + [0xb7c, 0xb7c], + [0xb7d, 0xb7d], + [0xb7e, 0xb7e], + [0xb7f, 0xb7f], + [0xb80, 0xb80], + [0xb81, 0xb81], + [0xb82, 0xb82], /* TAMIL SIGN ANUSVARA */ + [0xb83, 0xb83], /* TAMIL SIGN VISARGA */ + [0xb84, 0xb84], + [0xb85, 0xb85], /* TAMIL LETTER A */ + [0xb86, 0xb86], /* TAMIL LETTER AA */ + [0xb87, 0xb87], /* TAMIL LETTER I */ + [0xb88, 0xb88], /* TAMIL LETTER II */ + [0xb89, 0xb89], /* TAMIL LETTER U */ + [0xb8a, 0xb8a], /* TAMIL LETTER UU */ + [0xb8b, 0xb8b], + [0xb8c, 0xb8c], + [0xb8d, 0xb8d], + [0xb8e, 0xb8e], /* TAMIL LETTER E */ + [0xb8f, 0xb8f], /* TAMIL LETTER EE */ + [0xb90, 0xb90], /* TAMIL LETTER AI */ + [0xb91, 0xb91], + [0xb92, 0xb92], /* TAMIL LETTER O */ + [0xb93, 0xb93], /* TAMIL LETTER OO */ + [0xb94, 0xb94], /* TAMIL LETTER AU */ + [0xb95, 0xb95], /* TAMIL LETTER KA */ + [0xb96, 0xb96], + [0xb97, 0xb97], + [0xb98, 0xb98], + [0xb99, 0xb99], /* TAMIL LETTER NGA */ + [0xb9a, 0xb9a], /* TAMIL LETTER CA */ + [0xb9b, 0xb9b], + [0xb9c, 0xb9c], /* TAMIL LETTER JA */ + [0xb9d, 0xb9d], + [0xb9e, 0xb9e], /* TAMIL LETTER NYA */ + [0xb9f, 0xb9f], /* TAMIL LETTER TTA */ + [0xba0, 0xba0], + [0xba1, 0xba1], + [0xba2, 0xba2], + [0xba3, 0xba3], /* TAMIL LETTER NNA */ + [0xba4, 0xba4], /* TAMIL LETTER TA */ + [0xba5, 0xba5], + [0xba6, 0xba6], + [0xba7, 0xba7], + [0xba8, 0xba8], /* TAMIL LETTER NA */ + [0xba9, 0xba9], /* TAMIL LETTER NNNA */ + [0xbaa, 0xbaa], /* TAMIL LETTER PA */ + [0xbab, 0xbab], + [0xbac, 0xbac], + [0xbad, 0xbad], + [0xbae, 0xbae], /* TAMIL LETTER MA */ + [0xbaf, 0xbaf], /* TAMIL LETTER YA */ + [0xbb0, 0xbb0], /* TAMIL LETTER RA */ + [0xbb1, 0xbb1], /* TAMIL LETTER RRA */ + [0xbb2, 0xbb2], /* TAMIL LETTER LA */ + [0xbb3, 0xbb3], /* TAMIL LETTER LLA */ + [0xbb4, 0xbb4], /* TAMIL LETTER LLLA */ + [0xbb5, 0xbb5], /* TAMIL LETTER VA */ + [0xbb6, 0xbb6], /* TAMIL LETTER SHA */ + [0xbb7, 0xbb7], /* TAMIL LETTER SSA */ + [0xbb8, 0xbb8], /* TAMIL LETTER SA */ + [0xbb9, 0xbb9], /* TAMIL LETTER HA */ + [0xbba, 0xbba], + [0xbbb, 0xbbb], + [0xbbc, 0xbbc], + [0xbbd, 0xbbd], + [0xbbe, 0xbbe], /* TAMIL VOWEL SIGN AA */ + [0xbbf, 0xbbf], /* TAMIL VOWEL SIGN I */ + [0xbc0, 0xbc0], /* TAMIL VOWEL SIGN II */ + [0xbc1, 0xbc1], /* TAMIL VOWEL SIGN U */ + [0xbc2, 0xbc2], /* TAMIL VOWEL SIGN UU */ + [0xbc3, 0xbc3], + [0xbc4, 0xbc4], + [0xbc5, 0xbc5], + [0xbc6, 0xbc6], /* TAMIL VOWEL SIGN E */ + [0xbc7, 0xbc7], /* TAMIL VOWEL SIGN EE */ + [0xbc8, 0xbc8], /* TAMIL VOWEL SIGN AI */ + [0xbc9, 0xbc9], + [0xbca, 0xbca], /* TAMIL VOWEL SIGN O */ + [0xbcb, 0xbcb], /* TAMIL VOWEL SIGN OO */ + [0xbcc, 0xbcc], /* TAMIL VOWEL SIGN AU */ + [0xbcd, 0xbcd], /* TAMIL SIGN VIRAMA */ + [0xbce, 0xbce], + [0xbcf, 0xbcf], + [0xbd0, 0xbd0], /* TAMIL OM */ + [0xbd1, 0xbd1], + [0xbd2, 0xbd2], + [0xbd3, 0xbd3], + [0xbd4, 0xbd4], + [0xbd5, 0xbd5], + [0xbd6, 0xbd6], + [0xbd7, 0xbd7], /* TAMIL AU LENGTH MARK */ + [0xbd8, 0xbd8], + [0xbd9, 0xbd9], + [0xbda, 0xbda], + [0xbdb, 0xbdb], + [0xbdc, 0xbdc], + [0xbdd, 0xbdd], + [0xbde, 0xbde], + [0xbdf, 0xbdf], + [0xbe0, 0xbe0], + [0xbe1, 0xbe1], + [0xbe2, 0xbe2], + [0xbe3, 0xbe3], + [0xbe4, 0xbe4], + [0xbe5, 0xbe5], + [0xbe6, 0xbe6], /* TAMIL DIGIT ZERO */ + [0xbe7, 0xbe7], /* TAMIL DIGIT ONE */ + [0xbe8, 0xbe8], /* TAMIL DIGIT TWO */ + [0xbe9, 0xbe9], /* TAMIL DIGIT THREE */ + [0xbea, 0xbea], /* TAMIL DIGIT FOUR */ + [0xbeb, 0xbeb], /* TAMIL DIGIT FIVE */ + [0xbec, 0xbec], /* TAMIL DIGIT SIX */ + [0xbed, 0xbed], /* TAMIL DIGIT SEVEN */ + [0xbee, 0xbee], /* TAMIL DIGIT EIGHT */ + [0xbef, 0xbef], /* TAMIL DIGIT NINE */ + [0xbf0, 0xbf0], /* TAMIL NUMBER TEN */ + [0xbf1, 0xbf1], /* TAMIL NUMBER ONE HUNDRED */ + [0xbf2, 0xbf2], /* TAMIL NUMBER ONE THOUSAND */ + [0xbf3, 0xbf3], /* TAMIL DAY SIGN */ + [0xbf4, 0xbf4], /* TAMIL MONTH SIGN */ + [0xbf5, 0xbf5], /* TAMIL YEAR SIGN */ + [0xbf6, 0xbf6], /* TAMIL DEBIT SIGN */ + [0xbf7, 0xbf7], /* TAMIL CREDIT SIGN */ + [0xbf8, 0xbf8], /* TAMIL AS ABOVE SIGN */ + [0xbf9, 0xbf9], /* TAMIL RUPEE SIGN */ + [0xbfa, 0xbfa], /* TAMIL NUMBER SIGN */ + [0xbfb, 0xbfb], + [0xbfc, 0xbfc], + [0xbfd, 0xbfd], + [0xbfe, 0xbfe], + [0xbff, 0xbff], + [0xc00, 0xc00], + [0xc01, 0xc01], /* TELUGU SIGN CANDRABINDU */ + [0xc02, 0xc02], /* TELUGU SIGN ANUSVARA */ + [0xc03, 0xc03], /* TELUGU SIGN VISARGA */ + [0xc04, 0xc04], + [0xc05, 0xc05], /* TELUGU LETTER A */ + [0xc06, 0xc06], /* TELUGU LETTER AA */ + [0xc07, 0xc07], /* TELUGU LETTER I */ + [0xc08, 0xc08], /* TELUGU LETTER II */ + [0xc09, 0xc09], /* TELUGU LETTER U */ + [0xc0a, 0xc0a], /* TELUGU LETTER UU */ + [0xc0b, 0xc0b], /* TELUGU LETTER VOCALIC R */ + [0xc0c, 0xc0c], /* TELUGU LETTER VOCALIC L */ + [0xc0d, 0xc0d], + [0xc0e, 0xc0e], /* TELUGU LETTER E */ + [0xc0f, 0xc0f], /* TELUGU LETTER EE */ + [0xc10, 0xc10], /* TELUGU LETTER AI */ + [0xc11, 0xc11], + [0xc12, 0xc12], /* TELUGU LETTER O */ + [0xc13, 0xc13], /* TELUGU LETTER OO */ + [0xc14, 0xc14], /* TELUGU LETTER AU */ + [0xc15, 0xc15], /* TELUGU LETTER KA */ + [0xc16, 0xc16], /* TELUGU LETTER KHA */ + [0xc17, 0xc17], /* TELUGU LETTER GA */ + [0xc18, 0xc18], /* TELUGU LETTER GHA */ + [0xc19, 0xc19], /* TELUGU LETTER NGA */ + [0xc1a, 0xc1a], /* TELUGU LETTER CA */ + [0xc1b, 0xc1b], /* TELUGU LETTER CHA */ + [0xc1c, 0xc1c], /* TELUGU LETTER JA */ + [0xc1d, 0xc1d], /* TELUGU LETTER JHA */ + [0xc1e, 0xc1e], /* TELUGU LETTER NYA */ + [0xc1f, 0xc1f], /* TELUGU LETTER TTA */ + [0xc20, 0xc20], /* TELUGU LETTER TTHA */ + [0xc21, 0xc21], /* TELUGU LETTER DDA */ + [0xc22, 0xc22], /* TELUGU LETTER DDHA */ + [0xc23, 0xc23], /* TELUGU LETTER NNA */ + [0xc24, 0xc24], /* TELUGU LETTER TA */ + [0xc25, 0xc25], /* TELUGU LETTER THA */ + [0xc26, 0xc26], /* TELUGU LETTER DA */ + [0xc27, 0xc27], /* TELUGU LETTER DHA */ + [0xc28, 0xc28], /* TELUGU LETTER NA */ + [0xc29, 0xc29], + [0xc2a, 0xc2a], /* TELUGU LETTER PA */ + [0xc2b, 0xc2b], /* TELUGU LETTER PHA */ + [0xc2c, 0xc2c], /* TELUGU LETTER BA */ + [0xc2d, 0xc2d], /* TELUGU LETTER BHA */ + [0xc2e, 0xc2e], /* TELUGU LETTER MA */ + [0xc2f, 0xc2f], /* TELUGU LETTER YA */ + [0xc30, 0xc30], /* TELUGU LETTER RA */ + [0xc31, 0xc31], /* TELUGU LETTER RRA */ + [0xc32, 0xc32], /* TELUGU LETTER LA */ + [0xc33, 0xc33], /* TELUGU LETTER LLA */ + [0xc34, 0xc34], + [0xc35, 0xc35], /* TELUGU LETTER VA */ + [0xc36, 0xc36], /* TELUGU LETTER SHA */ + [0xc37, 0xc37], /* TELUGU LETTER SSA */ + [0xc38, 0xc38], /* TELUGU LETTER SA */ + [0xc39, 0xc39], /* TELUGU LETTER HA */ + [0xc3a, 0xc3a], + [0xc3b, 0xc3b], + [0xc3c, 0xc3c], + [0xc3d, 0xc3d], /* TELUGU SIGN AVAGRAHA */ + [0xc3e, 0xc3e], /* TELUGU VOWEL SIGN AA */ + [0xc3f, 0xc3f], /* TELUGU VOWEL SIGN I */ + [0xc40, 0xc40], /* TELUGU VOWEL SIGN II */ + [0xc41, 0xc41], /* TELUGU VOWEL SIGN U */ + [0xc42, 0xc42], /* TELUGU VOWEL SIGN UU */ + [0xc43, 0xc43], /* TELUGU VOWEL SIGN VOCALIC R */ + [0xc44, 0xc44], /* TELUGU VOWEL SIGN VOCALIC RR */ + [0xc45, 0xc45], + [0xc46, 0xc46], /* TELUGU VOWEL SIGN E */ + [0xc47, 0xc47], /* TELUGU VOWEL SIGN EE */ + [0xc48, 0xc48], /* TELUGU VOWEL SIGN AI */ + [0xc49, 0xc49], + [0xc4a, 0xc4a], /* TELUGU VOWEL SIGN O */ + [0xc4b, 0xc4b], /* TELUGU VOWEL SIGN OO */ + [0xc4c, 0xc4c], /* TELUGU VOWEL SIGN AU */ + [0xc4d, 0xc4d], /* TELUGU SIGN VIRAMA */ + [0xc4e, 0xc4e], + [0xc4f, 0xc4f], + [0xc50, 0xc50], + [0xc51, 0xc51], + [0xc52, 0xc52], + [0xc53, 0xc53], + [0xc54, 0xc54], + [0xc55, 0xc55], /* TELUGU LENGTH MARK */ + [0xc56, 0xc56], /* TELUGU AI LENGTH MARK */ + [0xc57, 0xc57], + [0xc58, 0xc58], /* TELUGU LETTER TSA */ + [0xc59, 0xc59], /* TELUGU LETTER DZA */ + [0xc5a, 0xc5a], + [0xc5b, 0xc5b], + [0xc5c, 0xc5c], + [0xc5d, 0xc5d], + [0xc5e, 0xc5e], + [0xc5f, 0xc5f], + [0xc60, 0xc60], /* TELUGU LETTER VOCALIC RR */ + [0xc61, 0xc61], /* TELUGU LETTER VOCALIC LL */ + [0xc62, 0xc62], /* TELUGU VOWEL SIGN VOCALIC L */ + [0xc63, 0xc63], /* TELUGU VOWEL SIGN VOCALIC LL */ + [0xc64, 0xc64], + [0xc65, 0xc65], + [0xc66, 0xc66], /* TELUGU DIGIT ZERO */ + [0xc67, 0xc67], /* TELUGU DIGIT ONE */ + [0xc68, 0xc68], /* TELUGU DIGIT TWO */ + [0xc69, 0xc69], /* TELUGU DIGIT THREE */ + [0xc6a, 0xc6a], /* TELUGU DIGIT FOUR */ + [0xc6b, 0xc6b], /* TELUGU DIGIT FIVE */ + [0xc6c, 0xc6c], /* TELUGU DIGIT SIX */ + [0xc6d, 0xc6d], /* TELUGU DIGIT SEVEN */ + [0xc6e, 0xc6e], /* TELUGU DIGIT EIGHT */ + [0xc6f, 0xc6f], /* TELUGU DIGIT NINE */ + [0xc70, 0xc70], + [0xc71, 0xc71], + [0xc72, 0xc72], + [0xc73, 0xc73], + [0xc74, 0xc74], + [0xc75, 0xc75], + [0xc76, 0xc76], + [0xc77, 0xc77], + [0xc78, 0xc78], /* TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR */ + [0xc79, 0xc79], /* TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR */ + [0xc7a, 0xc7a], /* TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR */ + [0xc7b, 0xc7b], /* TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR */ + [0xc7c, 0xc7c], /* TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR */ + [0xc7d, 0xc7d], /* TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR */ + [0xc7e, 0xc7e], /* TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR */ + [0xc7f, 0xc7f], /* TELUGU SIGN TUUMU */ + [0xc80, 0xc80], + [0xc81, 0xc81], + [0xc82, 0xc82], /* KANNADA SIGN ANUSVARA */ + [0xc83, 0xc83], /* KANNADA SIGN VISARGA */ + [0xc84, 0xc84], + [0xc85, 0xc85], /* KANNADA LETTER A */ + [0xc86, 0xc86], /* KANNADA LETTER AA */ + [0xc87, 0xc87], /* KANNADA LETTER I */ + [0xc88, 0xc88], /* KANNADA LETTER II */ + [0xc89, 0xc89], /* KANNADA LETTER U */ + [0xc8a, 0xc8a], /* KANNADA LETTER UU */ + [0xc8b, 0xc8b], /* KANNADA LETTER VOCALIC R */ + [0xc8c, 0xc8c], /* KANNADA LETTER VOCALIC L */ + [0xc8d, 0xc8d], + [0xc8e, 0xc8e], /* KANNADA LETTER E */ + [0xc8f, 0xc8f], /* KANNADA LETTER EE */ + [0xc90, 0xc90], /* KANNADA LETTER AI */ + [0xc91, 0xc91], + [0xc92, 0xc92], /* KANNADA LETTER O */ + [0xc93, 0xc93], /* KANNADA LETTER OO */ + [0xc94, 0xc94], /* KANNADA LETTER AU */ + [0xc95, 0xc95], /* KANNADA LETTER KA */ + [0xc96, 0xc96], /* KANNADA LETTER KHA */ + [0xc97, 0xc97], /* KANNADA LETTER GA */ + [0xc98, 0xc98], /* KANNADA LETTER GHA */ + [0xc99, 0xc99], /* KANNADA LETTER NGA */ + [0xc9a, 0xc9a], /* KANNADA LETTER CA */ + [0xc9b, 0xc9b], /* KANNADA LETTER CHA */ + [0xc9c, 0xc9c], /* KANNADA LETTER JA */ + [0xc9d, 0xc9d], /* KANNADA LETTER JHA */ + [0xc9e, 0xc9e], /* KANNADA LETTER NYA */ + [0xc9f, 0xc9f], /* KANNADA LETTER TTA */ + [0xca0, 0xca0], /* KANNADA LETTER TTHA */ + [0xca1, 0xca1], /* KANNADA LETTER DDA */ + [0xca2, 0xca2], /* KANNADA LETTER DDHA */ + [0xca3, 0xca3], /* KANNADA LETTER NNA */ + [0xca4, 0xca4], /* KANNADA LETTER TA */ + [0xca5, 0xca5], /* KANNADA LETTER THA */ + [0xca6, 0xca6], /* KANNADA LETTER DA */ + [0xca7, 0xca7], /* KANNADA LETTER DHA */ + [0xca8, 0xca8], /* KANNADA LETTER NA */ + [0xca9, 0xca9], + [0xcaa, 0xcaa], /* KANNADA LETTER PA */ + [0xcab, 0xcab], /* KANNADA LETTER PHA */ + [0xcac, 0xcac], /* KANNADA LETTER BA */ + [0xcad, 0xcad], /* KANNADA LETTER BHA */ + [0xcae, 0xcae], /* KANNADA LETTER MA */ + [0xcaf, 0xcaf], /* KANNADA LETTER YA */ + [0xcb0, 0xcb0], /* KANNADA LETTER RA */ + [0xcb1, 0xcb1], /* KANNADA LETTER RRA */ + [0xcb2, 0xcb2], /* KANNADA LETTER LA */ + [0xcb3, 0xcb3], /* KANNADA LETTER LLA */ + [0xcb4, 0xcb4], + [0xcb5, 0xcb5], /* KANNADA LETTER VA */ + [0xcb6, 0xcb6], /* KANNADA LETTER SHA */ + [0xcb7, 0xcb7], /* KANNADA LETTER SSA */ + [0xcb8, 0xcb8], /* KANNADA LETTER SA */ + [0xcb9, 0xcb9], /* KANNADA LETTER HA */ + [0xcba, 0xcba], + [0xcbb, 0xcbb], + [0xcbc, 0xcbc], /* KANNADA SIGN NUKTA */ + [0xcbd, 0xcbd], /* KANNADA SIGN AVAGRAHA */ + [0xcbe, 0xcbe], /* KANNADA VOWEL SIGN AA */ + [0xcbf, 0xcbf], /* KANNADA VOWEL SIGN I */ + [0xcc0, 0xcc0], /* KANNADA VOWEL SIGN II */ + [0xcc1, 0xcc1], /* KANNADA VOWEL SIGN U */ + [0xcc2, 0xcc2], /* KANNADA VOWEL SIGN UU */ + [0xcc3, 0xcc3], /* KANNADA VOWEL SIGN VOCALIC R */ + [0xcc4, 0xcc4], /* KANNADA VOWEL SIGN VOCALIC RR */ + [0xcc5, 0xcc5], + [0xcc6, 0xcc6], /* KANNADA VOWEL SIGN E */ + [0xcc7, 0xcc7], /* KANNADA VOWEL SIGN EE */ + [0xcc8, 0xcc8], /* KANNADA VOWEL SIGN AI */ + [0xcc9, 0xcc9], + [0xcca, 0xcca], /* KANNADA VOWEL SIGN O */ + [0xccb, 0xccb], /* KANNADA VOWEL SIGN OO */ + [0xccc, 0xccc], /* KANNADA VOWEL SIGN AU */ + [0xccd, 0xccd], /* KANNADA SIGN VIRAMA */ + [0xcce, 0xcce], + [0xccf, 0xccf], + [0xcd0, 0xcd0], + [0xcd1, 0xcd1], + [0xcd2, 0xcd2], + [0xcd3, 0xcd3], + [0xcd4, 0xcd4], + [0xcd5, 0xcd5], /* KANNADA LENGTH MARK */ + [0xcd6, 0xcd6], /* KANNADA AI LENGTH MARK */ + [0xcd7, 0xcd7], + [0xcd8, 0xcd8], + [0xcd9, 0xcd9], + [0xcda, 0xcda], + [0xcdb, 0xcdb], + [0xcdc, 0xcdc], + [0xcdd, 0xcdd], + [0xcde, 0xcde], /* KANNADA LETTER FA */ + [0xcdf, 0xcdf], + [0xce0, 0xce0], /* KANNADA LETTER VOCALIC RR */ + [0xce1, 0xce1], /* KANNADA LETTER VOCALIC LL */ + [0xce2, 0xce2], /* KANNADA VOWEL SIGN VOCALIC L */ + [0xce3, 0xce3], /* KANNADA VOWEL SIGN VOCALIC LL */ + [0xce4, 0xce4], + [0xce5, 0xce5], + [0xce6, 0xce6], /* KANNADA DIGIT ZERO */ + [0xce7, 0xce7], /* KANNADA DIGIT ONE */ + [0xce8, 0xce8], /* KANNADA DIGIT TWO */ + [0xce9, 0xce9], /* KANNADA DIGIT THREE */ + [0xcea, 0xcea], /* KANNADA DIGIT FOUR */ + [0xceb, 0xceb], /* KANNADA DIGIT FIVE */ + [0xcec, 0xcec], /* KANNADA DIGIT SIX */ + [0xced, 0xced], /* KANNADA DIGIT SEVEN */ + [0xcee, 0xcee], /* KANNADA DIGIT EIGHT */ + [0xcef, 0xcef], /* KANNADA DIGIT NINE */ + [0xcf0, 0xcf0], + [0xcf1, 0xcf1], /* KANNADA SIGN JIHVAMULIYA */ + [0xcf2, 0xcf2], /* KANNADA SIGN UPADHMANIYA */ + [0xcf3, 0xcf3], + [0xcf4, 0xcf4], + [0xcf5, 0xcf5], + [0xcf6, 0xcf6], + [0xcf7, 0xcf7], + [0xcf8, 0xcf8], + [0xcf9, 0xcf9], + [0xcfa, 0xcfa], + [0xcfb, 0xcfb], + [0xcfc, 0xcfc], + [0xcfd, 0xcfd], + [0xcfe, 0xcfe], + [0xcff, 0xcff], + [0xd00, 0xd00], + [0xd01, 0xd01], + [0xd02, 0xd02], /* MALAYALAM SIGN ANUSVARA */ + [0xd03, 0xd03], /* MALAYALAM SIGN VISARGA */ + [0xd04, 0xd04], + [0xd05, 0xd05], /* MALAYALAM LETTER A */ + [0xd06, 0xd06], /* MALAYALAM LETTER AA */ + [0xd07, 0xd07], /* MALAYALAM LETTER I */ + [0xd08, 0xd08], /* MALAYALAM LETTER II */ + [0xd09, 0xd09], /* MALAYALAM LETTER U */ + [0xd0a, 0xd0a], /* MALAYALAM LETTER UU */ + [0xd0b, 0xd0b], /* MALAYALAM LETTER VOCALIC R */ + [0xd0c, 0xd0c], /* MALAYALAM LETTER VOCALIC L */ + [0xd0d, 0xd0d], + [0xd0e, 0xd0e], /* MALAYALAM LETTER E */ + [0xd0f, 0xd0f], /* MALAYALAM LETTER EE */ + [0xd10, 0xd10], /* MALAYALAM LETTER AI */ + [0xd11, 0xd11], + [0xd12, 0xd12], /* MALAYALAM LETTER O */ + [0xd13, 0xd13], /* MALAYALAM LETTER OO */ + [0xd14, 0xd14], /* MALAYALAM LETTER AU */ + [0xd15, 0xd15], /* MALAYALAM LETTER KA */ + [0xd16, 0xd16], /* MALAYALAM LETTER KHA */ + [0xd17, 0xd17], /* MALAYALAM LETTER GA */ + [0xd18, 0xd18], /* MALAYALAM LETTER GHA */ + [0xd19, 0xd19], /* MALAYALAM LETTER NGA */ + [0xd1a, 0xd1a], /* MALAYALAM LETTER CA */ + [0xd1b, 0xd1b], /* MALAYALAM LETTER CHA */ + [0xd1c, 0xd1c], /* MALAYALAM LETTER JA */ + [0xd1d, 0xd1d], /* MALAYALAM LETTER JHA */ + [0xd1e, 0xd1e], /* MALAYALAM LETTER NYA */ + [0xd1f, 0xd1f], /* MALAYALAM LETTER TTA */ + [0xd20, 0xd20], /* MALAYALAM LETTER TTHA */ + [0xd21, 0xd21], /* MALAYALAM LETTER DDA */ + [0xd22, 0xd22], /* MALAYALAM LETTER DDHA */ + [0xd23, 0xd23], /* MALAYALAM LETTER NNA */ + [0xd24, 0xd24], /* MALAYALAM LETTER TA */ + [0xd25, 0xd25], /* MALAYALAM LETTER THA */ + [0xd26, 0xd26], /* MALAYALAM LETTER DA */ + [0xd27, 0xd27], /* MALAYALAM LETTER DHA */ + [0xd28, 0xd28], /* MALAYALAM LETTER NA */ + [0xd29, 0xd29], /* MALAYALAM LETTER NNNA */ + [0xd2a, 0xd2a], /* MALAYALAM LETTER PA */ + [0xd2b, 0xd2b], /* MALAYALAM LETTER PHA */ + [0xd2c, 0xd2c], /* MALAYALAM LETTER BA */ + [0xd2d, 0xd2d], /* MALAYALAM LETTER BHA */ + [0xd2e, 0xd2e], /* MALAYALAM LETTER MA */ + [0xd2f, 0xd2f], /* MALAYALAM LETTER YA */ + [0xd30, 0xd30], /* MALAYALAM LETTER RA */ + [0xd31, 0xd31], /* MALAYALAM LETTER RRA */ + [0xd32, 0xd32], /* MALAYALAM LETTER LA */ + [0xd33, 0xd33], /* MALAYALAM LETTER LLA */ + [0xd34, 0xd34], /* MALAYALAM LETTER LLLA */ + [0xd35, 0xd35], /* MALAYALAM LETTER VA */ + [0xd36, 0xd36], /* MALAYALAM LETTER SHA */ + [0xd37, 0xd37], /* MALAYALAM LETTER SSA */ + [0xd38, 0xd38], /* MALAYALAM LETTER SA */ + [0xd39, 0xd39], /* MALAYALAM LETTER HA */ + [0xd3a, 0xd3a], /* MALAYALAM LETTER TTTA */ + [0xd3b, 0xd3b], + [0xd3c, 0xd3c], + [0xd3d, 0xd3d], /* MALAYALAM SIGN AVAGRAHA */ + [0xd3e, 0xd3e], /* MALAYALAM VOWEL SIGN AA */ + [0xd3f, 0xd3f], /* MALAYALAM VOWEL SIGN I */ + [0xd40, 0xd40], /* MALAYALAM VOWEL SIGN II */ + [0xd41, 0xd41], /* MALAYALAM VOWEL SIGN U */ + [0xd42, 0xd42], /* MALAYALAM VOWEL SIGN UU */ + [0xd43, 0xd43], /* MALAYALAM VOWEL SIGN VOCALIC R */ + [0xd44, 0xd44], /* MALAYALAM VOWEL SIGN VOCALIC RR */ + [0xd45, 0xd45], + [0xd46, 0xd46], /* MALAYALAM VOWEL SIGN E */ + [0xd47, 0xd47], /* MALAYALAM VOWEL SIGN EE */ + [0xd48, 0xd48], /* MALAYALAM VOWEL SIGN AI */ + [0xd49, 0xd49], + [0xd4a, 0xd4a], /* MALAYALAM VOWEL SIGN O */ + [0xd4b, 0xd4b], /* MALAYALAM VOWEL SIGN OO */ + [0xd4c, 0xd4c], /* MALAYALAM VOWEL SIGN AU */ + [0xd4d, 0xd4d], /* MALAYALAM SIGN VIRAMA */ + [0xd4e, 0xd4e], /* MALAYALAM LETTER DOT REPH */ + [0xd4f, 0xd4f], + [0xd50, 0xd50], + [0xd51, 0xd51], + [0xd52, 0xd52], + [0xd53, 0xd53], + [0xd54, 0xd54], + [0xd55, 0xd55], + [0xd56, 0xd56], + [0xd57, 0xd57], /* MALAYALAM AU LENGTH MARK */ + [0xd58, 0xd58], + [0xd59, 0xd59], + [0xd5a, 0xd5a], + [0xd5b, 0xd5b], + [0xd5c, 0xd5c], + [0xd5d, 0xd5d], + [0xd5e, 0xd5e], + [0xd5f, 0xd5f], + [0xd60, 0xd60], /* MALAYALAM LETTER VOCALIC RR */ + [0xd61, 0xd61], /* MALAYALAM LETTER VOCALIC LL */ + [0xd62, 0xd62], /* MALAYALAM VOWEL SIGN VOCALIC L */ + [0xd63, 0xd63], /* MALAYALAM VOWEL SIGN VOCALIC LL */ + [0xd64, 0xd64], + [0xd65, 0xd65], + [0xd66, 0xd66], /* MALAYALAM DIGIT ZERO */ + [0xd67, 0xd67], /* MALAYALAM DIGIT ONE */ + [0xd68, 0xd68], /* MALAYALAM DIGIT TWO */ + [0xd69, 0xd69], /* MALAYALAM DIGIT THREE */ + [0xd6a, 0xd6a], /* MALAYALAM DIGIT FOUR */ + [0xd6b, 0xd6b], /* MALAYALAM DIGIT FIVE */ + [0xd6c, 0xd6c], /* MALAYALAM DIGIT SIX */ + [0xd6d, 0xd6d], /* MALAYALAM DIGIT SEVEN */ + [0xd6e, 0xd6e], /* MALAYALAM DIGIT EIGHT */ + [0xd6f, 0xd6f], /* MALAYALAM DIGIT NINE */ + [0xd70, 0xd70], /* MALAYALAM NUMBER TEN */ + [0xd71, 0xd71], /* MALAYALAM NUMBER ONE HUNDRED */ + [0xd72, 0xd72], /* MALAYALAM NUMBER ONE THOUSAND */ + [0xd73, 0xd73], /* MALAYALAM FRACTION ONE QUARTER */ + [0xd74, 0xd74], /* MALAYALAM FRACTION ONE HALF */ + [0xd75, 0xd75], /* MALAYALAM FRACTION THREE QUARTERS */ + [0xd76, 0xd76], + [0xd77, 0xd77], + [0xd78, 0xd78], + [0xd79, 0xd79], /* MALAYALAM DATE MARK */ + [0xd7a, 0xd7a], /* MALAYALAM LETTER CHILLU NN */ + [0xd7b, 0xd7b], /* MALAYALAM LETTER CHILLU N */ + [0xd7c, 0xd7c], /* MALAYALAM LETTER CHILLU RR */ + [0xd7d, 0xd7d], /* MALAYALAM LETTER CHILLU L */ + [0xd7e, 0xd7e], /* MALAYALAM LETTER CHILLU LL */ + [0xd7f, 0xd7f], /* MALAYALAM LETTER CHILLU K */ + [0xd80, 0xd80], + [0xd81, 0xd81], + [0xd82, 0xd82], /* SINHALA SIGN ANUSVARAYA */ + [0xd83, 0xd83], /* SINHALA SIGN VISARGAYA */ + [0xd84, 0xd84], + [0xd85, 0xd85], /* SINHALA LETTER AYANNA */ + [0xd86, 0xd86], /* SINHALA LETTER AAYANNA */ + [0xd87, 0xd87], /* SINHALA LETTER AEYANNA */ + [0xd88, 0xd88], /* SINHALA LETTER AEEYANNA */ + [0xd89, 0xd89], /* SINHALA LETTER IYANNA */ + [0xd8a, 0xd8a], /* SINHALA LETTER IIYANNA */ + [0xd8b, 0xd8b], /* SINHALA LETTER UYANNA */ + [0xd8c, 0xd8c], /* SINHALA LETTER UUYANNA */ + [0xd8d, 0xd8d], /* SINHALA LETTER IRUYANNA */ + [0xd8e, 0xd8e], /* SINHALA LETTER IRUUYANNA */ + [0xd8f, 0xd8f], /* SINHALA LETTER ILUYANNA */ + [0xd90, 0xd90], /* SINHALA LETTER ILUUYANNA */ + [0xd91, 0xd91], /* SINHALA LETTER EYANNA */ + [0xd92, 0xd92], /* SINHALA LETTER EEYANNA */ + [0xd93, 0xd93], /* SINHALA LETTER AIYANNA */ + [0xd94, 0xd94], /* SINHALA LETTER OYANNA */ + [0xd95, 0xd95], /* SINHALA LETTER OOYANNA */ + [0xd96, 0xd96], /* SINHALA LETTER AUYANNA */ + [0xd97, 0xd97], + [0xd98, 0xd98], + [0xd99, 0xd99], + [0xd9a, 0xd9a], /* SINHALA LETTER ALPAPRAANA KAYANNA */ + [0xd9b, 0xd9b], /* SINHALA LETTER MAHAAPRAANA KAYANNA */ + [0xd9c, 0xd9c], /* SINHALA LETTER ALPAPRAANA GAYANNA */ + [0xd9d, 0xd9d], /* SINHALA LETTER MAHAAPRAANA GAYANNA */ + [0xd9e, 0xd9e], /* SINHALA LETTER KANTAJA NAASIKYAYA */ + [0xd9f, 0xd9f], /* SINHALA LETTER SANYAKA GAYANNA */ + [0xda0, 0xda0], /* SINHALA LETTER ALPAPRAANA CAYANNA */ + [0xda1, 0xda1], /* SINHALA LETTER MAHAAPRAANA CAYANNA */ + [0xda2, 0xda2], /* SINHALA LETTER ALPAPRAANA JAYANNA */ + [0xda3, 0xda3], /* SINHALA LETTER MAHAAPRAANA JAYANNA */ + [0xda4, 0xda4], /* SINHALA LETTER TAALUJA NAASIKYAYA */ + [0xda5, 0xda5], /* SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA */ + [0xda6, 0xda6], /* SINHALA LETTER SANYAKA JAYANNA */ + [0xda7, 0xda7], /* SINHALA LETTER ALPAPRAANA TTAYANNA */ + [0xda8, 0xda8], /* SINHALA LETTER MAHAAPRAANA TTAYANNA */ + [0xda9, 0xda9], /* SINHALA LETTER ALPAPRAANA DDAYANNA */ + [0xdaa, 0xdaa], /* SINHALA LETTER MAHAAPRAANA DDAYANNA */ + [0xdab, 0xdab], /* SINHALA LETTER MUURDHAJA NAYANNA */ + [0xdac, 0xdac], /* SINHALA LETTER SANYAKA DDAYANNA */ + [0xdad, 0xdad], /* SINHALA LETTER ALPAPRAANA TAYANNA */ + [0xdae, 0xdae], /* SINHALA LETTER MAHAAPRAANA TAYANNA */ + [0xdaf, 0xdaf], /* SINHALA LETTER ALPAPRAANA DAYANNA */ + [0xdb0, 0xdb0], /* SINHALA LETTER MAHAAPRAANA DAYANNA */ + [0xdb1, 0xdb1], /* SINHALA LETTER DANTAJA NAYANNA */ + [0xdb2, 0xdb2], + [0xdb3, 0xdb3], /* SINHALA LETTER SANYAKA DAYANNA */ + [0xdb4, 0xdb4], /* SINHALA LETTER ALPAPRAANA PAYANNA */ + [0xdb5, 0xdb5], /* SINHALA LETTER MAHAAPRAANA PAYANNA */ + [0xdb6, 0xdb6], /* SINHALA LETTER ALPAPRAANA BAYANNA */ + [0xdb7, 0xdb7], /* SINHALA LETTER MAHAAPRAANA BAYANNA */ + [0xdb8, 0xdb8], /* SINHALA LETTER MAYANNA */ + [0xdb9, 0xdb9], /* SINHALA LETTER AMBA BAYANNA */ + [0xdba, 0xdba], /* SINHALA LETTER YAYANNA */ + [0xdbb, 0xdbb], /* SINHALA LETTER RAYANNA */ + [0xdbc, 0xdbc], + [0xdbd, 0xdbd], /* SINHALA LETTER DANTAJA LAYANNA */ + [0xdbe, 0xdbe], + [0xdbf, 0xdbf], + [0xdc0, 0xdc0], /* SINHALA LETTER VAYANNA */ + [0xdc1, 0xdc1], /* SINHALA LETTER TAALUJA SAYANNA */ + [0xdc2, 0xdc2], /* SINHALA LETTER MUURDHAJA SAYANNA */ + [0xdc3, 0xdc3], /* SINHALA LETTER DANTAJA SAYANNA */ + [0xdc4, 0xdc4], /* SINHALA LETTER HAYANNA */ + [0xdc5, 0xdc5], /* SINHALA LETTER MUURDHAJA LAYANNA */ + [0xdc6, 0xdc6], /* SINHALA LETTER FAYANNA */ + [0xdc7, 0xdc7], + [0xdc8, 0xdc8], + [0xdc9, 0xdc9], + [0xdca, 0xdca], /* SINHALA SIGN AL-LAKUNA */ + [0xdcb, 0xdcb], + [0xdcc, 0xdcc], + [0xdcd, 0xdcd], + [0xdce, 0xdce], + [0xdcf, 0xdcf], /* SINHALA VOWEL SIGN AELA-PILLA */ + [0xdd0, 0xdd0], /* SINHALA VOWEL SIGN KETTI AEDA-PILLA */ + [0xdd1, 0xdd1], /* SINHALA VOWEL SIGN DIGA AEDA-PILLA */ + [0xdd2, 0xdd2], /* SINHALA VOWEL SIGN KETTI IS-PILLA */ + [0xdd3, 0xdd3], /* SINHALA VOWEL SIGN DIGA IS-PILLA */ + [0xdd4, 0xdd4], /* SINHALA VOWEL SIGN KETTI PAA-PILLA */ + [0xdd5, 0xdd5], + [0xdd6, 0xdd6], /* SINHALA VOWEL SIGN DIGA PAA-PILLA */ + [0xdd7, 0xdd7], + [0xdd8, 0xdd8], /* SINHALA VOWEL SIGN GAETTA-PILLA */ + [0xdd9, 0xdd9], /* SINHALA VOWEL SIGN KOMBUVA */ + [0xdda, 0xdda], /* SINHALA VOWEL SIGN DIGA KOMBUVA */ + [0xddb, 0xddb], /* SINHALA VOWEL SIGN KOMBU DEKA */ + [0xddc, 0xddc], /* SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA */ + [0xddd, 0xddd], /* SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA */ + [0xdde, 0xdde], /* SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA */ + [0xddf, 0xddf], /* SINHALA VOWEL SIGN GAYANUKITTA */ + [0xde0, 0xde0], + [0xde1, 0xde1], + [0xde2, 0xde2], + [0xde3, 0xde3], + [0xde4, 0xde4], + [0xde5, 0xde5], + [0xde6, 0xde6], + [0xde7, 0xde7], + [0xde8, 0xde8], + [0xde9, 0xde9], + [0xdea, 0xdea], + [0xdeb, 0xdeb], + [0xdec, 0xdec], + [0xded, 0xded], + [0xdee, 0xdee], + [0xdef, 0xdef], + [0xdf0, 0xdf0], + [0xdf1, 0xdf1], + [0xdf2, 0xdf2], /* SINHALA VOWEL SIGN DIGA GAETTA-PILLA */ + [0xdf3, 0xdf3], /* SINHALA VOWEL SIGN DIGA GAYANUKITTA */ + [0xdf4, 0xdf4], /* SINHALA PUNCTUATION KUNDDALIYA */ + [0xdf5, 0xdf5], + [0xdf6, 0xdf6], + [0xdf7, 0xdf7], + [0xdf8, 0xdf8], + [0xdf9, 0xdf9], + [0xdfa, 0xdfa], + [0xdfb, 0xdfb], + [0xdfc, 0xdfc], + [0xdfd, 0xdfd], + [0xdfe, 0xdfe], + [0xdff, 0xdff], + [0xe00, 0xe00], + [0xe01, 0xe01], /* THAI CHARACTER KO KAI (THAI LETTER KO KAI) */ + [0xe02, 0xe02], /* THAI CHARACTER KHO KHAI (THAI LETTER KHO KHAI) */ + [0xe03, 0xe03], /* THAI CHARACTER KHO KHUAT (THAI LETTER KHO KHUAT) */ + [0xe04, 0xe04], /* THAI CHARACTER KHO KHWAI (THAI LETTER KHO KHWAI) */ + [0xe05, 0xe05], /* THAI CHARACTER KHO KHON (THAI LETTER KHO KHON) */ + [0xe06, 0xe06], /* THAI CHARACTER KHO RAKHANG (THAI LETTER KHO RAKHANG) */ + [0xe07, 0xe07], /* THAI CHARACTER NGO NGU (THAI LETTER NGO NGU) */ + [0xe08, 0xe08], /* THAI CHARACTER CHO CHAN (THAI LETTER CHO CHAN) */ + [0xe09, 0xe09], /* THAI CHARACTER CHO CHING (THAI LETTER CHO CHING) */ + [0xe0a, 0xe0a], /* THAI CHARACTER CHO CHANG (THAI LETTER CHO CHANG) */ + [0xe0b, 0xe0b], /* THAI CHARACTER SO SO (THAI LETTER SO SO) */ + [0xe0c, 0xe0c], /* THAI CHARACTER CHO CHOE (THAI LETTER CHO CHOE) */ + [0xe0d, 0xe0d], /* THAI CHARACTER YO YING (THAI LETTER YO YING) */ + [0xe0e, 0xe0e], /* THAI CHARACTER DO CHADA (THAI LETTER DO CHADA) */ + [0xe0f, 0xe0f], /* THAI CHARACTER TO PATAK (THAI LETTER TO PATAK) */ + [0xe10, 0xe10], /* THAI CHARACTER THO THAN (THAI LETTER THO THAN) */ + [0xe11, 0xe11], /* THAI CHARACTER THO NANGMONTHO (THAI LETTER THO NANGMONTHO) */ + [0xe12, 0xe12], /* THAI CHARACTER THO PHUTHAO (THAI LETTER THO PHUTHAO) */ + [0xe13, 0xe13], /* THAI CHARACTER NO NEN (THAI LETTER NO NEN) */ + [0xe14, 0xe14], /* THAI CHARACTER DO DEK (THAI LETTER DO DEK) */ + [0xe15, 0xe15], /* THAI CHARACTER TO TAO (THAI LETTER TO TAO) */ + [0xe16, 0xe16], /* THAI CHARACTER THO THUNG (THAI LETTER THO THUNG) */ + [0xe17, 0xe17], /* THAI CHARACTER THO THAHAN (THAI LETTER THO THAHAN) */ + [0xe18, 0xe18], /* THAI CHARACTER THO THONG (THAI LETTER THO THONG) */ + [0xe19, 0xe19], /* THAI CHARACTER NO NU (THAI LETTER NO NU) */ + [0xe1a, 0xe1a], /* THAI CHARACTER BO BAIMAI (THAI LETTER BO BAIMAI) */ + [0xe1b, 0xe1b], /* THAI CHARACTER PO PLA (THAI LETTER PO PLA) */ + [0xe1c, 0xe1c], /* THAI CHARACTER PHO PHUNG (THAI LETTER PHO PHUNG) */ + [0xe1d, 0xe1d], /* THAI CHARACTER FO FA (THAI LETTER FO FA) */ + [0xe1e, 0xe1e], /* THAI CHARACTER PHO PHAN (THAI LETTER PHO PHAN) */ + [0xe1f, 0xe1f], /* THAI CHARACTER FO FAN (THAI LETTER FO FAN) */ + [0xe20, 0xe20], /* THAI CHARACTER PHO SAMPHAO (THAI LETTER PHO SAMPHAO) */ + [0xe21, 0xe21], /* THAI CHARACTER MO MA (THAI LETTER MO MA) */ + [0xe22, 0xe22], /* THAI CHARACTER YO YAK (THAI LETTER YO YAK) */ + [0xe23, 0xe23], /* THAI CHARACTER RO RUA (THAI LETTER RO RUA) */ + [0xe24, 0xe24], /* THAI CHARACTER RU (THAI LETTER RU) */ + [0xe25, 0xe25], /* THAI CHARACTER LO LING (THAI LETTER LO LING) */ + [0xe26, 0xe26], /* THAI CHARACTER LU (THAI LETTER LU) */ + [0xe27, 0xe27], /* THAI CHARACTER WO WAEN (THAI LETTER WO WAEN) */ + [0xe28, 0xe28], /* THAI CHARACTER SO SALA (THAI LETTER SO SALA) */ + [0xe29, 0xe29], /* THAI CHARACTER SO RUSI (THAI LETTER SO RUSI) */ + [0xe2a, 0xe2a], /* THAI CHARACTER SO SUA (THAI LETTER SO SUA) */ + [0xe2b, 0xe2b], /* THAI CHARACTER HO HIP (THAI LETTER HO HIP) */ + [0xe2c, 0xe2c], /* THAI CHARACTER LO CHULA (THAI LETTER LO CHULA) */ + [0xe2d, 0xe2d], /* THAI CHARACTER O ANG (THAI LETTER O ANG) */ + [0xe2e, 0xe2e], /* THAI CHARACTER HO NOKHUK (THAI LETTER HO NOK HUK) */ + [0xe2f, 0xe2f], /* THAI CHARACTER PAIYANNOI (THAI PAI YAN NOI) */ + [0xe30, 0xe30], /* THAI CHARACTER SARA A (THAI VOWEL SIGN SARA A) */ + [0xe31, 0xe31], /* THAI CHARACTER MAI HAN-AKAT (THAI VOWEL SIGN MAI HAN-AKAT) */ + [0xe32, 0xe32], /* THAI CHARACTER SARA AA (THAI VOWEL SIGN SARA AA) */ + [0xe33, 0xe33], /* THAI CHARACTER SARA AM (THAI VOWEL SIGN SARA AM) */ + [0xe34, 0xe34], /* THAI CHARACTER SARA I (THAI VOWEL SIGN SARA I) */ + [0xe35, 0xe35], /* THAI CHARACTER SARA II (THAI VOWEL SIGN SARA II) */ + [0xe36, 0xe36], /* THAI CHARACTER SARA UE (THAI VOWEL SIGN SARA UE) */ + [0xe37, 0xe37], /* THAI CHARACTER SARA UEE (THAI VOWEL SIGN SARA UEE) */ + [0xe38, 0xe38], /* THAI CHARACTER SARA U (THAI VOWEL SIGN SARA U) */ + [0xe39, 0xe39], /* THAI CHARACTER SARA UU (THAI VOWEL SIGN SARA UU) */ + [0xe3a, 0xe3a], /* THAI CHARACTER PHINTHU (THAI VOWEL SIGN PHINTHU) */ + [0xe3b, 0xe3b], + [0xe3c, 0xe3c], + [0xe3d, 0xe3d], + [0xe3e, 0xe3e], + [0xe3f, 0xe3f], /* THAI CURRENCY SYMBOL BAHT (THAI BAHT SIGN) */ + [0xe40, 0xe40], /* THAI CHARACTER SARA E (THAI VOWEL SIGN SARA E) */ + [0xe41, 0xe41], /* THAI CHARACTER SARA AE (THAI VOWEL SIGN SARA AE) */ + [0xe42, 0xe42], /* THAI CHARACTER SARA O (THAI VOWEL SIGN SARA O) */ + [0xe43, 0xe43], /* THAI CHARACTER SARA AI MAIMUAN (THAI VOWEL SIGN SARA MAI MUAN) */ + [0xe44, 0xe44], /* THAI CHARACTER SARA AI MAIMALAI (THAI VOWEL SIGN SARA MAI MALAI) */ + [0xe45, 0xe45], /* THAI CHARACTER LAKKHANGYAO (THAI LAK KHANG YAO) */ + [0xe46, 0xe46], /* THAI CHARACTER MAIYAMOK (THAI MAI YAMOK) */ + [0xe47, 0xe47], /* THAI CHARACTER MAITAIKHU (THAI VOWEL SIGN MAI TAI KHU) */ + [0xe48, 0xe48], /* THAI CHARACTER MAI EK (THAI TONE MAI EK) */ + [0xe49, 0xe49], /* THAI CHARACTER MAI THO (THAI TONE MAI THO) */ + [0xe4a, 0xe4a], /* THAI CHARACTER MAI TRI (THAI TONE MAI TRI) */ + [0xe4b, 0xe4b], /* THAI CHARACTER MAI CHATTAWA (THAI TONE MAI CHATTAWA) */ + [0xe4c, 0xe4c], /* THAI CHARACTER THANTHAKHAT (THAI THANTHAKHAT) */ + [0xe4d, 0xe4d], /* THAI CHARACTER NIKHAHIT (THAI NIKKHAHIT) */ + [0xe4e, 0xe4e], /* THAI CHARACTER YAMAKKAN (THAI YAMAKKAN) */ + [0xe4f, 0xe4f], /* THAI CHARACTER FONGMAN (THAI FONGMAN) */ + [0xe50, 0xe50], /* THAI DIGIT ZERO */ + [0xe51, 0xe51], /* THAI DIGIT ONE */ + [0xe52, 0xe52], /* THAI DIGIT TWO */ + [0xe53, 0xe53], /* THAI DIGIT THREE */ + [0xe54, 0xe54], /* THAI DIGIT FOUR */ + [0xe55, 0xe55], /* THAI DIGIT FIVE */ + [0xe56, 0xe56], /* THAI DIGIT SIX */ + [0xe57, 0xe57], /* THAI DIGIT SEVEN */ + [0xe58, 0xe58], /* THAI DIGIT EIGHT */ + [0xe59, 0xe59], /* THAI DIGIT NINE */ + [0xe5a, 0xe5a], /* THAI CHARACTER ANGKHANKHU (THAI ANGKHANKHU) */ + [0xe5b, 0xe5b], /* THAI CHARACTER KHOMUT (THAI KHOMUT) */ + [0xe5c, 0xe5c], + [0xe5d, 0xe5d], + [0xe5e, 0xe5e], + [0xe5f, 0xe5f], + [0xe60, 0xe60], + [0xe61, 0xe61], + [0xe62, 0xe62], + [0xe63, 0xe63], + [0xe64, 0xe64], + [0xe65, 0xe65], + [0xe66, 0xe66], + [0xe67, 0xe67], + [0xe68, 0xe68], + [0xe69, 0xe69], + [0xe6a, 0xe6a], + [0xe6b, 0xe6b], + [0xe6c, 0xe6c], + [0xe6d, 0xe6d], + [0xe6e, 0xe6e], + [0xe6f, 0xe6f], + [0xe70, 0xe70], + [0xe71, 0xe71], + [0xe72, 0xe72], + [0xe73, 0xe73], + [0xe74, 0xe74], + [0xe75, 0xe75], + [0xe76, 0xe76], + [0xe77, 0xe77], + [0xe78, 0xe78], + [0xe79, 0xe79], + [0xe7a, 0xe7a], + [0xe7b, 0xe7b], + [0xe7c, 0xe7c], + [0xe7d, 0xe7d], + [0xe7e, 0xe7e], + [0xe7f, 0xe7f], + [0xe80, 0xe80], + [0xe81, 0xe81], /* LAO LETTER KO */ + [0xe82, 0xe82], /* LAO LETTER KHO SUNG */ + [0xe83, 0xe83], + [0xe84, 0xe84], /* LAO LETTER KHO TAM */ + [0xe85, 0xe85], + [0xe86, 0xe86], + [0xe87, 0xe87], /* LAO LETTER NGO */ + [0xe88, 0xe88], /* LAO LETTER CO */ + [0xe89, 0xe89], + [0xe8a, 0xe8a], /* LAO LETTER SO TAM */ + [0xe8b, 0xe8b], + [0xe8c, 0xe8c], + [0xe8d, 0xe8d], /* LAO LETTER NYO */ + [0xe8e, 0xe8e], + [0xe8f, 0xe8f], + [0xe90, 0xe90], + [0xe91, 0xe91], + [0xe92, 0xe92], + [0xe93, 0xe93], + [0xe94, 0xe94], /* LAO LETTER DO */ + [0xe95, 0xe95], /* LAO LETTER TO */ + [0xe96, 0xe96], /* LAO LETTER THO SUNG */ + [0xe97, 0xe97], /* LAO LETTER THO TAM */ + [0xe98, 0xe98], + [0xe99, 0xe99], /* LAO LETTER NO */ + [0xe9a, 0xe9a], /* LAO LETTER BO */ + [0xe9b, 0xe9b], /* LAO LETTER PO */ + [0xe9c, 0xe9c], /* LAO LETTER PHO SUNG */ + [0xe9d, 0xe9d], /* LAO LETTER FO TAM */ + [0xe9e, 0xe9e], /* LAO LETTER PHO TAM */ + [0xe9f, 0xe9f], /* LAO LETTER FO SUNG */ + [0xea0, 0xea0], + [0xea1, 0xea1], /* LAO LETTER MO */ + [0xea2, 0xea2], /* LAO LETTER YO */ + [0xea3, 0xea3], /* LAO LETTER LO LING */ + [0xea4, 0xea4], + [0xea5, 0xea5], /* LAO LETTER LO LOOT */ + [0xea6, 0xea6], + [0xea7, 0xea7], /* LAO LETTER WO */ + [0xea8, 0xea8], + [0xea9, 0xea9], + [0xeaa, 0xeaa], /* LAO LETTER SO SUNG */ + [0xeab, 0xeab], /* LAO LETTER HO SUNG */ + [0xeac, 0xeac], + [0xead, 0xead], /* LAO LETTER O */ + [0xeae, 0xeae], /* LAO LETTER HO TAM */ + [0xeaf, 0xeaf], /* LAO ELLIPSIS */ + [0xeb0, 0xeb0], /* LAO VOWEL SIGN A */ + [0xeb1, 0xeb1], /* LAO VOWEL SIGN MAI KAN */ + [0xeb2, 0xeb2], /* LAO VOWEL SIGN AA */ + [0xeb3, 0xeb3], /* LAO VOWEL SIGN AM */ + [0xeb4, 0xeb4], /* LAO VOWEL SIGN I */ + [0xeb5, 0xeb5], /* LAO VOWEL SIGN II */ + [0xeb6, 0xeb6], /* LAO VOWEL SIGN Y */ + [0xeb7, 0xeb7], /* LAO VOWEL SIGN YY */ + [0xeb8, 0xeb8], /* LAO VOWEL SIGN U */ + [0xeb9, 0xeb9], /* LAO VOWEL SIGN UU */ + [0xeba, 0xeba], + [0xebb, 0xebb], /* LAO VOWEL SIGN MAI KON */ + [0xebc, 0xebc], /* LAO SEMIVOWEL SIGN LO */ + [0xebd, 0xebd], /* LAO SEMIVOWEL SIGN NYO */ + [0xebe, 0xebe], + [0xebf, 0xebf], + [0xec0, 0xec0], /* LAO VOWEL SIGN E */ + [0xec1, 0xec1], /* LAO VOWEL SIGN EI */ + [0xec2, 0xec2], /* LAO VOWEL SIGN O */ + [0xec3, 0xec3], /* LAO VOWEL SIGN AY */ + [0xec4, 0xec4], /* LAO VOWEL SIGN AI */ + [0xec5, 0xec5], + [0xec6, 0xec6], /* LAO KO LA */ + [0xec7, 0xec7], + [0xec8, 0xec8], /* LAO TONE MAI EK */ + [0xec9, 0xec9], /* LAO TONE MAI THO */ + [0xeca, 0xeca], /* LAO TONE MAI TI */ + [0xecb, 0xecb], /* LAO TONE MAI CATAWA */ + [0xecc, 0xecc], /* LAO CANCELLATION MARK */ + [0xecd, 0xecd], /* LAO NIGGAHITA */ + [0xece, 0xece], + [0xecf, 0xecf], + [0xed0, 0xed0], /* LAO DIGIT ZERO */ + [0xed1, 0xed1], /* LAO DIGIT ONE */ + [0xed2, 0xed2], /* LAO DIGIT TWO */ + [0xed3, 0xed3], /* LAO DIGIT THREE */ + [0xed4, 0xed4], /* LAO DIGIT FOUR */ + [0xed5, 0xed5], /* LAO DIGIT FIVE */ + [0xed6, 0xed6], /* LAO DIGIT SIX */ + [0xed7, 0xed7], /* LAO DIGIT SEVEN */ + [0xed8, 0xed8], /* LAO DIGIT EIGHT */ + [0xed9, 0xed9], /* LAO DIGIT NINE */ + [0xeda, 0xeda], + [0xedb, 0xedb], + [0xedc, 0xedc], /* LAO HO NO */ + [0xedd, 0xedd], /* LAO HO MO */ + [0xede, 0xede], /* LAO LETTER KHMU GO */ + [0xedf, 0xedf], /* LAO LETTER KHMU NYO */ + [0xee0, 0xee0], + [0xee1, 0xee1], + [0xee2, 0xee2], + [0xee3, 0xee3], + [0xee4, 0xee4], + [0xee5, 0xee5], + [0xee6, 0xee6], + [0xee7, 0xee7], + [0xee8, 0xee8], + [0xee9, 0xee9], + [0xeea, 0xeea], + [0xeeb, 0xeeb], + [0xeec, 0xeec], + [0xeed, 0xeed], + [0xeee, 0xeee], + [0xeef, 0xeef], + [0xef0, 0xef0], + [0xef1, 0xef1], + [0xef2, 0xef2], + [0xef3, 0xef3], + [0xef4, 0xef4], + [0xef5, 0xef5], + [0xef6, 0xef6], + [0xef7, 0xef7], + [0xef8, 0xef8], + [0xef9, 0xef9], + [0xefa, 0xefa], + [0xefb, 0xefb], + [0xefc, 0xefc], + [0xefd, 0xefd], + [0xefe, 0xefe], + [0xeff, 0xeff], + [0xf00, 0xf00], /* TIBETAN SYLLABLE OM */ + [0xf01, 0xf01], /* TIBETAN MARK GTER YIG MGO TRUNCATED A */ + [0xf02, 0xf02], /* TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA */ + [0xf03, 0xf03], /* TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA */ + [0xf04, 0xf04], /* TIBETAN MARK INITIAL YIG MGO MDUN MA (TIBETAN SINGLE ORNAMENT) */ + [0xf05, 0xf05], /* TIBETAN MARK CLOSING YIG MGO SGAB MA */ + [0xf06, 0xf06], /* TIBETAN MARK CARET YIG MGO PHUR SHAD MA */ + [0xf07, 0xf07], /* TIBETAN MARK YIG MGO TSHEG SHAD MA */ + [0xf08, 0xf08], /* TIBETAN MARK SBRUL SHAD (TIBETAN RGYANSHAD) */ + [0xf09, 0xf09], /* TIBETAN MARK BSKUR YIG MGO */ + [0xf0a, 0xf0a], /* TIBETAN MARK BKA- SHOG YIG MGO */ + [0xf0b, 0xf0b], /* TIBETAN MARK INTERSYLLABIC TSHEG (TIBETAN TSEG) */ + [0xf0c, 0xf0c], /* TIBETAN MARK DELIMITER TSHEG BSTAR */ + [0xf0d, 0xf0d], /* TIBETAN MARK SHAD (TIBETAN SHAD) */ + [0xf0e, 0xf0e], /* TIBETAN MARK NYIS SHAD (TIBETAN DOUBLE SHAD) */ + [0xf0f, 0xf0f], /* TIBETAN MARK TSHEG SHAD */ + [0xf10, 0xf10], /* TIBETAN MARK NYIS TSHEG SHAD */ + [0xf11, 0xf11], /* TIBETAN MARK RIN CHEN SPUNGS SHAD (TIBETAN RINCHANPHUNGSHAD) */ + [0xf12, 0xf12], /* TIBETAN MARK RGYA GRAM SHAD */ + [0xf13, 0xf13], /* TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN */ + [0xf14, 0xf14], /* TIBETAN MARK GTER TSHEG (TIBETAN COMMA) */ + [0xf15, 0xf15], /* TIBETAN LOGOTYPE SIGN CHAD RTAGS */ + [0xf16, 0xf16], /* TIBETAN LOGOTYPE SIGN LHAG RTAGS */ + [0xf17, 0xf17], /* TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS */ + [0xf18, 0xf18], /* TIBETAN ASTROLOGICAL SIGN -KHYUD PA */ + [0xf19, 0xf19], /* TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS */ + [0xf1a, 0xf1a], /* TIBETAN SIGN RDEL DKAR GCIG */ + [0xf1b, 0xf1b], /* TIBETAN SIGN RDEL DKAR GNYIS */ + [0xf1c, 0xf1c], /* TIBETAN SIGN RDEL DKAR GSUM */ + [0xf1d, 0xf1d], /* TIBETAN SIGN RDEL NAG GCIG */ + [0xf1e, 0xf1e], /* TIBETAN SIGN RDEL NAG GNYIS */ + [0xf1f, 0xf1f], /* TIBETAN SIGN RDEL DKAR RDEL NAG */ + [0xf20, 0xf20], /* TIBETAN DIGIT ZERO */ + [0xf21, 0xf21], /* TIBETAN DIGIT ONE */ + [0xf22, 0xf22], /* TIBETAN DIGIT TWO */ + [0xf23, 0xf23], /* TIBETAN DIGIT THREE */ + [0xf24, 0xf24], /* TIBETAN DIGIT FOUR */ + [0xf25, 0xf25], /* TIBETAN DIGIT FIVE */ + [0xf26, 0xf26], /* TIBETAN DIGIT SIX */ + [0xf27, 0xf27], /* TIBETAN DIGIT SEVEN */ + [0xf28, 0xf28], /* TIBETAN DIGIT EIGHT */ + [0xf29, 0xf29], /* TIBETAN DIGIT NINE */ + [0xf2a, 0xf2a], /* TIBETAN DIGIT HALF ONE */ + [0xf2b, 0xf2b], /* TIBETAN DIGIT HALF TWO */ + [0xf2c, 0xf2c], /* TIBETAN DIGIT HALF THREE */ + [0xf2d, 0xf2d], /* TIBETAN DIGIT HALF FOUR */ + [0xf2e, 0xf2e], /* TIBETAN DIGIT HALF FIVE */ + [0xf2f, 0xf2f], /* TIBETAN DIGIT HALF SIX */ + [0xf30, 0xf30], /* TIBETAN DIGIT HALF SEVEN */ + [0xf31, 0xf31], /* TIBETAN DIGIT HALF EIGHT */ + [0xf32, 0xf32], /* TIBETAN DIGIT HALF NINE */ + [0xf33, 0xf33], /* TIBETAN DIGIT HALF ZERO */ + [0xf34, 0xf34], /* TIBETAN MARK BSDUS RTAGS */ + [0xf35, 0xf35], /* TIBETAN MARK NGAS BZUNG NYI ZLA (TIBETAN HONORIFIC UNDER RING) */ + [0xf36, 0xf36], /* TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN */ + [0xf37, 0xf37], /* TIBETAN MARK NGAS BZUNG SGOR RTAGS (TIBETAN UNDER RING) */ + [0xf38, 0xf38], /* TIBETAN MARK CHE MGO */ + [0xf39, 0xf39], /* TIBETAN MARK TSA -PHRU (TIBETAN LENITION MARK) */ + [0xf3a, 0xf3a], /* TIBETAN MARK GUG RTAGS GYON */ + [0xf3b, 0xf3b], /* TIBETAN MARK GUG RTAGS GYAS */ + [0xf3c, 0xf3c], /* TIBETAN MARK ANG KHANG GYON (TIBETAN LEFT BRACE) */ + [0xf3d, 0xf3d], /* TIBETAN MARK ANG KHANG GYAS (TIBETAN RIGHT BRACE) */ + [0xf3e, 0xf3e], /* TIBETAN SIGN YAR TSHES */ + [0xf3f, 0xf3f], /* TIBETAN SIGN MAR TSHES */ + [0xf40, 0xf40], /* TIBETAN LETTER KA */ + [0xf41, 0xf41], /* TIBETAN LETTER KHA */ + [0xf42, 0xf42], /* TIBETAN LETTER GA */ + [0xf43, 0xf43], /* TIBETAN LETTER GHA */ + [0xf44, 0xf44], /* TIBETAN LETTER NGA */ + [0xf45, 0xf45], /* TIBETAN LETTER CA */ + [0xf46, 0xf46], /* TIBETAN LETTER CHA */ + [0xf47, 0xf47], /* TIBETAN LETTER JA */ + [0xf48, 0xf48], + [0xf49, 0xf49], /* TIBETAN LETTER NYA */ + [0xf4a, 0xf4a], /* TIBETAN LETTER TTA (TIBETAN LETTER REVERSED TA) */ + [0xf4b, 0xf4b], /* TIBETAN LETTER TTHA (TIBETAN LETTER REVERSED THA) */ + [0xf4c, 0xf4c], /* TIBETAN LETTER DDA (TIBETAN LETTER REVERSED DA) */ + [0xf4d, 0xf4d], /* TIBETAN LETTER DDHA */ + [0xf4e, 0xf4e], /* TIBETAN LETTER NNA (TIBETAN LETTER REVERSED NA) */ + [0xf4f, 0xf4f], /* TIBETAN LETTER TA */ + [0xf50, 0xf50], /* TIBETAN LETTER THA */ + [0xf51, 0xf51], /* TIBETAN LETTER DA */ + [0xf52, 0xf52], /* TIBETAN LETTER DHA */ + [0xf53, 0xf53], /* TIBETAN LETTER NA */ + [0xf54, 0xf54], /* TIBETAN LETTER PA */ + [0xf55, 0xf55], /* TIBETAN LETTER PHA */ + [0xf56, 0xf56], /* TIBETAN LETTER BA */ + [0xf57, 0xf57], /* TIBETAN LETTER BHA */ + [0xf58, 0xf58], /* TIBETAN LETTER MA */ + [0xf59, 0xf59], /* TIBETAN LETTER TSA */ + [0xf5a, 0xf5a], /* TIBETAN LETTER TSHA */ + [0xf5b, 0xf5b], /* TIBETAN LETTER DZA */ + [0xf5c, 0xf5c], /* TIBETAN LETTER DZHA */ + [0xf5d, 0xf5d], /* TIBETAN LETTER WA */ + [0xf5e, 0xf5e], /* TIBETAN LETTER ZHA */ + [0xf5f, 0xf5f], /* TIBETAN LETTER ZA */ + [0xf60, 0xf60], /* TIBETAN LETTER -A (TIBETAN LETTER AA) */ + [0xf61, 0xf61], /* TIBETAN LETTER YA */ + [0xf62, 0xf62], /* TIBETAN LETTER RA */ + [0xf63, 0xf63], /* TIBETAN LETTER LA */ + [0xf64, 0xf64], /* TIBETAN LETTER SHA */ + [0xf65, 0xf65], /* TIBETAN LETTER SSA (TIBETAN LETTER REVERSED SHA) */ + [0xf66, 0xf66], /* TIBETAN LETTER SA */ + [0xf67, 0xf67], /* TIBETAN LETTER HA */ + [0xf68, 0xf68], /* TIBETAN LETTER A */ + [0xf69, 0xf69], /* TIBETAN LETTER KSSA */ + [0xf6a, 0xf6a], /* TIBETAN LETTER FIXED-FORM RA */ + [0xf6b, 0xf6b], /* TIBETAN LETTER KKA */ + [0xf6c, 0xf6c], /* TIBETAN LETTER RRA */ + [0xf6d, 0xf6d], + [0xf6e, 0xf6e], + [0xf6f, 0xf6f], + [0xf70, 0xf70], + [0xf71, 0xf71], /* TIBETAN VOWEL SIGN AA */ + [0xf72, 0xf72], /* TIBETAN VOWEL SIGN I */ + [0xf73, 0xf73], /* TIBETAN VOWEL SIGN II */ + [0xf74, 0xf74], /* TIBETAN VOWEL SIGN U */ + [0xf75, 0xf75], /* TIBETAN VOWEL SIGN UU */ + [0xf76, 0xf76], /* TIBETAN VOWEL SIGN VOCALIC R */ + [0xf77, 0xf77], /* TIBETAN VOWEL SIGN VOCALIC RR */ + [0xf78, 0xf78], /* TIBETAN VOWEL SIGN VOCALIC L */ + [0xf79, 0xf79], /* TIBETAN VOWEL SIGN VOCALIC LL */ + [0xf7a, 0xf7a], /* TIBETAN VOWEL SIGN E */ + [0xf7b, 0xf7b], /* TIBETAN VOWEL SIGN EE (TIBETAN VOWEL SIGN AI) */ + [0xf7c, 0xf7c], /* TIBETAN VOWEL SIGN O */ + [0xf7d, 0xf7d], /* TIBETAN VOWEL SIGN OO (TIBETAN VOWEL SIGN AU) */ + [0xf7e, 0xf7e], /* TIBETAN SIGN RJES SU NGA RO (TIBETAN ANUSVARA) */ + [0xf7f, 0xf7f], /* TIBETAN SIGN RNAM BCAD (TIBETAN VISARGA) */ + [0xf80, 0xf80], /* TIBETAN VOWEL SIGN REVERSED I (TIBETAN VOWEL SIGN SHORT I) */ + [0xf81, 0xf81], /* TIBETAN VOWEL SIGN REVERSED II */ + [0xf82, 0xf82], /* TIBETAN SIGN NYI ZLA NAA DA (TIBETAN CANDRABINDU WITH ORNAMENT) */ + [0xf83, 0xf83], /* TIBETAN SIGN SNA LDAN (TIBETAN CANDRABINDU) */ + [0xf84, 0xf84], /* TIBETAN MARK HALANTA (TIBETAN VIRAMA) */ + [0xf85, 0xf85], /* TIBETAN MARK PALUTA (TIBETAN CHUCHENYIGE) */ + [0xf86, 0xf86], /* TIBETAN SIGN LCI RTAGS */ + [0xf87, 0xf87], /* TIBETAN SIGN YANG RTAGS */ + [0xf88, 0xf88], /* TIBETAN SIGN LCE TSA CAN */ + [0xf89, 0xf89], /* TIBETAN SIGN MCHU CAN */ + [0xf8a, 0xf8a], /* TIBETAN SIGN GRU CAN RGYINGS */ + [0xf8b, 0xf8b], /* TIBETAN SIGN GRU MED RGYINGS */ + [0xf8c, 0xf8c], /* TIBETAN SIGN INVERTED MCHU CAN */ + [0xf8d, 0xf8d], /* TIBETAN SUBJOINED SIGN LCE TSA CAN */ + [0xf8e, 0xf8e], /* TIBETAN SUBJOINED SIGN MCHU CAN */ + [0xf8f, 0xf8f], /* TIBETAN SUBJOINED SIGN INVERTED MCHU CAN */ + [0xf90, 0xf90], /* TIBETAN SUBJOINED LETTER KA */ + [0xf91, 0xf91], /* TIBETAN SUBJOINED LETTER KHA */ + [0xf92, 0xf92], /* TIBETAN SUBJOINED LETTER GA */ + [0xf93, 0xf93], /* TIBETAN SUBJOINED LETTER GHA */ + [0xf94, 0xf94], /* TIBETAN SUBJOINED LETTER NGA */ + [0xf95, 0xf95], /* TIBETAN SUBJOINED LETTER CA */ + [0xf96, 0xf96], /* TIBETAN SUBJOINED LETTER CHA */ + [0xf97, 0xf97], /* TIBETAN SUBJOINED LETTER JA */ + [0xf98, 0xf98], + [0xf99, 0xf99], /* TIBETAN SUBJOINED LETTER NYA */ + [0xf9a, 0xf9a], /* TIBETAN SUBJOINED LETTER TTA */ + [0xf9b, 0xf9b], /* TIBETAN SUBJOINED LETTER TTHA */ + [0xf9c, 0xf9c], /* TIBETAN SUBJOINED LETTER DDA */ + [0xf9d, 0xf9d], /* TIBETAN SUBJOINED LETTER DDHA */ + [0xf9e, 0xf9e], /* TIBETAN SUBJOINED LETTER NNA */ + [0xf9f, 0xf9f], /* TIBETAN SUBJOINED LETTER TA */ + [0xfa0, 0xfa0], /* TIBETAN SUBJOINED LETTER THA */ + [0xfa1, 0xfa1], /* TIBETAN SUBJOINED LETTER DA */ + [0xfa2, 0xfa2], /* TIBETAN SUBJOINED LETTER DHA */ + [0xfa3, 0xfa3], /* TIBETAN SUBJOINED LETTER NA */ + [0xfa4, 0xfa4], /* TIBETAN SUBJOINED LETTER PA */ + [0xfa5, 0xfa5], /* TIBETAN SUBJOINED LETTER PHA */ + [0xfa6, 0xfa6], /* TIBETAN SUBJOINED LETTER BA */ + [0xfa7, 0xfa7], /* TIBETAN SUBJOINED LETTER BHA */ + [0xfa8, 0xfa8], /* TIBETAN SUBJOINED LETTER MA */ + [0xfa9, 0xfa9], /* TIBETAN SUBJOINED LETTER TSA */ + [0xfaa, 0xfaa], /* TIBETAN SUBJOINED LETTER TSHA */ + [0xfab, 0xfab], /* TIBETAN SUBJOINED LETTER DZA */ + [0xfac, 0xfac], /* TIBETAN SUBJOINED LETTER DZHA */ + [0xfad, 0xfad], /* TIBETAN SUBJOINED LETTER WA */ + [0xfae, 0xfae], /* TIBETAN SUBJOINED LETTER ZHA */ + [0xfaf, 0xfaf], /* TIBETAN SUBJOINED LETTER ZA */ + [0xfb0, 0xfb0], /* TIBETAN SUBJOINED LETTER -A */ + [0xfb1, 0xfb1], /* TIBETAN SUBJOINED LETTER YA */ + [0xfb2, 0xfb2], /* TIBETAN SUBJOINED LETTER RA */ + [0xfb3, 0xfb3], /* TIBETAN SUBJOINED LETTER LA */ + [0xfb4, 0xfb4], /* TIBETAN SUBJOINED LETTER SHA */ + [0xfb5, 0xfb5], /* TIBETAN SUBJOINED LETTER SSA */ + [0xfb6, 0xfb6], /* TIBETAN SUBJOINED LETTER SA */ + [0xfb7, 0xfb7], /* TIBETAN SUBJOINED LETTER HA */ + [0xfb8, 0xfb8], /* TIBETAN SUBJOINED LETTER A */ + [0xfb9, 0xfb9], /* TIBETAN SUBJOINED LETTER KSSA */ + [0xfba, 0xfba], /* TIBETAN SUBJOINED LETTER FIXED-FORM WA */ + [0xfbb, 0xfbb], /* TIBETAN SUBJOINED LETTER FIXED-FORM YA */ + [0xfbc, 0xfbc], /* TIBETAN SUBJOINED LETTER FIXED-FORM RA */ + [0xfbd, 0xfbd], + [0xfbe, 0xfbe], /* TIBETAN KU RU KHA */ + [0xfbf, 0xfbf], /* TIBETAN KU RU KHA BZHI MIG CAN */ + [0xfc0, 0xfc0], /* TIBETAN CANTILLATION SIGN HEAVY BEAT */ + [0xfc1, 0xfc1], /* TIBETAN CANTILLATION SIGN LIGHT BEAT */ + [0xfc2, 0xfc2], /* TIBETAN CANTILLATION SIGN CANG TE-U */ + [0xfc3, 0xfc3], /* TIBETAN CANTILLATION SIGN SBUB -CHAL */ + [0xfc4, 0xfc4], /* TIBETAN SYMBOL DRIL BU */ + [0xfc5, 0xfc5], /* TIBETAN SYMBOL RDO RJE */ + [0xfc6, 0xfc6], /* TIBETAN SYMBOL PADMA GDAN */ + [0xfc7, 0xfc7], /* TIBETAN SYMBOL RDO RJE RGYA GRAM */ + [0xfc8, 0xfc8], /* TIBETAN SYMBOL PHUR PA */ + [0xfc9, 0xfc9], /* TIBETAN SYMBOL NOR BU */ + [0xfca, 0xfca], /* TIBETAN SYMBOL NOR BU NYIS -KHYIL */ + [0xfcb, 0xfcb], /* TIBETAN SYMBOL NOR BU GSUM -KHYIL */ + [0xfcc, 0xfcc], /* TIBETAN SYMBOL NOR BU BZHI -KHYIL */ + [0xfcd, 0xfcd], + [0xfce, 0xfce], /* TIBETAN SIGN RDEL NAG RDEL DKAR */ + [0xfcf, 0xfcf], /* TIBETAN SIGN RDEL NAG GSUM */ + [0xfd0, 0xfd0], /* TIBETAN MARK BSKA- SHOG GI MGO RGYAN */ + [0xfd1, 0xfd1], /* TIBETAN MARK MNYAM YIG GI MGO RGYAN */ + [0xfd2, 0xfd2], /* TIBETAN MARK NYIS TSHEG */ + [0xfd3, 0xfd3], /* TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA */ + [0xfd4, 0xfd4], /* TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA */ + [0xfd5, 0xfd5], /* RIGHT-FACING SVASTI SIGN */ + [0xfd6, 0xfd6], /* LEFT-FACING SVASTI SIGN */ + [0xfd7, 0xfd7], /* RIGHT-FACING SVASTI SIGN WITH DOTS */ + [0xfd8, 0xfd8], /* LEFT-FACING SVASTI SIGN WITH DOTS */ + [0xfd9, 0xfd9], /* TIBETAN MARK LEADING MCHAN RTAGS */ + [0xfda, 0xfda], /* TIBETAN MARK TRAILING MCHAN RTAGS */ + [0xfdb, 0xfdb], + [0xfdc, 0xfdc], + [0xfdd, 0xfdd], + [0xfde, 0xfde], + [0xfdf, 0xfdf], + [0xfe0, 0xfe0], + [0xfe1, 0xfe1], + [0xfe2, 0xfe2], + [0xfe3, 0xfe3], + [0xfe4, 0xfe4], + [0xfe5, 0xfe5], + [0xfe6, 0xfe6], + [0xfe7, 0xfe7], + [0xfe8, 0xfe8], + [0xfe9, 0xfe9], + [0xfea, 0xfea], + [0xfeb, 0xfeb], + [0xfec, 0xfec], + [0xfed, 0xfed], + [0xfee, 0xfee], + [0xfef, 0xfef], + [0xff0, 0xff0], + [0xff1, 0xff1], + [0xff2, 0xff2], + [0xff3, 0xff3], + [0xff4, 0xff4], + [0xff5, 0xff5], + [0xff6, 0xff6], + [0xff7, 0xff7], + [0xff8, 0xff8], + [0xff9, 0xff9], + [0xffa, 0xffa], + [0xffb, 0xffb], + [0xffc, 0xffc], + [0xffd, 0xffd], + [0xffe, 0xffe], + [0xfff, 0xfff], + [0x1000, 0x1000], /* MYANMAR LETTER KA */ + [0x1001, 0x1001], /* MYANMAR LETTER KHA */ + [0x1002, 0x1002], /* MYANMAR LETTER GA */ + [0x1003, 0x1003], /* MYANMAR LETTER GHA */ + [0x1004, 0x1004], /* MYANMAR LETTER NGA */ + [0x1005, 0x1005], /* MYANMAR LETTER CA */ + [0x1006, 0x1006], /* MYANMAR LETTER CHA */ + [0x1007, 0x1007], /* MYANMAR LETTER JA */ + [0x1008, 0x1008], /* MYANMAR LETTER JHA */ + [0x1009, 0x1009], /* MYANMAR LETTER NYA */ + [0x100a, 0x100a], /* MYANMAR LETTER NNYA */ + [0x100b, 0x100b], /* MYANMAR LETTER TTA */ + [0x100c, 0x100c], /* MYANMAR LETTER TTHA */ + [0x100d, 0x100d], /* MYANMAR LETTER DDA */ + [0x100e, 0x100e], /* MYANMAR LETTER DDHA */ + [0x100f, 0x100f], /* MYANMAR LETTER NNA */ + [0x1010, 0x1010], /* MYANMAR LETTER TA */ + [0x1011, 0x1011], /* MYANMAR LETTER THA */ + [0x1012, 0x1012], /* MYANMAR LETTER DA */ + [0x1013, 0x1013], /* MYANMAR LETTER DHA */ + [0x1014, 0x1014], /* MYANMAR LETTER NA */ + [0x1015, 0x1015], /* MYANMAR LETTER PA */ + [0x1016, 0x1016], /* MYANMAR LETTER PHA */ + [0x1017, 0x1017], /* MYANMAR LETTER BA */ + [0x1018, 0x1018], /* MYANMAR LETTER BHA */ + [0x1019, 0x1019], /* MYANMAR LETTER MA */ + [0x101a, 0x101a], /* MYANMAR LETTER YA */ + [0x101b, 0x101b], /* MYANMAR LETTER RA */ + [0x101c, 0x101c], /* MYANMAR LETTER LA */ + [0x101d, 0x101d], /* MYANMAR LETTER WA */ + [0x101e, 0x101e], /* MYANMAR LETTER SA */ + [0x101f, 0x101f], /* MYANMAR LETTER HA */ + [0x1020, 0x1020], /* MYANMAR LETTER LLA */ + [0x1021, 0x1021], /* MYANMAR LETTER A */ + [0x1022, 0x1022], /* MYANMAR LETTER SHAN A */ + [0x1023, 0x1023], /* MYANMAR LETTER I */ + [0x1024, 0x1024], /* MYANMAR LETTER II */ + [0x1025, 0x1025], /* MYANMAR LETTER U */ + [0x1026, 0x1026], /* MYANMAR LETTER UU */ + [0x1027, 0x1027], /* MYANMAR LETTER E */ + [0x1028, 0x1028], /* MYANMAR LETTER MON E */ + [0x1029, 0x1029], /* MYANMAR LETTER O */ + [0x102a, 0x102a], /* MYANMAR LETTER AU */ + [0x102b, 0x102b], /* MYANMAR VOWEL SIGN TALL AA */ + [0x102c, 0x102c], /* MYANMAR VOWEL SIGN AA */ + [0x102d, 0x102d], /* MYANMAR VOWEL SIGN I */ + [0x102e, 0x102e], /* MYANMAR VOWEL SIGN II */ + [0x102f, 0x102f], /* MYANMAR VOWEL SIGN U */ + [0x1030, 0x1030], /* MYANMAR VOWEL SIGN UU */ + [0x1031, 0x1031], /* MYANMAR VOWEL SIGN E */ + [0x1032, 0x1032], /* MYANMAR VOWEL SIGN AI */ + [0x1033, 0x1033], /* MYANMAR VOWEL SIGN MON II */ + [0x1034, 0x1034], /* MYANMAR VOWEL SIGN MON O */ + [0x1035, 0x1035], /* MYANMAR VOWEL SIGN E ABOVE */ + [0x1036, 0x1036], /* MYANMAR SIGN ANUSVARA */ + [0x1037, 0x1037], /* MYANMAR SIGN DOT BELOW */ + [0x1038, 0x1038], /* MYANMAR SIGN VISARGA */ + [0x1039, 0x1039], /* MYANMAR SIGN VIRAMA */ + [0x103a, 0x103a], /* MYANMAR SIGN ASAT */ + [0x103b, 0x103b], /* MYANMAR CONSONANT SIGN MEDIAL YA */ + [0x103c, 0x103c], /* MYANMAR CONSONANT SIGN MEDIAL RA */ + [0x103d, 0x103d], /* MYANMAR CONSONANT SIGN MEDIAL WA */ + [0x103e, 0x103e], /* MYANMAR CONSONANT SIGN MEDIAL HA */ + [0x103f, 0x103f], /* MYANMAR LETTER GREAT SA */ + [0x1040, 0x1040], /* MYANMAR DIGIT ZERO */ + [0x1041, 0x1041], /* MYANMAR DIGIT ONE */ + [0x1042, 0x1042], /* MYANMAR DIGIT TWO */ + [0x1043, 0x1043], /* MYANMAR DIGIT THREE */ + [0x1044, 0x1044], /* MYANMAR DIGIT FOUR */ + [0x1045, 0x1045], /* MYANMAR DIGIT FIVE */ + [0x1046, 0x1046], /* MYANMAR DIGIT SIX */ + [0x1047, 0x1047], /* MYANMAR DIGIT SEVEN */ + [0x1048, 0x1048], /* MYANMAR DIGIT EIGHT */ + [0x1049, 0x1049], /* MYANMAR DIGIT NINE */ + [0x104a, 0x104a], /* MYANMAR SIGN LITTLE SECTION */ + [0x104b, 0x104b], /* MYANMAR SIGN SECTION */ + [0x104c, 0x104c], /* MYANMAR SYMBOL LOCATIVE */ + [0x104d, 0x104d], /* MYANMAR SYMBOL COMPLETED */ + [0x104e, 0x104e], /* MYANMAR SYMBOL AFOREMENTIONED */ + [0x104f, 0x104f], /* MYANMAR SYMBOL GENITIVE */ + [0x1050, 0x1050], /* MYANMAR LETTER SHA */ + [0x1051, 0x1051], /* MYANMAR LETTER SSA */ + [0x1052, 0x1052], /* MYANMAR LETTER VOCALIC R */ + [0x1053, 0x1053], /* MYANMAR LETTER VOCALIC RR */ + [0x1054, 0x1054], /* MYANMAR LETTER VOCALIC L */ + [0x1055, 0x1055], /* MYANMAR LETTER VOCALIC LL */ + [0x1056, 0x1056], /* MYANMAR VOWEL SIGN VOCALIC R */ + [0x1057, 0x1057], /* MYANMAR VOWEL SIGN VOCALIC RR */ + [0x1058, 0x1058], /* MYANMAR VOWEL SIGN VOCALIC L */ + [0x1059, 0x1059], /* MYANMAR VOWEL SIGN VOCALIC LL */ + [0x105a, 0x105a], /* MYANMAR LETTER MON NGA */ + [0x105b, 0x105b], /* MYANMAR LETTER MON JHA */ + [0x105c, 0x105c], /* MYANMAR LETTER MON BBA */ + [0x105d, 0x105d], /* MYANMAR LETTER MON BBE */ + [0x105e, 0x105e], /* MYANMAR CONSONANT SIGN MON MEDIAL NA */ + [0x105f, 0x105f], /* MYANMAR CONSONANT SIGN MON MEDIAL MA */ + [0x1060, 0x1060], /* MYANMAR CONSONANT SIGN MON MEDIAL LA */ + [0x1061, 0x1061], /* MYANMAR LETTER SGAW KAREN SHA */ + [0x1062, 0x1062], /* MYANMAR VOWEL SIGN SGAW KAREN EU */ + [0x1063, 0x1063], /* MYANMAR TONE MARK SGAW KAREN HATHI */ + [0x1064, 0x1064], /* MYANMAR TONE MARK SGAW KAREN KE PHO */ + [0x1065, 0x1065], /* MYANMAR LETTER WESTERN PWO KAREN THA */ + [0x1066, 0x1066], /* MYANMAR LETTER WESTERN PWO KAREN PWA */ + [0x1067, 0x1067], /* MYANMAR VOWEL SIGN WESTERN PWO KAREN EU */ + [0x1068, 0x1068], /* MYANMAR VOWEL SIGN WESTERN PWO KAREN UE */ + [0x1069, 0x1069], /* MYANMAR SIGN WESTERN PWO KAREN TONE-1 */ + [0x106a, 0x106a], /* MYANMAR SIGN WESTERN PWO KAREN TONE-2 */ + [0x106b, 0x106b], /* MYANMAR SIGN WESTERN PWO KAREN TONE-3 */ + [0x106c, 0x106c], /* MYANMAR SIGN WESTERN PWO KAREN TONE-4 */ + [0x106d, 0x106d], /* MYANMAR SIGN WESTERN PWO KAREN TONE-5 */ + [0x106e, 0x106e], /* MYANMAR LETTER EASTERN PWO KAREN NNA */ + [0x106f, 0x106f], /* MYANMAR LETTER EASTERN PWO KAREN YWA */ + [0x1070, 0x1070], /* MYANMAR LETTER EASTERN PWO KAREN GHWA */ + [0x1071, 0x1071], /* MYANMAR VOWEL SIGN GEBA KAREN I */ + [0x1072, 0x1072], /* MYANMAR VOWEL SIGN KAYAH OE */ + [0x1073, 0x1073], /* MYANMAR VOWEL SIGN KAYAH U */ + [0x1074, 0x1074], /* MYANMAR VOWEL SIGN KAYAH EE */ + [0x1075, 0x1075], /* MYANMAR LETTER SHAN KA */ + [0x1076, 0x1076], /* MYANMAR LETTER SHAN KHA */ + [0x1077, 0x1077], /* MYANMAR LETTER SHAN GA */ + [0x1078, 0x1078], /* MYANMAR LETTER SHAN CA */ + [0x1079, 0x1079], /* MYANMAR LETTER SHAN ZA */ + [0x107a, 0x107a], /* MYANMAR LETTER SHAN NYA */ + [0x107b, 0x107b], /* MYANMAR LETTER SHAN DA */ + [0x107c, 0x107c], /* MYANMAR LETTER SHAN NA */ + [0x107d, 0x107d], /* MYANMAR LETTER SHAN PHA */ + [0x107e, 0x107e], /* MYANMAR LETTER SHAN FA */ + [0x107f, 0x107f], /* MYANMAR LETTER SHAN BA */ + [0x1080, 0x1080], /* MYANMAR LETTER SHAN THA */ + [0x1081, 0x1081], /* MYANMAR LETTER SHAN HA */ + [0x1082, 0x1082], /* MYANMAR CONSONANT SIGN SHAN MEDIAL WA */ + [0x1083, 0x1083], /* MYANMAR VOWEL SIGN SHAN AA */ + [0x1084, 0x1084], /* MYANMAR VOWEL SIGN SHAN E */ + [0x1085, 0x1085], /* MYANMAR VOWEL SIGN SHAN E ABOVE */ + [0x1086, 0x1086], /* MYANMAR VOWEL SIGN SHAN FINAL Y */ + [0x1087, 0x1087], /* MYANMAR SIGN SHAN TONE-2 */ + [0x1088, 0x1088], /* MYANMAR SIGN SHAN TONE-3 */ + [0x1089, 0x1089], /* MYANMAR SIGN SHAN TONE-5 */ + [0x108a, 0x108a], /* MYANMAR SIGN SHAN TONE-6 */ + [0x108b, 0x108b], /* MYANMAR SIGN SHAN COUNCIL TONE-2 */ + [0x108c, 0x108c], /* MYANMAR SIGN SHAN COUNCIL TONE-3 */ + [0x108d, 0x108d], /* MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE */ + [0x108e, 0x108e], /* MYANMAR LETTER RUMAI PALAUNG FA */ + [0x108f, 0x108f], /* MYANMAR SIGN RUMAI PALAUNG TONE-5 */ + [0x1090, 0x1090], /* MYANMAR SHAN DIGIT ZERO */ + [0x1091, 0x1091], /* MYANMAR SHAN DIGIT ONE */ + [0x1092, 0x1092], /* MYANMAR SHAN DIGIT TWO */ + [0x1093, 0x1093], /* MYANMAR SHAN DIGIT THREE */ + [0x1094, 0x1094], /* MYANMAR SHAN DIGIT FOUR */ + [0x1095, 0x1095], /* MYANMAR SHAN DIGIT FIVE */ + [0x1096, 0x1096], /* MYANMAR SHAN DIGIT SIX */ + [0x1097, 0x1097], /* MYANMAR SHAN DIGIT SEVEN */ + [0x1098, 0x1098], /* MYANMAR SHAN DIGIT EIGHT */ + [0x1099, 0x1099], /* MYANMAR SHAN DIGIT NINE */ + [0x109a, 0x109a], /* MYANMAR SIGN KHAMTI TONE-1 */ + [0x109b, 0x109b], /* MYANMAR SIGN KHAMTI TONE-3 */ + [0x109c, 0x109c], /* MYANMAR VOWEL SIGN AITON A */ + [0x109d, 0x109d], /* MYANMAR VOWEL SIGN AITON AI */ + [0x109e, 0x109e], /* MYANMAR SYMBOL SHAN ONE */ + [0x109f, 0x109f], /* MYANMAR SYMBOL SHAN EXCLAMATION */ + [0x10a0, 0x2d00], /* GEORGIAN CAPITAL LETTER AN */ + [0x10a1, 0x2d01], /* GEORGIAN CAPITAL LETTER BAN */ + [0x10a2, 0x2d02], /* GEORGIAN CAPITAL LETTER GAN */ + [0x10a3, 0x2d03], /* GEORGIAN CAPITAL LETTER DON */ + [0x10a4, 0x2d04], /* GEORGIAN CAPITAL LETTER EN */ + [0x10a5, 0x2d05], /* GEORGIAN CAPITAL LETTER VIN */ + [0x10a6, 0x2d06], /* GEORGIAN CAPITAL LETTER ZEN */ + [0x10a7, 0x2d07], /* GEORGIAN CAPITAL LETTER TAN */ + [0x10a8, 0x2d08], /* GEORGIAN CAPITAL LETTER IN */ + [0x10a9, 0x2d09], /* GEORGIAN CAPITAL LETTER KAN */ + [0x10aa, 0x2d0a], /* GEORGIAN CAPITAL LETTER LAS */ + [0x10ab, 0x2d0b], /* GEORGIAN CAPITAL LETTER MAN */ + [0x10ac, 0x2d0c], /* GEORGIAN CAPITAL LETTER NAR */ + [0x10ad, 0x2d0d], /* GEORGIAN CAPITAL LETTER ON */ + [0x10ae, 0x2d0e], /* GEORGIAN CAPITAL LETTER PAR */ + [0x10af, 0x2d0f], /* GEORGIAN CAPITAL LETTER ZHAR */ + [0x10b0, 0x2d10], /* GEORGIAN CAPITAL LETTER RAE */ + [0x10b1, 0x2d11], /* GEORGIAN CAPITAL LETTER SAN */ + [0x10b2, 0x2d12], /* GEORGIAN CAPITAL LETTER TAR */ + [0x10b3, 0x2d13], /* GEORGIAN CAPITAL LETTER UN */ + [0x10b4, 0x2d14], /* GEORGIAN CAPITAL LETTER PHAR */ + [0x10b5, 0x2d15], /* GEORGIAN CAPITAL LETTER KHAR */ + [0x10b6, 0x2d16], /* GEORGIAN CAPITAL LETTER GHAN */ + [0x10b7, 0x2d17], /* GEORGIAN CAPITAL LETTER QAR */ + [0x10b8, 0x2d18], /* GEORGIAN CAPITAL LETTER SHIN */ + [0x10b9, 0x2d19], /* GEORGIAN CAPITAL LETTER CHIN */ + [0x10ba, 0x2d1a], /* GEORGIAN CAPITAL LETTER CAN */ + [0x10bb, 0x2d1b], /* GEORGIAN CAPITAL LETTER JIL */ + [0x10bc, 0x2d1c], /* GEORGIAN CAPITAL LETTER CIL */ + [0x10bd, 0x2d1d], /* GEORGIAN CAPITAL LETTER CHAR */ + [0x10be, 0x2d1e], /* GEORGIAN CAPITAL LETTER XAN */ + [0x10bf, 0x2d1f], /* GEORGIAN CAPITAL LETTER JHAN */ + [0x10c0, 0x2d20], /* GEORGIAN CAPITAL LETTER HAE */ + [0x10c1, 0x2d21], /* GEORGIAN CAPITAL LETTER HE */ + [0x10c2, 0x2d22], /* GEORGIAN CAPITAL LETTER HIE */ + [0x10c3, 0x2d23], /* GEORGIAN CAPITAL LETTER WE */ + [0x10c4, 0x2d24], /* GEORGIAN CAPITAL LETTER HAR */ + [0x10c5, 0x2d25], /* GEORGIAN CAPITAL LETTER HOE */ + [0x10c6, 0x10c6], + [0x10c7, 0x2d27], /* GEORGIAN CAPITAL LETTER YN */ + [0x10c8, 0x10c8], + [0x10c9, 0x10c9], + [0x10ca, 0x10ca], + [0x10cb, 0x10cb], + [0x10cc, 0x10cc], + [0x10cd, 0x2d2d], /* GEORGIAN CAPITAL LETTER AEN */ + [0x10ce, 0x10ce], + [0x10cf, 0x10cf], + [0x10d0, 0x10d0], /* GEORGIAN LETTER AN (GEORGIAN SMALL LETTER AN) */ + [0x10d1, 0x10d1], /* GEORGIAN LETTER BAN (GEORGIAN SMALL LETTER BAN) */ + [0x10d2, 0x10d2], /* GEORGIAN LETTER GAN (GEORGIAN SMALL LETTER GAN) */ + [0x10d3, 0x10d3], /* GEORGIAN LETTER DON (GEORGIAN SMALL LETTER DON) */ + [0x10d4, 0x10d4], /* GEORGIAN LETTER EN (GEORGIAN SMALL LETTER EN) */ + [0x10d5, 0x10d5], /* GEORGIAN LETTER VIN (GEORGIAN SMALL LETTER VIN) */ + [0x10d6, 0x10d6], /* GEORGIAN LETTER ZEN (GEORGIAN SMALL LETTER ZEN) */ + [0x10d7, 0x10d7], /* GEORGIAN LETTER TAN (GEORGIAN SMALL LETTER TAN) */ + [0x10d8, 0x10d8], /* GEORGIAN LETTER IN (GEORGIAN SMALL LETTER IN) */ + [0x10d9, 0x10d9], /* GEORGIAN LETTER KAN (GEORGIAN SMALL LETTER KAN) */ + [0x10da, 0x10da], /* GEORGIAN LETTER LAS (GEORGIAN SMALL LETTER LAS) */ + [0x10db, 0x10db], /* GEORGIAN LETTER MAN (GEORGIAN SMALL LETTER MAN) */ + [0x10dc, 0x10dc], /* GEORGIAN LETTER NAR (GEORGIAN SMALL LETTER NAR) */ + [0x10dd, 0x10dd], /* GEORGIAN LETTER ON (GEORGIAN SMALL LETTER ON) */ + [0x10de, 0x10de], /* GEORGIAN LETTER PAR (GEORGIAN SMALL LETTER PAR) */ + [0x10df, 0x10df], /* GEORGIAN LETTER ZHAR (GEORGIAN SMALL LETTER ZHAR) */ + [0x10e0, 0x10e0], /* GEORGIAN LETTER RAE (GEORGIAN SMALL LETTER RAE) */ + [0x10e1, 0x10e1], /* GEORGIAN LETTER SAN (GEORGIAN SMALL LETTER SAN) */ + [0x10e2, 0x10e2], /* GEORGIAN LETTER TAR (GEORGIAN SMALL LETTER TAR) */ + [0x10e3, 0x10e3], /* GEORGIAN LETTER UN (GEORGIAN SMALL LETTER UN) */ + [0x10e4, 0x10e4], /* GEORGIAN LETTER PHAR (GEORGIAN SMALL LETTER PHAR) */ + [0x10e5, 0x10e5], /* GEORGIAN LETTER KHAR (GEORGIAN SMALL LETTER KHAR) */ + [0x10e6, 0x10e6], /* GEORGIAN LETTER GHAN (GEORGIAN SMALL LETTER GHAN) */ + [0x10e7, 0x10e7], /* GEORGIAN LETTER QAR (GEORGIAN SMALL LETTER QAR) */ + [0x10e8, 0x10e8], /* GEORGIAN LETTER SHIN (GEORGIAN SMALL LETTER SHIN) */ + [0x10e9, 0x10e9], /* GEORGIAN LETTER CHIN (GEORGIAN SMALL LETTER CHIN) */ + [0x10ea, 0x10ea], /* GEORGIAN LETTER CAN (GEORGIAN SMALL LETTER CAN) */ + [0x10eb, 0x10eb], /* GEORGIAN LETTER JIL (GEORGIAN SMALL LETTER JIL) */ + [0x10ec, 0x10ec], /* GEORGIAN LETTER CIL (GEORGIAN SMALL LETTER CIL) */ + [0x10ed, 0x10ed], /* GEORGIAN LETTER CHAR (GEORGIAN SMALL LETTER CHAR) */ + [0x10ee, 0x10ee], /* GEORGIAN LETTER XAN (GEORGIAN SMALL LETTER XAN) */ + [0x10ef, 0x10ef], /* GEORGIAN LETTER JHAN (GEORGIAN SMALL LETTER JHAN) */ + [0x10f0, 0x10f0], /* GEORGIAN LETTER HAE (GEORGIAN SMALL LETTER HAE) */ + [0x10f1, 0x10f1], /* GEORGIAN LETTER HE (GEORGIAN SMALL LETTER HE) */ + [0x10f2, 0x10f2], /* GEORGIAN LETTER HIE (GEORGIAN SMALL LETTER HIE) */ + [0x10f3, 0x10f3], /* GEORGIAN LETTER WE (GEORGIAN SMALL LETTER WE) */ + [0x10f4, 0x10f4], /* GEORGIAN LETTER HAR (GEORGIAN SMALL LETTER HAR) */ + [0x10f5, 0x10f5], /* GEORGIAN LETTER HOE (GEORGIAN SMALL LETTER HOE) */ + [0x10f6, 0x10f6], /* GEORGIAN LETTER FI (GEORGIAN SMALL LETTER FI) */ + [0x10f7, 0x10f7], /* GEORGIAN LETTER YN */ + [0x10f8, 0x10f8], /* GEORGIAN LETTER ELIFI */ + [0x10f9, 0x10f9], /* GEORGIAN LETTER TURNED GAN */ + [0x10fa, 0x10fa], /* GEORGIAN LETTER AIN */ + [0x10fb, 0x10fb], /* GEORGIAN PARAGRAPH SEPARATOR */ + [0x10fc, 0x10fc], /* MODIFIER LETTER GEORGIAN NAR */ + [0x10fd, 0x10fd], /* GEORGIAN LETTER AEN */ + [0x10fe, 0x10fe], /* GEORGIAN LETTER HARD SIGN */ + [0x10ff, 0x10ff], /* GEORGIAN LETTER LABIAL SIGN */ + [0x1100, 0x1100], /* HANGUL CHOSEONG KIYEOK */ + [0x1101, 0x1101], /* HANGUL CHOSEONG SSANGKIYEOK */ + [0x1102, 0x1102], /* HANGUL CHOSEONG NIEUN */ + [0x1103, 0x1103], /* HANGUL CHOSEONG TIKEUT */ + [0x1104, 0x1104], /* HANGUL CHOSEONG SSANGTIKEUT */ + [0x1105, 0x1105], /* HANGUL CHOSEONG RIEUL */ + [0x1106, 0x1106], /* HANGUL CHOSEONG MIEUM */ + [0x1107, 0x1107], /* HANGUL CHOSEONG PIEUP */ + [0x1108, 0x1108], /* HANGUL CHOSEONG SSANGPIEUP */ + [0x1109, 0x1109], /* HANGUL CHOSEONG SIOS */ + [0x110a, 0x110a], /* HANGUL CHOSEONG SSANGSIOS */ + [0x110b, 0x110b], /* HANGUL CHOSEONG IEUNG */ + [0x110c, 0x110c], /* HANGUL CHOSEONG CIEUC */ + [0x110d, 0x110d], /* HANGUL CHOSEONG SSANGCIEUC */ + [0x110e, 0x110e], /* HANGUL CHOSEONG CHIEUCH */ + [0x110f, 0x110f], /* HANGUL CHOSEONG KHIEUKH */ + [0x1110, 0x1110], /* HANGUL CHOSEONG THIEUTH */ + [0x1111, 0x1111], /* HANGUL CHOSEONG PHIEUPH */ + [0x1112, 0x1112], /* HANGUL CHOSEONG HIEUH */ + [0x1113, 0x1113], /* HANGUL CHOSEONG NIEUN-KIYEOK */ + [0x1114, 0x1114], /* HANGUL CHOSEONG SSANGNIEUN */ + [0x1115, 0x1115], /* HANGUL CHOSEONG NIEUN-TIKEUT */ + [0x1116, 0x1116], /* HANGUL CHOSEONG NIEUN-PIEUP */ + [0x1117, 0x1117], /* HANGUL CHOSEONG TIKEUT-KIYEOK */ + [0x1118, 0x1118], /* HANGUL CHOSEONG RIEUL-NIEUN */ + [0x1119, 0x1119], /* HANGUL CHOSEONG SSANGRIEUL */ + [0x111a, 0x111a], /* HANGUL CHOSEONG RIEUL-HIEUH */ + [0x111b, 0x111b], /* HANGUL CHOSEONG KAPYEOUNRIEUL */ + [0x111c, 0x111c], /* HANGUL CHOSEONG MIEUM-PIEUP */ + [0x111d, 0x111d], /* HANGUL CHOSEONG KAPYEOUNMIEUM */ + [0x111e, 0x111e], /* HANGUL CHOSEONG PIEUP-KIYEOK */ + [0x111f, 0x111f], /* HANGUL CHOSEONG PIEUP-NIEUN */ + [0x1120, 0x1120], /* HANGUL CHOSEONG PIEUP-TIKEUT */ + [0x1121, 0x1121], /* HANGUL CHOSEONG PIEUP-SIOS */ + [0x1122, 0x1122], /* HANGUL CHOSEONG PIEUP-SIOS-KIYEOK */ + [0x1123, 0x1123], /* HANGUL CHOSEONG PIEUP-SIOS-TIKEUT */ + [0x1124, 0x1124], /* HANGUL CHOSEONG PIEUP-SIOS-PIEUP */ + [0x1125, 0x1125], /* HANGUL CHOSEONG PIEUP-SSANGSIOS */ + [0x1126, 0x1126], /* HANGUL CHOSEONG PIEUP-SIOS-CIEUC */ + [0x1127, 0x1127], /* HANGUL CHOSEONG PIEUP-CIEUC */ + [0x1128, 0x1128], /* HANGUL CHOSEONG PIEUP-CHIEUCH */ + [0x1129, 0x1129], /* HANGUL CHOSEONG PIEUP-THIEUTH */ + [0x112a, 0x112a], /* HANGUL CHOSEONG PIEUP-PHIEUPH */ + [0x112b, 0x112b], /* HANGUL CHOSEONG KAPYEOUNPIEUP */ + [0x112c, 0x112c], /* HANGUL CHOSEONG KAPYEOUNSSANGPIEUP */ + [0x112d, 0x112d], /* HANGUL CHOSEONG SIOS-KIYEOK */ + [0x112e, 0x112e], /* HANGUL CHOSEONG SIOS-NIEUN */ + [0x112f, 0x112f], /* HANGUL CHOSEONG SIOS-TIKEUT */ + [0x1130, 0x1130], /* HANGUL CHOSEONG SIOS-RIEUL */ + [0x1131, 0x1131], /* HANGUL CHOSEONG SIOS-MIEUM */ + [0x1132, 0x1132], /* HANGUL CHOSEONG SIOS-PIEUP */ + [0x1133, 0x1133], /* HANGUL CHOSEONG SIOS-PIEUP-KIYEOK */ + [0x1134, 0x1134], /* HANGUL CHOSEONG SIOS-SSANGSIOS */ + [0x1135, 0x1135], /* HANGUL CHOSEONG SIOS-IEUNG */ + [0x1136, 0x1136], /* HANGUL CHOSEONG SIOS-CIEUC */ + [0x1137, 0x1137], /* HANGUL CHOSEONG SIOS-CHIEUCH */ + [0x1138, 0x1138], /* HANGUL CHOSEONG SIOS-KHIEUKH */ + [0x1139, 0x1139], /* HANGUL CHOSEONG SIOS-THIEUTH */ + [0x113a, 0x113a], /* HANGUL CHOSEONG SIOS-PHIEUPH */ + [0x113b, 0x113b], /* HANGUL CHOSEONG SIOS-HIEUH */ + [0x113c, 0x113c], /* HANGUL CHOSEONG CHITUEUMSIOS */ + [0x113d, 0x113d], /* HANGUL CHOSEONG CHITUEUMSSANGSIOS */ + [0x113e, 0x113e], /* HANGUL CHOSEONG CEONGCHIEUMSIOS */ + [0x113f, 0x113f], /* HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS */ + [0x1140, 0x1140], /* HANGUL CHOSEONG PANSIOS */ + [0x1141, 0x1141], /* HANGUL CHOSEONG IEUNG-KIYEOK */ + [0x1142, 0x1142], /* HANGUL CHOSEONG IEUNG-TIKEUT */ + [0x1143, 0x1143], /* HANGUL CHOSEONG IEUNG-MIEUM */ + [0x1144, 0x1144], /* HANGUL CHOSEONG IEUNG-PIEUP */ + [0x1145, 0x1145], /* HANGUL CHOSEONG IEUNG-SIOS */ + [0x1146, 0x1146], /* HANGUL CHOSEONG IEUNG-PANSIOS */ + [0x1147, 0x1147], /* HANGUL CHOSEONG SSANGIEUNG */ + [0x1148, 0x1148], /* HANGUL CHOSEONG IEUNG-CIEUC */ + [0x1149, 0x1149], /* HANGUL CHOSEONG IEUNG-CHIEUCH */ + [0x114a, 0x114a], /* HANGUL CHOSEONG IEUNG-THIEUTH */ + [0x114b, 0x114b], /* HANGUL CHOSEONG IEUNG-PHIEUPH */ + [0x114c, 0x114c], /* HANGUL CHOSEONG YESIEUNG */ + [0x114d, 0x114d], /* HANGUL CHOSEONG CIEUC-IEUNG */ + [0x114e, 0x114e], /* HANGUL CHOSEONG CHITUEUMCIEUC */ + [0x114f, 0x114f], /* HANGUL CHOSEONG CHITUEUMSSANGCIEUC */ + [0x1150, 0x1150], /* HANGUL CHOSEONG CEONGCHIEUMCIEUC */ + [0x1151, 0x1151], /* HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC */ + [0x1152, 0x1152], /* HANGUL CHOSEONG CHIEUCH-KHIEUKH */ + [0x1153, 0x1153], /* HANGUL CHOSEONG CHIEUCH-HIEUH */ + [0x1154, 0x1154], /* HANGUL CHOSEONG CHITUEUMCHIEUCH */ + [0x1155, 0x1155], /* HANGUL CHOSEONG CEONGCHIEUMCHIEUCH */ + [0x1156, 0x1156], /* HANGUL CHOSEONG PHIEUPH-PIEUP */ + [0x1157, 0x1157], /* HANGUL CHOSEONG KAPYEOUNPHIEUPH */ + [0x1158, 0x1158], /* HANGUL CHOSEONG SSANGHIEUH */ + [0x1159, 0x1159], /* HANGUL CHOSEONG YEORINHIEUH */ + [0x115a, 0x115a], /* HANGUL CHOSEONG KIYEOK-TIKEUT */ + [0x115b, 0x115b], /* HANGUL CHOSEONG NIEUN-SIOS */ + [0x115c, 0x115c], /* HANGUL CHOSEONG NIEUN-CIEUC */ + [0x115d, 0x115d], /* HANGUL CHOSEONG NIEUN-HIEUH */ + [0x115e, 0x115e], /* HANGUL CHOSEONG TIKEUT-RIEUL */ + [0x115f, 0x115f], /* HANGUL CHOSEONG FILLER */ + [0x1160, 0x1160], /* HANGUL JUNGSEONG FILLER */ + [0x1161, 0x1161], /* HANGUL JUNGSEONG A */ + [0x1162, 0x1162], /* HANGUL JUNGSEONG AE */ + [0x1163, 0x1163], /* HANGUL JUNGSEONG YA */ + [0x1164, 0x1164], /* HANGUL JUNGSEONG YAE */ + [0x1165, 0x1165], /* HANGUL JUNGSEONG EO */ + [0x1166, 0x1166], /* HANGUL JUNGSEONG E */ + [0x1167, 0x1167], /* HANGUL JUNGSEONG YEO */ + [0x1168, 0x1168], /* HANGUL JUNGSEONG YE */ + [0x1169, 0x1169], /* HANGUL JUNGSEONG O */ + [0x116a, 0x116a], /* HANGUL JUNGSEONG WA */ + [0x116b, 0x116b], /* HANGUL JUNGSEONG WAE */ + [0x116c, 0x116c], /* HANGUL JUNGSEONG OE */ + [0x116d, 0x116d], /* HANGUL JUNGSEONG YO */ + [0x116e, 0x116e], /* HANGUL JUNGSEONG U */ + [0x116f, 0x116f], /* HANGUL JUNGSEONG WEO */ + [0x1170, 0x1170], /* HANGUL JUNGSEONG WE */ + [0x1171, 0x1171], /* HANGUL JUNGSEONG WI */ + [0x1172, 0x1172], /* HANGUL JUNGSEONG YU */ + [0x1173, 0x1173], /* HANGUL JUNGSEONG EU */ + [0x1174, 0x1174], /* HANGUL JUNGSEONG YI */ + [0x1175, 0x1175], /* HANGUL JUNGSEONG I */ + [0x1176, 0x1176], /* HANGUL JUNGSEONG A-O */ + [0x1177, 0x1177], /* HANGUL JUNGSEONG A-U */ + [0x1178, 0x1178], /* HANGUL JUNGSEONG YA-O */ + [0x1179, 0x1179], /* HANGUL JUNGSEONG YA-YO */ + [0x117a, 0x117a], /* HANGUL JUNGSEONG EO-O */ + [0x117b, 0x117b], /* HANGUL JUNGSEONG EO-U */ + [0x117c, 0x117c], /* HANGUL JUNGSEONG EO-EU */ + [0x117d, 0x117d], /* HANGUL JUNGSEONG YEO-O */ + [0x117e, 0x117e], /* HANGUL JUNGSEONG YEO-U */ + [0x117f, 0x117f], /* HANGUL JUNGSEONG O-EO */ + [0x1180, 0x1180], /* HANGUL JUNGSEONG O-E */ + [0x1181, 0x1181], /* HANGUL JUNGSEONG O-YE */ + [0x1182, 0x1182], /* HANGUL JUNGSEONG O-O */ + [0x1183, 0x1183], /* HANGUL JUNGSEONG O-U */ + [0x1184, 0x1184], /* HANGUL JUNGSEONG YO-YA */ + [0x1185, 0x1185], /* HANGUL JUNGSEONG YO-YAE */ + [0x1186, 0x1186], /* HANGUL JUNGSEONG YO-YEO */ + [0x1187, 0x1187], /* HANGUL JUNGSEONG YO-O */ + [0x1188, 0x1188], /* HANGUL JUNGSEONG YO-I */ + [0x1189, 0x1189], /* HANGUL JUNGSEONG U-A */ + [0x118a, 0x118a], /* HANGUL JUNGSEONG U-AE */ + [0x118b, 0x118b], /* HANGUL JUNGSEONG U-EO-EU */ + [0x118c, 0x118c], /* HANGUL JUNGSEONG U-YE */ + [0x118d, 0x118d], /* HANGUL JUNGSEONG U-U */ + [0x118e, 0x118e], /* HANGUL JUNGSEONG YU-A */ + [0x118f, 0x118f], /* HANGUL JUNGSEONG YU-EO */ + [0x1190, 0x1190], /* HANGUL JUNGSEONG YU-E */ + [0x1191, 0x1191], /* HANGUL JUNGSEONG YU-YEO */ + [0x1192, 0x1192], /* HANGUL JUNGSEONG YU-YE */ + [0x1193, 0x1193], /* HANGUL JUNGSEONG YU-U */ + [0x1194, 0x1194], /* HANGUL JUNGSEONG YU-I */ + [0x1195, 0x1195], /* HANGUL JUNGSEONG EU-U */ + [0x1196, 0x1196], /* HANGUL JUNGSEONG EU-EU */ + [0x1197, 0x1197], /* HANGUL JUNGSEONG YI-U */ + [0x1198, 0x1198], /* HANGUL JUNGSEONG I-A */ + [0x1199, 0x1199], /* HANGUL JUNGSEONG I-YA */ + [0x119a, 0x119a], /* HANGUL JUNGSEONG I-O */ + [0x119b, 0x119b], /* HANGUL JUNGSEONG I-U */ + [0x119c, 0x119c], /* HANGUL JUNGSEONG I-EU */ + [0x119d, 0x119d], /* HANGUL JUNGSEONG I-ARAEA */ + [0x119e, 0x119e], /* HANGUL JUNGSEONG ARAEA */ + [0x119f, 0x119f], /* HANGUL JUNGSEONG ARAEA-EO */ + [0x11a0, 0x11a0], /* HANGUL JUNGSEONG ARAEA-U */ + [0x11a1, 0x11a1], /* HANGUL JUNGSEONG ARAEA-I */ + [0x11a2, 0x11a2], /* HANGUL JUNGSEONG SSANGARAEA */ + [0x11a3, 0x11a3], /* HANGUL JUNGSEONG A-EU */ + [0x11a4, 0x11a4], /* HANGUL JUNGSEONG YA-U */ + [0x11a5, 0x11a5], /* HANGUL JUNGSEONG YEO-YA */ + [0x11a6, 0x11a6], /* HANGUL JUNGSEONG O-YA */ + [0x11a7, 0x11a7], /* HANGUL JUNGSEONG O-YAE */ + [0x11a8, 0x11a8], /* HANGUL JONGSEONG KIYEOK */ + [0x11a9, 0x11a9], /* HANGUL JONGSEONG SSANGKIYEOK */ + [0x11aa, 0x11aa], /* HANGUL JONGSEONG KIYEOK-SIOS */ + [0x11ab, 0x11ab], /* HANGUL JONGSEONG NIEUN */ + [0x11ac, 0x11ac], /* HANGUL JONGSEONG NIEUN-CIEUC */ + [0x11ad, 0x11ad], /* HANGUL JONGSEONG NIEUN-HIEUH */ + [0x11ae, 0x11ae], /* HANGUL JONGSEONG TIKEUT */ + [0x11af, 0x11af], /* HANGUL JONGSEONG RIEUL */ + [0x11b0, 0x11b0], /* HANGUL JONGSEONG RIEUL-KIYEOK */ + [0x11b1, 0x11b1], /* HANGUL JONGSEONG RIEUL-MIEUM */ + [0x11b2, 0x11b2], /* HANGUL JONGSEONG RIEUL-PIEUP */ + [0x11b3, 0x11b3], /* HANGUL JONGSEONG RIEUL-SIOS */ + [0x11b4, 0x11b4], /* HANGUL JONGSEONG RIEUL-THIEUTH */ + [0x11b5, 0x11b5], /* HANGUL JONGSEONG RIEUL-PHIEUPH */ + [0x11b6, 0x11b6], /* HANGUL JONGSEONG RIEUL-HIEUH */ + [0x11b7, 0x11b7], /* HANGUL JONGSEONG MIEUM */ + [0x11b8, 0x11b8], /* HANGUL JONGSEONG PIEUP */ + [0x11b9, 0x11b9], /* HANGUL JONGSEONG PIEUP-SIOS */ + [0x11ba, 0x11ba], /* HANGUL JONGSEONG SIOS */ + [0x11bb, 0x11bb], /* HANGUL JONGSEONG SSANGSIOS */ + [0x11bc, 0x11bc], /* HANGUL JONGSEONG IEUNG */ + [0x11bd, 0x11bd], /* HANGUL JONGSEONG CIEUC */ + [0x11be, 0x11be], /* HANGUL JONGSEONG CHIEUCH */ + [0x11bf, 0x11bf], /* HANGUL JONGSEONG KHIEUKH */ + [0x11c0, 0x11c0], /* HANGUL JONGSEONG THIEUTH */ + [0x11c1, 0x11c1], /* HANGUL JONGSEONG PHIEUPH */ + [0x11c2, 0x11c2], /* HANGUL JONGSEONG HIEUH */ + [0x11c3, 0x11c3], /* HANGUL JONGSEONG KIYEOK-RIEUL */ + [0x11c4, 0x11c4], /* HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK */ + [0x11c5, 0x11c5], /* HANGUL JONGSEONG NIEUN-KIYEOK */ + [0x11c6, 0x11c6], /* HANGUL JONGSEONG NIEUN-TIKEUT */ + [0x11c7, 0x11c7], /* HANGUL JONGSEONG NIEUN-SIOS */ + [0x11c8, 0x11c8], /* HANGUL JONGSEONG NIEUN-PANSIOS */ + [0x11c9, 0x11c9], /* HANGUL JONGSEONG NIEUN-THIEUTH */ + [0x11ca, 0x11ca], /* HANGUL JONGSEONG TIKEUT-KIYEOK */ + [0x11cb, 0x11cb], /* HANGUL JONGSEONG TIKEUT-RIEUL */ + [0x11cc, 0x11cc], /* HANGUL JONGSEONG RIEUL-KIYEOK-SIOS */ + [0x11cd, 0x11cd], /* HANGUL JONGSEONG RIEUL-NIEUN */ + [0x11ce, 0x11ce], /* HANGUL JONGSEONG RIEUL-TIKEUT */ + [0x11cf, 0x11cf], /* HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH */ + [0x11d0, 0x11d0], /* HANGUL JONGSEONG SSANGRIEUL */ + [0x11d1, 0x11d1], /* HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK */ + [0x11d2, 0x11d2], /* HANGUL JONGSEONG RIEUL-MIEUM-SIOS */ + [0x11d3, 0x11d3], /* HANGUL JONGSEONG RIEUL-PIEUP-SIOS */ + [0x11d4, 0x11d4], /* HANGUL JONGSEONG RIEUL-PIEUP-HIEUH */ + [0x11d5, 0x11d5], /* HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP */ + [0x11d6, 0x11d6], /* HANGUL JONGSEONG RIEUL-SSANGSIOS */ + [0x11d7, 0x11d7], /* HANGUL JONGSEONG RIEUL-PANSIOS */ + [0x11d8, 0x11d8], /* HANGUL JONGSEONG RIEUL-KHIEUKH */ + [0x11d9, 0x11d9], /* HANGUL JONGSEONG RIEUL-YEORINHIEUH */ + [0x11da, 0x11da], /* HANGUL JONGSEONG MIEUM-KIYEOK */ + [0x11db, 0x11db], /* HANGUL JONGSEONG MIEUM-RIEUL */ + [0x11dc, 0x11dc], /* HANGUL JONGSEONG MIEUM-PIEUP */ + [0x11dd, 0x11dd], /* HANGUL JONGSEONG MIEUM-SIOS */ + [0x11de, 0x11de], /* HANGUL JONGSEONG MIEUM-SSANGSIOS */ + [0x11df, 0x11df], /* HANGUL JONGSEONG MIEUM-PANSIOS */ + [0x11e0, 0x11e0], /* HANGUL JONGSEONG MIEUM-CHIEUCH */ + [0x11e1, 0x11e1], /* HANGUL JONGSEONG MIEUM-HIEUH */ + [0x11e2, 0x11e2], /* HANGUL JONGSEONG KAPYEOUNMIEUM */ + [0x11e3, 0x11e3], /* HANGUL JONGSEONG PIEUP-RIEUL */ + [0x11e4, 0x11e4], /* HANGUL JONGSEONG PIEUP-PHIEUPH */ + [0x11e5, 0x11e5], /* HANGUL JONGSEONG PIEUP-HIEUH */ + [0x11e6, 0x11e6], /* HANGUL JONGSEONG KAPYEOUNPIEUP */ + [0x11e7, 0x11e7], /* HANGUL JONGSEONG SIOS-KIYEOK */ + [0x11e8, 0x11e8], /* HANGUL JONGSEONG SIOS-TIKEUT */ + [0x11e9, 0x11e9], /* HANGUL JONGSEONG SIOS-RIEUL */ + [0x11ea, 0x11ea], /* HANGUL JONGSEONG SIOS-PIEUP */ + [0x11eb, 0x11eb], /* HANGUL JONGSEONG PANSIOS */ + [0x11ec, 0x11ec], /* HANGUL JONGSEONG IEUNG-KIYEOK */ + [0x11ed, 0x11ed], /* HANGUL JONGSEONG IEUNG-SSANGKIYEOK */ + [0x11ee, 0x11ee], /* HANGUL JONGSEONG SSANGIEUNG */ + [0x11ef, 0x11ef], /* HANGUL JONGSEONG IEUNG-KHIEUKH */ + [0x11f0, 0x11f0], /* HANGUL JONGSEONG YESIEUNG */ + [0x11f1, 0x11f1], /* HANGUL JONGSEONG YESIEUNG-SIOS */ + [0x11f2, 0x11f2], /* HANGUL JONGSEONG YESIEUNG-PANSIOS */ + [0x11f3, 0x11f3], /* HANGUL JONGSEONG PHIEUPH-PIEUP */ + [0x11f4, 0x11f4], /* HANGUL JONGSEONG KAPYEOUNPHIEUPH */ + [0x11f5, 0x11f5], /* HANGUL JONGSEONG HIEUH-NIEUN */ + [0x11f6, 0x11f6], /* HANGUL JONGSEONG HIEUH-RIEUL */ + [0x11f7, 0x11f7], /* HANGUL JONGSEONG HIEUH-MIEUM */ + [0x11f8, 0x11f8], /* HANGUL JONGSEONG HIEUH-PIEUP */ + [0x11f9, 0x11f9], /* HANGUL JONGSEONG YEORINHIEUH */ + [0x11fa, 0x11fa], /* HANGUL JONGSEONG KIYEOK-NIEUN */ + [0x11fb, 0x11fb], /* HANGUL JONGSEONG KIYEOK-PIEUP */ + [0x11fc, 0x11fc], /* HANGUL JONGSEONG KIYEOK-CHIEUCH */ + [0x11fd, 0x11fd], /* HANGUL JONGSEONG KIYEOK-KHIEUKH */ + [0x11fe, 0x11fe], /* HANGUL JONGSEONG KIYEOK-HIEUH */ + [0x11ff, 0x11ff], /* HANGUL JONGSEONG SSANGNIEUN */ + [0x1200, 0x1200], /* ETHIOPIC SYLLABLE HA */ + [0x1201, 0x1201], /* ETHIOPIC SYLLABLE HU */ + [0x1202, 0x1202], /* ETHIOPIC SYLLABLE HI */ + [0x1203, 0x1203], /* ETHIOPIC SYLLABLE HAA */ + [0x1204, 0x1204], /* ETHIOPIC SYLLABLE HEE */ + [0x1205, 0x1205], /* ETHIOPIC SYLLABLE HE */ + [0x1206, 0x1206], /* ETHIOPIC SYLLABLE HO */ + [0x1207, 0x1207], /* ETHIOPIC SYLLABLE HOA */ + [0x1208, 0x1208], /* ETHIOPIC SYLLABLE LA */ + [0x1209, 0x1209], /* ETHIOPIC SYLLABLE LU */ + [0x120a, 0x120a], /* ETHIOPIC SYLLABLE LI */ + [0x120b, 0x120b], /* ETHIOPIC SYLLABLE LAA */ + [0x120c, 0x120c], /* ETHIOPIC SYLLABLE LEE */ + [0x120d, 0x120d], /* ETHIOPIC SYLLABLE LE */ + [0x120e, 0x120e], /* ETHIOPIC SYLLABLE LO */ + [0x120f, 0x120f], /* ETHIOPIC SYLLABLE LWA */ + [0x1210, 0x1210], /* ETHIOPIC SYLLABLE HHA */ + [0x1211, 0x1211], /* ETHIOPIC SYLLABLE HHU */ + [0x1212, 0x1212], /* ETHIOPIC SYLLABLE HHI */ + [0x1213, 0x1213], /* ETHIOPIC SYLLABLE HHAA */ + [0x1214, 0x1214], /* ETHIOPIC SYLLABLE HHEE */ + [0x1215, 0x1215], /* ETHIOPIC SYLLABLE HHE */ + [0x1216, 0x1216], /* ETHIOPIC SYLLABLE HHO */ + [0x1217, 0x1217], /* ETHIOPIC SYLLABLE HHWA */ + [0x1218, 0x1218], /* ETHIOPIC SYLLABLE MA */ + [0x1219, 0x1219], /* ETHIOPIC SYLLABLE MU */ + [0x121a, 0x121a], /* ETHIOPIC SYLLABLE MI */ + [0x121b, 0x121b], /* ETHIOPIC SYLLABLE MAA */ + [0x121c, 0x121c], /* ETHIOPIC SYLLABLE MEE */ + [0x121d, 0x121d], /* ETHIOPIC SYLLABLE ME */ + [0x121e, 0x121e], /* ETHIOPIC SYLLABLE MO */ + [0x121f, 0x121f], /* ETHIOPIC SYLLABLE MWA */ + [0x1220, 0x1220], /* ETHIOPIC SYLLABLE SZA */ + [0x1221, 0x1221], /* ETHIOPIC SYLLABLE SZU */ + [0x1222, 0x1222], /* ETHIOPIC SYLLABLE SZI */ + [0x1223, 0x1223], /* ETHIOPIC SYLLABLE SZAA */ + [0x1224, 0x1224], /* ETHIOPIC SYLLABLE SZEE */ + [0x1225, 0x1225], /* ETHIOPIC SYLLABLE SZE */ + [0x1226, 0x1226], /* ETHIOPIC SYLLABLE SZO */ + [0x1227, 0x1227], /* ETHIOPIC SYLLABLE SZWA */ + [0x1228, 0x1228], /* ETHIOPIC SYLLABLE RA */ + [0x1229, 0x1229], /* ETHIOPIC SYLLABLE RU */ + [0x122a, 0x122a], /* ETHIOPIC SYLLABLE RI */ + [0x122b, 0x122b], /* ETHIOPIC SYLLABLE RAA */ + [0x122c, 0x122c], /* ETHIOPIC SYLLABLE REE */ + [0x122d, 0x122d], /* ETHIOPIC SYLLABLE RE */ + [0x122e, 0x122e], /* ETHIOPIC SYLLABLE RO */ + [0x122f, 0x122f], /* ETHIOPIC SYLLABLE RWA */ + [0x1230, 0x1230], /* ETHIOPIC SYLLABLE SA */ + [0x1231, 0x1231], /* ETHIOPIC SYLLABLE SU */ + [0x1232, 0x1232], /* ETHIOPIC SYLLABLE SI */ + [0x1233, 0x1233], /* ETHIOPIC SYLLABLE SAA */ + [0x1234, 0x1234], /* ETHIOPIC SYLLABLE SEE */ + [0x1235, 0x1235], /* ETHIOPIC SYLLABLE SE */ + [0x1236, 0x1236], /* ETHIOPIC SYLLABLE SO */ + [0x1237, 0x1237], /* ETHIOPIC SYLLABLE SWA */ + [0x1238, 0x1238], /* ETHIOPIC SYLLABLE SHA */ + [0x1239, 0x1239], /* ETHIOPIC SYLLABLE SHU */ + [0x123a, 0x123a], /* ETHIOPIC SYLLABLE SHI */ + [0x123b, 0x123b], /* ETHIOPIC SYLLABLE SHAA */ + [0x123c, 0x123c], /* ETHIOPIC SYLLABLE SHEE */ + [0x123d, 0x123d], /* ETHIOPIC SYLLABLE SHE */ + [0x123e, 0x123e], /* ETHIOPIC SYLLABLE SHO */ + [0x123f, 0x123f], /* ETHIOPIC SYLLABLE SHWA */ + [0x1240, 0x1240], /* ETHIOPIC SYLLABLE QA */ + [0x1241, 0x1241], /* ETHIOPIC SYLLABLE QU */ + [0x1242, 0x1242], /* ETHIOPIC SYLLABLE QI */ + [0x1243, 0x1243], /* ETHIOPIC SYLLABLE QAA */ + [0x1244, 0x1244], /* ETHIOPIC SYLLABLE QEE */ + [0x1245, 0x1245], /* ETHIOPIC SYLLABLE QE */ + [0x1246, 0x1246], /* ETHIOPIC SYLLABLE QO */ + [0x1247, 0x1247], /* ETHIOPIC SYLLABLE QOA */ + [0x1248, 0x1248], /* ETHIOPIC SYLLABLE QWA */ + [0x1249, 0x1249], + [0x124a, 0x124a], /* ETHIOPIC SYLLABLE QWI */ + [0x124b, 0x124b], /* ETHIOPIC SYLLABLE QWAA */ + [0x124c, 0x124c], /* ETHIOPIC SYLLABLE QWEE */ + [0x124d, 0x124d], /* ETHIOPIC SYLLABLE QWE */ + [0x124e, 0x124e], + [0x124f, 0x124f], + [0x1250, 0x1250], /* ETHIOPIC SYLLABLE QHA */ + [0x1251, 0x1251], /* ETHIOPIC SYLLABLE QHU */ + [0x1252, 0x1252], /* ETHIOPIC SYLLABLE QHI */ + [0x1253, 0x1253], /* ETHIOPIC SYLLABLE QHAA */ + [0x1254, 0x1254], /* ETHIOPIC SYLLABLE QHEE */ + [0x1255, 0x1255], /* ETHIOPIC SYLLABLE QHE */ + [0x1256, 0x1256], /* ETHIOPIC SYLLABLE QHO */ + [0x1257, 0x1257], + [0x1258, 0x1258], /* ETHIOPIC SYLLABLE QHWA */ + [0x1259, 0x1259], + [0x125a, 0x125a], /* ETHIOPIC SYLLABLE QHWI */ + [0x125b, 0x125b], /* ETHIOPIC SYLLABLE QHWAA */ + [0x125c, 0x125c], /* ETHIOPIC SYLLABLE QHWEE */ + [0x125d, 0x125d], /* ETHIOPIC SYLLABLE QHWE */ + [0x125e, 0x125e], + [0x125f, 0x125f], + [0x1260, 0x1260], /* ETHIOPIC SYLLABLE BA */ + [0x1261, 0x1261], /* ETHIOPIC SYLLABLE BU */ + [0x1262, 0x1262], /* ETHIOPIC SYLLABLE BI */ + [0x1263, 0x1263], /* ETHIOPIC SYLLABLE BAA */ + [0x1264, 0x1264], /* ETHIOPIC SYLLABLE BEE */ + [0x1265, 0x1265], /* ETHIOPIC SYLLABLE BE */ + [0x1266, 0x1266], /* ETHIOPIC SYLLABLE BO */ + [0x1267, 0x1267], /* ETHIOPIC SYLLABLE BWA */ + [0x1268, 0x1268], /* ETHIOPIC SYLLABLE VA */ + [0x1269, 0x1269], /* ETHIOPIC SYLLABLE VU */ + [0x126a, 0x126a], /* ETHIOPIC SYLLABLE VI */ + [0x126b, 0x126b], /* ETHIOPIC SYLLABLE VAA */ + [0x126c, 0x126c], /* ETHIOPIC SYLLABLE VEE */ + [0x126d, 0x126d], /* ETHIOPIC SYLLABLE VE */ + [0x126e, 0x126e], /* ETHIOPIC SYLLABLE VO */ + [0x126f, 0x126f], /* ETHIOPIC SYLLABLE VWA */ + [0x1270, 0x1270], /* ETHIOPIC SYLLABLE TA */ + [0x1271, 0x1271], /* ETHIOPIC SYLLABLE TU */ + [0x1272, 0x1272], /* ETHIOPIC SYLLABLE TI */ + [0x1273, 0x1273], /* ETHIOPIC SYLLABLE TAA */ + [0x1274, 0x1274], /* ETHIOPIC SYLLABLE TEE */ + [0x1275, 0x1275], /* ETHIOPIC SYLLABLE TE */ + [0x1276, 0x1276], /* ETHIOPIC SYLLABLE TO */ + [0x1277, 0x1277], /* ETHIOPIC SYLLABLE TWA */ + [0x1278, 0x1278], /* ETHIOPIC SYLLABLE CA */ + [0x1279, 0x1279], /* ETHIOPIC SYLLABLE CU */ + [0x127a, 0x127a], /* ETHIOPIC SYLLABLE CI */ + [0x127b, 0x127b], /* ETHIOPIC SYLLABLE CAA */ + [0x127c, 0x127c], /* ETHIOPIC SYLLABLE CEE */ + [0x127d, 0x127d], /* ETHIOPIC SYLLABLE CE */ + [0x127e, 0x127e], /* ETHIOPIC SYLLABLE CO */ + [0x127f, 0x127f], /* ETHIOPIC SYLLABLE CWA */ + [0x1280, 0x1280], /* ETHIOPIC SYLLABLE XA */ + [0x1281, 0x1281], /* ETHIOPIC SYLLABLE XU */ + [0x1282, 0x1282], /* ETHIOPIC SYLLABLE XI */ + [0x1283, 0x1283], /* ETHIOPIC SYLLABLE XAA */ + [0x1284, 0x1284], /* ETHIOPIC SYLLABLE XEE */ + [0x1285, 0x1285], /* ETHIOPIC SYLLABLE XE */ + [0x1286, 0x1286], /* ETHIOPIC SYLLABLE XO */ + [0x1287, 0x1287], /* ETHIOPIC SYLLABLE XOA */ + [0x1288, 0x1288], /* ETHIOPIC SYLLABLE XWA */ + [0x1289, 0x1289], + [0x128a, 0x128a], /* ETHIOPIC SYLLABLE XWI */ + [0x128b, 0x128b], /* ETHIOPIC SYLLABLE XWAA */ + [0x128c, 0x128c], /* ETHIOPIC SYLLABLE XWEE */ + [0x128d, 0x128d], /* ETHIOPIC SYLLABLE XWE */ + [0x128e, 0x128e], + [0x128f, 0x128f], + [0x1290, 0x1290], /* ETHIOPIC SYLLABLE NA */ + [0x1291, 0x1291], /* ETHIOPIC SYLLABLE NU */ + [0x1292, 0x1292], /* ETHIOPIC SYLLABLE NI */ + [0x1293, 0x1293], /* ETHIOPIC SYLLABLE NAA */ + [0x1294, 0x1294], /* ETHIOPIC SYLLABLE NEE */ + [0x1295, 0x1295], /* ETHIOPIC SYLLABLE NE */ + [0x1296, 0x1296], /* ETHIOPIC SYLLABLE NO */ + [0x1297, 0x1297], /* ETHIOPIC SYLLABLE NWA */ + [0x1298, 0x1298], /* ETHIOPIC SYLLABLE NYA */ + [0x1299, 0x1299], /* ETHIOPIC SYLLABLE NYU */ + [0x129a, 0x129a], /* ETHIOPIC SYLLABLE NYI */ + [0x129b, 0x129b], /* ETHIOPIC SYLLABLE NYAA */ + [0x129c, 0x129c], /* ETHIOPIC SYLLABLE NYEE */ + [0x129d, 0x129d], /* ETHIOPIC SYLLABLE NYE */ + [0x129e, 0x129e], /* ETHIOPIC SYLLABLE NYO */ + [0x129f, 0x129f], /* ETHIOPIC SYLLABLE NYWA */ + [0x12a0, 0x12a0], /* ETHIOPIC SYLLABLE GLOTTAL A */ + [0x12a1, 0x12a1], /* ETHIOPIC SYLLABLE GLOTTAL U */ + [0x12a2, 0x12a2], /* ETHIOPIC SYLLABLE GLOTTAL I */ + [0x12a3, 0x12a3], /* ETHIOPIC SYLLABLE GLOTTAL AA */ + [0x12a4, 0x12a4], /* ETHIOPIC SYLLABLE GLOTTAL EE */ + [0x12a5, 0x12a5], /* ETHIOPIC SYLLABLE GLOTTAL E */ + [0x12a6, 0x12a6], /* ETHIOPIC SYLLABLE GLOTTAL O */ + [0x12a7, 0x12a7], /* ETHIOPIC SYLLABLE GLOTTAL WA */ + [0x12a8, 0x12a8], /* ETHIOPIC SYLLABLE KA */ + [0x12a9, 0x12a9], /* ETHIOPIC SYLLABLE KU */ + [0x12aa, 0x12aa], /* ETHIOPIC SYLLABLE KI */ + [0x12ab, 0x12ab], /* ETHIOPIC SYLLABLE KAA */ + [0x12ac, 0x12ac], /* ETHIOPIC SYLLABLE KEE */ + [0x12ad, 0x12ad], /* ETHIOPIC SYLLABLE KE */ + [0x12ae, 0x12ae], /* ETHIOPIC SYLLABLE KO */ + [0x12af, 0x12af], /* ETHIOPIC SYLLABLE KOA */ + [0x12b0, 0x12b0], /* ETHIOPIC SYLLABLE KWA */ + [0x12b1, 0x12b1], + [0x12b2, 0x12b2], /* ETHIOPIC SYLLABLE KWI */ + [0x12b3, 0x12b3], /* ETHIOPIC SYLLABLE KWAA */ + [0x12b4, 0x12b4], /* ETHIOPIC SYLLABLE KWEE */ + [0x12b5, 0x12b5], /* ETHIOPIC SYLLABLE KWE */ + [0x12b6, 0x12b6], + [0x12b7, 0x12b7], + [0x12b8, 0x12b8], /* ETHIOPIC SYLLABLE KXA */ + [0x12b9, 0x12b9], /* ETHIOPIC SYLLABLE KXU */ + [0x12ba, 0x12ba], /* ETHIOPIC SYLLABLE KXI */ + [0x12bb, 0x12bb], /* ETHIOPIC SYLLABLE KXAA */ + [0x12bc, 0x12bc], /* ETHIOPIC SYLLABLE KXEE */ + [0x12bd, 0x12bd], /* ETHIOPIC SYLLABLE KXE */ + [0x12be, 0x12be], /* ETHIOPIC SYLLABLE KXO */ + [0x12bf, 0x12bf], + [0x12c0, 0x12c0], /* ETHIOPIC SYLLABLE KXWA */ + [0x12c1, 0x12c1], + [0x12c2, 0x12c2], /* ETHIOPIC SYLLABLE KXWI */ + [0x12c3, 0x12c3], /* ETHIOPIC SYLLABLE KXWAA */ + [0x12c4, 0x12c4], /* ETHIOPIC SYLLABLE KXWEE */ + [0x12c5, 0x12c5], /* ETHIOPIC SYLLABLE KXWE */ + [0x12c6, 0x12c6], + [0x12c7, 0x12c7], + [0x12c8, 0x12c8], /* ETHIOPIC SYLLABLE WA */ + [0x12c9, 0x12c9], /* ETHIOPIC SYLLABLE WU */ + [0x12ca, 0x12ca], /* ETHIOPIC SYLLABLE WI */ + [0x12cb, 0x12cb], /* ETHIOPIC SYLLABLE WAA */ + [0x12cc, 0x12cc], /* ETHIOPIC SYLLABLE WEE */ + [0x12cd, 0x12cd], /* ETHIOPIC SYLLABLE WE */ + [0x12ce, 0x12ce], /* ETHIOPIC SYLLABLE WO */ + [0x12cf, 0x12cf], /* ETHIOPIC SYLLABLE WOA */ + [0x12d0, 0x12d0], /* ETHIOPIC SYLLABLE PHARYNGEAL A */ + [0x12d1, 0x12d1], /* ETHIOPIC SYLLABLE PHARYNGEAL U */ + [0x12d2, 0x12d2], /* ETHIOPIC SYLLABLE PHARYNGEAL I */ + [0x12d3, 0x12d3], /* ETHIOPIC SYLLABLE PHARYNGEAL AA */ + [0x12d4, 0x12d4], /* ETHIOPIC SYLLABLE PHARYNGEAL EE */ + [0x12d5, 0x12d5], /* ETHIOPIC SYLLABLE PHARYNGEAL E */ + [0x12d6, 0x12d6], /* ETHIOPIC SYLLABLE PHARYNGEAL O */ + [0x12d7, 0x12d7], + [0x12d8, 0x12d8], /* ETHIOPIC SYLLABLE ZA */ + [0x12d9, 0x12d9], /* ETHIOPIC SYLLABLE ZU */ + [0x12da, 0x12da], /* ETHIOPIC SYLLABLE ZI */ + [0x12db, 0x12db], /* ETHIOPIC SYLLABLE ZAA */ + [0x12dc, 0x12dc], /* ETHIOPIC SYLLABLE ZEE */ + [0x12dd, 0x12dd], /* ETHIOPIC SYLLABLE ZE */ + [0x12de, 0x12de], /* ETHIOPIC SYLLABLE ZO */ + [0x12df, 0x12df], /* ETHIOPIC SYLLABLE ZWA */ + [0x12e0, 0x12e0], /* ETHIOPIC SYLLABLE ZHA */ + [0x12e1, 0x12e1], /* ETHIOPIC SYLLABLE ZHU */ + [0x12e2, 0x12e2], /* ETHIOPIC SYLLABLE ZHI */ + [0x12e3, 0x12e3], /* ETHIOPIC SYLLABLE ZHAA */ + [0x12e4, 0x12e4], /* ETHIOPIC SYLLABLE ZHEE */ + [0x12e5, 0x12e5], /* ETHIOPIC SYLLABLE ZHE */ + [0x12e6, 0x12e6], /* ETHIOPIC SYLLABLE ZHO */ + [0x12e7, 0x12e7], /* ETHIOPIC SYLLABLE ZHWA */ + [0x12e8, 0x12e8], /* ETHIOPIC SYLLABLE YA */ + [0x12e9, 0x12e9], /* ETHIOPIC SYLLABLE YU */ + [0x12ea, 0x12ea], /* ETHIOPIC SYLLABLE YI */ + [0x12eb, 0x12eb], /* ETHIOPIC SYLLABLE YAA */ + [0x12ec, 0x12ec], /* ETHIOPIC SYLLABLE YEE */ + [0x12ed, 0x12ed], /* ETHIOPIC SYLLABLE YE */ + [0x12ee, 0x12ee], /* ETHIOPIC SYLLABLE YO */ + [0x12ef, 0x12ef], /* ETHIOPIC SYLLABLE YOA */ + [0x12f0, 0x12f0], /* ETHIOPIC SYLLABLE DA */ + [0x12f1, 0x12f1], /* ETHIOPIC SYLLABLE DU */ + [0x12f2, 0x12f2], /* ETHIOPIC SYLLABLE DI */ + [0x12f3, 0x12f3], /* ETHIOPIC SYLLABLE DAA */ + [0x12f4, 0x12f4], /* ETHIOPIC SYLLABLE DEE */ + [0x12f5, 0x12f5], /* ETHIOPIC SYLLABLE DE */ + [0x12f6, 0x12f6], /* ETHIOPIC SYLLABLE DO */ + [0x12f7, 0x12f7], /* ETHIOPIC SYLLABLE DWA */ + [0x12f8, 0x12f8], /* ETHIOPIC SYLLABLE DDA */ + [0x12f9, 0x12f9], /* ETHIOPIC SYLLABLE DDU */ + [0x12fa, 0x12fa], /* ETHIOPIC SYLLABLE DDI */ + [0x12fb, 0x12fb], /* ETHIOPIC SYLLABLE DDAA */ + [0x12fc, 0x12fc], /* ETHIOPIC SYLLABLE DDEE */ + [0x12fd, 0x12fd], /* ETHIOPIC SYLLABLE DDE */ + [0x12fe, 0x12fe], /* ETHIOPIC SYLLABLE DDO */ + [0x12ff, 0x12ff], /* ETHIOPIC SYLLABLE DDWA */ + [0x1300, 0x1300], /* ETHIOPIC SYLLABLE JA */ + [0x1301, 0x1301], /* ETHIOPIC SYLLABLE JU */ + [0x1302, 0x1302], /* ETHIOPIC SYLLABLE JI */ + [0x1303, 0x1303], /* ETHIOPIC SYLLABLE JAA */ + [0x1304, 0x1304], /* ETHIOPIC SYLLABLE JEE */ + [0x1305, 0x1305], /* ETHIOPIC SYLLABLE JE */ + [0x1306, 0x1306], /* ETHIOPIC SYLLABLE JO */ + [0x1307, 0x1307], /* ETHIOPIC SYLLABLE JWA */ + [0x1308, 0x1308], /* ETHIOPIC SYLLABLE GA */ + [0x1309, 0x1309], /* ETHIOPIC SYLLABLE GU */ + [0x130a, 0x130a], /* ETHIOPIC SYLLABLE GI */ + [0x130b, 0x130b], /* ETHIOPIC SYLLABLE GAA */ + [0x130c, 0x130c], /* ETHIOPIC SYLLABLE GEE */ + [0x130d, 0x130d], /* ETHIOPIC SYLLABLE GE */ + [0x130e, 0x130e], /* ETHIOPIC SYLLABLE GO */ + [0x130f, 0x130f], /* ETHIOPIC SYLLABLE GOA */ + [0x1310, 0x1310], /* ETHIOPIC SYLLABLE GWA */ + [0x1311, 0x1311], + [0x1312, 0x1312], /* ETHIOPIC SYLLABLE GWI */ + [0x1313, 0x1313], /* ETHIOPIC SYLLABLE GWAA */ + [0x1314, 0x1314], /* ETHIOPIC SYLLABLE GWEE */ + [0x1315, 0x1315], /* ETHIOPIC SYLLABLE GWE */ + [0x1316, 0x1316], + [0x1317, 0x1317], + [0x1318, 0x1318], /* ETHIOPIC SYLLABLE GGA */ + [0x1319, 0x1319], /* ETHIOPIC SYLLABLE GGU */ + [0x131a, 0x131a], /* ETHIOPIC SYLLABLE GGI */ + [0x131b, 0x131b], /* ETHIOPIC SYLLABLE GGAA */ + [0x131c, 0x131c], /* ETHIOPIC SYLLABLE GGEE */ + [0x131d, 0x131d], /* ETHIOPIC SYLLABLE GGE */ + [0x131e, 0x131e], /* ETHIOPIC SYLLABLE GGO */ + [0x131f, 0x131f], /* ETHIOPIC SYLLABLE GGWAA */ + [0x1320, 0x1320], /* ETHIOPIC SYLLABLE THA */ + [0x1321, 0x1321], /* ETHIOPIC SYLLABLE THU */ + [0x1322, 0x1322], /* ETHIOPIC SYLLABLE THI */ + [0x1323, 0x1323], /* ETHIOPIC SYLLABLE THAA */ + [0x1324, 0x1324], /* ETHIOPIC SYLLABLE THEE */ + [0x1325, 0x1325], /* ETHIOPIC SYLLABLE THE */ + [0x1326, 0x1326], /* ETHIOPIC SYLLABLE THO */ + [0x1327, 0x1327], /* ETHIOPIC SYLLABLE THWA */ + [0x1328, 0x1328], /* ETHIOPIC SYLLABLE CHA */ + [0x1329, 0x1329], /* ETHIOPIC SYLLABLE CHU */ + [0x132a, 0x132a], /* ETHIOPIC SYLLABLE CHI */ + [0x132b, 0x132b], /* ETHIOPIC SYLLABLE CHAA */ + [0x132c, 0x132c], /* ETHIOPIC SYLLABLE CHEE */ + [0x132d, 0x132d], /* ETHIOPIC SYLLABLE CHE */ + [0x132e, 0x132e], /* ETHIOPIC SYLLABLE CHO */ + [0x132f, 0x132f], /* ETHIOPIC SYLLABLE CHWA */ + [0x1330, 0x1330], /* ETHIOPIC SYLLABLE PHA */ + [0x1331, 0x1331], /* ETHIOPIC SYLLABLE PHU */ + [0x1332, 0x1332], /* ETHIOPIC SYLLABLE PHI */ + [0x1333, 0x1333], /* ETHIOPIC SYLLABLE PHAA */ + [0x1334, 0x1334], /* ETHIOPIC SYLLABLE PHEE */ + [0x1335, 0x1335], /* ETHIOPIC SYLLABLE PHE */ + [0x1336, 0x1336], /* ETHIOPIC SYLLABLE PHO */ + [0x1337, 0x1337], /* ETHIOPIC SYLLABLE PHWA */ + [0x1338, 0x1338], /* ETHIOPIC SYLLABLE TSA */ + [0x1339, 0x1339], /* ETHIOPIC SYLLABLE TSU */ + [0x133a, 0x133a], /* ETHIOPIC SYLLABLE TSI */ + [0x133b, 0x133b], /* ETHIOPIC SYLLABLE TSAA */ + [0x133c, 0x133c], /* ETHIOPIC SYLLABLE TSEE */ + [0x133d, 0x133d], /* ETHIOPIC SYLLABLE TSE */ + [0x133e, 0x133e], /* ETHIOPIC SYLLABLE TSO */ + [0x133f, 0x133f], /* ETHIOPIC SYLLABLE TSWA */ + [0x1340, 0x1340], /* ETHIOPIC SYLLABLE TZA */ + [0x1341, 0x1341], /* ETHIOPIC SYLLABLE TZU */ + [0x1342, 0x1342], /* ETHIOPIC SYLLABLE TZI */ + [0x1343, 0x1343], /* ETHIOPIC SYLLABLE TZAA */ + [0x1344, 0x1344], /* ETHIOPIC SYLLABLE TZEE */ + [0x1345, 0x1345], /* ETHIOPIC SYLLABLE TZE */ + [0x1346, 0x1346], /* ETHIOPIC SYLLABLE TZO */ + [0x1347, 0x1347], /* ETHIOPIC SYLLABLE TZOA */ + [0x1348, 0x1348], /* ETHIOPIC SYLLABLE FA */ + [0x1349, 0x1349], /* ETHIOPIC SYLLABLE FU */ + [0x134a, 0x134a], /* ETHIOPIC SYLLABLE FI */ + [0x134b, 0x134b], /* ETHIOPIC SYLLABLE FAA */ + [0x134c, 0x134c], /* ETHIOPIC SYLLABLE FEE */ + [0x134d, 0x134d], /* ETHIOPIC SYLLABLE FE */ + [0x134e, 0x134e], /* ETHIOPIC SYLLABLE FO */ + [0x134f, 0x134f], /* ETHIOPIC SYLLABLE FWA */ + [0x1350, 0x1350], /* ETHIOPIC SYLLABLE PA */ + [0x1351, 0x1351], /* ETHIOPIC SYLLABLE PU */ + [0x1352, 0x1352], /* ETHIOPIC SYLLABLE PI */ + [0x1353, 0x1353], /* ETHIOPIC SYLLABLE PAA */ + [0x1354, 0x1354], /* ETHIOPIC SYLLABLE PEE */ + [0x1355, 0x1355], /* ETHIOPIC SYLLABLE PE */ + [0x1356, 0x1356], /* ETHIOPIC SYLLABLE PO */ + [0x1357, 0x1357], /* ETHIOPIC SYLLABLE PWA */ + [0x1358, 0x1358], /* ETHIOPIC SYLLABLE RYA */ + [0x1359, 0x1359], /* ETHIOPIC SYLLABLE MYA */ + [0x135a, 0x135a], /* ETHIOPIC SYLLABLE FYA */ + [0x135b, 0x135b], + [0x135c, 0x135c], + [0x135d, 0x135d], /* ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK */ + [0x135e, 0x135e], /* ETHIOPIC COMBINING VOWEL LENGTH MARK */ + [0x135f, 0x135f], /* ETHIOPIC COMBINING GEMINATION MARK */ + [0x1360, 0x1360], /* ETHIOPIC SECTION MARK */ + [0x1361, 0x1361], /* ETHIOPIC WORDSPACE */ + [0x1362, 0x1362], /* ETHIOPIC FULL STOP */ + [0x1363, 0x1363], /* ETHIOPIC COMMA */ + [0x1364, 0x1364], /* ETHIOPIC SEMICOLON */ + [0x1365, 0x1365], /* ETHIOPIC COLON */ + [0x1366, 0x1366], /* ETHIOPIC PREFACE COLON */ + [0x1367, 0x1367], /* ETHIOPIC QUESTION MARK */ + [0x1368, 0x1368], /* ETHIOPIC PARAGRAPH SEPARATOR */ + [0x1369, 0x1369], /* ETHIOPIC DIGIT ONE */ + [0x136a, 0x136a], /* ETHIOPIC DIGIT TWO */ + [0x136b, 0x136b], /* ETHIOPIC DIGIT THREE */ + [0x136c, 0x136c], /* ETHIOPIC DIGIT FOUR */ + [0x136d, 0x136d], /* ETHIOPIC DIGIT FIVE */ + [0x136e, 0x136e], /* ETHIOPIC DIGIT SIX */ + [0x136f, 0x136f], /* ETHIOPIC DIGIT SEVEN */ + [0x1370, 0x1370], /* ETHIOPIC DIGIT EIGHT */ + [0x1371, 0x1371], /* ETHIOPIC DIGIT NINE */ + [0x1372, 0x1372], /* ETHIOPIC NUMBER TEN */ + [0x1373, 0x1373], /* ETHIOPIC NUMBER TWENTY */ + [0x1374, 0x1374], /* ETHIOPIC NUMBER THIRTY */ + [0x1375, 0x1375], /* ETHIOPIC NUMBER FORTY */ + [0x1376, 0x1376], /* ETHIOPIC NUMBER FIFTY */ + [0x1377, 0x1377], /* ETHIOPIC NUMBER SIXTY */ + [0x1378, 0x1378], /* ETHIOPIC NUMBER SEVENTY */ + [0x1379, 0x1379], /* ETHIOPIC NUMBER EIGHTY */ + [0x137a, 0x137a], /* ETHIOPIC NUMBER NINETY */ + [0x137b, 0x137b], /* ETHIOPIC NUMBER HUNDRED */ + [0x137c, 0x137c], /* ETHIOPIC NUMBER TEN THOUSAND */ + [0x137d, 0x137d], + [0x137e, 0x137e], + [0x137f, 0x137f], + [0x1380, 0x1380], /* ETHIOPIC SYLLABLE SEBATBEIT MWA */ + [0x1381, 0x1381], /* ETHIOPIC SYLLABLE MWI */ + [0x1382, 0x1382], /* ETHIOPIC SYLLABLE MWEE */ + [0x1383, 0x1383], /* ETHIOPIC SYLLABLE MWE */ + [0x1384, 0x1384], /* ETHIOPIC SYLLABLE SEBATBEIT BWA */ + [0x1385, 0x1385], /* ETHIOPIC SYLLABLE BWI */ + [0x1386, 0x1386], /* ETHIOPIC SYLLABLE BWEE */ + [0x1387, 0x1387], /* ETHIOPIC SYLLABLE BWE */ + [0x1388, 0x1388], /* ETHIOPIC SYLLABLE SEBATBEIT FWA */ + [0x1389, 0x1389], /* ETHIOPIC SYLLABLE FWI */ + [0x138a, 0x138a], /* ETHIOPIC SYLLABLE FWEE */ + [0x138b, 0x138b], /* ETHIOPIC SYLLABLE FWE */ + [0x138c, 0x138c], /* ETHIOPIC SYLLABLE SEBATBEIT PWA */ + [0x138d, 0x138d], /* ETHIOPIC SYLLABLE PWI */ + [0x138e, 0x138e], /* ETHIOPIC SYLLABLE PWEE */ + [0x138f, 0x138f], /* ETHIOPIC SYLLABLE PWE */ + [0x1390, 0x1390], /* ETHIOPIC TONAL MARK YIZET */ + [0x1391, 0x1391], /* ETHIOPIC TONAL MARK DERET */ + [0x1392, 0x1392], /* ETHIOPIC TONAL MARK RIKRIK */ + [0x1393, 0x1393], /* ETHIOPIC TONAL MARK SHORT RIKRIK */ + [0x1394, 0x1394], /* ETHIOPIC TONAL MARK DIFAT */ + [0x1395, 0x1395], /* ETHIOPIC TONAL MARK KENAT */ + [0x1396, 0x1396], /* ETHIOPIC TONAL MARK CHIRET */ + [0x1397, 0x1397], /* ETHIOPIC TONAL MARK HIDET */ + [0x1398, 0x1398], /* ETHIOPIC TONAL MARK DERET-HIDET */ + [0x1399, 0x1399], /* ETHIOPIC TONAL MARK KURT */ + [0x139a, 0x139a], + [0x139b, 0x139b], + [0x139c, 0x139c], + [0x139d, 0x139d], + [0x139e, 0x139e], + [0x139f, 0x139f], + [0x13a0, 0x13a0], /* CHEROKEE LETTER A */ + [0x13a1, 0x13a1], /* CHEROKEE LETTER E */ + [0x13a2, 0x13a2], /* CHEROKEE LETTER I */ + [0x13a3, 0x13a3], /* CHEROKEE LETTER O */ + [0x13a4, 0x13a4], /* CHEROKEE LETTER U */ + [0x13a5, 0x13a5], /* CHEROKEE LETTER V */ + [0x13a6, 0x13a6], /* CHEROKEE LETTER GA */ + [0x13a7, 0x13a7], /* CHEROKEE LETTER KA */ + [0x13a8, 0x13a8], /* CHEROKEE LETTER GE */ + [0x13a9, 0x13a9], /* CHEROKEE LETTER GI */ + [0x13aa, 0x13aa], /* CHEROKEE LETTER GO */ + [0x13ab, 0x13ab], /* CHEROKEE LETTER GU */ + [0x13ac, 0x13ac], /* CHEROKEE LETTER GV */ + [0x13ad, 0x13ad], /* CHEROKEE LETTER HA */ + [0x13ae, 0x13ae], /* CHEROKEE LETTER HE */ + [0x13af, 0x13af], /* CHEROKEE LETTER HI */ + [0x13b0, 0x13b0], /* CHEROKEE LETTER HO */ + [0x13b1, 0x13b1], /* CHEROKEE LETTER HU */ + [0x13b2, 0x13b2], /* CHEROKEE LETTER HV */ + [0x13b3, 0x13b3], /* CHEROKEE LETTER LA */ + [0x13b4, 0x13b4], /* CHEROKEE LETTER LE */ + [0x13b5, 0x13b5], /* CHEROKEE LETTER LI */ + [0x13b6, 0x13b6], /* CHEROKEE LETTER LO */ + [0x13b7, 0x13b7], /* CHEROKEE LETTER LU */ + [0x13b8, 0x13b8], /* CHEROKEE LETTER LV */ + [0x13b9, 0x13b9], /* CHEROKEE LETTER MA */ + [0x13ba, 0x13ba], /* CHEROKEE LETTER ME */ + [0x13bb, 0x13bb], /* CHEROKEE LETTER MI */ + [0x13bc, 0x13bc], /* CHEROKEE LETTER MO */ + [0x13bd, 0x13bd], /* CHEROKEE LETTER MU */ + [0x13be, 0x13be], /* CHEROKEE LETTER NA */ + [0x13bf, 0x13bf], /* CHEROKEE LETTER HNA */ + [0x13c0, 0x13c0], /* CHEROKEE LETTER NAH */ + [0x13c1, 0x13c1], /* CHEROKEE LETTER NE */ + [0x13c2, 0x13c2], /* CHEROKEE LETTER NI */ + [0x13c3, 0x13c3], /* CHEROKEE LETTER NO */ + [0x13c4, 0x13c4], /* CHEROKEE LETTER NU */ + [0x13c5, 0x13c5], /* CHEROKEE LETTER NV */ + [0x13c6, 0x13c6], /* CHEROKEE LETTER QUA */ + [0x13c7, 0x13c7], /* CHEROKEE LETTER QUE */ + [0x13c8, 0x13c8], /* CHEROKEE LETTER QUI */ + [0x13c9, 0x13c9], /* CHEROKEE LETTER QUO */ + [0x13ca, 0x13ca], /* CHEROKEE LETTER QUU */ + [0x13cb, 0x13cb], /* CHEROKEE LETTER QUV */ + [0x13cc, 0x13cc], /* CHEROKEE LETTER SA */ + [0x13cd, 0x13cd], /* CHEROKEE LETTER S */ + [0x13ce, 0x13ce], /* CHEROKEE LETTER SE */ + [0x13cf, 0x13cf], /* CHEROKEE LETTER SI */ + [0x13d0, 0x13d0], /* CHEROKEE LETTER SO */ + [0x13d1, 0x13d1], /* CHEROKEE LETTER SU */ + [0x13d2, 0x13d2], /* CHEROKEE LETTER SV */ + [0x13d3, 0x13d3], /* CHEROKEE LETTER DA */ + [0x13d4, 0x13d4], /* CHEROKEE LETTER TA */ + [0x13d5, 0x13d5], /* CHEROKEE LETTER DE */ + [0x13d6, 0x13d6], /* CHEROKEE LETTER TE */ + [0x13d7, 0x13d7], /* CHEROKEE LETTER DI */ + [0x13d8, 0x13d8], /* CHEROKEE LETTER TI */ + [0x13d9, 0x13d9], /* CHEROKEE LETTER DO */ + [0x13da, 0x13da], /* CHEROKEE LETTER DU */ + [0x13db, 0x13db], /* CHEROKEE LETTER DV */ + [0x13dc, 0x13dc], /* CHEROKEE LETTER DLA */ + [0x13dd, 0x13dd], /* CHEROKEE LETTER TLA */ + [0x13de, 0x13de], /* CHEROKEE LETTER TLE */ + [0x13df, 0x13df], /* CHEROKEE LETTER TLI */ + [0x13e0, 0x13e0], /* CHEROKEE LETTER TLO */ + [0x13e1, 0x13e1], /* CHEROKEE LETTER TLU */ + [0x13e2, 0x13e2], /* CHEROKEE LETTER TLV */ + [0x13e3, 0x13e3], /* CHEROKEE LETTER TSA */ + [0x13e4, 0x13e4], /* CHEROKEE LETTER TSE */ + [0x13e5, 0x13e5], /* CHEROKEE LETTER TSI */ + [0x13e6, 0x13e6], /* CHEROKEE LETTER TSO */ + [0x13e7, 0x13e7], /* CHEROKEE LETTER TSU */ + [0x13e8, 0x13e8], /* CHEROKEE LETTER TSV */ + [0x13e9, 0x13e9], /* CHEROKEE LETTER WA */ + [0x13ea, 0x13ea], /* CHEROKEE LETTER WE */ + [0x13eb, 0x13eb], /* CHEROKEE LETTER WI */ + [0x13ec, 0x13ec], /* CHEROKEE LETTER WO */ + [0x13ed, 0x13ed], /* CHEROKEE LETTER WU */ + [0x13ee, 0x13ee], /* CHEROKEE LETTER WV */ + [0x13ef, 0x13ef], /* CHEROKEE LETTER YA */ + [0x13f0, 0x13f0], /* CHEROKEE LETTER YE */ + [0x13f1, 0x13f1], /* CHEROKEE LETTER YI */ + [0x13f2, 0x13f2], /* CHEROKEE LETTER YO */ + [0x13f3, 0x13f3], /* CHEROKEE LETTER YU */ + [0x13f4, 0x13f4], /* CHEROKEE LETTER YV */ + [0x13f5, 0x13f5], + [0x13f6, 0x13f6], + [0x13f7, 0x13f7], + [0x13f8, 0x13f8], + [0x13f9, 0x13f9], + [0x13fa, 0x13fa], + [0x13fb, 0x13fb], + [0x13fc, 0x13fc], + [0x13fd, 0x13fd], + [0x13fe, 0x13fe], + [0x13ff, 0x13ff], + [0x1400, 0x1400], /* CANADIAN SYLLABICS HYPHEN */ + [0x1401, 0x1401], /* CANADIAN SYLLABICS E */ + [0x1402, 0x1402], /* CANADIAN SYLLABICS AAI */ + [0x1403, 0x1403], /* CANADIAN SYLLABICS I */ + [0x1404, 0x1404], /* CANADIAN SYLLABICS II */ + [0x1405, 0x1405], /* CANADIAN SYLLABICS O */ + [0x1406, 0x1406], /* CANADIAN SYLLABICS OO */ + [0x1407, 0x1407], /* CANADIAN SYLLABICS Y-CREE OO */ + [0x1408, 0x1408], /* CANADIAN SYLLABICS CARRIER EE */ + [0x1409, 0x1409], /* CANADIAN SYLLABICS CARRIER I */ + [0x140a, 0x140a], /* CANADIAN SYLLABICS A */ + [0x140b, 0x140b], /* CANADIAN SYLLABICS AA */ + [0x140c, 0x140c], /* CANADIAN SYLLABICS WE */ + [0x140d, 0x140d], /* CANADIAN SYLLABICS WEST-CREE WE */ + [0x140e, 0x140e], /* CANADIAN SYLLABICS WI */ + [0x140f, 0x140f], /* CANADIAN SYLLABICS WEST-CREE WI */ + [0x1410, 0x1410], /* CANADIAN SYLLABICS WII */ + [0x1411, 0x1411], /* CANADIAN SYLLABICS WEST-CREE WII */ + [0x1412, 0x1412], /* CANADIAN SYLLABICS WO */ + [0x1413, 0x1413], /* CANADIAN SYLLABICS WEST-CREE WO */ + [0x1414, 0x1414], /* CANADIAN SYLLABICS WOO */ + [0x1415, 0x1415], /* CANADIAN SYLLABICS WEST-CREE WOO */ + [0x1416, 0x1416], /* CANADIAN SYLLABICS NASKAPI WOO */ + [0x1417, 0x1417], /* CANADIAN SYLLABICS WA */ + [0x1418, 0x1418], /* CANADIAN SYLLABICS WEST-CREE WA */ + [0x1419, 0x1419], /* CANADIAN SYLLABICS WAA */ + [0x141a, 0x141a], /* CANADIAN SYLLABICS WEST-CREE WAA */ + [0x141b, 0x141b], /* CANADIAN SYLLABICS NASKAPI WAA */ + [0x141c, 0x141c], /* CANADIAN SYLLABICS AI */ + [0x141d, 0x141d], /* CANADIAN SYLLABICS Y-CREE W */ + [0x141e, 0x141e], /* CANADIAN SYLLABICS GLOTTAL STOP */ + [0x141f, 0x141f], /* CANADIAN SYLLABICS FINAL ACUTE */ + [0x1420, 0x1420], /* CANADIAN SYLLABICS FINAL GRAVE */ + [0x1421, 0x1421], /* CANADIAN SYLLABICS FINAL BOTTOM HALF RING */ + [0x1422, 0x1422], /* CANADIAN SYLLABICS FINAL TOP HALF RING */ + [0x1423, 0x1423], /* CANADIAN SYLLABICS FINAL RIGHT HALF RING */ + [0x1424, 0x1424], /* CANADIAN SYLLABICS FINAL RING */ + [0x1425, 0x1425], /* CANADIAN SYLLABICS FINAL DOUBLE ACUTE */ + [0x1426, 0x1426], /* CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES */ + [0x1427, 0x1427], /* CANADIAN SYLLABICS FINAL MIDDLE DOT */ + [0x1428, 0x1428], /* CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE */ + [0x1429, 0x1429], /* CANADIAN SYLLABICS FINAL PLUS */ + [0x142a, 0x142a], /* CANADIAN SYLLABICS FINAL DOWN TACK */ + [0x142b, 0x142b], /* CANADIAN SYLLABICS EN */ + [0x142c, 0x142c], /* CANADIAN SYLLABICS IN */ + [0x142d, 0x142d], /* CANADIAN SYLLABICS ON */ + [0x142e, 0x142e], /* CANADIAN SYLLABICS AN */ + [0x142f, 0x142f], /* CANADIAN SYLLABICS PE */ + [0x1430, 0x1430], /* CANADIAN SYLLABICS PAAI */ + [0x1431, 0x1431], /* CANADIAN SYLLABICS PI */ + [0x1432, 0x1432], /* CANADIAN SYLLABICS PII */ + [0x1433, 0x1433], /* CANADIAN SYLLABICS PO */ + [0x1434, 0x1434], /* CANADIAN SYLLABICS POO */ + [0x1435, 0x1435], /* CANADIAN SYLLABICS Y-CREE POO */ + [0x1436, 0x1436], /* CANADIAN SYLLABICS CARRIER HEE */ + [0x1437, 0x1437], /* CANADIAN SYLLABICS CARRIER HI */ + [0x1438, 0x1438], /* CANADIAN SYLLABICS PA */ + [0x1439, 0x1439], /* CANADIAN SYLLABICS PAA */ + [0x143a, 0x143a], /* CANADIAN SYLLABICS PWE */ + [0x143b, 0x143b], /* CANADIAN SYLLABICS WEST-CREE PWE */ + [0x143c, 0x143c], /* CANADIAN SYLLABICS PWI */ + [0x143d, 0x143d], /* CANADIAN SYLLABICS WEST-CREE PWI */ + [0x143e, 0x143e], /* CANADIAN SYLLABICS PWII */ + [0x143f, 0x143f], /* CANADIAN SYLLABICS WEST-CREE PWII */ + [0x1440, 0x1440], /* CANADIAN SYLLABICS PWO */ + [0x1441, 0x1441], /* CANADIAN SYLLABICS WEST-CREE PWO */ + [0x1442, 0x1442], /* CANADIAN SYLLABICS PWOO */ + [0x1443, 0x1443], /* CANADIAN SYLLABICS WEST-CREE PWOO */ + [0x1444, 0x1444], /* CANADIAN SYLLABICS PWA */ + [0x1445, 0x1445], /* CANADIAN SYLLABICS WEST-CREE PWA */ + [0x1446, 0x1446], /* CANADIAN SYLLABICS PWAA */ + [0x1447, 0x1447], /* CANADIAN SYLLABICS WEST-CREE PWAA */ + [0x1448, 0x1448], /* CANADIAN SYLLABICS Y-CREE PWAA */ + [0x1449, 0x1449], /* CANADIAN SYLLABICS P */ + [0x144a, 0x144a], /* CANADIAN SYLLABICS WEST-CREE P */ + [0x144b, 0x144b], /* CANADIAN SYLLABICS CARRIER H */ + [0x144c, 0x144c], /* CANADIAN SYLLABICS TE */ + [0x144d, 0x144d], /* CANADIAN SYLLABICS TAAI */ + [0x144e, 0x144e], /* CANADIAN SYLLABICS TI */ + [0x144f, 0x144f], /* CANADIAN SYLLABICS TII */ + [0x1450, 0x1450], /* CANADIAN SYLLABICS TO */ + [0x1451, 0x1451], /* CANADIAN SYLLABICS TOO */ + [0x1452, 0x1452], /* CANADIAN SYLLABICS Y-CREE TOO */ + [0x1453, 0x1453], /* CANADIAN SYLLABICS CARRIER DEE */ + [0x1454, 0x1454], /* CANADIAN SYLLABICS CARRIER DI */ + [0x1455, 0x1455], /* CANADIAN SYLLABICS TA */ + [0x1456, 0x1456], /* CANADIAN SYLLABICS TAA */ + [0x1457, 0x1457], /* CANADIAN SYLLABICS TWE */ + [0x1458, 0x1458], /* CANADIAN SYLLABICS WEST-CREE TWE */ + [0x1459, 0x1459], /* CANADIAN SYLLABICS TWI */ + [0x145a, 0x145a], /* CANADIAN SYLLABICS WEST-CREE TWI */ + [0x145b, 0x145b], /* CANADIAN SYLLABICS TWII */ + [0x145c, 0x145c], /* CANADIAN SYLLABICS WEST-CREE TWII */ + [0x145d, 0x145d], /* CANADIAN SYLLABICS TWO */ + [0x145e, 0x145e], /* CANADIAN SYLLABICS WEST-CREE TWO */ + [0x145f, 0x145f], /* CANADIAN SYLLABICS TWOO */ + [0x1460, 0x1460], /* CANADIAN SYLLABICS WEST-CREE TWOO */ + [0x1461, 0x1461], /* CANADIAN SYLLABICS TWA */ + [0x1462, 0x1462], /* CANADIAN SYLLABICS WEST-CREE TWA */ + [0x1463, 0x1463], /* CANADIAN SYLLABICS TWAA */ + [0x1464, 0x1464], /* CANADIAN SYLLABICS WEST-CREE TWAA */ + [0x1465, 0x1465], /* CANADIAN SYLLABICS NASKAPI TWAA */ + [0x1466, 0x1466], /* CANADIAN SYLLABICS T */ + [0x1467, 0x1467], /* CANADIAN SYLLABICS TTE */ + [0x1468, 0x1468], /* CANADIAN SYLLABICS TTI */ + [0x1469, 0x1469], /* CANADIAN SYLLABICS TTO */ + [0x146a, 0x146a], /* CANADIAN SYLLABICS TTA */ + [0x146b, 0x146b], /* CANADIAN SYLLABICS KE */ + [0x146c, 0x146c], /* CANADIAN SYLLABICS KAAI */ + [0x146d, 0x146d], /* CANADIAN SYLLABICS KI */ + [0x146e, 0x146e], /* CANADIAN SYLLABICS KII */ + [0x146f, 0x146f], /* CANADIAN SYLLABICS KO */ + [0x1470, 0x1470], /* CANADIAN SYLLABICS KOO */ + [0x1471, 0x1471], /* CANADIAN SYLLABICS Y-CREE KOO */ + [0x1472, 0x1472], /* CANADIAN SYLLABICS KA */ + [0x1473, 0x1473], /* CANADIAN SYLLABICS KAA */ + [0x1474, 0x1474], /* CANADIAN SYLLABICS KWE */ + [0x1475, 0x1475], /* CANADIAN SYLLABICS WEST-CREE KWE */ + [0x1476, 0x1476], /* CANADIAN SYLLABICS KWI */ + [0x1477, 0x1477], /* CANADIAN SYLLABICS WEST-CREE KWI */ + [0x1478, 0x1478], /* CANADIAN SYLLABICS KWII */ + [0x1479, 0x1479], /* CANADIAN SYLLABICS WEST-CREE KWII */ + [0x147a, 0x147a], /* CANADIAN SYLLABICS KWO */ + [0x147b, 0x147b], /* CANADIAN SYLLABICS WEST-CREE KWO */ + [0x147c, 0x147c], /* CANADIAN SYLLABICS KWOO */ + [0x147d, 0x147d], /* CANADIAN SYLLABICS WEST-CREE KWOO */ + [0x147e, 0x147e], /* CANADIAN SYLLABICS KWA */ + [0x147f, 0x147f], /* CANADIAN SYLLABICS WEST-CREE KWA */ + [0x1480, 0x1480], /* CANADIAN SYLLABICS KWAA */ + [0x1481, 0x1481], /* CANADIAN SYLLABICS WEST-CREE KWAA */ + [0x1482, 0x1482], /* CANADIAN SYLLABICS NASKAPI KWAA */ + [0x1483, 0x1483], /* CANADIAN SYLLABICS K */ + [0x1484, 0x1484], /* CANADIAN SYLLABICS KW */ + [0x1485, 0x1485], /* CANADIAN SYLLABICS SOUTH-SLAVEY KEH */ + [0x1486, 0x1486], /* CANADIAN SYLLABICS SOUTH-SLAVEY KIH */ + [0x1487, 0x1487], /* CANADIAN SYLLABICS SOUTH-SLAVEY KOH */ + [0x1488, 0x1488], /* CANADIAN SYLLABICS SOUTH-SLAVEY KAH */ + [0x1489, 0x1489], /* CANADIAN SYLLABICS CE */ + [0x148a, 0x148a], /* CANADIAN SYLLABICS CAAI */ + [0x148b, 0x148b], /* CANADIAN SYLLABICS CI */ + [0x148c, 0x148c], /* CANADIAN SYLLABICS CII */ + [0x148d, 0x148d], /* CANADIAN SYLLABICS CO */ + [0x148e, 0x148e], /* CANADIAN SYLLABICS COO */ + [0x148f, 0x148f], /* CANADIAN SYLLABICS Y-CREE COO */ + [0x1490, 0x1490], /* CANADIAN SYLLABICS CA */ + [0x1491, 0x1491], /* CANADIAN SYLLABICS CAA */ + [0x1492, 0x1492], /* CANADIAN SYLLABICS CWE */ + [0x1493, 0x1493], /* CANADIAN SYLLABICS WEST-CREE CWE */ + [0x1494, 0x1494], /* CANADIAN SYLLABICS CWI */ + [0x1495, 0x1495], /* CANADIAN SYLLABICS WEST-CREE CWI */ + [0x1496, 0x1496], /* CANADIAN SYLLABICS CWII */ + [0x1497, 0x1497], /* CANADIAN SYLLABICS WEST-CREE CWII */ + [0x1498, 0x1498], /* CANADIAN SYLLABICS CWO */ + [0x1499, 0x1499], /* CANADIAN SYLLABICS WEST-CREE CWO */ + [0x149a, 0x149a], /* CANADIAN SYLLABICS CWOO */ + [0x149b, 0x149b], /* CANADIAN SYLLABICS WEST-CREE CWOO */ + [0x149c, 0x149c], /* CANADIAN SYLLABICS CWA */ + [0x149d, 0x149d], /* CANADIAN SYLLABICS WEST-CREE CWA */ + [0x149e, 0x149e], /* CANADIAN SYLLABICS CWAA */ + [0x149f, 0x149f], /* CANADIAN SYLLABICS WEST-CREE CWAA */ + [0x14a0, 0x14a0], /* CANADIAN SYLLABICS NASKAPI CWAA */ + [0x14a1, 0x14a1], /* CANADIAN SYLLABICS C */ + [0x14a2, 0x14a2], /* CANADIAN SYLLABICS SAYISI TH */ + [0x14a3, 0x14a3], /* CANADIAN SYLLABICS ME */ + [0x14a4, 0x14a4], /* CANADIAN SYLLABICS MAAI */ + [0x14a5, 0x14a5], /* CANADIAN SYLLABICS MI */ + [0x14a6, 0x14a6], /* CANADIAN SYLLABICS MII */ + [0x14a7, 0x14a7], /* CANADIAN SYLLABICS MO */ + [0x14a8, 0x14a8], /* CANADIAN SYLLABICS MOO */ + [0x14a9, 0x14a9], /* CANADIAN SYLLABICS Y-CREE MOO */ + [0x14aa, 0x14aa], /* CANADIAN SYLLABICS MA */ + [0x14ab, 0x14ab], /* CANADIAN SYLLABICS MAA */ + [0x14ac, 0x14ac], /* CANADIAN SYLLABICS MWE */ + [0x14ad, 0x14ad], /* CANADIAN SYLLABICS WEST-CREE MWE */ + [0x14ae, 0x14ae], /* CANADIAN SYLLABICS MWI */ + [0x14af, 0x14af], /* CANADIAN SYLLABICS WEST-CREE MWI */ + [0x14b0, 0x14b0], /* CANADIAN SYLLABICS MWII */ + [0x14b1, 0x14b1], /* CANADIAN SYLLABICS WEST-CREE MWII */ + [0x14b2, 0x14b2], /* CANADIAN SYLLABICS MWO */ + [0x14b3, 0x14b3], /* CANADIAN SYLLABICS WEST-CREE MWO */ + [0x14b4, 0x14b4], /* CANADIAN SYLLABICS MWOO */ + [0x14b5, 0x14b5], /* CANADIAN SYLLABICS WEST-CREE MWOO */ + [0x14b6, 0x14b6], /* CANADIAN SYLLABICS MWA */ + [0x14b7, 0x14b7], /* CANADIAN SYLLABICS WEST-CREE MWA */ + [0x14b8, 0x14b8], /* CANADIAN SYLLABICS MWAA */ + [0x14b9, 0x14b9], /* CANADIAN SYLLABICS WEST-CREE MWAA */ + [0x14ba, 0x14ba], /* CANADIAN SYLLABICS NASKAPI MWAA */ + [0x14bb, 0x14bb], /* CANADIAN SYLLABICS M */ + [0x14bc, 0x14bc], /* CANADIAN SYLLABICS WEST-CREE M */ + [0x14bd, 0x14bd], /* CANADIAN SYLLABICS MH */ + [0x14be, 0x14be], /* CANADIAN SYLLABICS ATHAPASCAN M */ + [0x14bf, 0x14bf], /* CANADIAN SYLLABICS SAYISI M */ + [0x14c0, 0x14c0], /* CANADIAN SYLLABICS NE */ + [0x14c1, 0x14c1], /* CANADIAN SYLLABICS NAAI */ + [0x14c2, 0x14c2], /* CANADIAN SYLLABICS NI */ + [0x14c3, 0x14c3], /* CANADIAN SYLLABICS NII */ + [0x14c4, 0x14c4], /* CANADIAN SYLLABICS NO */ + [0x14c5, 0x14c5], /* CANADIAN SYLLABICS NOO */ + [0x14c6, 0x14c6], /* CANADIAN SYLLABICS Y-CREE NOO */ + [0x14c7, 0x14c7], /* CANADIAN SYLLABICS NA */ + [0x14c8, 0x14c8], /* CANADIAN SYLLABICS NAA */ + [0x14c9, 0x14c9], /* CANADIAN SYLLABICS NWE */ + [0x14ca, 0x14ca], /* CANADIAN SYLLABICS WEST-CREE NWE */ + [0x14cb, 0x14cb], /* CANADIAN SYLLABICS NWA */ + [0x14cc, 0x14cc], /* CANADIAN SYLLABICS WEST-CREE NWA */ + [0x14cd, 0x14cd], /* CANADIAN SYLLABICS NWAA */ + [0x14ce, 0x14ce], /* CANADIAN SYLLABICS WEST-CREE NWAA */ + [0x14cf, 0x14cf], /* CANADIAN SYLLABICS NASKAPI NWAA */ + [0x14d0, 0x14d0], /* CANADIAN SYLLABICS N */ + [0x14d1, 0x14d1], /* CANADIAN SYLLABICS CARRIER NG */ + [0x14d2, 0x14d2], /* CANADIAN SYLLABICS NH */ + [0x14d3, 0x14d3], /* CANADIAN SYLLABICS LE */ + [0x14d4, 0x14d4], /* CANADIAN SYLLABICS LAAI */ + [0x14d5, 0x14d5], /* CANADIAN SYLLABICS LI */ + [0x14d6, 0x14d6], /* CANADIAN SYLLABICS LII */ + [0x14d7, 0x14d7], /* CANADIAN SYLLABICS LO */ + [0x14d8, 0x14d8], /* CANADIAN SYLLABICS LOO */ + [0x14d9, 0x14d9], /* CANADIAN SYLLABICS Y-CREE LOO */ + [0x14da, 0x14da], /* CANADIAN SYLLABICS LA */ + [0x14db, 0x14db], /* CANADIAN SYLLABICS LAA */ + [0x14dc, 0x14dc], /* CANADIAN SYLLABICS LWE */ + [0x14dd, 0x14dd], /* CANADIAN SYLLABICS WEST-CREE LWE */ + [0x14de, 0x14de], /* CANADIAN SYLLABICS LWI */ + [0x14df, 0x14df], /* CANADIAN SYLLABICS WEST-CREE LWI */ + [0x14e0, 0x14e0], /* CANADIAN SYLLABICS LWII */ + [0x14e1, 0x14e1], /* CANADIAN SYLLABICS WEST-CREE LWII */ + [0x14e2, 0x14e2], /* CANADIAN SYLLABICS LWO */ + [0x14e3, 0x14e3], /* CANADIAN SYLLABICS WEST-CREE LWO */ + [0x14e4, 0x14e4], /* CANADIAN SYLLABICS LWOO */ + [0x14e5, 0x14e5], /* CANADIAN SYLLABICS WEST-CREE LWOO */ + [0x14e6, 0x14e6], /* CANADIAN SYLLABICS LWA */ + [0x14e7, 0x14e7], /* CANADIAN SYLLABICS WEST-CREE LWA */ + [0x14e8, 0x14e8], /* CANADIAN SYLLABICS LWAA */ + [0x14e9, 0x14e9], /* CANADIAN SYLLABICS WEST-CREE LWAA */ + [0x14ea, 0x14ea], /* CANADIAN SYLLABICS L */ + [0x14eb, 0x14eb], /* CANADIAN SYLLABICS WEST-CREE L */ + [0x14ec, 0x14ec], /* CANADIAN SYLLABICS MEDIAL L */ + [0x14ed, 0x14ed], /* CANADIAN SYLLABICS SE */ + [0x14ee, 0x14ee], /* CANADIAN SYLLABICS SAAI */ + [0x14ef, 0x14ef], /* CANADIAN SYLLABICS SI */ + [0x14f0, 0x14f0], /* CANADIAN SYLLABICS SII */ + [0x14f1, 0x14f1], /* CANADIAN SYLLABICS SO */ + [0x14f2, 0x14f2], /* CANADIAN SYLLABICS SOO */ + [0x14f3, 0x14f3], /* CANADIAN SYLLABICS Y-CREE SOO */ + [0x14f4, 0x14f4], /* CANADIAN SYLLABICS SA */ + [0x14f5, 0x14f5], /* CANADIAN SYLLABICS SAA */ + [0x14f6, 0x14f6], /* CANADIAN SYLLABICS SWE */ + [0x14f7, 0x14f7], /* CANADIAN SYLLABICS WEST-CREE SWE */ + [0x14f8, 0x14f8], /* CANADIAN SYLLABICS SWI */ + [0x14f9, 0x14f9], /* CANADIAN SYLLABICS WEST-CREE SWI */ + [0x14fa, 0x14fa], /* CANADIAN SYLLABICS SWII */ + [0x14fb, 0x14fb], /* CANADIAN SYLLABICS WEST-CREE SWII */ + [0x14fc, 0x14fc], /* CANADIAN SYLLABICS SWO */ + [0x14fd, 0x14fd], /* CANADIAN SYLLABICS WEST-CREE SWO */ + [0x14fe, 0x14fe], /* CANADIAN SYLLABICS SWOO */ + [0x14ff, 0x14ff], /* CANADIAN SYLLABICS WEST-CREE SWOO */ + [0x1500, 0x1500], /* CANADIAN SYLLABICS SWA */ + [0x1501, 0x1501], /* CANADIAN SYLLABICS WEST-CREE SWA */ + [0x1502, 0x1502], /* CANADIAN SYLLABICS SWAA */ + [0x1503, 0x1503], /* CANADIAN SYLLABICS WEST-CREE SWAA */ + [0x1504, 0x1504], /* CANADIAN SYLLABICS NASKAPI SWAA */ + [0x1505, 0x1505], /* CANADIAN SYLLABICS S */ + [0x1506, 0x1506], /* CANADIAN SYLLABICS ATHAPASCAN S */ + [0x1507, 0x1507], /* CANADIAN SYLLABICS SW */ + [0x1508, 0x1508], /* CANADIAN SYLLABICS BLACKFOOT S */ + [0x1509, 0x1509], /* CANADIAN SYLLABICS MOOSE-CREE SK */ + [0x150a, 0x150a], /* CANADIAN SYLLABICS NASKAPI SKW */ + [0x150b, 0x150b], /* CANADIAN SYLLABICS NASKAPI S-W */ + [0x150c, 0x150c], /* CANADIAN SYLLABICS NASKAPI SPWA */ + [0x150d, 0x150d], /* CANADIAN SYLLABICS NASKAPI STWA */ + [0x150e, 0x150e], /* CANADIAN SYLLABICS NASKAPI SKWA */ + [0x150f, 0x150f], /* CANADIAN SYLLABICS NASKAPI SCWA */ + [0x1510, 0x1510], /* CANADIAN SYLLABICS SHE */ + [0x1511, 0x1511], /* CANADIAN SYLLABICS SHI */ + [0x1512, 0x1512], /* CANADIAN SYLLABICS SHII */ + [0x1513, 0x1513], /* CANADIAN SYLLABICS SHO */ + [0x1514, 0x1514], /* CANADIAN SYLLABICS SHOO */ + [0x1515, 0x1515], /* CANADIAN SYLLABICS SHA */ + [0x1516, 0x1516], /* CANADIAN SYLLABICS SHAA */ + [0x1517, 0x1517], /* CANADIAN SYLLABICS SHWE */ + [0x1518, 0x1518], /* CANADIAN SYLLABICS WEST-CREE SHWE */ + [0x1519, 0x1519], /* CANADIAN SYLLABICS SHWI */ + [0x151a, 0x151a], /* CANADIAN SYLLABICS WEST-CREE SHWI */ + [0x151b, 0x151b], /* CANADIAN SYLLABICS SHWII */ + [0x151c, 0x151c], /* CANADIAN SYLLABICS WEST-CREE SHWII */ + [0x151d, 0x151d], /* CANADIAN SYLLABICS SHWO */ + [0x151e, 0x151e], /* CANADIAN SYLLABICS WEST-CREE SHWO */ + [0x151f, 0x151f], /* CANADIAN SYLLABICS SHWOO */ + [0x1520, 0x1520], /* CANADIAN SYLLABICS WEST-CREE SHWOO */ + [0x1521, 0x1521], /* CANADIAN SYLLABICS SHWA */ + [0x1522, 0x1522], /* CANADIAN SYLLABICS WEST-CREE SHWA */ + [0x1523, 0x1523], /* CANADIAN SYLLABICS SHWAA */ + [0x1524, 0x1524], /* CANADIAN SYLLABICS WEST-CREE SHWAA */ + [0x1525, 0x1525], /* CANADIAN SYLLABICS SH */ + [0x1526, 0x1526], /* CANADIAN SYLLABICS YE */ + [0x1527, 0x1527], /* CANADIAN SYLLABICS YAAI */ + [0x1528, 0x1528], /* CANADIAN SYLLABICS YI */ + [0x1529, 0x1529], /* CANADIAN SYLLABICS YII */ + [0x152a, 0x152a], /* CANADIAN SYLLABICS YO */ + [0x152b, 0x152b], /* CANADIAN SYLLABICS YOO */ + [0x152c, 0x152c], /* CANADIAN SYLLABICS Y-CREE YOO */ + [0x152d, 0x152d], /* CANADIAN SYLLABICS YA */ + [0x152e, 0x152e], /* CANADIAN SYLLABICS YAA */ + [0x152f, 0x152f], /* CANADIAN SYLLABICS YWE */ + [0x1530, 0x1530], /* CANADIAN SYLLABICS WEST-CREE YWE */ + [0x1531, 0x1531], /* CANADIAN SYLLABICS YWI */ + [0x1532, 0x1532], /* CANADIAN SYLLABICS WEST-CREE YWI */ + [0x1533, 0x1533], /* CANADIAN SYLLABICS YWII */ + [0x1534, 0x1534], /* CANADIAN SYLLABICS WEST-CREE YWII */ + [0x1535, 0x1535], /* CANADIAN SYLLABICS YWO */ + [0x1536, 0x1536], /* CANADIAN SYLLABICS WEST-CREE YWO */ + [0x1537, 0x1537], /* CANADIAN SYLLABICS YWOO */ + [0x1538, 0x1538], /* CANADIAN SYLLABICS WEST-CREE YWOO */ + [0x1539, 0x1539], /* CANADIAN SYLLABICS YWA */ + [0x153a, 0x153a], /* CANADIAN SYLLABICS WEST-CREE YWA */ + [0x153b, 0x153b], /* CANADIAN SYLLABICS YWAA */ + [0x153c, 0x153c], /* CANADIAN SYLLABICS WEST-CREE YWAA */ + [0x153d, 0x153d], /* CANADIAN SYLLABICS NASKAPI YWAA */ + [0x153e, 0x153e], /* CANADIAN SYLLABICS Y */ + [0x153f, 0x153f], /* CANADIAN SYLLABICS BIBLE-CREE Y */ + [0x1540, 0x1540], /* CANADIAN SYLLABICS WEST-CREE Y */ + [0x1541, 0x1541], /* CANADIAN SYLLABICS SAYISI YI */ + [0x1542, 0x1542], /* CANADIAN SYLLABICS RE */ + [0x1543, 0x1543], /* CANADIAN SYLLABICS R-CREE RE */ + [0x1544, 0x1544], /* CANADIAN SYLLABICS WEST-CREE LE */ + [0x1545, 0x1545], /* CANADIAN SYLLABICS RAAI */ + [0x1546, 0x1546], /* CANADIAN SYLLABICS RI */ + [0x1547, 0x1547], /* CANADIAN SYLLABICS RII */ + [0x1548, 0x1548], /* CANADIAN SYLLABICS RO */ + [0x1549, 0x1549], /* CANADIAN SYLLABICS ROO */ + [0x154a, 0x154a], /* CANADIAN SYLLABICS WEST-CREE LO */ + [0x154b, 0x154b], /* CANADIAN SYLLABICS RA */ + [0x154c, 0x154c], /* CANADIAN SYLLABICS RAA */ + [0x154d, 0x154d], /* CANADIAN SYLLABICS WEST-CREE LA */ + [0x154e, 0x154e], /* CANADIAN SYLLABICS RWAA */ + [0x154f, 0x154f], /* CANADIAN SYLLABICS WEST-CREE RWAA */ + [0x1550, 0x1550], /* CANADIAN SYLLABICS R */ + [0x1551, 0x1551], /* CANADIAN SYLLABICS WEST-CREE R */ + [0x1552, 0x1552], /* CANADIAN SYLLABICS MEDIAL R */ + [0x1553, 0x1553], /* CANADIAN SYLLABICS FE */ + [0x1554, 0x1554], /* CANADIAN SYLLABICS FAAI */ + [0x1555, 0x1555], /* CANADIAN SYLLABICS FI */ + [0x1556, 0x1556], /* CANADIAN SYLLABICS FII */ + [0x1557, 0x1557], /* CANADIAN SYLLABICS FO */ + [0x1558, 0x1558], /* CANADIAN SYLLABICS FOO */ + [0x1559, 0x1559], /* CANADIAN SYLLABICS FA */ + [0x155a, 0x155a], /* CANADIAN SYLLABICS FAA */ + [0x155b, 0x155b], /* CANADIAN SYLLABICS FWAA */ + [0x155c, 0x155c], /* CANADIAN SYLLABICS WEST-CREE FWAA */ + [0x155d, 0x155d], /* CANADIAN SYLLABICS F */ + [0x155e, 0x155e], /* CANADIAN SYLLABICS THE */ + [0x155f, 0x155f], /* CANADIAN SYLLABICS N-CREE THE */ + [0x1560, 0x1560], /* CANADIAN SYLLABICS THI */ + [0x1561, 0x1561], /* CANADIAN SYLLABICS N-CREE THI */ + [0x1562, 0x1562], /* CANADIAN SYLLABICS THII */ + [0x1563, 0x1563], /* CANADIAN SYLLABICS N-CREE THII */ + [0x1564, 0x1564], /* CANADIAN SYLLABICS THO */ + [0x1565, 0x1565], /* CANADIAN SYLLABICS THOO */ + [0x1566, 0x1566], /* CANADIAN SYLLABICS THA */ + [0x1567, 0x1567], /* CANADIAN SYLLABICS THAA */ + [0x1568, 0x1568], /* CANADIAN SYLLABICS THWAA */ + [0x1569, 0x1569], /* CANADIAN SYLLABICS WEST-CREE THWAA */ + [0x156a, 0x156a], /* CANADIAN SYLLABICS TH */ + [0x156b, 0x156b], /* CANADIAN SYLLABICS TTHE */ + [0x156c, 0x156c], /* CANADIAN SYLLABICS TTHI */ + [0x156d, 0x156d], /* CANADIAN SYLLABICS TTHO */ + [0x156e, 0x156e], /* CANADIAN SYLLABICS TTHA */ + [0x156f, 0x156f], /* CANADIAN SYLLABICS TTH */ + [0x1570, 0x1570], /* CANADIAN SYLLABICS TYE */ + [0x1571, 0x1571], /* CANADIAN SYLLABICS TYI */ + [0x1572, 0x1572], /* CANADIAN SYLLABICS TYO */ + [0x1573, 0x1573], /* CANADIAN SYLLABICS TYA */ + [0x1574, 0x1574], /* CANADIAN SYLLABICS NUNAVIK HE */ + [0x1575, 0x1575], /* CANADIAN SYLLABICS NUNAVIK HI */ + [0x1576, 0x1576], /* CANADIAN SYLLABICS NUNAVIK HII */ + [0x1577, 0x1577], /* CANADIAN SYLLABICS NUNAVIK HO */ + [0x1578, 0x1578], /* CANADIAN SYLLABICS NUNAVIK HOO */ + [0x1579, 0x1579], /* CANADIAN SYLLABICS NUNAVIK HA */ + [0x157a, 0x157a], /* CANADIAN SYLLABICS NUNAVIK HAA */ + [0x157b, 0x157b], /* CANADIAN SYLLABICS NUNAVIK H */ + [0x157c, 0x157c], /* CANADIAN SYLLABICS NUNAVUT H */ + [0x157d, 0x157d], /* CANADIAN SYLLABICS HK */ + [0x157e, 0x157e], /* CANADIAN SYLLABICS QAAI */ + [0x157f, 0x157f], /* CANADIAN SYLLABICS QI */ + [0x1580, 0x1580], /* CANADIAN SYLLABICS QII */ + [0x1581, 0x1581], /* CANADIAN SYLLABICS QO */ + [0x1582, 0x1582], /* CANADIAN SYLLABICS QOO */ + [0x1583, 0x1583], /* CANADIAN SYLLABICS QA */ + [0x1584, 0x1584], /* CANADIAN SYLLABICS QAA */ + [0x1585, 0x1585], /* CANADIAN SYLLABICS Q */ + [0x1586, 0x1586], /* CANADIAN SYLLABICS TLHE */ + [0x1587, 0x1587], /* CANADIAN SYLLABICS TLHI */ + [0x1588, 0x1588], /* CANADIAN SYLLABICS TLHO */ + [0x1589, 0x1589], /* CANADIAN SYLLABICS TLHA */ + [0x158a, 0x158a], /* CANADIAN SYLLABICS WEST-CREE RE */ + [0x158b, 0x158b], /* CANADIAN SYLLABICS WEST-CREE RI */ + [0x158c, 0x158c], /* CANADIAN SYLLABICS WEST-CREE RO */ + [0x158d, 0x158d], /* CANADIAN SYLLABICS WEST-CREE RA */ + [0x158e, 0x158e], /* CANADIAN SYLLABICS NGAAI */ + [0x158f, 0x158f], /* CANADIAN SYLLABICS NGI */ + [0x1590, 0x1590], /* CANADIAN SYLLABICS NGII */ + [0x1591, 0x1591], /* CANADIAN SYLLABICS NGO */ + [0x1592, 0x1592], /* CANADIAN SYLLABICS NGOO */ + [0x1593, 0x1593], /* CANADIAN SYLLABICS NGA */ + [0x1594, 0x1594], /* CANADIAN SYLLABICS NGAA */ + [0x1595, 0x1595], /* CANADIAN SYLLABICS NG */ + [0x1596, 0x1596], /* CANADIAN SYLLABICS NNG */ + [0x1597, 0x1597], /* CANADIAN SYLLABICS SAYISI SHE */ + [0x1598, 0x1598], /* CANADIAN SYLLABICS SAYISI SHI */ + [0x1599, 0x1599], /* CANADIAN SYLLABICS SAYISI SHO */ + [0x159a, 0x159a], /* CANADIAN SYLLABICS SAYISI SHA */ + [0x159b, 0x159b], /* CANADIAN SYLLABICS WOODS-CREE THE */ + [0x159c, 0x159c], /* CANADIAN SYLLABICS WOODS-CREE THI */ + [0x159d, 0x159d], /* CANADIAN SYLLABICS WOODS-CREE THO */ + [0x159e, 0x159e], /* CANADIAN SYLLABICS WOODS-CREE THA */ + [0x159f, 0x159f], /* CANADIAN SYLLABICS WOODS-CREE TH */ + [0x15a0, 0x15a0], /* CANADIAN SYLLABICS LHI */ + [0x15a1, 0x15a1], /* CANADIAN SYLLABICS LHII */ + [0x15a2, 0x15a2], /* CANADIAN SYLLABICS LHO */ + [0x15a3, 0x15a3], /* CANADIAN SYLLABICS LHOO */ + [0x15a4, 0x15a4], /* CANADIAN SYLLABICS LHA */ + [0x15a5, 0x15a5], /* CANADIAN SYLLABICS LHAA */ + [0x15a6, 0x15a6], /* CANADIAN SYLLABICS LH */ + [0x15a7, 0x15a7], /* CANADIAN SYLLABICS TH-CREE THE */ + [0x15a8, 0x15a8], /* CANADIAN SYLLABICS TH-CREE THI */ + [0x15a9, 0x15a9], /* CANADIAN SYLLABICS TH-CREE THII */ + [0x15aa, 0x15aa], /* CANADIAN SYLLABICS TH-CREE THO */ + [0x15ab, 0x15ab], /* CANADIAN SYLLABICS TH-CREE THOO */ + [0x15ac, 0x15ac], /* CANADIAN SYLLABICS TH-CREE THA */ + [0x15ad, 0x15ad], /* CANADIAN SYLLABICS TH-CREE THAA */ + [0x15ae, 0x15ae], /* CANADIAN SYLLABICS TH-CREE TH */ + [0x15af, 0x15af], /* CANADIAN SYLLABICS AIVILIK B */ + [0x15b0, 0x15b0], /* CANADIAN SYLLABICS BLACKFOOT E */ + [0x15b1, 0x15b1], /* CANADIAN SYLLABICS BLACKFOOT I */ + [0x15b2, 0x15b2], /* CANADIAN SYLLABICS BLACKFOOT O */ + [0x15b3, 0x15b3], /* CANADIAN SYLLABICS BLACKFOOT A */ + [0x15b4, 0x15b4], /* CANADIAN SYLLABICS BLACKFOOT WE */ + [0x15b5, 0x15b5], /* CANADIAN SYLLABICS BLACKFOOT WI */ + [0x15b6, 0x15b6], /* CANADIAN SYLLABICS BLACKFOOT WO */ + [0x15b7, 0x15b7], /* CANADIAN SYLLABICS BLACKFOOT WA */ + [0x15b8, 0x15b8], /* CANADIAN SYLLABICS BLACKFOOT NE */ + [0x15b9, 0x15b9], /* CANADIAN SYLLABICS BLACKFOOT NI */ + [0x15ba, 0x15ba], /* CANADIAN SYLLABICS BLACKFOOT NO */ + [0x15bb, 0x15bb], /* CANADIAN SYLLABICS BLACKFOOT NA */ + [0x15bc, 0x15bc], /* CANADIAN SYLLABICS BLACKFOOT KE */ + [0x15bd, 0x15bd], /* CANADIAN SYLLABICS BLACKFOOT KI */ + [0x15be, 0x15be], /* CANADIAN SYLLABICS BLACKFOOT KO */ + [0x15bf, 0x15bf], /* CANADIAN SYLLABICS BLACKFOOT KA */ + [0x15c0, 0x15c0], /* CANADIAN SYLLABICS SAYISI HE */ + [0x15c1, 0x15c1], /* CANADIAN SYLLABICS SAYISI HI */ + [0x15c2, 0x15c2], /* CANADIAN SYLLABICS SAYISI HO */ + [0x15c3, 0x15c3], /* CANADIAN SYLLABICS SAYISI HA */ + [0x15c4, 0x15c4], /* CANADIAN SYLLABICS CARRIER GHU */ + [0x15c5, 0x15c5], /* CANADIAN SYLLABICS CARRIER GHO */ + [0x15c6, 0x15c6], /* CANADIAN SYLLABICS CARRIER GHE */ + [0x15c7, 0x15c7], /* CANADIAN SYLLABICS CARRIER GHEE */ + [0x15c8, 0x15c8], /* CANADIAN SYLLABICS CARRIER GHI */ + [0x15c9, 0x15c9], /* CANADIAN SYLLABICS CARRIER GHA */ + [0x15ca, 0x15ca], /* CANADIAN SYLLABICS CARRIER RU */ + [0x15cb, 0x15cb], /* CANADIAN SYLLABICS CARRIER RO */ + [0x15cc, 0x15cc], /* CANADIAN SYLLABICS CARRIER RE */ + [0x15cd, 0x15cd], /* CANADIAN SYLLABICS CARRIER REE */ + [0x15ce, 0x15ce], /* CANADIAN SYLLABICS CARRIER RI */ + [0x15cf, 0x15cf], /* CANADIAN SYLLABICS CARRIER RA */ + [0x15d0, 0x15d0], /* CANADIAN SYLLABICS CARRIER WU */ + [0x15d1, 0x15d1], /* CANADIAN SYLLABICS CARRIER WO */ + [0x15d2, 0x15d2], /* CANADIAN SYLLABICS CARRIER WE */ + [0x15d3, 0x15d3], /* CANADIAN SYLLABICS CARRIER WEE */ + [0x15d4, 0x15d4], /* CANADIAN SYLLABICS CARRIER WI */ + [0x15d5, 0x15d5], /* CANADIAN SYLLABICS CARRIER WA */ + [0x15d6, 0x15d6], /* CANADIAN SYLLABICS CARRIER HWU */ + [0x15d7, 0x15d7], /* CANADIAN SYLLABICS CARRIER HWO */ + [0x15d8, 0x15d8], /* CANADIAN SYLLABICS CARRIER HWE */ + [0x15d9, 0x15d9], /* CANADIAN SYLLABICS CARRIER HWEE */ + [0x15da, 0x15da], /* CANADIAN SYLLABICS CARRIER HWI */ + [0x15db, 0x15db], /* CANADIAN SYLLABICS CARRIER HWA */ + [0x15dc, 0x15dc], /* CANADIAN SYLLABICS CARRIER THU */ + [0x15dd, 0x15dd], /* CANADIAN SYLLABICS CARRIER THO */ + [0x15de, 0x15de], /* CANADIAN SYLLABICS CARRIER THE */ + [0x15df, 0x15df], /* CANADIAN SYLLABICS CARRIER THEE */ + [0x15e0, 0x15e0], /* CANADIAN SYLLABICS CARRIER THI */ + [0x15e1, 0x15e1], /* CANADIAN SYLLABICS CARRIER THA */ + [0x15e2, 0x15e2], /* CANADIAN SYLLABICS CARRIER TTU */ + [0x15e3, 0x15e3], /* CANADIAN SYLLABICS CARRIER TTO */ + [0x15e4, 0x15e4], /* CANADIAN SYLLABICS CARRIER TTE */ + [0x15e5, 0x15e5], /* CANADIAN SYLLABICS CARRIER TTEE */ + [0x15e6, 0x15e6], /* CANADIAN SYLLABICS CARRIER TTI */ + [0x15e7, 0x15e7], /* CANADIAN SYLLABICS CARRIER TTA */ + [0x15e8, 0x15e8], /* CANADIAN SYLLABICS CARRIER PU */ + [0x15e9, 0x15e9], /* CANADIAN SYLLABICS CARRIER PO */ + [0x15ea, 0x15ea], /* CANADIAN SYLLABICS CARRIER PE */ + [0x15eb, 0x15eb], /* CANADIAN SYLLABICS CARRIER PEE */ + [0x15ec, 0x15ec], /* CANADIAN SYLLABICS CARRIER PI */ + [0x15ed, 0x15ed], /* CANADIAN SYLLABICS CARRIER PA */ + [0x15ee, 0x15ee], /* CANADIAN SYLLABICS CARRIER P */ + [0x15ef, 0x15ef], /* CANADIAN SYLLABICS CARRIER GU */ + [0x15f0, 0x15f0], /* CANADIAN SYLLABICS CARRIER GO */ + [0x15f1, 0x15f1], /* CANADIAN SYLLABICS CARRIER GE */ + [0x15f2, 0x15f2], /* CANADIAN SYLLABICS CARRIER GEE */ + [0x15f3, 0x15f3], /* CANADIAN SYLLABICS CARRIER GI */ + [0x15f4, 0x15f4], /* CANADIAN SYLLABICS CARRIER GA */ + [0x15f5, 0x15f5], /* CANADIAN SYLLABICS CARRIER KHU */ + [0x15f6, 0x15f6], /* CANADIAN SYLLABICS CARRIER KHO */ + [0x15f7, 0x15f7], /* CANADIAN SYLLABICS CARRIER KHE */ + [0x15f8, 0x15f8], /* CANADIAN SYLLABICS CARRIER KHEE */ + [0x15f9, 0x15f9], /* CANADIAN SYLLABICS CARRIER KHI */ + [0x15fa, 0x15fa], /* CANADIAN SYLLABICS CARRIER KHA */ + [0x15fb, 0x15fb], /* CANADIAN SYLLABICS CARRIER KKU */ + [0x15fc, 0x15fc], /* CANADIAN SYLLABICS CARRIER KKO */ + [0x15fd, 0x15fd], /* CANADIAN SYLLABICS CARRIER KKE */ + [0x15fe, 0x15fe], /* CANADIAN SYLLABICS CARRIER KKEE */ + [0x15ff, 0x15ff], /* CANADIAN SYLLABICS CARRIER KKI */ + [0x1600, 0x1600], /* CANADIAN SYLLABICS CARRIER KKA */ + [0x1601, 0x1601], /* CANADIAN SYLLABICS CARRIER KK */ + [0x1602, 0x1602], /* CANADIAN SYLLABICS CARRIER NU */ + [0x1603, 0x1603], /* CANADIAN SYLLABICS CARRIER NO */ + [0x1604, 0x1604], /* CANADIAN SYLLABICS CARRIER NE */ + [0x1605, 0x1605], /* CANADIAN SYLLABICS CARRIER NEE */ + [0x1606, 0x1606], /* CANADIAN SYLLABICS CARRIER NI */ + [0x1607, 0x1607], /* CANADIAN SYLLABICS CARRIER NA */ + [0x1608, 0x1608], /* CANADIAN SYLLABICS CARRIER MU */ + [0x1609, 0x1609], /* CANADIAN SYLLABICS CARRIER MO */ + [0x160a, 0x160a], /* CANADIAN SYLLABICS CARRIER ME */ + [0x160b, 0x160b], /* CANADIAN SYLLABICS CARRIER MEE */ + [0x160c, 0x160c], /* CANADIAN SYLLABICS CARRIER MI */ + [0x160d, 0x160d], /* CANADIAN SYLLABICS CARRIER MA */ + [0x160e, 0x160e], /* CANADIAN SYLLABICS CARRIER YU */ + [0x160f, 0x160f], /* CANADIAN SYLLABICS CARRIER YO */ + [0x1610, 0x1610], /* CANADIAN SYLLABICS CARRIER YE */ + [0x1611, 0x1611], /* CANADIAN SYLLABICS CARRIER YEE */ + [0x1612, 0x1612], /* CANADIAN SYLLABICS CARRIER YI */ + [0x1613, 0x1613], /* CANADIAN SYLLABICS CARRIER YA */ + [0x1614, 0x1614], /* CANADIAN SYLLABICS CARRIER JU */ + [0x1615, 0x1615], /* CANADIAN SYLLABICS SAYISI JU */ + [0x1616, 0x1616], /* CANADIAN SYLLABICS CARRIER JO */ + [0x1617, 0x1617], /* CANADIAN SYLLABICS CARRIER JE */ + [0x1618, 0x1618], /* CANADIAN SYLLABICS CARRIER JEE */ + [0x1619, 0x1619], /* CANADIAN SYLLABICS CARRIER JI */ + [0x161a, 0x161a], /* CANADIAN SYLLABICS SAYISI JI */ + [0x161b, 0x161b], /* CANADIAN SYLLABICS CARRIER JA */ + [0x161c, 0x161c], /* CANADIAN SYLLABICS CARRIER JJU */ + [0x161d, 0x161d], /* CANADIAN SYLLABICS CARRIER JJO */ + [0x161e, 0x161e], /* CANADIAN SYLLABICS CARRIER JJE */ + [0x161f, 0x161f], /* CANADIAN SYLLABICS CARRIER JJEE */ + [0x1620, 0x1620], /* CANADIAN SYLLABICS CARRIER JJI */ + [0x1621, 0x1621], /* CANADIAN SYLLABICS CARRIER JJA */ + [0x1622, 0x1622], /* CANADIAN SYLLABICS CARRIER LU */ + [0x1623, 0x1623], /* CANADIAN SYLLABICS CARRIER LO */ + [0x1624, 0x1624], /* CANADIAN SYLLABICS CARRIER LE */ + [0x1625, 0x1625], /* CANADIAN SYLLABICS CARRIER LEE */ + [0x1626, 0x1626], /* CANADIAN SYLLABICS CARRIER LI */ + [0x1627, 0x1627], /* CANADIAN SYLLABICS CARRIER LA */ + [0x1628, 0x1628], /* CANADIAN SYLLABICS CARRIER DLU */ + [0x1629, 0x1629], /* CANADIAN SYLLABICS CARRIER DLO */ + [0x162a, 0x162a], /* CANADIAN SYLLABICS CARRIER DLE */ + [0x162b, 0x162b], /* CANADIAN SYLLABICS CARRIER DLEE */ + [0x162c, 0x162c], /* CANADIAN SYLLABICS CARRIER DLI */ + [0x162d, 0x162d], /* CANADIAN SYLLABICS CARRIER DLA */ + [0x162e, 0x162e], /* CANADIAN SYLLABICS CARRIER LHU */ + [0x162f, 0x162f], /* CANADIAN SYLLABICS CARRIER LHO */ + [0x1630, 0x1630], /* CANADIAN SYLLABICS CARRIER LHE */ + [0x1631, 0x1631], /* CANADIAN SYLLABICS CARRIER LHEE */ + [0x1632, 0x1632], /* CANADIAN SYLLABICS CARRIER LHI */ + [0x1633, 0x1633], /* CANADIAN SYLLABICS CARRIER LHA */ + [0x1634, 0x1634], /* CANADIAN SYLLABICS CARRIER TLHU */ + [0x1635, 0x1635], /* CANADIAN SYLLABICS CARRIER TLHO */ + [0x1636, 0x1636], /* CANADIAN SYLLABICS CARRIER TLHE */ + [0x1637, 0x1637], /* CANADIAN SYLLABICS CARRIER TLHEE */ + [0x1638, 0x1638], /* CANADIAN SYLLABICS CARRIER TLHI */ + [0x1639, 0x1639], /* CANADIAN SYLLABICS CARRIER TLHA */ + [0x163a, 0x163a], /* CANADIAN SYLLABICS CARRIER TLU */ + [0x163b, 0x163b], /* CANADIAN SYLLABICS CARRIER TLO */ + [0x163c, 0x163c], /* CANADIAN SYLLABICS CARRIER TLE */ + [0x163d, 0x163d], /* CANADIAN SYLLABICS CARRIER TLEE */ + [0x163e, 0x163e], /* CANADIAN SYLLABICS CARRIER TLI */ + [0x163f, 0x163f], /* CANADIAN SYLLABICS CARRIER TLA */ + [0x1640, 0x1640], /* CANADIAN SYLLABICS CARRIER ZU */ + [0x1641, 0x1641], /* CANADIAN SYLLABICS CARRIER ZO */ + [0x1642, 0x1642], /* CANADIAN SYLLABICS CARRIER ZE */ + [0x1643, 0x1643], /* CANADIAN SYLLABICS CARRIER ZEE */ + [0x1644, 0x1644], /* CANADIAN SYLLABICS CARRIER ZI */ + [0x1645, 0x1645], /* CANADIAN SYLLABICS CARRIER ZA */ + [0x1646, 0x1646], /* CANADIAN SYLLABICS CARRIER Z */ + [0x1647, 0x1647], /* CANADIAN SYLLABICS CARRIER INITIAL Z */ + [0x1648, 0x1648], /* CANADIAN SYLLABICS CARRIER DZU */ + [0x1649, 0x1649], /* CANADIAN SYLLABICS CARRIER DZO */ + [0x164a, 0x164a], /* CANADIAN SYLLABICS CARRIER DZE */ + [0x164b, 0x164b], /* CANADIAN SYLLABICS CARRIER DZEE */ + [0x164c, 0x164c], /* CANADIAN SYLLABICS CARRIER DZI */ + [0x164d, 0x164d], /* CANADIAN SYLLABICS CARRIER DZA */ + [0x164e, 0x164e], /* CANADIAN SYLLABICS CARRIER SU */ + [0x164f, 0x164f], /* CANADIAN SYLLABICS CARRIER SO */ + [0x1650, 0x1650], /* CANADIAN SYLLABICS CARRIER SE */ + [0x1651, 0x1651], /* CANADIAN SYLLABICS CARRIER SEE */ + [0x1652, 0x1652], /* CANADIAN SYLLABICS CARRIER SI */ + [0x1653, 0x1653], /* CANADIAN SYLLABICS CARRIER SA */ + [0x1654, 0x1654], /* CANADIAN SYLLABICS CARRIER SHU */ + [0x1655, 0x1655], /* CANADIAN SYLLABICS CARRIER SHO */ + [0x1656, 0x1656], /* CANADIAN SYLLABICS CARRIER SHE */ + [0x1657, 0x1657], /* CANADIAN SYLLABICS CARRIER SHEE */ + [0x1658, 0x1658], /* CANADIAN SYLLABICS CARRIER SHI */ + [0x1659, 0x1659], /* CANADIAN SYLLABICS CARRIER SHA */ + [0x165a, 0x165a], /* CANADIAN SYLLABICS CARRIER SH */ + [0x165b, 0x165b], /* CANADIAN SYLLABICS CARRIER TSU */ + [0x165c, 0x165c], /* CANADIAN SYLLABICS CARRIER TSO */ + [0x165d, 0x165d], /* CANADIAN SYLLABICS CARRIER TSE */ + [0x165e, 0x165e], /* CANADIAN SYLLABICS CARRIER TSEE */ + [0x165f, 0x165f], /* CANADIAN SYLLABICS CARRIER TSI */ + [0x1660, 0x1660], /* CANADIAN SYLLABICS CARRIER TSA */ + [0x1661, 0x1661], /* CANADIAN SYLLABICS CARRIER CHU */ + [0x1662, 0x1662], /* CANADIAN SYLLABICS CARRIER CHO */ + [0x1663, 0x1663], /* CANADIAN SYLLABICS CARRIER CHE */ + [0x1664, 0x1664], /* CANADIAN SYLLABICS CARRIER CHEE */ + [0x1665, 0x1665], /* CANADIAN SYLLABICS CARRIER CHI */ + [0x1666, 0x1666], /* CANADIAN SYLLABICS CARRIER CHA */ + [0x1667, 0x1667], /* CANADIAN SYLLABICS CARRIER TTSU */ + [0x1668, 0x1668], /* CANADIAN SYLLABICS CARRIER TTSO */ + [0x1669, 0x1669], /* CANADIAN SYLLABICS CARRIER TTSE */ + [0x166a, 0x166a], /* CANADIAN SYLLABICS CARRIER TTSEE */ + [0x166b, 0x166b], /* CANADIAN SYLLABICS CARRIER TTSI */ + [0x166c, 0x166c], /* CANADIAN SYLLABICS CARRIER TTSA */ + [0x166d, 0x166d], /* CANADIAN SYLLABICS CHI SIGN */ + [0x166e, 0x166e], /* CANADIAN SYLLABICS FULL STOP */ + [0x166f, 0x166f], /* CANADIAN SYLLABICS QAI */ + [0x1670, 0x1670], /* CANADIAN SYLLABICS NGAI */ + [0x1671, 0x1671], /* CANADIAN SYLLABICS NNGI */ + [0x1672, 0x1672], /* CANADIAN SYLLABICS NNGII */ + [0x1673, 0x1673], /* CANADIAN SYLLABICS NNGO */ + [0x1674, 0x1674], /* CANADIAN SYLLABICS NNGOO */ + [0x1675, 0x1675], /* CANADIAN SYLLABICS NNGA */ + [0x1676, 0x1676], /* CANADIAN SYLLABICS NNGAA */ + [0x1677, 0x1677], /* CANADIAN SYLLABICS WOODS-CREE THWEE */ + [0x1678, 0x1678], /* CANADIAN SYLLABICS WOODS-CREE THWI */ + [0x1679, 0x1679], /* CANADIAN SYLLABICS WOODS-CREE THWII */ + [0x167a, 0x167a], /* CANADIAN SYLLABICS WOODS-CREE THWO */ + [0x167b, 0x167b], /* CANADIAN SYLLABICS WOODS-CREE THWOO */ + [0x167c, 0x167c], /* CANADIAN SYLLABICS WOODS-CREE THWA */ + [0x167d, 0x167d], /* CANADIAN SYLLABICS WOODS-CREE THWAA */ + [0x167e, 0x167e], /* CANADIAN SYLLABICS WOODS-CREE FINAL TH */ + [0x167f, 0x167f], /* CANADIAN SYLLABICS BLACKFOOT W */ + [0x1680, 0x1680], /* OGHAM SPACE MARK */ + [0x1681, 0x1681], /* OGHAM LETTER BEITH */ + [0x1682, 0x1682], /* OGHAM LETTER LUIS */ + [0x1683, 0x1683], /* OGHAM LETTER FEARN */ + [0x1684, 0x1684], /* OGHAM LETTER SAIL */ + [0x1685, 0x1685], /* OGHAM LETTER NION */ + [0x1686, 0x1686], /* OGHAM LETTER UATH */ + [0x1687, 0x1687], /* OGHAM LETTER DAIR */ + [0x1688, 0x1688], /* OGHAM LETTER TINNE */ + [0x1689, 0x1689], /* OGHAM LETTER COLL */ + [0x168a, 0x168a], /* OGHAM LETTER CEIRT */ + [0x168b, 0x168b], /* OGHAM LETTER MUIN */ + [0x168c, 0x168c], /* OGHAM LETTER GORT */ + [0x168d, 0x168d], /* OGHAM LETTER NGEADAL */ + [0x168e, 0x168e], /* OGHAM LETTER STRAIF */ + [0x168f, 0x168f], /* OGHAM LETTER RUIS */ + [0x1690, 0x1690], /* OGHAM LETTER AILM */ + [0x1691, 0x1691], /* OGHAM LETTER ONN */ + [0x1692, 0x1692], /* OGHAM LETTER UR */ + [0x1693, 0x1693], /* OGHAM LETTER EADHADH */ + [0x1694, 0x1694], /* OGHAM LETTER IODHADH */ + [0x1695, 0x1695], /* OGHAM LETTER EABHADH */ + [0x1696, 0x1696], /* OGHAM LETTER OR */ + [0x1697, 0x1697], /* OGHAM LETTER UILLEANN */ + [0x1698, 0x1698], /* OGHAM LETTER IFIN */ + [0x1699, 0x1699], /* OGHAM LETTER EAMHANCHOLL */ + [0x169a, 0x169a], /* OGHAM LETTER PEITH */ + [0x169b, 0x169b], /* OGHAM FEATHER MARK */ + [0x169c, 0x169c], /* OGHAM REVERSED FEATHER MARK */ + [0x169d, 0x169d], + [0x169e, 0x169e], + [0x169f, 0x169f], + [0x16a0, 0x16a0], /* RUNIC LETTER FEHU FEOH FE F */ + [0x16a1, 0x16a1], /* RUNIC LETTER V */ + [0x16a2, 0x16a2], /* RUNIC LETTER URUZ UR U */ + [0x16a3, 0x16a3], /* RUNIC LETTER YR */ + [0x16a4, 0x16a4], /* RUNIC LETTER Y */ + [0x16a5, 0x16a5], /* RUNIC LETTER W */ + [0x16a6, 0x16a6], /* RUNIC LETTER THURISAZ THURS THORN */ + [0x16a7, 0x16a7], /* RUNIC LETTER ETH */ + [0x16a8, 0x16a8], /* RUNIC LETTER ANSUZ A */ + [0x16a9, 0x16a9], /* RUNIC LETTER OS O */ + [0x16aa, 0x16aa], /* RUNIC LETTER AC A */ + [0x16ab, 0x16ab], /* RUNIC LETTER AESC */ + [0x16ac, 0x16ac], /* RUNIC LETTER LONG-BRANCH-OSS O */ + [0x16ad, 0x16ad], /* RUNIC LETTER SHORT-TWIG-OSS O */ + [0x16ae, 0x16ae], /* RUNIC LETTER O */ + [0x16af, 0x16af], /* RUNIC LETTER OE */ + [0x16b0, 0x16b0], /* RUNIC LETTER ON */ + [0x16b1, 0x16b1], /* RUNIC LETTER RAIDO RAD REID R */ + [0x16b2, 0x16b2], /* RUNIC LETTER KAUNA */ + [0x16b3, 0x16b3], /* RUNIC LETTER CEN */ + [0x16b4, 0x16b4], /* RUNIC LETTER KAUN K */ + [0x16b5, 0x16b5], /* RUNIC LETTER G */ + [0x16b6, 0x16b6], /* RUNIC LETTER ENG */ + [0x16b7, 0x16b7], /* RUNIC LETTER GEBO GYFU G */ + [0x16b8, 0x16b8], /* RUNIC LETTER GAR */ + [0x16b9, 0x16b9], /* RUNIC LETTER WUNJO WYNN W */ + [0x16ba, 0x16ba], /* RUNIC LETTER HAGLAZ H */ + [0x16bb, 0x16bb], /* RUNIC LETTER HAEGL H */ + [0x16bc, 0x16bc], /* RUNIC LETTER LONG-BRANCH-HAGALL H */ + [0x16bd, 0x16bd], /* RUNIC LETTER SHORT-TWIG-HAGALL H */ + [0x16be, 0x16be], /* RUNIC LETTER NAUDIZ NYD NAUD N */ + [0x16bf, 0x16bf], /* RUNIC LETTER SHORT-TWIG-NAUD N */ + [0x16c0, 0x16c0], /* RUNIC LETTER DOTTED-N */ + [0x16c1, 0x16c1], /* RUNIC LETTER ISAZ IS ISS I */ + [0x16c2, 0x16c2], /* RUNIC LETTER E */ + [0x16c3, 0x16c3], /* RUNIC LETTER JERAN J */ + [0x16c4, 0x16c4], /* RUNIC LETTER GER */ + [0x16c5, 0x16c5], /* RUNIC LETTER LONG-BRANCH-AR AE */ + [0x16c6, 0x16c6], /* RUNIC LETTER SHORT-TWIG-AR A */ + [0x16c7, 0x16c7], /* RUNIC LETTER IWAZ EOH */ + [0x16c8, 0x16c8], /* RUNIC LETTER PERTHO PEORTH P */ + [0x16c9, 0x16c9], /* RUNIC LETTER ALGIZ EOLHX */ + [0x16ca, 0x16ca], /* RUNIC LETTER SOWILO S */ + [0x16cb, 0x16cb], /* RUNIC LETTER SIGEL LONG-BRANCH-SOL S */ + [0x16cc, 0x16cc], /* RUNIC LETTER SHORT-TWIG-SOL S */ + [0x16cd, 0x16cd], /* RUNIC LETTER C */ + [0x16ce, 0x16ce], /* RUNIC LETTER Z */ + [0x16cf, 0x16cf], /* RUNIC LETTER TIWAZ TIR TYR T */ + [0x16d0, 0x16d0], /* RUNIC LETTER SHORT-TWIG-TYR T */ + [0x16d1, 0x16d1], /* RUNIC LETTER D */ + [0x16d2, 0x16d2], /* RUNIC LETTER BERKANAN BEORC BJARKAN B */ + [0x16d3, 0x16d3], /* RUNIC LETTER SHORT-TWIG-BJARKAN B */ + [0x16d4, 0x16d4], /* RUNIC LETTER DOTTED-P */ + [0x16d5, 0x16d5], /* RUNIC LETTER OPEN-P */ + [0x16d6, 0x16d6], /* RUNIC LETTER EHWAZ EH E */ + [0x16d7, 0x16d7], /* RUNIC LETTER MANNAZ MAN M */ + [0x16d8, 0x16d8], /* RUNIC LETTER LONG-BRANCH-MADR M */ + [0x16d9, 0x16d9], /* RUNIC LETTER SHORT-TWIG-MADR M */ + [0x16da, 0x16da], /* RUNIC LETTER LAUKAZ LAGU LOGR L */ + [0x16db, 0x16db], /* RUNIC LETTER DOTTED-L */ + [0x16dc, 0x16dc], /* RUNIC LETTER INGWAZ */ + [0x16dd, 0x16dd], /* RUNIC LETTER ING */ + [0x16de, 0x16de], /* RUNIC LETTER DAGAZ DAEG D */ + [0x16df, 0x16df], /* RUNIC LETTER OTHALAN ETHEL O */ + [0x16e0, 0x16e0], /* RUNIC LETTER EAR */ + [0x16e1, 0x16e1], /* RUNIC LETTER IOR */ + [0x16e2, 0x16e2], /* RUNIC LETTER CWEORTH */ + [0x16e3, 0x16e3], /* RUNIC LETTER CALC */ + [0x16e4, 0x16e4], /* RUNIC LETTER CEALC */ + [0x16e5, 0x16e5], /* RUNIC LETTER STAN */ + [0x16e6, 0x16e6], /* RUNIC LETTER LONG-BRANCH-YR */ + [0x16e7, 0x16e7], /* RUNIC LETTER SHORT-TWIG-YR */ + [0x16e8, 0x16e8], /* RUNIC LETTER ICELANDIC-YR */ + [0x16e9, 0x16e9], /* RUNIC LETTER Q */ + [0x16ea, 0x16ea], /* RUNIC LETTER X */ + [0x16eb, 0x16eb], /* RUNIC SINGLE PUNCTUATION */ + [0x16ec, 0x16ec], /* RUNIC MULTIPLE PUNCTUATION */ + [0x16ed, 0x16ed], /* RUNIC CROSS PUNCTUATION */ + [0x16ee, 0x16ee], /* RUNIC ARLAUG SYMBOL */ + [0x16ef, 0x16ef], /* RUNIC TVIMADUR SYMBOL */ + [0x16f0, 0x16f0], /* RUNIC BELGTHOR SYMBOL */ + [0x16f1, 0x16f1], + [0x16f2, 0x16f2], + [0x16f3, 0x16f3], + [0x16f4, 0x16f4], + [0x16f5, 0x16f5], + [0x16f6, 0x16f6], + [0x16f7, 0x16f7], + [0x16f8, 0x16f8], + [0x16f9, 0x16f9], + [0x16fa, 0x16fa], + [0x16fb, 0x16fb], + [0x16fc, 0x16fc], + [0x16fd, 0x16fd], + [0x16fe, 0x16fe], + [0x16ff, 0x16ff], + [0x1700, 0x1700], /* TAGALOG LETTER A */ + [0x1701, 0x1701], /* TAGALOG LETTER I */ + [0x1702, 0x1702], /* TAGALOG LETTER U */ + [0x1703, 0x1703], /* TAGALOG LETTER KA */ + [0x1704, 0x1704], /* TAGALOG LETTER GA */ + [0x1705, 0x1705], /* TAGALOG LETTER NGA */ + [0x1706, 0x1706], /* TAGALOG LETTER TA */ + [0x1707, 0x1707], /* TAGALOG LETTER DA */ + [0x1708, 0x1708], /* TAGALOG LETTER NA */ + [0x1709, 0x1709], /* TAGALOG LETTER PA */ + [0x170a, 0x170a], /* TAGALOG LETTER BA */ + [0x170b, 0x170b], /* TAGALOG LETTER MA */ + [0x170c, 0x170c], /* TAGALOG LETTER YA */ + [0x170d, 0x170d], + [0x170e, 0x170e], /* TAGALOG LETTER LA */ + [0x170f, 0x170f], /* TAGALOG LETTER WA */ + [0x1710, 0x1710], /* TAGALOG LETTER SA */ + [0x1711, 0x1711], /* TAGALOG LETTER HA */ + [0x1712, 0x1712], /* TAGALOG VOWEL SIGN I */ + [0x1713, 0x1713], /* TAGALOG VOWEL SIGN U */ + [0x1714, 0x1714], /* TAGALOG SIGN VIRAMA */ + [0x1715, 0x1715], + [0x1716, 0x1716], + [0x1717, 0x1717], + [0x1718, 0x1718], + [0x1719, 0x1719], + [0x171a, 0x171a], + [0x171b, 0x171b], + [0x171c, 0x171c], + [0x171d, 0x171d], + [0x171e, 0x171e], + [0x171f, 0x171f], + [0x1720, 0x1720], /* HANUNOO LETTER A */ + [0x1721, 0x1721], /* HANUNOO LETTER I */ + [0x1722, 0x1722], /* HANUNOO LETTER U */ + [0x1723, 0x1723], /* HANUNOO LETTER KA */ + [0x1724, 0x1724], /* HANUNOO LETTER GA */ + [0x1725, 0x1725], /* HANUNOO LETTER NGA */ + [0x1726, 0x1726], /* HANUNOO LETTER TA */ + [0x1727, 0x1727], /* HANUNOO LETTER DA */ + [0x1728, 0x1728], /* HANUNOO LETTER NA */ + [0x1729, 0x1729], /* HANUNOO LETTER PA */ + [0x172a, 0x172a], /* HANUNOO LETTER BA */ + [0x172b, 0x172b], /* HANUNOO LETTER MA */ + [0x172c, 0x172c], /* HANUNOO LETTER YA */ + [0x172d, 0x172d], /* HANUNOO LETTER RA */ + [0x172e, 0x172e], /* HANUNOO LETTER LA */ + [0x172f, 0x172f], /* HANUNOO LETTER WA */ + [0x1730, 0x1730], /* HANUNOO LETTER SA */ + [0x1731, 0x1731], /* HANUNOO LETTER HA */ + [0x1732, 0x1732], /* HANUNOO VOWEL SIGN I */ + [0x1733, 0x1733], /* HANUNOO VOWEL SIGN U */ + [0x1734, 0x1734], /* HANUNOO SIGN PAMUDPOD */ + [0x1735, 0x1735], /* PHILIPPINE SINGLE PUNCTUATION */ + [0x1736, 0x1736], /* PHILIPPINE DOUBLE PUNCTUATION */ + [0x1737, 0x1737], + [0x1738, 0x1738], + [0x1739, 0x1739], + [0x173a, 0x173a], + [0x173b, 0x173b], + [0x173c, 0x173c], + [0x173d, 0x173d], + [0x173e, 0x173e], + [0x173f, 0x173f], + [0x1740, 0x1740], /* BUHID LETTER A */ + [0x1741, 0x1741], /* BUHID LETTER I */ + [0x1742, 0x1742], /* BUHID LETTER U */ + [0x1743, 0x1743], /* BUHID LETTER KA */ + [0x1744, 0x1744], /* BUHID LETTER GA */ + [0x1745, 0x1745], /* BUHID LETTER NGA */ + [0x1746, 0x1746], /* BUHID LETTER TA */ + [0x1747, 0x1747], /* BUHID LETTER DA */ + [0x1748, 0x1748], /* BUHID LETTER NA */ + [0x1749, 0x1749], /* BUHID LETTER PA */ + [0x174a, 0x174a], /* BUHID LETTER BA */ + [0x174b, 0x174b], /* BUHID LETTER MA */ + [0x174c, 0x174c], /* BUHID LETTER YA */ + [0x174d, 0x174d], /* BUHID LETTER RA */ + [0x174e, 0x174e], /* BUHID LETTER LA */ + [0x174f, 0x174f], /* BUHID LETTER WA */ + [0x1750, 0x1750], /* BUHID LETTER SA */ + [0x1751, 0x1751], /* BUHID LETTER HA */ + [0x1752, 0x1752], /* BUHID VOWEL SIGN I */ + [0x1753, 0x1753], /* BUHID VOWEL SIGN U */ + [0x1754, 0x1754], + [0x1755, 0x1755], + [0x1756, 0x1756], + [0x1757, 0x1757], + [0x1758, 0x1758], + [0x1759, 0x1759], + [0x175a, 0x175a], + [0x175b, 0x175b], + [0x175c, 0x175c], + [0x175d, 0x175d], + [0x175e, 0x175e], + [0x175f, 0x175f], + [0x1760, 0x1760], /* TAGBANWA LETTER A */ + [0x1761, 0x1761], /* TAGBANWA LETTER I */ + [0x1762, 0x1762], /* TAGBANWA LETTER U */ + [0x1763, 0x1763], /* TAGBANWA LETTER KA */ + [0x1764, 0x1764], /* TAGBANWA LETTER GA */ + [0x1765, 0x1765], /* TAGBANWA LETTER NGA */ + [0x1766, 0x1766], /* TAGBANWA LETTER TA */ + [0x1767, 0x1767], /* TAGBANWA LETTER DA */ + [0x1768, 0x1768], /* TAGBANWA LETTER NA */ + [0x1769, 0x1769], /* TAGBANWA LETTER PA */ + [0x176a, 0x176a], /* TAGBANWA LETTER BA */ + [0x176b, 0x176b], /* TAGBANWA LETTER MA */ + [0x176c, 0x176c], /* TAGBANWA LETTER YA */ + [0x176d, 0x176d], + [0x176e, 0x176e], /* TAGBANWA LETTER LA */ + [0x176f, 0x176f], /* TAGBANWA LETTER WA */ + [0x1770, 0x1770], /* TAGBANWA LETTER SA */ + [0x1771, 0x1771], + [0x1772, 0x1772], /* TAGBANWA VOWEL SIGN I */ + [0x1773, 0x1773], /* TAGBANWA VOWEL SIGN U */ + [0x1774, 0x1774], + [0x1775, 0x1775], + [0x1776, 0x1776], + [0x1777, 0x1777], + [0x1778, 0x1778], + [0x1779, 0x1779], + [0x177a, 0x177a], + [0x177b, 0x177b], + [0x177c, 0x177c], + [0x177d, 0x177d], + [0x177e, 0x177e], + [0x177f, 0x177f], + [0x1780, 0x1780], /* KHMER LETTER KA */ + [0x1781, 0x1781], /* KHMER LETTER KHA */ + [0x1782, 0x1782], /* KHMER LETTER KO */ + [0x1783, 0x1783], /* KHMER LETTER KHO */ + [0x1784, 0x1784], /* KHMER LETTER NGO */ + [0x1785, 0x1785], /* KHMER LETTER CA */ + [0x1786, 0x1786], /* KHMER LETTER CHA */ + [0x1787, 0x1787], /* KHMER LETTER CO */ + [0x1788, 0x1788], /* KHMER LETTER CHO */ + [0x1789, 0x1789], /* KHMER LETTER NYO */ + [0x178a, 0x178a], /* KHMER LETTER DA */ + [0x178b, 0x178b], /* KHMER LETTER TTHA */ + [0x178c, 0x178c], /* KHMER LETTER DO */ + [0x178d, 0x178d], /* KHMER LETTER TTHO */ + [0x178e, 0x178e], /* KHMER LETTER NNO */ + [0x178f, 0x178f], /* KHMER LETTER TA */ + [0x1790, 0x1790], /* KHMER LETTER THA */ + [0x1791, 0x1791], /* KHMER LETTER TO */ + [0x1792, 0x1792], /* KHMER LETTER THO */ + [0x1793, 0x1793], /* KHMER LETTER NO */ + [0x1794, 0x1794], /* KHMER LETTER BA */ + [0x1795, 0x1795], /* KHMER LETTER PHA */ + [0x1796, 0x1796], /* KHMER LETTER PO */ + [0x1797, 0x1797], /* KHMER LETTER PHO */ + [0x1798, 0x1798], /* KHMER LETTER MO */ + [0x1799, 0x1799], /* KHMER LETTER YO */ + [0x179a, 0x179a], /* KHMER LETTER RO */ + [0x179b, 0x179b], /* KHMER LETTER LO */ + [0x179c, 0x179c], /* KHMER LETTER VO */ + [0x179d, 0x179d], /* KHMER LETTER SHA */ + [0x179e, 0x179e], /* KHMER LETTER SSO */ + [0x179f, 0x179f], /* KHMER LETTER SA */ + [0x17a0, 0x17a0], /* KHMER LETTER HA */ + [0x17a1, 0x17a1], /* KHMER LETTER LA */ + [0x17a2, 0x17a2], /* KHMER LETTER QA */ + [0x17a3, 0x17a3], /* KHMER INDEPENDENT VOWEL QAQ */ + [0x17a4, 0x17a4], /* KHMER INDEPENDENT VOWEL QAA */ + [0x17a5, 0x17a5], /* KHMER INDEPENDENT VOWEL QI */ + [0x17a6, 0x17a6], /* KHMER INDEPENDENT VOWEL QII */ + [0x17a7, 0x17a7], /* KHMER INDEPENDENT VOWEL QU */ + [0x17a8, 0x17a8], /* KHMER INDEPENDENT VOWEL QUK */ + [0x17a9, 0x17a9], /* KHMER INDEPENDENT VOWEL QUU */ + [0x17aa, 0x17aa], /* KHMER INDEPENDENT VOWEL QUUV */ + [0x17ab, 0x17ab], /* KHMER INDEPENDENT VOWEL RY */ + [0x17ac, 0x17ac], /* KHMER INDEPENDENT VOWEL RYY */ + [0x17ad, 0x17ad], /* KHMER INDEPENDENT VOWEL LY */ + [0x17ae, 0x17ae], /* KHMER INDEPENDENT VOWEL LYY */ + [0x17af, 0x17af], /* KHMER INDEPENDENT VOWEL QE */ + [0x17b0, 0x17b0], /* KHMER INDEPENDENT VOWEL QAI */ + [0x17b1, 0x17b1], /* KHMER INDEPENDENT VOWEL QOO TYPE ONE */ + [0x17b2, 0x17b2], /* KHMER INDEPENDENT VOWEL QOO TYPE TWO */ + [0x17b3, 0x17b3], /* KHMER INDEPENDENT VOWEL QAU */ + [0x17b4, 0x17b4], /* KHMER VOWEL INHERENT AQ */ + [0x17b5, 0x17b5], /* KHMER VOWEL INHERENT AA */ + [0x17b6, 0x17b6], /* KHMER VOWEL SIGN AA */ + [0x17b7, 0x17b7], /* KHMER VOWEL SIGN I */ + [0x17b8, 0x17b8], /* KHMER VOWEL SIGN II */ + [0x17b9, 0x17b9], /* KHMER VOWEL SIGN Y */ + [0x17ba, 0x17ba], /* KHMER VOWEL SIGN YY */ + [0x17bb, 0x17bb], /* KHMER VOWEL SIGN U */ + [0x17bc, 0x17bc], /* KHMER VOWEL SIGN UU */ + [0x17bd, 0x17bd], /* KHMER VOWEL SIGN UA */ + [0x17be, 0x17be], /* KHMER VOWEL SIGN OE */ + [0x17bf, 0x17bf], /* KHMER VOWEL SIGN YA */ + [0x17c0, 0x17c0], /* KHMER VOWEL SIGN IE */ + [0x17c1, 0x17c1], /* KHMER VOWEL SIGN E */ + [0x17c2, 0x17c2], /* KHMER VOWEL SIGN AE */ + [0x17c3, 0x17c3], /* KHMER VOWEL SIGN AI */ + [0x17c4, 0x17c4], /* KHMER VOWEL SIGN OO */ + [0x17c5, 0x17c5], /* KHMER VOWEL SIGN AU */ + [0x17c6, 0x17c6], /* KHMER SIGN NIKAHIT */ + [0x17c7, 0x17c7], /* KHMER SIGN REAHMUK */ + [0x17c8, 0x17c8], /* KHMER SIGN YUUKALEAPINTU */ + [0x17c9, 0x17c9], /* KHMER SIGN MUUSIKATOAN */ + [0x17ca, 0x17ca], /* KHMER SIGN TRIISAP */ + [0x17cb, 0x17cb], /* KHMER SIGN BANTOC */ + [0x17cc, 0x17cc], /* KHMER SIGN ROBAT */ + [0x17cd, 0x17cd], /* KHMER SIGN TOANDAKHIAT */ + [0x17ce, 0x17ce], /* KHMER SIGN KAKABAT */ + [0x17cf, 0x17cf], /* KHMER SIGN AHSDA */ + [0x17d0, 0x17d0], /* KHMER SIGN SAMYOK SANNYA */ + [0x17d1, 0x17d1], /* KHMER SIGN VIRIAM */ + [0x17d2, 0x17d2], /* KHMER SIGN COENG */ + [0x17d3, 0x17d3], /* KHMER SIGN BATHAMASAT */ + [0x17d4, 0x17d4], /* KHMER SIGN KHAN */ + [0x17d5, 0x17d5], /* KHMER SIGN BARIYOOSAN */ + [0x17d6, 0x17d6], /* KHMER SIGN CAMNUC PII KUUH */ + [0x17d7, 0x17d7], /* KHMER SIGN LEK TOO */ + [0x17d8, 0x17d8], /* KHMER SIGN BEYYAL */ + [0x17d9, 0x17d9], /* KHMER SIGN PHNAEK MUAN */ + [0x17da, 0x17da], /* KHMER SIGN KOOMUUT */ + [0x17db, 0x17db], /* KHMER CURRENCY SYMBOL RIEL */ + [0x17dc, 0x17dc], /* KHMER SIGN AVAKRAHASANYA */ + [0x17dd, 0x17dd], /* KHMER SIGN ATTHACAN */ + [0x17de, 0x17de], + [0x17df, 0x17df], + [0x17e0, 0x17e0], /* KHMER DIGIT ZERO */ + [0x17e1, 0x17e1], /* KHMER DIGIT ONE */ + [0x17e2, 0x17e2], /* KHMER DIGIT TWO */ + [0x17e3, 0x17e3], /* KHMER DIGIT THREE */ + [0x17e4, 0x17e4], /* KHMER DIGIT FOUR */ + [0x17e5, 0x17e5], /* KHMER DIGIT FIVE */ + [0x17e6, 0x17e6], /* KHMER DIGIT SIX */ + [0x17e7, 0x17e7], /* KHMER DIGIT SEVEN */ + [0x17e8, 0x17e8], /* KHMER DIGIT EIGHT */ + [0x17e9, 0x17e9], /* KHMER DIGIT NINE */ + [0x17ea, 0x17ea], + [0x17eb, 0x17eb], + [0x17ec, 0x17ec], + [0x17ed, 0x17ed], + [0x17ee, 0x17ee], + [0x17ef, 0x17ef], + [0x17f0, 0x17f0], /* KHMER SYMBOL LEK ATTAK SON */ + [0x17f1, 0x17f1], /* KHMER SYMBOL LEK ATTAK MUOY */ + [0x17f2, 0x17f2], /* KHMER SYMBOL LEK ATTAK PII */ + [0x17f3, 0x17f3], /* KHMER SYMBOL LEK ATTAK BEI */ + [0x17f4, 0x17f4], /* KHMER SYMBOL LEK ATTAK BUON */ + [0x17f5, 0x17f5], /* KHMER SYMBOL LEK ATTAK PRAM */ + [0x17f6, 0x17f6], /* KHMER SYMBOL LEK ATTAK PRAM-MUOY */ + [0x17f7, 0x17f7], /* KHMER SYMBOL LEK ATTAK PRAM-PII */ + [0x17f8, 0x17f8], /* KHMER SYMBOL LEK ATTAK PRAM-BEI */ + [0x17f9, 0x17f9], /* KHMER SYMBOL LEK ATTAK PRAM-BUON */ + [0x17fa, 0x17fa], + [0x17fb, 0x17fb], + [0x17fc, 0x17fc], + [0x17fd, 0x17fd], + [0x17fe, 0x17fe], + [0x17ff, 0x17ff], + [0x1800, 0x1800], /* MONGOLIAN BIRGA */ + [0x1801, 0x1801], /* MONGOLIAN ELLIPSIS */ + [0x1802, 0x1802], /* MONGOLIAN COMMA */ + [0x1803, 0x1803], /* MONGOLIAN FULL STOP */ + [0x1804, 0x1804], /* MONGOLIAN COLON */ + [0x1805, 0x1805], /* MONGOLIAN FOUR DOTS */ + [0x1806, 0x1806], /* MONGOLIAN TODO SOFT HYPHEN */ + [0x1807, 0x1807], /* MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER */ + [0x1808, 0x1808], /* MONGOLIAN MANCHU COMMA */ + [0x1809, 0x1809], /* MONGOLIAN MANCHU FULL STOP */ + [0x180a, 0x180a], /* MONGOLIAN NIRUGU */ + [0x180b, 0x180b], /* MONGOLIAN FREE VARIATION SELECTOR ONE */ + [0x180c, 0x180c], /* MONGOLIAN FREE VARIATION SELECTOR TWO */ + [0x180d, 0x180d], /* MONGOLIAN FREE VARIATION SELECTOR THREE */ + [0x180e, 0x180e], /* MONGOLIAN VOWEL SEPARATOR */ + [0x180f, 0x180f], + [0x1810, 0x1810], /* MONGOLIAN DIGIT ZERO */ + [0x1811, 0x1811], /* MONGOLIAN DIGIT ONE */ + [0x1812, 0x1812], /* MONGOLIAN DIGIT TWO */ + [0x1813, 0x1813], /* MONGOLIAN DIGIT THREE */ + [0x1814, 0x1814], /* MONGOLIAN DIGIT FOUR */ + [0x1815, 0x1815], /* MONGOLIAN DIGIT FIVE */ + [0x1816, 0x1816], /* MONGOLIAN DIGIT SIX */ + [0x1817, 0x1817], /* MONGOLIAN DIGIT SEVEN */ + [0x1818, 0x1818], /* MONGOLIAN DIGIT EIGHT */ + [0x1819, 0x1819], /* MONGOLIAN DIGIT NINE */ + [0x181a, 0x181a], + [0x181b, 0x181b], + [0x181c, 0x181c], + [0x181d, 0x181d], + [0x181e, 0x181e], + [0x181f, 0x181f], + [0x1820, 0x1820], /* MONGOLIAN LETTER A */ + [0x1821, 0x1821], /* MONGOLIAN LETTER E */ + [0x1822, 0x1822], /* MONGOLIAN LETTER I */ + [0x1823, 0x1823], /* MONGOLIAN LETTER O */ + [0x1824, 0x1824], /* MONGOLIAN LETTER U */ + [0x1825, 0x1825], /* MONGOLIAN LETTER OE */ + [0x1826, 0x1826], /* MONGOLIAN LETTER UE */ + [0x1827, 0x1827], /* MONGOLIAN LETTER EE */ + [0x1828, 0x1828], /* MONGOLIAN LETTER NA */ + [0x1829, 0x1829], /* MONGOLIAN LETTER ANG */ + [0x182a, 0x182a], /* MONGOLIAN LETTER BA */ + [0x182b, 0x182b], /* MONGOLIAN LETTER PA */ + [0x182c, 0x182c], /* MONGOLIAN LETTER QA */ + [0x182d, 0x182d], /* MONGOLIAN LETTER GA */ + [0x182e, 0x182e], /* MONGOLIAN LETTER MA */ + [0x182f, 0x182f], /* MONGOLIAN LETTER LA */ + [0x1830, 0x1830], /* MONGOLIAN LETTER SA */ + [0x1831, 0x1831], /* MONGOLIAN LETTER SHA */ + [0x1832, 0x1832], /* MONGOLIAN LETTER TA */ + [0x1833, 0x1833], /* MONGOLIAN LETTER DA */ + [0x1834, 0x1834], /* MONGOLIAN LETTER CHA */ + [0x1835, 0x1835], /* MONGOLIAN LETTER JA */ + [0x1836, 0x1836], /* MONGOLIAN LETTER YA */ + [0x1837, 0x1837], /* MONGOLIAN LETTER RA */ + [0x1838, 0x1838], /* MONGOLIAN LETTER WA */ + [0x1839, 0x1839], /* MONGOLIAN LETTER FA */ + [0x183a, 0x183a], /* MONGOLIAN LETTER KA */ + [0x183b, 0x183b], /* MONGOLIAN LETTER KHA */ + [0x183c, 0x183c], /* MONGOLIAN LETTER TSA */ + [0x183d, 0x183d], /* MONGOLIAN LETTER ZA */ + [0x183e, 0x183e], /* MONGOLIAN LETTER HAA */ + [0x183f, 0x183f], /* MONGOLIAN LETTER ZRA */ + [0x1840, 0x1840], /* MONGOLIAN LETTER LHA */ + [0x1841, 0x1841], /* MONGOLIAN LETTER ZHI */ + [0x1842, 0x1842], /* MONGOLIAN LETTER CHI */ + [0x1843, 0x1843], /* MONGOLIAN LETTER TODO LONG VOWEL SIGN */ + [0x1844, 0x1844], /* MONGOLIAN LETTER TODO E */ + [0x1845, 0x1845], /* MONGOLIAN LETTER TODO I */ + [0x1846, 0x1846], /* MONGOLIAN LETTER TODO O */ + [0x1847, 0x1847], /* MONGOLIAN LETTER TODO U */ + [0x1848, 0x1848], /* MONGOLIAN LETTER TODO OE */ + [0x1849, 0x1849], /* MONGOLIAN LETTER TODO UE */ + [0x184a, 0x184a], /* MONGOLIAN LETTER TODO ANG */ + [0x184b, 0x184b], /* MONGOLIAN LETTER TODO BA */ + [0x184c, 0x184c], /* MONGOLIAN LETTER TODO PA */ + [0x184d, 0x184d], /* MONGOLIAN LETTER TODO QA */ + [0x184e, 0x184e], /* MONGOLIAN LETTER TODO GA */ + [0x184f, 0x184f], /* MONGOLIAN LETTER TODO MA */ + [0x1850, 0x1850], /* MONGOLIAN LETTER TODO TA */ + [0x1851, 0x1851], /* MONGOLIAN LETTER TODO DA */ + [0x1852, 0x1852], /* MONGOLIAN LETTER TODO CHA */ + [0x1853, 0x1853], /* MONGOLIAN LETTER TODO JA */ + [0x1854, 0x1854], /* MONGOLIAN LETTER TODO TSA */ + [0x1855, 0x1855], /* MONGOLIAN LETTER TODO YA */ + [0x1856, 0x1856], /* MONGOLIAN LETTER TODO WA */ + [0x1857, 0x1857], /* MONGOLIAN LETTER TODO KA */ + [0x1858, 0x1858], /* MONGOLIAN LETTER TODO GAA */ + [0x1859, 0x1859], /* MONGOLIAN LETTER TODO HAA */ + [0x185a, 0x185a], /* MONGOLIAN LETTER TODO JIA */ + [0x185b, 0x185b], /* MONGOLIAN LETTER TODO NIA */ + [0x185c, 0x185c], /* MONGOLIAN LETTER TODO DZA */ + [0x185d, 0x185d], /* MONGOLIAN LETTER SIBE E */ + [0x185e, 0x185e], /* MONGOLIAN LETTER SIBE I */ + [0x185f, 0x185f], /* MONGOLIAN LETTER SIBE IY */ + [0x1860, 0x1860], /* MONGOLIAN LETTER SIBE UE */ + [0x1861, 0x1861], /* MONGOLIAN LETTER SIBE U */ + [0x1862, 0x1862], /* MONGOLIAN LETTER SIBE ANG */ + [0x1863, 0x1863], /* MONGOLIAN LETTER SIBE KA */ + [0x1864, 0x1864], /* MONGOLIAN LETTER SIBE GA */ + [0x1865, 0x1865], /* MONGOLIAN LETTER SIBE HA */ + [0x1866, 0x1866], /* MONGOLIAN LETTER SIBE PA */ + [0x1867, 0x1867], /* MONGOLIAN LETTER SIBE SHA */ + [0x1868, 0x1868], /* MONGOLIAN LETTER SIBE TA */ + [0x1869, 0x1869], /* MONGOLIAN LETTER SIBE DA */ + [0x186a, 0x186a], /* MONGOLIAN LETTER SIBE JA */ + [0x186b, 0x186b], /* MONGOLIAN LETTER SIBE FA */ + [0x186c, 0x186c], /* MONGOLIAN LETTER SIBE GAA */ + [0x186d, 0x186d], /* MONGOLIAN LETTER SIBE HAA */ + [0x186e, 0x186e], /* MONGOLIAN LETTER SIBE TSA */ + [0x186f, 0x186f], /* MONGOLIAN LETTER SIBE ZA */ + [0x1870, 0x1870], /* MONGOLIAN LETTER SIBE RAA */ + [0x1871, 0x1871], /* MONGOLIAN LETTER SIBE CHA */ + [0x1872, 0x1872], /* MONGOLIAN LETTER SIBE ZHA */ + [0x1873, 0x1873], /* MONGOLIAN LETTER MANCHU I */ + [0x1874, 0x1874], /* MONGOLIAN LETTER MANCHU KA */ + [0x1875, 0x1875], /* MONGOLIAN LETTER MANCHU RA */ + [0x1876, 0x1876], /* MONGOLIAN LETTER MANCHU FA */ + [0x1877, 0x1877], /* MONGOLIAN LETTER MANCHU ZHA */ + [0x1878, 0x1878], + [0x1879, 0x1879], + [0x187a, 0x187a], + [0x187b, 0x187b], + [0x187c, 0x187c], + [0x187d, 0x187d], + [0x187e, 0x187e], + [0x187f, 0x187f], + [0x1880, 0x1880], /* MONGOLIAN LETTER ALI GALI ANUSVARA ONE */ + [0x1881, 0x1881], /* MONGOLIAN LETTER ALI GALI VISARGA ONE */ + [0x1882, 0x1882], /* MONGOLIAN LETTER ALI GALI DAMARU */ + [0x1883, 0x1883], /* MONGOLIAN LETTER ALI GALI UBADAMA */ + [0x1884, 0x1884], /* MONGOLIAN LETTER ALI GALI INVERTED UBADAMA */ + [0x1885, 0x1885], /* MONGOLIAN LETTER ALI GALI BALUDA */ + [0x1886, 0x1886], /* MONGOLIAN LETTER ALI GALI THREE BALUDA */ + [0x1887, 0x1887], /* MONGOLIAN LETTER ALI GALI A */ + [0x1888, 0x1888], /* MONGOLIAN LETTER ALI GALI I */ + [0x1889, 0x1889], /* MONGOLIAN LETTER ALI GALI KA */ + [0x188a, 0x188a], /* MONGOLIAN LETTER ALI GALI NGA */ + [0x188b, 0x188b], /* MONGOLIAN LETTER ALI GALI CA */ + [0x188c, 0x188c], /* MONGOLIAN LETTER ALI GALI TTA */ + [0x188d, 0x188d], /* MONGOLIAN LETTER ALI GALI TTHA */ + [0x188e, 0x188e], /* MONGOLIAN LETTER ALI GALI DDA */ + [0x188f, 0x188f], /* MONGOLIAN LETTER ALI GALI NNA */ + [0x1890, 0x1890], /* MONGOLIAN LETTER ALI GALI TA */ + [0x1891, 0x1891], /* MONGOLIAN LETTER ALI GALI DA */ + [0x1892, 0x1892], /* MONGOLIAN LETTER ALI GALI PA */ + [0x1893, 0x1893], /* MONGOLIAN LETTER ALI GALI PHA */ + [0x1894, 0x1894], /* MONGOLIAN LETTER ALI GALI SSA */ + [0x1895, 0x1895], /* MONGOLIAN LETTER ALI GALI ZHA */ + [0x1896, 0x1896], /* MONGOLIAN LETTER ALI GALI ZA */ + [0x1897, 0x1897], /* MONGOLIAN LETTER ALI GALI AH */ + [0x1898, 0x1898], /* MONGOLIAN LETTER TODO ALI GALI TA */ + [0x1899, 0x1899], /* MONGOLIAN LETTER TODO ALI GALI ZHA */ + [0x189a, 0x189a], /* MONGOLIAN LETTER MANCHU ALI GALI GHA */ + [0x189b, 0x189b], /* MONGOLIAN LETTER MANCHU ALI GALI NGA */ + [0x189c, 0x189c], /* MONGOLIAN LETTER MANCHU ALI GALI CA */ + [0x189d, 0x189d], /* MONGOLIAN LETTER MANCHU ALI GALI JHA */ + [0x189e, 0x189e], /* MONGOLIAN LETTER MANCHU ALI GALI TTA */ + [0x189f, 0x189f], /* MONGOLIAN LETTER MANCHU ALI GALI DDHA */ + [0x18a0, 0x18a0], /* MONGOLIAN LETTER MANCHU ALI GALI TA */ + [0x18a1, 0x18a1], /* MONGOLIAN LETTER MANCHU ALI GALI DHA */ + [0x18a2, 0x18a2], /* MONGOLIAN LETTER MANCHU ALI GALI SSA */ + [0x18a3, 0x18a3], /* MONGOLIAN LETTER MANCHU ALI GALI CYA */ + [0x18a4, 0x18a4], /* MONGOLIAN LETTER MANCHU ALI GALI ZHA */ + [0x18a5, 0x18a5], /* MONGOLIAN LETTER MANCHU ALI GALI ZA */ + [0x18a6, 0x18a6], /* MONGOLIAN LETTER ALI GALI HALF U */ + [0x18a7, 0x18a7], /* MONGOLIAN LETTER ALI GALI HALF YA */ + [0x18a8, 0x18a8], /* MONGOLIAN LETTER MANCHU ALI GALI BHA */ + [0x18a9, 0x18a9], /* MONGOLIAN LETTER ALI GALI DAGALGA */ + [0x18aa, 0x18aa], /* MONGOLIAN LETTER MANCHU ALI GALI LHA */ + [0x18ab, 0x18ab], + [0x18ac, 0x18ac], + [0x18ad, 0x18ad], + [0x18ae, 0x18ae], + [0x18af, 0x18af], + [0x18b0, 0x18b0], /* CANADIAN SYLLABICS OY */ + [0x18b1, 0x18b1], /* CANADIAN SYLLABICS AY */ + [0x18b2, 0x18b2], /* CANADIAN SYLLABICS AAY */ + [0x18b3, 0x18b3], /* CANADIAN SYLLABICS WAY */ + [0x18b4, 0x18b4], /* CANADIAN SYLLABICS POY */ + [0x18b5, 0x18b5], /* CANADIAN SYLLABICS PAY */ + [0x18b6, 0x18b6], /* CANADIAN SYLLABICS PWOY */ + [0x18b7, 0x18b7], /* CANADIAN SYLLABICS TAY */ + [0x18b8, 0x18b8], /* CANADIAN SYLLABICS KAY */ + [0x18b9, 0x18b9], /* CANADIAN SYLLABICS KWAY */ + [0x18ba, 0x18ba], /* CANADIAN SYLLABICS MAY */ + [0x18bb, 0x18bb], /* CANADIAN SYLLABICS NOY */ + [0x18bc, 0x18bc], /* CANADIAN SYLLABICS NAY */ + [0x18bd, 0x18bd], /* CANADIAN SYLLABICS LAY */ + [0x18be, 0x18be], /* CANADIAN SYLLABICS SOY */ + [0x18bf, 0x18bf], /* CANADIAN SYLLABICS SAY */ + [0x18c0, 0x18c0], /* CANADIAN SYLLABICS SHOY */ + [0x18c1, 0x18c1], /* CANADIAN SYLLABICS SHAY */ + [0x18c2, 0x18c2], /* CANADIAN SYLLABICS SHWOY */ + [0x18c3, 0x18c3], /* CANADIAN SYLLABICS YOY */ + [0x18c4, 0x18c4], /* CANADIAN SYLLABICS YAY */ + [0x18c5, 0x18c5], /* CANADIAN SYLLABICS RAY */ + [0x18c6, 0x18c6], /* CANADIAN SYLLABICS NWI */ + [0x18c7, 0x18c7], /* CANADIAN SYLLABICS OJIBWAY NWI */ + [0x18c8, 0x18c8], /* CANADIAN SYLLABICS NWII */ + [0x18c9, 0x18c9], /* CANADIAN SYLLABICS OJIBWAY NWII */ + [0x18ca, 0x18ca], /* CANADIAN SYLLABICS NWO */ + [0x18cb, 0x18cb], /* CANADIAN SYLLABICS OJIBWAY NWO */ + [0x18cc, 0x18cc], /* CANADIAN SYLLABICS NWOO */ + [0x18cd, 0x18cd], /* CANADIAN SYLLABICS OJIBWAY NWOO */ + [0x18ce, 0x18ce], /* CANADIAN SYLLABICS RWEE */ + [0x18cf, 0x18cf], /* CANADIAN SYLLABICS RWI */ + [0x18d0, 0x18d0], /* CANADIAN SYLLABICS RWII */ + [0x18d1, 0x18d1], /* CANADIAN SYLLABICS RWO */ + [0x18d2, 0x18d2], /* CANADIAN SYLLABICS RWOO */ + [0x18d3, 0x18d3], /* CANADIAN SYLLABICS RWA */ + [0x18d4, 0x18d4], /* CANADIAN SYLLABICS OJIBWAY P */ + [0x18d5, 0x18d5], /* CANADIAN SYLLABICS OJIBWAY T */ + [0x18d6, 0x18d6], /* CANADIAN SYLLABICS OJIBWAY K */ + [0x18d7, 0x18d7], /* CANADIAN SYLLABICS OJIBWAY C */ + [0x18d8, 0x18d8], /* CANADIAN SYLLABICS OJIBWAY M */ + [0x18d9, 0x18d9], /* CANADIAN SYLLABICS OJIBWAY N */ + [0x18da, 0x18da], /* CANADIAN SYLLABICS OJIBWAY S */ + [0x18db, 0x18db], /* CANADIAN SYLLABICS OJIBWAY SH */ + [0x18dc, 0x18dc], /* CANADIAN SYLLABICS EASTERN W */ + [0x18dd, 0x18dd], /* CANADIAN SYLLABICS WESTERN W */ + [0x18de, 0x18de], /* CANADIAN SYLLABICS FINAL SMALL RING */ + [0x18df, 0x18df], /* CANADIAN SYLLABICS FINAL RAISED DOT */ + [0x18e0, 0x18e0], /* CANADIAN SYLLABICS R-CREE RWE */ + [0x18e1, 0x18e1], /* CANADIAN SYLLABICS WEST-CREE LOO */ + [0x18e2, 0x18e2], /* CANADIAN SYLLABICS WEST-CREE LAA */ + [0x18e3, 0x18e3], /* CANADIAN SYLLABICS THWE */ + [0x18e4, 0x18e4], /* CANADIAN SYLLABICS THWA */ + [0x18e5, 0x18e5], /* CANADIAN SYLLABICS TTHWE */ + [0x18e6, 0x18e6], /* CANADIAN SYLLABICS TTHOO */ + [0x18e7, 0x18e7], /* CANADIAN SYLLABICS TTHAA */ + [0x18e8, 0x18e8], /* CANADIAN SYLLABICS TLHWE */ + [0x18e9, 0x18e9], /* CANADIAN SYLLABICS TLHOO */ + [0x18ea, 0x18ea], /* CANADIAN SYLLABICS SAYISI SHWE */ + [0x18eb, 0x18eb], /* CANADIAN SYLLABICS SAYISI SHOO */ + [0x18ec, 0x18ec], /* CANADIAN SYLLABICS SAYISI HOO */ + [0x18ed, 0x18ed], /* CANADIAN SYLLABICS CARRIER GWU */ + [0x18ee, 0x18ee], /* CANADIAN SYLLABICS CARRIER DENE GEE */ + [0x18ef, 0x18ef], /* CANADIAN SYLLABICS CARRIER GAA */ + [0x18f0, 0x18f0], /* CANADIAN SYLLABICS CARRIER GWA */ + [0x18f1, 0x18f1], /* CANADIAN SYLLABICS SAYISI JUU */ + [0x18f2, 0x18f2], /* CANADIAN SYLLABICS CARRIER JWA */ + [0x18f3, 0x18f3], /* CANADIAN SYLLABICS BEAVER DENE L */ + [0x18f4, 0x18f4], /* CANADIAN SYLLABICS BEAVER DENE R */ + [0x18f5, 0x18f5], /* CANADIAN SYLLABICS CARRIER DENTAL S */ + [0x18f6, 0x18f6], + [0x18f7, 0x18f7], + [0x18f8, 0x18f8], + [0x18f9, 0x18f9], + [0x18fa, 0x18fa], + [0x18fb, 0x18fb], + [0x18fc, 0x18fc], + [0x18fd, 0x18fd], + [0x18fe, 0x18fe], + [0x18ff, 0x18ff], + [0x1900, 0x1900], /* LIMBU VOWEL-CARRIER LETTER */ + [0x1901, 0x1901], /* LIMBU LETTER KA */ + [0x1902, 0x1902], /* LIMBU LETTER KHA */ + [0x1903, 0x1903], /* LIMBU LETTER GA */ + [0x1904, 0x1904], /* LIMBU LETTER GHA */ + [0x1905, 0x1905], /* LIMBU LETTER NGA */ + [0x1906, 0x1906], /* LIMBU LETTER CA */ + [0x1907, 0x1907], /* LIMBU LETTER CHA */ + [0x1908, 0x1908], /* LIMBU LETTER JA */ + [0x1909, 0x1909], /* LIMBU LETTER JHA */ + [0x190a, 0x190a], /* LIMBU LETTER YAN */ + [0x190b, 0x190b], /* LIMBU LETTER TA */ + [0x190c, 0x190c], /* LIMBU LETTER THA */ + [0x190d, 0x190d], /* LIMBU LETTER DA */ + [0x190e, 0x190e], /* LIMBU LETTER DHA */ + [0x190f, 0x190f], /* LIMBU LETTER NA */ + [0x1910, 0x1910], /* LIMBU LETTER PA */ + [0x1911, 0x1911], /* LIMBU LETTER PHA */ + [0x1912, 0x1912], /* LIMBU LETTER BA */ + [0x1913, 0x1913], /* LIMBU LETTER BHA */ + [0x1914, 0x1914], /* LIMBU LETTER MA */ + [0x1915, 0x1915], /* LIMBU LETTER YA */ + [0x1916, 0x1916], /* LIMBU LETTER RA */ + [0x1917, 0x1917], /* LIMBU LETTER LA */ + [0x1918, 0x1918], /* LIMBU LETTER WA */ + [0x1919, 0x1919], /* LIMBU LETTER SHA */ + [0x191a, 0x191a], /* LIMBU LETTER SSA */ + [0x191b, 0x191b], /* LIMBU LETTER SA */ + [0x191c, 0x191c], /* LIMBU LETTER HA */ + [0x191d, 0x191d], + [0x191e, 0x191e], + [0x191f, 0x191f], + [0x1920, 0x1920], /* LIMBU VOWEL SIGN A */ + [0x1921, 0x1921], /* LIMBU VOWEL SIGN I */ + [0x1922, 0x1922], /* LIMBU VOWEL SIGN U */ + [0x1923, 0x1923], /* LIMBU VOWEL SIGN EE */ + [0x1924, 0x1924], /* LIMBU VOWEL SIGN AI */ + [0x1925, 0x1925], /* LIMBU VOWEL SIGN OO */ + [0x1926, 0x1926], /* LIMBU VOWEL SIGN AU */ + [0x1927, 0x1927], /* LIMBU VOWEL SIGN E */ + [0x1928, 0x1928], /* LIMBU VOWEL SIGN O */ + [0x1929, 0x1929], /* LIMBU SUBJOINED LETTER YA */ + [0x192a, 0x192a], /* LIMBU SUBJOINED LETTER RA */ + [0x192b, 0x192b], /* LIMBU SUBJOINED LETTER WA */ + [0x192c, 0x192c], + [0x192d, 0x192d], + [0x192e, 0x192e], + [0x192f, 0x192f], + [0x1930, 0x1930], /* LIMBU SMALL LETTER KA */ + [0x1931, 0x1931], /* LIMBU SMALL LETTER NGA */ + [0x1932, 0x1932], /* LIMBU SMALL LETTER ANUSVARA */ + [0x1933, 0x1933], /* LIMBU SMALL LETTER TA */ + [0x1934, 0x1934], /* LIMBU SMALL LETTER NA */ + [0x1935, 0x1935], /* LIMBU SMALL LETTER PA */ + [0x1936, 0x1936], /* LIMBU SMALL LETTER MA */ + [0x1937, 0x1937], /* LIMBU SMALL LETTER RA */ + [0x1938, 0x1938], /* LIMBU SMALL LETTER LA */ + [0x1939, 0x1939], /* LIMBU SIGN MUKPHRENG */ + [0x193a, 0x193a], /* LIMBU SIGN KEMPHRENG */ + [0x193b, 0x193b], /* LIMBU SIGN SA-I */ + [0x193c, 0x193c], + [0x193d, 0x193d], + [0x193e, 0x193e], + [0x193f, 0x193f], + [0x1940, 0x1940], /* LIMBU SIGN LOO */ + [0x1941, 0x1941], + [0x1942, 0x1942], + [0x1943, 0x1943], + [0x1944, 0x1944], /* LIMBU EXCLAMATION MARK */ + [0x1945, 0x1945], /* LIMBU QUESTION MARK */ + [0x1946, 0x1946], /* LIMBU DIGIT ZERO */ + [0x1947, 0x1947], /* LIMBU DIGIT ONE */ + [0x1948, 0x1948], /* LIMBU DIGIT TWO */ + [0x1949, 0x1949], /* LIMBU DIGIT THREE */ + [0x194a, 0x194a], /* LIMBU DIGIT FOUR */ + [0x194b, 0x194b], /* LIMBU DIGIT FIVE */ + [0x194c, 0x194c], /* LIMBU DIGIT SIX */ + [0x194d, 0x194d], /* LIMBU DIGIT SEVEN */ + [0x194e, 0x194e], /* LIMBU DIGIT EIGHT */ + [0x194f, 0x194f], /* LIMBU DIGIT NINE */ + [0x1950, 0x1950], /* TAI LE LETTER KA */ + [0x1951, 0x1951], /* TAI LE LETTER XA */ + [0x1952, 0x1952], /* TAI LE LETTER NGA */ + [0x1953, 0x1953], /* TAI LE LETTER TSA */ + [0x1954, 0x1954], /* TAI LE LETTER SA */ + [0x1955, 0x1955], /* TAI LE LETTER YA */ + [0x1956, 0x1956], /* TAI LE LETTER TA */ + [0x1957, 0x1957], /* TAI LE LETTER THA */ + [0x1958, 0x1958], /* TAI LE LETTER LA */ + [0x1959, 0x1959], /* TAI LE LETTER PA */ + [0x195a, 0x195a], /* TAI LE LETTER PHA */ + [0x195b, 0x195b], /* TAI LE LETTER MA */ + [0x195c, 0x195c], /* TAI LE LETTER FA */ + [0x195d, 0x195d], /* TAI LE LETTER VA */ + [0x195e, 0x195e], /* TAI LE LETTER HA */ + [0x195f, 0x195f], /* TAI LE LETTER QA */ + [0x1960, 0x1960], /* TAI LE LETTER KHA */ + [0x1961, 0x1961], /* TAI LE LETTER TSHA */ + [0x1962, 0x1962], /* TAI LE LETTER NA */ + [0x1963, 0x1963], /* TAI LE LETTER A */ + [0x1964, 0x1964], /* TAI LE LETTER I */ + [0x1965, 0x1965], /* TAI LE LETTER EE */ + [0x1966, 0x1966], /* TAI LE LETTER EH */ + [0x1967, 0x1967], /* TAI LE LETTER U */ + [0x1968, 0x1968], /* TAI LE LETTER OO */ + [0x1969, 0x1969], /* TAI LE LETTER O */ + [0x196a, 0x196a], /* TAI LE LETTER UE */ + [0x196b, 0x196b], /* TAI LE LETTER E */ + [0x196c, 0x196c], /* TAI LE LETTER AUE */ + [0x196d, 0x196d], /* TAI LE LETTER AI */ + [0x196e, 0x196e], + [0x196f, 0x196f], + [0x1970, 0x1970], /* TAI LE LETTER TONE-2 */ + [0x1971, 0x1971], /* TAI LE LETTER TONE-3 */ + [0x1972, 0x1972], /* TAI LE LETTER TONE-4 */ + [0x1973, 0x1973], /* TAI LE LETTER TONE-5 */ + [0x1974, 0x1974], /* TAI LE LETTER TONE-6 */ + [0x1975, 0x1975], + [0x1976, 0x1976], + [0x1977, 0x1977], + [0x1978, 0x1978], + [0x1979, 0x1979], + [0x197a, 0x197a], + [0x197b, 0x197b], + [0x197c, 0x197c], + [0x197d, 0x197d], + [0x197e, 0x197e], + [0x197f, 0x197f], + [0x1980, 0x1980], /* NEW TAI LUE LETTER HIGH QA */ + [0x1981, 0x1981], /* NEW TAI LUE LETTER LOW QA */ + [0x1982, 0x1982], /* NEW TAI LUE LETTER HIGH KA */ + [0x1983, 0x1983], /* NEW TAI LUE LETTER HIGH XA */ + [0x1984, 0x1984], /* NEW TAI LUE LETTER HIGH NGA */ + [0x1985, 0x1985], /* NEW TAI LUE LETTER LOW KA */ + [0x1986, 0x1986], /* NEW TAI LUE LETTER LOW XA */ + [0x1987, 0x1987], /* NEW TAI LUE LETTER LOW NGA */ + [0x1988, 0x1988], /* NEW TAI LUE LETTER HIGH TSA */ + [0x1989, 0x1989], /* NEW TAI LUE LETTER HIGH SA */ + [0x198a, 0x198a], /* NEW TAI LUE LETTER HIGH YA */ + [0x198b, 0x198b], /* NEW TAI LUE LETTER LOW TSA */ + [0x198c, 0x198c], /* NEW TAI LUE LETTER LOW SA */ + [0x198d, 0x198d], /* NEW TAI LUE LETTER LOW YA */ + [0x198e, 0x198e], /* NEW TAI LUE LETTER HIGH TA */ + [0x198f, 0x198f], /* NEW TAI LUE LETTER HIGH THA */ + [0x1990, 0x1990], /* NEW TAI LUE LETTER HIGH NA */ + [0x1991, 0x1991], /* NEW TAI LUE LETTER LOW TA */ + [0x1992, 0x1992], /* NEW TAI LUE LETTER LOW THA */ + [0x1993, 0x1993], /* NEW TAI LUE LETTER LOW NA */ + [0x1994, 0x1994], /* NEW TAI LUE LETTER HIGH PA */ + [0x1995, 0x1995], /* NEW TAI LUE LETTER HIGH PHA */ + [0x1996, 0x1996], /* NEW TAI LUE LETTER HIGH MA */ + [0x1997, 0x1997], /* NEW TAI LUE LETTER LOW PA */ + [0x1998, 0x1998], /* NEW TAI LUE LETTER LOW PHA */ + [0x1999, 0x1999], /* NEW TAI LUE LETTER LOW MA */ + [0x199a, 0x199a], /* NEW TAI LUE LETTER HIGH FA */ + [0x199b, 0x199b], /* NEW TAI LUE LETTER HIGH VA */ + [0x199c, 0x199c], /* NEW TAI LUE LETTER HIGH LA */ + [0x199d, 0x199d], /* NEW TAI LUE LETTER LOW FA */ + [0x199e, 0x199e], /* NEW TAI LUE LETTER LOW VA */ + [0x199f, 0x199f], /* NEW TAI LUE LETTER LOW LA */ + [0x19a0, 0x19a0], /* NEW TAI LUE LETTER HIGH HA */ + [0x19a1, 0x19a1], /* NEW TAI LUE LETTER HIGH DA */ + [0x19a2, 0x19a2], /* NEW TAI LUE LETTER HIGH BA */ + [0x19a3, 0x19a3], /* NEW TAI LUE LETTER LOW HA */ + [0x19a4, 0x19a4], /* NEW TAI LUE LETTER LOW DA */ + [0x19a5, 0x19a5], /* NEW TAI LUE LETTER LOW BA */ + [0x19a6, 0x19a6], /* NEW TAI LUE LETTER HIGH KVA */ + [0x19a7, 0x19a7], /* NEW TAI LUE LETTER HIGH XVA */ + [0x19a8, 0x19a8], /* NEW TAI LUE LETTER LOW KVA */ + [0x19a9, 0x19a9], /* NEW TAI LUE LETTER LOW XVA */ + [0x19aa, 0x19aa], /* NEW TAI LUE LETTER HIGH SUA */ + [0x19ab, 0x19ab], /* NEW TAI LUE LETTER LOW SUA */ + [0x19ac, 0x19ac], + [0x19ad, 0x19ad], + [0x19ae, 0x19ae], + [0x19af, 0x19af], + [0x19b0, 0x19b0], /* NEW TAI LUE VOWEL SIGN VOWEL SHORTENER */ + [0x19b1, 0x19b1], /* NEW TAI LUE VOWEL SIGN AA */ + [0x19b2, 0x19b2], /* NEW TAI LUE VOWEL SIGN II */ + [0x19b3, 0x19b3], /* NEW TAI LUE VOWEL SIGN U */ + [0x19b4, 0x19b4], /* NEW TAI LUE VOWEL SIGN UU */ + [0x19b5, 0x19b5], /* NEW TAI LUE VOWEL SIGN E */ + [0x19b6, 0x19b6], /* NEW TAI LUE VOWEL SIGN AE */ + [0x19b7, 0x19b7], /* NEW TAI LUE VOWEL SIGN O */ + [0x19b8, 0x19b8], /* NEW TAI LUE VOWEL SIGN OA */ + [0x19b9, 0x19b9], /* NEW TAI LUE VOWEL SIGN UE */ + [0x19ba, 0x19ba], /* NEW TAI LUE VOWEL SIGN AY */ + [0x19bb, 0x19bb], /* NEW TAI LUE VOWEL SIGN AAY */ + [0x19bc, 0x19bc], /* NEW TAI LUE VOWEL SIGN UY */ + [0x19bd, 0x19bd], /* NEW TAI LUE VOWEL SIGN OY */ + [0x19be, 0x19be], /* NEW TAI LUE VOWEL SIGN OAY */ + [0x19bf, 0x19bf], /* NEW TAI LUE VOWEL SIGN UEY */ + [0x19c0, 0x19c0], /* NEW TAI LUE VOWEL SIGN IY */ + [0x19c1, 0x19c1], /* NEW TAI LUE LETTER FINAL V */ + [0x19c2, 0x19c2], /* NEW TAI LUE LETTER FINAL NG */ + [0x19c3, 0x19c3], /* NEW TAI LUE LETTER FINAL N */ + [0x19c4, 0x19c4], /* NEW TAI LUE LETTER FINAL M */ + [0x19c5, 0x19c5], /* NEW TAI LUE LETTER FINAL K */ + [0x19c6, 0x19c6], /* NEW TAI LUE LETTER FINAL D */ + [0x19c7, 0x19c7], /* NEW TAI LUE LETTER FINAL B */ + [0x19c8, 0x19c8], /* NEW TAI LUE TONE MARK-1 */ + [0x19c9, 0x19c9], /* NEW TAI LUE TONE MARK-2 */ + [0x19ca, 0x19ca], + [0x19cb, 0x19cb], + [0x19cc, 0x19cc], + [0x19cd, 0x19cd], + [0x19ce, 0x19ce], + [0x19cf, 0x19cf], + [0x19d0, 0x19d0], /* NEW TAI LUE DIGIT ZERO */ + [0x19d1, 0x19d1], /* NEW TAI LUE DIGIT ONE */ + [0x19d2, 0x19d2], /* NEW TAI LUE DIGIT TWO */ + [0x19d3, 0x19d3], /* NEW TAI LUE DIGIT THREE */ + [0x19d4, 0x19d4], /* NEW TAI LUE DIGIT FOUR */ + [0x19d5, 0x19d5], /* NEW TAI LUE DIGIT FIVE */ + [0x19d6, 0x19d6], /* NEW TAI LUE DIGIT SIX */ + [0x19d7, 0x19d7], /* NEW TAI LUE DIGIT SEVEN */ + [0x19d8, 0x19d8], /* NEW TAI LUE DIGIT EIGHT */ + [0x19d9, 0x19d9], /* NEW TAI LUE DIGIT NINE */ + [0x19da, 0x19da], /* NEW TAI LUE THAM DIGIT ONE */ + [0x19db, 0x19db], + [0x19dc, 0x19dc], + [0x19dd, 0x19dd], + [0x19de, 0x19de], /* NEW TAI LUE SIGN LAE */ + [0x19df, 0x19df], /* NEW TAI LUE SIGN LAEV */ + [0x19e0, 0x19e0], /* KHMER SYMBOL PATHAMASAT */ + [0x19e1, 0x19e1], /* KHMER SYMBOL MUOY KOET */ + [0x19e2, 0x19e2], /* KHMER SYMBOL PII KOET */ + [0x19e3, 0x19e3], /* KHMER SYMBOL BEI KOET */ + [0x19e4, 0x19e4], /* KHMER SYMBOL BUON KOET */ + [0x19e5, 0x19e5], /* KHMER SYMBOL PRAM KOET */ + [0x19e6, 0x19e6], /* KHMER SYMBOL PRAM-MUOY KOET */ + [0x19e7, 0x19e7], /* KHMER SYMBOL PRAM-PII KOET */ + [0x19e8, 0x19e8], /* KHMER SYMBOL PRAM-BEI KOET */ + [0x19e9, 0x19e9], /* KHMER SYMBOL PRAM-BUON KOET */ + [0x19ea, 0x19ea], /* KHMER SYMBOL DAP KOET */ + [0x19eb, 0x19eb], /* KHMER SYMBOL DAP-MUOY KOET */ + [0x19ec, 0x19ec], /* KHMER SYMBOL DAP-PII KOET */ + [0x19ed, 0x19ed], /* KHMER SYMBOL DAP-BEI KOET */ + [0x19ee, 0x19ee], /* KHMER SYMBOL DAP-BUON KOET */ + [0x19ef, 0x19ef], /* KHMER SYMBOL DAP-PRAM KOET */ + [0x19f0, 0x19f0], /* KHMER SYMBOL TUTEYASAT */ + [0x19f1, 0x19f1], /* KHMER SYMBOL MUOY ROC */ + [0x19f2, 0x19f2], /* KHMER SYMBOL PII ROC */ + [0x19f3, 0x19f3], /* KHMER SYMBOL BEI ROC */ + [0x19f4, 0x19f4], /* KHMER SYMBOL BUON ROC */ + [0x19f5, 0x19f5], /* KHMER SYMBOL PRAM ROC */ + [0x19f6, 0x19f6], /* KHMER SYMBOL PRAM-MUOY ROC */ + [0x19f7, 0x19f7], /* KHMER SYMBOL PRAM-PII ROC */ + [0x19f8, 0x19f8], /* KHMER SYMBOL PRAM-BEI ROC */ + [0x19f9, 0x19f9], /* KHMER SYMBOL PRAM-BUON ROC */ + [0x19fa, 0x19fa], /* KHMER SYMBOL DAP ROC */ + [0x19fb, 0x19fb], /* KHMER SYMBOL DAP-MUOY ROC */ + [0x19fc, 0x19fc], /* KHMER SYMBOL DAP-PII ROC */ + [0x19fd, 0x19fd], /* KHMER SYMBOL DAP-BEI ROC */ + [0x19fe, 0x19fe], /* KHMER SYMBOL DAP-BUON ROC */ + [0x19ff, 0x19ff], /* KHMER SYMBOL DAP-PRAM ROC */ + [0x1a00, 0x1a00], /* BUGINESE LETTER KA */ + [0x1a01, 0x1a01], /* BUGINESE LETTER GA */ + [0x1a02, 0x1a02], /* BUGINESE LETTER NGA */ + [0x1a03, 0x1a03], /* BUGINESE LETTER NGKA */ + [0x1a04, 0x1a04], /* BUGINESE LETTER PA */ + [0x1a05, 0x1a05], /* BUGINESE LETTER BA */ + [0x1a06, 0x1a06], /* BUGINESE LETTER MA */ + [0x1a07, 0x1a07], /* BUGINESE LETTER MPA */ + [0x1a08, 0x1a08], /* BUGINESE LETTER TA */ + [0x1a09, 0x1a09], /* BUGINESE LETTER DA */ + [0x1a0a, 0x1a0a], /* BUGINESE LETTER NA */ + [0x1a0b, 0x1a0b], /* BUGINESE LETTER NRA */ + [0x1a0c, 0x1a0c], /* BUGINESE LETTER CA */ + [0x1a0d, 0x1a0d], /* BUGINESE LETTER JA */ + [0x1a0e, 0x1a0e], /* BUGINESE LETTER NYA */ + [0x1a0f, 0x1a0f], /* BUGINESE LETTER NYCA */ + [0x1a10, 0x1a10], /* BUGINESE LETTER YA */ + [0x1a11, 0x1a11], /* BUGINESE LETTER RA */ + [0x1a12, 0x1a12], /* BUGINESE LETTER LA */ + [0x1a13, 0x1a13], /* BUGINESE LETTER VA */ + [0x1a14, 0x1a14], /* BUGINESE LETTER SA */ + [0x1a15, 0x1a15], /* BUGINESE LETTER A */ + [0x1a16, 0x1a16], /* BUGINESE LETTER HA */ + [0x1a17, 0x1a17], /* BUGINESE VOWEL SIGN I */ + [0x1a18, 0x1a18], /* BUGINESE VOWEL SIGN U */ + [0x1a19, 0x1a19], /* BUGINESE VOWEL SIGN E */ + [0x1a1a, 0x1a1a], /* BUGINESE VOWEL SIGN O */ + [0x1a1b, 0x1a1b], /* BUGINESE VOWEL SIGN AE */ + [0x1a1c, 0x1a1c], + [0x1a1d, 0x1a1d], + [0x1a1e, 0x1a1e], /* BUGINESE PALLAWA */ + [0x1a1f, 0x1a1f], /* BUGINESE END OF SECTION */ + [0x1a20, 0x1a20], /* TAI THAM LETTER HIGH KA */ + [0x1a21, 0x1a21], /* TAI THAM LETTER HIGH KHA */ + [0x1a22, 0x1a22], /* TAI THAM LETTER HIGH KXA */ + [0x1a23, 0x1a23], /* TAI THAM LETTER LOW KA */ + [0x1a24, 0x1a24], /* TAI THAM LETTER LOW KXA */ + [0x1a25, 0x1a25], /* TAI THAM LETTER LOW KHA */ + [0x1a26, 0x1a26], /* TAI THAM LETTER NGA */ + [0x1a27, 0x1a27], /* TAI THAM LETTER HIGH CA */ + [0x1a28, 0x1a28], /* TAI THAM LETTER HIGH CHA */ + [0x1a29, 0x1a29], /* TAI THAM LETTER LOW CA */ + [0x1a2a, 0x1a2a], /* TAI THAM LETTER LOW SA */ + [0x1a2b, 0x1a2b], /* TAI THAM LETTER LOW CHA */ + [0x1a2c, 0x1a2c], /* TAI THAM LETTER NYA */ + [0x1a2d, 0x1a2d], /* TAI THAM LETTER RATA */ + [0x1a2e, 0x1a2e], /* TAI THAM LETTER HIGH RATHA */ + [0x1a2f, 0x1a2f], /* TAI THAM LETTER DA */ + [0x1a30, 0x1a30], /* TAI THAM LETTER LOW RATHA */ + [0x1a31, 0x1a31], /* TAI THAM LETTER RANA */ + [0x1a32, 0x1a32], /* TAI THAM LETTER HIGH TA */ + [0x1a33, 0x1a33], /* TAI THAM LETTER HIGH THA */ + [0x1a34, 0x1a34], /* TAI THAM LETTER LOW TA */ + [0x1a35, 0x1a35], /* TAI THAM LETTER LOW THA */ + [0x1a36, 0x1a36], /* TAI THAM LETTER NA */ + [0x1a37, 0x1a37], /* TAI THAM LETTER BA */ + [0x1a38, 0x1a38], /* TAI THAM LETTER HIGH PA */ + [0x1a39, 0x1a39], /* TAI THAM LETTER HIGH PHA */ + [0x1a3a, 0x1a3a], /* TAI THAM LETTER HIGH FA */ + [0x1a3b, 0x1a3b], /* TAI THAM LETTER LOW PA */ + [0x1a3c, 0x1a3c], /* TAI THAM LETTER LOW FA */ + [0x1a3d, 0x1a3d], /* TAI THAM LETTER LOW PHA */ + [0x1a3e, 0x1a3e], /* TAI THAM LETTER MA */ + [0x1a3f, 0x1a3f], /* TAI THAM LETTER LOW YA */ + [0x1a40, 0x1a40], /* TAI THAM LETTER HIGH YA */ + [0x1a41, 0x1a41], /* TAI THAM LETTER RA */ + [0x1a42, 0x1a42], /* TAI THAM LETTER RUE */ + [0x1a43, 0x1a43], /* TAI THAM LETTER LA */ + [0x1a44, 0x1a44], /* TAI THAM LETTER LUE */ + [0x1a45, 0x1a45], /* TAI THAM LETTER WA */ + [0x1a46, 0x1a46], /* TAI THAM LETTER HIGH SHA */ + [0x1a47, 0x1a47], /* TAI THAM LETTER HIGH SSA */ + [0x1a48, 0x1a48], /* TAI THAM LETTER HIGH SA */ + [0x1a49, 0x1a49], /* TAI THAM LETTER HIGH HA */ + [0x1a4a, 0x1a4a], /* TAI THAM LETTER LLA */ + [0x1a4b, 0x1a4b], /* TAI THAM LETTER A */ + [0x1a4c, 0x1a4c], /* TAI THAM LETTER LOW HA */ + [0x1a4d, 0x1a4d], /* TAI THAM LETTER I */ + [0x1a4e, 0x1a4e], /* TAI THAM LETTER II */ + [0x1a4f, 0x1a4f], /* TAI THAM LETTER U */ + [0x1a50, 0x1a50], /* TAI THAM LETTER UU */ + [0x1a51, 0x1a51], /* TAI THAM LETTER EE */ + [0x1a52, 0x1a52], /* TAI THAM LETTER OO */ + [0x1a53, 0x1a53], /* TAI THAM LETTER LAE */ + [0x1a54, 0x1a54], /* TAI THAM LETTER GREAT SA */ + [0x1a55, 0x1a55], /* TAI THAM CONSONANT SIGN MEDIAL RA */ + [0x1a56, 0x1a56], /* TAI THAM CONSONANT SIGN MEDIAL LA */ + [0x1a57, 0x1a57], /* TAI THAM CONSONANT SIGN LA TANG LAI */ + [0x1a58, 0x1a58], /* TAI THAM SIGN MAI KANG LAI */ + [0x1a59, 0x1a59], /* TAI THAM CONSONANT SIGN FINAL NGA */ + [0x1a5a, 0x1a5a], /* TAI THAM CONSONANT SIGN LOW PA */ + [0x1a5b, 0x1a5b], /* TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA */ + [0x1a5c, 0x1a5c], /* TAI THAM CONSONANT SIGN MA */ + [0x1a5d, 0x1a5d], /* TAI THAM CONSONANT SIGN BA */ + [0x1a5e, 0x1a5e], /* TAI THAM CONSONANT SIGN SA */ + [0x1a5f, 0x1a5f], + [0x1a60, 0x1a60], /* TAI THAM SIGN SAKOT */ + [0x1a61, 0x1a61], /* TAI THAM VOWEL SIGN A */ + [0x1a62, 0x1a62], /* TAI THAM VOWEL SIGN MAI SAT */ + [0x1a63, 0x1a63], /* TAI THAM VOWEL SIGN AA */ + [0x1a64, 0x1a64], /* TAI THAM VOWEL SIGN TALL AA */ + [0x1a65, 0x1a65], /* TAI THAM VOWEL SIGN I */ + [0x1a66, 0x1a66], /* TAI THAM VOWEL SIGN II */ + [0x1a67, 0x1a67], /* TAI THAM VOWEL SIGN UE */ + [0x1a68, 0x1a68], /* TAI THAM VOWEL SIGN UUE */ + [0x1a69, 0x1a69], /* TAI THAM VOWEL SIGN U */ + [0x1a6a, 0x1a6a], /* TAI THAM VOWEL SIGN UU */ + [0x1a6b, 0x1a6b], /* TAI THAM VOWEL SIGN O */ + [0x1a6c, 0x1a6c], /* TAI THAM VOWEL SIGN OA BELOW */ + [0x1a6d, 0x1a6d], /* TAI THAM VOWEL SIGN OY */ + [0x1a6e, 0x1a6e], /* TAI THAM VOWEL SIGN E */ + [0x1a6f, 0x1a6f], /* TAI THAM VOWEL SIGN AE */ + [0x1a70, 0x1a70], /* TAI THAM VOWEL SIGN OO */ + [0x1a71, 0x1a71], /* TAI THAM VOWEL SIGN AI */ + [0x1a72, 0x1a72], /* TAI THAM VOWEL SIGN THAM AI */ + [0x1a73, 0x1a73], /* TAI THAM VOWEL SIGN OA ABOVE */ + [0x1a74, 0x1a74], /* TAI THAM SIGN MAI KANG */ + [0x1a75, 0x1a75], /* TAI THAM SIGN TONE-1 */ + [0x1a76, 0x1a76], /* TAI THAM SIGN TONE-2 */ + [0x1a77, 0x1a77], /* TAI THAM SIGN KHUEN TONE-3 */ + [0x1a78, 0x1a78], /* TAI THAM SIGN KHUEN TONE-4 */ + [0x1a79, 0x1a79], /* TAI THAM SIGN KHUEN TONE-5 */ + [0x1a7a, 0x1a7a], /* TAI THAM SIGN RA HAAM */ + [0x1a7b, 0x1a7b], /* TAI THAM SIGN MAI SAM */ + [0x1a7c, 0x1a7c], /* TAI THAM SIGN KHUEN-LUE KARAN */ + [0x1a7d, 0x1a7d], + [0x1a7e, 0x1a7e], + [0x1a7f, 0x1a7f], /* TAI THAM COMBINING CRYPTOGRAMMIC DOT */ + [0x1a80, 0x1a80], /* TAI THAM HORA DIGIT ZERO */ + [0x1a81, 0x1a81], /* TAI THAM HORA DIGIT ONE */ + [0x1a82, 0x1a82], /* TAI THAM HORA DIGIT TWO */ + [0x1a83, 0x1a83], /* TAI THAM HORA DIGIT THREE */ + [0x1a84, 0x1a84], /* TAI THAM HORA DIGIT FOUR */ + [0x1a85, 0x1a85], /* TAI THAM HORA DIGIT FIVE */ + [0x1a86, 0x1a86], /* TAI THAM HORA DIGIT SIX */ + [0x1a87, 0x1a87], /* TAI THAM HORA DIGIT SEVEN */ + [0x1a88, 0x1a88], /* TAI THAM HORA DIGIT EIGHT */ + [0x1a89, 0x1a89], /* TAI THAM HORA DIGIT NINE */ + [0x1a8a, 0x1a8a], + [0x1a8b, 0x1a8b], + [0x1a8c, 0x1a8c], + [0x1a8d, 0x1a8d], + [0x1a8e, 0x1a8e], + [0x1a8f, 0x1a8f], + [0x1a90, 0x1a90], /* TAI THAM THAM DIGIT ZERO */ + [0x1a91, 0x1a91], /* TAI THAM THAM DIGIT ONE */ + [0x1a92, 0x1a92], /* TAI THAM THAM DIGIT TWO */ + [0x1a93, 0x1a93], /* TAI THAM THAM DIGIT THREE */ + [0x1a94, 0x1a94], /* TAI THAM THAM DIGIT FOUR */ + [0x1a95, 0x1a95], /* TAI THAM THAM DIGIT FIVE */ + [0x1a96, 0x1a96], /* TAI THAM THAM DIGIT SIX */ + [0x1a97, 0x1a97], /* TAI THAM THAM DIGIT SEVEN */ + [0x1a98, 0x1a98], /* TAI THAM THAM DIGIT EIGHT */ + [0x1a99, 0x1a99], /* TAI THAM THAM DIGIT NINE */ + [0x1a9a, 0x1a9a], + [0x1a9b, 0x1a9b], + [0x1a9c, 0x1a9c], + [0x1a9d, 0x1a9d], + [0x1a9e, 0x1a9e], + [0x1a9f, 0x1a9f], + [0x1aa0, 0x1aa0], /* TAI THAM SIGN WIANG */ + [0x1aa1, 0x1aa1], /* TAI THAM SIGN WIANGWAAK */ + [0x1aa2, 0x1aa2], /* TAI THAM SIGN SAWAN */ + [0x1aa3, 0x1aa3], /* TAI THAM SIGN KEOW */ + [0x1aa4, 0x1aa4], /* TAI THAM SIGN HOY */ + [0x1aa5, 0x1aa5], /* TAI THAM SIGN DOKMAI */ + [0x1aa6, 0x1aa6], /* TAI THAM SIGN REVERSED ROTATED RANA */ + [0x1aa7, 0x1aa7], /* TAI THAM SIGN MAI YAMOK */ + [0x1aa8, 0x1aa8], /* TAI THAM SIGN KAAN */ + [0x1aa9, 0x1aa9], /* TAI THAM SIGN KAANKUU */ + [0x1aaa, 0x1aaa], /* TAI THAM SIGN SATKAAN */ + [0x1aab, 0x1aab], /* TAI THAM SIGN SATKAANKUU */ + [0x1aac, 0x1aac], /* TAI THAM SIGN HANG */ + [0x1aad, 0x1aad], /* TAI THAM SIGN CAANG */ + [0x1aae, 0x1aae], + [0x1aaf, 0x1aaf], + [0x1ab0, 0x1ab0], + [0x1ab1, 0x1ab1], + [0x1ab2, 0x1ab2], + [0x1ab3, 0x1ab3], + [0x1ab4, 0x1ab4], + [0x1ab5, 0x1ab5], + [0x1ab6, 0x1ab6], + [0x1ab7, 0x1ab7], + [0x1ab8, 0x1ab8], + [0x1ab9, 0x1ab9], + [0x1aba, 0x1aba], + [0x1abb, 0x1abb], + [0x1abc, 0x1abc], + [0x1abd, 0x1abd], + [0x1abe, 0x1abe], + [0x1abf, 0x1abf], + [0x1ac0, 0x1ac0], + [0x1ac1, 0x1ac1], + [0x1ac2, 0x1ac2], + [0x1ac3, 0x1ac3], + [0x1ac4, 0x1ac4], + [0x1ac5, 0x1ac5], + [0x1ac6, 0x1ac6], + [0x1ac7, 0x1ac7], + [0x1ac8, 0x1ac8], + [0x1ac9, 0x1ac9], + [0x1aca, 0x1aca], + [0x1acb, 0x1acb], + [0x1acc, 0x1acc], + [0x1acd, 0x1acd], + [0x1ace, 0x1ace], + [0x1acf, 0x1acf], + [0x1ad0, 0x1ad0], + [0x1ad1, 0x1ad1], + [0x1ad2, 0x1ad2], + [0x1ad3, 0x1ad3], + [0x1ad4, 0x1ad4], + [0x1ad5, 0x1ad5], + [0x1ad6, 0x1ad6], + [0x1ad7, 0x1ad7], + [0x1ad8, 0x1ad8], + [0x1ad9, 0x1ad9], + [0x1ada, 0x1ada], + [0x1adb, 0x1adb], + [0x1adc, 0x1adc], + [0x1add, 0x1add], + [0x1ade, 0x1ade], + [0x1adf, 0x1adf], + [0x1ae0, 0x1ae0], + [0x1ae1, 0x1ae1], + [0x1ae2, 0x1ae2], + [0x1ae3, 0x1ae3], + [0x1ae4, 0x1ae4], + [0x1ae5, 0x1ae5], + [0x1ae6, 0x1ae6], + [0x1ae7, 0x1ae7], + [0x1ae8, 0x1ae8], + [0x1ae9, 0x1ae9], + [0x1aea, 0x1aea], + [0x1aeb, 0x1aeb], + [0x1aec, 0x1aec], + [0x1aed, 0x1aed], + [0x1aee, 0x1aee], + [0x1aef, 0x1aef], + [0x1af0, 0x1af0], + [0x1af1, 0x1af1], + [0x1af2, 0x1af2], + [0x1af3, 0x1af3], + [0x1af4, 0x1af4], + [0x1af5, 0x1af5], + [0x1af6, 0x1af6], + [0x1af7, 0x1af7], + [0x1af8, 0x1af8], + [0x1af9, 0x1af9], + [0x1afa, 0x1afa], + [0x1afb, 0x1afb], + [0x1afc, 0x1afc], + [0x1afd, 0x1afd], + [0x1afe, 0x1afe], + [0x1aff, 0x1aff], + [0x1b00, 0x1b00], /* BALINESE SIGN ULU RICEM */ + [0x1b01, 0x1b01], /* BALINESE SIGN ULU CANDRA */ + [0x1b02, 0x1b02], /* BALINESE SIGN CECEK */ + [0x1b03, 0x1b03], /* BALINESE SIGN SURANG */ + [0x1b04, 0x1b04], /* BALINESE SIGN BISAH */ + [0x1b05, 0x1b05], /* BALINESE LETTER AKARA */ + [0x1b06, 0x1b06], /* BALINESE LETTER AKARA TEDUNG */ + [0x1b07, 0x1b07], /* BALINESE LETTER IKARA */ + [0x1b08, 0x1b08], /* BALINESE LETTER IKARA TEDUNG */ + [0x1b09, 0x1b09], /* BALINESE LETTER UKARA */ + [0x1b0a, 0x1b0a], /* BALINESE LETTER UKARA TEDUNG */ + [0x1b0b, 0x1b0b], /* BALINESE LETTER RA REPA */ + [0x1b0c, 0x1b0c], /* BALINESE LETTER RA REPA TEDUNG */ + [0x1b0d, 0x1b0d], /* BALINESE LETTER LA LENGA */ + [0x1b0e, 0x1b0e], /* BALINESE LETTER LA LENGA TEDUNG */ + [0x1b0f, 0x1b0f], /* BALINESE LETTER EKARA */ + [0x1b10, 0x1b10], /* BALINESE LETTER AIKARA */ + [0x1b11, 0x1b11], /* BALINESE LETTER OKARA */ + [0x1b12, 0x1b12], /* BALINESE LETTER OKARA TEDUNG */ + [0x1b13, 0x1b13], /* BALINESE LETTER KA */ + [0x1b14, 0x1b14], /* BALINESE LETTER KA MAHAPRANA */ + [0x1b15, 0x1b15], /* BALINESE LETTER GA */ + [0x1b16, 0x1b16], /* BALINESE LETTER GA GORA */ + [0x1b17, 0x1b17], /* BALINESE LETTER NGA */ + [0x1b18, 0x1b18], /* BALINESE LETTER CA */ + [0x1b19, 0x1b19], /* BALINESE LETTER CA LACA */ + [0x1b1a, 0x1b1a], /* BALINESE LETTER JA */ + [0x1b1b, 0x1b1b], /* BALINESE LETTER JA JERA */ + [0x1b1c, 0x1b1c], /* BALINESE LETTER NYA */ + [0x1b1d, 0x1b1d], /* BALINESE LETTER TA LATIK */ + [0x1b1e, 0x1b1e], /* BALINESE LETTER TA MURDA MAHAPRANA */ + [0x1b1f, 0x1b1f], /* BALINESE LETTER DA MURDA ALPAPRANA */ + [0x1b20, 0x1b20], /* BALINESE LETTER DA MURDA MAHAPRANA */ + [0x1b21, 0x1b21], /* BALINESE LETTER NA RAMBAT */ + [0x1b22, 0x1b22], /* BALINESE LETTER TA */ + [0x1b23, 0x1b23], /* BALINESE LETTER TA TAWA */ + [0x1b24, 0x1b24], /* BALINESE LETTER DA */ + [0x1b25, 0x1b25], /* BALINESE LETTER DA MADU */ + [0x1b26, 0x1b26], /* BALINESE LETTER NA */ + [0x1b27, 0x1b27], /* BALINESE LETTER PA */ + [0x1b28, 0x1b28], /* BALINESE LETTER PA KAPAL */ + [0x1b29, 0x1b29], /* BALINESE LETTER BA */ + [0x1b2a, 0x1b2a], /* BALINESE LETTER BA KEMBANG */ + [0x1b2b, 0x1b2b], /* BALINESE LETTER MA */ + [0x1b2c, 0x1b2c], /* BALINESE LETTER YA */ + [0x1b2d, 0x1b2d], /* BALINESE LETTER RA */ + [0x1b2e, 0x1b2e], /* BALINESE LETTER LA */ + [0x1b2f, 0x1b2f], /* BALINESE LETTER WA */ + [0x1b30, 0x1b30], /* BALINESE LETTER SA SAGA */ + [0x1b31, 0x1b31], /* BALINESE LETTER SA SAPA */ + [0x1b32, 0x1b32], /* BALINESE LETTER SA */ + [0x1b33, 0x1b33], /* BALINESE LETTER HA */ + [0x1b34, 0x1b34], /* BALINESE SIGN REREKAN */ + [0x1b35, 0x1b35], /* BALINESE VOWEL SIGN TEDUNG */ + [0x1b36, 0x1b36], /* BALINESE VOWEL SIGN ULU */ + [0x1b37, 0x1b37], /* BALINESE VOWEL SIGN ULU SARI */ + [0x1b38, 0x1b38], /* BALINESE VOWEL SIGN SUKU */ + [0x1b39, 0x1b39], /* BALINESE VOWEL SIGN SUKU ILUT */ + [0x1b3a, 0x1b3a], /* BALINESE VOWEL SIGN RA REPA */ + [0x1b3b, 0x1b3b], /* BALINESE VOWEL SIGN RA REPA TEDUNG */ + [0x1b3c, 0x1b3c], /* BALINESE VOWEL SIGN LA LENGA */ + [0x1b3d, 0x1b3d], /* BALINESE VOWEL SIGN LA LENGA TEDUNG */ + [0x1b3e, 0x1b3e], /* BALINESE VOWEL SIGN TALING */ + [0x1b3f, 0x1b3f], /* BALINESE VOWEL SIGN TALING REPA */ + [0x1b40, 0x1b40], /* BALINESE VOWEL SIGN TALING TEDUNG */ + [0x1b41, 0x1b41], /* BALINESE VOWEL SIGN TALING REPA TEDUNG */ + [0x1b42, 0x1b42], /* BALINESE VOWEL SIGN PEPET */ + [0x1b43, 0x1b43], /* BALINESE VOWEL SIGN PEPET TEDUNG */ + [0x1b44, 0x1b44], /* BALINESE ADEG ADEG */ + [0x1b45, 0x1b45], /* BALINESE LETTER KAF SASAK */ + [0x1b46, 0x1b46], /* BALINESE LETTER KHOT SASAK */ + [0x1b47, 0x1b47], /* BALINESE LETTER TZIR SASAK */ + [0x1b48, 0x1b48], /* BALINESE LETTER EF SASAK */ + [0x1b49, 0x1b49], /* BALINESE LETTER VE SASAK */ + [0x1b4a, 0x1b4a], /* BALINESE LETTER ZAL SASAK */ + [0x1b4b, 0x1b4b], /* BALINESE LETTER ASYURA SASAK */ + [0x1b4c, 0x1b4c], + [0x1b4d, 0x1b4d], + [0x1b4e, 0x1b4e], + [0x1b4f, 0x1b4f], + [0x1b50, 0x1b50], /* BALINESE DIGIT ZERO */ + [0x1b51, 0x1b51], /* BALINESE DIGIT ONE */ + [0x1b52, 0x1b52], /* BALINESE DIGIT TWO */ + [0x1b53, 0x1b53], /* BALINESE DIGIT THREE */ + [0x1b54, 0x1b54], /* BALINESE DIGIT FOUR */ + [0x1b55, 0x1b55], /* BALINESE DIGIT FIVE */ + [0x1b56, 0x1b56], /* BALINESE DIGIT SIX */ + [0x1b57, 0x1b57], /* BALINESE DIGIT SEVEN */ + [0x1b58, 0x1b58], /* BALINESE DIGIT EIGHT */ + [0x1b59, 0x1b59], /* BALINESE DIGIT NINE */ + [0x1b5a, 0x1b5a], /* BALINESE PANTI */ + [0x1b5b, 0x1b5b], /* BALINESE PAMADA */ + [0x1b5c, 0x1b5c], /* BALINESE WINDU */ + [0x1b5d, 0x1b5d], /* BALINESE CARIK PAMUNGKAH */ + [0x1b5e, 0x1b5e], /* BALINESE CARIK SIKI */ + [0x1b5f, 0x1b5f], /* BALINESE CARIK PAREREN */ + [0x1b60, 0x1b60], /* BALINESE PAMENENG */ + [0x1b61, 0x1b61], /* BALINESE MUSICAL SYMBOL DONG */ + [0x1b62, 0x1b62], /* BALINESE MUSICAL SYMBOL DENG */ + [0x1b63, 0x1b63], /* BALINESE MUSICAL SYMBOL DUNG */ + [0x1b64, 0x1b64], /* BALINESE MUSICAL SYMBOL DANG */ + [0x1b65, 0x1b65], /* BALINESE MUSICAL SYMBOL DANG SURANG */ + [0x1b66, 0x1b66], /* BALINESE MUSICAL SYMBOL DING */ + [0x1b67, 0x1b67], /* BALINESE MUSICAL SYMBOL DAENG */ + [0x1b68, 0x1b68], /* BALINESE MUSICAL SYMBOL DEUNG */ + [0x1b69, 0x1b69], /* BALINESE MUSICAL SYMBOL DAING */ + [0x1b6a, 0x1b6a], /* BALINESE MUSICAL SYMBOL DANG GEDE */ + [0x1b6b, 0x1b6b], /* BALINESE MUSICAL SYMBOL COMBINING TEGEH */ + [0x1b6c, 0x1b6c], /* BALINESE MUSICAL SYMBOL COMBINING ENDEP */ + [0x1b6d, 0x1b6d], /* BALINESE MUSICAL SYMBOL COMBINING KEMPUL */ + [0x1b6e, 0x1b6e], /* BALINESE MUSICAL SYMBOL COMBINING KEMPLI */ + [0x1b6f, 0x1b6f], /* BALINESE MUSICAL SYMBOL COMBINING JEGOGAN */ + [0x1b70, 0x1b70], /* BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN */ + [0x1b71, 0x1b71], /* BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN */ + [0x1b72, 0x1b72], /* BALINESE MUSICAL SYMBOL COMBINING BENDE */ + [0x1b73, 0x1b73], /* BALINESE MUSICAL SYMBOL COMBINING GONG */ + [0x1b74, 0x1b74], /* BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG */ + [0x1b75, 0x1b75], /* BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG */ + [0x1b76, 0x1b76], /* BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK */ + [0x1b77, 0x1b77], /* BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK */ + [0x1b78, 0x1b78], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG */ + [0x1b79, 0x1b79], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG */ + [0x1b7a, 0x1b7a], /* BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK */ + [0x1b7b, 0x1b7b], /* BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK */ + [0x1b7c, 0x1b7c], /* BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING */ + [0x1b7d, 0x1b7d], + [0x1b7e, 0x1b7e], + [0x1b7f, 0x1b7f], + [0x1b80, 0x1b80], /* SUNDANESE SIGN PANYECEK */ + [0x1b81, 0x1b81], /* SUNDANESE SIGN PANGLAYAR */ + [0x1b82, 0x1b82], /* SUNDANESE SIGN PANGWISAD */ + [0x1b83, 0x1b83], /* SUNDANESE LETTER A */ + [0x1b84, 0x1b84], /* SUNDANESE LETTER I */ + [0x1b85, 0x1b85], /* SUNDANESE LETTER U */ + [0x1b86, 0x1b86], /* SUNDANESE LETTER AE */ + [0x1b87, 0x1b87], /* SUNDANESE LETTER O */ + [0x1b88, 0x1b88], /* SUNDANESE LETTER E */ + [0x1b89, 0x1b89], /* SUNDANESE LETTER EU */ + [0x1b8a, 0x1b8a], /* SUNDANESE LETTER KA */ + [0x1b8b, 0x1b8b], /* SUNDANESE LETTER QA */ + [0x1b8c, 0x1b8c], /* SUNDANESE LETTER GA */ + [0x1b8d, 0x1b8d], /* SUNDANESE LETTER NGA */ + [0x1b8e, 0x1b8e], /* SUNDANESE LETTER CA */ + [0x1b8f, 0x1b8f], /* SUNDANESE LETTER JA */ + [0x1b90, 0x1b90], /* SUNDANESE LETTER ZA */ + [0x1b91, 0x1b91], /* SUNDANESE LETTER NYA */ + [0x1b92, 0x1b92], /* SUNDANESE LETTER TA */ + [0x1b93, 0x1b93], /* SUNDANESE LETTER DA */ + [0x1b94, 0x1b94], /* SUNDANESE LETTER NA */ + [0x1b95, 0x1b95], /* SUNDANESE LETTER PA */ + [0x1b96, 0x1b96], /* SUNDANESE LETTER FA */ + [0x1b97, 0x1b97], /* SUNDANESE LETTER VA */ + [0x1b98, 0x1b98], /* SUNDANESE LETTER BA */ + [0x1b99, 0x1b99], /* SUNDANESE LETTER MA */ + [0x1b9a, 0x1b9a], /* SUNDANESE LETTER YA */ + [0x1b9b, 0x1b9b], /* SUNDANESE LETTER RA */ + [0x1b9c, 0x1b9c], /* SUNDANESE LETTER LA */ + [0x1b9d, 0x1b9d], /* SUNDANESE LETTER WA */ + [0x1b9e, 0x1b9e], /* SUNDANESE LETTER SA */ + [0x1b9f, 0x1b9f], /* SUNDANESE LETTER XA */ + [0x1ba0, 0x1ba0], /* SUNDANESE LETTER HA */ + [0x1ba1, 0x1ba1], /* SUNDANESE CONSONANT SIGN PAMINGKAL */ + [0x1ba2, 0x1ba2], /* SUNDANESE CONSONANT SIGN PANYAKRA */ + [0x1ba3, 0x1ba3], /* SUNDANESE CONSONANT SIGN PANYIKU */ + [0x1ba4, 0x1ba4], /* SUNDANESE VOWEL SIGN PANGHULU */ + [0x1ba5, 0x1ba5], /* SUNDANESE VOWEL SIGN PANYUKU */ + [0x1ba6, 0x1ba6], /* SUNDANESE VOWEL SIGN PANAELAENG */ + [0x1ba7, 0x1ba7], /* SUNDANESE VOWEL SIGN PANOLONG */ + [0x1ba8, 0x1ba8], /* SUNDANESE VOWEL SIGN PAMEPET */ + [0x1ba9, 0x1ba9], /* SUNDANESE VOWEL SIGN PANEULEUNG */ + [0x1baa, 0x1baa], /* SUNDANESE SIGN PAMAAEH */ + [0x1bab, 0x1bab], /* SUNDANESE SIGN VIRAMA */ + [0x1bac, 0x1bac], /* SUNDANESE CONSONANT SIGN PASANGAN MA */ + [0x1bad, 0x1bad], /* SUNDANESE CONSONANT SIGN PASANGAN WA */ + [0x1bae, 0x1bae], /* SUNDANESE LETTER KHA */ + [0x1baf, 0x1baf], /* SUNDANESE LETTER SYA */ + [0x1bb0, 0x1bb0], /* SUNDANESE DIGIT ZERO */ + [0x1bb1, 0x1bb1], /* SUNDANESE DIGIT ONE */ + [0x1bb2, 0x1bb2], /* SUNDANESE DIGIT TWO */ + [0x1bb3, 0x1bb3], /* SUNDANESE DIGIT THREE */ + [0x1bb4, 0x1bb4], /* SUNDANESE DIGIT FOUR */ + [0x1bb5, 0x1bb5], /* SUNDANESE DIGIT FIVE */ + [0x1bb6, 0x1bb6], /* SUNDANESE DIGIT SIX */ + [0x1bb7, 0x1bb7], /* SUNDANESE DIGIT SEVEN */ + [0x1bb8, 0x1bb8], /* SUNDANESE DIGIT EIGHT */ + [0x1bb9, 0x1bb9], /* SUNDANESE DIGIT NINE */ + [0x1bba, 0x1bba], /* SUNDANESE AVAGRAHA */ + [0x1bbb, 0x1bbb], /* SUNDANESE LETTER REU */ + [0x1bbc, 0x1bbc], /* SUNDANESE LETTER LEU */ + [0x1bbd, 0x1bbd], /* SUNDANESE LETTER BHA */ + [0x1bbe, 0x1bbe], /* SUNDANESE LETTER FINAL K */ + [0x1bbf, 0x1bbf], /* SUNDANESE LETTER FINAL M */ + [0x1bc0, 0x1bc0], /* BATAK LETTER A */ + [0x1bc1, 0x1bc1], /* BATAK LETTER SIMALUNGUN A */ + [0x1bc2, 0x1bc2], /* BATAK LETTER HA */ + [0x1bc3, 0x1bc3], /* BATAK LETTER SIMALUNGUN HA */ + [0x1bc4, 0x1bc4], /* BATAK LETTER MANDAILING HA */ + [0x1bc5, 0x1bc5], /* BATAK LETTER BA */ + [0x1bc6, 0x1bc6], /* BATAK LETTER KARO BA */ + [0x1bc7, 0x1bc7], /* BATAK LETTER PA */ + [0x1bc8, 0x1bc8], /* BATAK LETTER SIMALUNGUN PA */ + [0x1bc9, 0x1bc9], /* BATAK LETTER NA */ + [0x1bca, 0x1bca], /* BATAK LETTER MANDAILING NA */ + [0x1bcb, 0x1bcb], /* BATAK LETTER WA */ + [0x1bcc, 0x1bcc], /* BATAK LETTER SIMALUNGUN WA */ + [0x1bcd, 0x1bcd], /* BATAK LETTER PAKPAK WA */ + [0x1bce, 0x1bce], /* BATAK LETTER GA */ + [0x1bcf, 0x1bcf], /* BATAK LETTER SIMALUNGUN GA */ + [0x1bd0, 0x1bd0], /* BATAK LETTER JA */ + [0x1bd1, 0x1bd1], /* BATAK LETTER DA */ + [0x1bd2, 0x1bd2], /* BATAK LETTER RA */ + [0x1bd3, 0x1bd3], /* BATAK LETTER SIMALUNGUN RA */ + [0x1bd4, 0x1bd4], /* BATAK LETTER MA */ + [0x1bd5, 0x1bd5], /* BATAK LETTER SIMALUNGUN MA */ + [0x1bd6, 0x1bd6], /* BATAK LETTER SOUTHERN TA */ + [0x1bd7, 0x1bd7], /* BATAK LETTER NORTHERN TA */ + [0x1bd8, 0x1bd8], /* BATAK LETTER SA */ + [0x1bd9, 0x1bd9], /* BATAK LETTER SIMALUNGUN SA */ + [0x1bda, 0x1bda], /* BATAK LETTER MANDAILING SA */ + [0x1bdb, 0x1bdb], /* BATAK LETTER YA */ + [0x1bdc, 0x1bdc], /* BATAK LETTER SIMALUNGUN YA */ + [0x1bdd, 0x1bdd], /* BATAK LETTER NGA */ + [0x1bde, 0x1bde], /* BATAK LETTER LA */ + [0x1bdf, 0x1bdf], /* BATAK LETTER SIMALUNGUN LA */ + [0x1be0, 0x1be0], /* BATAK LETTER NYA */ + [0x1be1, 0x1be1], /* BATAK LETTER CA */ + [0x1be2, 0x1be2], /* BATAK LETTER NDA */ + [0x1be3, 0x1be3], /* BATAK LETTER MBA */ + [0x1be4, 0x1be4], /* BATAK LETTER I */ + [0x1be5, 0x1be5], /* BATAK LETTER U */ + [0x1be6, 0x1be6], /* BATAK SIGN TOMPI */ + [0x1be7, 0x1be7], /* BATAK VOWEL SIGN E */ + [0x1be8, 0x1be8], /* BATAK VOWEL SIGN PAKPAK E */ + [0x1be9, 0x1be9], /* BATAK VOWEL SIGN EE */ + [0x1bea, 0x1bea], /* BATAK VOWEL SIGN I */ + [0x1beb, 0x1beb], /* BATAK VOWEL SIGN KARO I */ + [0x1bec, 0x1bec], /* BATAK VOWEL SIGN O */ + [0x1bed, 0x1bed], /* BATAK VOWEL SIGN KARO O */ + [0x1bee, 0x1bee], /* BATAK VOWEL SIGN U */ + [0x1bef, 0x1bef], /* BATAK VOWEL SIGN U FOR SIMALUNGUN SA */ + [0x1bf0, 0x1bf0], /* BATAK CONSONANT SIGN NG */ + [0x1bf1, 0x1bf1], /* BATAK CONSONANT SIGN H */ + [0x1bf2, 0x1bf2], /* BATAK PANGOLAT */ + [0x1bf3, 0x1bf3], /* BATAK PANONGONAN */ + [0x1bf4, 0x1bf4], + [0x1bf5, 0x1bf5], + [0x1bf6, 0x1bf6], + [0x1bf7, 0x1bf7], + [0x1bf8, 0x1bf8], + [0x1bf9, 0x1bf9], + [0x1bfa, 0x1bfa], + [0x1bfb, 0x1bfb], + [0x1bfc, 0x1bfc], /* BATAK SYMBOL BINDU NA METEK */ + [0x1bfd, 0x1bfd], /* BATAK SYMBOL BINDU PINARBORAS */ + [0x1bfe, 0x1bfe], /* BATAK SYMBOL BINDU JUDUL */ + [0x1bff, 0x1bff], /* BATAK SYMBOL BINDU PANGOLAT */ + [0x1c00, 0x1c00], /* LEPCHA LETTER KA */ + [0x1c01, 0x1c01], /* LEPCHA LETTER KLA */ + [0x1c02, 0x1c02], /* LEPCHA LETTER KHA */ + [0x1c03, 0x1c03], /* LEPCHA LETTER GA */ + [0x1c04, 0x1c04], /* LEPCHA LETTER GLA */ + [0x1c05, 0x1c05], /* LEPCHA LETTER NGA */ + [0x1c06, 0x1c06], /* LEPCHA LETTER CA */ + [0x1c07, 0x1c07], /* LEPCHA LETTER CHA */ + [0x1c08, 0x1c08], /* LEPCHA LETTER JA */ + [0x1c09, 0x1c09], /* LEPCHA LETTER NYA */ + [0x1c0a, 0x1c0a], /* LEPCHA LETTER TA */ + [0x1c0b, 0x1c0b], /* LEPCHA LETTER THA */ + [0x1c0c, 0x1c0c], /* LEPCHA LETTER DA */ + [0x1c0d, 0x1c0d], /* LEPCHA LETTER NA */ + [0x1c0e, 0x1c0e], /* LEPCHA LETTER PA */ + [0x1c0f, 0x1c0f], /* LEPCHA LETTER PLA */ + [0x1c10, 0x1c10], /* LEPCHA LETTER PHA */ + [0x1c11, 0x1c11], /* LEPCHA LETTER FA */ + [0x1c12, 0x1c12], /* LEPCHA LETTER FLA */ + [0x1c13, 0x1c13], /* LEPCHA LETTER BA */ + [0x1c14, 0x1c14], /* LEPCHA LETTER BLA */ + [0x1c15, 0x1c15], /* LEPCHA LETTER MA */ + [0x1c16, 0x1c16], /* LEPCHA LETTER MLA */ + [0x1c17, 0x1c17], /* LEPCHA LETTER TSA */ + [0x1c18, 0x1c18], /* LEPCHA LETTER TSHA */ + [0x1c19, 0x1c19], /* LEPCHA LETTER DZA */ + [0x1c1a, 0x1c1a], /* LEPCHA LETTER YA */ + [0x1c1b, 0x1c1b], /* LEPCHA LETTER RA */ + [0x1c1c, 0x1c1c], /* LEPCHA LETTER LA */ + [0x1c1d, 0x1c1d], /* LEPCHA LETTER HA */ + [0x1c1e, 0x1c1e], /* LEPCHA LETTER HLA */ + [0x1c1f, 0x1c1f], /* LEPCHA LETTER VA */ + [0x1c20, 0x1c20], /* LEPCHA LETTER SA */ + [0x1c21, 0x1c21], /* LEPCHA LETTER SHA */ + [0x1c22, 0x1c22], /* LEPCHA LETTER WA */ + [0x1c23, 0x1c23], /* LEPCHA LETTER A */ + [0x1c24, 0x1c24], /* LEPCHA SUBJOINED LETTER YA */ + [0x1c25, 0x1c25], /* LEPCHA SUBJOINED LETTER RA */ + [0x1c26, 0x1c26], /* LEPCHA VOWEL SIGN AA */ + [0x1c27, 0x1c27], /* LEPCHA VOWEL SIGN I */ + [0x1c28, 0x1c28], /* LEPCHA VOWEL SIGN O */ + [0x1c29, 0x1c29], /* LEPCHA VOWEL SIGN OO */ + [0x1c2a, 0x1c2a], /* LEPCHA VOWEL SIGN U */ + [0x1c2b, 0x1c2b], /* LEPCHA VOWEL SIGN UU */ + [0x1c2c, 0x1c2c], /* LEPCHA VOWEL SIGN E */ + [0x1c2d, 0x1c2d], /* LEPCHA CONSONANT SIGN K */ + [0x1c2e, 0x1c2e], /* LEPCHA CONSONANT SIGN M */ + [0x1c2f, 0x1c2f], /* LEPCHA CONSONANT SIGN L */ + [0x1c30, 0x1c30], /* LEPCHA CONSONANT SIGN N */ + [0x1c31, 0x1c31], /* LEPCHA CONSONANT SIGN P */ + [0x1c32, 0x1c32], /* LEPCHA CONSONANT SIGN R */ + [0x1c33, 0x1c33], /* LEPCHA CONSONANT SIGN T */ + [0x1c34, 0x1c34], /* LEPCHA CONSONANT SIGN NYIN-DO */ + [0x1c35, 0x1c35], /* LEPCHA CONSONANT SIGN KANG */ + [0x1c36, 0x1c36], /* LEPCHA SIGN RAN */ + [0x1c37, 0x1c37], /* LEPCHA SIGN NUKTA */ + [0x1c38, 0x1c38], + [0x1c39, 0x1c39], + [0x1c3a, 0x1c3a], + [0x1c3b, 0x1c3b], /* LEPCHA PUNCTUATION TA-ROL */ + [0x1c3c, 0x1c3c], /* LEPCHA PUNCTUATION NYET THYOOM TA-ROL */ + [0x1c3d, 0x1c3d], /* LEPCHA PUNCTUATION CER-WA */ + [0x1c3e, 0x1c3e], /* LEPCHA PUNCTUATION TSHOOK CER-WA */ + [0x1c3f, 0x1c3f], /* LEPCHA PUNCTUATION TSHOOK */ + [0x1c40, 0x1c40], /* LEPCHA DIGIT ZERO */ + [0x1c41, 0x1c41], /* LEPCHA DIGIT ONE */ + [0x1c42, 0x1c42], /* LEPCHA DIGIT TWO */ + [0x1c43, 0x1c43], /* LEPCHA DIGIT THREE */ + [0x1c44, 0x1c44], /* LEPCHA DIGIT FOUR */ + [0x1c45, 0x1c45], /* LEPCHA DIGIT FIVE */ + [0x1c46, 0x1c46], /* LEPCHA DIGIT SIX */ + [0x1c47, 0x1c47], /* LEPCHA DIGIT SEVEN */ + [0x1c48, 0x1c48], /* LEPCHA DIGIT EIGHT */ + [0x1c49, 0x1c49], /* LEPCHA DIGIT NINE */ + [0x1c4a, 0x1c4a], + [0x1c4b, 0x1c4b], + [0x1c4c, 0x1c4c], + [0x1c4d, 0x1c4d], /* LEPCHA LETTER TTA */ + [0x1c4e, 0x1c4e], /* LEPCHA LETTER TTHA */ + [0x1c4f, 0x1c4f], /* LEPCHA LETTER DDA */ + [0x1c50, 0x1c50], /* OL CHIKI DIGIT ZERO */ + [0x1c51, 0x1c51], /* OL CHIKI DIGIT ONE */ + [0x1c52, 0x1c52], /* OL CHIKI DIGIT TWO */ + [0x1c53, 0x1c53], /* OL CHIKI DIGIT THREE */ + [0x1c54, 0x1c54], /* OL CHIKI DIGIT FOUR */ + [0x1c55, 0x1c55], /* OL CHIKI DIGIT FIVE */ + [0x1c56, 0x1c56], /* OL CHIKI DIGIT SIX */ + [0x1c57, 0x1c57], /* OL CHIKI DIGIT SEVEN */ + [0x1c58, 0x1c58], /* OL CHIKI DIGIT EIGHT */ + [0x1c59, 0x1c59], /* OL CHIKI DIGIT NINE */ + [0x1c5a, 0x1c5a], /* OL CHIKI LETTER LA */ + [0x1c5b, 0x1c5b], /* OL CHIKI LETTER AT */ + [0x1c5c, 0x1c5c], /* OL CHIKI LETTER AG */ + [0x1c5d, 0x1c5d], /* OL CHIKI LETTER ANG */ + [0x1c5e, 0x1c5e], /* OL CHIKI LETTER AL */ + [0x1c5f, 0x1c5f], /* OL CHIKI LETTER LAA */ + [0x1c60, 0x1c60], /* OL CHIKI LETTER AAK */ + [0x1c61, 0x1c61], /* OL CHIKI LETTER AAJ */ + [0x1c62, 0x1c62], /* OL CHIKI LETTER AAM */ + [0x1c63, 0x1c63], /* OL CHIKI LETTER AAW */ + [0x1c64, 0x1c64], /* OL CHIKI LETTER LI */ + [0x1c65, 0x1c65], /* OL CHIKI LETTER IS */ + [0x1c66, 0x1c66], /* OL CHIKI LETTER IH */ + [0x1c67, 0x1c67], /* OL CHIKI LETTER INY */ + [0x1c68, 0x1c68], /* OL CHIKI LETTER IR */ + [0x1c69, 0x1c69], /* OL CHIKI LETTER LU */ + [0x1c6a, 0x1c6a], /* OL CHIKI LETTER UC */ + [0x1c6b, 0x1c6b], /* OL CHIKI LETTER UD */ + [0x1c6c, 0x1c6c], /* OL CHIKI LETTER UNN */ + [0x1c6d, 0x1c6d], /* OL CHIKI LETTER UY */ + [0x1c6e, 0x1c6e], /* OL CHIKI LETTER LE */ + [0x1c6f, 0x1c6f], /* OL CHIKI LETTER EP */ + [0x1c70, 0x1c70], /* OL CHIKI LETTER EDD */ + [0x1c71, 0x1c71], /* OL CHIKI LETTER EN */ + [0x1c72, 0x1c72], /* OL CHIKI LETTER ERR */ + [0x1c73, 0x1c73], /* OL CHIKI LETTER LO */ + [0x1c74, 0x1c74], /* OL CHIKI LETTER OTT */ + [0x1c75, 0x1c75], /* OL CHIKI LETTER OB */ + [0x1c76, 0x1c76], /* OL CHIKI LETTER OV */ + [0x1c77, 0x1c77], /* OL CHIKI LETTER OH */ + [0x1c78, 0x1c78], /* OL CHIKI MU TTUDDAG */ + [0x1c79, 0x1c79], /* OL CHIKI GAAHLAA TTUDDAAG */ + [0x1c7a, 0x1c7a], /* OL CHIKI MU-GAAHLAA TTUDDAAG */ + [0x1c7b, 0x1c7b], /* OL CHIKI RELAA */ + [0x1c7c, 0x1c7c], /* OL CHIKI PHAARKAA */ + [0x1c7d, 0x1c7d], /* OL CHIKI AHAD */ + [0x1c7e, 0x1c7e], /* OL CHIKI PUNCTUATION MUCAAD */ + [0x1c7f, 0x1c7f], /* OL CHIKI PUNCTUATION DOUBLE MUCAAD */ + [0x1c80, 0x1c80], + [0x1c81, 0x1c81], + [0x1c82, 0x1c82], + [0x1c83, 0x1c83], + [0x1c84, 0x1c84], + [0x1c85, 0x1c85], + [0x1c86, 0x1c86], + [0x1c87, 0x1c87], + [0x1c88, 0x1c88], + [0x1c89, 0x1c89], + [0x1c8a, 0x1c8a], + [0x1c8b, 0x1c8b], + [0x1c8c, 0x1c8c], + [0x1c8d, 0x1c8d], + [0x1c8e, 0x1c8e], + [0x1c8f, 0x1c8f], + [0x1c90, 0x1c90], + [0x1c91, 0x1c91], + [0x1c92, 0x1c92], + [0x1c93, 0x1c93], + [0x1c94, 0x1c94], + [0x1c95, 0x1c95], + [0x1c96, 0x1c96], + [0x1c97, 0x1c97], + [0x1c98, 0x1c98], + [0x1c99, 0x1c99], + [0x1c9a, 0x1c9a], + [0x1c9b, 0x1c9b], + [0x1c9c, 0x1c9c], + [0x1c9d, 0x1c9d], + [0x1c9e, 0x1c9e], + [0x1c9f, 0x1c9f], + [0x1ca0, 0x1ca0], + [0x1ca1, 0x1ca1], + [0x1ca2, 0x1ca2], + [0x1ca3, 0x1ca3], + [0x1ca4, 0x1ca4], + [0x1ca5, 0x1ca5], + [0x1ca6, 0x1ca6], + [0x1ca7, 0x1ca7], + [0x1ca8, 0x1ca8], + [0x1ca9, 0x1ca9], + [0x1caa, 0x1caa], + [0x1cab, 0x1cab], + [0x1cac, 0x1cac], + [0x1cad, 0x1cad], + [0x1cae, 0x1cae], + [0x1caf, 0x1caf], + [0x1cb0, 0x1cb0], + [0x1cb1, 0x1cb1], + [0x1cb2, 0x1cb2], + [0x1cb3, 0x1cb3], + [0x1cb4, 0x1cb4], + [0x1cb5, 0x1cb5], + [0x1cb6, 0x1cb6], + [0x1cb7, 0x1cb7], + [0x1cb8, 0x1cb8], + [0x1cb9, 0x1cb9], + [0x1cba, 0x1cba], + [0x1cbb, 0x1cbb], + [0x1cbc, 0x1cbc], + [0x1cbd, 0x1cbd], + [0x1cbe, 0x1cbe], + [0x1cbf, 0x1cbf], + [0x1cc0, 0x1cc0], /* SUNDANESE PUNCTUATION BINDU SURYA */ + [0x1cc1, 0x1cc1], /* SUNDANESE PUNCTUATION BINDU PANGLONG */ + [0x1cc2, 0x1cc2], /* SUNDANESE PUNCTUATION BINDU PURNAMA */ + [0x1cc3, 0x1cc3], /* SUNDANESE PUNCTUATION BINDU CAKRA */ + [0x1cc4, 0x1cc4], /* SUNDANESE PUNCTUATION BINDU LEU SATANGA */ + [0x1cc5, 0x1cc5], /* SUNDANESE PUNCTUATION BINDU KA SATANGA */ + [0x1cc6, 0x1cc6], /* SUNDANESE PUNCTUATION BINDU DA SATANGA */ + [0x1cc7, 0x1cc7], /* SUNDANESE PUNCTUATION BINDU BA SATANGA */ + [0x1cc8, 0x1cc8], + [0x1cc9, 0x1cc9], + [0x1cca, 0x1cca], + [0x1ccb, 0x1ccb], + [0x1ccc, 0x1ccc], + [0x1ccd, 0x1ccd], + [0x1cce, 0x1cce], + [0x1ccf, 0x1ccf], + [0x1cd0, 0x1cd0], /* VEDIC TONE KARSHANA */ + [0x1cd1, 0x1cd1], /* VEDIC TONE SHARA */ + [0x1cd2, 0x1cd2], /* VEDIC TONE PRENKHA */ + [0x1cd3, 0x1cd3], /* VEDIC SIGN NIHSHVASA */ + [0x1cd4, 0x1cd4], /* VEDIC SIGN YAJURVEDIC MIDLINE SVARITA */ + [0x1cd5, 0x1cd5], /* VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA */ + [0x1cd6, 0x1cd6], /* VEDIC TONE YAJURVEDIC INDEPENDENT SVARITA */ + [0x1cd7, 0x1cd7], /* VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA */ + [0x1cd8, 0x1cd8], /* VEDIC TONE CANDRA BELOW */ + [0x1cd9, 0x1cd9], /* VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER */ + [0x1cda, 0x1cda], /* VEDIC TONE DOUBLE SVARITA */ + [0x1cdb, 0x1cdb], /* VEDIC TONE TRIPLE SVARITA */ + [0x1cdc, 0x1cdc], /* VEDIC TONE KATHAKA ANUDATTA */ + [0x1cdd, 0x1cdd], /* VEDIC TONE DOT BELOW */ + [0x1cde, 0x1cde], /* VEDIC TONE TWO DOTS BELOW */ + [0x1cdf, 0x1cdf], /* VEDIC TONE THREE DOTS BELOW */ + [0x1ce0, 0x1ce0], /* VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA */ + [0x1ce1, 0x1ce1], /* VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA */ + [0x1ce2, 0x1ce2], /* VEDIC SIGN VISARGA SVARITA */ + [0x1ce3, 0x1ce3], /* VEDIC SIGN VISARGA UDATTA */ + [0x1ce4, 0x1ce4], /* VEDIC SIGN REVERSED VISARGA UDATTA */ + [0x1ce5, 0x1ce5], /* VEDIC SIGN VISARGA ANUDATTA */ + [0x1ce6, 0x1ce6], /* VEDIC SIGN REVERSED VISARGA ANUDATTA */ + [0x1ce7, 0x1ce7], /* VEDIC SIGN VISARGA UDATTA WITH TAIL */ + [0x1ce8, 0x1ce8], /* VEDIC SIGN VISARGA ANUDATTA WITH TAIL */ + [0x1ce9, 0x1ce9], /* VEDIC SIGN ANUSVARA ANTARGOMUKHA */ + [0x1cea, 0x1cea], /* VEDIC SIGN ANUSVARA BAHIRGOMUKHA */ + [0x1ceb, 0x1ceb], /* VEDIC SIGN ANUSVARA VAMAGOMUKHA */ + [0x1cec, 0x1cec], /* VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL */ + [0x1ced, 0x1ced], /* VEDIC SIGN TIRYAK */ + [0x1cee, 0x1cee], /* VEDIC SIGN HEXIFORM LONG ANUSVARA */ + [0x1cef, 0x1cef], /* VEDIC SIGN LONG ANUSVARA */ + [0x1cf0, 0x1cf0], /* VEDIC SIGN RTHANG LONG ANUSVARA */ + [0x1cf1, 0x1cf1], /* VEDIC SIGN ANUSVARA UBHAYATO MUKHA */ + [0x1cf2, 0x1cf2], /* VEDIC SIGN ARDHAVISARGA */ + [0x1cf3, 0x1cf3], /* VEDIC SIGN ROTATED ARDHAVISARGA */ + [0x1cf4, 0x1cf4], /* VEDIC TONE CANDRA ABOVE */ + [0x1cf5, 0x1cf5], /* VEDIC SIGN JIHVAMULIYA */ + [0x1cf6, 0x1cf6], /* VEDIC SIGN UPADHMANIYA */ + [0x1cf7, 0x1cf7], + [0x1cf8, 0x1cf8], + [0x1cf9, 0x1cf9], + [0x1cfa, 0x1cfa], + [0x1cfb, 0x1cfb], + [0x1cfc, 0x1cfc], + [0x1cfd, 0x1cfd], + [0x1cfe, 0x1cfe], + [0x1cff, 0x1cff], + [0x1d00, 0x1d00], /* LATIN LETTER SMALL CAPITAL A */ + [0x1d01, 0x1d01], /* LATIN LETTER SMALL CAPITAL AE */ + [0x1d02, 0x1d02], /* LATIN SMALL LETTER TURNED AE */ + [0x1d03, 0x1d03], /* LATIN LETTER SMALL CAPITAL BARRED B */ + [0x1d04, 0x1d04], /* LATIN LETTER SMALL CAPITAL C */ + [0x1d05, 0x1d05], /* LATIN LETTER SMALL CAPITAL D */ + [0x1d06, 0x1d06], /* LATIN LETTER SMALL CAPITAL ETH */ + [0x1d07, 0x1d07], /* LATIN LETTER SMALL CAPITAL E */ + [0x1d08, 0x1d08], /* LATIN SMALL LETTER TURNED OPEN E */ + [0x1d09, 0x1d09], /* LATIN SMALL LETTER TURNED I */ + [0x1d0a, 0x1d0a], /* LATIN LETTER SMALL CAPITAL J */ + [0x1d0b, 0x1d0b], /* LATIN LETTER SMALL CAPITAL K */ + [0x1d0c, 0x1d0c], /* LATIN LETTER SMALL CAPITAL L WITH STROKE */ + [0x1d0d, 0x1d0d], /* LATIN LETTER SMALL CAPITAL M */ + [0x1d0e, 0x1d0e], /* LATIN LETTER SMALL CAPITAL REVERSED N */ + [0x1d0f, 0x1d0f], /* LATIN LETTER SMALL CAPITAL O */ + [0x1d10, 0x1d10], /* LATIN LETTER SMALL CAPITAL OPEN O */ + [0x1d11, 0x1d11], /* LATIN SMALL LETTER SIDEWAYS O */ + [0x1d12, 0x1d12], /* LATIN SMALL LETTER SIDEWAYS OPEN O */ + [0x1d13, 0x1d13], /* LATIN SMALL LETTER SIDEWAYS O WITH STROKE */ + [0x1d14, 0x1d14], /* LATIN SMALL LETTER TURNED OE */ + [0x1d15, 0x1d15], /* LATIN LETTER SMALL CAPITAL OU */ + [0x1d16, 0x1d16], /* LATIN SMALL LETTER TOP HALF O */ + [0x1d17, 0x1d17], /* LATIN SMALL LETTER BOTTOM HALF O */ + [0x1d18, 0x1d18], /* LATIN LETTER SMALL CAPITAL P */ + [0x1d19, 0x1d19], /* LATIN LETTER SMALL CAPITAL REVERSED R */ + [0x1d1a, 0x1d1a], /* LATIN LETTER SMALL CAPITAL TURNED R */ + [0x1d1b, 0x1d1b], /* LATIN LETTER SMALL CAPITAL T */ + [0x1d1c, 0x1d1c], /* LATIN LETTER SMALL CAPITAL U */ + [0x1d1d, 0x1d1d], /* LATIN SMALL LETTER SIDEWAYS U */ + [0x1d1e, 0x1d1e], /* LATIN SMALL LETTER SIDEWAYS DIAERESIZED U */ + [0x1d1f, 0x1d1f], /* LATIN SMALL LETTER SIDEWAYS TURNED M */ + [0x1d20, 0x1d20], /* LATIN LETTER SMALL CAPITAL V */ + [0x1d21, 0x1d21], /* LATIN LETTER SMALL CAPITAL W */ + [0x1d22, 0x1d22], /* LATIN LETTER SMALL CAPITAL Z */ + [0x1d23, 0x1d23], /* LATIN LETTER SMALL CAPITAL EZH */ + [0x1d24, 0x1d24], /* LATIN LETTER VOICED LARYNGEAL SPIRANT */ + [0x1d25, 0x1d25], /* LATIN LETTER AIN */ + [0x1d26, 0x1d26], /* GREEK LETTER SMALL CAPITAL GAMMA */ + [0x1d27, 0x1d27], /* GREEK LETTER SMALL CAPITAL LAMDA */ + [0x1d28, 0x1d28], /* GREEK LETTER SMALL CAPITAL PI */ + [0x1d29, 0x1d29], /* GREEK LETTER SMALL CAPITAL RHO */ + [0x1d2a, 0x1d2a], /* GREEK LETTER SMALL CAPITAL PSI */ + [0x1d2b, 0x1d2b], /* CYRILLIC LETTER SMALL CAPITAL EL */ + [0x1d2c, 0x1d2c], /* MODIFIER LETTER CAPITAL A */ + [0x1d2d, 0x1d2d], /* MODIFIER LETTER CAPITAL AE */ + [0x1d2e, 0x1d2e], /* MODIFIER LETTER CAPITAL B */ + [0x1d2f, 0x1d2f], /* MODIFIER LETTER CAPITAL BARRED B */ + [0x1d30, 0x1d30], /* MODIFIER LETTER CAPITAL D */ + [0x1d31, 0x1d31], /* MODIFIER LETTER CAPITAL E */ + [0x1d32, 0x1d32], /* MODIFIER LETTER CAPITAL REVERSED E */ + [0x1d33, 0x1d33], /* MODIFIER LETTER CAPITAL G */ + [0x1d34, 0x1d34], /* MODIFIER LETTER CAPITAL H */ + [0x1d35, 0x1d35], /* MODIFIER LETTER CAPITAL I */ + [0x1d36, 0x1d36], /* MODIFIER LETTER CAPITAL J */ + [0x1d37, 0x1d37], /* MODIFIER LETTER CAPITAL K */ + [0x1d38, 0x1d38], /* MODIFIER LETTER CAPITAL L */ + [0x1d39, 0x1d39], /* MODIFIER LETTER CAPITAL M */ + [0x1d3a, 0x1d3a], /* MODIFIER LETTER CAPITAL N */ + [0x1d3b, 0x1d3b], /* MODIFIER LETTER CAPITAL REVERSED N */ + [0x1d3c, 0x1d3c], /* MODIFIER LETTER CAPITAL O */ + [0x1d3d, 0x1d3d], /* MODIFIER LETTER CAPITAL OU */ + [0x1d3e, 0x1d3e], /* MODIFIER LETTER CAPITAL P */ + [0x1d3f, 0x1d3f], /* MODIFIER LETTER CAPITAL R */ + [0x1d40, 0x1d40], /* MODIFIER LETTER CAPITAL T */ + [0x1d41, 0x1d41], /* MODIFIER LETTER CAPITAL U */ + [0x1d42, 0x1d42], /* MODIFIER LETTER CAPITAL W */ + [0x1d43, 0x1d43], /* MODIFIER LETTER SMALL A */ + [0x1d44, 0x1d44], /* MODIFIER LETTER SMALL TURNED A */ + [0x1d45, 0x1d45], /* MODIFIER LETTER SMALL ALPHA */ + [0x1d46, 0x1d46], /* MODIFIER LETTER SMALL TURNED AE */ + [0x1d47, 0x1d47], /* MODIFIER LETTER SMALL B */ + [0x1d48, 0x1d48], /* MODIFIER LETTER SMALL D */ + [0x1d49, 0x1d49], /* MODIFIER LETTER SMALL E */ + [0x1d4a, 0x1d4a], /* MODIFIER LETTER SMALL SCHWA */ + [0x1d4b, 0x1d4b], /* MODIFIER LETTER SMALL OPEN E */ + [0x1d4c, 0x1d4c], /* MODIFIER LETTER SMALL TURNED OPEN E */ + [0x1d4d, 0x1d4d], /* MODIFIER LETTER SMALL G */ + [0x1d4e, 0x1d4e], /* MODIFIER LETTER SMALL TURNED I */ + [0x1d4f, 0x1d4f], /* MODIFIER LETTER SMALL K */ + [0x1d50, 0x1d50], /* MODIFIER LETTER SMALL M */ + [0x1d51, 0x1d51], /* MODIFIER LETTER SMALL ENG */ + [0x1d52, 0x1d52], /* MODIFIER LETTER SMALL O */ + [0x1d53, 0x1d53], /* MODIFIER LETTER SMALL OPEN O */ + [0x1d54, 0x1d54], /* MODIFIER LETTER SMALL TOP HALF O */ + [0x1d55, 0x1d55], /* MODIFIER LETTER SMALL BOTTOM HALF O */ + [0x1d56, 0x1d56], /* MODIFIER LETTER SMALL P */ + [0x1d57, 0x1d57], /* MODIFIER LETTER SMALL T */ + [0x1d58, 0x1d58], /* MODIFIER LETTER SMALL U */ + [0x1d59, 0x1d59], /* MODIFIER LETTER SMALL SIDEWAYS U */ + [0x1d5a, 0x1d5a], /* MODIFIER LETTER SMALL TURNED M */ + [0x1d5b, 0x1d5b], /* MODIFIER LETTER SMALL V */ + [0x1d5c, 0x1d5c], /* MODIFIER LETTER SMALL AIN */ + [0x1d5d, 0x1d5d], /* MODIFIER LETTER SMALL BETA */ + [0x1d5e, 0x1d5e], /* MODIFIER LETTER SMALL GREEK GAMMA */ + [0x1d5f, 0x1d5f], /* MODIFIER LETTER SMALL DELTA */ + [0x1d60, 0x1d60], /* MODIFIER LETTER SMALL GREEK PHI */ + [0x1d61, 0x1d61], /* MODIFIER LETTER SMALL CHI */ + [0x1d62, 0x1d62], /* LATIN SUBSCRIPT SMALL LETTER I */ + [0x1d63, 0x1d63], /* LATIN SUBSCRIPT SMALL LETTER R */ + [0x1d64, 0x1d64], /* LATIN SUBSCRIPT SMALL LETTER U */ + [0x1d65, 0x1d65], /* LATIN SUBSCRIPT SMALL LETTER V */ + [0x1d66, 0x1d66], /* GREEK SUBSCRIPT SMALL LETTER BETA */ + [0x1d67, 0x1d67], /* GREEK SUBSCRIPT SMALL LETTER GAMMA */ + [0x1d68, 0x1d68], /* GREEK SUBSCRIPT SMALL LETTER RHO */ + [0x1d69, 0x1d69], /* GREEK SUBSCRIPT SMALL LETTER PHI */ + [0x1d6a, 0x1d6a], /* GREEK SUBSCRIPT SMALL LETTER CHI */ + [0x1d6b, 0x1d6b], /* LATIN SMALL LETTER UE */ + [0x1d6c, 0x1d6c], /* LATIN SMALL LETTER B WITH MIDDLE TILDE */ + [0x1d6d, 0x1d6d], /* LATIN SMALL LETTER D WITH MIDDLE TILDE */ + [0x1d6e, 0x1d6e], /* LATIN SMALL LETTER F WITH MIDDLE TILDE */ + [0x1d6f, 0x1d6f], /* LATIN SMALL LETTER M WITH MIDDLE TILDE */ + [0x1d70, 0x1d70], /* LATIN SMALL LETTER N WITH MIDDLE TILDE */ + [0x1d71, 0x1d71], /* LATIN SMALL LETTER P WITH MIDDLE TILDE */ + [0x1d72, 0x1d72], /* LATIN SMALL LETTER R WITH MIDDLE TILDE */ + [0x1d73, 0x1d73], /* LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE */ + [0x1d74, 0x1d74], /* LATIN SMALL LETTER S WITH MIDDLE TILDE */ + [0x1d75, 0x1d75], /* LATIN SMALL LETTER T WITH MIDDLE TILDE */ + [0x1d76, 0x1d76], /* LATIN SMALL LETTER Z WITH MIDDLE TILDE */ + [0x1d77, 0x1d77], /* LATIN SMALL LETTER TURNED G */ + [0x1d78, 0x1d78], /* MODIFIER LETTER CYRILLIC EN */ + [0xa77d, 0x1d79], /* LATIN SMALL LETTER INSULAR G */ + [0x1d7a, 0x1d7a], /* LATIN SMALL LETTER TH WITH STRIKETHROUGH */ + [0x1d7b, 0x1d7b], /* LATIN SMALL CAPITAL LETTER I WITH STROKE */ + [0x1d7c, 0x1d7c], /* LATIN SMALL LETTER IOTA WITH STROKE */ + [0x2c63, 0x1d7d], /* LATIN SMALL LETTER P WITH STROKE */ + [0x1d7e, 0x1d7e], /* LATIN SMALL CAPITAL LETTER U WITH STROKE */ + [0x1d7f, 0x1d7f], /* LATIN SMALL LETTER UPSILON WITH STROKE */ + [0x1d80, 0x1d80], /* LATIN SMALL LETTER B WITH PALATAL HOOK */ + [0x1d81, 0x1d81], /* LATIN SMALL LETTER D WITH PALATAL HOOK */ + [0x1d82, 0x1d82], /* LATIN SMALL LETTER F WITH PALATAL HOOK */ + [0x1d83, 0x1d83], /* LATIN SMALL LETTER G WITH PALATAL HOOK */ + [0x1d84, 0x1d84], /* LATIN SMALL LETTER K WITH PALATAL HOOK */ + [0x1d85, 0x1d85], /* LATIN SMALL LETTER L WITH PALATAL HOOK */ + [0x1d86, 0x1d86], /* LATIN SMALL LETTER M WITH PALATAL HOOK */ + [0x1d87, 0x1d87], /* LATIN SMALL LETTER N WITH PALATAL HOOK */ + [0x1d88, 0x1d88], /* LATIN SMALL LETTER P WITH PALATAL HOOK */ + [0x1d89, 0x1d89], /* LATIN SMALL LETTER R WITH PALATAL HOOK */ + [0x1d8a, 0x1d8a], /* LATIN SMALL LETTER S WITH PALATAL HOOK */ + [0x1d8b, 0x1d8b], /* LATIN SMALL LETTER ESH WITH PALATAL HOOK */ + [0x1d8c, 0x1d8c], /* LATIN SMALL LETTER V WITH PALATAL HOOK */ + [0x1d8d, 0x1d8d], /* LATIN SMALL LETTER X WITH PALATAL HOOK */ + [0x1d8e, 0x1d8e], /* LATIN SMALL LETTER Z WITH PALATAL HOOK */ + [0x1d8f, 0x1d8f], /* LATIN SMALL LETTER A WITH RETROFLEX HOOK */ + [0x1d90, 0x1d90], /* LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK */ + [0x1d91, 0x1d91], /* LATIN SMALL LETTER D WITH HOOK AND TAIL */ + [0x1d92, 0x1d92], /* LATIN SMALL LETTER E WITH RETROFLEX HOOK */ + [0x1d93, 0x1d93], /* LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK */ + [0x1d94, 0x1d94], /* LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK */ + [0x1d95, 0x1d95], /* LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK */ + [0x1d96, 0x1d96], /* LATIN SMALL LETTER I WITH RETROFLEX HOOK */ + [0x1d97, 0x1d97], /* LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK */ + [0x1d98, 0x1d98], /* LATIN SMALL LETTER ESH WITH RETROFLEX HOOK */ + [0x1d99, 0x1d99], /* LATIN SMALL LETTER U WITH RETROFLEX HOOK */ + [0x1d9a, 0x1d9a], /* LATIN SMALL LETTER EZH WITH RETROFLEX HOOK */ + [0x1d9b, 0x1d9b], /* MODIFIER LETTER SMALL TURNED ALPHA */ + [0x1d9c, 0x1d9c], /* MODIFIER LETTER SMALL C */ + [0x1d9d, 0x1d9d], /* MODIFIER LETTER SMALL C WITH CURL */ + [0x1d9e, 0x1d9e], /* MODIFIER LETTER SMALL ETH */ + [0x1d9f, 0x1d9f], /* MODIFIER LETTER SMALL REVERSED OPEN E */ + [0x1da0, 0x1da0], /* MODIFIER LETTER SMALL F */ + [0x1da1, 0x1da1], /* MODIFIER LETTER SMALL DOTLESS J WITH STROKE */ + [0x1da2, 0x1da2], /* MODIFIER LETTER SMALL SCRIPT G */ + [0x1da3, 0x1da3], /* MODIFIER LETTER SMALL TURNED H */ + [0x1da4, 0x1da4], /* MODIFIER LETTER SMALL I WITH STROKE */ + [0x1da5, 0x1da5], /* MODIFIER LETTER SMALL IOTA */ + [0x1da6, 0x1da6], /* MODIFIER LETTER SMALL CAPITAL I */ + [0x1da7, 0x1da7], /* MODIFIER LETTER SMALL CAPITAL I WITH STROKE */ + [0x1da8, 0x1da8], /* MODIFIER LETTER SMALL J WITH CROSSED-TAIL */ + [0x1da9, 0x1da9], /* MODIFIER LETTER SMALL L WITH RETROFLEX HOOK */ + [0x1daa, 0x1daa], /* MODIFIER LETTER SMALL L WITH PALATAL HOOK */ + [0x1dab, 0x1dab], /* MODIFIER LETTER SMALL CAPITAL L */ + [0x1dac, 0x1dac], /* MODIFIER LETTER SMALL M WITH HOOK */ + [0x1dad, 0x1dad], /* MODIFIER LETTER SMALL TURNED M WITH LONG LEG */ + [0x1dae, 0x1dae], /* MODIFIER LETTER SMALL N WITH LEFT HOOK */ + [0x1daf, 0x1daf], /* MODIFIER LETTER SMALL N WITH RETROFLEX HOOK */ + [0x1db0, 0x1db0], /* MODIFIER LETTER SMALL CAPITAL N */ + [0x1db1, 0x1db1], /* MODIFIER LETTER SMALL BARRED O */ + [0x1db2, 0x1db2], /* MODIFIER LETTER SMALL PHI */ + [0x1db3, 0x1db3], /* MODIFIER LETTER SMALL S WITH HOOK */ + [0x1db4, 0x1db4], /* MODIFIER LETTER SMALL ESH */ + [0x1db5, 0x1db5], /* MODIFIER LETTER SMALL T WITH PALATAL HOOK */ + [0x1db6, 0x1db6], /* MODIFIER LETTER SMALL U BAR */ + [0x1db7, 0x1db7], /* MODIFIER LETTER SMALL UPSILON */ + [0x1db8, 0x1db8], /* MODIFIER LETTER SMALL CAPITAL U */ + [0x1db9, 0x1db9], /* MODIFIER LETTER SMALL V WITH HOOK */ + [0x1dba, 0x1dba], /* MODIFIER LETTER SMALL TURNED V */ + [0x1dbb, 0x1dbb], /* MODIFIER LETTER SMALL Z */ + [0x1dbc, 0x1dbc], /* MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK */ + [0x1dbd, 0x1dbd], /* MODIFIER LETTER SMALL Z WITH CURL */ + [0x1dbe, 0x1dbe], /* MODIFIER LETTER SMALL EZH */ + [0x1dbf, 0x1dbf], /* MODIFIER LETTER SMALL THETA */ + [0x1dc0, 0x1dc0], /* COMBINING DOTTED GRAVE ACCENT */ + [0x1dc1, 0x1dc1], /* COMBINING DOTTED ACUTE ACCENT */ + [0x1dc2, 0x1dc2], /* COMBINING SNAKE BELOW */ + [0x1dc3, 0x1dc3], /* COMBINING SUSPENSION MARK */ + [0x1dc4, 0x1dc4], /* COMBINING MACRON-ACUTE */ + [0x1dc5, 0x1dc5], /* COMBINING GRAVE-MACRON */ + [0x1dc6, 0x1dc6], /* COMBINING MACRON-GRAVE */ + [0x1dc7, 0x1dc7], /* COMBINING ACUTE-MACRON */ + [0x1dc8, 0x1dc8], /* COMBINING GRAVE-ACUTE-GRAVE */ + [0x1dc9, 0x1dc9], /* COMBINING ACUTE-GRAVE-ACUTE */ + [0x1dca, 0x1dca], /* COMBINING LATIN SMALL LETTER R BELOW */ + [0x1dcb, 0x1dcb], /* COMBINING BREVE-MACRON */ + [0x1dcc, 0x1dcc], /* COMBINING MACRON-BREVE */ + [0x1dcd, 0x1dcd], /* COMBINING DOUBLE CIRCUMFLEX ABOVE */ + [0x1dce, 0x1dce], /* COMBINING OGONEK ABOVE */ + [0x1dcf, 0x1dcf], /* COMBINING ZIGZAG BELOW */ + [0x1dd0, 0x1dd0], /* COMBINING IS BELOW */ + [0x1dd1, 0x1dd1], /* COMBINING UR ABOVE */ + [0x1dd2, 0x1dd2], /* COMBINING US ABOVE */ + [0x1dd3, 0x1dd3], /* COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE */ + [0x1dd4, 0x1dd4], /* COMBINING LATIN SMALL LETTER AE */ + [0x1dd5, 0x1dd5], /* COMBINING LATIN SMALL LETTER AO */ + [0x1dd6, 0x1dd6], /* COMBINING LATIN SMALL LETTER AV */ + [0x1dd7, 0x1dd7], /* COMBINING LATIN SMALL LETTER C CEDILLA */ + [0x1dd8, 0x1dd8], /* COMBINING LATIN SMALL LETTER INSULAR D */ + [0x1dd9, 0x1dd9], /* COMBINING LATIN SMALL LETTER ETH */ + [0x1dda, 0x1dda], /* COMBINING LATIN SMALL LETTER G */ + [0x1ddb, 0x1ddb], /* COMBINING LATIN LETTER SMALL CAPITAL G */ + [0x1ddc, 0x1ddc], /* COMBINING LATIN SMALL LETTER K */ + [0x1ddd, 0x1ddd], /* COMBINING LATIN SMALL LETTER L */ + [0x1dde, 0x1dde], /* COMBINING LATIN LETTER SMALL CAPITAL L */ + [0x1ddf, 0x1ddf], /* COMBINING LATIN LETTER SMALL CAPITAL M */ + [0x1de0, 0x1de0], /* COMBINING LATIN SMALL LETTER N */ + [0x1de1, 0x1de1], /* COMBINING LATIN LETTER SMALL CAPITAL N */ + [0x1de2, 0x1de2], /* COMBINING LATIN LETTER SMALL CAPITAL R */ + [0x1de3, 0x1de3], /* COMBINING LATIN SMALL LETTER R ROTUNDA */ + [0x1de4, 0x1de4], /* COMBINING LATIN SMALL LETTER S */ + [0x1de5, 0x1de5], /* COMBINING LATIN SMALL LETTER LONG S */ + [0x1de6, 0x1de6], /* COMBINING LATIN SMALL LETTER Z */ + [0x1de7, 0x1de7], + [0x1de8, 0x1de8], + [0x1de9, 0x1de9], + [0x1dea, 0x1dea], + [0x1deb, 0x1deb], + [0x1dec, 0x1dec], + [0x1ded, 0x1ded], + [0x1dee, 0x1dee], + [0x1def, 0x1def], + [0x1df0, 0x1df0], + [0x1df1, 0x1df1], + [0x1df2, 0x1df2], + [0x1df3, 0x1df3], + [0x1df4, 0x1df4], + [0x1df5, 0x1df5], + [0x1df6, 0x1df6], + [0x1df7, 0x1df7], + [0x1df8, 0x1df8], + [0x1df9, 0x1df9], + [0x1dfa, 0x1dfa], + [0x1dfb, 0x1dfb], + [0x1dfc, 0x1dfc], /* COMBINING DOUBLE INVERTED BREVE BELOW */ + [0x1dfd, 0x1dfd], /* COMBINING ALMOST EQUAL TO BELOW */ + [0x1dfe, 0x1dfe], /* COMBINING LEFT ARROWHEAD ABOVE */ + [0x1dff, 0x1dff], /* COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW */ + [0x1e00, 0x1e01], /* LATIN CAPITAL LETTER A WITH RING BELOW */ + [0x1e00, 0x1e01], /* LATIN SMALL LETTER A WITH RING BELOW */ + [0x1e02, 0x1e03], /* LATIN CAPITAL LETTER B WITH DOT ABOVE */ + [0x1e02, 0x1e03], /* LATIN SMALL LETTER B WITH DOT ABOVE */ + [0x1e04, 0x1e05], /* LATIN CAPITAL LETTER B WITH DOT BELOW */ + [0x1e04, 0x1e05], /* LATIN SMALL LETTER B WITH DOT BELOW */ + [0x1e06, 0x1e07], /* LATIN CAPITAL LETTER B WITH LINE BELOW */ + [0x1e06, 0x1e07], /* LATIN SMALL LETTER B WITH LINE BELOW */ + [0x1e08, 0x1e09], /* LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE */ + [0x1e08, 0x1e09], /* LATIN SMALL LETTER C WITH CEDILLA AND ACUTE */ + [0x1e0a, 0x1e0b], /* LATIN CAPITAL LETTER D WITH DOT ABOVE */ + [0x1e0a, 0x1e0b], /* LATIN SMALL LETTER D WITH DOT ABOVE */ + [0x1e0c, 0x1e0d], /* LATIN CAPITAL LETTER D WITH DOT BELOW */ + [0x1e0c, 0x1e0d], /* LATIN SMALL LETTER D WITH DOT BELOW */ + [0x1e0e, 0x1e0f], /* LATIN CAPITAL LETTER D WITH LINE BELOW */ + [0x1e0e, 0x1e0f], /* LATIN SMALL LETTER D WITH LINE BELOW */ + [0x1e10, 0x1e11], /* LATIN CAPITAL LETTER D WITH CEDILLA */ + [0x1e10, 0x1e11], /* LATIN SMALL LETTER D WITH CEDILLA */ + [0x1e12, 0x1e13], /* LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW */ + [0x1e12, 0x1e13], /* LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW */ + [0x1e14, 0x1e15], /* LATIN CAPITAL LETTER E WITH MACRON AND GRAVE */ + [0x1e14, 0x1e15], /* LATIN SMALL LETTER E WITH MACRON AND GRAVE */ + [0x1e16, 0x1e17], /* LATIN CAPITAL LETTER E WITH MACRON AND ACUTE */ + [0x1e16, 0x1e17], /* LATIN SMALL LETTER E WITH MACRON AND ACUTE */ + [0x1e18, 0x1e19], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW */ + [0x1e18, 0x1e19], /* LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW */ + [0x1e1a, 0x1e1b], /* LATIN CAPITAL LETTER E WITH TILDE BELOW */ + [0x1e1a, 0x1e1b], /* LATIN SMALL LETTER E WITH TILDE BELOW */ + [0x1e1c, 0x1e1d], /* LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE */ + [0x1e1c, 0x1e1d], /* LATIN SMALL LETTER E WITH CEDILLA AND BREVE */ + [0x1e1e, 0x1e1f], /* LATIN CAPITAL LETTER F WITH DOT ABOVE */ + [0x1e1e, 0x1e1f], /* LATIN SMALL LETTER F WITH DOT ABOVE */ + [0x1e20, 0x1e21], /* LATIN CAPITAL LETTER G WITH MACRON */ + [0x1e20, 0x1e21], /* LATIN SMALL LETTER G WITH MACRON */ + [0x1e22, 0x1e23], /* LATIN CAPITAL LETTER H WITH DOT ABOVE */ + [0x1e22, 0x1e23], /* LATIN SMALL LETTER H WITH DOT ABOVE */ + [0x1e24, 0x1e25], /* LATIN CAPITAL LETTER H WITH DOT BELOW */ + [0x1e24, 0x1e25], /* LATIN SMALL LETTER H WITH DOT BELOW */ + [0x1e26, 0x1e27], /* LATIN CAPITAL LETTER H WITH DIAERESIS */ + [0x1e26, 0x1e27], /* LATIN SMALL LETTER H WITH DIAERESIS */ + [0x1e28, 0x1e29], /* LATIN CAPITAL LETTER H WITH CEDILLA */ + [0x1e28, 0x1e29], /* LATIN SMALL LETTER H WITH CEDILLA */ + [0x1e2a, 0x1e2b], /* LATIN CAPITAL LETTER H WITH BREVE BELOW */ + [0x1e2a, 0x1e2b], /* LATIN SMALL LETTER H WITH BREVE BELOW */ + [0x1e2c, 0x1e2d], /* LATIN CAPITAL LETTER I WITH TILDE BELOW */ + [0x1e2c, 0x1e2d], /* LATIN SMALL LETTER I WITH TILDE BELOW */ + [0x1e2e, 0x1e2f], /* LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE */ + [0x1e2e, 0x1e2f], /* LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE */ + [0x1e30, 0x1e31], /* LATIN CAPITAL LETTER K WITH ACUTE */ + [0x1e30, 0x1e31], /* LATIN SMALL LETTER K WITH ACUTE */ + [0x1e32, 0x1e33], /* LATIN CAPITAL LETTER K WITH DOT BELOW */ + [0x1e32, 0x1e33], /* LATIN SMALL LETTER K WITH DOT BELOW */ + [0x1e34, 0x1e35], /* LATIN CAPITAL LETTER K WITH LINE BELOW */ + [0x1e34, 0x1e35], /* LATIN SMALL LETTER K WITH LINE BELOW */ + [0x1e36, 0x1e37], /* LATIN CAPITAL LETTER L WITH DOT BELOW */ + [0x1e36, 0x1e37], /* LATIN SMALL LETTER L WITH DOT BELOW */ + [0x1e38, 0x1e39], /* LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON */ + [0x1e38, 0x1e39], /* LATIN SMALL LETTER L WITH DOT BELOW AND MACRON */ + [0x1e3a, 0x1e3b], /* LATIN CAPITAL LETTER L WITH LINE BELOW */ + [0x1e3a, 0x1e3b], /* LATIN SMALL LETTER L WITH LINE BELOW */ + [0x1e3c, 0x1e3d], /* LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW */ + [0x1e3c, 0x1e3d], /* LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW */ + [0x1e3e, 0x1e3f], /* LATIN CAPITAL LETTER M WITH ACUTE */ + [0x1e3e, 0x1e3f], /* LATIN SMALL LETTER M WITH ACUTE */ + [0x1e40, 0x1e41], /* LATIN CAPITAL LETTER M WITH DOT ABOVE */ + [0x1e40, 0x1e41], /* LATIN SMALL LETTER M WITH DOT ABOVE */ + [0x1e42, 0x1e43], /* LATIN CAPITAL LETTER M WITH DOT BELOW */ + [0x1e42, 0x1e43], /* LATIN SMALL LETTER M WITH DOT BELOW */ + [0x1e44, 0x1e45], /* LATIN CAPITAL LETTER N WITH DOT ABOVE */ + [0x1e44, 0x1e45], /* LATIN SMALL LETTER N WITH DOT ABOVE */ + [0x1e46, 0x1e47], /* LATIN CAPITAL LETTER N WITH DOT BELOW */ + [0x1e46, 0x1e47], /* LATIN SMALL LETTER N WITH DOT BELOW */ + [0x1e48, 0x1e49], /* LATIN CAPITAL LETTER N WITH LINE BELOW */ + [0x1e48, 0x1e49], /* LATIN SMALL LETTER N WITH LINE BELOW */ + [0x1e4a, 0x1e4b], /* LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW */ + [0x1e4a, 0x1e4b], /* LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW */ + [0x1e4c, 0x1e4d], /* LATIN CAPITAL LETTER O WITH TILDE AND ACUTE */ + [0x1e4c, 0x1e4d], /* LATIN SMALL LETTER O WITH TILDE AND ACUTE */ + [0x1e4e, 0x1e4f], /* LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS */ + [0x1e4e, 0x1e4f], /* LATIN SMALL LETTER O WITH TILDE AND DIAERESIS */ + [0x1e50, 0x1e51], /* LATIN CAPITAL LETTER O WITH MACRON AND GRAVE */ + [0x1e50, 0x1e51], /* LATIN SMALL LETTER O WITH MACRON AND GRAVE */ + [0x1e52, 0x1e53], /* LATIN CAPITAL LETTER O WITH MACRON AND ACUTE */ + [0x1e52, 0x1e53], /* LATIN SMALL LETTER O WITH MACRON AND ACUTE */ + [0x1e54, 0x1e55], /* LATIN CAPITAL LETTER P WITH ACUTE */ + [0x1e54, 0x1e55], /* LATIN SMALL LETTER P WITH ACUTE */ + [0x1e56, 0x1e57], /* LATIN CAPITAL LETTER P WITH DOT ABOVE */ + [0x1e56, 0x1e57], /* LATIN SMALL LETTER P WITH DOT ABOVE */ + [0x1e58, 0x1e59], /* LATIN CAPITAL LETTER R WITH DOT ABOVE */ + [0x1e58, 0x1e59], /* LATIN SMALL LETTER R WITH DOT ABOVE */ + [0x1e5a, 0x1e5b], /* LATIN CAPITAL LETTER R WITH DOT BELOW */ + [0x1e5a, 0x1e5b], /* LATIN SMALL LETTER R WITH DOT BELOW */ + [0x1e5c, 0x1e5d], /* LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON */ + [0x1e5c, 0x1e5d], /* LATIN SMALL LETTER R WITH DOT BELOW AND MACRON */ + [0x1e5e, 0x1e5f], /* LATIN CAPITAL LETTER R WITH LINE BELOW */ + [0x1e5e, 0x1e5f], /* LATIN SMALL LETTER R WITH LINE BELOW */ + [0x1e60, 0x1e61], /* LATIN CAPITAL LETTER S WITH DOT ABOVE */ + [0x1e60, 0x1e61], /* LATIN SMALL LETTER S WITH DOT ABOVE */ + [0x1e62, 0x1e63], /* LATIN CAPITAL LETTER S WITH DOT BELOW */ + [0x1e62, 0x1e63], /* LATIN SMALL LETTER S WITH DOT BELOW */ + [0x1e64, 0x1e65], /* LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE */ + [0x1e64, 0x1e65], /* LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE */ + [0x1e66, 0x1e67], /* LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE */ + [0x1e66, 0x1e67], /* LATIN SMALL LETTER S WITH CARON AND DOT ABOVE */ + [0x1e68, 0x1e69], /* LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE */ + [0x1e68, 0x1e69], /* LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE */ + [0x1e6a, 0x1e6b], /* LATIN CAPITAL LETTER T WITH DOT ABOVE */ + [0x1e6a, 0x1e6b], /* LATIN SMALL LETTER T WITH DOT ABOVE */ + [0x1e6c, 0x1e6d], /* LATIN CAPITAL LETTER T WITH DOT BELOW */ + [0x1e6c, 0x1e6d], /* LATIN SMALL LETTER T WITH DOT BELOW */ + [0x1e6e, 0x1e6f], /* LATIN CAPITAL LETTER T WITH LINE BELOW */ + [0x1e6e, 0x1e6f], /* LATIN SMALL LETTER T WITH LINE BELOW */ + [0x1e70, 0x1e71], /* LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW */ + [0x1e70, 0x1e71], /* LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW */ + [0x1e72, 0x1e73], /* LATIN CAPITAL LETTER U WITH DIAERESIS BELOW */ + [0x1e72, 0x1e73], /* LATIN SMALL LETTER U WITH DIAERESIS BELOW */ + [0x1e74, 0x1e75], /* LATIN CAPITAL LETTER U WITH TILDE BELOW */ + [0x1e74, 0x1e75], /* LATIN SMALL LETTER U WITH TILDE BELOW */ + [0x1e76, 0x1e77], /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW */ + [0x1e76, 0x1e77], /* LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW */ + [0x1e78, 0x1e79], /* LATIN CAPITAL LETTER U WITH TILDE AND ACUTE */ + [0x1e78, 0x1e79], /* LATIN SMALL LETTER U WITH TILDE AND ACUTE */ + [0x1e7a, 0x1e7b], /* LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS */ + [0x1e7a, 0x1e7b], /* LATIN SMALL LETTER U WITH MACRON AND DIAERESIS */ + [0x1e7c, 0x1e7d], /* LATIN CAPITAL LETTER V WITH TILDE */ + [0x1e7c, 0x1e7d], /* LATIN SMALL LETTER V WITH TILDE */ + [0x1e7e, 0x1e7f], /* LATIN CAPITAL LETTER V WITH DOT BELOW */ + [0x1e7e, 0x1e7f], /* LATIN SMALL LETTER V WITH DOT BELOW */ + [0x1e80, 0x1e81], /* LATIN CAPITAL LETTER W WITH GRAVE */ + [0x1e80, 0x1e81], /* LATIN SMALL LETTER W WITH GRAVE */ + [0x1e82, 0x1e83], /* LATIN CAPITAL LETTER W WITH ACUTE */ + [0x1e82, 0x1e83], /* LATIN SMALL LETTER W WITH ACUTE */ + [0x1e84, 0x1e85], /* LATIN CAPITAL LETTER W WITH DIAERESIS */ + [0x1e84, 0x1e85], /* LATIN SMALL LETTER W WITH DIAERESIS */ + [0x1e86, 0x1e87], /* LATIN CAPITAL LETTER W WITH DOT ABOVE */ + [0x1e86, 0x1e87], /* LATIN SMALL LETTER W WITH DOT ABOVE */ + [0x1e88, 0x1e89], /* LATIN CAPITAL LETTER W WITH DOT BELOW */ + [0x1e88, 0x1e89], /* LATIN SMALL LETTER W WITH DOT BELOW */ + [0x1e8a, 0x1e8b], /* LATIN CAPITAL LETTER X WITH DOT ABOVE */ + [0x1e8a, 0x1e8b], /* LATIN SMALL LETTER X WITH DOT ABOVE */ + [0x1e8c, 0x1e8d], /* LATIN CAPITAL LETTER X WITH DIAERESIS */ + [0x1e8c, 0x1e8d], /* LATIN SMALL LETTER X WITH DIAERESIS */ + [0x1e8e, 0x1e8f], /* LATIN CAPITAL LETTER Y WITH DOT ABOVE */ + [0x1e8e, 0x1e8f], /* LATIN SMALL LETTER Y WITH DOT ABOVE */ + [0x1e90, 0x1e91], /* LATIN CAPITAL LETTER Z WITH CIRCUMFLEX */ + [0x1e90, 0x1e91], /* LATIN SMALL LETTER Z WITH CIRCUMFLEX */ + [0x1e92, 0x1e93], /* LATIN CAPITAL LETTER Z WITH DOT BELOW */ + [0x1e92, 0x1e93], /* LATIN SMALL LETTER Z WITH DOT BELOW */ + [0x1e94, 0x1e95], /* LATIN CAPITAL LETTER Z WITH LINE BELOW */ + [0x1e94, 0x1e95], /* LATIN SMALL LETTER Z WITH LINE BELOW */ + [0x1e96, 0x1e96], /* LATIN SMALL LETTER H WITH LINE BELOW */ + [0x1e97, 0x1e97], /* LATIN SMALL LETTER T WITH DIAERESIS */ + [0x1e98, 0x1e98], /* LATIN SMALL LETTER W WITH RING ABOVE */ + [0x1e99, 0x1e99], /* LATIN SMALL LETTER Y WITH RING ABOVE */ + [0x1e9a, 0x1e9a], /* LATIN SMALL LETTER A WITH RIGHT HALF RING */ + [0x1e60, 0x1e9b], /* LATIN SMALL LETTER LONG S WITH DOT ABOVE */ + [0x1e9c, 0x1e9c], /* LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE */ + [0x1e9d, 0x1e9d], /* LATIN SMALL LETTER LONG S WITH HIGH STROKE */ + [0x1e9e, 0xdf], /* LATIN CAPITAL LETTER SHARP S */ + [0x1e9f, 0x1e9f], /* LATIN SMALL LETTER DELTA */ + [0x1ea0, 0x1ea1], /* LATIN CAPITAL LETTER A WITH DOT BELOW */ + [0x1ea0, 0x1ea1], /* LATIN SMALL LETTER A WITH DOT BELOW */ + [0x1ea2, 0x1ea3], /* LATIN CAPITAL LETTER A WITH HOOK ABOVE */ + [0x1ea2, 0x1ea3], /* LATIN SMALL LETTER A WITH HOOK ABOVE */ + [0x1ea4, 0x1ea5], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */ + [0x1ea4, 0x1ea5], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */ + [0x1ea6, 0x1ea7], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */ + [0x1ea6, 0x1ea7], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */ + [0x1ea8, 0x1ea9], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ + [0x1ea8, 0x1ea9], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */ + [0x1eaa, 0x1eab], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */ + [0x1eaa, 0x1eab], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */ + [0x1eac, 0x1ead], /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ + [0x1eac, 0x1ead], /* LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */ + [0x1eae, 0x1eaf], /* LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */ + [0x1eae, 0x1eaf], /* LATIN SMALL LETTER A WITH BREVE AND ACUTE */ + [0x1eb0, 0x1eb1], /* LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */ + [0x1eb0, 0x1eb1], /* LATIN SMALL LETTER A WITH BREVE AND GRAVE */ + [0x1eb2, 0x1eb3], /* LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */ + [0x1eb2, 0x1eb3], /* LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */ + [0x1eb4, 0x1eb5], /* LATIN CAPITAL LETTER A WITH BREVE AND TILDE */ + [0x1eb4, 0x1eb5], /* LATIN SMALL LETTER A WITH BREVE AND TILDE */ + [0x1eb6, 0x1eb7], /* LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW */ + [0x1eb6, 0x1eb7], /* LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */ + [0x1eb8, 0x1eb9], /* LATIN CAPITAL LETTER E WITH DOT BELOW */ + [0x1eb8, 0x1eb9], /* LATIN SMALL LETTER E WITH DOT BELOW */ + [0x1eba, 0x1ebb], /* LATIN CAPITAL LETTER E WITH HOOK ABOVE */ + [0x1eba, 0x1ebb], /* LATIN SMALL LETTER E WITH HOOK ABOVE */ + [0x1ebc, 0x1ebd], /* LATIN CAPITAL LETTER E WITH TILDE */ + [0x1ebc, 0x1ebd], /* LATIN SMALL LETTER E WITH TILDE */ + [0x1ebe, 0x1ebf], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */ + [0x1ebe, 0x1ebf], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */ + [0x1ec0, 0x1ec1], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */ + [0x1ec0, 0x1ec1], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */ + [0x1ec2, 0x1ec3], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ + [0x1ec2, 0x1ec3], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */ + [0x1ec4, 0x1ec5], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */ + [0x1ec4, 0x1ec5], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */ + [0x1ec6, 0x1ec7], /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ + [0x1ec6, 0x1ec7], /* LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */ + [0x1ec8, 0x1ec9], /* LATIN CAPITAL LETTER I WITH HOOK ABOVE */ + [0x1ec8, 0x1ec9], /* LATIN SMALL LETTER I WITH HOOK ABOVE */ + [0x1eca, 0x1ecb], /* LATIN CAPITAL LETTER I WITH DOT BELOW */ + [0x1eca, 0x1ecb], /* LATIN SMALL LETTER I WITH DOT BELOW */ + [0x1ecc, 0x1ecd], /* LATIN CAPITAL LETTER O WITH DOT BELOW */ + [0x1ecc, 0x1ecd], /* LATIN SMALL LETTER O WITH DOT BELOW */ + [0x1ece, 0x1ecf], /* LATIN CAPITAL LETTER O WITH HOOK ABOVE */ + [0x1ece, 0x1ecf], /* LATIN SMALL LETTER O WITH HOOK ABOVE */ + [0x1ed0, 0x1ed1], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */ + [0x1ed0, 0x1ed1], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */ + [0x1ed2, 0x1ed3], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */ + [0x1ed2, 0x1ed3], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */ + [0x1ed4, 0x1ed5], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ + [0x1ed4, 0x1ed5], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */ + [0x1ed6, 0x1ed7], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */ + [0x1ed6, 0x1ed7], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */ + [0x1ed8, 0x1ed9], /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ + [0x1ed8, 0x1ed9], /* LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */ + [0x1eda, 0x1edb], /* LATIN CAPITAL LETTER O WITH HORN AND ACUTE */ + [0x1eda, 0x1edb], /* LATIN SMALL LETTER O WITH HORN AND ACUTE */ + [0x1edc, 0x1edd], /* LATIN CAPITAL LETTER O WITH HORN AND GRAVE */ + [0x1edc, 0x1edd], /* LATIN SMALL LETTER O WITH HORN AND GRAVE */ + [0x1ede, 0x1edf], /* LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE */ + [0x1ede, 0x1edf], /* LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */ + [0x1ee0, 0x1ee1], /* LATIN CAPITAL LETTER O WITH HORN AND TILDE */ + [0x1ee0, 0x1ee1], /* LATIN SMALL LETTER O WITH HORN AND TILDE */ + [0x1ee2, 0x1ee3], /* LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW */ + [0x1ee2, 0x1ee3], /* LATIN SMALL LETTER O WITH HORN AND DOT BELOW */ + [0x1ee4, 0x1ee5], /* LATIN CAPITAL LETTER U WITH DOT BELOW */ + [0x1ee4, 0x1ee5], /* LATIN SMALL LETTER U WITH DOT BELOW */ + [0x1ee6, 0x1ee7], /* LATIN CAPITAL LETTER U WITH HOOK ABOVE */ + [0x1ee6, 0x1ee7], /* LATIN SMALL LETTER U WITH HOOK ABOVE */ + [0x1ee8, 0x1ee9], /* LATIN CAPITAL LETTER U WITH HORN AND ACUTE */ + [0x1ee8, 0x1ee9], /* LATIN SMALL LETTER U WITH HORN AND ACUTE */ + [0x1eea, 0x1eeb], /* LATIN CAPITAL LETTER U WITH HORN AND GRAVE */ + [0x1eea, 0x1eeb], /* LATIN SMALL LETTER U WITH HORN AND GRAVE */ + [0x1eec, 0x1eed], /* LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE */ + [0x1eec, 0x1eed], /* LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */ + [0x1eee, 0x1eef], /* LATIN CAPITAL LETTER U WITH HORN AND TILDE */ + [0x1eee, 0x1eef], /* LATIN SMALL LETTER U WITH HORN AND TILDE */ + [0x1ef0, 0x1ef1], /* LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW */ + [0x1ef0, 0x1ef1], /* LATIN SMALL LETTER U WITH HORN AND DOT BELOW */ + [0x1ef2, 0x1ef3], /* LATIN CAPITAL LETTER Y WITH GRAVE */ + [0x1ef2, 0x1ef3], /* LATIN SMALL LETTER Y WITH GRAVE */ + [0x1ef4, 0x1ef5], /* LATIN CAPITAL LETTER Y WITH DOT BELOW */ + [0x1ef4, 0x1ef5], /* LATIN SMALL LETTER Y WITH DOT BELOW */ + [0x1ef6, 0x1ef7], /* LATIN CAPITAL LETTER Y WITH HOOK ABOVE */ + [0x1ef6, 0x1ef7], /* LATIN SMALL LETTER Y WITH HOOK ABOVE */ + [0x1ef8, 0x1ef9], /* LATIN CAPITAL LETTER Y WITH TILDE */ + [0x1ef8, 0x1ef9], /* LATIN SMALL LETTER Y WITH TILDE */ + [0x1efa, 0x1efb], /* LATIN CAPITAL LETTER MIDDLE-WELSH LL */ + [0x1efa, 0x1efb], /* LATIN SMALL LETTER MIDDLE-WELSH LL */ + [0x1efc, 0x1efd], /* LATIN CAPITAL LETTER MIDDLE-WELSH V */ + [0x1efc, 0x1efd], /* LATIN SMALL LETTER MIDDLE-WELSH V */ + [0x1efe, 0x1eff], /* LATIN CAPITAL LETTER Y WITH LOOP */ + [0x1efe, 0x1eff], /* LATIN SMALL LETTER Y WITH LOOP */ + [0x1f08, 0x1f00], /* GREEK SMALL LETTER ALPHA WITH PSILI */ + [0x1f09, 0x1f01], /* GREEK SMALL LETTER ALPHA WITH DASIA */ + [0x1f0a, 0x1f02], /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA */ + [0x1f0b, 0x1f03], /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA */ + [0x1f0c, 0x1f04], /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA */ + [0x1f0d, 0x1f05], /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA */ + [0x1f0e, 0x1f06], /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI */ + [0x1f0f, 0x1f07], /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI */ + [0x1f08, 0x1f00], /* GREEK CAPITAL LETTER ALPHA WITH PSILI */ + [0x1f09, 0x1f01], /* GREEK CAPITAL LETTER ALPHA WITH DASIA */ + [0x1f0a, 0x1f02], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA */ + [0x1f0b, 0x1f03], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA */ + [0x1f0c, 0x1f04], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA */ + [0x1f0d, 0x1f05], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA */ + [0x1f0e, 0x1f06], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI */ + [0x1f0f, 0x1f07], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI */ + [0x1f18, 0x1f10], /* GREEK SMALL LETTER EPSILON WITH PSILI */ + [0x1f19, 0x1f11], /* GREEK SMALL LETTER EPSILON WITH DASIA */ + [0x1f1a, 0x1f12], /* GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA */ + [0x1f1b, 0x1f13], /* GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA */ + [0x1f1c, 0x1f14], /* GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA */ + [0x1f1d, 0x1f15], /* GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA */ + [0x1f16, 0x1f16], + [0x1f17, 0x1f17], + [0x1f18, 0x1f10], /* GREEK CAPITAL LETTER EPSILON WITH PSILI */ + [0x1f19, 0x1f11], /* GREEK CAPITAL LETTER EPSILON WITH DASIA */ + [0x1f1a, 0x1f12], /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA */ + [0x1f1b, 0x1f13], /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA */ + [0x1f1c, 0x1f14], /* GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA */ + [0x1f1d, 0x1f15], /* GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA */ + [0x1f1e, 0x1f1e], + [0x1f1f, 0x1f1f], + [0x1f28, 0x1f20], /* GREEK SMALL LETTER ETA WITH PSILI */ + [0x1f29, 0x1f21], /* GREEK SMALL LETTER ETA WITH DASIA */ + [0x1f2a, 0x1f22], /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA */ + [0x1f2b, 0x1f23], /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA */ + [0x1f2c, 0x1f24], /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA */ + [0x1f2d, 0x1f25], /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA */ + [0x1f2e, 0x1f26], /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI */ + [0x1f2f, 0x1f27], /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI */ + [0x1f28, 0x1f20], /* GREEK CAPITAL LETTER ETA WITH PSILI */ + [0x1f29, 0x1f21], /* GREEK CAPITAL LETTER ETA WITH DASIA */ + [0x1f2a, 0x1f22], /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA */ + [0x1f2b, 0x1f23], /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA */ + [0x1f2c, 0x1f24], /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA */ + [0x1f2d, 0x1f25], /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA */ + [0x1f2e, 0x1f26], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI */ + [0x1f2f, 0x1f27], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI */ + [0x1f38, 0x1f30], /* GREEK SMALL LETTER IOTA WITH PSILI */ + [0x1f39, 0x1f31], /* GREEK SMALL LETTER IOTA WITH DASIA */ + [0x1f3a, 0x1f32], /* GREEK SMALL LETTER IOTA WITH PSILI AND VARIA */ + [0x1f3b, 0x1f33], /* GREEK SMALL LETTER IOTA WITH DASIA AND VARIA */ + [0x1f3c, 0x1f34], /* GREEK SMALL LETTER IOTA WITH PSILI AND OXIA */ + [0x1f3d, 0x1f35], /* GREEK SMALL LETTER IOTA WITH DASIA AND OXIA */ + [0x1f3e, 0x1f36], /* GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI */ + [0x1f3f, 0x1f37], /* GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI */ + [0x1f38, 0x1f30], /* GREEK CAPITAL LETTER IOTA WITH PSILI */ + [0x1f39, 0x1f31], /* GREEK CAPITAL LETTER IOTA WITH DASIA */ + [0x1f3a, 0x1f32], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA */ + [0x1f3b, 0x1f33], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA */ + [0x1f3c, 0x1f34], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA */ + [0x1f3d, 0x1f35], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA */ + [0x1f3e, 0x1f36], /* GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI */ + [0x1f3f, 0x1f37], /* GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI */ + [0x1f48, 0x1f40], /* GREEK SMALL LETTER OMICRON WITH PSILI */ + [0x1f49, 0x1f41], /* GREEK SMALL LETTER OMICRON WITH DASIA */ + [0x1f4a, 0x1f42], /* GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA */ + [0x1f4b, 0x1f43], /* GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA */ + [0x1f4c, 0x1f44], /* GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA */ + [0x1f4d, 0x1f45], /* GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA */ + [0x1f46, 0x1f46], + [0x1f47, 0x1f47], + [0x1f48, 0x1f40], /* GREEK CAPITAL LETTER OMICRON WITH PSILI */ + [0x1f49, 0x1f41], /* GREEK CAPITAL LETTER OMICRON WITH DASIA */ + [0x1f4a, 0x1f42], /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA */ + [0x1f4b, 0x1f43], /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA */ + [0x1f4c, 0x1f44], /* GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA */ + [0x1f4d, 0x1f45], /* GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA */ + [0x1f4e, 0x1f4e], + [0x1f4f, 0x1f4f], + [0x1f50, 0x1f50], /* GREEK SMALL LETTER UPSILON WITH PSILI */ + [0x1f59, 0x1f51], /* GREEK SMALL LETTER UPSILON WITH DASIA */ + [0x1f52, 0x1f52], /* GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA */ + [0x1f5b, 0x1f53], /* GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA */ + [0x1f54, 0x1f54], /* GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA */ + [0x1f5d, 0x1f55], /* GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA */ + [0x1f56, 0x1f56], /* GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI */ + [0x1f5f, 0x1f57], /* GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI */ + [0x1f58, 0x1f58], + [0x1f59, 0x1f51], /* GREEK CAPITAL LETTER UPSILON WITH DASIA */ + [0x1f5a, 0x1f5a], + [0x1f5b, 0x1f53], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA */ + [0x1f5c, 0x1f5c], + [0x1f5d, 0x1f55], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA */ + [0x1f5e, 0x1f5e], + [0x1f5f, 0x1f57], /* GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI */ + [0x1f68, 0x1f60], /* GREEK SMALL LETTER OMEGA WITH PSILI */ + [0x1f69, 0x1f61], /* GREEK SMALL LETTER OMEGA WITH DASIA */ + [0x1f6a, 0x1f62], /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA */ + [0x1f6b, 0x1f63], /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA */ + [0x1f6c, 0x1f64], /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA */ + [0x1f6d, 0x1f65], /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA */ + [0x1f6e, 0x1f66], /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI */ + [0x1f6f, 0x1f67], /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI */ + [0x1f68, 0x1f60], /* GREEK CAPITAL LETTER OMEGA WITH PSILI */ + [0x1f69, 0x1f61], /* GREEK CAPITAL LETTER OMEGA WITH DASIA */ + [0x1f6a, 0x1f62], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA */ + [0x1f6b, 0x1f63], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA */ + [0x1f6c, 0x1f64], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA */ + [0x1f6d, 0x1f65], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA */ + [0x1f6e, 0x1f66], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI */ + [0x1f6f, 0x1f67], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI */ + [0x1fba, 0x1f70], /* GREEK SMALL LETTER ALPHA WITH VARIA */ + [0x1fbb, 0x1f71], /* GREEK SMALL LETTER ALPHA WITH OXIA */ + [0x1fc8, 0x1f72], /* GREEK SMALL LETTER EPSILON WITH VARIA */ + [0x1fc9, 0x1f73], /* GREEK SMALL LETTER EPSILON WITH OXIA */ + [0x1fca, 0x1f74], /* GREEK SMALL LETTER ETA WITH VARIA */ + [0x1fcb, 0x1f75], /* GREEK SMALL LETTER ETA WITH OXIA */ + [0x1fda, 0x1f76], /* GREEK SMALL LETTER IOTA WITH VARIA */ + [0x1fdb, 0x1f77], /* GREEK SMALL LETTER IOTA WITH OXIA */ + [0x1ff8, 0x1f78], /* GREEK SMALL LETTER OMICRON WITH VARIA */ + [0x1ff9, 0x1f79], /* GREEK SMALL LETTER OMICRON WITH OXIA */ + [0x1fea, 0x1f7a], /* GREEK SMALL LETTER UPSILON WITH VARIA */ + [0x1feb, 0x1f7b], /* GREEK SMALL LETTER UPSILON WITH OXIA */ + [0x1ffa, 0x1f7c], /* GREEK SMALL LETTER OMEGA WITH VARIA */ + [0x1ffb, 0x1f7d], /* GREEK SMALL LETTER OMEGA WITH OXIA */ + [0x1f7e, 0x1f7e], + [0x1f7f, 0x1f7f], + [0x1f88, 0x1f80], /* GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI */ + [0x1f89, 0x1f81], /* GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI */ + [0x1f8a, 0x1f82], /* GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ + [0x1f8b, 0x1f83], /* GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ + [0x1f8c, 0x1f84], /* GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ + [0x1f8d, 0x1f85], /* GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ + [0x1f8e, 0x1f86], /* GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ + [0x1f8f, 0x1f87], /* GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ + [0x1f88, 0x1f80], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI */ + [0x1f89, 0x1f81], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI */ + [0x1f8a, 0x1f82], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ + [0x1f8b, 0x1f83], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ + [0x1f8c, 0x1f84], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ + [0x1f8d, 0x1f85], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ + [0x1f8e, 0x1f86], /* GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ + [0x1f8f, 0x1f87], /* GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ + [0x1f98, 0x1f90], /* GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI */ + [0x1f99, 0x1f91], /* GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI */ + [0x1f9a, 0x1f92], /* GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ + [0x1f9b, 0x1f93], /* GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ + [0x1f9c, 0x1f94], /* GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ + [0x1f9d, 0x1f95], /* GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ + [0x1f9e, 0x1f96], /* GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ + [0x1f9f, 0x1f97], /* GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ + [0x1f98, 0x1f90], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI */ + [0x1f99, 0x1f91], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI */ + [0x1f9a, 0x1f92], /* GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ + [0x1f9b, 0x1f93], /* GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ + [0x1f9c, 0x1f94], /* GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ + [0x1f9d, 0x1f95], /* GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ + [0x1f9e, 0x1f96], /* GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ + [0x1f9f, 0x1f97], /* GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ + [0x1fa8, 0x1fa0], /* GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI */ + [0x1fa9, 0x1fa1], /* GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI */ + [0x1faa, 0x1fa2], /* GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI */ + [0x1fab, 0x1fa3], /* GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI */ + [0x1fac, 0x1fa4], /* GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI */ + [0x1fad, 0x1fa5], /* GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI */ + [0x1fae, 0x1fa6], /* GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI */ + [0x1faf, 0x1fa7], /* GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI */ + [0x1fa8, 0x1fa0], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI */ + [0x1fa9, 0x1fa1], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI */ + [0x1faa, 0x1fa2], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI */ + [0x1fab, 0x1fa3], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI */ + [0x1fac, 0x1fa4], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI */ + [0x1fad, 0x1fa5], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI */ + [0x1fae, 0x1fa6], /* GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI */ + [0x1faf, 0x1fa7], /* GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI */ + [0x1fb8, 0x1fb0], /* GREEK SMALL LETTER ALPHA WITH VRACHY */ + [0x1fb9, 0x1fb1], /* GREEK SMALL LETTER ALPHA WITH MACRON */ + [0x1fb2, 0x1fb2], /* GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI */ + [0x1fbc, 0x1fb3], /* GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI */ + [0x1fb4, 0x1fb4], /* GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI */ + [0x1fb5, 0x1fb5], + [0x1fb6, 0x1fb6], /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI */ + [0x1fb7, 0x1fb7], /* GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI */ + [0x1fb8, 0x1fb0], /* GREEK CAPITAL LETTER ALPHA WITH VRACHY */ + [0x1fb9, 0x1fb1], /* GREEK CAPITAL LETTER ALPHA WITH MACRON */ + [0x1fba, 0x1f70], /* GREEK CAPITAL LETTER ALPHA WITH VARIA */ + [0x1fbb, 0x1f71], /* GREEK CAPITAL LETTER ALPHA WITH OXIA */ + [0x1fbc, 0x1fb3], /* GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI */ + [0x1fbd, 0x1fbd], /* GREEK KORONIS */ + [0x399, 0x1fbe], /* GREEK PROSGEGRAMMENI */ + [0x1fbf, 0x1fbf], /* GREEK PSILI */ + [0x1fc0, 0x1fc0], /* GREEK PERISPOMENI */ + [0x1fc1, 0x1fc1], /* GREEK DIALYTIKA AND PERISPOMENI */ + [0x1fc2, 0x1fc2], /* GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI */ + [0x1fcc, 0x1fc3], /* GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI */ + [0x1fc4, 0x1fc4], /* GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI */ + [0x1fc5, 0x1fc5], + [0x1fc6, 0x1fc6], /* GREEK SMALL LETTER ETA WITH PERISPOMENI */ + [0x1fc7, 0x1fc7], /* GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI */ + [0x1fc8, 0x1f72], /* GREEK CAPITAL LETTER EPSILON WITH VARIA */ + [0x1fc9, 0x1f73], /* GREEK CAPITAL LETTER EPSILON WITH OXIA */ + [0x1fca, 0x1f74], /* GREEK CAPITAL LETTER ETA WITH VARIA */ + [0x1fcb, 0x1f75], /* GREEK CAPITAL LETTER ETA WITH OXIA */ + [0x1fcc, 0x1fc3], /* GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI */ + [0x1fcd, 0x1fcd], /* GREEK PSILI AND VARIA */ + [0x1fce, 0x1fce], /* GREEK PSILI AND OXIA */ + [0x1fcf, 0x1fcf], /* GREEK PSILI AND PERISPOMENI */ + [0x1fd8, 0x1fd0], /* GREEK SMALL LETTER IOTA WITH VRACHY */ + [0x1fd9, 0x1fd1], /* GREEK SMALL LETTER IOTA WITH MACRON */ + [0x1fd2, 0x1fd2], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA */ + [0x1fd3, 0x1fd3], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA */ + [0x1fd4, 0x1fd4], + [0x1fd5, 0x1fd5], + [0x1fd6, 0x1fd6], /* GREEK SMALL LETTER IOTA WITH PERISPOMENI */ + [0x1fd7, 0x1fd7], /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI */ + [0x1fd8, 0x1fd0], /* GREEK CAPITAL LETTER IOTA WITH VRACHY */ + [0x1fd9, 0x1fd1], /* GREEK CAPITAL LETTER IOTA WITH MACRON */ + [0x1fda, 0x1f76], /* GREEK CAPITAL LETTER IOTA WITH VARIA */ + [0x1fdb, 0x1f77], /* GREEK CAPITAL LETTER IOTA WITH OXIA */ + [0x1fdc, 0x1fdc], + [0x1fdd, 0x1fdd], /* GREEK DASIA AND VARIA */ + [0x1fde, 0x1fde], /* GREEK DASIA AND OXIA */ + [0x1fdf, 0x1fdf], /* GREEK DASIA AND PERISPOMENI */ + [0x1fe8, 0x1fe0], /* GREEK SMALL LETTER UPSILON WITH VRACHY */ + [0x1fe9, 0x1fe1], /* GREEK SMALL LETTER UPSILON WITH MACRON */ + [0x1fe2, 0x1fe2], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA */ + [0x1fe3, 0x1fe3], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA */ + [0x1fe4, 0x1fe4], /* GREEK SMALL LETTER RHO WITH PSILI */ + [0x1fec, 0x1fe5], /* GREEK SMALL LETTER RHO WITH DASIA */ + [0x1fe6, 0x1fe6], /* GREEK SMALL LETTER UPSILON WITH PERISPOMENI */ + [0x1fe7, 0x1fe7], /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI */ + [0x1fe8, 0x1fe0], /* GREEK CAPITAL LETTER UPSILON WITH VRACHY */ + [0x1fe9, 0x1fe1], /* GREEK CAPITAL LETTER UPSILON WITH MACRON */ + [0x1fea, 0x1f7a], /* GREEK CAPITAL LETTER UPSILON WITH VARIA */ + [0x1feb, 0x1f7b], /* GREEK CAPITAL LETTER UPSILON WITH OXIA */ + [0x1fec, 0x1fe5], /* GREEK CAPITAL LETTER RHO WITH DASIA */ + [0x1fed, 0x1fed], /* GREEK DIALYTIKA AND VARIA */ + [0x1fee, 0x1fee], /* GREEK DIALYTIKA AND OXIA */ + [0x1fef, 0x1fef], /* GREEK VARIA */ + [0x1ff0, 0x1ff0], + [0x1ff1, 0x1ff1], + [0x1ff2, 0x1ff2], /* GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI */ + [0x1ffc, 0x1ff3], /* GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI */ + [0x1ff4, 0x1ff4], /* GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI */ + [0x1ff5, 0x1ff5], + [0x1ff6, 0x1ff6], /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI */ + [0x1ff7, 0x1ff7], /* GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI */ + [0x1ff8, 0x1f78], /* GREEK CAPITAL LETTER OMICRON WITH VARIA */ + [0x1ff9, 0x1f79], /* GREEK CAPITAL LETTER OMICRON WITH OXIA */ + [0x1ffa, 0x1f7c], /* GREEK CAPITAL LETTER OMEGA WITH VARIA */ + [0x1ffb, 0x1f7d], /* GREEK CAPITAL LETTER OMEGA WITH OXIA */ + [0x1ffc, 0x1ff3], /* GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI */ + [0x1ffd, 0x1ffd], /* GREEK OXIA */ + [0x1ffe, 0x1ffe], /* GREEK DASIA */ + [0x1fff, 0x1fff], + [0x2000, 0x2000], /* EN QUAD */ + [0x2001, 0x2001], /* EM QUAD */ + [0x2002, 0x2002], /* EN SPACE */ + [0x2003, 0x2003], /* EM SPACE */ + [0x2004, 0x2004], /* THREE-PER-EM SPACE */ + [0x2005, 0x2005], /* FOUR-PER-EM SPACE */ + [0x2006, 0x2006], /* SIX-PER-EM SPACE */ + [0x2007, 0x2007], /* FIGURE SPACE */ + [0x2008, 0x2008], /* PUNCTUATION SPACE */ + [0x2009, 0x2009], /* THIN SPACE */ + [0x200a, 0x200a], /* HAIR SPACE */ + [0x200b, 0x200b], /* ZERO WIDTH SPACE */ + [0x200c, 0x200c], /* ZERO WIDTH NON-JOINER */ + [0x200d, 0x200d], /* ZERO WIDTH JOINER */ + [0x200e, 0x200e], /* LEFT-TO-RIGHT MARK */ + [0x200f, 0x200f], /* RIGHT-TO-LEFT MARK */ + [0x2010, 0x2010], /* HYPHEN */ + [0x2011, 0x2011], /* NON-BREAKING HYPHEN */ + [0x2012, 0x2012], /* FIGURE DASH */ + [0x2013, 0x2013], /* EN DASH */ + [0x2014, 0x2014], /* EM DASH */ + [0x2015, 0x2015], /* HORIZONTAL BAR (QUOTATION DASH) */ + [0x2016, 0x2016], /* DOUBLE VERTICAL LINE (DOUBLE VERTICAL BAR) */ + [0x2017, 0x2017], /* DOUBLE LOW LINE (SPACING DOUBLE UNDERSCORE) */ + [0x2018, 0x2018], /* LEFT SINGLE QUOTATION MARK (SINGLE TURNED COMMA QUOTATION MARK) */ + [0x2019, 0x2019], /* RIGHT SINGLE QUOTATION MARK (SINGLE COMMA QUOTATION MARK) */ + [0x201a, 0x201a], /* SINGLE LOW-9 QUOTATION MARK (LOW SINGLE COMMA QUOTATION MARK) */ + [0x201b, 0x201b], /* SINGLE HIGH-REVERSED-9 QUOTATION MARK (SINGLE REVERSED COMMA QUOTATION MARK) */ + [0x201c, 0x201c], /* LEFT DOUBLE QUOTATION MARK (DOUBLE TURNED COMMA QUOTATION MARK) */ + [0x201d, 0x201d], /* RIGHT DOUBLE QUOTATION MARK (DOUBLE COMMA QUOTATION MARK) */ + [0x201e, 0x201e], /* DOUBLE LOW-9 QUOTATION MARK (LOW DOUBLE COMMA QUOTATION MARK) */ + [0x201f, 0x201f], /* DOUBLE HIGH-REVERSED-9 QUOTATION MARK (DOUBLE REVERSED COMMA QUOTATION MARK) */ + [0x2020, 0x2020], /* DAGGER */ + [0x2021, 0x2021], /* DOUBLE DAGGER */ + [0x2022, 0x2022], /* BULLET */ + [0x2023, 0x2023], /* TRIANGULAR BULLET */ + [0x2024, 0x2024], /* ONE DOT LEADER */ + [0x2025, 0x2025], /* TWO DOT LEADER */ + [0x2026, 0x2026], /* HORIZONTAL ELLIPSIS */ + [0x2027, 0x2027], /* HYPHENATION POINT */ + [0x2028, 0x2028], /* LINE SEPARATOR */ + [0x2029, 0x2029], /* PARAGRAPH SEPARATOR */ + [0x202a, 0x202a], /* LEFT-TO-RIGHT EMBEDDING */ + [0x202b, 0x202b], /* RIGHT-TO-LEFT EMBEDDING */ + [0x202c, 0x202c], /* POP DIRECTIONAL FORMATTING */ + [0x202d, 0x202d], /* LEFT-TO-RIGHT OVERRIDE */ + [0x202e, 0x202e], /* RIGHT-TO-LEFT OVERRIDE */ + [0x202f, 0x202f], /* NARROW NO-BREAK SPACE */ + [0x2030, 0x2030], /* PER MILLE SIGN */ + [0x2031, 0x2031], /* PER TEN THOUSAND SIGN */ + [0x2032, 0x2032], /* PRIME */ + [0x2033, 0x2033], /* DOUBLE PRIME */ + [0x2034, 0x2034], /* TRIPLE PRIME */ + [0x2035, 0x2035], /* REVERSED PRIME */ + [0x2036, 0x2036], /* REVERSED DOUBLE PRIME */ + [0x2037, 0x2037], /* REVERSED TRIPLE PRIME */ + [0x2038, 0x2038], /* CARET */ + [0x2039, 0x2039], /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK (LEFT POINTING SINGLE GUILLEMET) */ + [0x203a, 0x203a], /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (RIGHT POINTING SINGLE GUILLEMET) */ + [0x203b, 0x203b], /* REFERENCE MARK */ + [0x203c, 0x203c], /* DOUBLE EXCLAMATION MARK */ + [0x203d, 0x203d], /* INTERROBANG */ + [0x203e, 0x203e], /* OVERLINE (SPACING OVERSCORE) */ + [0x203f, 0x203f], /* UNDERTIE */ + [0x2040, 0x2040], /* CHARACTER TIE */ + [0x2041, 0x2041], /* CARET INSERTION POINT */ + [0x2042, 0x2042], /* ASTERISM */ + [0x2043, 0x2043], /* HYPHEN BULLET */ + [0x2044, 0x2044], /* FRACTION SLASH */ + [0x2045, 0x2045], /* LEFT SQUARE BRACKET WITH QUILL */ + [0x2046, 0x2046], /* RIGHT SQUARE BRACKET WITH QUILL */ + [0x2047, 0x2047], /* DOUBLE QUESTION MARK */ + [0x2048, 0x2048], /* QUESTION EXCLAMATION MARK */ + [0x2049, 0x2049], /* EXCLAMATION QUESTION MARK */ + [0x204a, 0x204a], /* TIRONIAN SIGN ET */ + [0x204b, 0x204b], /* REVERSED PILCROW SIGN */ + [0x204c, 0x204c], /* BLACK LEFTWARDS BULLET */ + [0x204d, 0x204d], /* BLACK RIGHTWARDS BULLET */ + [0x204e, 0x204e], /* LOW ASTERISK */ + [0x204f, 0x204f], /* REVERSED SEMICOLON */ + [0x2050, 0x2050], /* CLOSE UP */ + [0x2051, 0x2051], /* TWO ASTERISKS ALIGNED VERTICALLY */ + [0x2052, 0x2052], /* COMMERCIAL MINUS SIGN */ + [0x2053, 0x2053], /* SWUNG DASH */ + [0x2054, 0x2054], /* INVERTED UNDERTIE */ + [0x2055, 0x2055], /* FLOWER PUNCTUATION MARK */ + [0x2056, 0x2056], /* THREE DOT PUNCTUATION */ + [0x2057, 0x2057], /* QUADRUPLE PRIME */ + [0x2058, 0x2058], /* FOUR DOT PUNCTUATION */ + [0x2059, 0x2059], /* FIVE DOT PUNCTUATION */ + [0x205a, 0x205a], /* TWO DOT PUNCTUATION */ + [0x205b, 0x205b], /* FOUR DOT MARK */ + [0x205c, 0x205c], /* DOTTED CROSS */ + [0x205d, 0x205d], /* TRICOLON */ + [0x205e, 0x205e], /* VERTICAL FOUR DOTS */ + [0x205f, 0x205f], /* MEDIUM MATHEMATICAL SPACE */ + [0x2060, 0x2060], /* WORD JOINER */ + [0x2061, 0x2061], /* FUNCTION APPLICATION */ + [0x2062, 0x2062], /* INVISIBLE TIMES */ + [0x2063, 0x2063], /* INVISIBLE SEPARATOR */ + [0x2064, 0x2064], /* INVISIBLE PLUS */ + [0x2065, 0x2065], + [0x2066, 0x2066], + [0x2067, 0x2067], + [0x2068, 0x2068], + [0x2069, 0x2069], + [0x206a, 0x206a], /* INHIBIT SYMMETRIC SWAPPING */ + [0x206b, 0x206b], /* ACTIVATE SYMMETRIC SWAPPING */ + [0x206c, 0x206c], /* INHIBIT ARABIC FORM SHAPING */ + [0x206d, 0x206d], /* ACTIVATE ARABIC FORM SHAPING */ + [0x206e, 0x206e], /* NATIONAL DIGIT SHAPES */ + [0x206f, 0x206f], /* NOMINAL DIGIT SHAPES */ + [0x2070, 0x2070], /* SUPERSCRIPT ZERO (SUPERSCRIPT DIGIT ZERO) */ + [0x2071, 0x2071], /* SUPERSCRIPT LATIN SMALL LETTER I */ + [0x2072, 0x2072], + [0x2073, 0x2073], + [0x2074, 0x2074], /* SUPERSCRIPT FOUR (SUPERSCRIPT DIGIT FOUR) */ + [0x2075, 0x2075], /* SUPERSCRIPT FIVE (SUPERSCRIPT DIGIT FIVE) */ + [0x2076, 0x2076], /* SUPERSCRIPT SIX (SUPERSCRIPT DIGIT SIX) */ + [0x2077, 0x2077], /* SUPERSCRIPT SEVEN (SUPERSCRIPT DIGIT SEVEN) */ + [0x2078, 0x2078], /* SUPERSCRIPT EIGHT (SUPERSCRIPT DIGIT EIGHT) */ + [0x2079, 0x2079], /* SUPERSCRIPT NINE (SUPERSCRIPT DIGIT NINE) */ + [0x207a, 0x207a], /* SUPERSCRIPT PLUS SIGN */ + [0x207b, 0x207b], /* SUPERSCRIPT MINUS (SUPERSCRIPT HYPHEN-MINUS) */ + [0x207c, 0x207c], /* SUPERSCRIPT EQUALS SIGN */ + [0x207d, 0x207d], /* SUPERSCRIPT LEFT PARENTHESIS (SUPERSCRIPT OPENING PARENTHESIS) */ + [0x207e, 0x207e], /* SUPERSCRIPT RIGHT PARENTHESIS (SUPERSCRIPT CLOSING PARENTHESIS) */ + [0x207f, 0x207f], /* SUPERSCRIPT LATIN SMALL LETTER N */ + [0x2080, 0x2080], /* SUBSCRIPT ZERO (SUBSCRIPT DIGIT ZERO) */ + [0x2081, 0x2081], /* SUBSCRIPT ONE (SUBSCRIPT DIGIT ONE) */ + [0x2082, 0x2082], /* SUBSCRIPT TWO (SUBSCRIPT DIGIT TWO) */ + [0x2083, 0x2083], /* SUBSCRIPT THREE (SUBSCRIPT DIGIT THREE) */ + [0x2084, 0x2084], /* SUBSCRIPT FOUR (SUBSCRIPT DIGIT FOUR) */ + [0x2085, 0x2085], /* SUBSCRIPT FIVE (SUBSCRIPT DIGIT FIVE) */ + [0x2086, 0x2086], /* SUBSCRIPT SIX (SUBSCRIPT DIGIT SIX) */ + [0x2087, 0x2087], /* SUBSCRIPT SEVEN (SUBSCRIPT DIGIT SEVEN) */ + [0x2088, 0x2088], /* SUBSCRIPT EIGHT (SUBSCRIPT DIGIT EIGHT) */ + [0x2089, 0x2089], /* SUBSCRIPT NINE (SUBSCRIPT DIGIT NINE) */ + [0x208a, 0x208a], /* SUBSCRIPT PLUS SIGN */ + [0x208b, 0x208b], /* SUBSCRIPT MINUS (SUBSCRIPT HYPHEN-MINUS) */ + [0x208c, 0x208c], /* SUBSCRIPT EQUALS SIGN */ + [0x208d, 0x208d], /* SUBSCRIPT LEFT PARENTHESIS (SUBSCRIPT OPENING PARENTHESIS) */ + [0x208e, 0x208e], /* SUBSCRIPT RIGHT PARENTHESIS (SUBSCRIPT CLOSING PARENTHESIS) */ + [0x208f, 0x208f], + [0x2090, 0x2090], /* LATIN SUBSCRIPT SMALL LETTER A */ + [0x2091, 0x2091], /* LATIN SUBSCRIPT SMALL LETTER E */ + [0x2092, 0x2092], /* LATIN SUBSCRIPT SMALL LETTER O */ + [0x2093, 0x2093], /* LATIN SUBSCRIPT SMALL LETTER X */ + [0x2094, 0x2094], /* LATIN SUBSCRIPT SMALL LETTER SCHWA */ + [0x2095, 0x2095], /* LATIN SUBSCRIPT SMALL LETTER H */ + [0x2096, 0x2096], /* LATIN SUBSCRIPT SMALL LETTER K */ + [0x2097, 0x2097], /* LATIN SUBSCRIPT SMALL LETTER L */ + [0x2098, 0x2098], /* LATIN SUBSCRIPT SMALL LETTER M */ + [0x2099, 0x2099], /* LATIN SUBSCRIPT SMALL LETTER N */ + [0x209a, 0x209a], /* LATIN SUBSCRIPT SMALL LETTER P */ + [0x209b, 0x209b], /* LATIN SUBSCRIPT SMALL LETTER S */ + [0x209c, 0x209c], /* LATIN SUBSCRIPT SMALL LETTER T */ + [0x209d, 0x209d], + [0x209e, 0x209e], + [0x209f, 0x209f], + [0x20a0, 0x20a0], /* EURO-CURRENCY SIGN */ + [0x20a1, 0x20a1], /* COLON SIGN */ + [0x20a2, 0x20a2], /* CRUZEIRO SIGN */ + [0x20a3, 0x20a3], /* FRENCH FRANC SIGN */ + [0x20a4, 0x20a4], /* LIRA SIGN */ + [0x20a5, 0x20a5], /* MILL SIGN */ + [0x20a6, 0x20a6], /* NAIRA SIGN */ + [0x20a7, 0x20a7], /* PESETA SIGN */ + [0x20a8, 0x20a8], /* RUPEE SIGN */ + [0x20a9, 0x20a9], /* WON SIGN */ + [0x20aa, 0x20aa], /* NEW SHEQEL SIGN */ + [0x20ab, 0x20ab], /* DONG SIGN */ + [0x20ac, 0x20ac], /* EURO SIGN */ + [0x20ad, 0x20ad], /* KIP SIGN */ + [0x20ae, 0x20ae], /* TUGRIK SIGN */ + [0x20af, 0x20af], /* DRACHMA SIGN */ + [0x20b0, 0x20b0], /* GERMAN PENNY SIGN */ + [0x20b1, 0x20b1], /* PESO SIGN */ + [0x20b2, 0x20b2], /* GUARANI SIGN */ + [0x20b3, 0x20b3], /* AUSTRAL SIGN */ + [0x20b4, 0x20b4], /* HRYVNIA SIGN */ + [0x20b5, 0x20b5], /* CEDI SIGN */ + [0x20b6, 0x20b6], /* LIVRE TOURNOIS SIGN */ + [0x20b7, 0x20b7], /* SPESMILO SIGN */ + [0x20b8, 0x20b8], /* TENGE SIGN */ + [0x20b9, 0x20b9], /* INDIAN RUPEE SIGN */ + [0x20ba, 0x20ba], /* TURKISH LIRA SIGN */ + [0x20bb, 0x20bb], + [0x20bc, 0x20bc], + [0x20bd, 0x20bd], + [0x20be, 0x20be], + [0x20bf, 0x20bf], + [0x20c0, 0x20c0], + [0x20c1, 0x20c1], + [0x20c2, 0x20c2], + [0x20c3, 0x20c3], + [0x20c4, 0x20c4], + [0x20c5, 0x20c5], + [0x20c6, 0x20c6], + [0x20c7, 0x20c7], + [0x20c8, 0x20c8], + [0x20c9, 0x20c9], + [0x20ca, 0x20ca], + [0x20cb, 0x20cb], + [0x20cc, 0x20cc], + [0x20cd, 0x20cd], + [0x20ce, 0x20ce], + [0x20cf, 0x20cf], + [0x20d0, 0x20d0], /* COMBINING LEFT HARPOON ABOVE (NON-SPACING LEFT HARPOON ABOVE) */ + [0x20d1, 0x20d1], /* COMBINING RIGHT HARPOON ABOVE (NON-SPACING RIGHT HARPOON ABOVE) */ + [0x20d2, 0x20d2], /* COMBINING LONG VERTICAL LINE OVERLAY (NON-SPACING LONG VERTICAL BAR OVERLAY) */ + [0x20d3, 0x20d3], /* COMBINING SHORT VERTICAL LINE OVERLAY (NON-SPACING SHORT VERTICAL BAR OVERLAY) */ + [0x20d4, 0x20d4], /* COMBINING ANTICLOCKWISE ARROW ABOVE (NON-SPACING ANTICLOCKWISE ARROW ABOVE) */ + [0x20d5, 0x20d5], /* COMBINING CLOCKWISE ARROW ABOVE (NON-SPACING CLOCKWISE ARROW ABOVE) */ + [0x20d6, 0x20d6], /* COMBINING LEFT ARROW ABOVE (NON-SPACING LEFT ARROW ABOVE) */ + [0x20d7, 0x20d7], /* COMBINING RIGHT ARROW ABOVE (NON-SPACING RIGHT ARROW ABOVE) */ + [0x20d8, 0x20d8], /* COMBINING RING OVERLAY (NON-SPACING RING OVERLAY) */ + [0x20d9, 0x20d9], /* COMBINING CLOCKWISE RING OVERLAY (NON-SPACING CLOCKWISE RING OVERLAY) */ + [0x20da, 0x20da], /* COMBINING ANTICLOCKWISE RING OVERLAY (NON-SPACING ANTICLOCKWISE RING OVERLAY) */ + [0x20db, 0x20db], /* COMBINING THREE DOTS ABOVE (NON-SPACING THREE DOTS ABOVE) */ + [0x20dc, 0x20dc], /* COMBINING FOUR DOTS ABOVE (NON-SPACING FOUR DOTS ABOVE) */ + [0x20dd, 0x20dd], /* COMBINING ENCLOSING CIRCLE (ENCLOSING CIRCLE) */ + [0x20de, 0x20de], /* COMBINING ENCLOSING SQUARE (ENCLOSING SQUARE) */ + [0x20df, 0x20df], /* COMBINING ENCLOSING DIAMOND (ENCLOSING DIAMOND) */ + [0x20e0, 0x20e0], /* COMBINING ENCLOSING CIRCLE BACKSLASH (ENCLOSING CIRCLE SLASH) */ + [0x20e1, 0x20e1], /* COMBINING LEFT RIGHT ARROW ABOVE (NON-SPACING LEFT RIGHT ARROW ABOVE) */ + [0x20e2, 0x20e2], /* COMBINING ENCLOSING SCREEN */ + [0x20e3, 0x20e3], /* COMBINING ENCLOSING KEYCAP */ + [0x20e4, 0x20e4], /* COMBINING ENCLOSING UPWARD POINTING TRIANGLE */ + [0x20e5, 0x20e5], /* COMBINING REVERSE SOLIDUS OVERLAY */ + [0x20e6, 0x20e6], /* COMBINING DOUBLE VERTICAL STROKE OVERLAY */ + [0x20e7, 0x20e7], /* COMBINING ANNUITY SYMBOL */ + [0x20e8, 0x20e8], /* COMBINING TRIPLE UNDERDOT */ + [0x20e9, 0x20e9], /* COMBINING WIDE BRIDGE ABOVE */ + [0x20ea, 0x20ea], /* COMBINING LEFTWARDS ARROW OVERLAY */ + [0x20eb, 0x20eb], /* COMBINING LONG DOUBLE SOLIDUS OVERLAY */ + [0x20ec, 0x20ec], /* COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS */ + [0x20ed, 0x20ed], /* COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS */ + [0x20ee, 0x20ee], /* COMBINING LEFT ARROW BELOW */ + [0x20ef, 0x20ef], /* COMBINING RIGHT ARROW BELOW */ + [0x20f0, 0x20f0], /* COMBINING ASTERISK ABOVE */ + [0x20f1, 0x20f1], + [0x20f2, 0x20f2], + [0x20f3, 0x20f3], + [0x20f4, 0x20f4], + [0x20f5, 0x20f5], + [0x20f6, 0x20f6], + [0x20f7, 0x20f7], + [0x20f8, 0x20f8], + [0x20f9, 0x20f9], + [0x20fa, 0x20fa], + [0x20fb, 0x20fb], + [0x20fc, 0x20fc], + [0x20fd, 0x20fd], + [0x20fe, 0x20fe], + [0x20ff, 0x20ff], + [0x2100, 0x2100], /* ACCOUNT OF */ + [0x2101, 0x2101], /* ADDRESSED TO THE SUBJECT */ + [0x2102, 0x2102], /* DOUBLE-STRUCK CAPITAL C (DOUBLE-STRUCK C) */ + [0x2103, 0x2103], /* DEGREE CELSIUS (DEGREES CENTIGRADE) */ + [0x2104, 0x2104], /* CENTRE LINE SYMBOL (C L SYMBOL) */ + [0x2105, 0x2105], /* CARE OF */ + [0x2106, 0x2106], /* CADA UNA */ + [0x2107, 0x2107], /* EULER CONSTANT (EULERS) */ + [0x2108, 0x2108], /* SCRUPLE */ + [0x2109, 0x2109], /* DEGREE FAHRENHEIT (DEGREES FAHRENHEIT) */ + [0x210a, 0x210a], /* SCRIPT SMALL G */ + [0x210b, 0x210b], /* SCRIPT CAPITAL H (SCRIPT H) */ + [0x210c, 0x210c], /* BLACK-LETTER CAPITAL H (BLACK-LETTER H) */ + [0x210d, 0x210d], /* DOUBLE-STRUCK CAPITAL H (DOUBLE-STRUCK H) */ + [0x210e, 0x210e], /* PLANCK CONSTANT */ + [0x210f, 0x210f], /* PLANCK CONSTANT OVER TWO PI (PLANCK CONSTANT OVER 2 PI) */ + [0x2110, 0x2110], /* SCRIPT CAPITAL I (SCRIPT I) */ + [0x2111, 0x2111], /* BLACK-LETTER CAPITAL I (BLACK-LETTER I) */ + [0x2112, 0x2112], /* SCRIPT CAPITAL L (SCRIPT L) */ + [0x2113, 0x2113], /* SCRIPT SMALL L */ + [0x2114, 0x2114], /* L B BAR SYMBOL */ + [0x2115, 0x2115], /* DOUBLE-STRUCK CAPITAL N (DOUBLE-STRUCK N) */ + [0x2116, 0x2116], /* NUMERO SIGN (NUMERO) */ + [0x2117, 0x2117], /* SOUND RECORDING COPYRIGHT */ + [0x2118, 0x2118], /* SCRIPT CAPITAL P (SCRIPT P) */ + [0x2119, 0x2119], /* DOUBLE-STRUCK CAPITAL P (DOUBLE-STRUCK P) */ + [0x211a, 0x211a], /* DOUBLE-STRUCK CAPITAL Q (DOUBLE-STRUCK Q) */ + [0x211b, 0x211b], /* SCRIPT CAPITAL R (SCRIPT R) */ + [0x211c, 0x211c], /* BLACK-LETTER CAPITAL R (BLACK-LETTER R) */ + [0x211d, 0x211d], /* DOUBLE-STRUCK CAPITAL R (DOUBLE-STRUCK R) */ + [0x211e, 0x211e], /* PRESCRIPTION TAKE */ + [0x211f, 0x211f], /* RESPONSE */ + [0x2120, 0x2120], /* SERVICE MARK */ + [0x2121, 0x2121], /* TELEPHONE SIGN (T E L SYMBOL) */ + [0x2122, 0x2122], /* TRADE MARK SIGN (TRADEMARK) */ + [0x2123, 0x2123], /* VERSICLE */ + [0x2124, 0x2124], /* DOUBLE-STRUCK CAPITAL Z (DOUBLE-STRUCK Z) */ + [0x2125, 0x2125], /* OUNCE SIGN (OUNCE) */ + [0x2126, 0x3c9], /* OHM SIGN (OHM) */ + [0x2127, 0x2127], /* INVERTED OHM SIGN (MHO) */ + [0x2128, 0x2128], /* BLACK-LETTER CAPITAL Z (BLACK-LETTER Z) */ + [0x2129, 0x2129], /* TURNED GREEK SMALL LETTER IOTA */ + [0x212a, 0x6b], /* KELVIN SIGN (DEGREES KELVIN) */ + [0x212b, 0xe5], /* ANGSTROM SIGN (ANGSTROM UNIT) */ + [0x212c, 0x212c], /* SCRIPT CAPITAL B (SCRIPT B) */ + [0x212d, 0x212d], /* BLACK-LETTER CAPITAL C (BLACK-LETTER C) */ + [0x212e, 0x212e], /* ESTIMATED SYMBOL */ + [0x212f, 0x212f], /* SCRIPT SMALL E */ + [0x2130, 0x2130], /* SCRIPT CAPITAL E (SCRIPT E) */ + [0x2131, 0x2131], /* SCRIPT CAPITAL F (SCRIPT F) */ + [0x2132, 0x214e], /* TURNED CAPITAL F (TURNED F) */ + [0x2133, 0x2133], /* SCRIPT CAPITAL M (SCRIPT M) */ + [0x2134, 0x2134], /* SCRIPT SMALL O */ + [0x2135, 0x2135], /* ALEF SYMBOL (FIRST TRANSFINITE CARDINAL) */ + [0x2136, 0x2136], /* BET SYMBOL (SECOND TRANSFINITE CARDINAL) */ + [0x2137, 0x2137], /* GIMEL SYMBOL (THIRD TRANSFINITE CARDINAL) */ + [0x2138, 0x2138], /* DALET SYMBOL (FOURTH TRANSFINITE CARDINAL) */ + [0x2139, 0x2139], /* INFORMATION SOURCE */ + [0x213a, 0x213a], /* ROTATED CAPITAL Q */ + [0x213b, 0x213b], /* FACSIMILE SIGN */ + [0x213c, 0x213c], /* DOUBLE-STRUCK SMALL PI */ + [0x213d, 0x213d], /* DOUBLE-STRUCK SMALL GAMMA */ + [0x213e, 0x213e], /* DOUBLE-STRUCK CAPITAL GAMMA */ + [0x213f, 0x213f], /* DOUBLE-STRUCK CAPITAL PI */ + [0x2140, 0x2140], /* DOUBLE-STRUCK N-ARY SUMMATION */ + [0x2141, 0x2141], /* TURNED SANS-SERIF CAPITAL G */ + [0x2142, 0x2142], /* TURNED SANS-SERIF CAPITAL L */ + [0x2143, 0x2143], /* REVERSED SANS-SERIF CAPITAL L */ + [0x2144, 0x2144], /* TURNED SANS-SERIF CAPITAL Y */ + [0x2145, 0x2145], /* DOUBLE-STRUCK ITALIC CAPITAL D */ + [0x2146, 0x2146], /* DOUBLE-STRUCK ITALIC SMALL D */ + [0x2147, 0x2147], /* DOUBLE-STRUCK ITALIC SMALL E */ + [0x2148, 0x2148], /* DOUBLE-STRUCK ITALIC SMALL I */ + [0x2149, 0x2149], /* DOUBLE-STRUCK ITALIC SMALL J */ + [0x214a, 0x214a], /* PROPERTY LINE */ + [0x214b, 0x214b], /* TURNED AMPERSAND */ + [0x214c, 0x214c], /* PER SIGN */ + [0x214d, 0x214d], /* AKTIESELSKAB */ + [0x2132, 0x214e], /* TURNED SMALL F */ + [0x214f, 0x214f], /* SYMBOL FOR SAMARITAN SOURCE */ + [0x2150, 0x2150], /* VULGAR FRACTION ONE SEVENTH */ + [0x2151, 0x2151], /* VULGAR FRACTION ONE NINTH */ + [0x2152, 0x2152], /* VULGAR FRACTION ONE TENTH */ + [0x2153, 0x2153], /* VULGAR FRACTION ONE THIRD (FRACTION ONE THIRD) */ + [0x2154, 0x2154], /* VULGAR FRACTION TWO THIRDS (FRACTION TWO THIRDS) */ + [0x2155, 0x2155], /* VULGAR FRACTION ONE FIFTH (FRACTION ONE FIFTH) */ + [0x2156, 0x2156], /* VULGAR FRACTION TWO FIFTHS (FRACTION TWO FIFTHS) */ + [0x2157, 0x2157], /* VULGAR FRACTION THREE FIFTHS (FRACTION THREE FIFTHS) */ + [0x2158, 0x2158], /* VULGAR FRACTION FOUR FIFTHS (FRACTION FOUR FIFTHS) */ + [0x2159, 0x2159], /* VULGAR FRACTION ONE SIXTH (FRACTION ONE SIXTH) */ + [0x215a, 0x215a], /* VULGAR FRACTION FIVE SIXTHS (FRACTION FIVE SIXTHS) */ + [0x215b, 0x215b], /* VULGAR FRACTION ONE EIGHTH (FRACTION ONE EIGHTH) */ + [0x215c, 0x215c], /* VULGAR FRACTION THREE EIGHTHS (FRACTION THREE EIGHTHS) */ + [0x215d, 0x215d], /* VULGAR FRACTION FIVE EIGHTHS (FRACTION FIVE EIGHTHS) */ + [0x215e, 0x215e], /* VULGAR FRACTION SEVEN EIGHTHS (FRACTION SEVEN EIGHTHS) */ + [0x215f, 0x215f], /* FRACTION NUMERATOR ONE */ + [0x2160, 0x2170], /* ROMAN NUMERAL ONE */ + [0x2161, 0x2171], /* ROMAN NUMERAL TWO */ + [0x2162, 0x2172], /* ROMAN NUMERAL THREE */ + [0x2163, 0x2173], /* ROMAN NUMERAL FOUR */ + [0x2164, 0x2174], /* ROMAN NUMERAL FIVE */ + [0x2165, 0x2175], /* ROMAN NUMERAL SIX */ + [0x2166, 0x2176], /* ROMAN NUMERAL SEVEN */ + [0x2167, 0x2177], /* ROMAN NUMERAL EIGHT */ + [0x2168, 0x2178], /* ROMAN NUMERAL NINE */ + [0x2169, 0x2179], /* ROMAN NUMERAL TEN */ + [0x216a, 0x217a], /* ROMAN NUMERAL ELEVEN */ + [0x216b, 0x217b], /* ROMAN NUMERAL TWELVE */ + [0x216c, 0x217c], /* ROMAN NUMERAL FIFTY */ + [0x216d, 0x217d], /* ROMAN NUMERAL ONE HUNDRED */ + [0x216e, 0x217e], /* ROMAN NUMERAL FIVE HUNDRED */ + [0x216f, 0x217f], /* ROMAN NUMERAL ONE THOUSAND */ + [0x2160, 0x2170], /* SMALL ROMAN NUMERAL ONE */ + [0x2161, 0x2171], /* SMALL ROMAN NUMERAL TWO */ + [0x2162, 0x2172], /* SMALL ROMAN NUMERAL THREE */ + [0x2163, 0x2173], /* SMALL ROMAN NUMERAL FOUR */ + [0x2164, 0x2174], /* SMALL ROMAN NUMERAL FIVE */ + [0x2165, 0x2175], /* SMALL ROMAN NUMERAL SIX */ + [0x2166, 0x2176], /* SMALL ROMAN NUMERAL SEVEN */ + [0x2167, 0x2177], /* SMALL ROMAN NUMERAL EIGHT */ + [0x2168, 0x2178], /* SMALL ROMAN NUMERAL NINE */ + [0x2169, 0x2179], /* SMALL ROMAN NUMERAL TEN */ + [0x216a, 0x217a], /* SMALL ROMAN NUMERAL ELEVEN */ + [0x216b, 0x217b], /* SMALL ROMAN NUMERAL TWELVE */ + [0x216c, 0x217c], /* SMALL ROMAN NUMERAL FIFTY */ + [0x216d, 0x217d], /* SMALL ROMAN NUMERAL ONE HUNDRED */ + [0x216e, 0x217e], /* SMALL ROMAN NUMERAL FIVE HUNDRED */ + [0x216f, 0x217f], /* SMALL ROMAN NUMERAL ONE THOUSAND */ + [0x2180, 0x2180], /* ROMAN NUMERAL ONE THOUSAND C D */ + [0x2181, 0x2181], /* ROMAN NUMERAL FIVE THOUSAND */ + [0x2182, 0x2182], /* ROMAN NUMERAL TEN THOUSAND */ + [0x2183, 0x2184], /* ROMAN NUMERAL REVERSED ONE HUNDRED */ + [0x2183, 0x2184], /* LATIN SMALL LETTER REVERSED C */ + [0x2185, 0x2185], /* ROMAN NUMERAL SIX LATE FORM */ + [0x2186, 0x2186], /* ROMAN NUMERAL FIFTY EARLY FORM */ + [0x2187, 0x2187], /* ROMAN NUMERAL FIFTY THOUSAND */ + [0x2188, 0x2188], /* ROMAN NUMERAL ONE HUNDRED THOUSAND */ + [0x2189, 0x2189], /* VULGAR FRACTION ZERO THIRDS */ + [0x218a, 0x218a], + [0x218b, 0x218b], + [0x218c, 0x218c], + [0x218d, 0x218d], + [0x218e, 0x218e], + [0x218f, 0x218f], + [0x2190, 0x2190], /* LEFTWARDS ARROW (LEFT ARROW) */ + [0x2191, 0x2191], /* UPWARDS ARROW (UP ARROW) */ + [0x2192, 0x2192], /* RIGHTWARDS ARROW (RIGHT ARROW) */ + [0x2193, 0x2193], /* DOWNWARDS ARROW (DOWN ARROW) */ + [0x2194, 0x2194], /* LEFT RIGHT ARROW */ + [0x2195, 0x2195], /* UP DOWN ARROW */ + [0x2196, 0x2196], /* NORTH WEST ARROW (UPPER LEFT ARROW) */ + [0x2197, 0x2197], /* NORTH EAST ARROW (UPPER RIGHT ARROW) */ + [0x2198, 0x2198], /* SOUTH EAST ARROW (LOWER RIGHT ARROW) */ + [0x2199, 0x2199], /* SOUTH WEST ARROW (LOWER LEFT ARROW) */ + [0x219a, 0x219a], /* LEFTWARDS ARROW WITH STROKE (LEFT ARROW WITH STROKE) */ + [0x219b, 0x219b], /* RIGHTWARDS ARROW WITH STROKE (RIGHT ARROW WITH STROKE) */ + [0x219c, 0x219c], /* LEFTWARDS WAVE ARROW (LEFT WAVE ARROW) */ + [0x219d, 0x219d], /* RIGHTWARDS WAVE ARROW (RIGHT WAVE ARROW) */ + [0x219e, 0x219e], /* LEFTWARDS TWO HEADED ARROW (LEFT TWO HEADED ARROW) */ + [0x219f, 0x219f], /* UPWARDS TWO HEADED ARROW (UP TWO HEADED ARROW) */ + [0x21a0, 0x21a0], /* RIGHTWARDS TWO HEADED ARROW (RIGHT TWO HEADED ARROW) */ + [0x21a1, 0x21a1], /* DOWNWARDS TWO HEADED ARROW (DOWN TWO HEADED ARROW) */ + [0x21a2, 0x21a2], /* LEFTWARDS ARROW WITH TAIL (LEFT ARROW WITH TAIL) */ + [0x21a3, 0x21a3], /* RIGHTWARDS ARROW WITH TAIL (RIGHT ARROW WITH TAIL) */ + [0x21a4, 0x21a4], /* LEFTWARDS ARROW FROM BAR (LEFT ARROW FROM BAR) */ + [0x21a5, 0x21a5], /* UPWARDS ARROW FROM BAR (UP ARROW FROM BAR) */ + [0x21a6, 0x21a6], /* RIGHTWARDS ARROW FROM BAR (RIGHT ARROW FROM BAR) */ + [0x21a7, 0x21a7], /* DOWNWARDS ARROW FROM BAR (DOWN ARROW FROM BAR) */ + [0x21a8, 0x21a8], /* UP DOWN ARROW WITH BASE */ + [0x21a9, 0x21a9], /* LEFTWARDS ARROW WITH HOOK (LEFT ARROW WITH HOOK) */ + [0x21aa, 0x21aa], /* RIGHTWARDS ARROW WITH HOOK (RIGHT ARROW WITH HOOK) */ + [0x21ab, 0x21ab], /* LEFTWARDS ARROW WITH LOOP (LEFT ARROW WITH LOOP) */ + [0x21ac, 0x21ac], /* RIGHTWARDS ARROW WITH LOOP (RIGHT ARROW WITH LOOP) */ + [0x21ad, 0x21ad], /* LEFT RIGHT WAVE ARROW */ + [0x21ae, 0x21ae], /* LEFT RIGHT ARROW WITH STROKE */ + [0x21af, 0x21af], /* DOWNWARDS ZIGZAG ARROW (DOWN ZIGZAG ARROW) */ + [0x21b0, 0x21b0], /* UPWARDS ARROW WITH TIP LEFTWARDS (UP ARROW WITH TIP LEFT) */ + [0x21b1, 0x21b1], /* UPWARDS ARROW WITH TIP RIGHTWARDS (UP ARROW WITH TIP RIGHT) */ + [0x21b2, 0x21b2], /* DOWNWARDS ARROW WITH TIP LEFTWARDS (DOWN ARROW WITH TIP LEFT) */ + [0x21b3, 0x21b3], /* DOWNWARDS ARROW WITH TIP RIGHTWARDS (DOWN ARROW WITH TIP RIGHT) */ + [0x21b4, 0x21b4], /* RIGHTWARDS ARROW WITH CORNER DOWNWARDS (RIGHT ARROW WITH CORNER DOWN) */ + [0x21b5, 0x21b5], /* DOWNWARDS ARROW WITH CORNER LEFTWARDS (DOWN ARROW WITH CORNER LEFT) */ + [0x21b6, 0x21b6], /* ANTICLOCKWISE TOP SEMICIRCLE ARROW */ + [0x21b7, 0x21b7], /* CLOCKWISE TOP SEMICIRCLE ARROW */ + [0x21b8, 0x21b8], /* NORTH WEST ARROW TO LONG BAR (UPPER LEFT ARROW TO LONG BAR) */ + [0x21b9, 0x21b9], /* LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR (LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR) */ + [0x21ba, 0x21ba], /* ANTICLOCKWISE OPEN CIRCLE ARROW */ + [0x21bb, 0x21bb], /* CLOCKWISE OPEN CIRCLE ARROW */ + [0x21bc, 0x21bc], /* LEFTWARDS HARPOON WITH BARB UPWARDS (LEFT HARPOON WITH BARB UP) */ + [0x21bd, 0x21bd], /* LEFTWARDS HARPOON WITH BARB DOWNWARDS (LEFT HARPOON WITH BARB DOWN) */ + [0x21be, 0x21be], /* UPWARDS HARPOON WITH BARB RIGHTWARDS (UP HARPOON WITH BARB RIGHT) */ + [0x21bf, 0x21bf], /* UPWARDS HARPOON WITH BARB LEFTWARDS (UP HARPOON WITH BARB LEFT) */ + [0x21c0, 0x21c0], /* RIGHTWARDS HARPOON WITH BARB UPWARDS (RIGHT HARPOON WITH BARB UP) */ + [0x21c1, 0x21c1], /* RIGHTWARDS HARPOON WITH BARB DOWNWARDS (RIGHT HARPOON WITH BARB DOWN) */ + [0x21c2, 0x21c2], /* DOWNWARDS HARPOON WITH BARB RIGHTWARDS (DOWN HARPOON WITH BARB RIGHT) */ + [0x21c3, 0x21c3], /* DOWNWARDS HARPOON WITH BARB LEFTWARDS (DOWN HARPOON WITH BARB LEFT) */ + [0x21c4, 0x21c4], /* RIGHTWARDS ARROW OVER LEFTWARDS ARROW (RIGHT ARROW OVER LEFT ARROW) */ + [0x21c5, 0x21c5], /* UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW (UP ARROW LEFT OF DOWN ARROW) */ + [0x21c6, 0x21c6], /* LEFTWARDS ARROW OVER RIGHTWARDS ARROW (LEFT ARROW OVER RIGHT ARROW) */ + [0x21c7, 0x21c7], /* LEFTWARDS PAIRED ARROWS (LEFT PAIRED ARROWS) */ + [0x21c8, 0x21c8], /* UPWARDS PAIRED ARROWS (UP PAIRED ARROWS) */ + [0x21c9, 0x21c9], /* RIGHTWARDS PAIRED ARROWS (RIGHT PAIRED ARROWS) */ + [0x21ca, 0x21ca], /* DOWNWARDS PAIRED ARROWS (DOWN PAIRED ARROWS) */ + [0x21cb, 0x21cb], /* LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON (LEFT HARPOON OVER RIGHT HARPOON) */ + [0x21cc, 0x21cc], /* RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON (RIGHT HARPOON OVER LEFT HARPOON) */ + [0x21cd, 0x21cd], /* LEFTWARDS DOUBLE ARROW WITH STROKE (LEFT DOUBLE ARROW WITH STROKE) */ + [0x21ce, 0x21ce], /* LEFT RIGHT DOUBLE ARROW WITH STROKE */ + [0x21cf, 0x21cf], /* RIGHTWARDS DOUBLE ARROW WITH STROKE (RIGHT DOUBLE ARROW WITH STROKE) */ + [0x21d0, 0x21d0], /* LEFTWARDS DOUBLE ARROW (LEFT DOUBLE ARROW) */ + [0x21d1, 0x21d1], /* UPWARDS DOUBLE ARROW (UP DOUBLE ARROW) */ + [0x21d2, 0x21d2], /* RIGHTWARDS DOUBLE ARROW (RIGHT DOUBLE ARROW) */ + [0x21d3, 0x21d3], /* DOWNWARDS DOUBLE ARROW (DOWN DOUBLE ARROW) */ + [0x21d4, 0x21d4], /* LEFT RIGHT DOUBLE ARROW */ + [0x21d5, 0x21d5], /* UP DOWN DOUBLE ARROW */ + [0x21d6, 0x21d6], /* NORTH WEST DOUBLE ARROW (UPPER LEFT DOUBLE ARROW) */ + [0x21d7, 0x21d7], /* NORTH EAST DOUBLE ARROW (UPPER RIGHT DOUBLE ARROW) */ + [0x21d8, 0x21d8], /* SOUTH EAST DOUBLE ARROW (LOWER RIGHT DOUBLE ARROW) */ + [0x21d9, 0x21d9], /* SOUTH WEST DOUBLE ARROW (LOWER LEFT DOUBLE ARROW) */ + [0x21da, 0x21da], /* LEFTWARDS TRIPLE ARROW (LEFT TRIPLE ARROW) */ + [0x21db, 0x21db], /* RIGHTWARDS TRIPLE ARROW (RIGHT TRIPLE ARROW) */ + [0x21dc, 0x21dc], /* LEFTWARDS SQUIGGLE ARROW (LEFT SQUIGGLE ARROW) */ + [0x21dd, 0x21dd], /* RIGHTWARDS SQUIGGLE ARROW (RIGHT SQUIGGLE ARROW) */ + [0x21de, 0x21de], /* UPWARDS ARROW WITH DOUBLE STROKE (UP ARROW WITH DOUBLE STROKE) */ + [0x21df, 0x21df], /* DOWNWARDS ARROW WITH DOUBLE STROKE (DOWN ARROW WITH DOUBLE STROKE) */ + [0x21e0, 0x21e0], /* LEFTWARDS DASHED ARROW (LEFT DASHED ARROW) */ + [0x21e1, 0x21e1], /* UPWARDS DASHED ARROW (UP DASHED ARROW) */ + [0x21e2, 0x21e2], /* RIGHTWARDS DASHED ARROW (RIGHT DASHED ARROW) */ + [0x21e3, 0x21e3], /* DOWNWARDS DASHED ARROW (DOWN DASHED ARROW) */ + [0x21e4, 0x21e4], /* LEFTWARDS ARROW TO BAR (LEFT ARROW TO BAR) */ + [0x21e5, 0x21e5], /* RIGHTWARDS ARROW TO BAR (RIGHT ARROW TO BAR) */ + [0x21e6, 0x21e6], /* LEFTWARDS WHITE ARROW (WHITE LEFT ARROW) */ + [0x21e7, 0x21e7], /* UPWARDS WHITE ARROW (WHITE UP ARROW) */ + [0x21e8, 0x21e8], /* RIGHTWARDS WHITE ARROW (WHITE RIGHT ARROW) */ + [0x21e9, 0x21e9], /* DOWNWARDS WHITE ARROW (WHITE DOWN ARROW) */ + [0x21ea, 0x21ea], /* UPWARDS WHITE ARROW FROM BAR (WHITE UP ARROW FROM BAR) */ + [0x21eb, 0x21eb], /* UPWARDS WHITE ARROW ON PEDESTAL */ + [0x21ec, 0x21ec], /* UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR */ + [0x21ed, 0x21ed], /* UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR */ + [0x21ee, 0x21ee], /* UPWARDS WHITE DOUBLE ARROW */ + [0x21ef, 0x21ef], /* UPWARDS WHITE DOUBLE ARROW ON PEDESTAL */ + [0x21f0, 0x21f0], /* RIGHTWARDS WHITE ARROW FROM WALL */ + [0x21f1, 0x21f1], /* NORTH WEST ARROW TO CORNER */ + [0x21f2, 0x21f2], /* SOUTH EAST ARROW TO CORNER */ + [0x21f3, 0x21f3], /* UP DOWN WHITE ARROW */ + [0x21f4, 0x21f4], /* RIGHT ARROW WITH SMALL CIRCLE */ + [0x21f5, 0x21f5], /* DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW */ + [0x21f6, 0x21f6], /* THREE RIGHTWARDS ARROWS */ + [0x21f7, 0x21f7], /* LEFTWARDS ARROW WITH VERTICAL STROKE */ + [0x21f8, 0x21f8], /* RIGHTWARDS ARROW WITH VERTICAL STROKE */ + [0x21f9, 0x21f9], /* LEFT RIGHT ARROW WITH VERTICAL STROKE */ + [0x21fa, 0x21fa], /* LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE */ + [0x21fb, 0x21fb], /* RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE */ + [0x21fc, 0x21fc], /* LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE */ + [0x21fd, 0x21fd], /* LEFTWARDS OPEN-HEADED ARROW */ + [0x21fe, 0x21fe], /* RIGHTWARDS OPEN-HEADED ARROW */ + [0x21ff, 0x21ff], /* LEFT RIGHT OPEN-HEADED ARROW */ + [0x2200, 0x2200], /* FOR ALL */ + [0x2201, 0x2201], /* COMPLEMENT */ + [0x2202, 0x2202], /* PARTIAL DIFFERENTIAL */ + [0x2203, 0x2203], /* THERE EXISTS */ + [0x2204, 0x2204], /* THERE DOES NOT EXIST */ + [0x2205, 0x2205], /* EMPTY SET */ + [0x2206, 0x2206], /* INCREMENT */ + [0x2207, 0x2207], /* NABLA */ + [0x2208, 0x2208], /* ELEMENT OF */ + [0x2209, 0x2209], /* NOT AN ELEMENT OF */ + [0x220a, 0x220a], /* SMALL ELEMENT OF */ + [0x220b, 0x220b], /* CONTAINS AS MEMBER */ + [0x220c, 0x220c], /* DOES NOT CONTAIN AS MEMBER */ + [0x220d, 0x220d], /* SMALL CONTAINS AS MEMBER */ + [0x220e, 0x220e], /* END OF PROOF */ + [0x220f, 0x220f], /* N-ARY PRODUCT */ + [0x2210, 0x2210], /* N-ARY COPRODUCT */ + [0x2211, 0x2211], /* N-ARY SUMMATION */ + [0x2212, 0x2212], /* MINUS SIGN */ + [0x2213, 0x2213], /* MINUS-OR-PLUS SIGN */ + [0x2214, 0x2214], /* DOT PLUS */ + [0x2215, 0x2215], /* DIVISION SLASH */ + [0x2216, 0x2216], /* SET MINUS */ + [0x2217, 0x2217], /* ASTERISK OPERATOR */ + [0x2218, 0x2218], /* RING OPERATOR */ + [0x2219, 0x2219], /* BULLET OPERATOR */ + [0x221a, 0x221a], /* SQUARE ROOT */ + [0x221b, 0x221b], /* CUBE ROOT */ + [0x221c, 0x221c], /* FOURTH ROOT */ + [0x221d, 0x221d], /* PROPORTIONAL TO */ + [0x221e, 0x221e], /* INFINITY */ + [0x221f, 0x221f], /* RIGHT ANGLE */ + [0x2220, 0x2220], /* ANGLE */ + [0x2221, 0x2221], /* MEASURED ANGLE */ + [0x2222, 0x2222], /* SPHERICAL ANGLE */ + [0x2223, 0x2223], /* DIVIDES */ + [0x2224, 0x2224], /* DOES NOT DIVIDE */ + [0x2225, 0x2225], /* PARALLEL TO */ + [0x2226, 0x2226], /* NOT PARALLEL TO */ + [0x2227, 0x2227], /* LOGICAL AND */ + [0x2228, 0x2228], /* LOGICAL OR */ + [0x2229, 0x2229], /* INTERSECTION */ + [0x222a, 0x222a], /* UNION */ + [0x222b, 0x222b], /* INTEGRAL */ + [0x222c, 0x222c], /* DOUBLE INTEGRAL */ + [0x222d, 0x222d], /* TRIPLE INTEGRAL */ + [0x222e, 0x222e], /* CONTOUR INTEGRAL */ + [0x222f, 0x222f], /* SURFACE INTEGRAL */ + [0x2230, 0x2230], /* VOLUME INTEGRAL */ + [0x2231, 0x2231], /* CLOCKWISE INTEGRAL */ + [0x2232, 0x2232], /* CLOCKWISE CONTOUR INTEGRAL */ + [0x2233, 0x2233], /* ANTICLOCKWISE CONTOUR INTEGRAL */ + [0x2234, 0x2234], /* THEREFORE */ + [0x2235, 0x2235], /* BECAUSE */ + [0x2236, 0x2236], /* RATIO */ + [0x2237, 0x2237], /* PROPORTION */ + [0x2238, 0x2238], /* DOT MINUS */ + [0x2239, 0x2239], /* EXCESS */ + [0x223a, 0x223a], /* GEOMETRIC PROPORTION */ + [0x223b, 0x223b], /* HOMOTHETIC */ + [0x223c, 0x223c], /* TILDE OPERATOR */ + [0x223d, 0x223d], /* REVERSED TILDE */ + [0x223e, 0x223e], /* INVERTED LAZY S */ + [0x223f, 0x223f], /* SINE WAVE */ + [0x2240, 0x2240], /* WREATH PRODUCT */ + [0x2241, 0x2241], /* NOT TILDE */ + [0x2242, 0x2242], /* MINUS TILDE */ + [0x2243, 0x2243], /* ASYMPTOTICALLY EQUAL TO */ + [0x2244, 0x2244], /* NOT ASYMPTOTICALLY EQUAL TO */ + [0x2245, 0x2245], /* APPROXIMATELY EQUAL TO */ + [0x2246, 0x2246], /* APPROXIMATELY BUT NOT ACTUALLY EQUAL TO */ + [0x2247, 0x2247], /* NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO */ + [0x2248, 0x2248], /* ALMOST EQUAL TO */ + [0x2249, 0x2249], /* NOT ALMOST EQUAL TO */ + [0x224a, 0x224a], /* ALMOST EQUAL OR EQUAL TO */ + [0x224b, 0x224b], /* TRIPLE TILDE */ + [0x224c, 0x224c], /* ALL EQUAL TO */ + [0x224d, 0x224d], /* EQUIVALENT TO */ + [0x224e, 0x224e], /* GEOMETRICALLY EQUIVALENT TO */ + [0x224f, 0x224f], /* DIFFERENCE BETWEEN */ + [0x2250, 0x2250], /* APPROACHES THE LIMIT */ + [0x2251, 0x2251], /* GEOMETRICALLY EQUAL TO */ + [0x2252, 0x2252], /* APPROXIMATELY EQUAL TO OR THE IMAGE OF */ + [0x2253, 0x2253], /* IMAGE OF OR APPROXIMATELY EQUAL TO */ + [0x2254, 0x2254], /* COLON EQUALS (COLON EQUAL) */ + [0x2255, 0x2255], /* EQUALS COLON (EQUAL COLON) */ + [0x2256, 0x2256], /* RING IN EQUAL TO */ + [0x2257, 0x2257], /* RING EQUAL TO */ + [0x2258, 0x2258], /* CORRESPONDS TO */ + [0x2259, 0x2259], /* ESTIMATES */ + [0x225a, 0x225a], /* EQUIANGULAR TO */ + [0x225b, 0x225b], /* STAR EQUALS */ + [0x225c, 0x225c], /* DELTA EQUAL TO */ + [0x225d, 0x225d], /* EQUAL TO BY DEFINITION */ + [0x225e, 0x225e], /* MEASURED BY */ + [0x225f, 0x225f], /* QUESTIONED EQUAL TO */ + [0x2260, 0x2260], /* NOT EQUAL TO */ + [0x2261, 0x2261], /* IDENTICAL TO */ + [0x2262, 0x2262], /* NOT IDENTICAL TO */ + [0x2263, 0x2263], /* STRICTLY EQUIVALENT TO */ + [0x2264, 0x2264], /* LESS-THAN OR EQUAL TO (LESS THAN OR EQUAL TO) */ + [0x2265, 0x2265], /* GREATER-THAN OR EQUAL TO (GREATER THAN OR EQUAL TO) */ + [0x2266, 0x2266], /* LESS-THAN OVER EQUAL TO (LESS THAN OVER EQUAL TO) */ + [0x2267, 0x2267], /* GREATER-THAN OVER EQUAL TO (GREATER THAN OVER EQUAL TO) */ + [0x2268, 0x2268], /* LESS-THAN BUT NOT EQUAL TO (LESS THAN BUT NOT EQUAL TO) */ + [0x2269, 0x2269], /* GREATER-THAN BUT NOT EQUAL TO (GREATER THAN BUT NOT EQUAL TO) */ + [0x226a, 0x226a], /* MUCH LESS-THAN (MUCH LESS THAN) */ + [0x226b, 0x226b], /* MUCH GREATER-THAN (MUCH GREATER THAN) */ + [0x226c, 0x226c], /* BETWEEN */ + [0x226d, 0x226d], /* NOT EQUIVALENT TO */ + [0x226e, 0x226e], /* NOT LESS-THAN (NOT LESS THAN) */ + [0x226f, 0x226f], /* NOT GREATER-THAN (NOT GREATER THAN) */ + [0x2270, 0x2270], /* NEITHER LESS-THAN NOR EQUAL TO (NEITHER LESS THAN NOR EQUAL TO) */ + [0x2271, 0x2271], /* NEITHER GREATER-THAN NOR EQUAL TO (NEITHER GREATER THAN NOR EQUAL TO) */ + [0x2272, 0x2272], /* LESS-THAN OR EQUIVALENT TO (LESS THAN OR EQUIVALENT TO) */ + [0x2273, 0x2273], /* GREATER-THAN OR EQUIVALENT TO (GREATER THAN OR EQUIVALENT TO) */ + [0x2274, 0x2274], /* NEITHER LESS-THAN NOR EQUIVALENT TO (NEITHER LESS THAN NOR EQUIVALENT TO) */ + [0x2275, 0x2275], /* NEITHER GREATER-THAN NOR EQUIVALENT TO (NEITHER GREATER THAN NOR EQUIVALENT TO) */ + [0x2276, 0x2276], /* LESS-THAN OR GREATER-THAN (LESS THAN OR GREATER THAN) */ + [0x2277, 0x2277], /* GREATER-THAN OR LESS-THAN (GREATER THAN OR LESS THAN) */ + [0x2278, 0x2278], /* NEITHER LESS-THAN NOR GREATER-THAN (NEITHER LESS THAN NOR GREATER THAN) */ + [0x2279, 0x2279], /* NEITHER GREATER-THAN NOR LESS-THAN (NEITHER GREATER THAN NOR LESS THAN) */ + [0x227a, 0x227a], /* PRECEDES */ + [0x227b, 0x227b], /* SUCCEEDS */ + [0x227c, 0x227c], /* PRECEDES OR EQUAL TO */ + [0x227d, 0x227d], /* SUCCEEDS OR EQUAL TO */ + [0x227e, 0x227e], /* PRECEDES OR EQUIVALENT TO */ + [0x227f, 0x227f], /* SUCCEEDS OR EQUIVALENT TO */ + [0x2280, 0x2280], /* DOES NOT PRECEDE */ + [0x2281, 0x2281], /* DOES NOT SUCCEED */ + [0x2282, 0x2282], /* SUBSET OF */ + [0x2283, 0x2283], /* SUPERSET OF */ + [0x2284, 0x2284], /* NOT A SUBSET OF */ + [0x2285, 0x2285], /* NOT A SUPERSET OF */ + [0x2286, 0x2286], /* SUBSET OF OR EQUAL TO */ + [0x2287, 0x2287], /* SUPERSET OF OR EQUAL TO */ + [0x2288, 0x2288], /* NEITHER A SUBSET OF NOR EQUAL TO */ + [0x2289, 0x2289], /* NEITHER A SUPERSET OF NOR EQUAL TO */ + [0x228a, 0x228a], /* SUBSET OF WITH NOT EQUAL TO (SUBSET OF OR NOT EQUAL TO) */ + [0x228b, 0x228b], /* SUPERSET OF WITH NOT EQUAL TO (SUPERSET OF OR NOT EQUAL TO) */ + [0x228c, 0x228c], /* MULTISET */ + [0x228d, 0x228d], /* MULTISET MULTIPLICATION */ + [0x228e, 0x228e], /* MULTISET UNION */ + [0x228f, 0x228f], /* SQUARE IMAGE OF */ + [0x2290, 0x2290], /* SQUARE ORIGINAL OF */ + [0x2291, 0x2291], /* SQUARE IMAGE OF OR EQUAL TO */ + [0x2292, 0x2292], /* SQUARE ORIGINAL OF OR EQUAL TO */ + [0x2293, 0x2293], /* SQUARE CAP */ + [0x2294, 0x2294], /* SQUARE CUP */ + [0x2295, 0x2295], /* CIRCLED PLUS */ + [0x2296, 0x2296], /* CIRCLED MINUS */ + [0x2297, 0x2297], /* CIRCLED TIMES */ + [0x2298, 0x2298], /* CIRCLED DIVISION SLASH */ + [0x2299, 0x2299], /* CIRCLED DOT OPERATOR */ + [0x229a, 0x229a], /* CIRCLED RING OPERATOR */ + [0x229b, 0x229b], /* CIRCLED ASTERISK OPERATOR */ + [0x229c, 0x229c], /* CIRCLED EQUALS */ + [0x229d, 0x229d], /* CIRCLED DASH */ + [0x229e, 0x229e], /* SQUARED PLUS */ + [0x229f, 0x229f], /* SQUARED MINUS */ + [0x22a0, 0x22a0], /* SQUARED TIMES */ + [0x22a1, 0x22a1], /* SQUARED DOT OPERATOR */ + [0x22a2, 0x22a2], /* RIGHT TACK */ + [0x22a3, 0x22a3], /* LEFT TACK */ + [0x22a4, 0x22a4], /* DOWN TACK */ + [0x22a5, 0x22a5], /* UP TACK */ + [0x22a6, 0x22a6], /* ASSERTION */ + [0x22a7, 0x22a7], /* MODELS */ + [0x22a8, 0x22a8], /* TRUE */ + [0x22a9, 0x22a9], /* FORCES */ + [0x22aa, 0x22aa], /* TRIPLE VERTICAL BAR RIGHT TURNSTILE */ + [0x22ab, 0x22ab], /* DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE */ + [0x22ac, 0x22ac], /* DOES NOT PROVE */ + [0x22ad, 0x22ad], /* NOT TRUE */ + [0x22ae, 0x22ae], /* DOES NOT FORCE */ + [0x22af, 0x22af], /* NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE */ + [0x22b0, 0x22b0], /* PRECEDES UNDER RELATION */ + [0x22b1, 0x22b1], /* SUCCEEDS UNDER RELATION */ + [0x22b2, 0x22b2], /* NORMAL SUBGROUP OF */ + [0x22b3, 0x22b3], /* CONTAINS AS NORMAL SUBGROUP */ + [0x22b4, 0x22b4], /* NORMAL SUBGROUP OF OR EQUAL TO */ + [0x22b5, 0x22b5], /* CONTAINS AS NORMAL SUBGROUP OR EQUAL TO */ + [0x22b6, 0x22b6], /* ORIGINAL OF */ + [0x22b7, 0x22b7], /* IMAGE OF */ + [0x22b8, 0x22b8], /* MULTIMAP */ + [0x22b9, 0x22b9], /* HERMITIAN CONJUGATE MATRIX */ + [0x22ba, 0x22ba], /* INTERCALATE */ + [0x22bb, 0x22bb], /* XOR */ + [0x22bc, 0x22bc], /* NAND */ + [0x22bd, 0x22bd], /* NOR */ + [0x22be, 0x22be], /* RIGHT ANGLE WITH ARC */ + [0x22bf, 0x22bf], /* RIGHT TRIANGLE */ + [0x22c0, 0x22c0], /* N-ARY LOGICAL AND */ + [0x22c1, 0x22c1], /* N-ARY LOGICAL OR */ + [0x22c2, 0x22c2], /* N-ARY INTERSECTION */ + [0x22c3, 0x22c3], /* N-ARY UNION */ + [0x22c4, 0x22c4], /* DIAMOND OPERATOR */ + [0x22c5, 0x22c5], /* DOT OPERATOR */ + [0x22c6, 0x22c6], /* STAR OPERATOR */ + [0x22c7, 0x22c7], /* DIVISION TIMES */ + [0x22c8, 0x22c8], /* BOWTIE */ + [0x22c9, 0x22c9], /* LEFT NORMAL FACTOR SEMIDIRECT PRODUCT */ + [0x22ca, 0x22ca], /* RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT */ + [0x22cb, 0x22cb], /* LEFT SEMIDIRECT PRODUCT */ + [0x22cc, 0x22cc], /* RIGHT SEMIDIRECT PRODUCT */ + [0x22cd, 0x22cd], /* REVERSED TILDE EQUALS */ + [0x22ce, 0x22ce], /* CURLY LOGICAL OR */ + [0x22cf, 0x22cf], /* CURLY LOGICAL AND */ + [0x22d0, 0x22d0], /* DOUBLE SUBSET */ + [0x22d1, 0x22d1], /* DOUBLE SUPERSET */ + [0x22d2, 0x22d2], /* DOUBLE INTERSECTION */ + [0x22d3, 0x22d3], /* DOUBLE UNION */ + [0x22d4, 0x22d4], /* PITCHFORK */ + [0x22d5, 0x22d5], /* EQUAL AND PARALLEL TO */ + [0x22d6, 0x22d6], /* LESS-THAN WITH DOT (LESS THAN WITH DOT) */ + [0x22d7, 0x22d7], /* GREATER-THAN WITH DOT (GREATER THAN WITH DOT) */ + [0x22d8, 0x22d8], /* VERY MUCH LESS-THAN (VERY MUCH LESS THAN) */ + [0x22d9, 0x22d9], /* VERY MUCH GREATER-THAN (VERY MUCH GREATER THAN) */ + [0x22da, 0x22da], /* LESS-THAN EQUAL TO OR GREATER-THAN (LESS THAN EQUAL TO OR GREATER THAN) */ + [0x22db, 0x22db], /* GREATER-THAN EQUAL TO OR LESS-THAN (GREATER THAN EQUAL TO OR LESS THAN) */ + [0x22dc, 0x22dc], /* EQUAL TO OR LESS-THAN (EQUAL TO OR LESS THAN) */ + [0x22dd, 0x22dd], /* EQUAL TO OR GREATER-THAN (EQUAL TO OR GREATER THAN) */ + [0x22de, 0x22de], /* EQUAL TO OR PRECEDES */ + [0x22df, 0x22df], /* EQUAL TO OR SUCCEEDS */ + [0x22e0, 0x22e0], /* DOES NOT PRECEDE OR EQUAL */ + [0x22e1, 0x22e1], /* DOES NOT SUCCEED OR EQUAL */ + [0x22e2, 0x22e2], /* NOT SQUARE IMAGE OF OR EQUAL TO */ + [0x22e3, 0x22e3], /* NOT SQUARE ORIGINAL OF OR EQUAL TO */ + [0x22e4, 0x22e4], /* SQUARE IMAGE OF OR NOT EQUAL TO */ + [0x22e5, 0x22e5], /* SQUARE ORIGINAL OF OR NOT EQUAL TO */ + [0x22e6, 0x22e6], /* LESS-THAN BUT NOT EQUIVALENT TO (LESS THAN BUT NOT EQUIVALENT TO) */ + [0x22e7, 0x22e7], /* GREATER-THAN BUT NOT EQUIVALENT TO (GREATER THAN BUT NOT EQUIVALENT TO) */ + [0x22e8, 0x22e8], /* PRECEDES BUT NOT EQUIVALENT TO */ + [0x22e9, 0x22e9], /* SUCCEEDS BUT NOT EQUIVALENT TO */ + [0x22ea, 0x22ea], /* NOT NORMAL SUBGROUP OF */ + [0x22eb, 0x22eb], /* DOES NOT CONTAIN AS NORMAL SUBGROUP */ + [0x22ec, 0x22ec], /* NOT NORMAL SUBGROUP OF OR EQUAL TO */ + [0x22ed, 0x22ed], /* DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL */ + [0x22ee, 0x22ee], /* VERTICAL ELLIPSIS */ + [0x22ef, 0x22ef], /* MIDLINE HORIZONTAL ELLIPSIS */ + [0x22f0, 0x22f0], /* UP RIGHT DIAGONAL ELLIPSIS */ + [0x22f1, 0x22f1], /* DOWN RIGHT DIAGONAL ELLIPSIS */ + [0x22f2, 0x22f2], /* ELEMENT OF WITH LONG HORIZONTAL STROKE */ + [0x22f3, 0x22f3], /* ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + [0x22f4, 0x22f4], /* SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + [0x22f5, 0x22f5], /* ELEMENT OF WITH DOT ABOVE */ + [0x22f6, 0x22f6], /* ELEMENT OF WITH OVERBAR */ + [0x22f7, 0x22f7], /* SMALL ELEMENT OF WITH OVERBAR */ + [0x22f8, 0x22f8], /* ELEMENT OF WITH UNDERBAR */ + [0x22f9, 0x22f9], /* ELEMENT OF WITH TWO HORIZONTAL STROKES */ + [0x22fa, 0x22fa], /* CONTAINS WITH LONG HORIZONTAL STROKE */ + [0x22fb, 0x22fb], /* CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + [0x22fc, 0x22fc], /* SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE */ + [0x22fd, 0x22fd], /* CONTAINS WITH OVERBAR */ + [0x22fe, 0x22fe], /* SMALL CONTAINS WITH OVERBAR */ + [0x22ff, 0x22ff], /* Z NOTATION BAG MEMBERSHIP */ + [0x2300, 0x2300], /* DIAMETER SIGN */ + [0x2301, 0x2301], /* ELECTRIC ARROW */ + [0x2302, 0x2302], /* HOUSE */ + [0x2303, 0x2303], /* UP ARROWHEAD */ + [0x2304, 0x2304], /* DOWN ARROWHEAD */ + [0x2305, 0x2305], /* PROJECTIVE */ + [0x2306, 0x2306], /* PERSPECTIVE */ + [0x2307, 0x2307], /* WAVY LINE */ + [0x2308, 0x2308], /* LEFT CEILING */ + [0x2309, 0x2309], /* RIGHT CEILING */ + [0x230a, 0x230a], /* LEFT FLOOR */ + [0x230b, 0x230b], /* RIGHT FLOOR */ + [0x230c, 0x230c], /* BOTTOM RIGHT CROP */ + [0x230d, 0x230d], /* BOTTOM LEFT CROP */ + [0x230e, 0x230e], /* TOP RIGHT CROP */ + [0x230f, 0x230f], /* TOP LEFT CROP */ + [0x2310, 0x2310], /* REVERSED NOT SIGN */ + [0x2311, 0x2311], /* SQUARE LOZENGE */ + [0x2312, 0x2312], /* ARC */ + [0x2313, 0x2313], /* SEGMENT */ + [0x2314, 0x2314], /* SECTOR */ + [0x2315, 0x2315], /* TELEPHONE RECORDER */ + [0x2316, 0x2316], /* POSITION INDICATOR */ + [0x2317, 0x2317], /* VIEWDATA SQUARE */ + [0x2318, 0x2318], /* PLACE OF INTEREST SIGN (COMMAND KEY) */ + [0x2319, 0x2319], /* TURNED NOT SIGN */ + [0x231a, 0x231a], /* WATCH */ + [0x231b, 0x231b], /* HOURGLASS */ + [0x231c, 0x231c], /* TOP LEFT CORNER */ + [0x231d, 0x231d], /* TOP RIGHT CORNER */ + [0x231e, 0x231e], /* BOTTOM LEFT CORNER */ + [0x231f, 0x231f], /* BOTTOM RIGHT CORNER */ + [0x2320, 0x2320], /* TOP HALF INTEGRAL */ + [0x2321, 0x2321], /* BOTTOM HALF INTEGRAL */ + [0x2322, 0x2322], /* FROWN */ + [0x2323, 0x2323], /* SMILE */ + [0x2324, 0x2324], /* UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS (ENTER KEY) */ + [0x2325, 0x2325], /* OPTION KEY */ + [0x2326, 0x2326], /* ERASE TO THE RIGHT (DELETE TO THE RIGHT KEY) */ + [0x2327, 0x2327], /* X IN A RECTANGLE BOX (CLEAR KEY) */ + [0x2328, 0x2328], /* KEYBOARD */ + [0x2329, 0x2329], /* LEFT-POINTING ANGLE BRACKET (BRA) */ + [0x232a, 0x232a], /* RIGHT-POINTING ANGLE BRACKET (KET) */ + [0x232b, 0x232b], /* ERASE TO THE LEFT (DELETE TO THE LEFT KEY) */ + [0x232c, 0x232c], /* BENZENE RING */ + [0x232d, 0x232d], /* CYLINDRICITY */ + [0x232e, 0x232e], /* ALL AROUND-PROFILE */ + [0x232f, 0x232f], /* SYMMETRY */ + [0x2330, 0x2330], /* TOTAL RUNOUT */ + [0x2331, 0x2331], /* DIMENSION ORIGIN */ + [0x2332, 0x2332], /* CONICAL TAPER */ + [0x2333, 0x2333], /* SLOPE */ + [0x2334, 0x2334], /* COUNTERBORE */ + [0x2335, 0x2335], /* COUNTERSINK */ + [0x2336, 0x2336], /* APL FUNCTIONAL SYMBOL I-BEAM */ + [0x2337, 0x2337], /* APL FUNCTIONAL SYMBOL SQUISH QUAD */ + [0x2338, 0x2338], /* APL FUNCTIONAL SYMBOL QUAD EQUAL */ + [0x2339, 0x2339], /* APL FUNCTIONAL SYMBOL QUAD DIVIDE */ + [0x233a, 0x233a], /* APL FUNCTIONAL SYMBOL QUAD DIAMOND */ + [0x233b, 0x233b], /* APL FUNCTIONAL SYMBOL QUAD JOT */ + [0x233c, 0x233c], /* APL FUNCTIONAL SYMBOL QUAD CIRCLE */ + [0x233d, 0x233d], /* APL FUNCTIONAL SYMBOL CIRCLE STILE */ + [0x233e, 0x233e], /* APL FUNCTIONAL SYMBOL CIRCLE JOT */ + [0x233f, 0x233f], /* APL FUNCTIONAL SYMBOL SLASH BAR */ + [0x2340, 0x2340], /* APL FUNCTIONAL SYMBOL BACKSLASH BAR */ + [0x2341, 0x2341], /* APL FUNCTIONAL SYMBOL QUAD SLASH */ + [0x2342, 0x2342], /* APL FUNCTIONAL SYMBOL QUAD BACKSLASH */ + [0x2343, 0x2343], /* APL FUNCTIONAL SYMBOL QUAD LESS-THAN */ + [0x2344, 0x2344], /* APL FUNCTIONAL SYMBOL QUAD GREATER-THAN */ + [0x2345, 0x2345], /* APL FUNCTIONAL SYMBOL LEFTWARDS VANE */ + [0x2346, 0x2346], /* APL FUNCTIONAL SYMBOL RIGHTWARDS VANE */ + [0x2347, 0x2347], /* APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW */ + [0x2348, 0x2348], /* APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW */ + [0x2349, 0x2349], /* APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH */ + [0x234a, 0x234a], /* APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR */ + [0x234b, 0x234b], /* APL FUNCTIONAL SYMBOL DELTA STILE */ + [0x234c, 0x234c], /* APL FUNCTIONAL SYMBOL QUAD DOWN CARET */ + [0x234d, 0x234d], /* APL FUNCTIONAL SYMBOL QUAD DELTA */ + [0x234e, 0x234e], /* APL FUNCTIONAL SYMBOL DOWN TACK JOT */ + [0x234f, 0x234f], /* APL FUNCTIONAL SYMBOL UPWARDS VANE */ + [0x2350, 0x2350], /* APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW */ + [0x2351, 0x2351], /* APL FUNCTIONAL SYMBOL UP TACK OVERBAR */ + [0x2352, 0x2352], /* APL FUNCTIONAL SYMBOL DEL STILE */ + [0x2353, 0x2353], /* APL FUNCTIONAL SYMBOL QUAD UP CARET */ + [0x2354, 0x2354], /* APL FUNCTIONAL SYMBOL QUAD DEL */ + [0x2355, 0x2355], /* APL FUNCTIONAL SYMBOL UP TACK JOT */ + [0x2356, 0x2356], /* APL FUNCTIONAL SYMBOL DOWNWARDS VANE */ + [0x2357, 0x2357], /* APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW */ + [0x2358, 0x2358], /* APL FUNCTIONAL SYMBOL QUOTE UNDERBAR */ + [0x2359, 0x2359], /* APL FUNCTIONAL SYMBOL DELTA UNDERBAR */ + [0x235a, 0x235a], /* APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR */ + [0x235b, 0x235b], /* APL FUNCTIONAL SYMBOL JOT UNDERBAR */ + [0x235c, 0x235c], /* APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR */ + [0x235d, 0x235d], /* APL FUNCTIONAL SYMBOL UP SHOE JOT */ + [0x235e, 0x235e], /* APL FUNCTIONAL SYMBOL QUOTE QUAD */ + [0x235f, 0x235f], /* APL FUNCTIONAL SYMBOL CIRCLE STAR */ + [0x2360, 0x2360], /* APL FUNCTIONAL SYMBOL QUAD COLON */ + [0x2361, 0x2361], /* APL FUNCTIONAL SYMBOL UP TACK DIAERESIS */ + [0x2362, 0x2362], /* APL FUNCTIONAL SYMBOL DEL DIAERESIS */ + [0x2363, 0x2363], /* APL FUNCTIONAL SYMBOL STAR DIAERESIS */ + [0x2364, 0x2364], /* APL FUNCTIONAL SYMBOL JOT DIAERESIS */ + [0x2365, 0x2365], /* APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS */ + [0x2366, 0x2366], /* APL FUNCTIONAL SYMBOL DOWN SHOE STILE */ + [0x2367, 0x2367], /* APL FUNCTIONAL SYMBOL LEFT SHOE STILE */ + [0x2368, 0x2368], /* APL FUNCTIONAL SYMBOL TILDE DIAERESIS */ + [0x2369, 0x2369], /* APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS */ + [0x236a, 0x236a], /* APL FUNCTIONAL SYMBOL COMMA BAR */ + [0x236b, 0x236b], /* APL FUNCTIONAL SYMBOL DEL TILDE */ + [0x236c, 0x236c], /* APL FUNCTIONAL SYMBOL ZILDE */ + [0x236d, 0x236d], /* APL FUNCTIONAL SYMBOL STILE TILDE */ + [0x236e, 0x236e], /* APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR */ + [0x236f, 0x236f], /* APL FUNCTIONAL SYMBOL QUAD NOT EQUAL */ + [0x2370, 0x2370], /* APL FUNCTIONAL SYMBOL QUAD QUESTION */ + [0x2371, 0x2371], /* APL FUNCTIONAL SYMBOL DOWN CARET TILDE */ + [0x2372, 0x2372], /* APL FUNCTIONAL SYMBOL UP CARET TILDE */ + [0x2373, 0x2373], /* APL FUNCTIONAL SYMBOL IOTA */ + [0x2374, 0x2374], /* APL FUNCTIONAL SYMBOL RHO */ + [0x2375, 0x2375], /* APL FUNCTIONAL SYMBOL OMEGA */ + [0x2376, 0x2376], /* APL FUNCTIONAL SYMBOL ALPHA UNDERBAR */ + [0x2377, 0x2377], /* APL FUNCTIONAL SYMBOL EPSILON UNDERBAR */ + [0x2378, 0x2378], /* APL FUNCTIONAL SYMBOL IOTA UNDERBAR */ + [0x2379, 0x2379], /* APL FUNCTIONAL SYMBOL OMEGA UNDERBAR */ + [0x237a, 0x237a], /* APL FUNCTIONAL SYMBOL ALPHA */ + [0x237b, 0x237b], /* NOT CHECK MARK */ + [0x237c, 0x237c], /* RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW */ + [0x237d, 0x237d], /* SHOULDERED OPEN BOX */ + [0x237e, 0x237e], /* BELL SYMBOL */ + [0x237f, 0x237f], /* VERTICAL LINE WITH MIDDLE DOT */ + [0x2380, 0x2380], /* INSERTION SYMBOL */ + [0x2381, 0x2381], /* CONTINUOUS UNDERLINE SYMBOL */ + [0x2382, 0x2382], /* DISCONTINUOUS UNDERLINE SYMBOL */ + [0x2383, 0x2383], /* EMPHASIS SYMBOL */ + [0x2384, 0x2384], /* COMPOSITION SYMBOL */ + [0x2385, 0x2385], /* WHITE SQUARE WITH CENTRE VERTICAL LINE */ + [0x2386, 0x2386], /* ENTER SYMBOL */ + [0x2387, 0x2387], /* ALTERNATIVE KEY SYMBOL */ + [0x2388, 0x2388], /* HELM SYMBOL */ + [0x2389, 0x2389], /* CIRCLED HORIZONTAL BAR WITH NOTCH */ + [0x238a, 0x238a], /* CIRCLED TRIANGLE DOWN */ + [0x238b, 0x238b], /* BROKEN CIRCLE WITH NORTHWEST ARROW */ + [0x238c, 0x238c], /* UNDO SYMBOL */ + [0x238d, 0x238d], /* MONOSTABLE SYMBOL */ + [0x238e, 0x238e], /* HYSTERESIS SYMBOL */ + [0x238f, 0x238f], /* OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL */ + [0x2390, 0x2390], /* OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL */ + [0x2391, 0x2391], /* PASSIVE-PULL-DOWN-OUTPUT SYMBOL */ + [0x2392, 0x2392], /* PASSIVE-PULL-UP-OUTPUT SYMBOL */ + [0x2393, 0x2393], /* DIRECT CURRENT SYMBOL FORM TWO */ + [0x2394, 0x2394], /* SOFTWARE-FUNCTION SYMBOL */ + [0x2395, 0x2395], /* APL FUNCTIONAL SYMBOL QUAD */ + [0x2396, 0x2396], /* DECIMAL SEPARATOR KEY SYMBOL */ + [0x2397, 0x2397], /* PREVIOUS PAGE */ + [0x2398, 0x2398], /* NEXT PAGE */ + [0x2399, 0x2399], /* PRINT SCREEN SYMBOL */ + [0x239a, 0x239a], /* CLEAR SCREEN SYMBOL */ + [0x239b, 0x239b], /* LEFT PARENTHESIS UPPER HOOK */ + [0x239c, 0x239c], /* LEFT PARENTHESIS EXTENSION */ + [0x239d, 0x239d], /* LEFT PARENTHESIS LOWER HOOK */ + [0x239e, 0x239e], /* RIGHT PARENTHESIS UPPER HOOK */ + [0x239f, 0x239f], /* RIGHT PARENTHESIS EXTENSION */ + [0x23a0, 0x23a0], /* RIGHT PARENTHESIS LOWER HOOK */ + [0x23a1, 0x23a1], /* LEFT SQUARE BRACKET UPPER CORNER */ + [0x23a2, 0x23a2], /* LEFT SQUARE BRACKET EXTENSION */ + [0x23a3, 0x23a3], /* LEFT SQUARE BRACKET LOWER CORNER */ + [0x23a4, 0x23a4], /* RIGHT SQUARE BRACKET UPPER CORNER */ + [0x23a5, 0x23a5], /* RIGHT SQUARE BRACKET EXTENSION */ + [0x23a6, 0x23a6], /* RIGHT SQUARE BRACKET LOWER CORNER */ + [0x23a7, 0x23a7], /* LEFT CURLY BRACKET UPPER HOOK */ + [0x23a8, 0x23a8], /* LEFT CURLY BRACKET MIDDLE PIECE */ + [0x23a9, 0x23a9], /* LEFT CURLY BRACKET LOWER HOOK */ + [0x23aa, 0x23aa], /* CURLY BRACKET EXTENSION */ + [0x23ab, 0x23ab], /* RIGHT CURLY BRACKET UPPER HOOK */ + [0x23ac, 0x23ac], /* RIGHT CURLY BRACKET MIDDLE PIECE */ + [0x23ad, 0x23ad], /* RIGHT CURLY BRACKET LOWER HOOK */ + [0x23ae, 0x23ae], /* INTEGRAL EXTENSION */ + [0x23af, 0x23af], /* HORIZONTAL LINE EXTENSION */ + [0x23b0, 0x23b0], /* UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION */ + [0x23b1, 0x23b1], /* UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION */ + [0x23b2, 0x23b2], /* SUMMATION TOP */ + [0x23b3, 0x23b3], /* SUMMATION BOTTOM */ + [0x23b4, 0x23b4], /* TOP SQUARE BRACKET */ + [0x23b5, 0x23b5], /* BOTTOM SQUARE BRACKET */ + [0x23b6, 0x23b6], /* BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET */ + [0x23b7, 0x23b7], /* RADICAL SYMBOL BOTTOM */ + [0x23b8, 0x23b8], /* LEFT VERTICAL BOX LINE */ + [0x23b9, 0x23b9], /* RIGHT VERTICAL BOX LINE */ + [0x23ba, 0x23ba], /* HORIZONTAL SCAN LINE-1 */ + [0x23bb, 0x23bb], /* HORIZONTAL SCAN LINE-3 */ + [0x23bc, 0x23bc], /* HORIZONTAL SCAN LINE-7 */ + [0x23bd, 0x23bd], /* HORIZONTAL SCAN LINE-9 */ + [0x23be, 0x23be], /* DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT */ + [0x23bf, 0x23bf], /* DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT */ + [0x23c0, 0x23c0], /* DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE */ + [0x23c1, 0x23c1], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE */ + [0x23c2, 0x23c2], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE */ + [0x23c3, 0x23c3], /* DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE */ + [0x23c4, 0x23c4], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE */ + [0x23c5, 0x23c5], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE */ + [0x23c6, 0x23c6], /* DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE */ + [0x23c7, 0x23c7], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE */ + [0x23c8, 0x23c8], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE */ + [0x23c9, 0x23c9], /* DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL */ + [0x23ca, 0x23ca], /* DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL */ + [0x23cb, 0x23cb], /* DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT */ + [0x23cc, 0x23cc], /* DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT */ + [0x23cd, 0x23cd], /* SQUARE FOOT */ + [0x23ce, 0x23ce], /* RETURN SYMBOL */ + [0x23cf, 0x23cf], /* EJECT SYMBOL */ + [0x23d0, 0x23d0], /* VERTICAL LINE EXTENSION */ + [0x23d1, 0x23d1], /* METRICAL BREVE */ + [0x23d2, 0x23d2], /* METRICAL LONG OVER SHORT */ + [0x23d3, 0x23d3], /* METRICAL SHORT OVER LONG */ + [0x23d4, 0x23d4], /* METRICAL LONG OVER TWO SHORTS */ + [0x23d5, 0x23d5], /* METRICAL TWO SHORTS OVER LONG */ + [0x23d6, 0x23d6], /* METRICAL TWO SHORTS JOINED */ + [0x23d7, 0x23d7], /* METRICAL TRISEME */ + [0x23d8, 0x23d8], /* METRICAL TETRASEME */ + [0x23d9, 0x23d9], /* METRICAL PENTASEME */ + [0x23da, 0x23da], /* EARTH GROUND */ + [0x23db, 0x23db], /* FUSE */ + [0x23dc, 0x23dc], /* TOP PARENTHESIS */ + [0x23dd, 0x23dd], /* BOTTOM PARENTHESIS */ + [0x23de, 0x23de], /* TOP CURLY BRACKET */ + [0x23df, 0x23df], /* BOTTOM CURLY BRACKET */ + [0x23e0, 0x23e0], /* TOP TORTOISE SHELL BRACKET */ + [0x23e1, 0x23e1], /* BOTTOM TORTOISE SHELL BRACKET */ + [0x23e2, 0x23e2], /* WHITE TRAPEZIUM */ + [0x23e3, 0x23e3], /* BENZENE RING WITH CIRCLE */ + [0x23e4, 0x23e4], /* STRAIGHTNESS */ + [0x23e5, 0x23e5], /* FLATNESS */ + [0x23e6, 0x23e6], /* AC CURRENT */ + [0x23e7, 0x23e7], /* ELECTRICAL INTERSECTION */ + [0x23e8, 0x23e8], /* DECIMAL EXPONENT SYMBOL */ + [0x23e9, 0x23e9], /* BLACK RIGHT-POINTING DOUBLE TRIANGLE */ + [0x23ea, 0x23ea], /* BLACK LEFT-POINTING DOUBLE TRIANGLE */ + [0x23eb, 0x23eb], /* BLACK UP-POINTING DOUBLE TRIANGLE */ + [0x23ec, 0x23ec], /* BLACK DOWN-POINTING DOUBLE TRIANGLE */ + [0x23ed, 0x23ed], /* BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR */ + [0x23ee, 0x23ee], /* BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR */ + [0x23ef, 0x23ef], /* BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR */ + [0x23f0, 0x23f0], /* ALARM CLOCK */ + [0x23f1, 0x23f1], /* STOPWATCH */ + [0x23f2, 0x23f2], /* TIMER CLOCK */ + [0x23f3, 0x23f3], /* HOURGLASS WITH FLOWING SAND */ + [0x23f4, 0x23f4], + [0x23f5, 0x23f5], + [0x23f6, 0x23f6], + [0x23f7, 0x23f7], + [0x23f8, 0x23f8], + [0x23f9, 0x23f9], + [0x23fa, 0x23fa], + [0x23fb, 0x23fb], + [0x23fc, 0x23fc], + [0x23fd, 0x23fd], + [0x23fe, 0x23fe], + [0x23ff, 0x23ff], + [0x2400, 0x2400], /* SYMBOL FOR NULL (GRAPHIC FOR NULL) */ + [0x2401, 0x2401], /* SYMBOL FOR START OF HEADING (GRAPHIC FOR START OF HEADING) */ + [0x2402, 0x2402], /* SYMBOL FOR START OF TEXT (GRAPHIC FOR START OF TEXT) */ + [0x2403, 0x2403], /* SYMBOL FOR END OF TEXT (GRAPHIC FOR END OF TEXT) */ + [0x2404, 0x2404], /* SYMBOL FOR END OF TRANSMISSION (GRAPHIC FOR END OF TRANSMISSION) */ + [0x2405, 0x2405], /* SYMBOL FOR ENQUIRY (GRAPHIC FOR ENQUIRY) */ + [0x2406, 0x2406], /* SYMBOL FOR ACKNOWLEDGE (GRAPHIC FOR ACKNOWLEDGE) */ + [0x2407, 0x2407], /* SYMBOL FOR BELL (GRAPHIC FOR BELL) */ + [0x2408, 0x2408], /* SYMBOL FOR BACKSPACE (GRAPHIC FOR BACKSPACE) */ + [0x2409, 0x2409], /* SYMBOL FOR HORIZONTAL TABULATION (GRAPHIC FOR HORIZONTAL TABULATION) */ + [0x240a, 0x240a], /* SYMBOL FOR LINE FEED (GRAPHIC FOR LINE FEED) */ + [0x240b, 0x240b], /* SYMBOL FOR VERTICAL TABULATION (GRAPHIC FOR VERTICAL TABULATION) */ + [0x240c, 0x240c], /* SYMBOL FOR FORM FEED (GRAPHIC FOR FORM FEED) */ + [0x240d, 0x240d], /* SYMBOL FOR CARRIAGE RETURN (GRAPHIC FOR CARRIAGE RETURN) */ + [0x240e, 0x240e], /* SYMBOL FOR SHIFT OUT (GRAPHIC FOR SHIFT OUT) */ + [0x240f, 0x240f], /* SYMBOL FOR SHIFT IN (GRAPHIC FOR SHIFT IN) */ + [0x2410, 0x2410], /* SYMBOL FOR DATA LINK ESCAPE (GRAPHIC FOR DATA LINK ESCAPE) */ + [0x2411, 0x2411], /* SYMBOL FOR DEVICE CONTROL ONE (GRAPHIC FOR DEVICE CONTROL ONE) */ + [0x2412, 0x2412], /* SYMBOL FOR DEVICE CONTROL TWO (GRAPHIC FOR DEVICE CONTROL TWO) */ + [0x2413, 0x2413], /* SYMBOL FOR DEVICE CONTROL THREE (GRAPHIC FOR DEVICE CONTROL THREE) */ + [0x2414, 0x2414], /* SYMBOL FOR DEVICE CONTROL FOUR (GRAPHIC FOR DEVICE CONTROL FOUR) */ + [0x2415, 0x2415], /* SYMBOL FOR NEGATIVE ACKNOWLEDGE (GRAPHIC FOR NEGATIVE ACKNOWLEDGE) */ + [0x2416, 0x2416], /* SYMBOL FOR SYNCHRONOUS IDLE (GRAPHIC FOR SYNCHRONOUS IDLE) */ + [0x2417, 0x2417], /* SYMBOL FOR END OF TRANSMISSION BLOCK (GRAPHIC FOR END OF TRANSMISSION BLOCK) */ + [0x2418, 0x2418], /* SYMBOL FOR CANCEL (GRAPHIC FOR CANCEL) */ + [0x2419, 0x2419], /* SYMBOL FOR END OF MEDIUM (GRAPHIC FOR END OF MEDIUM) */ + [0x241a, 0x241a], /* SYMBOL FOR SUBSTITUTE (GRAPHIC FOR SUBSTITUTE) */ + [0x241b, 0x241b], /* SYMBOL FOR ESCAPE (GRAPHIC FOR ESCAPE) */ + [0x241c, 0x241c], /* SYMBOL FOR FILE SEPARATOR (GRAPHIC FOR FILE SEPARATOR) */ + [0x241d, 0x241d], /* SYMBOL FOR GROUP SEPARATOR (GRAPHIC FOR GROUP SEPARATOR) */ + [0x241e, 0x241e], /* SYMBOL FOR RECORD SEPARATOR (GRAPHIC FOR RECORD SEPARATOR) */ + [0x241f, 0x241f], /* SYMBOL FOR UNIT SEPARATOR (GRAPHIC FOR UNIT SEPARATOR) */ + [0x2420, 0x2420], /* SYMBOL FOR SPACE (GRAPHIC FOR SPACE) */ + [0x2421, 0x2421], /* SYMBOL FOR DELETE (GRAPHIC FOR DELETE) */ + [0x2422, 0x2422], /* BLANK SYMBOL (BLANK) */ + [0x2423, 0x2423], /* OPEN BOX */ + [0x2424, 0x2424], /* SYMBOL FOR NEWLINE (GRAPHIC FOR NEWLINE) */ + [0x2425, 0x2425], /* SYMBOL FOR DELETE FORM TWO */ + [0x2426, 0x2426], /* SYMBOL FOR SUBSTITUTE FORM TWO */ + [0x2427, 0x2427], + [0x2428, 0x2428], + [0x2429, 0x2429], + [0x242a, 0x242a], + [0x242b, 0x242b], + [0x242c, 0x242c], + [0x242d, 0x242d], + [0x242e, 0x242e], + [0x242f, 0x242f], + [0x2430, 0x2430], + [0x2431, 0x2431], + [0x2432, 0x2432], + [0x2433, 0x2433], + [0x2434, 0x2434], + [0x2435, 0x2435], + [0x2436, 0x2436], + [0x2437, 0x2437], + [0x2438, 0x2438], + [0x2439, 0x2439], + [0x243a, 0x243a], + [0x243b, 0x243b], + [0x243c, 0x243c], + [0x243d, 0x243d], + [0x243e, 0x243e], + [0x243f, 0x243f], + [0x2440, 0x2440], /* OCR HOOK */ + [0x2441, 0x2441], /* OCR CHAIR */ + [0x2442, 0x2442], /* OCR FORK */ + [0x2443, 0x2443], /* OCR INVERTED FORK */ + [0x2444, 0x2444], /* OCR BELT BUCKLE */ + [0x2445, 0x2445], /* OCR BOW TIE */ + [0x2446, 0x2446], /* OCR BRANCH BANK IDENTIFICATION */ + [0x2447, 0x2447], /* OCR AMOUNT OF CHECK */ + [0x2448, 0x2448], /* OCR DASH */ + [0x2449, 0x2449], /* OCR CUSTOMER ACCOUNT NUMBER */ + [0x244a, 0x244a], /* OCR DOUBLE BACKSLASH */ + [0x244b, 0x244b], + [0x244c, 0x244c], + [0x244d, 0x244d], + [0x244e, 0x244e], + [0x244f, 0x244f], + [0x2450, 0x2450], + [0x2451, 0x2451], + [0x2452, 0x2452], + [0x2453, 0x2453], + [0x2454, 0x2454], + [0x2455, 0x2455], + [0x2456, 0x2456], + [0x2457, 0x2457], + [0x2458, 0x2458], + [0x2459, 0x2459], + [0x245a, 0x245a], + [0x245b, 0x245b], + [0x245c, 0x245c], + [0x245d, 0x245d], + [0x245e, 0x245e], + [0x245f, 0x245f], + [0x2460, 0x2460], /* CIRCLED DIGIT ONE */ + [0x2461, 0x2461], /* CIRCLED DIGIT TWO */ + [0x2462, 0x2462], /* CIRCLED DIGIT THREE */ + [0x2463, 0x2463], /* CIRCLED DIGIT FOUR */ + [0x2464, 0x2464], /* CIRCLED DIGIT FIVE */ + [0x2465, 0x2465], /* CIRCLED DIGIT SIX */ + [0x2466, 0x2466], /* CIRCLED DIGIT SEVEN */ + [0x2467, 0x2467], /* CIRCLED DIGIT EIGHT */ + [0x2468, 0x2468], /* CIRCLED DIGIT NINE */ + [0x2469, 0x2469], /* CIRCLED NUMBER TEN */ + [0x246a, 0x246a], /* CIRCLED NUMBER ELEVEN */ + [0x246b, 0x246b], /* CIRCLED NUMBER TWELVE */ + [0x246c, 0x246c], /* CIRCLED NUMBER THIRTEEN */ + [0x246d, 0x246d], /* CIRCLED NUMBER FOURTEEN */ + [0x246e, 0x246e], /* CIRCLED NUMBER FIFTEEN */ + [0x246f, 0x246f], /* CIRCLED NUMBER SIXTEEN */ + [0x2470, 0x2470], /* CIRCLED NUMBER SEVENTEEN */ + [0x2471, 0x2471], /* CIRCLED NUMBER EIGHTEEN */ + [0x2472, 0x2472], /* CIRCLED NUMBER NINETEEN */ + [0x2473, 0x2473], /* CIRCLED NUMBER TWENTY */ + [0x2474, 0x2474], /* PARENTHESIZED DIGIT ONE */ + [0x2475, 0x2475], /* PARENTHESIZED DIGIT TWO */ + [0x2476, 0x2476], /* PARENTHESIZED DIGIT THREE */ + [0x2477, 0x2477], /* PARENTHESIZED DIGIT FOUR */ + [0x2478, 0x2478], /* PARENTHESIZED DIGIT FIVE */ + [0x2479, 0x2479], /* PARENTHESIZED DIGIT SIX */ + [0x247a, 0x247a], /* PARENTHESIZED DIGIT SEVEN */ + [0x247b, 0x247b], /* PARENTHESIZED DIGIT EIGHT */ + [0x247c, 0x247c], /* PARENTHESIZED DIGIT NINE */ + [0x247d, 0x247d], /* PARENTHESIZED NUMBER TEN */ + [0x247e, 0x247e], /* PARENTHESIZED NUMBER ELEVEN */ + [0x247f, 0x247f], /* PARENTHESIZED NUMBER TWELVE */ + [0x2480, 0x2480], /* PARENTHESIZED NUMBER THIRTEEN */ + [0x2481, 0x2481], /* PARENTHESIZED NUMBER FOURTEEN */ + [0x2482, 0x2482], /* PARENTHESIZED NUMBER FIFTEEN */ + [0x2483, 0x2483], /* PARENTHESIZED NUMBER SIXTEEN */ + [0x2484, 0x2484], /* PARENTHESIZED NUMBER SEVENTEEN */ + [0x2485, 0x2485], /* PARENTHESIZED NUMBER EIGHTEEN */ + [0x2486, 0x2486], /* PARENTHESIZED NUMBER NINETEEN */ + [0x2487, 0x2487], /* PARENTHESIZED NUMBER TWENTY */ + [0x2488, 0x2488], /* DIGIT ONE FULL STOP (DIGIT ONE PERIOD) */ + [0x2489, 0x2489], /* DIGIT TWO FULL STOP (DIGIT TWO PERIOD) */ + [0x248a, 0x248a], /* DIGIT THREE FULL STOP (DIGIT THREE PERIOD) */ + [0x248b, 0x248b], /* DIGIT FOUR FULL STOP (DIGIT FOUR PERIOD) */ + [0x248c, 0x248c], /* DIGIT FIVE FULL STOP (DIGIT FIVE PERIOD) */ + [0x248d, 0x248d], /* DIGIT SIX FULL STOP (DIGIT SIX PERIOD) */ + [0x248e, 0x248e], /* DIGIT SEVEN FULL STOP (DIGIT SEVEN PERIOD) */ + [0x248f, 0x248f], /* DIGIT EIGHT FULL STOP (DIGIT EIGHT PERIOD) */ + [0x2490, 0x2490], /* DIGIT NINE FULL STOP (DIGIT NINE PERIOD) */ + [0x2491, 0x2491], /* NUMBER TEN FULL STOP (NUMBER TEN PERIOD) */ + [0x2492, 0x2492], /* NUMBER ELEVEN FULL STOP (NUMBER ELEVEN PERIOD) */ + [0x2493, 0x2493], /* NUMBER TWELVE FULL STOP (NUMBER TWELVE PERIOD) */ + [0x2494, 0x2494], /* NUMBER THIRTEEN FULL STOP (NUMBER THIRTEEN PERIOD) */ + [0x2495, 0x2495], /* NUMBER FOURTEEN FULL STOP (NUMBER FOURTEEN PERIOD) */ + [0x2496, 0x2496], /* NUMBER FIFTEEN FULL STOP (NUMBER FIFTEEN PERIOD) */ + [0x2497, 0x2497], /* NUMBER SIXTEEN FULL STOP (NUMBER SIXTEEN PERIOD) */ + [0x2498, 0x2498], /* NUMBER SEVENTEEN FULL STOP (NUMBER SEVENTEEN PERIOD) */ + [0x2499, 0x2499], /* NUMBER EIGHTEEN FULL STOP (NUMBER EIGHTEEN PERIOD) */ + [0x249a, 0x249a], /* NUMBER NINETEEN FULL STOP (NUMBER NINETEEN PERIOD) */ + [0x249b, 0x249b], /* NUMBER TWENTY FULL STOP (NUMBER TWENTY PERIOD) */ + [0x249c, 0x249c], /* PARENTHESIZED LATIN SMALL LETTER A */ + [0x249d, 0x249d], /* PARENTHESIZED LATIN SMALL LETTER B */ + [0x249e, 0x249e], /* PARENTHESIZED LATIN SMALL LETTER C */ + [0x249f, 0x249f], /* PARENTHESIZED LATIN SMALL LETTER D */ + [0x24a0, 0x24a0], /* PARENTHESIZED LATIN SMALL LETTER E */ + [0x24a1, 0x24a1], /* PARENTHESIZED LATIN SMALL LETTER F */ + [0x24a2, 0x24a2], /* PARENTHESIZED LATIN SMALL LETTER G */ + [0x24a3, 0x24a3], /* PARENTHESIZED LATIN SMALL LETTER H */ + [0x24a4, 0x24a4], /* PARENTHESIZED LATIN SMALL LETTER I */ + [0x24a5, 0x24a5], /* PARENTHESIZED LATIN SMALL LETTER J */ + [0x24a6, 0x24a6], /* PARENTHESIZED LATIN SMALL LETTER K */ + [0x24a7, 0x24a7], /* PARENTHESIZED LATIN SMALL LETTER L */ + [0x24a8, 0x24a8], /* PARENTHESIZED LATIN SMALL LETTER M */ + [0x24a9, 0x24a9], /* PARENTHESIZED LATIN SMALL LETTER N */ + [0x24aa, 0x24aa], /* PARENTHESIZED LATIN SMALL LETTER O */ + [0x24ab, 0x24ab], /* PARENTHESIZED LATIN SMALL LETTER P */ + [0x24ac, 0x24ac], /* PARENTHESIZED LATIN SMALL LETTER Q */ + [0x24ad, 0x24ad], /* PARENTHESIZED LATIN SMALL LETTER R */ + [0x24ae, 0x24ae], /* PARENTHESIZED LATIN SMALL LETTER S */ + [0x24af, 0x24af], /* PARENTHESIZED LATIN SMALL LETTER T */ + [0x24b0, 0x24b0], /* PARENTHESIZED LATIN SMALL LETTER U */ + [0x24b1, 0x24b1], /* PARENTHESIZED LATIN SMALL LETTER V */ + [0x24b2, 0x24b2], /* PARENTHESIZED LATIN SMALL LETTER W */ + [0x24b3, 0x24b3], /* PARENTHESIZED LATIN SMALL LETTER X */ + [0x24b4, 0x24b4], /* PARENTHESIZED LATIN SMALL LETTER Y */ + [0x24b5, 0x24b5], /* PARENTHESIZED LATIN SMALL LETTER Z */ + [0x24b6, 0x24d0], /* CIRCLED LATIN CAPITAL LETTER A */ + [0x24b7, 0x24d1], /* CIRCLED LATIN CAPITAL LETTER B */ + [0x24b8, 0x24d2], /* CIRCLED LATIN CAPITAL LETTER C */ + [0x24b9, 0x24d3], /* CIRCLED LATIN CAPITAL LETTER D */ + [0x24ba, 0x24d4], /* CIRCLED LATIN CAPITAL LETTER E */ + [0x24bb, 0x24d5], /* CIRCLED LATIN CAPITAL LETTER F */ + [0x24bc, 0x24d6], /* CIRCLED LATIN CAPITAL LETTER G */ + [0x24bd, 0x24d7], /* CIRCLED LATIN CAPITAL LETTER H */ + [0x24be, 0x24d8], /* CIRCLED LATIN CAPITAL LETTER I */ + [0x24bf, 0x24d9], /* CIRCLED LATIN CAPITAL LETTER J */ + [0x24c0, 0x24da], /* CIRCLED LATIN CAPITAL LETTER K */ + [0x24c1, 0x24db], /* CIRCLED LATIN CAPITAL LETTER L */ + [0x24c2, 0x24dc], /* CIRCLED LATIN CAPITAL LETTER M */ + [0x24c3, 0x24dd], /* CIRCLED LATIN CAPITAL LETTER N */ + [0x24c4, 0x24de], /* CIRCLED LATIN CAPITAL LETTER O */ + [0x24c5, 0x24df], /* CIRCLED LATIN CAPITAL LETTER P */ + [0x24c6, 0x24e0], /* CIRCLED LATIN CAPITAL LETTER Q */ + [0x24c7, 0x24e1], /* CIRCLED LATIN CAPITAL LETTER R */ + [0x24c8, 0x24e2], /* CIRCLED LATIN CAPITAL LETTER S */ + [0x24c9, 0x24e3], /* CIRCLED LATIN CAPITAL LETTER T */ + [0x24ca, 0x24e4], /* CIRCLED LATIN CAPITAL LETTER U */ + [0x24cb, 0x24e5], /* CIRCLED LATIN CAPITAL LETTER V */ + [0x24cc, 0x24e6], /* CIRCLED LATIN CAPITAL LETTER W */ + [0x24cd, 0x24e7], /* CIRCLED LATIN CAPITAL LETTER X */ + [0x24ce, 0x24e8], /* CIRCLED LATIN CAPITAL LETTER Y */ + [0x24cf, 0x24e9], /* CIRCLED LATIN CAPITAL LETTER Z */ + [0x24b6, 0x24d0], /* CIRCLED LATIN SMALL LETTER A */ + [0x24b7, 0x24d1], /* CIRCLED LATIN SMALL LETTER B */ + [0x24b8, 0x24d2], /* CIRCLED LATIN SMALL LETTER C */ + [0x24b9, 0x24d3], /* CIRCLED LATIN SMALL LETTER D */ + [0x24ba, 0x24d4], /* CIRCLED LATIN SMALL LETTER E */ + [0x24bb, 0x24d5], /* CIRCLED LATIN SMALL LETTER F */ + [0x24bc, 0x24d6], /* CIRCLED LATIN SMALL LETTER G */ + [0x24bd, 0x24d7], /* CIRCLED LATIN SMALL LETTER H */ + [0x24be, 0x24d8], /* CIRCLED LATIN SMALL LETTER I */ + [0x24bf, 0x24d9], /* CIRCLED LATIN SMALL LETTER J */ + [0x24c0, 0x24da], /* CIRCLED LATIN SMALL LETTER K */ + [0x24c1, 0x24db], /* CIRCLED LATIN SMALL LETTER L */ + [0x24c2, 0x24dc], /* CIRCLED LATIN SMALL LETTER M */ + [0x24c3, 0x24dd], /* CIRCLED LATIN SMALL LETTER N */ + [0x24c4, 0x24de], /* CIRCLED LATIN SMALL LETTER O */ + [0x24c5, 0x24df], /* CIRCLED LATIN SMALL LETTER P */ + [0x24c6, 0x24e0], /* CIRCLED LATIN SMALL LETTER Q */ + [0x24c7, 0x24e1], /* CIRCLED LATIN SMALL LETTER R */ + [0x24c8, 0x24e2], /* CIRCLED LATIN SMALL LETTER S */ + [0x24c9, 0x24e3], /* CIRCLED LATIN SMALL LETTER T */ + [0x24ca, 0x24e4], /* CIRCLED LATIN SMALL LETTER U */ + [0x24cb, 0x24e5], /* CIRCLED LATIN SMALL LETTER V */ + [0x24cc, 0x24e6], /* CIRCLED LATIN SMALL LETTER W */ + [0x24cd, 0x24e7], /* CIRCLED LATIN SMALL LETTER X */ + [0x24ce, 0x24e8], /* CIRCLED LATIN SMALL LETTER Y */ + [0x24cf, 0x24e9], /* CIRCLED LATIN SMALL LETTER Z */ + [0x24ea, 0x24ea], /* CIRCLED DIGIT ZERO */ + [0x24eb, 0x24eb], /* NEGATIVE CIRCLED NUMBER ELEVEN */ + [0x24ec, 0x24ec], /* NEGATIVE CIRCLED NUMBER TWELVE */ + [0x24ed, 0x24ed], /* NEGATIVE CIRCLED NUMBER THIRTEEN */ + [0x24ee, 0x24ee], /* NEGATIVE CIRCLED NUMBER FOURTEEN */ + [0x24ef, 0x24ef], /* NEGATIVE CIRCLED NUMBER FIFTEEN */ + [0x24f0, 0x24f0], /* NEGATIVE CIRCLED NUMBER SIXTEEN */ + [0x24f1, 0x24f1], /* NEGATIVE CIRCLED NUMBER SEVENTEEN */ + [0x24f2, 0x24f2], /* NEGATIVE CIRCLED NUMBER EIGHTEEN */ + [0x24f3, 0x24f3], /* NEGATIVE CIRCLED NUMBER NINETEEN */ + [0x24f4, 0x24f4], /* NEGATIVE CIRCLED NUMBER TWENTY */ + [0x24f5, 0x24f5], /* DOUBLE CIRCLED DIGIT ONE */ + [0x24f6, 0x24f6], /* DOUBLE CIRCLED DIGIT TWO */ + [0x24f7, 0x24f7], /* DOUBLE CIRCLED DIGIT THREE */ + [0x24f8, 0x24f8], /* DOUBLE CIRCLED DIGIT FOUR */ + [0x24f9, 0x24f9], /* DOUBLE CIRCLED DIGIT FIVE */ + [0x24fa, 0x24fa], /* DOUBLE CIRCLED DIGIT SIX */ + [0x24fb, 0x24fb], /* DOUBLE CIRCLED DIGIT SEVEN */ + [0x24fc, 0x24fc], /* DOUBLE CIRCLED DIGIT EIGHT */ + [0x24fd, 0x24fd], /* DOUBLE CIRCLED DIGIT NINE */ + [0x24fe, 0x24fe], /* DOUBLE CIRCLED NUMBER TEN */ + [0x24ff, 0x24ff], /* NEGATIVE CIRCLED DIGIT ZERO */ + [0x2500, 0x2500], /* BOX DRAWINGS LIGHT HORIZONTAL (FORMS LIGHT HORIZONTAL) */ + [0x2501, 0x2501], /* BOX DRAWINGS HEAVY HORIZONTAL (FORMS HEAVY HORIZONTAL) */ + [0x2502, 0x2502], /* BOX DRAWINGS LIGHT VERTICAL (FORMS LIGHT VERTICAL) */ + [0x2503, 0x2503], /* BOX DRAWINGS HEAVY VERTICAL (FORMS HEAVY VERTICAL) */ + [0x2504, 0x2504], /* BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL (FORMS LIGHT TRIPLE DASH HORIZONTAL) */ + [0x2505, 0x2505], /* BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL (FORMS HEAVY TRIPLE DASH HORIZONTAL) */ + [0x2506, 0x2506], /* BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL (FORMS LIGHT TRIPLE DASH VERTICAL) */ + [0x2507, 0x2507], /* BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL (FORMS HEAVY TRIPLE DASH VERTICAL) */ + [0x2508, 0x2508], /* BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL (FORMS LIGHT QUADRUPLE DASH HORIZONTAL) */ + [0x2509, 0x2509], /* BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL (FORMS HEAVY QUADRUPLE DASH HORIZONTAL) */ + [0x250a, 0x250a], /* BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL (FORMS LIGHT QUADRUPLE DASH VERTICAL) */ + [0x250b, 0x250b], /* BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL (FORMS HEAVY QUADRUPLE DASH VERTICAL) */ + [0x250c, 0x250c], /* BOX DRAWINGS LIGHT DOWN AND RIGHT (FORMS LIGHT DOWN AND RIGHT) */ + [0x250d, 0x250d], /* BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY (FORMS DOWN LIGHT AND RIGHT HEAVY) */ + [0x250e, 0x250e], /* BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT (FORMS DOWN HEAVY AND RIGHT LIGHT) */ + [0x250f, 0x250f], /* BOX DRAWINGS HEAVY DOWN AND RIGHT (FORMS HEAVY DOWN AND RIGHT) */ + [0x2510, 0x2510], /* BOX DRAWINGS LIGHT DOWN AND LEFT (FORMS LIGHT DOWN AND LEFT) */ + [0x2511, 0x2511], /* BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY (FORMS DOWN LIGHT AND LEFT HEAVY) */ + [0x2512, 0x2512], /* BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT (FORMS DOWN HEAVY AND LEFT LIGHT) */ + [0x2513, 0x2513], /* BOX DRAWINGS HEAVY DOWN AND LEFT (FORMS HEAVY DOWN AND LEFT) */ + [0x2514, 0x2514], /* BOX DRAWINGS LIGHT UP AND RIGHT (FORMS LIGHT UP AND RIGHT) */ + [0x2515, 0x2515], /* BOX DRAWINGS UP LIGHT AND RIGHT HEAVY (FORMS UP LIGHT AND RIGHT HEAVY) */ + [0x2516, 0x2516], /* BOX DRAWINGS UP HEAVY AND RIGHT LIGHT (FORMS UP HEAVY AND RIGHT LIGHT) */ + [0x2517, 0x2517], /* BOX DRAWINGS HEAVY UP AND RIGHT (FORMS HEAVY UP AND RIGHT) */ + [0x2518, 0x2518], /* BOX DRAWINGS LIGHT UP AND LEFT (FORMS LIGHT UP AND LEFT) */ + [0x2519, 0x2519], /* BOX DRAWINGS UP LIGHT AND LEFT HEAVY (FORMS UP LIGHT AND LEFT HEAVY) */ + [0x251a, 0x251a], /* BOX DRAWINGS UP HEAVY AND LEFT LIGHT (FORMS UP HEAVY AND LEFT LIGHT) */ + [0x251b, 0x251b], /* BOX DRAWINGS HEAVY UP AND LEFT (FORMS HEAVY UP AND LEFT) */ + [0x251c, 0x251c], /* BOX DRAWINGS LIGHT VERTICAL AND RIGHT (FORMS LIGHT VERTICAL AND RIGHT) */ + [0x251d, 0x251d], /* BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY (FORMS VERTICAL LIGHT AND RIGHT HEAVY) */ + [0x251e, 0x251e], /* BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT (FORMS UP HEAVY AND RIGHT DOWN LIGHT) */ + [0x251f, 0x251f], /* BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT (FORMS DOWN HEAVY AND RIGHT UP LIGHT) */ + [0x2520, 0x2520], /* BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT (FORMS VERTICAL HEAVY AND RIGHT LIGHT) */ + [0x2521, 0x2521], /* BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY (FORMS DOWN LIGHT AND RIGHT UP HEAVY) */ + [0x2522, 0x2522], /* BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY (FORMS UP LIGHT AND RIGHT DOWN HEAVY) */ + [0x2523, 0x2523], /* BOX DRAWINGS HEAVY VERTICAL AND RIGHT (FORMS HEAVY VERTICAL AND RIGHT) */ + [0x2524, 0x2524], /* BOX DRAWINGS LIGHT VERTICAL AND LEFT (FORMS LIGHT VERTICAL AND LEFT) */ + [0x2525, 0x2525], /* BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY (FORMS VERTICAL LIGHT AND LEFT HEAVY) */ + [0x2526, 0x2526], /* BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT (FORMS UP HEAVY AND LEFT DOWN LIGHT) */ + [0x2527, 0x2527], /* BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT (FORMS DOWN HEAVY AND LEFT UP LIGHT) */ + [0x2528, 0x2528], /* BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT (FORMS VERTICAL HEAVY AND LEFT LIGHT) */ + [0x2529, 0x2529], /* BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY (FORMS DOWN LIGHT AND LEFT UP HEAVY) */ + [0x252a, 0x252a], /* BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY (FORMS UP LIGHT AND LEFT DOWN HEAVY) */ + [0x252b, 0x252b], /* BOX DRAWINGS HEAVY VERTICAL AND LEFT (FORMS HEAVY VERTICAL AND LEFT) */ + [0x252c, 0x252c], /* BOX DRAWINGS LIGHT DOWN AND HORIZONTAL (FORMS LIGHT DOWN AND HORIZONTAL) */ + [0x252d, 0x252d], /* BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT (FORMS LEFT HEAVY AND RIGHT DOWN LIGHT) */ + [0x252e, 0x252e], /* BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT (FORMS RIGHT HEAVY AND LEFT DOWN LIGHT) */ + [0x252f, 0x252f], /* BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY (FORMS DOWN LIGHT AND HORIZONTAL HEAVY) */ + [0x2530, 0x2530], /* BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT (FORMS DOWN HEAVY AND HORIZONTAL LIGHT) */ + [0x2531, 0x2531], /* BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY (FORMS RIGHT LIGHT AND LEFT DOWN HEAVY) */ + [0x2532, 0x2532], /* BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY (FORMS LEFT LIGHT AND RIGHT DOWN HEAVY) */ + [0x2533, 0x2533], /* BOX DRAWINGS HEAVY DOWN AND HORIZONTAL (FORMS HEAVY DOWN AND HORIZONTAL) */ + [0x2534, 0x2534], /* BOX DRAWINGS LIGHT UP AND HORIZONTAL (FORMS LIGHT UP AND HORIZONTAL) */ + [0x2535, 0x2535], /* BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT (FORMS LEFT HEAVY AND RIGHT UP LIGHT) */ + [0x2536, 0x2536], /* BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT (FORMS RIGHT HEAVY AND LEFT UP LIGHT) */ + [0x2537, 0x2537], /* BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY (FORMS UP LIGHT AND HORIZONTAL HEAVY) */ + [0x2538, 0x2538], /* BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT (FORMS UP HEAVY AND HORIZONTAL LIGHT) */ + [0x2539, 0x2539], /* BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY (FORMS RIGHT LIGHT AND LEFT UP HEAVY) */ + [0x253a, 0x253a], /* BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY (FORMS LEFT LIGHT AND RIGHT UP HEAVY) */ + [0x253b, 0x253b], /* BOX DRAWINGS HEAVY UP AND HORIZONTAL (FORMS HEAVY UP AND HORIZONTAL) */ + [0x253c, 0x253c], /* BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL (FORMS LIGHT VERTICAL AND HORIZONTAL) */ + [0x253d, 0x253d], /* BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT (FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT) */ + [0x253e, 0x253e], /* BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT (FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT) */ + [0x253f, 0x253f], /* BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY (FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY) */ + [0x2540, 0x2540], /* BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT (FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT) */ + [0x2541, 0x2541], /* BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT (FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT) */ + [0x2542, 0x2542], /* BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT (FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT) */ + [0x2543, 0x2543], /* BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT (FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT) */ + [0x2544, 0x2544], /* BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT (FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT) */ + [0x2545, 0x2545], /* BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT (FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT) */ + [0x2546, 0x2546], /* BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT (FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT) */ + [0x2547, 0x2547], /* BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY (FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY) */ + [0x2548, 0x2548], /* BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY (FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY) */ + [0x2549, 0x2549], /* BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY (FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY) */ + [0x254a, 0x254a], /* BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY (FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY) */ + [0x254b, 0x254b], /* BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL (FORMS HEAVY VERTICAL AND HORIZONTAL) */ + [0x254c, 0x254c], /* BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL (FORMS LIGHT DOUBLE DASH HORIZONTAL) */ + [0x254d, 0x254d], /* BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL (FORMS HEAVY DOUBLE DASH HORIZONTAL) */ + [0x254e, 0x254e], /* BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL (FORMS LIGHT DOUBLE DASH VERTICAL) */ + [0x254f, 0x254f], /* BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL (FORMS HEAVY DOUBLE DASH VERTICAL) */ + [0x2550, 0x2550], /* BOX DRAWINGS DOUBLE HORIZONTAL (FORMS DOUBLE HORIZONTAL) */ + [0x2551, 0x2551], /* BOX DRAWINGS DOUBLE VERTICAL (FORMS DOUBLE VERTICAL) */ + [0x2552, 0x2552], /* BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE (FORMS DOWN SINGLE AND RIGHT DOUBLE) */ + [0x2553, 0x2553], /* BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE (FORMS DOWN DOUBLE AND RIGHT SINGLE) */ + [0x2554, 0x2554], /* BOX DRAWINGS DOUBLE DOWN AND RIGHT (FORMS DOUBLE DOWN AND RIGHT) */ + [0x2555, 0x2555], /* BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE (FORMS DOWN SINGLE AND LEFT DOUBLE) */ + [0x2556, 0x2556], /* BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE (FORMS DOWN DOUBLE AND LEFT SINGLE) */ + [0x2557, 0x2557], /* BOX DRAWINGS DOUBLE DOWN AND LEFT (FORMS DOUBLE DOWN AND LEFT) */ + [0x2558, 0x2558], /* BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE (FORMS UP SINGLE AND RIGHT DOUBLE) */ + [0x2559, 0x2559], /* BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE (FORMS UP DOUBLE AND RIGHT SINGLE) */ + [0x255a, 0x255a], /* BOX DRAWINGS DOUBLE UP AND RIGHT (FORMS DOUBLE UP AND RIGHT) */ + [0x255b, 0x255b], /* BOX DRAWINGS UP SINGLE AND LEFT DOUBLE (FORMS UP SINGLE AND LEFT DOUBLE) */ + [0x255c, 0x255c], /* BOX DRAWINGS UP DOUBLE AND LEFT SINGLE (FORMS UP DOUBLE AND LEFT SINGLE) */ + [0x255d, 0x255d], /* BOX DRAWINGS DOUBLE UP AND LEFT (FORMS DOUBLE UP AND LEFT) */ + [0x255e, 0x255e], /* BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE (FORMS VERTICAL SINGLE AND RIGHT DOUBLE) */ + [0x255f, 0x255f], /* BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE (FORMS VERTICAL DOUBLE AND RIGHT SINGLE) */ + [0x2560, 0x2560], /* BOX DRAWINGS DOUBLE VERTICAL AND RIGHT (FORMS DOUBLE VERTICAL AND RIGHT) */ + [0x2561, 0x2561], /* BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE (FORMS VERTICAL SINGLE AND LEFT DOUBLE) */ + [0x2562, 0x2562], /* BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE (FORMS VERTICAL DOUBLE AND LEFT SINGLE) */ + [0x2563, 0x2563], /* BOX DRAWINGS DOUBLE VERTICAL AND LEFT (FORMS DOUBLE VERTICAL AND LEFT) */ + [0x2564, 0x2564], /* BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE (FORMS DOWN SINGLE AND HORIZONTAL DOUBLE) */ + [0x2565, 0x2565], /* BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE (FORMS DOWN DOUBLE AND HORIZONTAL SINGLE) */ + [0x2566, 0x2566], /* BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL (FORMS DOUBLE DOWN AND HORIZONTAL) */ + [0x2567, 0x2567], /* BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE (FORMS UP SINGLE AND HORIZONTAL DOUBLE) */ + [0x2568, 0x2568], /* BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE (FORMS UP DOUBLE AND HORIZONTAL SINGLE) */ + [0x2569, 0x2569], /* BOX DRAWINGS DOUBLE UP AND HORIZONTAL (FORMS DOUBLE UP AND HORIZONTAL) */ + [0x256a, 0x256a], /* BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE (FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE) */ + [0x256b, 0x256b], /* BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE (FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE) */ + [0x256c, 0x256c], /* BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL (FORMS DOUBLE VERTICAL AND HORIZONTAL) */ + [0x256d, 0x256d], /* BOX DRAWINGS LIGHT ARC DOWN AND RIGHT (FORMS LIGHT ARC DOWN AND RIGHT) */ + [0x256e, 0x256e], /* BOX DRAWINGS LIGHT ARC DOWN AND LEFT (FORMS LIGHT ARC DOWN AND LEFT) */ + [0x256f, 0x256f], /* BOX DRAWINGS LIGHT ARC UP AND LEFT (FORMS LIGHT ARC UP AND LEFT) */ + [0x2570, 0x2570], /* BOX DRAWINGS LIGHT ARC UP AND RIGHT (FORMS LIGHT ARC UP AND RIGHT) */ + [0x2571, 0x2571], /* BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT (FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT) */ + [0x2572, 0x2572], /* BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT (FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT) */ + [0x2573, 0x2573], /* BOX DRAWINGS LIGHT DIAGONAL CROSS (FORMS LIGHT DIAGONAL CROSS) */ + [0x2574, 0x2574], /* BOX DRAWINGS LIGHT LEFT (FORMS LIGHT LEFT) */ + [0x2575, 0x2575], /* BOX DRAWINGS LIGHT UP (FORMS LIGHT UP) */ + [0x2576, 0x2576], /* BOX DRAWINGS LIGHT RIGHT (FORMS LIGHT RIGHT) */ + [0x2577, 0x2577], /* BOX DRAWINGS LIGHT DOWN (FORMS LIGHT DOWN) */ + [0x2578, 0x2578], /* BOX DRAWINGS HEAVY LEFT (FORMS HEAVY LEFT) */ + [0x2579, 0x2579], /* BOX DRAWINGS HEAVY UP (FORMS HEAVY UP) */ + [0x257a, 0x257a], /* BOX DRAWINGS HEAVY RIGHT (FORMS HEAVY RIGHT) */ + [0x257b, 0x257b], /* BOX DRAWINGS HEAVY DOWN (FORMS HEAVY DOWN) */ + [0x257c, 0x257c], /* BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT (FORMS LIGHT LEFT AND HEAVY RIGHT) */ + [0x257d, 0x257d], /* BOX DRAWINGS LIGHT UP AND HEAVY DOWN (FORMS LIGHT UP AND HEAVY DOWN) */ + [0x257e, 0x257e], /* BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT (FORMS HEAVY LEFT AND LIGHT RIGHT) */ + [0x257f, 0x257f], /* BOX DRAWINGS HEAVY UP AND LIGHT DOWN (FORMS HEAVY UP AND LIGHT DOWN) */ + [0x2580, 0x2580], /* UPPER HALF BLOCK */ + [0x2581, 0x2581], /* LOWER ONE EIGHTH BLOCK */ + [0x2582, 0x2582], /* LOWER ONE QUARTER BLOCK */ + [0x2583, 0x2583], /* LOWER THREE EIGHTHS BLOCK */ + [0x2584, 0x2584], /* LOWER HALF BLOCK */ + [0x2585, 0x2585], /* LOWER FIVE EIGHTHS BLOCK */ + [0x2586, 0x2586], /* LOWER THREE QUARTERS BLOCK (LOWER THREE QUARTER BLOCK) */ + [0x2587, 0x2587], /* LOWER SEVEN EIGHTHS BLOCK */ + [0x2588, 0x2588], /* FULL BLOCK */ + [0x2589, 0x2589], /* LEFT SEVEN EIGHTHS BLOCK */ + [0x258a, 0x258a], /* LEFT THREE QUARTERS BLOCK (LEFT THREE QUARTER BLOCK) */ + [0x258b, 0x258b], /* LEFT FIVE EIGHTHS BLOCK */ + [0x258c, 0x258c], /* LEFT HALF BLOCK */ + [0x258d, 0x258d], /* LEFT THREE EIGHTHS BLOCK */ + [0x258e, 0x258e], /* LEFT ONE QUARTER BLOCK */ + [0x258f, 0x258f], /* LEFT ONE EIGHTH BLOCK */ + [0x2590, 0x2590], /* RIGHT HALF BLOCK */ + [0x2591, 0x2591], /* LIGHT SHADE */ + [0x2592, 0x2592], /* MEDIUM SHADE */ + [0x2593, 0x2593], /* DARK SHADE */ + [0x2594, 0x2594], /* UPPER ONE EIGHTH BLOCK */ + [0x2595, 0x2595], /* RIGHT ONE EIGHTH BLOCK */ + [0x2596, 0x2596], /* QUADRANT LOWER LEFT */ + [0x2597, 0x2597], /* QUADRANT LOWER RIGHT */ + [0x2598, 0x2598], /* QUADRANT UPPER LEFT */ + [0x2599, 0x2599], /* QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT */ + [0x259a, 0x259a], /* QUADRANT UPPER LEFT AND LOWER RIGHT */ + [0x259b, 0x259b], /* QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT */ + [0x259c, 0x259c], /* QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT */ + [0x259d, 0x259d], /* QUADRANT UPPER RIGHT */ + [0x259e, 0x259e], /* QUADRANT UPPER RIGHT AND LOWER LEFT */ + [0x259f, 0x259f], /* QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT */ + [0x25a0, 0x25a0], /* BLACK SQUARE */ + [0x25a1, 0x25a1], /* WHITE SQUARE */ + [0x25a2, 0x25a2], /* WHITE SQUARE WITH ROUNDED CORNERS */ + [0x25a3, 0x25a3], /* WHITE SQUARE CONTAINING BLACK SMALL SQUARE */ + [0x25a4, 0x25a4], /* SQUARE WITH HORIZONTAL FILL */ + [0x25a5, 0x25a5], /* SQUARE WITH VERTICAL FILL */ + [0x25a6, 0x25a6], /* SQUARE WITH ORTHOGONAL CROSSHATCH FILL */ + [0x25a7, 0x25a7], /* SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL */ + [0x25a8, 0x25a8], /* SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL */ + [0x25a9, 0x25a9], /* SQUARE WITH DIAGONAL CROSSHATCH FILL */ + [0x25aa, 0x25aa], /* BLACK SMALL SQUARE */ + [0x25ab, 0x25ab], /* WHITE SMALL SQUARE */ + [0x25ac, 0x25ac], /* BLACK RECTANGLE */ + [0x25ad, 0x25ad], /* WHITE RECTANGLE */ + [0x25ae, 0x25ae], /* BLACK VERTICAL RECTANGLE */ + [0x25af, 0x25af], /* WHITE VERTICAL RECTANGLE */ + [0x25b0, 0x25b0], /* BLACK PARALLELOGRAM */ + [0x25b1, 0x25b1], /* WHITE PARALLELOGRAM */ + [0x25b2, 0x25b2], /* BLACK UP-POINTING TRIANGLE (BLACK UP POINTING TRIANGLE) */ + [0x25b3, 0x25b3], /* WHITE UP-POINTING TRIANGLE (WHITE UP POINTING TRIANGLE) */ + [0x25b4, 0x25b4], /* BLACK UP-POINTING SMALL TRIANGLE (BLACK UP POINTING SMALL TRIANGLE) */ + [0x25b5, 0x25b5], /* WHITE UP-POINTING SMALL TRIANGLE (WHITE UP POINTING SMALL TRIANGLE) */ + [0x25b6, 0x25b6], /* BLACK RIGHT-POINTING TRIANGLE (BLACK RIGHT POINTING TRIANGLE) */ + [0x25b7, 0x25b7], /* WHITE RIGHT-POINTING TRIANGLE (WHITE RIGHT POINTING TRIANGLE) */ + [0x25b8, 0x25b8], /* BLACK RIGHT-POINTING SMALL TRIANGLE (BLACK RIGHT POINTING SMALL TRIANGLE) */ + [0x25b9, 0x25b9], /* WHITE RIGHT-POINTING SMALL TRIANGLE (WHITE RIGHT POINTING SMALL TRIANGLE) */ + [0x25ba, 0x25ba], /* BLACK RIGHT-POINTING POINTER (BLACK RIGHT POINTING POINTER) */ + [0x25bb, 0x25bb], /* WHITE RIGHT-POINTING POINTER (WHITE RIGHT POINTING POINTER) */ + [0x25bc, 0x25bc], /* BLACK DOWN-POINTING TRIANGLE (BLACK DOWN POINTING TRIANGLE) */ + [0x25bd, 0x25bd], /* WHITE DOWN-POINTING TRIANGLE (WHITE DOWN POINTING TRIANGLE) */ + [0x25be, 0x25be], /* BLACK DOWN-POINTING SMALL TRIANGLE (BLACK DOWN POINTING SMALL TRIANGLE) */ + [0x25bf, 0x25bf], /* WHITE DOWN-POINTING SMALL TRIANGLE (WHITE DOWN POINTING SMALL TRIANGLE) */ + [0x25c0, 0x25c0], /* BLACK LEFT-POINTING TRIANGLE (BLACK LEFT POINTING TRIANGLE) */ + [0x25c1, 0x25c1], /* WHITE LEFT-POINTING TRIANGLE (WHITE LEFT POINTING TRIANGLE) */ + [0x25c2, 0x25c2], /* BLACK LEFT-POINTING SMALL TRIANGLE (BLACK LEFT POINTING SMALL TRIANGLE) */ + [0x25c3, 0x25c3], /* WHITE LEFT-POINTING SMALL TRIANGLE (WHITE LEFT POINTING SMALL TRIANGLE) */ + [0x25c4, 0x25c4], /* BLACK LEFT-POINTING POINTER (BLACK LEFT POINTING POINTER) */ + [0x25c5, 0x25c5], /* WHITE LEFT-POINTING POINTER (WHITE LEFT POINTING POINTER) */ + [0x25c6, 0x25c6], /* BLACK DIAMOND */ + [0x25c7, 0x25c7], /* WHITE DIAMOND */ + [0x25c8, 0x25c8], /* WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND */ + [0x25c9, 0x25c9], /* FISHEYE */ + [0x25ca, 0x25ca], /* LOZENGE */ + [0x25cb, 0x25cb], /* WHITE CIRCLE */ + [0x25cc, 0x25cc], /* DOTTED CIRCLE */ + [0x25cd, 0x25cd], /* CIRCLE WITH VERTICAL FILL */ + [0x25ce, 0x25ce], /* BULLSEYE */ + [0x25cf, 0x25cf], /* BLACK CIRCLE */ + [0x25d0, 0x25d0], /* CIRCLE WITH LEFT HALF BLACK */ + [0x25d1, 0x25d1], /* CIRCLE WITH RIGHT HALF BLACK */ + [0x25d2, 0x25d2], /* CIRCLE WITH LOWER HALF BLACK */ + [0x25d3, 0x25d3], /* CIRCLE WITH UPPER HALF BLACK */ + [0x25d4, 0x25d4], /* CIRCLE WITH UPPER RIGHT QUADRANT BLACK */ + [0x25d5, 0x25d5], /* CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK */ + [0x25d6, 0x25d6], /* LEFT HALF BLACK CIRCLE */ + [0x25d7, 0x25d7], /* RIGHT HALF BLACK CIRCLE */ + [0x25d8, 0x25d8], /* INVERSE BULLET */ + [0x25d9, 0x25d9], /* INVERSE WHITE CIRCLE */ + [0x25da, 0x25da], /* UPPER HALF INVERSE WHITE CIRCLE */ + [0x25db, 0x25db], /* LOWER HALF INVERSE WHITE CIRCLE */ + [0x25dc, 0x25dc], /* UPPER LEFT QUADRANT CIRCULAR ARC */ + [0x25dd, 0x25dd], /* UPPER RIGHT QUADRANT CIRCULAR ARC */ + [0x25de, 0x25de], /* LOWER RIGHT QUADRANT CIRCULAR ARC */ + [0x25df, 0x25df], /* LOWER LEFT QUADRANT CIRCULAR ARC */ + [0x25e0, 0x25e0], /* UPPER HALF CIRCLE */ + [0x25e1, 0x25e1], /* LOWER HALF CIRCLE */ + [0x25e2, 0x25e2], /* BLACK LOWER RIGHT TRIANGLE */ + [0x25e3, 0x25e3], /* BLACK LOWER LEFT TRIANGLE */ + [0x25e4, 0x25e4], /* BLACK UPPER LEFT TRIANGLE */ + [0x25e5, 0x25e5], /* BLACK UPPER RIGHT TRIANGLE */ + [0x25e6, 0x25e6], /* WHITE BULLET */ + [0x25e7, 0x25e7], /* SQUARE WITH LEFT HALF BLACK */ + [0x25e8, 0x25e8], /* SQUARE WITH RIGHT HALF BLACK */ + [0x25e9, 0x25e9], /* SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK */ + [0x25ea, 0x25ea], /* SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK */ + [0x25eb, 0x25eb], /* WHITE SQUARE WITH VERTICAL BISECTING LINE */ + [0x25ec, 0x25ec], /* WHITE UP-POINTING TRIANGLE WITH DOT (WHITE UP POINTING TRIANGLE WITH DOT) */ + [0x25ed, 0x25ed], /* UP-POINTING TRIANGLE WITH LEFT HALF BLACK (UP POINTING TRIANGLE WITH LEFT HALF BLACK) */ + [0x25ee, 0x25ee], /* UP-POINTING TRIANGLE WITH RIGHT HALF BLACK (UP POINTING TRIANGLE WITH RIGHT HALF BLACK) */ + [0x25ef, 0x25ef], /* LARGE CIRCLE */ + [0x25f0, 0x25f0], /* WHITE SQUARE WITH UPPER LEFT QUADRANT */ + [0x25f1, 0x25f1], /* WHITE SQUARE WITH LOWER LEFT QUADRANT */ + [0x25f2, 0x25f2], /* WHITE SQUARE WITH LOWER RIGHT QUADRANT */ + [0x25f3, 0x25f3], /* WHITE SQUARE WITH UPPER RIGHT QUADRANT */ + [0x25f4, 0x25f4], /* WHITE CIRCLE WITH UPPER LEFT QUADRANT */ + [0x25f5, 0x25f5], /* WHITE CIRCLE WITH LOWER LEFT QUADRANT */ + [0x25f6, 0x25f6], /* WHITE CIRCLE WITH LOWER RIGHT QUADRANT */ + [0x25f7, 0x25f7], /* WHITE CIRCLE WITH UPPER RIGHT QUADRANT */ + [0x25f8, 0x25f8], /* UPPER LEFT TRIANGLE */ + [0x25f9, 0x25f9], /* UPPER RIGHT TRIANGLE */ + [0x25fa, 0x25fa], /* LOWER LEFT TRIANGLE */ + [0x25fb, 0x25fb], /* WHITE MEDIUM SQUARE */ + [0x25fc, 0x25fc], /* BLACK MEDIUM SQUARE */ + [0x25fd, 0x25fd], /* WHITE MEDIUM SMALL SQUARE */ + [0x25fe, 0x25fe], /* BLACK MEDIUM SMALL SQUARE */ + [0x25ff, 0x25ff], /* LOWER RIGHT TRIANGLE */ + [0x2600, 0x2600], /* BLACK SUN WITH RAYS */ + [0x2601, 0x2601], /* CLOUD */ + [0x2602, 0x2602], /* UMBRELLA */ + [0x2603, 0x2603], /* SNOWMAN */ + [0x2604, 0x2604], /* COMET */ + [0x2605, 0x2605], /* BLACK STAR */ + [0x2606, 0x2606], /* WHITE STAR */ + [0x2607, 0x2607], /* LIGHTNING */ + [0x2608, 0x2608], /* THUNDERSTORM */ + [0x2609, 0x2609], /* SUN */ + [0x260a, 0x260a], /* ASCENDING NODE */ + [0x260b, 0x260b], /* DESCENDING NODE */ + [0x260c, 0x260c], /* CONJUNCTION */ + [0x260d, 0x260d], /* OPPOSITION */ + [0x260e, 0x260e], /* BLACK TELEPHONE */ + [0x260f, 0x260f], /* WHITE TELEPHONE */ + [0x2610, 0x2610], /* BALLOT BOX */ + [0x2611, 0x2611], /* BALLOT BOX WITH CHECK */ + [0x2612, 0x2612], /* BALLOT BOX WITH X */ + [0x2613, 0x2613], /* SALTIRE */ + [0x2614, 0x2614], /* UMBRELLA WITH RAIN DROPS */ + [0x2615, 0x2615], /* HOT BEVERAGE */ + [0x2616, 0x2616], /* WHITE SHOGI PIECE */ + [0x2617, 0x2617], /* BLACK SHOGI PIECE */ + [0x2618, 0x2618], /* SHAMROCK */ + [0x2619, 0x2619], /* REVERSED ROTATED FLORAL HEART BULLET */ + [0x261a, 0x261a], /* BLACK LEFT POINTING INDEX */ + [0x261b, 0x261b], /* BLACK RIGHT POINTING INDEX */ + [0x261c, 0x261c], /* WHITE LEFT POINTING INDEX */ + [0x261d, 0x261d], /* WHITE UP POINTING INDEX */ + [0x261e, 0x261e], /* WHITE RIGHT POINTING INDEX */ + [0x261f, 0x261f], /* WHITE DOWN POINTING INDEX */ + [0x2620, 0x2620], /* SKULL AND CROSSBONES */ + [0x2621, 0x2621], /* CAUTION SIGN */ + [0x2622, 0x2622], /* RADIOACTIVE SIGN */ + [0x2623, 0x2623], /* BIOHAZARD SIGN */ + [0x2624, 0x2624], /* CADUCEUS */ + [0x2625, 0x2625], /* ANKH */ + [0x2626, 0x2626], /* ORTHODOX CROSS */ + [0x2627, 0x2627], /* CHI RHO */ + [0x2628, 0x2628], /* CROSS OF LORRAINE */ + [0x2629, 0x2629], /* CROSS OF JERUSALEM */ + [0x262a, 0x262a], /* STAR AND CRESCENT */ + [0x262b, 0x262b], /* FARSI SYMBOL (SYMBOL OF IRAN) */ + [0x262c, 0x262c], /* ADI SHAKTI */ + [0x262d, 0x262d], /* HAMMER AND SICKLE */ + [0x262e, 0x262e], /* PEACE SYMBOL */ + [0x262f, 0x262f], /* YIN YANG */ + [0x2630, 0x2630], /* TRIGRAM FOR HEAVEN */ + [0x2631, 0x2631], /* TRIGRAM FOR LAKE */ + [0x2632, 0x2632], /* TRIGRAM FOR FIRE */ + [0x2633, 0x2633], /* TRIGRAM FOR THUNDER */ + [0x2634, 0x2634], /* TRIGRAM FOR WIND */ + [0x2635, 0x2635], /* TRIGRAM FOR WATER */ + [0x2636, 0x2636], /* TRIGRAM FOR MOUNTAIN */ + [0x2637, 0x2637], /* TRIGRAM FOR EARTH */ + [0x2638, 0x2638], /* WHEEL OF DHARMA */ + [0x2639, 0x2639], /* WHITE FROWNING FACE */ + [0x263a, 0x263a], /* WHITE SMILING FACE */ + [0x263b, 0x263b], /* BLACK SMILING FACE */ + [0x263c, 0x263c], /* WHITE SUN WITH RAYS */ + [0x263d, 0x263d], /* FIRST QUARTER MOON */ + [0x263e, 0x263e], /* LAST QUARTER MOON */ + [0x263f, 0x263f], /* MERCURY */ + [0x2640, 0x2640], /* FEMALE SIGN */ + [0x2641, 0x2641], /* EARTH */ + [0x2642, 0x2642], /* MALE SIGN */ + [0x2643, 0x2643], /* JUPITER */ + [0x2644, 0x2644], /* SATURN */ + [0x2645, 0x2645], /* URANUS */ + [0x2646, 0x2646], /* NEPTUNE */ + [0x2647, 0x2647], /* PLUTO */ + [0x2648, 0x2648], /* ARIES */ + [0x2649, 0x2649], /* TAURUS */ + [0x264a, 0x264a], /* GEMINI */ + [0x264b, 0x264b], /* CANCER */ + [0x264c, 0x264c], /* LEO */ + [0x264d, 0x264d], /* VIRGO */ + [0x264e, 0x264e], /* LIBRA */ + [0x264f, 0x264f], /* SCORPIUS */ + [0x2650, 0x2650], /* SAGITTARIUS */ + [0x2651, 0x2651], /* CAPRICORN */ + [0x2652, 0x2652], /* AQUARIUS */ + [0x2653, 0x2653], /* PISCES */ + [0x2654, 0x2654], /* WHITE CHESS KING */ + [0x2655, 0x2655], /* WHITE CHESS QUEEN */ + [0x2656, 0x2656], /* WHITE CHESS ROOK */ + [0x2657, 0x2657], /* WHITE CHESS BISHOP */ + [0x2658, 0x2658], /* WHITE CHESS KNIGHT */ + [0x2659, 0x2659], /* WHITE CHESS PAWN */ + [0x265a, 0x265a], /* BLACK CHESS KING */ + [0x265b, 0x265b], /* BLACK CHESS QUEEN */ + [0x265c, 0x265c], /* BLACK CHESS ROOK */ + [0x265d, 0x265d], /* BLACK CHESS BISHOP */ + [0x265e, 0x265e], /* BLACK CHESS KNIGHT */ + [0x265f, 0x265f], /* BLACK CHESS PAWN */ + [0x2660, 0x2660], /* BLACK SPADE SUIT */ + [0x2661, 0x2661], /* WHITE HEART SUIT */ + [0x2662, 0x2662], /* WHITE DIAMOND SUIT */ + [0x2663, 0x2663], /* BLACK CLUB SUIT */ + [0x2664, 0x2664], /* WHITE SPADE SUIT */ + [0x2665, 0x2665], /* BLACK HEART SUIT */ + [0x2666, 0x2666], /* BLACK DIAMOND SUIT */ + [0x2667, 0x2667], /* WHITE CLUB SUIT */ + [0x2668, 0x2668], /* HOT SPRINGS */ + [0x2669, 0x2669], /* QUARTER NOTE */ + [0x266a, 0x266a], /* EIGHTH NOTE */ + [0x266b, 0x266b], /* BEAMED EIGHTH NOTES (BARRED EIGHTH NOTES) */ + [0x266c, 0x266c], /* BEAMED SIXTEENTH NOTES (BARRED SIXTEENTH NOTES) */ + [0x266d, 0x266d], /* MUSIC FLAT SIGN (FLAT) */ + [0x266e, 0x266e], /* MUSIC NATURAL SIGN (NATURAL) */ + [0x266f, 0x266f], /* MUSIC SHARP SIGN (SHARP) */ + [0x2670, 0x2670], /* WEST SYRIAC CROSS */ + [0x2671, 0x2671], /* EAST SYRIAC CROSS */ + [0x2672, 0x2672], /* UNIVERSAL RECYCLING SYMBOL */ + [0x2673, 0x2673], /* RECYCLING SYMBOL FOR TYPE-1 PLASTICS */ + [0x2674, 0x2674], /* RECYCLING SYMBOL FOR TYPE-2 PLASTICS */ + [0x2675, 0x2675], /* RECYCLING SYMBOL FOR TYPE-3 PLASTICS */ + [0x2676, 0x2676], /* RECYCLING SYMBOL FOR TYPE-4 PLASTICS */ + [0x2677, 0x2677], /* RECYCLING SYMBOL FOR TYPE-5 PLASTICS */ + [0x2678, 0x2678], /* RECYCLING SYMBOL FOR TYPE-6 PLASTICS */ + [0x2679, 0x2679], /* RECYCLING SYMBOL FOR TYPE-7 PLASTICS */ + [0x267a, 0x267a], /* RECYCLING SYMBOL FOR GENERIC MATERIALS */ + [0x267b, 0x267b], /* BLACK UNIVERSAL RECYCLING SYMBOL */ + [0x267c, 0x267c], /* RECYCLED PAPER SYMBOL */ + [0x267d, 0x267d], /* PARTIALLY-RECYCLED PAPER SYMBOL */ + [0x267e, 0x267e], /* PERMANENT PAPER SIGN */ + [0x267f, 0x267f], /* WHEELCHAIR SYMBOL */ + [0x2680, 0x2680], /* DIE FACE-1 */ + [0x2681, 0x2681], /* DIE FACE-2 */ + [0x2682, 0x2682], /* DIE FACE-3 */ + [0x2683, 0x2683], /* DIE FACE-4 */ + [0x2684, 0x2684], /* DIE FACE-5 */ + [0x2685, 0x2685], /* DIE FACE-6 */ + [0x2686, 0x2686], /* WHITE CIRCLE WITH DOT RIGHT */ + [0x2687, 0x2687], /* WHITE CIRCLE WITH TWO DOTS */ + [0x2688, 0x2688], /* BLACK CIRCLE WITH WHITE DOT RIGHT */ + [0x2689, 0x2689], /* BLACK CIRCLE WITH TWO WHITE DOTS */ + [0x268a, 0x268a], /* MONOGRAM FOR YANG */ + [0x268b, 0x268b], /* MONOGRAM FOR YIN */ + [0x268c, 0x268c], /* DIGRAM FOR GREATER YANG */ + [0x268d, 0x268d], /* DIGRAM FOR LESSER YIN */ + [0x268e, 0x268e], /* DIGRAM FOR LESSER YANG */ + [0x268f, 0x268f], /* DIGRAM FOR GREATER YIN */ + [0x2690, 0x2690], /* WHITE FLAG */ + [0x2691, 0x2691], /* BLACK FLAG */ + [0x2692, 0x2692], /* HAMMER AND PICK */ + [0x2693, 0x2693], /* ANCHOR */ + [0x2694, 0x2694], /* CROSSED SWORDS */ + [0x2695, 0x2695], /* STAFF OF AESCULAPIUS */ + [0x2696, 0x2696], /* SCALES */ + [0x2697, 0x2697], /* ALEMBIC */ + [0x2698, 0x2698], /* FLOWER */ + [0x2699, 0x2699], /* GEAR */ + [0x269a, 0x269a], /* STAFF OF HERMES */ + [0x269b, 0x269b], /* ATOM SYMBOL */ + [0x269c, 0x269c], /* FLEUR-DE-LIS */ + [0x269d, 0x269d], /* OUTLINED WHITE STAR */ + [0x269e, 0x269e], /* THREE LINES CONVERGING RIGHT */ + [0x269f, 0x269f], /* THREE LINES CONVERGING LEFT */ + [0x26a0, 0x26a0], /* WARNING SIGN */ + [0x26a1, 0x26a1], /* HIGH VOLTAGE SIGN */ + [0x26a2, 0x26a2], /* DOUBLED FEMALE SIGN */ + [0x26a3, 0x26a3], /* DOUBLED MALE SIGN */ + [0x26a4, 0x26a4], /* INTERLOCKED FEMALE AND MALE SIGN */ + [0x26a5, 0x26a5], /* MALE AND FEMALE SIGN */ + [0x26a6, 0x26a6], /* MALE WITH STROKE SIGN */ + [0x26a7, 0x26a7], /* MALE WITH STROKE AND MALE AND FEMALE SIGN */ + [0x26a8, 0x26a8], /* VERTICAL MALE WITH STROKE SIGN */ + [0x26a9, 0x26a9], /* HORIZONTAL MALE WITH STROKE SIGN */ + [0x26aa, 0x26aa], /* MEDIUM WHITE CIRCLE */ + [0x26ab, 0x26ab], /* MEDIUM BLACK CIRCLE */ + [0x26ac, 0x26ac], /* MEDIUM SMALL WHITE CIRCLE */ + [0x26ad, 0x26ad], /* MARRIAGE SYMBOL */ + [0x26ae, 0x26ae], /* DIVORCE SYMBOL */ + [0x26af, 0x26af], /* UNMARRIED PARTNERSHIP SYMBOL */ + [0x26b0, 0x26b0], /* COFFIN */ + [0x26b1, 0x26b1], /* FUNERAL URN */ + [0x26b2, 0x26b2], /* NEUTER */ + [0x26b3, 0x26b3], /* CERES */ + [0x26b4, 0x26b4], /* PALLAS */ + [0x26b5, 0x26b5], /* JUNO */ + [0x26b6, 0x26b6], /* VESTA */ + [0x26b7, 0x26b7], /* CHIRON */ + [0x26b8, 0x26b8], /* BLACK MOON LILITH */ + [0x26b9, 0x26b9], /* SEXTILE */ + [0x26ba, 0x26ba], /* SEMISEXTILE */ + [0x26bb, 0x26bb], /* QUINCUNX */ + [0x26bc, 0x26bc], /* SESQUIQUADRATE */ + [0x26bd, 0x26bd], /* SOCCER BALL */ + [0x26be, 0x26be], /* BASEBALL */ + [0x26bf, 0x26bf], /* SQUARED KEY */ + [0x26c0, 0x26c0], /* WHITE DRAUGHTS MAN */ + [0x26c1, 0x26c1], /* WHITE DRAUGHTS KING */ + [0x26c2, 0x26c2], /* BLACK DRAUGHTS MAN */ + [0x26c3, 0x26c3], /* BLACK DRAUGHTS KING */ + [0x26c4, 0x26c4], /* SNOWMAN WITHOUT SNOW */ + [0x26c5, 0x26c5], /* SUN BEHIND CLOUD */ + [0x26c6, 0x26c6], /* RAIN */ + [0x26c7, 0x26c7], /* BLACK SNOWMAN */ + [0x26c8, 0x26c8], /* THUNDER CLOUD AND RAIN */ + [0x26c9, 0x26c9], /* TURNED WHITE SHOGI PIECE */ + [0x26ca, 0x26ca], /* TURNED BLACK SHOGI PIECE */ + [0x26cb, 0x26cb], /* WHITE DIAMOND IN SQUARE */ + [0x26cc, 0x26cc], /* CROSSING LANES */ + [0x26cd, 0x26cd], /* DISABLED CAR */ + [0x26ce, 0x26ce], /* OPHIUCHUS */ + [0x26cf, 0x26cf], /* PICK */ + [0x26d0, 0x26d0], /* CAR SLIDING */ + [0x26d1, 0x26d1], /* HELMET WITH WHITE CROSS */ + [0x26d2, 0x26d2], /* CIRCLED CROSSING LANES */ + [0x26d3, 0x26d3], /* CHAINS */ + [0x26d4, 0x26d4], /* NO ENTRY */ + [0x26d5, 0x26d5], /* ALTERNATE ONE-WAY LEFT WAY TRAFFIC */ + [0x26d6, 0x26d6], /* BLACK TWO-WAY LEFT WAY TRAFFIC */ + [0x26d7, 0x26d7], /* WHITE TWO-WAY LEFT WAY TRAFFIC */ + [0x26d8, 0x26d8], /* BLACK LEFT LANE MERGE */ + [0x26d9, 0x26d9], /* WHITE LEFT LANE MERGE */ + [0x26da, 0x26da], /* DRIVE SLOW SIGN */ + [0x26db, 0x26db], /* HEAVY WHITE DOWN-POINTING TRIANGLE */ + [0x26dc, 0x26dc], /* LEFT CLOSED ENTRY */ + [0x26dd, 0x26dd], /* SQUARED SALTIRE */ + [0x26de, 0x26de], /* FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE */ + [0x26df, 0x26df], /* BLACK TRUCK */ + [0x26e0, 0x26e0], /* RESTRICTED LEFT ENTRY-1 */ + [0x26e1, 0x26e1], /* RESTRICTED LEFT ENTRY-2 */ + [0x26e2, 0x26e2], /* ASTRONOMICAL SYMBOL FOR URANUS */ + [0x26e3, 0x26e3], /* HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE */ + [0x26e4, 0x26e4], /* PENTAGRAM */ + [0x26e5, 0x26e5], /* RIGHT-HANDED INTERLACED PENTAGRAM */ + [0x26e6, 0x26e6], /* LEFT-HANDED INTERLACED PENTAGRAM */ + [0x26e7, 0x26e7], /* INVERTED PENTAGRAM */ + [0x26e8, 0x26e8], /* BLACK CROSS ON SHIELD */ + [0x26e9, 0x26e9], /* SHINTO SHRINE */ + [0x26ea, 0x26ea], /* CHURCH */ + [0x26eb, 0x26eb], /* CASTLE */ + [0x26ec, 0x26ec], /* HISTORIC SITE */ + [0x26ed, 0x26ed], /* GEAR WITHOUT HUB */ + [0x26ee, 0x26ee], /* GEAR WITH HANDLES */ + [0x26ef, 0x26ef], /* MAP SYMBOL FOR LIGHTHOUSE */ + [0x26f0, 0x26f0], /* MOUNTAIN */ + [0x26f1, 0x26f1], /* UMBRELLA ON GROUND */ + [0x26f2, 0x26f2], /* FOUNTAIN */ + [0x26f3, 0x26f3], /* FLAG IN HOLE */ + [0x26f4, 0x26f4], /* FERRY */ + [0x26f5, 0x26f5], /* SAILBOAT */ + [0x26f6, 0x26f6], /* SQUARE FOUR CORNERS */ + [0x26f7, 0x26f7], /* SKIER */ + [0x26f8, 0x26f8], /* ICE SKATE */ + [0x26f9, 0x26f9], /* PERSON WITH BALL */ + [0x26fa, 0x26fa], /* TENT */ + [0x26fb, 0x26fb], /* JAPANESE BANK SYMBOL */ + [0x26fc, 0x26fc], /* HEADSTONE GRAVEYARD SYMBOL */ + [0x26fd, 0x26fd], /* FUEL PUMP */ + [0x26fe, 0x26fe], /* CUP ON BLACK SQUARE */ + [0x26ff, 0x26ff], /* WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE */ + [0x2700, 0x2700], + [0x2701, 0x2701], /* UPPER BLADE SCISSORS */ + [0x2702, 0x2702], /* BLACK SCISSORS */ + [0x2703, 0x2703], /* LOWER BLADE SCISSORS */ + [0x2704, 0x2704], /* WHITE SCISSORS */ + [0x2705, 0x2705], /* WHITE HEAVY CHECK MARK */ + [0x2706, 0x2706], /* TELEPHONE LOCATION SIGN */ + [0x2707, 0x2707], /* TAPE DRIVE */ + [0x2708, 0x2708], /* AIRPLANE */ + [0x2709, 0x2709], /* ENVELOPE */ + [0x270a, 0x270a], /* RAISED FIST */ + [0x270b, 0x270b], /* RAISED HAND */ + [0x270c, 0x270c], /* VICTORY HAND */ + [0x270d, 0x270d], /* WRITING HAND */ + [0x270e, 0x270e], /* LOWER RIGHT PENCIL */ + [0x270f, 0x270f], /* PENCIL */ + [0x2710, 0x2710], /* UPPER RIGHT PENCIL */ + [0x2711, 0x2711], /* WHITE NIB */ + [0x2712, 0x2712], /* BLACK NIB */ + [0x2713, 0x2713], /* CHECK MARK */ + [0x2714, 0x2714], /* HEAVY CHECK MARK */ + [0x2715, 0x2715], /* MULTIPLICATION X */ + [0x2716, 0x2716], /* HEAVY MULTIPLICATION X */ + [0x2717, 0x2717], /* BALLOT X */ + [0x2718, 0x2718], /* HEAVY BALLOT X */ + [0x2719, 0x2719], /* OUTLINED GREEK CROSS */ + [0x271a, 0x271a], /* HEAVY GREEK CROSS */ + [0x271b, 0x271b], /* OPEN CENTRE CROSS (OPEN CENTER CROSS) */ + [0x271c, 0x271c], /* HEAVY OPEN CENTRE CROSS (HEAVY OPEN CENTER CROSS) */ + [0x271d, 0x271d], /* LATIN CROSS */ + [0x271e, 0x271e], /* SHADOWED WHITE LATIN CROSS */ + [0x271f, 0x271f], /* OUTLINED LATIN CROSS */ + [0x2720, 0x2720], /* MALTESE CROSS */ + [0x2721, 0x2721], /* STAR OF DAVID */ + [0x2722, 0x2722], /* FOUR TEARDROP-SPOKED ASTERISK */ + [0x2723, 0x2723], /* FOUR BALLOON-SPOKED ASTERISK */ + [0x2724, 0x2724], /* HEAVY FOUR BALLOON-SPOKED ASTERISK */ + [0x2725, 0x2725], /* FOUR CLUB-SPOKED ASTERISK */ + [0x2726, 0x2726], /* BLACK FOUR POINTED STAR */ + [0x2727, 0x2727], /* WHITE FOUR POINTED STAR */ + [0x2728, 0x2728], /* SPARKLES */ + [0x2729, 0x2729], /* STRESS OUTLINED WHITE STAR */ + [0x272a, 0x272a], /* CIRCLED WHITE STAR */ + [0x272b, 0x272b], /* OPEN CENTRE BLACK STAR (OPEN CENTER BLACK STAR) */ + [0x272c, 0x272c], /* BLACK CENTRE WHITE STAR (BLACK CENTER WHITE STAR) */ + [0x272d, 0x272d], /* OUTLINED BLACK STAR */ + [0x272e, 0x272e], /* HEAVY OUTLINED BLACK STAR */ + [0x272f, 0x272f], /* PINWHEEL STAR */ + [0x2730, 0x2730], /* SHADOWED WHITE STAR */ + [0x2731, 0x2731], /* HEAVY ASTERISK */ + [0x2732, 0x2732], /* OPEN CENTRE ASTERISK (OPEN CENTER ASTERISK) */ + [0x2733, 0x2733], /* EIGHT SPOKED ASTERISK */ + [0x2734, 0x2734], /* EIGHT POINTED BLACK STAR */ + [0x2735, 0x2735], /* EIGHT POINTED PINWHEEL STAR */ + [0x2736, 0x2736], /* SIX POINTED BLACK STAR */ + [0x2737, 0x2737], /* EIGHT POINTED RECTILINEAR BLACK STAR */ + [0x2738, 0x2738], /* HEAVY EIGHT POINTED RECTILINEAR BLACK STAR */ + [0x2739, 0x2739], /* TWELVE POINTED BLACK STAR */ + [0x273a, 0x273a], /* SIXTEEN POINTED ASTERISK */ + [0x273b, 0x273b], /* TEARDROP-SPOKED ASTERISK */ + [0x273c, 0x273c], /* OPEN CENTRE TEARDROP-SPOKED ASTERISK (OPEN CENTER TEARDROP-SPOKED ASTERISK) */ + [0x273d, 0x273d], /* HEAVY TEARDROP-SPOKED ASTERISK */ + [0x273e, 0x273e], /* SIX PETALLED BLACK AND WHITE FLORETTE */ + [0x273f, 0x273f], /* BLACK FLORETTE */ + [0x2740, 0x2740], /* WHITE FLORETTE */ + [0x2741, 0x2741], /* EIGHT PETALLED OUTLINED BLACK FLORETTE */ + [0x2742, 0x2742], /* CIRCLED OPEN CENTRE EIGHT POINTED STAR (CIRCLED OPEN CENTER EIGHT POINTED STAR) */ + [0x2743, 0x2743], /* HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK */ + [0x2744, 0x2744], /* SNOWFLAKE */ + [0x2745, 0x2745], /* TIGHT TRIFOLIATE SNOWFLAKE */ + [0x2746, 0x2746], /* HEAVY CHEVRON SNOWFLAKE */ + [0x2747, 0x2747], /* SPARKLE */ + [0x2748, 0x2748], /* HEAVY SPARKLE */ + [0x2749, 0x2749], /* BALLOON-SPOKED ASTERISK */ + [0x274a, 0x274a], /* EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */ + [0x274b, 0x274b], /* HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK */ + [0x274c, 0x274c], /* CROSS MARK */ + [0x274d, 0x274d], /* SHADOWED WHITE CIRCLE */ + [0x274e, 0x274e], /* NEGATIVE SQUARED CROSS MARK */ + [0x274f, 0x274f], /* LOWER RIGHT DROP-SHADOWED WHITE SQUARE */ + [0x2750, 0x2750], /* UPPER RIGHT DROP-SHADOWED WHITE SQUARE */ + [0x2751, 0x2751], /* LOWER RIGHT SHADOWED WHITE SQUARE */ + [0x2752, 0x2752], /* UPPER RIGHT SHADOWED WHITE SQUARE */ + [0x2753, 0x2753], /* BLACK QUESTION MARK ORNAMENT */ + [0x2754, 0x2754], /* WHITE QUESTION MARK ORNAMENT */ + [0x2755, 0x2755], /* WHITE EXCLAMATION MARK ORNAMENT */ + [0x2756, 0x2756], /* BLACK DIAMOND MINUS WHITE X */ + [0x2757, 0x2757], /* HEAVY EXCLAMATION MARK SYMBOL */ + [0x2758, 0x2758], /* LIGHT VERTICAL BAR */ + [0x2759, 0x2759], /* MEDIUM VERTICAL BAR */ + [0x275a, 0x275a], /* HEAVY VERTICAL BAR */ + [0x275b, 0x275b], /* HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT */ + [0x275c, 0x275c], /* HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT */ + [0x275d, 0x275d], /* HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT */ + [0x275e, 0x275e], /* HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT */ + [0x275f, 0x275f], /* HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT */ + [0x2760, 0x2760], /* HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT */ + [0x2761, 0x2761], /* CURVED STEM PARAGRAPH SIGN ORNAMENT */ + [0x2762, 0x2762], /* HEAVY EXCLAMATION MARK ORNAMENT */ + [0x2763, 0x2763], /* HEAVY HEART EXCLAMATION MARK ORNAMENT */ + [0x2764, 0x2764], /* HEAVY BLACK HEART */ + [0x2765, 0x2765], /* ROTATED HEAVY BLACK HEART BULLET */ + [0x2766, 0x2766], /* FLORAL HEART */ + [0x2767, 0x2767], /* ROTATED FLORAL HEART BULLET */ + [0x2768, 0x2768], /* MEDIUM LEFT PARENTHESIS ORNAMENT */ + [0x2769, 0x2769], /* MEDIUM RIGHT PARENTHESIS ORNAMENT */ + [0x276a, 0x276a], /* MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT */ + [0x276b, 0x276b], /* MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT */ + [0x276c, 0x276c], /* MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT */ + [0x276d, 0x276d], /* MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT */ + [0x276e, 0x276e], /* HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT */ + [0x276f, 0x276f], /* HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT */ + [0x2770, 0x2770], /* HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT */ + [0x2771, 0x2771], /* HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT */ + [0x2772, 0x2772], /* LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT */ + [0x2773, 0x2773], /* LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT */ + [0x2774, 0x2774], /* MEDIUM LEFT CURLY BRACKET ORNAMENT */ + [0x2775, 0x2775], /* MEDIUM RIGHT CURLY BRACKET ORNAMENT */ + [0x2776, 0x2776], /* DINGBAT NEGATIVE CIRCLED DIGIT ONE (INVERSE CIRCLED DIGIT ONE) */ + [0x2777, 0x2777], /* DINGBAT NEGATIVE CIRCLED DIGIT TWO (INVERSE CIRCLED DIGIT TWO) */ + [0x2778, 0x2778], /* DINGBAT NEGATIVE CIRCLED DIGIT THREE (INVERSE CIRCLED DIGIT THREE) */ + [0x2779, 0x2779], /* DINGBAT NEGATIVE CIRCLED DIGIT FOUR (INVERSE CIRCLED DIGIT FOUR) */ + [0x277a, 0x277a], /* DINGBAT NEGATIVE CIRCLED DIGIT FIVE (INVERSE CIRCLED DIGIT FIVE) */ + [0x277b, 0x277b], /* DINGBAT NEGATIVE CIRCLED DIGIT SIX (INVERSE CIRCLED DIGIT SIX) */ + [0x277c, 0x277c], /* DINGBAT NEGATIVE CIRCLED DIGIT SEVEN (INVERSE CIRCLED DIGIT SEVEN) */ + [0x277d, 0x277d], /* DINGBAT NEGATIVE CIRCLED DIGIT EIGHT (INVERSE CIRCLED DIGIT EIGHT) */ + [0x277e, 0x277e], /* DINGBAT NEGATIVE CIRCLED DIGIT NINE (INVERSE CIRCLED DIGIT NINE) */ + [0x277f, 0x277f], /* DINGBAT NEGATIVE CIRCLED NUMBER TEN (INVERSE CIRCLED NUMBER TEN) */ + [0x2780, 0x2780], /* DINGBAT CIRCLED SANS-SERIF DIGIT ONE (CIRCLED SANS-SERIF DIGIT ONE) */ + [0x2781, 0x2781], /* DINGBAT CIRCLED SANS-SERIF DIGIT TWO (CIRCLED SANS-SERIF DIGIT TWO) */ + [0x2782, 0x2782], /* DINGBAT CIRCLED SANS-SERIF DIGIT THREE (CIRCLED SANS-SERIF DIGIT THREE) */ + [0x2783, 0x2783], /* DINGBAT CIRCLED SANS-SERIF DIGIT FOUR (CIRCLED SANS-SERIF DIGIT FOUR) */ + [0x2784, 0x2784], /* DINGBAT CIRCLED SANS-SERIF DIGIT FIVE (CIRCLED SANS-SERIF DIGIT FIVE) */ + [0x2785, 0x2785], /* DINGBAT CIRCLED SANS-SERIF DIGIT SIX (CIRCLED SANS-SERIF DIGIT SIX) */ + [0x2786, 0x2786], /* DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN (CIRCLED SANS-SERIF DIGIT SEVEN) */ + [0x2787, 0x2787], /* DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT (CIRCLED SANS-SERIF DIGIT EIGHT) */ + [0x2788, 0x2788], /* DINGBAT CIRCLED SANS-SERIF DIGIT NINE (CIRCLED SANS-SERIF DIGIT NINE) */ + [0x2789, 0x2789], /* DINGBAT CIRCLED SANS-SERIF NUMBER TEN (CIRCLED SANS-SERIF NUMBER TEN) */ + [0x278a, 0x278a], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE (INVERSE CIRCLED SANS-SERIF DIGIT ONE) */ + [0x278b, 0x278b], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO (INVERSE CIRCLED SANS-SERIF DIGIT TWO) */ + [0x278c, 0x278c], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE (INVERSE CIRCLED SANS-SERIF DIGIT THREE) */ + [0x278d, 0x278d], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR (INVERSE CIRCLED SANS-SERIF DIGIT FOUR) */ + [0x278e, 0x278e], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE (INVERSE CIRCLED SANS-SERIF DIGIT FIVE) */ + [0x278f, 0x278f], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX (INVERSE CIRCLED SANS-SERIF DIGIT SIX) */ + [0x2790, 0x2790], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN (INVERSE CIRCLED SANS-SERIF DIGIT SEVEN) */ + [0x2791, 0x2791], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT (INVERSE CIRCLED SANS-SERIF DIGIT EIGHT) */ + [0x2792, 0x2792], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE (INVERSE CIRCLED SANS-SERIF DIGIT NINE) */ + [0x2793, 0x2793], /* DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN (INVERSE CIRCLED SANS-SERIF NUMBER TEN) */ + [0x2794, 0x2794], /* HEAVY WIDE-HEADED RIGHTWARDS ARROW (HEAVY WIDE-HEADED RIGHT ARROW) */ + [0x2795, 0x2795], /* HEAVY PLUS SIGN */ + [0x2796, 0x2796], /* HEAVY MINUS SIGN */ + [0x2797, 0x2797], /* HEAVY DIVISION SIGN */ + [0x2798, 0x2798], /* HEAVY SOUTH EAST ARROW (HEAVY LOWER RIGHT ARROW) */ + [0x2799, 0x2799], /* HEAVY RIGHTWARDS ARROW (HEAVY RIGHT ARROW) */ + [0x279a, 0x279a], /* HEAVY NORTH EAST ARROW (HEAVY UPPER RIGHT ARROW) */ + [0x279b, 0x279b], /* DRAFTING POINT RIGHTWARDS ARROW (DRAFTING POINT RIGHT ARROW) */ + [0x279c, 0x279c], /* HEAVY ROUND-TIPPED RIGHTWARDS ARROW (HEAVY ROUND-TIPPED RIGHT ARROW) */ + [0x279d, 0x279d], /* TRIANGLE-HEADED RIGHTWARDS ARROW (TRIANGLE-HEADED RIGHT ARROW) */ + [0x279e, 0x279e], /* HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW (HEAVY TRIANGLE-HEADED RIGHT ARROW) */ + [0x279f, 0x279f], /* DASHED TRIANGLE-HEADED RIGHTWARDS ARROW (DASHED TRIANGLE-HEADED RIGHT ARROW) */ + [0x27a0, 0x27a0], /* HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW (HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW) */ + [0x27a1, 0x27a1], /* BLACK RIGHTWARDS ARROW (BLACK RIGHT ARROW) */ + [0x27a2, 0x27a2], /* THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD (THREE-D TOP-LIGHTED RIGHT ARROWHEAD) */ + [0x27a3, 0x27a3], /* THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD (THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD) */ + [0x27a4, 0x27a4], /* BLACK RIGHTWARDS ARROWHEAD (BLACK RIGHT ARROWHEAD) */ + [0x27a5, 0x27a5], /* HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW (HEAVY BLACK CURVED DOWN AND RIGHT ARROW) */ + [0x27a6, 0x27a6], /* HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW (HEAVY BLACK CURVED UP AND RIGHT ARROW) */ + [0x27a7, 0x27a7], /* SQUAT BLACK RIGHTWARDS ARROW (SQUAT BLACK RIGHT ARROW) */ + [0x27a8, 0x27a8], /* HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW (HEAVY CONCAVE-POINTED BLACK RIGHT ARROW) */ + [0x27a9, 0x27a9], /* RIGHT-SHADED WHITE RIGHTWARDS ARROW (RIGHT-SHADED WHITE RIGHT ARROW) */ + [0x27aa, 0x27aa], /* LEFT-SHADED WHITE RIGHTWARDS ARROW (LEFT-SHADED WHITE RIGHT ARROW) */ + [0x27ab, 0x27ab], /* BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW (BACK-TILTED SHADOWED WHITE RIGHT ARROW) */ + [0x27ac, 0x27ac], /* FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW (FRONT-TILTED SHADOWED WHITE RIGHT ARROW) */ + [0x27ad, 0x27ad], /* HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + [0x27ae, 0x27ae], /* HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + [0x27af, 0x27af], /* NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + [0x27b0, 0x27b0], /* CURLY LOOP */ + [0x27b1, 0x27b1], /* NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW (NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW) */ + [0x27b2, 0x27b2], /* CIRCLED HEAVY WHITE RIGHTWARDS ARROW (CIRCLED HEAVY WHITE RIGHT ARROW) */ + [0x27b3, 0x27b3], /* WHITE-FEATHERED RIGHTWARDS ARROW (WHITE-FEATHERED RIGHT ARROW) */ + [0x27b4, 0x27b4], /* BLACK-FEATHERED SOUTH EAST ARROW (BLACK-FEATHERED LOWER RIGHT ARROW) */ + [0x27b5, 0x27b5], /* BLACK-FEATHERED RIGHTWARDS ARROW (BLACK-FEATHERED RIGHT ARROW) */ + [0x27b6, 0x27b6], /* BLACK-FEATHERED NORTH EAST ARROW (BLACK-FEATHERED UPPER RIGHT ARROW) */ + [0x27b7, 0x27b7], /* HEAVY BLACK-FEATHERED SOUTH EAST ARROW (HEAVY BLACK-FEATHERED LOWER RIGHT ARROW) */ + [0x27b8, 0x27b8], /* HEAVY BLACK-FEATHERED RIGHTWARDS ARROW (HEAVY BLACK-FEATHERED RIGHT ARROW) */ + [0x27b9, 0x27b9], /* HEAVY BLACK-FEATHERED NORTH EAST ARROW (HEAVY BLACK-FEATHERED UPPER RIGHT ARROW) */ + [0x27ba, 0x27ba], /* TEARDROP-BARBED RIGHTWARDS ARROW (TEARDROP-BARBED RIGHT ARROW) */ + [0x27bb, 0x27bb], /* HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW (HEAVY TEARDROP-SHANKED RIGHT ARROW) */ + [0x27bc, 0x27bc], /* WEDGE-TAILED RIGHTWARDS ARROW (WEDGE-TAILED RIGHT ARROW) */ + [0x27bd, 0x27bd], /* HEAVY WEDGE-TAILED RIGHTWARDS ARROW (HEAVY WEDGE-TAILED RIGHT ARROW) */ + [0x27be, 0x27be], /* OPEN-OUTLINED RIGHTWARDS ARROW (OPEN-OUTLINED RIGHT ARROW) */ + [0x27bf, 0x27bf], /* DOUBLE CURLY LOOP */ + [0x27c0, 0x27c0], /* THREE DIMENSIONAL ANGLE */ + [0x27c1, 0x27c1], /* WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE */ + [0x27c2, 0x27c2], /* PERPENDICULAR */ + [0x27c3, 0x27c3], /* OPEN SUBSET */ + [0x27c4, 0x27c4], /* OPEN SUPERSET */ + [0x27c5, 0x27c5], /* LEFT S-SHAPED BAG DELIMITER */ + [0x27c6, 0x27c6], /* RIGHT S-SHAPED BAG DELIMITER */ + [0x27c7, 0x27c7], /* OR WITH DOT INSIDE */ + [0x27c8, 0x27c8], /* REVERSE SOLIDUS PRECEDING SUBSET */ + [0x27c9, 0x27c9], /* SUPERSET PRECEDING SOLIDUS */ + [0x27ca, 0x27ca], /* VERTICAL BAR WITH HORIZONTAL STROKE */ + [0x27cb, 0x27cb], /* MATHEMATICAL RISING DIAGONAL */ + [0x27cc, 0x27cc], /* LONG DIVISION */ + [0x27cd, 0x27cd], /* MATHEMATICAL FALLING DIAGONAL */ + [0x27ce, 0x27ce], /* SQUARED LOGICAL AND */ + [0x27cf, 0x27cf], /* SQUARED LOGICAL OR */ + [0x27d0, 0x27d0], /* WHITE DIAMOND WITH CENTRED DOT */ + [0x27d1, 0x27d1], /* AND WITH DOT */ + [0x27d2, 0x27d2], /* ELEMENT OF OPENING UPWARDS */ + [0x27d3, 0x27d3], /* LOWER RIGHT CORNER WITH DOT */ + [0x27d4, 0x27d4], /* UPPER LEFT CORNER WITH DOT */ + [0x27d5, 0x27d5], /* LEFT OUTER JOIN */ + [0x27d6, 0x27d6], /* RIGHT OUTER JOIN */ + [0x27d7, 0x27d7], /* FULL OUTER JOIN */ + [0x27d8, 0x27d8], /* LARGE UP TACK */ + [0x27d9, 0x27d9], /* LARGE DOWN TACK */ + [0x27da, 0x27da], /* LEFT AND RIGHT DOUBLE TURNSTILE */ + [0x27db, 0x27db], /* LEFT AND RIGHT TACK */ + [0x27dc, 0x27dc], /* LEFT MULTIMAP */ + [0x27dd, 0x27dd], /* LONG RIGHT TACK */ + [0x27de, 0x27de], /* LONG LEFT TACK */ + [0x27df, 0x27df], /* UP TACK WITH CIRCLE ABOVE */ + [0x27e0, 0x27e0], /* LOZENGE DIVIDED BY HORIZONTAL RULE */ + [0x27e1, 0x27e1], /* WHITE CONCAVE-SIDED DIAMOND */ + [0x27e2, 0x27e2], /* WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK */ + [0x27e3, 0x27e3], /* WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK */ + [0x27e4, 0x27e4], /* WHITE SQUARE WITH LEFTWARDS TICK */ + [0x27e5, 0x27e5], /* WHITE SQUARE WITH RIGHTWARDS TICK */ + [0x27e6, 0x27e6], /* MATHEMATICAL LEFT WHITE SQUARE BRACKET */ + [0x27e7, 0x27e7], /* MATHEMATICAL RIGHT WHITE SQUARE BRACKET */ + [0x27e8, 0x27e8], /* MATHEMATICAL LEFT ANGLE BRACKET */ + [0x27e9, 0x27e9], /* MATHEMATICAL RIGHT ANGLE BRACKET */ + [0x27ea, 0x27ea], /* MATHEMATICAL LEFT DOUBLE ANGLE BRACKET */ + [0x27eb, 0x27eb], /* MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET */ + [0x27ec, 0x27ec], /* MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET */ + [0x27ed, 0x27ed], /* MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET */ + [0x27ee, 0x27ee], /* MATHEMATICAL LEFT FLATTENED PARENTHESIS */ + [0x27ef, 0x27ef], /* MATHEMATICAL RIGHT FLATTENED PARENTHESIS */ + [0x27f0, 0x27f0], /* UPWARDS QUADRUPLE ARROW */ + [0x27f1, 0x27f1], /* DOWNWARDS QUADRUPLE ARROW */ + [0x27f2, 0x27f2], /* ANTICLOCKWISE GAPPED CIRCLE ARROW */ + [0x27f3, 0x27f3], /* CLOCKWISE GAPPED CIRCLE ARROW */ + [0x27f4, 0x27f4], /* RIGHT ARROW WITH CIRCLED PLUS */ + [0x27f5, 0x27f5], /* LONG LEFTWARDS ARROW */ + [0x27f6, 0x27f6], /* LONG RIGHTWARDS ARROW */ + [0x27f7, 0x27f7], /* LONG LEFT RIGHT ARROW */ + [0x27f8, 0x27f8], /* LONG LEFTWARDS DOUBLE ARROW */ + [0x27f9, 0x27f9], /* LONG RIGHTWARDS DOUBLE ARROW */ + [0x27fa, 0x27fa], /* LONG LEFT RIGHT DOUBLE ARROW */ + [0x27fb, 0x27fb], /* LONG LEFTWARDS ARROW FROM BAR */ + [0x27fc, 0x27fc], /* LONG RIGHTWARDS ARROW FROM BAR */ + [0x27fd, 0x27fd], /* LONG LEFTWARDS DOUBLE ARROW FROM BAR */ + [0x27fe, 0x27fe], /* LONG RIGHTWARDS DOUBLE ARROW FROM BAR */ + [0x27ff, 0x27ff], /* LONG RIGHTWARDS SQUIGGLE ARROW */ + [0x2800, 0x2800], /* BRAILLE PATTERN BLANK */ + [0x2801, 0x2801], /* BRAILLE PATTERN DOTS-1 */ + [0x2802, 0x2802], /* BRAILLE PATTERN DOTS-2 */ + [0x2803, 0x2803], /* BRAILLE PATTERN DOTS-12 */ + [0x2804, 0x2804], /* BRAILLE PATTERN DOTS-3 */ + [0x2805, 0x2805], /* BRAILLE PATTERN DOTS-13 */ + [0x2806, 0x2806], /* BRAILLE PATTERN DOTS-23 */ + [0x2807, 0x2807], /* BRAILLE PATTERN DOTS-123 */ + [0x2808, 0x2808], /* BRAILLE PATTERN DOTS-4 */ + [0x2809, 0x2809], /* BRAILLE PATTERN DOTS-14 */ + [0x280a, 0x280a], /* BRAILLE PATTERN DOTS-24 */ + [0x280b, 0x280b], /* BRAILLE PATTERN DOTS-124 */ + [0x280c, 0x280c], /* BRAILLE PATTERN DOTS-34 */ + [0x280d, 0x280d], /* BRAILLE PATTERN DOTS-134 */ + [0x280e, 0x280e], /* BRAILLE PATTERN DOTS-234 */ + [0x280f, 0x280f], /* BRAILLE PATTERN DOTS-1234 */ + [0x2810, 0x2810], /* BRAILLE PATTERN DOTS-5 */ + [0x2811, 0x2811], /* BRAILLE PATTERN DOTS-15 */ + [0x2812, 0x2812], /* BRAILLE PATTERN DOTS-25 */ + [0x2813, 0x2813], /* BRAILLE PATTERN DOTS-125 */ + [0x2814, 0x2814], /* BRAILLE PATTERN DOTS-35 */ + [0x2815, 0x2815], /* BRAILLE PATTERN DOTS-135 */ + [0x2816, 0x2816], /* BRAILLE PATTERN DOTS-235 */ + [0x2817, 0x2817], /* BRAILLE PATTERN DOTS-1235 */ + [0x2818, 0x2818], /* BRAILLE PATTERN DOTS-45 */ + [0x2819, 0x2819], /* BRAILLE PATTERN DOTS-145 */ + [0x281a, 0x281a], /* BRAILLE PATTERN DOTS-245 */ + [0x281b, 0x281b], /* BRAILLE PATTERN DOTS-1245 */ + [0x281c, 0x281c], /* BRAILLE PATTERN DOTS-345 */ + [0x281d, 0x281d], /* BRAILLE PATTERN DOTS-1345 */ + [0x281e, 0x281e], /* BRAILLE PATTERN DOTS-2345 */ + [0x281f, 0x281f], /* BRAILLE PATTERN DOTS-12345 */ + [0x2820, 0x2820], /* BRAILLE PATTERN DOTS-6 */ + [0x2821, 0x2821], /* BRAILLE PATTERN DOTS-16 */ + [0x2822, 0x2822], /* BRAILLE PATTERN DOTS-26 */ + [0x2823, 0x2823], /* BRAILLE PATTERN DOTS-126 */ + [0x2824, 0x2824], /* BRAILLE PATTERN DOTS-36 */ + [0x2825, 0x2825], /* BRAILLE PATTERN DOTS-136 */ + [0x2826, 0x2826], /* BRAILLE PATTERN DOTS-236 */ + [0x2827, 0x2827], /* BRAILLE PATTERN DOTS-1236 */ + [0x2828, 0x2828], /* BRAILLE PATTERN DOTS-46 */ + [0x2829, 0x2829], /* BRAILLE PATTERN DOTS-146 */ + [0x282a, 0x282a], /* BRAILLE PATTERN DOTS-246 */ + [0x282b, 0x282b], /* BRAILLE PATTERN DOTS-1246 */ + [0x282c, 0x282c], /* BRAILLE PATTERN DOTS-346 */ + [0x282d, 0x282d], /* BRAILLE PATTERN DOTS-1346 */ + [0x282e, 0x282e], /* BRAILLE PATTERN DOTS-2346 */ + [0x282f, 0x282f], /* BRAILLE PATTERN DOTS-12346 */ + [0x2830, 0x2830], /* BRAILLE PATTERN DOTS-56 */ + [0x2831, 0x2831], /* BRAILLE PATTERN DOTS-156 */ + [0x2832, 0x2832], /* BRAILLE PATTERN DOTS-256 */ + [0x2833, 0x2833], /* BRAILLE PATTERN DOTS-1256 */ + [0x2834, 0x2834], /* BRAILLE PATTERN DOTS-356 */ + [0x2835, 0x2835], /* BRAILLE PATTERN DOTS-1356 */ + [0x2836, 0x2836], /* BRAILLE PATTERN DOTS-2356 */ + [0x2837, 0x2837], /* BRAILLE PATTERN DOTS-12356 */ + [0x2838, 0x2838], /* BRAILLE PATTERN DOTS-456 */ + [0x2839, 0x2839], /* BRAILLE PATTERN DOTS-1456 */ + [0x283a, 0x283a], /* BRAILLE PATTERN DOTS-2456 */ + [0x283b, 0x283b], /* BRAILLE PATTERN DOTS-12456 */ + [0x283c, 0x283c], /* BRAILLE PATTERN DOTS-3456 */ + [0x283d, 0x283d], /* BRAILLE PATTERN DOTS-13456 */ + [0x283e, 0x283e], /* BRAILLE PATTERN DOTS-23456 */ + [0x283f, 0x283f], /* BRAILLE PATTERN DOTS-123456 */ + [0x2840, 0x2840], /* BRAILLE PATTERN DOTS-7 */ + [0x2841, 0x2841], /* BRAILLE PATTERN DOTS-17 */ + [0x2842, 0x2842], /* BRAILLE PATTERN DOTS-27 */ + [0x2843, 0x2843], /* BRAILLE PATTERN DOTS-127 */ + [0x2844, 0x2844], /* BRAILLE PATTERN DOTS-37 */ + [0x2845, 0x2845], /* BRAILLE PATTERN DOTS-137 */ + [0x2846, 0x2846], /* BRAILLE PATTERN DOTS-237 */ + [0x2847, 0x2847], /* BRAILLE PATTERN DOTS-1237 */ + [0x2848, 0x2848], /* BRAILLE PATTERN DOTS-47 */ + [0x2849, 0x2849], /* BRAILLE PATTERN DOTS-147 */ + [0x284a, 0x284a], /* BRAILLE PATTERN DOTS-247 */ + [0x284b, 0x284b], /* BRAILLE PATTERN DOTS-1247 */ + [0x284c, 0x284c], /* BRAILLE PATTERN DOTS-347 */ + [0x284d, 0x284d], /* BRAILLE PATTERN DOTS-1347 */ + [0x284e, 0x284e], /* BRAILLE PATTERN DOTS-2347 */ + [0x284f, 0x284f], /* BRAILLE PATTERN DOTS-12347 */ + [0x2850, 0x2850], /* BRAILLE PATTERN DOTS-57 */ + [0x2851, 0x2851], /* BRAILLE PATTERN DOTS-157 */ + [0x2852, 0x2852], /* BRAILLE PATTERN DOTS-257 */ + [0x2853, 0x2853], /* BRAILLE PATTERN DOTS-1257 */ + [0x2854, 0x2854], /* BRAILLE PATTERN DOTS-357 */ + [0x2855, 0x2855], /* BRAILLE PATTERN DOTS-1357 */ + [0x2856, 0x2856], /* BRAILLE PATTERN DOTS-2357 */ + [0x2857, 0x2857], /* BRAILLE PATTERN DOTS-12357 */ + [0x2858, 0x2858], /* BRAILLE PATTERN DOTS-457 */ + [0x2859, 0x2859], /* BRAILLE PATTERN DOTS-1457 */ + [0x285a, 0x285a], /* BRAILLE PATTERN DOTS-2457 */ + [0x285b, 0x285b], /* BRAILLE PATTERN DOTS-12457 */ + [0x285c, 0x285c], /* BRAILLE PATTERN DOTS-3457 */ + [0x285d, 0x285d], /* BRAILLE PATTERN DOTS-13457 */ + [0x285e, 0x285e], /* BRAILLE PATTERN DOTS-23457 */ + [0x285f, 0x285f], /* BRAILLE PATTERN DOTS-123457 */ + [0x2860, 0x2860], /* BRAILLE PATTERN DOTS-67 */ + [0x2861, 0x2861], /* BRAILLE PATTERN DOTS-167 */ + [0x2862, 0x2862], /* BRAILLE PATTERN DOTS-267 */ + [0x2863, 0x2863], /* BRAILLE PATTERN DOTS-1267 */ + [0x2864, 0x2864], /* BRAILLE PATTERN DOTS-367 */ + [0x2865, 0x2865], /* BRAILLE PATTERN DOTS-1367 */ + [0x2866, 0x2866], /* BRAILLE PATTERN DOTS-2367 */ + [0x2867, 0x2867], /* BRAILLE PATTERN DOTS-12367 */ + [0x2868, 0x2868], /* BRAILLE PATTERN DOTS-467 */ + [0x2869, 0x2869], /* BRAILLE PATTERN DOTS-1467 */ + [0x286a, 0x286a], /* BRAILLE PATTERN DOTS-2467 */ + [0x286b, 0x286b], /* BRAILLE PATTERN DOTS-12467 */ + [0x286c, 0x286c], /* BRAILLE PATTERN DOTS-3467 */ + [0x286d, 0x286d], /* BRAILLE PATTERN DOTS-13467 */ + [0x286e, 0x286e], /* BRAILLE PATTERN DOTS-23467 */ + [0x286f, 0x286f], /* BRAILLE PATTERN DOTS-123467 */ + [0x2870, 0x2870], /* BRAILLE PATTERN DOTS-567 */ + [0x2871, 0x2871], /* BRAILLE PATTERN DOTS-1567 */ + [0x2872, 0x2872], /* BRAILLE PATTERN DOTS-2567 */ + [0x2873, 0x2873], /* BRAILLE PATTERN DOTS-12567 */ + [0x2874, 0x2874], /* BRAILLE PATTERN DOTS-3567 */ + [0x2875, 0x2875], /* BRAILLE PATTERN DOTS-13567 */ + [0x2876, 0x2876], /* BRAILLE PATTERN DOTS-23567 */ + [0x2877, 0x2877], /* BRAILLE PATTERN DOTS-123567 */ + [0x2878, 0x2878], /* BRAILLE PATTERN DOTS-4567 */ + [0x2879, 0x2879], /* BRAILLE PATTERN DOTS-14567 */ + [0x287a, 0x287a], /* BRAILLE PATTERN DOTS-24567 */ + [0x287b, 0x287b], /* BRAILLE PATTERN DOTS-124567 */ + [0x287c, 0x287c], /* BRAILLE PATTERN DOTS-34567 */ + [0x287d, 0x287d], /* BRAILLE PATTERN DOTS-134567 */ + [0x287e, 0x287e], /* BRAILLE PATTERN DOTS-234567 */ + [0x287f, 0x287f], /* BRAILLE PATTERN DOTS-1234567 */ + [0x2880, 0x2880], /* BRAILLE PATTERN DOTS-8 */ + [0x2881, 0x2881], /* BRAILLE PATTERN DOTS-18 */ + [0x2882, 0x2882], /* BRAILLE PATTERN DOTS-28 */ + [0x2883, 0x2883], /* BRAILLE PATTERN DOTS-128 */ + [0x2884, 0x2884], /* BRAILLE PATTERN DOTS-38 */ + [0x2885, 0x2885], /* BRAILLE PATTERN DOTS-138 */ + [0x2886, 0x2886], /* BRAILLE PATTERN DOTS-238 */ + [0x2887, 0x2887], /* BRAILLE PATTERN DOTS-1238 */ + [0x2888, 0x2888], /* BRAILLE PATTERN DOTS-48 */ + [0x2889, 0x2889], /* BRAILLE PATTERN DOTS-148 */ + [0x288a, 0x288a], /* BRAILLE PATTERN DOTS-248 */ + [0x288b, 0x288b], /* BRAILLE PATTERN DOTS-1248 */ + [0x288c, 0x288c], /* BRAILLE PATTERN DOTS-348 */ + [0x288d, 0x288d], /* BRAILLE PATTERN DOTS-1348 */ + [0x288e, 0x288e], /* BRAILLE PATTERN DOTS-2348 */ + [0x288f, 0x288f], /* BRAILLE PATTERN DOTS-12348 */ + [0x2890, 0x2890], /* BRAILLE PATTERN DOTS-58 */ + [0x2891, 0x2891], /* BRAILLE PATTERN DOTS-158 */ + [0x2892, 0x2892], /* BRAILLE PATTERN DOTS-258 */ + [0x2893, 0x2893], /* BRAILLE PATTERN DOTS-1258 */ + [0x2894, 0x2894], /* BRAILLE PATTERN DOTS-358 */ + [0x2895, 0x2895], /* BRAILLE PATTERN DOTS-1358 */ + [0x2896, 0x2896], /* BRAILLE PATTERN DOTS-2358 */ + [0x2897, 0x2897], /* BRAILLE PATTERN DOTS-12358 */ + [0x2898, 0x2898], /* BRAILLE PATTERN DOTS-458 */ + [0x2899, 0x2899], /* BRAILLE PATTERN DOTS-1458 */ + [0x289a, 0x289a], /* BRAILLE PATTERN DOTS-2458 */ + [0x289b, 0x289b], /* BRAILLE PATTERN DOTS-12458 */ + [0x289c, 0x289c], /* BRAILLE PATTERN DOTS-3458 */ + [0x289d, 0x289d], /* BRAILLE PATTERN DOTS-13458 */ + [0x289e, 0x289e], /* BRAILLE PATTERN DOTS-23458 */ + [0x289f, 0x289f], /* BRAILLE PATTERN DOTS-123458 */ + [0x28a0, 0x28a0], /* BRAILLE PATTERN DOTS-68 */ + [0x28a1, 0x28a1], /* BRAILLE PATTERN DOTS-168 */ + [0x28a2, 0x28a2], /* BRAILLE PATTERN DOTS-268 */ + [0x28a3, 0x28a3], /* BRAILLE PATTERN DOTS-1268 */ + [0x28a4, 0x28a4], /* BRAILLE PATTERN DOTS-368 */ + [0x28a5, 0x28a5], /* BRAILLE PATTERN DOTS-1368 */ + [0x28a6, 0x28a6], /* BRAILLE PATTERN DOTS-2368 */ + [0x28a7, 0x28a7], /* BRAILLE PATTERN DOTS-12368 */ + [0x28a8, 0x28a8], /* BRAILLE PATTERN DOTS-468 */ + [0x28a9, 0x28a9], /* BRAILLE PATTERN DOTS-1468 */ + [0x28aa, 0x28aa], /* BRAILLE PATTERN DOTS-2468 */ + [0x28ab, 0x28ab], /* BRAILLE PATTERN DOTS-12468 */ + [0x28ac, 0x28ac], /* BRAILLE PATTERN DOTS-3468 */ + [0x28ad, 0x28ad], /* BRAILLE PATTERN DOTS-13468 */ + [0x28ae, 0x28ae], /* BRAILLE PATTERN DOTS-23468 */ + [0x28af, 0x28af], /* BRAILLE PATTERN DOTS-123468 */ + [0x28b0, 0x28b0], /* BRAILLE PATTERN DOTS-568 */ + [0x28b1, 0x28b1], /* BRAILLE PATTERN DOTS-1568 */ + [0x28b2, 0x28b2], /* BRAILLE PATTERN DOTS-2568 */ + [0x28b3, 0x28b3], /* BRAILLE PATTERN DOTS-12568 */ + [0x28b4, 0x28b4], /* BRAILLE PATTERN DOTS-3568 */ + [0x28b5, 0x28b5], /* BRAILLE PATTERN DOTS-13568 */ + [0x28b6, 0x28b6], /* BRAILLE PATTERN DOTS-23568 */ + [0x28b7, 0x28b7], /* BRAILLE PATTERN DOTS-123568 */ + [0x28b8, 0x28b8], /* BRAILLE PATTERN DOTS-4568 */ + [0x28b9, 0x28b9], /* BRAILLE PATTERN DOTS-14568 */ + [0x28ba, 0x28ba], /* BRAILLE PATTERN DOTS-24568 */ + [0x28bb, 0x28bb], /* BRAILLE PATTERN DOTS-124568 */ + [0x28bc, 0x28bc], /* BRAILLE PATTERN DOTS-34568 */ + [0x28bd, 0x28bd], /* BRAILLE PATTERN DOTS-134568 */ + [0x28be, 0x28be], /* BRAILLE PATTERN DOTS-234568 */ + [0x28bf, 0x28bf], /* BRAILLE PATTERN DOTS-1234568 */ + [0x28c0, 0x28c0], /* BRAILLE PATTERN DOTS-78 */ + [0x28c1, 0x28c1], /* BRAILLE PATTERN DOTS-178 */ + [0x28c2, 0x28c2], /* BRAILLE PATTERN DOTS-278 */ + [0x28c3, 0x28c3], /* BRAILLE PATTERN DOTS-1278 */ + [0x28c4, 0x28c4], /* BRAILLE PATTERN DOTS-378 */ + [0x28c5, 0x28c5], /* BRAILLE PATTERN DOTS-1378 */ + [0x28c6, 0x28c6], /* BRAILLE PATTERN DOTS-2378 */ + [0x28c7, 0x28c7], /* BRAILLE PATTERN DOTS-12378 */ + [0x28c8, 0x28c8], /* BRAILLE PATTERN DOTS-478 */ + [0x28c9, 0x28c9], /* BRAILLE PATTERN DOTS-1478 */ + [0x28ca, 0x28ca], /* BRAILLE PATTERN DOTS-2478 */ + [0x28cb, 0x28cb], /* BRAILLE PATTERN DOTS-12478 */ + [0x28cc, 0x28cc], /* BRAILLE PATTERN DOTS-3478 */ + [0x28cd, 0x28cd], /* BRAILLE PATTERN DOTS-13478 */ + [0x28ce, 0x28ce], /* BRAILLE PATTERN DOTS-23478 */ + [0x28cf, 0x28cf], /* BRAILLE PATTERN DOTS-123478 */ + [0x28d0, 0x28d0], /* BRAILLE PATTERN DOTS-578 */ + [0x28d1, 0x28d1], /* BRAILLE PATTERN DOTS-1578 */ + [0x28d2, 0x28d2], /* BRAILLE PATTERN DOTS-2578 */ + [0x28d3, 0x28d3], /* BRAILLE PATTERN DOTS-12578 */ + [0x28d4, 0x28d4], /* BRAILLE PATTERN DOTS-3578 */ + [0x28d5, 0x28d5], /* BRAILLE PATTERN DOTS-13578 */ + [0x28d6, 0x28d6], /* BRAILLE PATTERN DOTS-23578 */ + [0x28d7, 0x28d7], /* BRAILLE PATTERN DOTS-123578 */ + [0x28d8, 0x28d8], /* BRAILLE PATTERN DOTS-4578 */ + [0x28d9, 0x28d9], /* BRAILLE PATTERN DOTS-14578 */ + [0x28da, 0x28da], /* BRAILLE PATTERN DOTS-24578 */ + [0x28db, 0x28db], /* BRAILLE PATTERN DOTS-124578 */ + [0x28dc, 0x28dc], /* BRAILLE PATTERN DOTS-34578 */ + [0x28dd, 0x28dd], /* BRAILLE PATTERN DOTS-134578 */ + [0x28de, 0x28de], /* BRAILLE PATTERN DOTS-234578 */ + [0x28df, 0x28df], /* BRAILLE PATTERN DOTS-1234578 */ + [0x28e0, 0x28e0], /* BRAILLE PATTERN DOTS-678 */ + [0x28e1, 0x28e1], /* BRAILLE PATTERN DOTS-1678 */ + [0x28e2, 0x28e2], /* BRAILLE PATTERN DOTS-2678 */ + [0x28e3, 0x28e3], /* BRAILLE PATTERN DOTS-12678 */ + [0x28e4, 0x28e4], /* BRAILLE PATTERN DOTS-3678 */ + [0x28e5, 0x28e5], /* BRAILLE PATTERN DOTS-13678 */ + [0x28e6, 0x28e6], /* BRAILLE PATTERN DOTS-23678 */ + [0x28e7, 0x28e7], /* BRAILLE PATTERN DOTS-123678 */ + [0x28e8, 0x28e8], /* BRAILLE PATTERN DOTS-4678 */ + [0x28e9, 0x28e9], /* BRAILLE PATTERN DOTS-14678 */ + [0x28ea, 0x28ea], /* BRAILLE PATTERN DOTS-24678 */ + [0x28eb, 0x28eb], /* BRAILLE PATTERN DOTS-124678 */ + [0x28ec, 0x28ec], /* BRAILLE PATTERN DOTS-34678 */ + [0x28ed, 0x28ed], /* BRAILLE PATTERN DOTS-134678 */ + [0x28ee, 0x28ee], /* BRAILLE PATTERN DOTS-234678 */ + [0x28ef, 0x28ef], /* BRAILLE PATTERN DOTS-1234678 */ + [0x28f0, 0x28f0], /* BRAILLE PATTERN DOTS-5678 */ + [0x28f1, 0x28f1], /* BRAILLE PATTERN DOTS-15678 */ + [0x28f2, 0x28f2], /* BRAILLE PATTERN DOTS-25678 */ + [0x28f3, 0x28f3], /* BRAILLE PATTERN DOTS-125678 */ + [0x28f4, 0x28f4], /* BRAILLE PATTERN DOTS-35678 */ + [0x28f5, 0x28f5], /* BRAILLE PATTERN DOTS-135678 */ + [0x28f6, 0x28f6], /* BRAILLE PATTERN DOTS-235678 */ + [0x28f7, 0x28f7], /* BRAILLE PATTERN DOTS-1235678 */ + [0x28f8, 0x28f8], /* BRAILLE PATTERN DOTS-45678 */ + [0x28f9, 0x28f9], /* BRAILLE PATTERN DOTS-145678 */ + [0x28fa, 0x28fa], /* BRAILLE PATTERN DOTS-245678 */ + [0x28fb, 0x28fb], /* BRAILLE PATTERN DOTS-1245678 */ + [0x28fc, 0x28fc], /* BRAILLE PATTERN DOTS-345678 */ + [0x28fd, 0x28fd], /* BRAILLE PATTERN DOTS-1345678 */ + [0x28fe, 0x28fe], /* BRAILLE PATTERN DOTS-2345678 */ + [0x28ff, 0x28ff], /* BRAILLE PATTERN DOTS-12345678 */ + [0x2900, 0x2900], /* RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE */ + [0x2901, 0x2901], /* RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE */ + [0x2902, 0x2902], /* LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE */ + [0x2903, 0x2903], /* RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE */ + [0x2904, 0x2904], /* LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE */ + [0x2905, 0x2905], /* RIGHTWARDS TWO-HEADED ARROW FROM BAR */ + [0x2906, 0x2906], /* LEFTWARDS DOUBLE ARROW FROM BAR */ + [0x2907, 0x2907], /* RIGHTWARDS DOUBLE ARROW FROM BAR */ + [0x2908, 0x2908], /* DOWNWARDS ARROW WITH HORIZONTAL STROKE */ + [0x2909, 0x2909], /* UPWARDS ARROW WITH HORIZONTAL STROKE */ + [0x290a, 0x290a], /* UPWARDS TRIPLE ARROW */ + [0x290b, 0x290b], /* DOWNWARDS TRIPLE ARROW */ + [0x290c, 0x290c], /* LEFTWARDS DOUBLE DASH ARROW */ + [0x290d, 0x290d], /* RIGHTWARDS DOUBLE DASH ARROW */ + [0x290e, 0x290e], /* LEFTWARDS TRIPLE DASH ARROW */ + [0x290f, 0x290f], /* RIGHTWARDS TRIPLE DASH ARROW */ + [0x2910, 0x2910], /* RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW */ + [0x2911, 0x2911], /* RIGHTWARDS ARROW WITH DOTTED STEM */ + [0x2912, 0x2912], /* UPWARDS ARROW TO BAR */ + [0x2913, 0x2913], /* DOWNWARDS ARROW TO BAR */ + [0x2914, 0x2914], /* RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE */ + [0x2915, 0x2915], /* RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + [0x2916, 0x2916], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL */ + [0x2917, 0x2917], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE */ + [0x2918, 0x2918], /* RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + [0x2919, 0x2919], /* LEFTWARDS ARROW-TAIL */ + [0x291a, 0x291a], /* RIGHTWARDS ARROW-TAIL */ + [0x291b, 0x291b], /* LEFTWARDS DOUBLE ARROW-TAIL */ + [0x291c, 0x291c], /* RIGHTWARDS DOUBLE ARROW-TAIL */ + [0x291d, 0x291d], /* LEFTWARDS ARROW TO BLACK DIAMOND */ + [0x291e, 0x291e], /* RIGHTWARDS ARROW TO BLACK DIAMOND */ + [0x291f, 0x291f], /* LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND */ + [0x2920, 0x2920], /* RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND */ + [0x2921, 0x2921], /* NORTH WEST AND SOUTH EAST ARROW */ + [0x2922, 0x2922], /* NORTH EAST AND SOUTH WEST ARROW */ + [0x2923, 0x2923], /* NORTH WEST ARROW WITH HOOK */ + [0x2924, 0x2924], /* NORTH EAST ARROW WITH HOOK */ + [0x2925, 0x2925], /* SOUTH EAST ARROW WITH HOOK */ + [0x2926, 0x2926], /* SOUTH WEST ARROW WITH HOOK */ + [0x2927, 0x2927], /* NORTH WEST ARROW AND NORTH EAST ARROW */ + [0x2928, 0x2928], /* NORTH EAST ARROW AND SOUTH EAST ARROW */ + [0x2929, 0x2929], /* SOUTH EAST ARROW AND SOUTH WEST ARROW */ + [0x292a, 0x292a], /* SOUTH WEST ARROW AND NORTH WEST ARROW */ + [0x292b, 0x292b], /* RISING DIAGONAL CROSSING FALLING DIAGONAL */ + [0x292c, 0x292c], /* FALLING DIAGONAL CROSSING RISING DIAGONAL */ + [0x292d, 0x292d], /* SOUTH EAST ARROW CROSSING NORTH EAST ARROW */ + [0x292e, 0x292e], /* NORTH EAST ARROW CROSSING SOUTH EAST ARROW */ + [0x292f, 0x292f], /* FALLING DIAGONAL CROSSING NORTH EAST ARROW */ + [0x2930, 0x2930], /* RISING DIAGONAL CROSSING SOUTH EAST ARROW */ + [0x2931, 0x2931], /* NORTH EAST ARROW CROSSING NORTH WEST ARROW */ + [0x2932, 0x2932], /* NORTH WEST ARROW CROSSING NORTH EAST ARROW */ + [0x2933, 0x2933], /* WAVE ARROW POINTING DIRECTLY RIGHT */ + [0x2934, 0x2934], /* ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS */ + [0x2935, 0x2935], /* ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS */ + [0x2936, 0x2936], /* ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS */ + [0x2937, 0x2937], /* ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS */ + [0x2938, 0x2938], /* RIGHT-SIDE ARC CLOCKWISE ARROW */ + [0x2939, 0x2939], /* LEFT-SIDE ARC ANTICLOCKWISE ARROW */ + [0x293a, 0x293a], /* TOP ARC ANTICLOCKWISE ARROW */ + [0x293b, 0x293b], /* BOTTOM ARC ANTICLOCKWISE ARROW */ + [0x293c, 0x293c], /* TOP ARC CLOCKWISE ARROW WITH MINUS */ + [0x293d, 0x293d], /* TOP ARC ANTICLOCKWISE ARROW WITH PLUS */ + [0x293e, 0x293e], /* LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW */ + [0x293f, 0x293f], /* LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW */ + [0x2940, 0x2940], /* ANTICLOCKWISE CLOSED CIRCLE ARROW */ + [0x2941, 0x2941], /* CLOCKWISE CLOSED CIRCLE ARROW */ + [0x2942, 0x2942], /* RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW */ + [0x2943, 0x2943], /* LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW */ + [0x2944, 0x2944], /* SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW */ + [0x2945, 0x2945], /* RIGHTWARDS ARROW WITH PLUS BELOW */ + [0x2946, 0x2946], /* LEFTWARDS ARROW WITH PLUS BELOW */ + [0x2947, 0x2947], /* RIGHTWARDS ARROW THROUGH X */ + [0x2948, 0x2948], /* LEFT RIGHT ARROW THROUGH SMALL CIRCLE */ + [0x2949, 0x2949], /* UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE */ + [0x294a, 0x294a], /* LEFT BARB UP RIGHT BARB DOWN HARPOON */ + [0x294b, 0x294b], /* LEFT BARB DOWN RIGHT BARB UP HARPOON */ + [0x294c, 0x294c], /* UP BARB RIGHT DOWN BARB LEFT HARPOON */ + [0x294d, 0x294d], /* UP BARB LEFT DOWN BARB RIGHT HARPOON */ + [0x294e, 0x294e], /* LEFT BARB UP RIGHT BARB UP HARPOON */ + [0x294f, 0x294f], /* UP BARB RIGHT DOWN BARB RIGHT HARPOON */ + [0x2950, 0x2950], /* LEFT BARB DOWN RIGHT BARB DOWN HARPOON */ + [0x2951, 0x2951], /* UP BARB LEFT DOWN BARB LEFT HARPOON */ + [0x2952, 0x2952], /* LEFTWARDS HARPOON WITH BARB UP TO BAR */ + [0x2953, 0x2953], /* RIGHTWARDS HARPOON WITH BARB UP TO BAR */ + [0x2954, 0x2954], /* UPWARDS HARPOON WITH BARB RIGHT TO BAR */ + [0x2955, 0x2955], /* DOWNWARDS HARPOON WITH BARB RIGHT TO BAR */ + [0x2956, 0x2956], /* LEFTWARDS HARPOON WITH BARB DOWN TO BAR */ + [0x2957, 0x2957], /* RIGHTWARDS HARPOON WITH BARB DOWN TO BAR */ + [0x2958, 0x2958], /* UPWARDS HARPOON WITH BARB LEFT TO BAR */ + [0x2959, 0x2959], /* DOWNWARDS HARPOON WITH BARB LEFT TO BAR */ + [0x295a, 0x295a], /* LEFTWARDS HARPOON WITH BARB UP FROM BAR */ + [0x295b, 0x295b], /* RIGHTWARDS HARPOON WITH BARB UP FROM BAR */ + [0x295c, 0x295c], /* UPWARDS HARPOON WITH BARB RIGHT FROM BAR */ + [0x295d, 0x295d], /* DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR */ + [0x295e, 0x295e], /* LEFTWARDS HARPOON WITH BARB DOWN FROM BAR */ + [0x295f, 0x295f], /* RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR */ + [0x2960, 0x2960], /* UPWARDS HARPOON WITH BARB LEFT FROM BAR */ + [0x2961, 0x2961], /* DOWNWARDS HARPOON WITH BARB LEFT FROM BAR */ + [0x2962, 0x2962], /* LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN */ + [0x2963, 0x2963], /* UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT */ + [0x2964, 0x2964], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN */ + [0x2965, 0x2965], /* DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT */ + [0x2966, 0x2966], /* LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP */ + [0x2967, 0x2967], /* LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN */ + [0x2968, 0x2968], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP */ + [0x2969, 0x2969], /* RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN */ + [0x296a, 0x296a], /* LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH */ + [0x296b, 0x296b], /* LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH */ + [0x296c, 0x296c], /* RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH */ + [0x296d, 0x296d], /* RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH */ + [0x296e, 0x296e], /* UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT */ + [0x296f, 0x296f], /* DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT */ + [0x2970, 0x2970], /* RIGHT DOUBLE ARROW WITH ROUNDED HEAD */ + [0x2971, 0x2971], /* EQUALS SIGN ABOVE RIGHTWARDS ARROW */ + [0x2972, 0x2972], /* TILDE OPERATOR ABOVE RIGHTWARDS ARROW */ + [0x2973, 0x2973], /* LEFTWARDS ARROW ABOVE TILDE OPERATOR */ + [0x2974, 0x2974], /* RIGHTWARDS ARROW ABOVE TILDE OPERATOR */ + [0x2975, 0x2975], /* RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO */ + [0x2976, 0x2976], /* LESS-THAN ABOVE LEFTWARDS ARROW */ + [0x2977, 0x2977], /* LEFTWARDS ARROW THROUGH LESS-THAN */ + [0x2978, 0x2978], /* GREATER-THAN ABOVE RIGHTWARDS ARROW */ + [0x2979, 0x2979], /* SUBSET ABOVE RIGHTWARDS ARROW */ + [0x297a, 0x297a], /* LEFTWARDS ARROW THROUGH SUBSET */ + [0x297b, 0x297b], /* SUPERSET ABOVE LEFTWARDS ARROW */ + [0x297c, 0x297c], /* LEFT FISH TAIL */ + [0x297d, 0x297d], /* RIGHT FISH TAIL */ + [0x297e, 0x297e], /* UP FISH TAIL */ + [0x297f, 0x297f], /* DOWN FISH TAIL */ + [0x2980, 0x2980], /* TRIPLE VERTICAL BAR DELIMITER */ + [0x2981, 0x2981], /* Z NOTATION SPOT */ + [0x2982, 0x2982], /* Z NOTATION TYPE COLON */ + [0x2983, 0x2983], /* LEFT WHITE CURLY BRACKET */ + [0x2984, 0x2984], /* RIGHT WHITE CURLY BRACKET */ + [0x2985, 0x2985], /* LEFT WHITE PARENTHESIS */ + [0x2986, 0x2986], /* RIGHT WHITE PARENTHESIS */ + [0x2987, 0x2987], /* Z NOTATION LEFT IMAGE BRACKET */ + [0x2988, 0x2988], /* Z NOTATION RIGHT IMAGE BRACKET */ + [0x2989, 0x2989], /* Z NOTATION LEFT BINDING BRACKET */ + [0x298a, 0x298a], /* Z NOTATION RIGHT BINDING BRACKET */ + [0x298b, 0x298b], /* LEFT SQUARE BRACKET WITH UNDERBAR */ + [0x298c, 0x298c], /* RIGHT SQUARE BRACKET WITH UNDERBAR */ + [0x298d, 0x298d], /* LEFT SQUARE BRACKET WITH TICK IN TOP CORNER */ + [0x298e, 0x298e], /* RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER */ + [0x298f, 0x298f], /* LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER */ + [0x2990, 0x2990], /* RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER */ + [0x2991, 0x2991], /* LEFT ANGLE BRACKET WITH DOT */ + [0x2992, 0x2992], /* RIGHT ANGLE BRACKET WITH DOT */ + [0x2993, 0x2993], /* LEFT ARC LESS-THAN BRACKET */ + [0x2994, 0x2994], /* RIGHT ARC GREATER-THAN BRACKET */ + [0x2995, 0x2995], /* DOUBLE LEFT ARC GREATER-THAN BRACKET */ + [0x2996, 0x2996], /* DOUBLE RIGHT ARC LESS-THAN BRACKET */ + [0x2997, 0x2997], /* LEFT BLACK TORTOISE SHELL BRACKET */ + [0x2998, 0x2998], /* RIGHT BLACK TORTOISE SHELL BRACKET */ + [0x2999, 0x2999], /* DOTTED FENCE */ + [0x299a, 0x299a], /* VERTICAL ZIGZAG LINE */ + [0x299b, 0x299b], /* MEASURED ANGLE OPENING LEFT */ + [0x299c, 0x299c], /* RIGHT ANGLE VARIANT WITH SQUARE */ + [0x299d, 0x299d], /* MEASURED RIGHT ANGLE WITH DOT */ + [0x299e, 0x299e], /* ANGLE WITH S INSIDE */ + [0x299f, 0x299f], /* ACUTE ANGLE */ + [0x29a0, 0x29a0], /* SPHERICAL ANGLE OPENING LEFT */ + [0x29a1, 0x29a1], /* SPHERICAL ANGLE OPENING UP */ + [0x29a2, 0x29a2], /* TURNED ANGLE */ + [0x29a3, 0x29a3], /* REVERSED ANGLE */ + [0x29a4, 0x29a4], /* ANGLE WITH UNDERBAR */ + [0x29a5, 0x29a5], /* REVERSED ANGLE WITH UNDERBAR */ + [0x29a6, 0x29a6], /* OBLIQUE ANGLE OPENING UP */ + [0x29a7, 0x29a7], /* OBLIQUE ANGLE OPENING DOWN */ + [0x29a8, 0x29a8], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT */ + [0x29a9, 0x29a9], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT */ + [0x29aa, 0x29aa], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT */ + [0x29ab, 0x29ab], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT */ + [0x29ac, 0x29ac], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP */ + [0x29ad, 0x29ad], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP */ + [0x29ae, 0x29ae], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN */ + [0x29af, 0x29af], /* MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN */ + [0x29b0, 0x29b0], /* REVERSED EMPTY SET */ + [0x29b1, 0x29b1], /* EMPTY SET WITH OVERBAR */ + [0x29b2, 0x29b2], /* EMPTY SET WITH SMALL CIRCLE ABOVE */ + [0x29b3, 0x29b3], /* EMPTY SET WITH RIGHT ARROW ABOVE */ + [0x29b4, 0x29b4], /* EMPTY SET WITH LEFT ARROW ABOVE */ + [0x29b5, 0x29b5], /* CIRCLE WITH HORIZONTAL BAR */ + [0x29b6, 0x29b6], /* CIRCLED VERTICAL BAR */ + [0x29b7, 0x29b7], /* CIRCLED PARALLEL */ + [0x29b8, 0x29b8], /* CIRCLED REVERSE SOLIDUS */ + [0x29b9, 0x29b9], /* CIRCLED PERPENDICULAR */ + [0x29ba, 0x29ba], /* CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR */ + [0x29bb, 0x29bb], /* CIRCLE WITH SUPERIMPOSED X */ + [0x29bc, 0x29bc], /* CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN */ + [0x29bd, 0x29bd], /* UP ARROW THROUGH CIRCLE */ + [0x29be, 0x29be], /* CIRCLED WHITE BULLET */ + [0x29bf, 0x29bf], /* CIRCLED BULLET */ + [0x29c0, 0x29c0], /* CIRCLED LESS-THAN */ + [0x29c1, 0x29c1], /* CIRCLED GREATER-THAN */ + [0x29c2, 0x29c2], /* CIRCLE WITH SMALL CIRCLE TO THE RIGHT */ + [0x29c3, 0x29c3], /* CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT */ + [0x29c4, 0x29c4], /* SQUARED RISING DIAGONAL SLASH */ + [0x29c5, 0x29c5], /* SQUARED FALLING DIAGONAL SLASH */ + [0x29c6, 0x29c6], /* SQUARED ASTERISK */ + [0x29c7, 0x29c7], /* SQUARED SMALL CIRCLE */ + [0x29c8, 0x29c8], /* SQUARED SQUARE */ + [0x29c9, 0x29c9], /* TWO JOINED SQUARES */ + [0x29ca, 0x29ca], /* TRIANGLE WITH DOT ABOVE */ + [0x29cb, 0x29cb], /* TRIANGLE WITH UNDERBAR */ + [0x29cc, 0x29cc], /* S IN TRIANGLE */ + [0x29cd, 0x29cd], /* TRIANGLE WITH SERIFS AT BOTTOM */ + [0x29ce, 0x29ce], /* RIGHT TRIANGLE ABOVE LEFT TRIANGLE */ + [0x29cf, 0x29cf], /* LEFT TRIANGLE BESIDE VERTICAL BAR */ + [0x29d0, 0x29d0], /* VERTICAL BAR BESIDE RIGHT TRIANGLE */ + [0x29d1, 0x29d1], /* BOWTIE WITH LEFT HALF BLACK */ + [0x29d2, 0x29d2], /* BOWTIE WITH RIGHT HALF BLACK */ + [0x29d3, 0x29d3], /* BLACK BOWTIE */ + [0x29d4, 0x29d4], /* TIMES WITH LEFT HALF BLACK */ + [0x29d5, 0x29d5], /* TIMES WITH RIGHT HALF BLACK */ + [0x29d6, 0x29d6], /* WHITE HOURGLASS */ + [0x29d7, 0x29d7], /* BLACK HOURGLASS */ + [0x29d8, 0x29d8], /* LEFT WIGGLY FENCE */ + [0x29d9, 0x29d9], /* RIGHT WIGGLY FENCE */ + [0x29da, 0x29da], /* LEFT DOUBLE WIGGLY FENCE */ + [0x29db, 0x29db], /* RIGHT DOUBLE WIGGLY FENCE */ + [0x29dc, 0x29dc], /* INCOMPLETE INFINITY */ + [0x29dd, 0x29dd], /* TIE OVER INFINITY */ + [0x29de, 0x29de], /* INFINITY NEGATED WITH VERTICAL BAR */ + [0x29df, 0x29df], /* DOUBLE-ENDED MULTIMAP */ + [0x29e0, 0x29e0], /* SQUARE WITH CONTOURED OUTLINE */ + [0x29e1, 0x29e1], /* INCREASES AS */ + [0x29e2, 0x29e2], /* SHUFFLE PRODUCT */ + [0x29e3, 0x29e3], /* EQUALS SIGN AND SLANTED PARALLEL */ + [0x29e4, 0x29e4], /* EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE */ + [0x29e5, 0x29e5], /* IDENTICAL TO AND SLANTED PARALLEL */ + [0x29e6, 0x29e6], /* GLEICH STARK */ + [0x29e7, 0x29e7], /* THERMODYNAMIC */ + [0x29e8, 0x29e8], /* DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK */ + [0x29e9, 0x29e9], /* DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK */ + [0x29ea, 0x29ea], /* BLACK DIAMOND WITH DOWN ARROW */ + [0x29eb, 0x29eb], /* BLACK LOZENGE */ + [0x29ec, 0x29ec], /* WHITE CIRCLE WITH DOWN ARROW */ + [0x29ed, 0x29ed], /* BLACK CIRCLE WITH DOWN ARROW */ + [0x29ee, 0x29ee], /* ERROR-BARRED WHITE SQUARE */ + [0x29ef, 0x29ef], /* ERROR-BARRED BLACK SQUARE */ + [0x29f0, 0x29f0], /* ERROR-BARRED WHITE DIAMOND */ + [0x29f1, 0x29f1], /* ERROR-BARRED BLACK DIAMOND */ + [0x29f2, 0x29f2], /* ERROR-BARRED WHITE CIRCLE */ + [0x29f3, 0x29f3], /* ERROR-BARRED BLACK CIRCLE */ + [0x29f4, 0x29f4], /* RULE-DELAYED */ + [0x29f5, 0x29f5], /* REVERSE SOLIDUS OPERATOR */ + [0x29f6, 0x29f6], /* SOLIDUS WITH OVERBAR */ + [0x29f7, 0x29f7], /* REVERSE SOLIDUS WITH HORIZONTAL STROKE */ + [0x29f8, 0x29f8], /* BIG SOLIDUS */ + [0x29f9, 0x29f9], /* BIG REVERSE SOLIDUS */ + [0x29fa, 0x29fa], /* DOUBLE PLUS */ + [0x29fb, 0x29fb], /* TRIPLE PLUS */ + [0x29fc, 0x29fc], /* LEFT-POINTING CURVED ANGLE BRACKET */ + [0x29fd, 0x29fd], /* RIGHT-POINTING CURVED ANGLE BRACKET */ + [0x29fe, 0x29fe], /* TINY */ + [0x29ff, 0x29ff], /* MINY */ + [0x2a00, 0x2a00], /* N-ARY CIRCLED DOT OPERATOR */ + [0x2a01, 0x2a01], /* N-ARY CIRCLED PLUS OPERATOR */ + [0x2a02, 0x2a02], /* N-ARY CIRCLED TIMES OPERATOR */ + [0x2a03, 0x2a03], /* N-ARY UNION OPERATOR WITH DOT */ + [0x2a04, 0x2a04], /* N-ARY UNION OPERATOR WITH PLUS */ + [0x2a05, 0x2a05], /* N-ARY SQUARE INTERSECTION OPERATOR */ + [0x2a06, 0x2a06], /* N-ARY SQUARE UNION OPERATOR */ + [0x2a07, 0x2a07], /* TWO LOGICAL AND OPERATOR */ + [0x2a08, 0x2a08], /* TWO LOGICAL OR OPERATOR */ + [0x2a09, 0x2a09], /* N-ARY TIMES OPERATOR */ + [0x2a0a, 0x2a0a], /* MODULO TWO SUM */ + [0x2a0b, 0x2a0b], /* SUMMATION WITH INTEGRAL */ + [0x2a0c, 0x2a0c], /* QUADRUPLE INTEGRAL OPERATOR */ + [0x2a0d, 0x2a0d], /* FINITE PART INTEGRAL */ + [0x2a0e, 0x2a0e], /* INTEGRAL WITH DOUBLE STROKE */ + [0x2a0f, 0x2a0f], /* INTEGRAL AVERAGE WITH SLASH */ + [0x2a10, 0x2a10], /* CIRCULATION FUNCTION */ + [0x2a11, 0x2a11], /* ANTICLOCKWISE INTEGRATION */ + [0x2a12, 0x2a12], /* LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE */ + [0x2a13, 0x2a13], /* LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE */ + [0x2a14, 0x2a14], /* LINE INTEGRATION NOT INCLUDING THE POLE */ + [0x2a15, 0x2a15], /* INTEGRAL AROUND A POINT OPERATOR */ + [0x2a16, 0x2a16], /* QUATERNION INTEGRAL OPERATOR */ + [0x2a17, 0x2a17], /* INTEGRAL WITH LEFTWARDS ARROW WITH HOOK */ + [0x2a18, 0x2a18], /* INTEGRAL WITH TIMES SIGN */ + [0x2a19, 0x2a19], /* INTEGRAL WITH INTERSECTION */ + [0x2a1a, 0x2a1a], /* INTEGRAL WITH UNION */ + [0x2a1b, 0x2a1b], /* INTEGRAL WITH OVERBAR */ + [0x2a1c, 0x2a1c], /* INTEGRAL WITH UNDERBAR */ + [0x2a1d, 0x2a1d], /* JOIN */ + [0x2a1e, 0x2a1e], /* LARGE LEFT TRIANGLE OPERATOR */ + [0x2a1f, 0x2a1f], /* Z NOTATION SCHEMA COMPOSITION */ + [0x2a20, 0x2a20], /* Z NOTATION SCHEMA PIPING */ + [0x2a21, 0x2a21], /* Z NOTATION SCHEMA PROJECTION */ + [0x2a22, 0x2a22], /* PLUS SIGN WITH SMALL CIRCLE ABOVE */ + [0x2a23, 0x2a23], /* PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE */ + [0x2a24, 0x2a24], /* PLUS SIGN WITH TILDE ABOVE */ + [0x2a25, 0x2a25], /* PLUS SIGN WITH DOT BELOW */ + [0x2a26, 0x2a26], /* PLUS SIGN WITH TILDE BELOW */ + [0x2a27, 0x2a27], /* PLUS SIGN WITH SUBSCRIPT TWO */ + [0x2a28, 0x2a28], /* PLUS SIGN WITH BLACK TRIANGLE */ + [0x2a29, 0x2a29], /* MINUS SIGN WITH COMMA ABOVE */ + [0x2a2a, 0x2a2a], /* MINUS SIGN WITH DOT BELOW */ + [0x2a2b, 0x2a2b], /* MINUS SIGN WITH FALLING DOTS */ + [0x2a2c, 0x2a2c], /* MINUS SIGN WITH RISING DOTS */ + [0x2a2d, 0x2a2d], /* PLUS SIGN IN LEFT HALF CIRCLE */ + [0x2a2e, 0x2a2e], /* PLUS SIGN IN RIGHT HALF CIRCLE */ + [0x2a2f, 0x2a2f], /* VECTOR OR CROSS PRODUCT */ + [0x2a30, 0x2a30], /* MULTIPLICATION SIGN WITH DOT ABOVE */ + [0x2a31, 0x2a31], /* MULTIPLICATION SIGN WITH UNDERBAR */ + [0x2a32, 0x2a32], /* SEMIDIRECT PRODUCT WITH BOTTOM CLOSED */ + [0x2a33, 0x2a33], /* SMASH PRODUCT */ + [0x2a34, 0x2a34], /* MULTIPLICATION SIGN IN LEFT HALF CIRCLE */ + [0x2a35, 0x2a35], /* MULTIPLICATION SIGN IN RIGHT HALF CIRCLE */ + [0x2a36, 0x2a36], /* CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT */ + [0x2a37, 0x2a37], /* MULTIPLICATION SIGN IN DOUBLE CIRCLE */ + [0x2a38, 0x2a38], /* CIRCLED DIVISION SIGN */ + [0x2a39, 0x2a39], /* PLUS SIGN IN TRIANGLE */ + [0x2a3a, 0x2a3a], /* MINUS SIGN IN TRIANGLE */ + [0x2a3b, 0x2a3b], /* MULTIPLICATION SIGN IN TRIANGLE */ + [0x2a3c, 0x2a3c], /* INTERIOR PRODUCT */ + [0x2a3d, 0x2a3d], /* RIGHTHAND INTERIOR PRODUCT */ + [0x2a3e, 0x2a3e], /* Z NOTATION RELATIONAL COMPOSITION */ + [0x2a3f, 0x2a3f], /* AMALGAMATION OR COPRODUCT */ + [0x2a40, 0x2a40], /* INTERSECTION WITH DOT */ + [0x2a41, 0x2a41], /* UNION WITH MINUS SIGN */ + [0x2a42, 0x2a42], /* UNION WITH OVERBAR */ + [0x2a43, 0x2a43], /* INTERSECTION WITH OVERBAR */ + [0x2a44, 0x2a44], /* INTERSECTION WITH LOGICAL AND */ + [0x2a45, 0x2a45], /* UNION WITH LOGICAL OR */ + [0x2a46, 0x2a46], /* UNION ABOVE INTERSECTION */ + [0x2a47, 0x2a47], /* INTERSECTION ABOVE UNION */ + [0x2a48, 0x2a48], /* UNION ABOVE BAR ABOVE INTERSECTION */ + [0x2a49, 0x2a49], /* INTERSECTION ABOVE BAR ABOVE UNION */ + [0x2a4a, 0x2a4a], /* UNION BESIDE AND JOINED WITH UNION */ + [0x2a4b, 0x2a4b], /* INTERSECTION BESIDE AND JOINED WITH INTERSECTION */ + [0x2a4c, 0x2a4c], /* CLOSED UNION WITH SERIFS */ + [0x2a4d, 0x2a4d], /* CLOSED INTERSECTION WITH SERIFS */ + [0x2a4e, 0x2a4e], /* DOUBLE SQUARE INTERSECTION */ + [0x2a4f, 0x2a4f], /* DOUBLE SQUARE UNION */ + [0x2a50, 0x2a50], /* CLOSED UNION WITH SERIFS AND SMASH PRODUCT */ + [0x2a51, 0x2a51], /* LOGICAL AND WITH DOT ABOVE */ + [0x2a52, 0x2a52], /* LOGICAL OR WITH DOT ABOVE */ + [0x2a53, 0x2a53], /* DOUBLE LOGICAL AND */ + [0x2a54, 0x2a54], /* DOUBLE LOGICAL OR */ + [0x2a55, 0x2a55], /* TWO INTERSECTING LOGICAL AND */ + [0x2a56, 0x2a56], /* TWO INTERSECTING LOGICAL OR */ + [0x2a57, 0x2a57], /* SLOPING LARGE OR */ + [0x2a58, 0x2a58], /* SLOPING LARGE AND */ + [0x2a59, 0x2a59], /* LOGICAL OR OVERLAPPING LOGICAL AND */ + [0x2a5a, 0x2a5a], /* LOGICAL AND WITH MIDDLE STEM */ + [0x2a5b, 0x2a5b], /* LOGICAL OR WITH MIDDLE STEM */ + [0x2a5c, 0x2a5c], /* LOGICAL AND WITH HORIZONTAL DASH */ + [0x2a5d, 0x2a5d], /* LOGICAL OR WITH HORIZONTAL DASH */ + [0x2a5e, 0x2a5e], /* LOGICAL AND WITH DOUBLE OVERBAR */ + [0x2a5f, 0x2a5f], /* LOGICAL AND WITH UNDERBAR */ + [0x2a60, 0x2a60], /* LOGICAL AND WITH DOUBLE UNDERBAR */ + [0x2a61, 0x2a61], /* SMALL VEE WITH UNDERBAR */ + [0x2a62, 0x2a62], /* LOGICAL OR WITH DOUBLE OVERBAR */ + [0x2a63, 0x2a63], /* LOGICAL OR WITH DOUBLE UNDERBAR */ + [0x2a64, 0x2a64], /* Z NOTATION DOMAIN ANTIRESTRICTION */ + [0x2a65, 0x2a65], /* Z NOTATION RANGE ANTIRESTRICTION */ + [0x2a66, 0x2a66], /* EQUALS SIGN WITH DOT BELOW */ + [0x2a67, 0x2a67], /* IDENTICAL WITH DOT ABOVE */ + [0x2a68, 0x2a68], /* TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE */ + [0x2a69, 0x2a69], /* TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE */ + [0x2a6a, 0x2a6a], /* TILDE OPERATOR WITH DOT ABOVE */ + [0x2a6b, 0x2a6b], /* TILDE OPERATOR WITH RISING DOTS */ + [0x2a6c, 0x2a6c], /* SIMILAR MINUS SIMILAR */ + [0x2a6d, 0x2a6d], /* CONGRUENT WITH DOT ABOVE */ + [0x2a6e, 0x2a6e], /* EQUALS WITH ASTERISK */ + [0x2a6f, 0x2a6f], /* ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT */ + [0x2a70, 0x2a70], /* APPROXIMATELY EQUAL OR EQUAL TO */ + [0x2a71, 0x2a71], /* EQUALS SIGN ABOVE PLUS SIGN */ + [0x2a72, 0x2a72], /* PLUS SIGN ABOVE EQUALS SIGN */ + [0x2a73, 0x2a73], /* EQUALS SIGN ABOVE TILDE OPERATOR */ + [0x2a74, 0x2a74], /* DOUBLE COLON EQUAL */ + [0x2a75, 0x2a75], /* TWO CONSECUTIVE EQUALS SIGNS */ + [0x2a76, 0x2a76], /* THREE CONSECUTIVE EQUALS SIGNS */ + [0x2a77, 0x2a77], /* EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW */ + [0x2a78, 0x2a78], /* EQUIVALENT WITH FOUR DOTS ABOVE */ + [0x2a79, 0x2a79], /* LESS-THAN WITH CIRCLE INSIDE */ + [0x2a7a, 0x2a7a], /* GREATER-THAN WITH CIRCLE INSIDE */ + [0x2a7b, 0x2a7b], /* LESS-THAN WITH QUESTION MARK ABOVE */ + [0x2a7c, 0x2a7c], /* GREATER-THAN WITH QUESTION MARK ABOVE */ + [0x2a7d, 0x2a7d], /* LESS-THAN OR SLANTED EQUAL TO */ + [0x2a7e, 0x2a7e], /* GREATER-THAN OR SLANTED EQUAL TO */ + [0x2a7f, 0x2a7f], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE */ + [0x2a80, 0x2a80], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE */ + [0x2a81, 0x2a81], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE */ + [0x2a82, 0x2a82], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE */ + [0x2a83, 0x2a83], /* LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT */ + [0x2a84, 0x2a84], /* GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT */ + [0x2a85, 0x2a85], /* LESS-THAN OR APPROXIMATE */ + [0x2a86, 0x2a86], /* GREATER-THAN OR APPROXIMATE */ + [0x2a87, 0x2a87], /* LESS-THAN AND SINGLE-LINE NOT EQUAL TO */ + [0x2a88, 0x2a88], /* GREATER-THAN AND SINGLE-LINE NOT EQUAL TO */ + [0x2a89, 0x2a89], /* LESS-THAN AND NOT APPROXIMATE */ + [0x2a8a, 0x2a8a], /* GREATER-THAN AND NOT APPROXIMATE */ + [0x2a8b, 0x2a8b], /* LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN */ + [0x2a8c, 0x2a8c], /* GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN */ + [0x2a8d, 0x2a8d], /* LESS-THAN ABOVE SIMILAR OR EQUAL */ + [0x2a8e, 0x2a8e], /* GREATER-THAN ABOVE SIMILAR OR EQUAL */ + [0x2a8f, 0x2a8f], /* LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN */ + [0x2a90, 0x2a90], /* GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN */ + [0x2a91, 0x2a91], /* LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL */ + [0x2a92, 0x2a92], /* GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL */ + [0x2a93, 0x2a93], /* LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL */ + [0x2a94, 0x2a94], /* GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL */ + [0x2a95, 0x2a95], /* SLANTED EQUAL TO OR LESS-THAN */ + [0x2a96, 0x2a96], /* SLANTED EQUAL TO OR GREATER-THAN */ + [0x2a97, 0x2a97], /* SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE */ + [0x2a98, 0x2a98], /* SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE */ + [0x2a99, 0x2a99], /* DOUBLE-LINE EQUAL TO OR LESS-THAN */ + [0x2a9a, 0x2a9a], /* DOUBLE-LINE EQUAL TO OR GREATER-THAN */ + [0x2a9b, 0x2a9b], /* DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN */ + [0x2a9c, 0x2a9c], /* DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN */ + [0x2a9d, 0x2a9d], /* SIMILAR OR LESS-THAN */ + [0x2a9e, 0x2a9e], /* SIMILAR OR GREATER-THAN */ + [0x2a9f, 0x2a9f], /* SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN */ + [0x2aa0, 0x2aa0], /* SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN */ + [0x2aa1, 0x2aa1], /* DOUBLE NESTED LESS-THAN */ + [0x2aa2, 0x2aa2], /* DOUBLE NESTED GREATER-THAN */ + [0x2aa3, 0x2aa3], /* DOUBLE NESTED LESS-THAN WITH UNDERBAR */ + [0x2aa4, 0x2aa4], /* GREATER-THAN OVERLAPPING LESS-THAN */ + [0x2aa5, 0x2aa5], /* GREATER-THAN BESIDE LESS-THAN */ + [0x2aa6, 0x2aa6], /* LESS-THAN CLOSED BY CURVE */ + [0x2aa7, 0x2aa7], /* GREATER-THAN CLOSED BY CURVE */ + [0x2aa8, 0x2aa8], /* LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL */ + [0x2aa9, 0x2aa9], /* GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL */ + [0x2aaa, 0x2aaa], /* SMALLER THAN */ + [0x2aab, 0x2aab], /* LARGER THAN */ + [0x2aac, 0x2aac], /* SMALLER THAN OR EQUAL TO */ + [0x2aad, 0x2aad], /* LARGER THAN OR EQUAL TO */ + [0x2aae, 0x2aae], /* EQUALS SIGN WITH BUMPY ABOVE */ + [0x2aaf, 0x2aaf], /* PRECEDES ABOVE SINGLE-LINE EQUALS SIGN */ + [0x2ab0, 0x2ab0], /* SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN */ + [0x2ab1, 0x2ab1], /* PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO */ + [0x2ab2, 0x2ab2], /* SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO */ + [0x2ab3, 0x2ab3], /* PRECEDES ABOVE EQUALS SIGN */ + [0x2ab4, 0x2ab4], /* SUCCEEDS ABOVE EQUALS SIGN */ + [0x2ab5, 0x2ab5], /* PRECEDES ABOVE NOT EQUAL TO */ + [0x2ab6, 0x2ab6], /* SUCCEEDS ABOVE NOT EQUAL TO */ + [0x2ab7, 0x2ab7], /* PRECEDES ABOVE ALMOST EQUAL TO */ + [0x2ab8, 0x2ab8], /* SUCCEEDS ABOVE ALMOST EQUAL TO */ + [0x2ab9, 0x2ab9], /* PRECEDES ABOVE NOT ALMOST EQUAL TO */ + [0x2aba, 0x2aba], /* SUCCEEDS ABOVE NOT ALMOST EQUAL TO */ + [0x2abb, 0x2abb], /* DOUBLE PRECEDES */ + [0x2abc, 0x2abc], /* DOUBLE SUCCEEDS */ + [0x2abd, 0x2abd], /* SUBSET WITH DOT */ + [0x2abe, 0x2abe], /* SUPERSET WITH DOT */ + [0x2abf, 0x2abf], /* SUBSET WITH PLUS SIGN BELOW */ + [0x2ac0, 0x2ac0], /* SUPERSET WITH PLUS SIGN BELOW */ + [0x2ac1, 0x2ac1], /* SUBSET WITH MULTIPLICATION SIGN BELOW */ + [0x2ac2, 0x2ac2], /* SUPERSET WITH MULTIPLICATION SIGN BELOW */ + [0x2ac3, 0x2ac3], /* SUBSET OF OR EQUAL TO WITH DOT ABOVE */ + [0x2ac4, 0x2ac4], /* SUPERSET OF OR EQUAL TO WITH DOT ABOVE */ + [0x2ac5, 0x2ac5], /* SUBSET OF ABOVE EQUALS SIGN */ + [0x2ac6, 0x2ac6], /* SUPERSET OF ABOVE EQUALS SIGN */ + [0x2ac7, 0x2ac7], /* SUBSET OF ABOVE TILDE OPERATOR */ + [0x2ac8, 0x2ac8], /* SUPERSET OF ABOVE TILDE OPERATOR */ + [0x2ac9, 0x2ac9], /* SUBSET OF ABOVE ALMOST EQUAL TO */ + [0x2aca, 0x2aca], /* SUPERSET OF ABOVE ALMOST EQUAL TO */ + [0x2acb, 0x2acb], /* SUBSET OF ABOVE NOT EQUAL TO */ + [0x2acc, 0x2acc], /* SUPERSET OF ABOVE NOT EQUAL TO */ + [0x2acd, 0x2acd], /* SQUARE LEFT OPEN BOX OPERATOR */ + [0x2ace, 0x2ace], /* SQUARE RIGHT OPEN BOX OPERATOR */ + [0x2acf, 0x2acf], /* CLOSED SUBSET */ + [0x2ad0, 0x2ad0], /* CLOSED SUPERSET */ + [0x2ad1, 0x2ad1], /* CLOSED SUBSET OR EQUAL TO */ + [0x2ad2, 0x2ad2], /* CLOSED SUPERSET OR EQUAL TO */ + [0x2ad3, 0x2ad3], /* SUBSET ABOVE SUPERSET */ + [0x2ad4, 0x2ad4], /* SUPERSET ABOVE SUBSET */ + [0x2ad5, 0x2ad5], /* SUBSET ABOVE SUBSET */ + [0x2ad6, 0x2ad6], /* SUPERSET ABOVE SUPERSET */ + [0x2ad7, 0x2ad7], /* SUPERSET BESIDE SUBSET */ + [0x2ad8, 0x2ad8], /* SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET */ + [0x2ad9, 0x2ad9], /* ELEMENT OF OPENING DOWNWARDS */ + [0x2ada, 0x2ada], /* PITCHFORK WITH TEE TOP */ + [0x2adb, 0x2adb], /* TRANSVERSAL INTERSECTION */ + [0x2adc, 0x2adc], /* FORKING */ + [0x2add, 0x2add], /* NONFORKING */ + [0x2ade, 0x2ade], /* SHORT LEFT TACK */ + [0x2adf, 0x2adf], /* SHORT DOWN TACK */ + [0x2ae0, 0x2ae0], /* SHORT UP TACK */ + [0x2ae1, 0x2ae1], /* PERPENDICULAR WITH S */ + [0x2ae2, 0x2ae2], /* VERTICAL BAR TRIPLE RIGHT TURNSTILE */ + [0x2ae3, 0x2ae3], /* DOUBLE VERTICAL BAR LEFT TURNSTILE */ + [0x2ae4, 0x2ae4], /* VERTICAL BAR DOUBLE LEFT TURNSTILE */ + [0x2ae5, 0x2ae5], /* DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE */ + [0x2ae6, 0x2ae6], /* LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL */ + [0x2ae7, 0x2ae7], /* SHORT DOWN TACK WITH OVERBAR */ + [0x2ae8, 0x2ae8], /* SHORT UP TACK WITH UNDERBAR */ + [0x2ae9, 0x2ae9], /* SHORT UP TACK ABOVE SHORT DOWN TACK */ + [0x2aea, 0x2aea], /* DOUBLE DOWN TACK */ + [0x2aeb, 0x2aeb], /* DOUBLE UP TACK */ + [0x2aec, 0x2aec], /* DOUBLE STROKE NOT SIGN */ + [0x2aed, 0x2aed], /* REVERSED DOUBLE STROKE NOT SIGN */ + [0x2aee, 0x2aee], /* DOES NOT DIVIDE WITH REVERSED NEGATION SLASH */ + [0x2aef, 0x2aef], /* VERTICAL LINE WITH CIRCLE ABOVE */ + [0x2af0, 0x2af0], /* VERTICAL LINE WITH CIRCLE BELOW */ + [0x2af1, 0x2af1], /* DOWN TACK WITH CIRCLE BELOW */ + [0x2af2, 0x2af2], /* PARALLEL WITH HORIZONTAL STROKE */ + [0x2af3, 0x2af3], /* PARALLEL WITH TILDE OPERATOR */ + [0x2af4, 0x2af4], /* TRIPLE VERTICAL BAR BINARY RELATION */ + [0x2af5, 0x2af5], /* TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE */ + [0x2af6, 0x2af6], /* TRIPLE COLON OPERATOR */ + [0x2af7, 0x2af7], /* TRIPLE NESTED LESS-THAN */ + [0x2af8, 0x2af8], /* TRIPLE NESTED GREATER-THAN */ + [0x2af9, 0x2af9], /* DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO */ + [0x2afa, 0x2afa], /* DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO */ + [0x2afb, 0x2afb], /* TRIPLE SOLIDUS BINARY RELATION */ + [0x2afc, 0x2afc], /* LARGE TRIPLE VERTICAL BAR OPERATOR */ + [0x2afd, 0x2afd], /* DOUBLE SOLIDUS OPERATOR */ + [0x2afe, 0x2afe], /* WHITE VERTICAL BAR */ + [0x2aff, 0x2aff], /* N-ARY WHITE VERTICAL BAR */ + [0x2b00, 0x2b00], /* NORTH EAST WHITE ARROW */ + [0x2b01, 0x2b01], /* NORTH WEST WHITE ARROW */ + [0x2b02, 0x2b02], /* SOUTH EAST WHITE ARROW */ + [0x2b03, 0x2b03], /* SOUTH WEST WHITE ARROW */ + [0x2b04, 0x2b04], /* LEFT RIGHT WHITE ARROW */ + [0x2b05, 0x2b05], /* LEFTWARDS BLACK ARROW */ + [0x2b06, 0x2b06], /* UPWARDS BLACK ARROW */ + [0x2b07, 0x2b07], /* DOWNWARDS BLACK ARROW */ + [0x2b08, 0x2b08], /* NORTH EAST BLACK ARROW */ + [0x2b09, 0x2b09], /* NORTH WEST BLACK ARROW */ + [0x2b0a, 0x2b0a], /* SOUTH EAST BLACK ARROW */ + [0x2b0b, 0x2b0b], /* SOUTH WEST BLACK ARROW */ + [0x2b0c, 0x2b0c], /* LEFT RIGHT BLACK ARROW */ + [0x2b0d, 0x2b0d], /* UP DOWN BLACK ARROW */ + [0x2b0e, 0x2b0e], /* RIGHTWARDS ARROW WITH TIP DOWNWARDS */ + [0x2b0f, 0x2b0f], /* RIGHTWARDS ARROW WITH TIP UPWARDS */ + [0x2b10, 0x2b10], /* LEFTWARDS ARROW WITH TIP DOWNWARDS */ + [0x2b11, 0x2b11], /* LEFTWARDS ARROW WITH TIP UPWARDS */ + [0x2b12, 0x2b12], /* SQUARE WITH TOP HALF BLACK */ + [0x2b13, 0x2b13], /* SQUARE WITH BOTTOM HALF BLACK */ + [0x2b14, 0x2b14], /* SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK */ + [0x2b15, 0x2b15], /* SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK */ + [0x2b16, 0x2b16], /* DIAMOND WITH LEFT HALF BLACK */ + [0x2b17, 0x2b17], /* DIAMOND WITH RIGHT HALF BLACK */ + [0x2b18, 0x2b18], /* DIAMOND WITH TOP HALF BLACK */ + [0x2b19, 0x2b19], /* DIAMOND WITH BOTTOM HALF BLACK */ + [0x2b1a, 0x2b1a], /* DOTTED SQUARE */ + [0x2b1b, 0x2b1b], /* BLACK LARGE SQUARE */ + [0x2b1c, 0x2b1c], /* WHITE LARGE SQUARE */ + [0x2b1d, 0x2b1d], /* BLACK VERY SMALL SQUARE */ + [0x2b1e, 0x2b1e], /* WHITE VERY SMALL SQUARE */ + [0x2b1f, 0x2b1f], /* BLACK PENTAGON */ + [0x2b20, 0x2b20], /* WHITE PENTAGON */ + [0x2b21, 0x2b21], /* WHITE HEXAGON */ + [0x2b22, 0x2b22], /* BLACK HEXAGON */ + [0x2b23, 0x2b23], /* HORIZONTAL BLACK HEXAGON */ + [0x2b24, 0x2b24], /* BLACK LARGE CIRCLE */ + [0x2b25, 0x2b25], /* BLACK MEDIUM DIAMOND */ + [0x2b26, 0x2b26], /* WHITE MEDIUM DIAMOND */ + [0x2b27, 0x2b27], /* BLACK MEDIUM LOZENGE */ + [0x2b28, 0x2b28], /* WHITE MEDIUM LOZENGE */ + [0x2b29, 0x2b29], /* BLACK SMALL DIAMOND */ + [0x2b2a, 0x2b2a], /* BLACK SMALL LOZENGE */ + [0x2b2b, 0x2b2b], /* WHITE SMALL LOZENGE */ + [0x2b2c, 0x2b2c], /* BLACK HORIZONTAL ELLIPSE */ + [0x2b2d, 0x2b2d], /* WHITE HORIZONTAL ELLIPSE */ + [0x2b2e, 0x2b2e], /* BLACK VERTICAL ELLIPSE */ + [0x2b2f, 0x2b2f], /* WHITE VERTICAL ELLIPSE */ + [0x2b30, 0x2b30], /* LEFT ARROW WITH SMALL CIRCLE */ + [0x2b31, 0x2b31], /* THREE LEFTWARDS ARROWS */ + [0x2b32, 0x2b32], /* LEFT ARROW WITH CIRCLED PLUS */ + [0x2b33, 0x2b33], /* LONG LEFTWARDS SQUIGGLE ARROW */ + [0x2b34, 0x2b34], /* LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE */ + [0x2b35, 0x2b35], /* LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE */ + [0x2b36, 0x2b36], /* LEFTWARDS TWO-HEADED ARROW FROM BAR */ + [0x2b37, 0x2b37], /* LEFTWARDS TWO-HEADED TRIPLE DASH ARROW */ + [0x2b38, 0x2b38], /* LEFTWARDS ARROW WITH DOTTED STEM */ + [0x2b39, 0x2b39], /* LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE */ + [0x2b3a, 0x2b3a], /* LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + [0x2b3b, 0x2b3b], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL */ + [0x2b3c, 0x2b3c], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE */ + [0x2b3d, 0x2b3d], /* LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE */ + [0x2b3e, 0x2b3e], /* LEFTWARDS ARROW THROUGH X */ + [0x2b3f, 0x2b3f], /* WAVE ARROW POINTING DIRECTLY LEFT */ + [0x2b40, 0x2b40], /* EQUALS SIGN ABOVE LEFTWARDS ARROW */ + [0x2b41, 0x2b41], /* REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW */ + [0x2b42, 0x2b42], /* LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO */ + [0x2b43, 0x2b43], /* RIGHTWARDS ARROW THROUGH GREATER-THAN */ + [0x2b44, 0x2b44], /* RIGHTWARDS ARROW THROUGH SUPERSET */ + [0x2b45, 0x2b45], /* LEFTWARDS QUADRUPLE ARROW */ + [0x2b46, 0x2b46], /* RIGHTWARDS QUADRUPLE ARROW */ + [0x2b47, 0x2b47], /* REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW */ + [0x2b48, 0x2b48], /* RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO */ + [0x2b49, 0x2b49], /* TILDE OPERATOR ABOVE LEFTWARDS ARROW */ + [0x2b4a, 0x2b4a], /* LEFTWARDS ARROW ABOVE ALMOST EQUAL TO */ + [0x2b4b, 0x2b4b], /* LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR */ + [0x2b4c, 0x2b4c], /* RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR */ + [0x2b4d, 0x2b4d], + [0x2b4e, 0x2b4e], + [0x2b4f, 0x2b4f], + [0x2b50, 0x2b50], /* WHITE MEDIUM STAR */ + [0x2b51, 0x2b51], /* BLACK SMALL STAR */ + [0x2b52, 0x2b52], /* WHITE SMALL STAR */ + [0x2b53, 0x2b53], /* BLACK RIGHT-POINTING PENTAGON */ + [0x2b54, 0x2b54], /* WHITE RIGHT-POINTING PENTAGON */ + [0x2b55, 0x2b55], /* HEAVY LARGE CIRCLE */ + [0x2b56, 0x2b56], /* HEAVY OVAL WITH OVAL INSIDE */ + [0x2b57, 0x2b57], /* HEAVY CIRCLE WITH CIRCLE INSIDE */ + [0x2b58, 0x2b58], /* HEAVY CIRCLE */ + [0x2b59, 0x2b59], /* HEAVY CIRCLED SALTIRE */ + [0x2b5a, 0x2b5a], + [0x2b5b, 0x2b5b], + [0x2b5c, 0x2b5c], + [0x2b5d, 0x2b5d], + [0x2b5e, 0x2b5e], + [0x2b5f, 0x2b5f], + [0x2b60, 0x2b60], + [0x2b61, 0x2b61], + [0x2b62, 0x2b62], + [0x2b63, 0x2b63], + [0x2b64, 0x2b64], + [0x2b65, 0x2b65], + [0x2b66, 0x2b66], + [0x2b67, 0x2b67], + [0x2b68, 0x2b68], + [0x2b69, 0x2b69], + [0x2b6a, 0x2b6a], + [0x2b6b, 0x2b6b], + [0x2b6c, 0x2b6c], + [0x2b6d, 0x2b6d], + [0x2b6e, 0x2b6e], + [0x2b6f, 0x2b6f], + [0x2b70, 0x2b70], + [0x2b71, 0x2b71], + [0x2b72, 0x2b72], + [0x2b73, 0x2b73], + [0x2b74, 0x2b74], + [0x2b75, 0x2b75], + [0x2b76, 0x2b76], + [0x2b77, 0x2b77], + [0x2b78, 0x2b78], + [0x2b79, 0x2b79], + [0x2b7a, 0x2b7a], + [0x2b7b, 0x2b7b], + [0x2b7c, 0x2b7c], + [0x2b7d, 0x2b7d], + [0x2b7e, 0x2b7e], + [0x2b7f, 0x2b7f], + [0x2b80, 0x2b80], + [0x2b81, 0x2b81], + [0x2b82, 0x2b82], + [0x2b83, 0x2b83], + [0x2b84, 0x2b84], + [0x2b85, 0x2b85], + [0x2b86, 0x2b86], + [0x2b87, 0x2b87], + [0x2b88, 0x2b88], + [0x2b89, 0x2b89], + [0x2b8a, 0x2b8a], + [0x2b8b, 0x2b8b], + [0x2b8c, 0x2b8c], + [0x2b8d, 0x2b8d], + [0x2b8e, 0x2b8e], + [0x2b8f, 0x2b8f], + [0x2b90, 0x2b90], + [0x2b91, 0x2b91], + [0x2b92, 0x2b92], + [0x2b93, 0x2b93], + [0x2b94, 0x2b94], + [0x2b95, 0x2b95], + [0x2b96, 0x2b96], + [0x2b97, 0x2b97], + [0x2b98, 0x2b98], + [0x2b99, 0x2b99], + [0x2b9a, 0x2b9a], + [0x2b9b, 0x2b9b], + [0x2b9c, 0x2b9c], + [0x2b9d, 0x2b9d], + [0x2b9e, 0x2b9e], + [0x2b9f, 0x2b9f], + [0x2ba0, 0x2ba0], + [0x2ba1, 0x2ba1], + [0x2ba2, 0x2ba2], + [0x2ba3, 0x2ba3], + [0x2ba4, 0x2ba4], + [0x2ba5, 0x2ba5], + [0x2ba6, 0x2ba6], + [0x2ba7, 0x2ba7], + [0x2ba8, 0x2ba8], + [0x2ba9, 0x2ba9], + [0x2baa, 0x2baa], + [0x2bab, 0x2bab], + [0x2bac, 0x2bac], + [0x2bad, 0x2bad], + [0x2bae, 0x2bae], + [0x2baf, 0x2baf], + [0x2bb0, 0x2bb0], + [0x2bb1, 0x2bb1], + [0x2bb2, 0x2bb2], + [0x2bb3, 0x2bb3], + [0x2bb4, 0x2bb4], + [0x2bb5, 0x2bb5], + [0x2bb6, 0x2bb6], + [0x2bb7, 0x2bb7], + [0x2bb8, 0x2bb8], + [0x2bb9, 0x2bb9], + [0x2bba, 0x2bba], + [0x2bbb, 0x2bbb], + [0x2bbc, 0x2bbc], + [0x2bbd, 0x2bbd], + [0x2bbe, 0x2bbe], + [0x2bbf, 0x2bbf], + [0x2bc0, 0x2bc0], + [0x2bc1, 0x2bc1], + [0x2bc2, 0x2bc2], + [0x2bc3, 0x2bc3], + [0x2bc4, 0x2bc4], + [0x2bc5, 0x2bc5], + [0x2bc6, 0x2bc6], + [0x2bc7, 0x2bc7], + [0x2bc8, 0x2bc8], + [0x2bc9, 0x2bc9], + [0x2bca, 0x2bca], + [0x2bcb, 0x2bcb], + [0x2bcc, 0x2bcc], + [0x2bcd, 0x2bcd], + [0x2bce, 0x2bce], + [0x2bcf, 0x2bcf], + [0x2bd0, 0x2bd0], + [0x2bd1, 0x2bd1], + [0x2bd2, 0x2bd2], + [0x2bd3, 0x2bd3], + [0x2bd4, 0x2bd4], + [0x2bd5, 0x2bd5], + [0x2bd6, 0x2bd6], + [0x2bd7, 0x2bd7], + [0x2bd8, 0x2bd8], + [0x2bd9, 0x2bd9], + [0x2bda, 0x2bda], + [0x2bdb, 0x2bdb], + [0x2bdc, 0x2bdc], + [0x2bdd, 0x2bdd], + [0x2bde, 0x2bde], + [0x2bdf, 0x2bdf], + [0x2be0, 0x2be0], + [0x2be1, 0x2be1], + [0x2be2, 0x2be2], + [0x2be3, 0x2be3], + [0x2be4, 0x2be4], + [0x2be5, 0x2be5], + [0x2be6, 0x2be6], + [0x2be7, 0x2be7], + [0x2be8, 0x2be8], + [0x2be9, 0x2be9], + [0x2bea, 0x2bea], + [0x2beb, 0x2beb], + [0x2bec, 0x2bec], + [0x2bed, 0x2bed], + [0x2bee, 0x2bee], + [0x2bef, 0x2bef], + [0x2bf0, 0x2bf0], + [0x2bf1, 0x2bf1], + [0x2bf2, 0x2bf2], + [0x2bf3, 0x2bf3], + [0x2bf4, 0x2bf4], + [0x2bf5, 0x2bf5], + [0x2bf6, 0x2bf6], + [0x2bf7, 0x2bf7], + [0x2bf8, 0x2bf8], + [0x2bf9, 0x2bf9], + [0x2bfa, 0x2bfa], + [0x2bfb, 0x2bfb], + [0x2bfc, 0x2bfc], + [0x2bfd, 0x2bfd], + [0x2bfe, 0x2bfe], + [0x2bff, 0x2bff], + [0x2c00, 0x2c30], /* GLAGOLITIC CAPITAL LETTER AZU */ + [0x2c01, 0x2c31], /* GLAGOLITIC CAPITAL LETTER BUKY */ + [0x2c02, 0x2c32], /* GLAGOLITIC CAPITAL LETTER VEDE */ + [0x2c03, 0x2c33], /* GLAGOLITIC CAPITAL LETTER GLAGOLI */ + [0x2c04, 0x2c34], /* GLAGOLITIC CAPITAL LETTER DOBRO */ + [0x2c05, 0x2c35], /* GLAGOLITIC CAPITAL LETTER YESTU */ + [0x2c06, 0x2c36], /* GLAGOLITIC CAPITAL LETTER ZHIVETE */ + [0x2c07, 0x2c37], /* GLAGOLITIC CAPITAL LETTER DZELO */ + [0x2c08, 0x2c38], /* GLAGOLITIC CAPITAL LETTER ZEMLJA */ + [0x2c09, 0x2c39], /* GLAGOLITIC CAPITAL LETTER IZHE */ + [0x2c0a, 0x2c3a], /* GLAGOLITIC CAPITAL LETTER INITIAL IZHE */ + [0x2c0b, 0x2c3b], /* GLAGOLITIC CAPITAL LETTER I */ + [0x2c0c, 0x2c3c], /* GLAGOLITIC CAPITAL LETTER DJERVI */ + [0x2c0d, 0x2c3d], /* GLAGOLITIC CAPITAL LETTER KAKO */ + [0x2c0e, 0x2c3e], /* GLAGOLITIC CAPITAL LETTER LJUDIJE */ + [0x2c0f, 0x2c3f], /* GLAGOLITIC CAPITAL LETTER MYSLITE */ + [0x2c10, 0x2c40], /* GLAGOLITIC CAPITAL LETTER NASHI */ + [0x2c11, 0x2c41], /* GLAGOLITIC CAPITAL LETTER ONU */ + [0x2c12, 0x2c42], /* GLAGOLITIC CAPITAL LETTER POKOJI */ + [0x2c13, 0x2c43], /* GLAGOLITIC CAPITAL LETTER RITSI */ + [0x2c14, 0x2c44], /* GLAGOLITIC CAPITAL LETTER SLOVO */ + [0x2c15, 0x2c45], /* GLAGOLITIC CAPITAL LETTER TVRIDO */ + [0x2c16, 0x2c46], /* GLAGOLITIC CAPITAL LETTER UKU */ + [0x2c17, 0x2c47], /* GLAGOLITIC CAPITAL LETTER FRITU */ + [0x2c18, 0x2c48], /* GLAGOLITIC CAPITAL LETTER HERU */ + [0x2c19, 0x2c49], /* GLAGOLITIC CAPITAL LETTER OTU */ + [0x2c1a, 0x2c4a], /* GLAGOLITIC CAPITAL LETTER PE */ + [0x2c1b, 0x2c4b], /* GLAGOLITIC CAPITAL LETTER SHTA */ + [0x2c1c, 0x2c4c], /* GLAGOLITIC CAPITAL LETTER TSI */ + [0x2c1d, 0x2c4d], /* GLAGOLITIC CAPITAL LETTER CHRIVI */ + [0x2c1e, 0x2c4e], /* GLAGOLITIC CAPITAL LETTER SHA */ + [0x2c1f, 0x2c4f], /* GLAGOLITIC CAPITAL LETTER YERU */ + [0x2c20, 0x2c50], /* GLAGOLITIC CAPITAL LETTER YERI */ + [0x2c21, 0x2c51], /* GLAGOLITIC CAPITAL LETTER YATI */ + [0x2c22, 0x2c52], /* GLAGOLITIC CAPITAL LETTER SPIDERY HA */ + [0x2c23, 0x2c53], /* GLAGOLITIC CAPITAL LETTER YU */ + [0x2c24, 0x2c54], /* GLAGOLITIC CAPITAL LETTER SMALL YUS */ + [0x2c25, 0x2c55], /* GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL */ + [0x2c26, 0x2c56], /* GLAGOLITIC CAPITAL LETTER YO */ + [0x2c27, 0x2c57], /* GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS */ + [0x2c28, 0x2c58], /* GLAGOLITIC CAPITAL LETTER BIG YUS */ + [0x2c29, 0x2c59], /* GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS */ + [0x2c2a, 0x2c5a], /* GLAGOLITIC CAPITAL LETTER FITA */ + [0x2c2b, 0x2c5b], /* GLAGOLITIC CAPITAL LETTER IZHITSA */ + [0x2c2c, 0x2c5c], /* GLAGOLITIC CAPITAL LETTER SHTAPIC */ + [0x2c2d, 0x2c5d], /* GLAGOLITIC CAPITAL LETTER TROKUTASTI A */ + [0x2c2e, 0x2c5e], /* GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE */ + [0x2c2f, 0x2c2f], + [0x2c00, 0x2c30], /* GLAGOLITIC SMALL LETTER AZU */ + [0x2c01, 0x2c31], /* GLAGOLITIC SMALL LETTER BUKY */ + [0x2c02, 0x2c32], /* GLAGOLITIC SMALL LETTER VEDE */ + [0x2c03, 0x2c33], /* GLAGOLITIC SMALL LETTER GLAGOLI */ + [0x2c04, 0x2c34], /* GLAGOLITIC SMALL LETTER DOBRO */ + [0x2c05, 0x2c35], /* GLAGOLITIC SMALL LETTER YESTU */ + [0x2c06, 0x2c36], /* GLAGOLITIC SMALL LETTER ZHIVETE */ + [0x2c07, 0x2c37], /* GLAGOLITIC SMALL LETTER DZELO */ + [0x2c08, 0x2c38], /* GLAGOLITIC SMALL LETTER ZEMLJA */ + [0x2c09, 0x2c39], /* GLAGOLITIC SMALL LETTER IZHE */ + [0x2c0a, 0x2c3a], /* GLAGOLITIC SMALL LETTER INITIAL IZHE */ + [0x2c0b, 0x2c3b], /* GLAGOLITIC SMALL LETTER I */ + [0x2c0c, 0x2c3c], /* GLAGOLITIC SMALL LETTER DJERVI */ + [0x2c0d, 0x2c3d], /* GLAGOLITIC SMALL LETTER KAKO */ + [0x2c0e, 0x2c3e], /* GLAGOLITIC SMALL LETTER LJUDIJE */ + [0x2c0f, 0x2c3f], /* GLAGOLITIC SMALL LETTER MYSLITE */ + [0x2c10, 0x2c40], /* GLAGOLITIC SMALL LETTER NASHI */ + [0x2c11, 0x2c41], /* GLAGOLITIC SMALL LETTER ONU */ + [0x2c12, 0x2c42], /* GLAGOLITIC SMALL LETTER POKOJI */ + [0x2c13, 0x2c43], /* GLAGOLITIC SMALL LETTER RITSI */ + [0x2c14, 0x2c44], /* GLAGOLITIC SMALL LETTER SLOVO */ + [0x2c15, 0x2c45], /* GLAGOLITIC SMALL LETTER TVRIDO */ + [0x2c16, 0x2c46], /* GLAGOLITIC SMALL LETTER UKU */ + [0x2c17, 0x2c47], /* GLAGOLITIC SMALL LETTER FRITU */ + [0x2c18, 0x2c48], /* GLAGOLITIC SMALL LETTER HERU */ + [0x2c19, 0x2c49], /* GLAGOLITIC SMALL LETTER OTU */ + [0x2c1a, 0x2c4a], /* GLAGOLITIC SMALL LETTER PE */ + [0x2c1b, 0x2c4b], /* GLAGOLITIC SMALL LETTER SHTA */ + [0x2c1c, 0x2c4c], /* GLAGOLITIC SMALL LETTER TSI */ + [0x2c1d, 0x2c4d], /* GLAGOLITIC SMALL LETTER CHRIVI */ + [0x2c1e, 0x2c4e], /* GLAGOLITIC SMALL LETTER SHA */ + [0x2c1f, 0x2c4f], /* GLAGOLITIC SMALL LETTER YERU */ + [0x2c20, 0x2c50], /* GLAGOLITIC SMALL LETTER YERI */ + [0x2c21, 0x2c51], /* GLAGOLITIC SMALL LETTER YATI */ + [0x2c22, 0x2c52], /* GLAGOLITIC SMALL LETTER SPIDERY HA */ + [0x2c23, 0x2c53], /* GLAGOLITIC SMALL LETTER YU */ + [0x2c24, 0x2c54], /* GLAGOLITIC SMALL LETTER SMALL YUS */ + [0x2c25, 0x2c55], /* GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL */ + [0x2c26, 0x2c56], /* GLAGOLITIC SMALL LETTER YO */ + [0x2c27, 0x2c57], /* GLAGOLITIC SMALL LETTER IOTATED SMALL YUS */ + [0x2c28, 0x2c58], /* GLAGOLITIC SMALL LETTER BIG YUS */ + [0x2c29, 0x2c59], /* GLAGOLITIC SMALL LETTER IOTATED BIG YUS */ + [0x2c2a, 0x2c5a], /* GLAGOLITIC SMALL LETTER FITA */ + [0x2c2b, 0x2c5b], /* GLAGOLITIC SMALL LETTER IZHITSA */ + [0x2c2c, 0x2c5c], /* GLAGOLITIC SMALL LETTER SHTAPIC */ + [0x2c2d, 0x2c5d], /* GLAGOLITIC SMALL LETTER TROKUTASTI A */ + [0x2c2e, 0x2c5e], /* GLAGOLITIC SMALL LETTER LATINATE MYSLITE */ + [0x2c5f, 0x2c5f], + [0x2c60, 0x2c61], /* LATIN CAPITAL LETTER L WITH DOUBLE BAR */ + [0x2c60, 0x2c61], /* LATIN SMALL LETTER L WITH DOUBLE BAR */ + [0x2c62, 0x26b], /* LATIN CAPITAL LETTER L WITH MIDDLE TILDE */ + [0x2c63, 0x1d7d], /* LATIN CAPITAL LETTER P WITH STROKE */ + [0x2c64, 0x27d], /* LATIN CAPITAL LETTER R WITH TAIL */ + [0x23a, 0x2c65], /* LATIN SMALL LETTER A WITH STROKE */ + [0x23e, 0x2c66], /* LATIN SMALL LETTER T WITH DIAGONAL STROKE */ + [0x2c67, 0x2c68], /* LATIN CAPITAL LETTER H WITH DESCENDER */ + [0x2c67, 0x2c68], /* LATIN SMALL LETTER H WITH DESCENDER */ + [0x2c69, 0x2c6a], /* LATIN CAPITAL LETTER K WITH DESCENDER */ + [0x2c69, 0x2c6a], /* LATIN SMALL LETTER K WITH DESCENDER */ + [0x2c6b, 0x2c6c], /* LATIN CAPITAL LETTER Z WITH DESCENDER */ + [0x2c6b, 0x2c6c], /* LATIN SMALL LETTER Z WITH DESCENDER */ + [0x2c6d, 0x251], /* LATIN CAPITAL LETTER ALPHA */ + [0x2c6e, 0x271], /* LATIN CAPITAL LETTER M WITH HOOK */ + [0x2c6f, 0x250], /* LATIN CAPITAL LETTER TURNED A */ + [0x2c70, 0x252], /* LATIN CAPITAL LETTER TURNED ALPHA */ + [0x2c71, 0x2c71], /* LATIN SMALL LETTER V WITH RIGHT HOOK */ + [0x2c72, 0x2c73], /* LATIN CAPITAL LETTER W WITH HOOK */ + [0x2c72, 0x2c73], /* LATIN SMALL LETTER W WITH HOOK */ + [0x2c74, 0x2c74], /* LATIN SMALL LETTER V WITH CURL */ + [0x2c75, 0x2c76], /* LATIN CAPITAL LETTER HALF H */ + [0x2c75, 0x2c76], /* LATIN SMALL LETTER HALF H */ + [0x2c77, 0x2c77], /* LATIN SMALL LETTER TAILLESS PHI */ + [0x2c78, 0x2c78], /* LATIN SMALL LETTER E WITH NOTCH */ + [0x2c79, 0x2c79], /* LATIN SMALL LETTER TURNED R WITH TAIL */ + [0x2c7a, 0x2c7a], /* LATIN SMALL LETTER O WITH LOW RING INSIDE */ + [0x2c7b, 0x2c7b], /* LATIN LETTER SMALL CAPITAL TURNED E */ + [0x2c7c, 0x2c7c], /* LATIN SUBSCRIPT SMALL LETTER J */ + [0x2c7d, 0x2c7d], /* MODIFIER LETTER CAPITAL V */ + [0x2c7e, 0x23f], /* LATIN CAPITAL LETTER S WITH SWASH TAIL */ + [0x2c7f, 0x240], /* LATIN CAPITAL LETTER Z WITH SWASH TAIL */ + [0x2c80, 0x2c81], /* COPTIC CAPITAL LETTER ALFA */ + [0x2c80, 0x2c81], /* COPTIC SMALL LETTER ALFA */ + [0x2c82, 0x2c83], /* COPTIC CAPITAL LETTER VIDA */ + [0x2c82, 0x2c83], /* COPTIC SMALL LETTER VIDA */ + [0x2c84, 0x2c85], /* COPTIC CAPITAL LETTER GAMMA */ + [0x2c84, 0x2c85], /* COPTIC SMALL LETTER GAMMA */ + [0x2c86, 0x2c87], /* COPTIC CAPITAL LETTER DALDA */ + [0x2c86, 0x2c87], /* COPTIC SMALL LETTER DALDA */ + [0x2c88, 0x2c89], /* COPTIC CAPITAL LETTER EIE */ + [0x2c88, 0x2c89], /* COPTIC SMALL LETTER EIE */ + [0x2c8a, 0x2c8b], /* COPTIC CAPITAL LETTER SOU */ + [0x2c8a, 0x2c8b], /* COPTIC SMALL LETTER SOU */ + [0x2c8c, 0x2c8d], /* COPTIC CAPITAL LETTER ZATA */ + [0x2c8c, 0x2c8d], /* COPTIC SMALL LETTER ZATA */ + [0x2c8e, 0x2c8f], /* COPTIC CAPITAL LETTER HATE */ + [0x2c8e, 0x2c8f], /* COPTIC SMALL LETTER HATE */ + [0x2c90, 0x2c91], /* COPTIC CAPITAL LETTER THETHE */ + [0x2c90, 0x2c91], /* COPTIC SMALL LETTER THETHE */ + [0x2c92, 0x2c93], /* COPTIC CAPITAL LETTER IAUDA */ + [0x2c92, 0x2c93], /* COPTIC SMALL LETTER IAUDA */ + [0x2c94, 0x2c95], /* COPTIC CAPITAL LETTER KAPA */ + [0x2c94, 0x2c95], /* COPTIC SMALL LETTER KAPA */ + [0x2c96, 0x2c97], /* COPTIC CAPITAL LETTER LAULA */ + [0x2c96, 0x2c97], /* COPTIC SMALL LETTER LAULA */ + [0x2c98, 0x2c99], /* COPTIC CAPITAL LETTER MI */ + [0x2c98, 0x2c99], /* COPTIC SMALL LETTER MI */ + [0x2c9a, 0x2c9b], /* COPTIC CAPITAL LETTER NI */ + [0x2c9a, 0x2c9b], /* COPTIC SMALL LETTER NI */ + [0x2c9c, 0x2c9d], /* COPTIC CAPITAL LETTER KSI */ + [0x2c9c, 0x2c9d], /* COPTIC SMALL LETTER KSI */ + [0x2c9e, 0x2c9f], /* COPTIC CAPITAL LETTER O */ + [0x2c9e, 0x2c9f], /* COPTIC SMALL LETTER O */ + [0x2ca0, 0x2ca1], /* COPTIC CAPITAL LETTER PI */ + [0x2ca0, 0x2ca1], /* COPTIC SMALL LETTER PI */ + [0x2ca2, 0x2ca3], /* COPTIC CAPITAL LETTER RO */ + [0x2ca2, 0x2ca3], /* COPTIC SMALL LETTER RO */ + [0x2ca4, 0x2ca5], /* COPTIC CAPITAL LETTER SIMA */ + [0x2ca4, 0x2ca5], /* COPTIC SMALL LETTER SIMA */ + [0x2ca6, 0x2ca7], /* COPTIC CAPITAL LETTER TAU */ + [0x2ca6, 0x2ca7], /* COPTIC SMALL LETTER TAU */ + [0x2ca8, 0x2ca9], /* COPTIC CAPITAL LETTER UA */ + [0x2ca8, 0x2ca9], /* COPTIC SMALL LETTER UA */ + [0x2caa, 0x2cab], /* COPTIC CAPITAL LETTER FI */ + [0x2caa, 0x2cab], /* COPTIC SMALL LETTER FI */ + [0x2cac, 0x2cad], /* COPTIC CAPITAL LETTER KHI */ + [0x2cac, 0x2cad], /* COPTIC SMALL LETTER KHI */ + [0x2cae, 0x2caf], /* COPTIC CAPITAL LETTER PSI */ + [0x2cae, 0x2caf], /* COPTIC SMALL LETTER PSI */ + [0x2cb0, 0x2cb1], /* COPTIC CAPITAL LETTER OOU */ + [0x2cb0, 0x2cb1], /* COPTIC SMALL LETTER OOU */ + [0x2cb2, 0x2cb3], /* COPTIC CAPITAL LETTER DIALECT-P ALEF */ + [0x2cb2, 0x2cb3], /* COPTIC SMALL LETTER DIALECT-P ALEF */ + [0x2cb4, 0x2cb5], /* COPTIC CAPITAL LETTER OLD COPTIC AIN */ + [0x2cb4, 0x2cb5], /* COPTIC SMALL LETTER OLD COPTIC AIN */ + [0x2cb6, 0x2cb7], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE */ + [0x2cb6, 0x2cb7], /* COPTIC SMALL LETTER CRYPTOGRAMMIC EIE */ + [0x2cb8, 0x2cb9], /* COPTIC CAPITAL LETTER DIALECT-P KAPA */ + [0x2cb8, 0x2cb9], /* COPTIC SMALL LETTER DIALECT-P KAPA */ + [0x2cba, 0x2cbb], /* COPTIC CAPITAL LETTER DIALECT-P NI */ + [0x2cba, 0x2cbb], /* COPTIC SMALL LETTER DIALECT-P NI */ + [0x2cbc, 0x2cbd], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI */ + [0x2cbc, 0x2cbd], /* COPTIC SMALL LETTER CRYPTOGRAMMIC NI */ + [0x2cbe, 0x2cbf], /* COPTIC CAPITAL LETTER OLD COPTIC OOU */ + [0x2cbe, 0x2cbf], /* COPTIC SMALL LETTER OLD COPTIC OOU */ + [0x2cc0, 0x2cc1], /* COPTIC CAPITAL LETTER SAMPI */ + [0x2cc0, 0x2cc1], /* COPTIC SMALL LETTER SAMPI */ + [0x2cc2, 0x2cc3], /* COPTIC CAPITAL LETTER CROSSED SHEI */ + [0x2cc2, 0x2cc3], /* COPTIC SMALL LETTER CROSSED SHEI */ + [0x2cc4, 0x2cc5], /* COPTIC CAPITAL LETTER OLD COPTIC SHEI */ + [0x2cc4, 0x2cc5], /* COPTIC SMALL LETTER OLD COPTIC SHEI */ + [0x2cc6, 0x2cc7], /* COPTIC CAPITAL LETTER OLD COPTIC ESH */ + [0x2cc6, 0x2cc7], /* COPTIC SMALL LETTER OLD COPTIC ESH */ + [0x2cc8, 0x2cc9], /* COPTIC CAPITAL LETTER AKHMIMIC KHEI */ + [0x2cc8, 0x2cc9], /* COPTIC SMALL LETTER AKHMIMIC KHEI */ + [0x2cca, 0x2ccb], /* COPTIC CAPITAL LETTER DIALECT-P HORI */ + [0x2cca, 0x2ccb], /* COPTIC SMALL LETTER DIALECT-P HORI */ + [0x2ccc, 0x2ccd], /* COPTIC CAPITAL LETTER OLD COPTIC HORI */ + [0x2ccc, 0x2ccd], /* COPTIC SMALL LETTER OLD COPTIC HORI */ + [0x2cce, 0x2ccf], /* COPTIC CAPITAL LETTER OLD COPTIC HA */ + [0x2cce, 0x2ccf], /* COPTIC SMALL LETTER OLD COPTIC HA */ + [0x2cd0, 0x2cd1], /* COPTIC CAPITAL LETTER L-SHAPED HA */ + [0x2cd0, 0x2cd1], /* COPTIC SMALL LETTER L-SHAPED HA */ + [0x2cd2, 0x2cd3], /* COPTIC CAPITAL LETTER OLD COPTIC HEI */ + [0x2cd2, 0x2cd3], /* COPTIC SMALL LETTER OLD COPTIC HEI */ + [0x2cd4, 0x2cd5], /* COPTIC CAPITAL LETTER OLD COPTIC HAT */ + [0x2cd4, 0x2cd5], /* COPTIC SMALL LETTER OLD COPTIC HAT */ + [0x2cd6, 0x2cd7], /* COPTIC CAPITAL LETTER OLD COPTIC GANGIA */ + [0x2cd6, 0x2cd7], /* COPTIC SMALL LETTER OLD COPTIC GANGIA */ + [0x2cd8, 0x2cd9], /* COPTIC CAPITAL LETTER OLD COPTIC DJA */ + [0x2cd8, 0x2cd9], /* COPTIC SMALL LETTER OLD COPTIC DJA */ + [0x2cda, 0x2cdb], /* COPTIC CAPITAL LETTER OLD COPTIC SHIMA */ + [0x2cda, 0x2cdb], /* COPTIC SMALL LETTER OLD COPTIC SHIMA */ + [0x2cdc, 0x2cdd], /* COPTIC CAPITAL LETTER OLD NUBIAN SHIMA */ + [0x2cdc, 0x2cdd], /* COPTIC SMALL LETTER OLD NUBIAN SHIMA */ + [0x2cde, 0x2cdf], /* COPTIC CAPITAL LETTER OLD NUBIAN NGI */ + [0x2cde, 0x2cdf], /* COPTIC SMALL LETTER OLD NUBIAN NGI */ + [0x2ce0, 0x2ce1], /* COPTIC CAPITAL LETTER OLD NUBIAN NYI */ + [0x2ce0, 0x2ce1], /* COPTIC SMALL LETTER OLD NUBIAN NYI */ + [0x2ce2, 0x2ce3], /* COPTIC CAPITAL LETTER OLD NUBIAN WAU */ + [0x2ce2, 0x2ce3], /* COPTIC SMALL LETTER OLD NUBIAN WAU */ + [0x2ce4, 0x2ce4], /* COPTIC SYMBOL KAI */ + [0x2ce5, 0x2ce5], /* COPTIC SYMBOL MI RO */ + [0x2ce6, 0x2ce6], /* COPTIC SYMBOL PI RO */ + [0x2ce7, 0x2ce7], /* COPTIC SYMBOL STAUROS */ + [0x2ce8, 0x2ce8], /* COPTIC SYMBOL TAU RO */ + [0x2ce9, 0x2ce9], /* COPTIC SYMBOL KHI RO */ + [0x2cea, 0x2cea], /* COPTIC SYMBOL SHIMA SIMA */ + [0x2ceb, 0x2cec], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI */ + [0x2ceb, 0x2cec], /* COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI */ + [0x2ced, 0x2cee], /* COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA */ + [0x2ced, 0x2cee], /* COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA */ + [0x2cef, 0x2cef], /* COPTIC COMBINING NI ABOVE */ + [0x2cf0, 0x2cf0], /* COPTIC COMBINING SPIRITUS ASPER */ + [0x2cf1, 0x2cf1], /* COPTIC COMBINING SPIRITUS LENIS */ + [0x2cf2, 0x2cf3], /* COPTIC CAPITAL LETTER BOHAIRIC KHEI */ + [0x2cf2, 0x2cf3], /* COPTIC SMALL LETTER BOHAIRIC KHEI */ + [0x2cf4, 0x2cf4], + [0x2cf5, 0x2cf5], + [0x2cf6, 0x2cf6], + [0x2cf7, 0x2cf7], + [0x2cf8, 0x2cf8], + [0x2cf9, 0x2cf9], /* COPTIC OLD NUBIAN FULL STOP */ + [0x2cfa, 0x2cfa], /* COPTIC OLD NUBIAN DIRECT QUESTION MARK */ + [0x2cfb, 0x2cfb], /* COPTIC OLD NUBIAN INDIRECT QUESTION MARK */ + [0x2cfc, 0x2cfc], /* COPTIC OLD NUBIAN VERSE DIVIDER */ + [0x2cfd, 0x2cfd], /* COPTIC FRACTION ONE HALF */ + [0x2cfe, 0x2cfe], /* COPTIC FULL STOP */ + [0x2cff, 0x2cff], /* COPTIC MORPHOLOGICAL DIVIDER */ + [0x10a0, 0x2d00], /* GEORGIAN SMALL LETTER AN */ + [0x10a1, 0x2d01], /* GEORGIAN SMALL LETTER BAN */ + [0x10a2, 0x2d02], /* GEORGIAN SMALL LETTER GAN */ + [0x10a3, 0x2d03], /* GEORGIAN SMALL LETTER DON */ + [0x10a4, 0x2d04], /* GEORGIAN SMALL LETTER EN */ + [0x10a5, 0x2d05], /* GEORGIAN SMALL LETTER VIN */ + [0x10a6, 0x2d06], /* GEORGIAN SMALL LETTER ZEN */ + [0x10a7, 0x2d07], /* GEORGIAN SMALL LETTER TAN */ + [0x10a8, 0x2d08], /* GEORGIAN SMALL LETTER IN */ + [0x10a9, 0x2d09], /* GEORGIAN SMALL LETTER KAN */ + [0x10aa, 0x2d0a], /* GEORGIAN SMALL LETTER LAS */ + [0x10ab, 0x2d0b], /* GEORGIAN SMALL LETTER MAN */ + [0x10ac, 0x2d0c], /* GEORGIAN SMALL LETTER NAR */ + [0x10ad, 0x2d0d], /* GEORGIAN SMALL LETTER ON */ + [0x10ae, 0x2d0e], /* GEORGIAN SMALL LETTER PAR */ + [0x10af, 0x2d0f], /* GEORGIAN SMALL LETTER ZHAR */ + [0x10b0, 0x2d10], /* GEORGIAN SMALL LETTER RAE */ + [0x10b1, 0x2d11], /* GEORGIAN SMALL LETTER SAN */ + [0x10b2, 0x2d12], /* GEORGIAN SMALL LETTER TAR */ + [0x10b3, 0x2d13], /* GEORGIAN SMALL LETTER UN */ + [0x10b4, 0x2d14], /* GEORGIAN SMALL LETTER PHAR */ + [0x10b5, 0x2d15], /* GEORGIAN SMALL LETTER KHAR */ + [0x10b6, 0x2d16], /* GEORGIAN SMALL LETTER GHAN */ + [0x10b7, 0x2d17], /* GEORGIAN SMALL LETTER QAR */ + [0x10b8, 0x2d18], /* GEORGIAN SMALL LETTER SHIN */ + [0x10b9, 0x2d19], /* GEORGIAN SMALL LETTER CHIN */ + [0x10ba, 0x2d1a], /* GEORGIAN SMALL LETTER CAN */ + [0x10bb, 0x2d1b], /* GEORGIAN SMALL LETTER JIL */ + [0x10bc, 0x2d1c], /* GEORGIAN SMALL LETTER CIL */ + [0x10bd, 0x2d1d], /* GEORGIAN SMALL LETTER CHAR */ + [0x10be, 0x2d1e], /* GEORGIAN SMALL LETTER XAN */ + [0x10bf, 0x2d1f], /* GEORGIAN SMALL LETTER JHAN */ + [0x10c0, 0x2d20], /* GEORGIAN SMALL LETTER HAE */ + [0x10c1, 0x2d21], /* GEORGIAN SMALL LETTER HE */ + [0x10c2, 0x2d22], /* GEORGIAN SMALL LETTER HIE */ + [0x10c3, 0x2d23], /* GEORGIAN SMALL LETTER WE */ + [0x10c4, 0x2d24], /* GEORGIAN SMALL LETTER HAR */ + [0x10c5, 0x2d25], /* GEORGIAN SMALL LETTER HOE */ + [0x2d26, 0x2d26], + [0x10c7, 0x2d27], /* GEORGIAN SMALL LETTER YN */ + [0x2d28, 0x2d28], + [0x2d29, 0x2d29], + [0x2d2a, 0x2d2a], + [0x2d2b, 0x2d2b], + [0x2d2c, 0x2d2c], + [0x10cd, 0x2d2d], /* GEORGIAN SMALL LETTER AEN */ + [0x2d2e, 0x2d2e], + [0x2d2f, 0x2d2f], + [0x2d30, 0x2d30], /* TIFINAGH LETTER YA */ + [0x2d31, 0x2d31], /* TIFINAGH LETTER YAB */ + [0x2d32, 0x2d32], /* TIFINAGH LETTER YABH */ + [0x2d33, 0x2d33], /* TIFINAGH LETTER YAG */ + [0x2d34, 0x2d34], /* TIFINAGH LETTER YAGHH */ + [0x2d35, 0x2d35], /* TIFINAGH LETTER BERBER ACADEMY YAJ */ + [0x2d36, 0x2d36], /* TIFINAGH LETTER YAJ */ + [0x2d37, 0x2d37], /* TIFINAGH LETTER YAD */ + [0x2d38, 0x2d38], /* TIFINAGH LETTER YADH */ + [0x2d39, 0x2d39], /* TIFINAGH LETTER YADD */ + [0x2d3a, 0x2d3a], /* TIFINAGH LETTER YADDH */ + [0x2d3b, 0x2d3b], /* TIFINAGH LETTER YEY */ + [0x2d3c, 0x2d3c], /* TIFINAGH LETTER YAF */ + [0x2d3d, 0x2d3d], /* TIFINAGH LETTER YAK */ + [0x2d3e, 0x2d3e], /* TIFINAGH LETTER TUAREG YAK */ + [0x2d3f, 0x2d3f], /* TIFINAGH LETTER YAKHH */ + [0x2d40, 0x2d40], /* TIFINAGH LETTER YAH */ + [0x2d41, 0x2d41], /* TIFINAGH LETTER BERBER ACADEMY YAH */ + [0x2d42, 0x2d42], /* TIFINAGH LETTER TUAREG YAH */ + [0x2d43, 0x2d43], /* TIFINAGH LETTER YAHH */ + [0x2d44, 0x2d44], /* TIFINAGH LETTER YAA */ + [0x2d45, 0x2d45], /* TIFINAGH LETTER YAKH */ + [0x2d46, 0x2d46], /* TIFINAGH LETTER TUAREG YAKH */ + [0x2d47, 0x2d47], /* TIFINAGH LETTER YAQ */ + [0x2d48, 0x2d48], /* TIFINAGH LETTER TUAREG YAQ */ + [0x2d49, 0x2d49], /* TIFINAGH LETTER YI */ + [0x2d4a, 0x2d4a], /* TIFINAGH LETTER YAZH */ + [0x2d4b, 0x2d4b], /* TIFINAGH LETTER AHAGGAR YAZH */ + [0x2d4c, 0x2d4c], /* TIFINAGH LETTER TUAREG YAZH */ + [0x2d4d, 0x2d4d], /* TIFINAGH LETTER YAL */ + [0x2d4e, 0x2d4e], /* TIFINAGH LETTER YAM */ + [0x2d4f, 0x2d4f], /* TIFINAGH LETTER YAN */ + [0x2d50, 0x2d50], /* TIFINAGH LETTER TUAREG YAGN */ + [0x2d51, 0x2d51], /* TIFINAGH LETTER TUAREG YANG */ + [0x2d52, 0x2d52], /* TIFINAGH LETTER YAP */ + [0x2d53, 0x2d53], /* TIFINAGH LETTER YU */ + [0x2d54, 0x2d54], /* TIFINAGH LETTER YAR */ + [0x2d55, 0x2d55], /* TIFINAGH LETTER YARR */ + [0x2d56, 0x2d56], /* TIFINAGH LETTER YAGH */ + [0x2d57, 0x2d57], /* TIFINAGH LETTER TUAREG YAGH */ + [0x2d58, 0x2d58], /* TIFINAGH LETTER AYER YAGH */ + [0x2d59, 0x2d59], /* TIFINAGH LETTER YAS */ + [0x2d5a, 0x2d5a], /* TIFINAGH LETTER YASS */ + [0x2d5b, 0x2d5b], /* TIFINAGH LETTER YASH */ + [0x2d5c, 0x2d5c], /* TIFINAGH LETTER YAT */ + [0x2d5d, 0x2d5d], /* TIFINAGH LETTER YATH */ + [0x2d5e, 0x2d5e], /* TIFINAGH LETTER YACH */ + [0x2d5f, 0x2d5f], /* TIFINAGH LETTER YATT */ + [0x2d60, 0x2d60], /* TIFINAGH LETTER YAV */ + [0x2d61, 0x2d61], /* TIFINAGH LETTER YAW */ + [0x2d62, 0x2d62], /* TIFINAGH LETTER YAY */ + [0x2d63, 0x2d63], /* TIFINAGH LETTER YAZ */ + [0x2d64, 0x2d64], /* TIFINAGH LETTER TAWELLEMET YAZ */ + [0x2d65, 0x2d65], /* TIFINAGH LETTER YAZZ */ + [0x2d66, 0x2d66], /* TIFINAGH LETTER YE */ + [0x2d67, 0x2d67], /* TIFINAGH LETTER YO */ + [0x2d68, 0x2d68], + [0x2d69, 0x2d69], + [0x2d6a, 0x2d6a], + [0x2d6b, 0x2d6b], + [0x2d6c, 0x2d6c], + [0x2d6d, 0x2d6d], + [0x2d6e, 0x2d6e], + [0x2d6f, 0x2d6f], /* TIFINAGH MODIFIER LETTER LABIALIZATION MARK */ + [0x2d70, 0x2d70], /* TIFINAGH SEPARATOR MARK */ + [0x2d71, 0x2d71], + [0x2d72, 0x2d72], + [0x2d73, 0x2d73], + [0x2d74, 0x2d74], + [0x2d75, 0x2d75], + [0x2d76, 0x2d76], + [0x2d77, 0x2d77], + [0x2d78, 0x2d78], + [0x2d79, 0x2d79], + [0x2d7a, 0x2d7a], + [0x2d7b, 0x2d7b], + [0x2d7c, 0x2d7c], + [0x2d7d, 0x2d7d], + [0x2d7e, 0x2d7e], + [0x2d7f, 0x2d7f], /* TIFINAGH CONSONANT JOINER */ + [0x2d80, 0x2d80], /* ETHIOPIC SYLLABLE LOA */ + [0x2d81, 0x2d81], /* ETHIOPIC SYLLABLE MOA */ + [0x2d82, 0x2d82], /* ETHIOPIC SYLLABLE ROA */ + [0x2d83, 0x2d83], /* ETHIOPIC SYLLABLE SOA */ + [0x2d84, 0x2d84], /* ETHIOPIC SYLLABLE SHOA */ + [0x2d85, 0x2d85], /* ETHIOPIC SYLLABLE BOA */ + [0x2d86, 0x2d86], /* ETHIOPIC SYLLABLE TOA */ + [0x2d87, 0x2d87], /* ETHIOPIC SYLLABLE COA */ + [0x2d88, 0x2d88], /* ETHIOPIC SYLLABLE NOA */ + [0x2d89, 0x2d89], /* ETHIOPIC SYLLABLE NYOA */ + [0x2d8a, 0x2d8a], /* ETHIOPIC SYLLABLE GLOTTAL OA */ + [0x2d8b, 0x2d8b], /* ETHIOPIC SYLLABLE ZOA */ + [0x2d8c, 0x2d8c], /* ETHIOPIC SYLLABLE DOA */ + [0x2d8d, 0x2d8d], /* ETHIOPIC SYLLABLE DDOA */ + [0x2d8e, 0x2d8e], /* ETHIOPIC SYLLABLE JOA */ + [0x2d8f, 0x2d8f], /* ETHIOPIC SYLLABLE THOA */ + [0x2d90, 0x2d90], /* ETHIOPIC SYLLABLE CHOA */ + [0x2d91, 0x2d91], /* ETHIOPIC SYLLABLE PHOA */ + [0x2d92, 0x2d92], /* ETHIOPIC SYLLABLE POA */ + [0x2d93, 0x2d93], /* ETHIOPIC SYLLABLE GGWA */ + [0x2d94, 0x2d94], /* ETHIOPIC SYLLABLE GGWI */ + [0x2d95, 0x2d95], /* ETHIOPIC SYLLABLE GGWEE */ + [0x2d96, 0x2d96], /* ETHIOPIC SYLLABLE GGWE */ + [0x2d97, 0x2d97], + [0x2d98, 0x2d98], + [0x2d99, 0x2d99], + [0x2d9a, 0x2d9a], + [0x2d9b, 0x2d9b], + [0x2d9c, 0x2d9c], + [0x2d9d, 0x2d9d], + [0x2d9e, 0x2d9e], + [0x2d9f, 0x2d9f], + [0x2da0, 0x2da0], /* ETHIOPIC SYLLABLE SSA */ + [0x2da1, 0x2da1], /* ETHIOPIC SYLLABLE SSU */ + [0x2da2, 0x2da2], /* ETHIOPIC SYLLABLE SSI */ + [0x2da3, 0x2da3], /* ETHIOPIC SYLLABLE SSAA */ + [0x2da4, 0x2da4], /* ETHIOPIC SYLLABLE SSEE */ + [0x2da5, 0x2da5], /* ETHIOPIC SYLLABLE SSE */ + [0x2da6, 0x2da6], /* ETHIOPIC SYLLABLE SSO */ + [0x2da7, 0x2da7], + [0x2da8, 0x2da8], /* ETHIOPIC SYLLABLE CCA */ + [0x2da9, 0x2da9], /* ETHIOPIC SYLLABLE CCU */ + [0x2daa, 0x2daa], /* ETHIOPIC SYLLABLE CCI */ + [0x2dab, 0x2dab], /* ETHIOPIC SYLLABLE CCAA */ + [0x2dac, 0x2dac], /* ETHIOPIC SYLLABLE CCEE */ + [0x2dad, 0x2dad], /* ETHIOPIC SYLLABLE CCE */ + [0x2dae, 0x2dae], /* ETHIOPIC SYLLABLE CCO */ + [0x2daf, 0x2daf], + [0x2db0, 0x2db0], /* ETHIOPIC SYLLABLE ZZA */ + [0x2db1, 0x2db1], /* ETHIOPIC SYLLABLE ZZU */ + [0x2db2, 0x2db2], /* ETHIOPIC SYLLABLE ZZI */ + [0x2db3, 0x2db3], /* ETHIOPIC SYLLABLE ZZAA */ + [0x2db4, 0x2db4], /* ETHIOPIC SYLLABLE ZZEE */ + [0x2db5, 0x2db5], /* ETHIOPIC SYLLABLE ZZE */ + [0x2db6, 0x2db6], /* ETHIOPIC SYLLABLE ZZO */ + [0x2db7, 0x2db7], + [0x2db8, 0x2db8], /* ETHIOPIC SYLLABLE CCHA */ + [0x2db9, 0x2db9], /* ETHIOPIC SYLLABLE CCHU */ + [0x2dba, 0x2dba], /* ETHIOPIC SYLLABLE CCHI */ + [0x2dbb, 0x2dbb], /* ETHIOPIC SYLLABLE CCHAA */ + [0x2dbc, 0x2dbc], /* ETHIOPIC SYLLABLE CCHEE */ + [0x2dbd, 0x2dbd], /* ETHIOPIC SYLLABLE CCHE */ + [0x2dbe, 0x2dbe], /* ETHIOPIC SYLLABLE CCHO */ + [0x2dbf, 0x2dbf], + [0x2dc0, 0x2dc0], /* ETHIOPIC SYLLABLE QYA */ + [0x2dc1, 0x2dc1], /* ETHIOPIC SYLLABLE QYU */ + [0x2dc2, 0x2dc2], /* ETHIOPIC SYLLABLE QYI */ + [0x2dc3, 0x2dc3], /* ETHIOPIC SYLLABLE QYAA */ + [0x2dc4, 0x2dc4], /* ETHIOPIC SYLLABLE QYEE */ + [0x2dc5, 0x2dc5], /* ETHIOPIC SYLLABLE QYE */ + [0x2dc6, 0x2dc6], /* ETHIOPIC SYLLABLE QYO */ + [0x2dc7, 0x2dc7], + [0x2dc8, 0x2dc8], /* ETHIOPIC SYLLABLE KYA */ + [0x2dc9, 0x2dc9], /* ETHIOPIC SYLLABLE KYU */ + [0x2dca, 0x2dca], /* ETHIOPIC SYLLABLE KYI */ + [0x2dcb, 0x2dcb], /* ETHIOPIC SYLLABLE KYAA */ + [0x2dcc, 0x2dcc], /* ETHIOPIC SYLLABLE KYEE */ + [0x2dcd, 0x2dcd], /* ETHIOPIC SYLLABLE KYE */ + [0x2dce, 0x2dce], /* ETHIOPIC SYLLABLE KYO */ + [0x2dcf, 0x2dcf], + [0x2dd0, 0x2dd0], /* ETHIOPIC SYLLABLE XYA */ + [0x2dd1, 0x2dd1], /* ETHIOPIC SYLLABLE XYU */ + [0x2dd2, 0x2dd2], /* ETHIOPIC SYLLABLE XYI */ + [0x2dd3, 0x2dd3], /* ETHIOPIC SYLLABLE XYAA */ + [0x2dd4, 0x2dd4], /* ETHIOPIC SYLLABLE XYEE */ + [0x2dd5, 0x2dd5], /* ETHIOPIC SYLLABLE XYE */ + [0x2dd6, 0x2dd6], /* ETHIOPIC SYLLABLE XYO */ + [0x2dd7, 0x2dd7], + [0x2dd8, 0x2dd8], /* ETHIOPIC SYLLABLE GYA */ + [0x2dd9, 0x2dd9], /* ETHIOPIC SYLLABLE GYU */ + [0x2dda, 0x2dda], /* ETHIOPIC SYLLABLE GYI */ + [0x2ddb, 0x2ddb], /* ETHIOPIC SYLLABLE GYAA */ + [0x2ddc, 0x2ddc], /* ETHIOPIC SYLLABLE GYEE */ + [0x2ddd, 0x2ddd], /* ETHIOPIC SYLLABLE GYE */ + [0x2dde, 0x2dde], /* ETHIOPIC SYLLABLE GYO */ + [0x2ddf, 0x2ddf], + [0x2de0, 0x2de0], /* COMBINING CYRILLIC LETTER BE */ + [0x2de1, 0x2de1], /* COMBINING CYRILLIC LETTER VE */ + [0x2de2, 0x2de2], /* COMBINING CYRILLIC LETTER GHE */ + [0x2de3, 0x2de3], /* COMBINING CYRILLIC LETTER DE */ + [0x2de4, 0x2de4], /* COMBINING CYRILLIC LETTER ZHE */ + [0x2de5, 0x2de5], /* COMBINING CYRILLIC LETTER ZE */ + [0x2de6, 0x2de6], /* COMBINING CYRILLIC LETTER KA */ + [0x2de7, 0x2de7], /* COMBINING CYRILLIC LETTER EL */ + [0x2de8, 0x2de8], /* COMBINING CYRILLIC LETTER EM */ + [0x2de9, 0x2de9], /* COMBINING CYRILLIC LETTER EN */ + [0x2dea, 0x2dea], /* COMBINING CYRILLIC LETTER O */ + [0x2deb, 0x2deb], /* COMBINING CYRILLIC LETTER PE */ + [0x2dec, 0x2dec], /* COMBINING CYRILLIC LETTER ER */ + [0x2ded, 0x2ded], /* COMBINING CYRILLIC LETTER ES */ + [0x2dee, 0x2dee], /* COMBINING CYRILLIC LETTER TE */ + [0x2def, 0x2def], /* COMBINING CYRILLIC LETTER HA */ + [0x2df0, 0x2df0], /* COMBINING CYRILLIC LETTER TSE */ + [0x2df1, 0x2df1], /* COMBINING CYRILLIC LETTER CHE */ + [0x2df2, 0x2df2], /* COMBINING CYRILLIC LETTER SHA */ + [0x2df3, 0x2df3], /* COMBINING CYRILLIC LETTER SHCHA */ + [0x2df4, 0x2df4], /* COMBINING CYRILLIC LETTER FITA */ + [0x2df5, 0x2df5], /* COMBINING CYRILLIC LETTER ES-TE */ + [0x2df6, 0x2df6], /* COMBINING CYRILLIC LETTER A */ + [0x2df7, 0x2df7], /* COMBINING CYRILLIC LETTER IE */ + [0x2df8, 0x2df8], /* COMBINING CYRILLIC LETTER DJERV */ + [0x2df9, 0x2df9], /* COMBINING CYRILLIC LETTER MONOGRAPH UK */ + [0x2dfa, 0x2dfa], /* COMBINING CYRILLIC LETTER YAT */ + [0x2dfb, 0x2dfb], /* COMBINING CYRILLIC LETTER YU */ + [0x2dfc, 0x2dfc], /* COMBINING CYRILLIC LETTER IOTIFIED A */ + [0x2dfd, 0x2dfd], /* COMBINING CYRILLIC LETTER LITTLE YUS */ + [0x2dfe, 0x2dfe], /* COMBINING CYRILLIC LETTER BIG YUS */ + [0x2dff, 0x2dff], /* COMBINING CYRILLIC LETTER IOTIFIED BIG YUS */ + [0x2e00, 0x2e00], /* RIGHT ANGLE SUBSTITUTION MARKER */ + [0x2e01, 0x2e01], /* RIGHT ANGLE DOTTED SUBSTITUTION MARKER */ + [0x2e02, 0x2e02], /* LEFT SUBSTITUTION BRACKET */ + [0x2e03, 0x2e03], /* RIGHT SUBSTITUTION BRACKET */ + [0x2e04, 0x2e04], /* LEFT DOTTED SUBSTITUTION BRACKET */ + [0x2e05, 0x2e05], /* RIGHT DOTTED SUBSTITUTION BRACKET */ + [0x2e06, 0x2e06], /* RAISED INTERPOLATION MARKER */ + [0x2e07, 0x2e07], /* RAISED DOTTED INTERPOLATION MARKER */ + [0x2e08, 0x2e08], /* DOTTED TRANSPOSITION MARKER */ + [0x2e09, 0x2e09], /* LEFT TRANSPOSITION BRACKET */ + [0x2e0a, 0x2e0a], /* RIGHT TRANSPOSITION BRACKET */ + [0x2e0b, 0x2e0b], /* RAISED SQUARE */ + [0x2e0c, 0x2e0c], /* LEFT RAISED OMISSION BRACKET */ + [0x2e0d, 0x2e0d], /* RIGHT RAISED OMISSION BRACKET */ + [0x2e0e, 0x2e0e], /* EDITORIAL CORONIS */ + [0x2e0f, 0x2e0f], /* PARAGRAPHOS */ + [0x2e10, 0x2e10], /* FORKED PARAGRAPHOS */ + [0x2e11, 0x2e11], /* REVERSED FORKED PARAGRAPHOS */ + [0x2e12, 0x2e12], /* HYPODIASTOLE */ + [0x2e13, 0x2e13], /* DOTTED OBELOS */ + [0x2e14, 0x2e14], /* DOWNWARDS ANCORA */ + [0x2e15, 0x2e15], /* UPWARDS ANCORA */ + [0x2e16, 0x2e16], /* DOTTED RIGHT-POINTING ANGLE */ + [0x2e17, 0x2e17], /* DOUBLE OBLIQUE HYPHEN */ + [0x2e18, 0x2e18], /* INVERTED INTERROBANG */ + [0x2e19, 0x2e19], /* PALM BRANCH */ + [0x2e1a, 0x2e1a], /* HYPHEN WITH DIAERESIS */ + [0x2e1b, 0x2e1b], /* TILDE WITH RING ABOVE */ + [0x2e1c, 0x2e1c], /* LEFT LOW PARAPHRASE BRACKET */ + [0x2e1d, 0x2e1d], /* RIGHT LOW PARAPHRASE BRACKET */ + [0x2e1e, 0x2e1e], /* TILDE WITH DOT ABOVE */ + [0x2e1f, 0x2e1f], /* TILDE WITH DOT BELOW */ + [0x2e20, 0x2e20], /* LEFT VERTICAL BAR WITH QUILL */ + [0x2e21, 0x2e21], /* RIGHT VERTICAL BAR WITH QUILL */ + [0x2e22, 0x2e22], /* TOP LEFT HALF BRACKET */ + [0x2e23, 0x2e23], /* TOP RIGHT HALF BRACKET */ + [0x2e24, 0x2e24], /* BOTTOM LEFT HALF BRACKET */ + [0x2e25, 0x2e25], /* BOTTOM RIGHT HALF BRACKET */ + [0x2e26, 0x2e26], /* LEFT SIDEWAYS U BRACKET */ + [0x2e27, 0x2e27], /* RIGHT SIDEWAYS U BRACKET */ + [0x2e28, 0x2e28], /* LEFT DOUBLE PARENTHESIS */ + [0x2e29, 0x2e29], /* RIGHT DOUBLE PARENTHESIS */ + [0x2e2a, 0x2e2a], /* TWO DOTS OVER ONE DOT PUNCTUATION */ + [0x2e2b, 0x2e2b], /* ONE DOT OVER TWO DOTS PUNCTUATION */ + [0x2e2c, 0x2e2c], /* SQUARED FOUR DOT PUNCTUATION */ + [0x2e2d, 0x2e2d], /* FIVE DOT MARK */ + [0x2e2e, 0x2e2e], /* REVERSED QUESTION MARK */ + [0x2e2f, 0x2e2f], /* VERTICAL TILDE */ + [0x2e30, 0x2e30], /* RING POINT */ + [0x2e31, 0x2e31], /* WORD SEPARATOR MIDDLE DOT */ + [0x2e32, 0x2e32], /* TURNED COMMA */ + [0x2e33, 0x2e33], /* RAISED DOT */ + [0x2e34, 0x2e34], /* RAISED COMMA */ + [0x2e35, 0x2e35], /* TURNED SEMICOLON */ + [0x2e36, 0x2e36], /* DAGGER WITH LEFT GUARD */ + [0x2e37, 0x2e37], /* DAGGER WITH RIGHT GUARD */ + [0x2e38, 0x2e38], /* TURNED DAGGER */ + [0x2e39, 0x2e39], /* TOP HALF SECTION SIGN */ + [0x2e3a, 0x2e3a], /* TWO-EM DASH */ + [0x2e3b, 0x2e3b], /* THREE-EM DASH */ + [0x2e3c, 0x2e3c], + [0x2e3d, 0x2e3d], + [0x2e3e, 0x2e3e], + [0x2e3f, 0x2e3f], + [0x2e40, 0x2e40], + [0x2e41, 0x2e41], + [0x2e42, 0x2e42], + [0x2e43, 0x2e43], + [0x2e44, 0x2e44], + [0x2e45, 0x2e45], + [0x2e46, 0x2e46], + [0x2e47, 0x2e47], + [0x2e48, 0x2e48], + [0x2e49, 0x2e49], + [0x2e4a, 0x2e4a], + [0x2e4b, 0x2e4b], + [0x2e4c, 0x2e4c], + [0x2e4d, 0x2e4d], + [0x2e4e, 0x2e4e], + [0x2e4f, 0x2e4f], + [0x2e50, 0x2e50], + [0x2e51, 0x2e51], + [0x2e52, 0x2e52], + [0x2e53, 0x2e53], + [0x2e54, 0x2e54], + [0x2e55, 0x2e55], + [0x2e56, 0x2e56], + [0x2e57, 0x2e57], + [0x2e58, 0x2e58], + [0x2e59, 0x2e59], + [0x2e5a, 0x2e5a], + [0x2e5b, 0x2e5b], + [0x2e5c, 0x2e5c], + [0x2e5d, 0x2e5d], + [0x2e5e, 0x2e5e], + [0x2e5f, 0x2e5f], + [0x2e60, 0x2e60], + [0x2e61, 0x2e61], + [0x2e62, 0x2e62], + [0x2e63, 0x2e63], + [0x2e64, 0x2e64], + [0x2e65, 0x2e65], + [0x2e66, 0x2e66], + [0x2e67, 0x2e67], + [0x2e68, 0x2e68], + [0x2e69, 0x2e69], + [0x2e6a, 0x2e6a], + [0x2e6b, 0x2e6b], + [0x2e6c, 0x2e6c], + [0x2e6d, 0x2e6d], + [0x2e6e, 0x2e6e], + [0x2e6f, 0x2e6f], + [0x2e70, 0x2e70], + [0x2e71, 0x2e71], + [0x2e72, 0x2e72], + [0x2e73, 0x2e73], + [0x2e74, 0x2e74], + [0x2e75, 0x2e75], + [0x2e76, 0x2e76], + [0x2e77, 0x2e77], + [0x2e78, 0x2e78], + [0x2e79, 0x2e79], + [0x2e7a, 0x2e7a], + [0x2e7b, 0x2e7b], + [0x2e7c, 0x2e7c], + [0x2e7d, 0x2e7d], + [0x2e7e, 0x2e7e], + [0x2e7f, 0x2e7f], + [0x2e80, 0x2e80], /* CJK RADICAL REPEAT */ + [0x2e81, 0x2e81], /* CJK RADICAL CLIFF */ + [0x2e82, 0x2e82], /* CJK RADICAL SECOND ONE */ + [0x2e83, 0x2e83], /* CJK RADICAL SECOND TWO */ + [0x2e84, 0x2e84], /* CJK RADICAL SECOND THREE */ + [0x2e85, 0x2e85], /* CJK RADICAL PERSON */ + [0x2e86, 0x2e86], /* CJK RADICAL BOX */ + [0x2e87, 0x2e87], /* CJK RADICAL TABLE */ + [0x2e88, 0x2e88], /* CJK RADICAL KNIFE ONE */ + [0x2e89, 0x2e89], /* CJK RADICAL KNIFE TWO */ + [0x2e8a, 0x2e8a], /* CJK RADICAL DIVINATION */ + [0x2e8b, 0x2e8b], /* CJK RADICAL SEAL */ + [0x2e8c, 0x2e8c], /* CJK RADICAL SMALL ONE */ + [0x2e8d, 0x2e8d], /* CJK RADICAL SMALL TWO */ + [0x2e8e, 0x2e8e], /* CJK RADICAL LAME ONE */ + [0x2e8f, 0x2e8f], /* CJK RADICAL LAME TWO */ + [0x2e90, 0x2e90], /* CJK RADICAL LAME THREE */ + [0x2e91, 0x2e91], /* CJK RADICAL LAME FOUR */ + [0x2e92, 0x2e92], /* CJK RADICAL SNAKE */ + [0x2e93, 0x2e93], /* CJK RADICAL THREAD */ + [0x2e94, 0x2e94], /* CJK RADICAL SNOUT ONE */ + [0x2e95, 0x2e95], /* CJK RADICAL SNOUT TWO */ + [0x2e96, 0x2e96], /* CJK RADICAL HEART ONE */ + [0x2e97, 0x2e97], /* CJK RADICAL HEART TWO */ + [0x2e98, 0x2e98], /* CJK RADICAL HAND */ + [0x2e99, 0x2e99], /* CJK RADICAL RAP */ + [0x2e9a, 0x2e9a], + [0x2e9b, 0x2e9b], /* CJK RADICAL CHOKE */ + [0x2e9c, 0x2e9c], /* CJK RADICAL SUN */ + [0x2e9d, 0x2e9d], /* CJK RADICAL MOON */ + [0x2e9e, 0x2e9e], /* CJK RADICAL DEATH */ + [0x2e9f, 0x2e9f], /* CJK RADICAL MOTHER */ + [0x2ea0, 0x2ea0], /* CJK RADICAL CIVILIAN */ + [0x2ea1, 0x2ea1], /* CJK RADICAL WATER ONE */ + [0x2ea2, 0x2ea2], /* CJK RADICAL WATER TWO */ + [0x2ea3, 0x2ea3], /* CJK RADICAL FIRE */ + [0x2ea4, 0x2ea4], /* CJK RADICAL PAW ONE */ + [0x2ea5, 0x2ea5], /* CJK RADICAL PAW TWO */ + [0x2ea6, 0x2ea6], /* CJK RADICAL SIMPLIFIED HALF TREE TRUNK */ + [0x2ea7, 0x2ea7], /* CJK RADICAL COW */ + [0x2ea8, 0x2ea8], /* CJK RADICAL DOG */ + [0x2ea9, 0x2ea9], /* CJK RADICAL JADE */ + [0x2eaa, 0x2eaa], /* CJK RADICAL BOLT OF CLOTH */ + [0x2eab, 0x2eab], /* CJK RADICAL EYE */ + [0x2eac, 0x2eac], /* CJK RADICAL SPIRIT ONE */ + [0x2ead, 0x2ead], /* CJK RADICAL SPIRIT TWO */ + [0x2eae, 0x2eae], /* CJK RADICAL BAMBOO */ + [0x2eaf, 0x2eaf], /* CJK RADICAL SILK */ + [0x2eb0, 0x2eb0], /* CJK RADICAL C-SIMPLIFIED SILK */ + [0x2eb1, 0x2eb1], /* CJK RADICAL NET ONE */ + [0x2eb2, 0x2eb2], /* CJK RADICAL NET TWO */ + [0x2eb3, 0x2eb3], /* CJK RADICAL NET THREE */ + [0x2eb4, 0x2eb4], /* CJK RADICAL NET FOUR */ + [0x2eb5, 0x2eb5], /* CJK RADICAL MESH */ + [0x2eb6, 0x2eb6], /* CJK RADICAL SHEEP */ + [0x2eb7, 0x2eb7], /* CJK RADICAL RAM */ + [0x2eb8, 0x2eb8], /* CJK RADICAL EWE */ + [0x2eb9, 0x2eb9], /* CJK RADICAL OLD */ + [0x2eba, 0x2eba], /* CJK RADICAL BRUSH ONE */ + [0x2ebb, 0x2ebb], /* CJK RADICAL BRUSH TWO */ + [0x2ebc, 0x2ebc], /* CJK RADICAL MEAT */ + [0x2ebd, 0x2ebd], /* CJK RADICAL MORTAR */ + [0x2ebe, 0x2ebe], /* CJK RADICAL GRASS ONE */ + [0x2ebf, 0x2ebf], /* CJK RADICAL GRASS TWO */ + [0x2ec0, 0x2ec0], /* CJK RADICAL GRASS THREE */ + [0x2ec1, 0x2ec1], /* CJK RADICAL TIGER */ + [0x2ec2, 0x2ec2], /* CJK RADICAL CLOTHES */ + [0x2ec3, 0x2ec3], /* CJK RADICAL WEST ONE */ + [0x2ec4, 0x2ec4], /* CJK RADICAL WEST TWO */ + [0x2ec5, 0x2ec5], /* CJK RADICAL C-SIMPLIFIED SEE */ + [0x2ec6, 0x2ec6], /* CJK RADICAL SIMPLIFIED HORN */ + [0x2ec7, 0x2ec7], /* CJK RADICAL HORN */ + [0x2ec8, 0x2ec8], /* CJK RADICAL C-SIMPLIFIED SPEECH */ + [0x2ec9, 0x2ec9], /* CJK RADICAL C-SIMPLIFIED SHELL */ + [0x2eca, 0x2eca], /* CJK RADICAL FOOT */ + [0x2ecb, 0x2ecb], /* CJK RADICAL C-SIMPLIFIED CART */ + [0x2ecc, 0x2ecc], /* CJK RADICAL SIMPLIFIED WALK */ + [0x2ecd, 0x2ecd], /* CJK RADICAL WALK ONE */ + [0x2ece, 0x2ece], /* CJK RADICAL WALK TWO */ + [0x2ecf, 0x2ecf], /* CJK RADICAL CITY */ + [0x2ed0, 0x2ed0], /* CJK RADICAL C-SIMPLIFIED GOLD */ + [0x2ed1, 0x2ed1], /* CJK RADICAL LONG ONE */ + [0x2ed2, 0x2ed2], /* CJK RADICAL LONG TWO */ + [0x2ed3, 0x2ed3], /* CJK RADICAL C-SIMPLIFIED LONG */ + [0x2ed4, 0x2ed4], /* CJK RADICAL C-SIMPLIFIED GATE */ + [0x2ed5, 0x2ed5], /* CJK RADICAL MOUND ONE */ + [0x2ed6, 0x2ed6], /* CJK RADICAL MOUND TWO */ + [0x2ed7, 0x2ed7], /* CJK RADICAL RAIN */ + [0x2ed8, 0x2ed8], /* CJK RADICAL BLUE */ + [0x2ed9, 0x2ed9], /* CJK RADICAL C-SIMPLIFIED TANNED LEATHER */ + [0x2eda, 0x2eda], /* CJK RADICAL C-SIMPLIFIED LEAF */ + [0x2edb, 0x2edb], /* CJK RADICAL C-SIMPLIFIED WIND */ + [0x2edc, 0x2edc], /* CJK RADICAL C-SIMPLIFIED FLY */ + [0x2edd, 0x2edd], /* CJK RADICAL EAT ONE */ + [0x2ede, 0x2ede], /* CJK RADICAL EAT TWO */ + [0x2edf, 0x2edf], /* CJK RADICAL EAT THREE */ + [0x2ee0, 0x2ee0], /* CJK RADICAL C-SIMPLIFIED EAT */ + [0x2ee1, 0x2ee1], /* CJK RADICAL HEAD */ + [0x2ee2, 0x2ee2], /* CJK RADICAL C-SIMPLIFIED HORSE */ + [0x2ee3, 0x2ee3], /* CJK RADICAL BONE */ + [0x2ee4, 0x2ee4], /* CJK RADICAL GHOST */ + [0x2ee5, 0x2ee5], /* CJK RADICAL C-SIMPLIFIED FISH */ + [0x2ee6, 0x2ee6], /* CJK RADICAL C-SIMPLIFIED BIRD */ + [0x2ee7, 0x2ee7], /* CJK RADICAL C-SIMPLIFIED SALT */ + [0x2ee8, 0x2ee8], /* CJK RADICAL SIMPLIFIED WHEAT */ + [0x2ee9, 0x2ee9], /* CJK RADICAL SIMPLIFIED YELLOW */ + [0x2eea, 0x2eea], /* CJK RADICAL C-SIMPLIFIED FROG */ + [0x2eeb, 0x2eeb], /* CJK RADICAL J-SIMPLIFIED EVEN */ + [0x2eec, 0x2eec], /* CJK RADICAL C-SIMPLIFIED EVEN */ + [0x2eed, 0x2eed], /* CJK RADICAL J-SIMPLIFIED TOOTH */ + [0x2eee, 0x2eee], /* CJK RADICAL C-SIMPLIFIED TOOTH */ + [0x2eef, 0x2eef], /* CJK RADICAL J-SIMPLIFIED DRAGON */ + [0x2ef0, 0x2ef0], /* CJK RADICAL C-SIMPLIFIED DRAGON */ + [0x2ef1, 0x2ef1], /* CJK RADICAL TURTLE */ + [0x2ef2, 0x2ef2], /* CJK RADICAL J-SIMPLIFIED TURTLE */ + [0x2ef3, 0x2ef3], /* CJK RADICAL C-SIMPLIFIED TURTLE */ + [0x2ef4, 0x2ef4], + [0x2ef5, 0x2ef5], + [0x2ef6, 0x2ef6], + [0x2ef7, 0x2ef7], + [0x2ef8, 0x2ef8], + [0x2ef9, 0x2ef9], + [0x2efa, 0x2efa], + [0x2efb, 0x2efb], + [0x2efc, 0x2efc], + [0x2efd, 0x2efd], + [0x2efe, 0x2efe], + [0x2eff, 0x2eff], + [0x2f00, 0x2f00], /* KANGXI RADICAL ONE */ + [0x2f01, 0x2f01], /* KANGXI RADICAL LINE */ + [0x2f02, 0x2f02], /* KANGXI RADICAL DOT */ + [0x2f03, 0x2f03], /* KANGXI RADICAL SLASH */ + [0x2f04, 0x2f04], /* KANGXI RADICAL SECOND */ + [0x2f05, 0x2f05], /* KANGXI RADICAL HOOK */ + [0x2f06, 0x2f06], /* KANGXI RADICAL TWO */ + [0x2f07, 0x2f07], /* KANGXI RADICAL LID */ + [0x2f08, 0x2f08], /* KANGXI RADICAL MAN */ + [0x2f09, 0x2f09], /* KANGXI RADICAL LEGS */ + [0x2f0a, 0x2f0a], /* KANGXI RADICAL ENTER */ + [0x2f0b, 0x2f0b], /* KANGXI RADICAL EIGHT */ + [0x2f0c, 0x2f0c], /* KANGXI RADICAL DOWN BOX */ + [0x2f0d, 0x2f0d], /* KANGXI RADICAL COVER */ + [0x2f0e, 0x2f0e], /* KANGXI RADICAL ICE */ + [0x2f0f, 0x2f0f], /* KANGXI RADICAL TABLE */ + [0x2f10, 0x2f10], /* KANGXI RADICAL OPEN BOX */ + [0x2f11, 0x2f11], /* KANGXI RADICAL KNIFE */ + [0x2f12, 0x2f12], /* KANGXI RADICAL POWER */ + [0x2f13, 0x2f13], /* KANGXI RADICAL WRAP */ + [0x2f14, 0x2f14], /* KANGXI RADICAL SPOON */ + [0x2f15, 0x2f15], /* KANGXI RADICAL RIGHT OPEN BOX */ + [0x2f16, 0x2f16], /* KANGXI RADICAL HIDING ENCLOSURE */ + [0x2f17, 0x2f17], /* KANGXI RADICAL TEN */ + [0x2f18, 0x2f18], /* KANGXI RADICAL DIVINATION */ + [0x2f19, 0x2f19], /* KANGXI RADICAL SEAL */ + [0x2f1a, 0x2f1a], /* KANGXI RADICAL CLIFF */ + [0x2f1b, 0x2f1b], /* KANGXI RADICAL PRIVATE */ + [0x2f1c, 0x2f1c], /* KANGXI RADICAL AGAIN */ + [0x2f1d, 0x2f1d], /* KANGXI RADICAL MOUTH */ + [0x2f1e, 0x2f1e], /* KANGXI RADICAL ENCLOSURE */ + [0x2f1f, 0x2f1f], /* KANGXI RADICAL EARTH */ + [0x2f20, 0x2f20], /* KANGXI RADICAL SCHOLAR */ + [0x2f21, 0x2f21], /* KANGXI RADICAL GO */ + [0x2f22, 0x2f22], /* KANGXI RADICAL GO SLOWLY */ + [0x2f23, 0x2f23], /* KANGXI RADICAL EVENING */ + [0x2f24, 0x2f24], /* KANGXI RADICAL BIG */ + [0x2f25, 0x2f25], /* KANGXI RADICAL WOMAN */ + [0x2f26, 0x2f26], /* KANGXI RADICAL CHILD */ + [0x2f27, 0x2f27], /* KANGXI RADICAL ROOF */ + [0x2f28, 0x2f28], /* KANGXI RADICAL INCH */ + [0x2f29, 0x2f29], /* KANGXI RADICAL SMALL */ + [0x2f2a, 0x2f2a], /* KANGXI RADICAL LAME */ + [0x2f2b, 0x2f2b], /* KANGXI RADICAL CORPSE */ + [0x2f2c, 0x2f2c], /* KANGXI RADICAL SPROUT */ + [0x2f2d, 0x2f2d], /* KANGXI RADICAL MOUNTAIN */ + [0x2f2e, 0x2f2e], /* KANGXI RADICAL RIVER */ + [0x2f2f, 0x2f2f], /* KANGXI RADICAL WORK */ + [0x2f30, 0x2f30], /* KANGXI RADICAL ONESELF */ + [0x2f31, 0x2f31], /* KANGXI RADICAL TURBAN */ + [0x2f32, 0x2f32], /* KANGXI RADICAL DRY */ + [0x2f33, 0x2f33], /* KANGXI RADICAL SHORT THREAD */ + [0x2f34, 0x2f34], /* KANGXI RADICAL DOTTED CLIFF */ + [0x2f35, 0x2f35], /* KANGXI RADICAL LONG STRIDE */ + [0x2f36, 0x2f36], /* KANGXI RADICAL TWO HANDS */ + [0x2f37, 0x2f37], /* KANGXI RADICAL SHOOT */ + [0x2f38, 0x2f38], /* KANGXI RADICAL BOW */ + [0x2f39, 0x2f39], /* KANGXI RADICAL SNOUT */ + [0x2f3a, 0x2f3a], /* KANGXI RADICAL BRISTLE */ + [0x2f3b, 0x2f3b], /* KANGXI RADICAL STEP */ + [0x2f3c, 0x2f3c], /* KANGXI RADICAL HEART */ + [0x2f3d, 0x2f3d], /* KANGXI RADICAL HALBERD */ + [0x2f3e, 0x2f3e], /* KANGXI RADICAL DOOR */ + [0x2f3f, 0x2f3f], /* KANGXI RADICAL HAND */ + [0x2f40, 0x2f40], /* KANGXI RADICAL BRANCH */ + [0x2f41, 0x2f41], /* KANGXI RADICAL RAP */ + [0x2f42, 0x2f42], /* KANGXI RADICAL SCRIPT */ + [0x2f43, 0x2f43], /* KANGXI RADICAL DIPPER */ + [0x2f44, 0x2f44], /* KANGXI RADICAL AXE */ + [0x2f45, 0x2f45], /* KANGXI RADICAL SQUARE */ + [0x2f46, 0x2f46], /* KANGXI RADICAL NOT */ + [0x2f47, 0x2f47], /* KANGXI RADICAL SUN */ + [0x2f48, 0x2f48], /* KANGXI RADICAL SAY */ + [0x2f49, 0x2f49], /* KANGXI RADICAL MOON */ + [0x2f4a, 0x2f4a], /* KANGXI RADICAL TREE */ + [0x2f4b, 0x2f4b], /* KANGXI RADICAL LACK */ + [0x2f4c, 0x2f4c], /* KANGXI RADICAL STOP */ + [0x2f4d, 0x2f4d], /* KANGXI RADICAL DEATH */ + [0x2f4e, 0x2f4e], /* KANGXI RADICAL WEAPON */ + [0x2f4f, 0x2f4f], /* KANGXI RADICAL DO NOT */ + [0x2f50, 0x2f50], /* KANGXI RADICAL COMPARE */ + [0x2f51, 0x2f51], /* KANGXI RADICAL FUR */ + [0x2f52, 0x2f52], /* KANGXI RADICAL CLAN */ + [0x2f53, 0x2f53], /* KANGXI RADICAL STEAM */ + [0x2f54, 0x2f54], /* KANGXI RADICAL WATER */ + [0x2f55, 0x2f55], /* KANGXI RADICAL FIRE */ + [0x2f56, 0x2f56], /* KANGXI RADICAL CLAW */ + [0x2f57, 0x2f57], /* KANGXI RADICAL FATHER */ + [0x2f58, 0x2f58], /* KANGXI RADICAL DOUBLE X */ + [0x2f59, 0x2f59], /* KANGXI RADICAL HALF TREE TRUNK */ + [0x2f5a, 0x2f5a], /* KANGXI RADICAL SLICE */ + [0x2f5b, 0x2f5b], /* KANGXI RADICAL FANG */ + [0x2f5c, 0x2f5c], /* KANGXI RADICAL COW */ + [0x2f5d, 0x2f5d], /* KANGXI RADICAL DOG */ + [0x2f5e, 0x2f5e], /* KANGXI RADICAL PROFOUND */ + [0x2f5f, 0x2f5f], /* KANGXI RADICAL JADE */ + [0x2f60, 0x2f60], /* KANGXI RADICAL MELON */ + [0x2f61, 0x2f61], /* KANGXI RADICAL TILE */ + [0x2f62, 0x2f62], /* KANGXI RADICAL SWEET */ + [0x2f63, 0x2f63], /* KANGXI RADICAL LIFE */ + [0x2f64, 0x2f64], /* KANGXI RADICAL USE */ + [0x2f65, 0x2f65], /* KANGXI RADICAL FIELD */ + [0x2f66, 0x2f66], /* KANGXI RADICAL BOLT OF CLOTH */ + [0x2f67, 0x2f67], /* KANGXI RADICAL SICKNESS */ + [0x2f68, 0x2f68], /* KANGXI RADICAL DOTTED TENT */ + [0x2f69, 0x2f69], /* KANGXI RADICAL WHITE */ + [0x2f6a, 0x2f6a], /* KANGXI RADICAL SKIN */ + [0x2f6b, 0x2f6b], /* KANGXI RADICAL DISH */ + [0x2f6c, 0x2f6c], /* KANGXI RADICAL EYE */ + [0x2f6d, 0x2f6d], /* KANGXI RADICAL SPEAR */ + [0x2f6e, 0x2f6e], /* KANGXI RADICAL ARROW */ + [0x2f6f, 0x2f6f], /* KANGXI RADICAL STONE */ + [0x2f70, 0x2f70], /* KANGXI RADICAL SPIRIT */ + [0x2f71, 0x2f71], /* KANGXI RADICAL TRACK */ + [0x2f72, 0x2f72], /* KANGXI RADICAL GRAIN */ + [0x2f73, 0x2f73], /* KANGXI RADICAL CAVE */ + [0x2f74, 0x2f74], /* KANGXI RADICAL STAND */ + [0x2f75, 0x2f75], /* KANGXI RADICAL BAMBOO */ + [0x2f76, 0x2f76], /* KANGXI RADICAL RICE */ + [0x2f77, 0x2f77], /* KANGXI RADICAL SILK */ + [0x2f78, 0x2f78], /* KANGXI RADICAL JAR */ + [0x2f79, 0x2f79], /* KANGXI RADICAL NET */ + [0x2f7a, 0x2f7a], /* KANGXI RADICAL SHEEP */ + [0x2f7b, 0x2f7b], /* KANGXI RADICAL FEATHER */ + [0x2f7c, 0x2f7c], /* KANGXI RADICAL OLD */ + [0x2f7d, 0x2f7d], /* KANGXI RADICAL AND */ + [0x2f7e, 0x2f7e], /* KANGXI RADICAL PLOW */ + [0x2f7f, 0x2f7f], /* KANGXI RADICAL EAR */ + [0x2f80, 0x2f80], /* KANGXI RADICAL BRUSH */ + [0x2f81, 0x2f81], /* KANGXI RADICAL MEAT */ + [0x2f82, 0x2f82], /* KANGXI RADICAL MINISTER */ + [0x2f83, 0x2f83], /* KANGXI RADICAL SELF */ + [0x2f84, 0x2f84], /* KANGXI RADICAL ARRIVE */ + [0x2f85, 0x2f85], /* KANGXI RADICAL MORTAR */ + [0x2f86, 0x2f86], /* KANGXI RADICAL TONGUE */ + [0x2f87, 0x2f87], /* KANGXI RADICAL OPPOSE */ + [0x2f88, 0x2f88], /* KANGXI RADICAL BOAT */ + [0x2f89, 0x2f89], /* KANGXI RADICAL STOPPING */ + [0x2f8a, 0x2f8a], /* KANGXI RADICAL COLOR */ + [0x2f8b, 0x2f8b], /* KANGXI RADICAL GRASS */ + [0x2f8c, 0x2f8c], /* KANGXI RADICAL TIGER */ + [0x2f8d, 0x2f8d], /* KANGXI RADICAL INSECT */ + [0x2f8e, 0x2f8e], /* KANGXI RADICAL BLOOD */ + [0x2f8f, 0x2f8f], /* KANGXI RADICAL WALK ENCLOSURE */ + [0x2f90, 0x2f90], /* KANGXI RADICAL CLOTHES */ + [0x2f91, 0x2f91], /* KANGXI RADICAL WEST */ + [0x2f92, 0x2f92], /* KANGXI RADICAL SEE */ + [0x2f93, 0x2f93], /* KANGXI RADICAL HORN */ + [0x2f94, 0x2f94], /* KANGXI RADICAL SPEECH */ + [0x2f95, 0x2f95], /* KANGXI RADICAL VALLEY */ + [0x2f96, 0x2f96], /* KANGXI RADICAL BEAN */ + [0x2f97, 0x2f97], /* KANGXI RADICAL PIG */ + [0x2f98, 0x2f98], /* KANGXI RADICAL BADGER */ + [0x2f99, 0x2f99], /* KANGXI RADICAL SHELL */ + [0x2f9a, 0x2f9a], /* KANGXI RADICAL RED */ + [0x2f9b, 0x2f9b], /* KANGXI RADICAL RUN */ + [0x2f9c, 0x2f9c], /* KANGXI RADICAL FOOT */ + [0x2f9d, 0x2f9d], /* KANGXI RADICAL BODY */ + [0x2f9e, 0x2f9e], /* KANGXI RADICAL CART */ + [0x2f9f, 0x2f9f], /* KANGXI RADICAL BITTER */ + [0x2fa0, 0x2fa0], /* KANGXI RADICAL MORNING */ + [0x2fa1, 0x2fa1], /* KANGXI RADICAL WALK */ + [0x2fa2, 0x2fa2], /* KANGXI RADICAL CITY */ + [0x2fa3, 0x2fa3], /* KANGXI RADICAL WINE */ + [0x2fa4, 0x2fa4], /* KANGXI RADICAL DISTINGUISH */ + [0x2fa5, 0x2fa5], /* KANGXI RADICAL VILLAGE */ + [0x2fa6, 0x2fa6], /* KANGXI RADICAL GOLD */ + [0x2fa7, 0x2fa7], /* KANGXI RADICAL LONG */ + [0x2fa8, 0x2fa8], /* KANGXI RADICAL GATE */ + [0x2fa9, 0x2fa9], /* KANGXI RADICAL MOUND */ + [0x2faa, 0x2faa], /* KANGXI RADICAL SLAVE */ + [0x2fab, 0x2fab], /* KANGXI RADICAL SHORT TAILED BIRD */ + [0x2fac, 0x2fac], /* KANGXI RADICAL RAIN */ + [0x2fad, 0x2fad], /* KANGXI RADICAL BLUE */ + [0x2fae, 0x2fae], /* KANGXI RADICAL WRONG */ + [0x2faf, 0x2faf], /* KANGXI RADICAL FACE */ + [0x2fb0, 0x2fb0], /* KANGXI RADICAL LEATHER */ + [0x2fb1, 0x2fb1], /* KANGXI RADICAL TANNED LEATHER */ + [0x2fb2, 0x2fb2], /* KANGXI RADICAL LEEK */ + [0x2fb3, 0x2fb3], /* KANGXI RADICAL SOUND */ + [0x2fb4, 0x2fb4], /* KANGXI RADICAL LEAF */ + [0x2fb5, 0x2fb5], /* KANGXI RADICAL WIND */ + [0x2fb6, 0x2fb6], /* KANGXI RADICAL FLY */ + [0x2fb7, 0x2fb7], /* KANGXI RADICAL EAT */ + [0x2fb8, 0x2fb8], /* KANGXI RADICAL HEAD */ + [0x2fb9, 0x2fb9], /* KANGXI RADICAL FRAGRANT */ + [0x2fba, 0x2fba], /* KANGXI RADICAL HORSE */ + [0x2fbb, 0x2fbb], /* KANGXI RADICAL BONE */ + [0x2fbc, 0x2fbc], /* KANGXI RADICAL TALL */ + [0x2fbd, 0x2fbd], /* KANGXI RADICAL HAIR */ + [0x2fbe, 0x2fbe], /* KANGXI RADICAL FIGHT */ + [0x2fbf, 0x2fbf], /* KANGXI RADICAL SACRIFICIAL WINE */ + [0x2fc0, 0x2fc0], /* KANGXI RADICAL CAULDRON */ + [0x2fc1, 0x2fc1], /* KANGXI RADICAL GHOST */ + [0x2fc2, 0x2fc2], /* KANGXI RADICAL FISH */ + [0x2fc3, 0x2fc3], /* KANGXI RADICAL BIRD */ + [0x2fc4, 0x2fc4], /* KANGXI RADICAL SALT */ + [0x2fc5, 0x2fc5], /* KANGXI RADICAL DEER */ + [0x2fc6, 0x2fc6], /* KANGXI RADICAL WHEAT */ + [0x2fc7, 0x2fc7], /* KANGXI RADICAL HEMP */ + [0x2fc8, 0x2fc8], /* KANGXI RADICAL YELLOW */ + [0x2fc9, 0x2fc9], /* KANGXI RADICAL MILLET */ + [0x2fca, 0x2fca], /* KANGXI RADICAL BLACK */ + [0x2fcb, 0x2fcb], /* KANGXI RADICAL EMBROIDERY */ + [0x2fcc, 0x2fcc], /* KANGXI RADICAL FROG */ + [0x2fcd, 0x2fcd], /* KANGXI RADICAL TRIPOD */ + [0x2fce, 0x2fce], /* KANGXI RADICAL DRUM */ + [0x2fcf, 0x2fcf], /* KANGXI RADICAL RAT */ + [0x2fd0, 0x2fd0], /* KANGXI RADICAL NOSE */ + [0x2fd1, 0x2fd1], /* KANGXI RADICAL EVEN */ + [0x2fd2, 0x2fd2], /* KANGXI RADICAL TOOTH */ + [0x2fd3, 0x2fd3], /* KANGXI RADICAL DRAGON */ + [0x2fd4, 0x2fd4], /* KANGXI RADICAL TURTLE */ + [0x2fd5, 0x2fd5], /* KANGXI RADICAL FLUTE */ + [0x2fd6, 0x2fd6], + [0x2fd7, 0x2fd7], + [0x2fd8, 0x2fd8], + [0x2fd9, 0x2fd9], + [0x2fda, 0x2fda], + [0x2fdb, 0x2fdb], + [0x2fdc, 0x2fdc], + [0x2fdd, 0x2fdd], + [0x2fde, 0x2fde], + [0x2fdf, 0x2fdf], + [0x2fe0, 0x2fe0], + [0x2fe1, 0x2fe1], + [0x2fe2, 0x2fe2], + [0x2fe3, 0x2fe3], + [0x2fe4, 0x2fe4], + [0x2fe5, 0x2fe5], + [0x2fe6, 0x2fe6], + [0x2fe7, 0x2fe7], + [0x2fe8, 0x2fe8], + [0x2fe9, 0x2fe9], + [0x2fea, 0x2fea], + [0x2feb, 0x2feb], + [0x2fec, 0x2fec], + [0x2fed, 0x2fed], + [0x2fee, 0x2fee], + [0x2fef, 0x2fef], + [0x2ff0, 0x2ff0], /* IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT */ + [0x2ff1, 0x2ff1], /* IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW */ + [0x2ff2, 0x2ff2], /* IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT */ + [0x2ff3, 0x2ff3], /* IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW */ + [0x2ff4, 0x2ff4], /* IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND */ + [0x2ff5, 0x2ff5], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE */ + [0x2ff6, 0x2ff6], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW */ + [0x2ff7, 0x2ff7], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT */ + [0x2ff8, 0x2ff8], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT */ + [0x2ff9, 0x2ff9], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT */ + [0x2ffa, 0x2ffa], /* IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT */ + [0x2ffb, 0x2ffb], /* IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID */ + [0x2ffc, 0x2ffc], + [0x2ffd, 0x2ffd], + [0x2ffe, 0x2ffe], + [0x2fff, 0x2fff], + [0x3000, 0x3000], /* IDEOGRAPHIC SPACE */ + [0x3001, 0x3001], /* IDEOGRAPHIC COMMA */ + [0x3002, 0x3002], /* IDEOGRAPHIC FULL STOP (IDEOGRAPHIC PERIOD) */ + [0x3003, 0x3003], /* DITTO MARK */ + [0x3004, 0x3004], /* JAPANESE INDUSTRIAL STANDARD SYMBOL */ + [0x3005, 0x3005], /* IDEOGRAPHIC ITERATION MARK */ + [0x3006, 0x3006], /* IDEOGRAPHIC CLOSING MARK */ + [0x3007, 0x3007], /* IDEOGRAPHIC NUMBER ZERO */ + [0x3008, 0x3008], /* LEFT ANGLE BRACKET (OPENING ANGLE BRACKET) */ + [0x3009, 0x3009], /* RIGHT ANGLE BRACKET (CLOSING ANGLE BRACKET) */ + [0x300a, 0x300a], /* LEFT DOUBLE ANGLE BRACKET (OPENING DOUBLE ANGLE BRACKET) */ + [0x300b, 0x300b], /* RIGHT DOUBLE ANGLE BRACKET (CLOSING DOUBLE ANGLE BRACKET) */ + [0x300c, 0x300c], /* LEFT CORNER BRACKET (OPENING CORNER BRACKET) */ + [0x300d, 0x300d], /* RIGHT CORNER BRACKET (CLOSING CORNER BRACKET) */ + [0x300e, 0x300e], /* LEFT WHITE CORNER BRACKET (OPENING WHITE CORNER BRACKET) */ + [0x300f, 0x300f], /* RIGHT WHITE CORNER BRACKET (CLOSING WHITE CORNER BRACKET) */ + [0x3010, 0x3010], /* LEFT BLACK LENTICULAR BRACKET (OPENING BLACK LENTICULAR BRACKET) */ + [0x3011, 0x3011], /* RIGHT BLACK LENTICULAR BRACKET (CLOSING BLACK LENTICULAR BRACKET) */ + [0x3012, 0x3012], /* POSTAL MARK */ + [0x3013, 0x3013], /* GETA MARK */ + [0x3014, 0x3014], /* LEFT TORTOISE SHELL BRACKET (OPENING TORTOISE SHELL BRACKET) */ + [0x3015, 0x3015], /* RIGHT TORTOISE SHELL BRACKET (CLOSING TORTOISE SHELL BRACKET) */ + [0x3016, 0x3016], /* LEFT WHITE LENTICULAR BRACKET (OPENING WHITE LENTICULAR BRACKET) */ + [0x3017, 0x3017], /* RIGHT WHITE LENTICULAR BRACKET (CLOSING WHITE LENTICULAR BRACKET) */ + [0x3018, 0x3018], /* LEFT WHITE TORTOISE SHELL BRACKET (OPENING WHITE TORTOISE SHELL BRACKET) */ + [0x3019, 0x3019], /* RIGHT WHITE TORTOISE SHELL BRACKET (CLOSING WHITE TORTOISE SHELL BRACKET) */ + [0x301a, 0x301a], /* LEFT WHITE SQUARE BRACKET (OPENING WHITE SQUARE BRACKET) */ + [0x301b, 0x301b], /* RIGHT WHITE SQUARE BRACKET (CLOSING WHITE SQUARE BRACKET) */ + [0x301c, 0x301c], /* WAVE DASH */ + [0x301d, 0x301d], /* REVERSED DOUBLE PRIME QUOTATION MARK */ + [0x301e, 0x301e], /* DOUBLE PRIME QUOTATION MARK */ + [0x301f, 0x301f], /* LOW DOUBLE PRIME QUOTATION MARK */ + [0x3020, 0x3020], /* POSTAL MARK FACE */ + [0x3021, 0x3021], /* HANGZHOU NUMERAL ONE */ + [0x3022, 0x3022], /* HANGZHOU NUMERAL TWO */ + [0x3023, 0x3023], /* HANGZHOU NUMERAL THREE */ + [0x3024, 0x3024], /* HANGZHOU NUMERAL FOUR */ + [0x3025, 0x3025], /* HANGZHOU NUMERAL FIVE */ + [0x3026, 0x3026], /* HANGZHOU NUMERAL SIX */ + [0x3027, 0x3027], /* HANGZHOU NUMERAL SEVEN */ + [0x3028, 0x3028], /* HANGZHOU NUMERAL EIGHT */ + [0x3029, 0x3029], /* HANGZHOU NUMERAL NINE */ + [0x302a, 0x302a], /* IDEOGRAPHIC LEVEL TONE MARK */ + [0x302b, 0x302b], /* IDEOGRAPHIC RISING TONE MARK */ + [0x302c, 0x302c], /* IDEOGRAPHIC DEPARTING TONE MARK */ + [0x302d, 0x302d], /* IDEOGRAPHIC ENTERING TONE MARK */ + [0x302e, 0x302e], /* HANGUL SINGLE DOT TONE MARK */ + [0x302f, 0x302f], /* HANGUL DOUBLE DOT TONE MARK */ + [0x3030, 0x3030], /* WAVY DASH */ + [0x3031, 0x3031], /* VERTICAL KANA REPEAT MARK */ + [0x3032, 0x3032], /* VERTICAL KANA REPEAT WITH VOICED SOUND MARK */ + [0x3033, 0x3033], /* VERTICAL KANA REPEAT MARK UPPER HALF */ + [0x3034, 0x3034], /* VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF */ + [0x3035, 0x3035], /* VERTICAL KANA REPEAT MARK LOWER HALF */ + [0x3036, 0x3036], /* CIRCLED POSTAL MARK */ + [0x3037, 0x3037], /* IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL */ + [0x3038, 0x3038], /* HANGZHOU NUMERAL TEN */ + [0x3039, 0x3039], /* HANGZHOU NUMERAL TWENTY */ + [0x303a, 0x303a], /* HANGZHOU NUMERAL THIRTY */ + [0x303b, 0x303b], /* VERTICAL IDEOGRAPHIC ITERATION MARK */ + [0x303c, 0x303c], /* MASU MARK */ + [0x303d, 0x303d], /* PART ALTERNATION MARK */ + [0x303e, 0x303e], /* IDEOGRAPHIC VARIATION INDICATOR */ + [0x303f, 0x303f], /* IDEOGRAPHIC HALF FILL SPACE */ + [0x3040, 0x3040], + [0x3041, 0x3041], /* HIRAGANA LETTER SMALL A */ + [0x3042, 0x3042], /* HIRAGANA LETTER A */ + [0x3043, 0x3043], /* HIRAGANA LETTER SMALL I */ + [0x3044, 0x3044], /* HIRAGANA LETTER I */ + [0x3045, 0x3045], /* HIRAGANA LETTER SMALL U */ + [0x3046, 0x3046], /* HIRAGANA LETTER U */ + [0x3047, 0x3047], /* HIRAGANA LETTER SMALL E */ + [0x3048, 0x3048], /* HIRAGANA LETTER E */ + [0x3049, 0x3049], /* HIRAGANA LETTER SMALL O */ + [0x304a, 0x304a], /* HIRAGANA LETTER O */ + [0x304b, 0x304b], /* HIRAGANA LETTER KA */ + [0x304c, 0x304c], /* HIRAGANA LETTER GA */ + [0x304d, 0x304d], /* HIRAGANA LETTER KI */ + [0x304e, 0x304e], /* HIRAGANA LETTER GI */ + [0x304f, 0x304f], /* HIRAGANA LETTER KU */ + [0x3050, 0x3050], /* HIRAGANA LETTER GU */ + [0x3051, 0x3051], /* HIRAGANA LETTER KE */ + [0x3052, 0x3052], /* HIRAGANA LETTER GE */ + [0x3053, 0x3053], /* HIRAGANA LETTER KO */ + [0x3054, 0x3054], /* HIRAGANA LETTER GO */ + [0x3055, 0x3055], /* HIRAGANA LETTER SA */ + [0x3056, 0x3056], /* HIRAGANA LETTER ZA */ + [0x3057, 0x3057], /* HIRAGANA LETTER SI */ + [0x3058, 0x3058], /* HIRAGANA LETTER ZI */ + [0x3059, 0x3059], /* HIRAGANA LETTER SU */ + [0x305a, 0x305a], /* HIRAGANA LETTER ZU */ + [0x305b, 0x305b], /* HIRAGANA LETTER SE */ + [0x305c, 0x305c], /* HIRAGANA LETTER ZE */ + [0x305d, 0x305d], /* HIRAGANA LETTER SO */ + [0x305e, 0x305e], /* HIRAGANA LETTER ZO */ + [0x305f, 0x305f], /* HIRAGANA LETTER TA */ + [0x3060, 0x3060], /* HIRAGANA LETTER DA */ + [0x3061, 0x3061], /* HIRAGANA LETTER TI */ + [0x3062, 0x3062], /* HIRAGANA LETTER DI */ + [0x3063, 0x3063], /* HIRAGANA LETTER SMALL TU */ + [0x3064, 0x3064], /* HIRAGANA LETTER TU */ + [0x3065, 0x3065], /* HIRAGANA LETTER DU */ + [0x3066, 0x3066], /* HIRAGANA LETTER TE */ + [0x3067, 0x3067], /* HIRAGANA LETTER DE */ + [0x3068, 0x3068], /* HIRAGANA LETTER TO */ + [0x3069, 0x3069], /* HIRAGANA LETTER DO */ + [0x306a, 0x306a], /* HIRAGANA LETTER NA */ + [0x306b, 0x306b], /* HIRAGANA LETTER NI */ + [0x306c, 0x306c], /* HIRAGANA LETTER NU */ + [0x306d, 0x306d], /* HIRAGANA LETTER NE */ + [0x306e, 0x306e], /* HIRAGANA LETTER NO */ + [0x306f, 0x306f], /* HIRAGANA LETTER HA */ + [0x3070, 0x3070], /* HIRAGANA LETTER BA */ + [0x3071, 0x3071], /* HIRAGANA LETTER PA */ + [0x3072, 0x3072], /* HIRAGANA LETTER HI */ + [0x3073, 0x3073], /* HIRAGANA LETTER BI */ + [0x3074, 0x3074], /* HIRAGANA LETTER PI */ + [0x3075, 0x3075], /* HIRAGANA LETTER HU */ + [0x3076, 0x3076], /* HIRAGANA LETTER BU */ + [0x3077, 0x3077], /* HIRAGANA LETTER PU */ + [0x3078, 0x3078], /* HIRAGANA LETTER HE */ + [0x3079, 0x3079], /* HIRAGANA LETTER BE */ + [0x307a, 0x307a], /* HIRAGANA LETTER PE */ + [0x307b, 0x307b], /* HIRAGANA LETTER HO */ + [0x307c, 0x307c], /* HIRAGANA LETTER BO */ + [0x307d, 0x307d], /* HIRAGANA LETTER PO */ + [0x307e, 0x307e], /* HIRAGANA LETTER MA */ + [0x307f, 0x307f], /* HIRAGANA LETTER MI */ + [0x3080, 0x3080], /* HIRAGANA LETTER MU */ + [0x3081, 0x3081], /* HIRAGANA LETTER ME */ + [0x3082, 0x3082], /* HIRAGANA LETTER MO */ + [0x3083, 0x3083], /* HIRAGANA LETTER SMALL YA */ + [0x3084, 0x3084], /* HIRAGANA LETTER YA */ + [0x3085, 0x3085], /* HIRAGANA LETTER SMALL YU */ + [0x3086, 0x3086], /* HIRAGANA LETTER YU */ + [0x3087, 0x3087], /* HIRAGANA LETTER SMALL YO */ + [0x3088, 0x3088], /* HIRAGANA LETTER YO */ + [0x3089, 0x3089], /* HIRAGANA LETTER RA */ + [0x308a, 0x308a], /* HIRAGANA LETTER RI */ + [0x308b, 0x308b], /* HIRAGANA LETTER RU */ + [0x308c, 0x308c], /* HIRAGANA LETTER RE */ + [0x308d, 0x308d], /* HIRAGANA LETTER RO */ + [0x308e, 0x308e], /* HIRAGANA LETTER SMALL WA */ + [0x308f, 0x308f], /* HIRAGANA LETTER WA */ + [0x3090, 0x3090], /* HIRAGANA LETTER WI */ + [0x3091, 0x3091], /* HIRAGANA LETTER WE */ + [0x3092, 0x3092], /* HIRAGANA LETTER WO */ + [0x3093, 0x3093], /* HIRAGANA LETTER N */ + [0x3094, 0x3094], /* HIRAGANA LETTER VU */ + [0x3095, 0x3095], /* HIRAGANA LETTER SMALL KA */ + [0x3096, 0x3096], /* HIRAGANA LETTER SMALL KE */ + [0x3097, 0x3097], + [0x3098, 0x3098], + [0x3099, 0x3099], /* COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK (NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK) */ + [0x309a, 0x309a], /* COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK (NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK) */ + [0x309b, 0x309b], /* KATAKANA-HIRAGANA VOICED SOUND MARK */ + [0x309c, 0x309c], /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */ + [0x309d, 0x309d], /* HIRAGANA ITERATION MARK */ + [0x309e, 0x309e], /* HIRAGANA VOICED ITERATION MARK */ + [0x309f, 0x309f], /* HIRAGANA DIGRAPH YORI */ + [0x30a0, 0x30a0], /* KATAKANA-HIRAGANA DOUBLE HYPHEN */ + [0x30a1, 0x30a1], /* KATAKANA LETTER SMALL A */ + [0x30a2, 0x30a2], /* KATAKANA LETTER A */ + [0x30a3, 0x30a3], /* KATAKANA LETTER SMALL I */ + [0x30a4, 0x30a4], /* KATAKANA LETTER I */ + [0x30a5, 0x30a5], /* KATAKANA LETTER SMALL U */ + [0x30a6, 0x30a6], /* KATAKANA LETTER U */ + [0x30a7, 0x30a7], /* KATAKANA LETTER SMALL E */ + [0x30a8, 0x30a8], /* KATAKANA LETTER E */ + [0x30a9, 0x30a9], /* KATAKANA LETTER SMALL O */ + [0x30aa, 0x30aa], /* KATAKANA LETTER O */ + [0x30ab, 0x30ab], /* KATAKANA LETTER KA */ + [0x30ac, 0x30ac], /* KATAKANA LETTER GA */ + [0x30ad, 0x30ad], /* KATAKANA LETTER KI */ + [0x30ae, 0x30ae], /* KATAKANA LETTER GI */ + [0x30af, 0x30af], /* KATAKANA LETTER KU */ + [0x30b0, 0x30b0], /* KATAKANA LETTER GU */ + [0x30b1, 0x30b1], /* KATAKANA LETTER KE */ + [0x30b2, 0x30b2], /* KATAKANA LETTER GE */ + [0x30b3, 0x30b3], /* KATAKANA LETTER KO */ + [0x30b4, 0x30b4], /* KATAKANA LETTER GO */ + [0x30b5, 0x30b5], /* KATAKANA LETTER SA */ + [0x30b6, 0x30b6], /* KATAKANA LETTER ZA */ + [0x30b7, 0x30b7], /* KATAKANA LETTER SI */ + [0x30b8, 0x30b8], /* KATAKANA LETTER ZI */ + [0x30b9, 0x30b9], /* KATAKANA LETTER SU */ + [0x30ba, 0x30ba], /* KATAKANA LETTER ZU */ + [0x30bb, 0x30bb], /* KATAKANA LETTER SE */ + [0x30bc, 0x30bc], /* KATAKANA LETTER ZE */ + [0x30bd, 0x30bd], /* KATAKANA LETTER SO */ + [0x30be, 0x30be], /* KATAKANA LETTER ZO */ + [0x30bf, 0x30bf], /* KATAKANA LETTER TA */ + [0x30c0, 0x30c0], /* KATAKANA LETTER DA */ + [0x30c1, 0x30c1], /* KATAKANA LETTER TI */ + [0x30c2, 0x30c2], /* KATAKANA LETTER DI */ + [0x30c3, 0x30c3], /* KATAKANA LETTER SMALL TU */ + [0x30c4, 0x30c4], /* KATAKANA LETTER TU */ + [0x30c5, 0x30c5], /* KATAKANA LETTER DU */ + [0x30c6, 0x30c6], /* KATAKANA LETTER TE */ + [0x30c7, 0x30c7], /* KATAKANA LETTER DE */ + [0x30c8, 0x30c8], /* KATAKANA LETTER TO */ + [0x30c9, 0x30c9], /* KATAKANA LETTER DO */ + [0x30ca, 0x30ca], /* KATAKANA LETTER NA */ + [0x30cb, 0x30cb], /* KATAKANA LETTER NI */ + [0x30cc, 0x30cc], /* KATAKANA LETTER NU */ + [0x30cd, 0x30cd], /* KATAKANA LETTER NE */ + [0x30ce, 0x30ce], /* KATAKANA LETTER NO */ + [0x30cf, 0x30cf], /* KATAKANA LETTER HA */ + [0x30d0, 0x30d0], /* KATAKANA LETTER BA */ + [0x30d1, 0x30d1], /* KATAKANA LETTER PA */ + [0x30d2, 0x30d2], /* KATAKANA LETTER HI */ + [0x30d3, 0x30d3], /* KATAKANA LETTER BI */ + [0x30d4, 0x30d4], /* KATAKANA LETTER PI */ + [0x30d5, 0x30d5], /* KATAKANA LETTER HU */ + [0x30d6, 0x30d6], /* KATAKANA LETTER BU */ + [0x30d7, 0x30d7], /* KATAKANA LETTER PU */ + [0x30d8, 0x30d8], /* KATAKANA LETTER HE */ + [0x30d9, 0x30d9], /* KATAKANA LETTER BE */ + [0x30da, 0x30da], /* KATAKANA LETTER PE */ + [0x30db, 0x30db], /* KATAKANA LETTER HO */ + [0x30dc, 0x30dc], /* KATAKANA LETTER BO */ + [0x30dd, 0x30dd], /* KATAKANA LETTER PO */ + [0x30de, 0x30de], /* KATAKANA LETTER MA */ + [0x30df, 0x30df], /* KATAKANA LETTER MI */ + [0x30e0, 0x30e0], /* KATAKANA LETTER MU */ + [0x30e1, 0x30e1], /* KATAKANA LETTER ME */ + [0x30e2, 0x30e2], /* KATAKANA LETTER MO */ + [0x30e3, 0x30e3], /* KATAKANA LETTER SMALL YA */ + [0x30e4, 0x30e4], /* KATAKANA LETTER YA */ + [0x30e5, 0x30e5], /* KATAKANA LETTER SMALL YU */ + [0x30e6, 0x30e6], /* KATAKANA LETTER YU */ + [0x30e7, 0x30e7], /* KATAKANA LETTER SMALL YO */ + [0x30e8, 0x30e8], /* KATAKANA LETTER YO */ + [0x30e9, 0x30e9], /* KATAKANA LETTER RA */ + [0x30ea, 0x30ea], /* KATAKANA LETTER RI */ + [0x30eb, 0x30eb], /* KATAKANA LETTER RU */ + [0x30ec, 0x30ec], /* KATAKANA LETTER RE */ + [0x30ed, 0x30ed], /* KATAKANA LETTER RO */ + [0x30ee, 0x30ee], /* KATAKANA LETTER SMALL WA */ + [0x30ef, 0x30ef], /* KATAKANA LETTER WA */ + [0x30f0, 0x30f0], /* KATAKANA LETTER WI */ + [0x30f1, 0x30f1], /* KATAKANA LETTER WE */ + [0x30f2, 0x30f2], /* KATAKANA LETTER WO */ + [0x30f3, 0x30f3], /* KATAKANA LETTER N */ + [0x30f4, 0x30f4], /* KATAKANA LETTER VU */ + [0x30f5, 0x30f5], /* KATAKANA LETTER SMALL KA */ + [0x30f6, 0x30f6], /* KATAKANA LETTER SMALL KE */ + [0x30f7, 0x30f7], /* KATAKANA LETTER VA */ + [0x30f8, 0x30f8], /* KATAKANA LETTER VI */ + [0x30f9, 0x30f9], /* KATAKANA LETTER VE */ + [0x30fa, 0x30fa], /* KATAKANA LETTER VO */ + [0x30fb, 0x30fb], /* KATAKANA MIDDLE DOT */ + [0x30fc, 0x30fc], /* KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + [0x30fd, 0x30fd], /* KATAKANA ITERATION MARK */ + [0x30fe, 0x30fe], /* KATAKANA VOICED ITERATION MARK */ + [0x30ff, 0x30ff], /* KATAKANA DIGRAPH KOTO */ + [0x3100, 0x3100], + [0x3101, 0x3101], + [0x3102, 0x3102], + [0x3103, 0x3103], + [0x3104, 0x3104], + [0x3105, 0x3105], /* BOPOMOFO LETTER B */ + [0x3106, 0x3106], /* BOPOMOFO LETTER P */ + [0x3107, 0x3107], /* BOPOMOFO LETTER M */ + [0x3108, 0x3108], /* BOPOMOFO LETTER F */ + [0x3109, 0x3109], /* BOPOMOFO LETTER D */ + [0x310a, 0x310a], /* BOPOMOFO LETTER T */ + [0x310b, 0x310b], /* BOPOMOFO LETTER N */ + [0x310c, 0x310c], /* BOPOMOFO LETTER L */ + [0x310d, 0x310d], /* BOPOMOFO LETTER G */ + [0x310e, 0x310e], /* BOPOMOFO LETTER K */ + [0x310f, 0x310f], /* BOPOMOFO LETTER H */ + [0x3110, 0x3110], /* BOPOMOFO LETTER J */ + [0x3111, 0x3111], /* BOPOMOFO LETTER Q */ + [0x3112, 0x3112], /* BOPOMOFO LETTER X */ + [0x3113, 0x3113], /* BOPOMOFO LETTER ZH */ + [0x3114, 0x3114], /* BOPOMOFO LETTER CH */ + [0x3115, 0x3115], /* BOPOMOFO LETTER SH */ + [0x3116, 0x3116], /* BOPOMOFO LETTER R */ + [0x3117, 0x3117], /* BOPOMOFO LETTER Z */ + [0x3118, 0x3118], /* BOPOMOFO LETTER C */ + [0x3119, 0x3119], /* BOPOMOFO LETTER S */ + [0x311a, 0x311a], /* BOPOMOFO LETTER A */ + [0x311b, 0x311b], /* BOPOMOFO LETTER O */ + [0x311c, 0x311c], /* BOPOMOFO LETTER E */ + [0x311d, 0x311d], /* BOPOMOFO LETTER EH */ + [0x311e, 0x311e], /* BOPOMOFO LETTER AI */ + [0x311f, 0x311f], /* BOPOMOFO LETTER EI */ + [0x3120, 0x3120], /* BOPOMOFO LETTER AU */ + [0x3121, 0x3121], /* BOPOMOFO LETTER OU */ + [0x3122, 0x3122], /* BOPOMOFO LETTER AN */ + [0x3123, 0x3123], /* BOPOMOFO LETTER EN */ + [0x3124, 0x3124], /* BOPOMOFO LETTER ANG */ + [0x3125, 0x3125], /* BOPOMOFO LETTER ENG */ + [0x3126, 0x3126], /* BOPOMOFO LETTER ER */ + [0x3127, 0x3127], /* BOPOMOFO LETTER I */ + [0x3128, 0x3128], /* BOPOMOFO LETTER U */ + [0x3129, 0x3129], /* BOPOMOFO LETTER IU */ + [0x312a, 0x312a], /* BOPOMOFO LETTER V */ + [0x312b, 0x312b], /* BOPOMOFO LETTER NG */ + [0x312c, 0x312c], /* BOPOMOFO LETTER GN */ + [0x312d, 0x312d], /* BOPOMOFO LETTER IH */ + [0x312e, 0x312e], + [0x312f, 0x312f], + [0x3130, 0x3130], + [0x3131, 0x3131], /* HANGUL LETTER KIYEOK (HANGUL LETTER GIYEOG) */ + [0x3132, 0x3132], /* HANGUL LETTER SSANGKIYEOK (HANGUL LETTER SSANG GIYEOG) */ + [0x3133, 0x3133], /* HANGUL LETTER KIYEOK-SIOS (HANGUL LETTER GIYEOG SIOS) */ + [0x3134, 0x3134], /* HANGUL LETTER NIEUN */ + [0x3135, 0x3135], /* HANGUL LETTER NIEUN-CIEUC (HANGUL LETTER NIEUN JIEUJ) */ + [0x3136, 0x3136], /* HANGUL LETTER NIEUN-HIEUH (HANGUL LETTER NIEUN HIEUH) */ + [0x3137, 0x3137], /* HANGUL LETTER TIKEUT (HANGUL LETTER DIGEUD) */ + [0x3138, 0x3138], /* HANGUL LETTER SSANGTIKEUT (HANGUL LETTER SSANG DIGEUD) */ + [0x3139, 0x3139], /* HANGUL LETTER RIEUL (HANGUL LETTER LIEUL) */ + [0x313a, 0x313a], /* HANGUL LETTER RIEUL-KIYEOK (HANGUL LETTER LIEUL GIYEOG) */ + [0x313b, 0x313b], /* HANGUL LETTER RIEUL-MIEUM (HANGUL LETTER LIEUL MIEUM) */ + [0x313c, 0x313c], /* HANGUL LETTER RIEUL-PIEUP (HANGUL LETTER LIEUL BIEUB) */ + [0x313d, 0x313d], /* HANGUL LETTER RIEUL-SIOS (HANGUL LETTER LIEUL SIOS) */ + [0x313e, 0x313e], /* HANGUL LETTER RIEUL-THIEUTH (HANGUL LETTER LIEUL TIEUT) */ + [0x313f, 0x313f], /* HANGUL LETTER RIEUL-PHIEUPH (HANGUL LETTER LIEUL PIEUP) */ + [0x3140, 0x3140], /* HANGUL LETTER RIEUL-HIEUH (HANGUL LETTER LIEUL HIEUH) */ + [0x3141, 0x3141], /* HANGUL LETTER MIEUM */ + [0x3142, 0x3142], /* HANGUL LETTER PIEUP (HANGUL LETTER BIEUB) */ + [0x3143, 0x3143], /* HANGUL LETTER SSANGPIEUP (HANGUL LETTER SSANG BIEUB) */ + [0x3144, 0x3144], /* HANGUL LETTER PIEUP-SIOS (HANGUL LETTER BIEUB SIOS) */ + [0x3145, 0x3145], /* HANGUL LETTER SIOS */ + [0x3146, 0x3146], /* HANGUL LETTER SSANGSIOS (HANGUL LETTER SSANG SIOS) */ + [0x3147, 0x3147], /* HANGUL LETTER IEUNG */ + [0x3148, 0x3148], /* HANGUL LETTER CIEUC (HANGUL LETTER JIEUJ) */ + [0x3149, 0x3149], /* HANGUL LETTER SSANGCIEUC (HANGUL LETTER SSANG JIEUJ) */ + [0x314a, 0x314a], /* HANGUL LETTER CHIEUCH (HANGUL LETTER CIEUC) */ + [0x314b, 0x314b], /* HANGUL LETTER KHIEUKH (HANGUL LETTER KIYEOK) */ + [0x314c, 0x314c], /* HANGUL LETTER THIEUTH (HANGUL LETTER TIEUT) */ + [0x314d, 0x314d], /* HANGUL LETTER PHIEUPH (HANGUL LETTER PIEUP) */ + [0x314e, 0x314e], /* HANGUL LETTER HIEUH */ + [0x314f, 0x314f], /* HANGUL LETTER A */ + [0x3150, 0x3150], /* HANGUL LETTER AE */ + [0x3151, 0x3151], /* HANGUL LETTER YA */ + [0x3152, 0x3152], /* HANGUL LETTER YAE */ + [0x3153, 0x3153], /* HANGUL LETTER EO */ + [0x3154, 0x3154], /* HANGUL LETTER E */ + [0x3155, 0x3155], /* HANGUL LETTER YEO */ + [0x3156, 0x3156], /* HANGUL LETTER YE */ + [0x3157, 0x3157], /* HANGUL LETTER O */ + [0x3158, 0x3158], /* HANGUL LETTER WA */ + [0x3159, 0x3159], /* HANGUL LETTER WAE */ + [0x315a, 0x315a], /* HANGUL LETTER OE */ + [0x315b, 0x315b], /* HANGUL LETTER YO */ + [0x315c, 0x315c], /* HANGUL LETTER U */ + [0x315d, 0x315d], /* HANGUL LETTER WEO */ + [0x315e, 0x315e], /* HANGUL LETTER WE */ + [0x315f, 0x315f], /* HANGUL LETTER WI */ + [0x3160, 0x3160], /* HANGUL LETTER YU */ + [0x3161, 0x3161], /* HANGUL LETTER EU */ + [0x3162, 0x3162], /* HANGUL LETTER YI */ + [0x3163, 0x3163], /* HANGUL LETTER I */ + [0x3164, 0x3164], /* HANGUL FILLER (HANGUL CAE OM) */ + [0x3165, 0x3165], /* HANGUL LETTER SSANGNIEUN (HANGUL LETTER SSANG NIEUN) */ + [0x3166, 0x3166], /* HANGUL LETTER NIEUN-TIKEUT (HANGUL LETTER NIEUN DIGEUD) */ + [0x3167, 0x3167], /* HANGUL LETTER NIEUN-SIOS (HANGUL LETTER NIEUN SIOS) */ + [0x3168, 0x3168], /* HANGUL LETTER NIEUN-PANSIOS (HANGUL LETTER NIEUN BAN CHI EUM) */ + [0x3169, 0x3169], /* HANGUL LETTER RIEUL-KIYEOK-SIOS (HANGUL LETTER LIEUL GIYEOG SIOS) */ + [0x316a, 0x316a], /* HANGUL LETTER RIEUL-TIKEUT (HANGUL LETTER LIEUL DIGEUD) */ + [0x316b, 0x316b], /* HANGUL LETTER RIEUL-PIEUP-SIOS (HANGUL LETTER LIEUL BIEUB SIOS) */ + [0x316c, 0x316c], /* HANGUL LETTER RIEUL-PANSIOS (HANGUL LETTER LIEUL BAN CHI EUM) */ + [0x316d, 0x316d], /* HANGUL LETTER RIEUL-YEORINHIEUH (HANGUL LETTER LIEUL YEOLIN HIEUH) */ + [0x316e, 0x316e], /* HANGUL LETTER MIEUM-PIEUP (HANGUL LETTER MIEUM BIEUB) */ + [0x316f, 0x316f], /* HANGUL LETTER MIEUM-SIOS (HANGUL LETTER MIEUM SIOS) */ + [0x3170, 0x3170], /* HANGUL LETTER MIEUM-PANSIOS (HANGUL LETTER BIEUB BAN CHI EUM) */ + [0x3171, 0x3171], /* HANGUL LETTER KAPYEOUNMIEUM (HANGUL LETTER MIEUM SUN GYEONG EUM) */ + [0x3172, 0x3172], /* HANGUL LETTER PIEUP-KIYEOK (HANGUL LETTER BIEUB GIYEOG) */ + [0x3173, 0x3173], /* HANGUL LETTER PIEUP-TIKEUT (HANGUL LETTER BIEUB DIGEUD) */ + [0x3174, 0x3174], /* HANGUL LETTER PIEUP-SIOS-KIYEOK (HANGUL LETTER BIEUB SIOS GIYEOG) */ + [0x3175, 0x3175], /* HANGUL LETTER PIEUP-SIOS-TIKEUT (HANGUL LETTER BIEUB SIOS DIGEUD) */ + [0x3176, 0x3176], /* HANGUL LETTER PIEUP-CIEUC (HANGUL LETTER BIEUB JIEUJ) */ + [0x3177, 0x3177], /* HANGUL LETTER PIEUP-THIEUTH (HANGUL LETTER BIEUB TIEUT) */ + [0x3178, 0x3178], /* HANGUL LETTER KAPYEOUNPIEUP (HANGUL LETTER BIEUB SUN GYEONG EUM) */ + [0x3179, 0x3179], /* HANGUL LETTER KAPYEOUNSSANGPIEUP (HANGUL LETTER SSANG BIEUB SUN GYEONG EUM) */ + [0x317a, 0x317a], /* HANGUL LETTER SIOS-KIYEOK (HANGUL LETTER SIOS GIYEOG) */ + [0x317b, 0x317b], /* HANGUL LETTER SIOS-NIEUN (HANGUL LETTER SIOS NIEUN) */ + [0x317c, 0x317c], /* HANGUL LETTER SIOS-TIKEUT (HANGUL LETTER SIOS DIGEUD) */ + [0x317d, 0x317d], /* HANGUL LETTER SIOS-PIEUP (HANGUL LETTER SIOS BIEUB) */ + [0x317e, 0x317e], /* HANGUL LETTER SIOS-CIEUC (HANGUL LETTER SIOS JIEUJ) */ + [0x317f, 0x317f], /* HANGUL LETTER PANSIOS (HANGUL LETTER BAN CHI EUM) */ + [0x3180, 0x3180], /* HANGUL LETTER SSANGIEUNG (HANGUL LETTER SSANG IEUNG) */ + [0x3181, 0x3181], /* HANGUL LETTER YESIEUNG (HANGUL LETTER NGIEUNG) */ + [0x3182, 0x3182], /* HANGUL LETTER YESIEUNG-SIOS (HANGUL LETTER NGIEUNG SIOS) */ + [0x3183, 0x3183], /* HANGUL LETTER YESIEUNG-PANSIOS (HANGUL LETTER NGIEUNG BAN CHI EUM) */ + [0x3184, 0x3184], /* HANGUL LETTER KAPYEOUNPHIEUPH (HANGUL LETTER PIEUP SUN GYEONG EUM) */ + [0x3185, 0x3185], /* HANGUL LETTER SSANGHIEUH (HANGUL LETTER SSANG HIEUH) */ + [0x3186, 0x3186], /* HANGUL LETTER YEORINHIEUH (HANGUL LETTER YEOLIN HIEUH) */ + [0x3187, 0x3187], /* HANGUL LETTER YO-YA (HANGUL LETTER YOYA) */ + [0x3188, 0x3188], /* HANGUL LETTER YO-YAE (HANGUL LETTER YOYAE) */ + [0x3189, 0x3189], /* HANGUL LETTER YO-I (HANGUL LETTER YOI) */ + [0x318a, 0x318a], /* HANGUL LETTER YU-YEO (HANGUL LETTER YUYEO) */ + [0x318b, 0x318b], /* HANGUL LETTER YU-YE (HANGUL LETTER YUYE) */ + [0x318c, 0x318c], /* HANGUL LETTER YU-I (HANGUL LETTER YUI) */ + [0x318d, 0x318d], /* HANGUL LETTER ARAEA (HANGUL LETTER ALAE A) */ + [0x318e, 0x318e], /* HANGUL LETTER ARAEAE (HANGUL LETTER ALAE AE) */ + [0x318f, 0x318f], + [0x3190, 0x3190], /* IDEOGRAPHIC ANNOTATION LINKING MARK (KANBUN TATETEN) */ + [0x3191, 0x3191], /* IDEOGRAPHIC ANNOTATION REVERSE MARK (KAERITEN RE) */ + [0x3192, 0x3192], /* IDEOGRAPHIC ANNOTATION ONE MARK (KAERITEN ITI) */ + [0x3193, 0x3193], /* IDEOGRAPHIC ANNOTATION TWO MARK (KAERITEN NI) */ + [0x3194, 0x3194], /* IDEOGRAPHIC ANNOTATION THREE MARK (KAERITEN SAN) */ + [0x3195, 0x3195], /* IDEOGRAPHIC ANNOTATION FOUR MARK (KAERITEN SI) */ + [0x3196, 0x3196], /* IDEOGRAPHIC ANNOTATION TOP MARK (KAERITEN ZYOU) */ + [0x3197, 0x3197], /* IDEOGRAPHIC ANNOTATION MIDDLE MARK (KAERITEN TYUU) */ + [0x3198, 0x3198], /* IDEOGRAPHIC ANNOTATION BOTTOM MARK (KAERITEN GE) */ + [0x3199, 0x3199], /* IDEOGRAPHIC ANNOTATION FIRST MARK (KAERITEN KOU) */ + [0x319a, 0x319a], /* IDEOGRAPHIC ANNOTATION SECOND MARK (KAERITEN OTU) */ + [0x319b, 0x319b], /* IDEOGRAPHIC ANNOTATION THIRD MARK (KAERITEN HEI) */ + [0x319c, 0x319c], /* IDEOGRAPHIC ANNOTATION FOURTH MARK (KAERITEN TEI) */ + [0x319d, 0x319d], /* IDEOGRAPHIC ANNOTATION HEAVEN MARK (KAERITEN TEN) */ + [0x319e, 0x319e], /* IDEOGRAPHIC ANNOTATION EARTH MARK (KAERITEN TI) */ + [0x319f, 0x319f], /* IDEOGRAPHIC ANNOTATION MAN MARK (KAERITEN ZIN) */ + [0x31a0, 0x31a0], /* BOPOMOFO LETTER BU */ + [0x31a1, 0x31a1], /* BOPOMOFO LETTER ZI */ + [0x31a2, 0x31a2], /* BOPOMOFO LETTER JI */ + [0x31a3, 0x31a3], /* BOPOMOFO LETTER GU */ + [0x31a4, 0x31a4], /* BOPOMOFO LETTER EE */ + [0x31a5, 0x31a5], /* BOPOMOFO LETTER ENN */ + [0x31a6, 0x31a6], /* BOPOMOFO LETTER OO */ + [0x31a7, 0x31a7], /* BOPOMOFO LETTER ONN */ + [0x31a8, 0x31a8], /* BOPOMOFO LETTER IR */ + [0x31a9, 0x31a9], /* BOPOMOFO LETTER ANN */ + [0x31aa, 0x31aa], /* BOPOMOFO LETTER INN */ + [0x31ab, 0x31ab], /* BOPOMOFO LETTER UNN */ + [0x31ac, 0x31ac], /* BOPOMOFO LETTER IM */ + [0x31ad, 0x31ad], /* BOPOMOFO LETTER NGG */ + [0x31ae, 0x31ae], /* BOPOMOFO LETTER AINN */ + [0x31af, 0x31af], /* BOPOMOFO LETTER AUNN */ + [0x31b0, 0x31b0], /* BOPOMOFO LETTER AM */ + [0x31b1, 0x31b1], /* BOPOMOFO LETTER OM */ + [0x31b2, 0x31b2], /* BOPOMOFO LETTER ONG */ + [0x31b3, 0x31b3], /* BOPOMOFO LETTER INNN */ + [0x31b4, 0x31b4], /* BOPOMOFO FINAL LETTER P */ + [0x31b5, 0x31b5], /* BOPOMOFO FINAL LETTER T */ + [0x31b6, 0x31b6], /* BOPOMOFO FINAL LETTER K */ + [0x31b7, 0x31b7], /* BOPOMOFO FINAL LETTER H */ + [0x31b8, 0x31b8], /* BOPOMOFO LETTER GH */ + [0x31b9, 0x31b9], /* BOPOMOFO LETTER LH */ + [0x31ba, 0x31ba], /* BOPOMOFO LETTER ZY */ + [0x31bb, 0x31bb], + [0x31bc, 0x31bc], + [0x31bd, 0x31bd], + [0x31be, 0x31be], + [0x31bf, 0x31bf], + [0x31c0, 0x31c0], /* CJK STROKE T */ + [0x31c1, 0x31c1], /* CJK STROKE WG */ + [0x31c2, 0x31c2], /* CJK STROKE XG */ + [0x31c3, 0x31c3], /* CJK STROKE BXG */ + [0x31c4, 0x31c4], /* CJK STROKE SW */ + [0x31c5, 0x31c5], /* CJK STROKE HZZ */ + [0x31c6, 0x31c6], /* CJK STROKE HZG */ + [0x31c7, 0x31c7], /* CJK STROKE HP */ + [0x31c8, 0x31c8], /* CJK STROKE HZWG */ + [0x31c9, 0x31c9], /* CJK STROKE SZWG */ + [0x31ca, 0x31ca], /* CJK STROKE HZT */ + [0x31cb, 0x31cb], /* CJK STROKE HZZP */ + [0x31cc, 0x31cc], /* CJK STROKE HPWG */ + [0x31cd, 0x31cd], /* CJK STROKE HZW */ + [0x31ce, 0x31ce], /* CJK STROKE HZZZ */ + [0x31cf, 0x31cf], /* CJK STROKE N */ + [0x31d0, 0x31d0], /* CJK STROKE H */ + [0x31d1, 0x31d1], /* CJK STROKE S */ + [0x31d2, 0x31d2], /* CJK STROKE P */ + [0x31d3, 0x31d3], /* CJK STROKE SP */ + [0x31d4, 0x31d4], /* CJK STROKE D */ + [0x31d5, 0x31d5], /* CJK STROKE HZ */ + [0x31d6, 0x31d6], /* CJK STROKE HG */ + [0x31d7, 0x31d7], /* CJK STROKE SZ */ + [0x31d8, 0x31d8], /* CJK STROKE SWZ */ + [0x31d9, 0x31d9], /* CJK STROKE ST */ + [0x31da, 0x31da], /* CJK STROKE SG */ + [0x31db, 0x31db], /* CJK STROKE PD */ + [0x31dc, 0x31dc], /* CJK STROKE PZ */ + [0x31dd, 0x31dd], /* CJK STROKE TN */ + [0x31de, 0x31de], /* CJK STROKE SZZ */ + [0x31df, 0x31df], /* CJK STROKE SWG */ + [0x31e0, 0x31e0], /* CJK STROKE HXWG */ + [0x31e1, 0x31e1], /* CJK STROKE HZZZG */ + [0x31e2, 0x31e2], /* CJK STROKE PG */ + [0x31e3, 0x31e3], /* CJK STROKE Q */ + [0x31e4, 0x31e4], + [0x31e5, 0x31e5], + [0x31e6, 0x31e6], + [0x31e7, 0x31e7], + [0x31e8, 0x31e8], + [0x31e9, 0x31e9], + [0x31ea, 0x31ea], + [0x31eb, 0x31eb], + [0x31ec, 0x31ec], + [0x31ed, 0x31ed], + [0x31ee, 0x31ee], + [0x31ef, 0x31ef], + [0x31f0, 0x31f0], /* KATAKANA LETTER SMALL KU */ + [0x31f1, 0x31f1], /* KATAKANA LETTER SMALL SI */ + [0x31f2, 0x31f2], /* KATAKANA LETTER SMALL SU */ + [0x31f3, 0x31f3], /* KATAKANA LETTER SMALL TO */ + [0x31f4, 0x31f4], /* KATAKANA LETTER SMALL NU */ + [0x31f5, 0x31f5], /* KATAKANA LETTER SMALL HA */ + [0x31f6, 0x31f6], /* KATAKANA LETTER SMALL HI */ + [0x31f7, 0x31f7], /* KATAKANA LETTER SMALL HU */ + [0x31f8, 0x31f8], /* KATAKANA LETTER SMALL HE */ + [0x31f9, 0x31f9], /* KATAKANA LETTER SMALL HO */ + [0x31fa, 0x31fa], /* KATAKANA LETTER SMALL MU */ + [0x31fb, 0x31fb], /* KATAKANA LETTER SMALL RA */ + [0x31fc, 0x31fc], /* KATAKANA LETTER SMALL RI */ + [0x31fd, 0x31fd], /* KATAKANA LETTER SMALL RU */ + [0x31fe, 0x31fe], /* KATAKANA LETTER SMALL RE */ + [0x31ff, 0x31ff], /* KATAKANA LETTER SMALL RO */ + [0x3200, 0x3200], /* PARENTHESIZED HANGUL KIYEOK (PARENTHESIZED HANGUL GIYEOG) */ + [0x3201, 0x3201], /* PARENTHESIZED HANGUL NIEUN */ + [0x3202, 0x3202], /* PARENTHESIZED HANGUL TIKEUT (PARENTHESIZED HANGUL DIGEUD) */ + [0x3203, 0x3203], /* PARENTHESIZED HANGUL RIEUL (PARENTHESIZED HANGUL LIEUL) */ + [0x3204, 0x3204], /* PARENTHESIZED HANGUL MIEUM */ + [0x3205, 0x3205], /* PARENTHESIZED HANGUL PIEUP (PARENTHESIZED HANGUL BIEUB) */ + [0x3206, 0x3206], /* PARENTHESIZED HANGUL SIOS */ + [0x3207, 0x3207], /* PARENTHESIZED HANGUL IEUNG */ + [0x3208, 0x3208], /* PARENTHESIZED HANGUL CIEUC (PARENTHESIZED HANGUL JIEUJ) */ + [0x3209, 0x3209], /* PARENTHESIZED HANGUL CHIEUCH (PARENTHESIZED HANGUL CIEUC) */ + [0x320a, 0x320a], /* PARENTHESIZED HANGUL KHIEUKH (PARENTHESIZED HANGUL KIYEOK) */ + [0x320b, 0x320b], /* PARENTHESIZED HANGUL THIEUTH (PARENTHESIZED HANGUL TIEUT) */ + [0x320c, 0x320c], /* PARENTHESIZED HANGUL PHIEUPH (PARENTHESIZED HANGUL PIEUP) */ + [0x320d, 0x320d], /* PARENTHESIZED HANGUL HIEUH */ + [0x320e, 0x320e], /* PARENTHESIZED HANGUL KIYEOK A (PARENTHESIZED HANGUL GA) */ + [0x320f, 0x320f], /* PARENTHESIZED HANGUL NIEUN A (PARENTHESIZED HANGUL NA) */ + [0x3210, 0x3210], /* PARENTHESIZED HANGUL TIKEUT A (PARENTHESIZED HANGUL DA) */ + [0x3211, 0x3211], /* PARENTHESIZED HANGUL RIEUL A (PARENTHESIZED HANGUL LA) */ + [0x3212, 0x3212], /* PARENTHESIZED HANGUL MIEUM A (PARENTHESIZED HANGUL MA) */ + [0x3213, 0x3213], /* PARENTHESIZED HANGUL PIEUP A (PARENTHESIZED HANGUL BA) */ + [0x3214, 0x3214], /* PARENTHESIZED HANGUL SIOS A (PARENTHESIZED HANGUL SA) */ + [0x3215, 0x3215], /* PARENTHESIZED HANGUL IEUNG A (PARENTHESIZED HANGUL A) */ + [0x3216, 0x3216], /* PARENTHESIZED HANGUL CIEUC A (PARENTHESIZED HANGUL JA) */ + [0x3217, 0x3217], /* PARENTHESIZED HANGUL CHIEUCH A (PARENTHESIZED HANGUL CA) */ + [0x3218, 0x3218], /* PARENTHESIZED HANGUL KHIEUKH A (PARENTHESIZED HANGUL KA) */ + [0x3219, 0x3219], /* PARENTHESIZED HANGUL THIEUTH A (PARENTHESIZED HANGUL TA) */ + [0x321a, 0x321a], /* PARENTHESIZED HANGUL PHIEUPH A (PARENTHESIZED HANGUL PA) */ + [0x321b, 0x321b], /* PARENTHESIZED HANGUL HIEUH A (PARENTHESIZED HANGUL HA) */ + [0x321c, 0x321c], /* PARENTHESIZED HANGUL CIEUC U (PARENTHESIZED HANGUL JU) */ + [0x321d, 0x321d], /* PARENTHESIZED KOREAN CHARACTER OJEON */ + [0x321e, 0x321e], /* PARENTHESIZED KOREAN CHARACTER O HU */ + [0x321f, 0x321f], + [0x3220, 0x3220], /* PARENTHESIZED IDEOGRAPH ONE */ + [0x3221, 0x3221], /* PARENTHESIZED IDEOGRAPH TWO */ + [0x3222, 0x3222], /* PARENTHESIZED IDEOGRAPH THREE */ + [0x3223, 0x3223], /* PARENTHESIZED IDEOGRAPH FOUR */ + [0x3224, 0x3224], /* PARENTHESIZED IDEOGRAPH FIVE */ + [0x3225, 0x3225], /* PARENTHESIZED IDEOGRAPH SIX */ + [0x3226, 0x3226], /* PARENTHESIZED IDEOGRAPH SEVEN */ + [0x3227, 0x3227], /* PARENTHESIZED IDEOGRAPH EIGHT */ + [0x3228, 0x3228], /* PARENTHESIZED IDEOGRAPH NINE */ + [0x3229, 0x3229], /* PARENTHESIZED IDEOGRAPH TEN */ + [0x322a, 0x322a], /* PARENTHESIZED IDEOGRAPH MOON */ + [0x322b, 0x322b], /* PARENTHESIZED IDEOGRAPH FIRE */ + [0x322c, 0x322c], /* PARENTHESIZED IDEOGRAPH WATER */ + [0x322d, 0x322d], /* PARENTHESIZED IDEOGRAPH WOOD */ + [0x322e, 0x322e], /* PARENTHESIZED IDEOGRAPH METAL */ + [0x322f, 0x322f], /* PARENTHESIZED IDEOGRAPH EARTH */ + [0x3230, 0x3230], /* PARENTHESIZED IDEOGRAPH SUN */ + [0x3231, 0x3231], /* PARENTHESIZED IDEOGRAPH STOCK */ + [0x3232, 0x3232], /* PARENTHESIZED IDEOGRAPH HAVE */ + [0x3233, 0x3233], /* PARENTHESIZED IDEOGRAPH SOCIETY */ + [0x3234, 0x3234], /* PARENTHESIZED IDEOGRAPH NAME */ + [0x3235, 0x3235], /* PARENTHESIZED IDEOGRAPH SPECIAL */ + [0x3236, 0x3236], /* PARENTHESIZED IDEOGRAPH FINANCIAL */ + [0x3237, 0x3237], /* PARENTHESIZED IDEOGRAPH CONGRATULATION */ + [0x3238, 0x3238], /* PARENTHESIZED IDEOGRAPH LABOR */ + [0x3239, 0x3239], /* PARENTHESIZED IDEOGRAPH REPRESENT */ + [0x323a, 0x323a], /* PARENTHESIZED IDEOGRAPH CALL */ + [0x323b, 0x323b], /* PARENTHESIZED IDEOGRAPH STUDY */ + [0x323c, 0x323c], /* PARENTHESIZED IDEOGRAPH SUPERVISE */ + [0x323d, 0x323d], /* PARENTHESIZED IDEOGRAPH ENTERPRISE */ + [0x323e, 0x323e], /* PARENTHESIZED IDEOGRAPH RESOURCE */ + [0x323f, 0x323f], /* PARENTHESIZED IDEOGRAPH ALLIANCE */ + [0x3240, 0x3240], /* PARENTHESIZED IDEOGRAPH FESTIVAL */ + [0x3241, 0x3241], /* PARENTHESIZED IDEOGRAPH REST */ + [0x3242, 0x3242], /* PARENTHESIZED IDEOGRAPH SELF */ + [0x3243, 0x3243], /* PARENTHESIZED IDEOGRAPH REACH */ + [0x3244, 0x3244], /* CIRCLED IDEOGRAPH QUESTION */ + [0x3245, 0x3245], /* CIRCLED IDEOGRAPH KINDERGARTEN */ + [0x3246, 0x3246], /* CIRCLED IDEOGRAPH SCHOOL */ + [0x3247, 0x3247], /* CIRCLED IDEOGRAPH KOTO */ + [0x3248, 0x3248], /* CIRCLED NUMBER TEN ON BLACK SQUARE */ + [0x3249, 0x3249], /* CIRCLED NUMBER TWENTY ON BLACK SQUARE */ + [0x324a, 0x324a], /* CIRCLED NUMBER THIRTY ON BLACK SQUARE */ + [0x324b, 0x324b], /* CIRCLED NUMBER FORTY ON BLACK SQUARE */ + [0x324c, 0x324c], /* CIRCLED NUMBER FIFTY ON BLACK SQUARE */ + [0x324d, 0x324d], /* CIRCLED NUMBER SIXTY ON BLACK SQUARE */ + [0x324e, 0x324e], /* CIRCLED NUMBER SEVENTY ON BLACK SQUARE */ + [0x324f, 0x324f], /* CIRCLED NUMBER EIGHTY ON BLACK SQUARE */ + [0x3250, 0x3250], /* PARTNERSHIP SIGN */ + [0x3251, 0x3251], /* CIRCLED NUMBER TWENTY ONE */ + [0x3252, 0x3252], /* CIRCLED NUMBER TWENTY TWO */ + [0x3253, 0x3253], /* CIRCLED NUMBER TWENTY THREE */ + [0x3254, 0x3254], /* CIRCLED NUMBER TWENTY FOUR */ + [0x3255, 0x3255], /* CIRCLED NUMBER TWENTY FIVE */ + [0x3256, 0x3256], /* CIRCLED NUMBER TWENTY SIX */ + [0x3257, 0x3257], /* CIRCLED NUMBER TWENTY SEVEN */ + [0x3258, 0x3258], /* CIRCLED NUMBER TWENTY EIGHT */ + [0x3259, 0x3259], /* CIRCLED NUMBER TWENTY NINE */ + [0x325a, 0x325a], /* CIRCLED NUMBER THIRTY */ + [0x325b, 0x325b], /* CIRCLED NUMBER THIRTY ONE */ + [0x325c, 0x325c], /* CIRCLED NUMBER THIRTY TWO */ + [0x325d, 0x325d], /* CIRCLED NUMBER THIRTY THREE */ + [0x325e, 0x325e], /* CIRCLED NUMBER THIRTY FOUR */ + [0x325f, 0x325f], /* CIRCLED NUMBER THIRTY FIVE */ + [0x3260, 0x3260], /* CIRCLED HANGUL KIYEOK (CIRCLED HANGUL GIYEOG) */ + [0x3261, 0x3261], /* CIRCLED HANGUL NIEUN */ + [0x3262, 0x3262], /* CIRCLED HANGUL TIKEUT (CIRCLED HANGUL DIGEUD) */ + [0x3263, 0x3263], /* CIRCLED HANGUL RIEUL (CIRCLED HANGUL LIEUL) */ + [0x3264, 0x3264], /* CIRCLED HANGUL MIEUM */ + [0x3265, 0x3265], /* CIRCLED HANGUL PIEUP (CIRCLED HANGUL BIEUB) */ + [0x3266, 0x3266], /* CIRCLED HANGUL SIOS */ + [0x3267, 0x3267], /* CIRCLED HANGUL IEUNG */ + [0x3268, 0x3268], /* CIRCLED HANGUL CIEUC (CIRCLED HANGUL JIEUJ) */ + [0x3269, 0x3269], /* CIRCLED HANGUL CHIEUCH (CIRCLED HANGUL CIEUC) */ + [0x326a, 0x326a], /* CIRCLED HANGUL KHIEUKH (CIRCLED HANGUL KIYEOK) */ + [0x326b, 0x326b], /* CIRCLED HANGUL THIEUTH (CIRCLED HANGUL TIEUT) */ + [0x326c, 0x326c], /* CIRCLED HANGUL PHIEUPH (CIRCLED HANGUL PIEUP) */ + [0x326d, 0x326d], /* CIRCLED HANGUL HIEUH */ + [0x326e, 0x326e], /* CIRCLED HANGUL KIYEOK A (CIRCLED HANGUL GA) */ + [0x326f, 0x326f], /* CIRCLED HANGUL NIEUN A (CIRCLED HANGUL NA) */ + [0x3270, 0x3270], /* CIRCLED HANGUL TIKEUT A (CIRCLED HANGUL DA) */ + [0x3271, 0x3271], /* CIRCLED HANGUL RIEUL A (CIRCLED HANGUL LA) */ + [0x3272, 0x3272], /* CIRCLED HANGUL MIEUM A (CIRCLED HANGUL MA) */ + [0x3273, 0x3273], /* CIRCLED HANGUL PIEUP A (CIRCLED HANGUL BA) */ + [0x3274, 0x3274], /* CIRCLED HANGUL SIOS A (CIRCLED HANGUL SA) */ + [0x3275, 0x3275], /* CIRCLED HANGUL IEUNG A (CIRCLED HANGUL A) */ + [0x3276, 0x3276], /* CIRCLED HANGUL CIEUC A (CIRCLED HANGUL JA) */ + [0x3277, 0x3277], /* CIRCLED HANGUL CHIEUCH A (CIRCLED HANGUL CA) */ + [0x3278, 0x3278], /* CIRCLED HANGUL KHIEUKH A (CIRCLED HANGUL KA) */ + [0x3279, 0x3279], /* CIRCLED HANGUL THIEUTH A (CIRCLED HANGUL TA) */ + [0x327a, 0x327a], /* CIRCLED HANGUL PHIEUPH A (CIRCLED HANGUL PA) */ + [0x327b, 0x327b], /* CIRCLED HANGUL HIEUH A (CIRCLED HANGUL HA) */ + [0x327c, 0x327c], /* CIRCLED KOREAN CHARACTER CHAMKO */ + [0x327d, 0x327d], /* CIRCLED KOREAN CHARACTER JUEUI */ + [0x327e, 0x327e], /* CIRCLED HANGUL IEUNG U */ + [0x327f, 0x327f], /* KOREAN STANDARD SYMBOL */ + [0x3280, 0x3280], /* CIRCLED IDEOGRAPH ONE */ + [0x3281, 0x3281], /* CIRCLED IDEOGRAPH TWO */ + [0x3282, 0x3282], /* CIRCLED IDEOGRAPH THREE */ + [0x3283, 0x3283], /* CIRCLED IDEOGRAPH FOUR */ + [0x3284, 0x3284], /* CIRCLED IDEOGRAPH FIVE */ + [0x3285, 0x3285], /* CIRCLED IDEOGRAPH SIX */ + [0x3286, 0x3286], /* CIRCLED IDEOGRAPH SEVEN */ + [0x3287, 0x3287], /* CIRCLED IDEOGRAPH EIGHT */ + [0x3288, 0x3288], /* CIRCLED IDEOGRAPH NINE */ + [0x3289, 0x3289], /* CIRCLED IDEOGRAPH TEN */ + [0x328a, 0x328a], /* CIRCLED IDEOGRAPH MOON */ + [0x328b, 0x328b], /* CIRCLED IDEOGRAPH FIRE */ + [0x328c, 0x328c], /* CIRCLED IDEOGRAPH WATER */ + [0x328d, 0x328d], /* CIRCLED IDEOGRAPH WOOD */ + [0x328e, 0x328e], /* CIRCLED IDEOGRAPH METAL */ + [0x328f, 0x328f], /* CIRCLED IDEOGRAPH EARTH */ + [0x3290, 0x3290], /* CIRCLED IDEOGRAPH SUN */ + [0x3291, 0x3291], /* CIRCLED IDEOGRAPH STOCK */ + [0x3292, 0x3292], /* CIRCLED IDEOGRAPH HAVE */ + [0x3293, 0x3293], /* CIRCLED IDEOGRAPH SOCIETY */ + [0x3294, 0x3294], /* CIRCLED IDEOGRAPH NAME */ + [0x3295, 0x3295], /* CIRCLED IDEOGRAPH SPECIAL */ + [0x3296, 0x3296], /* CIRCLED IDEOGRAPH FINANCIAL */ + [0x3297, 0x3297], /* CIRCLED IDEOGRAPH CONGRATULATION */ + [0x3298, 0x3298], /* CIRCLED IDEOGRAPH LABOR */ + [0x3299, 0x3299], /* CIRCLED IDEOGRAPH SECRET */ + [0x329a, 0x329a], /* CIRCLED IDEOGRAPH MALE */ + [0x329b, 0x329b], /* CIRCLED IDEOGRAPH FEMALE */ + [0x329c, 0x329c], /* CIRCLED IDEOGRAPH SUITABLE */ + [0x329d, 0x329d], /* CIRCLED IDEOGRAPH EXCELLENT */ + [0x329e, 0x329e], /* CIRCLED IDEOGRAPH PRINT */ + [0x329f, 0x329f], /* CIRCLED IDEOGRAPH ATTENTION */ + [0x32a0, 0x32a0], /* CIRCLED IDEOGRAPH ITEM */ + [0x32a1, 0x32a1], /* CIRCLED IDEOGRAPH REST */ + [0x32a2, 0x32a2], /* CIRCLED IDEOGRAPH COPY */ + [0x32a3, 0x32a3], /* CIRCLED IDEOGRAPH CORRECT */ + [0x32a4, 0x32a4], /* CIRCLED IDEOGRAPH HIGH */ + [0x32a5, 0x32a5], /* CIRCLED IDEOGRAPH CENTRE (CIRCLED IDEOGRAPH CENTER) */ + [0x32a6, 0x32a6], /* CIRCLED IDEOGRAPH LOW */ + [0x32a7, 0x32a7], /* CIRCLED IDEOGRAPH LEFT */ + [0x32a8, 0x32a8], /* CIRCLED IDEOGRAPH RIGHT */ + [0x32a9, 0x32a9], /* CIRCLED IDEOGRAPH MEDICINE */ + [0x32aa, 0x32aa], /* CIRCLED IDEOGRAPH RELIGION */ + [0x32ab, 0x32ab], /* CIRCLED IDEOGRAPH STUDY */ + [0x32ac, 0x32ac], /* CIRCLED IDEOGRAPH SUPERVISE */ + [0x32ad, 0x32ad], /* CIRCLED IDEOGRAPH ENTERPRISE */ + [0x32ae, 0x32ae], /* CIRCLED IDEOGRAPH RESOURCE */ + [0x32af, 0x32af], /* CIRCLED IDEOGRAPH ALLIANCE */ + [0x32b0, 0x32b0], /* CIRCLED IDEOGRAPH NIGHT */ + [0x32b1, 0x32b1], /* CIRCLED NUMBER THIRTY SIX */ + [0x32b2, 0x32b2], /* CIRCLED NUMBER THIRTY SEVEN */ + [0x32b3, 0x32b3], /* CIRCLED NUMBER THIRTY EIGHT */ + [0x32b4, 0x32b4], /* CIRCLED NUMBER THIRTY NINE */ + [0x32b5, 0x32b5], /* CIRCLED NUMBER FORTY */ + [0x32b6, 0x32b6], /* CIRCLED NUMBER FORTY ONE */ + [0x32b7, 0x32b7], /* CIRCLED NUMBER FORTY TWO */ + [0x32b8, 0x32b8], /* CIRCLED NUMBER FORTY THREE */ + [0x32b9, 0x32b9], /* CIRCLED NUMBER FORTY FOUR */ + [0x32ba, 0x32ba], /* CIRCLED NUMBER FORTY FIVE */ + [0x32bb, 0x32bb], /* CIRCLED NUMBER FORTY SIX */ + [0x32bc, 0x32bc], /* CIRCLED NUMBER FORTY SEVEN */ + [0x32bd, 0x32bd], /* CIRCLED NUMBER FORTY EIGHT */ + [0x32be, 0x32be], /* CIRCLED NUMBER FORTY NINE */ + [0x32bf, 0x32bf], /* CIRCLED NUMBER FIFTY */ + [0x32c0, 0x32c0], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY */ + [0x32c1, 0x32c1], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY */ + [0x32c2, 0x32c2], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH */ + [0x32c3, 0x32c3], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL */ + [0x32c4, 0x32c4], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY */ + [0x32c5, 0x32c5], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE */ + [0x32c6, 0x32c6], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY */ + [0x32c7, 0x32c7], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST */ + [0x32c8, 0x32c8], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER */ + [0x32c9, 0x32c9], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER */ + [0x32ca, 0x32ca], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER */ + [0x32cb, 0x32cb], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER */ + [0x32cc, 0x32cc], /* SQUARE HG */ + [0x32cd, 0x32cd], /* SQUARE ERG */ + [0x32ce, 0x32ce], /* SQUARE EV */ + [0x32cf, 0x32cf], /* LIMITED LIABILITY SIGN */ + [0x32d0, 0x32d0], /* CIRCLED KATAKANA A */ + [0x32d1, 0x32d1], /* CIRCLED KATAKANA I */ + [0x32d2, 0x32d2], /* CIRCLED KATAKANA U */ + [0x32d3, 0x32d3], /* CIRCLED KATAKANA E */ + [0x32d4, 0x32d4], /* CIRCLED KATAKANA O */ + [0x32d5, 0x32d5], /* CIRCLED KATAKANA KA */ + [0x32d6, 0x32d6], /* CIRCLED KATAKANA KI */ + [0x32d7, 0x32d7], /* CIRCLED KATAKANA KU */ + [0x32d8, 0x32d8], /* CIRCLED KATAKANA KE */ + [0x32d9, 0x32d9], /* CIRCLED KATAKANA KO */ + [0x32da, 0x32da], /* CIRCLED KATAKANA SA */ + [0x32db, 0x32db], /* CIRCLED KATAKANA SI */ + [0x32dc, 0x32dc], /* CIRCLED KATAKANA SU */ + [0x32dd, 0x32dd], /* CIRCLED KATAKANA SE */ + [0x32de, 0x32de], /* CIRCLED KATAKANA SO */ + [0x32df, 0x32df], /* CIRCLED KATAKANA TA */ + [0x32e0, 0x32e0], /* CIRCLED KATAKANA TI */ + [0x32e1, 0x32e1], /* CIRCLED KATAKANA TU */ + [0x32e2, 0x32e2], /* CIRCLED KATAKANA TE */ + [0x32e3, 0x32e3], /* CIRCLED KATAKANA TO */ + [0x32e4, 0x32e4], /* CIRCLED KATAKANA NA */ + [0x32e5, 0x32e5], /* CIRCLED KATAKANA NI */ + [0x32e6, 0x32e6], /* CIRCLED KATAKANA NU */ + [0x32e7, 0x32e7], /* CIRCLED KATAKANA NE */ + [0x32e8, 0x32e8], /* CIRCLED KATAKANA NO */ + [0x32e9, 0x32e9], /* CIRCLED KATAKANA HA */ + [0x32ea, 0x32ea], /* CIRCLED KATAKANA HI */ + [0x32eb, 0x32eb], /* CIRCLED KATAKANA HU */ + [0x32ec, 0x32ec], /* CIRCLED KATAKANA HE */ + [0x32ed, 0x32ed], /* CIRCLED KATAKANA HO */ + [0x32ee, 0x32ee], /* CIRCLED KATAKANA MA */ + [0x32ef, 0x32ef], /* CIRCLED KATAKANA MI */ + [0x32f0, 0x32f0], /* CIRCLED KATAKANA MU */ + [0x32f1, 0x32f1], /* CIRCLED KATAKANA ME */ + [0x32f2, 0x32f2], /* CIRCLED KATAKANA MO */ + [0x32f3, 0x32f3], /* CIRCLED KATAKANA YA */ + [0x32f4, 0x32f4], /* CIRCLED KATAKANA YU */ + [0x32f5, 0x32f5], /* CIRCLED KATAKANA YO */ + [0x32f6, 0x32f6], /* CIRCLED KATAKANA RA */ + [0x32f7, 0x32f7], /* CIRCLED KATAKANA RI */ + [0x32f8, 0x32f8], /* CIRCLED KATAKANA RU */ + [0x32f9, 0x32f9], /* CIRCLED KATAKANA RE */ + [0x32fa, 0x32fa], /* CIRCLED KATAKANA RO */ + [0x32fb, 0x32fb], /* CIRCLED KATAKANA WA */ + [0x32fc, 0x32fc], /* CIRCLED KATAKANA WI */ + [0x32fd, 0x32fd], /* CIRCLED KATAKANA WE */ + [0x32fe, 0x32fe], /* CIRCLED KATAKANA WO */ + [0x32ff, 0x32ff], + [0x3300, 0x3300], /* SQUARE APAATO (SQUARED APAATO) */ + [0x3301, 0x3301], /* SQUARE ARUHUA (SQUARED ARUHUA) */ + [0x3302, 0x3302], /* SQUARE ANPEA (SQUARED ANPEA) */ + [0x3303, 0x3303], /* SQUARE AARU (SQUARED AARU) */ + [0x3304, 0x3304], /* SQUARE ININGU (SQUARED ININGU) */ + [0x3305, 0x3305], /* SQUARE INTI (SQUARED INTI) */ + [0x3306, 0x3306], /* SQUARE UON (SQUARED UON) */ + [0x3307, 0x3307], /* SQUARE ESUKUUDO (SQUARED ESUKUUDO) */ + [0x3308, 0x3308], /* SQUARE EEKAA (SQUARED EEKAA) */ + [0x3309, 0x3309], /* SQUARE ONSU (SQUARED ONSU) */ + [0x330a, 0x330a], /* SQUARE OOMU (SQUARED OOMU) */ + [0x330b, 0x330b], /* SQUARE KAIRI (SQUARED KAIRI) */ + [0x330c, 0x330c], /* SQUARE KARATTO (SQUARED KARATTO) */ + [0x330d, 0x330d], /* SQUARE KARORII (SQUARED KARORII) */ + [0x330e, 0x330e], /* SQUARE GARON (SQUARED GARON) */ + [0x330f, 0x330f], /* SQUARE GANMA (SQUARED GANMA) */ + [0x3310, 0x3310], /* SQUARE GIGA (SQUARED GIGA) */ + [0x3311, 0x3311], /* SQUARE GINII (SQUARED GINII) */ + [0x3312, 0x3312], /* SQUARE KYURII (SQUARED KYURII) */ + [0x3313, 0x3313], /* SQUARE GIRUDAA (SQUARED GIRUDAA) */ + [0x3314, 0x3314], /* SQUARE KIRO (SQUARED KIRO) */ + [0x3315, 0x3315], /* SQUARE KIROGURAMU (SQUARED KIROGURAMU) */ + [0x3316, 0x3316], /* SQUARE KIROMEETORU (SQUARED KIROMEETORU) */ + [0x3317, 0x3317], /* SQUARE KIROWATTO (SQUARED KIROWATTO) */ + [0x3318, 0x3318], /* SQUARE GURAMU (SQUARED GURAMU) */ + [0x3319, 0x3319], /* SQUARE GURAMUTON (SQUARED GURAMUTON) */ + [0x331a, 0x331a], /* SQUARE KURUZEIRO (SQUARED KURUZEIRO) */ + [0x331b, 0x331b], /* SQUARE KUROONE (SQUARED KUROONE) */ + [0x331c, 0x331c], /* SQUARE KEESU (SQUARED KEESU) */ + [0x331d, 0x331d], /* SQUARE KORUNA (SQUARED KORUNA) */ + [0x331e, 0x331e], /* SQUARE KOOPO (SQUARED KOOPO) */ + [0x331f, 0x331f], /* SQUARE SAIKURU (SQUARED SAIKURU) */ + [0x3320, 0x3320], /* SQUARE SANTIIMU (SQUARED SANTIIMU) */ + [0x3321, 0x3321], /* SQUARE SIRINGU (SQUARED SIRINGU) */ + [0x3322, 0x3322], /* SQUARE SENTI (SQUARED SENTI) */ + [0x3323, 0x3323], /* SQUARE SENTO (SQUARED SENTO) */ + [0x3324, 0x3324], /* SQUARE DAASU (SQUARED DAASU) */ + [0x3325, 0x3325], /* SQUARE DESI (SQUARED DESI) */ + [0x3326, 0x3326], /* SQUARE DORU (SQUARED DORU) */ + [0x3327, 0x3327], /* SQUARE TON (SQUARED TON) */ + [0x3328, 0x3328], /* SQUARE NANO (SQUARED NANO) */ + [0x3329, 0x3329], /* SQUARE NOTTO (SQUARED NOTTO) */ + [0x332a, 0x332a], /* SQUARE HAITU (SQUARED HAITU) */ + [0x332b, 0x332b], /* SQUARE PAASENTO (SQUARED PAASENTO) */ + [0x332c, 0x332c], /* SQUARE PAATU (SQUARED PAATU) */ + [0x332d, 0x332d], /* SQUARE BAARERU (SQUARED BAARERU) */ + [0x332e, 0x332e], /* SQUARE PIASUTORU (SQUARED PIASUTORU) */ + [0x332f, 0x332f], /* SQUARE PIKURU (SQUARED PIKURU) */ + [0x3330, 0x3330], /* SQUARE PIKO (SQUARED PIKO) */ + [0x3331, 0x3331], /* SQUARE BIRU (SQUARED BIRU) */ + [0x3332, 0x3332], /* SQUARE HUARADDO (SQUARED HUARADDO) */ + [0x3333, 0x3333], /* SQUARE HUIITO (SQUARED HUIITO) */ + [0x3334, 0x3334], /* SQUARE BUSSYERU (SQUARED BUSSYERU) */ + [0x3335, 0x3335], /* SQUARE HURAN (SQUARED HURAN) */ + [0x3336, 0x3336], /* SQUARE HEKUTAARU (SQUARED HEKUTAARU) */ + [0x3337, 0x3337], /* SQUARE PESO (SQUARED PESO) */ + [0x3338, 0x3338], /* SQUARE PENIHI (SQUARED PENIHI) */ + [0x3339, 0x3339], /* SQUARE HERUTU (SQUARED HERUTU) */ + [0x333a, 0x333a], /* SQUARE PENSU (SQUARED PENSU) */ + [0x333b, 0x333b], /* SQUARE PEEZI (SQUARED PEEZI) */ + [0x333c, 0x333c], /* SQUARE BEETA (SQUARED BEETA) */ + [0x333d, 0x333d], /* SQUARE POINTO (SQUARED POINTO) */ + [0x333e, 0x333e], /* SQUARE BORUTO (SQUARED BORUTO) */ + [0x333f, 0x333f], /* SQUARE HON (SQUARED HON) */ + [0x3340, 0x3340], /* SQUARE PONDO (SQUARED PONDO) */ + [0x3341, 0x3341], /* SQUARE HOORU (SQUARED HOORU) */ + [0x3342, 0x3342], /* SQUARE HOON (SQUARED HOON) */ + [0x3343, 0x3343], /* SQUARE MAIKURO (SQUARED MAIKURO) */ + [0x3344, 0x3344], /* SQUARE MAIRU (SQUARED MAIRU) */ + [0x3345, 0x3345], /* SQUARE MAHHA (SQUARED MAHHA) */ + [0x3346, 0x3346], /* SQUARE MARUKU (SQUARED MARUKU) */ + [0x3347, 0x3347], /* SQUARE MANSYON (SQUARED MANSYON) */ + [0x3348, 0x3348], /* SQUARE MIKURON (SQUARED MIKURON) */ + [0x3349, 0x3349], /* SQUARE MIRI (SQUARED MIRI) */ + [0x334a, 0x334a], /* SQUARE MIRIBAARU (SQUARED MIRIBAARU) */ + [0x334b, 0x334b], /* SQUARE MEGA (SQUARED MEGA) */ + [0x334c, 0x334c], /* SQUARE MEGATON (SQUARED MEGATON) */ + [0x334d, 0x334d], /* SQUARE MEETORU (SQUARED MEETORU) */ + [0x334e, 0x334e], /* SQUARE YAADO (SQUARED YAADO) */ + [0x334f, 0x334f], /* SQUARE YAARU (SQUARED YAARU) */ + [0x3350, 0x3350], /* SQUARE YUAN (SQUARED YUAN) */ + [0x3351, 0x3351], /* SQUARE RITTORU (SQUARED RITTORU) */ + [0x3352, 0x3352], /* SQUARE RIRA (SQUARED RIRA) */ + [0x3353, 0x3353], /* SQUARE RUPII (SQUARED RUPII) */ + [0x3354, 0x3354], /* SQUARE RUUBURU (SQUARED RUUBURU) */ + [0x3355, 0x3355], /* SQUARE REMU (SQUARED REMU) */ + [0x3356, 0x3356], /* SQUARE RENTOGEN (SQUARED RENTOGEN) */ + [0x3357, 0x3357], /* SQUARE WATTO (SQUARED WATTO) */ + [0x3358, 0x3358], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO */ + [0x3359, 0x3359], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE */ + [0x335a, 0x335a], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO */ + [0x335b, 0x335b], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE */ + [0x335c, 0x335c], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR */ + [0x335d, 0x335d], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE */ + [0x335e, 0x335e], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX */ + [0x335f, 0x335f], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN */ + [0x3360, 0x3360], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT */ + [0x3361, 0x3361], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE */ + [0x3362, 0x3362], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN */ + [0x3363, 0x3363], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN */ + [0x3364, 0x3364], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE */ + [0x3365, 0x3365], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN */ + [0x3366, 0x3366], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN */ + [0x3367, 0x3367], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN */ + [0x3368, 0x3368], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN */ + [0x3369, 0x3369], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN */ + [0x336a, 0x336a], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN */ + [0x336b, 0x336b], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN */ + [0x336c, 0x336c], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY */ + [0x336d, 0x336d], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE */ + [0x336e, 0x336e], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO */ + [0x336f, 0x336f], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE */ + [0x3370, 0x3370], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR */ + [0x3371, 0x3371], /* SQUARE HPA */ + [0x3372, 0x3372], /* SQUARE DA */ + [0x3373, 0x3373], /* SQUARE AU */ + [0x3374, 0x3374], /* SQUARE BAR */ + [0x3375, 0x3375], /* SQUARE OV */ + [0x3376, 0x3376], /* SQUARE PC */ + [0x3377, 0x3377], /* SQUARE DM */ + [0x3378, 0x3378], /* SQUARE DM SQUARED */ + [0x3379, 0x3379], /* SQUARE DM CUBED */ + [0x337a, 0x337a], /* SQUARE IU */ + [0x337b, 0x337b], /* SQUARE ERA NAME HEISEI (SQUARED TWO IDEOGRAPHS ERA NAME HEISEI) */ + [0x337c, 0x337c], /* SQUARE ERA NAME SYOUWA (SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA) */ + [0x337d, 0x337d], /* SQUARE ERA NAME TAISYOU (SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU) */ + [0x337e, 0x337e], /* SQUARE ERA NAME MEIZI (SQUARED TWO IDEOGRAPHS ERA NAME MEIZI) */ + [0x337f, 0x337f], /* SQUARE CORPORATION (SQUARED FOUR IDEOGRAPHS CORPORATION) */ + [0x3380, 0x3380], /* SQUARE PA AMPS (SQUARED PA AMPS) */ + [0x3381, 0x3381], /* SQUARE NA (SQUARED NA) */ + [0x3382, 0x3382], /* SQUARE MU A (SQUARED MU A) */ + [0x3383, 0x3383], /* SQUARE MA (SQUARED MA) */ + [0x3384, 0x3384], /* SQUARE KA (SQUARED KA) */ + [0x3385, 0x3385], /* SQUARE KB (SQUARED KB) */ + [0x3386, 0x3386], /* SQUARE MB (SQUARED MB) */ + [0x3387, 0x3387], /* SQUARE GB (SQUARED GB) */ + [0x3388, 0x3388], /* SQUARE CAL (SQUARED CAL) */ + [0x3389, 0x3389], /* SQUARE KCAL (SQUARED KCAL) */ + [0x338a, 0x338a], /* SQUARE PF (SQUARED PF) */ + [0x338b, 0x338b], /* SQUARE NF (SQUARED NF) */ + [0x338c, 0x338c], /* SQUARE MU F (SQUARED MU F) */ + [0x338d, 0x338d], /* SQUARE MU G (SQUARED MU G) */ + [0x338e, 0x338e], /* SQUARE MG (SQUARED MG) */ + [0x338f, 0x338f], /* SQUARE KG (SQUARED KG) */ + [0x3390, 0x3390], /* SQUARE HZ (SQUARED HZ) */ + [0x3391, 0x3391], /* SQUARE KHZ (SQUARED KHZ) */ + [0x3392, 0x3392], /* SQUARE MHZ (SQUARED MHZ) */ + [0x3393, 0x3393], /* SQUARE GHZ (SQUARED GHZ) */ + [0x3394, 0x3394], /* SQUARE THZ (SQUARED THZ) */ + [0x3395, 0x3395], /* SQUARE MU L (SQUARED MU L) */ + [0x3396, 0x3396], /* SQUARE ML (SQUARED ML) */ + [0x3397, 0x3397], /* SQUARE DL (SQUARED DL) */ + [0x3398, 0x3398], /* SQUARE KL (SQUARED KL) */ + [0x3399, 0x3399], /* SQUARE FM (SQUARED FM) */ + [0x339a, 0x339a], /* SQUARE NM (SQUARED NM) */ + [0x339b, 0x339b], /* SQUARE MU M (SQUARED MU M) */ + [0x339c, 0x339c], /* SQUARE MM (SQUARED MM) */ + [0x339d, 0x339d], /* SQUARE CM (SQUARED CM) */ + [0x339e, 0x339e], /* SQUARE KM (SQUARED KM) */ + [0x339f, 0x339f], /* SQUARE MM SQUARED (SQUARED MM SQUARED) */ + [0x33a0, 0x33a0], /* SQUARE CM SQUARED (SQUARED CM SQUARED) */ + [0x33a1, 0x33a1], /* SQUARE M SQUARED (SQUARED M SQUARED) */ + [0x33a2, 0x33a2], /* SQUARE KM SQUARED (SQUARED KM SQUARED) */ + [0x33a3, 0x33a3], /* SQUARE MM CUBED (SQUARED MM CUBED) */ + [0x33a4, 0x33a4], /* SQUARE CM CUBED (SQUARED CM CUBED) */ + [0x33a5, 0x33a5], /* SQUARE M CUBED (SQUARED M CUBED) */ + [0x33a6, 0x33a6], /* SQUARE KM CUBED (SQUARED KM CUBED) */ + [0x33a7, 0x33a7], /* SQUARE M OVER S (SQUARED M OVER S) */ + [0x33a8, 0x33a8], /* SQUARE M OVER S SQUARED (SQUARED M OVER S SQUARED) */ + [0x33a9, 0x33a9], /* SQUARE PA (SQUARED PA) */ + [0x33aa, 0x33aa], /* SQUARE KPA (SQUARED KPA) */ + [0x33ab, 0x33ab], /* SQUARE MPA (SQUARED MPA) */ + [0x33ac, 0x33ac], /* SQUARE GPA (SQUARED GPA) */ + [0x33ad, 0x33ad], /* SQUARE RAD (SQUARED RAD) */ + [0x33ae, 0x33ae], /* SQUARE RAD OVER S (SQUARED RAD OVER S) */ + [0x33af, 0x33af], /* SQUARE RAD OVER S SQUARED (SQUARED RAD OVER S SQUARED) */ + [0x33b0, 0x33b0], /* SQUARE PS (SQUARED PS) */ + [0x33b1, 0x33b1], /* SQUARE NS (SQUARED NS) */ + [0x33b2, 0x33b2], /* SQUARE MU S (SQUARED MU S) */ + [0x33b3, 0x33b3], /* SQUARE MS (SQUARED MS) */ + [0x33b4, 0x33b4], /* SQUARE PV (SQUARED PV) */ + [0x33b5, 0x33b5], /* SQUARE NV (SQUARED NV) */ + [0x33b6, 0x33b6], /* SQUARE MU V (SQUARED MU V) */ + [0x33b7, 0x33b7], /* SQUARE MV (SQUARED MV) */ + [0x33b8, 0x33b8], /* SQUARE KV (SQUARED KV) */ + [0x33b9, 0x33b9], /* SQUARE MV MEGA (SQUARED MV MEGA) */ + [0x33ba, 0x33ba], /* SQUARE PW (SQUARED PW) */ + [0x33bb, 0x33bb], /* SQUARE NW (SQUARED NW) */ + [0x33bc, 0x33bc], /* SQUARE MU W (SQUARED MU W) */ + [0x33bd, 0x33bd], /* SQUARE MW (SQUARED MW) */ + [0x33be, 0x33be], /* SQUARE KW (SQUARED KW) */ + [0x33bf, 0x33bf], /* SQUARE MW MEGA (SQUARED MW MEGA) */ + [0x33c0, 0x33c0], /* SQUARE K OHM (SQUARED K OHM) */ + [0x33c1, 0x33c1], /* SQUARE M OHM (SQUARED M OHM) */ + [0x33c2, 0x33c2], /* SQUARE AM (SQUARED AM) */ + [0x33c3, 0x33c3], /* SQUARE BQ (SQUARED BQ) */ + [0x33c4, 0x33c4], /* SQUARE CC (SQUARED CC) */ + [0x33c5, 0x33c5], /* SQUARE CD (SQUARED CD) */ + [0x33c6, 0x33c6], /* SQUARE C OVER KG (SQUARED C OVER KG) */ + [0x33c7, 0x33c7], /* SQUARE CO (SQUARED CO) */ + [0x33c8, 0x33c8], /* SQUARE DB (SQUARED DB) */ + [0x33c9, 0x33c9], /* SQUARE GY (SQUARED GY) */ + [0x33ca, 0x33ca], /* SQUARE HA (SQUARED HA) */ + [0x33cb, 0x33cb], /* SQUARE HP (SQUARED HP) */ + [0x33cc, 0x33cc], /* SQUARE IN (SQUARED IN) */ + [0x33cd, 0x33cd], /* SQUARE KK (SQUARED KK) */ + [0x33ce, 0x33ce], /* SQUARE KM CAPITAL (SQUARED KM CAPITAL) */ + [0x33cf, 0x33cf], /* SQUARE KT (SQUARED KT) */ + [0x33d0, 0x33d0], /* SQUARE LM (SQUARED LM) */ + [0x33d1, 0x33d1], /* SQUARE LN (SQUARED LN) */ + [0x33d2, 0x33d2], /* SQUARE LOG (SQUARED LOG) */ + [0x33d3, 0x33d3], /* SQUARE LX (SQUARED LX) */ + [0x33d4, 0x33d4], /* SQUARE MB SMALL (SQUARED MB SMALL) */ + [0x33d5, 0x33d5], /* SQUARE MIL (SQUARED MIL) */ + [0x33d6, 0x33d6], /* SQUARE MOL (SQUARED MOL) */ + [0x33d7, 0x33d7], /* SQUARE PH (SQUARED PH) */ + [0x33d8, 0x33d8], /* SQUARE PM (SQUARED PM) */ + [0x33d9, 0x33d9], /* SQUARE PPM (SQUARED PPM) */ + [0x33da, 0x33da], /* SQUARE PR (SQUARED PR) */ + [0x33db, 0x33db], /* SQUARE SR (SQUARED SR) */ + [0x33dc, 0x33dc], /* SQUARE SV (SQUARED SV) */ + [0x33dd, 0x33dd], /* SQUARE WB (SQUARED WB) */ + [0x33de, 0x33de], /* SQUARE V OVER M */ + [0x33df, 0x33df], /* SQUARE A OVER M */ + [0x33e0, 0x33e0], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE */ + [0x33e1, 0x33e1], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO */ + [0x33e2, 0x33e2], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE */ + [0x33e3, 0x33e3], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR */ + [0x33e4, 0x33e4], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE */ + [0x33e5, 0x33e5], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX */ + [0x33e6, 0x33e6], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN */ + [0x33e7, 0x33e7], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT */ + [0x33e8, 0x33e8], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE */ + [0x33e9, 0x33e9], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN */ + [0x33ea, 0x33ea], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN */ + [0x33eb, 0x33eb], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE */ + [0x33ec, 0x33ec], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN */ + [0x33ed, 0x33ed], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN */ + [0x33ee, 0x33ee], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN */ + [0x33ef, 0x33ef], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN */ + [0x33f0, 0x33f0], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN */ + [0x33f1, 0x33f1], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN */ + [0x33f2, 0x33f2], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN */ + [0x33f3, 0x33f3], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY */ + [0x33f4, 0x33f4], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE */ + [0x33f5, 0x33f5], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO */ + [0x33f6, 0x33f6], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE */ + [0x33f7, 0x33f7], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR */ + [0x33f8, 0x33f8], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE */ + [0x33f9, 0x33f9], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX */ + [0x33fa, 0x33fa], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN */ + [0x33fb, 0x33fb], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT */ + [0x33fc, 0x33fc], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE */ + [0x33fd, 0x33fd], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY */ + [0x33fe, 0x33fe], /* IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE */ + [0x33ff, 0x33ff], /* SQUARE GAL */ + [0x3400, 0x3400], /* CJK Ideograph Extension A */ + [0x3401, 0x3401], /* CJK Ideograph Extension A */ + [0x3402, 0x3402], /* CJK Ideograph Extension A */ + [0x3403, 0x3403], /* CJK Ideograph Extension A */ + [0x3404, 0x3404], /* CJK Ideograph Extension A */ + [0x3405, 0x3405], /* CJK Ideograph Extension A */ + [0x3406, 0x3406], /* CJK Ideograph Extension A */ + [0x3407, 0x3407], /* CJK Ideograph Extension A */ + [0x3408, 0x3408], /* CJK Ideograph Extension A */ + [0x3409, 0x3409], /* CJK Ideograph Extension A */ + [0x340a, 0x340a], /* CJK Ideograph Extension A */ + [0x340b, 0x340b], /* CJK Ideograph Extension A */ + [0x340c, 0x340c], /* CJK Ideograph Extension A */ + [0x340d, 0x340d], /* CJK Ideograph Extension A */ + [0x340e, 0x340e], /* CJK Ideograph Extension A */ + [0x340f, 0x340f], /* CJK Ideograph Extension A */ + [0x3410, 0x3410], /* CJK Ideograph Extension A */ + [0x3411, 0x3411], /* CJK Ideograph Extension A */ + [0x3412, 0x3412], /* CJK Ideograph Extension A */ + [0x3413, 0x3413], /* CJK Ideograph Extension A */ + [0x3414, 0x3414], /* CJK Ideograph Extension A */ + [0x3415, 0x3415], /* CJK Ideograph Extension A */ + [0x3416, 0x3416], /* CJK Ideograph Extension A */ + [0x3417, 0x3417], /* CJK Ideograph Extension A */ + [0x3418, 0x3418], /* CJK Ideograph Extension A */ + [0x3419, 0x3419], /* CJK Ideograph Extension A */ + [0x341a, 0x341a], /* CJK Ideograph Extension A */ + [0x341b, 0x341b], /* CJK Ideograph Extension A */ + [0x341c, 0x341c], /* CJK Ideograph Extension A */ + [0x341d, 0x341d], /* CJK Ideograph Extension A */ + [0x341e, 0x341e], /* CJK Ideograph Extension A */ + [0x341f, 0x341f], /* CJK Ideograph Extension A */ + [0x3420, 0x3420], /* CJK Ideograph Extension A */ + [0x3421, 0x3421], /* CJK Ideograph Extension A */ + [0x3422, 0x3422], /* CJK Ideograph Extension A */ + [0x3423, 0x3423], /* CJK Ideograph Extension A */ + [0x3424, 0x3424], /* CJK Ideograph Extension A */ + [0x3425, 0x3425], /* CJK Ideograph Extension A */ + [0x3426, 0x3426], /* CJK Ideograph Extension A */ + [0x3427, 0x3427], /* CJK Ideograph Extension A */ + [0x3428, 0x3428], /* CJK Ideograph Extension A */ + [0x3429, 0x3429], /* CJK Ideograph Extension A */ + [0x342a, 0x342a], /* CJK Ideograph Extension A */ + [0x342b, 0x342b], /* CJK Ideograph Extension A */ + [0x342c, 0x342c], /* CJK Ideograph Extension A */ + [0x342d, 0x342d], /* CJK Ideograph Extension A */ + [0x342e, 0x342e], /* CJK Ideograph Extension A */ + [0x342f, 0x342f], /* CJK Ideograph Extension A */ + [0x3430, 0x3430], /* CJK Ideograph Extension A */ + [0x3431, 0x3431], /* CJK Ideograph Extension A */ + [0x3432, 0x3432], /* CJK Ideograph Extension A */ + [0x3433, 0x3433], /* CJK Ideograph Extension A */ + [0x3434, 0x3434], /* CJK Ideograph Extension A */ + [0x3435, 0x3435], /* CJK Ideograph Extension A */ + [0x3436, 0x3436], /* CJK Ideograph Extension A */ + [0x3437, 0x3437], /* CJK Ideograph Extension A */ + [0x3438, 0x3438], /* CJK Ideograph Extension A */ + [0x3439, 0x3439], /* CJK Ideograph Extension A */ + [0x343a, 0x343a], /* CJK Ideograph Extension A */ + [0x343b, 0x343b], /* CJK Ideograph Extension A */ + [0x343c, 0x343c], /* CJK Ideograph Extension A */ + [0x343d, 0x343d], /* CJK Ideograph Extension A */ + [0x343e, 0x343e], /* CJK Ideograph Extension A */ + [0x343f, 0x343f], /* CJK Ideograph Extension A */ + [0x3440, 0x3440], /* CJK Ideograph Extension A */ + [0x3441, 0x3441], /* CJK Ideograph Extension A */ + [0x3442, 0x3442], /* CJK Ideograph Extension A */ + [0x3443, 0x3443], /* CJK Ideograph Extension A */ + [0x3444, 0x3444], /* CJK Ideograph Extension A */ + [0x3445, 0x3445], /* CJK Ideograph Extension A */ + [0x3446, 0x3446], /* CJK Ideograph Extension A */ + [0x3447, 0x3447], /* CJK Ideograph Extension A */ + [0x3448, 0x3448], /* CJK Ideograph Extension A */ + [0x3449, 0x3449], /* CJK Ideograph Extension A */ + [0x344a, 0x344a], /* CJK Ideograph Extension A */ + [0x344b, 0x344b], /* CJK Ideograph Extension A */ + [0x344c, 0x344c], /* CJK Ideograph Extension A */ + [0x344d, 0x344d], /* CJK Ideograph Extension A */ + [0x344e, 0x344e], /* CJK Ideograph Extension A */ + [0x344f, 0x344f], /* CJK Ideograph Extension A */ + [0x3450, 0x3450], /* CJK Ideograph Extension A */ + [0x3451, 0x3451], /* CJK Ideograph Extension A */ + [0x3452, 0x3452], /* CJK Ideograph Extension A */ + [0x3453, 0x3453], /* CJK Ideograph Extension A */ + [0x3454, 0x3454], /* CJK Ideograph Extension A */ + [0x3455, 0x3455], /* CJK Ideograph Extension A */ + [0x3456, 0x3456], /* CJK Ideograph Extension A */ + [0x3457, 0x3457], /* CJK Ideograph Extension A */ + [0x3458, 0x3458], /* CJK Ideograph Extension A */ + [0x3459, 0x3459], /* CJK Ideograph Extension A */ + [0x345a, 0x345a], /* CJK Ideograph Extension A */ + [0x345b, 0x345b], /* CJK Ideograph Extension A */ + [0x345c, 0x345c], /* CJK Ideograph Extension A */ + [0x345d, 0x345d], /* CJK Ideograph Extension A */ + [0x345e, 0x345e], /* CJK Ideograph Extension A */ + [0x345f, 0x345f], /* CJK Ideograph Extension A */ + [0x3460, 0x3460], /* CJK Ideograph Extension A */ + [0x3461, 0x3461], /* CJK Ideograph Extension A */ + [0x3462, 0x3462], /* CJK Ideograph Extension A */ + [0x3463, 0x3463], /* CJK Ideograph Extension A */ + [0x3464, 0x3464], /* CJK Ideograph Extension A */ + [0x3465, 0x3465], /* CJK Ideograph Extension A */ + [0x3466, 0x3466], /* CJK Ideograph Extension A */ + [0x3467, 0x3467], /* CJK Ideograph Extension A */ + [0x3468, 0x3468], /* CJK Ideograph Extension A */ + [0x3469, 0x3469], /* CJK Ideograph Extension A */ + [0x346a, 0x346a], /* CJK Ideograph Extension A */ + [0x346b, 0x346b], /* CJK Ideograph Extension A */ + [0x346c, 0x346c], /* CJK Ideograph Extension A */ + [0x346d, 0x346d], /* CJK Ideograph Extension A */ + [0x346e, 0x346e], /* CJK Ideograph Extension A */ + [0x346f, 0x346f], /* CJK Ideograph Extension A */ + [0x3470, 0x3470], /* CJK Ideograph Extension A */ + [0x3471, 0x3471], /* CJK Ideograph Extension A */ + [0x3472, 0x3472], /* CJK Ideograph Extension A */ + [0x3473, 0x3473], /* CJK Ideograph Extension A */ + [0x3474, 0x3474], /* CJK Ideograph Extension A */ + [0x3475, 0x3475], /* CJK Ideograph Extension A */ + [0x3476, 0x3476], /* CJK Ideograph Extension A */ + [0x3477, 0x3477], /* CJK Ideograph Extension A */ + [0x3478, 0x3478], /* CJK Ideograph Extension A */ + [0x3479, 0x3479], /* CJK Ideograph Extension A */ + [0x347a, 0x347a], /* CJK Ideograph Extension A */ + [0x347b, 0x347b], /* CJK Ideograph Extension A */ + [0x347c, 0x347c], /* CJK Ideograph Extension A */ + [0x347d, 0x347d], /* CJK Ideograph Extension A */ + [0x347e, 0x347e], /* CJK Ideograph Extension A */ + [0x347f, 0x347f], /* CJK Ideograph Extension A */ + [0x3480, 0x3480], /* CJK Ideograph Extension A */ + [0x3481, 0x3481], /* CJK Ideograph Extension A */ + [0x3482, 0x3482], /* CJK Ideograph Extension A */ + [0x3483, 0x3483], /* CJK Ideograph Extension A */ + [0x3484, 0x3484], /* CJK Ideograph Extension A */ + [0x3485, 0x3485], /* CJK Ideograph Extension A */ + [0x3486, 0x3486], /* CJK Ideograph Extension A */ + [0x3487, 0x3487], /* CJK Ideograph Extension A */ + [0x3488, 0x3488], /* CJK Ideograph Extension A */ + [0x3489, 0x3489], /* CJK Ideograph Extension A */ + [0x348a, 0x348a], /* CJK Ideograph Extension A */ + [0x348b, 0x348b], /* CJK Ideograph Extension A */ + [0x348c, 0x348c], /* CJK Ideograph Extension A */ + [0x348d, 0x348d], /* CJK Ideograph Extension A */ + [0x348e, 0x348e], /* CJK Ideograph Extension A */ + [0x348f, 0x348f], /* CJK Ideograph Extension A */ + [0x3490, 0x3490], /* CJK Ideograph Extension A */ + [0x3491, 0x3491], /* CJK Ideograph Extension A */ + [0x3492, 0x3492], /* CJK Ideograph Extension A */ + [0x3493, 0x3493], /* CJK Ideograph Extension A */ + [0x3494, 0x3494], /* CJK Ideograph Extension A */ + [0x3495, 0x3495], /* CJK Ideograph Extension A */ + [0x3496, 0x3496], /* CJK Ideograph Extension A */ + [0x3497, 0x3497], /* CJK Ideograph Extension A */ + [0x3498, 0x3498], /* CJK Ideograph Extension A */ + [0x3499, 0x3499], /* CJK Ideograph Extension A */ + [0x349a, 0x349a], /* CJK Ideograph Extension A */ + [0x349b, 0x349b], /* CJK Ideograph Extension A */ + [0x349c, 0x349c], /* CJK Ideograph Extension A */ + [0x349d, 0x349d], /* CJK Ideograph Extension A */ + [0x349e, 0x349e], /* CJK Ideograph Extension A */ + [0x349f, 0x349f], /* CJK Ideograph Extension A */ + [0x34a0, 0x34a0], /* CJK Ideograph Extension A */ + [0x34a1, 0x34a1], /* CJK Ideograph Extension A */ + [0x34a2, 0x34a2], /* CJK Ideograph Extension A */ + [0x34a3, 0x34a3], /* CJK Ideograph Extension A */ + [0x34a4, 0x34a4], /* CJK Ideograph Extension A */ + [0x34a5, 0x34a5], /* CJK Ideograph Extension A */ + [0x34a6, 0x34a6], /* CJK Ideograph Extension A */ + [0x34a7, 0x34a7], /* CJK Ideograph Extension A */ + [0x34a8, 0x34a8], /* CJK Ideograph Extension A */ + [0x34a9, 0x34a9], /* CJK Ideograph Extension A */ + [0x34aa, 0x34aa], /* CJK Ideograph Extension A */ + [0x34ab, 0x34ab], /* CJK Ideograph Extension A */ + [0x34ac, 0x34ac], /* CJK Ideograph Extension A */ + [0x34ad, 0x34ad], /* CJK Ideograph Extension A */ + [0x34ae, 0x34ae], /* CJK Ideograph Extension A */ + [0x34af, 0x34af], /* CJK Ideograph Extension A */ + [0x34b0, 0x34b0], /* CJK Ideograph Extension A */ + [0x34b1, 0x34b1], /* CJK Ideograph Extension A */ + [0x34b2, 0x34b2], /* CJK Ideograph Extension A */ + [0x34b3, 0x34b3], /* CJK Ideograph Extension A */ + [0x34b4, 0x34b4], /* CJK Ideograph Extension A */ + [0x34b5, 0x34b5], /* CJK Ideograph Extension A */ + [0x34b6, 0x34b6], /* CJK Ideograph Extension A */ + [0x34b7, 0x34b7], /* CJK Ideograph Extension A */ + [0x34b8, 0x34b8], /* CJK Ideograph Extension A */ + [0x34b9, 0x34b9], /* CJK Ideograph Extension A */ + [0x34ba, 0x34ba], /* CJK Ideograph Extension A */ + [0x34bb, 0x34bb], /* CJK Ideograph Extension A */ + [0x34bc, 0x34bc], /* CJK Ideograph Extension A */ + [0x34bd, 0x34bd], /* CJK Ideograph Extension A */ + [0x34be, 0x34be], /* CJK Ideograph Extension A */ + [0x34bf, 0x34bf], /* CJK Ideograph Extension A */ + [0x34c0, 0x34c0], /* CJK Ideograph Extension A */ + [0x34c1, 0x34c1], /* CJK Ideograph Extension A */ + [0x34c2, 0x34c2], /* CJK Ideograph Extension A */ + [0x34c3, 0x34c3], /* CJK Ideograph Extension A */ + [0x34c4, 0x34c4], /* CJK Ideograph Extension A */ + [0x34c5, 0x34c5], /* CJK Ideograph Extension A */ + [0x34c6, 0x34c6], /* CJK Ideograph Extension A */ + [0x34c7, 0x34c7], /* CJK Ideograph Extension A */ + [0x34c8, 0x34c8], /* CJK Ideograph Extension A */ + [0x34c9, 0x34c9], /* CJK Ideograph Extension A */ + [0x34ca, 0x34ca], /* CJK Ideograph Extension A */ + [0x34cb, 0x34cb], /* CJK Ideograph Extension A */ + [0x34cc, 0x34cc], /* CJK Ideograph Extension A */ + [0x34cd, 0x34cd], /* CJK Ideograph Extension A */ + [0x34ce, 0x34ce], /* CJK Ideograph Extension A */ + [0x34cf, 0x34cf], /* CJK Ideograph Extension A */ + [0x34d0, 0x34d0], /* CJK Ideograph Extension A */ + [0x34d1, 0x34d1], /* CJK Ideograph Extension A */ + [0x34d2, 0x34d2], /* CJK Ideograph Extension A */ + [0x34d3, 0x34d3], /* CJK Ideograph Extension A */ + [0x34d4, 0x34d4], /* CJK Ideograph Extension A */ + [0x34d5, 0x34d5], /* CJK Ideograph Extension A */ + [0x34d6, 0x34d6], /* CJK Ideograph Extension A */ + [0x34d7, 0x34d7], /* CJK Ideograph Extension A */ + [0x34d8, 0x34d8], /* CJK Ideograph Extension A */ + [0x34d9, 0x34d9], /* CJK Ideograph Extension A */ + [0x34da, 0x34da], /* CJK Ideograph Extension A */ + [0x34db, 0x34db], /* CJK Ideograph Extension A */ + [0x34dc, 0x34dc], /* CJK Ideograph Extension A */ + [0x34dd, 0x34dd], /* CJK Ideograph Extension A */ + [0x34de, 0x34de], /* CJK Ideograph Extension A */ + [0x34df, 0x34df], /* CJK Ideograph Extension A */ + [0x34e0, 0x34e0], /* CJK Ideograph Extension A */ + [0x34e1, 0x34e1], /* CJK Ideograph Extension A */ + [0x34e2, 0x34e2], /* CJK Ideograph Extension A */ + [0x34e3, 0x34e3], /* CJK Ideograph Extension A */ + [0x34e4, 0x34e4], /* CJK Ideograph Extension A */ + [0x34e5, 0x34e5], /* CJK Ideograph Extension A */ + [0x34e6, 0x34e6], /* CJK Ideograph Extension A */ + [0x34e7, 0x34e7], /* CJK Ideograph Extension A */ + [0x34e8, 0x34e8], /* CJK Ideograph Extension A */ + [0x34e9, 0x34e9], /* CJK Ideograph Extension A */ + [0x34ea, 0x34ea], /* CJK Ideograph Extension A */ + [0x34eb, 0x34eb], /* CJK Ideograph Extension A */ + [0x34ec, 0x34ec], /* CJK Ideograph Extension A */ + [0x34ed, 0x34ed], /* CJK Ideograph Extension A */ + [0x34ee, 0x34ee], /* CJK Ideograph Extension A */ + [0x34ef, 0x34ef], /* CJK Ideograph Extension A */ + [0x34f0, 0x34f0], /* CJK Ideograph Extension A */ + [0x34f1, 0x34f1], /* CJK Ideograph Extension A */ + [0x34f2, 0x34f2], /* CJK Ideograph Extension A */ + [0x34f3, 0x34f3], /* CJK Ideograph Extension A */ + [0x34f4, 0x34f4], /* CJK Ideograph Extension A */ + [0x34f5, 0x34f5], /* CJK Ideograph Extension A */ + [0x34f6, 0x34f6], /* CJK Ideograph Extension A */ + [0x34f7, 0x34f7], /* CJK Ideograph Extension A */ + [0x34f8, 0x34f8], /* CJK Ideograph Extension A */ + [0x34f9, 0x34f9], /* CJK Ideograph Extension A */ + [0x34fa, 0x34fa], /* CJK Ideograph Extension A */ + [0x34fb, 0x34fb], /* CJK Ideograph Extension A */ + [0x34fc, 0x34fc], /* CJK Ideograph Extension A */ + [0x34fd, 0x34fd], /* CJK Ideograph Extension A */ + [0x34fe, 0x34fe], /* CJK Ideograph Extension A */ + [0x34ff, 0x34ff], /* CJK Ideograph Extension A */ + [0x3500, 0x3500], /* CJK Ideograph Extension A */ + [0x3501, 0x3501], /* CJK Ideograph Extension A */ + [0x3502, 0x3502], /* CJK Ideograph Extension A */ + [0x3503, 0x3503], /* CJK Ideograph Extension A */ + [0x3504, 0x3504], /* CJK Ideograph Extension A */ + [0x3505, 0x3505], /* CJK Ideograph Extension A */ + [0x3506, 0x3506], /* CJK Ideograph Extension A */ + [0x3507, 0x3507], /* CJK Ideograph Extension A */ + [0x3508, 0x3508], /* CJK Ideograph Extension A */ + [0x3509, 0x3509], /* CJK Ideograph Extension A */ + [0x350a, 0x350a], /* CJK Ideograph Extension A */ + [0x350b, 0x350b], /* CJK Ideograph Extension A */ + [0x350c, 0x350c], /* CJK Ideograph Extension A */ + [0x350d, 0x350d], /* CJK Ideograph Extension A */ + [0x350e, 0x350e], /* CJK Ideograph Extension A */ + [0x350f, 0x350f], /* CJK Ideograph Extension A */ + [0x3510, 0x3510], /* CJK Ideograph Extension A */ + [0x3511, 0x3511], /* CJK Ideograph Extension A */ + [0x3512, 0x3512], /* CJK Ideograph Extension A */ + [0x3513, 0x3513], /* CJK Ideograph Extension A */ + [0x3514, 0x3514], /* CJK Ideograph Extension A */ + [0x3515, 0x3515], /* CJK Ideograph Extension A */ + [0x3516, 0x3516], /* CJK Ideograph Extension A */ + [0x3517, 0x3517], /* CJK Ideograph Extension A */ + [0x3518, 0x3518], /* CJK Ideograph Extension A */ + [0x3519, 0x3519], /* CJK Ideograph Extension A */ + [0x351a, 0x351a], /* CJK Ideograph Extension A */ + [0x351b, 0x351b], /* CJK Ideograph Extension A */ + [0x351c, 0x351c], /* CJK Ideograph Extension A */ + [0x351d, 0x351d], /* CJK Ideograph Extension A */ + [0x351e, 0x351e], /* CJK Ideograph Extension A */ + [0x351f, 0x351f], /* CJK Ideograph Extension A */ + [0x3520, 0x3520], /* CJK Ideograph Extension A */ + [0x3521, 0x3521], /* CJK Ideograph Extension A */ + [0x3522, 0x3522], /* CJK Ideograph Extension A */ + [0x3523, 0x3523], /* CJK Ideograph Extension A */ + [0x3524, 0x3524], /* CJK Ideograph Extension A */ + [0x3525, 0x3525], /* CJK Ideograph Extension A */ + [0x3526, 0x3526], /* CJK Ideograph Extension A */ + [0x3527, 0x3527], /* CJK Ideograph Extension A */ + [0x3528, 0x3528], /* CJK Ideograph Extension A */ + [0x3529, 0x3529], /* CJK Ideograph Extension A */ + [0x352a, 0x352a], /* CJK Ideograph Extension A */ + [0x352b, 0x352b], /* CJK Ideograph Extension A */ + [0x352c, 0x352c], /* CJK Ideograph Extension A */ + [0x352d, 0x352d], /* CJK Ideograph Extension A */ + [0x352e, 0x352e], /* CJK Ideograph Extension A */ + [0x352f, 0x352f], /* CJK Ideograph Extension A */ + [0x3530, 0x3530], /* CJK Ideograph Extension A */ + [0x3531, 0x3531], /* CJK Ideograph Extension A */ + [0x3532, 0x3532], /* CJK Ideograph Extension A */ + [0x3533, 0x3533], /* CJK Ideograph Extension A */ + [0x3534, 0x3534], /* CJK Ideograph Extension A */ + [0x3535, 0x3535], /* CJK Ideograph Extension A */ + [0x3536, 0x3536], /* CJK Ideograph Extension A */ + [0x3537, 0x3537], /* CJK Ideograph Extension A */ + [0x3538, 0x3538], /* CJK Ideograph Extension A */ + [0x3539, 0x3539], /* CJK Ideograph Extension A */ + [0x353a, 0x353a], /* CJK Ideograph Extension A */ + [0x353b, 0x353b], /* CJK Ideograph Extension A */ + [0x353c, 0x353c], /* CJK Ideograph Extension A */ + [0x353d, 0x353d], /* CJK Ideograph Extension A */ + [0x353e, 0x353e], /* CJK Ideograph Extension A */ + [0x353f, 0x353f], /* CJK Ideograph Extension A */ + [0x3540, 0x3540], /* CJK Ideograph Extension A */ + [0x3541, 0x3541], /* CJK Ideograph Extension A */ + [0x3542, 0x3542], /* CJK Ideograph Extension A */ + [0x3543, 0x3543], /* CJK Ideograph Extension A */ + [0x3544, 0x3544], /* CJK Ideograph Extension A */ + [0x3545, 0x3545], /* CJK Ideograph Extension A */ + [0x3546, 0x3546], /* CJK Ideograph Extension A */ + [0x3547, 0x3547], /* CJK Ideograph Extension A */ + [0x3548, 0x3548], /* CJK Ideograph Extension A */ + [0x3549, 0x3549], /* CJK Ideograph Extension A */ + [0x354a, 0x354a], /* CJK Ideograph Extension A */ + [0x354b, 0x354b], /* CJK Ideograph Extension A */ + [0x354c, 0x354c], /* CJK Ideograph Extension A */ + [0x354d, 0x354d], /* CJK Ideograph Extension A */ + [0x354e, 0x354e], /* CJK Ideograph Extension A */ + [0x354f, 0x354f], /* CJK Ideograph Extension A */ + [0x3550, 0x3550], /* CJK Ideograph Extension A */ + [0x3551, 0x3551], /* CJK Ideograph Extension A */ + [0x3552, 0x3552], /* CJK Ideograph Extension A */ + [0x3553, 0x3553], /* CJK Ideograph Extension A */ + [0x3554, 0x3554], /* CJK Ideograph Extension A */ + [0x3555, 0x3555], /* CJK Ideograph Extension A */ + [0x3556, 0x3556], /* CJK Ideograph Extension A */ + [0x3557, 0x3557], /* CJK Ideograph Extension A */ + [0x3558, 0x3558], /* CJK Ideograph Extension A */ + [0x3559, 0x3559], /* CJK Ideograph Extension A */ + [0x355a, 0x355a], /* CJK Ideograph Extension A */ + [0x355b, 0x355b], /* CJK Ideograph Extension A */ + [0x355c, 0x355c], /* CJK Ideograph Extension A */ + [0x355d, 0x355d], /* CJK Ideograph Extension A */ + [0x355e, 0x355e], /* CJK Ideograph Extension A */ + [0x355f, 0x355f], /* CJK Ideograph Extension A */ + [0x3560, 0x3560], /* CJK Ideograph Extension A */ + [0x3561, 0x3561], /* CJK Ideograph Extension A */ + [0x3562, 0x3562], /* CJK Ideograph Extension A */ + [0x3563, 0x3563], /* CJK Ideograph Extension A */ + [0x3564, 0x3564], /* CJK Ideograph Extension A */ + [0x3565, 0x3565], /* CJK Ideograph Extension A */ + [0x3566, 0x3566], /* CJK Ideograph Extension A */ + [0x3567, 0x3567], /* CJK Ideograph Extension A */ + [0x3568, 0x3568], /* CJK Ideograph Extension A */ + [0x3569, 0x3569], /* CJK Ideograph Extension A */ + [0x356a, 0x356a], /* CJK Ideograph Extension A */ + [0x356b, 0x356b], /* CJK Ideograph Extension A */ + [0x356c, 0x356c], /* CJK Ideograph Extension A */ + [0x356d, 0x356d], /* CJK Ideograph Extension A */ + [0x356e, 0x356e], /* CJK Ideograph Extension A */ + [0x356f, 0x356f], /* CJK Ideograph Extension A */ + [0x3570, 0x3570], /* CJK Ideograph Extension A */ + [0x3571, 0x3571], /* CJK Ideograph Extension A */ + [0x3572, 0x3572], /* CJK Ideograph Extension A */ + [0x3573, 0x3573], /* CJK Ideograph Extension A */ + [0x3574, 0x3574], /* CJK Ideograph Extension A */ + [0x3575, 0x3575], /* CJK Ideograph Extension A */ + [0x3576, 0x3576], /* CJK Ideograph Extension A */ + [0x3577, 0x3577], /* CJK Ideograph Extension A */ + [0x3578, 0x3578], /* CJK Ideograph Extension A */ + [0x3579, 0x3579], /* CJK Ideograph Extension A */ + [0x357a, 0x357a], /* CJK Ideograph Extension A */ + [0x357b, 0x357b], /* CJK Ideograph Extension A */ + [0x357c, 0x357c], /* CJK Ideograph Extension A */ + [0x357d, 0x357d], /* CJK Ideograph Extension A */ + [0x357e, 0x357e], /* CJK Ideograph Extension A */ + [0x357f, 0x357f], /* CJK Ideograph Extension A */ + [0x3580, 0x3580], /* CJK Ideograph Extension A */ + [0x3581, 0x3581], /* CJK Ideograph Extension A */ + [0x3582, 0x3582], /* CJK Ideograph Extension A */ + [0x3583, 0x3583], /* CJK Ideograph Extension A */ + [0x3584, 0x3584], /* CJK Ideograph Extension A */ + [0x3585, 0x3585], /* CJK Ideograph Extension A */ + [0x3586, 0x3586], /* CJK Ideograph Extension A */ + [0x3587, 0x3587], /* CJK Ideograph Extension A */ + [0x3588, 0x3588], /* CJK Ideograph Extension A */ + [0x3589, 0x3589], /* CJK Ideograph Extension A */ + [0x358a, 0x358a], /* CJK Ideograph Extension A */ + [0x358b, 0x358b], /* CJK Ideograph Extension A */ + [0x358c, 0x358c], /* CJK Ideograph Extension A */ + [0x358d, 0x358d], /* CJK Ideograph Extension A */ + [0x358e, 0x358e], /* CJK Ideograph Extension A */ + [0x358f, 0x358f], /* CJK Ideograph Extension A */ + [0x3590, 0x3590], /* CJK Ideograph Extension A */ + [0x3591, 0x3591], /* CJK Ideograph Extension A */ + [0x3592, 0x3592], /* CJK Ideograph Extension A */ + [0x3593, 0x3593], /* CJK Ideograph Extension A */ + [0x3594, 0x3594], /* CJK Ideograph Extension A */ + [0x3595, 0x3595], /* CJK Ideograph Extension A */ + [0x3596, 0x3596], /* CJK Ideograph Extension A */ + [0x3597, 0x3597], /* CJK Ideograph Extension A */ + [0x3598, 0x3598], /* CJK Ideograph Extension A */ + [0x3599, 0x3599], /* CJK Ideograph Extension A */ + [0x359a, 0x359a], /* CJK Ideograph Extension A */ + [0x359b, 0x359b], /* CJK Ideograph Extension A */ + [0x359c, 0x359c], /* CJK Ideograph Extension A */ + [0x359d, 0x359d], /* CJK Ideograph Extension A */ + [0x359e, 0x359e], /* CJK Ideograph Extension A */ + [0x359f, 0x359f], /* CJK Ideograph Extension A */ + [0x35a0, 0x35a0], /* CJK Ideograph Extension A */ + [0x35a1, 0x35a1], /* CJK Ideograph Extension A */ + [0x35a2, 0x35a2], /* CJK Ideograph Extension A */ + [0x35a3, 0x35a3], /* CJK Ideograph Extension A */ + [0x35a4, 0x35a4], /* CJK Ideograph Extension A */ + [0x35a5, 0x35a5], /* CJK Ideograph Extension A */ + [0x35a6, 0x35a6], /* CJK Ideograph Extension A */ + [0x35a7, 0x35a7], /* CJK Ideograph Extension A */ + [0x35a8, 0x35a8], /* CJK Ideograph Extension A */ + [0x35a9, 0x35a9], /* CJK Ideograph Extension A */ + [0x35aa, 0x35aa], /* CJK Ideograph Extension A */ + [0x35ab, 0x35ab], /* CJK Ideograph Extension A */ + [0x35ac, 0x35ac], /* CJK Ideograph Extension A */ + [0x35ad, 0x35ad], /* CJK Ideograph Extension A */ + [0x35ae, 0x35ae], /* CJK Ideograph Extension A */ + [0x35af, 0x35af], /* CJK Ideograph Extension A */ + [0x35b0, 0x35b0], /* CJK Ideograph Extension A */ + [0x35b1, 0x35b1], /* CJK Ideograph Extension A */ + [0x35b2, 0x35b2], /* CJK Ideograph Extension A */ + [0x35b3, 0x35b3], /* CJK Ideograph Extension A */ + [0x35b4, 0x35b4], /* CJK Ideograph Extension A */ + [0x35b5, 0x35b5], /* CJK Ideograph Extension A */ + [0x35b6, 0x35b6], /* CJK Ideograph Extension A */ + [0x35b7, 0x35b7], /* CJK Ideograph Extension A */ + [0x35b8, 0x35b8], /* CJK Ideograph Extension A */ + [0x35b9, 0x35b9], /* CJK Ideograph Extension A */ + [0x35ba, 0x35ba], /* CJK Ideograph Extension A */ + [0x35bb, 0x35bb], /* CJK Ideograph Extension A */ + [0x35bc, 0x35bc], /* CJK Ideograph Extension A */ + [0x35bd, 0x35bd], /* CJK Ideograph Extension A */ + [0x35be, 0x35be], /* CJK Ideograph Extension A */ + [0x35bf, 0x35bf], /* CJK Ideograph Extension A */ + [0x35c0, 0x35c0], /* CJK Ideograph Extension A */ + [0x35c1, 0x35c1], /* CJK Ideograph Extension A */ + [0x35c2, 0x35c2], /* CJK Ideograph Extension A */ + [0x35c3, 0x35c3], /* CJK Ideograph Extension A */ + [0x35c4, 0x35c4], /* CJK Ideograph Extension A */ + [0x35c5, 0x35c5], /* CJK Ideograph Extension A */ + [0x35c6, 0x35c6], /* CJK Ideograph Extension A */ + [0x35c7, 0x35c7], /* CJK Ideograph Extension A */ + [0x35c8, 0x35c8], /* CJK Ideograph Extension A */ + [0x35c9, 0x35c9], /* CJK Ideograph Extension A */ + [0x35ca, 0x35ca], /* CJK Ideograph Extension A */ + [0x35cb, 0x35cb], /* CJK Ideograph Extension A */ + [0x35cc, 0x35cc], /* CJK Ideograph Extension A */ + [0x35cd, 0x35cd], /* CJK Ideograph Extension A */ + [0x35ce, 0x35ce], /* CJK Ideograph Extension A */ + [0x35cf, 0x35cf], /* CJK Ideograph Extension A */ + [0x35d0, 0x35d0], /* CJK Ideograph Extension A */ + [0x35d1, 0x35d1], /* CJK Ideograph Extension A */ + [0x35d2, 0x35d2], /* CJK Ideograph Extension A */ + [0x35d3, 0x35d3], /* CJK Ideograph Extension A */ + [0x35d4, 0x35d4], /* CJK Ideograph Extension A */ + [0x35d5, 0x35d5], /* CJK Ideograph Extension A */ + [0x35d6, 0x35d6], /* CJK Ideograph Extension A */ + [0x35d7, 0x35d7], /* CJK Ideograph Extension A */ + [0x35d8, 0x35d8], /* CJK Ideograph Extension A */ + [0x35d9, 0x35d9], /* CJK Ideograph Extension A */ + [0x35da, 0x35da], /* CJK Ideograph Extension A */ + [0x35db, 0x35db], /* CJK Ideograph Extension A */ + [0x35dc, 0x35dc], /* CJK Ideograph Extension A */ + [0x35dd, 0x35dd], /* CJK Ideograph Extension A */ + [0x35de, 0x35de], /* CJK Ideograph Extension A */ + [0x35df, 0x35df], /* CJK Ideograph Extension A */ + [0x35e0, 0x35e0], /* CJK Ideograph Extension A */ + [0x35e1, 0x35e1], /* CJK Ideograph Extension A */ + [0x35e2, 0x35e2], /* CJK Ideograph Extension A */ + [0x35e3, 0x35e3], /* CJK Ideograph Extension A */ + [0x35e4, 0x35e4], /* CJK Ideograph Extension A */ + [0x35e5, 0x35e5], /* CJK Ideograph Extension A */ + [0x35e6, 0x35e6], /* CJK Ideograph Extension A */ + [0x35e7, 0x35e7], /* CJK Ideograph Extension A */ + [0x35e8, 0x35e8], /* CJK Ideograph Extension A */ + [0x35e9, 0x35e9], /* CJK Ideograph Extension A */ + [0x35ea, 0x35ea], /* CJK Ideograph Extension A */ + [0x35eb, 0x35eb], /* CJK Ideograph Extension A */ + [0x35ec, 0x35ec], /* CJK Ideograph Extension A */ + [0x35ed, 0x35ed], /* CJK Ideograph Extension A */ + [0x35ee, 0x35ee], /* CJK Ideograph Extension A */ + [0x35ef, 0x35ef], /* CJK Ideograph Extension A */ + [0x35f0, 0x35f0], /* CJK Ideograph Extension A */ + [0x35f1, 0x35f1], /* CJK Ideograph Extension A */ + [0x35f2, 0x35f2], /* CJK Ideograph Extension A */ + [0x35f3, 0x35f3], /* CJK Ideograph Extension A */ + [0x35f4, 0x35f4], /* CJK Ideograph Extension A */ + [0x35f5, 0x35f5], /* CJK Ideograph Extension A */ + [0x35f6, 0x35f6], /* CJK Ideograph Extension A */ + [0x35f7, 0x35f7], /* CJK Ideograph Extension A */ + [0x35f8, 0x35f8], /* CJK Ideograph Extension A */ + [0x35f9, 0x35f9], /* CJK Ideograph Extension A */ + [0x35fa, 0x35fa], /* CJK Ideograph Extension A */ + [0x35fb, 0x35fb], /* CJK Ideograph Extension A */ + [0x35fc, 0x35fc], /* CJK Ideograph Extension A */ + [0x35fd, 0x35fd], /* CJK Ideograph Extension A */ + [0x35fe, 0x35fe], /* CJK Ideograph Extension A */ + [0x35ff, 0x35ff], /* CJK Ideograph Extension A */ + [0x3600, 0x3600], /* CJK Ideograph Extension A */ + [0x3601, 0x3601], /* CJK Ideograph Extension A */ + [0x3602, 0x3602], /* CJK Ideograph Extension A */ + [0x3603, 0x3603], /* CJK Ideograph Extension A */ + [0x3604, 0x3604], /* CJK Ideograph Extension A */ + [0x3605, 0x3605], /* CJK Ideograph Extension A */ + [0x3606, 0x3606], /* CJK Ideograph Extension A */ + [0x3607, 0x3607], /* CJK Ideograph Extension A */ + [0x3608, 0x3608], /* CJK Ideograph Extension A */ + [0x3609, 0x3609], /* CJK Ideograph Extension A */ + [0x360a, 0x360a], /* CJK Ideograph Extension A */ + [0x360b, 0x360b], /* CJK Ideograph Extension A */ + [0x360c, 0x360c], /* CJK Ideograph Extension A */ + [0x360d, 0x360d], /* CJK Ideograph Extension A */ + [0x360e, 0x360e], /* CJK Ideograph Extension A */ + [0x360f, 0x360f], /* CJK Ideograph Extension A */ + [0x3610, 0x3610], /* CJK Ideograph Extension A */ + [0x3611, 0x3611], /* CJK Ideograph Extension A */ + [0x3612, 0x3612], /* CJK Ideograph Extension A */ + [0x3613, 0x3613], /* CJK Ideograph Extension A */ + [0x3614, 0x3614], /* CJK Ideograph Extension A */ + [0x3615, 0x3615], /* CJK Ideograph Extension A */ + [0x3616, 0x3616], /* CJK Ideograph Extension A */ + [0x3617, 0x3617], /* CJK Ideograph Extension A */ + [0x3618, 0x3618], /* CJK Ideograph Extension A */ + [0x3619, 0x3619], /* CJK Ideograph Extension A */ + [0x361a, 0x361a], /* CJK Ideograph Extension A */ + [0x361b, 0x361b], /* CJK Ideograph Extension A */ + [0x361c, 0x361c], /* CJK Ideograph Extension A */ + [0x361d, 0x361d], /* CJK Ideograph Extension A */ + [0x361e, 0x361e], /* CJK Ideograph Extension A */ + [0x361f, 0x361f], /* CJK Ideograph Extension A */ + [0x3620, 0x3620], /* CJK Ideograph Extension A */ + [0x3621, 0x3621], /* CJK Ideograph Extension A */ + [0x3622, 0x3622], /* CJK Ideograph Extension A */ + [0x3623, 0x3623], /* CJK Ideograph Extension A */ + [0x3624, 0x3624], /* CJK Ideograph Extension A */ + [0x3625, 0x3625], /* CJK Ideograph Extension A */ + [0x3626, 0x3626], /* CJK Ideograph Extension A */ + [0x3627, 0x3627], /* CJK Ideograph Extension A */ + [0x3628, 0x3628], /* CJK Ideograph Extension A */ + [0x3629, 0x3629], /* CJK Ideograph Extension A */ + [0x362a, 0x362a], /* CJK Ideograph Extension A */ + [0x362b, 0x362b], /* CJK Ideograph Extension A */ + [0x362c, 0x362c], /* CJK Ideograph Extension A */ + [0x362d, 0x362d], /* CJK Ideograph Extension A */ + [0x362e, 0x362e], /* CJK Ideograph Extension A */ + [0x362f, 0x362f], /* CJK Ideograph Extension A */ + [0x3630, 0x3630], /* CJK Ideograph Extension A */ + [0x3631, 0x3631], /* CJK Ideograph Extension A */ + [0x3632, 0x3632], /* CJK Ideograph Extension A */ + [0x3633, 0x3633], /* CJK Ideograph Extension A */ + [0x3634, 0x3634], /* CJK Ideograph Extension A */ + [0x3635, 0x3635], /* CJK Ideograph Extension A */ + [0x3636, 0x3636], /* CJK Ideograph Extension A */ + [0x3637, 0x3637], /* CJK Ideograph Extension A */ + [0x3638, 0x3638], /* CJK Ideograph Extension A */ + [0x3639, 0x3639], /* CJK Ideograph Extension A */ + [0x363a, 0x363a], /* CJK Ideograph Extension A */ + [0x363b, 0x363b], /* CJK Ideograph Extension A */ + [0x363c, 0x363c], /* CJK Ideograph Extension A */ + [0x363d, 0x363d], /* CJK Ideograph Extension A */ + [0x363e, 0x363e], /* CJK Ideograph Extension A */ + [0x363f, 0x363f], /* CJK Ideograph Extension A */ + [0x3640, 0x3640], /* CJK Ideograph Extension A */ + [0x3641, 0x3641], /* CJK Ideograph Extension A */ + [0x3642, 0x3642], /* CJK Ideograph Extension A */ + [0x3643, 0x3643], /* CJK Ideograph Extension A */ + [0x3644, 0x3644], /* CJK Ideograph Extension A */ + [0x3645, 0x3645], /* CJK Ideograph Extension A */ + [0x3646, 0x3646], /* CJK Ideograph Extension A */ + [0x3647, 0x3647], /* CJK Ideograph Extension A */ + [0x3648, 0x3648], /* CJK Ideograph Extension A */ + [0x3649, 0x3649], /* CJK Ideograph Extension A */ + [0x364a, 0x364a], /* CJK Ideograph Extension A */ + [0x364b, 0x364b], /* CJK Ideograph Extension A */ + [0x364c, 0x364c], /* CJK Ideograph Extension A */ + [0x364d, 0x364d], /* CJK Ideograph Extension A */ + [0x364e, 0x364e], /* CJK Ideograph Extension A */ + [0x364f, 0x364f], /* CJK Ideograph Extension A */ + [0x3650, 0x3650], /* CJK Ideograph Extension A */ + [0x3651, 0x3651], /* CJK Ideograph Extension A */ + [0x3652, 0x3652], /* CJK Ideograph Extension A */ + [0x3653, 0x3653], /* CJK Ideograph Extension A */ + [0x3654, 0x3654], /* CJK Ideograph Extension A */ + [0x3655, 0x3655], /* CJK Ideograph Extension A */ + [0x3656, 0x3656], /* CJK Ideograph Extension A */ + [0x3657, 0x3657], /* CJK Ideograph Extension A */ + [0x3658, 0x3658], /* CJK Ideograph Extension A */ + [0x3659, 0x3659], /* CJK Ideograph Extension A */ + [0x365a, 0x365a], /* CJK Ideograph Extension A */ + [0x365b, 0x365b], /* CJK Ideograph Extension A */ + [0x365c, 0x365c], /* CJK Ideograph Extension A */ + [0x365d, 0x365d], /* CJK Ideograph Extension A */ + [0x365e, 0x365e], /* CJK Ideograph Extension A */ + [0x365f, 0x365f], /* CJK Ideograph Extension A */ + [0x3660, 0x3660], /* CJK Ideograph Extension A */ + [0x3661, 0x3661], /* CJK Ideograph Extension A */ + [0x3662, 0x3662], /* CJK Ideograph Extension A */ + [0x3663, 0x3663], /* CJK Ideograph Extension A */ + [0x3664, 0x3664], /* CJK Ideograph Extension A */ + [0x3665, 0x3665], /* CJK Ideograph Extension A */ + [0x3666, 0x3666], /* CJK Ideograph Extension A */ + [0x3667, 0x3667], /* CJK Ideograph Extension A */ + [0x3668, 0x3668], /* CJK Ideograph Extension A */ + [0x3669, 0x3669], /* CJK Ideograph Extension A */ + [0x366a, 0x366a], /* CJK Ideograph Extension A */ + [0x366b, 0x366b], /* CJK Ideograph Extension A */ + [0x366c, 0x366c], /* CJK Ideograph Extension A */ + [0x366d, 0x366d], /* CJK Ideograph Extension A */ + [0x366e, 0x366e], /* CJK Ideograph Extension A */ + [0x366f, 0x366f], /* CJK Ideograph Extension A */ + [0x3670, 0x3670], /* CJK Ideograph Extension A */ + [0x3671, 0x3671], /* CJK Ideograph Extension A */ + [0x3672, 0x3672], /* CJK Ideograph Extension A */ + [0x3673, 0x3673], /* CJK Ideograph Extension A */ + [0x3674, 0x3674], /* CJK Ideograph Extension A */ + [0x3675, 0x3675], /* CJK Ideograph Extension A */ + [0x3676, 0x3676], /* CJK Ideograph Extension A */ + [0x3677, 0x3677], /* CJK Ideograph Extension A */ + [0x3678, 0x3678], /* CJK Ideograph Extension A */ + [0x3679, 0x3679], /* CJK Ideograph Extension A */ + [0x367a, 0x367a], /* CJK Ideograph Extension A */ + [0x367b, 0x367b], /* CJK Ideograph Extension A */ + [0x367c, 0x367c], /* CJK Ideograph Extension A */ + [0x367d, 0x367d], /* CJK Ideograph Extension A */ + [0x367e, 0x367e], /* CJK Ideograph Extension A */ + [0x367f, 0x367f], /* CJK Ideograph Extension A */ + [0x3680, 0x3680], /* CJK Ideograph Extension A */ + [0x3681, 0x3681], /* CJK Ideograph Extension A */ + [0x3682, 0x3682], /* CJK Ideograph Extension A */ + [0x3683, 0x3683], /* CJK Ideograph Extension A */ + [0x3684, 0x3684], /* CJK Ideograph Extension A */ + [0x3685, 0x3685], /* CJK Ideograph Extension A */ + [0x3686, 0x3686], /* CJK Ideograph Extension A */ + [0x3687, 0x3687], /* CJK Ideograph Extension A */ + [0x3688, 0x3688], /* CJK Ideograph Extension A */ + [0x3689, 0x3689], /* CJK Ideograph Extension A */ + [0x368a, 0x368a], /* CJK Ideograph Extension A */ + [0x368b, 0x368b], /* CJK Ideograph Extension A */ + [0x368c, 0x368c], /* CJK Ideograph Extension A */ + [0x368d, 0x368d], /* CJK Ideograph Extension A */ + [0x368e, 0x368e], /* CJK Ideograph Extension A */ + [0x368f, 0x368f], /* CJK Ideograph Extension A */ + [0x3690, 0x3690], /* CJK Ideograph Extension A */ + [0x3691, 0x3691], /* CJK Ideograph Extension A */ + [0x3692, 0x3692], /* CJK Ideograph Extension A */ + [0x3693, 0x3693], /* CJK Ideograph Extension A */ + [0x3694, 0x3694], /* CJK Ideograph Extension A */ + [0x3695, 0x3695], /* CJK Ideograph Extension A */ + [0x3696, 0x3696], /* CJK Ideograph Extension A */ + [0x3697, 0x3697], /* CJK Ideograph Extension A */ + [0x3698, 0x3698], /* CJK Ideograph Extension A */ + [0x3699, 0x3699], /* CJK Ideograph Extension A */ + [0x369a, 0x369a], /* CJK Ideograph Extension A */ + [0x369b, 0x369b], /* CJK Ideograph Extension A */ + [0x369c, 0x369c], /* CJK Ideograph Extension A */ + [0x369d, 0x369d], /* CJK Ideograph Extension A */ + [0x369e, 0x369e], /* CJK Ideograph Extension A */ + [0x369f, 0x369f], /* CJK Ideograph Extension A */ + [0x36a0, 0x36a0], /* CJK Ideograph Extension A */ + [0x36a1, 0x36a1], /* CJK Ideograph Extension A */ + [0x36a2, 0x36a2], /* CJK Ideograph Extension A */ + [0x36a3, 0x36a3], /* CJK Ideograph Extension A */ + [0x36a4, 0x36a4], /* CJK Ideograph Extension A */ + [0x36a5, 0x36a5], /* CJK Ideograph Extension A */ + [0x36a6, 0x36a6], /* CJK Ideograph Extension A */ + [0x36a7, 0x36a7], /* CJK Ideograph Extension A */ + [0x36a8, 0x36a8], /* CJK Ideograph Extension A */ + [0x36a9, 0x36a9], /* CJK Ideograph Extension A */ + [0x36aa, 0x36aa], /* CJK Ideograph Extension A */ + [0x36ab, 0x36ab], /* CJK Ideograph Extension A */ + [0x36ac, 0x36ac], /* CJK Ideograph Extension A */ + [0x36ad, 0x36ad], /* CJK Ideograph Extension A */ + [0x36ae, 0x36ae], /* CJK Ideograph Extension A */ + [0x36af, 0x36af], /* CJK Ideograph Extension A */ + [0x36b0, 0x36b0], /* CJK Ideograph Extension A */ + [0x36b1, 0x36b1], /* CJK Ideograph Extension A */ + [0x36b2, 0x36b2], /* CJK Ideograph Extension A */ + [0x36b3, 0x36b3], /* CJK Ideograph Extension A */ + [0x36b4, 0x36b4], /* CJK Ideograph Extension A */ + [0x36b5, 0x36b5], /* CJK Ideograph Extension A */ + [0x36b6, 0x36b6], /* CJK Ideograph Extension A */ + [0x36b7, 0x36b7], /* CJK Ideograph Extension A */ + [0x36b8, 0x36b8], /* CJK Ideograph Extension A */ + [0x36b9, 0x36b9], /* CJK Ideograph Extension A */ + [0x36ba, 0x36ba], /* CJK Ideograph Extension A */ + [0x36bb, 0x36bb], /* CJK Ideograph Extension A */ + [0x36bc, 0x36bc], /* CJK Ideograph Extension A */ + [0x36bd, 0x36bd], /* CJK Ideograph Extension A */ + [0x36be, 0x36be], /* CJK Ideograph Extension A */ + [0x36bf, 0x36bf], /* CJK Ideograph Extension A */ + [0x36c0, 0x36c0], /* CJK Ideograph Extension A */ + [0x36c1, 0x36c1], /* CJK Ideograph Extension A */ + [0x36c2, 0x36c2], /* CJK Ideograph Extension A */ + [0x36c3, 0x36c3], /* CJK Ideograph Extension A */ + [0x36c4, 0x36c4], /* CJK Ideograph Extension A */ + [0x36c5, 0x36c5], /* CJK Ideograph Extension A */ + [0x36c6, 0x36c6], /* CJK Ideograph Extension A */ + [0x36c7, 0x36c7], /* CJK Ideograph Extension A */ + [0x36c8, 0x36c8], /* CJK Ideograph Extension A */ + [0x36c9, 0x36c9], /* CJK Ideograph Extension A */ + [0x36ca, 0x36ca], /* CJK Ideograph Extension A */ + [0x36cb, 0x36cb], /* CJK Ideograph Extension A */ + [0x36cc, 0x36cc], /* CJK Ideograph Extension A */ + [0x36cd, 0x36cd], /* CJK Ideograph Extension A */ + [0x36ce, 0x36ce], /* CJK Ideograph Extension A */ + [0x36cf, 0x36cf], /* CJK Ideograph Extension A */ + [0x36d0, 0x36d0], /* CJK Ideograph Extension A */ + [0x36d1, 0x36d1], /* CJK Ideograph Extension A */ + [0x36d2, 0x36d2], /* CJK Ideograph Extension A */ + [0x36d3, 0x36d3], /* CJK Ideograph Extension A */ + [0x36d4, 0x36d4], /* CJK Ideograph Extension A */ + [0x36d5, 0x36d5], /* CJK Ideograph Extension A */ + [0x36d6, 0x36d6], /* CJK Ideograph Extension A */ + [0x36d7, 0x36d7], /* CJK Ideograph Extension A */ + [0x36d8, 0x36d8], /* CJK Ideograph Extension A */ + [0x36d9, 0x36d9], /* CJK Ideograph Extension A */ + [0x36da, 0x36da], /* CJK Ideograph Extension A */ + [0x36db, 0x36db], /* CJK Ideograph Extension A */ + [0x36dc, 0x36dc], /* CJK Ideograph Extension A */ + [0x36dd, 0x36dd], /* CJK Ideograph Extension A */ + [0x36de, 0x36de], /* CJK Ideograph Extension A */ + [0x36df, 0x36df], /* CJK Ideograph Extension A */ + [0x36e0, 0x36e0], /* CJK Ideograph Extension A */ + [0x36e1, 0x36e1], /* CJK Ideograph Extension A */ + [0x36e2, 0x36e2], /* CJK Ideograph Extension A */ + [0x36e3, 0x36e3], /* CJK Ideograph Extension A */ + [0x36e4, 0x36e4], /* CJK Ideograph Extension A */ + [0x36e5, 0x36e5], /* CJK Ideograph Extension A */ + [0x36e6, 0x36e6], /* CJK Ideograph Extension A */ + [0x36e7, 0x36e7], /* CJK Ideograph Extension A */ + [0x36e8, 0x36e8], /* CJK Ideograph Extension A */ + [0x36e9, 0x36e9], /* CJK Ideograph Extension A */ + [0x36ea, 0x36ea], /* CJK Ideograph Extension A */ + [0x36eb, 0x36eb], /* CJK Ideograph Extension A */ + [0x36ec, 0x36ec], /* CJK Ideograph Extension A */ + [0x36ed, 0x36ed], /* CJK Ideograph Extension A */ + [0x36ee, 0x36ee], /* CJK Ideograph Extension A */ + [0x36ef, 0x36ef], /* CJK Ideograph Extension A */ + [0x36f0, 0x36f0], /* CJK Ideograph Extension A */ + [0x36f1, 0x36f1], /* CJK Ideograph Extension A */ + [0x36f2, 0x36f2], /* CJK Ideograph Extension A */ + [0x36f3, 0x36f3], /* CJK Ideograph Extension A */ + [0x36f4, 0x36f4], /* CJK Ideograph Extension A */ + [0x36f5, 0x36f5], /* CJK Ideograph Extension A */ + [0x36f6, 0x36f6], /* CJK Ideograph Extension A */ + [0x36f7, 0x36f7], /* CJK Ideograph Extension A */ + [0x36f8, 0x36f8], /* CJK Ideograph Extension A */ + [0x36f9, 0x36f9], /* CJK Ideograph Extension A */ + [0x36fa, 0x36fa], /* CJK Ideograph Extension A */ + [0x36fb, 0x36fb], /* CJK Ideograph Extension A */ + [0x36fc, 0x36fc], /* CJK Ideograph Extension A */ + [0x36fd, 0x36fd], /* CJK Ideograph Extension A */ + [0x36fe, 0x36fe], /* CJK Ideograph Extension A */ + [0x36ff, 0x36ff], /* CJK Ideograph Extension A */ + [0x3700, 0x3700], /* CJK Ideograph Extension A */ + [0x3701, 0x3701], /* CJK Ideograph Extension A */ + [0x3702, 0x3702], /* CJK Ideograph Extension A */ + [0x3703, 0x3703], /* CJK Ideograph Extension A */ + [0x3704, 0x3704], /* CJK Ideograph Extension A */ + [0x3705, 0x3705], /* CJK Ideograph Extension A */ + [0x3706, 0x3706], /* CJK Ideograph Extension A */ + [0x3707, 0x3707], /* CJK Ideograph Extension A */ + [0x3708, 0x3708], /* CJK Ideograph Extension A */ + [0x3709, 0x3709], /* CJK Ideograph Extension A */ + [0x370a, 0x370a], /* CJK Ideograph Extension A */ + [0x370b, 0x370b], /* CJK Ideograph Extension A */ + [0x370c, 0x370c], /* CJK Ideograph Extension A */ + [0x370d, 0x370d], /* CJK Ideograph Extension A */ + [0x370e, 0x370e], /* CJK Ideograph Extension A */ + [0x370f, 0x370f], /* CJK Ideograph Extension A */ + [0x3710, 0x3710], /* CJK Ideograph Extension A */ + [0x3711, 0x3711], /* CJK Ideograph Extension A */ + [0x3712, 0x3712], /* CJK Ideograph Extension A */ + [0x3713, 0x3713], /* CJK Ideograph Extension A */ + [0x3714, 0x3714], /* CJK Ideograph Extension A */ + [0x3715, 0x3715], /* CJK Ideograph Extension A */ + [0x3716, 0x3716], /* CJK Ideograph Extension A */ + [0x3717, 0x3717], /* CJK Ideograph Extension A */ + [0x3718, 0x3718], /* CJK Ideograph Extension A */ + [0x3719, 0x3719], /* CJK Ideograph Extension A */ + [0x371a, 0x371a], /* CJK Ideograph Extension A */ + [0x371b, 0x371b], /* CJK Ideograph Extension A */ + [0x371c, 0x371c], /* CJK Ideograph Extension A */ + [0x371d, 0x371d], /* CJK Ideograph Extension A */ + [0x371e, 0x371e], /* CJK Ideograph Extension A */ + [0x371f, 0x371f], /* CJK Ideograph Extension A */ + [0x3720, 0x3720], /* CJK Ideograph Extension A */ + [0x3721, 0x3721], /* CJK Ideograph Extension A */ + [0x3722, 0x3722], /* CJK Ideograph Extension A */ + [0x3723, 0x3723], /* CJK Ideograph Extension A */ + [0x3724, 0x3724], /* CJK Ideograph Extension A */ + [0x3725, 0x3725], /* CJK Ideograph Extension A */ + [0x3726, 0x3726], /* CJK Ideograph Extension A */ + [0x3727, 0x3727], /* CJK Ideograph Extension A */ + [0x3728, 0x3728], /* CJK Ideograph Extension A */ + [0x3729, 0x3729], /* CJK Ideograph Extension A */ + [0x372a, 0x372a], /* CJK Ideograph Extension A */ + [0x372b, 0x372b], /* CJK Ideograph Extension A */ + [0x372c, 0x372c], /* CJK Ideograph Extension A */ + [0x372d, 0x372d], /* CJK Ideograph Extension A */ + [0x372e, 0x372e], /* CJK Ideograph Extension A */ + [0x372f, 0x372f], /* CJK Ideograph Extension A */ + [0x3730, 0x3730], /* CJK Ideograph Extension A */ + [0x3731, 0x3731], /* CJK Ideograph Extension A */ + [0x3732, 0x3732], /* CJK Ideograph Extension A */ + [0x3733, 0x3733], /* CJK Ideograph Extension A */ + [0x3734, 0x3734], /* CJK Ideograph Extension A */ + [0x3735, 0x3735], /* CJK Ideograph Extension A */ + [0x3736, 0x3736], /* CJK Ideograph Extension A */ + [0x3737, 0x3737], /* CJK Ideograph Extension A */ + [0x3738, 0x3738], /* CJK Ideograph Extension A */ + [0x3739, 0x3739], /* CJK Ideograph Extension A */ + [0x373a, 0x373a], /* CJK Ideograph Extension A */ + [0x373b, 0x373b], /* CJK Ideograph Extension A */ + [0x373c, 0x373c], /* CJK Ideograph Extension A */ + [0x373d, 0x373d], /* CJK Ideograph Extension A */ + [0x373e, 0x373e], /* CJK Ideograph Extension A */ + [0x373f, 0x373f], /* CJK Ideograph Extension A */ + [0x3740, 0x3740], /* CJK Ideograph Extension A */ + [0x3741, 0x3741], /* CJK Ideograph Extension A */ + [0x3742, 0x3742], /* CJK Ideograph Extension A */ + [0x3743, 0x3743], /* CJK Ideograph Extension A */ + [0x3744, 0x3744], /* CJK Ideograph Extension A */ + [0x3745, 0x3745], /* CJK Ideograph Extension A */ + [0x3746, 0x3746], /* CJK Ideograph Extension A */ + [0x3747, 0x3747], /* CJK Ideograph Extension A */ + [0x3748, 0x3748], /* CJK Ideograph Extension A */ + [0x3749, 0x3749], /* CJK Ideograph Extension A */ + [0x374a, 0x374a], /* CJK Ideograph Extension A */ + [0x374b, 0x374b], /* CJK Ideograph Extension A */ + [0x374c, 0x374c], /* CJK Ideograph Extension A */ + [0x374d, 0x374d], /* CJK Ideograph Extension A */ + [0x374e, 0x374e], /* CJK Ideograph Extension A */ + [0x374f, 0x374f], /* CJK Ideograph Extension A */ + [0x3750, 0x3750], /* CJK Ideograph Extension A */ + [0x3751, 0x3751], /* CJK Ideograph Extension A */ + [0x3752, 0x3752], /* CJK Ideograph Extension A */ + [0x3753, 0x3753], /* CJK Ideograph Extension A */ + [0x3754, 0x3754], /* CJK Ideograph Extension A */ + [0x3755, 0x3755], /* CJK Ideograph Extension A */ + [0x3756, 0x3756], /* CJK Ideograph Extension A */ + [0x3757, 0x3757], /* CJK Ideograph Extension A */ + [0x3758, 0x3758], /* CJK Ideograph Extension A */ + [0x3759, 0x3759], /* CJK Ideograph Extension A */ + [0x375a, 0x375a], /* CJK Ideograph Extension A */ + [0x375b, 0x375b], /* CJK Ideograph Extension A */ + [0x375c, 0x375c], /* CJK Ideograph Extension A */ + [0x375d, 0x375d], /* CJK Ideograph Extension A */ + [0x375e, 0x375e], /* CJK Ideograph Extension A */ + [0x375f, 0x375f], /* CJK Ideograph Extension A */ + [0x3760, 0x3760], /* CJK Ideograph Extension A */ + [0x3761, 0x3761], /* CJK Ideograph Extension A */ + [0x3762, 0x3762], /* CJK Ideograph Extension A */ + [0x3763, 0x3763], /* CJK Ideograph Extension A */ + [0x3764, 0x3764], /* CJK Ideograph Extension A */ + [0x3765, 0x3765], /* CJK Ideograph Extension A */ + [0x3766, 0x3766], /* CJK Ideograph Extension A */ + [0x3767, 0x3767], /* CJK Ideograph Extension A */ + [0x3768, 0x3768], /* CJK Ideograph Extension A */ + [0x3769, 0x3769], /* CJK Ideograph Extension A */ + [0x376a, 0x376a], /* CJK Ideograph Extension A */ + [0x376b, 0x376b], /* CJK Ideograph Extension A */ + [0x376c, 0x376c], /* CJK Ideograph Extension A */ + [0x376d, 0x376d], /* CJK Ideograph Extension A */ + [0x376e, 0x376e], /* CJK Ideograph Extension A */ + [0x376f, 0x376f], /* CJK Ideograph Extension A */ + [0x3770, 0x3770], /* CJK Ideograph Extension A */ + [0x3771, 0x3771], /* CJK Ideograph Extension A */ + [0x3772, 0x3772], /* CJK Ideograph Extension A */ + [0x3773, 0x3773], /* CJK Ideograph Extension A */ + [0x3774, 0x3774], /* CJK Ideograph Extension A */ + [0x3775, 0x3775], /* CJK Ideograph Extension A */ + [0x3776, 0x3776], /* CJK Ideograph Extension A */ + [0x3777, 0x3777], /* CJK Ideograph Extension A */ + [0x3778, 0x3778], /* CJK Ideograph Extension A */ + [0x3779, 0x3779], /* CJK Ideograph Extension A */ + [0x377a, 0x377a], /* CJK Ideograph Extension A */ + [0x377b, 0x377b], /* CJK Ideograph Extension A */ + [0x377c, 0x377c], /* CJK Ideograph Extension A */ + [0x377d, 0x377d], /* CJK Ideograph Extension A */ + [0x377e, 0x377e], /* CJK Ideograph Extension A */ + [0x377f, 0x377f], /* CJK Ideograph Extension A */ + [0x3780, 0x3780], /* CJK Ideograph Extension A */ + [0x3781, 0x3781], /* CJK Ideograph Extension A */ + [0x3782, 0x3782], /* CJK Ideograph Extension A */ + [0x3783, 0x3783], /* CJK Ideograph Extension A */ + [0x3784, 0x3784], /* CJK Ideograph Extension A */ + [0x3785, 0x3785], /* CJK Ideograph Extension A */ + [0x3786, 0x3786], /* CJK Ideograph Extension A */ + [0x3787, 0x3787], /* CJK Ideograph Extension A */ + [0x3788, 0x3788], /* CJK Ideograph Extension A */ + [0x3789, 0x3789], /* CJK Ideograph Extension A */ + [0x378a, 0x378a], /* CJK Ideograph Extension A */ + [0x378b, 0x378b], /* CJK Ideograph Extension A */ + [0x378c, 0x378c], /* CJK Ideograph Extension A */ + [0x378d, 0x378d], /* CJK Ideograph Extension A */ + [0x378e, 0x378e], /* CJK Ideograph Extension A */ + [0x378f, 0x378f], /* CJK Ideograph Extension A */ + [0x3790, 0x3790], /* CJK Ideograph Extension A */ + [0x3791, 0x3791], /* CJK Ideograph Extension A */ + [0x3792, 0x3792], /* CJK Ideograph Extension A */ + [0x3793, 0x3793], /* CJK Ideograph Extension A */ + [0x3794, 0x3794], /* CJK Ideograph Extension A */ + [0x3795, 0x3795], /* CJK Ideograph Extension A */ + [0x3796, 0x3796], /* CJK Ideograph Extension A */ + [0x3797, 0x3797], /* CJK Ideograph Extension A */ + [0x3798, 0x3798], /* CJK Ideograph Extension A */ + [0x3799, 0x3799], /* CJK Ideograph Extension A */ + [0x379a, 0x379a], /* CJK Ideograph Extension A */ + [0x379b, 0x379b], /* CJK Ideograph Extension A */ + [0x379c, 0x379c], /* CJK Ideograph Extension A */ + [0x379d, 0x379d], /* CJK Ideograph Extension A */ + [0x379e, 0x379e], /* CJK Ideograph Extension A */ + [0x379f, 0x379f], /* CJK Ideograph Extension A */ + [0x37a0, 0x37a0], /* CJK Ideograph Extension A */ + [0x37a1, 0x37a1], /* CJK Ideograph Extension A */ + [0x37a2, 0x37a2], /* CJK Ideograph Extension A */ + [0x37a3, 0x37a3], /* CJK Ideograph Extension A */ + [0x37a4, 0x37a4], /* CJK Ideograph Extension A */ + [0x37a5, 0x37a5], /* CJK Ideograph Extension A */ + [0x37a6, 0x37a6], /* CJK Ideograph Extension A */ + [0x37a7, 0x37a7], /* CJK Ideograph Extension A */ + [0x37a8, 0x37a8], /* CJK Ideograph Extension A */ + [0x37a9, 0x37a9], /* CJK Ideograph Extension A */ + [0x37aa, 0x37aa], /* CJK Ideograph Extension A */ + [0x37ab, 0x37ab], /* CJK Ideograph Extension A */ + [0x37ac, 0x37ac], /* CJK Ideograph Extension A */ + [0x37ad, 0x37ad], /* CJK Ideograph Extension A */ + [0x37ae, 0x37ae], /* CJK Ideograph Extension A */ + [0x37af, 0x37af], /* CJK Ideograph Extension A */ + [0x37b0, 0x37b0], /* CJK Ideograph Extension A */ + [0x37b1, 0x37b1], /* CJK Ideograph Extension A */ + [0x37b2, 0x37b2], /* CJK Ideograph Extension A */ + [0x37b3, 0x37b3], /* CJK Ideograph Extension A */ + [0x37b4, 0x37b4], /* CJK Ideograph Extension A */ + [0x37b5, 0x37b5], /* CJK Ideograph Extension A */ + [0x37b6, 0x37b6], /* CJK Ideograph Extension A */ + [0x37b7, 0x37b7], /* CJK Ideograph Extension A */ + [0x37b8, 0x37b8], /* CJK Ideograph Extension A */ + [0x37b9, 0x37b9], /* CJK Ideograph Extension A */ + [0x37ba, 0x37ba], /* CJK Ideograph Extension A */ + [0x37bb, 0x37bb], /* CJK Ideograph Extension A */ + [0x37bc, 0x37bc], /* CJK Ideograph Extension A */ + [0x37bd, 0x37bd], /* CJK Ideograph Extension A */ + [0x37be, 0x37be], /* CJK Ideograph Extension A */ + [0x37bf, 0x37bf], /* CJK Ideograph Extension A */ + [0x37c0, 0x37c0], /* CJK Ideograph Extension A */ + [0x37c1, 0x37c1], /* CJK Ideograph Extension A */ + [0x37c2, 0x37c2], /* CJK Ideograph Extension A */ + [0x37c3, 0x37c3], /* CJK Ideograph Extension A */ + [0x37c4, 0x37c4], /* CJK Ideograph Extension A */ + [0x37c5, 0x37c5], /* CJK Ideograph Extension A */ + [0x37c6, 0x37c6], /* CJK Ideograph Extension A */ + [0x37c7, 0x37c7], /* CJK Ideograph Extension A */ + [0x37c8, 0x37c8], /* CJK Ideograph Extension A */ + [0x37c9, 0x37c9], /* CJK Ideograph Extension A */ + [0x37ca, 0x37ca], /* CJK Ideograph Extension A */ + [0x37cb, 0x37cb], /* CJK Ideograph Extension A */ + [0x37cc, 0x37cc], /* CJK Ideograph Extension A */ + [0x37cd, 0x37cd], /* CJK Ideograph Extension A */ + [0x37ce, 0x37ce], /* CJK Ideograph Extension A */ + [0x37cf, 0x37cf], /* CJK Ideograph Extension A */ + [0x37d0, 0x37d0], /* CJK Ideograph Extension A */ + [0x37d1, 0x37d1], /* CJK Ideograph Extension A */ + [0x37d2, 0x37d2], /* CJK Ideograph Extension A */ + [0x37d3, 0x37d3], /* CJK Ideograph Extension A */ + [0x37d4, 0x37d4], /* CJK Ideograph Extension A */ + [0x37d5, 0x37d5], /* CJK Ideograph Extension A */ + [0x37d6, 0x37d6], /* CJK Ideograph Extension A */ + [0x37d7, 0x37d7], /* CJK Ideograph Extension A */ + [0x37d8, 0x37d8], /* CJK Ideograph Extension A */ + [0x37d9, 0x37d9], /* CJK Ideograph Extension A */ + [0x37da, 0x37da], /* CJK Ideograph Extension A */ + [0x37db, 0x37db], /* CJK Ideograph Extension A */ + [0x37dc, 0x37dc], /* CJK Ideograph Extension A */ + [0x37dd, 0x37dd], /* CJK Ideograph Extension A */ + [0x37de, 0x37de], /* CJK Ideograph Extension A */ + [0x37df, 0x37df], /* CJK Ideograph Extension A */ + [0x37e0, 0x37e0], /* CJK Ideograph Extension A */ + [0x37e1, 0x37e1], /* CJK Ideograph Extension A */ + [0x37e2, 0x37e2], /* CJK Ideograph Extension A */ + [0x37e3, 0x37e3], /* CJK Ideograph Extension A */ + [0x37e4, 0x37e4], /* CJK Ideograph Extension A */ + [0x37e5, 0x37e5], /* CJK Ideograph Extension A */ + [0x37e6, 0x37e6], /* CJK Ideograph Extension A */ + [0x37e7, 0x37e7], /* CJK Ideograph Extension A */ + [0x37e8, 0x37e8], /* CJK Ideograph Extension A */ + [0x37e9, 0x37e9], /* CJK Ideograph Extension A */ + [0x37ea, 0x37ea], /* CJK Ideograph Extension A */ + [0x37eb, 0x37eb], /* CJK Ideograph Extension A */ + [0x37ec, 0x37ec], /* CJK Ideograph Extension A */ + [0x37ed, 0x37ed], /* CJK Ideograph Extension A */ + [0x37ee, 0x37ee], /* CJK Ideograph Extension A */ + [0x37ef, 0x37ef], /* CJK Ideograph Extension A */ + [0x37f0, 0x37f0], /* CJK Ideograph Extension A */ + [0x37f1, 0x37f1], /* CJK Ideograph Extension A */ + [0x37f2, 0x37f2], /* CJK Ideograph Extension A */ + [0x37f3, 0x37f3], /* CJK Ideograph Extension A */ + [0x37f4, 0x37f4], /* CJK Ideograph Extension A */ + [0x37f5, 0x37f5], /* CJK Ideograph Extension A */ + [0x37f6, 0x37f6], /* CJK Ideograph Extension A */ + [0x37f7, 0x37f7], /* CJK Ideograph Extension A */ + [0x37f8, 0x37f8], /* CJK Ideograph Extension A */ + [0x37f9, 0x37f9], /* CJK Ideograph Extension A */ + [0x37fa, 0x37fa], /* CJK Ideograph Extension A */ + [0x37fb, 0x37fb], /* CJK Ideograph Extension A */ + [0x37fc, 0x37fc], /* CJK Ideograph Extension A */ + [0x37fd, 0x37fd], /* CJK Ideograph Extension A */ + [0x37fe, 0x37fe], /* CJK Ideograph Extension A */ + [0x37ff, 0x37ff], /* CJK Ideograph Extension A */ + [0x3800, 0x3800], /* CJK Ideograph Extension A */ + [0x3801, 0x3801], /* CJK Ideograph Extension A */ + [0x3802, 0x3802], /* CJK Ideograph Extension A */ + [0x3803, 0x3803], /* CJK Ideograph Extension A */ + [0x3804, 0x3804], /* CJK Ideograph Extension A */ + [0x3805, 0x3805], /* CJK Ideograph Extension A */ + [0x3806, 0x3806], /* CJK Ideograph Extension A */ + [0x3807, 0x3807], /* CJK Ideograph Extension A */ + [0x3808, 0x3808], /* CJK Ideograph Extension A */ + [0x3809, 0x3809], /* CJK Ideograph Extension A */ + [0x380a, 0x380a], /* CJK Ideograph Extension A */ + [0x380b, 0x380b], /* CJK Ideograph Extension A */ + [0x380c, 0x380c], /* CJK Ideograph Extension A */ + [0x380d, 0x380d], /* CJK Ideograph Extension A */ + [0x380e, 0x380e], /* CJK Ideograph Extension A */ + [0x380f, 0x380f], /* CJK Ideograph Extension A */ + [0x3810, 0x3810], /* CJK Ideograph Extension A */ + [0x3811, 0x3811], /* CJK Ideograph Extension A */ + [0x3812, 0x3812], /* CJK Ideograph Extension A */ + [0x3813, 0x3813], /* CJK Ideograph Extension A */ + [0x3814, 0x3814], /* CJK Ideograph Extension A */ + [0x3815, 0x3815], /* CJK Ideograph Extension A */ + [0x3816, 0x3816], /* CJK Ideograph Extension A */ + [0x3817, 0x3817], /* CJK Ideograph Extension A */ + [0x3818, 0x3818], /* CJK Ideograph Extension A */ + [0x3819, 0x3819], /* CJK Ideograph Extension A */ + [0x381a, 0x381a], /* CJK Ideograph Extension A */ + [0x381b, 0x381b], /* CJK Ideograph Extension A */ + [0x381c, 0x381c], /* CJK Ideograph Extension A */ + [0x381d, 0x381d], /* CJK Ideograph Extension A */ + [0x381e, 0x381e], /* CJK Ideograph Extension A */ + [0x381f, 0x381f], /* CJK Ideograph Extension A */ + [0x3820, 0x3820], /* CJK Ideograph Extension A */ + [0x3821, 0x3821], /* CJK Ideograph Extension A */ + [0x3822, 0x3822], /* CJK Ideograph Extension A */ + [0x3823, 0x3823], /* CJK Ideograph Extension A */ + [0x3824, 0x3824], /* CJK Ideograph Extension A */ + [0x3825, 0x3825], /* CJK Ideograph Extension A */ + [0x3826, 0x3826], /* CJK Ideograph Extension A */ + [0x3827, 0x3827], /* CJK Ideograph Extension A */ + [0x3828, 0x3828], /* CJK Ideograph Extension A */ + [0x3829, 0x3829], /* CJK Ideograph Extension A */ + [0x382a, 0x382a], /* CJK Ideograph Extension A */ + [0x382b, 0x382b], /* CJK Ideograph Extension A */ + [0x382c, 0x382c], /* CJK Ideograph Extension A */ + [0x382d, 0x382d], /* CJK Ideograph Extension A */ + [0x382e, 0x382e], /* CJK Ideograph Extension A */ + [0x382f, 0x382f], /* CJK Ideograph Extension A */ + [0x3830, 0x3830], /* CJK Ideograph Extension A */ + [0x3831, 0x3831], /* CJK Ideograph Extension A */ + [0x3832, 0x3832], /* CJK Ideograph Extension A */ + [0x3833, 0x3833], /* CJK Ideograph Extension A */ + [0x3834, 0x3834], /* CJK Ideograph Extension A */ + [0x3835, 0x3835], /* CJK Ideograph Extension A */ + [0x3836, 0x3836], /* CJK Ideograph Extension A */ + [0x3837, 0x3837], /* CJK Ideograph Extension A */ + [0x3838, 0x3838], /* CJK Ideograph Extension A */ + [0x3839, 0x3839], /* CJK Ideograph Extension A */ + [0x383a, 0x383a], /* CJK Ideograph Extension A */ + [0x383b, 0x383b], /* CJK Ideograph Extension A */ + [0x383c, 0x383c], /* CJK Ideograph Extension A */ + [0x383d, 0x383d], /* CJK Ideograph Extension A */ + [0x383e, 0x383e], /* CJK Ideograph Extension A */ + [0x383f, 0x383f], /* CJK Ideograph Extension A */ + [0x3840, 0x3840], /* CJK Ideograph Extension A */ + [0x3841, 0x3841], /* CJK Ideograph Extension A */ + [0x3842, 0x3842], /* CJK Ideograph Extension A */ + [0x3843, 0x3843], /* CJK Ideograph Extension A */ + [0x3844, 0x3844], /* CJK Ideograph Extension A */ + [0x3845, 0x3845], /* CJK Ideograph Extension A */ + [0x3846, 0x3846], /* CJK Ideograph Extension A */ + [0x3847, 0x3847], /* CJK Ideograph Extension A */ + [0x3848, 0x3848], /* CJK Ideograph Extension A */ + [0x3849, 0x3849], /* CJK Ideograph Extension A */ + [0x384a, 0x384a], /* CJK Ideograph Extension A */ + [0x384b, 0x384b], /* CJK Ideograph Extension A */ + [0x384c, 0x384c], /* CJK Ideograph Extension A */ + [0x384d, 0x384d], /* CJK Ideograph Extension A */ + [0x384e, 0x384e], /* CJK Ideograph Extension A */ + [0x384f, 0x384f], /* CJK Ideograph Extension A */ + [0x3850, 0x3850], /* CJK Ideograph Extension A */ + [0x3851, 0x3851], /* CJK Ideograph Extension A */ + [0x3852, 0x3852], /* CJK Ideograph Extension A */ + [0x3853, 0x3853], /* CJK Ideograph Extension A */ + [0x3854, 0x3854], /* CJK Ideograph Extension A */ + [0x3855, 0x3855], /* CJK Ideograph Extension A */ + [0x3856, 0x3856], /* CJK Ideograph Extension A */ + [0x3857, 0x3857], /* CJK Ideograph Extension A */ + [0x3858, 0x3858], /* CJK Ideograph Extension A */ + [0x3859, 0x3859], /* CJK Ideograph Extension A */ + [0x385a, 0x385a], /* CJK Ideograph Extension A */ + [0x385b, 0x385b], /* CJK Ideograph Extension A */ + [0x385c, 0x385c], /* CJK Ideograph Extension A */ + [0x385d, 0x385d], /* CJK Ideograph Extension A */ + [0x385e, 0x385e], /* CJK Ideograph Extension A */ + [0x385f, 0x385f], /* CJK Ideograph Extension A */ + [0x3860, 0x3860], /* CJK Ideograph Extension A */ + [0x3861, 0x3861], /* CJK Ideograph Extension A */ + [0x3862, 0x3862], /* CJK Ideograph Extension A */ + [0x3863, 0x3863], /* CJK Ideograph Extension A */ + [0x3864, 0x3864], /* CJK Ideograph Extension A */ + [0x3865, 0x3865], /* CJK Ideograph Extension A */ + [0x3866, 0x3866], /* CJK Ideograph Extension A */ + [0x3867, 0x3867], /* CJK Ideograph Extension A */ + [0x3868, 0x3868], /* CJK Ideograph Extension A */ + [0x3869, 0x3869], /* CJK Ideograph Extension A */ + [0x386a, 0x386a], /* CJK Ideograph Extension A */ + [0x386b, 0x386b], /* CJK Ideograph Extension A */ + [0x386c, 0x386c], /* CJK Ideograph Extension A */ + [0x386d, 0x386d], /* CJK Ideograph Extension A */ + [0x386e, 0x386e], /* CJK Ideograph Extension A */ + [0x386f, 0x386f], /* CJK Ideograph Extension A */ + [0x3870, 0x3870], /* CJK Ideograph Extension A */ + [0x3871, 0x3871], /* CJK Ideograph Extension A */ + [0x3872, 0x3872], /* CJK Ideograph Extension A */ + [0x3873, 0x3873], /* CJK Ideograph Extension A */ + [0x3874, 0x3874], /* CJK Ideograph Extension A */ + [0x3875, 0x3875], /* CJK Ideograph Extension A */ + [0x3876, 0x3876], /* CJK Ideograph Extension A */ + [0x3877, 0x3877], /* CJK Ideograph Extension A */ + [0x3878, 0x3878], /* CJK Ideograph Extension A */ + [0x3879, 0x3879], /* CJK Ideograph Extension A */ + [0x387a, 0x387a], /* CJK Ideograph Extension A */ + [0x387b, 0x387b], /* CJK Ideograph Extension A */ + [0x387c, 0x387c], /* CJK Ideograph Extension A */ + [0x387d, 0x387d], /* CJK Ideograph Extension A */ + [0x387e, 0x387e], /* CJK Ideograph Extension A */ + [0x387f, 0x387f], /* CJK Ideograph Extension A */ + [0x3880, 0x3880], /* CJK Ideograph Extension A */ + [0x3881, 0x3881], /* CJK Ideograph Extension A */ + [0x3882, 0x3882], /* CJK Ideograph Extension A */ + [0x3883, 0x3883], /* CJK Ideograph Extension A */ + [0x3884, 0x3884], /* CJK Ideograph Extension A */ + [0x3885, 0x3885], /* CJK Ideograph Extension A */ + [0x3886, 0x3886], /* CJK Ideograph Extension A */ + [0x3887, 0x3887], /* CJK Ideograph Extension A */ + [0x3888, 0x3888], /* CJK Ideograph Extension A */ + [0x3889, 0x3889], /* CJK Ideograph Extension A */ + [0x388a, 0x388a], /* CJK Ideograph Extension A */ + [0x388b, 0x388b], /* CJK Ideograph Extension A */ + [0x388c, 0x388c], /* CJK Ideograph Extension A */ + [0x388d, 0x388d], /* CJK Ideograph Extension A */ + [0x388e, 0x388e], /* CJK Ideograph Extension A */ + [0x388f, 0x388f], /* CJK Ideograph Extension A */ + [0x3890, 0x3890], /* CJK Ideograph Extension A */ + [0x3891, 0x3891], /* CJK Ideograph Extension A */ + [0x3892, 0x3892], /* CJK Ideograph Extension A */ + [0x3893, 0x3893], /* CJK Ideograph Extension A */ + [0x3894, 0x3894], /* CJK Ideograph Extension A */ + [0x3895, 0x3895], /* CJK Ideograph Extension A */ + [0x3896, 0x3896], /* CJK Ideograph Extension A */ + [0x3897, 0x3897], /* CJK Ideograph Extension A */ + [0x3898, 0x3898], /* CJK Ideograph Extension A */ + [0x3899, 0x3899], /* CJK Ideograph Extension A */ + [0x389a, 0x389a], /* CJK Ideograph Extension A */ + [0x389b, 0x389b], /* CJK Ideograph Extension A */ + [0x389c, 0x389c], /* CJK Ideograph Extension A */ + [0x389d, 0x389d], /* CJK Ideograph Extension A */ + [0x389e, 0x389e], /* CJK Ideograph Extension A */ + [0x389f, 0x389f], /* CJK Ideograph Extension A */ + [0x38a0, 0x38a0], /* CJK Ideograph Extension A */ + [0x38a1, 0x38a1], /* CJK Ideograph Extension A */ + [0x38a2, 0x38a2], /* CJK Ideograph Extension A */ + [0x38a3, 0x38a3], /* CJK Ideograph Extension A */ + [0x38a4, 0x38a4], /* CJK Ideograph Extension A */ + [0x38a5, 0x38a5], /* CJK Ideograph Extension A */ + [0x38a6, 0x38a6], /* CJK Ideograph Extension A */ + [0x38a7, 0x38a7], /* CJK Ideograph Extension A */ + [0x38a8, 0x38a8], /* CJK Ideograph Extension A */ + [0x38a9, 0x38a9], /* CJK Ideograph Extension A */ + [0x38aa, 0x38aa], /* CJK Ideograph Extension A */ + [0x38ab, 0x38ab], /* CJK Ideograph Extension A */ + [0x38ac, 0x38ac], /* CJK Ideograph Extension A */ + [0x38ad, 0x38ad], /* CJK Ideograph Extension A */ + [0x38ae, 0x38ae], /* CJK Ideograph Extension A */ + [0x38af, 0x38af], /* CJK Ideograph Extension A */ + [0x38b0, 0x38b0], /* CJK Ideograph Extension A */ + [0x38b1, 0x38b1], /* CJK Ideograph Extension A */ + [0x38b2, 0x38b2], /* CJK Ideograph Extension A */ + [0x38b3, 0x38b3], /* CJK Ideograph Extension A */ + [0x38b4, 0x38b4], /* CJK Ideograph Extension A */ + [0x38b5, 0x38b5], /* CJK Ideograph Extension A */ + [0x38b6, 0x38b6], /* CJK Ideograph Extension A */ + [0x38b7, 0x38b7], /* CJK Ideograph Extension A */ + [0x38b8, 0x38b8], /* CJK Ideograph Extension A */ + [0x38b9, 0x38b9], /* CJK Ideograph Extension A */ + [0x38ba, 0x38ba], /* CJK Ideograph Extension A */ + [0x38bb, 0x38bb], /* CJK Ideograph Extension A */ + [0x38bc, 0x38bc], /* CJK Ideograph Extension A */ + [0x38bd, 0x38bd], /* CJK Ideograph Extension A */ + [0x38be, 0x38be], /* CJK Ideograph Extension A */ + [0x38bf, 0x38bf], /* CJK Ideograph Extension A */ + [0x38c0, 0x38c0], /* CJK Ideograph Extension A */ + [0x38c1, 0x38c1], /* CJK Ideograph Extension A */ + [0x38c2, 0x38c2], /* CJK Ideograph Extension A */ + [0x38c3, 0x38c3], /* CJK Ideograph Extension A */ + [0x38c4, 0x38c4], /* CJK Ideograph Extension A */ + [0x38c5, 0x38c5], /* CJK Ideograph Extension A */ + [0x38c6, 0x38c6], /* CJK Ideograph Extension A */ + [0x38c7, 0x38c7], /* CJK Ideograph Extension A */ + [0x38c8, 0x38c8], /* CJK Ideograph Extension A */ + [0x38c9, 0x38c9], /* CJK Ideograph Extension A */ + [0x38ca, 0x38ca], /* CJK Ideograph Extension A */ + [0x38cb, 0x38cb], /* CJK Ideograph Extension A */ + [0x38cc, 0x38cc], /* CJK Ideograph Extension A */ + [0x38cd, 0x38cd], /* CJK Ideograph Extension A */ + [0x38ce, 0x38ce], /* CJK Ideograph Extension A */ + [0x38cf, 0x38cf], /* CJK Ideograph Extension A */ + [0x38d0, 0x38d0], /* CJK Ideograph Extension A */ + [0x38d1, 0x38d1], /* CJK Ideograph Extension A */ + [0x38d2, 0x38d2], /* CJK Ideograph Extension A */ + [0x38d3, 0x38d3], /* CJK Ideograph Extension A */ + [0x38d4, 0x38d4], /* CJK Ideograph Extension A */ + [0x38d5, 0x38d5], /* CJK Ideograph Extension A */ + [0x38d6, 0x38d6], /* CJK Ideograph Extension A */ + [0x38d7, 0x38d7], /* CJK Ideograph Extension A */ + [0x38d8, 0x38d8], /* CJK Ideograph Extension A */ + [0x38d9, 0x38d9], /* CJK Ideograph Extension A */ + [0x38da, 0x38da], /* CJK Ideograph Extension A */ + [0x38db, 0x38db], /* CJK Ideograph Extension A */ + [0x38dc, 0x38dc], /* CJK Ideograph Extension A */ + [0x38dd, 0x38dd], /* CJK Ideograph Extension A */ + [0x38de, 0x38de], /* CJK Ideograph Extension A */ + [0x38df, 0x38df], /* CJK Ideograph Extension A */ + [0x38e0, 0x38e0], /* CJK Ideograph Extension A */ + [0x38e1, 0x38e1], /* CJK Ideograph Extension A */ + [0x38e2, 0x38e2], /* CJK Ideograph Extension A */ + [0x38e3, 0x38e3], /* CJK Ideograph Extension A */ + [0x38e4, 0x38e4], /* CJK Ideograph Extension A */ + [0x38e5, 0x38e5], /* CJK Ideograph Extension A */ + [0x38e6, 0x38e6], /* CJK Ideograph Extension A */ + [0x38e7, 0x38e7], /* CJK Ideograph Extension A */ + [0x38e8, 0x38e8], /* CJK Ideograph Extension A */ + [0x38e9, 0x38e9], /* CJK Ideograph Extension A */ + [0x38ea, 0x38ea], /* CJK Ideograph Extension A */ + [0x38eb, 0x38eb], /* CJK Ideograph Extension A */ + [0x38ec, 0x38ec], /* CJK Ideograph Extension A */ + [0x38ed, 0x38ed], /* CJK Ideograph Extension A */ + [0x38ee, 0x38ee], /* CJK Ideograph Extension A */ + [0x38ef, 0x38ef], /* CJK Ideograph Extension A */ + [0x38f0, 0x38f0], /* CJK Ideograph Extension A */ + [0x38f1, 0x38f1], /* CJK Ideograph Extension A */ + [0x38f2, 0x38f2], /* CJK Ideograph Extension A */ + [0x38f3, 0x38f3], /* CJK Ideograph Extension A */ + [0x38f4, 0x38f4], /* CJK Ideograph Extension A */ + [0x38f5, 0x38f5], /* CJK Ideograph Extension A */ + [0x38f6, 0x38f6], /* CJK Ideograph Extension A */ + [0x38f7, 0x38f7], /* CJK Ideograph Extension A */ + [0x38f8, 0x38f8], /* CJK Ideograph Extension A */ + [0x38f9, 0x38f9], /* CJK Ideograph Extension A */ + [0x38fa, 0x38fa], /* CJK Ideograph Extension A */ + [0x38fb, 0x38fb], /* CJK Ideograph Extension A */ + [0x38fc, 0x38fc], /* CJK Ideograph Extension A */ + [0x38fd, 0x38fd], /* CJK Ideograph Extension A */ + [0x38fe, 0x38fe], /* CJK Ideograph Extension A */ + [0x38ff, 0x38ff], /* CJK Ideograph Extension A */ + [0x3900, 0x3900], /* CJK Ideograph Extension A */ + [0x3901, 0x3901], /* CJK Ideograph Extension A */ + [0x3902, 0x3902], /* CJK Ideograph Extension A */ + [0x3903, 0x3903], /* CJK Ideograph Extension A */ + [0x3904, 0x3904], /* CJK Ideograph Extension A */ + [0x3905, 0x3905], /* CJK Ideograph Extension A */ + [0x3906, 0x3906], /* CJK Ideograph Extension A */ + [0x3907, 0x3907], /* CJK Ideograph Extension A */ + [0x3908, 0x3908], /* CJK Ideograph Extension A */ + [0x3909, 0x3909], /* CJK Ideograph Extension A */ + [0x390a, 0x390a], /* CJK Ideograph Extension A */ + [0x390b, 0x390b], /* CJK Ideograph Extension A */ + [0x390c, 0x390c], /* CJK Ideograph Extension A */ + [0x390d, 0x390d], /* CJK Ideograph Extension A */ + [0x390e, 0x390e], /* CJK Ideograph Extension A */ + [0x390f, 0x390f], /* CJK Ideograph Extension A */ + [0x3910, 0x3910], /* CJK Ideograph Extension A */ + [0x3911, 0x3911], /* CJK Ideograph Extension A */ + [0x3912, 0x3912], /* CJK Ideograph Extension A */ + [0x3913, 0x3913], /* CJK Ideograph Extension A */ + [0x3914, 0x3914], /* CJK Ideograph Extension A */ + [0x3915, 0x3915], /* CJK Ideograph Extension A */ + [0x3916, 0x3916], /* CJK Ideograph Extension A */ + [0x3917, 0x3917], /* CJK Ideograph Extension A */ + [0x3918, 0x3918], /* CJK Ideograph Extension A */ + [0x3919, 0x3919], /* CJK Ideograph Extension A */ + [0x391a, 0x391a], /* CJK Ideograph Extension A */ + [0x391b, 0x391b], /* CJK Ideograph Extension A */ + [0x391c, 0x391c], /* CJK Ideograph Extension A */ + [0x391d, 0x391d], /* CJK Ideograph Extension A */ + [0x391e, 0x391e], /* CJK Ideograph Extension A */ + [0x391f, 0x391f], /* CJK Ideograph Extension A */ + [0x3920, 0x3920], /* CJK Ideograph Extension A */ + [0x3921, 0x3921], /* CJK Ideograph Extension A */ + [0x3922, 0x3922], /* CJK Ideograph Extension A */ + [0x3923, 0x3923], /* CJK Ideograph Extension A */ + [0x3924, 0x3924], /* CJK Ideograph Extension A */ + [0x3925, 0x3925], /* CJK Ideograph Extension A */ + [0x3926, 0x3926], /* CJK Ideograph Extension A */ + [0x3927, 0x3927], /* CJK Ideograph Extension A */ + [0x3928, 0x3928], /* CJK Ideograph Extension A */ + [0x3929, 0x3929], /* CJK Ideograph Extension A */ + [0x392a, 0x392a], /* CJK Ideograph Extension A */ + [0x392b, 0x392b], /* CJK Ideograph Extension A */ + [0x392c, 0x392c], /* CJK Ideograph Extension A */ + [0x392d, 0x392d], /* CJK Ideograph Extension A */ + [0x392e, 0x392e], /* CJK Ideograph Extension A */ + [0x392f, 0x392f], /* CJK Ideograph Extension A */ + [0x3930, 0x3930], /* CJK Ideograph Extension A */ + [0x3931, 0x3931], /* CJK Ideograph Extension A */ + [0x3932, 0x3932], /* CJK Ideograph Extension A */ + [0x3933, 0x3933], /* CJK Ideograph Extension A */ + [0x3934, 0x3934], /* CJK Ideograph Extension A */ + [0x3935, 0x3935], /* CJK Ideograph Extension A */ + [0x3936, 0x3936], /* CJK Ideograph Extension A */ + [0x3937, 0x3937], /* CJK Ideograph Extension A */ + [0x3938, 0x3938], /* CJK Ideograph Extension A */ + [0x3939, 0x3939], /* CJK Ideograph Extension A */ + [0x393a, 0x393a], /* CJK Ideograph Extension A */ + [0x393b, 0x393b], /* CJK Ideograph Extension A */ + [0x393c, 0x393c], /* CJK Ideograph Extension A */ + [0x393d, 0x393d], /* CJK Ideograph Extension A */ + [0x393e, 0x393e], /* CJK Ideograph Extension A */ + [0x393f, 0x393f], /* CJK Ideograph Extension A */ + [0x3940, 0x3940], /* CJK Ideograph Extension A */ + [0x3941, 0x3941], /* CJK Ideograph Extension A */ + [0x3942, 0x3942], /* CJK Ideograph Extension A */ + [0x3943, 0x3943], /* CJK Ideograph Extension A */ + [0x3944, 0x3944], /* CJK Ideograph Extension A */ + [0x3945, 0x3945], /* CJK Ideograph Extension A */ + [0x3946, 0x3946], /* CJK Ideograph Extension A */ + [0x3947, 0x3947], /* CJK Ideograph Extension A */ + [0x3948, 0x3948], /* CJK Ideograph Extension A */ + [0x3949, 0x3949], /* CJK Ideograph Extension A */ + [0x394a, 0x394a], /* CJK Ideograph Extension A */ + [0x394b, 0x394b], /* CJK Ideograph Extension A */ + [0x394c, 0x394c], /* CJK Ideograph Extension A */ + [0x394d, 0x394d], /* CJK Ideograph Extension A */ + [0x394e, 0x394e], /* CJK Ideograph Extension A */ + [0x394f, 0x394f], /* CJK Ideograph Extension A */ + [0x3950, 0x3950], /* CJK Ideograph Extension A */ + [0x3951, 0x3951], /* CJK Ideograph Extension A */ + [0x3952, 0x3952], /* CJK Ideograph Extension A */ + [0x3953, 0x3953], /* CJK Ideograph Extension A */ + [0x3954, 0x3954], /* CJK Ideograph Extension A */ + [0x3955, 0x3955], /* CJK Ideograph Extension A */ + [0x3956, 0x3956], /* CJK Ideograph Extension A */ + [0x3957, 0x3957], /* CJK Ideograph Extension A */ + [0x3958, 0x3958], /* CJK Ideograph Extension A */ + [0x3959, 0x3959], /* CJK Ideograph Extension A */ + [0x395a, 0x395a], /* CJK Ideograph Extension A */ + [0x395b, 0x395b], /* CJK Ideograph Extension A */ + [0x395c, 0x395c], /* CJK Ideograph Extension A */ + [0x395d, 0x395d], /* CJK Ideograph Extension A */ + [0x395e, 0x395e], /* CJK Ideograph Extension A */ + [0x395f, 0x395f], /* CJK Ideograph Extension A */ + [0x3960, 0x3960], /* CJK Ideograph Extension A */ + [0x3961, 0x3961], /* CJK Ideograph Extension A */ + [0x3962, 0x3962], /* CJK Ideograph Extension A */ + [0x3963, 0x3963], /* CJK Ideograph Extension A */ + [0x3964, 0x3964], /* CJK Ideograph Extension A */ + [0x3965, 0x3965], /* CJK Ideograph Extension A */ + [0x3966, 0x3966], /* CJK Ideograph Extension A */ + [0x3967, 0x3967], /* CJK Ideograph Extension A */ + [0x3968, 0x3968], /* CJK Ideograph Extension A */ + [0x3969, 0x3969], /* CJK Ideograph Extension A */ + [0x396a, 0x396a], /* CJK Ideograph Extension A */ + [0x396b, 0x396b], /* CJK Ideograph Extension A */ + [0x396c, 0x396c], /* CJK Ideograph Extension A */ + [0x396d, 0x396d], /* CJK Ideograph Extension A */ + [0x396e, 0x396e], /* CJK Ideograph Extension A */ + [0x396f, 0x396f], /* CJK Ideograph Extension A */ + [0x3970, 0x3970], /* CJK Ideograph Extension A */ + [0x3971, 0x3971], /* CJK Ideograph Extension A */ + [0x3972, 0x3972], /* CJK Ideograph Extension A */ + [0x3973, 0x3973], /* CJK Ideograph Extension A */ + [0x3974, 0x3974], /* CJK Ideograph Extension A */ + [0x3975, 0x3975], /* CJK Ideograph Extension A */ + [0x3976, 0x3976], /* CJK Ideograph Extension A */ + [0x3977, 0x3977], /* CJK Ideograph Extension A */ + [0x3978, 0x3978], /* CJK Ideograph Extension A */ + [0x3979, 0x3979], /* CJK Ideograph Extension A */ + [0x397a, 0x397a], /* CJK Ideograph Extension A */ + [0x397b, 0x397b], /* CJK Ideograph Extension A */ + [0x397c, 0x397c], /* CJK Ideograph Extension A */ + [0x397d, 0x397d], /* CJK Ideograph Extension A */ + [0x397e, 0x397e], /* CJK Ideograph Extension A */ + [0x397f, 0x397f], /* CJK Ideograph Extension A */ + [0x3980, 0x3980], /* CJK Ideograph Extension A */ + [0x3981, 0x3981], /* CJK Ideograph Extension A */ + [0x3982, 0x3982], /* CJK Ideograph Extension A */ + [0x3983, 0x3983], /* CJK Ideograph Extension A */ + [0x3984, 0x3984], /* CJK Ideograph Extension A */ + [0x3985, 0x3985], /* CJK Ideograph Extension A */ + [0x3986, 0x3986], /* CJK Ideograph Extension A */ + [0x3987, 0x3987], /* CJK Ideograph Extension A */ + [0x3988, 0x3988], /* CJK Ideograph Extension A */ + [0x3989, 0x3989], /* CJK Ideograph Extension A */ + [0x398a, 0x398a], /* CJK Ideograph Extension A */ + [0x398b, 0x398b], /* CJK Ideograph Extension A */ + [0x398c, 0x398c], /* CJK Ideograph Extension A */ + [0x398d, 0x398d], /* CJK Ideograph Extension A */ + [0x398e, 0x398e], /* CJK Ideograph Extension A */ + [0x398f, 0x398f], /* CJK Ideograph Extension A */ + [0x3990, 0x3990], /* CJK Ideograph Extension A */ + [0x3991, 0x3991], /* CJK Ideograph Extension A */ + [0x3992, 0x3992], /* CJK Ideograph Extension A */ + [0x3993, 0x3993], /* CJK Ideograph Extension A */ + [0x3994, 0x3994], /* CJK Ideograph Extension A */ + [0x3995, 0x3995], /* CJK Ideograph Extension A */ + [0x3996, 0x3996], /* CJK Ideograph Extension A */ + [0x3997, 0x3997], /* CJK Ideograph Extension A */ + [0x3998, 0x3998], /* CJK Ideograph Extension A */ + [0x3999, 0x3999], /* CJK Ideograph Extension A */ + [0x399a, 0x399a], /* CJK Ideograph Extension A */ + [0x399b, 0x399b], /* CJK Ideograph Extension A */ + [0x399c, 0x399c], /* CJK Ideograph Extension A */ + [0x399d, 0x399d], /* CJK Ideograph Extension A */ + [0x399e, 0x399e], /* CJK Ideograph Extension A */ + [0x399f, 0x399f], /* CJK Ideograph Extension A */ + [0x39a0, 0x39a0], /* CJK Ideograph Extension A */ + [0x39a1, 0x39a1], /* CJK Ideograph Extension A */ + [0x39a2, 0x39a2], /* CJK Ideograph Extension A */ + [0x39a3, 0x39a3], /* CJK Ideograph Extension A */ + [0x39a4, 0x39a4], /* CJK Ideograph Extension A */ + [0x39a5, 0x39a5], /* CJK Ideograph Extension A */ + [0x39a6, 0x39a6], /* CJK Ideograph Extension A */ + [0x39a7, 0x39a7], /* CJK Ideograph Extension A */ + [0x39a8, 0x39a8], /* CJK Ideograph Extension A */ + [0x39a9, 0x39a9], /* CJK Ideograph Extension A */ + [0x39aa, 0x39aa], /* CJK Ideograph Extension A */ + [0x39ab, 0x39ab], /* CJK Ideograph Extension A */ + [0x39ac, 0x39ac], /* CJK Ideograph Extension A */ + [0x39ad, 0x39ad], /* CJK Ideograph Extension A */ + [0x39ae, 0x39ae], /* CJK Ideograph Extension A */ + [0x39af, 0x39af], /* CJK Ideograph Extension A */ + [0x39b0, 0x39b0], /* CJK Ideograph Extension A */ + [0x39b1, 0x39b1], /* CJK Ideograph Extension A */ + [0x39b2, 0x39b2], /* CJK Ideograph Extension A */ + [0x39b3, 0x39b3], /* CJK Ideograph Extension A */ + [0x39b4, 0x39b4], /* CJK Ideograph Extension A */ + [0x39b5, 0x39b5], /* CJK Ideograph Extension A */ + [0x39b6, 0x39b6], /* CJK Ideograph Extension A */ + [0x39b7, 0x39b7], /* CJK Ideograph Extension A */ + [0x39b8, 0x39b8], /* CJK Ideograph Extension A */ + [0x39b9, 0x39b9], /* CJK Ideograph Extension A */ + [0x39ba, 0x39ba], /* CJK Ideograph Extension A */ + [0x39bb, 0x39bb], /* CJK Ideograph Extension A */ + [0x39bc, 0x39bc], /* CJK Ideograph Extension A */ + [0x39bd, 0x39bd], /* CJK Ideograph Extension A */ + [0x39be, 0x39be], /* CJK Ideograph Extension A */ + [0x39bf, 0x39bf], /* CJK Ideograph Extension A */ + [0x39c0, 0x39c0], /* CJK Ideograph Extension A */ + [0x39c1, 0x39c1], /* CJK Ideograph Extension A */ + [0x39c2, 0x39c2], /* CJK Ideograph Extension A */ + [0x39c3, 0x39c3], /* CJK Ideograph Extension A */ + [0x39c4, 0x39c4], /* CJK Ideograph Extension A */ + [0x39c5, 0x39c5], /* CJK Ideograph Extension A */ + [0x39c6, 0x39c6], /* CJK Ideograph Extension A */ + [0x39c7, 0x39c7], /* CJK Ideograph Extension A */ + [0x39c8, 0x39c8], /* CJK Ideograph Extension A */ + [0x39c9, 0x39c9], /* CJK Ideograph Extension A */ + [0x39ca, 0x39ca], /* CJK Ideograph Extension A */ + [0x39cb, 0x39cb], /* CJK Ideograph Extension A */ + [0x39cc, 0x39cc], /* CJK Ideograph Extension A */ + [0x39cd, 0x39cd], /* CJK Ideograph Extension A */ + [0x39ce, 0x39ce], /* CJK Ideograph Extension A */ + [0x39cf, 0x39cf], /* CJK Ideograph Extension A */ + [0x39d0, 0x39d0], /* CJK Ideograph Extension A */ + [0x39d1, 0x39d1], /* CJK Ideograph Extension A */ + [0x39d2, 0x39d2], /* CJK Ideograph Extension A */ + [0x39d3, 0x39d3], /* CJK Ideograph Extension A */ + [0x39d4, 0x39d4], /* CJK Ideograph Extension A */ + [0x39d5, 0x39d5], /* CJK Ideograph Extension A */ + [0x39d6, 0x39d6], /* CJK Ideograph Extension A */ + [0x39d7, 0x39d7], /* CJK Ideograph Extension A */ + [0x39d8, 0x39d8], /* CJK Ideograph Extension A */ + [0x39d9, 0x39d9], /* CJK Ideograph Extension A */ + [0x39da, 0x39da], /* CJK Ideograph Extension A */ + [0x39db, 0x39db], /* CJK Ideograph Extension A */ + [0x39dc, 0x39dc], /* CJK Ideograph Extension A */ + [0x39dd, 0x39dd], /* CJK Ideograph Extension A */ + [0x39de, 0x39de], /* CJK Ideograph Extension A */ + [0x39df, 0x39df], /* CJK Ideograph Extension A */ + [0x39e0, 0x39e0], /* CJK Ideograph Extension A */ + [0x39e1, 0x39e1], /* CJK Ideograph Extension A */ + [0x39e2, 0x39e2], /* CJK Ideograph Extension A */ + [0x39e3, 0x39e3], /* CJK Ideograph Extension A */ + [0x39e4, 0x39e4], /* CJK Ideograph Extension A */ + [0x39e5, 0x39e5], /* CJK Ideograph Extension A */ + [0x39e6, 0x39e6], /* CJK Ideograph Extension A */ + [0x39e7, 0x39e7], /* CJK Ideograph Extension A */ + [0x39e8, 0x39e8], /* CJK Ideograph Extension A */ + [0x39e9, 0x39e9], /* CJK Ideograph Extension A */ + [0x39ea, 0x39ea], /* CJK Ideograph Extension A */ + [0x39eb, 0x39eb], /* CJK Ideograph Extension A */ + [0x39ec, 0x39ec], /* CJK Ideograph Extension A */ + [0x39ed, 0x39ed], /* CJK Ideograph Extension A */ + [0x39ee, 0x39ee], /* CJK Ideograph Extension A */ + [0x39ef, 0x39ef], /* CJK Ideograph Extension A */ + [0x39f0, 0x39f0], /* CJK Ideograph Extension A */ + [0x39f1, 0x39f1], /* CJK Ideograph Extension A */ + [0x39f2, 0x39f2], /* CJK Ideograph Extension A */ + [0x39f3, 0x39f3], /* CJK Ideograph Extension A */ + [0x39f4, 0x39f4], /* CJK Ideograph Extension A */ + [0x39f5, 0x39f5], /* CJK Ideograph Extension A */ + [0x39f6, 0x39f6], /* CJK Ideograph Extension A */ + [0x39f7, 0x39f7], /* CJK Ideograph Extension A */ + [0x39f8, 0x39f8], /* CJK Ideograph Extension A */ + [0x39f9, 0x39f9], /* CJK Ideograph Extension A */ + [0x39fa, 0x39fa], /* CJK Ideograph Extension A */ + [0x39fb, 0x39fb], /* CJK Ideograph Extension A */ + [0x39fc, 0x39fc], /* CJK Ideograph Extension A */ + [0x39fd, 0x39fd], /* CJK Ideograph Extension A */ + [0x39fe, 0x39fe], /* CJK Ideograph Extension A */ + [0x39ff, 0x39ff], /* CJK Ideograph Extension A */ + [0x3a00, 0x3a00], /* CJK Ideograph Extension A */ + [0x3a01, 0x3a01], /* CJK Ideograph Extension A */ + [0x3a02, 0x3a02], /* CJK Ideograph Extension A */ + [0x3a03, 0x3a03], /* CJK Ideograph Extension A */ + [0x3a04, 0x3a04], /* CJK Ideograph Extension A */ + [0x3a05, 0x3a05], /* CJK Ideograph Extension A */ + [0x3a06, 0x3a06], /* CJK Ideograph Extension A */ + [0x3a07, 0x3a07], /* CJK Ideograph Extension A */ + [0x3a08, 0x3a08], /* CJK Ideograph Extension A */ + [0x3a09, 0x3a09], /* CJK Ideograph Extension A */ + [0x3a0a, 0x3a0a], /* CJK Ideograph Extension A */ + [0x3a0b, 0x3a0b], /* CJK Ideograph Extension A */ + [0x3a0c, 0x3a0c], /* CJK Ideograph Extension A */ + [0x3a0d, 0x3a0d], /* CJK Ideograph Extension A */ + [0x3a0e, 0x3a0e], /* CJK Ideograph Extension A */ + [0x3a0f, 0x3a0f], /* CJK Ideograph Extension A */ + [0x3a10, 0x3a10], /* CJK Ideograph Extension A */ + [0x3a11, 0x3a11], /* CJK Ideograph Extension A */ + [0x3a12, 0x3a12], /* CJK Ideograph Extension A */ + [0x3a13, 0x3a13], /* CJK Ideograph Extension A */ + [0x3a14, 0x3a14], /* CJK Ideograph Extension A */ + [0x3a15, 0x3a15], /* CJK Ideograph Extension A */ + [0x3a16, 0x3a16], /* CJK Ideograph Extension A */ + [0x3a17, 0x3a17], /* CJK Ideograph Extension A */ + [0x3a18, 0x3a18], /* CJK Ideograph Extension A */ + [0x3a19, 0x3a19], /* CJK Ideograph Extension A */ + [0x3a1a, 0x3a1a], /* CJK Ideograph Extension A */ + [0x3a1b, 0x3a1b], /* CJK Ideograph Extension A */ + [0x3a1c, 0x3a1c], /* CJK Ideograph Extension A */ + [0x3a1d, 0x3a1d], /* CJK Ideograph Extension A */ + [0x3a1e, 0x3a1e], /* CJK Ideograph Extension A */ + [0x3a1f, 0x3a1f], /* CJK Ideograph Extension A */ + [0x3a20, 0x3a20], /* CJK Ideograph Extension A */ + [0x3a21, 0x3a21], /* CJK Ideograph Extension A */ + [0x3a22, 0x3a22], /* CJK Ideograph Extension A */ + [0x3a23, 0x3a23], /* CJK Ideograph Extension A */ + [0x3a24, 0x3a24], /* CJK Ideograph Extension A */ + [0x3a25, 0x3a25], /* CJK Ideograph Extension A */ + [0x3a26, 0x3a26], /* CJK Ideograph Extension A */ + [0x3a27, 0x3a27], /* CJK Ideograph Extension A */ + [0x3a28, 0x3a28], /* CJK Ideograph Extension A */ + [0x3a29, 0x3a29], /* CJK Ideograph Extension A */ + [0x3a2a, 0x3a2a], /* CJK Ideograph Extension A */ + [0x3a2b, 0x3a2b], /* CJK Ideograph Extension A */ + [0x3a2c, 0x3a2c], /* CJK Ideograph Extension A */ + [0x3a2d, 0x3a2d], /* CJK Ideograph Extension A */ + [0x3a2e, 0x3a2e], /* CJK Ideograph Extension A */ + [0x3a2f, 0x3a2f], /* CJK Ideograph Extension A */ + [0x3a30, 0x3a30], /* CJK Ideograph Extension A */ + [0x3a31, 0x3a31], /* CJK Ideograph Extension A */ + [0x3a32, 0x3a32], /* CJK Ideograph Extension A */ + [0x3a33, 0x3a33], /* CJK Ideograph Extension A */ + [0x3a34, 0x3a34], /* CJK Ideograph Extension A */ + [0x3a35, 0x3a35], /* CJK Ideograph Extension A */ + [0x3a36, 0x3a36], /* CJK Ideograph Extension A */ + [0x3a37, 0x3a37], /* CJK Ideograph Extension A */ + [0x3a38, 0x3a38], /* CJK Ideograph Extension A */ + [0x3a39, 0x3a39], /* CJK Ideograph Extension A */ + [0x3a3a, 0x3a3a], /* CJK Ideograph Extension A */ + [0x3a3b, 0x3a3b], /* CJK Ideograph Extension A */ + [0x3a3c, 0x3a3c], /* CJK Ideograph Extension A */ + [0x3a3d, 0x3a3d], /* CJK Ideograph Extension A */ + [0x3a3e, 0x3a3e], /* CJK Ideograph Extension A */ + [0x3a3f, 0x3a3f], /* CJK Ideograph Extension A */ + [0x3a40, 0x3a40], /* CJK Ideograph Extension A */ + [0x3a41, 0x3a41], /* CJK Ideograph Extension A */ + [0x3a42, 0x3a42], /* CJK Ideograph Extension A */ + [0x3a43, 0x3a43], /* CJK Ideograph Extension A */ + [0x3a44, 0x3a44], /* CJK Ideograph Extension A */ + [0x3a45, 0x3a45], /* CJK Ideograph Extension A */ + [0x3a46, 0x3a46], /* CJK Ideograph Extension A */ + [0x3a47, 0x3a47], /* CJK Ideograph Extension A */ + [0x3a48, 0x3a48], /* CJK Ideograph Extension A */ + [0x3a49, 0x3a49], /* CJK Ideograph Extension A */ + [0x3a4a, 0x3a4a], /* CJK Ideograph Extension A */ + [0x3a4b, 0x3a4b], /* CJK Ideograph Extension A */ + [0x3a4c, 0x3a4c], /* CJK Ideograph Extension A */ + [0x3a4d, 0x3a4d], /* CJK Ideograph Extension A */ + [0x3a4e, 0x3a4e], /* CJK Ideograph Extension A */ + [0x3a4f, 0x3a4f], /* CJK Ideograph Extension A */ + [0x3a50, 0x3a50], /* CJK Ideograph Extension A */ + [0x3a51, 0x3a51], /* CJK Ideograph Extension A */ + [0x3a52, 0x3a52], /* CJK Ideograph Extension A */ + [0x3a53, 0x3a53], /* CJK Ideograph Extension A */ + [0x3a54, 0x3a54], /* CJK Ideograph Extension A */ + [0x3a55, 0x3a55], /* CJK Ideograph Extension A */ + [0x3a56, 0x3a56], /* CJK Ideograph Extension A */ + [0x3a57, 0x3a57], /* CJK Ideograph Extension A */ + [0x3a58, 0x3a58], /* CJK Ideograph Extension A */ + [0x3a59, 0x3a59], /* CJK Ideograph Extension A */ + [0x3a5a, 0x3a5a], /* CJK Ideograph Extension A */ + [0x3a5b, 0x3a5b], /* CJK Ideograph Extension A */ + [0x3a5c, 0x3a5c], /* CJK Ideograph Extension A */ + [0x3a5d, 0x3a5d], /* CJK Ideograph Extension A */ + [0x3a5e, 0x3a5e], /* CJK Ideograph Extension A */ + [0x3a5f, 0x3a5f], /* CJK Ideograph Extension A */ + [0x3a60, 0x3a60], /* CJK Ideograph Extension A */ + [0x3a61, 0x3a61], /* CJK Ideograph Extension A */ + [0x3a62, 0x3a62], /* CJK Ideograph Extension A */ + [0x3a63, 0x3a63], /* CJK Ideograph Extension A */ + [0x3a64, 0x3a64], /* CJK Ideograph Extension A */ + [0x3a65, 0x3a65], /* CJK Ideograph Extension A */ + [0x3a66, 0x3a66], /* CJK Ideograph Extension A */ + [0x3a67, 0x3a67], /* CJK Ideograph Extension A */ + [0x3a68, 0x3a68], /* CJK Ideograph Extension A */ + [0x3a69, 0x3a69], /* CJK Ideograph Extension A */ + [0x3a6a, 0x3a6a], /* CJK Ideograph Extension A */ + [0x3a6b, 0x3a6b], /* CJK Ideograph Extension A */ + [0x3a6c, 0x3a6c], /* CJK Ideograph Extension A */ + [0x3a6d, 0x3a6d], /* CJK Ideograph Extension A */ + [0x3a6e, 0x3a6e], /* CJK Ideograph Extension A */ + [0x3a6f, 0x3a6f], /* CJK Ideograph Extension A */ + [0x3a70, 0x3a70], /* CJK Ideograph Extension A */ + [0x3a71, 0x3a71], /* CJK Ideograph Extension A */ + [0x3a72, 0x3a72], /* CJK Ideograph Extension A */ + [0x3a73, 0x3a73], /* CJK Ideograph Extension A */ + [0x3a74, 0x3a74], /* CJK Ideograph Extension A */ + [0x3a75, 0x3a75], /* CJK Ideograph Extension A */ + [0x3a76, 0x3a76], /* CJK Ideograph Extension A */ + [0x3a77, 0x3a77], /* CJK Ideograph Extension A */ + [0x3a78, 0x3a78], /* CJK Ideograph Extension A */ + [0x3a79, 0x3a79], /* CJK Ideograph Extension A */ + [0x3a7a, 0x3a7a], /* CJK Ideograph Extension A */ + [0x3a7b, 0x3a7b], /* CJK Ideograph Extension A */ + [0x3a7c, 0x3a7c], /* CJK Ideograph Extension A */ + [0x3a7d, 0x3a7d], /* CJK Ideograph Extension A */ + [0x3a7e, 0x3a7e], /* CJK Ideograph Extension A */ + [0x3a7f, 0x3a7f], /* CJK Ideograph Extension A */ + [0x3a80, 0x3a80], /* CJK Ideograph Extension A */ + [0x3a81, 0x3a81], /* CJK Ideograph Extension A */ + [0x3a82, 0x3a82], /* CJK Ideograph Extension A */ + [0x3a83, 0x3a83], /* CJK Ideograph Extension A */ + [0x3a84, 0x3a84], /* CJK Ideograph Extension A */ + [0x3a85, 0x3a85], /* CJK Ideograph Extension A */ + [0x3a86, 0x3a86], /* CJK Ideograph Extension A */ + [0x3a87, 0x3a87], /* CJK Ideograph Extension A */ + [0x3a88, 0x3a88], /* CJK Ideograph Extension A */ + [0x3a89, 0x3a89], /* CJK Ideograph Extension A */ + [0x3a8a, 0x3a8a], /* CJK Ideograph Extension A */ + [0x3a8b, 0x3a8b], /* CJK Ideograph Extension A */ + [0x3a8c, 0x3a8c], /* CJK Ideograph Extension A */ + [0x3a8d, 0x3a8d], /* CJK Ideograph Extension A */ + [0x3a8e, 0x3a8e], /* CJK Ideograph Extension A */ + [0x3a8f, 0x3a8f], /* CJK Ideograph Extension A */ + [0x3a90, 0x3a90], /* CJK Ideograph Extension A */ + [0x3a91, 0x3a91], /* CJK Ideograph Extension A */ + [0x3a92, 0x3a92], /* CJK Ideograph Extension A */ + [0x3a93, 0x3a93], /* CJK Ideograph Extension A */ + [0x3a94, 0x3a94], /* CJK Ideograph Extension A */ + [0x3a95, 0x3a95], /* CJK Ideograph Extension A */ + [0x3a96, 0x3a96], /* CJK Ideograph Extension A */ + [0x3a97, 0x3a97], /* CJK Ideograph Extension A */ + [0x3a98, 0x3a98], /* CJK Ideograph Extension A */ + [0x3a99, 0x3a99], /* CJK Ideograph Extension A */ + [0x3a9a, 0x3a9a], /* CJK Ideograph Extension A */ + [0x3a9b, 0x3a9b], /* CJK Ideograph Extension A */ + [0x3a9c, 0x3a9c], /* CJK Ideograph Extension A */ + [0x3a9d, 0x3a9d], /* CJK Ideograph Extension A */ + [0x3a9e, 0x3a9e], /* CJK Ideograph Extension A */ + [0x3a9f, 0x3a9f], /* CJK Ideograph Extension A */ + [0x3aa0, 0x3aa0], /* CJK Ideograph Extension A */ + [0x3aa1, 0x3aa1], /* CJK Ideograph Extension A */ + [0x3aa2, 0x3aa2], /* CJK Ideograph Extension A */ + [0x3aa3, 0x3aa3], /* CJK Ideograph Extension A */ + [0x3aa4, 0x3aa4], /* CJK Ideograph Extension A */ + [0x3aa5, 0x3aa5], /* CJK Ideograph Extension A */ + [0x3aa6, 0x3aa6], /* CJK Ideograph Extension A */ + [0x3aa7, 0x3aa7], /* CJK Ideograph Extension A */ + [0x3aa8, 0x3aa8], /* CJK Ideograph Extension A */ + [0x3aa9, 0x3aa9], /* CJK Ideograph Extension A */ + [0x3aaa, 0x3aaa], /* CJK Ideograph Extension A */ + [0x3aab, 0x3aab], /* CJK Ideograph Extension A */ + [0x3aac, 0x3aac], /* CJK Ideograph Extension A */ + [0x3aad, 0x3aad], /* CJK Ideograph Extension A */ + [0x3aae, 0x3aae], /* CJK Ideograph Extension A */ + [0x3aaf, 0x3aaf], /* CJK Ideograph Extension A */ + [0x3ab0, 0x3ab0], /* CJK Ideograph Extension A */ + [0x3ab1, 0x3ab1], /* CJK Ideograph Extension A */ + [0x3ab2, 0x3ab2], /* CJK Ideograph Extension A */ + [0x3ab3, 0x3ab3], /* CJK Ideograph Extension A */ + [0x3ab4, 0x3ab4], /* CJK Ideograph Extension A */ + [0x3ab5, 0x3ab5], /* CJK Ideograph Extension A */ + [0x3ab6, 0x3ab6], /* CJK Ideograph Extension A */ + [0x3ab7, 0x3ab7], /* CJK Ideograph Extension A */ + [0x3ab8, 0x3ab8], /* CJK Ideograph Extension A */ + [0x3ab9, 0x3ab9], /* CJK Ideograph Extension A */ + [0x3aba, 0x3aba], /* CJK Ideograph Extension A */ + [0x3abb, 0x3abb], /* CJK Ideograph Extension A */ + [0x3abc, 0x3abc], /* CJK Ideograph Extension A */ + [0x3abd, 0x3abd], /* CJK Ideograph Extension A */ + [0x3abe, 0x3abe], /* CJK Ideograph Extension A */ + [0x3abf, 0x3abf], /* CJK Ideograph Extension A */ + [0x3ac0, 0x3ac0], /* CJK Ideograph Extension A */ + [0x3ac1, 0x3ac1], /* CJK Ideograph Extension A */ + [0x3ac2, 0x3ac2], /* CJK Ideograph Extension A */ + [0x3ac3, 0x3ac3], /* CJK Ideograph Extension A */ + [0x3ac4, 0x3ac4], /* CJK Ideograph Extension A */ + [0x3ac5, 0x3ac5], /* CJK Ideograph Extension A */ + [0x3ac6, 0x3ac6], /* CJK Ideograph Extension A */ + [0x3ac7, 0x3ac7], /* CJK Ideograph Extension A */ + [0x3ac8, 0x3ac8], /* CJK Ideograph Extension A */ + [0x3ac9, 0x3ac9], /* CJK Ideograph Extension A */ + [0x3aca, 0x3aca], /* CJK Ideograph Extension A */ + [0x3acb, 0x3acb], /* CJK Ideograph Extension A */ + [0x3acc, 0x3acc], /* CJK Ideograph Extension A */ + [0x3acd, 0x3acd], /* CJK Ideograph Extension A */ + [0x3ace, 0x3ace], /* CJK Ideograph Extension A */ + [0x3acf, 0x3acf], /* CJK Ideograph Extension A */ + [0x3ad0, 0x3ad0], /* CJK Ideograph Extension A */ + [0x3ad1, 0x3ad1], /* CJK Ideograph Extension A */ + [0x3ad2, 0x3ad2], /* CJK Ideograph Extension A */ + [0x3ad3, 0x3ad3], /* CJK Ideograph Extension A */ + [0x3ad4, 0x3ad4], /* CJK Ideograph Extension A */ + [0x3ad5, 0x3ad5], /* CJK Ideograph Extension A */ + [0x3ad6, 0x3ad6], /* CJK Ideograph Extension A */ + [0x3ad7, 0x3ad7], /* CJK Ideograph Extension A */ + [0x3ad8, 0x3ad8], /* CJK Ideograph Extension A */ + [0x3ad9, 0x3ad9], /* CJK Ideograph Extension A */ + [0x3ada, 0x3ada], /* CJK Ideograph Extension A */ + [0x3adb, 0x3adb], /* CJK Ideograph Extension A */ + [0x3adc, 0x3adc], /* CJK Ideograph Extension A */ + [0x3add, 0x3add], /* CJK Ideograph Extension A */ + [0x3ade, 0x3ade], /* CJK Ideograph Extension A */ + [0x3adf, 0x3adf], /* CJK Ideograph Extension A */ + [0x3ae0, 0x3ae0], /* CJK Ideograph Extension A */ + [0x3ae1, 0x3ae1], /* CJK Ideograph Extension A */ + [0x3ae2, 0x3ae2], /* CJK Ideograph Extension A */ + [0x3ae3, 0x3ae3], /* CJK Ideograph Extension A */ + [0x3ae4, 0x3ae4], /* CJK Ideograph Extension A */ + [0x3ae5, 0x3ae5], /* CJK Ideograph Extension A */ + [0x3ae6, 0x3ae6], /* CJK Ideograph Extension A */ + [0x3ae7, 0x3ae7], /* CJK Ideograph Extension A */ + [0x3ae8, 0x3ae8], /* CJK Ideograph Extension A */ + [0x3ae9, 0x3ae9], /* CJK Ideograph Extension A */ + [0x3aea, 0x3aea], /* CJK Ideograph Extension A */ + [0x3aeb, 0x3aeb], /* CJK Ideograph Extension A */ + [0x3aec, 0x3aec], /* CJK Ideograph Extension A */ + [0x3aed, 0x3aed], /* CJK Ideograph Extension A */ + [0x3aee, 0x3aee], /* CJK Ideograph Extension A */ + [0x3aef, 0x3aef], /* CJK Ideograph Extension A */ + [0x3af0, 0x3af0], /* CJK Ideograph Extension A */ + [0x3af1, 0x3af1], /* CJK Ideograph Extension A */ + [0x3af2, 0x3af2], /* CJK Ideograph Extension A */ + [0x3af3, 0x3af3], /* CJK Ideograph Extension A */ + [0x3af4, 0x3af4], /* CJK Ideograph Extension A */ + [0x3af5, 0x3af5], /* CJK Ideograph Extension A */ + [0x3af6, 0x3af6], /* CJK Ideograph Extension A */ + [0x3af7, 0x3af7], /* CJK Ideograph Extension A */ + [0x3af8, 0x3af8], /* CJK Ideograph Extension A */ + [0x3af9, 0x3af9], /* CJK Ideograph Extension A */ + [0x3afa, 0x3afa], /* CJK Ideograph Extension A */ + [0x3afb, 0x3afb], /* CJK Ideograph Extension A */ + [0x3afc, 0x3afc], /* CJK Ideograph Extension A */ + [0x3afd, 0x3afd], /* CJK Ideograph Extension A */ + [0x3afe, 0x3afe], /* CJK Ideograph Extension A */ + [0x3aff, 0x3aff], /* CJK Ideograph Extension A */ + [0x3b00, 0x3b00], /* CJK Ideograph Extension A */ + [0x3b01, 0x3b01], /* CJK Ideograph Extension A */ + [0x3b02, 0x3b02], /* CJK Ideograph Extension A */ + [0x3b03, 0x3b03], /* CJK Ideograph Extension A */ + [0x3b04, 0x3b04], /* CJK Ideograph Extension A */ + [0x3b05, 0x3b05], /* CJK Ideograph Extension A */ + [0x3b06, 0x3b06], /* CJK Ideograph Extension A */ + [0x3b07, 0x3b07], /* CJK Ideograph Extension A */ + [0x3b08, 0x3b08], /* CJK Ideograph Extension A */ + [0x3b09, 0x3b09], /* CJK Ideograph Extension A */ + [0x3b0a, 0x3b0a], /* CJK Ideograph Extension A */ + [0x3b0b, 0x3b0b], /* CJK Ideograph Extension A */ + [0x3b0c, 0x3b0c], /* CJK Ideograph Extension A */ + [0x3b0d, 0x3b0d], /* CJK Ideograph Extension A */ + [0x3b0e, 0x3b0e], /* CJK Ideograph Extension A */ + [0x3b0f, 0x3b0f], /* CJK Ideograph Extension A */ + [0x3b10, 0x3b10], /* CJK Ideograph Extension A */ + [0x3b11, 0x3b11], /* CJK Ideograph Extension A */ + [0x3b12, 0x3b12], /* CJK Ideograph Extension A */ + [0x3b13, 0x3b13], /* CJK Ideograph Extension A */ + [0x3b14, 0x3b14], /* CJK Ideograph Extension A */ + [0x3b15, 0x3b15], /* CJK Ideograph Extension A */ + [0x3b16, 0x3b16], /* CJK Ideograph Extension A */ + [0x3b17, 0x3b17], /* CJK Ideograph Extension A */ + [0x3b18, 0x3b18], /* CJK Ideograph Extension A */ + [0x3b19, 0x3b19], /* CJK Ideograph Extension A */ + [0x3b1a, 0x3b1a], /* CJK Ideograph Extension A */ + [0x3b1b, 0x3b1b], /* CJK Ideograph Extension A */ + [0x3b1c, 0x3b1c], /* CJK Ideograph Extension A */ + [0x3b1d, 0x3b1d], /* CJK Ideograph Extension A */ + [0x3b1e, 0x3b1e], /* CJK Ideograph Extension A */ + [0x3b1f, 0x3b1f], /* CJK Ideograph Extension A */ + [0x3b20, 0x3b20], /* CJK Ideograph Extension A */ + [0x3b21, 0x3b21], /* CJK Ideograph Extension A */ + [0x3b22, 0x3b22], /* CJK Ideograph Extension A */ + [0x3b23, 0x3b23], /* CJK Ideograph Extension A */ + [0x3b24, 0x3b24], /* CJK Ideograph Extension A */ + [0x3b25, 0x3b25], /* CJK Ideograph Extension A */ + [0x3b26, 0x3b26], /* CJK Ideograph Extension A */ + [0x3b27, 0x3b27], /* CJK Ideograph Extension A */ + [0x3b28, 0x3b28], /* CJK Ideograph Extension A */ + [0x3b29, 0x3b29], /* CJK Ideograph Extension A */ + [0x3b2a, 0x3b2a], /* CJK Ideograph Extension A */ + [0x3b2b, 0x3b2b], /* CJK Ideograph Extension A */ + [0x3b2c, 0x3b2c], /* CJK Ideograph Extension A */ + [0x3b2d, 0x3b2d], /* CJK Ideograph Extension A */ + [0x3b2e, 0x3b2e], /* CJK Ideograph Extension A */ + [0x3b2f, 0x3b2f], /* CJK Ideograph Extension A */ + [0x3b30, 0x3b30], /* CJK Ideograph Extension A */ + [0x3b31, 0x3b31], /* CJK Ideograph Extension A */ + [0x3b32, 0x3b32], /* CJK Ideograph Extension A */ + [0x3b33, 0x3b33], /* CJK Ideograph Extension A */ + [0x3b34, 0x3b34], /* CJK Ideograph Extension A */ + [0x3b35, 0x3b35], /* CJK Ideograph Extension A */ + [0x3b36, 0x3b36], /* CJK Ideograph Extension A */ + [0x3b37, 0x3b37], /* CJK Ideograph Extension A */ + [0x3b38, 0x3b38], /* CJK Ideograph Extension A */ + [0x3b39, 0x3b39], /* CJK Ideograph Extension A */ + [0x3b3a, 0x3b3a], /* CJK Ideograph Extension A */ + [0x3b3b, 0x3b3b], /* CJK Ideograph Extension A */ + [0x3b3c, 0x3b3c], /* CJK Ideograph Extension A */ + [0x3b3d, 0x3b3d], /* CJK Ideograph Extension A */ + [0x3b3e, 0x3b3e], /* CJK Ideograph Extension A */ + [0x3b3f, 0x3b3f], /* CJK Ideograph Extension A */ + [0x3b40, 0x3b40], /* CJK Ideograph Extension A */ + [0x3b41, 0x3b41], /* CJK Ideograph Extension A */ + [0x3b42, 0x3b42], /* CJK Ideograph Extension A */ + [0x3b43, 0x3b43], /* CJK Ideograph Extension A */ + [0x3b44, 0x3b44], /* CJK Ideograph Extension A */ + [0x3b45, 0x3b45], /* CJK Ideograph Extension A */ + [0x3b46, 0x3b46], /* CJK Ideograph Extension A */ + [0x3b47, 0x3b47], /* CJK Ideograph Extension A */ + [0x3b48, 0x3b48], /* CJK Ideograph Extension A */ + [0x3b49, 0x3b49], /* CJK Ideograph Extension A */ + [0x3b4a, 0x3b4a], /* CJK Ideograph Extension A */ + [0x3b4b, 0x3b4b], /* CJK Ideograph Extension A */ + [0x3b4c, 0x3b4c], /* CJK Ideograph Extension A */ + [0x3b4d, 0x3b4d], /* CJK Ideograph Extension A */ + [0x3b4e, 0x3b4e], /* CJK Ideograph Extension A */ + [0x3b4f, 0x3b4f], /* CJK Ideograph Extension A */ + [0x3b50, 0x3b50], /* CJK Ideograph Extension A */ + [0x3b51, 0x3b51], /* CJK Ideograph Extension A */ + [0x3b52, 0x3b52], /* CJK Ideograph Extension A */ + [0x3b53, 0x3b53], /* CJK Ideograph Extension A */ + [0x3b54, 0x3b54], /* CJK Ideograph Extension A */ + [0x3b55, 0x3b55], /* CJK Ideograph Extension A */ + [0x3b56, 0x3b56], /* CJK Ideograph Extension A */ + [0x3b57, 0x3b57], /* CJK Ideograph Extension A */ + [0x3b58, 0x3b58], /* CJK Ideograph Extension A */ + [0x3b59, 0x3b59], /* CJK Ideograph Extension A */ + [0x3b5a, 0x3b5a], /* CJK Ideograph Extension A */ + [0x3b5b, 0x3b5b], /* CJK Ideograph Extension A */ + [0x3b5c, 0x3b5c], /* CJK Ideograph Extension A */ + [0x3b5d, 0x3b5d], /* CJK Ideograph Extension A */ + [0x3b5e, 0x3b5e], /* CJK Ideograph Extension A */ + [0x3b5f, 0x3b5f], /* CJK Ideograph Extension A */ + [0x3b60, 0x3b60], /* CJK Ideograph Extension A */ + [0x3b61, 0x3b61], /* CJK Ideograph Extension A */ + [0x3b62, 0x3b62], /* CJK Ideograph Extension A */ + [0x3b63, 0x3b63], /* CJK Ideograph Extension A */ + [0x3b64, 0x3b64], /* CJK Ideograph Extension A */ + [0x3b65, 0x3b65], /* CJK Ideograph Extension A */ + [0x3b66, 0x3b66], /* CJK Ideograph Extension A */ + [0x3b67, 0x3b67], /* CJK Ideograph Extension A */ + [0x3b68, 0x3b68], /* CJK Ideograph Extension A */ + [0x3b69, 0x3b69], /* CJK Ideograph Extension A */ + [0x3b6a, 0x3b6a], /* CJK Ideograph Extension A */ + [0x3b6b, 0x3b6b], /* CJK Ideograph Extension A */ + [0x3b6c, 0x3b6c], /* CJK Ideograph Extension A */ + [0x3b6d, 0x3b6d], /* CJK Ideograph Extension A */ + [0x3b6e, 0x3b6e], /* CJK Ideograph Extension A */ + [0x3b6f, 0x3b6f], /* CJK Ideograph Extension A */ + [0x3b70, 0x3b70], /* CJK Ideograph Extension A */ + [0x3b71, 0x3b71], /* CJK Ideograph Extension A */ + [0x3b72, 0x3b72], /* CJK Ideograph Extension A */ + [0x3b73, 0x3b73], /* CJK Ideograph Extension A */ + [0x3b74, 0x3b74], /* CJK Ideograph Extension A */ + [0x3b75, 0x3b75], /* CJK Ideograph Extension A */ + [0x3b76, 0x3b76], /* CJK Ideograph Extension A */ + [0x3b77, 0x3b77], /* CJK Ideograph Extension A */ + [0x3b78, 0x3b78], /* CJK Ideograph Extension A */ + [0x3b79, 0x3b79], /* CJK Ideograph Extension A */ + [0x3b7a, 0x3b7a], /* CJK Ideograph Extension A */ + [0x3b7b, 0x3b7b], /* CJK Ideograph Extension A */ + [0x3b7c, 0x3b7c], /* CJK Ideograph Extension A */ + [0x3b7d, 0x3b7d], /* CJK Ideograph Extension A */ + [0x3b7e, 0x3b7e], /* CJK Ideograph Extension A */ + [0x3b7f, 0x3b7f], /* CJK Ideograph Extension A */ + [0x3b80, 0x3b80], /* CJK Ideograph Extension A */ + [0x3b81, 0x3b81], /* CJK Ideograph Extension A */ + [0x3b82, 0x3b82], /* CJK Ideograph Extension A */ + [0x3b83, 0x3b83], /* CJK Ideograph Extension A */ + [0x3b84, 0x3b84], /* CJK Ideograph Extension A */ + [0x3b85, 0x3b85], /* CJK Ideograph Extension A */ + [0x3b86, 0x3b86], /* CJK Ideograph Extension A */ + [0x3b87, 0x3b87], /* CJK Ideograph Extension A */ + [0x3b88, 0x3b88], /* CJK Ideograph Extension A */ + [0x3b89, 0x3b89], /* CJK Ideograph Extension A */ + [0x3b8a, 0x3b8a], /* CJK Ideograph Extension A */ + [0x3b8b, 0x3b8b], /* CJK Ideograph Extension A */ + [0x3b8c, 0x3b8c], /* CJK Ideograph Extension A */ + [0x3b8d, 0x3b8d], /* CJK Ideograph Extension A */ + [0x3b8e, 0x3b8e], /* CJK Ideograph Extension A */ + [0x3b8f, 0x3b8f], /* CJK Ideograph Extension A */ + [0x3b90, 0x3b90], /* CJK Ideograph Extension A */ + [0x3b91, 0x3b91], /* CJK Ideograph Extension A */ + [0x3b92, 0x3b92], /* CJK Ideograph Extension A */ + [0x3b93, 0x3b93], /* CJK Ideograph Extension A */ + [0x3b94, 0x3b94], /* CJK Ideograph Extension A */ + [0x3b95, 0x3b95], /* CJK Ideograph Extension A */ + [0x3b96, 0x3b96], /* CJK Ideograph Extension A */ + [0x3b97, 0x3b97], /* CJK Ideograph Extension A */ + [0x3b98, 0x3b98], /* CJK Ideograph Extension A */ + [0x3b99, 0x3b99], /* CJK Ideograph Extension A */ + [0x3b9a, 0x3b9a], /* CJK Ideograph Extension A */ + [0x3b9b, 0x3b9b], /* CJK Ideograph Extension A */ + [0x3b9c, 0x3b9c], /* CJK Ideograph Extension A */ + [0x3b9d, 0x3b9d], /* CJK Ideograph Extension A */ + [0x3b9e, 0x3b9e], /* CJK Ideograph Extension A */ + [0x3b9f, 0x3b9f], /* CJK Ideograph Extension A */ + [0x3ba0, 0x3ba0], /* CJK Ideograph Extension A */ + [0x3ba1, 0x3ba1], /* CJK Ideograph Extension A */ + [0x3ba2, 0x3ba2], /* CJK Ideograph Extension A */ + [0x3ba3, 0x3ba3], /* CJK Ideograph Extension A */ + [0x3ba4, 0x3ba4], /* CJK Ideograph Extension A */ + [0x3ba5, 0x3ba5], /* CJK Ideograph Extension A */ + [0x3ba6, 0x3ba6], /* CJK Ideograph Extension A */ + [0x3ba7, 0x3ba7], /* CJK Ideograph Extension A */ + [0x3ba8, 0x3ba8], /* CJK Ideograph Extension A */ + [0x3ba9, 0x3ba9], /* CJK Ideograph Extension A */ + [0x3baa, 0x3baa], /* CJK Ideograph Extension A */ + [0x3bab, 0x3bab], /* CJK Ideograph Extension A */ + [0x3bac, 0x3bac], /* CJK Ideograph Extension A */ + [0x3bad, 0x3bad], /* CJK Ideograph Extension A */ + [0x3bae, 0x3bae], /* CJK Ideograph Extension A */ + [0x3baf, 0x3baf], /* CJK Ideograph Extension A */ + [0x3bb0, 0x3bb0], /* CJK Ideograph Extension A */ + [0x3bb1, 0x3bb1], /* CJK Ideograph Extension A */ + [0x3bb2, 0x3bb2], /* CJK Ideograph Extension A */ + [0x3bb3, 0x3bb3], /* CJK Ideograph Extension A */ + [0x3bb4, 0x3bb4], /* CJK Ideograph Extension A */ + [0x3bb5, 0x3bb5], /* CJK Ideograph Extension A */ + [0x3bb6, 0x3bb6], /* CJK Ideograph Extension A */ + [0x3bb7, 0x3bb7], /* CJK Ideograph Extension A */ + [0x3bb8, 0x3bb8], /* CJK Ideograph Extension A */ + [0x3bb9, 0x3bb9], /* CJK Ideograph Extension A */ + [0x3bba, 0x3bba], /* CJK Ideograph Extension A */ + [0x3bbb, 0x3bbb], /* CJK Ideograph Extension A */ + [0x3bbc, 0x3bbc], /* CJK Ideograph Extension A */ + [0x3bbd, 0x3bbd], /* CJK Ideograph Extension A */ + [0x3bbe, 0x3bbe], /* CJK Ideograph Extension A */ + [0x3bbf, 0x3bbf], /* CJK Ideograph Extension A */ + [0x3bc0, 0x3bc0], /* CJK Ideograph Extension A */ + [0x3bc1, 0x3bc1], /* CJK Ideograph Extension A */ + [0x3bc2, 0x3bc2], /* CJK Ideograph Extension A */ + [0x3bc3, 0x3bc3], /* CJK Ideograph Extension A */ + [0x3bc4, 0x3bc4], /* CJK Ideograph Extension A */ + [0x3bc5, 0x3bc5], /* CJK Ideograph Extension A */ + [0x3bc6, 0x3bc6], /* CJK Ideograph Extension A */ + [0x3bc7, 0x3bc7], /* CJK Ideograph Extension A */ + [0x3bc8, 0x3bc8], /* CJK Ideograph Extension A */ + [0x3bc9, 0x3bc9], /* CJK Ideograph Extension A */ + [0x3bca, 0x3bca], /* CJK Ideograph Extension A */ + [0x3bcb, 0x3bcb], /* CJK Ideograph Extension A */ + [0x3bcc, 0x3bcc], /* CJK Ideograph Extension A */ + [0x3bcd, 0x3bcd], /* CJK Ideograph Extension A */ + [0x3bce, 0x3bce], /* CJK Ideograph Extension A */ + [0x3bcf, 0x3bcf], /* CJK Ideograph Extension A */ + [0x3bd0, 0x3bd0], /* CJK Ideograph Extension A */ + [0x3bd1, 0x3bd1], /* CJK Ideograph Extension A */ + [0x3bd2, 0x3bd2], /* CJK Ideograph Extension A */ + [0x3bd3, 0x3bd3], /* CJK Ideograph Extension A */ + [0x3bd4, 0x3bd4], /* CJK Ideograph Extension A */ + [0x3bd5, 0x3bd5], /* CJK Ideograph Extension A */ + [0x3bd6, 0x3bd6], /* CJK Ideograph Extension A */ + [0x3bd7, 0x3bd7], /* CJK Ideograph Extension A */ + [0x3bd8, 0x3bd8], /* CJK Ideograph Extension A */ + [0x3bd9, 0x3bd9], /* CJK Ideograph Extension A */ + [0x3bda, 0x3bda], /* CJK Ideograph Extension A */ + [0x3bdb, 0x3bdb], /* CJK Ideograph Extension A */ + [0x3bdc, 0x3bdc], /* CJK Ideograph Extension A */ + [0x3bdd, 0x3bdd], /* CJK Ideograph Extension A */ + [0x3bde, 0x3bde], /* CJK Ideograph Extension A */ + [0x3bdf, 0x3bdf], /* CJK Ideograph Extension A */ + [0x3be0, 0x3be0], /* CJK Ideograph Extension A */ + [0x3be1, 0x3be1], /* CJK Ideograph Extension A */ + [0x3be2, 0x3be2], /* CJK Ideograph Extension A */ + [0x3be3, 0x3be3], /* CJK Ideograph Extension A */ + [0x3be4, 0x3be4], /* CJK Ideograph Extension A */ + [0x3be5, 0x3be5], /* CJK Ideograph Extension A */ + [0x3be6, 0x3be6], /* CJK Ideograph Extension A */ + [0x3be7, 0x3be7], /* CJK Ideograph Extension A */ + [0x3be8, 0x3be8], /* CJK Ideograph Extension A */ + [0x3be9, 0x3be9], /* CJK Ideograph Extension A */ + [0x3bea, 0x3bea], /* CJK Ideograph Extension A */ + [0x3beb, 0x3beb], /* CJK Ideograph Extension A */ + [0x3bec, 0x3bec], /* CJK Ideograph Extension A */ + [0x3bed, 0x3bed], /* CJK Ideograph Extension A */ + [0x3bee, 0x3bee], /* CJK Ideograph Extension A */ + [0x3bef, 0x3bef], /* CJK Ideograph Extension A */ + [0x3bf0, 0x3bf0], /* CJK Ideograph Extension A */ + [0x3bf1, 0x3bf1], /* CJK Ideograph Extension A */ + [0x3bf2, 0x3bf2], /* CJK Ideograph Extension A */ + [0x3bf3, 0x3bf3], /* CJK Ideograph Extension A */ + [0x3bf4, 0x3bf4], /* CJK Ideograph Extension A */ + [0x3bf5, 0x3bf5], /* CJK Ideograph Extension A */ + [0x3bf6, 0x3bf6], /* CJK Ideograph Extension A */ + [0x3bf7, 0x3bf7], /* CJK Ideograph Extension A */ + [0x3bf8, 0x3bf8], /* CJK Ideograph Extension A */ + [0x3bf9, 0x3bf9], /* CJK Ideograph Extension A */ + [0x3bfa, 0x3bfa], /* CJK Ideograph Extension A */ + [0x3bfb, 0x3bfb], /* CJK Ideograph Extension A */ + [0x3bfc, 0x3bfc], /* CJK Ideograph Extension A */ + [0x3bfd, 0x3bfd], /* CJK Ideograph Extension A */ + [0x3bfe, 0x3bfe], /* CJK Ideograph Extension A */ + [0x3bff, 0x3bff], /* CJK Ideograph Extension A */ + [0x3c00, 0x3c00], /* CJK Ideograph Extension A */ + [0x3c01, 0x3c01], /* CJK Ideograph Extension A */ + [0x3c02, 0x3c02], /* CJK Ideograph Extension A */ + [0x3c03, 0x3c03], /* CJK Ideograph Extension A */ + [0x3c04, 0x3c04], /* CJK Ideograph Extension A */ + [0x3c05, 0x3c05], /* CJK Ideograph Extension A */ + [0x3c06, 0x3c06], /* CJK Ideograph Extension A */ + [0x3c07, 0x3c07], /* CJK Ideograph Extension A */ + [0x3c08, 0x3c08], /* CJK Ideograph Extension A */ + [0x3c09, 0x3c09], /* CJK Ideograph Extension A */ + [0x3c0a, 0x3c0a], /* CJK Ideograph Extension A */ + [0x3c0b, 0x3c0b], /* CJK Ideograph Extension A */ + [0x3c0c, 0x3c0c], /* CJK Ideograph Extension A */ + [0x3c0d, 0x3c0d], /* CJK Ideograph Extension A */ + [0x3c0e, 0x3c0e], /* CJK Ideograph Extension A */ + [0x3c0f, 0x3c0f], /* CJK Ideograph Extension A */ + [0x3c10, 0x3c10], /* CJK Ideograph Extension A */ + [0x3c11, 0x3c11], /* CJK Ideograph Extension A */ + [0x3c12, 0x3c12], /* CJK Ideograph Extension A */ + [0x3c13, 0x3c13], /* CJK Ideograph Extension A */ + [0x3c14, 0x3c14], /* CJK Ideograph Extension A */ + [0x3c15, 0x3c15], /* CJK Ideograph Extension A */ + [0x3c16, 0x3c16], /* CJK Ideograph Extension A */ + [0x3c17, 0x3c17], /* CJK Ideograph Extension A */ + [0x3c18, 0x3c18], /* CJK Ideograph Extension A */ + [0x3c19, 0x3c19], /* CJK Ideograph Extension A */ + [0x3c1a, 0x3c1a], /* CJK Ideograph Extension A */ + [0x3c1b, 0x3c1b], /* CJK Ideograph Extension A */ + [0x3c1c, 0x3c1c], /* CJK Ideograph Extension A */ + [0x3c1d, 0x3c1d], /* CJK Ideograph Extension A */ + [0x3c1e, 0x3c1e], /* CJK Ideograph Extension A */ + [0x3c1f, 0x3c1f], /* CJK Ideograph Extension A */ + [0x3c20, 0x3c20], /* CJK Ideograph Extension A */ + [0x3c21, 0x3c21], /* CJK Ideograph Extension A */ + [0x3c22, 0x3c22], /* CJK Ideograph Extension A */ + [0x3c23, 0x3c23], /* CJK Ideograph Extension A */ + [0x3c24, 0x3c24], /* CJK Ideograph Extension A */ + [0x3c25, 0x3c25], /* CJK Ideograph Extension A */ + [0x3c26, 0x3c26], /* CJK Ideograph Extension A */ + [0x3c27, 0x3c27], /* CJK Ideograph Extension A */ + [0x3c28, 0x3c28], /* CJK Ideograph Extension A */ + [0x3c29, 0x3c29], /* CJK Ideograph Extension A */ + [0x3c2a, 0x3c2a], /* CJK Ideograph Extension A */ + [0x3c2b, 0x3c2b], /* CJK Ideograph Extension A */ + [0x3c2c, 0x3c2c], /* CJK Ideograph Extension A */ + [0x3c2d, 0x3c2d], /* CJK Ideograph Extension A */ + [0x3c2e, 0x3c2e], /* CJK Ideograph Extension A */ + [0x3c2f, 0x3c2f], /* CJK Ideograph Extension A */ + [0x3c30, 0x3c30], /* CJK Ideograph Extension A */ + [0x3c31, 0x3c31], /* CJK Ideograph Extension A */ + [0x3c32, 0x3c32], /* CJK Ideograph Extension A */ + [0x3c33, 0x3c33], /* CJK Ideograph Extension A */ + [0x3c34, 0x3c34], /* CJK Ideograph Extension A */ + [0x3c35, 0x3c35], /* CJK Ideograph Extension A */ + [0x3c36, 0x3c36], /* CJK Ideograph Extension A */ + [0x3c37, 0x3c37], /* CJK Ideograph Extension A */ + [0x3c38, 0x3c38], /* CJK Ideograph Extension A */ + [0x3c39, 0x3c39], /* CJK Ideograph Extension A */ + [0x3c3a, 0x3c3a], /* CJK Ideograph Extension A */ + [0x3c3b, 0x3c3b], /* CJK Ideograph Extension A */ + [0x3c3c, 0x3c3c], /* CJK Ideograph Extension A */ + [0x3c3d, 0x3c3d], /* CJK Ideograph Extension A */ + [0x3c3e, 0x3c3e], /* CJK Ideograph Extension A */ + [0x3c3f, 0x3c3f], /* CJK Ideograph Extension A */ + [0x3c40, 0x3c40], /* CJK Ideograph Extension A */ + [0x3c41, 0x3c41], /* CJK Ideograph Extension A */ + [0x3c42, 0x3c42], /* CJK Ideograph Extension A */ + [0x3c43, 0x3c43], /* CJK Ideograph Extension A */ + [0x3c44, 0x3c44], /* CJK Ideograph Extension A */ + [0x3c45, 0x3c45], /* CJK Ideograph Extension A */ + [0x3c46, 0x3c46], /* CJK Ideograph Extension A */ + [0x3c47, 0x3c47], /* CJK Ideograph Extension A */ + [0x3c48, 0x3c48], /* CJK Ideograph Extension A */ + [0x3c49, 0x3c49], /* CJK Ideograph Extension A */ + [0x3c4a, 0x3c4a], /* CJK Ideograph Extension A */ + [0x3c4b, 0x3c4b], /* CJK Ideograph Extension A */ + [0x3c4c, 0x3c4c], /* CJK Ideograph Extension A */ + [0x3c4d, 0x3c4d], /* CJK Ideograph Extension A */ + [0x3c4e, 0x3c4e], /* CJK Ideograph Extension A */ + [0x3c4f, 0x3c4f], /* CJK Ideograph Extension A */ + [0x3c50, 0x3c50], /* CJK Ideograph Extension A */ + [0x3c51, 0x3c51], /* CJK Ideograph Extension A */ + [0x3c52, 0x3c52], /* CJK Ideograph Extension A */ + [0x3c53, 0x3c53], /* CJK Ideograph Extension A */ + [0x3c54, 0x3c54], /* CJK Ideograph Extension A */ + [0x3c55, 0x3c55], /* CJK Ideograph Extension A */ + [0x3c56, 0x3c56], /* CJK Ideograph Extension A */ + [0x3c57, 0x3c57], /* CJK Ideograph Extension A */ + [0x3c58, 0x3c58], /* CJK Ideograph Extension A */ + [0x3c59, 0x3c59], /* CJK Ideograph Extension A */ + [0x3c5a, 0x3c5a], /* CJK Ideograph Extension A */ + [0x3c5b, 0x3c5b], /* CJK Ideograph Extension A */ + [0x3c5c, 0x3c5c], /* CJK Ideograph Extension A */ + [0x3c5d, 0x3c5d], /* CJK Ideograph Extension A */ + [0x3c5e, 0x3c5e], /* CJK Ideograph Extension A */ + [0x3c5f, 0x3c5f], /* CJK Ideograph Extension A */ + [0x3c60, 0x3c60], /* CJK Ideograph Extension A */ + [0x3c61, 0x3c61], /* CJK Ideograph Extension A */ + [0x3c62, 0x3c62], /* CJK Ideograph Extension A */ + [0x3c63, 0x3c63], /* CJK Ideograph Extension A */ + [0x3c64, 0x3c64], /* CJK Ideograph Extension A */ + [0x3c65, 0x3c65], /* CJK Ideograph Extension A */ + [0x3c66, 0x3c66], /* CJK Ideograph Extension A */ + [0x3c67, 0x3c67], /* CJK Ideograph Extension A */ + [0x3c68, 0x3c68], /* CJK Ideograph Extension A */ + [0x3c69, 0x3c69], /* CJK Ideograph Extension A */ + [0x3c6a, 0x3c6a], /* CJK Ideograph Extension A */ + [0x3c6b, 0x3c6b], /* CJK Ideograph Extension A */ + [0x3c6c, 0x3c6c], /* CJK Ideograph Extension A */ + [0x3c6d, 0x3c6d], /* CJK Ideograph Extension A */ + [0x3c6e, 0x3c6e], /* CJK Ideograph Extension A */ + [0x3c6f, 0x3c6f], /* CJK Ideograph Extension A */ + [0x3c70, 0x3c70], /* CJK Ideograph Extension A */ + [0x3c71, 0x3c71], /* CJK Ideograph Extension A */ + [0x3c72, 0x3c72], /* CJK Ideograph Extension A */ + [0x3c73, 0x3c73], /* CJK Ideograph Extension A */ + [0x3c74, 0x3c74], /* CJK Ideograph Extension A */ + [0x3c75, 0x3c75], /* CJK Ideograph Extension A */ + [0x3c76, 0x3c76], /* CJK Ideograph Extension A */ + [0x3c77, 0x3c77], /* CJK Ideograph Extension A */ + [0x3c78, 0x3c78], /* CJK Ideograph Extension A */ + [0x3c79, 0x3c79], /* CJK Ideograph Extension A */ + [0x3c7a, 0x3c7a], /* CJK Ideograph Extension A */ + [0x3c7b, 0x3c7b], /* CJK Ideograph Extension A */ + [0x3c7c, 0x3c7c], /* CJK Ideograph Extension A */ + [0x3c7d, 0x3c7d], /* CJK Ideograph Extension A */ + [0x3c7e, 0x3c7e], /* CJK Ideograph Extension A */ + [0x3c7f, 0x3c7f], /* CJK Ideograph Extension A */ + [0x3c80, 0x3c80], /* CJK Ideograph Extension A */ + [0x3c81, 0x3c81], /* CJK Ideograph Extension A */ + [0x3c82, 0x3c82], /* CJK Ideograph Extension A */ + [0x3c83, 0x3c83], /* CJK Ideograph Extension A */ + [0x3c84, 0x3c84], /* CJK Ideograph Extension A */ + [0x3c85, 0x3c85], /* CJK Ideograph Extension A */ + [0x3c86, 0x3c86], /* CJK Ideograph Extension A */ + [0x3c87, 0x3c87], /* CJK Ideograph Extension A */ + [0x3c88, 0x3c88], /* CJK Ideograph Extension A */ + [0x3c89, 0x3c89], /* CJK Ideograph Extension A */ + [0x3c8a, 0x3c8a], /* CJK Ideograph Extension A */ + [0x3c8b, 0x3c8b], /* CJK Ideograph Extension A */ + [0x3c8c, 0x3c8c], /* CJK Ideograph Extension A */ + [0x3c8d, 0x3c8d], /* CJK Ideograph Extension A */ + [0x3c8e, 0x3c8e], /* CJK Ideograph Extension A */ + [0x3c8f, 0x3c8f], /* CJK Ideograph Extension A */ + [0x3c90, 0x3c90], /* CJK Ideograph Extension A */ + [0x3c91, 0x3c91], /* CJK Ideograph Extension A */ + [0x3c92, 0x3c92], /* CJK Ideograph Extension A */ + [0x3c93, 0x3c93], /* CJK Ideograph Extension A */ + [0x3c94, 0x3c94], /* CJK Ideograph Extension A */ + [0x3c95, 0x3c95], /* CJK Ideograph Extension A */ + [0x3c96, 0x3c96], /* CJK Ideograph Extension A */ + [0x3c97, 0x3c97], /* CJK Ideograph Extension A */ + [0x3c98, 0x3c98], /* CJK Ideograph Extension A */ + [0x3c99, 0x3c99], /* CJK Ideograph Extension A */ + [0x3c9a, 0x3c9a], /* CJK Ideograph Extension A */ + [0x3c9b, 0x3c9b], /* CJK Ideograph Extension A */ + [0x3c9c, 0x3c9c], /* CJK Ideograph Extension A */ + [0x3c9d, 0x3c9d], /* CJK Ideograph Extension A */ + [0x3c9e, 0x3c9e], /* CJK Ideograph Extension A */ + [0x3c9f, 0x3c9f], /* CJK Ideograph Extension A */ + [0x3ca0, 0x3ca0], /* CJK Ideograph Extension A */ + [0x3ca1, 0x3ca1], /* CJK Ideograph Extension A */ + [0x3ca2, 0x3ca2], /* CJK Ideograph Extension A */ + [0x3ca3, 0x3ca3], /* CJK Ideograph Extension A */ + [0x3ca4, 0x3ca4], /* CJK Ideograph Extension A */ + [0x3ca5, 0x3ca5], /* CJK Ideograph Extension A */ + [0x3ca6, 0x3ca6], /* CJK Ideograph Extension A */ + [0x3ca7, 0x3ca7], /* CJK Ideograph Extension A */ + [0x3ca8, 0x3ca8], /* CJK Ideograph Extension A */ + [0x3ca9, 0x3ca9], /* CJK Ideograph Extension A */ + [0x3caa, 0x3caa], /* CJK Ideograph Extension A */ + [0x3cab, 0x3cab], /* CJK Ideograph Extension A */ + [0x3cac, 0x3cac], /* CJK Ideograph Extension A */ + [0x3cad, 0x3cad], /* CJK Ideograph Extension A */ + [0x3cae, 0x3cae], /* CJK Ideograph Extension A */ + [0x3caf, 0x3caf], /* CJK Ideograph Extension A */ + [0x3cb0, 0x3cb0], /* CJK Ideograph Extension A */ + [0x3cb1, 0x3cb1], /* CJK Ideograph Extension A */ + [0x3cb2, 0x3cb2], /* CJK Ideograph Extension A */ + [0x3cb3, 0x3cb3], /* CJK Ideograph Extension A */ + [0x3cb4, 0x3cb4], /* CJK Ideograph Extension A */ + [0x3cb5, 0x3cb5], /* CJK Ideograph Extension A */ + [0x3cb6, 0x3cb6], /* CJK Ideograph Extension A */ + [0x3cb7, 0x3cb7], /* CJK Ideograph Extension A */ + [0x3cb8, 0x3cb8], /* CJK Ideograph Extension A */ + [0x3cb9, 0x3cb9], /* CJK Ideograph Extension A */ + [0x3cba, 0x3cba], /* CJK Ideograph Extension A */ + [0x3cbb, 0x3cbb], /* CJK Ideograph Extension A */ + [0x3cbc, 0x3cbc], /* CJK Ideograph Extension A */ + [0x3cbd, 0x3cbd], /* CJK Ideograph Extension A */ + [0x3cbe, 0x3cbe], /* CJK Ideograph Extension A */ + [0x3cbf, 0x3cbf], /* CJK Ideograph Extension A */ + [0x3cc0, 0x3cc0], /* CJK Ideograph Extension A */ + [0x3cc1, 0x3cc1], /* CJK Ideograph Extension A */ + [0x3cc2, 0x3cc2], /* CJK Ideograph Extension A */ + [0x3cc3, 0x3cc3], /* CJK Ideograph Extension A */ + [0x3cc4, 0x3cc4], /* CJK Ideograph Extension A */ + [0x3cc5, 0x3cc5], /* CJK Ideograph Extension A */ + [0x3cc6, 0x3cc6], /* CJK Ideograph Extension A */ + [0x3cc7, 0x3cc7], /* CJK Ideograph Extension A */ + [0x3cc8, 0x3cc8], /* CJK Ideograph Extension A */ + [0x3cc9, 0x3cc9], /* CJK Ideograph Extension A */ + [0x3cca, 0x3cca], /* CJK Ideograph Extension A */ + [0x3ccb, 0x3ccb], /* CJK Ideograph Extension A */ + [0x3ccc, 0x3ccc], /* CJK Ideograph Extension A */ + [0x3ccd, 0x3ccd], /* CJK Ideograph Extension A */ + [0x3cce, 0x3cce], /* CJK Ideograph Extension A */ + [0x3ccf, 0x3ccf], /* CJK Ideograph Extension A */ + [0x3cd0, 0x3cd0], /* CJK Ideograph Extension A */ + [0x3cd1, 0x3cd1], /* CJK Ideograph Extension A */ + [0x3cd2, 0x3cd2], /* CJK Ideograph Extension A */ + [0x3cd3, 0x3cd3], /* CJK Ideograph Extension A */ + [0x3cd4, 0x3cd4], /* CJK Ideograph Extension A */ + [0x3cd5, 0x3cd5], /* CJK Ideograph Extension A */ + [0x3cd6, 0x3cd6], /* CJK Ideograph Extension A */ + [0x3cd7, 0x3cd7], /* CJK Ideograph Extension A */ + [0x3cd8, 0x3cd8], /* CJK Ideograph Extension A */ + [0x3cd9, 0x3cd9], /* CJK Ideograph Extension A */ + [0x3cda, 0x3cda], /* CJK Ideograph Extension A */ + [0x3cdb, 0x3cdb], /* CJK Ideograph Extension A */ + [0x3cdc, 0x3cdc], /* CJK Ideograph Extension A */ + [0x3cdd, 0x3cdd], /* CJK Ideograph Extension A */ + [0x3cde, 0x3cde], /* CJK Ideograph Extension A */ + [0x3cdf, 0x3cdf], /* CJK Ideograph Extension A */ + [0x3ce0, 0x3ce0], /* CJK Ideograph Extension A */ + [0x3ce1, 0x3ce1], /* CJK Ideograph Extension A */ + [0x3ce2, 0x3ce2], /* CJK Ideograph Extension A */ + [0x3ce3, 0x3ce3], /* CJK Ideograph Extension A */ + [0x3ce4, 0x3ce4], /* CJK Ideograph Extension A */ + [0x3ce5, 0x3ce5], /* CJK Ideograph Extension A */ + [0x3ce6, 0x3ce6], /* CJK Ideograph Extension A */ + [0x3ce7, 0x3ce7], /* CJK Ideograph Extension A */ + [0x3ce8, 0x3ce8], /* CJK Ideograph Extension A */ + [0x3ce9, 0x3ce9], /* CJK Ideograph Extension A */ + [0x3cea, 0x3cea], /* CJK Ideograph Extension A */ + [0x3ceb, 0x3ceb], /* CJK Ideograph Extension A */ + [0x3cec, 0x3cec], /* CJK Ideograph Extension A */ + [0x3ced, 0x3ced], /* CJK Ideograph Extension A */ + [0x3cee, 0x3cee], /* CJK Ideograph Extension A */ + [0x3cef, 0x3cef], /* CJK Ideograph Extension A */ + [0x3cf0, 0x3cf0], /* CJK Ideograph Extension A */ + [0x3cf1, 0x3cf1], /* CJK Ideograph Extension A */ + [0x3cf2, 0x3cf2], /* CJK Ideograph Extension A */ + [0x3cf3, 0x3cf3], /* CJK Ideograph Extension A */ + [0x3cf4, 0x3cf4], /* CJK Ideograph Extension A */ + [0x3cf5, 0x3cf5], /* CJK Ideograph Extension A */ + [0x3cf6, 0x3cf6], /* CJK Ideograph Extension A */ + [0x3cf7, 0x3cf7], /* CJK Ideograph Extension A */ + [0x3cf8, 0x3cf8], /* CJK Ideograph Extension A */ + [0x3cf9, 0x3cf9], /* CJK Ideograph Extension A */ + [0x3cfa, 0x3cfa], /* CJK Ideograph Extension A */ + [0x3cfb, 0x3cfb], /* CJK Ideograph Extension A */ + [0x3cfc, 0x3cfc], /* CJK Ideograph Extension A */ + [0x3cfd, 0x3cfd], /* CJK Ideograph Extension A */ + [0x3cfe, 0x3cfe], /* CJK Ideograph Extension A */ + [0x3cff, 0x3cff], /* CJK Ideograph Extension A */ + [0x3d00, 0x3d00], /* CJK Ideograph Extension A */ + [0x3d01, 0x3d01], /* CJK Ideograph Extension A */ + [0x3d02, 0x3d02], /* CJK Ideograph Extension A */ + [0x3d03, 0x3d03], /* CJK Ideograph Extension A */ + [0x3d04, 0x3d04], /* CJK Ideograph Extension A */ + [0x3d05, 0x3d05], /* CJK Ideograph Extension A */ + [0x3d06, 0x3d06], /* CJK Ideograph Extension A */ + [0x3d07, 0x3d07], /* CJK Ideograph Extension A */ + [0x3d08, 0x3d08], /* CJK Ideograph Extension A */ + [0x3d09, 0x3d09], /* CJK Ideograph Extension A */ + [0x3d0a, 0x3d0a], /* CJK Ideograph Extension A */ + [0x3d0b, 0x3d0b], /* CJK Ideograph Extension A */ + [0x3d0c, 0x3d0c], /* CJK Ideograph Extension A */ + [0x3d0d, 0x3d0d], /* CJK Ideograph Extension A */ + [0x3d0e, 0x3d0e], /* CJK Ideograph Extension A */ + [0x3d0f, 0x3d0f], /* CJK Ideograph Extension A */ + [0x3d10, 0x3d10], /* CJK Ideograph Extension A */ + [0x3d11, 0x3d11], /* CJK Ideograph Extension A */ + [0x3d12, 0x3d12], /* CJK Ideograph Extension A */ + [0x3d13, 0x3d13], /* CJK Ideograph Extension A */ + [0x3d14, 0x3d14], /* CJK Ideograph Extension A */ + [0x3d15, 0x3d15], /* CJK Ideograph Extension A */ + [0x3d16, 0x3d16], /* CJK Ideograph Extension A */ + [0x3d17, 0x3d17], /* CJK Ideograph Extension A */ + [0x3d18, 0x3d18], /* CJK Ideograph Extension A */ + [0x3d19, 0x3d19], /* CJK Ideograph Extension A */ + [0x3d1a, 0x3d1a], /* CJK Ideograph Extension A */ + [0x3d1b, 0x3d1b], /* CJK Ideograph Extension A */ + [0x3d1c, 0x3d1c], /* CJK Ideograph Extension A */ + [0x3d1d, 0x3d1d], /* CJK Ideograph Extension A */ + [0x3d1e, 0x3d1e], /* CJK Ideograph Extension A */ + [0x3d1f, 0x3d1f], /* CJK Ideograph Extension A */ + [0x3d20, 0x3d20], /* CJK Ideograph Extension A */ + [0x3d21, 0x3d21], /* CJK Ideograph Extension A */ + [0x3d22, 0x3d22], /* CJK Ideograph Extension A */ + [0x3d23, 0x3d23], /* CJK Ideograph Extension A */ + [0x3d24, 0x3d24], /* CJK Ideograph Extension A */ + [0x3d25, 0x3d25], /* CJK Ideograph Extension A */ + [0x3d26, 0x3d26], /* CJK Ideograph Extension A */ + [0x3d27, 0x3d27], /* CJK Ideograph Extension A */ + [0x3d28, 0x3d28], /* CJK Ideograph Extension A */ + [0x3d29, 0x3d29], /* CJK Ideograph Extension A */ + [0x3d2a, 0x3d2a], /* CJK Ideograph Extension A */ + [0x3d2b, 0x3d2b], /* CJK Ideograph Extension A */ + [0x3d2c, 0x3d2c], /* CJK Ideograph Extension A */ + [0x3d2d, 0x3d2d], /* CJK Ideograph Extension A */ + [0x3d2e, 0x3d2e], /* CJK Ideograph Extension A */ + [0x3d2f, 0x3d2f], /* CJK Ideograph Extension A */ + [0x3d30, 0x3d30], /* CJK Ideograph Extension A */ + [0x3d31, 0x3d31], /* CJK Ideograph Extension A */ + [0x3d32, 0x3d32], /* CJK Ideograph Extension A */ + [0x3d33, 0x3d33], /* CJK Ideograph Extension A */ + [0x3d34, 0x3d34], /* CJK Ideograph Extension A */ + [0x3d35, 0x3d35], /* CJK Ideograph Extension A */ + [0x3d36, 0x3d36], /* CJK Ideograph Extension A */ + [0x3d37, 0x3d37], /* CJK Ideograph Extension A */ + [0x3d38, 0x3d38], /* CJK Ideograph Extension A */ + [0x3d39, 0x3d39], /* CJK Ideograph Extension A */ + [0x3d3a, 0x3d3a], /* CJK Ideograph Extension A */ + [0x3d3b, 0x3d3b], /* CJK Ideograph Extension A */ + [0x3d3c, 0x3d3c], /* CJK Ideograph Extension A */ + [0x3d3d, 0x3d3d], /* CJK Ideograph Extension A */ + [0x3d3e, 0x3d3e], /* CJK Ideograph Extension A */ + [0x3d3f, 0x3d3f], /* CJK Ideograph Extension A */ + [0x3d40, 0x3d40], /* CJK Ideograph Extension A */ + [0x3d41, 0x3d41], /* CJK Ideograph Extension A */ + [0x3d42, 0x3d42], /* CJK Ideograph Extension A */ + [0x3d43, 0x3d43], /* CJK Ideograph Extension A */ + [0x3d44, 0x3d44], /* CJK Ideograph Extension A */ + [0x3d45, 0x3d45], /* CJK Ideograph Extension A */ + [0x3d46, 0x3d46], /* CJK Ideograph Extension A */ + [0x3d47, 0x3d47], /* CJK Ideograph Extension A */ + [0x3d48, 0x3d48], /* CJK Ideograph Extension A */ + [0x3d49, 0x3d49], /* CJK Ideograph Extension A */ + [0x3d4a, 0x3d4a], /* CJK Ideograph Extension A */ + [0x3d4b, 0x3d4b], /* CJK Ideograph Extension A */ + [0x3d4c, 0x3d4c], /* CJK Ideograph Extension A */ + [0x3d4d, 0x3d4d], /* CJK Ideograph Extension A */ + [0x3d4e, 0x3d4e], /* CJK Ideograph Extension A */ + [0x3d4f, 0x3d4f], /* CJK Ideograph Extension A */ + [0x3d50, 0x3d50], /* CJK Ideograph Extension A */ + [0x3d51, 0x3d51], /* CJK Ideograph Extension A */ + [0x3d52, 0x3d52], /* CJK Ideograph Extension A */ + [0x3d53, 0x3d53], /* CJK Ideograph Extension A */ + [0x3d54, 0x3d54], /* CJK Ideograph Extension A */ + [0x3d55, 0x3d55], /* CJK Ideograph Extension A */ + [0x3d56, 0x3d56], /* CJK Ideograph Extension A */ + [0x3d57, 0x3d57], /* CJK Ideograph Extension A */ + [0x3d58, 0x3d58], /* CJK Ideograph Extension A */ + [0x3d59, 0x3d59], /* CJK Ideograph Extension A */ + [0x3d5a, 0x3d5a], /* CJK Ideograph Extension A */ + [0x3d5b, 0x3d5b], /* CJK Ideograph Extension A */ + [0x3d5c, 0x3d5c], /* CJK Ideograph Extension A */ + [0x3d5d, 0x3d5d], /* CJK Ideograph Extension A */ + [0x3d5e, 0x3d5e], /* CJK Ideograph Extension A */ + [0x3d5f, 0x3d5f], /* CJK Ideograph Extension A */ + [0x3d60, 0x3d60], /* CJK Ideograph Extension A */ + [0x3d61, 0x3d61], /* CJK Ideograph Extension A */ + [0x3d62, 0x3d62], /* CJK Ideograph Extension A */ + [0x3d63, 0x3d63], /* CJK Ideograph Extension A */ + [0x3d64, 0x3d64], /* CJK Ideograph Extension A */ + [0x3d65, 0x3d65], /* CJK Ideograph Extension A */ + [0x3d66, 0x3d66], /* CJK Ideograph Extension A */ + [0x3d67, 0x3d67], /* CJK Ideograph Extension A */ + [0x3d68, 0x3d68], /* CJK Ideograph Extension A */ + [0x3d69, 0x3d69], /* CJK Ideograph Extension A */ + [0x3d6a, 0x3d6a], /* CJK Ideograph Extension A */ + [0x3d6b, 0x3d6b], /* CJK Ideograph Extension A */ + [0x3d6c, 0x3d6c], /* CJK Ideograph Extension A */ + [0x3d6d, 0x3d6d], /* CJK Ideograph Extension A */ + [0x3d6e, 0x3d6e], /* CJK Ideograph Extension A */ + [0x3d6f, 0x3d6f], /* CJK Ideograph Extension A */ + [0x3d70, 0x3d70], /* CJK Ideograph Extension A */ + [0x3d71, 0x3d71], /* CJK Ideograph Extension A */ + [0x3d72, 0x3d72], /* CJK Ideograph Extension A */ + [0x3d73, 0x3d73], /* CJK Ideograph Extension A */ + [0x3d74, 0x3d74], /* CJK Ideograph Extension A */ + [0x3d75, 0x3d75], /* CJK Ideograph Extension A */ + [0x3d76, 0x3d76], /* CJK Ideograph Extension A */ + [0x3d77, 0x3d77], /* CJK Ideograph Extension A */ + [0x3d78, 0x3d78], /* CJK Ideograph Extension A */ + [0x3d79, 0x3d79], /* CJK Ideograph Extension A */ + [0x3d7a, 0x3d7a], /* CJK Ideograph Extension A */ + [0x3d7b, 0x3d7b], /* CJK Ideograph Extension A */ + [0x3d7c, 0x3d7c], /* CJK Ideograph Extension A */ + [0x3d7d, 0x3d7d], /* CJK Ideograph Extension A */ + [0x3d7e, 0x3d7e], /* CJK Ideograph Extension A */ + [0x3d7f, 0x3d7f], /* CJK Ideograph Extension A */ + [0x3d80, 0x3d80], /* CJK Ideograph Extension A */ + [0x3d81, 0x3d81], /* CJK Ideograph Extension A */ + [0x3d82, 0x3d82], /* CJK Ideograph Extension A */ + [0x3d83, 0x3d83], /* CJK Ideograph Extension A */ + [0x3d84, 0x3d84], /* CJK Ideograph Extension A */ + [0x3d85, 0x3d85], /* CJK Ideograph Extension A */ + [0x3d86, 0x3d86], /* CJK Ideograph Extension A */ + [0x3d87, 0x3d87], /* CJK Ideograph Extension A */ + [0x3d88, 0x3d88], /* CJK Ideograph Extension A */ + [0x3d89, 0x3d89], /* CJK Ideograph Extension A */ + [0x3d8a, 0x3d8a], /* CJK Ideograph Extension A */ + [0x3d8b, 0x3d8b], /* CJK Ideograph Extension A */ + [0x3d8c, 0x3d8c], /* CJK Ideograph Extension A */ + [0x3d8d, 0x3d8d], /* CJK Ideograph Extension A */ + [0x3d8e, 0x3d8e], /* CJK Ideograph Extension A */ + [0x3d8f, 0x3d8f], /* CJK Ideograph Extension A */ + [0x3d90, 0x3d90], /* CJK Ideograph Extension A */ + [0x3d91, 0x3d91], /* CJK Ideograph Extension A */ + [0x3d92, 0x3d92], /* CJK Ideograph Extension A */ + [0x3d93, 0x3d93], /* CJK Ideograph Extension A */ + [0x3d94, 0x3d94], /* CJK Ideograph Extension A */ + [0x3d95, 0x3d95], /* CJK Ideograph Extension A */ + [0x3d96, 0x3d96], /* CJK Ideograph Extension A */ + [0x3d97, 0x3d97], /* CJK Ideograph Extension A */ + [0x3d98, 0x3d98], /* CJK Ideograph Extension A */ + [0x3d99, 0x3d99], /* CJK Ideograph Extension A */ + [0x3d9a, 0x3d9a], /* CJK Ideograph Extension A */ + [0x3d9b, 0x3d9b], /* CJK Ideograph Extension A */ + [0x3d9c, 0x3d9c], /* CJK Ideograph Extension A */ + [0x3d9d, 0x3d9d], /* CJK Ideograph Extension A */ + [0x3d9e, 0x3d9e], /* CJK Ideograph Extension A */ + [0x3d9f, 0x3d9f], /* CJK Ideograph Extension A */ + [0x3da0, 0x3da0], /* CJK Ideograph Extension A */ + [0x3da1, 0x3da1], /* CJK Ideograph Extension A */ + [0x3da2, 0x3da2], /* CJK Ideograph Extension A */ + [0x3da3, 0x3da3], /* CJK Ideograph Extension A */ + [0x3da4, 0x3da4], /* CJK Ideograph Extension A */ + [0x3da5, 0x3da5], /* CJK Ideograph Extension A */ + [0x3da6, 0x3da6], /* CJK Ideograph Extension A */ + [0x3da7, 0x3da7], /* CJK Ideograph Extension A */ + [0x3da8, 0x3da8], /* CJK Ideograph Extension A */ + [0x3da9, 0x3da9], /* CJK Ideograph Extension A */ + [0x3daa, 0x3daa], /* CJK Ideograph Extension A */ + [0x3dab, 0x3dab], /* CJK Ideograph Extension A */ + [0x3dac, 0x3dac], /* CJK Ideograph Extension A */ + [0x3dad, 0x3dad], /* CJK Ideograph Extension A */ + [0x3dae, 0x3dae], /* CJK Ideograph Extension A */ + [0x3daf, 0x3daf], /* CJK Ideograph Extension A */ + [0x3db0, 0x3db0], /* CJK Ideograph Extension A */ + [0x3db1, 0x3db1], /* CJK Ideograph Extension A */ + [0x3db2, 0x3db2], /* CJK Ideograph Extension A */ + [0x3db3, 0x3db3], /* CJK Ideograph Extension A */ + [0x3db4, 0x3db4], /* CJK Ideograph Extension A */ + [0x3db5, 0x3db5], /* CJK Ideograph Extension A */ + [0x3db6, 0x3db6], /* CJK Ideograph Extension A */ + [0x3db7, 0x3db7], /* CJK Ideograph Extension A */ + [0x3db8, 0x3db8], /* CJK Ideograph Extension A */ + [0x3db9, 0x3db9], /* CJK Ideograph Extension A */ + [0x3dba, 0x3dba], /* CJK Ideograph Extension A */ + [0x3dbb, 0x3dbb], /* CJK Ideograph Extension A */ + [0x3dbc, 0x3dbc], /* CJK Ideograph Extension A */ + [0x3dbd, 0x3dbd], /* CJK Ideograph Extension A */ + [0x3dbe, 0x3dbe], /* CJK Ideograph Extension A */ + [0x3dbf, 0x3dbf], /* CJK Ideograph Extension A */ + [0x3dc0, 0x3dc0], /* CJK Ideograph Extension A */ + [0x3dc1, 0x3dc1], /* CJK Ideograph Extension A */ + [0x3dc2, 0x3dc2], /* CJK Ideograph Extension A */ + [0x3dc3, 0x3dc3], /* CJK Ideograph Extension A */ + [0x3dc4, 0x3dc4], /* CJK Ideograph Extension A */ + [0x3dc5, 0x3dc5], /* CJK Ideograph Extension A */ + [0x3dc6, 0x3dc6], /* CJK Ideograph Extension A */ + [0x3dc7, 0x3dc7], /* CJK Ideograph Extension A */ + [0x3dc8, 0x3dc8], /* CJK Ideograph Extension A */ + [0x3dc9, 0x3dc9], /* CJK Ideograph Extension A */ + [0x3dca, 0x3dca], /* CJK Ideograph Extension A */ + [0x3dcb, 0x3dcb], /* CJK Ideograph Extension A */ + [0x3dcc, 0x3dcc], /* CJK Ideograph Extension A */ + [0x3dcd, 0x3dcd], /* CJK Ideograph Extension A */ + [0x3dce, 0x3dce], /* CJK Ideograph Extension A */ + [0x3dcf, 0x3dcf], /* CJK Ideograph Extension A */ + [0x3dd0, 0x3dd0], /* CJK Ideograph Extension A */ + [0x3dd1, 0x3dd1], /* CJK Ideograph Extension A */ + [0x3dd2, 0x3dd2], /* CJK Ideograph Extension A */ + [0x3dd3, 0x3dd3], /* CJK Ideograph Extension A */ + [0x3dd4, 0x3dd4], /* CJK Ideograph Extension A */ + [0x3dd5, 0x3dd5], /* CJK Ideograph Extension A */ + [0x3dd6, 0x3dd6], /* CJK Ideograph Extension A */ + [0x3dd7, 0x3dd7], /* CJK Ideograph Extension A */ + [0x3dd8, 0x3dd8], /* CJK Ideograph Extension A */ + [0x3dd9, 0x3dd9], /* CJK Ideograph Extension A */ + [0x3dda, 0x3dda], /* CJK Ideograph Extension A */ + [0x3ddb, 0x3ddb], /* CJK Ideograph Extension A */ + [0x3ddc, 0x3ddc], /* CJK Ideograph Extension A */ + [0x3ddd, 0x3ddd], /* CJK Ideograph Extension A */ + [0x3dde, 0x3dde], /* CJK Ideograph Extension A */ + [0x3ddf, 0x3ddf], /* CJK Ideograph Extension A */ + [0x3de0, 0x3de0], /* CJK Ideograph Extension A */ + [0x3de1, 0x3de1], /* CJK Ideograph Extension A */ + [0x3de2, 0x3de2], /* CJK Ideograph Extension A */ + [0x3de3, 0x3de3], /* CJK Ideograph Extension A */ + [0x3de4, 0x3de4], /* CJK Ideograph Extension A */ + [0x3de5, 0x3de5], /* CJK Ideograph Extension A */ + [0x3de6, 0x3de6], /* CJK Ideograph Extension A */ + [0x3de7, 0x3de7], /* CJK Ideograph Extension A */ + [0x3de8, 0x3de8], /* CJK Ideograph Extension A */ + [0x3de9, 0x3de9], /* CJK Ideograph Extension A */ + [0x3dea, 0x3dea], /* CJK Ideograph Extension A */ + [0x3deb, 0x3deb], /* CJK Ideograph Extension A */ + [0x3dec, 0x3dec], /* CJK Ideograph Extension A */ + [0x3ded, 0x3ded], /* CJK Ideograph Extension A */ + [0x3dee, 0x3dee], /* CJK Ideograph Extension A */ + [0x3def, 0x3def], /* CJK Ideograph Extension A */ + [0x3df0, 0x3df0], /* CJK Ideograph Extension A */ + [0x3df1, 0x3df1], /* CJK Ideograph Extension A */ + [0x3df2, 0x3df2], /* CJK Ideograph Extension A */ + [0x3df3, 0x3df3], /* CJK Ideograph Extension A */ + [0x3df4, 0x3df4], /* CJK Ideograph Extension A */ + [0x3df5, 0x3df5], /* CJK Ideograph Extension A */ + [0x3df6, 0x3df6], /* CJK Ideograph Extension A */ + [0x3df7, 0x3df7], /* CJK Ideograph Extension A */ + [0x3df8, 0x3df8], /* CJK Ideograph Extension A */ + [0x3df9, 0x3df9], /* CJK Ideograph Extension A */ + [0x3dfa, 0x3dfa], /* CJK Ideograph Extension A */ + [0x3dfb, 0x3dfb], /* CJK Ideograph Extension A */ + [0x3dfc, 0x3dfc], /* CJK Ideograph Extension A */ + [0x3dfd, 0x3dfd], /* CJK Ideograph Extension A */ + [0x3dfe, 0x3dfe], /* CJK Ideograph Extension A */ + [0x3dff, 0x3dff], /* CJK Ideograph Extension A */ + [0x3e00, 0x3e00], /* CJK Ideograph Extension A */ + [0x3e01, 0x3e01], /* CJK Ideograph Extension A */ + [0x3e02, 0x3e02], /* CJK Ideograph Extension A */ + [0x3e03, 0x3e03], /* CJK Ideograph Extension A */ + [0x3e04, 0x3e04], /* CJK Ideograph Extension A */ + [0x3e05, 0x3e05], /* CJK Ideograph Extension A */ + [0x3e06, 0x3e06], /* CJK Ideograph Extension A */ + [0x3e07, 0x3e07], /* CJK Ideograph Extension A */ + [0x3e08, 0x3e08], /* CJK Ideograph Extension A */ + [0x3e09, 0x3e09], /* CJK Ideograph Extension A */ + [0x3e0a, 0x3e0a], /* CJK Ideograph Extension A */ + [0x3e0b, 0x3e0b], /* CJK Ideograph Extension A */ + [0x3e0c, 0x3e0c], /* CJK Ideograph Extension A */ + [0x3e0d, 0x3e0d], /* CJK Ideograph Extension A */ + [0x3e0e, 0x3e0e], /* CJK Ideograph Extension A */ + [0x3e0f, 0x3e0f], /* CJK Ideograph Extension A */ + [0x3e10, 0x3e10], /* CJK Ideograph Extension A */ + [0x3e11, 0x3e11], /* CJK Ideograph Extension A */ + [0x3e12, 0x3e12], /* CJK Ideograph Extension A */ + [0x3e13, 0x3e13], /* CJK Ideograph Extension A */ + [0x3e14, 0x3e14], /* CJK Ideograph Extension A */ + [0x3e15, 0x3e15], /* CJK Ideograph Extension A */ + [0x3e16, 0x3e16], /* CJK Ideograph Extension A */ + [0x3e17, 0x3e17], /* CJK Ideograph Extension A */ + [0x3e18, 0x3e18], /* CJK Ideograph Extension A */ + [0x3e19, 0x3e19], /* CJK Ideograph Extension A */ + [0x3e1a, 0x3e1a], /* CJK Ideograph Extension A */ + [0x3e1b, 0x3e1b], /* CJK Ideograph Extension A */ + [0x3e1c, 0x3e1c], /* CJK Ideograph Extension A */ + [0x3e1d, 0x3e1d], /* CJK Ideograph Extension A */ + [0x3e1e, 0x3e1e], /* CJK Ideograph Extension A */ + [0x3e1f, 0x3e1f], /* CJK Ideograph Extension A */ + [0x3e20, 0x3e20], /* CJK Ideograph Extension A */ + [0x3e21, 0x3e21], /* CJK Ideograph Extension A */ + [0x3e22, 0x3e22], /* CJK Ideograph Extension A */ + [0x3e23, 0x3e23], /* CJK Ideograph Extension A */ + [0x3e24, 0x3e24], /* CJK Ideograph Extension A */ + [0x3e25, 0x3e25], /* CJK Ideograph Extension A */ + [0x3e26, 0x3e26], /* CJK Ideograph Extension A */ + [0x3e27, 0x3e27], /* CJK Ideograph Extension A */ + [0x3e28, 0x3e28], /* CJK Ideograph Extension A */ + [0x3e29, 0x3e29], /* CJK Ideograph Extension A */ + [0x3e2a, 0x3e2a], /* CJK Ideograph Extension A */ + [0x3e2b, 0x3e2b], /* CJK Ideograph Extension A */ + [0x3e2c, 0x3e2c], /* CJK Ideograph Extension A */ + [0x3e2d, 0x3e2d], /* CJK Ideograph Extension A */ + [0x3e2e, 0x3e2e], /* CJK Ideograph Extension A */ + [0x3e2f, 0x3e2f], /* CJK Ideograph Extension A */ + [0x3e30, 0x3e30], /* CJK Ideograph Extension A */ + [0x3e31, 0x3e31], /* CJK Ideograph Extension A */ + [0x3e32, 0x3e32], /* CJK Ideograph Extension A */ + [0x3e33, 0x3e33], /* CJK Ideograph Extension A */ + [0x3e34, 0x3e34], /* CJK Ideograph Extension A */ + [0x3e35, 0x3e35], /* CJK Ideograph Extension A */ + [0x3e36, 0x3e36], /* CJK Ideograph Extension A */ + [0x3e37, 0x3e37], /* CJK Ideograph Extension A */ + [0x3e38, 0x3e38], /* CJK Ideograph Extension A */ + [0x3e39, 0x3e39], /* CJK Ideograph Extension A */ + [0x3e3a, 0x3e3a], /* CJK Ideograph Extension A */ + [0x3e3b, 0x3e3b], /* CJK Ideograph Extension A */ + [0x3e3c, 0x3e3c], /* CJK Ideograph Extension A */ + [0x3e3d, 0x3e3d], /* CJK Ideograph Extension A */ + [0x3e3e, 0x3e3e], /* CJK Ideograph Extension A */ + [0x3e3f, 0x3e3f], /* CJK Ideograph Extension A */ + [0x3e40, 0x3e40], /* CJK Ideograph Extension A */ + [0x3e41, 0x3e41], /* CJK Ideograph Extension A */ + [0x3e42, 0x3e42], /* CJK Ideograph Extension A */ + [0x3e43, 0x3e43], /* CJK Ideograph Extension A */ + [0x3e44, 0x3e44], /* CJK Ideograph Extension A */ + [0x3e45, 0x3e45], /* CJK Ideograph Extension A */ + [0x3e46, 0x3e46], /* CJK Ideograph Extension A */ + [0x3e47, 0x3e47], /* CJK Ideograph Extension A */ + [0x3e48, 0x3e48], /* CJK Ideograph Extension A */ + [0x3e49, 0x3e49], /* CJK Ideograph Extension A */ + [0x3e4a, 0x3e4a], /* CJK Ideograph Extension A */ + [0x3e4b, 0x3e4b], /* CJK Ideograph Extension A */ + [0x3e4c, 0x3e4c], /* CJK Ideograph Extension A */ + [0x3e4d, 0x3e4d], /* CJK Ideograph Extension A */ + [0x3e4e, 0x3e4e], /* CJK Ideograph Extension A */ + [0x3e4f, 0x3e4f], /* CJK Ideograph Extension A */ + [0x3e50, 0x3e50], /* CJK Ideograph Extension A */ + [0x3e51, 0x3e51], /* CJK Ideograph Extension A */ + [0x3e52, 0x3e52], /* CJK Ideograph Extension A */ + [0x3e53, 0x3e53], /* CJK Ideograph Extension A */ + [0x3e54, 0x3e54], /* CJK Ideograph Extension A */ + [0x3e55, 0x3e55], /* CJK Ideograph Extension A */ + [0x3e56, 0x3e56], /* CJK Ideograph Extension A */ + [0x3e57, 0x3e57], /* CJK Ideograph Extension A */ + [0x3e58, 0x3e58], /* CJK Ideograph Extension A */ + [0x3e59, 0x3e59], /* CJK Ideograph Extension A */ + [0x3e5a, 0x3e5a], /* CJK Ideograph Extension A */ + [0x3e5b, 0x3e5b], /* CJK Ideograph Extension A */ + [0x3e5c, 0x3e5c], /* CJK Ideograph Extension A */ + [0x3e5d, 0x3e5d], /* CJK Ideograph Extension A */ + [0x3e5e, 0x3e5e], /* CJK Ideograph Extension A */ + [0x3e5f, 0x3e5f], /* CJK Ideograph Extension A */ + [0x3e60, 0x3e60], /* CJK Ideograph Extension A */ + [0x3e61, 0x3e61], /* CJK Ideograph Extension A */ + [0x3e62, 0x3e62], /* CJK Ideograph Extension A */ + [0x3e63, 0x3e63], /* CJK Ideograph Extension A */ + [0x3e64, 0x3e64], /* CJK Ideograph Extension A */ + [0x3e65, 0x3e65], /* CJK Ideograph Extension A */ + [0x3e66, 0x3e66], /* CJK Ideograph Extension A */ + [0x3e67, 0x3e67], /* CJK Ideograph Extension A */ + [0x3e68, 0x3e68], /* CJK Ideograph Extension A */ + [0x3e69, 0x3e69], /* CJK Ideograph Extension A */ + [0x3e6a, 0x3e6a], /* CJK Ideograph Extension A */ + [0x3e6b, 0x3e6b], /* CJK Ideograph Extension A */ + [0x3e6c, 0x3e6c], /* CJK Ideograph Extension A */ + [0x3e6d, 0x3e6d], /* CJK Ideograph Extension A */ + [0x3e6e, 0x3e6e], /* CJK Ideograph Extension A */ + [0x3e6f, 0x3e6f], /* CJK Ideograph Extension A */ + [0x3e70, 0x3e70], /* CJK Ideograph Extension A */ + [0x3e71, 0x3e71], /* CJK Ideograph Extension A */ + [0x3e72, 0x3e72], /* CJK Ideograph Extension A */ + [0x3e73, 0x3e73], /* CJK Ideograph Extension A */ + [0x3e74, 0x3e74], /* CJK Ideograph Extension A */ + [0x3e75, 0x3e75], /* CJK Ideograph Extension A */ + [0x3e76, 0x3e76], /* CJK Ideograph Extension A */ + [0x3e77, 0x3e77], /* CJK Ideograph Extension A */ + [0x3e78, 0x3e78], /* CJK Ideograph Extension A */ + [0x3e79, 0x3e79], /* CJK Ideograph Extension A */ + [0x3e7a, 0x3e7a], /* CJK Ideograph Extension A */ + [0x3e7b, 0x3e7b], /* CJK Ideograph Extension A */ + [0x3e7c, 0x3e7c], /* CJK Ideograph Extension A */ + [0x3e7d, 0x3e7d], /* CJK Ideograph Extension A */ + [0x3e7e, 0x3e7e], /* CJK Ideograph Extension A */ + [0x3e7f, 0x3e7f], /* CJK Ideograph Extension A */ + [0x3e80, 0x3e80], /* CJK Ideograph Extension A */ + [0x3e81, 0x3e81], /* CJK Ideograph Extension A */ + [0x3e82, 0x3e82], /* CJK Ideograph Extension A */ + [0x3e83, 0x3e83], /* CJK Ideograph Extension A */ + [0x3e84, 0x3e84], /* CJK Ideograph Extension A */ + [0x3e85, 0x3e85], /* CJK Ideograph Extension A */ + [0x3e86, 0x3e86], /* CJK Ideograph Extension A */ + [0x3e87, 0x3e87], /* CJK Ideograph Extension A */ + [0x3e88, 0x3e88], /* CJK Ideograph Extension A */ + [0x3e89, 0x3e89], /* CJK Ideograph Extension A */ + [0x3e8a, 0x3e8a], /* CJK Ideograph Extension A */ + [0x3e8b, 0x3e8b], /* CJK Ideograph Extension A */ + [0x3e8c, 0x3e8c], /* CJK Ideograph Extension A */ + [0x3e8d, 0x3e8d], /* CJK Ideograph Extension A */ + [0x3e8e, 0x3e8e], /* CJK Ideograph Extension A */ + [0x3e8f, 0x3e8f], /* CJK Ideograph Extension A */ + [0x3e90, 0x3e90], /* CJK Ideograph Extension A */ + [0x3e91, 0x3e91], /* CJK Ideograph Extension A */ + [0x3e92, 0x3e92], /* CJK Ideograph Extension A */ + [0x3e93, 0x3e93], /* CJK Ideograph Extension A */ + [0x3e94, 0x3e94], /* CJK Ideograph Extension A */ + [0x3e95, 0x3e95], /* CJK Ideograph Extension A */ + [0x3e96, 0x3e96], /* CJK Ideograph Extension A */ + [0x3e97, 0x3e97], /* CJK Ideograph Extension A */ + [0x3e98, 0x3e98], /* CJK Ideograph Extension A */ + [0x3e99, 0x3e99], /* CJK Ideograph Extension A */ + [0x3e9a, 0x3e9a], /* CJK Ideograph Extension A */ + [0x3e9b, 0x3e9b], /* CJK Ideograph Extension A */ + [0x3e9c, 0x3e9c], /* CJK Ideograph Extension A */ + [0x3e9d, 0x3e9d], /* CJK Ideograph Extension A */ + [0x3e9e, 0x3e9e], /* CJK Ideograph Extension A */ + [0x3e9f, 0x3e9f], /* CJK Ideograph Extension A */ + [0x3ea0, 0x3ea0], /* CJK Ideograph Extension A */ + [0x3ea1, 0x3ea1], /* CJK Ideograph Extension A */ + [0x3ea2, 0x3ea2], /* CJK Ideograph Extension A */ + [0x3ea3, 0x3ea3], /* CJK Ideograph Extension A */ + [0x3ea4, 0x3ea4], /* CJK Ideograph Extension A */ + [0x3ea5, 0x3ea5], /* CJK Ideograph Extension A */ + [0x3ea6, 0x3ea6], /* CJK Ideograph Extension A */ + [0x3ea7, 0x3ea7], /* CJK Ideograph Extension A */ + [0x3ea8, 0x3ea8], /* CJK Ideograph Extension A */ + [0x3ea9, 0x3ea9], /* CJK Ideograph Extension A */ + [0x3eaa, 0x3eaa], /* CJK Ideograph Extension A */ + [0x3eab, 0x3eab], /* CJK Ideograph Extension A */ + [0x3eac, 0x3eac], /* CJK Ideograph Extension A */ + [0x3ead, 0x3ead], /* CJK Ideograph Extension A */ + [0x3eae, 0x3eae], /* CJK Ideograph Extension A */ + [0x3eaf, 0x3eaf], /* CJK Ideograph Extension A */ + [0x3eb0, 0x3eb0], /* CJK Ideograph Extension A */ + [0x3eb1, 0x3eb1], /* CJK Ideograph Extension A */ + [0x3eb2, 0x3eb2], /* CJK Ideograph Extension A */ + [0x3eb3, 0x3eb3], /* CJK Ideograph Extension A */ + [0x3eb4, 0x3eb4], /* CJK Ideograph Extension A */ + [0x3eb5, 0x3eb5], /* CJK Ideograph Extension A */ + [0x3eb6, 0x3eb6], /* CJK Ideograph Extension A */ + [0x3eb7, 0x3eb7], /* CJK Ideograph Extension A */ + [0x3eb8, 0x3eb8], /* CJK Ideograph Extension A */ + [0x3eb9, 0x3eb9], /* CJK Ideograph Extension A */ + [0x3eba, 0x3eba], /* CJK Ideograph Extension A */ + [0x3ebb, 0x3ebb], /* CJK Ideograph Extension A */ + [0x3ebc, 0x3ebc], /* CJK Ideograph Extension A */ + [0x3ebd, 0x3ebd], /* CJK Ideograph Extension A */ + [0x3ebe, 0x3ebe], /* CJK Ideograph Extension A */ + [0x3ebf, 0x3ebf], /* CJK Ideograph Extension A */ + [0x3ec0, 0x3ec0], /* CJK Ideograph Extension A */ + [0x3ec1, 0x3ec1], /* CJK Ideograph Extension A */ + [0x3ec2, 0x3ec2], /* CJK Ideograph Extension A */ + [0x3ec3, 0x3ec3], /* CJK Ideograph Extension A */ + [0x3ec4, 0x3ec4], /* CJK Ideograph Extension A */ + [0x3ec5, 0x3ec5], /* CJK Ideograph Extension A */ + [0x3ec6, 0x3ec6], /* CJK Ideograph Extension A */ + [0x3ec7, 0x3ec7], /* CJK Ideograph Extension A */ + [0x3ec8, 0x3ec8], /* CJK Ideograph Extension A */ + [0x3ec9, 0x3ec9], /* CJK Ideograph Extension A */ + [0x3eca, 0x3eca], /* CJK Ideograph Extension A */ + [0x3ecb, 0x3ecb], /* CJK Ideograph Extension A */ + [0x3ecc, 0x3ecc], /* CJK Ideograph Extension A */ + [0x3ecd, 0x3ecd], /* CJK Ideograph Extension A */ + [0x3ece, 0x3ece], /* CJK Ideograph Extension A */ + [0x3ecf, 0x3ecf], /* CJK Ideograph Extension A */ + [0x3ed0, 0x3ed0], /* CJK Ideograph Extension A */ + [0x3ed1, 0x3ed1], /* CJK Ideograph Extension A */ + [0x3ed2, 0x3ed2], /* CJK Ideograph Extension A */ + [0x3ed3, 0x3ed3], /* CJK Ideograph Extension A */ + [0x3ed4, 0x3ed4], /* CJK Ideograph Extension A */ + [0x3ed5, 0x3ed5], /* CJK Ideograph Extension A */ + [0x3ed6, 0x3ed6], /* CJK Ideograph Extension A */ + [0x3ed7, 0x3ed7], /* CJK Ideograph Extension A */ + [0x3ed8, 0x3ed8], /* CJK Ideograph Extension A */ + [0x3ed9, 0x3ed9], /* CJK Ideograph Extension A */ + [0x3eda, 0x3eda], /* CJK Ideograph Extension A */ + [0x3edb, 0x3edb], /* CJK Ideograph Extension A */ + [0x3edc, 0x3edc], /* CJK Ideograph Extension A */ + [0x3edd, 0x3edd], /* CJK Ideograph Extension A */ + [0x3ede, 0x3ede], /* CJK Ideograph Extension A */ + [0x3edf, 0x3edf], /* CJK Ideograph Extension A */ + [0x3ee0, 0x3ee0], /* CJK Ideograph Extension A */ + [0x3ee1, 0x3ee1], /* CJK Ideograph Extension A */ + [0x3ee2, 0x3ee2], /* CJK Ideograph Extension A */ + [0x3ee3, 0x3ee3], /* CJK Ideograph Extension A */ + [0x3ee4, 0x3ee4], /* CJK Ideograph Extension A */ + [0x3ee5, 0x3ee5], /* CJK Ideograph Extension A */ + [0x3ee6, 0x3ee6], /* CJK Ideograph Extension A */ + [0x3ee7, 0x3ee7], /* CJK Ideograph Extension A */ + [0x3ee8, 0x3ee8], /* CJK Ideograph Extension A */ + [0x3ee9, 0x3ee9], /* CJK Ideograph Extension A */ + [0x3eea, 0x3eea], /* CJK Ideograph Extension A */ + [0x3eeb, 0x3eeb], /* CJK Ideograph Extension A */ + [0x3eec, 0x3eec], /* CJK Ideograph Extension A */ + [0x3eed, 0x3eed], /* CJK Ideograph Extension A */ + [0x3eee, 0x3eee], /* CJK Ideograph Extension A */ + [0x3eef, 0x3eef], /* CJK Ideograph Extension A */ + [0x3ef0, 0x3ef0], /* CJK Ideograph Extension A */ + [0x3ef1, 0x3ef1], /* CJK Ideograph Extension A */ + [0x3ef2, 0x3ef2], /* CJK Ideograph Extension A */ + [0x3ef3, 0x3ef3], /* CJK Ideograph Extension A */ + [0x3ef4, 0x3ef4], /* CJK Ideograph Extension A */ + [0x3ef5, 0x3ef5], /* CJK Ideograph Extension A */ + [0x3ef6, 0x3ef6], /* CJK Ideograph Extension A */ + [0x3ef7, 0x3ef7], /* CJK Ideograph Extension A */ + [0x3ef8, 0x3ef8], /* CJK Ideograph Extension A */ + [0x3ef9, 0x3ef9], /* CJK Ideograph Extension A */ + [0x3efa, 0x3efa], /* CJK Ideograph Extension A */ + [0x3efb, 0x3efb], /* CJK Ideograph Extension A */ + [0x3efc, 0x3efc], /* CJK Ideograph Extension A */ + [0x3efd, 0x3efd], /* CJK Ideograph Extension A */ + [0x3efe, 0x3efe], /* CJK Ideograph Extension A */ + [0x3eff, 0x3eff], /* CJK Ideograph Extension A */ + [0x3f00, 0x3f00], /* CJK Ideograph Extension A */ + [0x3f01, 0x3f01], /* CJK Ideograph Extension A */ + [0x3f02, 0x3f02], /* CJK Ideograph Extension A */ + [0x3f03, 0x3f03], /* CJK Ideograph Extension A */ + [0x3f04, 0x3f04], /* CJK Ideograph Extension A */ + [0x3f05, 0x3f05], /* CJK Ideograph Extension A */ + [0x3f06, 0x3f06], /* CJK Ideograph Extension A */ + [0x3f07, 0x3f07], /* CJK Ideograph Extension A */ + [0x3f08, 0x3f08], /* CJK Ideograph Extension A */ + [0x3f09, 0x3f09], /* CJK Ideograph Extension A */ + [0x3f0a, 0x3f0a], /* CJK Ideograph Extension A */ + [0x3f0b, 0x3f0b], /* CJK Ideograph Extension A */ + [0x3f0c, 0x3f0c], /* CJK Ideograph Extension A */ + [0x3f0d, 0x3f0d], /* CJK Ideograph Extension A */ + [0x3f0e, 0x3f0e], /* CJK Ideograph Extension A */ + [0x3f0f, 0x3f0f], /* CJK Ideograph Extension A */ + [0x3f10, 0x3f10], /* CJK Ideograph Extension A */ + [0x3f11, 0x3f11], /* CJK Ideograph Extension A */ + [0x3f12, 0x3f12], /* CJK Ideograph Extension A */ + [0x3f13, 0x3f13], /* CJK Ideograph Extension A */ + [0x3f14, 0x3f14], /* CJK Ideograph Extension A */ + [0x3f15, 0x3f15], /* CJK Ideograph Extension A */ + [0x3f16, 0x3f16], /* CJK Ideograph Extension A */ + [0x3f17, 0x3f17], /* CJK Ideograph Extension A */ + [0x3f18, 0x3f18], /* CJK Ideograph Extension A */ + [0x3f19, 0x3f19], /* CJK Ideograph Extension A */ + [0x3f1a, 0x3f1a], /* CJK Ideograph Extension A */ + [0x3f1b, 0x3f1b], /* CJK Ideograph Extension A */ + [0x3f1c, 0x3f1c], /* CJK Ideograph Extension A */ + [0x3f1d, 0x3f1d], /* CJK Ideograph Extension A */ + [0x3f1e, 0x3f1e], /* CJK Ideograph Extension A */ + [0x3f1f, 0x3f1f], /* CJK Ideograph Extension A */ + [0x3f20, 0x3f20], /* CJK Ideograph Extension A */ + [0x3f21, 0x3f21], /* CJK Ideograph Extension A */ + [0x3f22, 0x3f22], /* CJK Ideograph Extension A */ + [0x3f23, 0x3f23], /* CJK Ideograph Extension A */ + [0x3f24, 0x3f24], /* CJK Ideograph Extension A */ + [0x3f25, 0x3f25], /* CJK Ideograph Extension A */ + [0x3f26, 0x3f26], /* CJK Ideograph Extension A */ + [0x3f27, 0x3f27], /* CJK Ideograph Extension A */ + [0x3f28, 0x3f28], /* CJK Ideograph Extension A */ + [0x3f29, 0x3f29], /* CJK Ideograph Extension A */ + [0x3f2a, 0x3f2a], /* CJK Ideograph Extension A */ + [0x3f2b, 0x3f2b], /* CJK Ideograph Extension A */ + [0x3f2c, 0x3f2c], /* CJK Ideograph Extension A */ + [0x3f2d, 0x3f2d], /* CJK Ideograph Extension A */ + [0x3f2e, 0x3f2e], /* CJK Ideograph Extension A */ + [0x3f2f, 0x3f2f], /* CJK Ideograph Extension A */ + [0x3f30, 0x3f30], /* CJK Ideograph Extension A */ + [0x3f31, 0x3f31], /* CJK Ideograph Extension A */ + [0x3f32, 0x3f32], /* CJK Ideograph Extension A */ + [0x3f33, 0x3f33], /* CJK Ideograph Extension A */ + [0x3f34, 0x3f34], /* CJK Ideograph Extension A */ + [0x3f35, 0x3f35], /* CJK Ideograph Extension A */ + [0x3f36, 0x3f36], /* CJK Ideograph Extension A */ + [0x3f37, 0x3f37], /* CJK Ideograph Extension A */ + [0x3f38, 0x3f38], /* CJK Ideograph Extension A */ + [0x3f39, 0x3f39], /* CJK Ideograph Extension A */ + [0x3f3a, 0x3f3a], /* CJK Ideograph Extension A */ + [0x3f3b, 0x3f3b], /* CJK Ideograph Extension A */ + [0x3f3c, 0x3f3c], /* CJK Ideograph Extension A */ + [0x3f3d, 0x3f3d], /* CJK Ideograph Extension A */ + [0x3f3e, 0x3f3e], /* CJK Ideograph Extension A */ + [0x3f3f, 0x3f3f], /* CJK Ideograph Extension A */ + [0x3f40, 0x3f40], /* CJK Ideograph Extension A */ + [0x3f41, 0x3f41], /* CJK Ideograph Extension A */ + [0x3f42, 0x3f42], /* CJK Ideograph Extension A */ + [0x3f43, 0x3f43], /* CJK Ideograph Extension A */ + [0x3f44, 0x3f44], /* CJK Ideograph Extension A */ + [0x3f45, 0x3f45], /* CJK Ideograph Extension A */ + [0x3f46, 0x3f46], /* CJK Ideograph Extension A */ + [0x3f47, 0x3f47], /* CJK Ideograph Extension A */ + [0x3f48, 0x3f48], /* CJK Ideograph Extension A */ + [0x3f49, 0x3f49], /* CJK Ideograph Extension A */ + [0x3f4a, 0x3f4a], /* CJK Ideograph Extension A */ + [0x3f4b, 0x3f4b], /* CJK Ideograph Extension A */ + [0x3f4c, 0x3f4c], /* CJK Ideograph Extension A */ + [0x3f4d, 0x3f4d], /* CJK Ideograph Extension A */ + [0x3f4e, 0x3f4e], /* CJK Ideograph Extension A */ + [0x3f4f, 0x3f4f], /* CJK Ideograph Extension A */ + [0x3f50, 0x3f50], /* CJK Ideograph Extension A */ + [0x3f51, 0x3f51], /* CJK Ideograph Extension A */ + [0x3f52, 0x3f52], /* CJK Ideograph Extension A */ + [0x3f53, 0x3f53], /* CJK Ideograph Extension A */ + [0x3f54, 0x3f54], /* CJK Ideograph Extension A */ + [0x3f55, 0x3f55], /* CJK Ideograph Extension A */ + [0x3f56, 0x3f56], /* CJK Ideograph Extension A */ + [0x3f57, 0x3f57], /* CJK Ideograph Extension A */ + [0x3f58, 0x3f58], /* CJK Ideograph Extension A */ + [0x3f59, 0x3f59], /* CJK Ideograph Extension A */ + [0x3f5a, 0x3f5a], /* CJK Ideograph Extension A */ + [0x3f5b, 0x3f5b], /* CJK Ideograph Extension A */ + [0x3f5c, 0x3f5c], /* CJK Ideograph Extension A */ + [0x3f5d, 0x3f5d], /* CJK Ideograph Extension A */ + [0x3f5e, 0x3f5e], /* CJK Ideograph Extension A */ + [0x3f5f, 0x3f5f], /* CJK Ideograph Extension A */ + [0x3f60, 0x3f60], /* CJK Ideograph Extension A */ + [0x3f61, 0x3f61], /* CJK Ideograph Extension A */ + [0x3f62, 0x3f62], /* CJK Ideograph Extension A */ + [0x3f63, 0x3f63], /* CJK Ideograph Extension A */ + [0x3f64, 0x3f64], /* CJK Ideograph Extension A */ + [0x3f65, 0x3f65], /* CJK Ideograph Extension A */ + [0x3f66, 0x3f66], /* CJK Ideograph Extension A */ + [0x3f67, 0x3f67], /* CJK Ideograph Extension A */ + [0x3f68, 0x3f68], /* CJK Ideograph Extension A */ + [0x3f69, 0x3f69], /* CJK Ideograph Extension A */ + [0x3f6a, 0x3f6a], /* CJK Ideograph Extension A */ + [0x3f6b, 0x3f6b], /* CJK Ideograph Extension A */ + [0x3f6c, 0x3f6c], /* CJK Ideograph Extension A */ + [0x3f6d, 0x3f6d], /* CJK Ideograph Extension A */ + [0x3f6e, 0x3f6e], /* CJK Ideograph Extension A */ + [0x3f6f, 0x3f6f], /* CJK Ideograph Extension A */ + [0x3f70, 0x3f70], /* CJK Ideograph Extension A */ + [0x3f71, 0x3f71], /* CJK Ideograph Extension A */ + [0x3f72, 0x3f72], /* CJK Ideograph Extension A */ + [0x3f73, 0x3f73], /* CJK Ideograph Extension A */ + [0x3f74, 0x3f74], /* CJK Ideograph Extension A */ + [0x3f75, 0x3f75], /* CJK Ideograph Extension A */ + [0x3f76, 0x3f76], /* CJK Ideograph Extension A */ + [0x3f77, 0x3f77], /* CJK Ideograph Extension A */ + [0x3f78, 0x3f78], /* CJK Ideograph Extension A */ + [0x3f79, 0x3f79], /* CJK Ideograph Extension A */ + [0x3f7a, 0x3f7a], /* CJK Ideograph Extension A */ + [0x3f7b, 0x3f7b], /* CJK Ideograph Extension A */ + [0x3f7c, 0x3f7c], /* CJK Ideograph Extension A */ + [0x3f7d, 0x3f7d], /* CJK Ideograph Extension A */ + [0x3f7e, 0x3f7e], /* CJK Ideograph Extension A */ + [0x3f7f, 0x3f7f], /* CJK Ideograph Extension A */ + [0x3f80, 0x3f80], /* CJK Ideograph Extension A */ + [0x3f81, 0x3f81], /* CJK Ideograph Extension A */ + [0x3f82, 0x3f82], /* CJK Ideograph Extension A */ + [0x3f83, 0x3f83], /* CJK Ideograph Extension A */ + [0x3f84, 0x3f84], /* CJK Ideograph Extension A */ + [0x3f85, 0x3f85], /* CJK Ideograph Extension A */ + [0x3f86, 0x3f86], /* CJK Ideograph Extension A */ + [0x3f87, 0x3f87], /* CJK Ideograph Extension A */ + [0x3f88, 0x3f88], /* CJK Ideograph Extension A */ + [0x3f89, 0x3f89], /* CJK Ideograph Extension A */ + [0x3f8a, 0x3f8a], /* CJK Ideograph Extension A */ + [0x3f8b, 0x3f8b], /* CJK Ideograph Extension A */ + [0x3f8c, 0x3f8c], /* CJK Ideograph Extension A */ + [0x3f8d, 0x3f8d], /* CJK Ideograph Extension A */ + [0x3f8e, 0x3f8e], /* CJK Ideograph Extension A */ + [0x3f8f, 0x3f8f], /* CJK Ideograph Extension A */ + [0x3f90, 0x3f90], /* CJK Ideograph Extension A */ + [0x3f91, 0x3f91], /* CJK Ideograph Extension A */ + [0x3f92, 0x3f92], /* CJK Ideograph Extension A */ + [0x3f93, 0x3f93], /* CJK Ideograph Extension A */ + [0x3f94, 0x3f94], /* CJK Ideograph Extension A */ + [0x3f95, 0x3f95], /* CJK Ideograph Extension A */ + [0x3f96, 0x3f96], /* CJK Ideograph Extension A */ + [0x3f97, 0x3f97], /* CJK Ideograph Extension A */ + [0x3f98, 0x3f98], /* CJK Ideograph Extension A */ + [0x3f99, 0x3f99], /* CJK Ideograph Extension A */ + [0x3f9a, 0x3f9a], /* CJK Ideograph Extension A */ + [0x3f9b, 0x3f9b], /* CJK Ideograph Extension A */ + [0x3f9c, 0x3f9c], /* CJK Ideograph Extension A */ + [0x3f9d, 0x3f9d], /* CJK Ideograph Extension A */ + [0x3f9e, 0x3f9e], /* CJK Ideograph Extension A */ + [0x3f9f, 0x3f9f], /* CJK Ideograph Extension A */ + [0x3fa0, 0x3fa0], /* CJK Ideograph Extension A */ + [0x3fa1, 0x3fa1], /* CJK Ideograph Extension A */ + [0x3fa2, 0x3fa2], /* CJK Ideograph Extension A */ + [0x3fa3, 0x3fa3], /* CJK Ideograph Extension A */ + [0x3fa4, 0x3fa4], /* CJK Ideograph Extension A */ + [0x3fa5, 0x3fa5], /* CJK Ideograph Extension A */ + [0x3fa6, 0x3fa6], /* CJK Ideograph Extension A */ + [0x3fa7, 0x3fa7], /* CJK Ideograph Extension A */ + [0x3fa8, 0x3fa8], /* CJK Ideograph Extension A */ + [0x3fa9, 0x3fa9], /* CJK Ideograph Extension A */ + [0x3faa, 0x3faa], /* CJK Ideograph Extension A */ + [0x3fab, 0x3fab], /* CJK Ideograph Extension A */ + [0x3fac, 0x3fac], /* CJK Ideograph Extension A */ + [0x3fad, 0x3fad], /* CJK Ideograph Extension A */ + [0x3fae, 0x3fae], /* CJK Ideograph Extension A */ + [0x3faf, 0x3faf], /* CJK Ideograph Extension A */ + [0x3fb0, 0x3fb0], /* CJK Ideograph Extension A */ + [0x3fb1, 0x3fb1], /* CJK Ideograph Extension A */ + [0x3fb2, 0x3fb2], /* CJK Ideograph Extension A */ + [0x3fb3, 0x3fb3], /* CJK Ideograph Extension A */ + [0x3fb4, 0x3fb4], /* CJK Ideograph Extension A */ + [0x3fb5, 0x3fb5], /* CJK Ideograph Extension A */ + [0x3fb6, 0x3fb6], /* CJK Ideograph Extension A */ + [0x3fb7, 0x3fb7], /* CJK Ideograph Extension A */ + [0x3fb8, 0x3fb8], /* CJK Ideograph Extension A */ + [0x3fb9, 0x3fb9], /* CJK Ideograph Extension A */ + [0x3fba, 0x3fba], /* CJK Ideograph Extension A */ + [0x3fbb, 0x3fbb], /* CJK Ideograph Extension A */ + [0x3fbc, 0x3fbc], /* CJK Ideograph Extension A */ + [0x3fbd, 0x3fbd], /* CJK Ideograph Extension A */ + [0x3fbe, 0x3fbe], /* CJK Ideograph Extension A */ + [0x3fbf, 0x3fbf], /* CJK Ideograph Extension A */ + [0x3fc0, 0x3fc0], /* CJK Ideograph Extension A */ + [0x3fc1, 0x3fc1], /* CJK Ideograph Extension A */ + [0x3fc2, 0x3fc2], /* CJK Ideograph Extension A */ + [0x3fc3, 0x3fc3], /* CJK Ideograph Extension A */ + [0x3fc4, 0x3fc4], /* CJK Ideograph Extension A */ + [0x3fc5, 0x3fc5], /* CJK Ideograph Extension A */ + [0x3fc6, 0x3fc6], /* CJK Ideograph Extension A */ + [0x3fc7, 0x3fc7], /* CJK Ideograph Extension A */ + [0x3fc8, 0x3fc8], /* CJK Ideograph Extension A */ + [0x3fc9, 0x3fc9], /* CJK Ideograph Extension A */ + [0x3fca, 0x3fca], /* CJK Ideograph Extension A */ + [0x3fcb, 0x3fcb], /* CJK Ideograph Extension A */ + [0x3fcc, 0x3fcc], /* CJK Ideograph Extension A */ + [0x3fcd, 0x3fcd], /* CJK Ideograph Extension A */ + [0x3fce, 0x3fce], /* CJK Ideograph Extension A */ + [0x3fcf, 0x3fcf], /* CJK Ideograph Extension A */ + [0x3fd0, 0x3fd0], /* CJK Ideograph Extension A */ + [0x3fd1, 0x3fd1], /* CJK Ideograph Extension A */ + [0x3fd2, 0x3fd2], /* CJK Ideograph Extension A */ + [0x3fd3, 0x3fd3], /* CJK Ideograph Extension A */ + [0x3fd4, 0x3fd4], /* CJK Ideograph Extension A */ + [0x3fd5, 0x3fd5], /* CJK Ideograph Extension A */ + [0x3fd6, 0x3fd6], /* CJK Ideograph Extension A */ + [0x3fd7, 0x3fd7], /* CJK Ideograph Extension A */ + [0x3fd8, 0x3fd8], /* CJK Ideograph Extension A */ + [0x3fd9, 0x3fd9], /* CJK Ideograph Extension A */ + [0x3fda, 0x3fda], /* CJK Ideograph Extension A */ + [0x3fdb, 0x3fdb], /* CJK Ideograph Extension A */ + [0x3fdc, 0x3fdc], /* CJK Ideograph Extension A */ + [0x3fdd, 0x3fdd], /* CJK Ideograph Extension A */ + [0x3fde, 0x3fde], /* CJK Ideograph Extension A */ + [0x3fdf, 0x3fdf], /* CJK Ideograph Extension A */ + [0x3fe0, 0x3fe0], /* CJK Ideograph Extension A */ + [0x3fe1, 0x3fe1], /* CJK Ideograph Extension A */ + [0x3fe2, 0x3fe2], /* CJK Ideograph Extension A */ + [0x3fe3, 0x3fe3], /* CJK Ideograph Extension A */ + [0x3fe4, 0x3fe4], /* CJK Ideograph Extension A */ + [0x3fe5, 0x3fe5], /* CJK Ideograph Extension A */ + [0x3fe6, 0x3fe6], /* CJK Ideograph Extension A */ + [0x3fe7, 0x3fe7], /* CJK Ideograph Extension A */ + [0x3fe8, 0x3fe8], /* CJK Ideograph Extension A */ + [0x3fe9, 0x3fe9], /* CJK Ideograph Extension A */ + [0x3fea, 0x3fea], /* CJK Ideograph Extension A */ + [0x3feb, 0x3feb], /* CJK Ideograph Extension A */ + [0x3fec, 0x3fec], /* CJK Ideograph Extension A */ + [0x3fed, 0x3fed], /* CJK Ideograph Extension A */ + [0x3fee, 0x3fee], /* CJK Ideograph Extension A */ + [0x3fef, 0x3fef], /* CJK Ideograph Extension A */ + [0x3ff0, 0x3ff0], /* CJK Ideograph Extension A */ + [0x3ff1, 0x3ff1], /* CJK Ideograph Extension A */ + [0x3ff2, 0x3ff2], /* CJK Ideograph Extension A */ + [0x3ff3, 0x3ff3], /* CJK Ideograph Extension A */ + [0x3ff4, 0x3ff4], /* CJK Ideograph Extension A */ + [0x3ff5, 0x3ff5], /* CJK Ideograph Extension A */ + [0x3ff6, 0x3ff6], /* CJK Ideograph Extension A */ + [0x3ff7, 0x3ff7], /* CJK Ideograph Extension A */ + [0x3ff8, 0x3ff8], /* CJK Ideograph Extension A */ + [0x3ff9, 0x3ff9], /* CJK Ideograph Extension A */ + [0x3ffa, 0x3ffa], /* CJK Ideograph Extension A */ + [0x3ffb, 0x3ffb], /* CJK Ideograph Extension A */ + [0x3ffc, 0x3ffc], /* CJK Ideograph Extension A */ + [0x3ffd, 0x3ffd], /* CJK Ideograph Extension A */ + [0x3ffe, 0x3ffe], /* CJK Ideograph Extension A */ + [0x3fff, 0x3fff], /* CJK Ideograph Extension A */ + [0x4000, 0x4000], /* CJK Ideograph Extension A */ + [0x4001, 0x4001], /* CJK Ideograph Extension A */ + [0x4002, 0x4002], /* CJK Ideograph Extension A */ + [0x4003, 0x4003], /* CJK Ideograph Extension A */ + [0x4004, 0x4004], /* CJK Ideograph Extension A */ + [0x4005, 0x4005], /* CJK Ideograph Extension A */ + [0x4006, 0x4006], /* CJK Ideograph Extension A */ + [0x4007, 0x4007], /* CJK Ideograph Extension A */ + [0x4008, 0x4008], /* CJK Ideograph Extension A */ + [0x4009, 0x4009], /* CJK Ideograph Extension A */ + [0x400a, 0x400a], /* CJK Ideograph Extension A */ + [0x400b, 0x400b], /* CJK Ideograph Extension A */ + [0x400c, 0x400c], /* CJK Ideograph Extension A */ + [0x400d, 0x400d], /* CJK Ideograph Extension A */ + [0x400e, 0x400e], /* CJK Ideograph Extension A */ + [0x400f, 0x400f], /* CJK Ideograph Extension A */ + [0x4010, 0x4010], /* CJK Ideograph Extension A */ + [0x4011, 0x4011], /* CJK Ideograph Extension A */ + [0x4012, 0x4012], /* CJK Ideograph Extension A */ + [0x4013, 0x4013], /* CJK Ideograph Extension A */ + [0x4014, 0x4014], /* CJK Ideograph Extension A */ + [0x4015, 0x4015], /* CJK Ideograph Extension A */ + [0x4016, 0x4016], /* CJK Ideograph Extension A */ + [0x4017, 0x4017], /* CJK Ideograph Extension A */ + [0x4018, 0x4018], /* CJK Ideograph Extension A */ + [0x4019, 0x4019], /* CJK Ideograph Extension A */ + [0x401a, 0x401a], /* CJK Ideograph Extension A */ + [0x401b, 0x401b], /* CJK Ideograph Extension A */ + [0x401c, 0x401c], /* CJK Ideograph Extension A */ + [0x401d, 0x401d], /* CJK Ideograph Extension A */ + [0x401e, 0x401e], /* CJK Ideograph Extension A */ + [0x401f, 0x401f], /* CJK Ideograph Extension A */ + [0x4020, 0x4020], /* CJK Ideograph Extension A */ + [0x4021, 0x4021], /* CJK Ideograph Extension A */ + [0x4022, 0x4022], /* CJK Ideograph Extension A */ + [0x4023, 0x4023], /* CJK Ideograph Extension A */ + [0x4024, 0x4024], /* CJK Ideograph Extension A */ + [0x4025, 0x4025], /* CJK Ideograph Extension A */ + [0x4026, 0x4026], /* CJK Ideograph Extension A */ + [0x4027, 0x4027], /* CJK Ideograph Extension A */ + [0x4028, 0x4028], /* CJK Ideograph Extension A */ + [0x4029, 0x4029], /* CJK Ideograph Extension A */ + [0x402a, 0x402a], /* CJK Ideograph Extension A */ + [0x402b, 0x402b], /* CJK Ideograph Extension A */ + [0x402c, 0x402c], /* CJK Ideograph Extension A */ + [0x402d, 0x402d], /* CJK Ideograph Extension A */ + [0x402e, 0x402e], /* CJK Ideograph Extension A */ + [0x402f, 0x402f], /* CJK Ideograph Extension A */ + [0x4030, 0x4030], /* CJK Ideograph Extension A */ + [0x4031, 0x4031], /* CJK Ideograph Extension A */ + [0x4032, 0x4032], /* CJK Ideograph Extension A */ + [0x4033, 0x4033], /* CJK Ideograph Extension A */ + [0x4034, 0x4034], /* CJK Ideograph Extension A */ + [0x4035, 0x4035], /* CJK Ideograph Extension A */ + [0x4036, 0x4036], /* CJK Ideograph Extension A */ + [0x4037, 0x4037], /* CJK Ideograph Extension A */ + [0x4038, 0x4038], /* CJK Ideograph Extension A */ + [0x4039, 0x4039], /* CJK Ideograph Extension A */ + [0x403a, 0x403a], /* CJK Ideograph Extension A */ + [0x403b, 0x403b], /* CJK Ideograph Extension A */ + [0x403c, 0x403c], /* CJK Ideograph Extension A */ + [0x403d, 0x403d], /* CJK Ideograph Extension A */ + [0x403e, 0x403e], /* CJK Ideograph Extension A */ + [0x403f, 0x403f], /* CJK Ideograph Extension A */ + [0x4040, 0x4040], /* CJK Ideograph Extension A */ + [0x4041, 0x4041], /* CJK Ideograph Extension A */ + [0x4042, 0x4042], /* CJK Ideograph Extension A */ + [0x4043, 0x4043], /* CJK Ideograph Extension A */ + [0x4044, 0x4044], /* CJK Ideograph Extension A */ + [0x4045, 0x4045], /* CJK Ideograph Extension A */ + [0x4046, 0x4046], /* CJK Ideograph Extension A */ + [0x4047, 0x4047], /* CJK Ideograph Extension A */ + [0x4048, 0x4048], /* CJK Ideograph Extension A */ + [0x4049, 0x4049], /* CJK Ideograph Extension A */ + [0x404a, 0x404a], /* CJK Ideograph Extension A */ + [0x404b, 0x404b], /* CJK Ideograph Extension A */ + [0x404c, 0x404c], /* CJK Ideograph Extension A */ + [0x404d, 0x404d], /* CJK Ideograph Extension A */ + [0x404e, 0x404e], /* CJK Ideograph Extension A */ + [0x404f, 0x404f], /* CJK Ideograph Extension A */ + [0x4050, 0x4050], /* CJK Ideograph Extension A */ + [0x4051, 0x4051], /* CJK Ideograph Extension A */ + [0x4052, 0x4052], /* CJK Ideograph Extension A */ + [0x4053, 0x4053], /* CJK Ideograph Extension A */ + [0x4054, 0x4054], /* CJK Ideograph Extension A */ + [0x4055, 0x4055], /* CJK Ideograph Extension A */ + [0x4056, 0x4056], /* CJK Ideograph Extension A */ + [0x4057, 0x4057], /* CJK Ideograph Extension A */ + [0x4058, 0x4058], /* CJK Ideograph Extension A */ + [0x4059, 0x4059], /* CJK Ideograph Extension A */ + [0x405a, 0x405a], /* CJK Ideograph Extension A */ + [0x405b, 0x405b], /* CJK Ideograph Extension A */ + [0x405c, 0x405c], /* CJK Ideograph Extension A */ + [0x405d, 0x405d], /* CJK Ideograph Extension A */ + [0x405e, 0x405e], /* CJK Ideograph Extension A */ + [0x405f, 0x405f], /* CJK Ideograph Extension A */ + [0x4060, 0x4060], /* CJK Ideograph Extension A */ + [0x4061, 0x4061], /* CJK Ideograph Extension A */ + [0x4062, 0x4062], /* CJK Ideograph Extension A */ + [0x4063, 0x4063], /* CJK Ideograph Extension A */ + [0x4064, 0x4064], /* CJK Ideograph Extension A */ + [0x4065, 0x4065], /* CJK Ideograph Extension A */ + [0x4066, 0x4066], /* CJK Ideograph Extension A */ + [0x4067, 0x4067], /* CJK Ideograph Extension A */ + [0x4068, 0x4068], /* CJK Ideograph Extension A */ + [0x4069, 0x4069], /* CJK Ideograph Extension A */ + [0x406a, 0x406a], /* CJK Ideograph Extension A */ + [0x406b, 0x406b], /* CJK Ideograph Extension A */ + [0x406c, 0x406c], /* CJK Ideograph Extension A */ + [0x406d, 0x406d], /* CJK Ideograph Extension A */ + [0x406e, 0x406e], /* CJK Ideograph Extension A */ + [0x406f, 0x406f], /* CJK Ideograph Extension A */ + [0x4070, 0x4070], /* CJK Ideograph Extension A */ + [0x4071, 0x4071], /* CJK Ideograph Extension A */ + [0x4072, 0x4072], /* CJK Ideograph Extension A */ + [0x4073, 0x4073], /* CJK Ideograph Extension A */ + [0x4074, 0x4074], /* CJK Ideograph Extension A */ + [0x4075, 0x4075], /* CJK Ideograph Extension A */ + [0x4076, 0x4076], /* CJK Ideograph Extension A */ + [0x4077, 0x4077], /* CJK Ideograph Extension A */ + [0x4078, 0x4078], /* CJK Ideograph Extension A */ + [0x4079, 0x4079], /* CJK Ideograph Extension A */ + [0x407a, 0x407a], /* CJK Ideograph Extension A */ + [0x407b, 0x407b], /* CJK Ideograph Extension A */ + [0x407c, 0x407c], /* CJK Ideograph Extension A */ + [0x407d, 0x407d], /* CJK Ideograph Extension A */ + [0x407e, 0x407e], /* CJK Ideograph Extension A */ + [0x407f, 0x407f], /* CJK Ideograph Extension A */ + [0x4080, 0x4080], /* CJK Ideograph Extension A */ + [0x4081, 0x4081], /* CJK Ideograph Extension A */ + [0x4082, 0x4082], /* CJK Ideograph Extension A */ + [0x4083, 0x4083], /* CJK Ideograph Extension A */ + [0x4084, 0x4084], /* CJK Ideograph Extension A */ + [0x4085, 0x4085], /* CJK Ideograph Extension A */ + [0x4086, 0x4086], /* CJK Ideograph Extension A */ + [0x4087, 0x4087], /* CJK Ideograph Extension A */ + [0x4088, 0x4088], /* CJK Ideograph Extension A */ + [0x4089, 0x4089], /* CJK Ideograph Extension A */ + [0x408a, 0x408a], /* CJK Ideograph Extension A */ + [0x408b, 0x408b], /* CJK Ideograph Extension A */ + [0x408c, 0x408c], /* CJK Ideograph Extension A */ + [0x408d, 0x408d], /* CJK Ideograph Extension A */ + [0x408e, 0x408e], /* CJK Ideograph Extension A */ + [0x408f, 0x408f], /* CJK Ideograph Extension A */ + [0x4090, 0x4090], /* CJK Ideograph Extension A */ + [0x4091, 0x4091], /* CJK Ideograph Extension A */ + [0x4092, 0x4092], /* CJK Ideograph Extension A */ + [0x4093, 0x4093], /* CJK Ideograph Extension A */ + [0x4094, 0x4094], /* CJK Ideograph Extension A */ + [0x4095, 0x4095], /* CJK Ideograph Extension A */ + [0x4096, 0x4096], /* CJK Ideograph Extension A */ + [0x4097, 0x4097], /* CJK Ideograph Extension A */ + [0x4098, 0x4098], /* CJK Ideograph Extension A */ + [0x4099, 0x4099], /* CJK Ideograph Extension A */ + [0x409a, 0x409a], /* CJK Ideograph Extension A */ + [0x409b, 0x409b], /* CJK Ideograph Extension A */ + [0x409c, 0x409c], /* CJK Ideograph Extension A */ + [0x409d, 0x409d], /* CJK Ideograph Extension A */ + [0x409e, 0x409e], /* CJK Ideograph Extension A */ + [0x409f, 0x409f], /* CJK Ideograph Extension A */ + [0x40a0, 0x40a0], /* CJK Ideograph Extension A */ + [0x40a1, 0x40a1], /* CJK Ideograph Extension A */ + [0x40a2, 0x40a2], /* CJK Ideograph Extension A */ + [0x40a3, 0x40a3], /* CJK Ideograph Extension A */ + [0x40a4, 0x40a4], /* CJK Ideograph Extension A */ + [0x40a5, 0x40a5], /* CJK Ideograph Extension A */ + [0x40a6, 0x40a6], /* CJK Ideograph Extension A */ + [0x40a7, 0x40a7], /* CJK Ideograph Extension A */ + [0x40a8, 0x40a8], /* CJK Ideograph Extension A */ + [0x40a9, 0x40a9], /* CJK Ideograph Extension A */ + [0x40aa, 0x40aa], /* CJK Ideograph Extension A */ + [0x40ab, 0x40ab], /* CJK Ideograph Extension A */ + [0x40ac, 0x40ac], /* CJK Ideograph Extension A */ + [0x40ad, 0x40ad], /* CJK Ideograph Extension A */ + [0x40ae, 0x40ae], /* CJK Ideograph Extension A */ + [0x40af, 0x40af], /* CJK Ideograph Extension A */ + [0x40b0, 0x40b0], /* CJK Ideograph Extension A */ + [0x40b1, 0x40b1], /* CJK Ideograph Extension A */ + [0x40b2, 0x40b2], /* CJK Ideograph Extension A */ + [0x40b3, 0x40b3], /* CJK Ideograph Extension A */ + [0x40b4, 0x40b4], /* CJK Ideograph Extension A */ + [0x40b5, 0x40b5], /* CJK Ideograph Extension A */ + [0x40b6, 0x40b6], /* CJK Ideograph Extension A */ + [0x40b7, 0x40b7], /* CJK Ideograph Extension A */ + [0x40b8, 0x40b8], /* CJK Ideograph Extension A */ + [0x40b9, 0x40b9], /* CJK Ideograph Extension A */ + [0x40ba, 0x40ba], /* CJK Ideograph Extension A */ + [0x40bb, 0x40bb], /* CJK Ideograph Extension A */ + [0x40bc, 0x40bc], /* CJK Ideograph Extension A */ + [0x40bd, 0x40bd], /* CJK Ideograph Extension A */ + [0x40be, 0x40be], /* CJK Ideograph Extension A */ + [0x40bf, 0x40bf], /* CJK Ideograph Extension A */ + [0x40c0, 0x40c0], /* CJK Ideograph Extension A */ + [0x40c1, 0x40c1], /* CJK Ideograph Extension A */ + [0x40c2, 0x40c2], /* CJK Ideograph Extension A */ + [0x40c3, 0x40c3], /* CJK Ideograph Extension A */ + [0x40c4, 0x40c4], /* CJK Ideograph Extension A */ + [0x40c5, 0x40c5], /* CJK Ideograph Extension A */ + [0x40c6, 0x40c6], /* CJK Ideograph Extension A */ + [0x40c7, 0x40c7], /* CJK Ideograph Extension A */ + [0x40c8, 0x40c8], /* CJK Ideograph Extension A */ + [0x40c9, 0x40c9], /* CJK Ideograph Extension A */ + [0x40ca, 0x40ca], /* CJK Ideograph Extension A */ + [0x40cb, 0x40cb], /* CJK Ideograph Extension A */ + [0x40cc, 0x40cc], /* CJK Ideograph Extension A */ + [0x40cd, 0x40cd], /* CJK Ideograph Extension A */ + [0x40ce, 0x40ce], /* CJK Ideograph Extension A */ + [0x40cf, 0x40cf], /* CJK Ideograph Extension A */ + [0x40d0, 0x40d0], /* CJK Ideograph Extension A */ + [0x40d1, 0x40d1], /* CJK Ideograph Extension A */ + [0x40d2, 0x40d2], /* CJK Ideograph Extension A */ + [0x40d3, 0x40d3], /* CJK Ideograph Extension A */ + [0x40d4, 0x40d4], /* CJK Ideograph Extension A */ + [0x40d5, 0x40d5], /* CJK Ideograph Extension A */ + [0x40d6, 0x40d6], /* CJK Ideograph Extension A */ + [0x40d7, 0x40d7], /* CJK Ideograph Extension A */ + [0x40d8, 0x40d8], /* CJK Ideograph Extension A */ + [0x40d9, 0x40d9], /* CJK Ideograph Extension A */ + [0x40da, 0x40da], /* CJK Ideograph Extension A */ + [0x40db, 0x40db], /* CJK Ideograph Extension A */ + [0x40dc, 0x40dc], /* CJK Ideograph Extension A */ + [0x40dd, 0x40dd], /* CJK Ideograph Extension A */ + [0x40de, 0x40de], /* CJK Ideograph Extension A */ + [0x40df, 0x40df], /* CJK Ideograph Extension A */ + [0x40e0, 0x40e0], /* CJK Ideograph Extension A */ + [0x40e1, 0x40e1], /* CJK Ideograph Extension A */ + [0x40e2, 0x40e2], /* CJK Ideograph Extension A */ + [0x40e3, 0x40e3], /* CJK Ideograph Extension A */ + [0x40e4, 0x40e4], /* CJK Ideograph Extension A */ + [0x40e5, 0x40e5], /* CJK Ideograph Extension A */ + [0x40e6, 0x40e6], /* CJK Ideograph Extension A */ + [0x40e7, 0x40e7], /* CJK Ideograph Extension A */ + [0x40e8, 0x40e8], /* CJK Ideograph Extension A */ + [0x40e9, 0x40e9], /* CJK Ideograph Extension A */ + [0x40ea, 0x40ea], /* CJK Ideograph Extension A */ + [0x40eb, 0x40eb], /* CJK Ideograph Extension A */ + [0x40ec, 0x40ec], /* CJK Ideograph Extension A */ + [0x40ed, 0x40ed], /* CJK Ideograph Extension A */ + [0x40ee, 0x40ee], /* CJK Ideograph Extension A */ + [0x40ef, 0x40ef], /* CJK Ideograph Extension A */ + [0x40f0, 0x40f0], /* CJK Ideograph Extension A */ + [0x40f1, 0x40f1], /* CJK Ideograph Extension A */ + [0x40f2, 0x40f2], /* CJK Ideograph Extension A */ + [0x40f3, 0x40f3], /* CJK Ideograph Extension A */ + [0x40f4, 0x40f4], /* CJK Ideograph Extension A */ + [0x40f5, 0x40f5], /* CJK Ideograph Extension A */ + [0x40f6, 0x40f6], /* CJK Ideograph Extension A */ + [0x40f7, 0x40f7], /* CJK Ideograph Extension A */ + [0x40f8, 0x40f8], /* CJK Ideograph Extension A */ + [0x40f9, 0x40f9], /* CJK Ideograph Extension A */ + [0x40fa, 0x40fa], /* CJK Ideograph Extension A */ + [0x40fb, 0x40fb], /* CJK Ideograph Extension A */ + [0x40fc, 0x40fc], /* CJK Ideograph Extension A */ + [0x40fd, 0x40fd], /* CJK Ideograph Extension A */ + [0x40fe, 0x40fe], /* CJK Ideograph Extension A */ + [0x40ff, 0x40ff], /* CJK Ideograph Extension A */ + [0x4100, 0x4100], /* CJK Ideograph Extension A */ + [0x4101, 0x4101], /* CJK Ideograph Extension A */ + [0x4102, 0x4102], /* CJK Ideograph Extension A */ + [0x4103, 0x4103], /* CJK Ideograph Extension A */ + [0x4104, 0x4104], /* CJK Ideograph Extension A */ + [0x4105, 0x4105], /* CJK Ideograph Extension A */ + [0x4106, 0x4106], /* CJK Ideograph Extension A */ + [0x4107, 0x4107], /* CJK Ideograph Extension A */ + [0x4108, 0x4108], /* CJK Ideograph Extension A */ + [0x4109, 0x4109], /* CJK Ideograph Extension A */ + [0x410a, 0x410a], /* CJK Ideograph Extension A */ + [0x410b, 0x410b], /* CJK Ideograph Extension A */ + [0x410c, 0x410c], /* CJK Ideograph Extension A */ + [0x410d, 0x410d], /* CJK Ideograph Extension A */ + [0x410e, 0x410e], /* CJK Ideograph Extension A */ + [0x410f, 0x410f], /* CJK Ideograph Extension A */ + [0x4110, 0x4110], /* CJK Ideograph Extension A */ + [0x4111, 0x4111], /* CJK Ideograph Extension A */ + [0x4112, 0x4112], /* CJK Ideograph Extension A */ + [0x4113, 0x4113], /* CJK Ideograph Extension A */ + [0x4114, 0x4114], /* CJK Ideograph Extension A */ + [0x4115, 0x4115], /* CJK Ideograph Extension A */ + [0x4116, 0x4116], /* CJK Ideograph Extension A */ + [0x4117, 0x4117], /* CJK Ideograph Extension A */ + [0x4118, 0x4118], /* CJK Ideograph Extension A */ + [0x4119, 0x4119], /* CJK Ideograph Extension A */ + [0x411a, 0x411a], /* CJK Ideograph Extension A */ + [0x411b, 0x411b], /* CJK Ideograph Extension A */ + [0x411c, 0x411c], /* CJK Ideograph Extension A */ + [0x411d, 0x411d], /* CJK Ideograph Extension A */ + [0x411e, 0x411e], /* CJK Ideograph Extension A */ + [0x411f, 0x411f], /* CJK Ideograph Extension A */ + [0x4120, 0x4120], /* CJK Ideograph Extension A */ + [0x4121, 0x4121], /* CJK Ideograph Extension A */ + [0x4122, 0x4122], /* CJK Ideograph Extension A */ + [0x4123, 0x4123], /* CJK Ideograph Extension A */ + [0x4124, 0x4124], /* CJK Ideograph Extension A */ + [0x4125, 0x4125], /* CJK Ideograph Extension A */ + [0x4126, 0x4126], /* CJK Ideograph Extension A */ + [0x4127, 0x4127], /* CJK Ideograph Extension A */ + [0x4128, 0x4128], /* CJK Ideograph Extension A */ + [0x4129, 0x4129], /* CJK Ideograph Extension A */ + [0x412a, 0x412a], /* CJK Ideograph Extension A */ + [0x412b, 0x412b], /* CJK Ideograph Extension A */ + [0x412c, 0x412c], /* CJK Ideograph Extension A */ + [0x412d, 0x412d], /* CJK Ideograph Extension A */ + [0x412e, 0x412e], /* CJK Ideograph Extension A */ + [0x412f, 0x412f], /* CJK Ideograph Extension A */ + [0x4130, 0x4130], /* CJK Ideograph Extension A */ + [0x4131, 0x4131], /* CJK Ideograph Extension A */ + [0x4132, 0x4132], /* CJK Ideograph Extension A */ + [0x4133, 0x4133], /* CJK Ideograph Extension A */ + [0x4134, 0x4134], /* CJK Ideograph Extension A */ + [0x4135, 0x4135], /* CJK Ideograph Extension A */ + [0x4136, 0x4136], /* CJK Ideograph Extension A */ + [0x4137, 0x4137], /* CJK Ideograph Extension A */ + [0x4138, 0x4138], /* CJK Ideograph Extension A */ + [0x4139, 0x4139], /* CJK Ideograph Extension A */ + [0x413a, 0x413a], /* CJK Ideograph Extension A */ + [0x413b, 0x413b], /* CJK Ideograph Extension A */ + [0x413c, 0x413c], /* CJK Ideograph Extension A */ + [0x413d, 0x413d], /* CJK Ideograph Extension A */ + [0x413e, 0x413e], /* CJK Ideograph Extension A */ + [0x413f, 0x413f], /* CJK Ideograph Extension A */ + [0x4140, 0x4140], /* CJK Ideograph Extension A */ + [0x4141, 0x4141], /* CJK Ideograph Extension A */ + [0x4142, 0x4142], /* CJK Ideograph Extension A */ + [0x4143, 0x4143], /* CJK Ideograph Extension A */ + [0x4144, 0x4144], /* CJK Ideograph Extension A */ + [0x4145, 0x4145], /* CJK Ideograph Extension A */ + [0x4146, 0x4146], /* CJK Ideograph Extension A */ + [0x4147, 0x4147], /* CJK Ideograph Extension A */ + [0x4148, 0x4148], /* CJK Ideograph Extension A */ + [0x4149, 0x4149], /* CJK Ideograph Extension A */ + [0x414a, 0x414a], /* CJK Ideograph Extension A */ + [0x414b, 0x414b], /* CJK Ideograph Extension A */ + [0x414c, 0x414c], /* CJK Ideograph Extension A */ + [0x414d, 0x414d], /* CJK Ideograph Extension A */ + [0x414e, 0x414e], /* CJK Ideograph Extension A */ + [0x414f, 0x414f], /* CJK Ideograph Extension A */ + [0x4150, 0x4150], /* CJK Ideograph Extension A */ + [0x4151, 0x4151], /* CJK Ideograph Extension A */ + [0x4152, 0x4152], /* CJK Ideograph Extension A */ + [0x4153, 0x4153], /* CJK Ideograph Extension A */ + [0x4154, 0x4154], /* CJK Ideograph Extension A */ + [0x4155, 0x4155], /* CJK Ideograph Extension A */ + [0x4156, 0x4156], /* CJK Ideograph Extension A */ + [0x4157, 0x4157], /* CJK Ideograph Extension A */ + [0x4158, 0x4158], /* CJK Ideograph Extension A */ + [0x4159, 0x4159], /* CJK Ideograph Extension A */ + [0x415a, 0x415a], /* CJK Ideograph Extension A */ + [0x415b, 0x415b], /* CJK Ideograph Extension A */ + [0x415c, 0x415c], /* CJK Ideograph Extension A */ + [0x415d, 0x415d], /* CJK Ideograph Extension A */ + [0x415e, 0x415e], /* CJK Ideograph Extension A */ + [0x415f, 0x415f], /* CJK Ideograph Extension A */ + [0x4160, 0x4160], /* CJK Ideograph Extension A */ + [0x4161, 0x4161], /* CJK Ideograph Extension A */ + [0x4162, 0x4162], /* CJK Ideograph Extension A */ + [0x4163, 0x4163], /* CJK Ideograph Extension A */ + [0x4164, 0x4164], /* CJK Ideograph Extension A */ + [0x4165, 0x4165], /* CJK Ideograph Extension A */ + [0x4166, 0x4166], /* CJK Ideograph Extension A */ + [0x4167, 0x4167], /* CJK Ideograph Extension A */ + [0x4168, 0x4168], /* CJK Ideograph Extension A */ + [0x4169, 0x4169], /* CJK Ideograph Extension A */ + [0x416a, 0x416a], /* CJK Ideograph Extension A */ + [0x416b, 0x416b], /* CJK Ideograph Extension A */ + [0x416c, 0x416c], /* CJK Ideograph Extension A */ + [0x416d, 0x416d], /* CJK Ideograph Extension A */ + [0x416e, 0x416e], /* CJK Ideograph Extension A */ + [0x416f, 0x416f], /* CJK Ideograph Extension A */ + [0x4170, 0x4170], /* CJK Ideograph Extension A */ + [0x4171, 0x4171], /* CJK Ideograph Extension A */ + [0x4172, 0x4172], /* CJK Ideograph Extension A */ + [0x4173, 0x4173], /* CJK Ideograph Extension A */ + [0x4174, 0x4174], /* CJK Ideograph Extension A */ + [0x4175, 0x4175], /* CJK Ideograph Extension A */ + [0x4176, 0x4176], /* CJK Ideograph Extension A */ + [0x4177, 0x4177], /* CJK Ideograph Extension A */ + [0x4178, 0x4178], /* CJK Ideograph Extension A */ + [0x4179, 0x4179], /* CJK Ideograph Extension A */ + [0x417a, 0x417a], /* CJK Ideograph Extension A */ + [0x417b, 0x417b], /* CJK Ideograph Extension A */ + [0x417c, 0x417c], /* CJK Ideograph Extension A */ + [0x417d, 0x417d], /* CJK Ideograph Extension A */ + [0x417e, 0x417e], /* CJK Ideograph Extension A */ + [0x417f, 0x417f], /* CJK Ideograph Extension A */ + [0x4180, 0x4180], /* CJK Ideograph Extension A */ + [0x4181, 0x4181], /* CJK Ideograph Extension A */ + [0x4182, 0x4182], /* CJK Ideograph Extension A */ + [0x4183, 0x4183], /* CJK Ideograph Extension A */ + [0x4184, 0x4184], /* CJK Ideograph Extension A */ + [0x4185, 0x4185], /* CJK Ideograph Extension A */ + [0x4186, 0x4186], /* CJK Ideograph Extension A */ + [0x4187, 0x4187], /* CJK Ideograph Extension A */ + [0x4188, 0x4188], /* CJK Ideograph Extension A */ + [0x4189, 0x4189], /* CJK Ideograph Extension A */ + [0x418a, 0x418a], /* CJK Ideograph Extension A */ + [0x418b, 0x418b], /* CJK Ideograph Extension A */ + [0x418c, 0x418c], /* CJK Ideograph Extension A */ + [0x418d, 0x418d], /* CJK Ideograph Extension A */ + [0x418e, 0x418e], /* CJK Ideograph Extension A */ + [0x418f, 0x418f], /* CJK Ideograph Extension A */ + [0x4190, 0x4190], /* CJK Ideograph Extension A */ + [0x4191, 0x4191], /* CJK Ideograph Extension A */ + [0x4192, 0x4192], /* CJK Ideograph Extension A */ + [0x4193, 0x4193], /* CJK Ideograph Extension A */ + [0x4194, 0x4194], /* CJK Ideograph Extension A */ + [0x4195, 0x4195], /* CJK Ideograph Extension A */ + [0x4196, 0x4196], /* CJK Ideograph Extension A */ + [0x4197, 0x4197], /* CJK Ideograph Extension A */ + [0x4198, 0x4198], /* CJK Ideograph Extension A */ + [0x4199, 0x4199], /* CJK Ideograph Extension A */ + [0x419a, 0x419a], /* CJK Ideograph Extension A */ + [0x419b, 0x419b], /* CJK Ideograph Extension A */ + [0x419c, 0x419c], /* CJK Ideograph Extension A */ + [0x419d, 0x419d], /* CJK Ideograph Extension A */ + [0x419e, 0x419e], /* CJK Ideograph Extension A */ + [0x419f, 0x419f], /* CJK Ideograph Extension A */ + [0x41a0, 0x41a0], /* CJK Ideograph Extension A */ + [0x41a1, 0x41a1], /* CJK Ideograph Extension A */ + [0x41a2, 0x41a2], /* CJK Ideograph Extension A */ + [0x41a3, 0x41a3], /* CJK Ideograph Extension A */ + [0x41a4, 0x41a4], /* CJK Ideograph Extension A */ + [0x41a5, 0x41a5], /* CJK Ideograph Extension A */ + [0x41a6, 0x41a6], /* CJK Ideograph Extension A */ + [0x41a7, 0x41a7], /* CJK Ideograph Extension A */ + [0x41a8, 0x41a8], /* CJK Ideograph Extension A */ + [0x41a9, 0x41a9], /* CJK Ideograph Extension A */ + [0x41aa, 0x41aa], /* CJK Ideograph Extension A */ + [0x41ab, 0x41ab], /* CJK Ideograph Extension A */ + [0x41ac, 0x41ac], /* CJK Ideograph Extension A */ + [0x41ad, 0x41ad], /* CJK Ideograph Extension A */ + [0x41ae, 0x41ae], /* CJK Ideograph Extension A */ + [0x41af, 0x41af], /* CJK Ideograph Extension A */ + [0x41b0, 0x41b0], /* CJK Ideograph Extension A */ + [0x41b1, 0x41b1], /* CJK Ideograph Extension A */ + [0x41b2, 0x41b2], /* CJK Ideograph Extension A */ + [0x41b3, 0x41b3], /* CJK Ideograph Extension A */ + [0x41b4, 0x41b4], /* CJK Ideograph Extension A */ + [0x41b5, 0x41b5], /* CJK Ideograph Extension A */ + [0x41b6, 0x41b6], /* CJK Ideograph Extension A */ + [0x41b7, 0x41b7], /* CJK Ideograph Extension A */ + [0x41b8, 0x41b8], /* CJK Ideograph Extension A */ + [0x41b9, 0x41b9], /* CJK Ideograph Extension A */ + [0x41ba, 0x41ba], /* CJK Ideograph Extension A */ + [0x41bb, 0x41bb], /* CJK Ideograph Extension A */ + [0x41bc, 0x41bc], /* CJK Ideograph Extension A */ + [0x41bd, 0x41bd], /* CJK Ideograph Extension A */ + [0x41be, 0x41be], /* CJK Ideograph Extension A */ + [0x41bf, 0x41bf], /* CJK Ideograph Extension A */ + [0x41c0, 0x41c0], /* CJK Ideograph Extension A */ + [0x41c1, 0x41c1], /* CJK Ideograph Extension A */ + [0x41c2, 0x41c2], /* CJK Ideograph Extension A */ + [0x41c3, 0x41c3], /* CJK Ideograph Extension A */ + [0x41c4, 0x41c4], /* CJK Ideograph Extension A */ + [0x41c5, 0x41c5], /* CJK Ideograph Extension A */ + [0x41c6, 0x41c6], /* CJK Ideograph Extension A */ + [0x41c7, 0x41c7], /* CJK Ideograph Extension A */ + [0x41c8, 0x41c8], /* CJK Ideograph Extension A */ + [0x41c9, 0x41c9], /* CJK Ideograph Extension A */ + [0x41ca, 0x41ca], /* CJK Ideograph Extension A */ + [0x41cb, 0x41cb], /* CJK Ideograph Extension A */ + [0x41cc, 0x41cc], /* CJK Ideograph Extension A */ + [0x41cd, 0x41cd], /* CJK Ideograph Extension A */ + [0x41ce, 0x41ce], /* CJK Ideograph Extension A */ + [0x41cf, 0x41cf], /* CJK Ideograph Extension A */ + [0x41d0, 0x41d0], /* CJK Ideograph Extension A */ + [0x41d1, 0x41d1], /* CJK Ideograph Extension A */ + [0x41d2, 0x41d2], /* CJK Ideograph Extension A */ + [0x41d3, 0x41d3], /* CJK Ideograph Extension A */ + [0x41d4, 0x41d4], /* CJK Ideograph Extension A */ + [0x41d5, 0x41d5], /* CJK Ideograph Extension A */ + [0x41d6, 0x41d6], /* CJK Ideograph Extension A */ + [0x41d7, 0x41d7], /* CJK Ideograph Extension A */ + [0x41d8, 0x41d8], /* CJK Ideograph Extension A */ + [0x41d9, 0x41d9], /* CJK Ideograph Extension A */ + [0x41da, 0x41da], /* CJK Ideograph Extension A */ + [0x41db, 0x41db], /* CJK Ideograph Extension A */ + [0x41dc, 0x41dc], /* CJK Ideograph Extension A */ + [0x41dd, 0x41dd], /* CJK Ideograph Extension A */ + [0x41de, 0x41de], /* CJK Ideograph Extension A */ + [0x41df, 0x41df], /* CJK Ideograph Extension A */ + [0x41e0, 0x41e0], /* CJK Ideograph Extension A */ + [0x41e1, 0x41e1], /* CJK Ideograph Extension A */ + [0x41e2, 0x41e2], /* CJK Ideograph Extension A */ + [0x41e3, 0x41e3], /* CJK Ideograph Extension A */ + [0x41e4, 0x41e4], /* CJK Ideograph Extension A */ + [0x41e5, 0x41e5], /* CJK Ideograph Extension A */ + [0x41e6, 0x41e6], /* CJK Ideograph Extension A */ + [0x41e7, 0x41e7], /* CJK Ideograph Extension A */ + [0x41e8, 0x41e8], /* CJK Ideograph Extension A */ + [0x41e9, 0x41e9], /* CJK Ideograph Extension A */ + [0x41ea, 0x41ea], /* CJK Ideograph Extension A */ + [0x41eb, 0x41eb], /* CJK Ideograph Extension A */ + [0x41ec, 0x41ec], /* CJK Ideograph Extension A */ + [0x41ed, 0x41ed], /* CJK Ideograph Extension A */ + [0x41ee, 0x41ee], /* CJK Ideograph Extension A */ + [0x41ef, 0x41ef], /* CJK Ideograph Extension A */ + [0x41f0, 0x41f0], /* CJK Ideograph Extension A */ + [0x41f1, 0x41f1], /* CJK Ideograph Extension A */ + [0x41f2, 0x41f2], /* CJK Ideograph Extension A */ + [0x41f3, 0x41f3], /* CJK Ideograph Extension A */ + [0x41f4, 0x41f4], /* CJK Ideograph Extension A */ + [0x41f5, 0x41f5], /* CJK Ideograph Extension A */ + [0x41f6, 0x41f6], /* CJK Ideograph Extension A */ + [0x41f7, 0x41f7], /* CJK Ideograph Extension A */ + [0x41f8, 0x41f8], /* CJK Ideograph Extension A */ + [0x41f9, 0x41f9], /* CJK Ideograph Extension A */ + [0x41fa, 0x41fa], /* CJK Ideograph Extension A */ + [0x41fb, 0x41fb], /* CJK Ideograph Extension A */ + [0x41fc, 0x41fc], /* CJK Ideograph Extension A */ + [0x41fd, 0x41fd], /* CJK Ideograph Extension A */ + [0x41fe, 0x41fe], /* CJK Ideograph Extension A */ + [0x41ff, 0x41ff], /* CJK Ideograph Extension A */ + [0x4200, 0x4200], /* CJK Ideograph Extension A */ + [0x4201, 0x4201], /* CJK Ideograph Extension A */ + [0x4202, 0x4202], /* CJK Ideograph Extension A */ + [0x4203, 0x4203], /* CJK Ideograph Extension A */ + [0x4204, 0x4204], /* CJK Ideograph Extension A */ + [0x4205, 0x4205], /* CJK Ideograph Extension A */ + [0x4206, 0x4206], /* CJK Ideograph Extension A */ + [0x4207, 0x4207], /* CJK Ideograph Extension A */ + [0x4208, 0x4208], /* CJK Ideograph Extension A */ + [0x4209, 0x4209], /* CJK Ideograph Extension A */ + [0x420a, 0x420a], /* CJK Ideograph Extension A */ + [0x420b, 0x420b], /* CJK Ideograph Extension A */ + [0x420c, 0x420c], /* CJK Ideograph Extension A */ + [0x420d, 0x420d], /* CJK Ideograph Extension A */ + [0x420e, 0x420e], /* CJK Ideograph Extension A */ + [0x420f, 0x420f], /* CJK Ideograph Extension A */ + [0x4210, 0x4210], /* CJK Ideograph Extension A */ + [0x4211, 0x4211], /* CJK Ideograph Extension A */ + [0x4212, 0x4212], /* CJK Ideograph Extension A */ + [0x4213, 0x4213], /* CJK Ideograph Extension A */ + [0x4214, 0x4214], /* CJK Ideograph Extension A */ + [0x4215, 0x4215], /* CJK Ideograph Extension A */ + [0x4216, 0x4216], /* CJK Ideograph Extension A */ + [0x4217, 0x4217], /* CJK Ideograph Extension A */ + [0x4218, 0x4218], /* CJK Ideograph Extension A */ + [0x4219, 0x4219], /* CJK Ideograph Extension A */ + [0x421a, 0x421a], /* CJK Ideograph Extension A */ + [0x421b, 0x421b], /* CJK Ideograph Extension A */ + [0x421c, 0x421c], /* CJK Ideograph Extension A */ + [0x421d, 0x421d], /* CJK Ideograph Extension A */ + [0x421e, 0x421e], /* CJK Ideograph Extension A */ + [0x421f, 0x421f], /* CJK Ideograph Extension A */ + [0x4220, 0x4220], /* CJK Ideograph Extension A */ + [0x4221, 0x4221], /* CJK Ideograph Extension A */ + [0x4222, 0x4222], /* CJK Ideograph Extension A */ + [0x4223, 0x4223], /* CJK Ideograph Extension A */ + [0x4224, 0x4224], /* CJK Ideograph Extension A */ + [0x4225, 0x4225], /* CJK Ideograph Extension A */ + [0x4226, 0x4226], /* CJK Ideograph Extension A */ + [0x4227, 0x4227], /* CJK Ideograph Extension A */ + [0x4228, 0x4228], /* CJK Ideograph Extension A */ + [0x4229, 0x4229], /* CJK Ideograph Extension A */ + [0x422a, 0x422a], /* CJK Ideograph Extension A */ + [0x422b, 0x422b], /* CJK Ideograph Extension A */ + [0x422c, 0x422c], /* CJK Ideograph Extension A */ + [0x422d, 0x422d], /* CJK Ideograph Extension A */ + [0x422e, 0x422e], /* CJK Ideograph Extension A */ + [0x422f, 0x422f], /* CJK Ideograph Extension A */ + [0x4230, 0x4230], /* CJK Ideograph Extension A */ + [0x4231, 0x4231], /* CJK Ideograph Extension A */ + [0x4232, 0x4232], /* CJK Ideograph Extension A */ + [0x4233, 0x4233], /* CJK Ideograph Extension A */ + [0x4234, 0x4234], /* CJK Ideograph Extension A */ + [0x4235, 0x4235], /* CJK Ideograph Extension A */ + [0x4236, 0x4236], /* CJK Ideograph Extension A */ + [0x4237, 0x4237], /* CJK Ideograph Extension A */ + [0x4238, 0x4238], /* CJK Ideograph Extension A */ + [0x4239, 0x4239], /* CJK Ideograph Extension A */ + [0x423a, 0x423a], /* CJK Ideograph Extension A */ + [0x423b, 0x423b], /* CJK Ideograph Extension A */ + [0x423c, 0x423c], /* CJK Ideograph Extension A */ + [0x423d, 0x423d], /* CJK Ideograph Extension A */ + [0x423e, 0x423e], /* CJK Ideograph Extension A */ + [0x423f, 0x423f], /* CJK Ideograph Extension A */ + [0x4240, 0x4240], /* CJK Ideograph Extension A */ + [0x4241, 0x4241], /* CJK Ideograph Extension A */ + [0x4242, 0x4242], /* CJK Ideograph Extension A */ + [0x4243, 0x4243], /* CJK Ideograph Extension A */ + [0x4244, 0x4244], /* CJK Ideograph Extension A */ + [0x4245, 0x4245], /* CJK Ideograph Extension A */ + [0x4246, 0x4246], /* CJK Ideograph Extension A */ + [0x4247, 0x4247], /* CJK Ideograph Extension A */ + [0x4248, 0x4248], /* CJK Ideograph Extension A */ + [0x4249, 0x4249], /* CJK Ideograph Extension A */ + [0x424a, 0x424a], /* CJK Ideograph Extension A */ + [0x424b, 0x424b], /* CJK Ideograph Extension A */ + [0x424c, 0x424c], /* CJK Ideograph Extension A */ + [0x424d, 0x424d], /* CJK Ideograph Extension A */ + [0x424e, 0x424e], /* CJK Ideograph Extension A */ + [0x424f, 0x424f], /* CJK Ideograph Extension A */ + [0x4250, 0x4250], /* CJK Ideograph Extension A */ + [0x4251, 0x4251], /* CJK Ideograph Extension A */ + [0x4252, 0x4252], /* CJK Ideograph Extension A */ + [0x4253, 0x4253], /* CJK Ideograph Extension A */ + [0x4254, 0x4254], /* CJK Ideograph Extension A */ + [0x4255, 0x4255], /* CJK Ideograph Extension A */ + [0x4256, 0x4256], /* CJK Ideograph Extension A */ + [0x4257, 0x4257], /* CJK Ideograph Extension A */ + [0x4258, 0x4258], /* CJK Ideograph Extension A */ + [0x4259, 0x4259], /* CJK Ideograph Extension A */ + [0x425a, 0x425a], /* CJK Ideograph Extension A */ + [0x425b, 0x425b], /* CJK Ideograph Extension A */ + [0x425c, 0x425c], /* CJK Ideograph Extension A */ + [0x425d, 0x425d], /* CJK Ideograph Extension A */ + [0x425e, 0x425e], /* CJK Ideograph Extension A */ + [0x425f, 0x425f], /* CJK Ideograph Extension A */ + [0x4260, 0x4260], /* CJK Ideograph Extension A */ + [0x4261, 0x4261], /* CJK Ideograph Extension A */ + [0x4262, 0x4262], /* CJK Ideograph Extension A */ + [0x4263, 0x4263], /* CJK Ideograph Extension A */ + [0x4264, 0x4264], /* CJK Ideograph Extension A */ + [0x4265, 0x4265], /* CJK Ideograph Extension A */ + [0x4266, 0x4266], /* CJK Ideograph Extension A */ + [0x4267, 0x4267], /* CJK Ideograph Extension A */ + [0x4268, 0x4268], /* CJK Ideograph Extension A */ + [0x4269, 0x4269], /* CJK Ideograph Extension A */ + [0x426a, 0x426a], /* CJK Ideograph Extension A */ + [0x426b, 0x426b], /* CJK Ideograph Extension A */ + [0x426c, 0x426c], /* CJK Ideograph Extension A */ + [0x426d, 0x426d], /* CJK Ideograph Extension A */ + [0x426e, 0x426e], /* CJK Ideograph Extension A */ + [0x426f, 0x426f], /* CJK Ideograph Extension A */ + [0x4270, 0x4270], /* CJK Ideograph Extension A */ + [0x4271, 0x4271], /* CJK Ideograph Extension A */ + [0x4272, 0x4272], /* CJK Ideograph Extension A */ + [0x4273, 0x4273], /* CJK Ideograph Extension A */ + [0x4274, 0x4274], /* CJK Ideograph Extension A */ + [0x4275, 0x4275], /* CJK Ideograph Extension A */ + [0x4276, 0x4276], /* CJK Ideograph Extension A */ + [0x4277, 0x4277], /* CJK Ideograph Extension A */ + [0x4278, 0x4278], /* CJK Ideograph Extension A */ + [0x4279, 0x4279], /* CJK Ideograph Extension A */ + [0x427a, 0x427a], /* CJK Ideograph Extension A */ + [0x427b, 0x427b], /* CJK Ideograph Extension A */ + [0x427c, 0x427c], /* CJK Ideograph Extension A */ + [0x427d, 0x427d], /* CJK Ideograph Extension A */ + [0x427e, 0x427e], /* CJK Ideograph Extension A */ + [0x427f, 0x427f], /* CJK Ideograph Extension A */ + [0x4280, 0x4280], /* CJK Ideograph Extension A */ + [0x4281, 0x4281], /* CJK Ideograph Extension A */ + [0x4282, 0x4282], /* CJK Ideograph Extension A */ + [0x4283, 0x4283], /* CJK Ideograph Extension A */ + [0x4284, 0x4284], /* CJK Ideograph Extension A */ + [0x4285, 0x4285], /* CJK Ideograph Extension A */ + [0x4286, 0x4286], /* CJK Ideograph Extension A */ + [0x4287, 0x4287], /* CJK Ideograph Extension A */ + [0x4288, 0x4288], /* CJK Ideograph Extension A */ + [0x4289, 0x4289], /* CJK Ideograph Extension A */ + [0x428a, 0x428a], /* CJK Ideograph Extension A */ + [0x428b, 0x428b], /* CJK Ideograph Extension A */ + [0x428c, 0x428c], /* CJK Ideograph Extension A */ + [0x428d, 0x428d], /* CJK Ideograph Extension A */ + [0x428e, 0x428e], /* CJK Ideograph Extension A */ + [0x428f, 0x428f], /* CJK Ideograph Extension A */ + [0x4290, 0x4290], /* CJK Ideograph Extension A */ + [0x4291, 0x4291], /* CJK Ideograph Extension A */ + [0x4292, 0x4292], /* CJK Ideograph Extension A */ + [0x4293, 0x4293], /* CJK Ideograph Extension A */ + [0x4294, 0x4294], /* CJK Ideograph Extension A */ + [0x4295, 0x4295], /* CJK Ideograph Extension A */ + [0x4296, 0x4296], /* CJK Ideograph Extension A */ + [0x4297, 0x4297], /* CJK Ideograph Extension A */ + [0x4298, 0x4298], /* CJK Ideograph Extension A */ + [0x4299, 0x4299], /* CJK Ideograph Extension A */ + [0x429a, 0x429a], /* CJK Ideograph Extension A */ + [0x429b, 0x429b], /* CJK Ideograph Extension A */ + [0x429c, 0x429c], /* CJK Ideograph Extension A */ + [0x429d, 0x429d], /* CJK Ideograph Extension A */ + [0x429e, 0x429e], /* CJK Ideograph Extension A */ + [0x429f, 0x429f], /* CJK Ideograph Extension A */ + [0x42a0, 0x42a0], /* CJK Ideograph Extension A */ + [0x42a1, 0x42a1], /* CJK Ideograph Extension A */ + [0x42a2, 0x42a2], /* CJK Ideograph Extension A */ + [0x42a3, 0x42a3], /* CJK Ideograph Extension A */ + [0x42a4, 0x42a4], /* CJK Ideograph Extension A */ + [0x42a5, 0x42a5], /* CJK Ideograph Extension A */ + [0x42a6, 0x42a6], /* CJK Ideograph Extension A */ + [0x42a7, 0x42a7], /* CJK Ideograph Extension A */ + [0x42a8, 0x42a8], /* CJK Ideograph Extension A */ + [0x42a9, 0x42a9], /* CJK Ideograph Extension A */ + [0x42aa, 0x42aa], /* CJK Ideograph Extension A */ + [0x42ab, 0x42ab], /* CJK Ideograph Extension A */ + [0x42ac, 0x42ac], /* CJK Ideograph Extension A */ + [0x42ad, 0x42ad], /* CJK Ideograph Extension A */ + [0x42ae, 0x42ae], /* CJK Ideograph Extension A */ + [0x42af, 0x42af], /* CJK Ideograph Extension A */ + [0x42b0, 0x42b0], /* CJK Ideograph Extension A */ + [0x42b1, 0x42b1], /* CJK Ideograph Extension A */ + [0x42b2, 0x42b2], /* CJK Ideograph Extension A */ + [0x42b3, 0x42b3], /* CJK Ideograph Extension A */ + [0x42b4, 0x42b4], /* CJK Ideograph Extension A */ + [0x42b5, 0x42b5], /* CJK Ideograph Extension A */ + [0x42b6, 0x42b6], /* CJK Ideograph Extension A */ + [0x42b7, 0x42b7], /* CJK Ideograph Extension A */ + [0x42b8, 0x42b8], /* CJK Ideograph Extension A */ + [0x42b9, 0x42b9], /* CJK Ideograph Extension A */ + [0x42ba, 0x42ba], /* CJK Ideograph Extension A */ + [0x42bb, 0x42bb], /* CJK Ideograph Extension A */ + [0x42bc, 0x42bc], /* CJK Ideograph Extension A */ + [0x42bd, 0x42bd], /* CJK Ideograph Extension A */ + [0x42be, 0x42be], /* CJK Ideograph Extension A */ + [0x42bf, 0x42bf], /* CJK Ideograph Extension A */ + [0x42c0, 0x42c0], /* CJK Ideograph Extension A */ + [0x42c1, 0x42c1], /* CJK Ideograph Extension A */ + [0x42c2, 0x42c2], /* CJK Ideograph Extension A */ + [0x42c3, 0x42c3], /* CJK Ideograph Extension A */ + [0x42c4, 0x42c4], /* CJK Ideograph Extension A */ + [0x42c5, 0x42c5], /* CJK Ideograph Extension A */ + [0x42c6, 0x42c6], /* CJK Ideograph Extension A */ + [0x42c7, 0x42c7], /* CJK Ideograph Extension A */ + [0x42c8, 0x42c8], /* CJK Ideograph Extension A */ + [0x42c9, 0x42c9], /* CJK Ideograph Extension A */ + [0x42ca, 0x42ca], /* CJK Ideograph Extension A */ + [0x42cb, 0x42cb], /* CJK Ideograph Extension A */ + [0x42cc, 0x42cc], /* CJK Ideograph Extension A */ + [0x42cd, 0x42cd], /* CJK Ideograph Extension A */ + [0x42ce, 0x42ce], /* CJK Ideograph Extension A */ + [0x42cf, 0x42cf], /* CJK Ideograph Extension A */ + [0x42d0, 0x42d0], /* CJK Ideograph Extension A */ + [0x42d1, 0x42d1], /* CJK Ideograph Extension A */ + [0x42d2, 0x42d2], /* CJK Ideograph Extension A */ + [0x42d3, 0x42d3], /* CJK Ideograph Extension A */ + [0x42d4, 0x42d4], /* CJK Ideograph Extension A */ + [0x42d5, 0x42d5], /* CJK Ideograph Extension A */ + [0x42d6, 0x42d6], /* CJK Ideograph Extension A */ + [0x42d7, 0x42d7], /* CJK Ideograph Extension A */ + [0x42d8, 0x42d8], /* CJK Ideograph Extension A */ + [0x42d9, 0x42d9], /* CJK Ideograph Extension A */ + [0x42da, 0x42da], /* CJK Ideograph Extension A */ + [0x42db, 0x42db], /* CJK Ideograph Extension A */ + [0x42dc, 0x42dc], /* CJK Ideograph Extension A */ + [0x42dd, 0x42dd], /* CJK Ideograph Extension A */ + [0x42de, 0x42de], /* CJK Ideograph Extension A */ + [0x42df, 0x42df], /* CJK Ideograph Extension A */ + [0x42e0, 0x42e0], /* CJK Ideograph Extension A */ + [0x42e1, 0x42e1], /* CJK Ideograph Extension A */ + [0x42e2, 0x42e2], /* CJK Ideograph Extension A */ + [0x42e3, 0x42e3], /* CJK Ideograph Extension A */ + [0x42e4, 0x42e4], /* CJK Ideograph Extension A */ + [0x42e5, 0x42e5], /* CJK Ideograph Extension A */ + [0x42e6, 0x42e6], /* CJK Ideograph Extension A */ + [0x42e7, 0x42e7], /* CJK Ideograph Extension A */ + [0x42e8, 0x42e8], /* CJK Ideograph Extension A */ + [0x42e9, 0x42e9], /* CJK Ideograph Extension A */ + [0x42ea, 0x42ea], /* CJK Ideograph Extension A */ + [0x42eb, 0x42eb], /* CJK Ideograph Extension A */ + [0x42ec, 0x42ec], /* CJK Ideograph Extension A */ + [0x42ed, 0x42ed], /* CJK Ideograph Extension A */ + [0x42ee, 0x42ee], /* CJK Ideograph Extension A */ + [0x42ef, 0x42ef], /* CJK Ideograph Extension A */ + [0x42f0, 0x42f0], /* CJK Ideograph Extension A */ + [0x42f1, 0x42f1], /* CJK Ideograph Extension A */ + [0x42f2, 0x42f2], /* CJK Ideograph Extension A */ + [0x42f3, 0x42f3], /* CJK Ideograph Extension A */ + [0x42f4, 0x42f4], /* CJK Ideograph Extension A */ + [0x42f5, 0x42f5], /* CJK Ideograph Extension A */ + [0x42f6, 0x42f6], /* CJK Ideograph Extension A */ + [0x42f7, 0x42f7], /* CJK Ideograph Extension A */ + [0x42f8, 0x42f8], /* CJK Ideograph Extension A */ + [0x42f9, 0x42f9], /* CJK Ideograph Extension A */ + [0x42fa, 0x42fa], /* CJK Ideograph Extension A */ + [0x42fb, 0x42fb], /* CJK Ideograph Extension A */ + [0x42fc, 0x42fc], /* CJK Ideograph Extension A */ + [0x42fd, 0x42fd], /* CJK Ideograph Extension A */ + [0x42fe, 0x42fe], /* CJK Ideograph Extension A */ + [0x42ff, 0x42ff], /* CJK Ideograph Extension A */ + [0x4300, 0x4300], /* CJK Ideograph Extension A */ + [0x4301, 0x4301], /* CJK Ideograph Extension A */ + [0x4302, 0x4302], /* CJK Ideograph Extension A */ + [0x4303, 0x4303], /* CJK Ideograph Extension A */ + [0x4304, 0x4304], /* CJK Ideograph Extension A */ + [0x4305, 0x4305], /* CJK Ideograph Extension A */ + [0x4306, 0x4306], /* CJK Ideograph Extension A */ + [0x4307, 0x4307], /* CJK Ideograph Extension A */ + [0x4308, 0x4308], /* CJK Ideograph Extension A */ + [0x4309, 0x4309], /* CJK Ideograph Extension A */ + [0x430a, 0x430a], /* CJK Ideograph Extension A */ + [0x430b, 0x430b], /* CJK Ideograph Extension A */ + [0x430c, 0x430c], /* CJK Ideograph Extension A */ + [0x430d, 0x430d], /* CJK Ideograph Extension A */ + [0x430e, 0x430e], /* CJK Ideograph Extension A */ + [0x430f, 0x430f], /* CJK Ideograph Extension A */ + [0x4310, 0x4310], /* CJK Ideograph Extension A */ + [0x4311, 0x4311], /* CJK Ideograph Extension A */ + [0x4312, 0x4312], /* CJK Ideograph Extension A */ + [0x4313, 0x4313], /* CJK Ideograph Extension A */ + [0x4314, 0x4314], /* CJK Ideograph Extension A */ + [0x4315, 0x4315], /* CJK Ideograph Extension A */ + [0x4316, 0x4316], /* CJK Ideograph Extension A */ + [0x4317, 0x4317], /* CJK Ideograph Extension A */ + [0x4318, 0x4318], /* CJK Ideograph Extension A */ + [0x4319, 0x4319], /* CJK Ideograph Extension A */ + [0x431a, 0x431a], /* CJK Ideograph Extension A */ + [0x431b, 0x431b], /* CJK Ideograph Extension A */ + [0x431c, 0x431c], /* CJK Ideograph Extension A */ + [0x431d, 0x431d], /* CJK Ideograph Extension A */ + [0x431e, 0x431e], /* CJK Ideograph Extension A */ + [0x431f, 0x431f], /* CJK Ideograph Extension A */ + [0x4320, 0x4320], /* CJK Ideograph Extension A */ + [0x4321, 0x4321], /* CJK Ideograph Extension A */ + [0x4322, 0x4322], /* CJK Ideograph Extension A */ + [0x4323, 0x4323], /* CJK Ideograph Extension A */ + [0x4324, 0x4324], /* CJK Ideograph Extension A */ + [0x4325, 0x4325], /* CJK Ideograph Extension A */ + [0x4326, 0x4326], /* CJK Ideograph Extension A */ + [0x4327, 0x4327], /* CJK Ideograph Extension A */ + [0x4328, 0x4328], /* CJK Ideograph Extension A */ + [0x4329, 0x4329], /* CJK Ideograph Extension A */ + [0x432a, 0x432a], /* CJK Ideograph Extension A */ + [0x432b, 0x432b], /* CJK Ideograph Extension A */ + [0x432c, 0x432c], /* CJK Ideograph Extension A */ + [0x432d, 0x432d], /* CJK Ideograph Extension A */ + [0x432e, 0x432e], /* CJK Ideograph Extension A */ + [0x432f, 0x432f], /* CJK Ideograph Extension A */ + [0x4330, 0x4330], /* CJK Ideograph Extension A */ + [0x4331, 0x4331], /* CJK Ideograph Extension A */ + [0x4332, 0x4332], /* CJK Ideograph Extension A */ + [0x4333, 0x4333], /* CJK Ideograph Extension A */ + [0x4334, 0x4334], /* CJK Ideograph Extension A */ + [0x4335, 0x4335], /* CJK Ideograph Extension A */ + [0x4336, 0x4336], /* CJK Ideograph Extension A */ + [0x4337, 0x4337], /* CJK Ideograph Extension A */ + [0x4338, 0x4338], /* CJK Ideograph Extension A */ + [0x4339, 0x4339], /* CJK Ideograph Extension A */ + [0x433a, 0x433a], /* CJK Ideograph Extension A */ + [0x433b, 0x433b], /* CJK Ideograph Extension A */ + [0x433c, 0x433c], /* CJK Ideograph Extension A */ + [0x433d, 0x433d], /* CJK Ideograph Extension A */ + [0x433e, 0x433e], /* CJK Ideograph Extension A */ + [0x433f, 0x433f], /* CJK Ideograph Extension A */ + [0x4340, 0x4340], /* CJK Ideograph Extension A */ + [0x4341, 0x4341], /* CJK Ideograph Extension A */ + [0x4342, 0x4342], /* CJK Ideograph Extension A */ + [0x4343, 0x4343], /* CJK Ideograph Extension A */ + [0x4344, 0x4344], /* CJK Ideograph Extension A */ + [0x4345, 0x4345], /* CJK Ideograph Extension A */ + [0x4346, 0x4346], /* CJK Ideograph Extension A */ + [0x4347, 0x4347], /* CJK Ideograph Extension A */ + [0x4348, 0x4348], /* CJK Ideograph Extension A */ + [0x4349, 0x4349], /* CJK Ideograph Extension A */ + [0x434a, 0x434a], /* CJK Ideograph Extension A */ + [0x434b, 0x434b], /* CJK Ideograph Extension A */ + [0x434c, 0x434c], /* CJK Ideograph Extension A */ + [0x434d, 0x434d], /* CJK Ideograph Extension A */ + [0x434e, 0x434e], /* CJK Ideograph Extension A */ + [0x434f, 0x434f], /* CJK Ideograph Extension A */ + [0x4350, 0x4350], /* CJK Ideograph Extension A */ + [0x4351, 0x4351], /* CJK Ideograph Extension A */ + [0x4352, 0x4352], /* CJK Ideograph Extension A */ + [0x4353, 0x4353], /* CJK Ideograph Extension A */ + [0x4354, 0x4354], /* CJK Ideograph Extension A */ + [0x4355, 0x4355], /* CJK Ideograph Extension A */ + [0x4356, 0x4356], /* CJK Ideograph Extension A */ + [0x4357, 0x4357], /* CJK Ideograph Extension A */ + [0x4358, 0x4358], /* CJK Ideograph Extension A */ + [0x4359, 0x4359], /* CJK Ideograph Extension A */ + [0x435a, 0x435a], /* CJK Ideograph Extension A */ + [0x435b, 0x435b], /* CJK Ideograph Extension A */ + [0x435c, 0x435c], /* CJK Ideograph Extension A */ + [0x435d, 0x435d], /* CJK Ideograph Extension A */ + [0x435e, 0x435e], /* CJK Ideograph Extension A */ + [0x435f, 0x435f], /* CJK Ideograph Extension A */ + [0x4360, 0x4360], /* CJK Ideograph Extension A */ + [0x4361, 0x4361], /* CJK Ideograph Extension A */ + [0x4362, 0x4362], /* CJK Ideograph Extension A */ + [0x4363, 0x4363], /* CJK Ideograph Extension A */ + [0x4364, 0x4364], /* CJK Ideograph Extension A */ + [0x4365, 0x4365], /* CJK Ideograph Extension A */ + [0x4366, 0x4366], /* CJK Ideograph Extension A */ + [0x4367, 0x4367], /* CJK Ideograph Extension A */ + [0x4368, 0x4368], /* CJK Ideograph Extension A */ + [0x4369, 0x4369], /* CJK Ideograph Extension A */ + [0x436a, 0x436a], /* CJK Ideograph Extension A */ + [0x436b, 0x436b], /* CJK Ideograph Extension A */ + [0x436c, 0x436c], /* CJK Ideograph Extension A */ + [0x436d, 0x436d], /* CJK Ideograph Extension A */ + [0x436e, 0x436e], /* CJK Ideograph Extension A */ + [0x436f, 0x436f], /* CJK Ideograph Extension A */ + [0x4370, 0x4370], /* CJK Ideograph Extension A */ + [0x4371, 0x4371], /* CJK Ideograph Extension A */ + [0x4372, 0x4372], /* CJK Ideograph Extension A */ + [0x4373, 0x4373], /* CJK Ideograph Extension A */ + [0x4374, 0x4374], /* CJK Ideograph Extension A */ + [0x4375, 0x4375], /* CJK Ideograph Extension A */ + [0x4376, 0x4376], /* CJK Ideograph Extension A */ + [0x4377, 0x4377], /* CJK Ideograph Extension A */ + [0x4378, 0x4378], /* CJK Ideograph Extension A */ + [0x4379, 0x4379], /* CJK Ideograph Extension A */ + [0x437a, 0x437a], /* CJK Ideograph Extension A */ + [0x437b, 0x437b], /* CJK Ideograph Extension A */ + [0x437c, 0x437c], /* CJK Ideograph Extension A */ + [0x437d, 0x437d], /* CJK Ideograph Extension A */ + [0x437e, 0x437e], /* CJK Ideograph Extension A */ + [0x437f, 0x437f], /* CJK Ideograph Extension A */ + [0x4380, 0x4380], /* CJK Ideograph Extension A */ + [0x4381, 0x4381], /* CJK Ideograph Extension A */ + [0x4382, 0x4382], /* CJK Ideograph Extension A */ + [0x4383, 0x4383], /* CJK Ideograph Extension A */ + [0x4384, 0x4384], /* CJK Ideograph Extension A */ + [0x4385, 0x4385], /* CJK Ideograph Extension A */ + [0x4386, 0x4386], /* CJK Ideograph Extension A */ + [0x4387, 0x4387], /* CJK Ideograph Extension A */ + [0x4388, 0x4388], /* CJK Ideograph Extension A */ + [0x4389, 0x4389], /* CJK Ideograph Extension A */ + [0x438a, 0x438a], /* CJK Ideograph Extension A */ + [0x438b, 0x438b], /* CJK Ideograph Extension A */ + [0x438c, 0x438c], /* CJK Ideograph Extension A */ + [0x438d, 0x438d], /* CJK Ideograph Extension A */ + [0x438e, 0x438e], /* CJK Ideograph Extension A */ + [0x438f, 0x438f], /* CJK Ideograph Extension A */ + [0x4390, 0x4390], /* CJK Ideograph Extension A */ + [0x4391, 0x4391], /* CJK Ideograph Extension A */ + [0x4392, 0x4392], /* CJK Ideograph Extension A */ + [0x4393, 0x4393], /* CJK Ideograph Extension A */ + [0x4394, 0x4394], /* CJK Ideograph Extension A */ + [0x4395, 0x4395], /* CJK Ideograph Extension A */ + [0x4396, 0x4396], /* CJK Ideograph Extension A */ + [0x4397, 0x4397], /* CJK Ideograph Extension A */ + [0x4398, 0x4398], /* CJK Ideograph Extension A */ + [0x4399, 0x4399], /* CJK Ideograph Extension A */ + [0x439a, 0x439a], /* CJK Ideograph Extension A */ + [0x439b, 0x439b], /* CJK Ideograph Extension A */ + [0x439c, 0x439c], /* CJK Ideograph Extension A */ + [0x439d, 0x439d], /* CJK Ideograph Extension A */ + [0x439e, 0x439e], /* CJK Ideograph Extension A */ + [0x439f, 0x439f], /* CJK Ideograph Extension A */ + [0x43a0, 0x43a0], /* CJK Ideograph Extension A */ + [0x43a1, 0x43a1], /* CJK Ideograph Extension A */ + [0x43a2, 0x43a2], /* CJK Ideograph Extension A */ + [0x43a3, 0x43a3], /* CJK Ideograph Extension A */ + [0x43a4, 0x43a4], /* CJK Ideograph Extension A */ + [0x43a5, 0x43a5], /* CJK Ideograph Extension A */ + [0x43a6, 0x43a6], /* CJK Ideograph Extension A */ + [0x43a7, 0x43a7], /* CJK Ideograph Extension A */ + [0x43a8, 0x43a8], /* CJK Ideograph Extension A */ + [0x43a9, 0x43a9], /* CJK Ideograph Extension A */ + [0x43aa, 0x43aa], /* CJK Ideograph Extension A */ + [0x43ab, 0x43ab], /* CJK Ideograph Extension A */ + [0x43ac, 0x43ac], /* CJK Ideograph Extension A */ + [0x43ad, 0x43ad], /* CJK Ideograph Extension A */ + [0x43ae, 0x43ae], /* CJK Ideograph Extension A */ + [0x43af, 0x43af], /* CJK Ideograph Extension A */ + [0x43b0, 0x43b0], /* CJK Ideograph Extension A */ + [0x43b1, 0x43b1], /* CJK Ideograph Extension A */ + [0x43b2, 0x43b2], /* CJK Ideograph Extension A */ + [0x43b3, 0x43b3], /* CJK Ideograph Extension A */ + [0x43b4, 0x43b4], /* CJK Ideograph Extension A */ + [0x43b5, 0x43b5], /* CJK Ideograph Extension A */ + [0x43b6, 0x43b6], /* CJK Ideograph Extension A */ + [0x43b7, 0x43b7], /* CJK Ideograph Extension A */ + [0x43b8, 0x43b8], /* CJK Ideograph Extension A */ + [0x43b9, 0x43b9], /* CJK Ideograph Extension A */ + [0x43ba, 0x43ba], /* CJK Ideograph Extension A */ + [0x43bb, 0x43bb], /* CJK Ideograph Extension A */ + [0x43bc, 0x43bc], /* CJK Ideograph Extension A */ + [0x43bd, 0x43bd], /* CJK Ideograph Extension A */ + [0x43be, 0x43be], /* CJK Ideograph Extension A */ + [0x43bf, 0x43bf], /* CJK Ideograph Extension A */ + [0x43c0, 0x43c0], /* CJK Ideograph Extension A */ + [0x43c1, 0x43c1], /* CJK Ideograph Extension A */ + [0x43c2, 0x43c2], /* CJK Ideograph Extension A */ + [0x43c3, 0x43c3], /* CJK Ideograph Extension A */ + [0x43c4, 0x43c4], /* CJK Ideograph Extension A */ + [0x43c5, 0x43c5], /* CJK Ideograph Extension A */ + [0x43c6, 0x43c6], /* CJK Ideograph Extension A */ + [0x43c7, 0x43c7], /* CJK Ideograph Extension A */ + [0x43c8, 0x43c8], /* CJK Ideograph Extension A */ + [0x43c9, 0x43c9], /* CJK Ideograph Extension A */ + [0x43ca, 0x43ca], /* CJK Ideograph Extension A */ + [0x43cb, 0x43cb], /* CJK Ideograph Extension A */ + [0x43cc, 0x43cc], /* CJK Ideograph Extension A */ + [0x43cd, 0x43cd], /* CJK Ideograph Extension A */ + [0x43ce, 0x43ce], /* CJK Ideograph Extension A */ + [0x43cf, 0x43cf], /* CJK Ideograph Extension A */ + [0x43d0, 0x43d0], /* CJK Ideograph Extension A */ + [0x43d1, 0x43d1], /* CJK Ideograph Extension A */ + [0x43d2, 0x43d2], /* CJK Ideograph Extension A */ + [0x43d3, 0x43d3], /* CJK Ideograph Extension A */ + [0x43d4, 0x43d4], /* CJK Ideograph Extension A */ + [0x43d5, 0x43d5], /* CJK Ideograph Extension A */ + [0x43d6, 0x43d6], /* CJK Ideograph Extension A */ + [0x43d7, 0x43d7], /* CJK Ideograph Extension A */ + [0x43d8, 0x43d8], /* CJK Ideograph Extension A */ + [0x43d9, 0x43d9], /* CJK Ideograph Extension A */ + [0x43da, 0x43da], /* CJK Ideograph Extension A */ + [0x43db, 0x43db], /* CJK Ideograph Extension A */ + [0x43dc, 0x43dc], /* CJK Ideograph Extension A */ + [0x43dd, 0x43dd], /* CJK Ideograph Extension A */ + [0x43de, 0x43de], /* CJK Ideograph Extension A */ + [0x43df, 0x43df], /* CJK Ideograph Extension A */ + [0x43e0, 0x43e0], /* CJK Ideograph Extension A */ + [0x43e1, 0x43e1], /* CJK Ideograph Extension A */ + [0x43e2, 0x43e2], /* CJK Ideograph Extension A */ + [0x43e3, 0x43e3], /* CJK Ideograph Extension A */ + [0x43e4, 0x43e4], /* CJK Ideograph Extension A */ + [0x43e5, 0x43e5], /* CJK Ideograph Extension A */ + [0x43e6, 0x43e6], /* CJK Ideograph Extension A */ + [0x43e7, 0x43e7], /* CJK Ideograph Extension A */ + [0x43e8, 0x43e8], /* CJK Ideograph Extension A */ + [0x43e9, 0x43e9], /* CJK Ideograph Extension A */ + [0x43ea, 0x43ea], /* CJK Ideograph Extension A */ + [0x43eb, 0x43eb], /* CJK Ideograph Extension A */ + [0x43ec, 0x43ec], /* CJK Ideograph Extension A */ + [0x43ed, 0x43ed], /* CJK Ideograph Extension A */ + [0x43ee, 0x43ee], /* CJK Ideograph Extension A */ + [0x43ef, 0x43ef], /* CJK Ideograph Extension A */ + [0x43f0, 0x43f0], /* CJK Ideograph Extension A */ + [0x43f1, 0x43f1], /* CJK Ideograph Extension A */ + [0x43f2, 0x43f2], /* CJK Ideograph Extension A */ + [0x43f3, 0x43f3], /* CJK Ideograph Extension A */ + [0x43f4, 0x43f4], /* CJK Ideograph Extension A */ + [0x43f5, 0x43f5], /* CJK Ideograph Extension A */ + [0x43f6, 0x43f6], /* CJK Ideograph Extension A */ + [0x43f7, 0x43f7], /* CJK Ideograph Extension A */ + [0x43f8, 0x43f8], /* CJK Ideograph Extension A */ + [0x43f9, 0x43f9], /* CJK Ideograph Extension A */ + [0x43fa, 0x43fa], /* CJK Ideograph Extension A */ + [0x43fb, 0x43fb], /* CJK Ideograph Extension A */ + [0x43fc, 0x43fc], /* CJK Ideograph Extension A */ + [0x43fd, 0x43fd], /* CJK Ideograph Extension A */ + [0x43fe, 0x43fe], /* CJK Ideograph Extension A */ + [0x43ff, 0x43ff], /* CJK Ideograph Extension A */ + [0x4400, 0x4400], /* CJK Ideograph Extension A */ + [0x4401, 0x4401], /* CJK Ideograph Extension A */ + [0x4402, 0x4402], /* CJK Ideograph Extension A */ + [0x4403, 0x4403], /* CJK Ideograph Extension A */ + [0x4404, 0x4404], /* CJK Ideograph Extension A */ + [0x4405, 0x4405], /* CJK Ideograph Extension A */ + [0x4406, 0x4406], /* CJK Ideograph Extension A */ + [0x4407, 0x4407], /* CJK Ideograph Extension A */ + [0x4408, 0x4408], /* CJK Ideograph Extension A */ + [0x4409, 0x4409], /* CJK Ideograph Extension A */ + [0x440a, 0x440a], /* CJK Ideograph Extension A */ + [0x440b, 0x440b], /* CJK Ideograph Extension A */ + [0x440c, 0x440c], /* CJK Ideograph Extension A */ + [0x440d, 0x440d], /* CJK Ideograph Extension A */ + [0x440e, 0x440e], /* CJK Ideograph Extension A */ + [0x440f, 0x440f], /* CJK Ideograph Extension A */ + [0x4410, 0x4410], /* CJK Ideograph Extension A */ + [0x4411, 0x4411], /* CJK Ideograph Extension A */ + [0x4412, 0x4412], /* CJK Ideograph Extension A */ + [0x4413, 0x4413], /* CJK Ideograph Extension A */ + [0x4414, 0x4414], /* CJK Ideograph Extension A */ + [0x4415, 0x4415], /* CJK Ideograph Extension A */ + [0x4416, 0x4416], /* CJK Ideograph Extension A */ + [0x4417, 0x4417], /* CJK Ideograph Extension A */ + [0x4418, 0x4418], /* CJK Ideograph Extension A */ + [0x4419, 0x4419], /* CJK Ideograph Extension A */ + [0x441a, 0x441a], /* CJK Ideograph Extension A */ + [0x441b, 0x441b], /* CJK Ideograph Extension A */ + [0x441c, 0x441c], /* CJK Ideograph Extension A */ + [0x441d, 0x441d], /* CJK Ideograph Extension A */ + [0x441e, 0x441e], /* CJK Ideograph Extension A */ + [0x441f, 0x441f], /* CJK Ideograph Extension A */ + [0x4420, 0x4420], /* CJK Ideograph Extension A */ + [0x4421, 0x4421], /* CJK Ideograph Extension A */ + [0x4422, 0x4422], /* CJK Ideograph Extension A */ + [0x4423, 0x4423], /* CJK Ideograph Extension A */ + [0x4424, 0x4424], /* CJK Ideograph Extension A */ + [0x4425, 0x4425], /* CJK Ideograph Extension A */ + [0x4426, 0x4426], /* CJK Ideograph Extension A */ + [0x4427, 0x4427], /* CJK Ideograph Extension A */ + [0x4428, 0x4428], /* CJK Ideograph Extension A */ + [0x4429, 0x4429], /* CJK Ideograph Extension A */ + [0x442a, 0x442a], /* CJK Ideograph Extension A */ + [0x442b, 0x442b], /* CJK Ideograph Extension A */ + [0x442c, 0x442c], /* CJK Ideograph Extension A */ + [0x442d, 0x442d], /* CJK Ideograph Extension A */ + [0x442e, 0x442e], /* CJK Ideograph Extension A */ + [0x442f, 0x442f], /* CJK Ideograph Extension A */ + [0x4430, 0x4430], /* CJK Ideograph Extension A */ + [0x4431, 0x4431], /* CJK Ideograph Extension A */ + [0x4432, 0x4432], /* CJK Ideograph Extension A */ + [0x4433, 0x4433], /* CJK Ideograph Extension A */ + [0x4434, 0x4434], /* CJK Ideograph Extension A */ + [0x4435, 0x4435], /* CJK Ideograph Extension A */ + [0x4436, 0x4436], /* CJK Ideograph Extension A */ + [0x4437, 0x4437], /* CJK Ideograph Extension A */ + [0x4438, 0x4438], /* CJK Ideograph Extension A */ + [0x4439, 0x4439], /* CJK Ideograph Extension A */ + [0x443a, 0x443a], /* CJK Ideograph Extension A */ + [0x443b, 0x443b], /* CJK Ideograph Extension A */ + [0x443c, 0x443c], /* CJK Ideograph Extension A */ + [0x443d, 0x443d], /* CJK Ideograph Extension A */ + [0x443e, 0x443e], /* CJK Ideograph Extension A */ + [0x443f, 0x443f], /* CJK Ideograph Extension A */ + [0x4440, 0x4440], /* CJK Ideograph Extension A */ + [0x4441, 0x4441], /* CJK Ideograph Extension A */ + [0x4442, 0x4442], /* CJK Ideograph Extension A */ + [0x4443, 0x4443], /* CJK Ideograph Extension A */ + [0x4444, 0x4444], /* CJK Ideograph Extension A */ + [0x4445, 0x4445], /* CJK Ideograph Extension A */ + [0x4446, 0x4446], /* CJK Ideograph Extension A */ + [0x4447, 0x4447], /* CJK Ideograph Extension A */ + [0x4448, 0x4448], /* CJK Ideograph Extension A */ + [0x4449, 0x4449], /* CJK Ideograph Extension A */ + [0x444a, 0x444a], /* CJK Ideograph Extension A */ + [0x444b, 0x444b], /* CJK Ideograph Extension A */ + [0x444c, 0x444c], /* CJK Ideograph Extension A */ + [0x444d, 0x444d], /* CJK Ideograph Extension A */ + [0x444e, 0x444e], /* CJK Ideograph Extension A */ + [0x444f, 0x444f], /* CJK Ideograph Extension A */ + [0x4450, 0x4450], /* CJK Ideograph Extension A */ + [0x4451, 0x4451], /* CJK Ideograph Extension A */ + [0x4452, 0x4452], /* CJK Ideograph Extension A */ + [0x4453, 0x4453], /* CJK Ideograph Extension A */ + [0x4454, 0x4454], /* CJK Ideograph Extension A */ + [0x4455, 0x4455], /* CJK Ideograph Extension A */ + [0x4456, 0x4456], /* CJK Ideograph Extension A */ + [0x4457, 0x4457], /* CJK Ideograph Extension A */ + [0x4458, 0x4458], /* CJK Ideograph Extension A */ + [0x4459, 0x4459], /* CJK Ideograph Extension A */ + [0x445a, 0x445a], /* CJK Ideograph Extension A */ + [0x445b, 0x445b], /* CJK Ideograph Extension A */ + [0x445c, 0x445c], /* CJK Ideograph Extension A */ + [0x445d, 0x445d], /* CJK Ideograph Extension A */ + [0x445e, 0x445e], /* CJK Ideograph Extension A */ + [0x445f, 0x445f], /* CJK Ideograph Extension A */ + [0x4460, 0x4460], /* CJK Ideograph Extension A */ + [0x4461, 0x4461], /* CJK Ideograph Extension A */ + [0x4462, 0x4462], /* CJK Ideograph Extension A */ + [0x4463, 0x4463], /* CJK Ideograph Extension A */ + [0x4464, 0x4464], /* CJK Ideograph Extension A */ + [0x4465, 0x4465], /* CJK Ideograph Extension A */ + [0x4466, 0x4466], /* CJK Ideograph Extension A */ + [0x4467, 0x4467], /* CJK Ideograph Extension A */ + [0x4468, 0x4468], /* CJK Ideograph Extension A */ + [0x4469, 0x4469], /* CJK Ideograph Extension A */ + [0x446a, 0x446a], /* CJK Ideograph Extension A */ + [0x446b, 0x446b], /* CJK Ideograph Extension A */ + [0x446c, 0x446c], /* CJK Ideograph Extension A */ + [0x446d, 0x446d], /* CJK Ideograph Extension A */ + [0x446e, 0x446e], /* CJK Ideograph Extension A */ + [0x446f, 0x446f], /* CJK Ideograph Extension A */ + [0x4470, 0x4470], /* CJK Ideograph Extension A */ + [0x4471, 0x4471], /* CJK Ideograph Extension A */ + [0x4472, 0x4472], /* CJK Ideograph Extension A */ + [0x4473, 0x4473], /* CJK Ideograph Extension A */ + [0x4474, 0x4474], /* CJK Ideograph Extension A */ + [0x4475, 0x4475], /* CJK Ideograph Extension A */ + [0x4476, 0x4476], /* CJK Ideograph Extension A */ + [0x4477, 0x4477], /* CJK Ideograph Extension A */ + [0x4478, 0x4478], /* CJK Ideograph Extension A */ + [0x4479, 0x4479], /* CJK Ideograph Extension A */ + [0x447a, 0x447a], /* CJK Ideograph Extension A */ + [0x447b, 0x447b], /* CJK Ideograph Extension A */ + [0x447c, 0x447c], /* CJK Ideograph Extension A */ + [0x447d, 0x447d], /* CJK Ideograph Extension A */ + [0x447e, 0x447e], /* CJK Ideograph Extension A */ + [0x447f, 0x447f], /* CJK Ideograph Extension A */ + [0x4480, 0x4480], /* CJK Ideograph Extension A */ + [0x4481, 0x4481], /* CJK Ideograph Extension A */ + [0x4482, 0x4482], /* CJK Ideograph Extension A */ + [0x4483, 0x4483], /* CJK Ideograph Extension A */ + [0x4484, 0x4484], /* CJK Ideograph Extension A */ + [0x4485, 0x4485], /* CJK Ideograph Extension A */ + [0x4486, 0x4486], /* CJK Ideograph Extension A */ + [0x4487, 0x4487], /* CJK Ideograph Extension A */ + [0x4488, 0x4488], /* CJK Ideograph Extension A */ + [0x4489, 0x4489], /* CJK Ideograph Extension A */ + [0x448a, 0x448a], /* CJK Ideograph Extension A */ + [0x448b, 0x448b], /* CJK Ideograph Extension A */ + [0x448c, 0x448c], /* CJK Ideograph Extension A */ + [0x448d, 0x448d], /* CJK Ideograph Extension A */ + [0x448e, 0x448e], /* CJK Ideograph Extension A */ + [0x448f, 0x448f], /* CJK Ideograph Extension A */ + [0x4490, 0x4490], /* CJK Ideograph Extension A */ + [0x4491, 0x4491], /* CJK Ideograph Extension A */ + [0x4492, 0x4492], /* CJK Ideograph Extension A */ + [0x4493, 0x4493], /* CJK Ideograph Extension A */ + [0x4494, 0x4494], /* CJK Ideograph Extension A */ + [0x4495, 0x4495], /* CJK Ideograph Extension A */ + [0x4496, 0x4496], /* CJK Ideograph Extension A */ + [0x4497, 0x4497], /* CJK Ideograph Extension A */ + [0x4498, 0x4498], /* CJK Ideograph Extension A */ + [0x4499, 0x4499], /* CJK Ideograph Extension A */ + [0x449a, 0x449a], /* CJK Ideograph Extension A */ + [0x449b, 0x449b], /* CJK Ideograph Extension A */ + [0x449c, 0x449c], /* CJK Ideograph Extension A */ + [0x449d, 0x449d], /* CJK Ideograph Extension A */ + [0x449e, 0x449e], /* CJK Ideograph Extension A */ + [0x449f, 0x449f], /* CJK Ideograph Extension A */ + [0x44a0, 0x44a0], /* CJK Ideograph Extension A */ + [0x44a1, 0x44a1], /* CJK Ideograph Extension A */ + [0x44a2, 0x44a2], /* CJK Ideograph Extension A */ + [0x44a3, 0x44a3], /* CJK Ideograph Extension A */ + [0x44a4, 0x44a4], /* CJK Ideograph Extension A */ + [0x44a5, 0x44a5], /* CJK Ideograph Extension A */ + [0x44a6, 0x44a6], /* CJK Ideograph Extension A */ + [0x44a7, 0x44a7], /* CJK Ideograph Extension A */ + [0x44a8, 0x44a8], /* CJK Ideograph Extension A */ + [0x44a9, 0x44a9], /* CJK Ideograph Extension A */ + [0x44aa, 0x44aa], /* CJK Ideograph Extension A */ + [0x44ab, 0x44ab], /* CJK Ideograph Extension A */ + [0x44ac, 0x44ac], /* CJK Ideograph Extension A */ + [0x44ad, 0x44ad], /* CJK Ideograph Extension A */ + [0x44ae, 0x44ae], /* CJK Ideograph Extension A */ + [0x44af, 0x44af], /* CJK Ideograph Extension A */ + [0x44b0, 0x44b0], /* CJK Ideograph Extension A */ + [0x44b1, 0x44b1], /* CJK Ideograph Extension A */ + [0x44b2, 0x44b2], /* CJK Ideograph Extension A */ + [0x44b3, 0x44b3], /* CJK Ideograph Extension A */ + [0x44b4, 0x44b4], /* CJK Ideograph Extension A */ + [0x44b5, 0x44b5], /* CJK Ideograph Extension A */ + [0x44b6, 0x44b6], /* CJK Ideograph Extension A */ + [0x44b7, 0x44b7], /* CJK Ideograph Extension A */ + [0x44b8, 0x44b8], /* CJK Ideograph Extension A */ + [0x44b9, 0x44b9], /* CJK Ideograph Extension A */ + [0x44ba, 0x44ba], /* CJK Ideograph Extension A */ + [0x44bb, 0x44bb], /* CJK Ideograph Extension A */ + [0x44bc, 0x44bc], /* CJK Ideograph Extension A */ + [0x44bd, 0x44bd], /* CJK Ideograph Extension A */ + [0x44be, 0x44be], /* CJK Ideograph Extension A */ + [0x44bf, 0x44bf], /* CJK Ideograph Extension A */ + [0x44c0, 0x44c0], /* CJK Ideograph Extension A */ + [0x44c1, 0x44c1], /* CJK Ideograph Extension A */ + [0x44c2, 0x44c2], /* CJK Ideograph Extension A */ + [0x44c3, 0x44c3], /* CJK Ideograph Extension A */ + [0x44c4, 0x44c4], /* CJK Ideograph Extension A */ + [0x44c5, 0x44c5], /* CJK Ideograph Extension A */ + [0x44c6, 0x44c6], /* CJK Ideograph Extension A */ + [0x44c7, 0x44c7], /* CJK Ideograph Extension A */ + [0x44c8, 0x44c8], /* CJK Ideograph Extension A */ + [0x44c9, 0x44c9], /* CJK Ideograph Extension A */ + [0x44ca, 0x44ca], /* CJK Ideograph Extension A */ + [0x44cb, 0x44cb], /* CJK Ideograph Extension A */ + [0x44cc, 0x44cc], /* CJK Ideograph Extension A */ + [0x44cd, 0x44cd], /* CJK Ideograph Extension A */ + [0x44ce, 0x44ce], /* CJK Ideograph Extension A */ + [0x44cf, 0x44cf], /* CJK Ideograph Extension A */ + [0x44d0, 0x44d0], /* CJK Ideograph Extension A */ + [0x44d1, 0x44d1], /* CJK Ideograph Extension A */ + [0x44d2, 0x44d2], /* CJK Ideograph Extension A */ + [0x44d3, 0x44d3], /* CJK Ideograph Extension A */ + [0x44d4, 0x44d4], /* CJK Ideograph Extension A */ + [0x44d5, 0x44d5], /* CJK Ideograph Extension A */ + [0x44d6, 0x44d6], /* CJK Ideograph Extension A */ + [0x44d7, 0x44d7], /* CJK Ideograph Extension A */ + [0x44d8, 0x44d8], /* CJK Ideograph Extension A */ + [0x44d9, 0x44d9], /* CJK Ideograph Extension A */ + [0x44da, 0x44da], /* CJK Ideograph Extension A */ + [0x44db, 0x44db], /* CJK Ideograph Extension A */ + [0x44dc, 0x44dc], /* CJK Ideograph Extension A */ + [0x44dd, 0x44dd], /* CJK Ideograph Extension A */ + [0x44de, 0x44de], /* CJK Ideograph Extension A */ + [0x44df, 0x44df], /* CJK Ideograph Extension A */ + [0x44e0, 0x44e0], /* CJK Ideograph Extension A */ + [0x44e1, 0x44e1], /* CJK Ideograph Extension A */ + [0x44e2, 0x44e2], /* CJK Ideograph Extension A */ + [0x44e3, 0x44e3], /* CJK Ideograph Extension A */ + [0x44e4, 0x44e4], /* CJK Ideograph Extension A */ + [0x44e5, 0x44e5], /* CJK Ideograph Extension A */ + [0x44e6, 0x44e6], /* CJK Ideograph Extension A */ + [0x44e7, 0x44e7], /* CJK Ideograph Extension A */ + [0x44e8, 0x44e8], /* CJK Ideograph Extension A */ + [0x44e9, 0x44e9], /* CJK Ideograph Extension A */ + [0x44ea, 0x44ea], /* CJK Ideograph Extension A */ + [0x44eb, 0x44eb], /* CJK Ideograph Extension A */ + [0x44ec, 0x44ec], /* CJK Ideograph Extension A */ + [0x44ed, 0x44ed], /* CJK Ideograph Extension A */ + [0x44ee, 0x44ee], /* CJK Ideograph Extension A */ + [0x44ef, 0x44ef], /* CJK Ideograph Extension A */ + [0x44f0, 0x44f0], /* CJK Ideograph Extension A */ + [0x44f1, 0x44f1], /* CJK Ideograph Extension A */ + [0x44f2, 0x44f2], /* CJK Ideograph Extension A */ + [0x44f3, 0x44f3], /* CJK Ideograph Extension A */ + [0x44f4, 0x44f4], /* CJK Ideograph Extension A */ + [0x44f5, 0x44f5], /* CJK Ideograph Extension A */ + [0x44f6, 0x44f6], /* CJK Ideograph Extension A */ + [0x44f7, 0x44f7], /* CJK Ideograph Extension A */ + [0x44f8, 0x44f8], /* CJK Ideograph Extension A */ + [0x44f9, 0x44f9], /* CJK Ideograph Extension A */ + [0x44fa, 0x44fa], /* CJK Ideograph Extension A */ + [0x44fb, 0x44fb], /* CJK Ideograph Extension A */ + [0x44fc, 0x44fc], /* CJK Ideograph Extension A */ + [0x44fd, 0x44fd], /* CJK Ideograph Extension A */ + [0x44fe, 0x44fe], /* CJK Ideograph Extension A */ + [0x44ff, 0x44ff], /* CJK Ideograph Extension A */ + [0x4500, 0x4500], /* CJK Ideograph Extension A */ + [0x4501, 0x4501], /* CJK Ideograph Extension A */ + [0x4502, 0x4502], /* CJK Ideograph Extension A */ + [0x4503, 0x4503], /* CJK Ideograph Extension A */ + [0x4504, 0x4504], /* CJK Ideograph Extension A */ + [0x4505, 0x4505], /* CJK Ideograph Extension A */ + [0x4506, 0x4506], /* CJK Ideograph Extension A */ + [0x4507, 0x4507], /* CJK Ideograph Extension A */ + [0x4508, 0x4508], /* CJK Ideograph Extension A */ + [0x4509, 0x4509], /* CJK Ideograph Extension A */ + [0x450a, 0x450a], /* CJK Ideograph Extension A */ + [0x450b, 0x450b], /* CJK Ideograph Extension A */ + [0x450c, 0x450c], /* CJK Ideograph Extension A */ + [0x450d, 0x450d], /* CJK Ideograph Extension A */ + [0x450e, 0x450e], /* CJK Ideograph Extension A */ + [0x450f, 0x450f], /* CJK Ideograph Extension A */ + [0x4510, 0x4510], /* CJK Ideograph Extension A */ + [0x4511, 0x4511], /* CJK Ideograph Extension A */ + [0x4512, 0x4512], /* CJK Ideograph Extension A */ + [0x4513, 0x4513], /* CJK Ideograph Extension A */ + [0x4514, 0x4514], /* CJK Ideograph Extension A */ + [0x4515, 0x4515], /* CJK Ideograph Extension A */ + [0x4516, 0x4516], /* CJK Ideograph Extension A */ + [0x4517, 0x4517], /* CJK Ideograph Extension A */ + [0x4518, 0x4518], /* CJK Ideograph Extension A */ + [0x4519, 0x4519], /* CJK Ideograph Extension A */ + [0x451a, 0x451a], /* CJK Ideograph Extension A */ + [0x451b, 0x451b], /* CJK Ideograph Extension A */ + [0x451c, 0x451c], /* CJK Ideograph Extension A */ + [0x451d, 0x451d], /* CJK Ideograph Extension A */ + [0x451e, 0x451e], /* CJK Ideograph Extension A */ + [0x451f, 0x451f], /* CJK Ideograph Extension A */ + [0x4520, 0x4520], /* CJK Ideograph Extension A */ + [0x4521, 0x4521], /* CJK Ideograph Extension A */ + [0x4522, 0x4522], /* CJK Ideograph Extension A */ + [0x4523, 0x4523], /* CJK Ideograph Extension A */ + [0x4524, 0x4524], /* CJK Ideograph Extension A */ + [0x4525, 0x4525], /* CJK Ideograph Extension A */ + [0x4526, 0x4526], /* CJK Ideograph Extension A */ + [0x4527, 0x4527], /* CJK Ideograph Extension A */ + [0x4528, 0x4528], /* CJK Ideograph Extension A */ + [0x4529, 0x4529], /* CJK Ideograph Extension A */ + [0x452a, 0x452a], /* CJK Ideograph Extension A */ + [0x452b, 0x452b], /* CJK Ideograph Extension A */ + [0x452c, 0x452c], /* CJK Ideograph Extension A */ + [0x452d, 0x452d], /* CJK Ideograph Extension A */ + [0x452e, 0x452e], /* CJK Ideograph Extension A */ + [0x452f, 0x452f], /* CJK Ideograph Extension A */ + [0x4530, 0x4530], /* CJK Ideograph Extension A */ + [0x4531, 0x4531], /* CJK Ideograph Extension A */ + [0x4532, 0x4532], /* CJK Ideograph Extension A */ + [0x4533, 0x4533], /* CJK Ideograph Extension A */ + [0x4534, 0x4534], /* CJK Ideograph Extension A */ + [0x4535, 0x4535], /* CJK Ideograph Extension A */ + [0x4536, 0x4536], /* CJK Ideograph Extension A */ + [0x4537, 0x4537], /* CJK Ideograph Extension A */ + [0x4538, 0x4538], /* CJK Ideograph Extension A */ + [0x4539, 0x4539], /* CJK Ideograph Extension A */ + [0x453a, 0x453a], /* CJK Ideograph Extension A */ + [0x453b, 0x453b], /* CJK Ideograph Extension A */ + [0x453c, 0x453c], /* CJK Ideograph Extension A */ + [0x453d, 0x453d], /* CJK Ideograph Extension A */ + [0x453e, 0x453e], /* CJK Ideograph Extension A */ + [0x453f, 0x453f], /* CJK Ideograph Extension A */ + [0x4540, 0x4540], /* CJK Ideograph Extension A */ + [0x4541, 0x4541], /* CJK Ideograph Extension A */ + [0x4542, 0x4542], /* CJK Ideograph Extension A */ + [0x4543, 0x4543], /* CJK Ideograph Extension A */ + [0x4544, 0x4544], /* CJK Ideograph Extension A */ + [0x4545, 0x4545], /* CJK Ideograph Extension A */ + [0x4546, 0x4546], /* CJK Ideograph Extension A */ + [0x4547, 0x4547], /* CJK Ideograph Extension A */ + [0x4548, 0x4548], /* CJK Ideograph Extension A */ + [0x4549, 0x4549], /* CJK Ideograph Extension A */ + [0x454a, 0x454a], /* CJK Ideograph Extension A */ + [0x454b, 0x454b], /* CJK Ideograph Extension A */ + [0x454c, 0x454c], /* CJK Ideograph Extension A */ + [0x454d, 0x454d], /* CJK Ideograph Extension A */ + [0x454e, 0x454e], /* CJK Ideograph Extension A */ + [0x454f, 0x454f], /* CJK Ideograph Extension A */ + [0x4550, 0x4550], /* CJK Ideograph Extension A */ + [0x4551, 0x4551], /* CJK Ideograph Extension A */ + [0x4552, 0x4552], /* CJK Ideograph Extension A */ + [0x4553, 0x4553], /* CJK Ideograph Extension A */ + [0x4554, 0x4554], /* CJK Ideograph Extension A */ + [0x4555, 0x4555], /* CJK Ideograph Extension A */ + [0x4556, 0x4556], /* CJK Ideograph Extension A */ + [0x4557, 0x4557], /* CJK Ideograph Extension A */ + [0x4558, 0x4558], /* CJK Ideograph Extension A */ + [0x4559, 0x4559], /* CJK Ideograph Extension A */ + [0x455a, 0x455a], /* CJK Ideograph Extension A */ + [0x455b, 0x455b], /* CJK Ideograph Extension A */ + [0x455c, 0x455c], /* CJK Ideograph Extension A */ + [0x455d, 0x455d], /* CJK Ideograph Extension A */ + [0x455e, 0x455e], /* CJK Ideograph Extension A */ + [0x455f, 0x455f], /* CJK Ideograph Extension A */ + [0x4560, 0x4560], /* CJK Ideograph Extension A */ + [0x4561, 0x4561], /* CJK Ideograph Extension A */ + [0x4562, 0x4562], /* CJK Ideograph Extension A */ + [0x4563, 0x4563], /* CJK Ideograph Extension A */ + [0x4564, 0x4564], /* CJK Ideograph Extension A */ + [0x4565, 0x4565], /* CJK Ideograph Extension A */ + [0x4566, 0x4566], /* CJK Ideograph Extension A */ + [0x4567, 0x4567], /* CJK Ideograph Extension A */ + [0x4568, 0x4568], /* CJK Ideograph Extension A */ + [0x4569, 0x4569], /* CJK Ideograph Extension A */ + [0x456a, 0x456a], /* CJK Ideograph Extension A */ + [0x456b, 0x456b], /* CJK Ideograph Extension A */ + [0x456c, 0x456c], /* CJK Ideograph Extension A */ + [0x456d, 0x456d], /* CJK Ideograph Extension A */ + [0x456e, 0x456e], /* CJK Ideograph Extension A */ + [0x456f, 0x456f], /* CJK Ideograph Extension A */ + [0x4570, 0x4570], /* CJK Ideograph Extension A */ + [0x4571, 0x4571], /* CJK Ideograph Extension A */ + [0x4572, 0x4572], /* CJK Ideograph Extension A */ + [0x4573, 0x4573], /* CJK Ideograph Extension A */ + [0x4574, 0x4574], /* CJK Ideograph Extension A */ + [0x4575, 0x4575], /* CJK Ideograph Extension A */ + [0x4576, 0x4576], /* CJK Ideograph Extension A */ + [0x4577, 0x4577], /* CJK Ideograph Extension A */ + [0x4578, 0x4578], /* CJK Ideograph Extension A */ + [0x4579, 0x4579], /* CJK Ideograph Extension A */ + [0x457a, 0x457a], /* CJK Ideograph Extension A */ + [0x457b, 0x457b], /* CJK Ideograph Extension A */ + [0x457c, 0x457c], /* CJK Ideograph Extension A */ + [0x457d, 0x457d], /* CJK Ideograph Extension A */ + [0x457e, 0x457e], /* CJK Ideograph Extension A */ + [0x457f, 0x457f], /* CJK Ideograph Extension A */ + [0x4580, 0x4580], /* CJK Ideograph Extension A */ + [0x4581, 0x4581], /* CJK Ideograph Extension A */ + [0x4582, 0x4582], /* CJK Ideograph Extension A */ + [0x4583, 0x4583], /* CJK Ideograph Extension A */ + [0x4584, 0x4584], /* CJK Ideograph Extension A */ + [0x4585, 0x4585], /* CJK Ideograph Extension A */ + [0x4586, 0x4586], /* CJK Ideograph Extension A */ + [0x4587, 0x4587], /* CJK Ideograph Extension A */ + [0x4588, 0x4588], /* CJK Ideograph Extension A */ + [0x4589, 0x4589], /* CJK Ideograph Extension A */ + [0x458a, 0x458a], /* CJK Ideograph Extension A */ + [0x458b, 0x458b], /* CJK Ideograph Extension A */ + [0x458c, 0x458c], /* CJK Ideograph Extension A */ + [0x458d, 0x458d], /* CJK Ideograph Extension A */ + [0x458e, 0x458e], /* CJK Ideograph Extension A */ + [0x458f, 0x458f], /* CJK Ideograph Extension A */ + [0x4590, 0x4590], /* CJK Ideograph Extension A */ + [0x4591, 0x4591], /* CJK Ideograph Extension A */ + [0x4592, 0x4592], /* CJK Ideograph Extension A */ + [0x4593, 0x4593], /* CJK Ideograph Extension A */ + [0x4594, 0x4594], /* CJK Ideograph Extension A */ + [0x4595, 0x4595], /* CJK Ideograph Extension A */ + [0x4596, 0x4596], /* CJK Ideograph Extension A */ + [0x4597, 0x4597], /* CJK Ideograph Extension A */ + [0x4598, 0x4598], /* CJK Ideograph Extension A */ + [0x4599, 0x4599], /* CJK Ideograph Extension A */ + [0x459a, 0x459a], /* CJK Ideograph Extension A */ + [0x459b, 0x459b], /* CJK Ideograph Extension A */ + [0x459c, 0x459c], /* CJK Ideograph Extension A */ + [0x459d, 0x459d], /* CJK Ideograph Extension A */ + [0x459e, 0x459e], /* CJK Ideograph Extension A */ + [0x459f, 0x459f], /* CJK Ideograph Extension A */ + [0x45a0, 0x45a0], /* CJK Ideograph Extension A */ + [0x45a1, 0x45a1], /* CJK Ideograph Extension A */ + [0x45a2, 0x45a2], /* CJK Ideograph Extension A */ + [0x45a3, 0x45a3], /* CJK Ideograph Extension A */ + [0x45a4, 0x45a4], /* CJK Ideograph Extension A */ + [0x45a5, 0x45a5], /* CJK Ideograph Extension A */ + [0x45a6, 0x45a6], /* CJK Ideograph Extension A */ + [0x45a7, 0x45a7], /* CJK Ideograph Extension A */ + [0x45a8, 0x45a8], /* CJK Ideograph Extension A */ + [0x45a9, 0x45a9], /* CJK Ideograph Extension A */ + [0x45aa, 0x45aa], /* CJK Ideograph Extension A */ + [0x45ab, 0x45ab], /* CJK Ideograph Extension A */ + [0x45ac, 0x45ac], /* CJK Ideograph Extension A */ + [0x45ad, 0x45ad], /* CJK Ideograph Extension A */ + [0x45ae, 0x45ae], /* CJK Ideograph Extension A */ + [0x45af, 0x45af], /* CJK Ideograph Extension A */ + [0x45b0, 0x45b0], /* CJK Ideograph Extension A */ + [0x45b1, 0x45b1], /* CJK Ideograph Extension A */ + [0x45b2, 0x45b2], /* CJK Ideograph Extension A */ + [0x45b3, 0x45b3], /* CJK Ideograph Extension A */ + [0x45b4, 0x45b4], /* CJK Ideograph Extension A */ + [0x45b5, 0x45b5], /* CJK Ideograph Extension A */ + [0x45b6, 0x45b6], /* CJK Ideograph Extension A */ + [0x45b7, 0x45b7], /* CJK Ideograph Extension A */ + [0x45b8, 0x45b8], /* CJK Ideograph Extension A */ + [0x45b9, 0x45b9], /* CJK Ideograph Extension A */ + [0x45ba, 0x45ba], /* CJK Ideograph Extension A */ + [0x45bb, 0x45bb], /* CJK Ideograph Extension A */ + [0x45bc, 0x45bc], /* CJK Ideograph Extension A */ + [0x45bd, 0x45bd], /* CJK Ideograph Extension A */ + [0x45be, 0x45be], /* CJK Ideograph Extension A */ + [0x45bf, 0x45bf], /* CJK Ideograph Extension A */ + [0x45c0, 0x45c0], /* CJK Ideograph Extension A */ + [0x45c1, 0x45c1], /* CJK Ideograph Extension A */ + [0x45c2, 0x45c2], /* CJK Ideograph Extension A */ + [0x45c3, 0x45c3], /* CJK Ideograph Extension A */ + [0x45c4, 0x45c4], /* CJK Ideograph Extension A */ + [0x45c5, 0x45c5], /* CJK Ideograph Extension A */ + [0x45c6, 0x45c6], /* CJK Ideograph Extension A */ + [0x45c7, 0x45c7], /* CJK Ideograph Extension A */ + [0x45c8, 0x45c8], /* CJK Ideograph Extension A */ + [0x45c9, 0x45c9], /* CJK Ideograph Extension A */ + [0x45ca, 0x45ca], /* CJK Ideograph Extension A */ + [0x45cb, 0x45cb], /* CJK Ideograph Extension A */ + [0x45cc, 0x45cc], /* CJK Ideograph Extension A */ + [0x45cd, 0x45cd], /* CJK Ideograph Extension A */ + [0x45ce, 0x45ce], /* CJK Ideograph Extension A */ + [0x45cf, 0x45cf], /* CJK Ideograph Extension A */ + [0x45d0, 0x45d0], /* CJK Ideograph Extension A */ + [0x45d1, 0x45d1], /* CJK Ideograph Extension A */ + [0x45d2, 0x45d2], /* CJK Ideograph Extension A */ + [0x45d3, 0x45d3], /* CJK Ideograph Extension A */ + [0x45d4, 0x45d4], /* CJK Ideograph Extension A */ + [0x45d5, 0x45d5], /* CJK Ideograph Extension A */ + [0x45d6, 0x45d6], /* CJK Ideograph Extension A */ + [0x45d7, 0x45d7], /* CJK Ideograph Extension A */ + [0x45d8, 0x45d8], /* CJK Ideograph Extension A */ + [0x45d9, 0x45d9], /* CJK Ideograph Extension A */ + [0x45da, 0x45da], /* CJK Ideograph Extension A */ + [0x45db, 0x45db], /* CJK Ideograph Extension A */ + [0x45dc, 0x45dc], /* CJK Ideograph Extension A */ + [0x45dd, 0x45dd], /* CJK Ideograph Extension A */ + [0x45de, 0x45de], /* CJK Ideograph Extension A */ + [0x45df, 0x45df], /* CJK Ideograph Extension A */ + [0x45e0, 0x45e0], /* CJK Ideograph Extension A */ + [0x45e1, 0x45e1], /* CJK Ideograph Extension A */ + [0x45e2, 0x45e2], /* CJK Ideograph Extension A */ + [0x45e3, 0x45e3], /* CJK Ideograph Extension A */ + [0x45e4, 0x45e4], /* CJK Ideograph Extension A */ + [0x45e5, 0x45e5], /* CJK Ideograph Extension A */ + [0x45e6, 0x45e6], /* CJK Ideograph Extension A */ + [0x45e7, 0x45e7], /* CJK Ideograph Extension A */ + [0x45e8, 0x45e8], /* CJK Ideograph Extension A */ + [0x45e9, 0x45e9], /* CJK Ideograph Extension A */ + [0x45ea, 0x45ea], /* CJK Ideograph Extension A */ + [0x45eb, 0x45eb], /* CJK Ideograph Extension A */ + [0x45ec, 0x45ec], /* CJK Ideograph Extension A */ + [0x45ed, 0x45ed], /* CJK Ideograph Extension A */ + [0x45ee, 0x45ee], /* CJK Ideograph Extension A */ + [0x45ef, 0x45ef], /* CJK Ideograph Extension A */ + [0x45f0, 0x45f0], /* CJK Ideograph Extension A */ + [0x45f1, 0x45f1], /* CJK Ideograph Extension A */ + [0x45f2, 0x45f2], /* CJK Ideograph Extension A */ + [0x45f3, 0x45f3], /* CJK Ideograph Extension A */ + [0x45f4, 0x45f4], /* CJK Ideograph Extension A */ + [0x45f5, 0x45f5], /* CJK Ideograph Extension A */ + [0x45f6, 0x45f6], /* CJK Ideograph Extension A */ + [0x45f7, 0x45f7], /* CJK Ideograph Extension A */ + [0x45f8, 0x45f8], /* CJK Ideograph Extension A */ + [0x45f9, 0x45f9], /* CJK Ideograph Extension A */ + [0x45fa, 0x45fa], /* CJK Ideograph Extension A */ + [0x45fb, 0x45fb], /* CJK Ideograph Extension A */ + [0x45fc, 0x45fc], /* CJK Ideograph Extension A */ + [0x45fd, 0x45fd], /* CJK Ideograph Extension A */ + [0x45fe, 0x45fe], /* CJK Ideograph Extension A */ + [0x45ff, 0x45ff], /* CJK Ideograph Extension A */ + [0x4600, 0x4600], /* CJK Ideograph Extension A */ + [0x4601, 0x4601], /* CJK Ideograph Extension A */ + [0x4602, 0x4602], /* CJK Ideograph Extension A */ + [0x4603, 0x4603], /* CJK Ideograph Extension A */ + [0x4604, 0x4604], /* CJK Ideograph Extension A */ + [0x4605, 0x4605], /* CJK Ideograph Extension A */ + [0x4606, 0x4606], /* CJK Ideograph Extension A */ + [0x4607, 0x4607], /* CJK Ideograph Extension A */ + [0x4608, 0x4608], /* CJK Ideograph Extension A */ + [0x4609, 0x4609], /* CJK Ideograph Extension A */ + [0x460a, 0x460a], /* CJK Ideograph Extension A */ + [0x460b, 0x460b], /* CJK Ideograph Extension A */ + [0x460c, 0x460c], /* CJK Ideograph Extension A */ + [0x460d, 0x460d], /* CJK Ideograph Extension A */ + [0x460e, 0x460e], /* CJK Ideograph Extension A */ + [0x460f, 0x460f], /* CJK Ideograph Extension A */ + [0x4610, 0x4610], /* CJK Ideograph Extension A */ + [0x4611, 0x4611], /* CJK Ideograph Extension A */ + [0x4612, 0x4612], /* CJK Ideograph Extension A */ + [0x4613, 0x4613], /* CJK Ideograph Extension A */ + [0x4614, 0x4614], /* CJK Ideograph Extension A */ + [0x4615, 0x4615], /* CJK Ideograph Extension A */ + [0x4616, 0x4616], /* CJK Ideograph Extension A */ + [0x4617, 0x4617], /* CJK Ideograph Extension A */ + [0x4618, 0x4618], /* CJK Ideograph Extension A */ + [0x4619, 0x4619], /* CJK Ideograph Extension A */ + [0x461a, 0x461a], /* CJK Ideograph Extension A */ + [0x461b, 0x461b], /* CJK Ideograph Extension A */ + [0x461c, 0x461c], /* CJK Ideograph Extension A */ + [0x461d, 0x461d], /* CJK Ideograph Extension A */ + [0x461e, 0x461e], /* CJK Ideograph Extension A */ + [0x461f, 0x461f], /* CJK Ideograph Extension A */ + [0x4620, 0x4620], /* CJK Ideograph Extension A */ + [0x4621, 0x4621], /* CJK Ideograph Extension A */ + [0x4622, 0x4622], /* CJK Ideograph Extension A */ + [0x4623, 0x4623], /* CJK Ideograph Extension A */ + [0x4624, 0x4624], /* CJK Ideograph Extension A */ + [0x4625, 0x4625], /* CJK Ideograph Extension A */ + [0x4626, 0x4626], /* CJK Ideograph Extension A */ + [0x4627, 0x4627], /* CJK Ideograph Extension A */ + [0x4628, 0x4628], /* CJK Ideograph Extension A */ + [0x4629, 0x4629], /* CJK Ideograph Extension A */ + [0x462a, 0x462a], /* CJK Ideograph Extension A */ + [0x462b, 0x462b], /* CJK Ideograph Extension A */ + [0x462c, 0x462c], /* CJK Ideograph Extension A */ + [0x462d, 0x462d], /* CJK Ideograph Extension A */ + [0x462e, 0x462e], /* CJK Ideograph Extension A */ + [0x462f, 0x462f], /* CJK Ideograph Extension A */ + [0x4630, 0x4630], /* CJK Ideograph Extension A */ + [0x4631, 0x4631], /* CJK Ideograph Extension A */ + [0x4632, 0x4632], /* CJK Ideograph Extension A */ + [0x4633, 0x4633], /* CJK Ideograph Extension A */ + [0x4634, 0x4634], /* CJK Ideograph Extension A */ + [0x4635, 0x4635], /* CJK Ideograph Extension A */ + [0x4636, 0x4636], /* CJK Ideograph Extension A */ + [0x4637, 0x4637], /* CJK Ideograph Extension A */ + [0x4638, 0x4638], /* CJK Ideograph Extension A */ + [0x4639, 0x4639], /* CJK Ideograph Extension A */ + [0x463a, 0x463a], /* CJK Ideograph Extension A */ + [0x463b, 0x463b], /* CJK Ideograph Extension A */ + [0x463c, 0x463c], /* CJK Ideograph Extension A */ + [0x463d, 0x463d], /* CJK Ideograph Extension A */ + [0x463e, 0x463e], /* CJK Ideograph Extension A */ + [0x463f, 0x463f], /* CJK Ideograph Extension A */ + [0x4640, 0x4640], /* CJK Ideograph Extension A */ + [0x4641, 0x4641], /* CJK Ideograph Extension A */ + [0x4642, 0x4642], /* CJK Ideograph Extension A */ + [0x4643, 0x4643], /* CJK Ideograph Extension A */ + [0x4644, 0x4644], /* CJK Ideograph Extension A */ + [0x4645, 0x4645], /* CJK Ideograph Extension A */ + [0x4646, 0x4646], /* CJK Ideograph Extension A */ + [0x4647, 0x4647], /* CJK Ideograph Extension A */ + [0x4648, 0x4648], /* CJK Ideograph Extension A */ + [0x4649, 0x4649], /* CJK Ideograph Extension A */ + [0x464a, 0x464a], /* CJK Ideograph Extension A */ + [0x464b, 0x464b], /* CJK Ideograph Extension A */ + [0x464c, 0x464c], /* CJK Ideograph Extension A */ + [0x464d, 0x464d], /* CJK Ideograph Extension A */ + [0x464e, 0x464e], /* CJK Ideograph Extension A */ + [0x464f, 0x464f], /* CJK Ideograph Extension A */ + [0x4650, 0x4650], /* CJK Ideograph Extension A */ + [0x4651, 0x4651], /* CJK Ideograph Extension A */ + [0x4652, 0x4652], /* CJK Ideograph Extension A */ + [0x4653, 0x4653], /* CJK Ideograph Extension A */ + [0x4654, 0x4654], /* CJK Ideograph Extension A */ + [0x4655, 0x4655], /* CJK Ideograph Extension A */ + [0x4656, 0x4656], /* CJK Ideograph Extension A */ + [0x4657, 0x4657], /* CJK Ideograph Extension A */ + [0x4658, 0x4658], /* CJK Ideograph Extension A */ + [0x4659, 0x4659], /* CJK Ideograph Extension A */ + [0x465a, 0x465a], /* CJK Ideograph Extension A */ + [0x465b, 0x465b], /* CJK Ideograph Extension A */ + [0x465c, 0x465c], /* CJK Ideograph Extension A */ + [0x465d, 0x465d], /* CJK Ideograph Extension A */ + [0x465e, 0x465e], /* CJK Ideograph Extension A */ + [0x465f, 0x465f], /* CJK Ideograph Extension A */ + [0x4660, 0x4660], /* CJK Ideograph Extension A */ + [0x4661, 0x4661], /* CJK Ideograph Extension A */ + [0x4662, 0x4662], /* CJK Ideograph Extension A */ + [0x4663, 0x4663], /* CJK Ideograph Extension A */ + [0x4664, 0x4664], /* CJK Ideograph Extension A */ + [0x4665, 0x4665], /* CJK Ideograph Extension A */ + [0x4666, 0x4666], /* CJK Ideograph Extension A */ + [0x4667, 0x4667], /* CJK Ideograph Extension A */ + [0x4668, 0x4668], /* CJK Ideograph Extension A */ + [0x4669, 0x4669], /* CJK Ideograph Extension A */ + [0x466a, 0x466a], /* CJK Ideograph Extension A */ + [0x466b, 0x466b], /* CJK Ideograph Extension A */ + [0x466c, 0x466c], /* CJK Ideograph Extension A */ + [0x466d, 0x466d], /* CJK Ideograph Extension A */ + [0x466e, 0x466e], /* CJK Ideograph Extension A */ + [0x466f, 0x466f], /* CJK Ideograph Extension A */ + [0x4670, 0x4670], /* CJK Ideograph Extension A */ + [0x4671, 0x4671], /* CJK Ideograph Extension A */ + [0x4672, 0x4672], /* CJK Ideograph Extension A */ + [0x4673, 0x4673], /* CJK Ideograph Extension A */ + [0x4674, 0x4674], /* CJK Ideograph Extension A */ + [0x4675, 0x4675], /* CJK Ideograph Extension A */ + [0x4676, 0x4676], /* CJK Ideograph Extension A */ + [0x4677, 0x4677], /* CJK Ideograph Extension A */ + [0x4678, 0x4678], /* CJK Ideograph Extension A */ + [0x4679, 0x4679], /* CJK Ideograph Extension A */ + [0x467a, 0x467a], /* CJK Ideograph Extension A */ + [0x467b, 0x467b], /* CJK Ideograph Extension A */ + [0x467c, 0x467c], /* CJK Ideograph Extension A */ + [0x467d, 0x467d], /* CJK Ideograph Extension A */ + [0x467e, 0x467e], /* CJK Ideograph Extension A */ + [0x467f, 0x467f], /* CJK Ideograph Extension A */ + [0x4680, 0x4680], /* CJK Ideograph Extension A */ + [0x4681, 0x4681], /* CJK Ideograph Extension A */ + [0x4682, 0x4682], /* CJK Ideograph Extension A */ + [0x4683, 0x4683], /* CJK Ideograph Extension A */ + [0x4684, 0x4684], /* CJK Ideograph Extension A */ + [0x4685, 0x4685], /* CJK Ideograph Extension A */ + [0x4686, 0x4686], /* CJK Ideograph Extension A */ + [0x4687, 0x4687], /* CJK Ideograph Extension A */ + [0x4688, 0x4688], /* CJK Ideograph Extension A */ + [0x4689, 0x4689], /* CJK Ideograph Extension A */ + [0x468a, 0x468a], /* CJK Ideograph Extension A */ + [0x468b, 0x468b], /* CJK Ideograph Extension A */ + [0x468c, 0x468c], /* CJK Ideograph Extension A */ + [0x468d, 0x468d], /* CJK Ideograph Extension A */ + [0x468e, 0x468e], /* CJK Ideograph Extension A */ + [0x468f, 0x468f], /* CJK Ideograph Extension A */ + [0x4690, 0x4690], /* CJK Ideograph Extension A */ + [0x4691, 0x4691], /* CJK Ideograph Extension A */ + [0x4692, 0x4692], /* CJK Ideograph Extension A */ + [0x4693, 0x4693], /* CJK Ideograph Extension A */ + [0x4694, 0x4694], /* CJK Ideograph Extension A */ + [0x4695, 0x4695], /* CJK Ideograph Extension A */ + [0x4696, 0x4696], /* CJK Ideograph Extension A */ + [0x4697, 0x4697], /* CJK Ideograph Extension A */ + [0x4698, 0x4698], /* CJK Ideograph Extension A */ + [0x4699, 0x4699], /* CJK Ideograph Extension A */ + [0x469a, 0x469a], /* CJK Ideograph Extension A */ + [0x469b, 0x469b], /* CJK Ideograph Extension A */ + [0x469c, 0x469c], /* CJK Ideograph Extension A */ + [0x469d, 0x469d], /* CJK Ideograph Extension A */ + [0x469e, 0x469e], /* CJK Ideograph Extension A */ + [0x469f, 0x469f], /* CJK Ideograph Extension A */ + [0x46a0, 0x46a0], /* CJK Ideograph Extension A */ + [0x46a1, 0x46a1], /* CJK Ideograph Extension A */ + [0x46a2, 0x46a2], /* CJK Ideograph Extension A */ + [0x46a3, 0x46a3], /* CJK Ideograph Extension A */ + [0x46a4, 0x46a4], /* CJK Ideograph Extension A */ + [0x46a5, 0x46a5], /* CJK Ideograph Extension A */ + [0x46a6, 0x46a6], /* CJK Ideograph Extension A */ + [0x46a7, 0x46a7], /* CJK Ideograph Extension A */ + [0x46a8, 0x46a8], /* CJK Ideograph Extension A */ + [0x46a9, 0x46a9], /* CJK Ideograph Extension A */ + [0x46aa, 0x46aa], /* CJK Ideograph Extension A */ + [0x46ab, 0x46ab], /* CJK Ideograph Extension A */ + [0x46ac, 0x46ac], /* CJK Ideograph Extension A */ + [0x46ad, 0x46ad], /* CJK Ideograph Extension A */ + [0x46ae, 0x46ae], /* CJK Ideograph Extension A */ + [0x46af, 0x46af], /* CJK Ideograph Extension A */ + [0x46b0, 0x46b0], /* CJK Ideograph Extension A */ + [0x46b1, 0x46b1], /* CJK Ideograph Extension A */ + [0x46b2, 0x46b2], /* CJK Ideograph Extension A */ + [0x46b3, 0x46b3], /* CJK Ideograph Extension A */ + [0x46b4, 0x46b4], /* CJK Ideograph Extension A */ + [0x46b5, 0x46b5], /* CJK Ideograph Extension A */ + [0x46b6, 0x46b6], /* CJK Ideograph Extension A */ + [0x46b7, 0x46b7], /* CJK Ideograph Extension A */ + [0x46b8, 0x46b8], /* CJK Ideograph Extension A */ + [0x46b9, 0x46b9], /* CJK Ideograph Extension A */ + [0x46ba, 0x46ba], /* CJK Ideograph Extension A */ + [0x46bb, 0x46bb], /* CJK Ideograph Extension A */ + [0x46bc, 0x46bc], /* CJK Ideograph Extension A */ + [0x46bd, 0x46bd], /* CJK Ideograph Extension A */ + [0x46be, 0x46be], /* CJK Ideograph Extension A */ + [0x46bf, 0x46bf], /* CJK Ideograph Extension A */ + [0x46c0, 0x46c0], /* CJK Ideograph Extension A */ + [0x46c1, 0x46c1], /* CJK Ideograph Extension A */ + [0x46c2, 0x46c2], /* CJK Ideograph Extension A */ + [0x46c3, 0x46c3], /* CJK Ideograph Extension A */ + [0x46c4, 0x46c4], /* CJK Ideograph Extension A */ + [0x46c5, 0x46c5], /* CJK Ideograph Extension A */ + [0x46c6, 0x46c6], /* CJK Ideograph Extension A */ + [0x46c7, 0x46c7], /* CJK Ideograph Extension A */ + [0x46c8, 0x46c8], /* CJK Ideograph Extension A */ + [0x46c9, 0x46c9], /* CJK Ideograph Extension A */ + [0x46ca, 0x46ca], /* CJK Ideograph Extension A */ + [0x46cb, 0x46cb], /* CJK Ideograph Extension A */ + [0x46cc, 0x46cc], /* CJK Ideograph Extension A */ + [0x46cd, 0x46cd], /* CJK Ideograph Extension A */ + [0x46ce, 0x46ce], /* CJK Ideograph Extension A */ + [0x46cf, 0x46cf], /* CJK Ideograph Extension A */ + [0x46d0, 0x46d0], /* CJK Ideograph Extension A */ + [0x46d1, 0x46d1], /* CJK Ideograph Extension A */ + [0x46d2, 0x46d2], /* CJK Ideograph Extension A */ + [0x46d3, 0x46d3], /* CJK Ideograph Extension A */ + [0x46d4, 0x46d4], /* CJK Ideograph Extension A */ + [0x46d5, 0x46d5], /* CJK Ideograph Extension A */ + [0x46d6, 0x46d6], /* CJK Ideograph Extension A */ + [0x46d7, 0x46d7], /* CJK Ideograph Extension A */ + [0x46d8, 0x46d8], /* CJK Ideograph Extension A */ + [0x46d9, 0x46d9], /* CJK Ideograph Extension A */ + [0x46da, 0x46da], /* CJK Ideograph Extension A */ + [0x46db, 0x46db], /* CJK Ideograph Extension A */ + [0x46dc, 0x46dc], /* CJK Ideograph Extension A */ + [0x46dd, 0x46dd], /* CJK Ideograph Extension A */ + [0x46de, 0x46de], /* CJK Ideograph Extension A */ + [0x46df, 0x46df], /* CJK Ideograph Extension A */ + [0x46e0, 0x46e0], /* CJK Ideograph Extension A */ + [0x46e1, 0x46e1], /* CJK Ideograph Extension A */ + [0x46e2, 0x46e2], /* CJK Ideograph Extension A */ + [0x46e3, 0x46e3], /* CJK Ideograph Extension A */ + [0x46e4, 0x46e4], /* CJK Ideograph Extension A */ + [0x46e5, 0x46e5], /* CJK Ideograph Extension A */ + [0x46e6, 0x46e6], /* CJK Ideograph Extension A */ + [0x46e7, 0x46e7], /* CJK Ideograph Extension A */ + [0x46e8, 0x46e8], /* CJK Ideograph Extension A */ + [0x46e9, 0x46e9], /* CJK Ideograph Extension A */ + [0x46ea, 0x46ea], /* CJK Ideograph Extension A */ + [0x46eb, 0x46eb], /* CJK Ideograph Extension A */ + [0x46ec, 0x46ec], /* CJK Ideograph Extension A */ + [0x46ed, 0x46ed], /* CJK Ideograph Extension A */ + [0x46ee, 0x46ee], /* CJK Ideograph Extension A */ + [0x46ef, 0x46ef], /* CJK Ideograph Extension A */ + [0x46f0, 0x46f0], /* CJK Ideograph Extension A */ + [0x46f1, 0x46f1], /* CJK Ideograph Extension A */ + [0x46f2, 0x46f2], /* CJK Ideograph Extension A */ + [0x46f3, 0x46f3], /* CJK Ideograph Extension A */ + [0x46f4, 0x46f4], /* CJK Ideograph Extension A */ + [0x46f5, 0x46f5], /* CJK Ideograph Extension A */ + [0x46f6, 0x46f6], /* CJK Ideograph Extension A */ + [0x46f7, 0x46f7], /* CJK Ideograph Extension A */ + [0x46f8, 0x46f8], /* CJK Ideograph Extension A */ + [0x46f9, 0x46f9], /* CJK Ideograph Extension A */ + [0x46fa, 0x46fa], /* CJK Ideograph Extension A */ + [0x46fb, 0x46fb], /* CJK Ideograph Extension A */ + [0x46fc, 0x46fc], /* CJK Ideograph Extension A */ + [0x46fd, 0x46fd], /* CJK Ideograph Extension A */ + [0x46fe, 0x46fe], /* CJK Ideograph Extension A */ + [0x46ff, 0x46ff], /* CJK Ideograph Extension A */ + [0x4700, 0x4700], /* CJK Ideograph Extension A */ + [0x4701, 0x4701], /* CJK Ideograph Extension A */ + [0x4702, 0x4702], /* CJK Ideograph Extension A */ + [0x4703, 0x4703], /* CJK Ideograph Extension A */ + [0x4704, 0x4704], /* CJK Ideograph Extension A */ + [0x4705, 0x4705], /* CJK Ideograph Extension A */ + [0x4706, 0x4706], /* CJK Ideograph Extension A */ + [0x4707, 0x4707], /* CJK Ideograph Extension A */ + [0x4708, 0x4708], /* CJK Ideograph Extension A */ + [0x4709, 0x4709], /* CJK Ideograph Extension A */ + [0x470a, 0x470a], /* CJK Ideograph Extension A */ + [0x470b, 0x470b], /* CJK Ideograph Extension A */ + [0x470c, 0x470c], /* CJK Ideograph Extension A */ + [0x470d, 0x470d], /* CJK Ideograph Extension A */ + [0x470e, 0x470e], /* CJK Ideograph Extension A */ + [0x470f, 0x470f], /* CJK Ideograph Extension A */ + [0x4710, 0x4710], /* CJK Ideograph Extension A */ + [0x4711, 0x4711], /* CJK Ideograph Extension A */ + [0x4712, 0x4712], /* CJK Ideograph Extension A */ + [0x4713, 0x4713], /* CJK Ideograph Extension A */ + [0x4714, 0x4714], /* CJK Ideograph Extension A */ + [0x4715, 0x4715], /* CJK Ideograph Extension A */ + [0x4716, 0x4716], /* CJK Ideograph Extension A */ + [0x4717, 0x4717], /* CJK Ideograph Extension A */ + [0x4718, 0x4718], /* CJK Ideograph Extension A */ + [0x4719, 0x4719], /* CJK Ideograph Extension A */ + [0x471a, 0x471a], /* CJK Ideograph Extension A */ + [0x471b, 0x471b], /* CJK Ideograph Extension A */ + [0x471c, 0x471c], /* CJK Ideograph Extension A */ + [0x471d, 0x471d], /* CJK Ideograph Extension A */ + [0x471e, 0x471e], /* CJK Ideograph Extension A */ + [0x471f, 0x471f], /* CJK Ideograph Extension A */ + [0x4720, 0x4720], /* CJK Ideograph Extension A */ + [0x4721, 0x4721], /* CJK Ideograph Extension A */ + [0x4722, 0x4722], /* CJK Ideograph Extension A */ + [0x4723, 0x4723], /* CJK Ideograph Extension A */ + [0x4724, 0x4724], /* CJK Ideograph Extension A */ + [0x4725, 0x4725], /* CJK Ideograph Extension A */ + [0x4726, 0x4726], /* CJK Ideograph Extension A */ + [0x4727, 0x4727], /* CJK Ideograph Extension A */ + [0x4728, 0x4728], /* CJK Ideograph Extension A */ + [0x4729, 0x4729], /* CJK Ideograph Extension A */ + [0x472a, 0x472a], /* CJK Ideograph Extension A */ + [0x472b, 0x472b], /* CJK Ideograph Extension A */ + [0x472c, 0x472c], /* CJK Ideograph Extension A */ + [0x472d, 0x472d], /* CJK Ideograph Extension A */ + [0x472e, 0x472e], /* CJK Ideograph Extension A */ + [0x472f, 0x472f], /* CJK Ideograph Extension A */ + [0x4730, 0x4730], /* CJK Ideograph Extension A */ + [0x4731, 0x4731], /* CJK Ideograph Extension A */ + [0x4732, 0x4732], /* CJK Ideograph Extension A */ + [0x4733, 0x4733], /* CJK Ideograph Extension A */ + [0x4734, 0x4734], /* CJK Ideograph Extension A */ + [0x4735, 0x4735], /* CJK Ideograph Extension A */ + [0x4736, 0x4736], /* CJK Ideograph Extension A */ + [0x4737, 0x4737], /* CJK Ideograph Extension A */ + [0x4738, 0x4738], /* CJK Ideograph Extension A */ + [0x4739, 0x4739], /* CJK Ideograph Extension A */ + [0x473a, 0x473a], /* CJK Ideograph Extension A */ + [0x473b, 0x473b], /* CJK Ideograph Extension A */ + [0x473c, 0x473c], /* CJK Ideograph Extension A */ + [0x473d, 0x473d], /* CJK Ideograph Extension A */ + [0x473e, 0x473e], /* CJK Ideograph Extension A */ + [0x473f, 0x473f], /* CJK Ideograph Extension A */ + [0x4740, 0x4740], /* CJK Ideograph Extension A */ + [0x4741, 0x4741], /* CJK Ideograph Extension A */ + [0x4742, 0x4742], /* CJK Ideograph Extension A */ + [0x4743, 0x4743], /* CJK Ideograph Extension A */ + [0x4744, 0x4744], /* CJK Ideograph Extension A */ + [0x4745, 0x4745], /* CJK Ideograph Extension A */ + [0x4746, 0x4746], /* CJK Ideograph Extension A */ + [0x4747, 0x4747], /* CJK Ideograph Extension A */ + [0x4748, 0x4748], /* CJK Ideograph Extension A */ + [0x4749, 0x4749], /* CJK Ideograph Extension A */ + [0x474a, 0x474a], /* CJK Ideograph Extension A */ + [0x474b, 0x474b], /* CJK Ideograph Extension A */ + [0x474c, 0x474c], /* CJK Ideograph Extension A */ + [0x474d, 0x474d], /* CJK Ideograph Extension A */ + [0x474e, 0x474e], /* CJK Ideograph Extension A */ + [0x474f, 0x474f], /* CJK Ideograph Extension A */ + [0x4750, 0x4750], /* CJK Ideograph Extension A */ + [0x4751, 0x4751], /* CJK Ideograph Extension A */ + [0x4752, 0x4752], /* CJK Ideograph Extension A */ + [0x4753, 0x4753], /* CJK Ideograph Extension A */ + [0x4754, 0x4754], /* CJK Ideograph Extension A */ + [0x4755, 0x4755], /* CJK Ideograph Extension A */ + [0x4756, 0x4756], /* CJK Ideograph Extension A */ + [0x4757, 0x4757], /* CJK Ideograph Extension A */ + [0x4758, 0x4758], /* CJK Ideograph Extension A */ + [0x4759, 0x4759], /* CJK Ideograph Extension A */ + [0x475a, 0x475a], /* CJK Ideograph Extension A */ + [0x475b, 0x475b], /* CJK Ideograph Extension A */ + [0x475c, 0x475c], /* CJK Ideograph Extension A */ + [0x475d, 0x475d], /* CJK Ideograph Extension A */ + [0x475e, 0x475e], /* CJK Ideograph Extension A */ + [0x475f, 0x475f], /* CJK Ideograph Extension A */ + [0x4760, 0x4760], /* CJK Ideograph Extension A */ + [0x4761, 0x4761], /* CJK Ideograph Extension A */ + [0x4762, 0x4762], /* CJK Ideograph Extension A */ + [0x4763, 0x4763], /* CJK Ideograph Extension A */ + [0x4764, 0x4764], /* CJK Ideograph Extension A */ + [0x4765, 0x4765], /* CJK Ideograph Extension A */ + [0x4766, 0x4766], /* CJK Ideograph Extension A */ + [0x4767, 0x4767], /* CJK Ideograph Extension A */ + [0x4768, 0x4768], /* CJK Ideograph Extension A */ + [0x4769, 0x4769], /* CJK Ideograph Extension A */ + [0x476a, 0x476a], /* CJK Ideograph Extension A */ + [0x476b, 0x476b], /* CJK Ideograph Extension A */ + [0x476c, 0x476c], /* CJK Ideograph Extension A */ + [0x476d, 0x476d], /* CJK Ideograph Extension A */ + [0x476e, 0x476e], /* CJK Ideograph Extension A */ + [0x476f, 0x476f], /* CJK Ideograph Extension A */ + [0x4770, 0x4770], /* CJK Ideograph Extension A */ + [0x4771, 0x4771], /* CJK Ideograph Extension A */ + [0x4772, 0x4772], /* CJK Ideograph Extension A */ + [0x4773, 0x4773], /* CJK Ideograph Extension A */ + [0x4774, 0x4774], /* CJK Ideograph Extension A */ + [0x4775, 0x4775], /* CJK Ideograph Extension A */ + [0x4776, 0x4776], /* CJK Ideograph Extension A */ + [0x4777, 0x4777], /* CJK Ideograph Extension A */ + [0x4778, 0x4778], /* CJK Ideograph Extension A */ + [0x4779, 0x4779], /* CJK Ideograph Extension A */ + [0x477a, 0x477a], /* CJK Ideograph Extension A */ + [0x477b, 0x477b], /* CJK Ideograph Extension A */ + [0x477c, 0x477c], /* CJK Ideograph Extension A */ + [0x477d, 0x477d], /* CJK Ideograph Extension A */ + [0x477e, 0x477e], /* CJK Ideograph Extension A */ + [0x477f, 0x477f], /* CJK Ideograph Extension A */ + [0x4780, 0x4780], /* CJK Ideograph Extension A */ + [0x4781, 0x4781], /* CJK Ideograph Extension A */ + [0x4782, 0x4782], /* CJK Ideograph Extension A */ + [0x4783, 0x4783], /* CJK Ideograph Extension A */ + [0x4784, 0x4784], /* CJK Ideograph Extension A */ + [0x4785, 0x4785], /* CJK Ideograph Extension A */ + [0x4786, 0x4786], /* CJK Ideograph Extension A */ + [0x4787, 0x4787], /* CJK Ideograph Extension A */ + [0x4788, 0x4788], /* CJK Ideograph Extension A */ + [0x4789, 0x4789], /* CJK Ideograph Extension A */ + [0x478a, 0x478a], /* CJK Ideograph Extension A */ + [0x478b, 0x478b], /* CJK Ideograph Extension A */ + [0x478c, 0x478c], /* CJK Ideograph Extension A */ + [0x478d, 0x478d], /* CJK Ideograph Extension A */ + [0x478e, 0x478e], /* CJK Ideograph Extension A */ + [0x478f, 0x478f], /* CJK Ideograph Extension A */ + [0x4790, 0x4790], /* CJK Ideograph Extension A */ + [0x4791, 0x4791], /* CJK Ideograph Extension A */ + [0x4792, 0x4792], /* CJK Ideograph Extension A */ + [0x4793, 0x4793], /* CJK Ideograph Extension A */ + [0x4794, 0x4794], /* CJK Ideograph Extension A */ + [0x4795, 0x4795], /* CJK Ideograph Extension A */ + [0x4796, 0x4796], /* CJK Ideograph Extension A */ + [0x4797, 0x4797], /* CJK Ideograph Extension A */ + [0x4798, 0x4798], /* CJK Ideograph Extension A */ + [0x4799, 0x4799], /* CJK Ideograph Extension A */ + [0x479a, 0x479a], /* CJK Ideograph Extension A */ + [0x479b, 0x479b], /* CJK Ideograph Extension A */ + [0x479c, 0x479c], /* CJK Ideograph Extension A */ + [0x479d, 0x479d], /* CJK Ideograph Extension A */ + [0x479e, 0x479e], /* CJK Ideograph Extension A */ + [0x479f, 0x479f], /* CJK Ideograph Extension A */ + [0x47a0, 0x47a0], /* CJK Ideograph Extension A */ + [0x47a1, 0x47a1], /* CJK Ideograph Extension A */ + [0x47a2, 0x47a2], /* CJK Ideograph Extension A */ + [0x47a3, 0x47a3], /* CJK Ideograph Extension A */ + [0x47a4, 0x47a4], /* CJK Ideograph Extension A */ + [0x47a5, 0x47a5], /* CJK Ideograph Extension A */ + [0x47a6, 0x47a6], /* CJK Ideograph Extension A */ + [0x47a7, 0x47a7], /* CJK Ideograph Extension A */ + [0x47a8, 0x47a8], /* CJK Ideograph Extension A */ + [0x47a9, 0x47a9], /* CJK Ideograph Extension A */ + [0x47aa, 0x47aa], /* CJK Ideograph Extension A */ + [0x47ab, 0x47ab], /* CJK Ideograph Extension A */ + [0x47ac, 0x47ac], /* CJK Ideograph Extension A */ + [0x47ad, 0x47ad], /* CJK Ideograph Extension A */ + [0x47ae, 0x47ae], /* CJK Ideograph Extension A */ + [0x47af, 0x47af], /* CJK Ideograph Extension A */ + [0x47b0, 0x47b0], /* CJK Ideograph Extension A */ + [0x47b1, 0x47b1], /* CJK Ideograph Extension A */ + [0x47b2, 0x47b2], /* CJK Ideograph Extension A */ + [0x47b3, 0x47b3], /* CJK Ideograph Extension A */ + [0x47b4, 0x47b4], /* CJK Ideograph Extension A */ + [0x47b5, 0x47b5], /* CJK Ideograph Extension A */ + [0x47b6, 0x47b6], /* CJK Ideograph Extension A */ + [0x47b7, 0x47b7], /* CJK Ideograph Extension A */ + [0x47b8, 0x47b8], /* CJK Ideograph Extension A */ + [0x47b9, 0x47b9], /* CJK Ideograph Extension A */ + [0x47ba, 0x47ba], /* CJK Ideograph Extension A */ + [0x47bb, 0x47bb], /* CJK Ideograph Extension A */ + [0x47bc, 0x47bc], /* CJK Ideograph Extension A */ + [0x47bd, 0x47bd], /* CJK Ideograph Extension A */ + [0x47be, 0x47be], /* CJK Ideograph Extension A */ + [0x47bf, 0x47bf], /* CJK Ideograph Extension A */ + [0x47c0, 0x47c0], /* CJK Ideograph Extension A */ + [0x47c1, 0x47c1], /* CJK Ideograph Extension A */ + [0x47c2, 0x47c2], /* CJK Ideograph Extension A */ + [0x47c3, 0x47c3], /* CJK Ideograph Extension A */ + [0x47c4, 0x47c4], /* CJK Ideograph Extension A */ + [0x47c5, 0x47c5], /* CJK Ideograph Extension A */ + [0x47c6, 0x47c6], /* CJK Ideograph Extension A */ + [0x47c7, 0x47c7], /* CJK Ideograph Extension A */ + [0x47c8, 0x47c8], /* CJK Ideograph Extension A */ + [0x47c9, 0x47c9], /* CJK Ideograph Extension A */ + [0x47ca, 0x47ca], /* CJK Ideograph Extension A */ + [0x47cb, 0x47cb], /* CJK Ideograph Extension A */ + [0x47cc, 0x47cc], /* CJK Ideograph Extension A */ + [0x47cd, 0x47cd], /* CJK Ideograph Extension A */ + [0x47ce, 0x47ce], /* CJK Ideograph Extension A */ + [0x47cf, 0x47cf], /* CJK Ideograph Extension A */ + [0x47d0, 0x47d0], /* CJK Ideograph Extension A */ + [0x47d1, 0x47d1], /* CJK Ideograph Extension A */ + [0x47d2, 0x47d2], /* CJK Ideograph Extension A */ + [0x47d3, 0x47d3], /* CJK Ideograph Extension A */ + [0x47d4, 0x47d4], /* CJK Ideograph Extension A */ + [0x47d5, 0x47d5], /* CJK Ideograph Extension A */ + [0x47d6, 0x47d6], /* CJK Ideograph Extension A */ + [0x47d7, 0x47d7], /* CJK Ideograph Extension A */ + [0x47d8, 0x47d8], /* CJK Ideograph Extension A */ + [0x47d9, 0x47d9], /* CJK Ideograph Extension A */ + [0x47da, 0x47da], /* CJK Ideograph Extension A */ + [0x47db, 0x47db], /* CJK Ideograph Extension A */ + [0x47dc, 0x47dc], /* CJK Ideograph Extension A */ + [0x47dd, 0x47dd], /* CJK Ideograph Extension A */ + [0x47de, 0x47de], /* CJK Ideograph Extension A */ + [0x47df, 0x47df], /* CJK Ideograph Extension A */ + [0x47e0, 0x47e0], /* CJK Ideograph Extension A */ + [0x47e1, 0x47e1], /* CJK Ideograph Extension A */ + [0x47e2, 0x47e2], /* CJK Ideograph Extension A */ + [0x47e3, 0x47e3], /* CJK Ideograph Extension A */ + [0x47e4, 0x47e4], /* CJK Ideograph Extension A */ + [0x47e5, 0x47e5], /* CJK Ideograph Extension A */ + [0x47e6, 0x47e6], /* CJK Ideograph Extension A */ + [0x47e7, 0x47e7], /* CJK Ideograph Extension A */ + [0x47e8, 0x47e8], /* CJK Ideograph Extension A */ + [0x47e9, 0x47e9], /* CJK Ideograph Extension A */ + [0x47ea, 0x47ea], /* CJK Ideograph Extension A */ + [0x47eb, 0x47eb], /* CJK Ideograph Extension A */ + [0x47ec, 0x47ec], /* CJK Ideograph Extension A */ + [0x47ed, 0x47ed], /* CJK Ideograph Extension A */ + [0x47ee, 0x47ee], /* CJK Ideograph Extension A */ + [0x47ef, 0x47ef], /* CJK Ideograph Extension A */ + [0x47f0, 0x47f0], /* CJK Ideograph Extension A */ + [0x47f1, 0x47f1], /* CJK Ideograph Extension A */ + [0x47f2, 0x47f2], /* CJK Ideograph Extension A */ + [0x47f3, 0x47f3], /* CJK Ideograph Extension A */ + [0x47f4, 0x47f4], /* CJK Ideograph Extension A */ + [0x47f5, 0x47f5], /* CJK Ideograph Extension A */ + [0x47f6, 0x47f6], /* CJK Ideograph Extension A */ + [0x47f7, 0x47f7], /* CJK Ideograph Extension A */ + [0x47f8, 0x47f8], /* CJK Ideograph Extension A */ + [0x47f9, 0x47f9], /* CJK Ideograph Extension A */ + [0x47fa, 0x47fa], /* CJK Ideograph Extension A */ + [0x47fb, 0x47fb], /* CJK Ideograph Extension A */ + [0x47fc, 0x47fc], /* CJK Ideograph Extension A */ + [0x47fd, 0x47fd], /* CJK Ideograph Extension A */ + [0x47fe, 0x47fe], /* CJK Ideograph Extension A */ + [0x47ff, 0x47ff], /* CJK Ideograph Extension A */ + [0x4800, 0x4800], /* CJK Ideograph Extension A */ + [0x4801, 0x4801], /* CJK Ideograph Extension A */ + [0x4802, 0x4802], /* CJK Ideograph Extension A */ + [0x4803, 0x4803], /* CJK Ideograph Extension A */ + [0x4804, 0x4804], /* CJK Ideograph Extension A */ + [0x4805, 0x4805], /* CJK Ideograph Extension A */ + [0x4806, 0x4806], /* CJK Ideograph Extension A */ + [0x4807, 0x4807], /* CJK Ideograph Extension A */ + [0x4808, 0x4808], /* CJK Ideograph Extension A */ + [0x4809, 0x4809], /* CJK Ideograph Extension A */ + [0x480a, 0x480a], /* CJK Ideograph Extension A */ + [0x480b, 0x480b], /* CJK Ideograph Extension A */ + [0x480c, 0x480c], /* CJK Ideograph Extension A */ + [0x480d, 0x480d], /* CJK Ideograph Extension A */ + [0x480e, 0x480e], /* CJK Ideograph Extension A */ + [0x480f, 0x480f], /* CJK Ideograph Extension A */ + [0x4810, 0x4810], /* CJK Ideograph Extension A */ + [0x4811, 0x4811], /* CJK Ideograph Extension A */ + [0x4812, 0x4812], /* CJK Ideograph Extension A */ + [0x4813, 0x4813], /* CJK Ideograph Extension A */ + [0x4814, 0x4814], /* CJK Ideograph Extension A */ + [0x4815, 0x4815], /* CJK Ideograph Extension A */ + [0x4816, 0x4816], /* CJK Ideograph Extension A */ + [0x4817, 0x4817], /* CJK Ideograph Extension A */ + [0x4818, 0x4818], /* CJK Ideograph Extension A */ + [0x4819, 0x4819], /* CJK Ideograph Extension A */ + [0x481a, 0x481a], /* CJK Ideograph Extension A */ + [0x481b, 0x481b], /* CJK Ideograph Extension A */ + [0x481c, 0x481c], /* CJK Ideograph Extension A */ + [0x481d, 0x481d], /* CJK Ideograph Extension A */ + [0x481e, 0x481e], /* CJK Ideograph Extension A */ + [0x481f, 0x481f], /* CJK Ideograph Extension A */ + [0x4820, 0x4820], /* CJK Ideograph Extension A */ + [0x4821, 0x4821], /* CJK Ideograph Extension A */ + [0x4822, 0x4822], /* CJK Ideograph Extension A */ + [0x4823, 0x4823], /* CJK Ideograph Extension A */ + [0x4824, 0x4824], /* CJK Ideograph Extension A */ + [0x4825, 0x4825], /* CJK Ideograph Extension A */ + [0x4826, 0x4826], /* CJK Ideograph Extension A */ + [0x4827, 0x4827], /* CJK Ideograph Extension A */ + [0x4828, 0x4828], /* CJK Ideograph Extension A */ + [0x4829, 0x4829], /* CJK Ideograph Extension A */ + [0x482a, 0x482a], /* CJK Ideograph Extension A */ + [0x482b, 0x482b], /* CJK Ideograph Extension A */ + [0x482c, 0x482c], /* CJK Ideograph Extension A */ + [0x482d, 0x482d], /* CJK Ideograph Extension A */ + [0x482e, 0x482e], /* CJK Ideograph Extension A */ + [0x482f, 0x482f], /* CJK Ideograph Extension A */ + [0x4830, 0x4830], /* CJK Ideograph Extension A */ + [0x4831, 0x4831], /* CJK Ideograph Extension A */ + [0x4832, 0x4832], /* CJK Ideograph Extension A */ + [0x4833, 0x4833], /* CJK Ideograph Extension A */ + [0x4834, 0x4834], /* CJK Ideograph Extension A */ + [0x4835, 0x4835], /* CJK Ideograph Extension A */ + [0x4836, 0x4836], /* CJK Ideograph Extension A */ + [0x4837, 0x4837], /* CJK Ideograph Extension A */ + [0x4838, 0x4838], /* CJK Ideograph Extension A */ + [0x4839, 0x4839], /* CJK Ideograph Extension A */ + [0x483a, 0x483a], /* CJK Ideograph Extension A */ + [0x483b, 0x483b], /* CJK Ideograph Extension A */ + [0x483c, 0x483c], /* CJK Ideograph Extension A */ + [0x483d, 0x483d], /* CJK Ideograph Extension A */ + [0x483e, 0x483e], /* CJK Ideograph Extension A */ + [0x483f, 0x483f], /* CJK Ideograph Extension A */ + [0x4840, 0x4840], /* CJK Ideograph Extension A */ + [0x4841, 0x4841], /* CJK Ideograph Extension A */ + [0x4842, 0x4842], /* CJK Ideograph Extension A */ + [0x4843, 0x4843], /* CJK Ideograph Extension A */ + [0x4844, 0x4844], /* CJK Ideograph Extension A */ + [0x4845, 0x4845], /* CJK Ideograph Extension A */ + [0x4846, 0x4846], /* CJK Ideograph Extension A */ + [0x4847, 0x4847], /* CJK Ideograph Extension A */ + [0x4848, 0x4848], /* CJK Ideograph Extension A */ + [0x4849, 0x4849], /* CJK Ideograph Extension A */ + [0x484a, 0x484a], /* CJK Ideograph Extension A */ + [0x484b, 0x484b], /* CJK Ideograph Extension A */ + [0x484c, 0x484c], /* CJK Ideograph Extension A */ + [0x484d, 0x484d], /* CJK Ideograph Extension A */ + [0x484e, 0x484e], /* CJK Ideograph Extension A */ + [0x484f, 0x484f], /* CJK Ideograph Extension A */ + [0x4850, 0x4850], /* CJK Ideograph Extension A */ + [0x4851, 0x4851], /* CJK Ideograph Extension A */ + [0x4852, 0x4852], /* CJK Ideograph Extension A */ + [0x4853, 0x4853], /* CJK Ideograph Extension A */ + [0x4854, 0x4854], /* CJK Ideograph Extension A */ + [0x4855, 0x4855], /* CJK Ideograph Extension A */ + [0x4856, 0x4856], /* CJK Ideograph Extension A */ + [0x4857, 0x4857], /* CJK Ideograph Extension A */ + [0x4858, 0x4858], /* CJK Ideograph Extension A */ + [0x4859, 0x4859], /* CJK Ideograph Extension A */ + [0x485a, 0x485a], /* CJK Ideograph Extension A */ + [0x485b, 0x485b], /* CJK Ideograph Extension A */ + [0x485c, 0x485c], /* CJK Ideograph Extension A */ + [0x485d, 0x485d], /* CJK Ideograph Extension A */ + [0x485e, 0x485e], /* CJK Ideograph Extension A */ + [0x485f, 0x485f], /* CJK Ideograph Extension A */ + [0x4860, 0x4860], /* CJK Ideograph Extension A */ + [0x4861, 0x4861], /* CJK Ideograph Extension A */ + [0x4862, 0x4862], /* CJK Ideograph Extension A */ + [0x4863, 0x4863], /* CJK Ideograph Extension A */ + [0x4864, 0x4864], /* CJK Ideograph Extension A */ + [0x4865, 0x4865], /* CJK Ideograph Extension A */ + [0x4866, 0x4866], /* CJK Ideograph Extension A */ + [0x4867, 0x4867], /* CJK Ideograph Extension A */ + [0x4868, 0x4868], /* CJK Ideograph Extension A */ + [0x4869, 0x4869], /* CJK Ideograph Extension A */ + [0x486a, 0x486a], /* CJK Ideograph Extension A */ + [0x486b, 0x486b], /* CJK Ideograph Extension A */ + [0x486c, 0x486c], /* CJK Ideograph Extension A */ + [0x486d, 0x486d], /* CJK Ideograph Extension A */ + [0x486e, 0x486e], /* CJK Ideograph Extension A */ + [0x486f, 0x486f], /* CJK Ideograph Extension A */ + [0x4870, 0x4870], /* CJK Ideograph Extension A */ + [0x4871, 0x4871], /* CJK Ideograph Extension A */ + [0x4872, 0x4872], /* CJK Ideograph Extension A */ + [0x4873, 0x4873], /* CJK Ideograph Extension A */ + [0x4874, 0x4874], /* CJK Ideograph Extension A */ + [0x4875, 0x4875], /* CJK Ideograph Extension A */ + [0x4876, 0x4876], /* CJK Ideograph Extension A */ + [0x4877, 0x4877], /* CJK Ideograph Extension A */ + [0x4878, 0x4878], /* CJK Ideograph Extension A */ + [0x4879, 0x4879], /* CJK Ideograph Extension A */ + [0x487a, 0x487a], /* CJK Ideograph Extension A */ + [0x487b, 0x487b], /* CJK Ideograph Extension A */ + [0x487c, 0x487c], /* CJK Ideograph Extension A */ + [0x487d, 0x487d], /* CJK Ideograph Extension A */ + [0x487e, 0x487e], /* CJK Ideograph Extension A */ + [0x487f, 0x487f], /* CJK Ideograph Extension A */ + [0x4880, 0x4880], /* CJK Ideograph Extension A */ + [0x4881, 0x4881], /* CJK Ideograph Extension A */ + [0x4882, 0x4882], /* CJK Ideograph Extension A */ + [0x4883, 0x4883], /* CJK Ideograph Extension A */ + [0x4884, 0x4884], /* CJK Ideograph Extension A */ + [0x4885, 0x4885], /* CJK Ideograph Extension A */ + [0x4886, 0x4886], /* CJK Ideograph Extension A */ + [0x4887, 0x4887], /* CJK Ideograph Extension A */ + [0x4888, 0x4888], /* CJK Ideograph Extension A */ + [0x4889, 0x4889], /* CJK Ideograph Extension A */ + [0x488a, 0x488a], /* CJK Ideograph Extension A */ + [0x488b, 0x488b], /* CJK Ideograph Extension A */ + [0x488c, 0x488c], /* CJK Ideograph Extension A */ + [0x488d, 0x488d], /* CJK Ideograph Extension A */ + [0x488e, 0x488e], /* CJK Ideograph Extension A */ + [0x488f, 0x488f], /* CJK Ideograph Extension A */ + [0x4890, 0x4890], /* CJK Ideograph Extension A */ + [0x4891, 0x4891], /* CJK Ideograph Extension A */ + [0x4892, 0x4892], /* CJK Ideograph Extension A */ + [0x4893, 0x4893], /* CJK Ideograph Extension A */ + [0x4894, 0x4894], /* CJK Ideograph Extension A */ + [0x4895, 0x4895], /* CJK Ideograph Extension A */ + [0x4896, 0x4896], /* CJK Ideograph Extension A */ + [0x4897, 0x4897], /* CJK Ideograph Extension A */ + [0x4898, 0x4898], /* CJK Ideograph Extension A */ + [0x4899, 0x4899], /* CJK Ideograph Extension A */ + [0x489a, 0x489a], /* CJK Ideograph Extension A */ + [0x489b, 0x489b], /* CJK Ideograph Extension A */ + [0x489c, 0x489c], /* CJK Ideograph Extension A */ + [0x489d, 0x489d], /* CJK Ideograph Extension A */ + [0x489e, 0x489e], /* CJK Ideograph Extension A */ + [0x489f, 0x489f], /* CJK Ideograph Extension A */ + [0x48a0, 0x48a0], /* CJK Ideograph Extension A */ + [0x48a1, 0x48a1], /* CJK Ideograph Extension A */ + [0x48a2, 0x48a2], /* CJK Ideograph Extension A */ + [0x48a3, 0x48a3], /* CJK Ideograph Extension A */ + [0x48a4, 0x48a4], /* CJK Ideograph Extension A */ + [0x48a5, 0x48a5], /* CJK Ideograph Extension A */ + [0x48a6, 0x48a6], /* CJK Ideograph Extension A */ + [0x48a7, 0x48a7], /* CJK Ideograph Extension A */ + [0x48a8, 0x48a8], /* CJK Ideograph Extension A */ + [0x48a9, 0x48a9], /* CJK Ideograph Extension A */ + [0x48aa, 0x48aa], /* CJK Ideograph Extension A */ + [0x48ab, 0x48ab], /* CJK Ideograph Extension A */ + [0x48ac, 0x48ac], /* CJK Ideograph Extension A */ + [0x48ad, 0x48ad], /* CJK Ideograph Extension A */ + [0x48ae, 0x48ae], /* CJK Ideograph Extension A */ + [0x48af, 0x48af], /* CJK Ideograph Extension A */ + [0x48b0, 0x48b0], /* CJK Ideograph Extension A */ + [0x48b1, 0x48b1], /* CJK Ideograph Extension A */ + [0x48b2, 0x48b2], /* CJK Ideograph Extension A */ + [0x48b3, 0x48b3], /* CJK Ideograph Extension A */ + [0x48b4, 0x48b4], /* CJK Ideograph Extension A */ + [0x48b5, 0x48b5], /* CJK Ideograph Extension A */ + [0x48b6, 0x48b6], /* CJK Ideograph Extension A */ + [0x48b7, 0x48b7], /* CJK Ideograph Extension A */ + [0x48b8, 0x48b8], /* CJK Ideograph Extension A */ + [0x48b9, 0x48b9], /* CJK Ideograph Extension A */ + [0x48ba, 0x48ba], /* CJK Ideograph Extension A */ + [0x48bb, 0x48bb], /* CJK Ideograph Extension A */ + [0x48bc, 0x48bc], /* CJK Ideograph Extension A */ + [0x48bd, 0x48bd], /* CJK Ideograph Extension A */ + [0x48be, 0x48be], /* CJK Ideograph Extension A */ + [0x48bf, 0x48bf], /* CJK Ideograph Extension A */ + [0x48c0, 0x48c0], /* CJK Ideograph Extension A */ + [0x48c1, 0x48c1], /* CJK Ideograph Extension A */ + [0x48c2, 0x48c2], /* CJK Ideograph Extension A */ + [0x48c3, 0x48c3], /* CJK Ideograph Extension A */ + [0x48c4, 0x48c4], /* CJK Ideograph Extension A */ + [0x48c5, 0x48c5], /* CJK Ideograph Extension A */ + [0x48c6, 0x48c6], /* CJK Ideograph Extension A */ + [0x48c7, 0x48c7], /* CJK Ideograph Extension A */ + [0x48c8, 0x48c8], /* CJK Ideograph Extension A */ + [0x48c9, 0x48c9], /* CJK Ideograph Extension A */ + [0x48ca, 0x48ca], /* CJK Ideograph Extension A */ + [0x48cb, 0x48cb], /* CJK Ideograph Extension A */ + [0x48cc, 0x48cc], /* CJK Ideograph Extension A */ + [0x48cd, 0x48cd], /* CJK Ideograph Extension A */ + [0x48ce, 0x48ce], /* CJK Ideograph Extension A */ + [0x48cf, 0x48cf], /* CJK Ideograph Extension A */ + [0x48d0, 0x48d0], /* CJK Ideograph Extension A */ + [0x48d1, 0x48d1], /* CJK Ideograph Extension A */ + [0x48d2, 0x48d2], /* CJK Ideograph Extension A */ + [0x48d3, 0x48d3], /* CJK Ideograph Extension A */ + [0x48d4, 0x48d4], /* CJK Ideograph Extension A */ + [0x48d5, 0x48d5], /* CJK Ideograph Extension A */ + [0x48d6, 0x48d6], /* CJK Ideograph Extension A */ + [0x48d7, 0x48d7], /* CJK Ideograph Extension A */ + [0x48d8, 0x48d8], /* CJK Ideograph Extension A */ + [0x48d9, 0x48d9], /* CJK Ideograph Extension A */ + [0x48da, 0x48da], /* CJK Ideograph Extension A */ + [0x48db, 0x48db], /* CJK Ideograph Extension A */ + [0x48dc, 0x48dc], /* CJK Ideograph Extension A */ + [0x48dd, 0x48dd], /* CJK Ideograph Extension A */ + [0x48de, 0x48de], /* CJK Ideograph Extension A */ + [0x48df, 0x48df], /* CJK Ideograph Extension A */ + [0x48e0, 0x48e0], /* CJK Ideograph Extension A */ + [0x48e1, 0x48e1], /* CJK Ideograph Extension A */ + [0x48e2, 0x48e2], /* CJK Ideograph Extension A */ + [0x48e3, 0x48e3], /* CJK Ideograph Extension A */ + [0x48e4, 0x48e4], /* CJK Ideograph Extension A */ + [0x48e5, 0x48e5], /* CJK Ideograph Extension A */ + [0x48e6, 0x48e6], /* CJK Ideograph Extension A */ + [0x48e7, 0x48e7], /* CJK Ideograph Extension A */ + [0x48e8, 0x48e8], /* CJK Ideograph Extension A */ + [0x48e9, 0x48e9], /* CJK Ideograph Extension A */ + [0x48ea, 0x48ea], /* CJK Ideograph Extension A */ + [0x48eb, 0x48eb], /* CJK Ideograph Extension A */ + [0x48ec, 0x48ec], /* CJK Ideograph Extension A */ + [0x48ed, 0x48ed], /* CJK Ideograph Extension A */ + [0x48ee, 0x48ee], /* CJK Ideograph Extension A */ + [0x48ef, 0x48ef], /* CJK Ideograph Extension A */ + [0x48f0, 0x48f0], /* CJK Ideograph Extension A */ + [0x48f1, 0x48f1], /* CJK Ideograph Extension A */ + [0x48f2, 0x48f2], /* CJK Ideograph Extension A */ + [0x48f3, 0x48f3], /* CJK Ideograph Extension A */ + [0x48f4, 0x48f4], /* CJK Ideograph Extension A */ + [0x48f5, 0x48f5], /* CJK Ideograph Extension A */ + [0x48f6, 0x48f6], /* CJK Ideograph Extension A */ + [0x48f7, 0x48f7], /* CJK Ideograph Extension A */ + [0x48f8, 0x48f8], /* CJK Ideograph Extension A */ + [0x48f9, 0x48f9], /* CJK Ideograph Extension A */ + [0x48fa, 0x48fa], /* CJK Ideograph Extension A */ + [0x48fb, 0x48fb], /* CJK Ideograph Extension A */ + [0x48fc, 0x48fc], /* CJK Ideograph Extension A */ + [0x48fd, 0x48fd], /* CJK Ideograph Extension A */ + [0x48fe, 0x48fe], /* CJK Ideograph Extension A */ + [0x48ff, 0x48ff], /* CJK Ideograph Extension A */ + [0x4900, 0x4900], /* CJK Ideograph Extension A */ + [0x4901, 0x4901], /* CJK Ideograph Extension A */ + [0x4902, 0x4902], /* CJK Ideograph Extension A */ + [0x4903, 0x4903], /* CJK Ideograph Extension A */ + [0x4904, 0x4904], /* CJK Ideograph Extension A */ + [0x4905, 0x4905], /* CJK Ideograph Extension A */ + [0x4906, 0x4906], /* CJK Ideograph Extension A */ + [0x4907, 0x4907], /* CJK Ideograph Extension A */ + [0x4908, 0x4908], /* CJK Ideograph Extension A */ + [0x4909, 0x4909], /* CJK Ideograph Extension A */ + [0x490a, 0x490a], /* CJK Ideograph Extension A */ + [0x490b, 0x490b], /* CJK Ideograph Extension A */ + [0x490c, 0x490c], /* CJK Ideograph Extension A */ + [0x490d, 0x490d], /* CJK Ideograph Extension A */ + [0x490e, 0x490e], /* CJK Ideograph Extension A */ + [0x490f, 0x490f], /* CJK Ideograph Extension A */ + [0x4910, 0x4910], /* CJK Ideograph Extension A */ + [0x4911, 0x4911], /* CJK Ideograph Extension A */ + [0x4912, 0x4912], /* CJK Ideograph Extension A */ + [0x4913, 0x4913], /* CJK Ideograph Extension A */ + [0x4914, 0x4914], /* CJK Ideograph Extension A */ + [0x4915, 0x4915], /* CJK Ideograph Extension A */ + [0x4916, 0x4916], /* CJK Ideograph Extension A */ + [0x4917, 0x4917], /* CJK Ideograph Extension A */ + [0x4918, 0x4918], /* CJK Ideograph Extension A */ + [0x4919, 0x4919], /* CJK Ideograph Extension A */ + [0x491a, 0x491a], /* CJK Ideograph Extension A */ + [0x491b, 0x491b], /* CJK Ideograph Extension A */ + [0x491c, 0x491c], /* CJK Ideograph Extension A */ + [0x491d, 0x491d], /* CJK Ideograph Extension A */ + [0x491e, 0x491e], /* CJK Ideograph Extension A */ + [0x491f, 0x491f], /* CJK Ideograph Extension A */ + [0x4920, 0x4920], /* CJK Ideograph Extension A */ + [0x4921, 0x4921], /* CJK Ideograph Extension A */ + [0x4922, 0x4922], /* CJK Ideograph Extension A */ + [0x4923, 0x4923], /* CJK Ideograph Extension A */ + [0x4924, 0x4924], /* CJK Ideograph Extension A */ + [0x4925, 0x4925], /* CJK Ideograph Extension A */ + [0x4926, 0x4926], /* CJK Ideograph Extension A */ + [0x4927, 0x4927], /* CJK Ideograph Extension A */ + [0x4928, 0x4928], /* CJK Ideograph Extension A */ + [0x4929, 0x4929], /* CJK Ideograph Extension A */ + [0x492a, 0x492a], /* CJK Ideograph Extension A */ + [0x492b, 0x492b], /* CJK Ideograph Extension A */ + [0x492c, 0x492c], /* CJK Ideograph Extension A */ + [0x492d, 0x492d], /* CJK Ideograph Extension A */ + [0x492e, 0x492e], /* CJK Ideograph Extension A */ + [0x492f, 0x492f], /* CJK Ideograph Extension A */ + [0x4930, 0x4930], /* CJK Ideograph Extension A */ + [0x4931, 0x4931], /* CJK Ideograph Extension A */ + [0x4932, 0x4932], /* CJK Ideograph Extension A */ + [0x4933, 0x4933], /* CJK Ideograph Extension A */ + [0x4934, 0x4934], /* CJK Ideograph Extension A */ + [0x4935, 0x4935], /* CJK Ideograph Extension A */ + [0x4936, 0x4936], /* CJK Ideograph Extension A */ + [0x4937, 0x4937], /* CJK Ideograph Extension A */ + [0x4938, 0x4938], /* CJK Ideograph Extension A */ + [0x4939, 0x4939], /* CJK Ideograph Extension A */ + [0x493a, 0x493a], /* CJK Ideograph Extension A */ + [0x493b, 0x493b], /* CJK Ideograph Extension A */ + [0x493c, 0x493c], /* CJK Ideograph Extension A */ + [0x493d, 0x493d], /* CJK Ideograph Extension A */ + [0x493e, 0x493e], /* CJK Ideograph Extension A */ + [0x493f, 0x493f], /* CJK Ideograph Extension A */ + [0x4940, 0x4940], /* CJK Ideograph Extension A */ + [0x4941, 0x4941], /* CJK Ideograph Extension A */ + [0x4942, 0x4942], /* CJK Ideograph Extension A */ + [0x4943, 0x4943], /* CJK Ideograph Extension A */ + [0x4944, 0x4944], /* CJK Ideograph Extension A */ + [0x4945, 0x4945], /* CJK Ideograph Extension A */ + [0x4946, 0x4946], /* CJK Ideograph Extension A */ + [0x4947, 0x4947], /* CJK Ideograph Extension A */ + [0x4948, 0x4948], /* CJK Ideograph Extension A */ + [0x4949, 0x4949], /* CJK Ideograph Extension A */ + [0x494a, 0x494a], /* CJK Ideograph Extension A */ + [0x494b, 0x494b], /* CJK Ideograph Extension A */ + [0x494c, 0x494c], /* CJK Ideograph Extension A */ + [0x494d, 0x494d], /* CJK Ideograph Extension A */ + [0x494e, 0x494e], /* CJK Ideograph Extension A */ + [0x494f, 0x494f], /* CJK Ideograph Extension A */ + [0x4950, 0x4950], /* CJK Ideograph Extension A */ + [0x4951, 0x4951], /* CJK Ideograph Extension A */ + [0x4952, 0x4952], /* CJK Ideograph Extension A */ + [0x4953, 0x4953], /* CJK Ideograph Extension A */ + [0x4954, 0x4954], /* CJK Ideograph Extension A */ + [0x4955, 0x4955], /* CJK Ideograph Extension A */ + [0x4956, 0x4956], /* CJK Ideograph Extension A */ + [0x4957, 0x4957], /* CJK Ideograph Extension A */ + [0x4958, 0x4958], /* CJK Ideograph Extension A */ + [0x4959, 0x4959], /* CJK Ideograph Extension A */ + [0x495a, 0x495a], /* CJK Ideograph Extension A */ + [0x495b, 0x495b], /* CJK Ideograph Extension A */ + [0x495c, 0x495c], /* CJK Ideograph Extension A */ + [0x495d, 0x495d], /* CJK Ideograph Extension A */ + [0x495e, 0x495e], /* CJK Ideograph Extension A */ + [0x495f, 0x495f], /* CJK Ideograph Extension A */ + [0x4960, 0x4960], /* CJK Ideograph Extension A */ + [0x4961, 0x4961], /* CJK Ideograph Extension A */ + [0x4962, 0x4962], /* CJK Ideograph Extension A */ + [0x4963, 0x4963], /* CJK Ideograph Extension A */ + [0x4964, 0x4964], /* CJK Ideograph Extension A */ + [0x4965, 0x4965], /* CJK Ideograph Extension A */ + [0x4966, 0x4966], /* CJK Ideograph Extension A */ + [0x4967, 0x4967], /* CJK Ideograph Extension A */ + [0x4968, 0x4968], /* CJK Ideograph Extension A */ + [0x4969, 0x4969], /* CJK Ideograph Extension A */ + [0x496a, 0x496a], /* CJK Ideograph Extension A */ + [0x496b, 0x496b], /* CJK Ideograph Extension A */ + [0x496c, 0x496c], /* CJK Ideograph Extension A */ + [0x496d, 0x496d], /* CJK Ideograph Extension A */ + [0x496e, 0x496e], /* CJK Ideograph Extension A */ + [0x496f, 0x496f], /* CJK Ideograph Extension A */ + [0x4970, 0x4970], /* CJK Ideograph Extension A */ + [0x4971, 0x4971], /* CJK Ideograph Extension A */ + [0x4972, 0x4972], /* CJK Ideograph Extension A */ + [0x4973, 0x4973], /* CJK Ideograph Extension A */ + [0x4974, 0x4974], /* CJK Ideograph Extension A */ + [0x4975, 0x4975], /* CJK Ideograph Extension A */ + [0x4976, 0x4976], /* CJK Ideograph Extension A */ + [0x4977, 0x4977], /* CJK Ideograph Extension A */ + [0x4978, 0x4978], /* CJK Ideograph Extension A */ + [0x4979, 0x4979], /* CJK Ideograph Extension A */ + [0x497a, 0x497a], /* CJK Ideograph Extension A */ + [0x497b, 0x497b], /* CJK Ideograph Extension A */ + [0x497c, 0x497c], /* CJK Ideograph Extension A */ + [0x497d, 0x497d], /* CJK Ideograph Extension A */ + [0x497e, 0x497e], /* CJK Ideograph Extension A */ + [0x497f, 0x497f], /* CJK Ideograph Extension A */ + [0x4980, 0x4980], /* CJK Ideograph Extension A */ + [0x4981, 0x4981], /* CJK Ideograph Extension A */ + [0x4982, 0x4982], /* CJK Ideograph Extension A */ + [0x4983, 0x4983], /* CJK Ideograph Extension A */ + [0x4984, 0x4984], /* CJK Ideograph Extension A */ + [0x4985, 0x4985], /* CJK Ideograph Extension A */ + [0x4986, 0x4986], /* CJK Ideograph Extension A */ + [0x4987, 0x4987], /* CJK Ideograph Extension A */ + [0x4988, 0x4988], /* CJK Ideograph Extension A */ + [0x4989, 0x4989], /* CJK Ideograph Extension A */ + [0x498a, 0x498a], /* CJK Ideograph Extension A */ + [0x498b, 0x498b], /* CJK Ideograph Extension A */ + [0x498c, 0x498c], /* CJK Ideograph Extension A */ + [0x498d, 0x498d], /* CJK Ideograph Extension A */ + [0x498e, 0x498e], /* CJK Ideograph Extension A */ + [0x498f, 0x498f], /* CJK Ideograph Extension A */ + [0x4990, 0x4990], /* CJK Ideograph Extension A */ + [0x4991, 0x4991], /* CJK Ideograph Extension A */ + [0x4992, 0x4992], /* CJK Ideograph Extension A */ + [0x4993, 0x4993], /* CJK Ideograph Extension A */ + [0x4994, 0x4994], /* CJK Ideograph Extension A */ + [0x4995, 0x4995], /* CJK Ideograph Extension A */ + [0x4996, 0x4996], /* CJK Ideograph Extension A */ + [0x4997, 0x4997], /* CJK Ideograph Extension A */ + [0x4998, 0x4998], /* CJK Ideograph Extension A */ + [0x4999, 0x4999], /* CJK Ideograph Extension A */ + [0x499a, 0x499a], /* CJK Ideograph Extension A */ + [0x499b, 0x499b], /* CJK Ideograph Extension A */ + [0x499c, 0x499c], /* CJK Ideograph Extension A */ + [0x499d, 0x499d], /* CJK Ideograph Extension A */ + [0x499e, 0x499e], /* CJK Ideograph Extension A */ + [0x499f, 0x499f], /* CJK Ideograph Extension A */ + [0x49a0, 0x49a0], /* CJK Ideograph Extension A */ + [0x49a1, 0x49a1], /* CJK Ideograph Extension A */ + [0x49a2, 0x49a2], /* CJK Ideograph Extension A */ + [0x49a3, 0x49a3], /* CJK Ideograph Extension A */ + [0x49a4, 0x49a4], /* CJK Ideograph Extension A */ + [0x49a5, 0x49a5], /* CJK Ideograph Extension A */ + [0x49a6, 0x49a6], /* CJK Ideograph Extension A */ + [0x49a7, 0x49a7], /* CJK Ideograph Extension A */ + [0x49a8, 0x49a8], /* CJK Ideograph Extension A */ + [0x49a9, 0x49a9], /* CJK Ideograph Extension A */ + [0x49aa, 0x49aa], /* CJK Ideograph Extension A */ + [0x49ab, 0x49ab], /* CJK Ideograph Extension A */ + [0x49ac, 0x49ac], /* CJK Ideograph Extension A */ + [0x49ad, 0x49ad], /* CJK Ideograph Extension A */ + [0x49ae, 0x49ae], /* CJK Ideograph Extension A */ + [0x49af, 0x49af], /* CJK Ideograph Extension A */ + [0x49b0, 0x49b0], /* CJK Ideograph Extension A */ + [0x49b1, 0x49b1], /* CJK Ideograph Extension A */ + [0x49b2, 0x49b2], /* CJK Ideograph Extension A */ + [0x49b3, 0x49b3], /* CJK Ideograph Extension A */ + [0x49b4, 0x49b4], /* CJK Ideograph Extension A */ + [0x49b5, 0x49b5], /* CJK Ideograph Extension A */ + [0x49b6, 0x49b6], /* CJK Ideograph Extension A */ + [0x49b7, 0x49b7], /* CJK Ideograph Extension A */ + [0x49b8, 0x49b8], /* CJK Ideograph Extension A */ + [0x49b9, 0x49b9], /* CJK Ideograph Extension A */ + [0x49ba, 0x49ba], /* CJK Ideograph Extension A */ + [0x49bb, 0x49bb], /* CJK Ideograph Extension A */ + [0x49bc, 0x49bc], /* CJK Ideograph Extension A */ + [0x49bd, 0x49bd], /* CJK Ideograph Extension A */ + [0x49be, 0x49be], /* CJK Ideograph Extension A */ + [0x49bf, 0x49bf], /* CJK Ideograph Extension A */ + [0x49c0, 0x49c0], /* CJK Ideograph Extension A */ + [0x49c1, 0x49c1], /* CJK Ideograph Extension A */ + [0x49c2, 0x49c2], /* CJK Ideograph Extension A */ + [0x49c3, 0x49c3], /* CJK Ideograph Extension A */ + [0x49c4, 0x49c4], /* CJK Ideograph Extension A */ + [0x49c5, 0x49c5], /* CJK Ideograph Extension A */ + [0x49c6, 0x49c6], /* CJK Ideograph Extension A */ + [0x49c7, 0x49c7], /* CJK Ideograph Extension A */ + [0x49c8, 0x49c8], /* CJK Ideograph Extension A */ + [0x49c9, 0x49c9], /* CJK Ideograph Extension A */ + [0x49ca, 0x49ca], /* CJK Ideograph Extension A */ + [0x49cb, 0x49cb], /* CJK Ideograph Extension A */ + [0x49cc, 0x49cc], /* CJK Ideograph Extension A */ + [0x49cd, 0x49cd], /* CJK Ideograph Extension A */ + [0x49ce, 0x49ce], /* CJK Ideograph Extension A */ + [0x49cf, 0x49cf], /* CJK Ideograph Extension A */ + [0x49d0, 0x49d0], /* CJK Ideograph Extension A */ + [0x49d1, 0x49d1], /* CJK Ideograph Extension A */ + [0x49d2, 0x49d2], /* CJK Ideograph Extension A */ + [0x49d3, 0x49d3], /* CJK Ideograph Extension A */ + [0x49d4, 0x49d4], /* CJK Ideograph Extension A */ + [0x49d5, 0x49d5], /* CJK Ideograph Extension A */ + [0x49d6, 0x49d6], /* CJK Ideograph Extension A */ + [0x49d7, 0x49d7], /* CJK Ideograph Extension A */ + [0x49d8, 0x49d8], /* CJK Ideograph Extension A */ + [0x49d9, 0x49d9], /* CJK Ideograph Extension A */ + [0x49da, 0x49da], /* CJK Ideograph Extension A */ + [0x49db, 0x49db], /* CJK Ideograph Extension A */ + [0x49dc, 0x49dc], /* CJK Ideograph Extension A */ + [0x49dd, 0x49dd], /* CJK Ideograph Extension A */ + [0x49de, 0x49de], /* CJK Ideograph Extension A */ + [0x49df, 0x49df], /* CJK Ideograph Extension A */ + [0x49e0, 0x49e0], /* CJK Ideograph Extension A */ + [0x49e1, 0x49e1], /* CJK Ideograph Extension A */ + [0x49e2, 0x49e2], /* CJK Ideograph Extension A */ + [0x49e3, 0x49e3], /* CJK Ideograph Extension A */ + [0x49e4, 0x49e4], /* CJK Ideograph Extension A */ + [0x49e5, 0x49e5], /* CJK Ideograph Extension A */ + [0x49e6, 0x49e6], /* CJK Ideograph Extension A */ + [0x49e7, 0x49e7], /* CJK Ideograph Extension A */ + [0x49e8, 0x49e8], /* CJK Ideograph Extension A */ + [0x49e9, 0x49e9], /* CJK Ideograph Extension A */ + [0x49ea, 0x49ea], /* CJK Ideograph Extension A */ + [0x49eb, 0x49eb], /* CJK Ideograph Extension A */ + [0x49ec, 0x49ec], /* CJK Ideograph Extension A */ + [0x49ed, 0x49ed], /* CJK Ideograph Extension A */ + [0x49ee, 0x49ee], /* CJK Ideograph Extension A */ + [0x49ef, 0x49ef], /* CJK Ideograph Extension A */ + [0x49f0, 0x49f0], /* CJK Ideograph Extension A */ + [0x49f1, 0x49f1], /* CJK Ideograph Extension A */ + [0x49f2, 0x49f2], /* CJK Ideograph Extension A */ + [0x49f3, 0x49f3], /* CJK Ideograph Extension A */ + [0x49f4, 0x49f4], /* CJK Ideograph Extension A */ + [0x49f5, 0x49f5], /* CJK Ideograph Extension A */ + [0x49f6, 0x49f6], /* CJK Ideograph Extension A */ + [0x49f7, 0x49f7], /* CJK Ideograph Extension A */ + [0x49f8, 0x49f8], /* CJK Ideograph Extension A */ + [0x49f9, 0x49f9], /* CJK Ideograph Extension A */ + [0x49fa, 0x49fa], /* CJK Ideograph Extension A */ + [0x49fb, 0x49fb], /* CJK Ideograph Extension A */ + [0x49fc, 0x49fc], /* CJK Ideograph Extension A */ + [0x49fd, 0x49fd], /* CJK Ideograph Extension A */ + [0x49fe, 0x49fe], /* CJK Ideograph Extension A */ + [0x49ff, 0x49ff], /* CJK Ideograph Extension A */ + [0x4a00, 0x4a00], /* CJK Ideograph Extension A */ + [0x4a01, 0x4a01], /* CJK Ideograph Extension A */ + [0x4a02, 0x4a02], /* CJK Ideograph Extension A */ + [0x4a03, 0x4a03], /* CJK Ideograph Extension A */ + [0x4a04, 0x4a04], /* CJK Ideograph Extension A */ + [0x4a05, 0x4a05], /* CJK Ideograph Extension A */ + [0x4a06, 0x4a06], /* CJK Ideograph Extension A */ + [0x4a07, 0x4a07], /* CJK Ideograph Extension A */ + [0x4a08, 0x4a08], /* CJK Ideograph Extension A */ + [0x4a09, 0x4a09], /* CJK Ideograph Extension A */ + [0x4a0a, 0x4a0a], /* CJK Ideograph Extension A */ + [0x4a0b, 0x4a0b], /* CJK Ideograph Extension A */ + [0x4a0c, 0x4a0c], /* CJK Ideograph Extension A */ + [0x4a0d, 0x4a0d], /* CJK Ideograph Extension A */ + [0x4a0e, 0x4a0e], /* CJK Ideograph Extension A */ + [0x4a0f, 0x4a0f], /* CJK Ideograph Extension A */ + [0x4a10, 0x4a10], /* CJK Ideograph Extension A */ + [0x4a11, 0x4a11], /* CJK Ideograph Extension A */ + [0x4a12, 0x4a12], /* CJK Ideograph Extension A */ + [0x4a13, 0x4a13], /* CJK Ideograph Extension A */ + [0x4a14, 0x4a14], /* CJK Ideograph Extension A */ + [0x4a15, 0x4a15], /* CJK Ideograph Extension A */ + [0x4a16, 0x4a16], /* CJK Ideograph Extension A */ + [0x4a17, 0x4a17], /* CJK Ideograph Extension A */ + [0x4a18, 0x4a18], /* CJK Ideograph Extension A */ + [0x4a19, 0x4a19], /* CJK Ideograph Extension A */ + [0x4a1a, 0x4a1a], /* CJK Ideograph Extension A */ + [0x4a1b, 0x4a1b], /* CJK Ideograph Extension A */ + [0x4a1c, 0x4a1c], /* CJK Ideograph Extension A */ + [0x4a1d, 0x4a1d], /* CJK Ideograph Extension A */ + [0x4a1e, 0x4a1e], /* CJK Ideograph Extension A */ + [0x4a1f, 0x4a1f], /* CJK Ideograph Extension A */ + [0x4a20, 0x4a20], /* CJK Ideograph Extension A */ + [0x4a21, 0x4a21], /* CJK Ideograph Extension A */ + [0x4a22, 0x4a22], /* CJK Ideograph Extension A */ + [0x4a23, 0x4a23], /* CJK Ideograph Extension A */ + [0x4a24, 0x4a24], /* CJK Ideograph Extension A */ + [0x4a25, 0x4a25], /* CJK Ideograph Extension A */ + [0x4a26, 0x4a26], /* CJK Ideograph Extension A */ + [0x4a27, 0x4a27], /* CJK Ideograph Extension A */ + [0x4a28, 0x4a28], /* CJK Ideograph Extension A */ + [0x4a29, 0x4a29], /* CJK Ideograph Extension A */ + [0x4a2a, 0x4a2a], /* CJK Ideograph Extension A */ + [0x4a2b, 0x4a2b], /* CJK Ideograph Extension A */ + [0x4a2c, 0x4a2c], /* CJK Ideograph Extension A */ + [0x4a2d, 0x4a2d], /* CJK Ideograph Extension A */ + [0x4a2e, 0x4a2e], /* CJK Ideograph Extension A */ + [0x4a2f, 0x4a2f], /* CJK Ideograph Extension A */ + [0x4a30, 0x4a30], /* CJK Ideograph Extension A */ + [0x4a31, 0x4a31], /* CJK Ideograph Extension A */ + [0x4a32, 0x4a32], /* CJK Ideograph Extension A */ + [0x4a33, 0x4a33], /* CJK Ideograph Extension A */ + [0x4a34, 0x4a34], /* CJK Ideograph Extension A */ + [0x4a35, 0x4a35], /* CJK Ideograph Extension A */ + [0x4a36, 0x4a36], /* CJK Ideograph Extension A */ + [0x4a37, 0x4a37], /* CJK Ideograph Extension A */ + [0x4a38, 0x4a38], /* CJK Ideograph Extension A */ + [0x4a39, 0x4a39], /* CJK Ideograph Extension A */ + [0x4a3a, 0x4a3a], /* CJK Ideograph Extension A */ + [0x4a3b, 0x4a3b], /* CJK Ideograph Extension A */ + [0x4a3c, 0x4a3c], /* CJK Ideograph Extension A */ + [0x4a3d, 0x4a3d], /* CJK Ideograph Extension A */ + [0x4a3e, 0x4a3e], /* CJK Ideograph Extension A */ + [0x4a3f, 0x4a3f], /* CJK Ideograph Extension A */ + [0x4a40, 0x4a40], /* CJK Ideograph Extension A */ + [0x4a41, 0x4a41], /* CJK Ideograph Extension A */ + [0x4a42, 0x4a42], /* CJK Ideograph Extension A */ + [0x4a43, 0x4a43], /* CJK Ideograph Extension A */ + [0x4a44, 0x4a44], /* CJK Ideograph Extension A */ + [0x4a45, 0x4a45], /* CJK Ideograph Extension A */ + [0x4a46, 0x4a46], /* CJK Ideograph Extension A */ + [0x4a47, 0x4a47], /* CJK Ideograph Extension A */ + [0x4a48, 0x4a48], /* CJK Ideograph Extension A */ + [0x4a49, 0x4a49], /* CJK Ideograph Extension A */ + [0x4a4a, 0x4a4a], /* CJK Ideograph Extension A */ + [0x4a4b, 0x4a4b], /* CJK Ideograph Extension A */ + [0x4a4c, 0x4a4c], /* CJK Ideograph Extension A */ + [0x4a4d, 0x4a4d], /* CJK Ideograph Extension A */ + [0x4a4e, 0x4a4e], /* CJK Ideograph Extension A */ + [0x4a4f, 0x4a4f], /* CJK Ideograph Extension A */ + [0x4a50, 0x4a50], /* CJK Ideograph Extension A */ + [0x4a51, 0x4a51], /* CJK Ideograph Extension A */ + [0x4a52, 0x4a52], /* CJK Ideograph Extension A */ + [0x4a53, 0x4a53], /* CJK Ideograph Extension A */ + [0x4a54, 0x4a54], /* CJK Ideograph Extension A */ + [0x4a55, 0x4a55], /* CJK Ideograph Extension A */ + [0x4a56, 0x4a56], /* CJK Ideograph Extension A */ + [0x4a57, 0x4a57], /* CJK Ideograph Extension A */ + [0x4a58, 0x4a58], /* CJK Ideograph Extension A */ + [0x4a59, 0x4a59], /* CJK Ideograph Extension A */ + [0x4a5a, 0x4a5a], /* CJK Ideograph Extension A */ + [0x4a5b, 0x4a5b], /* CJK Ideograph Extension A */ + [0x4a5c, 0x4a5c], /* CJK Ideograph Extension A */ + [0x4a5d, 0x4a5d], /* CJK Ideograph Extension A */ + [0x4a5e, 0x4a5e], /* CJK Ideograph Extension A */ + [0x4a5f, 0x4a5f], /* CJK Ideograph Extension A */ + [0x4a60, 0x4a60], /* CJK Ideograph Extension A */ + [0x4a61, 0x4a61], /* CJK Ideograph Extension A */ + [0x4a62, 0x4a62], /* CJK Ideograph Extension A */ + [0x4a63, 0x4a63], /* CJK Ideograph Extension A */ + [0x4a64, 0x4a64], /* CJK Ideograph Extension A */ + [0x4a65, 0x4a65], /* CJK Ideograph Extension A */ + [0x4a66, 0x4a66], /* CJK Ideograph Extension A */ + [0x4a67, 0x4a67], /* CJK Ideograph Extension A */ + [0x4a68, 0x4a68], /* CJK Ideograph Extension A */ + [0x4a69, 0x4a69], /* CJK Ideograph Extension A */ + [0x4a6a, 0x4a6a], /* CJK Ideograph Extension A */ + [0x4a6b, 0x4a6b], /* CJK Ideograph Extension A */ + [0x4a6c, 0x4a6c], /* CJK Ideograph Extension A */ + [0x4a6d, 0x4a6d], /* CJK Ideograph Extension A */ + [0x4a6e, 0x4a6e], /* CJK Ideograph Extension A */ + [0x4a6f, 0x4a6f], /* CJK Ideograph Extension A */ + [0x4a70, 0x4a70], /* CJK Ideograph Extension A */ + [0x4a71, 0x4a71], /* CJK Ideograph Extension A */ + [0x4a72, 0x4a72], /* CJK Ideograph Extension A */ + [0x4a73, 0x4a73], /* CJK Ideograph Extension A */ + [0x4a74, 0x4a74], /* CJK Ideograph Extension A */ + [0x4a75, 0x4a75], /* CJK Ideograph Extension A */ + [0x4a76, 0x4a76], /* CJK Ideograph Extension A */ + [0x4a77, 0x4a77], /* CJK Ideograph Extension A */ + [0x4a78, 0x4a78], /* CJK Ideograph Extension A */ + [0x4a79, 0x4a79], /* CJK Ideograph Extension A */ + [0x4a7a, 0x4a7a], /* CJK Ideograph Extension A */ + [0x4a7b, 0x4a7b], /* CJK Ideograph Extension A */ + [0x4a7c, 0x4a7c], /* CJK Ideograph Extension A */ + [0x4a7d, 0x4a7d], /* CJK Ideograph Extension A */ + [0x4a7e, 0x4a7e], /* CJK Ideograph Extension A */ + [0x4a7f, 0x4a7f], /* CJK Ideograph Extension A */ + [0x4a80, 0x4a80], /* CJK Ideograph Extension A */ + [0x4a81, 0x4a81], /* CJK Ideograph Extension A */ + [0x4a82, 0x4a82], /* CJK Ideograph Extension A */ + [0x4a83, 0x4a83], /* CJK Ideograph Extension A */ + [0x4a84, 0x4a84], /* CJK Ideograph Extension A */ + [0x4a85, 0x4a85], /* CJK Ideograph Extension A */ + [0x4a86, 0x4a86], /* CJK Ideograph Extension A */ + [0x4a87, 0x4a87], /* CJK Ideograph Extension A */ + [0x4a88, 0x4a88], /* CJK Ideograph Extension A */ + [0x4a89, 0x4a89], /* CJK Ideograph Extension A */ + [0x4a8a, 0x4a8a], /* CJK Ideograph Extension A */ + [0x4a8b, 0x4a8b], /* CJK Ideograph Extension A */ + [0x4a8c, 0x4a8c], /* CJK Ideograph Extension A */ + [0x4a8d, 0x4a8d], /* CJK Ideograph Extension A */ + [0x4a8e, 0x4a8e], /* CJK Ideograph Extension A */ + [0x4a8f, 0x4a8f], /* CJK Ideograph Extension A */ + [0x4a90, 0x4a90], /* CJK Ideograph Extension A */ + [0x4a91, 0x4a91], /* CJK Ideograph Extension A */ + [0x4a92, 0x4a92], /* CJK Ideograph Extension A */ + [0x4a93, 0x4a93], /* CJK Ideograph Extension A */ + [0x4a94, 0x4a94], /* CJK Ideograph Extension A */ + [0x4a95, 0x4a95], /* CJK Ideograph Extension A */ + [0x4a96, 0x4a96], /* CJK Ideograph Extension A */ + [0x4a97, 0x4a97], /* CJK Ideograph Extension A */ + [0x4a98, 0x4a98], /* CJK Ideograph Extension A */ + [0x4a99, 0x4a99], /* CJK Ideograph Extension A */ + [0x4a9a, 0x4a9a], /* CJK Ideograph Extension A */ + [0x4a9b, 0x4a9b], /* CJK Ideograph Extension A */ + [0x4a9c, 0x4a9c], /* CJK Ideograph Extension A */ + [0x4a9d, 0x4a9d], /* CJK Ideograph Extension A */ + [0x4a9e, 0x4a9e], /* CJK Ideograph Extension A */ + [0x4a9f, 0x4a9f], /* CJK Ideograph Extension A */ + [0x4aa0, 0x4aa0], /* CJK Ideograph Extension A */ + [0x4aa1, 0x4aa1], /* CJK Ideograph Extension A */ + [0x4aa2, 0x4aa2], /* CJK Ideograph Extension A */ + [0x4aa3, 0x4aa3], /* CJK Ideograph Extension A */ + [0x4aa4, 0x4aa4], /* CJK Ideograph Extension A */ + [0x4aa5, 0x4aa5], /* CJK Ideograph Extension A */ + [0x4aa6, 0x4aa6], /* CJK Ideograph Extension A */ + [0x4aa7, 0x4aa7], /* CJK Ideograph Extension A */ + [0x4aa8, 0x4aa8], /* CJK Ideograph Extension A */ + [0x4aa9, 0x4aa9], /* CJK Ideograph Extension A */ + [0x4aaa, 0x4aaa], /* CJK Ideograph Extension A */ + [0x4aab, 0x4aab], /* CJK Ideograph Extension A */ + [0x4aac, 0x4aac], /* CJK Ideograph Extension A */ + [0x4aad, 0x4aad], /* CJK Ideograph Extension A */ + [0x4aae, 0x4aae], /* CJK Ideograph Extension A */ + [0x4aaf, 0x4aaf], /* CJK Ideograph Extension A */ + [0x4ab0, 0x4ab0], /* CJK Ideograph Extension A */ + [0x4ab1, 0x4ab1], /* CJK Ideograph Extension A */ + [0x4ab2, 0x4ab2], /* CJK Ideograph Extension A */ + [0x4ab3, 0x4ab3], /* CJK Ideograph Extension A */ + [0x4ab4, 0x4ab4], /* CJK Ideograph Extension A */ + [0x4ab5, 0x4ab5], /* CJK Ideograph Extension A */ + [0x4ab6, 0x4ab6], /* CJK Ideograph Extension A */ + [0x4ab7, 0x4ab7], /* CJK Ideograph Extension A */ + [0x4ab8, 0x4ab8], /* CJK Ideograph Extension A */ + [0x4ab9, 0x4ab9], /* CJK Ideograph Extension A */ + [0x4aba, 0x4aba], /* CJK Ideograph Extension A */ + [0x4abb, 0x4abb], /* CJK Ideograph Extension A */ + [0x4abc, 0x4abc], /* CJK Ideograph Extension A */ + [0x4abd, 0x4abd], /* CJK Ideograph Extension A */ + [0x4abe, 0x4abe], /* CJK Ideograph Extension A */ + [0x4abf, 0x4abf], /* CJK Ideograph Extension A */ + [0x4ac0, 0x4ac0], /* CJK Ideograph Extension A */ + [0x4ac1, 0x4ac1], /* CJK Ideograph Extension A */ + [0x4ac2, 0x4ac2], /* CJK Ideograph Extension A */ + [0x4ac3, 0x4ac3], /* CJK Ideograph Extension A */ + [0x4ac4, 0x4ac4], /* CJK Ideograph Extension A */ + [0x4ac5, 0x4ac5], /* CJK Ideograph Extension A */ + [0x4ac6, 0x4ac6], /* CJK Ideograph Extension A */ + [0x4ac7, 0x4ac7], /* CJK Ideograph Extension A */ + [0x4ac8, 0x4ac8], /* CJK Ideograph Extension A */ + [0x4ac9, 0x4ac9], /* CJK Ideograph Extension A */ + [0x4aca, 0x4aca], /* CJK Ideograph Extension A */ + [0x4acb, 0x4acb], /* CJK Ideograph Extension A */ + [0x4acc, 0x4acc], /* CJK Ideograph Extension A */ + [0x4acd, 0x4acd], /* CJK Ideograph Extension A */ + [0x4ace, 0x4ace], /* CJK Ideograph Extension A */ + [0x4acf, 0x4acf], /* CJK Ideograph Extension A */ + [0x4ad0, 0x4ad0], /* CJK Ideograph Extension A */ + [0x4ad1, 0x4ad1], /* CJK Ideograph Extension A */ + [0x4ad2, 0x4ad2], /* CJK Ideograph Extension A */ + [0x4ad3, 0x4ad3], /* CJK Ideograph Extension A */ + [0x4ad4, 0x4ad4], /* CJK Ideograph Extension A */ + [0x4ad5, 0x4ad5], /* CJK Ideograph Extension A */ + [0x4ad6, 0x4ad6], /* CJK Ideograph Extension A */ + [0x4ad7, 0x4ad7], /* CJK Ideograph Extension A */ + [0x4ad8, 0x4ad8], /* CJK Ideograph Extension A */ + [0x4ad9, 0x4ad9], /* CJK Ideograph Extension A */ + [0x4ada, 0x4ada], /* CJK Ideograph Extension A */ + [0x4adb, 0x4adb], /* CJK Ideograph Extension A */ + [0x4adc, 0x4adc], /* CJK Ideograph Extension A */ + [0x4add, 0x4add], /* CJK Ideograph Extension A */ + [0x4ade, 0x4ade], /* CJK Ideograph Extension A */ + [0x4adf, 0x4adf], /* CJK Ideograph Extension A */ + [0x4ae0, 0x4ae0], /* CJK Ideograph Extension A */ + [0x4ae1, 0x4ae1], /* CJK Ideograph Extension A */ + [0x4ae2, 0x4ae2], /* CJK Ideograph Extension A */ + [0x4ae3, 0x4ae3], /* CJK Ideograph Extension A */ + [0x4ae4, 0x4ae4], /* CJK Ideograph Extension A */ + [0x4ae5, 0x4ae5], /* CJK Ideograph Extension A */ + [0x4ae6, 0x4ae6], /* CJK Ideograph Extension A */ + [0x4ae7, 0x4ae7], /* CJK Ideograph Extension A */ + [0x4ae8, 0x4ae8], /* CJK Ideograph Extension A */ + [0x4ae9, 0x4ae9], /* CJK Ideograph Extension A */ + [0x4aea, 0x4aea], /* CJK Ideograph Extension A */ + [0x4aeb, 0x4aeb], /* CJK Ideograph Extension A */ + [0x4aec, 0x4aec], /* CJK Ideograph Extension A */ + [0x4aed, 0x4aed], /* CJK Ideograph Extension A */ + [0x4aee, 0x4aee], /* CJK Ideograph Extension A */ + [0x4aef, 0x4aef], /* CJK Ideograph Extension A */ + [0x4af0, 0x4af0], /* CJK Ideograph Extension A */ + [0x4af1, 0x4af1], /* CJK Ideograph Extension A */ + [0x4af2, 0x4af2], /* CJK Ideograph Extension A */ + [0x4af3, 0x4af3], /* CJK Ideograph Extension A */ + [0x4af4, 0x4af4], /* CJK Ideograph Extension A */ + [0x4af5, 0x4af5], /* CJK Ideograph Extension A */ + [0x4af6, 0x4af6], /* CJK Ideograph Extension A */ + [0x4af7, 0x4af7], /* CJK Ideograph Extension A */ + [0x4af8, 0x4af8], /* CJK Ideograph Extension A */ + [0x4af9, 0x4af9], /* CJK Ideograph Extension A */ + [0x4afa, 0x4afa], /* CJK Ideograph Extension A */ + [0x4afb, 0x4afb], /* CJK Ideograph Extension A */ + [0x4afc, 0x4afc], /* CJK Ideograph Extension A */ + [0x4afd, 0x4afd], /* CJK Ideograph Extension A */ + [0x4afe, 0x4afe], /* CJK Ideograph Extension A */ + [0x4aff, 0x4aff], /* CJK Ideograph Extension A */ + [0x4b00, 0x4b00], /* CJK Ideograph Extension A */ + [0x4b01, 0x4b01], /* CJK Ideograph Extension A */ + [0x4b02, 0x4b02], /* CJK Ideograph Extension A */ + [0x4b03, 0x4b03], /* CJK Ideograph Extension A */ + [0x4b04, 0x4b04], /* CJK Ideograph Extension A */ + [0x4b05, 0x4b05], /* CJK Ideograph Extension A */ + [0x4b06, 0x4b06], /* CJK Ideograph Extension A */ + [0x4b07, 0x4b07], /* CJK Ideograph Extension A */ + [0x4b08, 0x4b08], /* CJK Ideograph Extension A */ + [0x4b09, 0x4b09], /* CJK Ideograph Extension A */ + [0x4b0a, 0x4b0a], /* CJK Ideograph Extension A */ + [0x4b0b, 0x4b0b], /* CJK Ideograph Extension A */ + [0x4b0c, 0x4b0c], /* CJK Ideograph Extension A */ + [0x4b0d, 0x4b0d], /* CJK Ideograph Extension A */ + [0x4b0e, 0x4b0e], /* CJK Ideograph Extension A */ + [0x4b0f, 0x4b0f], /* CJK Ideograph Extension A */ + [0x4b10, 0x4b10], /* CJK Ideograph Extension A */ + [0x4b11, 0x4b11], /* CJK Ideograph Extension A */ + [0x4b12, 0x4b12], /* CJK Ideograph Extension A */ + [0x4b13, 0x4b13], /* CJK Ideograph Extension A */ + [0x4b14, 0x4b14], /* CJK Ideograph Extension A */ + [0x4b15, 0x4b15], /* CJK Ideograph Extension A */ + [0x4b16, 0x4b16], /* CJK Ideograph Extension A */ + [0x4b17, 0x4b17], /* CJK Ideograph Extension A */ + [0x4b18, 0x4b18], /* CJK Ideograph Extension A */ + [0x4b19, 0x4b19], /* CJK Ideograph Extension A */ + [0x4b1a, 0x4b1a], /* CJK Ideograph Extension A */ + [0x4b1b, 0x4b1b], /* CJK Ideograph Extension A */ + [0x4b1c, 0x4b1c], /* CJK Ideograph Extension A */ + [0x4b1d, 0x4b1d], /* CJK Ideograph Extension A */ + [0x4b1e, 0x4b1e], /* CJK Ideograph Extension A */ + [0x4b1f, 0x4b1f], /* CJK Ideograph Extension A */ + [0x4b20, 0x4b20], /* CJK Ideograph Extension A */ + [0x4b21, 0x4b21], /* CJK Ideograph Extension A */ + [0x4b22, 0x4b22], /* CJK Ideograph Extension A */ + [0x4b23, 0x4b23], /* CJK Ideograph Extension A */ + [0x4b24, 0x4b24], /* CJK Ideograph Extension A */ + [0x4b25, 0x4b25], /* CJK Ideograph Extension A */ + [0x4b26, 0x4b26], /* CJK Ideograph Extension A */ + [0x4b27, 0x4b27], /* CJK Ideograph Extension A */ + [0x4b28, 0x4b28], /* CJK Ideograph Extension A */ + [0x4b29, 0x4b29], /* CJK Ideograph Extension A */ + [0x4b2a, 0x4b2a], /* CJK Ideograph Extension A */ + [0x4b2b, 0x4b2b], /* CJK Ideograph Extension A */ + [0x4b2c, 0x4b2c], /* CJK Ideograph Extension A */ + [0x4b2d, 0x4b2d], /* CJK Ideograph Extension A */ + [0x4b2e, 0x4b2e], /* CJK Ideograph Extension A */ + [0x4b2f, 0x4b2f], /* CJK Ideograph Extension A */ + [0x4b30, 0x4b30], /* CJK Ideograph Extension A */ + [0x4b31, 0x4b31], /* CJK Ideograph Extension A */ + [0x4b32, 0x4b32], /* CJK Ideograph Extension A */ + [0x4b33, 0x4b33], /* CJK Ideograph Extension A */ + [0x4b34, 0x4b34], /* CJK Ideograph Extension A */ + [0x4b35, 0x4b35], /* CJK Ideograph Extension A */ + [0x4b36, 0x4b36], /* CJK Ideograph Extension A */ + [0x4b37, 0x4b37], /* CJK Ideograph Extension A */ + [0x4b38, 0x4b38], /* CJK Ideograph Extension A */ + [0x4b39, 0x4b39], /* CJK Ideograph Extension A */ + [0x4b3a, 0x4b3a], /* CJK Ideograph Extension A */ + [0x4b3b, 0x4b3b], /* CJK Ideograph Extension A */ + [0x4b3c, 0x4b3c], /* CJK Ideograph Extension A */ + [0x4b3d, 0x4b3d], /* CJK Ideograph Extension A */ + [0x4b3e, 0x4b3e], /* CJK Ideograph Extension A */ + [0x4b3f, 0x4b3f], /* CJK Ideograph Extension A */ + [0x4b40, 0x4b40], /* CJK Ideograph Extension A */ + [0x4b41, 0x4b41], /* CJK Ideograph Extension A */ + [0x4b42, 0x4b42], /* CJK Ideograph Extension A */ + [0x4b43, 0x4b43], /* CJK Ideograph Extension A */ + [0x4b44, 0x4b44], /* CJK Ideograph Extension A */ + [0x4b45, 0x4b45], /* CJK Ideograph Extension A */ + [0x4b46, 0x4b46], /* CJK Ideograph Extension A */ + [0x4b47, 0x4b47], /* CJK Ideograph Extension A */ + [0x4b48, 0x4b48], /* CJK Ideograph Extension A */ + [0x4b49, 0x4b49], /* CJK Ideograph Extension A */ + [0x4b4a, 0x4b4a], /* CJK Ideograph Extension A */ + [0x4b4b, 0x4b4b], /* CJK Ideograph Extension A */ + [0x4b4c, 0x4b4c], /* CJK Ideograph Extension A */ + [0x4b4d, 0x4b4d], /* CJK Ideograph Extension A */ + [0x4b4e, 0x4b4e], /* CJK Ideograph Extension A */ + [0x4b4f, 0x4b4f], /* CJK Ideograph Extension A */ + [0x4b50, 0x4b50], /* CJK Ideograph Extension A */ + [0x4b51, 0x4b51], /* CJK Ideograph Extension A */ + [0x4b52, 0x4b52], /* CJK Ideograph Extension A */ + [0x4b53, 0x4b53], /* CJK Ideograph Extension A */ + [0x4b54, 0x4b54], /* CJK Ideograph Extension A */ + [0x4b55, 0x4b55], /* CJK Ideograph Extension A */ + [0x4b56, 0x4b56], /* CJK Ideograph Extension A */ + [0x4b57, 0x4b57], /* CJK Ideograph Extension A */ + [0x4b58, 0x4b58], /* CJK Ideograph Extension A */ + [0x4b59, 0x4b59], /* CJK Ideograph Extension A */ + [0x4b5a, 0x4b5a], /* CJK Ideograph Extension A */ + [0x4b5b, 0x4b5b], /* CJK Ideograph Extension A */ + [0x4b5c, 0x4b5c], /* CJK Ideograph Extension A */ + [0x4b5d, 0x4b5d], /* CJK Ideograph Extension A */ + [0x4b5e, 0x4b5e], /* CJK Ideograph Extension A */ + [0x4b5f, 0x4b5f], /* CJK Ideograph Extension A */ + [0x4b60, 0x4b60], /* CJK Ideograph Extension A */ + [0x4b61, 0x4b61], /* CJK Ideograph Extension A */ + [0x4b62, 0x4b62], /* CJK Ideograph Extension A */ + [0x4b63, 0x4b63], /* CJK Ideograph Extension A */ + [0x4b64, 0x4b64], /* CJK Ideograph Extension A */ + [0x4b65, 0x4b65], /* CJK Ideograph Extension A */ + [0x4b66, 0x4b66], /* CJK Ideograph Extension A */ + [0x4b67, 0x4b67], /* CJK Ideograph Extension A */ + [0x4b68, 0x4b68], /* CJK Ideograph Extension A */ + [0x4b69, 0x4b69], /* CJK Ideograph Extension A */ + [0x4b6a, 0x4b6a], /* CJK Ideograph Extension A */ + [0x4b6b, 0x4b6b], /* CJK Ideograph Extension A */ + [0x4b6c, 0x4b6c], /* CJK Ideograph Extension A */ + [0x4b6d, 0x4b6d], /* CJK Ideograph Extension A */ + [0x4b6e, 0x4b6e], /* CJK Ideograph Extension A */ + [0x4b6f, 0x4b6f], /* CJK Ideograph Extension A */ + [0x4b70, 0x4b70], /* CJK Ideograph Extension A */ + [0x4b71, 0x4b71], /* CJK Ideograph Extension A */ + [0x4b72, 0x4b72], /* CJK Ideograph Extension A */ + [0x4b73, 0x4b73], /* CJK Ideograph Extension A */ + [0x4b74, 0x4b74], /* CJK Ideograph Extension A */ + [0x4b75, 0x4b75], /* CJK Ideograph Extension A */ + [0x4b76, 0x4b76], /* CJK Ideograph Extension A */ + [0x4b77, 0x4b77], /* CJK Ideograph Extension A */ + [0x4b78, 0x4b78], /* CJK Ideograph Extension A */ + [0x4b79, 0x4b79], /* CJK Ideograph Extension A */ + [0x4b7a, 0x4b7a], /* CJK Ideograph Extension A */ + [0x4b7b, 0x4b7b], /* CJK Ideograph Extension A */ + [0x4b7c, 0x4b7c], /* CJK Ideograph Extension A */ + [0x4b7d, 0x4b7d], /* CJK Ideograph Extension A */ + [0x4b7e, 0x4b7e], /* CJK Ideograph Extension A */ + [0x4b7f, 0x4b7f], /* CJK Ideograph Extension A */ + [0x4b80, 0x4b80], /* CJK Ideograph Extension A */ + [0x4b81, 0x4b81], /* CJK Ideograph Extension A */ + [0x4b82, 0x4b82], /* CJK Ideograph Extension A */ + [0x4b83, 0x4b83], /* CJK Ideograph Extension A */ + [0x4b84, 0x4b84], /* CJK Ideograph Extension A */ + [0x4b85, 0x4b85], /* CJK Ideograph Extension A */ + [0x4b86, 0x4b86], /* CJK Ideograph Extension A */ + [0x4b87, 0x4b87], /* CJK Ideograph Extension A */ + [0x4b88, 0x4b88], /* CJK Ideograph Extension A */ + [0x4b89, 0x4b89], /* CJK Ideograph Extension A */ + [0x4b8a, 0x4b8a], /* CJK Ideograph Extension A */ + [0x4b8b, 0x4b8b], /* CJK Ideograph Extension A */ + [0x4b8c, 0x4b8c], /* CJK Ideograph Extension A */ + [0x4b8d, 0x4b8d], /* CJK Ideograph Extension A */ + [0x4b8e, 0x4b8e], /* CJK Ideograph Extension A */ + [0x4b8f, 0x4b8f], /* CJK Ideograph Extension A */ + [0x4b90, 0x4b90], /* CJK Ideograph Extension A */ + [0x4b91, 0x4b91], /* CJK Ideograph Extension A */ + [0x4b92, 0x4b92], /* CJK Ideograph Extension A */ + [0x4b93, 0x4b93], /* CJK Ideograph Extension A */ + [0x4b94, 0x4b94], /* CJK Ideograph Extension A */ + [0x4b95, 0x4b95], /* CJK Ideograph Extension A */ + [0x4b96, 0x4b96], /* CJK Ideograph Extension A */ + [0x4b97, 0x4b97], /* CJK Ideograph Extension A */ + [0x4b98, 0x4b98], /* CJK Ideograph Extension A */ + [0x4b99, 0x4b99], /* CJK Ideograph Extension A */ + [0x4b9a, 0x4b9a], /* CJK Ideograph Extension A */ + [0x4b9b, 0x4b9b], /* CJK Ideograph Extension A */ + [0x4b9c, 0x4b9c], /* CJK Ideograph Extension A */ + [0x4b9d, 0x4b9d], /* CJK Ideograph Extension A */ + [0x4b9e, 0x4b9e], /* CJK Ideograph Extension A */ + [0x4b9f, 0x4b9f], /* CJK Ideograph Extension A */ + [0x4ba0, 0x4ba0], /* CJK Ideograph Extension A */ + [0x4ba1, 0x4ba1], /* CJK Ideograph Extension A */ + [0x4ba2, 0x4ba2], /* CJK Ideograph Extension A */ + [0x4ba3, 0x4ba3], /* CJK Ideograph Extension A */ + [0x4ba4, 0x4ba4], /* CJK Ideograph Extension A */ + [0x4ba5, 0x4ba5], /* CJK Ideograph Extension A */ + [0x4ba6, 0x4ba6], /* CJK Ideograph Extension A */ + [0x4ba7, 0x4ba7], /* CJK Ideograph Extension A */ + [0x4ba8, 0x4ba8], /* CJK Ideograph Extension A */ + [0x4ba9, 0x4ba9], /* CJK Ideograph Extension A */ + [0x4baa, 0x4baa], /* CJK Ideograph Extension A */ + [0x4bab, 0x4bab], /* CJK Ideograph Extension A */ + [0x4bac, 0x4bac], /* CJK Ideograph Extension A */ + [0x4bad, 0x4bad], /* CJK Ideograph Extension A */ + [0x4bae, 0x4bae], /* CJK Ideograph Extension A */ + [0x4baf, 0x4baf], /* CJK Ideograph Extension A */ + [0x4bb0, 0x4bb0], /* CJK Ideograph Extension A */ + [0x4bb1, 0x4bb1], /* CJK Ideograph Extension A */ + [0x4bb2, 0x4bb2], /* CJK Ideograph Extension A */ + [0x4bb3, 0x4bb3], /* CJK Ideograph Extension A */ + [0x4bb4, 0x4bb4], /* CJK Ideograph Extension A */ + [0x4bb5, 0x4bb5], /* CJK Ideograph Extension A */ + [0x4bb6, 0x4bb6], /* CJK Ideograph Extension A */ + [0x4bb7, 0x4bb7], /* CJK Ideograph Extension A */ + [0x4bb8, 0x4bb8], /* CJK Ideograph Extension A */ + [0x4bb9, 0x4bb9], /* CJK Ideograph Extension A */ + [0x4bba, 0x4bba], /* CJK Ideograph Extension A */ + [0x4bbb, 0x4bbb], /* CJK Ideograph Extension A */ + [0x4bbc, 0x4bbc], /* CJK Ideograph Extension A */ + [0x4bbd, 0x4bbd], /* CJK Ideograph Extension A */ + [0x4bbe, 0x4bbe], /* CJK Ideograph Extension A */ + [0x4bbf, 0x4bbf], /* CJK Ideograph Extension A */ + [0x4bc0, 0x4bc0], /* CJK Ideograph Extension A */ + [0x4bc1, 0x4bc1], /* CJK Ideograph Extension A */ + [0x4bc2, 0x4bc2], /* CJK Ideograph Extension A */ + [0x4bc3, 0x4bc3], /* CJK Ideograph Extension A */ + [0x4bc4, 0x4bc4], /* CJK Ideograph Extension A */ + [0x4bc5, 0x4bc5], /* CJK Ideograph Extension A */ + [0x4bc6, 0x4bc6], /* CJK Ideograph Extension A */ + [0x4bc7, 0x4bc7], /* CJK Ideograph Extension A */ + [0x4bc8, 0x4bc8], /* CJK Ideograph Extension A */ + [0x4bc9, 0x4bc9], /* CJK Ideograph Extension A */ + [0x4bca, 0x4bca], /* CJK Ideograph Extension A */ + [0x4bcb, 0x4bcb], /* CJK Ideograph Extension A */ + [0x4bcc, 0x4bcc], /* CJK Ideograph Extension A */ + [0x4bcd, 0x4bcd], /* CJK Ideograph Extension A */ + [0x4bce, 0x4bce], /* CJK Ideograph Extension A */ + [0x4bcf, 0x4bcf], /* CJK Ideograph Extension A */ + [0x4bd0, 0x4bd0], /* CJK Ideograph Extension A */ + [0x4bd1, 0x4bd1], /* CJK Ideograph Extension A */ + [0x4bd2, 0x4bd2], /* CJK Ideograph Extension A */ + [0x4bd3, 0x4bd3], /* CJK Ideograph Extension A */ + [0x4bd4, 0x4bd4], /* CJK Ideograph Extension A */ + [0x4bd5, 0x4bd5], /* CJK Ideograph Extension A */ + [0x4bd6, 0x4bd6], /* CJK Ideograph Extension A */ + [0x4bd7, 0x4bd7], /* CJK Ideograph Extension A */ + [0x4bd8, 0x4bd8], /* CJK Ideograph Extension A */ + [0x4bd9, 0x4bd9], /* CJK Ideograph Extension A */ + [0x4bda, 0x4bda], /* CJK Ideograph Extension A */ + [0x4bdb, 0x4bdb], /* CJK Ideograph Extension A */ + [0x4bdc, 0x4bdc], /* CJK Ideograph Extension A */ + [0x4bdd, 0x4bdd], /* CJK Ideograph Extension A */ + [0x4bde, 0x4bde], /* CJK Ideograph Extension A */ + [0x4bdf, 0x4bdf], /* CJK Ideograph Extension A */ + [0x4be0, 0x4be0], /* CJK Ideograph Extension A */ + [0x4be1, 0x4be1], /* CJK Ideograph Extension A */ + [0x4be2, 0x4be2], /* CJK Ideograph Extension A */ + [0x4be3, 0x4be3], /* CJK Ideograph Extension A */ + [0x4be4, 0x4be4], /* CJK Ideograph Extension A */ + [0x4be5, 0x4be5], /* CJK Ideograph Extension A */ + [0x4be6, 0x4be6], /* CJK Ideograph Extension A */ + [0x4be7, 0x4be7], /* CJK Ideograph Extension A */ + [0x4be8, 0x4be8], /* CJK Ideograph Extension A */ + [0x4be9, 0x4be9], /* CJK Ideograph Extension A */ + [0x4bea, 0x4bea], /* CJK Ideograph Extension A */ + [0x4beb, 0x4beb], /* CJK Ideograph Extension A */ + [0x4bec, 0x4bec], /* CJK Ideograph Extension A */ + [0x4bed, 0x4bed], /* CJK Ideograph Extension A */ + [0x4bee, 0x4bee], /* CJK Ideograph Extension A */ + [0x4bef, 0x4bef], /* CJK Ideograph Extension A */ + [0x4bf0, 0x4bf0], /* CJK Ideograph Extension A */ + [0x4bf1, 0x4bf1], /* CJK Ideograph Extension A */ + [0x4bf2, 0x4bf2], /* CJK Ideograph Extension A */ + [0x4bf3, 0x4bf3], /* CJK Ideograph Extension A */ + [0x4bf4, 0x4bf4], /* CJK Ideograph Extension A */ + [0x4bf5, 0x4bf5], /* CJK Ideograph Extension A */ + [0x4bf6, 0x4bf6], /* CJK Ideograph Extension A */ + [0x4bf7, 0x4bf7], /* CJK Ideograph Extension A */ + [0x4bf8, 0x4bf8], /* CJK Ideograph Extension A */ + [0x4bf9, 0x4bf9], /* CJK Ideograph Extension A */ + [0x4bfa, 0x4bfa], /* CJK Ideograph Extension A */ + [0x4bfb, 0x4bfb], /* CJK Ideograph Extension A */ + [0x4bfc, 0x4bfc], /* CJK Ideograph Extension A */ + [0x4bfd, 0x4bfd], /* CJK Ideograph Extension A */ + [0x4bfe, 0x4bfe], /* CJK Ideograph Extension A */ + [0x4bff, 0x4bff], /* CJK Ideograph Extension A */ + [0x4c00, 0x4c00], /* CJK Ideograph Extension A */ + [0x4c01, 0x4c01], /* CJK Ideograph Extension A */ + [0x4c02, 0x4c02], /* CJK Ideograph Extension A */ + [0x4c03, 0x4c03], /* CJK Ideograph Extension A */ + [0x4c04, 0x4c04], /* CJK Ideograph Extension A */ + [0x4c05, 0x4c05], /* CJK Ideograph Extension A */ + [0x4c06, 0x4c06], /* CJK Ideograph Extension A */ + [0x4c07, 0x4c07], /* CJK Ideograph Extension A */ + [0x4c08, 0x4c08], /* CJK Ideograph Extension A */ + [0x4c09, 0x4c09], /* CJK Ideograph Extension A */ + [0x4c0a, 0x4c0a], /* CJK Ideograph Extension A */ + [0x4c0b, 0x4c0b], /* CJK Ideograph Extension A */ + [0x4c0c, 0x4c0c], /* CJK Ideograph Extension A */ + [0x4c0d, 0x4c0d], /* CJK Ideograph Extension A */ + [0x4c0e, 0x4c0e], /* CJK Ideograph Extension A */ + [0x4c0f, 0x4c0f], /* CJK Ideograph Extension A */ + [0x4c10, 0x4c10], /* CJK Ideograph Extension A */ + [0x4c11, 0x4c11], /* CJK Ideograph Extension A */ + [0x4c12, 0x4c12], /* CJK Ideograph Extension A */ + [0x4c13, 0x4c13], /* CJK Ideograph Extension A */ + [0x4c14, 0x4c14], /* CJK Ideograph Extension A */ + [0x4c15, 0x4c15], /* CJK Ideograph Extension A */ + [0x4c16, 0x4c16], /* CJK Ideograph Extension A */ + [0x4c17, 0x4c17], /* CJK Ideograph Extension A */ + [0x4c18, 0x4c18], /* CJK Ideograph Extension A */ + [0x4c19, 0x4c19], /* CJK Ideograph Extension A */ + [0x4c1a, 0x4c1a], /* CJK Ideograph Extension A */ + [0x4c1b, 0x4c1b], /* CJK Ideograph Extension A */ + [0x4c1c, 0x4c1c], /* CJK Ideograph Extension A */ + [0x4c1d, 0x4c1d], /* CJK Ideograph Extension A */ + [0x4c1e, 0x4c1e], /* CJK Ideograph Extension A */ + [0x4c1f, 0x4c1f], /* CJK Ideograph Extension A */ + [0x4c20, 0x4c20], /* CJK Ideograph Extension A */ + [0x4c21, 0x4c21], /* CJK Ideograph Extension A */ + [0x4c22, 0x4c22], /* CJK Ideograph Extension A */ + [0x4c23, 0x4c23], /* CJK Ideograph Extension A */ + [0x4c24, 0x4c24], /* CJK Ideograph Extension A */ + [0x4c25, 0x4c25], /* CJK Ideograph Extension A */ + [0x4c26, 0x4c26], /* CJK Ideograph Extension A */ + [0x4c27, 0x4c27], /* CJK Ideograph Extension A */ + [0x4c28, 0x4c28], /* CJK Ideograph Extension A */ + [0x4c29, 0x4c29], /* CJK Ideograph Extension A */ + [0x4c2a, 0x4c2a], /* CJK Ideograph Extension A */ + [0x4c2b, 0x4c2b], /* CJK Ideograph Extension A */ + [0x4c2c, 0x4c2c], /* CJK Ideograph Extension A */ + [0x4c2d, 0x4c2d], /* CJK Ideograph Extension A */ + [0x4c2e, 0x4c2e], /* CJK Ideograph Extension A */ + [0x4c2f, 0x4c2f], /* CJK Ideograph Extension A */ + [0x4c30, 0x4c30], /* CJK Ideograph Extension A */ + [0x4c31, 0x4c31], /* CJK Ideograph Extension A */ + [0x4c32, 0x4c32], /* CJK Ideograph Extension A */ + [0x4c33, 0x4c33], /* CJK Ideograph Extension A */ + [0x4c34, 0x4c34], /* CJK Ideograph Extension A */ + [0x4c35, 0x4c35], /* CJK Ideograph Extension A */ + [0x4c36, 0x4c36], /* CJK Ideograph Extension A */ + [0x4c37, 0x4c37], /* CJK Ideograph Extension A */ + [0x4c38, 0x4c38], /* CJK Ideograph Extension A */ + [0x4c39, 0x4c39], /* CJK Ideograph Extension A */ + [0x4c3a, 0x4c3a], /* CJK Ideograph Extension A */ + [0x4c3b, 0x4c3b], /* CJK Ideograph Extension A */ + [0x4c3c, 0x4c3c], /* CJK Ideograph Extension A */ + [0x4c3d, 0x4c3d], /* CJK Ideograph Extension A */ + [0x4c3e, 0x4c3e], /* CJK Ideograph Extension A */ + [0x4c3f, 0x4c3f], /* CJK Ideograph Extension A */ + [0x4c40, 0x4c40], /* CJK Ideograph Extension A */ + [0x4c41, 0x4c41], /* CJK Ideograph Extension A */ + [0x4c42, 0x4c42], /* CJK Ideograph Extension A */ + [0x4c43, 0x4c43], /* CJK Ideograph Extension A */ + [0x4c44, 0x4c44], /* CJK Ideograph Extension A */ + [0x4c45, 0x4c45], /* CJK Ideograph Extension A */ + [0x4c46, 0x4c46], /* CJK Ideograph Extension A */ + [0x4c47, 0x4c47], /* CJK Ideograph Extension A */ + [0x4c48, 0x4c48], /* CJK Ideograph Extension A */ + [0x4c49, 0x4c49], /* CJK Ideograph Extension A */ + [0x4c4a, 0x4c4a], /* CJK Ideograph Extension A */ + [0x4c4b, 0x4c4b], /* CJK Ideograph Extension A */ + [0x4c4c, 0x4c4c], /* CJK Ideograph Extension A */ + [0x4c4d, 0x4c4d], /* CJK Ideograph Extension A */ + [0x4c4e, 0x4c4e], /* CJK Ideograph Extension A */ + [0x4c4f, 0x4c4f], /* CJK Ideograph Extension A */ + [0x4c50, 0x4c50], /* CJK Ideograph Extension A */ + [0x4c51, 0x4c51], /* CJK Ideograph Extension A */ + [0x4c52, 0x4c52], /* CJK Ideograph Extension A */ + [0x4c53, 0x4c53], /* CJK Ideograph Extension A */ + [0x4c54, 0x4c54], /* CJK Ideograph Extension A */ + [0x4c55, 0x4c55], /* CJK Ideograph Extension A */ + [0x4c56, 0x4c56], /* CJK Ideograph Extension A */ + [0x4c57, 0x4c57], /* CJK Ideograph Extension A */ + [0x4c58, 0x4c58], /* CJK Ideograph Extension A */ + [0x4c59, 0x4c59], /* CJK Ideograph Extension A */ + [0x4c5a, 0x4c5a], /* CJK Ideograph Extension A */ + [0x4c5b, 0x4c5b], /* CJK Ideograph Extension A */ + [0x4c5c, 0x4c5c], /* CJK Ideograph Extension A */ + [0x4c5d, 0x4c5d], /* CJK Ideograph Extension A */ + [0x4c5e, 0x4c5e], /* CJK Ideograph Extension A */ + [0x4c5f, 0x4c5f], /* CJK Ideograph Extension A */ + [0x4c60, 0x4c60], /* CJK Ideograph Extension A */ + [0x4c61, 0x4c61], /* CJK Ideograph Extension A */ + [0x4c62, 0x4c62], /* CJK Ideograph Extension A */ + [0x4c63, 0x4c63], /* CJK Ideograph Extension A */ + [0x4c64, 0x4c64], /* CJK Ideograph Extension A */ + [0x4c65, 0x4c65], /* CJK Ideograph Extension A */ + [0x4c66, 0x4c66], /* CJK Ideograph Extension A */ + [0x4c67, 0x4c67], /* CJK Ideograph Extension A */ + [0x4c68, 0x4c68], /* CJK Ideograph Extension A */ + [0x4c69, 0x4c69], /* CJK Ideograph Extension A */ + [0x4c6a, 0x4c6a], /* CJK Ideograph Extension A */ + [0x4c6b, 0x4c6b], /* CJK Ideograph Extension A */ + [0x4c6c, 0x4c6c], /* CJK Ideograph Extension A */ + [0x4c6d, 0x4c6d], /* CJK Ideograph Extension A */ + [0x4c6e, 0x4c6e], /* CJK Ideograph Extension A */ + [0x4c6f, 0x4c6f], /* CJK Ideograph Extension A */ + [0x4c70, 0x4c70], /* CJK Ideograph Extension A */ + [0x4c71, 0x4c71], /* CJK Ideograph Extension A */ + [0x4c72, 0x4c72], /* CJK Ideograph Extension A */ + [0x4c73, 0x4c73], /* CJK Ideograph Extension A */ + [0x4c74, 0x4c74], /* CJK Ideograph Extension A */ + [0x4c75, 0x4c75], /* CJK Ideograph Extension A */ + [0x4c76, 0x4c76], /* CJK Ideograph Extension A */ + [0x4c77, 0x4c77], /* CJK Ideograph Extension A */ + [0x4c78, 0x4c78], /* CJK Ideograph Extension A */ + [0x4c79, 0x4c79], /* CJK Ideograph Extension A */ + [0x4c7a, 0x4c7a], /* CJK Ideograph Extension A */ + [0x4c7b, 0x4c7b], /* CJK Ideograph Extension A */ + [0x4c7c, 0x4c7c], /* CJK Ideograph Extension A */ + [0x4c7d, 0x4c7d], /* CJK Ideograph Extension A */ + [0x4c7e, 0x4c7e], /* CJK Ideograph Extension A */ + [0x4c7f, 0x4c7f], /* CJK Ideograph Extension A */ + [0x4c80, 0x4c80], /* CJK Ideograph Extension A */ + [0x4c81, 0x4c81], /* CJK Ideograph Extension A */ + [0x4c82, 0x4c82], /* CJK Ideograph Extension A */ + [0x4c83, 0x4c83], /* CJK Ideograph Extension A */ + [0x4c84, 0x4c84], /* CJK Ideograph Extension A */ + [0x4c85, 0x4c85], /* CJK Ideograph Extension A */ + [0x4c86, 0x4c86], /* CJK Ideograph Extension A */ + [0x4c87, 0x4c87], /* CJK Ideograph Extension A */ + [0x4c88, 0x4c88], /* CJK Ideograph Extension A */ + [0x4c89, 0x4c89], /* CJK Ideograph Extension A */ + [0x4c8a, 0x4c8a], /* CJK Ideograph Extension A */ + [0x4c8b, 0x4c8b], /* CJK Ideograph Extension A */ + [0x4c8c, 0x4c8c], /* CJK Ideograph Extension A */ + [0x4c8d, 0x4c8d], /* CJK Ideograph Extension A */ + [0x4c8e, 0x4c8e], /* CJK Ideograph Extension A */ + [0x4c8f, 0x4c8f], /* CJK Ideograph Extension A */ + [0x4c90, 0x4c90], /* CJK Ideograph Extension A */ + [0x4c91, 0x4c91], /* CJK Ideograph Extension A */ + [0x4c92, 0x4c92], /* CJK Ideograph Extension A */ + [0x4c93, 0x4c93], /* CJK Ideograph Extension A */ + [0x4c94, 0x4c94], /* CJK Ideograph Extension A */ + [0x4c95, 0x4c95], /* CJK Ideograph Extension A */ + [0x4c96, 0x4c96], /* CJK Ideograph Extension A */ + [0x4c97, 0x4c97], /* CJK Ideograph Extension A */ + [0x4c98, 0x4c98], /* CJK Ideograph Extension A */ + [0x4c99, 0x4c99], /* CJK Ideograph Extension A */ + [0x4c9a, 0x4c9a], /* CJK Ideograph Extension A */ + [0x4c9b, 0x4c9b], /* CJK Ideograph Extension A */ + [0x4c9c, 0x4c9c], /* CJK Ideograph Extension A */ + [0x4c9d, 0x4c9d], /* CJK Ideograph Extension A */ + [0x4c9e, 0x4c9e], /* CJK Ideograph Extension A */ + [0x4c9f, 0x4c9f], /* CJK Ideograph Extension A */ + [0x4ca0, 0x4ca0], /* CJK Ideograph Extension A */ + [0x4ca1, 0x4ca1], /* CJK Ideograph Extension A */ + [0x4ca2, 0x4ca2], /* CJK Ideograph Extension A */ + [0x4ca3, 0x4ca3], /* CJK Ideograph Extension A */ + [0x4ca4, 0x4ca4], /* CJK Ideograph Extension A */ + [0x4ca5, 0x4ca5], /* CJK Ideograph Extension A */ + [0x4ca6, 0x4ca6], /* CJK Ideograph Extension A */ + [0x4ca7, 0x4ca7], /* CJK Ideograph Extension A */ + [0x4ca8, 0x4ca8], /* CJK Ideograph Extension A */ + [0x4ca9, 0x4ca9], /* CJK Ideograph Extension A */ + [0x4caa, 0x4caa], /* CJK Ideograph Extension A */ + [0x4cab, 0x4cab], /* CJK Ideograph Extension A */ + [0x4cac, 0x4cac], /* CJK Ideograph Extension A */ + [0x4cad, 0x4cad], /* CJK Ideograph Extension A */ + [0x4cae, 0x4cae], /* CJK Ideograph Extension A */ + [0x4caf, 0x4caf], /* CJK Ideograph Extension A */ + [0x4cb0, 0x4cb0], /* CJK Ideograph Extension A */ + [0x4cb1, 0x4cb1], /* CJK Ideograph Extension A */ + [0x4cb2, 0x4cb2], /* CJK Ideograph Extension A */ + [0x4cb3, 0x4cb3], /* CJK Ideograph Extension A */ + [0x4cb4, 0x4cb4], /* CJK Ideograph Extension A */ + [0x4cb5, 0x4cb5], /* CJK Ideograph Extension A */ + [0x4cb6, 0x4cb6], /* CJK Ideograph Extension A */ + [0x4cb7, 0x4cb7], /* CJK Ideograph Extension A */ + [0x4cb8, 0x4cb8], /* CJK Ideograph Extension A */ + [0x4cb9, 0x4cb9], /* CJK Ideograph Extension A */ + [0x4cba, 0x4cba], /* CJK Ideograph Extension A */ + [0x4cbb, 0x4cbb], /* CJK Ideograph Extension A */ + [0x4cbc, 0x4cbc], /* CJK Ideograph Extension A */ + [0x4cbd, 0x4cbd], /* CJK Ideograph Extension A */ + [0x4cbe, 0x4cbe], /* CJK Ideograph Extension A */ + [0x4cbf, 0x4cbf], /* CJK Ideograph Extension A */ + [0x4cc0, 0x4cc0], /* CJK Ideograph Extension A */ + [0x4cc1, 0x4cc1], /* CJK Ideograph Extension A */ + [0x4cc2, 0x4cc2], /* CJK Ideograph Extension A */ + [0x4cc3, 0x4cc3], /* CJK Ideograph Extension A */ + [0x4cc4, 0x4cc4], /* CJK Ideograph Extension A */ + [0x4cc5, 0x4cc5], /* CJK Ideograph Extension A */ + [0x4cc6, 0x4cc6], /* CJK Ideograph Extension A */ + [0x4cc7, 0x4cc7], /* CJK Ideograph Extension A */ + [0x4cc8, 0x4cc8], /* CJK Ideograph Extension A */ + [0x4cc9, 0x4cc9], /* CJK Ideograph Extension A */ + [0x4cca, 0x4cca], /* CJK Ideograph Extension A */ + [0x4ccb, 0x4ccb], /* CJK Ideograph Extension A */ + [0x4ccc, 0x4ccc], /* CJK Ideograph Extension A */ + [0x4ccd, 0x4ccd], /* CJK Ideograph Extension A */ + [0x4cce, 0x4cce], /* CJK Ideograph Extension A */ + [0x4ccf, 0x4ccf], /* CJK Ideograph Extension A */ + [0x4cd0, 0x4cd0], /* CJK Ideograph Extension A */ + [0x4cd1, 0x4cd1], /* CJK Ideograph Extension A */ + [0x4cd2, 0x4cd2], /* CJK Ideograph Extension A */ + [0x4cd3, 0x4cd3], /* CJK Ideograph Extension A */ + [0x4cd4, 0x4cd4], /* CJK Ideograph Extension A */ + [0x4cd5, 0x4cd5], /* CJK Ideograph Extension A */ + [0x4cd6, 0x4cd6], /* CJK Ideograph Extension A */ + [0x4cd7, 0x4cd7], /* CJK Ideograph Extension A */ + [0x4cd8, 0x4cd8], /* CJK Ideograph Extension A */ + [0x4cd9, 0x4cd9], /* CJK Ideograph Extension A */ + [0x4cda, 0x4cda], /* CJK Ideograph Extension A */ + [0x4cdb, 0x4cdb], /* CJK Ideograph Extension A */ + [0x4cdc, 0x4cdc], /* CJK Ideograph Extension A */ + [0x4cdd, 0x4cdd], /* CJK Ideograph Extension A */ + [0x4cde, 0x4cde], /* CJK Ideograph Extension A */ + [0x4cdf, 0x4cdf], /* CJK Ideograph Extension A */ + [0x4ce0, 0x4ce0], /* CJK Ideograph Extension A */ + [0x4ce1, 0x4ce1], /* CJK Ideograph Extension A */ + [0x4ce2, 0x4ce2], /* CJK Ideograph Extension A */ + [0x4ce3, 0x4ce3], /* CJK Ideograph Extension A */ + [0x4ce4, 0x4ce4], /* CJK Ideograph Extension A */ + [0x4ce5, 0x4ce5], /* CJK Ideograph Extension A */ + [0x4ce6, 0x4ce6], /* CJK Ideograph Extension A */ + [0x4ce7, 0x4ce7], /* CJK Ideograph Extension A */ + [0x4ce8, 0x4ce8], /* CJK Ideograph Extension A */ + [0x4ce9, 0x4ce9], /* CJK Ideograph Extension A */ + [0x4cea, 0x4cea], /* CJK Ideograph Extension A */ + [0x4ceb, 0x4ceb], /* CJK Ideograph Extension A */ + [0x4cec, 0x4cec], /* CJK Ideograph Extension A */ + [0x4ced, 0x4ced], /* CJK Ideograph Extension A */ + [0x4cee, 0x4cee], /* CJK Ideograph Extension A */ + [0x4cef, 0x4cef], /* CJK Ideograph Extension A */ + [0x4cf0, 0x4cf0], /* CJK Ideograph Extension A */ + [0x4cf1, 0x4cf1], /* CJK Ideograph Extension A */ + [0x4cf2, 0x4cf2], /* CJK Ideograph Extension A */ + [0x4cf3, 0x4cf3], /* CJK Ideograph Extension A */ + [0x4cf4, 0x4cf4], /* CJK Ideograph Extension A */ + [0x4cf5, 0x4cf5], /* CJK Ideograph Extension A */ + [0x4cf6, 0x4cf6], /* CJK Ideograph Extension A */ + [0x4cf7, 0x4cf7], /* CJK Ideograph Extension A */ + [0x4cf8, 0x4cf8], /* CJK Ideograph Extension A */ + [0x4cf9, 0x4cf9], /* CJK Ideograph Extension A */ + [0x4cfa, 0x4cfa], /* CJK Ideograph Extension A */ + [0x4cfb, 0x4cfb], /* CJK Ideograph Extension A */ + [0x4cfc, 0x4cfc], /* CJK Ideograph Extension A */ + [0x4cfd, 0x4cfd], /* CJK Ideograph Extension A */ + [0x4cfe, 0x4cfe], /* CJK Ideograph Extension A */ + [0x4cff, 0x4cff], /* CJK Ideograph Extension A */ + [0x4d00, 0x4d00], /* CJK Ideograph Extension A */ + [0x4d01, 0x4d01], /* CJK Ideograph Extension A */ + [0x4d02, 0x4d02], /* CJK Ideograph Extension A */ + [0x4d03, 0x4d03], /* CJK Ideograph Extension A */ + [0x4d04, 0x4d04], /* CJK Ideograph Extension A */ + [0x4d05, 0x4d05], /* CJK Ideograph Extension A */ + [0x4d06, 0x4d06], /* CJK Ideograph Extension A */ + [0x4d07, 0x4d07], /* CJK Ideograph Extension A */ + [0x4d08, 0x4d08], /* CJK Ideograph Extension A */ + [0x4d09, 0x4d09], /* CJK Ideograph Extension A */ + [0x4d0a, 0x4d0a], /* CJK Ideograph Extension A */ + [0x4d0b, 0x4d0b], /* CJK Ideograph Extension A */ + [0x4d0c, 0x4d0c], /* CJK Ideograph Extension A */ + [0x4d0d, 0x4d0d], /* CJK Ideograph Extension A */ + [0x4d0e, 0x4d0e], /* CJK Ideograph Extension A */ + [0x4d0f, 0x4d0f], /* CJK Ideograph Extension A */ + [0x4d10, 0x4d10], /* CJK Ideograph Extension A */ + [0x4d11, 0x4d11], /* CJK Ideograph Extension A */ + [0x4d12, 0x4d12], /* CJK Ideograph Extension A */ + [0x4d13, 0x4d13], /* CJK Ideograph Extension A */ + [0x4d14, 0x4d14], /* CJK Ideograph Extension A */ + [0x4d15, 0x4d15], /* CJK Ideograph Extension A */ + [0x4d16, 0x4d16], /* CJK Ideograph Extension A */ + [0x4d17, 0x4d17], /* CJK Ideograph Extension A */ + [0x4d18, 0x4d18], /* CJK Ideograph Extension A */ + [0x4d19, 0x4d19], /* CJK Ideograph Extension A */ + [0x4d1a, 0x4d1a], /* CJK Ideograph Extension A */ + [0x4d1b, 0x4d1b], /* CJK Ideograph Extension A */ + [0x4d1c, 0x4d1c], /* CJK Ideograph Extension A */ + [0x4d1d, 0x4d1d], /* CJK Ideograph Extension A */ + [0x4d1e, 0x4d1e], /* CJK Ideograph Extension A */ + [0x4d1f, 0x4d1f], /* CJK Ideograph Extension A */ + [0x4d20, 0x4d20], /* CJK Ideograph Extension A */ + [0x4d21, 0x4d21], /* CJK Ideograph Extension A */ + [0x4d22, 0x4d22], /* CJK Ideograph Extension A */ + [0x4d23, 0x4d23], /* CJK Ideograph Extension A */ + [0x4d24, 0x4d24], /* CJK Ideograph Extension A */ + [0x4d25, 0x4d25], /* CJK Ideograph Extension A */ + [0x4d26, 0x4d26], /* CJK Ideograph Extension A */ + [0x4d27, 0x4d27], /* CJK Ideograph Extension A */ + [0x4d28, 0x4d28], /* CJK Ideograph Extension A */ + [0x4d29, 0x4d29], /* CJK Ideograph Extension A */ + [0x4d2a, 0x4d2a], /* CJK Ideograph Extension A */ + [0x4d2b, 0x4d2b], /* CJK Ideograph Extension A */ + [0x4d2c, 0x4d2c], /* CJK Ideograph Extension A */ + [0x4d2d, 0x4d2d], /* CJK Ideograph Extension A */ + [0x4d2e, 0x4d2e], /* CJK Ideograph Extension A */ + [0x4d2f, 0x4d2f], /* CJK Ideograph Extension A */ + [0x4d30, 0x4d30], /* CJK Ideograph Extension A */ + [0x4d31, 0x4d31], /* CJK Ideograph Extension A */ + [0x4d32, 0x4d32], /* CJK Ideograph Extension A */ + [0x4d33, 0x4d33], /* CJK Ideograph Extension A */ + [0x4d34, 0x4d34], /* CJK Ideograph Extension A */ + [0x4d35, 0x4d35], /* CJK Ideograph Extension A */ + [0x4d36, 0x4d36], /* CJK Ideograph Extension A */ + [0x4d37, 0x4d37], /* CJK Ideograph Extension A */ + [0x4d38, 0x4d38], /* CJK Ideograph Extension A */ + [0x4d39, 0x4d39], /* CJK Ideograph Extension A */ + [0x4d3a, 0x4d3a], /* CJK Ideograph Extension A */ + [0x4d3b, 0x4d3b], /* CJK Ideograph Extension A */ + [0x4d3c, 0x4d3c], /* CJK Ideograph Extension A */ + [0x4d3d, 0x4d3d], /* CJK Ideograph Extension A */ + [0x4d3e, 0x4d3e], /* CJK Ideograph Extension A */ + [0x4d3f, 0x4d3f], /* CJK Ideograph Extension A */ + [0x4d40, 0x4d40], /* CJK Ideograph Extension A */ + [0x4d41, 0x4d41], /* CJK Ideograph Extension A */ + [0x4d42, 0x4d42], /* CJK Ideograph Extension A */ + [0x4d43, 0x4d43], /* CJK Ideograph Extension A */ + [0x4d44, 0x4d44], /* CJK Ideograph Extension A */ + [0x4d45, 0x4d45], /* CJK Ideograph Extension A */ + [0x4d46, 0x4d46], /* CJK Ideograph Extension A */ + [0x4d47, 0x4d47], /* CJK Ideograph Extension A */ + [0x4d48, 0x4d48], /* CJK Ideograph Extension A */ + [0x4d49, 0x4d49], /* CJK Ideograph Extension A */ + [0x4d4a, 0x4d4a], /* CJK Ideograph Extension A */ + [0x4d4b, 0x4d4b], /* CJK Ideograph Extension A */ + [0x4d4c, 0x4d4c], /* CJK Ideograph Extension A */ + [0x4d4d, 0x4d4d], /* CJK Ideograph Extension A */ + [0x4d4e, 0x4d4e], /* CJK Ideograph Extension A */ + [0x4d4f, 0x4d4f], /* CJK Ideograph Extension A */ + [0x4d50, 0x4d50], /* CJK Ideograph Extension A */ + [0x4d51, 0x4d51], /* CJK Ideograph Extension A */ + [0x4d52, 0x4d52], /* CJK Ideograph Extension A */ + [0x4d53, 0x4d53], /* CJK Ideograph Extension A */ + [0x4d54, 0x4d54], /* CJK Ideograph Extension A */ + [0x4d55, 0x4d55], /* CJK Ideograph Extension A */ + [0x4d56, 0x4d56], /* CJK Ideograph Extension A */ + [0x4d57, 0x4d57], /* CJK Ideograph Extension A */ + [0x4d58, 0x4d58], /* CJK Ideograph Extension A */ + [0x4d59, 0x4d59], /* CJK Ideograph Extension A */ + [0x4d5a, 0x4d5a], /* CJK Ideograph Extension A */ + [0x4d5b, 0x4d5b], /* CJK Ideograph Extension A */ + [0x4d5c, 0x4d5c], /* CJK Ideograph Extension A */ + [0x4d5d, 0x4d5d], /* CJK Ideograph Extension A */ + [0x4d5e, 0x4d5e], /* CJK Ideograph Extension A */ + [0x4d5f, 0x4d5f], /* CJK Ideograph Extension A */ + [0x4d60, 0x4d60], /* CJK Ideograph Extension A */ + [0x4d61, 0x4d61], /* CJK Ideograph Extension A */ + [0x4d62, 0x4d62], /* CJK Ideograph Extension A */ + [0x4d63, 0x4d63], /* CJK Ideograph Extension A */ + [0x4d64, 0x4d64], /* CJK Ideograph Extension A */ + [0x4d65, 0x4d65], /* CJK Ideograph Extension A */ + [0x4d66, 0x4d66], /* CJK Ideograph Extension A */ + [0x4d67, 0x4d67], /* CJK Ideograph Extension A */ + [0x4d68, 0x4d68], /* CJK Ideograph Extension A */ + [0x4d69, 0x4d69], /* CJK Ideograph Extension A */ + [0x4d6a, 0x4d6a], /* CJK Ideograph Extension A */ + [0x4d6b, 0x4d6b], /* CJK Ideograph Extension A */ + [0x4d6c, 0x4d6c], /* CJK Ideograph Extension A */ + [0x4d6d, 0x4d6d], /* CJK Ideograph Extension A */ + [0x4d6e, 0x4d6e], /* CJK Ideograph Extension A */ + [0x4d6f, 0x4d6f], /* CJK Ideograph Extension A */ + [0x4d70, 0x4d70], /* CJK Ideograph Extension A */ + [0x4d71, 0x4d71], /* CJK Ideograph Extension A */ + [0x4d72, 0x4d72], /* CJK Ideograph Extension A */ + [0x4d73, 0x4d73], /* CJK Ideograph Extension A */ + [0x4d74, 0x4d74], /* CJK Ideograph Extension A */ + [0x4d75, 0x4d75], /* CJK Ideograph Extension A */ + [0x4d76, 0x4d76], /* CJK Ideograph Extension A */ + [0x4d77, 0x4d77], /* CJK Ideograph Extension A */ + [0x4d78, 0x4d78], /* CJK Ideograph Extension A */ + [0x4d79, 0x4d79], /* CJK Ideograph Extension A */ + [0x4d7a, 0x4d7a], /* CJK Ideograph Extension A */ + [0x4d7b, 0x4d7b], /* CJK Ideograph Extension A */ + [0x4d7c, 0x4d7c], /* CJK Ideograph Extension A */ + [0x4d7d, 0x4d7d], /* CJK Ideograph Extension A */ + [0x4d7e, 0x4d7e], /* CJK Ideograph Extension A */ + [0x4d7f, 0x4d7f], /* CJK Ideograph Extension A */ + [0x4d80, 0x4d80], /* CJK Ideograph Extension A */ + [0x4d81, 0x4d81], /* CJK Ideograph Extension A */ + [0x4d82, 0x4d82], /* CJK Ideograph Extension A */ + [0x4d83, 0x4d83], /* CJK Ideograph Extension A */ + [0x4d84, 0x4d84], /* CJK Ideograph Extension A */ + [0x4d85, 0x4d85], /* CJK Ideograph Extension A */ + [0x4d86, 0x4d86], /* CJK Ideograph Extension A */ + [0x4d87, 0x4d87], /* CJK Ideograph Extension A */ + [0x4d88, 0x4d88], /* CJK Ideograph Extension A */ + [0x4d89, 0x4d89], /* CJK Ideograph Extension A */ + [0x4d8a, 0x4d8a], /* CJK Ideograph Extension A */ + [0x4d8b, 0x4d8b], /* CJK Ideograph Extension A */ + [0x4d8c, 0x4d8c], /* CJK Ideograph Extension A */ + [0x4d8d, 0x4d8d], /* CJK Ideograph Extension A */ + [0x4d8e, 0x4d8e], /* CJK Ideograph Extension A */ + [0x4d8f, 0x4d8f], /* CJK Ideograph Extension A */ + [0x4d90, 0x4d90], /* CJK Ideograph Extension A */ + [0x4d91, 0x4d91], /* CJK Ideograph Extension A */ + [0x4d92, 0x4d92], /* CJK Ideograph Extension A */ + [0x4d93, 0x4d93], /* CJK Ideograph Extension A */ + [0x4d94, 0x4d94], /* CJK Ideograph Extension A */ + [0x4d95, 0x4d95], /* CJK Ideograph Extension A */ + [0x4d96, 0x4d96], /* CJK Ideograph Extension A */ + [0x4d97, 0x4d97], /* CJK Ideograph Extension A */ + [0x4d98, 0x4d98], /* CJK Ideograph Extension A */ + [0x4d99, 0x4d99], /* CJK Ideograph Extension A */ + [0x4d9a, 0x4d9a], /* CJK Ideograph Extension A */ + [0x4d9b, 0x4d9b], /* CJK Ideograph Extension A */ + [0x4d9c, 0x4d9c], /* CJK Ideograph Extension A */ + [0x4d9d, 0x4d9d], /* CJK Ideograph Extension A */ + [0x4d9e, 0x4d9e], /* CJK Ideograph Extension A */ + [0x4d9f, 0x4d9f], /* CJK Ideograph Extension A */ + [0x4da0, 0x4da0], /* CJK Ideograph Extension A */ + [0x4da1, 0x4da1], /* CJK Ideograph Extension A */ + [0x4da2, 0x4da2], /* CJK Ideograph Extension A */ + [0x4da3, 0x4da3], /* CJK Ideograph Extension A */ + [0x4da4, 0x4da4], /* CJK Ideograph Extension A */ + [0x4da5, 0x4da5], /* CJK Ideograph Extension A */ + [0x4da6, 0x4da6], /* CJK Ideograph Extension A */ + [0x4da7, 0x4da7], /* CJK Ideograph Extension A */ + [0x4da8, 0x4da8], /* CJK Ideograph Extension A */ + [0x4da9, 0x4da9], /* CJK Ideograph Extension A */ + [0x4daa, 0x4daa], /* CJK Ideograph Extension A */ + [0x4dab, 0x4dab], /* CJK Ideograph Extension A */ + [0x4dac, 0x4dac], /* CJK Ideograph Extension A */ + [0x4dad, 0x4dad], /* CJK Ideograph Extension A */ + [0x4dae, 0x4dae], /* CJK Ideograph Extension A */ + [0x4daf, 0x4daf], /* CJK Ideograph Extension A */ + [0x4db0, 0x4db0], /* CJK Ideograph Extension A */ + [0x4db1, 0x4db1], /* CJK Ideograph Extension A */ + [0x4db2, 0x4db2], /* CJK Ideograph Extension A */ + [0x4db3, 0x4db3], /* CJK Ideograph Extension A */ + [0x4db4, 0x4db4], /* CJK Ideograph Extension A */ + [0x4db5, 0x4db5], /* CJK Ideograph Extension A */ + [0x4db6, 0x4db6], + [0x4db7, 0x4db7], + [0x4db8, 0x4db8], + [0x4db9, 0x4db9], + [0x4dba, 0x4dba], + [0x4dbb, 0x4dbb], + [0x4dbc, 0x4dbc], + [0x4dbd, 0x4dbd], + [0x4dbe, 0x4dbe], + [0x4dbf, 0x4dbf], + [0x4dc0, 0x4dc0], /* HEXAGRAM FOR THE CREATIVE HEAVEN */ + [0x4dc1, 0x4dc1], /* HEXAGRAM FOR THE RECEPTIVE EARTH */ + [0x4dc2, 0x4dc2], /* HEXAGRAM FOR DIFFICULTY AT THE BEGINNING */ + [0x4dc3, 0x4dc3], /* HEXAGRAM FOR YOUTHFUL FOLLY */ + [0x4dc4, 0x4dc4], /* HEXAGRAM FOR WAITING */ + [0x4dc5, 0x4dc5], /* HEXAGRAM FOR CONFLICT */ + [0x4dc6, 0x4dc6], /* HEXAGRAM FOR THE ARMY */ + [0x4dc7, 0x4dc7], /* HEXAGRAM FOR HOLDING TOGETHER */ + [0x4dc8, 0x4dc8], /* HEXAGRAM FOR SMALL TAMING */ + [0x4dc9, 0x4dc9], /* HEXAGRAM FOR TREADING */ + [0x4dca, 0x4dca], /* HEXAGRAM FOR PEACE */ + [0x4dcb, 0x4dcb], /* HEXAGRAM FOR STANDSTILL */ + [0x4dcc, 0x4dcc], /* HEXAGRAM FOR FELLOWSHIP */ + [0x4dcd, 0x4dcd], /* HEXAGRAM FOR GREAT POSSESSION */ + [0x4dce, 0x4dce], /* HEXAGRAM FOR MODESTY */ + [0x4dcf, 0x4dcf], /* HEXAGRAM FOR ENTHUSIASM */ + [0x4dd0, 0x4dd0], /* HEXAGRAM FOR FOLLOWING */ + [0x4dd1, 0x4dd1], /* HEXAGRAM FOR WORK ON THE DECAYED */ + [0x4dd2, 0x4dd2], /* HEXAGRAM FOR APPROACH */ + [0x4dd3, 0x4dd3], /* HEXAGRAM FOR CONTEMPLATION */ + [0x4dd4, 0x4dd4], /* HEXAGRAM FOR BITING THROUGH */ + [0x4dd5, 0x4dd5], /* HEXAGRAM FOR GRACE */ + [0x4dd6, 0x4dd6], /* HEXAGRAM FOR SPLITTING APART */ + [0x4dd7, 0x4dd7], /* HEXAGRAM FOR RETURN */ + [0x4dd8, 0x4dd8], /* HEXAGRAM FOR INNOCENCE */ + [0x4dd9, 0x4dd9], /* HEXAGRAM FOR GREAT TAMING */ + [0x4dda, 0x4dda], /* HEXAGRAM FOR MOUTH CORNERS */ + [0x4ddb, 0x4ddb], /* HEXAGRAM FOR GREAT PREPONDERANCE */ + [0x4ddc, 0x4ddc], /* HEXAGRAM FOR THE ABYSMAL WATER */ + [0x4ddd, 0x4ddd], /* HEXAGRAM FOR THE CLINGING FIRE */ + [0x4dde, 0x4dde], /* HEXAGRAM FOR INFLUENCE */ + [0x4ddf, 0x4ddf], /* HEXAGRAM FOR DURATION */ + [0x4de0, 0x4de0], /* HEXAGRAM FOR RETREAT */ + [0x4de1, 0x4de1], /* HEXAGRAM FOR GREAT POWER */ + [0x4de2, 0x4de2], /* HEXAGRAM FOR PROGRESS */ + [0x4de3, 0x4de3], /* HEXAGRAM FOR DARKENING OF THE LIGHT */ + [0x4de4, 0x4de4], /* HEXAGRAM FOR THE FAMILY */ + [0x4de5, 0x4de5], /* HEXAGRAM FOR OPPOSITION */ + [0x4de6, 0x4de6], /* HEXAGRAM FOR OBSTRUCTION */ + [0x4de7, 0x4de7], /* HEXAGRAM FOR DELIVERANCE */ + [0x4de8, 0x4de8], /* HEXAGRAM FOR DECREASE */ + [0x4de9, 0x4de9], /* HEXAGRAM FOR INCREASE */ + [0x4dea, 0x4dea], /* HEXAGRAM FOR BREAKTHROUGH */ + [0x4deb, 0x4deb], /* HEXAGRAM FOR COMING TO MEET */ + [0x4dec, 0x4dec], /* HEXAGRAM FOR GATHERING TOGETHER */ + [0x4ded, 0x4ded], /* HEXAGRAM FOR PUSHING UPWARD */ + [0x4dee, 0x4dee], /* HEXAGRAM FOR OPPRESSION */ + [0x4def, 0x4def], /* HEXAGRAM FOR THE WELL */ + [0x4df0, 0x4df0], /* HEXAGRAM FOR REVOLUTION */ + [0x4df1, 0x4df1], /* HEXAGRAM FOR THE CAULDRON */ + [0x4df2, 0x4df2], /* HEXAGRAM FOR THE AROUSING THUNDER */ + [0x4df3, 0x4df3], /* HEXAGRAM FOR THE KEEPING STILL MOUNTAIN */ + [0x4df4, 0x4df4], /* HEXAGRAM FOR DEVELOPMENT */ + [0x4df5, 0x4df5], /* HEXAGRAM FOR THE MARRYING MAIDEN */ + [0x4df6, 0x4df6], /* HEXAGRAM FOR ABUNDANCE */ + [0x4df7, 0x4df7], /* HEXAGRAM FOR THE WANDERER */ + [0x4df8, 0x4df8], /* HEXAGRAM FOR THE GENTLE WIND */ + [0x4df9, 0x4df9], /* HEXAGRAM FOR THE JOYOUS LAKE */ + [0x4dfa, 0x4dfa], /* HEXAGRAM FOR DISPERSION */ + [0x4dfb, 0x4dfb], /* HEXAGRAM FOR LIMITATION */ + [0x4dfc, 0x4dfc], /* HEXAGRAM FOR INNER TRUTH */ + [0x4dfd, 0x4dfd], /* HEXAGRAM FOR SMALL PREPONDERANCE */ + [0x4dfe, 0x4dfe], /* HEXAGRAM FOR AFTER COMPLETION */ + [0x4dff, 0x4dff], /* HEXAGRAM FOR BEFORE COMPLETION */ + [0x4e00, 0x4e00], /* CJK Ideograph */ + [0x4e01, 0x4e01], /* CJK Ideograph */ + [0x4e02, 0x4e02], /* CJK Ideograph */ + [0x4e03, 0x4e03], /* CJK Ideograph */ + [0x4e04, 0x4e04], /* CJK Ideograph */ + [0x4e05, 0x4e05], /* CJK Ideograph */ + [0x4e06, 0x4e06], /* CJK Ideograph */ + [0x4e07, 0x4e07], /* CJK Ideograph */ + [0x4e08, 0x4e08], /* CJK Ideograph */ + [0x4e09, 0x4e09], /* CJK Ideograph */ + [0x4e0a, 0x4e0a], /* CJK Ideograph */ + [0x4e0b, 0x4e0b], /* CJK Ideograph */ + [0x4e0c, 0x4e0c], /* CJK Ideograph */ + [0x4e0d, 0x4e0d], /* CJK Ideograph */ + [0x4e0e, 0x4e0e], /* CJK Ideograph */ + [0x4e0f, 0x4e0f], /* CJK Ideograph */ + [0x4e10, 0x4e10], /* CJK Ideograph */ + [0x4e11, 0x4e11], /* CJK Ideograph */ + [0x4e12, 0x4e12], /* CJK Ideograph */ + [0x4e13, 0x4e13], /* CJK Ideograph */ + [0x4e14, 0x4e14], /* CJK Ideograph */ + [0x4e15, 0x4e15], /* CJK Ideograph */ + [0x4e16, 0x4e16], /* CJK Ideograph */ + [0x4e17, 0x4e17], /* CJK Ideograph */ + [0x4e18, 0x4e18], /* CJK Ideograph */ + [0x4e19, 0x4e19], /* CJK Ideograph */ + [0x4e1a, 0x4e1a], /* CJK Ideograph */ + [0x4e1b, 0x4e1b], /* CJK Ideograph */ + [0x4e1c, 0x4e1c], /* CJK Ideograph */ + [0x4e1d, 0x4e1d], /* CJK Ideograph */ + [0x4e1e, 0x4e1e], /* CJK Ideograph */ + [0x4e1f, 0x4e1f], /* CJK Ideograph */ + [0x4e20, 0x4e20], /* CJK Ideograph */ + [0x4e21, 0x4e21], /* CJK Ideograph */ + [0x4e22, 0x4e22], /* CJK Ideograph */ + [0x4e23, 0x4e23], /* CJK Ideograph */ + [0x4e24, 0x4e24], /* CJK Ideograph */ + [0x4e25, 0x4e25], /* CJK Ideograph */ + [0x4e26, 0x4e26], /* CJK Ideograph */ + [0x4e27, 0x4e27], /* CJK Ideograph */ + [0x4e28, 0x4e28], /* CJK Ideograph */ + [0x4e29, 0x4e29], /* CJK Ideograph */ + [0x4e2a, 0x4e2a], /* CJK Ideograph */ + [0x4e2b, 0x4e2b], /* CJK Ideograph */ + [0x4e2c, 0x4e2c], /* CJK Ideograph */ + [0x4e2d, 0x4e2d], /* CJK Ideograph */ + [0x4e2e, 0x4e2e], /* CJK Ideograph */ + [0x4e2f, 0x4e2f], /* CJK Ideograph */ + [0x4e30, 0x4e30], /* CJK Ideograph */ + [0x4e31, 0x4e31], /* CJK Ideograph */ + [0x4e32, 0x4e32], /* CJK Ideograph */ + [0x4e33, 0x4e33], /* CJK Ideograph */ + [0x4e34, 0x4e34], /* CJK Ideograph */ + [0x4e35, 0x4e35], /* CJK Ideograph */ + [0x4e36, 0x4e36], /* CJK Ideograph */ + [0x4e37, 0x4e37], /* CJK Ideograph */ + [0x4e38, 0x4e38], /* CJK Ideograph */ + [0x4e39, 0x4e39], /* CJK Ideograph */ + [0x4e3a, 0x4e3a], /* CJK Ideograph */ + [0x4e3b, 0x4e3b], /* CJK Ideograph */ + [0x4e3c, 0x4e3c], /* CJK Ideograph */ + [0x4e3d, 0x4e3d], /* CJK Ideograph */ + [0x4e3e, 0x4e3e], /* CJK Ideograph */ + [0x4e3f, 0x4e3f], /* CJK Ideograph */ + [0x4e40, 0x4e40], /* CJK Ideograph */ + [0x4e41, 0x4e41], /* CJK Ideograph */ + [0x4e42, 0x4e42], /* CJK Ideograph */ + [0x4e43, 0x4e43], /* CJK Ideograph */ + [0x4e44, 0x4e44], /* CJK Ideograph */ + [0x4e45, 0x4e45], /* CJK Ideograph */ + [0x4e46, 0x4e46], /* CJK Ideograph */ + [0x4e47, 0x4e47], /* CJK Ideograph */ + [0x4e48, 0x4e48], /* CJK Ideograph */ + [0x4e49, 0x4e49], /* CJK Ideograph */ + [0x4e4a, 0x4e4a], /* CJK Ideograph */ + [0x4e4b, 0x4e4b], /* CJK Ideograph */ + [0x4e4c, 0x4e4c], /* CJK Ideograph */ + [0x4e4d, 0x4e4d], /* CJK Ideograph */ + [0x4e4e, 0x4e4e], /* CJK Ideograph */ + [0x4e4f, 0x4e4f], /* CJK Ideograph */ + [0x4e50, 0x4e50], /* CJK Ideograph */ + [0x4e51, 0x4e51], /* CJK Ideograph */ + [0x4e52, 0x4e52], /* CJK Ideograph */ + [0x4e53, 0x4e53], /* CJK Ideograph */ + [0x4e54, 0x4e54], /* CJK Ideograph */ + [0x4e55, 0x4e55], /* CJK Ideograph */ + [0x4e56, 0x4e56], /* CJK Ideograph */ + [0x4e57, 0x4e57], /* CJK Ideograph */ + [0x4e58, 0x4e58], /* CJK Ideograph */ + [0x4e59, 0x4e59], /* CJK Ideograph */ + [0x4e5a, 0x4e5a], /* CJK Ideograph */ + [0x4e5b, 0x4e5b], /* CJK Ideograph */ + [0x4e5c, 0x4e5c], /* CJK Ideograph */ + [0x4e5d, 0x4e5d], /* CJK Ideograph */ + [0x4e5e, 0x4e5e], /* CJK Ideograph */ + [0x4e5f, 0x4e5f], /* CJK Ideograph */ + [0x4e60, 0x4e60], /* CJK Ideograph */ + [0x4e61, 0x4e61], /* CJK Ideograph */ + [0x4e62, 0x4e62], /* CJK Ideograph */ + [0x4e63, 0x4e63], /* CJK Ideograph */ + [0x4e64, 0x4e64], /* CJK Ideograph */ + [0x4e65, 0x4e65], /* CJK Ideograph */ + [0x4e66, 0x4e66], /* CJK Ideograph */ + [0x4e67, 0x4e67], /* CJK Ideograph */ + [0x4e68, 0x4e68], /* CJK Ideograph */ + [0x4e69, 0x4e69], /* CJK Ideograph */ + [0x4e6a, 0x4e6a], /* CJK Ideograph */ + [0x4e6b, 0x4e6b], /* CJK Ideograph */ + [0x4e6c, 0x4e6c], /* CJK Ideograph */ + [0x4e6d, 0x4e6d], /* CJK Ideograph */ + [0x4e6e, 0x4e6e], /* CJK Ideograph */ + [0x4e6f, 0x4e6f], /* CJK Ideograph */ + [0x4e70, 0x4e70], /* CJK Ideograph */ + [0x4e71, 0x4e71], /* CJK Ideograph */ + [0x4e72, 0x4e72], /* CJK Ideograph */ + [0x4e73, 0x4e73], /* CJK Ideograph */ + [0x4e74, 0x4e74], /* CJK Ideograph */ + [0x4e75, 0x4e75], /* CJK Ideograph */ + [0x4e76, 0x4e76], /* CJK Ideograph */ + [0x4e77, 0x4e77], /* CJK Ideograph */ + [0x4e78, 0x4e78], /* CJK Ideograph */ + [0x4e79, 0x4e79], /* CJK Ideograph */ + [0x4e7a, 0x4e7a], /* CJK Ideograph */ + [0x4e7b, 0x4e7b], /* CJK Ideograph */ + [0x4e7c, 0x4e7c], /* CJK Ideograph */ + [0x4e7d, 0x4e7d], /* CJK Ideograph */ + [0x4e7e, 0x4e7e], /* CJK Ideograph */ + [0x4e7f, 0x4e7f], /* CJK Ideograph */ + [0x4e80, 0x4e80], /* CJK Ideograph */ + [0x4e81, 0x4e81], /* CJK Ideograph */ + [0x4e82, 0x4e82], /* CJK Ideograph */ + [0x4e83, 0x4e83], /* CJK Ideograph */ + [0x4e84, 0x4e84], /* CJK Ideograph */ + [0x4e85, 0x4e85], /* CJK Ideograph */ + [0x4e86, 0x4e86], /* CJK Ideograph */ + [0x4e87, 0x4e87], /* CJK Ideograph */ + [0x4e88, 0x4e88], /* CJK Ideograph */ + [0x4e89, 0x4e89], /* CJK Ideograph */ + [0x4e8a, 0x4e8a], /* CJK Ideograph */ + [0x4e8b, 0x4e8b], /* CJK Ideograph */ + [0x4e8c, 0x4e8c], /* CJK Ideograph */ + [0x4e8d, 0x4e8d], /* CJK Ideograph */ + [0x4e8e, 0x4e8e], /* CJK Ideograph */ + [0x4e8f, 0x4e8f], /* CJK Ideograph */ + [0x4e90, 0x4e90], /* CJK Ideograph */ + [0x4e91, 0x4e91], /* CJK Ideograph */ + [0x4e92, 0x4e92], /* CJK Ideograph */ + [0x4e93, 0x4e93], /* CJK Ideograph */ + [0x4e94, 0x4e94], /* CJK Ideograph */ + [0x4e95, 0x4e95], /* CJK Ideograph */ + [0x4e96, 0x4e96], /* CJK Ideograph */ + [0x4e97, 0x4e97], /* CJK Ideograph */ + [0x4e98, 0x4e98], /* CJK Ideograph */ + [0x4e99, 0x4e99], /* CJK Ideograph */ + [0x4e9a, 0x4e9a], /* CJK Ideograph */ + [0x4e9b, 0x4e9b], /* CJK Ideograph */ + [0x4e9c, 0x4e9c], /* CJK Ideograph */ + [0x4e9d, 0x4e9d], /* CJK Ideograph */ + [0x4e9e, 0x4e9e], /* CJK Ideograph */ + [0x4e9f, 0x4e9f], /* CJK Ideograph */ + [0x4ea0, 0x4ea0], /* CJK Ideograph */ + [0x4ea1, 0x4ea1], /* CJK Ideograph */ + [0x4ea2, 0x4ea2], /* CJK Ideograph */ + [0x4ea3, 0x4ea3], /* CJK Ideograph */ + [0x4ea4, 0x4ea4], /* CJK Ideograph */ + [0x4ea5, 0x4ea5], /* CJK Ideograph */ + [0x4ea6, 0x4ea6], /* CJK Ideograph */ + [0x4ea7, 0x4ea7], /* CJK Ideograph */ + [0x4ea8, 0x4ea8], /* CJK Ideograph */ + [0x4ea9, 0x4ea9], /* CJK Ideograph */ + [0x4eaa, 0x4eaa], /* CJK Ideograph */ + [0x4eab, 0x4eab], /* CJK Ideograph */ + [0x4eac, 0x4eac], /* CJK Ideograph */ + [0x4ead, 0x4ead], /* CJK Ideograph */ + [0x4eae, 0x4eae], /* CJK Ideograph */ + [0x4eaf, 0x4eaf], /* CJK Ideograph */ + [0x4eb0, 0x4eb0], /* CJK Ideograph */ + [0x4eb1, 0x4eb1], /* CJK Ideograph */ + [0x4eb2, 0x4eb2], /* CJK Ideograph */ + [0x4eb3, 0x4eb3], /* CJK Ideograph */ + [0x4eb4, 0x4eb4], /* CJK Ideograph */ + [0x4eb5, 0x4eb5], /* CJK Ideograph */ + [0x4eb6, 0x4eb6], /* CJK Ideograph */ + [0x4eb7, 0x4eb7], /* CJK Ideograph */ + [0x4eb8, 0x4eb8], /* CJK Ideograph */ + [0x4eb9, 0x4eb9], /* CJK Ideograph */ + [0x4eba, 0x4eba], /* CJK Ideograph */ + [0x4ebb, 0x4ebb], /* CJK Ideograph */ + [0x4ebc, 0x4ebc], /* CJK Ideograph */ + [0x4ebd, 0x4ebd], /* CJK Ideograph */ + [0x4ebe, 0x4ebe], /* CJK Ideograph */ + [0x4ebf, 0x4ebf], /* CJK Ideograph */ + [0x4ec0, 0x4ec0], /* CJK Ideograph */ + [0x4ec1, 0x4ec1], /* CJK Ideograph */ + [0x4ec2, 0x4ec2], /* CJK Ideograph */ + [0x4ec3, 0x4ec3], /* CJK Ideograph */ + [0x4ec4, 0x4ec4], /* CJK Ideograph */ + [0x4ec5, 0x4ec5], /* CJK Ideograph */ + [0x4ec6, 0x4ec6], /* CJK Ideograph */ + [0x4ec7, 0x4ec7], /* CJK Ideograph */ + [0x4ec8, 0x4ec8], /* CJK Ideograph */ + [0x4ec9, 0x4ec9], /* CJK Ideograph */ + [0x4eca, 0x4eca], /* CJK Ideograph */ + [0x4ecb, 0x4ecb], /* CJK Ideograph */ + [0x4ecc, 0x4ecc], /* CJK Ideograph */ + [0x4ecd, 0x4ecd], /* CJK Ideograph */ + [0x4ece, 0x4ece], /* CJK Ideograph */ + [0x4ecf, 0x4ecf], /* CJK Ideograph */ + [0x4ed0, 0x4ed0], /* CJK Ideograph */ + [0x4ed1, 0x4ed1], /* CJK Ideograph */ + [0x4ed2, 0x4ed2], /* CJK Ideograph */ + [0x4ed3, 0x4ed3], /* CJK Ideograph */ + [0x4ed4, 0x4ed4], /* CJK Ideograph */ + [0x4ed5, 0x4ed5], /* CJK Ideograph */ + [0x4ed6, 0x4ed6], /* CJK Ideograph */ + [0x4ed7, 0x4ed7], /* CJK Ideograph */ + [0x4ed8, 0x4ed8], /* CJK Ideograph */ + [0x4ed9, 0x4ed9], /* CJK Ideograph */ + [0x4eda, 0x4eda], /* CJK Ideograph */ + [0x4edb, 0x4edb], /* CJK Ideograph */ + [0x4edc, 0x4edc], /* CJK Ideograph */ + [0x4edd, 0x4edd], /* CJK Ideograph */ + [0x4ede, 0x4ede], /* CJK Ideograph */ + [0x4edf, 0x4edf], /* CJK Ideograph */ + [0x4ee0, 0x4ee0], /* CJK Ideograph */ + [0x4ee1, 0x4ee1], /* CJK Ideograph */ + [0x4ee2, 0x4ee2], /* CJK Ideograph */ + [0x4ee3, 0x4ee3], /* CJK Ideograph */ + [0x4ee4, 0x4ee4], /* CJK Ideograph */ + [0x4ee5, 0x4ee5], /* CJK Ideograph */ + [0x4ee6, 0x4ee6], /* CJK Ideograph */ + [0x4ee7, 0x4ee7], /* CJK Ideograph */ + [0x4ee8, 0x4ee8], /* CJK Ideograph */ + [0x4ee9, 0x4ee9], /* CJK Ideograph */ + [0x4eea, 0x4eea], /* CJK Ideograph */ + [0x4eeb, 0x4eeb], /* CJK Ideograph */ + [0x4eec, 0x4eec], /* CJK Ideograph */ + [0x4eed, 0x4eed], /* CJK Ideograph */ + [0x4eee, 0x4eee], /* CJK Ideograph */ + [0x4eef, 0x4eef], /* CJK Ideograph */ + [0x4ef0, 0x4ef0], /* CJK Ideograph */ + [0x4ef1, 0x4ef1], /* CJK Ideograph */ + [0x4ef2, 0x4ef2], /* CJK Ideograph */ + [0x4ef3, 0x4ef3], /* CJK Ideograph */ + [0x4ef4, 0x4ef4], /* CJK Ideograph */ + [0x4ef5, 0x4ef5], /* CJK Ideograph */ + [0x4ef6, 0x4ef6], /* CJK Ideograph */ + [0x4ef7, 0x4ef7], /* CJK Ideograph */ + [0x4ef8, 0x4ef8], /* CJK Ideograph */ + [0x4ef9, 0x4ef9], /* CJK Ideograph */ + [0x4efa, 0x4efa], /* CJK Ideograph */ + [0x4efb, 0x4efb], /* CJK Ideograph */ + [0x4efc, 0x4efc], /* CJK Ideograph */ + [0x4efd, 0x4efd], /* CJK Ideograph */ + [0x4efe, 0x4efe], /* CJK Ideograph */ + [0x4eff, 0x4eff], /* CJK Ideograph */ + [0x4f00, 0x4f00], /* CJK Ideograph */ + [0x4f01, 0x4f01], /* CJK Ideograph */ + [0x4f02, 0x4f02], /* CJK Ideograph */ + [0x4f03, 0x4f03], /* CJK Ideograph */ + [0x4f04, 0x4f04], /* CJK Ideograph */ + [0x4f05, 0x4f05], /* CJK Ideograph */ + [0x4f06, 0x4f06], /* CJK Ideograph */ + [0x4f07, 0x4f07], /* CJK Ideograph */ + [0x4f08, 0x4f08], /* CJK Ideograph */ + [0x4f09, 0x4f09], /* CJK Ideograph */ + [0x4f0a, 0x4f0a], /* CJK Ideograph */ + [0x4f0b, 0x4f0b], /* CJK Ideograph */ + [0x4f0c, 0x4f0c], /* CJK Ideograph */ + [0x4f0d, 0x4f0d], /* CJK Ideograph */ + [0x4f0e, 0x4f0e], /* CJK Ideograph */ + [0x4f0f, 0x4f0f], /* CJK Ideograph */ + [0x4f10, 0x4f10], /* CJK Ideograph */ + [0x4f11, 0x4f11], /* CJK Ideograph */ + [0x4f12, 0x4f12], /* CJK Ideograph */ + [0x4f13, 0x4f13], /* CJK Ideograph */ + [0x4f14, 0x4f14], /* CJK Ideograph */ + [0x4f15, 0x4f15], /* CJK Ideograph */ + [0x4f16, 0x4f16], /* CJK Ideograph */ + [0x4f17, 0x4f17], /* CJK Ideograph */ + [0x4f18, 0x4f18], /* CJK Ideograph */ + [0x4f19, 0x4f19], /* CJK Ideograph */ + [0x4f1a, 0x4f1a], /* CJK Ideograph */ + [0x4f1b, 0x4f1b], /* CJK Ideograph */ + [0x4f1c, 0x4f1c], /* CJK Ideograph */ + [0x4f1d, 0x4f1d], /* CJK Ideograph */ + [0x4f1e, 0x4f1e], /* CJK Ideograph */ + [0x4f1f, 0x4f1f], /* CJK Ideograph */ + [0x4f20, 0x4f20], /* CJK Ideograph */ + [0x4f21, 0x4f21], /* CJK Ideograph */ + [0x4f22, 0x4f22], /* CJK Ideograph */ + [0x4f23, 0x4f23], /* CJK Ideograph */ + [0x4f24, 0x4f24], /* CJK Ideograph */ + [0x4f25, 0x4f25], /* CJK Ideograph */ + [0x4f26, 0x4f26], /* CJK Ideograph */ + [0x4f27, 0x4f27], /* CJK Ideograph */ + [0x4f28, 0x4f28], /* CJK Ideograph */ + [0x4f29, 0x4f29], /* CJK Ideograph */ + [0x4f2a, 0x4f2a], /* CJK Ideograph */ + [0x4f2b, 0x4f2b], /* CJK Ideograph */ + [0x4f2c, 0x4f2c], /* CJK Ideograph */ + [0x4f2d, 0x4f2d], /* CJK Ideograph */ + [0x4f2e, 0x4f2e], /* CJK Ideograph */ + [0x4f2f, 0x4f2f], /* CJK Ideograph */ + [0x4f30, 0x4f30], /* CJK Ideograph */ + [0x4f31, 0x4f31], /* CJK Ideograph */ + [0x4f32, 0x4f32], /* CJK Ideograph */ + [0x4f33, 0x4f33], /* CJK Ideograph */ + [0x4f34, 0x4f34], /* CJK Ideograph */ + [0x4f35, 0x4f35], /* CJK Ideograph */ + [0x4f36, 0x4f36], /* CJK Ideograph */ + [0x4f37, 0x4f37], /* CJK Ideograph */ + [0x4f38, 0x4f38], /* CJK Ideograph */ + [0x4f39, 0x4f39], /* CJK Ideograph */ + [0x4f3a, 0x4f3a], /* CJK Ideograph */ + [0x4f3b, 0x4f3b], /* CJK Ideograph */ + [0x4f3c, 0x4f3c], /* CJK Ideograph */ + [0x4f3d, 0x4f3d], /* CJK Ideograph */ + [0x4f3e, 0x4f3e], /* CJK Ideograph */ + [0x4f3f, 0x4f3f], /* CJK Ideograph */ + [0x4f40, 0x4f40], /* CJK Ideograph */ + [0x4f41, 0x4f41], /* CJK Ideograph */ + [0x4f42, 0x4f42], /* CJK Ideograph */ + [0x4f43, 0x4f43], /* CJK Ideograph */ + [0x4f44, 0x4f44], /* CJK Ideograph */ + [0x4f45, 0x4f45], /* CJK Ideograph */ + [0x4f46, 0x4f46], /* CJK Ideograph */ + [0x4f47, 0x4f47], /* CJK Ideograph */ + [0x4f48, 0x4f48], /* CJK Ideograph */ + [0x4f49, 0x4f49], /* CJK Ideograph */ + [0x4f4a, 0x4f4a], /* CJK Ideograph */ + [0x4f4b, 0x4f4b], /* CJK Ideograph */ + [0x4f4c, 0x4f4c], /* CJK Ideograph */ + [0x4f4d, 0x4f4d], /* CJK Ideograph */ + [0x4f4e, 0x4f4e], /* CJK Ideograph */ + [0x4f4f, 0x4f4f], /* CJK Ideograph */ + [0x4f50, 0x4f50], /* CJK Ideograph */ + [0x4f51, 0x4f51], /* CJK Ideograph */ + [0x4f52, 0x4f52], /* CJK Ideograph */ + [0x4f53, 0x4f53], /* CJK Ideograph */ + [0x4f54, 0x4f54], /* CJK Ideograph */ + [0x4f55, 0x4f55], /* CJK Ideograph */ + [0x4f56, 0x4f56], /* CJK Ideograph */ + [0x4f57, 0x4f57], /* CJK Ideograph */ + [0x4f58, 0x4f58], /* CJK Ideograph */ + [0x4f59, 0x4f59], /* CJK Ideograph */ + [0x4f5a, 0x4f5a], /* CJK Ideograph */ + [0x4f5b, 0x4f5b], /* CJK Ideograph */ + [0x4f5c, 0x4f5c], /* CJK Ideograph */ + [0x4f5d, 0x4f5d], /* CJK Ideograph */ + [0x4f5e, 0x4f5e], /* CJK Ideograph */ + [0x4f5f, 0x4f5f], /* CJK Ideograph */ + [0x4f60, 0x4f60], /* CJK Ideograph */ + [0x4f61, 0x4f61], /* CJK Ideograph */ + [0x4f62, 0x4f62], /* CJK Ideograph */ + [0x4f63, 0x4f63], /* CJK Ideograph */ + [0x4f64, 0x4f64], /* CJK Ideograph */ + [0x4f65, 0x4f65], /* CJK Ideograph */ + [0x4f66, 0x4f66], /* CJK Ideograph */ + [0x4f67, 0x4f67], /* CJK Ideograph */ + [0x4f68, 0x4f68], /* CJK Ideograph */ + [0x4f69, 0x4f69], /* CJK Ideograph */ + [0x4f6a, 0x4f6a], /* CJK Ideograph */ + [0x4f6b, 0x4f6b], /* CJK Ideograph */ + [0x4f6c, 0x4f6c], /* CJK Ideograph */ + [0x4f6d, 0x4f6d], /* CJK Ideograph */ + [0x4f6e, 0x4f6e], /* CJK Ideograph */ + [0x4f6f, 0x4f6f], /* CJK Ideograph */ + [0x4f70, 0x4f70], /* CJK Ideograph */ + [0x4f71, 0x4f71], /* CJK Ideograph */ + [0x4f72, 0x4f72], /* CJK Ideograph */ + [0x4f73, 0x4f73], /* CJK Ideograph */ + [0x4f74, 0x4f74], /* CJK Ideograph */ + [0x4f75, 0x4f75], /* CJK Ideograph */ + [0x4f76, 0x4f76], /* CJK Ideograph */ + [0x4f77, 0x4f77], /* CJK Ideograph */ + [0x4f78, 0x4f78], /* CJK Ideograph */ + [0x4f79, 0x4f79], /* CJK Ideograph */ + [0x4f7a, 0x4f7a], /* CJK Ideograph */ + [0x4f7b, 0x4f7b], /* CJK Ideograph */ + [0x4f7c, 0x4f7c], /* CJK Ideograph */ + [0x4f7d, 0x4f7d], /* CJK Ideograph */ + [0x4f7e, 0x4f7e], /* CJK Ideograph */ + [0x4f7f, 0x4f7f], /* CJK Ideograph */ + [0x4f80, 0x4f80], /* CJK Ideograph */ + [0x4f81, 0x4f81], /* CJK Ideograph */ + [0x4f82, 0x4f82], /* CJK Ideograph */ + [0x4f83, 0x4f83], /* CJK Ideograph */ + [0x4f84, 0x4f84], /* CJK Ideograph */ + [0x4f85, 0x4f85], /* CJK Ideograph */ + [0x4f86, 0x4f86], /* CJK Ideograph */ + [0x4f87, 0x4f87], /* CJK Ideograph */ + [0x4f88, 0x4f88], /* CJK Ideograph */ + [0x4f89, 0x4f89], /* CJK Ideograph */ + [0x4f8a, 0x4f8a], /* CJK Ideograph */ + [0x4f8b, 0x4f8b], /* CJK Ideograph */ + [0x4f8c, 0x4f8c], /* CJK Ideograph */ + [0x4f8d, 0x4f8d], /* CJK Ideograph */ + [0x4f8e, 0x4f8e], /* CJK Ideograph */ + [0x4f8f, 0x4f8f], /* CJK Ideograph */ + [0x4f90, 0x4f90], /* CJK Ideograph */ + [0x4f91, 0x4f91], /* CJK Ideograph */ + [0x4f92, 0x4f92], /* CJK Ideograph */ + [0x4f93, 0x4f93], /* CJK Ideograph */ + [0x4f94, 0x4f94], /* CJK Ideograph */ + [0x4f95, 0x4f95], /* CJK Ideograph */ + [0x4f96, 0x4f96], /* CJK Ideograph */ + [0x4f97, 0x4f97], /* CJK Ideograph */ + [0x4f98, 0x4f98], /* CJK Ideograph */ + [0x4f99, 0x4f99], /* CJK Ideograph */ + [0x4f9a, 0x4f9a], /* CJK Ideograph */ + [0x4f9b, 0x4f9b], /* CJK Ideograph */ + [0x4f9c, 0x4f9c], /* CJK Ideograph */ + [0x4f9d, 0x4f9d], /* CJK Ideograph */ + [0x4f9e, 0x4f9e], /* CJK Ideograph */ + [0x4f9f, 0x4f9f], /* CJK Ideograph */ + [0x4fa0, 0x4fa0], /* CJK Ideograph */ + [0x4fa1, 0x4fa1], /* CJK Ideograph */ + [0x4fa2, 0x4fa2], /* CJK Ideograph */ + [0x4fa3, 0x4fa3], /* CJK Ideograph */ + [0x4fa4, 0x4fa4], /* CJK Ideograph */ + [0x4fa5, 0x4fa5], /* CJK Ideograph */ + [0x4fa6, 0x4fa6], /* CJK Ideograph */ + [0x4fa7, 0x4fa7], /* CJK Ideograph */ + [0x4fa8, 0x4fa8], /* CJK Ideograph */ + [0x4fa9, 0x4fa9], /* CJK Ideograph */ + [0x4faa, 0x4faa], /* CJK Ideograph */ + [0x4fab, 0x4fab], /* CJK Ideograph */ + [0x4fac, 0x4fac], /* CJK Ideograph */ + [0x4fad, 0x4fad], /* CJK Ideograph */ + [0x4fae, 0x4fae], /* CJK Ideograph */ + [0x4faf, 0x4faf], /* CJK Ideograph */ + [0x4fb0, 0x4fb0], /* CJK Ideograph */ + [0x4fb1, 0x4fb1], /* CJK Ideograph */ + [0x4fb2, 0x4fb2], /* CJK Ideograph */ + [0x4fb3, 0x4fb3], /* CJK Ideograph */ + [0x4fb4, 0x4fb4], /* CJK Ideograph */ + [0x4fb5, 0x4fb5], /* CJK Ideograph */ + [0x4fb6, 0x4fb6], /* CJK Ideograph */ + [0x4fb7, 0x4fb7], /* CJK Ideograph */ + [0x4fb8, 0x4fb8], /* CJK Ideograph */ + [0x4fb9, 0x4fb9], /* CJK Ideograph */ + [0x4fba, 0x4fba], /* CJK Ideograph */ + [0x4fbb, 0x4fbb], /* CJK Ideograph */ + [0x4fbc, 0x4fbc], /* CJK Ideograph */ + [0x4fbd, 0x4fbd], /* CJK Ideograph */ + [0x4fbe, 0x4fbe], /* CJK Ideograph */ + [0x4fbf, 0x4fbf], /* CJK Ideograph */ + [0x4fc0, 0x4fc0], /* CJK Ideograph */ + [0x4fc1, 0x4fc1], /* CJK Ideograph */ + [0x4fc2, 0x4fc2], /* CJK Ideograph */ + [0x4fc3, 0x4fc3], /* CJK Ideograph */ + [0x4fc4, 0x4fc4], /* CJK Ideograph */ + [0x4fc5, 0x4fc5], /* CJK Ideograph */ + [0x4fc6, 0x4fc6], /* CJK Ideograph */ + [0x4fc7, 0x4fc7], /* CJK Ideograph */ + [0x4fc8, 0x4fc8], /* CJK Ideograph */ + [0x4fc9, 0x4fc9], /* CJK Ideograph */ + [0x4fca, 0x4fca], /* CJK Ideograph */ + [0x4fcb, 0x4fcb], /* CJK Ideograph */ + [0x4fcc, 0x4fcc], /* CJK Ideograph */ + [0x4fcd, 0x4fcd], /* CJK Ideograph */ + [0x4fce, 0x4fce], /* CJK Ideograph */ + [0x4fcf, 0x4fcf], /* CJK Ideograph */ + [0x4fd0, 0x4fd0], /* CJK Ideograph */ + [0x4fd1, 0x4fd1], /* CJK Ideograph */ + [0x4fd2, 0x4fd2], /* CJK Ideograph */ + [0x4fd3, 0x4fd3], /* CJK Ideograph */ + [0x4fd4, 0x4fd4], /* CJK Ideograph */ + [0x4fd5, 0x4fd5], /* CJK Ideograph */ + [0x4fd6, 0x4fd6], /* CJK Ideograph */ + [0x4fd7, 0x4fd7], /* CJK Ideograph */ + [0x4fd8, 0x4fd8], /* CJK Ideograph */ + [0x4fd9, 0x4fd9], /* CJK Ideograph */ + [0x4fda, 0x4fda], /* CJK Ideograph */ + [0x4fdb, 0x4fdb], /* CJK Ideograph */ + [0x4fdc, 0x4fdc], /* CJK Ideograph */ + [0x4fdd, 0x4fdd], /* CJK Ideograph */ + [0x4fde, 0x4fde], /* CJK Ideograph */ + [0x4fdf, 0x4fdf], /* CJK Ideograph */ + [0x4fe0, 0x4fe0], /* CJK Ideograph */ + [0x4fe1, 0x4fe1], /* CJK Ideograph */ + [0x4fe2, 0x4fe2], /* CJK Ideograph */ + [0x4fe3, 0x4fe3], /* CJK Ideograph */ + [0x4fe4, 0x4fe4], /* CJK Ideograph */ + [0x4fe5, 0x4fe5], /* CJK Ideograph */ + [0x4fe6, 0x4fe6], /* CJK Ideograph */ + [0x4fe7, 0x4fe7], /* CJK Ideograph */ + [0x4fe8, 0x4fe8], /* CJK Ideograph */ + [0x4fe9, 0x4fe9], /* CJK Ideograph */ + [0x4fea, 0x4fea], /* CJK Ideograph */ + [0x4feb, 0x4feb], /* CJK Ideograph */ + [0x4fec, 0x4fec], /* CJK Ideograph */ + [0x4fed, 0x4fed], /* CJK Ideograph */ + [0x4fee, 0x4fee], /* CJK Ideograph */ + [0x4fef, 0x4fef], /* CJK Ideograph */ + [0x4ff0, 0x4ff0], /* CJK Ideograph */ + [0x4ff1, 0x4ff1], /* CJK Ideograph */ + [0x4ff2, 0x4ff2], /* CJK Ideograph */ + [0x4ff3, 0x4ff3], /* CJK Ideograph */ + [0x4ff4, 0x4ff4], /* CJK Ideograph */ + [0x4ff5, 0x4ff5], /* CJK Ideograph */ + [0x4ff6, 0x4ff6], /* CJK Ideograph */ + [0x4ff7, 0x4ff7], /* CJK Ideograph */ + [0x4ff8, 0x4ff8], /* CJK Ideograph */ + [0x4ff9, 0x4ff9], /* CJK Ideograph */ + [0x4ffa, 0x4ffa], /* CJK Ideograph */ + [0x4ffb, 0x4ffb], /* CJK Ideograph */ + [0x4ffc, 0x4ffc], /* CJK Ideograph */ + [0x4ffd, 0x4ffd], /* CJK Ideograph */ + [0x4ffe, 0x4ffe], /* CJK Ideograph */ + [0x4fff, 0x4fff], /* CJK Ideograph */ + [0x5000, 0x5000], /* CJK Ideograph */ + [0x5001, 0x5001], /* CJK Ideograph */ + [0x5002, 0x5002], /* CJK Ideograph */ + [0x5003, 0x5003], /* CJK Ideograph */ + [0x5004, 0x5004], /* CJK Ideograph */ + [0x5005, 0x5005], /* CJK Ideograph */ + [0x5006, 0x5006], /* CJK Ideograph */ + [0x5007, 0x5007], /* CJK Ideograph */ + [0x5008, 0x5008], /* CJK Ideograph */ + [0x5009, 0x5009], /* CJK Ideograph */ + [0x500a, 0x500a], /* CJK Ideograph */ + [0x500b, 0x500b], /* CJK Ideograph */ + [0x500c, 0x500c], /* CJK Ideograph */ + [0x500d, 0x500d], /* CJK Ideograph */ + [0x500e, 0x500e], /* CJK Ideograph */ + [0x500f, 0x500f], /* CJK Ideograph */ + [0x5010, 0x5010], /* CJK Ideograph */ + [0x5011, 0x5011], /* CJK Ideograph */ + [0x5012, 0x5012], /* CJK Ideograph */ + [0x5013, 0x5013], /* CJK Ideograph */ + [0x5014, 0x5014], /* CJK Ideograph */ + [0x5015, 0x5015], /* CJK Ideograph */ + [0x5016, 0x5016], /* CJK Ideograph */ + [0x5017, 0x5017], /* CJK Ideograph */ + [0x5018, 0x5018], /* CJK Ideograph */ + [0x5019, 0x5019], /* CJK Ideograph */ + [0x501a, 0x501a], /* CJK Ideograph */ + [0x501b, 0x501b], /* CJK Ideograph */ + [0x501c, 0x501c], /* CJK Ideograph */ + [0x501d, 0x501d], /* CJK Ideograph */ + [0x501e, 0x501e], /* CJK Ideograph */ + [0x501f, 0x501f], /* CJK Ideograph */ + [0x5020, 0x5020], /* CJK Ideograph */ + [0x5021, 0x5021], /* CJK Ideograph */ + [0x5022, 0x5022], /* CJK Ideograph */ + [0x5023, 0x5023], /* CJK Ideograph */ + [0x5024, 0x5024], /* CJK Ideograph */ + [0x5025, 0x5025], /* CJK Ideograph */ + [0x5026, 0x5026], /* CJK Ideograph */ + [0x5027, 0x5027], /* CJK Ideograph */ + [0x5028, 0x5028], /* CJK Ideograph */ + [0x5029, 0x5029], /* CJK Ideograph */ + [0x502a, 0x502a], /* CJK Ideograph */ + [0x502b, 0x502b], /* CJK Ideograph */ + [0x502c, 0x502c], /* CJK Ideograph */ + [0x502d, 0x502d], /* CJK Ideograph */ + [0x502e, 0x502e], /* CJK Ideograph */ + [0x502f, 0x502f], /* CJK Ideograph */ + [0x5030, 0x5030], /* CJK Ideograph */ + [0x5031, 0x5031], /* CJK Ideograph */ + [0x5032, 0x5032], /* CJK Ideograph */ + [0x5033, 0x5033], /* CJK Ideograph */ + [0x5034, 0x5034], /* CJK Ideograph */ + [0x5035, 0x5035], /* CJK Ideograph */ + [0x5036, 0x5036], /* CJK Ideograph */ + [0x5037, 0x5037], /* CJK Ideograph */ + [0x5038, 0x5038], /* CJK Ideograph */ + [0x5039, 0x5039], /* CJK Ideograph */ + [0x503a, 0x503a], /* CJK Ideograph */ + [0x503b, 0x503b], /* CJK Ideograph */ + [0x503c, 0x503c], /* CJK Ideograph */ + [0x503d, 0x503d], /* CJK Ideograph */ + [0x503e, 0x503e], /* CJK Ideograph */ + [0x503f, 0x503f], /* CJK Ideograph */ + [0x5040, 0x5040], /* CJK Ideograph */ + [0x5041, 0x5041], /* CJK Ideograph */ + [0x5042, 0x5042], /* CJK Ideograph */ + [0x5043, 0x5043], /* CJK Ideograph */ + [0x5044, 0x5044], /* CJK Ideograph */ + [0x5045, 0x5045], /* CJK Ideograph */ + [0x5046, 0x5046], /* CJK Ideograph */ + [0x5047, 0x5047], /* CJK Ideograph */ + [0x5048, 0x5048], /* CJK Ideograph */ + [0x5049, 0x5049], /* CJK Ideograph */ + [0x504a, 0x504a], /* CJK Ideograph */ + [0x504b, 0x504b], /* CJK Ideograph */ + [0x504c, 0x504c], /* CJK Ideograph */ + [0x504d, 0x504d], /* CJK Ideograph */ + [0x504e, 0x504e], /* CJK Ideograph */ + [0x504f, 0x504f], /* CJK Ideograph */ + [0x5050, 0x5050], /* CJK Ideograph */ + [0x5051, 0x5051], /* CJK Ideograph */ + [0x5052, 0x5052], /* CJK Ideograph */ + [0x5053, 0x5053], /* CJK Ideograph */ + [0x5054, 0x5054], /* CJK Ideograph */ + [0x5055, 0x5055], /* CJK Ideograph */ + [0x5056, 0x5056], /* CJK Ideograph */ + [0x5057, 0x5057], /* CJK Ideograph */ + [0x5058, 0x5058], /* CJK Ideograph */ + [0x5059, 0x5059], /* CJK Ideograph */ + [0x505a, 0x505a], /* CJK Ideograph */ + [0x505b, 0x505b], /* CJK Ideograph */ + [0x505c, 0x505c], /* CJK Ideograph */ + [0x505d, 0x505d], /* CJK Ideograph */ + [0x505e, 0x505e], /* CJK Ideograph */ + [0x505f, 0x505f], /* CJK Ideograph */ + [0x5060, 0x5060], /* CJK Ideograph */ + [0x5061, 0x5061], /* CJK Ideograph */ + [0x5062, 0x5062], /* CJK Ideograph */ + [0x5063, 0x5063], /* CJK Ideograph */ + [0x5064, 0x5064], /* CJK Ideograph */ + [0x5065, 0x5065], /* CJK Ideograph */ + [0x5066, 0x5066], /* CJK Ideograph */ + [0x5067, 0x5067], /* CJK Ideograph */ + [0x5068, 0x5068], /* CJK Ideograph */ + [0x5069, 0x5069], /* CJK Ideograph */ + [0x506a, 0x506a], /* CJK Ideograph */ + [0x506b, 0x506b], /* CJK Ideograph */ + [0x506c, 0x506c], /* CJK Ideograph */ + [0x506d, 0x506d], /* CJK Ideograph */ + [0x506e, 0x506e], /* CJK Ideograph */ + [0x506f, 0x506f], /* CJK Ideograph */ + [0x5070, 0x5070], /* CJK Ideograph */ + [0x5071, 0x5071], /* CJK Ideograph */ + [0x5072, 0x5072], /* CJK Ideograph */ + [0x5073, 0x5073], /* CJK Ideograph */ + [0x5074, 0x5074], /* CJK Ideograph */ + [0x5075, 0x5075], /* CJK Ideograph */ + [0x5076, 0x5076], /* CJK Ideograph */ + [0x5077, 0x5077], /* CJK Ideograph */ + [0x5078, 0x5078], /* CJK Ideograph */ + [0x5079, 0x5079], /* CJK Ideograph */ + [0x507a, 0x507a], /* CJK Ideograph */ + [0x507b, 0x507b], /* CJK Ideograph */ + [0x507c, 0x507c], /* CJK Ideograph */ + [0x507d, 0x507d], /* CJK Ideograph */ + [0x507e, 0x507e], /* CJK Ideograph */ + [0x507f, 0x507f], /* CJK Ideograph */ + [0x5080, 0x5080], /* CJK Ideograph */ + [0x5081, 0x5081], /* CJK Ideograph */ + [0x5082, 0x5082], /* CJK Ideograph */ + [0x5083, 0x5083], /* CJK Ideograph */ + [0x5084, 0x5084], /* CJK Ideograph */ + [0x5085, 0x5085], /* CJK Ideograph */ + [0x5086, 0x5086], /* CJK Ideograph */ + [0x5087, 0x5087], /* CJK Ideograph */ + [0x5088, 0x5088], /* CJK Ideograph */ + [0x5089, 0x5089], /* CJK Ideograph */ + [0x508a, 0x508a], /* CJK Ideograph */ + [0x508b, 0x508b], /* CJK Ideograph */ + [0x508c, 0x508c], /* CJK Ideograph */ + [0x508d, 0x508d], /* CJK Ideograph */ + [0x508e, 0x508e], /* CJK Ideograph */ + [0x508f, 0x508f], /* CJK Ideograph */ + [0x5090, 0x5090], /* CJK Ideograph */ + [0x5091, 0x5091], /* CJK Ideograph */ + [0x5092, 0x5092], /* CJK Ideograph */ + [0x5093, 0x5093], /* CJK Ideograph */ + [0x5094, 0x5094], /* CJK Ideograph */ + [0x5095, 0x5095], /* CJK Ideograph */ + [0x5096, 0x5096], /* CJK Ideograph */ + [0x5097, 0x5097], /* CJK Ideograph */ + [0x5098, 0x5098], /* CJK Ideograph */ + [0x5099, 0x5099], /* CJK Ideograph */ + [0x509a, 0x509a], /* CJK Ideograph */ + [0x509b, 0x509b], /* CJK Ideograph */ + [0x509c, 0x509c], /* CJK Ideograph */ + [0x509d, 0x509d], /* CJK Ideograph */ + [0x509e, 0x509e], /* CJK Ideograph */ + [0x509f, 0x509f], /* CJK Ideograph */ + [0x50a0, 0x50a0], /* CJK Ideograph */ + [0x50a1, 0x50a1], /* CJK Ideograph */ + [0x50a2, 0x50a2], /* CJK Ideograph */ + [0x50a3, 0x50a3], /* CJK Ideograph */ + [0x50a4, 0x50a4], /* CJK Ideograph */ + [0x50a5, 0x50a5], /* CJK Ideograph */ + [0x50a6, 0x50a6], /* CJK Ideograph */ + [0x50a7, 0x50a7], /* CJK Ideograph */ + [0x50a8, 0x50a8], /* CJK Ideograph */ + [0x50a9, 0x50a9], /* CJK Ideograph */ + [0x50aa, 0x50aa], /* CJK Ideograph */ + [0x50ab, 0x50ab], /* CJK Ideograph */ + [0x50ac, 0x50ac], /* CJK Ideograph */ + [0x50ad, 0x50ad], /* CJK Ideograph */ + [0x50ae, 0x50ae], /* CJK Ideograph */ + [0x50af, 0x50af], /* CJK Ideograph */ + [0x50b0, 0x50b0], /* CJK Ideograph */ + [0x50b1, 0x50b1], /* CJK Ideograph */ + [0x50b2, 0x50b2], /* CJK Ideograph */ + [0x50b3, 0x50b3], /* CJK Ideograph */ + [0x50b4, 0x50b4], /* CJK Ideograph */ + [0x50b5, 0x50b5], /* CJK Ideograph */ + [0x50b6, 0x50b6], /* CJK Ideograph */ + [0x50b7, 0x50b7], /* CJK Ideograph */ + [0x50b8, 0x50b8], /* CJK Ideograph */ + [0x50b9, 0x50b9], /* CJK Ideograph */ + [0x50ba, 0x50ba], /* CJK Ideograph */ + [0x50bb, 0x50bb], /* CJK Ideograph */ + [0x50bc, 0x50bc], /* CJK Ideograph */ + [0x50bd, 0x50bd], /* CJK Ideograph */ + [0x50be, 0x50be], /* CJK Ideograph */ + [0x50bf, 0x50bf], /* CJK Ideograph */ + [0x50c0, 0x50c0], /* CJK Ideograph */ + [0x50c1, 0x50c1], /* CJK Ideograph */ + [0x50c2, 0x50c2], /* CJK Ideograph */ + [0x50c3, 0x50c3], /* CJK Ideograph */ + [0x50c4, 0x50c4], /* CJK Ideograph */ + [0x50c5, 0x50c5], /* CJK Ideograph */ + [0x50c6, 0x50c6], /* CJK Ideograph */ + [0x50c7, 0x50c7], /* CJK Ideograph */ + [0x50c8, 0x50c8], /* CJK Ideograph */ + [0x50c9, 0x50c9], /* CJK Ideograph */ + [0x50ca, 0x50ca], /* CJK Ideograph */ + [0x50cb, 0x50cb], /* CJK Ideograph */ + [0x50cc, 0x50cc], /* CJK Ideograph */ + [0x50cd, 0x50cd], /* CJK Ideograph */ + [0x50ce, 0x50ce], /* CJK Ideograph */ + [0x50cf, 0x50cf], /* CJK Ideograph */ + [0x50d0, 0x50d0], /* CJK Ideograph */ + [0x50d1, 0x50d1], /* CJK Ideograph */ + [0x50d2, 0x50d2], /* CJK Ideograph */ + [0x50d3, 0x50d3], /* CJK Ideograph */ + [0x50d4, 0x50d4], /* CJK Ideograph */ + [0x50d5, 0x50d5], /* CJK Ideograph */ + [0x50d6, 0x50d6], /* CJK Ideograph */ + [0x50d7, 0x50d7], /* CJK Ideograph */ + [0x50d8, 0x50d8], /* CJK Ideograph */ + [0x50d9, 0x50d9], /* CJK Ideograph */ + [0x50da, 0x50da], /* CJK Ideograph */ + [0x50db, 0x50db], /* CJK Ideograph */ + [0x50dc, 0x50dc], /* CJK Ideograph */ + [0x50dd, 0x50dd], /* CJK Ideograph */ + [0x50de, 0x50de], /* CJK Ideograph */ + [0x50df, 0x50df], /* CJK Ideograph */ + [0x50e0, 0x50e0], /* CJK Ideograph */ + [0x50e1, 0x50e1], /* CJK Ideograph */ + [0x50e2, 0x50e2], /* CJK Ideograph */ + [0x50e3, 0x50e3], /* CJK Ideograph */ + [0x50e4, 0x50e4], /* CJK Ideograph */ + [0x50e5, 0x50e5], /* CJK Ideograph */ + [0x50e6, 0x50e6], /* CJK Ideograph */ + [0x50e7, 0x50e7], /* CJK Ideograph */ + [0x50e8, 0x50e8], /* CJK Ideograph */ + [0x50e9, 0x50e9], /* CJK Ideograph */ + [0x50ea, 0x50ea], /* CJK Ideograph */ + [0x50eb, 0x50eb], /* CJK Ideograph */ + [0x50ec, 0x50ec], /* CJK Ideograph */ + [0x50ed, 0x50ed], /* CJK Ideograph */ + [0x50ee, 0x50ee], /* CJK Ideograph */ + [0x50ef, 0x50ef], /* CJK Ideograph */ + [0x50f0, 0x50f0], /* CJK Ideograph */ + [0x50f1, 0x50f1], /* CJK Ideograph */ + [0x50f2, 0x50f2], /* CJK Ideograph */ + [0x50f3, 0x50f3], /* CJK Ideograph */ + [0x50f4, 0x50f4], /* CJK Ideograph */ + [0x50f5, 0x50f5], /* CJK Ideograph */ + [0x50f6, 0x50f6], /* CJK Ideograph */ + [0x50f7, 0x50f7], /* CJK Ideograph */ + [0x50f8, 0x50f8], /* CJK Ideograph */ + [0x50f9, 0x50f9], /* CJK Ideograph */ + [0x50fa, 0x50fa], /* CJK Ideograph */ + [0x50fb, 0x50fb], /* CJK Ideograph */ + [0x50fc, 0x50fc], /* CJK Ideograph */ + [0x50fd, 0x50fd], /* CJK Ideograph */ + [0x50fe, 0x50fe], /* CJK Ideograph */ + [0x50ff, 0x50ff], /* CJK Ideograph */ + [0x5100, 0x5100], /* CJK Ideograph */ + [0x5101, 0x5101], /* CJK Ideograph */ + [0x5102, 0x5102], /* CJK Ideograph */ + [0x5103, 0x5103], /* CJK Ideograph */ + [0x5104, 0x5104], /* CJK Ideograph */ + [0x5105, 0x5105], /* CJK Ideograph */ + [0x5106, 0x5106], /* CJK Ideograph */ + [0x5107, 0x5107], /* CJK Ideograph */ + [0x5108, 0x5108], /* CJK Ideograph */ + [0x5109, 0x5109], /* CJK Ideograph */ + [0x510a, 0x510a], /* CJK Ideograph */ + [0x510b, 0x510b], /* CJK Ideograph */ + [0x510c, 0x510c], /* CJK Ideograph */ + [0x510d, 0x510d], /* CJK Ideograph */ + [0x510e, 0x510e], /* CJK Ideograph */ + [0x510f, 0x510f], /* CJK Ideograph */ + [0x5110, 0x5110], /* CJK Ideograph */ + [0x5111, 0x5111], /* CJK Ideograph */ + [0x5112, 0x5112], /* CJK Ideograph */ + [0x5113, 0x5113], /* CJK Ideograph */ + [0x5114, 0x5114], /* CJK Ideograph */ + [0x5115, 0x5115], /* CJK Ideograph */ + [0x5116, 0x5116], /* CJK Ideograph */ + [0x5117, 0x5117], /* CJK Ideograph */ + [0x5118, 0x5118], /* CJK Ideograph */ + [0x5119, 0x5119], /* CJK Ideograph */ + [0x511a, 0x511a], /* CJK Ideograph */ + [0x511b, 0x511b], /* CJK Ideograph */ + [0x511c, 0x511c], /* CJK Ideograph */ + [0x511d, 0x511d], /* CJK Ideograph */ + [0x511e, 0x511e], /* CJK Ideograph */ + [0x511f, 0x511f], /* CJK Ideograph */ + [0x5120, 0x5120], /* CJK Ideograph */ + [0x5121, 0x5121], /* CJK Ideograph */ + [0x5122, 0x5122], /* CJK Ideograph */ + [0x5123, 0x5123], /* CJK Ideograph */ + [0x5124, 0x5124], /* CJK Ideograph */ + [0x5125, 0x5125], /* CJK Ideograph */ + [0x5126, 0x5126], /* CJK Ideograph */ + [0x5127, 0x5127], /* CJK Ideograph */ + [0x5128, 0x5128], /* CJK Ideograph */ + [0x5129, 0x5129], /* CJK Ideograph */ + [0x512a, 0x512a], /* CJK Ideograph */ + [0x512b, 0x512b], /* CJK Ideograph */ + [0x512c, 0x512c], /* CJK Ideograph */ + [0x512d, 0x512d], /* CJK Ideograph */ + [0x512e, 0x512e], /* CJK Ideograph */ + [0x512f, 0x512f], /* CJK Ideograph */ + [0x5130, 0x5130], /* CJK Ideograph */ + [0x5131, 0x5131], /* CJK Ideograph */ + [0x5132, 0x5132], /* CJK Ideograph */ + [0x5133, 0x5133], /* CJK Ideograph */ + [0x5134, 0x5134], /* CJK Ideograph */ + [0x5135, 0x5135], /* CJK Ideograph */ + [0x5136, 0x5136], /* CJK Ideograph */ + [0x5137, 0x5137], /* CJK Ideograph */ + [0x5138, 0x5138], /* CJK Ideograph */ + [0x5139, 0x5139], /* CJK Ideograph */ + [0x513a, 0x513a], /* CJK Ideograph */ + [0x513b, 0x513b], /* CJK Ideograph */ + [0x513c, 0x513c], /* CJK Ideograph */ + [0x513d, 0x513d], /* CJK Ideograph */ + [0x513e, 0x513e], /* CJK Ideograph */ + [0x513f, 0x513f], /* CJK Ideograph */ + [0x5140, 0x5140], /* CJK Ideograph */ + [0x5141, 0x5141], /* CJK Ideograph */ + [0x5142, 0x5142], /* CJK Ideograph */ + [0x5143, 0x5143], /* CJK Ideograph */ + [0x5144, 0x5144], /* CJK Ideograph */ + [0x5145, 0x5145], /* CJK Ideograph */ + [0x5146, 0x5146], /* CJK Ideograph */ + [0x5147, 0x5147], /* CJK Ideograph */ + [0x5148, 0x5148], /* CJK Ideograph */ + [0x5149, 0x5149], /* CJK Ideograph */ + [0x514a, 0x514a], /* CJK Ideograph */ + [0x514b, 0x514b], /* CJK Ideograph */ + [0x514c, 0x514c], /* CJK Ideograph */ + [0x514d, 0x514d], /* CJK Ideograph */ + [0x514e, 0x514e], /* CJK Ideograph */ + [0x514f, 0x514f], /* CJK Ideograph */ + [0x5150, 0x5150], /* CJK Ideograph */ + [0x5151, 0x5151], /* CJK Ideograph */ + [0x5152, 0x5152], /* CJK Ideograph */ + [0x5153, 0x5153], /* CJK Ideograph */ + [0x5154, 0x5154], /* CJK Ideograph */ + [0x5155, 0x5155], /* CJK Ideograph */ + [0x5156, 0x5156], /* CJK Ideograph */ + [0x5157, 0x5157], /* CJK Ideograph */ + [0x5158, 0x5158], /* CJK Ideograph */ + [0x5159, 0x5159], /* CJK Ideograph */ + [0x515a, 0x515a], /* CJK Ideograph */ + [0x515b, 0x515b], /* CJK Ideograph */ + [0x515c, 0x515c], /* CJK Ideograph */ + [0x515d, 0x515d], /* CJK Ideograph */ + [0x515e, 0x515e], /* CJK Ideograph */ + [0x515f, 0x515f], /* CJK Ideograph */ + [0x5160, 0x5160], /* CJK Ideograph */ + [0x5161, 0x5161], /* CJK Ideograph */ + [0x5162, 0x5162], /* CJK Ideograph */ + [0x5163, 0x5163], /* CJK Ideograph */ + [0x5164, 0x5164], /* CJK Ideograph */ + [0x5165, 0x5165], /* CJK Ideograph */ + [0x5166, 0x5166], /* CJK Ideograph */ + [0x5167, 0x5167], /* CJK Ideograph */ + [0x5168, 0x5168], /* CJK Ideograph */ + [0x5169, 0x5169], /* CJK Ideograph */ + [0x516a, 0x516a], /* CJK Ideograph */ + [0x516b, 0x516b], /* CJK Ideograph */ + [0x516c, 0x516c], /* CJK Ideograph */ + [0x516d, 0x516d], /* CJK Ideograph */ + [0x516e, 0x516e], /* CJK Ideograph */ + [0x516f, 0x516f], /* CJK Ideograph */ + [0x5170, 0x5170], /* CJK Ideograph */ + [0x5171, 0x5171], /* CJK Ideograph */ + [0x5172, 0x5172], /* CJK Ideograph */ + [0x5173, 0x5173], /* CJK Ideograph */ + [0x5174, 0x5174], /* CJK Ideograph */ + [0x5175, 0x5175], /* CJK Ideograph */ + [0x5176, 0x5176], /* CJK Ideograph */ + [0x5177, 0x5177], /* CJK Ideograph */ + [0x5178, 0x5178], /* CJK Ideograph */ + [0x5179, 0x5179], /* CJK Ideograph */ + [0x517a, 0x517a], /* CJK Ideograph */ + [0x517b, 0x517b], /* CJK Ideograph */ + [0x517c, 0x517c], /* CJK Ideograph */ + [0x517d, 0x517d], /* CJK Ideograph */ + [0x517e, 0x517e], /* CJK Ideograph */ + [0x517f, 0x517f], /* CJK Ideograph */ + [0x5180, 0x5180], /* CJK Ideograph */ + [0x5181, 0x5181], /* CJK Ideograph */ + [0x5182, 0x5182], /* CJK Ideograph */ + [0x5183, 0x5183], /* CJK Ideograph */ + [0x5184, 0x5184], /* CJK Ideograph */ + [0x5185, 0x5185], /* CJK Ideograph */ + [0x5186, 0x5186], /* CJK Ideograph */ + [0x5187, 0x5187], /* CJK Ideograph */ + [0x5188, 0x5188], /* CJK Ideograph */ + [0x5189, 0x5189], /* CJK Ideograph */ + [0x518a, 0x518a], /* CJK Ideograph */ + [0x518b, 0x518b], /* CJK Ideograph */ + [0x518c, 0x518c], /* CJK Ideograph */ + [0x518d, 0x518d], /* CJK Ideograph */ + [0x518e, 0x518e], /* CJK Ideograph */ + [0x518f, 0x518f], /* CJK Ideograph */ + [0x5190, 0x5190], /* CJK Ideograph */ + [0x5191, 0x5191], /* CJK Ideograph */ + [0x5192, 0x5192], /* CJK Ideograph */ + [0x5193, 0x5193], /* CJK Ideograph */ + [0x5194, 0x5194], /* CJK Ideograph */ + [0x5195, 0x5195], /* CJK Ideograph */ + [0x5196, 0x5196], /* CJK Ideograph */ + [0x5197, 0x5197], /* CJK Ideograph */ + [0x5198, 0x5198], /* CJK Ideograph */ + [0x5199, 0x5199], /* CJK Ideograph */ + [0x519a, 0x519a], /* CJK Ideograph */ + [0x519b, 0x519b], /* CJK Ideograph */ + [0x519c, 0x519c], /* CJK Ideograph */ + [0x519d, 0x519d], /* CJK Ideograph */ + [0x519e, 0x519e], /* CJK Ideograph */ + [0x519f, 0x519f], /* CJK Ideograph */ + [0x51a0, 0x51a0], /* CJK Ideograph */ + [0x51a1, 0x51a1], /* CJK Ideograph */ + [0x51a2, 0x51a2], /* CJK Ideograph */ + [0x51a3, 0x51a3], /* CJK Ideograph */ + [0x51a4, 0x51a4], /* CJK Ideograph */ + [0x51a5, 0x51a5], /* CJK Ideograph */ + [0x51a6, 0x51a6], /* CJK Ideograph */ + [0x51a7, 0x51a7], /* CJK Ideograph */ + [0x51a8, 0x51a8], /* CJK Ideograph */ + [0x51a9, 0x51a9], /* CJK Ideograph */ + [0x51aa, 0x51aa], /* CJK Ideograph */ + [0x51ab, 0x51ab], /* CJK Ideograph */ + [0x51ac, 0x51ac], /* CJK Ideograph */ + [0x51ad, 0x51ad], /* CJK Ideograph */ + [0x51ae, 0x51ae], /* CJK Ideograph */ + [0x51af, 0x51af], /* CJK Ideograph */ + [0x51b0, 0x51b0], /* CJK Ideograph */ + [0x51b1, 0x51b1], /* CJK Ideograph */ + [0x51b2, 0x51b2], /* CJK Ideograph */ + [0x51b3, 0x51b3], /* CJK Ideograph */ + [0x51b4, 0x51b4], /* CJK Ideograph */ + [0x51b5, 0x51b5], /* CJK Ideograph */ + [0x51b6, 0x51b6], /* CJK Ideograph */ + [0x51b7, 0x51b7], /* CJK Ideograph */ + [0x51b8, 0x51b8], /* CJK Ideograph */ + [0x51b9, 0x51b9], /* CJK Ideograph */ + [0x51ba, 0x51ba], /* CJK Ideograph */ + [0x51bb, 0x51bb], /* CJK Ideograph */ + [0x51bc, 0x51bc], /* CJK Ideograph */ + [0x51bd, 0x51bd], /* CJK Ideograph */ + [0x51be, 0x51be], /* CJK Ideograph */ + [0x51bf, 0x51bf], /* CJK Ideograph */ + [0x51c0, 0x51c0], /* CJK Ideograph */ + [0x51c1, 0x51c1], /* CJK Ideograph */ + [0x51c2, 0x51c2], /* CJK Ideograph */ + [0x51c3, 0x51c3], /* CJK Ideograph */ + [0x51c4, 0x51c4], /* CJK Ideograph */ + [0x51c5, 0x51c5], /* CJK Ideograph */ + [0x51c6, 0x51c6], /* CJK Ideograph */ + [0x51c7, 0x51c7], /* CJK Ideograph */ + [0x51c8, 0x51c8], /* CJK Ideograph */ + [0x51c9, 0x51c9], /* CJK Ideograph */ + [0x51ca, 0x51ca], /* CJK Ideograph */ + [0x51cb, 0x51cb], /* CJK Ideograph */ + [0x51cc, 0x51cc], /* CJK Ideograph */ + [0x51cd, 0x51cd], /* CJK Ideograph */ + [0x51ce, 0x51ce], /* CJK Ideograph */ + [0x51cf, 0x51cf], /* CJK Ideograph */ + [0x51d0, 0x51d0], /* CJK Ideograph */ + [0x51d1, 0x51d1], /* CJK Ideograph */ + [0x51d2, 0x51d2], /* CJK Ideograph */ + [0x51d3, 0x51d3], /* CJK Ideograph */ + [0x51d4, 0x51d4], /* CJK Ideograph */ + [0x51d5, 0x51d5], /* CJK Ideograph */ + [0x51d6, 0x51d6], /* CJK Ideograph */ + [0x51d7, 0x51d7], /* CJK Ideograph */ + [0x51d8, 0x51d8], /* CJK Ideograph */ + [0x51d9, 0x51d9], /* CJK Ideograph */ + [0x51da, 0x51da], /* CJK Ideograph */ + [0x51db, 0x51db], /* CJK Ideograph */ + [0x51dc, 0x51dc], /* CJK Ideograph */ + [0x51dd, 0x51dd], /* CJK Ideograph */ + [0x51de, 0x51de], /* CJK Ideograph */ + [0x51df, 0x51df], /* CJK Ideograph */ + [0x51e0, 0x51e0], /* CJK Ideograph */ + [0x51e1, 0x51e1], /* CJK Ideograph */ + [0x51e2, 0x51e2], /* CJK Ideograph */ + [0x51e3, 0x51e3], /* CJK Ideograph */ + [0x51e4, 0x51e4], /* CJK Ideograph */ + [0x51e5, 0x51e5], /* CJK Ideograph */ + [0x51e6, 0x51e6], /* CJK Ideograph */ + [0x51e7, 0x51e7], /* CJK Ideograph */ + [0x51e8, 0x51e8], /* CJK Ideograph */ + [0x51e9, 0x51e9], /* CJK Ideograph */ + [0x51ea, 0x51ea], /* CJK Ideograph */ + [0x51eb, 0x51eb], /* CJK Ideograph */ + [0x51ec, 0x51ec], /* CJK Ideograph */ + [0x51ed, 0x51ed], /* CJK Ideograph */ + [0x51ee, 0x51ee], /* CJK Ideograph */ + [0x51ef, 0x51ef], /* CJK Ideograph */ + [0x51f0, 0x51f0], /* CJK Ideograph */ + [0x51f1, 0x51f1], /* CJK Ideograph */ + [0x51f2, 0x51f2], /* CJK Ideograph */ + [0x51f3, 0x51f3], /* CJK Ideograph */ + [0x51f4, 0x51f4], /* CJK Ideograph */ + [0x51f5, 0x51f5], /* CJK Ideograph */ + [0x51f6, 0x51f6], /* CJK Ideograph */ + [0x51f7, 0x51f7], /* CJK Ideograph */ + [0x51f8, 0x51f8], /* CJK Ideograph */ + [0x51f9, 0x51f9], /* CJK Ideograph */ + [0x51fa, 0x51fa], /* CJK Ideograph */ + [0x51fb, 0x51fb], /* CJK Ideograph */ + [0x51fc, 0x51fc], /* CJK Ideograph */ + [0x51fd, 0x51fd], /* CJK Ideograph */ + [0x51fe, 0x51fe], /* CJK Ideograph */ + [0x51ff, 0x51ff], /* CJK Ideograph */ + [0x5200, 0x5200], /* CJK Ideograph */ + [0x5201, 0x5201], /* CJK Ideograph */ + [0x5202, 0x5202], /* CJK Ideograph */ + [0x5203, 0x5203], /* CJK Ideograph */ + [0x5204, 0x5204], /* CJK Ideograph */ + [0x5205, 0x5205], /* CJK Ideograph */ + [0x5206, 0x5206], /* CJK Ideograph */ + [0x5207, 0x5207], /* CJK Ideograph */ + [0x5208, 0x5208], /* CJK Ideograph */ + [0x5209, 0x5209], /* CJK Ideograph */ + [0x520a, 0x520a], /* CJK Ideograph */ + [0x520b, 0x520b], /* CJK Ideograph */ + [0x520c, 0x520c], /* CJK Ideograph */ + [0x520d, 0x520d], /* CJK Ideograph */ + [0x520e, 0x520e], /* CJK Ideograph */ + [0x520f, 0x520f], /* CJK Ideograph */ + [0x5210, 0x5210], /* CJK Ideograph */ + [0x5211, 0x5211], /* CJK Ideograph */ + [0x5212, 0x5212], /* CJK Ideograph */ + [0x5213, 0x5213], /* CJK Ideograph */ + [0x5214, 0x5214], /* CJK Ideograph */ + [0x5215, 0x5215], /* CJK Ideograph */ + [0x5216, 0x5216], /* CJK Ideograph */ + [0x5217, 0x5217], /* CJK Ideograph */ + [0x5218, 0x5218], /* CJK Ideograph */ + [0x5219, 0x5219], /* CJK Ideograph */ + [0x521a, 0x521a], /* CJK Ideograph */ + [0x521b, 0x521b], /* CJK Ideograph */ + [0x521c, 0x521c], /* CJK Ideograph */ + [0x521d, 0x521d], /* CJK Ideograph */ + [0x521e, 0x521e], /* CJK Ideograph */ + [0x521f, 0x521f], /* CJK Ideograph */ + [0x5220, 0x5220], /* CJK Ideograph */ + [0x5221, 0x5221], /* CJK Ideograph */ + [0x5222, 0x5222], /* CJK Ideograph */ + [0x5223, 0x5223], /* CJK Ideograph */ + [0x5224, 0x5224], /* CJK Ideograph */ + [0x5225, 0x5225], /* CJK Ideograph */ + [0x5226, 0x5226], /* CJK Ideograph */ + [0x5227, 0x5227], /* CJK Ideograph */ + [0x5228, 0x5228], /* CJK Ideograph */ + [0x5229, 0x5229], /* CJK Ideograph */ + [0x522a, 0x522a], /* CJK Ideograph */ + [0x522b, 0x522b], /* CJK Ideograph */ + [0x522c, 0x522c], /* CJK Ideograph */ + [0x522d, 0x522d], /* CJK Ideograph */ + [0x522e, 0x522e], /* CJK Ideograph */ + [0x522f, 0x522f], /* CJK Ideograph */ + [0x5230, 0x5230], /* CJK Ideograph */ + [0x5231, 0x5231], /* CJK Ideograph */ + [0x5232, 0x5232], /* CJK Ideograph */ + [0x5233, 0x5233], /* CJK Ideograph */ + [0x5234, 0x5234], /* CJK Ideograph */ + [0x5235, 0x5235], /* CJK Ideograph */ + [0x5236, 0x5236], /* CJK Ideograph */ + [0x5237, 0x5237], /* CJK Ideograph */ + [0x5238, 0x5238], /* CJK Ideograph */ + [0x5239, 0x5239], /* CJK Ideograph */ + [0x523a, 0x523a], /* CJK Ideograph */ + [0x523b, 0x523b], /* CJK Ideograph */ + [0x523c, 0x523c], /* CJK Ideograph */ + [0x523d, 0x523d], /* CJK Ideograph */ + [0x523e, 0x523e], /* CJK Ideograph */ + [0x523f, 0x523f], /* CJK Ideograph */ + [0x5240, 0x5240], /* CJK Ideograph */ + [0x5241, 0x5241], /* CJK Ideograph */ + [0x5242, 0x5242], /* CJK Ideograph */ + [0x5243, 0x5243], /* CJK Ideograph */ + [0x5244, 0x5244], /* CJK Ideograph */ + [0x5245, 0x5245], /* CJK Ideograph */ + [0x5246, 0x5246], /* CJK Ideograph */ + [0x5247, 0x5247], /* CJK Ideograph */ + [0x5248, 0x5248], /* CJK Ideograph */ + [0x5249, 0x5249], /* CJK Ideograph */ + [0x524a, 0x524a], /* CJK Ideograph */ + [0x524b, 0x524b], /* CJK Ideograph */ + [0x524c, 0x524c], /* CJK Ideograph */ + [0x524d, 0x524d], /* CJK Ideograph */ + [0x524e, 0x524e], /* CJK Ideograph */ + [0x524f, 0x524f], /* CJK Ideograph */ + [0x5250, 0x5250], /* CJK Ideograph */ + [0x5251, 0x5251], /* CJK Ideograph */ + [0x5252, 0x5252], /* CJK Ideograph */ + [0x5253, 0x5253], /* CJK Ideograph */ + [0x5254, 0x5254], /* CJK Ideograph */ + [0x5255, 0x5255], /* CJK Ideograph */ + [0x5256, 0x5256], /* CJK Ideograph */ + [0x5257, 0x5257], /* CJK Ideograph */ + [0x5258, 0x5258], /* CJK Ideograph */ + [0x5259, 0x5259], /* CJK Ideograph */ + [0x525a, 0x525a], /* CJK Ideograph */ + [0x525b, 0x525b], /* CJK Ideograph */ + [0x525c, 0x525c], /* CJK Ideograph */ + [0x525d, 0x525d], /* CJK Ideograph */ + [0x525e, 0x525e], /* CJK Ideograph */ + [0x525f, 0x525f], /* CJK Ideograph */ + [0x5260, 0x5260], /* CJK Ideograph */ + [0x5261, 0x5261], /* CJK Ideograph */ + [0x5262, 0x5262], /* CJK Ideograph */ + [0x5263, 0x5263], /* CJK Ideograph */ + [0x5264, 0x5264], /* CJK Ideograph */ + [0x5265, 0x5265], /* CJK Ideograph */ + [0x5266, 0x5266], /* CJK Ideograph */ + [0x5267, 0x5267], /* CJK Ideograph */ + [0x5268, 0x5268], /* CJK Ideograph */ + [0x5269, 0x5269], /* CJK Ideograph */ + [0x526a, 0x526a], /* CJK Ideograph */ + [0x526b, 0x526b], /* CJK Ideograph */ + [0x526c, 0x526c], /* CJK Ideograph */ + [0x526d, 0x526d], /* CJK Ideograph */ + [0x526e, 0x526e], /* CJK Ideograph */ + [0x526f, 0x526f], /* CJK Ideograph */ + [0x5270, 0x5270], /* CJK Ideograph */ + [0x5271, 0x5271], /* CJK Ideograph */ + [0x5272, 0x5272], /* CJK Ideograph */ + [0x5273, 0x5273], /* CJK Ideograph */ + [0x5274, 0x5274], /* CJK Ideograph */ + [0x5275, 0x5275], /* CJK Ideograph */ + [0x5276, 0x5276], /* CJK Ideograph */ + [0x5277, 0x5277], /* CJK Ideograph */ + [0x5278, 0x5278], /* CJK Ideograph */ + [0x5279, 0x5279], /* CJK Ideograph */ + [0x527a, 0x527a], /* CJK Ideograph */ + [0x527b, 0x527b], /* CJK Ideograph */ + [0x527c, 0x527c], /* CJK Ideograph */ + [0x527d, 0x527d], /* CJK Ideograph */ + [0x527e, 0x527e], /* CJK Ideograph */ + [0x527f, 0x527f], /* CJK Ideograph */ + [0x5280, 0x5280], /* CJK Ideograph */ + [0x5281, 0x5281], /* CJK Ideograph */ + [0x5282, 0x5282], /* CJK Ideograph */ + [0x5283, 0x5283], /* CJK Ideograph */ + [0x5284, 0x5284], /* CJK Ideograph */ + [0x5285, 0x5285], /* CJK Ideograph */ + [0x5286, 0x5286], /* CJK Ideograph */ + [0x5287, 0x5287], /* CJK Ideograph */ + [0x5288, 0x5288], /* CJK Ideograph */ + [0x5289, 0x5289], /* CJK Ideograph */ + [0x528a, 0x528a], /* CJK Ideograph */ + [0x528b, 0x528b], /* CJK Ideograph */ + [0x528c, 0x528c], /* CJK Ideograph */ + [0x528d, 0x528d], /* CJK Ideograph */ + [0x528e, 0x528e], /* CJK Ideograph */ + [0x528f, 0x528f], /* CJK Ideograph */ + [0x5290, 0x5290], /* CJK Ideograph */ + [0x5291, 0x5291], /* CJK Ideograph */ + [0x5292, 0x5292], /* CJK Ideograph */ + [0x5293, 0x5293], /* CJK Ideograph */ + [0x5294, 0x5294], /* CJK Ideograph */ + [0x5295, 0x5295], /* CJK Ideograph */ + [0x5296, 0x5296], /* CJK Ideograph */ + [0x5297, 0x5297], /* CJK Ideograph */ + [0x5298, 0x5298], /* CJK Ideograph */ + [0x5299, 0x5299], /* CJK Ideograph */ + [0x529a, 0x529a], /* CJK Ideograph */ + [0x529b, 0x529b], /* CJK Ideograph */ + [0x529c, 0x529c], /* CJK Ideograph */ + [0x529d, 0x529d], /* CJK Ideograph */ + [0x529e, 0x529e], /* CJK Ideograph */ + [0x529f, 0x529f], /* CJK Ideograph */ + [0x52a0, 0x52a0], /* CJK Ideograph */ + [0x52a1, 0x52a1], /* CJK Ideograph */ + [0x52a2, 0x52a2], /* CJK Ideograph */ + [0x52a3, 0x52a3], /* CJK Ideograph */ + [0x52a4, 0x52a4], /* CJK Ideograph */ + [0x52a5, 0x52a5], /* CJK Ideograph */ + [0x52a6, 0x52a6], /* CJK Ideograph */ + [0x52a7, 0x52a7], /* CJK Ideograph */ + [0x52a8, 0x52a8], /* CJK Ideograph */ + [0x52a9, 0x52a9], /* CJK Ideograph */ + [0x52aa, 0x52aa], /* CJK Ideograph */ + [0x52ab, 0x52ab], /* CJK Ideograph */ + [0x52ac, 0x52ac], /* CJK Ideograph */ + [0x52ad, 0x52ad], /* CJK Ideograph */ + [0x52ae, 0x52ae], /* CJK Ideograph */ + [0x52af, 0x52af], /* CJK Ideograph */ + [0x52b0, 0x52b0], /* CJK Ideograph */ + [0x52b1, 0x52b1], /* CJK Ideograph */ + [0x52b2, 0x52b2], /* CJK Ideograph */ + [0x52b3, 0x52b3], /* CJK Ideograph */ + [0x52b4, 0x52b4], /* CJK Ideograph */ + [0x52b5, 0x52b5], /* CJK Ideograph */ + [0x52b6, 0x52b6], /* CJK Ideograph */ + [0x52b7, 0x52b7], /* CJK Ideograph */ + [0x52b8, 0x52b8], /* CJK Ideograph */ + [0x52b9, 0x52b9], /* CJK Ideograph */ + [0x52ba, 0x52ba], /* CJK Ideograph */ + [0x52bb, 0x52bb], /* CJK Ideograph */ + [0x52bc, 0x52bc], /* CJK Ideograph */ + [0x52bd, 0x52bd], /* CJK Ideograph */ + [0x52be, 0x52be], /* CJK Ideograph */ + [0x52bf, 0x52bf], /* CJK Ideograph */ + [0x52c0, 0x52c0], /* CJK Ideograph */ + [0x52c1, 0x52c1], /* CJK Ideograph */ + [0x52c2, 0x52c2], /* CJK Ideograph */ + [0x52c3, 0x52c3], /* CJK Ideograph */ + [0x52c4, 0x52c4], /* CJK Ideograph */ + [0x52c5, 0x52c5], /* CJK Ideograph */ + [0x52c6, 0x52c6], /* CJK Ideograph */ + [0x52c7, 0x52c7], /* CJK Ideograph */ + [0x52c8, 0x52c8], /* CJK Ideograph */ + [0x52c9, 0x52c9], /* CJK Ideograph */ + [0x52ca, 0x52ca], /* CJK Ideograph */ + [0x52cb, 0x52cb], /* CJK Ideograph */ + [0x52cc, 0x52cc], /* CJK Ideograph */ + [0x52cd, 0x52cd], /* CJK Ideograph */ + [0x52ce, 0x52ce], /* CJK Ideograph */ + [0x52cf, 0x52cf], /* CJK Ideograph */ + [0x52d0, 0x52d0], /* CJK Ideograph */ + [0x52d1, 0x52d1], /* CJK Ideograph */ + [0x52d2, 0x52d2], /* CJK Ideograph */ + [0x52d3, 0x52d3], /* CJK Ideograph */ + [0x52d4, 0x52d4], /* CJK Ideograph */ + [0x52d5, 0x52d5], /* CJK Ideograph */ + [0x52d6, 0x52d6], /* CJK Ideograph */ + [0x52d7, 0x52d7], /* CJK Ideograph */ + [0x52d8, 0x52d8], /* CJK Ideograph */ + [0x52d9, 0x52d9], /* CJK Ideograph */ + [0x52da, 0x52da], /* CJK Ideograph */ + [0x52db, 0x52db], /* CJK Ideograph */ + [0x52dc, 0x52dc], /* CJK Ideograph */ + [0x52dd, 0x52dd], /* CJK Ideograph */ + [0x52de, 0x52de], /* CJK Ideograph */ + [0x52df, 0x52df], /* CJK Ideograph */ + [0x52e0, 0x52e0], /* CJK Ideograph */ + [0x52e1, 0x52e1], /* CJK Ideograph */ + [0x52e2, 0x52e2], /* CJK Ideograph */ + [0x52e3, 0x52e3], /* CJK Ideograph */ + [0x52e4, 0x52e4], /* CJK Ideograph */ + [0x52e5, 0x52e5], /* CJK Ideograph */ + [0x52e6, 0x52e6], /* CJK Ideograph */ + [0x52e7, 0x52e7], /* CJK Ideograph */ + [0x52e8, 0x52e8], /* CJK Ideograph */ + [0x52e9, 0x52e9], /* CJK Ideograph */ + [0x52ea, 0x52ea], /* CJK Ideograph */ + [0x52eb, 0x52eb], /* CJK Ideograph */ + [0x52ec, 0x52ec], /* CJK Ideograph */ + [0x52ed, 0x52ed], /* CJK Ideograph */ + [0x52ee, 0x52ee], /* CJK Ideograph */ + [0x52ef, 0x52ef], /* CJK Ideograph */ + [0x52f0, 0x52f0], /* CJK Ideograph */ + [0x52f1, 0x52f1], /* CJK Ideograph */ + [0x52f2, 0x52f2], /* CJK Ideograph */ + [0x52f3, 0x52f3], /* CJK Ideograph */ + [0x52f4, 0x52f4], /* CJK Ideograph */ + [0x52f5, 0x52f5], /* CJK Ideograph */ + [0x52f6, 0x52f6], /* CJK Ideograph */ + [0x52f7, 0x52f7], /* CJK Ideograph */ + [0x52f8, 0x52f8], /* CJK Ideograph */ + [0x52f9, 0x52f9], /* CJK Ideograph */ + [0x52fa, 0x52fa], /* CJK Ideograph */ + [0x52fb, 0x52fb], /* CJK Ideograph */ + [0x52fc, 0x52fc], /* CJK Ideograph */ + [0x52fd, 0x52fd], /* CJK Ideograph */ + [0x52fe, 0x52fe], /* CJK Ideograph */ + [0x52ff, 0x52ff], /* CJK Ideograph */ + [0x5300, 0x5300], /* CJK Ideograph */ + [0x5301, 0x5301], /* CJK Ideograph */ + [0x5302, 0x5302], /* CJK Ideograph */ + [0x5303, 0x5303], /* CJK Ideograph */ + [0x5304, 0x5304], /* CJK Ideograph */ + [0x5305, 0x5305], /* CJK Ideograph */ + [0x5306, 0x5306], /* CJK Ideograph */ + [0x5307, 0x5307], /* CJK Ideograph */ + [0x5308, 0x5308], /* CJK Ideograph */ + [0x5309, 0x5309], /* CJK Ideograph */ + [0x530a, 0x530a], /* CJK Ideograph */ + [0x530b, 0x530b], /* CJK Ideograph */ + [0x530c, 0x530c], /* CJK Ideograph */ + [0x530d, 0x530d], /* CJK Ideograph */ + [0x530e, 0x530e], /* CJK Ideograph */ + [0x530f, 0x530f], /* CJK Ideograph */ + [0x5310, 0x5310], /* CJK Ideograph */ + [0x5311, 0x5311], /* CJK Ideograph */ + [0x5312, 0x5312], /* CJK Ideograph */ + [0x5313, 0x5313], /* CJK Ideograph */ + [0x5314, 0x5314], /* CJK Ideograph */ + [0x5315, 0x5315], /* CJK Ideograph */ + [0x5316, 0x5316], /* CJK Ideograph */ + [0x5317, 0x5317], /* CJK Ideograph */ + [0x5318, 0x5318], /* CJK Ideograph */ + [0x5319, 0x5319], /* CJK Ideograph */ + [0x531a, 0x531a], /* CJK Ideograph */ + [0x531b, 0x531b], /* CJK Ideograph */ + [0x531c, 0x531c], /* CJK Ideograph */ + [0x531d, 0x531d], /* CJK Ideograph */ + [0x531e, 0x531e], /* CJK Ideograph */ + [0x531f, 0x531f], /* CJK Ideograph */ + [0x5320, 0x5320], /* CJK Ideograph */ + [0x5321, 0x5321], /* CJK Ideograph */ + [0x5322, 0x5322], /* CJK Ideograph */ + [0x5323, 0x5323], /* CJK Ideograph */ + [0x5324, 0x5324], /* CJK Ideograph */ + [0x5325, 0x5325], /* CJK Ideograph */ + [0x5326, 0x5326], /* CJK Ideograph */ + [0x5327, 0x5327], /* CJK Ideograph */ + [0x5328, 0x5328], /* CJK Ideograph */ + [0x5329, 0x5329], /* CJK Ideograph */ + [0x532a, 0x532a], /* CJK Ideograph */ + [0x532b, 0x532b], /* CJK Ideograph */ + [0x532c, 0x532c], /* CJK Ideograph */ + [0x532d, 0x532d], /* CJK Ideograph */ + [0x532e, 0x532e], /* CJK Ideograph */ + [0x532f, 0x532f], /* CJK Ideograph */ + [0x5330, 0x5330], /* CJK Ideograph */ + [0x5331, 0x5331], /* CJK Ideograph */ + [0x5332, 0x5332], /* CJK Ideograph */ + [0x5333, 0x5333], /* CJK Ideograph */ + [0x5334, 0x5334], /* CJK Ideograph */ + [0x5335, 0x5335], /* CJK Ideograph */ + [0x5336, 0x5336], /* CJK Ideograph */ + [0x5337, 0x5337], /* CJK Ideograph */ + [0x5338, 0x5338], /* CJK Ideograph */ + [0x5339, 0x5339], /* CJK Ideograph */ + [0x533a, 0x533a], /* CJK Ideograph */ + [0x533b, 0x533b], /* CJK Ideograph */ + [0x533c, 0x533c], /* CJK Ideograph */ + [0x533d, 0x533d], /* CJK Ideograph */ + [0x533e, 0x533e], /* CJK Ideograph */ + [0x533f, 0x533f], /* CJK Ideograph */ + [0x5340, 0x5340], /* CJK Ideograph */ + [0x5341, 0x5341], /* CJK Ideograph */ + [0x5342, 0x5342], /* CJK Ideograph */ + [0x5343, 0x5343], /* CJK Ideograph */ + [0x5344, 0x5344], /* CJK Ideograph */ + [0x5345, 0x5345], /* CJK Ideograph */ + [0x5346, 0x5346], /* CJK Ideograph */ + [0x5347, 0x5347], /* CJK Ideograph */ + [0x5348, 0x5348], /* CJK Ideograph */ + [0x5349, 0x5349], /* CJK Ideograph */ + [0x534a, 0x534a], /* CJK Ideograph */ + [0x534b, 0x534b], /* CJK Ideograph */ + [0x534c, 0x534c], /* CJK Ideograph */ + [0x534d, 0x534d], /* CJK Ideograph */ + [0x534e, 0x534e], /* CJK Ideograph */ + [0x534f, 0x534f], /* CJK Ideograph */ + [0x5350, 0x5350], /* CJK Ideograph */ + [0x5351, 0x5351], /* CJK Ideograph */ + [0x5352, 0x5352], /* CJK Ideograph */ + [0x5353, 0x5353], /* CJK Ideograph */ + [0x5354, 0x5354], /* CJK Ideograph */ + [0x5355, 0x5355], /* CJK Ideograph */ + [0x5356, 0x5356], /* CJK Ideograph */ + [0x5357, 0x5357], /* CJK Ideograph */ + [0x5358, 0x5358], /* CJK Ideograph */ + [0x5359, 0x5359], /* CJK Ideograph */ + [0x535a, 0x535a], /* CJK Ideograph */ + [0x535b, 0x535b], /* CJK Ideograph */ + [0x535c, 0x535c], /* CJK Ideograph */ + [0x535d, 0x535d], /* CJK Ideograph */ + [0x535e, 0x535e], /* CJK Ideograph */ + [0x535f, 0x535f], /* CJK Ideograph */ + [0x5360, 0x5360], /* CJK Ideograph */ + [0x5361, 0x5361], /* CJK Ideograph */ + [0x5362, 0x5362], /* CJK Ideograph */ + [0x5363, 0x5363], /* CJK Ideograph */ + [0x5364, 0x5364], /* CJK Ideograph */ + [0x5365, 0x5365], /* CJK Ideograph */ + [0x5366, 0x5366], /* CJK Ideograph */ + [0x5367, 0x5367], /* CJK Ideograph */ + [0x5368, 0x5368], /* CJK Ideograph */ + [0x5369, 0x5369], /* CJK Ideograph */ + [0x536a, 0x536a], /* CJK Ideograph */ + [0x536b, 0x536b], /* CJK Ideograph */ + [0x536c, 0x536c], /* CJK Ideograph */ + [0x536d, 0x536d], /* CJK Ideograph */ + [0x536e, 0x536e], /* CJK Ideograph */ + [0x536f, 0x536f], /* CJK Ideograph */ + [0x5370, 0x5370], /* CJK Ideograph */ + [0x5371, 0x5371], /* CJK Ideograph */ + [0x5372, 0x5372], /* CJK Ideograph */ + [0x5373, 0x5373], /* CJK Ideograph */ + [0x5374, 0x5374], /* CJK Ideograph */ + [0x5375, 0x5375], /* CJK Ideograph */ + [0x5376, 0x5376], /* CJK Ideograph */ + [0x5377, 0x5377], /* CJK Ideograph */ + [0x5378, 0x5378], /* CJK Ideograph */ + [0x5379, 0x5379], /* CJK Ideograph */ + [0x537a, 0x537a], /* CJK Ideograph */ + [0x537b, 0x537b], /* CJK Ideograph */ + [0x537c, 0x537c], /* CJK Ideograph */ + [0x537d, 0x537d], /* CJK Ideograph */ + [0x537e, 0x537e], /* CJK Ideograph */ + [0x537f, 0x537f], /* CJK Ideograph */ + [0x5380, 0x5380], /* CJK Ideograph */ + [0x5381, 0x5381], /* CJK Ideograph */ + [0x5382, 0x5382], /* CJK Ideograph */ + [0x5383, 0x5383], /* CJK Ideograph */ + [0x5384, 0x5384], /* CJK Ideograph */ + [0x5385, 0x5385], /* CJK Ideograph */ + [0x5386, 0x5386], /* CJK Ideograph */ + [0x5387, 0x5387], /* CJK Ideograph */ + [0x5388, 0x5388], /* CJK Ideograph */ + [0x5389, 0x5389], /* CJK Ideograph */ + [0x538a, 0x538a], /* CJK Ideograph */ + [0x538b, 0x538b], /* CJK Ideograph */ + [0x538c, 0x538c], /* CJK Ideograph */ + [0x538d, 0x538d], /* CJK Ideograph */ + [0x538e, 0x538e], /* CJK Ideograph */ + [0x538f, 0x538f], /* CJK Ideograph */ + [0x5390, 0x5390], /* CJK Ideograph */ + [0x5391, 0x5391], /* CJK Ideograph */ + [0x5392, 0x5392], /* CJK Ideograph */ + [0x5393, 0x5393], /* CJK Ideograph */ + [0x5394, 0x5394], /* CJK Ideograph */ + [0x5395, 0x5395], /* CJK Ideograph */ + [0x5396, 0x5396], /* CJK Ideograph */ + [0x5397, 0x5397], /* CJK Ideograph */ + [0x5398, 0x5398], /* CJK Ideograph */ + [0x5399, 0x5399], /* CJK Ideograph */ + [0x539a, 0x539a], /* CJK Ideograph */ + [0x539b, 0x539b], /* CJK Ideograph */ + [0x539c, 0x539c], /* CJK Ideograph */ + [0x539d, 0x539d], /* CJK Ideograph */ + [0x539e, 0x539e], /* CJK Ideograph */ + [0x539f, 0x539f], /* CJK Ideograph */ + [0x53a0, 0x53a0], /* CJK Ideograph */ + [0x53a1, 0x53a1], /* CJK Ideograph */ + [0x53a2, 0x53a2], /* CJK Ideograph */ + [0x53a3, 0x53a3], /* CJK Ideograph */ + [0x53a4, 0x53a4], /* CJK Ideograph */ + [0x53a5, 0x53a5], /* CJK Ideograph */ + [0x53a6, 0x53a6], /* CJK Ideograph */ + [0x53a7, 0x53a7], /* CJK Ideograph */ + [0x53a8, 0x53a8], /* CJK Ideograph */ + [0x53a9, 0x53a9], /* CJK Ideograph */ + [0x53aa, 0x53aa], /* CJK Ideograph */ + [0x53ab, 0x53ab], /* CJK Ideograph */ + [0x53ac, 0x53ac], /* CJK Ideograph */ + [0x53ad, 0x53ad], /* CJK Ideograph */ + [0x53ae, 0x53ae], /* CJK Ideograph */ + [0x53af, 0x53af], /* CJK Ideograph */ + [0x53b0, 0x53b0], /* CJK Ideograph */ + [0x53b1, 0x53b1], /* CJK Ideograph */ + [0x53b2, 0x53b2], /* CJK Ideograph */ + [0x53b3, 0x53b3], /* CJK Ideograph */ + [0x53b4, 0x53b4], /* CJK Ideograph */ + [0x53b5, 0x53b5], /* CJK Ideograph */ + [0x53b6, 0x53b6], /* CJK Ideograph */ + [0x53b7, 0x53b7], /* CJK Ideograph */ + [0x53b8, 0x53b8], /* CJK Ideograph */ + [0x53b9, 0x53b9], /* CJK Ideograph */ + [0x53ba, 0x53ba], /* CJK Ideograph */ + [0x53bb, 0x53bb], /* CJK Ideograph */ + [0x53bc, 0x53bc], /* CJK Ideograph */ + [0x53bd, 0x53bd], /* CJK Ideograph */ + [0x53be, 0x53be], /* CJK Ideograph */ + [0x53bf, 0x53bf], /* CJK Ideograph */ + [0x53c0, 0x53c0], /* CJK Ideograph */ + [0x53c1, 0x53c1], /* CJK Ideograph */ + [0x53c2, 0x53c2], /* CJK Ideograph */ + [0x53c3, 0x53c3], /* CJK Ideograph */ + [0x53c4, 0x53c4], /* CJK Ideograph */ + [0x53c5, 0x53c5], /* CJK Ideograph */ + [0x53c6, 0x53c6], /* CJK Ideograph */ + [0x53c7, 0x53c7], /* CJK Ideograph */ + [0x53c8, 0x53c8], /* CJK Ideograph */ + [0x53c9, 0x53c9], /* CJK Ideograph */ + [0x53ca, 0x53ca], /* CJK Ideograph */ + [0x53cb, 0x53cb], /* CJK Ideograph */ + [0x53cc, 0x53cc], /* CJK Ideograph */ + [0x53cd, 0x53cd], /* CJK Ideograph */ + [0x53ce, 0x53ce], /* CJK Ideograph */ + [0x53cf, 0x53cf], /* CJK Ideograph */ + [0x53d0, 0x53d0], /* CJK Ideograph */ + [0x53d1, 0x53d1], /* CJK Ideograph */ + [0x53d2, 0x53d2], /* CJK Ideograph */ + [0x53d3, 0x53d3], /* CJK Ideograph */ + [0x53d4, 0x53d4], /* CJK Ideograph */ + [0x53d5, 0x53d5], /* CJK Ideograph */ + [0x53d6, 0x53d6], /* CJK Ideograph */ + [0x53d7, 0x53d7], /* CJK Ideograph */ + [0x53d8, 0x53d8], /* CJK Ideograph */ + [0x53d9, 0x53d9], /* CJK Ideograph */ + [0x53da, 0x53da], /* CJK Ideograph */ + [0x53db, 0x53db], /* CJK Ideograph */ + [0x53dc, 0x53dc], /* CJK Ideograph */ + [0x53dd, 0x53dd], /* CJK Ideograph */ + [0x53de, 0x53de], /* CJK Ideograph */ + [0x53df, 0x53df], /* CJK Ideograph */ + [0x53e0, 0x53e0], /* CJK Ideograph */ + [0x53e1, 0x53e1], /* CJK Ideograph */ + [0x53e2, 0x53e2], /* CJK Ideograph */ + [0x53e3, 0x53e3], /* CJK Ideograph */ + [0x53e4, 0x53e4], /* CJK Ideograph */ + [0x53e5, 0x53e5], /* CJK Ideograph */ + [0x53e6, 0x53e6], /* CJK Ideograph */ + [0x53e7, 0x53e7], /* CJK Ideograph */ + [0x53e8, 0x53e8], /* CJK Ideograph */ + [0x53e9, 0x53e9], /* CJK Ideograph */ + [0x53ea, 0x53ea], /* CJK Ideograph */ + [0x53eb, 0x53eb], /* CJK Ideograph */ + [0x53ec, 0x53ec], /* CJK Ideograph */ + [0x53ed, 0x53ed], /* CJK Ideograph */ + [0x53ee, 0x53ee], /* CJK Ideograph */ + [0x53ef, 0x53ef], /* CJK Ideograph */ + [0x53f0, 0x53f0], /* CJK Ideograph */ + [0x53f1, 0x53f1], /* CJK Ideograph */ + [0x53f2, 0x53f2], /* CJK Ideograph */ + [0x53f3, 0x53f3], /* CJK Ideograph */ + [0x53f4, 0x53f4], /* CJK Ideograph */ + [0x53f5, 0x53f5], /* CJK Ideograph */ + [0x53f6, 0x53f6], /* CJK Ideograph */ + [0x53f7, 0x53f7], /* CJK Ideograph */ + [0x53f8, 0x53f8], /* CJK Ideograph */ + [0x53f9, 0x53f9], /* CJK Ideograph */ + [0x53fa, 0x53fa], /* CJK Ideograph */ + [0x53fb, 0x53fb], /* CJK Ideograph */ + [0x53fc, 0x53fc], /* CJK Ideograph */ + [0x53fd, 0x53fd], /* CJK Ideograph */ + [0x53fe, 0x53fe], /* CJK Ideograph */ + [0x53ff, 0x53ff], /* CJK Ideograph */ + [0x5400, 0x5400], /* CJK Ideograph */ + [0x5401, 0x5401], /* CJK Ideograph */ + [0x5402, 0x5402], /* CJK Ideograph */ + [0x5403, 0x5403], /* CJK Ideograph */ + [0x5404, 0x5404], /* CJK Ideograph */ + [0x5405, 0x5405], /* CJK Ideograph */ + [0x5406, 0x5406], /* CJK Ideograph */ + [0x5407, 0x5407], /* CJK Ideograph */ + [0x5408, 0x5408], /* CJK Ideograph */ + [0x5409, 0x5409], /* CJK Ideograph */ + [0x540a, 0x540a], /* CJK Ideograph */ + [0x540b, 0x540b], /* CJK Ideograph */ + [0x540c, 0x540c], /* CJK Ideograph */ + [0x540d, 0x540d], /* CJK Ideograph */ + [0x540e, 0x540e], /* CJK Ideograph */ + [0x540f, 0x540f], /* CJK Ideograph */ + [0x5410, 0x5410], /* CJK Ideograph */ + [0x5411, 0x5411], /* CJK Ideograph */ + [0x5412, 0x5412], /* CJK Ideograph */ + [0x5413, 0x5413], /* CJK Ideograph */ + [0x5414, 0x5414], /* CJK Ideograph */ + [0x5415, 0x5415], /* CJK Ideograph */ + [0x5416, 0x5416], /* CJK Ideograph */ + [0x5417, 0x5417], /* CJK Ideograph */ + [0x5418, 0x5418], /* CJK Ideograph */ + [0x5419, 0x5419], /* CJK Ideograph */ + [0x541a, 0x541a], /* CJK Ideograph */ + [0x541b, 0x541b], /* CJK Ideograph */ + [0x541c, 0x541c], /* CJK Ideograph */ + [0x541d, 0x541d], /* CJK Ideograph */ + [0x541e, 0x541e], /* CJK Ideograph */ + [0x541f, 0x541f], /* CJK Ideograph */ + [0x5420, 0x5420], /* CJK Ideograph */ + [0x5421, 0x5421], /* CJK Ideograph */ + [0x5422, 0x5422], /* CJK Ideograph */ + [0x5423, 0x5423], /* CJK Ideograph */ + [0x5424, 0x5424], /* CJK Ideograph */ + [0x5425, 0x5425], /* CJK Ideograph */ + [0x5426, 0x5426], /* CJK Ideograph */ + [0x5427, 0x5427], /* CJK Ideograph */ + [0x5428, 0x5428], /* CJK Ideograph */ + [0x5429, 0x5429], /* CJK Ideograph */ + [0x542a, 0x542a], /* CJK Ideograph */ + [0x542b, 0x542b], /* CJK Ideograph */ + [0x542c, 0x542c], /* CJK Ideograph */ + [0x542d, 0x542d], /* CJK Ideograph */ + [0x542e, 0x542e], /* CJK Ideograph */ + [0x542f, 0x542f], /* CJK Ideograph */ + [0x5430, 0x5430], /* CJK Ideograph */ + [0x5431, 0x5431], /* CJK Ideograph */ + [0x5432, 0x5432], /* CJK Ideograph */ + [0x5433, 0x5433], /* CJK Ideograph */ + [0x5434, 0x5434], /* CJK Ideograph */ + [0x5435, 0x5435], /* CJK Ideograph */ + [0x5436, 0x5436], /* CJK Ideograph */ + [0x5437, 0x5437], /* CJK Ideograph */ + [0x5438, 0x5438], /* CJK Ideograph */ + [0x5439, 0x5439], /* CJK Ideograph */ + [0x543a, 0x543a], /* CJK Ideograph */ + [0x543b, 0x543b], /* CJK Ideograph */ + [0x543c, 0x543c], /* CJK Ideograph */ + [0x543d, 0x543d], /* CJK Ideograph */ + [0x543e, 0x543e], /* CJK Ideograph */ + [0x543f, 0x543f], /* CJK Ideograph */ + [0x5440, 0x5440], /* CJK Ideograph */ + [0x5441, 0x5441], /* CJK Ideograph */ + [0x5442, 0x5442], /* CJK Ideograph */ + [0x5443, 0x5443], /* CJK Ideograph */ + [0x5444, 0x5444], /* CJK Ideograph */ + [0x5445, 0x5445], /* CJK Ideograph */ + [0x5446, 0x5446], /* CJK Ideograph */ + [0x5447, 0x5447], /* CJK Ideograph */ + [0x5448, 0x5448], /* CJK Ideograph */ + [0x5449, 0x5449], /* CJK Ideograph */ + [0x544a, 0x544a], /* CJK Ideograph */ + [0x544b, 0x544b], /* CJK Ideograph */ + [0x544c, 0x544c], /* CJK Ideograph */ + [0x544d, 0x544d], /* CJK Ideograph */ + [0x544e, 0x544e], /* CJK Ideograph */ + [0x544f, 0x544f], /* CJK Ideograph */ + [0x5450, 0x5450], /* CJK Ideograph */ + [0x5451, 0x5451], /* CJK Ideograph */ + [0x5452, 0x5452], /* CJK Ideograph */ + [0x5453, 0x5453], /* CJK Ideograph */ + [0x5454, 0x5454], /* CJK Ideograph */ + [0x5455, 0x5455], /* CJK Ideograph */ + [0x5456, 0x5456], /* CJK Ideograph */ + [0x5457, 0x5457], /* CJK Ideograph */ + [0x5458, 0x5458], /* CJK Ideograph */ + [0x5459, 0x5459], /* CJK Ideograph */ + [0x545a, 0x545a], /* CJK Ideograph */ + [0x545b, 0x545b], /* CJK Ideograph */ + [0x545c, 0x545c], /* CJK Ideograph */ + [0x545d, 0x545d], /* CJK Ideograph */ + [0x545e, 0x545e], /* CJK Ideograph */ + [0x545f, 0x545f], /* CJK Ideograph */ + [0x5460, 0x5460], /* CJK Ideograph */ + [0x5461, 0x5461], /* CJK Ideograph */ + [0x5462, 0x5462], /* CJK Ideograph */ + [0x5463, 0x5463], /* CJK Ideograph */ + [0x5464, 0x5464], /* CJK Ideograph */ + [0x5465, 0x5465], /* CJK Ideograph */ + [0x5466, 0x5466], /* CJK Ideograph */ + [0x5467, 0x5467], /* CJK Ideograph */ + [0x5468, 0x5468], /* CJK Ideograph */ + [0x5469, 0x5469], /* CJK Ideograph */ + [0x546a, 0x546a], /* CJK Ideograph */ + [0x546b, 0x546b], /* CJK Ideograph */ + [0x546c, 0x546c], /* CJK Ideograph */ + [0x546d, 0x546d], /* CJK Ideograph */ + [0x546e, 0x546e], /* CJK Ideograph */ + [0x546f, 0x546f], /* CJK Ideograph */ + [0x5470, 0x5470], /* CJK Ideograph */ + [0x5471, 0x5471], /* CJK Ideograph */ + [0x5472, 0x5472], /* CJK Ideograph */ + [0x5473, 0x5473], /* CJK Ideograph */ + [0x5474, 0x5474], /* CJK Ideograph */ + [0x5475, 0x5475], /* CJK Ideograph */ + [0x5476, 0x5476], /* CJK Ideograph */ + [0x5477, 0x5477], /* CJK Ideograph */ + [0x5478, 0x5478], /* CJK Ideograph */ + [0x5479, 0x5479], /* CJK Ideograph */ + [0x547a, 0x547a], /* CJK Ideograph */ + [0x547b, 0x547b], /* CJK Ideograph */ + [0x547c, 0x547c], /* CJK Ideograph */ + [0x547d, 0x547d], /* CJK Ideograph */ + [0x547e, 0x547e], /* CJK Ideograph */ + [0x547f, 0x547f], /* CJK Ideograph */ + [0x5480, 0x5480], /* CJK Ideograph */ + [0x5481, 0x5481], /* CJK Ideograph */ + [0x5482, 0x5482], /* CJK Ideograph */ + [0x5483, 0x5483], /* CJK Ideograph */ + [0x5484, 0x5484], /* CJK Ideograph */ + [0x5485, 0x5485], /* CJK Ideograph */ + [0x5486, 0x5486], /* CJK Ideograph */ + [0x5487, 0x5487], /* CJK Ideograph */ + [0x5488, 0x5488], /* CJK Ideograph */ + [0x5489, 0x5489], /* CJK Ideograph */ + [0x548a, 0x548a], /* CJK Ideograph */ + [0x548b, 0x548b], /* CJK Ideograph */ + [0x548c, 0x548c], /* CJK Ideograph */ + [0x548d, 0x548d], /* CJK Ideograph */ + [0x548e, 0x548e], /* CJK Ideograph */ + [0x548f, 0x548f], /* CJK Ideograph */ + [0x5490, 0x5490], /* CJK Ideograph */ + [0x5491, 0x5491], /* CJK Ideograph */ + [0x5492, 0x5492], /* CJK Ideograph */ + [0x5493, 0x5493], /* CJK Ideograph */ + [0x5494, 0x5494], /* CJK Ideograph */ + [0x5495, 0x5495], /* CJK Ideograph */ + [0x5496, 0x5496], /* CJK Ideograph */ + [0x5497, 0x5497], /* CJK Ideograph */ + [0x5498, 0x5498], /* CJK Ideograph */ + [0x5499, 0x5499], /* CJK Ideograph */ + [0x549a, 0x549a], /* CJK Ideograph */ + [0x549b, 0x549b], /* CJK Ideograph */ + [0x549c, 0x549c], /* CJK Ideograph */ + [0x549d, 0x549d], /* CJK Ideograph */ + [0x549e, 0x549e], /* CJK Ideograph */ + [0x549f, 0x549f], /* CJK Ideograph */ + [0x54a0, 0x54a0], /* CJK Ideograph */ + [0x54a1, 0x54a1], /* CJK Ideograph */ + [0x54a2, 0x54a2], /* CJK Ideograph */ + [0x54a3, 0x54a3], /* CJK Ideograph */ + [0x54a4, 0x54a4], /* CJK Ideograph */ + [0x54a5, 0x54a5], /* CJK Ideograph */ + [0x54a6, 0x54a6], /* CJK Ideograph */ + [0x54a7, 0x54a7], /* CJK Ideograph */ + [0x54a8, 0x54a8], /* CJK Ideograph */ + [0x54a9, 0x54a9], /* CJK Ideograph */ + [0x54aa, 0x54aa], /* CJK Ideograph */ + [0x54ab, 0x54ab], /* CJK Ideograph */ + [0x54ac, 0x54ac], /* CJK Ideograph */ + [0x54ad, 0x54ad], /* CJK Ideograph */ + [0x54ae, 0x54ae], /* CJK Ideograph */ + [0x54af, 0x54af], /* CJK Ideograph */ + [0x54b0, 0x54b0], /* CJK Ideograph */ + [0x54b1, 0x54b1], /* CJK Ideograph */ + [0x54b2, 0x54b2], /* CJK Ideograph */ + [0x54b3, 0x54b3], /* CJK Ideograph */ + [0x54b4, 0x54b4], /* CJK Ideograph */ + [0x54b5, 0x54b5], /* CJK Ideograph */ + [0x54b6, 0x54b6], /* CJK Ideograph */ + [0x54b7, 0x54b7], /* CJK Ideograph */ + [0x54b8, 0x54b8], /* CJK Ideograph */ + [0x54b9, 0x54b9], /* CJK Ideograph */ + [0x54ba, 0x54ba], /* CJK Ideograph */ + [0x54bb, 0x54bb], /* CJK Ideograph */ + [0x54bc, 0x54bc], /* CJK Ideograph */ + [0x54bd, 0x54bd], /* CJK Ideograph */ + [0x54be, 0x54be], /* CJK Ideograph */ + [0x54bf, 0x54bf], /* CJK Ideograph */ + [0x54c0, 0x54c0], /* CJK Ideograph */ + [0x54c1, 0x54c1], /* CJK Ideograph */ + [0x54c2, 0x54c2], /* CJK Ideograph */ + [0x54c3, 0x54c3], /* CJK Ideograph */ + [0x54c4, 0x54c4], /* CJK Ideograph */ + [0x54c5, 0x54c5], /* CJK Ideograph */ + [0x54c6, 0x54c6], /* CJK Ideograph */ + [0x54c7, 0x54c7], /* CJK Ideograph */ + [0x54c8, 0x54c8], /* CJK Ideograph */ + [0x54c9, 0x54c9], /* CJK Ideograph */ + [0x54ca, 0x54ca], /* CJK Ideograph */ + [0x54cb, 0x54cb], /* CJK Ideograph */ + [0x54cc, 0x54cc], /* CJK Ideograph */ + [0x54cd, 0x54cd], /* CJK Ideograph */ + [0x54ce, 0x54ce], /* CJK Ideograph */ + [0x54cf, 0x54cf], /* CJK Ideograph */ + [0x54d0, 0x54d0], /* CJK Ideograph */ + [0x54d1, 0x54d1], /* CJK Ideograph */ + [0x54d2, 0x54d2], /* CJK Ideograph */ + [0x54d3, 0x54d3], /* CJK Ideograph */ + [0x54d4, 0x54d4], /* CJK Ideograph */ + [0x54d5, 0x54d5], /* CJK Ideograph */ + [0x54d6, 0x54d6], /* CJK Ideograph */ + [0x54d7, 0x54d7], /* CJK Ideograph */ + [0x54d8, 0x54d8], /* CJK Ideograph */ + [0x54d9, 0x54d9], /* CJK Ideograph */ + [0x54da, 0x54da], /* CJK Ideograph */ + [0x54db, 0x54db], /* CJK Ideograph */ + [0x54dc, 0x54dc], /* CJK Ideograph */ + [0x54dd, 0x54dd], /* CJK Ideograph */ + [0x54de, 0x54de], /* CJK Ideograph */ + [0x54df, 0x54df], /* CJK Ideograph */ + [0x54e0, 0x54e0], /* CJK Ideograph */ + [0x54e1, 0x54e1], /* CJK Ideograph */ + [0x54e2, 0x54e2], /* CJK Ideograph */ + [0x54e3, 0x54e3], /* CJK Ideograph */ + [0x54e4, 0x54e4], /* CJK Ideograph */ + [0x54e5, 0x54e5], /* CJK Ideograph */ + [0x54e6, 0x54e6], /* CJK Ideograph */ + [0x54e7, 0x54e7], /* CJK Ideograph */ + [0x54e8, 0x54e8], /* CJK Ideograph */ + [0x54e9, 0x54e9], /* CJK Ideograph */ + [0x54ea, 0x54ea], /* CJK Ideograph */ + [0x54eb, 0x54eb], /* CJK Ideograph */ + [0x54ec, 0x54ec], /* CJK Ideograph */ + [0x54ed, 0x54ed], /* CJK Ideograph */ + [0x54ee, 0x54ee], /* CJK Ideograph */ + [0x54ef, 0x54ef], /* CJK Ideograph */ + [0x54f0, 0x54f0], /* CJK Ideograph */ + [0x54f1, 0x54f1], /* CJK Ideograph */ + [0x54f2, 0x54f2], /* CJK Ideograph */ + [0x54f3, 0x54f3], /* CJK Ideograph */ + [0x54f4, 0x54f4], /* CJK Ideograph */ + [0x54f5, 0x54f5], /* CJK Ideograph */ + [0x54f6, 0x54f6], /* CJK Ideograph */ + [0x54f7, 0x54f7], /* CJK Ideograph */ + [0x54f8, 0x54f8], /* CJK Ideograph */ + [0x54f9, 0x54f9], /* CJK Ideograph */ + [0x54fa, 0x54fa], /* CJK Ideograph */ + [0x54fb, 0x54fb], /* CJK Ideograph */ + [0x54fc, 0x54fc], /* CJK Ideograph */ + [0x54fd, 0x54fd], /* CJK Ideograph */ + [0x54fe, 0x54fe], /* CJK Ideograph */ + [0x54ff, 0x54ff], /* CJK Ideograph */ + [0x5500, 0x5500], /* CJK Ideograph */ + [0x5501, 0x5501], /* CJK Ideograph */ + [0x5502, 0x5502], /* CJK Ideograph */ + [0x5503, 0x5503], /* CJK Ideograph */ + [0x5504, 0x5504], /* CJK Ideograph */ + [0x5505, 0x5505], /* CJK Ideograph */ + [0x5506, 0x5506], /* CJK Ideograph */ + [0x5507, 0x5507], /* CJK Ideograph */ + [0x5508, 0x5508], /* CJK Ideograph */ + [0x5509, 0x5509], /* CJK Ideograph */ + [0x550a, 0x550a], /* CJK Ideograph */ + [0x550b, 0x550b], /* CJK Ideograph */ + [0x550c, 0x550c], /* CJK Ideograph */ + [0x550d, 0x550d], /* CJK Ideograph */ + [0x550e, 0x550e], /* CJK Ideograph */ + [0x550f, 0x550f], /* CJK Ideograph */ + [0x5510, 0x5510], /* CJK Ideograph */ + [0x5511, 0x5511], /* CJK Ideograph */ + [0x5512, 0x5512], /* CJK Ideograph */ + [0x5513, 0x5513], /* CJK Ideograph */ + [0x5514, 0x5514], /* CJK Ideograph */ + [0x5515, 0x5515], /* CJK Ideograph */ + [0x5516, 0x5516], /* CJK Ideograph */ + [0x5517, 0x5517], /* CJK Ideograph */ + [0x5518, 0x5518], /* CJK Ideograph */ + [0x5519, 0x5519], /* CJK Ideograph */ + [0x551a, 0x551a], /* CJK Ideograph */ + [0x551b, 0x551b], /* CJK Ideograph */ + [0x551c, 0x551c], /* CJK Ideograph */ + [0x551d, 0x551d], /* CJK Ideograph */ + [0x551e, 0x551e], /* CJK Ideograph */ + [0x551f, 0x551f], /* CJK Ideograph */ + [0x5520, 0x5520], /* CJK Ideograph */ + [0x5521, 0x5521], /* CJK Ideograph */ + [0x5522, 0x5522], /* CJK Ideograph */ + [0x5523, 0x5523], /* CJK Ideograph */ + [0x5524, 0x5524], /* CJK Ideograph */ + [0x5525, 0x5525], /* CJK Ideograph */ + [0x5526, 0x5526], /* CJK Ideograph */ + [0x5527, 0x5527], /* CJK Ideograph */ + [0x5528, 0x5528], /* CJK Ideograph */ + [0x5529, 0x5529], /* CJK Ideograph */ + [0x552a, 0x552a], /* CJK Ideograph */ + [0x552b, 0x552b], /* CJK Ideograph */ + [0x552c, 0x552c], /* CJK Ideograph */ + [0x552d, 0x552d], /* CJK Ideograph */ + [0x552e, 0x552e], /* CJK Ideograph */ + [0x552f, 0x552f], /* CJK Ideograph */ + [0x5530, 0x5530], /* CJK Ideograph */ + [0x5531, 0x5531], /* CJK Ideograph */ + [0x5532, 0x5532], /* CJK Ideograph */ + [0x5533, 0x5533], /* CJK Ideograph */ + [0x5534, 0x5534], /* CJK Ideograph */ + [0x5535, 0x5535], /* CJK Ideograph */ + [0x5536, 0x5536], /* CJK Ideograph */ + [0x5537, 0x5537], /* CJK Ideograph */ + [0x5538, 0x5538], /* CJK Ideograph */ + [0x5539, 0x5539], /* CJK Ideograph */ + [0x553a, 0x553a], /* CJK Ideograph */ + [0x553b, 0x553b], /* CJK Ideograph */ + [0x553c, 0x553c], /* CJK Ideograph */ + [0x553d, 0x553d], /* CJK Ideograph */ + [0x553e, 0x553e], /* CJK Ideograph */ + [0x553f, 0x553f], /* CJK Ideograph */ + [0x5540, 0x5540], /* CJK Ideograph */ + [0x5541, 0x5541], /* CJK Ideograph */ + [0x5542, 0x5542], /* CJK Ideograph */ + [0x5543, 0x5543], /* CJK Ideograph */ + [0x5544, 0x5544], /* CJK Ideograph */ + [0x5545, 0x5545], /* CJK Ideograph */ + [0x5546, 0x5546], /* CJK Ideograph */ + [0x5547, 0x5547], /* CJK Ideograph */ + [0x5548, 0x5548], /* CJK Ideograph */ + [0x5549, 0x5549], /* CJK Ideograph */ + [0x554a, 0x554a], /* CJK Ideograph */ + [0x554b, 0x554b], /* CJK Ideograph */ + [0x554c, 0x554c], /* CJK Ideograph */ + [0x554d, 0x554d], /* CJK Ideograph */ + [0x554e, 0x554e], /* CJK Ideograph */ + [0x554f, 0x554f], /* CJK Ideograph */ + [0x5550, 0x5550], /* CJK Ideograph */ + [0x5551, 0x5551], /* CJK Ideograph */ + [0x5552, 0x5552], /* CJK Ideograph */ + [0x5553, 0x5553], /* CJK Ideograph */ + [0x5554, 0x5554], /* CJK Ideograph */ + [0x5555, 0x5555], /* CJK Ideograph */ + [0x5556, 0x5556], /* CJK Ideograph */ + [0x5557, 0x5557], /* CJK Ideograph */ + [0x5558, 0x5558], /* CJK Ideograph */ + [0x5559, 0x5559], /* CJK Ideograph */ + [0x555a, 0x555a], /* CJK Ideograph */ + [0x555b, 0x555b], /* CJK Ideograph */ + [0x555c, 0x555c], /* CJK Ideograph */ + [0x555d, 0x555d], /* CJK Ideograph */ + [0x555e, 0x555e], /* CJK Ideograph */ + [0x555f, 0x555f], /* CJK Ideograph */ + [0x5560, 0x5560], /* CJK Ideograph */ + [0x5561, 0x5561], /* CJK Ideograph */ + [0x5562, 0x5562], /* CJK Ideograph */ + [0x5563, 0x5563], /* CJK Ideograph */ + [0x5564, 0x5564], /* CJK Ideograph */ + [0x5565, 0x5565], /* CJK Ideograph */ + [0x5566, 0x5566], /* CJK Ideograph */ + [0x5567, 0x5567], /* CJK Ideograph */ + [0x5568, 0x5568], /* CJK Ideograph */ + [0x5569, 0x5569], /* CJK Ideograph */ + [0x556a, 0x556a], /* CJK Ideograph */ + [0x556b, 0x556b], /* CJK Ideograph */ + [0x556c, 0x556c], /* CJK Ideograph */ + [0x556d, 0x556d], /* CJK Ideograph */ + [0x556e, 0x556e], /* CJK Ideograph */ + [0x556f, 0x556f], /* CJK Ideograph */ + [0x5570, 0x5570], /* CJK Ideograph */ + [0x5571, 0x5571], /* CJK Ideograph */ + [0x5572, 0x5572], /* CJK Ideograph */ + [0x5573, 0x5573], /* CJK Ideograph */ + [0x5574, 0x5574], /* CJK Ideograph */ + [0x5575, 0x5575], /* CJK Ideograph */ + [0x5576, 0x5576], /* CJK Ideograph */ + [0x5577, 0x5577], /* CJK Ideograph */ + [0x5578, 0x5578], /* CJK Ideograph */ + [0x5579, 0x5579], /* CJK Ideograph */ + [0x557a, 0x557a], /* CJK Ideograph */ + [0x557b, 0x557b], /* CJK Ideograph */ + [0x557c, 0x557c], /* CJK Ideograph */ + [0x557d, 0x557d], /* CJK Ideograph */ + [0x557e, 0x557e], /* CJK Ideograph */ + [0x557f, 0x557f], /* CJK Ideograph */ + [0x5580, 0x5580], /* CJK Ideograph */ + [0x5581, 0x5581], /* CJK Ideograph */ + [0x5582, 0x5582], /* CJK Ideograph */ + [0x5583, 0x5583], /* CJK Ideograph */ + [0x5584, 0x5584], /* CJK Ideograph */ + [0x5585, 0x5585], /* CJK Ideograph */ + [0x5586, 0x5586], /* CJK Ideograph */ + [0x5587, 0x5587], /* CJK Ideograph */ + [0x5588, 0x5588], /* CJK Ideograph */ + [0x5589, 0x5589], /* CJK Ideograph */ + [0x558a, 0x558a], /* CJK Ideograph */ + [0x558b, 0x558b], /* CJK Ideograph */ + [0x558c, 0x558c], /* CJK Ideograph */ + [0x558d, 0x558d], /* CJK Ideograph */ + [0x558e, 0x558e], /* CJK Ideograph */ + [0x558f, 0x558f], /* CJK Ideograph */ + [0x5590, 0x5590], /* CJK Ideograph */ + [0x5591, 0x5591], /* CJK Ideograph */ + [0x5592, 0x5592], /* CJK Ideograph */ + [0x5593, 0x5593], /* CJK Ideograph */ + [0x5594, 0x5594], /* CJK Ideograph */ + [0x5595, 0x5595], /* CJK Ideograph */ + [0x5596, 0x5596], /* CJK Ideograph */ + [0x5597, 0x5597], /* CJK Ideograph */ + [0x5598, 0x5598], /* CJK Ideograph */ + [0x5599, 0x5599], /* CJK Ideograph */ + [0x559a, 0x559a], /* CJK Ideograph */ + [0x559b, 0x559b], /* CJK Ideograph */ + [0x559c, 0x559c], /* CJK Ideograph */ + [0x559d, 0x559d], /* CJK Ideograph */ + [0x559e, 0x559e], /* CJK Ideograph */ + [0x559f, 0x559f], /* CJK Ideograph */ + [0x55a0, 0x55a0], /* CJK Ideograph */ + [0x55a1, 0x55a1], /* CJK Ideograph */ + [0x55a2, 0x55a2], /* CJK Ideograph */ + [0x55a3, 0x55a3], /* CJK Ideograph */ + [0x55a4, 0x55a4], /* CJK Ideograph */ + [0x55a5, 0x55a5], /* CJK Ideograph */ + [0x55a6, 0x55a6], /* CJK Ideograph */ + [0x55a7, 0x55a7], /* CJK Ideograph */ + [0x55a8, 0x55a8], /* CJK Ideograph */ + [0x55a9, 0x55a9], /* CJK Ideograph */ + [0x55aa, 0x55aa], /* CJK Ideograph */ + [0x55ab, 0x55ab], /* CJK Ideograph */ + [0x55ac, 0x55ac], /* CJK Ideograph */ + [0x55ad, 0x55ad], /* CJK Ideograph */ + [0x55ae, 0x55ae], /* CJK Ideograph */ + [0x55af, 0x55af], /* CJK Ideograph */ + [0x55b0, 0x55b0], /* CJK Ideograph */ + [0x55b1, 0x55b1], /* CJK Ideograph */ + [0x55b2, 0x55b2], /* CJK Ideograph */ + [0x55b3, 0x55b3], /* CJK Ideograph */ + [0x55b4, 0x55b4], /* CJK Ideograph */ + [0x55b5, 0x55b5], /* CJK Ideograph */ + [0x55b6, 0x55b6], /* CJK Ideograph */ + [0x55b7, 0x55b7], /* CJK Ideograph */ + [0x55b8, 0x55b8], /* CJK Ideograph */ + [0x55b9, 0x55b9], /* CJK Ideograph */ + [0x55ba, 0x55ba], /* CJK Ideograph */ + [0x55bb, 0x55bb], /* CJK Ideograph */ + [0x55bc, 0x55bc], /* CJK Ideograph */ + [0x55bd, 0x55bd], /* CJK Ideograph */ + [0x55be, 0x55be], /* CJK Ideograph */ + [0x55bf, 0x55bf], /* CJK Ideograph */ + [0x55c0, 0x55c0], /* CJK Ideograph */ + [0x55c1, 0x55c1], /* CJK Ideograph */ + [0x55c2, 0x55c2], /* CJK Ideograph */ + [0x55c3, 0x55c3], /* CJK Ideograph */ + [0x55c4, 0x55c4], /* CJK Ideograph */ + [0x55c5, 0x55c5], /* CJK Ideograph */ + [0x55c6, 0x55c6], /* CJK Ideograph */ + [0x55c7, 0x55c7], /* CJK Ideograph */ + [0x55c8, 0x55c8], /* CJK Ideograph */ + [0x55c9, 0x55c9], /* CJK Ideograph */ + [0x55ca, 0x55ca], /* CJK Ideograph */ + [0x55cb, 0x55cb], /* CJK Ideograph */ + [0x55cc, 0x55cc], /* CJK Ideograph */ + [0x55cd, 0x55cd], /* CJK Ideograph */ + [0x55ce, 0x55ce], /* CJK Ideograph */ + [0x55cf, 0x55cf], /* CJK Ideograph */ + [0x55d0, 0x55d0], /* CJK Ideograph */ + [0x55d1, 0x55d1], /* CJK Ideograph */ + [0x55d2, 0x55d2], /* CJK Ideograph */ + [0x55d3, 0x55d3], /* CJK Ideograph */ + [0x55d4, 0x55d4], /* CJK Ideograph */ + [0x55d5, 0x55d5], /* CJK Ideograph */ + [0x55d6, 0x55d6], /* CJK Ideograph */ + [0x55d7, 0x55d7], /* CJK Ideograph */ + [0x55d8, 0x55d8], /* CJK Ideograph */ + [0x55d9, 0x55d9], /* CJK Ideograph */ + [0x55da, 0x55da], /* CJK Ideograph */ + [0x55db, 0x55db], /* CJK Ideograph */ + [0x55dc, 0x55dc], /* CJK Ideograph */ + [0x55dd, 0x55dd], /* CJK Ideograph */ + [0x55de, 0x55de], /* CJK Ideograph */ + [0x55df, 0x55df], /* CJK Ideograph */ + [0x55e0, 0x55e0], /* CJK Ideograph */ + [0x55e1, 0x55e1], /* CJK Ideograph */ + [0x55e2, 0x55e2], /* CJK Ideograph */ + [0x55e3, 0x55e3], /* CJK Ideograph */ + [0x55e4, 0x55e4], /* CJK Ideograph */ + [0x55e5, 0x55e5], /* CJK Ideograph */ + [0x55e6, 0x55e6], /* CJK Ideograph */ + [0x55e7, 0x55e7], /* CJK Ideograph */ + [0x55e8, 0x55e8], /* CJK Ideograph */ + [0x55e9, 0x55e9], /* CJK Ideograph */ + [0x55ea, 0x55ea], /* CJK Ideograph */ + [0x55eb, 0x55eb], /* CJK Ideograph */ + [0x55ec, 0x55ec], /* CJK Ideograph */ + [0x55ed, 0x55ed], /* CJK Ideograph */ + [0x55ee, 0x55ee], /* CJK Ideograph */ + [0x55ef, 0x55ef], /* CJK Ideograph */ + [0x55f0, 0x55f0], /* CJK Ideograph */ + [0x55f1, 0x55f1], /* CJK Ideograph */ + [0x55f2, 0x55f2], /* CJK Ideograph */ + [0x55f3, 0x55f3], /* CJK Ideograph */ + [0x55f4, 0x55f4], /* CJK Ideograph */ + [0x55f5, 0x55f5], /* CJK Ideograph */ + [0x55f6, 0x55f6], /* CJK Ideograph */ + [0x55f7, 0x55f7], /* CJK Ideograph */ + [0x55f8, 0x55f8], /* CJK Ideograph */ + [0x55f9, 0x55f9], /* CJK Ideograph */ + [0x55fa, 0x55fa], /* CJK Ideograph */ + [0x55fb, 0x55fb], /* CJK Ideograph */ + [0x55fc, 0x55fc], /* CJK Ideograph */ + [0x55fd, 0x55fd], /* CJK Ideograph */ + [0x55fe, 0x55fe], /* CJK Ideograph */ + [0x55ff, 0x55ff], /* CJK Ideograph */ + [0x5600, 0x5600], /* CJK Ideograph */ + [0x5601, 0x5601], /* CJK Ideograph */ + [0x5602, 0x5602], /* CJK Ideograph */ + [0x5603, 0x5603], /* CJK Ideograph */ + [0x5604, 0x5604], /* CJK Ideograph */ + [0x5605, 0x5605], /* CJK Ideograph */ + [0x5606, 0x5606], /* CJK Ideograph */ + [0x5607, 0x5607], /* CJK Ideograph */ + [0x5608, 0x5608], /* CJK Ideograph */ + [0x5609, 0x5609], /* CJK Ideograph */ + [0x560a, 0x560a], /* CJK Ideograph */ + [0x560b, 0x560b], /* CJK Ideograph */ + [0x560c, 0x560c], /* CJK Ideograph */ + [0x560d, 0x560d], /* CJK Ideograph */ + [0x560e, 0x560e], /* CJK Ideograph */ + [0x560f, 0x560f], /* CJK Ideograph */ + [0x5610, 0x5610], /* CJK Ideograph */ + [0x5611, 0x5611], /* CJK Ideograph */ + [0x5612, 0x5612], /* CJK Ideograph */ + [0x5613, 0x5613], /* CJK Ideograph */ + [0x5614, 0x5614], /* CJK Ideograph */ + [0x5615, 0x5615], /* CJK Ideograph */ + [0x5616, 0x5616], /* CJK Ideograph */ + [0x5617, 0x5617], /* CJK Ideograph */ + [0x5618, 0x5618], /* CJK Ideograph */ + [0x5619, 0x5619], /* CJK Ideograph */ + [0x561a, 0x561a], /* CJK Ideograph */ + [0x561b, 0x561b], /* CJK Ideograph */ + [0x561c, 0x561c], /* CJK Ideograph */ + [0x561d, 0x561d], /* CJK Ideograph */ + [0x561e, 0x561e], /* CJK Ideograph */ + [0x561f, 0x561f], /* CJK Ideograph */ + [0x5620, 0x5620], /* CJK Ideograph */ + [0x5621, 0x5621], /* CJK Ideograph */ + [0x5622, 0x5622], /* CJK Ideograph */ + [0x5623, 0x5623], /* CJK Ideograph */ + [0x5624, 0x5624], /* CJK Ideograph */ + [0x5625, 0x5625], /* CJK Ideograph */ + [0x5626, 0x5626], /* CJK Ideograph */ + [0x5627, 0x5627], /* CJK Ideograph */ + [0x5628, 0x5628], /* CJK Ideograph */ + [0x5629, 0x5629], /* CJK Ideograph */ + [0x562a, 0x562a], /* CJK Ideograph */ + [0x562b, 0x562b], /* CJK Ideograph */ + [0x562c, 0x562c], /* CJK Ideograph */ + [0x562d, 0x562d], /* CJK Ideograph */ + [0x562e, 0x562e], /* CJK Ideograph */ + [0x562f, 0x562f], /* CJK Ideograph */ + [0x5630, 0x5630], /* CJK Ideograph */ + [0x5631, 0x5631], /* CJK Ideograph */ + [0x5632, 0x5632], /* CJK Ideograph */ + [0x5633, 0x5633], /* CJK Ideograph */ + [0x5634, 0x5634], /* CJK Ideograph */ + [0x5635, 0x5635], /* CJK Ideograph */ + [0x5636, 0x5636], /* CJK Ideograph */ + [0x5637, 0x5637], /* CJK Ideograph */ + [0x5638, 0x5638], /* CJK Ideograph */ + [0x5639, 0x5639], /* CJK Ideograph */ + [0x563a, 0x563a], /* CJK Ideograph */ + [0x563b, 0x563b], /* CJK Ideograph */ + [0x563c, 0x563c], /* CJK Ideograph */ + [0x563d, 0x563d], /* CJK Ideograph */ + [0x563e, 0x563e], /* CJK Ideograph */ + [0x563f, 0x563f], /* CJK Ideograph */ + [0x5640, 0x5640], /* CJK Ideograph */ + [0x5641, 0x5641], /* CJK Ideograph */ + [0x5642, 0x5642], /* CJK Ideograph */ + [0x5643, 0x5643], /* CJK Ideograph */ + [0x5644, 0x5644], /* CJK Ideograph */ + [0x5645, 0x5645], /* CJK Ideograph */ + [0x5646, 0x5646], /* CJK Ideograph */ + [0x5647, 0x5647], /* CJK Ideograph */ + [0x5648, 0x5648], /* CJK Ideograph */ + [0x5649, 0x5649], /* CJK Ideograph */ + [0x564a, 0x564a], /* CJK Ideograph */ + [0x564b, 0x564b], /* CJK Ideograph */ + [0x564c, 0x564c], /* CJK Ideograph */ + [0x564d, 0x564d], /* CJK Ideograph */ + [0x564e, 0x564e], /* CJK Ideograph */ + [0x564f, 0x564f], /* CJK Ideograph */ + [0x5650, 0x5650], /* CJK Ideograph */ + [0x5651, 0x5651], /* CJK Ideograph */ + [0x5652, 0x5652], /* CJK Ideograph */ + [0x5653, 0x5653], /* CJK Ideograph */ + [0x5654, 0x5654], /* CJK Ideograph */ + [0x5655, 0x5655], /* CJK Ideograph */ + [0x5656, 0x5656], /* CJK Ideograph */ + [0x5657, 0x5657], /* CJK Ideograph */ + [0x5658, 0x5658], /* CJK Ideograph */ + [0x5659, 0x5659], /* CJK Ideograph */ + [0x565a, 0x565a], /* CJK Ideograph */ + [0x565b, 0x565b], /* CJK Ideograph */ + [0x565c, 0x565c], /* CJK Ideograph */ + [0x565d, 0x565d], /* CJK Ideograph */ + [0x565e, 0x565e], /* CJK Ideograph */ + [0x565f, 0x565f], /* CJK Ideograph */ + [0x5660, 0x5660], /* CJK Ideograph */ + [0x5661, 0x5661], /* CJK Ideograph */ + [0x5662, 0x5662], /* CJK Ideograph */ + [0x5663, 0x5663], /* CJK Ideograph */ + [0x5664, 0x5664], /* CJK Ideograph */ + [0x5665, 0x5665], /* CJK Ideograph */ + [0x5666, 0x5666], /* CJK Ideograph */ + [0x5667, 0x5667], /* CJK Ideograph */ + [0x5668, 0x5668], /* CJK Ideograph */ + [0x5669, 0x5669], /* CJK Ideograph */ + [0x566a, 0x566a], /* CJK Ideograph */ + [0x566b, 0x566b], /* CJK Ideograph */ + [0x566c, 0x566c], /* CJK Ideograph */ + [0x566d, 0x566d], /* CJK Ideograph */ + [0x566e, 0x566e], /* CJK Ideograph */ + [0x566f, 0x566f], /* CJK Ideograph */ + [0x5670, 0x5670], /* CJK Ideograph */ + [0x5671, 0x5671], /* CJK Ideograph */ + [0x5672, 0x5672], /* CJK Ideograph */ + [0x5673, 0x5673], /* CJK Ideograph */ + [0x5674, 0x5674], /* CJK Ideograph */ + [0x5675, 0x5675], /* CJK Ideograph */ + [0x5676, 0x5676], /* CJK Ideograph */ + [0x5677, 0x5677], /* CJK Ideograph */ + [0x5678, 0x5678], /* CJK Ideograph */ + [0x5679, 0x5679], /* CJK Ideograph */ + [0x567a, 0x567a], /* CJK Ideograph */ + [0x567b, 0x567b], /* CJK Ideograph */ + [0x567c, 0x567c], /* CJK Ideograph */ + [0x567d, 0x567d], /* CJK Ideograph */ + [0x567e, 0x567e], /* CJK Ideograph */ + [0x567f, 0x567f], /* CJK Ideograph */ + [0x5680, 0x5680], /* CJK Ideograph */ + [0x5681, 0x5681], /* CJK Ideograph */ + [0x5682, 0x5682], /* CJK Ideograph */ + [0x5683, 0x5683], /* CJK Ideograph */ + [0x5684, 0x5684], /* CJK Ideograph */ + [0x5685, 0x5685], /* CJK Ideograph */ + [0x5686, 0x5686], /* CJK Ideograph */ + [0x5687, 0x5687], /* CJK Ideograph */ + [0x5688, 0x5688], /* CJK Ideograph */ + [0x5689, 0x5689], /* CJK Ideograph */ + [0x568a, 0x568a], /* CJK Ideograph */ + [0x568b, 0x568b], /* CJK Ideograph */ + [0x568c, 0x568c], /* CJK Ideograph */ + [0x568d, 0x568d], /* CJK Ideograph */ + [0x568e, 0x568e], /* CJK Ideograph */ + [0x568f, 0x568f], /* CJK Ideograph */ + [0x5690, 0x5690], /* CJK Ideograph */ + [0x5691, 0x5691], /* CJK Ideograph */ + [0x5692, 0x5692], /* CJK Ideograph */ + [0x5693, 0x5693], /* CJK Ideograph */ + [0x5694, 0x5694], /* CJK Ideograph */ + [0x5695, 0x5695], /* CJK Ideograph */ + [0x5696, 0x5696], /* CJK Ideograph */ + [0x5697, 0x5697], /* CJK Ideograph */ + [0x5698, 0x5698], /* CJK Ideograph */ + [0x5699, 0x5699], /* CJK Ideograph */ + [0x569a, 0x569a], /* CJK Ideograph */ + [0x569b, 0x569b], /* CJK Ideograph */ + [0x569c, 0x569c], /* CJK Ideograph */ + [0x569d, 0x569d], /* CJK Ideograph */ + [0x569e, 0x569e], /* CJK Ideograph */ + [0x569f, 0x569f], /* CJK Ideograph */ + [0x56a0, 0x56a0], /* CJK Ideograph */ + [0x56a1, 0x56a1], /* CJK Ideograph */ + [0x56a2, 0x56a2], /* CJK Ideograph */ + [0x56a3, 0x56a3], /* CJK Ideograph */ + [0x56a4, 0x56a4], /* CJK Ideograph */ + [0x56a5, 0x56a5], /* CJK Ideograph */ + [0x56a6, 0x56a6], /* CJK Ideograph */ + [0x56a7, 0x56a7], /* CJK Ideograph */ + [0x56a8, 0x56a8], /* CJK Ideograph */ + [0x56a9, 0x56a9], /* CJK Ideograph */ + [0x56aa, 0x56aa], /* CJK Ideograph */ + [0x56ab, 0x56ab], /* CJK Ideograph */ + [0x56ac, 0x56ac], /* CJK Ideograph */ + [0x56ad, 0x56ad], /* CJK Ideograph */ + [0x56ae, 0x56ae], /* CJK Ideograph */ + [0x56af, 0x56af], /* CJK Ideograph */ + [0x56b0, 0x56b0], /* CJK Ideograph */ + [0x56b1, 0x56b1], /* CJK Ideograph */ + [0x56b2, 0x56b2], /* CJK Ideograph */ + [0x56b3, 0x56b3], /* CJK Ideograph */ + [0x56b4, 0x56b4], /* CJK Ideograph */ + [0x56b5, 0x56b5], /* CJK Ideograph */ + [0x56b6, 0x56b6], /* CJK Ideograph */ + [0x56b7, 0x56b7], /* CJK Ideograph */ + [0x56b8, 0x56b8], /* CJK Ideograph */ + [0x56b9, 0x56b9], /* CJK Ideograph */ + [0x56ba, 0x56ba], /* CJK Ideograph */ + [0x56bb, 0x56bb], /* CJK Ideograph */ + [0x56bc, 0x56bc], /* CJK Ideograph */ + [0x56bd, 0x56bd], /* CJK Ideograph */ + [0x56be, 0x56be], /* CJK Ideograph */ + [0x56bf, 0x56bf], /* CJK Ideograph */ + [0x56c0, 0x56c0], /* CJK Ideograph */ + [0x56c1, 0x56c1], /* CJK Ideograph */ + [0x56c2, 0x56c2], /* CJK Ideograph */ + [0x56c3, 0x56c3], /* CJK Ideograph */ + [0x56c4, 0x56c4], /* CJK Ideograph */ + [0x56c5, 0x56c5], /* CJK Ideograph */ + [0x56c6, 0x56c6], /* CJK Ideograph */ + [0x56c7, 0x56c7], /* CJK Ideograph */ + [0x56c8, 0x56c8], /* CJK Ideograph */ + [0x56c9, 0x56c9], /* CJK Ideograph */ + [0x56ca, 0x56ca], /* CJK Ideograph */ + [0x56cb, 0x56cb], /* CJK Ideograph */ + [0x56cc, 0x56cc], /* CJK Ideograph */ + [0x56cd, 0x56cd], /* CJK Ideograph */ + [0x56ce, 0x56ce], /* CJK Ideograph */ + [0x56cf, 0x56cf], /* CJK Ideograph */ + [0x56d0, 0x56d0], /* CJK Ideograph */ + [0x56d1, 0x56d1], /* CJK Ideograph */ + [0x56d2, 0x56d2], /* CJK Ideograph */ + [0x56d3, 0x56d3], /* CJK Ideograph */ + [0x56d4, 0x56d4], /* CJK Ideograph */ + [0x56d5, 0x56d5], /* CJK Ideograph */ + [0x56d6, 0x56d6], /* CJK Ideograph */ + [0x56d7, 0x56d7], /* CJK Ideograph */ + [0x56d8, 0x56d8], /* CJK Ideograph */ + [0x56d9, 0x56d9], /* CJK Ideograph */ + [0x56da, 0x56da], /* CJK Ideograph */ + [0x56db, 0x56db], /* CJK Ideograph */ + [0x56dc, 0x56dc], /* CJK Ideograph */ + [0x56dd, 0x56dd], /* CJK Ideograph */ + [0x56de, 0x56de], /* CJK Ideograph */ + [0x56df, 0x56df], /* CJK Ideograph */ + [0x56e0, 0x56e0], /* CJK Ideograph */ + [0x56e1, 0x56e1], /* CJK Ideograph */ + [0x56e2, 0x56e2], /* CJK Ideograph */ + [0x56e3, 0x56e3], /* CJK Ideograph */ + [0x56e4, 0x56e4], /* CJK Ideograph */ + [0x56e5, 0x56e5], /* CJK Ideograph */ + [0x56e6, 0x56e6], /* CJK Ideograph */ + [0x56e7, 0x56e7], /* CJK Ideograph */ + [0x56e8, 0x56e8], /* CJK Ideograph */ + [0x56e9, 0x56e9], /* CJK Ideograph */ + [0x56ea, 0x56ea], /* CJK Ideograph */ + [0x56eb, 0x56eb], /* CJK Ideograph */ + [0x56ec, 0x56ec], /* CJK Ideograph */ + [0x56ed, 0x56ed], /* CJK Ideograph */ + [0x56ee, 0x56ee], /* CJK Ideograph */ + [0x56ef, 0x56ef], /* CJK Ideograph */ + [0x56f0, 0x56f0], /* CJK Ideograph */ + [0x56f1, 0x56f1], /* CJK Ideograph */ + [0x56f2, 0x56f2], /* CJK Ideograph */ + [0x56f3, 0x56f3], /* CJK Ideograph */ + [0x56f4, 0x56f4], /* CJK Ideograph */ + [0x56f5, 0x56f5], /* CJK Ideograph */ + [0x56f6, 0x56f6], /* CJK Ideograph */ + [0x56f7, 0x56f7], /* CJK Ideograph */ + [0x56f8, 0x56f8], /* CJK Ideograph */ + [0x56f9, 0x56f9], /* CJK Ideograph */ + [0x56fa, 0x56fa], /* CJK Ideograph */ + [0x56fb, 0x56fb], /* CJK Ideograph */ + [0x56fc, 0x56fc], /* CJK Ideograph */ + [0x56fd, 0x56fd], /* CJK Ideograph */ + [0x56fe, 0x56fe], /* CJK Ideograph */ + [0x56ff, 0x56ff], /* CJK Ideograph */ + [0x5700, 0x5700], /* CJK Ideograph */ + [0x5701, 0x5701], /* CJK Ideograph */ + [0x5702, 0x5702], /* CJK Ideograph */ + [0x5703, 0x5703], /* CJK Ideograph */ + [0x5704, 0x5704], /* CJK Ideograph */ + [0x5705, 0x5705], /* CJK Ideograph */ + [0x5706, 0x5706], /* CJK Ideograph */ + [0x5707, 0x5707], /* CJK Ideograph */ + [0x5708, 0x5708], /* CJK Ideograph */ + [0x5709, 0x5709], /* CJK Ideograph */ + [0x570a, 0x570a], /* CJK Ideograph */ + [0x570b, 0x570b], /* CJK Ideograph */ + [0x570c, 0x570c], /* CJK Ideograph */ + [0x570d, 0x570d], /* CJK Ideograph */ + [0x570e, 0x570e], /* CJK Ideograph */ + [0x570f, 0x570f], /* CJK Ideograph */ + [0x5710, 0x5710], /* CJK Ideograph */ + [0x5711, 0x5711], /* CJK Ideograph */ + [0x5712, 0x5712], /* CJK Ideograph */ + [0x5713, 0x5713], /* CJK Ideograph */ + [0x5714, 0x5714], /* CJK Ideograph */ + [0x5715, 0x5715], /* CJK Ideograph */ + [0x5716, 0x5716], /* CJK Ideograph */ + [0x5717, 0x5717], /* CJK Ideograph */ + [0x5718, 0x5718], /* CJK Ideograph */ + [0x5719, 0x5719], /* CJK Ideograph */ + [0x571a, 0x571a], /* CJK Ideograph */ + [0x571b, 0x571b], /* CJK Ideograph */ + [0x571c, 0x571c], /* CJK Ideograph */ + [0x571d, 0x571d], /* CJK Ideograph */ + [0x571e, 0x571e], /* CJK Ideograph */ + [0x571f, 0x571f], /* CJK Ideograph */ + [0x5720, 0x5720], /* CJK Ideograph */ + [0x5721, 0x5721], /* CJK Ideograph */ + [0x5722, 0x5722], /* CJK Ideograph */ + [0x5723, 0x5723], /* CJK Ideograph */ + [0x5724, 0x5724], /* CJK Ideograph */ + [0x5725, 0x5725], /* CJK Ideograph */ + [0x5726, 0x5726], /* CJK Ideograph */ + [0x5727, 0x5727], /* CJK Ideograph */ + [0x5728, 0x5728], /* CJK Ideograph */ + [0x5729, 0x5729], /* CJK Ideograph */ + [0x572a, 0x572a], /* CJK Ideograph */ + [0x572b, 0x572b], /* CJK Ideograph */ + [0x572c, 0x572c], /* CJK Ideograph */ + [0x572d, 0x572d], /* CJK Ideograph */ + [0x572e, 0x572e], /* CJK Ideograph */ + [0x572f, 0x572f], /* CJK Ideograph */ + [0x5730, 0x5730], /* CJK Ideograph */ + [0x5731, 0x5731], /* CJK Ideograph */ + [0x5732, 0x5732], /* CJK Ideograph */ + [0x5733, 0x5733], /* CJK Ideograph */ + [0x5734, 0x5734], /* CJK Ideograph */ + [0x5735, 0x5735], /* CJK Ideograph */ + [0x5736, 0x5736], /* CJK Ideograph */ + [0x5737, 0x5737], /* CJK Ideograph */ + [0x5738, 0x5738], /* CJK Ideograph */ + [0x5739, 0x5739], /* CJK Ideograph */ + [0x573a, 0x573a], /* CJK Ideograph */ + [0x573b, 0x573b], /* CJK Ideograph */ + [0x573c, 0x573c], /* CJK Ideograph */ + [0x573d, 0x573d], /* CJK Ideograph */ + [0x573e, 0x573e], /* CJK Ideograph */ + [0x573f, 0x573f], /* CJK Ideograph */ + [0x5740, 0x5740], /* CJK Ideograph */ + [0x5741, 0x5741], /* CJK Ideograph */ + [0x5742, 0x5742], /* CJK Ideograph */ + [0x5743, 0x5743], /* CJK Ideograph */ + [0x5744, 0x5744], /* CJK Ideograph */ + [0x5745, 0x5745], /* CJK Ideograph */ + [0x5746, 0x5746], /* CJK Ideograph */ + [0x5747, 0x5747], /* CJK Ideograph */ + [0x5748, 0x5748], /* CJK Ideograph */ + [0x5749, 0x5749], /* CJK Ideograph */ + [0x574a, 0x574a], /* CJK Ideograph */ + [0x574b, 0x574b], /* CJK Ideograph */ + [0x574c, 0x574c], /* CJK Ideograph */ + [0x574d, 0x574d], /* CJK Ideograph */ + [0x574e, 0x574e], /* CJK Ideograph */ + [0x574f, 0x574f], /* CJK Ideograph */ + [0x5750, 0x5750], /* CJK Ideograph */ + [0x5751, 0x5751], /* CJK Ideograph */ + [0x5752, 0x5752], /* CJK Ideograph */ + [0x5753, 0x5753], /* CJK Ideograph */ + [0x5754, 0x5754], /* CJK Ideograph */ + [0x5755, 0x5755], /* CJK Ideograph */ + [0x5756, 0x5756], /* CJK Ideograph */ + [0x5757, 0x5757], /* CJK Ideograph */ + [0x5758, 0x5758], /* CJK Ideograph */ + [0x5759, 0x5759], /* CJK Ideograph */ + [0x575a, 0x575a], /* CJK Ideograph */ + [0x575b, 0x575b], /* CJK Ideograph */ + [0x575c, 0x575c], /* CJK Ideograph */ + [0x575d, 0x575d], /* CJK Ideograph */ + [0x575e, 0x575e], /* CJK Ideograph */ + [0x575f, 0x575f], /* CJK Ideograph */ + [0x5760, 0x5760], /* CJK Ideograph */ + [0x5761, 0x5761], /* CJK Ideograph */ + [0x5762, 0x5762], /* CJK Ideograph */ + [0x5763, 0x5763], /* CJK Ideograph */ + [0x5764, 0x5764], /* CJK Ideograph */ + [0x5765, 0x5765], /* CJK Ideograph */ + [0x5766, 0x5766], /* CJK Ideograph */ + [0x5767, 0x5767], /* CJK Ideograph */ + [0x5768, 0x5768], /* CJK Ideograph */ + [0x5769, 0x5769], /* CJK Ideograph */ + [0x576a, 0x576a], /* CJK Ideograph */ + [0x576b, 0x576b], /* CJK Ideograph */ + [0x576c, 0x576c], /* CJK Ideograph */ + [0x576d, 0x576d], /* CJK Ideograph */ + [0x576e, 0x576e], /* CJK Ideograph */ + [0x576f, 0x576f], /* CJK Ideograph */ + [0x5770, 0x5770], /* CJK Ideograph */ + [0x5771, 0x5771], /* CJK Ideograph */ + [0x5772, 0x5772], /* CJK Ideograph */ + [0x5773, 0x5773], /* CJK Ideograph */ + [0x5774, 0x5774], /* CJK Ideograph */ + [0x5775, 0x5775], /* CJK Ideograph */ + [0x5776, 0x5776], /* CJK Ideograph */ + [0x5777, 0x5777], /* CJK Ideograph */ + [0x5778, 0x5778], /* CJK Ideograph */ + [0x5779, 0x5779], /* CJK Ideograph */ + [0x577a, 0x577a], /* CJK Ideograph */ + [0x577b, 0x577b], /* CJK Ideograph */ + [0x577c, 0x577c], /* CJK Ideograph */ + [0x577d, 0x577d], /* CJK Ideograph */ + [0x577e, 0x577e], /* CJK Ideograph */ + [0x577f, 0x577f], /* CJK Ideograph */ + [0x5780, 0x5780], /* CJK Ideograph */ + [0x5781, 0x5781], /* CJK Ideograph */ + [0x5782, 0x5782], /* CJK Ideograph */ + [0x5783, 0x5783], /* CJK Ideograph */ + [0x5784, 0x5784], /* CJK Ideograph */ + [0x5785, 0x5785], /* CJK Ideograph */ + [0x5786, 0x5786], /* CJK Ideograph */ + [0x5787, 0x5787], /* CJK Ideograph */ + [0x5788, 0x5788], /* CJK Ideograph */ + [0x5789, 0x5789], /* CJK Ideograph */ + [0x578a, 0x578a], /* CJK Ideograph */ + [0x578b, 0x578b], /* CJK Ideograph */ + [0x578c, 0x578c], /* CJK Ideograph */ + [0x578d, 0x578d], /* CJK Ideograph */ + [0x578e, 0x578e], /* CJK Ideograph */ + [0x578f, 0x578f], /* CJK Ideograph */ + [0x5790, 0x5790], /* CJK Ideograph */ + [0x5791, 0x5791], /* CJK Ideograph */ + [0x5792, 0x5792], /* CJK Ideograph */ + [0x5793, 0x5793], /* CJK Ideograph */ + [0x5794, 0x5794], /* CJK Ideograph */ + [0x5795, 0x5795], /* CJK Ideograph */ + [0x5796, 0x5796], /* CJK Ideograph */ + [0x5797, 0x5797], /* CJK Ideograph */ + [0x5798, 0x5798], /* CJK Ideograph */ + [0x5799, 0x5799], /* CJK Ideograph */ + [0x579a, 0x579a], /* CJK Ideograph */ + [0x579b, 0x579b], /* CJK Ideograph */ + [0x579c, 0x579c], /* CJK Ideograph */ + [0x579d, 0x579d], /* CJK Ideograph */ + [0x579e, 0x579e], /* CJK Ideograph */ + [0x579f, 0x579f], /* CJK Ideograph */ + [0x57a0, 0x57a0], /* CJK Ideograph */ + [0x57a1, 0x57a1], /* CJK Ideograph */ + [0x57a2, 0x57a2], /* CJK Ideograph */ + [0x57a3, 0x57a3], /* CJK Ideograph */ + [0x57a4, 0x57a4], /* CJK Ideograph */ + [0x57a5, 0x57a5], /* CJK Ideograph */ + [0x57a6, 0x57a6], /* CJK Ideograph */ + [0x57a7, 0x57a7], /* CJK Ideograph */ + [0x57a8, 0x57a8], /* CJK Ideograph */ + [0x57a9, 0x57a9], /* CJK Ideograph */ + [0x57aa, 0x57aa], /* CJK Ideograph */ + [0x57ab, 0x57ab], /* CJK Ideograph */ + [0x57ac, 0x57ac], /* CJK Ideograph */ + [0x57ad, 0x57ad], /* CJK Ideograph */ + [0x57ae, 0x57ae], /* CJK Ideograph */ + [0x57af, 0x57af], /* CJK Ideograph */ + [0x57b0, 0x57b0], /* CJK Ideograph */ + [0x57b1, 0x57b1], /* CJK Ideograph */ + [0x57b2, 0x57b2], /* CJK Ideograph */ + [0x57b3, 0x57b3], /* CJK Ideograph */ + [0x57b4, 0x57b4], /* CJK Ideograph */ + [0x57b5, 0x57b5], /* CJK Ideograph */ + [0x57b6, 0x57b6], /* CJK Ideograph */ + [0x57b7, 0x57b7], /* CJK Ideograph */ + [0x57b8, 0x57b8], /* CJK Ideograph */ + [0x57b9, 0x57b9], /* CJK Ideograph */ + [0x57ba, 0x57ba], /* CJK Ideograph */ + [0x57bb, 0x57bb], /* CJK Ideograph */ + [0x57bc, 0x57bc], /* CJK Ideograph */ + [0x57bd, 0x57bd], /* CJK Ideograph */ + [0x57be, 0x57be], /* CJK Ideograph */ + [0x57bf, 0x57bf], /* CJK Ideograph */ + [0x57c0, 0x57c0], /* CJK Ideograph */ + [0x57c1, 0x57c1], /* CJK Ideograph */ + [0x57c2, 0x57c2], /* CJK Ideograph */ + [0x57c3, 0x57c3], /* CJK Ideograph */ + [0x57c4, 0x57c4], /* CJK Ideograph */ + [0x57c5, 0x57c5], /* CJK Ideograph */ + [0x57c6, 0x57c6], /* CJK Ideograph */ + [0x57c7, 0x57c7], /* CJK Ideograph */ + [0x57c8, 0x57c8], /* CJK Ideograph */ + [0x57c9, 0x57c9], /* CJK Ideograph */ + [0x57ca, 0x57ca], /* CJK Ideograph */ + [0x57cb, 0x57cb], /* CJK Ideograph */ + [0x57cc, 0x57cc], /* CJK Ideograph */ + [0x57cd, 0x57cd], /* CJK Ideograph */ + [0x57ce, 0x57ce], /* CJK Ideograph */ + [0x57cf, 0x57cf], /* CJK Ideograph */ + [0x57d0, 0x57d0], /* CJK Ideograph */ + [0x57d1, 0x57d1], /* CJK Ideograph */ + [0x57d2, 0x57d2], /* CJK Ideograph */ + [0x57d3, 0x57d3], /* CJK Ideograph */ + [0x57d4, 0x57d4], /* CJK Ideograph */ + [0x57d5, 0x57d5], /* CJK Ideograph */ + [0x57d6, 0x57d6], /* CJK Ideograph */ + [0x57d7, 0x57d7], /* CJK Ideograph */ + [0x57d8, 0x57d8], /* CJK Ideograph */ + [0x57d9, 0x57d9], /* CJK Ideograph */ + [0x57da, 0x57da], /* CJK Ideograph */ + [0x57db, 0x57db], /* CJK Ideograph */ + [0x57dc, 0x57dc], /* CJK Ideograph */ + [0x57dd, 0x57dd], /* CJK Ideograph */ + [0x57de, 0x57de], /* CJK Ideograph */ + [0x57df, 0x57df], /* CJK Ideograph */ + [0x57e0, 0x57e0], /* CJK Ideograph */ + [0x57e1, 0x57e1], /* CJK Ideograph */ + [0x57e2, 0x57e2], /* CJK Ideograph */ + [0x57e3, 0x57e3], /* CJK Ideograph */ + [0x57e4, 0x57e4], /* CJK Ideograph */ + [0x57e5, 0x57e5], /* CJK Ideograph */ + [0x57e6, 0x57e6], /* CJK Ideograph */ + [0x57e7, 0x57e7], /* CJK Ideograph */ + [0x57e8, 0x57e8], /* CJK Ideograph */ + [0x57e9, 0x57e9], /* CJK Ideograph */ + [0x57ea, 0x57ea], /* CJK Ideograph */ + [0x57eb, 0x57eb], /* CJK Ideograph */ + [0x57ec, 0x57ec], /* CJK Ideograph */ + [0x57ed, 0x57ed], /* CJK Ideograph */ + [0x57ee, 0x57ee], /* CJK Ideograph */ + [0x57ef, 0x57ef], /* CJK Ideograph */ + [0x57f0, 0x57f0], /* CJK Ideograph */ + [0x57f1, 0x57f1], /* CJK Ideograph */ + [0x57f2, 0x57f2], /* CJK Ideograph */ + [0x57f3, 0x57f3], /* CJK Ideograph */ + [0x57f4, 0x57f4], /* CJK Ideograph */ + [0x57f5, 0x57f5], /* CJK Ideograph */ + [0x57f6, 0x57f6], /* CJK Ideograph */ + [0x57f7, 0x57f7], /* CJK Ideograph */ + [0x57f8, 0x57f8], /* CJK Ideograph */ + [0x57f9, 0x57f9], /* CJK Ideograph */ + [0x57fa, 0x57fa], /* CJK Ideograph */ + [0x57fb, 0x57fb], /* CJK Ideograph */ + [0x57fc, 0x57fc], /* CJK Ideograph */ + [0x57fd, 0x57fd], /* CJK Ideograph */ + [0x57fe, 0x57fe], /* CJK Ideograph */ + [0x57ff, 0x57ff], /* CJK Ideograph */ + [0x5800, 0x5800], /* CJK Ideograph */ + [0x5801, 0x5801], /* CJK Ideograph */ + [0x5802, 0x5802], /* CJK Ideograph */ + [0x5803, 0x5803], /* CJK Ideograph */ + [0x5804, 0x5804], /* CJK Ideograph */ + [0x5805, 0x5805], /* CJK Ideograph */ + [0x5806, 0x5806], /* CJK Ideograph */ + [0x5807, 0x5807], /* CJK Ideograph */ + [0x5808, 0x5808], /* CJK Ideograph */ + [0x5809, 0x5809], /* CJK Ideograph */ + [0x580a, 0x580a], /* CJK Ideograph */ + [0x580b, 0x580b], /* CJK Ideograph */ + [0x580c, 0x580c], /* CJK Ideograph */ + [0x580d, 0x580d], /* CJK Ideograph */ + [0x580e, 0x580e], /* CJK Ideograph */ + [0x580f, 0x580f], /* CJK Ideograph */ + [0x5810, 0x5810], /* CJK Ideograph */ + [0x5811, 0x5811], /* CJK Ideograph */ + [0x5812, 0x5812], /* CJK Ideograph */ + [0x5813, 0x5813], /* CJK Ideograph */ + [0x5814, 0x5814], /* CJK Ideograph */ + [0x5815, 0x5815], /* CJK Ideograph */ + [0x5816, 0x5816], /* CJK Ideograph */ + [0x5817, 0x5817], /* CJK Ideograph */ + [0x5818, 0x5818], /* CJK Ideograph */ + [0x5819, 0x5819], /* CJK Ideograph */ + [0x581a, 0x581a], /* CJK Ideograph */ + [0x581b, 0x581b], /* CJK Ideograph */ + [0x581c, 0x581c], /* CJK Ideograph */ + [0x581d, 0x581d], /* CJK Ideograph */ + [0x581e, 0x581e], /* CJK Ideograph */ + [0x581f, 0x581f], /* CJK Ideograph */ + [0x5820, 0x5820], /* CJK Ideograph */ + [0x5821, 0x5821], /* CJK Ideograph */ + [0x5822, 0x5822], /* CJK Ideograph */ + [0x5823, 0x5823], /* CJK Ideograph */ + [0x5824, 0x5824], /* CJK Ideograph */ + [0x5825, 0x5825], /* CJK Ideograph */ + [0x5826, 0x5826], /* CJK Ideograph */ + [0x5827, 0x5827], /* CJK Ideograph */ + [0x5828, 0x5828], /* CJK Ideograph */ + [0x5829, 0x5829], /* CJK Ideograph */ + [0x582a, 0x582a], /* CJK Ideograph */ + [0x582b, 0x582b], /* CJK Ideograph */ + [0x582c, 0x582c], /* CJK Ideograph */ + [0x582d, 0x582d], /* CJK Ideograph */ + [0x582e, 0x582e], /* CJK Ideograph */ + [0x582f, 0x582f], /* CJK Ideograph */ + [0x5830, 0x5830], /* CJK Ideograph */ + [0x5831, 0x5831], /* CJK Ideograph */ + [0x5832, 0x5832], /* CJK Ideograph */ + [0x5833, 0x5833], /* CJK Ideograph */ + [0x5834, 0x5834], /* CJK Ideograph */ + [0x5835, 0x5835], /* CJK Ideograph */ + [0x5836, 0x5836], /* CJK Ideograph */ + [0x5837, 0x5837], /* CJK Ideograph */ + [0x5838, 0x5838], /* CJK Ideograph */ + [0x5839, 0x5839], /* CJK Ideograph */ + [0x583a, 0x583a], /* CJK Ideograph */ + [0x583b, 0x583b], /* CJK Ideograph */ + [0x583c, 0x583c], /* CJK Ideograph */ + [0x583d, 0x583d], /* CJK Ideograph */ + [0x583e, 0x583e], /* CJK Ideograph */ + [0x583f, 0x583f], /* CJK Ideograph */ + [0x5840, 0x5840], /* CJK Ideograph */ + [0x5841, 0x5841], /* CJK Ideograph */ + [0x5842, 0x5842], /* CJK Ideograph */ + [0x5843, 0x5843], /* CJK Ideograph */ + [0x5844, 0x5844], /* CJK Ideograph */ + [0x5845, 0x5845], /* CJK Ideograph */ + [0x5846, 0x5846], /* CJK Ideograph */ + [0x5847, 0x5847], /* CJK Ideograph */ + [0x5848, 0x5848], /* CJK Ideograph */ + [0x5849, 0x5849], /* CJK Ideograph */ + [0x584a, 0x584a], /* CJK Ideograph */ + [0x584b, 0x584b], /* CJK Ideograph */ + [0x584c, 0x584c], /* CJK Ideograph */ + [0x584d, 0x584d], /* CJK Ideograph */ + [0x584e, 0x584e], /* CJK Ideograph */ + [0x584f, 0x584f], /* CJK Ideograph */ + [0x5850, 0x5850], /* CJK Ideograph */ + [0x5851, 0x5851], /* CJK Ideograph */ + [0x5852, 0x5852], /* CJK Ideograph */ + [0x5853, 0x5853], /* CJK Ideograph */ + [0x5854, 0x5854], /* CJK Ideograph */ + [0x5855, 0x5855], /* CJK Ideograph */ + [0x5856, 0x5856], /* CJK Ideograph */ + [0x5857, 0x5857], /* CJK Ideograph */ + [0x5858, 0x5858], /* CJK Ideograph */ + [0x5859, 0x5859], /* CJK Ideograph */ + [0x585a, 0x585a], /* CJK Ideograph */ + [0x585b, 0x585b], /* CJK Ideograph */ + [0x585c, 0x585c], /* CJK Ideograph */ + [0x585d, 0x585d], /* CJK Ideograph */ + [0x585e, 0x585e], /* CJK Ideograph */ + [0x585f, 0x585f], /* CJK Ideograph */ + [0x5860, 0x5860], /* CJK Ideograph */ + [0x5861, 0x5861], /* CJK Ideograph */ + [0x5862, 0x5862], /* CJK Ideograph */ + [0x5863, 0x5863], /* CJK Ideograph */ + [0x5864, 0x5864], /* CJK Ideograph */ + [0x5865, 0x5865], /* CJK Ideograph */ + [0x5866, 0x5866], /* CJK Ideograph */ + [0x5867, 0x5867], /* CJK Ideograph */ + [0x5868, 0x5868], /* CJK Ideograph */ + [0x5869, 0x5869], /* CJK Ideograph */ + [0x586a, 0x586a], /* CJK Ideograph */ + [0x586b, 0x586b], /* CJK Ideograph */ + [0x586c, 0x586c], /* CJK Ideograph */ + [0x586d, 0x586d], /* CJK Ideograph */ + [0x586e, 0x586e], /* CJK Ideograph */ + [0x586f, 0x586f], /* CJK Ideograph */ + [0x5870, 0x5870], /* CJK Ideograph */ + [0x5871, 0x5871], /* CJK Ideograph */ + [0x5872, 0x5872], /* CJK Ideograph */ + [0x5873, 0x5873], /* CJK Ideograph */ + [0x5874, 0x5874], /* CJK Ideograph */ + [0x5875, 0x5875], /* CJK Ideograph */ + [0x5876, 0x5876], /* CJK Ideograph */ + [0x5877, 0x5877], /* CJK Ideograph */ + [0x5878, 0x5878], /* CJK Ideograph */ + [0x5879, 0x5879], /* CJK Ideograph */ + [0x587a, 0x587a], /* CJK Ideograph */ + [0x587b, 0x587b], /* CJK Ideograph */ + [0x587c, 0x587c], /* CJK Ideograph */ + [0x587d, 0x587d], /* CJK Ideograph */ + [0x587e, 0x587e], /* CJK Ideograph */ + [0x587f, 0x587f], /* CJK Ideograph */ + [0x5880, 0x5880], /* CJK Ideograph */ + [0x5881, 0x5881], /* CJK Ideograph */ + [0x5882, 0x5882], /* CJK Ideograph */ + [0x5883, 0x5883], /* CJK Ideograph */ + [0x5884, 0x5884], /* CJK Ideograph */ + [0x5885, 0x5885], /* CJK Ideograph */ + [0x5886, 0x5886], /* CJK Ideograph */ + [0x5887, 0x5887], /* CJK Ideograph */ + [0x5888, 0x5888], /* CJK Ideograph */ + [0x5889, 0x5889], /* CJK Ideograph */ + [0x588a, 0x588a], /* CJK Ideograph */ + [0x588b, 0x588b], /* CJK Ideograph */ + [0x588c, 0x588c], /* CJK Ideograph */ + [0x588d, 0x588d], /* CJK Ideograph */ + [0x588e, 0x588e], /* CJK Ideograph */ + [0x588f, 0x588f], /* CJK Ideograph */ + [0x5890, 0x5890], /* CJK Ideograph */ + [0x5891, 0x5891], /* CJK Ideograph */ + [0x5892, 0x5892], /* CJK Ideograph */ + [0x5893, 0x5893], /* CJK Ideograph */ + [0x5894, 0x5894], /* CJK Ideograph */ + [0x5895, 0x5895], /* CJK Ideograph */ + [0x5896, 0x5896], /* CJK Ideograph */ + [0x5897, 0x5897], /* CJK Ideograph */ + [0x5898, 0x5898], /* CJK Ideograph */ + [0x5899, 0x5899], /* CJK Ideograph */ + [0x589a, 0x589a], /* CJK Ideograph */ + [0x589b, 0x589b], /* CJK Ideograph */ + [0x589c, 0x589c], /* CJK Ideograph */ + [0x589d, 0x589d], /* CJK Ideograph */ + [0x589e, 0x589e], /* CJK Ideograph */ + [0x589f, 0x589f], /* CJK Ideograph */ + [0x58a0, 0x58a0], /* CJK Ideograph */ + [0x58a1, 0x58a1], /* CJK Ideograph */ + [0x58a2, 0x58a2], /* CJK Ideograph */ + [0x58a3, 0x58a3], /* CJK Ideograph */ + [0x58a4, 0x58a4], /* CJK Ideograph */ + [0x58a5, 0x58a5], /* CJK Ideograph */ + [0x58a6, 0x58a6], /* CJK Ideograph */ + [0x58a7, 0x58a7], /* CJK Ideograph */ + [0x58a8, 0x58a8], /* CJK Ideograph */ + [0x58a9, 0x58a9], /* CJK Ideograph */ + [0x58aa, 0x58aa], /* CJK Ideograph */ + [0x58ab, 0x58ab], /* CJK Ideograph */ + [0x58ac, 0x58ac], /* CJK Ideograph */ + [0x58ad, 0x58ad], /* CJK Ideograph */ + [0x58ae, 0x58ae], /* CJK Ideograph */ + [0x58af, 0x58af], /* CJK Ideograph */ + [0x58b0, 0x58b0], /* CJK Ideograph */ + [0x58b1, 0x58b1], /* CJK Ideograph */ + [0x58b2, 0x58b2], /* CJK Ideograph */ + [0x58b3, 0x58b3], /* CJK Ideograph */ + [0x58b4, 0x58b4], /* CJK Ideograph */ + [0x58b5, 0x58b5], /* CJK Ideograph */ + [0x58b6, 0x58b6], /* CJK Ideograph */ + [0x58b7, 0x58b7], /* CJK Ideograph */ + [0x58b8, 0x58b8], /* CJK Ideograph */ + [0x58b9, 0x58b9], /* CJK Ideograph */ + [0x58ba, 0x58ba], /* CJK Ideograph */ + [0x58bb, 0x58bb], /* CJK Ideograph */ + [0x58bc, 0x58bc], /* CJK Ideograph */ + [0x58bd, 0x58bd], /* CJK Ideograph */ + [0x58be, 0x58be], /* CJK Ideograph */ + [0x58bf, 0x58bf], /* CJK Ideograph */ + [0x58c0, 0x58c0], /* CJK Ideograph */ + [0x58c1, 0x58c1], /* CJK Ideograph */ + [0x58c2, 0x58c2], /* CJK Ideograph */ + [0x58c3, 0x58c3], /* CJK Ideograph */ + [0x58c4, 0x58c4], /* CJK Ideograph */ + [0x58c5, 0x58c5], /* CJK Ideograph */ + [0x58c6, 0x58c6], /* CJK Ideograph */ + [0x58c7, 0x58c7], /* CJK Ideograph */ + [0x58c8, 0x58c8], /* CJK Ideograph */ + [0x58c9, 0x58c9], /* CJK Ideograph */ + [0x58ca, 0x58ca], /* CJK Ideograph */ + [0x58cb, 0x58cb], /* CJK Ideograph */ + [0x58cc, 0x58cc], /* CJK Ideograph */ + [0x58cd, 0x58cd], /* CJK Ideograph */ + [0x58ce, 0x58ce], /* CJK Ideograph */ + [0x58cf, 0x58cf], /* CJK Ideograph */ + [0x58d0, 0x58d0], /* CJK Ideograph */ + [0x58d1, 0x58d1], /* CJK Ideograph */ + [0x58d2, 0x58d2], /* CJK Ideograph */ + [0x58d3, 0x58d3], /* CJK Ideograph */ + [0x58d4, 0x58d4], /* CJK Ideograph */ + [0x58d5, 0x58d5], /* CJK Ideograph */ + [0x58d6, 0x58d6], /* CJK Ideograph */ + [0x58d7, 0x58d7], /* CJK Ideograph */ + [0x58d8, 0x58d8], /* CJK Ideograph */ + [0x58d9, 0x58d9], /* CJK Ideograph */ + [0x58da, 0x58da], /* CJK Ideograph */ + [0x58db, 0x58db], /* CJK Ideograph */ + [0x58dc, 0x58dc], /* CJK Ideograph */ + [0x58dd, 0x58dd], /* CJK Ideograph */ + [0x58de, 0x58de], /* CJK Ideograph */ + [0x58df, 0x58df], /* CJK Ideograph */ + [0x58e0, 0x58e0], /* CJK Ideograph */ + [0x58e1, 0x58e1], /* CJK Ideograph */ + [0x58e2, 0x58e2], /* CJK Ideograph */ + [0x58e3, 0x58e3], /* CJK Ideograph */ + [0x58e4, 0x58e4], /* CJK Ideograph */ + [0x58e5, 0x58e5], /* CJK Ideograph */ + [0x58e6, 0x58e6], /* CJK Ideograph */ + [0x58e7, 0x58e7], /* CJK Ideograph */ + [0x58e8, 0x58e8], /* CJK Ideograph */ + [0x58e9, 0x58e9], /* CJK Ideograph */ + [0x58ea, 0x58ea], /* CJK Ideograph */ + [0x58eb, 0x58eb], /* CJK Ideograph */ + [0x58ec, 0x58ec], /* CJK Ideograph */ + [0x58ed, 0x58ed], /* CJK Ideograph */ + [0x58ee, 0x58ee], /* CJK Ideograph */ + [0x58ef, 0x58ef], /* CJK Ideograph */ + [0x58f0, 0x58f0], /* CJK Ideograph */ + [0x58f1, 0x58f1], /* CJK Ideograph */ + [0x58f2, 0x58f2], /* CJK Ideograph */ + [0x58f3, 0x58f3], /* CJK Ideograph */ + [0x58f4, 0x58f4], /* CJK Ideograph */ + [0x58f5, 0x58f5], /* CJK Ideograph */ + [0x58f6, 0x58f6], /* CJK Ideograph */ + [0x58f7, 0x58f7], /* CJK Ideograph */ + [0x58f8, 0x58f8], /* CJK Ideograph */ + [0x58f9, 0x58f9], /* CJK Ideograph */ + [0x58fa, 0x58fa], /* CJK Ideograph */ + [0x58fb, 0x58fb], /* CJK Ideograph */ + [0x58fc, 0x58fc], /* CJK Ideograph */ + [0x58fd, 0x58fd], /* CJK Ideograph */ + [0x58fe, 0x58fe], /* CJK Ideograph */ + [0x58ff, 0x58ff], /* CJK Ideograph */ + [0x5900, 0x5900], /* CJK Ideograph */ + [0x5901, 0x5901], /* CJK Ideograph */ + [0x5902, 0x5902], /* CJK Ideograph */ + [0x5903, 0x5903], /* CJK Ideograph */ + [0x5904, 0x5904], /* CJK Ideograph */ + [0x5905, 0x5905], /* CJK Ideograph */ + [0x5906, 0x5906], /* CJK Ideograph */ + [0x5907, 0x5907], /* CJK Ideograph */ + [0x5908, 0x5908], /* CJK Ideograph */ + [0x5909, 0x5909], /* CJK Ideograph */ + [0x590a, 0x590a], /* CJK Ideograph */ + [0x590b, 0x590b], /* CJK Ideograph */ + [0x590c, 0x590c], /* CJK Ideograph */ + [0x590d, 0x590d], /* CJK Ideograph */ + [0x590e, 0x590e], /* CJK Ideograph */ + [0x590f, 0x590f], /* CJK Ideograph */ + [0x5910, 0x5910], /* CJK Ideograph */ + [0x5911, 0x5911], /* CJK Ideograph */ + [0x5912, 0x5912], /* CJK Ideograph */ + [0x5913, 0x5913], /* CJK Ideograph */ + [0x5914, 0x5914], /* CJK Ideograph */ + [0x5915, 0x5915], /* CJK Ideograph */ + [0x5916, 0x5916], /* CJK Ideograph */ + [0x5917, 0x5917], /* CJK Ideograph */ + [0x5918, 0x5918], /* CJK Ideograph */ + [0x5919, 0x5919], /* CJK Ideograph */ + [0x591a, 0x591a], /* CJK Ideograph */ + [0x591b, 0x591b], /* CJK Ideograph */ + [0x591c, 0x591c], /* CJK Ideograph */ + [0x591d, 0x591d], /* CJK Ideograph */ + [0x591e, 0x591e], /* CJK Ideograph */ + [0x591f, 0x591f], /* CJK Ideograph */ + [0x5920, 0x5920], /* CJK Ideograph */ + [0x5921, 0x5921], /* CJK Ideograph */ + [0x5922, 0x5922], /* CJK Ideograph */ + [0x5923, 0x5923], /* CJK Ideograph */ + [0x5924, 0x5924], /* CJK Ideograph */ + [0x5925, 0x5925], /* CJK Ideograph */ + [0x5926, 0x5926], /* CJK Ideograph */ + [0x5927, 0x5927], /* CJK Ideograph */ + [0x5928, 0x5928], /* CJK Ideograph */ + [0x5929, 0x5929], /* CJK Ideograph */ + [0x592a, 0x592a], /* CJK Ideograph */ + [0x592b, 0x592b], /* CJK Ideograph */ + [0x592c, 0x592c], /* CJK Ideograph */ + [0x592d, 0x592d], /* CJK Ideograph */ + [0x592e, 0x592e], /* CJK Ideograph */ + [0x592f, 0x592f], /* CJK Ideograph */ + [0x5930, 0x5930], /* CJK Ideograph */ + [0x5931, 0x5931], /* CJK Ideograph */ + [0x5932, 0x5932], /* CJK Ideograph */ + [0x5933, 0x5933], /* CJK Ideograph */ + [0x5934, 0x5934], /* CJK Ideograph */ + [0x5935, 0x5935], /* CJK Ideograph */ + [0x5936, 0x5936], /* CJK Ideograph */ + [0x5937, 0x5937], /* CJK Ideograph */ + [0x5938, 0x5938], /* CJK Ideograph */ + [0x5939, 0x5939], /* CJK Ideograph */ + [0x593a, 0x593a], /* CJK Ideograph */ + [0x593b, 0x593b], /* CJK Ideograph */ + [0x593c, 0x593c], /* CJK Ideograph */ + [0x593d, 0x593d], /* CJK Ideograph */ + [0x593e, 0x593e], /* CJK Ideograph */ + [0x593f, 0x593f], /* CJK Ideograph */ + [0x5940, 0x5940], /* CJK Ideograph */ + [0x5941, 0x5941], /* CJK Ideograph */ + [0x5942, 0x5942], /* CJK Ideograph */ + [0x5943, 0x5943], /* CJK Ideograph */ + [0x5944, 0x5944], /* CJK Ideograph */ + [0x5945, 0x5945], /* CJK Ideograph */ + [0x5946, 0x5946], /* CJK Ideograph */ + [0x5947, 0x5947], /* CJK Ideograph */ + [0x5948, 0x5948], /* CJK Ideograph */ + [0x5949, 0x5949], /* CJK Ideograph */ + [0x594a, 0x594a], /* CJK Ideograph */ + [0x594b, 0x594b], /* CJK Ideograph */ + [0x594c, 0x594c], /* CJK Ideograph */ + [0x594d, 0x594d], /* CJK Ideograph */ + [0x594e, 0x594e], /* CJK Ideograph */ + [0x594f, 0x594f], /* CJK Ideograph */ + [0x5950, 0x5950], /* CJK Ideograph */ + [0x5951, 0x5951], /* CJK Ideograph */ + [0x5952, 0x5952], /* CJK Ideograph */ + [0x5953, 0x5953], /* CJK Ideograph */ + [0x5954, 0x5954], /* CJK Ideograph */ + [0x5955, 0x5955], /* CJK Ideograph */ + [0x5956, 0x5956], /* CJK Ideograph */ + [0x5957, 0x5957], /* CJK Ideograph */ + [0x5958, 0x5958], /* CJK Ideograph */ + [0x5959, 0x5959], /* CJK Ideograph */ + [0x595a, 0x595a], /* CJK Ideograph */ + [0x595b, 0x595b], /* CJK Ideograph */ + [0x595c, 0x595c], /* CJK Ideograph */ + [0x595d, 0x595d], /* CJK Ideograph */ + [0x595e, 0x595e], /* CJK Ideograph */ + [0x595f, 0x595f], /* CJK Ideograph */ + [0x5960, 0x5960], /* CJK Ideograph */ + [0x5961, 0x5961], /* CJK Ideograph */ + [0x5962, 0x5962], /* CJK Ideograph */ + [0x5963, 0x5963], /* CJK Ideograph */ + [0x5964, 0x5964], /* CJK Ideograph */ + [0x5965, 0x5965], /* CJK Ideograph */ + [0x5966, 0x5966], /* CJK Ideograph */ + [0x5967, 0x5967], /* CJK Ideograph */ + [0x5968, 0x5968], /* CJK Ideograph */ + [0x5969, 0x5969], /* CJK Ideograph */ + [0x596a, 0x596a], /* CJK Ideograph */ + [0x596b, 0x596b], /* CJK Ideograph */ + [0x596c, 0x596c], /* CJK Ideograph */ + [0x596d, 0x596d], /* CJK Ideograph */ + [0x596e, 0x596e], /* CJK Ideograph */ + [0x596f, 0x596f], /* CJK Ideograph */ + [0x5970, 0x5970], /* CJK Ideograph */ + [0x5971, 0x5971], /* CJK Ideograph */ + [0x5972, 0x5972], /* CJK Ideograph */ + [0x5973, 0x5973], /* CJK Ideograph */ + [0x5974, 0x5974], /* CJK Ideograph */ + [0x5975, 0x5975], /* CJK Ideograph */ + [0x5976, 0x5976], /* CJK Ideograph */ + [0x5977, 0x5977], /* CJK Ideograph */ + [0x5978, 0x5978], /* CJK Ideograph */ + [0x5979, 0x5979], /* CJK Ideograph */ + [0x597a, 0x597a], /* CJK Ideograph */ + [0x597b, 0x597b], /* CJK Ideograph */ + [0x597c, 0x597c], /* CJK Ideograph */ + [0x597d, 0x597d], /* CJK Ideograph */ + [0x597e, 0x597e], /* CJK Ideograph */ + [0x597f, 0x597f], /* CJK Ideograph */ + [0x5980, 0x5980], /* CJK Ideograph */ + [0x5981, 0x5981], /* CJK Ideograph */ + [0x5982, 0x5982], /* CJK Ideograph */ + [0x5983, 0x5983], /* CJK Ideograph */ + [0x5984, 0x5984], /* CJK Ideograph */ + [0x5985, 0x5985], /* CJK Ideograph */ + [0x5986, 0x5986], /* CJK Ideograph */ + [0x5987, 0x5987], /* CJK Ideograph */ + [0x5988, 0x5988], /* CJK Ideograph */ + [0x5989, 0x5989], /* CJK Ideograph */ + [0x598a, 0x598a], /* CJK Ideograph */ + [0x598b, 0x598b], /* CJK Ideograph */ + [0x598c, 0x598c], /* CJK Ideograph */ + [0x598d, 0x598d], /* CJK Ideograph */ + [0x598e, 0x598e], /* CJK Ideograph */ + [0x598f, 0x598f], /* CJK Ideograph */ + [0x5990, 0x5990], /* CJK Ideograph */ + [0x5991, 0x5991], /* CJK Ideograph */ + [0x5992, 0x5992], /* CJK Ideograph */ + [0x5993, 0x5993], /* CJK Ideograph */ + [0x5994, 0x5994], /* CJK Ideograph */ + [0x5995, 0x5995], /* CJK Ideograph */ + [0x5996, 0x5996], /* CJK Ideograph */ + [0x5997, 0x5997], /* CJK Ideograph */ + [0x5998, 0x5998], /* CJK Ideograph */ + [0x5999, 0x5999], /* CJK Ideograph */ + [0x599a, 0x599a], /* CJK Ideograph */ + [0x599b, 0x599b], /* CJK Ideograph */ + [0x599c, 0x599c], /* CJK Ideograph */ + [0x599d, 0x599d], /* CJK Ideograph */ + [0x599e, 0x599e], /* CJK Ideograph */ + [0x599f, 0x599f], /* CJK Ideograph */ + [0x59a0, 0x59a0], /* CJK Ideograph */ + [0x59a1, 0x59a1], /* CJK Ideograph */ + [0x59a2, 0x59a2], /* CJK Ideograph */ + [0x59a3, 0x59a3], /* CJK Ideograph */ + [0x59a4, 0x59a4], /* CJK Ideograph */ + [0x59a5, 0x59a5], /* CJK Ideograph */ + [0x59a6, 0x59a6], /* CJK Ideograph */ + [0x59a7, 0x59a7], /* CJK Ideograph */ + [0x59a8, 0x59a8], /* CJK Ideograph */ + [0x59a9, 0x59a9], /* CJK Ideograph */ + [0x59aa, 0x59aa], /* CJK Ideograph */ + [0x59ab, 0x59ab], /* CJK Ideograph */ + [0x59ac, 0x59ac], /* CJK Ideograph */ + [0x59ad, 0x59ad], /* CJK Ideograph */ + [0x59ae, 0x59ae], /* CJK Ideograph */ + [0x59af, 0x59af], /* CJK Ideograph */ + [0x59b0, 0x59b0], /* CJK Ideograph */ + [0x59b1, 0x59b1], /* CJK Ideograph */ + [0x59b2, 0x59b2], /* CJK Ideograph */ + [0x59b3, 0x59b3], /* CJK Ideograph */ + [0x59b4, 0x59b4], /* CJK Ideograph */ + [0x59b5, 0x59b5], /* CJK Ideograph */ + [0x59b6, 0x59b6], /* CJK Ideograph */ + [0x59b7, 0x59b7], /* CJK Ideograph */ + [0x59b8, 0x59b8], /* CJK Ideograph */ + [0x59b9, 0x59b9], /* CJK Ideograph */ + [0x59ba, 0x59ba], /* CJK Ideograph */ + [0x59bb, 0x59bb], /* CJK Ideograph */ + [0x59bc, 0x59bc], /* CJK Ideograph */ + [0x59bd, 0x59bd], /* CJK Ideograph */ + [0x59be, 0x59be], /* CJK Ideograph */ + [0x59bf, 0x59bf], /* CJK Ideograph */ + [0x59c0, 0x59c0], /* CJK Ideograph */ + [0x59c1, 0x59c1], /* CJK Ideograph */ + [0x59c2, 0x59c2], /* CJK Ideograph */ + [0x59c3, 0x59c3], /* CJK Ideograph */ + [0x59c4, 0x59c4], /* CJK Ideograph */ + [0x59c5, 0x59c5], /* CJK Ideograph */ + [0x59c6, 0x59c6], /* CJK Ideograph */ + [0x59c7, 0x59c7], /* CJK Ideograph */ + [0x59c8, 0x59c8], /* CJK Ideograph */ + [0x59c9, 0x59c9], /* CJK Ideograph */ + [0x59ca, 0x59ca], /* CJK Ideograph */ + [0x59cb, 0x59cb], /* CJK Ideograph */ + [0x59cc, 0x59cc], /* CJK Ideograph */ + [0x59cd, 0x59cd], /* CJK Ideograph */ + [0x59ce, 0x59ce], /* CJK Ideograph */ + [0x59cf, 0x59cf], /* CJK Ideograph */ + [0x59d0, 0x59d0], /* CJK Ideograph */ + [0x59d1, 0x59d1], /* CJK Ideograph */ + [0x59d2, 0x59d2], /* CJK Ideograph */ + [0x59d3, 0x59d3], /* CJK Ideograph */ + [0x59d4, 0x59d4], /* CJK Ideograph */ + [0x59d5, 0x59d5], /* CJK Ideograph */ + [0x59d6, 0x59d6], /* CJK Ideograph */ + [0x59d7, 0x59d7], /* CJK Ideograph */ + [0x59d8, 0x59d8], /* CJK Ideograph */ + [0x59d9, 0x59d9], /* CJK Ideograph */ + [0x59da, 0x59da], /* CJK Ideograph */ + [0x59db, 0x59db], /* CJK Ideograph */ + [0x59dc, 0x59dc], /* CJK Ideograph */ + [0x59dd, 0x59dd], /* CJK Ideograph */ + [0x59de, 0x59de], /* CJK Ideograph */ + [0x59df, 0x59df], /* CJK Ideograph */ + [0x59e0, 0x59e0], /* CJK Ideograph */ + [0x59e1, 0x59e1], /* CJK Ideograph */ + [0x59e2, 0x59e2], /* CJK Ideograph */ + [0x59e3, 0x59e3], /* CJK Ideograph */ + [0x59e4, 0x59e4], /* CJK Ideograph */ + [0x59e5, 0x59e5], /* CJK Ideograph */ + [0x59e6, 0x59e6], /* CJK Ideograph */ + [0x59e7, 0x59e7], /* CJK Ideograph */ + [0x59e8, 0x59e8], /* CJK Ideograph */ + [0x59e9, 0x59e9], /* CJK Ideograph */ + [0x59ea, 0x59ea], /* CJK Ideograph */ + [0x59eb, 0x59eb], /* CJK Ideograph */ + [0x59ec, 0x59ec], /* CJK Ideograph */ + [0x59ed, 0x59ed], /* CJK Ideograph */ + [0x59ee, 0x59ee], /* CJK Ideograph */ + [0x59ef, 0x59ef], /* CJK Ideograph */ + [0x59f0, 0x59f0], /* CJK Ideograph */ + [0x59f1, 0x59f1], /* CJK Ideograph */ + [0x59f2, 0x59f2], /* CJK Ideograph */ + [0x59f3, 0x59f3], /* CJK Ideograph */ + [0x59f4, 0x59f4], /* CJK Ideograph */ + [0x59f5, 0x59f5], /* CJK Ideograph */ + [0x59f6, 0x59f6], /* CJK Ideograph */ + [0x59f7, 0x59f7], /* CJK Ideograph */ + [0x59f8, 0x59f8], /* CJK Ideograph */ + [0x59f9, 0x59f9], /* CJK Ideograph */ + [0x59fa, 0x59fa], /* CJK Ideograph */ + [0x59fb, 0x59fb], /* CJK Ideograph */ + [0x59fc, 0x59fc], /* CJK Ideograph */ + [0x59fd, 0x59fd], /* CJK Ideograph */ + [0x59fe, 0x59fe], /* CJK Ideograph */ + [0x59ff, 0x59ff], /* CJK Ideograph */ + [0x5a00, 0x5a00], /* CJK Ideograph */ + [0x5a01, 0x5a01], /* CJK Ideograph */ + [0x5a02, 0x5a02], /* CJK Ideograph */ + [0x5a03, 0x5a03], /* CJK Ideograph */ + [0x5a04, 0x5a04], /* CJK Ideograph */ + [0x5a05, 0x5a05], /* CJK Ideograph */ + [0x5a06, 0x5a06], /* CJK Ideograph */ + [0x5a07, 0x5a07], /* CJK Ideograph */ + [0x5a08, 0x5a08], /* CJK Ideograph */ + [0x5a09, 0x5a09], /* CJK Ideograph */ + [0x5a0a, 0x5a0a], /* CJK Ideograph */ + [0x5a0b, 0x5a0b], /* CJK Ideograph */ + [0x5a0c, 0x5a0c], /* CJK Ideograph */ + [0x5a0d, 0x5a0d], /* CJK Ideograph */ + [0x5a0e, 0x5a0e], /* CJK Ideograph */ + [0x5a0f, 0x5a0f], /* CJK Ideograph */ + [0x5a10, 0x5a10], /* CJK Ideograph */ + [0x5a11, 0x5a11], /* CJK Ideograph */ + [0x5a12, 0x5a12], /* CJK Ideograph */ + [0x5a13, 0x5a13], /* CJK Ideograph */ + [0x5a14, 0x5a14], /* CJK Ideograph */ + [0x5a15, 0x5a15], /* CJK Ideograph */ + [0x5a16, 0x5a16], /* CJK Ideograph */ + [0x5a17, 0x5a17], /* CJK Ideograph */ + [0x5a18, 0x5a18], /* CJK Ideograph */ + [0x5a19, 0x5a19], /* CJK Ideograph */ + [0x5a1a, 0x5a1a], /* CJK Ideograph */ + [0x5a1b, 0x5a1b], /* CJK Ideograph */ + [0x5a1c, 0x5a1c], /* CJK Ideograph */ + [0x5a1d, 0x5a1d], /* CJK Ideograph */ + [0x5a1e, 0x5a1e], /* CJK Ideograph */ + [0x5a1f, 0x5a1f], /* CJK Ideograph */ + [0x5a20, 0x5a20], /* CJK Ideograph */ + [0x5a21, 0x5a21], /* CJK Ideograph */ + [0x5a22, 0x5a22], /* CJK Ideograph */ + [0x5a23, 0x5a23], /* CJK Ideograph */ + [0x5a24, 0x5a24], /* CJK Ideograph */ + [0x5a25, 0x5a25], /* CJK Ideograph */ + [0x5a26, 0x5a26], /* CJK Ideograph */ + [0x5a27, 0x5a27], /* CJK Ideograph */ + [0x5a28, 0x5a28], /* CJK Ideograph */ + [0x5a29, 0x5a29], /* CJK Ideograph */ + [0x5a2a, 0x5a2a], /* CJK Ideograph */ + [0x5a2b, 0x5a2b], /* CJK Ideograph */ + [0x5a2c, 0x5a2c], /* CJK Ideograph */ + [0x5a2d, 0x5a2d], /* CJK Ideograph */ + [0x5a2e, 0x5a2e], /* CJK Ideograph */ + [0x5a2f, 0x5a2f], /* CJK Ideograph */ + [0x5a30, 0x5a30], /* CJK Ideograph */ + [0x5a31, 0x5a31], /* CJK Ideograph */ + [0x5a32, 0x5a32], /* CJK Ideograph */ + [0x5a33, 0x5a33], /* CJK Ideograph */ + [0x5a34, 0x5a34], /* CJK Ideograph */ + [0x5a35, 0x5a35], /* CJK Ideograph */ + [0x5a36, 0x5a36], /* CJK Ideograph */ + [0x5a37, 0x5a37], /* CJK Ideograph */ + [0x5a38, 0x5a38], /* CJK Ideograph */ + [0x5a39, 0x5a39], /* CJK Ideograph */ + [0x5a3a, 0x5a3a], /* CJK Ideograph */ + [0x5a3b, 0x5a3b], /* CJK Ideograph */ + [0x5a3c, 0x5a3c], /* CJK Ideograph */ + [0x5a3d, 0x5a3d], /* CJK Ideograph */ + [0x5a3e, 0x5a3e], /* CJK Ideograph */ + [0x5a3f, 0x5a3f], /* CJK Ideograph */ + [0x5a40, 0x5a40], /* CJK Ideograph */ + [0x5a41, 0x5a41], /* CJK Ideograph */ + [0x5a42, 0x5a42], /* CJK Ideograph */ + [0x5a43, 0x5a43], /* CJK Ideograph */ + [0x5a44, 0x5a44], /* CJK Ideograph */ + [0x5a45, 0x5a45], /* CJK Ideograph */ + [0x5a46, 0x5a46], /* CJK Ideograph */ + [0x5a47, 0x5a47], /* CJK Ideograph */ + [0x5a48, 0x5a48], /* CJK Ideograph */ + [0x5a49, 0x5a49], /* CJK Ideograph */ + [0x5a4a, 0x5a4a], /* CJK Ideograph */ + [0x5a4b, 0x5a4b], /* CJK Ideograph */ + [0x5a4c, 0x5a4c], /* CJK Ideograph */ + [0x5a4d, 0x5a4d], /* CJK Ideograph */ + [0x5a4e, 0x5a4e], /* CJK Ideograph */ + [0x5a4f, 0x5a4f], /* CJK Ideograph */ + [0x5a50, 0x5a50], /* CJK Ideograph */ + [0x5a51, 0x5a51], /* CJK Ideograph */ + [0x5a52, 0x5a52], /* CJK Ideograph */ + [0x5a53, 0x5a53], /* CJK Ideograph */ + [0x5a54, 0x5a54], /* CJK Ideograph */ + [0x5a55, 0x5a55], /* CJK Ideograph */ + [0x5a56, 0x5a56], /* CJK Ideograph */ + [0x5a57, 0x5a57], /* CJK Ideograph */ + [0x5a58, 0x5a58], /* CJK Ideograph */ + [0x5a59, 0x5a59], /* CJK Ideograph */ + [0x5a5a, 0x5a5a], /* CJK Ideograph */ + [0x5a5b, 0x5a5b], /* CJK Ideograph */ + [0x5a5c, 0x5a5c], /* CJK Ideograph */ + [0x5a5d, 0x5a5d], /* CJK Ideograph */ + [0x5a5e, 0x5a5e], /* CJK Ideograph */ + [0x5a5f, 0x5a5f], /* CJK Ideograph */ + [0x5a60, 0x5a60], /* CJK Ideograph */ + [0x5a61, 0x5a61], /* CJK Ideograph */ + [0x5a62, 0x5a62], /* CJK Ideograph */ + [0x5a63, 0x5a63], /* CJK Ideograph */ + [0x5a64, 0x5a64], /* CJK Ideograph */ + [0x5a65, 0x5a65], /* CJK Ideograph */ + [0x5a66, 0x5a66], /* CJK Ideograph */ + [0x5a67, 0x5a67], /* CJK Ideograph */ + [0x5a68, 0x5a68], /* CJK Ideograph */ + [0x5a69, 0x5a69], /* CJK Ideograph */ + [0x5a6a, 0x5a6a], /* CJK Ideograph */ + [0x5a6b, 0x5a6b], /* CJK Ideograph */ + [0x5a6c, 0x5a6c], /* CJK Ideograph */ + [0x5a6d, 0x5a6d], /* CJK Ideograph */ + [0x5a6e, 0x5a6e], /* CJK Ideograph */ + [0x5a6f, 0x5a6f], /* CJK Ideograph */ + [0x5a70, 0x5a70], /* CJK Ideograph */ + [0x5a71, 0x5a71], /* CJK Ideograph */ + [0x5a72, 0x5a72], /* CJK Ideograph */ + [0x5a73, 0x5a73], /* CJK Ideograph */ + [0x5a74, 0x5a74], /* CJK Ideograph */ + [0x5a75, 0x5a75], /* CJK Ideograph */ + [0x5a76, 0x5a76], /* CJK Ideograph */ + [0x5a77, 0x5a77], /* CJK Ideograph */ + [0x5a78, 0x5a78], /* CJK Ideograph */ + [0x5a79, 0x5a79], /* CJK Ideograph */ + [0x5a7a, 0x5a7a], /* CJK Ideograph */ + [0x5a7b, 0x5a7b], /* CJK Ideograph */ + [0x5a7c, 0x5a7c], /* CJK Ideograph */ + [0x5a7d, 0x5a7d], /* CJK Ideograph */ + [0x5a7e, 0x5a7e], /* CJK Ideograph */ + [0x5a7f, 0x5a7f], /* CJK Ideograph */ + [0x5a80, 0x5a80], /* CJK Ideograph */ + [0x5a81, 0x5a81], /* CJK Ideograph */ + [0x5a82, 0x5a82], /* CJK Ideograph */ + [0x5a83, 0x5a83], /* CJK Ideograph */ + [0x5a84, 0x5a84], /* CJK Ideograph */ + [0x5a85, 0x5a85], /* CJK Ideograph */ + [0x5a86, 0x5a86], /* CJK Ideograph */ + [0x5a87, 0x5a87], /* CJK Ideograph */ + [0x5a88, 0x5a88], /* CJK Ideograph */ + [0x5a89, 0x5a89], /* CJK Ideograph */ + [0x5a8a, 0x5a8a], /* CJK Ideograph */ + [0x5a8b, 0x5a8b], /* CJK Ideograph */ + [0x5a8c, 0x5a8c], /* CJK Ideograph */ + [0x5a8d, 0x5a8d], /* CJK Ideograph */ + [0x5a8e, 0x5a8e], /* CJK Ideograph */ + [0x5a8f, 0x5a8f], /* CJK Ideograph */ + [0x5a90, 0x5a90], /* CJK Ideograph */ + [0x5a91, 0x5a91], /* CJK Ideograph */ + [0x5a92, 0x5a92], /* CJK Ideograph */ + [0x5a93, 0x5a93], /* CJK Ideograph */ + [0x5a94, 0x5a94], /* CJK Ideograph */ + [0x5a95, 0x5a95], /* CJK Ideograph */ + [0x5a96, 0x5a96], /* CJK Ideograph */ + [0x5a97, 0x5a97], /* CJK Ideograph */ + [0x5a98, 0x5a98], /* CJK Ideograph */ + [0x5a99, 0x5a99], /* CJK Ideograph */ + [0x5a9a, 0x5a9a], /* CJK Ideograph */ + [0x5a9b, 0x5a9b], /* CJK Ideograph */ + [0x5a9c, 0x5a9c], /* CJK Ideograph */ + [0x5a9d, 0x5a9d], /* CJK Ideograph */ + [0x5a9e, 0x5a9e], /* CJK Ideograph */ + [0x5a9f, 0x5a9f], /* CJK Ideograph */ + [0x5aa0, 0x5aa0], /* CJK Ideograph */ + [0x5aa1, 0x5aa1], /* CJK Ideograph */ + [0x5aa2, 0x5aa2], /* CJK Ideograph */ + [0x5aa3, 0x5aa3], /* CJK Ideograph */ + [0x5aa4, 0x5aa4], /* CJK Ideograph */ + [0x5aa5, 0x5aa5], /* CJK Ideograph */ + [0x5aa6, 0x5aa6], /* CJK Ideograph */ + [0x5aa7, 0x5aa7], /* CJK Ideograph */ + [0x5aa8, 0x5aa8], /* CJK Ideograph */ + [0x5aa9, 0x5aa9], /* CJK Ideograph */ + [0x5aaa, 0x5aaa], /* CJK Ideograph */ + [0x5aab, 0x5aab], /* CJK Ideograph */ + [0x5aac, 0x5aac], /* CJK Ideograph */ + [0x5aad, 0x5aad], /* CJK Ideograph */ + [0x5aae, 0x5aae], /* CJK Ideograph */ + [0x5aaf, 0x5aaf], /* CJK Ideograph */ + [0x5ab0, 0x5ab0], /* CJK Ideograph */ + [0x5ab1, 0x5ab1], /* CJK Ideograph */ + [0x5ab2, 0x5ab2], /* CJK Ideograph */ + [0x5ab3, 0x5ab3], /* CJK Ideograph */ + [0x5ab4, 0x5ab4], /* CJK Ideograph */ + [0x5ab5, 0x5ab5], /* CJK Ideograph */ + [0x5ab6, 0x5ab6], /* CJK Ideograph */ + [0x5ab7, 0x5ab7], /* CJK Ideograph */ + [0x5ab8, 0x5ab8], /* CJK Ideograph */ + [0x5ab9, 0x5ab9], /* CJK Ideograph */ + [0x5aba, 0x5aba], /* CJK Ideograph */ + [0x5abb, 0x5abb], /* CJK Ideograph */ + [0x5abc, 0x5abc], /* CJK Ideograph */ + [0x5abd, 0x5abd], /* CJK Ideograph */ + [0x5abe, 0x5abe], /* CJK Ideograph */ + [0x5abf, 0x5abf], /* CJK Ideograph */ + [0x5ac0, 0x5ac0], /* CJK Ideograph */ + [0x5ac1, 0x5ac1], /* CJK Ideograph */ + [0x5ac2, 0x5ac2], /* CJK Ideograph */ + [0x5ac3, 0x5ac3], /* CJK Ideograph */ + [0x5ac4, 0x5ac4], /* CJK Ideograph */ + [0x5ac5, 0x5ac5], /* CJK Ideograph */ + [0x5ac6, 0x5ac6], /* CJK Ideograph */ + [0x5ac7, 0x5ac7], /* CJK Ideograph */ + [0x5ac8, 0x5ac8], /* CJK Ideograph */ + [0x5ac9, 0x5ac9], /* CJK Ideograph */ + [0x5aca, 0x5aca], /* CJK Ideograph */ + [0x5acb, 0x5acb], /* CJK Ideograph */ + [0x5acc, 0x5acc], /* CJK Ideograph */ + [0x5acd, 0x5acd], /* CJK Ideograph */ + [0x5ace, 0x5ace], /* CJK Ideograph */ + [0x5acf, 0x5acf], /* CJK Ideograph */ + [0x5ad0, 0x5ad0], /* CJK Ideograph */ + [0x5ad1, 0x5ad1], /* CJK Ideograph */ + [0x5ad2, 0x5ad2], /* CJK Ideograph */ + [0x5ad3, 0x5ad3], /* CJK Ideograph */ + [0x5ad4, 0x5ad4], /* CJK Ideograph */ + [0x5ad5, 0x5ad5], /* CJK Ideograph */ + [0x5ad6, 0x5ad6], /* CJK Ideograph */ + [0x5ad7, 0x5ad7], /* CJK Ideograph */ + [0x5ad8, 0x5ad8], /* CJK Ideograph */ + [0x5ad9, 0x5ad9], /* CJK Ideograph */ + [0x5ada, 0x5ada], /* CJK Ideograph */ + [0x5adb, 0x5adb], /* CJK Ideograph */ + [0x5adc, 0x5adc], /* CJK Ideograph */ + [0x5add, 0x5add], /* CJK Ideograph */ + [0x5ade, 0x5ade], /* CJK Ideograph */ + [0x5adf, 0x5adf], /* CJK Ideograph */ + [0x5ae0, 0x5ae0], /* CJK Ideograph */ + [0x5ae1, 0x5ae1], /* CJK Ideograph */ + [0x5ae2, 0x5ae2], /* CJK Ideograph */ + [0x5ae3, 0x5ae3], /* CJK Ideograph */ + [0x5ae4, 0x5ae4], /* CJK Ideograph */ + [0x5ae5, 0x5ae5], /* CJK Ideograph */ + [0x5ae6, 0x5ae6], /* CJK Ideograph */ + [0x5ae7, 0x5ae7], /* CJK Ideograph */ + [0x5ae8, 0x5ae8], /* CJK Ideograph */ + [0x5ae9, 0x5ae9], /* CJK Ideograph */ + [0x5aea, 0x5aea], /* CJK Ideograph */ + [0x5aeb, 0x5aeb], /* CJK Ideograph */ + [0x5aec, 0x5aec], /* CJK Ideograph */ + [0x5aed, 0x5aed], /* CJK Ideograph */ + [0x5aee, 0x5aee], /* CJK Ideograph */ + [0x5aef, 0x5aef], /* CJK Ideograph */ + [0x5af0, 0x5af0], /* CJK Ideograph */ + [0x5af1, 0x5af1], /* CJK Ideograph */ + [0x5af2, 0x5af2], /* CJK Ideograph */ + [0x5af3, 0x5af3], /* CJK Ideograph */ + [0x5af4, 0x5af4], /* CJK Ideograph */ + [0x5af5, 0x5af5], /* CJK Ideograph */ + [0x5af6, 0x5af6], /* CJK Ideograph */ + [0x5af7, 0x5af7], /* CJK Ideograph */ + [0x5af8, 0x5af8], /* CJK Ideograph */ + [0x5af9, 0x5af9], /* CJK Ideograph */ + [0x5afa, 0x5afa], /* CJK Ideograph */ + [0x5afb, 0x5afb], /* CJK Ideograph */ + [0x5afc, 0x5afc], /* CJK Ideograph */ + [0x5afd, 0x5afd], /* CJK Ideograph */ + [0x5afe, 0x5afe], /* CJK Ideograph */ + [0x5aff, 0x5aff], /* CJK Ideograph */ + [0x5b00, 0x5b00], /* CJK Ideograph */ + [0x5b01, 0x5b01], /* CJK Ideograph */ + [0x5b02, 0x5b02], /* CJK Ideograph */ + [0x5b03, 0x5b03], /* CJK Ideograph */ + [0x5b04, 0x5b04], /* CJK Ideograph */ + [0x5b05, 0x5b05], /* CJK Ideograph */ + [0x5b06, 0x5b06], /* CJK Ideograph */ + [0x5b07, 0x5b07], /* CJK Ideograph */ + [0x5b08, 0x5b08], /* CJK Ideograph */ + [0x5b09, 0x5b09], /* CJK Ideograph */ + [0x5b0a, 0x5b0a], /* CJK Ideograph */ + [0x5b0b, 0x5b0b], /* CJK Ideograph */ + [0x5b0c, 0x5b0c], /* CJK Ideograph */ + [0x5b0d, 0x5b0d], /* CJK Ideograph */ + [0x5b0e, 0x5b0e], /* CJK Ideograph */ + [0x5b0f, 0x5b0f], /* CJK Ideograph */ + [0x5b10, 0x5b10], /* CJK Ideograph */ + [0x5b11, 0x5b11], /* CJK Ideograph */ + [0x5b12, 0x5b12], /* CJK Ideograph */ + [0x5b13, 0x5b13], /* CJK Ideograph */ + [0x5b14, 0x5b14], /* CJK Ideograph */ + [0x5b15, 0x5b15], /* CJK Ideograph */ + [0x5b16, 0x5b16], /* CJK Ideograph */ + [0x5b17, 0x5b17], /* CJK Ideograph */ + [0x5b18, 0x5b18], /* CJK Ideograph */ + [0x5b19, 0x5b19], /* CJK Ideograph */ + [0x5b1a, 0x5b1a], /* CJK Ideograph */ + [0x5b1b, 0x5b1b], /* CJK Ideograph */ + [0x5b1c, 0x5b1c], /* CJK Ideograph */ + [0x5b1d, 0x5b1d], /* CJK Ideograph */ + [0x5b1e, 0x5b1e], /* CJK Ideograph */ + [0x5b1f, 0x5b1f], /* CJK Ideograph */ + [0x5b20, 0x5b20], /* CJK Ideograph */ + [0x5b21, 0x5b21], /* CJK Ideograph */ + [0x5b22, 0x5b22], /* CJK Ideograph */ + [0x5b23, 0x5b23], /* CJK Ideograph */ + [0x5b24, 0x5b24], /* CJK Ideograph */ + [0x5b25, 0x5b25], /* CJK Ideograph */ + [0x5b26, 0x5b26], /* CJK Ideograph */ + [0x5b27, 0x5b27], /* CJK Ideograph */ + [0x5b28, 0x5b28], /* CJK Ideograph */ + [0x5b29, 0x5b29], /* CJK Ideograph */ + [0x5b2a, 0x5b2a], /* CJK Ideograph */ + [0x5b2b, 0x5b2b], /* CJK Ideograph */ + [0x5b2c, 0x5b2c], /* CJK Ideograph */ + [0x5b2d, 0x5b2d], /* CJK Ideograph */ + [0x5b2e, 0x5b2e], /* CJK Ideograph */ + [0x5b2f, 0x5b2f], /* CJK Ideograph */ + [0x5b30, 0x5b30], /* CJK Ideograph */ + [0x5b31, 0x5b31], /* CJK Ideograph */ + [0x5b32, 0x5b32], /* CJK Ideograph */ + [0x5b33, 0x5b33], /* CJK Ideograph */ + [0x5b34, 0x5b34], /* CJK Ideograph */ + [0x5b35, 0x5b35], /* CJK Ideograph */ + [0x5b36, 0x5b36], /* CJK Ideograph */ + [0x5b37, 0x5b37], /* CJK Ideograph */ + [0x5b38, 0x5b38], /* CJK Ideograph */ + [0x5b39, 0x5b39], /* CJK Ideograph */ + [0x5b3a, 0x5b3a], /* CJK Ideograph */ + [0x5b3b, 0x5b3b], /* CJK Ideograph */ + [0x5b3c, 0x5b3c], /* CJK Ideograph */ + [0x5b3d, 0x5b3d], /* CJK Ideograph */ + [0x5b3e, 0x5b3e], /* CJK Ideograph */ + [0x5b3f, 0x5b3f], /* CJK Ideograph */ + [0x5b40, 0x5b40], /* CJK Ideograph */ + [0x5b41, 0x5b41], /* CJK Ideograph */ + [0x5b42, 0x5b42], /* CJK Ideograph */ + [0x5b43, 0x5b43], /* CJK Ideograph */ + [0x5b44, 0x5b44], /* CJK Ideograph */ + [0x5b45, 0x5b45], /* CJK Ideograph */ + [0x5b46, 0x5b46], /* CJK Ideograph */ + [0x5b47, 0x5b47], /* CJK Ideograph */ + [0x5b48, 0x5b48], /* CJK Ideograph */ + [0x5b49, 0x5b49], /* CJK Ideograph */ + [0x5b4a, 0x5b4a], /* CJK Ideograph */ + [0x5b4b, 0x5b4b], /* CJK Ideograph */ + [0x5b4c, 0x5b4c], /* CJK Ideograph */ + [0x5b4d, 0x5b4d], /* CJK Ideograph */ + [0x5b4e, 0x5b4e], /* CJK Ideograph */ + [0x5b4f, 0x5b4f], /* CJK Ideograph */ + [0x5b50, 0x5b50], /* CJK Ideograph */ + [0x5b51, 0x5b51], /* CJK Ideograph */ + [0x5b52, 0x5b52], /* CJK Ideograph */ + [0x5b53, 0x5b53], /* CJK Ideograph */ + [0x5b54, 0x5b54], /* CJK Ideograph */ + [0x5b55, 0x5b55], /* CJK Ideograph */ + [0x5b56, 0x5b56], /* CJK Ideograph */ + [0x5b57, 0x5b57], /* CJK Ideograph */ + [0x5b58, 0x5b58], /* CJK Ideograph */ + [0x5b59, 0x5b59], /* CJK Ideograph */ + [0x5b5a, 0x5b5a], /* CJK Ideograph */ + [0x5b5b, 0x5b5b], /* CJK Ideograph */ + [0x5b5c, 0x5b5c], /* CJK Ideograph */ + [0x5b5d, 0x5b5d], /* CJK Ideograph */ + [0x5b5e, 0x5b5e], /* CJK Ideograph */ + [0x5b5f, 0x5b5f], /* CJK Ideograph */ + [0x5b60, 0x5b60], /* CJK Ideograph */ + [0x5b61, 0x5b61], /* CJK Ideograph */ + [0x5b62, 0x5b62], /* CJK Ideograph */ + [0x5b63, 0x5b63], /* CJK Ideograph */ + [0x5b64, 0x5b64], /* CJK Ideograph */ + [0x5b65, 0x5b65], /* CJK Ideograph */ + [0x5b66, 0x5b66], /* CJK Ideograph */ + [0x5b67, 0x5b67], /* CJK Ideograph */ + [0x5b68, 0x5b68], /* CJK Ideograph */ + [0x5b69, 0x5b69], /* CJK Ideograph */ + [0x5b6a, 0x5b6a], /* CJK Ideograph */ + [0x5b6b, 0x5b6b], /* CJK Ideograph */ + [0x5b6c, 0x5b6c], /* CJK Ideograph */ + [0x5b6d, 0x5b6d], /* CJK Ideograph */ + [0x5b6e, 0x5b6e], /* CJK Ideograph */ + [0x5b6f, 0x5b6f], /* CJK Ideograph */ + [0x5b70, 0x5b70], /* CJK Ideograph */ + [0x5b71, 0x5b71], /* CJK Ideograph */ + [0x5b72, 0x5b72], /* CJK Ideograph */ + [0x5b73, 0x5b73], /* CJK Ideograph */ + [0x5b74, 0x5b74], /* CJK Ideograph */ + [0x5b75, 0x5b75], /* CJK Ideograph */ + [0x5b76, 0x5b76], /* CJK Ideograph */ + [0x5b77, 0x5b77], /* CJK Ideograph */ + [0x5b78, 0x5b78], /* CJK Ideograph */ + [0x5b79, 0x5b79], /* CJK Ideograph */ + [0x5b7a, 0x5b7a], /* CJK Ideograph */ + [0x5b7b, 0x5b7b], /* CJK Ideograph */ + [0x5b7c, 0x5b7c], /* CJK Ideograph */ + [0x5b7d, 0x5b7d], /* CJK Ideograph */ + [0x5b7e, 0x5b7e], /* CJK Ideograph */ + [0x5b7f, 0x5b7f], /* CJK Ideograph */ + [0x5b80, 0x5b80], /* CJK Ideograph */ + [0x5b81, 0x5b81], /* CJK Ideograph */ + [0x5b82, 0x5b82], /* CJK Ideograph */ + [0x5b83, 0x5b83], /* CJK Ideograph */ + [0x5b84, 0x5b84], /* CJK Ideograph */ + [0x5b85, 0x5b85], /* CJK Ideograph */ + [0x5b86, 0x5b86], /* CJK Ideograph */ + [0x5b87, 0x5b87], /* CJK Ideograph */ + [0x5b88, 0x5b88], /* CJK Ideograph */ + [0x5b89, 0x5b89], /* CJK Ideograph */ + [0x5b8a, 0x5b8a], /* CJK Ideograph */ + [0x5b8b, 0x5b8b], /* CJK Ideograph */ + [0x5b8c, 0x5b8c], /* CJK Ideograph */ + [0x5b8d, 0x5b8d], /* CJK Ideograph */ + [0x5b8e, 0x5b8e], /* CJK Ideograph */ + [0x5b8f, 0x5b8f], /* CJK Ideograph */ + [0x5b90, 0x5b90], /* CJK Ideograph */ + [0x5b91, 0x5b91], /* CJK Ideograph */ + [0x5b92, 0x5b92], /* CJK Ideograph */ + [0x5b93, 0x5b93], /* CJK Ideograph */ + [0x5b94, 0x5b94], /* CJK Ideograph */ + [0x5b95, 0x5b95], /* CJK Ideograph */ + [0x5b96, 0x5b96], /* CJK Ideograph */ + [0x5b97, 0x5b97], /* CJK Ideograph */ + [0x5b98, 0x5b98], /* CJK Ideograph */ + [0x5b99, 0x5b99], /* CJK Ideograph */ + [0x5b9a, 0x5b9a], /* CJK Ideograph */ + [0x5b9b, 0x5b9b], /* CJK Ideograph */ + [0x5b9c, 0x5b9c], /* CJK Ideograph */ + [0x5b9d, 0x5b9d], /* CJK Ideograph */ + [0x5b9e, 0x5b9e], /* CJK Ideograph */ + [0x5b9f, 0x5b9f], /* CJK Ideograph */ + [0x5ba0, 0x5ba0], /* CJK Ideograph */ + [0x5ba1, 0x5ba1], /* CJK Ideograph */ + [0x5ba2, 0x5ba2], /* CJK Ideograph */ + [0x5ba3, 0x5ba3], /* CJK Ideograph */ + [0x5ba4, 0x5ba4], /* CJK Ideograph */ + [0x5ba5, 0x5ba5], /* CJK Ideograph */ + [0x5ba6, 0x5ba6], /* CJK Ideograph */ + [0x5ba7, 0x5ba7], /* CJK Ideograph */ + [0x5ba8, 0x5ba8], /* CJK Ideograph */ + [0x5ba9, 0x5ba9], /* CJK Ideograph */ + [0x5baa, 0x5baa], /* CJK Ideograph */ + [0x5bab, 0x5bab], /* CJK Ideograph */ + [0x5bac, 0x5bac], /* CJK Ideograph */ + [0x5bad, 0x5bad], /* CJK Ideograph */ + [0x5bae, 0x5bae], /* CJK Ideograph */ + [0x5baf, 0x5baf], /* CJK Ideograph */ + [0x5bb0, 0x5bb0], /* CJK Ideograph */ + [0x5bb1, 0x5bb1], /* CJK Ideograph */ + [0x5bb2, 0x5bb2], /* CJK Ideograph */ + [0x5bb3, 0x5bb3], /* CJK Ideograph */ + [0x5bb4, 0x5bb4], /* CJK Ideograph */ + [0x5bb5, 0x5bb5], /* CJK Ideograph */ + [0x5bb6, 0x5bb6], /* CJK Ideograph */ + [0x5bb7, 0x5bb7], /* CJK Ideograph */ + [0x5bb8, 0x5bb8], /* CJK Ideograph */ + [0x5bb9, 0x5bb9], /* CJK Ideograph */ + [0x5bba, 0x5bba], /* CJK Ideograph */ + [0x5bbb, 0x5bbb], /* CJK Ideograph */ + [0x5bbc, 0x5bbc], /* CJK Ideograph */ + [0x5bbd, 0x5bbd], /* CJK Ideograph */ + [0x5bbe, 0x5bbe], /* CJK Ideograph */ + [0x5bbf, 0x5bbf], /* CJK Ideograph */ + [0x5bc0, 0x5bc0], /* CJK Ideograph */ + [0x5bc1, 0x5bc1], /* CJK Ideograph */ + [0x5bc2, 0x5bc2], /* CJK Ideograph */ + [0x5bc3, 0x5bc3], /* CJK Ideograph */ + [0x5bc4, 0x5bc4], /* CJK Ideograph */ + [0x5bc5, 0x5bc5], /* CJK Ideograph */ + [0x5bc6, 0x5bc6], /* CJK Ideograph */ + [0x5bc7, 0x5bc7], /* CJK Ideograph */ + [0x5bc8, 0x5bc8], /* CJK Ideograph */ + [0x5bc9, 0x5bc9], /* CJK Ideograph */ + [0x5bca, 0x5bca], /* CJK Ideograph */ + [0x5bcb, 0x5bcb], /* CJK Ideograph */ + [0x5bcc, 0x5bcc], /* CJK Ideograph */ + [0x5bcd, 0x5bcd], /* CJK Ideograph */ + [0x5bce, 0x5bce], /* CJK Ideograph */ + [0x5bcf, 0x5bcf], /* CJK Ideograph */ + [0x5bd0, 0x5bd0], /* CJK Ideograph */ + [0x5bd1, 0x5bd1], /* CJK Ideograph */ + [0x5bd2, 0x5bd2], /* CJK Ideograph */ + [0x5bd3, 0x5bd3], /* CJK Ideograph */ + [0x5bd4, 0x5bd4], /* CJK Ideograph */ + [0x5bd5, 0x5bd5], /* CJK Ideograph */ + [0x5bd6, 0x5bd6], /* CJK Ideograph */ + [0x5bd7, 0x5bd7], /* CJK Ideograph */ + [0x5bd8, 0x5bd8], /* CJK Ideograph */ + [0x5bd9, 0x5bd9], /* CJK Ideograph */ + [0x5bda, 0x5bda], /* CJK Ideograph */ + [0x5bdb, 0x5bdb], /* CJK Ideograph */ + [0x5bdc, 0x5bdc], /* CJK Ideograph */ + [0x5bdd, 0x5bdd], /* CJK Ideograph */ + [0x5bde, 0x5bde], /* CJK Ideograph */ + [0x5bdf, 0x5bdf], /* CJK Ideograph */ + [0x5be0, 0x5be0], /* CJK Ideograph */ + [0x5be1, 0x5be1], /* CJK Ideograph */ + [0x5be2, 0x5be2], /* CJK Ideograph */ + [0x5be3, 0x5be3], /* CJK Ideograph */ + [0x5be4, 0x5be4], /* CJK Ideograph */ + [0x5be5, 0x5be5], /* CJK Ideograph */ + [0x5be6, 0x5be6], /* CJK Ideograph */ + [0x5be7, 0x5be7], /* CJK Ideograph */ + [0x5be8, 0x5be8], /* CJK Ideograph */ + [0x5be9, 0x5be9], /* CJK Ideograph */ + [0x5bea, 0x5bea], /* CJK Ideograph */ + [0x5beb, 0x5beb], /* CJK Ideograph */ + [0x5bec, 0x5bec], /* CJK Ideograph */ + [0x5bed, 0x5bed], /* CJK Ideograph */ + [0x5bee, 0x5bee], /* CJK Ideograph */ + [0x5bef, 0x5bef], /* CJK Ideograph */ + [0x5bf0, 0x5bf0], /* CJK Ideograph */ + [0x5bf1, 0x5bf1], /* CJK Ideograph */ + [0x5bf2, 0x5bf2], /* CJK Ideograph */ + [0x5bf3, 0x5bf3], /* CJK Ideograph */ + [0x5bf4, 0x5bf4], /* CJK Ideograph */ + [0x5bf5, 0x5bf5], /* CJK Ideograph */ + [0x5bf6, 0x5bf6], /* CJK Ideograph */ + [0x5bf7, 0x5bf7], /* CJK Ideograph */ + [0x5bf8, 0x5bf8], /* CJK Ideograph */ + [0x5bf9, 0x5bf9], /* CJK Ideograph */ + [0x5bfa, 0x5bfa], /* CJK Ideograph */ + [0x5bfb, 0x5bfb], /* CJK Ideograph */ + [0x5bfc, 0x5bfc], /* CJK Ideograph */ + [0x5bfd, 0x5bfd], /* CJK Ideograph */ + [0x5bfe, 0x5bfe], /* CJK Ideograph */ + [0x5bff, 0x5bff], /* CJK Ideograph */ + [0x5c00, 0x5c00], /* CJK Ideograph */ + [0x5c01, 0x5c01], /* CJK Ideograph */ + [0x5c02, 0x5c02], /* CJK Ideograph */ + [0x5c03, 0x5c03], /* CJK Ideograph */ + [0x5c04, 0x5c04], /* CJK Ideograph */ + [0x5c05, 0x5c05], /* CJK Ideograph */ + [0x5c06, 0x5c06], /* CJK Ideograph */ + [0x5c07, 0x5c07], /* CJK Ideograph */ + [0x5c08, 0x5c08], /* CJK Ideograph */ + [0x5c09, 0x5c09], /* CJK Ideograph */ + [0x5c0a, 0x5c0a], /* CJK Ideograph */ + [0x5c0b, 0x5c0b], /* CJK Ideograph */ + [0x5c0c, 0x5c0c], /* CJK Ideograph */ + [0x5c0d, 0x5c0d], /* CJK Ideograph */ + [0x5c0e, 0x5c0e], /* CJK Ideograph */ + [0x5c0f, 0x5c0f], /* CJK Ideograph */ + [0x5c10, 0x5c10], /* CJK Ideograph */ + [0x5c11, 0x5c11], /* CJK Ideograph */ + [0x5c12, 0x5c12], /* CJK Ideograph */ + [0x5c13, 0x5c13], /* CJK Ideograph */ + [0x5c14, 0x5c14], /* CJK Ideograph */ + [0x5c15, 0x5c15], /* CJK Ideograph */ + [0x5c16, 0x5c16], /* CJK Ideograph */ + [0x5c17, 0x5c17], /* CJK Ideograph */ + [0x5c18, 0x5c18], /* CJK Ideograph */ + [0x5c19, 0x5c19], /* CJK Ideograph */ + [0x5c1a, 0x5c1a], /* CJK Ideograph */ + [0x5c1b, 0x5c1b], /* CJK Ideograph */ + [0x5c1c, 0x5c1c], /* CJK Ideograph */ + [0x5c1d, 0x5c1d], /* CJK Ideograph */ + [0x5c1e, 0x5c1e], /* CJK Ideograph */ + [0x5c1f, 0x5c1f], /* CJK Ideograph */ + [0x5c20, 0x5c20], /* CJK Ideograph */ + [0x5c21, 0x5c21], /* CJK Ideograph */ + [0x5c22, 0x5c22], /* CJK Ideograph */ + [0x5c23, 0x5c23], /* CJK Ideograph */ + [0x5c24, 0x5c24], /* CJK Ideograph */ + [0x5c25, 0x5c25], /* CJK Ideograph */ + [0x5c26, 0x5c26], /* CJK Ideograph */ + [0x5c27, 0x5c27], /* CJK Ideograph */ + [0x5c28, 0x5c28], /* CJK Ideograph */ + [0x5c29, 0x5c29], /* CJK Ideograph */ + [0x5c2a, 0x5c2a], /* CJK Ideograph */ + [0x5c2b, 0x5c2b], /* CJK Ideograph */ + [0x5c2c, 0x5c2c], /* CJK Ideograph */ + [0x5c2d, 0x5c2d], /* CJK Ideograph */ + [0x5c2e, 0x5c2e], /* CJK Ideograph */ + [0x5c2f, 0x5c2f], /* CJK Ideograph */ + [0x5c30, 0x5c30], /* CJK Ideograph */ + [0x5c31, 0x5c31], /* CJK Ideograph */ + [0x5c32, 0x5c32], /* CJK Ideograph */ + [0x5c33, 0x5c33], /* CJK Ideograph */ + [0x5c34, 0x5c34], /* CJK Ideograph */ + [0x5c35, 0x5c35], /* CJK Ideograph */ + [0x5c36, 0x5c36], /* CJK Ideograph */ + [0x5c37, 0x5c37], /* CJK Ideograph */ + [0x5c38, 0x5c38], /* CJK Ideograph */ + [0x5c39, 0x5c39], /* CJK Ideograph */ + [0x5c3a, 0x5c3a], /* CJK Ideograph */ + [0x5c3b, 0x5c3b], /* CJK Ideograph */ + [0x5c3c, 0x5c3c], /* CJK Ideograph */ + [0x5c3d, 0x5c3d], /* CJK Ideograph */ + [0x5c3e, 0x5c3e], /* CJK Ideograph */ + [0x5c3f, 0x5c3f], /* CJK Ideograph */ + [0x5c40, 0x5c40], /* CJK Ideograph */ + [0x5c41, 0x5c41], /* CJK Ideograph */ + [0x5c42, 0x5c42], /* CJK Ideograph */ + [0x5c43, 0x5c43], /* CJK Ideograph */ + [0x5c44, 0x5c44], /* CJK Ideograph */ + [0x5c45, 0x5c45], /* CJK Ideograph */ + [0x5c46, 0x5c46], /* CJK Ideograph */ + [0x5c47, 0x5c47], /* CJK Ideograph */ + [0x5c48, 0x5c48], /* CJK Ideograph */ + [0x5c49, 0x5c49], /* CJK Ideograph */ + [0x5c4a, 0x5c4a], /* CJK Ideograph */ + [0x5c4b, 0x5c4b], /* CJK Ideograph */ + [0x5c4c, 0x5c4c], /* CJK Ideograph */ + [0x5c4d, 0x5c4d], /* CJK Ideograph */ + [0x5c4e, 0x5c4e], /* CJK Ideograph */ + [0x5c4f, 0x5c4f], /* CJK Ideograph */ + [0x5c50, 0x5c50], /* CJK Ideograph */ + [0x5c51, 0x5c51], /* CJK Ideograph */ + [0x5c52, 0x5c52], /* CJK Ideograph */ + [0x5c53, 0x5c53], /* CJK Ideograph */ + [0x5c54, 0x5c54], /* CJK Ideograph */ + [0x5c55, 0x5c55], /* CJK Ideograph */ + [0x5c56, 0x5c56], /* CJK Ideograph */ + [0x5c57, 0x5c57], /* CJK Ideograph */ + [0x5c58, 0x5c58], /* CJK Ideograph */ + [0x5c59, 0x5c59], /* CJK Ideograph */ + [0x5c5a, 0x5c5a], /* CJK Ideograph */ + [0x5c5b, 0x5c5b], /* CJK Ideograph */ + [0x5c5c, 0x5c5c], /* CJK Ideograph */ + [0x5c5d, 0x5c5d], /* CJK Ideograph */ + [0x5c5e, 0x5c5e], /* CJK Ideograph */ + [0x5c5f, 0x5c5f], /* CJK Ideograph */ + [0x5c60, 0x5c60], /* CJK Ideograph */ + [0x5c61, 0x5c61], /* CJK Ideograph */ + [0x5c62, 0x5c62], /* CJK Ideograph */ + [0x5c63, 0x5c63], /* CJK Ideograph */ + [0x5c64, 0x5c64], /* CJK Ideograph */ + [0x5c65, 0x5c65], /* CJK Ideograph */ + [0x5c66, 0x5c66], /* CJK Ideograph */ + [0x5c67, 0x5c67], /* CJK Ideograph */ + [0x5c68, 0x5c68], /* CJK Ideograph */ + [0x5c69, 0x5c69], /* CJK Ideograph */ + [0x5c6a, 0x5c6a], /* CJK Ideograph */ + [0x5c6b, 0x5c6b], /* CJK Ideograph */ + [0x5c6c, 0x5c6c], /* CJK Ideograph */ + [0x5c6d, 0x5c6d], /* CJK Ideograph */ + [0x5c6e, 0x5c6e], /* CJK Ideograph */ + [0x5c6f, 0x5c6f], /* CJK Ideograph */ + [0x5c70, 0x5c70], /* CJK Ideograph */ + [0x5c71, 0x5c71], /* CJK Ideograph */ + [0x5c72, 0x5c72], /* CJK Ideograph */ + [0x5c73, 0x5c73], /* CJK Ideograph */ + [0x5c74, 0x5c74], /* CJK Ideograph */ + [0x5c75, 0x5c75], /* CJK Ideograph */ + [0x5c76, 0x5c76], /* CJK Ideograph */ + [0x5c77, 0x5c77], /* CJK Ideograph */ + [0x5c78, 0x5c78], /* CJK Ideograph */ + [0x5c79, 0x5c79], /* CJK Ideograph */ + [0x5c7a, 0x5c7a], /* CJK Ideograph */ + [0x5c7b, 0x5c7b], /* CJK Ideograph */ + [0x5c7c, 0x5c7c], /* CJK Ideograph */ + [0x5c7d, 0x5c7d], /* CJK Ideograph */ + [0x5c7e, 0x5c7e], /* CJK Ideograph */ + [0x5c7f, 0x5c7f], /* CJK Ideograph */ + [0x5c80, 0x5c80], /* CJK Ideograph */ + [0x5c81, 0x5c81], /* CJK Ideograph */ + [0x5c82, 0x5c82], /* CJK Ideograph */ + [0x5c83, 0x5c83], /* CJK Ideograph */ + [0x5c84, 0x5c84], /* CJK Ideograph */ + [0x5c85, 0x5c85], /* CJK Ideograph */ + [0x5c86, 0x5c86], /* CJK Ideograph */ + [0x5c87, 0x5c87], /* CJK Ideograph */ + [0x5c88, 0x5c88], /* CJK Ideograph */ + [0x5c89, 0x5c89], /* CJK Ideograph */ + [0x5c8a, 0x5c8a], /* CJK Ideograph */ + [0x5c8b, 0x5c8b], /* CJK Ideograph */ + [0x5c8c, 0x5c8c], /* CJK Ideograph */ + [0x5c8d, 0x5c8d], /* CJK Ideograph */ + [0x5c8e, 0x5c8e], /* CJK Ideograph */ + [0x5c8f, 0x5c8f], /* CJK Ideograph */ + [0x5c90, 0x5c90], /* CJK Ideograph */ + [0x5c91, 0x5c91], /* CJK Ideograph */ + [0x5c92, 0x5c92], /* CJK Ideograph */ + [0x5c93, 0x5c93], /* CJK Ideograph */ + [0x5c94, 0x5c94], /* CJK Ideograph */ + [0x5c95, 0x5c95], /* CJK Ideograph */ + [0x5c96, 0x5c96], /* CJK Ideograph */ + [0x5c97, 0x5c97], /* CJK Ideograph */ + [0x5c98, 0x5c98], /* CJK Ideograph */ + [0x5c99, 0x5c99], /* CJK Ideograph */ + [0x5c9a, 0x5c9a], /* CJK Ideograph */ + [0x5c9b, 0x5c9b], /* CJK Ideograph */ + [0x5c9c, 0x5c9c], /* CJK Ideograph */ + [0x5c9d, 0x5c9d], /* CJK Ideograph */ + [0x5c9e, 0x5c9e], /* CJK Ideograph */ + [0x5c9f, 0x5c9f], /* CJK Ideograph */ + [0x5ca0, 0x5ca0], /* CJK Ideograph */ + [0x5ca1, 0x5ca1], /* CJK Ideograph */ + [0x5ca2, 0x5ca2], /* CJK Ideograph */ + [0x5ca3, 0x5ca3], /* CJK Ideograph */ + [0x5ca4, 0x5ca4], /* CJK Ideograph */ + [0x5ca5, 0x5ca5], /* CJK Ideograph */ + [0x5ca6, 0x5ca6], /* CJK Ideograph */ + [0x5ca7, 0x5ca7], /* CJK Ideograph */ + [0x5ca8, 0x5ca8], /* CJK Ideograph */ + [0x5ca9, 0x5ca9], /* CJK Ideograph */ + [0x5caa, 0x5caa], /* CJK Ideograph */ + [0x5cab, 0x5cab], /* CJK Ideograph */ + [0x5cac, 0x5cac], /* CJK Ideograph */ + [0x5cad, 0x5cad], /* CJK Ideograph */ + [0x5cae, 0x5cae], /* CJK Ideograph */ + [0x5caf, 0x5caf], /* CJK Ideograph */ + [0x5cb0, 0x5cb0], /* CJK Ideograph */ + [0x5cb1, 0x5cb1], /* CJK Ideograph */ + [0x5cb2, 0x5cb2], /* CJK Ideograph */ + [0x5cb3, 0x5cb3], /* CJK Ideograph */ + [0x5cb4, 0x5cb4], /* CJK Ideograph */ + [0x5cb5, 0x5cb5], /* CJK Ideograph */ + [0x5cb6, 0x5cb6], /* CJK Ideograph */ + [0x5cb7, 0x5cb7], /* CJK Ideograph */ + [0x5cb8, 0x5cb8], /* CJK Ideograph */ + [0x5cb9, 0x5cb9], /* CJK Ideograph */ + [0x5cba, 0x5cba], /* CJK Ideograph */ + [0x5cbb, 0x5cbb], /* CJK Ideograph */ + [0x5cbc, 0x5cbc], /* CJK Ideograph */ + [0x5cbd, 0x5cbd], /* CJK Ideograph */ + [0x5cbe, 0x5cbe], /* CJK Ideograph */ + [0x5cbf, 0x5cbf], /* CJK Ideograph */ + [0x5cc0, 0x5cc0], /* CJK Ideograph */ + [0x5cc1, 0x5cc1], /* CJK Ideograph */ + [0x5cc2, 0x5cc2], /* CJK Ideograph */ + [0x5cc3, 0x5cc3], /* CJK Ideograph */ + [0x5cc4, 0x5cc4], /* CJK Ideograph */ + [0x5cc5, 0x5cc5], /* CJK Ideograph */ + [0x5cc6, 0x5cc6], /* CJK Ideograph */ + [0x5cc7, 0x5cc7], /* CJK Ideograph */ + [0x5cc8, 0x5cc8], /* CJK Ideograph */ + [0x5cc9, 0x5cc9], /* CJK Ideograph */ + [0x5cca, 0x5cca], /* CJK Ideograph */ + [0x5ccb, 0x5ccb], /* CJK Ideograph */ + [0x5ccc, 0x5ccc], /* CJK Ideograph */ + [0x5ccd, 0x5ccd], /* CJK Ideograph */ + [0x5cce, 0x5cce], /* CJK Ideograph */ + [0x5ccf, 0x5ccf], /* CJK Ideograph */ + [0x5cd0, 0x5cd0], /* CJK Ideograph */ + [0x5cd1, 0x5cd1], /* CJK Ideograph */ + [0x5cd2, 0x5cd2], /* CJK Ideograph */ + [0x5cd3, 0x5cd3], /* CJK Ideograph */ + [0x5cd4, 0x5cd4], /* CJK Ideograph */ + [0x5cd5, 0x5cd5], /* CJK Ideograph */ + [0x5cd6, 0x5cd6], /* CJK Ideograph */ + [0x5cd7, 0x5cd7], /* CJK Ideograph */ + [0x5cd8, 0x5cd8], /* CJK Ideograph */ + [0x5cd9, 0x5cd9], /* CJK Ideograph */ + [0x5cda, 0x5cda], /* CJK Ideograph */ + [0x5cdb, 0x5cdb], /* CJK Ideograph */ + [0x5cdc, 0x5cdc], /* CJK Ideograph */ + [0x5cdd, 0x5cdd], /* CJK Ideograph */ + [0x5cde, 0x5cde], /* CJK Ideograph */ + [0x5cdf, 0x5cdf], /* CJK Ideograph */ + [0x5ce0, 0x5ce0], /* CJK Ideograph */ + [0x5ce1, 0x5ce1], /* CJK Ideograph */ + [0x5ce2, 0x5ce2], /* CJK Ideograph */ + [0x5ce3, 0x5ce3], /* CJK Ideograph */ + [0x5ce4, 0x5ce4], /* CJK Ideograph */ + [0x5ce5, 0x5ce5], /* CJK Ideograph */ + [0x5ce6, 0x5ce6], /* CJK Ideograph */ + [0x5ce7, 0x5ce7], /* CJK Ideograph */ + [0x5ce8, 0x5ce8], /* CJK Ideograph */ + [0x5ce9, 0x5ce9], /* CJK Ideograph */ + [0x5cea, 0x5cea], /* CJK Ideograph */ + [0x5ceb, 0x5ceb], /* CJK Ideograph */ + [0x5cec, 0x5cec], /* CJK Ideograph */ + [0x5ced, 0x5ced], /* CJK Ideograph */ + [0x5cee, 0x5cee], /* CJK Ideograph */ + [0x5cef, 0x5cef], /* CJK Ideograph */ + [0x5cf0, 0x5cf0], /* CJK Ideograph */ + [0x5cf1, 0x5cf1], /* CJK Ideograph */ + [0x5cf2, 0x5cf2], /* CJK Ideograph */ + [0x5cf3, 0x5cf3], /* CJK Ideograph */ + [0x5cf4, 0x5cf4], /* CJK Ideograph */ + [0x5cf5, 0x5cf5], /* CJK Ideograph */ + [0x5cf6, 0x5cf6], /* CJK Ideograph */ + [0x5cf7, 0x5cf7], /* CJK Ideograph */ + [0x5cf8, 0x5cf8], /* CJK Ideograph */ + [0x5cf9, 0x5cf9], /* CJK Ideograph */ + [0x5cfa, 0x5cfa], /* CJK Ideograph */ + [0x5cfb, 0x5cfb], /* CJK Ideograph */ + [0x5cfc, 0x5cfc], /* CJK Ideograph */ + [0x5cfd, 0x5cfd], /* CJK Ideograph */ + [0x5cfe, 0x5cfe], /* CJK Ideograph */ + [0x5cff, 0x5cff], /* CJK Ideograph */ + [0x5d00, 0x5d00], /* CJK Ideograph */ + [0x5d01, 0x5d01], /* CJK Ideograph */ + [0x5d02, 0x5d02], /* CJK Ideograph */ + [0x5d03, 0x5d03], /* CJK Ideograph */ + [0x5d04, 0x5d04], /* CJK Ideograph */ + [0x5d05, 0x5d05], /* CJK Ideograph */ + [0x5d06, 0x5d06], /* CJK Ideograph */ + [0x5d07, 0x5d07], /* CJK Ideograph */ + [0x5d08, 0x5d08], /* CJK Ideograph */ + [0x5d09, 0x5d09], /* CJK Ideograph */ + [0x5d0a, 0x5d0a], /* CJK Ideograph */ + [0x5d0b, 0x5d0b], /* CJK Ideograph */ + [0x5d0c, 0x5d0c], /* CJK Ideograph */ + [0x5d0d, 0x5d0d], /* CJK Ideograph */ + [0x5d0e, 0x5d0e], /* CJK Ideograph */ + [0x5d0f, 0x5d0f], /* CJK Ideograph */ + [0x5d10, 0x5d10], /* CJK Ideograph */ + [0x5d11, 0x5d11], /* CJK Ideograph */ + [0x5d12, 0x5d12], /* CJK Ideograph */ + [0x5d13, 0x5d13], /* CJK Ideograph */ + [0x5d14, 0x5d14], /* CJK Ideograph */ + [0x5d15, 0x5d15], /* CJK Ideograph */ + [0x5d16, 0x5d16], /* CJK Ideograph */ + [0x5d17, 0x5d17], /* CJK Ideograph */ + [0x5d18, 0x5d18], /* CJK Ideograph */ + [0x5d19, 0x5d19], /* CJK Ideograph */ + [0x5d1a, 0x5d1a], /* CJK Ideograph */ + [0x5d1b, 0x5d1b], /* CJK Ideograph */ + [0x5d1c, 0x5d1c], /* CJK Ideograph */ + [0x5d1d, 0x5d1d], /* CJK Ideograph */ + [0x5d1e, 0x5d1e], /* CJK Ideograph */ + [0x5d1f, 0x5d1f], /* CJK Ideograph */ + [0x5d20, 0x5d20], /* CJK Ideograph */ + [0x5d21, 0x5d21], /* CJK Ideograph */ + [0x5d22, 0x5d22], /* CJK Ideograph */ + [0x5d23, 0x5d23], /* CJK Ideograph */ + [0x5d24, 0x5d24], /* CJK Ideograph */ + [0x5d25, 0x5d25], /* CJK Ideograph */ + [0x5d26, 0x5d26], /* CJK Ideograph */ + [0x5d27, 0x5d27], /* CJK Ideograph */ + [0x5d28, 0x5d28], /* CJK Ideograph */ + [0x5d29, 0x5d29], /* CJK Ideograph */ + [0x5d2a, 0x5d2a], /* CJK Ideograph */ + [0x5d2b, 0x5d2b], /* CJK Ideograph */ + [0x5d2c, 0x5d2c], /* CJK Ideograph */ + [0x5d2d, 0x5d2d], /* CJK Ideograph */ + [0x5d2e, 0x5d2e], /* CJK Ideograph */ + [0x5d2f, 0x5d2f], /* CJK Ideograph */ + [0x5d30, 0x5d30], /* CJK Ideograph */ + [0x5d31, 0x5d31], /* CJK Ideograph */ + [0x5d32, 0x5d32], /* CJK Ideograph */ + [0x5d33, 0x5d33], /* CJK Ideograph */ + [0x5d34, 0x5d34], /* CJK Ideograph */ + [0x5d35, 0x5d35], /* CJK Ideograph */ + [0x5d36, 0x5d36], /* CJK Ideograph */ + [0x5d37, 0x5d37], /* CJK Ideograph */ + [0x5d38, 0x5d38], /* CJK Ideograph */ + [0x5d39, 0x5d39], /* CJK Ideograph */ + [0x5d3a, 0x5d3a], /* CJK Ideograph */ + [0x5d3b, 0x5d3b], /* CJK Ideograph */ + [0x5d3c, 0x5d3c], /* CJK Ideograph */ + [0x5d3d, 0x5d3d], /* CJK Ideograph */ + [0x5d3e, 0x5d3e], /* CJK Ideograph */ + [0x5d3f, 0x5d3f], /* CJK Ideograph */ + [0x5d40, 0x5d40], /* CJK Ideograph */ + [0x5d41, 0x5d41], /* CJK Ideograph */ + [0x5d42, 0x5d42], /* CJK Ideograph */ + [0x5d43, 0x5d43], /* CJK Ideograph */ + [0x5d44, 0x5d44], /* CJK Ideograph */ + [0x5d45, 0x5d45], /* CJK Ideograph */ + [0x5d46, 0x5d46], /* CJK Ideograph */ + [0x5d47, 0x5d47], /* CJK Ideograph */ + [0x5d48, 0x5d48], /* CJK Ideograph */ + [0x5d49, 0x5d49], /* CJK Ideograph */ + [0x5d4a, 0x5d4a], /* CJK Ideograph */ + [0x5d4b, 0x5d4b], /* CJK Ideograph */ + [0x5d4c, 0x5d4c], /* CJK Ideograph */ + [0x5d4d, 0x5d4d], /* CJK Ideograph */ + [0x5d4e, 0x5d4e], /* CJK Ideograph */ + [0x5d4f, 0x5d4f], /* CJK Ideograph */ + [0x5d50, 0x5d50], /* CJK Ideograph */ + [0x5d51, 0x5d51], /* CJK Ideograph */ + [0x5d52, 0x5d52], /* CJK Ideograph */ + [0x5d53, 0x5d53], /* CJK Ideograph */ + [0x5d54, 0x5d54], /* CJK Ideograph */ + [0x5d55, 0x5d55], /* CJK Ideograph */ + [0x5d56, 0x5d56], /* CJK Ideograph */ + [0x5d57, 0x5d57], /* CJK Ideograph */ + [0x5d58, 0x5d58], /* CJK Ideograph */ + [0x5d59, 0x5d59], /* CJK Ideograph */ + [0x5d5a, 0x5d5a], /* CJK Ideograph */ + [0x5d5b, 0x5d5b], /* CJK Ideograph */ + [0x5d5c, 0x5d5c], /* CJK Ideograph */ + [0x5d5d, 0x5d5d], /* CJK Ideograph */ + [0x5d5e, 0x5d5e], /* CJK Ideograph */ + [0x5d5f, 0x5d5f], /* CJK Ideograph */ + [0x5d60, 0x5d60], /* CJK Ideograph */ + [0x5d61, 0x5d61], /* CJK Ideograph */ + [0x5d62, 0x5d62], /* CJK Ideograph */ + [0x5d63, 0x5d63], /* CJK Ideograph */ + [0x5d64, 0x5d64], /* CJK Ideograph */ + [0x5d65, 0x5d65], /* CJK Ideograph */ + [0x5d66, 0x5d66], /* CJK Ideograph */ + [0x5d67, 0x5d67], /* CJK Ideograph */ + [0x5d68, 0x5d68], /* CJK Ideograph */ + [0x5d69, 0x5d69], /* CJK Ideograph */ + [0x5d6a, 0x5d6a], /* CJK Ideograph */ + [0x5d6b, 0x5d6b], /* CJK Ideograph */ + [0x5d6c, 0x5d6c], /* CJK Ideograph */ + [0x5d6d, 0x5d6d], /* CJK Ideograph */ + [0x5d6e, 0x5d6e], /* CJK Ideograph */ + [0x5d6f, 0x5d6f], /* CJK Ideograph */ + [0x5d70, 0x5d70], /* CJK Ideograph */ + [0x5d71, 0x5d71], /* CJK Ideograph */ + [0x5d72, 0x5d72], /* CJK Ideograph */ + [0x5d73, 0x5d73], /* CJK Ideograph */ + [0x5d74, 0x5d74], /* CJK Ideograph */ + [0x5d75, 0x5d75], /* CJK Ideograph */ + [0x5d76, 0x5d76], /* CJK Ideograph */ + [0x5d77, 0x5d77], /* CJK Ideograph */ + [0x5d78, 0x5d78], /* CJK Ideograph */ + [0x5d79, 0x5d79], /* CJK Ideograph */ + [0x5d7a, 0x5d7a], /* CJK Ideograph */ + [0x5d7b, 0x5d7b], /* CJK Ideograph */ + [0x5d7c, 0x5d7c], /* CJK Ideograph */ + [0x5d7d, 0x5d7d], /* CJK Ideograph */ + [0x5d7e, 0x5d7e], /* CJK Ideograph */ + [0x5d7f, 0x5d7f], /* CJK Ideograph */ + [0x5d80, 0x5d80], /* CJK Ideograph */ + [0x5d81, 0x5d81], /* CJK Ideograph */ + [0x5d82, 0x5d82], /* CJK Ideograph */ + [0x5d83, 0x5d83], /* CJK Ideograph */ + [0x5d84, 0x5d84], /* CJK Ideograph */ + [0x5d85, 0x5d85], /* CJK Ideograph */ + [0x5d86, 0x5d86], /* CJK Ideograph */ + [0x5d87, 0x5d87], /* CJK Ideograph */ + [0x5d88, 0x5d88], /* CJK Ideograph */ + [0x5d89, 0x5d89], /* CJK Ideograph */ + [0x5d8a, 0x5d8a], /* CJK Ideograph */ + [0x5d8b, 0x5d8b], /* CJK Ideograph */ + [0x5d8c, 0x5d8c], /* CJK Ideograph */ + [0x5d8d, 0x5d8d], /* CJK Ideograph */ + [0x5d8e, 0x5d8e], /* CJK Ideograph */ + [0x5d8f, 0x5d8f], /* CJK Ideograph */ + [0x5d90, 0x5d90], /* CJK Ideograph */ + [0x5d91, 0x5d91], /* CJK Ideograph */ + [0x5d92, 0x5d92], /* CJK Ideograph */ + [0x5d93, 0x5d93], /* CJK Ideograph */ + [0x5d94, 0x5d94], /* CJK Ideograph */ + [0x5d95, 0x5d95], /* CJK Ideograph */ + [0x5d96, 0x5d96], /* CJK Ideograph */ + [0x5d97, 0x5d97], /* CJK Ideograph */ + [0x5d98, 0x5d98], /* CJK Ideograph */ + [0x5d99, 0x5d99], /* CJK Ideograph */ + [0x5d9a, 0x5d9a], /* CJK Ideograph */ + [0x5d9b, 0x5d9b], /* CJK Ideograph */ + [0x5d9c, 0x5d9c], /* CJK Ideograph */ + [0x5d9d, 0x5d9d], /* CJK Ideograph */ + [0x5d9e, 0x5d9e], /* CJK Ideograph */ + [0x5d9f, 0x5d9f], /* CJK Ideograph */ + [0x5da0, 0x5da0], /* CJK Ideograph */ + [0x5da1, 0x5da1], /* CJK Ideograph */ + [0x5da2, 0x5da2], /* CJK Ideograph */ + [0x5da3, 0x5da3], /* CJK Ideograph */ + [0x5da4, 0x5da4], /* CJK Ideograph */ + [0x5da5, 0x5da5], /* CJK Ideograph */ + [0x5da6, 0x5da6], /* CJK Ideograph */ + [0x5da7, 0x5da7], /* CJK Ideograph */ + [0x5da8, 0x5da8], /* CJK Ideograph */ + [0x5da9, 0x5da9], /* CJK Ideograph */ + [0x5daa, 0x5daa], /* CJK Ideograph */ + [0x5dab, 0x5dab], /* CJK Ideograph */ + [0x5dac, 0x5dac], /* CJK Ideograph */ + [0x5dad, 0x5dad], /* CJK Ideograph */ + [0x5dae, 0x5dae], /* CJK Ideograph */ + [0x5daf, 0x5daf], /* CJK Ideograph */ + [0x5db0, 0x5db0], /* CJK Ideograph */ + [0x5db1, 0x5db1], /* CJK Ideograph */ + [0x5db2, 0x5db2], /* CJK Ideograph */ + [0x5db3, 0x5db3], /* CJK Ideograph */ + [0x5db4, 0x5db4], /* CJK Ideograph */ + [0x5db5, 0x5db5], /* CJK Ideograph */ + [0x5db6, 0x5db6], /* CJK Ideograph */ + [0x5db7, 0x5db7], /* CJK Ideograph */ + [0x5db8, 0x5db8], /* CJK Ideograph */ + [0x5db9, 0x5db9], /* CJK Ideograph */ + [0x5dba, 0x5dba], /* CJK Ideograph */ + [0x5dbb, 0x5dbb], /* CJK Ideograph */ + [0x5dbc, 0x5dbc], /* CJK Ideograph */ + [0x5dbd, 0x5dbd], /* CJK Ideograph */ + [0x5dbe, 0x5dbe], /* CJK Ideograph */ + [0x5dbf, 0x5dbf], /* CJK Ideograph */ + [0x5dc0, 0x5dc0], /* CJK Ideograph */ + [0x5dc1, 0x5dc1], /* CJK Ideograph */ + [0x5dc2, 0x5dc2], /* CJK Ideograph */ + [0x5dc3, 0x5dc3], /* CJK Ideograph */ + [0x5dc4, 0x5dc4], /* CJK Ideograph */ + [0x5dc5, 0x5dc5], /* CJK Ideograph */ + [0x5dc6, 0x5dc6], /* CJK Ideograph */ + [0x5dc7, 0x5dc7], /* CJK Ideograph */ + [0x5dc8, 0x5dc8], /* CJK Ideograph */ + [0x5dc9, 0x5dc9], /* CJK Ideograph */ + [0x5dca, 0x5dca], /* CJK Ideograph */ + [0x5dcb, 0x5dcb], /* CJK Ideograph */ + [0x5dcc, 0x5dcc], /* CJK Ideograph */ + [0x5dcd, 0x5dcd], /* CJK Ideograph */ + [0x5dce, 0x5dce], /* CJK Ideograph */ + [0x5dcf, 0x5dcf], /* CJK Ideograph */ + [0x5dd0, 0x5dd0], /* CJK Ideograph */ + [0x5dd1, 0x5dd1], /* CJK Ideograph */ + [0x5dd2, 0x5dd2], /* CJK Ideograph */ + [0x5dd3, 0x5dd3], /* CJK Ideograph */ + [0x5dd4, 0x5dd4], /* CJK Ideograph */ + [0x5dd5, 0x5dd5], /* CJK Ideograph */ + [0x5dd6, 0x5dd6], /* CJK Ideograph */ + [0x5dd7, 0x5dd7], /* CJK Ideograph */ + [0x5dd8, 0x5dd8], /* CJK Ideograph */ + [0x5dd9, 0x5dd9], /* CJK Ideograph */ + [0x5dda, 0x5dda], /* CJK Ideograph */ + [0x5ddb, 0x5ddb], /* CJK Ideograph */ + [0x5ddc, 0x5ddc], /* CJK Ideograph */ + [0x5ddd, 0x5ddd], /* CJK Ideograph */ + [0x5dde, 0x5dde], /* CJK Ideograph */ + [0x5ddf, 0x5ddf], /* CJK Ideograph */ + [0x5de0, 0x5de0], /* CJK Ideograph */ + [0x5de1, 0x5de1], /* CJK Ideograph */ + [0x5de2, 0x5de2], /* CJK Ideograph */ + [0x5de3, 0x5de3], /* CJK Ideograph */ + [0x5de4, 0x5de4], /* CJK Ideograph */ + [0x5de5, 0x5de5], /* CJK Ideograph */ + [0x5de6, 0x5de6], /* CJK Ideograph */ + [0x5de7, 0x5de7], /* CJK Ideograph */ + [0x5de8, 0x5de8], /* CJK Ideograph */ + [0x5de9, 0x5de9], /* CJK Ideograph */ + [0x5dea, 0x5dea], /* CJK Ideograph */ + [0x5deb, 0x5deb], /* CJK Ideograph */ + [0x5dec, 0x5dec], /* CJK Ideograph */ + [0x5ded, 0x5ded], /* CJK Ideograph */ + [0x5dee, 0x5dee], /* CJK Ideograph */ + [0x5def, 0x5def], /* CJK Ideograph */ + [0x5df0, 0x5df0], /* CJK Ideograph */ + [0x5df1, 0x5df1], /* CJK Ideograph */ + [0x5df2, 0x5df2], /* CJK Ideograph */ + [0x5df3, 0x5df3], /* CJK Ideograph */ + [0x5df4, 0x5df4], /* CJK Ideograph */ + [0x5df5, 0x5df5], /* CJK Ideograph */ + [0x5df6, 0x5df6], /* CJK Ideograph */ + [0x5df7, 0x5df7], /* CJK Ideograph */ + [0x5df8, 0x5df8], /* CJK Ideograph */ + [0x5df9, 0x5df9], /* CJK Ideograph */ + [0x5dfa, 0x5dfa], /* CJK Ideograph */ + [0x5dfb, 0x5dfb], /* CJK Ideograph */ + [0x5dfc, 0x5dfc], /* CJK Ideograph */ + [0x5dfd, 0x5dfd], /* CJK Ideograph */ + [0x5dfe, 0x5dfe], /* CJK Ideograph */ + [0x5dff, 0x5dff], /* CJK Ideograph */ + [0x5e00, 0x5e00], /* CJK Ideograph */ + [0x5e01, 0x5e01], /* CJK Ideograph */ + [0x5e02, 0x5e02], /* CJK Ideograph */ + [0x5e03, 0x5e03], /* CJK Ideograph */ + [0x5e04, 0x5e04], /* CJK Ideograph */ + [0x5e05, 0x5e05], /* CJK Ideograph */ + [0x5e06, 0x5e06], /* CJK Ideograph */ + [0x5e07, 0x5e07], /* CJK Ideograph */ + [0x5e08, 0x5e08], /* CJK Ideograph */ + [0x5e09, 0x5e09], /* CJK Ideograph */ + [0x5e0a, 0x5e0a], /* CJK Ideograph */ + [0x5e0b, 0x5e0b], /* CJK Ideograph */ + [0x5e0c, 0x5e0c], /* CJK Ideograph */ + [0x5e0d, 0x5e0d], /* CJK Ideograph */ + [0x5e0e, 0x5e0e], /* CJK Ideograph */ + [0x5e0f, 0x5e0f], /* CJK Ideograph */ + [0x5e10, 0x5e10], /* CJK Ideograph */ + [0x5e11, 0x5e11], /* CJK Ideograph */ + [0x5e12, 0x5e12], /* CJK Ideograph */ + [0x5e13, 0x5e13], /* CJK Ideograph */ + [0x5e14, 0x5e14], /* CJK Ideograph */ + [0x5e15, 0x5e15], /* CJK Ideograph */ + [0x5e16, 0x5e16], /* CJK Ideograph */ + [0x5e17, 0x5e17], /* CJK Ideograph */ + [0x5e18, 0x5e18], /* CJK Ideograph */ + [0x5e19, 0x5e19], /* CJK Ideograph */ + [0x5e1a, 0x5e1a], /* CJK Ideograph */ + [0x5e1b, 0x5e1b], /* CJK Ideograph */ + [0x5e1c, 0x5e1c], /* CJK Ideograph */ + [0x5e1d, 0x5e1d], /* CJK Ideograph */ + [0x5e1e, 0x5e1e], /* CJK Ideograph */ + [0x5e1f, 0x5e1f], /* CJK Ideograph */ + [0x5e20, 0x5e20], /* CJK Ideograph */ + [0x5e21, 0x5e21], /* CJK Ideograph */ + [0x5e22, 0x5e22], /* CJK Ideograph */ + [0x5e23, 0x5e23], /* CJK Ideograph */ + [0x5e24, 0x5e24], /* CJK Ideograph */ + [0x5e25, 0x5e25], /* CJK Ideograph */ + [0x5e26, 0x5e26], /* CJK Ideograph */ + [0x5e27, 0x5e27], /* CJK Ideograph */ + [0x5e28, 0x5e28], /* CJK Ideograph */ + [0x5e29, 0x5e29], /* CJK Ideograph */ + [0x5e2a, 0x5e2a], /* CJK Ideograph */ + [0x5e2b, 0x5e2b], /* CJK Ideograph */ + [0x5e2c, 0x5e2c], /* CJK Ideograph */ + [0x5e2d, 0x5e2d], /* CJK Ideograph */ + [0x5e2e, 0x5e2e], /* CJK Ideograph */ + [0x5e2f, 0x5e2f], /* CJK Ideograph */ + [0x5e30, 0x5e30], /* CJK Ideograph */ + [0x5e31, 0x5e31], /* CJK Ideograph */ + [0x5e32, 0x5e32], /* CJK Ideograph */ + [0x5e33, 0x5e33], /* CJK Ideograph */ + [0x5e34, 0x5e34], /* CJK Ideograph */ + [0x5e35, 0x5e35], /* CJK Ideograph */ + [0x5e36, 0x5e36], /* CJK Ideograph */ + [0x5e37, 0x5e37], /* CJK Ideograph */ + [0x5e38, 0x5e38], /* CJK Ideograph */ + [0x5e39, 0x5e39], /* CJK Ideograph */ + [0x5e3a, 0x5e3a], /* CJK Ideograph */ + [0x5e3b, 0x5e3b], /* CJK Ideograph */ + [0x5e3c, 0x5e3c], /* CJK Ideograph */ + [0x5e3d, 0x5e3d], /* CJK Ideograph */ + [0x5e3e, 0x5e3e], /* CJK Ideograph */ + [0x5e3f, 0x5e3f], /* CJK Ideograph */ + [0x5e40, 0x5e40], /* CJK Ideograph */ + [0x5e41, 0x5e41], /* CJK Ideograph */ + [0x5e42, 0x5e42], /* CJK Ideograph */ + [0x5e43, 0x5e43], /* CJK Ideograph */ + [0x5e44, 0x5e44], /* CJK Ideograph */ + [0x5e45, 0x5e45], /* CJK Ideograph */ + [0x5e46, 0x5e46], /* CJK Ideograph */ + [0x5e47, 0x5e47], /* CJK Ideograph */ + [0x5e48, 0x5e48], /* CJK Ideograph */ + [0x5e49, 0x5e49], /* CJK Ideograph */ + [0x5e4a, 0x5e4a], /* CJK Ideograph */ + [0x5e4b, 0x5e4b], /* CJK Ideograph */ + [0x5e4c, 0x5e4c], /* CJK Ideograph */ + [0x5e4d, 0x5e4d], /* CJK Ideograph */ + [0x5e4e, 0x5e4e], /* CJK Ideograph */ + [0x5e4f, 0x5e4f], /* CJK Ideograph */ + [0x5e50, 0x5e50], /* CJK Ideograph */ + [0x5e51, 0x5e51], /* CJK Ideograph */ + [0x5e52, 0x5e52], /* CJK Ideograph */ + [0x5e53, 0x5e53], /* CJK Ideograph */ + [0x5e54, 0x5e54], /* CJK Ideograph */ + [0x5e55, 0x5e55], /* CJK Ideograph */ + [0x5e56, 0x5e56], /* CJK Ideograph */ + [0x5e57, 0x5e57], /* CJK Ideograph */ + [0x5e58, 0x5e58], /* CJK Ideograph */ + [0x5e59, 0x5e59], /* CJK Ideograph */ + [0x5e5a, 0x5e5a], /* CJK Ideograph */ + [0x5e5b, 0x5e5b], /* CJK Ideograph */ + [0x5e5c, 0x5e5c], /* CJK Ideograph */ + [0x5e5d, 0x5e5d], /* CJK Ideograph */ + [0x5e5e, 0x5e5e], /* CJK Ideograph */ + [0x5e5f, 0x5e5f], /* CJK Ideograph */ + [0x5e60, 0x5e60], /* CJK Ideograph */ + [0x5e61, 0x5e61], /* CJK Ideograph */ + [0x5e62, 0x5e62], /* CJK Ideograph */ + [0x5e63, 0x5e63], /* CJK Ideograph */ + [0x5e64, 0x5e64], /* CJK Ideograph */ + [0x5e65, 0x5e65], /* CJK Ideograph */ + [0x5e66, 0x5e66], /* CJK Ideograph */ + [0x5e67, 0x5e67], /* CJK Ideograph */ + [0x5e68, 0x5e68], /* CJK Ideograph */ + [0x5e69, 0x5e69], /* CJK Ideograph */ + [0x5e6a, 0x5e6a], /* CJK Ideograph */ + [0x5e6b, 0x5e6b], /* CJK Ideograph */ + [0x5e6c, 0x5e6c], /* CJK Ideograph */ + [0x5e6d, 0x5e6d], /* CJK Ideograph */ + [0x5e6e, 0x5e6e], /* CJK Ideograph */ + [0x5e6f, 0x5e6f], /* CJK Ideograph */ + [0x5e70, 0x5e70], /* CJK Ideograph */ + [0x5e71, 0x5e71], /* CJK Ideograph */ + [0x5e72, 0x5e72], /* CJK Ideograph */ + [0x5e73, 0x5e73], /* CJK Ideograph */ + [0x5e74, 0x5e74], /* CJK Ideograph */ + [0x5e75, 0x5e75], /* CJK Ideograph */ + [0x5e76, 0x5e76], /* CJK Ideograph */ + [0x5e77, 0x5e77], /* CJK Ideograph */ + [0x5e78, 0x5e78], /* CJK Ideograph */ + [0x5e79, 0x5e79], /* CJK Ideograph */ + [0x5e7a, 0x5e7a], /* CJK Ideograph */ + [0x5e7b, 0x5e7b], /* CJK Ideograph */ + [0x5e7c, 0x5e7c], /* CJK Ideograph */ + [0x5e7d, 0x5e7d], /* CJK Ideograph */ + [0x5e7e, 0x5e7e], /* CJK Ideograph */ + [0x5e7f, 0x5e7f], /* CJK Ideograph */ + [0x5e80, 0x5e80], /* CJK Ideograph */ + [0x5e81, 0x5e81], /* CJK Ideograph */ + [0x5e82, 0x5e82], /* CJK Ideograph */ + [0x5e83, 0x5e83], /* CJK Ideograph */ + [0x5e84, 0x5e84], /* CJK Ideograph */ + [0x5e85, 0x5e85], /* CJK Ideograph */ + [0x5e86, 0x5e86], /* CJK Ideograph */ + [0x5e87, 0x5e87], /* CJK Ideograph */ + [0x5e88, 0x5e88], /* CJK Ideograph */ + [0x5e89, 0x5e89], /* CJK Ideograph */ + [0x5e8a, 0x5e8a], /* CJK Ideograph */ + [0x5e8b, 0x5e8b], /* CJK Ideograph */ + [0x5e8c, 0x5e8c], /* CJK Ideograph */ + [0x5e8d, 0x5e8d], /* CJK Ideograph */ + [0x5e8e, 0x5e8e], /* CJK Ideograph */ + [0x5e8f, 0x5e8f], /* CJK Ideograph */ + [0x5e90, 0x5e90], /* CJK Ideograph */ + [0x5e91, 0x5e91], /* CJK Ideograph */ + [0x5e92, 0x5e92], /* CJK Ideograph */ + [0x5e93, 0x5e93], /* CJK Ideograph */ + [0x5e94, 0x5e94], /* CJK Ideograph */ + [0x5e95, 0x5e95], /* CJK Ideograph */ + [0x5e96, 0x5e96], /* CJK Ideograph */ + [0x5e97, 0x5e97], /* CJK Ideograph */ + [0x5e98, 0x5e98], /* CJK Ideograph */ + [0x5e99, 0x5e99], /* CJK Ideograph */ + [0x5e9a, 0x5e9a], /* CJK Ideograph */ + [0x5e9b, 0x5e9b], /* CJK Ideograph */ + [0x5e9c, 0x5e9c], /* CJK Ideograph */ + [0x5e9d, 0x5e9d], /* CJK Ideograph */ + [0x5e9e, 0x5e9e], /* CJK Ideograph */ + [0x5e9f, 0x5e9f], /* CJK Ideograph */ + [0x5ea0, 0x5ea0], /* CJK Ideograph */ + [0x5ea1, 0x5ea1], /* CJK Ideograph */ + [0x5ea2, 0x5ea2], /* CJK Ideograph */ + [0x5ea3, 0x5ea3], /* CJK Ideograph */ + [0x5ea4, 0x5ea4], /* CJK Ideograph */ + [0x5ea5, 0x5ea5], /* CJK Ideograph */ + [0x5ea6, 0x5ea6], /* CJK Ideograph */ + [0x5ea7, 0x5ea7], /* CJK Ideograph */ + [0x5ea8, 0x5ea8], /* CJK Ideograph */ + [0x5ea9, 0x5ea9], /* CJK Ideograph */ + [0x5eaa, 0x5eaa], /* CJK Ideograph */ + [0x5eab, 0x5eab], /* CJK Ideograph */ + [0x5eac, 0x5eac], /* CJK Ideograph */ + [0x5ead, 0x5ead], /* CJK Ideograph */ + [0x5eae, 0x5eae], /* CJK Ideograph */ + [0x5eaf, 0x5eaf], /* CJK Ideograph */ + [0x5eb0, 0x5eb0], /* CJK Ideograph */ + [0x5eb1, 0x5eb1], /* CJK Ideograph */ + [0x5eb2, 0x5eb2], /* CJK Ideograph */ + [0x5eb3, 0x5eb3], /* CJK Ideograph */ + [0x5eb4, 0x5eb4], /* CJK Ideograph */ + [0x5eb5, 0x5eb5], /* CJK Ideograph */ + [0x5eb6, 0x5eb6], /* CJK Ideograph */ + [0x5eb7, 0x5eb7], /* CJK Ideograph */ + [0x5eb8, 0x5eb8], /* CJK Ideograph */ + [0x5eb9, 0x5eb9], /* CJK Ideograph */ + [0x5eba, 0x5eba], /* CJK Ideograph */ + [0x5ebb, 0x5ebb], /* CJK Ideograph */ + [0x5ebc, 0x5ebc], /* CJK Ideograph */ + [0x5ebd, 0x5ebd], /* CJK Ideograph */ + [0x5ebe, 0x5ebe], /* CJK Ideograph */ + [0x5ebf, 0x5ebf], /* CJK Ideograph */ + [0x5ec0, 0x5ec0], /* CJK Ideograph */ + [0x5ec1, 0x5ec1], /* CJK Ideograph */ + [0x5ec2, 0x5ec2], /* CJK Ideograph */ + [0x5ec3, 0x5ec3], /* CJK Ideograph */ + [0x5ec4, 0x5ec4], /* CJK Ideograph */ + [0x5ec5, 0x5ec5], /* CJK Ideograph */ + [0x5ec6, 0x5ec6], /* CJK Ideograph */ + [0x5ec7, 0x5ec7], /* CJK Ideograph */ + [0x5ec8, 0x5ec8], /* CJK Ideograph */ + [0x5ec9, 0x5ec9], /* CJK Ideograph */ + [0x5eca, 0x5eca], /* CJK Ideograph */ + [0x5ecb, 0x5ecb], /* CJK Ideograph */ + [0x5ecc, 0x5ecc], /* CJK Ideograph */ + [0x5ecd, 0x5ecd], /* CJK Ideograph */ + [0x5ece, 0x5ece], /* CJK Ideograph */ + [0x5ecf, 0x5ecf], /* CJK Ideograph */ + [0x5ed0, 0x5ed0], /* CJK Ideograph */ + [0x5ed1, 0x5ed1], /* CJK Ideograph */ + [0x5ed2, 0x5ed2], /* CJK Ideograph */ + [0x5ed3, 0x5ed3], /* CJK Ideograph */ + [0x5ed4, 0x5ed4], /* CJK Ideograph */ + [0x5ed5, 0x5ed5], /* CJK Ideograph */ + [0x5ed6, 0x5ed6], /* CJK Ideograph */ + [0x5ed7, 0x5ed7], /* CJK Ideograph */ + [0x5ed8, 0x5ed8], /* CJK Ideograph */ + [0x5ed9, 0x5ed9], /* CJK Ideograph */ + [0x5eda, 0x5eda], /* CJK Ideograph */ + [0x5edb, 0x5edb], /* CJK Ideograph */ + [0x5edc, 0x5edc], /* CJK Ideograph */ + [0x5edd, 0x5edd], /* CJK Ideograph */ + [0x5ede, 0x5ede], /* CJK Ideograph */ + [0x5edf, 0x5edf], /* CJK Ideograph */ + [0x5ee0, 0x5ee0], /* CJK Ideograph */ + [0x5ee1, 0x5ee1], /* CJK Ideograph */ + [0x5ee2, 0x5ee2], /* CJK Ideograph */ + [0x5ee3, 0x5ee3], /* CJK Ideograph */ + [0x5ee4, 0x5ee4], /* CJK Ideograph */ + [0x5ee5, 0x5ee5], /* CJK Ideograph */ + [0x5ee6, 0x5ee6], /* CJK Ideograph */ + [0x5ee7, 0x5ee7], /* CJK Ideograph */ + [0x5ee8, 0x5ee8], /* CJK Ideograph */ + [0x5ee9, 0x5ee9], /* CJK Ideograph */ + [0x5eea, 0x5eea], /* CJK Ideograph */ + [0x5eeb, 0x5eeb], /* CJK Ideograph */ + [0x5eec, 0x5eec], /* CJK Ideograph */ + [0x5eed, 0x5eed], /* CJK Ideograph */ + [0x5eee, 0x5eee], /* CJK Ideograph */ + [0x5eef, 0x5eef], /* CJK Ideograph */ + [0x5ef0, 0x5ef0], /* CJK Ideograph */ + [0x5ef1, 0x5ef1], /* CJK Ideograph */ + [0x5ef2, 0x5ef2], /* CJK Ideograph */ + [0x5ef3, 0x5ef3], /* CJK Ideograph */ + [0x5ef4, 0x5ef4], /* CJK Ideograph */ + [0x5ef5, 0x5ef5], /* CJK Ideograph */ + [0x5ef6, 0x5ef6], /* CJK Ideograph */ + [0x5ef7, 0x5ef7], /* CJK Ideograph */ + [0x5ef8, 0x5ef8], /* CJK Ideograph */ + [0x5ef9, 0x5ef9], /* CJK Ideograph */ + [0x5efa, 0x5efa], /* CJK Ideograph */ + [0x5efb, 0x5efb], /* CJK Ideograph */ + [0x5efc, 0x5efc], /* CJK Ideograph */ + [0x5efd, 0x5efd], /* CJK Ideograph */ + [0x5efe, 0x5efe], /* CJK Ideograph */ + [0x5eff, 0x5eff], /* CJK Ideograph */ + [0x5f00, 0x5f00], /* CJK Ideograph */ + [0x5f01, 0x5f01], /* CJK Ideograph */ + [0x5f02, 0x5f02], /* CJK Ideograph */ + [0x5f03, 0x5f03], /* CJK Ideograph */ + [0x5f04, 0x5f04], /* CJK Ideograph */ + [0x5f05, 0x5f05], /* CJK Ideograph */ + [0x5f06, 0x5f06], /* CJK Ideograph */ + [0x5f07, 0x5f07], /* CJK Ideograph */ + [0x5f08, 0x5f08], /* CJK Ideograph */ + [0x5f09, 0x5f09], /* CJK Ideograph */ + [0x5f0a, 0x5f0a], /* CJK Ideograph */ + [0x5f0b, 0x5f0b], /* CJK Ideograph */ + [0x5f0c, 0x5f0c], /* CJK Ideograph */ + [0x5f0d, 0x5f0d], /* CJK Ideograph */ + [0x5f0e, 0x5f0e], /* CJK Ideograph */ + [0x5f0f, 0x5f0f], /* CJK Ideograph */ + [0x5f10, 0x5f10], /* CJK Ideograph */ + [0x5f11, 0x5f11], /* CJK Ideograph */ + [0x5f12, 0x5f12], /* CJK Ideograph */ + [0x5f13, 0x5f13], /* CJK Ideograph */ + [0x5f14, 0x5f14], /* CJK Ideograph */ + [0x5f15, 0x5f15], /* CJK Ideograph */ + [0x5f16, 0x5f16], /* CJK Ideograph */ + [0x5f17, 0x5f17], /* CJK Ideograph */ + [0x5f18, 0x5f18], /* CJK Ideograph */ + [0x5f19, 0x5f19], /* CJK Ideograph */ + [0x5f1a, 0x5f1a], /* CJK Ideograph */ + [0x5f1b, 0x5f1b], /* CJK Ideograph */ + [0x5f1c, 0x5f1c], /* CJK Ideograph */ + [0x5f1d, 0x5f1d], /* CJK Ideograph */ + [0x5f1e, 0x5f1e], /* CJK Ideograph */ + [0x5f1f, 0x5f1f], /* CJK Ideograph */ + [0x5f20, 0x5f20], /* CJK Ideograph */ + [0x5f21, 0x5f21], /* CJK Ideograph */ + [0x5f22, 0x5f22], /* CJK Ideograph */ + [0x5f23, 0x5f23], /* CJK Ideograph */ + [0x5f24, 0x5f24], /* CJK Ideograph */ + [0x5f25, 0x5f25], /* CJK Ideograph */ + [0x5f26, 0x5f26], /* CJK Ideograph */ + [0x5f27, 0x5f27], /* CJK Ideograph */ + [0x5f28, 0x5f28], /* CJK Ideograph */ + [0x5f29, 0x5f29], /* CJK Ideograph */ + [0x5f2a, 0x5f2a], /* CJK Ideograph */ + [0x5f2b, 0x5f2b], /* CJK Ideograph */ + [0x5f2c, 0x5f2c], /* CJK Ideograph */ + [0x5f2d, 0x5f2d], /* CJK Ideograph */ + [0x5f2e, 0x5f2e], /* CJK Ideograph */ + [0x5f2f, 0x5f2f], /* CJK Ideograph */ + [0x5f30, 0x5f30], /* CJK Ideograph */ + [0x5f31, 0x5f31], /* CJK Ideograph */ + [0x5f32, 0x5f32], /* CJK Ideograph */ + [0x5f33, 0x5f33], /* CJK Ideograph */ + [0x5f34, 0x5f34], /* CJK Ideograph */ + [0x5f35, 0x5f35], /* CJK Ideograph */ + [0x5f36, 0x5f36], /* CJK Ideograph */ + [0x5f37, 0x5f37], /* CJK Ideograph */ + [0x5f38, 0x5f38], /* CJK Ideograph */ + [0x5f39, 0x5f39], /* CJK Ideograph */ + [0x5f3a, 0x5f3a], /* CJK Ideograph */ + [0x5f3b, 0x5f3b], /* CJK Ideograph */ + [0x5f3c, 0x5f3c], /* CJK Ideograph */ + [0x5f3d, 0x5f3d], /* CJK Ideograph */ + [0x5f3e, 0x5f3e], /* CJK Ideograph */ + [0x5f3f, 0x5f3f], /* CJK Ideograph */ + [0x5f40, 0x5f40], /* CJK Ideograph */ + [0x5f41, 0x5f41], /* CJK Ideograph */ + [0x5f42, 0x5f42], /* CJK Ideograph */ + [0x5f43, 0x5f43], /* CJK Ideograph */ + [0x5f44, 0x5f44], /* CJK Ideograph */ + [0x5f45, 0x5f45], /* CJK Ideograph */ + [0x5f46, 0x5f46], /* CJK Ideograph */ + [0x5f47, 0x5f47], /* CJK Ideograph */ + [0x5f48, 0x5f48], /* CJK Ideograph */ + [0x5f49, 0x5f49], /* CJK Ideograph */ + [0x5f4a, 0x5f4a], /* CJK Ideograph */ + [0x5f4b, 0x5f4b], /* CJK Ideograph */ + [0x5f4c, 0x5f4c], /* CJK Ideograph */ + [0x5f4d, 0x5f4d], /* CJK Ideograph */ + [0x5f4e, 0x5f4e], /* CJK Ideograph */ + [0x5f4f, 0x5f4f], /* CJK Ideograph */ + [0x5f50, 0x5f50], /* CJK Ideograph */ + [0x5f51, 0x5f51], /* CJK Ideograph */ + [0x5f52, 0x5f52], /* CJK Ideograph */ + [0x5f53, 0x5f53], /* CJK Ideograph */ + [0x5f54, 0x5f54], /* CJK Ideograph */ + [0x5f55, 0x5f55], /* CJK Ideograph */ + [0x5f56, 0x5f56], /* CJK Ideograph */ + [0x5f57, 0x5f57], /* CJK Ideograph */ + [0x5f58, 0x5f58], /* CJK Ideograph */ + [0x5f59, 0x5f59], /* CJK Ideograph */ + [0x5f5a, 0x5f5a], /* CJK Ideograph */ + [0x5f5b, 0x5f5b], /* CJK Ideograph */ + [0x5f5c, 0x5f5c], /* CJK Ideograph */ + [0x5f5d, 0x5f5d], /* CJK Ideograph */ + [0x5f5e, 0x5f5e], /* CJK Ideograph */ + [0x5f5f, 0x5f5f], /* CJK Ideograph */ + [0x5f60, 0x5f60], /* CJK Ideograph */ + [0x5f61, 0x5f61], /* CJK Ideograph */ + [0x5f62, 0x5f62], /* CJK Ideograph */ + [0x5f63, 0x5f63], /* CJK Ideograph */ + [0x5f64, 0x5f64], /* CJK Ideograph */ + [0x5f65, 0x5f65], /* CJK Ideograph */ + [0x5f66, 0x5f66], /* CJK Ideograph */ + [0x5f67, 0x5f67], /* CJK Ideograph */ + [0x5f68, 0x5f68], /* CJK Ideograph */ + [0x5f69, 0x5f69], /* CJK Ideograph */ + [0x5f6a, 0x5f6a], /* CJK Ideograph */ + [0x5f6b, 0x5f6b], /* CJK Ideograph */ + [0x5f6c, 0x5f6c], /* CJK Ideograph */ + [0x5f6d, 0x5f6d], /* CJK Ideograph */ + [0x5f6e, 0x5f6e], /* CJK Ideograph */ + [0x5f6f, 0x5f6f], /* CJK Ideograph */ + [0x5f70, 0x5f70], /* CJK Ideograph */ + [0x5f71, 0x5f71], /* CJK Ideograph */ + [0x5f72, 0x5f72], /* CJK Ideograph */ + [0x5f73, 0x5f73], /* CJK Ideograph */ + [0x5f74, 0x5f74], /* CJK Ideograph */ + [0x5f75, 0x5f75], /* CJK Ideograph */ + [0x5f76, 0x5f76], /* CJK Ideograph */ + [0x5f77, 0x5f77], /* CJK Ideograph */ + [0x5f78, 0x5f78], /* CJK Ideograph */ + [0x5f79, 0x5f79], /* CJK Ideograph */ + [0x5f7a, 0x5f7a], /* CJK Ideograph */ + [0x5f7b, 0x5f7b], /* CJK Ideograph */ + [0x5f7c, 0x5f7c], /* CJK Ideograph */ + [0x5f7d, 0x5f7d], /* CJK Ideograph */ + [0x5f7e, 0x5f7e], /* CJK Ideograph */ + [0x5f7f, 0x5f7f], /* CJK Ideograph */ + [0x5f80, 0x5f80], /* CJK Ideograph */ + [0x5f81, 0x5f81], /* CJK Ideograph */ + [0x5f82, 0x5f82], /* CJK Ideograph */ + [0x5f83, 0x5f83], /* CJK Ideograph */ + [0x5f84, 0x5f84], /* CJK Ideograph */ + [0x5f85, 0x5f85], /* CJK Ideograph */ + [0x5f86, 0x5f86], /* CJK Ideograph */ + [0x5f87, 0x5f87], /* CJK Ideograph */ + [0x5f88, 0x5f88], /* CJK Ideograph */ + [0x5f89, 0x5f89], /* CJK Ideograph */ + [0x5f8a, 0x5f8a], /* CJK Ideograph */ + [0x5f8b, 0x5f8b], /* CJK Ideograph */ + [0x5f8c, 0x5f8c], /* CJK Ideograph */ + [0x5f8d, 0x5f8d], /* CJK Ideograph */ + [0x5f8e, 0x5f8e], /* CJK Ideograph */ + [0x5f8f, 0x5f8f], /* CJK Ideograph */ + [0x5f90, 0x5f90], /* CJK Ideograph */ + [0x5f91, 0x5f91], /* CJK Ideograph */ + [0x5f92, 0x5f92], /* CJK Ideograph */ + [0x5f93, 0x5f93], /* CJK Ideograph */ + [0x5f94, 0x5f94], /* CJK Ideograph */ + [0x5f95, 0x5f95], /* CJK Ideograph */ + [0x5f96, 0x5f96], /* CJK Ideograph */ + [0x5f97, 0x5f97], /* CJK Ideograph */ + [0x5f98, 0x5f98], /* CJK Ideograph */ + [0x5f99, 0x5f99], /* CJK Ideograph */ + [0x5f9a, 0x5f9a], /* CJK Ideograph */ + [0x5f9b, 0x5f9b], /* CJK Ideograph */ + [0x5f9c, 0x5f9c], /* CJK Ideograph */ + [0x5f9d, 0x5f9d], /* CJK Ideograph */ + [0x5f9e, 0x5f9e], /* CJK Ideograph */ + [0x5f9f, 0x5f9f], /* CJK Ideograph */ + [0x5fa0, 0x5fa0], /* CJK Ideograph */ + [0x5fa1, 0x5fa1], /* CJK Ideograph */ + [0x5fa2, 0x5fa2], /* CJK Ideograph */ + [0x5fa3, 0x5fa3], /* CJK Ideograph */ + [0x5fa4, 0x5fa4], /* CJK Ideograph */ + [0x5fa5, 0x5fa5], /* CJK Ideograph */ + [0x5fa6, 0x5fa6], /* CJK Ideograph */ + [0x5fa7, 0x5fa7], /* CJK Ideograph */ + [0x5fa8, 0x5fa8], /* CJK Ideograph */ + [0x5fa9, 0x5fa9], /* CJK Ideograph */ + [0x5faa, 0x5faa], /* CJK Ideograph */ + [0x5fab, 0x5fab], /* CJK Ideograph */ + [0x5fac, 0x5fac], /* CJK Ideograph */ + [0x5fad, 0x5fad], /* CJK Ideograph */ + [0x5fae, 0x5fae], /* CJK Ideograph */ + [0x5faf, 0x5faf], /* CJK Ideograph */ + [0x5fb0, 0x5fb0], /* CJK Ideograph */ + [0x5fb1, 0x5fb1], /* CJK Ideograph */ + [0x5fb2, 0x5fb2], /* CJK Ideograph */ + [0x5fb3, 0x5fb3], /* CJK Ideograph */ + [0x5fb4, 0x5fb4], /* CJK Ideograph */ + [0x5fb5, 0x5fb5], /* CJK Ideograph */ + [0x5fb6, 0x5fb6], /* CJK Ideograph */ + [0x5fb7, 0x5fb7], /* CJK Ideograph */ + [0x5fb8, 0x5fb8], /* CJK Ideograph */ + [0x5fb9, 0x5fb9], /* CJK Ideograph */ + [0x5fba, 0x5fba], /* CJK Ideograph */ + [0x5fbb, 0x5fbb], /* CJK Ideograph */ + [0x5fbc, 0x5fbc], /* CJK Ideograph */ + [0x5fbd, 0x5fbd], /* CJK Ideograph */ + [0x5fbe, 0x5fbe], /* CJK Ideograph */ + [0x5fbf, 0x5fbf], /* CJK Ideograph */ + [0x5fc0, 0x5fc0], /* CJK Ideograph */ + [0x5fc1, 0x5fc1], /* CJK Ideograph */ + [0x5fc2, 0x5fc2], /* CJK Ideograph */ + [0x5fc3, 0x5fc3], /* CJK Ideograph */ + [0x5fc4, 0x5fc4], /* CJK Ideograph */ + [0x5fc5, 0x5fc5], /* CJK Ideograph */ + [0x5fc6, 0x5fc6], /* CJK Ideograph */ + [0x5fc7, 0x5fc7], /* CJK Ideograph */ + [0x5fc8, 0x5fc8], /* CJK Ideograph */ + [0x5fc9, 0x5fc9], /* CJK Ideograph */ + [0x5fca, 0x5fca], /* CJK Ideograph */ + [0x5fcb, 0x5fcb], /* CJK Ideograph */ + [0x5fcc, 0x5fcc], /* CJK Ideograph */ + [0x5fcd, 0x5fcd], /* CJK Ideograph */ + [0x5fce, 0x5fce], /* CJK Ideograph */ + [0x5fcf, 0x5fcf], /* CJK Ideograph */ + [0x5fd0, 0x5fd0], /* CJK Ideograph */ + [0x5fd1, 0x5fd1], /* CJK Ideograph */ + [0x5fd2, 0x5fd2], /* CJK Ideograph */ + [0x5fd3, 0x5fd3], /* CJK Ideograph */ + [0x5fd4, 0x5fd4], /* CJK Ideograph */ + [0x5fd5, 0x5fd5], /* CJK Ideograph */ + [0x5fd6, 0x5fd6], /* CJK Ideograph */ + [0x5fd7, 0x5fd7], /* CJK Ideograph */ + [0x5fd8, 0x5fd8], /* CJK Ideograph */ + [0x5fd9, 0x5fd9], /* CJK Ideograph */ + [0x5fda, 0x5fda], /* CJK Ideograph */ + [0x5fdb, 0x5fdb], /* CJK Ideograph */ + [0x5fdc, 0x5fdc], /* CJK Ideograph */ + [0x5fdd, 0x5fdd], /* CJK Ideograph */ + [0x5fde, 0x5fde], /* CJK Ideograph */ + [0x5fdf, 0x5fdf], /* CJK Ideograph */ + [0x5fe0, 0x5fe0], /* CJK Ideograph */ + [0x5fe1, 0x5fe1], /* CJK Ideograph */ + [0x5fe2, 0x5fe2], /* CJK Ideograph */ + [0x5fe3, 0x5fe3], /* CJK Ideograph */ + [0x5fe4, 0x5fe4], /* CJK Ideograph */ + [0x5fe5, 0x5fe5], /* CJK Ideograph */ + [0x5fe6, 0x5fe6], /* CJK Ideograph */ + [0x5fe7, 0x5fe7], /* CJK Ideograph */ + [0x5fe8, 0x5fe8], /* CJK Ideograph */ + [0x5fe9, 0x5fe9], /* CJK Ideograph */ + [0x5fea, 0x5fea], /* CJK Ideograph */ + [0x5feb, 0x5feb], /* CJK Ideograph */ + [0x5fec, 0x5fec], /* CJK Ideograph */ + [0x5fed, 0x5fed], /* CJK Ideograph */ + [0x5fee, 0x5fee], /* CJK Ideograph */ + [0x5fef, 0x5fef], /* CJK Ideograph */ + [0x5ff0, 0x5ff0], /* CJK Ideograph */ + [0x5ff1, 0x5ff1], /* CJK Ideograph */ + [0x5ff2, 0x5ff2], /* CJK Ideograph */ + [0x5ff3, 0x5ff3], /* CJK Ideograph */ + [0x5ff4, 0x5ff4], /* CJK Ideograph */ + [0x5ff5, 0x5ff5], /* CJK Ideograph */ + [0x5ff6, 0x5ff6], /* CJK Ideograph */ + [0x5ff7, 0x5ff7], /* CJK Ideograph */ + [0x5ff8, 0x5ff8], /* CJK Ideograph */ + [0x5ff9, 0x5ff9], /* CJK Ideograph */ + [0x5ffa, 0x5ffa], /* CJK Ideograph */ + [0x5ffb, 0x5ffb], /* CJK Ideograph */ + [0x5ffc, 0x5ffc], /* CJK Ideograph */ + [0x5ffd, 0x5ffd], /* CJK Ideograph */ + [0x5ffe, 0x5ffe], /* CJK Ideograph */ + [0x5fff, 0x5fff], /* CJK Ideograph */ + [0x6000, 0x6000], /* CJK Ideograph */ + [0x6001, 0x6001], /* CJK Ideograph */ + [0x6002, 0x6002], /* CJK Ideograph */ + [0x6003, 0x6003], /* CJK Ideograph */ + [0x6004, 0x6004], /* CJK Ideograph */ + [0x6005, 0x6005], /* CJK Ideograph */ + [0x6006, 0x6006], /* CJK Ideograph */ + [0x6007, 0x6007], /* CJK Ideograph */ + [0x6008, 0x6008], /* CJK Ideograph */ + [0x6009, 0x6009], /* CJK Ideograph */ + [0x600a, 0x600a], /* CJK Ideograph */ + [0x600b, 0x600b], /* CJK Ideograph */ + [0x600c, 0x600c], /* CJK Ideograph */ + [0x600d, 0x600d], /* CJK Ideograph */ + [0x600e, 0x600e], /* CJK Ideograph */ + [0x600f, 0x600f], /* CJK Ideograph */ + [0x6010, 0x6010], /* CJK Ideograph */ + [0x6011, 0x6011], /* CJK Ideograph */ + [0x6012, 0x6012], /* CJK Ideograph */ + [0x6013, 0x6013], /* CJK Ideograph */ + [0x6014, 0x6014], /* CJK Ideograph */ + [0x6015, 0x6015], /* CJK Ideograph */ + [0x6016, 0x6016], /* CJK Ideograph */ + [0x6017, 0x6017], /* CJK Ideograph */ + [0x6018, 0x6018], /* CJK Ideograph */ + [0x6019, 0x6019], /* CJK Ideograph */ + [0x601a, 0x601a], /* CJK Ideograph */ + [0x601b, 0x601b], /* CJK Ideograph */ + [0x601c, 0x601c], /* CJK Ideograph */ + [0x601d, 0x601d], /* CJK Ideograph */ + [0x601e, 0x601e], /* CJK Ideograph */ + [0x601f, 0x601f], /* CJK Ideograph */ + [0x6020, 0x6020], /* CJK Ideograph */ + [0x6021, 0x6021], /* CJK Ideograph */ + [0x6022, 0x6022], /* CJK Ideograph */ + [0x6023, 0x6023], /* CJK Ideograph */ + [0x6024, 0x6024], /* CJK Ideograph */ + [0x6025, 0x6025], /* CJK Ideograph */ + [0x6026, 0x6026], /* CJK Ideograph */ + [0x6027, 0x6027], /* CJK Ideograph */ + [0x6028, 0x6028], /* CJK Ideograph */ + [0x6029, 0x6029], /* CJK Ideograph */ + [0x602a, 0x602a], /* CJK Ideograph */ + [0x602b, 0x602b], /* CJK Ideograph */ + [0x602c, 0x602c], /* CJK Ideograph */ + [0x602d, 0x602d], /* CJK Ideograph */ + [0x602e, 0x602e], /* CJK Ideograph */ + [0x602f, 0x602f], /* CJK Ideograph */ + [0x6030, 0x6030], /* CJK Ideograph */ + [0x6031, 0x6031], /* CJK Ideograph */ + [0x6032, 0x6032], /* CJK Ideograph */ + [0x6033, 0x6033], /* CJK Ideograph */ + [0x6034, 0x6034], /* CJK Ideograph */ + [0x6035, 0x6035], /* CJK Ideograph */ + [0x6036, 0x6036], /* CJK Ideograph */ + [0x6037, 0x6037], /* CJK Ideograph */ + [0x6038, 0x6038], /* CJK Ideograph */ + [0x6039, 0x6039], /* CJK Ideograph */ + [0x603a, 0x603a], /* CJK Ideograph */ + [0x603b, 0x603b], /* CJK Ideograph */ + [0x603c, 0x603c], /* CJK Ideograph */ + [0x603d, 0x603d], /* CJK Ideograph */ + [0x603e, 0x603e], /* CJK Ideograph */ + [0x603f, 0x603f], /* CJK Ideograph */ + [0x6040, 0x6040], /* CJK Ideograph */ + [0x6041, 0x6041], /* CJK Ideograph */ + [0x6042, 0x6042], /* CJK Ideograph */ + [0x6043, 0x6043], /* CJK Ideograph */ + [0x6044, 0x6044], /* CJK Ideograph */ + [0x6045, 0x6045], /* CJK Ideograph */ + [0x6046, 0x6046], /* CJK Ideograph */ + [0x6047, 0x6047], /* CJK Ideograph */ + [0x6048, 0x6048], /* CJK Ideograph */ + [0x6049, 0x6049], /* CJK Ideograph */ + [0x604a, 0x604a], /* CJK Ideograph */ + [0x604b, 0x604b], /* CJK Ideograph */ + [0x604c, 0x604c], /* CJK Ideograph */ + [0x604d, 0x604d], /* CJK Ideograph */ + [0x604e, 0x604e], /* CJK Ideograph */ + [0x604f, 0x604f], /* CJK Ideograph */ + [0x6050, 0x6050], /* CJK Ideograph */ + [0x6051, 0x6051], /* CJK Ideograph */ + [0x6052, 0x6052], /* CJK Ideograph */ + [0x6053, 0x6053], /* CJK Ideograph */ + [0x6054, 0x6054], /* CJK Ideograph */ + [0x6055, 0x6055], /* CJK Ideograph */ + [0x6056, 0x6056], /* CJK Ideograph */ + [0x6057, 0x6057], /* CJK Ideograph */ + [0x6058, 0x6058], /* CJK Ideograph */ + [0x6059, 0x6059], /* CJK Ideograph */ + [0x605a, 0x605a], /* CJK Ideograph */ + [0x605b, 0x605b], /* CJK Ideograph */ + [0x605c, 0x605c], /* CJK Ideograph */ + [0x605d, 0x605d], /* CJK Ideograph */ + [0x605e, 0x605e], /* CJK Ideograph */ + [0x605f, 0x605f], /* CJK Ideograph */ + [0x6060, 0x6060], /* CJK Ideograph */ + [0x6061, 0x6061], /* CJK Ideograph */ + [0x6062, 0x6062], /* CJK Ideograph */ + [0x6063, 0x6063], /* CJK Ideograph */ + [0x6064, 0x6064], /* CJK Ideograph */ + [0x6065, 0x6065], /* CJK Ideograph */ + [0x6066, 0x6066], /* CJK Ideograph */ + [0x6067, 0x6067], /* CJK Ideograph */ + [0x6068, 0x6068], /* CJK Ideograph */ + [0x6069, 0x6069], /* CJK Ideograph */ + [0x606a, 0x606a], /* CJK Ideograph */ + [0x606b, 0x606b], /* CJK Ideograph */ + [0x606c, 0x606c], /* CJK Ideograph */ + [0x606d, 0x606d], /* CJK Ideograph */ + [0x606e, 0x606e], /* CJK Ideograph */ + [0x606f, 0x606f], /* CJK Ideograph */ + [0x6070, 0x6070], /* CJK Ideograph */ + [0x6071, 0x6071], /* CJK Ideograph */ + [0x6072, 0x6072], /* CJK Ideograph */ + [0x6073, 0x6073], /* CJK Ideograph */ + [0x6074, 0x6074], /* CJK Ideograph */ + [0x6075, 0x6075], /* CJK Ideograph */ + [0x6076, 0x6076], /* CJK Ideograph */ + [0x6077, 0x6077], /* CJK Ideograph */ + [0x6078, 0x6078], /* CJK Ideograph */ + [0x6079, 0x6079], /* CJK Ideograph */ + [0x607a, 0x607a], /* CJK Ideograph */ + [0x607b, 0x607b], /* CJK Ideograph */ + [0x607c, 0x607c], /* CJK Ideograph */ + [0x607d, 0x607d], /* CJK Ideograph */ + [0x607e, 0x607e], /* CJK Ideograph */ + [0x607f, 0x607f], /* CJK Ideograph */ + [0x6080, 0x6080], /* CJK Ideograph */ + [0x6081, 0x6081], /* CJK Ideograph */ + [0x6082, 0x6082], /* CJK Ideograph */ + [0x6083, 0x6083], /* CJK Ideograph */ + [0x6084, 0x6084], /* CJK Ideograph */ + [0x6085, 0x6085], /* CJK Ideograph */ + [0x6086, 0x6086], /* CJK Ideograph */ + [0x6087, 0x6087], /* CJK Ideograph */ + [0x6088, 0x6088], /* CJK Ideograph */ + [0x6089, 0x6089], /* CJK Ideograph */ + [0x608a, 0x608a], /* CJK Ideograph */ + [0x608b, 0x608b], /* CJK Ideograph */ + [0x608c, 0x608c], /* CJK Ideograph */ + [0x608d, 0x608d], /* CJK Ideograph */ + [0x608e, 0x608e], /* CJK Ideograph */ + [0x608f, 0x608f], /* CJK Ideograph */ + [0x6090, 0x6090], /* CJK Ideograph */ + [0x6091, 0x6091], /* CJK Ideograph */ + [0x6092, 0x6092], /* CJK Ideograph */ + [0x6093, 0x6093], /* CJK Ideograph */ + [0x6094, 0x6094], /* CJK Ideograph */ + [0x6095, 0x6095], /* CJK Ideograph */ + [0x6096, 0x6096], /* CJK Ideograph */ + [0x6097, 0x6097], /* CJK Ideograph */ + [0x6098, 0x6098], /* CJK Ideograph */ + [0x6099, 0x6099], /* CJK Ideograph */ + [0x609a, 0x609a], /* CJK Ideograph */ + [0x609b, 0x609b], /* CJK Ideograph */ + [0x609c, 0x609c], /* CJK Ideograph */ + [0x609d, 0x609d], /* CJK Ideograph */ + [0x609e, 0x609e], /* CJK Ideograph */ + [0x609f, 0x609f], /* CJK Ideograph */ + [0x60a0, 0x60a0], /* CJK Ideograph */ + [0x60a1, 0x60a1], /* CJK Ideograph */ + [0x60a2, 0x60a2], /* CJK Ideograph */ + [0x60a3, 0x60a3], /* CJK Ideograph */ + [0x60a4, 0x60a4], /* CJK Ideograph */ + [0x60a5, 0x60a5], /* CJK Ideograph */ + [0x60a6, 0x60a6], /* CJK Ideograph */ + [0x60a7, 0x60a7], /* CJK Ideograph */ + [0x60a8, 0x60a8], /* CJK Ideograph */ + [0x60a9, 0x60a9], /* CJK Ideograph */ + [0x60aa, 0x60aa], /* CJK Ideograph */ + [0x60ab, 0x60ab], /* CJK Ideograph */ + [0x60ac, 0x60ac], /* CJK Ideograph */ + [0x60ad, 0x60ad], /* CJK Ideograph */ + [0x60ae, 0x60ae], /* CJK Ideograph */ + [0x60af, 0x60af], /* CJK Ideograph */ + [0x60b0, 0x60b0], /* CJK Ideograph */ + [0x60b1, 0x60b1], /* CJK Ideograph */ + [0x60b2, 0x60b2], /* CJK Ideograph */ + [0x60b3, 0x60b3], /* CJK Ideograph */ + [0x60b4, 0x60b4], /* CJK Ideograph */ + [0x60b5, 0x60b5], /* CJK Ideograph */ + [0x60b6, 0x60b6], /* CJK Ideograph */ + [0x60b7, 0x60b7], /* CJK Ideograph */ + [0x60b8, 0x60b8], /* CJK Ideograph */ + [0x60b9, 0x60b9], /* CJK Ideograph */ + [0x60ba, 0x60ba], /* CJK Ideograph */ + [0x60bb, 0x60bb], /* CJK Ideograph */ + [0x60bc, 0x60bc], /* CJK Ideograph */ + [0x60bd, 0x60bd], /* CJK Ideograph */ + [0x60be, 0x60be], /* CJK Ideograph */ + [0x60bf, 0x60bf], /* CJK Ideograph */ + [0x60c0, 0x60c0], /* CJK Ideograph */ + [0x60c1, 0x60c1], /* CJK Ideograph */ + [0x60c2, 0x60c2], /* CJK Ideograph */ + [0x60c3, 0x60c3], /* CJK Ideograph */ + [0x60c4, 0x60c4], /* CJK Ideograph */ + [0x60c5, 0x60c5], /* CJK Ideograph */ + [0x60c6, 0x60c6], /* CJK Ideograph */ + [0x60c7, 0x60c7], /* CJK Ideograph */ + [0x60c8, 0x60c8], /* CJK Ideograph */ + [0x60c9, 0x60c9], /* CJK Ideograph */ + [0x60ca, 0x60ca], /* CJK Ideograph */ + [0x60cb, 0x60cb], /* CJK Ideograph */ + [0x60cc, 0x60cc], /* CJK Ideograph */ + [0x60cd, 0x60cd], /* CJK Ideograph */ + [0x60ce, 0x60ce], /* CJK Ideograph */ + [0x60cf, 0x60cf], /* CJK Ideograph */ + [0x60d0, 0x60d0], /* CJK Ideograph */ + [0x60d1, 0x60d1], /* CJK Ideograph */ + [0x60d2, 0x60d2], /* CJK Ideograph */ + [0x60d3, 0x60d3], /* CJK Ideograph */ + [0x60d4, 0x60d4], /* CJK Ideograph */ + [0x60d5, 0x60d5], /* CJK Ideograph */ + [0x60d6, 0x60d6], /* CJK Ideograph */ + [0x60d7, 0x60d7], /* CJK Ideograph */ + [0x60d8, 0x60d8], /* CJK Ideograph */ + [0x60d9, 0x60d9], /* CJK Ideograph */ + [0x60da, 0x60da], /* CJK Ideograph */ + [0x60db, 0x60db], /* CJK Ideograph */ + [0x60dc, 0x60dc], /* CJK Ideograph */ + [0x60dd, 0x60dd], /* CJK Ideograph */ + [0x60de, 0x60de], /* CJK Ideograph */ + [0x60df, 0x60df], /* CJK Ideograph */ + [0x60e0, 0x60e0], /* CJK Ideograph */ + [0x60e1, 0x60e1], /* CJK Ideograph */ + [0x60e2, 0x60e2], /* CJK Ideograph */ + [0x60e3, 0x60e3], /* CJK Ideograph */ + [0x60e4, 0x60e4], /* CJK Ideograph */ + [0x60e5, 0x60e5], /* CJK Ideograph */ + [0x60e6, 0x60e6], /* CJK Ideograph */ + [0x60e7, 0x60e7], /* CJK Ideograph */ + [0x60e8, 0x60e8], /* CJK Ideograph */ + [0x60e9, 0x60e9], /* CJK Ideograph */ + [0x60ea, 0x60ea], /* CJK Ideograph */ + [0x60eb, 0x60eb], /* CJK Ideograph */ + [0x60ec, 0x60ec], /* CJK Ideograph */ + [0x60ed, 0x60ed], /* CJK Ideograph */ + [0x60ee, 0x60ee], /* CJK Ideograph */ + [0x60ef, 0x60ef], /* CJK Ideograph */ + [0x60f0, 0x60f0], /* CJK Ideograph */ + [0x60f1, 0x60f1], /* CJK Ideograph */ + [0x60f2, 0x60f2], /* CJK Ideograph */ + [0x60f3, 0x60f3], /* CJK Ideograph */ + [0x60f4, 0x60f4], /* CJK Ideograph */ + [0x60f5, 0x60f5], /* CJK Ideograph */ + [0x60f6, 0x60f6], /* CJK Ideograph */ + [0x60f7, 0x60f7], /* CJK Ideograph */ + [0x60f8, 0x60f8], /* CJK Ideograph */ + [0x60f9, 0x60f9], /* CJK Ideograph */ + [0x60fa, 0x60fa], /* CJK Ideograph */ + [0x60fb, 0x60fb], /* CJK Ideograph */ + [0x60fc, 0x60fc], /* CJK Ideograph */ + [0x60fd, 0x60fd], /* CJK Ideograph */ + [0x60fe, 0x60fe], /* CJK Ideograph */ + [0x60ff, 0x60ff], /* CJK Ideograph */ + [0x6100, 0x6100], /* CJK Ideograph */ + [0x6101, 0x6101], /* CJK Ideograph */ + [0x6102, 0x6102], /* CJK Ideograph */ + [0x6103, 0x6103], /* CJK Ideograph */ + [0x6104, 0x6104], /* CJK Ideograph */ + [0x6105, 0x6105], /* CJK Ideograph */ + [0x6106, 0x6106], /* CJK Ideograph */ + [0x6107, 0x6107], /* CJK Ideograph */ + [0x6108, 0x6108], /* CJK Ideograph */ + [0x6109, 0x6109], /* CJK Ideograph */ + [0x610a, 0x610a], /* CJK Ideograph */ + [0x610b, 0x610b], /* CJK Ideograph */ + [0x610c, 0x610c], /* CJK Ideograph */ + [0x610d, 0x610d], /* CJK Ideograph */ + [0x610e, 0x610e], /* CJK Ideograph */ + [0x610f, 0x610f], /* CJK Ideograph */ + [0x6110, 0x6110], /* CJK Ideograph */ + [0x6111, 0x6111], /* CJK Ideograph */ + [0x6112, 0x6112], /* CJK Ideograph */ + [0x6113, 0x6113], /* CJK Ideograph */ + [0x6114, 0x6114], /* CJK Ideograph */ + [0x6115, 0x6115], /* CJK Ideograph */ + [0x6116, 0x6116], /* CJK Ideograph */ + [0x6117, 0x6117], /* CJK Ideograph */ + [0x6118, 0x6118], /* CJK Ideograph */ + [0x6119, 0x6119], /* CJK Ideograph */ + [0x611a, 0x611a], /* CJK Ideograph */ + [0x611b, 0x611b], /* CJK Ideograph */ + [0x611c, 0x611c], /* CJK Ideograph */ + [0x611d, 0x611d], /* CJK Ideograph */ + [0x611e, 0x611e], /* CJK Ideograph */ + [0x611f, 0x611f], /* CJK Ideograph */ + [0x6120, 0x6120], /* CJK Ideograph */ + [0x6121, 0x6121], /* CJK Ideograph */ + [0x6122, 0x6122], /* CJK Ideograph */ + [0x6123, 0x6123], /* CJK Ideograph */ + [0x6124, 0x6124], /* CJK Ideograph */ + [0x6125, 0x6125], /* CJK Ideograph */ + [0x6126, 0x6126], /* CJK Ideograph */ + [0x6127, 0x6127], /* CJK Ideograph */ + [0x6128, 0x6128], /* CJK Ideograph */ + [0x6129, 0x6129], /* CJK Ideograph */ + [0x612a, 0x612a], /* CJK Ideograph */ + [0x612b, 0x612b], /* CJK Ideograph */ + [0x612c, 0x612c], /* CJK Ideograph */ + [0x612d, 0x612d], /* CJK Ideograph */ + [0x612e, 0x612e], /* CJK Ideograph */ + [0x612f, 0x612f], /* CJK Ideograph */ + [0x6130, 0x6130], /* CJK Ideograph */ + [0x6131, 0x6131], /* CJK Ideograph */ + [0x6132, 0x6132], /* CJK Ideograph */ + [0x6133, 0x6133], /* CJK Ideograph */ + [0x6134, 0x6134], /* CJK Ideograph */ + [0x6135, 0x6135], /* CJK Ideograph */ + [0x6136, 0x6136], /* CJK Ideograph */ + [0x6137, 0x6137], /* CJK Ideograph */ + [0x6138, 0x6138], /* CJK Ideograph */ + [0x6139, 0x6139], /* CJK Ideograph */ + [0x613a, 0x613a], /* CJK Ideograph */ + [0x613b, 0x613b], /* CJK Ideograph */ + [0x613c, 0x613c], /* CJK Ideograph */ + [0x613d, 0x613d], /* CJK Ideograph */ + [0x613e, 0x613e], /* CJK Ideograph */ + [0x613f, 0x613f], /* CJK Ideograph */ + [0x6140, 0x6140], /* CJK Ideograph */ + [0x6141, 0x6141], /* CJK Ideograph */ + [0x6142, 0x6142], /* CJK Ideograph */ + [0x6143, 0x6143], /* CJK Ideograph */ + [0x6144, 0x6144], /* CJK Ideograph */ + [0x6145, 0x6145], /* CJK Ideograph */ + [0x6146, 0x6146], /* CJK Ideograph */ + [0x6147, 0x6147], /* CJK Ideograph */ + [0x6148, 0x6148], /* CJK Ideograph */ + [0x6149, 0x6149], /* CJK Ideograph */ + [0x614a, 0x614a], /* CJK Ideograph */ + [0x614b, 0x614b], /* CJK Ideograph */ + [0x614c, 0x614c], /* CJK Ideograph */ + [0x614d, 0x614d], /* CJK Ideograph */ + [0x614e, 0x614e], /* CJK Ideograph */ + [0x614f, 0x614f], /* CJK Ideograph */ + [0x6150, 0x6150], /* CJK Ideograph */ + [0x6151, 0x6151], /* CJK Ideograph */ + [0x6152, 0x6152], /* CJK Ideograph */ + [0x6153, 0x6153], /* CJK Ideograph */ + [0x6154, 0x6154], /* CJK Ideograph */ + [0x6155, 0x6155], /* CJK Ideograph */ + [0x6156, 0x6156], /* CJK Ideograph */ + [0x6157, 0x6157], /* CJK Ideograph */ + [0x6158, 0x6158], /* CJK Ideograph */ + [0x6159, 0x6159], /* CJK Ideograph */ + [0x615a, 0x615a], /* CJK Ideograph */ + [0x615b, 0x615b], /* CJK Ideograph */ + [0x615c, 0x615c], /* CJK Ideograph */ + [0x615d, 0x615d], /* CJK Ideograph */ + [0x615e, 0x615e], /* CJK Ideograph */ + [0x615f, 0x615f], /* CJK Ideograph */ + [0x6160, 0x6160], /* CJK Ideograph */ + [0x6161, 0x6161], /* CJK Ideograph */ + [0x6162, 0x6162], /* CJK Ideograph */ + [0x6163, 0x6163], /* CJK Ideograph */ + [0x6164, 0x6164], /* CJK Ideograph */ + [0x6165, 0x6165], /* CJK Ideograph */ + [0x6166, 0x6166], /* CJK Ideograph */ + [0x6167, 0x6167], /* CJK Ideograph */ + [0x6168, 0x6168], /* CJK Ideograph */ + [0x6169, 0x6169], /* CJK Ideograph */ + [0x616a, 0x616a], /* CJK Ideograph */ + [0x616b, 0x616b], /* CJK Ideograph */ + [0x616c, 0x616c], /* CJK Ideograph */ + [0x616d, 0x616d], /* CJK Ideograph */ + [0x616e, 0x616e], /* CJK Ideograph */ + [0x616f, 0x616f], /* CJK Ideograph */ + [0x6170, 0x6170], /* CJK Ideograph */ + [0x6171, 0x6171], /* CJK Ideograph */ + [0x6172, 0x6172], /* CJK Ideograph */ + [0x6173, 0x6173], /* CJK Ideograph */ + [0x6174, 0x6174], /* CJK Ideograph */ + [0x6175, 0x6175], /* CJK Ideograph */ + [0x6176, 0x6176], /* CJK Ideograph */ + [0x6177, 0x6177], /* CJK Ideograph */ + [0x6178, 0x6178], /* CJK Ideograph */ + [0x6179, 0x6179], /* CJK Ideograph */ + [0x617a, 0x617a], /* CJK Ideograph */ + [0x617b, 0x617b], /* CJK Ideograph */ + [0x617c, 0x617c], /* CJK Ideograph */ + [0x617d, 0x617d], /* CJK Ideograph */ + [0x617e, 0x617e], /* CJK Ideograph */ + [0x617f, 0x617f], /* CJK Ideograph */ + [0x6180, 0x6180], /* CJK Ideograph */ + [0x6181, 0x6181], /* CJK Ideograph */ + [0x6182, 0x6182], /* CJK Ideograph */ + [0x6183, 0x6183], /* CJK Ideograph */ + [0x6184, 0x6184], /* CJK Ideograph */ + [0x6185, 0x6185], /* CJK Ideograph */ + [0x6186, 0x6186], /* CJK Ideograph */ + [0x6187, 0x6187], /* CJK Ideograph */ + [0x6188, 0x6188], /* CJK Ideograph */ + [0x6189, 0x6189], /* CJK Ideograph */ + [0x618a, 0x618a], /* CJK Ideograph */ + [0x618b, 0x618b], /* CJK Ideograph */ + [0x618c, 0x618c], /* CJK Ideograph */ + [0x618d, 0x618d], /* CJK Ideograph */ + [0x618e, 0x618e], /* CJK Ideograph */ + [0x618f, 0x618f], /* CJK Ideograph */ + [0x6190, 0x6190], /* CJK Ideograph */ + [0x6191, 0x6191], /* CJK Ideograph */ + [0x6192, 0x6192], /* CJK Ideograph */ + [0x6193, 0x6193], /* CJK Ideograph */ + [0x6194, 0x6194], /* CJK Ideograph */ + [0x6195, 0x6195], /* CJK Ideograph */ + [0x6196, 0x6196], /* CJK Ideograph */ + [0x6197, 0x6197], /* CJK Ideograph */ + [0x6198, 0x6198], /* CJK Ideograph */ + [0x6199, 0x6199], /* CJK Ideograph */ + [0x619a, 0x619a], /* CJK Ideograph */ + [0x619b, 0x619b], /* CJK Ideograph */ + [0x619c, 0x619c], /* CJK Ideograph */ + [0x619d, 0x619d], /* CJK Ideograph */ + [0x619e, 0x619e], /* CJK Ideograph */ + [0x619f, 0x619f], /* CJK Ideograph */ + [0x61a0, 0x61a0], /* CJK Ideograph */ + [0x61a1, 0x61a1], /* CJK Ideograph */ + [0x61a2, 0x61a2], /* CJK Ideograph */ + [0x61a3, 0x61a3], /* CJK Ideograph */ + [0x61a4, 0x61a4], /* CJK Ideograph */ + [0x61a5, 0x61a5], /* CJK Ideograph */ + [0x61a6, 0x61a6], /* CJK Ideograph */ + [0x61a7, 0x61a7], /* CJK Ideograph */ + [0x61a8, 0x61a8], /* CJK Ideograph */ + [0x61a9, 0x61a9], /* CJK Ideograph */ + [0x61aa, 0x61aa], /* CJK Ideograph */ + [0x61ab, 0x61ab], /* CJK Ideograph */ + [0x61ac, 0x61ac], /* CJK Ideograph */ + [0x61ad, 0x61ad], /* CJK Ideograph */ + [0x61ae, 0x61ae], /* CJK Ideograph */ + [0x61af, 0x61af], /* CJK Ideograph */ + [0x61b0, 0x61b0], /* CJK Ideograph */ + [0x61b1, 0x61b1], /* CJK Ideograph */ + [0x61b2, 0x61b2], /* CJK Ideograph */ + [0x61b3, 0x61b3], /* CJK Ideograph */ + [0x61b4, 0x61b4], /* CJK Ideograph */ + [0x61b5, 0x61b5], /* CJK Ideograph */ + [0x61b6, 0x61b6], /* CJK Ideograph */ + [0x61b7, 0x61b7], /* CJK Ideograph */ + [0x61b8, 0x61b8], /* CJK Ideograph */ + [0x61b9, 0x61b9], /* CJK Ideograph */ + [0x61ba, 0x61ba], /* CJK Ideograph */ + [0x61bb, 0x61bb], /* CJK Ideograph */ + [0x61bc, 0x61bc], /* CJK Ideograph */ + [0x61bd, 0x61bd], /* CJK Ideograph */ + [0x61be, 0x61be], /* CJK Ideograph */ + [0x61bf, 0x61bf], /* CJK Ideograph */ + [0x61c0, 0x61c0], /* CJK Ideograph */ + [0x61c1, 0x61c1], /* CJK Ideograph */ + [0x61c2, 0x61c2], /* CJK Ideograph */ + [0x61c3, 0x61c3], /* CJK Ideograph */ + [0x61c4, 0x61c4], /* CJK Ideograph */ + [0x61c5, 0x61c5], /* CJK Ideograph */ + [0x61c6, 0x61c6], /* CJK Ideograph */ + [0x61c7, 0x61c7], /* CJK Ideograph */ + [0x61c8, 0x61c8], /* CJK Ideograph */ + [0x61c9, 0x61c9], /* CJK Ideograph */ + [0x61ca, 0x61ca], /* CJK Ideograph */ + [0x61cb, 0x61cb], /* CJK Ideograph */ + [0x61cc, 0x61cc], /* CJK Ideograph */ + [0x61cd, 0x61cd], /* CJK Ideograph */ + [0x61ce, 0x61ce], /* CJK Ideograph */ + [0x61cf, 0x61cf], /* CJK Ideograph */ + [0x61d0, 0x61d0], /* CJK Ideograph */ + [0x61d1, 0x61d1], /* CJK Ideograph */ + [0x61d2, 0x61d2], /* CJK Ideograph */ + [0x61d3, 0x61d3], /* CJK Ideograph */ + [0x61d4, 0x61d4], /* CJK Ideograph */ + [0x61d5, 0x61d5], /* CJK Ideograph */ + [0x61d6, 0x61d6], /* CJK Ideograph */ + [0x61d7, 0x61d7], /* CJK Ideograph */ + [0x61d8, 0x61d8], /* CJK Ideograph */ + [0x61d9, 0x61d9], /* CJK Ideograph */ + [0x61da, 0x61da], /* CJK Ideograph */ + [0x61db, 0x61db], /* CJK Ideograph */ + [0x61dc, 0x61dc], /* CJK Ideograph */ + [0x61dd, 0x61dd], /* CJK Ideograph */ + [0x61de, 0x61de], /* CJK Ideograph */ + [0x61df, 0x61df], /* CJK Ideograph */ + [0x61e0, 0x61e0], /* CJK Ideograph */ + [0x61e1, 0x61e1], /* CJK Ideograph */ + [0x61e2, 0x61e2], /* CJK Ideograph */ + [0x61e3, 0x61e3], /* CJK Ideograph */ + [0x61e4, 0x61e4], /* CJK Ideograph */ + [0x61e5, 0x61e5], /* CJK Ideograph */ + [0x61e6, 0x61e6], /* CJK Ideograph */ + [0x61e7, 0x61e7], /* CJK Ideograph */ + [0x61e8, 0x61e8], /* CJK Ideograph */ + [0x61e9, 0x61e9], /* CJK Ideograph */ + [0x61ea, 0x61ea], /* CJK Ideograph */ + [0x61eb, 0x61eb], /* CJK Ideograph */ + [0x61ec, 0x61ec], /* CJK Ideograph */ + [0x61ed, 0x61ed], /* CJK Ideograph */ + [0x61ee, 0x61ee], /* CJK Ideograph */ + [0x61ef, 0x61ef], /* CJK Ideograph */ + [0x61f0, 0x61f0], /* CJK Ideograph */ + [0x61f1, 0x61f1], /* CJK Ideograph */ + [0x61f2, 0x61f2], /* CJK Ideograph */ + [0x61f3, 0x61f3], /* CJK Ideograph */ + [0x61f4, 0x61f4], /* CJK Ideograph */ + [0x61f5, 0x61f5], /* CJK Ideograph */ + [0x61f6, 0x61f6], /* CJK Ideograph */ + [0x61f7, 0x61f7], /* CJK Ideograph */ + [0x61f8, 0x61f8], /* CJK Ideograph */ + [0x61f9, 0x61f9], /* CJK Ideograph */ + [0x61fa, 0x61fa], /* CJK Ideograph */ + [0x61fb, 0x61fb], /* CJK Ideograph */ + [0x61fc, 0x61fc], /* CJK Ideograph */ + [0x61fd, 0x61fd], /* CJK Ideograph */ + [0x61fe, 0x61fe], /* CJK Ideograph */ + [0x61ff, 0x61ff], /* CJK Ideograph */ + [0x6200, 0x6200], /* CJK Ideograph */ + [0x6201, 0x6201], /* CJK Ideograph */ + [0x6202, 0x6202], /* CJK Ideograph */ + [0x6203, 0x6203], /* CJK Ideograph */ + [0x6204, 0x6204], /* CJK Ideograph */ + [0x6205, 0x6205], /* CJK Ideograph */ + [0x6206, 0x6206], /* CJK Ideograph */ + [0x6207, 0x6207], /* CJK Ideograph */ + [0x6208, 0x6208], /* CJK Ideograph */ + [0x6209, 0x6209], /* CJK Ideograph */ + [0x620a, 0x620a], /* CJK Ideograph */ + [0x620b, 0x620b], /* CJK Ideograph */ + [0x620c, 0x620c], /* CJK Ideograph */ + [0x620d, 0x620d], /* CJK Ideograph */ + [0x620e, 0x620e], /* CJK Ideograph */ + [0x620f, 0x620f], /* CJK Ideograph */ + [0x6210, 0x6210], /* CJK Ideograph */ + [0x6211, 0x6211], /* CJK Ideograph */ + [0x6212, 0x6212], /* CJK Ideograph */ + [0x6213, 0x6213], /* CJK Ideograph */ + [0x6214, 0x6214], /* CJK Ideograph */ + [0x6215, 0x6215], /* CJK Ideograph */ + [0x6216, 0x6216], /* CJK Ideograph */ + [0x6217, 0x6217], /* CJK Ideograph */ + [0x6218, 0x6218], /* CJK Ideograph */ + [0x6219, 0x6219], /* CJK Ideograph */ + [0x621a, 0x621a], /* CJK Ideograph */ + [0x621b, 0x621b], /* CJK Ideograph */ + [0x621c, 0x621c], /* CJK Ideograph */ + [0x621d, 0x621d], /* CJK Ideograph */ + [0x621e, 0x621e], /* CJK Ideograph */ + [0x621f, 0x621f], /* CJK Ideograph */ + [0x6220, 0x6220], /* CJK Ideograph */ + [0x6221, 0x6221], /* CJK Ideograph */ + [0x6222, 0x6222], /* CJK Ideograph */ + [0x6223, 0x6223], /* CJK Ideograph */ + [0x6224, 0x6224], /* CJK Ideograph */ + [0x6225, 0x6225], /* CJK Ideograph */ + [0x6226, 0x6226], /* CJK Ideograph */ + [0x6227, 0x6227], /* CJK Ideograph */ + [0x6228, 0x6228], /* CJK Ideograph */ + [0x6229, 0x6229], /* CJK Ideograph */ + [0x622a, 0x622a], /* CJK Ideograph */ + [0x622b, 0x622b], /* CJK Ideograph */ + [0x622c, 0x622c], /* CJK Ideograph */ + [0x622d, 0x622d], /* CJK Ideograph */ + [0x622e, 0x622e], /* CJK Ideograph */ + [0x622f, 0x622f], /* CJK Ideograph */ + [0x6230, 0x6230], /* CJK Ideograph */ + [0x6231, 0x6231], /* CJK Ideograph */ + [0x6232, 0x6232], /* CJK Ideograph */ + [0x6233, 0x6233], /* CJK Ideograph */ + [0x6234, 0x6234], /* CJK Ideograph */ + [0x6235, 0x6235], /* CJK Ideograph */ + [0x6236, 0x6236], /* CJK Ideograph */ + [0x6237, 0x6237], /* CJK Ideograph */ + [0x6238, 0x6238], /* CJK Ideograph */ + [0x6239, 0x6239], /* CJK Ideograph */ + [0x623a, 0x623a], /* CJK Ideograph */ + [0x623b, 0x623b], /* CJK Ideograph */ + [0x623c, 0x623c], /* CJK Ideograph */ + [0x623d, 0x623d], /* CJK Ideograph */ + [0x623e, 0x623e], /* CJK Ideograph */ + [0x623f, 0x623f], /* CJK Ideograph */ + [0x6240, 0x6240], /* CJK Ideograph */ + [0x6241, 0x6241], /* CJK Ideograph */ + [0x6242, 0x6242], /* CJK Ideograph */ + [0x6243, 0x6243], /* CJK Ideograph */ + [0x6244, 0x6244], /* CJK Ideograph */ + [0x6245, 0x6245], /* CJK Ideograph */ + [0x6246, 0x6246], /* CJK Ideograph */ + [0x6247, 0x6247], /* CJK Ideograph */ + [0x6248, 0x6248], /* CJK Ideograph */ + [0x6249, 0x6249], /* CJK Ideograph */ + [0x624a, 0x624a], /* CJK Ideograph */ + [0x624b, 0x624b], /* CJK Ideograph */ + [0x624c, 0x624c], /* CJK Ideograph */ + [0x624d, 0x624d], /* CJK Ideograph */ + [0x624e, 0x624e], /* CJK Ideograph */ + [0x624f, 0x624f], /* CJK Ideograph */ + [0x6250, 0x6250], /* CJK Ideograph */ + [0x6251, 0x6251], /* CJK Ideograph */ + [0x6252, 0x6252], /* CJK Ideograph */ + [0x6253, 0x6253], /* CJK Ideograph */ + [0x6254, 0x6254], /* CJK Ideograph */ + [0x6255, 0x6255], /* CJK Ideograph */ + [0x6256, 0x6256], /* CJK Ideograph */ + [0x6257, 0x6257], /* CJK Ideograph */ + [0x6258, 0x6258], /* CJK Ideograph */ + [0x6259, 0x6259], /* CJK Ideograph */ + [0x625a, 0x625a], /* CJK Ideograph */ + [0x625b, 0x625b], /* CJK Ideograph */ + [0x625c, 0x625c], /* CJK Ideograph */ + [0x625d, 0x625d], /* CJK Ideograph */ + [0x625e, 0x625e], /* CJK Ideograph */ + [0x625f, 0x625f], /* CJK Ideograph */ + [0x6260, 0x6260], /* CJK Ideograph */ + [0x6261, 0x6261], /* CJK Ideograph */ + [0x6262, 0x6262], /* CJK Ideograph */ + [0x6263, 0x6263], /* CJK Ideograph */ + [0x6264, 0x6264], /* CJK Ideograph */ + [0x6265, 0x6265], /* CJK Ideograph */ + [0x6266, 0x6266], /* CJK Ideograph */ + [0x6267, 0x6267], /* CJK Ideograph */ + [0x6268, 0x6268], /* CJK Ideograph */ + [0x6269, 0x6269], /* CJK Ideograph */ + [0x626a, 0x626a], /* CJK Ideograph */ + [0x626b, 0x626b], /* CJK Ideograph */ + [0x626c, 0x626c], /* CJK Ideograph */ + [0x626d, 0x626d], /* CJK Ideograph */ + [0x626e, 0x626e], /* CJK Ideograph */ + [0x626f, 0x626f], /* CJK Ideograph */ + [0x6270, 0x6270], /* CJK Ideograph */ + [0x6271, 0x6271], /* CJK Ideograph */ + [0x6272, 0x6272], /* CJK Ideograph */ + [0x6273, 0x6273], /* CJK Ideograph */ + [0x6274, 0x6274], /* CJK Ideograph */ + [0x6275, 0x6275], /* CJK Ideograph */ + [0x6276, 0x6276], /* CJK Ideograph */ + [0x6277, 0x6277], /* CJK Ideograph */ + [0x6278, 0x6278], /* CJK Ideograph */ + [0x6279, 0x6279], /* CJK Ideograph */ + [0x627a, 0x627a], /* CJK Ideograph */ + [0x627b, 0x627b], /* CJK Ideograph */ + [0x627c, 0x627c], /* CJK Ideograph */ + [0x627d, 0x627d], /* CJK Ideograph */ + [0x627e, 0x627e], /* CJK Ideograph */ + [0x627f, 0x627f], /* CJK Ideograph */ + [0x6280, 0x6280], /* CJK Ideograph */ + [0x6281, 0x6281], /* CJK Ideograph */ + [0x6282, 0x6282], /* CJK Ideograph */ + [0x6283, 0x6283], /* CJK Ideograph */ + [0x6284, 0x6284], /* CJK Ideograph */ + [0x6285, 0x6285], /* CJK Ideograph */ + [0x6286, 0x6286], /* CJK Ideograph */ + [0x6287, 0x6287], /* CJK Ideograph */ + [0x6288, 0x6288], /* CJK Ideograph */ + [0x6289, 0x6289], /* CJK Ideograph */ + [0x628a, 0x628a], /* CJK Ideograph */ + [0x628b, 0x628b], /* CJK Ideograph */ + [0x628c, 0x628c], /* CJK Ideograph */ + [0x628d, 0x628d], /* CJK Ideograph */ + [0x628e, 0x628e], /* CJK Ideograph */ + [0x628f, 0x628f], /* CJK Ideograph */ + [0x6290, 0x6290], /* CJK Ideograph */ + [0x6291, 0x6291], /* CJK Ideograph */ + [0x6292, 0x6292], /* CJK Ideograph */ + [0x6293, 0x6293], /* CJK Ideograph */ + [0x6294, 0x6294], /* CJK Ideograph */ + [0x6295, 0x6295], /* CJK Ideograph */ + [0x6296, 0x6296], /* CJK Ideograph */ + [0x6297, 0x6297], /* CJK Ideograph */ + [0x6298, 0x6298], /* CJK Ideograph */ + [0x6299, 0x6299], /* CJK Ideograph */ + [0x629a, 0x629a], /* CJK Ideograph */ + [0x629b, 0x629b], /* CJK Ideograph */ + [0x629c, 0x629c], /* CJK Ideograph */ + [0x629d, 0x629d], /* CJK Ideograph */ + [0x629e, 0x629e], /* CJK Ideograph */ + [0x629f, 0x629f], /* CJK Ideograph */ + [0x62a0, 0x62a0], /* CJK Ideograph */ + [0x62a1, 0x62a1], /* CJK Ideograph */ + [0x62a2, 0x62a2], /* CJK Ideograph */ + [0x62a3, 0x62a3], /* CJK Ideograph */ + [0x62a4, 0x62a4], /* CJK Ideograph */ + [0x62a5, 0x62a5], /* CJK Ideograph */ + [0x62a6, 0x62a6], /* CJK Ideograph */ + [0x62a7, 0x62a7], /* CJK Ideograph */ + [0x62a8, 0x62a8], /* CJK Ideograph */ + [0x62a9, 0x62a9], /* CJK Ideograph */ + [0x62aa, 0x62aa], /* CJK Ideograph */ + [0x62ab, 0x62ab], /* CJK Ideograph */ + [0x62ac, 0x62ac], /* CJK Ideograph */ + [0x62ad, 0x62ad], /* CJK Ideograph */ + [0x62ae, 0x62ae], /* CJK Ideograph */ + [0x62af, 0x62af], /* CJK Ideograph */ + [0x62b0, 0x62b0], /* CJK Ideograph */ + [0x62b1, 0x62b1], /* CJK Ideograph */ + [0x62b2, 0x62b2], /* CJK Ideograph */ + [0x62b3, 0x62b3], /* CJK Ideograph */ + [0x62b4, 0x62b4], /* CJK Ideograph */ + [0x62b5, 0x62b5], /* CJK Ideograph */ + [0x62b6, 0x62b6], /* CJK Ideograph */ + [0x62b7, 0x62b7], /* CJK Ideograph */ + [0x62b8, 0x62b8], /* CJK Ideograph */ + [0x62b9, 0x62b9], /* CJK Ideograph */ + [0x62ba, 0x62ba], /* CJK Ideograph */ + [0x62bb, 0x62bb], /* CJK Ideograph */ + [0x62bc, 0x62bc], /* CJK Ideograph */ + [0x62bd, 0x62bd], /* CJK Ideograph */ + [0x62be, 0x62be], /* CJK Ideograph */ + [0x62bf, 0x62bf], /* CJK Ideograph */ + [0x62c0, 0x62c0], /* CJK Ideograph */ + [0x62c1, 0x62c1], /* CJK Ideograph */ + [0x62c2, 0x62c2], /* CJK Ideograph */ + [0x62c3, 0x62c3], /* CJK Ideograph */ + [0x62c4, 0x62c4], /* CJK Ideograph */ + [0x62c5, 0x62c5], /* CJK Ideograph */ + [0x62c6, 0x62c6], /* CJK Ideograph */ + [0x62c7, 0x62c7], /* CJK Ideograph */ + [0x62c8, 0x62c8], /* CJK Ideograph */ + [0x62c9, 0x62c9], /* CJK Ideograph */ + [0x62ca, 0x62ca], /* CJK Ideograph */ + [0x62cb, 0x62cb], /* CJK Ideograph */ + [0x62cc, 0x62cc], /* CJK Ideograph */ + [0x62cd, 0x62cd], /* CJK Ideograph */ + [0x62ce, 0x62ce], /* CJK Ideograph */ + [0x62cf, 0x62cf], /* CJK Ideograph */ + [0x62d0, 0x62d0], /* CJK Ideograph */ + [0x62d1, 0x62d1], /* CJK Ideograph */ + [0x62d2, 0x62d2], /* CJK Ideograph */ + [0x62d3, 0x62d3], /* CJK Ideograph */ + [0x62d4, 0x62d4], /* CJK Ideograph */ + [0x62d5, 0x62d5], /* CJK Ideograph */ + [0x62d6, 0x62d6], /* CJK Ideograph */ + [0x62d7, 0x62d7], /* CJK Ideograph */ + [0x62d8, 0x62d8], /* CJK Ideograph */ + [0x62d9, 0x62d9], /* CJK Ideograph */ + [0x62da, 0x62da], /* CJK Ideograph */ + [0x62db, 0x62db], /* CJK Ideograph */ + [0x62dc, 0x62dc], /* CJK Ideograph */ + [0x62dd, 0x62dd], /* CJK Ideograph */ + [0x62de, 0x62de], /* CJK Ideograph */ + [0x62df, 0x62df], /* CJK Ideograph */ + [0x62e0, 0x62e0], /* CJK Ideograph */ + [0x62e1, 0x62e1], /* CJK Ideograph */ + [0x62e2, 0x62e2], /* CJK Ideograph */ + [0x62e3, 0x62e3], /* CJK Ideograph */ + [0x62e4, 0x62e4], /* CJK Ideograph */ + [0x62e5, 0x62e5], /* CJK Ideograph */ + [0x62e6, 0x62e6], /* CJK Ideograph */ + [0x62e7, 0x62e7], /* CJK Ideograph */ + [0x62e8, 0x62e8], /* CJK Ideograph */ + [0x62e9, 0x62e9], /* CJK Ideograph */ + [0x62ea, 0x62ea], /* CJK Ideograph */ + [0x62eb, 0x62eb], /* CJK Ideograph */ + [0x62ec, 0x62ec], /* CJK Ideograph */ + [0x62ed, 0x62ed], /* CJK Ideograph */ + [0x62ee, 0x62ee], /* CJK Ideograph */ + [0x62ef, 0x62ef], /* CJK Ideograph */ + [0x62f0, 0x62f0], /* CJK Ideograph */ + [0x62f1, 0x62f1], /* CJK Ideograph */ + [0x62f2, 0x62f2], /* CJK Ideograph */ + [0x62f3, 0x62f3], /* CJK Ideograph */ + [0x62f4, 0x62f4], /* CJK Ideograph */ + [0x62f5, 0x62f5], /* CJK Ideograph */ + [0x62f6, 0x62f6], /* CJK Ideograph */ + [0x62f7, 0x62f7], /* CJK Ideograph */ + [0x62f8, 0x62f8], /* CJK Ideograph */ + [0x62f9, 0x62f9], /* CJK Ideograph */ + [0x62fa, 0x62fa], /* CJK Ideograph */ + [0x62fb, 0x62fb], /* CJK Ideograph */ + [0x62fc, 0x62fc], /* CJK Ideograph */ + [0x62fd, 0x62fd], /* CJK Ideograph */ + [0x62fe, 0x62fe], /* CJK Ideograph */ + [0x62ff, 0x62ff], /* CJK Ideograph */ + [0x6300, 0x6300], /* CJK Ideograph */ + [0x6301, 0x6301], /* CJK Ideograph */ + [0x6302, 0x6302], /* CJK Ideograph */ + [0x6303, 0x6303], /* CJK Ideograph */ + [0x6304, 0x6304], /* CJK Ideograph */ + [0x6305, 0x6305], /* CJK Ideograph */ + [0x6306, 0x6306], /* CJK Ideograph */ + [0x6307, 0x6307], /* CJK Ideograph */ + [0x6308, 0x6308], /* CJK Ideograph */ + [0x6309, 0x6309], /* CJK Ideograph */ + [0x630a, 0x630a], /* CJK Ideograph */ + [0x630b, 0x630b], /* CJK Ideograph */ + [0x630c, 0x630c], /* CJK Ideograph */ + [0x630d, 0x630d], /* CJK Ideograph */ + [0x630e, 0x630e], /* CJK Ideograph */ + [0x630f, 0x630f], /* CJK Ideograph */ + [0x6310, 0x6310], /* CJK Ideograph */ + [0x6311, 0x6311], /* CJK Ideograph */ + [0x6312, 0x6312], /* CJK Ideograph */ + [0x6313, 0x6313], /* CJK Ideograph */ + [0x6314, 0x6314], /* CJK Ideograph */ + [0x6315, 0x6315], /* CJK Ideograph */ + [0x6316, 0x6316], /* CJK Ideograph */ + [0x6317, 0x6317], /* CJK Ideograph */ + [0x6318, 0x6318], /* CJK Ideograph */ + [0x6319, 0x6319], /* CJK Ideograph */ + [0x631a, 0x631a], /* CJK Ideograph */ + [0x631b, 0x631b], /* CJK Ideograph */ + [0x631c, 0x631c], /* CJK Ideograph */ + [0x631d, 0x631d], /* CJK Ideograph */ + [0x631e, 0x631e], /* CJK Ideograph */ + [0x631f, 0x631f], /* CJK Ideograph */ + [0x6320, 0x6320], /* CJK Ideograph */ + [0x6321, 0x6321], /* CJK Ideograph */ + [0x6322, 0x6322], /* CJK Ideograph */ + [0x6323, 0x6323], /* CJK Ideograph */ + [0x6324, 0x6324], /* CJK Ideograph */ + [0x6325, 0x6325], /* CJK Ideograph */ + [0x6326, 0x6326], /* CJK Ideograph */ + [0x6327, 0x6327], /* CJK Ideograph */ + [0x6328, 0x6328], /* CJK Ideograph */ + [0x6329, 0x6329], /* CJK Ideograph */ + [0x632a, 0x632a], /* CJK Ideograph */ + [0x632b, 0x632b], /* CJK Ideograph */ + [0x632c, 0x632c], /* CJK Ideograph */ + [0x632d, 0x632d], /* CJK Ideograph */ + [0x632e, 0x632e], /* CJK Ideograph */ + [0x632f, 0x632f], /* CJK Ideograph */ + [0x6330, 0x6330], /* CJK Ideograph */ + [0x6331, 0x6331], /* CJK Ideograph */ + [0x6332, 0x6332], /* CJK Ideograph */ + [0x6333, 0x6333], /* CJK Ideograph */ + [0x6334, 0x6334], /* CJK Ideograph */ + [0x6335, 0x6335], /* CJK Ideograph */ + [0x6336, 0x6336], /* CJK Ideograph */ + [0x6337, 0x6337], /* CJK Ideograph */ + [0x6338, 0x6338], /* CJK Ideograph */ + [0x6339, 0x6339], /* CJK Ideograph */ + [0x633a, 0x633a], /* CJK Ideograph */ + [0x633b, 0x633b], /* CJK Ideograph */ + [0x633c, 0x633c], /* CJK Ideograph */ + [0x633d, 0x633d], /* CJK Ideograph */ + [0x633e, 0x633e], /* CJK Ideograph */ + [0x633f, 0x633f], /* CJK Ideograph */ + [0x6340, 0x6340], /* CJK Ideograph */ + [0x6341, 0x6341], /* CJK Ideograph */ + [0x6342, 0x6342], /* CJK Ideograph */ + [0x6343, 0x6343], /* CJK Ideograph */ + [0x6344, 0x6344], /* CJK Ideograph */ + [0x6345, 0x6345], /* CJK Ideograph */ + [0x6346, 0x6346], /* CJK Ideograph */ + [0x6347, 0x6347], /* CJK Ideograph */ + [0x6348, 0x6348], /* CJK Ideograph */ + [0x6349, 0x6349], /* CJK Ideograph */ + [0x634a, 0x634a], /* CJK Ideograph */ + [0x634b, 0x634b], /* CJK Ideograph */ + [0x634c, 0x634c], /* CJK Ideograph */ + [0x634d, 0x634d], /* CJK Ideograph */ + [0x634e, 0x634e], /* CJK Ideograph */ + [0x634f, 0x634f], /* CJK Ideograph */ + [0x6350, 0x6350], /* CJK Ideograph */ + [0x6351, 0x6351], /* CJK Ideograph */ + [0x6352, 0x6352], /* CJK Ideograph */ + [0x6353, 0x6353], /* CJK Ideograph */ + [0x6354, 0x6354], /* CJK Ideograph */ + [0x6355, 0x6355], /* CJK Ideograph */ + [0x6356, 0x6356], /* CJK Ideograph */ + [0x6357, 0x6357], /* CJK Ideograph */ + [0x6358, 0x6358], /* CJK Ideograph */ + [0x6359, 0x6359], /* CJK Ideograph */ + [0x635a, 0x635a], /* CJK Ideograph */ + [0x635b, 0x635b], /* CJK Ideograph */ + [0x635c, 0x635c], /* CJK Ideograph */ + [0x635d, 0x635d], /* CJK Ideograph */ + [0x635e, 0x635e], /* CJK Ideograph */ + [0x635f, 0x635f], /* CJK Ideograph */ + [0x6360, 0x6360], /* CJK Ideograph */ + [0x6361, 0x6361], /* CJK Ideograph */ + [0x6362, 0x6362], /* CJK Ideograph */ + [0x6363, 0x6363], /* CJK Ideograph */ + [0x6364, 0x6364], /* CJK Ideograph */ + [0x6365, 0x6365], /* CJK Ideograph */ + [0x6366, 0x6366], /* CJK Ideograph */ + [0x6367, 0x6367], /* CJK Ideograph */ + [0x6368, 0x6368], /* CJK Ideograph */ + [0x6369, 0x6369], /* CJK Ideograph */ + [0x636a, 0x636a], /* CJK Ideograph */ + [0x636b, 0x636b], /* CJK Ideograph */ + [0x636c, 0x636c], /* CJK Ideograph */ + [0x636d, 0x636d], /* CJK Ideograph */ + [0x636e, 0x636e], /* CJK Ideograph */ + [0x636f, 0x636f], /* CJK Ideograph */ + [0x6370, 0x6370], /* CJK Ideograph */ + [0x6371, 0x6371], /* CJK Ideograph */ + [0x6372, 0x6372], /* CJK Ideograph */ + [0x6373, 0x6373], /* CJK Ideograph */ + [0x6374, 0x6374], /* CJK Ideograph */ + [0x6375, 0x6375], /* CJK Ideograph */ + [0x6376, 0x6376], /* CJK Ideograph */ + [0x6377, 0x6377], /* CJK Ideograph */ + [0x6378, 0x6378], /* CJK Ideograph */ + [0x6379, 0x6379], /* CJK Ideograph */ + [0x637a, 0x637a], /* CJK Ideograph */ + [0x637b, 0x637b], /* CJK Ideograph */ + [0x637c, 0x637c], /* CJK Ideograph */ + [0x637d, 0x637d], /* CJK Ideograph */ + [0x637e, 0x637e], /* CJK Ideograph */ + [0x637f, 0x637f], /* CJK Ideograph */ + [0x6380, 0x6380], /* CJK Ideograph */ + [0x6381, 0x6381], /* CJK Ideograph */ + [0x6382, 0x6382], /* CJK Ideograph */ + [0x6383, 0x6383], /* CJK Ideograph */ + [0x6384, 0x6384], /* CJK Ideograph */ + [0x6385, 0x6385], /* CJK Ideograph */ + [0x6386, 0x6386], /* CJK Ideograph */ + [0x6387, 0x6387], /* CJK Ideograph */ + [0x6388, 0x6388], /* CJK Ideograph */ + [0x6389, 0x6389], /* CJK Ideograph */ + [0x638a, 0x638a], /* CJK Ideograph */ + [0x638b, 0x638b], /* CJK Ideograph */ + [0x638c, 0x638c], /* CJK Ideograph */ + [0x638d, 0x638d], /* CJK Ideograph */ + [0x638e, 0x638e], /* CJK Ideograph */ + [0x638f, 0x638f], /* CJK Ideograph */ + [0x6390, 0x6390], /* CJK Ideograph */ + [0x6391, 0x6391], /* CJK Ideograph */ + [0x6392, 0x6392], /* CJK Ideograph */ + [0x6393, 0x6393], /* CJK Ideograph */ + [0x6394, 0x6394], /* CJK Ideograph */ + [0x6395, 0x6395], /* CJK Ideograph */ + [0x6396, 0x6396], /* CJK Ideograph */ + [0x6397, 0x6397], /* CJK Ideograph */ + [0x6398, 0x6398], /* CJK Ideograph */ + [0x6399, 0x6399], /* CJK Ideograph */ + [0x639a, 0x639a], /* CJK Ideograph */ + [0x639b, 0x639b], /* CJK Ideograph */ + [0x639c, 0x639c], /* CJK Ideograph */ + [0x639d, 0x639d], /* CJK Ideograph */ + [0x639e, 0x639e], /* CJK Ideograph */ + [0x639f, 0x639f], /* CJK Ideograph */ + [0x63a0, 0x63a0], /* CJK Ideograph */ + [0x63a1, 0x63a1], /* CJK Ideograph */ + [0x63a2, 0x63a2], /* CJK Ideograph */ + [0x63a3, 0x63a3], /* CJK Ideograph */ + [0x63a4, 0x63a4], /* CJK Ideograph */ + [0x63a5, 0x63a5], /* CJK Ideograph */ + [0x63a6, 0x63a6], /* CJK Ideograph */ + [0x63a7, 0x63a7], /* CJK Ideograph */ + [0x63a8, 0x63a8], /* CJK Ideograph */ + [0x63a9, 0x63a9], /* CJK Ideograph */ + [0x63aa, 0x63aa], /* CJK Ideograph */ + [0x63ab, 0x63ab], /* CJK Ideograph */ + [0x63ac, 0x63ac], /* CJK Ideograph */ + [0x63ad, 0x63ad], /* CJK Ideograph */ + [0x63ae, 0x63ae], /* CJK Ideograph */ + [0x63af, 0x63af], /* CJK Ideograph */ + [0x63b0, 0x63b0], /* CJK Ideograph */ + [0x63b1, 0x63b1], /* CJK Ideograph */ + [0x63b2, 0x63b2], /* CJK Ideograph */ + [0x63b3, 0x63b3], /* CJK Ideograph */ + [0x63b4, 0x63b4], /* CJK Ideograph */ + [0x63b5, 0x63b5], /* CJK Ideograph */ + [0x63b6, 0x63b6], /* CJK Ideograph */ + [0x63b7, 0x63b7], /* CJK Ideograph */ + [0x63b8, 0x63b8], /* CJK Ideograph */ + [0x63b9, 0x63b9], /* CJK Ideograph */ + [0x63ba, 0x63ba], /* CJK Ideograph */ + [0x63bb, 0x63bb], /* CJK Ideograph */ + [0x63bc, 0x63bc], /* CJK Ideograph */ + [0x63bd, 0x63bd], /* CJK Ideograph */ + [0x63be, 0x63be], /* CJK Ideograph */ + [0x63bf, 0x63bf], /* CJK Ideograph */ + [0x63c0, 0x63c0], /* CJK Ideograph */ + [0x63c1, 0x63c1], /* CJK Ideograph */ + [0x63c2, 0x63c2], /* CJK Ideograph */ + [0x63c3, 0x63c3], /* CJK Ideograph */ + [0x63c4, 0x63c4], /* CJK Ideograph */ + [0x63c5, 0x63c5], /* CJK Ideograph */ + [0x63c6, 0x63c6], /* CJK Ideograph */ + [0x63c7, 0x63c7], /* CJK Ideograph */ + [0x63c8, 0x63c8], /* CJK Ideograph */ + [0x63c9, 0x63c9], /* CJK Ideograph */ + [0x63ca, 0x63ca], /* CJK Ideograph */ + [0x63cb, 0x63cb], /* CJK Ideograph */ + [0x63cc, 0x63cc], /* CJK Ideograph */ + [0x63cd, 0x63cd], /* CJK Ideograph */ + [0x63ce, 0x63ce], /* CJK Ideograph */ + [0x63cf, 0x63cf], /* CJK Ideograph */ + [0x63d0, 0x63d0], /* CJK Ideograph */ + [0x63d1, 0x63d1], /* CJK Ideograph */ + [0x63d2, 0x63d2], /* CJK Ideograph */ + [0x63d3, 0x63d3], /* CJK Ideograph */ + [0x63d4, 0x63d4], /* CJK Ideograph */ + [0x63d5, 0x63d5], /* CJK Ideograph */ + [0x63d6, 0x63d6], /* CJK Ideograph */ + [0x63d7, 0x63d7], /* CJK Ideograph */ + [0x63d8, 0x63d8], /* CJK Ideograph */ + [0x63d9, 0x63d9], /* CJK Ideograph */ + [0x63da, 0x63da], /* CJK Ideograph */ + [0x63db, 0x63db], /* CJK Ideograph */ + [0x63dc, 0x63dc], /* CJK Ideograph */ + [0x63dd, 0x63dd], /* CJK Ideograph */ + [0x63de, 0x63de], /* CJK Ideograph */ + [0x63df, 0x63df], /* CJK Ideograph */ + [0x63e0, 0x63e0], /* CJK Ideograph */ + [0x63e1, 0x63e1], /* CJK Ideograph */ + [0x63e2, 0x63e2], /* CJK Ideograph */ + [0x63e3, 0x63e3], /* CJK Ideograph */ + [0x63e4, 0x63e4], /* CJK Ideograph */ + [0x63e5, 0x63e5], /* CJK Ideograph */ + [0x63e6, 0x63e6], /* CJK Ideograph */ + [0x63e7, 0x63e7], /* CJK Ideograph */ + [0x63e8, 0x63e8], /* CJK Ideograph */ + [0x63e9, 0x63e9], /* CJK Ideograph */ + [0x63ea, 0x63ea], /* CJK Ideograph */ + [0x63eb, 0x63eb], /* CJK Ideograph */ + [0x63ec, 0x63ec], /* CJK Ideograph */ + [0x63ed, 0x63ed], /* CJK Ideograph */ + [0x63ee, 0x63ee], /* CJK Ideograph */ + [0x63ef, 0x63ef], /* CJK Ideograph */ + [0x63f0, 0x63f0], /* CJK Ideograph */ + [0x63f1, 0x63f1], /* CJK Ideograph */ + [0x63f2, 0x63f2], /* CJK Ideograph */ + [0x63f3, 0x63f3], /* CJK Ideograph */ + [0x63f4, 0x63f4], /* CJK Ideograph */ + [0x63f5, 0x63f5], /* CJK Ideograph */ + [0x63f6, 0x63f6], /* CJK Ideograph */ + [0x63f7, 0x63f7], /* CJK Ideograph */ + [0x63f8, 0x63f8], /* CJK Ideograph */ + [0x63f9, 0x63f9], /* CJK Ideograph */ + [0x63fa, 0x63fa], /* CJK Ideograph */ + [0x63fb, 0x63fb], /* CJK Ideograph */ + [0x63fc, 0x63fc], /* CJK Ideograph */ + [0x63fd, 0x63fd], /* CJK Ideograph */ + [0x63fe, 0x63fe], /* CJK Ideograph */ + [0x63ff, 0x63ff], /* CJK Ideograph */ + [0x6400, 0x6400], /* CJK Ideograph */ + [0x6401, 0x6401], /* CJK Ideograph */ + [0x6402, 0x6402], /* CJK Ideograph */ + [0x6403, 0x6403], /* CJK Ideograph */ + [0x6404, 0x6404], /* CJK Ideograph */ + [0x6405, 0x6405], /* CJK Ideograph */ + [0x6406, 0x6406], /* CJK Ideograph */ + [0x6407, 0x6407], /* CJK Ideograph */ + [0x6408, 0x6408], /* CJK Ideograph */ + [0x6409, 0x6409], /* CJK Ideograph */ + [0x640a, 0x640a], /* CJK Ideograph */ + [0x640b, 0x640b], /* CJK Ideograph */ + [0x640c, 0x640c], /* CJK Ideograph */ + [0x640d, 0x640d], /* CJK Ideograph */ + [0x640e, 0x640e], /* CJK Ideograph */ + [0x640f, 0x640f], /* CJK Ideograph */ + [0x6410, 0x6410], /* CJK Ideograph */ + [0x6411, 0x6411], /* CJK Ideograph */ + [0x6412, 0x6412], /* CJK Ideograph */ + [0x6413, 0x6413], /* CJK Ideograph */ + [0x6414, 0x6414], /* CJK Ideograph */ + [0x6415, 0x6415], /* CJK Ideograph */ + [0x6416, 0x6416], /* CJK Ideograph */ + [0x6417, 0x6417], /* CJK Ideograph */ + [0x6418, 0x6418], /* CJK Ideograph */ + [0x6419, 0x6419], /* CJK Ideograph */ + [0x641a, 0x641a], /* CJK Ideograph */ + [0x641b, 0x641b], /* CJK Ideograph */ + [0x641c, 0x641c], /* CJK Ideograph */ + [0x641d, 0x641d], /* CJK Ideograph */ + [0x641e, 0x641e], /* CJK Ideograph */ + [0x641f, 0x641f], /* CJK Ideograph */ + [0x6420, 0x6420], /* CJK Ideograph */ + [0x6421, 0x6421], /* CJK Ideograph */ + [0x6422, 0x6422], /* CJK Ideograph */ + [0x6423, 0x6423], /* CJK Ideograph */ + [0x6424, 0x6424], /* CJK Ideograph */ + [0x6425, 0x6425], /* CJK Ideograph */ + [0x6426, 0x6426], /* CJK Ideograph */ + [0x6427, 0x6427], /* CJK Ideograph */ + [0x6428, 0x6428], /* CJK Ideograph */ + [0x6429, 0x6429], /* CJK Ideograph */ + [0x642a, 0x642a], /* CJK Ideograph */ + [0x642b, 0x642b], /* CJK Ideograph */ + [0x642c, 0x642c], /* CJK Ideograph */ + [0x642d, 0x642d], /* CJK Ideograph */ + [0x642e, 0x642e], /* CJK Ideograph */ + [0x642f, 0x642f], /* CJK Ideograph */ + [0x6430, 0x6430], /* CJK Ideograph */ + [0x6431, 0x6431], /* CJK Ideograph */ + [0x6432, 0x6432], /* CJK Ideograph */ + [0x6433, 0x6433], /* CJK Ideograph */ + [0x6434, 0x6434], /* CJK Ideograph */ + [0x6435, 0x6435], /* CJK Ideograph */ + [0x6436, 0x6436], /* CJK Ideograph */ + [0x6437, 0x6437], /* CJK Ideograph */ + [0x6438, 0x6438], /* CJK Ideograph */ + [0x6439, 0x6439], /* CJK Ideograph */ + [0x643a, 0x643a], /* CJK Ideograph */ + [0x643b, 0x643b], /* CJK Ideograph */ + [0x643c, 0x643c], /* CJK Ideograph */ + [0x643d, 0x643d], /* CJK Ideograph */ + [0x643e, 0x643e], /* CJK Ideograph */ + [0x643f, 0x643f], /* CJK Ideograph */ + [0x6440, 0x6440], /* CJK Ideograph */ + [0x6441, 0x6441], /* CJK Ideograph */ + [0x6442, 0x6442], /* CJK Ideograph */ + [0x6443, 0x6443], /* CJK Ideograph */ + [0x6444, 0x6444], /* CJK Ideograph */ + [0x6445, 0x6445], /* CJK Ideograph */ + [0x6446, 0x6446], /* CJK Ideograph */ + [0x6447, 0x6447], /* CJK Ideograph */ + [0x6448, 0x6448], /* CJK Ideograph */ + [0x6449, 0x6449], /* CJK Ideograph */ + [0x644a, 0x644a], /* CJK Ideograph */ + [0x644b, 0x644b], /* CJK Ideograph */ + [0x644c, 0x644c], /* CJK Ideograph */ + [0x644d, 0x644d], /* CJK Ideograph */ + [0x644e, 0x644e], /* CJK Ideograph */ + [0x644f, 0x644f], /* CJK Ideograph */ + [0x6450, 0x6450], /* CJK Ideograph */ + [0x6451, 0x6451], /* CJK Ideograph */ + [0x6452, 0x6452], /* CJK Ideograph */ + [0x6453, 0x6453], /* CJK Ideograph */ + [0x6454, 0x6454], /* CJK Ideograph */ + [0x6455, 0x6455], /* CJK Ideograph */ + [0x6456, 0x6456], /* CJK Ideograph */ + [0x6457, 0x6457], /* CJK Ideograph */ + [0x6458, 0x6458], /* CJK Ideograph */ + [0x6459, 0x6459], /* CJK Ideograph */ + [0x645a, 0x645a], /* CJK Ideograph */ + [0x645b, 0x645b], /* CJK Ideograph */ + [0x645c, 0x645c], /* CJK Ideograph */ + [0x645d, 0x645d], /* CJK Ideograph */ + [0x645e, 0x645e], /* CJK Ideograph */ + [0x645f, 0x645f], /* CJK Ideograph */ + [0x6460, 0x6460], /* CJK Ideograph */ + [0x6461, 0x6461], /* CJK Ideograph */ + [0x6462, 0x6462], /* CJK Ideograph */ + [0x6463, 0x6463], /* CJK Ideograph */ + [0x6464, 0x6464], /* CJK Ideograph */ + [0x6465, 0x6465], /* CJK Ideograph */ + [0x6466, 0x6466], /* CJK Ideograph */ + [0x6467, 0x6467], /* CJK Ideograph */ + [0x6468, 0x6468], /* CJK Ideograph */ + [0x6469, 0x6469], /* CJK Ideograph */ + [0x646a, 0x646a], /* CJK Ideograph */ + [0x646b, 0x646b], /* CJK Ideograph */ + [0x646c, 0x646c], /* CJK Ideograph */ + [0x646d, 0x646d], /* CJK Ideograph */ + [0x646e, 0x646e], /* CJK Ideograph */ + [0x646f, 0x646f], /* CJK Ideograph */ + [0x6470, 0x6470], /* CJK Ideograph */ + [0x6471, 0x6471], /* CJK Ideograph */ + [0x6472, 0x6472], /* CJK Ideograph */ + [0x6473, 0x6473], /* CJK Ideograph */ + [0x6474, 0x6474], /* CJK Ideograph */ + [0x6475, 0x6475], /* CJK Ideograph */ + [0x6476, 0x6476], /* CJK Ideograph */ + [0x6477, 0x6477], /* CJK Ideograph */ + [0x6478, 0x6478], /* CJK Ideograph */ + [0x6479, 0x6479], /* CJK Ideograph */ + [0x647a, 0x647a], /* CJK Ideograph */ + [0x647b, 0x647b], /* CJK Ideograph */ + [0x647c, 0x647c], /* CJK Ideograph */ + [0x647d, 0x647d], /* CJK Ideograph */ + [0x647e, 0x647e], /* CJK Ideograph */ + [0x647f, 0x647f], /* CJK Ideograph */ + [0x6480, 0x6480], /* CJK Ideograph */ + [0x6481, 0x6481], /* CJK Ideograph */ + [0x6482, 0x6482], /* CJK Ideograph */ + [0x6483, 0x6483], /* CJK Ideograph */ + [0x6484, 0x6484], /* CJK Ideograph */ + [0x6485, 0x6485], /* CJK Ideograph */ + [0x6486, 0x6486], /* CJK Ideograph */ + [0x6487, 0x6487], /* CJK Ideograph */ + [0x6488, 0x6488], /* CJK Ideograph */ + [0x6489, 0x6489], /* CJK Ideograph */ + [0x648a, 0x648a], /* CJK Ideograph */ + [0x648b, 0x648b], /* CJK Ideograph */ + [0x648c, 0x648c], /* CJK Ideograph */ + [0x648d, 0x648d], /* CJK Ideograph */ + [0x648e, 0x648e], /* CJK Ideograph */ + [0x648f, 0x648f], /* CJK Ideograph */ + [0x6490, 0x6490], /* CJK Ideograph */ + [0x6491, 0x6491], /* CJK Ideograph */ + [0x6492, 0x6492], /* CJK Ideograph */ + [0x6493, 0x6493], /* CJK Ideograph */ + [0x6494, 0x6494], /* CJK Ideograph */ + [0x6495, 0x6495], /* CJK Ideograph */ + [0x6496, 0x6496], /* CJK Ideograph */ + [0x6497, 0x6497], /* CJK Ideograph */ + [0x6498, 0x6498], /* CJK Ideograph */ + [0x6499, 0x6499], /* CJK Ideograph */ + [0x649a, 0x649a], /* CJK Ideograph */ + [0x649b, 0x649b], /* CJK Ideograph */ + [0x649c, 0x649c], /* CJK Ideograph */ + [0x649d, 0x649d], /* CJK Ideograph */ + [0x649e, 0x649e], /* CJK Ideograph */ + [0x649f, 0x649f], /* CJK Ideograph */ + [0x64a0, 0x64a0], /* CJK Ideograph */ + [0x64a1, 0x64a1], /* CJK Ideograph */ + [0x64a2, 0x64a2], /* CJK Ideograph */ + [0x64a3, 0x64a3], /* CJK Ideograph */ + [0x64a4, 0x64a4], /* CJK Ideograph */ + [0x64a5, 0x64a5], /* CJK Ideograph */ + [0x64a6, 0x64a6], /* CJK Ideograph */ + [0x64a7, 0x64a7], /* CJK Ideograph */ + [0x64a8, 0x64a8], /* CJK Ideograph */ + [0x64a9, 0x64a9], /* CJK Ideograph */ + [0x64aa, 0x64aa], /* CJK Ideograph */ + [0x64ab, 0x64ab], /* CJK Ideograph */ + [0x64ac, 0x64ac], /* CJK Ideograph */ + [0x64ad, 0x64ad], /* CJK Ideograph */ + [0x64ae, 0x64ae], /* CJK Ideograph */ + [0x64af, 0x64af], /* CJK Ideograph */ + [0x64b0, 0x64b0], /* CJK Ideograph */ + [0x64b1, 0x64b1], /* CJK Ideograph */ + [0x64b2, 0x64b2], /* CJK Ideograph */ + [0x64b3, 0x64b3], /* CJK Ideograph */ + [0x64b4, 0x64b4], /* CJK Ideograph */ + [0x64b5, 0x64b5], /* CJK Ideograph */ + [0x64b6, 0x64b6], /* CJK Ideograph */ + [0x64b7, 0x64b7], /* CJK Ideograph */ + [0x64b8, 0x64b8], /* CJK Ideograph */ + [0x64b9, 0x64b9], /* CJK Ideograph */ + [0x64ba, 0x64ba], /* CJK Ideograph */ + [0x64bb, 0x64bb], /* CJK Ideograph */ + [0x64bc, 0x64bc], /* CJK Ideograph */ + [0x64bd, 0x64bd], /* CJK Ideograph */ + [0x64be, 0x64be], /* CJK Ideograph */ + [0x64bf, 0x64bf], /* CJK Ideograph */ + [0x64c0, 0x64c0], /* CJK Ideograph */ + [0x64c1, 0x64c1], /* CJK Ideograph */ + [0x64c2, 0x64c2], /* CJK Ideograph */ + [0x64c3, 0x64c3], /* CJK Ideograph */ + [0x64c4, 0x64c4], /* CJK Ideograph */ + [0x64c5, 0x64c5], /* CJK Ideograph */ + [0x64c6, 0x64c6], /* CJK Ideograph */ + [0x64c7, 0x64c7], /* CJK Ideograph */ + [0x64c8, 0x64c8], /* CJK Ideograph */ + [0x64c9, 0x64c9], /* CJK Ideograph */ + [0x64ca, 0x64ca], /* CJK Ideograph */ + [0x64cb, 0x64cb], /* CJK Ideograph */ + [0x64cc, 0x64cc], /* CJK Ideograph */ + [0x64cd, 0x64cd], /* CJK Ideograph */ + [0x64ce, 0x64ce], /* CJK Ideograph */ + [0x64cf, 0x64cf], /* CJK Ideograph */ + [0x64d0, 0x64d0], /* CJK Ideograph */ + [0x64d1, 0x64d1], /* CJK Ideograph */ + [0x64d2, 0x64d2], /* CJK Ideograph */ + [0x64d3, 0x64d3], /* CJK Ideograph */ + [0x64d4, 0x64d4], /* CJK Ideograph */ + [0x64d5, 0x64d5], /* CJK Ideograph */ + [0x64d6, 0x64d6], /* CJK Ideograph */ + [0x64d7, 0x64d7], /* CJK Ideograph */ + [0x64d8, 0x64d8], /* CJK Ideograph */ + [0x64d9, 0x64d9], /* CJK Ideograph */ + [0x64da, 0x64da], /* CJK Ideograph */ + [0x64db, 0x64db], /* CJK Ideograph */ + [0x64dc, 0x64dc], /* CJK Ideograph */ + [0x64dd, 0x64dd], /* CJK Ideograph */ + [0x64de, 0x64de], /* CJK Ideograph */ + [0x64df, 0x64df], /* CJK Ideograph */ + [0x64e0, 0x64e0], /* CJK Ideograph */ + [0x64e1, 0x64e1], /* CJK Ideograph */ + [0x64e2, 0x64e2], /* CJK Ideograph */ + [0x64e3, 0x64e3], /* CJK Ideograph */ + [0x64e4, 0x64e4], /* CJK Ideograph */ + [0x64e5, 0x64e5], /* CJK Ideograph */ + [0x64e6, 0x64e6], /* CJK Ideograph */ + [0x64e7, 0x64e7], /* CJK Ideograph */ + [0x64e8, 0x64e8], /* CJK Ideograph */ + [0x64e9, 0x64e9], /* CJK Ideograph */ + [0x64ea, 0x64ea], /* CJK Ideograph */ + [0x64eb, 0x64eb], /* CJK Ideograph */ + [0x64ec, 0x64ec], /* CJK Ideograph */ + [0x64ed, 0x64ed], /* CJK Ideograph */ + [0x64ee, 0x64ee], /* CJK Ideograph */ + [0x64ef, 0x64ef], /* CJK Ideograph */ + [0x64f0, 0x64f0], /* CJK Ideograph */ + [0x64f1, 0x64f1], /* CJK Ideograph */ + [0x64f2, 0x64f2], /* CJK Ideograph */ + [0x64f3, 0x64f3], /* CJK Ideograph */ + [0x64f4, 0x64f4], /* CJK Ideograph */ + [0x64f5, 0x64f5], /* CJK Ideograph */ + [0x64f6, 0x64f6], /* CJK Ideograph */ + [0x64f7, 0x64f7], /* CJK Ideograph */ + [0x64f8, 0x64f8], /* CJK Ideograph */ + [0x64f9, 0x64f9], /* CJK Ideograph */ + [0x64fa, 0x64fa], /* CJK Ideograph */ + [0x64fb, 0x64fb], /* CJK Ideograph */ + [0x64fc, 0x64fc], /* CJK Ideograph */ + [0x64fd, 0x64fd], /* CJK Ideograph */ + [0x64fe, 0x64fe], /* CJK Ideograph */ + [0x64ff, 0x64ff], /* CJK Ideograph */ + [0x6500, 0x6500], /* CJK Ideograph */ + [0x6501, 0x6501], /* CJK Ideograph */ + [0x6502, 0x6502], /* CJK Ideograph */ + [0x6503, 0x6503], /* CJK Ideograph */ + [0x6504, 0x6504], /* CJK Ideograph */ + [0x6505, 0x6505], /* CJK Ideograph */ + [0x6506, 0x6506], /* CJK Ideograph */ + [0x6507, 0x6507], /* CJK Ideograph */ + [0x6508, 0x6508], /* CJK Ideograph */ + [0x6509, 0x6509], /* CJK Ideograph */ + [0x650a, 0x650a], /* CJK Ideograph */ + [0x650b, 0x650b], /* CJK Ideograph */ + [0x650c, 0x650c], /* CJK Ideograph */ + [0x650d, 0x650d], /* CJK Ideograph */ + [0x650e, 0x650e], /* CJK Ideograph */ + [0x650f, 0x650f], /* CJK Ideograph */ + [0x6510, 0x6510], /* CJK Ideograph */ + [0x6511, 0x6511], /* CJK Ideograph */ + [0x6512, 0x6512], /* CJK Ideograph */ + [0x6513, 0x6513], /* CJK Ideograph */ + [0x6514, 0x6514], /* CJK Ideograph */ + [0x6515, 0x6515], /* CJK Ideograph */ + [0x6516, 0x6516], /* CJK Ideograph */ + [0x6517, 0x6517], /* CJK Ideograph */ + [0x6518, 0x6518], /* CJK Ideograph */ + [0x6519, 0x6519], /* CJK Ideograph */ + [0x651a, 0x651a], /* CJK Ideograph */ + [0x651b, 0x651b], /* CJK Ideograph */ + [0x651c, 0x651c], /* CJK Ideograph */ + [0x651d, 0x651d], /* CJK Ideograph */ + [0x651e, 0x651e], /* CJK Ideograph */ + [0x651f, 0x651f], /* CJK Ideograph */ + [0x6520, 0x6520], /* CJK Ideograph */ + [0x6521, 0x6521], /* CJK Ideograph */ + [0x6522, 0x6522], /* CJK Ideograph */ + [0x6523, 0x6523], /* CJK Ideograph */ + [0x6524, 0x6524], /* CJK Ideograph */ + [0x6525, 0x6525], /* CJK Ideograph */ + [0x6526, 0x6526], /* CJK Ideograph */ + [0x6527, 0x6527], /* CJK Ideograph */ + [0x6528, 0x6528], /* CJK Ideograph */ + [0x6529, 0x6529], /* CJK Ideograph */ + [0x652a, 0x652a], /* CJK Ideograph */ + [0x652b, 0x652b], /* CJK Ideograph */ + [0x652c, 0x652c], /* CJK Ideograph */ + [0x652d, 0x652d], /* CJK Ideograph */ + [0x652e, 0x652e], /* CJK Ideograph */ + [0x652f, 0x652f], /* CJK Ideograph */ + [0x6530, 0x6530], /* CJK Ideograph */ + [0x6531, 0x6531], /* CJK Ideograph */ + [0x6532, 0x6532], /* CJK Ideograph */ + [0x6533, 0x6533], /* CJK Ideograph */ + [0x6534, 0x6534], /* CJK Ideograph */ + [0x6535, 0x6535], /* CJK Ideograph */ + [0x6536, 0x6536], /* CJK Ideograph */ + [0x6537, 0x6537], /* CJK Ideograph */ + [0x6538, 0x6538], /* CJK Ideograph */ + [0x6539, 0x6539], /* CJK Ideograph */ + [0x653a, 0x653a], /* CJK Ideograph */ + [0x653b, 0x653b], /* CJK Ideograph */ + [0x653c, 0x653c], /* CJK Ideograph */ + [0x653d, 0x653d], /* CJK Ideograph */ + [0x653e, 0x653e], /* CJK Ideograph */ + [0x653f, 0x653f], /* CJK Ideograph */ + [0x6540, 0x6540], /* CJK Ideograph */ + [0x6541, 0x6541], /* CJK Ideograph */ + [0x6542, 0x6542], /* CJK Ideograph */ + [0x6543, 0x6543], /* CJK Ideograph */ + [0x6544, 0x6544], /* CJK Ideograph */ + [0x6545, 0x6545], /* CJK Ideograph */ + [0x6546, 0x6546], /* CJK Ideograph */ + [0x6547, 0x6547], /* CJK Ideograph */ + [0x6548, 0x6548], /* CJK Ideograph */ + [0x6549, 0x6549], /* CJK Ideograph */ + [0x654a, 0x654a], /* CJK Ideograph */ + [0x654b, 0x654b], /* CJK Ideograph */ + [0x654c, 0x654c], /* CJK Ideograph */ + [0x654d, 0x654d], /* CJK Ideograph */ + [0x654e, 0x654e], /* CJK Ideograph */ + [0x654f, 0x654f], /* CJK Ideograph */ + [0x6550, 0x6550], /* CJK Ideograph */ + [0x6551, 0x6551], /* CJK Ideograph */ + [0x6552, 0x6552], /* CJK Ideograph */ + [0x6553, 0x6553], /* CJK Ideograph */ + [0x6554, 0x6554], /* CJK Ideograph */ + [0x6555, 0x6555], /* CJK Ideograph */ + [0x6556, 0x6556], /* CJK Ideograph */ + [0x6557, 0x6557], /* CJK Ideograph */ + [0x6558, 0x6558], /* CJK Ideograph */ + [0x6559, 0x6559], /* CJK Ideograph */ + [0x655a, 0x655a], /* CJK Ideograph */ + [0x655b, 0x655b], /* CJK Ideograph */ + [0x655c, 0x655c], /* CJK Ideograph */ + [0x655d, 0x655d], /* CJK Ideograph */ + [0x655e, 0x655e], /* CJK Ideograph */ + [0x655f, 0x655f], /* CJK Ideograph */ + [0x6560, 0x6560], /* CJK Ideograph */ + [0x6561, 0x6561], /* CJK Ideograph */ + [0x6562, 0x6562], /* CJK Ideograph */ + [0x6563, 0x6563], /* CJK Ideograph */ + [0x6564, 0x6564], /* CJK Ideograph */ + [0x6565, 0x6565], /* CJK Ideograph */ + [0x6566, 0x6566], /* CJK Ideograph */ + [0x6567, 0x6567], /* CJK Ideograph */ + [0x6568, 0x6568], /* CJK Ideograph */ + [0x6569, 0x6569], /* CJK Ideograph */ + [0x656a, 0x656a], /* CJK Ideograph */ + [0x656b, 0x656b], /* CJK Ideograph */ + [0x656c, 0x656c], /* CJK Ideograph */ + [0x656d, 0x656d], /* CJK Ideograph */ + [0x656e, 0x656e], /* CJK Ideograph */ + [0x656f, 0x656f], /* CJK Ideograph */ + [0x6570, 0x6570], /* CJK Ideograph */ + [0x6571, 0x6571], /* CJK Ideograph */ + [0x6572, 0x6572], /* CJK Ideograph */ + [0x6573, 0x6573], /* CJK Ideograph */ + [0x6574, 0x6574], /* CJK Ideograph */ + [0x6575, 0x6575], /* CJK Ideograph */ + [0x6576, 0x6576], /* CJK Ideograph */ + [0x6577, 0x6577], /* CJK Ideograph */ + [0x6578, 0x6578], /* CJK Ideograph */ + [0x6579, 0x6579], /* CJK Ideograph */ + [0x657a, 0x657a], /* CJK Ideograph */ + [0x657b, 0x657b], /* CJK Ideograph */ + [0x657c, 0x657c], /* CJK Ideograph */ + [0x657d, 0x657d], /* CJK Ideograph */ + [0x657e, 0x657e], /* CJK Ideograph */ + [0x657f, 0x657f], /* CJK Ideograph */ + [0x6580, 0x6580], /* CJK Ideograph */ + [0x6581, 0x6581], /* CJK Ideograph */ + [0x6582, 0x6582], /* CJK Ideograph */ + [0x6583, 0x6583], /* CJK Ideograph */ + [0x6584, 0x6584], /* CJK Ideograph */ + [0x6585, 0x6585], /* CJK Ideograph */ + [0x6586, 0x6586], /* CJK Ideograph */ + [0x6587, 0x6587], /* CJK Ideograph */ + [0x6588, 0x6588], /* CJK Ideograph */ + [0x6589, 0x6589], /* CJK Ideograph */ + [0x658a, 0x658a], /* CJK Ideograph */ + [0x658b, 0x658b], /* CJK Ideograph */ + [0x658c, 0x658c], /* CJK Ideograph */ + [0x658d, 0x658d], /* CJK Ideograph */ + [0x658e, 0x658e], /* CJK Ideograph */ + [0x658f, 0x658f], /* CJK Ideograph */ + [0x6590, 0x6590], /* CJK Ideograph */ + [0x6591, 0x6591], /* CJK Ideograph */ + [0x6592, 0x6592], /* CJK Ideograph */ + [0x6593, 0x6593], /* CJK Ideograph */ + [0x6594, 0x6594], /* CJK Ideograph */ + [0x6595, 0x6595], /* CJK Ideograph */ + [0x6596, 0x6596], /* CJK Ideograph */ + [0x6597, 0x6597], /* CJK Ideograph */ + [0x6598, 0x6598], /* CJK Ideograph */ + [0x6599, 0x6599], /* CJK Ideograph */ + [0x659a, 0x659a], /* CJK Ideograph */ + [0x659b, 0x659b], /* CJK Ideograph */ + [0x659c, 0x659c], /* CJK Ideograph */ + [0x659d, 0x659d], /* CJK Ideograph */ + [0x659e, 0x659e], /* CJK Ideograph */ + [0x659f, 0x659f], /* CJK Ideograph */ + [0x65a0, 0x65a0], /* CJK Ideograph */ + [0x65a1, 0x65a1], /* CJK Ideograph */ + [0x65a2, 0x65a2], /* CJK Ideograph */ + [0x65a3, 0x65a3], /* CJK Ideograph */ + [0x65a4, 0x65a4], /* CJK Ideograph */ + [0x65a5, 0x65a5], /* CJK Ideograph */ + [0x65a6, 0x65a6], /* CJK Ideograph */ + [0x65a7, 0x65a7], /* CJK Ideograph */ + [0x65a8, 0x65a8], /* CJK Ideograph */ + [0x65a9, 0x65a9], /* CJK Ideograph */ + [0x65aa, 0x65aa], /* CJK Ideograph */ + [0x65ab, 0x65ab], /* CJK Ideograph */ + [0x65ac, 0x65ac], /* CJK Ideograph */ + [0x65ad, 0x65ad], /* CJK Ideograph */ + [0x65ae, 0x65ae], /* CJK Ideograph */ + [0x65af, 0x65af], /* CJK Ideograph */ + [0x65b0, 0x65b0], /* CJK Ideograph */ + [0x65b1, 0x65b1], /* CJK Ideograph */ + [0x65b2, 0x65b2], /* CJK Ideograph */ + [0x65b3, 0x65b3], /* CJK Ideograph */ + [0x65b4, 0x65b4], /* CJK Ideograph */ + [0x65b5, 0x65b5], /* CJK Ideograph */ + [0x65b6, 0x65b6], /* CJK Ideograph */ + [0x65b7, 0x65b7], /* CJK Ideograph */ + [0x65b8, 0x65b8], /* CJK Ideograph */ + [0x65b9, 0x65b9], /* CJK Ideograph */ + [0x65ba, 0x65ba], /* CJK Ideograph */ + [0x65bb, 0x65bb], /* CJK Ideograph */ + [0x65bc, 0x65bc], /* CJK Ideograph */ + [0x65bd, 0x65bd], /* CJK Ideograph */ + [0x65be, 0x65be], /* CJK Ideograph */ + [0x65bf, 0x65bf], /* CJK Ideograph */ + [0x65c0, 0x65c0], /* CJK Ideograph */ + [0x65c1, 0x65c1], /* CJK Ideograph */ + [0x65c2, 0x65c2], /* CJK Ideograph */ + [0x65c3, 0x65c3], /* CJK Ideograph */ + [0x65c4, 0x65c4], /* CJK Ideograph */ + [0x65c5, 0x65c5], /* CJK Ideograph */ + [0x65c6, 0x65c6], /* CJK Ideograph */ + [0x65c7, 0x65c7], /* CJK Ideograph */ + [0x65c8, 0x65c8], /* CJK Ideograph */ + [0x65c9, 0x65c9], /* CJK Ideograph */ + [0x65ca, 0x65ca], /* CJK Ideograph */ + [0x65cb, 0x65cb], /* CJK Ideograph */ + [0x65cc, 0x65cc], /* CJK Ideograph */ + [0x65cd, 0x65cd], /* CJK Ideograph */ + [0x65ce, 0x65ce], /* CJK Ideograph */ + [0x65cf, 0x65cf], /* CJK Ideograph */ + [0x65d0, 0x65d0], /* CJK Ideograph */ + [0x65d1, 0x65d1], /* CJK Ideograph */ + [0x65d2, 0x65d2], /* CJK Ideograph */ + [0x65d3, 0x65d3], /* CJK Ideograph */ + [0x65d4, 0x65d4], /* CJK Ideograph */ + [0x65d5, 0x65d5], /* CJK Ideograph */ + [0x65d6, 0x65d6], /* CJK Ideograph */ + [0x65d7, 0x65d7], /* CJK Ideograph */ + [0x65d8, 0x65d8], /* CJK Ideograph */ + [0x65d9, 0x65d9], /* CJK Ideograph */ + [0x65da, 0x65da], /* CJK Ideograph */ + [0x65db, 0x65db], /* CJK Ideograph */ + [0x65dc, 0x65dc], /* CJK Ideograph */ + [0x65dd, 0x65dd], /* CJK Ideograph */ + [0x65de, 0x65de], /* CJK Ideograph */ + [0x65df, 0x65df], /* CJK Ideograph */ + [0x65e0, 0x65e0], /* CJK Ideograph */ + [0x65e1, 0x65e1], /* CJK Ideograph */ + [0x65e2, 0x65e2], /* CJK Ideograph */ + [0x65e3, 0x65e3], /* CJK Ideograph */ + [0x65e4, 0x65e4], /* CJK Ideograph */ + [0x65e5, 0x65e5], /* CJK Ideograph */ + [0x65e6, 0x65e6], /* CJK Ideograph */ + [0x65e7, 0x65e7], /* CJK Ideograph */ + [0x65e8, 0x65e8], /* CJK Ideograph */ + [0x65e9, 0x65e9], /* CJK Ideograph */ + [0x65ea, 0x65ea], /* CJK Ideograph */ + [0x65eb, 0x65eb], /* CJK Ideograph */ + [0x65ec, 0x65ec], /* CJK Ideograph */ + [0x65ed, 0x65ed], /* CJK Ideograph */ + [0x65ee, 0x65ee], /* CJK Ideograph */ + [0x65ef, 0x65ef], /* CJK Ideograph */ + [0x65f0, 0x65f0], /* CJK Ideograph */ + [0x65f1, 0x65f1], /* CJK Ideograph */ + [0x65f2, 0x65f2], /* CJK Ideograph */ + [0x65f3, 0x65f3], /* CJK Ideograph */ + [0x65f4, 0x65f4], /* CJK Ideograph */ + [0x65f5, 0x65f5], /* CJK Ideograph */ + [0x65f6, 0x65f6], /* CJK Ideograph */ + [0x65f7, 0x65f7], /* CJK Ideograph */ + [0x65f8, 0x65f8], /* CJK Ideograph */ + [0x65f9, 0x65f9], /* CJK Ideograph */ + [0x65fa, 0x65fa], /* CJK Ideograph */ + [0x65fb, 0x65fb], /* CJK Ideograph */ + [0x65fc, 0x65fc], /* CJK Ideograph */ + [0x65fd, 0x65fd], /* CJK Ideograph */ + [0x65fe, 0x65fe], /* CJK Ideograph */ + [0x65ff, 0x65ff], /* CJK Ideograph */ + [0x6600, 0x6600], /* CJK Ideograph */ + [0x6601, 0x6601], /* CJK Ideograph */ + [0x6602, 0x6602], /* CJK Ideograph */ + [0x6603, 0x6603], /* CJK Ideograph */ + [0x6604, 0x6604], /* CJK Ideograph */ + [0x6605, 0x6605], /* CJK Ideograph */ + [0x6606, 0x6606], /* CJK Ideograph */ + [0x6607, 0x6607], /* CJK Ideograph */ + [0x6608, 0x6608], /* CJK Ideograph */ + [0x6609, 0x6609], /* CJK Ideograph */ + [0x660a, 0x660a], /* CJK Ideograph */ + [0x660b, 0x660b], /* CJK Ideograph */ + [0x660c, 0x660c], /* CJK Ideograph */ + [0x660d, 0x660d], /* CJK Ideograph */ + [0x660e, 0x660e], /* CJK Ideograph */ + [0x660f, 0x660f], /* CJK Ideograph */ + [0x6610, 0x6610], /* CJK Ideograph */ + [0x6611, 0x6611], /* CJK Ideograph */ + [0x6612, 0x6612], /* CJK Ideograph */ + [0x6613, 0x6613], /* CJK Ideograph */ + [0x6614, 0x6614], /* CJK Ideograph */ + [0x6615, 0x6615], /* CJK Ideograph */ + [0x6616, 0x6616], /* CJK Ideograph */ + [0x6617, 0x6617], /* CJK Ideograph */ + [0x6618, 0x6618], /* CJK Ideograph */ + [0x6619, 0x6619], /* CJK Ideograph */ + [0x661a, 0x661a], /* CJK Ideograph */ + [0x661b, 0x661b], /* CJK Ideograph */ + [0x661c, 0x661c], /* CJK Ideograph */ + [0x661d, 0x661d], /* CJK Ideograph */ + [0x661e, 0x661e], /* CJK Ideograph */ + [0x661f, 0x661f], /* CJK Ideograph */ + [0x6620, 0x6620], /* CJK Ideograph */ + [0x6621, 0x6621], /* CJK Ideograph */ + [0x6622, 0x6622], /* CJK Ideograph */ + [0x6623, 0x6623], /* CJK Ideograph */ + [0x6624, 0x6624], /* CJK Ideograph */ + [0x6625, 0x6625], /* CJK Ideograph */ + [0x6626, 0x6626], /* CJK Ideograph */ + [0x6627, 0x6627], /* CJK Ideograph */ + [0x6628, 0x6628], /* CJK Ideograph */ + [0x6629, 0x6629], /* CJK Ideograph */ + [0x662a, 0x662a], /* CJK Ideograph */ + [0x662b, 0x662b], /* CJK Ideograph */ + [0x662c, 0x662c], /* CJK Ideograph */ + [0x662d, 0x662d], /* CJK Ideograph */ + [0x662e, 0x662e], /* CJK Ideograph */ + [0x662f, 0x662f], /* CJK Ideograph */ + [0x6630, 0x6630], /* CJK Ideograph */ + [0x6631, 0x6631], /* CJK Ideograph */ + [0x6632, 0x6632], /* CJK Ideograph */ + [0x6633, 0x6633], /* CJK Ideograph */ + [0x6634, 0x6634], /* CJK Ideograph */ + [0x6635, 0x6635], /* CJK Ideograph */ + [0x6636, 0x6636], /* CJK Ideograph */ + [0x6637, 0x6637], /* CJK Ideograph */ + [0x6638, 0x6638], /* CJK Ideograph */ + [0x6639, 0x6639], /* CJK Ideograph */ + [0x663a, 0x663a], /* CJK Ideograph */ + [0x663b, 0x663b], /* CJK Ideograph */ + [0x663c, 0x663c], /* CJK Ideograph */ + [0x663d, 0x663d], /* CJK Ideograph */ + [0x663e, 0x663e], /* CJK Ideograph */ + [0x663f, 0x663f], /* CJK Ideograph */ + [0x6640, 0x6640], /* CJK Ideograph */ + [0x6641, 0x6641], /* CJK Ideograph */ + [0x6642, 0x6642], /* CJK Ideograph */ + [0x6643, 0x6643], /* CJK Ideograph */ + [0x6644, 0x6644], /* CJK Ideograph */ + [0x6645, 0x6645], /* CJK Ideograph */ + [0x6646, 0x6646], /* CJK Ideograph */ + [0x6647, 0x6647], /* CJK Ideograph */ + [0x6648, 0x6648], /* CJK Ideograph */ + [0x6649, 0x6649], /* CJK Ideograph */ + [0x664a, 0x664a], /* CJK Ideograph */ + [0x664b, 0x664b], /* CJK Ideograph */ + [0x664c, 0x664c], /* CJK Ideograph */ + [0x664d, 0x664d], /* CJK Ideograph */ + [0x664e, 0x664e], /* CJK Ideograph */ + [0x664f, 0x664f], /* CJK Ideograph */ + [0x6650, 0x6650], /* CJK Ideograph */ + [0x6651, 0x6651], /* CJK Ideograph */ + [0x6652, 0x6652], /* CJK Ideograph */ + [0x6653, 0x6653], /* CJK Ideograph */ + [0x6654, 0x6654], /* CJK Ideograph */ + [0x6655, 0x6655], /* CJK Ideograph */ + [0x6656, 0x6656], /* CJK Ideograph */ + [0x6657, 0x6657], /* CJK Ideograph */ + [0x6658, 0x6658], /* CJK Ideograph */ + [0x6659, 0x6659], /* CJK Ideograph */ + [0x665a, 0x665a], /* CJK Ideograph */ + [0x665b, 0x665b], /* CJK Ideograph */ + [0x665c, 0x665c], /* CJK Ideograph */ + [0x665d, 0x665d], /* CJK Ideograph */ + [0x665e, 0x665e], /* CJK Ideograph */ + [0x665f, 0x665f], /* CJK Ideograph */ + [0x6660, 0x6660], /* CJK Ideograph */ + [0x6661, 0x6661], /* CJK Ideograph */ + [0x6662, 0x6662], /* CJK Ideograph */ + [0x6663, 0x6663], /* CJK Ideograph */ + [0x6664, 0x6664], /* CJK Ideograph */ + [0x6665, 0x6665], /* CJK Ideograph */ + [0x6666, 0x6666], /* CJK Ideograph */ + [0x6667, 0x6667], /* CJK Ideograph */ + [0x6668, 0x6668], /* CJK Ideograph */ + [0x6669, 0x6669], /* CJK Ideograph */ + [0x666a, 0x666a], /* CJK Ideograph */ + [0x666b, 0x666b], /* CJK Ideograph */ + [0x666c, 0x666c], /* CJK Ideograph */ + [0x666d, 0x666d], /* CJK Ideograph */ + [0x666e, 0x666e], /* CJK Ideograph */ + [0x666f, 0x666f], /* CJK Ideograph */ + [0x6670, 0x6670], /* CJK Ideograph */ + [0x6671, 0x6671], /* CJK Ideograph */ + [0x6672, 0x6672], /* CJK Ideograph */ + [0x6673, 0x6673], /* CJK Ideograph */ + [0x6674, 0x6674], /* CJK Ideograph */ + [0x6675, 0x6675], /* CJK Ideograph */ + [0x6676, 0x6676], /* CJK Ideograph */ + [0x6677, 0x6677], /* CJK Ideograph */ + [0x6678, 0x6678], /* CJK Ideograph */ + [0x6679, 0x6679], /* CJK Ideograph */ + [0x667a, 0x667a], /* CJK Ideograph */ + [0x667b, 0x667b], /* CJK Ideograph */ + [0x667c, 0x667c], /* CJK Ideograph */ + [0x667d, 0x667d], /* CJK Ideograph */ + [0x667e, 0x667e], /* CJK Ideograph */ + [0x667f, 0x667f], /* CJK Ideograph */ + [0x6680, 0x6680], /* CJK Ideograph */ + [0x6681, 0x6681], /* CJK Ideograph */ + [0x6682, 0x6682], /* CJK Ideograph */ + [0x6683, 0x6683], /* CJK Ideograph */ + [0x6684, 0x6684], /* CJK Ideograph */ + [0x6685, 0x6685], /* CJK Ideograph */ + [0x6686, 0x6686], /* CJK Ideograph */ + [0x6687, 0x6687], /* CJK Ideograph */ + [0x6688, 0x6688], /* CJK Ideograph */ + [0x6689, 0x6689], /* CJK Ideograph */ + [0x668a, 0x668a], /* CJK Ideograph */ + [0x668b, 0x668b], /* CJK Ideograph */ + [0x668c, 0x668c], /* CJK Ideograph */ + [0x668d, 0x668d], /* CJK Ideograph */ + [0x668e, 0x668e], /* CJK Ideograph */ + [0x668f, 0x668f], /* CJK Ideograph */ + [0x6690, 0x6690], /* CJK Ideograph */ + [0x6691, 0x6691], /* CJK Ideograph */ + [0x6692, 0x6692], /* CJK Ideograph */ + [0x6693, 0x6693], /* CJK Ideograph */ + [0x6694, 0x6694], /* CJK Ideograph */ + [0x6695, 0x6695], /* CJK Ideograph */ + [0x6696, 0x6696], /* CJK Ideograph */ + [0x6697, 0x6697], /* CJK Ideograph */ + [0x6698, 0x6698], /* CJK Ideograph */ + [0x6699, 0x6699], /* CJK Ideograph */ + [0x669a, 0x669a], /* CJK Ideograph */ + [0x669b, 0x669b], /* CJK Ideograph */ + [0x669c, 0x669c], /* CJK Ideograph */ + [0x669d, 0x669d], /* CJK Ideograph */ + [0x669e, 0x669e], /* CJK Ideograph */ + [0x669f, 0x669f], /* CJK Ideograph */ + [0x66a0, 0x66a0], /* CJK Ideograph */ + [0x66a1, 0x66a1], /* CJK Ideograph */ + [0x66a2, 0x66a2], /* CJK Ideograph */ + [0x66a3, 0x66a3], /* CJK Ideograph */ + [0x66a4, 0x66a4], /* CJK Ideograph */ + [0x66a5, 0x66a5], /* CJK Ideograph */ + [0x66a6, 0x66a6], /* CJK Ideograph */ + [0x66a7, 0x66a7], /* CJK Ideograph */ + [0x66a8, 0x66a8], /* CJK Ideograph */ + [0x66a9, 0x66a9], /* CJK Ideograph */ + [0x66aa, 0x66aa], /* CJK Ideograph */ + [0x66ab, 0x66ab], /* CJK Ideograph */ + [0x66ac, 0x66ac], /* CJK Ideograph */ + [0x66ad, 0x66ad], /* CJK Ideograph */ + [0x66ae, 0x66ae], /* CJK Ideograph */ + [0x66af, 0x66af], /* CJK Ideograph */ + [0x66b0, 0x66b0], /* CJK Ideograph */ + [0x66b1, 0x66b1], /* CJK Ideograph */ + [0x66b2, 0x66b2], /* CJK Ideograph */ + [0x66b3, 0x66b3], /* CJK Ideograph */ + [0x66b4, 0x66b4], /* CJK Ideograph */ + [0x66b5, 0x66b5], /* CJK Ideograph */ + [0x66b6, 0x66b6], /* CJK Ideograph */ + [0x66b7, 0x66b7], /* CJK Ideograph */ + [0x66b8, 0x66b8], /* CJK Ideograph */ + [0x66b9, 0x66b9], /* CJK Ideograph */ + [0x66ba, 0x66ba], /* CJK Ideograph */ + [0x66bb, 0x66bb], /* CJK Ideograph */ + [0x66bc, 0x66bc], /* CJK Ideograph */ + [0x66bd, 0x66bd], /* CJK Ideograph */ + [0x66be, 0x66be], /* CJK Ideograph */ + [0x66bf, 0x66bf], /* CJK Ideograph */ + [0x66c0, 0x66c0], /* CJK Ideograph */ + [0x66c1, 0x66c1], /* CJK Ideograph */ + [0x66c2, 0x66c2], /* CJK Ideograph */ + [0x66c3, 0x66c3], /* CJK Ideograph */ + [0x66c4, 0x66c4], /* CJK Ideograph */ + [0x66c5, 0x66c5], /* CJK Ideograph */ + [0x66c6, 0x66c6], /* CJK Ideograph */ + [0x66c7, 0x66c7], /* CJK Ideograph */ + [0x66c8, 0x66c8], /* CJK Ideograph */ + [0x66c9, 0x66c9], /* CJK Ideograph */ + [0x66ca, 0x66ca], /* CJK Ideograph */ + [0x66cb, 0x66cb], /* CJK Ideograph */ + [0x66cc, 0x66cc], /* CJK Ideograph */ + [0x66cd, 0x66cd], /* CJK Ideograph */ + [0x66ce, 0x66ce], /* CJK Ideograph */ + [0x66cf, 0x66cf], /* CJK Ideograph */ + [0x66d0, 0x66d0], /* CJK Ideograph */ + [0x66d1, 0x66d1], /* CJK Ideograph */ + [0x66d2, 0x66d2], /* CJK Ideograph */ + [0x66d3, 0x66d3], /* CJK Ideograph */ + [0x66d4, 0x66d4], /* CJK Ideograph */ + [0x66d5, 0x66d5], /* CJK Ideograph */ + [0x66d6, 0x66d6], /* CJK Ideograph */ + [0x66d7, 0x66d7], /* CJK Ideograph */ + [0x66d8, 0x66d8], /* CJK Ideograph */ + [0x66d9, 0x66d9], /* CJK Ideograph */ + [0x66da, 0x66da], /* CJK Ideograph */ + [0x66db, 0x66db], /* CJK Ideograph */ + [0x66dc, 0x66dc], /* CJK Ideograph */ + [0x66dd, 0x66dd], /* CJK Ideograph */ + [0x66de, 0x66de], /* CJK Ideograph */ + [0x66df, 0x66df], /* CJK Ideograph */ + [0x66e0, 0x66e0], /* CJK Ideograph */ + [0x66e1, 0x66e1], /* CJK Ideograph */ + [0x66e2, 0x66e2], /* CJK Ideograph */ + [0x66e3, 0x66e3], /* CJK Ideograph */ + [0x66e4, 0x66e4], /* CJK Ideograph */ + [0x66e5, 0x66e5], /* CJK Ideograph */ + [0x66e6, 0x66e6], /* CJK Ideograph */ + [0x66e7, 0x66e7], /* CJK Ideograph */ + [0x66e8, 0x66e8], /* CJK Ideograph */ + [0x66e9, 0x66e9], /* CJK Ideograph */ + [0x66ea, 0x66ea], /* CJK Ideograph */ + [0x66eb, 0x66eb], /* CJK Ideograph */ + [0x66ec, 0x66ec], /* CJK Ideograph */ + [0x66ed, 0x66ed], /* CJK Ideograph */ + [0x66ee, 0x66ee], /* CJK Ideograph */ + [0x66ef, 0x66ef], /* CJK Ideograph */ + [0x66f0, 0x66f0], /* CJK Ideograph */ + [0x66f1, 0x66f1], /* CJK Ideograph */ + [0x66f2, 0x66f2], /* CJK Ideograph */ + [0x66f3, 0x66f3], /* CJK Ideograph */ + [0x66f4, 0x66f4], /* CJK Ideograph */ + [0x66f5, 0x66f5], /* CJK Ideograph */ + [0x66f6, 0x66f6], /* CJK Ideograph */ + [0x66f7, 0x66f7], /* CJK Ideograph */ + [0x66f8, 0x66f8], /* CJK Ideograph */ + [0x66f9, 0x66f9], /* CJK Ideograph */ + [0x66fa, 0x66fa], /* CJK Ideograph */ + [0x66fb, 0x66fb], /* CJK Ideograph */ + [0x66fc, 0x66fc], /* CJK Ideograph */ + [0x66fd, 0x66fd], /* CJK Ideograph */ + [0x66fe, 0x66fe], /* CJK Ideograph */ + [0x66ff, 0x66ff], /* CJK Ideograph */ + [0x6700, 0x6700], /* CJK Ideograph */ + [0x6701, 0x6701], /* CJK Ideograph */ + [0x6702, 0x6702], /* CJK Ideograph */ + [0x6703, 0x6703], /* CJK Ideograph */ + [0x6704, 0x6704], /* CJK Ideograph */ + [0x6705, 0x6705], /* CJK Ideograph */ + [0x6706, 0x6706], /* CJK Ideograph */ + [0x6707, 0x6707], /* CJK Ideograph */ + [0x6708, 0x6708], /* CJK Ideograph */ + [0x6709, 0x6709], /* CJK Ideograph */ + [0x670a, 0x670a], /* CJK Ideograph */ + [0x670b, 0x670b], /* CJK Ideograph */ + [0x670c, 0x670c], /* CJK Ideograph */ + [0x670d, 0x670d], /* CJK Ideograph */ + [0x670e, 0x670e], /* CJK Ideograph */ + [0x670f, 0x670f], /* CJK Ideograph */ + [0x6710, 0x6710], /* CJK Ideograph */ + [0x6711, 0x6711], /* CJK Ideograph */ + [0x6712, 0x6712], /* CJK Ideograph */ + [0x6713, 0x6713], /* CJK Ideograph */ + [0x6714, 0x6714], /* CJK Ideograph */ + [0x6715, 0x6715], /* CJK Ideograph */ + [0x6716, 0x6716], /* CJK Ideograph */ + [0x6717, 0x6717], /* CJK Ideograph */ + [0x6718, 0x6718], /* CJK Ideograph */ + [0x6719, 0x6719], /* CJK Ideograph */ + [0x671a, 0x671a], /* CJK Ideograph */ + [0x671b, 0x671b], /* CJK Ideograph */ + [0x671c, 0x671c], /* CJK Ideograph */ + [0x671d, 0x671d], /* CJK Ideograph */ + [0x671e, 0x671e], /* CJK Ideograph */ + [0x671f, 0x671f], /* CJK Ideograph */ + [0x6720, 0x6720], /* CJK Ideograph */ + [0x6721, 0x6721], /* CJK Ideograph */ + [0x6722, 0x6722], /* CJK Ideograph */ + [0x6723, 0x6723], /* CJK Ideograph */ + [0x6724, 0x6724], /* CJK Ideograph */ + [0x6725, 0x6725], /* CJK Ideograph */ + [0x6726, 0x6726], /* CJK Ideograph */ + [0x6727, 0x6727], /* CJK Ideograph */ + [0x6728, 0x6728], /* CJK Ideograph */ + [0x6729, 0x6729], /* CJK Ideograph */ + [0x672a, 0x672a], /* CJK Ideograph */ + [0x672b, 0x672b], /* CJK Ideograph */ + [0x672c, 0x672c], /* CJK Ideograph */ + [0x672d, 0x672d], /* CJK Ideograph */ + [0x672e, 0x672e], /* CJK Ideograph */ + [0x672f, 0x672f], /* CJK Ideograph */ + [0x6730, 0x6730], /* CJK Ideograph */ + [0x6731, 0x6731], /* CJK Ideograph */ + [0x6732, 0x6732], /* CJK Ideograph */ + [0x6733, 0x6733], /* CJK Ideograph */ + [0x6734, 0x6734], /* CJK Ideograph */ + [0x6735, 0x6735], /* CJK Ideograph */ + [0x6736, 0x6736], /* CJK Ideograph */ + [0x6737, 0x6737], /* CJK Ideograph */ + [0x6738, 0x6738], /* CJK Ideograph */ + [0x6739, 0x6739], /* CJK Ideograph */ + [0x673a, 0x673a], /* CJK Ideograph */ + [0x673b, 0x673b], /* CJK Ideograph */ + [0x673c, 0x673c], /* CJK Ideograph */ + [0x673d, 0x673d], /* CJK Ideograph */ + [0x673e, 0x673e], /* CJK Ideograph */ + [0x673f, 0x673f], /* CJK Ideograph */ + [0x6740, 0x6740], /* CJK Ideograph */ + [0x6741, 0x6741], /* CJK Ideograph */ + [0x6742, 0x6742], /* CJK Ideograph */ + [0x6743, 0x6743], /* CJK Ideograph */ + [0x6744, 0x6744], /* CJK Ideograph */ + [0x6745, 0x6745], /* CJK Ideograph */ + [0x6746, 0x6746], /* CJK Ideograph */ + [0x6747, 0x6747], /* CJK Ideograph */ + [0x6748, 0x6748], /* CJK Ideograph */ + [0x6749, 0x6749], /* CJK Ideograph */ + [0x674a, 0x674a], /* CJK Ideograph */ + [0x674b, 0x674b], /* CJK Ideograph */ + [0x674c, 0x674c], /* CJK Ideograph */ + [0x674d, 0x674d], /* CJK Ideograph */ + [0x674e, 0x674e], /* CJK Ideograph */ + [0x674f, 0x674f], /* CJK Ideograph */ + [0x6750, 0x6750], /* CJK Ideograph */ + [0x6751, 0x6751], /* CJK Ideograph */ + [0x6752, 0x6752], /* CJK Ideograph */ + [0x6753, 0x6753], /* CJK Ideograph */ + [0x6754, 0x6754], /* CJK Ideograph */ + [0x6755, 0x6755], /* CJK Ideograph */ + [0x6756, 0x6756], /* CJK Ideograph */ + [0x6757, 0x6757], /* CJK Ideograph */ + [0x6758, 0x6758], /* CJK Ideograph */ + [0x6759, 0x6759], /* CJK Ideograph */ + [0x675a, 0x675a], /* CJK Ideograph */ + [0x675b, 0x675b], /* CJK Ideograph */ + [0x675c, 0x675c], /* CJK Ideograph */ + [0x675d, 0x675d], /* CJK Ideograph */ + [0x675e, 0x675e], /* CJK Ideograph */ + [0x675f, 0x675f], /* CJK Ideograph */ + [0x6760, 0x6760], /* CJK Ideograph */ + [0x6761, 0x6761], /* CJK Ideograph */ + [0x6762, 0x6762], /* CJK Ideograph */ + [0x6763, 0x6763], /* CJK Ideograph */ + [0x6764, 0x6764], /* CJK Ideograph */ + [0x6765, 0x6765], /* CJK Ideograph */ + [0x6766, 0x6766], /* CJK Ideograph */ + [0x6767, 0x6767], /* CJK Ideograph */ + [0x6768, 0x6768], /* CJK Ideograph */ + [0x6769, 0x6769], /* CJK Ideograph */ + [0x676a, 0x676a], /* CJK Ideograph */ + [0x676b, 0x676b], /* CJK Ideograph */ + [0x676c, 0x676c], /* CJK Ideograph */ + [0x676d, 0x676d], /* CJK Ideograph */ + [0x676e, 0x676e], /* CJK Ideograph */ + [0x676f, 0x676f], /* CJK Ideograph */ + [0x6770, 0x6770], /* CJK Ideograph */ + [0x6771, 0x6771], /* CJK Ideograph */ + [0x6772, 0x6772], /* CJK Ideograph */ + [0x6773, 0x6773], /* CJK Ideograph */ + [0x6774, 0x6774], /* CJK Ideograph */ + [0x6775, 0x6775], /* CJK Ideograph */ + [0x6776, 0x6776], /* CJK Ideograph */ + [0x6777, 0x6777], /* CJK Ideograph */ + [0x6778, 0x6778], /* CJK Ideograph */ + [0x6779, 0x6779], /* CJK Ideograph */ + [0x677a, 0x677a], /* CJK Ideograph */ + [0x677b, 0x677b], /* CJK Ideograph */ + [0x677c, 0x677c], /* CJK Ideograph */ + [0x677d, 0x677d], /* CJK Ideograph */ + [0x677e, 0x677e], /* CJK Ideograph */ + [0x677f, 0x677f], /* CJK Ideograph */ + [0x6780, 0x6780], /* CJK Ideograph */ + [0x6781, 0x6781], /* CJK Ideograph */ + [0x6782, 0x6782], /* CJK Ideograph */ + [0x6783, 0x6783], /* CJK Ideograph */ + [0x6784, 0x6784], /* CJK Ideograph */ + [0x6785, 0x6785], /* CJK Ideograph */ + [0x6786, 0x6786], /* CJK Ideograph */ + [0x6787, 0x6787], /* CJK Ideograph */ + [0x6788, 0x6788], /* CJK Ideograph */ + [0x6789, 0x6789], /* CJK Ideograph */ + [0x678a, 0x678a], /* CJK Ideograph */ + [0x678b, 0x678b], /* CJK Ideograph */ + [0x678c, 0x678c], /* CJK Ideograph */ + [0x678d, 0x678d], /* CJK Ideograph */ + [0x678e, 0x678e], /* CJK Ideograph */ + [0x678f, 0x678f], /* CJK Ideograph */ + [0x6790, 0x6790], /* CJK Ideograph */ + [0x6791, 0x6791], /* CJK Ideograph */ + [0x6792, 0x6792], /* CJK Ideograph */ + [0x6793, 0x6793], /* CJK Ideograph */ + [0x6794, 0x6794], /* CJK Ideograph */ + [0x6795, 0x6795], /* CJK Ideograph */ + [0x6796, 0x6796], /* CJK Ideograph */ + [0x6797, 0x6797], /* CJK Ideograph */ + [0x6798, 0x6798], /* CJK Ideograph */ + [0x6799, 0x6799], /* CJK Ideograph */ + [0x679a, 0x679a], /* CJK Ideograph */ + [0x679b, 0x679b], /* CJK Ideograph */ + [0x679c, 0x679c], /* CJK Ideograph */ + [0x679d, 0x679d], /* CJK Ideograph */ + [0x679e, 0x679e], /* CJK Ideograph */ + [0x679f, 0x679f], /* CJK Ideograph */ + [0x67a0, 0x67a0], /* CJK Ideograph */ + [0x67a1, 0x67a1], /* CJK Ideograph */ + [0x67a2, 0x67a2], /* CJK Ideograph */ + [0x67a3, 0x67a3], /* CJK Ideograph */ + [0x67a4, 0x67a4], /* CJK Ideograph */ + [0x67a5, 0x67a5], /* CJK Ideograph */ + [0x67a6, 0x67a6], /* CJK Ideograph */ + [0x67a7, 0x67a7], /* CJK Ideograph */ + [0x67a8, 0x67a8], /* CJK Ideograph */ + [0x67a9, 0x67a9], /* CJK Ideograph */ + [0x67aa, 0x67aa], /* CJK Ideograph */ + [0x67ab, 0x67ab], /* CJK Ideograph */ + [0x67ac, 0x67ac], /* CJK Ideograph */ + [0x67ad, 0x67ad], /* CJK Ideograph */ + [0x67ae, 0x67ae], /* CJK Ideograph */ + [0x67af, 0x67af], /* CJK Ideograph */ + [0x67b0, 0x67b0], /* CJK Ideograph */ + [0x67b1, 0x67b1], /* CJK Ideograph */ + [0x67b2, 0x67b2], /* CJK Ideograph */ + [0x67b3, 0x67b3], /* CJK Ideograph */ + [0x67b4, 0x67b4], /* CJK Ideograph */ + [0x67b5, 0x67b5], /* CJK Ideograph */ + [0x67b6, 0x67b6], /* CJK Ideograph */ + [0x67b7, 0x67b7], /* CJK Ideograph */ + [0x67b8, 0x67b8], /* CJK Ideograph */ + [0x67b9, 0x67b9], /* CJK Ideograph */ + [0x67ba, 0x67ba], /* CJK Ideograph */ + [0x67bb, 0x67bb], /* CJK Ideograph */ + [0x67bc, 0x67bc], /* CJK Ideograph */ + [0x67bd, 0x67bd], /* CJK Ideograph */ + [0x67be, 0x67be], /* CJK Ideograph */ + [0x67bf, 0x67bf], /* CJK Ideograph */ + [0x67c0, 0x67c0], /* CJK Ideograph */ + [0x67c1, 0x67c1], /* CJK Ideograph */ + [0x67c2, 0x67c2], /* CJK Ideograph */ + [0x67c3, 0x67c3], /* CJK Ideograph */ + [0x67c4, 0x67c4], /* CJK Ideograph */ + [0x67c5, 0x67c5], /* CJK Ideograph */ + [0x67c6, 0x67c6], /* CJK Ideograph */ + [0x67c7, 0x67c7], /* CJK Ideograph */ + [0x67c8, 0x67c8], /* CJK Ideograph */ + [0x67c9, 0x67c9], /* CJK Ideograph */ + [0x67ca, 0x67ca], /* CJK Ideograph */ + [0x67cb, 0x67cb], /* CJK Ideograph */ + [0x67cc, 0x67cc], /* CJK Ideograph */ + [0x67cd, 0x67cd], /* CJK Ideograph */ + [0x67ce, 0x67ce], /* CJK Ideograph */ + [0x67cf, 0x67cf], /* CJK Ideograph */ + [0x67d0, 0x67d0], /* CJK Ideograph */ + [0x67d1, 0x67d1], /* CJK Ideograph */ + [0x67d2, 0x67d2], /* CJK Ideograph */ + [0x67d3, 0x67d3], /* CJK Ideograph */ + [0x67d4, 0x67d4], /* CJK Ideograph */ + [0x67d5, 0x67d5], /* CJK Ideograph */ + [0x67d6, 0x67d6], /* CJK Ideograph */ + [0x67d7, 0x67d7], /* CJK Ideograph */ + [0x67d8, 0x67d8], /* CJK Ideograph */ + [0x67d9, 0x67d9], /* CJK Ideograph */ + [0x67da, 0x67da], /* CJK Ideograph */ + [0x67db, 0x67db], /* CJK Ideograph */ + [0x67dc, 0x67dc], /* CJK Ideograph */ + [0x67dd, 0x67dd], /* CJK Ideograph */ + [0x67de, 0x67de], /* CJK Ideograph */ + [0x67df, 0x67df], /* CJK Ideograph */ + [0x67e0, 0x67e0], /* CJK Ideograph */ + [0x67e1, 0x67e1], /* CJK Ideograph */ + [0x67e2, 0x67e2], /* CJK Ideograph */ + [0x67e3, 0x67e3], /* CJK Ideograph */ + [0x67e4, 0x67e4], /* CJK Ideograph */ + [0x67e5, 0x67e5], /* CJK Ideograph */ + [0x67e6, 0x67e6], /* CJK Ideograph */ + [0x67e7, 0x67e7], /* CJK Ideograph */ + [0x67e8, 0x67e8], /* CJK Ideograph */ + [0x67e9, 0x67e9], /* CJK Ideograph */ + [0x67ea, 0x67ea], /* CJK Ideograph */ + [0x67eb, 0x67eb], /* CJK Ideograph */ + [0x67ec, 0x67ec], /* CJK Ideograph */ + [0x67ed, 0x67ed], /* CJK Ideograph */ + [0x67ee, 0x67ee], /* CJK Ideograph */ + [0x67ef, 0x67ef], /* CJK Ideograph */ + [0x67f0, 0x67f0], /* CJK Ideograph */ + [0x67f1, 0x67f1], /* CJK Ideograph */ + [0x67f2, 0x67f2], /* CJK Ideograph */ + [0x67f3, 0x67f3], /* CJK Ideograph */ + [0x67f4, 0x67f4], /* CJK Ideograph */ + [0x67f5, 0x67f5], /* CJK Ideograph */ + [0x67f6, 0x67f6], /* CJK Ideograph */ + [0x67f7, 0x67f7], /* CJK Ideograph */ + [0x67f8, 0x67f8], /* CJK Ideograph */ + [0x67f9, 0x67f9], /* CJK Ideograph */ + [0x67fa, 0x67fa], /* CJK Ideograph */ + [0x67fb, 0x67fb], /* CJK Ideograph */ + [0x67fc, 0x67fc], /* CJK Ideograph */ + [0x67fd, 0x67fd], /* CJK Ideograph */ + [0x67fe, 0x67fe], /* CJK Ideograph */ + [0x67ff, 0x67ff], /* CJK Ideograph */ + [0x6800, 0x6800], /* CJK Ideograph */ + [0x6801, 0x6801], /* CJK Ideograph */ + [0x6802, 0x6802], /* CJK Ideograph */ + [0x6803, 0x6803], /* CJK Ideograph */ + [0x6804, 0x6804], /* CJK Ideograph */ + [0x6805, 0x6805], /* CJK Ideograph */ + [0x6806, 0x6806], /* CJK Ideograph */ + [0x6807, 0x6807], /* CJK Ideograph */ + [0x6808, 0x6808], /* CJK Ideograph */ + [0x6809, 0x6809], /* CJK Ideograph */ + [0x680a, 0x680a], /* CJK Ideograph */ + [0x680b, 0x680b], /* CJK Ideograph */ + [0x680c, 0x680c], /* CJK Ideograph */ + [0x680d, 0x680d], /* CJK Ideograph */ + [0x680e, 0x680e], /* CJK Ideograph */ + [0x680f, 0x680f], /* CJK Ideograph */ + [0x6810, 0x6810], /* CJK Ideograph */ + [0x6811, 0x6811], /* CJK Ideograph */ + [0x6812, 0x6812], /* CJK Ideograph */ + [0x6813, 0x6813], /* CJK Ideograph */ + [0x6814, 0x6814], /* CJK Ideograph */ + [0x6815, 0x6815], /* CJK Ideograph */ + [0x6816, 0x6816], /* CJK Ideograph */ + [0x6817, 0x6817], /* CJK Ideograph */ + [0x6818, 0x6818], /* CJK Ideograph */ + [0x6819, 0x6819], /* CJK Ideograph */ + [0x681a, 0x681a], /* CJK Ideograph */ + [0x681b, 0x681b], /* CJK Ideograph */ + [0x681c, 0x681c], /* CJK Ideograph */ + [0x681d, 0x681d], /* CJK Ideograph */ + [0x681e, 0x681e], /* CJK Ideograph */ + [0x681f, 0x681f], /* CJK Ideograph */ + [0x6820, 0x6820], /* CJK Ideograph */ + [0x6821, 0x6821], /* CJK Ideograph */ + [0x6822, 0x6822], /* CJK Ideograph */ + [0x6823, 0x6823], /* CJK Ideograph */ + [0x6824, 0x6824], /* CJK Ideograph */ + [0x6825, 0x6825], /* CJK Ideograph */ + [0x6826, 0x6826], /* CJK Ideograph */ + [0x6827, 0x6827], /* CJK Ideograph */ + [0x6828, 0x6828], /* CJK Ideograph */ + [0x6829, 0x6829], /* CJK Ideograph */ + [0x682a, 0x682a], /* CJK Ideograph */ + [0x682b, 0x682b], /* CJK Ideograph */ + [0x682c, 0x682c], /* CJK Ideograph */ + [0x682d, 0x682d], /* CJK Ideograph */ + [0x682e, 0x682e], /* CJK Ideograph */ + [0x682f, 0x682f], /* CJK Ideograph */ + [0x6830, 0x6830], /* CJK Ideograph */ + [0x6831, 0x6831], /* CJK Ideograph */ + [0x6832, 0x6832], /* CJK Ideograph */ + [0x6833, 0x6833], /* CJK Ideograph */ + [0x6834, 0x6834], /* CJK Ideograph */ + [0x6835, 0x6835], /* CJK Ideograph */ + [0x6836, 0x6836], /* CJK Ideograph */ + [0x6837, 0x6837], /* CJK Ideograph */ + [0x6838, 0x6838], /* CJK Ideograph */ + [0x6839, 0x6839], /* CJK Ideograph */ + [0x683a, 0x683a], /* CJK Ideograph */ + [0x683b, 0x683b], /* CJK Ideograph */ + [0x683c, 0x683c], /* CJK Ideograph */ + [0x683d, 0x683d], /* CJK Ideograph */ + [0x683e, 0x683e], /* CJK Ideograph */ + [0x683f, 0x683f], /* CJK Ideograph */ + [0x6840, 0x6840], /* CJK Ideograph */ + [0x6841, 0x6841], /* CJK Ideograph */ + [0x6842, 0x6842], /* CJK Ideograph */ + [0x6843, 0x6843], /* CJK Ideograph */ + [0x6844, 0x6844], /* CJK Ideograph */ + [0x6845, 0x6845], /* CJK Ideograph */ + [0x6846, 0x6846], /* CJK Ideograph */ + [0x6847, 0x6847], /* CJK Ideograph */ + [0x6848, 0x6848], /* CJK Ideograph */ + [0x6849, 0x6849], /* CJK Ideograph */ + [0x684a, 0x684a], /* CJK Ideograph */ + [0x684b, 0x684b], /* CJK Ideograph */ + [0x684c, 0x684c], /* CJK Ideograph */ + [0x684d, 0x684d], /* CJK Ideograph */ + [0x684e, 0x684e], /* CJK Ideograph */ + [0x684f, 0x684f], /* CJK Ideograph */ + [0x6850, 0x6850], /* CJK Ideograph */ + [0x6851, 0x6851], /* CJK Ideograph */ + [0x6852, 0x6852], /* CJK Ideograph */ + [0x6853, 0x6853], /* CJK Ideograph */ + [0x6854, 0x6854], /* CJK Ideograph */ + [0x6855, 0x6855], /* CJK Ideograph */ + [0x6856, 0x6856], /* CJK Ideograph */ + [0x6857, 0x6857], /* CJK Ideograph */ + [0x6858, 0x6858], /* CJK Ideograph */ + [0x6859, 0x6859], /* CJK Ideograph */ + [0x685a, 0x685a], /* CJK Ideograph */ + [0x685b, 0x685b], /* CJK Ideograph */ + [0x685c, 0x685c], /* CJK Ideograph */ + [0x685d, 0x685d], /* CJK Ideograph */ + [0x685e, 0x685e], /* CJK Ideograph */ + [0x685f, 0x685f], /* CJK Ideograph */ + [0x6860, 0x6860], /* CJK Ideograph */ + [0x6861, 0x6861], /* CJK Ideograph */ + [0x6862, 0x6862], /* CJK Ideograph */ + [0x6863, 0x6863], /* CJK Ideograph */ + [0x6864, 0x6864], /* CJK Ideograph */ + [0x6865, 0x6865], /* CJK Ideograph */ + [0x6866, 0x6866], /* CJK Ideograph */ + [0x6867, 0x6867], /* CJK Ideograph */ + [0x6868, 0x6868], /* CJK Ideograph */ + [0x6869, 0x6869], /* CJK Ideograph */ + [0x686a, 0x686a], /* CJK Ideograph */ + [0x686b, 0x686b], /* CJK Ideograph */ + [0x686c, 0x686c], /* CJK Ideograph */ + [0x686d, 0x686d], /* CJK Ideograph */ + [0x686e, 0x686e], /* CJK Ideograph */ + [0x686f, 0x686f], /* CJK Ideograph */ + [0x6870, 0x6870], /* CJK Ideograph */ + [0x6871, 0x6871], /* CJK Ideograph */ + [0x6872, 0x6872], /* CJK Ideograph */ + [0x6873, 0x6873], /* CJK Ideograph */ + [0x6874, 0x6874], /* CJK Ideograph */ + [0x6875, 0x6875], /* CJK Ideograph */ + [0x6876, 0x6876], /* CJK Ideograph */ + [0x6877, 0x6877], /* CJK Ideograph */ + [0x6878, 0x6878], /* CJK Ideograph */ + [0x6879, 0x6879], /* CJK Ideograph */ + [0x687a, 0x687a], /* CJK Ideograph */ + [0x687b, 0x687b], /* CJK Ideograph */ + [0x687c, 0x687c], /* CJK Ideograph */ + [0x687d, 0x687d], /* CJK Ideograph */ + [0x687e, 0x687e], /* CJK Ideograph */ + [0x687f, 0x687f], /* CJK Ideograph */ + [0x6880, 0x6880], /* CJK Ideograph */ + [0x6881, 0x6881], /* CJK Ideograph */ + [0x6882, 0x6882], /* CJK Ideograph */ + [0x6883, 0x6883], /* CJK Ideograph */ + [0x6884, 0x6884], /* CJK Ideograph */ + [0x6885, 0x6885], /* CJK Ideograph */ + [0x6886, 0x6886], /* CJK Ideograph */ + [0x6887, 0x6887], /* CJK Ideograph */ + [0x6888, 0x6888], /* CJK Ideograph */ + [0x6889, 0x6889], /* CJK Ideograph */ + [0x688a, 0x688a], /* CJK Ideograph */ + [0x688b, 0x688b], /* CJK Ideograph */ + [0x688c, 0x688c], /* CJK Ideograph */ + [0x688d, 0x688d], /* CJK Ideograph */ + [0x688e, 0x688e], /* CJK Ideograph */ + [0x688f, 0x688f], /* CJK Ideograph */ + [0x6890, 0x6890], /* CJK Ideograph */ + [0x6891, 0x6891], /* CJK Ideograph */ + [0x6892, 0x6892], /* CJK Ideograph */ + [0x6893, 0x6893], /* CJK Ideograph */ + [0x6894, 0x6894], /* CJK Ideograph */ + [0x6895, 0x6895], /* CJK Ideograph */ + [0x6896, 0x6896], /* CJK Ideograph */ + [0x6897, 0x6897], /* CJK Ideograph */ + [0x6898, 0x6898], /* CJK Ideograph */ + [0x6899, 0x6899], /* CJK Ideograph */ + [0x689a, 0x689a], /* CJK Ideograph */ + [0x689b, 0x689b], /* CJK Ideograph */ + [0x689c, 0x689c], /* CJK Ideograph */ + [0x689d, 0x689d], /* CJK Ideograph */ + [0x689e, 0x689e], /* CJK Ideograph */ + [0x689f, 0x689f], /* CJK Ideograph */ + [0x68a0, 0x68a0], /* CJK Ideograph */ + [0x68a1, 0x68a1], /* CJK Ideograph */ + [0x68a2, 0x68a2], /* CJK Ideograph */ + [0x68a3, 0x68a3], /* CJK Ideograph */ + [0x68a4, 0x68a4], /* CJK Ideograph */ + [0x68a5, 0x68a5], /* CJK Ideograph */ + [0x68a6, 0x68a6], /* CJK Ideograph */ + [0x68a7, 0x68a7], /* CJK Ideograph */ + [0x68a8, 0x68a8], /* CJK Ideograph */ + [0x68a9, 0x68a9], /* CJK Ideograph */ + [0x68aa, 0x68aa], /* CJK Ideograph */ + [0x68ab, 0x68ab], /* CJK Ideograph */ + [0x68ac, 0x68ac], /* CJK Ideograph */ + [0x68ad, 0x68ad], /* CJK Ideograph */ + [0x68ae, 0x68ae], /* CJK Ideograph */ + [0x68af, 0x68af], /* CJK Ideograph */ + [0x68b0, 0x68b0], /* CJK Ideograph */ + [0x68b1, 0x68b1], /* CJK Ideograph */ + [0x68b2, 0x68b2], /* CJK Ideograph */ + [0x68b3, 0x68b3], /* CJK Ideograph */ + [0x68b4, 0x68b4], /* CJK Ideograph */ + [0x68b5, 0x68b5], /* CJK Ideograph */ + [0x68b6, 0x68b6], /* CJK Ideograph */ + [0x68b7, 0x68b7], /* CJK Ideograph */ + [0x68b8, 0x68b8], /* CJK Ideograph */ + [0x68b9, 0x68b9], /* CJK Ideograph */ + [0x68ba, 0x68ba], /* CJK Ideograph */ + [0x68bb, 0x68bb], /* CJK Ideograph */ + [0x68bc, 0x68bc], /* CJK Ideograph */ + [0x68bd, 0x68bd], /* CJK Ideograph */ + [0x68be, 0x68be], /* CJK Ideograph */ + [0x68bf, 0x68bf], /* CJK Ideograph */ + [0x68c0, 0x68c0], /* CJK Ideograph */ + [0x68c1, 0x68c1], /* CJK Ideograph */ + [0x68c2, 0x68c2], /* CJK Ideograph */ + [0x68c3, 0x68c3], /* CJK Ideograph */ + [0x68c4, 0x68c4], /* CJK Ideograph */ + [0x68c5, 0x68c5], /* CJK Ideograph */ + [0x68c6, 0x68c6], /* CJK Ideograph */ + [0x68c7, 0x68c7], /* CJK Ideograph */ + [0x68c8, 0x68c8], /* CJK Ideograph */ + [0x68c9, 0x68c9], /* CJK Ideograph */ + [0x68ca, 0x68ca], /* CJK Ideograph */ + [0x68cb, 0x68cb], /* CJK Ideograph */ + [0x68cc, 0x68cc], /* CJK Ideograph */ + [0x68cd, 0x68cd], /* CJK Ideograph */ + [0x68ce, 0x68ce], /* CJK Ideograph */ + [0x68cf, 0x68cf], /* CJK Ideograph */ + [0x68d0, 0x68d0], /* CJK Ideograph */ + [0x68d1, 0x68d1], /* CJK Ideograph */ + [0x68d2, 0x68d2], /* CJK Ideograph */ + [0x68d3, 0x68d3], /* CJK Ideograph */ + [0x68d4, 0x68d4], /* CJK Ideograph */ + [0x68d5, 0x68d5], /* CJK Ideograph */ + [0x68d6, 0x68d6], /* CJK Ideograph */ + [0x68d7, 0x68d7], /* CJK Ideograph */ + [0x68d8, 0x68d8], /* CJK Ideograph */ + [0x68d9, 0x68d9], /* CJK Ideograph */ + [0x68da, 0x68da], /* CJK Ideograph */ + [0x68db, 0x68db], /* CJK Ideograph */ + [0x68dc, 0x68dc], /* CJK Ideograph */ + [0x68dd, 0x68dd], /* CJK Ideograph */ + [0x68de, 0x68de], /* CJK Ideograph */ + [0x68df, 0x68df], /* CJK Ideograph */ + [0x68e0, 0x68e0], /* CJK Ideograph */ + [0x68e1, 0x68e1], /* CJK Ideograph */ + [0x68e2, 0x68e2], /* CJK Ideograph */ + [0x68e3, 0x68e3], /* CJK Ideograph */ + [0x68e4, 0x68e4], /* CJK Ideograph */ + [0x68e5, 0x68e5], /* CJK Ideograph */ + [0x68e6, 0x68e6], /* CJK Ideograph */ + [0x68e7, 0x68e7], /* CJK Ideograph */ + [0x68e8, 0x68e8], /* CJK Ideograph */ + [0x68e9, 0x68e9], /* CJK Ideograph */ + [0x68ea, 0x68ea], /* CJK Ideograph */ + [0x68eb, 0x68eb], /* CJK Ideograph */ + [0x68ec, 0x68ec], /* CJK Ideograph */ + [0x68ed, 0x68ed], /* CJK Ideograph */ + [0x68ee, 0x68ee], /* CJK Ideograph */ + [0x68ef, 0x68ef], /* CJK Ideograph */ + [0x68f0, 0x68f0], /* CJK Ideograph */ + [0x68f1, 0x68f1], /* CJK Ideograph */ + [0x68f2, 0x68f2], /* CJK Ideograph */ + [0x68f3, 0x68f3], /* CJK Ideograph */ + [0x68f4, 0x68f4], /* CJK Ideograph */ + [0x68f5, 0x68f5], /* CJK Ideograph */ + [0x68f6, 0x68f6], /* CJK Ideograph */ + [0x68f7, 0x68f7], /* CJK Ideograph */ + [0x68f8, 0x68f8], /* CJK Ideograph */ + [0x68f9, 0x68f9], /* CJK Ideograph */ + [0x68fa, 0x68fa], /* CJK Ideograph */ + [0x68fb, 0x68fb], /* CJK Ideograph */ + [0x68fc, 0x68fc], /* CJK Ideograph */ + [0x68fd, 0x68fd], /* CJK Ideograph */ + [0x68fe, 0x68fe], /* CJK Ideograph */ + [0x68ff, 0x68ff], /* CJK Ideograph */ + [0x6900, 0x6900], /* CJK Ideograph */ + [0x6901, 0x6901], /* CJK Ideograph */ + [0x6902, 0x6902], /* CJK Ideograph */ + [0x6903, 0x6903], /* CJK Ideograph */ + [0x6904, 0x6904], /* CJK Ideograph */ + [0x6905, 0x6905], /* CJK Ideograph */ + [0x6906, 0x6906], /* CJK Ideograph */ + [0x6907, 0x6907], /* CJK Ideograph */ + [0x6908, 0x6908], /* CJK Ideograph */ + [0x6909, 0x6909], /* CJK Ideograph */ + [0x690a, 0x690a], /* CJK Ideograph */ + [0x690b, 0x690b], /* CJK Ideograph */ + [0x690c, 0x690c], /* CJK Ideograph */ + [0x690d, 0x690d], /* CJK Ideograph */ + [0x690e, 0x690e], /* CJK Ideograph */ + [0x690f, 0x690f], /* CJK Ideograph */ + [0x6910, 0x6910], /* CJK Ideograph */ + [0x6911, 0x6911], /* CJK Ideograph */ + [0x6912, 0x6912], /* CJK Ideograph */ + [0x6913, 0x6913], /* CJK Ideograph */ + [0x6914, 0x6914], /* CJK Ideograph */ + [0x6915, 0x6915], /* CJK Ideograph */ + [0x6916, 0x6916], /* CJK Ideograph */ + [0x6917, 0x6917], /* CJK Ideograph */ + [0x6918, 0x6918], /* CJK Ideograph */ + [0x6919, 0x6919], /* CJK Ideograph */ + [0x691a, 0x691a], /* CJK Ideograph */ + [0x691b, 0x691b], /* CJK Ideograph */ + [0x691c, 0x691c], /* CJK Ideograph */ + [0x691d, 0x691d], /* CJK Ideograph */ + [0x691e, 0x691e], /* CJK Ideograph */ + [0x691f, 0x691f], /* CJK Ideograph */ + [0x6920, 0x6920], /* CJK Ideograph */ + [0x6921, 0x6921], /* CJK Ideograph */ + [0x6922, 0x6922], /* CJK Ideograph */ + [0x6923, 0x6923], /* CJK Ideograph */ + [0x6924, 0x6924], /* CJK Ideograph */ + [0x6925, 0x6925], /* CJK Ideograph */ + [0x6926, 0x6926], /* CJK Ideograph */ + [0x6927, 0x6927], /* CJK Ideograph */ + [0x6928, 0x6928], /* CJK Ideograph */ + [0x6929, 0x6929], /* CJK Ideograph */ + [0x692a, 0x692a], /* CJK Ideograph */ + [0x692b, 0x692b], /* CJK Ideograph */ + [0x692c, 0x692c], /* CJK Ideograph */ + [0x692d, 0x692d], /* CJK Ideograph */ + [0x692e, 0x692e], /* CJK Ideograph */ + [0x692f, 0x692f], /* CJK Ideograph */ + [0x6930, 0x6930], /* CJK Ideograph */ + [0x6931, 0x6931], /* CJK Ideograph */ + [0x6932, 0x6932], /* CJK Ideograph */ + [0x6933, 0x6933], /* CJK Ideograph */ + [0x6934, 0x6934], /* CJK Ideograph */ + [0x6935, 0x6935], /* CJK Ideograph */ + [0x6936, 0x6936], /* CJK Ideograph */ + [0x6937, 0x6937], /* CJK Ideograph */ + [0x6938, 0x6938], /* CJK Ideograph */ + [0x6939, 0x6939], /* CJK Ideograph */ + [0x693a, 0x693a], /* CJK Ideograph */ + [0x693b, 0x693b], /* CJK Ideograph */ + [0x693c, 0x693c], /* CJK Ideograph */ + [0x693d, 0x693d], /* CJK Ideograph */ + [0x693e, 0x693e], /* CJK Ideograph */ + [0x693f, 0x693f], /* CJK Ideograph */ + [0x6940, 0x6940], /* CJK Ideograph */ + [0x6941, 0x6941], /* CJK Ideograph */ + [0x6942, 0x6942], /* CJK Ideograph */ + [0x6943, 0x6943], /* CJK Ideograph */ + [0x6944, 0x6944], /* CJK Ideograph */ + [0x6945, 0x6945], /* CJK Ideograph */ + [0x6946, 0x6946], /* CJK Ideograph */ + [0x6947, 0x6947], /* CJK Ideograph */ + [0x6948, 0x6948], /* CJK Ideograph */ + [0x6949, 0x6949], /* CJK Ideograph */ + [0x694a, 0x694a], /* CJK Ideograph */ + [0x694b, 0x694b], /* CJK Ideograph */ + [0x694c, 0x694c], /* CJK Ideograph */ + [0x694d, 0x694d], /* CJK Ideograph */ + [0x694e, 0x694e], /* CJK Ideograph */ + [0x694f, 0x694f], /* CJK Ideograph */ + [0x6950, 0x6950], /* CJK Ideograph */ + [0x6951, 0x6951], /* CJK Ideograph */ + [0x6952, 0x6952], /* CJK Ideograph */ + [0x6953, 0x6953], /* CJK Ideograph */ + [0x6954, 0x6954], /* CJK Ideograph */ + [0x6955, 0x6955], /* CJK Ideograph */ + [0x6956, 0x6956], /* CJK Ideograph */ + [0x6957, 0x6957], /* CJK Ideograph */ + [0x6958, 0x6958], /* CJK Ideograph */ + [0x6959, 0x6959], /* CJK Ideograph */ + [0x695a, 0x695a], /* CJK Ideograph */ + [0x695b, 0x695b], /* CJK Ideograph */ + [0x695c, 0x695c], /* CJK Ideograph */ + [0x695d, 0x695d], /* CJK Ideograph */ + [0x695e, 0x695e], /* CJK Ideograph */ + [0x695f, 0x695f], /* CJK Ideograph */ + [0x6960, 0x6960], /* CJK Ideograph */ + [0x6961, 0x6961], /* CJK Ideograph */ + [0x6962, 0x6962], /* CJK Ideograph */ + [0x6963, 0x6963], /* CJK Ideograph */ + [0x6964, 0x6964], /* CJK Ideograph */ + [0x6965, 0x6965], /* CJK Ideograph */ + [0x6966, 0x6966], /* CJK Ideograph */ + [0x6967, 0x6967], /* CJK Ideograph */ + [0x6968, 0x6968], /* CJK Ideograph */ + [0x6969, 0x6969], /* CJK Ideograph */ + [0x696a, 0x696a], /* CJK Ideograph */ + [0x696b, 0x696b], /* CJK Ideograph */ + [0x696c, 0x696c], /* CJK Ideograph */ + [0x696d, 0x696d], /* CJK Ideograph */ + [0x696e, 0x696e], /* CJK Ideograph */ + [0x696f, 0x696f], /* CJK Ideograph */ + [0x6970, 0x6970], /* CJK Ideograph */ + [0x6971, 0x6971], /* CJK Ideograph */ + [0x6972, 0x6972], /* CJK Ideograph */ + [0x6973, 0x6973], /* CJK Ideograph */ + [0x6974, 0x6974], /* CJK Ideograph */ + [0x6975, 0x6975], /* CJK Ideograph */ + [0x6976, 0x6976], /* CJK Ideograph */ + [0x6977, 0x6977], /* CJK Ideograph */ + [0x6978, 0x6978], /* CJK Ideograph */ + [0x6979, 0x6979], /* CJK Ideograph */ + [0x697a, 0x697a], /* CJK Ideograph */ + [0x697b, 0x697b], /* CJK Ideograph */ + [0x697c, 0x697c], /* CJK Ideograph */ + [0x697d, 0x697d], /* CJK Ideograph */ + [0x697e, 0x697e], /* CJK Ideograph */ + [0x697f, 0x697f], /* CJK Ideograph */ + [0x6980, 0x6980], /* CJK Ideograph */ + [0x6981, 0x6981], /* CJK Ideograph */ + [0x6982, 0x6982], /* CJK Ideograph */ + [0x6983, 0x6983], /* CJK Ideograph */ + [0x6984, 0x6984], /* CJK Ideograph */ + [0x6985, 0x6985], /* CJK Ideograph */ + [0x6986, 0x6986], /* CJK Ideograph */ + [0x6987, 0x6987], /* CJK Ideograph */ + [0x6988, 0x6988], /* CJK Ideograph */ + [0x6989, 0x6989], /* CJK Ideograph */ + [0x698a, 0x698a], /* CJK Ideograph */ + [0x698b, 0x698b], /* CJK Ideograph */ + [0x698c, 0x698c], /* CJK Ideograph */ + [0x698d, 0x698d], /* CJK Ideograph */ + [0x698e, 0x698e], /* CJK Ideograph */ + [0x698f, 0x698f], /* CJK Ideograph */ + [0x6990, 0x6990], /* CJK Ideograph */ + [0x6991, 0x6991], /* CJK Ideograph */ + [0x6992, 0x6992], /* CJK Ideograph */ + [0x6993, 0x6993], /* CJK Ideograph */ + [0x6994, 0x6994], /* CJK Ideograph */ + [0x6995, 0x6995], /* CJK Ideograph */ + [0x6996, 0x6996], /* CJK Ideograph */ + [0x6997, 0x6997], /* CJK Ideograph */ + [0x6998, 0x6998], /* CJK Ideograph */ + [0x6999, 0x6999], /* CJK Ideograph */ + [0x699a, 0x699a], /* CJK Ideograph */ + [0x699b, 0x699b], /* CJK Ideograph */ + [0x699c, 0x699c], /* CJK Ideograph */ + [0x699d, 0x699d], /* CJK Ideograph */ + [0x699e, 0x699e], /* CJK Ideograph */ + [0x699f, 0x699f], /* CJK Ideograph */ + [0x69a0, 0x69a0], /* CJK Ideograph */ + [0x69a1, 0x69a1], /* CJK Ideograph */ + [0x69a2, 0x69a2], /* CJK Ideograph */ + [0x69a3, 0x69a3], /* CJK Ideograph */ + [0x69a4, 0x69a4], /* CJK Ideograph */ + [0x69a5, 0x69a5], /* CJK Ideograph */ + [0x69a6, 0x69a6], /* CJK Ideograph */ + [0x69a7, 0x69a7], /* CJK Ideograph */ + [0x69a8, 0x69a8], /* CJK Ideograph */ + [0x69a9, 0x69a9], /* CJK Ideograph */ + [0x69aa, 0x69aa], /* CJK Ideograph */ + [0x69ab, 0x69ab], /* CJK Ideograph */ + [0x69ac, 0x69ac], /* CJK Ideograph */ + [0x69ad, 0x69ad], /* CJK Ideograph */ + [0x69ae, 0x69ae], /* CJK Ideograph */ + [0x69af, 0x69af], /* CJK Ideograph */ + [0x69b0, 0x69b0], /* CJK Ideograph */ + [0x69b1, 0x69b1], /* CJK Ideograph */ + [0x69b2, 0x69b2], /* CJK Ideograph */ + [0x69b3, 0x69b3], /* CJK Ideograph */ + [0x69b4, 0x69b4], /* CJK Ideograph */ + [0x69b5, 0x69b5], /* CJK Ideograph */ + [0x69b6, 0x69b6], /* CJK Ideograph */ + [0x69b7, 0x69b7], /* CJK Ideograph */ + [0x69b8, 0x69b8], /* CJK Ideograph */ + [0x69b9, 0x69b9], /* CJK Ideograph */ + [0x69ba, 0x69ba], /* CJK Ideograph */ + [0x69bb, 0x69bb], /* CJK Ideograph */ + [0x69bc, 0x69bc], /* CJK Ideograph */ + [0x69bd, 0x69bd], /* CJK Ideograph */ + [0x69be, 0x69be], /* CJK Ideograph */ + [0x69bf, 0x69bf], /* CJK Ideograph */ + [0x69c0, 0x69c0], /* CJK Ideograph */ + [0x69c1, 0x69c1], /* CJK Ideograph */ + [0x69c2, 0x69c2], /* CJK Ideograph */ + [0x69c3, 0x69c3], /* CJK Ideograph */ + [0x69c4, 0x69c4], /* CJK Ideograph */ + [0x69c5, 0x69c5], /* CJK Ideograph */ + [0x69c6, 0x69c6], /* CJK Ideograph */ + [0x69c7, 0x69c7], /* CJK Ideograph */ + [0x69c8, 0x69c8], /* CJK Ideograph */ + [0x69c9, 0x69c9], /* CJK Ideograph */ + [0x69ca, 0x69ca], /* CJK Ideograph */ + [0x69cb, 0x69cb], /* CJK Ideograph */ + [0x69cc, 0x69cc], /* CJK Ideograph */ + [0x69cd, 0x69cd], /* CJK Ideograph */ + [0x69ce, 0x69ce], /* CJK Ideograph */ + [0x69cf, 0x69cf], /* CJK Ideograph */ + [0x69d0, 0x69d0], /* CJK Ideograph */ + [0x69d1, 0x69d1], /* CJK Ideograph */ + [0x69d2, 0x69d2], /* CJK Ideograph */ + [0x69d3, 0x69d3], /* CJK Ideograph */ + [0x69d4, 0x69d4], /* CJK Ideograph */ + [0x69d5, 0x69d5], /* CJK Ideograph */ + [0x69d6, 0x69d6], /* CJK Ideograph */ + [0x69d7, 0x69d7], /* CJK Ideograph */ + [0x69d8, 0x69d8], /* CJK Ideograph */ + [0x69d9, 0x69d9], /* CJK Ideograph */ + [0x69da, 0x69da], /* CJK Ideograph */ + [0x69db, 0x69db], /* CJK Ideograph */ + [0x69dc, 0x69dc], /* CJK Ideograph */ + [0x69dd, 0x69dd], /* CJK Ideograph */ + [0x69de, 0x69de], /* CJK Ideograph */ + [0x69df, 0x69df], /* CJK Ideograph */ + [0x69e0, 0x69e0], /* CJK Ideograph */ + [0x69e1, 0x69e1], /* CJK Ideograph */ + [0x69e2, 0x69e2], /* CJK Ideograph */ + [0x69e3, 0x69e3], /* CJK Ideograph */ + [0x69e4, 0x69e4], /* CJK Ideograph */ + [0x69e5, 0x69e5], /* CJK Ideograph */ + [0x69e6, 0x69e6], /* CJK Ideograph */ + [0x69e7, 0x69e7], /* CJK Ideograph */ + [0x69e8, 0x69e8], /* CJK Ideograph */ + [0x69e9, 0x69e9], /* CJK Ideograph */ + [0x69ea, 0x69ea], /* CJK Ideograph */ + [0x69eb, 0x69eb], /* CJK Ideograph */ + [0x69ec, 0x69ec], /* CJK Ideograph */ + [0x69ed, 0x69ed], /* CJK Ideograph */ + [0x69ee, 0x69ee], /* CJK Ideograph */ + [0x69ef, 0x69ef], /* CJK Ideograph */ + [0x69f0, 0x69f0], /* CJK Ideograph */ + [0x69f1, 0x69f1], /* CJK Ideograph */ + [0x69f2, 0x69f2], /* CJK Ideograph */ + [0x69f3, 0x69f3], /* CJK Ideograph */ + [0x69f4, 0x69f4], /* CJK Ideograph */ + [0x69f5, 0x69f5], /* CJK Ideograph */ + [0x69f6, 0x69f6], /* CJK Ideograph */ + [0x69f7, 0x69f7], /* CJK Ideograph */ + [0x69f8, 0x69f8], /* CJK Ideograph */ + [0x69f9, 0x69f9], /* CJK Ideograph */ + [0x69fa, 0x69fa], /* CJK Ideograph */ + [0x69fb, 0x69fb], /* CJK Ideograph */ + [0x69fc, 0x69fc], /* CJK Ideograph */ + [0x69fd, 0x69fd], /* CJK Ideograph */ + [0x69fe, 0x69fe], /* CJK Ideograph */ + [0x69ff, 0x69ff], /* CJK Ideograph */ + [0x6a00, 0x6a00], /* CJK Ideograph */ + [0x6a01, 0x6a01], /* CJK Ideograph */ + [0x6a02, 0x6a02], /* CJK Ideograph */ + [0x6a03, 0x6a03], /* CJK Ideograph */ + [0x6a04, 0x6a04], /* CJK Ideograph */ + [0x6a05, 0x6a05], /* CJK Ideograph */ + [0x6a06, 0x6a06], /* CJK Ideograph */ + [0x6a07, 0x6a07], /* CJK Ideograph */ + [0x6a08, 0x6a08], /* CJK Ideograph */ + [0x6a09, 0x6a09], /* CJK Ideograph */ + [0x6a0a, 0x6a0a], /* CJK Ideograph */ + [0x6a0b, 0x6a0b], /* CJK Ideograph */ + [0x6a0c, 0x6a0c], /* CJK Ideograph */ + [0x6a0d, 0x6a0d], /* CJK Ideograph */ + [0x6a0e, 0x6a0e], /* CJK Ideograph */ + [0x6a0f, 0x6a0f], /* CJK Ideograph */ + [0x6a10, 0x6a10], /* CJK Ideograph */ + [0x6a11, 0x6a11], /* CJK Ideograph */ + [0x6a12, 0x6a12], /* CJK Ideograph */ + [0x6a13, 0x6a13], /* CJK Ideograph */ + [0x6a14, 0x6a14], /* CJK Ideograph */ + [0x6a15, 0x6a15], /* CJK Ideograph */ + [0x6a16, 0x6a16], /* CJK Ideograph */ + [0x6a17, 0x6a17], /* CJK Ideograph */ + [0x6a18, 0x6a18], /* CJK Ideograph */ + [0x6a19, 0x6a19], /* CJK Ideograph */ + [0x6a1a, 0x6a1a], /* CJK Ideograph */ + [0x6a1b, 0x6a1b], /* CJK Ideograph */ + [0x6a1c, 0x6a1c], /* CJK Ideograph */ + [0x6a1d, 0x6a1d], /* CJK Ideograph */ + [0x6a1e, 0x6a1e], /* CJK Ideograph */ + [0x6a1f, 0x6a1f], /* CJK Ideograph */ + [0x6a20, 0x6a20], /* CJK Ideograph */ + [0x6a21, 0x6a21], /* CJK Ideograph */ + [0x6a22, 0x6a22], /* CJK Ideograph */ + [0x6a23, 0x6a23], /* CJK Ideograph */ + [0x6a24, 0x6a24], /* CJK Ideograph */ + [0x6a25, 0x6a25], /* CJK Ideograph */ + [0x6a26, 0x6a26], /* CJK Ideograph */ + [0x6a27, 0x6a27], /* CJK Ideograph */ + [0x6a28, 0x6a28], /* CJK Ideograph */ + [0x6a29, 0x6a29], /* CJK Ideograph */ + [0x6a2a, 0x6a2a], /* CJK Ideograph */ + [0x6a2b, 0x6a2b], /* CJK Ideograph */ + [0x6a2c, 0x6a2c], /* CJK Ideograph */ + [0x6a2d, 0x6a2d], /* CJK Ideograph */ + [0x6a2e, 0x6a2e], /* CJK Ideograph */ + [0x6a2f, 0x6a2f], /* CJK Ideograph */ + [0x6a30, 0x6a30], /* CJK Ideograph */ + [0x6a31, 0x6a31], /* CJK Ideograph */ + [0x6a32, 0x6a32], /* CJK Ideograph */ + [0x6a33, 0x6a33], /* CJK Ideograph */ + [0x6a34, 0x6a34], /* CJK Ideograph */ + [0x6a35, 0x6a35], /* CJK Ideograph */ + [0x6a36, 0x6a36], /* CJK Ideograph */ + [0x6a37, 0x6a37], /* CJK Ideograph */ + [0x6a38, 0x6a38], /* CJK Ideograph */ + [0x6a39, 0x6a39], /* CJK Ideograph */ + [0x6a3a, 0x6a3a], /* CJK Ideograph */ + [0x6a3b, 0x6a3b], /* CJK Ideograph */ + [0x6a3c, 0x6a3c], /* CJK Ideograph */ + [0x6a3d, 0x6a3d], /* CJK Ideograph */ + [0x6a3e, 0x6a3e], /* CJK Ideograph */ + [0x6a3f, 0x6a3f], /* CJK Ideograph */ + [0x6a40, 0x6a40], /* CJK Ideograph */ + [0x6a41, 0x6a41], /* CJK Ideograph */ + [0x6a42, 0x6a42], /* CJK Ideograph */ + [0x6a43, 0x6a43], /* CJK Ideograph */ + [0x6a44, 0x6a44], /* CJK Ideograph */ + [0x6a45, 0x6a45], /* CJK Ideograph */ + [0x6a46, 0x6a46], /* CJK Ideograph */ + [0x6a47, 0x6a47], /* CJK Ideograph */ + [0x6a48, 0x6a48], /* CJK Ideograph */ + [0x6a49, 0x6a49], /* CJK Ideograph */ + [0x6a4a, 0x6a4a], /* CJK Ideograph */ + [0x6a4b, 0x6a4b], /* CJK Ideograph */ + [0x6a4c, 0x6a4c], /* CJK Ideograph */ + [0x6a4d, 0x6a4d], /* CJK Ideograph */ + [0x6a4e, 0x6a4e], /* CJK Ideograph */ + [0x6a4f, 0x6a4f], /* CJK Ideograph */ + [0x6a50, 0x6a50], /* CJK Ideograph */ + [0x6a51, 0x6a51], /* CJK Ideograph */ + [0x6a52, 0x6a52], /* CJK Ideograph */ + [0x6a53, 0x6a53], /* CJK Ideograph */ + [0x6a54, 0x6a54], /* CJK Ideograph */ + [0x6a55, 0x6a55], /* CJK Ideograph */ + [0x6a56, 0x6a56], /* CJK Ideograph */ + [0x6a57, 0x6a57], /* CJK Ideograph */ + [0x6a58, 0x6a58], /* CJK Ideograph */ + [0x6a59, 0x6a59], /* CJK Ideograph */ + [0x6a5a, 0x6a5a], /* CJK Ideograph */ + [0x6a5b, 0x6a5b], /* CJK Ideograph */ + [0x6a5c, 0x6a5c], /* CJK Ideograph */ + [0x6a5d, 0x6a5d], /* CJK Ideograph */ + [0x6a5e, 0x6a5e], /* CJK Ideograph */ + [0x6a5f, 0x6a5f], /* CJK Ideograph */ + [0x6a60, 0x6a60], /* CJK Ideograph */ + [0x6a61, 0x6a61], /* CJK Ideograph */ + [0x6a62, 0x6a62], /* CJK Ideograph */ + [0x6a63, 0x6a63], /* CJK Ideograph */ + [0x6a64, 0x6a64], /* CJK Ideograph */ + [0x6a65, 0x6a65], /* CJK Ideograph */ + [0x6a66, 0x6a66], /* CJK Ideograph */ + [0x6a67, 0x6a67], /* CJK Ideograph */ + [0x6a68, 0x6a68], /* CJK Ideograph */ + [0x6a69, 0x6a69], /* CJK Ideograph */ + [0x6a6a, 0x6a6a], /* CJK Ideograph */ + [0x6a6b, 0x6a6b], /* CJK Ideograph */ + [0x6a6c, 0x6a6c], /* CJK Ideograph */ + [0x6a6d, 0x6a6d], /* CJK Ideograph */ + [0x6a6e, 0x6a6e], /* CJK Ideograph */ + [0x6a6f, 0x6a6f], /* CJK Ideograph */ + [0x6a70, 0x6a70], /* CJK Ideograph */ + [0x6a71, 0x6a71], /* CJK Ideograph */ + [0x6a72, 0x6a72], /* CJK Ideograph */ + [0x6a73, 0x6a73], /* CJK Ideograph */ + [0x6a74, 0x6a74], /* CJK Ideograph */ + [0x6a75, 0x6a75], /* CJK Ideograph */ + [0x6a76, 0x6a76], /* CJK Ideograph */ + [0x6a77, 0x6a77], /* CJK Ideograph */ + [0x6a78, 0x6a78], /* CJK Ideograph */ + [0x6a79, 0x6a79], /* CJK Ideograph */ + [0x6a7a, 0x6a7a], /* CJK Ideograph */ + [0x6a7b, 0x6a7b], /* CJK Ideograph */ + [0x6a7c, 0x6a7c], /* CJK Ideograph */ + [0x6a7d, 0x6a7d], /* CJK Ideograph */ + [0x6a7e, 0x6a7e], /* CJK Ideograph */ + [0x6a7f, 0x6a7f], /* CJK Ideograph */ + [0x6a80, 0x6a80], /* CJK Ideograph */ + [0x6a81, 0x6a81], /* CJK Ideograph */ + [0x6a82, 0x6a82], /* CJK Ideograph */ + [0x6a83, 0x6a83], /* CJK Ideograph */ + [0x6a84, 0x6a84], /* CJK Ideograph */ + [0x6a85, 0x6a85], /* CJK Ideograph */ + [0x6a86, 0x6a86], /* CJK Ideograph */ + [0x6a87, 0x6a87], /* CJK Ideograph */ + [0x6a88, 0x6a88], /* CJK Ideograph */ + [0x6a89, 0x6a89], /* CJK Ideograph */ + [0x6a8a, 0x6a8a], /* CJK Ideograph */ + [0x6a8b, 0x6a8b], /* CJK Ideograph */ + [0x6a8c, 0x6a8c], /* CJK Ideograph */ + [0x6a8d, 0x6a8d], /* CJK Ideograph */ + [0x6a8e, 0x6a8e], /* CJK Ideograph */ + [0x6a8f, 0x6a8f], /* CJK Ideograph */ + [0x6a90, 0x6a90], /* CJK Ideograph */ + [0x6a91, 0x6a91], /* CJK Ideograph */ + [0x6a92, 0x6a92], /* CJK Ideograph */ + [0x6a93, 0x6a93], /* CJK Ideograph */ + [0x6a94, 0x6a94], /* CJK Ideograph */ + [0x6a95, 0x6a95], /* CJK Ideograph */ + [0x6a96, 0x6a96], /* CJK Ideograph */ + [0x6a97, 0x6a97], /* CJK Ideograph */ + [0x6a98, 0x6a98], /* CJK Ideograph */ + [0x6a99, 0x6a99], /* CJK Ideograph */ + [0x6a9a, 0x6a9a], /* CJK Ideograph */ + [0x6a9b, 0x6a9b], /* CJK Ideograph */ + [0x6a9c, 0x6a9c], /* CJK Ideograph */ + [0x6a9d, 0x6a9d], /* CJK Ideograph */ + [0x6a9e, 0x6a9e], /* CJK Ideograph */ + [0x6a9f, 0x6a9f], /* CJK Ideograph */ + [0x6aa0, 0x6aa0], /* CJK Ideograph */ + [0x6aa1, 0x6aa1], /* CJK Ideograph */ + [0x6aa2, 0x6aa2], /* CJK Ideograph */ + [0x6aa3, 0x6aa3], /* CJK Ideograph */ + [0x6aa4, 0x6aa4], /* CJK Ideograph */ + [0x6aa5, 0x6aa5], /* CJK Ideograph */ + [0x6aa6, 0x6aa6], /* CJK Ideograph */ + [0x6aa7, 0x6aa7], /* CJK Ideograph */ + [0x6aa8, 0x6aa8], /* CJK Ideograph */ + [0x6aa9, 0x6aa9], /* CJK Ideograph */ + [0x6aaa, 0x6aaa], /* CJK Ideograph */ + [0x6aab, 0x6aab], /* CJK Ideograph */ + [0x6aac, 0x6aac], /* CJK Ideograph */ + [0x6aad, 0x6aad], /* CJK Ideograph */ + [0x6aae, 0x6aae], /* CJK Ideograph */ + [0x6aaf, 0x6aaf], /* CJK Ideograph */ + [0x6ab0, 0x6ab0], /* CJK Ideograph */ + [0x6ab1, 0x6ab1], /* CJK Ideograph */ + [0x6ab2, 0x6ab2], /* CJK Ideograph */ + [0x6ab3, 0x6ab3], /* CJK Ideograph */ + [0x6ab4, 0x6ab4], /* CJK Ideograph */ + [0x6ab5, 0x6ab5], /* CJK Ideograph */ + [0x6ab6, 0x6ab6], /* CJK Ideograph */ + [0x6ab7, 0x6ab7], /* CJK Ideograph */ + [0x6ab8, 0x6ab8], /* CJK Ideograph */ + [0x6ab9, 0x6ab9], /* CJK Ideograph */ + [0x6aba, 0x6aba], /* CJK Ideograph */ + [0x6abb, 0x6abb], /* CJK Ideograph */ + [0x6abc, 0x6abc], /* CJK Ideograph */ + [0x6abd, 0x6abd], /* CJK Ideograph */ + [0x6abe, 0x6abe], /* CJK Ideograph */ + [0x6abf, 0x6abf], /* CJK Ideograph */ + [0x6ac0, 0x6ac0], /* CJK Ideograph */ + [0x6ac1, 0x6ac1], /* CJK Ideograph */ + [0x6ac2, 0x6ac2], /* CJK Ideograph */ + [0x6ac3, 0x6ac3], /* CJK Ideograph */ + [0x6ac4, 0x6ac4], /* CJK Ideograph */ + [0x6ac5, 0x6ac5], /* CJK Ideograph */ + [0x6ac6, 0x6ac6], /* CJK Ideograph */ + [0x6ac7, 0x6ac7], /* CJK Ideograph */ + [0x6ac8, 0x6ac8], /* CJK Ideograph */ + [0x6ac9, 0x6ac9], /* CJK Ideograph */ + [0x6aca, 0x6aca], /* CJK Ideograph */ + [0x6acb, 0x6acb], /* CJK Ideograph */ + [0x6acc, 0x6acc], /* CJK Ideograph */ + [0x6acd, 0x6acd], /* CJK Ideograph */ + [0x6ace, 0x6ace], /* CJK Ideograph */ + [0x6acf, 0x6acf], /* CJK Ideograph */ + [0x6ad0, 0x6ad0], /* CJK Ideograph */ + [0x6ad1, 0x6ad1], /* CJK Ideograph */ + [0x6ad2, 0x6ad2], /* CJK Ideograph */ + [0x6ad3, 0x6ad3], /* CJK Ideograph */ + [0x6ad4, 0x6ad4], /* CJK Ideograph */ + [0x6ad5, 0x6ad5], /* CJK Ideograph */ + [0x6ad6, 0x6ad6], /* CJK Ideograph */ + [0x6ad7, 0x6ad7], /* CJK Ideograph */ + [0x6ad8, 0x6ad8], /* CJK Ideograph */ + [0x6ad9, 0x6ad9], /* CJK Ideograph */ + [0x6ada, 0x6ada], /* CJK Ideograph */ + [0x6adb, 0x6adb], /* CJK Ideograph */ + [0x6adc, 0x6adc], /* CJK Ideograph */ + [0x6add, 0x6add], /* CJK Ideograph */ + [0x6ade, 0x6ade], /* CJK Ideograph */ + [0x6adf, 0x6adf], /* CJK Ideograph */ + [0x6ae0, 0x6ae0], /* CJK Ideograph */ + [0x6ae1, 0x6ae1], /* CJK Ideograph */ + [0x6ae2, 0x6ae2], /* CJK Ideograph */ + [0x6ae3, 0x6ae3], /* CJK Ideograph */ + [0x6ae4, 0x6ae4], /* CJK Ideograph */ + [0x6ae5, 0x6ae5], /* CJK Ideograph */ + [0x6ae6, 0x6ae6], /* CJK Ideograph */ + [0x6ae7, 0x6ae7], /* CJK Ideograph */ + [0x6ae8, 0x6ae8], /* CJK Ideograph */ + [0x6ae9, 0x6ae9], /* CJK Ideograph */ + [0x6aea, 0x6aea], /* CJK Ideograph */ + [0x6aeb, 0x6aeb], /* CJK Ideograph */ + [0x6aec, 0x6aec], /* CJK Ideograph */ + [0x6aed, 0x6aed], /* CJK Ideograph */ + [0x6aee, 0x6aee], /* CJK Ideograph */ + [0x6aef, 0x6aef], /* CJK Ideograph */ + [0x6af0, 0x6af0], /* CJK Ideograph */ + [0x6af1, 0x6af1], /* CJK Ideograph */ + [0x6af2, 0x6af2], /* CJK Ideograph */ + [0x6af3, 0x6af3], /* CJK Ideograph */ + [0x6af4, 0x6af4], /* CJK Ideograph */ + [0x6af5, 0x6af5], /* CJK Ideograph */ + [0x6af6, 0x6af6], /* CJK Ideograph */ + [0x6af7, 0x6af7], /* CJK Ideograph */ + [0x6af8, 0x6af8], /* CJK Ideograph */ + [0x6af9, 0x6af9], /* CJK Ideograph */ + [0x6afa, 0x6afa], /* CJK Ideograph */ + [0x6afb, 0x6afb], /* CJK Ideograph */ + [0x6afc, 0x6afc], /* CJK Ideograph */ + [0x6afd, 0x6afd], /* CJK Ideograph */ + [0x6afe, 0x6afe], /* CJK Ideograph */ + [0x6aff, 0x6aff], /* CJK Ideograph */ + [0x6b00, 0x6b00], /* CJK Ideograph */ + [0x6b01, 0x6b01], /* CJK Ideograph */ + [0x6b02, 0x6b02], /* CJK Ideograph */ + [0x6b03, 0x6b03], /* CJK Ideograph */ + [0x6b04, 0x6b04], /* CJK Ideograph */ + [0x6b05, 0x6b05], /* CJK Ideograph */ + [0x6b06, 0x6b06], /* CJK Ideograph */ + [0x6b07, 0x6b07], /* CJK Ideograph */ + [0x6b08, 0x6b08], /* CJK Ideograph */ + [0x6b09, 0x6b09], /* CJK Ideograph */ + [0x6b0a, 0x6b0a], /* CJK Ideograph */ + [0x6b0b, 0x6b0b], /* CJK Ideograph */ + [0x6b0c, 0x6b0c], /* CJK Ideograph */ + [0x6b0d, 0x6b0d], /* CJK Ideograph */ + [0x6b0e, 0x6b0e], /* CJK Ideograph */ + [0x6b0f, 0x6b0f], /* CJK Ideograph */ + [0x6b10, 0x6b10], /* CJK Ideograph */ + [0x6b11, 0x6b11], /* CJK Ideograph */ + [0x6b12, 0x6b12], /* CJK Ideograph */ + [0x6b13, 0x6b13], /* CJK Ideograph */ + [0x6b14, 0x6b14], /* CJK Ideograph */ + [0x6b15, 0x6b15], /* CJK Ideograph */ + [0x6b16, 0x6b16], /* CJK Ideograph */ + [0x6b17, 0x6b17], /* CJK Ideograph */ + [0x6b18, 0x6b18], /* CJK Ideograph */ + [0x6b19, 0x6b19], /* CJK Ideograph */ + [0x6b1a, 0x6b1a], /* CJK Ideograph */ + [0x6b1b, 0x6b1b], /* CJK Ideograph */ + [0x6b1c, 0x6b1c], /* CJK Ideograph */ + [0x6b1d, 0x6b1d], /* CJK Ideograph */ + [0x6b1e, 0x6b1e], /* CJK Ideograph */ + [0x6b1f, 0x6b1f], /* CJK Ideograph */ + [0x6b20, 0x6b20], /* CJK Ideograph */ + [0x6b21, 0x6b21], /* CJK Ideograph */ + [0x6b22, 0x6b22], /* CJK Ideograph */ + [0x6b23, 0x6b23], /* CJK Ideograph */ + [0x6b24, 0x6b24], /* CJK Ideograph */ + [0x6b25, 0x6b25], /* CJK Ideograph */ + [0x6b26, 0x6b26], /* CJK Ideograph */ + [0x6b27, 0x6b27], /* CJK Ideograph */ + [0x6b28, 0x6b28], /* CJK Ideograph */ + [0x6b29, 0x6b29], /* CJK Ideograph */ + [0x6b2a, 0x6b2a], /* CJK Ideograph */ + [0x6b2b, 0x6b2b], /* CJK Ideograph */ + [0x6b2c, 0x6b2c], /* CJK Ideograph */ + [0x6b2d, 0x6b2d], /* CJK Ideograph */ + [0x6b2e, 0x6b2e], /* CJK Ideograph */ + [0x6b2f, 0x6b2f], /* CJK Ideograph */ + [0x6b30, 0x6b30], /* CJK Ideograph */ + [0x6b31, 0x6b31], /* CJK Ideograph */ + [0x6b32, 0x6b32], /* CJK Ideograph */ + [0x6b33, 0x6b33], /* CJK Ideograph */ + [0x6b34, 0x6b34], /* CJK Ideograph */ + [0x6b35, 0x6b35], /* CJK Ideograph */ + [0x6b36, 0x6b36], /* CJK Ideograph */ + [0x6b37, 0x6b37], /* CJK Ideograph */ + [0x6b38, 0x6b38], /* CJK Ideograph */ + [0x6b39, 0x6b39], /* CJK Ideograph */ + [0x6b3a, 0x6b3a], /* CJK Ideograph */ + [0x6b3b, 0x6b3b], /* CJK Ideograph */ + [0x6b3c, 0x6b3c], /* CJK Ideograph */ + [0x6b3d, 0x6b3d], /* CJK Ideograph */ + [0x6b3e, 0x6b3e], /* CJK Ideograph */ + [0x6b3f, 0x6b3f], /* CJK Ideograph */ + [0x6b40, 0x6b40], /* CJK Ideograph */ + [0x6b41, 0x6b41], /* CJK Ideograph */ + [0x6b42, 0x6b42], /* CJK Ideograph */ + [0x6b43, 0x6b43], /* CJK Ideograph */ + [0x6b44, 0x6b44], /* CJK Ideograph */ + [0x6b45, 0x6b45], /* CJK Ideograph */ + [0x6b46, 0x6b46], /* CJK Ideograph */ + [0x6b47, 0x6b47], /* CJK Ideograph */ + [0x6b48, 0x6b48], /* CJK Ideograph */ + [0x6b49, 0x6b49], /* CJK Ideograph */ + [0x6b4a, 0x6b4a], /* CJK Ideograph */ + [0x6b4b, 0x6b4b], /* CJK Ideograph */ + [0x6b4c, 0x6b4c], /* CJK Ideograph */ + [0x6b4d, 0x6b4d], /* CJK Ideograph */ + [0x6b4e, 0x6b4e], /* CJK Ideograph */ + [0x6b4f, 0x6b4f], /* CJK Ideograph */ + [0x6b50, 0x6b50], /* CJK Ideograph */ + [0x6b51, 0x6b51], /* CJK Ideograph */ + [0x6b52, 0x6b52], /* CJK Ideograph */ + [0x6b53, 0x6b53], /* CJK Ideograph */ + [0x6b54, 0x6b54], /* CJK Ideograph */ + [0x6b55, 0x6b55], /* CJK Ideograph */ + [0x6b56, 0x6b56], /* CJK Ideograph */ + [0x6b57, 0x6b57], /* CJK Ideograph */ + [0x6b58, 0x6b58], /* CJK Ideograph */ + [0x6b59, 0x6b59], /* CJK Ideograph */ + [0x6b5a, 0x6b5a], /* CJK Ideograph */ + [0x6b5b, 0x6b5b], /* CJK Ideograph */ + [0x6b5c, 0x6b5c], /* CJK Ideograph */ + [0x6b5d, 0x6b5d], /* CJK Ideograph */ + [0x6b5e, 0x6b5e], /* CJK Ideograph */ + [0x6b5f, 0x6b5f], /* CJK Ideograph */ + [0x6b60, 0x6b60], /* CJK Ideograph */ + [0x6b61, 0x6b61], /* CJK Ideograph */ + [0x6b62, 0x6b62], /* CJK Ideograph */ + [0x6b63, 0x6b63], /* CJK Ideograph */ + [0x6b64, 0x6b64], /* CJK Ideograph */ + [0x6b65, 0x6b65], /* CJK Ideograph */ + [0x6b66, 0x6b66], /* CJK Ideograph */ + [0x6b67, 0x6b67], /* CJK Ideograph */ + [0x6b68, 0x6b68], /* CJK Ideograph */ + [0x6b69, 0x6b69], /* CJK Ideograph */ + [0x6b6a, 0x6b6a], /* CJK Ideograph */ + [0x6b6b, 0x6b6b], /* CJK Ideograph */ + [0x6b6c, 0x6b6c], /* CJK Ideograph */ + [0x6b6d, 0x6b6d], /* CJK Ideograph */ + [0x6b6e, 0x6b6e], /* CJK Ideograph */ + [0x6b6f, 0x6b6f], /* CJK Ideograph */ + [0x6b70, 0x6b70], /* CJK Ideograph */ + [0x6b71, 0x6b71], /* CJK Ideograph */ + [0x6b72, 0x6b72], /* CJK Ideograph */ + [0x6b73, 0x6b73], /* CJK Ideograph */ + [0x6b74, 0x6b74], /* CJK Ideograph */ + [0x6b75, 0x6b75], /* CJK Ideograph */ + [0x6b76, 0x6b76], /* CJK Ideograph */ + [0x6b77, 0x6b77], /* CJK Ideograph */ + [0x6b78, 0x6b78], /* CJK Ideograph */ + [0x6b79, 0x6b79], /* CJK Ideograph */ + [0x6b7a, 0x6b7a], /* CJK Ideograph */ + [0x6b7b, 0x6b7b], /* CJK Ideograph */ + [0x6b7c, 0x6b7c], /* CJK Ideograph */ + [0x6b7d, 0x6b7d], /* CJK Ideograph */ + [0x6b7e, 0x6b7e], /* CJK Ideograph */ + [0x6b7f, 0x6b7f], /* CJK Ideograph */ + [0x6b80, 0x6b80], /* CJK Ideograph */ + [0x6b81, 0x6b81], /* CJK Ideograph */ + [0x6b82, 0x6b82], /* CJK Ideograph */ + [0x6b83, 0x6b83], /* CJK Ideograph */ + [0x6b84, 0x6b84], /* CJK Ideograph */ + [0x6b85, 0x6b85], /* CJK Ideograph */ + [0x6b86, 0x6b86], /* CJK Ideograph */ + [0x6b87, 0x6b87], /* CJK Ideograph */ + [0x6b88, 0x6b88], /* CJK Ideograph */ + [0x6b89, 0x6b89], /* CJK Ideograph */ + [0x6b8a, 0x6b8a], /* CJK Ideograph */ + [0x6b8b, 0x6b8b], /* CJK Ideograph */ + [0x6b8c, 0x6b8c], /* CJK Ideograph */ + [0x6b8d, 0x6b8d], /* CJK Ideograph */ + [0x6b8e, 0x6b8e], /* CJK Ideograph */ + [0x6b8f, 0x6b8f], /* CJK Ideograph */ + [0x6b90, 0x6b90], /* CJK Ideograph */ + [0x6b91, 0x6b91], /* CJK Ideograph */ + [0x6b92, 0x6b92], /* CJK Ideograph */ + [0x6b93, 0x6b93], /* CJK Ideograph */ + [0x6b94, 0x6b94], /* CJK Ideograph */ + [0x6b95, 0x6b95], /* CJK Ideograph */ + [0x6b96, 0x6b96], /* CJK Ideograph */ + [0x6b97, 0x6b97], /* CJK Ideograph */ + [0x6b98, 0x6b98], /* CJK Ideograph */ + [0x6b99, 0x6b99], /* CJK Ideograph */ + [0x6b9a, 0x6b9a], /* CJK Ideograph */ + [0x6b9b, 0x6b9b], /* CJK Ideograph */ + [0x6b9c, 0x6b9c], /* CJK Ideograph */ + [0x6b9d, 0x6b9d], /* CJK Ideograph */ + [0x6b9e, 0x6b9e], /* CJK Ideograph */ + [0x6b9f, 0x6b9f], /* CJK Ideograph */ + [0x6ba0, 0x6ba0], /* CJK Ideograph */ + [0x6ba1, 0x6ba1], /* CJK Ideograph */ + [0x6ba2, 0x6ba2], /* CJK Ideograph */ + [0x6ba3, 0x6ba3], /* CJK Ideograph */ + [0x6ba4, 0x6ba4], /* CJK Ideograph */ + [0x6ba5, 0x6ba5], /* CJK Ideograph */ + [0x6ba6, 0x6ba6], /* CJK Ideograph */ + [0x6ba7, 0x6ba7], /* CJK Ideograph */ + [0x6ba8, 0x6ba8], /* CJK Ideograph */ + [0x6ba9, 0x6ba9], /* CJK Ideograph */ + [0x6baa, 0x6baa], /* CJK Ideograph */ + [0x6bab, 0x6bab], /* CJK Ideograph */ + [0x6bac, 0x6bac], /* CJK Ideograph */ + [0x6bad, 0x6bad], /* CJK Ideograph */ + [0x6bae, 0x6bae], /* CJK Ideograph */ + [0x6baf, 0x6baf], /* CJK Ideograph */ + [0x6bb0, 0x6bb0], /* CJK Ideograph */ + [0x6bb1, 0x6bb1], /* CJK Ideograph */ + [0x6bb2, 0x6bb2], /* CJK Ideograph */ + [0x6bb3, 0x6bb3], /* CJK Ideograph */ + [0x6bb4, 0x6bb4], /* CJK Ideograph */ + [0x6bb5, 0x6bb5], /* CJK Ideograph */ + [0x6bb6, 0x6bb6], /* CJK Ideograph */ + [0x6bb7, 0x6bb7], /* CJK Ideograph */ + [0x6bb8, 0x6bb8], /* CJK Ideograph */ + [0x6bb9, 0x6bb9], /* CJK Ideograph */ + [0x6bba, 0x6bba], /* CJK Ideograph */ + [0x6bbb, 0x6bbb], /* CJK Ideograph */ + [0x6bbc, 0x6bbc], /* CJK Ideograph */ + [0x6bbd, 0x6bbd], /* CJK Ideograph */ + [0x6bbe, 0x6bbe], /* CJK Ideograph */ + [0x6bbf, 0x6bbf], /* CJK Ideograph */ + [0x6bc0, 0x6bc0], /* CJK Ideograph */ + [0x6bc1, 0x6bc1], /* CJK Ideograph */ + [0x6bc2, 0x6bc2], /* CJK Ideograph */ + [0x6bc3, 0x6bc3], /* CJK Ideograph */ + [0x6bc4, 0x6bc4], /* CJK Ideograph */ + [0x6bc5, 0x6bc5], /* CJK Ideograph */ + [0x6bc6, 0x6bc6], /* CJK Ideograph */ + [0x6bc7, 0x6bc7], /* CJK Ideograph */ + [0x6bc8, 0x6bc8], /* CJK Ideograph */ + [0x6bc9, 0x6bc9], /* CJK Ideograph */ + [0x6bca, 0x6bca], /* CJK Ideograph */ + [0x6bcb, 0x6bcb], /* CJK Ideograph */ + [0x6bcc, 0x6bcc], /* CJK Ideograph */ + [0x6bcd, 0x6bcd], /* CJK Ideograph */ + [0x6bce, 0x6bce], /* CJK Ideograph */ + [0x6bcf, 0x6bcf], /* CJK Ideograph */ + [0x6bd0, 0x6bd0], /* CJK Ideograph */ + [0x6bd1, 0x6bd1], /* CJK Ideograph */ + [0x6bd2, 0x6bd2], /* CJK Ideograph */ + [0x6bd3, 0x6bd3], /* CJK Ideograph */ + [0x6bd4, 0x6bd4], /* CJK Ideograph */ + [0x6bd5, 0x6bd5], /* CJK Ideograph */ + [0x6bd6, 0x6bd6], /* CJK Ideograph */ + [0x6bd7, 0x6bd7], /* CJK Ideograph */ + [0x6bd8, 0x6bd8], /* CJK Ideograph */ + [0x6bd9, 0x6bd9], /* CJK Ideograph */ + [0x6bda, 0x6bda], /* CJK Ideograph */ + [0x6bdb, 0x6bdb], /* CJK Ideograph */ + [0x6bdc, 0x6bdc], /* CJK Ideograph */ + [0x6bdd, 0x6bdd], /* CJK Ideograph */ + [0x6bde, 0x6bde], /* CJK Ideograph */ + [0x6bdf, 0x6bdf], /* CJK Ideograph */ + [0x6be0, 0x6be0], /* CJK Ideograph */ + [0x6be1, 0x6be1], /* CJK Ideograph */ + [0x6be2, 0x6be2], /* CJK Ideograph */ + [0x6be3, 0x6be3], /* CJK Ideograph */ + [0x6be4, 0x6be4], /* CJK Ideograph */ + [0x6be5, 0x6be5], /* CJK Ideograph */ + [0x6be6, 0x6be6], /* CJK Ideograph */ + [0x6be7, 0x6be7], /* CJK Ideograph */ + [0x6be8, 0x6be8], /* CJK Ideograph */ + [0x6be9, 0x6be9], /* CJK Ideograph */ + [0x6bea, 0x6bea], /* CJK Ideograph */ + [0x6beb, 0x6beb], /* CJK Ideograph */ + [0x6bec, 0x6bec], /* CJK Ideograph */ + [0x6bed, 0x6bed], /* CJK Ideograph */ + [0x6bee, 0x6bee], /* CJK Ideograph */ + [0x6bef, 0x6bef], /* CJK Ideograph */ + [0x6bf0, 0x6bf0], /* CJK Ideograph */ + [0x6bf1, 0x6bf1], /* CJK Ideograph */ + [0x6bf2, 0x6bf2], /* CJK Ideograph */ + [0x6bf3, 0x6bf3], /* CJK Ideograph */ + [0x6bf4, 0x6bf4], /* CJK Ideograph */ + [0x6bf5, 0x6bf5], /* CJK Ideograph */ + [0x6bf6, 0x6bf6], /* CJK Ideograph */ + [0x6bf7, 0x6bf7], /* CJK Ideograph */ + [0x6bf8, 0x6bf8], /* CJK Ideograph */ + [0x6bf9, 0x6bf9], /* CJK Ideograph */ + [0x6bfa, 0x6bfa], /* CJK Ideograph */ + [0x6bfb, 0x6bfb], /* CJK Ideograph */ + [0x6bfc, 0x6bfc], /* CJK Ideograph */ + [0x6bfd, 0x6bfd], /* CJK Ideograph */ + [0x6bfe, 0x6bfe], /* CJK Ideograph */ + [0x6bff, 0x6bff], /* CJK Ideograph */ + [0x6c00, 0x6c00], /* CJK Ideograph */ + [0x6c01, 0x6c01], /* CJK Ideograph */ + [0x6c02, 0x6c02], /* CJK Ideograph */ + [0x6c03, 0x6c03], /* CJK Ideograph */ + [0x6c04, 0x6c04], /* CJK Ideograph */ + [0x6c05, 0x6c05], /* CJK Ideograph */ + [0x6c06, 0x6c06], /* CJK Ideograph */ + [0x6c07, 0x6c07], /* CJK Ideograph */ + [0x6c08, 0x6c08], /* CJK Ideograph */ + [0x6c09, 0x6c09], /* CJK Ideograph */ + [0x6c0a, 0x6c0a], /* CJK Ideograph */ + [0x6c0b, 0x6c0b], /* CJK Ideograph */ + [0x6c0c, 0x6c0c], /* CJK Ideograph */ + [0x6c0d, 0x6c0d], /* CJK Ideograph */ + [0x6c0e, 0x6c0e], /* CJK Ideograph */ + [0x6c0f, 0x6c0f], /* CJK Ideograph */ + [0x6c10, 0x6c10], /* CJK Ideograph */ + [0x6c11, 0x6c11], /* CJK Ideograph */ + [0x6c12, 0x6c12], /* CJK Ideograph */ + [0x6c13, 0x6c13], /* CJK Ideograph */ + [0x6c14, 0x6c14], /* CJK Ideograph */ + [0x6c15, 0x6c15], /* CJK Ideograph */ + [0x6c16, 0x6c16], /* CJK Ideograph */ + [0x6c17, 0x6c17], /* CJK Ideograph */ + [0x6c18, 0x6c18], /* CJK Ideograph */ + [0x6c19, 0x6c19], /* CJK Ideograph */ + [0x6c1a, 0x6c1a], /* CJK Ideograph */ + [0x6c1b, 0x6c1b], /* CJK Ideograph */ + [0x6c1c, 0x6c1c], /* CJK Ideograph */ + [0x6c1d, 0x6c1d], /* CJK Ideograph */ + [0x6c1e, 0x6c1e], /* CJK Ideograph */ + [0x6c1f, 0x6c1f], /* CJK Ideograph */ + [0x6c20, 0x6c20], /* CJK Ideograph */ + [0x6c21, 0x6c21], /* CJK Ideograph */ + [0x6c22, 0x6c22], /* CJK Ideograph */ + [0x6c23, 0x6c23], /* CJK Ideograph */ + [0x6c24, 0x6c24], /* CJK Ideograph */ + [0x6c25, 0x6c25], /* CJK Ideograph */ + [0x6c26, 0x6c26], /* CJK Ideograph */ + [0x6c27, 0x6c27], /* CJK Ideograph */ + [0x6c28, 0x6c28], /* CJK Ideograph */ + [0x6c29, 0x6c29], /* CJK Ideograph */ + [0x6c2a, 0x6c2a], /* CJK Ideograph */ + [0x6c2b, 0x6c2b], /* CJK Ideograph */ + [0x6c2c, 0x6c2c], /* CJK Ideograph */ + [0x6c2d, 0x6c2d], /* CJK Ideograph */ + [0x6c2e, 0x6c2e], /* CJK Ideograph */ + [0x6c2f, 0x6c2f], /* CJK Ideograph */ + [0x6c30, 0x6c30], /* CJK Ideograph */ + [0x6c31, 0x6c31], /* CJK Ideograph */ + [0x6c32, 0x6c32], /* CJK Ideograph */ + [0x6c33, 0x6c33], /* CJK Ideograph */ + [0x6c34, 0x6c34], /* CJK Ideograph */ + [0x6c35, 0x6c35], /* CJK Ideograph */ + [0x6c36, 0x6c36], /* CJK Ideograph */ + [0x6c37, 0x6c37], /* CJK Ideograph */ + [0x6c38, 0x6c38], /* CJK Ideograph */ + [0x6c39, 0x6c39], /* CJK Ideograph */ + [0x6c3a, 0x6c3a], /* CJK Ideograph */ + [0x6c3b, 0x6c3b], /* CJK Ideograph */ + [0x6c3c, 0x6c3c], /* CJK Ideograph */ + [0x6c3d, 0x6c3d], /* CJK Ideograph */ + [0x6c3e, 0x6c3e], /* CJK Ideograph */ + [0x6c3f, 0x6c3f], /* CJK Ideograph */ + [0x6c40, 0x6c40], /* CJK Ideograph */ + [0x6c41, 0x6c41], /* CJK Ideograph */ + [0x6c42, 0x6c42], /* CJK Ideograph */ + [0x6c43, 0x6c43], /* CJK Ideograph */ + [0x6c44, 0x6c44], /* CJK Ideograph */ + [0x6c45, 0x6c45], /* CJK Ideograph */ + [0x6c46, 0x6c46], /* CJK Ideograph */ + [0x6c47, 0x6c47], /* CJK Ideograph */ + [0x6c48, 0x6c48], /* CJK Ideograph */ + [0x6c49, 0x6c49], /* CJK Ideograph */ + [0x6c4a, 0x6c4a], /* CJK Ideograph */ + [0x6c4b, 0x6c4b], /* CJK Ideograph */ + [0x6c4c, 0x6c4c], /* CJK Ideograph */ + [0x6c4d, 0x6c4d], /* CJK Ideograph */ + [0x6c4e, 0x6c4e], /* CJK Ideograph */ + [0x6c4f, 0x6c4f], /* CJK Ideograph */ + [0x6c50, 0x6c50], /* CJK Ideograph */ + [0x6c51, 0x6c51], /* CJK Ideograph */ + [0x6c52, 0x6c52], /* CJK Ideograph */ + [0x6c53, 0x6c53], /* CJK Ideograph */ + [0x6c54, 0x6c54], /* CJK Ideograph */ + [0x6c55, 0x6c55], /* CJK Ideograph */ + [0x6c56, 0x6c56], /* CJK Ideograph */ + [0x6c57, 0x6c57], /* CJK Ideograph */ + [0x6c58, 0x6c58], /* CJK Ideograph */ + [0x6c59, 0x6c59], /* CJK Ideograph */ + [0x6c5a, 0x6c5a], /* CJK Ideograph */ + [0x6c5b, 0x6c5b], /* CJK Ideograph */ + [0x6c5c, 0x6c5c], /* CJK Ideograph */ + [0x6c5d, 0x6c5d], /* CJK Ideograph */ + [0x6c5e, 0x6c5e], /* CJK Ideograph */ + [0x6c5f, 0x6c5f], /* CJK Ideograph */ + [0x6c60, 0x6c60], /* CJK Ideograph */ + [0x6c61, 0x6c61], /* CJK Ideograph */ + [0x6c62, 0x6c62], /* CJK Ideograph */ + [0x6c63, 0x6c63], /* CJK Ideograph */ + [0x6c64, 0x6c64], /* CJK Ideograph */ + [0x6c65, 0x6c65], /* CJK Ideograph */ + [0x6c66, 0x6c66], /* CJK Ideograph */ + [0x6c67, 0x6c67], /* CJK Ideograph */ + [0x6c68, 0x6c68], /* CJK Ideograph */ + [0x6c69, 0x6c69], /* CJK Ideograph */ + [0x6c6a, 0x6c6a], /* CJK Ideograph */ + [0x6c6b, 0x6c6b], /* CJK Ideograph */ + [0x6c6c, 0x6c6c], /* CJK Ideograph */ + [0x6c6d, 0x6c6d], /* CJK Ideograph */ + [0x6c6e, 0x6c6e], /* CJK Ideograph */ + [0x6c6f, 0x6c6f], /* CJK Ideograph */ + [0x6c70, 0x6c70], /* CJK Ideograph */ + [0x6c71, 0x6c71], /* CJK Ideograph */ + [0x6c72, 0x6c72], /* CJK Ideograph */ + [0x6c73, 0x6c73], /* CJK Ideograph */ + [0x6c74, 0x6c74], /* CJK Ideograph */ + [0x6c75, 0x6c75], /* CJK Ideograph */ + [0x6c76, 0x6c76], /* CJK Ideograph */ + [0x6c77, 0x6c77], /* CJK Ideograph */ + [0x6c78, 0x6c78], /* CJK Ideograph */ + [0x6c79, 0x6c79], /* CJK Ideograph */ + [0x6c7a, 0x6c7a], /* CJK Ideograph */ + [0x6c7b, 0x6c7b], /* CJK Ideograph */ + [0x6c7c, 0x6c7c], /* CJK Ideograph */ + [0x6c7d, 0x6c7d], /* CJK Ideograph */ + [0x6c7e, 0x6c7e], /* CJK Ideograph */ + [0x6c7f, 0x6c7f], /* CJK Ideograph */ + [0x6c80, 0x6c80], /* CJK Ideograph */ + [0x6c81, 0x6c81], /* CJK Ideograph */ + [0x6c82, 0x6c82], /* CJK Ideograph */ + [0x6c83, 0x6c83], /* CJK Ideograph */ + [0x6c84, 0x6c84], /* CJK Ideograph */ + [0x6c85, 0x6c85], /* CJK Ideograph */ + [0x6c86, 0x6c86], /* CJK Ideograph */ + [0x6c87, 0x6c87], /* CJK Ideograph */ + [0x6c88, 0x6c88], /* CJK Ideograph */ + [0x6c89, 0x6c89], /* CJK Ideograph */ + [0x6c8a, 0x6c8a], /* CJK Ideograph */ + [0x6c8b, 0x6c8b], /* CJK Ideograph */ + [0x6c8c, 0x6c8c], /* CJK Ideograph */ + [0x6c8d, 0x6c8d], /* CJK Ideograph */ + [0x6c8e, 0x6c8e], /* CJK Ideograph */ + [0x6c8f, 0x6c8f], /* CJK Ideograph */ + [0x6c90, 0x6c90], /* CJK Ideograph */ + [0x6c91, 0x6c91], /* CJK Ideograph */ + [0x6c92, 0x6c92], /* CJK Ideograph */ + [0x6c93, 0x6c93], /* CJK Ideograph */ + [0x6c94, 0x6c94], /* CJK Ideograph */ + [0x6c95, 0x6c95], /* CJK Ideograph */ + [0x6c96, 0x6c96], /* CJK Ideograph */ + [0x6c97, 0x6c97], /* CJK Ideograph */ + [0x6c98, 0x6c98], /* CJK Ideograph */ + [0x6c99, 0x6c99], /* CJK Ideograph */ + [0x6c9a, 0x6c9a], /* CJK Ideograph */ + [0x6c9b, 0x6c9b], /* CJK Ideograph */ + [0x6c9c, 0x6c9c], /* CJK Ideograph */ + [0x6c9d, 0x6c9d], /* CJK Ideograph */ + [0x6c9e, 0x6c9e], /* CJK Ideograph */ + [0x6c9f, 0x6c9f], /* CJK Ideograph */ + [0x6ca0, 0x6ca0], /* CJK Ideograph */ + [0x6ca1, 0x6ca1], /* CJK Ideograph */ + [0x6ca2, 0x6ca2], /* CJK Ideograph */ + [0x6ca3, 0x6ca3], /* CJK Ideograph */ + [0x6ca4, 0x6ca4], /* CJK Ideograph */ + [0x6ca5, 0x6ca5], /* CJK Ideograph */ + [0x6ca6, 0x6ca6], /* CJK Ideograph */ + [0x6ca7, 0x6ca7], /* CJK Ideograph */ + [0x6ca8, 0x6ca8], /* CJK Ideograph */ + [0x6ca9, 0x6ca9], /* CJK Ideograph */ + [0x6caa, 0x6caa], /* CJK Ideograph */ + [0x6cab, 0x6cab], /* CJK Ideograph */ + [0x6cac, 0x6cac], /* CJK Ideograph */ + [0x6cad, 0x6cad], /* CJK Ideograph */ + [0x6cae, 0x6cae], /* CJK Ideograph */ + [0x6caf, 0x6caf], /* CJK Ideograph */ + [0x6cb0, 0x6cb0], /* CJK Ideograph */ + [0x6cb1, 0x6cb1], /* CJK Ideograph */ + [0x6cb2, 0x6cb2], /* CJK Ideograph */ + [0x6cb3, 0x6cb3], /* CJK Ideograph */ + [0x6cb4, 0x6cb4], /* CJK Ideograph */ + [0x6cb5, 0x6cb5], /* CJK Ideograph */ + [0x6cb6, 0x6cb6], /* CJK Ideograph */ + [0x6cb7, 0x6cb7], /* CJK Ideograph */ + [0x6cb8, 0x6cb8], /* CJK Ideograph */ + [0x6cb9, 0x6cb9], /* CJK Ideograph */ + [0x6cba, 0x6cba], /* CJK Ideograph */ + [0x6cbb, 0x6cbb], /* CJK Ideograph */ + [0x6cbc, 0x6cbc], /* CJK Ideograph */ + [0x6cbd, 0x6cbd], /* CJK Ideograph */ + [0x6cbe, 0x6cbe], /* CJK Ideograph */ + [0x6cbf, 0x6cbf], /* CJK Ideograph */ + [0x6cc0, 0x6cc0], /* CJK Ideograph */ + [0x6cc1, 0x6cc1], /* CJK Ideograph */ + [0x6cc2, 0x6cc2], /* CJK Ideograph */ + [0x6cc3, 0x6cc3], /* CJK Ideograph */ + [0x6cc4, 0x6cc4], /* CJK Ideograph */ + [0x6cc5, 0x6cc5], /* CJK Ideograph */ + [0x6cc6, 0x6cc6], /* CJK Ideograph */ + [0x6cc7, 0x6cc7], /* CJK Ideograph */ + [0x6cc8, 0x6cc8], /* CJK Ideograph */ + [0x6cc9, 0x6cc9], /* CJK Ideograph */ + [0x6cca, 0x6cca], /* CJK Ideograph */ + [0x6ccb, 0x6ccb], /* CJK Ideograph */ + [0x6ccc, 0x6ccc], /* CJK Ideograph */ + [0x6ccd, 0x6ccd], /* CJK Ideograph */ + [0x6cce, 0x6cce], /* CJK Ideograph */ + [0x6ccf, 0x6ccf], /* CJK Ideograph */ + [0x6cd0, 0x6cd0], /* CJK Ideograph */ + [0x6cd1, 0x6cd1], /* CJK Ideograph */ + [0x6cd2, 0x6cd2], /* CJK Ideograph */ + [0x6cd3, 0x6cd3], /* CJK Ideograph */ + [0x6cd4, 0x6cd4], /* CJK Ideograph */ + [0x6cd5, 0x6cd5], /* CJK Ideograph */ + [0x6cd6, 0x6cd6], /* CJK Ideograph */ + [0x6cd7, 0x6cd7], /* CJK Ideograph */ + [0x6cd8, 0x6cd8], /* CJK Ideograph */ + [0x6cd9, 0x6cd9], /* CJK Ideograph */ + [0x6cda, 0x6cda], /* CJK Ideograph */ + [0x6cdb, 0x6cdb], /* CJK Ideograph */ + [0x6cdc, 0x6cdc], /* CJK Ideograph */ + [0x6cdd, 0x6cdd], /* CJK Ideograph */ + [0x6cde, 0x6cde], /* CJK Ideograph */ + [0x6cdf, 0x6cdf], /* CJK Ideograph */ + [0x6ce0, 0x6ce0], /* CJK Ideograph */ + [0x6ce1, 0x6ce1], /* CJK Ideograph */ + [0x6ce2, 0x6ce2], /* CJK Ideograph */ + [0x6ce3, 0x6ce3], /* CJK Ideograph */ + [0x6ce4, 0x6ce4], /* CJK Ideograph */ + [0x6ce5, 0x6ce5], /* CJK Ideograph */ + [0x6ce6, 0x6ce6], /* CJK Ideograph */ + [0x6ce7, 0x6ce7], /* CJK Ideograph */ + [0x6ce8, 0x6ce8], /* CJK Ideograph */ + [0x6ce9, 0x6ce9], /* CJK Ideograph */ + [0x6cea, 0x6cea], /* CJK Ideograph */ + [0x6ceb, 0x6ceb], /* CJK Ideograph */ + [0x6cec, 0x6cec], /* CJK Ideograph */ + [0x6ced, 0x6ced], /* CJK Ideograph */ + [0x6cee, 0x6cee], /* CJK Ideograph */ + [0x6cef, 0x6cef], /* CJK Ideograph */ + [0x6cf0, 0x6cf0], /* CJK Ideograph */ + [0x6cf1, 0x6cf1], /* CJK Ideograph */ + [0x6cf2, 0x6cf2], /* CJK Ideograph */ + [0x6cf3, 0x6cf3], /* CJK Ideograph */ + [0x6cf4, 0x6cf4], /* CJK Ideograph */ + [0x6cf5, 0x6cf5], /* CJK Ideograph */ + [0x6cf6, 0x6cf6], /* CJK Ideograph */ + [0x6cf7, 0x6cf7], /* CJK Ideograph */ + [0x6cf8, 0x6cf8], /* CJK Ideograph */ + [0x6cf9, 0x6cf9], /* CJK Ideograph */ + [0x6cfa, 0x6cfa], /* CJK Ideograph */ + [0x6cfb, 0x6cfb], /* CJK Ideograph */ + [0x6cfc, 0x6cfc], /* CJK Ideograph */ + [0x6cfd, 0x6cfd], /* CJK Ideograph */ + [0x6cfe, 0x6cfe], /* CJK Ideograph */ + [0x6cff, 0x6cff], /* CJK Ideograph */ + [0x6d00, 0x6d00], /* CJK Ideograph */ + [0x6d01, 0x6d01], /* CJK Ideograph */ + [0x6d02, 0x6d02], /* CJK Ideograph */ + [0x6d03, 0x6d03], /* CJK Ideograph */ + [0x6d04, 0x6d04], /* CJK Ideograph */ + [0x6d05, 0x6d05], /* CJK Ideograph */ + [0x6d06, 0x6d06], /* CJK Ideograph */ + [0x6d07, 0x6d07], /* CJK Ideograph */ + [0x6d08, 0x6d08], /* CJK Ideograph */ + [0x6d09, 0x6d09], /* CJK Ideograph */ + [0x6d0a, 0x6d0a], /* CJK Ideograph */ + [0x6d0b, 0x6d0b], /* CJK Ideograph */ + [0x6d0c, 0x6d0c], /* CJK Ideograph */ + [0x6d0d, 0x6d0d], /* CJK Ideograph */ + [0x6d0e, 0x6d0e], /* CJK Ideograph */ + [0x6d0f, 0x6d0f], /* CJK Ideograph */ + [0x6d10, 0x6d10], /* CJK Ideograph */ + [0x6d11, 0x6d11], /* CJK Ideograph */ + [0x6d12, 0x6d12], /* CJK Ideograph */ + [0x6d13, 0x6d13], /* CJK Ideograph */ + [0x6d14, 0x6d14], /* CJK Ideograph */ + [0x6d15, 0x6d15], /* CJK Ideograph */ + [0x6d16, 0x6d16], /* CJK Ideograph */ + [0x6d17, 0x6d17], /* CJK Ideograph */ + [0x6d18, 0x6d18], /* CJK Ideograph */ + [0x6d19, 0x6d19], /* CJK Ideograph */ + [0x6d1a, 0x6d1a], /* CJK Ideograph */ + [0x6d1b, 0x6d1b], /* CJK Ideograph */ + [0x6d1c, 0x6d1c], /* CJK Ideograph */ + [0x6d1d, 0x6d1d], /* CJK Ideograph */ + [0x6d1e, 0x6d1e], /* CJK Ideograph */ + [0x6d1f, 0x6d1f], /* CJK Ideograph */ + [0x6d20, 0x6d20], /* CJK Ideograph */ + [0x6d21, 0x6d21], /* CJK Ideograph */ + [0x6d22, 0x6d22], /* CJK Ideograph */ + [0x6d23, 0x6d23], /* CJK Ideograph */ + [0x6d24, 0x6d24], /* CJK Ideograph */ + [0x6d25, 0x6d25], /* CJK Ideograph */ + [0x6d26, 0x6d26], /* CJK Ideograph */ + [0x6d27, 0x6d27], /* CJK Ideograph */ + [0x6d28, 0x6d28], /* CJK Ideograph */ + [0x6d29, 0x6d29], /* CJK Ideograph */ + [0x6d2a, 0x6d2a], /* CJK Ideograph */ + [0x6d2b, 0x6d2b], /* CJK Ideograph */ + [0x6d2c, 0x6d2c], /* CJK Ideograph */ + [0x6d2d, 0x6d2d], /* CJK Ideograph */ + [0x6d2e, 0x6d2e], /* CJK Ideograph */ + [0x6d2f, 0x6d2f], /* CJK Ideograph */ + [0x6d30, 0x6d30], /* CJK Ideograph */ + [0x6d31, 0x6d31], /* CJK Ideograph */ + [0x6d32, 0x6d32], /* CJK Ideograph */ + [0x6d33, 0x6d33], /* CJK Ideograph */ + [0x6d34, 0x6d34], /* CJK Ideograph */ + [0x6d35, 0x6d35], /* CJK Ideograph */ + [0x6d36, 0x6d36], /* CJK Ideograph */ + [0x6d37, 0x6d37], /* CJK Ideograph */ + [0x6d38, 0x6d38], /* CJK Ideograph */ + [0x6d39, 0x6d39], /* CJK Ideograph */ + [0x6d3a, 0x6d3a], /* CJK Ideograph */ + [0x6d3b, 0x6d3b], /* CJK Ideograph */ + [0x6d3c, 0x6d3c], /* CJK Ideograph */ + [0x6d3d, 0x6d3d], /* CJK Ideograph */ + [0x6d3e, 0x6d3e], /* CJK Ideograph */ + [0x6d3f, 0x6d3f], /* CJK Ideograph */ + [0x6d40, 0x6d40], /* CJK Ideograph */ + [0x6d41, 0x6d41], /* CJK Ideograph */ + [0x6d42, 0x6d42], /* CJK Ideograph */ + [0x6d43, 0x6d43], /* CJK Ideograph */ + [0x6d44, 0x6d44], /* CJK Ideograph */ + [0x6d45, 0x6d45], /* CJK Ideograph */ + [0x6d46, 0x6d46], /* CJK Ideograph */ + [0x6d47, 0x6d47], /* CJK Ideograph */ + [0x6d48, 0x6d48], /* CJK Ideograph */ + [0x6d49, 0x6d49], /* CJK Ideograph */ + [0x6d4a, 0x6d4a], /* CJK Ideograph */ + [0x6d4b, 0x6d4b], /* CJK Ideograph */ + [0x6d4c, 0x6d4c], /* CJK Ideograph */ + [0x6d4d, 0x6d4d], /* CJK Ideograph */ + [0x6d4e, 0x6d4e], /* CJK Ideograph */ + [0x6d4f, 0x6d4f], /* CJK Ideograph */ + [0x6d50, 0x6d50], /* CJK Ideograph */ + [0x6d51, 0x6d51], /* CJK Ideograph */ + [0x6d52, 0x6d52], /* CJK Ideograph */ + [0x6d53, 0x6d53], /* CJK Ideograph */ + [0x6d54, 0x6d54], /* CJK Ideograph */ + [0x6d55, 0x6d55], /* CJK Ideograph */ + [0x6d56, 0x6d56], /* CJK Ideograph */ + [0x6d57, 0x6d57], /* CJK Ideograph */ + [0x6d58, 0x6d58], /* CJK Ideograph */ + [0x6d59, 0x6d59], /* CJK Ideograph */ + [0x6d5a, 0x6d5a], /* CJK Ideograph */ + [0x6d5b, 0x6d5b], /* CJK Ideograph */ + [0x6d5c, 0x6d5c], /* CJK Ideograph */ + [0x6d5d, 0x6d5d], /* CJK Ideograph */ + [0x6d5e, 0x6d5e], /* CJK Ideograph */ + [0x6d5f, 0x6d5f], /* CJK Ideograph */ + [0x6d60, 0x6d60], /* CJK Ideograph */ + [0x6d61, 0x6d61], /* CJK Ideograph */ + [0x6d62, 0x6d62], /* CJK Ideograph */ + [0x6d63, 0x6d63], /* CJK Ideograph */ + [0x6d64, 0x6d64], /* CJK Ideograph */ + [0x6d65, 0x6d65], /* CJK Ideograph */ + [0x6d66, 0x6d66], /* CJK Ideograph */ + [0x6d67, 0x6d67], /* CJK Ideograph */ + [0x6d68, 0x6d68], /* CJK Ideograph */ + [0x6d69, 0x6d69], /* CJK Ideograph */ + [0x6d6a, 0x6d6a], /* CJK Ideograph */ + [0x6d6b, 0x6d6b], /* CJK Ideograph */ + [0x6d6c, 0x6d6c], /* CJK Ideograph */ + [0x6d6d, 0x6d6d], /* CJK Ideograph */ + [0x6d6e, 0x6d6e], /* CJK Ideograph */ + [0x6d6f, 0x6d6f], /* CJK Ideograph */ + [0x6d70, 0x6d70], /* CJK Ideograph */ + [0x6d71, 0x6d71], /* CJK Ideograph */ + [0x6d72, 0x6d72], /* CJK Ideograph */ + [0x6d73, 0x6d73], /* CJK Ideograph */ + [0x6d74, 0x6d74], /* CJK Ideograph */ + [0x6d75, 0x6d75], /* CJK Ideograph */ + [0x6d76, 0x6d76], /* CJK Ideograph */ + [0x6d77, 0x6d77], /* CJK Ideograph */ + [0x6d78, 0x6d78], /* CJK Ideograph */ + [0x6d79, 0x6d79], /* CJK Ideograph */ + [0x6d7a, 0x6d7a], /* CJK Ideograph */ + [0x6d7b, 0x6d7b], /* CJK Ideograph */ + [0x6d7c, 0x6d7c], /* CJK Ideograph */ + [0x6d7d, 0x6d7d], /* CJK Ideograph */ + [0x6d7e, 0x6d7e], /* CJK Ideograph */ + [0x6d7f, 0x6d7f], /* CJK Ideograph */ + [0x6d80, 0x6d80], /* CJK Ideograph */ + [0x6d81, 0x6d81], /* CJK Ideograph */ + [0x6d82, 0x6d82], /* CJK Ideograph */ + [0x6d83, 0x6d83], /* CJK Ideograph */ + [0x6d84, 0x6d84], /* CJK Ideograph */ + [0x6d85, 0x6d85], /* CJK Ideograph */ + [0x6d86, 0x6d86], /* CJK Ideograph */ + [0x6d87, 0x6d87], /* CJK Ideograph */ + [0x6d88, 0x6d88], /* CJK Ideograph */ + [0x6d89, 0x6d89], /* CJK Ideograph */ + [0x6d8a, 0x6d8a], /* CJK Ideograph */ + [0x6d8b, 0x6d8b], /* CJK Ideograph */ + [0x6d8c, 0x6d8c], /* CJK Ideograph */ + [0x6d8d, 0x6d8d], /* CJK Ideograph */ + [0x6d8e, 0x6d8e], /* CJK Ideograph */ + [0x6d8f, 0x6d8f], /* CJK Ideograph */ + [0x6d90, 0x6d90], /* CJK Ideograph */ + [0x6d91, 0x6d91], /* CJK Ideograph */ + [0x6d92, 0x6d92], /* CJK Ideograph */ + [0x6d93, 0x6d93], /* CJK Ideograph */ + [0x6d94, 0x6d94], /* CJK Ideograph */ + [0x6d95, 0x6d95], /* CJK Ideograph */ + [0x6d96, 0x6d96], /* CJK Ideograph */ + [0x6d97, 0x6d97], /* CJK Ideograph */ + [0x6d98, 0x6d98], /* CJK Ideograph */ + [0x6d99, 0x6d99], /* CJK Ideograph */ + [0x6d9a, 0x6d9a], /* CJK Ideograph */ + [0x6d9b, 0x6d9b], /* CJK Ideograph */ + [0x6d9c, 0x6d9c], /* CJK Ideograph */ + [0x6d9d, 0x6d9d], /* CJK Ideograph */ + [0x6d9e, 0x6d9e], /* CJK Ideograph */ + [0x6d9f, 0x6d9f], /* CJK Ideograph */ + [0x6da0, 0x6da0], /* CJK Ideograph */ + [0x6da1, 0x6da1], /* CJK Ideograph */ + [0x6da2, 0x6da2], /* CJK Ideograph */ + [0x6da3, 0x6da3], /* CJK Ideograph */ + [0x6da4, 0x6da4], /* CJK Ideograph */ + [0x6da5, 0x6da5], /* CJK Ideograph */ + [0x6da6, 0x6da6], /* CJK Ideograph */ + [0x6da7, 0x6da7], /* CJK Ideograph */ + [0x6da8, 0x6da8], /* CJK Ideograph */ + [0x6da9, 0x6da9], /* CJK Ideograph */ + [0x6daa, 0x6daa], /* CJK Ideograph */ + [0x6dab, 0x6dab], /* CJK Ideograph */ + [0x6dac, 0x6dac], /* CJK Ideograph */ + [0x6dad, 0x6dad], /* CJK Ideograph */ + [0x6dae, 0x6dae], /* CJK Ideograph */ + [0x6daf, 0x6daf], /* CJK Ideograph */ + [0x6db0, 0x6db0], /* CJK Ideograph */ + [0x6db1, 0x6db1], /* CJK Ideograph */ + [0x6db2, 0x6db2], /* CJK Ideograph */ + [0x6db3, 0x6db3], /* CJK Ideograph */ + [0x6db4, 0x6db4], /* CJK Ideograph */ + [0x6db5, 0x6db5], /* CJK Ideograph */ + [0x6db6, 0x6db6], /* CJK Ideograph */ + [0x6db7, 0x6db7], /* CJK Ideograph */ + [0x6db8, 0x6db8], /* CJK Ideograph */ + [0x6db9, 0x6db9], /* CJK Ideograph */ + [0x6dba, 0x6dba], /* CJK Ideograph */ + [0x6dbb, 0x6dbb], /* CJK Ideograph */ + [0x6dbc, 0x6dbc], /* CJK Ideograph */ + [0x6dbd, 0x6dbd], /* CJK Ideograph */ + [0x6dbe, 0x6dbe], /* CJK Ideograph */ + [0x6dbf, 0x6dbf], /* CJK Ideograph */ + [0x6dc0, 0x6dc0], /* CJK Ideograph */ + [0x6dc1, 0x6dc1], /* CJK Ideograph */ + [0x6dc2, 0x6dc2], /* CJK Ideograph */ + [0x6dc3, 0x6dc3], /* CJK Ideograph */ + [0x6dc4, 0x6dc4], /* CJK Ideograph */ + [0x6dc5, 0x6dc5], /* CJK Ideograph */ + [0x6dc6, 0x6dc6], /* CJK Ideograph */ + [0x6dc7, 0x6dc7], /* CJK Ideograph */ + [0x6dc8, 0x6dc8], /* CJK Ideograph */ + [0x6dc9, 0x6dc9], /* CJK Ideograph */ + [0x6dca, 0x6dca], /* CJK Ideograph */ + [0x6dcb, 0x6dcb], /* CJK Ideograph */ + [0x6dcc, 0x6dcc], /* CJK Ideograph */ + [0x6dcd, 0x6dcd], /* CJK Ideograph */ + [0x6dce, 0x6dce], /* CJK Ideograph */ + [0x6dcf, 0x6dcf], /* CJK Ideograph */ + [0x6dd0, 0x6dd0], /* CJK Ideograph */ + [0x6dd1, 0x6dd1], /* CJK Ideograph */ + [0x6dd2, 0x6dd2], /* CJK Ideograph */ + [0x6dd3, 0x6dd3], /* CJK Ideograph */ + [0x6dd4, 0x6dd4], /* CJK Ideograph */ + [0x6dd5, 0x6dd5], /* CJK Ideograph */ + [0x6dd6, 0x6dd6], /* CJK Ideograph */ + [0x6dd7, 0x6dd7], /* CJK Ideograph */ + [0x6dd8, 0x6dd8], /* CJK Ideograph */ + [0x6dd9, 0x6dd9], /* CJK Ideograph */ + [0x6dda, 0x6dda], /* CJK Ideograph */ + [0x6ddb, 0x6ddb], /* CJK Ideograph */ + [0x6ddc, 0x6ddc], /* CJK Ideograph */ + [0x6ddd, 0x6ddd], /* CJK Ideograph */ + [0x6dde, 0x6dde], /* CJK Ideograph */ + [0x6ddf, 0x6ddf], /* CJK Ideograph */ + [0x6de0, 0x6de0], /* CJK Ideograph */ + [0x6de1, 0x6de1], /* CJK Ideograph */ + [0x6de2, 0x6de2], /* CJK Ideograph */ + [0x6de3, 0x6de3], /* CJK Ideograph */ + [0x6de4, 0x6de4], /* CJK Ideograph */ + [0x6de5, 0x6de5], /* CJK Ideograph */ + [0x6de6, 0x6de6], /* CJK Ideograph */ + [0x6de7, 0x6de7], /* CJK Ideograph */ + [0x6de8, 0x6de8], /* CJK Ideograph */ + [0x6de9, 0x6de9], /* CJK Ideograph */ + [0x6dea, 0x6dea], /* CJK Ideograph */ + [0x6deb, 0x6deb], /* CJK Ideograph */ + [0x6dec, 0x6dec], /* CJK Ideograph */ + [0x6ded, 0x6ded], /* CJK Ideograph */ + [0x6dee, 0x6dee], /* CJK Ideograph */ + [0x6def, 0x6def], /* CJK Ideograph */ + [0x6df0, 0x6df0], /* CJK Ideograph */ + [0x6df1, 0x6df1], /* CJK Ideograph */ + [0x6df2, 0x6df2], /* CJK Ideograph */ + [0x6df3, 0x6df3], /* CJK Ideograph */ + [0x6df4, 0x6df4], /* CJK Ideograph */ + [0x6df5, 0x6df5], /* CJK Ideograph */ + [0x6df6, 0x6df6], /* CJK Ideograph */ + [0x6df7, 0x6df7], /* CJK Ideograph */ + [0x6df8, 0x6df8], /* CJK Ideograph */ + [0x6df9, 0x6df9], /* CJK Ideograph */ + [0x6dfa, 0x6dfa], /* CJK Ideograph */ + [0x6dfb, 0x6dfb], /* CJK Ideograph */ + [0x6dfc, 0x6dfc], /* CJK Ideograph */ + [0x6dfd, 0x6dfd], /* CJK Ideograph */ + [0x6dfe, 0x6dfe], /* CJK Ideograph */ + [0x6dff, 0x6dff], /* CJK Ideograph */ + [0x6e00, 0x6e00], /* CJK Ideograph */ + [0x6e01, 0x6e01], /* CJK Ideograph */ + [0x6e02, 0x6e02], /* CJK Ideograph */ + [0x6e03, 0x6e03], /* CJK Ideograph */ + [0x6e04, 0x6e04], /* CJK Ideograph */ + [0x6e05, 0x6e05], /* CJK Ideograph */ + [0x6e06, 0x6e06], /* CJK Ideograph */ + [0x6e07, 0x6e07], /* CJK Ideograph */ + [0x6e08, 0x6e08], /* CJK Ideograph */ + [0x6e09, 0x6e09], /* CJK Ideograph */ + [0x6e0a, 0x6e0a], /* CJK Ideograph */ + [0x6e0b, 0x6e0b], /* CJK Ideograph */ + [0x6e0c, 0x6e0c], /* CJK Ideograph */ + [0x6e0d, 0x6e0d], /* CJK Ideograph */ + [0x6e0e, 0x6e0e], /* CJK Ideograph */ + [0x6e0f, 0x6e0f], /* CJK Ideograph */ + [0x6e10, 0x6e10], /* CJK Ideograph */ + [0x6e11, 0x6e11], /* CJK Ideograph */ + [0x6e12, 0x6e12], /* CJK Ideograph */ + [0x6e13, 0x6e13], /* CJK Ideograph */ + [0x6e14, 0x6e14], /* CJK Ideograph */ + [0x6e15, 0x6e15], /* CJK Ideograph */ + [0x6e16, 0x6e16], /* CJK Ideograph */ + [0x6e17, 0x6e17], /* CJK Ideograph */ + [0x6e18, 0x6e18], /* CJK Ideograph */ + [0x6e19, 0x6e19], /* CJK Ideograph */ + [0x6e1a, 0x6e1a], /* CJK Ideograph */ + [0x6e1b, 0x6e1b], /* CJK Ideograph */ + [0x6e1c, 0x6e1c], /* CJK Ideograph */ + [0x6e1d, 0x6e1d], /* CJK Ideograph */ + [0x6e1e, 0x6e1e], /* CJK Ideograph */ + [0x6e1f, 0x6e1f], /* CJK Ideograph */ + [0x6e20, 0x6e20], /* CJK Ideograph */ + [0x6e21, 0x6e21], /* CJK Ideograph */ + [0x6e22, 0x6e22], /* CJK Ideograph */ + [0x6e23, 0x6e23], /* CJK Ideograph */ + [0x6e24, 0x6e24], /* CJK Ideograph */ + [0x6e25, 0x6e25], /* CJK Ideograph */ + [0x6e26, 0x6e26], /* CJK Ideograph */ + [0x6e27, 0x6e27], /* CJK Ideograph */ + [0x6e28, 0x6e28], /* CJK Ideograph */ + [0x6e29, 0x6e29], /* CJK Ideograph */ + [0x6e2a, 0x6e2a], /* CJK Ideograph */ + [0x6e2b, 0x6e2b], /* CJK Ideograph */ + [0x6e2c, 0x6e2c], /* CJK Ideograph */ + [0x6e2d, 0x6e2d], /* CJK Ideograph */ + [0x6e2e, 0x6e2e], /* CJK Ideograph */ + [0x6e2f, 0x6e2f], /* CJK Ideograph */ + [0x6e30, 0x6e30], /* CJK Ideograph */ + [0x6e31, 0x6e31], /* CJK Ideograph */ + [0x6e32, 0x6e32], /* CJK Ideograph */ + [0x6e33, 0x6e33], /* CJK Ideograph */ + [0x6e34, 0x6e34], /* CJK Ideograph */ + [0x6e35, 0x6e35], /* CJK Ideograph */ + [0x6e36, 0x6e36], /* CJK Ideograph */ + [0x6e37, 0x6e37], /* CJK Ideograph */ + [0x6e38, 0x6e38], /* CJK Ideograph */ + [0x6e39, 0x6e39], /* CJK Ideograph */ + [0x6e3a, 0x6e3a], /* CJK Ideograph */ + [0x6e3b, 0x6e3b], /* CJK Ideograph */ + [0x6e3c, 0x6e3c], /* CJK Ideograph */ + [0x6e3d, 0x6e3d], /* CJK Ideograph */ + [0x6e3e, 0x6e3e], /* CJK Ideograph */ + [0x6e3f, 0x6e3f], /* CJK Ideograph */ + [0x6e40, 0x6e40], /* CJK Ideograph */ + [0x6e41, 0x6e41], /* CJK Ideograph */ + [0x6e42, 0x6e42], /* CJK Ideograph */ + [0x6e43, 0x6e43], /* CJK Ideograph */ + [0x6e44, 0x6e44], /* CJK Ideograph */ + [0x6e45, 0x6e45], /* CJK Ideograph */ + [0x6e46, 0x6e46], /* CJK Ideograph */ + [0x6e47, 0x6e47], /* CJK Ideograph */ + [0x6e48, 0x6e48], /* CJK Ideograph */ + [0x6e49, 0x6e49], /* CJK Ideograph */ + [0x6e4a, 0x6e4a], /* CJK Ideograph */ + [0x6e4b, 0x6e4b], /* CJK Ideograph */ + [0x6e4c, 0x6e4c], /* CJK Ideograph */ + [0x6e4d, 0x6e4d], /* CJK Ideograph */ + [0x6e4e, 0x6e4e], /* CJK Ideograph */ + [0x6e4f, 0x6e4f], /* CJK Ideograph */ + [0x6e50, 0x6e50], /* CJK Ideograph */ + [0x6e51, 0x6e51], /* CJK Ideograph */ + [0x6e52, 0x6e52], /* CJK Ideograph */ + [0x6e53, 0x6e53], /* CJK Ideograph */ + [0x6e54, 0x6e54], /* CJK Ideograph */ + [0x6e55, 0x6e55], /* CJK Ideograph */ + [0x6e56, 0x6e56], /* CJK Ideograph */ + [0x6e57, 0x6e57], /* CJK Ideograph */ + [0x6e58, 0x6e58], /* CJK Ideograph */ + [0x6e59, 0x6e59], /* CJK Ideograph */ + [0x6e5a, 0x6e5a], /* CJK Ideograph */ + [0x6e5b, 0x6e5b], /* CJK Ideograph */ + [0x6e5c, 0x6e5c], /* CJK Ideograph */ + [0x6e5d, 0x6e5d], /* CJK Ideograph */ + [0x6e5e, 0x6e5e], /* CJK Ideograph */ + [0x6e5f, 0x6e5f], /* CJK Ideograph */ + [0x6e60, 0x6e60], /* CJK Ideograph */ + [0x6e61, 0x6e61], /* CJK Ideograph */ + [0x6e62, 0x6e62], /* CJK Ideograph */ + [0x6e63, 0x6e63], /* CJK Ideograph */ + [0x6e64, 0x6e64], /* CJK Ideograph */ + [0x6e65, 0x6e65], /* CJK Ideograph */ + [0x6e66, 0x6e66], /* CJK Ideograph */ + [0x6e67, 0x6e67], /* CJK Ideograph */ + [0x6e68, 0x6e68], /* CJK Ideograph */ + [0x6e69, 0x6e69], /* CJK Ideograph */ + [0x6e6a, 0x6e6a], /* CJK Ideograph */ + [0x6e6b, 0x6e6b], /* CJK Ideograph */ + [0x6e6c, 0x6e6c], /* CJK Ideograph */ + [0x6e6d, 0x6e6d], /* CJK Ideograph */ + [0x6e6e, 0x6e6e], /* CJK Ideograph */ + [0x6e6f, 0x6e6f], /* CJK Ideograph */ + [0x6e70, 0x6e70], /* CJK Ideograph */ + [0x6e71, 0x6e71], /* CJK Ideograph */ + [0x6e72, 0x6e72], /* CJK Ideograph */ + [0x6e73, 0x6e73], /* CJK Ideograph */ + [0x6e74, 0x6e74], /* CJK Ideograph */ + [0x6e75, 0x6e75], /* CJK Ideograph */ + [0x6e76, 0x6e76], /* CJK Ideograph */ + [0x6e77, 0x6e77], /* CJK Ideograph */ + [0x6e78, 0x6e78], /* CJK Ideograph */ + [0x6e79, 0x6e79], /* CJK Ideograph */ + [0x6e7a, 0x6e7a], /* CJK Ideograph */ + [0x6e7b, 0x6e7b], /* CJK Ideograph */ + [0x6e7c, 0x6e7c], /* CJK Ideograph */ + [0x6e7d, 0x6e7d], /* CJK Ideograph */ + [0x6e7e, 0x6e7e], /* CJK Ideograph */ + [0x6e7f, 0x6e7f], /* CJK Ideograph */ + [0x6e80, 0x6e80], /* CJK Ideograph */ + [0x6e81, 0x6e81], /* CJK Ideograph */ + [0x6e82, 0x6e82], /* CJK Ideograph */ + [0x6e83, 0x6e83], /* CJK Ideograph */ + [0x6e84, 0x6e84], /* CJK Ideograph */ + [0x6e85, 0x6e85], /* CJK Ideograph */ + [0x6e86, 0x6e86], /* CJK Ideograph */ + [0x6e87, 0x6e87], /* CJK Ideograph */ + [0x6e88, 0x6e88], /* CJK Ideograph */ + [0x6e89, 0x6e89], /* CJK Ideograph */ + [0x6e8a, 0x6e8a], /* CJK Ideograph */ + [0x6e8b, 0x6e8b], /* CJK Ideograph */ + [0x6e8c, 0x6e8c], /* CJK Ideograph */ + [0x6e8d, 0x6e8d], /* CJK Ideograph */ + [0x6e8e, 0x6e8e], /* CJK Ideograph */ + [0x6e8f, 0x6e8f], /* CJK Ideograph */ + [0x6e90, 0x6e90], /* CJK Ideograph */ + [0x6e91, 0x6e91], /* CJK Ideograph */ + [0x6e92, 0x6e92], /* CJK Ideograph */ + [0x6e93, 0x6e93], /* CJK Ideograph */ + [0x6e94, 0x6e94], /* CJK Ideograph */ + [0x6e95, 0x6e95], /* CJK Ideograph */ + [0x6e96, 0x6e96], /* CJK Ideograph */ + [0x6e97, 0x6e97], /* CJK Ideograph */ + [0x6e98, 0x6e98], /* CJK Ideograph */ + [0x6e99, 0x6e99], /* CJK Ideograph */ + [0x6e9a, 0x6e9a], /* CJK Ideograph */ + [0x6e9b, 0x6e9b], /* CJK Ideograph */ + [0x6e9c, 0x6e9c], /* CJK Ideograph */ + [0x6e9d, 0x6e9d], /* CJK Ideograph */ + [0x6e9e, 0x6e9e], /* CJK Ideograph */ + [0x6e9f, 0x6e9f], /* CJK Ideograph */ + [0x6ea0, 0x6ea0], /* CJK Ideograph */ + [0x6ea1, 0x6ea1], /* CJK Ideograph */ + [0x6ea2, 0x6ea2], /* CJK Ideograph */ + [0x6ea3, 0x6ea3], /* CJK Ideograph */ + [0x6ea4, 0x6ea4], /* CJK Ideograph */ + [0x6ea5, 0x6ea5], /* CJK Ideograph */ + [0x6ea6, 0x6ea6], /* CJK Ideograph */ + [0x6ea7, 0x6ea7], /* CJK Ideograph */ + [0x6ea8, 0x6ea8], /* CJK Ideograph */ + [0x6ea9, 0x6ea9], /* CJK Ideograph */ + [0x6eaa, 0x6eaa], /* CJK Ideograph */ + [0x6eab, 0x6eab], /* CJK Ideograph */ + [0x6eac, 0x6eac], /* CJK Ideograph */ + [0x6ead, 0x6ead], /* CJK Ideograph */ + [0x6eae, 0x6eae], /* CJK Ideograph */ + [0x6eaf, 0x6eaf], /* CJK Ideograph */ + [0x6eb0, 0x6eb0], /* CJK Ideograph */ + [0x6eb1, 0x6eb1], /* CJK Ideograph */ + [0x6eb2, 0x6eb2], /* CJK Ideograph */ + [0x6eb3, 0x6eb3], /* CJK Ideograph */ + [0x6eb4, 0x6eb4], /* CJK Ideograph */ + [0x6eb5, 0x6eb5], /* CJK Ideograph */ + [0x6eb6, 0x6eb6], /* CJK Ideograph */ + [0x6eb7, 0x6eb7], /* CJK Ideograph */ + [0x6eb8, 0x6eb8], /* CJK Ideograph */ + [0x6eb9, 0x6eb9], /* CJK Ideograph */ + [0x6eba, 0x6eba], /* CJK Ideograph */ + [0x6ebb, 0x6ebb], /* CJK Ideograph */ + [0x6ebc, 0x6ebc], /* CJK Ideograph */ + [0x6ebd, 0x6ebd], /* CJK Ideograph */ + [0x6ebe, 0x6ebe], /* CJK Ideograph */ + [0x6ebf, 0x6ebf], /* CJK Ideograph */ + [0x6ec0, 0x6ec0], /* CJK Ideograph */ + [0x6ec1, 0x6ec1], /* CJK Ideograph */ + [0x6ec2, 0x6ec2], /* CJK Ideograph */ + [0x6ec3, 0x6ec3], /* CJK Ideograph */ + [0x6ec4, 0x6ec4], /* CJK Ideograph */ + [0x6ec5, 0x6ec5], /* CJK Ideograph */ + [0x6ec6, 0x6ec6], /* CJK Ideograph */ + [0x6ec7, 0x6ec7], /* CJK Ideograph */ + [0x6ec8, 0x6ec8], /* CJK Ideograph */ + [0x6ec9, 0x6ec9], /* CJK Ideograph */ + [0x6eca, 0x6eca], /* CJK Ideograph */ + [0x6ecb, 0x6ecb], /* CJK Ideograph */ + [0x6ecc, 0x6ecc], /* CJK Ideograph */ + [0x6ecd, 0x6ecd], /* CJK Ideograph */ + [0x6ece, 0x6ece], /* CJK Ideograph */ + [0x6ecf, 0x6ecf], /* CJK Ideograph */ + [0x6ed0, 0x6ed0], /* CJK Ideograph */ + [0x6ed1, 0x6ed1], /* CJK Ideograph */ + [0x6ed2, 0x6ed2], /* CJK Ideograph */ + [0x6ed3, 0x6ed3], /* CJK Ideograph */ + [0x6ed4, 0x6ed4], /* CJK Ideograph */ + [0x6ed5, 0x6ed5], /* CJK Ideograph */ + [0x6ed6, 0x6ed6], /* CJK Ideograph */ + [0x6ed7, 0x6ed7], /* CJK Ideograph */ + [0x6ed8, 0x6ed8], /* CJK Ideograph */ + [0x6ed9, 0x6ed9], /* CJK Ideograph */ + [0x6eda, 0x6eda], /* CJK Ideograph */ + [0x6edb, 0x6edb], /* CJK Ideograph */ + [0x6edc, 0x6edc], /* CJK Ideograph */ + [0x6edd, 0x6edd], /* CJK Ideograph */ + [0x6ede, 0x6ede], /* CJK Ideograph */ + [0x6edf, 0x6edf], /* CJK Ideograph */ + [0x6ee0, 0x6ee0], /* CJK Ideograph */ + [0x6ee1, 0x6ee1], /* CJK Ideograph */ + [0x6ee2, 0x6ee2], /* CJK Ideograph */ + [0x6ee3, 0x6ee3], /* CJK Ideograph */ + [0x6ee4, 0x6ee4], /* CJK Ideograph */ + [0x6ee5, 0x6ee5], /* CJK Ideograph */ + [0x6ee6, 0x6ee6], /* CJK Ideograph */ + [0x6ee7, 0x6ee7], /* CJK Ideograph */ + [0x6ee8, 0x6ee8], /* CJK Ideograph */ + [0x6ee9, 0x6ee9], /* CJK Ideograph */ + [0x6eea, 0x6eea], /* CJK Ideograph */ + [0x6eeb, 0x6eeb], /* CJK Ideograph */ + [0x6eec, 0x6eec], /* CJK Ideograph */ + [0x6eed, 0x6eed], /* CJK Ideograph */ + [0x6eee, 0x6eee], /* CJK Ideograph */ + [0x6eef, 0x6eef], /* CJK Ideograph */ + [0x6ef0, 0x6ef0], /* CJK Ideograph */ + [0x6ef1, 0x6ef1], /* CJK Ideograph */ + [0x6ef2, 0x6ef2], /* CJK Ideograph */ + [0x6ef3, 0x6ef3], /* CJK Ideograph */ + [0x6ef4, 0x6ef4], /* CJK Ideograph */ + [0x6ef5, 0x6ef5], /* CJK Ideograph */ + [0x6ef6, 0x6ef6], /* CJK Ideograph */ + [0x6ef7, 0x6ef7], /* CJK Ideograph */ + [0x6ef8, 0x6ef8], /* CJK Ideograph */ + [0x6ef9, 0x6ef9], /* CJK Ideograph */ + [0x6efa, 0x6efa], /* CJK Ideograph */ + [0x6efb, 0x6efb], /* CJK Ideograph */ + [0x6efc, 0x6efc], /* CJK Ideograph */ + [0x6efd, 0x6efd], /* CJK Ideograph */ + [0x6efe, 0x6efe], /* CJK Ideograph */ + [0x6eff, 0x6eff], /* CJK Ideograph */ + [0x6f00, 0x6f00], /* CJK Ideograph */ + [0x6f01, 0x6f01], /* CJK Ideograph */ + [0x6f02, 0x6f02], /* CJK Ideograph */ + [0x6f03, 0x6f03], /* CJK Ideograph */ + [0x6f04, 0x6f04], /* CJK Ideograph */ + [0x6f05, 0x6f05], /* CJK Ideograph */ + [0x6f06, 0x6f06], /* CJK Ideograph */ + [0x6f07, 0x6f07], /* CJK Ideograph */ + [0x6f08, 0x6f08], /* CJK Ideograph */ + [0x6f09, 0x6f09], /* CJK Ideograph */ + [0x6f0a, 0x6f0a], /* CJK Ideograph */ + [0x6f0b, 0x6f0b], /* CJK Ideograph */ + [0x6f0c, 0x6f0c], /* CJK Ideograph */ + [0x6f0d, 0x6f0d], /* CJK Ideograph */ + [0x6f0e, 0x6f0e], /* CJK Ideograph */ + [0x6f0f, 0x6f0f], /* CJK Ideograph */ + [0x6f10, 0x6f10], /* CJK Ideograph */ + [0x6f11, 0x6f11], /* CJK Ideograph */ + [0x6f12, 0x6f12], /* CJK Ideograph */ + [0x6f13, 0x6f13], /* CJK Ideograph */ + [0x6f14, 0x6f14], /* CJK Ideograph */ + [0x6f15, 0x6f15], /* CJK Ideograph */ + [0x6f16, 0x6f16], /* CJK Ideograph */ + [0x6f17, 0x6f17], /* CJK Ideograph */ + [0x6f18, 0x6f18], /* CJK Ideograph */ + [0x6f19, 0x6f19], /* CJK Ideograph */ + [0x6f1a, 0x6f1a], /* CJK Ideograph */ + [0x6f1b, 0x6f1b], /* CJK Ideograph */ + [0x6f1c, 0x6f1c], /* CJK Ideograph */ + [0x6f1d, 0x6f1d], /* CJK Ideograph */ + [0x6f1e, 0x6f1e], /* CJK Ideograph */ + [0x6f1f, 0x6f1f], /* CJK Ideograph */ + [0x6f20, 0x6f20], /* CJK Ideograph */ + [0x6f21, 0x6f21], /* CJK Ideograph */ + [0x6f22, 0x6f22], /* CJK Ideograph */ + [0x6f23, 0x6f23], /* CJK Ideograph */ + [0x6f24, 0x6f24], /* CJK Ideograph */ + [0x6f25, 0x6f25], /* CJK Ideograph */ + [0x6f26, 0x6f26], /* CJK Ideograph */ + [0x6f27, 0x6f27], /* CJK Ideograph */ + [0x6f28, 0x6f28], /* CJK Ideograph */ + [0x6f29, 0x6f29], /* CJK Ideograph */ + [0x6f2a, 0x6f2a], /* CJK Ideograph */ + [0x6f2b, 0x6f2b], /* CJK Ideograph */ + [0x6f2c, 0x6f2c], /* CJK Ideograph */ + [0x6f2d, 0x6f2d], /* CJK Ideograph */ + [0x6f2e, 0x6f2e], /* CJK Ideograph */ + [0x6f2f, 0x6f2f], /* CJK Ideograph */ + [0x6f30, 0x6f30], /* CJK Ideograph */ + [0x6f31, 0x6f31], /* CJK Ideograph */ + [0x6f32, 0x6f32], /* CJK Ideograph */ + [0x6f33, 0x6f33], /* CJK Ideograph */ + [0x6f34, 0x6f34], /* CJK Ideograph */ + [0x6f35, 0x6f35], /* CJK Ideograph */ + [0x6f36, 0x6f36], /* CJK Ideograph */ + [0x6f37, 0x6f37], /* CJK Ideograph */ + [0x6f38, 0x6f38], /* CJK Ideograph */ + [0x6f39, 0x6f39], /* CJK Ideograph */ + [0x6f3a, 0x6f3a], /* CJK Ideograph */ + [0x6f3b, 0x6f3b], /* CJK Ideograph */ + [0x6f3c, 0x6f3c], /* CJK Ideograph */ + [0x6f3d, 0x6f3d], /* CJK Ideograph */ + [0x6f3e, 0x6f3e], /* CJK Ideograph */ + [0x6f3f, 0x6f3f], /* CJK Ideograph */ + [0x6f40, 0x6f40], /* CJK Ideograph */ + [0x6f41, 0x6f41], /* CJK Ideograph */ + [0x6f42, 0x6f42], /* CJK Ideograph */ + [0x6f43, 0x6f43], /* CJK Ideograph */ + [0x6f44, 0x6f44], /* CJK Ideograph */ + [0x6f45, 0x6f45], /* CJK Ideograph */ + [0x6f46, 0x6f46], /* CJK Ideograph */ + [0x6f47, 0x6f47], /* CJK Ideograph */ + [0x6f48, 0x6f48], /* CJK Ideograph */ + [0x6f49, 0x6f49], /* CJK Ideograph */ + [0x6f4a, 0x6f4a], /* CJK Ideograph */ + [0x6f4b, 0x6f4b], /* CJK Ideograph */ + [0x6f4c, 0x6f4c], /* CJK Ideograph */ + [0x6f4d, 0x6f4d], /* CJK Ideograph */ + [0x6f4e, 0x6f4e], /* CJK Ideograph */ + [0x6f4f, 0x6f4f], /* CJK Ideograph */ + [0x6f50, 0x6f50], /* CJK Ideograph */ + [0x6f51, 0x6f51], /* CJK Ideograph */ + [0x6f52, 0x6f52], /* CJK Ideograph */ + [0x6f53, 0x6f53], /* CJK Ideograph */ + [0x6f54, 0x6f54], /* CJK Ideograph */ + [0x6f55, 0x6f55], /* CJK Ideograph */ + [0x6f56, 0x6f56], /* CJK Ideograph */ + [0x6f57, 0x6f57], /* CJK Ideograph */ + [0x6f58, 0x6f58], /* CJK Ideograph */ + [0x6f59, 0x6f59], /* CJK Ideograph */ + [0x6f5a, 0x6f5a], /* CJK Ideograph */ + [0x6f5b, 0x6f5b], /* CJK Ideograph */ + [0x6f5c, 0x6f5c], /* CJK Ideograph */ + [0x6f5d, 0x6f5d], /* CJK Ideograph */ + [0x6f5e, 0x6f5e], /* CJK Ideograph */ + [0x6f5f, 0x6f5f], /* CJK Ideograph */ + [0x6f60, 0x6f60], /* CJK Ideograph */ + [0x6f61, 0x6f61], /* CJK Ideograph */ + [0x6f62, 0x6f62], /* CJK Ideograph */ + [0x6f63, 0x6f63], /* CJK Ideograph */ + [0x6f64, 0x6f64], /* CJK Ideograph */ + [0x6f65, 0x6f65], /* CJK Ideograph */ + [0x6f66, 0x6f66], /* CJK Ideograph */ + [0x6f67, 0x6f67], /* CJK Ideograph */ + [0x6f68, 0x6f68], /* CJK Ideograph */ + [0x6f69, 0x6f69], /* CJK Ideograph */ + [0x6f6a, 0x6f6a], /* CJK Ideograph */ + [0x6f6b, 0x6f6b], /* CJK Ideograph */ + [0x6f6c, 0x6f6c], /* CJK Ideograph */ + [0x6f6d, 0x6f6d], /* CJK Ideograph */ + [0x6f6e, 0x6f6e], /* CJK Ideograph */ + [0x6f6f, 0x6f6f], /* CJK Ideograph */ + [0x6f70, 0x6f70], /* CJK Ideograph */ + [0x6f71, 0x6f71], /* CJK Ideograph */ + [0x6f72, 0x6f72], /* CJK Ideograph */ + [0x6f73, 0x6f73], /* CJK Ideograph */ + [0x6f74, 0x6f74], /* CJK Ideograph */ + [0x6f75, 0x6f75], /* CJK Ideograph */ + [0x6f76, 0x6f76], /* CJK Ideograph */ + [0x6f77, 0x6f77], /* CJK Ideograph */ + [0x6f78, 0x6f78], /* CJK Ideograph */ + [0x6f79, 0x6f79], /* CJK Ideograph */ + [0x6f7a, 0x6f7a], /* CJK Ideograph */ + [0x6f7b, 0x6f7b], /* CJK Ideograph */ + [0x6f7c, 0x6f7c], /* CJK Ideograph */ + [0x6f7d, 0x6f7d], /* CJK Ideograph */ + [0x6f7e, 0x6f7e], /* CJK Ideograph */ + [0x6f7f, 0x6f7f], /* CJK Ideograph */ + [0x6f80, 0x6f80], /* CJK Ideograph */ + [0x6f81, 0x6f81], /* CJK Ideograph */ + [0x6f82, 0x6f82], /* CJK Ideograph */ + [0x6f83, 0x6f83], /* CJK Ideograph */ + [0x6f84, 0x6f84], /* CJK Ideograph */ + [0x6f85, 0x6f85], /* CJK Ideograph */ + [0x6f86, 0x6f86], /* CJK Ideograph */ + [0x6f87, 0x6f87], /* CJK Ideograph */ + [0x6f88, 0x6f88], /* CJK Ideograph */ + [0x6f89, 0x6f89], /* CJK Ideograph */ + [0x6f8a, 0x6f8a], /* CJK Ideograph */ + [0x6f8b, 0x6f8b], /* CJK Ideograph */ + [0x6f8c, 0x6f8c], /* CJK Ideograph */ + [0x6f8d, 0x6f8d], /* CJK Ideograph */ + [0x6f8e, 0x6f8e], /* CJK Ideograph */ + [0x6f8f, 0x6f8f], /* CJK Ideograph */ + [0x6f90, 0x6f90], /* CJK Ideograph */ + [0x6f91, 0x6f91], /* CJK Ideograph */ + [0x6f92, 0x6f92], /* CJK Ideograph */ + [0x6f93, 0x6f93], /* CJK Ideograph */ + [0x6f94, 0x6f94], /* CJK Ideograph */ + [0x6f95, 0x6f95], /* CJK Ideograph */ + [0x6f96, 0x6f96], /* CJK Ideograph */ + [0x6f97, 0x6f97], /* CJK Ideograph */ + [0x6f98, 0x6f98], /* CJK Ideograph */ + [0x6f99, 0x6f99], /* CJK Ideograph */ + [0x6f9a, 0x6f9a], /* CJK Ideograph */ + [0x6f9b, 0x6f9b], /* CJK Ideograph */ + [0x6f9c, 0x6f9c], /* CJK Ideograph */ + [0x6f9d, 0x6f9d], /* CJK Ideograph */ + [0x6f9e, 0x6f9e], /* CJK Ideograph */ + [0x6f9f, 0x6f9f], /* CJK Ideograph */ + [0x6fa0, 0x6fa0], /* CJK Ideograph */ + [0x6fa1, 0x6fa1], /* CJK Ideograph */ + [0x6fa2, 0x6fa2], /* CJK Ideograph */ + [0x6fa3, 0x6fa3], /* CJK Ideograph */ + [0x6fa4, 0x6fa4], /* CJK Ideograph */ + [0x6fa5, 0x6fa5], /* CJK Ideograph */ + [0x6fa6, 0x6fa6], /* CJK Ideograph */ + [0x6fa7, 0x6fa7], /* CJK Ideograph */ + [0x6fa8, 0x6fa8], /* CJK Ideograph */ + [0x6fa9, 0x6fa9], /* CJK Ideograph */ + [0x6faa, 0x6faa], /* CJK Ideograph */ + [0x6fab, 0x6fab], /* CJK Ideograph */ + [0x6fac, 0x6fac], /* CJK Ideograph */ + [0x6fad, 0x6fad], /* CJK Ideograph */ + [0x6fae, 0x6fae], /* CJK Ideograph */ + [0x6faf, 0x6faf], /* CJK Ideograph */ + [0x6fb0, 0x6fb0], /* CJK Ideograph */ + [0x6fb1, 0x6fb1], /* CJK Ideograph */ + [0x6fb2, 0x6fb2], /* CJK Ideograph */ + [0x6fb3, 0x6fb3], /* CJK Ideograph */ + [0x6fb4, 0x6fb4], /* CJK Ideograph */ + [0x6fb5, 0x6fb5], /* CJK Ideograph */ + [0x6fb6, 0x6fb6], /* CJK Ideograph */ + [0x6fb7, 0x6fb7], /* CJK Ideograph */ + [0x6fb8, 0x6fb8], /* CJK Ideograph */ + [0x6fb9, 0x6fb9], /* CJK Ideograph */ + [0x6fba, 0x6fba], /* CJK Ideograph */ + [0x6fbb, 0x6fbb], /* CJK Ideograph */ + [0x6fbc, 0x6fbc], /* CJK Ideograph */ + [0x6fbd, 0x6fbd], /* CJK Ideograph */ + [0x6fbe, 0x6fbe], /* CJK Ideograph */ + [0x6fbf, 0x6fbf], /* CJK Ideograph */ + [0x6fc0, 0x6fc0], /* CJK Ideograph */ + [0x6fc1, 0x6fc1], /* CJK Ideograph */ + [0x6fc2, 0x6fc2], /* CJK Ideograph */ + [0x6fc3, 0x6fc3], /* CJK Ideograph */ + [0x6fc4, 0x6fc4], /* CJK Ideograph */ + [0x6fc5, 0x6fc5], /* CJK Ideograph */ + [0x6fc6, 0x6fc6], /* CJK Ideograph */ + [0x6fc7, 0x6fc7], /* CJK Ideograph */ + [0x6fc8, 0x6fc8], /* CJK Ideograph */ + [0x6fc9, 0x6fc9], /* CJK Ideograph */ + [0x6fca, 0x6fca], /* CJK Ideograph */ + [0x6fcb, 0x6fcb], /* CJK Ideograph */ + [0x6fcc, 0x6fcc], /* CJK Ideograph */ + [0x6fcd, 0x6fcd], /* CJK Ideograph */ + [0x6fce, 0x6fce], /* CJK Ideograph */ + [0x6fcf, 0x6fcf], /* CJK Ideograph */ + [0x6fd0, 0x6fd0], /* CJK Ideograph */ + [0x6fd1, 0x6fd1], /* CJK Ideograph */ + [0x6fd2, 0x6fd2], /* CJK Ideograph */ + [0x6fd3, 0x6fd3], /* CJK Ideograph */ + [0x6fd4, 0x6fd4], /* CJK Ideograph */ + [0x6fd5, 0x6fd5], /* CJK Ideograph */ + [0x6fd6, 0x6fd6], /* CJK Ideograph */ + [0x6fd7, 0x6fd7], /* CJK Ideograph */ + [0x6fd8, 0x6fd8], /* CJK Ideograph */ + [0x6fd9, 0x6fd9], /* CJK Ideograph */ + [0x6fda, 0x6fda], /* CJK Ideograph */ + [0x6fdb, 0x6fdb], /* CJK Ideograph */ + [0x6fdc, 0x6fdc], /* CJK Ideograph */ + [0x6fdd, 0x6fdd], /* CJK Ideograph */ + [0x6fde, 0x6fde], /* CJK Ideograph */ + [0x6fdf, 0x6fdf], /* CJK Ideograph */ + [0x6fe0, 0x6fe0], /* CJK Ideograph */ + [0x6fe1, 0x6fe1], /* CJK Ideograph */ + [0x6fe2, 0x6fe2], /* CJK Ideograph */ + [0x6fe3, 0x6fe3], /* CJK Ideograph */ + [0x6fe4, 0x6fe4], /* CJK Ideograph */ + [0x6fe5, 0x6fe5], /* CJK Ideograph */ + [0x6fe6, 0x6fe6], /* CJK Ideograph */ + [0x6fe7, 0x6fe7], /* CJK Ideograph */ + [0x6fe8, 0x6fe8], /* CJK Ideograph */ + [0x6fe9, 0x6fe9], /* CJK Ideograph */ + [0x6fea, 0x6fea], /* CJK Ideograph */ + [0x6feb, 0x6feb], /* CJK Ideograph */ + [0x6fec, 0x6fec], /* CJK Ideograph */ + [0x6fed, 0x6fed], /* CJK Ideograph */ + [0x6fee, 0x6fee], /* CJK Ideograph */ + [0x6fef, 0x6fef], /* CJK Ideograph */ + [0x6ff0, 0x6ff0], /* CJK Ideograph */ + [0x6ff1, 0x6ff1], /* CJK Ideograph */ + [0x6ff2, 0x6ff2], /* CJK Ideograph */ + [0x6ff3, 0x6ff3], /* CJK Ideograph */ + [0x6ff4, 0x6ff4], /* CJK Ideograph */ + [0x6ff5, 0x6ff5], /* CJK Ideograph */ + [0x6ff6, 0x6ff6], /* CJK Ideograph */ + [0x6ff7, 0x6ff7], /* CJK Ideograph */ + [0x6ff8, 0x6ff8], /* CJK Ideograph */ + [0x6ff9, 0x6ff9], /* CJK Ideograph */ + [0x6ffa, 0x6ffa], /* CJK Ideograph */ + [0x6ffb, 0x6ffb], /* CJK Ideograph */ + [0x6ffc, 0x6ffc], /* CJK Ideograph */ + [0x6ffd, 0x6ffd], /* CJK Ideograph */ + [0x6ffe, 0x6ffe], /* CJK Ideograph */ + [0x6fff, 0x6fff], /* CJK Ideograph */ + [0x7000, 0x7000], /* CJK Ideograph */ + [0x7001, 0x7001], /* CJK Ideograph */ + [0x7002, 0x7002], /* CJK Ideograph */ + [0x7003, 0x7003], /* CJK Ideograph */ + [0x7004, 0x7004], /* CJK Ideograph */ + [0x7005, 0x7005], /* CJK Ideograph */ + [0x7006, 0x7006], /* CJK Ideograph */ + [0x7007, 0x7007], /* CJK Ideograph */ + [0x7008, 0x7008], /* CJK Ideograph */ + [0x7009, 0x7009], /* CJK Ideograph */ + [0x700a, 0x700a], /* CJK Ideograph */ + [0x700b, 0x700b], /* CJK Ideograph */ + [0x700c, 0x700c], /* CJK Ideograph */ + [0x700d, 0x700d], /* CJK Ideograph */ + [0x700e, 0x700e], /* CJK Ideograph */ + [0x700f, 0x700f], /* CJK Ideograph */ + [0x7010, 0x7010], /* CJK Ideograph */ + [0x7011, 0x7011], /* CJK Ideograph */ + [0x7012, 0x7012], /* CJK Ideograph */ + [0x7013, 0x7013], /* CJK Ideograph */ + [0x7014, 0x7014], /* CJK Ideograph */ + [0x7015, 0x7015], /* CJK Ideograph */ + [0x7016, 0x7016], /* CJK Ideograph */ + [0x7017, 0x7017], /* CJK Ideograph */ + [0x7018, 0x7018], /* CJK Ideograph */ + [0x7019, 0x7019], /* CJK Ideograph */ + [0x701a, 0x701a], /* CJK Ideograph */ + [0x701b, 0x701b], /* CJK Ideograph */ + [0x701c, 0x701c], /* CJK Ideograph */ + [0x701d, 0x701d], /* CJK Ideograph */ + [0x701e, 0x701e], /* CJK Ideograph */ + [0x701f, 0x701f], /* CJK Ideograph */ + [0x7020, 0x7020], /* CJK Ideograph */ + [0x7021, 0x7021], /* CJK Ideograph */ + [0x7022, 0x7022], /* CJK Ideograph */ + [0x7023, 0x7023], /* CJK Ideograph */ + [0x7024, 0x7024], /* CJK Ideograph */ + [0x7025, 0x7025], /* CJK Ideograph */ + [0x7026, 0x7026], /* CJK Ideograph */ + [0x7027, 0x7027], /* CJK Ideograph */ + [0x7028, 0x7028], /* CJK Ideograph */ + [0x7029, 0x7029], /* CJK Ideograph */ + [0x702a, 0x702a], /* CJK Ideograph */ + [0x702b, 0x702b], /* CJK Ideograph */ + [0x702c, 0x702c], /* CJK Ideograph */ + [0x702d, 0x702d], /* CJK Ideograph */ + [0x702e, 0x702e], /* CJK Ideograph */ + [0x702f, 0x702f], /* CJK Ideograph */ + [0x7030, 0x7030], /* CJK Ideograph */ + [0x7031, 0x7031], /* CJK Ideograph */ + [0x7032, 0x7032], /* CJK Ideograph */ + [0x7033, 0x7033], /* CJK Ideograph */ + [0x7034, 0x7034], /* CJK Ideograph */ + [0x7035, 0x7035], /* CJK Ideograph */ + [0x7036, 0x7036], /* CJK Ideograph */ + [0x7037, 0x7037], /* CJK Ideograph */ + [0x7038, 0x7038], /* CJK Ideograph */ + [0x7039, 0x7039], /* CJK Ideograph */ + [0x703a, 0x703a], /* CJK Ideograph */ + [0x703b, 0x703b], /* CJK Ideograph */ + [0x703c, 0x703c], /* CJK Ideograph */ + [0x703d, 0x703d], /* CJK Ideograph */ + [0x703e, 0x703e], /* CJK Ideograph */ + [0x703f, 0x703f], /* CJK Ideograph */ + [0x7040, 0x7040], /* CJK Ideograph */ + [0x7041, 0x7041], /* CJK Ideograph */ + [0x7042, 0x7042], /* CJK Ideograph */ + [0x7043, 0x7043], /* CJK Ideograph */ + [0x7044, 0x7044], /* CJK Ideograph */ + [0x7045, 0x7045], /* CJK Ideograph */ + [0x7046, 0x7046], /* CJK Ideograph */ + [0x7047, 0x7047], /* CJK Ideograph */ + [0x7048, 0x7048], /* CJK Ideograph */ + [0x7049, 0x7049], /* CJK Ideograph */ + [0x704a, 0x704a], /* CJK Ideograph */ + [0x704b, 0x704b], /* CJK Ideograph */ + [0x704c, 0x704c], /* CJK Ideograph */ + [0x704d, 0x704d], /* CJK Ideograph */ + [0x704e, 0x704e], /* CJK Ideograph */ + [0x704f, 0x704f], /* CJK Ideograph */ + [0x7050, 0x7050], /* CJK Ideograph */ + [0x7051, 0x7051], /* CJK Ideograph */ + [0x7052, 0x7052], /* CJK Ideograph */ + [0x7053, 0x7053], /* CJK Ideograph */ + [0x7054, 0x7054], /* CJK Ideograph */ + [0x7055, 0x7055], /* CJK Ideograph */ + [0x7056, 0x7056], /* CJK Ideograph */ + [0x7057, 0x7057], /* CJK Ideograph */ + [0x7058, 0x7058], /* CJK Ideograph */ + [0x7059, 0x7059], /* CJK Ideograph */ + [0x705a, 0x705a], /* CJK Ideograph */ + [0x705b, 0x705b], /* CJK Ideograph */ + [0x705c, 0x705c], /* CJK Ideograph */ + [0x705d, 0x705d], /* CJK Ideograph */ + [0x705e, 0x705e], /* CJK Ideograph */ + [0x705f, 0x705f], /* CJK Ideograph */ + [0x7060, 0x7060], /* CJK Ideograph */ + [0x7061, 0x7061], /* CJK Ideograph */ + [0x7062, 0x7062], /* CJK Ideograph */ + [0x7063, 0x7063], /* CJK Ideograph */ + [0x7064, 0x7064], /* CJK Ideograph */ + [0x7065, 0x7065], /* CJK Ideograph */ + [0x7066, 0x7066], /* CJK Ideograph */ + [0x7067, 0x7067], /* CJK Ideograph */ + [0x7068, 0x7068], /* CJK Ideograph */ + [0x7069, 0x7069], /* CJK Ideograph */ + [0x706a, 0x706a], /* CJK Ideograph */ + [0x706b, 0x706b], /* CJK Ideograph */ + [0x706c, 0x706c], /* CJK Ideograph */ + [0x706d, 0x706d], /* CJK Ideograph */ + [0x706e, 0x706e], /* CJK Ideograph */ + [0x706f, 0x706f], /* CJK Ideograph */ + [0x7070, 0x7070], /* CJK Ideograph */ + [0x7071, 0x7071], /* CJK Ideograph */ + [0x7072, 0x7072], /* CJK Ideograph */ + [0x7073, 0x7073], /* CJK Ideograph */ + [0x7074, 0x7074], /* CJK Ideograph */ + [0x7075, 0x7075], /* CJK Ideograph */ + [0x7076, 0x7076], /* CJK Ideograph */ + [0x7077, 0x7077], /* CJK Ideograph */ + [0x7078, 0x7078], /* CJK Ideograph */ + [0x7079, 0x7079], /* CJK Ideograph */ + [0x707a, 0x707a], /* CJK Ideograph */ + [0x707b, 0x707b], /* CJK Ideograph */ + [0x707c, 0x707c], /* CJK Ideograph */ + [0x707d, 0x707d], /* CJK Ideograph */ + [0x707e, 0x707e], /* CJK Ideograph */ + [0x707f, 0x707f], /* CJK Ideograph */ + [0x7080, 0x7080], /* CJK Ideograph */ + [0x7081, 0x7081], /* CJK Ideograph */ + [0x7082, 0x7082], /* CJK Ideograph */ + [0x7083, 0x7083], /* CJK Ideograph */ + [0x7084, 0x7084], /* CJK Ideograph */ + [0x7085, 0x7085], /* CJK Ideograph */ + [0x7086, 0x7086], /* CJK Ideograph */ + [0x7087, 0x7087], /* CJK Ideograph */ + [0x7088, 0x7088], /* CJK Ideograph */ + [0x7089, 0x7089], /* CJK Ideograph */ + [0x708a, 0x708a], /* CJK Ideograph */ + [0x708b, 0x708b], /* CJK Ideograph */ + [0x708c, 0x708c], /* CJK Ideograph */ + [0x708d, 0x708d], /* CJK Ideograph */ + [0x708e, 0x708e], /* CJK Ideograph */ + [0x708f, 0x708f], /* CJK Ideograph */ + [0x7090, 0x7090], /* CJK Ideograph */ + [0x7091, 0x7091], /* CJK Ideograph */ + [0x7092, 0x7092], /* CJK Ideograph */ + [0x7093, 0x7093], /* CJK Ideograph */ + [0x7094, 0x7094], /* CJK Ideograph */ + [0x7095, 0x7095], /* CJK Ideograph */ + [0x7096, 0x7096], /* CJK Ideograph */ + [0x7097, 0x7097], /* CJK Ideograph */ + [0x7098, 0x7098], /* CJK Ideograph */ + [0x7099, 0x7099], /* CJK Ideograph */ + [0x709a, 0x709a], /* CJK Ideograph */ + [0x709b, 0x709b], /* CJK Ideograph */ + [0x709c, 0x709c], /* CJK Ideograph */ + [0x709d, 0x709d], /* CJK Ideograph */ + [0x709e, 0x709e], /* CJK Ideograph */ + [0x709f, 0x709f], /* CJK Ideograph */ + [0x70a0, 0x70a0], /* CJK Ideograph */ + [0x70a1, 0x70a1], /* CJK Ideograph */ + [0x70a2, 0x70a2], /* CJK Ideograph */ + [0x70a3, 0x70a3], /* CJK Ideograph */ + [0x70a4, 0x70a4], /* CJK Ideograph */ + [0x70a5, 0x70a5], /* CJK Ideograph */ + [0x70a6, 0x70a6], /* CJK Ideograph */ + [0x70a7, 0x70a7], /* CJK Ideograph */ + [0x70a8, 0x70a8], /* CJK Ideograph */ + [0x70a9, 0x70a9], /* CJK Ideograph */ + [0x70aa, 0x70aa], /* CJK Ideograph */ + [0x70ab, 0x70ab], /* CJK Ideograph */ + [0x70ac, 0x70ac], /* CJK Ideograph */ + [0x70ad, 0x70ad], /* CJK Ideograph */ + [0x70ae, 0x70ae], /* CJK Ideograph */ + [0x70af, 0x70af], /* CJK Ideograph */ + [0x70b0, 0x70b0], /* CJK Ideograph */ + [0x70b1, 0x70b1], /* CJK Ideograph */ + [0x70b2, 0x70b2], /* CJK Ideograph */ + [0x70b3, 0x70b3], /* CJK Ideograph */ + [0x70b4, 0x70b4], /* CJK Ideograph */ + [0x70b5, 0x70b5], /* CJK Ideograph */ + [0x70b6, 0x70b6], /* CJK Ideograph */ + [0x70b7, 0x70b7], /* CJK Ideograph */ + [0x70b8, 0x70b8], /* CJK Ideograph */ + [0x70b9, 0x70b9], /* CJK Ideograph */ + [0x70ba, 0x70ba], /* CJK Ideograph */ + [0x70bb, 0x70bb], /* CJK Ideograph */ + [0x70bc, 0x70bc], /* CJK Ideograph */ + [0x70bd, 0x70bd], /* CJK Ideograph */ + [0x70be, 0x70be], /* CJK Ideograph */ + [0x70bf, 0x70bf], /* CJK Ideograph */ + [0x70c0, 0x70c0], /* CJK Ideograph */ + [0x70c1, 0x70c1], /* CJK Ideograph */ + [0x70c2, 0x70c2], /* CJK Ideograph */ + [0x70c3, 0x70c3], /* CJK Ideograph */ + [0x70c4, 0x70c4], /* CJK Ideograph */ + [0x70c5, 0x70c5], /* CJK Ideograph */ + [0x70c6, 0x70c6], /* CJK Ideograph */ + [0x70c7, 0x70c7], /* CJK Ideograph */ + [0x70c8, 0x70c8], /* CJK Ideograph */ + [0x70c9, 0x70c9], /* CJK Ideograph */ + [0x70ca, 0x70ca], /* CJK Ideograph */ + [0x70cb, 0x70cb], /* CJK Ideograph */ + [0x70cc, 0x70cc], /* CJK Ideograph */ + [0x70cd, 0x70cd], /* CJK Ideograph */ + [0x70ce, 0x70ce], /* CJK Ideograph */ + [0x70cf, 0x70cf], /* CJK Ideograph */ + [0x70d0, 0x70d0], /* CJK Ideograph */ + [0x70d1, 0x70d1], /* CJK Ideograph */ + [0x70d2, 0x70d2], /* CJK Ideograph */ + [0x70d3, 0x70d3], /* CJK Ideograph */ + [0x70d4, 0x70d4], /* CJK Ideograph */ + [0x70d5, 0x70d5], /* CJK Ideograph */ + [0x70d6, 0x70d6], /* CJK Ideograph */ + [0x70d7, 0x70d7], /* CJK Ideograph */ + [0x70d8, 0x70d8], /* CJK Ideograph */ + [0x70d9, 0x70d9], /* CJK Ideograph */ + [0x70da, 0x70da], /* CJK Ideograph */ + [0x70db, 0x70db], /* CJK Ideograph */ + [0x70dc, 0x70dc], /* CJK Ideograph */ + [0x70dd, 0x70dd], /* CJK Ideograph */ + [0x70de, 0x70de], /* CJK Ideograph */ + [0x70df, 0x70df], /* CJK Ideograph */ + [0x70e0, 0x70e0], /* CJK Ideograph */ + [0x70e1, 0x70e1], /* CJK Ideograph */ + [0x70e2, 0x70e2], /* CJK Ideograph */ + [0x70e3, 0x70e3], /* CJK Ideograph */ + [0x70e4, 0x70e4], /* CJK Ideograph */ + [0x70e5, 0x70e5], /* CJK Ideograph */ + [0x70e6, 0x70e6], /* CJK Ideograph */ + [0x70e7, 0x70e7], /* CJK Ideograph */ + [0x70e8, 0x70e8], /* CJK Ideograph */ + [0x70e9, 0x70e9], /* CJK Ideograph */ + [0x70ea, 0x70ea], /* CJK Ideograph */ + [0x70eb, 0x70eb], /* CJK Ideograph */ + [0x70ec, 0x70ec], /* CJK Ideograph */ + [0x70ed, 0x70ed], /* CJK Ideograph */ + [0x70ee, 0x70ee], /* CJK Ideograph */ + [0x70ef, 0x70ef], /* CJK Ideograph */ + [0x70f0, 0x70f0], /* CJK Ideograph */ + [0x70f1, 0x70f1], /* CJK Ideograph */ + [0x70f2, 0x70f2], /* CJK Ideograph */ + [0x70f3, 0x70f3], /* CJK Ideograph */ + [0x70f4, 0x70f4], /* CJK Ideograph */ + [0x70f5, 0x70f5], /* CJK Ideograph */ + [0x70f6, 0x70f6], /* CJK Ideograph */ + [0x70f7, 0x70f7], /* CJK Ideograph */ + [0x70f8, 0x70f8], /* CJK Ideograph */ + [0x70f9, 0x70f9], /* CJK Ideograph */ + [0x70fa, 0x70fa], /* CJK Ideograph */ + [0x70fb, 0x70fb], /* CJK Ideograph */ + [0x70fc, 0x70fc], /* CJK Ideograph */ + [0x70fd, 0x70fd], /* CJK Ideograph */ + [0x70fe, 0x70fe], /* CJK Ideograph */ + [0x70ff, 0x70ff], /* CJK Ideograph */ + [0x7100, 0x7100], /* CJK Ideograph */ + [0x7101, 0x7101], /* CJK Ideograph */ + [0x7102, 0x7102], /* CJK Ideograph */ + [0x7103, 0x7103], /* CJK Ideograph */ + [0x7104, 0x7104], /* CJK Ideograph */ + [0x7105, 0x7105], /* CJK Ideograph */ + [0x7106, 0x7106], /* CJK Ideograph */ + [0x7107, 0x7107], /* CJK Ideograph */ + [0x7108, 0x7108], /* CJK Ideograph */ + [0x7109, 0x7109], /* CJK Ideograph */ + [0x710a, 0x710a], /* CJK Ideograph */ + [0x710b, 0x710b], /* CJK Ideograph */ + [0x710c, 0x710c], /* CJK Ideograph */ + [0x710d, 0x710d], /* CJK Ideograph */ + [0x710e, 0x710e], /* CJK Ideograph */ + [0x710f, 0x710f], /* CJK Ideograph */ + [0x7110, 0x7110], /* CJK Ideograph */ + [0x7111, 0x7111], /* CJK Ideograph */ + [0x7112, 0x7112], /* CJK Ideograph */ + [0x7113, 0x7113], /* CJK Ideograph */ + [0x7114, 0x7114], /* CJK Ideograph */ + [0x7115, 0x7115], /* CJK Ideograph */ + [0x7116, 0x7116], /* CJK Ideograph */ + [0x7117, 0x7117], /* CJK Ideograph */ + [0x7118, 0x7118], /* CJK Ideograph */ + [0x7119, 0x7119], /* CJK Ideograph */ + [0x711a, 0x711a], /* CJK Ideograph */ + [0x711b, 0x711b], /* CJK Ideograph */ + [0x711c, 0x711c], /* CJK Ideograph */ + [0x711d, 0x711d], /* CJK Ideograph */ + [0x711e, 0x711e], /* CJK Ideograph */ + [0x711f, 0x711f], /* CJK Ideograph */ + [0x7120, 0x7120], /* CJK Ideograph */ + [0x7121, 0x7121], /* CJK Ideograph */ + [0x7122, 0x7122], /* CJK Ideograph */ + [0x7123, 0x7123], /* CJK Ideograph */ + [0x7124, 0x7124], /* CJK Ideograph */ + [0x7125, 0x7125], /* CJK Ideograph */ + [0x7126, 0x7126], /* CJK Ideograph */ + [0x7127, 0x7127], /* CJK Ideograph */ + [0x7128, 0x7128], /* CJK Ideograph */ + [0x7129, 0x7129], /* CJK Ideograph */ + [0x712a, 0x712a], /* CJK Ideograph */ + [0x712b, 0x712b], /* CJK Ideograph */ + [0x712c, 0x712c], /* CJK Ideograph */ + [0x712d, 0x712d], /* CJK Ideograph */ + [0x712e, 0x712e], /* CJK Ideograph */ + [0x712f, 0x712f], /* CJK Ideograph */ + [0x7130, 0x7130], /* CJK Ideograph */ + [0x7131, 0x7131], /* CJK Ideograph */ + [0x7132, 0x7132], /* CJK Ideograph */ + [0x7133, 0x7133], /* CJK Ideograph */ + [0x7134, 0x7134], /* CJK Ideograph */ + [0x7135, 0x7135], /* CJK Ideograph */ + [0x7136, 0x7136], /* CJK Ideograph */ + [0x7137, 0x7137], /* CJK Ideograph */ + [0x7138, 0x7138], /* CJK Ideograph */ + [0x7139, 0x7139], /* CJK Ideograph */ + [0x713a, 0x713a], /* CJK Ideograph */ + [0x713b, 0x713b], /* CJK Ideograph */ + [0x713c, 0x713c], /* CJK Ideograph */ + [0x713d, 0x713d], /* CJK Ideograph */ + [0x713e, 0x713e], /* CJK Ideograph */ + [0x713f, 0x713f], /* CJK Ideograph */ + [0x7140, 0x7140], /* CJK Ideograph */ + [0x7141, 0x7141], /* CJK Ideograph */ + [0x7142, 0x7142], /* CJK Ideograph */ + [0x7143, 0x7143], /* CJK Ideograph */ + [0x7144, 0x7144], /* CJK Ideograph */ + [0x7145, 0x7145], /* CJK Ideograph */ + [0x7146, 0x7146], /* CJK Ideograph */ + [0x7147, 0x7147], /* CJK Ideograph */ + [0x7148, 0x7148], /* CJK Ideograph */ + [0x7149, 0x7149], /* CJK Ideograph */ + [0x714a, 0x714a], /* CJK Ideograph */ + [0x714b, 0x714b], /* CJK Ideograph */ + [0x714c, 0x714c], /* CJK Ideograph */ + [0x714d, 0x714d], /* CJK Ideograph */ + [0x714e, 0x714e], /* CJK Ideograph */ + [0x714f, 0x714f], /* CJK Ideograph */ + [0x7150, 0x7150], /* CJK Ideograph */ + [0x7151, 0x7151], /* CJK Ideograph */ + [0x7152, 0x7152], /* CJK Ideograph */ + [0x7153, 0x7153], /* CJK Ideograph */ + [0x7154, 0x7154], /* CJK Ideograph */ + [0x7155, 0x7155], /* CJK Ideograph */ + [0x7156, 0x7156], /* CJK Ideograph */ + [0x7157, 0x7157], /* CJK Ideograph */ + [0x7158, 0x7158], /* CJK Ideograph */ + [0x7159, 0x7159], /* CJK Ideograph */ + [0x715a, 0x715a], /* CJK Ideograph */ + [0x715b, 0x715b], /* CJK Ideograph */ + [0x715c, 0x715c], /* CJK Ideograph */ + [0x715d, 0x715d], /* CJK Ideograph */ + [0x715e, 0x715e], /* CJK Ideograph */ + [0x715f, 0x715f], /* CJK Ideograph */ + [0x7160, 0x7160], /* CJK Ideograph */ + [0x7161, 0x7161], /* CJK Ideograph */ + [0x7162, 0x7162], /* CJK Ideograph */ + [0x7163, 0x7163], /* CJK Ideograph */ + [0x7164, 0x7164], /* CJK Ideograph */ + [0x7165, 0x7165], /* CJK Ideograph */ + [0x7166, 0x7166], /* CJK Ideograph */ + [0x7167, 0x7167], /* CJK Ideograph */ + [0x7168, 0x7168], /* CJK Ideograph */ + [0x7169, 0x7169], /* CJK Ideograph */ + [0x716a, 0x716a], /* CJK Ideograph */ + [0x716b, 0x716b], /* CJK Ideograph */ + [0x716c, 0x716c], /* CJK Ideograph */ + [0x716d, 0x716d], /* CJK Ideograph */ + [0x716e, 0x716e], /* CJK Ideograph */ + [0x716f, 0x716f], /* CJK Ideograph */ + [0x7170, 0x7170], /* CJK Ideograph */ + [0x7171, 0x7171], /* CJK Ideograph */ + [0x7172, 0x7172], /* CJK Ideograph */ + [0x7173, 0x7173], /* CJK Ideograph */ + [0x7174, 0x7174], /* CJK Ideograph */ + [0x7175, 0x7175], /* CJK Ideograph */ + [0x7176, 0x7176], /* CJK Ideograph */ + [0x7177, 0x7177], /* CJK Ideograph */ + [0x7178, 0x7178], /* CJK Ideograph */ + [0x7179, 0x7179], /* CJK Ideograph */ + [0x717a, 0x717a], /* CJK Ideograph */ + [0x717b, 0x717b], /* CJK Ideograph */ + [0x717c, 0x717c], /* CJK Ideograph */ + [0x717d, 0x717d], /* CJK Ideograph */ + [0x717e, 0x717e], /* CJK Ideograph */ + [0x717f, 0x717f], /* CJK Ideograph */ + [0x7180, 0x7180], /* CJK Ideograph */ + [0x7181, 0x7181], /* CJK Ideograph */ + [0x7182, 0x7182], /* CJK Ideograph */ + [0x7183, 0x7183], /* CJK Ideograph */ + [0x7184, 0x7184], /* CJK Ideograph */ + [0x7185, 0x7185], /* CJK Ideograph */ + [0x7186, 0x7186], /* CJK Ideograph */ + [0x7187, 0x7187], /* CJK Ideograph */ + [0x7188, 0x7188], /* CJK Ideograph */ + [0x7189, 0x7189], /* CJK Ideograph */ + [0x718a, 0x718a], /* CJK Ideograph */ + [0x718b, 0x718b], /* CJK Ideograph */ + [0x718c, 0x718c], /* CJK Ideograph */ + [0x718d, 0x718d], /* CJK Ideograph */ + [0x718e, 0x718e], /* CJK Ideograph */ + [0x718f, 0x718f], /* CJK Ideograph */ + [0x7190, 0x7190], /* CJK Ideograph */ + [0x7191, 0x7191], /* CJK Ideograph */ + [0x7192, 0x7192], /* CJK Ideograph */ + [0x7193, 0x7193], /* CJK Ideograph */ + [0x7194, 0x7194], /* CJK Ideograph */ + [0x7195, 0x7195], /* CJK Ideograph */ + [0x7196, 0x7196], /* CJK Ideograph */ + [0x7197, 0x7197], /* CJK Ideograph */ + [0x7198, 0x7198], /* CJK Ideograph */ + [0x7199, 0x7199], /* CJK Ideograph */ + [0x719a, 0x719a], /* CJK Ideograph */ + [0x719b, 0x719b], /* CJK Ideograph */ + [0x719c, 0x719c], /* CJK Ideograph */ + [0x719d, 0x719d], /* CJK Ideograph */ + [0x719e, 0x719e], /* CJK Ideograph */ + [0x719f, 0x719f], /* CJK Ideograph */ + [0x71a0, 0x71a0], /* CJK Ideograph */ + [0x71a1, 0x71a1], /* CJK Ideograph */ + [0x71a2, 0x71a2], /* CJK Ideograph */ + [0x71a3, 0x71a3], /* CJK Ideograph */ + [0x71a4, 0x71a4], /* CJK Ideograph */ + [0x71a5, 0x71a5], /* CJK Ideograph */ + [0x71a6, 0x71a6], /* CJK Ideograph */ + [0x71a7, 0x71a7], /* CJK Ideograph */ + [0x71a8, 0x71a8], /* CJK Ideograph */ + [0x71a9, 0x71a9], /* CJK Ideograph */ + [0x71aa, 0x71aa], /* CJK Ideograph */ + [0x71ab, 0x71ab], /* CJK Ideograph */ + [0x71ac, 0x71ac], /* CJK Ideograph */ + [0x71ad, 0x71ad], /* CJK Ideograph */ + [0x71ae, 0x71ae], /* CJK Ideograph */ + [0x71af, 0x71af], /* CJK Ideograph */ + [0x71b0, 0x71b0], /* CJK Ideograph */ + [0x71b1, 0x71b1], /* CJK Ideograph */ + [0x71b2, 0x71b2], /* CJK Ideograph */ + [0x71b3, 0x71b3], /* CJK Ideograph */ + [0x71b4, 0x71b4], /* CJK Ideograph */ + [0x71b5, 0x71b5], /* CJK Ideograph */ + [0x71b6, 0x71b6], /* CJK Ideograph */ + [0x71b7, 0x71b7], /* CJK Ideograph */ + [0x71b8, 0x71b8], /* CJK Ideograph */ + [0x71b9, 0x71b9], /* CJK Ideograph */ + [0x71ba, 0x71ba], /* CJK Ideograph */ + [0x71bb, 0x71bb], /* CJK Ideograph */ + [0x71bc, 0x71bc], /* CJK Ideograph */ + [0x71bd, 0x71bd], /* CJK Ideograph */ + [0x71be, 0x71be], /* CJK Ideograph */ + [0x71bf, 0x71bf], /* CJK Ideograph */ + [0x71c0, 0x71c0], /* CJK Ideograph */ + [0x71c1, 0x71c1], /* CJK Ideograph */ + [0x71c2, 0x71c2], /* CJK Ideograph */ + [0x71c3, 0x71c3], /* CJK Ideograph */ + [0x71c4, 0x71c4], /* CJK Ideograph */ + [0x71c5, 0x71c5], /* CJK Ideograph */ + [0x71c6, 0x71c6], /* CJK Ideograph */ + [0x71c7, 0x71c7], /* CJK Ideograph */ + [0x71c8, 0x71c8], /* CJK Ideograph */ + [0x71c9, 0x71c9], /* CJK Ideograph */ + [0x71ca, 0x71ca], /* CJK Ideograph */ + [0x71cb, 0x71cb], /* CJK Ideograph */ + [0x71cc, 0x71cc], /* CJK Ideograph */ + [0x71cd, 0x71cd], /* CJK Ideograph */ + [0x71ce, 0x71ce], /* CJK Ideograph */ + [0x71cf, 0x71cf], /* CJK Ideograph */ + [0x71d0, 0x71d0], /* CJK Ideograph */ + [0x71d1, 0x71d1], /* CJK Ideograph */ + [0x71d2, 0x71d2], /* CJK Ideograph */ + [0x71d3, 0x71d3], /* CJK Ideograph */ + [0x71d4, 0x71d4], /* CJK Ideograph */ + [0x71d5, 0x71d5], /* CJK Ideograph */ + [0x71d6, 0x71d6], /* CJK Ideograph */ + [0x71d7, 0x71d7], /* CJK Ideograph */ + [0x71d8, 0x71d8], /* CJK Ideograph */ + [0x71d9, 0x71d9], /* CJK Ideograph */ + [0x71da, 0x71da], /* CJK Ideograph */ + [0x71db, 0x71db], /* CJK Ideograph */ + [0x71dc, 0x71dc], /* CJK Ideograph */ + [0x71dd, 0x71dd], /* CJK Ideograph */ + [0x71de, 0x71de], /* CJK Ideograph */ + [0x71df, 0x71df], /* CJK Ideograph */ + [0x71e0, 0x71e0], /* CJK Ideograph */ + [0x71e1, 0x71e1], /* CJK Ideograph */ + [0x71e2, 0x71e2], /* CJK Ideograph */ + [0x71e3, 0x71e3], /* CJK Ideograph */ + [0x71e4, 0x71e4], /* CJK Ideograph */ + [0x71e5, 0x71e5], /* CJK Ideograph */ + [0x71e6, 0x71e6], /* CJK Ideograph */ + [0x71e7, 0x71e7], /* CJK Ideograph */ + [0x71e8, 0x71e8], /* CJK Ideograph */ + [0x71e9, 0x71e9], /* CJK Ideograph */ + [0x71ea, 0x71ea], /* CJK Ideograph */ + [0x71eb, 0x71eb], /* CJK Ideograph */ + [0x71ec, 0x71ec], /* CJK Ideograph */ + [0x71ed, 0x71ed], /* CJK Ideograph */ + [0x71ee, 0x71ee], /* CJK Ideograph */ + [0x71ef, 0x71ef], /* CJK Ideograph */ + [0x71f0, 0x71f0], /* CJK Ideograph */ + [0x71f1, 0x71f1], /* CJK Ideograph */ + [0x71f2, 0x71f2], /* CJK Ideograph */ + [0x71f3, 0x71f3], /* CJK Ideograph */ + [0x71f4, 0x71f4], /* CJK Ideograph */ + [0x71f5, 0x71f5], /* CJK Ideograph */ + [0x71f6, 0x71f6], /* CJK Ideograph */ + [0x71f7, 0x71f7], /* CJK Ideograph */ + [0x71f8, 0x71f8], /* CJK Ideograph */ + [0x71f9, 0x71f9], /* CJK Ideograph */ + [0x71fa, 0x71fa], /* CJK Ideograph */ + [0x71fb, 0x71fb], /* CJK Ideograph */ + [0x71fc, 0x71fc], /* CJK Ideograph */ + [0x71fd, 0x71fd], /* CJK Ideograph */ + [0x71fe, 0x71fe], /* CJK Ideograph */ + [0x71ff, 0x71ff], /* CJK Ideograph */ + [0x7200, 0x7200], /* CJK Ideograph */ + [0x7201, 0x7201], /* CJK Ideograph */ + [0x7202, 0x7202], /* CJK Ideograph */ + [0x7203, 0x7203], /* CJK Ideograph */ + [0x7204, 0x7204], /* CJK Ideograph */ + [0x7205, 0x7205], /* CJK Ideograph */ + [0x7206, 0x7206], /* CJK Ideograph */ + [0x7207, 0x7207], /* CJK Ideograph */ + [0x7208, 0x7208], /* CJK Ideograph */ + [0x7209, 0x7209], /* CJK Ideograph */ + [0x720a, 0x720a], /* CJK Ideograph */ + [0x720b, 0x720b], /* CJK Ideograph */ + [0x720c, 0x720c], /* CJK Ideograph */ + [0x720d, 0x720d], /* CJK Ideograph */ + [0x720e, 0x720e], /* CJK Ideograph */ + [0x720f, 0x720f], /* CJK Ideograph */ + [0x7210, 0x7210], /* CJK Ideograph */ + [0x7211, 0x7211], /* CJK Ideograph */ + [0x7212, 0x7212], /* CJK Ideograph */ + [0x7213, 0x7213], /* CJK Ideograph */ + [0x7214, 0x7214], /* CJK Ideograph */ + [0x7215, 0x7215], /* CJK Ideograph */ + [0x7216, 0x7216], /* CJK Ideograph */ + [0x7217, 0x7217], /* CJK Ideograph */ + [0x7218, 0x7218], /* CJK Ideograph */ + [0x7219, 0x7219], /* CJK Ideograph */ + [0x721a, 0x721a], /* CJK Ideograph */ + [0x721b, 0x721b], /* CJK Ideograph */ + [0x721c, 0x721c], /* CJK Ideograph */ + [0x721d, 0x721d], /* CJK Ideograph */ + [0x721e, 0x721e], /* CJK Ideograph */ + [0x721f, 0x721f], /* CJK Ideograph */ + [0x7220, 0x7220], /* CJK Ideograph */ + [0x7221, 0x7221], /* CJK Ideograph */ + [0x7222, 0x7222], /* CJK Ideograph */ + [0x7223, 0x7223], /* CJK Ideograph */ + [0x7224, 0x7224], /* CJK Ideograph */ + [0x7225, 0x7225], /* CJK Ideograph */ + [0x7226, 0x7226], /* CJK Ideograph */ + [0x7227, 0x7227], /* CJK Ideograph */ + [0x7228, 0x7228], /* CJK Ideograph */ + [0x7229, 0x7229], /* CJK Ideograph */ + [0x722a, 0x722a], /* CJK Ideograph */ + [0x722b, 0x722b], /* CJK Ideograph */ + [0x722c, 0x722c], /* CJK Ideograph */ + [0x722d, 0x722d], /* CJK Ideograph */ + [0x722e, 0x722e], /* CJK Ideograph */ + [0x722f, 0x722f], /* CJK Ideograph */ + [0x7230, 0x7230], /* CJK Ideograph */ + [0x7231, 0x7231], /* CJK Ideograph */ + [0x7232, 0x7232], /* CJK Ideograph */ + [0x7233, 0x7233], /* CJK Ideograph */ + [0x7234, 0x7234], /* CJK Ideograph */ + [0x7235, 0x7235], /* CJK Ideograph */ + [0x7236, 0x7236], /* CJK Ideograph */ + [0x7237, 0x7237], /* CJK Ideograph */ + [0x7238, 0x7238], /* CJK Ideograph */ + [0x7239, 0x7239], /* CJK Ideograph */ + [0x723a, 0x723a], /* CJK Ideograph */ + [0x723b, 0x723b], /* CJK Ideograph */ + [0x723c, 0x723c], /* CJK Ideograph */ + [0x723d, 0x723d], /* CJK Ideograph */ + [0x723e, 0x723e], /* CJK Ideograph */ + [0x723f, 0x723f], /* CJK Ideograph */ + [0x7240, 0x7240], /* CJK Ideograph */ + [0x7241, 0x7241], /* CJK Ideograph */ + [0x7242, 0x7242], /* CJK Ideograph */ + [0x7243, 0x7243], /* CJK Ideograph */ + [0x7244, 0x7244], /* CJK Ideograph */ + [0x7245, 0x7245], /* CJK Ideograph */ + [0x7246, 0x7246], /* CJK Ideograph */ + [0x7247, 0x7247], /* CJK Ideograph */ + [0x7248, 0x7248], /* CJK Ideograph */ + [0x7249, 0x7249], /* CJK Ideograph */ + [0x724a, 0x724a], /* CJK Ideograph */ + [0x724b, 0x724b], /* CJK Ideograph */ + [0x724c, 0x724c], /* CJK Ideograph */ + [0x724d, 0x724d], /* CJK Ideograph */ + [0x724e, 0x724e], /* CJK Ideograph */ + [0x724f, 0x724f], /* CJK Ideograph */ + [0x7250, 0x7250], /* CJK Ideograph */ + [0x7251, 0x7251], /* CJK Ideograph */ + [0x7252, 0x7252], /* CJK Ideograph */ + [0x7253, 0x7253], /* CJK Ideograph */ + [0x7254, 0x7254], /* CJK Ideograph */ + [0x7255, 0x7255], /* CJK Ideograph */ + [0x7256, 0x7256], /* CJK Ideograph */ + [0x7257, 0x7257], /* CJK Ideograph */ + [0x7258, 0x7258], /* CJK Ideograph */ + [0x7259, 0x7259], /* CJK Ideograph */ + [0x725a, 0x725a], /* CJK Ideograph */ + [0x725b, 0x725b], /* CJK Ideograph */ + [0x725c, 0x725c], /* CJK Ideograph */ + [0x725d, 0x725d], /* CJK Ideograph */ + [0x725e, 0x725e], /* CJK Ideograph */ + [0x725f, 0x725f], /* CJK Ideograph */ + [0x7260, 0x7260], /* CJK Ideograph */ + [0x7261, 0x7261], /* CJK Ideograph */ + [0x7262, 0x7262], /* CJK Ideograph */ + [0x7263, 0x7263], /* CJK Ideograph */ + [0x7264, 0x7264], /* CJK Ideograph */ + [0x7265, 0x7265], /* CJK Ideograph */ + [0x7266, 0x7266], /* CJK Ideograph */ + [0x7267, 0x7267], /* CJK Ideograph */ + [0x7268, 0x7268], /* CJK Ideograph */ + [0x7269, 0x7269], /* CJK Ideograph */ + [0x726a, 0x726a], /* CJK Ideograph */ + [0x726b, 0x726b], /* CJK Ideograph */ + [0x726c, 0x726c], /* CJK Ideograph */ + [0x726d, 0x726d], /* CJK Ideograph */ + [0x726e, 0x726e], /* CJK Ideograph */ + [0x726f, 0x726f], /* CJK Ideograph */ + [0x7270, 0x7270], /* CJK Ideograph */ + [0x7271, 0x7271], /* CJK Ideograph */ + [0x7272, 0x7272], /* CJK Ideograph */ + [0x7273, 0x7273], /* CJK Ideograph */ + [0x7274, 0x7274], /* CJK Ideograph */ + [0x7275, 0x7275], /* CJK Ideograph */ + [0x7276, 0x7276], /* CJK Ideograph */ + [0x7277, 0x7277], /* CJK Ideograph */ + [0x7278, 0x7278], /* CJK Ideograph */ + [0x7279, 0x7279], /* CJK Ideograph */ + [0x727a, 0x727a], /* CJK Ideograph */ + [0x727b, 0x727b], /* CJK Ideograph */ + [0x727c, 0x727c], /* CJK Ideograph */ + [0x727d, 0x727d], /* CJK Ideograph */ + [0x727e, 0x727e], /* CJK Ideograph */ + [0x727f, 0x727f], /* CJK Ideograph */ + [0x7280, 0x7280], /* CJK Ideograph */ + [0x7281, 0x7281], /* CJK Ideograph */ + [0x7282, 0x7282], /* CJK Ideograph */ + [0x7283, 0x7283], /* CJK Ideograph */ + [0x7284, 0x7284], /* CJK Ideograph */ + [0x7285, 0x7285], /* CJK Ideograph */ + [0x7286, 0x7286], /* CJK Ideograph */ + [0x7287, 0x7287], /* CJK Ideograph */ + [0x7288, 0x7288], /* CJK Ideograph */ + [0x7289, 0x7289], /* CJK Ideograph */ + [0x728a, 0x728a], /* CJK Ideograph */ + [0x728b, 0x728b], /* CJK Ideograph */ + [0x728c, 0x728c], /* CJK Ideograph */ + [0x728d, 0x728d], /* CJK Ideograph */ + [0x728e, 0x728e], /* CJK Ideograph */ + [0x728f, 0x728f], /* CJK Ideograph */ + [0x7290, 0x7290], /* CJK Ideograph */ + [0x7291, 0x7291], /* CJK Ideograph */ + [0x7292, 0x7292], /* CJK Ideograph */ + [0x7293, 0x7293], /* CJK Ideograph */ + [0x7294, 0x7294], /* CJK Ideograph */ + [0x7295, 0x7295], /* CJK Ideograph */ + [0x7296, 0x7296], /* CJK Ideograph */ + [0x7297, 0x7297], /* CJK Ideograph */ + [0x7298, 0x7298], /* CJK Ideograph */ + [0x7299, 0x7299], /* CJK Ideograph */ + [0x729a, 0x729a], /* CJK Ideograph */ + [0x729b, 0x729b], /* CJK Ideograph */ + [0x729c, 0x729c], /* CJK Ideograph */ + [0x729d, 0x729d], /* CJK Ideograph */ + [0x729e, 0x729e], /* CJK Ideograph */ + [0x729f, 0x729f], /* CJK Ideograph */ + [0x72a0, 0x72a0], /* CJK Ideograph */ + [0x72a1, 0x72a1], /* CJK Ideograph */ + [0x72a2, 0x72a2], /* CJK Ideograph */ + [0x72a3, 0x72a3], /* CJK Ideograph */ + [0x72a4, 0x72a4], /* CJK Ideograph */ + [0x72a5, 0x72a5], /* CJK Ideograph */ + [0x72a6, 0x72a6], /* CJK Ideograph */ + [0x72a7, 0x72a7], /* CJK Ideograph */ + [0x72a8, 0x72a8], /* CJK Ideograph */ + [0x72a9, 0x72a9], /* CJK Ideograph */ + [0x72aa, 0x72aa], /* CJK Ideograph */ + [0x72ab, 0x72ab], /* CJK Ideograph */ + [0x72ac, 0x72ac], /* CJK Ideograph */ + [0x72ad, 0x72ad], /* CJK Ideograph */ + [0x72ae, 0x72ae], /* CJK Ideograph */ + [0x72af, 0x72af], /* CJK Ideograph */ + [0x72b0, 0x72b0], /* CJK Ideograph */ + [0x72b1, 0x72b1], /* CJK Ideograph */ + [0x72b2, 0x72b2], /* CJK Ideograph */ + [0x72b3, 0x72b3], /* CJK Ideograph */ + [0x72b4, 0x72b4], /* CJK Ideograph */ + [0x72b5, 0x72b5], /* CJK Ideograph */ + [0x72b6, 0x72b6], /* CJK Ideograph */ + [0x72b7, 0x72b7], /* CJK Ideograph */ + [0x72b8, 0x72b8], /* CJK Ideograph */ + [0x72b9, 0x72b9], /* CJK Ideograph */ + [0x72ba, 0x72ba], /* CJK Ideograph */ + [0x72bb, 0x72bb], /* CJK Ideograph */ + [0x72bc, 0x72bc], /* CJK Ideograph */ + [0x72bd, 0x72bd], /* CJK Ideograph */ + [0x72be, 0x72be], /* CJK Ideograph */ + [0x72bf, 0x72bf], /* CJK Ideograph */ + [0x72c0, 0x72c0], /* CJK Ideograph */ + [0x72c1, 0x72c1], /* CJK Ideograph */ + [0x72c2, 0x72c2], /* CJK Ideograph */ + [0x72c3, 0x72c3], /* CJK Ideograph */ + [0x72c4, 0x72c4], /* CJK Ideograph */ + [0x72c5, 0x72c5], /* CJK Ideograph */ + [0x72c6, 0x72c6], /* CJK Ideograph */ + [0x72c7, 0x72c7], /* CJK Ideograph */ + [0x72c8, 0x72c8], /* CJK Ideograph */ + [0x72c9, 0x72c9], /* CJK Ideograph */ + [0x72ca, 0x72ca], /* CJK Ideograph */ + [0x72cb, 0x72cb], /* CJK Ideograph */ + [0x72cc, 0x72cc], /* CJK Ideograph */ + [0x72cd, 0x72cd], /* CJK Ideograph */ + [0x72ce, 0x72ce], /* CJK Ideograph */ + [0x72cf, 0x72cf], /* CJK Ideograph */ + [0x72d0, 0x72d0], /* CJK Ideograph */ + [0x72d1, 0x72d1], /* CJK Ideograph */ + [0x72d2, 0x72d2], /* CJK Ideograph */ + [0x72d3, 0x72d3], /* CJK Ideograph */ + [0x72d4, 0x72d4], /* CJK Ideograph */ + [0x72d5, 0x72d5], /* CJK Ideograph */ + [0x72d6, 0x72d6], /* CJK Ideograph */ + [0x72d7, 0x72d7], /* CJK Ideograph */ + [0x72d8, 0x72d8], /* CJK Ideograph */ + [0x72d9, 0x72d9], /* CJK Ideograph */ + [0x72da, 0x72da], /* CJK Ideograph */ + [0x72db, 0x72db], /* CJK Ideograph */ + [0x72dc, 0x72dc], /* CJK Ideograph */ + [0x72dd, 0x72dd], /* CJK Ideograph */ + [0x72de, 0x72de], /* CJK Ideograph */ + [0x72df, 0x72df], /* CJK Ideograph */ + [0x72e0, 0x72e0], /* CJK Ideograph */ + [0x72e1, 0x72e1], /* CJK Ideograph */ + [0x72e2, 0x72e2], /* CJK Ideograph */ + [0x72e3, 0x72e3], /* CJK Ideograph */ + [0x72e4, 0x72e4], /* CJK Ideograph */ + [0x72e5, 0x72e5], /* CJK Ideograph */ + [0x72e6, 0x72e6], /* CJK Ideograph */ + [0x72e7, 0x72e7], /* CJK Ideograph */ + [0x72e8, 0x72e8], /* CJK Ideograph */ + [0x72e9, 0x72e9], /* CJK Ideograph */ + [0x72ea, 0x72ea], /* CJK Ideograph */ + [0x72eb, 0x72eb], /* CJK Ideograph */ + [0x72ec, 0x72ec], /* CJK Ideograph */ + [0x72ed, 0x72ed], /* CJK Ideograph */ + [0x72ee, 0x72ee], /* CJK Ideograph */ + [0x72ef, 0x72ef], /* CJK Ideograph */ + [0x72f0, 0x72f0], /* CJK Ideograph */ + [0x72f1, 0x72f1], /* CJK Ideograph */ + [0x72f2, 0x72f2], /* CJK Ideograph */ + [0x72f3, 0x72f3], /* CJK Ideograph */ + [0x72f4, 0x72f4], /* CJK Ideograph */ + [0x72f5, 0x72f5], /* CJK Ideograph */ + [0x72f6, 0x72f6], /* CJK Ideograph */ + [0x72f7, 0x72f7], /* CJK Ideograph */ + [0x72f8, 0x72f8], /* CJK Ideograph */ + [0x72f9, 0x72f9], /* CJK Ideograph */ + [0x72fa, 0x72fa], /* CJK Ideograph */ + [0x72fb, 0x72fb], /* CJK Ideograph */ + [0x72fc, 0x72fc], /* CJK Ideograph */ + [0x72fd, 0x72fd], /* CJK Ideograph */ + [0x72fe, 0x72fe], /* CJK Ideograph */ + [0x72ff, 0x72ff], /* CJK Ideograph */ + [0x7300, 0x7300], /* CJK Ideograph */ + [0x7301, 0x7301], /* CJK Ideograph */ + [0x7302, 0x7302], /* CJK Ideograph */ + [0x7303, 0x7303], /* CJK Ideograph */ + [0x7304, 0x7304], /* CJK Ideograph */ + [0x7305, 0x7305], /* CJK Ideograph */ + [0x7306, 0x7306], /* CJK Ideograph */ + [0x7307, 0x7307], /* CJK Ideograph */ + [0x7308, 0x7308], /* CJK Ideograph */ + [0x7309, 0x7309], /* CJK Ideograph */ + [0x730a, 0x730a], /* CJK Ideograph */ + [0x730b, 0x730b], /* CJK Ideograph */ + [0x730c, 0x730c], /* CJK Ideograph */ + [0x730d, 0x730d], /* CJK Ideograph */ + [0x730e, 0x730e], /* CJK Ideograph */ + [0x730f, 0x730f], /* CJK Ideograph */ + [0x7310, 0x7310], /* CJK Ideograph */ + [0x7311, 0x7311], /* CJK Ideograph */ + [0x7312, 0x7312], /* CJK Ideograph */ + [0x7313, 0x7313], /* CJK Ideograph */ + [0x7314, 0x7314], /* CJK Ideograph */ + [0x7315, 0x7315], /* CJK Ideograph */ + [0x7316, 0x7316], /* CJK Ideograph */ + [0x7317, 0x7317], /* CJK Ideograph */ + [0x7318, 0x7318], /* CJK Ideograph */ + [0x7319, 0x7319], /* CJK Ideograph */ + [0x731a, 0x731a], /* CJK Ideograph */ + [0x731b, 0x731b], /* CJK Ideograph */ + [0x731c, 0x731c], /* CJK Ideograph */ + [0x731d, 0x731d], /* CJK Ideograph */ + [0x731e, 0x731e], /* CJK Ideograph */ + [0x731f, 0x731f], /* CJK Ideograph */ + [0x7320, 0x7320], /* CJK Ideograph */ + [0x7321, 0x7321], /* CJK Ideograph */ + [0x7322, 0x7322], /* CJK Ideograph */ + [0x7323, 0x7323], /* CJK Ideograph */ + [0x7324, 0x7324], /* CJK Ideograph */ + [0x7325, 0x7325], /* CJK Ideograph */ + [0x7326, 0x7326], /* CJK Ideograph */ + [0x7327, 0x7327], /* CJK Ideograph */ + [0x7328, 0x7328], /* CJK Ideograph */ + [0x7329, 0x7329], /* CJK Ideograph */ + [0x732a, 0x732a], /* CJK Ideograph */ + [0x732b, 0x732b], /* CJK Ideograph */ + [0x732c, 0x732c], /* CJK Ideograph */ + [0x732d, 0x732d], /* CJK Ideograph */ + [0x732e, 0x732e], /* CJK Ideograph */ + [0x732f, 0x732f], /* CJK Ideograph */ + [0x7330, 0x7330], /* CJK Ideograph */ + [0x7331, 0x7331], /* CJK Ideograph */ + [0x7332, 0x7332], /* CJK Ideograph */ + [0x7333, 0x7333], /* CJK Ideograph */ + [0x7334, 0x7334], /* CJK Ideograph */ + [0x7335, 0x7335], /* CJK Ideograph */ + [0x7336, 0x7336], /* CJK Ideograph */ + [0x7337, 0x7337], /* CJK Ideograph */ + [0x7338, 0x7338], /* CJK Ideograph */ + [0x7339, 0x7339], /* CJK Ideograph */ + [0x733a, 0x733a], /* CJK Ideograph */ + [0x733b, 0x733b], /* CJK Ideograph */ + [0x733c, 0x733c], /* CJK Ideograph */ + [0x733d, 0x733d], /* CJK Ideograph */ + [0x733e, 0x733e], /* CJK Ideograph */ + [0x733f, 0x733f], /* CJK Ideograph */ + [0x7340, 0x7340], /* CJK Ideograph */ + [0x7341, 0x7341], /* CJK Ideograph */ + [0x7342, 0x7342], /* CJK Ideograph */ + [0x7343, 0x7343], /* CJK Ideograph */ + [0x7344, 0x7344], /* CJK Ideograph */ + [0x7345, 0x7345], /* CJK Ideograph */ + [0x7346, 0x7346], /* CJK Ideograph */ + [0x7347, 0x7347], /* CJK Ideograph */ + [0x7348, 0x7348], /* CJK Ideograph */ + [0x7349, 0x7349], /* CJK Ideograph */ + [0x734a, 0x734a], /* CJK Ideograph */ + [0x734b, 0x734b], /* CJK Ideograph */ + [0x734c, 0x734c], /* CJK Ideograph */ + [0x734d, 0x734d], /* CJK Ideograph */ + [0x734e, 0x734e], /* CJK Ideograph */ + [0x734f, 0x734f], /* CJK Ideograph */ + [0x7350, 0x7350], /* CJK Ideograph */ + [0x7351, 0x7351], /* CJK Ideograph */ + [0x7352, 0x7352], /* CJK Ideograph */ + [0x7353, 0x7353], /* CJK Ideograph */ + [0x7354, 0x7354], /* CJK Ideograph */ + [0x7355, 0x7355], /* CJK Ideograph */ + [0x7356, 0x7356], /* CJK Ideograph */ + [0x7357, 0x7357], /* CJK Ideograph */ + [0x7358, 0x7358], /* CJK Ideograph */ + [0x7359, 0x7359], /* CJK Ideograph */ + [0x735a, 0x735a], /* CJK Ideograph */ + [0x735b, 0x735b], /* CJK Ideograph */ + [0x735c, 0x735c], /* CJK Ideograph */ + [0x735d, 0x735d], /* CJK Ideograph */ + [0x735e, 0x735e], /* CJK Ideograph */ + [0x735f, 0x735f], /* CJK Ideograph */ + [0x7360, 0x7360], /* CJK Ideograph */ + [0x7361, 0x7361], /* CJK Ideograph */ + [0x7362, 0x7362], /* CJK Ideograph */ + [0x7363, 0x7363], /* CJK Ideograph */ + [0x7364, 0x7364], /* CJK Ideograph */ + [0x7365, 0x7365], /* CJK Ideograph */ + [0x7366, 0x7366], /* CJK Ideograph */ + [0x7367, 0x7367], /* CJK Ideograph */ + [0x7368, 0x7368], /* CJK Ideograph */ + [0x7369, 0x7369], /* CJK Ideograph */ + [0x736a, 0x736a], /* CJK Ideograph */ + [0x736b, 0x736b], /* CJK Ideograph */ + [0x736c, 0x736c], /* CJK Ideograph */ + [0x736d, 0x736d], /* CJK Ideograph */ + [0x736e, 0x736e], /* CJK Ideograph */ + [0x736f, 0x736f], /* CJK Ideograph */ + [0x7370, 0x7370], /* CJK Ideograph */ + [0x7371, 0x7371], /* CJK Ideograph */ + [0x7372, 0x7372], /* CJK Ideograph */ + [0x7373, 0x7373], /* CJK Ideograph */ + [0x7374, 0x7374], /* CJK Ideograph */ + [0x7375, 0x7375], /* CJK Ideograph */ + [0x7376, 0x7376], /* CJK Ideograph */ + [0x7377, 0x7377], /* CJK Ideograph */ + [0x7378, 0x7378], /* CJK Ideograph */ + [0x7379, 0x7379], /* CJK Ideograph */ + [0x737a, 0x737a], /* CJK Ideograph */ + [0x737b, 0x737b], /* CJK Ideograph */ + [0x737c, 0x737c], /* CJK Ideograph */ + [0x737d, 0x737d], /* CJK Ideograph */ + [0x737e, 0x737e], /* CJK Ideograph */ + [0x737f, 0x737f], /* CJK Ideograph */ + [0x7380, 0x7380], /* CJK Ideograph */ + [0x7381, 0x7381], /* CJK Ideograph */ + [0x7382, 0x7382], /* CJK Ideograph */ + [0x7383, 0x7383], /* CJK Ideograph */ + [0x7384, 0x7384], /* CJK Ideograph */ + [0x7385, 0x7385], /* CJK Ideograph */ + [0x7386, 0x7386], /* CJK Ideograph */ + [0x7387, 0x7387], /* CJK Ideograph */ + [0x7388, 0x7388], /* CJK Ideograph */ + [0x7389, 0x7389], /* CJK Ideograph */ + [0x738a, 0x738a], /* CJK Ideograph */ + [0x738b, 0x738b], /* CJK Ideograph */ + [0x738c, 0x738c], /* CJK Ideograph */ + [0x738d, 0x738d], /* CJK Ideograph */ + [0x738e, 0x738e], /* CJK Ideograph */ + [0x738f, 0x738f], /* CJK Ideograph */ + [0x7390, 0x7390], /* CJK Ideograph */ + [0x7391, 0x7391], /* CJK Ideograph */ + [0x7392, 0x7392], /* CJK Ideograph */ + [0x7393, 0x7393], /* CJK Ideograph */ + [0x7394, 0x7394], /* CJK Ideograph */ + [0x7395, 0x7395], /* CJK Ideograph */ + [0x7396, 0x7396], /* CJK Ideograph */ + [0x7397, 0x7397], /* CJK Ideograph */ + [0x7398, 0x7398], /* CJK Ideograph */ + [0x7399, 0x7399], /* CJK Ideograph */ + [0x739a, 0x739a], /* CJK Ideograph */ + [0x739b, 0x739b], /* CJK Ideograph */ + [0x739c, 0x739c], /* CJK Ideograph */ + [0x739d, 0x739d], /* CJK Ideograph */ + [0x739e, 0x739e], /* CJK Ideograph */ + [0x739f, 0x739f], /* CJK Ideograph */ + [0x73a0, 0x73a0], /* CJK Ideograph */ + [0x73a1, 0x73a1], /* CJK Ideograph */ + [0x73a2, 0x73a2], /* CJK Ideograph */ + [0x73a3, 0x73a3], /* CJK Ideograph */ + [0x73a4, 0x73a4], /* CJK Ideograph */ + [0x73a5, 0x73a5], /* CJK Ideograph */ + [0x73a6, 0x73a6], /* CJK Ideograph */ + [0x73a7, 0x73a7], /* CJK Ideograph */ + [0x73a8, 0x73a8], /* CJK Ideograph */ + [0x73a9, 0x73a9], /* CJK Ideograph */ + [0x73aa, 0x73aa], /* CJK Ideograph */ + [0x73ab, 0x73ab], /* CJK Ideograph */ + [0x73ac, 0x73ac], /* CJK Ideograph */ + [0x73ad, 0x73ad], /* CJK Ideograph */ + [0x73ae, 0x73ae], /* CJK Ideograph */ + [0x73af, 0x73af], /* CJK Ideograph */ + [0x73b0, 0x73b0], /* CJK Ideograph */ + [0x73b1, 0x73b1], /* CJK Ideograph */ + [0x73b2, 0x73b2], /* CJK Ideograph */ + [0x73b3, 0x73b3], /* CJK Ideograph */ + [0x73b4, 0x73b4], /* CJK Ideograph */ + [0x73b5, 0x73b5], /* CJK Ideograph */ + [0x73b6, 0x73b6], /* CJK Ideograph */ + [0x73b7, 0x73b7], /* CJK Ideograph */ + [0x73b8, 0x73b8], /* CJK Ideograph */ + [0x73b9, 0x73b9], /* CJK Ideograph */ + [0x73ba, 0x73ba], /* CJK Ideograph */ + [0x73bb, 0x73bb], /* CJK Ideograph */ + [0x73bc, 0x73bc], /* CJK Ideograph */ + [0x73bd, 0x73bd], /* CJK Ideograph */ + [0x73be, 0x73be], /* CJK Ideograph */ + [0x73bf, 0x73bf], /* CJK Ideograph */ + [0x73c0, 0x73c0], /* CJK Ideograph */ + [0x73c1, 0x73c1], /* CJK Ideograph */ + [0x73c2, 0x73c2], /* CJK Ideograph */ + [0x73c3, 0x73c3], /* CJK Ideograph */ + [0x73c4, 0x73c4], /* CJK Ideograph */ + [0x73c5, 0x73c5], /* CJK Ideograph */ + [0x73c6, 0x73c6], /* CJK Ideograph */ + [0x73c7, 0x73c7], /* CJK Ideograph */ + [0x73c8, 0x73c8], /* CJK Ideograph */ + [0x73c9, 0x73c9], /* CJK Ideograph */ + [0x73ca, 0x73ca], /* CJK Ideograph */ + [0x73cb, 0x73cb], /* CJK Ideograph */ + [0x73cc, 0x73cc], /* CJK Ideograph */ + [0x73cd, 0x73cd], /* CJK Ideograph */ + [0x73ce, 0x73ce], /* CJK Ideograph */ + [0x73cf, 0x73cf], /* CJK Ideograph */ + [0x73d0, 0x73d0], /* CJK Ideograph */ + [0x73d1, 0x73d1], /* CJK Ideograph */ + [0x73d2, 0x73d2], /* CJK Ideograph */ + [0x73d3, 0x73d3], /* CJK Ideograph */ + [0x73d4, 0x73d4], /* CJK Ideograph */ + [0x73d5, 0x73d5], /* CJK Ideograph */ + [0x73d6, 0x73d6], /* CJK Ideograph */ + [0x73d7, 0x73d7], /* CJK Ideograph */ + [0x73d8, 0x73d8], /* CJK Ideograph */ + [0x73d9, 0x73d9], /* CJK Ideograph */ + [0x73da, 0x73da], /* CJK Ideograph */ + [0x73db, 0x73db], /* CJK Ideograph */ + [0x73dc, 0x73dc], /* CJK Ideograph */ + [0x73dd, 0x73dd], /* CJK Ideograph */ + [0x73de, 0x73de], /* CJK Ideograph */ + [0x73df, 0x73df], /* CJK Ideograph */ + [0x73e0, 0x73e0], /* CJK Ideograph */ + [0x73e1, 0x73e1], /* CJK Ideograph */ + [0x73e2, 0x73e2], /* CJK Ideograph */ + [0x73e3, 0x73e3], /* CJK Ideograph */ + [0x73e4, 0x73e4], /* CJK Ideograph */ + [0x73e5, 0x73e5], /* CJK Ideograph */ + [0x73e6, 0x73e6], /* CJK Ideograph */ + [0x73e7, 0x73e7], /* CJK Ideograph */ + [0x73e8, 0x73e8], /* CJK Ideograph */ + [0x73e9, 0x73e9], /* CJK Ideograph */ + [0x73ea, 0x73ea], /* CJK Ideograph */ + [0x73eb, 0x73eb], /* CJK Ideograph */ + [0x73ec, 0x73ec], /* CJK Ideograph */ + [0x73ed, 0x73ed], /* CJK Ideograph */ + [0x73ee, 0x73ee], /* CJK Ideograph */ + [0x73ef, 0x73ef], /* CJK Ideograph */ + [0x73f0, 0x73f0], /* CJK Ideograph */ + [0x73f1, 0x73f1], /* CJK Ideograph */ + [0x73f2, 0x73f2], /* CJK Ideograph */ + [0x73f3, 0x73f3], /* CJK Ideograph */ + [0x73f4, 0x73f4], /* CJK Ideograph */ + [0x73f5, 0x73f5], /* CJK Ideograph */ + [0x73f6, 0x73f6], /* CJK Ideograph */ + [0x73f7, 0x73f7], /* CJK Ideograph */ + [0x73f8, 0x73f8], /* CJK Ideograph */ + [0x73f9, 0x73f9], /* CJK Ideograph */ + [0x73fa, 0x73fa], /* CJK Ideograph */ + [0x73fb, 0x73fb], /* CJK Ideograph */ + [0x73fc, 0x73fc], /* CJK Ideograph */ + [0x73fd, 0x73fd], /* CJK Ideograph */ + [0x73fe, 0x73fe], /* CJK Ideograph */ + [0x73ff, 0x73ff], /* CJK Ideograph */ + [0x7400, 0x7400], /* CJK Ideograph */ + [0x7401, 0x7401], /* CJK Ideograph */ + [0x7402, 0x7402], /* CJK Ideograph */ + [0x7403, 0x7403], /* CJK Ideograph */ + [0x7404, 0x7404], /* CJK Ideograph */ + [0x7405, 0x7405], /* CJK Ideograph */ + [0x7406, 0x7406], /* CJK Ideograph */ + [0x7407, 0x7407], /* CJK Ideograph */ + [0x7408, 0x7408], /* CJK Ideograph */ + [0x7409, 0x7409], /* CJK Ideograph */ + [0x740a, 0x740a], /* CJK Ideograph */ + [0x740b, 0x740b], /* CJK Ideograph */ + [0x740c, 0x740c], /* CJK Ideograph */ + [0x740d, 0x740d], /* CJK Ideograph */ + [0x740e, 0x740e], /* CJK Ideograph */ + [0x740f, 0x740f], /* CJK Ideograph */ + [0x7410, 0x7410], /* CJK Ideograph */ + [0x7411, 0x7411], /* CJK Ideograph */ + [0x7412, 0x7412], /* CJK Ideograph */ + [0x7413, 0x7413], /* CJK Ideograph */ + [0x7414, 0x7414], /* CJK Ideograph */ + [0x7415, 0x7415], /* CJK Ideograph */ + [0x7416, 0x7416], /* CJK Ideograph */ + [0x7417, 0x7417], /* CJK Ideograph */ + [0x7418, 0x7418], /* CJK Ideograph */ + [0x7419, 0x7419], /* CJK Ideograph */ + [0x741a, 0x741a], /* CJK Ideograph */ + [0x741b, 0x741b], /* CJK Ideograph */ + [0x741c, 0x741c], /* CJK Ideograph */ + [0x741d, 0x741d], /* CJK Ideograph */ + [0x741e, 0x741e], /* CJK Ideograph */ + [0x741f, 0x741f], /* CJK Ideograph */ + [0x7420, 0x7420], /* CJK Ideograph */ + [0x7421, 0x7421], /* CJK Ideograph */ + [0x7422, 0x7422], /* CJK Ideograph */ + [0x7423, 0x7423], /* CJK Ideograph */ + [0x7424, 0x7424], /* CJK Ideograph */ + [0x7425, 0x7425], /* CJK Ideograph */ + [0x7426, 0x7426], /* CJK Ideograph */ + [0x7427, 0x7427], /* CJK Ideograph */ + [0x7428, 0x7428], /* CJK Ideograph */ + [0x7429, 0x7429], /* CJK Ideograph */ + [0x742a, 0x742a], /* CJK Ideograph */ + [0x742b, 0x742b], /* CJK Ideograph */ + [0x742c, 0x742c], /* CJK Ideograph */ + [0x742d, 0x742d], /* CJK Ideograph */ + [0x742e, 0x742e], /* CJK Ideograph */ + [0x742f, 0x742f], /* CJK Ideograph */ + [0x7430, 0x7430], /* CJK Ideograph */ + [0x7431, 0x7431], /* CJK Ideograph */ + [0x7432, 0x7432], /* CJK Ideograph */ + [0x7433, 0x7433], /* CJK Ideograph */ + [0x7434, 0x7434], /* CJK Ideograph */ + [0x7435, 0x7435], /* CJK Ideograph */ + [0x7436, 0x7436], /* CJK Ideograph */ + [0x7437, 0x7437], /* CJK Ideograph */ + [0x7438, 0x7438], /* CJK Ideograph */ + [0x7439, 0x7439], /* CJK Ideograph */ + [0x743a, 0x743a], /* CJK Ideograph */ + [0x743b, 0x743b], /* CJK Ideograph */ + [0x743c, 0x743c], /* CJK Ideograph */ + [0x743d, 0x743d], /* CJK Ideograph */ + [0x743e, 0x743e], /* CJK Ideograph */ + [0x743f, 0x743f], /* CJK Ideograph */ + [0x7440, 0x7440], /* CJK Ideograph */ + [0x7441, 0x7441], /* CJK Ideograph */ + [0x7442, 0x7442], /* CJK Ideograph */ + [0x7443, 0x7443], /* CJK Ideograph */ + [0x7444, 0x7444], /* CJK Ideograph */ + [0x7445, 0x7445], /* CJK Ideograph */ + [0x7446, 0x7446], /* CJK Ideograph */ + [0x7447, 0x7447], /* CJK Ideograph */ + [0x7448, 0x7448], /* CJK Ideograph */ + [0x7449, 0x7449], /* CJK Ideograph */ + [0x744a, 0x744a], /* CJK Ideograph */ + [0x744b, 0x744b], /* CJK Ideograph */ + [0x744c, 0x744c], /* CJK Ideograph */ + [0x744d, 0x744d], /* CJK Ideograph */ + [0x744e, 0x744e], /* CJK Ideograph */ + [0x744f, 0x744f], /* CJK Ideograph */ + [0x7450, 0x7450], /* CJK Ideograph */ + [0x7451, 0x7451], /* CJK Ideograph */ + [0x7452, 0x7452], /* CJK Ideograph */ + [0x7453, 0x7453], /* CJK Ideograph */ + [0x7454, 0x7454], /* CJK Ideograph */ + [0x7455, 0x7455], /* CJK Ideograph */ + [0x7456, 0x7456], /* CJK Ideograph */ + [0x7457, 0x7457], /* CJK Ideograph */ + [0x7458, 0x7458], /* CJK Ideograph */ + [0x7459, 0x7459], /* CJK Ideograph */ + [0x745a, 0x745a], /* CJK Ideograph */ + [0x745b, 0x745b], /* CJK Ideograph */ + [0x745c, 0x745c], /* CJK Ideograph */ + [0x745d, 0x745d], /* CJK Ideograph */ + [0x745e, 0x745e], /* CJK Ideograph */ + [0x745f, 0x745f], /* CJK Ideograph */ + [0x7460, 0x7460], /* CJK Ideograph */ + [0x7461, 0x7461], /* CJK Ideograph */ + [0x7462, 0x7462], /* CJK Ideograph */ + [0x7463, 0x7463], /* CJK Ideograph */ + [0x7464, 0x7464], /* CJK Ideograph */ + [0x7465, 0x7465], /* CJK Ideograph */ + [0x7466, 0x7466], /* CJK Ideograph */ + [0x7467, 0x7467], /* CJK Ideograph */ + [0x7468, 0x7468], /* CJK Ideograph */ + [0x7469, 0x7469], /* CJK Ideograph */ + [0x746a, 0x746a], /* CJK Ideograph */ + [0x746b, 0x746b], /* CJK Ideograph */ + [0x746c, 0x746c], /* CJK Ideograph */ + [0x746d, 0x746d], /* CJK Ideograph */ + [0x746e, 0x746e], /* CJK Ideograph */ + [0x746f, 0x746f], /* CJK Ideograph */ + [0x7470, 0x7470], /* CJK Ideograph */ + [0x7471, 0x7471], /* CJK Ideograph */ + [0x7472, 0x7472], /* CJK Ideograph */ + [0x7473, 0x7473], /* CJK Ideograph */ + [0x7474, 0x7474], /* CJK Ideograph */ + [0x7475, 0x7475], /* CJK Ideograph */ + [0x7476, 0x7476], /* CJK Ideograph */ + [0x7477, 0x7477], /* CJK Ideograph */ + [0x7478, 0x7478], /* CJK Ideograph */ + [0x7479, 0x7479], /* CJK Ideograph */ + [0x747a, 0x747a], /* CJK Ideograph */ + [0x747b, 0x747b], /* CJK Ideograph */ + [0x747c, 0x747c], /* CJK Ideograph */ + [0x747d, 0x747d], /* CJK Ideograph */ + [0x747e, 0x747e], /* CJK Ideograph */ + [0x747f, 0x747f], /* CJK Ideograph */ + [0x7480, 0x7480], /* CJK Ideograph */ + [0x7481, 0x7481], /* CJK Ideograph */ + [0x7482, 0x7482], /* CJK Ideograph */ + [0x7483, 0x7483], /* CJK Ideograph */ + [0x7484, 0x7484], /* CJK Ideograph */ + [0x7485, 0x7485], /* CJK Ideograph */ + [0x7486, 0x7486], /* CJK Ideograph */ + [0x7487, 0x7487], /* CJK Ideograph */ + [0x7488, 0x7488], /* CJK Ideograph */ + [0x7489, 0x7489], /* CJK Ideograph */ + [0x748a, 0x748a], /* CJK Ideograph */ + [0x748b, 0x748b], /* CJK Ideograph */ + [0x748c, 0x748c], /* CJK Ideograph */ + [0x748d, 0x748d], /* CJK Ideograph */ + [0x748e, 0x748e], /* CJK Ideograph */ + [0x748f, 0x748f], /* CJK Ideograph */ + [0x7490, 0x7490], /* CJK Ideograph */ + [0x7491, 0x7491], /* CJK Ideograph */ + [0x7492, 0x7492], /* CJK Ideograph */ + [0x7493, 0x7493], /* CJK Ideograph */ + [0x7494, 0x7494], /* CJK Ideograph */ + [0x7495, 0x7495], /* CJK Ideograph */ + [0x7496, 0x7496], /* CJK Ideograph */ + [0x7497, 0x7497], /* CJK Ideograph */ + [0x7498, 0x7498], /* CJK Ideograph */ + [0x7499, 0x7499], /* CJK Ideograph */ + [0x749a, 0x749a], /* CJK Ideograph */ + [0x749b, 0x749b], /* CJK Ideograph */ + [0x749c, 0x749c], /* CJK Ideograph */ + [0x749d, 0x749d], /* CJK Ideograph */ + [0x749e, 0x749e], /* CJK Ideograph */ + [0x749f, 0x749f], /* CJK Ideograph */ + [0x74a0, 0x74a0], /* CJK Ideograph */ + [0x74a1, 0x74a1], /* CJK Ideograph */ + [0x74a2, 0x74a2], /* CJK Ideograph */ + [0x74a3, 0x74a3], /* CJK Ideograph */ + [0x74a4, 0x74a4], /* CJK Ideograph */ + [0x74a5, 0x74a5], /* CJK Ideograph */ + [0x74a6, 0x74a6], /* CJK Ideograph */ + [0x74a7, 0x74a7], /* CJK Ideograph */ + [0x74a8, 0x74a8], /* CJK Ideograph */ + [0x74a9, 0x74a9], /* CJK Ideograph */ + [0x74aa, 0x74aa], /* CJK Ideograph */ + [0x74ab, 0x74ab], /* CJK Ideograph */ + [0x74ac, 0x74ac], /* CJK Ideograph */ + [0x74ad, 0x74ad], /* CJK Ideograph */ + [0x74ae, 0x74ae], /* CJK Ideograph */ + [0x74af, 0x74af], /* CJK Ideograph */ + [0x74b0, 0x74b0], /* CJK Ideograph */ + [0x74b1, 0x74b1], /* CJK Ideograph */ + [0x74b2, 0x74b2], /* CJK Ideograph */ + [0x74b3, 0x74b3], /* CJK Ideograph */ + [0x74b4, 0x74b4], /* CJK Ideograph */ + [0x74b5, 0x74b5], /* CJK Ideograph */ + [0x74b6, 0x74b6], /* CJK Ideograph */ + [0x74b7, 0x74b7], /* CJK Ideograph */ + [0x74b8, 0x74b8], /* CJK Ideograph */ + [0x74b9, 0x74b9], /* CJK Ideograph */ + [0x74ba, 0x74ba], /* CJK Ideograph */ + [0x74bb, 0x74bb], /* CJK Ideograph */ + [0x74bc, 0x74bc], /* CJK Ideograph */ + [0x74bd, 0x74bd], /* CJK Ideograph */ + [0x74be, 0x74be], /* CJK Ideograph */ + [0x74bf, 0x74bf], /* CJK Ideograph */ + [0x74c0, 0x74c0], /* CJK Ideograph */ + [0x74c1, 0x74c1], /* CJK Ideograph */ + [0x74c2, 0x74c2], /* CJK Ideograph */ + [0x74c3, 0x74c3], /* CJK Ideograph */ + [0x74c4, 0x74c4], /* CJK Ideograph */ + [0x74c5, 0x74c5], /* CJK Ideograph */ + [0x74c6, 0x74c6], /* CJK Ideograph */ + [0x74c7, 0x74c7], /* CJK Ideograph */ + [0x74c8, 0x74c8], /* CJK Ideograph */ + [0x74c9, 0x74c9], /* CJK Ideograph */ + [0x74ca, 0x74ca], /* CJK Ideograph */ + [0x74cb, 0x74cb], /* CJK Ideograph */ + [0x74cc, 0x74cc], /* CJK Ideograph */ + [0x74cd, 0x74cd], /* CJK Ideograph */ + [0x74ce, 0x74ce], /* CJK Ideograph */ + [0x74cf, 0x74cf], /* CJK Ideograph */ + [0x74d0, 0x74d0], /* CJK Ideograph */ + [0x74d1, 0x74d1], /* CJK Ideograph */ + [0x74d2, 0x74d2], /* CJK Ideograph */ + [0x74d3, 0x74d3], /* CJK Ideograph */ + [0x74d4, 0x74d4], /* CJK Ideograph */ + [0x74d5, 0x74d5], /* CJK Ideograph */ + [0x74d6, 0x74d6], /* CJK Ideograph */ + [0x74d7, 0x74d7], /* CJK Ideograph */ + [0x74d8, 0x74d8], /* CJK Ideograph */ + [0x74d9, 0x74d9], /* CJK Ideograph */ + [0x74da, 0x74da], /* CJK Ideograph */ + [0x74db, 0x74db], /* CJK Ideograph */ + [0x74dc, 0x74dc], /* CJK Ideograph */ + [0x74dd, 0x74dd], /* CJK Ideograph */ + [0x74de, 0x74de], /* CJK Ideograph */ + [0x74df, 0x74df], /* CJK Ideograph */ + [0x74e0, 0x74e0], /* CJK Ideograph */ + [0x74e1, 0x74e1], /* CJK Ideograph */ + [0x74e2, 0x74e2], /* CJK Ideograph */ + [0x74e3, 0x74e3], /* CJK Ideograph */ + [0x74e4, 0x74e4], /* CJK Ideograph */ + [0x74e5, 0x74e5], /* CJK Ideograph */ + [0x74e6, 0x74e6], /* CJK Ideograph */ + [0x74e7, 0x74e7], /* CJK Ideograph */ + [0x74e8, 0x74e8], /* CJK Ideograph */ + [0x74e9, 0x74e9], /* CJK Ideograph */ + [0x74ea, 0x74ea], /* CJK Ideograph */ + [0x74eb, 0x74eb], /* CJK Ideograph */ + [0x74ec, 0x74ec], /* CJK Ideograph */ + [0x74ed, 0x74ed], /* CJK Ideograph */ + [0x74ee, 0x74ee], /* CJK Ideograph */ + [0x74ef, 0x74ef], /* CJK Ideograph */ + [0x74f0, 0x74f0], /* CJK Ideograph */ + [0x74f1, 0x74f1], /* CJK Ideograph */ + [0x74f2, 0x74f2], /* CJK Ideograph */ + [0x74f3, 0x74f3], /* CJK Ideograph */ + [0x74f4, 0x74f4], /* CJK Ideograph */ + [0x74f5, 0x74f5], /* CJK Ideograph */ + [0x74f6, 0x74f6], /* CJK Ideograph */ + [0x74f7, 0x74f7], /* CJK Ideograph */ + [0x74f8, 0x74f8], /* CJK Ideograph */ + [0x74f9, 0x74f9], /* CJK Ideograph */ + [0x74fa, 0x74fa], /* CJK Ideograph */ + [0x74fb, 0x74fb], /* CJK Ideograph */ + [0x74fc, 0x74fc], /* CJK Ideograph */ + [0x74fd, 0x74fd], /* CJK Ideograph */ + [0x74fe, 0x74fe], /* CJK Ideograph */ + [0x74ff, 0x74ff], /* CJK Ideograph */ + [0x7500, 0x7500], /* CJK Ideograph */ + [0x7501, 0x7501], /* CJK Ideograph */ + [0x7502, 0x7502], /* CJK Ideograph */ + [0x7503, 0x7503], /* CJK Ideograph */ + [0x7504, 0x7504], /* CJK Ideograph */ + [0x7505, 0x7505], /* CJK Ideograph */ + [0x7506, 0x7506], /* CJK Ideograph */ + [0x7507, 0x7507], /* CJK Ideograph */ + [0x7508, 0x7508], /* CJK Ideograph */ + [0x7509, 0x7509], /* CJK Ideograph */ + [0x750a, 0x750a], /* CJK Ideograph */ + [0x750b, 0x750b], /* CJK Ideograph */ + [0x750c, 0x750c], /* CJK Ideograph */ + [0x750d, 0x750d], /* CJK Ideograph */ + [0x750e, 0x750e], /* CJK Ideograph */ + [0x750f, 0x750f], /* CJK Ideograph */ + [0x7510, 0x7510], /* CJK Ideograph */ + [0x7511, 0x7511], /* CJK Ideograph */ + [0x7512, 0x7512], /* CJK Ideograph */ + [0x7513, 0x7513], /* CJK Ideograph */ + [0x7514, 0x7514], /* CJK Ideograph */ + [0x7515, 0x7515], /* CJK Ideograph */ + [0x7516, 0x7516], /* CJK Ideograph */ + [0x7517, 0x7517], /* CJK Ideograph */ + [0x7518, 0x7518], /* CJK Ideograph */ + [0x7519, 0x7519], /* CJK Ideograph */ + [0x751a, 0x751a], /* CJK Ideograph */ + [0x751b, 0x751b], /* CJK Ideograph */ + [0x751c, 0x751c], /* CJK Ideograph */ + [0x751d, 0x751d], /* CJK Ideograph */ + [0x751e, 0x751e], /* CJK Ideograph */ + [0x751f, 0x751f], /* CJK Ideograph */ + [0x7520, 0x7520], /* CJK Ideograph */ + [0x7521, 0x7521], /* CJK Ideograph */ + [0x7522, 0x7522], /* CJK Ideograph */ + [0x7523, 0x7523], /* CJK Ideograph */ + [0x7524, 0x7524], /* CJK Ideograph */ + [0x7525, 0x7525], /* CJK Ideograph */ + [0x7526, 0x7526], /* CJK Ideograph */ + [0x7527, 0x7527], /* CJK Ideograph */ + [0x7528, 0x7528], /* CJK Ideograph */ + [0x7529, 0x7529], /* CJK Ideograph */ + [0x752a, 0x752a], /* CJK Ideograph */ + [0x752b, 0x752b], /* CJK Ideograph */ + [0x752c, 0x752c], /* CJK Ideograph */ + [0x752d, 0x752d], /* CJK Ideograph */ + [0x752e, 0x752e], /* CJK Ideograph */ + [0x752f, 0x752f], /* CJK Ideograph */ + [0x7530, 0x7530], /* CJK Ideograph */ + [0x7531, 0x7531], /* CJK Ideograph */ + [0x7532, 0x7532], /* CJK Ideograph */ + [0x7533, 0x7533], /* CJK Ideograph */ + [0x7534, 0x7534], /* CJK Ideograph */ + [0x7535, 0x7535], /* CJK Ideograph */ + [0x7536, 0x7536], /* CJK Ideograph */ + [0x7537, 0x7537], /* CJK Ideograph */ + [0x7538, 0x7538], /* CJK Ideograph */ + [0x7539, 0x7539], /* CJK Ideograph */ + [0x753a, 0x753a], /* CJK Ideograph */ + [0x753b, 0x753b], /* CJK Ideograph */ + [0x753c, 0x753c], /* CJK Ideograph */ + [0x753d, 0x753d], /* CJK Ideograph */ + [0x753e, 0x753e], /* CJK Ideograph */ + [0x753f, 0x753f], /* CJK Ideograph */ + [0x7540, 0x7540], /* CJK Ideograph */ + [0x7541, 0x7541], /* CJK Ideograph */ + [0x7542, 0x7542], /* CJK Ideograph */ + [0x7543, 0x7543], /* CJK Ideograph */ + [0x7544, 0x7544], /* CJK Ideograph */ + [0x7545, 0x7545], /* CJK Ideograph */ + [0x7546, 0x7546], /* CJK Ideograph */ + [0x7547, 0x7547], /* CJK Ideograph */ + [0x7548, 0x7548], /* CJK Ideograph */ + [0x7549, 0x7549], /* CJK Ideograph */ + [0x754a, 0x754a], /* CJK Ideograph */ + [0x754b, 0x754b], /* CJK Ideograph */ + [0x754c, 0x754c], /* CJK Ideograph */ + [0x754d, 0x754d], /* CJK Ideograph */ + [0x754e, 0x754e], /* CJK Ideograph */ + [0x754f, 0x754f], /* CJK Ideograph */ + [0x7550, 0x7550], /* CJK Ideograph */ + [0x7551, 0x7551], /* CJK Ideograph */ + [0x7552, 0x7552], /* CJK Ideograph */ + [0x7553, 0x7553], /* CJK Ideograph */ + [0x7554, 0x7554], /* CJK Ideograph */ + [0x7555, 0x7555], /* CJK Ideograph */ + [0x7556, 0x7556], /* CJK Ideograph */ + [0x7557, 0x7557], /* CJK Ideograph */ + [0x7558, 0x7558], /* CJK Ideograph */ + [0x7559, 0x7559], /* CJK Ideograph */ + [0x755a, 0x755a], /* CJK Ideograph */ + [0x755b, 0x755b], /* CJK Ideograph */ + [0x755c, 0x755c], /* CJK Ideograph */ + [0x755d, 0x755d], /* CJK Ideograph */ + [0x755e, 0x755e], /* CJK Ideograph */ + [0x755f, 0x755f], /* CJK Ideograph */ + [0x7560, 0x7560], /* CJK Ideograph */ + [0x7561, 0x7561], /* CJK Ideograph */ + [0x7562, 0x7562], /* CJK Ideograph */ + [0x7563, 0x7563], /* CJK Ideograph */ + [0x7564, 0x7564], /* CJK Ideograph */ + [0x7565, 0x7565], /* CJK Ideograph */ + [0x7566, 0x7566], /* CJK Ideograph */ + [0x7567, 0x7567], /* CJK Ideograph */ + [0x7568, 0x7568], /* CJK Ideograph */ + [0x7569, 0x7569], /* CJK Ideograph */ + [0x756a, 0x756a], /* CJK Ideograph */ + [0x756b, 0x756b], /* CJK Ideograph */ + [0x756c, 0x756c], /* CJK Ideograph */ + [0x756d, 0x756d], /* CJK Ideograph */ + [0x756e, 0x756e], /* CJK Ideograph */ + [0x756f, 0x756f], /* CJK Ideograph */ + [0x7570, 0x7570], /* CJK Ideograph */ + [0x7571, 0x7571], /* CJK Ideograph */ + [0x7572, 0x7572], /* CJK Ideograph */ + [0x7573, 0x7573], /* CJK Ideograph */ + [0x7574, 0x7574], /* CJK Ideograph */ + [0x7575, 0x7575], /* CJK Ideograph */ + [0x7576, 0x7576], /* CJK Ideograph */ + [0x7577, 0x7577], /* CJK Ideograph */ + [0x7578, 0x7578], /* CJK Ideograph */ + [0x7579, 0x7579], /* CJK Ideograph */ + [0x757a, 0x757a], /* CJK Ideograph */ + [0x757b, 0x757b], /* CJK Ideograph */ + [0x757c, 0x757c], /* CJK Ideograph */ + [0x757d, 0x757d], /* CJK Ideograph */ + [0x757e, 0x757e], /* CJK Ideograph */ + [0x757f, 0x757f], /* CJK Ideograph */ + [0x7580, 0x7580], /* CJK Ideograph */ + [0x7581, 0x7581], /* CJK Ideograph */ + [0x7582, 0x7582], /* CJK Ideograph */ + [0x7583, 0x7583], /* CJK Ideograph */ + [0x7584, 0x7584], /* CJK Ideograph */ + [0x7585, 0x7585], /* CJK Ideograph */ + [0x7586, 0x7586], /* CJK Ideograph */ + [0x7587, 0x7587], /* CJK Ideograph */ + [0x7588, 0x7588], /* CJK Ideograph */ + [0x7589, 0x7589], /* CJK Ideograph */ + [0x758a, 0x758a], /* CJK Ideograph */ + [0x758b, 0x758b], /* CJK Ideograph */ + [0x758c, 0x758c], /* CJK Ideograph */ + [0x758d, 0x758d], /* CJK Ideograph */ + [0x758e, 0x758e], /* CJK Ideograph */ + [0x758f, 0x758f], /* CJK Ideograph */ + [0x7590, 0x7590], /* CJK Ideograph */ + [0x7591, 0x7591], /* CJK Ideograph */ + [0x7592, 0x7592], /* CJK Ideograph */ + [0x7593, 0x7593], /* CJK Ideograph */ + [0x7594, 0x7594], /* CJK Ideograph */ + [0x7595, 0x7595], /* CJK Ideograph */ + [0x7596, 0x7596], /* CJK Ideograph */ + [0x7597, 0x7597], /* CJK Ideograph */ + [0x7598, 0x7598], /* CJK Ideograph */ + [0x7599, 0x7599], /* CJK Ideograph */ + [0x759a, 0x759a], /* CJK Ideograph */ + [0x759b, 0x759b], /* CJK Ideograph */ + [0x759c, 0x759c], /* CJK Ideograph */ + [0x759d, 0x759d], /* CJK Ideograph */ + [0x759e, 0x759e], /* CJK Ideograph */ + [0x759f, 0x759f], /* CJK Ideograph */ + [0x75a0, 0x75a0], /* CJK Ideograph */ + [0x75a1, 0x75a1], /* CJK Ideograph */ + [0x75a2, 0x75a2], /* CJK Ideograph */ + [0x75a3, 0x75a3], /* CJK Ideograph */ + [0x75a4, 0x75a4], /* CJK Ideograph */ + [0x75a5, 0x75a5], /* CJK Ideograph */ + [0x75a6, 0x75a6], /* CJK Ideograph */ + [0x75a7, 0x75a7], /* CJK Ideograph */ + [0x75a8, 0x75a8], /* CJK Ideograph */ + [0x75a9, 0x75a9], /* CJK Ideograph */ + [0x75aa, 0x75aa], /* CJK Ideograph */ + [0x75ab, 0x75ab], /* CJK Ideograph */ + [0x75ac, 0x75ac], /* CJK Ideograph */ + [0x75ad, 0x75ad], /* CJK Ideograph */ + [0x75ae, 0x75ae], /* CJK Ideograph */ + [0x75af, 0x75af], /* CJK Ideograph */ + [0x75b0, 0x75b0], /* CJK Ideograph */ + [0x75b1, 0x75b1], /* CJK Ideograph */ + [0x75b2, 0x75b2], /* CJK Ideograph */ + [0x75b3, 0x75b3], /* CJK Ideograph */ + [0x75b4, 0x75b4], /* CJK Ideograph */ + [0x75b5, 0x75b5], /* CJK Ideograph */ + [0x75b6, 0x75b6], /* CJK Ideograph */ + [0x75b7, 0x75b7], /* CJK Ideograph */ + [0x75b8, 0x75b8], /* CJK Ideograph */ + [0x75b9, 0x75b9], /* CJK Ideograph */ + [0x75ba, 0x75ba], /* CJK Ideograph */ + [0x75bb, 0x75bb], /* CJK Ideograph */ + [0x75bc, 0x75bc], /* CJK Ideograph */ + [0x75bd, 0x75bd], /* CJK Ideograph */ + [0x75be, 0x75be], /* CJK Ideograph */ + [0x75bf, 0x75bf], /* CJK Ideograph */ + [0x75c0, 0x75c0], /* CJK Ideograph */ + [0x75c1, 0x75c1], /* CJK Ideograph */ + [0x75c2, 0x75c2], /* CJK Ideograph */ + [0x75c3, 0x75c3], /* CJK Ideograph */ + [0x75c4, 0x75c4], /* CJK Ideograph */ + [0x75c5, 0x75c5], /* CJK Ideograph */ + [0x75c6, 0x75c6], /* CJK Ideograph */ + [0x75c7, 0x75c7], /* CJK Ideograph */ + [0x75c8, 0x75c8], /* CJK Ideograph */ + [0x75c9, 0x75c9], /* CJK Ideograph */ + [0x75ca, 0x75ca], /* CJK Ideograph */ + [0x75cb, 0x75cb], /* CJK Ideograph */ + [0x75cc, 0x75cc], /* CJK Ideograph */ + [0x75cd, 0x75cd], /* CJK Ideograph */ + [0x75ce, 0x75ce], /* CJK Ideograph */ + [0x75cf, 0x75cf], /* CJK Ideograph */ + [0x75d0, 0x75d0], /* CJK Ideograph */ + [0x75d1, 0x75d1], /* CJK Ideograph */ + [0x75d2, 0x75d2], /* CJK Ideograph */ + [0x75d3, 0x75d3], /* CJK Ideograph */ + [0x75d4, 0x75d4], /* CJK Ideograph */ + [0x75d5, 0x75d5], /* CJK Ideograph */ + [0x75d6, 0x75d6], /* CJK Ideograph */ + [0x75d7, 0x75d7], /* CJK Ideograph */ + [0x75d8, 0x75d8], /* CJK Ideograph */ + [0x75d9, 0x75d9], /* CJK Ideograph */ + [0x75da, 0x75da], /* CJK Ideograph */ + [0x75db, 0x75db], /* CJK Ideograph */ + [0x75dc, 0x75dc], /* CJK Ideograph */ + [0x75dd, 0x75dd], /* CJK Ideograph */ + [0x75de, 0x75de], /* CJK Ideograph */ + [0x75df, 0x75df], /* CJK Ideograph */ + [0x75e0, 0x75e0], /* CJK Ideograph */ + [0x75e1, 0x75e1], /* CJK Ideograph */ + [0x75e2, 0x75e2], /* CJK Ideograph */ + [0x75e3, 0x75e3], /* CJK Ideograph */ + [0x75e4, 0x75e4], /* CJK Ideograph */ + [0x75e5, 0x75e5], /* CJK Ideograph */ + [0x75e6, 0x75e6], /* CJK Ideograph */ + [0x75e7, 0x75e7], /* CJK Ideograph */ + [0x75e8, 0x75e8], /* CJK Ideograph */ + [0x75e9, 0x75e9], /* CJK Ideograph */ + [0x75ea, 0x75ea], /* CJK Ideograph */ + [0x75eb, 0x75eb], /* CJK Ideograph */ + [0x75ec, 0x75ec], /* CJK Ideograph */ + [0x75ed, 0x75ed], /* CJK Ideograph */ + [0x75ee, 0x75ee], /* CJK Ideograph */ + [0x75ef, 0x75ef], /* CJK Ideograph */ + [0x75f0, 0x75f0], /* CJK Ideograph */ + [0x75f1, 0x75f1], /* CJK Ideograph */ + [0x75f2, 0x75f2], /* CJK Ideograph */ + [0x75f3, 0x75f3], /* CJK Ideograph */ + [0x75f4, 0x75f4], /* CJK Ideograph */ + [0x75f5, 0x75f5], /* CJK Ideograph */ + [0x75f6, 0x75f6], /* CJK Ideograph */ + [0x75f7, 0x75f7], /* CJK Ideograph */ + [0x75f8, 0x75f8], /* CJK Ideograph */ + [0x75f9, 0x75f9], /* CJK Ideograph */ + [0x75fa, 0x75fa], /* CJK Ideograph */ + [0x75fb, 0x75fb], /* CJK Ideograph */ + [0x75fc, 0x75fc], /* CJK Ideograph */ + [0x75fd, 0x75fd], /* CJK Ideograph */ + [0x75fe, 0x75fe], /* CJK Ideograph */ + [0x75ff, 0x75ff], /* CJK Ideograph */ + [0x7600, 0x7600], /* CJK Ideograph */ + [0x7601, 0x7601], /* CJK Ideograph */ + [0x7602, 0x7602], /* CJK Ideograph */ + [0x7603, 0x7603], /* CJK Ideograph */ + [0x7604, 0x7604], /* CJK Ideograph */ + [0x7605, 0x7605], /* CJK Ideograph */ + [0x7606, 0x7606], /* CJK Ideograph */ + [0x7607, 0x7607], /* CJK Ideograph */ + [0x7608, 0x7608], /* CJK Ideograph */ + [0x7609, 0x7609], /* CJK Ideograph */ + [0x760a, 0x760a], /* CJK Ideograph */ + [0x760b, 0x760b], /* CJK Ideograph */ + [0x760c, 0x760c], /* CJK Ideograph */ + [0x760d, 0x760d], /* CJK Ideograph */ + [0x760e, 0x760e], /* CJK Ideograph */ + [0x760f, 0x760f], /* CJK Ideograph */ + [0x7610, 0x7610], /* CJK Ideograph */ + [0x7611, 0x7611], /* CJK Ideograph */ + [0x7612, 0x7612], /* CJK Ideograph */ + [0x7613, 0x7613], /* CJK Ideograph */ + [0x7614, 0x7614], /* CJK Ideograph */ + [0x7615, 0x7615], /* CJK Ideograph */ + [0x7616, 0x7616], /* CJK Ideograph */ + [0x7617, 0x7617], /* CJK Ideograph */ + [0x7618, 0x7618], /* CJK Ideograph */ + [0x7619, 0x7619], /* CJK Ideograph */ + [0x761a, 0x761a], /* CJK Ideograph */ + [0x761b, 0x761b], /* CJK Ideograph */ + [0x761c, 0x761c], /* CJK Ideograph */ + [0x761d, 0x761d], /* CJK Ideograph */ + [0x761e, 0x761e], /* CJK Ideograph */ + [0x761f, 0x761f], /* CJK Ideograph */ + [0x7620, 0x7620], /* CJK Ideograph */ + [0x7621, 0x7621], /* CJK Ideograph */ + [0x7622, 0x7622], /* CJK Ideograph */ + [0x7623, 0x7623], /* CJK Ideograph */ + [0x7624, 0x7624], /* CJK Ideograph */ + [0x7625, 0x7625], /* CJK Ideograph */ + [0x7626, 0x7626], /* CJK Ideograph */ + [0x7627, 0x7627], /* CJK Ideograph */ + [0x7628, 0x7628], /* CJK Ideograph */ + [0x7629, 0x7629], /* CJK Ideograph */ + [0x762a, 0x762a], /* CJK Ideograph */ + [0x762b, 0x762b], /* CJK Ideograph */ + [0x762c, 0x762c], /* CJK Ideograph */ + [0x762d, 0x762d], /* CJK Ideograph */ + [0x762e, 0x762e], /* CJK Ideograph */ + [0x762f, 0x762f], /* CJK Ideograph */ + [0x7630, 0x7630], /* CJK Ideograph */ + [0x7631, 0x7631], /* CJK Ideograph */ + [0x7632, 0x7632], /* CJK Ideograph */ + [0x7633, 0x7633], /* CJK Ideograph */ + [0x7634, 0x7634], /* CJK Ideograph */ + [0x7635, 0x7635], /* CJK Ideograph */ + [0x7636, 0x7636], /* CJK Ideograph */ + [0x7637, 0x7637], /* CJK Ideograph */ + [0x7638, 0x7638], /* CJK Ideograph */ + [0x7639, 0x7639], /* CJK Ideograph */ + [0x763a, 0x763a], /* CJK Ideograph */ + [0x763b, 0x763b], /* CJK Ideograph */ + [0x763c, 0x763c], /* CJK Ideograph */ + [0x763d, 0x763d], /* CJK Ideograph */ + [0x763e, 0x763e], /* CJK Ideograph */ + [0x763f, 0x763f], /* CJK Ideograph */ + [0x7640, 0x7640], /* CJK Ideograph */ + [0x7641, 0x7641], /* CJK Ideograph */ + [0x7642, 0x7642], /* CJK Ideograph */ + [0x7643, 0x7643], /* CJK Ideograph */ + [0x7644, 0x7644], /* CJK Ideograph */ + [0x7645, 0x7645], /* CJK Ideograph */ + [0x7646, 0x7646], /* CJK Ideograph */ + [0x7647, 0x7647], /* CJK Ideograph */ + [0x7648, 0x7648], /* CJK Ideograph */ + [0x7649, 0x7649], /* CJK Ideograph */ + [0x764a, 0x764a], /* CJK Ideograph */ + [0x764b, 0x764b], /* CJK Ideograph */ + [0x764c, 0x764c], /* CJK Ideograph */ + [0x764d, 0x764d], /* CJK Ideograph */ + [0x764e, 0x764e], /* CJK Ideograph */ + [0x764f, 0x764f], /* CJK Ideograph */ + [0x7650, 0x7650], /* CJK Ideograph */ + [0x7651, 0x7651], /* CJK Ideograph */ + [0x7652, 0x7652], /* CJK Ideograph */ + [0x7653, 0x7653], /* CJK Ideograph */ + [0x7654, 0x7654], /* CJK Ideograph */ + [0x7655, 0x7655], /* CJK Ideograph */ + [0x7656, 0x7656], /* CJK Ideograph */ + [0x7657, 0x7657], /* CJK Ideograph */ + [0x7658, 0x7658], /* CJK Ideograph */ + [0x7659, 0x7659], /* CJK Ideograph */ + [0x765a, 0x765a], /* CJK Ideograph */ + [0x765b, 0x765b], /* CJK Ideograph */ + [0x765c, 0x765c], /* CJK Ideograph */ + [0x765d, 0x765d], /* CJK Ideograph */ + [0x765e, 0x765e], /* CJK Ideograph */ + [0x765f, 0x765f], /* CJK Ideograph */ + [0x7660, 0x7660], /* CJK Ideograph */ + [0x7661, 0x7661], /* CJK Ideograph */ + [0x7662, 0x7662], /* CJK Ideograph */ + [0x7663, 0x7663], /* CJK Ideograph */ + [0x7664, 0x7664], /* CJK Ideograph */ + [0x7665, 0x7665], /* CJK Ideograph */ + [0x7666, 0x7666], /* CJK Ideograph */ + [0x7667, 0x7667], /* CJK Ideograph */ + [0x7668, 0x7668], /* CJK Ideograph */ + [0x7669, 0x7669], /* CJK Ideograph */ + [0x766a, 0x766a], /* CJK Ideograph */ + [0x766b, 0x766b], /* CJK Ideograph */ + [0x766c, 0x766c], /* CJK Ideograph */ + [0x766d, 0x766d], /* CJK Ideograph */ + [0x766e, 0x766e], /* CJK Ideograph */ + [0x766f, 0x766f], /* CJK Ideograph */ + [0x7670, 0x7670], /* CJK Ideograph */ + [0x7671, 0x7671], /* CJK Ideograph */ + [0x7672, 0x7672], /* CJK Ideograph */ + [0x7673, 0x7673], /* CJK Ideograph */ + [0x7674, 0x7674], /* CJK Ideograph */ + [0x7675, 0x7675], /* CJK Ideograph */ + [0x7676, 0x7676], /* CJK Ideograph */ + [0x7677, 0x7677], /* CJK Ideograph */ + [0x7678, 0x7678], /* CJK Ideograph */ + [0x7679, 0x7679], /* CJK Ideograph */ + [0x767a, 0x767a], /* CJK Ideograph */ + [0x767b, 0x767b], /* CJK Ideograph */ + [0x767c, 0x767c], /* CJK Ideograph */ + [0x767d, 0x767d], /* CJK Ideograph */ + [0x767e, 0x767e], /* CJK Ideograph */ + [0x767f, 0x767f], /* CJK Ideograph */ + [0x7680, 0x7680], /* CJK Ideograph */ + [0x7681, 0x7681], /* CJK Ideograph */ + [0x7682, 0x7682], /* CJK Ideograph */ + [0x7683, 0x7683], /* CJK Ideograph */ + [0x7684, 0x7684], /* CJK Ideograph */ + [0x7685, 0x7685], /* CJK Ideograph */ + [0x7686, 0x7686], /* CJK Ideograph */ + [0x7687, 0x7687], /* CJK Ideograph */ + [0x7688, 0x7688], /* CJK Ideograph */ + [0x7689, 0x7689], /* CJK Ideograph */ + [0x768a, 0x768a], /* CJK Ideograph */ + [0x768b, 0x768b], /* CJK Ideograph */ + [0x768c, 0x768c], /* CJK Ideograph */ + [0x768d, 0x768d], /* CJK Ideograph */ + [0x768e, 0x768e], /* CJK Ideograph */ + [0x768f, 0x768f], /* CJK Ideograph */ + [0x7690, 0x7690], /* CJK Ideograph */ + [0x7691, 0x7691], /* CJK Ideograph */ + [0x7692, 0x7692], /* CJK Ideograph */ + [0x7693, 0x7693], /* CJK Ideograph */ + [0x7694, 0x7694], /* CJK Ideograph */ + [0x7695, 0x7695], /* CJK Ideograph */ + [0x7696, 0x7696], /* CJK Ideograph */ + [0x7697, 0x7697], /* CJK Ideograph */ + [0x7698, 0x7698], /* CJK Ideograph */ + [0x7699, 0x7699], /* CJK Ideograph */ + [0x769a, 0x769a], /* CJK Ideograph */ + [0x769b, 0x769b], /* CJK Ideograph */ + [0x769c, 0x769c], /* CJK Ideograph */ + [0x769d, 0x769d], /* CJK Ideograph */ + [0x769e, 0x769e], /* CJK Ideograph */ + [0x769f, 0x769f], /* CJK Ideograph */ + [0x76a0, 0x76a0], /* CJK Ideograph */ + [0x76a1, 0x76a1], /* CJK Ideograph */ + [0x76a2, 0x76a2], /* CJK Ideograph */ + [0x76a3, 0x76a3], /* CJK Ideograph */ + [0x76a4, 0x76a4], /* CJK Ideograph */ + [0x76a5, 0x76a5], /* CJK Ideograph */ + [0x76a6, 0x76a6], /* CJK Ideograph */ + [0x76a7, 0x76a7], /* CJK Ideograph */ + [0x76a8, 0x76a8], /* CJK Ideograph */ + [0x76a9, 0x76a9], /* CJK Ideograph */ + [0x76aa, 0x76aa], /* CJK Ideograph */ + [0x76ab, 0x76ab], /* CJK Ideograph */ + [0x76ac, 0x76ac], /* CJK Ideograph */ + [0x76ad, 0x76ad], /* CJK Ideograph */ + [0x76ae, 0x76ae], /* CJK Ideograph */ + [0x76af, 0x76af], /* CJK Ideograph */ + [0x76b0, 0x76b0], /* CJK Ideograph */ + [0x76b1, 0x76b1], /* CJK Ideograph */ + [0x76b2, 0x76b2], /* CJK Ideograph */ + [0x76b3, 0x76b3], /* CJK Ideograph */ + [0x76b4, 0x76b4], /* CJK Ideograph */ + [0x76b5, 0x76b5], /* CJK Ideograph */ + [0x76b6, 0x76b6], /* CJK Ideograph */ + [0x76b7, 0x76b7], /* CJK Ideograph */ + [0x76b8, 0x76b8], /* CJK Ideograph */ + [0x76b9, 0x76b9], /* CJK Ideograph */ + [0x76ba, 0x76ba], /* CJK Ideograph */ + [0x76bb, 0x76bb], /* CJK Ideograph */ + [0x76bc, 0x76bc], /* CJK Ideograph */ + [0x76bd, 0x76bd], /* CJK Ideograph */ + [0x76be, 0x76be], /* CJK Ideograph */ + [0x76bf, 0x76bf], /* CJK Ideograph */ + [0x76c0, 0x76c0], /* CJK Ideograph */ + [0x76c1, 0x76c1], /* CJK Ideograph */ + [0x76c2, 0x76c2], /* CJK Ideograph */ + [0x76c3, 0x76c3], /* CJK Ideograph */ + [0x76c4, 0x76c4], /* CJK Ideograph */ + [0x76c5, 0x76c5], /* CJK Ideograph */ + [0x76c6, 0x76c6], /* CJK Ideograph */ + [0x76c7, 0x76c7], /* CJK Ideograph */ + [0x76c8, 0x76c8], /* CJK Ideograph */ + [0x76c9, 0x76c9], /* CJK Ideograph */ + [0x76ca, 0x76ca], /* CJK Ideograph */ + [0x76cb, 0x76cb], /* CJK Ideograph */ + [0x76cc, 0x76cc], /* CJK Ideograph */ + [0x76cd, 0x76cd], /* CJK Ideograph */ + [0x76ce, 0x76ce], /* CJK Ideograph */ + [0x76cf, 0x76cf], /* CJK Ideograph */ + [0x76d0, 0x76d0], /* CJK Ideograph */ + [0x76d1, 0x76d1], /* CJK Ideograph */ + [0x76d2, 0x76d2], /* CJK Ideograph */ + [0x76d3, 0x76d3], /* CJK Ideograph */ + [0x76d4, 0x76d4], /* CJK Ideograph */ + [0x76d5, 0x76d5], /* CJK Ideograph */ + [0x76d6, 0x76d6], /* CJK Ideograph */ + [0x76d7, 0x76d7], /* CJK Ideograph */ + [0x76d8, 0x76d8], /* CJK Ideograph */ + [0x76d9, 0x76d9], /* CJK Ideograph */ + [0x76da, 0x76da], /* CJK Ideograph */ + [0x76db, 0x76db], /* CJK Ideograph */ + [0x76dc, 0x76dc], /* CJK Ideograph */ + [0x76dd, 0x76dd], /* CJK Ideograph */ + [0x76de, 0x76de], /* CJK Ideograph */ + [0x76df, 0x76df], /* CJK Ideograph */ + [0x76e0, 0x76e0], /* CJK Ideograph */ + [0x76e1, 0x76e1], /* CJK Ideograph */ + [0x76e2, 0x76e2], /* CJK Ideograph */ + [0x76e3, 0x76e3], /* CJK Ideograph */ + [0x76e4, 0x76e4], /* CJK Ideograph */ + [0x76e5, 0x76e5], /* CJK Ideograph */ + [0x76e6, 0x76e6], /* CJK Ideograph */ + [0x76e7, 0x76e7], /* CJK Ideograph */ + [0x76e8, 0x76e8], /* CJK Ideograph */ + [0x76e9, 0x76e9], /* CJK Ideograph */ + [0x76ea, 0x76ea], /* CJK Ideograph */ + [0x76eb, 0x76eb], /* CJK Ideograph */ + [0x76ec, 0x76ec], /* CJK Ideograph */ + [0x76ed, 0x76ed], /* CJK Ideograph */ + [0x76ee, 0x76ee], /* CJK Ideograph */ + [0x76ef, 0x76ef], /* CJK Ideograph */ + [0x76f0, 0x76f0], /* CJK Ideograph */ + [0x76f1, 0x76f1], /* CJK Ideograph */ + [0x76f2, 0x76f2], /* CJK Ideograph */ + [0x76f3, 0x76f3], /* CJK Ideograph */ + [0x76f4, 0x76f4], /* CJK Ideograph */ + [0x76f5, 0x76f5], /* CJK Ideograph */ + [0x76f6, 0x76f6], /* CJK Ideograph */ + [0x76f7, 0x76f7], /* CJK Ideograph */ + [0x76f8, 0x76f8], /* CJK Ideograph */ + [0x76f9, 0x76f9], /* CJK Ideograph */ + [0x76fa, 0x76fa], /* CJK Ideograph */ + [0x76fb, 0x76fb], /* CJK Ideograph */ + [0x76fc, 0x76fc], /* CJK Ideograph */ + [0x76fd, 0x76fd], /* CJK Ideograph */ + [0x76fe, 0x76fe], /* CJK Ideograph */ + [0x76ff, 0x76ff], /* CJK Ideograph */ + [0x7700, 0x7700], /* CJK Ideograph */ + [0x7701, 0x7701], /* CJK Ideograph */ + [0x7702, 0x7702], /* CJK Ideograph */ + [0x7703, 0x7703], /* CJK Ideograph */ + [0x7704, 0x7704], /* CJK Ideograph */ + [0x7705, 0x7705], /* CJK Ideograph */ + [0x7706, 0x7706], /* CJK Ideograph */ + [0x7707, 0x7707], /* CJK Ideograph */ + [0x7708, 0x7708], /* CJK Ideograph */ + [0x7709, 0x7709], /* CJK Ideograph */ + [0x770a, 0x770a], /* CJK Ideograph */ + [0x770b, 0x770b], /* CJK Ideograph */ + [0x770c, 0x770c], /* CJK Ideograph */ + [0x770d, 0x770d], /* CJK Ideograph */ + [0x770e, 0x770e], /* CJK Ideograph */ + [0x770f, 0x770f], /* CJK Ideograph */ + [0x7710, 0x7710], /* CJK Ideograph */ + [0x7711, 0x7711], /* CJK Ideograph */ + [0x7712, 0x7712], /* CJK Ideograph */ + [0x7713, 0x7713], /* CJK Ideograph */ + [0x7714, 0x7714], /* CJK Ideograph */ + [0x7715, 0x7715], /* CJK Ideograph */ + [0x7716, 0x7716], /* CJK Ideograph */ + [0x7717, 0x7717], /* CJK Ideograph */ + [0x7718, 0x7718], /* CJK Ideograph */ + [0x7719, 0x7719], /* CJK Ideograph */ + [0x771a, 0x771a], /* CJK Ideograph */ + [0x771b, 0x771b], /* CJK Ideograph */ + [0x771c, 0x771c], /* CJK Ideograph */ + [0x771d, 0x771d], /* CJK Ideograph */ + [0x771e, 0x771e], /* CJK Ideograph */ + [0x771f, 0x771f], /* CJK Ideograph */ + [0x7720, 0x7720], /* CJK Ideograph */ + [0x7721, 0x7721], /* CJK Ideograph */ + [0x7722, 0x7722], /* CJK Ideograph */ + [0x7723, 0x7723], /* CJK Ideograph */ + [0x7724, 0x7724], /* CJK Ideograph */ + [0x7725, 0x7725], /* CJK Ideograph */ + [0x7726, 0x7726], /* CJK Ideograph */ + [0x7727, 0x7727], /* CJK Ideograph */ + [0x7728, 0x7728], /* CJK Ideograph */ + [0x7729, 0x7729], /* CJK Ideograph */ + [0x772a, 0x772a], /* CJK Ideograph */ + [0x772b, 0x772b], /* CJK Ideograph */ + [0x772c, 0x772c], /* CJK Ideograph */ + [0x772d, 0x772d], /* CJK Ideograph */ + [0x772e, 0x772e], /* CJK Ideograph */ + [0x772f, 0x772f], /* CJK Ideograph */ + [0x7730, 0x7730], /* CJK Ideograph */ + [0x7731, 0x7731], /* CJK Ideograph */ + [0x7732, 0x7732], /* CJK Ideograph */ + [0x7733, 0x7733], /* CJK Ideograph */ + [0x7734, 0x7734], /* CJK Ideograph */ + [0x7735, 0x7735], /* CJK Ideograph */ + [0x7736, 0x7736], /* CJK Ideograph */ + [0x7737, 0x7737], /* CJK Ideograph */ + [0x7738, 0x7738], /* CJK Ideograph */ + [0x7739, 0x7739], /* CJK Ideograph */ + [0x773a, 0x773a], /* CJK Ideograph */ + [0x773b, 0x773b], /* CJK Ideograph */ + [0x773c, 0x773c], /* CJK Ideograph */ + [0x773d, 0x773d], /* CJK Ideograph */ + [0x773e, 0x773e], /* CJK Ideograph */ + [0x773f, 0x773f], /* CJK Ideograph */ + [0x7740, 0x7740], /* CJK Ideograph */ + [0x7741, 0x7741], /* CJK Ideograph */ + [0x7742, 0x7742], /* CJK Ideograph */ + [0x7743, 0x7743], /* CJK Ideograph */ + [0x7744, 0x7744], /* CJK Ideograph */ + [0x7745, 0x7745], /* CJK Ideograph */ + [0x7746, 0x7746], /* CJK Ideograph */ + [0x7747, 0x7747], /* CJK Ideograph */ + [0x7748, 0x7748], /* CJK Ideograph */ + [0x7749, 0x7749], /* CJK Ideograph */ + [0x774a, 0x774a], /* CJK Ideograph */ + [0x774b, 0x774b], /* CJK Ideograph */ + [0x774c, 0x774c], /* CJK Ideograph */ + [0x774d, 0x774d], /* CJK Ideograph */ + [0x774e, 0x774e], /* CJK Ideograph */ + [0x774f, 0x774f], /* CJK Ideograph */ + [0x7750, 0x7750], /* CJK Ideograph */ + [0x7751, 0x7751], /* CJK Ideograph */ + [0x7752, 0x7752], /* CJK Ideograph */ + [0x7753, 0x7753], /* CJK Ideograph */ + [0x7754, 0x7754], /* CJK Ideograph */ + [0x7755, 0x7755], /* CJK Ideograph */ + [0x7756, 0x7756], /* CJK Ideograph */ + [0x7757, 0x7757], /* CJK Ideograph */ + [0x7758, 0x7758], /* CJK Ideograph */ + [0x7759, 0x7759], /* CJK Ideograph */ + [0x775a, 0x775a], /* CJK Ideograph */ + [0x775b, 0x775b], /* CJK Ideograph */ + [0x775c, 0x775c], /* CJK Ideograph */ + [0x775d, 0x775d], /* CJK Ideograph */ + [0x775e, 0x775e], /* CJK Ideograph */ + [0x775f, 0x775f], /* CJK Ideograph */ + [0x7760, 0x7760], /* CJK Ideograph */ + [0x7761, 0x7761], /* CJK Ideograph */ + [0x7762, 0x7762], /* CJK Ideograph */ + [0x7763, 0x7763], /* CJK Ideograph */ + [0x7764, 0x7764], /* CJK Ideograph */ + [0x7765, 0x7765], /* CJK Ideograph */ + [0x7766, 0x7766], /* CJK Ideograph */ + [0x7767, 0x7767], /* CJK Ideograph */ + [0x7768, 0x7768], /* CJK Ideograph */ + [0x7769, 0x7769], /* CJK Ideograph */ + [0x776a, 0x776a], /* CJK Ideograph */ + [0x776b, 0x776b], /* CJK Ideograph */ + [0x776c, 0x776c], /* CJK Ideograph */ + [0x776d, 0x776d], /* CJK Ideograph */ + [0x776e, 0x776e], /* CJK Ideograph */ + [0x776f, 0x776f], /* CJK Ideograph */ + [0x7770, 0x7770], /* CJK Ideograph */ + [0x7771, 0x7771], /* CJK Ideograph */ + [0x7772, 0x7772], /* CJK Ideograph */ + [0x7773, 0x7773], /* CJK Ideograph */ + [0x7774, 0x7774], /* CJK Ideograph */ + [0x7775, 0x7775], /* CJK Ideograph */ + [0x7776, 0x7776], /* CJK Ideograph */ + [0x7777, 0x7777], /* CJK Ideograph */ + [0x7778, 0x7778], /* CJK Ideograph */ + [0x7779, 0x7779], /* CJK Ideograph */ + [0x777a, 0x777a], /* CJK Ideograph */ + [0x777b, 0x777b], /* CJK Ideograph */ + [0x777c, 0x777c], /* CJK Ideograph */ + [0x777d, 0x777d], /* CJK Ideograph */ + [0x777e, 0x777e], /* CJK Ideograph */ + [0x777f, 0x777f], /* CJK Ideograph */ + [0x7780, 0x7780], /* CJK Ideograph */ + [0x7781, 0x7781], /* CJK Ideograph */ + [0x7782, 0x7782], /* CJK Ideograph */ + [0x7783, 0x7783], /* CJK Ideograph */ + [0x7784, 0x7784], /* CJK Ideograph */ + [0x7785, 0x7785], /* CJK Ideograph */ + [0x7786, 0x7786], /* CJK Ideograph */ + [0x7787, 0x7787], /* CJK Ideograph */ + [0x7788, 0x7788], /* CJK Ideograph */ + [0x7789, 0x7789], /* CJK Ideograph */ + [0x778a, 0x778a], /* CJK Ideograph */ + [0x778b, 0x778b], /* CJK Ideograph */ + [0x778c, 0x778c], /* CJK Ideograph */ + [0x778d, 0x778d], /* CJK Ideograph */ + [0x778e, 0x778e], /* CJK Ideograph */ + [0x778f, 0x778f], /* CJK Ideograph */ + [0x7790, 0x7790], /* CJK Ideograph */ + [0x7791, 0x7791], /* CJK Ideograph */ + [0x7792, 0x7792], /* CJK Ideograph */ + [0x7793, 0x7793], /* CJK Ideograph */ + [0x7794, 0x7794], /* CJK Ideograph */ + [0x7795, 0x7795], /* CJK Ideograph */ + [0x7796, 0x7796], /* CJK Ideograph */ + [0x7797, 0x7797], /* CJK Ideograph */ + [0x7798, 0x7798], /* CJK Ideograph */ + [0x7799, 0x7799], /* CJK Ideograph */ + [0x779a, 0x779a], /* CJK Ideograph */ + [0x779b, 0x779b], /* CJK Ideograph */ + [0x779c, 0x779c], /* CJK Ideograph */ + [0x779d, 0x779d], /* CJK Ideograph */ + [0x779e, 0x779e], /* CJK Ideograph */ + [0x779f, 0x779f], /* CJK Ideograph */ + [0x77a0, 0x77a0], /* CJK Ideograph */ + [0x77a1, 0x77a1], /* CJK Ideograph */ + [0x77a2, 0x77a2], /* CJK Ideograph */ + [0x77a3, 0x77a3], /* CJK Ideograph */ + [0x77a4, 0x77a4], /* CJK Ideograph */ + [0x77a5, 0x77a5], /* CJK Ideograph */ + [0x77a6, 0x77a6], /* CJK Ideograph */ + [0x77a7, 0x77a7], /* CJK Ideograph */ + [0x77a8, 0x77a8], /* CJK Ideograph */ + [0x77a9, 0x77a9], /* CJK Ideograph */ + [0x77aa, 0x77aa], /* CJK Ideograph */ + [0x77ab, 0x77ab], /* CJK Ideograph */ + [0x77ac, 0x77ac], /* CJK Ideograph */ + [0x77ad, 0x77ad], /* CJK Ideograph */ + [0x77ae, 0x77ae], /* CJK Ideograph */ + [0x77af, 0x77af], /* CJK Ideograph */ + [0x77b0, 0x77b0], /* CJK Ideograph */ + [0x77b1, 0x77b1], /* CJK Ideograph */ + [0x77b2, 0x77b2], /* CJK Ideograph */ + [0x77b3, 0x77b3], /* CJK Ideograph */ + [0x77b4, 0x77b4], /* CJK Ideograph */ + [0x77b5, 0x77b5], /* CJK Ideograph */ + [0x77b6, 0x77b6], /* CJK Ideograph */ + [0x77b7, 0x77b7], /* CJK Ideograph */ + [0x77b8, 0x77b8], /* CJK Ideograph */ + [0x77b9, 0x77b9], /* CJK Ideograph */ + [0x77ba, 0x77ba], /* CJK Ideograph */ + [0x77bb, 0x77bb], /* CJK Ideograph */ + [0x77bc, 0x77bc], /* CJK Ideograph */ + [0x77bd, 0x77bd], /* CJK Ideograph */ + [0x77be, 0x77be], /* CJK Ideograph */ + [0x77bf, 0x77bf], /* CJK Ideograph */ + [0x77c0, 0x77c0], /* CJK Ideograph */ + [0x77c1, 0x77c1], /* CJK Ideograph */ + [0x77c2, 0x77c2], /* CJK Ideograph */ + [0x77c3, 0x77c3], /* CJK Ideograph */ + [0x77c4, 0x77c4], /* CJK Ideograph */ + [0x77c5, 0x77c5], /* CJK Ideograph */ + [0x77c6, 0x77c6], /* CJK Ideograph */ + [0x77c7, 0x77c7], /* CJK Ideograph */ + [0x77c8, 0x77c8], /* CJK Ideograph */ + [0x77c9, 0x77c9], /* CJK Ideograph */ + [0x77ca, 0x77ca], /* CJK Ideograph */ + [0x77cb, 0x77cb], /* CJK Ideograph */ + [0x77cc, 0x77cc], /* CJK Ideograph */ + [0x77cd, 0x77cd], /* CJK Ideograph */ + [0x77ce, 0x77ce], /* CJK Ideograph */ + [0x77cf, 0x77cf], /* CJK Ideograph */ + [0x77d0, 0x77d0], /* CJK Ideograph */ + [0x77d1, 0x77d1], /* CJK Ideograph */ + [0x77d2, 0x77d2], /* CJK Ideograph */ + [0x77d3, 0x77d3], /* CJK Ideograph */ + [0x77d4, 0x77d4], /* CJK Ideograph */ + [0x77d5, 0x77d5], /* CJK Ideograph */ + [0x77d6, 0x77d6], /* CJK Ideograph */ + [0x77d7, 0x77d7], /* CJK Ideograph */ + [0x77d8, 0x77d8], /* CJK Ideograph */ + [0x77d9, 0x77d9], /* CJK Ideograph */ + [0x77da, 0x77da], /* CJK Ideograph */ + [0x77db, 0x77db], /* CJK Ideograph */ + [0x77dc, 0x77dc], /* CJK Ideograph */ + [0x77dd, 0x77dd], /* CJK Ideograph */ + [0x77de, 0x77de], /* CJK Ideograph */ + [0x77df, 0x77df], /* CJK Ideograph */ + [0x77e0, 0x77e0], /* CJK Ideograph */ + [0x77e1, 0x77e1], /* CJK Ideograph */ + [0x77e2, 0x77e2], /* CJK Ideograph */ + [0x77e3, 0x77e3], /* CJK Ideograph */ + [0x77e4, 0x77e4], /* CJK Ideograph */ + [0x77e5, 0x77e5], /* CJK Ideograph */ + [0x77e6, 0x77e6], /* CJK Ideograph */ + [0x77e7, 0x77e7], /* CJK Ideograph */ + [0x77e8, 0x77e8], /* CJK Ideograph */ + [0x77e9, 0x77e9], /* CJK Ideograph */ + [0x77ea, 0x77ea], /* CJK Ideograph */ + [0x77eb, 0x77eb], /* CJK Ideograph */ + [0x77ec, 0x77ec], /* CJK Ideograph */ + [0x77ed, 0x77ed], /* CJK Ideograph */ + [0x77ee, 0x77ee], /* CJK Ideograph */ + [0x77ef, 0x77ef], /* CJK Ideograph */ + [0x77f0, 0x77f0], /* CJK Ideograph */ + [0x77f1, 0x77f1], /* CJK Ideograph */ + [0x77f2, 0x77f2], /* CJK Ideograph */ + [0x77f3, 0x77f3], /* CJK Ideograph */ + [0x77f4, 0x77f4], /* CJK Ideograph */ + [0x77f5, 0x77f5], /* CJK Ideograph */ + [0x77f6, 0x77f6], /* CJK Ideograph */ + [0x77f7, 0x77f7], /* CJK Ideograph */ + [0x77f8, 0x77f8], /* CJK Ideograph */ + [0x77f9, 0x77f9], /* CJK Ideograph */ + [0x77fa, 0x77fa], /* CJK Ideograph */ + [0x77fb, 0x77fb], /* CJK Ideograph */ + [0x77fc, 0x77fc], /* CJK Ideograph */ + [0x77fd, 0x77fd], /* CJK Ideograph */ + [0x77fe, 0x77fe], /* CJK Ideograph */ + [0x77ff, 0x77ff], /* CJK Ideograph */ + [0x7800, 0x7800], /* CJK Ideograph */ + [0x7801, 0x7801], /* CJK Ideograph */ + [0x7802, 0x7802], /* CJK Ideograph */ + [0x7803, 0x7803], /* CJK Ideograph */ + [0x7804, 0x7804], /* CJK Ideograph */ + [0x7805, 0x7805], /* CJK Ideograph */ + [0x7806, 0x7806], /* CJK Ideograph */ + [0x7807, 0x7807], /* CJK Ideograph */ + [0x7808, 0x7808], /* CJK Ideograph */ + [0x7809, 0x7809], /* CJK Ideograph */ + [0x780a, 0x780a], /* CJK Ideograph */ + [0x780b, 0x780b], /* CJK Ideograph */ + [0x780c, 0x780c], /* CJK Ideograph */ + [0x780d, 0x780d], /* CJK Ideograph */ + [0x780e, 0x780e], /* CJK Ideograph */ + [0x780f, 0x780f], /* CJK Ideograph */ + [0x7810, 0x7810], /* CJK Ideograph */ + [0x7811, 0x7811], /* CJK Ideograph */ + [0x7812, 0x7812], /* CJK Ideograph */ + [0x7813, 0x7813], /* CJK Ideograph */ + [0x7814, 0x7814], /* CJK Ideograph */ + [0x7815, 0x7815], /* CJK Ideograph */ + [0x7816, 0x7816], /* CJK Ideograph */ + [0x7817, 0x7817], /* CJK Ideograph */ + [0x7818, 0x7818], /* CJK Ideograph */ + [0x7819, 0x7819], /* CJK Ideograph */ + [0x781a, 0x781a], /* CJK Ideograph */ + [0x781b, 0x781b], /* CJK Ideograph */ + [0x781c, 0x781c], /* CJK Ideograph */ + [0x781d, 0x781d], /* CJK Ideograph */ + [0x781e, 0x781e], /* CJK Ideograph */ + [0x781f, 0x781f], /* CJK Ideograph */ + [0x7820, 0x7820], /* CJK Ideograph */ + [0x7821, 0x7821], /* CJK Ideograph */ + [0x7822, 0x7822], /* CJK Ideograph */ + [0x7823, 0x7823], /* CJK Ideograph */ + [0x7824, 0x7824], /* CJK Ideograph */ + [0x7825, 0x7825], /* CJK Ideograph */ + [0x7826, 0x7826], /* CJK Ideograph */ + [0x7827, 0x7827], /* CJK Ideograph */ + [0x7828, 0x7828], /* CJK Ideograph */ + [0x7829, 0x7829], /* CJK Ideograph */ + [0x782a, 0x782a], /* CJK Ideograph */ + [0x782b, 0x782b], /* CJK Ideograph */ + [0x782c, 0x782c], /* CJK Ideograph */ + [0x782d, 0x782d], /* CJK Ideograph */ + [0x782e, 0x782e], /* CJK Ideograph */ + [0x782f, 0x782f], /* CJK Ideograph */ + [0x7830, 0x7830], /* CJK Ideograph */ + [0x7831, 0x7831], /* CJK Ideograph */ + [0x7832, 0x7832], /* CJK Ideograph */ + [0x7833, 0x7833], /* CJK Ideograph */ + [0x7834, 0x7834], /* CJK Ideograph */ + [0x7835, 0x7835], /* CJK Ideograph */ + [0x7836, 0x7836], /* CJK Ideograph */ + [0x7837, 0x7837], /* CJK Ideograph */ + [0x7838, 0x7838], /* CJK Ideograph */ + [0x7839, 0x7839], /* CJK Ideograph */ + [0x783a, 0x783a], /* CJK Ideograph */ + [0x783b, 0x783b], /* CJK Ideograph */ + [0x783c, 0x783c], /* CJK Ideograph */ + [0x783d, 0x783d], /* CJK Ideograph */ + [0x783e, 0x783e], /* CJK Ideograph */ + [0x783f, 0x783f], /* CJK Ideograph */ + [0x7840, 0x7840], /* CJK Ideograph */ + [0x7841, 0x7841], /* CJK Ideograph */ + [0x7842, 0x7842], /* CJK Ideograph */ + [0x7843, 0x7843], /* CJK Ideograph */ + [0x7844, 0x7844], /* CJK Ideograph */ + [0x7845, 0x7845], /* CJK Ideograph */ + [0x7846, 0x7846], /* CJK Ideograph */ + [0x7847, 0x7847], /* CJK Ideograph */ + [0x7848, 0x7848], /* CJK Ideograph */ + [0x7849, 0x7849], /* CJK Ideograph */ + [0x784a, 0x784a], /* CJK Ideograph */ + [0x784b, 0x784b], /* CJK Ideograph */ + [0x784c, 0x784c], /* CJK Ideograph */ + [0x784d, 0x784d], /* CJK Ideograph */ + [0x784e, 0x784e], /* CJK Ideograph */ + [0x784f, 0x784f], /* CJK Ideograph */ + [0x7850, 0x7850], /* CJK Ideograph */ + [0x7851, 0x7851], /* CJK Ideograph */ + [0x7852, 0x7852], /* CJK Ideograph */ + [0x7853, 0x7853], /* CJK Ideograph */ + [0x7854, 0x7854], /* CJK Ideograph */ + [0x7855, 0x7855], /* CJK Ideograph */ + [0x7856, 0x7856], /* CJK Ideograph */ + [0x7857, 0x7857], /* CJK Ideograph */ + [0x7858, 0x7858], /* CJK Ideograph */ + [0x7859, 0x7859], /* CJK Ideograph */ + [0x785a, 0x785a], /* CJK Ideograph */ + [0x785b, 0x785b], /* CJK Ideograph */ + [0x785c, 0x785c], /* CJK Ideograph */ + [0x785d, 0x785d], /* CJK Ideograph */ + [0x785e, 0x785e], /* CJK Ideograph */ + [0x785f, 0x785f], /* CJK Ideograph */ + [0x7860, 0x7860], /* CJK Ideograph */ + [0x7861, 0x7861], /* CJK Ideograph */ + [0x7862, 0x7862], /* CJK Ideograph */ + [0x7863, 0x7863], /* CJK Ideograph */ + [0x7864, 0x7864], /* CJK Ideograph */ + [0x7865, 0x7865], /* CJK Ideograph */ + [0x7866, 0x7866], /* CJK Ideograph */ + [0x7867, 0x7867], /* CJK Ideograph */ + [0x7868, 0x7868], /* CJK Ideograph */ + [0x7869, 0x7869], /* CJK Ideograph */ + [0x786a, 0x786a], /* CJK Ideograph */ + [0x786b, 0x786b], /* CJK Ideograph */ + [0x786c, 0x786c], /* CJK Ideograph */ + [0x786d, 0x786d], /* CJK Ideograph */ + [0x786e, 0x786e], /* CJK Ideograph */ + [0x786f, 0x786f], /* CJK Ideograph */ + [0x7870, 0x7870], /* CJK Ideograph */ + [0x7871, 0x7871], /* CJK Ideograph */ + [0x7872, 0x7872], /* CJK Ideograph */ + [0x7873, 0x7873], /* CJK Ideograph */ + [0x7874, 0x7874], /* CJK Ideograph */ + [0x7875, 0x7875], /* CJK Ideograph */ + [0x7876, 0x7876], /* CJK Ideograph */ + [0x7877, 0x7877], /* CJK Ideograph */ + [0x7878, 0x7878], /* CJK Ideograph */ + [0x7879, 0x7879], /* CJK Ideograph */ + [0x787a, 0x787a], /* CJK Ideograph */ + [0x787b, 0x787b], /* CJK Ideograph */ + [0x787c, 0x787c], /* CJK Ideograph */ + [0x787d, 0x787d], /* CJK Ideograph */ + [0x787e, 0x787e], /* CJK Ideograph */ + [0x787f, 0x787f], /* CJK Ideograph */ + [0x7880, 0x7880], /* CJK Ideograph */ + [0x7881, 0x7881], /* CJK Ideograph */ + [0x7882, 0x7882], /* CJK Ideograph */ + [0x7883, 0x7883], /* CJK Ideograph */ + [0x7884, 0x7884], /* CJK Ideograph */ + [0x7885, 0x7885], /* CJK Ideograph */ + [0x7886, 0x7886], /* CJK Ideograph */ + [0x7887, 0x7887], /* CJK Ideograph */ + [0x7888, 0x7888], /* CJK Ideograph */ + [0x7889, 0x7889], /* CJK Ideograph */ + [0x788a, 0x788a], /* CJK Ideograph */ + [0x788b, 0x788b], /* CJK Ideograph */ + [0x788c, 0x788c], /* CJK Ideograph */ + [0x788d, 0x788d], /* CJK Ideograph */ + [0x788e, 0x788e], /* CJK Ideograph */ + [0x788f, 0x788f], /* CJK Ideograph */ + [0x7890, 0x7890], /* CJK Ideograph */ + [0x7891, 0x7891], /* CJK Ideograph */ + [0x7892, 0x7892], /* CJK Ideograph */ + [0x7893, 0x7893], /* CJK Ideograph */ + [0x7894, 0x7894], /* CJK Ideograph */ + [0x7895, 0x7895], /* CJK Ideograph */ + [0x7896, 0x7896], /* CJK Ideograph */ + [0x7897, 0x7897], /* CJK Ideograph */ + [0x7898, 0x7898], /* CJK Ideograph */ + [0x7899, 0x7899], /* CJK Ideograph */ + [0x789a, 0x789a], /* CJK Ideograph */ + [0x789b, 0x789b], /* CJK Ideograph */ + [0x789c, 0x789c], /* CJK Ideograph */ + [0x789d, 0x789d], /* CJK Ideograph */ + [0x789e, 0x789e], /* CJK Ideograph */ + [0x789f, 0x789f], /* CJK Ideograph */ + [0x78a0, 0x78a0], /* CJK Ideograph */ + [0x78a1, 0x78a1], /* CJK Ideograph */ + [0x78a2, 0x78a2], /* CJK Ideograph */ + [0x78a3, 0x78a3], /* CJK Ideograph */ + [0x78a4, 0x78a4], /* CJK Ideograph */ + [0x78a5, 0x78a5], /* CJK Ideograph */ + [0x78a6, 0x78a6], /* CJK Ideograph */ + [0x78a7, 0x78a7], /* CJK Ideograph */ + [0x78a8, 0x78a8], /* CJK Ideograph */ + [0x78a9, 0x78a9], /* CJK Ideograph */ + [0x78aa, 0x78aa], /* CJK Ideograph */ + [0x78ab, 0x78ab], /* CJK Ideograph */ + [0x78ac, 0x78ac], /* CJK Ideograph */ + [0x78ad, 0x78ad], /* CJK Ideograph */ + [0x78ae, 0x78ae], /* CJK Ideograph */ + [0x78af, 0x78af], /* CJK Ideograph */ + [0x78b0, 0x78b0], /* CJK Ideograph */ + [0x78b1, 0x78b1], /* CJK Ideograph */ + [0x78b2, 0x78b2], /* CJK Ideograph */ + [0x78b3, 0x78b3], /* CJK Ideograph */ + [0x78b4, 0x78b4], /* CJK Ideograph */ + [0x78b5, 0x78b5], /* CJK Ideograph */ + [0x78b6, 0x78b6], /* CJK Ideograph */ + [0x78b7, 0x78b7], /* CJK Ideograph */ + [0x78b8, 0x78b8], /* CJK Ideograph */ + [0x78b9, 0x78b9], /* CJK Ideograph */ + [0x78ba, 0x78ba], /* CJK Ideograph */ + [0x78bb, 0x78bb], /* CJK Ideograph */ + [0x78bc, 0x78bc], /* CJK Ideograph */ + [0x78bd, 0x78bd], /* CJK Ideograph */ + [0x78be, 0x78be], /* CJK Ideograph */ + [0x78bf, 0x78bf], /* CJK Ideograph */ + [0x78c0, 0x78c0], /* CJK Ideograph */ + [0x78c1, 0x78c1], /* CJK Ideograph */ + [0x78c2, 0x78c2], /* CJK Ideograph */ + [0x78c3, 0x78c3], /* CJK Ideograph */ + [0x78c4, 0x78c4], /* CJK Ideograph */ + [0x78c5, 0x78c5], /* CJK Ideograph */ + [0x78c6, 0x78c6], /* CJK Ideograph */ + [0x78c7, 0x78c7], /* CJK Ideograph */ + [0x78c8, 0x78c8], /* CJK Ideograph */ + [0x78c9, 0x78c9], /* CJK Ideograph */ + [0x78ca, 0x78ca], /* CJK Ideograph */ + [0x78cb, 0x78cb], /* CJK Ideograph */ + [0x78cc, 0x78cc], /* CJK Ideograph */ + [0x78cd, 0x78cd], /* CJK Ideograph */ + [0x78ce, 0x78ce], /* CJK Ideograph */ + [0x78cf, 0x78cf], /* CJK Ideograph */ + [0x78d0, 0x78d0], /* CJK Ideograph */ + [0x78d1, 0x78d1], /* CJK Ideograph */ + [0x78d2, 0x78d2], /* CJK Ideograph */ + [0x78d3, 0x78d3], /* CJK Ideograph */ + [0x78d4, 0x78d4], /* CJK Ideograph */ + [0x78d5, 0x78d5], /* CJK Ideograph */ + [0x78d6, 0x78d6], /* CJK Ideograph */ + [0x78d7, 0x78d7], /* CJK Ideograph */ + [0x78d8, 0x78d8], /* CJK Ideograph */ + [0x78d9, 0x78d9], /* CJK Ideograph */ + [0x78da, 0x78da], /* CJK Ideograph */ + [0x78db, 0x78db], /* CJK Ideograph */ + [0x78dc, 0x78dc], /* CJK Ideograph */ + [0x78dd, 0x78dd], /* CJK Ideograph */ + [0x78de, 0x78de], /* CJK Ideograph */ + [0x78df, 0x78df], /* CJK Ideograph */ + [0x78e0, 0x78e0], /* CJK Ideograph */ + [0x78e1, 0x78e1], /* CJK Ideograph */ + [0x78e2, 0x78e2], /* CJK Ideograph */ + [0x78e3, 0x78e3], /* CJK Ideograph */ + [0x78e4, 0x78e4], /* CJK Ideograph */ + [0x78e5, 0x78e5], /* CJK Ideograph */ + [0x78e6, 0x78e6], /* CJK Ideograph */ + [0x78e7, 0x78e7], /* CJK Ideograph */ + [0x78e8, 0x78e8], /* CJK Ideograph */ + [0x78e9, 0x78e9], /* CJK Ideograph */ + [0x78ea, 0x78ea], /* CJK Ideograph */ + [0x78eb, 0x78eb], /* CJK Ideograph */ + [0x78ec, 0x78ec], /* CJK Ideograph */ + [0x78ed, 0x78ed], /* CJK Ideograph */ + [0x78ee, 0x78ee], /* CJK Ideograph */ + [0x78ef, 0x78ef], /* CJK Ideograph */ + [0x78f0, 0x78f0], /* CJK Ideograph */ + [0x78f1, 0x78f1], /* CJK Ideograph */ + [0x78f2, 0x78f2], /* CJK Ideograph */ + [0x78f3, 0x78f3], /* CJK Ideograph */ + [0x78f4, 0x78f4], /* CJK Ideograph */ + [0x78f5, 0x78f5], /* CJK Ideograph */ + [0x78f6, 0x78f6], /* CJK Ideograph */ + [0x78f7, 0x78f7], /* CJK Ideograph */ + [0x78f8, 0x78f8], /* CJK Ideograph */ + [0x78f9, 0x78f9], /* CJK Ideograph */ + [0x78fa, 0x78fa], /* CJK Ideograph */ + [0x78fb, 0x78fb], /* CJK Ideograph */ + [0x78fc, 0x78fc], /* CJK Ideograph */ + [0x78fd, 0x78fd], /* CJK Ideograph */ + [0x78fe, 0x78fe], /* CJK Ideograph */ + [0x78ff, 0x78ff], /* CJK Ideograph */ + [0x7900, 0x7900], /* CJK Ideograph */ + [0x7901, 0x7901], /* CJK Ideograph */ + [0x7902, 0x7902], /* CJK Ideograph */ + [0x7903, 0x7903], /* CJK Ideograph */ + [0x7904, 0x7904], /* CJK Ideograph */ + [0x7905, 0x7905], /* CJK Ideograph */ + [0x7906, 0x7906], /* CJK Ideograph */ + [0x7907, 0x7907], /* CJK Ideograph */ + [0x7908, 0x7908], /* CJK Ideograph */ + [0x7909, 0x7909], /* CJK Ideograph */ + [0x790a, 0x790a], /* CJK Ideograph */ + [0x790b, 0x790b], /* CJK Ideograph */ + [0x790c, 0x790c], /* CJK Ideograph */ + [0x790d, 0x790d], /* CJK Ideograph */ + [0x790e, 0x790e], /* CJK Ideograph */ + [0x790f, 0x790f], /* CJK Ideograph */ + [0x7910, 0x7910], /* CJK Ideograph */ + [0x7911, 0x7911], /* CJK Ideograph */ + [0x7912, 0x7912], /* CJK Ideograph */ + [0x7913, 0x7913], /* CJK Ideograph */ + [0x7914, 0x7914], /* CJK Ideograph */ + [0x7915, 0x7915], /* CJK Ideograph */ + [0x7916, 0x7916], /* CJK Ideograph */ + [0x7917, 0x7917], /* CJK Ideograph */ + [0x7918, 0x7918], /* CJK Ideograph */ + [0x7919, 0x7919], /* CJK Ideograph */ + [0x791a, 0x791a], /* CJK Ideograph */ + [0x791b, 0x791b], /* CJK Ideograph */ + [0x791c, 0x791c], /* CJK Ideograph */ + [0x791d, 0x791d], /* CJK Ideograph */ + [0x791e, 0x791e], /* CJK Ideograph */ + [0x791f, 0x791f], /* CJK Ideograph */ + [0x7920, 0x7920], /* CJK Ideograph */ + [0x7921, 0x7921], /* CJK Ideograph */ + [0x7922, 0x7922], /* CJK Ideograph */ + [0x7923, 0x7923], /* CJK Ideograph */ + [0x7924, 0x7924], /* CJK Ideograph */ + [0x7925, 0x7925], /* CJK Ideograph */ + [0x7926, 0x7926], /* CJK Ideograph */ + [0x7927, 0x7927], /* CJK Ideograph */ + [0x7928, 0x7928], /* CJK Ideograph */ + [0x7929, 0x7929], /* CJK Ideograph */ + [0x792a, 0x792a], /* CJK Ideograph */ + [0x792b, 0x792b], /* CJK Ideograph */ + [0x792c, 0x792c], /* CJK Ideograph */ + [0x792d, 0x792d], /* CJK Ideograph */ + [0x792e, 0x792e], /* CJK Ideograph */ + [0x792f, 0x792f], /* CJK Ideograph */ + [0x7930, 0x7930], /* CJK Ideograph */ + [0x7931, 0x7931], /* CJK Ideograph */ + [0x7932, 0x7932], /* CJK Ideograph */ + [0x7933, 0x7933], /* CJK Ideograph */ + [0x7934, 0x7934], /* CJK Ideograph */ + [0x7935, 0x7935], /* CJK Ideograph */ + [0x7936, 0x7936], /* CJK Ideograph */ + [0x7937, 0x7937], /* CJK Ideograph */ + [0x7938, 0x7938], /* CJK Ideograph */ + [0x7939, 0x7939], /* CJK Ideograph */ + [0x793a, 0x793a], /* CJK Ideograph */ + [0x793b, 0x793b], /* CJK Ideograph */ + [0x793c, 0x793c], /* CJK Ideograph */ + [0x793d, 0x793d], /* CJK Ideograph */ + [0x793e, 0x793e], /* CJK Ideograph */ + [0x793f, 0x793f], /* CJK Ideograph */ + [0x7940, 0x7940], /* CJK Ideograph */ + [0x7941, 0x7941], /* CJK Ideograph */ + [0x7942, 0x7942], /* CJK Ideograph */ + [0x7943, 0x7943], /* CJK Ideograph */ + [0x7944, 0x7944], /* CJK Ideograph */ + [0x7945, 0x7945], /* CJK Ideograph */ + [0x7946, 0x7946], /* CJK Ideograph */ + [0x7947, 0x7947], /* CJK Ideograph */ + [0x7948, 0x7948], /* CJK Ideograph */ + [0x7949, 0x7949], /* CJK Ideograph */ + [0x794a, 0x794a], /* CJK Ideograph */ + [0x794b, 0x794b], /* CJK Ideograph */ + [0x794c, 0x794c], /* CJK Ideograph */ + [0x794d, 0x794d], /* CJK Ideograph */ + [0x794e, 0x794e], /* CJK Ideograph */ + [0x794f, 0x794f], /* CJK Ideograph */ + [0x7950, 0x7950], /* CJK Ideograph */ + [0x7951, 0x7951], /* CJK Ideograph */ + [0x7952, 0x7952], /* CJK Ideograph */ + [0x7953, 0x7953], /* CJK Ideograph */ + [0x7954, 0x7954], /* CJK Ideograph */ + [0x7955, 0x7955], /* CJK Ideograph */ + [0x7956, 0x7956], /* CJK Ideograph */ + [0x7957, 0x7957], /* CJK Ideograph */ + [0x7958, 0x7958], /* CJK Ideograph */ + [0x7959, 0x7959], /* CJK Ideograph */ + [0x795a, 0x795a], /* CJK Ideograph */ + [0x795b, 0x795b], /* CJK Ideograph */ + [0x795c, 0x795c], /* CJK Ideograph */ + [0x795d, 0x795d], /* CJK Ideograph */ + [0x795e, 0x795e], /* CJK Ideograph */ + [0x795f, 0x795f], /* CJK Ideograph */ + [0x7960, 0x7960], /* CJK Ideograph */ + [0x7961, 0x7961], /* CJK Ideograph */ + [0x7962, 0x7962], /* CJK Ideograph */ + [0x7963, 0x7963], /* CJK Ideograph */ + [0x7964, 0x7964], /* CJK Ideograph */ + [0x7965, 0x7965], /* CJK Ideograph */ + [0x7966, 0x7966], /* CJK Ideograph */ + [0x7967, 0x7967], /* CJK Ideograph */ + [0x7968, 0x7968], /* CJK Ideograph */ + [0x7969, 0x7969], /* CJK Ideograph */ + [0x796a, 0x796a], /* CJK Ideograph */ + [0x796b, 0x796b], /* CJK Ideograph */ + [0x796c, 0x796c], /* CJK Ideograph */ + [0x796d, 0x796d], /* CJK Ideograph */ + [0x796e, 0x796e], /* CJK Ideograph */ + [0x796f, 0x796f], /* CJK Ideograph */ + [0x7970, 0x7970], /* CJK Ideograph */ + [0x7971, 0x7971], /* CJK Ideograph */ + [0x7972, 0x7972], /* CJK Ideograph */ + [0x7973, 0x7973], /* CJK Ideograph */ + [0x7974, 0x7974], /* CJK Ideograph */ + [0x7975, 0x7975], /* CJK Ideograph */ + [0x7976, 0x7976], /* CJK Ideograph */ + [0x7977, 0x7977], /* CJK Ideograph */ + [0x7978, 0x7978], /* CJK Ideograph */ + [0x7979, 0x7979], /* CJK Ideograph */ + [0x797a, 0x797a], /* CJK Ideograph */ + [0x797b, 0x797b], /* CJK Ideograph */ + [0x797c, 0x797c], /* CJK Ideograph */ + [0x797d, 0x797d], /* CJK Ideograph */ + [0x797e, 0x797e], /* CJK Ideograph */ + [0x797f, 0x797f], /* CJK Ideograph */ + [0x7980, 0x7980], /* CJK Ideograph */ + [0x7981, 0x7981], /* CJK Ideograph */ + [0x7982, 0x7982], /* CJK Ideograph */ + [0x7983, 0x7983], /* CJK Ideograph */ + [0x7984, 0x7984], /* CJK Ideograph */ + [0x7985, 0x7985], /* CJK Ideograph */ + [0x7986, 0x7986], /* CJK Ideograph */ + [0x7987, 0x7987], /* CJK Ideograph */ + [0x7988, 0x7988], /* CJK Ideograph */ + [0x7989, 0x7989], /* CJK Ideograph */ + [0x798a, 0x798a], /* CJK Ideograph */ + [0x798b, 0x798b], /* CJK Ideograph */ + [0x798c, 0x798c], /* CJK Ideograph */ + [0x798d, 0x798d], /* CJK Ideograph */ + [0x798e, 0x798e], /* CJK Ideograph */ + [0x798f, 0x798f], /* CJK Ideograph */ + [0x7990, 0x7990], /* CJK Ideograph */ + [0x7991, 0x7991], /* CJK Ideograph */ + [0x7992, 0x7992], /* CJK Ideograph */ + [0x7993, 0x7993], /* CJK Ideograph */ + [0x7994, 0x7994], /* CJK Ideograph */ + [0x7995, 0x7995], /* CJK Ideograph */ + [0x7996, 0x7996], /* CJK Ideograph */ + [0x7997, 0x7997], /* CJK Ideograph */ + [0x7998, 0x7998], /* CJK Ideograph */ + [0x7999, 0x7999], /* CJK Ideograph */ + [0x799a, 0x799a], /* CJK Ideograph */ + [0x799b, 0x799b], /* CJK Ideograph */ + [0x799c, 0x799c], /* CJK Ideograph */ + [0x799d, 0x799d], /* CJK Ideograph */ + [0x799e, 0x799e], /* CJK Ideograph */ + [0x799f, 0x799f], /* CJK Ideograph */ + [0x79a0, 0x79a0], /* CJK Ideograph */ + [0x79a1, 0x79a1], /* CJK Ideograph */ + [0x79a2, 0x79a2], /* CJK Ideograph */ + [0x79a3, 0x79a3], /* CJK Ideograph */ + [0x79a4, 0x79a4], /* CJK Ideograph */ + [0x79a5, 0x79a5], /* CJK Ideograph */ + [0x79a6, 0x79a6], /* CJK Ideograph */ + [0x79a7, 0x79a7], /* CJK Ideograph */ + [0x79a8, 0x79a8], /* CJK Ideograph */ + [0x79a9, 0x79a9], /* CJK Ideograph */ + [0x79aa, 0x79aa], /* CJK Ideograph */ + [0x79ab, 0x79ab], /* CJK Ideograph */ + [0x79ac, 0x79ac], /* CJK Ideograph */ + [0x79ad, 0x79ad], /* CJK Ideograph */ + [0x79ae, 0x79ae], /* CJK Ideograph */ + [0x79af, 0x79af], /* CJK Ideograph */ + [0x79b0, 0x79b0], /* CJK Ideograph */ + [0x79b1, 0x79b1], /* CJK Ideograph */ + [0x79b2, 0x79b2], /* CJK Ideograph */ + [0x79b3, 0x79b3], /* CJK Ideograph */ + [0x79b4, 0x79b4], /* CJK Ideograph */ + [0x79b5, 0x79b5], /* CJK Ideograph */ + [0x79b6, 0x79b6], /* CJK Ideograph */ + [0x79b7, 0x79b7], /* CJK Ideograph */ + [0x79b8, 0x79b8], /* CJK Ideograph */ + [0x79b9, 0x79b9], /* CJK Ideograph */ + [0x79ba, 0x79ba], /* CJK Ideograph */ + [0x79bb, 0x79bb], /* CJK Ideograph */ + [0x79bc, 0x79bc], /* CJK Ideograph */ + [0x79bd, 0x79bd], /* CJK Ideograph */ + [0x79be, 0x79be], /* CJK Ideograph */ + [0x79bf, 0x79bf], /* CJK Ideograph */ + [0x79c0, 0x79c0], /* CJK Ideograph */ + [0x79c1, 0x79c1], /* CJK Ideograph */ + [0x79c2, 0x79c2], /* CJK Ideograph */ + [0x79c3, 0x79c3], /* CJK Ideograph */ + [0x79c4, 0x79c4], /* CJK Ideograph */ + [0x79c5, 0x79c5], /* CJK Ideograph */ + [0x79c6, 0x79c6], /* CJK Ideograph */ + [0x79c7, 0x79c7], /* CJK Ideograph */ + [0x79c8, 0x79c8], /* CJK Ideograph */ + [0x79c9, 0x79c9], /* CJK Ideograph */ + [0x79ca, 0x79ca], /* CJK Ideograph */ + [0x79cb, 0x79cb], /* CJK Ideograph */ + [0x79cc, 0x79cc], /* CJK Ideograph */ + [0x79cd, 0x79cd], /* CJK Ideograph */ + [0x79ce, 0x79ce], /* CJK Ideograph */ + [0x79cf, 0x79cf], /* CJK Ideograph */ + [0x79d0, 0x79d0], /* CJK Ideograph */ + [0x79d1, 0x79d1], /* CJK Ideograph */ + [0x79d2, 0x79d2], /* CJK Ideograph */ + [0x79d3, 0x79d3], /* CJK Ideograph */ + [0x79d4, 0x79d4], /* CJK Ideograph */ + [0x79d5, 0x79d5], /* CJK Ideograph */ + [0x79d6, 0x79d6], /* CJK Ideograph */ + [0x79d7, 0x79d7], /* CJK Ideograph */ + [0x79d8, 0x79d8], /* CJK Ideograph */ + [0x79d9, 0x79d9], /* CJK Ideograph */ + [0x79da, 0x79da], /* CJK Ideograph */ + [0x79db, 0x79db], /* CJK Ideograph */ + [0x79dc, 0x79dc], /* CJK Ideograph */ + [0x79dd, 0x79dd], /* CJK Ideograph */ + [0x79de, 0x79de], /* CJK Ideograph */ + [0x79df, 0x79df], /* CJK Ideograph */ + [0x79e0, 0x79e0], /* CJK Ideograph */ + [0x79e1, 0x79e1], /* CJK Ideograph */ + [0x79e2, 0x79e2], /* CJK Ideograph */ + [0x79e3, 0x79e3], /* CJK Ideograph */ + [0x79e4, 0x79e4], /* CJK Ideograph */ + [0x79e5, 0x79e5], /* CJK Ideograph */ + [0x79e6, 0x79e6], /* CJK Ideograph */ + [0x79e7, 0x79e7], /* CJK Ideograph */ + [0x79e8, 0x79e8], /* CJK Ideograph */ + [0x79e9, 0x79e9], /* CJK Ideograph */ + [0x79ea, 0x79ea], /* CJK Ideograph */ + [0x79eb, 0x79eb], /* CJK Ideograph */ + [0x79ec, 0x79ec], /* CJK Ideograph */ + [0x79ed, 0x79ed], /* CJK Ideograph */ + [0x79ee, 0x79ee], /* CJK Ideograph */ + [0x79ef, 0x79ef], /* CJK Ideograph */ + [0x79f0, 0x79f0], /* CJK Ideograph */ + [0x79f1, 0x79f1], /* CJK Ideograph */ + [0x79f2, 0x79f2], /* CJK Ideograph */ + [0x79f3, 0x79f3], /* CJK Ideograph */ + [0x79f4, 0x79f4], /* CJK Ideograph */ + [0x79f5, 0x79f5], /* CJK Ideograph */ + [0x79f6, 0x79f6], /* CJK Ideograph */ + [0x79f7, 0x79f7], /* CJK Ideograph */ + [0x79f8, 0x79f8], /* CJK Ideograph */ + [0x79f9, 0x79f9], /* CJK Ideograph */ + [0x79fa, 0x79fa], /* CJK Ideograph */ + [0x79fb, 0x79fb], /* CJK Ideograph */ + [0x79fc, 0x79fc], /* CJK Ideograph */ + [0x79fd, 0x79fd], /* CJK Ideograph */ + [0x79fe, 0x79fe], /* CJK Ideograph */ + [0x79ff, 0x79ff], /* CJK Ideograph */ + [0x7a00, 0x7a00], /* CJK Ideograph */ + [0x7a01, 0x7a01], /* CJK Ideograph */ + [0x7a02, 0x7a02], /* CJK Ideograph */ + [0x7a03, 0x7a03], /* CJK Ideograph */ + [0x7a04, 0x7a04], /* CJK Ideograph */ + [0x7a05, 0x7a05], /* CJK Ideograph */ + [0x7a06, 0x7a06], /* CJK Ideograph */ + [0x7a07, 0x7a07], /* CJK Ideograph */ + [0x7a08, 0x7a08], /* CJK Ideograph */ + [0x7a09, 0x7a09], /* CJK Ideograph */ + [0x7a0a, 0x7a0a], /* CJK Ideograph */ + [0x7a0b, 0x7a0b], /* CJK Ideograph */ + [0x7a0c, 0x7a0c], /* CJK Ideograph */ + [0x7a0d, 0x7a0d], /* CJK Ideograph */ + [0x7a0e, 0x7a0e], /* CJK Ideograph */ + [0x7a0f, 0x7a0f], /* CJK Ideograph */ + [0x7a10, 0x7a10], /* CJK Ideograph */ + [0x7a11, 0x7a11], /* CJK Ideograph */ + [0x7a12, 0x7a12], /* CJK Ideograph */ + [0x7a13, 0x7a13], /* CJK Ideograph */ + [0x7a14, 0x7a14], /* CJK Ideograph */ + [0x7a15, 0x7a15], /* CJK Ideograph */ + [0x7a16, 0x7a16], /* CJK Ideograph */ + [0x7a17, 0x7a17], /* CJK Ideograph */ + [0x7a18, 0x7a18], /* CJK Ideograph */ + [0x7a19, 0x7a19], /* CJK Ideograph */ + [0x7a1a, 0x7a1a], /* CJK Ideograph */ + [0x7a1b, 0x7a1b], /* CJK Ideograph */ + [0x7a1c, 0x7a1c], /* CJK Ideograph */ + [0x7a1d, 0x7a1d], /* CJK Ideograph */ + [0x7a1e, 0x7a1e], /* CJK Ideograph */ + [0x7a1f, 0x7a1f], /* CJK Ideograph */ + [0x7a20, 0x7a20], /* CJK Ideograph */ + [0x7a21, 0x7a21], /* CJK Ideograph */ + [0x7a22, 0x7a22], /* CJK Ideograph */ + [0x7a23, 0x7a23], /* CJK Ideograph */ + [0x7a24, 0x7a24], /* CJK Ideograph */ + [0x7a25, 0x7a25], /* CJK Ideograph */ + [0x7a26, 0x7a26], /* CJK Ideograph */ + [0x7a27, 0x7a27], /* CJK Ideograph */ + [0x7a28, 0x7a28], /* CJK Ideograph */ + [0x7a29, 0x7a29], /* CJK Ideograph */ + [0x7a2a, 0x7a2a], /* CJK Ideograph */ + [0x7a2b, 0x7a2b], /* CJK Ideograph */ + [0x7a2c, 0x7a2c], /* CJK Ideograph */ + [0x7a2d, 0x7a2d], /* CJK Ideograph */ + [0x7a2e, 0x7a2e], /* CJK Ideograph */ + [0x7a2f, 0x7a2f], /* CJK Ideograph */ + [0x7a30, 0x7a30], /* CJK Ideograph */ + [0x7a31, 0x7a31], /* CJK Ideograph */ + [0x7a32, 0x7a32], /* CJK Ideograph */ + [0x7a33, 0x7a33], /* CJK Ideograph */ + [0x7a34, 0x7a34], /* CJK Ideograph */ + [0x7a35, 0x7a35], /* CJK Ideograph */ + [0x7a36, 0x7a36], /* CJK Ideograph */ + [0x7a37, 0x7a37], /* CJK Ideograph */ + [0x7a38, 0x7a38], /* CJK Ideograph */ + [0x7a39, 0x7a39], /* CJK Ideograph */ + [0x7a3a, 0x7a3a], /* CJK Ideograph */ + [0x7a3b, 0x7a3b], /* CJK Ideograph */ + [0x7a3c, 0x7a3c], /* CJK Ideograph */ + [0x7a3d, 0x7a3d], /* CJK Ideograph */ + [0x7a3e, 0x7a3e], /* CJK Ideograph */ + [0x7a3f, 0x7a3f], /* CJK Ideograph */ + [0x7a40, 0x7a40], /* CJK Ideograph */ + [0x7a41, 0x7a41], /* CJK Ideograph */ + [0x7a42, 0x7a42], /* CJK Ideograph */ + [0x7a43, 0x7a43], /* CJK Ideograph */ + [0x7a44, 0x7a44], /* CJK Ideograph */ + [0x7a45, 0x7a45], /* CJK Ideograph */ + [0x7a46, 0x7a46], /* CJK Ideograph */ + [0x7a47, 0x7a47], /* CJK Ideograph */ + [0x7a48, 0x7a48], /* CJK Ideograph */ + [0x7a49, 0x7a49], /* CJK Ideograph */ + [0x7a4a, 0x7a4a], /* CJK Ideograph */ + [0x7a4b, 0x7a4b], /* CJK Ideograph */ + [0x7a4c, 0x7a4c], /* CJK Ideograph */ + [0x7a4d, 0x7a4d], /* CJK Ideograph */ + [0x7a4e, 0x7a4e], /* CJK Ideograph */ + [0x7a4f, 0x7a4f], /* CJK Ideograph */ + [0x7a50, 0x7a50], /* CJK Ideograph */ + [0x7a51, 0x7a51], /* CJK Ideograph */ + [0x7a52, 0x7a52], /* CJK Ideograph */ + [0x7a53, 0x7a53], /* CJK Ideograph */ + [0x7a54, 0x7a54], /* CJK Ideograph */ + [0x7a55, 0x7a55], /* CJK Ideograph */ + [0x7a56, 0x7a56], /* CJK Ideograph */ + [0x7a57, 0x7a57], /* CJK Ideograph */ + [0x7a58, 0x7a58], /* CJK Ideograph */ + [0x7a59, 0x7a59], /* CJK Ideograph */ + [0x7a5a, 0x7a5a], /* CJK Ideograph */ + [0x7a5b, 0x7a5b], /* CJK Ideograph */ + [0x7a5c, 0x7a5c], /* CJK Ideograph */ + [0x7a5d, 0x7a5d], /* CJK Ideograph */ + [0x7a5e, 0x7a5e], /* CJK Ideograph */ + [0x7a5f, 0x7a5f], /* CJK Ideograph */ + [0x7a60, 0x7a60], /* CJK Ideograph */ + [0x7a61, 0x7a61], /* CJK Ideograph */ + [0x7a62, 0x7a62], /* CJK Ideograph */ + [0x7a63, 0x7a63], /* CJK Ideograph */ + [0x7a64, 0x7a64], /* CJK Ideograph */ + [0x7a65, 0x7a65], /* CJK Ideograph */ + [0x7a66, 0x7a66], /* CJK Ideograph */ + [0x7a67, 0x7a67], /* CJK Ideograph */ + [0x7a68, 0x7a68], /* CJK Ideograph */ + [0x7a69, 0x7a69], /* CJK Ideograph */ + [0x7a6a, 0x7a6a], /* CJK Ideograph */ + [0x7a6b, 0x7a6b], /* CJK Ideograph */ + [0x7a6c, 0x7a6c], /* CJK Ideograph */ + [0x7a6d, 0x7a6d], /* CJK Ideograph */ + [0x7a6e, 0x7a6e], /* CJK Ideograph */ + [0x7a6f, 0x7a6f], /* CJK Ideograph */ + [0x7a70, 0x7a70], /* CJK Ideograph */ + [0x7a71, 0x7a71], /* CJK Ideograph */ + [0x7a72, 0x7a72], /* CJK Ideograph */ + [0x7a73, 0x7a73], /* CJK Ideograph */ + [0x7a74, 0x7a74], /* CJK Ideograph */ + [0x7a75, 0x7a75], /* CJK Ideograph */ + [0x7a76, 0x7a76], /* CJK Ideograph */ + [0x7a77, 0x7a77], /* CJK Ideograph */ + [0x7a78, 0x7a78], /* CJK Ideograph */ + [0x7a79, 0x7a79], /* CJK Ideograph */ + [0x7a7a, 0x7a7a], /* CJK Ideograph */ + [0x7a7b, 0x7a7b], /* CJK Ideograph */ + [0x7a7c, 0x7a7c], /* CJK Ideograph */ + [0x7a7d, 0x7a7d], /* CJK Ideograph */ + [0x7a7e, 0x7a7e], /* CJK Ideograph */ + [0x7a7f, 0x7a7f], /* CJK Ideograph */ + [0x7a80, 0x7a80], /* CJK Ideograph */ + [0x7a81, 0x7a81], /* CJK Ideograph */ + [0x7a82, 0x7a82], /* CJK Ideograph */ + [0x7a83, 0x7a83], /* CJK Ideograph */ + [0x7a84, 0x7a84], /* CJK Ideograph */ + [0x7a85, 0x7a85], /* CJK Ideograph */ + [0x7a86, 0x7a86], /* CJK Ideograph */ + [0x7a87, 0x7a87], /* CJK Ideograph */ + [0x7a88, 0x7a88], /* CJK Ideograph */ + [0x7a89, 0x7a89], /* CJK Ideograph */ + [0x7a8a, 0x7a8a], /* CJK Ideograph */ + [0x7a8b, 0x7a8b], /* CJK Ideograph */ + [0x7a8c, 0x7a8c], /* CJK Ideograph */ + [0x7a8d, 0x7a8d], /* CJK Ideograph */ + [0x7a8e, 0x7a8e], /* CJK Ideograph */ + [0x7a8f, 0x7a8f], /* CJK Ideograph */ + [0x7a90, 0x7a90], /* CJK Ideograph */ + [0x7a91, 0x7a91], /* CJK Ideograph */ + [0x7a92, 0x7a92], /* CJK Ideograph */ + [0x7a93, 0x7a93], /* CJK Ideograph */ + [0x7a94, 0x7a94], /* CJK Ideograph */ + [0x7a95, 0x7a95], /* CJK Ideograph */ + [0x7a96, 0x7a96], /* CJK Ideograph */ + [0x7a97, 0x7a97], /* CJK Ideograph */ + [0x7a98, 0x7a98], /* CJK Ideograph */ + [0x7a99, 0x7a99], /* CJK Ideograph */ + [0x7a9a, 0x7a9a], /* CJK Ideograph */ + [0x7a9b, 0x7a9b], /* CJK Ideograph */ + [0x7a9c, 0x7a9c], /* CJK Ideograph */ + [0x7a9d, 0x7a9d], /* CJK Ideograph */ + [0x7a9e, 0x7a9e], /* CJK Ideograph */ + [0x7a9f, 0x7a9f], /* CJK Ideograph */ + [0x7aa0, 0x7aa0], /* CJK Ideograph */ + [0x7aa1, 0x7aa1], /* CJK Ideograph */ + [0x7aa2, 0x7aa2], /* CJK Ideograph */ + [0x7aa3, 0x7aa3], /* CJK Ideograph */ + [0x7aa4, 0x7aa4], /* CJK Ideograph */ + [0x7aa5, 0x7aa5], /* CJK Ideograph */ + [0x7aa6, 0x7aa6], /* CJK Ideograph */ + [0x7aa7, 0x7aa7], /* CJK Ideograph */ + [0x7aa8, 0x7aa8], /* CJK Ideograph */ + [0x7aa9, 0x7aa9], /* CJK Ideograph */ + [0x7aaa, 0x7aaa], /* CJK Ideograph */ + [0x7aab, 0x7aab], /* CJK Ideograph */ + [0x7aac, 0x7aac], /* CJK Ideograph */ + [0x7aad, 0x7aad], /* CJK Ideograph */ + [0x7aae, 0x7aae], /* CJK Ideograph */ + [0x7aaf, 0x7aaf], /* CJK Ideograph */ + [0x7ab0, 0x7ab0], /* CJK Ideograph */ + [0x7ab1, 0x7ab1], /* CJK Ideograph */ + [0x7ab2, 0x7ab2], /* CJK Ideograph */ + [0x7ab3, 0x7ab3], /* CJK Ideograph */ + [0x7ab4, 0x7ab4], /* CJK Ideograph */ + [0x7ab5, 0x7ab5], /* CJK Ideograph */ + [0x7ab6, 0x7ab6], /* CJK Ideograph */ + [0x7ab7, 0x7ab7], /* CJK Ideograph */ + [0x7ab8, 0x7ab8], /* CJK Ideograph */ + [0x7ab9, 0x7ab9], /* CJK Ideograph */ + [0x7aba, 0x7aba], /* CJK Ideograph */ + [0x7abb, 0x7abb], /* CJK Ideograph */ + [0x7abc, 0x7abc], /* CJK Ideograph */ + [0x7abd, 0x7abd], /* CJK Ideograph */ + [0x7abe, 0x7abe], /* CJK Ideograph */ + [0x7abf, 0x7abf], /* CJK Ideograph */ + [0x7ac0, 0x7ac0], /* CJK Ideograph */ + [0x7ac1, 0x7ac1], /* CJK Ideograph */ + [0x7ac2, 0x7ac2], /* CJK Ideograph */ + [0x7ac3, 0x7ac3], /* CJK Ideograph */ + [0x7ac4, 0x7ac4], /* CJK Ideograph */ + [0x7ac5, 0x7ac5], /* CJK Ideograph */ + [0x7ac6, 0x7ac6], /* CJK Ideograph */ + [0x7ac7, 0x7ac7], /* CJK Ideograph */ + [0x7ac8, 0x7ac8], /* CJK Ideograph */ + [0x7ac9, 0x7ac9], /* CJK Ideograph */ + [0x7aca, 0x7aca], /* CJK Ideograph */ + [0x7acb, 0x7acb], /* CJK Ideograph */ + [0x7acc, 0x7acc], /* CJK Ideograph */ + [0x7acd, 0x7acd], /* CJK Ideograph */ + [0x7ace, 0x7ace], /* CJK Ideograph */ + [0x7acf, 0x7acf], /* CJK Ideograph */ + [0x7ad0, 0x7ad0], /* CJK Ideograph */ + [0x7ad1, 0x7ad1], /* CJK Ideograph */ + [0x7ad2, 0x7ad2], /* CJK Ideograph */ + [0x7ad3, 0x7ad3], /* CJK Ideograph */ + [0x7ad4, 0x7ad4], /* CJK Ideograph */ + [0x7ad5, 0x7ad5], /* CJK Ideograph */ + [0x7ad6, 0x7ad6], /* CJK Ideograph */ + [0x7ad7, 0x7ad7], /* CJK Ideograph */ + [0x7ad8, 0x7ad8], /* CJK Ideograph */ + [0x7ad9, 0x7ad9], /* CJK Ideograph */ + [0x7ada, 0x7ada], /* CJK Ideograph */ + [0x7adb, 0x7adb], /* CJK Ideograph */ + [0x7adc, 0x7adc], /* CJK Ideograph */ + [0x7add, 0x7add], /* CJK Ideograph */ + [0x7ade, 0x7ade], /* CJK Ideograph */ + [0x7adf, 0x7adf], /* CJK Ideograph */ + [0x7ae0, 0x7ae0], /* CJK Ideograph */ + [0x7ae1, 0x7ae1], /* CJK Ideograph */ + [0x7ae2, 0x7ae2], /* CJK Ideograph */ + [0x7ae3, 0x7ae3], /* CJK Ideograph */ + [0x7ae4, 0x7ae4], /* CJK Ideograph */ + [0x7ae5, 0x7ae5], /* CJK Ideograph */ + [0x7ae6, 0x7ae6], /* CJK Ideograph */ + [0x7ae7, 0x7ae7], /* CJK Ideograph */ + [0x7ae8, 0x7ae8], /* CJK Ideograph */ + [0x7ae9, 0x7ae9], /* CJK Ideograph */ + [0x7aea, 0x7aea], /* CJK Ideograph */ + [0x7aeb, 0x7aeb], /* CJK Ideograph */ + [0x7aec, 0x7aec], /* CJK Ideograph */ + [0x7aed, 0x7aed], /* CJK Ideograph */ + [0x7aee, 0x7aee], /* CJK Ideograph */ + [0x7aef, 0x7aef], /* CJK Ideograph */ + [0x7af0, 0x7af0], /* CJK Ideograph */ + [0x7af1, 0x7af1], /* CJK Ideograph */ + [0x7af2, 0x7af2], /* CJK Ideograph */ + [0x7af3, 0x7af3], /* CJK Ideograph */ + [0x7af4, 0x7af4], /* CJK Ideograph */ + [0x7af5, 0x7af5], /* CJK Ideograph */ + [0x7af6, 0x7af6], /* CJK Ideograph */ + [0x7af7, 0x7af7], /* CJK Ideograph */ + [0x7af8, 0x7af8], /* CJK Ideograph */ + [0x7af9, 0x7af9], /* CJK Ideograph */ + [0x7afa, 0x7afa], /* CJK Ideograph */ + [0x7afb, 0x7afb], /* CJK Ideograph */ + [0x7afc, 0x7afc], /* CJK Ideograph */ + [0x7afd, 0x7afd], /* CJK Ideograph */ + [0x7afe, 0x7afe], /* CJK Ideograph */ + [0x7aff, 0x7aff], /* CJK Ideograph */ + [0x7b00, 0x7b00], /* CJK Ideograph */ + [0x7b01, 0x7b01], /* CJK Ideograph */ + [0x7b02, 0x7b02], /* CJK Ideograph */ + [0x7b03, 0x7b03], /* CJK Ideograph */ + [0x7b04, 0x7b04], /* CJK Ideograph */ + [0x7b05, 0x7b05], /* CJK Ideograph */ + [0x7b06, 0x7b06], /* CJK Ideograph */ + [0x7b07, 0x7b07], /* CJK Ideograph */ + [0x7b08, 0x7b08], /* CJK Ideograph */ + [0x7b09, 0x7b09], /* CJK Ideograph */ + [0x7b0a, 0x7b0a], /* CJK Ideograph */ + [0x7b0b, 0x7b0b], /* CJK Ideograph */ + [0x7b0c, 0x7b0c], /* CJK Ideograph */ + [0x7b0d, 0x7b0d], /* CJK Ideograph */ + [0x7b0e, 0x7b0e], /* CJK Ideograph */ + [0x7b0f, 0x7b0f], /* CJK Ideograph */ + [0x7b10, 0x7b10], /* CJK Ideograph */ + [0x7b11, 0x7b11], /* CJK Ideograph */ + [0x7b12, 0x7b12], /* CJK Ideograph */ + [0x7b13, 0x7b13], /* CJK Ideograph */ + [0x7b14, 0x7b14], /* CJK Ideograph */ + [0x7b15, 0x7b15], /* CJK Ideograph */ + [0x7b16, 0x7b16], /* CJK Ideograph */ + [0x7b17, 0x7b17], /* CJK Ideograph */ + [0x7b18, 0x7b18], /* CJK Ideograph */ + [0x7b19, 0x7b19], /* CJK Ideograph */ + [0x7b1a, 0x7b1a], /* CJK Ideograph */ + [0x7b1b, 0x7b1b], /* CJK Ideograph */ + [0x7b1c, 0x7b1c], /* CJK Ideograph */ + [0x7b1d, 0x7b1d], /* CJK Ideograph */ + [0x7b1e, 0x7b1e], /* CJK Ideograph */ + [0x7b1f, 0x7b1f], /* CJK Ideograph */ + [0x7b20, 0x7b20], /* CJK Ideograph */ + [0x7b21, 0x7b21], /* CJK Ideograph */ + [0x7b22, 0x7b22], /* CJK Ideograph */ + [0x7b23, 0x7b23], /* CJK Ideograph */ + [0x7b24, 0x7b24], /* CJK Ideograph */ + [0x7b25, 0x7b25], /* CJK Ideograph */ + [0x7b26, 0x7b26], /* CJK Ideograph */ + [0x7b27, 0x7b27], /* CJK Ideograph */ + [0x7b28, 0x7b28], /* CJK Ideograph */ + [0x7b29, 0x7b29], /* CJK Ideograph */ + [0x7b2a, 0x7b2a], /* CJK Ideograph */ + [0x7b2b, 0x7b2b], /* CJK Ideograph */ + [0x7b2c, 0x7b2c], /* CJK Ideograph */ + [0x7b2d, 0x7b2d], /* CJK Ideograph */ + [0x7b2e, 0x7b2e], /* CJK Ideograph */ + [0x7b2f, 0x7b2f], /* CJK Ideograph */ + [0x7b30, 0x7b30], /* CJK Ideograph */ + [0x7b31, 0x7b31], /* CJK Ideograph */ + [0x7b32, 0x7b32], /* CJK Ideograph */ + [0x7b33, 0x7b33], /* CJK Ideograph */ + [0x7b34, 0x7b34], /* CJK Ideograph */ + [0x7b35, 0x7b35], /* CJK Ideograph */ + [0x7b36, 0x7b36], /* CJK Ideograph */ + [0x7b37, 0x7b37], /* CJK Ideograph */ + [0x7b38, 0x7b38], /* CJK Ideograph */ + [0x7b39, 0x7b39], /* CJK Ideograph */ + [0x7b3a, 0x7b3a], /* CJK Ideograph */ + [0x7b3b, 0x7b3b], /* CJK Ideograph */ + [0x7b3c, 0x7b3c], /* CJK Ideograph */ + [0x7b3d, 0x7b3d], /* CJK Ideograph */ + [0x7b3e, 0x7b3e], /* CJK Ideograph */ + [0x7b3f, 0x7b3f], /* CJK Ideograph */ + [0x7b40, 0x7b40], /* CJK Ideograph */ + [0x7b41, 0x7b41], /* CJK Ideograph */ + [0x7b42, 0x7b42], /* CJK Ideograph */ + [0x7b43, 0x7b43], /* CJK Ideograph */ + [0x7b44, 0x7b44], /* CJK Ideograph */ + [0x7b45, 0x7b45], /* CJK Ideograph */ + [0x7b46, 0x7b46], /* CJK Ideograph */ + [0x7b47, 0x7b47], /* CJK Ideograph */ + [0x7b48, 0x7b48], /* CJK Ideograph */ + [0x7b49, 0x7b49], /* CJK Ideograph */ + [0x7b4a, 0x7b4a], /* CJK Ideograph */ + [0x7b4b, 0x7b4b], /* CJK Ideograph */ + [0x7b4c, 0x7b4c], /* CJK Ideograph */ + [0x7b4d, 0x7b4d], /* CJK Ideograph */ + [0x7b4e, 0x7b4e], /* CJK Ideograph */ + [0x7b4f, 0x7b4f], /* CJK Ideograph */ + [0x7b50, 0x7b50], /* CJK Ideograph */ + [0x7b51, 0x7b51], /* CJK Ideograph */ + [0x7b52, 0x7b52], /* CJK Ideograph */ + [0x7b53, 0x7b53], /* CJK Ideograph */ + [0x7b54, 0x7b54], /* CJK Ideograph */ + [0x7b55, 0x7b55], /* CJK Ideograph */ + [0x7b56, 0x7b56], /* CJK Ideograph */ + [0x7b57, 0x7b57], /* CJK Ideograph */ + [0x7b58, 0x7b58], /* CJK Ideograph */ + [0x7b59, 0x7b59], /* CJK Ideograph */ + [0x7b5a, 0x7b5a], /* CJK Ideograph */ + [0x7b5b, 0x7b5b], /* CJK Ideograph */ + [0x7b5c, 0x7b5c], /* CJK Ideograph */ + [0x7b5d, 0x7b5d], /* CJK Ideograph */ + [0x7b5e, 0x7b5e], /* CJK Ideograph */ + [0x7b5f, 0x7b5f], /* CJK Ideograph */ + [0x7b60, 0x7b60], /* CJK Ideograph */ + [0x7b61, 0x7b61], /* CJK Ideograph */ + [0x7b62, 0x7b62], /* CJK Ideograph */ + [0x7b63, 0x7b63], /* CJK Ideograph */ + [0x7b64, 0x7b64], /* CJK Ideograph */ + [0x7b65, 0x7b65], /* CJK Ideograph */ + [0x7b66, 0x7b66], /* CJK Ideograph */ + [0x7b67, 0x7b67], /* CJK Ideograph */ + [0x7b68, 0x7b68], /* CJK Ideograph */ + [0x7b69, 0x7b69], /* CJK Ideograph */ + [0x7b6a, 0x7b6a], /* CJK Ideograph */ + [0x7b6b, 0x7b6b], /* CJK Ideograph */ + [0x7b6c, 0x7b6c], /* CJK Ideograph */ + [0x7b6d, 0x7b6d], /* CJK Ideograph */ + [0x7b6e, 0x7b6e], /* CJK Ideograph */ + [0x7b6f, 0x7b6f], /* CJK Ideograph */ + [0x7b70, 0x7b70], /* CJK Ideograph */ + [0x7b71, 0x7b71], /* CJK Ideograph */ + [0x7b72, 0x7b72], /* CJK Ideograph */ + [0x7b73, 0x7b73], /* CJK Ideograph */ + [0x7b74, 0x7b74], /* CJK Ideograph */ + [0x7b75, 0x7b75], /* CJK Ideograph */ + [0x7b76, 0x7b76], /* CJK Ideograph */ + [0x7b77, 0x7b77], /* CJK Ideograph */ + [0x7b78, 0x7b78], /* CJK Ideograph */ + [0x7b79, 0x7b79], /* CJK Ideograph */ + [0x7b7a, 0x7b7a], /* CJK Ideograph */ + [0x7b7b, 0x7b7b], /* CJK Ideograph */ + [0x7b7c, 0x7b7c], /* CJK Ideograph */ + [0x7b7d, 0x7b7d], /* CJK Ideograph */ + [0x7b7e, 0x7b7e], /* CJK Ideograph */ + [0x7b7f, 0x7b7f], /* CJK Ideograph */ + [0x7b80, 0x7b80], /* CJK Ideograph */ + [0x7b81, 0x7b81], /* CJK Ideograph */ + [0x7b82, 0x7b82], /* CJK Ideograph */ + [0x7b83, 0x7b83], /* CJK Ideograph */ + [0x7b84, 0x7b84], /* CJK Ideograph */ + [0x7b85, 0x7b85], /* CJK Ideograph */ + [0x7b86, 0x7b86], /* CJK Ideograph */ + [0x7b87, 0x7b87], /* CJK Ideograph */ + [0x7b88, 0x7b88], /* CJK Ideograph */ + [0x7b89, 0x7b89], /* CJK Ideograph */ + [0x7b8a, 0x7b8a], /* CJK Ideograph */ + [0x7b8b, 0x7b8b], /* CJK Ideograph */ + [0x7b8c, 0x7b8c], /* CJK Ideograph */ + [0x7b8d, 0x7b8d], /* CJK Ideograph */ + [0x7b8e, 0x7b8e], /* CJK Ideograph */ + [0x7b8f, 0x7b8f], /* CJK Ideograph */ + [0x7b90, 0x7b90], /* CJK Ideograph */ + [0x7b91, 0x7b91], /* CJK Ideograph */ + [0x7b92, 0x7b92], /* CJK Ideograph */ + [0x7b93, 0x7b93], /* CJK Ideograph */ + [0x7b94, 0x7b94], /* CJK Ideograph */ + [0x7b95, 0x7b95], /* CJK Ideograph */ + [0x7b96, 0x7b96], /* CJK Ideograph */ + [0x7b97, 0x7b97], /* CJK Ideograph */ + [0x7b98, 0x7b98], /* CJK Ideograph */ + [0x7b99, 0x7b99], /* CJK Ideograph */ + [0x7b9a, 0x7b9a], /* CJK Ideograph */ + [0x7b9b, 0x7b9b], /* CJK Ideograph */ + [0x7b9c, 0x7b9c], /* CJK Ideograph */ + [0x7b9d, 0x7b9d], /* CJK Ideograph */ + [0x7b9e, 0x7b9e], /* CJK Ideograph */ + [0x7b9f, 0x7b9f], /* CJK Ideograph */ + [0x7ba0, 0x7ba0], /* CJK Ideograph */ + [0x7ba1, 0x7ba1], /* CJK Ideograph */ + [0x7ba2, 0x7ba2], /* CJK Ideograph */ + [0x7ba3, 0x7ba3], /* CJK Ideograph */ + [0x7ba4, 0x7ba4], /* CJK Ideograph */ + [0x7ba5, 0x7ba5], /* CJK Ideograph */ + [0x7ba6, 0x7ba6], /* CJK Ideograph */ + [0x7ba7, 0x7ba7], /* CJK Ideograph */ + [0x7ba8, 0x7ba8], /* CJK Ideograph */ + [0x7ba9, 0x7ba9], /* CJK Ideograph */ + [0x7baa, 0x7baa], /* CJK Ideograph */ + [0x7bab, 0x7bab], /* CJK Ideograph */ + [0x7bac, 0x7bac], /* CJK Ideograph */ + [0x7bad, 0x7bad], /* CJK Ideograph */ + [0x7bae, 0x7bae], /* CJK Ideograph */ + [0x7baf, 0x7baf], /* CJK Ideograph */ + [0x7bb0, 0x7bb0], /* CJK Ideograph */ + [0x7bb1, 0x7bb1], /* CJK Ideograph */ + [0x7bb2, 0x7bb2], /* CJK Ideograph */ + [0x7bb3, 0x7bb3], /* CJK Ideograph */ + [0x7bb4, 0x7bb4], /* CJK Ideograph */ + [0x7bb5, 0x7bb5], /* CJK Ideograph */ + [0x7bb6, 0x7bb6], /* CJK Ideograph */ + [0x7bb7, 0x7bb7], /* CJK Ideograph */ + [0x7bb8, 0x7bb8], /* CJK Ideograph */ + [0x7bb9, 0x7bb9], /* CJK Ideograph */ + [0x7bba, 0x7bba], /* CJK Ideograph */ + [0x7bbb, 0x7bbb], /* CJK Ideograph */ + [0x7bbc, 0x7bbc], /* CJK Ideograph */ + [0x7bbd, 0x7bbd], /* CJK Ideograph */ + [0x7bbe, 0x7bbe], /* CJK Ideograph */ + [0x7bbf, 0x7bbf], /* CJK Ideograph */ + [0x7bc0, 0x7bc0], /* CJK Ideograph */ + [0x7bc1, 0x7bc1], /* CJK Ideograph */ + [0x7bc2, 0x7bc2], /* CJK Ideograph */ + [0x7bc3, 0x7bc3], /* CJK Ideograph */ + [0x7bc4, 0x7bc4], /* CJK Ideograph */ + [0x7bc5, 0x7bc5], /* CJK Ideograph */ + [0x7bc6, 0x7bc6], /* CJK Ideograph */ + [0x7bc7, 0x7bc7], /* CJK Ideograph */ + [0x7bc8, 0x7bc8], /* CJK Ideograph */ + [0x7bc9, 0x7bc9], /* CJK Ideograph */ + [0x7bca, 0x7bca], /* CJK Ideograph */ + [0x7bcb, 0x7bcb], /* CJK Ideograph */ + [0x7bcc, 0x7bcc], /* CJK Ideograph */ + [0x7bcd, 0x7bcd], /* CJK Ideograph */ + [0x7bce, 0x7bce], /* CJK Ideograph */ + [0x7bcf, 0x7bcf], /* CJK Ideograph */ + [0x7bd0, 0x7bd0], /* CJK Ideograph */ + [0x7bd1, 0x7bd1], /* CJK Ideograph */ + [0x7bd2, 0x7bd2], /* CJK Ideograph */ + [0x7bd3, 0x7bd3], /* CJK Ideograph */ + [0x7bd4, 0x7bd4], /* CJK Ideograph */ + [0x7bd5, 0x7bd5], /* CJK Ideograph */ + [0x7bd6, 0x7bd6], /* CJK Ideograph */ + [0x7bd7, 0x7bd7], /* CJK Ideograph */ + [0x7bd8, 0x7bd8], /* CJK Ideograph */ + [0x7bd9, 0x7bd9], /* CJK Ideograph */ + [0x7bda, 0x7bda], /* CJK Ideograph */ + [0x7bdb, 0x7bdb], /* CJK Ideograph */ + [0x7bdc, 0x7bdc], /* CJK Ideograph */ + [0x7bdd, 0x7bdd], /* CJK Ideograph */ + [0x7bde, 0x7bde], /* CJK Ideograph */ + [0x7bdf, 0x7bdf], /* CJK Ideograph */ + [0x7be0, 0x7be0], /* CJK Ideograph */ + [0x7be1, 0x7be1], /* CJK Ideograph */ + [0x7be2, 0x7be2], /* CJK Ideograph */ + [0x7be3, 0x7be3], /* CJK Ideograph */ + [0x7be4, 0x7be4], /* CJK Ideograph */ + [0x7be5, 0x7be5], /* CJK Ideograph */ + [0x7be6, 0x7be6], /* CJK Ideograph */ + [0x7be7, 0x7be7], /* CJK Ideograph */ + [0x7be8, 0x7be8], /* CJK Ideograph */ + [0x7be9, 0x7be9], /* CJK Ideograph */ + [0x7bea, 0x7bea], /* CJK Ideograph */ + [0x7beb, 0x7beb], /* CJK Ideograph */ + [0x7bec, 0x7bec], /* CJK Ideograph */ + [0x7bed, 0x7bed], /* CJK Ideograph */ + [0x7bee, 0x7bee], /* CJK Ideograph */ + [0x7bef, 0x7bef], /* CJK Ideograph */ + [0x7bf0, 0x7bf0], /* CJK Ideograph */ + [0x7bf1, 0x7bf1], /* CJK Ideograph */ + [0x7bf2, 0x7bf2], /* CJK Ideograph */ + [0x7bf3, 0x7bf3], /* CJK Ideograph */ + [0x7bf4, 0x7bf4], /* CJK Ideograph */ + [0x7bf5, 0x7bf5], /* CJK Ideograph */ + [0x7bf6, 0x7bf6], /* CJK Ideograph */ + [0x7bf7, 0x7bf7], /* CJK Ideograph */ + [0x7bf8, 0x7bf8], /* CJK Ideograph */ + [0x7bf9, 0x7bf9], /* CJK Ideograph */ + [0x7bfa, 0x7bfa], /* CJK Ideograph */ + [0x7bfb, 0x7bfb], /* CJK Ideograph */ + [0x7bfc, 0x7bfc], /* CJK Ideograph */ + [0x7bfd, 0x7bfd], /* CJK Ideograph */ + [0x7bfe, 0x7bfe], /* CJK Ideograph */ + [0x7bff, 0x7bff], /* CJK Ideograph */ + [0x7c00, 0x7c00], /* CJK Ideograph */ + [0x7c01, 0x7c01], /* CJK Ideograph */ + [0x7c02, 0x7c02], /* CJK Ideograph */ + [0x7c03, 0x7c03], /* CJK Ideograph */ + [0x7c04, 0x7c04], /* CJK Ideograph */ + [0x7c05, 0x7c05], /* CJK Ideograph */ + [0x7c06, 0x7c06], /* CJK Ideograph */ + [0x7c07, 0x7c07], /* CJK Ideograph */ + [0x7c08, 0x7c08], /* CJK Ideograph */ + [0x7c09, 0x7c09], /* CJK Ideograph */ + [0x7c0a, 0x7c0a], /* CJK Ideograph */ + [0x7c0b, 0x7c0b], /* CJK Ideograph */ + [0x7c0c, 0x7c0c], /* CJK Ideograph */ + [0x7c0d, 0x7c0d], /* CJK Ideograph */ + [0x7c0e, 0x7c0e], /* CJK Ideograph */ + [0x7c0f, 0x7c0f], /* CJK Ideograph */ + [0x7c10, 0x7c10], /* CJK Ideograph */ + [0x7c11, 0x7c11], /* CJK Ideograph */ + [0x7c12, 0x7c12], /* CJK Ideograph */ + [0x7c13, 0x7c13], /* CJK Ideograph */ + [0x7c14, 0x7c14], /* CJK Ideograph */ + [0x7c15, 0x7c15], /* CJK Ideograph */ + [0x7c16, 0x7c16], /* CJK Ideograph */ + [0x7c17, 0x7c17], /* CJK Ideograph */ + [0x7c18, 0x7c18], /* CJK Ideograph */ + [0x7c19, 0x7c19], /* CJK Ideograph */ + [0x7c1a, 0x7c1a], /* CJK Ideograph */ + [0x7c1b, 0x7c1b], /* CJK Ideograph */ + [0x7c1c, 0x7c1c], /* CJK Ideograph */ + [0x7c1d, 0x7c1d], /* CJK Ideograph */ + [0x7c1e, 0x7c1e], /* CJK Ideograph */ + [0x7c1f, 0x7c1f], /* CJK Ideograph */ + [0x7c20, 0x7c20], /* CJK Ideograph */ + [0x7c21, 0x7c21], /* CJK Ideograph */ + [0x7c22, 0x7c22], /* CJK Ideograph */ + [0x7c23, 0x7c23], /* CJK Ideograph */ + [0x7c24, 0x7c24], /* CJK Ideograph */ + [0x7c25, 0x7c25], /* CJK Ideograph */ + [0x7c26, 0x7c26], /* CJK Ideograph */ + [0x7c27, 0x7c27], /* CJK Ideograph */ + [0x7c28, 0x7c28], /* CJK Ideograph */ + [0x7c29, 0x7c29], /* CJK Ideograph */ + [0x7c2a, 0x7c2a], /* CJK Ideograph */ + [0x7c2b, 0x7c2b], /* CJK Ideograph */ + [0x7c2c, 0x7c2c], /* CJK Ideograph */ + [0x7c2d, 0x7c2d], /* CJK Ideograph */ + [0x7c2e, 0x7c2e], /* CJK Ideograph */ + [0x7c2f, 0x7c2f], /* CJK Ideograph */ + [0x7c30, 0x7c30], /* CJK Ideograph */ + [0x7c31, 0x7c31], /* CJK Ideograph */ + [0x7c32, 0x7c32], /* CJK Ideograph */ + [0x7c33, 0x7c33], /* CJK Ideograph */ + [0x7c34, 0x7c34], /* CJK Ideograph */ + [0x7c35, 0x7c35], /* CJK Ideograph */ + [0x7c36, 0x7c36], /* CJK Ideograph */ + [0x7c37, 0x7c37], /* CJK Ideograph */ + [0x7c38, 0x7c38], /* CJK Ideograph */ + [0x7c39, 0x7c39], /* CJK Ideograph */ + [0x7c3a, 0x7c3a], /* CJK Ideograph */ + [0x7c3b, 0x7c3b], /* CJK Ideograph */ + [0x7c3c, 0x7c3c], /* CJK Ideograph */ + [0x7c3d, 0x7c3d], /* CJK Ideograph */ + [0x7c3e, 0x7c3e], /* CJK Ideograph */ + [0x7c3f, 0x7c3f], /* CJK Ideograph */ + [0x7c40, 0x7c40], /* CJK Ideograph */ + [0x7c41, 0x7c41], /* CJK Ideograph */ + [0x7c42, 0x7c42], /* CJK Ideograph */ + [0x7c43, 0x7c43], /* CJK Ideograph */ + [0x7c44, 0x7c44], /* CJK Ideograph */ + [0x7c45, 0x7c45], /* CJK Ideograph */ + [0x7c46, 0x7c46], /* CJK Ideograph */ + [0x7c47, 0x7c47], /* CJK Ideograph */ + [0x7c48, 0x7c48], /* CJK Ideograph */ + [0x7c49, 0x7c49], /* CJK Ideograph */ + [0x7c4a, 0x7c4a], /* CJK Ideograph */ + [0x7c4b, 0x7c4b], /* CJK Ideograph */ + [0x7c4c, 0x7c4c], /* CJK Ideograph */ + [0x7c4d, 0x7c4d], /* CJK Ideograph */ + [0x7c4e, 0x7c4e], /* CJK Ideograph */ + [0x7c4f, 0x7c4f], /* CJK Ideograph */ + [0x7c50, 0x7c50], /* CJK Ideograph */ + [0x7c51, 0x7c51], /* CJK Ideograph */ + [0x7c52, 0x7c52], /* CJK Ideograph */ + [0x7c53, 0x7c53], /* CJK Ideograph */ + [0x7c54, 0x7c54], /* CJK Ideograph */ + [0x7c55, 0x7c55], /* CJK Ideograph */ + [0x7c56, 0x7c56], /* CJK Ideograph */ + [0x7c57, 0x7c57], /* CJK Ideograph */ + [0x7c58, 0x7c58], /* CJK Ideograph */ + [0x7c59, 0x7c59], /* CJK Ideograph */ + [0x7c5a, 0x7c5a], /* CJK Ideograph */ + [0x7c5b, 0x7c5b], /* CJK Ideograph */ + [0x7c5c, 0x7c5c], /* CJK Ideograph */ + [0x7c5d, 0x7c5d], /* CJK Ideograph */ + [0x7c5e, 0x7c5e], /* CJK Ideograph */ + [0x7c5f, 0x7c5f], /* CJK Ideograph */ + [0x7c60, 0x7c60], /* CJK Ideograph */ + [0x7c61, 0x7c61], /* CJK Ideograph */ + [0x7c62, 0x7c62], /* CJK Ideograph */ + [0x7c63, 0x7c63], /* CJK Ideograph */ + [0x7c64, 0x7c64], /* CJK Ideograph */ + [0x7c65, 0x7c65], /* CJK Ideograph */ + [0x7c66, 0x7c66], /* CJK Ideograph */ + [0x7c67, 0x7c67], /* CJK Ideograph */ + [0x7c68, 0x7c68], /* CJK Ideograph */ + [0x7c69, 0x7c69], /* CJK Ideograph */ + [0x7c6a, 0x7c6a], /* CJK Ideograph */ + [0x7c6b, 0x7c6b], /* CJK Ideograph */ + [0x7c6c, 0x7c6c], /* CJK Ideograph */ + [0x7c6d, 0x7c6d], /* CJK Ideograph */ + [0x7c6e, 0x7c6e], /* CJK Ideograph */ + [0x7c6f, 0x7c6f], /* CJK Ideograph */ + [0x7c70, 0x7c70], /* CJK Ideograph */ + [0x7c71, 0x7c71], /* CJK Ideograph */ + [0x7c72, 0x7c72], /* CJK Ideograph */ + [0x7c73, 0x7c73], /* CJK Ideograph */ + [0x7c74, 0x7c74], /* CJK Ideograph */ + [0x7c75, 0x7c75], /* CJK Ideograph */ + [0x7c76, 0x7c76], /* CJK Ideograph */ + [0x7c77, 0x7c77], /* CJK Ideograph */ + [0x7c78, 0x7c78], /* CJK Ideograph */ + [0x7c79, 0x7c79], /* CJK Ideograph */ + [0x7c7a, 0x7c7a], /* CJK Ideograph */ + [0x7c7b, 0x7c7b], /* CJK Ideograph */ + [0x7c7c, 0x7c7c], /* CJK Ideograph */ + [0x7c7d, 0x7c7d], /* CJK Ideograph */ + [0x7c7e, 0x7c7e], /* CJK Ideograph */ + [0x7c7f, 0x7c7f], /* CJK Ideograph */ + [0x7c80, 0x7c80], /* CJK Ideograph */ + [0x7c81, 0x7c81], /* CJK Ideograph */ + [0x7c82, 0x7c82], /* CJK Ideograph */ + [0x7c83, 0x7c83], /* CJK Ideograph */ + [0x7c84, 0x7c84], /* CJK Ideograph */ + [0x7c85, 0x7c85], /* CJK Ideograph */ + [0x7c86, 0x7c86], /* CJK Ideograph */ + [0x7c87, 0x7c87], /* CJK Ideograph */ + [0x7c88, 0x7c88], /* CJK Ideograph */ + [0x7c89, 0x7c89], /* CJK Ideograph */ + [0x7c8a, 0x7c8a], /* CJK Ideograph */ + [0x7c8b, 0x7c8b], /* CJK Ideograph */ + [0x7c8c, 0x7c8c], /* CJK Ideograph */ + [0x7c8d, 0x7c8d], /* CJK Ideograph */ + [0x7c8e, 0x7c8e], /* CJK Ideograph */ + [0x7c8f, 0x7c8f], /* CJK Ideograph */ + [0x7c90, 0x7c90], /* CJK Ideograph */ + [0x7c91, 0x7c91], /* CJK Ideograph */ + [0x7c92, 0x7c92], /* CJK Ideograph */ + [0x7c93, 0x7c93], /* CJK Ideograph */ + [0x7c94, 0x7c94], /* CJK Ideograph */ + [0x7c95, 0x7c95], /* CJK Ideograph */ + [0x7c96, 0x7c96], /* CJK Ideograph */ + [0x7c97, 0x7c97], /* CJK Ideograph */ + [0x7c98, 0x7c98], /* CJK Ideograph */ + [0x7c99, 0x7c99], /* CJK Ideograph */ + [0x7c9a, 0x7c9a], /* CJK Ideograph */ + [0x7c9b, 0x7c9b], /* CJK Ideograph */ + [0x7c9c, 0x7c9c], /* CJK Ideograph */ + [0x7c9d, 0x7c9d], /* CJK Ideograph */ + [0x7c9e, 0x7c9e], /* CJK Ideograph */ + [0x7c9f, 0x7c9f], /* CJK Ideograph */ + [0x7ca0, 0x7ca0], /* CJK Ideograph */ + [0x7ca1, 0x7ca1], /* CJK Ideograph */ + [0x7ca2, 0x7ca2], /* CJK Ideograph */ + [0x7ca3, 0x7ca3], /* CJK Ideograph */ + [0x7ca4, 0x7ca4], /* CJK Ideograph */ + [0x7ca5, 0x7ca5], /* CJK Ideograph */ + [0x7ca6, 0x7ca6], /* CJK Ideograph */ + [0x7ca7, 0x7ca7], /* CJK Ideograph */ + [0x7ca8, 0x7ca8], /* CJK Ideograph */ + [0x7ca9, 0x7ca9], /* CJK Ideograph */ + [0x7caa, 0x7caa], /* CJK Ideograph */ + [0x7cab, 0x7cab], /* CJK Ideograph */ + [0x7cac, 0x7cac], /* CJK Ideograph */ + [0x7cad, 0x7cad], /* CJK Ideograph */ + [0x7cae, 0x7cae], /* CJK Ideograph */ + [0x7caf, 0x7caf], /* CJK Ideograph */ + [0x7cb0, 0x7cb0], /* CJK Ideograph */ + [0x7cb1, 0x7cb1], /* CJK Ideograph */ + [0x7cb2, 0x7cb2], /* CJK Ideograph */ + [0x7cb3, 0x7cb3], /* CJK Ideograph */ + [0x7cb4, 0x7cb4], /* CJK Ideograph */ + [0x7cb5, 0x7cb5], /* CJK Ideograph */ + [0x7cb6, 0x7cb6], /* CJK Ideograph */ + [0x7cb7, 0x7cb7], /* CJK Ideograph */ + [0x7cb8, 0x7cb8], /* CJK Ideograph */ + [0x7cb9, 0x7cb9], /* CJK Ideograph */ + [0x7cba, 0x7cba], /* CJK Ideograph */ + [0x7cbb, 0x7cbb], /* CJK Ideograph */ + [0x7cbc, 0x7cbc], /* CJK Ideograph */ + [0x7cbd, 0x7cbd], /* CJK Ideograph */ + [0x7cbe, 0x7cbe], /* CJK Ideograph */ + [0x7cbf, 0x7cbf], /* CJK Ideograph */ + [0x7cc0, 0x7cc0], /* CJK Ideograph */ + [0x7cc1, 0x7cc1], /* CJK Ideograph */ + [0x7cc2, 0x7cc2], /* CJK Ideograph */ + [0x7cc3, 0x7cc3], /* CJK Ideograph */ + [0x7cc4, 0x7cc4], /* CJK Ideograph */ + [0x7cc5, 0x7cc5], /* CJK Ideograph */ + [0x7cc6, 0x7cc6], /* CJK Ideograph */ + [0x7cc7, 0x7cc7], /* CJK Ideograph */ + [0x7cc8, 0x7cc8], /* CJK Ideograph */ + [0x7cc9, 0x7cc9], /* CJK Ideograph */ + [0x7cca, 0x7cca], /* CJK Ideograph */ + [0x7ccb, 0x7ccb], /* CJK Ideograph */ + [0x7ccc, 0x7ccc], /* CJK Ideograph */ + [0x7ccd, 0x7ccd], /* CJK Ideograph */ + [0x7cce, 0x7cce], /* CJK Ideograph */ + [0x7ccf, 0x7ccf], /* CJK Ideograph */ + [0x7cd0, 0x7cd0], /* CJK Ideograph */ + [0x7cd1, 0x7cd1], /* CJK Ideograph */ + [0x7cd2, 0x7cd2], /* CJK Ideograph */ + [0x7cd3, 0x7cd3], /* CJK Ideograph */ + [0x7cd4, 0x7cd4], /* CJK Ideograph */ + [0x7cd5, 0x7cd5], /* CJK Ideograph */ + [0x7cd6, 0x7cd6], /* CJK Ideograph */ + [0x7cd7, 0x7cd7], /* CJK Ideograph */ + [0x7cd8, 0x7cd8], /* CJK Ideograph */ + [0x7cd9, 0x7cd9], /* CJK Ideograph */ + [0x7cda, 0x7cda], /* CJK Ideograph */ + [0x7cdb, 0x7cdb], /* CJK Ideograph */ + [0x7cdc, 0x7cdc], /* CJK Ideograph */ + [0x7cdd, 0x7cdd], /* CJK Ideograph */ + [0x7cde, 0x7cde], /* CJK Ideograph */ + [0x7cdf, 0x7cdf], /* CJK Ideograph */ + [0x7ce0, 0x7ce0], /* CJK Ideograph */ + [0x7ce1, 0x7ce1], /* CJK Ideograph */ + [0x7ce2, 0x7ce2], /* CJK Ideograph */ + [0x7ce3, 0x7ce3], /* CJK Ideograph */ + [0x7ce4, 0x7ce4], /* CJK Ideograph */ + [0x7ce5, 0x7ce5], /* CJK Ideograph */ + [0x7ce6, 0x7ce6], /* CJK Ideograph */ + [0x7ce7, 0x7ce7], /* CJK Ideograph */ + [0x7ce8, 0x7ce8], /* CJK Ideograph */ + [0x7ce9, 0x7ce9], /* CJK Ideograph */ + [0x7cea, 0x7cea], /* CJK Ideograph */ + [0x7ceb, 0x7ceb], /* CJK Ideograph */ + [0x7cec, 0x7cec], /* CJK Ideograph */ + [0x7ced, 0x7ced], /* CJK Ideograph */ + [0x7cee, 0x7cee], /* CJK Ideograph */ + [0x7cef, 0x7cef], /* CJK Ideograph */ + [0x7cf0, 0x7cf0], /* CJK Ideograph */ + [0x7cf1, 0x7cf1], /* CJK Ideograph */ + [0x7cf2, 0x7cf2], /* CJK Ideograph */ + [0x7cf3, 0x7cf3], /* CJK Ideograph */ + [0x7cf4, 0x7cf4], /* CJK Ideograph */ + [0x7cf5, 0x7cf5], /* CJK Ideograph */ + [0x7cf6, 0x7cf6], /* CJK Ideograph */ + [0x7cf7, 0x7cf7], /* CJK Ideograph */ + [0x7cf8, 0x7cf8], /* CJK Ideograph */ + [0x7cf9, 0x7cf9], /* CJK Ideograph */ + [0x7cfa, 0x7cfa], /* CJK Ideograph */ + [0x7cfb, 0x7cfb], /* CJK Ideograph */ + [0x7cfc, 0x7cfc], /* CJK Ideograph */ + [0x7cfd, 0x7cfd], /* CJK Ideograph */ + [0x7cfe, 0x7cfe], /* CJK Ideograph */ + [0x7cff, 0x7cff], /* CJK Ideograph */ + [0x7d00, 0x7d00], /* CJK Ideograph */ + [0x7d01, 0x7d01], /* CJK Ideograph */ + [0x7d02, 0x7d02], /* CJK Ideograph */ + [0x7d03, 0x7d03], /* CJK Ideograph */ + [0x7d04, 0x7d04], /* CJK Ideograph */ + [0x7d05, 0x7d05], /* CJK Ideograph */ + [0x7d06, 0x7d06], /* CJK Ideograph */ + [0x7d07, 0x7d07], /* CJK Ideograph */ + [0x7d08, 0x7d08], /* CJK Ideograph */ + [0x7d09, 0x7d09], /* CJK Ideograph */ + [0x7d0a, 0x7d0a], /* CJK Ideograph */ + [0x7d0b, 0x7d0b], /* CJK Ideograph */ + [0x7d0c, 0x7d0c], /* CJK Ideograph */ + [0x7d0d, 0x7d0d], /* CJK Ideograph */ + [0x7d0e, 0x7d0e], /* CJK Ideograph */ + [0x7d0f, 0x7d0f], /* CJK Ideograph */ + [0x7d10, 0x7d10], /* CJK Ideograph */ + [0x7d11, 0x7d11], /* CJK Ideograph */ + [0x7d12, 0x7d12], /* CJK Ideograph */ + [0x7d13, 0x7d13], /* CJK Ideograph */ + [0x7d14, 0x7d14], /* CJK Ideograph */ + [0x7d15, 0x7d15], /* CJK Ideograph */ + [0x7d16, 0x7d16], /* CJK Ideograph */ + [0x7d17, 0x7d17], /* CJK Ideograph */ + [0x7d18, 0x7d18], /* CJK Ideograph */ + [0x7d19, 0x7d19], /* CJK Ideograph */ + [0x7d1a, 0x7d1a], /* CJK Ideograph */ + [0x7d1b, 0x7d1b], /* CJK Ideograph */ + [0x7d1c, 0x7d1c], /* CJK Ideograph */ + [0x7d1d, 0x7d1d], /* CJK Ideograph */ + [0x7d1e, 0x7d1e], /* CJK Ideograph */ + [0x7d1f, 0x7d1f], /* CJK Ideograph */ + [0x7d20, 0x7d20], /* CJK Ideograph */ + [0x7d21, 0x7d21], /* CJK Ideograph */ + [0x7d22, 0x7d22], /* CJK Ideograph */ + [0x7d23, 0x7d23], /* CJK Ideograph */ + [0x7d24, 0x7d24], /* CJK Ideograph */ + [0x7d25, 0x7d25], /* CJK Ideograph */ + [0x7d26, 0x7d26], /* CJK Ideograph */ + [0x7d27, 0x7d27], /* CJK Ideograph */ + [0x7d28, 0x7d28], /* CJK Ideograph */ + [0x7d29, 0x7d29], /* CJK Ideograph */ + [0x7d2a, 0x7d2a], /* CJK Ideograph */ + [0x7d2b, 0x7d2b], /* CJK Ideograph */ + [0x7d2c, 0x7d2c], /* CJK Ideograph */ + [0x7d2d, 0x7d2d], /* CJK Ideograph */ + [0x7d2e, 0x7d2e], /* CJK Ideograph */ + [0x7d2f, 0x7d2f], /* CJK Ideograph */ + [0x7d30, 0x7d30], /* CJK Ideograph */ + [0x7d31, 0x7d31], /* CJK Ideograph */ + [0x7d32, 0x7d32], /* CJK Ideograph */ + [0x7d33, 0x7d33], /* CJK Ideograph */ + [0x7d34, 0x7d34], /* CJK Ideograph */ + [0x7d35, 0x7d35], /* CJK Ideograph */ + [0x7d36, 0x7d36], /* CJK Ideograph */ + [0x7d37, 0x7d37], /* CJK Ideograph */ + [0x7d38, 0x7d38], /* CJK Ideograph */ + [0x7d39, 0x7d39], /* CJK Ideograph */ + [0x7d3a, 0x7d3a], /* CJK Ideograph */ + [0x7d3b, 0x7d3b], /* CJK Ideograph */ + [0x7d3c, 0x7d3c], /* CJK Ideograph */ + [0x7d3d, 0x7d3d], /* CJK Ideograph */ + [0x7d3e, 0x7d3e], /* CJK Ideograph */ + [0x7d3f, 0x7d3f], /* CJK Ideograph */ + [0x7d40, 0x7d40], /* CJK Ideograph */ + [0x7d41, 0x7d41], /* CJK Ideograph */ + [0x7d42, 0x7d42], /* CJK Ideograph */ + [0x7d43, 0x7d43], /* CJK Ideograph */ + [0x7d44, 0x7d44], /* CJK Ideograph */ + [0x7d45, 0x7d45], /* CJK Ideograph */ + [0x7d46, 0x7d46], /* CJK Ideograph */ + [0x7d47, 0x7d47], /* CJK Ideograph */ + [0x7d48, 0x7d48], /* CJK Ideograph */ + [0x7d49, 0x7d49], /* CJK Ideograph */ + [0x7d4a, 0x7d4a], /* CJK Ideograph */ + [0x7d4b, 0x7d4b], /* CJK Ideograph */ + [0x7d4c, 0x7d4c], /* CJK Ideograph */ + [0x7d4d, 0x7d4d], /* CJK Ideograph */ + [0x7d4e, 0x7d4e], /* CJK Ideograph */ + [0x7d4f, 0x7d4f], /* CJK Ideograph */ + [0x7d50, 0x7d50], /* CJK Ideograph */ + [0x7d51, 0x7d51], /* CJK Ideograph */ + [0x7d52, 0x7d52], /* CJK Ideograph */ + [0x7d53, 0x7d53], /* CJK Ideograph */ + [0x7d54, 0x7d54], /* CJK Ideograph */ + [0x7d55, 0x7d55], /* CJK Ideograph */ + [0x7d56, 0x7d56], /* CJK Ideograph */ + [0x7d57, 0x7d57], /* CJK Ideograph */ + [0x7d58, 0x7d58], /* CJK Ideograph */ + [0x7d59, 0x7d59], /* CJK Ideograph */ + [0x7d5a, 0x7d5a], /* CJK Ideograph */ + [0x7d5b, 0x7d5b], /* CJK Ideograph */ + [0x7d5c, 0x7d5c], /* CJK Ideograph */ + [0x7d5d, 0x7d5d], /* CJK Ideograph */ + [0x7d5e, 0x7d5e], /* CJK Ideograph */ + [0x7d5f, 0x7d5f], /* CJK Ideograph */ + [0x7d60, 0x7d60], /* CJK Ideograph */ + [0x7d61, 0x7d61], /* CJK Ideograph */ + [0x7d62, 0x7d62], /* CJK Ideograph */ + [0x7d63, 0x7d63], /* CJK Ideograph */ + [0x7d64, 0x7d64], /* CJK Ideograph */ + [0x7d65, 0x7d65], /* CJK Ideograph */ + [0x7d66, 0x7d66], /* CJK Ideograph */ + [0x7d67, 0x7d67], /* CJK Ideograph */ + [0x7d68, 0x7d68], /* CJK Ideograph */ + [0x7d69, 0x7d69], /* CJK Ideograph */ + [0x7d6a, 0x7d6a], /* CJK Ideograph */ + [0x7d6b, 0x7d6b], /* CJK Ideograph */ + [0x7d6c, 0x7d6c], /* CJK Ideograph */ + [0x7d6d, 0x7d6d], /* CJK Ideograph */ + [0x7d6e, 0x7d6e], /* CJK Ideograph */ + [0x7d6f, 0x7d6f], /* CJK Ideograph */ + [0x7d70, 0x7d70], /* CJK Ideograph */ + [0x7d71, 0x7d71], /* CJK Ideograph */ + [0x7d72, 0x7d72], /* CJK Ideograph */ + [0x7d73, 0x7d73], /* CJK Ideograph */ + [0x7d74, 0x7d74], /* CJK Ideograph */ + [0x7d75, 0x7d75], /* CJK Ideograph */ + [0x7d76, 0x7d76], /* CJK Ideograph */ + [0x7d77, 0x7d77], /* CJK Ideograph */ + [0x7d78, 0x7d78], /* CJK Ideograph */ + [0x7d79, 0x7d79], /* CJK Ideograph */ + [0x7d7a, 0x7d7a], /* CJK Ideograph */ + [0x7d7b, 0x7d7b], /* CJK Ideograph */ + [0x7d7c, 0x7d7c], /* CJK Ideograph */ + [0x7d7d, 0x7d7d], /* CJK Ideograph */ + [0x7d7e, 0x7d7e], /* CJK Ideograph */ + [0x7d7f, 0x7d7f], /* CJK Ideograph */ + [0x7d80, 0x7d80], /* CJK Ideograph */ + [0x7d81, 0x7d81], /* CJK Ideograph */ + [0x7d82, 0x7d82], /* CJK Ideograph */ + [0x7d83, 0x7d83], /* CJK Ideograph */ + [0x7d84, 0x7d84], /* CJK Ideograph */ + [0x7d85, 0x7d85], /* CJK Ideograph */ + [0x7d86, 0x7d86], /* CJK Ideograph */ + [0x7d87, 0x7d87], /* CJK Ideograph */ + [0x7d88, 0x7d88], /* CJK Ideograph */ + [0x7d89, 0x7d89], /* CJK Ideograph */ + [0x7d8a, 0x7d8a], /* CJK Ideograph */ + [0x7d8b, 0x7d8b], /* CJK Ideograph */ + [0x7d8c, 0x7d8c], /* CJK Ideograph */ + [0x7d8d, 0x7d8d], /* CJK Ideograph */ + [0x7d8e, 0x7d8e], /* CJK Ideograph */ + [0x7d8f, 0x7d8f], /* CJK Ideograph */ + [0x7d90, 0x7d90], /* CJK Ideograph */ + [0x7d91, 0x7d91], /* CJK Ideograph */ + [0x7d92, 0x7d92], /* CJK Ideograph */ + [0x7d93, 0x7d93], /* CJK Ideograph */ + [0x7d94, 0x7d94], /* CJK Ideograph */ + [0x7d95, 0x7d95], /* CJK Ideograph */ + [0x7d96, 0x7d96], /* CJK Ideograph */ + [0x7d97, 0x7d97], /* CJK Ideograph */ + [0x7d98, 0x7d98], /* CJK Ideograph */ + [0x7d99, 0x7d99], /* CJK Ideograph */ + [0x7d9a, 0x7d9a], /* CJK Ideograph */ + [0x7d9b, 0x7d9b], /* CJK Ideograph */ + [0x7d9c, 0x7d9c], /* CJK Ideograph */ + [0x7d9d, 0x7d9d], /* CJK Ideograph */ + [0x7d9e, 0x7d9e], /* CJK Ideograph */ + [0x7d9f, 0x7d9f], /* CJK Ideograph */ + [0x7da0, 0x7da0], /* CJK Ideograph */ + [0x7da1, 0x7da1], /* CJK Ideograph */ + [0x7da2, 0x7da2], /* CJK Ideograph */ + [0x7da3, 0x7da3], /* CJK Ideograph */ + [0x7da4, 0x7da4], /* CJK Ideograph */ + [0x7da5, 0x7da5], /* CJK Ideograph */ + [0x7da6, 0x7da6], /* CJK Ideograph */ + [0x7da7, 0x7da7], /* CJK Ideograph */ + [0x7da8, 0x7da8], /* CJK Ideograph */ + [0x7da9, 0x7da9], /* CJK Ideograph */ + [0x7daa, 0x7daa], /* CJK Ideograph */ + [0x7dab, 0x7dab], /* CJK Ideograph */ + [0x7dac, 0x7dac], /* CJK Ideograph */ + [0x7dad, 0x7dad], /* CJK Ideograph */ + [0x7dae, 0x7dae], /* CJK Ideograph */ + [0x7daf, 0x7daf], /* CJK Ideograph */ + [0x7db0, 0x7db0], /* CJK Ideograph */ + [0x7db1, 0x7db1], /* CJK Ideograph */ + [0x7db2, 0x7db2], /* CJK Ideograph */ + [0x7db3, 0x7db3], /* CJK Ideograph */ + [0x7db4, 0x7db4], /* CJK Ideograph */ + [0x7db5, 0x7db5], /* CJK Ideograph */ + [0x7db6, 0x7db6], /* CJK Ideograph */ + [0x7db7, 0x7db7], /* CJK Ideograph */ + [0x7db8, 0x7db8], /* CJK Ideograph */ + [0x7db9, 0x7db9], /* CJK Ideograph */ + [0x7dba, 0x7dba], /* CJK Ideograph */ + [0x7dbb, 0x7dbb], /* CJK Ideograph */ + [0x7dbc, 0x7dbc], /* CJK Ideograph */ + [0x7dbd, 0x7dbd], /* CJK Ideograph */ + [0x7dbe, 0x7dbe], /* CJK Ideograph */ + [0x7dbf, 0x7dbf], /* CJK Ideograph */ + [0x7dc0, 0x7dc0], /* CJK Ideograph */ + [0x7dc1, 0x7dc1], /* CJK Ideograph */ + [0x7dc2, 0x7dc2], /* CJK Ideograph */ + [0x7dc3, 0x7dc3], /* CJK Ideograph */ + [0x7dc4, 0x7dc4], /* CJK Ideograph */ + [0x7dc5, 0x7dc5], /* CJK Ideograph */ + [0x7dc6, 0x7dc6], /* CJK Ideograph */ + [0x7dc7, 0x7dc7], /* CJK Ideograph */ + [0x7dc8, 0x7dc8], /* CJK Ideograph */ + [0x7dc9, 0x7dc9], /* CJK Ideograph */ + [0x7dca, 0x7dca], /* CJK Ideograph */ + [0x7dcb, 0x7dcb], /* CJK Ideograph */ + [0x7dcc, 0x7dcc], /* CJK Ideograph */ + [0x7dcd, 0x7dcd], /* CJK Ideograph */ + [0x7dce, 0x7dce], /* CJK Ideograph */ + [0x7dcf, 0x7dcf], /* CJK Ideograph */ + [0x7dd0, 0x7dd0], /* CJK Ideograph */ + [0x7dd1, 0x7dd1], /* CJK Ideograph */ + [0x7dd2, 0x7dd2], /* CJK Ideograph */ + [0x7dd3, 0x7dd3], /* CJK Ideograph */ + [0x7dd4, 0x7dd4], /* CJK Ideograph */ + [0x7dd5, 0x7dd5], /* CJK Ideograph */ + [0x7dd6, 0x7dd6], /* CJK Ideograph */ + [0x7dd7, 0x7dd7], /* CJK Ideograph */ + [0x7dd8, 0x7dd8], /* CJK Ideograph */ + [0x7dd9, 0x7dd9], /* CJK Ideograph */ + [0x7dda, 0x7dda], /* CJK Ideograph */ + [0x7ddb, 0x7ddb], /* CJK Ideograph */ + [0x7ddc, 0x7ddc], /* CJK Ideograph */ + [0x7ddd, 0x7ddd], /* CJK Ideograph */ + [0x7dde, 0x7dde], /* CJK Ideograph */ + [0x7ddf, 0x7ddf], /* CJK Ideograph */ + [0x7de0, 0x7de0], /* CJK Ideograph */ + [0x7de1, 0x7de1], /* CJK Ideograph */ + [0x7de2, 0x7de2], /* CJK Ideograph */ + [0x7de3, 0x7de3], /* CJK Ideograph */ + [0x7de4, 0x7de4], /* CJK Ideograph */ + [0x7de5, 0x7de5], /* CJK Ideograph */ + [0x7de6, 0x7de6], /* CJK Ideograph */ + [0x7de7, 0x7de7], /* CJK Ideograph */ + [0x7de8, 0x7de8], /* CJK Ideograph */ + [0x7de9, 0x7de9], /* CJK Ideograph */ + [0x7dea, 0x7dea], /* CJK Ideograph */ + [0x7deb, 0x7deb], /* CJK Ideograph */ + [0x7dec, 0x7dec], /* CJK Ideograph */ + [0x7ded, 0x7ded], /* CJK Ideograph */ + [0x7dee, 0x7dee], /* CJK Ideograph */ + [0x7def, 0x7def], /* CJK Ideograph */ + [0x7df0, 0x7df0], /* CJK Ideograph */ + [0x7df1, 0x7df1], /* CJK Ideograph */ + [0x7df2, 0x7df2], /* CJK Ideograph */ + [0x7df3, 0x7df3], /* CJK Ideograph */ + [0x7df4, 0x7df4], /* CJK Ideograph */ + [0x7df5, 0x7df5], /* CJK Ideograph */ + [0x7df6, 0x7df6], /* CJK Ideograph */ + [0x7df7, 0x7df7], /* CJK Ideograph */ + [0x7df8, 0x7df8], /* CJK Ideograph */ + [0x7df9, 0x7df9], /* CJK Ideograph */ + [0x7dfa, 0x7dfa], /* CJK Ideograph */ + [0x7dfb, 0x7dfb], /* CJK Ideograph */ + [0x7dfc, 0x7dfc], /* CJK Ideograph */ + [0x7dfd, 0x7dfd], /* CJK Ideograph */ + [0x7dfe, 0x7dfe], /* CJK Ideograph */ + [0x7dff, 0x7dff], /* CJK Ideograph */ + [0x7e00, 0x7e00], /* CJK Ideograph */ + [0x7e01, 0x7e01], /* CJK Ideograph */ + [0x7e02, 0x7e02], /* CJK Ideograph */ + [0x7e03, 0x7e03], /* CJK Ideograph */ + [0x7e04, 0x7e04], /* CJK Ideograph */ + [0x7e05, 0x7e05], /* CJK Ideograph */ + [0x7e06, 0x7e06], /* CJK Ideograph */ + [0x7e07, 0x7e07], /* CJK Ideograph */ + [0x7e08, 0x7e08], /* CJK Ideograph */ + [0x7e09, 0x7e09], /* CJK Ideograph */ + [0x7e0a, 0x7e0a], /* CJK Ideograph */ + [0x7e0b, 0x7e0b], /* CJK Ideograph */ + [0x7e0c, 0x7e0c], /* CJK Ideograph */ + [0x7e0d, 0x7e0d], /* CJK Ideograph */ + [0x7e0e, 0x7e0e], /* CJK Ideograph */ + [0x7e0f, 0x7e0f], /* CJK Ideograph */ + [0x7e10, 0x7e10], /* CJK Ideograph */ + [0x7e11, 0x7e11], /* CJK Ideograph */ + [0x7e12, 0x7e12], /* CJK Ideograph */ + [0x7e13, 0x7e13], /* CJK Ideograph */ + [0x7e14, 0x7e14], /* CJK Ideograph */ + [0x7e15, 0x7e15], /* CJK Ideograph */ + [0x7e16, 0x7e16], /* CJK Ideograph */ + [0x7e17, 0x7e17], /* CJK Ideograph */ + [0x7e18, 0x7e18], /* CJK Ideograph */ + [0x7e19, 0x7e19], /* CJK Ideograph */ + [0x7e1a, 0x7e1a], /* CJK Ideograph */ + [0x7e1b, 0x7e1b], /* CJK Ideograph */ + [0x7e1c, 0x7e1c], /* CJK Ideograph */ + [0x7e1d, 0x7e1d], /* CJK Ideograph */ + [0x7e1e, 0x7e1e], /* CJK Ideograph */ + [0x7e1f, 0x7e1f], /* CJK Ideograph */ + [0x7e20, 0x7e20], /* CJK Ideograph */ + [0x7e21, 0x7e21], /* CJK Ideograph */ + [0x7e22, 0x7e22], /* CJK Ideograph */ + [0x7e23, 0x7e23], /* CJK Ideograph */ + [0x7e24, 0x7e24], /* CJK Ideograph */ + [0x7e25, 0x7e25], /* CJK Ideograph */ + [0x7e26, 0x7e26], /* CJK Ideograph */ + [0x7e27, 0x7e27], /* CJK Ideograph */ + [0x7e28, 0x7e28], /* CJK Ideograph */ + [0x7e29, 0x7e29], /* CJK Ideograph */ + [0x7e2a, 0x7e2a], /* CJK Ideograph */ + [0x7e2b, 0x7e2b], /* CJK Ideograph */ + [0x7e2c, 0x7e2c], /* CJK Ideograph */ + [0x7e2d, 0x7e2d], /* CJK Ideograph */ + [0x7e2e, 0x7e2e], /* CJK Ideograph */ + [0x7e2f, 0x7e2f], /* CJK Ideograph */ + [0x7e30, 0x7e30], /* CJK Ideograph */ + [0x7e31, 0x7e31], /* CJK Ideograph */ + [0x7e32, 0x7e32], /* CJK Ideograph */ + [0x7e33, 0x7e33], /* CJK Ideograph */ + [0x7e34, 0x7e34], /* CJK Ideograph */ + [0x7e35, 0x7e35], /* CJK Ideograph */ + [0x7e36, 0x7e36], /* CJK Ideograph */ + [0x7e37, 0x7e37], /* CJK Ideograph */ + [0x7e38, 0x7e38], /* CJK Ideograph */ + [0x7e39, 0x7e39], /* CJK Ideograph */ + [0x7e3a, 0x7e3a], /* CJK Ideograph */ + [0x7e3b, 0x7e3b], /* CJK Ideograph */ + [0x7e3c, 0x7e3c], /* CJK Ideograph */ + [0x7e3d, 0x7e3d], /* CJK Ideograph */ + [0x7e3e, 0x7e3e], /* CJK Ideograph */ + [0x7e3f, 0x7e3f], /* CJK Ideograph */ + [0x7e40, 0x7e40], /* CJK Ideograph */ + [0x7e41, 0x7e41], /* CJK Ideograph */ + [0x7e42, 0x7e42], /* CJK Ideograph */ + [0x7e43, 0x7e43], /* CJK Ideograph */ + [0x7e44, 0x7e44], /* CJK Ideograph */ + [0x7e45, 0x7e45], /* CJK Ideograph */ + [0x7e46, 0x7e46], /* CJK Ideograph */ + [0x7e47, 0x7e47], /* CJK Ideograph */ + [0x7e48, 0x7e48], /* CJK Ideograph */ + [0x7e49, 0x7e49], /* CJK Ideograph */ + [0x7e4a, 0x7e4a], /* CJK Ideograph */ + [0x7e4b, 0x7e4b], /* CJK Ideograph */ + [0x7e4c, 0x7e4c], /* CJK Ideograph */ + [0x7e4d, 0x7e4d], /* CJK Ideograph */ + [0x7e4e, 0x7e4e], /* CJK Ideograph */ + [0x7e4f, 0x7e4f], /* CJK Ideograph */ + [0x7e50, 0x7e50], /* CJK Ideograph */ + [0x7e51, 0x7e51], /* CJK Ideograph */ + [0x7e52, 0x7e52], /* CJK Ideograph */ + [0x7e53, 0x7e53], /* CJK Ideograph */ + [0x7e54, 0x7e54], /* CJK Ideograph */ + [0x7e55, 0x7e55], /* CJK Ideograph */ + [0x7e56, 0x7e56], /* CJK Ideograph */ + [0x7e57, 0x7e57], /* CJK Ideograph */ + [0x7e58, 0x7e58], /* CJK Ideograph */ + [0x7e59, 0x7e59], /* CJK Ideograph */ + [0x7e5a, 0x7e5a], /* CJK Ideograph */ + [0x7e5b, 0x7e5b], /* CJK Ideograph */ + [0x7e5c, 0x7e5c], /* CJK Ideograph */ + [0x7e5d, 0x7e5d], /* CJK Ideograph */ + [0x7e5e, 0x7e5e], /* CJK Ideograph */ + [0x7e5f, 0x7e5f], /* CJK Ideograph */ + [0x7e60, 0x7e60], /* CJK Ideograph */ + [0x7e61, 0x7e61], /* CJK Ideograph */ + [0x7e62, 0x7e62], /* CJK Ideograph */ + [0x7e63, 0x7e63], /* CJK Ideograph */ + [0x7e64, 0x7e64], /* CJK Ideograph */ + [0x7e65, 0x7e65], /* CJK Ideograph */ + [0x7e66, 0x7e66], /* CJK Ideograph */ + [0x7e67, 0x7e67], /* CJK Ideograph */ + [0x7e68, 0x7e68], /* CJK Ideograph */ + [0x7e69, 0x7e69], /* CJK Ideograph */ + [0x7e6a, 0x7e6a], /* CJK Ideograph */ + [0x7e6b, 0x7e6b], /* CJK Ideograph */ + [0x7e6c, 0x7e6c], /* CJK Ideograph */ + [0x7e6d, 0x7e6d], /* CJK Ideograph */ + [0x7e6e, 0x7e6e], /* CJK Ideograph */ + [0x7e6f, 0x7e6f], /* CJK Ideograph */ + [0x7e70, 0x7e70], /* CJK Ideograph */ + [0x7e71, 0x7e71], /* CJK Ideograph */ + [0x7e72, 0x7e72], /* CJK Ideograph */ + [0x7e73, 0x7e73], /* CJK Ideograph */ + [0x7e74, 0x7e74], /* CJK Ideograph */ + [0x7e75, 0x7e75], /* CJK Ideograph */ + [0x7e76, 0x7e76], /* CJK Ideograph */ + [0x7e77, 0x7e77], /* CJK Ideograph */ + [0x7e78, 0x7e78], /* CJK Ideograph */ + [0x7e79, 0x7e79], /* CJK Ideograph */ + [0x7e7a, 0x7e7a], /* CJK Ideograph */ + [0x7e7b, 0x7e7b], /* CJK Ideograph */ + [0x7e7c, 0x7e7c], /* CJK Ideograph */ + [0x7e7d, 0x7e7d], /* CJK Ideograph */ + [0x7e7e, 0x7e7e], /* CJK Ideograph */ + [0x7e7f, 0x7e7f], /* CJK Ideograph */ + [0x7e80, 0x7e80], /* CJK Ideograph */ + [0x7e81, 0x7e81], /* CJK Ideograph */ + [0x7e82, 0x7e82], /* CJK Ideograph */ + [0x7e83, 0x7e83], /* CJK Ideograph */ + [0x7e84, 0x7e84], /* CJK Ideograph */ + [0x7e85, 0x7e85], /* CJK Ideograph */ + [0x7e86, 0x7e86], /* CJK Ideograph */ + [0x7e87, 0x7e87], /* CJK Ideograph */ + [0x7e88, 0x7e88], /* CJK Ideograph */ + [0x7e89, 0x7e89], /* CJK Ideograph */ + [0x7e8a, 0x7e8a], /* CJK Ideograph */ + [0x7e8b, 0x7e8b], /* CJK Ideograph */ + [0x7e8c, 0x7e8c], /* CJK Ideograph */ + [0x7e8d, 0x7e8d], /* CJK Ideograph */ + [0x7e8e, 0x7e8e], /* CJK Ideograph */ + [0x7e8f, 0x7e8f], /* CJK Ideograph */ + [0x7e90, 0x7e90], /* CJK Ideograph */ + [0x7e91, 0x7e91], /* CJK Ideograph */ + [0x7e92, 0x7e92], /* CJK Ideograph */ + [0x7e93, 0x7e93], /* CJK Ideograph */ + [0x7e94, 0x7e94], /* CJK Ideograph */ + [0x7e95, 0x7e95], /* CJK Ideograph */ + [0x7e96, 0x7e96], /* CJK Ideograph */ + [0x7e97, 0x7e97], /* CJK Ideograph */ + [0x7e98, 0x7e98], /* CJK Ideograph */ + [0x7e99, 0x7e99], /* CJK Ideograph */ + [0x7e9a, 0x7e9a], /* CJK Ideograph */ + [0x7e9b, 0x7e9b], /* CJK Ideograph */ + [0x7e9c, 0x7e9c], /* CJK Ideograph */ + [0x7e9d, 0x7e9d], /* CJK Ideograph */ + [0x7e9e, 0x7e9e], /* CJK Ideograph */ + [0x7e9f, 0x7e9f], /* CJK Ideograph */ + [0x7ea0, 0x7ea0], /* CJK Ideograph */ + [0x7ea1, 0x7ea1], /* CJK Ideograph */ + [0x7ea2, 0x7ea2], /* CJK Ideograph */ + [0x7ea3, 0x7ea3], /* CJK Ideograph */ + [0x7ea4, 0x7ea4], /* CJK Ideograph */ + [0x7ea5, 0x7ea5], /* CJK Ideograph */ + [0x7ea6, 0x7ea6], /* CJK Ideograph */ + [0x7ea7, 0x7ea7], /* CJK Ideograph */ + [0x7ea8, 0x7ea8], /* CJK Ideograph */ + [0x7ea9, 0x7ea9], /* CJK Ideograph */ + [0x7eaa, 0x7eaa], /* CJK Ideograph */ + [0x7eab, 0x7eab], /* CJK Ideograph */ + [0x7eac, 0x7eac], /* CJK Ideograph */ + [0x7ead, 0x7ead], /* CJK Ideograph */ + [0x7eae, 0x7eae], /* CJK Ideograph */ + [0x7eaf, 0x7eaf], /* CJK Ideograph */ + [0x7eb0, 0x7eb0], /* CJK Ideograph */ + [0x7eb1, 0x7eb1], /* CJK Ideograph */ + [0x7eb2, 0x7eb2], /* CJK Ideograph */ + [0x7eb3, 0x7eb3], /* CJK Ideograph */ + [0x7eb4, 0x7eb4], /* CJK Ideograph */ + [0x7eb5, 0x7eb5], /* CJK Ideograph */ + [0x7eb6, 0x7eb6], /* CJK Ideograph */ + [0x7eb7, 0x7eb7], /* CJK Ideograph */ + [0x7eb8, 0x7eb8], /* CJK Ideograph */ + [0x7eb9, 0x7eb9], /* CJK Ideograph */ + [0x7eba, 0x7eba], /* CJK Ideograph */ + [0x7ebb, 0x7ebb], /* CJK Ideograph */ + [0x7ebc, 0x7ebc], /* CJK Ideograph */ + [0x7ebd, 0x7ebd], /* CJK Ideograph */ + [0x7ebe, 0x7ebe], /* CJK Ideograph */ + [0x7ebf, 0x7ebf], /* CJK Ideograph */ + [0x7ec0, 0x7ec0], /* CJK Ideograph */ + [0x7ec1, 0x7ec1], /* CJK Ideograph */ + [0x7ec2, 0x7ec2], /* CJK Ideograph */ + [0x7ec3, 0x7ec3], /* CJK Ideograph */ + [0x7ec4, 0x7ec4], /* CJK Ideograph */ + [0x7ec5, 0x7ec5], /* CJK Ideograph */ + [0x7ec6, 0x7ec6], /* CJK Ideograph */ + [0x7ec7, 0x7ec7], /* CJK Ideograph */ + [0x7ec8, 0x7ec8], /* CJK Ideograph */ + [0x7ec9, 0x7ec9], /* CJK Ideograph */ + [0x7eca, 0x7eca], /* CJK Ideograph */ + [0x7ecb, 0x7ecb], /* CJK Ideograph */ + [0x7ecc, 0x7ecc], /* CJK Ideograph */ + [0x7ecd, 0x7ecd], /* CJK Ideograph */ + [0x7ece, 0x7ece], /* CJK Ideograph */ + [0x7ecf, 0x7ecf], /* CJK Ideograph */ + [0x7ed0, 0x7ed0], /* CJK Ideograph */ + [0x7ed1, 0x7ed1], /* CJK Ideograph */ + [0x7ed2, 0x7ed2], /* CJK Ideograph */ + [0x7ed3, 0x7ed3], /* CJK Ideograph */ + [0x7ed4, 0x7ed4], /* CJK Ideograph */ + [0x7ed5, 0x7ed5], /* CJK Ideograph */ + [0x7ed6, 0x7ed6], /* CJK Ideograph */ + [0x7ed7, 0x7ed7], /* CJK Ideograph */ + [0x7ed8, 0x7ed8], /* CJK Ideograph */ + [0x7ed9, 0x7ed9], /* CJK Ideograph */ + [0x7eda, 0x7eda], /* CJK Ideograph */ + [0x7edb, 0x7edb], /* CJK Ideograph */ + [0x7edc, 0x7edc], /* CJK Ideograph */ + [0x7edd, 0x7edd], /* CJK Ideograph */ + [0x7ede, 0x7ede], /* CJK Ideograph */ + [0x7edf, 0x7edf], /* CJK Ideograph */ + [0x7ee0, 0x7ee0], /* CJK Ideograph */ + [0x7ee1, 0x7ee1], /* CJK Ideograph */ + [0x7ee2, 0x7ee2], /* CJK Ideograph */ + [0x7ee3, 0x7ee3], /* CJK Ideograph */ + [0x7ee4, 0x7ee4], /* CJK Ideograph */ + [0x7ee5, 0x7ee5], /* CJK Ideograph */ + [0x7ee6, 0x7ee6], /* CJK Ideograph */ + [0x7ee7, 0x7ee7], /* CJK Ideograph */ + [0x7ee8, 0x7ee8], /* CJK Ideograph */ + [0x7ee9, 0x7ee9], /* CJK Ideograph */ + [0x7eea, 0x7eea], /* CJK Ideograph */ + [0x7eeb, 0x7eeb], /* CJK Ideograph */ + [0x7eec, 0x7eec], /* CJK Ideograph */ + [0x7eed, 0x7eed], /* CJK Ideograph */ + [0x7eee, 0x7eee], /* CJK Ideograph */ + [0x7eef, 0x7eef], /* CJK Ideograph */ + [0x7ef0, 0x7ef0], /* CJK Ideograph */ + [0x7ef1, 0x7ef1], /* CJK Ideograph */ + [0x7ef2, 0x7ef2], /* CJK Ideograph */ + [0x7ef3, 0x7ef3], /* CJK Ideograph */ + [0x7ef4, 0x7ef4], /* CJK Ideograph */ + [0x7ef5, 0x7ef5], /* CJK Ideograph */ + [0x7ef6, 0x7ef6], /* CJK Ideograph */ + [0x7ef7, 0x7ef7], /* CJK Ideograph */ + [0x7ef8, 0x7ef8], /* CJK Ideograph */ + [0x7ef9, 0x7ef9], /* CJK Ideograph */ + [0x7efa, 0x7efa], /* CJK Ideograph */ + [0x7efb, 0x7efb], /* CJK Ideograph */ + [0x7efc, 0x7efc], /* CJK Ideograph */ + [0x7efd, 0x7efd], /* CJK Ideograph */ + [0x7efe, 0x7efe], /* CJK Ideograph */ + [0x7eff, 0x7eff], /* CJK Ideograph */ + [0x7f00, 0x7f00], /* CJK Ideograph */ + [0x7f01, 0x7f01], /* CJK Ideograph */ + [0x7f02, 0x7f02], /* CJK Ideograph */ + [0x7f03, 0x7f03], /* CJK Ideograph */ + [0x7f04, 0x7f04], /* CJK Ideograph */ + [0x7f05, 0x7f05], /* CJK Ideograph */ + [0x7f06, 0x7f06], /* CJK Ideograph */ + [0x7f07, 0x7f07], /* CJK Ideograph */ + [0x7f08, 0x7f08], /* CJK Ideograph */ + [0x7f09, 0x7f09], /* CJK Ideograph */ + [0x7f0a, 0x7f0a], /* CJK Ideograph */ + [0x7f0b, 0x7f0b], /* CJK Ideograph */ + [0x7f0c, 0x7f0c], /* CJK Ideograph */ + [0x7f0d, 0x7f0d], /* CJK Ideograph */ + [0x7f0e, 0x7f0e], /* CJK Ideograph */ + [0x7f0f, 0x7f0f], /* CJK Ideograph */ + [0x7f10, 0x7f10], /* CJK Ideograph */ + [0x7f11, 0x7f11], /* CJK Ideograph */ + [0x7f12, 0x7f12], /* CJK Ideograph */ + [0x7f13, 0x7f13], /* CJK Ideograph */ + [0x7f14, 0x7f14], /* CJK Ideograph */ + [0x7f15, 0x7f15], /* CJK Ideograph */ + [0x7f16, 0x7f16], /* CJK Ideograph */ + [0x7f17, 0x7f17], /* CJK Ideograph */ + [0x7f18, 0x7f18], /* CJK Ideograph */ + [0x7f19, 0x7f19], /* CJK Ideograph */ + [0x7f1a, 0x7f1a], /* CJK Ideograph */ + [0x7f1b, 0x7f1b], /* CJK Ideograph */ + [0x7f1c, 0x7f1c], /* CJK Ideograph */ + [0x7f1d, 0x7f1d], /* CJK Ideograph */ + [0x7f1e, 0x7f1e], /* CJK Ideograph */ + [0x7f1f, 0x7f1f], /* CJK Ideograph */ + [0x7f20, 0x7f20], /* CJK Ideograph */ + [0x7f21, 0x7f21], /* CJK Ideograph */ + [0x7f22, 0x7f22], /* CJK Ideograph */ + [0x7f23, 0x7f23], /* CJK Ideograph */ + [0x7f24, 0x7f24], /* CJK Ideograph */ + [0x7f25, 0x7f25], /* CJK Ideograph */ + [0x7f26, 0x7f26], /* CJK Ideograph */ + [0x7f27, 0x7f27], /* CJK Ideograph */ + [0x7f28, 0x7f28], /* CJK Ideograph */ + [0x7f29, 0x7f29], /* CJK Ideograph */ + [0x7f2a, 0x7f2a], /* CJK Ideograph */ + [0x7f2b, 0x7f2b], /* CJK Ideograph */ + [0x7f2c, 0x7f2c], /* CJK Ideograph */ + [0x7f2d, 0x7f2d], /* CJK Ideograph */ + [0x7f2e, 0x7f2e], /* CJK Ideograph */ + [0x7f2f, 0x7f2f], /* CJK Ideograph */ + [0x7f30, 0x7f30], /* CJK Ideograph */ + [0x7f31, 0x7f31], /* CJK Ideograph */ + [0x7f32, 0x7f32], /* CJK Ideograph */ + [0x7f33, 0x7f33], /* CJK Ideograph */ + [0x7f34, 0x7f34], /* CJK Ideograph */ + [0x7f35, 0x7f35], /* CJK Ideograph */ + [0x7f36, 0x7f36], /* CJK Ideograph */ + [0x7f37, 0x7f37], /* CJK Ideograph */ + [0x7f38, 0x7f38], /* CJK Ideograph */ + [0x7f39, 0x7f39], /* CJK Ideograph */ + [0x7f3a, 0x7f3a], /* CJK Ideograph */ + [0x7f3b, 0x7f3b], /* CJK Ideograph */ + [0x7f3c, 0x7f3c], /* CJK Ideograph */ + [0x7f3d, 0x7f3d], /* CJK Ideograph */ + [0x7f3e, 0x7f3e], /* CJK Ideograph */ + [0x7f3f, 0x7f3f], /* CJK Ideograph */ + [0x7f40, 0x7f40], /* CJK Ideograph */ + [0x7f41, 0x7f41], /* CJK Ideograph */ + [0x7f42, 0x7f42], /* CJK Ideograph */ + [0x7f43, 0x7f43], /* CJK Ideograph */ + [0x7f44, 0x7f44], /* CJK Ideograph */ + [0x7f45, 0x7f45], /* CJK Ideograph */ + [0x7f46, 0x7f46], /* CJK Ideograph */ + [0x7f47, 0x7f47], /* CJK Ideograph */ + [0x7f48, 0x7f48], /* CJK Ideograph */ + [0x7f49, 0x7f49], /* CJK Ideograph */ + [0x7f4a, 0x7f4a], /* CJK Ideograph */ + [0x7f4b, 0x7f4b], /* CJK Ideograph */ + [0x7f4c, 0x7f4c], /* CJK Ideograph */ + [0x7f4d, 0x7f4d], /* CJK Ideograph */ + [0x7f4e, 0x7f4e], /* CJK Ideograph */ + [0x7f4f, 0x7f4f], /* CJK Ideograph */ + [0x7f50, 0x7f50], /* CJK Ideograph */ + [0x7f51, 0x7f51], /* CJK Ideograph */ + [0x7f52, 0x7f52], /* CJK Ideograph */ + [0x7f53, 0x7f53], /* CJK Ideograph */ + [0x7f54, 0x7f54], /* CJK Ideograph */ + [0x7f55, 0x7f55], /* CJK Ideograph */ + [0x7f56, 0x7f56], /* CJK Ideograph */ + [0x7f57, 0x7f57], /* CJK Ideograph */ + [0x7f58, 0x7f58], /* CJK Ideograph */ + [0x7f59, 0x7f59], /* CJK Ideograph */ + [0x7f5a, 0x7f5a], /* CJK Ideograph */ + [0x7f5b, 0x7f5b], /* CJK Ideograph */ + [0x7f5c, 0x7f5c], /* CJK Ideograph */ + [0x7f5d, 0x7f5d], /* CJK Ideograph */ + [0x7f5e, 0x7f5e], /* CJK Ideograph */ + [0x7f5f, 0x7f5f], /* CJK Ideograph */ + [0x7f60, 0x7f60], /* CJK Ideograph */ + [0x7f61, 0x7f61], /* CJK Ideograph */ + [0x7f62, 0x7f62], /* CJK Ideograph */ + [0x7f63, 0x7f63], /* CJK Ideograph */ + [0x7f64, 0x7f64], /* CJK Ideograph */ + [0x7f65, 0x7f65], /* CJK Ideograph */ + [0x7f66, 0x7f66], /* CJK Ideograph */ + [0x7f67, 0x7f67], /* CJK Ideograph */ + [0x7f68, 0x7f68], /* CJK Ideograph */ + [0x7f69, 0x7f69], /* CJK Ideograph */ + [0x7f6a, 0x7f6a], /* CJK Ideograph */ + [0x7f6b, 0x7f6b], /* CJK Ideograph */ + [0x7f6c, 0x7f6c], /* CJK Ideograph */ + [0x7f6d, 0x7f6d], /* CJK Ideograph */ + [0x7f6e, 0x7f6e], /* CJK Ideograph */ + [0x7f6f, 0x7f6f], /* CJK Ideograph */ + [0x7f70, 0x7f70], /* CJK Ideograph */ + [0x7f71, 0x7f71], /* CJK Ideograph */ + [0x7f72, 0x7f72], /* CJK Ideograph */ + [0x7f73, 0x7f73], /* CJK Ideograph */ + [0x7f74, 0x7f74], /* CJK Ideograph */ + [0x7f75, 0x7f75], /* CJK Ideograph */ + [0x7f76, 0x7f76], /* CJK Ideograph */ + [0x7f77, 0x7f77], /* CJK Ideograph */ + [0x7f78, 0x7f78], /* CJK Ideograph */ + [0x7f79, 0x7f79], /* CJK Ideograph */ + [0x7f7a, 0x7f7a], /* CJK Ideograph */ + [0x7f7b, 0x7f7b], /* CJK Ideograph */ + [0x7f7c, 0x7f7c], /* CJK Ideograph */ + [0x7f7d, 0x7f7d], /* CJK Ideograph */ + [0x7f7e, 0x7f7e], /* CJK Ideograph */ + [0x7f7f, 0x7f7f], /* CJK Ideograph */ + [0x7f80, 0x7f80], /* CJK Ideograph */ + [0x7f81, 0x7f81], /* CJK Ideograph */ + [0x7f82, 0x7f82], /* CJK Ideograph */ + [0x7f83, 0x7f83], /* CJK Ideograph */ + [0x7f84, 0x7f84], /* CJK Ideograph */ + [0x7f85, 0x7f85], /* CJK Ideograph */ + [0x7f86, 0x7f86], /* CJK Ideograph */ + [0x7f87, 0x7f87], /* CJK Ideograph */ + [0x7f88, 0x7f88], /* CJK Ideograph */ + [0x7f89, 0x7f89], /* CJK Ideograph */ + [0x7f8a, 0x7f8a], /* CJK Ideograph */ + [0x7f8b, 0x7f8b], /* CJK Ideograph */ + [0x7f8c, 0x7f8c], /* CJK Ideograph */ + [0x7f8d, 0x7f8d], /* CJK Ideograph */ + [0x7f8e, 0x7f8e], /* CJK Ideograph */ + [0x7f8f, 0x7f8f], /* CJK Ideograph */ + [0x7f90, 0x7f90], /* CJK Ideograph */ + [0x7f91, 0x7f91], /* CJK Ideograph */ + [0x7f92, 0x7f92], /* CJK Ideograph */ + [0x7f93, 0x7f93], /* CJK Ideograph */ + [0x7f94, 0x7f94], /* CJK Ideograph */ + [0x7f95, 0x7f95], /* CJK Ideograph */ + [0x7f96, 0x7f96], /* CJK Ideograph */ + [0x7f97, 0x7f97], /* CJK Ideograph */ + [0x7f98, 0x7f98], /* CJK Ideograph */ + [0x7f99, 0x7f99], /* CJK Ideograph */ + [0x7f9a, 0x7f9a], /* CJK Ideograph */ + [0x7f9b, 0x7f9b], /* CJK Ideograph */ + [0x7f9c, 0x7f9c], /* CJK Ideograph */ + [0x7f9d, 0x7f9d], /* CJK Ideograph */ + [0x7f9e, 0x7f9e], /* CJK Ideograph */ + [0x7f9f, 0x7f9f], /* CJK Ideograph */ + [0x7fa0, 0x7fa0], /* CJK Ideograph */ + [0x7fa1, 0x7fa1], /* CJK Ideograph */ + [0x7fa2, 0x7fa2], /* CJK Ideograph */ + [0x7fa3, 0x7fa3], /* CJK Ideograph */ + [0x7fa4, 0x7fa4], /* CJK Ideograph */ + [0x7fa5, 0x7fa5], /* CJK Ideograph */ + [0x7fa6, 0x7fa6], /* CJK Ideograph */ + [0x7fa7, 0x7fa7], /* CJK Ideograph */ + [0x7fa8, 0x7fa8], /* CJK Ideograph */ + [0x7fa9, 0x7fa9], /* CJK Ideograph */ + [0x7faa, 0x7faa], /* CJK Ideograph */ + [0x7fab, 0x7fab], /* CJK Ideograph */ + [0x7fac, 0x7fac], /* CJK Ideograph */ + [0x7fad, 0x7fad], /* CJK Ideograph */ + [0x7fae, 0x7fae], /* CJK Ideograph */ + [0x7faf, 0x7faf], /* CJK Ideograph */ + [0x7fb0, 0x7fb0], /* CJK Ideograph */ + [0x7fb1, 0x7fb1], /* CJK Ideograph */ + [0x7fb2, 0x7fb2], /* CJK Ideograph */ + [0x7fb3, 0x7fb3], /* CJK Ideograph */ + [0x7fb4, 0x7fb4], /* CJK Ideograph */ + [0x7fb5, 0x7fb5], /* CJK Ideograph */ + [0x7fb6, 0x7fb6], /* CJK Ideograph */ + [0x7fb7, 0x7fb7], /* CJK Ideograph */ + [0x7fb8, 0x7fb8], /* CJK Ideograph */ + [0x7fb9, 0x7fb9], /* CJK Ideograph */ + [0x7fba, 0x7fba], /* CJK Ideograph */ + [0x7fbb, 0x7fbb], /* CJK Ideograph */ + [0x7fbc, 0x7fbc], /* CJK Ideograph */ + [0x7fbd, 0x7fbd], /* CJK Ideograph */ + [0x7fbe, 0x7fbe], /* CJK Ideograph */ + [0x7fbf, 0x7fbf], /* CJK Ideograph */ + [0x7fc0, 0x7fc0], /* CJK Ideograph */ + [0x7fc1, 0x7fc1], /* CJK Ideograph */ + [0x7fc2, 0x7fc2], /* CJK Ideograph */ + [0x7fc3, 0x7fc3], /* CJK Ideograph */ + [0x7fc4, 0x7fc4], /* CJK Ideograph */ + [0x7fc5, 0x7fc5], /* CJK Ideograph */ + [0x7fc6, 0x7fc6], /* CJK Ideograph */ + [0x7fc7, 0x7fc7], /* CJK Ideograph */ + [0x7fc8, 0x7fc8], /* CJK Ideograph */ + [0x7fc9, 0x7fc9], /* CJK Ideograph */ + [0x7fca, 0x7fca], /* CJK Ideograph */ + [0x7fcb, 0x7fcb], /* CJK Ideograph */ + [0x7fcc, 0x7fcc], /* CJK Ideograph */ + [0x7fcd, 0x7fcd], /* CJK Ideograph */ + [0x7fce, 0x7fce], /* CJK Ideograph */ + [0x7fcf, 0x7fcf], /* CJK Ideograph */ + [0x7fd0, 0x7fd0], /* CJK Ideograph */ + [0x7fd1, 0x7fd1], /* CJK Ideograph */ + [0x7fd2, 0x7fd2], /* CJK Ideograph */ + [0x7fd3, 0x7fd3], /* CJK Ideograph */ + [0x7fd4, 0x7fd4], /* CJK Ideograph */ + [0x7fd5, 0x7fd5], /* CJK Ideograph */ + [0x7fd6, 0x7fd6], /* CJK Ideograph */ + [0x7fd7, 0x7fd7], /* CJK Ideograph */ + [0x7fd8, 0x7fd8], /* CJK Ideograph */ + [0x7fd9, 0x7fd9], /* CJK Ideograph */ + [0x7fda, 0x7fda], /* CJK Ideograph */ + [0x7fdb, 0x7fdb], /* CJK Ideograph */ + [0x7fdc, 0x7fdc], /* CJK Ideograph */ + [0x7fdd, 0x7fdd], /* CJK Ideograph */ + [0x7fde, 0x7fde], /* CJK Ideograph */ + [0x7fdf, 0x7fdf], /* CJK Ideograph */ + [0x7fe0, 0x7fe0], /* CJK Ideograph */ + [0x7fe1, 0x7fe1], /* CJK Ideograph */ + [0x7fe2, 0x7fe2], /* CJK Ideograph */ + [0x7fe3, 0x7fe3], /* CJK Ideograph */ + [0x7fe4, 0x7fe4], /* CJK Ideograph */ + [0x7fe5, 0x7fe5], /* CJK Ideograph */ + [0x7fe6, 0x7fe6], /* CJK Ideograph */ + [0x7fe7, 0x7fe7], /* CJK Ideograph */ + [0x7fe8, 0x7fe8], /* CJK Ideograph */ + [0x7fe9, 0x7fe9], /* CJK Ideograph */ + [0x7fea, 0x7fea], /* CJK Ideograph */ + [0x7feb, 0x7feb], /* CJK Ideograph */ + [0x7fec, 0x7fec], /* CJK Ideograph */ + [0x7fed, 0x7fed], /* CJK Ideograph */ + [0x7fee, 0x7fee], /* CJK Ideograph */ + [0x7fef, 0x7fef], /* CJK Ideograph */ + [0x7ff0, 0x7ff0], /* CJK Ideograph */ + [0x7ff1, 0x7ff1], /* CJK Ideograph */ + [0x7ff2, 0x7ff2], /* CJK Ideograph */ + [0x7ff3, 0x7ff3], /* CJK Ideograph */ + [0x7ff4, 0x7ff4], /* CJK Ideograph */ + [0x7ff5, 0x7ff5], /* CJK Ideograph */ + [0x7ff6, 0x7ff6], /* CJK Ideograph */ + [0x7ff7, 0x7ff7], /* CJK Ideograph */ + [0x7ff8, 0x7ff8], /* CJK Ideograph */ + [0x7ff9, 0x7ff9], /* CJK Ideograph */ + [0x7ffa, 0x7ffa], /* CJK Ideograph */ + [0x7ffb, 0x7ffb], /* CJK Ideograph */ + [0x7ffc, 0x7ffc], /* CJK Ideograph */ + [0x7ffd, 0x7ffd], /* CJK Ideograph */ + [0x7ffe, 0x7ffe], /* CJK Ideograph */ + [0x7fff, 0x7fff], /* CJK Ideograph */ + [0x8000, 0x8000], /* CJK Ideograph */ + [0x8001, 0x8001], /* CJK Ideograph */ + [0x8002, 0x8002], /* CJK Ideograph */ + [0x8003, 0x8003], /* CJK Ideograph */ + [0x8004, 0x8004], /* CJK Ideograph */ + [0x8005, 0x8005], /* CJK Ideograph */ + [0x8006, 0x8006], /* CJK Ideograph */ + [0x8007, 0x8007], /* CJK Ideograph */ + [0x8008, 0x8008], /* CJK Ideograph */ + [0x8009, 0x8009], /* CJK Ideograph */ + [0x800a, 0x800a], /* CJK Ideograph */ + [0x800b, 0x800b], /* CJK Ideograph */ + [0x800c, 0x800c], /* CJK Ideograph */ + [0x800d, 0x800d], /* CJK Ideograph */ + [0x800e, 0x800e], /* CJK Ideograph */ + [0x800f, 0x800f], /* CJK Ideograph */ + [0x8010, 0x8010], /* CJK Ideograph */ + [0x8011, 0x8011], /* CJK Ideograph */ + [0x8012, 0x8012], /* CJK Ideograph */ + [0x8013, 0x8013], /* CJK Ideograph */ + [0x8014, 0x8014], /* CJK Ideograph */ + [0x8015, 0x8015], /* CJK Ideograph */ + [0x8016, 0x8016], /* CJK Ideograph */ + [0x8017, 0x8017], /* CJK Ideograph */ + [0x8018, 0x8018], /* CJK Ideograph */ + [0x8019, 0x8019], /* CJK Ideograph */ + [0x801a, 0x801a], /* CJK Ideograph */ + [0x801b, 0x801b], /* CJK Ideograph */ + [0x801c, 0x801c], /* CJK Ideograph */ + [0x801d, 0x801d], /* CJK Ideograph */ + [0x801e, 0x801e], /* CJK Ideograph */ + [0x801f, 0x801f], /* CJK Ideograph */ + [0x8020, 0x8020], /* CJK Ideograph */ + [0x8021, 0x8021], /* CJK Ideograph */ + [0x8022, 0x8022], /* CJK Ideograph */ + [0x8023, 0x8023], /* CJK Ideograph */ + [0x8024, 0x8024], /* CJK Ideograph */ + [0x8025, 0x8025], /* CJK Ideograph */ + [0x8026, 0x8026], /* CJK Ideograph */ + [0x8027, 0x8027], /* CJK Ideograph */ + [0x8028, 0x8028], /* CJK Ideograph */ + [0x8029, 0x8029], /* CJK Ideograph */ + [0x802a, 0x802a], /* CJK Ideograph */ + [0x802b, 0x802b], /* CJK Ideograph */ + [0x802c, 0x802c], /* CJK Ideograph */ + [0x802d, 0x802d], /* CJK Ideograph */ + [0x802e, 0x802e], /* CJK Ideograph */ + [0x802f, 0x802f], /* CJK Ideograph */ + [0x8030, 0x8030], /* CJK Ideograph */ + [0x8031, 0x8031], /* CJK Ideograph */ + [0x8032, 0x8032], /* CJK Ideograph */ + [0x8033, 0x8033], /* CJK Ideograph */ + [0x8034, 0x8034], /* CJK Ideograph */ + [0x8035, 0x8035], /* CJK Ideograph */ + [0x8036, 0x8036], /* CJK Ideograph */ + [0x8037, 0x8037], /* CJK Ideograph */ + [0x8038, 0x8038], /* CJK Ideograph */ + [0x8039, 0x8039], /* CJK Ideograph */ + [0x803a, 0x803a], /* CJK Ideograph */ + [0x803b, 0x803b], /* CJK Ideograph */ + [0x803c, 0x803c], /* CJK Ideograph */ + [0x803d, 0x803d], /* CJK Ideograph */ + [0x803e, 0x803e], /* CJK Ideograph */ + [0x803f, 0x803f], /* CJK Ideograph */ + [0x8040, 0x8040], /* CJK Ideograph */ + [0x8041, 0x8041], /* CJK Ideograph */ + [0x8042, 0x8042], /* CJK Ideograph */ + [0x8043, 0x8043], /* CJK Ideograph */ + [0x8044, 0x8044], /* CJK Ideograph */ + [0x8045, 0x8045], /* CJK Ideograph */ + [0x8046, 0x8046], /* CJK Ideograph */ + [0x8047, 0x8047], /* CJK Ideograph */ + [0x8048, 0x8048], /* CJK Ideograph */ + [0x8049, 0x8049], /* CJK Ideograph */ + [0x804a, 0x804a], /* CJK Ideograph */ + [0x804b, 0x804b], /* CJK Ideograph */ + [0x804c, 0x804c], /* CJK Ideograph */ + [0x804d, 0x804d], /* CJK Ideograph */ + [0x804e, 0x804e], /* CJK Ideograph */ + [0x804f, 0x804f], /* CJK Ideograph */ + [0x8050, 0x8050], /* CJK Ideograph */ + [0x8051, 0x8051], /* CJK Ideograph */ + [0x8052, 0x8052], /* CJK Ideograph */ + [0x8053, 0x8053], /* CJK Ideograph */ + [0x8054, 0x8054], /* CJK Ideograph */ + [0x8055, 0x8055], /* CJK Ideograph */ + [0x8056, 0x8056], /* CJK Ideograph */ + [0x8057, 0x8057], /* CJK Ideograph */ + [0x8058, 0x8058], /* CJK Ideograph */ + [0x8059, 0x8059], /* CJK Ideograph */ + [0x805a, 0x805a], /* CJK Ideograph */ + [0x805b, 0x805b], /* CJK Ideograph */ + [0x805c, 0x805c], /* CJK Ideograph */ + [0x805d, 0x805d], /* CJK Ideograph */ + [0x805e, 0x805e], /* CJK Ideograph */ + [0x805f, 0x805f], /* CJK Ideograph */ + [0x8060, 0x8060], /* CJK Ideograph */ + [0x8061, 0x8061], /* CJK Ideograph */ + [0x8062, 0x8062], /* CJK Ideograph */ + [0x8063, 0x8063], /* CJK Ideograph */ + [0x8064, 0x8064], /* CJK Ideograph */ + [0x8065, 0x8065], /* CJK Ideograph */ + [0x8066, 0x8066], /* CJK Ideograph */ + [0x8067, 0x8067], /* CJK Ideograph */ + [0x8068, 0x8068], /* CJK Ideograph */ + [0x8069, 0x8069], /* CJK Ideograph */ + [0x806a, 0x806a], /* CJK Ideograph */ + [0x806b, 0x806b], /* CJK Ideograph */ + [0x806c, 0x806c], /* CJK Ideograph */ + [0x806d, 0x806d], /* CJK Ideograph */ + [0x806e, 0x806e], /* CJK Ideograph */ + [0x806f, 0x806f], /* CJK Ideograph */ + [0x8070, 0x8070], /* CJK Ideograph */ + [0x8071, 0x8071], /* CJK Ideograph */ + [0x8072, 0x8072], /* CJK Ideograph */ + [0x8073, 0x8073], /* CJK Ideograph */ + [0x8074, 0x8074], /* CJK Ideograph */ + [0x8075, 0x8075], /* CJK Ideograph */ + [0x8076, 0x8076], /* CJK Ideograph */ + [0x8077, 0x8077], /* CJK Ideograph */ + [0x8078, 0x8078], /* CJK Ideograph */ + [0x8079, 0x8079], /* CJK Ideograph */ + [0x807a, 0x807a], /* CJK Ideograph */ + [0x807b, 0x807b], /* CJK Ideograph */ + [0x807c, 0x807c], /* CJK Ideograph */ + [0x807d, 0x807d], /* CJK Ideograph */ + [0x807e, 0x807e], /* CJK Ideograph */ + [0x807f, 0x807f], /* CJK Ideograph */ + [0x8080, 0x8080], /* CJK Ideograph */ + [0x8081, 0x8081], /* CJK Ideograph */ + [0x8082, 0x8082], /* CJK Ideograph */ + [0x8083, 0x8083], /* CJK Ideograph */ + [0x8084, 0x8084], /* CJK Ideograph */ + [0x8085, 0x8085], /* CJK Ideograph */ + [0x8086, 0x8086], /* CJK Ideograph */ + [0x8087, 0x8087], /* CJK Ideograph */ + [0x8088, 0x8088], /* CJK Ideograph */ + [0x8089, 0x8089], /* CJK Ideograph */ + [0x808a, 0x808a], /* CJK Ideograph */ + [0x808b, 0x808b], /* CJK Ideograph */ + [0x808c, 0x808c], /* CJK Ideograph */ + [0x808d, 0x808d], /* CJK Ideograph */ + [0x808e, 0x808e], /* CJK Ideograph */ + [0x808f, 0x808f], /* CJK Ideograph */ + [0x8090, 0x8090], /* CJK Ideograph */ + [0x8091, 0x8091], /* CJK Ideograph */ + [0x8092, 0x8092], /* CJK Ideograph */ + [0x8093, 0x8093], /* CJK Ideograph */ + [0x8094, 0x8094], /* CJK Ideograph */ + [0x8095, 0x8095], /* CJK Ideograph */ + [0x8096, 0x8096], /* CJK Ideograph */ + [0x8097, 0x8097], /* CJK Ideograph */ + [0x8098, 0x8098], /* CJK Ideograph */ + [0x8099, 0x8099], /* CJK Ideograph */ + [0x809a, 0x809a], /* CJK Ideograph */ + [0x809b, 0x809b], /* CJK Ideograph */ + [0x809c, 0x809c], /* CJK Ideograph */ + [0x809d, 0x809d], /* CJK Ideograph */ + [0x809e, 0x809e], /* CJK Ideograph */ + [0x809f, 0x809f], /* CJK Ideograph */ + [0x80a0, 0x80a0], /* CJK Ideograph */ + [0x80a1, 0x80a1], /* CJK Ideograph */ + [0x80a2, 0x80a2], /* CJK Ideograph */ + [0x80a3, 0x80a3], /* CJK Ideograph */ + [0x80a4, 0x80a4], /* CJK Ideograph */ + [0x80a5, 0x80a5], /* CJK Ideograph */ + [0x80a6, 0x80a6], /* CJK Ideograph */ + [0x80a7, 0x80a7], /* CJK Ideograph */ + [0x80a8, 0x80a8], /* CJK Ideograph */ + [0x80a9, 0x80a9], /* CJK Ideograph */ + [0x80aa, 0x80aa], /* CJK Ideograph */ + [0x80ab, 0x80ab], /* CJK Ideograph */ + [0x80ac, 0x80ac], /* CJK Ideograph */ + [0x80ad, 0x80ad], /* CJK Ideograph */ + [0x80ae, 0x80ae], /* CJK Ideograph */ + [0x80af, 0x80af], /* CJK Ideograph */ + [0x80b0, 0x80b0], /* CJK Ideograph */ + [0x80b1, 0x80b1], /* CJK Ideograph */ + [0x80b2, 0x80b2], /* CJK Ideograph */ + [0x80b3, 0x80b3], /* CJK Ideograph */ + [0x80b4, 0x80b4], /* CJK Ideograph */ + [0x80b5, 0x80b5], /* CJK Ideograph */ + [0x80b6, 0x80b6], /* CJK Ideograph */ + [0x80b7, 0x80b7], /* CJK Ideograph */ + [0x80b8, 0x80b8], /* CJK Ideograph */ + [0x80b9, 0x80b9], /* CJK Ideograph */ + [0x80ba, 0x80ba], /* CJK Ideograph */ + [0x80bb, 0x80bb], /* CJK Ideograph */ + [0x80bc, 0x80bc], /* CJK Ideograph */ + [0x80bd, 0x80bd], /* CJK Ideograph */ + [0x80be, 0x80be], /* CJK Ideograph */ + [0x80bf, 0x80bf], /* CJK Ideograph */ + [0x80c0, 0x80c0], /* CJK Ideograph */ + [0x80c1, 0x80c1], /* CJK Ideograph */ + [0x80c2, 0x80c2], /* CJK Ideograph */ + [0x80c3, 0x80c3], /* CJK Ideograph */ + [0x80c4, 0x80c4], /* CJK Ideograph */ + [0x80c5, 0x80c5], /* CJK Ideograph */ + [0x80c6, 0x80c6], /* CJK Ideograph */ + [0x80c7, 0x80c7], /* CJK Ideograph */ + [0x80c8, 0x80c8], /* CJK Ideograph */ + [0x80c9, 0x80c9], /* CJK Ideograph */ + [0x80ca, 0x80ca], /* CJK Ideograph */ + [0x80cb, 0x80cb], /* CJK Ideograph */ + [0x80cc, 0x80cc], /* CJK Ideograph */ + [0x80cd, 0x80cd], /* CJK Ideograph */ + [0x80ce, 0x80ce], /* CJK Ideograph */ + [0x80cf, 0x80cf], /* CJK Ideograph */ + [0x80d0, 0x80d0], /* CJK Ideograph */ + [0x80d1, 0x80d1], /* CJK Ideograph */ + [0x80d2, 0x80d2], /* CJK Ideograph */ + [0x80d3, 0x80d3], /* CJK Ideograph */ + [0x80d4, 0x80d4], /* CJK Ideograph */ + [0x80d5, 0x80d5], /* CJK Ideograph */ + [0x80d6, 0x80d6], /* CJK Ideograph */ + [0x80d7, 0x80d7], /* CJK Ideograph */ + [0x80d8, 0x80d8], /* CJK Ideograph */ + [0x80d9, 0x80d9], /* CJK Ideograph */ + [0x80da, 0x80da], /* CJK Ideograph */ + [0x80db, 0x80db], /* CJK Ideograph */ + [0x80dc, 0x80dc], /* CJK Ideograph */ + [0x80dd, 0x80dd], /* CJK Ideograph */ + [0x80de, 0x80de], /* CJK Ideograph */ + [0x80df, 0x80df], /* CJK Ideograph */ + [0x80e0, 0x80e0], /* CJK Ideograph */ + [0x80e1, 0x80e1], /* CJK Ideograph */ + [0x80e2, 0x80e2], /* CJK Ideograph */ + [0x80e3, 0x80e3], /* CJK Ideograph */ + [0x80e4, 0x80e4], /* CJK Ideograph */ + [0x80e5, 0x80e5], /* CJK Ideograph */ + [0x80e6, 0x80e6], /* CJK Ideograph */ + [0x80e7, 0x80e7], /* CJK Ideograph */ + [0x80e8, 0x80e8], /* CJK Ideograph */ + [0x80e9, 0x80e9], /* CJK Ideograph */ + [0x80ea, 0x80ea], /* CJK Ideograph */ + [0x80eb, 0x80eb], /* CJK Ideograph */ + [0x80ec, 0x80ec], /* CJK Ideograph */ + [0x80ed, 0x80ed], /* CJK Ideograph */ + [0x80ee, 0x80ee], /* CJK Ideograph */ + [0x80ef, 0x80ef], /* CJK Ideograph */ + [0x80f0, 0x80f0], /* CJK Ideograph */ + [0x80f1, 0x80f1], /* CJK Ideograph */ + [0x80f2, 0x80f2], /* CJK Ideograph */ + [0x80f3, 0x80f3], /* CJK Ideograph */ + [0x80f4, 0x80f4], /* CJK Ideograph */ + [0x80f5, 0x80f5], /* CJK Ideograph */ + [0x80f6, 0x80f6], /* CJK Ideograph */ + [0x80f7, 0x80f7], /* CJK Ideograph */ + [0x80f8, 0x80f8], /* CJK Ideograph */ + [0x80f9, 0x80f9], /* CJK Ideograph */ + [0x80fa, 0x80fa], /* CJK Ideograph */ + [0x80fb, 0x80fb], /* CJK Ideograph */ + [0x80fc, 0x80fc], /* CJK Ideograph */ + [0x80fd, 0x80fd], /* CJK Ideograph */ + [0x80fe, 0x80fe], /* CJK Ideograph */ + [0x80ff, 0x80ff], /* CJK Ideograph */ + [0x8100, 0x8100], /* CJK Ideograph */ + [0x8101, 0x8101], /* CJK Ideograph */ + [0x8102, 0x8102], /* CJK Ideograph */ + [0x8103, 0x8103], /* CJK Ideograph */ + [0x8104, 0x8104], /* CJK Ideograph */ + [0x8105, 0x8105], /* CJK Ideograph */ + [0x8106, 0x8106], /* CJK Ideograph */ + [0x8107, 0x8107], /* CJK Ideograph */ + [0x8108, 0x8108], /* CJK Ideograph */ + [0x8109, 0x8109], /* CJK Ideograph */ + [0x810a, 0x810a], /* CJK Ideograph */ + [0x810b, 0x810b], /* CJK Ideograph */ + [0x810c, 0x810c], /* CJK Ideograph */ + [0x810d, 0x810d], /* CJK Ideograph */ + [0x810e, 0x810e], /* CJK Ideograph */ + [0x810f, 0x810f], /* CJK Ideograph */ + [0x8110, 0x8110], /* CJK Ideograph */ + [0x8111, 0x8111], /* CJK Ideograph */ + [0x8112, 0x8112], /* CJK Ideograph */ + [0x8113, 0x8113], /* CJK Ideograph */ + [0x8114, 0x8114], /* CJK Ideograph */ + [0x8115, 0x8115], /* CJK Ideograph */ + [0x8116, 0x8116], /* CJK Ideograph */ + [0x8117, 0x8117], /* CJK Ideograph */ + [0x8118, 0x8118], /* CJK Ideograph */ + [0x8119, 0x8119], /* CJK Ideograph */ + [0x811a, 0x811a], /* CJK Ideograph */ + [0x811b, 0x811b], /* CJK Ideograph */ + [0x811c, 0x811c], /* CJK Ideograph */ + [0x811d, 0x811d], /* CJK Ideograph */ + [0x811e, 0x811e], /* CJK Ideograph */ + [0x811f, 0x811f], /* CJK Ideograph */ + [0x8120, 0x8120], /* CJK Ideograph */ + [0x8121, 0x8121], /* CJK Ideograph */ + [0x8122, 0x8122], /* CJK Ideograph */ + [0x8123, 0x8123], /* CJK Ideograph */ + [0x8124, 0x8124], /* CJK Ideograph */ + [0x8125, 0x8125], /* CJK Ideograph */ + [0x8126, 0x8126], /* CJK Ideograph */ + [0x8127, 0x8127], /* CJK Ideograph */ + [0x8128, 0x8128], /* CJK Ideograph */ + [0x8129, 0x8129], /* CJK Ideograph */ + [0x812a, 0x812a], /* CJK Ideograph */ + [0x812b, 0x812b], /* CJK Ideograph */ + [0x812c, 0x812c], /* CJK Ideograph */ + [0x812d, 0x812d], /* CJK Ideograph */ + [0x812e, 0x812e], /* CJK Ideograph */ + [0x812f, 0x812f], /* CJK Ideograph */ + [0x8130, 0x8130], /* CJK Ideograph */ + [0x8131, 0x8131], /* CJK Ideograph */ + [0x8132, 0x8132], /* CJK Ideograph */ + [0x8133, 0x8133], /* CJK Ideograph */ + [0x8134, 0x8134], /* CJK Ideograph */ + [0x8135, 0x8135], /* CJK Ideograph */ + [0x8136, 0x8136], /* CJK Ideograph */ + [0x8137, 0x8137], /* CJK Ideograph */ + [0x8138, 0x8138], /* CJK Ideograph */ + [0x8139, 0x8139], /* CJK Ideograph */ + [0x813a, 0x813a], /* CJK Ideograph */ + [0x813b, 0x813b], /* CJK Ideograph */ + [0x813c, 0x813c], /* CJK Ideograph */ + [0x813d, 0x813d], /* CJK Ideograph */ + [0x813e, 0x813e], /* CJK Ideograph */ + [0x813f, 0x813f], /* CJK Ideograph */ + [0x8140, 0x8140], /* CJK Ideograph */ + [0x8141, 0x8141], /* CJK Ideograph */ + [0x8142, 0x8142], /* CJK Ideograph */ + [0x8143, 0x8143], /* CJK Ideograph */ + [0x8144, 0x8144], /* CJK Ideograph */ + [0x8145, 0x8145], /* CJK Ideograph */ + [0x8146, 0x8146], /* CJK Ideograph */ + [0x8147, 0x8147], /* CJK Ideograph */ + [0x8148, 0x8148], /* CJK Ideograph */ + [0x8149, 0x8149], /* CJK Ideograph */ + [0x814a, 0x814a], /* CJK Ideograph */ + [0x814b, 0x814b], /* CJK Ideograph */ + [0x814c, 0x814c], /* CJK Ideograph */ + [0x814d, 0x814d], /* CJK Ideograph */ + [0x814e, 0x814e], /* CJK Ideograph */ + [0x814f, 0x814f], /* CJK Ideograph */ + [0x8150, 0x8150], /* CJK Ideograph */ + [0x8151, 0x8151], /* CJK Ideograph */ + [0x8152, 0x8152], /* CJK Ideograph */ + [0x8153, 0x8153], /* CJK Ideograph */ + [0x8154, 0x8154], /* CJK Ideograph */ + [0x8155, 0x8155], /* CJK Ideograph */ + [0x8156, 0x8156], /* CJK Ideograph */ + [0x8157, 0x8157], /* CJK Ideograph */ + [0x8158, 0x8158], /* CJK Ideograph */ + [0x8159, 0x8159], /* CJK Ideograph */ + [0x815a, 0x815a], /* CJK Ideograph */ + [0x815b, 0x815b], /* CJK Ideograph */ + [0x815c, 0x815c], /* CJK Ideograph */ + [0x815d, 0x815d], /* CJK Ideograph */ + [0x815e, 0x815e], /* CJK Ideograph */ + [0x815f, 0x815f], /* CJK Ideograph */ + [0x8160, 0x8160], /* CJK Ideograph */ + [0x8161, 0x8161], /* CJK Ideograph */ + [0x8162, 0x8162], /* CJK Ideograph */ + [0x8163, 0x8163], /* CJK Ideograph */ + [0x8164, 0x8164], /* CJK Ideograph */ + [0x8165, 0x8165], /* CJK Ideograph */ + [0x8166, 0x8166], /* CJK Ideograph */ + [0x8167, 0x8167], /* CJK Ideograph */ + [0x8168, 0x8168], /* CJK Ideograph */ + [0x8169, 0x8169], /* CJK Ideograph */ + [0x816a, 0x816a], /* CJK Ideograph */ + [0x816b, 0x816b], /* CJK Ideograph */ + [0x816c, 0x816c], /* CJK Ideograph */ + [0x816d, 0x816d], /* CJK Ideograph */ + [0x816e, 0x816e], /* CJK Ideograph */ + [0x816f, 0x816f], /* CJK Ideograph */ + [0x8170, 0x8170], /* CJK Ideograph */ + [0x8171, 0x8171], /* CJK Ideograph */ + [0x8172, 0x8172], /* CJK Ideograph */ + [0x8173, 0x8173], /* CJK Ideograph */ + [0x8174, 0x8174], /* CJK Ideograph */ + [0x8175, 0x8175], /* CJK Ideograph */ + [0x8176, 0x8176], /* CJK Ideograph */ + [0x8177, 0x8177], /* CJK Ideograph */ + [0x8178, 0x8178], /* CJK Ideograph */ + [0x8179, 0x8179], /* CJK Ideograph */ + [0x817a, 0x817a], /* CJK Ideograph */ + [0x817b, 0x817b], /* CJK Ideograph */ + [0x817c, 0x817c], /* CJK Ideograph */ + [0x817d, 0x817d], /* CJK Ideograph */ + [0x817e, 0x817e], /* CJK Ideograph */ + [0x817f, 0x817f], /* CJK Ideograph */ + [0x8180, 0x8180], /* CJK Ideograph */ + [0x8181, 0x8181], /* CJK Ideograph */ + [0x8182, 0x8182], /* CJK Ideograph */ + [0x8183, 0x8183], /* CJK Ideograph */ + [0x8184, 0x8184], /* CJK Ideograph */ + [0x8185, 0x8185], /* CJK Ideograph */ + [0x8186, 0x8186], /* CJK Ideograph */ + [0x8187, 0x8187], /* CJK Ideograph */ + [0x8188, 0x8188], /* CJK Ideograph */ + [0x8189, 0x8189], /* CJK Ideograph */ + [0x818a, 0x818a], /* CJK Ideograph */ + [0x818b, 0x818b], /* CJK Ideograph */ + [0x818c, 0x818c], /* CJK Ideograph */ + [0x818d, 0x818d], /* CJK Ideograph */ + [0x818e, 0x818e], /* CJK Ideograph */ + [0x818f, 0x818f], /* CJK Ideograph */ + [0x8190, 0x8190], /* CJK Ideograph */ + [0x8191, 0x8191], /* CJK Ideograph */ + [0x8192, 0x8192], /* CJK Ideograph */ + [0x8193, 0x8193], /* CJK Ideograph */ + [0x8194, 0x8194], /* CJK Ideograph */ + [0x8195, 0x8195], /* CJK Ideograph */ + [0x8196, 0x8196], /* CJK Ideograph */ + [0x8197, 0x8197], /* CJK Ideograph */ + [0x8198, 0x8198], /* CJK Ideograph */ + [0x8199, 0x8199], /* CJK Ideograph */ + [0x819a, 0x819a], /* CJK Ideograph */ + [0x819b, 0x819b], /* CJK Ideograph */ + [0x819c, 0x819c], /* CJK Ideograph */ + [0x819d, 0x819d], /* CJK Ideograph */ + [0x819e, 0x819e], /* CJK Ideograph */ + [0x819f, 0x819f], /* CJK Ideograph */ + [0x81a0, 0x81a0], /* CJK Ideograph */ + [0x81a1, 0x81a1], /* CJK Ideograph */ + [0x81a2, 0x81a2], /* CJK Ideograph */ + [0x81a3, 0x81a3], /* CJK Ideograph */ + [0x81a4, 0x81a4], /* CJK Ideograph */ + [0x81a5, 0x81a5], /* CJK Ideograph */ + [0x81a6, 0x81a6], /* CJK Ideograph */ + [0x81a7, 0x81a7], /* CJK Ideograph */ + [0x81a8, 0x81a8], /* CJK Ideograph */ + [0x81a9, 0x81a9], /* CJK Ideograph */ + [0x81aa, 0x81aa], /* CJK Ideograph */ + [0x81ab, 0x81ab], /* CJK Ideograph */ + [0x81ac, 0x81ac], /* CJK Ideograph */ + [0x81ad, 0x81ad], /* CJK Ideograph */ + [0x81ae, 0x81ae], /* CJK Ideograph */ + [0x81af, 0x81af], /* CJK Ideograph */ + [0x81b0, 0x81b0], /* CJK Ideograph */ + [0x81b1, 0x81b1], /* CJK Ideograph */ + [0x81b2, 0x81b2], /* CJK Ideograph */ + [0x81b3, 0x81b3], /* CJK Ideograph */ + [0x81b4, 0x81b4], /* CJK Ideograph */ + [0x81b5, 0x81b5], /* CJK Ideograph */ + [0x81b6, 0x81b6], /* CJK Ideograph */ + [0x81b7, 0x81b7], /* CJK Ideograph */ + [0x81b8, 0x81b8], /* CJK Ideograph */ + [0x81b9, 0x81b9], /* CJK Ideograph */ + [0x81ba, 0x81ba], /* CJK Ideograph */ + [0x81bb, 0x81bb], /* CJK Ideograph */ + [0x81bc, 0x81bc], /* CJK Ideograph */ + [0x81bd, 0x81bd], /* CJK Ideograph */ + [0x81be, 0x81be], /* CJK Ideograph */ + [0x81bf, 0x81bf], /* CJK Ideograph */ + [0x81c0, 0x81c0], /* CJK Ideograph */ + [0x81c1, 0x81c1], /* CJK Ideograph */ + [0x81c2, 0x81c2], /* CJK Ideograph */ + [0x81c3, 0x81c3], /* CJK Ideograph */ + [0x81c4, 0x81c4], /* CJK Ideograph */ + [0x81c5, 0x81c5], /* CJK Ideograph */ + [0x81c6, 0x81c6], /* CJK Ideograph */ + [0x81c7, 0x81c7], /* CJK Ideograph */ + [0x81c8, 0x81c8], /* CJK Ideograph */ + [0x81c9, 0x81c9], /* CJK Ideograph */ + [0x81ca, 0x81ca], /* CJK Ideograph */ + [0x81cb, 0x81cb], /* CJK Ideograph */ + [0x81cc, 0x81cc], /* CJK Ideograph */ + [0x81cd, 0x81cd], /* CJK Ideograph */ + [0x81ce, 0x81ce], /* CJK Ideograph */ + [0x81cf, 0x81cf], /* CJK Ideograph */ + [0x81d0, 0x81d0], /* CJK Ideograph */ + [0x81d1, 0x81d1], /* CJK Ideograph */ + [0x81d2, 0x81d2], /* CJK Ideograph */ + [0x81d3, 0x81d3], /* CJK Ideograph */ + [0x81d4, 0x81d4], /* CJK Ideograph */ + [0x81d5, 0x81d5], /* CJK Ideograph */ + [0x81d6, 0x81d6], /* CJK Ideograph */ + [0x81d7, 0x81d7], /* CJK Ideograph */ + [0x81d8, 0x81d8], /* CJK Ideograph */ + [0x81d9, 0x81d9], /* CJK Ideograph */ + [0x81da, 0x81da], /* CJK Ideograph */ + [0x81db, 0x81db], /* CJK Ideograph */ + [0x81dc, 0x81dc], /* CJK Ideograph */ + [0x81dd, 0x81dd], /* CJK Ideograph */ + [0x81de, 0x81de], /* CJK Ideograph */ + [0x81df, 0x81df], /* CJK Ideograph */ + [0x81e0, 0x81e0], /* CJK Ideograph */ + [0x81e1, 0x81e1], /* CJK Ideograph */ + [0x81e2, 0x81e2], /* CJK Ideograph */ + [0x81e3, 0x81e3], /* CJK Ideograph */ + [0x81e4, 0x81e4], /* CJK Ideograph */ + [0x81e5, 0x81e5], /* CJK Ideograph */ + [0x81e6, 0x81e6], /* CJK Ideograph */ + [0x81e7, 0x81e7], /* CJK Ideograph */ + [0x81e8, 0x81e8], /* CJK Ideograph */ + [0x81e9, 0x81e9], /* CJK Ideograph */ + [0x81ea, 0x81ea], /* CJK Ideograph */ + [0x81eb, 0x81eb], /* CJK Ideograph */ + [0x81ec, 0x81ec], /* CJK Ideograph */ + [0x81ed, 0x81ed], /* CJK Ideograph */ + [0x81ee, 0x81ee], /* CJK Ideograph */ + [0x81ef, 0x81ef], /* CJK Ideograph */ + [0x81f0, 0x81f0], /* CJK Ideograph */ + [0x81f1, 0x81f1], /* CJK Ideograph */ + [0x81f2, 0x81f2], /* CJK Ideograph */ + [0x81f3, 0x81f3], /* CJK Ideograph */ + [0x81f4, 0x81f4], /* CJK Ideograph */ + [0x81f5, 0x81f5], /* CJK Ideograph */ + [0x81f6, 0x81f6], /* CJK Ideograph */ + [0x81f7, 0x81f7], /* CJK Ideograph */ + [0x81f8, 0x81f8], /* CJK Ideograph */ + [0x81f9, 0x81f9], /* CJK Ideograph */ + [0x81fa, 0x81fa], /* CJK Ideograph */ + [0x81fb, 0x81fb], /* CJK Ideograph */ + [0x81fc, 0x81fc], /* CJK Ideograph */ + [0x81fd, 0x81fd], /* CJK Ideograph */ + [0x81fe, 0x81fe], /* CJK Ideograph */ + [0x81ff, 0x81ff], /* CJK Ideograph */ + [0x8200, 0x8200], /* CJK Ideograph */ + [0x8201, 0x8201], /* CJK Ideograph */ + [0x8202, 0x8202], /* CJK Ideograph */ + [0x8203, 0x8203], /* CJK Ideograph */ + [0x8204, 0x8204], /* CJK Ideograph */ + [0x8205, 0x8205], /* CJK Ideograph */ + [0x8206, 0x8206], /* CJK Ideograph */ + [0x8207, 0x8207], /* CJK Ideograph */ + [0x8208, 0x8208], /* CJK Ideograph */ + [0x8209, 0x8209], /* CJK Ideograph */ + [0x820a, 0x820a], /* CJK Ideograph */ + [0x820b, 0x820b], /* CJK Ideograph */ + [0x820c, 0x820c], /* CJK Ideograph */ + [0x820d, 0x820d], /* CJK Ideograph */ + [0x820e, 0x820e], /* CJK Ideograph */ + [0x820f, 0x820f], /* CJK Ideograph */ + [0x8210, 0x8210], /* CJK Ideograph */ + [0x8211, 0x8211], /* CJK Ideograph */ + [0x8212, 0x8212], /* CJK Ideograph */ + [0x8213, 0x8213], /* CJK Ideograph */ + [0x8214, 0x8214], /* CJK Ideograph */ + [0x8215, 0x8215], /* CJK Ideograph */ + [0x8216, 0x8216], /* CJK Ideograph */ + [0x8217, 0x8217], /* CJK Ideograph */ + [0x8218, 0x8218], /* CJK Ideograph */ + [0x8219, 0x8219], /* CJK Ideograph */ + [0x821a, 0x821a], /* CJK Ideograph */ + [0x821b, 0x821b], /* CJK Ideograph */ + [0x821c, 0x821c], /* CJK Ideograph */ + [0x821d, 0x821d], /* CJK Ideograph */ + [0x821e, 0x821e], /* CJK Ideograph */ + [0x821f, 0x821f], /* CJK Ideograph */ + [0x8220, 0x8220], /* CJK Ideograph */ + [0x8221, 0x8221], /* CJK Ideograph */ + [0x8222, 0x8222], /* CJK Ideograph */ + [0x8223, 0x8223], /* CJK Ideograph */ + [0x8224, 0x8224], /* CJK Ideograph */ + [0x8225, 0x8225], /* CJK Ideograph */ + [0x8226, 0x8226], /* CJK Ideograph */ + [0x8227, 0x8227], /* CJK Ideograph */ + [0x8228, 0x8228], /* CJK Ideograph */ + [0x8229, 0x8229], /* CJK Ideograph */ + [0x822a, 0x822a], /* CJK Ideograph */ + [0x822b, 0x822b], /* CJK Ideograph */ + [0x822c, 0x822c], /* CJK Ideograph */ + [0x822d, 0x822d], /* CJK Ideograph */ + [0x822e, 0x822e], /* CJK Ideograph */ + [0x822f, 0x822f], /* CJK Ideograph */ + [0x8230, 0x8230], /* CJK Ideograph */ + [0x8231, 0x8231], /* CJK Ideograph */ + [0x8232, 0x8232], /* CJK Ideograph */ + [0x8233, 0x8233], /* CJK Ideograph */ + [0x8234, 0x8234], /* CJK Ideograph */ + [0x8235, 0x8235], /* CJK Ideograph */ + [0x8236, 0x8236], /* CJK Ideograph */ + [0x8237, 0x8237], /* CJK Ideograph */ + [0x8238, 0x8238], /* CJK Ideograph */ + [0x8239, 0x8239], /* CJK Ideograph */ + [0x823a, 0x823a], /* CJK Ideograph */ + [0x823b, 0x823b], /* CJK Ideograph */ + [0x823c, 0x823c], /* CJK Ideograph */ + [0x823d, 0x823d], /* CJK Ideograph */ + [0x823e, 0x823e], /* CJK Ideograph */ + [0x823f, 0x823f], /* CJK Ideograph */ + [0x8240, 0x8240], /* CJK Ideograph */ + [0x8241, 0x8241], /* CJK Ideograph */ + [0x8242, 0x8242], /* CJK Ideograph */ + [0x8243, 0x8243], /* CJK Ideograph */ + [0x8244, 0x8244], /* CJK Ideograph */ + [0x8245, 0x8245], /* CJK Ideograph */ + [0x8246, 0x8246], /* CJK Ideograph */ + [0x8247, 0x8247], /* CJK Ideograph */ + [0x8248, 0x8248], /* CJK Ideograph */ + [0x8249, 0x8249], /* CJK Ideograph */ + [0x824a, 0x824a], /* CJK Ideograph */ + [0x824b, 0x824b], /* CJK Ideograph */ + [0x824c, 0x824c], /* CJK Ideograph */ + [0x824d, 0x824d], /* CJK Ideograph */ + [0x824e, 0x824e], /* CJK Ideograph */ + [0x824f, 0x824f], /* CJK Ideograph */ + [0x8250, 0x8250], /* CJK Ideograph */ + [0x8251, 0x8251], /* CJK Ideograph */ + [0x8252, 0x8252], /* CJK Ideograph */ + [0x8253, 0x8253], /* CJK Ideograph */ + [0x8254, 0x8254], /* CJK Ideograph */ + [0x8255, 0x8255], /* CJK Ideograph */ + [0x8256, 0x8256], /* CJK Ideograph */ + [0x8257, 0x8257], /* CJK Ideograph */ + [0x8258, 0x8258], /* CJK Ideograph */ + [0x8259, 0x8259], /* CJK Ideograph */ + [0x825a, 0x825a], /* CJK Ideograph */ + [0x825b, 0x825b], /* CJK Ideograph */ + [0x825c, 0x825c], /* CJK Ideograph */ + [0x825d, 0x825d], /* CJK Ideograph */ + [0x825e, 0x825e], /* CJK Ideograph */ + [0x825f, 0x825f], /* CJK Ideograph */ + [0x8260, 0x8260], /* CJK Ideograph */ + [0x8261, 0x8261], /* CJK Ideograph */ + [0x8262, 0x8262], /* CJK Ideograph */ + [0x8263, 0x8263], /* CJK Ideograph */ + [0x8264, 0x8264], /* CJK Ideograph */ + [0x8265, 0x8265], /* CJK Ideograph */ + [0x8266, 0x8266], /* CJK Ideograph */ + [0x8267, 0x8267], /* CJK Ideograph */ + [0x8268, 0x8268], /* CJK Ideograph */ + [0x8269, 0x8269], /* CJK Ideograph */ + [0x826a, 0x826a], /* CJK Ideograph */ + [0x826b, 0x826b], /* CJK Ideograph */ + [0x826c, 0x826c], /* CJK Ideograph */ + [0x826d, 0x826d], /* CJK Ideograph */ + [0x826e, 0x826e], /* CJK Ideograph */ + [0x826f, 0x826f], /* CJK Ideograph */ + [0x8270, 0x8270], /* CJK Ideograph */ + [0x8271, 0x8271], /* CJK Ideograph */ + [0x8272, 0x8272], /* CJK Ideograph */ + [0x8273, 0x8273], /* CJK Ideograph */ + [0x8274, 0x8274], /* CJK Ideograph */ + [0x8275, 0x8275], /* CJK Ideograph */ + [0x8276, 0x8276], /* CJK Ideograph */ + [0x8277, 0x8277], /* CJK Ideograph */ + [0x8278, 0x8278], /* CJK Ideograph */ + [0x8279, 0x8279], /* CJK Ideograph */ + [0x827a, 0x827a], /* CJK Ideograph */ + [0x827b, 0x827b], /* CJK Ideograph */ + [0x827c, 0x827c], /* CJK Ideograph */ + [0x827d, 0x827d], /* CJK Ideograph */ + [0x827e, 0x827e], /* CJK Ideograph */ + [0x827f, 0x827f], /* CJK Ideograph */ + [0x8280, 0x8280], /* CJK Ideograph */ + [0x8281, 0x8281], /* CJK Ideograph */ + [0x8282, 0x8282], /* CJK Ideograph */ + [0x8283, 0x8283], /* CJK Ideograph */ + [0x8284, 0x8284], /* CJK Ideograph */ + [0x8285, 0x8285], /* CJK Ideograph */ + [0x8286, 0x8286], /* CJK Ideograph */ + [0x8287, 0x8287], /* CJK Ideograph */ + [0x8288, 0x8288], /* CJK Ideograph */ + [0x8289, 0x8289], /* CJK Ideograph */ + [0x828a, 0x828a], /* CJK Ideograph */ + [0x828b, 0x828b], /* CJK Ideograph */ + [0x828c, 0x828c], /* CJK Ideograph */ + [0x828d, 0x828d], /* CJK Ideograph */ + [0x828e, 0x828e], /* CJK Ideograph */ + [0x828f, 0x828f], /* CJK Ideograph */ + [0x8290, 0x8290], /* CJK Ideograph */ + [0x8291, 0x8291], /* CJK Ideograph */ + [0x8292, 0x8292], /* CJK Ideograph */ + [0x8293, 0x8293], /* CJK Ideograph */ + [0x8294, 0x8294], /* CJK Ideograph */ + [0x8295, 0x8295], /* CJK Ideograph */ + [0x8296, 0x8296], /* CJK Ideograph */ + [0x8297, 0x8297], /* CJK Ideograph */ + [0x8298, 0x8298], /* CJK Ideograph */ + [0x8299, 0x8299], /* CJK Ideograph */ + [0x829a, 0x829a], /* CJK Ideograph */ + [0x829b, 0x829b], /* CJK Ideograph */ + [0x829c, 0x829c], /* CJK Ideograph */ + [0x829d, 0x829d], /* CJK Ideograph */ + [0x829e, 0x829e], /* CJK Ideograph */ + [0x829f, 0x829f], /* CJK Ideograph */ + [0x82a0, 0x82a0], /* CJK Ideograph */ + [0x82a1, 0x82a1], /* CJK Ideograph */ + [0x82a2, 0x82a2], /* CJK Ideograph */ + [0x82a3, 0x82a3], /* CJK Ideograph */ + [0x82a4, 0x82a4], /* CJK Ideograph */ + [0x82a5, 0x82a5], /* CJK Ideograph */ + [0x82a6, 0x82a6], /* CJK Ideograph */ + [0x82a7, 0x82a7], /* CJK Ideograph */ + [0x82a8, 0x82a8], /* CJK Ideograph */ + [0x82a9, 0x82a9], /* CJK Ideograph */ + [0x82aa, 0x82aa], /* CJK Ideograph */ + [0x82ab, 0x82ab], /* CJK Ideograph */ + [0x82ac, 0x82ac], /* CJK Ideograph */ + [0x82ad, 0x82ad], /* CJK Ideograph */ + [0x82ae, 0x82ae], /* CJK Ideograph */ + [0x82af, 0x82af], /* CJK Ideograph */ + [0x82b0, 0x82b0], /* CJK Ideograph */ + [0x82b1, 0x82b1], /* CJK Ideograph */ + [0x82b2, 0x82b2], /* CJK Ideograph */ + [0x82b3, 0x82b3], /* CJK Ideograph */ + [0x82b4, 0x82b4], /* CJK Ideograph */ + [0x82b5, 0x82b5], /* CJK Ideograph */ + [0x82b6, 0x82b6], /* CJK Ideograph */ + [0x82b7, 0x82b7], /* CJK Ideograph */ + [0x82b8, 0x82b8], /* CJK Ideograph */ + [0x82b9, 0x82b9], /* CJK Ideograph */ + [0x82ba, 0x82ba], /* CJK Ideograph */ + [0x82bb, 0x82bb], /* CJK Ideograph */ + [0x82bc, 0x82bc], /* CJK Ideograph */ + [0x82bd, 0x82bd], /* CJK Ideograph */ + [0x82be, 0x82be], /* CJK Ideograph */ + [0x82bf, 0x82bf], /* CJK Ideograph */ + [0x82c0, 0x82c0], /* CJK Ideograph */ + [0x82c1, 0x82c1], /* CJK Ideograph */ + [0x82c2, 0x82c2], /* CJK Ideograph */ + [0x82c3, 0x82c3], /* CJK Ideograph */ + [0x82c4, 0x82c4], /* CJK Ideograph */ + [0x82c5, 0x82c5], /* CJK Ideograph */ + [0x82c6, 0x82c6], /* CJK Ideograph */ + [0x82c7, 0x82c7], /* CJK Ideograph */ + [0x82c8, 0x82c8], /* CJK Ideograph */ + [0x82c9, 0x82c9], /* CJK Ideograph */ + [0x82ca, 0x82ca], /* CJK Ideograph */ + [0x82cb, 0x82cb], /* CJK Ideograph */ + [0x82cc, 0x82cc], /* CJK Ideograph */ + [0x82cd, 0x82cd], /* CJK Ideograph */ + [0x82ce, 0x82ce], /* CJK Ideograph */ + [0x82cf, 0x82cf], /* CJK Ideograph */ + [0x82d0, 0x82d0], /* CJK Ideograph */ + [0x82d1, 0x82d1], /* CJK Ideograph */ + [0x82d2, 0x82d2], /* CJK Ideograph */ + [0x82d3, 0x82d3], /* CJK Ideograph */ + [0x82d4, 0x82d4], /* CJK Ideograph */ + [0x82d5, 0x82d5], /* CJK Ideograph */ + [0x82d6, 0x82d6], /* CJK Ideograph */ + [0x82d7, 0x82d7], /* CJK Ideograph */ + [0x82d8, 0x82d8], /* CJK Ideograph */ + [0x82d9, 0x82d9], /* CJK Ideograph */ + [0x82da, 0x82da], /* CJK Ideograph */ + [0x82db, 0x82db], /* CJK Ideograph */ + [0x82dc, 0x82dc], /* CJK Ideograph */ + [0x82dd, 0x82dd], /* CJK Ideograph */ + [0x82de, 0x82de], /* CJK Ideograph */ + [0x82df, 0x82df], /* CJK Ideograph */ + [0x82e0, 0x82e0], /* CJK Ideograph */ + [0x82e1, 0x82e1], /* CJK Ideograph */ + [0x82e2, 0x82e2], /* CJK Ideograph */ + [0x82e3, 0x82e3], /* CJK Ideograph */ + [0x82e4, 0x82e4], /* CJK Ideograph */ + [0x82e5, 0x82e5], /* CJK Ideograph */ + [0x82e6, 0x82e6], /* CJK Ideograph */ + [0x82e7, 0x82e7], /* CJK Ideograph */ + [0x82e8, 0x82e8], /* CJK Ideograph */ + [0x82e9, 0x82e9], /* CJK Ideograph */ + [0x82ea, 0x82ea], /* CJK Ideograph */ + [0x82eb, 0x82eb], /* CJK Ideograph */ + [0x82ec, 0x82ec], /* CJK Ideograph */ + [0x82ed, 0x82ed], /* CJK Ideograph */ + [0x82ee, 0x82ee], /* CJK Ideograph */ + [0x82ef, 0x82ef], /* CJK Ideograph */ + [0x82f0, 0x82f0], /* CJK Ideograph */ + [0x82f1, 0x82f1], /* CJK Ideograph */ + [0x82f2, 0x82f2], /* CJK Ideograph */ + [0x82f3, 0x82f3], /* CJK Ideograph */ + [0x82f4, 0x82f4], /* CJK Ideograph */ + [0x82f5, 0x82f5], /* CJK Ideograph */ + [0x82f6, 0x82f6], /* CJK Ideograph */ + [0x82f7, 0x82f7], /* CJK Ideograph */ + [0x82f8, 0x82f8], /* CJK Ideograph */ + [0x82f9, 0x82f9], /* CJK Ideograph */ + [0x82fa, 0x82fa], /* CJK Ideograph */ + [0x82fb, 0x82fb], /* CJK Ideograph */ + [0x82fc, 0x82fc], /* CJK Ideograph */ + [0x82fd, 0x82fd], /* CJK Ideograph */ + [0x82fe, 0x82fe], /* CJK Ideograph */ + [0x82ff, 0x82ff], /* CJK Ideograph */ + [0x8300, 0x8300], /* CJK Ideograph */ + [0x8301, 0x8301], /* CJK Ideograph */ + [0x8302, 0x8302], /* CJK Ideograph */ + [0x8303, 0x8303], /* CJK Ideograph */ + [0x8304, 0x8304], /* CJK Ideograph */ + [0x8305, 0x8305], /* CJK Ideograph */ + [0x8306, 0x8306], /* CJK Ideograph */ + [0x8307, 0x8307], /* CJK Ideograph */ + [0x8308, 0x8308], /* CJK Ideograph */ + [0x8309, 0x8309], /* CJK Ideograph */ + [0x830a, 0x830a], /* CJK Ideograph */ + [0x830b, 0x830b], /* CJK Ideograph */ + [0x830c, 0x830c], /* CJK Ideograph */ + [0x830d, 0x830d], /* CJK Ideograph */ + [0x830e, 0x830e], /* CJK Ideograph */ + [0x830f, 0x830f], /* CJK Ideograph */ + [0x8310, 0x8310], /* CJK Ideograph */ + [0x8311, 0x8311], /* CJK Ideograph */ + [0x8312, 0x8312], /* CJK Ideograph */ + [0x8313, 0x8313], /* CJK Ideograph */ + [0x8314, 0x8314], /* CJK Ideograph */ + [0x8315, 0x8315], /* CJK Ideograph */ + [0x8316, 0x8316], /* CJK Ideograph */ + [0x8317, 0x8317], /* CJK Ideograph */ + [0x8318, 0x8318], /* CJK Ideograph */ + [0x8319, 0x8319], /* CJK Ideograph */ + [0x831a, 0x831a], /* CJK Ideograph */ + [0x831b, 0x831b], /* CJK Ideograph */ + [0x831c, 0x831c], /* CJK Ideograph */ + [0x831d, 0x831d], /* CJK Ideograph */ + [0x831e, 0x831e], /* CJK Ideograph */ + [0x831f, 0x831f], /* CJK Ideograph */ + [0x8320, 0x8320], /* CJK Ideograph */ + [0x8321, 0x8321], /* CJK Ideograph */ + [0x8322, 0x8322], /* CJK Ideograph */ + [0x8323, 0x8323], /* CJK Ideograph */ + [0x8324, 0x8324], /* CJK Ideograph */ + [0x8325, 0x8325], /* CJK Ideograph */ + [0x8326, 0x8326], /* CJK Ideograph */ + [0x8327, 0x8327], /* CJK Ideograph */ + [0x8328, 0x8328], /* CJK Ideograph */ + [0x8329, 0x8329], /* CJK Ideograph */ + [0x832a, 0x832a], /* CJK Ideograph */ + [0x832b, 0x832b], /* CJK Ideograph */ + [0x832c, 0x832c], /* CJK Ideograph */ + [0x832d, 0x832d], /* CJK Ideograph */ + [0x832e, 0x832e], /* CJK Ideograph */ + [0x832f, 0x832f], /* CJK Ideograph */ + [0x8330, 0x8330], /* CJK Ideograph */ + [0x8331, 0x8331], /* CJK Ideograph */ + [0x8332, 0x8332], /* CJK Ideograph */ + [0x8333, 0x8333], /* CJK Ideograph */ + [0x8334, 0x8334], /* CJK Ideograph */ + [0x8335, 0x8335], /* CJK Ideograph */ + [0x8336, 0x8336], /* CJK Ideograph */ + [0x8337, 0x8337], /* CJK Ideograph */ + [0x8338, 0x8338], /* CJK Ideograph */ + [0x8339, 0x8339], /* CJK Ideograph */ + [0x833a, 0x833a], /* CJK Ideograph */ + [0x833b, 0x833b], /* CJK Ideograph */ + [0x833c, 0x833c], /* CJK Ideograph */ + [0x833d, 0x833d], /* CJK Ideograph */ + [0x833e, 0x833e], /* CJK Ideograph */ + [0x833f, 0x833f], /* CJK Ideograph */ + [0x8340, 0x8340], /* CJK Ideograph */ + [0x8341, 0x8341], /* CJK Ideograph */ + [0x8342, 0x8342], /* CJK Ideograph */ + [0x8343, 0x8343], /* CJK Ideograph */ + [0x8344, 0x8344], /* CJK Ideograph */ + [0x8345, 0x8345], /* CJK Ideograph */ + [0x8346, 0x8346], /* CJK Ideograph */ + [0x8347, 0x8347], /* CJK Ideograph */ + [0x8348, 0x8348], /* CJK Ideograph */ + [0x8349, 0x8349], /* CJK Ideograph */ + [0x834a, 0x834a], /* CJK Ideograph */ + [0x834b, 0x834b], /* CJK Ideograph */ + [0x834c, 0x834c], /* CJK Ideograph */ + [0x834d, 0x834d], /* CJK Ideograph */ + [0x834e, 0x834e], /* CJK Ideograph */ + [0x834f, 0x834f], /* CJK Ideograph */ + [0x8350, 0x8350], /* CJK Ideograph */ + [0x8351, 0x8351], /* CJK Ideograph */ + [0x8352, 0x8352], /* CJK Ideograph */ + [0x8353, 0x8353], /* CJK Ideograph */ + [0x8354, 0x8354], /* CJK Ideograph */ + [0x8355, 0x8355], /* CJK Ideograph */ + [0x8356, 0x8356], /* CJK Ideograph */ + [0x8357, 0x8357], /* CJK Ideograph */ + [0x8358, 0x8358], /* CJK Ideograph */ + [0x8359, 0x8359], /* CJK Ideograph */ + [0x835a, 0x835a], /* CJK Ideograph */ + [0x835b, 0x835b], /* CJK Ideograph */ + [0x835c, 0x835c], /* CJK Ideograph */ + [0x835d, 0x835d], /* CJK Ideograph */ + [0x835e, 0x835e], /* CJK Ideograph */ + [0x835f, 0x835f], /* CJK Ideograph */ + [0x8360, 0x8360], /* CJK Ideograph */ + [0x8361, 0x8361], /* CJK Ideograph */ + [0x8362, 0x8362], /* CJK Ideograph */ + [0x8363, 0x8363], /* CJK Ideograph */ + [0x8364, 0x8364], /* CJK Ideograph */ + [0x8365, 0x8365], /* CJK Ideograph */ + [0x8366, 0x8366], /* CJK Ideograph */ + [0x8367, 0x8367], /* CJK Ideograph */ + [0x8368, 0x8368], /* CJK Ideograph */ + [0x8369, 0x8369], /* CJK Ideograph */ + [0x836a, 0x836a], /* CJK Ideograph */ + [0x836b, 0x836b], /* CJK Ideograph */ + [0x836c, 0x836c], /* CJK Ideograph */ + [0x836d, 0x836d], /* CJK Ideograph */ + [0x836e, 0x836e], /* CJK Ideograph */ + [0x836f, 0x836f], /* CJK Ideograph */ + [0x8370, 0x8370], /* CJK Ideograph */ + [0x8371, 0x8371], /* CJK Ideograph */ + [0x8372, 0x8372], /* CJK Ideograph */ + [0x8373, 0x8373], /* CJK Ideograph */ + [0x8374, 0x8374], /* CJK Ideograph */ + [0x8375, 0x8375], /* CJK Ideograph */ + [0x8376, 0x8376], /* CJK Ideograph */ + [0x8377, 0x8377], /* CJK Ideograph */ + [0x8378, 0x8378], /* CJK Ideograph */ + [0x8379, 0x8379], /* CJK Ideograph */ + [0x837a, 0x837a], /* CJK Ideograph */ + [0x837b, 0x837b], /* CJK Ideograph */ + [0x837c, 0x837c], /* CJK Ideograph */ + [0x837d, 0x837d], /* CJK Ideograph */ + [0x837e, 0x837e], /* CJK Ideograph */ + [0x837f, 0x837f], /* CJK Ideograph */ + [0x8380, 0x8380], /* CJK Ideograph */ + [0x8381, 0x8381], /* CJK Ideograph */ + [0x8382, 0x8382], /* CJK Ideograph */ + [0x8383, 0x8383], /* CJK Ideograph */ + [0x8384, 0x8384], /* CJK Ideograph */ + [0x8385, 0x8385], /* CJK Ideograph */ + [0x8386, 0x8386], /* CJK Ideograph */ + [0x8387, 0x8387], /* CJK Ideograph */ + [0x8388, 0x8388], /* CJK Ideograph */ + [0x8389, 0x8389], /* CJK Ideograph */ + [0x838a, 0x838a], /* CJK Ideograph */ + [0x838b, 0x838b], /* CJK Ideograph */ + [0x838c, 0x838c], /* CJK Ideograph */ + [0x838d, 0x838d], /* CJK Ideograph */ + [0x838e, 0x838e], /* CJK Ideograph */ + [0x838f, 0x838f], /* CJK Ideograph */ + [0x8390, 0x8390], /* CJK Ideograph */ + [0x8391, 0x8391], /* CJK Ideograph */ + [0x8392, 0x8392], /* CJK Ideograph */ + [0x8393, 0x8393], /* CJK Ideograph */ + [0x8394, 0x8394], /* CJK Ideograph */ + [0x8395, 0x8395], /* CJK Ideograph */ + [0x8396, 0x8396], /* CJK Ideograph */ + [0x8397, 0x8397], /* CJK Ideograph */ + [0x8398, 0x8398], /* CJK Ideograph */ + [0x8399, 0x8399], /* CJK Ideograph */ + [0x839a, 0x839a], /* CJK Ideograph */ + [0x839b, 0x839b], /* CJK Ideograph */ + [0x839c, 0x839c], /* CJK Ideograph */ + [0x839d, 0x839d], /* CJK Ideograph */ + [0x839e, 0x839e], /* CJK Ideograph */ + [0x839f, 0x839f], /* CJK Ideograph */ + [0x83a0, 0x83a0], /* CJK Ideograph */ + [0x83a1, 0x83a1], /* CJK Ideograph */ + [0x83a2, 0x83a2], /* CJK Ideograph */ + [0x83a3, 0x83a3], /* CJK Ideograph */ + [0x83a4, 0x83a4], /* CJK Ideograph */ + [0x83a5, 0x83a5], /* CJK Ideograph */ + [0x83a6, 0x83a6], /* CJK Ideograph */ + [0x83a7, 0x83a7], /* CJK Ideograph */ + [0x83a8, 0x83a8], /* CJK Ideograph */ + [0x83a9, 0x83a9], /* CJK Ideograph */ + [0x83aa, 0x83aa], /* CJK Ideograph */ + [0x83ab, 0x83ab], /* CJK Ideograph */ + [0x83ac, 0x83ac], /* CJK Ideograph */ + [0x83ad, 0x83ad], /* CJK Ideograph */ + [0x83ae, 0x83ae], /* CJK Ideograph */ + [0x83af, 0x83af], /* CJK Ideograph */ + [0x83b0, 0x83b0], /* CJK Ideograph */ + [0x83b1, 0x83b1], /* CJK Ideograph */ + [0x83b2, 0x83b2], /* CJK Ideograph */ + [0x83b3, 0x83b3], /* CJK Ideograph */ + [0x83b4, 0x83b4], /* CJK Ideograph */ + [0x83b5, 0x83b5], /* CJK Ideograph */ + [0x83b6, 0x83b6], /* CJK Ideograph */ + [0x83b7, 0x83b7], /* CJK Ideograph */ + [0x83b8, 0x83b8], /* CJK Ideograph */ + [0x83b9, 0x83b9], /* CJK Ideograph */ + [0x83ba, 0x83ba], /* CJK Ideograph */ + [0x83bb, 0x83bb], /* CJK Ideograph */ + [0x83bc, 0x83bc], /* CJK Ideograph */ + [0x83bd, 0x83bd], /* CJK Ideograph */ + [0x83be, 0x83be], /* CJK Ideograph */ + [0x83bf, 0x83bf], /* CJK Ideograph */ + [0x83c0, 0x83c0], /* CJK Ideograph */ + [0x83c1, 0x83c1], /* CJK Ideograph */ + [0x83c2, 0x83c2], /* CJK Ideograph */ + [0x83c3, 0x83c3], /* CJK Ideograph */ + [0x83c4, 0x83c4], /* CJK Ideograph */ + [0x83c5, 0x83c5], /* CJK Ideograph */ + [0x83c6, 0x83c6], /* CJK Ideograph */ + [0x83c7, 0x83c7], /* CJK Ideograph */ + [0x83c8, 0x83c8], /* CJK Ideograph */ + [0x83c9, 0x83c9], /* CJK Ideograph */ + [0x83ca, 0x83ca], /* CJK Ideograph */ + [0x83cb, 0x83cb], /* CJK Ideograph */ + [0x83cc, 0x83cc], /* CJK Ideograph */ + [0x83cd, 0x83cd], /* CJK Ideograph */ + [0x83ce, 0x83ce], /* CJK Ideograph */ + [0x83cf, 0x83cf], /* CJK Ideograph */ + [0x83d0, 0x83d0], /* CJK Ideograph */ + [0x83d1, 0x83d1], /* CJK Ideograph */ + [0x83d2, 0x83d2], /* CJK Ideograph */ + [0x83d3, 0x83d3], /* CJK Ideograph */ + [0x83d4, 0x83d4], /* CJK Ideograph */ + [0x83d5, 0x83d5], /* CJK Ideograph */ + [0x83d6, 0x83d6], /* CJK Ideograph */ + [0x83d7, 0x83d7], /* CJK Ideograph */ + [0x83d8, 0x83d8], /* CJK Ideograph */ + [0x83d9, 0x83d9], /* CJK Ideograph */ + [0x83da, 0x83da], /* CJK Ideograph */ + [0x83db, 0x83db], /* CJK Ideograph */ + [0x83dc, 0x83dc], /* CJK Ideograph */ + [0x83dd, 0x83dd], /* CJK Ideograph */ + [0x83de, 0x83de], /* CJK Ideograph */ + [0x83df, 0x83df], /* CJK Ideograph */ + [0x83e0, 0x83e0], /* CJK Ideograph */ + [0x83e1, 0x83e1], /* CJK Ideograph */ + [0x83e2, 0x83e2], /* CJK Ideograph */ + [0x83e3, 0x83e3], /* CJK Ideograph */ + [0x83e4, 0x83e4], /* CJK Ideograph */ + [0x83e5, 0x83e5], /* CJK Ideograph */ + [0x83e6, 0x83e6], /* CJK Ideograph */ + [0x83e7, 0x83e7], /* CJK Ideograph */ + [0x83e8, 0x83e8], /* CJK Ideograph */ + [0x83e9, 0x83e9], /* CJK Ideograph */ + [0x83ea, 0x83ea], /* CJK Ideograph */ + [0x83eb, 0x83eb], /* CJK Ideograph */ + [0x83ec, 0x83ec], /* CJK Ideograph */ + [0x83ed, 0x83ed], /* CJK Ideograph */ + [0x83ee, 0x83ee], /* CJK Ideograph */ + [0x83ef, 0x83ef], /* CJK Ideograph */ + [0x83f0, 0x83f0], /* CJK Ideograph */ + [0x83f1, 0x83f1], /* CJK Ideograph */ + [0x83f2, 0x83f2], /* CJK Ideograph */ + [0x83f3, 0x83f3], /* CJK Ideograph */ + [0x83f4, 0x83f4], /* CJK Ideograph */ + [0x83f5, 0x83f5], /* CJK Ideograph */ + [0x83f6, 0x83f6], /* CJK Ideograph */ + [0x83f7, 0x83f7], /* CJK Ideograph */ + [0x83f8, 0x83f8], /* CJK Ideograph */ + [0x83f9, 0x83f9], /* CJK Ideograph */ + [0x83fa, 0x83fa], /* CJK Ideograph */ + [0x83fb, 0x83fb], /* CJK Ideograph */ + [0x83fc, 0x83fc], /* CJK Ideograph */ + [0x83fd, 0x83fd], /* CJK Ideograph */ + [0x83fe, 0x83fe], /* CJK Ideograph */ + [0x83ff, 0x83ff], /* CJK Ideograph */ + [0x8400, 0x8400], /* CJK Ideograph */ + [0x8401, 0x8401], /* CJK Ideograph */ + [0x8402, 0x8402], /* CJK Ideograph */ + [0x8403, 0x8403], /* CJK Ideograph */ + [0x8404, 0x8404], /* CJK Ideograph */ + [0x8405, 0x8405], /* CJK Ideograph */ + [0x8406, 0x8406], /* CJK Ideograph */ + [0x8407, 0x8407], /* CJK Ideograph */ + [0x8408, 0x8408], /* CJK Ideograph */ + [0x8409, 0x8409], /* CJK Ideograph */ + [0x840a, 0x840a], /* CJK Ideograph */ + [0x840b, 0x840b], /* CJK Ideograph */ + [0x840c, 0x840c], /* CJK Ideograph */ + [0x840d, 0x840d], /* CJK Ideograph */ + [0x840e, 0x840e], /* CJK Ideograph */ + [0x840f, 0x840f], /* CJK Ideograph */ + [0x8410, 0x8410], /* CJK Ideograph */ + [0x8411, 0x8411], /* CJK Ideograph */ + [0x8412, 0x8412], /* CJK Ideograph */ + [0x8413, 0x8413], /* CJK Ideograph */ + [0x8414, 0x8414], /* CJK Ideograph */ + [0x8415, 0x8415], /* CJK Ideograph */ + [0x8416, 0x8416], /* CJK Ideograph */ + [0x8417, 0x8417], /* CJK Ideograph */ + [0x8418, 0x8418], /* CJK Ideograph */ + [0x8419, 0x8419], /* CJK Ideograph */ + [0x841a, 0x841a], /* CJK Ideograph */ + [0x841b, 0x841b], /* CJK Ideograph */ + [0x841c, 0x841c], /* CJK Ideograph */ + [0x841d, 0x841d], /* CJK Ideograph */ + [0x841e, 0x841e], /* CJK Ideograph */ + [0x841f, 0x841f], /* CJK Ideograph */ + [0x8420, 0x8420], /* CJK Ideograph */ + [0x8421, 0x8421], /* CJK Ideograph */ + [0x8422, 0x8422], /* CJK Ideograph */ + [0x8423, 0x8423], /* CJK Ideograph */ + [0x8424, 0x8424], /* CJK Ideograph */ + [0x8425, 0x8425], /* CJK Ideograph */ + [0x8426, 0x8426], /* CJK Ideograph */ + [0x8427, 0x8427], /* CJK Ideograph */ + [0x8428, 0x8428], /* CJK Ideograph */ + [0x8429, 0x8429], /* CJK Ideograph */ + [0x842a, 0x842a], /* CJK Ideograph */ + [0x842b, 0x842b], /* CJK Ideograph */ + [0x842c, 0x842c], /* CJK Ideograph */ + [0x842d, 0x842d], /* CJK Ideograph */ + [0x842e, 0x842e], /* CJK Ideograph */ + [0x842f, 0x842f], /* CJK Ideograph */ + [0x8430, 0x8430], /* CJK Ideograph */ + [0x8431, 0x8431], /* CJK Ideograph */ + [0x8432, 0x8432], /* CJK Ideograph */ + [0x8433, 0x8433], /* CJK Ideograph */ + [0x8434, 0x8434], /* CJK Ideograph */ + [0x8435, 0x8435], /* CJK Ideograph */ + [0x8436, 0x8436], /* CJK Ideograph */ + [0x8437, 0x8437], /* CJK Ideograph */ + [0x8438, 0x8438], /* CJK Ideograph */ + [0x8439, 0x8439], /* CJK Ideograph */ + [0x843a, 0x843a], /* CJK Ideograph */ + [0x843b, 0x843b], /* CJK Ideograph */ + [0x843c, 0x843c], /* CJK Ideograph */ + [0x843d, 0x843d], /* CJK Ideograph */ + [0x843e, 0x843e], /* CJK Ideograph */ + [0x843f, 0x843f], /* CJK Ideograph */ + [0x8440, 0x8440], /* CJK Ideograph */ + [0x8441, 0x8441], /* CJK Ideograph */ + [0x8442, 0x8442], /* CJK Ideograph */ + [0x8443, 0x8443], /* CJK Ideograph */ + [0x8444, 0x8444], /* CJK Ideograph */ + [0x8445, 0x8445], /* CJK Ideograph */ + [0x8446, 0x8446], /* CJK Ideograph */ + [0x8447, 0x8447], /* CJK Ideograph */ + [0x8448, 0x8448], /* CJK Ideograph */ + [0x8449, 0x8449], /* CJK Ideograph */ + [0x844a, 0x844a], /* CJK Ideograph */ + [0x844b, 0x844b], /* CJK Ideograph */ + [0x844c, 0x844c], /* CJK Ideograph */ + [0x844d, 0x844d], /* CJK Ideograph */ + [0x844e, 0x844e], /* CJK Ideograph */ + [0x844f, 0x844f], /* CJK Ideograph */ + [0x8450, 0x8450], /* CJK Ideograph */ + [0x8451, 0x8451], /* CJK Ideograph */ + [0x8452, 0x8452], /* CJK Ideograph */ + [0x8453, 0x8453], /* CJK Ideograph */ + [0x8454, 0x8454], /* CJK Ideograph */ + [0x8455, 0x8455], /* CJK Ideograph */ + [0x8456, 0x8456], /* CJK Ideograph */ + [0x8457, 0x8457], /* CJK Ideograph */ + [0x8458, 0x8458], /* CJK Ideograph */ + [0x8459, 0x8459], /* CJK Ideograph */ + [0x845a, 0x845a], /* CJK Ideograph */ + [0x845b, 0x845b], /* CJK Ideograph */ + [0x845c, 0x845c], /* CJK Ideograph */ + [0x845d, 0x845d], /* CJK Ideograph */ + [0x845e, 0x845e], /* CJK Ideograph */ + [0x845f, 0x845f], /* CJK Ideograph */ + [0x8460, 0x8460], /* CJK Ideograph */ + [0x8461, 0x8461], /* CJK Ideograph */ + [0x8462, 0x8462], /* CJK Ideograph */ + [0x8463, 0x8463], /* CJK Ideograph */ + [0x8464, 0x8464], /* CJK Ideograph */ + [0x8465, 0x8465], /* CJK Ideograph */ + [0x8466, 0x8466], /* CJK Ideograph */ + [0x8467, 0x8467], /* CJK Ideograph */ + [0x8468, 0x8468], /* CJK Ideograph */ + [0x8469, 0x8469], /* CJK Ideograph */ + [0x846a, 0x846a], /* CJK Ideograph */ + [0x846b, 0x846b], /* CJK Ideograph */ + [0x846c, 0x846c], /* CJK Ideograph */ + [0x846d, 0x846d], /* CJK Ideograph */ + [0x846e, 0x846e], /* CJK Ideograph */ + [0x846f, 0x846f], /* CJK Ideograph */ + [0x8470, 0x8470], /* CJK Ideograph */ + [0x8471, 0x8471], /* CJK Ideograph */ + [0x8472, 0x8472], /* CJK Ideograph */ + [0x8473, 0x8473], /* CJK Ideograph */ + [0x8474, 0x8474], /* CJK Ideograph */ + [0x8475, 0x8475], /* CJK Ideograph */ + [0x8476, 0x8476], /* CJK Ideograph */ + [0x8477, 0x8477], /* CJK Ideograph */ + [0x8478, 0x8478], /* CJK Ideograph */ + [0x8479, 0x8479], /* CJK Ideograph */ + [0x847a, 0x847a], /* CJK Ideograph */ + [0x847b, 0x847b], /* CJK Ideograph */ + [0x847c, 0x847c], /* CJK Ideograph */ + [0x847d, 0x847d], /* CJK Ideograph */ + [0x847e, 0x847e], /* CJK Ideograph */ + [0x847f, 0x847f], /* CJK Ideograph */ + [0x8480, 0x8480], /* CJK Ideograph */ + [0x8481, 0x8481], /* CJK Ideograph */ + [0x8482, 0x8482], /* CJK Ideograph */ + [0x8483, 0x8483], /* CJK Ideograph */ + [0x8484, 0x8484], /* CJK Ideograph */ + [0x8485, 0x8485], /* CJK Ideograph */ + [0x8486, 0x8486], /* CJK Ideograph */ + [0x8487, 0x8487], /* CJK Ideograph */ + [0x8488, 0x8488], /* CJK Ideograph */ + [0x8489, 0x8489], /* CJK Ideograph */ + [0x848a, 0x848a], /* CJK Ideograph */ + [0x848b, 0x848b], /* CJK Ideograph */ + [0x848c, 0x848c], /* CJK Ideograph */ + [0x848d, 0x848d], /* CJK Ideograph */ + [0x848e, 0x848e], /* CJK Ideograph */ + [0x848f, 0x848f], /* CJK Ideograph */ + [0x8490, 0x8490], /* CJK Ideograph */ + [0x8491, 0x8491], /* CJK Ideograph */ + [0x8492, 0x8492], /* CJK Ideograph */ + [0x8493, 0x8493], /* CJK Ideograph */ + [0x8494, 0x8494], /* CJK Ideograph */ + [0x8495, 0x8495], /* CJK Ideograph */ + [0x8496, 0x8496], /* CJK Ideograph */ + [0x8497, 0x8497], /* CJK Ideograph */ + [0x8498, 0x8498], /* CJK Ideograph */ + [0x8499, 0x8499], /* CJK Ideograph */ + [0x849a, 0x849a], /* CJK Ideograph */ + [0x849b, 0x849b], /* CJK Ideograph */ + [0x849c, 0x849c], /* CJK Ideograph */ + [0x849d, 0x849d], /* CJK Ideograph */ + [0x849e, 0x849e], /* CJK Ideograph */ + [0x849f, 0x849f], /* CJK Ideograph */ + [0x84a0, 0x84a0], /* CJK Ideograph */ + [0x84a1, 0x84a1], /* CJK Ideograph */ + [0x84a2, 0x84a2], /* CJK Ideograph */ + [0x84a3, 0x84a3], /* CJK Ideograph */ + [0x84a4, 0x84a4], /* CJK Ideograph */ + [0x84a5, 0x84a5], /* CJK Ideograph */ + [0x84a6, 0x84a6], /* CJK Ideograph */ + [0x84a7, 0x84a7], /* CJK Ideograph */ + [0x84a8, 0x84a8], /* CJK Ideograph */ + [0x84a9, 0x84a9], /* CJK Ideograph */ + [0x84aa, 0x84aa], /* CJK Ideograph */ + [0x84ab, 0x84ab], /* CJK Ideograph */ + [0x84ac, 0x84ac], /* CJK Ideograph */ + [0x84ad, 0x84ad], /* CJK Ideograph */ + [0x84ae, 0x84ae], /* CJK Ideograph */ + [0x84af, 0x84af], /* CJK Ideograph */ + [0x84b0, 0x84b0], /* CJK Ideograph */ + [0x84b1, 0x84b1], /* CJK Ideograph */ + [0x84b2, 0x84b2], /* CJK Ideograph */ + [0x84b3, 0x84b3], /* CJK Ideograph */ + [0x84b4, 0x84b4], /* CJK Ideograph */ + [0x84b5, 0x84b5], /* CJK Ideograph */ + [0x84b6, 0x84b6], /* CJK Ideograph */ + [0x84b7, 0x84b7], /* CJK Ideograph */ + [0x84b8, 0x84b8], /* CJK Ideograph */ + [0x84b9, 0x84b9], /* CJK Ideograph */ + [0x84ba, 0x84ba], /* CJK Ideograph */ + [0x84bb, 0x84bb], /* CJK Ideograph */ + [0x84bc, 0x84bc], /* CJK Ideograph */ + [0x84bd, 0x84bd], /* CJK Ideograph */ + [0x84be, 0x84be], /* CJK Ideograph */ + [0x84bf, 0x84bf], /* CJK Ideograph */ + [0x84c0, 0x84c0], /* CJK Ideograph */ + [0x84c1, 0x84c1], /* CJK Ideograph */ + [0x84c2, 0x84c2], /* CJK Ideograph */ + [0x84c3, 0x84c3], /* CJK Ideograph */ + [0x84c4, 0x84c4], /* CJK Ideograph */ + [0x84c5, 0x84c5], /* CJK Ideograph */ + [0x84c6, 0x84c6], /* CJK Ideograph */ + [0x84c7, 0x84c7], /* CJK Ideograph */ + [0x84c8, 0x84c8], /* CJK Ideograph */ + [0x84c9, 0x84c9], /* CJK Ideograph */ + [0x84ca, 0x84ca], /* CJK Ideograph */ + [0x84cb, 0x84cb], /* CJK Ideograph */ + [0x84cc, 0x84cc], /* CJK Ideograph */ + [0x84cd, 0x84cd], /* CJK Ideograph */ + [0x84ce, 0x84ce], /* CJK Ideograph */ + [0x84cf, 0x84cf], /* CJK Ideograph */ + [0x84d0, 0x84d0], /* CJK Ideograph */ + [0x84d1, 0x84d1], /* CJK Ideograph */ + [0x84d2, 0x84d2], /* CJK Ideograph */ + [0x84d3, 0x84d3], /* CJK Ideograph */ + [0x84d4, 0x84d4], /* CJK Ideograph */ + [0x84d5, 0x84d5], /* CJK Ideograph */ + [0x84d6, 0x84d6], /* CJK Ideograph */ + [0x84d7, 0x84d7], /* CJK Ideograph */ + [0x84d8, 0x84d8], /* CJK Ideograph */ + [0x84d9, 0x84d9], /* CJK Ideograph */ + [0x84da, 0x84da], /* CJK Ideograph */ + [0x84db, 0x84db], /* CJK Ideograph */ + [0x84dc, 0x84dc], /* CJK Ideograph */ + [0x84dd, 0x84dd], /* CJK Ideograph */ + [0x84de, 0x84de], /* CJK Ideograph */ + [0x84df, 0x84df], /* CJK Ideograph */ + [0x84e0, 0x84e0], /* CJK Ideograph */ + [0x84e1, 0x84e1], /* CJK Ideograph */ + [0x84e2, 0x84e2], /* CJK Ideograph */ + [0x84e3, 0x84e3], /* CJK Ideograph */ + [0x84e4, 0x84e4], /* CJK Ideograph */ + [0x84e5, 0x84e5], /* CJK Ideograph */ + [0x84e6, 0x84e6], /* CJK Ideograph */ + [0x84e7, 0x84e7], /* CJK Ideograph */ + [0x84e8, 0x84e8], /* CJK Ideograph */ + [0x84e9, 0x84e9], /* CJK Ideograph */ + [0x84ea, 0x84ea], /* CJK Ideograph */ + [0x84eb, 0x84eb], /* CJK Ideograph */ + [0x84ec, 0x84ec], /* CJK Ideograph */ + [0x84ed, 0x84ed], /* CJK Ideograph */ + [0x84ee, 0x84ee], /* CJK Ideograph */ + [0x84ef, 0x84ef], /* CJK Ideograph */ + [0x84f0, 0x84f0], /* CJK Ideograph */ + [0x84f1, 0x84f1], /* CJK Ideograph */ + [0x84f2, 0x84f2], /* CJK Ideograph */ + [0x84f3, 0x84f3], /* CJK Ideograph */ + [0x84f4, 0x84f4], /* CJK Ideograph */ + [0x84f5, 0x84f5], /* CJK Ideograph */ + [0x84f6, 0x84f6], /* CJK Ideograph */ + [0x84f7, 0x84f7], /* CJK Ideograph */ + [0x84f8, 0x84f8], /* CJK Ideograph */ + [0x84f9, 0x84f9], /* CJK Ideograph */ + [0x84fa, 0x84fa], /* CJK Ideograph */ + [0x84fb, 0x84fb], /* CJK Ideograph */ + [0x84fc, 0x84fc], /* CJK Ideograph */ + [0x84fd, 0x84fd], /* CJK Ideograph */ + [0x84fe, 0x84fe], /* CJK Ideograph */ + [0x84ff, 0x84ff], /* CJK Ideograph */ + [0x8500, 0x8500], /* CJK Ideograph */ + [0x8501, 0x8501], /* CJK Ideograph */ + [0x8502, 0x8502], /* CJK Ideograph */ + [0x8503, 0x8503], /* CJK Ideograph */ + [0x8504, 0x8504], /* CJK Ideograph */ + [0x8505, 0x8505], /* CJK Ideograph */ + [0x8506, 0x8506], /* CJK Ideograph */ + [0x8507, 0x8507], /* CJK Ideograph */ + [0x8508, 0x8508], /* CJK Ideograph */ + [0x8509, 0x8509], /* CJK Ideograph */ + [0x850a, 0x850a], /* CJK Ideograph */ + [0x850b, 0x850b], /* CJK Ideograph */ + [0x850c, 0x850c], /* CJK Ideograph */ + [0x850d, 0x850d], /* CJK Ideograph */ + [0x850e, 0x850e], /* CJK Ideograph */ + [0x850f, 0x850f], /* CJK Ideograph */ + [0x8510, 0x8510], /* CJK Ideograph */ + [0x8511, 0x8511], /* CJK Ideograph */ + [0x8512, 0x8512], /* CJK Ideograph */ + [0x8513, 0x8513], /* CJK Ideograph */ + [0x8514, 0x8514], /* CJK Ideograph */ + [0x8515, 0x8515], /* CJK Ideograph */ + [0x8516, 0x8516], /* CJK Ideograph */ + [0x8517, 0x8517], /* CJK Ideograph */ + [0x8518, 0x8518], /* CJK Ideograph */ + [0x8519, 0x8519], /* CJK Ideograph */ + [0x851a, 0x851a], /* CJK Ideograph */ + [0x851b, 0x851b], /* CJK Ideograph */ + [0x851c, 0x851c], /* CJK Ideograph */ + [0x851d, 0x851d], /* CJK Ideograph */ + [0x851e, 0x851e], /* CJK Ideograph */ + [0x851f, 0x851f], /* CJK Ideograph */ + [0x8520, 0x8520], /* CJK Ideograph */ + [0x8521, 0x8521], /* CJK Ideograph */ + [0x8522, 0x8522], /* CJK Ideograph */ + [0x8523, 0x8523], /* CJK Ideograph */ + [0x8524, 0x8524], /* CJK Ideograph */ + [0x8525, 0x8525], /* CJK Ideograph */ + [0x8526, 0x8526], /* CJK Ideograph */ + [0x8527, 0x8527], /* CJK Ideograph */ + [0x8528, 0x8528], /* CJK Ideograph */ + [0x8529, 0x8529], /* CJK Ideograph */ + [0x852a, 0x852a], /* CJK Ideograph */ + [0x852b, 0x852b], /* CJK Ideograph */ + [0x852c, 0x852c], /* CJK Ideograph */ + [0x852d, 0x852d], /* CJK Ideograph */ + [0x852e, 0x852e], /* CJK Ideograph */ + [0x852f, 0x852f], /* CJK Ideograph */ + [0x8530, 0x8530], /* CJK Ideograph */ + [0x8531, 0x8531], /* CJK Ideograph */ + [0x8532, 0x8532], /* CJK Ideograph */ + [0x8533, 0x8533], /* CJK Ideograph */ + [0x8534, 0x8534], /* CJK Ideograph */ + [0x8535, 0x8535], /* CJK Ideograph */ + [0x8536, 0x8536], /* CJK Ideograph */ + [0x8537, 0x8537], /* CJK Ideograph */ + [0x8538, 0x8538], /* CJK Ideograph */ + [0x8539, 0x8539], /* CJK Ideograph */ + [0x853a, 0x853a], /* CJK Ideograph */ + [0x853b, 0x853b], /* CJK Ideograph */ + [0x853c, 0x853c], /* CJK Ideograph */ + [0x853d, 0x853d], /* CJK Ideograph */ + [0x853e, 0x853e], /* CJK Ideograph */ + [0x853f, 0x853f], /* CJK Ideograph */ + [0x8540, 0x8540], /* CJK Ideograph */ + [0x8541, 0x8541], /* CJK Ideograph */ + [0x8542, 0x8542], /* CJK Ideograph */ + [0x8543, 0x8543], /* CJK Ideograph */ + [0x8544, 0x8544], /* CJK Ideograph */ + [0x8545, 0x8545], /* CJK Ideograph */ + [0x8546, 0x8546], /* CJK Ideograph */ + [0x8547, 0x8547], /* CJK Ideograph */ + [0x8548, 0x8548], /* CJK Ideograph */ + [0x8549, 0x8549], /* CJK Ideograph */ + [0x854a, 0x854a], /* CJK Ideograph */ + [0x854b, 0x854b], /* CJK Ideograph */ + [0x854c, 0x854c], /* CJK Ideograph */ + [0x854d, 0x854d], /* CJK Ideograph */ + [0x854e, 0x854e], /* CJK Ideograph */ + [0x854f, 0x854f], /* CJK Ideograph */ + [0x8550, 0x8550], /* CJK Ideograph */ + [0x8551, 0x8551], /* CJK Ideograph */ + [0x8552, 0x8552], /* CJK Ideograph */ + [0x8553, 0x8553], /* CJK Ideograph */ + [0x8554, 0x8554], /* CJK Ideograph */ + [0x8555, 0x8555], /* CJK Ideograph */ + [0x8556, 0x8556], /* CJK Ideograph */ + [0x8557, 0x8557], /* CJK Ideograph */ + [0x8558, 0x8558], /* CJK Ideograph */ + [0x8559, 0x8559], /* CJK Ideograph */ + [0x855a, 0x855a], /* CJK Ideograph */ + [0x855b, 0x855b], /* CJK Ideograph */ + [0x855c, 0x855c], /* CJK Ideograph */ + [0x855d, 0x855d], /* CJK Ideograph */ + [0x855e, 0x855e], /* CJK Ideograph */ + [0x855f, 0x855f], /* CJK Ideograph */ + [0x8560, 0x8560], /* CJK Ideograph */ + [0x8561, 0x8561], /* CJK Ideograph */ + [0x8562, 0x8562], /* CJK Ideograph */ + [0x8563, 0x8563], /* CJK Ideograph */ + [0x8564, 0x8564], /* CJK Ideograph */ + [0x8565, 0x8565], /* CJK Ideograph */ + [0x8566, 0x8566], /* CJK Ideograph */ + [0x8567, 0x8567], /* CJK Ideograph */ + [0x8568, 0x8568], /* CJK Ideograph */ + [0x8569, 0x8569], /* CJK Ideograph */ + [0x856a, 0x856a], /* CJK Ideograph */ + [0x856b, 0x856b], /* CJK Ideograph */ + [0x856c, 0x856c], /* CJK Ideograph */ + [0x856d, 0x856d], /* CJK Ideograph */ + [0x856e, 0x856e], /* CJK Ideograph */ + [0x856f, 0x856f], /* CJK Ideograph */ + [0x8570, 0x8570], /* CJK Ideograph */ + [0x8571, 0x8571], /* CJK Ideograph */ + [0x8572, 0x8572], /* CJK Ideograph */ + [0x8573, 0x8573], /* CJK Ideograph */ + [0x8574, 0x8574], /* CJK Ideograph */ + [0x8575, 0x8575], /* CJK Ideograph */ + [0x8576, 0x8576], /* CJK Ideograph */ + [0x8577, 0x8577], /* CJK Ideograph */ + [0x8578, 0x8578], /* CJK Ideograph */ + [0x8579, 0x8579], /* CJK Ideograph */ + [0x857a, 0x857a], /* CJK Ideograph */ + [0x857b, 0x857b], /* CJK Ideograph */ + [0x857c, 0x857c], /* CJK Ideograph */ + [0x857d, 0x857d], /* CJK Ideograph */ + [0x857e, 0x857e], /* CJK Ideograph */ + [0x857f, 0x857f], /* CJK Ideograph */ + [0x8580, 0x8580], /* CJK Ideograph */ + [0x8581, 0x8581], /* CJK Ideograph */ + [0x8582, 0x8582], /* CJK Ideograph */ + [0x8583, 0x8583], /* CJK Ideograph */ + [0x8584, 0x8584], /* CJK Ideograph */ + [0x8585, 0x8585], /* CJK Ideograph */ + [0x8586, 0x8586], /* CJK Ideograph */ + [0x8587, 0x8587], /* CJK Ideograph */ + [0x8588, 0x8588], /* CJK Ideograph */ + [0x8589, 0x8589], /* CJK Ideograph */ + [0x858a, 0x858a], /* CJK Ideograph */ + [0x858b, 0x858b], /* CJK Ideograph */ + [0x858c, 0x858c], /* CJK Ideograph */ + [0x858d, 0x858d], /* CJK Ideograph */ + [0x858e, 0x858e], /* CJK Ideograph */ + [0x858f, 0x858f], /* CJK Ideograph */ + [0x8590, 0x8590], /* CJK Ideograph */ + [0x8591, 0x8591], /* CJK Ideograph */ + [0x8592, 0x8592], /* CJK Ideograph */ + [0x8593, 0x8593], /* CJK Ideograph */ + [0x8594, 0x8594], /* CJK Ideograph */ + [0x8595, 0x8595], /* CJK Ideograph */ + [0x8596, 0x8596], /* CJK Ideograph */ + [0x8597, 0x8597], /* CJK Ideograph */ + [0x8598, 0x8598], /* CJK Ideograph */ + [0x8599, 0x8599], /* CJK Ideograph */ + [0x859a, 0x859a], /* CJK Ideograph */ + [0x859b, 0x859b], /* CJK Ideograph */ + [0x859c, 0x859c], /* CJK Ideograph */ + [0x859d, 0x859d], /* CJK Ideograph */ + [0x859e, 0x859e], /* CJK Ideograph */ + [0x859f, 0x859f], /* CJK Ideograph */ + [0x85a0, 0x85a0], /* CJK Ideograph */ + [0x85a1, 0x85a1], /* CJK Ideograph */ + [0x85a2, 0x85a2], /* CJK Ideograph */ + [0x85a3, 0x85a3], /* CJK Ideograph */ + [0x85a4, 0x85a4], /* CJK Ideograph */ + [0x85a5, 0x85a5], /* CJK Ideograph */ + [0x85a6, 0x85a6], /* CJK Ideograph */ + [0x85a7, 0x85a7], /* CJK Ideograph */ + [0x85a8, 0x85a8], /* CJK Ideograph */ + [0x85a9, 0x85a9], /* CJK Ideograph */ + [0x85aa, 0x85aa], /* CJK Ideograph */ + [0x85ab, 0x85ab], /* CJK Ideograph */ + [0x85ac, 0x85ac], /* CJK Ideograph */ + [0x85ad, 0x85ad], /* CJK Ideograph */ + [0x85ae, 0x85ae], /* CJK Ideograph */ + [0x85af, 0x85af], /* CJK Ideograph */ + [0x85b0, 0x85b0], /* CJK Ideograph */ + [0x85b1, 0x85b1], /* CJK Ideograph */ + [0x85b2, 0x85b2], /* CJK Ideograph */ + [0x85b3, 0x85b3], /* CJK Ideograph */ + [0x85b4, 0x85b4], /* CJK Ideograph */ + [0x85b5, 0x85b5], /* CJK Ideograph */ + [0x85b6, 0x85b6], /* CJK Ideograph */ + [0x85b7, 0x85b7], /* CJK Ideograph */ + [0x85b8, 0x85b8], /* CJK Ideograph */ + [0x85b9, 0x85b9], /* CJK Ideograph */ + [0x85ba, 0x85ba], /* CJK Ideograph */ + [0x85bb, 0x85bb], /* CJK Ideograph */ + [0x85bc, 0x85bc], /* CJK Ideograph */ + [0x85bd, 0x85bd], /* CJK Ideograph */ + [0x85be, 0x85be], /* CJK Ideograph */ + [0x85bf, 0x85bf], /* CJK Ideograph */ + [0x85c0, 0x85c0], /* CJK Ideograph */ + [0x85c1, 0x85c1], /* CJK Ideograph */ + [0x85c2, 0x85c2], /* CJK Ideograph */ + [0x85c3, 0x85c3], /* CJK Ideograph */ + [0x85c4, 0x85c4], /* CJK Ideograph */ + [0x85c5, 0x85c5], /* CJK Ideograph */ + [0x85c6, 0x85c6], /* CJK Ideograph */ + [0x85c7, 0x85c7], /* CJK Ideograph */ + [0x85c8, 0x85c8], /* CJK Ideograph */ + [0x85c9, 0x85c9], /* CJK Ideograph */ + [0x85ca, 0x85ca], /* CJK Ideograph */ + [0x85cb, 0x85cb], /* CJK Ideograph */ + [0x85cc, 0x85cc], /* CJK Ideograph */ + [0x85cd, 0x85cd], /* CJK Ideograph */ + [0x85ce, 0x85ce], /* CJK Ideograph */ + [0x85cf, 0x85cf], /* CJK Ideograph */ + [0x85d0, 0x85d0], /* CJK Ideograph */ + [0x85d1, 0x85d1], /* CJK Ideograph */ + [0x85d2, 0x85d2], /* CJK Ideograph */ + [0x85d3, 0x85d3], /* CJK Ideograph */ + [0x85d4, 0x85d4], /* CJK Ideograph */ + [0x85d5, 0x85d5], /* CJK Ideograph */ + [0x85d6, 0x85d6], /* CJK Ideograph */ + [0x85d7, 0x85d7], /* CJK Ideograph */ + [0x85d8, 0x85d8], /* CJK Ideograph */ + [0x85d9, 0x85d9], /* CJK Ideograph */ + [0x85da, 0x85da], /* CJK Ideograph */ + [0x85db, 0x85db], /* CJK Ideograph */ + [0x85dc, 0x85dc], /* CJK Ideograph */ + [0x85dd, 0x85dd], /* CJK Ideograph */ + [0x85de, 0x85de], /* CJK Ideograph */ + [0x85df, 0x85df], /* CJK Ideograph */ + [0x85e0, 0x85e0], /* CJK Ideograph */ + [0x85e1, 0x85e1], /* CJK Ideograph */ + [0x85e2, 0x85e2], /* CJK Ideograph */ + [0x85e3, 0x85e3], /* CJK Ideograph */ + [0x85e4, 0x85e4], /* CJK Ideograph */ + [0x85e5, 0x85e5], /* CJK Ideograph */ + [0x85e6, 0x85e6], /* CJK Ideograph */ + [0x85e7, 0x85e7], /* CJK Ideograph */ + [0x85e8, 0x85e8], /* CJK Ideograph */ + [0x85e9, 0x85e9], /* CJK Ideograph */ + [0x85ea, 0x85ea], /* CJK Ideograph */ + [0x85eb, 0x85eb], /* CJK Ideograph */ + [0x85ec, 0x85ec], /* CJK Ideograph */ + [0x85ed, 0x85ed], /* CJK Ideograph */ + [0x85ee, 0x85ee], /* CJK Ideograph */ + [0x85ef, 0x85ef], /* CJK Ideograph */ + [0x85f0, 0x85f0], /* CJK Ideograph */ + [0x85f1, 0x85f1], /* CJK Ideograph */ + [0x85f2, 0x85f2], /* CJK Ideograph */ + [0x85f3, 0x85f3], /* CJK Ideograph */ + [0x85f4, 0x85f4], /* CJK Ideograph */ + [0x85f5, 0x85f5], /* CJK Ideograph */ + [0x85f6, 0x85f6], /* CJK Ideograph */ + [0x85f7, 0x85f7], /* CJK Ideograph */ + [0x85f8, 0x85f8], /* CJK Ideograph */ + [0x85f9, 0x85f9], /* CJK Ideograph */ + [0x85fa, 0x85fa], /* CJK Ideograph */ + [0x85fb, 0x85fb], /* CJK Ideograph */ + [0x85fc, 0x85fc], /* CJK Ideograph */ + [0x85fd, 0x85fd], /* CJK Ideograph */ + [0x85fe, 0x85fe], /* CJK Ideograph */ + [0x85ff, 0x85ff], /* CJK Ideograph */ + [0x8600, 0x8600], /* CJK Ideograph */ + [0x8601, 0x8601], /* CJK Ideograph */ + [0x8602, 0x8602], /* CJK Ideograph */ + [0x8603, 0x8603], /* CJK Ideograph */ + [0x8604, 0x8604], /* CJK Ideograph */ + [0x8605, 0x8605], /* CJK Ideograph */ + [0x8606, 0x8606], /* CJK Ideograph */ + [0x8607, 0x8607], /* CJK Ideograph */ + [0x8608, 0x8608], /* CJK Ideograph */ + [0x8609, 0x8609], /* CJK Ideograph */ + [0x860a, 0x860a], /* CJK Ideograph */ + [0x860b, 0x860b], /* CJK Ideograph */ + [0x860c, 0x860c], /* CJK Ideograph */ + [0x860d, 0x860d], /* CJK Ideograph */ + [0x860e, 0x860e], /* CJK Ideograph */ + [0x860f, 0x860f], /* CJK Ideograph */ + [0x8610, 0x8610], /* CJK Ideograph */ + [0x8611, 0x8611], /* CJK Ideograph */ + [0x8612, 0x8612], /* CJK Ideograph */ + [0x8613, 0x8613], /* CJK Ideograph */ + [0x8614, 0x8614], /* CJK Ideograph */ + [0x8615, 0x8615], /* CJK Ideograph */ + [0x8616, 0x8616], /* CJK Ideograph */ + [0x8617, 0x8617], /* CJK Ideograph */ + [0x8618, 0x8618], /* CJK Ideograph */ + [0x8619, 0x8619], /* CJK Ideograph */ + [0x861a, 0x861a], /* CJK Ideograph */ + [0x861b, 0x861b], /* CJK Ideograph */ + [0x861c, 0x861c], /* CJK Ideograph */ + [0x861d, 0x861d], /* CJK Ideograph */ + [0x861e, 0x861e], /* CJK Ideograph */ + [0x861f, 0x861f], /* CJK Ideograph */ + [0x8620, 0x8620], /* CJK Ideograph */ + [0x8621, 0x8621], /* CJK Ideograph */ + [0x8622, 0x8622], /* CJK Ideograph */ + [0x8623, 0x8623], /* CJK Ideograph */ + [0x8624, 0x8624], /* CJK Ideograph */ + [0x8625, 0x8625], /* CJK Ideograph */ + [0x8626, 0x8626], /* CJK Ideograph */ + [0x8627, 0x8627], /* CJK Ideograph */ + [0x8628, 0x8628], /* CJK Ideograph */ + [0x8629, 0x8629], /* CJK Ideograph */ + [0x862a, 0x862a], /* CJK Ideograph */ + [0x862b, 0x862b], /* CJK Ideograph */ + [0x862c, 0x862c], /* CJK Ideograph */ + [0x862d, 0x862d], /* CJK Ideograph */ + [0x862e, 0x862e], /* CJK Ideograph */ + [0x862f, 0x862f], /* CJK Ideograph */ + [0x8630, 0x8630], /* CJK Ideograph */ + [0x8631, 0x8631], /* CJK Ideograph */ + [0x8632, 0x8632], /* CJK Ideograph */ + [0x8633, 0x8633], /* CJK Ideograph */ + [0x8634, 0x8634], /* CJK Ideograph */ + [0x8635, 0x8635], /* CJK Ideograph */ + [0x8636, 0x8636], /* CJK Ideograph */ + [0x8637, 0x8637], /* CJK Ideograph */ + [0x8638, 0x8638], /* CJK Ideograph */ + [0x8639, 0x8639], /* CJK Ideograph */ + [0x863a, 0x863a], /* CJK Ideograph */ + [0x863b, 0x863b], /* CJK Ideograph */ + [0x863c, 0x863c], /* CJK Ideograph */ + [0x863d, 0x863d], /* CJK Ideograph */ + [0x863e, 0x863e], /* CJK Ideograph */ + [0x863f, 0x863f], /* CJK Ideograph */ + [0x8640, 0x8640], /* CJK Ideograph */ + [0x8641, 0x8641], /* CJK Ideograph */ + [0x8642, 0x8642], /* CJK Ideograph */ + [0x8643, 0x8643], /* CJK Ideograph */ + [0x8644, 0x8644], /* CJK Ideograph */ + [0x8645, 0x8645], /* CJK Ideograph */ + [0x8646, 0x8646], /* CJK Ideograph */ + [0x8647, 0x8647], /* CJK Ideograph */ + [0x8648, 0x8648], /* CJK Ideograph */ + [0x8649, 0x8649], /* CJK Ideograph */ + [0x864a, 0x864a], /* CJK Ideograph */ + [0x864b, 0x864b], /* CJK Ideograph */ + [0x864c, 0x864c], /* CJK Ideograph */ + [0x864d, 0x864d], /* CJK Ideograph */ + [0x864e, 0x864e], /* CJK Ideograph */ + [0x864f, 0x864f], /* CJK Ideograph */ + [0x8650, 0x8650], /* CJK Ideograph */ + [0x8651, 0x8651], /* CJK Ideograph */ + [0x8652, 0x8652], /* CJK Ideograph */ + [0x8653, 0x8653], /* CJK Ideograph */ + [0x8654, 0x8654], /* CJK Ideograph */ + [0x8655, 0x8655], /* CJK Ideograph */ + [0x8656, 0x8656], /* CJK Ideograph */ + [0x8657, 0x8657], /* CJK Ideograph */ + [0x8658, 0x8658], /* CJK Ideograph */ + [0x8659, 0x8659], /* CJK Ideograph */ + [0x865a, 0x865a], /* CJK Ideograph */ + [0x865b, 0x865b], /* CJK Ideograph */ + [0x865c, 0x865c], /* CJK Ideograph */ + [0x865d, 0x865d], /* CJK Ideograph */ + [0x865e, 0x865e], /* CJK Ideograph */ + [0x865f, 0x865f], /* CJK Ideograph */ + [0x8660, 0x8660], /* CJK Ideograph */ + [0x8661, 0x8661], /* CJK Ideograph */ + [0x8662, 0x8662], /* CJK Ideograph */ + [0x8663, 0x8663], /* CJK Ideograph */ + [0x8664, 0x8664], /* CJK Ideograph */ + [0x8665, 0x8665], /* CJK Ideograph */ + [0x8666, 0x8666], /* CJK Ideograph */ + [0x8667, 0x8667], /* CJK Ideograph */ + [0x8668, 0x8668], /* CJK Ideograph */ + [0x8669, 0x8669], /* CJK Ideograph */ + [0x866a, 0x866a], /* CJK Ideograph */ + [0x866b, 0x866b], /* CJK Ideograph */ + [0x866c, 0x866c], /* CJK Ideograph */ + [0x866d, 0x866d], /* CJK Ideograph */ + [0x866e, 0x866e], /* CJK Ideograph */ + [0x866f, 0x866f], /* CJK Ideograph */ + [0x8670, 0x8670], /* CJK Ideograph */ + [0x8671, 0x8671], /* CJK Ideograph */ + [0x8672, 0x8672], /* CJK Ideograph */ + [0x8673, 0x8673], /* CJK Ideograph */ + [0x8674, 0x8674], /* CJK Ideograph */ + [0x8675, 0x8675], /* CJK Ideograph */ + [0x8676, 0x8676], /* CJK Ideograph */ + [0x8677, 0x8677], /* CJK Ideograph */ + [0x8678, 0x8678], /* CJK Ideograph */ + [0x8679, 0x8679], /* CJK Ideograph */ + [0x867a, 0x867a], /* CJK Ideograph */ + [0x867b, 0x867b], /* CJK Ideograph */ + [0x867c, 0x867c], /* CJK Ideograph */ + [0x867d, 0x867d], /* CJK Ideograph */ + [0x867e, 0x867e], /* CJK Ideograph */ + [0x867f, 0x867f], /* CJK Ideograph */ + [0x8680, 0x8680], /* CJK Ideograph */ + [0x8681, 0x8681], /* CJK Ideograph */ + [0x8682, 0x8682], /* CJK Ideograph */ + [0x8683, 0x8683], /* CJK Ideograph */ + [0x8684, 0x8684], /* CJK Ideograph */ + [0x8685, 0x8685], /* CJK Ideograph */ + [0x8686, 0x8686], /* CJK Ideograph */ + [0x8687, 0x8687], /* CJK Ideograph */ + [0x8688, 0x8688], /* CJK Ideograph */ + [0x8689, 0x8689], /* CJK Ideograph */ + [0x868a, 0x868a], /* CJK Ideograph */ + [0x868b, 0x868b], /* CJK Ideograph */ + [0x868c, 0x868c], /* CJK Ideograph */ + [0x868d, 0x868d], /* CJK Ideograph */ + [0x868e, 0x868e], /* CJK Ideograph */ + [0x868f, 0x868f], /* CJK Ideograph */ + [0x8690, 0x8690], /* CJK Ideograph */ + [0x8691, 0x8691], /* CJK Ideograph */ + [0x8692, 0x8692], /* CJK Ideograph */ + [0x8693, 0x8693], /* CJK Ideograph */ + [0x8694, 0x8694], /* CJK Ideograph */ + [0x8695, 0x8695], /* CJK Ideograph */ + [0x8696, 0x8696], /* CJK Ideograph */ + [0x8697, 0x8697], /* CJK Ideograph */ + [0x8698, 0x8698], /* CJK Ideograph */ + [0x8699, 0x8699], /* CJK Ideograph */ + [0x869a, 0x869a], /* CJK Ideograph */ + [0x869b, 0x869b], /* CJK Ideograph */ + [0x869c, 0x869c], /* CJK Ideograph */ + [0x869d, 0x869d], /* CJK Ideograph */ + [0x869e, 0x869e], /* CJK Ideograph */ + [0x869f, 0x869f], /* CJK Ideograph */ + [0x86a0, 0x86a0], /* CJK Ideograph */ + [0x86a1, 0x86a1], /* CJK Ideograph */ + [0x86a2, 0x86a2], /* CJK Ideograph */ + [0x86a3, 0x86a3], /* CJK Ideograph */ + [0x86a4, 0x86a4], /* CJK Ideograph */ + [0x86a5, 0x86a5], /* CJK Ideograph */ + [0x86a6, 0x86a6], /* CJK Ideograph */ + [0x86a7, 0x86a7], /* CJK Ideograph */ + [0x86a8, 0x86a8], /* CJK Ideograph */ + [0x86a9, 0x86a9], /* CJK Ideograph */ + [0x86aa, 0x86aa], /* CJK Ideograph */ + [0x86ab, 0x86ab], /* CJK Ideograph */ + [0x86ac, 0x86ac], /* CJK Ideograph */ + [0x86ad, 0x86ad], /* CJK Ideograph */ + [0x86ae, 0x86ae], /* CJK Ideograph */ + [0x86af, 0x86af], /* CJK Ideograph */ + [0x86b0, 0x86b0], /* CJK Ideograph */ + [0x86b1, 0x86b1], /* CJK Ideograph */ + [0x86b2, 0x86b2], /* CJK Ideograph */ + [0x86b3, 0x86b3], /* CJK Ideograph */ + [0x86b4, 0x86b4], /* CJK Ideograph */ + [0x86b5, 0x86b5], /* CJK Ideograph */ + [0x86b6, 0x86b6], /* CJK Ideograph */ + [0x86b7, 0x86b7], /* CJK Ideograph */ + [0x86b8, 0x86b8], /* CJK Ideograph */ + [0x86b9, 0x86b9], /* CJK Ideograph */ + [0x86ba, 0x86ba], /* CJK Ideograph */ + [0x86bb, 0x86bb], /* CJK Ideograph */ + [0x86bc, 0x86bc], /* CJK Ideograph */ + [0x86bd, 0x86bd], /* CJK Ideograph */ + [0x86be, 0x86be], /* CJK Ideograph */ + [0x86bf, 0x86bf], /* CJK Ideograph */ + [0x86c0, 0x86c0], /* CJK Ideograph */ + [0x86c1, 0x86c1], /* CJK Ideograph */ + [0x86c2, 0x86c2], /* CJK Ideograph */ + [0x86c3, 0x86c3], /* CJK Ideograph */ + [0x86c4, 0x86c4], /* CJK Ideograph */ + [0x86c5, 0x86c5], /* CJK Ideograph */ + [0x86c6, 0x86c6], /* CJK Ideograph */ + [0x86c7, 0x86c7], /* CJK Ideograph */ + [0x86c8, 0x86c8], /* CJK Ideograph */ + [0x86c9, 0x86c9], /* CJK Ideograph */ + [0x86ca, 0x86ca], /* CJK Ideograph */ + [0x86cb, 0x86cb], /* CJK Ideograph */ + [0x86cc, 0x86cc], /* CJK Ideograph */ + [0x86cd, 0x86cd], /* CJK Ideograph */ + [0x86ce, 0x86ce], /* CJK Ideograph */ + [0x86cf, 0x86cf], /* CJK Ideograph */ + [0x86d0, 0x86d0], /* CJK Ideograph */ + [0x86d1, 0x86d1], /* CJK Ideograph */ + [0x86d2, 0x86d2], /* CJK Ideograph */ + [0x86d3, 0x86d3], /* CJK Ideograph */ + [0x86d4, 0x86d4], /* CJK Ideograph */ + [0x86d5, 0x86d5], /* CJK Ideograph */ + [0x86d6, 0x86d6], /* CJK Ideograph */ + [0x86d7, 0x86d7], /* CJK Ideograph */ + [0x86d8, 0x86d8], /* CJK Ideograph */ + [0x86d9, 0x86d9], /* CJK Ideograph */ + [0x86da, 0x86da], /* CJK Ideograph */ + [0x86db, 0x86db], /* CJK Ideograph */ + [0x86dc, 0x86dc], /* CJK Ideograph */ + [0x86dd, 0x86dd], /* CJK Ideograph */ + [0x86de, 0x86de], /* CJK Ideograph */ + [0x86df, 0x86df], /* CJK Ideograph */ + [0x86e0, 0x86e0], /* CJK Ideograph */ + [0x86e1, 0x86e1], /* CJK Ideograph */ + [0x86e2, 0x86e2], /* CJK Ideograph */ + [0x86e3, 0x86e3], /* CJK Ideograph */ + [0x86e4, 0x86e4], /* CJK Ideograph */ + [0x86e5, 0x86e5], /* CJK Ideograph */ + [0x86e6, 0x86e6], /* CJK Ideograph */ + [0x86e7, 0x86e7], /* CJK Ideograph */ + [0x86e8, 0x86e8], /* CJK Ideograph */ + [0x86e9, 0x86e9], /* CJK Ideograph */ + [0x86ea, 0x86ea], /* CJK Ideograph */ + [0x86eb, 0x86eb], /* CJK Ideograph */ + [0x86ec, 0x86ec], /* CJK Ideograph */ + [0x86ed, 0x86ed], /* CJK Ideograph */ + [0x86ee, 0x86ee], /* CJK Ideograph */ + [0x86ef, 0x86ef], /* CJK Ideograph */ + [0x86f0, 0x86f0], /* CJK Ideograph */ + [0x86f1, 0x86f1], /* CJK Ideograph */ + [0x86f2, 0x86f2], /* CJK Ideograph */ + [0x86f3, 0x86f3], /* CJK Ideograph */ + [0x86f4, 0x86f4], /* CJK Ideograph */ + [0x86f5, 0x86f5], /* CJK Ideograph */ + [0x86f6, 0x86f6], /* CJK Ideograph */ + [0x86f7, 0x86f7], /* CJK Ideograph */ + [0x86f8, 0x86f8], /* CJK Ideograph */ + [0x86f9, 0x86f9], /* CJK Ideograph */ + [0x86fa, 0x86fa], /* CJK Ideograph */ + [0x86fb, 0x86fb], /* CJK Ideograph */ + [0x86fc, 0x86fc], /* CJK Ideograph */ + [0x86fd, 0x86fd], /* CJK Ideograph */ + [0x86fe, 0x86fe], /* CJK Ideograph */ + [0x86ff, 0x86ff], /* CJK Ideograph */ + [0x8700, 0x8700], /* CJK Ideograph */ + [0x8701, 0x8701], /* CJK Ideograph */ + [0x8702, 0x8702], /* CJK Ideograph */ + [0x8703, 0x8703], /* CJK Ideograph */ + [0x8704, 0x8704], /* CJK Ideograph */ + [0x8705, 0x8705], /* CJK Ideograph */ + [0x8706, 0x8706], /* CJK Ideograph */ + [0x8707, 0x8707], /* CJK Ideograph */ + [0x8708, 0x8708], /* CJK Ideograph */ + [0x8709, 0x8709], /* CJK Ideograph */ + [0x870a, 0x870a], /* CJK Ideograph */ + [0x870b, 0x870b], /* CJK Ideograph */ + [0x870c, 0x870c], /* CJK Ideograph */ + [0x870d, 0x870d], /* CJK Ideograph */ + [0x870e, 0x870e], /* CJK Ideograph */ + [0x870f, 0x870f], /* CJK Ideograph */ + [0x8710, 0x8710], /* CJK Ideograph */ + [0x8711, 0x8711], /* CJK Ideograph */ + [0x8712, 0x8712], /* CJK Ideograph */ + [0x8713, 0x8713], /* CJK Ideograph */ + [0x8714, 0x8714], /* CJK Ideograph */ + [0x8715, 0x8715], /* CJK Ideograph */ + [0x8716, 0x8716], /* CJK Ideograph */ + [0x8717, 0x8717], /* CJK Ideograph */ + [0x8718, 0x8718], /* CJK Ideograph */ + [0x8719, 0x8719], /* CJK Ideograph */ + [0x871a, 0x871a], /* CJK Ideograph */ + [0x871b, 0x871b], /* CJK Ideograph */ + [0x871c, 0x871c], /* CJK Ideograph */ + [0x871d, 0x871d], /* CJK Ideograph */ + [0x871e, 0x871e], /* CJK Ideograph */ + [0x871f, 0x871f], /* CJK Ideograph */ + [0x8720, 0x8720], /* CJK Ideograph */ + [0x8721, 0x8721], /* CJK Ideograph */ + [0x8722, 0x8722], /* CJK Ideograph */ + [0x8723, 0x8723], /* CJK Ideograph */ + [0x8724, 0x8724], /* CJK Ideograph */ + [0x8725, 0x8725], /* CJK Ideograph */ + [0x8726, 0x8726], /* CJK Ideograph */ + [0x8727, 0x8727], /* CJK Ideograph */ + [0x8728, 0x8728], /* CJK Ideograph */ + [0x8729, 0x8729], /* CJK Ideograph */ + [0x872a, 0x872a], /* CJK Ideograph */ + [0x872b, 0x872b], /* CJK Ideograph */ + [0x872c, 0x872c], /* CJK Ideograph */ + [0x872d, 0x872d], /* CJK Ideograph */ + [0x872e, 0x872e], /* CJK Ideograph */ + [0x872f, 0x872f], /* CJK Ideograph */ + [0x8730, 0x8730], /* CJK Ideograph */ + [0x8731, 0x8731], /* CJK Ideograph */ + [0x8732, 0x8732], /* CJK Ideograph */ + [0x8733, 0x8733], /* CJK Ideograph */ + [0x8734, 0x8734], /* CJK Ideograph */ + [0x8735, 0x8735], /* CJK Ideograph */ + [0x8736, 0x8736], /* CJK Ideograph */ + [0x8737, 0x8737], /* CJK Ideograph */ + [0x8738, 0x8738], /* CJK Ideograph */ + [0x8739, 0x8739], /* CJK Ideograph */ + [0x873a, 0x873a], /* CJK Ideograph */ + [0x873b, 0x873b], /* CJK Ideograph */ + [0x873c, 0x873c], /* CJK Ideograph */ + [0x873d, 0x873d], /* CJK Ideograph */ + [0x873e, 0x873e], /* CJK Ideograph */ + [0x873f, 0x873f], /* CJK Ideograph */ + [0x8740, 0x8740], /* CJK Ideograph */ + [0x8741, 0x8741], /* CJK Ideograph */ + [0x8742, 0x8742], /* CJK Ideograph */ + [0x8743, 0x8743], /* CJK Ideograph */ + [0x8744, 0x8744], /* CJK Ideograph */ + [0x8745, 0x8745], /* CJK Ideograph */ + [0x8746, 0x8746], /* CJK Ideograph */ + [0x8747, 0x8747], /* CJK Ideograph */ + [0x8748, 0x8748], /* CJK Ideograph */ + [0x8749, 0x8749], /* CJK Ideograph */ + [0x874a, 0x874a], /* CJK Ideograph */ + [0x874b, 0x874b], /* CJK Ideograph */ + [0x874c, 0x874c], /* CJK Ideograph */ + [0x874d, 0x874d], /* CJK Ideograph */ + [0x874e, 0x874e], /* CJK Ideograph */ + [0x874f, 0x874f], /* CJK Ideograph */ + [0x8750, 0x8750], /* CJK Ideograph */ + [0x8751, 0x8751], /* CJK Ideograph */ + [0x8752, 0x8752], /* CJK Ideograph */ + [0x8753, 0x8753], /* CJK Ideograph */ + [0x8754, 0x8754], /* CJK Ideograph */ + [0x8755, 0x8755], /* CJK Ideograph */ + [0x8756, 0x8756], /* CJK Ideograph */ + [0x8757, 0x8757], /* CJK Ideograph */ + [0x8758, 0x8758], /* CJK Ideograph */ + [0x8759, 0x8759], /* CJK Ideograph */ + [0x875a, 0x875a], /* CJK Ideograph */ + [0x875b, 0x875b], /* CJK Ideograph */ + [0x875c, 0x875c], /* CJK Ideograph */ + [0x875d, 0x875d], /* CJK Ideograph */ + [0x875e, 0x875e], /* CJK Ideograph */ + [0x875f, 0x875f], /* CJK Ideograph */ + [0x8760, 0x8760], /* CJK Ideograph */ + [0x8761, 0x8761], /* CJK Ideograph */ + [0x8762, 0x8762], /* CJK Ideograph */ + [0x8763, 0x8763], /* CJK Ideograph */ + [0x8764, 0x8764], /* CJK Ideograph */ + [0x8765, 0x8765], /* CJK Ideograph */ + [0x8766, 0x8766], /* CJK Ideograph */ + [0x8767, 0x8767], /* CJK Ideograph */ + [0x8768, 0x8768], /* CJK Ideograph */ + [0x8769, 0x8769], /* CJK Ideograph */ + [0x876a, 0x876a], /* CJK Ideograph */ + [0x876b, 0x876b], /* CJK Ideograph */ + [0x876c, 0x876c], /* CJK Ideograph */ + [0x876d, 0x876d], /* CJK Ideograph */ + [0x876e, 0x876e], /* CJK Ideograph */ + [0x876f, 0x876f], /* CJK Ideograph */ + [0x8770, 0x8770], /* CJK Ideograph */ + [0x8771, 0x8771], /* CJK Ideograph */ + [0x8772, 0x8772], /* CJK Ideograph */ + [0x8773, 0x8773], /* CJK Ideograph */ + [0x8774, 0x8774], /* CJK Ideograph */ + [0x8775, 0x8775], /* CJK Ideograph */ + [0x8776, 0x8776], /* CJK Ideograph */ + [0x8777, 0x8777], /* CJK Ideograph */ + [0x8778, 0x8778], /* CJK Ideograph */ + [0x8779, 0x8779], /* CJK Ideograph */ + [0x877a, 0x877a], /* CJK Ideograph */ + [0x877b, 0x877b], /* CJK Ideograph */ + [0x877c, 0x877c], /* CJK Ideograph */ + [0x877d, 0x877d], /* CJK Ideograph */ + [0x877e, 0x877e], /* CJK Ideograph */ + [0x877f, 0x877f], /* CJK Ideograph */ + [0x8780, 0x8780], /* CJK Ideograph */ + [0x8781, 0x8781], /* CJK Ideograph */ + [0x8782, 0x8782], /* CJK Ideograph */ + [0x8783, 0x8783], /* CJK Ideograph */ + [0x8784, 0x8784], /* CJK Ideograph */ + [0x8785, 0x8785], /* CJK Ideograph */ + [0x8786, 0x8786], /* CJK Ideograph */ + [0x8787, 0x8787], /* CJK Ideograph */ + [0x8788, 0x8788], /* CJK Ideograph */ + [0x8789, 0x8789], /* CJK Ideograph */ + [0x878a, 0x878a], /* CJK Ideograph */ + [0x878b, 0x878b], /* CJK Ideograph */ + [0x878c, 0x878c], /* CJK Ideograph */ + [0x878d, 0x878d], /* CJK Ideograph */ + [0x878e, 0x878e], /* CJK Ideograph */ + [0x878f, 0x878f], /* CJK Ideograph */ + [0x8790, 0x8790], /* CJK Ideograph */ + [0x8791, 0x8791], /* CJK Ideograph */ + [0x8792, 0x8792], /* CJK Ideograph */ + [0x8793, 0x8793], /* CJK Ideograph */ + [0x8794, 0x8794], /* CJK Ideograph */ + [0x8795, 0x8795], /* CJK Ideograph */ + [0x8796, 0x8796], /* CJK Ideograph */ + [0x8797, 0x8797], /* CJK Ideograph */ + [0x8798, 0x8798], /* CJK Ideograph */ + [0x8799, 0x8799], /* CJK Ideograph */ + [0x879a, 0x879a], /* CJK Ideograph */ + [0x879b, 0x879b], /* CJK Ideograph */ + [0x879c, 0x879c], /* CJK Ideograph */ + [0x879d, 0x879d], /* CJK Ideograph */ + [0x879e, 0x879e], /* CJK Ideograph */ + [0x879f, 0x879f], /* CJK Ideograph */ + [0x87a0, 0x87a0], /* CJK Ideograph */ + [0x87a1, 0x87a1], /* CJK Ideograph */ + [0x87a2, 0x87a2], /* CJK Ideograph */ + [0x87a3, 0x87a3], /* CJK Ideograph */ + [0x87a4, 0x87a4], /* CJK Ideograph */ + [0x87a5, 0x87a5], /* CJK Ideograph */ + [0x87a6, 0x87a6], /* CJK Ideograph */ + [0x87a7, 0x87a7], /* CJK Ideograph */ + [0x87a8, 0x87a8], /* CJK Ideograph */ + [0x87a9, 0x87a9], /* CJK Ideograph */ + [0x87aa, 0x87aa], /* CJK Ideograph */ + [0x87ab, 0x87ab], /* CJK Ideograph */ + [0x87ac, 0x87ac], /* CJK Ideograph */ + [0x87ad, 0x87ad], /* CJK Ideograph */ + [0x87ae, 0x87ae], /* CJK Ideograph */ + [0x87af, 0x87af], /* CJK Ideograph */ + [0x87b0, 0x87b0], /* CJK Ideograph */ + [0x87b1, 0x87b1], /* CJK Ideograph */ + [0x87b2, 0x87b2], /* CJK Ideograph */ + [0x87b3, 0x87b3], /* CJK Ideograph */ + [0x87b4, 0x87b4], /* CJK Ideograph */ + [0x87b5, 0x87b5], /* CJK Ideograph */ + [0x87b6, 0x87b6], /* CJK Ideograph */ + [0x87b7, 0x87b7], /* CJK Ideograph */ + [0x87b8, 0x87b8], /* CJK Ideograph */ + [0x87b9, 0x87b9], /* CJK Ideograph */ + [0x87ba, 0x87ba], /* CJK Ideograph */ + [0x87bb, 0x87bb], /* CJK Ideograph */ + [0x87bc, 0x87bc], /* CJK Ideograph */ + [0x87bd, 0x87bd], /* CJK Ideograph */ + [0x87be, 0x87be], /* CJK Ideograph */ + [0x87bf, 0x87bf], /* CJK Ideograph */ + [0x87c0, 0x87c0], /* CJK Ideograph */ + [0x87c1, 0x87c1], /* CJK Ideograph */ + [0x87c2, 0x87c2], /* CJK Ideograph */ + [0x87c3, 0x87c3], /* CJK Ideograph */ + [0x87c4, 0x87c4], /* CJK Ideograph */ + [0x87c5, 0x87c5], /* CJK Ideograph */ + [0x87c6, 0x87c6], /* CJK Ideograph */ + [0x87c7, 0x87c7], /* CJK Ideograph */ + [0x87c8, 0x87c8], /* CJK Ideograph */ + [0x87c9, 0x87c9], /* CJK Ideograph */ + [0x87ca, 0x87ca], /* CJK Ideograph */ + [0x87cb, 0x87cb], /* CJK Ideograph */ + [0x87cc, 0x87cc], /* CJK Ideograph */ + [0x87cd, 0x87cd], /* CJK Ideograph */ + [0x87ce, 0x87ce], /* CJK Ideograph */ + [0x87cf, 0x87cf], /* CJK Ideograph */ + [0x87d0, 0x87d0], /* CJK Ideograph */ + [0x87d1, 0x87d1], /* CJK Ideograph */ + [0x87d2, 0x87d2], /* CJK Ideograph */ + [0x87d3, 0x87d3], /* CJK Ideograph */ + [0x87d4, 0x87d4], /* CJK Ideograph */ + [0x87d5, 0x87d5], /* CJK Ideograph */ + [0x87d6, 0x87d6], /* CJK Ideograph */ + [0x87d7, 0x87d7], /* CJK Ideograph */ + [0x87d8, 0x87d8], /* CJK Ideograph */ + [0x87d9, 0x87d9], /* CJK Ideograph */ + [0x87da, 0x87da], /* CJK Ideograph */ + [0x87db, 0x87db], /* CJK Ideograph */ + [0x87dc, 0x87dc], /* CJK Ideograph */ + [0x87dd, 0x87dd], /* CJK Ideograph */ + [0x87de, 0x87de], /* CJK Ideograph */ + [0x87df, 0x87df], /* CJK Ideograph */ + [0x87e0, 0x87e0], /* CJK Ideograph */ + [0x87e1, 0x87e1], /* CJK Ideograph */ + [0x87e2, 0x87e2], /* CJK Ideograph */ + [0x87e3, 0x87e3], /* CJK Ideograph */ + [0x87e4, 0x87e4], /* CJK Ideograph */ + [0x87e5, 0x87e5], /* CJK Ideograph */ + [0x87e6, 0x87e6], /* CJK Ideograph */ + [0x87e7, 0x87e7], /* CJK Ideograph */ + [0x87e8, 0x87e8], /* CJK Ideograph */ + [0x87e9, 0x87e9], /* CJK Ideograph */ + [0x87ea, 0x87ea], /* CJK Ideograph */ + [0x87eb, 0x87eb], /* CJK Ideograph */ + [0x87ec, 0x87ec], /* CJK Ideograph */ + [0x87ed, 0x87ed], /* CJK Ideograph */ + [0x87ee, 0x87ee], /* CJK Ideograph */ + [0x87ef, 0x87ef], /* CJK Ideograph */ + [0x87f0, 0x87f0], /* CJK Ideograph */ + [0x87f1, 0x87f1], /* CJK Ideograph */ + [0x87f2, 0x87f2], /* CJK Ideograph */ + [0x87f3, 0x87f3], /* CJK Ideograph */ + [0x87f4, 0x87f4], /* CJK Ideograph */ + [0x87f5, 0x87f5], /* CJK Ideograph */ + [0x87f6, 0x87f6], /* CJK Ideograph */ + [0x87f7, 0x87f7], /* CJK Ideograph */ + [0x87f8, 0x87f8], /* CJK Ideograph */ + [0x87f9, 0x87f9], /* CJK Ideograph */ + [0x87fa, 0x87fa], /* CJK Ideograph */ + [0x87fb, 0x87fb], /* CJK Ideograph */ + [0x87fc, 0x87fc], /* CJK Ideograph */ + [0x87fd, 0x87fd], /* CJK Ideograph */ + [0x87fe, 0x87fe], /* CJK Ideograph */ + [0x87ff, 0x87ff], /* CJK Ideograph */ + [0x8800, 0x8800], /* CJK Ideograph */ + [0x8801, 0x8801], /* CJK Ideograph */ + [0x8802, 0x8802], /* CJK Ideograph */ + [0x8803, 0x8803], /* CJK Ideograph */ + [0x8804, 0x8804], /* CJK Ideograph */ + [0x8805, 0x8805], /* CJK Ideograph */ + [0x8806, 0x8806], /* CJK Ideograph */ + [0x8807, 0x8807], /* CJK Ideograph */ + [0x8808, 0x8808], /* CJK Ideograph */ + [0x8809, 0x8809], /* CJK Ideograph */ + [0x880a, 0x880a], /* CJK Ideograph */ + [0x880b, 0x880b], /* CJK Ideograph */ + [0x880c, 0x880c], /* CJK Ideograph */ + [0x880d, 0x880d], /* CJK Ideograph */ + [0x880e, 0x880e], /* CJK Ideograph */ + [0x880f, 0x880f], /* CJK Ideograph */ + [0x8810, 0x8810], /* CJK Ideograph */ + [0x8811, 0x8811], /* CJK Ideograph */ + [0x8812, 0x8812], /* CJK Ideograph */ + [0x8813, 0x8813], /* CJK Ideograph */ + [0x8814, 0x8814], /* CJK Ideograph */ + [0x8815, 0x8815], /* CJK Ideograph */ + [0x8816, 0x8816], /* CJK Ideograph */ + [0x8817, 0x8817], /* CJK Ideograph */ + [0x8818, 0x8818], /* CJK Ideograph */ + [0x8819, 0x8819], /* CJK Ideograph */ + [0x881a, 0x881a], /* CJK Ideograph */ + [0x881b, 0x881b], /* CJK Ideograph */ + [0x881c, 0x881c], /* CJK Ideograph */ + [0x881d, 0x881d], /* CJK Ideograph */ + [0x881e, 0x881e], /* CJK Ideograph */ + [0x881f, 0x881f], /* CJK Ideograph */ + [0x8820, 0x8820], /* CJK Ideograph */ + [0x8821, 0x8821], /* CJK Ideograph */ + [0x8822, 0x8822], /* CJK Ideograph */ + [0x8823, 0x8823], /* CJK Ideograph */ + [0x8824, 0x8824], /* CJK Ideograph */ + [0x8825, 0x8825], /* CJK Ideograph */ + [0x8826, 0x8826], /* CJK Ideograph */ + [0x8827, 0x8827], /* CJK Ideograph */ + [0x8828, 0x8828], /* CJK Ideograph */ + [0x8829, 0x8829], /* CJK Ideograph */ + [0x882a, 0x882a], /* CJK Ideograph */ + [0x882b, 0x882b], /* CJK Ideograph */ + [0x882c, 0x882c], /* CJK Ideograph */ + [0x882d, 0x882d], /* CJK Ideograph */ + [0x882e, 0x882e], /* CJK Ideograph */ + [0x882f, 0x882f], /* CJK Ideograph */ + [0x8830, 0x8830], /* CJK Ideograph */ + [0x8831, 0x8831], /* CJK Ideograph */ + [0x8832, 0x8832], /* CJK Ideograph */ + [0x8833, 0x8833], /* CJK Ideograph */ + [0x8834, 0x8834], /* CJK Ideograph */ + [0x8835, 0x8835], /* CJK Ideograph */ + [0x8836, 0x8836], /* CJK Ideograph */ + [0x8837, 0x8837], /* CJK Ideograph */ + [0x8838, 0x8838], /* CJK Ideograph */ + [0x8839, 0x8839], /* CJK Ideograph */ + [0x883a, 0x883a], /* CJK Ideograph */ + [0x883b, 0x883b], /* CJK Ideograph */ + [0x883c, 0x883c], /* CJK Ideograph */ + [0x883d, 0x883d], /* CJK Ideograph */ + [0x883e, 0x883e], /* CJK Ideograph */ + [0x883f, 0x883f], /* CJK Ideograph */ + [0x8840, 0x8840], /* CJK Ideograph */ + [0x8841, 0x8841], /* CJK Ideograph */ + [0x8842, 0x8842], /* CJK Ideograph */ + [0x8843, 0x8843], /* CJK Ideograph */ + [0x8844, 0x8844], /* CJK Ideograph */ + [0x8845, 0x8845], /* CJK Ideograph */ + [0x8846, 0x8846], /* CJK Ideograph */ + [0x8847, 0x8847], /* CJK Ideograph */ + [0x8848, 0x8848], /* CJK Ideograph */ + [0x8849, 0x8849], /* CJK Ideograph */ + [0x884a, 0x884a], /* CJK Ideograph */ + [0x884b, 0x884b], /* CJK Ideograph */ + [0x884c, 0x884c], /* CJK Ideograph */ + [0x884d, 0x884d], /* CJK Ideograph */ + [0x884e, 0x884e], /* CJK Ideograph */ + [0x884f, 0x884f], /* CJK Ideograph */ + [0x8850, 0x8850], /* CJK Ideograph */ + [0x8851, 0x8851], /* CJK Ideograph */ + [0x8852, 0x8852], /* CJK Ideograph */ + [0x8853, 0x8853], /* CJK Ideograph */ + [0x8854, 0x8854], /* CJK Ideograph */ + [0x8855, 0x8855], /* CJK Ideograph */ + [0x8856, 0x8856], /* CJK Ideograph */ + [0x8857, 0x8857], /* CJK Ideograph */ + [0x8858, 0x8858], /* CJK Ideograph */ + [0x8859, 0x8859], /* CJK Ideograph */ + [0x885a, 0x885a], /* CJK Ideograph */ + [0x885b, 0x885b], /* CJK Ideograph */ + [0x885c, 0x885c], /* CJK Ideograph */ + [0x885d, 0x885d], /* CJK Ideograph */ + [0x885e, 0x885e], /* CJK Ideograph */ + [0x885f, 0x885f], /* CJK Ideograph */ + [0x8860, 0x8860], /* CJK Ideograph */ + [0x8861, 0x8861], /* CJK Ideograph */ + [0x8862, 0x8862], /* CJK Ideograph */ + [0x8863, 0x8863], /* CJK Ideograph */ + [0x8864, 0x8864], /* CJK Ideograph */ + [0x8865, 0x8865], /* CJK Ideograph */ + [0x8866, 0x8866], /* CJK Ideograph */ + [0x8867, 0x8867], /* CJK Ideograph */ + [0x8868, 0x8868], /* CJK Ideograph */ + [0x8869, 0x8869], /* CJK Ideograph */ + [0x886a, 0x886a], /* CJK Ideograph */ + [0x886b, 0x886b], /* CJK Ideograph */ + [0x886c, 0x886c], /* CJK Ideograph */ + [0x886d, 0x886d], /* CJK Ideograph */ + [0x886e, 0x886e], /* CJK Ideograph */ + [0x886f, 0x886f], /* CJK Ideograph */ + [0x8870, 0x8870], /* CJK Ideograph */ + [0x8871, 0x8871], /* CJK Ideograph */ + [0x8872, 0x8872], /* CJK Ideograph */ + [0x8873, 0x8873], /* CJK Ideograph */ + [0x8874, 0x8874], /* CJK Ideograph */ + [0x8875, 0x8875], /* CJK Ideograph */ + [0x8876, 0x8876], /* CJK Ideograph */ + [0x8877, 0x8877], /* CJK Ideograph */ + [0x8878, 0x8878], /* CJK Ideograph */ + [0x8879, 0x8879], /* CJK Ideograph */ + [0x887a, 0x887a], /* CJK Ideograph */ + [0x887b, 0x887b], /* CJK Ideograph */ + [0x887c, 0x887c], /* CJK Ideograph */ + [0x887d, 0x887d], /* CJK Ideograph */ + [0x887e, 0x887e], /* CJK Ideograph */ + [0x887f, 0x887f], /* CJK Ideograph */ + [0x8880, 0x8880], /* CJK Ideograph */ + [0x8881, 0x8881], /* CJK Ideograph */ + [0x8882, 0x8882], /* CJK Ideograph */ + [0x8883, 0x8883], /* CJK Ideograph */ + [0x8884, 0x8884], /* CJK Ideograph */ + [0x8885, 0x8885], /* CJK Ideograph */ + [0x8886, 0x8886], /* CJK Ideograph */ + [0x8887, 0x8887], /* CJK Ideograph */ + [0x8888, 0x8888], /* CJK Ideograph */ + [0x8889, 0x8889], /* CJK Ideograph */ + [0x888a, 0x888a], /* CJK Ideograph */ + [0x888b, 0x888b], /* CJK Ideograph */ + [0x888c, 0x888c], /* CJK Ideograph */ + [0x888d, 0x888d], /* CJK Ideograph */ + [0x888e, 0x888e], /* CJK Ideograph */ + [0x888f, 0x888f], /* CJK Ideograph */ + [0x8890, 0x8890], /* CJK Ideograph */ + [0x8891, 0x8891], /* CJK Ideograph */ + [0x8892, 0x8892], /* CJK Ideograph */ + [0x8893, 0x8893], /* CJK Ideograph */ + [0x8894, 0x8894], /* CJK Ideograph */ + [0x8895, 0x8895], /* CJK Ideograph */ + [0x8896, 0x8896], /* CJK Ideograph */ + [0x8897, 0x8897], /* CJK Ideograph */ + [0x8898, 0x8898], /* CJK Ideograph */ + [0x8899, 0x8899], /* CJK Ideograph */ + [0x889a, 0x889a], /* CJK Ideograph */ + [0x889b, 0x889b], /* CJK Ideograph */ + [0x889c, 0x889c], /* CJK Ideograph */ + [0x889d, 0x889d], /* CJK Ideograph */ + [0x889e, 0x889e], /* CJK Ideograph */ + [0x889f, 0x889f], /* CJK Ideograph */ + [0x88a0, 0x88a0], /* CJK Ideograph */ + [0x88a1, 0x88a1], /* CJK Ideograph */ + [0x88a2, 0x88a2], /* CJK Ideograph */ + [0x88a3, 0x88a3], /* CJK Ideograph */ + [0x88a4, 0x88a4], /* CJK Ideograph */ + [0x88a5, 0x88a5], /* CJK Ideograph */ + [0x88a6, 0x88a6], /* CJK Ideograph */ + [0x88a7, 0x88a7], /* CJK Ideograph */ + [0x88a8, 0x88a8], /* CJK Ideograph */ + [0x88a9, 0x88a9], /* CJK Ideograph */ + [0x88aa, 0x88aa], /* CJK Ideograph */ + [0x88ab, 0x88ab], /* CJK Ideograph */ + [0x88ac, 0x88ac], /* CJK Ideograph */ + [0x88ad, 0x88ad], /* CJK Ideograph */ + [0x88ae, 0x88ae], /* CJK Ideograph */ + [0x88af, 0x88af], /* CJK Ideograph */ + [0x88b0, 0x88b0], /* CJK Ideograph */ + [0x88b1, 0x88b1], /* CJK Ideograph */ + [0x88b2, 0x88b2], /* CJK Ideograph */ + [0x88b3, 0x88b3], /* CJK Ideograph */ + [0x88b4, 0x88b4], /* CJK Ideograph */ + [0x88b5, 0x88b5], /* CJK Ideograph */ + [0x88b6, 0x88b6], /* CJK Ideograph */ + [0x88b7, 0x88b7], /* CJK Ideograph */ + [0x88b8, 0x88b8], /* CJK Ideograph */ + [0x88b9, 0x88b9], /* CJK Ideograph */ + [0x88ba, 0x88ba], /* CJK Ideograph */ + [0x88bb, 0x88bb], /* CJK Ideograph */ + [0x88bc, 0x88bc], /* CJK Ideograph */ + [0x88bd, 0x88bd], /* CJK Ideograph */ + [0x88be, 0x88be], /* CJK Ideograph */ + [0x88bf, 0x88bf], /* CJK Ideograph */ + [0x88c0, 0x88c0], /* CJK Ideograph */ + [0x88c1, 0x88c1], /* CJK Ideograph */ + [0x88c2, 0x88c2], /* CJK Ideograph */ + [0x88c3, 0x88c3], /* CJK Ideograph */ + [0x88c4, 0x88c4], /* CJK Ideograph */ + [0x88c5, 0x88c5], /* CJK Ideograph */ + [0x88c6, 0x88c6], /* CJK Ideograph */ + [0x88c7, 0x88c7], /* CJK Ideograph */ + [0x88c8, 0x88c8], /* CJK Ideograph */ + [0x88c9, 0x88c9], /* CJK Ideograph */ + [0x88ca, 0x88ca], /* CJK Ideograph */ + [0x88cb, 0x88cb], /* CJK Ideograph */ + [0x88cc, 0x88cc], /* CJK Ideograph */ + [0x88cd, 0x88cd], /* CJK Ideograph */ + [0x88ce, 0x88ce], /* CJK Ideograph */ + [0x88cf, 0x88cf], /* CJK Ideograph */ + [0x88d0, 0x88d0], /* CJK Ideograph */ + [0x88d1, 0x88d1], /* CJK Ideograph */ + [0x88d2, 0x88d2], /* CJK Ideograph */ + [0x88d3, 0x88d3], /* CJK Ideograph */ + [0x88d4, 0x88d4], /* CJK Ideograph */ + [0x88d5, 0x88d5], /* CJK Ideograph */ + [0x88d6, 0x88d6], /* CJK Ideograph */ + [0x88d7, 0x88d7], /* CJK Ideograph */ + [0x88d8, 0x88d8], /* CJK Ideograph */ + [0x88d9, 0x88d9], /* CJK Ideograph */ + [0x88da, 0x88da], /* CJK Ideograph */ + [0x88db, 0x88db], /* CJK Ideograph */ + [0x88dc, 0x88dc], /* CJK Ideograph */ + [0x88dd, 0x88dd], /* CJK Ideograph */ + [0x88de, 0x88de], /* CJK Ideograph */ + [0x88df, 0x88df], /* CJK Ideograph */ + [0x88e0, 0x88e0], /* CJK Ideograph */ + [0x88e1, 0x88e1], /* CJK Ideograph */ + [0x88e2, 0x88e2], /* CJK Ideograph */ + [0x88e3, 0x88e3], /* CJK Ideograph */ + [0x88e4, 0x88e4], /* CJK Ideograph */ + [0x88e5, 0x88e5], /* CJK Ideograph */ + [0x88e6, 0x88e6], /* CJK Ideograph */ + [0x88e7, 0x88e7], /* CJK Ideograph */ + [0x88e8, 0x88e8], /* CJK Ideograph */ + [0x88e9, 0x88e9], /* CJK Ideograph */ + [0x88ea, 0x88ea], /* CJK Ideograph */ + [0x88eb, 0x88eb], /* CJK Ideograph */ + [0x88ec, 0x88ec], /* CJK Ideograph */ + [0x88ed, 0x88ed], /* CJK Ideograph */ + [0x88ee, 0x88ee], /* CJK Ideograph */ + [0x88ef, 0x88ef], /* CJK Ideograph */ + [0x88f0, 0x88f0], /* CJK Ideograph */ + [0x88f1, 0x88f1], /* CJK Ideograph */ + [0x88f2, 0x88f2], /* CJK Ideograph */ + [0x88f3, 0x88f3], /* CJK Ideograph */ + [0x88f4, 0x88f4], /* CJK Ideograph */ + [0x88f5, 0x88f5], /* CJK Ideograph */ + [0x88f6, 0x88f6], /* CJK Ideograph */ + [0x88f7, 0x88f7], /* CJK Ideograph */ + [0x88f8, 0x88f8], /* CJK Ideograph */ + [0x88f9, 0x88f9], /* CJK Ideograph */ + [0x88fa, 0x88fa], /* CJK Ideograph */ + [0x88fb, 0x88fb], /* CJK Ideograph */ + [0x88fc, 0x88fc], /* CJK Ideograph */ + [0x88fd, 0x88fd], /* CJK Ideograph */ + [0x88fe, 0x88fe], /* CJK Ideograph */ + [0x88ff, 0x88ff], /* CJK Ideograph */ + [0x8900, 0x8900], /* CJK Ideograph */ + [0x8901, 0x8901], /* CJK Ideograph */ + [0x8902, 0x8902], /* CJK Ideograph */ + [0x8903, 0x8903], /* CJK Ideograph */ + [0x8904, 0x8904], /* CJK Ideograph */ + [0x8905, 0x8905], /* CJK Ideograph */ + [0x8906, 0x8906], /* CJK Ideograph */ + [0x8907, 0x8907], /* CJK Ideograph */ + [0x8908, 0x8908], /* CJK Ideograph */ + [0x8909, 0x8909], /* CJK Ideograph */ + [0x890a, 0x890a], /* CJK Ideograph */ + [0x890b, 0x890b], /* CJK Ideograph */ + [0x890c, 0x890c], /* CJK Ideograph */ + [0x890d, 0x890d], /* CJK Ideograph */ + [0x890e, 0x890e], /* CJK Ideograph */ + [0x890f, 0x890f], /* CJK Ideograph */ + [0x8910, 0x8910], /* CJK Ideograph */ + [0x8911, 0x8911], /* CJK Ideograph */ + [0x8912, 0x8912], /* CJK Ideograph */ + [0x8913, 0x8913], /* CJK Ideograph */ + [0x8914, 0x8914], /* CJK Ideograph */ + [0x8915, 0x8915], /* CJK Ideograph */ + [0x8916, 0x8916], /* CJK Ideograph */ + [0x8917, 0x8917], /* CJK Ideograph */ + [0x8918, 0x8918], /* CJK Ideograph */ + [0x8919, 0x8919], /* CJK Ideograph */ + [0x891a, 0x891a], /* CJK Ideograph */ + [0x891b, 0x891b], /* CJK Ideograph */ + [0x891c, 0x891c], /* CJK Ideograph */ + [0x891d, 0x891d], /* CJK Ideograph */ + [0x891e, 0x891e], /* CJK Ideograph */ + [0x891f, 0x891f], /* CJK Ideograph */ + [0x8920, 0x8920], /* CJK Ideograph */ + [0x8921, 0x8921], /* CJK Ideograph */ + [0x8922, 0x8922], /* CJK Ideograph */ + [0x8923, 0x8923], /* CJK Ideograph */ + [0x8924, 0x8924], /* CJK Ideograph */ + [0x8925, 0x8925], /* CJK Ideograph */ + [0x8926, 0x8926], /* CJK Ideograph */ + [0x8927, 0x8927], /* CJK Ideograph */ + [0x8928, 0x8928], /* CJK Ideograph */ + [0x8929, 0x8929], /* CJK Ideograph */ + [0x892a, 0x892a], /* CJK Ideograph */ + [0x892b, 0x892b], /* CJK Ideograph */ + [0x892c, 0x892c], /* CJK Ideograph */ + [0x892d, 0x892d], /* CJK Ideograph */ + [0x892e, 0x892e], /* CJK Ideograph */ + [0x892f, 0x892f], /* CJK Ideograph */ + [0x8930, 0x8930], /* CJK Ideograph */ + [0x8931, 0x8931], /* CJK Ideograph */ + [0x8932, 0x8932], /* CJK Ideograph */ + [0x8933, 0x8933], /* CJK Ideograph */ + [0x8934, 0x8934], /* CJK Ideograph */ + [0x8935, 0x8935], /* CJK Ideograph */ + [0x8936, 0x8936], /* CJK Ideograph */ + [0x8937, 0x8937], /* CJK Ideograph */ + [0x8938, 0x8938], /* CJK Ideograph */ + [0x8939, 0x8939], /* CJK Ideograph */ + [0x893a, 0x893a], /* CJK Ideograph */ + [0x893b, 0x893b], /* CJK Ideograph */ + [0x893c, 0x893c], /* CJK Ideograph */ + [0x893d, 0x893d], /* CJK Ideograph */ + [0x893e, 0x893e], /* CJK Ideograph */ + [0x893f, 0x893f], /* CJK Ideograph */ + [0x8940, 0x8940], /* CJK Ideograph */ + [0x8941, 0x8941], /* CJK Ideograph */ + [0x8942, 0x8942], /* CJK Ideograph */ + [0x8943, 0x8943], /* CJK Ideograph */ + [0x8944, 0x8944], /* CJK Ideograph */ + [0x8945, 0x8945], /* CJK Ideograph */ + [0x8946, 0x8946], /* CJK Ideograph */ + [0x8947, 0x8947], /* CJK Ideograph */ + [0x8948, 0x8948], /* CJK Ideograph */ + [0x8949, 0x8949], /* CJK Ideograph */ + [0x894a, 0x894a], /* CJK Ideograph */ + [0x894b, 0x894b], /* CJK Ideograph */ + [0x894c, 0x894c], /* CJK Ideograph */ + [0x894d, 0x894d], /* CJK Ideograph */ + [0x894e, 0x894e], /* CJK Ideograph */ + [0x894f, 0x894f], /* CJK Ideograph */ + [0x8950, 0x8950], /* CJK Ideograph */ + [0x8951, 0x8951], /* CJK Ideograph */ + [0x8952, 0x8952], /* CJK Ideograph */ + [0x8953, 0x8953], /* CJK Ideograph */ + [0x8954, 0x8954], /* CJK Ideograph */ + [0x8955, 0x8955], /* CJK Ideograph */ + [0x8956, 0x8956], /* CJK Ideograph */ + [0x8957, 0x8957], /* CJK Ideograph */ + [0x8958, 0x8958], /* CJK Ideograph */ + [0x8959, 0x8959], /* CJK Ideograph */ + [0x895a, 0x895a], /* CJK Ideograph */ + [0x895b, 0x895b], /* CJK Ideograph */ + [0x895c, 0x895c], /* CJK Ideograph */ + [0x895d, 0x895d], /* CJK Ideograph */ + [0x895e, 0x895e], /* CJK Ideograph */ + [0x895f, 0x895f], /* CJK Ideograph */ + [0x8960, 0x8960], /* CJK Ideograph */ + [0x8961, 0x8961], /* CJK Ideograph */ + [0x8962, 0x8962], /* CJK Ideograph */ + [0x8963, 0x8963], /* CJK Ideograph */ + [0x8964, 0x8964], /* CJK Ideograph */ + [0x8965, 0x8965], /* CJK Ideograph */ + [0x8966, 0x8966], /* CJK Ideograph */ + [0x8967, 0x8967], /* CJK Ideograph */ + [0x8968, 0x8968], /* CJK Ideograph */ + [0x8969, 0x8969], /* CJK Ideograph */ + [0x896a, 0x896a], /* CJK Ideograph */ + [0x896b, 0x896b], /* CJK Ideograph */ + [0x896c, 0x896c], /* CJK Ideograph */ + [0x896d, 0x896d], /* CJK Ideograph */ + [0x896e, 0x896e], /* CJK Ideograph */ + [0x896f, 0x896f], /* CJK Ideograph */ + [0x8970, 0x8970], /* CJK Ideograph */ + [0x8971, 0x8971], /* CJK Ideograph */ + [0x8972, 0x8972], /* CJK Ideograph */ + [0x8973, 0x8973], /* CJK Ideograph */ + [0x8974, 0x8974], /* CJK Ideograph */ + [0x8975, 0x8975], /* CJK Ideograph */ + [0x8976, 0x8976], /* CJK Ideograph */ + [0x8977, 0x8977], /* CJK Ideograph */ + [0x8978, 0x8978], /* CJK Ideograph */ + [0x8979, 0x8979], /* CJK Ideograph */ + [0x897a, 0x897a], /* CJK Ideograph */ + [0x897b, 0x897b], /* CJK Ideograph */ + [0x897c, 0x897c], /* CJK Ideograph */ + [0x897d, 0x897d], /* CJK Ideograph */ + [0x897e, 0x897e], /* CJK Ideograph */ + [0x897f, 0x897f], /* CJK Ideograph */ + [0x8980, 0x8980], /* CJK Ideograph */ + [0x8981, 0x8981], /* CJK Ideograph */ + [0x8982, 0x8982], /* CJK Ideograph */ + [0x8983, 0x8983], /* CJK Ideograph */ + [0x8984, 0x8984], /* CJK Ideograph */ + [0x8985, 0x8985], /* CJK Ideograph */ + [0x8986, 0x8986], /* CJK Ideograph */ + [0x8987, 0x8987], /* CJK Ideograph */ + [0x8988, 0x8988], /* CJK Ideograph */ + [0x8989, 0x8989], /* CJK Ideograph */ + [0x898a, 0x898a], /* CJK Ideograph */ + [0x898b, 0x898b], /* CJK Ideograph */ + [0x898c, 0x898c], /* CJK Ideograph */ + [0x898d, 0x898d], /* CJK Ideograph */ + [0x898e, 0x898e], /* CJK Ideograph */ + [0x898f, 0x898f], /* CJK Ideograph */ + [0x8990, 0x8990], /* CJK Ideograph */ + [0x8991, 0x8991], /* CJK Ideograph */ + [0x8992, 0x8992], /* CJK Ideograph */ + [0x8993, 0x8993], /* CJK Ideograph */ + [0x8994, 0x8994], /* CJK Ideograph */ + [0x8995, 0x8995], /* CJK Ideograph */ + [0x8996, 0x8996], /* CJK Ideograph */ + [0x8997, 0x8997], /* CJK Ideograph */ + [0x8998, 0x8998], /* CJK Ideograph */ + [0x8999, 0x8999], /* CJK Ideograph */ + [0x899a, 0x899a], /* CJK Ideograph */ + [0x899b, 0x899b], /* CJK Ideograph */ + [0x899c, 0x899c], /* CJK Ideograph */ + [0x899d, 0x899d], /* CJK Ideograph */ + [0x899e, 0x899e], /* CJK Ideograph */ + [0x899f, 0x899f], /* CJK Ideograph */ + [0x89a0, 0x89a0], /* CJK Ideograph */ + [0x89a1, 0x89a1], /* CJK Ideograph */ + [0x89a2, 0x89a2], /* CJK Ideograph */ + [0x89a3, 0x89a3], /* CJK Ideograph */ + [0x89a4, 0x89a4], /* CJK Ideograph */ + [0x89a5, 0x89a5], /* CJK Ideograph */ + [0x89a6, 0x89a6], /* CJK Ideograph */ + [0x89a7, 0x89a7], /* CJK Ideograph */ + [0x89a8, 0x89a8], /* CJK Ideograph */ + [0x89a9, 0x89a9], /* CJK Ideograph */ + [0x89aa, 0x89aa], /* CJK Ideograph */ + [0x89ab, 0x89ab], /* CJK Ideograph */ + [0x89ac, 0x89ac], /* CJK Ideograph */ + [0x89ad, 0x89ad], /* CJK Ideograph */ + [0x89ae, 0x89ae], /* CJK Ideograph */ + [0x89af, 0x89af], /* CJK Ideograph */ + [0x89b0, 0x89b0], /* CJK Ideograph */ + [0x89b1, 0x89b1], /* CJK Ideograph */ + [0x89b2, 0x89b2], /* CJK Ideograph */ + [0x89b3, 0x89b3], /* CJK Ideograph */ + [0x89b4, 0x89b4], /* CJK Ideograph */ + [0x89b5, 0x89b5], /* CJK Ideograph */ + [0x89b6, 0x89b6], /* CJK Ideograph */ + [0x89b7, 0x89b7], /* CJK Ideograph */ + [0x89b8, 0x89b8], /* CJK Ideograph */ + [0x89b9, 0x89b9], /* CJK Ideograph */ + [0x89ba, 0x89ba], /* CJK Ideograph */ + [0x89bb, 0x89bb], /* CJK Ideograph */ + [0x89bc, 0x89bc], /* CJK Ideograph */ + [0x89bd, 0x89bd], /* CJK Ideograph */ + [0x89be, 0x89be], /* CJK Ideograph */ + [0x89bf, 0x89bf], /* CJK Ideograph */ + [0x89c0, 0x89c0], /* CJK Ideograph */ + [0x89c1, 0x89c1], /* CJK Ideograph */ + [0x89c2, 0x89c2], /* CJK Ideograph */ + [0x89c3, 0x89c3], /* CJK Ideograph */ + [0x89c4, 0x89c4], /* CJK Ideograph */ + [0x89c5, 0x89c5], /* CJK Ideograph */ + [0x89c6, 0x89c6], /* CJK Ideograph */ + [0x89c7, 0x89c7], /* CJK Ideograph */ + [0x89c8, 0x89c8], /* CJK Ideograph */ + [0x89c9, 0x89c9], /* CJK Ideograph */ + [0x89ca, 0x89ca], /* CJK Ideograph */ + [0x89cb, 0x89cb], /* CJK Ideograph */ + [0x89cc, 0x89cc], /* CJK Ideograph */ + [0x89cd, 0x89cd], /* CJK Ideograph */ + [0x89ce, 0x89ce], /* CJK Ideograph */ + [0x89cf, 0x89cf], /* CJK Ideograph */ + [0x89d0, 0x89d0], /* CJK Ideograph */ + [0x89d1, 0x89d1], /* CJK Ideograph */ + [0x89d2, 0x89d2], /* CJK Ideograph */ + [0x89d3, 0x89d3], /* CJK Ideograph */ + [0x89d4, 0x89d4], /* CJK Ideograph */ + [0x89d5, 0x89d5], /* CJK Ideograph */ + [0x89d6, 0x89d6], /* CJK Ideograph */ + [0x89d7, 0x89d7], /* CJK Ideograph */ + [0x89d8, 0x89d8], /* CJK Ideograph */ + [0x89d9, 0x89d9], /* CJK Ideograph */ + [0x89da, 0x89da], /* CJK Ideograph */ + [0x89db, 0x89db], /* CJK Ideograph */ + [0x89dc, 0x89dc], /* CJK Ideograph */ + [0x89dd, 0x89dd], /* CJK Ideograph */ + [0x89de, 0x89de], /* CJK Ideograph */ + [0x89df, 0x89df], /* CJK Ideograph */ + [0x89e0, 0x89e0], /* CJK Ideograph */ + [0x89e1, 0x89e1], /* CJK Ideograph */ + [0x89e2, 0x89e2], /* CJK Ideograph */ + [0x89e3, 0x89e3], /* CJK Ideograph */ + [0x89e4, 0x89e4], /* CJK Ideograph */ + [0x89e5, 0x89e5], /* CJK Ideograph */ + [0x89e6, 0x89e6], /* CJK Ideograph */ + [0x89e7, 0x89e7], /* CJK Ideograph */ + [0x89e8, 0x89e8], /* CJK Ideograph */ + [0x89e9, 0x89e9], /* CJK Ideograph */ + [0x89ea, 0x89ea], /* CJK Ideograph */ + [0x89eb, 0x89eb], /* CJK Ideograph */ + [0x89ec, 0x89ec], /* CJK Ideograph */ + [0x89ed, 0x89ed], /* CJK Ideograph */ + [0x89ee, 0x89ee], /* CJK Ideograph */ + [0x89ef, 0x89ef], /* CJK Ideograph */ + [0x89f0, 0x89f0], /* CJK Ideograph */ + [0x89f1, 0x89f1], /* CJK Ideograph */ + [0x89f2, 0x89f2], /* CJK Ideograph */ + [0x89f3, 0x89f3], /* CJK Ideograph */ + [0x89f4, 0x89f4], /* CJK Ideograph */ + [0x89f5, 0x89f5], /* CJK Ideograph */ + [0x89f6, 0x89f6], /* CJK Ideograph */ + [0x89f7, 0x89f7], /* CJK Ideograph */ + [0x89f8, 0x89f8], /* CJK Ideograph */ + [0x89f9, 0x89f9], /* CJK Ideograph */ + [0x89fa, 0x89fa], /* CJK Ideograph */ + [0x89fb, 0x89fb], /* CJK Ideograph */ + [0x89fc, 0x89fc], /* CJK Ideograph */ + [0x89fd, 0x89fd], /* CJK Ideograph */ + [0x89fe, 0x89fe], /* CJK Ideograph */ + [0x89ff, 0x89ff], /* CJK Ideograph */ + [0x8a00, 0x8a00], /* CJK Ideograph */ + [0x8a01, 0x8a01], /* CJK Ideograph */ + [0x8a02, 0x8a02], /* CJK Ideograph */ + [0x8a03, 0x8a03], /* CJK Ideograph */ + [0x8a04, 0x8a04], /* CJK Ideograph */ + [0x8a05, 0x8a05], /* CJK Ideograph */ + [0x8a06, 0x8a06], /* CJK Ideograph */ + [0x8a07, 0x8a07], /* CJK Ideograph */ + [0x8a08, 0x8a08], /* CJK Ideograph */ + [0x8a09, 0x8a09], /* CJK Ideograph */ + [0x8a0a, 0x8a0a], /* CJK Ideograph */ + [0x8a0b, 0x8a0b], /* CJK Ideograph */ + [0x8a0c, 0x8a0c], /* CJK Ideograph */ + [0x8a0d, 0x8a0d], /* CJK Ideograph */ + [0x8a0e, 0x8a0e], /* CJK Ideograph */ + [0x8a0f, 0x8a0f], /* CJK Ideograph */ + [0x8a10, 0x8a10], /* CJK Ideograph */ + [0x8a11, 0x8a11], /* CJK Ideograph */ + [0x8a12, 0x8a12], /* CJK Ideograph */ + [0x8a13, 0x8a13], /* CJK Ideograph */ + [0x8a14, 0x8a14], /* CJK Ideograph */ + [0x8a15, 0x8a15], /* CJK Ideograph */ + [0x8a16, 0x8a16], /* CJK Ideograph */ + [0x8a17, 0x8a17], /* CJK Ideograph */ + [0x8a18, 0x8a18], /* CJK Ideograph */ + [0x8a19, 0x8a19], /* CJK Ideograph */ + [0x8a1a, 0x8a1a], /* CJK Ideograph */ + [0x8a1b, 0x8a1b], /* CJK Ideograph */ + [0x8a1c, 0x8a1c], /* CJK Ideograph */ + [0x8a1d, 0x8a1d], /* CJK Ideograph */ + [0x8a1e, 0x8a1e], /* CJK Ideograph */ + [0x8a1f, 0x8a1f], /* CJK Ideograph */ + [0x8a20, 0x8a20], /* CJK Ideograph */ + [0x8a21, 0x8a21], /* CJK Ideograph */ + [0x8a22, 0x8a22], /* CJK Ideograph */ + [0x8a23, 0x8a23], /* CJK Ideograph */ + [0x8a24, 0x8a24], /* CJK Ideograph */ + [0x8a25, 0x8a25], /* CJK Ideograph */ + [0x8a26, 0x8a26], /* CJK Ideograph */ + [0x8a27, 0x8a27], /* CJK Ideograph */ + [0x8a28, 0x8a28], /* CJK Ideograph */ + [0x8a29, 0x8a29], /* CJK Ideograph */ + [0x8a2a, 0x8a2a], /* CJK Ideograph */ + [0x8a2b, 0x8a2b], /* CJK Ideograph */ + [0x8a2c, 0x8a2c], /* CJK Ideograph */ + [0x8a2d, 0x8a2d], /* CJK Ideograph */ + [0x8a2e, 0x8a2e], /* CJK Ideograph */ + [0x8a2f, 0x8a2f], /* CJK Ideograph */ + [0x8a30, 0x8a30], /* CJK Ideograph */ + [0x8a31, 0x8a31], /* CJK Ideograph */ + [0x8a32, 0x8a32], /* CJK Ideograph */ + [0x8a33, 0x8a33], /* CJK Ideograph */ + [0x8a34, 0x8a34], /* CJK Ideograph */ + [0x8a35, 0x8a35], /* CJK Ideograph */ + [0x8a36, 0x8a36], /* CJK Ideograph */ + [0x8a37, 0x8a37], /* CJK Ideograph */ + [0x8a38, 0x8a38], /* CJK Ideograph */ + [0x8a39, 0x8a39], /* CJK Ideograph */ + [0x8a3a, 0x8a3a], /* CJK Ideograph */ + [0x8a3b, 0x8a3b], /* CJK Ideograph */ + [0x8a3c, 0x8a3c], /* CJK Ideograph */ + [0x8a3d, 0x8a3d], /* CJK Ideograph */ + [0x8a3e, 0x8a3e], /* CJK Ideograph */ + [0x8a3f, 0x8a3f], /* CJK Ideograph */ + [0x8a40, 0x8a40], /* CJK Ideograph */ + [0x8a41, 0x8a41], /* CJK Ideograph */ + [0x8a42, 0x8a42], /* CJK Ideograph */ + [0x8a43, 0x8a43], /* CJK Ideograph */ + [0x8a44, 0x8a44], /* CJK Ideograph */ + [0x8a45, 0x8a45], /* CJK Ideograph */ + [0x8a46, 0x8a46], /* CJK Ideograph */ + [0x8a47, 0x8a47], /* CJK Ideograph */ + [0x8a48, 0x8a48], /* CJK Ideograph */ + [0x8a49, 0x8a49], /* CJK Ideograph */ + [0x8a4a, 0x8a4a], /* CJK Ideograph */ + [0x8a4b, 0x8a4b], /* CJK Ideograph */ + [0x8a4c, 0x8a4c], /* CJK Ideograph */ + [0x8a4d, 0x8a4d], /* CJK Ideograph */ + [0x8a4e, 0x8a4e], /* CJK Ideograph */ + [0x8a4f, 0x8a4f], /* CJK Ideograph */ + [0x8a50, 0x8a50], /* CJK Ideograph */ + [0x8a51, 0x8a51], /* CJK Ideograph */ + [0x8a52, 0x8a52], /* CJK Ideograph */ + [0x8a53, 0x8a53], /* CJK Ideograph */ + [0x8a54, 0x8a54], /* CJK Ideograph */ + [0x8a55, 0x8a55], /* CJK Ideograph */ + [0x8a56, 0x8a56], /* CJK Ideograph */ + [0x8a57, 0x8a57], /* CJK Ideograph */ + [0x8a58, 0x8a58], /* CJK Ideograph */ + [0x8a59, 0x8a59], /* CJK Ideograph */ + [0x8a5a, 0x8a5a], /* CJK Ideograph */ + [0x8a5b, 0x8a5b], /* CJK Ideograph */ + [0x8a5c, 0x8a5c], /* CJK Ideograph */ + [0x8a5d, 0x8a5d], /* CJK Ideograph */ + [0x8a5e, 0x8a5e], /* CJK Ideograph */ + [0x8a5f, 0x8a5f], /* CJK Ideograph */ + [0x8a60, 0x8a60], /* CJK Ideograph */ + [0x8a61, 0x8a61], /* CJK Ideograph */ + [0x8a62, 0x8a62], /* CJK Ideograph */ + [0x8a63, 0x8a63], /* CJK Ideograph */ + [0x8a64, 0x8a64], /* CJK Ideograph */ + [0x8a65, 0x8a65], /* CJK Ideograph */ + [0x8a66, 0x8a66], /* CJK Ideograph */ + [0x8a67, 0x8a67], /* CJK Ideograph */ + [0x8a68, 0x8a68], /* CJK Ideograph */ + [0x8a69, 0x8a69], /* CJK Ideograph */ + [0x8a6a, 0x8a6a], /* CJK Ideograph */ + [0x8a6b, 0x8a6b], /* CJK Ideograph */ + [0x8a6c, 0x8a6c], /* CJK Ideograph */ + [0x8a6d, 0x8a6d], /* CJK Ideograph */ + [0x8a6e, 0x8a6e], /* CJK Ideograph */ + [0x8a6f, 0x8a6f], /* CJK Ideograph */ + [0x8a70, 0x8a70], /* CJK Ideograph */ + [0x8a71, 0x8a71], /* CJK Ideograph */ + [0x8a72, 0x8a72], /* CJK Ideograph */ + [0x8a73, 0x8a73], /* CJK Ideograph */ + [0x8a74, 0x8a74], /* CJK Ideograph */ + [0x8a75, 0x8a75], /* CJK Ideograph */ + [0x8a76, 0x8a76], /* CJK Ideograph */ + [0x8a77, 0x8a77], /* CJK Ideograph */ + [0x8a78, 0x8a78], /* CJK Ideograph */ + [0x8a79, 0x8a79], /* CJK Ideograph */ + [0x8a7a, 0x8a7a], /* CJK Ideograph */ + [0x8a7b, 0x8a7b], /* CJK Ideograph */ + [0x8a7c, 0x8a7c], /* CJK Ideograph */ + [0x8a7d, 0x8a7d], /* CJK Ideograph */ + [0x8a7e, 0x8a7e], /* CJK Ideograph */ + [0x8a7f, 0x8a7f], /* CJK Ideograph */ + [0x8a80, 0x8a80], /* CJK Ideograph */ + [0x8a81, 0x8a81], /* CJK Ideograph */ + [0x8a82, 0x8a82], /* CJK Ideograph */ + [0x8a83, 0x8a83], /* CJK Ideograph */ + [0x8a84, 0x8a84], /* CJK Ideograph */ + [0x8a85, 0x8a85], /* CJK Ideograph */ + [0x8a86, 0x8a86], /* CJK Ideograph */ + [0x8a87, 0x8a87], /* CJK Ideograph */ + [0x8a88, 0x8a88], /* CJK Ideograph */ + [0x8a89, 0x8a89], /* CJK Ideograph */ + [0x8a8a, 0x8a8a], /* CJK Ideograph */ + [0x8a8b, 0x8a8b], /* CJK Ideograph */ + [0x8a8c, 0x8a8c], /* CJK Ideograph */ + [0x8a8d, 0x8a8d], /* CJK Ideograph */ + [0x8a8e, 0x8a8e], /* CJK Ideograph */ + [0x8a8f, 0x8a8f], /* CJK Ideograph */ + [0x8a90, 0x8a90], /* CJK Ideograph */ + [0x8a91, 0x8a91], /* CJK Ideograph */ + [0x8a92, 0x8a92], /* CJK Ideograph */ + [0x8a93, 0x8a93], /* CJK Ideograph */ + [0x8a94, 0x8a94], /* CJK Ideograph */ + [0x8a95, 0x8a95], /* CJK Ideograph */ + [0x8a96, 0x8a96], /* CJK Ideograph */ + [0x8a97, 0x8a97], /* CJK Ideograph */ + [0x8a98, 0x8a98], /* CJK Ideograph */ + [0x8a99, 0x8a99], /* CJK Ideograph */ + [0x8a9a, 0x8a9a], /* CJK Ideograph */ + [0x8a9b, 0x8a9b], /* CJK Ideograph */ + [0x8a9c, 0x8a9c], /* CJK Ideograph */ + [0x8a9d, 0x8a9d], /* CJK Ideograph */ + [0x8a9e, 0x8a9e], /* CJK Ideograph */ + [0x8a9f, 0x8a9f], /* CJK Ideograph */ + [0x8aa0, 0x8aa0], /* CJK Ideograph */ + [0x8aa1, 0x8aa1], /* CJK Ideograph */ + [0x8aa2, 0x8aa2], /* CJK Ideograph */ + [0x8aa3, 0x8aa3], /* CJK Ideograph */ + [0x8aa4, 0x8aa4], /* CJK Ideograph */ + [0x8aa5, 0x8aa5], /* CJK Ideograph */ + [0x8aa6, 0x8aa6], /* CJK Ideograph */ + [0x8aa7, 0x8aa7], /* CJK Ideograph */ + [0x8aa8, 0x8aa8], /* CJK Ideograph */ + [0x8aa9, 0x8aa9], /* CJK Ideograph */ + [0x8aaa, 0x8aaa], /* CJK Ideograph */ + [0x8aab, 0x8aab], /* CJK Ideograph */ + [0x8aac, 0x8aac], /* CJK Ideograph */ + [0x8aad, 0x8aad], /* CJK Ideograph */ + [0x8aae, 0x8aae], /* CJK Ideograph */ + [0x8aaf, 0x8aaf], /* CJK Ideograph */ + [0x8ab0, 0x8ab0], /* CJK Ideograph */ + [0x8ab1, 0x8ab1], /* CJK Ideograph */ + [0x8ab2, 0x8ab2], /* CJK Ideograph */ + [0x8ab3, 0x8ab3], /* CJK Ideograph */ + [0x8ab4, 0x8ab4], /* CJK Ideograph */ + [0x8ab5, 0x8ab5], /* CJK Ideograph */ + [0x8ab6, 0x8ab6], /* CJK Ideograph */ + [0x8ab7, 0x8ab7], /* CJK Ideograph */ + [0x8ab8, 0x8ab8], /* CJK Ideograph */ + [0x8ab9, 0x8ab9], /* CJK Ideograph */ + [0x8aba, 0x8aba], /* CJK Ideograph */ + [0x8abb, 0x8abb], /* CJK Ideograph */ + [0x8abc, 0x8abc], /* CJK Ideograph */ + [0x8abd, 0x8abd], /* CJK Ideograph */ + [0x8abe, 0x8abe], /* CJK Ideograph */ + [0x8abf, 0x8abf], /* CJK Ideograph */ + [0x8ac0, 0x8ac0], /* CJK Ideograph */ + [0x8ac1, 0x8ac1], /* CJK Ideograph */ + [0x8ac2, 0x8ac2], /* CJK Ideograph */ + [0x8ac3, 0x8ac3], /* CJK Ideograph */ + [0x8ac4, 0x8ac4], /* CJK Ideograph */ + [0x8ac5, 0x8ac5], /* CJK Ideograph */ + [0x8ac6, 0x8ac6], /* CJK Ideograph */ + [0x8ac7, 0x8ac7], /* CJK Ideograph */ + [0x8ac8, 0x8ac8], /* CJK Ideograph */ + [0x8ac9, 0x8ac9], /* CJK Ideograph */ + [0x8aca, 0x8aca], /* CJK Ideograph */ + [0x8acb, 0x8acb], /* CJK Ideograph */ + [0x8acc, 0x8acc], /* CJK Ideograph */ + [0x8acd, 0x8acd], /* CJK Ideograph */ + [0x8ace, 0x8ace], /* CJK Ideograph */ + [0x8acf, 0x8acf], /* CJK Ideograph */ + [0x8ad0, 0x8ad0], /* CJK Ideograph */ + [0x8ad1, 0x8ad1], /* CJK Ideograph */ + [0x8ad2, 0x8ad2], /* CJK Ideograph */ + [0x8ad3, 0x8ad3], /* CJK Ideograph */ + [0x8ad4, 0x8ad4], /* CJK Ideograph */ + [0x8ad5, 0x8ad5], /* CJK Ideograph */ + [0x8ad6, 0x8ad6], /* CJK Ideograph */ + [0x8ad7, 0x8ad7], /* CJK Ideograph */ + [0x8ad8, 0x8ad8], /* CJK Ideograph */ + [0x8ad9, 0x8ad9], /* CJK Ideograph */ + [0x8ada, 0x8ada], /* CJK Ideograph */ + [0x8adb, 0x8adb], /* CJK Ideograph */ + [0x8adc, 0x8adc], /* CJK Ideograph */ + [0x8add, 0x8add], /* CJK Ideograph */ + [0x8ade, 0x8ade], /* CJK Ideograph */ + [0x8adf, 0x8adf], /* CJK Ideograph */ + [0x8ae0, 0x8ae0], /* CJK Ideograph */ + [0x8ae1, 0x8ae1], /* CJK Ideograph */ + [0x8ae2, 0x8ae2], /* CJK Ideograph */ + [0x8ae3, 0x8ae3], /* CJK Ideograph */ + [0x8ae4, 0x8ae4], /* CJK Ideograph */ + [0x8ae5, 0x8ae5], /* CJK Ideograph */ + [0x8ae6, 0x8ae6], /* CJK Ideograph */ + [0x8ae7, 0x8ae7], /* CJK Ideograph */ + [0x8ae8, 0x8ae8], /* CJK Ideograph */ + [0x8ae9, 0x8ae9], /* CJK Ideograph */ + [0x8aea, 0x8aea], /* CJK Ideograph */ + [0x8aeb, 0x8aeb], /* CJK Ideograph */ + [0x8aec, 0x8aec], /* CJK Ideograph */ + [0x8aed, 0x8aed], /* CJK Ideograph */ + [0x8aee, 0x8aee], /* CJK Ideograph */ + [0x8aef, 0x8aef], /* CJK Ideograph */ + [0x8af0, 0x8af0], /* CJK Ideograph */ + [0x8af1, 0x8af1], /* CJK Ideograph */ + [0x8af2, 0x8af2], /* CJK Ideograph */ + [0x8af3, 0x8af3], /* CJK Ideograph */ + [0x8af4, 0x8af4], /* CJK Ideograph */ + [0x8af5, 0x8af5], /* CJK Ideograph */ + [0x8af6, 0x8af6], /* CJK Ideograph */ + [0x8af7, 0x8af7], /* CJK Ideograph */ + [0x8af8, 0x8af8], /* CJK Ideograph */ + [0x8af9, 0x8af9], /* CJK Ideograph */ + [0x8afa, 0x8afa], /* CJK Ideograph */ + [0x8afb, 0x8afb], /* CJK Ideograph */ + [0x8afc, 0x8afc], /* CJK Ideograph */ + [0x8afd, 0x8afd], /* CJK Ideograph */ + [0x8afe, 0x8afe], /* CJK Ideograph */ + [0x8aff, 0x8aff], /* CJK Ideograph */ + [0x8b00, 0x8b00], /* CJK Ideograph */ + [0x8b01, 0x8b01], /* CJK Ideograph */ + [0x8b02, 0x8b02], /* CJK Ideograph */ + [0x8b03, 0x8b03], /* CJK Ideograph */ + [0x8b04, 0x8b04], /* CJK Ideograph */ + [0x8b05, 0x8b05], /* CJK Ideograph */ + [0x8b06, 0x8b06], /* CJK Ideograph */ + [0x8b07, 0x8b07], /* CJK Ideograph */ + [0x8b08, 0x8b08], /* CJK Ideograph */ + [0x8b09, 0x8b09], /* CJK Ideograph */ + [0x8b0a, 0x8b0a], /* CJK Ideograph */ + [0x8b0b, 0x8b0b], /* CJK Ideograph */ + [0x8b0c, 0x8b0c], /* CJK Ideograph */ + [0x8b0d, 0x8b0d], /* CJK Ideograph */ + [0x8b0e, 0x8b0e], /* CJK Ideograph */ + [0x8b0f, 0x8b0f], /* CJK Ideograph */ + [0x8b10, 0x8b10], /* CJK Ideograph */ + [0x8b11, 0x8b11], /* CJK Ideograph */ + [0x8b12, 0x8b12], /* CJK Ideograph */ + [0x8b13, 0x8b13], /* CJK Ideograph */ + [0x8b14, 0x8b14], /* CJK Ideograph */ + [0x8b15, 0x8b15], /* CJK Ideograph */ + [0x8b16, 0x8b16], /* CJK Ideograph */ + [0x8b17, 0x8b17], /* CJK Ideograph */ + [0x8b18, 0x8b18], /* CJK Ideograph */ + [0x8b19, 0x8b19], /* CJK Ideograph */ + [0x8b1a, 0x8b1a], /* CJK Ideograph */ + [0x8b1b, 0x8b1b], /* CJK Ideograph */ + [0x8b1c, 0x8b1c], /* CJK Ideograph */ + [0x8b1d, 0x8b1d], /* CJK Ideograph */ + [0x8b1e, 0x8b1e], /* CJK Ideograph */ + [0x8b1f, 0x8b1f], /* CJK Ideograph */ + [0x8b20, 0x8b20], /* CJK Ideograph */ + [0x8b21, 0x8b21], /* CJK Ideograph */ + [0x8b22, 0x8b22], /* CJK Ideograph */ + [0x8b23, 0x8b23], /* CJK Ideograph */ + [0x8b24, 0x8b24], /* CJK Ideograph */ + [0x8b25, 0x8b25], /* CJK Ideograph */ + [0x8b26, 0x8b26], /* CJK Ideograph */ + [0x8b27, 0x8b27], /* CJK Ideograph */ + [0x8b28, 0x8b28], /* CJK Ideograph */ + [0x8b29, 0x8b29], /* CJK Ideograph */ + [0x8b2a, 0x8b2a], /* CJK Ideograph */ + [0x8b2b, 0x8b2b], /* CJK Ideograph */ + [0x8b2c, 0x8b2c], /* CJK Ideograph */ + [0x8b2d, 0x8b2d], /* CJK Ideograph */ + [0x8b2e, 0x8b2e], /* CJK Ideograph */ + [0x8b2f, 0x8b2f], /* CJK Ideograph */ + [0x8b30, 0x8b30], /* CJK Ideograph */ + [0x8b31, 0x8b31], /* CJK Ideograph */ + [0x8b32, 0x8b32], /* CJK Ideograph */ + [0x8b33, 0x8b33], /* CJK Ideograph */ + [0x8b34, 0x8b34], /* CJK Ideograph */ + [0x8b35, 0x8b35], /* CJK Ideograph */ + [0x8b36, 0x8b36], /* CJK Ideograph */ + [0x8b37, 0x8b37], /* CJK Ideograph */ + [0x8b38, 0x8b38], /* CJK Ideograph */ + [0x8b39, 0x8b39], /* CJK Ideograph */ + [0x8b3a, 0x8b3a], /* CJK Ideograph */ + [0x8b3b, 0x8b3b], /* CJK Ideograph */ + [0x8b3c, 0x8b3c], /* CJK Ideograph */ + [0x8b3d, 0x8b3d], /* CJK Ideograph */ + [0x8b3e, 0x8b3e], /* CJK Ideograph */ + [0x8b3f, 0x8b3f], /* CJK Ideograph */ + [0x8b40, 0x8b40], /* CJK Ideograph */ + [0x8b41, 0x8b41], /* CJK Ideograph */ + [0x8b42, 0x8b42], /* CJK Ideograph */ + [0x8b43, 0x8b43], /* CJK Ideograph */ + [0x8b44, 0x8b44], /* CJK Ideograph */ + [0x8b45, 0x8b45], /* CJK Ideograph */ + [0x8b46, 0x8b46], /* CJK Ideograph */ + [0x8b47, 0x8b47], /* CJK Ideograph */ + [0x8b48, 0x8b48], /* CJK Ideograph */ + [0x8b49, 0x8b49], /* CJK Ideograph */ + [0x8b4a, 0x8b4a], /* CJK Ideograph */ + [0x8b4b, 0x8b4b], /* CJK Ideograph */ + [0x8b4c, 0x8b4c], /* CJK Ideograph */ + [0x8b4d, 0x8b4d], /* CJK Ideograph */ + [0x8b4e, 0x8b4e], /* CJK Ideograph */ + [0x8b4f, 0x8b4f], /* CJK Ideograph */ + [0x8b50, 0x8b50], /* CJK Ideograph */ + [0x8b51, 0x8b51], /* CJK Ideograph */ + [0x8b52, 0x8b52], /* CJK Ideograph */ + [0x8b53, 0x8b53], /* CJK Ideograph */ + [0x8b54, 0x8b54], /* CJK Ideograph */ + [0x8b55, 0x8b55], /* CJK Ideograph */ + [0x8b56, 0x8b56], /* CJK Ideograph */ + [0x8b57, 0x8b57], /* CJK Ideograph */ + [0x8b58, 0x8b58], /* CJK Ideograph */ + [0x8b59, 0x8b59], /* CJK Ideograph */ + [0x8b5a, 0x8b5a], /* CJK Ideograph */ + [0x8b5b, 0x8b5b], /* CJK Ideograph */ + [0x8b5c, 0x8b5c], /* CJK Ideograph */ + [0x8b5d, 0x8b5d], /* CJK Ideograph */ + [0x8b5e, 0x8b5e], /* CJK Ideograph */ + [0x8b5f, 0x8b5f], /* CJK Ideograph */ + [0x8b60, 0x8b60], /* CJK Ideograph */ + [0x8b61, 0x8b61], /* CJK Ideograph */ + [0x8b62, 0x8b62], /* CJK Ideograph */ + [0x8b63, 0x8b63], /* CJK Ideograph */ + [0x8b64, 0x8b64], /* CJK Ideograph */ + [0x8b65, 0x8b65], /* CJK Ideograph */ + [0x8b66, 0x8b66], /* CJK Ideograph */ + [0x8b67, 0x8b67], /* CJK Ideograph */ + [0x8b68, 0x8b68], /* CJK Ideograph */ + [0x8b69, 0x8b69], /* CJK Ideograph */ + [0x8b6a, 0x8b6a], /* CJK Ideograph */ + [0x8b6b, 0x8b6b], /* CJK Ideograph */ + [0x8b6c, 0x8b6c], /* CJK Ideograph */ + [0x8b6d, 0x8b6d], /* CJK Ideograph */ + [0x8b6e, 0x8b6e], /* CJK Ideograph */ + [0x8b6f, 0x8b6f], /* CJK Ideograph */ + [0x8b70, 0x8b70], /* CJK Ideograph */ + [0x8b71, 0x8b71], /* CJK Ideograph */ + [0x8b72, 0x8b72], /* CJK Ideograph */ + [0x8b73, 0x8b73], /* CJK Ideograph */ + [0x8b74, 0x8b74], /* CJK Ideograph */ + [0x8b75, 0x8b75], /* CJK Ideograph */ + [0x8b76, 0x8b76], /* CJK Ideograph */ + [0x8b77, 0x8b77], /* CJK Ideograph */ + [0x8b78, 0x8b78], /* CJK Ideograph */ + [0x8b79, 0x8b79], /* CJK Ideograph */ + [0x8b7a, 0x8b7a], /* CJK Ideograph */ + [0x8b7b, 0x8b7b], /* CJK Ideograph */ + [0x8b7c, 0x8b7c], /* CJK Ideograph */ + [0x8b7d, 0x8b7d], /* CJK Ideograph */ + [0x8b7e, 0x8b7e], /* CJK Ideograph */ + [0x8b7f, 0x8b7f], /* CJK Ideograph */ + [0x8b80, 0x8b80], /* CJK Ideograph */ + [0x8b81, 0x8b81], /* CJK Ideograph */ + [0x8b82, 0x8b82], /* CJK Ideograph */ + [0x8b83, 0x8b83], /* CJK Ideograph */ + [0x8b84, 0x8b84], /* CJK Ideograph */ + [0x8b85, 0x8b85], /* CJK Ideograph */ + [0x8b86, 0x8b86], /* CJK Ideograph */ + [0x8b87, 0x8b87], /* CJK Ideograph */ + [0x8b88, 0x8b88], /* CJK Ideograph */ + [0x8b89, 0x8b89], /* CJK Ideograph */ + [0x8b8a, 0x8b8a], /* CJK Ideograph */ + [0x8b8b, 0x8b8b], /* CJK Ideograph */ + [0x8b8c, 0x8b8c], /* CJK Ideograph */ + [0x8b8d, 0x8b8d], /* CJK Ideograph */ + [0x8b8e, 0x8b8e], /* CJK Ideograph */ + [0x8b8f, 0x8b8f], /* CJK Ideograph */ + [0x8b90, 0x8b90], /* CJK Ideograph */ + [0x8b91, 0x8b91], /* CJK Ideograph */ + [0x8b92, 0x8b92], /* CJK Ideograph */ + [0x8b93, 0x8b93], /* CJK Ideograph */ + [0x8b94, 0x8b94], /* CJK Ideograph */ + [0x8b95, 0x8b95], /* CJK Ideograph */ + [0x8b96, 0x8b96], /* CJK Ideograph */ + [0x8b97, 0x8b97], /* CJK Ideograph */ + [0x8b98, 0x8b98], /* CJK Ideograph */ + [0x8b99, 0x8b99], /* CJK Ideograph */ + [0x8b9a, 0x8b9a], /* CJK Ideograph */ + [0x8b9b, 0x8b9b], /* CJK Ideograph */ + [0x8b9c, 0x8b9c], /* CJK Ideograph */ + [0x8b9d, 0x8b9d], /* CJK Ideograph */ + [0x8b9e, 0x8b9e], /* CJK Ideograph */ + [0x8b9f, 0x8b9f], /* CJK Ideograph */ + [0x8ba0, 0x8ba0], /* CJK Ideograph */ + [0x8ba1, 0x8ba1], /* CJK Ideograph */ + [0x8ba2, 0x8ba2], /* CJK Ideograph */ + [0x8ba3, 0x8ba3], /* CJK Ideograph */ + [0x8ba4, 0x8ba4], /* CJK Ideograph */ + [0x8ba5, 0x8ba5], /* CJK Ideograph */ + [0x8ba6, 0x8ba6], /* CJK Ideograph */ + [0x8ba7, 0x8ba7], /* CJK Ideograph */ + [0x8ba8, 0x8ba8], /* CJK Ideograph */ + [0x8ba9, 0x8ba9], /* CJK Ideograph */ + [0x8baa, 0x8baa], /* CJK Ideograph */ + [0x8bab, 0x8bab], /* CJK Ideograph */ + [0x8bac, 0x8bac], /* CJK Ideograph */ + [0x8bad, 0x8bad], /* CJK Ideograph */ + [0x8bae, 0x8bae], /* CJK Ideograph */ + [0x8baf, 0x8baf], /* CJK Ideograph */ + [0x8bb0, 0x8bb0], /* CJK Ideograph */ + [0x8bb1, 0x8bb1], /* CJK Ideograph */ + [0x8bb2, 0x8bb2], /* CJK Ideograph */ + [0x8bb3, 0x8bb3], /* CJK Ideograph */ + [0x8bb4, 0x8bb4], /* CJK Ideograph */ + [0x8bb5, 0x8bb5], /* CJK Ideograph */ + [0x8bb6, 0x8bb6], /* CJK Ideograph */ + [0x8bb7, 0x8bb7], /* CJK Ideograph */ + [0x8bb8, 0x8bb8], /* CJK Ideograph */ + [0x8bb9, 0x8bb9], /* CJK Ideograph */ + [0x8bba, 0x8bba], /* CJK Ideograph */ + [0x8bbb, 0x8bbb], /* CJK Ideograph */ + [0x8bbc, 0x8bbc], /* CJK Ideograph */ + [0x8bbd, 0x8bbd], /* CJK Ideograph */ + [0x8bbe, 0x8bbe], /* CJK Ideograph */ + [0x8bbf, 0x8bbf], /* CJK Ideograph */ + [0x8bc0, 0x8bc0], /* CJK Ideograph */ + [0x8bc1, 0x8bc1], /* CJK Ideograph */ + [0x8bc2, 0x8bc2], /* CJK Ideograph */ + [0x8bc3, 0x8bc3], /* CJK Ideograph */ + [0x8bc4, 0x8bc4], /* CJK Ideograph */ + [0x8bc5, 0x8bc5], /* CJK Ideograph */ + [0x8bc6, 0x8bc6], /* CJK Ideograph */ + [0x8bc7, 0x8bc7], /* CJK Ideograph */ + [0x8bc8, 0x8bc8], /* CJK Ideograph */ + [0x8bc9, 0x8bc9], /* CJK Ideograph */ + [0x8bca, 0x8bca], /* CJK Ideograph */ + [0x8bcb, 0x8bcb], /* CJK Ideograph */ + [0x8bcc, 0x8bcc], /* CJK Ideograph */ + [0x8bcd, 0x8bcd], /* CJK Ideograph */ + [0x8bce, 0x8bce], /* CJK Ideograph */ + [0x8bcf, 0x8bcf], /* CJK Ideograph */ + [0x8bd0, 0x8bd0], /* CJK Ideograph */ + [0x8bd1, 0x8bd1], /* CJK Ideograph */ + [0x8bd2, 0x8bd2], /* CJK Ideograph */ + [0x8bd3, 0x8bd3], /* CJK Ideograph */ + [0x8bd4, 0x8bd4], /* CJK Ideograph */ + [0x8bd5, 0x8bd5], /* CJK Ideograph */ + [0x8bd6, 0x8bd6], /* CJK Ideograph */ + [0x8bd7, 0x8bd7], /* CJK Ideograph */ + [0x8bd8, 0x8bd8], /* CJK Ideograph */ + [0x8bd9, 0x8bd9], /* CJK Ideograph */ + [0x8bda, 0x8bda], /* CJK Ideograph */ + [0x8bdb, 0x8bdb], /* CJK Ideograph */ + [0x8bdc, 0x8bdc], /* CJK Ideograph */ + [0x8bdd, 0x8bdd], /* CJK Ideograph */ + [0x8bde, 0x8bde], /* CJK Ideograph */ + [0x8bdf, 0x8bdf], /* CJK Ideograph */ + [0x8be0, 0x8be0], /* CJK Ideograph */ + [0x8be1, 0x8be1], /* CJK Ideograph */ + [0x8be2, 0x8be2], /* CJK Ideograph */ + [0x8be3, 0x8be3], /* CJK Ideograph */ + [0x8be4, 0x8be4], /* CJK Ideograph */ + [0x8be5, 0x8be5], /* CJK Ideograph */ + [0x8be6, 0x8be6], /* CJK Ideograph */ + [0x8be7, 0x8be7], /* CJK Ideograph */ + [0x8be8, 0x8be8], /* CJK Ideograph */ + [0x8be9, 0x8be9], /* CJK Ideograph */ + [0x8bea, 0x8bea], /* CJK Ideograph */ + [0x8beb, 0x8beb], /* CJK Ideograph */ + [0x8bec, 0x8bec], /* CJK Ideograph */ + [0x8bed, 0x8bed], /* CJK Ideograph */ + [0x8bee, 0x8bee], /* CJK Ideograph */ + [0x8bef, 0x8bef], /* CJK Ideograph */ + [0x8bf0, 0x8bf0], /* CJK Ideograph */ + [0x8bf1, 0x8bf1], /* CJK Ideograph */ + [0x8bf2, 0x8bf2], /* CJK Ideograph */ + [0x8bf3, 0x8bf3], /* CJK Ideograph */ + [0x8bf4, 0x8bf4], /* CJK Ideograph */ + [0x8bf5, 0x8bf5], /* CJK Ideograph */ + [0x8bf6, 0x8bf6], /* CJK Ideograph */ + [0x8bf7, 0x8bf7], /* CJK Ideograph */ + [0x8bf8, 0x8bf8], /* CJK Ideograph */ + [0x8bf9, 0x8bf9], /* CJK Ideograph */ + [0x8bfa, 0x8bfa], /* CJK Ideograph */ + [0x8bfb, 0x8bfb], /* CJK Ideograph */ + [0x8bfc, 0x8bfc], /* CJK Ideograph */ + [0x8bfd, 0x8bfd], /* CJK Ideograph */ + [0x8bfe, 0x8bfe], /* CJK Ideograph */ + [0x8bff, 0x8bff], /* CJK Ideograph */ + [0x8c00, 0x8c00], /* CJK Ideograph */ + [0x8c01, 0x8c01], /* CJK Ideograph */ + [0x8c02, 0x8c02], /* CJK Ideograph */ + [0x8c03, 0x8c03], /* CJK Ideograph */ + [0x8c04, 0x8c04], /* CJK Ideograph */ + [0x8c05, 0x8c05], /* CJK Ideograph */ + [0x8c06, 0x8c06], /* CJK Ideograph */ + [0x8c07, 0x8c07], /* CJK Ideograph */ + [0x8c08, 0x8c08], /* CJK Ideograph */ + [0x8c09, 0x8c09], /* CJK Ideograph */ + [0x8c0a, 0x8c0a], /* CJK Ideograph */ + [0x8c0b, 0x8c0b], /* CJK Ideograph */ + [0x8c0c, 0x8c0c], /* CJK Ideograph */ + [0x8c0d, 0x8c0d], /* CJK Ideograph */ + [0x8c0e, 0x8c0e], /* CJK Ideograph */ + [0x8c0f, 0x8c0f], /* CJK Ideograph */ + [0x8c10, 0x8c10], /* CJK Ideograph */ + [0x8c11, 0x8c11], /* CJK Ideograph */ + [0x8c12, 0x8c12], /* CJK Ideograph */ + [0x8c13, 0x8c13], /* CJK Ideograph */ + [0x8c14, 0x8c14], /* CJK Ideograph */ + [0x8c15, 0x8c15], /* CJK Ideograph */ + [0x8c16, 0x8c16], /* CJK Ideograph */ + [0x8c17, 0x8c17], /* CJK Ideograph */ + [0x8c18, 0x8c18], /* CJK Ideograph */ + [0x8c19, 0x8c19], /* CJK Ideograph */ + [0x8c1a, 0x8c1a], /* CJK Ideograph */ + [0x8c1b, 0x8c1b], /* CJK Ideograph */ + [0x8c1c, 0x8c1c], /* CJK Ideograph */ + [0x8c1d, 0x8c1d], /* CJK Ideograph */ + [0x8c1e, 0x8c1e], /* CJK Ideograph */ + [0x8c1f, 0x8c1f], /* CJK Ideograph */ + [0x8c20, 0x8c20], /* CJK Ideograph */ + [0x8c21, 0x8c21], /* CJK Ideograph */ + [0x8c22, 0x8c22], /* CJK Ideograph */ + [0x8c23, 0x8c23], /* CJK Ideograph */ + [0x8c24, 0x8c24], /* CJK Ideograph */ + [0x8c25, 0x8c25], /* CJK Ideograph */ + [0x8c26, 0x8c26], /* CJK Ideograph */ + [0x8c27, 0x8c27], /* CJK Ideograph */ + [0x8c28, 0x8c28], /* CJK Ideograph */ + [0x8c29, 0x8c29], /* CJK Ideograph */ + [0x8c2a, 0x8c2a], /* CJK Ideograph */ + [0x8c2b, 0x8c2b], /* CJK Ideograph */ + [0x8c2c, 0x8c2c], /* CJK Ideograph */ + [0x8c2d, 0x8c2d], /* CJK Ideograph */ + [0x8c2e, 0x8c2e], /* CJK Ideograph */ + [0x8c2f, 0x8c2f], /* CJK Ideograph */ + [0x8c30, 0x8c30], /* CJK Ideograph */ + [0x8c31, 0x8c31], /* CJK Ideograph */ + [0x8c32, 0x8c32], /* CJK Ideograph */ + [0x8c33, 0x8c33], /* CJK Ideograph */ + [0x8c34, 0x8c34], /* CJK Ideograph */ + [0x8c35, 0x8c35], /* CJK Ideograph */ + [0x8c36, 0x8c36], /* CJK Ideograph */ + [0x8c37, 0x8c37], /* CJK Ideograph */ + [0x8c38, 0x8c38], /* CJK Ideograph */ + [0x8c39, 0x8c39], /* CJK Ideograph */ + [0x8c3a, 0x8c3a], /* CJK Ideograph */ + [0x8c3b, 0x8c3b], /* CJK Ideograph */ + [0x8c3c, 0x8c3c], /* CJK Ideograph */ + [0x8c3d, 0x8c3d], /* CJK Ideograph */ + [0x8c3e, 0x8c3e], /* CJK Ideograph */ + [0x8c3f, 0x8c3f], /* CJK Ideograph */ + [0x8c40, 0x8c40], /* CJK Ideograph */ + [0x8c41, 0x8c41], /* CJK Ideograph */ + [0x8c42, 0x8c42], /* CJK Ideograph */ + [0x8c43, 0x8c43], /* CJK Ideograph */ + [0x8c44, 0x8c44], /* CJK Ideograph */ + [0x8c45, 0x8c45], /* CJK Ideograph */ + [0x8c46, 0x8c46], /* CJK Ideograph */ + [0x8c47, 0x8c47], /* CJK Ideograph */ + [0x8c48, 0x8c48], /* CJK Ideograph */ + [0x8c49, 0x8c49], /* CJK Ideograph */ + [0x8c4a, 0x8c4a], /* CJK Ideograph */ + [0x8c4b, 0x8c4b], /* CJK Ideograph */ + [0x8c4c, 0x8c4c], /* CJK Ideograph */ + [0x8c4d, 0x8c4d], /* CJK Ideograph */ + [0x8c4e, 0x8c4e], /* CJK Ideograph */ + [0x8c4f, 0x8c4f], /* CJK Ideograph */ + [0x8c50, 0x8c50], /* CJK Ideograph */ + [0x8c51, 0x8c51], /* CJK Ideograph */ + [0x8c52, 0x8c52], /* CJK Ideograph */ + [0x8c53, 0x8c53], /* CJK Ideograph */ + [0x8c54, 0x8c54], /* CJK Ideograph */ + [0x8c55, 0x8c55], /* CJK Ideograph */ + [0x8c56, 0x8c56], /* CJK Ideograph */ + [0x8c57, 0x8c57], /* CJK Ideograph */ + [0x8c58, 0x8c58], /* CJK Ideograph */ + [0x8c59, 0x8c59], /* CJK Ideograph */ + [0x8c5a, 0x8c5a], /* CJK Ideograph */ + [0x8c5b, 0x8c5b], /* CJK Ideograph */ + [0x8c5c, 0x8c5c], /* CJK Ideograph */ + [0x8c5d, 0x8c5d], /* CJK Ideograph */ + [0x8c5e, 0x8c5e], /* CJK Ideograph */ + [0x8c5f, 0x8c5f], /* CJK Ideograph */ + [0x8c60, 0x8c60], /* CJK Ideograph */ + [0x8c61, 0x8c61], /* CJK Ideograph */ + [0x8c62, 0x8c62], /* CJK Ideograph */ + [0x8c63, 0x8c63], /* CJK Ideograph */ + [0x8c64, 0x8c64], /* CJK Ideograph */ + [0x8c65, 0x8c65], /* CJK Ideograph */ + [0x8c66, 0x8c66], /* CJK Ideograph */ + [0x8c67, 0x8c67], /* CJK Ideograph */ + [0x8c68, 0x8c68], /* CJK Ideograph */ + [0x8c69, 0x8c69], /* CJK Ideograph */ + [0x8c6a, 0x8c6a], /* CJK Ideograph */ + [0x8c6b, 0x8c6b], /* CJK Ideograph */ + [0x8c6c, 0x8c6c], /* CJK Ideograph */ + [0x8c6d, 0x8c6d], /* CJK Ideograph */ + [0x8c6e, 0x8c6e], /* CJK Ideograph */ + [0x8c6f, 0x8c6f], /* CJK Ideograph */ + [0x8c70, 0x8c70], /* CJK Ideograph */ + [0x8c71, 0x8c71], /* CJK Ideograph */ + [0x8c72, 0x8c72], /* CJK Ideograph */ + [0x8c73, 0x8c73], /* CJK Ideograph */ + [0x8c74, 0x8c74], /* CJK Ideograph */ + [0x8c75, 0x8c75], /* CJK Ideograph */ + [0x8c76, 0x8c76], /* CJK Ideograph */ + [0x8c77, 0x8c77], /* CJK Ideograph */ + [0x8c78, 0x8c78], /* CJK Ideograph */ + [0x8c79, 0x8c79], /* CJK Ideograph */ + [0x8c7a, 0x8c7a], /* CJK Ideograph */ + [0x8c7b, 0x8c7b], /* CJK Ideograph */ + [0x8c7c, 0x8c7c], /* CJK Ideograph */ + [0x8c7d, 0x8c7d], /* CJK Ideograph */ + [0x8c7e, 0x8c7e], /* CJK Ideograph */ + [0x8c7f, 0x8c7f], /* CJK Ideograph */ + [0x8c80, 0x8c80], /* CJK Ideograph */ + [0x8c81, 0x8c81], /* CJK Ideograph */ + [0x8c82, 0x8c82], /* CJK Ideograph */ + [0x8c83, 0x8c83], /* CJK Ideograph */ + [0x8c84, 0x8c84], /* CJK Ideograph */ + [0x8c85, 0x8c85], /* CJK Ideograph */ + [0x8c86, 0x8c86], /* CJK Ideograph */ + [0x8c87, 0x8c87], /* CJK Ideograph */ + [0x8c88, 0x8c88], /* CJK Ideograph */ + [0x8c89, 0x8c89], /* CJK Ideograph */ + [0x8c8a, 0x8c8a], /* CJK Ideograph */ + [0x8c8b, 0x8c8b], /* CJK Ideograph */ + [0x8c8c, 0x8c8c], /* CJK Ideograph */ + [0x8c8d, 0x8c8d], /* CJK Ideograph */ + [0x8c8e, 0x8c8e], /* CJK Ideograph */ + [0x8c8f, 0x8c8f], /* CJK Ideograph */ + [0x8c90, 0x8c90], /* CJK Ideograph */ + [0x8c91, 0x8c91], /* CJK Ideograph */ + [0x8c92, 0x8c92], /* CJK Ideograph */ + [0x8c93, 0x8c93], /* CJK Ideograph */ + [0x8c94, 0x8c94], /* CJK Ideograph */ + [0x8c95, 0x8c95], /* CJK Ideograph */ + [0x8c96, 0x8c96], /* CJK Ideograph */ + [0x8c97, 0x8c97], /* CJK Ideograph */ + [0x8c98, 0x8c98], /* CJK Ideograph */ + [0x8c99, 0x8c99], /* CJK Ideograph */ + [0x8c9a, 0x8c9a], /* CJK Ideograph */ + [0x8c9b, 0x8c9b], /* CJK Ideograph */ + [0x8c9c, 0x8c9c], /* CJK Ideograph */ + [0x8c9d, 0x8c9d], /* CJK Ideograph */ + [0x8c9e, 0x8c9e], /* CJK Ideograph */ + [0x8c9f, 0x8c9f], /* CJK Ideograph */ + [0x8ca0, 0x8ca0], /* CJK Ideograph */ + [0x8ca1, 0x8ca1], /* CJK Ideograph */ + [0x8ca2, 0x8ca2], /* CJK Ideograph */ + [0x8ca3, 0x8ca3], /* CJK Ideograph */ + [0x8ca4, 0x8ca4], /* CJK Ideograph */ + [0x8ca5, 0x8ca5], /* CJK Ideograph */ + [0x8ca6, 0x8ca6], /* CJK Ideograph */ + [0x8ca7, 0x8ca7], /* CJK Ideograph */ + [0x8ca8, 0x8ca8], /* CJK Ideograph */ + [0x8ca9, 0x8ca9], /* CJK Ideograph */ + [0x8caa, 0x8caa], /* CJK Ideograph */ + [0x8cab, 0x8cab], /* CJK Ideograph */ + [0x8cac, 0x8cac], /* CJK Ideograph */ + [0x8cad, 0x8cad], /* CJK Ideograph */ + [0x8cae, 0x8cae], /* CJK Ideograph */ + [0x8caf, 0x8caf], /* CJK Ideograph */ + [0x8cb0, 0x8cb0], /* CJK Ideograph */ + [0x8cb1, 0x8cb1], /* CJK Ideograph */ + [0x8cb2, 0x8cb2], /* CJK Ideograph */ + [0x8cb3, 0x8cb3], /* CJK Ideograph */ + [0x8cb4, 0x8cb4], /* CJK Ideograph */ + [0x8cb5, 0x8cb5], /* CJK Ideograph */ + [0x8cb6, 0x8cb6], /* CJK Ideograph */ + [0x8cb7, 0x8cb7], /* CJK Ideograph */ + [0x8cb8, 0x8cb8], /* CJK Ideograph */ + [0x8cb9, 0x8cb9], /* CJK Ideograph */ + [0x8cba, 0x8cba], /* CJK Ideograph */ + [0x8cbb, 0x8cbb], /* CJK Ideograph */ + [0x8cbc, 0x8cbc], /* CJK Ideograph */ + [0x8cbd, 0x8cbd], /* CJK Ideograph */ + [0x8cbe, 0x8cbe], /* CJK Ideograph */ + [0x8cbf, 0x8cbf], /* CJK Ideograph */ + [0x8cc0, 0x8cc0], /* CJK Ideograph */ + [0x8cc1, 0x8cc1], /* CJK Ideograph */ + [0x8cc2, 0x8cc2], /* CJK Ideograph */ + [0x8cc3, 0x8cc3], /* CJK Ideograph */ + [0x8cc4, 0x8cc4], /* CJK Ideograph */ + [0x8cc5, 0x8cc5], /* CJK Ideograph */ + [0x8cc6, 0x8cc6], /* CJK Ideograph */ + [0x8cc7, 0x8cc7], /* CJK Ideograph */ + [0x8cc8, 0x8cc8], /* CJK Ideograph */ + [0x8cc9, 0x8cc9], /* CJK Ideograph */ + [0x8cca, 0x8cca], /* CJK Ideograph */ + [0x8ccb, 0x8ccb], /* CJK Ideograph */ + [0x8ccc, 0x8ccc], /* CJK Ideograph */ + [0x8ccd, 0x8ccd], /* CJK Ideograph */ + [0x8cce, 0x8cce], /* CJK Ideograph */ + [0x8ccf, 0x8ccf], /* CJK Ideograph */ + [0x8cd0, 0x8cd0], /* CJK Ideograph */ + [0x8cd1, 0x8cd1], /* CJK Ideograph */ + [0x8cd2, 0x8cd2], /* CJK Ideograph */ + [0x8cd3, 0x8cd3], /* CJK Ideograph */ + [0x8cd4, 0x8cd4], /* CJK Ideograph */ + [0x8cd5, 0x8cd5], /* CJK Ideograph */ + [0x8cd6, 0x8cd6], /* CJK Ideograph */ + [0x8cd7, 0x8cd7], /* CJK Ideograph */ + [0x8cd8, 0x8cd8], /* CJK Ideograph */ + [0x8cd9, 0x8cd9], /* CJK Ideograph */ + [0x8cda, 0x8cda], /* CJK Ideograph */ + [0x8cdb, 0x8cdb], /* CJK Ideograph */ + [0x8cdc, 0x8cdc], /* CJK Ideograph */ + [0x8cdd, 0x8cdd], /* CJK Ideograph */ + [0x8cde, 0x8cde], /* CJK Ideograph */ + [0x8cdf, 0x8cdf], /* CJK Ideograph */ + [0x8ce0, 0x8ce0], /* CJK Ideograph */ + [0x8ce1, 0x8ce1], /* CJK Ideograph */ + [0x8ce2, 0x8ce2], /* CJK Ideograph */ + [0x8ce3, 0x8ce3], /* CJK Ideograph */ + [0x8ce4, 0x8ce4], /* CJK Ideograph */ + [0x8ce5, 0x8ce5], /* CJK Ideograph */ + [0x8ce6, 0x8ce6], /* CJK Ideograph */ + [0x8ce7, 0x8ce7], /* CJK Ideograph */ + [0x8ce8, 0x8ce8], /* CJK Ideograph */ + [0x8ce9, 0x8ce9], /* CJK Ideograph */ + [0x8cea, 0x8cea], /* CJK Ideograph */ + [0x8ceb, 0x8ceb], /* CJK Ideograph */ + [0x8cec, 0x8cec], /* CJK Ideograph */ + [0x8ced, 0x8ced], /* CJK Ideograph */ + [0x8cee, 0x8cee], /* CJK Ideograph */ + [0x8cef, 0x8cef], /* CJK Ideograph */ + [0x8cf0, 0x8cf0], /* CJK Ideograph */ + [0x8cf1, 0x8cf1], /* CJK Ideograph */ + [0x8cf2, 0x8cf2], /* CJK Ideograph */ + [0x8cf3, 0x8cf3], /* CJK Ideograph */ + [0x8cf4, 0x8cf4], /* CJK Ideograph */ + [0x8cf5, 0x8cf5], /* CJK Ideograph */ + [0x8cf6, 0x8cf6], /* CJK Ideograph */ + [0x8cf7, 0x8cf7], /* CJK Ideograph */ + [0x8cf8, 0x8cf8], /* CJK Ideograph */ + [0x8cf9, 0x8cf9], /* CJK Ideograph */ + [0x8cfa, 0x8cfa], /* CJK Ideograph */ + [0x8cfb, 0x8cfb], /* CJK Ideograph */ + [0x8cfc, 0x8cfc], /* CJK Ideograph */ + [0x8cfd, 0x8cfd], /* CJK Ideograph */ + [0x8cfe, 0x8cfe], /* CJK Ideograph */ + [0x8cff, 0x8cff], /* CJK Ideograph */ + [0x8d00, 0x8d00], /* CJK Ideograph */ + [0x8d01, 0x8d01], /* CJK Ideograph */ + [0x8d02, 0x8d02], /* CJK Ideograph */ + [0x8d03, 0x8d03], /* CJK Ideograph */ + [0x8d04, 0x8d04], /* CJK Ideograph */ + [0x8d05, 0x8d05], /* CJK Ideograph */ + [0x8d06, 0x8d06], /* CJK Ideograph */ + [0x8d07, 0x8d07], /* CJK Ideograph */ + [0x8d08, 0x8d08], /* CJK Ideograph */ + [0x8d09, 0x8d09], /* CJK Ideograph */ + [0x8d0a, 0x8d0a], /* CJK Ideograph */ + [0x8d0b, 0x8d0b], /* CJK Ideograph */ + [0x8d0c, 0x8d0c], /* CJK Ideograph */ + [0x8d0d, 0x8d0d], /* CJK Ideograph */ + [0x8d0e, 0x8d0e], /* CJK Ideograph */ + [0x8d0f, 0x8d0f], /* CJK Ideograph */ + [0x8d10, 0x8d10], /* CJK Ideograph */ + [0x8d11, 0x8d11], /* CJK Ideograph */ + [0x8d12, 0x8d12], /* CJK Ideograph */ + [0x8d13, 0x8d13], /* CJK Ideograph */ + [0x8d14, 0x8d14], /* CJK Ideograph */ + [0x8d15, 0x8d15], /* CJK Ideograph */ + [0x8d16, 0x8d16], /* CJK Ideograph */ + [0x8d17, 0x8d17], /* CJK Ideograph */ + [0x8d18, 0x8d18], /* CJK Ideograph */ + [0x8d19, 0x8d19], /* CJK Ideograph */ + [0x8d1a, 0x8d1a], /* CJK Ideograph */ + [0x8d1b, 0x8d1b], /* CJK Ideograph */ + [0x8d1c, 0x8d1c], /* CJK Ideograph */ + [0x8d1d, 0x8d1d], /* CJK Ideograph */ + [0x8d1e, 0x8d1e], /* CJK Ideograph */ + [0x8d1f, 0x8d1f], /* CJK Ideograph */ + [0x8d20, 0x8d20], /* CJK Ideograph */ + [0x8d21, 0x8d21], /* CJK Ideograph */ + [0x8d22, 0x8d22], /* CJK Ideograph */ + [0x8d23, 0x8d23], /* CJK Ideograph */ + [0x8d24, 0x8d24], /* CJK Ideograph */ + [0x8d25, 0x8d25], /* CJK Ideograph */ + [0x8d26, 0x8d26], /* CJK Ideograph */ + [0x8d27, 0x8d27], /* CJK Ideograph */ + [0x8d28, 0x8d28], /* CJK Ideograph */ + [0x8d29, 0x8d29], /* CJK Ideograph */ + [0x8d2a, 0x8d2a], /* CJK Ideograph */ + [0x8d2b, 0x8d2b], /* CJK Ideograph */ + [0x8d2c, 0x8d2c], /* CJK Ideograph */ + [0x8d2d, 0x8d2d], /* CJK Ideograph */ + [0x8d2e, 0x8d2e], /* CJK Ideograph */ + [0x8d2f, 0x8d2f], /* CJK Ideograph */ + [0x8d30, 0x8d30], /* CJK Ideograph */ + [0x8d31, 0x8d31], /* CJK Ideograph */ + [0x8d32, 0x8d32], /* CJK Ideograph */ + [0x8d33, 0x8d33], /* CJK Ideograph */ + [0x8d34, 0x8d34], /* CJK Ideograph */ + [0x8d35, 0x8d35], /* CJK Ideograph */ + [0x8d36, 0x8d36], /* CJK Ideograph */ + [0x8d37, 0x8d37], /* CJK Ideograph */ + [0x8d38, 0x8d38], /* CJK Ideograph */ + [0x8d39, 0x8d39], /* CJK Ideograph */ + [0x8d3a, 0x8d3a], /* CJK Ideograph */ + [0x8d3b, 0x8d3b], /* CJK Ideograph */ + [0x8d3c, 0x8d3c], /* CJK Ideograph */ + [0x8d3d, 0x8d3d], /* CJK Ideograph */ + [0x8d3e, 0x8d3e], /* CJK Ideograph */ + [0x8d3f, 0x8d3f], /* CJK Ideograph */ + [0x8d40, 0x8d40], /* CJK Ideograph */ + [0x8d41, 0x8d41], /* CJK Ideograph */ + [0x8d42, 0x8d42], /* CJK Ideograph */ + [0x8d43, 0x8d43], /* CJK Ideograph */ + [0x8d44, 0x8d44], /* CJK Ideograph */ + [0x8d45, 0x8d45], /* CJK Ideograph */ + [0x8d46, 0x8d46], /* CJK Ideograph */ + [0x8d47, 0x8d47], /* CJK Ideograph */ + [0x8d48, 0x8d48], /* CJK Ideograph */ + [0x8d49, 0x8d49], /* CJK Ideograph */ + [0x8d4a, 0x8d4a], /* CJK Ideograph */ + [0x8d4b, 0x8d4b], /* CJK Ideograph */ + [0x8d4c, 0x8d4c], /* CJK Ideograph */ + [0x8d4d, 0x8d4d], /* CJK Ideograph */ + [0x8d4e, 0x8d4e], /* CJK Ideograph */ + [0x8d4f, 0x8d4f], /* CJK Ideograph */ + [0x8d50, 0x8d50], /* CJK Ideograph */ + [0x8d51, 0x8d51], /* CJK Ideograph */ + [0x8d52, 0x8d52], /* CJK Ideograph */ + [0x8d53, 0x8d53], /* CJK Ideograph */ + [0x8d54, 0x8d54], /* CJK Ideograph */ + [0x8d55, 0x8d55], /* CJK Ideograph */ + [0x8d56, 0x8d56], /* CJK Ideograph */ + [0x8d57, 0x8d57], /* CJK Ideograph */ + [0x8d58, 0x8d58], /* CJK Ideograph */ + [0x8d59, 0x8d59], /* CJK Ideograph */ + [0x8d5a, 0x8d5a], /* CJK Ideograph */ + [0x8d5b, 0x8d5b], /* CJK Ideograph */ + [0x8d5c, 0x8d5c], /* CJK Ideograph */ + [0x8d5d, 0x8d5d], /* CJK Ideograph */ + [0x8d5e, 0x8d5e], /* CJK Ideograph */ + [0x8d5f, 0x8d5f], /* CJK Ideograph */ + [0x8d60, 0x8d60], /* CJK Ideograph */ + [0x8d61, 0x8d61], /* CJK Ideograph */ + [0x8d62, 0x8d62], /* CJK Ideograph */ + [0x8d63, 0x8d63], /* CJK Ideograph */ + [0x8d64, 0x8d64], /* CJK Ideograph */ + [0x8d65, 0x8d65], /* CJK Ideograph */ + [0x8d66, 0x8d66], /* CJK Ideograph */ + [0x8d67, 0x8d67], /* CJK Ideograph */ + [0x8d68, 0x8d68], /* CJK Ideograph */ + [0x8d69, 0x8d69], /* CJK Ideograph */ + [0x8d6a, 0x8d6a], /* CJK Ideograph */ + [0x8d6b, 0x8d6b], /* CJK Ideograph */ + [0x8d6c, 0x8d6c], /* CJK Ideograph */ + [0x8d6d, 0x8d6d], /* CJK Ideograph */ + [0x8d6e, 0x8d6e], /* CJK Ideograph */ + [0x8d6f, 0x8d6f], /* CJK Ideograph */ + [0x8d70, 0x8d70], /* CJK Ideograph */ + [0x8d71, 0x8d71], /* CJK Ideograph */ + [0x8d72, 0x8d72], /* CJK Ideograph */ + [0x8d73, 0x8d73], /* CJK Ideograph */ + [0x8d74, 0x8d74], /* CJK Ideograph */ + [0x8d75, 0x8d75], /* CJK Ideograph */ + [0x8d76, 0x8d76], /* CJK Ideograph */ + [0x8d77, 0x8d77], /* CJK Ideograph */ + [0x8d78, 0x8d78], /* CJK Ideograph */ + [0x8d79, 0x8d79], /* CJK Ideograph */ + [0x8d7a, 0x8d7a], /* CJK Ideograph */ + [0x8d7b, 0x8d7b], /* CJK Ideograph */ + [0x8d7c, 0x8d7c], /* CJK Ideograph */ + [0x8d7d, 0x8d7d], /* CJK Ideograph */ + [0x8d7e, 0x8d7e], /* CJK Ideograph */ + [0x8d7f, 0x8d7f], /* CJK Ideograph */ + [0x8d80, 0x8d80], /* CJK Ideograph */ + [0x8d81, 0x8d81], /* CJK Ideograph */ + [0x8d82, 0x8d82], /* CJK Ideograph */ + [0x8d83, 0x8d83], /* CJK Ideograph */ + [0x8d84, 0x8d84], /* CJK Ideograph */ + [0x8d85, 0x8d85], /* CJK Ideograph */ + [0x8d86, 0x8d86], /* CJK Ideograph */ + [0x8d87, 0x8d87], /* CJK Ideograph */ + [0x8d88, 0x8d88], /* CJK Ideograph */ + [0x8d89, 0x8d89], /* CJK Ideograph */ + [0x8d8a, 0x8d8a], /* CJK Ideograph */ + [0x8d8b, 0x8d8b], /* CJK Ideograph */ + [0x8d8c, 0x8d8c], /* CJK Ideograph */ + [0x8d8d, 0x8d8d], /* CJK Ideograph */ + [0x8d8e, 0x8d8e], /* CJK Ideograph */ + [0x8d8f, 0x8d8f], /* CJK Ideograph */ + [0x8d90, 0x8d90], /* CJK Ideograph */ + [0x8d91, 0x8d91], /* CJK Ideograph */ + [0x8d92, 0x8d92], /* CJK Ideograph */ + [0x8d93, 0x8d93], /* CJK Ideograph */ + [0x8d94, 0x8d94], /* CJK Ideograph */ + [0x8d95, 0x8d95], /* CJK Ideograph */ + [0x8d96, 0x8d96], /* CJK Ideograph */ + [0x8d97, 0x8d97], /* CJK Ideograph */ + [0x8d98, 0x8d98], /* CJK Ideograph */ + [0x8d99, 0x8d99], /* CJK Ideograph */ + [0x8d9a, 0x8d9a], /* CJK Ideograph */ + [0x8d9b, 0x8d9b], /* CJK Ideograph */ + [0x8d9c, 0x8d9c], /* CJK Ideograph */ + [0x8d9d, 0x8d9d], /* CJK Ideograph */ + [0x8d9e, 0x8d9e], /* CJK Ideograph */ + [0x8d9f, 0x8d9f], /* CJK Ideograph */ + [0x8da0, 0x8da0], /* CJK Ideograph */ + [0x8da1, 0x8da1], /* CJK Ideograph */ + [0x8da2, 0x8da2], /* CJK Ideograph */ + [0x8da3, 0x8da3], /* CJK Ideograph */ + [0x8da4, 0x8da4], /* CJK Ideograph */ + [0x8da5, 0x8da5], /* CJK Ideograph */ + [0x8da6, 0x8da6], /* CJK Ideograph */ + [0x8da7, 0x8da7], /* CJK Ideograph */ + [0x8da8, 0x8da8], /* CJK Ideograph */ + [0x8da9, 0x8da9], /* CJK Ideograph */ + [0x8daa, 0x8daa], /* CJK Ideograph */ + [0x8dab, 0x8dab], /* CJK Ideograph */ + [0x8dac, 0x8dac], /* CJK Ideograph */ + [0x8dad, 0x8dad], /* CJK Ideograph */ + [0x8dae, 0x8dae], /* CJK Ideograph */ + [0x8daf, 0x8daf], /* CJK Ideograph */ + [0x8db0, 0x8db0], /* CJK Ideograph */ + [0x8db1, 0x8db1], /* CJK Ideograph */ + [0x8db2, 0x8db2], /* CJK Ideograph */ + [0x8db3, 0x8db3], /* CJK Ideograph */ + [0x8db4, 0x8db4], /* CJK Ideograph */ + [0x8db5, 0x8db5], /* CJK Ideograph */ + [0x8db6, 0x8db6], /* CJK Ideograph */ + [0x8db7, 0x8db7], /* CJK Ideograph */ + [0x8db8, 0x8db8], /* CJK Ideograph */ + [0x8db9, 0x8db9], /* CJK Ideograph */ + [0x8dba, 0x8dba], /* CJK Ideograph */ + [0x8dbb, 0x8dbb], /* CJK Ideograph */ + [0x8dbc, 0x8dbc], /* CJK Ideograph */ + [0x8dbd, 0x8dbd], /* CJK Ideograph */ + [0x8dbe, 0x8dbe], /* CJK Ideograph */ + [0x8dbf, 0x8dbf], /* CJK Ideograph */ + [0x8dc0, 0x8dc0], /* CJK Ideograph */ + [0x8dc1, 0x8dc1], /* CJK Ideograph */ + [0x8dc2, 0x8dc2], /* CJK Ideograph */ + [0x8dc3, 0x8dc3], /* CJK Ideograph */ + [0x8dc4, 0x8dc4], /* CJK Ideograph */ + [0x8dc5, 0x8dc5], /* CJK Ideograph */ + [0x8dc6, 0x8dc6], /* CJK Ideograph */ + [0x8dc7, 0x8dc7], /* CJK Ideograph */ + [0x8dc8, 0x8dc8], /* CJK Ideograph */ + [0x8dc9, 0x8dc9], /* CJK Ideograph */ + [0x8dca, 0x8dca], /* CJK Ideograph */ + [0x8dcb, 0x8dcb], /* CJK Ideograph */ + [0x8dcc, 0x8dcc], /* CJK Ideograph */ + [0x8dcd, 0x8dcd], /* CJK Ideograph */ + [0x8dce, 0x8dce], /* CJK Ideograph */ + [0x8dcf, 0x8dcf], /* CJK Ideograph */ + [0x8dd0, 0x8dd0], /* CJK Ideograph */ + [0x8dd1, 0x8dd1], /* CJK Ideograph */ + [0x8dd2, 0x8dd2], /* CJK Ideograph */ + [0x8dd3, 0x8dd3], /* CJK Ideograph */ + [0x8dd4, 0x8dd4], /* CJK Ideograph */ + [0x8dd5, 0x8dd5], /* CJK Ideograph */ + [0x8dd6, 0x8dd6], /* CJK Ideograph */ + [0x8dd7, 0x8dd7], /* CJK Ideograph */ + [0x8dd8, 0x8dd8], /* CJK Ideograph */ + [0x8dd9, 0x8dd9], /* CJK Ideograph */ + [0x8dda, 0x8dda], /* CJK Ideograph */ + [0x8ddb, 0x8ddb], /* CJK Ideograph */ + [0x8ddc, 0x8ddc], /* CJK Ideograph */ + [0x8ddd, 0x8ddd], /* CJK Ideograph */ + [0x8dde, 0x8dde], /* CJK Ideograph */ + [0x8ddf, 0x8ddf], /* CJK Ideograph */ + [0x8de0, 0x8de0], /* CJK Ideograph */ + [0x8de1, 0x8de1], /* CJK Ideograph */ + [0x8de2, 0x8de2], /* CJK Ideograph */ + [0x8de3, 0x8de3], /* CJK Ideograph */ + [0x8de4, 0x8de4], /* CJK Ideograph */ + [0x8de5, 0x8de5], /* CJK Ideograph */ + [0x8de6, 0x8de6], /* CJK Ideograph */ + [0x8de7, 0x8de7], /* CJK Ideograph */ + [0x8de8, 0x8de8], /* CJK Ideograph */ + [0x8de9, 0x8de9], /* CJK Ideograph */ + [0x8dea, 0x8dea], /* CJK Ideograph */ + [0x8deb, 0x8deb], /* CJK Ideograph */ + [0x8dec, 0x8dec], /* CJK Ideograph */ + [0x8ded, 0x8ded], /* CJK Ideograph */ + [0x8dee, 0x8dee], /* CJK Ideograph */ + [0x8def, 0x8def], /* CJK Ideograph */ + [0x8df0, 0x8df0], /* CJK Ideograph */ + [0x8df1, 0x8df1], /* CJK Ideograph */ + [0x8df2, 0x8df2], /* CJK Ideograph */ + [0x8df3, 0x8df3], /* CJK Ideograph */ + [0x8df4, 0x8df4], /* CJK Ideograph */ + [0x8df5, 0x8df5], /* CJK Ideograph */ + [0x8df6, 0x8df6], /* CJK Ideograph */ + [0x8df7, 0x8df7], /* CJK Ideograph */ + [0x8df8, 0x8df8], /* CJK Ideograph */ + [0x8df9, 0x8df9], /* CJK Ideograph */ + [0x8dfa, 0x8dfa], /* CJK Ideograph */ + [0x8dfb, 0x8dfb], /* CJK Ideograph */ + [0x8dfc, 0x8dfc], /* CJK Ideograph */ + [0x8dfd, 0x8dfd], /* CJK Ideograph */ + [0x8dfe, 0x8dfe], /* CJK Ideograph */ + [0x8dff, 0x8dff], /* CJK Ideograph */ + [0x8e00, 0x8e00], /* CJK Ideograph */ + [0x8e01, 0x8e01], /* CJK Ideograph */ + [0x8e02, 0x8e02], /* CJK Ideograph */ + [0x8e03, 0x8e03], /* CJK Ideograph */ + [0x8e04, 0x8e04], /* CJK Ideograph */ + [0x8e05, 0x8e05], /* CJK Ideograph */ + [0x8e06, 0x8e06], /* CJK Ideograph */ + [0x8e07, 0x8e07], /* CJK Ideograph */ + [0x8e08, 0x8e08], /* CJK Ideograph */ + [0x8e09, 0x8e09], /* CJK Ideograph */ + [0x8e0a, 0x8e0a], /* CJK Ideograph */ + [0x8e0b, 0x8e0b], /* CJK Ideograph */ + [0x8e0c, 0x8e0c], /* CJK Ideograph */ + [0x8e0d, 0x8e0d], /* CJK Ideograph */ + [0x8e0e, 0x8e0e], /* CJK Ideograph */ + [0x8e0f, 0x8e0f], /* CJK Ideograph */ + [0x8e10, 0x8e10], /* CJK Ideograph */ + [0x8e11, 0x8e11], /* CJK Ideograph */ + [0x8e12, 0x8e12], /* CJK Ideograph */ + [0x8e13, 0x8e13], /* CJK Ideograph */ + [0x8e14, 0x8e14], /* CJK Ideograph */ + [0x8e15, 0x8e15], /* CJK Ideograph */ + [0x8e16, 0x8e16], /* CJK Ideograph */ + [0x8e17, 0x8e17], /* CJK Ideograph */ + [0x8e18, 0x8e18], /* CJK Ideograph */ + [0x8e19, 0x8e19], /* CJK Ideograph */ + [0x8e1a, 0x8e1a], /* CJK Ideograph */ + [0x8e1b, 0x8e1b], /* CJK Ideograph */ + [0x8e1c, 0x8e1c], /* CJK Ideograph */ + [0x8e1d, 0x8e1d], /* CJK Ideograph */ + [0x8e1e, 0x8e1e], /* CJK Ideograph */ + [0x8e1f, 0x8e1f], /* CJK Ideograph */ + [0x8e20, 0x8e20], /* CJK Ideograph */ + [0x8e21, 0x8e21], /* CJK Ideograph */ + [0x8e22, 0x8e22], /* CJK Ideograph */ + [0x8e23, 0x8e23], /* CJK Ideograph */ + [0x8e24, 0x8e24], /* CJK Ideograph */ + [0x8e25, 0x8e25], /* CJK Ideograph */ + [0x8e26, 0x8e26], /* CJK Ideograph */ + [0x8e27, 0x8e27], /* CJK Ideograph */ + [0x8e28, 0x8e28], /* CJK Ideograph */ + [0x8e29, 0x8e29], /* CJK Ideograph */ + [0x8e2a, 0x8e2a], /* CJK Ideograph */ + [0x8e2b, 0x8e2b], /* CJK Ideograph */ + [0x8e2c, 0x8e2c], /* CJK Ideograph */ + [0x8e2d, 0x8e2d], /* CJK Ideograph */ + [0x8e2e, 0x8e2e], /* CJK Ideograph */ + [0x8e2f, 0x8e2f], /* CJK Ideograph */ + [0x8e30, 0x8e30], /* CJK Ideograph */ + [0x8e31, 0x8e31], /* CJK Ideograph */ + [0x8e32, 0x8e32], /* CJK Ideograph */ + [0x8e33, 0x8e33], /* CJK Ideograph */ + [0x8e34, 0x8e34], /* CJK Ideograph */ + [0x8e35, 0x8e35], /* CJK Ideograph */ + [0x8e36, 0x8e36], /* CJK Ideograph */ + [0x8e37, 0x8e37], /* CJK Ideograph */ + [0x8e38, 0x8e38], /* CJK Ideograph */ + [0x8e39, 0x8e39], /* CJK Ideograph */ + [0x8e3a, 0x8e3a], /* CJK Ideograph */ + [0x8e3b, 0x8e3b], /* CJK Ideograph */ + [0x8e3c, 0x8e3c], /* CJK Ideograph */ + [0x8e3d, 0x8e3d], /* CJK Ideograph */ + [0x8e3e, 0x8e3e], /* CJK Ideograph */ + [0x8e3f, 0x8e3f], /* CJK Ideograph */ + [0x8e40, 0x8e40], /* CJK Ideograph */ + [0x8e41, 0x8e41], /* CJK Ideograph */ + [0x8e42, 0x8e42], /* CJK Ideograph */ + [0x8e43, 0x8e43], /* CJK Ideograph */ + [0x8e44, 0x8e44], /* CJK Ideograph */ + [0x8e45, 0x8e45], /* CJK Ideograph */ + [0x8e46, 0x8e46], /* CJK Ideograph */ + [0x8e47, 0x8e47], /* CJK Ideograph */ + [0x8e48, 0x8e48], /* CJK Ideograph */ + [0x8e49, 0x8e49], /* CJK Ideograph */ + [0x8e4a, 0x8e4a], /* CJK Ideograph */ + [0x8e4b, 0x8e4b], /* CJK Ideograph */ + [0x8e4c, 0x8e4c], /* CJK Ideograph */ + [0x8e4d, 0x8e4d], /* CJK Ideograph */ + [0x8e4e, 0x8e4e], /* CJK Ideograph */ + [0x8e4f, 0x8e4f], /* CJK Ideograph */ + [0x8e50, 0x8e50], /* CJK Ideograph */ + [0x8e51, 0x8e51], /* CJK Ideograph */ + [0x8e52, 0x8e52], /* CJK Ideograph */ + [0x8e53, 0x8e53], /* CJK Ideograph */ + [0x8e54, 0x8e54], /* CJK Ideograph */ + [0x8e55, 0x8e55], /* CJK Ideograph */ + [0x8e56, 0x8e56], /* CJK Ideograph */ + [0x8e57, 0x8e57], /* CJK Ideograph */ + [0x8e58, 0x8e58], /* CJK Ideograph */ + [0x8e59, 0x8e59], /* CJK Ideograph */ + [0x8e5a, 0x8e5a], /* CJK Ideograph */ + [0x8e5b, 0x8e5b], /* CJK Ideograph */ + [0x8e5c, 0x8e5c], /* CJK Ideograph */ + [0x8e5d, 0x8e5d], /* CJK Ideograph */ + [0x8e5e, 0x8e5e], /* CJK Ideograph */ + [0x8e5f, 0x8e5f], /* CJK Ideograph */ + [0x8e60, 0x8e60], /* CJK Ideograph */ + [0x8e61, 0x8e61], /* CJK Ideograph */ + [0x8e62, 0x8e62], /* CJK Ideograph */ + [0x8e63, 0x8e63], /* CJK Ideograph */ + [0x8e64, 0x8e64], /* CJK Ideograph */ + [0x8e65, 0x8e65], /* CJK Ideograph */ + [0x8e66, 0x8e66], /* CJK Ideograph */ + [0x8e67, 0x8e67], /* CJK Ideograph */ + [0x8e68, 0x8e68], /* CJK Ideograph */ + [0x8e69, 0x8e69], /* CJK Ideograph */ + [0x8e6a, 0x8e6a], /* CJK Ideograph */ + [0x8e6b, 0x8e6b], /* CJK Ideograph */ + [0x8e6c, 0x8e6c], /* CJK Ideograph */ + [0x8e6d, 0x8e6d], /* CJK Ideograph */ + [0x8e6e, 0x8e6e], /* CJK Ideograph */ + [0x8e6f, 0x8e6f], /* CJK Ideograph */ + [0x8e70, 0x8e70], /* CJK Ideograph */ + [0x8e71, 0x8e71], /* CJK Ideograph */ + [0x8e72, 0x8e72], /* CJK Ideograph */ + [0x8e73, 0x8e73], /* CJK Ideograph */ + [0x8e74, 0x8e74], /* CJK Ideograph */ + [0x8e75, 0x8e75], /* CJK Ideograph */ + [0x8e76, 0x8e76], /* CJK Ideograph */ + [0x8e77, 0x8e77], /* CJK Ideograph */ + [0x8e78, 0x8e78], /* CJK Ideograph */ + [0x8e79, 0x8e79], /* CJK Ideograph */ + [0x8e7a, 0x8e7a], /* CJK Ideograph */ + [0x8e7b, 0x8e7b], /* CJK Ideograph */ + [0x8e7c, 0x8e7c], /* CJK Ideograph */ + [0x8e7d, 0x8e7d], /* CJK Ideograph */ + [0x8e7e, 0x8e7e], /* CJK Ideograph */ + [0x8e7f, 0x8e7f], /* CJK Ideograph */ + [0x8e80, 0x8e80], /* CJK Ideograph */ + [0x8e81, 0x8e81], /* CJK Ideograph */ + [0x8e82, 0x8e82], /* CJK Ideograph */ + [0x8e83, 0x8e83], /* CJK Ideograph */ + [0x8e84, 0x8e84], /* CJK Ideograph */ + [0x8e85, 0x8e85], /* CJK Ideograph */ + [0x8e86, 0x8e86], /* CJK Ideograph */ + [0x8e87, 0x8e87], /* CJK Ideograph */ + [0x8e88, 0x8e88], /* CJK Ideograph */ + [0x8e89, 0x8e89], /* CJK Ideograph */ + [0x8e8a, 0x8e8a], /* CJK Ideograph */ + [0x8e8b, 0x8e8b], /* CJK Ideograph */ + [0x8e8c, 0x8e8c], /* CJK Ideograph */ + [0x8e8d, 0x8e8d], /* CJK Ideograph */ + [0x8e8e, 0x8e8e], /* CJK Ideograph */ + [0x8e8f, 0x8e8f], /* CJK Ideograph */ + [0x8e90, 0x8e90], /* CJK Ideograph */ + [0x8e91, 0x8e91], /* CJK Ideograph */ + [0x8e92, 0x8e92], /* CJK Ideograph */ + [0x8e93, 0x8e93], /* CJK Ideograph */ + [0x8e94, 0x8e94], /* CJK Ideograph */ + [0x8e95, 0x8e95], /* CJK Ideograph */ + [0x8e96, 0x8e96], /* CJK Ideograph */ + [0x8e97, 0x8e97], /* CJK Ideograph */ + [0x8e98, 0x8e98], /* CJK Ideograph */ + [0x8e99, 0x8e99], /* CJK Ideograph */ + [0x8e9a, 0x8e9a], /* CJK Ideograph */ + [0x8e9b, 0x8e9b], /* CJK Ideograph */ + [0x8e9c, 0x8e9c], /* CJK Ideograph */ + [0x8e9d, 0x8e9d], /* CJK Ideograph */ + [0x8e9e, 0x8e9e], /* CJK Ideograph */ + [0x8e9f, 0x8e9f], /* CJK Ideograph */ + [0x8ea0, 0x8ea0], /* CJK Ideograph */ + [0x8ea1, 0x8ea1], /* CJK Ideograph */ + [0x8ea2, 0x8ea2], /* CJK Ideograph */ + [0x8ea3, 0x8ea3], /* CJK Ideograph */ + [0x8ea4, 0x8ea4], /* CJK Ideograph */ + [0x8ea5, 0x8ea5], /* CJK Ideograph */ + [0x8ea6, 0x8ea6], /* CJK Ideograph */ + [0x8ea7, 0x8ea7], /* CJK Ideograph */ + [0x8ea8, 0x8ea8], /* CJK Ideograph */ + [0x8ea9, 0x8ea9], /* CJK Ideograph */ + [0x8eaa, 0x8eaa], /* CJK Ideograph */ + [0x8eab, 0x8eab], /* CJK Ideograph */ + [0x8eac, 0x8eac], /* CJK Ideograph */ + [0x8ead, 0x8ead], /* CJK Ideograph */ + [0x8eae, 0x8eae], /* CJK Ideograph */ + [0x8eaf, 0x8eaf], /* CJK Ideograph */ + [0x8eb0, 0x8eb0], /* CJK Ideograph */ + [0x8eb1, 0x8eb1], /* CJK Ideograph */ + [0x8eb2, 0x8eb2], /* CJK Ideograph */ + [0x8eb3, 0x8eb3], /* CJK Ideograph */ + [0x8eb4, 0x8eb4], /* CJK Ideograph */ + [0x8eb5, 0x8eb5], /* CJK Ideograph */ + [0x8eb6, 0x8eb6], /* CJK Ideograph */ + [0x8eb7, 0x8eb7], /* CJK Ideograph */ + [0x8eb8, 0x8eb8], /* CJK Ideograph */ + [0x8eb9, 0x8eb9], /* CJK Ideograph */ + [0x8eba, 0x8eba], /* CJK Ideograph */ + [0x8ebb, 0x8ebb], /* CJK Ideograph */ + [0x8ebc, 0x8ebc], /* CJK Ideograph */ + [0x8ebd, 0x8ebd], /* CJK Ideograph */ + [0x8ebe, 0x8ebe], /* CJK Ideograph */ + [0x8ebf, 0x8ebf], /* CJK Ideograph */ + [0x8ec0, 0x8ec0], /* CJK Ideograph */ + [0x8ec1, 0x8ec1], /* CJK Ideograph */ + [0x8ec2, 0x8ec2], /* CJK Ideograph */ + [0x8ec3, 0x8ec3], /* CJK Ideograph */ + [0x8ec4, 0x8ec4], /* CJK Ideograph */ + [0x8ec5, 0x8ec5], /* CJK Ideograph */ + [0x8ec6, 0x8ec6], /* CJK Ideograph */ + [0x8ec7, 0x8ec7], /* CJK Ideograph */ + [0x8ec8, 0x8ec8], /* CJK Ideograph */ + [0x8ec9, 0x8ec9], /* CJK Ideograph */ + [0x8eca, 0x8eca], /* CJK Ideograph */ + [0x8ecb, 0x8ecb], /* CJK Ideograph */ + [0x8ecc, 0x8ecc], /* CJK Ideograph */ + [0x8ecd, 0x8ecd], /* CJK Ideograph */ + [0x8ece, 0x8ece], /* CJK Ideograph */ + [0x8ecf, 0x8ecf], /* CJK Ideograph */ + [0x8ed0, 0x8ed0], /* CJK Ideograph */ + [0x8ed1, 0x8ed1], /* CJK Ideograph */ + [0x8ed2, 0x8ed2], /* CJK Ideograph */ + [0x8ed3, 0x8ed3], /* CJK Ideograph */ + [0x8ed4, 0x8ed4], /* CJK Ideograph */ + [0x8ed5, 0x8ed5], /* CJK Ideograph */ + [0x8ed6, 0x8ed6], /* CJK Ideograph */ + [0x8ed7, 0x8ed7], /* CJK Ideograph */ + [0x8ed8, 0x8ed8], /* CJK Ideograph */ + [0x8ed9, 0x8ed9], /* CJK Ideograph */ + [0x8eda, 0x8eda], /* CJK Ideograph */ + [0x8edb, 0x8edb], /* CJK Ideograph */ + [0x8edc, 0x8edc], /* CJK Ideograph */ + [0x8edd, 0x8edd], /* CJK Ideograph */ + [0x8ede, 0x8ede], /* CJK Ideograph */ + [0x8edf, 0x8edf], /* CJK Ideograph */ + [0x8ee0, 0x8ee0], /* CJK Ideograph */ + [0x8ee1, 0x8ee1], /* CJK Ideograph */ + [0x8ee2, 0x8ee2], /* CJK Ideograph */ + [0x8ee3, 0x8ee3], /* CJK Ideograph */ + [0x8ee4, 0x8ee4], /* CJK Ideograph */ + [0x8ee5, 0x8ee5], /* CJK Ideograph */ + [0x8ee6, 0x8ee6], /* CJK Ideograph */ + [0x8ee7, 0x8ee7], /* CJK Ideograph */ + [0x8ee8, 0x8ee8], /* CJK Ideograph */ + [0x8ee9, 0x8ee9], /* CJK Ideograph */ + [0x8eea, 0x8eea], /* CJK Ideograph */ + [0x8eeb, 0x8eeb], /* CJK Ideograph */ + [0x8eec, 0x8eec], /* CJK Ideograph */ + [0x8eed, 0x8eed], /* CJK Ideograph */ + [0x8eee, 0x8eee], /* CJK Ideograph */ + [0x8eef, 0x8eef], /* CJK Ideograph */ + [0x8ef0, 0x8ef0], /* CJK Ideograph */ + [0x8ef1, 0x8ef1], /* CJK Ideograph */ + [0x8ef2, 0x8ef2], /* CJK Ideograph */ + [0x8ef3, 0x8ef3], /* CJK Ideograph */ + [0x8ef4, 0x8ef4], /* CJK Ideograph */ + [0x8ef5, 0x8ef5], /* CJK Ideograph */ + [0x8ef6, 0x8ef6], /* CJK Ideograph */ + [0x8ef7, 0x8ef7], /* CJK Ideograph */ + [0x8ef8, 0x8ef8], /* CJK Ideograph */ + [0x8ef9, 0x8ef9], /* CJK Ideograph */ + [0x8efa, 0x8efa], /* CJK Ideograph */ + [0x8efb, 0x8efb], /* CJK Ideograph */ + [0x8efc, 0x8efc], /* CJK Ideograph */ + [0x8efd, 0x8efd], /* CJK Ideograph */ + [0x8efe, 0x8efe], /* CJK Ideograph */ + [0x8eff, 0x8eff], /* CJK Ideograph */ + [0x8f00, 0x8f00], /* CJK Ideograph */ + [0x8f01, 0x8f01], /* CJK Ideograph */ + [0x8f02, 0x8f02], /* CJK Ideograph */ + [0x8f03, 0x8f03], /* CJK Ideograph */ + [0x8f04, 0x8f04], /* CJK Ideograph */ + [0x8f05, 0x8f05], /* CJK Ideograph */ + [0x8f06, 0x8f06], /* CJK Ideograph */ + [0x8f07, 0x8f07], /* CJK Ideograph */ + [0x8f08, 0x8f08], /* CJK Ideograph */ + [0x8f09, 0x8f09], /* CJK Ideograph */ + [0x8f0a, 0x8f0a], /* CJK Ideograph */ + [0x8f0b, 0x8f0b], /* CJK Ideograph */ + [0x8f0c, 0x8f0c], /* CJK Ideograph */ + [0x8f0d, 0x8f0d], /* CJK Ideograph */ + [0x8f0e, 0x8f0e], /* CJK Ideograph */ + [0x8f0f, 0x8f0f], /* CJK Ideograph */ + [0x8f10, 0x8f10], /* CJK Ideograph */ + [0x8f11, 0x8f11], /* CJK Ideograph */ + [0x8f12, 0x8f12], /* CJK Ideograph */ + [0x8f13, 0x8f13], /* CJK Ideograph */ + [0x8f14, 0x8f14], /* CJK Ideograph */ + [0x8f15, 0x8f15], /* CJK Ideograph */ + [0x8f16, 0x8f16], /* CJK Ideograph */ + [0x8f17, 0x8f17], /* CJK Ideograph */ + [0x8f18, 0x8f18], /* CJK Ideograph */ + [0x8f19, 0x8f19], /* CJK Ideograph */ + [0x8f1a, 0x8f1a], /* CJK Ideograph */ + [0x8f1b, 0x8f1b], /* CJK Ideograph */ + [0x8f1c, 0x8f1c], /* CJK Ideograph */ + [0x8f1d, 0x8f1d], /* CJK Ideograph */ + [0x8f1e, 0x8f1e], /* CJK Ideograph */ + [0x8f1f, 0x8f1f], /* CJK Ideograph */ + [0x8f20, 0x8f20], /* CJK Ideograph */ + [0x8f21, 0x8f21], /* CJK Ideograph */ + [0x8f22, 0x8f22], /* CJK Ideograph */ + [0x8f23, 0x8f23], /* CJK Ideograph */ + [0x8f24, 0x8f24], /* CJK Ideograph */ + [0x8f25, 0x8f25], /* CJK Ideograph */ + [0x8f26, 0x8f26], /* CJK Ideograph */ + [0x8f27, 0x8f27], /* CJK Ideograph */ + [0x8f28, 0x8f28], /* CJK Ideograph */ + [0x8f29, 0x8f29], /* CJK Ideograph */ + [0x8f2a, 0x8f2a], /* CJK Ideograph */ + [0x8f2b, 0x8f2b], /* CJK Ideograph */ + [0x8f2c, 0x8f2c], /* CJK Ideograph */ + [0x8f2d, 0x8f2d], /* CJK Ideograph */ + [0x8f2e, 0x8f2e], /* CJK Ideograph */ + [0x8f2f, 0x8f2f], /* CJK Ideograph */ + [0x8f30, 0x8f30], /* CJK Ideograph */ + [0x8f31, 0x8f31], /* CJK Ideograph */ + [0x8f32, 0x8f32], /* CJK Ideograph */ + [0x8f33, 0x8f33], /* CJK Ideograph */ + [0x8f34, 0x8f34], /* CJK Ideograph */ + [0x8f35, 0x8f35], /* CJK Ideograph */ + [0x8f36, 0x8f36], /* CJK Ideograph */ + [0x8f37, 0x8f37], /* CJK Ideograph */ + [0x8f38, 0x8f38], /* CJK Ideograph */ + [0x8f39, 0x8f39], /* CJK Ideograph */ + [0x8f3a, 0x8f3a], /* CJK Ideograph */ + [0x8f3b, 0x8f3b], /* CJK Ideograph */ + [0x8f3c, 0x8f3c], /* CJK Ideograph */ + [0x8f3d, 0x8f3d], /* CJK Ideograph */ + [0x8f3e, 0x8f3e], /* CJK Ideograph */ + [0x8f3f, 0x8f3f], /* CJK Ideograph */ + [0x8f40, 0x8f40], /* CJK Ideograph */ + [0x8f41, 0x8f41], /* CJK Ideograph */ + [0x8f42, 0x8f42], /* CJK Ideograph */ + [0x8f43, 0x8f43], /* CJK Ideograph */ + [0x8f44, 0x8f44], /* CJK Ideograph */ + [0x8f45, 0x8f45], /* CJK Ideograph */ + [0x8f46, 0x8f46], /* CJK Ideograph */ + [0x8f47, 0x8f47], /* CJK Ideograph */ + [0x8f48, 0x8f48], /* CJK Ideograph */ + [0x8f49, 0x8f49], /* CJK Ideograph */ + [0x8f4a, 0x8f4a], /* CJK Ideograph */ + [0x8f4b, 0x8f4b], /* CJK Ideograph */ + [0x8f4c, 0x8f4c], /* CJK Ideograph */ + [0x8f4d, 0x8f4d], /* CJK Ideograph */ + [0x8f4e, 0x8f4e], /* CJK Ideograph */ + [0x8f4f, 0x8f4f], /* CJK Ideograph */ + [0x8f50, 0x8f50], /* CJK Ideograph */ + [0x8f51, 0x8f51], /* CJK Ideograph */ + [0x8f52, 0x8f52], /* CJK Ideograph */ + [0x8f53, 0x8f53], /* CJK Ideograph */ + [0x8f54, 0x8f54], /* CJK Ideograph */ + [0x8f55, 0x8f55], /* CJK Ideograph */ + [0x8f56, 0x8f56], /* CJK Ideograph */ + [0x8f57, 0x8f57], /* CJK Ideograph */ + [0x8f58, 0x8f58], /* CJK Ideograph */ + [0x8f59, 0x8f59], /* CJK Ideograph */ + [0x8f5a, 0x8f5a], /* CJK Ideograph */ + [0x8f5b, 0x8f5b], /* CJK Ideograph */ + [0x8f5c, 0x8f5c], /* CJK Ideograph */ + [0x8f5d, 0x8f5d], /* CJK Ideograph */ + [0x8f5e, 0x8f5e], /* CJK Ideograph */ + [0x8f5f, 0x8f5f], /* CJK Ideograph */ + [0x8f60, 0x8f60], /* CJK Ideograph */ + [0x8f61, 0x8f61], /* CJK Ideograph */ + [0x8f62, 0x8f62], /* CJK Ideograph */ + [0x8f63, 0x8f63], /* CJK Ideograph */ + [0x8f64, 0x8f64], /* CJK Ideograph */ + [0x8f65, 0x8f65], /* CJK Ideograph */ + [0x8f66, 0x8f66], /* CJK Ideograph */ + [0x8f67, 0x8f67], /* CJK Ideograph */ + [0x8f68, 0x8f68], /* CJK Ideograph */ + [0x8f69, 0x8f69], /* CJK Ideograph */ + [0x8f6a, 0x8f6a], /* CJK Ideograph */ + [0x8f6b, 0x8f6b], /* CJK Ideograph */ + [0x8f6c, 0x8f6c], /* CJK Ideograph */ + [0x8f6d, 0x8f6d], /* CJK Ideograph */ + [0x8f6e, 0x8f6e], /* CJK Ideograph */ + [0x8f6f, 0x8f6f], /* CJK Ideograph */ + [0x8f70, 0x8f70], /* CJK Ideograph */ + [0x8f71, 0x8f71], /* CJK Ideograph */ + [0x8f72, 0x8f72], /* CJK Ideograph */ + [0x8f73, 0x8f73], /* CJK Ideograph */ + [0x8f74, 0x8f74], /* CJK Ideograph */ + [0x8f75, 0x8f75], /* CJK Ideograph */ + [0x8f76, 0x8f76], /* CJK Ideograph */ + [0x8f77, 0x8f77], /* CJK Ideograph */ + [0x8f78, 0x8f78], /* CJK Ideograph */ + [0x8f79, 0x8f79], /* CJK Ideograph */ + [0x8f7a, 0x8f7a], /* CJK Ideograph */ + [0x8f7b, 0x8f7b], /* CJK Ideograph */ + [0x8f7c, 0x8f7c], /* CJK Ideograph */ + [0x8f7d, 0x8f7d], /* CJK Ideograph */ + [0x8f7e, 0x8f7e], /* CJK Ideograph */ + [0x8f7f, 0x8f7f], /* CJK Ideograph */ + [0x8f80, 0x8f80], /* CJK Ideograph */ + [0x8f81, 0x8f81], /* CJK Ideograph */ + [0x8f82, 0x8f82], /* CJK Ideograph */ + [0x8f83, 0x8f83], /* CJK Ideograph */ + [0x8f84, 0x8f84], /* CJK Ideograph */ + [0x8f85, 0x8f85], /* CJK Ideograph */ + [0x8f86, 0x8f86], /* CJK Ideograph */ + [0x8f87, 0x8f87], /* CJK Ideograph */ + [0x8f88, 0x8f88], /* CJK Ideograph */ + [0x8f89, 0x8f89], /* CJK Ideograph */ + [0x8f8a, 0x8f8a], /* CJK Ideograph */ + [0x8f8b, 0x8f8b], /* CJK Ideograph */ + [0x8f8c, 0x8f8c], /* CJK Ideograph */ + [0x8f8d, 0x8f8d], /* CJK Ideograph */ + [0x8f8e, 0x8f8e], /* CJK Ideograph */ + [0x8f8f, 0x8f8f], /* CJK Ideograph */ + [0x8f90, 0x8f90], /* CJK Ideograph */ + [0x8f91, 0x8f91], /* CJK Ideograph */ + [0x8f92, 0x8f92], /* CJK Ideograph */ + [0x8f93, 0x8f93], /* CJK Ideograph */ + [0x8f94, 0x8f94], /* CJK Ideograph */ + [0x8f95, 0x8f95], /* CJK Ideograph */ + [0x8f96, 0x8f96], /* CJK Ideograph */ + [0x8f97, 0x8f97], /* CJK Ideograph */ + [0x8f98, 0x8f98], /* CJK Ideograph */ + [0x8f99, 0x8f99], /* CJK Ideograph */ + [0x8f9a, 0x8f9a], /* CJK Ideograph */ + [0x8f9b, 0x8f9b], /* CJK Ideograph */ + [0x8f9c, 0x8f9c], /* CJK Ideograph */ + [0x8f9d, 0x8f9d], /* CJK Ideograph */ + [0x8f9e, 0x8f9e], /* CJK Ideograph */ + [0x8f9f, 0x8f9f], /* CJK Ideograph */ + [0x8fa0, 0x8fa0], /* CJK Ideograph */ + [0x8fa1, 0x8fa1], /* CJK Ideograph */ + [0x8fa2, 0x8fa2], /* CJK Ideograph */ + [0x8fa3, 0x8fa3], /* CJK Ideograph */ + [0x8fa4, 0x8fa4], /* CJK Ideograph */ + [0x8fa5, 0x8fa5], /* CJK Ideograph */ + [0x8fa6, 0x8fa6], /* CJK Ideograph */ + [0x8fa7, 0x8fa7], /* CJK Ideograph */ + [0x8fa8, 0x8fa8], /* CJK Ideograph */ + [0x8fa9, 0x8fa9], /* CJK Ideograph */ + [0x8faa, 0x8faa], /* CJK Ideograph */ + [0x8fab, 0x8fab], /* CJK Ideograph */ + [0x8fac, 0x8fac], /* CJK Ideograph */ + [0x8fad, 0x8fad], /* CJK Ideograph */ + [0x8fae, 0x8fae], /* CJK Ideograph */ + [0x8faf, 0x8faf], /* CJK Ideograph */ + [0x8fb0, 0x8fb0], /* CJK Ideograph */ + [0x8fb1, 0x8fb1], /* CJK Ideograph */ + [0x8fb2, 0x8fb2], /* CJK Ideograph */ + [0x8fb3, 0x8fb3], /* CJK Ideograph */ + [0x8fb4, 0x8fb4], /* CJK Ideograph */ + [0x8fb5, 0x8fb5], /* CJK Ideograph */ + [0x8fb6, 0x8fb6], /* CJK Ideograph */ + [0x8fb7, 0x8fb7], /* CJK Ideograph */ + [0x8fb8, 0x8fb8], /* CJK Ideograph */ + [0x8fb9, 0x8fb9], /* CJK Ideograph */ + [0x8fba, 0x8fba], /* CJK Ideograph */ + [0x8fbb, 0x8fbb], /* CJK Ideograph */ + [0x8fbc, 0x8fbc], /* CJK Ideograph */ + [0x8fbd, 0x8fbd], /* CJK Ideograph */ + [0x8fbe, 0x8fbe], /* CJK Ideograph */ + [0x8fbf, 0x8fbf], /* CJK Ideograph */ + [0x8fc0, 0x8fc0], /* CJK Ideograph */ + [0x8fc1, 0x8fc1], /* CJK Ideograph */ + [0x8fc2, 0x8fc2], /* CJK Ideograph */ + [0x8fc3, 0x8fc3], /* CJK Ideograph */ + [0x8fc4, 0x8fc4], /* CJK Ideograph */ + [0x8fc5, 0x8fc5], /* CJK Ideograph */ + [0x8fc6, 0x8fc6], /* CJK Ideograph */ + [0x8fc7, 0x8fc7], /* CJK Ideograph */ + [0x8fc8, 0x8fc8], /* CJK Ideograph */ + [0x8fc9, 0x8fc9], /* CJK Ideograph */ + [0x8fca, 0x8fca], /* CJK Ideograph */ + [0x8fcb, 0x8fcb], /* CJK Ideograph */ + [0x8fcc, 0x8fcc], /* CJK Ideograph */ + [0x8fcd, 0x8fcd], /* CJK Ideograph */ + [0x8fce, 0x8fce], /* CJK Ideograph */ + [0x8fcf, 0x8fcf], /* CJK Ideograph */ + [0x8fd0, 0x8fd0], /* CJK Ideograph */ + [0x8fd1, 0x8fd1], /* CJK Ideograph */ + [0x8fd2, 0x8fd2], /* CJK Ideograph */ + [0x8fd3, 0x8fd3], /* CJK Ideograph */ + [0x8fd4, 0x8fd4], /* CJK Ideograph */ + [0x8fd5, 0x8fd5], /* CJK Ideograph */ + [0x8fd6, 0x8fd6], /* CJK Ideograph */ + [0x8fd7, 0x8fd7], /* CJK Ideograph */ + [0x8fd8, 0x8fd8], /* CJK Ideograph */ + [0x8fd9, 0x8fd9], /* CJK Ideograph */ + [0x8fda, 0x8fda], /* CJK Ideograph */ + [0x8fdb, 0x8fdb], /* CJK Ideograph */ + [0x8fdc, 0x8fdc], /* CJK Ideograph */ + [0x8fdd, 0x8fdd], /* CJK Ideograph */ + [0x8fde, 0x8fde], /* CJK Ideograph */ + [0x8fdf, 0x8fdf], /* CJK Ideograph */ + [0x8fe0, 0x8fe0], /* CJK Ideograph */ + [0x8fe1, 0x8fe1], /* CJK Ideograph */ + [0x8fe2, 0x8fe2], /* CJK Ideograph */ + [0x8fe3, 0x8fe3], /* CJK Ideograph */ + [0x8fe4, 0x8fe4], /* CJK Ideograph */ + [0x8fe5, 0x8fe5], /* CJK Ideograph */ + [0x8fe6, 0x8fe6], /* CJK Ideograph */ + [0x8fe7, 0x8fe7], /* CJK Ideograph */ + [0x8fe8, 0x8fe8], /* CJK Ideograph */ + [0x8fe9, 0x8fe9], /* CJK Ideograph */ + [0x8fea, 0x8fea], /* CJK Ideograph */ + [0x8feb, 0x8feb], /* CJK Ideograph */ + [0x8fec, 0x8fec], /* CJK Ideograph */ + [0x8fed, 0x8fed], /* CJK Ideograph */ + [0x8fee, 0x8fee], /* CJK Ideograph */ + [0x8fef, 0x8fef], /* CJK Ideograph */ + [0x8ff0, 0x8ff0], /* CJK Ideograph */ + [0x8ff1, 0x8ff1], /* CJK Ideograph */ + [0x8ff2, 0x8ff2], /* CJK Ideograph */ + [0x8ff3, 0x8ff3], /* CJK Ideograph */ + [0x8ff4, 0x8ff4], /* CJK Ideograph */ + [0x8ff5, 0x8ff5], /* CJK Ideograph */ + [0x8ff6, 0x8ff6], /* CJK Ideograph */ + [0x8ff7, 0x8ff7], /* CJK Ideograph */ + [0x8ff8, 0x8ff8], /* CJK Ideograph */ + [0x8ff9, 0x8ff9], /* CJK Ideograph */ + [0x8ffa, 0x8ffa], /* CJK Ideograph */ + [0x8ffb, 0x8ffb], /* CJK Ideograph */ + [0x8ffc, 0x8ffc], /* CJK Ideograph */ + [0x8ffd, 0x8ffd], /* CJK Ideograph */ + [0x8ffe, 0x8ffe], /* CJK Ideograph */ + [0x8fff, 0x8fff], /* CJK Ideograph */ + [0x9000, 0x9000], /* CJK Ideograph */ + [0x9001, 0x9001], /* CJK Ideograph */ + [0x9002, 0x9002], /* CJK Ideograph */ + [0x9003, 0x9003], /* CJK Ideograph */ + [0x9004, 0x9004], /* CJK Ideograph */ + [0x9005, 0x9005], /* CJK Ideograph */ + [0x9006, 0x9006], /* CJK Ideograph */ + [0x9007, 0x9007], /* CJK Ideograph */ + [0x9008, 0x9008], /* CJK Ideograph */ + [0x9009, 0x9009], /* CJK Ideograph */ + [0x900a, 0x900a], /* CJK Ideograph */ + [0x900b, 0x900b], /* CJK Ideograph */ + [0x900c, 0x900c], /* CJK Ideograph */ + [0x900d, 0x900d], /* CJK Ideograph */ + [0x900e, 0x900e], /* CJK Ideograph */ + [0x900f, 0x900f], /* CJK Ideograph */ + [0x9010, 0x9010], /* CJK Ideograph */ + [0x9011, 0x9011], /* CJK Ideograph */ + [0x9012, 0x9012], /* CJK Ideograph */ + [0x9013, 0x9013], /* CJK Ideograph */ + [0x9014, 0x9014], /* CJK Ideograph */ + [0x9015, 0x9015], /* CJK Ideograph */ + [0x9016, 0x9016], /* CJK Ideograph */ + [0x9017, 0x9017], /* CJK Ideograph */ + [0x9018, 0x9018], /* CJK Ideograph */ + [0x9019, 0x9019], /* CJK Ideograph */ + [0x901a, 0x901a], /* CJK Ideograph */ + [0x901b, 0x901b], /* CJK Ideograph */ + [0x901c, 0x901c], /* CJK Ideograph */ + [0x901d, 0x901d], /* CJK Ideograph */ + [0x901e, 0x901e], /* CJK Ideograph */ + [0x901f, 0x901f], /* CJK Ideograph */ + [0x9020, 0x9020], /* CJK Ideograph */ + [0x9021, 0x9021], /* CJK Ideograph */ + [0x9022, 0x9022], /* CJK Ideograph */ + [0x9023, 0x9023], /* CJK Ideograph */ + [0x9024, 0x9024], /* CJK Ideograph */ + [0x9025, 0x9025], /* CJK Ideograph */ + [0x9026, 0x9026], /* CJK Ideograph */ + [0x9027, 0x9027], /* CJK Ideograph */ + [0x9028, 0x9028], /* CJK Ideograph */ + [0x9029, 0x9029], /* CJK Ideograph */ + [0x902a, 0x902a], /* CJK Ideograph */ + [0x902b, 0x902b], /* CJK Ideograph */ + [0x902c, 0x902c], /* CJK Ideograph */ + [0x902d, 0x902d], /* CJK Ideograph */ + [0x902e, 0x902e], /* CJK Ideograph */ + [0x902f, 0x902f], /* CJK Ideograph */ + [0x9030, 0x9030], /* CJK Ideograph */ + [0x9031, 0x9031], /* CJK Ideograph */ + [0x9032, 0x9032], /* CJK Ideograph */ + [0x9033, 0x9033], /* CJK Ideograph */ + [0x9034, 0x9034], /* CJK Ideograph */ + [0x9035, 0x9035], /* CJK Ideograph */ + [0x9036, 0x9036], /* CJK Ideograph */ + [0x9037, 0x9037], /* CJK Ideograph */ + [0x9038, 0x9038], /* CJK Ideograph */ + [0x9039, 0x9039], /* CJK Ideograph */ + [0x903a, 0x903a], /* CJK Ideograph */ + [0x903b, 0x903b], /* CJK Ideograph */ + [0x903c, 0x903c], /* CJK Ideograph */ + [0x903d, 0x903d], /* CJK Ideograph */ + [0x903e, 0x903e], /* CJK Ideograph */ + [0x903f, 0x903f], /* CJK Ideograph */ + [0x9040, 0x9040], /* CJK Ideograph */ + [0x9041, 0x9041], /* CJK Ideograph */ + [0x9042, 0x9042], /* CJK Ideograph */ + [0x9043, 0x9043], /* CJK Ideograph */ + [0x9044, 0x9044], /* CJK Ideograph */ + [0x9045, 0x9045], /* CJK Ideograph */ + [0x9046, 0x9046], /* CJK Ideograph */ + [0x9047, 0x9047], /* CJK Ideograph */ + [0x9048, 0x9048], /* CJK Ideograph */ + [0x9049, 0x9049], /* CJK Ideograph */ + [0x904a, 0x904a], /* CJK Ideograph */ + [0x904b, 0x904b], /* CJK Ideograph */ + [0x904c, 0x904c], /* CJK Ideograph */ + [0x904d, 0x904d], /* CJK Ideograph */ + [0x904e, 0x904e], /* CJK Ideograph */ + [0x904f, 0x904f], /* CJK Ideograph */ + [0x9050, 0x9050], /* CJK Ideograph */ + [0x9051, 0x9051], /* CJK Ideograph */ + [0x9052, 0x9052], /* CJK Ideograph */ + [0x9053, 0x9053], /* CJK Ideograph */ + [0x9054, 0x9054], /* CJK Ideograph */ + [0x9055, 0x9055], /* CJK Ideograph */ + [0x9056, 0x9056], /* CJK Ideograph */ + [0x9057, 0x9057], /* CJK Ideograph */ + [0x9058, 0x9058], /* CJK Ideograph */ + [0x9059, 0x9059], /* CJK Ideograph */ + [0x905a, 0x905a], /* CJK Ideograph */ + [0x905b, 0x905b], /* CJK Ideograph */ + [0x905c, 0x905c], /* CJK Ideograph */ + [0x905d, 0x905d], /* CJK Ideograph */ + [0x905e, 0x905e], /* CJK Ideograph */ + [0x905f, 0x905f], /* CJK Ideograph */ + [0x9060, 0x9060], /* CJK Ideograph */ + [0x9061, 0x9061], /* CJK Ideograph */ + [0x9062, 0x9062], /* CJK Ideograph */ + [0x9063, 0x9063], /* CJK Ideograph */ + [0x9064, 0x9064], /* CJK Ideograph */ + [0x9065, 0x9065], /* CJK Ideograph */ + [0x9066, 0x9066], /* CJK Ideograph */ + [0x9067, 0x9067], /* CJK Ideograph */ + [0x9068, 0x9068], /* CJK Ideograph */ + [0x9069, 0x9069], /* CJK Ideograph */ + [0x906a, 0x906a], /* CJK Ideograph */ + [0x906b, 0x906b], /* CJK Ideograph */ + [0x906c, 0x906c], /* CJK Ideograph */ + [0x906d, 0x906d], /* CJK Ideograph */ + [0x906e, 0x906e], /* CJK Ideograph */ + [0x906f, 0x906f], /* CJK Ideograph */ + [0x9070, 0x9070], /* CJK Ideograph */ + [0x9071, 0x9071], /* CJK Ideograph */ + [0x9072, 0x9072], /* CJK Ideograph */ + [0x9073, 0x9073], /* CJK Ideograph */ + [0x9074, 0x9074], /* CJK Ideograph */ + [0x9075, 0x9075], /* CJK Ideograph */ + [0x9076, 0x9076], /* CJK Ideograph */ + [0x9077, 0x9077], /* CJK Ideograph */ + [0x9078, 0x9078], /* CJK Ideograph */ + [0x9079, 0x9079], /* CJK Ideograph */ + [0x907a, 0x907a], /* CJK Ideograph */ + [0x907b, 0x907b], /* CJK Ideograph */ + [0x907c, 0x907c], /* CJK Ideograph */ + [0x907d, 0x907d], /* CJK Ideograph */ + [0x907e, 0x907e], /* CJK Ideograph */ + [0x907f, 0x907f], /* CJK Ideograph */ + [0x9080, 0x9080], /* CJK Ideograph */ + [0x9081, 0x9081], /* CJK Ideograph */ + [0x9082, 0x9082], /* CJK Ideograph */ + [0x9083, 0x9083], /* CJK Ideograph */ + [0x9084, 0x9084], /* CJK Ideograph */ + [0x9085, 0x9085], /* CJK Ideograph */ + [0x9086, 0x9086], /* CJK Ideograph */ + [0x9087, 0x9087], /* CJK Ideograph */ + [0x9088, 0x9088], /* CJK Ideograph */ + [0x9089, 0x9089], /* CJK Ideograph */ + [0x908a, 0x908a], /* CJK Ideograph */ + [0x908b, 0x908b], /* CJK Ideograph */ + [0x908c, 0x908c], /* CJK Ideograph */ + [0x908d, 0x908d], /* CJK Ideograph */ + [0x908e, 0x908e], /* CJK Ideograph */ + [0x908f, 0x908f], /* CJK Ideograph */ + [0x9090, 0x9090], /* CJK Ideograph */ + [0x9091, 0x9091], /* CJK Ideograph */ + [0x9092, 0x9092], /* CJK Ideograph */ + [0x9093, 0x9093], /* CJK Ideograph */ + [0x9094, 0x9094], /* CJK Ideograph */ + [0x9095, 0x9095], /* CJK Ideograph */ + [0x9096, 0x9096], /* CJK Ideograph */ + [0x9097, 0x9097], /* CJK Ideograph */ + [0x9098, 0x9098], /* CJK Ideograph */ + [0x9099, 0x9099], /* CJK Ideograph */ + [0x909a, 0x909a], /* CJK Ideograph */ + [0x909b, 0x909b], /* CJK Ideograph */ + [0x909c, 0x909c], /* CJK Ideograph */ + [0x909d, 0x909d], /* CJK Ideograph */ + [0x909e, 0x909e], /* CJK Ideograph */ + [0x909f, 0x909f], /* CJK Ideograph */ + [0x90a0, 0x90a0], /* CJK Ideograph */ + [0x90a1, 0x90a1], /* CJK Ideograph */ + [0x90a2, 0x90a2], /* CJK Ideograph */ + [0x90a3, 0x90a3], /* CJK Ideograph */ + [0x90a4, 0x90a4], /* CJK Ideograph */ + [0x90a5, 0x90a5], /* CJK Ideograph */ + [0x90a6, 0x90a6], /* CJK Ideograph */ + [0x90a7, 0x90a7], /* CJK Ideograph */ + [0x90a8, 0x90a8], /* CJK Ideograph */ + [0x90a9, 0x90a9], /* CJK Ideograph */ + [0x90aa, 0x90aa], /* CJK Ideograph */ + [0x90ab, 0x90ab], /* CJK Ideograph */ + [0x90ac, 0x90ac], /* CJK Ideograph */ + [0x90ad, 0x90ad], /* CJK Ideograph */ + [0x90ae, 0x90ae], /* CJK Ideograph */ + [0x90af, 0x90af], /* CJK Ideograph */ + [0x90b0, 0x90b0], /* CJK Ideograph */ + [0x90b1, 0x90b1], /* CJK Ideograph */ + [0x90b2, 0x90b2], /* CJK Ideograph */ + [0x90b3, 0x90b3], /* CJK Ideograph */ + [0x90b4, 0x90b4], /* CJK Ideograph */ + [0x90b5, 0x90b5], /* CJK Ideograph */ + [0x90b6, 0x90b6], /* CJK Ideograph */ + [0x90b7, 0x90b7], /* CJK Ideograph */ + [0x90b8, 0x90b8], /* CJK Ideograph */ + [0x90b9, 0x90b9], /* CJK Ideograph */ + [0x90ba, 0x90ba], /* CJK Ideograph */ + [0x90bb, 0x90bb], /* CJK Ideograph */ + [0x90bc, 0x90bc], /* CJK Ideograph */ + [0x90bd, 0x90bd], /* CJK Ideograph */ + [0x90be, 0x90be], /* CJK Ideograph */ + [0x90bf, 0x90bf], /* CJK Ideograph */ + [0x90c0, 0x90c0], /* CJK Ideograph */ + [0x90c1, 0x90c1], /* CJK Ideograph */ + [0x90c2, 0x90c2], /* CJK Ideograph */ + [0x90c3, 0x90c3], /* CJK Ideograph */ + [0x90c4, 0x90c4], /* CJK Ideograph */ + [0x90c5, 0x90c5], /* CJK Ideograph */ + [0x90c6, 0x90c6], /* CJK Ideograph */ + [0x90c7, 0x90c7], /* CJK Ideograph */ + [0x90c8, 0x90c8], /* CJK Ideograph */ + [0x90c9, 0x90c9], /* CJK Ideograph */ + [0x90ca, 0x90ca], /* CJK Ideograph */ + [0x90cb, 0x90cb], /* CJK Ideograph */ + [0x90cc, 0x90cc], /* CJK Ideograph */ + [0x90cd, 0x90cd], /* CJK Ideograph */ + [0x90ce, 0x90ce], /* CJK Ideograph */ + [0x90cf, 0x90cf], /* CJK Ideograph */ + [0x90d0, 0x90d0], /* CJK Ideograph */ + [0x90d1, 0x90d1], /* CJK Ideograph */ + [0x90d2, 0x90d2], /* CJK Ideograph */ + [0x90d3, 0x90d3], /* CJK Ideograph */ + [0x90d4, 0x90d4], /* CJK Ideograph */ + [0x90d5, 0x90d5], /* CJK Ideograph */ + [0x90d6, 0x90d6], /* CJK Ideograph */ + [0x90d7, 0x90d7], /* CJK Ideograph */ + [0x90d8, 0x90d8], /* CJK Ideograph */ + [0x90d9, 0x90d9], /* CJK Ideograph */ + [0x90da, 0x90da], /* CJK Ideograph */ + [0x90db, 0x90db], /* CJK Ideograph */ + [0x90dc, 0x90dc], /* CJK Ideograph */ + [0x90dd, 0x90dd], /* CJK Ideograph */ + [0x90de, 0x90de], /* CJK Ideograph */ + [0x90df, 0x90df], /* CJK Ideograph */ + [0x90e0, 0x90e0], /* CJK Ideograph */ + [0x90e1, 0x90e1], /* CJK Ideograph */ + [0x90e2, 0x90e2], /* CJK Ideograph */ + [0x90e3, 0x90e3], /* CJK Ideograph */ + [0x90e4, 0x90e4], /* CJK Ideograph */ + [0x90e5, 0x90e5], /* CJK Ideograph */ + [0x90e6, 0x90e6], /* CJK Ideograph */ + [0x90e7, 0x90e7], /* CJK Ideograph */ + [0x90e8, 0x90e8], /* CJK Ideograph */ + [0x90e9, 0x90e9], /* CJK Ideograph */ + [0x90ea, 0x90ea], /* CJK Ideograph */ + [0x90eb, 0x90eb], /* CJK Ideograph */ + [0x90ec, 0x90ec], /* CJK Ideograph */ + [0x90ed, 0x90ed], /* CJK Ideograph */ + [0x90ee, 0x90ee], /* CJK Ideograph */ + [0x90ef, 0x90ef], /* CJK Ideograph */ + [0x90f0, 0x90f0], /* CJK Ideograph */ + [0x90f1, 0x90f1], /* CJK Ideograph */ + [0x90f2, 0x90f2], /* CJK Ideograph */ + [0x90f3, 0x90f3], /* CJK Ideograph */ + [0x90f4, 0x90f4], /* CJK Ideograph */ + [0x90f5, 0x90f5], /* CJK Ideograph */ + [0x90f6, 0x90f6], /* CJK Ideograph */ + [0x90f7, 0x90f7], /* CJK Ideograph */ + [0x90f8, 0x90f8], /* CJK Ideograph */ + [0x90f9, 0x90f9], /* CJK Ideograph */ + [0x90fa, 0x90fa], /* CJK Ideograph */ + [0x90fb, 0x90fb], /* CJK Ideograph */ + [0x90fc, 0x90fc], /* CJK Ideograph */ + [0x90fd, 0x90fd], /* CJK Ideograph */ + [0x90fe, 0x90fe], /* CJK Ideograph */ + [0x90ff, 0x90ff], /* CJK Ideograph */ + [0x9100, 0x9100], /* CJK Ideograph */ + [0x9101, 0x9101], /* CJK Ideograph */ + [0x9102, 0x9102], /* CJK Ideograph */ + [0x9103, 0x9103], /* CJK Ideograph */ + [0x9104, 0x9104], /* CJK Ideograph */ + [0x9105, 0x9105], /* CJK Ideograph */ + [0x9106, 0x9106], /* CJK Ideograph */ + [0x9107, 0x9107], /* CJK Ideograph */ + [0x9108, 0x9108], /* CJK Ideograph */ + [0x9109, 0x9109], /* CJK Ideograph */ + [0x910a, 0x910a], /* CJK Ideograph */ + [0x910b, 0x910b], /* CJK Ideograph */ + [0x910c, 0x910c], /* CJK Ideograph */ + [0x910d, 0x910d], /* CJK Ideograph */ + [0x910e, 0x910e], /* CJK Ideograph */ + [0x910f, 0x910f], /* CJK Ideograph */ + [0x9110, 0x9110], /* CJK Ideograph */ + [0x9111, 0x9111], /* CJK Ideograph */ + [0x9112, 0x9112], /* CJK Ideograph */ + [0x9113, 0x9113], /* CJK Ideograph */ + [0x9114, 0x9114], /* CJK Ideograph */ + [0x9115, 0x9115], /* CJK Ideograph */ + [0x9116, 0x9116], /* CJK Ideograph */ + [0x9117, 0x9117], /* CJK Ideograph */ + [0x9118, 0x9118], /* CJK Ideograph */ + [0x9119, 0x9119], /* CJK Ideograph */ + [0x911a, 0x911a], /* CJK Ideograph */ + [0x911b, 0x911b], /* CJK Ideograph */ + [0x911c, 0x911c], /* CJK Ideograph */ + [0x911d, 0x911d], /* CJK Ideograph */ + [0x911e, 0x911e], /* CJK Ideograph */ + [0x911f, 0x911f], /* CJK Ideograph */ + [0x9120, 0x9120], /* CJK Ideograph */ + [0x9121, 0x9121], /* CJK Ideograph */ + [0x9122, 0x9122], /* CJK Ideograph */ + [0x9123, 0x9123], /* CJK Ideograph */ + [0x9124, 0x9124], /* CJK Ideograph */ + [0x9125, 0x9125], /* CJK Ideograph */ + [0x9126, 0x9126], /* CJK Ideograph */ + [0x9127, 0x9127], /* CJK Ideograph */ + [0x9128, 0x9128], /* CJK Ideograph */ + [0x9129, 0x9129], /* CJK Ideograph */ + [0x912a, 0x912a], /* CJK Ideograph */ + [0x912b, 0x912b], /* CJK Ideograph */ + [0x912c, 0x912c], /* CJK Ideograph */ + [0x912d, 0x912d], /* CJK Ideograph */ + [0x912e, 0x912e], /* CJK Ideograph */ + [0x912f, 0x912f], /* CJK Ideograph */ + [0x9130, 0x9130], /* CJK Ideograph */ + [0x9131, 0x9131], /* CJK Ideograph */ + [0x9132, 0x9132], /* CJK Ideograph */ + [0x9133, 0x9133], /* CJK Ideograph */ + [0x9134, 0x9134], /* CJK Ideograph */ + [0x9135, 0x9135], /* CJK Ideograph */ + [0x9136, 0x9136], /* CJK Ideograph */ + [0x9137, 0x9137], /* CJK Ideograph */ + [0x9138, 0x9138], /* CJK Ideograph */ + [0x9139, 0x9139], /* CJK Ideograph */ + [0x913a, 0x913a], /* CJK Ideograph */ + [0x913b, 0x913b], /* CJK Ideograph */ + [0x913c, 0x913c], /* CJK Ideograph */ + [0x913d, 0x913d], /* CJK Ideograph */ + [0x913e, 0x913e], /* CJK Ideograph */ + [0x913f, 0x913f], /* CJK Ideograph */ + [0x9140, 0x9140], /* CJK Ideograph */ + [0x9141, 0x9141], /* CJK Ideograph */ + [0x9142, 0x9142], /* CJK Ideograph */ + [0x9143, 0x9143], /* CJK Ideograph */ + [0x9144, 0x9144], /* CJK Ideograph */ + [0x9145, 0x9145], /* CJK Ideograph */ + [0x9146, 0x9146], /* CJK Ideograph */ + [0x9147, 0x9147], /* CJK Ideograph */ + [0x9148, 0x9148], /* CJK Ideograph */ + [0x9149, 0x9149], /* CJK Ideograph */ + [0x914a, 0x914a], /* CJK Ideograph */ + [0x914b, 0x914b], /* CJK Ideograph */ + [0x914c, 0x914c], /* CJK Ideograph */ + [0x914d, 0x914d], /* CJK Ideograph */ + [0x914e, 0x914e], /* CJK Ideograph */ + [0x914f, 0x914f], /* CJK Ideograph */ + [0x9150, 0x9150], /* CJK Ideograph */ + [0x9151, 0x9151], /* CJK Ideograph */ + [0x9152, 0x9152], /* CJK Ideograph */ + [0x9153, 0x9153], /* CJK Ideograph */ + [0x9154, 0x9154], /* CJK Ideograph */ + [0x9155, 0x9155], /* CJK Ideograph */ + [0x9156, 0x9156], /* CJK Ideograph */ + [0x9157, 0x9157], /* CJK Ideograph */ + [0x9158, 0x9158], /* CJK Ideograph */ + [0x9159, 0x9159], /* CJK Ideograph */ + [0x915a, 0x915a], /* CJK Ideograph */ + [0x915b, 0x915b], /* CJK Ideograph */ + [0x915c, 0x915c], /* CJK Ideograph */ + [0x915d, 0x915d], /* CJK Ideograph */ + [0x915e, 0x915e], /* CJK Ideograph */ + [0x915f, 0x915f], /* CJK Ideograph */ + [0x9160, 0x9160], /* CJK Ideograph */ + [0x9161, 0x9161], /* CJK Ideograph */ + [0x9162, 0x9162], /* CJK Ideograph */ + [0x9163, 0x9163], /* CJK Ideograph */ + [0x9164, 0x9164], /* CJK Ideograph */ + [0x9165, 0x9165], /* CJK Ideograph */ + [0x9166, 0x9166], /* CJK Ideograph */ + [0x9167, 0x9167], /* CJK Ideograph */ + [0x9168, 0x9168], /* CJK Ideograph */ + [0x9169, 0x9169], /* CJK Ideograph */ + [0x916a, 0x916a], /* CJK Ideograph */ + [0x916b, 0x916b], /* CJK Ideograph */ + [0x916c, 0x916c], /* CJK Ideograph */ + [0x916d, 0x916d], /* CJK Ideograph */ + [0x916e, 0x916e], /* CJK Ideograph */ + [0x916f, 0x916f], /* CJK Ideograph */ + [0x9170, 0x9170], /* CJK Ideograph */ + [0x9171, 0x9171], /* CJK Ideograph */ + [0x9172, 0x9172], /* CJK Ideograph */ + [0x9173, 0x9173], /* CJK Ideograph */ + [0x9174, 0x9174], /* CJK Ideograph */ + [0x9175, 0x9175], /* CJK Ideograph */ + [0x9176, 0x9176], /* CJK Ideograph */ + [0x9177, 0x9177], /* CJK Ideograph */ + [0x9178, 0x9178], /* CJK Ideograph */ + [0x9179, 0x9179], /* CJK Ideograph */ + [0x917a, 0x917a], /* CJK Ideograph */ + [0x917b, 0x917b], /* CJK Ideograph */ + [0x917c, 0x917c], /* CJK Ideograph */ + [0x917d, 0x917d], /* CJK Ideograph */ + [0x917e, 0x917e], /* CJK Ideograph */ + [0x917f, 0x917f], /* CJK Ideograph */ + [0x9180, 0x9180], /* CJK Ideograph */ + [0x9181, 0x9181], /* CJK Ideograph */ + [0x9182, 0x9182], /* CJK Ideograph */ + [0x9183, 0x9183], /* CJK Ideograph */ + [0x9184, 0x9184], /* CJK Ideograph */ + [0x9185, 0x9185], /* CJK Ideograph */ + [0x9186, 0x9186], /* CJK Ideograph */ + [0x9187, 0x9187], /* CJK Ideograph */ + [0x9188, 0x9188], /* CJK Ideograph */ + [0x9189, 0x9189], /* CJK Ideograph */ + [0x918a, 0x918a], /* CJK Ideograph */ + [0x918b, 0x918b], /* CJK Ideograph */ + [0x918c, 0x918c], /* CJK Ideograph */ + [0x918d, 0x918d], /* CJK Ideograph */ + [0x918e, 0x918e], /* CJK Ideograph */ + [0x918f, 0x918f], /* CJK Ideograph */ + [0x9190, 0x9190], /* CJK Ideograph */ + [0x9191, 0x9191], /* CJK Ideograph */ + [0x9192, 0x9192], /* CJK Ideograph */ + [0x9193, 0x9193], /* CJK Ideograph */ + [0x9194, 0x9194], /* CJK Ideograph */ + [0x9195, 0x9195], /* CJK Ideograph */ + [0x9196, 0x9196], /* CJK Ideograph */ + [0x9197, 0x9197], /* CJK Ideograph */ + [0x9198, 0x9198], /* CJK Ideograph */ + [0x9199, 0x9199], /* CJK Ideograph */ + [0x919a, 0x919a], /* CJK Ideograph */ + [0x919b, 0x919b], /* CJK Ideograph */ + [0x919c, 0x919c], /* CJK Ideograph */ + [0x919d, 0x919d], /* CJK Ideograph */ + [0x919e, 0x919e], /* CJK Ideograph */ + [0x919f, 0x919f], /* CJK Ideograph */ + [0x91a0, 0x91a0], /* CJK Ideograph */ + [0x91a1, 0x91a1], /* CJK Ideograph */ + [0x91a2, 0x91a2], /* CJK Ideograph */ + [0x91a3, 0x91a3], /* CJK Ideograph */ + [0x91a4, 0x91a4], /* CJK Ideograph */ + [0x91a5, 0x91a5], /* CJK Ideograph */ + [0x91a6, 0x91a6], /* CJK Ideograph */ + [0x91a7, 0x91a7], /* CJK Ideograph */ + [0x91a8, 0x91a8], /* CJK Ideograph */ + [0x91a9, 0x91a9], /* CJK Ideograph */ + [0x91aa, 0x91aa], /* CJK Ideograph */ + [0x91ab, 0x91ab], /* CJK Ideograph */ + [0x91ac, 0x91ac], /* CJK Ideograph */ + [0x91ad, 0x91ad], /* CJK Ideograph */ + [0x91ae, 0x91ae], /* CJK Ideograph */ + [0x91af, 0x91af], /* CJK Ideograph */ + [0x91b0, 0x91b0], /* CJK Ideograph */ + [0x91b1, 0x91b1], /* CJK Ideograph */ + [0x91b2, 0x91b2], /* CJK Ideograph */ + [0x91b3, 0x91b3], /* CJK Ideograph */ + [0x91b4, 0x91b4], /* CJK Ideograph */ + [0x91b5, 0x91b5], /* CJK Ideograph */ + [0x91b6, 0x91b6], /* CJK Ideograph */ + [0x91b7, 0x91b7], /* CJK Ideograph */ + [0x91b8, 0x91b8], /* CJK Ideograph */ + [0x91b9, 0x91b9], /* CJK Ideograph */ + [0x91ba, 0x91ba], /* CJK Ideograph */ + [0x91bb, 0x91bb], /* CJK Ideograph */ + [0x91bc, 0x91bc], /* CJK Ideograph */ + [0x91bd, 0x91bd], /* CJK Ideograph */ + [0x91be, 0x91be], /* CJK Ideograph */ + [0x91bf, 0x91bf], /* CJK Ideograph */ + [0x91c0, 0x91c0], /* CJK Ideograph */ + [0x91c1, 0x91c1], /* CJK Ideograph */ + [0x91c2, 0x91c2], /* CJK Ideograph */ + [0x91c3, 0x91c3], /* CJK Ideograph */ + [0x91c4, 0x91c4], /* CJK Ideograph */ + [0x91c5, 0x91c5], /* CJK Ideograph */ + [0x91c6, 0x91c6], /* CJK Ideograph */ + [0x91c7, 0x91c7], /* CJK Ideograph */ + [0x91c8, 0x91c8], /* CJK Ideograph */ + [0x91c9, 0x91c9], /* CJK Ideograph */ + [0x91ca, 0x91ca], /* CJK Ideograph */ + [0x91cb, 0x91cb], /* CJK Ideograph */ + [0x91cc, 0x91cc], /* CJK Ideograph */ + [0x91cd, 0x91cd], /* CJK Ideograph */ + [0x91ce, 0x91ce], /* CJK Ideograph */ + [0x91cf, 0x91cf], /* CJK Ideograph */ + [0x91d0, 0x91d0], /* CJK Ideograph */ + [0x91d1, 0x91d1], /* CJK Ideograph */ + [0x91d2, 0x91d2], /* CJK Ideograph */ + [0x91d3, 0x91d3], /* CJK Ideograph */ + [0x91d4, 0x91d4], /* CJK Ideograph */ + [0x91d5, 0x91d5], /* CJK Ideograph */ + [0x91d6, 0x91d6], /* CJK Ideograph */ + [0x91d7, 0x91d7], /* CJK Ideograph */ + [0x91d8, 0x91d8], /* CJK Ideograph */ + [0x91d9, 0x91d9], /* CJK Ideograph */ + [0x91da, 0x91da], /* CJK Ideograph */ + [0x91db, 0x91db], /* CJK Ideograph */ + [0x91dc, 0x91dc], /* CJK Ideograph */ + [0x91dd, 0x91dd], /* CJK Ideograph */ + [0x91de, 0x91de], /* CJK Ideograph */ + [0x91df, 0x91df], /* CJK Ideograph */ + [0x91e0, 0x91e0], /* CJK Ideograph */ + [0x91e1, 0x91e1], /* CJK Ideograph */ + [0x91e2, 0x91e2], /* CJK Ideograph */ + [0x91e3, 0x91e3], /* CJK Ideograph */ + [0x91e4, 0x91e4], /* CJK Ideograph */ + [0x91e5, 0x91e5], /* CJK Ideograph */ + [0x91e6, 0x91e6], /* CJK Ideograph */ + [0x91e7, 0x91e7], /* CJK Ideograph */ + [0x91e8, 0x91e8], /* CJK Ideograph */ + [0x91e9, 0x91e9], /* CJK Ideograph */ + [0x91ea, 0x91ea], /* CJK Ideograph */ + [0x91eb, 0x91eb], /* CJK Ideograph */ + [0x91ec, 0x91ec], /* CJK Ideograph */ + [0x91ed, 0x91ed], /* CJK Ideograph */ + [0x91ee, 0x91ee], /* CJK Ideograph */ + [0x91ef, 0x91ef], /* CJK Ideograph */ + [0x91f0, 0x91f0], /* CJK Ideograph */ + [0x91f1, 0x91f1], /* CJK Ideograph */ + [0x91f2, 0x91f2], /* CJK Ideograph */ + [0x91f3, 0x91f3], /* CJK Ideograph */ + [0x91f4, 0x91f4], /* CJK Ideograph */ + [0x91f5, 0x91f5], /* CJK Ideograph */ + [0x91f6, 0x91f6], /* CJK Ideograph */ + [0x91f7, 0x91f7], /* CJK Ideograph */ + [0x91f8, 0x91f8], /* CJK Ideograph */ + [0x91f9, 0x91f9], /* CJK Ideograph */ + [0x91fa, 0x91fa], /* CJK Ideograph */ + [0x91fb, 0x91fb], /* CJK Ideograph */ + [0x91fc, 0x91fc], /* CJK Ideograph */ + [0x91fd, 0x91fd], /* CJK Ideograph */ + [0x91fe, 0x91fe], /* CJK Ideograph */ + [0x91ff, 0x91ff], /* CJK Ideograph */ + [0x9200, 0x9200], /* CJK Ideograph */ + [0x9201, 0x9201], /* CJK Ideograph */ + [0x9202, 0x9202], /* CJK Ideograph */ + [0x9203, 0x9203], /* CJK Ideograph */ + [0x9204, 0x9204], /* CJK Ideograph */ + [0x9205, 0x9205], /* CJK Ideograph */ + [0x9206, 0x9206], /* CJK Ideograph */ + [0x9207, 0x9207], /* CJK Ideograph */ + [0x9208, 0x9208], /* CJK Ideograph */ + [0x9209, 0x9209], /* CJK Ideograph */ + [0x920a, 0x920a], /* CJK Ideograph */ + [0x920b, 0x920b], /* CJK Ideograph */ + [0x920c, 0x920c], /* CJK Ideograph */ + [0x920d, 0x920d], /* CJK Ideograph */ + [0x920e, 0x920e], /* CJK Ideograph */ + [0x920f, 0x920f], /* CJK Ideograph */ + [0x9210, 0x9210], /* CJK Ideograph */ + [0x9211, 0x9211], /* CJK Ideograph */ + [0x9212, 0x9212], /* CJK Ideograph */ + [0x9213, 0x9213], /* CJK Ideograph */ + [0x9214, 0x9214], /* CJK Ideograph */ + [0x9215, 0x9215], /* CJK Ideograph */ + [0x9216, 0x9216], /* CJK Ideograph */ + [0x9217, 0x9217], /* CJK Ideograph */ + [0x9218, 0x9218], /* CJK Ideograph */ + [0x9219, 0x9219], /* CJK Ideograph */ + [0x921a, 0x921a], /* CJK Ideograph */ + [0x921b, 0x921b], /* CJK Ideograph */ + [0x921c, 0x921c], /* CJK Ideograph */ + [0x921d, 0x921d], /* CJK Ideograph */ + [0x921e, 0x921e], /* CJK Ideograph */ + [0x921f, 0x921f], /* CJK Ideograph */ + [0x9220, 0x9220], /* CJK Ideograph */ + [0x9221, 0x9221], /* CJK Ideograph */ + [0x9222, 0x9222], /* CJK Ideograph */ + [0x9223, 0x9223], /* CJK Ideograph */ + [0x9224, 0x9224], /* CJK Ideograph */ + [0x9225, 0x9225], /* CJK Ideograph */ + [0x9226, 0x9226], /* CJK Ideograph */ + [0x9227, 0x9227], /* CJK Ideograph */ + [0x9228, 0x9228], /* CJK Ideograph */ + [0x9229, 0x9229], /* CJK Ideograph */ + [0x922a, 0x922a], /* CJK Ideograph */ + [0x922b, 0x922b], /* CJK Ideograph */ + [0x922c, 0x922c], /* CJK Ideograph */ + [0x922d, 0x922d], /* CJK Ideograph */ + [0x922e, 0x922e], /* CJK Ideograph */ + [0x922f, 0x922f], /* CJK Ideograph */ + [0x9230, 0x9230], /* CJK Ideograph */ + [0x9231, 0x9231], /* CJK Ideograph */ + [0x9232, 0x9232], /* CJK Ideograph */ + [0x9233, 0x9233], /* CJK Ideograph */ + [0x9234, 0x9234], /* CJK Ideograph */ + [0x9235, 0x9235], /* CJK Ideograph */ + [0x9236, 0x9236], /* CJK Ideograph */ + [0x9237, 0x9237], /* CJK Ideograph */ + [0x9238, 0x9238], /* CJK Ideograph */ + [0x9239, 0x9239], /* CJK Ideograph */ + [0x923a, 0x923a], /* CJK Ideograph */ + [0x923b, 0x923b], /* CJK Ideograph */ + [0x923c, 0x923c], /* CJK Ideograph */ + [0x923d, 0x923d], /* CJK Ideograph */ + [0x923e, 0x923e], /* CJK Ideograph */ + [0x923f, 0x923f], /* CJK Ideograph */ + [0x9240, 0x9240], /* CJK Ideograph */ + [0x9241, 0x9241], /* CJK Ideograph */ + [0x9242, 0x9242], /* CJK Ideograph */ + [0x9243, 0x9243], /* CJK Ideograph */ + [0x9244, 0x9244], /* CJK Ideograph */ + [0x9245, 0x9245], /* CJK Ideograph */ + [0x9246, 0x9246], /* CJK Ideograph */ + [0x9247, 0x9247], /* CJK Ideograph */ + [0x9248, 0x9248], /* CJK Ideograph */ + [0x9249, 0x9249], /* CJK Ideograph */ + [0x924a, 0x924a], /* CJK Ideograph */ + [0x924b, 0x924b], /* CJK Ideograph */ + [0x924c, 0x924c], /* CJK Ideograph */ + [0x924d, 0x924d], /* CJK Ideograph */ + [0x924e, 0x924e], /* CJK Ideograph */ + [0x924f, 0x924f], /* CJK Ideograph */ + [0x9250, 0x9250], /* CJK Ideograph */ + [0x9251, 0x9251], /* CJK Ideograph */ + [0x9252, 0x9252], /* CJK Ideograph */ + [0x9253, 0x9253], /* CJK Ideograph */ + [0x9254, 0x9254], /* CJK Ideograph */ + [0x9255, 0x9255], /* CJK Ideograph */ + [0x9256, 0x9256], /* CJK Ideograph */ + [0x9257, 0x9257], /* CJK Ideograph */ + [0x9258, 0x9258], /* CJK Ideograph */ + [0x9259, 0x9259], /* CJK Ideograph */ + [0x925a, 0x925a], /* CJK Ideograph */ + [0x925b, 0x925b], /* CJK Ideograph */ + [0x925c, 0x925c], /* CJK Ideograph */ + [0x925d, 0x925d], /* CJK Ideograph */ + [0x925e, 0x925e], /* CJK Ideograph */ + [0x925f, 0x925f], /* CJK Ideograph */ + [0x9260, 0x9260], /* CJK Ideograph */ + [0x9261, 0x9261], /* CJK Ideograph */ + [0x9262, 0x9262], /* CJK Ideograph */ + [0x9263, 0x9263], /* CJK Ideograph */ + [0x9264, 0x9264], /* CJK Ideograph */ + [0x9265, 0x9265], /* CJK Ideograph */ + [0x9266, 0x9266], /* CJK Ideograph */ + [0x9267, 0x9267], /* CJK Ideograph */ + [0x9268, 0x9268], /* CJK Ideograph */ + [0x9269, 0x9269], /* CJK Ideograph */ + [0x926a, 0x926a], /* CJK Ideograph */ + [0x926b, 0x926b], /* CJK Ideograph */ + [0x926c, 0x926c], /* CJK Ideograph */ + [0x926d, 0x926d], /* CJK Ideograph */ + [0x926e, 0x926e], /* CJK Ideograph */ + [0x926f, 0x926f], /* CJK Ideograph */ + [0x9270, 0x9270], /* CJK Ideograph */ + [0x9271, 0x9271], /* CJK Ideograph */ + [0x9272, 0x9272], /* CJK Ideograph */ + [0x9273, 0x9273], /* CJK Ideograph */ + [0x9274, 0x9274], /* CJK Ideograph */ + [0x9275, 0x9275], /* CJK Ideograph */ + [0x9276, 0x9276], /* CJK Ideograph */ + [0x9277, 0x9277], /* CJK Ideograph */ + [0x9278, 0x9278], /* CJK Ideograph */ + [0x9279, 0x9279], /* CJK Ideograph */ + [0x927a, 0x927a], /* CJK Ideograph */ + [0x927b, 0x927b], /* CJK Ideograph */ + [0x927c, 0x927c], /* CJK Ideograph */ + [0x927d, 0x927d], /* CJK Ideograph */ + [0x927e, 0x927e], /* CJK Ideograph */ + [0x927f, 0x927f], /* CJK Ideograph */ + [0x9280, 0x9280], /* CJK Ideograph */ + [0x9281, 0x9281], /* CJK Ideograph */ + [0x9282, 0x9282], /* CJK Ideograph */ + [0x9283, 0x9283], /* CJK Ideograph */ + [0x9284, 0x9284], /* CJK Ideograph */ + [0x9285, 0x9285], /* CJK Ideograph */ + [0x9286, 0x9286], /* CJK Ideograph */ + [0x9287, 0x9287], /* CJK Ideograph */ + [0x9288, 0x9288], /* CJK Ideograph */ + [0x9289, 0x9289], /* CJK Ideograph */ + [0x928a, 0x928a], /* CJK Ideograph */ + [0x928b, 0x928b], /* CJK Ideograph */ + [0x928c, 0x928c], /* CJK Ideograph */ + [0x928d, 0x928d], /* CJK Ideograph */ + [0x928e, 0x928e], /* CJK Ideograph */ + [0x928f, 0x928f], /* CJK Ideograph */ + [0x9290, 0x9290], /* CJK Ideograph */ + [0x9291, 0x9291], /* CJK Ideograph */ + [0x9292, 0x9292], /* CJK Ideograph */ + [0x9293, 0x9293], /* CJK Ideograph */ + [0x9294, 0x9294], /* CJK Ideograph */ + [0x9295, 0x9295], /* CJK Ideograph */ + [0x9296, 0x9296], /* CJK Ideograph */ + [0x9297, 0x9297], /* CJK Ideograph */ + [0x9298, 0x9298], /* CJK Ideograph */ + [0x9299, 0x9299], /* CJK Ideograph */ + [0x929a, 0x929a], /* CJK Ideograph */ + [0x929b, 0x929b], /* CJK Ideograph */ + [0x929c, 0x929c], /* CJK Ideograph */ + [0x929d, 0x929d], /* CJK Ideograph */ + [0x929e, 0x929e], /* CJK Ideograph */ + [0x929f, 0x929f], /* CJK Ideograph */ + [0x92a0, 0x92a0], /* CJK Ideograph */ + [0x92a1, 0x92a1], /* CJK Ideograph */ + [0x92a2, 0x92a2], /* CJK Ideograph */ + [0x92a3, 0x92a3], /* CJK Ideograph */ + [0x92a4, 0x92a4], /* CJK Ideograph */ + [0x92a5, 0x92a5], /* CJK Ideograph */ + [0x92a6, 0x92a6], /* CJK Ideograph */ + [0x92a7, 0x92a7], /* CJK Ideograph */ + [0x92a8, 0x92a8], /* CJK Ideograph */ + [0x92a9, 0x92a9], /* CJK Ideograph */ + [0x92aa, 0x92aa], /* CJK Ideograph */ + [0x92ab, 0x92ab], /* CJK Ideograph */ + [0x92ac, 0x92ac], /* CJK Ideograph */ + [0x92ad, 0x92ad], /* CJK Ideograph */ + [0x92ae, 0x92ae], /* CJK Ideograph */ + [0x92af, 0x92af], /* CJK Ideograph */ + [0x92b0, 0x92b0], /* CJK Ideograph */ + [0x92b1, 0x92b1], /* CJK Ideograph */ + [0x92b2, 0x92b2], /* CJK Ideograph */ + [0x92b3, 0x92b3], /* CJK Ideograph */ + [0x92b4, 0x92b4], /* CJK Ideograph */ + [0x92b5, 0x92b5], /* CJK Ideograph */ + [0x92b6, 0x92b6], /* CJK Ideograph */ + [0x92b7, 0x92b7], /* CJK Ideograph */ + [0x92b8, 0x92b8], /* CJK Ideograph */ + [0x92b9, 0x92b9], /* CJK Ideograph */ + [0x92ba, 0x92ba], /* CJK Ideograph */ + [0x92bb, 0x92bb], /* CJK Ideograph */ + [0x92bc, 0x92bc], /* CJK Ideograph */ + [0x92bd, 0x92bd], /* CJK Ideograph */ + [0x92be, 0x92be], /* CJK Ideograph */ + [0x92bf, 0x92bf], /* CJK Ideograph */ + [0x92c0, 0x92c0], /* CJK Ideograph */ + [0x92c1, 0x92c1], /* CJK Ideograph */ + [0x92c2, 0x92c2], /* CJK Ideograph */ + [0x92c3, 0x92c3], /* CJK Ideograph */ + [0x92c4, 0x92c4], /* CJK Ideograph */ + [0x92c5, 0x92c5], /* CJK Ideograph */ + [0x92c6, 0x92c6], /* CJK Ideograph */ + [0x92c7, 0x92c7], /* CJK Ideograph */ + [0x92c8, 0x92c8], /* CJK Ideograph */ + [0x92c9, 0x92c9], /* CJK Ideograph */ + [0x92ca, 0x92ca], /* CJK Ideograph */ + [0x92cb, 0x92cb], /* CJK Ideograph */ + [0x92cc, 0x92cc], /* CJK Ideograph */ + [0x92cd, 0x92cd], /* CJK Ideograph */ + [0x92ce, 0x92ce], /* CJK Ideograph */ + [0x92cf, 0x92cf], /* CJK Ideograph */ + [0x92d0, 0x92d0], /* CJK Ideograph */ + [0x92d1, 0x92d1], /* CJK Ideograph */ + [0x92d2, 0x92d2], /* CJK Ideograph */ + [0x92d3, 0x92d3], /* CJK Ideograph */ + [0x92d4, 0x92d4], /* CJK Ideograph */ + [0x92d5, 0x92d5], /* CJK Ideograph */ + [0x92d6, 0x92d6], /* CJK Ideograph */ + [0x92d7, 0x92d7], /* CJK Ideograph */ + [0x92d8, 0x92d8], /* CJK Ideograph */ + [0x92d9, 0x92d9], /* CJK Ideograph */ + [0x92da, 0x92da], /* CJK Ideograph */ + [0x92db, 0x92db], /* CJK Ideograph */ + [0x92dc, 0x92dc], /* CJK Ideograph */ + [0x92dd, 0x92dd], /* CJK Ideograph */ + [0x92de, 0x92de], /* CJK Ideograph */ + [0x92df, 0x92df], /* CJK Ideograph */ + [0x92e0, 0x92e0], /* CJK Ideograph */ + [0x92e1, 0x92e1], /* CJK Ideograph */ + [0x92e2, 0x92e2], /* CJK Ideograph */ + [0x92e3, 0x92e3], /* CJK Ideograph */ + [0x92e4, 0x92e4], /* CJK Ideograph */ + [0x92e5, 0x92e5], /* CJK Ideograph */ + [0x92e6, 0x92e6], /* CJK Ideograph */ + [0x92e7, 0x92e7], /* CJK Ideograph */ + [0x92e8, 0x92e8], /* CJK Ideograph */ + [0x92e9, 0x92e9], /* CJK Ideograph */ + [0x92ea, 0x92ea], /* CJK Ideograph */ + [0x92eb, 0x92eb], /* CJK Ideograph */ + [0x92ec, 0x92ec], /* CJK Ideograph */ + [0x92ed, 0x92ed], /* CJK Ideograph */ + [0x92ee, 0x92ee], /* CJK Ideograph */ + [0x92ef, 0x92ef], /* CJK Ideograph */ + [0x92f0, 0x92f0], /* CJK Ideograph */ + [0x92f1, 0x92f1], /* CJK Ideograph */ + [0x92f2, 0x92f2], /* CJK Ideograph */ + [0x92f3, 0x92f3], /* CJK Ideograph */ + [0x92f4, 0x92f4], /* CJK Ideograph */ + [0x92f5, 0x92f5], /* CJK Ideograph */ + [0x92f6, 0x92f6], /* CJK Ideograph */ + [0x92f7, 0x92f7], /* CJK Ideograph */ + [0x92f8, 0x92f8], /* CJK Ideograph */ + [0x92f9, 0x92f9], /* CJK Ideograph */ + [0x92fa, 0x92fa], /* CJK Ideograph */ + [0x92fb, 0x92fb], /* CJK Ideograph */ + [0x92fc, 0x92fc], /* CJK Ideograph */ + [0x92fd, 0x92fd], /* CJK Ideograph */ + [0x92fe, 0x92fe], /* CJK Ideograph */ + [0x92ff, 0x92ff], /* CJK Ideograph */ + [0x9300, 0x9300], /* CJK Ideograph */ + [0x9301, 0x9301], /* CJK Ideograph */ + [0x9302, 0x9302], /* CJK Ideograph */ + [0x9303, 0x9303], /* CJK Ideograph */ + [0x9304, 0x9304], /* CJK Ideograph */ + [0x9305, 0x9305], /* CJK Ideograph */ + [0x9306, 0x9306], /* CJK Ideograph */ + [0x9307, 0x9307], /* CJK Ideograph */ + [0x9308, 0x9308], /* CJK Ideograph */ + [0x9309, 0x9309], /* CJK Ideograph */ + [0x930a, 0x930a], /* CJK Ideograph */ + [0x930b, 0x930b], /* CJK Ideograph */ + [0x930c, 0x930c], /* CJK Ideograph */ + [0x930d, 0x930d], /* CJK Ideograph */ + [0x930e, 0x930e], /* CJK Ideograph */ + [0x930f, 0x930f], /* CJK Ideograph */ + [0x9310, 0x9310], /* CJK Ideograph */ + [0x9311, 0x9311], /* CJK Ideograph */ + [0x9312, 0x9312], /* CJK Ideograph */ + [0x9313, 0x9313], /* CJK Ideograph */ + [0x9314, 0x9314], /* CJK Ideograph */ + [0x9315, 0x9315], /* CJK Ideograph */ + [0x9316, 0x9316], /* CJK Ideograph */ + [0x9317, 0x9317], /* CJK Ideograph */ + [0x9318, 0x9318], /* CJK Ideograph */ + [0x9319, 0x9319], /* CJK Ideograph */ + [0x931a, 0x931a], /* CJK Ideograph */ + [0x931b, 0x931b], /* CJK Ideograph */ + [0x931c, 0x931c], /* CJK Ideograph */ + [0x931d, 0x931d], /* CJK Ideograph */ + [0x931e, 0x931e], /* CJK Ideograph */ + [0x931f, 0x931f], /* CJK Ideograph */ + [0x9320, 0x9320], /* CJK Ideograph */ + [0x9321, 0x9321], /* CJK Ideograph */ + [0x9322, 0x9322], /* CJK Ideograph */ + [0x9323, 0x9323], /* CJK Ideograph */ + [0x9324, 0x9324], /* CJK Ideograph */ + [0x9325, 0x9325], /* CJK Ideograph */ + [0x9326, 0x9326], /* CJK Ideograph */ + [0x9327, 0x9327], /* CJK Ideograph */ + [0x9328, 0x9328], /* CJK Ideograph */ + [0x9329, 0x9329], /* CJK Ideograph */ + [0x932a, 0x932a], /* CJK Ideograph */ + [0x932b, 0x932b], /* CJK Ideograph */ + [0x932c, 0x932c], /* CJK Ideograph */ + [0x932d, 0x932d], /* CJK Ideograph */ + [0x932e, 0x932e], /* CJK Ideograph */ + [0x932f, 0x932f], /* CJK Ideograph */ + [0x9330, 0x9330], /* CJK Ideograph */ + [0x9331, 0x9331], /* CJK Ideograph */ + [0x9332, 0x9332], /* CJK Ideograph */ + [0x9333, 0x9333], /* CJK Ideograph */ + [0x9334, 0x9334], /* CJK Ideograph */ + [0x9335, 0x9335], /* CJK Ideograph */ + [0x9336, 0x9336], /* CJK Ideograph */ + [0x9337, 0x9337], /* CJK Ideograph */ + [0x9338, 0x9338], /* CJK Ideograph */ + [0x9339, 0x9339], /* CJK Ideograph */ + [0x933a, 0x933a], /* CJK Ideograph */ + [0x933b, 0x933b], /* CJK Ideograph */ + [0x933c, 0x933c], /* CJK Ideograph */ + [0x933d, 0x933d], /* CJK Ideograph */ + [0x933e, 0x933e], /* CJK Ideograph */ + [0x933f, 0x933f], /* CJK Ideograph */ + [0x9340, 0x9340], /* CJK Ideograph */ + [0x9341, 0x9341], /* CJK Ideograph */ + [0x9342, 0x9342], /* CJK Ideograph */ + [0x9343, 0x9343], /* CJK Ideograph */ + [0x9344, 0x9344], /* CJK Ideograph */ + [0x9345, 0x9345], /* CJK Ideograph */ + [0x9346, 0x9346], /* CJK Ideograph */ + [0x9347, 0x9347], /* CJK Ideograph */ + [0x9348, 0x9348], /* CJK Ideograph */ + [0x9349, 0x9349], /* CJK Ideograph */ + [0x934a, 0x934a], /* CJK Ideograph */ + [0x934b, 0x934b], /* CJK Ideograph */ + [0x934c, 0x934c], /* CJK Ideograph */ + [0x934d, 0x934d], /* CJK Ideograph */ + [0x934e, 0x934e], /* CJK Ideograph */ + [0x934f, 0x934f], /* CJK Ideograph */ + [0x9350, 0x9350], /* CJK Ideograph */ + [0x9351, 0x9351], /* CJK Ideograph */ + [0x9352, 0x9352], /* CJK Ideograph */ + [0x9353, 0x9353], /* CJK Ideograph */ + [0x9354, 0x9354], /* CJK Ideograph */ + [0x9355, 0x9355], /* CJK Ideograph */ + [0x9356, 0x9356], /* CJK Ideograph */ + [0x9357, 0x9357], /* CJK Ideograph */ + [0x9358, 0x9358], /* CJK Ideograph */ + [0x9359, 0x9359], /* CJK Ideograph */ + [0x935a, 0x935a], /* CJK Ideograph */ + [0x935b, 0x935b], /* CJK Ideograph */ + [0x935c, 0x935c], /* CJK Ideograph */ + [0x935d, 0x935d], /* CJK Ideograph */ + [0x935e, 0x935e], /* CJK Ideograph */ + [0x935f, 0x935f], /* CJK Ideograph */ + [0x9360, 0x9360], /* CJK Ideograph */ + [0x9361, 0x9361], /* CJK Ideograph */ + [0x9362, 0x9362], /* CJK Ideograph */ + [0x9363, 0x9363], /* CJK Ideograph */ + [0x9364, 0x9364], /* CJK Ideograph */ + [0x9365, 0x9365], /* CJK Ideograph */ + [0x9366, 0x9366], /* CJK Ideograph */ + [0x9367, 0x9367], /* CJK Ideograph */ + [0x9368, 0x9368], /* CJK Ideograph */ + [0x9369, 0x9369], /* CJK Ideograph */ + [0x936a, 0x936a], /* CJK Ideograph */ + [0x936b, 0x936b], /* CJK Ideograph */ + [0x936c, 0x936c], /* CJK Ideograph */ + [0x936d, 0x936d], /* CJK Ideograph */ + [0x936e, 0x936e], /* CJK Ideograph */ + [0x936f, 0x936f], /* CJK Ideograph */ + [0x9370, 0x9370], /* CJK Ideograph */ + [0x9371, 0x9371], /* CJK Ideograph */ + [0x9372, 0x9372], /* CJK Ideograph */ + [0x9373, 0x9373], /* CJK Ideograph */ + [0x9374, 0x9374], /* CJK Ideograph */ + [0x9375, 0x9375], /* CJK Ideograph */ + [0x9376, 0x9376], /* CJK Ideograph */ + [0x9377, 0x9377], /* CJK Ideograph */ + [0x9378, 0x9378], /* CJK Ideograph */ + [0x9379, 0x9379], /* CJK Ideograph */ + [0x937a, 0x937a], /* CJK Ideograph */ + [0x937b, 0x937b], /* CJK Ideograph */ + [0x937c, 0x937c], /* CJK Ideograph */ + [0x937d, 0x937d], /* CJK Ideograph */ + [0x937e, 0x937e], /* CJK Ideograph */ + [0x937f, 0x937f], /* CJK Ideograph */ + [0x9380, 0x9380], /* CJK Ideograph */ + [0x9381, 0x9381], /* CJK Ideograph */ + [0x9382, 0x9382], /* CJK Ideograph */ + [0x9383, 0x9383], /* CJK Ideograph */ + [0x9384, 0x9384], /* CJK Ideograph */ + [0x9385, 0x9385], /* CJK Ideograph */ + [0x9386, 0x9386], /* CJK Ideograph */ + [0x9387, 0x9387], /* CJK Ideograph */ + [0x9388, 0x9388], /* CJK Ideograph */ + [0x9389, 0x9389], /* CJK Ideograph */ + [0x938a, 0x938a], /* CJK Ideograph */ + [0x938b, 0x938b], /* CJK Ideograph */ + [0x938c, 0x938c], /* CJK Ideograph */ + [0x938d, 0x938d], /* CJK Ideograph */ + [0x938e, 0x938e], /* CJK Ideograph */ + [0x938f, 0x938f], /* CJK Ideograph */ + [0x9390, 0x9390], /* CJK Ideograph */ + [0x9391, 0x9391], /* CJK Ideograph */ + [0x9392, 0x9392], /* CJK Ideograph */ + [0x9393, 0x9393], /* CJK Ideograph */ + [0x9394, 0x9394], /* CJK Ideograph */ + [0x9395, 0x9395], /* CJK Ideograph */ + [0x9396, 0x9396], /* CJK Ideograph */ + [0x9397, 0x9397], /* CJK Ideograph */ + [0x9398, 0x9398], /* CJK Ideograph */ + [0x9399, 0x9399], /* CJK Ideograph */ + [0x939a, 0x939a], /* CJK Ideograph */ + [0x939b, 0x939b], /* CJK Ideograph */ + [0x939c, 0x939c], /* CJK Ideograph */ + [0x939d, 0x939d], /* CJK Ideograph */ + [0x939e, 0x939e], /* CJK Ideograph */ + [0x939f, 0x939f], /* CJK Ideograph */ + [0x93a0, 0x93a0], /* CJK Ideograph */ + [0x93a1, 0x93a1], /* CJK Ideograph */ + [0x93a2, 0x93a2], /* CJK Ideograph */ + [0x93a3, 0x93a3], /* CJK Ideograph */ + [0x93a4, 0x93a4], /* CJK Ideograph */ + [0x93a5, 0x93a5], /* CJK Ideograph */ + [0x93a6, 0x93a6], /* CJK Ideograph */ + [0x93a7, 0x93a7], /* CJK Ideograph */ + [0x93a8, 0x93a8], /* CJK Ideograph */ + [0x93a9, 0x93a9], /* CJK Ideograph */ + [0x93aa, 0x93aa], /* CJK Ideograph */ + [0x93ab, 0x93ab], /* CJK Ideograph */ + [0x93ac, 0x93ac], /* CJK Ideograph */ + [0x93ad, 0x93ad], /* CJK Ideograph */ + [0x93ae, 0x93ae], /* CJK Ideograph */ + [0x93af, 0x93af], /* CJK Ideograph */ + [0x93b0, 0x93b0], /* CJK Ideograph */ + [0x93b1, 0x93b1], /* CJK Ideograph */ + [0x93b2, 0x93b2], /* CJK Ideograph */ + [0x93b3, 0x93b3], /* CJK Ideograph */ + [0x93b4, 0x93b4], /* CJK Ideograph */ + [0x93b5, 0x93b5], /* CJK Ideograph */ + [0x93b6, 0x93b6], /* CJK Ideograph */ + [0x93b7, 0x93b7], /* CJK Ideograph */ + [0x93b8, 0x93b8], /* CJK Ideograph */ + [0x93b9, 0x93b9], /* CJK Ideograph */ + [0x93ba, 0x93ba], /* CJK Ideograph */ + [0x93bb, 0x93bb], /* CJK Ideograph */ + [0x93bc, 0x93bc], /* CJK Ideograph */ + [0x93bd, 0x93bd], /* CJK Ideograph */ + [0x93be, 0x93be], /* CJK Ideograph */ + [0x93bf, 0x93bf], /* CJK Ideograph */ + [0x93c0, 0x93c0], /* CJK Ideograph */ + [0x93c1, 0x93c1], /* CJK Ideograph */ + [0x93c2, 0x93c2], /* CJK Ideograph */ + [0x93c3, 0x93c3], /* CJK Ideograph */ + [0x93c4, 0x93c4], /* CJK Ideograph */ + [0x93c5, 0x93c5], /* CJK Ideograph */ + [0x93c6, 0x93c6], /* CJK Ideograph */ + [0x93c7, 0x93c7], /* CJK Ideograph */ + [0x93c8, 0x93c8], /* CJK Ideograph */ + [0x93c9, 0x93c9], /* CJK Ideograph */ + [0x93ca, 0x93ca], /* CJK Ideograph */ + [0x93cb, 0x93cb], /* CJK Ideograph */ + [0x93cc, 0x93cc], /* CJK Ideograph */ + [0x93cd, 0x93cd], /* CJK Ideograph */ + [0x93ce, 0x93ce], /* CJK Ideograph */ + [0x93cf, 0x93cf], /* CJK Ideograph */ + [0x93d0, 0x93d0], /* CJK Ideograph */ + [0x93d1, 0x93d1], /* CJK Ideograph */ + [0x93d2, 0x93d2], /* CJK Ideograph */ + [0x93d3, 0x93d3], /* CJK Ideograph */ + [0x93d4, 0x93d4], /* CJK Ideograph */ + [0x93d5, 0x93d5], /* CJK Ideograph */ + [0x93d6, 0x93d6], /* CJK Ideograph */ + [0x93d7, 0x93d7], /* CJK Ideograph */ + [0x93d8, 0x93d8], /* CJK Ideograph */ + [0x93d9, 0x93d9], /* CJK Ideograph */ + [0x93da, 0x93da], /* CJK Ideograph */ + [0x93db, 0x93db], /* CJK Ideograph */ + [0x93dc, 0x93dc], /* CJK Ideograph */ + [0x93dd, 0x93dd], /* CJK Ideograph */ + [0x93de, 0x93de], /* CJK Ideograph */ + [0x93df, 0x93df], /* CJK Ideograph */ + [0x93e0, 0x93e0], /* CJK Ideograph */ + [0x93e1, 0x93e1], /* CJK Ideograph */ + [0x93e2, 0x93e2], /* CJK Ideograph */ + [0x93e3, 0x93e3], /* CJK Ideograph */ + [0x93e4, 0x93e4], /* CJK Ideograph */ + [0x93e5, 0x93e5], /* CJK Ideograph */ + [0x93e6, 0x93e6], /* CJK Ideograph */ + [0x93e7, 0x93e7], /* CJK Ideograph */ + [0x93e8, 0x93e8], /* CJK Ideograph */ + [0x93e9, 0x93e9], /* CJK Ideograph */ + [0x93ea, 0x93ea], /* CJK Ideograph */ + [0x93eb, 0x93eb], /* CJK Ideograph */ + [0x93ec, 0x93ec], /* CJK Ideograph */ + [0x93ed, 0x93ed], /* CJK Ideograph */ + [0x93ee, 0x93ee], /* CJK Ideograph */ + [0x93ef, 0x93ef], /* CJK Ideograph */ + [0x93f0, 0x93f0], /* CJK Ideograph */ + [0x93f1, 0x93f1], /* CJK Ideograph */ + [0x93f2, 0x93f2], /* CJK Ideograph */ + [0x93f3, 0x93f3], /* CJK Ideograph */ + [0x93f4, 0x93f4], /* CJK Ideograph */ + [0x93f5, 0x93f5], /* CJK Ideograph */ + [0x93f6, 0x93f6], /* CJK Ideograph */ + [0x93f7, 0x93f7], /* CJK Ideograph */ + [0x93f8, 0x93f8], /* CJK Ideograph */ + [0x93f9, 0x93f9], /* CJK Ideograph */ + [0x93fa, 0x93fa], /* CJK Ideograph */ + [0x93fb, 0x93fb], /* CJK Ideograph */ + [0x93fc, 0x93fc], /* CJK Ideograph */ + [0x93fd, 0x93fd], /* CJK Ideograph */ + [0x93fe, 0x93fe], /* CJK Ideograph */ + [0x93ff, 0x93ff], /* CJK Ideograph */ + [0x9400, 0x9400], /* CJK Ideograph */ + [0x9401, 0x9401], /* CJK Ideograph */ + [0x9402, 0x9402], /* CJK Ideograph */ + [0x9403, 0x9403], /* CJK Ideograph */ + [0x9404, 0x9404], /* CJK Ideograph */ + [0x9405, 0x9405], /* CJK Ideograph */ + [0x9406, 0x9406], /* CJK Ideograph */ + [0x9407, 0x9407], /* CJK Ideograph */ + [0x9408, 0x9408], /* CJK Ideograph */ + [0x9409, 0x9409], /* CJK Ideograph */ + [0x940a, 0x940a], /* CJK Ideograph */ + [0x940b, 0x940b], /* CJK Ideograph */ + [0x940c, 0x940c], /* CJK Ideograph */ + [0x940d, 0x940d], /* CJK Ideograph */ + [0x940e, 0x940e], /* CJK Ideograph */ + [0x940f, 0x940f], /* CJK Ideograph */ + [0x9410, 0x9410], /* CJK Ideograph */ + [0x9411, 0x9411], /* CJK Ideograph */ + [0x9412, 0x9412], /* CJK Ideograph */ + [0x9413, 0x9413], /* CJK Ideograph */ + [0x9414, 0x9414], /* CJK Ideograph */ + [0x9415, 0x9415], /* CJK Ideograph */ + [0x9416, 0x9416], /* CJK Ideograph */ + [0x9417, 0x9417], /* CJK Ideograph */ + [0x9418, 0x9418], /* CJK Ideograph */ + [0x9419, 0x9419], /* CJK Ideograph */ + [0x941a, 0x941a], /* CJK Ideograph */ + [0x941b, 0x941b], /* CJK Ideograph */ + [0x941c, 0x941c], /* CJK Ideograph */ + [0x941d, 0x941d], /* CJK Ideograph */ + [0x941e, 0x941e], /* CJK Ideograph */ + [0x941f, 0x941f], /* CJK Ideograph */ + [0x9420, 0x9420], /* CJK Ideograph */ + [0x9421, 0x9421], /* CJK Ideograph */ + [0x9422, 0x9422], /* CJK Ideograph */ + [0x9423, 0x9423], /* CJK Ideograph */ + [0x9424, 0x9424], /* CJK Ideograph */ + [0x9425, 0x9425], /* CJK Ideograph */ + [0x9426, 0x9426], /* CJK Ideograph */ + [0x9427, 0x9427], /* CJK Ideograph */ + [0x9428, 0x9428], /* CJK Ideograph */ + [0x9429, 0x9429], /* CJK Ideograph */ + [0x942a, 0x942a], /* CJK Ideograph */ + [0x942b, 0x942b], /* CJK Ideograph */ + [0x942c, 0x942c], /* CJK Ideograph */ + [0x942d, 0x942d], /* CJK Ideograph */ + [0x942e, 0x942e], /* CJK Ideograph */ + [0x942f, 0x942f], /* CJK Ideograph */ + [0x9430, 0x9430], /* CJK Ideograph */ + [0x9431, 0x9431], /* CJK Ideograph */ + [0x9432, 0x9432], /* CJK Ideograph */ + [0x9433, 0x9433], /* CJK Ideograph */ + [0x9434, 0x9434], /* CJK Ideograph */ + [0x9435, 0x9435], /* CJK Ideograph */ + [0x9436, 0x9436], /* CJK Ideograph */ + [0x9437, 0x9437], /* CJK Ideograph */ + [0x9438, 0x9438], /* CJK Ideograph */ + [0x9439, 0x9439], /* CJK Ideograph */ + [0x943a, 0x943a], /* CJK Ideograph */ + [0x943b, 0x943b], /* CJK Ideograph */ + [0x943c, 0x943c], /* CJK Ideograph */ + [0x943d, 0x943d], /* CJK Ideograph */ + [0x943e, 0x943e], /* CJK Ideograph */ + [0x943f, 0x943f], /* CJK Ideograph */ + [0x9440, 0x9440], /* CJK Ideograph */ + [0x9441, 0x9441], /* CJK Ideograph */ + [0x9442, 0x9442], /* CJK Ideograph */ + [0x9443, 0x9443], /* CJK Ideograph */ + [0x9444, 0x9444], /* CJK Ideograph */ + [0x9445, 0x9445], /* CJK Ideograph */ + [0x9446, 0x9446], /* CJK Ideograph */ + [0x9447, 0x9447], /* CJK Ideograph */ + [0x9448, 0x9448], /* CJK Ideograph */ + [0x9449, 0x9449], /* CJK Ideograph */ + [0x944a, 0x944a], /* CJK Ideograph */ + [0x944b, 0x944b], /* CJK Ideograph */ + [0x944c, 0x944c], /* CJK Ideograph */ + [0x944d, 0x944d], /* CJK Ideograph */ + [0x944e, 0x944e], /* CJK Ideograph */ + [0x944f, 0x944f], /* CJK Ideograph */ + [0x9450, 0x9450], /* CJK Ideograph */ + [0x9451, 0x9451], /* CJK Ideograph */ + [0x9452, 0x9452], /* CJK Ideograph */ + [0x9453, 0x9453], /* CJK Ideograph */ + [0x9454, 0x9454], /* CJK Ideograph */ + [0x9455, 0x9455], /* CJK Ideograph */ + [0x9456, 0x9456], /* CJK Ideograph */ + [0x9457, 0x9457], /* CJK Ideograph */ + [0x9458, 0x9458], /* CJK Ideograph */ + [0x9459, 0x9459], /* CJK Ideograph */ + [0x945a, 0x945a], /* CJK Ideograph */ + [0x945b, 0x945b], /* CJK Ideograph */ + [0x945c, 0x945c], /* CJK Ideograph */ + [0x945d, 0x945d], /* CJK Ideograph */ + [0x945e, 0x945e], /* CJK Ideograph */ + [0x945f, 0x945f], /* CJK Ideograph */ + [0x9460, 0x9460], /* CJK Ideograph */ + [0x9461, 0x9461], /* CJK Ideograph */ + [0x9462, 0x9462], /* CJK Ideograph */ + [0x9463, 0x9463], /* CJK Ideograph */ + [0x9464, 0x9464], /* CJK Ideograph */ + [0x9465, 0x9465], /* CJK Ideograph */ + [0x9466, 0x9466], /* CJK Ideograph */ + [0x9467, 0x9467], /* CJK Ideograph */ + [0x9468, 0x9468], /* CJK Ideograph */ + [0x9469, 0x9469], /* CJK Ideograph */ + [0x946a, 0x946a], /* CJK Ideograph */ + [0x946b, 0x946b], /* CJK Ideograph */ + [0x946c, 0x946c], /* CJK Ideograph */ + [0x946d, 0x946d], /* CJK Ideograph */ + [0x946e, 0x946e], /* CJK Ideograph */ + [0x946f, 0x946f], /* CJK Ideograph */ + [0x9470, 0x9470], /* CJK Ideograph */ + [0x9471, 0x9471], /* CJK Ideograph */ + [0x9472, 0x9472], /* CJK Ideograph */ + [0x9473, 0x9473], /* CJK Ideograph */ + [0x9474, 0x9474], /* CJK Ideograph */ + [0x9475, 0x9475], /* CJK Ideograph */ + [0x9476, 0x9476], /* CJK Ideograph */ + [0x9477, 0x9477], /* CJK Ideograph */ + [0x9478, 0x9478], /* CJK Ideograph */ + [0x9479, 0x9479], /* CJK Ideograph */ + [0x947a, 0x947a], /* CJK Ideograph */ + [0x947b, 0x947b], /* CJK Ideograph */ + [0x947c, 0x947c], /* CJK Ideograph */ + [0x947d, 0x947d], /* CJK Ideograph */ + [0x947e, 0x947e], /* CJK Ideograph */ + [0x947f, 0x947f], /* CJK Ideograph */ + [0x9480, 0x9480], /* CJK Ideograph */ + [0x9481, 0x9481], /* CJK Ideograph */ + [0x9482, 0x9482], /* CJK Ideograph */ + [0x9483, 0x9483], /* CJK Ideograph */ + [0x9484, 0x9484], /* CJK Ideograph */ + [0x9485, 0x9485], /* CJK Ideograph */ + [0x9486, 0x9486], /* CJK Ideograph */ + [0x9487, 0x9487], /* CJK Ideograph */ + [0x9488, 0x9488], /* CJK Ideograph */ + [0x9489, 0x9489], /* CJK Ideograph */ + [0x948a, 0x948a], /* CJK Ideograph */ + [0x948b, 0x948b], /* CJK Ideograph */ + [0x948c, 0x948c], /* CJK Ideograph */ + [0x948d, 0x948d], /* CJK Ideograph */ + [0x948e, 0x948e], /* CJK Ideograph */ + [0x948f, 0x948f], /* CJK Ideograph */ + [0x9490, 0x9490], /* CJK Ideograph */ + [0x9491, 0x9491], /* CJK Ideograph */ + [0x9492, 0x9492], /* CJK Ideograph */ + [0x9493, 0x9493], /* CJK Ideograph */ + [0x9494, 0x9494], /* CJK Ideograph */ + [0x9495, 0x9495], /* CJK Ideograph */ + [0x9496, 0x9496], /* CJK Ideograph */ + [0x9497, 0x9497], /* CJK Ideograph */ + [0x9498, 0x9498], /* CJK Ideograph */ + [0x9499, 0x9499], /* CJK Ideograph */ + [0x949a, 0x949a], /* CJK Ideograph */ + [0x949b, 0x949b], /* CJK Ideograph */ + [0x949c, 0x949c], /* CJK Ideograph */ + [0x949d, 0x949d], /* CJK Ideograph */ + [0x949e, 0x949e], /* CJK Ideograph */ + [0x949f, 0x949f], /* CJK Ideograph */ + [0x94a0, 0x94a0], /* CJK Ideograph */ + [0x94a1, 0x94a1], /* CJK Ideograph */ + [0x94a2, 0x94a2], /* CJK Ideograph */ + [0x94a3, 0x94a3], /* CJK Ideograph */ + [0x94a4, 0x94a4], /* CJK Ideograph */ + [0x94a5, 0x94a5], /* CJK Ideograph */ + [0x94a6, 0x94a6], /* CJK Ideograph */ + [0x94a7, 0x94a7], /* CJK Ideograph */ + [0x94a8, 0x94a8], /* CJK Ideograph */ + [0x94a9, 0x94a9], /* CJK Ideograph */ + [0x94aa, 0x94aa], /* CJK Ideograph */ + [0x94ab, 0x94ab], /* CJK Ideograph */ + [0x94ac, 0x94ac], /* CJK Ideograph */ + [0x94ad, 0x94ad], /* CJK Ideograph */ + [0x94ae, 0x94ae], /* CJK Ideograph */ + [0x94af, 0x94af], /* CJK Ideograph */ + [0x94b0, 0x94b0], /* CJK Ideograph */ + [0x94b1, 0x94b1], /* CJK Ideograph */ + [0x94b2, 0x94b2], /* CJK Ideograph */ + [0x94b3, 0x94b3], /* CJK Ideograph */ + [0x94b4, 0x94b4], /* CJK Ideograph */ + [0x94b5, 0x94b5], /* CJK Ideograph */ + [0x94b6, 0x94b6], /* CJK Ideograph */ + [0x94b7, 0x94b7], /* CJK Ideograph */ + [0x94b8, 0x94b8], /* CJK Ideograph */ + [0x94b9, 0x94b9], /* CJK Ideograph */ + [0x94ba, 0x94ba], /* CJK Ideograph */ + [0x94bb, 0x94bb], /* CJK Ideograph */ + [0x94bc, 0x94bc], /* CJK Ideograph */ + [0x94bd, 0x94bd], /* CJK Ideograph */ + [0x94be, 0x94be], /* CJK Ideograph */ + [0x94bf, 0x94bf], /* CJK Ideograph */ + [0x94c0, 0x94c0], /* CJK Ideograph */ + [0x94c1, 0x94c1], /* CJK Ideograph */ + [0x94c2, 0x94c2], /* CJK Ideograph */ + [0x94c3, 0x94c3], /* CJK Ideograph */ + [0x94c4, 0x94c4], /* CJK Ideograph */ + [0x94c5, 0x94c5], /* CJK Ideograph */ + [0x94c6, 0x94c6], /* CJK Ideograph */ + [0x94c7, 0x94c7], /* CJK Ideograph */ + [0x94c8, 0x94c8], /* CJK Ideograph */ + [0x94c9, 0x94c9], /* CJK Ideograph */ + [0x94ca, 0x94ca], /* CJK Ideograph */ + [0x94cb, 0x94cb], /* CJK Ideograph */ + [0x94cc, 0x94cc], /* CJK Ideograph */ + [0x94cd, 0x94cd], /* CJK Ideograph */ + [0x94ce, 0x94ce], /* CJK Ideograph */ + [0x94cf, 0x94cf], /* CJK Ideograph */ + [0x94d0, 0x94d0], /* CJK Ideograph */ + [0x94d1, 0x94d1], /* CJK Ideograph */ + [0x94d2, 0x94d2], /* CJK Ideograph */ + [0x94d3, 0x94d3], /* CJK Ideograph */ + [0x94d4, 0x94d4], /* CJK Ideograph */ + [0x94d5, 0x94d5], /* CJK Ideograph */ + [0x94d6, 0x94d6], /* CJK Ideograph */ + [0x94d7, 0x94d7], /* CJK Ideograph */ + [0x94d8, 0x94d8], /* CJK Ideograph */ + [0x94d9, 0x94d9], /* CJK Ideograph */ + [0x94da, 0x94da], /* CJK Ideograph */ + [0x94db, 0x94db], /* CJK Ideograph */ + [0x94dc, 0x94dc], /* CJK Ideograph */ + [0x94dd, 0x94dd], /* CJK Ideograph */ + [0x94de, 0x94de], /* CJK Ideograph */ + [0x94df, 0x94df], /* CJK Ideograph */ + [0x94e0, 0x94e0], /* CJK Ideograph */ + [0x94e1, 0x94e1], /* CJK Ideograph */ + [0x94e2, 0x94e2], /* CJK Ideograph */ + [0x94e3, 0x94e3], /* CJK Ideograph */ + [0x94e4, 0x94e4], /* CJK Ideograph */ + [0x94e5, 0x94e5], /* CJK Ideograph */ + [0x94e6, 0x94e6], /* CJK Ideograph */ + [0x94e7, 0x94e7], /* CJK Ideograph */ + [0x94e8, 0x94e8], /* CJK Ideograph */ + [0x94e9, 0x94e9], /* CJK Ideograph */ + [0x94ea, 0x94ea], /* CJK Ideograph */ + [0x94eb, 0x94eb], /* CJK Ideograph */ + [0x94ec, 0x94ec], /* CJK Ideograph */ + [0x94ed, 0x94ed], /* CJK Ideograph */ + [0x94ee, 0x94ee], /* CJK Ideograph */ + [0x94ef, 0x94ef], /* CJK Ideograph */ + [0x94f0, 0x94f0], /* CJK Ideograph */ + [0x94f1, 0x94f1], /* CJK Ideograph */ + [0x94f2, 0x94f2], /* CJK Ideograph */ + [0x94f3, 0x94f3], /* CJK Ideograph */ + [0x94f4, 0x94f4], /* CJK Ideograph */ + [0x94f5, 0x94f5], /* CJK Ideograph */ + [0x94f6, 0x94f6], /* CJK Ideograph */ + [0x94f7, 0x94f7], /* CJK Ideograph */ + [0x94f8, 0x94f8], /* CJK Ideograph */ + [0x94f9, 0x94f9], /* CJK Ideograph */ + [0x94fa, 0x94fa], /* CJK Ideograph */ + [0x94fb, 0x94fb], /* CJK Ideograph */ + [0x94fc, 0x94fc], /* CJK Ideograph */ + [0x94fd, 0x94fd], /* CJK Ideograph */ + [0x94fe, 0x94fe], /* CJK Ideograph */ + [0x94ff, 0x94ff], /* CJK Ideograph */ + [0x9500, 0x9500], /* CJK Ideograph */ + [0x9501, 0x9501], /* CJK Ideograph */ + [0x9502, 0x9502], /* CJK Ideograph */ + [0x9503, 0x9503], /* CJK Ideograph */ + [0x9504, 0x9504], /* CJK Ideograph */ + [0x9505, 0x9505], /* CJK Ideograph */ + [0x9506, 0x9506], /* CJK Ideograph */ + [0x9507, 0x9507], /* CJK Ideograph */ + [0x9508, 0x9508], /* CJK Ideograph */ + [0x9509, 0x9509], /* CJK Ideograph */ + [0x950a, 0x950a], /* CJK Ideograph */ + [0x950b, 0x950b], /* CJK Ideograph */ + [0x950c, 0x950c], /* CJK Ideograph */ + [0x950d, 0x950d], /* CJK Ideograph */ + [0x950e, 0x950e], /* CJK Ideograph */ + [0x950f, 0x950f], /* CJK Ideograph */ + [0x9510, 0x9510], /* CJK Ideograph */ + [0x9511, 0x9511], /* CJK Ideograph */ + [0x9512, 0x9512], /* CJK Ideograph */ + [0x9513, 0x9513], /* CJK Ideograph */ + [0x9514, 0x9514], /* CJK Ideograph */ + [0x9515, 0x9515], /* CJK Ideograph */ + [0x9516, 0x9516], /* CJK Ideograph */ + [0x9517, 0x9517], /* CJK Ideograph */ + [0x9518, 0x9518], /* CJK Ideograph */ + [0x9519, 0x9519], /* CJK Ideograph */ + [0x951a, 0x951a], /* CJK Ideograph */ + [0x951b, 0x951b], /* CJK Ideograph */ + [0x951c, 0x951c], /* CJK Ideograph */ + [0x951d, 0x951d], /* CJK Ideograph */ + [0x951e, 0x951e], /* CJK Ideograph */ + [0x951f, 0x951f], /* CJK Ideograph */ + [0x9520, 0x9520], /* CJK Ideograph */ + [0x9521, 0x9521], /* CJK Ideograph */ + [0x9522, 0x9522], /* CJK Ideograph */ + [0x9523, 0x9523], /* CJK Ideograph */ + [0x9524, 0x9524], /* CJK Ideograph */ + [0x9525, 0x9525], /* CJK Ideograph */ + [0x9526, 0x9526], /* CJK Ideograph */ + [0x9527, 0x9527], /* CJK Ideograph */ + [0x9528, 0x9528], /* CJK Ideograph */ + [0x9529, 0x9529], /* CJK Ideograph */ + [0x952a, 0x952a], /* CJK Ideograph */ + [0x952b, 0x952b], /* CJK Ideograph */ + [0x952c, 0x952c], /* CJK Ideograph */ + [0x952d, 0x952d], /* CJK Ideograph */ + [0x952e, 0x952e], /* CJK Ideograph */ + [0x952f, 0x952f], /* CJK Ideograph */ + [0x9530, 0x9530], /* CJK Ideograph */ + [0x9531, 0x9531], /* CJK Ideograph */ + [0x9532, 0x9532], /* CJK Ideograph */ + [0x9533, 0x9533], /* CJK Ideograph */ + [0x9534, 0x9534], /* CJK Ideograph */ + [0x9535, 0x9535], /* CJK Ideograph */ + [0x9536, 0x9536], /* CJK Ideograph */ + [0x9537, 0x9537], /* CJK Ideograph */ + [0x9538, 0x9538], /* CJK Ideograph */ + [0x9539, 0x9539], /* CJK Ideograph */ + [0x953a, 0x953a], /* CJK Ideograph */ + [0x953b, 0x953b], /* CJK Ideograph */ + [0x953c, 0x953c], /* CJK Ideograph */ + [0x953d, 0x953d], /* CJK Ideograph */ + [0x953e, 0x953e], /* CJK Ideograph */ + [0x953f, 0x953f], /* CJK Ideograph */ + [0x9540, 0x9540], /* CJK Ideograph */ + [0x9541, 0x9541], /* CJK Ideograph */ + [0x9542, 0x9542], /* CJK Ideograph */ + [0x9543, 0x9543], /* CJK Ideograph */ + [0x9544, 0x9544], /* CJK Ideograph */ + [0x9545, 0x9545], /* CJK Ideograph */ + [0x9546, 0x9546], /* CJK Ideograph */ + [0x9547, 0x9547], /* CJK Ideograph */ + [0x9548, 0x9548], /* CJK Ideograph */ + [0x9549, 0x9549], /* CJK Ideograph */ + [0x954a, 0x954a], /* CJK Ideograph */ + [0x954b, 0x954b], /* CJK Ideograph */ + [0x954c, 0x954c], /* CJK Ideograph */ + [0x954d, 0x954d], /* CJK Ideograph */ + [0x954e, 0x954e], /* CJK Ideograph */ + [0x954f, 0x954f], /* CJK Ideograph */ + [0x9550, 0x9550], /* CJK Ideograph */ + [0x9551, 0x9551], /* CJK Ideograph */ + [0x9552, 0x9552], /* CJK Ideograph */ + [0x9553, 0x9553], /* CJK Ideograph */ + [0x9554, 0x9554], /* CJK Ideograph */ + [0x9555, 0x9555], /* CJK Ideograph */ + [0x9556, 0x9556], /* CJK Ideograph */ + [0x9557, 0x9557], /* CJK Ideograph */ + [0x9558, 0x9558], /* CJK Ideograph */ + [0x9559, 0x9559], /* CJK Ideograph */ + [0x955a, 0x955a], /* CJK Ideograph */ + [0x955b, 0x955b], /* CJK Ideograph */ + [0x955c, 0x955c], /* CJK Ideograph */ + [0x955d, 0x955d], /* CJK Ideograph */ + [0x955e, 0x955e], /* CJK Ideograph */ + [0x955f, 0x955f], /* CJK Ideograph */ + [0x9560, 0x9560], /* CJK Ideograph */ + [0x9561, 0x9561], /* CJK Ideograph */ + [0x9562, 0x9562], /* CJK Ideograph */ + [0x9563, 0x9563], /* CJK Ideograph */ + [0x9564, 0x9564], /* CJK Ideograph */ + [0x9565, 0x9565], /* CJK Ideograph */ + [0x9566, 0x9566], /* CJK Ideograph */ + [0x9567, 0x9567], /* CJK Ideograph */ + [0x9568, 0x9568], /* CJK Ideograph */ + [0x9569, 0x9569], /* CJK Ideograph */ + [0x956a, 0x956a], /* CJK Ideograph */ + [0x956b, 0x956b], /* CJK Ideograph */ + [0x956c, 0x956c], /* CJK Ideograph */ + [0x956d, 0x956d], /* CJK Ideograph */ + [0x956e, 0x956e], /* CJK Ideograph */ + [0x956f, 0x956f], /* CJK Ideograph */ + [0x9570, 0x9570], /* CJK Ideograph */ + [0x9571, 0x9571], /* CJK Ideograph */ + [0x9572, 0x9572], /* CJK Ideograph */ + [0x9573, 0x9573], /* CJK Ideograph */ + [0x9574, 0x9574], /* CJK Ideograph */ + [0x9575, 0x9575], /* CJK Ideograph */ + [0x9576, 0x9576], /* CJK Ideograph */ + [0x9577, 0x9577], /* CJK Ideograph */ + [0x9578, 0x9578], /* CJK Ideograph */ + [0x9579, 0x9579], /* CJK Ideograph */ + [0x957a, 0x957a], /* CJK Ideograph */ + [0x957b, 0x957b], /* CJK Ideograph */ + [0x957c, 0x957c], /* CJK Ideograph */ + [0x957d, 0x957d], /* CJK Ideograph */ + [0x957e, 0x957e], /* CJK Ideograph */ + [0x957f, 0x957f], /* CJK Ideograph */ + [0x9580, 0x9580], /* CJK Ideograph */ + [0x9581, 0x9581], /* CJK Ideograph */ + [0x9582, 0x9582], /* CJK Ideograph */ + [0x9583, 0x9583], /* CJK Ideograph */ + [0x9584, 0x9584], /* CJK Ideograph */ + [0x9585, 0x9585], /* CJK Ideograph */ + [0x9586, 0x9586], /* CJK Ideograph */ + [0x9587, 0x9587], /* CJK Ideograph */ + [0x9588, 0x9588], /* CJK Ideograph */ + [0x9589, 0x9589], /* CJK Ideograph */ + [0x958a, 0x958a], /* CJK Ideograph */ + [0x958b, 0x958b], /* CJK Ideograph */ + [0x958c, 0x958c], /* CJK Ideograph */ + [0x958d, 0x958d], /* CJK Ideograph */ + [0x958e, 0x958e], /* CJK Ideograph */ + [0x958f, 0x958f], /* CJK Ideograph */ + [0x9590, 0x9590], /* CJK Ideograph */ + [0x9591, 0x9591], /* CJK Ideograph */ + [0x9592, 0x9592], /* CJK Ideograph */ + [0x9593, 0x9593], /* CJK Ideograph */ + [0x9594, 0x9594], /* CJK Ideograph */ + [0x9595, 0x9595], /* CJK Ideograph */ + [0x9596, 0x9596], /* CJK Ideograph */ + [0x9597, 0x9597], /* CJK Ideograph */ + [0x9598, 0x9598], /* CJK Ideograph */ + [0x9599, 0x9599], /* CJK Ideograph */ + [0x959a, 0x959a], /* CJK Ideograph */ + [0x959b, 0x959b], /* CJK Ideograph */ + [0x959c, 0x959c], /* CJK Ideograph */ + [0x959d, 0x959d], /* CJK Ideograph */ + [0x959e, 0x959e], /* CJK Ideograph */ + [0x959f, 0x959f], /* CJK Ideograph */ + [0x95a0, 0x95a0], /* CJK Ideograph */ + [0x95a1, 0x95a1], /* CJK Ideograph */ + [0x95a2, 0x95a2], /* CJK Ideograph */ + [0x95a3, 0x95a3], /* CJK Ideograph */ + [0x95a4, 0x95a4], /* CJK Ideograph */ + [0x95a5, 0x95a5], /* CJK Ideograph */ + [0x95a6, 0x95a6], /* CJK Ideograph */ + [0x95a7, 0x95a7], /* CJK Ideograph */ + [0x95a8, 0x95a8], /* CJK Ideograph */ + [0x95a9, 0x95a9], /* CJK Ideograph */ + [0x95aa, 0x95aa], /* CJK Ideograph */ + [0x95ab, 0x95ab], /* CJK Ideograph */ + [0x95ac, 0x95ac], /* CJK Ideograph */ + [0x95ad, 0x95ad], /* CJK Ideograph */ + [0x95ae, 0x95ae], /* CJK Ideograph */ + [0x95af, 0x95af], /* CJK Ideograph */ + [0x95b0, 0x95b0], /* CJK Ideograph */ + [0x95b1, 0x95b1], /* CJK Ideograph */ + [0x95b2, 0x95b2], /* CJK Ideograph */ + [0x95b3, 0x95b3], /* CJK Ideograph */ + [0x95b4, 0x95b4], /* CJK Ideograph */ + [0x95b5, 0x95b5], /* CJK Ideograph */ + [0x95b6, 0x95b6], /* CJK Ideograph */ + [0x95b7, 0x95b7], /* CJK Ideograph */ + [0x95b8, 0x95b8], /* CJK Ideograph */ + [0x95b9, 0x95b9], /* CJK Ideograph */ + [0x95ba, 0x95ba], /* CJK Ideograph */ + [0x95bb, 0x95bb], /* CJK Ideograph */ + [0x95bc, 0x95bc], /* CJK Ideograph */ + [0x95bd, 0x95bd], /* CJK Ideograph */ + [0x95be, 0x95be], /* CJK Ideograph */ + [0x95bf, 0x95bf], /* CJK Ideograph */ + [0x95c0, 0x95c0], /* CJK Ideograph */ + [0x95c1, 0x95c1], /* CJK Ideograph */ + [0x95c2, 0x95c2], /* CJK Ideograph */ + [0x95c3, 0x95c3], /* CJK Ideograph */ + [0x95c4, 0x95c4], /* CJK Ideograph */ + [0x95c5, 0x95c5], /* CJK Ideograph */ + [0x95c6, 0x95c6], /* CJK Ideograph */ + [0x95c7, 0x95c7], /* CJK Ideograph */ + [0x95c8, 0x95c8], /* CJK Ideograph */ + [0x95c9, 0x95c9], /* CJK Ideograph */ + [0x95ca, 0x95ca], /* CJK Ideograph */ + [0x95cb, 0x95cb], /* CJK Ideograph */ + [0x95cc, 0x95cc], /* CJK Ideograph */ + [0x95cd, 0x95cd], /* CJK Ideograph */ + [0x95ce, 0x95ce], /* CJK Ideograph */ + [0x95cf, 0x95cf], /* CJK Ideograph */ + [0x95d0, 0x95d0], /* CJK Ideograph */ + [0x95d1, 0x95d1], /* CJK Ideograph */ + [0x95d2, 0x95d2], /* CJK Ideograph */ + [0x95d3, 0x95d3], /* CJK Ideograph */ + [0x95d4, 0x95d4], /* CJK Ideograph */ + [0x95d5, 0x95d5], /* CJK Ideograph */ + [0x95d6, 0x95d6], /* CJK Ideograph */ + [0x95d7, 0x95d7], /* CJK Ideograph */ + [0x95d8, 0x95d8], /* CJK Ideograph */ + [0x95d9, 0x95d9], /* CJK Ideograph */ + [0x95da, 0x95da], /* CJK Ideograph */ + [0x95db, 0x95db], /* CJK Ideograph */ + [0x95dc, 0x95dc], /* CJK Ideograph */ + [0x95dd, 0x95dd], /* CJK Ideograph */ + [0x95de, 0x95de], /* CJK Ideograph */ + [0x95df, 0x95df], /* CJK Ideograph */ + [0x95e0, 0x95e0], /* CJK Ideograph */ + [0x95e1, 0x95e1], /* CJK Ideograph */ + [0x95e2, 0x95e2], /* CJK Ideograph */ + [0x95e3, 0x95e3], /* CJK Ideograph */ + [0x95e4, 0x95e4], /* CJK Ideograph */ + [0x95e5, 0x95e5], /* CJK Ideograph */ + [0x95e6, 0x95e6], /* CJK Ideograph */ + [0x95e7, 0x95e7], /* CJK Ideograph */ + [0x95e8, 0x95e8], /* CJK Ideograph */ + [0x95e9, 0x95e9], /* CJK Ideograph */ + [0x95ea, 0x95ea], /* CJK Ideograph */ + [0x95eb, 0x95eb], /* CJK Ideograph */ + [0x95ec, 0x95ec], /* CJK Ideograph */ + [0x95ed, 0x95ed], /* CJK Ideograph */ + [0x95ee, 0x95ee], /* CJK Ideograph */ + [0x95ef, 0x95ef], /* CJK Ideograph */ + [0x95f0, 0x95f0], /* CJK Ideograph */ + [0x95f1, 0x95f1], /* CJK Ideograph */ + [0x95f2, 0x95f2], /* CJK Ideograph */ + [0x95f3, 0x95f3], /* CJK Ideograph */ + [0x95f4, 0x95f4], /* CJK Ideograph */ + [0x95f5, 0x95f5], /* CJK Ideograph */ + [0x95f6, 0x95f6], /* CJK Ideograph */ + [0x95f7, 0x95f7], /* CJK Ideograph */ + [0x95f8, 0x95f8], /* CJK Ideograph */ + [0x95f9, 0x95f9], /* CJK Ideograph */ + [0x95fa, 0x95fa], /* CJK Ideograph */ + [0x95fb, 0x95fb], /* CJK Ideograph */ + [0x95fc, 0x95fc], /* CJK Ideograph */ + [0x95fd, 0x95fd], /* CJK Ideograph */ + [0x95fe, 0x95fe], /* CJK Ideograph */ + [0x95ff, 0x95ff], /* CJK Ideograph */ + [0x9600, 0x9600], /* CJK Ideograph */ + [0x9601, 0x9601], /* CJK Ideograph */ + [0x9602, 0x9602], /* CJK Ideograph */ + [0x9603, 0x9603], /* CJK Ideograph */ + [0x9604, 0x9604], /* CJK Ideograph */ + [0x9605, 0x9605], /* CJK Ideograph */ + [0x9606, 0x9606], /* CJK Ideograph */ + [0x9607, 0x9607], /* CJK Ideograph */ + [0x9608, 0x9608], /* CJK Ideograph */ + [0x9609, 0x9609], /* CJK Ideograph */ + [0x960a, 0x960a], /* CJK Ideograph */ + [0x960b, 0x960b], /* CJK Ideograph */ + [0x960c, 0x960c], /* CJK Ideograph */ + [0x960d, 0x960d], /* CJK Ideograph */ + [0x960e, 0x960e], /* CJK Ideograph */ + [0x960f, 0x960f], /* CJK Ideograph */ + [0x9610, 0x9610], /* CJK Ideograph */ + [0x9611, 0x9611], /* CJK Ideograph */ + [0x9612, 0x9612], /* CJK Ideograph */ + [0x9613, 0x9613], /* CJK Ideograph */ + [0x9614, 0x9614], /* CJK Ideograph */ + [0x9615, 0x9615], /* CJK Ideograph */ + [0x9616, 0x9616], /* CJK Ideograph */ + [0x9617, 0x9617], /* CJK Ideograph */ + [0x9618, 0x9618], /* CJK Ideograph */ + [0x9619, 0x9619], /* CJK Ideograph */ + [0x961a, 0x961a], /* CJK Ideograph */ + [0x961b, 0x961b], /* CJK Ideograph */ + [0x961c, 0x961c], /* CJK Ideograph */ + [0x961d, 0x961d], /* CJK Ideograph */ + [0x961e, 0x961e], /* CJK Ideograph */ + [0x961f, 0x961f], /* CJK Ideograph */ + [0x9620, 0x9620], /* CJK Ideograph */ + [0x9621, 0x9621], /* CJK Ideograph */ + [0x9622, 0x9622], /* CJK Ideograph */ + [0x9623, 0x9623], /* CJK Ideograph */ + [0x9624, 0x9624], /* CJK Ideograph */ + [0x9625, 0x9625], /* CJK Ideograph */ + [0x9626, 0x9626], /* CJK Ideograph */ + [0x9627, 0x9627], /* CJK Ideograph */ + [0x9628, 0x9628], /* CJK Ideograph */ + [0x9629, 0x9629], /* CJK Ideograph */ + [0x962a, 0x962a], /* CJK Ideograph */ + [0x962b, 0x962b], /* CJK Ideograph */ + [0x962c, 0x962c], /* CJK Ideograph */ + [0x962d, 0x962d], /* CJK Ideograph */ + [0x962e, 0x962e], /* CJK Ideograph */ + [0x962f, 0x962f], /* CJK Ideograph */ + [0x9630, 0x9630], /* CJK Ideograph */ + [0x9631, 0x9631], /* CJK Ideograph */ + [0x9632, 0x9632], /* CJK Ideograph */ + [0x9633, 0x9633], /* CJK Ideograph */ + [0x9634, 0x9634], /* CJK Ideograph */ + [0x9635, 0x9635], /* CJK Ideograph */ + [0x9636, 0x9636], /* CJK Ideograph */ + [0x9637, 0x9637], /* CJK Ideograph */ + [0x9638, 0x9638], /* CJK Ideograph */ + [0x9639, 0x9639], /* CJK Ideograph */ + [0x963a, 0x963a], /* CJK Ideograph */ + [0x963b, 0x963b], /* CJK Ideograph */ + [0x963c, 0x963c], /* CJK Ideograph */ + [0x963d, 0x963d], /* CJK Ideograph */ + [0x963e, 0x963e], /* CJK Ideograph */ + [0x963f, 0x963f], /* CJK Ideograph */ + [0x9640, 0x9640], /* CJK Ideograph */ + [0x9641, 0x9641], /* CJK Ideograph */ + [0x9642, 0x9642], /* CJK Ideograph */ + [0x9643, 0x9643], /* CJK Ideograph */ + [0x9644, 0x9644], /* CJK Ideograph */ + [0x9645, 0x9645], /* CJK Ideograph */ + [0x9646, 0x9646], /* CJK Ideograph */ + [0x9647, 0x9647], /* CJK Ideograph */ + [0x9648, 0x9648], /* CJK Ideograph */ + [0x9649, 0x9649], /* CJK Ideograph */ + [0x964a, 0x964a], /* CJK Ideograph */ + [0x964b, 0x964b], /* CJK Ideograph */ + [0x964c, 0x964c], /* CJK Ideograph */ + [0x964d, 0x964d], /* CJK Ideograph */ + [0x964e, 0x964e], /* CJK Ideograph */ + [0x964f, 0x964f], /* CJK Ideograph */ + [0x9650, 0x9650], /* CJK Ideograph */ + [0x9651, 0x9651], /* CJK Ideograph */ + [0x9652, 0x9652], /* CJK Ideograph */ + [0x9653, 0x9653], /* CJK Ideograph */ + [0x9654, 0x9654], /* CJK Ideograph */ + [0x9655, 0x9655], /* CJK Ideograph */ + [0x9656, 0x9656], /* CJK Ideograph */ + [0x9657, 0x9657], /* CJK Ideograph */ + [0x9658, 0x9658], /* CJK Ideograph */ + [0x9659, 0x9659], /* CJK Ideograph */ + [0x965a, 0x965a], /* CJK Ideograph */ + [0x965b, 0x965b], /* CJK Ideograph */ + [0x965c, 0x965c], /* CJK Ideograph */ + [0x965d, 0x965d], /* CJK Ideograph */ + [0x965e, 0x965e], /* CJK Ideograph */ + [0x965f, 0x965f], /* CJK Ideograph */ + [0x9660, 0x9660], /* CJK Ideograph */ + [0x9661, 0x9661], /* CJK Ideograph */ + [0x9662, 0x9662], /* CJK Ideograph */ + [0x9663, 0x9663], /* CJK Ideograph */ + [0x9664, 0x9664], /* CJK Ideograph */ + [0x9665, 0x9665], /* CJK Ideograph */ + [0x9666, 0x9666], /* CJK Ideograph */ + [0x9667, 0x9667], /* CJK Ideograph */ + [0x9668, 0x9668], /* CJK Ideograph */ + [0x9669, 0x9669], /* CJK Ideograph */ + [0x966a, 0x966a], /* CJK Ideograph */ + [0x966b, 0x966b], /* CJK Ideograph */ + [0x966c, 0x966c], /* CJK Ideograph */ + [0x966d, 0x966d], /* CJK Ideograph */ + [0x966e, 0x966e], /* CJK Ideograph */ + [0x966f, 0x966f], /* CJK Ideograph */ + [0x9670, 0x9670], /* CJK Ideograph */ + [0x9671, 0x9671], /* CJK Ideograph */ + [0x9672, 0x9672], /* CJK Ideograph */ + [0x9673, 0x9673], /* CJK Ideograph */ + [0x9674, 0x9674], /* CJK Ideograph */ + [0x9675, 0x9675], /* CJK Ideograph */ + [0x9676, 0x9676], /* CJK Ideograph */ + [0x9677, 0x9677], /* CJK Ideograph */ + [0x9678, 0x9678], /* CJK Ideograph */ + [0x9679, 0x9679], /* CJK Ideograph */ + [0x967a, 0x967a], /* CJK Ideograph */ + [0x967b, 0x967b], /* CJK Ideograph */ + [0x967c, 0x967c], /* CJK Ideograph */ + [0x967d, 0x967d], /* CJK Ideograph */ + [0x967e, 0x967e], /* CJK Ideograph */ + [0x967f, 0x967f], /* CJK Ideograph */ + [0x9680, 0x9680], /* CJK Ideograph */ + [0x9681, 0x9681], /* CJK Ideograph */ + [0x9682, 0x9682], /* CJK Ideograph */ + [0x9683, 0x9683], /* CJK Ideograph */ + [0x9684, 0x9684], /* CJK Ideograph */ + [0x9685, 0x9685], /* CJK Ideograph */ + [0x9686, 0x9686], /* CJK Ideograph */ + [0x9687, 0x9687], /* CJK Ideograph */ + [0x9688, 0x9688], /* CJK Ideograph */ + [0x9689, 0x9689], /* CJK Ideograph */ + [0x968a, 0x968a], /* CJK Ideograph */ + [0x968b, 0x968b], /* CJK Ideograph */ + [0x968c, 0x968c], /* CJK Ideograph */ + [0x968d, 0x968d], /* CJK Ideograph */ + [0x968e, 0x968e], /* CJK Ideograph */ + [0x968f, 0x968f], /* CJK Ideograph */ + [0x9690, 0x9690], /* CJK Ideograph */ + [0x9691, 0x9691], /* CJK Ideograph */ + [0x9692, 0x9692], /* CJK Ideograph */ + [0x9693, 0x9693], /* CJK Ideograph */ + [0x9694, 0x9694], /* CJK Ideograph */ + [0x9695, 0x9695], /* CJK Ideograph */ + [0x9696, 0x9696], /* CJK Ideograph */ + [0x9697, 0x9697], /* CJK Ideograph */ + [0x9698, 0x9698], /* CJK Ideograph */ + [0x9699, 0x9699], /* CJK Ideograph */ + [0x969a, 0x969a], /* CJK Ideograph */ + [0x969b, 0x969b], /* CJK Ideograph */ + [0x969c, 0x969c], /* CJK Ideograph */ + [0x969d, 0x969d], /* CJK Ideograph */ + [0x969e, 0x969e], /* CJK Ideograph */ + [0x969f, 0x969f], /* CJK Ideograph */ + [0x96a0, 0x96a0], /* CJK Ideograph */ + [0x96a1, 0x96a1], /* CJK Ideograph */ + [0x96a2, 0x96a2], /* CJK Ideograph */ + [0x96a3, 0x96a3], /* CJK Ideograph */ + [0x96a4, 0x96a4], /* CJK Ideograph */ + [0x96a5, 0x96a5], /* CJK Ideograph */ + [0x96a6, 0x96a6], /* CJK Ideograph */ + [0x96a7, 0x96a7], /* CJK Ideograph */ + [0x96a8, 0x96a8], /* CJK Ideograph */ + [0x96a9, 0x96a9], /* CJK Ideograph */ + [0x96aa, 0x96aa], /* CJK Ideograph */ + [0x96ab, 0x96ab], /* CJK Ideograph */ + [0x96ac, 0x96ac], /* CJK Ideograph */ + [0x96ad, 0x96ad], /* CJK Ideograph */ + [0x96ae, 0x96ae], /* CJK Ideograph */ + [0x96af, 0x96af], /* CJK Ideograph */ + [0x96b0, 0x96b0], /* CJK Ideograph */ + [0x96b1, 0x96b1], /* CJK Ideograph */ + [0x96b2, 0x96b2], /* CJK Ideograph */ + [0x96b3, 0x96b3], /* CJK Ideograph */ + [0x96b4, 0x96b4], /* CJK Ideograph */ + [0x96b5, 0x96b5], /* CJK Ideograph */ + [0x96b6, 0x96b6], /* CJK Ideograph */ + [0x96b7, 0x96b7], /* CJK Ideograph */ + [0x96b8, 0x96b8], /* CJK Ideograph */ + [0x96b9, 0x96b9], /* CJK Ideograph */ + [0x96ba, 0x96ba], /* CJK Ideograph */ + [0x96bb, 0x96bb], /* CJK Ideograph */ + [0x96bc, 0x96bc], /* CJK Ideograph */ + [0x96bd, 0x96bd], /* CJK Ideograph */ + [0x96be, 0x96be], /* CJK Ideograph */ + [0x96bf, 0x96bf], /* CJK Ideograph */ + [0x96c0, 0x96c0], /* CJK Ideograph */ + [0x96c1, 0x96c1], /* CJK Ideograph */ + [0x96c2, 0x96c2], /* CJK Ideograph */ + [0x96c3, 0x96c3], /* CJK Ideograph */ + [0x96c4, 0x96c4], /* CJK Ideograph */ + [0x96c5, 0x96c5], /* CJK Ideograph */ + [0x96c6, 0x96c6], /* CJK Ideograph */ + [0x96c7, 0x96c7], /* CJK Ideograph */ + [0x96c8, 0x96c8], /* CJK Ideograph */ + [0x96c9, 0x96c9], /* CJK Ideograph */ + [0x96ca, 0x96ca], /* CJK Ideograph */ + [0x96cb, 0x96cb], /* CJK Ideograph */ + [0x96cc, 0x96cc], /* CJK Ideograph */ + [0x96cd, 0x96cd], /* CJK Ideograph */ + [0x96ce, 0x96ce], /* CJK Ideograph */ + [0x96cf, 0x96cf], /* CJK Ideograph */ + [0x96d0, 0x96d0], /* CJK Ideograph */ + [0x96d1, 0x96d1], /* CJK Ideograph */ + [0x96d2, 0x96d2], /* CJK Ideograph */ + [0x96d3, 0x96d3], /* CJK Ideograph */ + [0x96d4, 0x96d4], /* CJK Ideograph */ + [0x96d5, 0x96d5], /* CJK Ideograph */ + [0x96d6, 0x96d6], /* CJK Ideograph */ + [0x96d7, 0x96d7], /* CJK Ideograph */ + [0x96d8, 0x96d8], /* CJK Ideograph */ + [0x96d9, 0x96d9], /* CJK Ideograph */ + [0x96da, 0x96da], /* CJK Ideograph */ + [0x96db, 0x96db], /* CJK Ideograph */ + [0x96dc, 0x96dc], /* CJK Ideograph */ + [0x96dd, 0x96dd], /* CJK Ideograph */ + [0x96de, 0x96de], /* CJK Ideograph */ + [0x96df, 0x96df], /* CJK Ideograph */ + [0x96e0, 0x96e0], /* CJK Ideograph */ + [0x96e1, 0x96e1], /* CJK Ideograph */ + [0x96e2, 0x96e2], /* CJK Ideograph */ + [0x96e3, 0x96e3], /* CJK Ideograph */ + [0x96e4, 0x96e4], /* CJK Ideograph */ + [0x96e5, 0x96e5], /* CJK Ideograph */ + [0x96e6, 0x96e6], /* CJK Ideograph */ + [0x96e7, 0x96e7], /* CJK Ideograph */ + [0x96e8, 0x96e8], /* CJK Ideograph */ + [0x96e9, 0x96e9], /* CJK Ideograph */ + [0x96ea, 0x96ea], /* CJK Ideograph */ + [0x96eb, 0x96eb], /* CJK Ideograph */ + [0x96ec, 0x96ec], /* CJK Ideograph */ + [0x96ed, 0x96ed], /* CJK Ideograph */ + [0x96ee, 0x96ee], /* CJK Ideograph */ + [0x96ef, 0x96ef], /* CJK Ideograph */ + [0x96f0, 0x96f0], /* CJK Ideograph */ + [0x96f1, 0x96f1], /* CJK Ideograph */ + [0x96f2, 0x96f2], /* CJK Ideograph */ + [0x96f3, 0x96f3], /* CJK Ideograph */ + [0x96f4, 0x96f4], /* CJK Ideograph */ + [0x96f5, 0x96f5], /* CJK Ideograph */ + [0x96f6, 0x96f6], /* CJK Ideograph */ + [0x96f7, 0x96f7], /* CJK Ideograph */ + [0x96f8, 0x96f8], /* CJK Ideograph */ + [0x96f9, 0x96f9], /* CJK Ideograph */ + [0x96fa, 0x96fa], /* CJK Ideograph */ + [0x96fb, 0x96fb], /* CJK Ideograph */ + [0x96fc, 0x96fc], /* CJK Ideograph */ + [0x96fd, 0x96fd], /* CJK Ideograph */ + [0x96fe, 0x96fe], /* CJK Ideograph */ + [0x96ff, 0x96ff], /* CJK Ideograph */ + [0x9700, 0x9700], /* CJK Ideograph */ + [0x9701, 0x9701], /* CJK Ideograph */ + [0x9702, 0x9702], /* CJK Ideograph */ + [0x9703, 0x9703], /* CJK Ideograph */ + [0x9704, 0x9704], /* CJK Ideograph */ + [0x9705, 0x9705], /* CJK Ideograph */ + [0x9706, 0x9706], /* CJK Ideograph */ + [0x9707, 0x9707], /* CJK Ideograph */ + [0x9708, 0x9708], /* CJK Ideograph */ + [0x9709, 0x9709], /* CJK Ideograph */ + [0x970a, 0x970a], /* CJK Ideograph */ + [0x970b, 0x970b], /* CJK Ideograph */ + [0x970c, 0x970c], /* CJK Ideograph */ + [0x970d, 0x970d], /* CJK Ideograph */ + [0x970e, 0x970e], /* CJK Ideograph */ + [0x970f, 0x970f], /* CJK Ideograph */ + [0x9710, 0x9710], /* CJK Ideograph */ + [0x9711, 0x9711], /* CJK Ideograph */ + [0x9712, 0x9712], /* CJK Ideograph */ + [0x9713, 0x9713], /* CJK Ideograph */ + [0x9714, 0x9714], /* CJK Ideograph */ + [0x9715, 0x9715], /* CJK Ideograph */ + [0x9716, 0x9716], /* CJK Ideograph */ + [0x9717, 0x9717], /* CJK Ideograph */ + [0x9718, 0x9718], /* CJK Ideograph */ + [0x9719, 0x9719], /* CJK Ideograph */ + [0x971a, 0x971a], /* CJK Ideograph */ + [0x971b, 0x971b], /* CJK Ideograph */ + [0x971c, 0x971c], /* CJK Ideograph */ + [0x971d, 0x971d], /* CJK Ideograph */ + [0x971e, 0x971e], /* CJK Ideograph */ + [0x971f, 0x971f], /* CJK Ideograph */ + [0x9720, 0x9720], /* CJK Ideograph */ + [0x9721, 0x9721], /* CJK Ideograph */ + [0x9722, 0x9722], /* CJK Ideograph */ + [0x9723, 0x9723], /* CJK Ideograph */ + [0x9724, 0x9724], /* CJK Ideograph */ + [0x9725, 0x9725], /* CJK Ideograph */ + [0x9726, 0x9726], /* CJK Ideograph */ + [0x9727, 0x9727], /* CJK Ideograph */ + [0x9728, 0x9728], /* CJK Ideograph */ + [0x9729, 0x9729], /* CJK Ideograph */ + [0x972a, 0x972a], /* CJK Ideograph */ + [0x972b, 0x972b], /* CJK Ideograph */ + [0x972c, 0x972c], /* CJK Ideograph */ + [0x972d, 0x972d], /* CJK Ideograph */ + [0x972e, 0x972e], /* CJK Ideograph */ + [0x972f, 0x972f], /* CJK Ideograph */ + [0x9730, 0x9730], /* CJK Ideograph */ + [0x9731, 0x9731], /* CJK Ideograph */ + [0x9732, 0x9732], /* CJK Ideograph */ + [0x9733, 0x9733], /* CJK Ideograph */ + [0x9734, 0x9734], /* CJK Ideograph */ + [0x9735, 0x9735], /* CJK Ideograph */ + [0x9736, 0x9736], /* CJK Ideograph */ + [0x9737, 0x9737], /* CJK Ideograph */ + [0x9738, 0x9738], /* CJK Ideograph */ + [0x9739, 0x9739], /* CJK Ideograph */ + [0x973a, 0x973a], /* CJK Ideograph */ + [0x973b, 0x973b], /* CJK Ideograph */ + [0x973c, 0x973c], /* CJK Ideograph */ + [0x973d, 0x973d], /* CJK Ideograph */ + [0x973e, 0x973e], /* CJK Ideograph */ + [0x973f, 0x973f], /* CJK Ideograph */ + [0x9740, 0x9740], /* CJK Ideograph */ + [0x9741, 0x9741], /* CJK Ideograph */ + [0x9742, 0x9742], /* CJK Ideograph */ + [0x9743, 0x9743], /* CJK Ideograph */ + [0x9744, 0x9744], /* CJK Ideograph */ + [0x9745, 0x9745], /* CJK Ideograph */ + [0x9746, 0x9746], /* CJK Ideograph */ + [0x9747, 0x9747], /* CJK Ideograph */ + [0x9748, 0x9748], /* CJK Ideograph */ + [0x9749, 0x9749], /* CJK Ideograph */ + [0x974a, 0x974a], /* CJK Ideograph */ + [0x974b, 0x974b], /* CJK Ideograph */ + [0x974c, 0x974c], /* CJK Ideograph */ + [0x974d, 0x974d], /* CJK Ideograph */ + [0x974e, 0x974e], /* CJK Ideograph */ + [0x974f, 0x974f], /* CJK Ideograph */ + [0x9750, 0x9750], /* CJK Ideograph */ + [0x9751, 0x9751], /* CJK Ideograph */ + [0x9752, 0x9752], /* CJK Ideograph */ + [0x9753, 0x9753], /* CJK Ideograph */ + [0x9754, 0x9754], /* CJK Ideograph */ + [0x9755, 0x9755], /* CJK Ideograph */ + [0x9756, 0x9756], /* CJK Ideograph */ + [0x9757, 0x9757], /* CJK Ideograph */ + [0x9758, 0x9758], /* CJK Ideograph */ + [0x9759, 0x9759], /* CJK Ideograph */ + [0x975a, 0x975a], /* CJK Ideograph */ + [0x975b, 0x975b], /* CJK Ideograph */ + [0x975c, 0x975c], /* CJK Ideograph */ + [0x975d, 0x975d], /* CJK Ideograph */ + [0x975e, 0x975e], /* CJK Ideograph */ + [0x975f, 0x975f], /* CJK Ideograph */ + [0x9760, 0x9760], /* CJK Ideograph */ + [0x9761, 0x9761], /* CJK Ideograph */ + [0x9762, 0x9762], /* CJK Ideograph */ + [0x9763, 0x9763], /* CJK Ideograph */ + [0x9764, 0x9764], /* CJK Ideograph */ + [0x9765, 0x9765], /* CJK Ideograph */ + [0x9766, 0x9766], /* CJK Ideograph */ + [0x9767, 0x9767], /* CJK Ideograph */ + [0x9768, 0x9768], /* CJK Ideograph */ + [0x9769, 0x9769], /* CJK Ideograph */ + [0x976a, 0x976a], /* CJK Ideograph */ + [0x976b, 0x976b], /* CJK Ideograph */ + [0x976c, 0x976c], /* CJK Ideograph */ + [0x976d, 0x976d], /* CJK Ideograph */ + [0x976e, 0x976e], /* CJK Ideograph */ + [0x976f, 0x976f], /* CJK Ideograph */ + [0x9770, 0x9770], /* CJK Ideograph */ + [0x9771, 0x9771], /* CJK Ideograph */ + [0x9772, 0x9772], /* CJK Ideograph */ + [0x9773, 0x9773], /* CJK Ideograph */ + [0x9774, 0x9774], /* CJK Ideograph */ + [0x9775, 0x9775], /* CJK Ideograph */ + [0x9776, 0x9776], /* CJK Ideograph */ + [0x9777, 0x9777], /* CJK Ideograph */ + [0x9778, 0x9778], /* CJK Ideograph */ + [0x9779, 0x9779], /* CJK Ideograph */ + [0x977a, 0x977a], /* CJK Ideograph */ + [0x977b, 0x977b], /* CJK Ideograph */ + [0x977c, 0x977c], /* CJK Ideograph */ + [0x977d, 0x977d], /* CJK Ideograph */ + [0x977e, 0x977e], /* CJK Ideograph */ + [0x977f, 0x977f], /* CJK Ideograph */ + [0x9780, 0x9780], /* CJK Ideograph */ + [0x9781, 0x9781], /* CJK Ideograph */ + [0x9782, 0x9782], /* CJK Ideograph */ + [0x9783, 0x9783], /* CJK Ideograph */ + [0x9784, 0x9784], /* CJK Ideograph */ + [0x9785, 0x9785], /* CJK Ideograph */ + [0x9786, 0x9786], /* CJK Ideograph */ + [0x9787, 0x9787], /* CJK Ideograph */ + [0x9788, 0x9788], /* CJK Ideograph */ + [0x9789, 0x9789], /* CJK Ideograph */ + [0x978a, 0x978a], /* CJK Ideograph */ + [0x978b, 0x978b], /* CJK Ideograph */ + [0x978c, 0x978c], /* CJK Ideograph */ + [0x978d, 0x978d], /* CJK Ideograph */ + [0x978e, 0x978e], /* CJK Ideograph */ + [0x978f, 0x978f], /* CJK Ideograph */ + [0x9790, 0x9790], /* CJK Ideograph */ + [0x9791, 0x9791], /* CJK Ideograph */ + [0x9792, 0x9792], /* CJK Ideograph */ + [0x9793, 0x9793], /* CJK Ideograph */ + [0x9794, 0x9794], /* CJK Ideograph */ + [0x9795, 0x9795], /* CJK Ideograph */ + [0x9796, 0x9796], /* CJK Ideograph */ + [0x9797, 0x9797], /* CJK Ideograph */ + [0x9798, 0x9798], /* CJK Ideograph */ + [0x9799, 0x9799], /* CJK Ideograph */ + [0x979a, 0x979a], /* CJK Ideograph */ + [0x979b, 0x979b], /* CJK Ideograph */ + [0x979c, 0x979c], /* CJK Ideograph */ + [0x979d, 0x979d], /* CJK Ideograph */ + [0x979e, 0x979e], /* CJK Ideograph */ + [0x979f, 0x979f], /* CJK Ideograph */ + [0x97a0, 0x97a0], /* CJK Ideograph */ + [0x97a1, 0x97a1], /* CJK Ideograph */ + [0x97a2, 0x97a2], /* CJK Ideograph */ + [0x97a3, 0x97a3], /* CJK Ideograph */ + [0x97a4, 0x97a4], /* CJK Ideograph */ + [0x97a5, 0x97a5], /* CJK Ideograph */ + [0x97a6, 0x97a6], /* CJK Ideograph */ + [0x97a7, 0x97a7], /* CJK Ideograph */ + [0x97a8, 0x97a8], /* CJK Ideograph */ + [0x97a9, 0x97a9], /* CJK Ideograph */ + [0x97aa, 0x97aa], /* CJK Ideograph */ + [0x97ab, 0x97ab], /* CJK Ideograph */ + [0x97ac, 0x97ac], /* CJK Ideograph */ + [0x97ad, 0x97ad], /* CJK Ideograph */ + [0x97ae, 0x97ae], /* CJK Ideograph */ + [0x97af, 0x97af], /* CJK Ideograph */ + [0x97b0, 0x97b0], /* CJK Ideograph */ + [0x97b1, 0x97b1], /* CJK Ideograph */ + [0x97b2, 0x97b2], /* CJK Ideograph */ + [0x97b3, 0x97b3], /* CJK Ideograph */ + [0x97b4, 0x97b4], /* CJK Ideograph */ + [0x97b5, 0x97b5], /* CJK Ideograph */ + [0x97b6, 0x97b6], /* CJK Ideograph */ + [0x97b7, 0x97b7], /* CJK Ideograph */ + [0x97b8, 0x97b8], /* CJK Ideograph */ + [0x97b9, 0x97b9], /* CJK Ideograph */ + [0x97ba, 0x97ba], /* CJK Ideograph */ + [0x97bb, 0x97bb], /* CJK Ideograph */ + [0x97bc, 0x97bc], /* CJK Ideograph */ + [0x97bd, 0x97bd], /* CJK Ideograph */ + [0x97be, 0x97be], /* CJK Ideograph */ + [0x97bf, 0x97bf], /* CJK Ideograph */ + [0x97c0, 0x97c0], /* CJK Ideograph */ + [0x97c1, 0x97c1], /* CJK Ideograph */ + [0x97c2, 0x97c2], /* CJK Ideograph */ + [0x97c3, 0x97c3], /* CJK Ideograph */ + [0x97c4, 0x97c4], /* CJK Ideograph */ + [0x97c5, 0x97c5], /* CJK Ideograph */ + [0x97c6, 0x97c6], /* CJK Ideograph */ + [0x97c7, 0x97c7], /* CJK Ideograph */ + [0x97c8, 0x97c8], /* CJK Ideograph */ + [0x97c9, 0x97c9], /* CJK Ideograph */ + [0x97ca, 0x97ca], /* CJK Ideograph */ + [0x97cb, 0x97cb], /* CJK Ideograph */ + [0x97cc, 0x97cc], /* CJK Ideograph */ + [0x97cd, 0x97cd], /* CJK Ideograph */ + [0x97ce, 0x97ce], /* CJK Ideograph */ + [0x97cf, 0x97cf], /* CJK Ideograph */ + [0x97d0, 0x97d0], /* CJK Ideograph */ + [0x97d1, 0x97d1], /* CJK Ideograph */ + [0x97d2, 0x97d2], /* CJK Ideograph */ + [0x97d3, 0x97d3], /* CJK Ideograph */ + [0x97d4, 0x97d4], /* CJK Ideograph */ + [0x97d5, 0x97d5], /* CJK Ideograph */ + [0x97d6, 0x97d6], /* CJK Ideograph */ + [0x97d7, 0x97d7], /* CJK Ideograph */ + [0x97d8, 0x97d8], /* CJK Ideograph */ + [0x97d9, 0x97d9], /* CJK Ideograph */ + [0x97da, 0x97da], /* CJK Ideograph */ + [0x97db, 0x97db], /* CJK Ideograph */ + [0x97dc, 0x97dc], /* CJK Ideograph */ + [0x97dd, 0x97dd], /* CJK Ideograph */ + [0x97de, 0x97de], /* CJK Ideograph */ + [0x97df, 0x97df], /* CJK Ideograph */ + [0x97e0, 0x97e0], /* CJK Ideograph */ + [0x97e1, 0x97e1], /* CJK Ideograph */ + [0x97e2, 0x97e2], /* CJK Ideograph */ + [0x97e3, 0x97e3], /* CJK Ideograph */ + [0x97e4, 0x97e4], /* CJK Ideograph */ + [0x97e5, 0x97e5], /* CJK Ideograph */ + [0x97e6, 0x97e6], /* CJK Ideograph */ + [0x97e7, 0x97e7], /* CJK Ideograph */ + [0x97e8, 0x97e8], /* CJK Ideograph */ + [0x97e9, 0x97e9], /* CJK Ideograph */ + [0x97ea, 0x97ea], /* CJK Ideograph */ + [0x97eb, 0x97eb], /* CJK Ideograph */ + [0x97ec, 0x97ec], /* CJK Ideograph */ + [0x97ed, 0x97ed], /* CJK Ideograph */ + [0x97ee, 0x97ee], /* CJK Ideograph */ + [0x97ef, 0x97ef], /* CJK Ideograph */ + [0x97f0, 0x97f0], /* CJK Ideograph */ + [0x97f1, 0x97f1], /* CJK Ideograph */ + [0x97f2, 0x97f2], /* CJK Ideograph */ + [0x97f3, 0x97f3], /* CJK Ideograph */ + [0x97f4, 0x97f4], /* CJK Ideograph */ + [0x97f5, 0x97f5], /* CJK Ideograph */ + [0x97f6, 0x97f6], /* CJK Ideograph */ + [0x97f7, 0x97f7], /* CJK Ideograph */ + [0x97f8, 0x97f8], /* CJK Ideograph */ + [0x97f9, 0x97f9], /* CJK Ideograph */ + [0x97fa, 0x97fa], /* CJK Ideograph */ + [0x97fb, 0x97fb], /* CJK Ideograph */ + [0x97fc, 0x97fc], /* CJK Ideograph */ + [0x97fd, 0x97fd], /* CJK Ideograph */ + [0x97fe, 0x97fe], /* CJK Ideograph */ + [0x97ff, 0x97ff], /* CJK Ideograph */ + [0x9800, 0x9800], /* CJK Ideograph */ + [0x9801, 0x9801], /* CJK Ideograph */ + [0x9802, 0x9802], /* CJK Ideograph */ + [0x9803, 0x9803], /* CJK Ideograph */ + [0x9804, 0x9804], /* CJK Ideograph */ + [0x9805, 0x9805], /* CJK Ideograph */ + [0x9806, 0x9806], /* CJK Ideograph */ + [0x9807, 0x9807], /* CJK Ideograph */ + [0x9808, 0x9808], /* CJK Ideograph */ + [0x9809, 0x9809], /* CJK Ideograph */ + [0x980a, 0x980a], /* CJK Ideograph */ + [0x980b, 0x980b], /* CJK Ideograph */ + [0x980c, 0x980c], /* CJK Ideograph */ + [0x980d, 0x980d], /* CJK Ideograph */ + [0x980e, 0x980e], /* CJK Ideograph */ + [0x980f, 0x980f], /* CJK Ideograph */ + [0x9810, 0x9810], /* CJK Ideograph */ + [0x9811, 0x9811], /* CJK Ideograph */ + [0x9812, 0x9812], /* CJK Ideograph */ + [0x9813, 0x9813], /* CJK Ideograph */ + [0x9814, 0x9814], /* CJK Ideograph */ + [0x9815, 0x9815], /* CJK Ideograph */ + [0x9816, 0x9816], /* CJK Ideograph */ + [0x9817, 0x9817], /* CJK Ideograph */ + [0x9818, 0x9818], /* CJK Ideograph */ + [0x9819, 0x9819], /* CJK Ideograph */ + [0x981a, 0x981a], /* CJK Ideograph */ + [0x981b, 0x981b], /* CJK Ideograph */ + [0x981c, 0x981c], /* CJK Ideograph */ + [0x981d, 0x981d], /* CJK Ideograph */ + [0x981e, 0x981e], /* CJK Ideograph */ + [0x981f, 0x981f], /* CJK Ideograph */ + [0x9820, 0x9820], /* CJK Ideograph */ + [0x9821, 0x9821], /* CJK Ideograph */ + [0x9822, 0x9822], /* CJK Ideograph */ + [0x9823, 0x9823], /* CJK Ideograph */ + [0x9824, 0x9824], /* CJK Ideograph */ + [0x9825, 0x9825], /* CJK Ideograph */ + [0x9826, 0x9826], /* CJK Ideograph */ + [0x9827, 0x9827], /* CJK Ideograph */ + [0x9828, 0x9828], /* CJK Ideograph */ + [0x9829, 0x9829], /* CJK Ideograph */ + [0x982a, 0x982a], /* CJK Ideograph */ + [0x982b, 0x982b], /* CJK Ideograph */ + [0x982c, 0x982c], /* CJK Ideograph */ + [0x982d, 0x982d], /* CJK Ideograph */ + [0x982e, 0x982e], /* CJK Ideograph */ + [0x982f, 0x982f], /* CJK Ideograph */ + [0x9830, 0x9830], /* CJK Ideograph */ + [0x9831, 0x9831], /* CJK Ideograph */ + [0x9832, 0x9832], /* CJK Ideograph */ + [0x9833, 0x9833], /* CJK Ideograph */ + [0x9834, 0x9834], /* CJK Ideograph */ + [0x9835, 0x9835], /* CJK Ideograph */ + [0x9836, 0x9836], /* CJK Ideograph */ + [0x9837, 0x9837], /* CJK Ideograph */ + [0x9838, 0x9838], /* CJK Ideograph */ + [0x9839, 0x9839], /* CJK Ideograph */ + [0x983a, 0x983a], /* CJK Ideograph */ + [0x983b, 0x983b], /* CJK Ideograph */ + [0x983c, 0x983c], /* CJK Ideograph */ + [0x983d, 0x983d], /* CJK Ideograph */ + [0x983e, 0x983e], /* CJK Ideograph */ + [0x983f, 0x983f], /* CJK Ideograph */ + [0x9840, 0x9840], /* CJK Ideograph */ + [0x9841, 0x9841], /* CJK Ideograph */ + [0x9842, 0x9842], /* CJK Ideograph */ + [0x9843, 0x9843], /* CJK Ideograph */ + [0x9844, 0x9844], /* CJK Ideograph */ + [0x9845, 0x9845], /* CJK Ideograph */ + [0x9846, 0x9846], /* CJK Ideograph */ + [0x9847, 0x9847], /* CJK Ideograph */ + [0x9848, 0x9848], /* CJK Ideograph */ + [0x9849, 0x9849], /* CJK Ideograph */ + [0x984a, 0x984a], /* CJK Ideograph */ + [0x984b, 0x984b], /* CJK Ideograph */ + [0x984c, 0x984c], /* CJK Ideograph */ + [0x984d, 0x984d], /* CJK Ideograph */ + [0x984e, 0x984e], /* CJK Ideograph */ + [0x984f, 0x984f], /* CJK Ideograph */ + [0x9850, 0x9850], /* CJK Ideograph */ + [0x9851, 0x9851], /* CJK Ideograph */ + [0x9852, 0x9852], /* CJK Ideograph */ + [0x9853, 0x9853], /* CJK Ideograph */ + [0x9854, 0x9854], /* CJK Ideograph */ + [0x9855, 0x9855], /* CJK Ideograph */ + [0x9856, 0x9856], /* CJK Ideograph */ + [0x9857, 0x9857], /* CJK Ideograph */ + [0x9858, 0x9858], /* CJK Ideograph */ + [0x9859, 0x9859], /* CJK Ideograph */ + [0x985a, 0x985a], /* CJK Ideograph */ + [0x985b, 0x985b], /* CJK Ideograph */ + [0x985c, 0x985c], /* CJK Ideograph */ + [0x985d, 0x985d], /* CJK Ideograph */ + [0x985e, 0x985e], /* CJK Ideograph */ + [0x985f, 0x985f], /* CJK Ideograph */ + [0x9860, 0x9860], /* CJK Ideograph */ + [0x9861, 0x9861], /* CJK Ideograph */ + [0x9862, 0x9862], /* CJK Ideograph */ + [0x9863, 0x9863], /* CJK Ideograph */ + [0x9864, 0x9864], /* CJK Ideograph */ + [0x9865, 0x9865], /* CJK Ideograph */ + [0x9866, 0x9866], /* CJK Ideograph */ + [0x9867, 0x9867], /* CJK Ideograph */ + [0x9868, 0x9868], /* CJK Ideograph */ + [0x9869, 0x9869], /* CJK Ideograph */ + [0x986a, 0x986a], /* CJK Ideograph */ + [0x986b, 0x986b], /* CJK Ideograph */ + [0x986c, 0x986c], /* CJK Ideograph */ + [0x986d, 0x986d], /* CJK Ideograph */ + [0x986e, 0x986e], /* CJK Ideograph */ + [0x986f, 0x986f], /* CJK Ideograph */ + [0x9870, 0x9870], /* CJK Ideograph */ + [0x9871, 0x9871], /* CJK Ideograph */ + [0x9872, 0x9872], /* CJK Ideograph */ + [0x9873, 0x9873], /* CJK Ideograph */ + [0x9874, 0x9874], /* CJK Ideograph */ + [0x9875, 0x9875], /* CJK Ideograph */ + [0x9876, 0x9876], /* CJK Ideograph */ + [0x9877, 0x9877], /* CJK Ideograph */ + [0x9878, 0x9878], /* CJK Ideograph */ + [0x9879, 0x9879], /* CJK Ideograph */ + [0x987a, 0x987a], /* CJK Ideograph */ + [0x987b, 0x987b], /* CJK Ideograph */ + [0x987c, 0x987c], /* CJK Ideograph */ + [0x987d, 0x987d], /* CJK Ideograph */ + [0x987e, 0x987e], /* CJK Ideograph */ + [0x987f, 0x987f], /* CJK Ideograph */ + [0x9880, 0x9880], /* CJK Ideograph */ + [0x9881, 0x9881], /* CJK Ideograph */ + [0x9882, 0x9882], /* CJK Ideograph */ + [0x9883, 0x9883], /* CJK Ideograph */ + [0x9884, 0x9884], /* CJK Ideograph */ + [0x9885, 0x9885], /* CJK Ideograph */ + [0x9886, 0x9886], /* CJK Ideograph */ + [0x9887, 0x9887], /* CJK Ideograph */ + [0x9888, 0x9888], /* CJK Ideograph */ + [0x9889, 0x9889], /* CJK Ideograph */ + [0x988a, 0x988a], /* CJK Ideograph */ + [0x988b, 0x988b], /* CJK Ideograph */ + [0x988c, 0x988c], /* CJK Ideograph */ + [0x988d, 0x988d], /* CJK Ideograph */ + [0x988e, 0x988e], /* CJK Ideograph */ + [0x988f, 0x988f], /* CJK Ideograph */ + [0x9890, 0x9890], /* CJK Ideograph */ + [0x9891, 0x9891], /* CJK Ideograph */ + [0x9892, 0x9892], /* CJK Ideograph */ + [0x9893, 0x9893], /* CJK Ideograph */ + [0x9894, 0x9894], /* CJK Ideograph */ + [0x9895, 0x9895], /* CJK Ideograph */ + [0x9896, 0x9896], /* CJK Ideograph */ + [0x9897, 0x9897], /* CJK Ideograph */ + [0x9898, 0x9898], /* CJK Ideograph */ + [0x9899, 0x9899], /* CJK Ideograph */ + [0x989a, 0x989a], /* CJK Ideograph */ + [0x989b, 0x989b], /* CJK Ideograph */ + [0x989c, 0x989c], /* CJK Ideograph */ + [0x989d, 0x989d], /* CJK Ideograph */ + [0x989e, 0x989e], /* CJK Ideograph */ + [0x989f, 0x989f], /* CJK Ideograph */ + [0x98a0, 0x98a0], /* CJK Ideograph */ + [0x98a1, 0x98a1], /* CJK Ideograph */ + [0x98a2, 0x98a2], /* CJK Ideograph */ + [0x98a3, 0x98a3], /* CJK Ideograph */ + [0x98a4, 0x98a4], /* CJK Ideograph */ + [0x98a5, 0x98a5], /* CJK Ideograph */ + [0x98a6, 0x98a6], /* CJK Ideograph */ + [0x98a7, 0x98a7], /* CJK Ideograph */ + [0x98a8, 0x98a8], /* CJK Ideograph */ + [0x98a9, 0x98a9], /* CJK Ideograph */ + [0x98aa, 0x98aa], /* CJK Ideograph */ + [0x98ab, 0x98ab], /* CJK Ideograph */ + [0x98ac, 0x98ac], /* CJK Ideograph */ + [0x98ad, 0x98ad], /* CJK Ideograph */ + [0x98ae, 0x98ae], /* CJK Ideograph */ + [0x98af, 0x98af], /* CJK Ideograph */ + [0x98b0, 0x98b0], /* CJK Ideograph */ + [0x98b1, 0x98b1], /* CJK Ideograph */ + [0x98b2, 0x98b2], /* CJK Ideograph */ + [0x98b3, 0x98b3], /* CJK Ideograph */ + [0x98b4, 0x98b4], /* CJK Ideograph */ + [0x98b5, 0x98b5], /* CJK Ideograph */ + [0x98b6, 0x98b6], /* CJK Ideograph */ + [0x98b7, 0x98b7], /* CJK Ideograph */ + [0x98b8, 0x98b8], /* CJK Ideograph */ + [0x98b9, 0x98b9], /* CJK Ideograph */ + [0x98ba, 0x98ba], /* CJK Ideograph */ + [0x98bb, 0x98bb], /* CJK Ideograph */ + [0x98bc, 0x98bc], /* CJK Ideograph */ + [0x98bd, 0x98bd], /* CJK Ideograph */ + [0x98be, 0x98be], /* CJK Ideograph */ + [0x98bf, 0x98bf], /* CJK Ideograph */ + [0x98c0, 0x98c0], /* CJK Ideograph */ + [0x98c1, 0x98c1], /* CJK Ideograph */ + [0x98c2, 0x98c2], /* CJK Ideograph */ + [0x98c3, 0x98c3], /* CJK Ideograph */ + [0x98c4, 0x98c4], /* CJK Ideograph */ + [0x98c5, 0x98c5], /* CJK Ideograph */ + [0x98c6, 0x98c6], /* CJK Ideograph */ + [0x98c7, 0x98c7], /* CJK Ideograph */ + [0x98c8, 0x98c8], /* CJK Ideograph */ + [0x98c9, 0x98c9], /* CJK Ideograph */ + [0x98ca, 0x98ca], /* CJK Ideograph */ + [0x98cb, 0x98cb], /* CJK Ideograph */ + [0x98cc, 0x98cc], /* CJK Ideograph */ + [0x98cd, 0x98cd], /* CJK Ideograph */ + [0x98ce, 0x98ce], /* CJK Ideograph */ + [0x98cf, 0x98cf], /* CJK Ideograph */ + [0x98d0, 0x98d0], /* CJK Ideograph */ + [0x98d1, 0x98d1], /* CJK Ideograph */ + [0x98d2, 0x98d2], /* CJK Ideograph */ + [0x98d3, 0x98d3], /* CJK Ideograph */ + [0x98d4, 0x98d4], /* CJK Ideograph */ + [0x98d5, 0x98d5], /* CJK Ideograph */ + [0x98d6, 0x98d6], /* CJK Ideograph */ + [0x98d7, 0x98d7], /* CJK Ideograph */ + [0x98d8, 0x98d8], /* CJK Ideograph */ + [0x98d9, 0x98d9], /* CJK Ideograph */ + [0x98da, 0x98da], /* CJK Ideograph */ + [0x98db, 0x98db], /* CJK Ideograph */ + [0x98dc, 0x98dc], /* CJK Ideograph */ + [0x98dd, 0x98dd], /* CJK Ideograph */ + [0x98de, 0x98de], /* CJK Ideograph */ + [0x98df, 0x98df], /* CJK Ideograph */ + [0x98e0, 0x98e0], /* CJK Ideograph */ + [0x98e1, 0x98e1], /* CJK Ideograph */ + [0x98e2, 0x98e2], /* CJK Ideograph */ + [0x98e3, 0x98e3], /* CJK Ideograph */ + [0x98e4, 0x98e4], /* CJK Ideograph */ + [0x98e5, 0x98e5], /* CJK Ideograph */ + [0x98e6, 0x98e6], /* CJK Ideograph */ + [0x98e7, 0x98e7], /* CJK Ideograph */ + [0x98e8, 0x98e8], /* CJK Ideograph */ + [0x98e9, 0x98e9], /* CJK Ideograph */ + [0x98ea, 0x98ea], /* CJK Ideograph */ + [0x98eb, 0x98eb], /* CJK Ideograph */ + [0x98ec, 0x98ec], /* CJK Ideograph */ + [0x98ed, 0x98ed], /* CJK Ideograph */ + [0x98ee, 0x98ee], /* CJK Ideograph */ + [0x98ef, 0x98ef], /* CJK Ideograph */ + [0x98f0, 0x98f0], /* CJK Ideograph */ + [0x98f1, 0x98f1], /* CJK Ideograph */ + [0x98f2, 0x98f2], /* CJK Ideograph */ + [0x98f3, 0x98f3], /* CJK Ideograph */ + [0x98f4, 0x98f4], /* CJK Ideograph */ + [0x98f5, 0x98f5], /* CJK Ideograph */ + [0x98f6, 0x98f6], /* CJK Ideograph */ + [0x98f7, 0x98f7], /* CJK Ideograph */ + [0x98f8, 0x98f8], /* CJK Ideograph */ + [0x98f9, 0x98f9], /* CJK Ideograph */ + [0x98fa, 0x98fa], /* CJK Ideograph */ + [0x98fb, 0x98fb], /* CJK Ideograph */ + [0x98fc, 0x98fc], /* CJK Ideograph */ + [0x98fd, 0x98fd], /* CJK Ideograph */ + [0x98fe, 0x98fe], /* CJK Ideograph */ + [0x98ff, 0x98ff], /* CJK Ideograph */ + [0x9900, 0x9900], /* CJK Ideograph */ + [0x9901, 0x9901], /* CJK Ideograph */ + [0x9902, 0x9902], /* CJK Ideograph */ + [0x9903, 0x9903], /* CJK Ideograph */ + [0x9904, 0x9904], /* CJK Ideograph */ + [0x9905, 0x9905], /* CJK Ideograph */ + [0x9906, 0x9906], /* CJK Ideograph */ + [0x9907, 0x9907], /* CJK Ideograph */ + [0x9908, 0x9908], /* CJK Ideograph */ + [0x9909, 0x9909], /* CJK Ideograph */ + [0x990a, 0x990a], /* CJK Ideograph */ + [0x990b, 0x990b], /* CJK Ideograph */ + [0x990c, 0x990c], /* CJK Ideograph */ + [0x990d, 0x990d], /* CJK Ideograph */ + [0x990e, 0x990e], /* CJK Ideograph */ + [0x990f, 0x990f], /* CJK Ideograph */ + [0x9910, 0x9910], /* CJK Ideograph */ + [0x9911, 0x9911], /* CJK Ideograph */ + [0x9912, 0x9912], /* CJK Ideograph */ + [0x9913, 0x9913], /* CJK Ideograph */ + [0x9914, 0x9914], /* CJK Ideograph */ + [0x9915, 0x9915], /* CJK Ideograph */ + [0x9916, 0x9916], /* CJK Ideograph */ + [0x9917, 0x9917], /* CJK Ideograph */ + [0x9918, 0x9918], /* CJK Ideograph */ + [0x9919, 0x9919], /* CJK Ideograph */ + [0x991a, 0x991a], /* CJK Ideograph */ + [0x991b, 0x991b], /* CJK Ideograph */ + [0x991c, 0x991c], /* CJK Ideograph */ + [0x991d, 0x991d], /* CJK Ideograph */ + [0x991e, 0x991e], /* CJK Ideograph */ + [0x991f, 0x991f], /* CJK Ideograph */ + [0x9920, 0x9920], /* CJK Ideograph */ + [0x9921, 0x9921], /* CJK Ideograph */ + [0x9922, 0x9922], /* CJK Ideograph */ + [0x9923, 0x9923], /* CJK Ideograph */ + [0x9924, 0x9924], /* CJK Ideograph */ + [0x9925, 0x9925], /* CJK Ideograph */ + [0x9926, 0x9926], /* CJK Ideograph */ + [0x9927, 0x9927], /* CJK Ideograph */ + [0x9928, 0x9928], /* CJK Ideograph */ + [0x9929, 0x9929], /* CJK Ideograph */ + [0x992a, 0x992a], /* CJK Ideograph */ + [0x992b, 0x992b], /* CJK Ideograph */ + [0x992c, 0x992c], /* CJK Ideograph */ + [0x992d, 0x992d], /* CJK Ideograph */ + [0x992e, 0x992e], /* CJK Ideograph */ + [0x992f, 0x992f], /* CJK Ideograph */ + [0x9930, 0x9930], /* CJK Ideograph */ + [0x9931, 0x9931], /* CJK Ideograph */ + [0x9932, 0x9932], /* CJK Ideograph */ + [0x9933, 0x9933], /* CJK Ideograph */ + [0x9934, 0x9934], /* CJK Ideograph */ + [0x9935, 0x9935], /* CJK Ideograph */ + [0x9936, 0x9936], /* CJK Ideograph */ + [0x9937, 0x9937], /* CJK Ideograph */ + [0x9938, 0x9938], /* CJK Ideograph */ + [0x9939, 0x9939], /* CJK Ideograph */ + [0x993a, 0x993a], /* CJK Ideograph */ + [0x993b, 0x993b], /* CJK Ideograph */ + [0x993c, 0x993c], /* CJK Ideograph */ + [0x993d, 0x993d], /* CJK Ideograph */ + [0x993e, 0x993e], /* CJK Ideograph */ + [0x993f, 0x993f], /* CJK Ideograph */ + [0x9940, 0x9940], /* CJK Ideograph */ + [0x9941, 0x9941], /* CJK Ideograph */ + [0x9942, 0x9942], /* CJK Ideograph */ + [0x9943, 0x9943], /* CJK Ideograph */ + [0x9944, 0x9944], /* CJK Ideograph */ + [0x9945, 0x9945], /* CJK Ideograph */ + [0x9946, 0x9946], /* CJK Ideograph */ + [0x9947, 0x9947], /* CJK Ideograph */ + [0x9948, 0x9948], /* CJK Ideograph */ + [0x9949, 0x9949], /* CJK Ideograph */ + [0x994a, 0x994a], /* CJK Ideograph */ + [0x994b, 0x994b], /* CJK Ideograph */ + [0x994c, 0x994c], /* CJK Ideograph */ + [0x994d, 0x994d], /* CJK Ideograph */ + [0x994e, 0x994e], /* CJK Ideograph */ + [0x994f, 0x994f], /* CJK Ideograph */ + [0x9950, 0x9950], /* CJK Ideograph */ + [0x9951, 0x9951], /* CJK Ideograph */ + [0x9952, 0x9952], /* CJK Ideograph */ + [0x9953, 0x9953], /* CJK Ideograph */ + [0x9954, 0x9954], /* CJK Ideograph */ + [0x9955, 0x9955], /* CJK Ideograph */ + [0x9956, 0x9956], /* CJK Ideograph */ + [0x9957, 0x9957], /* CJK Ideograph */ + [0x9958, 0x9958], /* CJK Ideograph */ + [0x9959, 0x9959], /* CJK Ideograph */ + [0x995a, 0x995a], /* CJK Ideograph */ + [0x995b, 0x995b], /* CJK Ideograph */ + [0x995c, 0x995c], /* CJK Ideograph */ + [0x995d, 0x995d], /* CJK Ideograph */ + [0x995e, 0x995e], /* CJK Ideograph */ + [0x995f, 0x995f], /* CJK Ideograph */ + [0x9960, 0x9960], /* CJK Ideograph */ + [0x9961, 0x9961], /* CJK Ideograph */ + [0x9962, 0x9962], /* CJK Ideograph */ + [0x9963, 0x9963], /* CJK Ideograph */ + [0x9964, 0x9964], /* CJK Ideograph */ + [0x9965, 0x9965], /* CJK Ideograph */ + [0x9966, 0x9966], /* CJK Ideograph */ + [0x9967, 0x9967], /* CJK Ideograph */ + [0x9968, 0x9968], /* CJK Ideograph */ + [0x9969, 0x9969], /* CJK Ideograph */ + [0x996a, 0x996a], /* CJK Ideograph */ + [0x996b, 0x996b], /* CJK Ideograph */ + [0x996c, 0x996c], /* CJK Ideograph */ + [0x996d, 0x996d], /* CJK Ideograph */ + [0x996e, 0x996e], /* CJK Ideograph */ + [0x996f, 0x996f], /* CJK Ideograph */ + [0x9970, 0x9970], /* CJK Ideograph */ + [0x9971, 0x9971], /* CJK Ideograph */ + [0x9972, 0x9972], /* CJK Ideograph */ + [0x9973, 0x9973], /* CJK Ideograph */ + [0x9974, 0x9974], /* CJK Ideograph */ + [0x9975, 0x9975], /* CJK Ideograph */ + [0x9976, 0x9976], /* CJK Ideograph */ + [0x9977, 0x9977], /* CJK Ideograph */ + [0x9978, 0x9978], /* CJK Ideograph */ + [0x9979, 0x9979], /* CJK Ideograph */ + [0x997a, 0x997a], /* CJK Ideograph */ + [0x997b, 0x997b], /* CJK Ideograph */ + [0x997c, 0x997c], /* CJK Ideograph */ + [0x997d, 0x997d], /* CJK Ideograph */ + [0x997e, 0x997e], /* CJK Ideograph */ + [0x997f, 0x997f], /* CJK Ideograph */ + [0x9980, 0x9980], /* CJK Ideograph */ + [0x9981, 0x9981], /* CJK Ideograph */ + [0x9982, 0x9982], /* CJK Ideograph */ + [0x9983, 0x9983], /* CJK Ideograph */ + [0x9984, 0x9984], /* CJK Ideograph */ + [0x9985, 0x9985], /* CJK Ideograph */ + [0x9986, 0x9986], /* CJK Ideograph */ + [0x9987, 0x9987], /* CJK Ideograph */ + [0x9988, 0x9988], /* CJK Ideograph */ + [0x9989, 0x9989], /* CJK Ideograph */ + [0x998a, 0x998a], /* CJK Ideograph */ + [0x998b, 0x998b], /* CJK Ideograph */ + [0x998c, 0x998c], /* CJK Ideograph */ + [0x998d, 0x998d], /* CJK Ideograph */ + [0x998e, 0x998e], /* CJK Ideograph */ + [0x998f, 0x998f], /* CJK Ideograph */ + [0x9990, 0x9990], /* CJK Ideograph */ + [0x9991, 0x9991], /* CJK Ideograph */ + [0x9992, 0x9992], /* CJK Ideograph */ + [0x9993, 0x9993], /* CJK Ideograph */ + [0x9994, 0x9994], /* CJK Ideograph */ + [0x9995, 0x9995], /* CJK Ideograph */ + [0x9996, 0x9996], /* CJK Ideograph */ + [0x9997, 0x9997], /* CJK Ideograph */ + [0x9998, 0x9998], /* CJK Ideograph */ + [0x9999, 0x9999], /* CJK Ideograph */ + [0x999a, 0x999a], /* CJK Ideograph */ + [0x999b, 0x999b], /* CJK Ideograph */ + [0x999c, 0x999c], /* CJK Ideograph */ + [0x999d, 0x999d], /* CJK Ideograph */ + [0x999e, 0x999e], /* CJK Ideograph */ + [0x999f, 0x999f], /* CJK Ideograph */ + [0x99a0, 0x99a0], /* CJK Ideograph */ + [0x99a1, 0x99a1], /* CJK Ideograph */ + [0x99a2, 0x99a2], /* CJK Ideograph */ + [0x99a3, 0x99a3], /* CJK Ideograph */ + [0x99a4, 0x99a4], /* CJK Ideograph */ + [0x99a5, 0x99a5], /* CJK Ideograph */ + [0x99a6, 0x99a6], /* CJK Ideograph */ + [0x99a7, 0x99a7], /* CJK Ideograph */ + [0x99a8, 0x99a8], /* CJK Ideograph */ + [0x99a9, 0x99a9], /* CJK Ideograph */ + [0x99aa, 0x99aa], /* CJK Ideograph */ + [0x99ab, 0x99ab], /* CJK Ideograph */ + [0x99ac, 0x99ac], /* CJK Ideograph */ + [0x99ad, 0x99ad], /* CJK Ideograph */ + [0x99ae, 0x99ae], /* CJK Ideograph */ + [0x99af, 0x99af], /* CJK Ideograph */ + [0x99b0, 0x99b0], /* CJK Ideograph */ + [0x99b1, 0x99b1], /* CJK Ideograph */ + [0x99b2, 0x99b2], /* CJK Ideograph */ + [0x99b3, 0x99b3], /* CJK Ideograph */ + [0x99b4, 0x99b4], /* CJK Ideograph */ + [0x99b5, 0x99b5], /* CJK Ideograph */ + [0x99b6, 0x99b6], /* CJK Ideograph */ + [0x99b7, 0x99b7], /* CJK Ideograph */ + [0x99b8, 0x99b8], /* CJK Ideograph */ + [0x99b9, 0x99b9], /* CJK Ideograph */ + [0x99ba, 0x99ba], /* CJK Ideograph */ + [0x99bb, 0x99bb], /* CJK Ideograph */ + [0x99bc, 0x99bc], /* CJK Ideograph */ + [0x99bd, 0x99bd], /* CJK Ideograph */ + [0x99be, 0x99be], /* CJK Ideograph */ + [0x99bf, 0x99bf], /* CJK Ideograph */ + [0x99c0, 0x99c0], /* CJK Ideograph */ + [0x99c1, 0x99c1], /* CJK Ideograph */ + [0x99c2, 0x99c2], /* CJK Ideograph */ + [0x99c3, 0x99c3], /* CJK Ideograph */ + [0x99c4, 0x99c4], /* CJK Ideograph */ + [0x99c5, 0x99c5], /* CJK Ideograph */ + [0x99c6, 0x99c6], /* CJK Ideograph */ + [0x99c7, 0x99c7], /* CJK Ideograph */ + [0x99c8, 0x99c8], /* CJK Ideograph */ + [0x99c9, 0x99c9], /* CJK Ideograph */ + [0x99ca, 0x99ca], /* CJK Ideograph */ + [0x99cb, 0x99cb], /* CJK Ideograph */ + [0x99cc, 0x99cc], /* CJK Ideograph */ + [0x99cd, 0x99cd], /* CJK Ideograph */ + [0x99ce, 0x99ce], /* CJK Ideograph */ + [0x99cf, 0x99cf], /* CJK Ideograph */ + [0x99d0, 0x99d0], /* CJK Ideograph */ + [0x99d1, 0x99d1], /* CJK Ideograph */ + [0x99d2, 0x99d2], /* CJK Ideograph */ + [0x99d3, 0x99d3], /* CJK Ideograph */ + [0x99d4, 0x99d4], /* CJK Ideograph */ + [0x99d5, 0x99d5], /* CJK Ideograph */ + [0x99d6, 0x99d6], /* CJK Ideograph */ + [0x99d7, 0x99d7], /* CJK Ideograph */ + [0x99d8, 0x99d8], /* CJK Ideograph */ + [0x99d9, 0x99d9], /* CJK Ideograph */ + [0x99da, 0x99da], /* CJK Ideograph */ + [0x99db, 0x99db], /* CJK Ideograph */ + [0x99dc, 0x99dc], /* CJK Ideograph */ + [0x99dd, 0x99dd], /* CJK Ideograph */ + [0x99de, 0x99de], /* CJK Ideograph */ + [0x99df, 0x99df], /* CJK Ideograph */ + [0x99e0, 0x99e0], /* CJK Ideograph */ + [0x99e1, 0x99e1], /* CJK Ideograph */ + [0x99e2, 0x99e2], /* CJK Ideograph */ + [0x99e3, 0x99e3], /* CJK Ideograph */ + [0x99e4, 0x99e4], /* CJK Ideograph */ + [0x99e5, 0x99e5], /* CJK Ideograph */ + [0x99e6, 0x99e6], /* CJK Ideograph */ + [0x99e7, 0x99e7], /* CJK Ideograph */ + [0x99e8, 0x99e8], /* CJK Ideograph */ + [0x99e9, 0x99e9], /* CJK Ideograph */ + [0x99ea, 0x99ea], /* CJK Ideograph */ + [0x99eb, 0x99eb], /* CJK Ideograph */ + [0x99ec, 0x99ec], /* CJK Ideograph */ + [0x99ed, 0x99ed], /* CJK Ideograph */ + [0x99ee, 0x99ee], /* CJK Ideograph */ + [0x99ef, 0x99ef], /* CJK Ideograph */ + [0x99f0, 0x99f0], /* CJK Ideograph */ + [0x99f1, 0x99f1], /* CJK Ideograph */ + [0x99f2, 0x99f2], /* CJK Ideograph */ + [0x99f3, 0x99f3], /* CJK Ideograph */ + [0x99f4, 0x99f4], /* CJK Ideograph */ + [0x99f5, 0x99f5], /* CJK Ideograph */ + [0x99f6, 0x99f6], /* CJK Ideograph */ + [0x99f7, 0x99f7], /* CJK Ideograph */ + [0x99f8, 0x99f8], /* CJK Ideograph */ + [0x99f9, 0x99f9], /* CJK Ideograph */ + [0x99fa, 0x99fa], /* CJK Ideograph */ + [0x99fb, 0x99fb], /* CJK Ideograph */ + [0x99fc, 0x99fc], /* CJK Ideograph */ + [0x99fd, 0x99fd], /* CJK Ideograph */ + [0x99fe, 0x99fe], /* CJK Ideograph */ + [0x99ff, 0x99ff], /* CJK Ideograph */ + [0x9a00, 0x9a00], /* CJK Ideograph */ + [0x9a01, 0x9a01], /* CJK Ideograph */ + [0x9a02, 0x9a02], /* CJK Ideograph */ + [0x9a03, 0x9a03], /* CJK Ideograph */ + [0x9a04, 0x9a04], /* CJK Ideograph */ + [0x9a05, 0x9a05], /* CJK Ideograph */ + [0x9a06, 0x9a06], /* CJK Ideograph */ + [0x9a07, 0x9a07], /* CJK Ideograph */ + [0x9a08, 0x9a08], /* CJK Ideograph */ + [0x9a09, 0x9a09], /* CJK Ideograph */ + [0x9a0a, 0x9a0a], /* CJK Ideograph */ + [0x9a0b, 0x9a0b], /* CJK Ideograph */ + [0x9a0c, 0x9a0c], /* CJK Ideograph */ + [0x9a0d, 0x9a0d], /* CJK Ideograph */ + [0x9a0e, 0x9a0e], /* CJK Ideograph */ + [0x9a0f, 0x9a0f], /* CJK Ideograph */ + [0x9a10, 0x9a10], /* CJK Ideograph */ + [0x9a11, 0x9a11], /* CJK Ideograph */ + [0x9a12, 0x9a12], /* CJK Ideograph */ + [0x9a13, 0x9a13], /* CJK Ideograph */ + [0x9a14, 0x9a14], /* CJK Ideograph */ + [0x9a15, 0x9a15], /* CJK Ideograph */ + [0x9a16, 0x9a16], /* CJK Ideograph */ + [0x9a17, 0x9a17], /* CJK Ideograph */ + [0x9a18, 0x9a18], /* CJK Ideograph */ + [0x9a19, 0x9a19], /* CJK Ideograph */ + [0x9a1a, 0x9a1a], /* CJK Ideograph */ + [0x9a1b, 0x9a1b], /* CJK Ideograph */ + [0x9a1c, 0x9a1c], /* CJK Ideograph */ + [0x9a1d, 0x9a1d], /* CJK Ideograph */ + [0x9a1e, 0x9a1e], /* CJK Ideograph */ + [0x9a1f, 0x9a1f], /* CJK Ideograph */ + [0x9a20, 0x9a20], /* CJK Ideograph */ + [0x9a21, 0x9a21], /* CJK Ideograph */ + [0x9a22, 0x9a22], /* CJK Ideograph */ + [0x9a23, 0x9a23], /* CJK Ideograph */ + [0x9a24, 0x9a24], /* CJK Ideograph */ + [0x9a25, 0x9a25], /* CJK Ideograph */ + [0x9a26, 0x9a26], /* CJK Ideograph */ + [0x9a27, 0x9a27], /* CJK Ideograph */ + [0x9a28, 0x9a28], /* CJK Ideograph */ + [0x9a29, 0x9a29], /* CJK Ideograph */ + [0x9a2a, 0x9a2a], /* CJK Ideograph */ + [0x9a2b, 0x9a2b], /* CJK Ideograph */ + [0x9a2c, 0x9a2c], /* CJK Ideograph */ + [0x9a2d, 0x9a2d], /* CJK Ideograph */ + [0x9a2e, 0x9a2e], /* CJK Ideograph */ + [0x9a2f, 0x9a2f], /* CJK Ideograph */ + [0x9a30, 0x9a30], /* CJK Ideograph */ + [0x9a31, 0x9a31], /* CJK Ideograph */ + [0x9a32, 0x9a32], /* CJK Ideograph */ + [0x9a33, 0x9a33], /* CJK Ideograph */ + [0x9a34, 0x9a34], /* CJK Ideograph */ + [0x9a35, 0x9a35], /* CJK Ideograph */ + [0x9a36, 0x9a36], /* CJK Ideograph */ + [0x9a37, 0x9a37], /* CJK Ideograph */ + [0x9a38, 0x9a38], /* CJK Ideograph */ + [0x9a39, 0x9a39], /* CJK Ideograph */ + [0x9a3a, 0x9a3a], /* CJK Ideograph */ + [0x9a3b, 0x9a3b], /* CJK Ideograph */ + [0x9a3c, 0x9a3c], /* CJK Ideograph */ + [0x9a3d, 0x9a3d], /* CJK Ideograph */ + [0x9a3e, 0x9a3e], /* CJK Ideograph */ + [0x9a3f, 0x9a3f], /* CJK Ideograph */ + [0x9a40, 0x9a40], /* CJK Ideograph */ + [0x9a41, 0x9a41], /* CJK Ideograph */ + [0x9a42, 0x9a42], /* CJK Ideograph */ + [0x9a43, 0x9a43], /* CJK Ideograph */ + [0x9a44, 0x9a44], /* CJK Ideograph */ + [0x9a45, 0x9a45], /* CJK Ideograph */ + [0x9a46, 0x9a46], /* CJK Ideograph */ + [0x9a47, 0x9a47], /* CJK Ideograph */ + [0x9a48, 0x9a48], /* CJK Ideograph */ + [0x9a49, 0x9a49], /* CJK Ideograph */ + [0x9a4a, 0x9a4a], /* CJK Ideograph */ + [0x9a4b, 0x9a4b], /* CJK Ideograph */ + [0x9a4c, 0x9a4c], /* CJK Ideograph */ + [0x9a4d, 0x9a4d], /* CJK Ideograph */ + [0x9a4e, 0x9a4e], /* CJK Ideograph */ + [0x9a4f, 0x9a4f], /* CJK Ideograph */ + [0x9a50, 0x9a50], /* CJK Ideograph */ + [0x9a51, 0x9a51], /* CJK Ideograph */ + [0x9a52, 0x9a52], /* CJK Ideograph */ + [0x9a53, 0x9a53], /* CJK Ideograph */ + [0x9a54, 0x9a54], /* CJK Ideograph */ + [0x9a55, 0x9a55], /* CJK Ideograph */ + [0x9a56, 0x9a56], /* CJK Ideograph */ + [0x9a57, 0x9a57], /* CJK Ideograph */ + [0x9a58, 0x9a58], /* CJK Ideograph */ + [0x9a59, 0x9a59], /* CJK Ideograph */ + [0x9a5a, 0x9a5a], /* CJK Ideograph */ + [0x9a5b, 0x9a5b], /* CJK Ideograph */ + [0x9a5c, 0x9a5c], /* CJK Ideograph */ + [0x9a5d, 0x9a5d], /* CJK Ideograph */ + [0x9a5e, 0x9a5e], /* CJK Ideograph */ + [0x9a5f, 0x9a5f], /* CJK Ideograph */ + [0x9a60, 0x9a60], /* CJK Ideograph */ + [0x9a61, 0x9a61], /* CJK Ideograph */ + [0x9a62, 0x9a62], /* CJK Ideograph */ + [0x9a63, 0x9a63], /* CJK Ideograph */ + [0x9a64, 0x9a64], /* CJK Ideograph */ + [0x9a65, 0x9a65], /* CJK Ideograph */ + [0x9a66, 0x9a66], /* CJK Ideograph */ + [0x9a67, 0x9a67], /* CJK Ideograph */ + [0x9a68, 0x9a68], /* CJK Ideograph */ + [0x9a69, 0x9a69], /* CJK Ideograph */ + [0x9a6a, 0x9a6a], /* CJK Ideograph */ + [0x9a6b, 0x9a6b], /* CJK Ideograph */ + [0x9a6c, 0x9a6c], /* CJK Ideograph */ + [0x9a6d, 0x9a6d], /* CJK Ideograph */ + [0x9a6e, 0x9a6e], /* CJK Ideograph */ + [0x9a6f, 0x9a6f], /* CJK Ideograph */ + [0x9a70, 0x9a70], /* CJK Ideograph */ + [0x9a71, 0x9a71], /* CJK Ideograph */ + [0x9a72, 0x9a72], /* CJK Ideograph */ + [0x9a73, 0x9a73], /* CJK Ideograph */ + [0x9a74, 0x9a74], /* CJK Ideograph */ + [0x9a75, 0x9a75], /* CJK Ideograph */ + [0x9a76, 0x9a76], /* CJK Ideograph */ + [0x9a77, 0x9a77], /* CJK Ideograph */ + [0x9a78, 0x9a78], /* CJK Ideograph */ + [0x9a79, 0x9a79], /* CJK Ideograph */ + [0x9a7a, 0x9a7a], /* CJK Ideograph */ + [0x9a7b, 0x9a7b], /* CJK Ideograph */ + [0x9a7c, 0x9a7c], /* CJK Ideograph */ + [0x9a7d, 0x9a7d], /* CJK Ideograph */ + [0x9a7e, 0x9a7e], /* CJK Ideograph */ + [0x9a7f, 0x9a7f], /* CJK Ideograph */ + [0x9a80, 0x9a80], /* CJK Ideograph */ + [0x9a81, 0x9a81], /* CJK Ideograph */ + [0x9a82, 0x9a82], /* CJK Ideograph */ + [0x9a83, 0x9a83], /* CJK Ideograph */ + [0x9a84, 0x9a84], /* CJK Ideograph */ + [0x9a85, 0x9a85], /* CJK Ideograph */ + [0x9a86, 0x9a86], /* CJK Ideograph */ + [0x9a87, 0x9a87], /* CJK Ideograph */ + [0x9a88, 0x9a88], /* CJK Ideograph */ + [0x9a89, 0x9a89], /* CJK Ideograph */ + [0x9a8a, 0x9a8a], /* CJK Ideograph */ + [0x9a8b, 0x9a8b], /* CJK Ideograph */ + [0x9a8c, 0x9a8c], /* CJK Ideograph */ + [0x9a8d, 0x9a8d], /* CJK Ideograph */ + [0x9a8e, 0x9a8e], /* CJK Ideograph */ + [0x9a8f, 0x9a8f], /* CJK Ideograph */ + [0x9a90, 0x9a90], /* CJK Ideograph */ + [0x9a91, 0x9a91], /* CJK Ideograph */ + [0x9a92, 0x9a92], /* CJK Ideograph */ + [0x9a93, 0x9a93], /* CJK Ideograph */ + [0x9a94, 0x9a94], /* CJK Ideograph */ + [0x9a95, 0x9a95], /* CJK Ideograph */ + [0x9a96, 0x9a96], /* CJK Ideograph */ + [0x9a97, 0x9a97], /* CJK Ideograph */ + [0x9a98, 0x9a98], /* CJK Ideograph */ + [0x9a99, 0x9a99], /* CJK Ideograph */ + [0x9a9a, 0x9a9a], /* CJK Ideograph */ + [0x9a9b, 0x9a9b], /* CJK Ideograph */ + [0x9a9c, 0x9a9c], /* CJK Ideograph */ + [0x9a9d, 0x9a9d], /* CJK Ideograph */ + [0x9a9e, 0x9a9e], /* CJK Ideograph */ + [0x9a9f, 0x9a9f], /* CJK Ideograph */ + [0x9aa0, 0x9aa0], /* CJK Ideograph */ + [0x9aa1, 0x9aa1], /* CJK Ideograph */ + [0x9aa2, 0x9aa2], /* CJK Ideograph */ + [0x9aa3, 0x9aa3], /* CJK Ideograph */ + [0x9aa4, 0x9aa4], /* CJK Ideograph */ + [0x9aa5, 0x9aa5], /* CJK Ideograph */ + [0x9aa6, 0x9aa6], /* CJK Ideograph */ + [0x9aa7, 0x9aa7], /* CJK Ideograph */ + [0x9aa8, 0x9aa8], /* CJK Ideograph */ + [0x9aa9, 0x9aa9], /* CJK Ideograph */ + [0x9aaa, 0x9aaa], /* CJK Ideograph */ + [0x9aab, 0x9aab], /* CJK Ideograph */ + [0x9aac, 0x9aac], /* CJK Ideograph */ + [0x9aad, 0x9aad], /* CJK Ideograph */ + [0x9aae, 0x9aae], /* CJK Ideograph */ + [0x9aaf, 0x9aaf], /* CJK Ideograph */ + [0x9ab0, 0x9ab0], /* CJK Ideograph */ + [0x9ab1, 0x9ab1], /* CJK Ideograph */ + [0x9ab2, 0x9ab2], /* CJK Ideograph */ + [0x9ab3, 0x9ab3], /* CJK Ideograph */ + [0x9ab4, 0x9ab4], /* CJK Ideograph */ + [0x9ab5, 0x9ab5], /* CJK Ideograph */ + [0x9ab6, 0x9ab6], /* CJK Ideograph */ + [0x9ab7, 0x9ab7], /* CJK Ideograph */ + [0x9ab8, 0x9ab8], /* CJK Ideograph */ + [0x9ab9, 0x9ab9], /* CJK Ideograph */ + [0x9aba, 0x9aba], /* CJK Ideograph */ + [0x9abb, 0x9abb], /* CJK Ideograph */ + [0x9abc, 0x9abc], /* CJK Ideograph */ + [0x9abd, 0x9abd], /* CJK Ideograph */ + [0x9abe, 0x9abe], /* CJK Ideograph */ + [0x9abf, 0x9abf], /* CJK Ideograph */ + [0x9ac0, 0x9ac0], /* CJK Ideograph */ + [0x9ac1, 0x9ac1], /* CJK Ideograph */ + [0x9ac2, 0x9ac2], /* CJK Ideograph */ + [0x9ac3, 0x9ac3], /* CJK Ideograph */ + [0x9ac4, 0x9ac4], /* CJK Ideograph */ + [0x9ac5, 0x9ac5], /* CJK Ideograph */ + [0x9ac6, 0x9ac6], /* CJK Ideograph */ + [0x9ac7, 0x9ac7], /* CJK Ideograph */ + [0x9ac8, 0x9ac8], /* CJK Ideograph */ + [0x9ac9, 0x9ac9], /* CJK Ideograph */ + [0x9aca, 0x9aca], /* CJK Ideograph */ + [0x9acb, 0x9acb], /* CJK Ideograph */ + [0x9acc, 0x9acc], /* CJK Ideograph */ + [0x9acd, 0x9acd], /* CJK Ideograph */ + [0x9ace, 0x9ace], /* CJK Ideograph */ + [0x9acf, 0x9acf], /* CJK Ideograph */ + [0x9ad0, 0x9ad0], /* CJK Ideograph */ + [0x9ad1, 0x9ad1], /* CJK Ideograph */ + [0x9ad2, 0x9ad2], /* CJK Ideograph */ + [0x9ad3, 0x9ad3], /* CJK Ideograph */ + [0x9ad4, 0x9ad4], /* CJK Ideograph */ + [0x9ad5, 0x9ad5], /* CJK Ideograph */ + [0x9ad6, 0x9ad6], /* CJK Ideograph */ + [0x9ad7, 0x9ad7], /* CJK Ideograph */ + [0x9ad8, 0x9ad8], /* CJK Ideograph */ + [0x9ad9, 0x9ad9], /* CJK Ideograph */ + [0x9ada, 0x9ada], /* CJK Ideograph */ + [0x9adb, 0x9adb], /* CJK Ideograph */ + [0x9adc, 0x9adc], /* CJK Ideograph */ + [0x9add, 0x9add], /* CJK Ideograph */ + [0x9ade, 0x9ade], /* CJK Ideograph */ + [0x9adf, 0x9adf], /* CJK Ideograph */ + [0x9ae0, 0x9ae0], /* CJK Ideograph */ + [0x9ae1, 0x9ae1], /* CJK Ideograph */ + [0x9ae2, 0x9ae2], /* CJK Ideograph */ + [0x9ae3, 0x9ae3], /* CJK Ideograph */ + [0x9ae4, 0x9ae4], /* CJK Ideograph */ + [0x9ae5, 0x9ae5], /* CJK Ideograph */ + [0x9ae6, 0x9ae6], /* CJK Ideograph */ + [0x9ae7, 0x9ae7], /* CJK Ideograph */ + [0x9ae8, 0x9ae8], /* CJK Ideograph */ + [0x9ae9, 0x9ae9], /* CJK Ideograph */ + [0x9aea, 0x9aea], /* CJK Ideograph */ + [0x9aeb, 0x9aeb], /* CJK Ideograph */ + [0x9aec, 0x9aec], /* CJK Ideograph */ + [0x9aed, 0x9aed], /* CJK Ideograph */ + [0x9aee, 0x9aee], /* CJK Ideograph */ + [0x9aef, 0x9aef], /* CJK Ideograph */ + [0x9af0, 0x9af0], /* CJK Ideograph */ + [0x9af1, 0x9af1], /* CJK Ideograph */ + [0x9af2, 0x9af2], /* CJK Ideograph */ + [0x9af3, 0x9af3], /* CJK Ideograph */ + [0x9af4, 0x9af4], /* CJK Ideograph */ + [0x9af5, 0x9af5], /* CJK Ideograph */ + [0x9af6, 0x9af6], /* CJK Ideograph */ + [0x9af7, 0x9af7], /* CJK Ideograph */ + [0x9af8, 0x9af8], /* CJK Ideograph */ + [0x9af9, 0x9af9], /* CJK Ideograph */ + [0x9afa, 0x9afa], /* CJK Ideograph */ + [0x9afb, 0x9afb], /* CJK Ideograph */ + [0x9afc, 0x9afc], /* CJK Ideograph */ + [0x9afd, 0x9afd], /* CJK Ideograph */ + [0x9afe, 0x9afe], /* CJK Ideograph */ + [0x9aff, 0x9aff], /* CJK Ideograph */ + [0x9b00, 0x9b00], /* CJK Ideograph */ + [0x9b01, 0x9b01], /* CJK Ideograph */ + [0x9b02, 0x9b02], /* CJK Ideograph */ + [0x9b03, 0x9b03], /* CJK Ideograph */ + [0x9b04, 0x9b04], /* CJK Ideograph */ + [0x9b05, 0x9b05], /* CJK Ideograph */ + [0x9b06, 0x9b06], /* CJK Ideograph */ + [0x9b07, 0x9b07], /* CJK Ideograph */ + [0x9b08, 0x9b08], /* CJK Ideograph */ + [0x9b09, 0x9b09], /* CJK Ideograph */ + [0x9b0a, 0x9b0a], /* CJK Ideograph */ + [0x9b0b, 0x9b0b], /* CJK Ideograph */ + [0x9b0c, 0x9b0c], /* CJK Ideograph */ + [0x9b0d, 0x9b0d], /* CJK Ideograph */ + [0x9b0e, 0x9b0e], /* CJK Ideograph */ + [0x9b0f, 0x9b0f], /* CJK Ideograph */ + [0x9b10, 0x9b10], /* CJK Ideograph */ + [0x9b11, 0x9b11], /* CJK Ideograph */ + [0x9b12, 0x9b12], /* CJK Ideograph */ + [0x9b13, 0x9b13], /* CJK Ideograph */ + [0x9b14, 0x9b14], /* CJK Ideograph */ + [0x9b15, 0x9b15], /* CJK Ideograph */ + [0x9b16, 0x9b16], /* CJK Ideograph */ + [0x9b17, 0x9b17], /* CJK Ideograph */ + [0x9b18, 0x9b18], /* CJK Ideograph */ + [0x9b19, 0x9b19], /* CJK Ideograph */ + [0x9b1a, 0x9b1a], /* CJK Ideograph */ + [0x9b1b, 0x9b1b], /* CJK Ideograph */ + [0x9b1c, 0x9b1c], /* CJK Ideograph */ + [0x9b1d, 0x9b1d], /* CJK Ideograph */ + [0x9b1e, 0x9b1e], /* CJK Ideograph */ + [0x9b1f, 0x9b1f], /* CJK Ideograph */ + [0x9b20, 0x9b20], /* CJK Ideograph */ + [0x9b21, 0x9b21], /* CJK Ideograph */ + [0x9b22, 0x9b22], /* CJK Ideograph */ + [0x9b23, 0x9b23], /* CJK Ideograph */ + [0x9b24, 0x9b24], /* CJK Ideograph */ + [0x9b25, 0x9b25], /* CJK Ideograph */ + [0x9b26, 0x9b26], /* CJK Ideograph */ + [0x9b27, 0x9b27], /* CJK Ideograph */ + [0x9b28, 0x9b28], /* CJK Ideograph */ + [0x9b29, 0x9b29], /* CJK Ideograph */ + [0x9b2a, 0x9b2a], /* CJK Ideograph */ + [0x9b2b, 0x9b2b], /* CJK Ideograph */ + [0x9b2c, 0x9b2c], /* CJK Ideograph */ + [0x9b2d, 0x9b2d], /* CJK Ideograph */ + [0x9b2e, 0x9b2e], /* CJK Ideograph */ + [0x9b2f, 0x9b2f], /* CJK Ideograph */ + [0x9b30, 0x9b30], /* CJK Ideograph */ + [0x9b31, 0x9b31], /* CJK Ideograph */ + [0x9b32, 0x9b32], /* CJK Ideograph */ + [0x9b33, 0x9b33], /* CJK Ideograph */ + [0x9b34, 0x9b34], /* CJK Ideograph */ + [0x9b35, 0x9b35], /* CJK Ideograph */ + [0x9b36, 0x9b36], /* CJK Ideograph */ + [0x9b37, 0x9b37], /* CJK Ideograph */ + [0x9b38, 0x9b38], /* CJK Ideograph */ + [0x9b39, 0x9b39], /* CJK Ideograph */ + [0x9b3a, 0x9b3a], /* CJK Ideograph */ + [0x9b3b, 0x9b3b], /* CJK Ideograph */ + [0x9b3c, 0x9b3c], /* CJK Ideograph */ + [0x9b3d, 0x9b3d], /* CJK Ideograph */ + [0x9b3e, 0x9b3e], /* CJK Ideograph */ + [0x9b3f, 0x9b3f], /* CJK Ideograph */ + [0x9b40, 0x9b40], /* CJK Ideograph */ + [0x9b41, 0x9b41], /* CJK Ideograph */ + [0x9b42, 0x9b42], /* CJK Ideograph */ + [0x9b43, 0x9b43], /* CJK Ideograph */ + [0x9b44, 0x9b44], /* CJK Ideograph */ + [0x9b45, 0x9b45], /* CJK Ideograph */ + [0x9b46, 0x9b46], /* CJK Ideograph */ + [0x9b47, 0x9b47], /* CJK Ideograph */ + [0x9b48, 0x9b48], /* CJK Ideograph */ + [0x9b49, 0x9b49], /* CJK Ideograph */ + [0x9b4a, 0x9b4a], /* CJK Ideograph */ + [0x9b4b, 0x9b4b], /* CJK Ideograph */ + [0x9b4c, 0x9b4c], /* CJK Ideograph */ + [0x9b4d, 0x9b4d], /* CJK Ideograph */ + [0x9b4e, 0x9b4e], /* CJK Ideograph */ + [0x9b4f, 0x9b4f], /* CJK Ideograph */ + [0x9b50, 0x9b50], /* CJK Ideograph */ + [0x9b51, 0x9b51], /* CJK Ideograph */ + [0x9b52, 0x9b52], /* CJK Ideograph */ + [0x9b53, 0x9b53], /* CJK Ideograph */ + [0x9b54, 0x9b54], /* CJK Ideograph */ + [0x9b55, 0x9b55], /* CJK Ideograph */ + [0x9b56, 0x9b56], /* CJK Ideograph */ + [0x9b57, 0x9b57], /* CJK Ideograph */ + [0x9b58, 0x9b58], /* CJK Ideograph */ + [0x9b59, 0x9b59], /* CJK Ideograph */ + [0x9b5a, 0x9b5a], /* CJK Ideograph */ + [0x9b5b, 0x9b5b], /* CJK Ideograph */ + [0x9b5c, 0x9b5c], /* CJK Ideograph */ + [0x9b5d, 0x9b5d], /* CJK Ideograph */ + [0x9b5e, 0x9b5e], /* CJK Ideograph */ + [0x9b5f, 0x9b5f], /* CJK Ideograph */ + [0x9b60, 0x9b60], /* CJK Ideograph */ + [0x9b61, 0x9b61], /* CJK Ideograph */ + [0x9b62, 0x9b62], /* CJK Ideograph */ + [0x9b63, 0x9b63], /* CJK Ideograph */ + [0x9b64, 0x9b64], /* CJK Ideograph */ + [0x9b65, 0x9b65], /* CJK Ideograph */ + [0x9b66, 0x9b66], /* CJK Ideograph */ + [0x9b67, 0x9b67], /* CJK Ideograph */ + [0x9b68, 0x9b68], /* CJK Ideograph */ + [0x9b69, 0x9b69], /* CJK Ideograph */ + [0x9b6a, 0x9b6a], /* CJK Ideograph */ + [0x9b6b, 0x9b6b], /* CJK Ideograph */ + [0x9b6c, 0x9b6c], /* CJK Ideograph */ + [0x9b6d, 0x9b6d], /* CJK Ideograph */ + [0x9b6e, 0x9b6e], /* CJK Ideograph */ + [0x9b6f, 0x9b6f], /* CJK Ideograph */ + [0x9b70, 0x9b70], /* CJK Ideograph */ + [0x9b71, 0x9b71], /* CJK Ideograph */ + [0x9b72, 0x9b72], /* CJK Ideograph */ + [0x9b73, 0x9b73], /* CJK Ideograph */ + [0x9b74, 0x9b74], /* CJK Ideograph */ + [0x9b75, 0x9b75], /* CJK Ideograph */ + [0x9b76, 0x9b76], /* CJK Ideograph */ + [0x9b77, 0x9b77], /* CJK Ideograph */ + [0x9b78, 0x9b78], /* CJK Ideograph */ + [0x9b79, 0x9b79], /* CJK Ideograph */ + [0x9b7a, 0x9b7a], /* CJK Ideograph */ + [0x9b7b, 0x9b7b], /* CJK Ideograph */ + [0x9b7c, 0x9b7c], /* CJK Ideograph */ + [0x9b7d, 0x9b7d], /* CJK Ideograph */ + [0x9b7e, 0x9b7e], /* CJK Ideograph */ + [0x9b7f, 0x9b7f], /* CJK Ideograph */ + [0x9b80, 0x9b80], /* CJK Ideograph */ + [0x9b81, 0x9b81], /* CJK Ideograph */ + [0x9b82, 0x9b82], /* CJK Ideograph */ + [0x9b83, 0x9b83], /* CJK Ideograph */ + [0x9b84, 0x9b84], /* CJK Ideograph */ + [0x9b85, 0x9b85], /* CJK Ideograph */ + [0x9b86, 0x9b86], /* CJK Ideograph */ + [0x9b87, 0x9b87], /* CJK Ideograph */ + [0x9b88, 0x9b88], /* CJK Ideograph */ + [0x9b89, 0x9b89], /* CJK Ideograph */ + [0x9b8a, 0x9b8a], /* CJK Ideograph */ + [0x9b8b, 0x9b8b], /* CJK Ideograph */ + [0x9b8c, 0x9b8c], /* CJK Ideograph */ + [0x9b8d, 0x9b8d], /* CJK Ideograph */ + [0x9b8e, 0x9b8e], /* CJK Ideograph */ + [0x9b8f, 0x9b8f], /* CJK Ideograph */ + [0x9b90, 0x9b90], /* CJK Ideograph */ + [0x9b91, 0x9b91], /* CJK Ideograph */ + [0x9b92, 0x9b92], /* CJK Ideograph */ + [0x9b93, 0x9b93], /* CJK Ideograph */ + [0x9b94, 0x9b94], /* CJK Ideograph */ + [0x9b95, 0x9b95], /* CJK Ideograph */ + [0x9b96, 0x9b96], /* CJK Ideograph */ + [0x9b97, 0x9b97], /* CJK Ideograph */ + [0x9b98, 0x9b98], /* CJK Ideograph */ + [0x9b99, 0x9b99], /* CJK Ideograph */ + [0x9b9a, 0x9b9a], /* CJK Ideograph */ + [0x9b9b, 0x9b9b], /* CJK Ideograph */ + [0x9b9c, 0x9b9c], /* CJK Ideograph */ + [0x9b9d, 0x9b9d], /* CJK Ideograph */ + [0x9b9e, 0x9b9e], /* CJK Ideograph */ + [0x9b9f, 0x9b9f], /* CJK Ideograph */ + [0x9ba0, 0x9ba0], /* CJK Ideograph */ + [0x9ba1, 0x9ba1], /* CJK Ideograph */ + [0x9ba2, 0x9ba2], /* CJK Ideograph */ + [0x9ba3, 0x9ba3], /* CJK Ideograph */ + [0x9ba4, 0x9ba4], /* CJK Ideograph */ + [0x9ba5, 0x9ba5], /* CJK Ideograph */ + [0x9ba6, 0x9ba6], /* CJK Ideograph */ + [0x9ba7, 0x9ba7], /* CJK Ideograph */ + [0x9ba8, 0x9ba8], /* CJK Ideograph */ + [0x9ba9, 0x9ba9], /* CJK Ideograph */ + [0x9baa, 0x9baa], /* CJK Ideograph */ + [0x9bab, 0x9bab], /* CJK Ideograph */ + [0x9bac, 0x9bac], /* CJK Ideograph */ + [0x9bad, 0x9bad], /* CJK Ideograph */ + [0x9bae, 0x9bae], /* CJK Ideograph */ + [0x9baf, 0x9baf], /* CJK Ideograph */ + [0x9bb0, 0x9bb0], /* CJK Ideograph */ + [0x9bb1, 0x9bb1], /* CJK Ideograph */ + [0x9bb2, 0x9bb2], /* CJK Ideograph */ + [0x9bb3, 0x9bb3], /* CJK Ideograph */ + [0x9bb4, 0x9bb4], /* CJK Ideograph */ + [0x9bb5, 0x9bb5], /* CJK Ideograph */ + [0x9bb6, 0x9bb6], /* CJK Ideograph */ + [0x9bb7, 0x9bb7], /* CJK Ideograph */ + [0x9bb8, 0x9bb8], /* CJK Ideograph */ + [0x9bb9, 0x9bb9], /* CJK Ideograph */ + [0x9bba, 0x9bba], /* CJK Ideograph */ + [0x9bbb, 0x9bbb], /* CJK Ideograph */ + [0x9bbc, 0x9bbc], /* CJK Ideograph */ + [0x9bbd, 0x9bbd], /* CJK Ideograph */ + [0x9bbe, 0x9bbe], /* CJK Ideograph */ + [0x9bbf, 0x9bbf], /* CJK Ideograph */ + [0x9bc0, 0x9bc0], /* CJK Ideograph */ + [0x9bc1, 0x9bc1], /* CJK Ideograph */ + [0x9bc2, 0x9bc2], /* CJK Ideograph */ + [0x9bc3, 0x9bc3], /* CJK Ideograph */ + [0x9bc4, 0x9bc4], /* CJK Ideograph */ + [0x9bc5, 0x9bc5], /* CJK Ideograph */ + [0x9bc6, 0x9bc6], /* CJK Ideograph */ + [0x9bc7, 0x9bc7], /* CJK Ideograph */ + [0x9bc8, 0x9bc8], /* CJK Ideograph */ + [0x9bc9, 0x9bc9], /* CJK Ideograph */ + [0x9bca, 0x9bca], /* CJK Ideograph */ + [0x9bcb, 0x9bcb], /* CJK Ideograph */ + [0x9bcc, 0x9bcc], /* CJK Ideograph */ + [0x9bcd, 0x9bcd], /* CJK Ideograph */ + [0x9bce, 0x9bce], /* CJK Ideograph */ + [0x9bcf, 0x9bcf], /* CJK Ideograph */ + [0x9bd0, 0x9bd0], /* CJK Ideograph */ + [0x9bd1, 0x9bd1], /* CJK Ideograph */ + [0x9bd2, 0x9bd2], /* CJK Ideograph */ + [0x9bd3, 0x9bd3], /* CJK Ideograph */ + [0x9bd4, 0x9bd4], /* CJK Ideograph */ + [0x9bd5, 0x9bd5], /* CJK Ideograph */ + [0x9bd6, 0x9bd6], /* CJK Ideograph */ + [0x9bd7, 0x9bd7], /* CJK Ideograph */ + [0x9bd8, 0x9bd8], /* CJK Ideograph */ + [0x9bd9, 0x9bd9], /* CJK Ideograph */ + [0x9bda, 0x9bda], /* CJK Ideograph */ + [0x9bdb, 0x9bdb], /* CJK Ideograph */ + [0x9bdc, 0x9bdc], /* CJK Ideograph */ + [0x9bdd, 0x9bdd], /* CJK Ideograph */ + [0x9bde, 0x9bde], /* CJK Ideograph */ + [0x9bdf, 0x9bdf], /* CJK Ideograph */ + [0x9be0, 0x9be0], /* CJK Ideograph */ + [0x9be1, 0x9be1], /* CJK Ideograph */ + [0x9be2, 0x9be2], /* CJK Ideograph */ + [0x9be3, 0x9be3], /* CJK Ideograph */ + [0x9be4, 0x9be4], /* CJK Ideograph */ + [0x9be5, 0x9be5], /* CJK Ideograph */ + [0x9be6, 0x9be6], /* CJK Ideograph */ + [0x9be7, 0x9be7], /* CJK Ideograph */ + [0x9be8, 0x9be8], /* CJK Ideograph */ + [0x9be9, 0x9be9], /* CJK Ideograph */ + [0x9bea, 0x9bea], /* CJK Ideograph */ + [0x9beb, 0x9beb], /* CJK Ideograph */ + [0x9bec, 0x9bec], /* CJK Ideograph */ + [0x9bed, 0x9bed], /* CJK Ideograph */ + [0x9bee, 0x9bee], /* CJK Ideograph */ + [0x9bef, 0x9bef], /* CJK Ideograph */ + [0x9bf0, 0x9bf0], /* CJK Ideograph */ + [0x9bf1, 0x9bf1], /* CJK Ideograph */ + [0x9bf2, 0x9bf2], /* CJK Ideograph */ + [0x9bf3, 0x9bf3], /* CJK Ideograph */ + [0x9bf4, 0x9bf4], /* CJK Ideograph */ + [0x9bf5, 0x9bf5], /* CJK Ideograph */ + [0x9bf6, 0x9bf6], /* CJK Ideograph */ + [0x9bf7, 0x9bf7], /* CJK Ideograph */ + [0x9bf8, 0x9bf8], /* CJK Ideograph */ + [0x9bf9, 0x9bf9], /* CJK Ideograph */ + [0x9bfa, 0x9bfa], /* CJK Ideograph */ + [0x9bfb, 0x9bfb], /* CJK Ideograph */ + [0x9bfc, 0x9bfc], /* CJK Ideograph */ + [0x9bfd, 0x9bfd], /* CJK Ideograph */ + [0x9bfe, 0x9bfe], /* CJK Ideograph */ + [0x9bff, 0x9bff], /* CJK Ideograph */ + [0x9c00, 0x9c00], /* CJK Ideograph */ + [0x9c01, 0x9c01], /* CJK Ideograph */ + [0x9c02, 0x9c02], /* CJK Ideograph */ + [0x9c03, 0x9c03], /* CJK Ideograph */ + [0x9c04, 0x9c04], /* CJK Ideograph */ + [0x9c05, 0x9c05], /* CJK Ideograph */ + [0x9c06, 0x9c06], /* CJK Ideograph */ + [0x9c07, 0x9c07], /* CJK Ideograph */ + [0x9c08, 0x9c08], /* CJK Ideograph */ + [0x9c09, 0x9c09], /* CJK Ideograph */ + [0x9c0a, 0x9c0a], /* CJK Ideograph */ + [0x9c0b, 0x9c0b], /* CJK Ideograph */ + [0x9c0c, 0x9c0c], /* CJK Ideograph */ + [0x9c0d, 0x9c0d], /* CJK Ideograph */ + [0x9c0e, 0x9c0e], /* CJK Ideograph */ + [0x9c0f, 0x9c0f], /* CJK Ideograph */ + [0x9c10, 0x9c10], /* CJK Ideograph */ + [0x9c11, 0x9c11], /* CJK Ideograph */ + [0x9c12, 0x9c12], /* CJK Ideograph */ + [0x9c13, 0x9c13], /* CJK Ideograph */ + [0x9c14, 0x9c14], /* CJK Ideograph */ + [0x9c15, 0x9c15], /* CJK Ideograph */ + [0x9c16, 0x9c16], /* CJK Ideograph */ + [0x9c17, 0x9c17], /* CJK Ideograph */ + [0x9c18, 0x9c18], /* CJK Ideograph */ + [0x9c19, 0x9c19], /* CJK Ideograph */ + [0x9c1a, 0x9c1a], /* CJK Ideograph */ + [0x9c1b, 0x9c1b], /* CJK Ideograph */ + [0x9c1c, 0x9c1c], /* CJK Ideograph */ + [0x9c1d, 0x9c1d], /* CJK Ideograph */ + [0x9c1e, 0x9c1e], /* CJK Ideograph */ + [0x9c1f, 0x9c1f], /* CJK Ideograph */ + [0x9c20, 0x9c20], /* CJK Ideograph */ + [0x9c21, 0x9c21], /* CJK Ideograph */ + [0x9c22, 0x9c22], /* CJK Ideograph */ + [0x9c23, 0x9c23], /* CJK Ideograph */ + [0x9c24, 0x9c24], /* CJK Ideograph */ + [0x9c25, 0x9c25], /* CJK Ideograph */ + [0x9c26, 0x9c26], /* CJK Ideograph */ + [0x9c27, 0x9c27], /* CJK Ideograph */ + [0x9c28, 0x9c28], /* CJK Ideograph */ + [0x9c29, 0x9c29], /* CJK Ideograph */ + [0x9c2a, 0x9c2a], /* CJK Ideograph */ + [0x9c2b, 0x9c2b], /* CJK Ideograph */ + [0x9c2c, 0x9c2c], /* CJK Ideograph */ + [0x9c2d, 0x9c2d], /* CJK Ideograph */ + [0x9c2e, 0x9c2e], /* CJK Ideograph */ + [0x9c2f, 0x9c2f], /* CJK Ideograph */ + [0x9c30, 0x9c30], /* CJK Ideograph */ + [0x9c31, 0x9c31], /* CJK Ideograph */ + [0x9c32, 0x9c32], /* CJK Ideograph */ + [0x9c33, 0x9c33], /* CJK Ideograph */ + [0x9c34, 0x9c34], /* CJK Ideograph */ + [0x9c35, 0x9c35], /* CJK Ideograph */ + [0x9c36, 0x9c36], /* CJK Ideograph */ + [0x9c37, 0x9c37], /* CJK Ideograph */ + [0x9c38, 0x9c38], /* CJK Ideograph */ + [0x9c39, 0x9c39], /* CJK Ideograph */ + [0x9c3a, 0x9c3a], /* CJK Ideograph */ + [0x9c3b, 0x9c3b], /* CJK Ideograph */ + [0x9c3c, 0x9c3c], /* CJK Ideograph */ + [0x9c3d, 0x9c3d], /* CJK Ideograph */ + [0x9c3e, 0x9c3e], /* CJK Ideograph */ + [0x9c3f, 0x9c3f], /* CJK Ideograph */ + [0x9c40, 0x9c40], /* CJK Ideograph */ + [0x9c41, 0x9c41], /* CJK Ideograph */ + [0x9c42, 0x9c42], /* CJK Ideograph */ + [0x9c43, 0x9c43], /* CJK Ideograph */ + [0x9c44, 0x9c44], /* CJK Ideograph */ + [0x9c45, 0x9c45], /* CJK Ideograph */ + [0x9c46, 0x9c46], /* CJK Ideograph */ + [0x9c47, 0x9c47], /* CJK Ideograph */ + [0x9c48, 0x9c48], /* CJK Ideograph */ + [0x9c49, 0x9c49], /* CJK Ideograph */ + [0x9c4a, 0x9c4a], /* CJK Ideograph */ + [0x9c4b, 0x9c4b], /* CJK Ideograph */ + [0x9c4c, 0x9c4c], /* CJK Ideograph */ + [0x9c4d, 0x9c4d], /* CJK Ideograph */ + [0x9c4e, 0x9c4e], /* CJK Ideograph */ + [0x9c4f, 0x9c4f], /* CJK Ideograph */ + [0x9c50, 0x9c50], /* CJK Ideograph */ + [0x9c51, 0x9c51], /* CJK Ideograph */ + [0x9c52, 0x9c52], /* CJK Ideograph */ + [0x9c53, 0x9c53], /* CJK Ideograph */ + [0x9c54, 0x9c54], /* CJK Ideograph */ + [0x9c55, 0x9c55], /* CJK Ideograph */ + [0x9c56, 0x9c56], /* CJK Ideograph */ + [0x9c57, 0x9c57], /* CJK Ideograph */ + [0x9c58, 0x9c58], /* CJK Ideograph */ + [0x9c59, 0x9c59], /* CJK Ideograph */ + [0x9c5a, 0x9c5a], /* CJK Ideograph */ + [0x9c5b, 0x9c5b], /* CJK Ideograph */ + [0x9c5c, 0x9c5c], /* CJK Ideograph */ + [0x9c5d, 0x9c5d], /* CJK Ideograph */ + [0x9c5e, 0x9c5e], /* CJK Ideograph */ + [0x9c5f, 0x9c5f], /* CJK Ideograph */ + [0x9c60, 0x9c60], /* CJK Ideograph */ + [0x9c61, 0x9c61], /* CJK Ideograph */ + [0x9c62, 0x9c62], /* CJK Ideograph */ + [0x9c63, 0x9c63], /* CJK Ideograph */ + [0x9c64, 0x9c64], /* CJK Ideograph */ + [0x9c65, 0x9c65], /* CJK Ideograph */ + [0x9c66, 0x9c66], /* CJK Ideograph */ + [0x9c67, 0x9c67], /* CJK Ideograph */ + [0x9c68, 0x9c68], /* CJK Ideograph */ + [0x9c69, 0x9c69], /* CJK Ideograph */ + [0x9c6a, 0x9c6a], /* CJK Ideograph */ + [0x9c6b, 0x9c6b], /* CJK Ideograph */ + [0x9c6c, 0x9c6c], /* CJK Ideograph */ + [0x9c6d, 0x9c6d], /* CJK Ideograph */ + [0x9c6e, 0x9c6e], /* CJK Ideograph */ + [0x9c6f, 0x9c6f], /* CJK Ideograph */ + [0x9c70, 0x9c70], /* CJK Ideograph */ + [0x9c71, 0x9c71], /* CJK Ideograph */ + [0x9c72, 0x9c72], /* CJK Ideograph */ + [0x9c73, 0x9c73], /* CJK Ideograph */ + [0x9c74, 0x9c74], /* CJK Ideograph */ + [0x9c75, 0x9c75], /* CJK Ideograph */ + [0x9c76, 0x9c76], /* CJK Ideograph */ + [0x9c77, 0x9c77], /* CJK Ideograph */ + [0x9c78, 0x9c78], /* CJK Ideograph */ + [0x9c79, 0x9c79], /* CJK Ideograph */ + [0x9c7a, 0x9c7a], /* CJK Ideograph */ + [0x9c7b, 0x9c7b], /* CJK Ideograph */ + [0x9c7c, 0x9c7c], /* CJK Ideograph */ + [0x9c7d, 0x9c7d], /* CJK Ideograph */ + [0x9c7e, 0x9c7e], /* CJK Ideograph */ + [0x9c7f, 0x9c7f], /* CJK Ideograph */ + [0x9c80, 0x9c80], /* CJK Ideograph */ + [0x9c81, 0x9c81], /* CJK Ideograph */ + [0x9c82, 0x9c82], /* CJK Ideograph */ + [0x9c83, 0x9c83], /* CJK Ideograph */ + [0x9c84, 0x9c84], /* CJK Ideograph */ + [0x9c85, 0x9c85], /* CJK Ideograph */ + [0x9c86, 0x9c86], /* CJK Ideograph */ + [0x9c87, 0x9c87], /* CJK Ideograph */ + [0x9c88, 0x9c88], /* CJK Ideograph */ + [0x9c89, 0x9c89], /* CJK Ideograph */ + [0x9c8a, 0x9c8a], /* CJK Ideograph */ + [0x9c8b, 0x9c8b], /* CJK Ideograph */ + [0x9c8c, 0x9c8c], /* CJK Ideograph */ + [0x9c8d, 0x9c8d], /* CJK Ideograph */ + [0x9c8e, 0x9c8e], /* CJK Ideograph */ + [0x9c8f, 0x9c8f], /* CJK Ideograph */ + [0x9c90, 0x9c90], /* CJK Ideograph */ + [0x9c91, 0x9c91], /* CJK Ideograph */ + [0x9c92, 0x9c92], /* CJK Ideograph */ + [0x9c93, 0x9c93], /* CJK Ideograph */ + [0x9c94, 0x9c94], /* CJK Ideograph */ + [0x9c95, 0x9c95], /* CJK Ideograph */ + [0x9c96, 0x9c96], /* CJK Ideograph */ + [0x9c97, 0x9c97], /* CJK Ideograph */ + [0x9c98, 0x9c98], /* CJK Ideograph */ + [0x9c99, 0x9c99], /* CJK Ideograph */ + [0x9c9a, 0x9c9a], /* CJK Ideograph */ + [0x9c9b, 0x9c9b], /* CJK Ideograph */ + [0x9c9c, 0x9c9c], /* CJK Ideograph */ + [0x9c9d, 0x9c9d], /* CJK Ideograph */ + [0x9c9e, 0x9c9e], /* CJK Ideograph */ + [0x9c9f, 0x9c9f], /* CJK Ideograph */ + [0x9ca0, 0x9ca0], /* CJK Ideograph */ + [0x9ca1, 0x9ca1], /* CJK Ideograph */ + [0x9ca2, 0x9ca2], /* CJK Ideograph */ + [0x9ca3, 0x9ca3], /* CJK Ideograph */ + [0x9ca4, 0x9ca4], /* CJK Ideograph */ + [0x9ca5, 0x9ca5], /* CJK Ideograph */ + [0x9ca6, 0x9ca6], /* CJK Ideograph */ + [0x9ca7, 0x9ca7], /* CJK Ideograph */ + [0x9ca8, 0x9ca8], /* CJK Ideograph */ + [0x9ca9, 0x9ca9], /* CJK Ideograph */ + [0x9caa, 0x9caa], /* CJK Ideograph */ + [0x9cab, 0x9cab], /* CJK Ideograph */ + [0x9cac, 0x9cac], /* CJK Ideograph */ + [0x9cad, 0x9cad], /* CJK Ideograph */ + [0x9cae, 0x9cae], /* CJK Ideograph */ + [0x9caf, 0x9caf], /* CJK Ideograph */ + [0x9cb0, 0x9cb0], /* CJK Ideograph */ + [0x9cb1, 0x9cb1], /* CJK Ideograph */ + [0x9cb2, 0x9cb2], /* CJK Ideograph */ + [0x9cb3, 0x9cb3], /* CJK Ideograph */ + [0x9cb4, 0x9cb4], /* CJK Ideograph */ + [0x9cb5, 0x9cb5], /* CJK Ideograph */ + [0x9cb6, 0x9cb6], /* CJK Ideograph */ + [0x9cb7, 0x9cb7], /* CJK Ideograph */ + [0x9cb8, 0x9cb8], /* CJK Ideograph */ + [0x9cb9, 0x9cb9], /* CJK Ideograph */ + [0x9cba, 0x9cba], /* CJK Ideograph */ + [0x9cbb, 0x9cbb], /* CJK Ideograph */ + [0x9cbc, 0x9cbc], /* CJK Ideograph */ + [0x9cbd, 0x9cbd], /* CJK Ideograph */ + [0x9cbe, 0x9cbe], /* CJK Ideograph */ + [0x9cbf, 0x9cbf], /* CJK Ideograph */ + [0x9cc0, 0x9cc0], /* CJK Ideograph */ + [0x9cc1, 0x9cc1], /* CJK Ideograph */ + [0x9cc2, 0x9cc2], /* CJK Ideograph */ + [0x9cc3, 0x9cc3], /* CJK Ideograph */ + [0x9cc4, 0x9cc4], /* CJK Ideograph */ + [0x9cc5, 0x9cc5], /* CJK Ideograph */ + [0x9cc6, 0x9cc6], /* CJK Ideograph */ + [0x9cc7, 0x9cc7], /* CJK Ideograph */ + [0x9cc8, 0x9cc8], /* CJK Ideograph */ + [0x9cc9, 0x9cc9], /* CJK Ideograph */ + [0x9cca, 0x9cca], /* CJK Ideograph */ + [0x9ccb, 0x9ccb], /* CJK Ideograph */ + [0x9ccc, 0x9ccc], /* CJK Ideograph */ + [0x9ccd, 0x9ccd], /* CJK Ideograph */ + [0x9cce, 0x9cce], /* CJK Ideograph */ + [0x9ccf, 0x9ccf], /* CJK Ideograph */ + [0x9cd0, 0x9cd0], /* CJK Ideograph */ + [0x9cd1, 0x9cd1], /* CJK Ideograph */ + [0x9cd2, 0x9cd2], /* CJK Ideograph */ + [0x9cd3, 0x9cd3], /* CJK Ideograph */ + [0x9cd4, 0x9cd4], /* CJK Ideograph */ + [0x9cd5, 0x9cd5], /* CJK Ideograph */ + [0x9cd6, 0x9cd6], /* CJK Ideograph */ + [0x9cd7, 0x9cd7], /* CJK Ideograph */ + [0x9cd8, 0x9cd8], /* CJK Ideograph */ + [0x9cd9, 0x9cd9], /* CJK Ideograph */ + [0x9cda, 0x9cda], /* CJK Ideograph */ + [0x9cdb, 0x9cdb], /* CJK Ideograph */ + [0x9cdc, 0x9cdc], /* CJK Ideograph */ + [0x9cdd, 0x9cdd], /* CJK Ideograph */ + [0x9cde, 0x9cde], /* CJK Ideograph */ + [0x9cdf, 0x9cdf], /* CJK Ideograph */ + [0x9ce0, 0x9ce0], /* CJK Ideograph */ + [0x9ce1, 0x9ce1], /* CJK Ideograph */ + [0x9ce2, 0x9ce2], /* CJK Ideograph */ + [0x9ce3, 0x9ce3], /* CJK Ideograph */ + [0x9ce4, 0x9ce4], /* CJK Ideograph */ + [0x9ce5, 0x9ce5], /* CJK Ideograph */ + [0x9ce6, 0x9ce6], /* CJK Ideograph */ + [0x9ce7, 0x9ce7], /* CJK Ideograph */ + [0x9ce8, 0x9ce8], /* CJK Ideograph */ + [0x9ce9, 0x9ce9], /* CJK Ideograph */ + [0x9cea, 0x9cea], /* CJK Ideograph */ + [0x9ceb, 0x9ceb], /* CJK Ideograph */ + [0x9cec, 0x9cec], /* CJK Ideograph */ + [0x9ced, 0x9ced], /* CJK Ideograph */ + [0x9cee, 0x9cee], /* CJK Ideograph */ + [0x9cef, 0x9cef], /* CJK Ideograph */ + [0x9cf0, 0x9cf0], /* CJK Ideograph */ + [0x9cf1, 0x9cf1], /* CJK Ideograph */ + [0x9cf2, 0x9cf2], /* CJK Ideograph */ + [0x9cf3, 0x9cf3], /* CJK Ideograph */ + [0x9cf4, 0x9cf4], /* CJK Ideograph */ + [0x9cf5, 0x9cf5], /* CJK Ideograph */ + [0x9cf6, 0x9cf6], /* CJK Ideograph */ + [0x9cf7, 0x9cf7], /* CJK Ideograph */ + [0x9cf8, 0x9cf8], /* CJK Ideograph */ + [0x9cf9, 0x9cf9], /* CJK Ideograph */ + [0x9cfa, 0x9cfa], /* CJK Ideograph */ + [0x9cfb, 0x9cfb], /* CJK Ideograph */ + [0x9cfc, 0x9cfc], /* CJK Ideograph */ + [0x9cfd, 0x9cfd], /* CJK Ideograph */ + [0x9cfe, 0x9cfe], /* CJK Ideograph */ + [0x9cff, 0x9cff], /* CJK Ideograph */ + [0x9d00, 0x9d00], /* CJK Ideograph */ + [0x9d01, 0x9d01], /* CJK Ideograph */ + [0x9d02, 0x9d02], /* CJK Ideograph */ + [0x9d03, 0x9d03], /* CJK Ideograph */ + [0x9d04, 0x9d04], /* CJK Ideograph */ + [0x9d05, 0x9d05], /* CJK Ideograph */ + [0x9d06, 0x9d06], /* CJK Ideograph */ + [0x9d07, 0x9d07], /* CJK Ideograph */ + [0x9d08, 0x9d08], /* CJK Ideograph */ + [0x9d09, 0x9d09], /* CJK Ideograph */ + [0x9d0a, 0x9d0a], /* CJK Ideograph */ + [0x9d0b, 0x9d0b], /* CJK Ideograph */ + [0x9d0c, 0x9d0c], /* CJK Ideograph */ + [0x9d0d, 0x9d0d], /* CJK Ideograph */ + [0x9d0e, 0x9d0e], /* CJK Ideograph */ + [0x9d0f, 0x9d0f], /* CJK Ideograph */ + [0x9d10, 0x9d10], /* CJK Ideograph */ + [0x9d11, 0x9d11], /* CJK Ideograph */ + [0x9d12, 0x9d12], /* CJK Ideograph */ + [0x9d13, 0x9d13], /* CJK Ideograph */ + [0x9d14, 0x9d14], /* CJK Ideograph */ + [0x9d15, 0x9d15], /* CJK Ideograph */ + [0x9d16, 0x9d16], /* CJK Ideograph */ + [0x9d17, 0x9d17], /* CJK Ideograph */ + [0x9d18, 0x9d18], /* CJK Ideograph */ + [0x9d19, 0x9d19], /* CJK Ideograph */ + [0x9d1a, 0x9d1a], /* CJK Ideograph */ + [0x9d1b, 0x9d1b], /* CJK Ideograph */ + [0x9d1c, 0x9d1c], /* CJK Ideograph */ + [0x9d1d, 0x9d1d], /* CJK Ideograph */ + [0x9d1e, 0x9d1e], /* CJK Ideograph */ + [0x9d1f, 0x9d1f], /* CJK Ideograph */ + [0x9d20, 0x9d20], /* CJK Ideograph */ + [0x9d21, 0x9d21], /* CJK Ideograph */ + [0x9d22, 0x9d22], /* CJK Ideograph */ + [0x9d23, 0x9d23], /* CJK Ideograph */ + [0x9d24, 0x9d24], /* CJK Ideograph */ + [0x9d25, 0x9d25], /* CJK Ideograph */ + [0x9d26, 0x9d26], /* CJK Ideograph */ + [0x9d27, 0x9d27], /* CJK Ideograph */ + [0x9d28, 0x9d28], /* CJK Ideograph */ + [0x9d29, 0x9d29], /* CJK Ideograph */ + [0x9d2a, 0x9d2a], /* CJK Ideograph */ + [0x9d2b, 0x9d2b], /* CJK Ideograph */ + [0x9d2c, 0x9d2c], /* CJK Ideograph */ + [0x9d2d, 0x9d2d], /* CJK Ideograph */ + [0x9d2e, 0x9d2e], /* CJK Ideograph */ + [0x9d2f, 0x9d2f], /* CJK Ideograph */ + [0x9d30, 0x9d30], /* CJK Ideograph */ + [0x9d31, 0x9d31], /* CJK Ideograph */ + [0x9d32, 0x9d32], /* CJK Ideograph */ + [0x9d33, 0x9d33], /* CJK Ideograph */ + [0x9d34, 0x9d34], /* CJK Ideograph */ + [0x9d35, 0x9d35], /* CJK Ideograph */ + [0x9d36, 0x9d36], /* CJK Ideograph */ + [0x9d37, 0x9d37], /* CJK Ideograph */ + [0x9d38, 0x9d38], /* CJK Ideograph */ + [0x9d39, 0x9d39], /* CJK Ideograph */ + [0x9d3a, 0x9d3a], /* CJK Ideograph */ + [0x9d3b, 0x9d3b], /* CJK Ideograph */ + [0x9d3c, 0x9d3c], /* CJK Ideograph */ + [0x9d3d, 0x9d3d], /* CJK Ideograph */ + [0x9d3e, 0x9d3e], /* CJK Ideograph */ + [0x9d3f, 0x9d3f], /* CJK Ideograph */ + [0x9d40, 0x9d40], /* CJK Ideograph */ + [0x9d41, 0x9d41], /* CJK Ideograph */ + [0x9d42, 0x9d42], /* CJK Ideograph */ + [0x9d43, 0x9d43], /* CJK Ideograph */ + [0x9d44, 0x9d44], /* CJK Ideograph */ + [0x9d45, 0x9d45], /* CJK Ideograph */ + [0x9d46, 0x9d46], /* CJK Ideograph */ + [0x9d47, 0x9d47], /* CJK Ideograph */ + [0x9d48, 0x9d48], /* CJK Ideograph */ + [0x9d49, 0x9d49], /* CJK Ideograph */ + [0x9d4a, 0x9d4a], /* CJK Ideograph */ + [0x9d4b, 0x9d4b], /* CJK Ideograph */ + [0x9d4c, 0x9d4c], /* CJK Ideograph */ + [0x9d4d, 0x9d4d], /* CJK Ideograph */ + [0x9d4e, 0x9d4e], /* CJK Ideograph */ + [0x9d4f, 0x9d4f], /* CJK Ideograph */ + [0x9d50, 0x9d50], /* CJK Ideograph */ + [0x9d51, 0x9d51], /* CJK Ideograph */ + [0x9d52, 0x9d52], /* CJK Ideograph */ + [0x9d53, 0x9d53], /* CJK Ideograph */ + [0x9d54, 0x9d54], /* CJK Ideograph */ + [0x9d55, 0x9d55], /* CJK Ideograph */ + [0x9d56, 0x9d56], /* CJK Ideograph */ + [0x9d57, 0x9d57], /* CJK Ideograph */ + [0x9d58, 0x9d58], /* CJK Ideograph */ + [0x9d59, 0x9d59], /* CJK Ideograph */ + [0x9d5a, 0x9d5a], /* CJK Ideograph */ + [0x9d5b, 0x9d5b], /* CJK Ideograph */ + [0x9d5c, 0x9d5c], /* CJK Ideograph */ + [0x9d5d, 0x9d5d], /* CJK Ideograph */ + [0x9d5e, 0x9d5e], /* CJK Ideograph */ + [0x9d5f, 0x9d5f], /* CJK Ideograph */ + [0x9d60, 0x9d60], /* CJK Ideograph */ + [0x9d61, 0x9d61], /* CJK Ideograph */ + [0x9d62, 0x9d62], /* CJK Ideograph */ + [0x9d63, 0x9d63], /* CJK Ideograph */ + [0x9d64, 0x9d64], /* CJK Ideograph */ + [0x9d65, 0x9d65], /* CJK Ideograph */ + [0x9d66, 0x9d66], /* CJK Ideograph */ + [0x9d67, 0x9d67], /* CJK Ideograph */ + [0x9d68, 0x9d68], /* CJK Ideograph */ + [0x9d69, 0x9d69], /* CJK Ideograph */ + [0x9d6a, 0x9d6a], /* CJK Ideograph */ + [0x9d6b, 0x9d6b], /* CJK Ideograph */ + [0x9d6c, 0x9d6c], /* CJK Ideograph */ + [0x9d6d, 0x9d6d], /* CJK Ideograph */ + [0x9d6e, 0x9d6e], /* CJK Ideograph */ + [0x9d6f, 0x9d6f], /* CJK Ideograph */ + [0x9d70, 0x9d70], /* CJK Ideograph */ + [0x9d71, 0x9d71], /* CJK Ideograph */ + [0x9d72, 0x9d72], /* CJK Ideograph */ + [0x9d73, 0x9d73], /* CJK Ideograph */ + [0x9d74, 0x9d74], /* CJK Ideograph */ + [0x9d75, 0x9d75], /* CJK Ideograph */ + [0x9d76, 0x9d76], /* CJK Ideograph */ + [0x9d77, 0x9d77], /* CJK Ideograph */ + [0x9d78, 0x9d78], /* CJK Ideograph */ + [0x9d79, 0x9d79], /* CJK Ideograph */ + [0x9d7a, 0x9d7a], /* CJK Ideograph */ + [0x9d7b, 0x9d7b], /* CJK Ideograph */ + [0x9d7c, 0x9d7c], /* CJK Ideograph */ + [0x9d7d, 0x9d7d], /* CJK Ideograph */ + [0x9d7e, 0x9d7e], /* CJK Ideograph */ + [0x9d7f, 0x9d7f], /* CJK Ideograph */ + [0x9d80, 0x9d80], /* CJK Ideograph */ + [0x9d81, 0x9d81], /* CJK Ideograph */ + [0x9d82, 0x9d82], /* CJK Ideograph */ + [0x9d83, 0x9d83], /* CJK Ideograph */ + [0x9d84, 0x9d84], /* CJK Ideograph */ + [0x9d85, 0x9d85], /* CJK Ideograph */ + [0x9d86, 0x9d86], /* CJK Ideograph */ + [0x9d87, 0x9d87], /* CJK Ideograph */ + [0x9d88, 0x9d88], /* CJK Ideograph */ + [0x9d89, 0x9d89], /* CJK Ideograph */ + [0x9d8a, 0x9d8a], /* CJK Ideograph */ + [0x9d8b, 0x9d8b], /* CJK Ideograph */ + [0x9d8c, 0x9d8c], /* CJK Ideograph */ + [0x9d8d, 0x9d8d], /* CJK Ideograph */ + [0x9d8e, 0x9d8e], /* CJK Ideograph */ + [0x9d8f, 0x9d8f], /* CJK Ideograph */ + [0x9d90, 0x9d90], /* CJK Ideograph */ + [0x9d91, 0x9d91], /* CJK Ideograph */ + [0x9d92, 0x9d92], /* CJK Ideograph */ + [0x9d93, 0x9d93], /* CJK Ideograph */ + [0x9d94, 0x9d94], /* CJK Ideograph */ + [0x9d95, 0x9d95], /* CJK Ideograph */ + [0x9d96, 0x9d96], /* CJK Ideograph */ + [0x9d97, 0x9d97], /* CJK Ideograph */ + [0x9d98, 0x9d98], /* CJK Ideograph */ + [0x9d99, 0x9d99], /* CJK Ideograph */ + [0x9d9a, 0x9d9a], /* CJK Ideograph */ + [0x9d9b, 0x9d9b], /* CJK Ideograph */ + [0x9d9c, 0x9d9c], /* CJK Ideograph */ + [0x9d9d, 0x9d9d], /* CJK Ideograph */ + [0x9d9e, 0x9d9e], /* CJK Ideograph */ + [0x9d9f, 0x9d9f], /* CJK Ideograph */ + [0x9da0, 0x9da0], /* CJK Ideograph */ + [0x9da1, 0x9da1], /* CJK Ideograph */ + [0x9da2, 0x9da2], /* CJK Ideograph */ + [0x9da3, 0x9da3], /* CJK Ideograph */ + [0x9da4, 0x9da4], /* CJK Ideograph */ + [0x9da5, 0x9da5], /* CJK Ideograph */ + [0x9da6, 0x9da6], /* CJK Ideograph */ + [0x9da7, 0x9da7], /* CJK Ideograph */ + [0x9da8, 0x9da8], /* CJK Ideograph */ + [0x9da9, 0x9da9], /* CJK Ideograph */ + [0x9daa, 0x9daa], /* CJK Ideograph */ + [0x9dab, 0x9dab], /* CJK Ideograph */ + [0x9dac, 0x9dac], /* CJK Ideograph */ + [0x9dad, 0x9dad], /* CJK Ideograph */ + [0x9dae, 0x9dae], /* CJK Ideograph */ + [0x9daf, 0x9daf], /* CJK Ideograph */ + [0x9db0, 0x9db0], /* CJK Ideograph */ + [0x9db1, 0x9db1], /* CJK Ideograph */ + [0x9db2, 0x9db2], /* CJK Ideograph */ + [0x9db3, 0x9db3], /* CJK Ideograph */ + [0x9db4, 0x9db4], /* CJK Ideograph */ + [0x9db5, 0x9db5], /* CJK Ideograph */ + [0x9db6, 0x9db6], /* CJK Ideograph */ + [0x9db7, 0x9db7], /* CJK Ideograph */ + [0x9db8, 0x9db8], /* CJK Ideograph */ + [0x9db9, 0x9db9], /* CJK Ideograph */ + [0x9dba, 0x9dba], /* CJK Ideograph */ + [0x9dbb, 0x9dbb], /* CJK Ideograph */ + [0x9dbc, 0x9dbc], /* CJK Ideograph */ + [0x9dbd, 0x9dbd], /* CJK Ideograph */ + [0x9dbe, 0x9dbe], /* CJK Ideograph */ + [0x9dbf, 0x9dbf], /* CJK Ideograph */ + [0x9dc0, 0x9dc0], /* CJK Ideograph */ + [0x9dc1, 0x9dc1], /* CJK Ideograph */ + [0x9dc2, 0x9dc2], /* CJK Ideograph */ + [0x9dc3, 0x9dc3], /* CJK Ideograph */ + [0x9dc4, 0x9dc4], /* CJK Ideograph */ + [0x9dc5, 0x9dc5], /* CJK Ideograph */ + [0x9dc6, 0x9dc6], /* CJK Ideograph */ + [0x9dc7, 0x9dc7], /* CJK Ideograph */ + [0x9dc8, 0x9dc8], /* CJK Ideograph */ + [0x9dc9, 0x9dc9], /* CJK Ideograph */ + [0x9dca, 0x9dca], /* CJK Ideograph */ + [0x9dcb, 0x9dcb], /* CJK Ideograph */ + [0x9dcc, 0x9dcc], /* CJK Ideograph */ + [0x9dcd, 0x9dcd], /* CJK Ideograph */ + [0x9dce, 0x9dce], /* CJK Ideograph */ + [0x9dcf, 0x9dcf], /* CJK Ideograph */ + [0x9dd0, 0x9dd0], /* CJK Ideograph */ + [0x9dd1, 0x9dd1], /* CJK Ideograph */ + [0x9dd2, 0x9dd2], /* CJK Ideograph */ + [0x9dd3, 0x9dd3], /* CJK Ideograph */ + [0x9dd4, 0x9dd4], /* CJK Ideograph */ + [0x9dd5, 0x9dd5], /* CJK Ideograph */ + [0x9dd6, 0x9dd6], /* CJK Ideograph */ + [0x9dd7, 0x9dd7], /* CJK Ideograph */ + [0x9dd8, 0x9dd8], /* CJK Ideograph */ + [0x9dd9, 0x9dd9], /* CJK Ideograph */ + [0x9dda, 0x9dda], /* CJK Ideograph */ + [0x9ddb, 0x9ddb], /* CJK Ideograph */ + [0x9ddc, 0x9ddc], /* CJK Ideograph */ + [0x9ddd, 0x9ddd], /* CJK Ideograph */ + [0x9dde, 0x9dde], /* CJK Ideograph */ + [0x9ddf, 0x9ddf], /* CJK Ideograph */ + [0x9de0, 0x9de0], /* CJK Ideograph */ + [0x9de1, 0x9de1], /* CJK Ideograph */ + [0x9de2, 0x9de2], /* CJK Ideograph */ + [0x9de3, 0x9de3], /* CJK Ideograph */ + [0x9de4, 0x9de4], /* CJK Ideograph */ + [0x9de5, 0x9de5], /* CJK Ideograph */ + [0x9de6, 0x9de6], /* CJK Ideograph */ + [0x9de7, 0x9de7], /* CJK Ideograph */ + [0x9de8, 0x9de8], /* CJK Ideograph */ + [0x9de9, 0x9de9], /* CJK Ideograph */ + [0x9dea, 0x9dea], /* CJK Ideograph */ + [0x9deb, 0x9deb], /* CJK Ideograph */ + [0x9dec, 0x9dec], /* CJK Ideograph */ + [0x9ded, 0x9ded], /* CJK Ideograph */ + [0x9dee, 0x9dee], /* CJK Ideograph */ + [0x9def, 0x9def], /* CJK Ideograph */ + [0x9df0, 0x9df0], /* CJK Ideograph */ + [0x9df1, 0x9df1], /* CJK Ideograph */ + [0x9df2, 0x9df2], /* CJK Ideograph */ + [0x9df3, 0x9df3], /* CJK Ideograph */ + [0x9df4, 0x9df4], /* CJK Ideograph */ + [0x9df5, 0x9df5], /* CJK Ideograph */ + [0x9df6, 0x9df6], /* CJK Ideograph */ + [0x9df7, 0x9df7], /* CJK Ideograph */ + [0x9df8, 0x9df8], /* CJK Ideograph */ + [0x9df9, 0x9df9], /* CJK Ideograph */ + [0x9dfa, 0x9dfa], /* CJK Ideograph */ + [0x9dfb, 0x9dfb], /* CJK Ideograph */ + [0x9dfc, 0x9dfc], /* CJK Ideograph */ + [0x9dfd, 0x9dfd], /* CJK Ideograph */ + [0x9dfe, 0x9dfe], /* CJK Ideograph */ + [0x9dff, 0x9dff], /* CJK Ideograph */ + [0x9e00, 0x9e00], /* CJK Ideograph */ + [0x9e01, 0x9e01], /* CJK Ideograph */ + [0x9e02, 0x9e02], /* CJK Ideograph */ + [0x9e03, 0x9e03], /* CJK Ideograph */ + [0x9e04, 0x9e04], /* CJK Ideograph */ + [0x9e05, 0x9e05], /* CJK Ideograph */ + [0x9e06, 0x9e06], /* CJK Ideograph */ + [0x9e07, 0x9e07], /* CJK Ideograph */ + [0x9e08, 0x9e08], /* CJK Ideograph */ + [0x9e09, 0x9e09], /* CJK Ideograph */ + [0x9e0a, 0x9e0a], /* CJK Ideograph */ + [0x9e0b, 0x9e0b], /* CJK Ideograph */ + [0x9e0c, 0x9e0c], /* CJK Ideograph */ + [0x9e0d, 0x9e0d], /* CJK Ideograph */ + [0x9e0e, 0x9e0e], /* CJK Ideograph */ + [0x9e0f, 0x9e0f], /* CJK Ideograph */ + [0x9e10, 0x9e10], /* CJK Ideograph */ + [0x9e11, 0x9e11], /* CJK Ideograph */ + [0x9e12, 0x9e12], /* CJK Ideograph */ + [0x9e13, 0x9e13], /* CJK Ideograph */ + [0x9e14, 0x9e14], /* CJK Ideograph */ + [0x9e15, 0x9e15], /* CJK Ideograph */ + [0x9e16, 0x9e16], /* CJK Ideograph */ + [0x9e17, 0x9e17], /* CJK Ideograph */ + [0x9e18, 0x9e18], /* CJK Ideograph */ + [0x9e19, 0x9e19], /* CJK Ideograph */ + [0x9e1a, 0x9e1a], /* CJK Ideograph */ + [0x9e1b, 0x9e1b], /* CJK Ideograph */ + [0x9e1c, 0x9e1c], /* CJK Ideograph */ + [0x9e1d, 0x9e1d], /* CJK Ideograph */ + [0x9e1e, 0x9e1e], /* CJK Ideograph */ + [0x9e1f, 0x9e1f], /* CJK Ideograph */ + [0x9e20, 0x9e20], /* CJK Ideograph */ + [0x9e21, 0x9e21], /* CJK Ideograph */ + [0x9e22, 0x9e22], /* CJK Ideograph */ + [0x9e23, 0x9e23], /* CJK Ideograph */ + [0x9e24, 0x9e24], /* CJK Ideograph */ + [0x9e25, 0x9e25], /* CJK Ideograph */ + [0x9e26, 0x9e26], /* CJK Ideograph */ + [0x9e27, 0x9e27], /* CJK Ideograph */ + [0x9e28, 0x9e28], /* CJK Ideograph */ + [0x9e29, 0x9e29], /* CJK Ideograph */ + [0x9e2a, 0x9e2a], /* CJK Ideograph */ + [0x9e2b, 0x9e2b], /* CJK Ideograph */ + [0x9e2c, 0x9e2c], /* CJK Ideograph */ + [0x9e2d, 0x9e2d], /* CJK Ideograph */ + [0x9e2e, 0x9e2e], /* CJK Ideograph */ + [0x9e2f, 0x9e2f], /* CJK Ideograph */ + [0x9e30, 0x9e30], /* CJK Ideograph */ + [0x9e31, 0x9e31], /* CJK Ideograph */ + [0x9e32, 0x9e32], /* CJK Ideograph */ + [0x9e33, 0x9e33], /* CJK Ideograph */ + [0x9e34, 0x9e34], /* CJK Ideograph */ + [0x9e35, 0x9e35], /* CJK Ideograph */ + [0x9e36, 0x9e36], /* CJK Ideograph */ + [0x9e37, 0x9e37], /* CJK Ideograph */ + [0x9e38, 0x9e38], /* CJK Ideograph */ + [0x9e39, 0x9e39], /* CJK Ideograph */ + [0x9e3a, 0x9e3a], /* CJK Ideograph */ + [0x9e3b, 0x9e3b], /* CJK Ideograph */ + [0x9e3c, 0x9e3c], /* CJK Ideograph */ + [0x9e3d, 0x9e3d], /* CJK Ideograph */ + [0x9e3e, 0x9e3e], /* CJK Ideograph */ + [0x9e3f, 0x9e3f], /* CJK Ideograph */ + [0x9e40, 0x9e40], /* CJK Ideograph */ + [0x9e41, 0x9e41], /* CJK Ideograph */ + [0x9e42, 0x9e42], /* CJK Ideograph */ + [0x9e43, 0x9e43], /* CJK Ideograph */ + [0x9e44, 0x9e44], /* CJK Ideograph */ + [0x9e45, 0x9e45], /* CJK Ideograph */ + [0x9e46, 0x9e46], /* CJK Ideograph */ + [0x9e47, 0x9e47], /* CJK Ideograph */ + [0x9e48, 0x9e48], /* CJK Ideograph */ + [0x9e49, 0x9e49], /* CJK Ideograph */ + [0x9e4a, 0x9e4a], /* CJK Ideograph */ + [0x9e4b, 0x9e4b], /* CJK Ideograph */ + [0x9e4c, 0x9e4c], /* CJK Ideograph */ + [0x9e4d, 0x9e4d], /* CJK Ideograph */ + [0x9e4e, 0x9e4e], /* CJK Ideograph */ + [0x9e4f, 0x9e4f], /* CJK Ideograph */ + [0x9e50, 0x9e50], /* CJK Ideograph */ + [0x9e51, 0x9e51], /* CJK Ideograph */ + [0x9e52, 0x9e52], /* CJK Ideograph */ + [0x9e53, 0x9e53], /* CJK Ideograph */ + [0x9e54, 0x9e54], /* CJK Ideograph */ + [0x9e55, 0x9e55], /* CJK Ideograph */ + [0x9e56, 0x9e56], /* CJK Ideograph */ + [0x9e57, 0x9e57], /* CJK Ideograph */ + [0x9e58, 0x9e58], /* CJK Ideograph */ + [0x9e59, 0x9e59], /* CJK Ideograph */ + [0x9e5a, 0x9e5a], /* CJK Ideograph */ + [0x9e5b, 0x9e5b], /* CJK Ideograph */ + [0x9e5c, 0x9e5c], /* CJK Ideograph */ + [0x9e5d, 0x9e5d], /* CJK Ideograph */ + [0x9e5e, 0x9e5e], /* CJK Ideograph */ + [0x9e5f, 0x9e5f], /* CJK Ideograph */ + [0x9e60, 0x9e60], /* CJK Ideograph */ + [0x9e61, 0x9e61], /* CJK Ideograph */ + [0x9e62, 0x9e62], /* CJK Ideograph */ + [0x9e63, 0x9e63], /* CJK Ideograph */ + [0x9e64, 0x9e64], /* CJK Ideograph */ + [0x9e65, 0x9e65], /* CJK Ideograph */ + [0x9e66, 0x9e66], /* CJK Ideograph */ + [0x9e67, 0x9e67], /* CJK Ideograph */ + [0x9e68, 0x9e68], /* CJK Ideograph */ + [0x9e69, 0x9e69], /* CJK Ideograph */ + [0x9e6a, 0x9e6a], /* CJK Ideograph */ + [0x9e6b, 0x9e6b], /* CJK Ideograph */ + [0x9e6c, 0x9e6c], /* CJK Ideograph */ + [0x9e6d, 0x9e6d], /* CJK Ideograph */ + [0x9e6e, 0x9e6e], /* CJK Ideograph */ + [0x9e6f, 0x9e6f], /* CJK Ideograph */ + [0x9e70, 0x9e70], /* CJK Ideograph */ + [0x9e71, 0x9e71], /* CJK Ideograph */ + [0x9e72, 0x9e72], /* CJK Ideograph */ + [0x9e73, 0x9e73], /* CJK Ideograph */ + [0x9e74, 0x9e74], /* CJK Ideograph */ + [0x9e75, 0x9e75], /* CJK Ideograph */ + [0x9e76, 0x9e76], /* CJK Ideograph */ + [0x9e77, 0x9e77], /* CJK Ideograph */ + [0x9e78, 0x9e78], /* CJK Ideograph */ + [0x9e79, 0x9e79], /* CJK Ideograph */ + [0x9e7a, 0x9e7a], /* CJK Ideograph */ + [0x9e7b, 0x9e7b], /* CJK Ideograph */ + [0x9e7c, 0x9e7c], /* CJK Ideograph */ + [0x9e7d, 0x9e7d], /* CJK Ideograph */ + [0x9e7e, 0x9e7e], /* CJK Ideograph */ + [0x9e7f, 0x9e7f], /* CJK Ideograph */ + [0x9e80, 0x9e80], /* CJK Ideograph */ + [0x9e81, 0x9e81], /* CJK Ideograph */ + [0x9e82, 0x9e82], /* CJK Ideograph */ + [0x9e83, 0x9e83], /* CJK Ideograph */ + [0x9e84, 0x9e84], /* CJK Ideograph */ + [0x9e85, 0x9e85], /* CJK Ideograph */ + [0x9e86, 0x9e86], /* CJK Ideograph */ + [0x9e87, 0x9e87], /* CJK Ideograph */ + [0x9e88, 0x9e88], /* CJK Ideograph */ + [0x9e89, 0x9e89], /* CJK Ideograph */ + [0x9e8a, 0x9e8a], /* CJK Ideograph */ + [0x9e8b, 0x9e8b], /* CJK Ideograph */ + [0x9e8c, 0x9e8c], /* CJK Ideograph */ + [0x9e8d, 0x9e8d], /* CJK Ideograph */ + [0x9e8e, 0x9e8e], /* CJK Ideograph */ + [0x9e8f, 0x9e8f], /* CJK Ideograph */ + [0x9e90, 0x9e90], /* CJK Ideograph */ + [0x9e91, 0x9e91], /* CJK Ideograph */ + [0x9e92, 0x9e92], /* CJK Ideograph */ + [0x9e93, 0x9e93], /* CJK Ideograph */ + [0x9e94, 0x9e94], /* CJK Ideograph */ + [0x9e95, 0x9e95], /* CJK Ideograph */ + [0x9e96, 0x9e96], /* CJK Ideograph */ + [0x9e97, 0x9e97], /* CJK Ideograph */ + [0x9e98, 0x9e98], /* CJK Ideograph */ + [0x9e99, 0x9e99], /* CJK Ideograph */ + [0x9e9a, 0x9e9a], /* CJK Ideograph */ + [0x9e9b, 0x9e9b], /* CJK Ideograph */ + [0x9e9c, 0x9e9c], /* CJK Ideograph */ + [0x9e9d, 0x9e9d], /* CJK Ideograph */ + [0x9e9e, 0x9e9e], /* CJK Ideograph */ + [0x9e9f, 0x9e9f], /* CJK Ideograph */ + [0x9ea0, 0x9ea0], /* CJK Ideograph */ + [0x9ea1, 0x9ea1], /* CJK Ideograph */ + [0x9ea2, 0x9ea2], /* CJK Ideograph */ + [0x9ea3, 0x9ea3], /* CJK Ideograph */ + [0x9ea4, 0x9ea4], /* CJK Ideograph */ + [0x9ea5, 0x9ea5], /* CJK Ideograph */ + [0x9ea6, 0x9ea6], /* CJK Ideograph */ + [0x9ea7, 0x9ea7], /* CJK Ideograph */ + [0x9ea8, 0x9ea8], /* CJK Ideograph */ + [0x9ea9, 0x9ea9], /* CJK Ideograph */ + [0x9eaa, 0x9eaa], /* CJK Ideograph */ + [0x9eab, 0x9eab], /* CJK Ideograph */ + [0x9eac, 0x9eac], /* CJK Ideograph */ + [0x9ead, 0x9ead], /* CJK Ideograph */ + [0x9eae, 0x9eae], /* CJK Ideograph */ + [0x9eaf, 0x9eaf], /* CJK Ideograph */ + [0x9eb0, 0x9eb0], /* CJK Ideograph */ + [0x9eb1, 0x9eb1], /* CJK Ideograph */ + [0x9eb2, 0x9eb2], /* CJK Ideograph */ + [0x9eb3, 0x9eb3], /* CJK Ideograph */ + [0x9eb4, 0x9eb4], /* CJK Ideograph */ + [0x9eb5, 0x9eb5], /* CJK Ideograph */ + [0x9eb6, 0x9eb6], /* CJK Ideograph */ + [0x9eb7, 0x9eb7], /* CJK Ideograph */ + [0x9eb8, 0x9eb8], /* CJK Ideograph */ + [0x9eb9, 0x9eb9], /* CJK Ideograph */ + [0x9eba, 0x9eba], /* CJK Ideograph */ + [0x9ebb, 0x9ebb], /* CJK Ideograph */ + [0x9ebc, 0x9ebc], /* CJK Ideograph */ + [0x9ebd, 0x9ebd], /* CJK Ideograph */ + [0x9ebe, 0x9ebe], /* CJK Ideograph */ + [0x9ebf, 0x9ebf], /* CJK Ideograph */ + [0x9ec0, 0x9ec0], /* CJK Ideograph */ + [0x9ec1, 0x9ec1], /* CJK Ideograph */ + [0x9ec2, 0x9ec2], /* CJK Ideograph */ + [0x9ec3, 0x9ec3], /* CJK Ideograph */ + [0x9ec4, 0x9ec4], /* CJK Ideograph */ + [0x9ec5, 0x9ec5], /* CJK Ideograph */ + [0x9ec6, 0x9ec6], /* CJK Ideograph */ + [0x9ec7, 0x9ec7], /* CJK Ideograph */ + [0x9ec8, 0x9ec8], /* CJK Ideograph */ + [0x9ec9, 0x9ec9], /* CJK Ideograph */ + [0x9eca, 0x9eca], /* CJK Ideograph */ + [0x9ecb, 0x9ecb], /* CJK Ideograph */ + [0x9ecc, 0x9ecc], /* CJK Ideograph */ + [0x9ecd, 0x9ecd], /* CJK Ideograph */ + [0x9ece, 0x9ece], /* CJK Ideograph */ + [0x9ecf, 0x9ecf], /* CJK Ideograph */ + [0x9ed0, 0x9ed0], /* CJK Ideograph */ + [0x9ed1, 0x9ed1], /* CJK Ideograph */ + [0x9ed2, 0x9ed2], /* CJK Ideograph */ + [0x9ed3, 0x9ed3], /* CJK Ideograph */ + [0x9ed4, 0x9ed4], /* CJK Ideograph */ + [0x9ed5, 0x9ed5], /* CJK Ideograph */ + [0x9ed6, 0x9ed6], /* CJK Ideograph */ + [0x9ed7, 0x9ed7], /* CJK Ideograph */ + [0x9ed8, 0x9ed8], /* CJK Ideograph */ + [0x9ed9, 0x9ed9], /* CJK Ideograph */ + [0x9eda, 0x9eda], /* CJK Ideograph */ + [0x9edb, 0x9edb], /* CJK Ideograph */ + [0x9edc, 0x9edc], /* CJK Ideograph */ + [0x9edd, 0x9edd], /* CJK Ideograph */ + [0x9ede, 0x9ede], /* CJK Ideograph */ + [0x9edf, 0x9edf], /* CJK Ideograph */ + [0x9ee0, 0x9ee0], /* CJK Ideograph */ + [0x9ee1, 0x9ee1], /* CJK Ideograph */ + [0x9ee2, 0x9ee2], /* CJK Ideograph */ + [0x9ee3, 0x9ee3], /* CJK Ideograph */ + [0x9ee4, 0x9ee4], /* CJK Ideograph */ + [0x9ee5, 0x9ee5], /* CJK Ideograph */ + [0x9ee6, 0x9ee6], /* CJK Ideograph */ + [0x9ee7, 0x9ee7], /* CJK Ideograph */ + [0x9ee8, 0x9ee8], /* CJK Ideograph */ + [0x9ee9, 0x9ee9], /* CJK Ideograph */ + [0x9eea, 0x9eea], /* CJK Ideograph */ + [0x9eeb, 0x9eeb], /* CJK Ideograph */ + [0x9eec, 0x9eec], /* CJK Ideograph */ + [0x9eed, 0x9eed], /* CJK Ideograph */ + [0x9eee, 0x9eee], /* CJK Ideograph */ + [0x9eef, 0x9eef], /* CJK Ideograph */ + [0x9ef0, 0x9ef0], /* CJK Ideograph */ + [0x9ef1, 0x9ef1], /* CJK Ideograph */ + [0x9ef2, 0x9ef2], /* CJK Ideograph */ + [0x9ef3, 0x9ef3], /* CJK Ideograph */ + [0x9ef4, 0x9ef4], /* CJK Ideograph */ + [0x9ef5, 0x9ef5], /* CJK Ideograph */ + [0x9ef6, 0x9ef6], /* CJK Ideograph */ + [0x9ef7, 0x9ef7], /* CJK Ideograph */ + [0x9ef8, 0x9ef8], /* CJK Ideograph */ + [0x9ef9, 0x9ef9], /* CJK Ideograph */ + [0x9efa, 0x9efa], /* CJK Ideograph */ + [0x9efb, 0x9efb], /* CJK Ideograph */ + [0x9efc, 0x9efc], /* CJK Ideograph */ + [0x9efd, 0x9efd], /* CJK Ideograph */ + [0x9efe, 0x9efe], /* CJK Ideograph */ + [0x9eff, 0x9eff], /* CJK Ideograph */ + [0x9f00, 0x9f00], /* CJK Ideograph */ + [0x9f01, 0x9f01], /* CJK Ideograph */ + [0x9f02, 0x9f02], /* CJK Ideograph */ + [0x9f03, 0x9f03], /* CJK Ideograph */ + [0x9f04, 0x9f04], /* CJK Ideograph */ + [0x9f05, 0x9f05], /* CJK Ideograph */ + [0x9f06, 0x9f06], /* CJK Ideograph */ + [0x9f07, 0x9f07], /* CJK Ideograph */ + [0x9f08, 0x9f08], /* CJK Ideograph */ + [0x9f09, 0x9f09], /* CJK Ideograph */ + [0x9f0a, 0x9f0a], /* CJK Ideograph */ + [0x9f0b, 0x9f0b], /* CJK Ideograph */ + [0x9f0c, 0x9f0c], /* CJK Ideograph */ + [0x9f0d, 0x9f0d], /* CJK Ideograph */ + [0x9f0e, 0x9f0e], /* CJK Ideograph */ + [0x9f0f, 0x9f0f], /* CJK Ideograph */ + [0x9f10, 0x9f10], /* CJK Ideograph */ + [0x9f11, 0x9f11], /* CJK Ideograph */ + [0x9f12, 0x9f12], /* CJK Ideograph */ + [0x9f13, 0x9f13], /* CJK Ideograph */ + [0x9f14, 0x9f14], /* CJK Ideograph */ + [0x9f15, 0x9f15], /* CJK Ideograph */ + [0x9f16, 0x9f16], /* CJK Ideograph */ + [0x9f17, 0x9f17], /* CJK Ideograph */ + [0x9f18, 0x9f18], /* CJK Ideograph */ + [0x9f19, 0x9f19], /* CJK Ideograph */ + [0x9f1a, 0x9f1a], /* CJK Ideograph */ + [0x9f1b, 0x9f1b], /* CJK Ideograph */ + [0x9f1c, 0x9f1c], /* CJK Ideograph */ + [0x9f1d, 0x9f1d], /* CJK Ideograph */ + [0x9f1e, 0x9f1e], /* CJK Ideograph */ + [0x9f1f, 0x9f1f], /* CJK Ideograph */ + [0x9f20, 0x9f20], /* CJK Ideograph */ + [0x9f21, 0x9f21], /* CJK Ideograph */ + [0x9f22, 0x9f22], /* CJK Ideograph */ + [0x9f23, 0x9f23], /* CJK Ideograph */ + [0x9f24, 0x9f24], /* CJK Ideograph */ + [0x9f25, 0x9f25], /* CJK Ideograph */ + [0x9f26, 0x9f26], /* CJK Ideograph */ + [0x9f27, 0x9f27], /* CJK Ideograph */ + [0x9f28, 0x9f28], /* CJK Ideograph */ + [0x9f29, 0x9f29], /* CJK Ideograph */ + [0x9f2a, 0x9f2a], /* CJK Ideograph */ + [0x9f2b, 0x9f2b], /* CJK Ideograph */ + [0x9f2c, 0x9f2c], /* CJK Ideograph */ + [0x9f2d, 0x9f2d], /* CJK Ideograph */ + [0x9f2e, 0x9f2e], /* CJK Ideograph */ + [0x9f2f, 0x9f2f], /* CJK Ideograph */ + [0x9f30, 0x9f30], /* CJK Ideograph */ + [0x9f31, 0x9f31], /* CJK Ideograph */ + [0x9f32, 0x9f32], /* CJK Ideograph */ + [0x9f33, 0x9f33], /* CJK Ideograph */ + [0x9f34, 0x9f34], /* CJK Ideograph */ + [0x9f35, 0x9f35], /* CJK Ideograph */ + [0x9f36, 0x9f36], /* CJK Ideograph */ + [0x9f37, 0x9f37], /* CJK Ideograph */ + [0x9f38, 0x9f38], /* CJK Ideograph */ + [0x9f39, 0x9f39], /* CJK Ideograph */ + [0x9f3a, 0x9f3a], /* CJK Ideograph */ + [0x9f3b, 0x9f3b], /* CJK Ideograph */ + [0x9f3c, 0x9f3c], /* CJK Ideograph */ + [0x9f3d, 0x9f3d], /* CJK Ideograph */ + [0x9f3e, 0x9f3e], /* CJK Ideograph */ + [0x9f3f, 0x9f3f], /* CJK Ideograph */ + [0x9f40, 0x9f40], /* CJK Ideograph */ + [0x9f41, 0x9f41], /* CJK Ideograph */ + [0x9f42, 0x9f42], /* CJK Ideograph */ + [0x9f43, 0x9f43], /* CJK Ideograph */ + [0x9f44, 0x9f44], /* CJK Ideograph */ + [0x9f45, 0x9f45], /* CJK Ideograph */ + [0x9f46, 0x9f46], /* CJK Ideograph */ + [0x9f47, 0x9f47], /* CJK Ideograph */ + [0x9f48, 0x9f48], /* CJK Ideograph */ + [0x9f49, 0x9f49], /* CJK Ideograph */ + [0x9f4a, 0x9f4a], /* CJK Ideograph */ + [0x9f4b, 0x9f4b], /* CJK Ideograph */ + [0x9f4c, 0x9f4c], /* CJK Ideograph */ + [0x9f4d, 0x9f4d], /* CJK Ideograph */ + [0x9f4e, 0x9f4e], /* CJK Ideograph */ + [0x9f4f, 0x9f4f], /* CJK Ideograph */ + [0x9f50, 0x9f50], /* CJK Ideograph */ + [0x9f51, 0x9f51], /* CJK Ideograph */ + [0x9f52, 0x9f52], /* CJK Ideograph */ + [0x9f53, 0x9f53], /* CJK Ideograph */ + [0x9f54, 0x9f54], /* CJK Ideograph */ + [0x9f55, 0x9f55], /* CJK Ideograph */ + [0x9f56, 0x9f56], /* CJK Ideograph */ + [0x9f57, 0x9f57], /* CJK Ideograph */ + [0x9f58, 0x9f58], /* CJK Ideograph */ + [0x9f59, 0x9f59], /* CJK Ideograph */ + [0x9f5a, 0x9f5a], /* CJK Ideograph */ + [0x9f5b, 0x9f5b], /* CJK Ideograph */ + [0x9f5c, 0x9f5c], /* CJK Ideograph */ + [0x9f5d, 0x9f5d], /* CJK Ideograph */ + [0x9f5e, 0x9f5e], /* CJK Ideograph */ + [0x9f5f, 0x9f5f], /* CJK Ideograph */ + [0x9f60, 0x9f60], /* CJK Ideograph */ + [0x9f61, 0x9f61], /* CJK Ideograph */ + [0x9f62, 0x9f62], /* CJK Ideograph */ + [0x9f63, 0x9f63], /* CJK Ideograph */ + [0x9f64, 0x9f64], /* CJK Ideograph */ + [0x9f65, 0x9f65], /* CJK Ideograph */ + [0x9f66, 0x9f66], /* CJK Ideograph */ + [0x9f67, 0x9f67], /* CJK Ideograph */ + [0x9f68, 0x9f68], /* CJK Ideograph */ + [0x9f69, 0x9f69], /* CJK Ideograph */ + [0x9f6a, 0x9f6a], /* CJK Ideograph */ + [0x9f6b, 0x9f6b], /* CJK Ideograph */ + [0x9f6c, 0x9f6c], /* CJK Ideograph */ + [0x9f6d, 0x9f6d], /* CJK Ideograph */ + [0x9f6e, 0x9f6e], /* CJK Ideograph */ + [0x9f6f, 0x9f6f], /* CJK Ideograph */ + [0x9f70, 0x9f70], /* CJK Ideograph */ + [0x9f71, 0x9f71], /* CJK Ideograph */ + [0x9f72, 0x9f72], /* CJK Ideograph */ + [0x9f73, 0x9f73], /* CJK Ideograph */ + [0x9f74, 0x9f74], /* CJK Ideograph */ + [0x9f75, 0x9f75], /* CJK Ideograph */ + [0x9f76, 0x9f76], /* CJK Ideograph */ + [0x9f77, 0x9f77], /* CJK Ideograph */ + [0x9f78, 0x9f78], /* CJK Ideograph */ + [0x9f79, 0x9f79], /* CJK Ideograph */ + [0x9f7a, 0x9f7a], /* CJK Ideograph */ + [0x9f7b, 0x9f7b], /* CJK Ideograph */ + [0x9f7c, 0x9f7c], /* CJK Ideograph */ + [0x9f7d, 0x9f7d], /* CJK Ideograph */ + [0x9f7e, 0x9f7e], /* CJK Ideograph */ + [0x9f7f, 0x9f7f], /* CJK Ideograph */ + [0x9f80, 0x9f80], /* CJK Ideograph */ + [0x9f81, 0x9f81], /* CJK Ideograph */ + [0x9f82, 0x9f82], /* CJK Ideograph */ + [0x9f83, 0x9f83], /* CJK Ideograph */ + [0x9f84, 0x9f84], /* CJK Ideograph */ + [0x9f85, 0x9f85], /* CJK Ideograph */ + [0x9f86, 0x9f86], /* CJK Ideograph */ + [0x9f87, 0x9f87], /* CJK Ideograph */ + [0x9f88, 0x9f88], /* CJK Ideograph */ + [0x9f89, 0x9f89], /* CJK Ideograph */ + [0x9f8a, 0x9f8a], /* CJK Ideograph */ + [0x9f8b, 0x9f8b], /* CJK Ideograph */ + [0x9f8c, 0x9f8c], /* CJK Ideograph */ + [0x9f8d, 0x9f8d], /* CJK Ideograph */ + [0x9f8e, 0x9f8e], /* CJK Ideograph */ + [0x9f8f, 0x9f8f], /* CJK Ideograph */ + [0x9f90, 0x9f90], /* CJK Ideograph */ + [0x9f91, 0x9f91], /* CJK Ideograph */ + [0x9f92, 0x9f92], /* CJK Ideograph */ + [0x9f93, 0x9f93], /* CJK Ideograph */ + [0x9f94, 0x9f94], /* CJK Ideograph */ + [0x9f95, 0x9f95], /* CJK Ideograph */ + [0x9f96, 0x9f96], /* CJK Ideograph */ + [0x9f97, 0x9f97], /* CJK Ideograph */ + [0x9f98, 0x9f98], /* CJK Ideograph */ + [0x9f99, 0x9f99], /* CJK Ideograph */ + [0x9f9a, 0x9f9a], /* CJK Ideograph */ + [0x9f9b, 0x9f9b], /* CJK Ideograph */ + [0x9f9c, 0x9f9c], /* CJK Ideograph */ + [0x9f9d, 0x9f9d], /* CJK Ideograph */ + [0x9f9e, 0x9f9e], /* CJK Ideograph */ + [0x9f9f, 0x9f9f], /* CJK Ideograph */ + [0x9fa0, 0x9fa0], /* CJK Ideograph */ + [0x9fa1, 0x9fa1], /* CJK Ideograph */ + [0x9fa2, 0x9fa2], /* CJK Ideograph */ + [0x9fa3, 0x9fa3], /* CJK Ideograph */ + [0x9fa4, 0x9fa4], /* CJK Ideograph */ + [0x9fa5, 0x9fa5], /* CJK Ideograph */ + [0x9fa6, 0x9fa6], /* CJK Ideograph */ + [0x9fa7, 0x9fa7], /* CJK Ideograph */ + [0x9fa8, 0x9fa8], /* CJK Ideograph */ + [0x9fa9, 0x9fa9], /* CJK Ideograph */ + [0x9faa, 0x9faa], /* CJK Ideograph */ + [0x9fab, 0x9fab], /* CJK Ideograph */ + [0x9fac, 0x9fac], /* CJK Ideograph */ + [0x9fad, 0x9fad], /* CJK Ideograph */ + [0x9fae, 0x9fae], /* CJK Ideograph */ + [0x9faf, 0x9faf], /* CJK Ideograph */ + [0x9fb0, 0x9fb0], /* CJK Ideograph */ + [0x9fb1, 0x9fb1], /* CJK Ideograph */ + [0x9fb2, 0x9fb2], /* CJK Ideograph */ + [0x9fb3, 0x9fb3], /* CJK Ideograph */ + [0x9fb4, 0x9fb4], /* CJK Ideograph */ + [0x9fb5, 0x9fb5], /* CJK Ideograph */ + [0x9fb6, 0x9fb6], /* CJK Ideograph */ + [0x9fb7, 0x9fb7], /* CJK Ideograph */ + [0x9fb8, 0x9fb8], /* CJK Ideograph */ + [0x9fb9, 0x9fb9], /* CJK Ideograph */ + [0x9fba, 0x9fba], /* CJK Ideograph */ + [0x9fbb, 0x9fbb], /* CJK Ideograph */ + [0x9fbc, 0x9fbc], /* CJK Ideograph */ + [0x9fbd, 0x9fbd], /* CJK Ideograph */ + [0x9fbe, 0x9fbe], /* CJK Ideograph */ + [0x9fbf, 0x9fbf], /* CJK Ideograph */ + [0x9fc0, 0x9fc0], /* CJK Ideograph */ + [0x9fc1, 0x9fc1], /* CJK Ideograph */ + [0x9fc2, 0x9fc2], /* CJK Ideograph */ + [0x9fc3, 0x9fc3], /* CJK Ideograph */ + [0x9fc4, 0x9fc4], /* CJK Ideograph */ + [0x9fc5, 0x9fc5], /* CJK Ideograph */ + [0x9fc6, 0x9fc6], /* CJK Ideograph */ + [0x9fc7, 0x9fc7], /* CJK Ideograph */ + [0x9fc8, 0x9fc8], /* CJK Ideograph */ + [0x9fc9, 0x9fc9], /* CJK Ideograph */ + [0x9fca, 0x9fca], /* CJK Ideograph */ + [0x9fcb, 0x9fcb], /* CJK Ideograph */ + [0x9fcc, 0x9fcc], /* CJK Ideograph */ + [0x9fcd, 0x9fcd], + [0x9fce, 0x9fce], + [0x9fcf, 0x9fcf], + [0x9fd0, 0x9fd0], + [0x9fd1, 0x9fd1], + [0x9fd2, 0x9fd2], + [0x9fd3, 0x9fd3], + [0x9fd4, 0x9fd4], + [0x9fd5, 0x9fd5], + [0x9fd6, 0x9fd6], + [0x9fd7, 0x9fd7], + [0x9fd8, 0x9fd8], + [0x9fd9, 0x9fd9], + [0x9fda, 0x9fda], + [0x9fdb, 0x9fdb], + [0x9fdc, 0x9fdc], + [0x9fdd, 0x9fdd], + [0x9fde, 0x9fde], + [0x9fdf, 0x9fdf], + [0x9fe0, 0x9fe0], + [0x9fe1, 0x9fe1], + [0x9fe2, 0x9fe2], + [0x9fe3, 0x9fe3], + [0x9fe4, 0x9fe4], + [0x9fe5, 0x9fe5], + [0x9fe6, 0x9fe6], + [0x9fe7, 0x9fe7], + [0x9fe8, 0x9fe8], + [0x9fe9, 0x9fe9], + [0x9fea, 0x9fea], + [0x9feb, 0x9feb], + [0x9fec, 0x9fec], + [0x9fed, 0x9fed], + [0x9fee, 0x9fee], + [0x9fef, 0x9fef], + [0x9ff0, 0x9ff0], + [0x9ff1, 0x9ff1], + [0x9ff2, 0x9ff2], + [0x9ff3, 0x9ff3], + [0x9ff4, 0x9ff4], + [0x9ff5, 0x9ff5], + [0x9ff6, 0x9ff6], + [0x9ff7, 0x9ff7], + [0x9ff8, 0x9ff8], + [0x9ff9, 0x9ff9], + [0x9ffa, 0x9ffa], + [0x9ffb, 0x9ffb], + [0x9ffc, 0x9ffc], + [0x9ffd, 0x9ffd], + [0x9ffe, 0x9ffe], + [0x9fff, 0x9fff], + [0xa000, 0xa000], /* YI SYLLABLE IT */ + [0xa001, 0xa001], /* YI SYLLABLE IX */ + [0xa002, 0xa002], /* YI SYLLABLE I */ + [0xa003, 0xa003], /* YI SYLLABLE IP */ + [0xa004, 0xa004], /* YI SYLLABLE IET */ + [0xa005, 0xa005], /* YI SYLLABLE IEX */ + [0xa006, 0xa006], /* YI SYLLABLE IE */ + [0xa007, 0xa007], /* YI SYLLABLE IEP */ + [0xa008, 0xa008], /* YI SYLLABLE AT */ + [0xa009, 0xa009], /* YI SYLLABLE AX */ + [0xa00a, 0xa00a], /* YI SYLLABLE A */ + [0xa00b, 0xa00b], /* YI SYLLABLE AP */ + [0xa00c, 0xa00c], /* YI SYLLABLE UOX */ + [0xa00d, 0xa00d], /* YI SYLLABLE UO */ + [0xa00e, 0xa00e], /* YI SYLLABLE UOP */ + [0xa00f, 0xa00f], /* YI SYLLABLE OT */ + [0xa010, 0xa010], /* YI SYLLABLE OX */ + [0xa011, 0xa011], /* YI SYLLABLE O */ + [0xa012, 0xa012], /* YI SYLLABLE OP */ + [0xa013, 0xa013], /* YI SYLLABLE EX */ + [0xa014, 0xa014], /* YI SYLLABLE E */ + [0xa015, 0xa015], /* YI SYLLABLE WU */ + [0xa016, 0xa016], /* YI SYLLABLE BIT */ + [0xa017, 0xa017], /* YI SYLLABLE BIX */ + [0xa018, 0xa018], /* YI SYLLABLE BI */ + [0xa019, 0xa019], /* YI SYLLABLE BIP */ + [0xa01a, 0xa01a], /* YI SYLLABLE BIET */ + [0xa01b, 0xa01b], /* YI SYLLABLE BIEX */ + [0xa01c, 0xa01c], /* YI SYLLABLE BIE */ + [0xa01d, 0xa01d], /* YI SYLLABLE BIEP */ + [0xa01e, 0xa01e], /* YI SYLLABLE BAT */ + [0xa01f, 0xa01f], /* YI SYLLABLE BAX */ + [0xa020, 0xa020], /* YI SYLLABLE BA */ + [0xa021, 0xa021], /* YI SYLLABLE BAP */ + [0xa022, 0xa022], /* YI SYLLABLE BUOX */ + [0xa023, 0xa023], /* YI SYLLABLE BUO */ + [0xa024, 0xa024], /* YI SYLLABLE BUOP */ + [0xa025, 0xa025], /* YI SYLLABLE BOT */ + [0xa026, 0xa026], /* YI SYLLABLE BOX */ + [0xa027, 0xa027], /* YI SYLLABLE BO */ + [0xa028, 0xa028], /* YI SYLLABLE BOP */ + [0xa029, 0xa029], /* YI SYLLABLE BEX */ + [0xa02a, 0xa02a], /* YI SYLLABLE BE */ + [0xa02b, 0xa02b], /* YI SYLLABLE BEP */ + [0xa02c, 0xa02c], /* YI SYLLABLE BUT */ + [0xa02d, 0xa02d], /* YI SYLLABLE BUX */ + [0xa02e, 0xa02e], /* YI SYLLABLE BU */ + [0xa02f, 0xa02f], /* YI SYLLABLE BUP */ + [0xa030, 0xa030], /* YI SYLLABLE BURX */ + [0xa031, 0xa031], /* YI SYLLABLE BUR */ + [0xa032, 0xa032], /* YI SYLLABLE BYT */ + [0xa033, 0xa033], /* YI SYLLABLE BYX */ + [0xa034, 0xa034], /* YI SYLLABLE BY */ + [0xa035, 0xa035], /* YI SYLLABLE BYP */ + [0xa036, 0xa036], /* YI SYLLABLE BYRX */ + [0xa037, 0xa037], /* YI SYLLABLE BYR */ + [0xa038, 0xa038], /* YI SYLLABLE PIT */ + [0xa039, 0xa039], /* YI SYLLABLE PIX */ + [0xa03a, 0xa03a], /* YI SYLLABLE PI */ + [0xa03b, 0xa03b], /* YI SYLLABLE PIP */ + [0xa03c, 0xa03c], /* YI SYLLABLE PIEX */ + [0xa03d, 0xa03d], /* YI SYLLABLE PIE */ + [0xa03e, 0xa03e], /* YI SYLLABLE PIEP */ + [0xa03f, 0xa03f], /* YI SYLLABLE PAT */ + [0xa040, 0xa040], /* YI SYLLABLE PAX */ + [0xa041, 0xa041], /* YI SYLLABLE PA */ + [0xa042, 0xa042], /* YI SYLLABLE PAP */ + [0xa043, 0xa043], /* YI SYLLABLE PUOX */ + [0xa044, 0xa044], /* YI SYLLABLE PUO */ + [0xa045, 0xa045], /* YI SYLLABLE PUOP */ + [0xa046, 0xa046], /* YI SYLLABLE POT */ + [0xa047, 0xa047], /* YI SYLLABLE POX */ + [0xa048, 0xa048], /* YI SYLLABLE PO */ + [0xa049, 0xa049], /* YI SYLLABLE POP */ + [0xa04a, 0xa04a], /* YI SYLLABLE PUT */ + [0xa04b, 0xa04b], /* YI SYLLABLE PUX */ + [0xa04c, 0xa04c], /* YI SYLLABLE PU */ + [0xa04d, 0xa04d], /* YI SYLLABLE PUP */ + [0xa04e, 0xa04e], /* YI SYLLABLE PURX */ + [0xa04f, 0xa04f], /* YI SYLLABLE PUR */ + [0xa050, 0xa050], /* YI SYLLABLE PYT */ + [0xa051, 0xa051], /* YI SYLLABLE PYX */ + [0xa052, 0xa052], /* YI SYLLABLE PY */ + [0xa053, 0xa053], /* YI SYLLABLE PYP */ + [0xa054, 0xa054], /* YI SYLLABLE PYRX */ + [0xa055, 0xa055], /* YI SYLLABLE PYR */ + [0xa056, 0xa056], /* YI SYLLABLE BBIT */ + [0xa057, 0xa057], /* YI SYLLABLE BBIX */ + [0xa058, 0xa058], /* YI SYLLABLE BBI */ + [0xa059, 0xa059], /* YI SYLLABLE BBIP */ + [0xa05a, 0xa05a], /* YI SYLLABLE BBIET */ + [0xa05b, 0xa05b], /* YI SYLLABLE BBIEX */ + [0xa05c, 0xa05c], /* YI SYLLABLE BBIE */ + [0xa05d, 0xa05d], /* YI SYLLABLE BBIEP */ + [0xa05e, 0xa05e], /* YI SYLLABLE BBAT */ + [0xa05f, 0xa05f], /* YI SYLLABLE BBAX */ + [0xa060, 0xa060], /* YI SYLLABLE BBA */ + [0xa061, 0xa061], /* YI SYLLABLE BBAP */ + [0xa062, 0xa062], /* YI SYLLABLE BBUOX */ + [0xa063, 0xa063], /* YI SYLLABLE BBUO */ + [0xa064, 0xa064], /* YI SYLLABLE BBUOP */ + [0xa065, 0xa065], /* YI SYLLABLE BBOT */ + [0xa066, 0xa066], /* YI SYLLABLE BBOX */ + [0xa067, 0xa067], /* YI SYLLABLE BBO */ + [0xa068, 0xa068], /* YI SYLLABLE BBOP */ + [0xa069, 0xa069], /* YI SYLLABLE BBEX */ + [0xa06a, 0xa06a], /* YI SYLLABLE BBE */ + [0xa06b, 0xa06b], /* YI SYLLABLE BBEP */ + [0xa06c, 0xa06c], /* YI SYLLABLE BBUT */ + [0xa06d, 0xa06d], /* YI SYLLABLE BBUX */ + [0xa06e, 0xa06e], /* YI SYLLABLE BBU */ + [0xa06f, 0xa06f], /* YI SYLLABLE BBUP */ + [0xa070, 0xa070], /* YI SYLLABLE BBURX */ + [0xa071, 0xa071], /* YI SYLLABLE BBUR */ + [0xa072, 0xa072], /* YI SYLLABLE BBYT */ + [0xa073, 0xa073], /* YI SYLLABLE BBYX */ + [0xa074, 0xa074], /* YI SYLLABLE BBY */ + [0xa075, 0xa075], /* YI SYLLABLE BBYP */ + [0xa076, 0xa076], /* YI SYLLABLE NBIT */ + [0xa077, 0xa077], /* YI SYLLABLE NBIX */ + [0xa078, 0xa078], /* YI SYLLABLE NBI */ + [0xa079, 0xa079], /* YI SYLLABLE NBIP */ + [0xa07a, 0xa07a], /* YI SYLLABLE NBIEX */ + [0xa07b, 0xa07b], /* YI SYLLABLE NBIE */ + [0xa07c, 0xa07c], /* YI SYLLABLE NBIEP */ + [0xa07d, 0xa07d], /* YI SYLLABLE NBAT */ + [0xa07e, 0xa07e], /* YI SYLLABLE NBAX */ + [0xa07f, 0xa07f], /* YI SYLLABLE NBA */ + [0xa080, 0xa080], /* YI SYLLABLE NBAP */ + [0xa081, 0xa081], /* YI SYLLABLE NBOT */ + [0xa082, 0xa082], /* YI SYLLABLE NBOX */ + [0xa083, 0xa083], /* YI SYLLABLE NBO */ + [0xa084, 0xa084], /* YI SYLLABLE NBOP */ + [0xa085, 0xa085], /* YI SYLLABLE NBUT */ + [0xa086, 0xa086], /* YI SYLLABLE NBUX */ + [0xa087, 0xa087], /* YI SYLLABLE NBU */ + [0xa088, 0xa088], /* YI SYLLABLE NBUP */ + [0xa089, 0xa089], /* YI SYLLABLE NBURX */ + [0xa08a, 0xa08a], /* YI SYLLABLE NBUR */ + [0xa08b, 0xa08b], /* YI SYLLABLE NBYT */ + [0xa08c, 0xa08c], /* YI SYLLABLE NBYX */ + [0xa08d, 0xa08d], /* YI SYLLABLE NBY */ + [0xa08e, 0xa08e], /* YI SYLLABLE NBYP */ + [0xa08f, 0xa08f], /* YI SYLLABLE NBYRX */ + [0xa090, 0xa090], /* YI SYLLABLE NBYR */ + [0xa091, 0xa091], /* YI SYLLABLE HMIT */ + [0xa092, 0xa092], /* YI SYLLABLE HMIX */ + [0xa093, 0xa093], /* YI SYLLABLE HMI */ + [0xa094, 0xa094], /* YI SYLLABLE HMIP */ + [0xa095, 0xa095], /* YI SYLLABLE HMIEX */ + [0xa096, 0xa096], /* YI SYLLABLE HMIE */ + [0xa097, 0xa097], /* YI SYLLABLE HMIEP */ + [0xa098, 0xa098], /* YI SYLLABLE HMAT */ + [0xa099, 0xa099], /* YI SYLLABLE HMAX */ + [0xa09a, 0xa09a], /* YI SYLLABLE HMA */ + [0xa09b, 0xa09b], /* YI SYLLABLE HMAP */ + [0xa09c, 0xa09c], /* YI SYLLABLE HMUOX */ + [0xa09d, 0xa09d], /* YI SYLLABLE HMUO */ + [0xa09e, 0xa09e], /* YI SYLLABLE HMUOP */ + [0xa09f, 0xa09f], /* YI SYLLABLE HMOT */ + [0xa0a0, 0xa0a0], /* YI SYLLABLE HMOX */ + [0xa0a1, 0xa0a1], /* YI SYLLABLE HMO */ + [0xa0a2, 0xa0a2], /* YI SYLLABLE HMOP */ + [0xa0a3, 0xa0a3], /* YI SYLLABLE HMUT */ + [0xa0a4, 0xa0a4], /* YI SYLLABLE HMUX */ + [0xa0a5, 0xa0a5], /* YI SYLLABLE HMU */ + [0xa0a6, 0xa0a6], /* YI SYLLABLE HMUP */ + [0xa0a7, 0xa0a7], /* YI SYLLABLE HMURX */ + [0xa0a8, 0xa0a8], /* YI SYLLABLE HMUR */ + [0xa0a9, 0xa0a9], /* YI SYLLABLE HMYX */ + [0xa0aa, 0xa0aa], /* YI SYLLABLE HMY */ + [0xa0ab, 0xa0ab], /* YI SYLLABLE HMYP */ + [0xa0ac, 0xa0ac], /* YI SYLLABLE HMYRX */ + [0xa0ad, 0xa0ad], /* YI SYLLABLE HMYR */ + [0xa0ae, 0xa0ae], /* YI SYLLABLE MIT */ + [0xa0af, 0xa0af], /* YI SYLLABLE MIX */ + [0xa0b0, 0xa0b0], /* YI SYLLABLE MI */ + [0xa0b1, 0xa0b1], /* YI SYLLABLE MIP */ + [0xa0b2, 0xa0b2], /* YI SYLLABLE MIEX */ + [0xa0b3, 0xa0b3], /* YI SYLLABLE MIE */ + [0xa0b4, 0xa0b4], /* YI SYLLABLE MIEP */ + [0xa0b5, 0xa0b5], /* YI SYLLABLE MAT */ + [0xa0b6, 0xa0b6], /* YI SYLLABLE MAX */ + [0xa0b7, 0xa0b7], /* YI SYLLABLE MA */ + [0xa0b8, 0xa0b8], /* YI SYLLABLE MAP */ + [0xa0b9, 0xa0b9], /* YI SYLLABLE MUOT */ + [0xa0ba, 0xa0ba], /* YI SYLLABLE MUOX */ + [0xa0bb, 0xa0bb], /* YI SYLLABLE MUO */ + [0xa0bc, 0xa0bc], /* YI SYLLABLE MUOP */ + [0xa0bd, 0xa0bd], /* YI SYLLABLE MOT */ + [0xa0be, 0xa0be], /* YI SYLLABLE MOX */ + [0xa0bf, 0xa0bf], /* YI SYLLABLE MO */ + [0xa0c0, 0xa0c0], /* YI SYLLABLE MOP */ + [0xa0c1, 0xa0c1], /* YI SYLLABLE MEX */ + [0xa0c2, 0xa0c2], /* YI SYLLABLE ME */ + [0xa0c3, 0xa0c3], /* YI SYLLABLE MUT */ + [0xa0c4, 0xa0c4], /* YI SYLLABLE MUX */ + [0xa0c5, 0xa0c5], /* YI SYLLABLE MU */ + [0xa0c6, 0xa0c6], /* YI SYLLABLE MUP */ + [0xa0c7, 0xa0c7], /* YI SYLLABLE MURX */ + [0xa0c8, 0xa0c8], /* YI SYLLABLE MUR */ + [0xa0c9, 0xa0c9], /* YI SYLLABLE MYT */ + [0xa0ca, 0xa0ca], /* YI SYLLABLE MYX */ + [0xa0cb, 0xa0cb], /* YI SYLLABLE MY */ + [0xa0cc, 0xa0cc], /* YI SYLLABLE MYP */ + [0xa0cd, 0xa0cd], /* YI SYLLABLE FIT */ + [0xa0ce, 0xa0ce], /* YI SYLLABLE FIX */ + [0xa0cf, 0xa0cf], /* YI SYLLABLE FI */ + [0xa0d0, 0xa0d0], /* YI SYLLABLE FIP */ + [0xa0d1, 0xa0d1], /* YI SYLLABLE FAT */ + [0xa0d2, 0xa0d2], /* YI SYLLABLE FAX */ + [0xa0d3, 0xa0d3], /* YI SYLLABLE FA */ + [0xa0d4, 0xa0d4], /* YI SYLLABLE FAP */ + [0xa0d5, 0xa0d5], /* YI SYLLABLE FOX */ + [0xa0d6, 0xa0d6], /* YI SYLLABLE FO */ + [0xa0d7, 0xa0d7], /* YI SYLLABLE FOP */ + [0xa0d8, 0xa0d8], /* YI SYLLABLE FUT */ + [0xa0d9, 0xa0d9], /* YI SYLLABLE FUX */ + [0xa0da, 0xa0da], /* YI SYLLABLE FU */ + [0xa0db, 0xa0db], /* YI SYLLABLE FUP */ + [0xa0dc, 0xa0dc], /* YI SYLLABLE FURX */ + [0xa0dd, 0xa0dd], /* YI SYLLABLE FUR */ + [0xa0de, 0xa0de], /* YI SYLLABLE FYT */ + [0xa0df, 0xa0df], /* YI SYLLABLE FYX */ + [0xa0e0, 0xa0e0], /* YI SYLLABLE FY */ + [0xa0e1, 0xa0e1], /* YI SYLLABLE FYP */ + [0xa0e2, 0xa0e2], /* YI SYLLABLE VIT */ + [0xa0e3, 0xa0e3], /* YI SYLLABLE VIX */ + [0xa0e4, 0xa0e4], /* YI SYLLABLE VI */ + [0xa0e5, 0xa0e5], /* YI SYLLABLE VIP */ + [0xa0e6, 0xa0e6], /* YI SYLLABLE VIET */ + [0xa0e7, 0xa0e7], /* YI SYLLABLE VIEX */ + [0xa0e8, 0xa0e8], /* YI SYLLABLE VIE */ + [0xa0e9, 0xa0e9], /* YI SYLLABLE VIEP */ + [0xa0ea, 0xa0ea], /* YI SYLLABLE VAT */ + [0xa0eb, 0xa0eb], /* YI SYLLABLE VAX */ + [0xa0ec, 0xa0ec], /* YI SYLLABLE VA */ + [0xa0ed, 0xa0ed], /* YI SYLLABLE VAP */ + [0xa0ee, 0xa0ee], /* YI SYLLABLE VOT */ + [0xa0ef, 0xa0ef], /* YI SYLLABLE VOX */ + [0xa0f0, 0xa0f0], /* YI SYLLABLE VO */ + [0xa0f1, 0xa0f1], /* YI SYLLABLE VOP */ + [0xa0f2, 0xa0f2], /* YI SYLLABLE VEX */ + [0xa0f3, 0xa0f3], /* YI SYLLABLE VEP */ + [0xa0f4, 0xa0f4], /* YI SYLLABLE VUT */ + [0xa0f5, 0xa0f5], /* YI SYLLABLE VUX */ + [0xa0f6, 0xa0f6], /* YI SYLLABLE VU */ + [0xa0f7, 0xa0f7], /* YI SYLLABLE VUP */ + [0xa0f8, 0xa0f8], /* YI SYLLABLE VURX */ + [0xa0f9, 0xa0f9], /* YI SYLLABLE VUR */ + [0xa0fa, 0xa0fa], /* YI SYLLABLE VYT */ + [0xa0fb, 0xa0fb], /* YI SYLLABLE VYX */ + [0xa0fc, 0xa0fc], /* YI SYLLABLE VY */ + [0xa0fd, 0xa0fd], /* YI SYLLABLE VYP */ + [0xa0fe, 0xa0fe], /* YI SYLLABLE VYRX */ + [0xa0ff, 0xa0ff], /* YI SYLLABLE VYR */ + [0xa100, 0xa100], /* YI SYLLABLE DIT */ + [0xa101, 0xa101], /* YI SYLLABLE DIX */ + [0xa102, 0xa102], /* YI SYLLABLE DI */ + [0xa103, 0xa103], /* YI SYLLABLE DIP */ + [0xa104, 0xa104], /* YI SYLLABLE DIEX */ + [0xa105, 0xa105], /* YI SYLLABLE DIE */ + [0xa106, 0xa106], /* YI SYLLABLE DIEP */ + [0xa107, 0xa107], /* YI SYLLABLE DAT */ + [0xa108, 0xa108], /* YI SYLLABLE DAX */ + [0xa109, 0xa109], /* YI SYLLABLE DA */ + [0xa10a, 0xa10a], /* YI SYLLABLE DAP */ + [0xa10b, 0xa10b], /* YI SYLLABLE DUOX */ + [0xa10c, 0xa10c], /* YI SYLLABLE DUO */ + [0xa10d, 0xa10d], /* YI SYLLABLE DOT */ + [0xa10e, 0xa10e], /* YI SYLLABLE DOX */ + [0xa10f, 0xa10f], /* YI SYLLABLE DO */ + [0xa110, 0xa110], /* YI SYLLABLE DOP */ + [0xa111, 0xa111], /* YI SYLLABLE DEX */ + [0xa112, 0xa112], /* YI SYLLABLE DE */ + [0xa113, 0xa113], /* YI SYLLABLE DEP */ + [0xa114, 0xa114], /* YI SYLLABLE DUT */ + [0xa115, 0xa115], /* YI SYLLABLE DUX */ + [0xa116, 0xa116], /* YI SYLLABLE DU */ + [0xa117, 0xa117], /* YI SYLLABLE DUP */ + [0xa118, 0xa118], /* YI SYLLABLE DURX */ + [0xa119, 0xa119], /* YI SYLLABLE DUR */ + [0xa11a, 0xa11a], /* YI SYLLABLE TIT */ + [0xa11b, 0xa11b], /* YI SYLLABLE TIX */ + [0xa11c, 0xa11c], /* YI SYLLABLE TI */ + [0xa11d, 0xa11d], /* YI SYLLABLE TIP */ + [0xa11e, 0xa11e], /* YI SYLLABLE TIEX */ + [0xa11f, 0xa11f], /* YI SYLLABLE TIE */ + [0xa120, 0xa120], /* YI SYLLABLE TIEP */ + [0xa121, 0xa121], /* YI SYLLABLE TAT */ + [0xa122, 0xa122], /* YI SYLLABLE TAX */ + [0xa123, 0xa123], /* YI SYLLABLE TA */ + [0xa124, 0xa124], /* YI SYLLABLE TAP */ + [0xa125, 0xa125], /* YI SYLLABLE TUOT */ + [0xa126, 0xa126], /* YI SYLLABLE TUOX */ + [0xa127, 0xa127], /* YI SYLLABLE TUO */ + [0xa128, 0xa128], /* YI SYLLABLE TUOP */ + [0xa129, 0xa129], /* YI SYLLABLE TOT */ + [0xa12a, 0xa12a], /* YI SYLLABLE TOX */ + [0xa12b, 0xa12b], /* YI SYLLABLE TO */ + [0xa12c, 0xa12c], /* YI SYLLABLE TOP */ + [0xa12d, 0xa12d], /* YI SYLLABLE TEX */ + [0xa12e, 0xa12e], /* YI SYLLABLE TE */ + [0xa12f, 0xa12f], /* YI SYLLABLE TEP */ + [0xa130, 0xa130], /* YI SYLLABLE TUT */ + [0xa131, 0xa131], /* YI SYLLABLE TUX */ + [0xa132, 0xa132], /* YI SYLLABLE TU */ + [0xa133, 0xa133], /* YI SYLLABLE TUP */ + [0xa134, 0xa134], /* YI SYLLABLE TURX */ + [0xa135, 0xa135], /* YI SYLLABLE TUR */ + [0xa136, 0xa136], /* YI SYLLABLE DDIT */ + [0xa137, 0xa137], /* YI SYLLABLE DDIX */ + [0xa138, 0xa138], /* YI SYLLABLE DDI */ + [0xa139, 0xa139], /* YI SYLLABLE DDIP */ + [0xa13a, 0xa13a], /* YI SYLLABLE DDIEX */ + [0xa13b, 0xa13b], /* YI SYLLABLE DDIE */ + [0xa13c, 0xa13c], /* YI SYLLABLE DDIEP */ + [0xa13d, 0xa13d], /* YI SYLLABLE DDAT */ + [0xa13e, 0xa13e], /* YI SYLLABLE DDAX */ + [0xa13f, 0xa13f], /* YI SYLLABLE DDA */ + [0xa140, 0xa140], /* YI SYLLABLE DDAP */ + [0xa141, 0xa141], /* YI SYLLABLE DDUOX */ + [0xa142, 0xa142], /* YI SYLLABLE DDUO */ + [0xa143, 0xa143], /* YI SYLLABLE DDUOP */ + [0xa144, 0xa144], /* YI SYLLABLE DDOT */ + [0xa145, 0xa145], /* YI SYLLABLE DDOX */ + [0xa146, 0xa146], /* YI SYLLABLE DDO */ + [0xa147, 0xa147], /* YI SYLLABLE DDOP */ + [0xa148, 0xa148], /* YI SYLLABLE DDEX */ + [0xa149, 0xa149], /* YI SYLLABLE DDE */ + [0xa14a, 0xa14a], /* YI SYLLABLE DDEP */ + [0xa14b, 0xa14b], /* YI SYLLABLE DDUT */ + [0xa14c, 0xa14c], /* YI SYLLABLE DDUX */ + [0xa14d, 0xa14d], /* YI SYLLABLE DDU */ + [0xa14e, 0xa14e], /* YI SYLLABLE DDUP */ + [0xa14f, 0xa14f], /* YI SYLLABLE DDURX */ + [0xa150, 0xa150], /* YI SYLLABLE DDUR */ + [0xa151, 0xa151], /* YI SYLLABLE NDIT */ + [0xa152, 0xa152], /* YI SYLLABLE NDIX */ + [0xa153, 0xa153], /* YI SYLLABLE NDI */ + [0xa154, 0xa154], /* YI SYLLABLE NDIP */ + [0xa155, 0xa155], /* YI SYLLABLE NDIEX */ + [0xa156, 0xa156], /* YI SYLLABLE NDIE */ + [0xa157, 0xa157], /* YI SYLLABLE NDAT */ + [0xa158, 0xa158], /* YI SYLLABLE NDAX */ + [0xa159, 0xa159], /* YI SYLLABLE NDA */ + [0xa15a, 0xa15a], /* YI SYLLABLE NDAP */ + [0xa15b, 0xa15b], /* YI SYLLABLE NDOT */ + [0xa15c, 0xa15c], /* YI SYLLABLE NDOX */ + [0xa15d, 0xa15d], /* YI SYLLABLE NDO */ + [0xa15e, 0xa15e], /* YI SYLLABLE NDOP */ + [0xa15f, 0xa15f], /* YI SYLLABLE NDEX */ + [0xa160, 0xa160], /* YI SYLLABLE NDE */ + [0xa161, 0xa161], /* YI SYLLABLE NDEP */ + [0xa162, 0xa162], /* YI SYLLABLE NDUT */ + [0xa163, 0xa163], /* YI SYLLABLE NDUX */ + [0xa164, 0xa164], /* YI SYLLABLE NDU */ + [0xa165, 0xa165], /* YI SYLLABLE NDUP */ + [0xa166, 0xa166], /* YI SYLLABLE NDURX */ + [0xa167, 0xa167], /* YI SYLLABLE NDUR */ + [0xa168, 0xa168], /* YI SYLLABLE HNIT */ + [0xa169, 0xa169], /* YI SYLLABLE HNIX */ + [0xa16a, 0xa16a], /* YI SYLLABLE HNI */ + [0xa16b, 0xa16b], /* YI SYLLABLE HNIP */ + [0xa16c, 0xa16c], /* YI SYLLABLE HNIET */ + [0xa16d, 0xa16d], /* YI SYLLABLE HNIEX */ + [0xa16e, 0xa16e], /* YI SYLLABLE HNIE */ + [0xa16f, 0xa16f], /* YI SYLLABLE HNIEP */ + [0xa170, 0xa170], /* YI SYLLABLE HNAT */ + [0xa171, 0xa171], /* YI SYLLABLE HNAX */ + [0xa172, 0xa172], /* YI SYLLABLE HNA */ + [0xa173, 0xa173], /* YI SYLLABLE HNAP */ + [0xa174, 0xa174], /* YI SYLLABLE HNUOX */ + [0xa175, 0xa175], /* YI SYLLABLE HNUO */ + [0xa176, 0xa176], /* YI SYLLABLE HNOT */ + [0xa177, 0xa177], /* YI SYLLABLE HNOX */ + [0xa178, 0xa178], /* YI SYLLABLE HNOP */ + [0xa179, 0xa179], /* YI SYLLABLE HNEX */ + [0xa17a, 0xa17a], /* YI SYLLABLE HNE */ + [0xa17b, 0xa17b], /* YI SYLLABLE HNEP */ + [0xa17c, 0xa17c], /* YI SYLLABLE HNUT */ + [0xa17d, 0xa17d], /* YI SYLLABLE NIT */ + [0xa17e, 0xa17e], /* YI SYLLABLE NIX */ + [0xa17f, 0xa17f], /* YI SYLLABLE NI */ + [0xa180, 0xa180], /* YI SYLLABLE NIP */ + [0xa181, 0xa181], /* YI SYLLABLE NIEX */ + [0xa182, 0xa182], /* YI SYLLABLE NIE */ + [0xa183, 0xa183], /* YI SYLLABLE NIEP */ + [0xa184, 0xa184], /* YI SYLLABLE NAX */ + [0xa185, 0xa185], /* YI SYLLABLE NA */ + [0xa186, 0xa186], /* YI SYLLABLE NAP */ + [0xa187, 0xa187], /* YI SYLLABLE NUOX */ + [0xa188, 0xa188], /* YI SYLLABLE NUO */ + [0xa189, 0xa189], /* YI SYLLABLE NUOP */ + [0xa18a, 0xa18a], /* YI SYLLABLE NOT */ + [0xa18b, 0xa18b], /* YI SYLLABLE NOX */ + [0xa18c, 0xa18c], /* YI SYLLABLE NO */ + [0xa18d, 0xa18d], /* YI SYLLABLE NOP */ + [0xa18e, 0xa18e], /* YI SYLLABLE NEX */ + [0xa18f, 0xa18f], /* YI SYLLABLE NE */ + [0xa190, 0xa190], /* YI SYLLABLE NEP */ + [0xa191, 0xa191], /* YI SYLLABLE NUT */ + [0xa192, 0xa192], /* YI SYLLABLE NUX */ + [0xa193, 0xa193], /* YI SYLLABLE NU */ + [0xa194, 0xa194], /* YI SYLLABLE NUP */ + [0xa195, 0xa195], /* YI SYLLABLE NURX */ + [0xa196, 0xa196], /* YI SYLLABLE NUR */ + [0xa197, 0xa197], /* YI SYLLABLE HLIT */ + [0xa198, 0xa198], /* YI SYLLABLE HLIX */ + [0xa199, 0xa199], /* YI SYLLABLE HLI */ + [0xa19a, 0xa19a], /* YI SYLLABLE HLIP */ + [0xa19b, 0xa19b], /* YI SYLLABLE HLIEX */ + [0xa19c, 0xa19c], /* YI SYLLABLE HLIE */ + [0xa19d, 0xa19d], /* YI SYLLABLE HLIEP */ + [0xa19e, 0xa19e], /* YI SYLLABLE HLAT */ + [0xa19f, 0xa19f], /* YI SYLLABLE HLAX */ + [0xa1a0, 0xa1a0], /* YI SYLLABLE HLA */ + [0xa1a1, 0xa1a1], /* YI SYLLABLE HLAP */ + [0xa1a2, 0xa1a2], /* YI SYLLABLE HLUOX */ + [0xa1a3, 0xa1a3], /* YI SYLLABLE HLUO */ + [0xa1a4, 0xa1a4], /* YI SYLLABLE HLUOP */ + [0xa1a5, 0xa1a5], /* YI SYLLABLE HLOX */ + [0xa1a6, 0xa1a6], /* YI SYLLABLE HLO */ + [0xa1a7, 0xa1a7], /* YI SYLLABLE HLOP */ + [0xa1a8, 0xa1a8], /* YI SYLLABLE HLEX */ + [0xa1a9, 0xa1a9], /* YI SYLLABLE HLE */ + [0xa1aa, 0xa1aa], /* YI SYLLABLE HLEP */ + [0xa1ab, 0xa1ab], /* YI SYLLABLE HLUT */ + [0xa1ac, 0xa1ac], /* YI SYLLABLE HLUX */ + [0xa1ad, 0xa1ad], /* YI SYLLABLE HLU */ + [0xa1ae, 0xa1ae], /* YI SYLLABLE HLUP */ + [0xa1af, 0xa1af], /* YI SYLLABLE HLURX */ + [0xa1b0, 0xa1b0], /* YI SYLLABLE HLUR */ + [0xa1b1, 0xa1b1], /* YI SYLLABLE HLYT */ + [0xa1b2, 0xa1b2], /* YI SYLLABLE HLYX */ + [0xa1b3, 0xa1b3], /* YI SYLLABLE HLY */ + [0xa1b4, 0xa1b4], /* YI SYLLABLE HLYP */ + [0xa1b5, 0xa1b5], /* YI SYLLABLE HLYRX */ + [0xa1b6, 0xa1b6], /* YI SYLLABLE HLYR */ + [0xa1b7, 0xa1b7], /* YI SYLLABLE LIT */ + [0xa1b8, 0xa1b8], /* YI SYLLABLE LIX */ + [0xa1b9, 0xa1b9], /* YI SYLLABLE LI */ + [0xa1ba, 0xa1ba], /* YI SYLLABLE LIP */ + [0xa1bb, 0xa1bb], /* YI SYLLABLE LIET */ + [0xa1bc, 0xa1bc], /* YI SYLLABLE LIEX */ + [0xa1bd, 0xa1bd], /* YI SYLLABLE LIE */ + [0xa1be, 0xa1be], /* YI SYLLABLE LIEP */ + [0xa1bf, 0xa1bf], /* YI SYLLABLE LAT */ + [0xa1c0, 0xa1c0], /* YI SYLLABLE LAX */ + [0xa1c1, 0xa1c1], /* YI SYLLABLE LA */ + [0xa1c2, 0xa1c2], /* YI SYLLABLE LAP */ + [0xa1c3, 0xa1c3], /* YI SYLLABLE LUOT */ + [0xa1c4, 0xa1c4], /* YI SYLLABLE LUOX */ + [0xa1c5, 0xa1c5], /* YI SYLLABLE LUO */ + [0xa1c6, 0xa1c6], /* YI SYLLABLE LUOP */ + [0xa1c7, 0xa1c7], /* YI SYLLABLE LOT */ + [0xa1c8, 0xa1c8], /* YI SYLLABLE LOX */ + [0xa1c9, 0xa1c9], /* YI SYLLABLE LO */ + [0xa1ca, 0xa1ca], /* YI SYLLABLE LOP */ + [0xa1cb, 0xa1cb], /* YI SYLLABLE LEX */ + [0xa1cc, 0xa1cc], /* YI SYLLABLE LE */ + [0xa1cd, 0xa1cd], /* YI SYLLABLE LEP */ + [0xa1ce, 0xa1ce], /* YI SYLLABLE LUT */ + [0xa1cf, 0xa1cf], /* YI SYLLABLE LUX */ + [0xa1d0, 0xa1d0], /* YI SYLLABLE LU */ + [0xa1d1, 0xa1d1], /* YI SYLLABLE LUP */ + [0xa1d2, 0xa1d2], /* YI SYLLABLE LURX */ + [0xa1d3, 0xa1d3], /* YI SYLLABLE LUR */ + [0xa1d4, 0xa1d4], /* YI SYLLABLE LYT */ + [0xa1d5, 0xa1d5], /* YI SYLLABLE LYX */ + [0xa1d6, 0xa1d6], /* YI SYLLABLE LY */ + [0xa1d7, 0xa1d7], /* YI SYLLABLE LYP */ + [0xa1d8, 0xa1d8], /* YI SYLLABLE LYRX */ + [0xa1d9, 0xa1d9], /* YI SYLLABLE LYR */ + [0xa1da, 0xa1da], /* YI SYLLABLE GIT */ + [0xa1db, 0xa1db], /* YI SYLLABLE GIX */ + [0xa1dc, 0xa1dc], /* YI SYLLABLE GI */ + [0xa1dd, 0xa1dd], /* YI SYLLABLE GIP */ + [0xa1de, 0xa1de], /* YI SYLLABLE GIET */ + [0xa1df, 0xa1df], /* YI SYLLABLE GIEX */ + [0xa1e0, 0xa1e0], /* YI SYLLABLE GIE */ + [0xa1e1, 0xa1e1], /* YI SYLLABLE GIEP */ + [0xa1e2, 0xa1e2], /* YI SYLLABLE GAT */ + [0xa1e3, 0xa1e3], /* YI SYLLABLE GAX */ + [0xa1e4, 0xa1e4], /* YI SYLLABLE GA */ + [0xa1e5, 0xa1e5], /* YI SYLLABLE GAP */ + [0xa1e6, 0xa1e6], /* YI SYLLABLE GUOT */ + [0xa1e7, 0xa1e7], /* YI SYLLABLE GUOX */ + [0xa1e8, 0xa1e8], /* YI SYLLABLE GUO */ + [0xa1e9, 0xa1e9], /* YI SYLLABLE GUOP */ + [0xa1ea, 0xa1ea], /* YI SYLLABLE GOT */ + [0xa1eb, 0xa1eb], /* YI SYLLABLE GOX */ + [0xa1ec, 0xa1ec], /* YI SYLLABLE GO */ + [0xa1ed, 0xa1ed], /* YI SYLLABLE GOP */ + [0xa1ee, 0xa1ee], /* YI SYLLABLE GET */ + [0xa1ef, 0xa1ef], /* YI SYLLABLE GEX */ + [0xa1f0, 0xa1f0], /* YI SYLLABLE GE */ + [0xa1f1, 0xa1f1], /* YI SYLLABLE GEP */ + [0xa1f2, 0xa1f2], /* YI SYLLABLE GUT */ + [0xa1f3, 0xa1f3], /* YI SYLLABLE GUX */ + [0xa1f4, 0xa1f4], /* YI SYLLABLE GU */ + [0xa1f5, 0xa1f5], /* YI SYLLABLE GUP */ + [0xa1f6, 0xa1f6], /* YI SYLLABLE GURX */ + [0xa1f7, 0xa1f7], /* YI SYLLABLE GUR */ + [0xa1f8, 0xa1f8], /* YI SYLLABLE KIT */ + [0xa1f9, 0xa1f9], /* YI SYLLABLE KIX */ + [0xa1fa, 0xa1fa], /* YI SYLLABLE KI */ + [0xa1fb, 0xa1fb], /* YI SYLLABLE KIP */ + [0xa1fc, 0xa1fc], /* YI SYLLABLE KIEX */ + [0xa1fd, 0xa1fd], /* YI SYLLABLE KIE */ + [0xa1fe, 0xa1fe], /* YI SYLLABLE KIEP */ + [0xa1ff, 0xa1ff], /* YI SYLLABLE KAT */ + [0xa200, 0xa200], /* YI SYLLABLE KAX */ + [0xa201, 0xa201], /* YI SYLLABLE KA */ + [0xa202, 0xa202], /* YI SYLLABLE KAP */ + [0xa203, 0xa203], /* YI SYLLABLE KUOX */ + [0xa204, 0xa204], /* YI SYLLABLE KUO */ + [0xa205, 0xa205], /* YI SYLLABLE KUOP */ + [0xa206, 0xa206], /* YI SYLLABLE KOT */ + [0xa207, 0xa207], /* YI SYLLABLE KOX */ + [0xa208, 0xa208], /* YI SYLLABLE KO */ + [0xa209, 0xa209], /* YI SYLLABLE KOP */ + [0xa20a, 0xa20a], /* YI SYLLABLE KET */ + [0xa20b, 0xa20b], /* YI SYLLABLE KEX */ + [0xa20c, 0xa20c], /* YI SYLLABLE KE */ + [0xa20d, 0xa20d], /* YI SYLLABLE KEP */ + [0xa20e, 0xa20e], /* YI SYLLABLE KUT */ + [0xa20f, 0xa20f], /* YI SYLLABLE KUX */ + [0xa210, 0xa210], /* YI SYLLABLE KU */ + [0xa211, 0xa211], /* YI SYLLABLE KUP */ + [0xa212, 0xa212], /* YI SYLLABLE KURX */ + [0xa213, 0xa213], /* YI SYLLABLE KUR */ + [0xa214, 0xa214], /* YI SYLLABLE GGIT */ + [0xa215, 0xa215], /* YI SYLLABLE GGIX */ + [0xa216, 0xa216], /* YI SYLLABLE GGI */ + [0xa217, 0xa217], /* YI SYLLABLE GGIEX */ + [0xa218, 0xa218], /* YI SYLLABLE GGIE */ + [0xa219, 0xa219], /* YI SYLLABLE GGIEP */ + [0xa21a, 0xa21a], /* YI SYLLABLE GGAT */ + [0xa21b, 0xa21b], /* YI SYLLABLE GGAX */ + [0xa21c, 0xa21c], /* YI SYLLABLE GGA */ + [0xa21d, 0xa21d], /* YI SYLLABLE GGAP */ + [0xa21e, 0xa21e], /* YI SYLLABLE GGUOT */ + [0xa21f, 0xa21f], /* YI SYLLABLE GGUOX */ + [0xa220, 0xa220], /* YI SYLLABLE GGUO */ + [0xa221, 0xa221], /* YI SYLLABLE GGUOP */ + [0xa222, 0xa222], /* YI SYLLABLE GGOT */ + [0xa223, 0xa223], /* YI SYLLABLE GGOX */ + [0xa224, 0xa224], /* YI SYLLABLE GGO */ + [0xa225, 0xa225], /* YI SYLLABLE GGOP */ + [0xa226, 0xa226], /* YI SYLLABLE GGET */ + [0xa227, 0xa227], /* YI SYLLABLE GGEX */ + [0xa228, 0xa228], /* YI SYLLABLE GGE */ + [0xa229, 0xa229], /* YI SYLLABLE GGEP */ + [0xa22a, 0xa22a], /* YI SYLLABLE GGUT */ + [0xa22b, 0xa22b], /* YI SYLLABLE GGUX */ + [0xa22c, 0xa22c], /* YI SYLLABLE GGU */ + [0xa22d, 0xa22d], /* YI SYLLABLE GGUP */ + [0xa22e, 0xa22e], /* YI SYLLABLE GGURX */ + [0xa22f, 0xa22f], /* YI SYLLABLE GGUR */ + [0xa230, 0xa230], /* YI SYLLABLE MGIEX */ + [0xa231, 0xa231], /* YI SYLLABLE MGIE */ + [0xa232, 0xa232], /* YI SYLLABLE MGAT */ + [0xa233, 0xa233], /* YI SYLLABLE MGAX */ + [0xa234, 0xa234], /* YI SYLLABLE MGA */ + [0xa235, 0xa235], /* YI SYLLABLE MGAP */ + [0xa236, 0xa236], /* YI SYLLABLE MGUOX */ + [0xa237, 0xa237], /* YI SYLLABLE MGUO */ + [0xa238, 0xa238], /* YI SYLLABLE MGUOP */ + [0xa239, 0xa239], /* YI SYLLABLE MGOT */ + [0xa23a, 0xa23a], /* YI SYLLABLE MGOX */ + [0xa23b, 0xa23b], /* YI SYLLABLE MGO */ + [0xa23c, 0xa23c], /* YI SYLLABLE MGOP */ + [0xa23d, 0xa23d], /* YI SYLLABLE MGEX */ + [0xa23e, 0xa23e], /* YI SYLLABLE MGE */ + [0xa23f, 0xa23f], /* YI SYLLABLE MGEP */ + [0xa240, 0xa240], /* YI SYLLABLE MGUT */ + [0xa241, 0xa241], /* YI SYLLABLE MGUX */ + [0xa242, 0xa242], /* YI SYLLABLE MGU */ + [0xa243, 0xa243], /* YI SYLLABLE MGUP */ + [0xa244, 0xa244], /* YI SYLLABLE MGURX */ + [0xa245, 0xa245], /* YI SYLLABLE MGUR */ + [0xa246, 0xa246], /* YI SYLLABLE HXIT */ + [0xa247, 0xa247], /* YI SYLLABLE HXIX */ + [0xa248, 0xa248], /* YI SYLLABLE HXI */ + [0xa249, 0xa249], /* YI SYLLABLE HXIP */ + [0xa24a, 0xa24a], /* YI SYLLABLE HXIET */ + [0xa24b, 0xa24b], /* YI SYLLABLE HXIEX */ + [0xa24c, 0xa24c], /* YI SYLLABLE HXIE */ + [0xa24d, 0xa24d], /* YI SYLLABLE HXIEP */ + [0xa24e, 0xa24e], /* YI SYLLABLE HXAT */ + [0xa24f, 0xa24f], /* YI SYLLABLE HXAX */ + [0xa250, 0xa250], /* YI SYLLABLE HXA */ + [0xa251, 0xa251], /* YI SYLLABLE HXAP */ + [0xa252, 0xa252], /* YI SYLLABLE HXUOT */ + [0xa253, 0xa253], /* YI SYLLABLE HXUOX */ + [0xa254, 0xa254], /* YI SYLLABLE HXUO */ + [0xa255, 0xa255], /* YI SYLLABLE HXUOP */ + [0xa256, 0xa256], /* YI SYLLABLE HXOT */ + [0xa257, 0xa257], /* YI SYLLABLE HXOX */ + [0xa258, 0xa258], /* YI SYLLABLE HXO */ + [0xa259, 0xa259], /* YI SYLLABLE HXOP */ + [0xa25a, 0xa25a], /* YI SYLLABLE HXEX */ + [0xa25b, 0xa25b], /* YI SYLLABLE HXE */ + [0xa25c, 0xa25c], /* YI SYLLABLE HXEP */ + [0xa25d, 0xa25d], /* YI SYLLABLE NGIEX */ + [0xa25e, 0xa25e], /* YI SYLLABLE NGIE */ + [0xa25f, 0xa25f], /* YI SYLLABLE NGIEP */ + [0xa260, 0xa260], /* YI SYLLABLE NGAT */ + [0xa261, 0xa261], /* YI SYLLABLE NGAX */ + [0xa262, 0xa262], /* YI SYLLABLE NGA */ + [0xa263, 0xa263], /* YI SYLLABLE NGAP */ + [0xa264, 0xa264], /* YI SYLLABLE NGUOT */ + [0xa265, 0xa265], /* YI SYLLABLE NGUOX */ + [0xa266, 0xa266], /* YI SYLLABLE NGUO */ + [0xa267, 0xa267], /* YI SYLLABLE NGOT */ + [0xa268, 0xa268], /* YI SYLLABLE NGOX */ + [0xa269, 0xa269], /* YI SYLLABLE NGO */ + [0xa26a, 0xa26a], /* YI SYLLABLE NGOP */ + [0xa26b, 0xa26b], /* YI SYLLABLE NGEX */ + [0xa26c, 0xa26c], /* YI SYLLABLE NGE */ + [0xa26d, 0xa26d], /* YI SYLLABLE NGEP */ + [0xa26e, 0xa26e], /* YI SYLLABLE HIT */ + [0xa26f, 0xa26f], /* YI SYLLABLE HIEX */ + [0xa270, 0xa270], /* YI SYLLABLE HIE */ + [0xa271, 0xa271], /* YI SYLLABLE HAT */ + [0xa272, 0xa272], /* YI SYLLABLE HAX */ + [0xa273, 0xa273], /* YI SYLLABLE HA */ + [0xa274, 0xa274], /* YI SYLLABLE HAP */ + [0xa275, 0xa275], /* YI SYLLABLE HUOT */ + [0xa276, 0xa276], /* YI SYLLABLE HUOX */ + [0xa277, 0xa277], /* YI SYLLABLE HUO */ + [0xa278, 0xa278], /* YI SYLLABLE HUOP */ + [0xa279, 0xa279], /* YI SYLLABLE HOT */ + [0xa27a, 0xa27a], /* YI SYLLABLE HOX */ + [0xa27b, 0xa27b], /* YI SYLLABLE HO */ + [0xa27c, 0xa27c], /* YI SYLLABLE HOP */ + [0xa27d, 0xa27d], /* YI SYLLABLE HEX */ + [0xa27e, 0xa27e], /* YI SYLLABLE HE */ + [0xa27f, 0xa27f], /* YI SYLLABLE HEP */ + [0xa280, 0xa280], /* YI SYLLABLE WAT */ + [0xa281, 0xa281], /* YI SYLLABLE WAX */ + [0xa282, 0xa282], /* YI SYLLABLE WA */ + [0xa283, 0xa283], /* YI SYLLABLE WAP */ + [0xa284, 0xa284], /* YI SYLLABLE WUOX */ + [0xa285, 0xa285], /* YI SYLLABLE WUO */ + [0xa286, 0xa286], /* YI SYLLABLE WUOP */ + [0xa287, 0xa287], /* YI SYLLABLE WOX */ + [0xa288, 0xa288], /* YI SYLLABLE WO */ + [0xa289, 0xa289], /* YI SYLLABLE WOP */ + [0xa28a, 0xa28a], /* YI SYLLABLE WEX */ + [0xa28b, 0xa28b], /* YI SYLLABLE WE */ + [0xa28c, 0xa28c], /* YI SYLLABLE WEP */ + [0xa28d, 0xa28d], /* YI SYLLABLE ZIT */ + [0xa28e, 0xa28e], /* YI SYLLABLE ZIX */ + [0xa28f, 0xa28f], /* YI SYLLABLE ZI */ + [0xa290, 0xa290], /* YI SYLLABLE ZIP */ + [0xa291, 0xa291], /* YI SYLLABLE ZIEX */ + [0xa292, 0xa292], /* YI SYLLABLE ZIE */ + [0xa293, 0xa293], /* YI SYLLABLE ZIEP */ + [0xa294, 0xa294], /* YI SYLLABLE ZAT */ + [0xa295, 0xa295], /* YI SYLLABLE ZAX */ + [0xa296, 0xa296], /* YI SYLLABLE ZA */ + [0xa297, 0xa297], /* YI SYLLABLE ZAP */ + [0xa298, 0xa298], /* YI SYLLABLE ZUOX */ + [0xa299, 0xa299], /* YI SYLLABLE ZUO */ + [0xa29a, 0xa29a], /* YI SYLLABLE ZUOP */ + [0xa29b, 0xa29b], /* YI SYLLABLE ZOT */ + [0xa29c, 0xa29c], /* YI SYLLABLE ZOX */ + [0xa29d, 0xa29d], /* YI SYLLABLE ZO */ + [0xa29e, 0xa29e], /* YI SYLLABLE ZOP */ + [0xa29f, 0xa29f], /* YI SYLLABLE ZEX */ + [0xa2a0, 0xa2a0], /* YI SYLLABLE ZE */ + [0xa2a1, 0xa2a1], /* YI SYLLABLE ZEP */ + [0xa2a2, 0xa2a2], /* YI SYLLABLE ZUT */ + [0xa2a3, 0xa2a3], /* YI SYLLABLE ZUX */ + [0xa2a4, 0xa2a4], /* YI SYLLABLE ZU */ + [0xa2a5, 0xa2a5], /* YI SYLLABLE ZUP */ + [0xa2a6, 0xa2a6], /* YI SYLLABLE ZURX */ + [0xa2a7, 0xa2a7], /* YI SYLLABLE ZUR */ + [0xa2a8, 0xa2a8], /* YI SYLLABLE ZYT */ + [0xa2a9, 0xa2a9], /* YI SYLLABLE ZYX */ + [0xa2aa, 0xa2aa], /* YI SYLLABLE ZY */ + [0xa2ab, 0xa2ab], /* YI SYLLABLE ZYP */ + [0xa2ac, 0xa2ac], /* YI SYLLABLE ZYRX */ + [0xa2ad, 0xa2ad], /* YI SYLLABLE ZYR */ + [0xa2ae, 0xa2ae], /* YI SYLLABLE CIT */ + [0xa2af, 0xa2af], /* YI SYLLABLE CIX */ + [0xa2b0, 0xa2b0], /* YI SYLLABLE CI */ + [0xa2b1, 0xa2b1], /* YI SYLLABLE CIP */ + [0xa2b2, 0xa2b2], /* YI SYLLABLE CIET */ + [0xa2b3, 0xa2b3], /* YI SYLLABLE CIEX */ + [0xa2b4, 0xa2b4], /* YI SYLLABLE CIE */ + [0xa2b5, 0xa2b5], /* YI SYLLABLE CIEP */ + [0xa2b6, 0xa2b6], /* YI SYLLABLE CAT */ + [0xa2b7, 0xa2b7], /* YI SYLLABLE CAX */ + [0xa2b8, 0xa2b8], /* YI SYLLABLE CA */ + [0xa2b9, 0xa2b9], /* YI SYLLABLE CAP */ + [0xa2ba, 0xa2ba], /* YI SYLLABLE CUOX */ + [0xa2bb, 0xa2bb], /* YI SYLLABLE CUO */ + [0xa2bc, 0xa2bc], /* YI SYLLABLE CUOP */ + [0xa2bd, 0xa2bd], /* YI SYLLABLE COT */ + [0xa2be, 0xa2be], /* YI SYLLABLE COX */ + [0xa2bf, 0xa2bf], /* YI SYLLABLE CO */ + [0xa2c0, 0xa2c0], /* YI SYLLABLE COP */ + [0xa2c1, 0xa2c1], /* YI SYLLABLE CEX */ + [0xa2c2, 0xa2c2], /* YI SYLLABLE CE */ + [0xa2c3, 0xa2c3], /* YI SYLLABLE CEP */ + [0xa2c4, 0xa2c4], /* YI SYLLABLE CUT */ + [0xa2c5, 0xa2c5], /* YI SYLLABLE CUX */ + [0xa2c6, 0xa2c6], /* YI SYLLABLE CU */ + [0xa2c7, 0xa2c7], /* YI SYLLABLE CUP */ + [0xa2c8, 0xa2c8], /* YI SYLLABLE CURX */ + [0xa2c9, 0xa2c9], /* YI SYLLABLE CUR */ + [0xa2ca, 0xa2ca], /* YI SYLLABLE CYT */ + [0xa2cb, 0xa2cb], /* YI SYLLABLE CYX */ + [0xa2cc, 0xa2cc], /* YI SYLLABLE CY */ + [0xa2cd, 0xa2cd], /* YI SYLLABLE CYP */ + [0xa2ce, 0xa2ce], /* YI SYLLABLE CYRX */ + [0xa2cf, 0xa2cf], /* YI SYLLABLE CYR */ + [0xa2d0, 0xa2d0], /* YI SYLLABLE ZZIT */ + [0xa2d1, 0xa2d1], /* YI SYLLABLE ZZIX */ + [0xa2d2, 0xa2d2], /* YI SYLLABLE ZZI */ + [0xa2d3, 0xa2d3], /* YI SYLLABLE ZZIP */ + [0xa2d4, 0xa2d4], /* YI SYLLABLE ZZIET */ + [0xa2d5, 0xa2d5], /* YI SYLLABLE ZZIEX */ + [0xa2d6, 0xa2d6], /* YI SYLLABLE ZZIE */ + [0xa2d7, 0xa2d7], /* YI SYLLABLE ZZIEP */ + [0xa2d8, 0xa2d8], /* YI SYLLABLE ZZAT */ + [0xa2d9, 0xa2d9], /* YI SYLLABLE ZZAX */ + [0xa2da, 0xa2da], /* YI SYLLABLE ZZA */ + [0xa2db, 0xa2db], /* YI SYLLABLE ZZAP */ + [0xa2dc, 0xa2dc], /* YI SYLLABLE ZZOX */ + [0xa2dd, 0xa2dd], /* YI SYLLABLE ZZO */ + [0xa2de, 0xa2de], /* YI SYLLABLE ZZOP */ + [0xa2df, 0xa2df], /* YI SYLLABLE ZZEX */ + [0xa2e0, 0xa2e0], /* YI SYLLABLE ZZE */ + [0xa2e1, 0xa2e1], /* YI SYLLABLE ZZEP */ + [0xa2e2, 0xa2e2], /* YI SYLLABLE ZZUX */ + [0xa2e3, 0xa2e3], /* YI SYLLABLE ZZU */ + [0xa2e4, 0xa2e4], /* YI SYLLABLE ZZUP */ + [0xa2e5, 0xa2e5], /* YI SYLLABLE ZZURX */ + [0xa2e6, 0xa2e6], /* YI SYLLABLE ZZUR */ + [0xa2e7, 0xa2e7], /* YI SYLLABLE ZZYT */ + [0xa2e8, 0xa2e8], /* YI SYLLABLE ZZYX */ + [0xa2e9, 0xa2e9], /* YI SYLLABLE ZZY */ + [0xa2ea, 0xa2ea], /* YI SYLLABLE ZZYP */ + [0xa2eb, 0xa2eb], /* YI SYLLABLE ZZYRX */ + [0xa2ec, 0xa2ec], /* YI SYLLABLE ZZYR */ + [0xa2ed, 0xa2ed], /* YI SYLLABLE NZIT */ + [0xa2ee, 0xa2ee], /* YI SYLLABLE NZIX */ + [0xa2ef, 0xa2ef], /* YI SYLLABLE NZI */ + [0xa2f0, 0xa2f0], /* YI SYLLABLE NZIP */ + [0xa2f1, 0xa2f1], /* YI SYLLABLE NZIEX */ + [0xa2f2, 0xa2f2], /* YI SYLLABLE NZIE */ + [0xa2f3, 0xa2f3], /* YI SYLLABLE NZIEP */ + [0xa2f4, 0xa2f4], /* YI SYLLABLE NZAT */ + [0xa2f5, 0xa2f5], /* YI SYLLABLE NZAX */ + [0xa2f6, 0xa2f6], /* YI SYLLABLE NZA */ + [0xa2f7, 0xa2f7], /* YI SYLLABLE NZAP */ + [0xa2f8, 0xa2f8], /* YI SYLLABLE NZUOX */ + [0xa2f9, 0xa2f9], /* YI SYLLABLE NZUO */ + [0xa2fa, 0xa2fa], /* YI SYLLABLE NZOX */ + [0xa2fb, 0xa2fb], /* YI SYLLABLE NZOP */ + [0xa2fc, 0xa2fc], /* YI SYLLABLE NZEX */ + [0xa2fd, 0xa2fd], /* YI SYLLABLE NZE */ + [0xa2fe, 0xa2fe], /* YI SYLLABLE NZUX */ + [0xa2ff, 0xa2ff], /* YI SYLLABLE NZU */ + [0xa300, 0xa300], /* YI SYLLABLE NZUP */ + [0xa301, 0xa301], /* YI SYLLABLE NZURX */ + [0xa302, 0xa302], /* YI SYLLABLE NZUR */ + [0xa303, 0xa303], /* YI SYLLABLE NZYT */ + [0xa304, 0xa304], /* YI SYLLABLE NZYX */ + [0xa305, 0xa305], /* YI SYLLABLE NZY */ + [0xa306, 0xa306], /* YI SYLLABLE NZYP */ + [0xa307, 0xa307], /* YI SYLLABLE NZYRX */ + [0xa308, 0xa308], /* YI SYLLABLE NZYR */ + [0xa309, 0xa309], /* YI SYLLABLE SIT */ + [0xa30a, 0xa30a], /* YI SYLLABLE SIX */ + [0xa30b, 0xa30b], /* YI SYLLABLE SI */ + [0xa30c, 0xa30c], /* YI SYLLABLE SIP */ + [0xa30d, 0xa30d], /* YI SYLLABLE SIEX */ + [0xa30e, 0xa30e], /* YI SYLLABLE SIE */ + [0xa30f, 0xa30f], /* YI SYLLABLE SIEP */ + [0xa310, 0xa310], /* YI SYLLABLE SAT */ + [0xa311, 0xa311], /* YI SYLLABLE SAX */ + [0xa312, 0xa312], /* YI SYLLABLE SA */ + [0xa313, 0xa313], /* YI SYLLABLE SAP */ + [0xa314, 0xa314], /* YI SYLLABLE SUOX */ + [0xa315, 0xa315], /* YI SYLLABLE SUO */ + [0xa316, 0xa316], /* YI SYLLABLE SUOP */ + [0xa317, 0xa317], /* YI SYLLABLE SOT */ + [0xa318, 0xa318], /* YI SYLLABLE SOX */ + [0xa319, 0xa319], /* YI SYLLABLE SO */ + [0xa31a, 0xa31a], /* YI SYLLABLE SOP */ + [0xa31b, 0xa31b], /* YI SYLLABLE SEX */ + [0xa31c, 0xa31c], /* YI SYLLABLE SE */ + [0xa31d, 0xa31d], /* YI SYLLABLE SEP */ + [0xa31e, 0xa31e], /* YI SYLLABLE SUT */ + [0xa31f, 0xa31f], /* YI SYLLABLE SUX */ + [0xa320, 0xa320], /* YI SYLLABLE SU */ + [0xa321, 0xa321], /* YI SYLLABLE SUP */ + [0xa322, 0xa322], /* YI SYLLABLE SURX */ + [0xa323, 0xa323], /* YI SYLLABLE SUR */ + [0xa324, 0xa324], /* YI SYLLABLE SYT */ + [0xa325, 0xa325], /* YI SYLLABLE SYX */ + [0xa326, 0xa326], /* YI SYLLABLE SY */ + [0xa327, 0xa327], /* YI SYLLABLE SYP */ + [0xa328, 0xa328], /* YI SYLLABLE SYRX */ + [0xa329, 0xa329], /* YI SYLLABLE SYR */ + [0xa32a, 0xa32a], /* YI SYLLABLE SSIT */ + [0xa32b, 0xa32b], /* YI SYLLABLE SSIX */ + [0xa32c, 0xa32c], /* YI SYLLABLE SSI */ + [0xa32d, 0xa32d], /* YI SYLLABLE SSIP */ + [0xa32e, 0xa32e], /* YI SYLLABLE SSIEX */ + [0xa32f, 0xa32f], /* YI SYLLABLE SSIE */ + [0xa330, 0xa330], /* YI SYLLABLE SSIEP */ + [0xa331, 0xa331], /* YI SYLLABLE SSAT */ + [0xa332, 0xa332], /* YI SYLLABLE SSAX */ + [0xa333, 0xa333], /* YI SYLLABLE SSA */ + [0xa334, 0xa334], /* YI SYLLABLE SSAP */ + [0xa335, 0xa335], /* YI SYLLABLE SSOT */ + [0xa336, 0xa336], /* YI SYLLABLE SSOX */ + [0xa337, 0xa337], /* YI SYLLABLE SSO */ + [0xa338, 0xa338], /* YI SYLLABLE SSOP */ + [0xa339, 0xa339], /* YI SYLLABLE SSEX */ + [0xa33a, 0xa33a], /* YI SYLLABLE SSE */ + [0xa33b, 0xa33b], /* YI SYLLABLE SSEP */ + [0xa33c, 0xa33c], /* YI SYLLABLE SSUT */ + [0xa33d, 0xa33d], /* YI SYLLABLE SSUX */ + [0xa33e, 0xa33e], /* YI SYLLABLE SSU */ + [0xa33f, 0xa33f], /* YI SYLLABLE SSUP */ + [0xa340, 0xa340], /* YI SYLLABLE SSYT */ + [0xa341, 0xa341], /* YI SYLLABLE SSYX */ + [0xa342, 0xa342], /* YI SYLLABLE SSY */ + [0xa343, 0xa343], /* YI SYLLABLE SSYP */ + [0xa344, 0xa344], /* YI SYLLABLE SSYRX */ + [0xa345, 0xa345], /* YI SYLLABLE SSYR */ + [0xa346, 0xa346], /* YI SYLLABLE ZHAT */ + [0xa347, 0xa347], /* YI SYLLABLE ZHAX */ + [0xa348, 0xa348], /* YI SYLLABLE ZHA */ + [0xa349, 0xa349], /* YI SYLLABLE ZHAP */ + [0xa34a, 0xa34a], /* YI SYLLABLE ZHUOX */ + [0xa34b, 0xa34b], /* YI SYLLABLE ZHUO */ + [0xa34c, 0xa34c], /* YI SYLLABLE ZHUOP */ + [0xa34d, 0xa34d], /* YI SYLLABLE ZHOT */ + [0xa34e, 0xa34e], /* YI SYLLABLE ZHOX */ + [0xa34f, 0xa34f], /* YI SYLLABLE ZHO */ + [0xa350, 0xa350], /* YI SYLLABLE ZHOP */ + [0xa351, 0xa351], /* YI SYLLABLE ZHET */ + [0xa352, 0xa352], /* YI SYLLABLE ZHEX */ + [0xa353, 0xa353], /* YI SYLLABLE ZHE */ + [0xa354, 0xa354], /* YI SYLLABLE ZHEP */ + [0xa355, 0xa355], /* YI SYLLABLE ZHUT */ + [0xa356, 0xa356], /* YI SYLLABLE ZHUX */ + [0xa357, 0xa357], /* YI SYLLABLE ZHU */ + [0xa358, 0xa358], /* YI SYLLABLE ZHUP */ + [0xa359, 0xa359], /* YI SYLLABLE ZHURX */ + [0xa35a, 0xa35a], /* YI SYLLABLE ZHUR */ + [0xa35b, 0xa35b], /* YI SYLLABLE ZHYT */ + [0xa35c, 0xa35c], /* YI SYLLABLE ZHYX */ + [0xa35d, 0xa35d], /* YI SYLLABLE ZHY */ + [0xa35e, 0xa35e], /* YI SYLLABLE ZHYP */ + [0xa35f, 0xa35f], /* YI SYLLABLE ZHYRX */ + [0xa360, 0xa360], /* YI SYLLABLE ZHYR */ + [0xa361, 0xa361], /* YI SYLLABLE CHAT */ + [0xa362, 0xa362], /* YI SYLLABLE CHAX */ + [0xa363, 0xa363], /* YI SYLLABLE CHA */ + [0xa364, 0xa364], /* YI SYLLABLE CHAP */ + [0xa365, 0xa365], /* YI SYLLABLE CHUOT */ + [0xa366, 0xa366], /* YI SYLLABLE CHUOX */ + [0xa367, 0xa367], /* YI SYLLABLE CHUO */ + [0xa368, 0xa368], /* YI SYLLABLE CHUOP */ + [0xa369, 0xa369], /* YI SYLLABLE CHOT */ + [0xa36a, 0xa36a], /* YI SYLLABLE CHOX */ + [0xa36b, 0xa36b], /* YI SYLLABLE CHO */ + [0xa36c, 0xa36c], /* YI SYLLABLE CHOP */ + [0xa36d, 0xa36d], /* YI SYLLABLE CHET */ + [0xa36e, 0xa36e], /* YI SYLLABLE CHEX */ + [0xa36f, 0xa36f], /* YI SYLLABLE CHE */ + [0xa370, 0xa370], /* YI SYLLABLE CHEP */ + [0xa371, 0xa371], /* YI SYLLABLE CHUX */ + [0xa372, 0xa372], /* YI SYLLABLE CHU */ + [0xa373, 0xa373], /* YI SYLLABLE CHUP */ + [0xa374, 0xa374], /* YI SYLLABLE CHURX */ + [0xa375, 0xa375], /* YI SYLLABLE CHUR */ + [0xa376, 0xa376], /* YI SYLLABLE CHYT */ + [0xa377, 0xa377], /* YI SYLLABLE CHYX */ + [0xa378, 0xa378], /* YI SYLLABLE CHY */ + [0xa379, 0xa379], /* YI SYLLABLE CHYP */ + [0xa37a, 0xa37a], /* YI SYLLABLE CHYRX */ + [0xa37b, 0xa37b], /* YI SYLLABLE CHYR */ + [0xa37c, 0xa37c], /* YI SYLLABLE RRAX */ + [0xa37d, 0xa37d], /* YI SYLLABLE RRA */ + [0xa37e, 0xa37e], /* YI SYLLABLE RRUOX */ + [0xa37f, 0xa37f], /* YI SYLLABLE RRUO */ + [0xa380, 0xa380], /* YI SYLLABLE RROT */ + [0xa381, 0xa381], /* YI SYLLABLE RROX */ + [0xa382, 0xa382], /* YI SYLLABLE RRO */ + [0xa383, 0xa383], /* YI SYLLABLE RROP */ + [0xa384, 0xa384], /* YI SYLLABLE RRET */ + [0xa385, 0xa385], /* YI SYLLABLE RREX */ + [0xa386, 0xa386], /* YI SYLLABLE RRE */ + [0xa387, 0xa387], /* YI SYLLABLE RREP */ + [0xa388, 0xa388], /* YI SYLLABLE RRUT */ + [0xa389, 0xa389], /* YI SYLLABLE RRUX */ + [0xa38a, 0xa38a], /* YI SYLLABLE RRU */ + [0xa38b, 0xa38b], /* YI SYLLABLE RRUP */ + [0xa38c, 0xa38c], /* YI SYLLABLE RRURX */ + [0xa38d, 0xa38d], /* YI SYLLABLE RRUR */ + [0xa38e, 0xa38e], /* YI SYLLABLE RRYT */ + [0xa38f, 0xa38f], /* YI SYLLABLE RRYX */ + [0xa390, 0xa390], /* YI SYLLABLE RRY */ + [0xa391, 0xa391], /* YI SYLLABLE RRYP */ + [0xa392, 0xa392], /* YI SYLLABLE RRYRX */ + [0xa393, 0xa393], /* YI SYLLABLE RRYR */ + [0xa394, 0xa394], /* YI SYLLABLE NRAT */ + [0xa395, 0xa395], /* YI SYLLABLE NRAX */ + [0xa396, 0xa396], /* YI SYLLABLE NRA */ + [0xa397, 0xa397], /* YI SYLLABLE NRAP */ + [0xa398, 0xa398], /* YI SYLLABLE NROX */ + [0xa399, 0xa399], /* YI SYLLABLE NRO */ + [0xa39a, 0xa39a], /* YI SYLLABLE NROP */ + [0xa39b, 0xa39b], /* YI SYLLABLE NRET */ + [0xa39c, 0xa39c], /* YI SYLLABLE NREX */ + [0xa39d, 0xa39d], /* YI SYLLABLE NRE */ + [0xa39e, 0xa39e], /* YI SYLLABLE NREP */ + [0xa39f, 0xa39f], /* YI SYLLABLE NRUT */ + [0xa3a0, 0xa3a0], /* YI SYLLABLE NRUX */ + [0xa3a1, 0xa3a1], /* YI SYLLABLE NRU */ + [0xa3a2, 0xa3a2], /* YI SYLLABLE NRUP */ + [0xa3a3, 0xa3a3], /* YI SYLLABLE NRURX */ + [0xa3a4, 0xa3a4], /* YI SYLLABLE NRUR */ + [0xa3a5, 0xa3a5], /* YI SYLLABLE NRYT */ + [0xa3a6, 0xa3a6], /* YI SYLLABLE NRYX */ + [0xa3a7, 0xa3a7], /* YI SYLLABLE NRY */ + [0xa3a8, 0xa3a8], /* YI SYLLABLE NRYP */ + [0xa3a9, 0xa3a9], /* YI SYLLABLE NRYRX */ + [0xa3aa, 0xa3aa], /* YI SYLLABLE NRYR */ + [0xa3ab, 0xa3ab], /* YI SYLLABLE SHAT */ + [0xa3ac, 0xa3ac], /* YI SYLLABLE SHAX */ + [0xa3ad, 0xa3ad], /* YI SYLLABLE SHA */ + [0xa3ae, 0xa3ae], /* YI SYLLABLE SHAP */ + [0xa3af, 0xa3af], /* YI SYLLABLE SHUOX */ + [0xa3b0, 0xa3b0], /* YI SYLLABLE SHUO */ + [0xa3b1, 0xa3b1], /* YI SYLLABLE SHUOP */ + [0xa3b2, 0xa3b2], /* YI SYLLABLE SHOT */ + [0xa3b3, 0xa3b3], /* YI SYLLABLE SHOX */ + [0xa3b4, 0xa3b4], /* YI SYLLABLE SHO */ + [0xa3b5, 0xa3b5], /* YI SYLLABLE SHOP */ + [0xa3b6, 0xa3b6], /* YI SYLLABLE SHET */ + [0xa3b7, 0xa3b7], /* YI SYLLABLE SHEX */ + [0xa3b8, 0xa3b8], /* YI SYLLABLE SHE */ + [0xa3b9, 0xa3b9], /* YI SYLLABLE SHEP */ + [0xa3ba, 0xa3ba], /* YI SYLLABLE SHUT */ + [0xa3bb, 0xa3bb], /* YI SYLLABLE SHUX */ + [0xa3bc, 0xa3bc], /* YI SYLLABLE SHU */ + [0xa3bd, 0xa3bd], /* YI SYLLABLE SHUP */ + [0xa3be, 0xa3be], /* YI SYLLABLE SHURX */ + [0xa3bf, 0xa3bf], /* YI SYLLABLE SHUR */ + [0xa3c0, 0xa3c0], /* YI SYLLABLE SHYT */ + [0xa3c1, 0xa3c1], /* YI SYLLABLE SHYX */ + [0xa3c2, 0xa3c2], /* YI SYLLABLE SHY */ + [0xa3c3, 0xa3c3], /* YI SYLLABLE SHYP */ + [0xa3c4, 0xa3c4], /* YI SYLLABLE SHYRX */ + [0xa3c5, 0xa3c5], /* YI SYLLABLE SHYR */ + [0xa3c6, 0xa3c6], /* YI SYLLABLE RAT */ + [0xa3c7, 0xa3c7], /* YI SYLLABLE RAX */ + [0xa3c8, 0xa3c8], /* YI SYLLABLE RA */ + [0xa3c9, 0xa3c9], /* YI SYLLABLE RAP */ + [0xa3ca, 0xa3ca], /* YI SYLLABLE RUOX */ + [0xa3cb, 0xa3cb], /* YI SYLLABLE RUO */ + [0xa3cc, 0xa3cc], /* YI SYLLABLE RUOP */ + [0xa3cd, 0xa3cd], /* YI SYLLABLE ROT */ + [0xa3ce, 0xa3ce], /* YI SYLLABLE ROX */ + [0xa3cf, 0xa3cf], /* YI SYLLABLE RO */ + [0xa3d0, 0xa3d0], /* YI SYLLABLE ROP */ + [0xa3d1, 0xa3d1], /* YI SYLLABLE REX */ + [0xa3d2, 0xa3d2], /* YI SYLLABLE RE */ + [0xa3d3, 0xa3d3], /* YI SYLLABLE REP */ + [0xa3d4, 0xa3d4], /* YI SYLLABLE RUT */ + [0xa3d5, 0xa3d5], /* YI SYLLABLE RUX */ + [0xa3d6, 0xa3d6], /* YI SYLLABLE RU */ + [0xa3d7, 0xa3d7], /* YI SYLLABLE RUP */ + [0xa3d8, 0xa3d8], /* YI SYLLABLE RURX */ + [0xa3d9, 0xa3d9], /* YI SYLLABLE RUR */ + [0xa3da, 0xa3da], /* YI SYLLABLE RYT */ + [0xa3db, 0xa3db], /* YI SYLLABLE RYX */ + [0xa3dc, 0xa3dc], /* YI SYLLABLE RY */ + [0xa3dd, 0xa3dd], /* YI SYLLABLE RYP */ + [0xa3de, 0xa3de], /* YI SYLLABLE RYRX */ + [0xa3df, 0xa3df], /* YI SYLLABLE RYR */ + [0xa3e0, 0xa3e0], /* YI SYLLABLE JIT */ + [0xa3e1, 0xa3e1], /* YI SYLLABLE JIX */ + [0xa3e2, 0xa3e2], /* YI SYLLABLE JI */ + [0xa3e3, 0xa3e3], /* YI SYLLABLE JIP */ + [0xa3e4, 0xa3e4], /* YI SYLLABLE JIET */ + [0xa3e5, 0xa3e5], /* YI SYLLABLE JIEX */ + [0xa3e6, 0xa3e6], /* YI SYLLABLE JIE */ + [0xa3e7, 0xa3e7], /* YI SYLLABLE JIEP */ + [0xa3e8, 0xa3e8], /* YI SYLLABLE JUOT */ + [0xa3e9, 0xa3e9], /* YI SYLLABLE JUOX */ + [0xa3ea, 0xa3ea], /* YI SYLLABLE JUO */ + [0xa3eb, 0xa3eb], /* YI SYLLABLE JUOP */ + [0xa3ec, 0xa3ec], /* YI SYLLABLE JOT */ + [0xa3ed, 0xa3ed], /* YI SYLLABLE JOX */ + [0xa3ee, 0xa3ee], /* YI SYLLABLE JO */ + [0xa3ef, 0xa3ef], /* YI SYLLABLE JOP */ + [0xa3f0, 0xa3f0], /* YI SYLLABLE JUT */ + [0xa3f1, 0xa3f1], /* YI SYLLABLE JUX */ + [0xa3f2, 0xa3f2], /* YI SYLLABLE JU */ + [0xa3f3, 0xa3f3], /* YI SYLLABLE JUP */ + [0xa3f4, 0xa3f4], /* YI SYLLABLE JURX */ + [0xa3f5, 0xa3f5], /* YI SYLLABLE JUR */ + [0xa3f6, 0xa3f6], /* YI SYLLABLE JYT */ + [0xa3f7, 0xa3f7], /* YI SYLLABLE JYX */ + [0xa3f8, 0xa3f8], /* YI SYLLABLE JY */ + [0xa3f9, 0xa3f9], /* YI SYLLABLE JYP */ + [0xa3fa, 0xa3fa], /* YI SYLLABLE JYRX */ + [0xa3fb, 0xa3fb], /* YI SYLLABLE JYR */ + [0xa3fc, 0xa3fc], /* YI SYLLABLE QIT */ + [0xa3fd, 0xa3fd], /* YI SYLLABLE QIX */ + [0xa3fe, 0xa3fe], /* YI SYLLABLE QI */ + [0xa3ff, 0xa3ff], /* YI SYLLABLE QIP */ + [0xa400, 0xa400], /* YI SYLLABLE QIET */ + [0xa401, 0xa401], /* YI SYLLABLE QIEX */ + [0xa402, 0xa402], /* YI SYLLABLE QIE */ + [0xa403, 0xa403], /* YI SYLLABLE QIEP */ + [0xa404, 0xa404], /* YI SYLLABLE QUOT */ + [0xa405, 0xa405], /* YI SYLLABLE QUOX */ + [0xa406, 0xa406], /* YI SYLLABLE QUO */ + [0xa407, 0xa407], /* YI SYLLABLE QUOP */ + [0xa408, 0xa408], /* YI SYLLABLE QOT */ + [0xa409, 0xa409], /* YI SYLLABLE QOX */ + [0xa40a, 0xa40a], /* YI SYLLABLE QO */ + [0xa40b, 0xa40b], /* YI SYLLABLE QOP */ + [0xa40c, 0xa40c], /* YI SYLLABLE QUT */ + [0xa40d, 0xa40d], /* YI SYLLABLE QUX */ + [0xa40e, 0xa40e], /* YI SYLLABLE QU */ + [0xa40f, 0xa40f], /* YI SYLLABLE QUP */ + [0xa410, 0xa410], /* YI SYLLABLE QURX */ + [0xa411, 0xa411], /* YI SYLLABLE QUR */ + [0xa412, 0xa412], /* YI SYLLABLE QYT */ + [0xa413, 0xa413], /* YI SYLLABLE QYX */ + [0xa414, 0xa414], /* YI SYLLABLE QY */ + [0xa415, 0xa415], /* YI SYLLABLE QYP */ + [0xa416, 0xa416], /* YI SYLLABLE QYRX */ + [0xa417, 0xa417], /* YI SYLLABLE QYR */ + [0xa418, 0xa418], /* YI SYLLABLE JJIT */ + [0xa419, 0xa419], /* YI SYLLABLE JJIX */ + [0xa41a, 0xa41a], /* YI SYLLABLE JJI */ + [0xa41b, 0xa41b], /* YI SYLLABLE JJIP */ + [0xa41c, 0xa41c], /* YI SYLLABLE JJIET */ + [0xa41d, 0xa41d], /* YI SYLLABLE JJIEX */ + [0xa41e, 0xa41e], /* YI SYLLABLE JJIE */ + [0xa41f, 0xa41f], /* YI SYLLABLE JJIEP */ + [0xa420, 0xa420], /* YI SYLLABLE JJUOX */ + [0xa421, 0xa421], /* YI SYLLABLE JJUO */ + [0xa422, 0xa422], /* YI SYLLABLE JJUOP */ + [0xa423, 0xa423], /* YI SYLLABLE JJOT */ + [0xa424, 0xa424], /* YI SYLLABLE JJOX */ + [0xa425, 0xa425], /* YI SYLLABLE JJO */ + [0xa426, 0xa426], /* YI SYLLABLE JJOP */ + [0xa427, 0xa427], /* YI SYLLABLE JJUT */ + [0xa428, 0xa428], /* YI SYLLABLE JJUX */ + [0xa429, 0xa429], /* YI SYLLABLE JJU */ + [0xa42a, 0xa42a], /* YI SYLLABLE JJUP */ + [0xa42b, 0xa42b], /* YI SYLLABLE JJURX */ + [0xa42c, 0xa42c], /* YI SYLLABLE JJUR */ + [0xa42d, 0xa42d], /* YI SYLLABLE JJYT */ + [0xa42e, 0xa42e], /* YI SYLLABLE JJYX */ + [0xa42f, 0xa42f], /* YI SYLLABLE JJY */ + [0xa430, 0xa430], /* YI SYLLABLE JJYP */ + [0xa431, 0xa431], /* YI SYLLABLE NJIT */ + [0xa432, 0xa432], /* YI SYLLABLE NJIX */ + [0xa433, 0xa433], /* YI SYLLABLE NJI */ + [0xa434, 0xa434], /* YI SYLLABLE NJIP */ + [0xa435, 0xa435], /* YI SYLLABLE NJIET */ + [0xa436, 0xa436], /* YI SYLLABLE NJIEX */ + [0xa437, 0xa437], /* YI SYLLABLE NJIE */ + [0xa438, 0xa438], /* YI SYLLABLE NJIEP */ + [0xa439, 0xa439], /* YI SYLLABLE NJUOX */ + [0xa43a, 0xa43a], /* YI SYLLABLE NJUO */ + [0xa43b, 0xa43b], /* YI SYLLABLE NJOT */ + [0xa43c, 0xa43c], /* YI SYLLABLE NJOX */ + [0xa43d, 0xa43d], /* YI SYLLABLE NJO */ + [0xa43e, 0xa43e], /* YI SYLLABLE NJOP */ + [0xa43f, 0xa43f], /* YI SYLLABLE NJUX */ + [0xa440, 0xa440], /* YI SYLLABLE NJU */ + [0xa441, 0xa441], /* YI SYLLABLE NJUP */ + [0xa442, 0xa442], /* YI SYLLABLE NJURX */ + [0xa443, 0xa443], /* YI SYLLABLE NJUR */ + [0xa444, 0xa444], /* YI SYLLABLE NJYT */ + [0xa445, 0xa445], /* YI SYLLABLE NJYX */ + [0xa446, 0xa446], /* YI SYLLABLE NJY */ + [0xa447, 0xa447], /* YI SYLLABLE NJYP */ + [0xa448, 0xa448], /* YI SYLLABLE NJYRX */ + [0xa449, 0xa449], /* YI SYLLABLE NJYR */ + [0xa44a, 0xa44a], /* YI SYLLABLE NYIT */ + [0xa44b, 0xa44b], /* YI SYLLABLE NYIX */ + [0xa44c, 0xa44c], /* YI SYLLABLE NYI */ + [0xa44d, 0xa44d], /* YI SYLLABLE NYIP */ + [0xa44e, 0xa44e], /* YI SYLLABLE NYIET */ + [0xa44f, 0xa44f], /* YI SYLLABLE NYIEX */ + [0xa450, 0xa450], /* YI SYLLABLE NYIE */ + [0xa451, 0xa451], /* YI SYLLABLE NYIEP */ + [0xa452, 0xa452], /* YI SYLLABLE NYUOX */ + [0xa453, 0xa453], /* YI SYLLABLE NYUO */ + [0xa454, 0xa454], /* YI SYLLABLE NYUOP */ + [0xa455, 0xa455], /* YI SYLLABLE NYOT */ + [0xa456, 0xa456], /* YI SYLLABLE NYOX */ + [0xa457, 0xa457], /* YI SYLLABLE NYO */ + [0xa458, 0xa458], /* YI SYLLABLE NYOP */ + [0xa459, 0xa459], /* YI SYLLABLE NYUT */ + [0xa45a, 0xa45a], /* YI SYLLABLE NYUX */ + [0xa45b, 0xa45b], /* YI SYLLABLE NYU */ + [0xa45c, 0xa45c], /* YI SYLLABLE NYUP */ + [0xa45d, 0xa45d], /* YI SYLLABLE XIT */ + [0xa45e, 0xa45e], /* YI SYLLABLE XIX */ + [0xa45f, 0xa45f], /* YI SYLLABLE XI */ + [0xa460, 0xa460], /* YI SYLLABLE XIP */ + [0xa461, 0xa461], /* YI SYLLABLE XIET */ + [0xa462, 0xa462], /* YI SYLLABLE XIEX */ + [0xa463, 0xa463], /* YI SYLLABLE XIE */ + [0xa464, 0xa464], /* YI SYLLABLE XIEP */ + [0xa465, 0xa465], /* YI SYLLABLE XUOX */ + [0xa466, 0xa466], /* YI SYLLABLE XUO */ + [0xa467, 0xa467], /* YI SYLLABLE XOT */ + [0xa468, 0xa468], /* YI SYLLABLE XOX */ + [0xa469, 0xa469], /* YI SYLLABLE XO */ + [0xa46a, 0xa46a], /* YI SYLLABLE XOP */ + [0xa46b, 0xa46b], /* YI SYLLABLE XYT */ + [0xa46c, 0xa46c], /* YI SYLLABLE XYX */ + [0xa46d, 0xa46d], /* YI SYLLABLE XY */ + [0xa46e, 0xa46e], /* YI SYLLABLE XYP */ + [0xa46f, 0xa46f], /* YI SYLLABLE XYRX */ + [0xa470, 0xa470], /* YI SYLLABLE XYR */ + [0xa471, 0xa471], /* YI SYLLABLE YIT */ + [0xa472, 0xa472], /* YI SYLLABLE YIX */ + [0xa473, 0xa473], /* YI SYLLABLE YI */ + [0xa474, 0xa474], /* YI SYLLABLE YIP */ + [0xa475, 0xa475], /* YI SYLLABLE YIET */ + [0xa476, 0xa476], /* YI SYLLABLE YIEX */ + [0xa477, 0xa477], /* YI SYLLABLE YIE */ + [0xa478, 0xa478], /* YI SYLLABLE YIEP */ + [0xa479, 0xa479], /* YI SYLLABLE YUOT */ + [0xa47a, 0xa47a], /* YI SYLLABLE YUOX */ + [0xa47b, 0xa47b], /* YI SYLLABLE YUO */ + [0xa47c, 0xa47c], /* YI SYLLABLE YUOP */ + [0xa47d, 0xa47d], /* YI SYLLABLE YOT */ + [0xa47e, 0xa47e], /* YI SYLLABLE YOX */ + [0xa47f, 0xa47f], /* YI SYLLABLE YO */ + [0xa480, 0xa480], /* YI SYLLABLE YOP */ + [0xa481, 0xa481], /* YI SYLLABLE YUT */ + [0xa482, 0xa482], /* YI SYLLABLE YUX */ + [0xa483, 0xa483], /* YI SYLLABLE YU */ + [0xa484, 0xa484], /* YI SYLLABLE YUP */ + [0xa485, 0xa485], /* YI SYLLABLE YURX */ + [0xa486, 0xa486], /* YI SYLLABLE YUR */ + [0xa487, 0xa487], /* YI SYLLABLE YYT */ + [0xa488, 0xa488], /* YI SYLLABLE YYX */ + [0xa489, 0xa489], /* YI SYLLABLE YY */ + [0xa48a, 0xa48a], /* YI SYLLABLE YYP */ + [0xa48b, 0xa48b], /* YI SYLLABLE YYRX */ + [0xa48c, 0xa48c], /* YI SYLLABLE YYR */ + [0xa48d, 0xa48d], + [0xa48e, 0xa48e], + [0xa48f, 0xa48f], + [0xa490, 0xa490], /* YI RADICAL QOT */ + [0xa491, 0xa491], /* YI RADICAL LI */ + [0xa492, 0xa492], /* YI RADICAL KIT */ + [0xa493, 0xa493], /* YI RADICAL NYIP */ + [0xa494, 0xa494], /* YI RADICAL CYP */ + [0xa495, 0xa495], /* YI RADICAL SSI */ + [0xa496, 0xa496], /* YI RADICAL GGOP */ + [0xa497, 0xa497], /* YI RADICAL GEP */ + [0xa498, 0xa498], /* YI RADICAL MI */ + [0xa499, 0xa499], /* YI RADICAL HXIT */ + [0xa49a, 0xa49a], /* YI RADICAL LYR */ + [0xa49b, 0xa49b], /* YI RADICAL BBUT */ + [0xa49c, 0xa49c], /* YI RADICAL MOP */ + [0xa49d, 0xa49d], /* YI RADICAL YO */ + [0xa49e, 0xa49e], /* YI RADICAL PUT */ + [0xa49f, 0xa49f], /* YI RADICAL HXUO */ + [0xa4a0, 0xa4a0], /* YI RADICAL TAT */ + [0xa4a1, 0xa4a1], /* YI RADICAL GA */ + [0xa4a2, 0xa4a2], /* YI RADICAL ZUP */ + [0xa4a3, 0xa4a3], /* YI RADICAL CYT */ + [0xa4a4, 0xa4a4], /* YI RADICAL DDUR */ + [0xa4a5, 0xa4a5], /* YI RADICAL BUR */ + [0xa4a6, 0xa4a6], /* YI RADICAL GGUO */ + [0xa4a7, 0xa4a7], /* YI RADICAL NYOP */ + [0xa4a8, 0xa4a8], /* YI RADICAL TU */ + [0xa4a9, 0xa4a9], /* YI RADICAL OP */ + [0xa4aa, 0xa4aa], /* YI RADICAL JJUT */ + [0xa4ab, 0xa4ab], /* YI RADICAL ZOT */ + [0xa4ac, 0xa4ac], /* YI RADICAL PYT */ + [0xa4ad, 0xa4ad], /* YI RADICAL HMO */ + [0xa4ae, 0xa4ae], /* YI RADICAL YIT */ + [0xa4af, 0xa4af], /* YI RADICAL VUR */ + [0xa4b0, 0xa4b0], /* YI RADICAL SHY */ + [0xa4b1, 0xa4b1], /* YI RADICAL VEP */ + [0xa4b2, 0xa4b2], /* YI RADICAL ZA */ + [0xa4b3, 0xa4b3], /* YI RADICAL JO */ + [0xa4b4, 0xa4b4], /* YI RADICAL NZUP */ + [0xa4b5, 0xa4b5], /* YI RADICAL JJY */ + [0xa4b6, 0xa4b6], /* YI RADICAL GOT */ + [0xa4b7, 0xa4b7], /* YI RADICAL JJIE */ + [0xa4b8, 0xa4b8], /* YI RADICAL WO */ + [0xa4b9, 0xa4b9], /* YI RADICAL DU */ + [0xa4ba, 0xa4ba], /* YI RADICAL SHUR */ + [0xa4bb, 0xa4bb], /* YI RADICAL LIE */ + [0xa4bc, 0xa4bc], /* YI RADICAL CY */ + [0xa4bd, 0xa4bd], /* YI RADICAL CUOP */ + [0xa4be, 0xa4be], /* YI RADICAL CIP */ + [0xa4bf, 0xa4bf], /* YI RADICAL HXOP */ + [0xa4c0, 0xa4c0], /* YI RADICAL SHAT */ + [0xa4c1, 0xa4c1], /* YI RADICAL ZUR */ + [0xa4c2, 0xa4c2], /* YI RADICAL SHOP */ + [0xa4c3, 0xa4c3], /* YI RADICAL CHE */ + [0xa4c4, 0xa4c4], /* YI RADICAL ZZIET */ + [0xa4c5, 0xa4c5], /* YI RADICAL NBIE */ + [0xa4c6, 0xa4c6], /* YI RADICAL KE */ + [0xa4c7, 0xa4c7], + [0xa4c8, 0xa4c8], + [0xa4c9, 0xa4c9], + [0xa4ca, 0xa4ca], + [0xa4cb, 0xa4cb], + [0xa4cc, 0xa4cc], + [0xa4cd, 0xa4cd], + [0xa4ce, 0xa4ce], + [0xa4cf, 0xa4cf], + [0xa4d0, 0xa4d0], /* LISU LETTER BA */ + [0xa4d1, 0xa4d1], /* LISU LETTER PA */ + [0xa4d2, 0xa4d2], /* LISU LETTER PHA */ + [0xa4d3, 0xa4d3], /* LISU LETTER DA */ + [0xa4d4, 0xa4d4], /* LISU LETTER TA */ + [0xa4d5, 0xa4d5], /* LISU LETTER THA */ + [0xa4d6, 0xa4d6], /* LISU LETTER GA */ + [0xa4d7, 0xa4d7], /* LISU LETTER KA */ + [0xa4d8, 0xa4d8], /* LISU LETTER KHA */ + [0xa4d9, 0xa4d9], /* LISU LETTER JA */ + [0xa4da, 0xa4da], /* LISU LETTER CA */ + [0xa4db, 0xa4db], /* LISU LETTER CHA */ + [0xa4dc, 0xa4dc], /* LISU LETTER DZA */ + [0xa4dd, 0xa4dd], /* LISU LETTER TSA */ + [0xa4de, 0xa4de], /* LISU LETTER TSHA */ + [0xa4df, 0xa4df], /* LISU LETTER MA */ + [0xa4e0, 0xa4e0], /* LISU LETTER NA */ + [0xa4e1, 0xa4e1], /* LISU LETTER LA */ + [0xa4e2, 0xa4e2], /* LISU LETTER SA */ + [0xa4e3, 0xa4e3], /* LISU LETTER ZHA */ + [0xa4e4, 0xa4e4], /* LISU LETTER ZA */ + [0xa4e5, 0xa4e5], /* LISU LETTER NGA */ + [0xa4e6, 0xa4e6], /* LISU LETTER HA */ + [0xa4e7, 0xa4e7], /* LISU LETTER XA */ + [0xa4e8, 0xa4e8], /* LISU LETTER HHA */ + [0xa4e9, 0xa4e9], /* LISU LETTER FA */ + [0xa4ea, 0xa4ea], /* LISU LETTER WA */ + [0xa4eb, 0xa4eb], /* LISU LETTER SHA */ + [0xa4ec, 0xa4ec], /* LISU LETTER YA */ + [0xa4ed, 0xa4ed], /* LISU LETTER GHA */ + [0xa4ee, 0xa4ee], /* LISU LETTER A */ + [0xa4ef, 0xa4ef], /* LISU LETTER AE */ + [0xa4f0, 0xa4f0], /* LISU LETTER E */ + [0xa4f1, 0xa4f1], /* LISU LETTER EU */ + [0xa4f2, 0xa4f2], /* LISU LETTER I */ + [0xa4f3, 0xa4f3], /* LISU LETTER O */ + [0xa4f4, 0xa4f4], /* LISU LETTER U */ + [0xa4f5, 0xa4f5], /* LISU LETTER UE */ + [0xa4f6, 0xa4f6], /* LISU LETTER UH */ + [0xa4f7, 0xa4f7], /* LISU LETTER OE */ + [0xa4f8, 0xa4f8], /* LISU LETTER TONE MYA TI */ + [0xa4f9, 0xa4f9], /* LISU LETTER TONE NA PO */ + [0xa4fa, 0xa4fa], /* LISU LETTER TONE MYA CYA */ + [0xa4fb, 0xa4fb], /* LISU LETTER TONE MYA BO */ + [0xa4fc, 0xa4fc], /* LISU LETTER TONE MYA NA */ + [0xa4fd, 0xa4fd], /* LISU LETTER TONE MYA JEU */ + [0xa4fe, 0xa4fe], /* LISU PUNCTUATION COMMA */ + [0xa4ff, 0xa4ff], /* LISU PUNCTUATION FULL STOP */ + [0xa500, 0xa500], /* VAI SYLLABLE EE */ + [0xa501, 0xa501], /* VAI SYLLABLE EEN */ + [0xa502, 0xa502], /* VAI SYLLABLE HEE */ + [0xa503, 0xa503], /* VAI SYLLABLE WEE */ + [0xa504, 0xa504], /* VAI SYLLABLE WEEN */ + [0xa505, 0xa505], /* VAI SYLLABLE PEE */ + [0xa506, 0xa506], /* VAI SYLLABLE BHEE */ + [0xa507, 0xa507], /* VAI SYLLABLE BEE */ + [0xa508, 0xa508], /* VAI SYLLABLE MBEE */ + [0xa509, 0xa509], /* VAI SYLLABLE KPEE */ + [0xa50a, 0xa50a], /* VAI SYLLABLE MGBEE */ + [0xa50b, 0xa50b], /* VAI SYLLABLE GBEE */ + [0xa50c, 0xa50c], /* VAI SYLLABLE FEE */ + [0xa50d, 0xa50d], /* VAI SYLLABLE VEE */ + [0xa50e, 0xa50e], /* VAI SYLLABLE TEE */ + [0xa50f, 0xa50f], /* VAI SYLLABLE THEE */ + [0xa510, 0xa510], /* VAI SYLLABLE DHEE */ + [0xa511, 0xa511], /* VAI SYLLABLE DHHEE */ + [0xa512, 0xa512], /* VAI SYLLABLE LEE */ + [0xa513, 0xa513], /* VAI SYLLABLE REE */ + [0xa514, 0xa514], /* VAI SYLLABLE DEE */ + [0xa515, 0xa515], /* VAI SYLLABLE NDEE */ + [0xa516, 0xa516], /* VAI SYLLABLE SEE */ + [0xa517, 0xa517], /* VAI SYLLABLE SHEE */ + [0xa518, 0xa518], /* VAI SYLLABLE ZEE */ + [0xa519, 0xa519], /* VAI SYLLABLE ZHEE */ + [0xa51a, 0xa51a], /* VAI SYLLABLE CEE */ + [0xa51b, 0xa51b], /* VAI SYLLABLE JEE */ + [0xa51c, 0xa51c], /* VAI SYLLABLE NJEE */ + [0xa51d, 0xa51d], /* VAI SYLLABLE YEE */ + [0xa51e, 0xa51e], /* VAI SYLLABLE KEE */ + [0xa51f, 0xa51f], /* VAI SYLLABLE NGGEE */ + [0xa520, 0xa520], /* VAI SYLLABLE GEE */ + [0xa521, 0xa521], /* VAI SYLLABLE MEE */ + [0xa522, 0xa522], /* VAI SYLLABLE NEE */ + [0xa523, 0xa523], /* VAI SYLLABLE NYEE */ + [0xa524, 0xa524], /* VAI SYLLABLE I */ + [0xa525, 0xa525], /* VAI SYLLABLE IN */ + [0xa526, 0xa526], /* VAI SYLLABLE HI */ + [0xa527, 0xa527], /* VAI SYLLABLE HIN */ + [0xa528, 0xa528], /* VAI SYLLABLE WI */ + [0xa529, 0xa529], /* VAI SYLLABLE WIN */ + [0xa52a, 0xa52a], /* VAI SYLLABLE PI */ + [0xa52b, 0xa52b], /* VAI SYLLABLE BHI */ + [0xa52c, 0xa52c], /* VAI SYLLABLE BI */ + [0xa52d, 0xa52d], /* VAI SYLLABLE MBI */ + [0xa52e, 0xa52e], /* VAI SYLLABLE KPI */ + [0xa52f, 0xa52f], /* VAI SYLLABLE MGBI */ + [0xa530, 0xa530], /* VAI SYLLABLE GBI */ + [0xa531, 0xa531], /* VAI SYLLABLE FI */ + [0xa532, 0xa532], /* VAI SYLLABLE VI */ + [0xa533, 0xa533], /* VAI SYLLABLE TI */ + [0xa534, 0xa534], /* VAI SYLLABLE THI */ + [0xa535, 0xa535], /* VAI SYLLABLE DHI */ + [0xa536, 0xa536], /* VAI SYLLABLE DHHI */ + [0xa537, 0xa537], /* VAI SYLLABLE LI */ + [0xa538, 0xa538], /* VAI SYLLABLE RI */ + [0xa539, 0xa539], /* VAI SYLLABLE DI */ + [0xa53a, 0xa53a], /* VAI SYLLABLE NDI */ + [0xa53b, 0xa53b], /* VAI SYLLABLE SI */ + [0xa53c, 0xa53c], /* VAI SYLLABLE SHI */ + [0xa53d, 0xa53d], /* VAI SYLLABLE ZI */ + [0xa53e, 0xa53e], /* VAI SYLLABLE ZHI */ + [0xa53f, 0xa53f], /* VAI SYLLABLE CI */ + [0xa540, 0xa540], /* VAI SYLLABLE JI */ + [0xa541, 0xa541], /* VAI SYLLABLE NJI */ + [0xa542, 0xa542], /* VAI SYLLABLE YI */ + [0xa543, 0xa543], /* VAI SYLLABLE KI */ + [0xa544, 0xa544], /* VAI SYLLABLE NGGI */ + [0xa545, 0xa545], /* VAI SYLLABLE GI */ + [0xa546, 0xa546], /* VAI SYLLABLE MI */ + [0xa547, 0xa547], /* VAI SYLLABLE NI */ + [0xa548, 0xa548], /* VAI SYLLABLE NYI */ + [0xa549, 0xa549], /* VAI SYLLABLE A */ + [0xa54a, 0xa54a], /* VAI SYLLABLE AN */ + [0xa54b, 0xa54b], /* VAI SYLLABLE NGAN */ + [0xa54c, 0xa54c], /* VAI SYLLABLE HA */ + [0xa54d, 0xa54d], /* VAI SYLLABLE HAN */ + [0xa54e, 0xa54e], /* VAI SYLLABLE WA */ + [0xa54f, 0xa54f], /* VAI SYLLABLE WAN */ + [0xa550, 0xa550], /* VAI SYLLABLE PA */ + [0xa551, 0xa551], /* VAI SYLLABLE BHA */ + [0xa552, 0xa552], /* VAI SYLLABLE BA */ + [0xa553, 0xa553], /* VAI SYLLABLE MBA */ + [0xa554, 0xa554], /* VAI SYLLABLE KPA */ + [0xa555, 0xa555], /* VAI SYLLABLE KPAN */ + [0xa556, 0xa556], /* VAI SYLLABLE MGBA */ + [0xa557, 0xa557], /* VAI SYLLABLE GBA */ + [0xa558, 0xa558], /* VAI SYLLABLE FA */ + [0xa559, 0xa559], /* VAI SYLLABLE VA */ + [0xa55a, 0xa55a], /* VAI SYLLABLE TA */ + [0xa55b, 0xa55b], /* VAI SYLLABLE THA */ + [0xa55c, 0xa55c], /* VAI SYLLABLE DHA */ + [0xa55d, 0xa55d], /* VAI SYLLABLE DHHA */ + [0xa55e, 0xa55e], /* VAI SYLLABLE LA */ + [0xa55f, 0xa55f], /* VAI SYLLABLE RA */ + [0xa560, 0xa560], /* VAI SYLLABLE DA */ + [0xa561, 0xa561], /* VAI SYLLABLE NDA */ + [0xa562, 0xa562], /* VAI SYLLABLE SA */ + [0xa563, 0xa563], /* VAI SYLLABLE SHA */ + [0xa564, 0xa564], /* VAI SYLLABLE ZA */ + [0xa565, 0xa565], /* VAI SYLLABLE ZHA */ + [0xa566, 0xa566], /* VAI SYLLABLE CA */ + [0xa567, 0xa567], /* VAI SYLLABLE JA */ + [0xa568, 0xa568], /* VAI SYLLABLE NJA */ + [0xa569, 0xa569], /* VAI SYLLABLE YA */ + [0xa56a, 0xa56a], /* VAI SYLLABLE KA */ + [0xa56b, 0xa56b], /* VAI SYLLABLE KAN */ + [0xa56c, 0xa56c], /* VAI SYLLABLE NGGA */ + [0xa56d, 0xa56d], /* VAI SYLLABLE GA */ + [0xa56e, 0xa56e], /* VAI SYLLABLE MA */ + [0xa56f, 0xa56f], /* VAI SYLLABLE NA */ + [0xa570, 0xa570], /* VAI SYLLABLE NYA */ + [0xa571, 0xa571], /* VAI SYLLABLE OO */ + [0xa572, 0xa572], /* VAI SYLLABLE OON */ + [0xa573, 0xa573], /* VAI SYLLABLE HOO */ + [0xa574, 0xa574], /* VAI SYLLABLE WOO */ + [0xa575, 0xa575], /* VAI SYLLABLE WOON */ + [0xa576, 0xa576], /* VAI SYLLABLE POO */ + [0xa577, 0xa577], /* VAI SYLLABLE BHOO */ + [0xa578, 0xa578], /* VAI SYLLABLE BOO */ + [0xa579, 0xa579], /* VAI SYLLABLE MBOO */ + [0xa57a, 0xa57a], /* VAI SYLLABLE KPOO */ + [0xa57b, 0xa57b], /* VAI SYLLABLE MGBOO */ + [0xa57c, 0xa57c], /* VAI SYLLABLE GBOO */ + [0xa57d, 0xa57d], /* VAI SYLLABLE FOO */ + [0xa57e, 0xa57e], /* VAI SYLLABLE VOO */ + [0xa57f, 0xa57f], /* VAI SYLLABLE TOO */ + [0xa580, 0xa580], /* VAI SYLLABLE THOO */ + [0xa581, 0xa581], /* VAI SYLLABLE DHOO */ + [0xa582, 0xa582], /* VAI SYLLABLE DHHOO */ + [0xa583, 0xa583], /* VAI SYLLABLE LOO */ + [0xa584, 0xa584], /* VAI SYLLABLE ROO */ + [0xa585, 0xa585], /* VAI SYLLABLE DOO */ + [0xa586, 0xa586], /* VAI SYLLABLE NDOO */ + [0xa587, 0xa587], /* VAI SYLLABLE SOO */ + [0xa588, 0xa588], /* VAI SYLLABLE SHOO */ + [0xa589, 0xa589], /* VAI SYLLABLE ZOO */ + [0xa58a, 0xa58a], /* VAI SYLLABLE ZHOO */ + [0xa58b, 0xa58b], /* VAI SYLLABLE COO */ + [0xa58c, 0xa58c], /* VAI SYLLABLE JOO */ + [0xa58d, 0xa58d], /* VAI SYLLABLE NJOO */ + [0xa58e, 0xa58e], /* VAI SYLLABLE YOO */ + [0xa58f, 0xa58f], /* VAI SYLLABLE KOO */ + [0xa590, 0xa590], /* VAI SYLLABLE NGGOO */ + [0xa591, 0xa591], /* VAI SYLLABLE GOO */ + [0xa592, 0xa592], /* VAI SYLLABLE MOO */ + [0xa593, 0xa593], /* VAI SYLLABLE NOO */ + [0xa594, 0xa594], /* VAI SYLLABLE NYOO */ + [0xa595, 0xa595], /* VAI SYLLABLE U */ + [0xa596, 0xa596], /* VAI SYLLABLE UN */ + [0xa597, 0xa597], /* VAI SYLLABLE HU */ + [0xa598, 0xa598], /* VAI SYLLABLE HUN */ + [0xa599, 0xa599], /* VAI SYLLABLE WU */ + [0xa59a, 0xa59a], /* VAI SYLLABLE WUN */ + [0xa59b, 0xa59b], /* VAI SYLLABLE PU */ + [0xa59c, 0xa59c], /* VAI SYLLABLE BHU */ + [0xa59d, 0xa59d], /* VAI SYLLABLE BU */ + [0xa59e, 0xa59e], /* VAI SYLLABLE MBU */ + [0xa59f, 0xa59f], /* VAI SYLLABLE KPU */ + [0xa5a0, 0xa5a0], /* VAI SYLLABLE MGBU */ + [0xa5a1, 0xa5a1], /* VAI SYLLABLE GBU */ + [0xa5a2, 0xa5a2], /* VAI SYLLABLE FU */ + [0xa5a3, 0xa5a3], /* VAI SYLLABLE VU */ + [0xa5a4, 0xa5a4], /* VAI SYLLABLE TU */ + [0xa5a5, 0xa5a5], /* VAI SYLLABLE THU */ + [0xa5a6, 0xa5a6], /* VAI SYLLABLE DHU */ + [0xa5a7, 0xa5a7], /* VAI SYLLABLE DHHU */ + [0xa5a8, 0xa5a8], /* VAI SYLLABLE LU */ + [0xa5a9, 0xa5a9], /* VAI SYLLABLE RU */ + [0xa5aa, 0xa5aa], /* VAI SYLLABLE DU */ + [0xa5ab, 0xa5ab], /* VAI SYLLABLE NDU */ + [0xa5ac, 0xa5ac], /* VAI SYLLABLE SU */ + [0xa5ad, 0xa5ad], /* VAI SYLLABLE SHU */ + [0xa5ae, 0xa5ae], /* VAI SYLLABLE ZU */ + [0xa5af, 0xa5af], /* VAI SYLLABLE ZHU */ + [0xa5b0, 0xa5b0], /* VAI SYLLABLE CU */ + [0xa5b1, 0xa5b1], /* VAI SYLLABLE JU */ + [0xa5b2, 0xa5b2], /* VAI SYLLABLE NJU */ + [0xa5b3, 0xa5b3], /* VAI SYLLABLE YU */ + [0xa5b4, 0xa5b4], /* VAI SYLLABLE KU */ + [0xa5b5, 0xa5b5], /* VAI SYLLABLE NGGU */ + [0xa5b6, 0xa5b6], /* VAI SYLLABLE GU */ + [0xa5b7, 0xa5b7], /* VAI SYLLABLE MU */ + [0xa5b8, 0xa5b8], /* VAI SYLLABLE NU */ + [0xa5b9, 0xa5b9], /* VAI SYLLABLE NYU */ + [0xa5ba, 0xa5ba], /* VAI SYLLABLE O */ + [0xa5bb, 0xa5bb], /* VAI SYLLABLE ON */ + [0xa5bc, 0xa5bc], /* VAI SYLLABLE NGON */ + [0xa5bd, 0xa5bd], /* VAI SYLLABLE HO */ + [0xa5be, 0xa5be], /* VAI SYLLABLE HON */ + [0xa5bf, 0xa5bf], /* VAI SYLLABLE WO */ + [0xa5c0, 0xa5c0], /* VAI SYLLABLE WON */ + [0xa5c1, 0xa5c1], /* VAI SYLLABLE PO */ + [0xa5c2, 0xa5c2], /* VAI SYLLABLE BHO */ + [0xa5c3, 0xa5c3], /* VAI SYLLABLE BO */ + [0xa5c4, 0xa5c4], /* VAI SYLLABLE MBO */ + [0xa5c5, 0xa5c5], /* VAI SYLLABLE KPO */ + [0xa5c6, 0xa5c6], /* VAI SYLLABLE MGBO */ + [0xa5c7, 0xa5c7], /* VAI SYLLABLE GBO */ + [0xa5c8, 0xa5c8], /* VAI SYLLABLE GBON */ + [0xa5c9, 0xa5c9], /* VAI SYLLABLE FO */ + [0xa5ca, 0xa5ca], /* VAI SYLLABLE VO */ + [0xa5cb, 0xa5cb], /* VAI SYLLABLE TO */ + [0xa5cc, 0xa5cc], /* VAI SYLLABLE THO */ + [0xa5cd, 0xa5cd], /* VAI SYLLABLE DHO */ + [0xa5ce, 0xa5ce], /* VAI SYLLABLE DHHO */ + [0xa5cf, 0xa5cf], /* VAI SYLLABLE LO */ + [0xa5d0, 0xa5d0], /* VAI SYLLABLE RO */ + [0xa5d1, 0xa5d1], /* VAI SYLLABLE DO */ + [0xa5d2, 0xa5d2], /* VAI SYLLABLE NDO */ + [0xa5d3, 0xa5d3], /* VAI SYLLABLE SO */ + [0xa5d4, 0xa5d4], /* VAI SYLLABLE SHO */ + [0xa5d5, 0xa5d5], /* VAI SYLLABLE ZO */ + [0xa5d6, 0xa5d6], /* VAI SYLLABLE ZHO */ + [0xa5d7, 0xa5d7], /* VAI SYLLABLE CO */ + [0xa5d8, 0xa5d8], /* VAI SYLLABLE JO */ + [0xa5d9, 0xa5d9], /* VAI SYLLABLE NJO */ + [0xa5da, 0xa5da], /* VAI SYLLABLE YO */ + [0xa5db, 0xa5db], /* VAI SYLLABLE KO */ + [0xa5dc, 0xa5dc], /* VAI SYLLABLE NGGO */ + [0xa5dd, 0xa5dd], /* VAI SYLLABLE GO */ + [0xa5de, 0xa5de], /* VAI SYLLABLE MO */ + [0xa5df, 0xa5df], /* VAI SYLLABLE NO */ + [0xa5e0, 0xa5e0], /* VAI SYLLABLE NYO */ + [0xa5e1, 0xa5e1], /* VAI SYLLABLE E */ + [0xa5e2, 0xa5e2], /* VAI SYLLABLE EN */ + [0xa5e3, 0xa5e3], /* VAI SYLLABLE NGEN */ + [0xa5e4, 0xa5e4], /* VAI SYLLABLE HE */ + [0xa5e5, 0xa5e5], /* VAI SYLLABLE HEN */ + [0xa5e6, 0xa5e6], /* VAI SYLLABLE WE */ + [0xa5e7, 0xa5e7], /* VAI SYLLABLE WEN */ + [0xa5e8, 0xa5e8], /* VAI SYLLABLE PE */ + [0xa5e9, 0xa5e9], /* VAI SYLLABLE BHE */ + [0xa5ea, 0xa5ea], /* VAI SYLLABLE BE */ + [0xa5eb, 0xa5eb], /* VAI SYLLABLE MBE */ + [0xa5ec, 0xa5ec], /* VAI SYLLABLE KPE */ + [0xa5ed, 0xa5ed], /* VAI SYLLABLE KPEN */ + [0xa5ee, 0xa5ee], /* VAI SYLLABLE MGBE */ + [0xa5ef, 0xa5ef], /* VAI SYLLABLE GBE */ + [0xa5f0, 0xa5f0], /* VAI SYLLABLE GBEN */ + [0xa5f1, 0xa5f1], /* VAI SYLLABLE FE */ + [0xa5f2, 0xa5f2], /* VAI SYLLABLE VE */ + [0xa5f3, 0xa5f3], /* VAI SYLLABLE TE */ + [0xa5f4, 0xa5f4], /* VAI SYLLABLE THE */ + [0xa5f5, 0xa5f5], /* VAI SYLLABLE DHE */ + [0xa5f6, 0xa5f6], /* VAI SYLLABLE DHHE */ + [0xa5f7, 0xa5f7], /* VAI SYLLABLE LE */ + [0xa5f8, 0xa5f8], /* VAI SYLLABLE RE */ + [0xa5f9, 0xa5f9], /* VAI SYLLABLE DE */ + [0xa5fa, 0xa5fa], /* VAI SYLLABLE NDE */ + [0xa5fb, 0xa5fb], /* VAI SYLLABLE SE */ + [0xa5fc, 0xa5fc], /* VAI SYLLABLE SHE */ + [0xa5fd, 0xa5fd], /* VAI SYLLABLE ZE */ + [0xa5fe, 0xa5fe], /* VAI SYLLABLE ZHE */ + [0xa5ff, 0xa5ff], /* VAI SYLLABLE CE */ + [0xa600, 0xa600], /* VAI SYLLABLE JE */ + [0xa601, 0xa601], /* VAI SYLLABLE NJE */ + [0xa602, 0xa602], /* VAI SYLLABLE YE */ + [0xa603, 0xa603], /* VAI SYLLABLE KE */ + [0xa604, 0xa604], /* VAI SYLLABLE NGGE */ + [0xa605, 0xa605], /* VAI SYLLABLE NGGEN */ + [0xa606, 0xa606], /* VAI SYLLABLE GE */ + [0xa607, 0xa607], /* VAI SYLLABLE GEN */ + [0xa608, 0xa608], /* VAI SYLLABLE ME */ + [0xa609, 0xa609], /* VAI SYLLABLE NE */ + [0xa60a, 0xa60a], /* VAI SYLLABLE NYE */ + [0xa60b, 0xa60b], /* VAI SYLLABLE NG */ + [0xa60c, 0xa60c], /* VAI SYLLABLE LENGTHENER */ + [0xa60d, 0xa60d], /* VAI COMMA */ + [0xa60e, 0xa60e], /* VAI FULL STOP */ + [0xa60f, 0xa60f], /* VAI QUESTION MARK */ + [0xa610, 0xa610], /* VAI SYLLABLE NDOLE FA */ + [0xa611, 0xa611], /* VAI SYLLABLE NDOLE KA */ + [0xa612, 0xa612], /* VAI SYLLABLE NDOLE SOO */ + [0xa613, 0xa613], /* VAI SYMBOL FEENG */ + [0xa614, 0xa614], /* VAI SYMBOL KEENG */ + [0xa615, 0xa615], /* VAI SYMBOL TING */ + [0xa616, 0xa616], /* VAI SYMBOL NII */ + [0xa617, 0xa617], /* VAI SYMBOL BANG */ + [0xa618, 0xa618], /* VAI SYMBOL FAA */ + [0xa619, 0xa619], /* VAI SYMBOL TAA */ + [0xa61a, 0xa61a], /* VAI SYMBOL DANG */ + [0xa61b, 0xa61b], /* VAI SYMBOL DOONG */ + [0xa61c, 0xa61c], /* VAI SYMBOL KUNG */ + [0xa61d, 0xa61d], /* VAI SYMBOL TONG */ + [0xa61e, 0xa61e], /* VAI SYMBOL DO-O */ + [0xa61f, 0xa61f], /* VAI SYMBOL JONG */ + [0xa620, 0xa620], /* VAI DIGIT ZERO */ + [0xa621, 0xa621], /* VAI DIGIT ONE */ + [0xa622, 0xa622], /* VAI DIGIT TWO */ + [0xa623, 0xa623], /* VAI DIGIT THREE */ + [0xa624, 0xa624], /* VAI DIGIT FOUR */ + [0xa625, 0xa625], /* VAI DIGIT FIVE */ + [0xa626, 0xa626], /* VAI DIGIT SIX */ + [0xa627, 0xa627], /* VAI DIGIT SEVEN */ + [0xa628, 0xa628], /* VAI DIGIT EIGHT */ + [0xa629, 0xa629], /* VAI DIGIT NINE */ + [0xa62a, 0xa62a], /* VAI SYLLABLE NDOLE MA */ + [0xa62b, 0xa62b], /* VAI SYLLABLE NDOLE DO */ + [0xa62c, 0xa62c], + [0xa62d, 0xa62d], + [0xa62e, 0xa62e], + [0xa62f, 0xa62f], + [0xa630, 0xa630], + [0xa631, 0xa631], + [0xa632, 0xa632], + [0xa633, 0xa633], + [0xa634, 0xa634], + [0xa635, 0xa635], + [0xa636, 0xa636], + [0xa637, 0xa637], + [0xa638, 0xa638], + [0xa639, 0xa639], + [0xa63a, 0xa63a], + [0xa63b, 0xa63b], + [0xa63c, 0xa63c], + [0xa63d, 0xa63d], + [0xa63e, 0xa63e], + [0xa63f, 0xa63f], + [0xa640, 0xa641], /* CYRILLIC CAPITAL LETTER ZEMLYA */ + [0xa640, 0xa641], /* CYRILLIC SMALL LETTER ZEMLYA */ + [0xa642, 0xa643], /* CYRILLIC CAPITAL LETTER DZELO */ + [0xa642, 0xa643], /* CYRILLIC SMALL LETTER DZELO */ + [0xa644, 0xa645], /* CYRILLIC CAPITAL LETTER REVERSED DZE */ + [0xa644, 0xa645], /* CYRILLIC SMALL LETTER REVERSED DZE */ + [0xa646, 0xa647], /* CYRILLIC CAPITAL LETTER IOTA */ + [0xa646, 0xa647], /* CYRILLIC SMALL LETTER IOTA */ + [0xa648, 0xa649], /* CYRILLIC CAPITAL LETTER DJERV */ + [0xa648, 0xa649], /* CYRILLIC SMALL LETTER DJERV */ + [0xa64a, 0xa64b], /* CYRILLIC CAPITAL LETTER MONOGRAPH UK */ + [0xa64a, 0xa64b], /* CYRILLIC SMALL LETTER MONOGRAPH UK */ + [0xa64c, 0xa64d], /* CYRILLIC CAPITAL LETTER BROAD OMEGA */ + [0xa64c, 0xa64d], /* CYRILLIC SMALL LETTER BROAD OMEGA */ + [0xa64e, 0xa64f], /* CYRILLIC CAPITAL LETTER NEUTRAL YER */ + [0xa64e, 0xa64f], /* CYRILLIC SMALL LETTER NEUTRAL YER */ + [0xa650, 0xa651], /* CYRILLIC CAPITAL LETTER YERU WITH BACK YER */ + [0xa650, 0xa651], /* CYRILLIC SMALL LETTER YERU WITH BACK YER */ + [0xa652, 0xa653], /* CYRILLIC CAPITAL LETTER IOTIFIED YAT */ + [0xa652, 0xa653], /* CYRILLIC SMALL LETTER IOTIFIED YAT */ + [0xa654, 0xa655], /* CYRILLIC CAPITAL LETTER REVERSED YU */ + [0xa654, 0xa655], /* CYRILLIC SMALL LETTER REVERSED YU */ + [0xa656, 0xa657], /* CYRILLIC CAPITAL LETTER IOTIFIED A */ + [0xa656, 0xa657], /* CYRILLIC SMALL LETTER IOTIFIED A */ + [0xa658, 0xa659], /* CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS */ + [0xa658, 0xa659], /* CYRILLIC SMALL LETTER CLOSED LITTLE YUS */ + [0xa65a, 0xa65b], /* CYRILLIC CAPITAL LETTER BLENDED YUS */ + [0xa65a, 0xa65b], /* CYRILLIC SMALL LETTER BLENDED YUS */ + [0xa65c, 0xa65d], /* CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS */ + [0xa65c, 0xa65d], /* CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS */ + [0xa65e, 0xa65f], /* CYRILLIC CAPITAL LETTER YN */ + [0xa65e, 0xa65f], /* CYRILLIC SMALL LETTER YN */ + [0xa660, 0xa661], /* CYRILLIC CAPITAL LETTER REVERSED TSE */ + [0xa660, 0xa661], /* CYRILLIC SMALL LETTER REVERSED TSE */ + [0xa662, 0xa663], /* CYRILLIC CAPITAL LETTER SOFT DE */ + [0xa662, 0xa663], /* CYRILLIC SMALL LETTER SOFT DE */ + [0xa664, 0xa665], /* CYRILLIC CAPITAL LETTER SOFT EL */ + [0xa664, 0xa665], /* CYRILLIC SMALL LETTER SOFT EL */ + [0xa666, 0xa667], /* CYRILLIC CAPITAL LETTER SOFT EM */ + [0xa666, 0xa667], /* CYRILLIC SMALL LETTER SOFT EM */ + [0xa668, 0xa669], /* CYRILLIC CAPITAL LETTER MONOCULAR O */ + [0xa668, 0xa669], /* CYRILLIC SMALL LETTER MONOCULAR O */ + [0xa66a, 0xa66b], /* CYRILLIC CAPITAL LETTER BINOCULAR O */ + [0xa66a, 0xa66b], /* CYRILLIC SMALL LETTER BINOCULAR O */ + [0xa66c, 0xa66d], /* CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O */ + [0xa66c, 0xa66d], /* CYRILLIC SMALL LETTER DOUBLE MONOCULAR O */ + [0xa66e, 0xa66e], /* CYRILLIC LETTER MULTIOCULAR O */ + [0xa66f, 0xa66f], /* COMBINING CYRILLIC VZMET */ + [0xa670, 0xa670], /* COMBINING CYRILLIC TEN MILLIONS SIGN */ + [0xa671, 0xa671], /* COMBINING CYRILLIC HUNDRED MILLIONS SIGN */ + [0xa672, 0xa672], /* COMBINING CYRILLIC THOUSAND MILLIONS SIGN */ + [0xa673, 0xa673], /* SLAVONIC ASTERISK */ + [0xa674, 0xa674], /* COMBINING CYRILLIC LETTER UKRAINIAN IE */ + [0xa675, 0xa675], /* COMBINING CYRILLIC LETTER I */ + [0xa676, 0xa676], /* COMBINING CYRILLIC LETTER YI */ + [0xa677, 0xa677], /* COMBINING CYRILLIC LETTER U */ + [0xa678, 0xa678], /* COMBINING CYRILLIC LETTER HARD SIGN */ + [0xa679, 0xa679], /* COMBINING CYRILLIC LETTER YERU */ + [0xa67a, 0xa67a], /* COMBINING CYRILLIC LETTER SOFT SIGN */ + [0xa67b, 0xa67b], /* COMBINING CYRILLIC LETTER OMEGA */ + [0xa67c, 0xa67c], /* COMBINING CYRILLIC KAVYKA */ + [0xa67d, 0xa67d], /* COMBINING CYRILLIC PAYEROK */ + [0xa67e, 0xa67e], /* CYRILLIC KAVYKA */ + [0xa67f, 0xa67f], /* CYRILLIC PAYEROK */ + [0xa680, 0xa681], /* CYRILLIC CAPITAL LETTER DWE */ + [0xa680, 0xa681], /* CYRILLIC SMALL LETTER DWE */ + [0xa682, 0xa683], /* CYRILLIC CAPITAL LETTER DZWE */ + [0xa682, 0xa683], /* CYRILLIC SMALL LETTER DZWE */ + [0xa684, 0xa685], /* CYRILLIC CAPITAL LETTER ZHWE */ + [0xa684, 0xa685], /* CYRILLIC SMALL LETTER ZHWE */ + [0xa686, 0xa687], /* CYRILLIC CAPITAL LETTER CCHE */ + [0xa686, 0xa687], /* CYRILLIC SMALL LETTER CCHE */ + [0xa688, 0xa689], /* CYRILLIC CAPITAL LETTER DZZE */ + [0xa688, 0xa689], /* CYRILLIC SMALL LETTER DZZE */ + [0xa68a, 0xa68b], /* CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK */ + [0xa68a, 0xa68b], /* CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK */ + [0xa68c, 0xa68d], /* CYRILLIC CAPITAL LETTER TWE */ + [0xa68c, 0xa68d], /* CYRILLIC SMALL LETTER TWE */ + [0xa68e, 0xa68f], /* CYRILLIC CAPITAL LETTER TSWE */ + [0xa68e, 0xa68f], /* CYRILLIC SMALL LETTER TSWE */ + [0xa690, 0xa691], /* CYRILLIC CAPITAL LETTER TSSE */ + [0xa690, 0xa691], /* CYRILLIC SMALL LETTER TSSE */ + [0xa692, 0xa693], /* CYRILLIC CAPITAL LETTER TCHE */ + [0xa692, 0xa693], /* CYRILLIC SMALL LETTER TCHE */ + [0xa694, 0xa695], /* CYRILLIC CAPITAL LETTER HWE */ + [0xa694, 0xa695], /* CYRILLIC SMALL LETTER HWE */ + [0xa696, 0xa697], /* CYRILLIC CAPITAL LETTER SHWE */ + [0xa696, 0xa697], /* CYRILLIC SMALL LETTER SHWE */ + [0xa698, 0xa698], + [0xa699, 0xa699], + [0xa69a, 0xa69a], + [0xa69b, 0xa69b], + [0xa69c, 0xa69c], + [0xa69d, 0xa69d], + [0xa69e, 0xa69e], + [0xa69f, 0xa69f], /* COMBINING CYRILLIC LETTER IOTIFIED E */ + [0xa6a0, 0xa6a0], /* BAMUM LETTER A */ + [0xa6a1, 0xa6a1], /* BAMUM LETTER KA */ + [0xa6a2, 0xa6a2], /* BAMUM LETTER U */ + [0xa6a3, 0xa6a3], /* BAMUM LETTER KU */ + [0xa6a4, 0xa6a4], /* BAMUM LETTER EE */ + [0xa6a5, 0xa6a5], /* BAMUM LETTER REE */ + [0xa6a6, 0xa6a6], /* BAMUM LETTER TAE */ + [0xa6a7, 0xa6a7], /* BAMUM LETTER O */ + [0xa6a8, 0xa6a8], /* BAMUM LETTER NYI */ + [0xa6a9, 0xa6a9], /* BAMUM LETTER I */ + [0xa6aa, 0xa6aa], /* BAMUM LETTER LA */ + [0xa6ab, 0xa6ab], /* BAMUM LETTER PA */ + [0xa6ac, 0xa6ac], /* BAMUM LETTER RII */ + [0xa6ad, 0xa6ad], /* BAMUM LETTER RIEE */ + [0xa6ae, 0xa6ae], /* BAMUM LETTER LEEEE */ + [0xa6af, 0xa6af], /* BAMUM LETTER MEEEE */ + [0xa6b0, 0xa6b0], /* BAMUM LETTER TAA */ + [0xa6b1, 0xa6b1], /* BAMUM LETTER NDAA */ + [0xa6b2, 0xa6b2], /* BAMUM LETTER NJAEM */ + [0xa6b3, 0xa6b3], /* BAMUM LETTER M */ + [0xa6b4, 0xa6b4], /* BAMUM LETTER SUU */ + [0xa6b5, 0xa6b5], /* BAMUM LETTER MU */ + [0xa6b6, 0xa6b6], /* BAMUM LETTER SHII */ + [0xa6b7, 0xa6b7], /* BAMUM LETTER SI */ + [0xa6b8, 0xa6b8], /* BAMUM LETTER SHEUX */ + [0xa6b9, 0xa6b9], /* BAMUM LETTER SEUX */ + [0xa6ba, 0xa6ba], /* BAMUM LETTER KYEE */ + [0xa6bb, 0xa6bb], /* BAMUM LETTER KET */ + [0xa6bc, 0xa6bc], /* BAMUM LETTER NUAE */ + [0xa6bd, 0xa6bd], /* BAMUM LETTER NU */ + [0xa6be, 0xa6be], /* BAMUM LETTER NJUAE */ + [0xa6bf, 0xa6bf], /* BAMUM LETTER YOQ */ + [0xa6c0, 0xa6c0], /* BAMUM LETTER SHU */ + [0xa6c1, 0xa6c1], /* BAMUM LETTER YUQ */ + [0xa6c2, 0xa6c2], /* BAMUM LETTER YA */ + [0xa6c3, 0xa6c3], /* BAMUM LETTER NSHA */ + [0xa6c4, 0xa6c4], /* BAMUM LETTER KEUX */ + [0xa6c5, 0xa6c5], /* BAMUM LETTER PEUX */ + [0xa6c6, 0xa6c6], /* BAMUM LETTER NJEE */ + [0xa6c7, 0xa6c7], /* BAMUM LETTER NTEE */ + [0xa6c8, 0xa6c8], /* BAMUM LETTER PUE */ + [0xa6c9, 0xa6c9], /* BAMUM LETTER WUE */ + [0xa6ca, 0xa6ca], /* BAMUM LETTER PEE */ + [0xa6cb, 0xa6cb], /* BAMUM LETTER FEE */ + [0xa6cc, 0xa6cc], /* BAMUM LETTER RU */ + [0xa6cd, 0xa6cd], /* BAMUM LETTER LU */ + [0xa6ce, 0xa6ce], /* BAMUM LETTER MI */ + [0xa6cf, 0xa6cf], /* BAMUM LETTER NI */ + [0xa6d0, 0xa6d0], /* BAMUM LETTER REUX */ + [0xa6d1, 0xa6d1], /* BAMUM LETTER RAE */ + [0xa6d2, 0xa6d2], /* BAMUM LETTER KEN */ + [0xa6d3, 0xa6d3], /* BAMUM LETTER NGKWAEN */ + [0xa6d4, 0xa6d4], /* BAMUM LETTER NGGA */ + [0xa6d5, 0xa6d5], /* BAMUM LETTER NGA */ + [0xa6d6, 0xa6d6], /* BAMUM LETTER SHO */ + [0xa6d7, 0xa6d7], /* BAMUM LETTER PUAE */ + [0xa6d8, 0xa6d8], /* BAMUM LETTER FU */ + [0xa6d9, 0xa6d9], /* BAMUM LETTER FOM */ + [0xa6da, 0xa6da], /* BAMUM LETTER WA */ + [0xa6db, 0xa6db], /* BAMUM LETTER NA */ + [0xa6dc, 0xa6dc], /* BAMUM LETTER LI */ + [0xa6dd, 0xa6dd], /* BAMUM LETTER PI */ + [0xa6de, 0xa6de], /* BAMUM LETTER LOQ */ + [0xa6df, 0xa6df], /* BAMUM LETTER KO */ + [0xa6e0, 0xa6e0], /* BAMUM LETTER MBEN */ + [0xa6e1, 0xa6e1], /* BAMUM LETTER REN */ + [0xa6e2, 0xa6e2], /* BAMUM LETTER MEN */ + [0xa6e3, 0xa6e3], /* BAMUM LETTER MA */ + [0xa6e4, 0xa6e4], /* BAMUM LETTER TI */ + [0xa6e5, 0xa6e5], /* BAMUM LETTER KI */ + [0xa6e6, 0xa6e6], /* BAMUM LETTER MO */ + [0xa6e7, 0xa6e7], /* BAMUM LETTER MBAA */ + [0xa6e8, 0xa6e8], /* BAMUM LETTER TET */ + [0xa6e9, 0xa6e9], /* BAMUM LETTER KPA */ + [0xa6ea, 0xa6ea], /* BAMUM LETTER TEN */ + [0xa6eb, 0xa6eb], /* BAMUM LETTER NTUU */ + [0xa6ec, 0xa6ec], /* BAMUM LETTER SAMBA */ + [0xa6ed, 0xa6ed], /* BAMUM LETTER FAAMAE */ + [0xa6ee, 0xa6ee], /* BAMUM LETTER KOVUU */ + [0xa6ef, 0xa6ef], /* BAMUM LETTER KOGHOM */ + [0xa6f0, 0xa6f0], /* BAMUM COMBINING MARK KOQNDON */ + [0xa6f1, 0xa6f1], /* BAMUM COMBINING MARK TUKWENTIS */ + [0xa6f2, 0xa6f2], /* BAMUM NJAEMLI */ + [0xa6f3, 0xa6f3], /* BAMUM FULL STOP */ + [0xa6f4, 0xa6f4], /* BAMUM COLON */ + [0xa6f5, 0xa6f5], /* BAMUM COMMA */ + [0xa6f6, 0xa6f6], /* BAMUM SEMICOLON */ + [0xa6f7, 0xa6f7], /* BAMUM QUESTION MARK */ + [0xa6f8, 0xa6f8], + [0xa6f9, 0xa6f9], + [0xa6fa, 0xa6fa], + [0xa6fb, 0xa6fb], + [0xa6fc, 0xa6fc], + [0xa6fd, 0xa6fd], + [0xa6fe, 0xa6fe], + [0xa6ff, 0xa6ff], + [0xa700, 0xa700], /* MODIFIER LETTER CHINESE TONE YIN PING */ + [0xa701, 0xa701], /* MODIFIER LETTER CHINESE TONE YANG PING */ + [0xa702, 0xa702], /* MODIFIER LETTER CHINESE TONE YIN SHANG */ + [0xa703, 0xa703], /* MODIFIER LETTER CHINESE TONE YANG SHANG */ + [0xa704, 0xa704], /* MODIFIER LETTER CHINESE TONE YIN QU */ + [0xa705, 0xa705], /* MODIFIER LETTER CHINESE TONE YANG QU */ + [0xa706, 0xa706], /* MODIFIER LETTER CHINESE TONE YIN RU */ + [0xa707, 0xa707], /* MODIFIER LETTER CHINESE TONE YANG RU */ + [0xa708, 0xa708], /* MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR */ + [0xa709, 0xa709], /* MODIFIER LETTER HIGH DOTTED TONE BAR */ + [0xa70a, 0xa70a], /* MODIFIER LETTER MID DOTTED TONE BAR */ + [0xa70b, 0xa70b], /* MODIFIER LETTER LOW DOTTED TONE BAR */ + [0xa70c, 0xa70c], /* MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR */ + [0xa70d, 0xa70d], /* MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR */ + [0xa70e, 0xa70e], /* MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR */ + [0xa70f, 0xa70f], /* MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR */ + [0xa710, 0xa710], /* MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR */ + [0xa711, 0xa711], /* MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR */ + [0xa712, 0xa712], /* MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR */ + [0xa713, 0xa713], /* MODIFIER LETTER HIGH LEFT-STEM TONE BAR */ + [0xa714, 0xa714], /* MODIFIER LETTER MID LEFT-STEM TONE BAR */ + [0xa715, 0xa715], /* MODIFIER LETTER LOW LEFT-STEM TONE BAR */ + [0xa716, 0xa716], /* MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR */ + [0xa717, 0xa717], /* MODIFIER LETTER DOT VERTICAL BAR */ + [0xa718, 0xa718], /* MODIFIER LETTER DOT SLASH */ + [0xa719, 0xa719], /* MODIFIER LETTER DOT HORIZONTAL BAR */ + [0xa71a, 0xa71a], /* MODIFIER LETTER LOWER RIGHT CORNER ANGLE */ + [0xa71b, 0xa71b], /* MODIFIER LETTER RAISED UP ARROW */ + [0xa71c, 0xa71c], /* MODIFIER LETTER RAISED DOWN ARROW */ + [0xa71d, 0xa71d], /* MODIFIER LETTER RAISED EXCLAMATION MARK */ + [0xa71e, 0xa71e], /* MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK */ + [0xa71f, 0xa71f], /* MODIFIER LETTER LOW INVERTED EXCLAMATION MARK */ + [0xa720, 0xa720], /* MODIFIER LETTER STRESS AND HIGH TONE */ + [0xa721, 0xa721], /* MODIFIER LETTER STRESS AND LOW TONE */ + [0xa722, 0xa723], /* LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF */ + [0xa722, 0xa723], /* LATIN SMALL LETTER EGYPTOLOGICAL ALEF */ + [0xa724, 0xa725], /* LATIN CAPITAL LETTER EGYPTOLOGICAL AIN */ + [0xa724, 0xa725], /* LATIN SMALL LETTER EGYPTOLOGICAL AIN */ + [0xa726, 0xa727], /* LATIN CAPITAL LETTER HENG */ + [0xa726, 0xa727], /* LATIN SMALL LETTER HENG */ + [0xa728, 0xa729], /* LATIN CAPITAL LETTER TZ */ + [0xa728, 0xa729], /* LATIN SMALL LETTER TZ */ + [0xa72a, 0xa72b], /* LATIN CAPITAL LETTER TRESILLO */ + [0xa72a, 0xa72b], /* LATIN SMALL LETTER TRESILLO */ + [0xa72c, 0xa72d], /* LATIN CAPITAL LETTER CUATRILLO */ + [0xa72c, 0xa72d], /* LATIN SMALL LETTER CUATRILLO */ + [0xa72e, 0xa72f], /* LATIN CAPITAL LETTER CUATRILLO WITH COMMA */ + [0xa72e, 0xa72f], /* LATIN SMALL LETTER CUATRILLO WITH COMMA */ + [0xa730, 0xa730], /* LATIN LETTER SMALL CAPITAL F */ + [0xa731, 0xa731], /* LATIN LETTER SMALL CAPITAL S */ + [0xa732, 0xa733], /* LATIN CAPITAL LETTER AA */ + [0xa732, 0xa733], /* LATIN SMALL LETTER AA */ + [0xa734, 0xa735], /* LATIN CAPITAL LETTER AO */ + [0xa734, 0xa735], /* LATIN SMALL LETTER AO */ + [0xa736, 0xa737], /* LATIN CAPITAL LETTER AU */ + [0xa736, 0xa737], /* LATIN SMALL LETTER AU */ + [0xa738, 0xa739], /* LATIN CAPITAL LETTER AV */ + [0xa738, 0xa739], /* LATIN SMALL LETTER AV */ + [0xa73a, 0xa73b], /* LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR */ + [0xa73a, 0xa73b], /* LATIN SMALL LETTER AV WITH HORIZONTAL BAR */ + [0xa73c, 0xa73d], /* LATIN CAPITAL LETTER AY */ + [0xa73c, 0xa73d], /* LATIN SMALL LETTER AY */ + [0xa73e, 0xa73f], /* LATIN CAPITAL LETTER REVERSED C WITH DOT */ + [0xa73e, 0xa73f], /* LATIN SMALL LETTER REVERSED C WITH DOT */ + [0xa740, 0xa741], /* LATIN CAPITAL LETTER K WITH STROKE */ + [0xa740, 0xa741], /* LATIN SMALL LETTER K WITH STROKE */ + [0xa742, 0xa743], /* LATIN CAPITAL LETTER K WITH DIAGONAL STROKE */ + [0xa742, 0xa743], /* LATIN SMALL LETTER K WITH DIAGONAL STROKE */ + [0xa744, 0xa745], /* LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE */ + [0xa744, 0xa745], /* LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE */ + [0xa746, 0xa747], /* LATIN CAPITAL LETTER BROKEN L */ + [0xa746, 0xa747], /* LATIN SMALL LETTER BROKEN L */ + [0xa748, 0xa749], /* LATIN CAPITAL LETTER L WITH HIGH STROKE */ + [0xa748, 0xa749], /* LATIN SMALL LETTER L WITH HIGH STROKE */ + [0xa74a, 0xa74b], /* LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY */ + [0xa74a, 0xa74b], /* LATIN SMALL LETTER O WITH LONG STROKE OVERLAY */ + [0xa74c, 0xa74d], /* LATIN CAPITAL LETTER O WITH LOOP */ + [0xa74c, 0xa74d], /* LATIN SMALL LETTER O WITH LOOP */ + [0xa74e, 0xa74f], /* LATIN CAPITAL LETTER OO */ + [0xa74e, 0xa74f], /* LATIN SMALL LETTER OO */ + [0xa750, 0xa751], /* LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER */ + [0xa750, 0xa751], /* LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER */ + [0xa752, 0xa753], /* LATIN CAPITAL LETTER P WITH FLOURISH */ + [0xa752, 0xa753], /* LATIN SMALL LETTER P WITH FLOURISH */ + [0xa754, 0xa755], /* LATIN CAPITAL LETTER P WITH SQUIRREL TAIL */ + [0xa754, 0xa755], /* LATIN SMALL LETTER P WITH SQUIRREL TAIL */ + [0xa756, 0xa757], /* LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER */ + [0xa756, 0xa757], /* LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER */ + [0xa758, 0xa759], /* LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE */ + [0xa758, 0xa759], /* LATIN SMALL LETTER Q WITH DIAGONAL STROKE */ + [0xa75a, 0xa75b], /* LATIN CAPITAL LETTER R ROTUNDA */ + [0xa75a, 0xa75b], /* LATIN SMALL LETTER R ROTUNDA */ + [0xa75c, 0xa75d], /* LATIN CAPITAL LETTER RUM ROTUNDA */ + [0xa75c, 0xa75d], /* LATIN SMALL LETTER RUM ROTUNDA */ + [0xa75e, 0xa75f], /* LATIN CAPITAL LETTER V WITH DIAGONAL STROKE */ + [0xa75e, 0xa75f], /* LATIN SMALL LETTER V WITH DIAGONAL STROKE */ + [0xa760, 0xa761], /* LATIN CAPITAL LETTER VY */ + [0xa760, 0xa761], /* LATIN SMALL LETTER VY */ + [0xa762, 0xa763], /* LATIN CAPITAL LETTER VISIGOTHIC Z */ + [0xa762, 0xa763], /* LATIN SMALL LETTER VISIGOTHIC Z */ + [0xa764, 0xa765], /* LATIN CAPITAL LETTER THORN WITH STROKE */ + [0xa764, 0xa765], /* LATIN SMALL LETTER THORN WITH STROKE */ + [0xa766, 0xa767], /* LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER */ + [0xa766, 0xa767], /* LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER */ + [0xa768, 0xa769], /* LATIN CAPITAL LETTER VEND */ + [0xa768, 0xa769], /* LATIN SMALL LETTER VEND */ + [0xa76a, 0xa76b], /* LATIN CAPITAL LETTER ET */ + [0xa76a, 0xa76b], /* LATIN SMALL LETTER ET */ + [0xa76c, 0xa76d], /* LATIN CAPITAL LETTER IS */ + [0xa76c, 0xa76d], /* LATIN SMALL LETTER IS */ + [0xa76e, 0xa76f], /* LATIN CAPITAL LETTER CON */ + [0xa76e, 0xa76f], /* LATIN SMALL LETTER CON */ + [0xa770, 0xa770], /* MODIFIER LETTER US */ + [0xa771, 0xa771], /* LATIN SMALL LETTER DUM */ + [0xa772, 0xa772], /* LATIN SMALL LETTER LUM */ + [0xa773, 0xa773], /* LATIN SMALL LETTER MUM */ + [0xa774, 0xa774], /* LATIN SMALL LETTER NUM */ + [0xa775, 0xa775], /* LATIN SMALL LETTER RUM */ + [0xa776, 0xa776], /* LATIN LETTER SMALL CAPITAL RUM */ + [0xa777, 0xa777], /* LATIN SMALL LETTER TUM */ + [0xa778, 0xa778], /* LATIN SMALL LETTER UM */ + [0xa779, 0xa77a], /* LATIN CAPITAL LETTER INSULAR D */ + [0xa779, 0xa77a], /* LATIN SMALL LETTER INSULAR D */ + [0xa77b, 0xa77c], /* LATIN CAPITAL LETTER INSULAR F */ + [0xa77b, 0xa77c], /* LATIN SMALL LETTER INSULAR F */ + [0xa77d, 0x1d79], /* LATIN CAPITAL LETTER INSULAR G */ + [0xa77e, 0xa77f], /* LATIN CAPITAL LETTER TURNED INSULAR G */ + [0xa77e, 0xa77f], /* LATIN SMALL LETTER TURNED INSULAR G */ + [0xa780, 0xa781], /* LATIN CAPITAL LETTER TURNED L */ + [0xa780, 0xa781], /* LATIN SMALL LETTER TURNED L */ + [0xa782, 0xa783], /* LATIN CAPITAL LETTER INSULAR R */ + [0xa782, 0xa783], /* LATIN SMALL LETTER INSULAR R */ + [0xa784, 0xa785], /* LATIN CAPITAL LETTER INSULAR S */ + [0xa784, 0xa785], /* LATIN SMALL LETTER INSULAR S */ + [0xa786, 0xa787], /* LATIN CAPITAL LETTER INSULAR T */ + [0xa786, 0xa787], /* LATIN SMALL LETTER INSULAR T */ + [0xa788, 0xa788], /* MODIFIER LETTER LOW CIRCUMFLEX ACCENT */ + [0xa789, 0xa789], /* MODIFIER LETTER COLON */ + [0xa78a, 0xa78a], /* MODIFIER LETTER SHORT EQUALS SIGN */ + [0xa78b, 0xa78c], /* LATIN CAPITAL LETTER SALTILLO */ + [0xa78b, 0xa78c], /* LATIN SMALL LETTER SALTILLO */ + [0xa78d, 0x265], /* LATIN CAPITAL LETTER TURNED H */ + [0xa78e, 0xa78e], /* LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT */ + [0xa78f, 0xa78f], + [0xa790, 0xa791], /* LATIN CAPITAL LETTER N WITH DESCENDER */ + [0xa790, 0xa791], /* LATIN SMALL LETTER N WITH DESCENDER */ + [0xa792, 0xa793], /* LATIN CAPITAL LETTER C WITH BAR */ + [0xa792, 0xa793], /* LATIN SMALL LETTER C WITH BAR */ + [0xa794, 0xa794], + [0xa795, 0xa795], + [0xa796, 0xa796], + [0xa797, 0xa797], + [0xa798, 0xa798], + [0xa799, 0xa799], + [0xa79a, 0xa79a], + [0xa79b, 0xa79b], + [0xa79c, 0xa79c], + [0xa79d, 0xa79d], + [0xa79e, 0xa79e], + [0xa79f, 0xa79f], + [0xa7a0, 0xa7a1], /* LATIN CAPITAL LETTER G WITH OBLIQUE STROKE */ + [0xa7a0, 0xa7a1], /* LATIN SMALL LETTER G WITH OBLIQUE STROKE */ + [0xa7a2, 0xa7a3], /* LATIN CAPITAL LETTER K WITH OBLIQUE STROKE */ + [0xa7a2, 0xa7a3], /* LATIN SMALL LETTER K WITH OBLIQUE STROKE */ + [0xa7a4, 0xa7a5], /* LATIN CAPITAL LETTER N WITH OBLIQUE STROKE */ + [0xa7a4, 0xa7a5], /* LATIN SMALL LETTER N WITH OBLIQUE STROKE */ + [0xa7a6, 0xa7a7], /* LATIN CAPITAL LETTER R WITH OBLIQUE STROKE */ + [0xa7a6, 0xa7a7], /* LATIN SMALL LETTER R WITH OBLIQUE STROKE */ + [0xa7a8, 0xa7a9], /* LATIN CAPITAL LETTER S WITH OBLIQUE STROKE */ + [0xa7a8, 0xa7a9], /* LATIN SMALL LETTER S WITH OBLIQUE STROKE */ + [0xa7aa, 0x266], /* LATIN CAPITAL LETTER H WITH HOOK */ + [0xa7ab, 0xa7ab], + [0xa7ac, 0xa7ac], + [0xa7ad, 0xa7ad], + [0xa7ae, 0xa7ae], + [0xa7af, 0xa7af], + [0xa7b0, 0xa7b0], + [0xa7b1, 0xa7b1], + [0xa7b2, 0xa7b2], + [0xa7b3, 0xa7b3], + [0xa7b4, 0xa7b4], + [0xa7b5, 0xa7b5], + [0xa7b6, 0xa7b6], + [0xa7b7, 0xa7b7], + [0xa7b8, 0xa7b8], + [0xa7b9, 0xa7b9], + [0xa7ba, 0xa7ba], + [0xa7bb, 0xa7bb], + [0xa7bc, 0xa7bc], + [0xa7bd, 0xa7bd], + [0xa7be, 0xa7be], + [0xa7bf, 0xa7bf], + [0xa7c0, 0xa7c0], + [0xa7c1, 0xa7c1], + [0xa7c2, 0xa7c2], + [0xa7c3, 0xa7c3], + [0xa7c4, 0xa7c4], + [0xa7c5, 0xa7c5], + [0xa7c6, 0xa7c6], + [0xa7c7, 0xa7c7], + [0xa7c8, 0xa7c8], + [0xa7c9, 0xa7c9], + [0xa7ca, 0xa7ca], + [0xa7cb, 0xa7cb], + [0xa7cc, 0xa7cc], + [0xa7cd, 0xa7cd], + [0xa7ce, 0xa7ce], + [0xa7cf, 0xa7cf], + [0xa7d0, 0xa7d0], + [0xa7d1, 0xa7d1], + [0xa7d2, 0xa7d2], + [0xa7d3, 0xa7d3], + [0xa7d4, 0xa7d4], + [0xa7d5, 0xa7d5], + [0xa7d6, 0xa7d6], + [0xa7d7, 0xa7d7], + [0xa7d8, 0xa7d8], + [0xa7d9, 0xa7d9], + [0xa7da, 0xa7da], + [0xa7db, 0xa7db], + [0xa7dc, 0xa7dc], + [0xa7dd, 0xa7dd], + [0xa7de, 0xa7de], + [0xa7df, 0xa7df], + [0xa7e0, 0xa7e0], + [0xa7e1, 0xa7e1], + [0xa7e2, 0xa7e2], + [0xa7e3, 0xa7e3], + [0xa7e4, 0xa7e4], + [0xa7e5, 0xa7e5], + [0xa7e6, 0xa7e6], + [0xa7e7, 0xa7e7], + [0xa7e8, 0xa7e8], + [0xa7e9, 0xa7e9], + [0xa7ea, 0xa7ea], + [0xa7eb, 0xa7eb], + [0xa7ec, 0xa7ec], + [0xa7ed, 0xa7ed], + [0xa7ee, 0xa7ee], + [0xa7ef, 0xa7ef], + [0xa7f0, 0xa7f0], + [0xa7f1, 0xa7f1], + [0xa7f2, 0xa7f2], + [0xa7f3, 0xa7f3], + [0xa7f4, 0xa7f4], + [0xa7f5, 0xa7f5], + [0xa7f6, 0xa7f6], + [0xa7f7, 0xa7f7], + [0xa7f8, 0xa7f8], /* MODIFIER LETTER CAPITAL H WITH STROKE */ + [0xa7f9, 0xa7f9], /* MODIFIER LETTER SMALL LIGATURE OE */ + [0xa7fa, 0xa7fa], /* LATIN LETTER SMALL CAPITAL TURNED M */ + [0xa7fb, 0xa7fb], /* LATIN EPIGRAPHIC LETTER REVERSED F */ + [0xa7fc, 0xa7fc], /* LATIN EPIGRAPHIC LETTER REVERSED P */ + [0xa7fd, 0xa7fd], /* LATIN EPIGRAPHIC LETTER INVERTED M */ + [0xa7fe, 0xa7fe], /* LATIN EPIGRAPHIC LETTER I LONGA */ + [0xa7ff, 0xa7ff], /* LATIN EPIGRAPHIC LETTER ARCHAIC M */ + [0xa800, 0xa800], /* SYLOTI NAGRI LETTER A */ + [0xa801, 0xa801], /* SYLOTI NAGRI LETTER I */ + [0xa802, 0xa802], /* SYLOTI NAGRI SIGN DVISVARA */ + [0xa803, 0xa803], /* SYLOTI NAGRI LETTER U */ + [0xa804, 0xa804], /* SYLOTI NAGRI LETTER E */ + [0xa805, 0xa805], /* SYLOTI NAGRI LETTER O */ + [0xa806, 0xa806], /* SYLOTI NAGRI SIGN HASANTA */ + [0xa807, 0xa807], /* SYLOTI NAGRI LETTER KO */ + [0xa808, 0xa808], /* SYLOTI NAGRI LETTER KHO */ + [0xa809, 0xa809], /* SYLOTI NAGRI LETTER GO */ + [0xa80a, 0xa80a], /* SYLOTI NAGRI LETTER GHO */ + [0xa80b, 0xa80b], /* SYLOTI NAGRI SIGN ANUSVARA */ + [0xa80c, 0xa80c], /* SYLOTI NAGRI LETTER CO */ + [0xa80d, 0xa80d], /* SYLOTI NAGRI LETTER CHO */ + [0xa80e, 0xa80e], /* SYLOTI NAGRI LETTER JO */ + [0xa80f, 0xa80f], /* SYLOTI NAGRI LETTER JHO */ + [0xa810, 0xa810], /* SYLOTI NAGRI LETTER TTO */ + [0xa811, 0xa811], /* SYLOTI NAGRI LETTER TTHO */ + [0xa812, 0xa812], /* SYLOTI NAGRI LETTER DDO */ + [0xa813, 0xa813], /* SYLOTI NAGRI LETTER DDHO */ + [0xa814, 0xa814], /* SYLOTI NAGRI LETTER TO */ + [0xa815, 0xa815], /* SYLOTI NAGRI LETTER THO */ + [0xa816, 0xa816], /* SYLOTI NAGRI LETTER DO */ + [0xa817, 0xa817], /* SYLOTI NAGRI LETTER DHO */ + [0xa818, 0xa818], /* SYLOTI NAGRI LETTER NO */ + [0xa819, 0xa819], /* SYLOTI NAGRI LETTER PO */ + [0xa81a, 0xa81a], /* SYLOTI NAGRI LETTER PHO */ + [0xa81b, 0xa81b], /* SYLOTI NAGRI LETTER BO */ + [0xa81c, 0xa81c], /* SYLOTI NAGRI LETTER BHO */ + [0xa81d, 0xa81d], /* SYLOTI NAGRI LETTER MO */ + [0xa81e, 0xa81e], /* SYLOTI NAGRI LETTER RO */ + [0xa81f, 0xa81f], /* SYLOTI NAGRI LETTER LO */ + [0xa820, 0xa820], /* SYLOTI NAGRI LETTER RRO */ + [0xa821, 0xa821], /* SYLOTI NAGRI LETTER SO */ + [0xa822, 0xa822], /* SYLOTI NAGRI LETTER HO */ + [0xa823, 0xa823], /* SYLOTI NAGRI VOWEL SIGN A */ + [0xa824, 0xa824], /* SYLOTI NAGRI VOWEL SIGN I */ + [0xa825, 0xa825], /* SYLOTI NAGRI VOWEL SIGN U */ + [0xa826, 0xa826], /* SYLOTI NAGRI VOWEL SIGN E */ + [0xa827, 0xa827], /* SYLOTI NAGRI VOWEL SIGN OO */ + [0xa828, 0xa828], /* SYLOTI NAGRI POETRY MARK-1 */ + [0xa829, 0xa829], /* SYLOTI NAGRI POETRY MARK-2 */ + [0xa82a, 0xa82a], /* SYLOTI NAGRI POETRY MARK-3 */ + [0xa82b, 0xa82b], /* SYLOTI NAGRI POETRY MARK-4 */ + [0xa82c, 0xa82c], + [0xa82d, 0xa82d], + [0xa82e, 0xa82e], + [0xa82f, 0xa82f], + [0xa830, 0xa830], /* NORTH INDIC FRACTION ONE QUARTER */ + [0xa831, 0xa831], /* NORTH INDIC FRACTION ONE HALF */ + [0xa832, 0xa832], /* NORTH INDIC FRACTION THREE QUARTERS */ + [0xa833, 0xa833], /* NORTH INDIC FRACTION ONE SIXTEENTH */ + [0xa834, 0xa834], /* NORTH INDIC FRACTION ONE EIGHTH */ + [0xa835, 0xa835], /* NORTH INDIC FRACTION THREE SIXTEENTHS */ + [0xa836, 0xa836], /* NORTH INDIC QUARTER MARK */ + [0xa837, 0xa837], /* NORTH INDIC PLACEHOLDER MARK */ + [0xa838, 0xa838], /* NORTH INDIC RUPEE MARK */ + [0xa839, 0xa839], /* NORTH INDIC QUANTITY MARK */ + [0xa83a, 0xa83a], + [0xa83b, 0xa83b], + [0xa83c, 0xa83c], + [0xa83d, 0xa83d], + [0xa83e, 0xa83e], + [0xa83f, 0xa83f], + [0xa840, 0xa840], /* PHAGS-PA LETTER KA */ + [0xa841, 0xa841], /* PHAGS-PA LETTER KHA */ + [0xa842, 0xa842], /* PHAGS-PA LETTER GA */ + [0xa843, 0xa843], /* PHAGS-PA LETTER NGA */ + [0xa844, 0xa844], /* PHAGS-PA LETTER CA */ + [0xa845, 0xa845], /* PHAGS-PA LETTER CHA */ + [0xa846, 0xa846], /* PHAGS-PA LETTER JA */ + [0xa847, 0xa847], /* PHAGS-PA LETTER NYA */ + [0xa848, 0xa848], /* PHAGS-PA LETTER TA */ + [0xa849, 0xa849], /* PHAGS-PA LETTER THA */ + [0xa84a, 0xa84a], /* PHAGS-PA LETTER DA */ + [0xa84b, 0xa84b], /* PHAGS-PA LETTER NA */ + [0xa84c, 0xa84c], /* PHAGS-PA LETTER PA */ + [0xa84d, 0xa84d], /* PHAGS-PA LETTER PHA */ + [0xa84e, 0xa84e], /* PHAGS-PA LETTER BA */ + [0xa84f, 0xa84f], /* PHAGS-PA LETTER MA */ + [0xa850, 0xa850], /* PHAGS-PA LETTER TSA */ + [0xa851, 0xa851], /* PHAGS-PA LETTER TSHA */ + [0xa852, 0xa852], /* PHAGS-PA LETTER DZA */ + [0xa853, 0xa853], /* PHAGS-PA LETTER WA */ + [0xa854, 0xa854], /* PHAGS-PA LETTER ZHA */ + [0xa855, 0xa855], /* PHAGS-PA LETTER ZA */ + [0xa856, 0xa856], /* PHAGS-PA LETTER SMALL A */ + [0xa857, 0xa857], /* PHAGS-PA LETTER YA */ + [0xa858, 0xa858], /* PHAGS-PA LETTER RA */ + [0xa859, 0xa859], /* PHAGS-PA LETTER LA */ + [0xa85a, 0xa85a], /* PHAGS-PA LETTER SHA */ + [0xa85b, 0xa85b], /* PHAGS-PA LETTER SA */ + [0xa85c, 0xa85c], /* PHAGS-PA LETTER HA */ + [0xa85d, 0xa85d], /* PHAGS-PA LETTER A */ + [0xa85e, 0xa85e], /* PHAGS-PA LETTER I */ + [0xa85f, 0xa85f], /* PHAGS-PA LETTER U */ + [0xa860, 0xa860], /* PHAGS-PA LETTER E */ + [0xa861, 0xa861], /* PHAGS-PA LETTER O */ + [0xa862, 0xa862], /* PHAGS-PA LETTER QA */ + [0xa863, 0xa863], /* PHAGS-PA LETTER XA */ + [0xa864, 0xa864], /* PHAGS-PA LETTER FA */ + [0xa865, 0xa865], /* PHAGS-PA LETTER GGA */ + [0xa866, 0xa866], /* PHAGS-PA LETTER EE */ + [0xa867, 0xa867], /* PHAGS-PA SUBJOINED LETTER WA */ + [0xa868, 0xa868], /* PHAGS-PA SUBJOINED LETTER YA */ + [0xa869, 0xa869], /* PHAGS-PA LETTER TTA */ + [0xa86a, 0xa86a], /* PHAGS-PA LETTER TTHA */ + [0xa86b, 0xa86b], /* PHAGS-PA LETTER DDA */ + [0xa86c, 0xa86c], /* PHAGS-PA LETTER NNA */ + [0xa86d, 0xa86d], /* PHAGS-PA LETTER ALTERNATE YA */ + [0xa86e, 0xa86e], /* PHAGS-PA LETTER VOICELESS SHA */ + [0xa86f, 0xa86f], /* PHAGS-PA LETTER VOICED HA */ + [0xa870, 0xa870], /* PHAGS-PA LETTER ASPIRATED FA */ + [0xa871, 0xa871], /* PHAGS-PA SUBJOINED LETTER RA */ + [0xa872, 0xa872], /* PHAGS-PA SUPERFIXED LETTER RA */ + [0xa873, 0xa873], /* PHAGS-PA LETTER CANDRABINDU */ + [0xa874, 0xa874], /* PHAGS-PA SINGLE HEAD MARK */ + [0xa875, 0xa875], /* PHAGS-PA DOUBLE HEAD MARK */ + [0xa876, 0xa876], /* PHAGS-PA MARK SHAD */ + [0xa877, 0xa877], /* PHAGS-PA MARK DOUBLE SHAD */ + [0xa878, 0xa878], + [0xa879, 0xa879], + [0xa87a, 0xa87a], + [0xa87b, 0xa87b], + [0xa87c, 0xa87c], + [0xa87d, 0xa87d], + [0xa87e, 0xa87e], + [0xa87f, 0xa87f], + [0xa880, 0xa880], /* SAURASHTRA SIGN ANUSVARA */ + [0xa881, 0xa881], /* SAURASHTRA SIGN VISARGA */ + [0xa882, 0xa882], /* SAURASHTRA LETTER A */ + [0xa883, 0xa883], /* SAURASHTRA LETTER AA */ + [0xa884, 0xa884], /* SAURASHTRA LETTER I */ + [0xa885, 0xa885], /* SAURASHTRA LETTER II */ + [0xa886, 0xa886], /* SAURASHTRA LETTER U */ + [0xa887, 0xa887], /* SAURASHTRA LETTER UU */ + [0xa888, 0xa888], /* SAURASHTRA LETTER VOCALIC R */ + [0xa889, 0xa889], /* SAURASHTRA LETTER VOCALIC RR */ + [0xa88a, 0xa88a], /* SAURASHTRA LETTER VOCALIC L */ + [0xa88b, 0xa88b], /* SAURASHTRA LETTER VOCALIC LL */ + [0xa88c, 0xa88c], /* SAURASHTRA LETTER E */ + [0xa88d, 0xa88d], /* SAURASHTRA LETTER EE */ + [0xa88e, 0xa88e], /* SAURASHTRA LETTER AI */ + [0xa88f, 0xa88f], /* SAURASHTRA LETTER O */ + [0xa890, 0xa890], /* SAURASHTRA LETTER OO */ + [0xa891, 0xa891], /* SAURASHTRA LETTER AU */ + [0xa892, 0xa892], /* SAURASHTRA LETTER KA */ + [0xa893, 0xa893], /* SAURASHTRA LETTER KHA */ + [0xa894, 0xa894], /* SAURASHTRA LETTER GA */ + [0xa895, 0xa895], /* SAURASHTRA LETTER GHA */ + [0xa896, 0xa896], /* SAURASHTRA LETTER NGA */ + [0xa897, 0xa897], /* SAURASHTRA LETTER CA */ + [0xa898, 0xa898], /* SAURASHTRA LETTER CHA */ + [0xa899, 0xa899], /* SAURASHTRA LETTER JA */ + [0xa89a, 0xa89a], /* SAURASHTRA LETTER JHA */ + [0xa89b, 0xa89b], /* SAURASHTRA LETTER NYA */ + [0xa89c, 0xa89c], /* SAURASHTRA LETTER TTA */ + [0xa89d, 0xa89d], /* SAURASHTRA LETTER TTHA */ + [0xa89e, 0xa89e], /* SAURASHTRA LETTER DDA */ + [0xa89f, 0xa89f], /* SAURASHTRA LETTER DDHA */ + [0xa8a0, 0xa8a0], /* SAURASHTRA LETTER NNA */ + [0xa8a1, 0xa8a1], /* SAURASHTRA LETTER TA */ + [0xa8a2, 0xa8a2], /* SAURASHTRA LETTER THA */ + [0xa8a3, 0xa8a3], /* SAURASHTRA LETTER DA */ + [0xa8a4, 0xa8a4], /* SAURASHTRA LETTER DHA */ + [0xa8a5, 0xa8a5], /* SAURASHTRA LETTER NA */ + [0xa8a6, 0xa8a6], /* SAURASHTRA LETTER PA */ + [0xa8a7, 0xa8a7], /* SAURASHTRA LETTER PHA */ + [0xa8a8, 0xa8a8], /* SAURASHTRA LETTER BA */ + [0xa8a9, 0xa8a9], /* SAURASHTRA LETTER BHA */ + [0xa8aa, 0xa8aa], /* SAURASHTRA LETTER MA */ + [0xa8ab, 0xa8ab], /* SAURASHTRA LETTER YA */ + [0xa8ac, 0xa8ac], /* SAURASHTRA LETTER RA */ + [0xa8ad, 0xa8ad], /* SAURASHTRA LETTER LA */ + [0xa8ae, 0xa8ae], /* SAURASHTRA LETTER VA */ + [0xa8af, 0xa8af], /* SAURASHTRA LETTER SHA */ + [0xa8b0, 0xa8b0], /* SAURASHTRA LETTER SSA */ + [0xa8b1, 0xa8b1], /* SAURASHTRA LETTER SA */ + [0xa8b2, 0xa8b2], /* SAURASHTRA LETTER HA */ + [0xa8b3, 0xa8b3], /* SAURASHTRA LETTER LLA */ + [0xa8b4, 0xa8b4], /* SAURASHTRA CONSONANT SIGN HAARU */ + [0xa8b5, 0xa8b5], /* SAURASHTRA VOWEL SIGN AA */ + [0xa8b6, 0xa8b6], /* SAURASHTRA VOWEL SIGN I */ + [0xa8b7, 0xa8b7], /* SAURASHTRA VOWEL SIGN II */ + [0xa8b8, 0xa8b8], /* SAURASHTRA VOWEL SIGN U */ + [0xa8b9, 0xa8b9], /* SAURASHTRA VOWEL SIGN UU */ + [0xa8ba, 0xa8ba], /* SAURASHTRA VOWEL SIGN VOCALIC R */ + [0xa8bb, 0xa8bb], /* SAURASHTRA VOWEL SIGN VOCALIC RR */ + [0xa8bc, 0xa8bc], /* SAURASHTRA VOWEL SIGN VOCALIC L */ + [0xa8bd, 0xa8bd], /* SAURASHTRA VOWEL SIGN VOCALIC LL */ + [0xa8be, 0xa8be], /* SAURASHTRA VOWEL SIGN E */ + [0xa8bf, 0xa8bf], /* SAURASHTRA VOWEL SIGN EE */ + [0xa8c0, 0xa8c0], /* SAURASHTRA VOWEL SIGN AI */ + [0xa8c1, 0xa8c1], /* SAURASHTRA VOWEL SIGN O */ + [0xa8c2, 0xa8c2], /* SAURASHTRA VOWEL SIGN OO */ + [0xa8c3, 0xa8c3], /* SAURASHTRA VOWEL SIGN AU */ + [0xa8c4, 0xa8c4], /* SAURASHTRA SIGN VIRAMA */ + [0xa8c5, 0xa8c5], + [0xa8c6, 0xa8c6], + [0xa8c7, 0xa8c7], + [0xa8c8, 0xa8c8], + [0xa8c9, 0xa8c9], + [0xa8ca, 0xa8ca], + [0xa8cb, 0xa8cb], + [0xa8cc, 0xa8cc], + [0xa8cd, 0xa8cd], + [0xa8ce, 0xa8ce], /* SAURASHTRA DANDA */ + [0xa8cf, 0xa8cf], /* SAURASHTRA DOUBLE DANDA */ + [0xa8d0, 0xa8d0], /* SAURASHTRA DIGIT ZERO */ + [0xa8d1, 0xa8d1], /* SAURASHTRA DIGIT ONE */ + [0xa8d2, 0xa8d2], /* SAURASHTRA DIGIT TWO */ + [0xa8d3, 0xa8d3], /* SAURASHTRA DIGIT THREE */ + [0xa8d4, 0xa8d4], /* SAURASHTRA DIGIT FOUR */ + [0xa8d5, 0xa8d5], /* SAURASHTRA DIGIT FIVE */ + [0xa8d6, 0xa8d6], /* SAURASHTRA DIGIT SIX */ + [0xa8d7, 0xa8d7], /* SAURASHTRA DIGIT SEVEN */ + [0xa8d8, 0xa8d8], /* SAURASHTRA DIGIT EIGHT */ + [0xa8d9, 0xa8d9], /* SAURASHTRA DIGIT NINE */ + [0xa8da, 0xa8da], + [0xa8db, 0xa8db], + [0xa8dc, 0xa8dc], + [0xa8dd, 0xa8dd], + [0xa8de, 0xa8de], + [0xa8df, 0xa8df], + [0xa8e0, 0xa8e0], /* COMBINING DEVANAGARI DIGIT ZERO */ + [0xa8e1, 0xa8e1], /* COMBINING DEVANAGARI DIGIT ONE */ + [0xa8e2, 0xa8e2], /* COMBINING DEVANAGARI DIGIT TWO */ + [0xa8e3, 0xa8e3], /* COMBINING DEVANAGARI DIGIT THREE */ + [0xa8e4, 0xa8e4], /* COMBINING DEVANAGARI DIGIT FOUR */ + [0xa8e5, 0xa8e5], /* COMBINING DEVANAGARI DIGIT FIVE */ + [0xa8e6, 0xa8e6], /* COMBINING DEVANAGARI DIGIT SIX */ + [0xa8e7, 0xa8e7], /* COMBINING DEVANAGARI DIGIT SEVEN */ + [0xa8e8, 0xa8e8], /* COMBINING DEVANAGARI DIGIT EIGHT */ + [0xa8e9, 0xa8e9], /* COMBINING DEVANAGARI DIGIT NINE */ + [0xa8ea, 0xa8ea], /* COMBINING DEVANAGARI LETTER A */ + [0xa8eb, 0xa8eb], /* COMBINING DEVANAGARI LETTER U */ + [0xa8ec, 0xa8ec], /* COMBINING DEVANAGARI LETTER KA */ + [0xa8ed, 0xa8ed], /* COMBINING DEVANAGARI LETTER NA */ + [0xa8ee, 0xa8ee], /* COMBINING DEVANAGARI LETTER PA */ + [0xa8ef, 0xa8ef], /* COMBINING DEVANAGARI LETTER RA */ + [0xa8f0, 0xa8f0], /* COMBINING DEVANAGARI LETTER VI */ + [0xa8f1, 0xa8f1], /* COMBINING DEVANAGARI SIGN AVAGRAHA */ + [0xa8f2, 0xa8f2], /* DEVANAGARI SIGN SPACING CANDRABINDU */ + [0xa8f3, 0xa8f3], /* DEVANAGARI SIGN CANDRABINDU VIRAMA */ + [0xa8f4, 0xa8f4], /* DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA */ + [0xa8f5, 0xa8f5], /* DEVANAGARI SIGN CANDRABINDU TWO */ + [0xa8f6, 0xa8f6], /* DEVANAGARI SIGN CANDRABINDU THREE */ + [0xa8f7, 0xa8f7], /* DEVANAGARI SIGN CANDRABINDU AVAGRAHA */ + [0xa8f8, 0xa8f8], /* DEVANAGARI SIGN PUSHPIKA */ + [0xa8f9, 0xa8f9], /* DEVANAGARI GAP FILLER */ + [0xa8fa, 0xa8fa], /* DEVANAGARI CARET */ + [0xa8fb, 0xa8fb], /* DEVANAGARI HEADSTROKE */ + [0xa8fc, 0xa8fc], + [0xa8fd, 0xa8fd], + [0xa8fe, 0xa8fe], + [0xa8ff, 0xa8ff], + [0xa900, 0xa900], /* KAYAH LI DIGIT ZERO */ + [0xa901, 0xa901], /* KAYAH LI DIGIT ONE */ + [0xa902, 0xa902], /* KAYAH LI DIGIT TWO */ + [0xa903, 0xa903], /* KAYAH LI DIGIT THREE */ + [0xa904, 0xa904], /* KAYAH LI DIGIT FOUR */ + [0xa905, 0xa905], /* KAYAH LI DIGIT FIVE */ + [0xa906, 0xa906], /* KAYAH LI DIGIT SIX */ + [0xa907, 0xa907], /* KAYAH LI DIGIT SEVEN */ + [0xa908, 0xa908], /* KAYAH LI DIGIT EIGHT */ + [0xa909, 0xa909], /* KAYAH LI DIGIT NINE */ + [0xa90a, 0xa90a], /* KAYAH LI LETTER KA */ + [0xa90b, 0xa90b], /* KAYAH LI LETTER KHA */ + [0xa90c, 0xa90c], /* KAYAH LI LETTER GA */ + [0xa90d, 0xa90d], /* KAYAH LI LETTER NGA */ + [0xa90e, 0xa90e], /* KAYAH LI LETTER SA */ + [0xa90f, 0xa90f], /* KAYAH LI LETTER SHA */ + [0xa910, 0xa910], /* KAYAH LI LETTER ZA */ + [0xa911, 0xa911], /* KAYAH LI LETTER NYA */ + [0xa912, 0xa912], /* KAYAH LI LETTER TA */ + [0xa913, 0xa913], /* KAYAH LI LETTER HTA */ + [0xa914, 0xa914], /* KAYAH LI LETTER NA */ + [0xa915, 0xa915], /* KAYAH LI LETTER PA */ + [0xa916, 0xa916], /* KAYAH LI LETTER PHA */ + [0xa917, 0xa917], /* KAYAH LI LETTER MA */ + [0xa918, 0xa918], /* KAYAH LI LETTER DA */ + [0xa919, 0xa919], /* KAYAH LI LETTER BA */ + [0xa91a, 0xa91a], /* KAYAH LI LETTER RA */ + [0xa91b, 0xa91b], /* KAYAH LI LETTER YA */ + [0xa91c, 0xa91c], /* KAYAH LI LETTER LA */ + [0xa91d, 0xa91d], /* KAYAH LI LETTER WA */ + [0xa91e, 0xa91e], /* KAYAH LI LETTER THA */ + [0xa91f, 0xa91f], /* KAYAH LI LETTER HA */ + [0xa920, 0xa920], /* KAYAH LI LETTER VA */ + [0xa921, 0xa921], /* KAYAH LI LETTER CA */ + [0xa922, 0xa922], /* KAYAH LI LETTER A */ + [0xa923, 0xa923], /* KAYAH LI LETTER OE */ + [0xa924, 0xa924], /* KAYAH LI LETTER I */ + [0xa925, 0xa925], /* KAYAH LI LETTER OO */ + [0xa926, 0xa926], /* KAYAH LI VOWEL UE */ + [0xa927, 0xa927], /* KAYAH LI VOWEL E */ + [0xa928, 0xa928], /* KAYAH LI VOWEL U */ + [0xa929, 0xa929], /* KAYAH LI VOWEL EE */ + [0xa92a, 0xa92a], /* KAYAH LI VOWEL O */ + [0xa92b, 0xa92b], /* KAYAH LI TONE PLOPHU */ + [0xa92c, 0xa92c], /* KAYAH LI TONE CALYA */ + [0xa92d, 0xa92d], /* KAYAH LI TONE CALYA PLOPHU */ + [0xa92e, 0xa92e], /* KAYAH LI SIGN CWI */ + [0xa92f, 0xa92f], /* KAYAH LI SIGN SHYA */ + [0xa930, 0xa930], /* REJANG LETTER KA */ + [0xa931, 0xa931], /* REJANG LETTER GA */ + [0xa932, 0xa932], /* REJANG LETTER NGA */ + [0xa933, 0xa933], /* REJANG LETTER TA */ + [0xa934, 0xa934], /* REJANG LETTER DA */ + [0xa935, 0xa935], /* REJANG LETTER NA */ + [0xa936, 0xa936], /* REJANG LETTER PA */ + [0xa937, 0xa937], /* REJANG LETTER BA */ + [0xa938, 0xa938], /* REJANG LETTER MA */ + [0xa939, 0xa939], /* REJANG LETTER CA */ + [0xa93a, 0xa93a], /* REJANG LETTER JA */ + [0xa93b, 0xa93b], /* REJANG LETTER NYA */ + [0xa93c, 0xa93c], /* REJANG LETTER SA */ + [0xa93d, 0xa93d], /* REJANG LETTER RA */ + [0xa93e, 0xa93e], /* REJANG LETTER LA */ + [0xa93f, 0xa93f], /* REJANG LETTER YA */ + [0xa940, 0xa940], /* REJANG LETTER WA */ + [0xa941, 0xa941], /* REJANG LETTER HA */ + [0xa942, 0xa942], /* REJANG LETTER MBA */ + [0xa943, 0xa943], /* REJANG LETTER NGGA */ + [0xa944, 0xa944], /* REJANG LETTER NDA */ + [0xa945, 0xa945], /* REJANG LETTER NYJA */ + [0xa946, 0xa946], /* REJANG LETTER A */ + [0xa947, 0xa947], /* REJANG VOWEL SIGN I */ + [0xa948, 0xa948], /* REJANG VOWEL SIGN U */ + [0xa949, 0xa949], /* REJANG VOWEL SIGN E */ + [0xa94a, 0xa94a], /* REJANG VOWEL SIGN AI */ + [0xa94b, 0xa94b], /* REJANG VOWEL SIGN O */ + [0xa94c, 0xa94c], /* REJANG VOWEL SIGN AU */ + [0xa94d, 0xa94d], /* REJANG VOWEL SIGN EU */ + [0xa94e, 0xa94e], /* REJANG VOWEL SIGN EA */ + [0xa94f, 0xa94f], /* REJANG CONSONANT SIGN NG */ + [0xa950, 0xa950], /* REJANG CONSONANT SIGN N */ + [0xa951, 0xa951], /* REJANG CONSONANT SIGN R */ + [0xa952, 0xa952], /* REJANG CONSONANT SIGN H */ + [0xa953, 0xa953], /* REJANG VIRAMA */ + [0xa954, 0xa954], + [0xa955, 0xa955], + [0xa956, 0xa956], + [0xa957, 0xa957], + [0xa958, 0xa958], + [0xa959, 0xa959], + [0xa95a, 0xa95a], + [0xa95b, 0xa95b], + [0xa95c, 0xa95c], + [0xa95d, 0xa95d], + [0xa95e, 0xa95e], + [0xa95f, 0xa95f], /* REJANG SECTION MARK */ + [0xa960, 0xa960], /* HANGUL CHOSEONG TIKEUT-MIEUM */ + [0xa961, 0xa961], /* HANGUL CHOSEONG TIKEUT-PIEUP */ + [0xa962, 0xa962], /* HANGUL CHOSEONG TIKEUT-SIOS */ + [0xa963, 0xa963], /* HANGUL CHOSEONG TIKEUT-CIEUC */ + [0xa964, 0xa964], /* HANGUL CHOSEONG RIEUL-KIYEOK */ + [0xa965, 0xa965], /* HANGUL CHOSEONG RIEUL-SSANGKIYEOK */ + [0xa966, 0xa966], /* HANGUL CHOSEONG RIEUL-TIKEUT */ + [0xa967, 0xa967], /* HANGUL CHOSEONG RIEUL-SSANGTIKEUT */ + [0xa968, 0xa968], /* HANGUL CHOSEONG RIEUL-MIEUM */ + [0xa969, 0xa969], /* HANGUL CHOSEONG RIEUL-PIEUP */ + [0xa96a, 0xa96a], /* HANGUL CHOSEONG RIEUL-SSANGPIEUP */ + [0xa96b, 0xa96b], /* HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP */ + [0xa96c, 0xa96c], /* HANGUL CHOSEONG RIEUL-SIOS */ + [0xa96d, 0xa96d], /* HANGUL CHOSEONG RIEUL-CIEUC */ + [0xa96e, 0xa96e], /* HANGUL CHOSEONG RIEUL-KHIEUKH */ + [0xa96f, 0xa96f], /* HANGUL CHOSEONG MIEUM-KIYEOK */ + [0xa970, 0xa970], /* HANGUL CHOSEONG MIEUM-TIKEUT */ + [0xa971, 0xa971], /* HANGUL CHOSEONG MIEUM-SIOS */ + [0xa972, 0xa972], /* HANGUL CHOSEONG PIEUP-SIOS-THIEUTH */ + [0xa973, 0xa973], /* HANGUL CHOSEONG PIEUP-KHIEUKH */ + [0xa974, 0xa974], /* HANGUL CHOSEONG PIEUP-HIEUH */ + [0xa975, 0xa975], /* HANGUL CHOSEONG SSANGSIOS-PIEUP */ + [0xa976, 0xa976], /* HANGUL CHOSEONG IEUNG-RIEUL */ + [0xa977, 0xa977], /* HANGUL CHOSEONG IEUNG-HIEUH */ + [0xa978, 0xa978], /* HANGUL CHOSEONG SSANGCIEUC-HIEUH */ + [0xa979, 0xa979], /* HANGUL CHOSEONG SSANGTHIEUTH */ + [0xa97a, 0xa97a], /* HANGUL CHOSEONG PHIEUPH-HIEUH */ + [0xa97b, 0xa97b], /* HANGUL CHOSEONG HIEUH-SIOS */ + [0xa97c, 0xa97c], /* HANGUL CHOSEONG SSANGYEORINHIEUH */ + [0xa97d, 0xa97d], + [0xa97e, 0xa97e], + [0xa97f, 0xa97f], + [0xa980, 0xa980], /* JAVANESE SIGN PANYANGGA */ + [0xa981, 0xa981], /* JAVANESE SIGN CECAK */ + [0xa982, 0xa982], /* JAVANESE SIGN LAYAR */ + [0xa983, 0xa983], /* JAVANESE SIGN WIGNYAN */ + [0xa984, 0xa984], /* JAVANESE LETTER A */ + [0xa985, 0xa985], /* JAVANESE LETTER I KAWI */ + [0xa986, 0xa986], /* JAVANESE LETTER I */ + [0xa987, 0xa987], /* JAVANESE LETTER II */ + [0xa988, 0xa988], /* JAVANESE LETTER U */ + [0xa989, 0xa989], /* JAVANESE LETTER PA CEREK */ + [0xa98a, 0xa98a], /* JAVANESE LETTER NGA LELET */ + [0xa98b, 0xa98b], /* JAVANESE LETTER NGA LELET RASWADI */ + [0xa98c, 0xa98c], /* JAVANESE LETTER E */ + [0xa98d, 0xa98d], /* JAVANESE LETTER AI */ + [0xa98e, 0xa98e], /* JAVANESE LETTER O */ + [0xa98f, 0xa98f], /* JAVANESE LETTER KA */ + [0xa990, 0xa990], /* JAVANESE LETTER KA SASAK */ + [0xa991, 0xa991], /* JAVANESE LETTER KA MURDA */ + [0xa992, 0xa992], /* JAVANESE LETTER GA */ + [0xa993, 0xa993], /* JAVANESE LETTER GA MURDA */ + [0xa994, 0xa994], /* JAVANESE LETTER NGA */ + [0xa995, 0xa995], /* JAVANESE LETTER CA */ + [0xa996, 0xa996], /* JAVANESE LETTER CA MURDA */ + [0xa997, 0xa997], /* JAVANESE LETTER JA */ + [0xa998, 0xa998], /* JAVANESE LETTER NYA MURDA */ + [0xa999, 0xa999], /* JAVANESE LETTER JA MAHAPRANA */ + [0xa99a, 0xa99a], /* JAVANESE LETTER NYA */ + [0xa99b, 0xa99b], /* JAVANESE LETTER TTA */ + [0xa99c, 0xa99c], /* JAVANESE LETTER TTA MAHAPRANA */ + [0xa99d, 0xa99d], /* JAVANESE LETTER DDA */ + [0xa99e, 0xa99e], /* JAVANESE LETTER DDA MAHAPRANA */ + [0xa99f, 0xa99f], /* JAVANESE LETTER NA MURDA */ + [0xa9a0, 0xa9a0], /* JAVANESE LETTER TA */ + [0xa9a1, 0xa9a1], /* JAVANESE LETTER TA MURDA */ + [0xa9a2, 0xa9a2], /* JAVANESE LETTER DA */ + [0xa9a3, 0xa9a3], /* JAVANESE LETTER DA MAHAPRANA */ + [0xa9a4, 0xa9a4], /* JAVANESE LETTER NA */ + [0xa9a5, 0xa9a5], /* JAVANESE LETTER PA */ + [0xa9a6, 0xa9a6], /* JAVANESE LETTER PA MURDA */ + [0xa9a7, 0xa9a7], /* JAVANESE LETTER BA */ + [0xa9a8, 0xa9a8], /* JAVANESE LETTER BA MURDA */ + [0xa9a9, 0xa9a9], /* JAVANESE LETTER MA */ + [0xa9aa, 0xa9aa], /* JAVANESE LETTER YA */ + [0xa9ab, 0xa9ab], /* JAVANESE LETTER RA */ + [0xa9ac, 0xa9ac], /* JAVANESE LETTER RA AGUNG */ + [0xa9ad, 0xa9ad], /* JAVANESE LETTER LA */ + [0xa9ae, 0xa9ae], /* JAVANESE LETTER WA */ + [0xa9af, 0xa9af], /* JAVANESE LETTER SA MURDA */ + [0xa9b0, 0xa9b0], /* JAVANESE LETTER SA MAHAPRANA */ + [0xa9b1, 0xa9b1], /* JAVANESE LETTER SA */ + [0xa9b2, 0xa9b2], /* JAVANESE LETTER HA */ + [0xa9b3, 0xa9b3], /* JAVANESE SIGN CECAK TELU */ + [0xa9b4, 0xa9b4], /* JAVANESE VOWEL SIGN TARUNG */ + [0xa9b5, 0xa9b5], /* JAVANESE VOWEL SIGN TOLONG */ + [0xa9b6, 0xa9b6], /* JAVANESE VOWEL SIGN WULU */ + [0xa9b7, 0xa9b7], /* JAVANESE VOWEL SIGN WULU MELIK */ + [0xa9b8, 0xa9b8], /* JAVANESE VOWEL SIGN SUKU */ + [0xa9b9, 0xa9b9], /* JAVANESE VOWEL SIGN SUKU MENDUT */ + [0xa9ba, 0xa9ba], /* JAVANESE VOWEL SIGN TALING */ + [0xa9bb, 0xa9bb], /* JAVANESE VOWEL SIGN DIRGA MURE */ + [0xa9bc, 0xa9bc], /* JAVANESE VOWEL SIGN PEPET */ + [0xa9bd, 0xa9bd], /* JAVANESE CONSONANT SIGN KERET */ + [0xa9be, 0xa9be], /* JAVANESE CONSONANT SIGN PENGKAL */ + [0xa9bf, 0xa9bf], /* JAVANESE CONSONANT SIGN CAKRA */ + [0xa9c0, 0xa9c0], /* JAVANESE PANGKON */ + [0xa9c1, 0xa9c1], /* JAVANESE LEFT RERENGGAN */ + [0xa9c2, 0xa9c2], /* JAVANESE RIGHT RERENGGAN */ + [0xa9c3, 0xa9c3], /* JAVANESE PADA ANDAP */ + [0xa9c4, 0xa9c4], /* JAVANESE PADA MADYA */ + [0xa9c5, 0xa9c5], /* JAVANESE PADA LUHUR */ + [0xa9c6, 0xa9c6], /* JAVANESE PADA WINDU */ + [0xa9c7, 0xa9c7], /* JAVANESE PADA PANGKAT */ + [0xa9c8, 0xa9c8], /* JAVANESE PADA LINGSA */ + [0xa9c9, 0xa9c9], /* JAVANESE PADA LUNGSI */ + [0xa9ca, 0xa9ca], /* JAVANESE PADA ADEG */ + [0xa9cb, 0xa9cb], /* JAVANESE PADA ADEG ADEG */ + [0xa9cc, 0xa9cc], /* JAVANESE PADA PISELEH */ + [0xa9cd, 0xa9cd], /* JAVANESE TURNED PADA PISELEH */ + [0xa9ce, 0xa9ce], + [0xa9cf, 0xa9cf], /* JAVANESE PANGRANGKEP */ + [0xa9d0, 0xa9d0], /* JAVANESE DIGIT ZERO */ + [0xa9d1, 0xa9d1], /* JAVANESE DIGIT ONE */ + [0xa9d2, 0xa9d2], /* JAVANESE DIGIT TWO */ + [0xa9d3, 0xa9d3], /* JAVANESE DIGIT THREE */ + [0xa9d4, 0xa9d4], /* JAVANESE DIGIT FOUR */ + [0xa9d5, 0xa9d5], /* JAVANESE DIGIT FIVE */ + [0xa9d6, 0xa9d6], /* JAVANESE DIGIT SIX */ + [0xa9d7, 0xa9d7], /* JAVANESE DIGIT SEVEN */ + [0xa9d8, 0xa9d8], /* JAVANESE DIGIT EIGHT */ + [0xa9d9, 0xa9d9], /* JAVANESE DIGIT NINE */ + [0xa9da, 0xa9da], + [0xa9db, 0xa9db], + [0xa9dc, 0xa9dc], + [0xa9dd, 0xa9dd], + [0xa9de, 0xa9de], /* JAVANESE PADA TIRTA TUMETES */ + [0xa9df, 0xa9df], /* JAVANESE PADA ISEN-ISEN */ + [0xa9e0, 0xa9e0], + [0xa9e1, 0xa9e1], + [0xa9e2, 0xa9e2], + [0xa9e3, 0xa9e3], + [0xa9e4, 0xa9e4], + [0xa9e5, 0xa9e5], + [0xa9e6, 0xa9e6], + [0xa9e7, 0xa9e7], + [0xa9e8, 0xa9e8], + [0xa9e9, 0xa9e9], + [0xa9ea, 0xa9ea], + [0xa9eb, 0xa9eb], + [0xa9ec, 0xa9ec], + [0xa9ed, 0xa9ed], + [0xa9ee, 0xa9ee], + [0xa9ef, 0xa9ef], + [0xa9f0, 0xa9f0], + [0xa9f1, 0xa9f1], + [0xa9f2, 0xa9f2], + [0xa9f3, 0xa9f3], + [0xa9f4, 0xa9f4], + [0xa9f5, 0xa9f5], + [0xa9f6, 0xa9f6], + [0xa9f7, 0xa9f7], + [0xa9f8, 0xa9f8], + [0xa9f9, 0xa9f9], + [0xa9fa, 0xa9fa], + [0xa9fb, 0xa9fb], + [0xa9fc, 0xa9fc], + [0xa9fd, 0xa9fd], + [0xa9fe, 0xa9fe], + [0xa9ff, 0xa9ff], + [0xaa00, 0xaa00], /* CHAM LETTER A */ + [0xaa01, 0xaa01], /* CHAM LETTER I */ + [0xaa02, 0xaa02], /* CHAM LETTER U */ + [0xaa03, 0xaa03], /* CHAM LETTER E */ + [0xaa04, 0xaa04], /* CHAM LETTER AI */ + [0xaa05, 0xaa05], /* CHAM LETTER O */ + [0xaa06, 0xaa06], /* CHAM LETTER KA */ + [0xaa07, 0xaa07], /* CHAM LETTER KHA */ + [0xaa08, 0xaa08], /* CHAM LETTER GA */ + [0xaa09, 0xaa09], /* CHAM LETTER GHA */ + [0xaa0a, 0xaa0a], /* CHAM LETTER NGUE */ + [0xaa0b, 0xaa0b], /* CHAM LETTER NGA */ + [0xaa0c, 0xaa0c], /* CHAM LETTER CHA */ + [0xaa0d, 0xaa0d], /* CHAM LETTER CHHA */ + [0xaa0e, 0xaa0e], /* CHAM LETTER JA */ + [0xaa0f, 0xaa0f], /* CHAM LETTER JHA */ + [0xaa10, 0xaa10], /* CHAM LETTER NHUE */ + [0xaa11, 0xaa11], /* CHAM LETTER NHA */ + [0xaa12, 0xaa12], /* CHAM LETTER NHJA */ + [0xaa13, 0xaa13], /* CHAM LETTER TA */ + [0xaa14, 0xaa14], /* CHAM LETTER THA */ + [0xaa15, 0xaa15], /* CHAM LETTER DA */ + [0xaa16, 0xaa16], /* CHAM LETTER DHA */ + [0xaa17, 0xaa17], /* CHAM LETTER NUE */ + [0xaa18, 0xaa18], /* CHAM LETTER NA */ + [0xaa19, 0xaa19], /* CHAM LETTER DDA */ + [0xaa1a, 0xaa1a], /* CHAM LETTER PA */ + [0xaa1b, 0xaa1b], /* CHAM LETTER PPA */ + [0xaa1c, 0xaa1c], /* CHAM LETTER PHA */ + [0xaa1d, 0xaa1d], /* CHAM LETTER BA */ + [0xaa1e, 0xaa1e], /* CHAM LETTER BHA */ + [0xaa1f, 0xaa1f], /* CHAM LETTER MUE */ + [0xaa20, 0xaa20], /* CHAM LETTER MA */ + [0xaa21, 0xaa21], /* CHAM LETTER BBA */ + [0xaa22, 0xaa22], /* CHAM LETTER YA */ + [0xaa23, 0xaa23], /* CHAM LETTER RA */ + [0xaa24, 0xaa24], /* CHAM LETTER LA */ + [0xaa25, 0xaa25], /* CHAM LETTER VA */ + [0xaa26, 0xaa26], /* CHAM LETTER SSA */ + [0xaa27, 0xaa27], /* CHAM LETTER SA */ + [0xaa28, 0xaa28], /* CHAM LETTER HA */ + [0xaa29, 0xaa29], /* CHAM VOWEL SIGN AA */ + [0xaa2a, 0xaa2a], /* CHAM VOWEL SIGN I */ + [0xaa2b, 0xaa2b], /* CHAM VOWEL SIGN II */ + [0xaa2c, 0xaa2c], /* CHAM VOWEL SIGN EI */ + [0xaa2d, 0xaa2d], /* CHAM VOWEL SIGN U */ + [0xaa2e, 0xaa2e], /* CHAM VOWEL SIGN OE */ + [0xaa2f, 0xaa2f], /* CHAM VOWEL SIGN O */ + [0xaa30, 0xaa30], /* CHAM VOWEL SIGN AI */ + [0xaa31, 0xaa31], /* CHAM VOWEL SIGN AU */ + [0xaa32, 0xaa32], /* CHAM VOWEL SIGN UE */ + [0xaa33, 0xaa33], /* CHAM CONSONANT SIGN YA */ + [0xaa34, 0xaa34], /* CHAM CONSONANT SIGN RA */ + [0xaa35, 0xaa35], /* CHAM CONSONANT SIGN LA */ + [0xaa36, 0xaa36], /* CHAM CONSONANT SIGN WA */ + [0xaa37, 0xaa37], + [0xaa38, 0xaa38], + [0xaa39, 0xaa39], + [0xaa3a, 0xaa3a], + [0xaa3b, 0xaa3b], + [0xaa3c, 0xaa3c], + [0xaa3d, 0xaa3d], + [0xaa3e, 0xaa3e], + [0xaa3f, 0xaa3f], + [0xaa40, 0xaa40], /* CHAM LETTER FINAL K */ + [0xaa41, 0xaa41], /* CHAM LETTER FINAL G */ + [0xaa42, 0xaa42], /* CHAM LETTER FINAL NG */ + [0xaa43, 0xaa43], /* CHAM CONSONANT SIGN FINAL NG */ + [0xaa44, 0xaa44], /* CHAM LETTER FINAL CH */ + [0xaa45, 0xaa45], /* CHAM LETTER FINAL T */ + [0xaa46, 0xaa46], /* CHAM LETTER FINAL N */ + [0xaa47, 0xaa47], /* CHAM LETTER FINAL P */ + [0xaa48, 0xaa48], /* CHAM LETTER FINAL Y */ + [0xaa49, 0xaa49], /* CHAM LETTER FINAL R */ + [0xaa4a, 0xaa4a], /* CHAM LETTER FINAL L */ + [0xaa4b, 0xaa4b], /* CHAM LETTER FINAL SS */ + [0xaa4c, 0xaa4c], /* CHAM CONSONANT SIGN FINAL M */ + [0xaa4d, 0xaa4d], /* CHAM CONSONANT SIGN FINAL H */ + [0xaa4e, 0xaa4e], + [0xaa4f, 0xaa4f], + [0xaa50, 0xaa50], /* CHAM DIGIT ZERO */ + [0xaa51, 0xaa51], /* CHAM DIGIT ONE */ + [0xaa52, 0xaa52], /* CHAM DIGIT TWO */ + [0xaa53, 0xaa53], /* CHAM DIGIT THREE */ + [0xaa54, 0xaa54], /* CHAM DIGIT FOUR */ + [0xaa55, 0xaa55], /* CHAM DIGIT FIVE */ + [0xaa56, 0xaa56], /* CHAM DIGIT SIX */ + [0xaa57, 0xaa57], /* CHAM DIGIT SEVEN */ + [0xaa58, 0xaa58], /* CHAM DIGIT EIGHT */ + [0xaa59, 0xaa59], /* CHAM DIGIT NINE */ + [0xaa5a, 0xaa5a], + [0xaa5b, 0xaa5b], + [0xaa5c, 0xaa5c], /* CHAM PUNCTUATION SPIRAL */ + [0xaa5d, 0xaa5d], /* CHAM PUNCTUATION DANDA */ + [0xaa5e, 0xaa5e], /* CHAM PUNCTUATION DOUBLE DANDA */ + [0xaa5f, 0xaa5f], /* CHAM PUNCTUATION TRIPLE DANDA */ + [0xaa60, 0xaa60], /* MYANMAR LETTER KHAMTI GA */ + [0xaa61, 0xaa61], /* MYANMAR LETTER KHAMTI CA */ + [0xaa62, 0xaa62], /* MYANMAR LETTER KHAMTI CHA */ + [0xaa63, 0xaa63], /* MYANMAR LETTER KHAMTI JA */ + [0xaa64, 0xaa64], /* MYANMAR LETTER KHAMTI JHA */ + [0xaa65, 0xaa65], /* MYANMAR LETTER KHAMTI NYA */ + [0xaa66, 0xaa66], /* MYANMAR LETTER KHAMTI TTA */ + [0xaa67, 0xaa67], /* MYANMAR LETTER KHAMTI TTHA */ + [0xaa68, 0xaa68], /* MYANMAR LETTER KHAMTI DDA */ + [0xaa69, 0xaa69], /* MYANMAR LETTER KHAMTI DDHA */ + [0xaa6a, 0xaa6a], /* MYANMAR LETTER KHAMTI DHA */ + [0xaa6b, 0xaa6b], /* MYANMAR LETTER KHAMTI NA */ + [0xaa6c, 0xaa6c], /* MYANMAR LETTER KHAMTI SA */ + [0xaa6d, 0xaa6d], /* MYANMAR LETTER KHAMTI HA */ + [0xaa6e, 0xaa6e], /* MYANMAR LETTER KHAMTI HHA */ + [0xaa6f, 0xaa6f], /* MYANMAR LETTER KHAMTI FA */ + [0xaa70, 0xaa70], /* MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION */ + [0xaa71, 0xaa71], /* MYANMAR LETTER KHAMTI XA */ + [0xaa72, 0xaa72], /* MYANMAR LETTER KHAMTI ZA */ + [0xaa73, 0xaa73], /* MYANMAR LETTER KHAMTI RA */ + [0xaa74, 0xaa74], /* MYANMAR LOGOGRAM KHAMTI OAY */ + [0xaa75, 0xaa75], /* MYANMAR LOGOGRAM KHAMTI QN */ + [0xaa76, 0xaa76], /* MYANMAR LOGOGRAM KHAMTI HM */ + [0xaa77, 0xaa77], /* MYANMAR SYMBOL AITON EXCLAMATION */ + [0xaa78, 0xaa78], /* MYANMAR SYMBOL AITON ONE */ + [0xaa79, 0xaa79], /* MYANMAR SYMBOL AITON TWO */ + [0xaa7a, 0xaa7a], /* MYANMAR LETTER AITON RA */ + [0xaa7b, 0xaa7b], /* MYANMAR SIGN PAO KAREN TONE */ + [0xaa7c, 0xaa7c], + [0xaa7d, 0xaa7d], + [0xaa7e, 0xaa7e], + [0xaa7f, 0xaa7f], + [0xaa80, 0xaa80], /* TAI VIET LETTER LOW KO */ + [0xaa81, 0xaa81], /* TAI VIET LETTER HIGH KO */ + [0xaa82, 0xaa82], /* TAI VIET LETTER LOW KHO */ + [0xaa83, 0xaa83], /* TAI VIET LETTER HIGH KHO */ + [0xaa84, 0xaa84], /* TAI VIET LETTER LOW KHHO */ + [0xaa85, 0xaa85], /* TAI VIET LETTER HIGH KHHO */ + [0xaa86, 0xaa86], /* TAI VIET LETTER LOW GO */ + [0xaa87, 0xaa87], /* TAI VIET LETTER HIGH GO */ + [0xaa88, 0xaa88], /* TAI VIET LETTER LOW NGO */ + [0xaa89, 0xaa89], /* TAI VIET LETTER HIGH NGO */ + [0xaa8a, 0xaa8a], /* TAI VIET LETTER LOW CO */ + [0xaa8b, 0xaa8b], /* TAI VIET LETTER HIGH CO */ + [0xaa8c, 0xaa8c], /* TAI VIET LETTER LOW CHO */ + [0xaa8d, 0xaa8d], /* TAI VIET LETTER HIGH CHO */ + [0xaa8e, 0xaa8e], /* TAI VIET LETTER LOW SO */ + [0xaa8f, 0xaa8f], /* TAI VIET LETTER HIGH SO */ + [0xaa90, 0xaa90], /* TAI VIET LETTER LOW NYO */ + [0xaa91, 0xaa91], /* TAI VIET LETTER HIGH NYO */ + [0xaa92, 0xaa92], /* TAI VIET LETTER LOW DO */ + [0xaa93, 0xaa93], /* TAI VIET LETTER HIGH DO */ + [0xaa94, 0xaa94], /* TAI VIET LETTER LOW TO */ + [0xaa95, 0xaa95], /* TAI VIET LETTER HIGH TO */ + [0xaa96, 0xaa96], /* TAI VIET LETTER LOW THO */ + [0xaa97, 0xaa97], /* TAI VIET LETTER HIGH THO */ + [0xaa98, 0xaa98], /* TAI VIET LETTER LOW NO */ + [0xaa99, 0xaa99], /* TAI VIET LETTER HIGH NO */ + [0xaa9a, 0xaa9a], /* TAI VIET LETTER LOW BO */ + [0xaa9b, 0xaa9b], /* TAI VIET LETTER HIGH BO */ + [0xaa9c, 0xaa9c], /* TAI VIET LETTER LOW PO */ + [0xaa9d, 0xaa9d], /* TAI VIET LETTER HIGH PO */ + [0xaa9e, 0xaa9e], /* TAI VIET LETTER LOW PHO */ + [0xaa9f, 0xaa9f], /* TAI VIET LETTER HIGH PHO */ + [0xaaa0, 0xaaa0], /* TAI VIET LETTER LOW FO */ + [0xaaa1, 0xaaa1], /* TAI VIET LETTER HIGH FO */ + [0xaaa2, 0xaaa2], /* TAI VIET LETTER LOW MO */ + [0xaaa3, 0xaaa3], /* TAI VIET LETTER HIGH MO */ + [0xaaa4, 0xaaa4], /* TAI VIET LETTER LOW YO */ + [0xaaa5, 0xaaa5], /* TAI VIET LETTER HIGH YO */ + [0xaaa6, 0xaaa6], /* TAI VIET LETTER LOW RO */ + [0xaaa7, 0xaaa7], /* TAI VIET LETTER HIGH RO */ + [0xaaa8, 0xaaa8], /* TAI VIET LETTER LOW LO */ + [0xaaa9, 0xaaa9], /* TAI VIET LETTER HIGH LO */ + [0xaaaa, 0xaaaa], /* TAI VIET LETTER LOW VO */ + [0xaaab, 0xaaab], /* TAI VIET LETTER HIGH VO */ + [0xaaac, 0xaaac], /* TAI VIET LETTER LOW HO */ + [0xaaad, 0xaaad], /* TAI VIET LETTER HIGH HO */ + [0xaaae, 0xaaae], /* TAI VIET LETTER LOW O */ + [0xaaaf, 0xaaaf], /* TAI VIET LETTER HIGH O */ + [0xaab0, 0xaab0], /* TAI VIET MAI KANG */ + [0xaab1, 0xaab1], /* TAI VIET VOWEL AA */ + [0xaab2, 0xaab2], /* TAI VIET VOWEL I */ + [0xaab3, 0xaab3], /* TAI VIET VOWEL UE */ + [0xaab4, 0xaab4], /* TAI VIET VOWEL U */ + [0xaab5, 0xaab5], /* TAI VIET VOWEL E */ + [0xaab6, 0xaab6], /* TAI VIET VOWEL O */ + [0xaab7, 0xaab7], /* TAI VIET MAI KHIT */ + [0xaab8, 0xaab8], /* TAI VIET VOWEL IA */ + [0xaab9, 0xaab9], /* TAI VIET VOWEL UEA */ + [0xaaba, 0xaaba], /* TAI VIET VOWEL UA */ + [0xaabb, 0xaabb], /* TAI VIET VOWEL AUE */ + [0xaabc, 0xaabc], /* TAI VIET VOWEL AY */ + [0xaabd, 0xaabd], /* TAI VIET VOWEL AN */ + [0xaabe, 0xaabe], /* TAI VIET VOWEL AM */ + [0xaabf, 0xaabf], /* TAI VIET TONE MAI EK */ + [0xaac0, 0xaac0], /* TAI VIET TONE MAI NUENG */ + [0xaac1, 0xaac1], /* TAI VIET TONE MAI THO */ + [0xaac2, 0xaac2], /* TAI VIET TONE MAI SONG */ + [0xaac3, 0xaac3], + [0xaac4, 0xaac4], + [0xaac5, 0xaac5], + [0xaac6, 0xaac6], + [0xaac7, 0xaac7], + [0xaac8, 0xaac8], + [0xaac9, 0xaac9], + [0xaaca, 0xaaca], + [0xaacb, 0xaacb], + [0xaacc, 0xaacc], + [0xaacd, 0xaacd], + [0xaace, 0xaace], + [0xaacf, 0xaacf], + [0xaad0, 0xaad0], + [0xaad1, 0xaad1], + [0xaad2, 0xaad2], + [0xaad3, 0xaad3], + [0xaad4, 0xaad4], + [0xaad5, 0xaad5], + [0xaad6, 0xaad6], + [0xaad7, 0xaad7], + [0xaad8, 0xaad8], + [0xaad9, 0xaad9], + [0xaada, 0xaada], + [0xaadb, 0xaadb], /* TAI VIET SYMBOL KON */ + [0xaadc, 0xaadc], /* TAI VIET SYMBOL NUENG */ + [0xaadd, 0xaadd], /* TAI VIET SYMBOL SAM */ + [0xaade, 0xaade], /* TAI VIET SYMBOL HO HOI */ + [0xaadf, 0xaadf], /* TAI VIET SYMBOL KOI KOI */ + [0xaae0, 0xaae0], /* MEETEI MAYEK LETTER E */ + [0xaae1, 0xaae1], /* MEETEI MAYEK LETTER O */ + [0xaae2, 0xaae2], /* MEETEI MAYEK LETTER CHA */ + [0xaae3, 0xaae3], /* MEETEI MAYEK LETTER NYA */ + [0xaae4, 0xaae4], /* MEETEI MAYEK LETTER TTA */ + [0xaae5, 0xaae5], /* MEETEI MAYEK LETTER TTHA */ + [0xaae6, 0xaae6], /* MEETEI MAYEK LETTER DDA */ + [0xaae7, 0xaae7], /* MEETEI MAYEK LETTER DDHA */ + [0xaae8, 0xaae8], /* MEETEI MAYEK LETTER NNA */ + [0xaae9, 0xaae9], /* MEETEI MAYEK LETTER SHA */ + [0xaaea, 0xaaea], /* MEETEI MAYEK LETTER SSA */ + [0xaaeb, 0xaaeb], /* MEETEI MAYEK VOWEL SIGN II */ + [0xaaec, 0xaaec], /* MEETEI MAYEK VOWEL SIGN UU */ + [0xaaed, 0xaaed], /* MEETEI MAYEK VOWEL SIGN AAI */ + [0xaaee, 0xaaee], /* MEETEI MAYEK VOWEL SIGN AU */ + [0xaaef, 0xaaef], /* MEETEI MAYEK VOWEL SIGN AAU */ + [0xaaf0, 0xaaf0], /* MEETEI MAYEK CHEIKHAN */ + [0xaaf1, 0xaaf1], /* MEETEI MAYEK AHANG KHUDAM */ + [0xaaf2, 0xaaf2], /* MEETEI MAYEK ANJI */ + [0xaaf3, 0xaaf3], /* MEETEI MAYEK SYLLABLE REPETITION MARK */ + [0xaaf4, 0xaaf4], /* MEETEI MAYEK WORD REPETITION MARK */ + [0xaaf5, 0xaaf5], /* MEETEI MAYEK VOWEL SIGN VISARGA */ + [0xaaf6, 0xaaf6], /* MEETEI MAYEK VIRAMA */ + [0xaaf7, 0xaaf7], + [0xaaf8, 0xaaf8], + [0xaaf9, 0xaaf9], + [0xaafa, 0xaafa], + [0xaafb, 0xaafb], + [0xaafc, 0xaafc], + [0xaafd, 0xaafd], + [0xaafe, 0xaafe], + [0xaaff, 0xaaff], + [0xab00, 0xab00], + [0xab01, 0xab01], /* ETHIOPIC SYLLABLE TTHU */ + [0xab02, 0xab02], /* ETHIOPIC SYLLABLE TTHI */ + [0xab03, 0xab03], /* ETHIOPIC SYLLABLE TTHAA */ + [0xab04, 0xab04], /* ETHIOPIC SYLLABLE TTHEE */ + [0xab05, 0xab05], /* ETHIOPIC SYLLABLE TTHE */ + [0xab06, 0xab06], /* ETHIOPIC SYLLABLE TTHO */ + [0xab07, 0xab07], + [0xab08, 0xab08], + [0xab09, 0xab09], /* ETHIOPIC SYLLABLE DDHU */ + [0xab0a, 0xab0a], /* ETHIOPIC SYLLABLE DDHI */ + [0xab0b, 0xab0b], /* ETHIOPIC SYLLABLE DDHAA */ + [0xab0c, 0xab0c], /* ETHIOPIC SYLLABLE DDHEE */ + [0xab0d, 0xab0d], /* ETHIOPIC SYLLABLE DDHE */ + [0xab0e, 0xab0e], /* ETHIOPIC SYLLABLE DDHO */ + [0xab0f, 0xab0f], + [0xab10, 0xab10], + [0xab11, 0xab11], /* ETHIOPIC SYLLABLE DZU */ + [0xab12, 0xab12], /* ETHIOPIC SYLLABLE DZI */ + [0xab13, 0xab13], /* ETHIOPIC SYLLABLE DZAA */ + [0xab14, 0xab14], /* ETHIOPIC SYLLABLE DZEE */ + [0xab15, 0xab15], /* ETHIOPIC SYLLABLE DZE */ + [0xab16, 0xab16], /* ETHIOPIC SYLLABLE DZO */ + [0xab17, 0xab17], + [0xab18, 0xab18], + [0xab19, 0xab19], + [0xab1a, 0xab1a], + [0xab1b, 0xab1b], + [0xab1c, 0xab1c], + [0xab1d, 0xab1d], + [0xab1e, 0xab1e], + [0xab1f, 0xab1f], + [0xab20, 0xab20], /* ETHIOPIC SYLLABLE CCHHA */ + [0xab21, 0xab21], /* ETHIOPIC SYLLABLE CCHHU */ + [0xab22, 0xab22], /* ETHIOPIC SYLLABLE CCHHI */ + [0xab23, 0xab23], /* ETHIOPIC SYLLABLE CCHHAA */ + [0xab24, 0xab24], /* ETHIOPIC SYLLABLE CCHHEE */ + [0xab25, 0xab25], /* ETHIOPIC SYLLABLE CCHHE */ + [0xab26, 0xab26], /* ETHIOPIC SYLLABLE CCHHO */ + [0xab27, 0xab27], + [0xab28, 0xab28], /* ETHIOPIC SYLLABLE BBA */ + [0xab29, 0xab29], /* ETHIOPIC SYLLABLE BBU */ + [0xab2a, 0xab2a], /* ETHIOPIC SYLLABLE BBI */ + [0xab2b, 0xab2b], /* ETHIOPIC SYLLABLE BBAA */ + [0xab2c, 0xab2c], /* ETHIOPIC SYLLABLE BBEE */ + [0xab2d, 0xab2d], /* ETHIOPIC SYLLABLE BBE */ + [0xab2e, 0xab2e], /* ETHIOPIC SYLLABLE BBO */ + [0xab2f, 0xab2f], + [0xab30, 0xab30], + [0xab31, 0xab31], + [0xab32, 0xab32], + [0xab33, 0xab33], + [0xab34, 0xab34], + [0xab35, 0xab35], + [0xab36, 0xab36], + [0xab37, 0xab37], + [0xab38, 0xab38], + [0xab39, 0xab39], + [0xab3a, 0xab3a], + [0xab3b, 0xab3b], + [0xab3c, 0xab3c], + [0xab3d, 0xab3d], + [0xab3e, 0xab3e], + [0xab3f, 0xab3f], + [0xab40, 0xab40], + [0xab41, 0xab41], + [0xab42, 0xab42], + [0xab43, 0xab43], + [0xab44, 0xab44], + [0xab45, 0xab45], + [0xab46, 0xab46], + [0xab47, 0xab47], + [0xab48, 0xab48], + [0xab49, 0xab49], + [0xab4a, 0xab4a], + [0xab4b, 0xab4b], + [0xab4c, 0xab4c], + [0xab4d, 0xab4d], + [0xab4e, 0xab4e], + [0xab4f, 0xab4f], + [0xab50, 0xab50], + [0xab51, 0xab51], + [0xab52, 0xab52], + [0xab53, 0xab53], + [0xab54, 0xab54], + [0xab55, 0xab55], + [0xab56, 0xab56], + [0xab57, 0xab57], + [0xab58, 0xab58], + [0xab59, 0xab59], + [0xab5a, 0xab5a], + [0xab5b, 0xab5b], + [0xab5c, 0xab5c], + [0xab5d, 0xab5d], + [0xab5e, 0xab5e], + [0xab5f, 0xab5f], + [0xab60, 0xab60], + [0xab61, 0xab61], + [0xab62, 0xab62], + [0xab63, 0xab63], + [0xab64, 0xab64], + [0xab65, 0xab65], + [0xab66, 0xab66], + [0xab67, 0xab67], + [0xab68, 0xab68], + [0xab69, 0xab69], + [0xab6a, 0xab6a], + [0xab6b, 0xab6b], + [0xab6c, 0xab6c], + [0xab6d, 0xab6d], + [0xab6e, 0xab6e], + [0xab6f, 0xab6f], + [0xab70, 0xab70], + [0xab71, 0xab71], + [0xab72, 0xab72], + [0xab73, 0xab73], + [0xab74, 0xab74], + [0xab75, 0xab75], + [0xab76, 0xab76], + [0xab77, 0xab77], + [0xab78, 0xab78], + [0xab79, 0xab79], + [0xab7a, 0xab7a], + [0xab7b, 0xab7b], + [0xab7c, 0xab7c], + [0xab7d, 0xab7d], + [0xab7e, 0xab7e], + [0xab7f, 0xab7f], + [0xab80, 0xab80], + [0xab81, 0xab81], + [0xab82, 0xab82], + [0xab83, 0xab83], + [0xab84, 0xab84], + [0xab85, 0xab85], + [0xab86, 0xab86], + [0xab87, 0xab87], + [0xab88, 0xab88], + [0xab89, 0xab89], + [0xab8a, 0xab8a], + [0xab8b, 0xab8b], + [0xab8c, 0xab8c], + [0xab8d, 0xab8d], + [0xab8e, 0xab8e], + [0xab8f, 0xab8f], + [0xab90, 0xab90], + [0xab91, 0xab91], + [0xab92, 0xab92], + [0xab93, 0xab93], + [0xab94, 0xab94], + [0xab95, 0xab95], + [0xab96, 0xab96], + [0xab97, 0xab97], + [0xab98, 0xab98], + [0xab99, 0xab99], + [0xab9a, 0xab9a], + [0xab9b, 0xab9b], + [0xab9c, 0xab9c], + [0xab9d, 0xab9d], + [0xab9e, 0xab9e], + [0xab9f, 0xab9f], + [0xaba0, 0xaba0], + [0xaba1, 0xaba1], + [0xaba2, 0xaba2], + [0xaba3, 0xaba3], + [0xaba4, 0xaba4], + [0xaba5, 0xaba5], + [0xaba6, 0xaba6], + [0xaba7, 0xaba7], + [0xaba8, 0xaba8], + [0xaba9, 0xaba9], + [0xabaa, 0xabaa], + [0xabab, 0xabab], + [0xabac, 0xabac], + [0xabad, 0xabad], + [0xabae, 0xabae], + [0xabaf, 0xabaf], + [0xabb0, 0xabb0], + [0xabb1, 0xabb1], + [0xabb2, 0xabb2], + [0xabb3, 0xabb3], + [0xabb4, 0xabb4], + [0xabb5, 0xabb5], + [0xabb6, 0xabb6], + [0xabb7, 0xabb7], + [0xabb8, 0xabb8], + [0xabb9, 0xabb9], + [0xabba, 0xabba], + [0xabbb, 0xabbb], + [0xabbc, 0xabbc], + [0xabbd, 0xabbd], + [0xabbe, 0xabbe], + [0xabbf, 0xabbf], + [0xabc0, 0xabc0], /* MEETEI MAYEK LETTER KOK */ + [0xabc1, 0xabc1], /* MEETEI MAYEK LETTER SAM */ + [0xabc2, 0xabc2], /* MEETEI MAYEK LETTER LAI */ + [0xabc3, 0xabc3], /* MEETEI MAYEK LETTER MIT */ + [0xabc4, 0xabc4], /* MEETEI MAYEK LETTER PA */ + [0xabc5, 0xabc5], /* MEETEI MAYEK LETTER NA */ + [0xabc6, 0xabc6], /* MEETEI MAYEK LETTER CHIL */ + [0xabc7, 0xabc7], /* MEETEI MAYEK LETTER TIL */ + [0xabc8, 0xabc8], /* MEETEI MAYEK LETTER KHOU */ + [0xabc9, 0xabc9], /* MEETEI MAYEK LETTER NGOU */ + [0xabca, 0xabca], /* MEETEI MAYEK LETTER THOU */ + [0xabcb, 0xabcb], /* MEETEI MAYEK LETTER WAI */ + [0xabcc, 0xabcc], /* MEETEI MAYEK LETTER YANG */ + [0xabcd, 0xabcd], /* MEETEI MAYEK LETTER HUK */ + [0xabce, 0xabce], /* MEETEI MAYEK LETTER UN */ + [0xabcf, 0xabcf], /* MEETEI MAYEK LETTER I */ + [0xabd0, 0xabd0], /* MEETEI MAYEK LETTER PHAM */ + [0xabd1, 0xabd1], /* MEETEI MAYEK LETTER ATIYA */ + [0xabd2, 0xabd2], /* MEETEI MAYEK LETTER GOK */ + [0xabd3, 0xabd3], /* MEETEI MAYEK LETTER JHAM */ + [0xabd4, 0xabd4], /* MEETEI MAYEK LETTER RAI */ + [0xabd5, 0xabd5], /* MEETEI MAYEK LETTER BA */ + [0xabd6, 0xabd6], /* MEETEI MAYEK LETTER JIL */ + [0xabd7, 0xabd7], /* MEETEI MAYEK LETTER DIL */ + [0xabd8, 0xabd8], /* MEETEI MAYEK LETTER GHOU */ + [0xabd9, 0xabd9], /* MEETEI MAYEK LETTER DHOU */ + [0xabda, 0xabda], /* MEETEI MAYEK LETTER BHAM */ + [0xabdb, 0xabdb], /* MEETEI MAYEK LETTER KOK LONSUM */ + [0xabdc, 0xabdc], /* MEETEI MAYEK LETTER LAI LONSUM */ + [0xabdd, 0xabdd], /* MEETEI MAYEK LETTER MIT LONSUM */ + [0xabde, 0xabde], /* MEETEI MAYEK LETTER PA LONSUM */ + [0xabdf, 0xabdf], /* MEETEI MAYEK LETTER NA LONSUM */ + [0xabe0, 0xabe0], /* MEETEI MAYEK LETTER TIL LONSUM */ + [0xabe1, 0xabe1], /* MEETEI MAYEK LETTER NGOU LONSUM */ + [0xabe2, 0xabe2], /* MEETEI MAYEK LETTER I LONSUM */ + [0xabe3, 0xabe3], /* MEETEI MAYEK VOWEL SIGN ONAP */ + [0xabe4, 0xabe4], /* MEETEI MAYEK VOWEL SIGN INAP */ + [0xabe5, 0xabe5], /* MEETEI MAYEK VOWEL SIGN ANAP */ + [0xabe6, 0xabe6], /* MEETEI MAYEK VOWEL SIGN YENAP */ + [0xabe7, 0xabe7], /* MEETEI MAYEK VOWEL SIGN SOUNAP */ + [0xabe8, 0xabe8], /* MEETEI MAYEK VOWEL SIGN UNAP */ + [0xabe9, 0xabe9], /* MEETEI MAYEK VOWEL SIGN CHEINAP */ + [0xabea, 0xabea], /* MEETEI MAYEK VOWEL SIGN NUNG */ + [0xabeb, 0xabeb], /* MEETEI MAYEK CHEIKHEI */ + [0xabec, 0xabec], /* MEETEI MAYEK LUM IYEK */ + [0xabed, 0xabed], /* MEETEI MAYEK APUN IYEK */ + [0xabee, 0xabee], + [0xabef, 0xabef], + [0xabf0, 0xabf0], /* MEETEI MAYEK DIGIT ZERO */ + [0xabf1, 0xabf1], /* MEETEI MAYEK DIGIT ONE */ + [0xabf2, 0xabf2], /* MEETEI MAYEK DIGIT TWO */ + [0xabf3, 0xabf3], /* MEETEI MAYEK DIGIT THREE */ + [0xabf4, 0xabf4], /* MEETEI MAYEK DIGIT FOUR */ + [0xabf5, 0xabf5], /* MEETEI MAYEK DIGIT FIVE */ + [0xabf6, 0xabf6], /* MEETEI MAYEK DIGIT SIX */ + [0xabf7, 0xabf7], /* MEETEI MAYEK DIGIT SEVEN */ + [0xabf8, 0xabf8], /* MEETEI MAYEK DIGIT EIGHT */ + [0xabf9, 0xabf9], /* MEETEI MAYEK DIGIT NINE */ + [0xabfa, 0xabfa], + [0xabfb, 0xabfb], + [0xabfc, 0xabfc], + [0xabfd, 0xabfd], + [0xabfe, 0xabfe], + [0xabff, 0xabff], + [0xac00, 0xac00], /* Hangul Syllable */ + [0xac01, 0xac01], /* Hangul Syllable */ + [0xac02, 0xac02], /* Hangul Syllable */ + [0xac03, 0xac03], /* Hangul Syllable */ + [0xac04, 0xac04], /* Hangul Syllable */ + [0xac05, 0xac05], /* Hangul Syllable */ + [0xac06, 0xac06], /* Hangul Syllable */ + [0xac07, 0xac07], /* Hangul Syllable */ + [0xac08, 0xac08], /* Hangul Syllable */ + [0xac09, 0xac09], /* Hangul Syllable */ + [0xac0a, 0xac0a], /* Hangul Syllable */ + [0xac0b, 0xac0b], /* Hangul Syllable */ + [0xac0c, 0xac0c], /* Hangul Syllable */ + [0xac0d, 0xac0d], /* Hangul Syllable */ + [0xac0e, 0xac0e], /* Hangul Syllable */ + [0xac0f, 0xac0f], /* Hangul Syllable */ + [0xac10, 0xac10], /* Hangul Syllable */ + [0xac11, 0xac11], /* Hangul Syllable */ + [0xac12, 0xac12], /* Hangul Syllable */ + [0xac13, 0xac13], /* Hangul Syllable */ + [0xac14, 0xac14], /* Hangul Syllable */ + [0xac15, 0xac15], /* Hangul Syllable */ + [0xac16, 0xac16], /* Hangul Syllable */ + [0xac17, 0xac17], /* Hangul Syllable */ + [0xac18, 0xac18], /* Hangul Syllable */ + [0xac19, 0xac19], /* Hangul Syllable */ + [0xac1a, 0xac1a], /* Hangul Syllable */ + [0xac1b, 0xac1b], /* Hangul Syllable */ + [0xac1c, 0xac1c], /* Hangul Syllable */ + [0xac1d, 0xac1d], /* Hangul Syllable */ + [0xac1e, 0xac1e], /* Hangul Syllable */ + [0xac1f, 0xac1f], /* Hangul Syllable */ + [0xac20, 0xac20], /* Hangul Syllable */ + [0xac21, 0xac21], /* Hangul Syllable */ + [0xac22, 0xac22], /* Hangul Syllable */ + [0xac23, 0xac23], /* Hangul Syllable */ + [0xac24, 0xac24], /* Hangul Syllable */ + [0xac25, 0xac25], /* Hangul Syllable */ + [0xac26, 0xac26], /* Hangul Syllable */ + [0xac27, 0xac27], /* Hangul Syllable */ + [0xac28, 0xac28], /* Hangul Syllable */ + [0xac29, 0xac29], /* Hangul Syllable */ + [0xac2a, 0xac2a], /* Hangul Syllable */ + [0xac2b, 0xac2b], /* Hangul Syllable */ + [0xac2c, 0xac2c], /* Hangul Syllable */ + [0xac2d, 0xac2d], /* Hangul Syllable */ + [0xac2e, 0xac2e], /* Hangul Syllable */ + [0xac2f, 0xac2f], /* Hangul Syllable */ + [0xac30, 0xac30], /* Hangul Syllable */ + [0xac31, 0xac31], /* Hangul Syllable */ + [0xac32, 0xac32], /* Hangul Syllable */ + [0xac33, 0xac33], /* Hangul Syllable */ + [0xac34, 0xac34], /* Hangul Syllable */ + [0xac35, 0xac35], /* Hangul Syllable */ + [0xac36, 0xac36], /* Hangul Syllable */ + [0xac37, 0xac37], /* Hangul Syllable */ + [0xac38, 0xac38], /* Hangul Syllable */ + [0xac39, 0xac39], /* Hangul Syllable */ + [0xac3a, 0xac3a], /* Hangul Syllable */ + [0xac3b, 0xac3b], /* Hangul Syllable */ + [0xac3c, 0xac3c], /* Hangul Syllable */ + [0xac3d, 0xac3d], /* Hangul Syllable */ + [0xac3e, 0xac3e], /* Hangul Syllable */ + [0xac3f, 0xac3f], /* Hangul Syllable */ + [0xac40, 0xac40], /* Hangul Syllable */ + [0xac41, 0xac41], /* Hangul Syllable */ + [0xac42, 0xac42], /* Hangul Syllable */ + [0xac43, 0xac43], /* Hangul Syllable */ + [0xac44, 0xac44], /* Hangul Syllable */ + [0xac45, 0xac45], /* Hangul Syllable */ + [0xac46, 0xac46], /* Hangul Syllable */ + [0xac47, 0xac47], /* Hangul Syllable */ + [0xac48, 0xac48], /* Hangul Syllable */ + [0xac49, 0xac49], /* Hangul Syllable */ + [0xac4a, 0xac4a], /* Hangul Syllable */ + [0xac4b, 0xac4b], /* Hangul Syllable */ + [0xac4c, 0xac4c], /* Hangul Syllable */ + [0xac4d, 0xac4d], /* Hangul Syllable */ + [0xac4e, 0xac4e], /* Hangul Syllable */ + [0xac4f, 0xac4f], /* Hangul Syllable */ + [0xac50, 0xac50], /* Hangul Syllable */ + [0xac51, 0xac51], /* Hangul Syllable */ + [0xac52, 0xac52], /* Hangul Syllable */ + [0xac53, 0xac53], /* Hangul Syllable */ + [0xac54, 0xac54], /* Hangul Syllable */ + [0xac55, 0xac55], /* Hangul Syllable */ + [0xac56, 0xac56], /* Hangul Syllable */ + [0xac57, 0xac57], /* Hangul Syllable */ + [0xac58, 0xac58], /* Hangul Syllable */ + [0xac59, 0xac59], /* Hangul Syllable */ + [0xac5a, 0xac5a], /* Hangul Syllable */ + [0xac5b, 0xac5b], /* Hangul Syllable */ + [0xac5c, 0xac5c], /* Hangul Syllable */ + [0xac5d, 0xac5d], /* Hangul Syllable */ + [0xac5e, 0xac5e], /* Hangul Syllable */ + [0xac5f, 0xac5f], /* Hangul Syllable */ + [0xac60, 0xac60], /* Hangul Syllable */ + [0xac61, 0xac61], /* Hangul Syllable */ + [0xac62, 0xac62], /* Hangul Syllable */ + [0xac63, 0xac63], /* Hangul Syllable */ + [0xac64, 0xac64], /* Hangul Syllable */ + [0xac65, 0xac65], /* Hangul Syllable */ + [0xac66, 0xac66], /* Hangul Syllable */ + [0xac67, 0xac67], /* Hangul Syllable */ + [0xac68, 0xac68], /* Hangul Syllable */ + [0xac69, 0xac69], /* Hangul Syllable */ + [0xac6a, 0xac6a], /* Hangul Syllable */ + [0xac6b, 0xac6b], /* Hangul Syllable */ + [0xac6c, 0xac6c], /* Hangul Syllable */ + [0xac6d, 0xac6d], /* Hangul Syllable */ + [0xac6e, 0xac6e], /* Hangul Syllable */ + [0xac6f, 0xac6f], /* Hangul Syllable */ + [0xac70, 0xac70], /* Hangul Syllable */ + [0xac71, 0xac71], /* Hangul Syllable */ + [0xac72, 0xac72], /* Hangul Syllable */ + [0xac73, 0xac73], /* Hangul Syllable */ + [0xac74, 0xac74], /* Hangul Syllable */ + [0xac75, 0xac75], /* Hangul Syllable */ + [0xac76, 0xac76], /* Hangul Syllable */ + [0xac77, 0xac77], /* Hangul Syllable */ + [0xac78, 0xac78], /* Hangul Syllable */ + [0xac79, 0xac79], /* Hangul Syllable */ + [0xac7a, 0xac7a], /* Hangul Syllable */ + [0xac7b, 0xac7b], /* Hangul Syllable */ + [0xac7c, 0xac7c], /* Hangul Syllable */ + [0xac7d, 0xac7d], /* Hangul Syllable */ + [0xac7e, 0xac7e], /* Hangul Syllable */ + [0xac7f, 0xac7f], /* Hangul Syllable */ + [0xac80, 0xac80], /* Hangul Syllable */ + [0xac81, 0xac81], /* Hangul Syllable */ + [0xac82, 0xac82], /* Hangul Syllable */ + [0xac83, 0xac83], /* Hangul Syllable */ + [0xac84, 0xac84], /* Hangul Syllable */ + [0xac85, 0xac85], /* Hangul Syllable */ + [0xac86, 0xac86], /* Hangul Syllable */ + [0xac87, 0xac87], /* Hangul Syllable */ + [0xac88, 0xac88], /* Hangul Syllable */ + [0xac89, 0xac89], /* Hangul Syllable */ + [0xac8a, 0xac8a], /* Hangul Syllable */ + [0xac8b, 0xac8b], /* Hangul Syllable */ + [0xac8c, 0xac8c], /* Hangul Syllable */ + [0xac8d, 0xac8d], /* Hangul Syllable */ + [0xac8e, 0xac8e], /* Hangul Syllable */ + [0xac8f, 0xac8f], /* Hangul Syllable */ + [0xac90, 0xac90], /* Hangul Syllable */ + [0xac91, 0xac91], /* Hangul Syllable */ + [0xac92, 0xac92], /* Hangul Syllable */ + [0xac93, 0xac93], /* Hangul Syllable */ + [0xac94, 0xac94], /* Hangul Syllable */ + [0xac95, 0xac95], /* Hangul Syllable */ + [0xac96, 0xac96], /* Hangul Syllable */ + [0xac97, 0xac97], /* Hangul Syllable */ + [0xac98, 0xac98], /* Hangul Syllable */ + [0xac99, 0xac99], /* Hangul Syllable */ + [0xac9a, 0xac9a], /* Hangul Syllable */ + [0xac9b, 0xac9b], /* Hangul Syllable */ + [0xac9c, 0xac9c], /* Hangul Syllable */ + [0xac9d, 0xac9d], /* Hangul Syllable */ + [0xac9e, 0xac9e], /* Hangul Syllable */ + [0xac9f, 0xac9f], /* Hangul Syllable */ + [0xaca0, 0xaca0], /* Hangul Syllable */ + [0xaca1, 0xaca1], /* Hangul Syllable */ + [0xaca2, 0xaca2], /* Hangul Syllable */ + [0xaca3, 0xaca3], /* Hangul Syllable */ + [0xaca4, 0xaca4], /* Hangul Syllable */ + [0xaca5, 0xaca5], /* Hangul Syllable */ + [0xaca6, 0xaca6], /* Hangul Syllable */ + [0xaca7, 0xaca7], /* Hangul Syllable */ + [0xaca8, 0xaca8], /* Hangul Syllable */ + [0xaca9, 0xaca9], /* Hangul Syllable */ + [0xacaa, 0xacaa], /* Hangul Syllable */ + [0xacab, 0xacab], /* Hangul Syllable */ + [0xacac, 0xacac], /* Hangul Syllable */ + [0xacad, 0xacad], /* Hangul Syllable */ + [0xacae, 0xacae], /* Hangul Syllable */ + [0xacaf, 0xacaf], /* Hangul Syllable */ + [0xacb0, 0xacb0], /* Hangul Syllable */ + [0xacb1, 0xacb1], /* Hangul Syllable */ + [0xacb2, 0xacb2], /* Hangul Syllable */ + [0xacb3, 0xacb3], /* Hangul Syllable */ + [0xacb4, 0xacb4], /* Hangul Syllable */ + [0xacb5, 0xacb5], /* Hangul Syllable */ + [0xacb6, 0xacb6], /* Hangul Syllable */ + [0xacb7, 0xacb7], /* Hangul Syllable */ + [0xacb8, 0xacb8], /* Hangul Syllable */ + [0xacb9, 0xacb9], /* Hangul Syllable */ + [0xacba, 0xacba], /* Hangul Syllable */ + [0xacbb, 0xacbb], /* Hangul Syllable */ + [0xacbc, 0xacbc], /* Hangul Syllable */ + [0xacbd, 0xacbd], /* Hangul Syllable */ + [0xacbe, 0xacbe], /* Hangul Syllable */ + [0xacbf, 0xacbf], /* Hangul Syllable */ + [0xacc0, 0xacc0], /* Hangul Syllable */ + [0xacc1, 0xacc1], /* Hangul Syllable */ + [0xacc2, 0xacc2], /* Hangul Syllable */ + [0xacc3, 0xacc3], /* Hangul Syllable */ + [0xacc4, 0xacc4], /* Hangul Syllable */ + [0xacc5, 0xacc5], /* Hangul Syllable */ + [0xacc6, 0xacc6], /* Hangul Syllable */ + [0xacc7, 0xacc7], /* Hangul Syllable */ + [0xacc8, 0xacc8], /* Hangul Syllable */ + [0xacc9, 0xacc9], /* Hangul Syllable */ + [0xacca, 0xacca], /* Hangul Syllable */ + [0xaccb, 0xaccb], /* Hangul Syllable */ + [0xaccc, 0xaccc], /* Hangul Syllable */ + [0xaccd, 0xaccd], /* Hangul Syllable */ + [0xacce, 0xacce], /* Hangul Syllable */ + [0xaccf, 0xaccf], /* Hangul Syllable */ + [0xacd0, 0xacd0], /* Hangul Syllable */ + [0xacd1, 0xacd1], /* Hangul Syllable */ + [0xacd2, 0xacd2], /* Hangul Syllable */ + [0xacd3, 0xacd3], /* Hangul Syllable */ + [0xacd4, 0xacd4], /* Hangul Syllable */ + [0xacd5, 0xacd5], /* Hangul Syllable */ + [0xacd6, 0xacd6], /* Hangul Syllable */ + [0xacd7, 0xacd7], /* Hangul Syllable */ + [0xacd8, 0xacd8], /* Hangul Syllable */ + [0xacd9, 0xacd9], /* Hangul Syllable */ + [0xacda, 0xacda], /* Hangul Syllable */ + [0xacdb, 0xacdb], /* Hangul Syllable */ + [0xacdc, 0xacdc], /* Hangul Syllable */ + [0xacdd, 0xacdd], /* Hangul Syllable */ + [0xacde, 0xacde], /* Hangul Syllable */ + [0xacdf, 0xacdf], /* Hangul Syllable */ + [0xace0, 0xace0], /* Hangul Syllable */ + [0xace1, 0xace1], /* Hangul Syllable */ + [0xace2, 0xace2], /* Hangul Syllable */ + [0xace3, 0xace3], /* Hangul Syllable */ + [0xace4, 0xace4], /* Hangul Syllable */ + [0xace5, 0xace5], /* Hangul Syllable */ + [0xace6, 0xace6], /* Hangul Syllable */ + [0xace7, 0xace7], /* Hangul Syllable */ + [0xace8, 0xace8], /* Hangul Syllable */ + [0xace9, 0xace9], /* Hangul Syllable */ + [0xacea, 0xacea], /* Hangul Syllable */ + [0xaceb, 0xaceb], /* Hangul Syllable */ + [0xacec, 0xacec], /* Hangul Syllable */ + [0xaced, 0xaced], /* Hangul Syllable */ + [0xacee, 0xacee], /* Hangul Syllable */ + [0xacef, 0xacef], /* Hangul Syllable */ + [0xacf0, 0xacf0], /* Hangul Syllable */ + [0xacf1, 0xacf1], /* Hangul Syllable */ + [0xacf2, 0xacf2], /* Hangul Syllable */ + [0xacf3, 0xacf3], /* Hangul Syllable */ + [0xacf4, 0xacf4], /* Hangul Syllable */ + [0xacf5, 0xacf5], /* Hangul Syllable */ + [0xacf6, 0xacf6], /* Hangul Syllable */ + [0xacf7, 0xacf7], /* Hangul Syllable */ + [0xacf8, 0xacf8], /* Hangul Syllable */ + [0xacf9, 0xacf9], /* Hangul Syllable */ + [0xacfa, 0xacfa], /* Hangul Syllable */ + [0xacfb, 0xacfb], /* Hangul Syllable */ + [0xacfc, 0xacfc], /* Hangul Syllable */ + [0xacfd, 0xacfd], /* Hangul Syllable */ + [0xacfe, 0xacfe], /* Hangul Syllable */ + [0xacff, 0xacff], /* Hangul Syllable */ + [0xad00, 0xad00], /* Hangul Syllable */ + [0xad01, 0xad01], /* Hangul Syllable */ + [0xad02, 0xad02], /* Hangul Syllable */ + [0xad03, 0xad03], /* Hangul Syllable */ + [0xad04, 0xad04], /* Hangul Syllable */ + [0xad05, 0xad05], /* Hangul Syllable */ + [0xad06, 0xad06], /* Hangul Syllable */ + [0xad07, 0xad07], /* Hangul Syllable */ + [0xad08, 0xad08], /* Hangul Syllable */ + [0xad09, 0xad09], /* Hangul Syllable */ + [0xad0a, 0xad0a], /* Hangul Syllable */ + [0xad0b, 0xad0b], /* Hangul Syllable */ + [0xad0c, 0xad0c], /* Hangul Syllable */ + [0xad0d, 0xad0d], /* Hangul Syllable */ + [0xad0e, 0xad0e], /* Hangul Syllable */ + [0xad0f, 0xad0f], /* Hangul Syllable */ + [0xad10, 0xad10], /* Hangul Syllable */ + [0xad11, 0xad11], /* Hangul Syllable */ + [0xad12, 0xad12], /* Hangul Syllable */ + [0xad13, 0xad13], /* Hangul Syllable */ + [0xad14, 0xad14], /* Hangul Syllable */ + [0xad15, 0xad15], /* Hangul Syllable */ + [0xad16, 0xad16], /* Hangul Syllable */ + [0xad17, 0xad17], /* Hangul Syllable */ + [0xad18, 0xad18], /* Hangul Syllable */ + [0xad19, 0xad19], /* Hangul Syllable */ + [0xad1a, 0xad1a], /* Hangul Syllable */ + [0xad1b, 0xad1b], /* Hangul Syllable */ + [0xad1c, 0xad1c], /* Hangul Syllable */ + [0xad1d, 0xad1d], /* Hangul Syllable */ + [0xad1e, 0xad1e], /* Hangul Syllable */ + [0xad1f, 0xad1f], /* Hangul Syllable */ + [0xad20, 0xad20], /* Hangul Syllable */ + [0xad21, 0xad21], /* Hangul Syllable */ + [0xad22, 0xad22], /* Hangul Syllable */ + [0xad23, 0xad23], /* Hangul Syllable */ + [0xad24, 0xad24], /* Hangul Syllable */ + [0xad25, 0xad25], /* Hangul Syllable */ + [0xad26, 0xad26], /* Hangul Syllable */ + [0xad27, 0xad27], /* Hangul Syllable */ + [0xad28, 0xad28], /* Hangul Syllable */ + [0xad29, 0xad29], /* Hangul Syllable */ + [0xad2a, 0xad2a], /* Hangul Syllable */ + [0xad2b, 0xad2b], /* Hangul Syllable */ + [0xad2c, 0xad2c], /* Hangul Syllable */ + [0xad2d, 0xad2d], /* Hangul Syllable */ + [0xad2e, 0xad2e], /* Hangul Syllable */ + [0xad2f, 0xad2f], /* Hangul Syllable */ + [0xad30, 0xad30], /* Hangul Syllable */ + [0xad31, 0xad31], /* Hangul Syllable */ + [0xad32, 0xad32], /* Hangul Syllable */ + [0xad33, 0xad33], /* Hangul Syllable */ + [0xad34, 0xad34], /* Hangul Syllable */ + [0xad35, 0xad35], /* Hangul Syllable */ + [0xad36, 0xad36], /* Hangul Syllable */ + [0xad37, 0xad37], /* Hangul Syllable */ + [0xad38, 0xad38], /* Hangul Syllable */ + [0xad39, 0xad39], /* Hangul Syllable */ + [0xad3a, 0xad3a], /* Hangul Syllable */ + [0xad3b, 0xad3b], /* Hangul Syllable */ + [0xad3c, 0xad3c], /* Hangul Syllable */ + [0xad3d, 0xad3d], /* Hangul Syllable */ + [0xad3e, 0xad3e], /* Hangul Syllable */ + [0xad3f, 0xad3f], /* Hangul Syllable */ + [0xad40, 0xad40], /* Hangul Syllable */ + [0xad41, 0xad41], /* Hangul Syllable */ + [0xad42, 0xad42], /* Hangul Syllable */ + [0xad43, 0xad43], /* Hangul Syllable */ + [0xad44, 0xad44], /* Hangul Syllable */ + [0xad45, 0xad45], /* Hangul Syllable */ + [0xad46, 0xad46], /* Hangul Syllable */ + [0xad47, 0xad47], /* Hangul Syllable */ + [0xad48, 0xad48], /* Hangul Syllable */ + [0xad49, 0xad49], /* Hangul Syllable */ + [0xad4a, 0xad4a], /* Hangul Syllable */ + [0xad4b, 0xad4b], /* Hangul Syllable */ + [0xad4c, 0xad4c], /* Hangul Syllable */ + [0xad4d, 0xad4d], /* Hangul Syllable */ + [0xad4e, 0xad4e], /* Hangul Syllable */ + [0xad4f, 0xad4f], /* Hangul Syllable */ + [0xad50, 0xad50], /* Hangul Syllable */ + [0xad51, 0xad51], /* Hangul Syllable */ + [0xad52, 0xad52], /* Hangul Syllable */ + [0xad53, 0xad53], /* Hangul Syllable */ + [0xad54, 0xad54], /* Hangul Syllable */ + [0xad55, 0xad55], /* Hangul Syllable */ + [0xad56, 0xad56], /* Hangul Syllable */ + [0xad57, 0xad57], /* Hangul Syllable */ + [0xad58, 0xad58], /* Hangul Syllable */ + [0xad59, 0xad59], /* Hangul Syllable */ + [0xad5a, 0xad5a], /* Hangul Syllable */ + [0xad5b, 0xad5b], /* Hangul Syllable */ + [0xad5c, 0xad5c], /* Hangul Syllable */ + [0xad5d, 0xad5d], /* Hangul Syllable */ + [0xad5e, 0xad5e], /* Hangul Syllable */ + [0xad5f, 0xad5f], /* Hangul Syllable */ + [0xad60, 0xad60], /* Hangul Syllable */ + [0xad61, 0xad61], /* Hangul Syllable */ + [0xad62, 0xad62], /* Hangul Syllable */ + [0xad63, 0xad63], /* Hangul Syllable */ + [0xad64, 0xad64], /* Hangul Syllable */ + [0xad65, 0xad65], /* Hangul Syllable */ + [0xad66, 0xad66], /* Hangul Syllable */ + [0xad67, 0xad67], /* Hangul Syllable */ + [0xad68, 0xad68], /* Hangul Syllable */ + [0xad69, 0xad69], /* Hangul Syllable */ + [0xad6a, 0xad6a], /* Hangul Syllable */ + [0xad6b, 0xad6b], /* Hangul Syllable */ + [0xad6c, 0xad6c], /* Hangul Syllable */ + [0xad6d, 0xad6d], /* Hangul Syllable */ + [0xad6e, 0xad6e], /* Hangul Syllable */ + [0xad6f, 0xad6f], /* Hangul Syllable */ + [0xad70, 0xad70], /* Hangul Syllable */ + [0xad71, 0xad71], /* Hangul Syllable */ + [0xad72, 0xad72], /* Hangul Syllable */ + [0xad73, 0xad73], /* Hangul Syllable */ + [0xad74, 0xad74], /* Hangul Syllable */ + [0xad75, 0xad75], /* Hangul Syllable */ + [0xad76, 0xad76], /* Hangul Syllable */ + [0xad77, 0xad77], /* Hangul Syllable */ + [0xad78, 0xad78], /* Hangul Syllable */ + [0xad79, 0xad79], /* Hangul Syllable */ + [0xad7a, 0xad7a], /* Hangul Syllable */ + [0xad7b, 0xad7b], /* Hangul Syllable */ + [0xad7c, 0xad7c], /* Hangul Syllable */ + [0xad7d, 0xad7d], /* Hangul Syllable */ + [0xad7e, 0xad7e], /* Hangul Syllable */ + [0xad7f, 0xad7f], /* Hangul Syllable */ + [0xad80, 0xad80], /* Hangul Syllable */ + [0xad81, 0xad81], /* Hangul Syllable */ + [0xad82, 0xad82], /* Hangul Syllable */ + [0xad83, 0xad83], /* Hangul Syllable */ + [0xad84, 0xad84], /* Hangul Syllable */ + [0xad85, 0xad85], /* Hangul Syllable */ + [0xad86, 0xad86], /* Hangul Syllable */ + [0xad87, 0xad87], /* Hangul Syllable */ + [0xad88, 0xad88], /* Hangul Syllable */ + [0xad89, 0xad89], /* Hangul Syllable */ + [0xad8a, 0xad8a], /* Hangul Syllable */ + [0xad8b, 0xad8b], /* Hangul Syllable */ + [0xad8c, 0xad8c], /* Hangul Syllable */ + [0xad8d, 0xad8d], /* Hangul Syllable */ + [0xad8e, 0xad8e], /* Hangul Syllable */ + [0xad8f, 0xad8f], /* Hangul Syllable */ + [0xad90, 0xad90], /* Hangul Syllable */ + [0xad91, 0xad91], /* Hangul Syllable */ + [0xad92, 0xad92], /* Hangul Syllable */ + [0xad93, 0xad93], /* Hangul Syllable */ + [0xad94, 0xad94], /* Hangul Syllable */ + [0xad95, 0xad95], /* Hangul Syllable */ + [0xad96, 0xad96], /* Hangul Syllable */ + [0xad97, 0xad97], /* Hangul Syllable */ + [0xad98, 0xad98], /* Hangul Syllable */ + [0xad99, 0xad99], /* Hangul Syllable */ + [0xad9a, 0xad9a], /* Hangul Syllable */ + [0xad9b, 0xad9b], /* Hangul Syllable */ + [0xad9c, 0xad9c], /* Hangul Syllable */ + [0xad9d, 0xad9d], /* Hangul Syllable */ + [0xad9e, 0xad9e], /* Hangul Syllable */ + [0xad9f, 0xad9f], /* Hangul Syllable */ + [0xada0, 0xada0], /* Hangul Syllable */ + [0xada1, 0xada1], /* Hangul Syllable */ + [0xada2, 0xada2], /* Hangul Syllable */ + [0xada3, 0xada3], /* Hangul Syllable */ + [0xada4, 0xada4], /* Hangul Syllable */ + [0xada5, 0xada5], /* Hangul Syllable */ + [0xada6, 0xada6], /* Hangul Syllable */ + [0xada7, 0xada7], /* Hangul Syllable */ + [0xada8, 0xada8], /* Hangul Syllable */ + [0xada9, 0xada9], /* Hangul Syllable */ + [0xadaa, 0xadaa], /* Hangul Syllable */ + [0xadab, 0xadab], /* Hangul Syllable */ + [0xadac, 0xadac], /* Hangul Syllable */ + [0xadad, 0xadad], /* Hangul Syllable */ + [0xadae, 0xadae], /* Hangul Syllable */ + [0xadaf, 0xadaf], /* Hangul Syllable */ + [0xadb0, 0xadb0], /* Hangul Syllable */ + [0xadb1, 0xadb1], /* Hangul Syllable */ + [0xadb2, 0xadb2], /* Hangul Syllable */ + [0xadb3, 0xadb3], /* Hangul Syllable */ + [0xadb4, 0xadb4], /* Hangul Syllable */ + [0xadb5, 0xadb5], /* Hangul Syllable */ + [0xadb6, 0xadb6], /* Hangul Syllable */ + [0xadb7, 0xadb7], /* Hangul Syllable */ + [0xadb8, 0xadb8], /* Hangul Syllable */ + [0xadb9, 0xadb9], /* Hangul Syllable */ + [0xadba, 0xadba], /* Hangul Syllable */ + [0xadbb, 0xadbb], /* Hangul Syllable */ + [0xadbc, 0xadbc], /* Hangul Syllable */ + [0xadbd, 0xadbd], /* Hangul Syllable */ + [0xadbe, 0xadbe], /* Hangul Syllable */ + [0xadbf, 0xadbf], /* Hangul Syllable */ + [0xadc0, 0xadc0], /* Hangul Syllable */ + [0xadc1, 0xadc1], /* Hangul Syllable */ + [0xadc2, 0xadc2], /* Hangul Syllable */ + [0xadc3, 0xadc3], /* Hangul Syllable */ + [0xadc4, 0xadc4], /* Hangul Syllable */ + [0xadc5, 0xadc5], /* Hangul Syllable */ + [0xadc6, 0xadc6], /* Hangul Syllable */ + [0xadc7, 0xadc7], /* Hangul Syllable */ + [0xadc8, 0xadc8], /* Hangul Syllable */ + [0xadc9, 0xadc9], /* Hangul Syllable */ + [0xadca, 0xadca], /* Hangul Syllable */ + [0xadcb, 0xadcb], /* Hangul Syllable */ + [0xadcc, 0xadcc], /* Hangul Syllable */ + [0xadcd, 0xadcd], /* Hangul Syllable */ + [0xadce, 0xadce], /* Hangul Syllable */ + [0xadcf, 0xadcf], /* Hangul Syllable */ + [0xadd0, 0xadd0], /* Hangul Syllable */ + [0xadd1, 0xadd1], /* Hangul Syllable */ + [0xadd2, 0xadd2], /* Hangul Syllable */ + [0xadd3, 0xadd3], /* Hangul Syllable */ + [0xadd4, 0xadd4], /* Hangul Syllable */ + [0xadd5, 0xadd5], /* Hangul Syllable */ + [0xadd6, 0xadd6], /* Hangul Syllable */ + [0xadd7, 0xadd7], /* Hangul Syllable */ + [0xadd8, 0xadd8], /* Hangul Syllable */ + [0xadd9, 0xadd9], /* Hangul Syllable */ + [0xadda, 0xadda], /* Hangul Syllable */ + [0xaddb, 0xaddb], /* Hangul Syllable */ + [0xaddc, 0xaddc], /* Hangul Syllable */ + [0xaddd, 0xaddd], /* Hangul Syllable */ + [0xadde, 0xadde], /* Hangul Syllable */ + [0xaddf, 0xaddf], /* Hangul Syllable */ + [0xade0, 0xade0], /* Hangul Syllable */ + [0xade1, 0xade1], /* Hangul Syllable */ + [0xade2, 0xade2], /* Hangul Syllable */ + [0xade3, 0xade3], /* Hangul Syllable */ + [0xade4, 0xade4], /* Hangul Syllable */ + [0xade5, 0xade5], /* Hangul Syllable */ + [0xade6, 0xade6], /* Hangul Syllable */ + [0xade7, 0xade7], /* Hangul Syllable */ + [0xade8, 0xade8], /* Hangul Syllable */ + [0xade9, 0xade9], /* Hangul Syllable */ + [0xadea, 0xadea], /* Hangul Syllable */ + [0xadeb, 0xadeb], /* Hangul Syllable */ + [0xadec, 0xadec], /* Hangul Syllable */ + [0xaded, 0xaded], /* Hangul Syllable */ + [0xadee, 0xadee], /* Hangul Syllable */ + [0xadef, 0xadef], /* Hangul Syllable */ + [0xadf0, 0xadf0], /* Hangul Syllable */ + [0xadf1, 0xadf1], /* Hangul Syllable */ + [0xadf2, 0xadf2], /* Hangul Syllable */ + [0xadf3, 0xadf3], /* Hangul Syllable */ + [0xadf4, 0xadf4], /* Hangul Syllable */ + [0xadf5, 0xadf5], /* Hangul Syllable */ + [0xadf6, 0xadf6], /* Hangul Syllable */ + [0xadf7, 0xadf7], /* Hangul Syllable */ + [0xadf8, 0xadf8], /* Hangul Syllable */ + [0xadf9, 0xadf9], /* Hangul Syllable */ + [0xadfa, 0xadfa], /* Hangul Syllable */ + [0xadfb, 0xadfb], /* Hangul Syllable */ + [0xadfc, 0xadfc], /* Hangul Syllable */ + [0xadfd, 0xadfd], /* Hangul Syllable */ + [0xadfe, 0xadfe], /* Hangul Syllable */ + [0xadff, 0xadff], /* Hangul Syllable */ + [0xae00, 0xae00], /* Hangul Syllable */ + [0xae01, 0xae01], /* Hangul Syllable */ + [0xae02, 0xae02], /* Hangul Syllable */ + [0xae03, 0xae03], /* Hangul Syllable */ + [0xae04, 0xae04], /* Hangul Syllable */ + [0xae05, 0xae05], /* Hangul Syllable */ + [0xae06, 0xae06], /* Hangul Syllable */ + [0xae07, 0xae07], /* Hangul Syllable */ + [0xae08, 0xae08], /* Hangul Syllable */ + [0xae09, 0xae09], /* Hangul Syllable */ + [0xae0a, 0xae0a], /* Hangul Syllable */ + [0xae0b, 0xae0b], /* Hangul Syllable */ + [0xae0c, 0xae0c], /* Hangul Syllable */ + [0xae0d, 0xae0d], /* Hangul Syllable */ + [0xae0e, 0xae0e], /* Hangul Syllable */ + [0xae0f, 0xae0f], /* Hangul Syllable */ + [0xae10, 0xae10], /* Hangul Syllable */ + [0xae11, 0xae11], /* Hangul Syllable */ + [0xae12, 0xae12], /* Hangul Syllable */ + [0xae13, 0xae13], /* Hangul Syllable */ + [0xae14, 0xae14], /* Hangul Syllable */ + [0xae15, 0xae15], /* Hangul Syllable */ + [0xae16, 0xae16], /* Hangul Syllable */ + [0xae17, 0xae17], /* Hangul Syllable */ + [0xae18, 0xae18], /* Hangul Syllable */ + [0xae19, 0xae19], /* Hangul Syllable */ + [0xae1a, 0xae1a], /* Hangul Syllable */ + [0xae1b, 0xae1b], /* Hangul Syllable */ + [0xae1c, 0xae1c], /* Hangul Syllable */ + [0xae1d, 0xae1d], /* Hangul Syllable */ + [0xae1e, 0xae1e], /* Hangul Syllable */ + [0xae1f, 0xae1f], /* Hangul Syllable */ + [0xae20, 0xae20], /* Hangul Syllable */ + [0xae21, 0xae21], /* Hangul Syllable */ + [0xae22, 0xae22], /* Hangul Syllable */ + [0xae23, 0xae23], /* Hangul Syllable */ + [0xae24, 0xae24], /* Hangul Syllable */ + [0xae25, 0xae25], /* Hangul Syllable */ + [0xae26, 0xae26], /* Hangul Syllable */ + [0xae27, 0xae27], /* Hangul Syllable */ + [0xae28, 0xae28], /* Hangul Syllable */ + [0xae29, 0xae29], /* Hangul Syllable */ + [0xae2a, 0xae2a], /* Hangul Syllable */ + [0xae2b, 0xae2b], /* Hangul Syllable */ + [0xae2c, 0xae2c], /* Hangul Syllable */ + [0xae2d, 0xae2d], /* Hangul Syllable */ + [0xae2e, 0xae2e], /* Hangul Syllable */ + [0xae2f, 0xae2f], /* Hangul Syllable */ + [0xae30, 0xae30], /* Hangul Syllable */ + [0xae31, 0xae31], /* Hangul Syllable */ + [0xae32, 0xae32], /* Hangul Syllable */ + [0xae33, 0xae33], /* Hangul Syllable */ + [0xae34, 0xae34], /* Hangul Syllable */ + [0xae35, 0xae35], /* Hangul Syllable */ + [0xae36, 0xae36], /* Hangul Syllable */ + [0xae37, 0xae37], /* Hangul Syllable */ + [0xae38, 0xae38], /* Hangul Syllable */ + [0xae39, 0xae39], /* Hangul Syllable */ + [0xae3a, 0xae3a], /* Hangul Syllable */ + [0xae3b, 0xae3b], /* Hangul Syllable */ + [0xae3c, 0xae3c], /* Hangul Syllable */ + [0xae3d, 0xae3d], /* Hangul Syllable */ + [0xae3e, 0xae3e], /* Hangul Syllable */ + [0xae3f, 0xae3f], /* Hangul Syllable */ + [0xae40, 0xae40], /* Hangul Syllable */ + [0xae41, 0xae41], /* Hangul Syllable */ + [0xae42, 0xae42], /* Hangul Syllable */ + [0xae43, 0xae43], /* Hangul Syllable */ + [0xae44, 0xae44], /* Hangul Syllable */ + [0xae45, 0xae45], /* Hangul Syllable */ + [0xae46, 0xae46], /* Hangul Syllable */ + [0xae47, 0xae47], /* Hangul Syllable */ + [0xae48, 0xae48], /* Hangul Syllable */ + [0xae49, 0xae49], /* Hangul Syllable */ + [0xae4a, 0xae4a], /* Hangul Syllable */ + [0xae4b, 0xae4b], /* Hangul Syllable */ + [0xae4c, 0xae4c], /* Hangul Syllable */ + [0xae4d, 0xae4d], /* Hangul Syllable */ + [0xae4e, 0xae4e], /* Hangul Syllable */ + [0xae4f, 0xae4f], /* Hangul Syllable */ + [0xae50, 0xae50], /* Hangul Syllable */ + [0xae51, 0xae51], /* Hangul Syllable */ + [0xae52, 0xae52], /* Hangul Syllable */ + [0xae53, 0xae53], /* Hangul Syllable */ + [0xae54, 0xae54], /* Hangul Syllable */ + [0xae55, 0xae55], /* Hangul Syllable */ + [0xae56, 0xae56], /* Hangul Syllable */ + [0xae57, 0xae57], /* Hangul Syllable */ + [0xae58, 0xae58], /* Hangul Syllable */ + [0xae59, 0xae59], /* Hangul Syllable */ + [0xae5a, 0xae5a], /* Hangul Syllable */ + [0xae5b, 0xae5b], /* Hangul Syllable */ + [0xae5c, 0xae5c], /* Hangul Syllable */ + [0xae5d, 0xae5d], /* Hangul Syllable */ + [0xae5e, 0xae5e], /* Hangul Syllable */ + [0xae5f, 0xae5f], /* Hangul Syllable */ + [0xae60, 0xae60], /* Hangul Syllable */ + [0xae61, 0xae61], /* Hangul Syllable */ + [0xae62, 0xae62], /* Hangul Syllable */ + [0xae63, 0xae63], /* Hangul Syllable */ + [0xae64, 0xae64], /* Hangul Syllable */ + [0xae65, 0xae65], /* Hangul Syllable */ + [0xae66, 0xae66], /* Hangul Syllable */ + [0xae67, 0xae67], /* Hangul Syllable */ + [0xae68, 0xae68], /* Hangul Syllable */ + [0xae69, 0xae69], /* Hangul Syllable */ + [0xae6a, 0xae6a], /* Hangul Syllable */ + [0xae6b, 0xae6b], /* Hangul Syllable */ + [0xae6c, 0xae6c], /* Hangul Syllable */ + [0xae6d, 0xae6d], /* Hangul Syllable */ + [0xae6e, 0xae6e], /* Hangul Syllable */ + [0xae6f, 0xae6f], /* Hangul Syllable */ + [0xae70, 0xae70], /* Hangul Syllable */ + [0xae71, 0xae71], /* Hangul Syllable */ + [0xae72, 0xae72], /* Hangul Syllable */ + [0xae73, 0xae73], /* Hangul Syllable */ + [0xae74, 0xae74], /* Hangul Syllable */ + [0xae75, 0xae75], /* Hangul Syllable */ + [0xae76, 0xae76], /* Hangul Syllable */ + [0xae77, 0xae77], /* Hangul Syllable */ + [0xae78, 0xae78], /* Hangul Syllable */ + [0xae79, 0xae79], /* Hangul Syllable */ + [0xae7a, 0xae7a], /* Hangul Syllable */ + [0xae7b, 0xae7b], /* Hangul Syllable */ + [0xae7c, 0xae7c], /* Hangul Syllable */ + [0xae7d, 0xae7d], /* Hangul Syllable */ + [0xae7e, 0xae7e], /* Hangul Syllable */ + [0xae7f, 0xae7f], /* Hangul Syllable */ + [0xae80, 0xae80], /* Hangul Syllable */ + [0xae81, 0xae81], /* Hangul Syllable */ + [0xae82, 0xae82], /* Hangul Syllable */ + [0xae83, 0xae83], /* Hangul Syllable */ + [0xae84, 0xae84], /* Hangul Syllable */ + [0xae85, 0xae85], /* Hangul Syllable */ + [0xae86, 0xae86], /* Hangul Syllable */ + [0xae87, 0xae87], /* Hangul Syllable */ + [0xae88, 0xae88], /* Hangul Syllable */ + [0xae89, 0xae89], /* Hangul Syllable */ + [0xae8a, 0xae8a], /* Hangul Syllable */ + [0xae8b, 0xae8b], /* Hangul Syllable */ + [0xae8c, 0xae8c], /* Hangul Syllable */ + [0xae8d, 0xae8d], /* Hangul Syllable */ + [0xae8e, 0xae8e], /* Hangul Syllable */ + [0xae8f, 0xae8f], /* Hangul Syllable */ + [0xae90, 0xae90], /* Hangul Syllable */ + [0xae91, 0xae91], /* Hangul Syllable */ + [0xae92, 0xae92], /* Hangul Syllable */ + [0xae93, 0xae93], /* Hangul Syllable */ + [0xae94, 0xae94], /* Hangul Syllable */ + [0xae95, 0xae95], /* Hangul Syllable */ + [0xae96, 0xae96], /* Hangul Syllable */ + [0xae97, 0xae97], /* Hangul Syllable */ + [0xae98, 0xae98], /* Hangul Syllable */ + [0xae99, 0xae99], /* Hangul Syllable */ + [0xae9a, 0xae9a], /* Hangul Syllable */ + [0xae9b, 0xae9b], /* Hangul Syllable */ + [0xae9c, 0xae9c], /* Hangul Syllable */ + [0xae9d, 0xae9d], /* Hangul Syllable */ + [0xae9e, 0xae9e], /* Hangul Syllable */ + [0xae9f, 0xae9f], /* Hangul Syllable */ + [0xaea0, 0xaea0], /* Hangul Syllable */ + [0xaea1, 0xaea1], /* Hangul Syllable */ + [0xaea2, 0xaea2], /* Hangul Syllable */ + [0xaea3, 0xaea3], /* Hangul Syllable */ + [0xaea4, 0xaea4], /* Hangul Syllable */ + [0xaea5, 0xaea5], /* Hangul Syllable */ + [0xaea6, 0xaea6], /* Hangul Syllable */ + [0xaea7, 0xaea7], /* Hangul Syllable */ + [0xaea8, 0xaea8], /* Hangul Syllable */ + [0xaea9, 0xaea9], /* Hangul Syllable */ + [0xaeaa, 0xaeaa], /* Hangul Syllable */ + [0xaeab, 0xaeab], /* Hangul Syllable */ + [0xaeac, 0xaeac], /* Hangul Syllable */ + [0xaead, 0xaead], /* Hangul Syllable */ + [0xaeae, 0xaeae], /* Hangul Syllable */ + [0xaeaf, 0xaeaf], /* Hangul Syllable */ + [0xaeb0, 0xaeb0], /* Hangul Syllable */ + [0xaeb1, 0xaeb1], /* Hangul Syllable */ + [0xaeb2, 0xaeb2], /* Hangul Syllable */ + [0xaeb3, 0xaeb3], /* Hangul Syllable */ + [0xaeb4, 0xaeb4], /* Hangul Syllable */ + [0xaeb5, 0xaeb5], /* Hangul Syllable */ + [0xaeb6, 0xaeb6], /* Hangul Syllable */ + [0xaeb7, 0xaeb7], /* Hangul Syllable */ + [0xaeb8, 0xaeb8], /* Hangul Syllable */ + [0xaeb9, 0xaeb9], /* Hangul Syllable */ + [0xaeba, 0xaeba], /* Hangul Syllable */ + [0xaebb, 0xaebb], /* Hangul Syllable */ + [0xaebc, 0xaebc], /* Hangul Syllable */ + [0xaebd, 0xaebd], /* Hangul Syllable */ + [0xaebe, 0xaebe], /* Hangul Syllable */ + [0xaebf, 0xaebf], /* Hangul Syllable */ + [0xaec0, 0xaec0], /* Hangul Syllable */ + [0xaec1, 0xaec1], /* Hangul Syllable */ + [0xaec2, 0xaec2], /* Hangul Syllable */ + [0xaec3, 0xaec3], /* Hangul Syllable */ + [0xaec4, 0xaec4], /* Hangul Syllable */ + [0xaec5, 0xaec5], /* Hangul Syllable */ + [0xaec6, 0xaec6], /* Hangul Syllable */ + [0xaec7, 0xaec7], /* Hangul Syllable */ + [0xaec8, 0xaec8], /* Hangul Syllable */ + [0xaec9, 0xaec9], /* Hangul Syllable */ + [0xaeca, 0xaeca], /* Hangul Syllable */ + [0xaecb, 0xaecb], /* Hangul Syllable */ + [0xaecc, 0xaecc], /* Hangul Syllable */ + [0xaecd, 0xaecd], /* Hangul Syllable */ + [0xaece, 0xaece], /* Hangul Syllable */ + [0xaecf, 0xaecf], /* Hangul Syllable */ + [0xaed0, 0xaed0], /* Hangul Syllable */ + [0xaed1, 0xaed1], /* Hangul Syllable */ + [0xaed2, 0xaed2], /* Hangul Syllable */ + [0xaed3, 0xaed3], /* Hangul Syllable */ + [0xaed4, 0xaed4], /* Hangul Syllable */ + [0xaed5, 0xaed5], /* Hangul Syllable */ + [0xaed6, 0xaed6], /* Hangul Syllable */ + [0xaed7, 0xaed7], /* Hangul Syllable */ + [0xaed8, 0xaed8], /* Hangul Syllable */ + [0xaed9, 0xaed9], /* Hangul Syllable */ + [0xaeda, 0xaeda], /* Hangul Syllable */ + [0xaedb, 0xaedb], /* Hangul Syllable */ + [0xaedc, 0xaedc], /* Hangul Syllable */ + [0xaedd, 0xaedd], /* Hangul Syllable */ + [0xaede, 0xaede], /* Hangul Syllable */ + [0xaedf, 0xaedf], /* Hangul Syllable */ + [0xaee0, 0xaee0], /* Hangul Syllable */ + [0xaee1, 0xaee1], /* Hangul Syllable */ + [0xaee2, 0xaee2], /* Hangul Syllable */ + [0xaee3, 0xaee3], /* Hangul Syllable */ + [0xaee4, 0xaee4], /* Hangul Syllable */ + [0xaee5, 0xaee5], /* Hangul Syllable */ + [0xaee6, 0xaee6], /* Hangul Syllable */ + [0xaee7, 0xaee7], /* Hangul Syllable */ + [0xaee8, 0xaee8], /* Hangul Syllable */ + [0xaee9, 0xaee9], /* Hangul Syllable */ + [0xaeea, 0xaeea], /* Hangul Syllable */ + [0xaeeb, 0xaeeb], /* Hangul Syllable */ + [0xaeec, 0xaeec], /* Hangul Syllable */ + [0xaeed, 0xaeed], /* Hangul Syllable */ + [0xaeee, 0xaeee], /* Hangul Syllable */ + [0xaeef, 0xaeef], /* Hangul Syllable */ + [0xaef0, 0xaef0], /* Hangul Syllable */ + [0xaef1, 0xaef1], /* Hangul Syllable */ + [0xaef2, 0xaef2], /* Hangul Syllable */ + [0xaef3, 0xaef3], /* Hangul Syllable */ + [0xaef4, 0xaef4], /* Hangul Syllable */ + [0xaef5, 0xaef5], /* Hangul Syllable */ + [0xaef6, 0xaef6], /* Hangul Syllable */ + [0xaef7, 0xaef7], /* Hangul Syllable */ + [0xaef8, 0xaef8], /* Hangul Syllable */ + [0xaef9, 0xaef9], /* Hangul Syllable */ + [0xaefa, 0xaefa], /* Hangul Syllable */ + [0xaefb, 0xaefb], /* Hangul Syllable */ + [0xaefc, 0xaefc], /* Hangul Syllable */ + [0xaefd, 0xaefd], /* Hangul Syllable */ + [0xaefe, 0xaefe], /* Hangul Syllable */ + [0xaeff, 0xaeff], /* Hangul Syllable */ + [0xaf00, 0xaf00], /* Hangul Syllable */ + [0xaf01, 0xaf01], /* Hangul Syllable */ + [0xaf02, 0xaf02], /* Hangul Syllable */ + [0xaf03, 0xaf03], /* Hangul Syllable */ + [0xaf04, 0xaf04], /* Hangul Syllable */ + [0xaf05, 0xaf05], /* Hangul Syllable */ + [0xaf06, 0xaf06], /* Hangul Syllable */ + [0xaf07, 0xaf07], /* Hangul Syllable */ + [0xaf08, 0xaf08], /* Hangul Syllable */ + [0xaf09, 0xaf09], /* Hangul Syllable */ + [0xaf0a, 0xaf0a], /* Hangul Syllable */ + [0xaf0b, 0xaf0b], /* Hangul Syllable */ + [0xaf0c, 0xaf0c], /* Hangul Syllable */ + [0xaf0d, 0xaf0d], /* Hangul Syllable */ + [0xaf0e, 0xaf0e], /* Hangul Syllable */ + [0xaf0f, 0xaf0f], /* Hangul Syllable */ + [0xaf10, 0xaf10], /* Hangul Syllable */ + [0xaf11, 0xaf11], /* Hangul Syllable */ + [0xaf12, 0xaf12], /* Hangul Syllable */ + [0xaf13, 0xaf13], /* Hangul Syllable */ + [0xaf14, 0xaf14], /* Hangul Syllable */ + [0xaf15, 0xaf15], /* Hangul Syllable */ + [0xaf16, 0xaf16], /* Hangul Syllable */ + [0xaf17, 0xaf17], /* Hangul Syllable */ + [0xaf18, 0xaf18], /* Hangul Syllable */ + [0xaf19, 0xaf19], /* Hangul Syllable */ + [0xaf1a, 0xaf1a], /* Hangul Syllable */ + [0xaf1b, 0xaf1b], /* Hangul Syllable */ + [0xaf1c, 0xaf1c], /* Hangul Syllable */ + [0xaf1d, 0xaf1d], /* Hangul Syllable */ + [0xaf1e, 0xaf1e], /* Hangul Syllable */ + [0xaf1f, 0xaf1f], /* Hangul Syllable */ + [0xaf20, 0xaf20], /* Hangul Syllable */ + [0xaf21, 0xaf21], /* Hangul Syllable */ + [0xaf22, 0xaf22], /* Hangul Syllable */ + [0xaf23, 0xaf23], /* Hangul Syllable */ + [0xaf24, 0xaf24], /* Hangul Syllable */ + [0xaf25, 0xaf25], /* Hangul Syllable */ + [0xaf26, 0xaf26], /* Hangul Syllable */ + [0xaf27, 0xaf27], /* Hangul Syllable */ + [0xaf28, 0xaf28], /* Hangul Syllable */ + [0xaf29, 0xaf29], /* Hangul Syllable */ + [0xaf2a, 0xaf2a], /* Hangul Syllable */ + [0xaf2b, 0xaf2b], /* Hangul Syllable */ + [0xaf2c, 0xaf2c], /* Hangul Syllable */ + [0xaf2d, 0xaf2d], /* Hangul Syllable */ + [0xaf2e, 0xaf2e], /* Hangul Syllable */ + [0xaf2f, 0xaf2f], /* Hangul Syllable */ + [0xaf30, 0xaf30], /* Hangul Syllable */ + [0xaf31, 0xaf31], /* Hangul Syllable */ + [0xaf32, 0xaf32], /* Hangul Syllable */ + [0xaf33, 0xaf33], /* Hangul Syllable */ + [0xaf34, 0xaf34], /* Hangul Syllable */ + [0xaf35, 0xaf35], /* Hangul Syllable */ + [0xaf36, 0xaf36], /* Hangul Syllable */ + [0xaf37, 0xaf37], /* Hangul Syllable */ + [0xaf38, 0xaf38], /* Hangul Syllable */ + [0xaf39, 0xaf39], /* Hangul Syllable */ + [0xaf3a, 0xaf3a], /* Hangul Syllable */ + [0xaf3b, 0xaf3b], /* Hangul Syllable */ + [0xaf3c, 0xaf3c], /* Hangul Syllable */ + [0xaf3d, 0xaf3d], /* Hangul Syllable */ + [0xaf3e, 0xaf3e], /* Hangul Syllable */ + [0xaf3f, 0xaf3f], /* Hangul Syllable */ + [0xaf40, 0xaf40], /* Hangul Syllable */ + [0xaf41, 0xaf41], /* Hangul Syllable */ + [0xaf42, 0xaf42], /* Hangul Syllable */ + [0xaf43, 0xaf43], /* Hangul Syllable */ + [0xaf44, 0xaf44], /* Hangul Syllable */ + [0xaf45, 0xaf45], /* Hangul Syllable */ + [0xaf46, 0xaf46], /* Hangul Syllable */ + [0xaf47, 0xaf47], /* Hangul Syllable */ + [0xaf48, 0xaf48], /* Hangul Syllable */ + [0xaf49, 0xaf49], /* Hangul Syllable */ + [0xaf4a, 0xaf4a], /* Hangul Syllable */ + [0xaf4b, 0xaf4b], /* Hangul Syllable */ + [0xaf4c, 0xaf4c], /* Hangul Syllable */ + [0xaf4d, 0xaf4d], /* Hangul Syllable */ + [0xaf4e, 0xaf4e], /* Hangul Syllable */ + [0xaf4f, 0xaf4f], /* Hangul Syllable */ + [0xaf50, 0xaf50], /* Hangul Syllable */ + [0xaf51, 0xaf51], /* Hangul Syllable */ + [0xaf52, 0xaf52], /* Hangul Syllable */ + [0xaf53, 0xaf53], /* Hangul Syllable */ + [0xaf54, 0xaf54], /* Hangul Syllable */ + [0xaf55, 0xaf55], /* Hangul Syllable */ + [0xaf56, 0xaf56], /* Hangul Syllable */ + [0xaf57, 0xaf57], /* Hangul Syllable */ + [0xaf58, 0xaf58], /* Hangul Syllable */ + [0xaf59, 0xaf59], /* Hangul Syllable */ + [0xaf5a, 0xaf5a], /* Hangul Syllable */ + [0xaf5b, 0xaf5b], /* Hangul Syllable */ + [0xaf5c, 0xaf5c], /* Hangul Syllable */ + [0xaf5d, 0xaf5d], /* Hangul Syllable */ + [0xaf5e, 0xaf5e], /* Hangul Syllable */ + [0xaf5f, 0xaf5f], /* Hangul Syllable */ + [0xaf60, 0xaf60], /* Hangul Syllable */ + [0xaf61, 0xaf61], /* Hangul Syllable */ + [0xaf62, 0xaf62], /* Hangul Syllable */ + [0xaf63, 0xaf63], /* Hangul Syllable */ + [0xaf64, 0xaf64], /* Hangul Syllable */ + [0xaf65, 0xaf65], /* Hangul Syllable */ + [0xaf66, 0xaf66], /* Hangul Syllable */ + [0xaf67, 0xaf67], /* Hangul Syllable */ + [0xaf68, 0xaf68], /* Hangul Syllable */ + [0xaf69, 0xaf69], /* Hangul Syllable */ + [0xaf6a, 0xaf6a], /* Hangul Syllable */ + [0xaf6b, 0xaf6b], /* Hangul Syllable */ + [0xaf6c, 0xaf6c], /* Hangul Syllable */ + [0xaf6d, 0xaf6d], /* Hangul Syllable */ + [0xaf6e, 0xaf6e], /* Hangul Syllable */ + [0xaf6f, 0xaf6f], /* Hangul Syllable */ + [0xaf70, 0xaf70], /* Hangul Syllable */ + [0xaf71, 0xaf71], /* Hangul Syllable */ + [0xaf72, 0xaf72], /* Hangul Syllable */ + [0xaf73, 0xaf73], /* Hangul Syllable */ + [0xaf74, 0xaf74], /* Hangul Syllable */ + [0xaf75, 0xaf75], /* Hangul Syllable */ + [0xaf76, 0xaf76], /* Hangul Syllable */ + [0xaf77, 0xaf77], /* Hangul Syllable */ + [0xaf78, 0xaf78], /* Hangul Syllable */ + [0xaf79, 0xaf79], /* Hangul Syllable */ + [0xaf7a, 0xaf7a], /* Hangul Syllable */ + [0xaf7b, 0xaf7b], /* Hangul Syllable */ + [0xaf7c, 0xaf7c], /* Hangul Syllable */ + [0xaf7d, 0xaf7d], /* Hangul Syllable */ + [0xaf7e, 0xaf7e], /* Hangul Syllable */ + [0xaf7f, 0xaf7f], /* Hangul Syllable */ + [0xaf80, 0xaf80], /* Hangul Syllable */ + [0xaf81, 0xaf81], /* Hangul Syllable */ + [0xaf82, 0xaf82], /* Hangul Syllable */ + [0xaf83, 0xaf83], /* Hangul Syllable */ + [0xaf84, 0xaf84], /* Hangul Syllable */ + [0xaf85, 0xaf85], /* Hangul Syllable */ + [0xaf86, 0xaf86], /* Hangul Syllable */ + [0xaf87, 0xaf87], /* Hangul Syllable */ + [0xaf88, 0xaf88], /* Hangul Syllable */ + [0xaf89, 0xaf89], /* Hangul Syllable */ + [0xaf8a, 0xaf8a], /* Hangul Syllable */ + [0xaf8b, 0xaf8b], /* Hangul Syllable */ + [0xaf8c, 0xaf8c], /* Hangul Syllable */ + [0xaf8d, 0xaf8d], /* Hangul Syllable */ + [0xaf8e, 0xaf8e], /* Hangul Syllable */ + [0xaf8f, 0xaf8f], /* Hangul Syllable */ + [0xaf90, 0xaf90], /* Hangul Syllable */ + [0xaf91, 0xaf91], /* Hangul Syllable */ + [0xaf92, 0xaf92], /* Hangul Syllable */ + [0xaf93, 0xaf93], /* Hangul Syllable */ + [0xaf94, 0xaf94], /* Hangul Syllable */ + [0xaf95, 0xaf95], /* Hangul Syllable */ + [0xaf96, 0xaf96], /* Hangul Syllable */ + [0xaf97, 0xaf97], /* Hangul Syllable */ + [0xaf98, 0xaf98], /* Hangul Syllable */ + [0xaf99, 0xaf99], /* Hangul Syllable */ + [0xaf9a, 0xaf9a], /* Hangul Syllable */ + [0xaf9b, 0xaf9b], /* Hangul Syllable */ + [0xaf9c, 0xaf9c], /* Hangul Syllable */ + [0xaf9d, 0xaf9d], /* Hangul Syllable */ + [0xaf9e, 0xaf9e], /* Hangul Syllable */ + [0xaf9f, 0xaf9f], /* Hangul Syllable */ + [0xafa0, 0xafa0], /* Hangul Syllable */ + [0xafa1, 0xafa1], /* Hangul Syllable */ + [0xafa2, 0xafa2], /* Hangul Syllable */ + [0xafa3, 0xafa3], /* Hangul Syllable */ + [0xafa4, 0xafa4], /* Hangul Syllable */ + [0xafa5, 0xafa5], /* Hangul Syllable */ + [0xafa6, 0xafa6], /* Hangul Syllable */ + [0xafa7, 0xafa7], /* Hangul Syllable */ + [0xafa8, 0xafa8], /* Hangul Syllable */ + [0xafa9, 0xafa9], /* Hangul Syllable */ + [0xafaa, 0xafaa], /* Hangul Syllable */ + [0xafab, 0xafab], /* Hangul Syllable */ + [0xafac, 0xafac], /* Hangul Syllable */ + [0xafad, 0xafad], /* Hangul Syllable */ + [0xafae, 0xafae], /* Hangul Syllable */ + [0xafaf, 0xafaf], /* Hangul Syllable */ + [0xafb0, 0xafb0], /* Hangul Syllable */ + [0xafb1, 0xafb1], /* Hangul Syllable */ + [0xafb2, 0xafb2], /* Hangul Syllable */ + [0xafb3, 0xafb3], /* Hangul Syllable */ + [0xafb4, 0xafb4], /* Hangul Syllable */ + [0xafb5, 0xafb5], /* Hangul Syllable */ + [0xafb6, 0xafb6], /* Hangul Syllable */ + [0xafb7, 0xafb7], /* Hangul Syllable */ + [0xafb8, 0xafb8], /* Hangul Syllable */ + [0xafb9, 0xafb9], /* Hangul Syllable */ + [0xafba, 0xafba], /* Hangul Syllable */ + [0xafbb, 0xafbb], /* Hangul Syllable */ + [0xafbc, 0xafbc], /* Hangul Syllable */ + [0xafbd, 0xafbd], /* Hangul Syllable */ + [0xafbe, 0xafbe], /* Hangul Syllable */ + [0xafbf, 0xafbf], /* Hangul Syllable */ + [0xafc0, 0xafc0], /* Hangul Syllable */ + [0xafc1, 0xafc1], /* Hangul Syllable */ + [0xafc2, 0xafc2], /* Hangul Syllable */ + [0xafc3, 0xafc3], /* Hangul Syllable */ + [0xafc4, 0xafc4], /* Hangul Syllable */ + [0xafc5, 0xafc5], /* Hangul Syllable */ + [0xafc6, 0xafc6], /* Hangul Syllable */ + [0xafc7, 0xafc7], /* Hangul Syllable */ + [0xafc8, 0xafc8], /* Hangul Syllable */ + [0xafc9, 0xafc9], /* Hangul Syllable */ + [0xafca, 0xafca], /* Hangul Syllable */ + [0xafcb, 0xafcb], /* Hangul Syllable */ + [0xafcc, 0xafcc], /* Hangul Syllable */ + [0xafcd, 0xafcd], /* Hangul Syllable */ + [0xafce, 0xafce], /* Hangul Syllable */ + [0xafcf, 0xafcf], /* Hangul Syllable */ + [0xafd0, 0xafd0], /* Hangul Syllable */ + [0xafd1, 0xafd1], /* Hangul Syllable */ + [0xafd2, 0xafd2], /* Hangul Syllable */ + [0xafd3, 0xafd3], /* Hangul Syllable */ + [0xafd4, 0xafd4], /* Hangul Syllable */ + [0xafd5, 0xafd5], /* Hangul Syllable */ + [0xafd6, 0xafd6], /* Hangul Syllable */ + [0xafd7, 0xafd7], /* Hangul Syllable */ + [0xafd8, 0xafd8], /* Hangul Syllable */ + [0xafd9, 0xafd9], /* Hangul Syllable */ + [0xafda, 0xafda], /* Hangul Syllable */ + [0xafdb, 0xafdb], /* Hangul Syllable */ + [0xafdc, 0xafdc], /* Hangul Syllable */ + [0xafdd, 0xafdd], /* Hangul Syllable */ + [0xafde, 0xafde], /* Hangul Syllable */ + [0xafdf, 0xafdf], /* Hangul Syllable */ + [0xafe0, 0xafe0], /* Hangul Syllable */ + [0xafe1, 0xafe1], /* Hangul Syllable */ + [0xafe2, 0xafe2], /* Hangul Syllable */ + [0xafe3, 0xafe3], /* Hangul Syllable */ + [0xafe4, 0xafe4], /* Hangul Syllable */ + [0xafe5, 0xafe5], /* Hangul Syllable */ + [0xafe6, 0xafe6], /* Hangul Syllable */ + [0xafe7, 0xafe7], /* Hangul Syllable */ + [0xafe8, 0xafe8], /* Hangul Syllable */ + [0xafe9, 0xafe9], /* Hangul Syllable */ + [0xafea, 0xafea], /* Hangul Syllable */ + [0xafeb, 0xafeb], /* Hangul Syllable */ + [0xafec, 0xafec], /* Hangul Syllable */ + [0xafed, 0xafed], /* Hangul Syllable */ + [0xafee, 0xafee], /* Hangul Syllable */ + [0xafef, 0xafef], /* Hangul Syllable */ + [0xaff0, 0xaff0], /* Hangul Syllable */ + [0xaff1, 0xaff1], /* Hangul Syllable */ + [0xaff2, 0xaff2], /* Hangul Syllable */ + [0xaff3, 0xaff3], /* Hangul Syllable */ + [0xaff4, 0xaff4], /* Hangul Syllable */ + [0xaff5, 0xaff5], /* Hangul Syllable */ + [0xaff6, 0xaff6], /* Hangul Syllable */ + [0xaff7, 0xaff7], /* Hangul Syllable */ + [0xaff8, 0xaff8], /* Hangul Syllable */ + [0xaff9, 0xaff9], /* Hangul Syllable */ + [0xaffa, 0xaffa], /* Hangul Syllable */ + [0xaffb, 0xaffb], /* Hangul Syllable */ + [0xaffc, 0xaffc], /* Hangul Syllable */ + [0xaffd, 0xaffd], /* Hangul Syllable */ + [0xaffe, 0xaffe], /* Hangul Syllable */ + [0xafff, 0xafff], /* Hangul Syllable */ + [0xb000, 0xb000], /* Hangul Syllable */ + [0xb001, 0xb001], /* Hangul Syllable */ + [0xb002, 0xb002], /* Hangul Syllable */ + [0xb003, 0xb003], /* Hangul Syllable */ + [0xb004, 0xb004], /* Hangul Syllable */ + [0xb005, 0xb005], /* Hangul Syllable */ + [0xb006, 0xb006], /* Hangul Syllable */ + [0xb007, 0xb007], /* Hangul Syllable */ + [0xb008, 0xb008], /* Hangul Syllable */ + [0xb009, 0xb009], /* Hangul Syllable */ + [0xb00a, 0xb00a], /* Hangul Syllable */ + [0xb00b, 0xb00b], /* Hangul Syllable */ + [0xb00c, 0xb00c], /* Hangul Syllable */ + [0xb00d, 0xb00d], /* Hangul Syllable */ + [0xb00e, 0xb00e], /* Hangul Syllable */ + [0xb00f, 0xb00f], /* Hangul Syllable */ + [0xb010, 0xb010], /* Hangul Syllable */ + [0xb011, 0xb011], /* Hangul Syllable */ + [0xb012, 0xb012], /* Hangul Syllable */ + [0xb013, 0xb013], /* Hangul Syllable */ + [0xb014, 0xb014], /* Hangul Syllable */ + [0xb015, 0xb015], /* Hangul Syllable */ + [0xb016, 0xb016], /* Hangul Syllable */ + [0xb017, 0xb017], /* Hangul Syllable */ + [0xb018, 0xb018], /* Hangul Syllable */ + [0xb019, 0xb019], /* Hangul Syllable */ + [0xb01a, 0xb01a], /* Hangul Syllable */ + [0xb01b, 0xb01b], /* Hangul Syllable */ + [0xb01c, 0xb01c], /* Hangul Syllable */ + [0xb01d, 0xb01d], /* Hangul Syllable */ + [0xb01e, 0xb01e], /* Hangul Syllable */ + [0xb01f, 0xb01f], /* Hangul Syllable */ + [0xb020, 0xb020], /* Hangul Syllable */ + [0xb021, 0xb021], /* Hangul Syllable */ + [0xb022, 0xb022], /* Hangul Syllable */ + [0xb023, 0xb023], /* Hangul Syllable */ + [0xb024, 0xb024], /* Hangul Syllable */ + [0xb025, 0xb025], /* Hangul Syllable */ + [0xb026, 0xb026], /* Hangul Syllable */ + [0xb027, 0xb027], /* Hangul Syllable */ + [0xb028, 0xb028], /* Hangul Syllable */ + [0xb029, 0xb029], /* Hangul Syllable */ + [0xb02a, 0xb02a], /* Hangul Syllable */ + [0xb02b, 0xb02b], /* Hangul Syllable */ + [0xb02c, 0xb02c], /* Hangul Syllable */ + [0xb02d, 0xb02d], /* Hangul Syllable */ + [0xb02e, 0xb02e], /* Hangul Syllable */ + [0xb02f, 0xb02f], /* Hangul Syllable */ + [0xb030, 0xb030], /* Hangul Syllable */ + [0xb031, 0xb031], /* Hangul Syllable */ + [0xb032, 0xb032], /* Hangul Syllable */ + [0xb033, 0xb033], /* Hangul Syllable */ + [0xb034, 0xb034], /* Hangul Syllable */ + [0xb035, 0xb035], /* Hangul Syllable */ + [0xb036, 0xb036], /* Hangul Syllable */ + [0xb037, 0xb037], /* Hangul Syllable */ + [0xb038, 0xb038], /* Hangul Syllable */ + [0xb039, 0xb039], /* Hangul Syllable */ + [0xb03a, 0xb03a], /* Hangul Syllable */ + [0xb03b, 0xb03b], /* Hangul Syllable */ + [0xb03c, 0xb03c], /* Hangul Syllable */ + [0xb03d, 0xb03d], /* Hangul Syllable */ + [0xb03e, 0xb03e], /* Hangul Syllable */ + [0xb03f, 0xb03f], /* Hangul Syllable */ + [0xb040, 0xb040], /* Hangul Syllable */ + [0xb041, 0xb041], /* Hangul Syllable */ + [0xb042, 0xb042], /* Hangul Syllable */ + [0xb043, 0xb043], /* Hangul Syllable */ + [0xb044, 0xb044], /* Hangul Syllable */ + [0xb045, 0xb045], /* Hangul Syllable */ + [0xb046, 0xb046], /* Hangul Syllable */ + [0xb047, 0xb047], /* Hangul Syllable */ + [0xb048, 0xb048], /* Hangul Syllable */ + [0xb049, 0xb049], /* Hangul Syllable */ + [0xb04a, 0xb04a], /* Hangul Syllable */ + [0xb04b, 0xb04b], /* Hangul Syllable */ + [0xb04c, 0xb04c], /* Hangul Syllable */ + [0xb04d, 0xb04d], /* Hangul Syllable */ + [0xb04e, 0xb04e], /* Hangul Syllable */ + [0xb04f, 0xb04f], /* Hangul Syllable */ + [0xb050, 0xb050], /* Hangul Syllable */ + [0xb051, 0xb051], /* Hangul Syllable */ + [0xb052, 0xb052], /* Hangul Syllable */ + [0xb053, 0xb053], /* Hangul Syllable */ + [0xb054, 0xb054], /* Hangul Syllable */ + [0xb055, 0xb055], /* Hangul Syllable */ + [0xb056, 0xb056], /* Hangul Syllable */ + [0xb057, 0xb057], /* Hangul Syllable */ + [0xb058, 0xb058], /* Hangul Syllable */ + [0xb059, 0xb059], /* Hangul Syllable */ + [0xb05a, 0xb05a], /* Hangul Syllable */ + [0xb05b, 0xb05b], /* Hangul Syllable */ + [0xb05c, 0xb05c], /* Hangul Syllable */ + [0xb05d, 0xb05d], /* Hangul Syllable */ + [0xb05e, 0xb05e], /* Hangul Syllable */ + [0xb05f, 0xb05f], /* Hangul Syllable */ + [0xb060, 0xb060], /* Hangul Syllable */ + [0xb061, 0xb061], /* Hangul Syllable */ + [0xb062, 0xb062], /* Hangul Syllable */ + [0xb063, 0xb063], /* Hangul Syllable */ + [0xb064, 0xb064], /* Hangul Syllable */ + [0xb065, 0xb065], /* Hangul Syllable */ + [0xb066, 0xb066], /* Hangul Syllable */ + [0xb067, 0xb067], /* Hangul Syllable */ + [0xb068, 0xb068], /* Hangul Syllable */ + [0xb069, 0xb069], /* Hangul Syllable */ + [0xb06a, 0xb06a], /* Hangul Syllable */ + [0xb06b, 0xb06b], /* Hangul Syllable */ + [0xb06c, 0xb06c], /* Hangul Syllable */ + [0xb06d, 0xb06d], /* Hangul Syllable */ + [0xb06e, 0xb06e], /* Hangul Syllable */ + [0xb06f, 0xb06f], /* Hangul Syllable */ + [0xb070, 0xb070], /* Hangul Syllable */ + [0xb071, 0xb071], /* Hangul Syllable */ + [0xb072, 0xb072], /* Hangul Syllable */ + [0xb073, 0xb073], /* Hangul Syllable */ + [0xb074, 0xb074], /* Hangul Syllable */ + [0xb075, 0xb075], /* Hangul Syllable */ + [0xb076, 0xb076], /* Hangul Syllable */ + [0xb077, 0xb077], /* Hangul Syllable */ + [0xb078, 0xb078], /* Hangul Syllable */ + [0xb079, 0xb079], /* Hangul Syllable */ + [0xb07a, 0xb07a], /* Hangul Syllable */ + [0xb07b, 0xb07b], /* Hangul Syllable */ + [0xb07c, 0xb07c], /* Hangul Syllable */ + [0xb07d, 0xb07d], /* Hangul Syllable */ + [0xb07e, 0xb07e], /* Hangul Syllable */ + [0xb07f, 0xb07f], /* Hangul Syllable */ + [0xb080, 0xb080], /* Hangul Syllable */ + [0xb081, 0xb081], /* Hangul Syllable */ + [0xb082, 0xb082], /* Hangul Syllable */ + [0xb083, 0xb083], /* Hangul Syllable */ + [0xb084, 0xb084], /* Hangul Syllable */ + [0xb085, 0xb085], /* Hangul Syllable */ + [0xb086, 0xb086], /* Hangul Syllable */ + [0xb087, 0xb087], /* Hangul Syllable */ + [0xb088, 0xb088], /* Hangul Syllable */ + [0xb089, 0xb089], /* Hangul Syllable */ + [0xb08a, 0xb08a], /* Hangul Syllable */ + [0xb08b, 0xb08b], /* Hangul Syllable */ + [0xb08c, 0xb08c], /* Hangul Syllable */ + [0xb08d, 0xb08d], /* Hangul Syllable */ + [0xb08e, 0xb08e], /* Hangul Syllable */ + [0xb08f, 0xb08f], /* Hangul Syllable */ + [0xb090, 0xb090], /* Hangul Syllable */ + [0xb091, 0xb091], /* Hangul Syllable */ + [0xb092, 0xb092], /* Hangul Syllable */ + [0xb093, 0xb093], /* Hangul Syllable */ + [0xb094, 0xb094], /* Hangul Syllable */ + [0xb095, 0xb095], /* Hangul Syllable */ + [0xb096, 0xb096], /* Hangul Syllable */ + [0xb097, 0xb097], /* Hangul Syllable */ + [0xb098, 0xb098], /* Hangul Syllable */ + [0xb099, 0xb099], /* Hangul Syllable */ + [0xb09a, 0xb09a], /* Hangul Syllable */ + [0xb09b, 0xb09b], /* Hangul Syllable */ + [0xb09c, 0xb09c], /* Hangul Syllable */ + [0xb09d, 0xb09d], /* Hangul Syllable */ + [0xb09e, 0xb09e], /* Hangul Syllable */ + [0xb09f, 0xb09f], /* Hangul Syllable */ + [0xb0a0, 0xb0a0], /* Hangul Syllable */ + [0xb0a1, 0xb0a1], /* Hangul Syllable */ + [0xb0a2, 0xb0a2], /* Hangul Syllable */ + [0xb0a3, 0xb0a3], /* Hangul Syllable */ + [0xb0a4, 0xb0a4], /* Hangul Syllable */ + [0xb0a5, 0xb0a5], /* Hangul Syllable */ + [0xb0a6, 0xb0a6], /* Hangul Syllable */ + [0xb0a7, 0xb0a7], /* Hangul Syllable */ + [0xb0a8, 0xb0a8], /* Hangul Syllable */ + [0xb0a9, 0xb0a9], /* Hangul Syllable */ + [0xb0aa, 0xb0aa], /* Hangul Syllable */ + [0xb0ab, 0xb0ab], /* Hangul Syllable */ + [0xb0ac, 0xb0ac], /* Hangul Syllable */ + [0xb0ad, 0xb0ad], /* Hangul Syllable */ + [0xb0ae, 0xb0ae], /* Hangul Syllable */ + [0xb0af, 0xb0af], /* Hangul Syllable */ + [0xb0b0, 0xb0b0], /* Hangul Syllable */ + [0xb0b1, 0xb0b1], /* Hangul Syllable */ + [0xb0b2, 0xb0b2], /* Hangul Syllable */ + [0xb0b3, 0xb0b3], /* Hangul Syllable */ + [0xb0b4, 0xb0b4], /* Hangul Syllable */ + [0xb0b5, 0xb0b5], /* Hangul Syllable */ + [0xb0b6, 0xb0b6], /* Hangul Syllable */ + [0xb0b7, 0xb0b7], /* Hangul Syllable */ + [0xb0b8, 0xb0b8], /* Hangul Syllable */ + [0xb0b9, 0xb0b9], /* Hangul Syllable */ + [0xb0ba, 0xb0ba], /* Hangul Syllable */ + [0xb0bb, 0xb0bb], /* Hangul Syllable */ + [0xb0bc, 0xb0bc], /* Hangul Syllable */ + [0xb0bd, 0xb0bd], /* Hangul Syllable */ + [0xb0be, 0xb0be], /* Hangul Syllable */ + [0xb0bf, 0xb0bf], /* Hangul Syllable */ + [0xb0c0, 0xb0c0], /* Hangul Syllable */ + [0xb0c1, 0xb0c1], /* Hangul Syllable */ + [0xb0c2, 0xb0c2], /* Hangul Syllable */ + [0xb0c3, 0xb0c3], /* Hangul Syllable */ + [0xb0c4, 0xb0c4], /* Hangul Syllable */ + [0xb0c5, 0xb0c5], /* Hangul Syllable */ + [0xb0c6, 0xb0c6], /* Hangul Syllable */ + [0xb0c7, 0xb0c7], /* Hangul Syllable */ + [0xb0c8, 0xb0c8], /* Hangul Syllable */ + [0xb0c9, 0xb0c9], /* Hangul Syllable */ + [0xb0ca, 0xb0ca], /* Hangul Syllable */ + [0xb0cb, 0xb0cb], /* Hangul Syllable */ + [0xb0cc, 0xb0cc], /* Hangul Syllable */ + [0xb0cd, 0xb0cd], /* Hangul Syllable */ + [0xb0ce, 0xb0ce], /* Hangul Syllable */ + [0xb0cf, 0xb0cf], /* Hangul Syllable */ + [0xb0d0, 0xb0d0], /* Hangul Syllable */ + [0xb0d1, 0xb0d1], /* Hangul Syllable */ + [0xb0d2, 0xb0d2], /* Hangul Syllable */ + [0xb0d3, 0xb0d3], /* Hangul Syllable */ + [0xb0d4, 0xb0d4], /* Hangul Syllable */ + [0xb0d5, 0xb0d5], /* Hangul Syllable */ + [0xb0d6, 0xb0d6], /* Hangul Syllable */ + [0xb0d7, 0xb0d7], /* Hangul Syllable */ + [0xb0d8, 0xb0d8], /* Hangul Syllable */ + [0xb0d9, 0xb0d9], /* Hangul Syllable */ + [0xb0da, 0xb0da], /* Hangul Syllable */ + [0xb0db, 0xb0db], /* Hangul Syllable */ + [0xb0dc, 0xb0dc], /* Hangul Syllable */ + [0xb0dd, 0xb0dd], /* Hangul Syllable */ + [0xb0de, 0xb0de], /* Hangul Syllable */ + [0xb0df, 0xb0df], /* Hangul Syllable */ + [0xb0e0, 0xb0e0], /* Hangul Syllable */ + [0xb0e1, 0xb0e1], /* Hangul Syllable */ + [0xb0e2, 0xb0e2], /* Hangul Syllable */ + [0xb0e3, 0xb0e3], /* Hangul Syllable */ + [0xb0e4, 0xb0e4], /* Hangul Syllable */ + [0xb0e5, 0xb0e5], /* Hangul Syllable */ + [0xb0e6, 0xb0e6], /* Hangul Syllable */ + [0xb0e7, 0xb0e7], /* Hangul Syllable */ + [0xb0e8, 0xb0e8], /* Hangul Syllable */ + [0xb0e9, 0xb0e9], /* Hangul Syllable */ + [0xb0ea, 0xb0ea], /* Hangul Syllable */ + [0xb0eb, 0xb0eb], /* Hangul Syllable */ + [0xb0ec, 0xb0ec], /* Hangul Syllable */ + [0xb0ed, 0xb0ed], /* Hangul Syllable */ + [0xb0ee, 0xb0ee], /* Hangul Syllable */ + [0xb0ef, 0xb0ef], /* Hangul Syllable */ + [0xb0f0, 0xb0f0], /* Hangul Syllable */ + [0xb0f1, 0xb0f1], /* Hangul Syllable */ + [0xb0f2, 0xb0f2], /* Hangul Syllable */ + [0xb0f3, 0xb0f3], /* Hangul Syllable */ + [0xb0f4, 0xb0f4], /* Hangul Syllable */ + [0xb0f5, 0xb0f5], /* Hangul Syllable */ + [0xb0f6, 0xb0f6], /* Hangul Syllable */ + [0xb0f7, 0xb0f7], /* Hangul Syllable */ + [0xb0f8, 0xb0f8], /* Hangul Syllable */ + [0xb0f9, 0xb0f9], /* Hangul Syllable */ + [0xb0fa, 0xb0fa], /* Hangul Syllable */ + [0xb0fb, 0xb0fb], /* Hangul Syllable */ + [0xb0fc, 0xb0fc], /* Hangul Syllable */ + [0xb0fd, 0xb0fd], /* Hangul Syllable */ + [0xb0fe, 0xb0fe], /* Hangul Syllable */ + [0xb0ff, 0xb0ff], /* Hangul Syllable */ + [0xb100, 0xb100], /* Hangul Syllable */ + [0xb101, 0xb101], /* Hangul Syllable */ + [0xb102, 0xb102], /* Hangul Syllable */ + [0xb103, 0xb103], /* Hangul Syllable */ + [0xb104, 0xb104], /* Hangul Syllable */ + [0xb105, 0xb105], /* Hangul Syllable */ + [0xb106, 0xb106], /* Hangul Syllable */ + [0xb107, 0xb107], /* Hangul Syllable */ + [0xb108, 0xb108], /* Hangul Syllable */ + [0xb109, 0xb109], /* Hangul Syllable */ + [0xb10a, 0xb10a], /* Hangul Syllable */ + [0xb10b, 0xb10b], /* Hangul Syllable */ + [0xb10c, 0xb10c], /* Hangul Syllable */ + [0xb10d, 0xb10d], /* Hangul Syllable */ + [0xb10e, 0xb10e], /* Hangul Syllable */ + [0xb10f, 0xb10f], /* Hangul Syllable */ + [0xb110, 0xb110], /* Hangul Syllable */ + [0xb111, 0xb111], /* Hangul Syllable */ + [0xb112, 0xb112], /* Hangul Syllable */ + [0xb113, 0xb113], /* Hangul Syllable */ + [0xb114, 0xb114], /* Hangul Syllable */ + [0xb115, 0xb115], /* Hangul Syllable */ + [0xb116, 0xb116], /* Hangul Syllable */ + [0xb117, 0xb117], /* Hangul Syllable */ + [0xb118, 0xb118], /* Hangul Syllable */ + [0xb119, 0xb119], /* Hangul Syllable */ + [0xb11a, 0xb11a], /* Hangul Syllable */ + [0xb11b, 0xb11b], /* Hangul Syllable */ + [0xb11c, 0xb11c], /* Hangul Syllable */ + [0xb11d, 0xb11d], /* Hangul Syllable */ + [0xb11e, 0xb11e], /* Hangul Syllable */ + [0xb11f, 0xb11f], /* Hangul Syllable */ + [0xb120, 0xb120], /* Hangul Syllable */ + [0xb121, 0xb121], /* Hangul Syllable */ + [0xb122, 0xb122], /* Hangul Syllable */ + [0xb123, 0xb123], /* Hangul Syllable */ + [0xb124, 0xb124], /* Hangul Syllable */ + [0xb125, 0xb125], /* Hangul Syllable */ + [0xb126, 0xb126], /* Hangul Syllable */ + [0xb127, 0xb127], /* Hangul Syllable */ + [0xb128, 0xb128], /* Hangul Syllable */ + [0xb129, 0xb129], /* Hangul Syllable */ + [0xb12a, 0xb12a], /* Hangul Syllable */ + [0xb12b, 0xb12b], /* Hangul Syllable */ + [0xb12c, 0xb12c], /* Hangul Syllable */ + [0xb12d, 0xb12d], /* Hangul Syllable */ + [0xb12e, 0xb12e], /* Hangul Syllable */ + [0xb12f, 0xb12f], /* Hangul Syllable */ + [0xb130, 0xb130], /* Hangul Syllable */ + [0xb131, 0xb131], /* Hangul Syllable */ + [0xb132, 0xb132], /* Hangul Syllable */ + [0xb133, 0xb133], /* Hangul Syllable */ + [0xb134, 0xb134], /* Hangul Syllable */ + [0xb135, 0xb135], /* Hangul Syllable */ + [0xb136, 0xb136], /* Hangul Syllable */ + [0xb137, 0xb137], /* Hangul Syllable */ + [0xb138, 0xb138], /* Hangul Syllable */ + [0xb139, 0xb139], /* Hangul Syllable */ + [0xb13a, 0xb13a], /* Hangul Syllable */ + [0xb13b, 0xb13b], /* Hangul Syllable */ + [0xb13c, 0xb13c], /* Hangul Syllable */ + [0xb13d, 0xb13d], /* Hangul Syllable */ + [0xb13e, 0xb13e], /* Hangul Syllable */ + [0xb13f, 0xb13f], /* Hangul Syllable */ + [0xb140, 0xb140], /* Hangul Syllable */ + [0xb141, 0xb141], /* Hangul Syllable */ + [0xb142, 0xb142], /* Hangul Syllable */ + [0xb143, 0xb143], /* Hangul Syllable */ + [0xb144, 0xb144], /* Hangul Syllable */ + [0xb145, 0xb145], /* Hangul Syllable */ + [0xb146, 0xb146], /* Hangul Syllable */ + [0xb147, 0xb147], /* Hangul Syllable */ + [0xb148, 0xb148], /* Hangul Syllable */ + [0xb149, 0xb149], /* Hangul Syllable */ + [0xb14a, 0xb14a], /* Hangul Syllable */ + [0xb14b, 0xb14b], /* Hangul Syllable */ + [0xb14c, 0xb14c], /* Hangul Syllable */ + [0xb14d, 0xb14d], /* Hangul Syllable */ + [0xb14e, 0xb14e], /* Hangul Syllable */ + [0xb14f, 0xb14f], /* Hangul Syllable */ + [0xb150, 0xb150], /* Hangul Syllable */ + [0xb151, 0xb151], /* Hangul Syllable */ + [0xb152, 0xb152], /* Hangul Syllable */ + [0xb153, 0xb153], /* Hangul Syllable */ + [0xb154, 0xb154], /* Hangul Syllable */ + [0xb155, 0xb155], /* Hangul Syllable */ + [0xb156, 0xb156], /* Hangul Syllable */ + [0xb157, 0xb157], /* Hangul Syllable */ + [0xb158, 0xb158], /* Hangul Syllable */ + [0xb159, 0xb159], /* Hangul Syllable */ + [0xb15a, 0xb15a], /* Hangul Syllable */ + [0xb15b, 0xb15b], /* Hangul Syllable */ + [0xb15c, 0xb15c], /* Hangul Syllable */ + [0xb15d, 0xb15d], /* Hangul Syllable */ + [0xb15e, 0xb15e], /* Hangul Syllable */ + [0xb15f, 0xb15f], /* Hangul Syllable */ + [0xb160, 0xb160], /* Hangul Syllable */ + [0xb161, 0xb161], /* Hangul Syllable */ + [0xb162, 0xb162], /* Hangul Syllable */ + [0xb163, 0xb163], /* Hangul Syllable */ + [0xb164, 0xb164], /* Hangul Syllable */ + [0xb165, 0xb165], /* Hangul Syllable */ + [0xb166, 0xb166], /* Hangul Syllable */ + [0xb167, 0xb167], /* Hangul Syllable */ + [0xb168, 0xb168], /* Hangul Syllable */ + [0xb169, 0xb169], /* Hangul Syllable */ + [0xb16a, 0xb16a], /* Hangul Syllable */ + [0xb16b, 0xb16b], /* Hangul Syllable */ + [0xb16c, 0xb16c], /* Hangul Syllable */ + [0xb16d, 0xb16d], /* Hangul Syllable */ + [0xb16e, 0xb16e], /* Hangul Syllable */ + [0xb16f, 0xb16f], /* Hangul Syllable */ + [0xb170, 0xb170], /* Hangul Syllable */ + [0xb171, 0xb171], /* Hangul Syllable */ + [0xb172, 0xb172], /* Hangul Syllable */ + [0xb173, 0xb173], /* Hangul Syllable */ + [0xb174, 0xb174], /* Hangul Syllable */ + [0xb175, 0xb175], /* Hangul Syllable */ + [0xb176, 0xb176], /* Hangul Syllable */ + [0xb177, 0xb177], /* Hangul Syllable */ + [0xb178, 0xb178], /* Hangul Syllable */ + [0xb179, 0xb179], /* Hangul Syllable */ + [0xb17a, 0xb17a], /* Hangul Syllable */ + [0xb17b, 0xb17b], /* Hangul Syllable */ + [0xb17c, 0xb17c], /* Hangul Syllable */ + [0xb17d, 0xb17d], /* Hangul Syllable */ + [0xb17e, 0xb17e], /* Hangul Syllable */ + [0xb17f, 0xb17f], /* Hangul Syllable */ + [0xb180, 0xb180], /* Hangul Syllable */ + [0xb181, 0xb181], /* Hangul Syllable */ + [0xb182, 0xb182], /* Hangul Syllable */ + [0xb183, 0xb183], /* Hangul Syllable */ + [0xb184, 0xb184], /* Hangul Syllable */ + [0xb185, 0xb185], /* Hangul Syllable */ + [0xb186, 0xb186], /* Hangul Syllable */ + [0xb187, 0xb187], /* Hangul Syllable */ + [0xb188, 0xb188], /* Hangul Syllable */ + [0xb189, 0xb189], /* Hangul Syllable */ + [0xb18a, 0xb18a], /* Hangul Syllable */ + [0xb18b, 0xb18b], /* Hangul Syllable */ + [0xb18c, 0xb18c], /* Hangul Syllable */ + [0xb18d, 0xb18d], /* Hangul Syllable */ + [0xb18e, 0xb18e], /* Hangul Syllable */ + [0xb18f, 0xb18f], /* Hangul Syllable */ + [0xb190, 0xb190], /* Hangul Syllable */ + [0xb191, 0xb191], /* Hangul Syllable */ + [0xb192, 0xb192], /* Hangul Syllable */ + [0xb193, 0xb193], /* Hangul Syllable */ + [0xb194, 0xb194], /* Hangul Syllable */ + [0xb195, 0xb195], /* Hangul Syllable */ + [0xb196, 0xb196], /* Hangul Syllable */ + [0xb197, 0xb197], /* Hangul Syllable */ + [0xb198, 0xb198], /* Hangul Syllable */ + [0xb199, 0xb199], /* Hangul Syllable */ + [0xb19a, 0xb19a], /* Hangul Syllable */ + [0xb19b, 0xb19b], /* Hangul Syllable */ + [0xb19c, 0xb19c], /* Hangul Syllable */ + [0xb19d, 0xb19d], /* Hangul Syllable */ + [0xb19e, 0xb19e], /* Hangul Syllable */ + [0xb19f, 0xb19f], /* Hangul Syllable */ + [0xb1a0, 0xb1a0], /* Hangul Syllable */ + [0xb1a1, 0xb1a1], /* Hangul Syllable */ + [0xb1a2, 0xb1a2], /* Hangul Syllable */ + [0xb1a3, 0xb1a3], /* Hangul Syllable */ + [0xb1a4, 0xb1a4], /* Hangul Syllable */ + [0xb1a5, 0xb1a5], /* Hangul Syllable */ + [0xb1a6, 0xb1a6], /* Hangul Syllable */ + [0xb1a7, 0xb1a7], /* Hangul Syllable */ + [0xb1a8, 0xb1a8], /* Hangul Syllable */ + [0xb1a9, 0xb1a9], /* Hangul Syllable */ + [0xb1aa, 0xb1aa], /* Hangul Syllable */ + [0xb1ab, 0xb1ab], /* Hangul Syllable */ + [0xb1ac, 0xb1ac], /* Hangul Syllable */ + [0xb1ad, 0xb1ad], /* Hangul Syllable */ + [0xb1ae, 0xb1ae], /* Hangul Syllable */ + [0xb1af, 0xb1af], /* Hangul Syllable */ + [0xb1b0, 0xb1b0], /* Hangul Syllable */ + [0xb1b1, 0xb1b1], /* Hangul Syllable */ + [0xb1b2, 0xb1b2], /* Hangul Syllable */ + [0xb1b3, 0xb1b3], /* Hangul Syllable */ + [0xb1b4, 0xb1b4], /* Hangul Syllable */ + [0xb1b5, 0xb1b5], /* Hangul Syllable */ + [0xb1b6, 0xb1b6], /* Hangul Syllable */ + [0xb1b7, 0xb1b7], /* Hangul Syllable */ + [0xb1b8, 0xb1b8], /* Hangul Syllable */ + [0xb1b9, 0xb1b9], /* Hangul Syllable */ + [0xb1ba, 0xb1ba], /* Hangul Syllable */ + [0xb1bb, 0xb1bb], /* Hangul Syllable */ + [0xb1bc, 0xb1bc], /* Hangul Syllable */ + [0xb1bd, 0xb1bd], /* Hangul Syllable */ + [0xb1be, 0xb1be], /* Hangul Syllable */ + [0xb1bf, 0xb1bf], /* Hangul Syllable */ + [0xb1c0, 0xb1c0], /* Hangul Syllable */ + [0xb1c1, 0xb1c1], /* Hangul Syllable */ + [0xb1c2, 0xb1c2], /* Hangul Syllable */ + [0xb1c3, 0xb1c3], /* Hangul Syllable */ + [0xb1c4, 0xb1c4], /* Hangul Syllable */ + [0xb1c5, 0xb1c5], /* Hangul Syllable */ + [0xb1c6, 0xb1c6], /* Hangul Syllable */ + [0xb1c7, 0xb1c7], /* Hangul Syllable */ + [0xb1c8, 0xb1c8], /* Hangul Syllable */ + [0xb1c9, 0xb1c9], /* Hangul Syllable */ + [0xb1ca, 0xb1ca], /* Hangul Syllable */ + [0xb1cb, 0xb1cb], /* Hangul Syllable */ + [0xb1cc, 0xb1cc], /* Hangul Syllable */ + [0xb1cd, 0xb1cd], /* Hangul Syllable */ + [0xb1ce, 0xb1ce], /* Hangul Syllable */ + [0xb1cf, 0xb1cf], /* Hangul Syllable */ + [0xb1d0, 0xb1d0], /* Hangul Syllable */ + [0xb1d1, 0xb1d1], /* Hangul Syllable */ + [0xb1d2, 0xb1d2], /* Hangul Syllable */ + [0xb1d3, 0xb1d3], /* Hangul Syllable */ + [0xb1d4, 0xb1d4], /* Hangul Syllable */ + [0xb1d5, 0xb1d5], /* Hangul Syllable */ + [0xb1d6, 0xb1d6], /* Hangul Syllable */ + [0xb1d7, 0xb1d7], /* Hangul Syllable */ + [0xb1d8, 0xb1d8], /* Hangul Syllable */ + [0xb1d9, 0xb1d9], /* Hangul Syllable */ + [0xb1da, 0xb1da], /* Hangul Syllable */ + [0xb1db, 0xb1db], /* Hangul Syllable */ + [0xb1dc, 0xb1dc], /* Hangul Syllable */ + [0xb1dd, 0xb1dd], /* Hangul Syllable */ + [0xb1de, 0xb1de], /* Hangul Syllable */ + [0xb1df, 0xb1df], /* Hangul Syllable */ + [0xb1e0, 0xb1e0], /* Hangul Syllable */ + [0xb1e1, 0xb1e1], /* Hangul Syllable */ + [0xb1e2, 0xb1e2], /* Hangul Syllable */ + [0xb1e3, 0xb1e3], /* Hangul Syllable */ + [0xb1e4, 0xb1e4], /* Hangul Syllable */ + [0xb1e5, 0xb1e5], /* Hangul Syllable */ + [0xb1e6, 0xb1e6], /* Hangul Syllable */ + [0xb1e7, 0xb1e7], /* Hangul Syllable */ + [0xb1e8, 0xb1e8], /* Hangul Syllable */ + [0xb1e9, 0xb1e9], /* Hangul Syllable */ + [0xb1ea, 0xb1ea], /* Hangul Syllable */ + [0xb1eb, 0xb1eb], /* Hangul Syllable */ + [0xb1ec, 0xb1ec], /* Hangul Syllable */ + [0xb1ed, 0xb1ed], /* Hangul Syllable */ + [0xb1ee, 0xb1ee], /* Hangul Syllable */ + [0xb1ef, 0xb1ef], /* Hangul Syllable */ + [0xb1f0, 0xb1f0], /* Hangul Syllable */ + [0xb1f1, 0xb1f1], /* Hangul Syllable */ + [0xb1f2, 0xb1f2], /* Hangul Syllable */ + [0xb1f3, 0xb1f3], /* Hangul Syllable */ + [0xb1f4, 0xb1f4], /* Hangul Syllable */ + [0xb1f5, 0xb1f5], /* Hangul Syllable */ + [0xb1f6, 0xb1f6], /* Hangul Syllable */ + [0xb1f7, 0xb1f7], /* Hangul Syllable */ + [0xb1f8, 0xb1f8], /* Hangul Syllable */ + [0xb1f9, 0xb1f9], /* Hangul Syllable */ + [0xb1fa, 0xb1fa], /* Hangul Syllable */ + [0xb1fb, 0xb1fb], /* Hangul Syllable */ + [0xb1fc, 0xb1fc], /* Hangul Syllable */ + [0xb1fd, 0xb1fd], /* Hangul Syllable */ + [0xb1fe, 0xb1fe], /* Hangul Syllable */ + [0xb1ff, 0xb1ff], /* Hangul Syllable */ + [0xb200, 0xb200], /* Hangul Syllable */ + [0xb201, 0xb201], /* Hangul Syllable */ + [0xb202, 0xb202], /* Hangul Syllable */ + [0xb203, 0xb203], /* Hangul Syllable */ + [0xb204, 0xb204], /* Hangul Syllable */ + [0xb205, 0xb205], /* Hangul Syllable */ + [0xb206, 0xb206], /* Hangul Syllable */ + [0xb207, 0xb207], /* Hangul Syllable */ + [0xb208, 0xb208], /* Hangul Syllable */ + [0xb209, 0xb209], /* Hangul Syllable */ + [0xb20a, 0xb20a], /* Hangul Syllable */ + [0xb20b, 0xb20b], /* Hangul Syllable */ + [0xb20c, 0xb20c], /* Hangul Syllable */ + [0xb20d, 0xb20d], /* Hangul Syllable */ + [0xb20e, 0xb20e], /* Hangul Syllable */ + [0xb20f, 0xb20f], /* Hangul Syllable */ + [0xb210, 0xb210], /* Hangul Syllable */ + [0xb211, 0xb211], /* Hangul Syllable */ + [0xb212, 0xb212], /* Hangul Syllable */ + [0xb213, 0xb213], /* Hangul Syllable */ + [0xb214, 0xb214], /* Hangul Syllable */ + [0xb215, 0xb215], /* Hangul Syllable */ + [0xb216, 0xb216], /* Hangul Syllable */ + [0xb217, 0xb217], /* Hangul Syllable */ + [0xb218, 0xb218], /* Hangul Syllable */ + [0xb219, 0xb219], /* Hangul Syllable */ + [0xb21a, 0xb21a], /* Hangul Syllable */ + [0xb21b, 0xb21b], /* Hangul Syllable */ + [0xb21c, 0xb21c], /* Hangul Syllable */ + [0xb21d, 0xb21d], /* Hangul Syllable */ + [0xb21e, 0xb21e], /* Hangul Syllable */ + [0xb21f, 0xb21f], /* Hangul Syllable */ + [0xb220, 0xb220], /* Hangul Syllable */ + [0xb221, 0xb221], /* Hangul Syllable */ + [0xb222, 0xb222], /* Hangul Syllable */ + [0xb223, 0xb223], /* Hangul Syllable */ + [0xb224, 0xb224], /* Hangul Syllable */ + [0xb225, 0xb225], /* Hangul Syllable */ + [0xb226, 0xb226], /* Hangul Syllable */ + [0xb227, 0xb227], /* Hangul Syllable */ + [0xb228, 0xb228], /* Hangul Syllable */ + [0xb229, 0xb229], /* Hangul Syllable */ + [0xb22a, 0xb22a], /* Hangul Syllable */ + [0xb22b, 0xb22b], /* Hangul Syllable */ + [0xb22c, 0xb22c], /* Hangul Syllable */ + [0xb22d, 0xb22d], /* Hangul Syllable */ + [0xb22e, 0xb22e], /* Hangul Syllable */ + [0xb22f, 0xb22f], /* Hangul Syllable */ + [0xb230, 0xb230], /* Hangul Syllable */ + [0xb231, 0xb231], /* Hangul Syllable */ + [0xb232, 0xb232], /* Hangul Syllable */ + [0xb233, 0xb233], /* Hangul Syllable */ + [0xb234, 0xb234], /* Hangul Syllable */ + [0xb235, 0xb235], /* Hangul Syllable */ + [0xb236, 0xb236], /* Hangul Syllable */ + [0xb237, 0xb237], /* Hangul Syllable */ + [0xb238, 0xb238], /* Hangul Syllable */ + [0xb239, 0xb239], /* Hangul Syllable */ + [0xb23a, 0xb23a], /* Hangul Syllable */ + [0xb23b, 0xb23b], /* Hangul Syllable */ + [0xb23c, 0xb23c], /* Hangul Syllable */ + [0xb23d, 0xb23d], /* Hangul Syllable */ + [0xb23e, 0xb23e], /* Hangul Syllable */ + [0xb23f, 0xb23f], /* Hangul Syllable */ + [0xb240, 0xb240], /* Hangul Syllable */ + [0xb241, 0xb241], /* Hangul Syllable */ + [0xb242, 0xb242], /* Hangul Syllable */ + [0xb243, 0xb243], /* Hangul Syllable */ + [0xb244, 0xb244], /* Hangul Syllable */ + [0xb245, 0xb245], /* Hangul Syllable */ + [0xb246, 0xb246], /* Hangul Syllable */ + [0xb247, 0xb247], /* Hangul Syllable */ + [0xb248, 0xb248], /* Hangul Syllable */ + [0xb249, 0xb249], /* Hangul Syllable */ + [0xb24a, 0xb24a], /* Hangul Syllable */ + [0xb24b, 0xb24b], /* Hangul Syllable */ + [0xb24c, 0xb24c], /* Hangul Syllable */ + [0xb24d, 0xb24d], /* Hangul Syllable */ + [0xb24e, 0xb24e], /* Hangul Syllable */ + [0xb24f, 0xb24f], /* Hangul Syllable */ + [0xb250, 0xb250], /* Hangul Syllable */ + [0xb251, 0xb251], /* Hangul Syllable */ + [0xb252, 0xb252], /* Hangul Syllable */ + [0xb253, 0xb253], /* Hangul Syllable */ + [0xb254, 0xb254], /* Hangul Syllable */ + [0xb255, 0xb255], /* Hangul Syllable */ + [0xb256, 0xb256], /* Hangul Syllable */ + [0xb257, 0xb257], /* Hangul Syllable */ + [0xb258, 0xb258], /* Hangul Syllable */ + [0xb259, 0xb259], /* Hangul Syllable */ + [0xb25a, 0xb25a], /* Hangul Syllable */ + [0xb25b, 0xb25b], /* Hangul Syllable */ + [0xb25c, 0xb25c], /* Hangul Syllable */ + [0xb25d, 0xb25d], /* Hangul Syllable */ + [0xb25e, 0xb25e], /* Hangul Syllable */ + [0xb25f, 0xb25f], /* Hangul Syllable */ + [0xb260, 0xb260], /* Hangul Syllable */ + [0xb261, 0xb261], /* Hangul Syllable */ + [0xb262, 0xb262], /* Hangul Syllable */ + [0xb263, 0xb263], /* Hangul Syllable */ + [0xb264, 0xb264], /* Hangul Syllable */ + [0xb265, 0xb265], /* Hangul Syllable */ + [0xb266, 0xb266], /* Hangul Syllable */ + [0xb267, 0xb267], /* Hangul Syllable */ + [0xb268, 0xb268], /* Hangul Syllable */ + [0xb269, 0xb269], /* Hangul Syllable */ + [0xb26a, 0xb26a], /* Hangul Syllable */ + [0xb26b, 0xb26b], /* Hangul Syllable */ + [0xb26c, 0xb26c], /* Hangul Syllable */ + [0xb26d, 0xb26d], /* Hangul Syllable */ + [0xb26e, 0xb26e], /* Hangul Syllable */ + [0xb26f, 0xb26f], /* Hangul Syllable */ + [0xb270, 0xb270], /* Hangul Syllable */ + [0xb271, 0xb271], /* Hangul Syllable */ + [0xb272, 0xb272], /* Hangul Syllable */ + [0xb273, 0xb273], /* Hangul Syllable */ + [0xb274, 0xb274], /* Hangul Syllable */ + [0xb275, 0xb275], /* Hangul Syllable */ + [0xb276, 0xb276], /* Hangul Syllable */ + [0xb277, 0xb277], /* Hangul Syllable */ + [0xb278, 0xb278], /* Hangul Syllable */ + [0xb279, 0xb279], /* Hangul Syllable */ + [0xb27a, 0xb27a], /* Hangul Syllable */ + [0xb27b, 0xb27b], /* Hangul Syllable */ + [0xb27c, 0xb27c], /* Hangul Syllable */ + [0xb27d, 0xb27d], /* Hangul Syllable */ + [0xb27e, 0xb27e], /* Hangul Syllable */ + [0xb27f, 0xb27f], /* Hangul Syllable */ + [0xb280, 0xb280], /* Hangul Syllable */ + [0xb281, 0xb281], /* Hangul Syllable */ + [0xb282, 0xb282], /* Hangul Syllable */ + [0xb283, 0xb283], /* Hangul Syllable */ + [0xb284, 0xb284], /* Hangul Syllable */ + [0xb285, 0xb285], /* Hangul Syllable */ + [0xb286, 0xb286], /* Hangul Syllable */ + [0xb287, 0xb287], /* Hangul Syllable */ + [0xb288, 0xb288], /* Hangul Syllable */ + [0xb289, 0xb289], /* Hangul Syllable */ + [0xb28a, 0xb28a], /* Hangul Syllable */ + [0xb28b, 0xb28b], /* Hangul Syllable */ + [0xb28c, 0xb28c], /* Hangul Syllable */ + [0xb28d, 0xb28d], /* Hangul Syllable */ + [0xb28e, 0xb28e], /* Hangul Syllable */ + [0xb28f, 0xb28f], /* Hangul Syllable */ + [0xb290, 0xb290], /* Hangul Syllable */ + [0xb291, 0xb291], /* Hangul Syllable */ + [0xb292, 0xb292], /* Hangul Syllable */ + [0xb293, 0xb293], /* Hangul Syllable */ + [0xb294, 0xb294], /* Hangul Syllable */ + [0xb295, 0xb295], /* Hangul Syllable */ + [0xb296, 0xb296], /* Hangul Syllable */ + [0xb297, 0xb297], /* Hangul Syllable */ + [0xb298, 0xb298], /* Hangul Syllable */ + [0xb299, 0xb299], /* Hangul Syllable */ + [0xb29a, 0xb29a], /* Hangul Syllable */ + [0xb29b, 0xb29b], /* Hangul Syllable */ + [0xb29c, 0xb29c], /* Hangul Syllable */ + [0xb29d, 0xb29d], /* Hangul Syllable */ + [0xb29e, 0xb29e], /* Hangul Syllable */ + [0xb29f, 0xb29f], /* Hangul Syllable */ + [0xb2a0, 0xb2a0], /* Hangul Syllable */ + [0xb2a1, 0xb2a1], /* Hangul Syllable */ + [0xb2a2, 0xb2a2], /* Hangul Syllable */ + [0xb2a3, 0xb2a3], /* Hangul Syllable */ + [0xb2a4, 0xb2a4], /* Hangul Syllable */ + [0xb2a5, 0xb2a5], /* Hangul Syllable */ + [0xb2a6, 0xb2a6], /* Hangul Syllable */ + [0xb2a7, 0xb2a7], /* Hangul Syllable */ + [0xb2a8, 0xb2a8], /* Hangul Syllable */ + [0xb2a9, 0xb2a9], /* Hangul Syllable */ + [0xb2aa, 0xb2aa], /* Hangul Syllable */ + [0xb2ab, 0xb2ab], /* Hangul Syllable */ + [0xb2ac, 0xb2ac], /* Hangul Syllable */ + [0xb2ad, 0xb2ad], /* Hangul Syllable */ + [0xb2ae, 0xb2ae], /* Hangul Syllable */ + [0xb2af, 0xb2af], /* Hangul Syllable */ + [0xb2b0, 0xb2b0], /* Hangul Syllable */ + [0xb2b1, 0xb2b1], /* Hangul Syllable */ + [0xb2b2, 0xb2b2], /* Hangul Syllable */ + [0xb2b3, 0xb2b3], /* Hangul Syllable */ + [0xb2b4, 0xb2b4], /* Hangul Syllable */ + [0xb2b5, 0xb2b5], /* Hangul Syllable */ + [0xb2b6, 0xb2b6], /* Hangul Syllable */ + [0xb2b7, 0xb2b7], /* Hangul Syllable */ + [0xb2b8, 0xb2b8], /* Hangul Syllable */ + [0xb2b9, 0xb2b9], /* Hangul Syllable */ + [0xb2ba, 0xb2ba], /* Hangul Syllable */ + [0xb2bb, 0xb2bb], /* Hangul Syllable */ + [0xb2bc, 0xb2bc], /* Hangul Syllable */ + [0xb2bd, 0xb2bd], /* Hangul Syllable */ + [0xb2be, 0xb2be], /* Hangul Syllable */ + [0xb2bf, 0xb2bf], /* Hangul Syllable */ + [0xb2c0, 0xb2c0], /* Hangul Syllable */ + [0xb2c1, 0xb2c1], /* Hangul Syllable */ + [0xb2c2, 0xb2c2], /* Hangul Syllable */ + [0xb2c3, 0xb2c3], /* Hangul Syllable */ + [0xb2c4, 0xb2c4], /* Hangul Syllable */ + [0xb2c5, 0xb2c5], /* Hangul Syllable */ + [0xb2c6, 0xb2c6], /* Hangul Syllable */ + [0xb2c7, 0xb2c7], /* Hangul Syllable */ + [0xb2c8, 0xb2c8], /* Hangul Syllable */ + [0xb2c9, 0xb2c9], /* Hangul Syllable */ + [0xb2ca, 0xb2ca], /* Hangul Syllable */ + [0xb2cb, 0xb2cb], /* Hangul Syllable */ + [0xb2cc, 0xb2cc], /* Hangul Syllable */ + [0xb2cd, 0xb2cd], /* Hangul Syllable */ + [0xb2ce, 0xb2ce], /* Hangul Syllable */ + [0xb2cf, 0xb2cf], /* Hangul Syllable */ + [0xb2d0, 0xb2d0], /* Hangul Syllable */ + [0xb2d1, 0xb2d1], /* Hangul Syllable */ + [0xb2d2, 0xb2d2], /* Hangul Syllable */ + [0xb2d3, 0xb2d3], /* Hangul Syllable */ + [0xb2d4, 0xb2d4], /* Hangul Syllable */ + [0xb2d5, 0xb2d5], /* Hangul Syllable */ + [0xb2d6, 0xb2d6], /* Hangul Syllable */ + [0xb2d7, 0xb2d7], /* Hangul Syllable */ + [0xb2d8, 0xb2d8], /* Hangul Syllable */ + [0xb2d9, 0xb2d9], /* Hangul Syllable */ + [0xb2da, 0xb2da], /* Hangul Syllable */ + [0xb2db, 0xb2db], /* Hangul Syllable */ + [0xb2dc, 0xb2dc], /* Hangul Syllable */ + [0xb2dd, 0xb2dd], /* Hangul Syllable */ + [0xb2de, 0xb2de], /* Hangul Syllable */ + [0xb2df, 0xb2df], /* Hangul Syllable */ + [0xb2e0, 0xb2e0], /* Hangul Syllable */ + [0xb2e1, 0xb2e1], /* Hangul Syllable */ + [0xb2e2, 0xb2e2], /* Hangul Syllable */ + [0xb2e3, 0xb2e3], /* Hangul Syllable */ + [0xb2e4, 0xb2e4], /* Hangul Syllable */ + [0xb2e5, 0xb2e5], /* Hangul Syllable */ + [0xb2e6, 0xb2e6], /* Hangul Syllable */ + [0xb2e7, 0xb2e7], /* Hangul Syllable */ + [0xb2e8, 0xb2e8], /* Hangul Syllable */ + [0xb2e9, 0xb2e9], /* Hangul Syllable */ + [0xb2ea, 0xb2ea], /* Hangul Syllable */ + [0xb2eb, 0xb2eb], /* Hangul Syllable */ + [0xb2ec, 0xb2ec], /* Hangul Syllable */ + [0xb2ed, 0xb2ed], /* Hangul Syllable */ + [0xb2ee, 0xb2ee], /* Hangul Syllable */ + [0xb2ef, 0xb2ef], /* Hangul Syllable */ + [0xb2f0, 0xb2f0], /* Hangul Syllable */ + [0xb2f1, 0xb2f1], /* Hangul Syllable */ + [0xb2f2, 0xb2f2], /* Hangul Syllable */ + [0xb2f3, 0xb2f3], /* Hangul Syllable */ + [0xb2f4, 0xb2f4], /* Hangul Syllable */ + [0xb2f5, 0xb2f5], /* Hangul Syllable */ + [0xb2f6, 0xb2f6], /* Hangul Syllable */ + [0xb2f7, 0xb2f7], /* Hangul Syllable */ + [0xb2f8, 0xb2f8], /* Hangul Syllable */ + [0xb2f9, 0xb2f9], /* Hangul Syllable */ + [0xb2fa, 0xb2fa], /* Hangul Syllable */ + [0xb2fb, 0xb2fb], /* Hangul Syllable */ + [0xb2fc, 0xb2fc], /* Hangul Syllable */ + [0xb2fd, 0xb2fd], /* Hangul Syllable */ + [0xb2fe, 0xb2fe], /* Hangul Syllable */ + [0xb2ff, 0xb2ff], /* Hangul Syllable */ + [0xb300, 0xb300], /* Hangul Syllable */ + [0xb301, 0xb301], /* Hangul Syllable */ + [0xb302, 0xb302], /* Hangul Syllable */ + [0xb303, 0xb303], /* Hangul Syllable */ + [0xb304, 0xb304], /* Hangul Syllable */ + [0xb305, 0xb305], /* Hangul Syllable */ + [0xb306, 0xb306], /* Hangul Syllable */ + [0xb307, 0xb307], /* Hangul Syllable */ + [0xb308, 0xb308], /* Hangul Syllable */ + [0xb309, 0xb309], /* Hangul Syllable */ + [0xb30a, 0xb30a], /* Hangul Syllable */ + [0xb30b, 0xb30b], /* Hangul Syllable */ + [0xb30c, 0xb30c], /* Hangul Syllable */ + [0xb30d, 0xb30d], /* Hangul Syllable */ + [0xb30e, 0xb30e], /* Hangul Syllable */ + [0xb30f, 0xb30f], /* Hangul Syllable */ + [0xb310, 0xb310], /* Hangul Syllable */ + [0xb311, 0xb311], /* Hangul Syllable */ + [0xb312, 0xb312], /* Hangul Syllable */ + [0xb313, 0xb313], /* Hangul Syllable */ + [0xb314, 0xb314], /* Hangul Syllable */ + [0xb315, 0xb315], /* Hangul Syllable */ + [0xb316, 0xb316], /* Hangul Syllable */ + [0xb317, 0xb317], /* Hangul Syllable */ + [0xb318, 0xb318], /* Hangul Syllable */ + [0xb319, 0xb319], /* Hangul Syllable */ + [0xb31a, 0xb31a], /* Hangul Syllable */ + [0xb31b, 0xb31b], /* Hangul Syllable */ + [0xb31c, 0xb31c], /* Hangul Syllable */ + [0xb31d, 0xb31d], /* Hangul Syllable */ + [0xb31e, 0xb31e], /* Hangul Syllable */ + [0xb31f, 0xb31f], /* Hangul Syllable */ + [0xb320, 0xb320], /* Hangul Syllable */ + [0xb321, 0xb321], /* Hangul Syllable */ + [0xb322, 0xb322], /* Hangul Syllable */ + [0xb323, 0xb323], /* Hangul Syllable */ + [0xb324, 0xb324], /* Hangul Syllable */ + [0xb325, 0xb325], /* Hangul Syllable */ + [0xb326, 0xb326], /* Hangul Syllable */ + [0xb327, 0xb327], /* Hangul Syllable */ + [0xb328, 0xb328], /* Hangul Syllable */ + [0xb329, 0xb329], /* Hangul Syllable */ + [0xb32a, 0xb32a], /* Hangul Syllable */ + [0xb32b, 0xb32b], /* Hangul Syllable */ + [0xb32c, 0xb32c], /* Hangul Syllable */ + [0xb32d, 0xb32d], /* Hangul Syllable */ + [0xb32e, 0xb32e], /* Hangul Syllable */ + [0xb32f, 0xb32f], /* Hangul Syllable */ + [0xb330, 0xb330], /* Hangul Syllable */ + [0xb331, 0xb331], /* Hangul Syllable */ + [0xb332, 0xb332], /* Hangul Syllable */ + [0xb333, 0xb333], /* Hangul Syllable */ + [0xb334, 0xb334], /* Hangul Syllable */ + [0xb335, 0xb335], /* Hangul Syllable */ + [0xb336, 0xb336], /* Hangul Syllable */ + [0xb337, 0xb337], /* Hangul Syllable */ + [0xb338, 0xb338], /* Hangul Syllable */ + [0xb339, 0xb339], /* Hangul Syllable */ + [0xb33a, 0xb33a], /* Hangul Syllable */ + [0xb33b, 0xb33b], /* Hangul Syllable */ + [0xb33c, 0xb33c], /* Hangul Syllable */ + [0xb33d, 0xb33d], /* Hangul Syllable */ + [0xb33e, 0xb33e], /* Hangul Syllable */ + [0xb33f, 0xb33f], /* Hangul Syllable */ + [0xb340, 0xb340], /* Hangul Syllable */ + [0xb341, 0xb341], /* Hangul Syllable */ + [0xb342, 0xb342], /* Hangul Syllable */ + [0xb343, 0xb343], /* Hangul Syllable */ + [0xb344, 0xb344], /* Hangul Syllable */ + [0xb345, 0xb345], /* Hangul Syllable */ + [0xb346, 0xb346], /* Hangul Syllable */ + [0xb347, 0xb347], /* Hangul Syllable */ + [0xb348, 0xb348], /* Hangul Syllable */ + [0xb349, 0xb349], /* Hangul Syllable */ + [0xb34a, 0xb34a], /* Hangul Syllable */ + [0xb34b, 0xb34b], /* Hangul Syllable */ + [0xb34c, 0xb34c], /* Hangul Syllable */ + [0xb34d, 0xb34d], /* Hangul Syllable */ + [0xb34e, 0xb34e], /* Hangul Syllable */ + [0xb34f, 0xb34f], /* Hangul Syllable */ + [0xb350, 0xb350], /* Hangul Syllable */ + [0xb351, 0xb351], /* Hangul Syllable */ + [0xb352, 0xb352], /* Hangul Syllable */ + [0xb353, 0xb353], /* Hangul Syllable */ + [0xb354, 0xb354], /* Hangul Syllable */ + [0xb355, 0xb355], /* Hangul Syllable */ + [0xb356, 0xb356], /* Hangul Syllable */ + [0xb357, 0xb357], /* Hangul Syllable */ + [0xb358, 0xb358], /* Hangul Syllable */ + [0xb359, 0xb359], /* Hangul Syllable */ + [0xb35a, 0xb35a], /* Hangul Syllable */ + [0xb35b, 0xb35b], /* Hangul Syllable */ + [0xb35c, 0xb35c], /* Hangul Syllable */ + [0xb35d, 0xb35d], /* Hangul Syllable */ + [0xb35e, 0xb35e], /* Hangul Syllable */ + [0xb35f, 0xb35f], /* Hangul Syllable */ + [0xb360, 0xb360], /* Hangul Syllable */ + [0xb361, 0xb361], /* Hangul Syllable */ + [0xb362, 0xb362], /* Hangul Syllable */ + [0xb363, 0xb363], /* Hangul Syllable */ + [0xb364, 0xb364], /* Hangul Syllable */ + [0xb365, 0xb365], /* Hangul Syllable */ + [0xb366, 0xb366], /* Hangul Syllable */ + [0xb367, 0xb367], /* Hangul Syllable */ + [0xb368, 0xb368], /* Hangul Syllable */ + [0xb369, 0xb369], /* Hangul Syllable */ + [0xb36a, 0xb36a], /* Hangul Syllable */ + [0xb36b, 0xb36b], /* Hangul Syllable */ + [0xb36c, 0xb36c], /* Hangul Syllable */ + [0xb36d, 0xb36d], /* Hangul Syllable */ + [0xb36e, 0xb36e], /* Hangul Syllable */ + [0xb36f, 0xb36f], /* Hangul Syllable */ + [0xb370, 0xb370], /* Hangul Syllable */ + [0xb371, 0xb371], /* Hangul Syllable */ + [0xb372, 0xb372], /* Hangul Syllable */ + [0xb373, 0xb373], /* Hangul Syllable */ + [0xb374, 0xb374], /* Hangul Syllable */ + [0xb375, 0xb375], /* Hangul Syllable */ + [0xb376, 0xb376], /* Hangul Syllable */ + [0xb377, 0xb377], /* Hangul Syllable */ + [0xb378, 0xb378], /* Hangul Syllable */ + [0xb379, 0xb379], /* Hangul Syllable */ + [0xb37a, 0xb37a], /* Hangul Syllable */ + [0xb37b, 0xb37b], /* Hangul Syllable */ + [0xb37c, 0xb37c], /* Hangul Syllable */ + [0xb37d, 0xb37d], /* Hangul Syllable */ + [0xb37e, 0xb37e], /* Hangul Syllable */ + [0xb37f, 0xb37f], /* Hangul Syllable */ + [0xb380, 0xb380], /* Hangul Syllable */ + [0xb381, 0xb381], /* Hangul Syllable */ + [0xb382, 0xb382], /* Hangul Syllable */ + [0xb383, 0xb383], /* Hangul Syllable */ + [0xb384, 0xb384], /* Hangul Syllable */ + [0xb385, 0xb385], /* Hangul Syllable */ + [0xb386, 0xb386], /* Hangul Syllable */ + [0xb387, 0xb387], /* Hangul Syllable */ + [0xb388, 0xb388], /* Hangul Syllable */ + [0xb389, 0xb389], /* Hangul Syllable */ + [0xb38a, 0xb38a], /* Hangul Syllable */ + [0xb38b, 0xb38b], /* Hangul Syllable */ + [0xb38c, 0xb38c], /* Hangul Syllable */ + [0xb38d, 0xb38d], /* Hangul Syllable */ + [0xb38e, 0xb38e], /* Hangul Syllable */ + [0xb38f, 0xb38f], /* Hangul Syllable */ + [0xb390, 0xb390], /* Hangul Syllable */ + [0xb391, 0xb391], /* Hangul Syllable */ + [0xb392, 0xb392], /* Hangul Syllable */ + [0xb393, 0xb393], /* Hangul Syllable */ + [0xb394, 0xb394], /* Hangul Syllable */ + [0xb395, 0xb395], /* Hangul Syllable */ + [0xb396, 0xb396], /* Hangul Syllable */ + [0xb397, 0xb397], /* Hangul Syllable */ + [0xb398, 0xb398], /* Hangul Syllable */ + [0xb399, 0xb399], /* Hangul Syllable */ + [0xb39a, 0xb39a], /* Hangul Syllable */ + [0xb39b, 0xb39b], /* Hangul Syllable */ + [0xb39c, 0xb39c], /* Hangul Syllable */ + [0xb39d, 0xb39d], /* Hangul Syllable */ + [0xb39e, 0xb39e], /* Hangul Syllable */ + [0xb39f, 0xb39f], /* Hangul Syllable */ + [0xb3a0, 0xb3a0], /* Hangul Syllable */ + [0xb3a1, 0xb3a1], /* Hangul Syllable */ + [0xb3a2, 0xb3a2], /* Hangul Syllable */ + [0xb3a3, 0xb3a3], /* Hangul Syllable */ + [0xb3a4, 0xb3a4], /* Hangul Syllable */ + [0xb3a5, 0xb3a5], /* Hangul Syllable */ + [0xb3a6, 0xb3a6], /* Hangul Syllable */ + [0xb3a7, 0xb3a7], /* Hangul Syllable */ + [0xb3a8, 0xb3a8], /* Hangul Syllable */ + [0xb3a9, 0xb3a9], /* Hangul Syllable */ + [0xb3aa, 0xb3aa], /* Hangul Syllable */ + [0xb3ab, 0xb3ab], /* Hangul Syllable */ + [0xb3ac, 0xb3ac], /* Hangul Syllable */ + [0xb3ad, 0xb3ad], /* Hangul Syllable */ + [0xb3ae, 0xb3ae], /* Hangul Syllable */ + [0xb3af, 0xb3af], /* Hangul Syllable */ + [0xb3b0, 0xb3b0], /* Hangul Syllable */ + [0xb3b1, 0xb3b1], /* Hangul Syllable */ + [0xb3b2, 0xb3b2], /* Hangul Syllable */ + [0xb3b3, 0xb3b3], /* Hangul Syllable */ + [0xb3b4, 0xb3b4], /* Hangul Syllable */ + [0xb3b5, 0xb3b5], /* Hangul Syllable */ + [0xb3b6, 0xb3b6], /* Hangul Syllable */ + [0xb3b7, 0xb3b7], /* Hangul Syllable */ + [0xb3b8, 0xb3b8], /* Hangul Syllable */ + [0xb3b9, 0xb3b9], /* Hangul Syllable */ + [0xb3ba, 0xb3ba], /* Hangul Syllable */ + [0xb3bb, 0xb3bb], /* Hangul Syllable */ + [0xb3bc, 0xb3bc], /* Hangul Syllable */ + [0xb3bd, 0xb3bd], /* Hangul Syllable */ + [0xb3be, 0xb3be], /* Hangul Syllable */ + [0xb3bf, 0xb3bf], /* Hangul Syllable */ + [0xb3c0, 0xb3c0], /* Hangul Syllable */ + [0xb3c1, 0xb3c1], /* Hangul Syllable */ + [0xb3c2, 0xb3c2], /* Hangul Syllable */ + [0xb3c3, 0xb3c3], /* Hangul Syllable */ + [0xb3c4, 0xb3c4], /* Hangul Syllable */ + [0xb3c5, 0xb3c5], /* Hangul Syllable */ + [0xb3c6, 0xb3c6], /* Hangul Syllable */ + [0xb3c7, 0xb3c7], /* Hangul Syllable */ + [0xb3c8, 0xb3c8], /* Hangul Syllable */ + [0xb3c9, 0xb3c9], /* Hangul Syllable */ + [0xb3ca, 0xb3ca], /* Hangul Syllable */ + [0xb3cb, 0xb3cb], /* Hangul Syllable */ + [0xb3cc, 0xb3cc], /* Hangul Syllable */ + [0xb3cd, 0xb3cd], /* Hangul Syllable */ + [0xb3ce, 0xb3ce], /* Hangul Syllable */ + [0xb3cf, 0xb3cf], /* Hangul Syllable */ + [0xb3d0, 0xb3d0], /* Hangul Syllable */ + [0xb3d1, 0xb3d1], /* Hangul Syllable */ + [0xb3d2, 0xb3d2], /* Hangul Syllable */ + [0xb3d3, 0xb3d3], /* Hangul Syllable */ + [0xb3d4, 0xb3d4], /* Hangul Syllable */ + [0xb3d5, 0xb3d5], /* Hangul Syllable */ + [0xb3d6, 0xb3d6], /* Hangul Syllable */ + [0xb3d7, 0xb3d7], /* Hangul Syllable */ + [0xb3d8, 0xb3d8], /* Hangul Syllable */ + [0xb3d9, 0xb3d9], /* Hangul Syllable */ + [0xb3da, 0xb3da], /* Hangul Syllable */ + [0xb3db, 0xb3db], /* Hangul Syllable */ + [0xb3dc, 0xb3dc], /* Hangul Syllable */ + [0xb3dd, 0xb3dd], /* Hangul Syllable */ + [0xb3de, 0xb3de], /* Hangul Syllable */ + [0xb3df, 0xb3df], /* Hangul Syllable */ + [0xb3e0, 0xb3e0], /* Hangul Syllable */ + [0xb3e1, 0xb3e1], /* Hangul Syllable */ + [0xb3e2, 0xb3e2], /* Hangul Syllable */ + [0xb3e3, 0xb3e3], /* Hangul Syllable */ + [0xb3e4, 0xb3e4], /* Hangul Syllable */ + [0xb3e5, 0xb3e5], /* Hangul Syllable */ + [0xb3e6, 0xb3e6], /* Hangul Syllable */ + [0xb3e7, 0xb3e7], /* Hangul Syllable */ + [0xb3e8, 0xb3e8], /* Hangul Syllable */ + [0xb3e9, 0xb3e9], /* Hangul Syllable */ + [0xb3ea, 0xb3ea], /* Hangul Syllable */ + [0xb3eb, 0xb3eb], /* Hangul Syllable */ + [0xb3ec, 0xb3ec], /* Hangul Syllable */ + [0xb3ed, 0xb3ed], /* Hangul Syllable */ + [0xb3ee, 0xb3ee], /* Hangul Syllable */ + [0xb3ef, 0xb3ef], /* Hangul Syllable */ + [0xb3f0, 0xb3f0], /* Hangul Syllable */ + [0xb3f1, 0xb3f1], /* Hangul Syllable */ + [0xb3f2, 0xb3f2], /* Hangul Syllable */ + [0xb3f3, 0xb3f3], /* Hangul Syllable */ + [0xb3f4, 0xb3f4], /* Hangul Syllable */ + [0xb3f5, 0xb3f5], /* Hangul Syllable */ + [0xb3f6, 0xb3f6], /* Hangul Syllable */ + [0xb3f7, 0xb3f7], /* Hangul Syllable */ + [0xb3f8, 0xb3f8], /* Hangul Syllable */ + [0xb3f9, 0xb3f9], /* Hangul Syllable */ + [0xb3fa, 0xb3fa], /* Hangul Syllable */ + [0xb3fb, 0xb3fb], /* Hangul Syllable */ + [0xb3fc, 0xb3fc], /* Hangul Syllable */ + [0xb3fd, 0xb3fd], /* Hangul Syllable */ + [0xb3fe, 0xb3fe], /* Hangul Syllable */ + [0xb3ff, 0xb3ff], /* Hangul Syllable */ + [0xb400, 0xb400], /* Hangul Syllable */ + [0xb401, 0xb401], /* Hangul Syllable */ + [0xb402, 0xb402], /* Hangul Syllable */ + [0xb403, 0xb403], /* Hangul Syllable */ + [0xb404, 0xb404], /* Hangul Syllable */ + [0xb405, 0xb405], /* Hangul Syllable */ + [0xb406, 0xb406], /* Hangul Syllable */ + [0xb407, 0xb407], /* Hangul Syllable */ + [0xb408, 0xb408], /* Hangul Syllable */ + [0xb409, 0xb409], /* Hangul Syllable */ + [0xb40a, 0xb40a], /* Hangul Syllable */ + [0xb40b, 0xb40b], /* Hangul Syllable */ + [0xb40c, 0xb40c], /* Hangul Syllable */ + [0xb40d, 0xb40d], /* Hangul Syllable */ + [0xb40e, 0xb40e], /* Hangul Syllable */ + [0xb40f, 0xb40f], /* Hangul Syllable */ + [0xb410, 0xb410], /* Hangul Syllable */ + [0xb411, 0xb411], /* Hangul Syllable */ + [0xb412, 0xb412], /* Hangul Syllable */ + [0xb413, 0xb413], /* Hangul Syllable */ + [0xb414, 0xb414], /* Hangul Syllable */ + [0xb415, 0xb415], /* Hangul Syllable */ + [0xb416, 0xb416], /* Hangul Syllable */ + [0xb417, 0xb417], /* Hangul Syllable */ + [0xb418, 0xb418], /* Hangul Syllable */ + [0xb419, 0xb419], /* Hangul Syllable */ + [0xb41a, 0xb41a], /* Hangul Syllable */ + [0xb41b, 0xb41b], /* Hangul Syllable */ + [0xb41c, 0xb41c], /* Hangul Syllable */ + [0xb41d, 0xb41d], /* Hangul Syllable */ + [0xb41e, 0xb41e], /* Hangul Syllable */ + [0xb41f, 0xb41f], /* Hangul Syllable */ + [0xb420, 0xb420], /* Hangul Syllable */ + [0xb421, 0xb421], /* Hangul Syllable */ + [0xb422, 0xb422], /* Hangul Syllable */ + [0xb423, 0xb423], /* Hangul Syllable */ + [0xb424, 0xb424], /* Hangul Syllable */ + [0xb425, 0xb425], /* Hangul Syllable */ + [0xb426, 0xb426], /* Hangul Syllable */ + [0xb427, 0xb427], /* Hangul Syllable */ + [0xb428, 0xb428], /* Hangul Syllable */ + [0xb429, 0xb429], /* Hangul Syllable */ + [0xb42a, 0xb42a], /* Hangul Syllable */ + [0xb42b, 0xb42b], /* Hangul Syllable */ + [0xb42c, 0xb42c], /* Hangul Syllable */ + [0xb42d, 0xb42d], /* Hangul Syllable */ + [0xb42e, 0xb42e], /* Hangul Syllable */ + [0xb42f, 0xb42f], /* Hangul Syllable */ + [0xb430, 0xb430], /* Hangul Syllable */ + [0xb431, 0xb431], /* Hangul Syllable */ + [0xb432, 0xb432], /* Hangul Syllable */ + [0xb433, 0xb433], /* Hangul Syllable */ + [0xb434, 0xb434], /* Hangul Syllable */ + [0xb435, 0xb435], /* Hangul Syllable */ + [0xb436, 0xb436], /* Hangul Syllable */ + [0xb437, 0xb437], /* Hangul Syllable */ + [0xb438, 0xb438], /* Hangul Syllable */ + [0xb439, 0xb439], /* Hangul Syllable */ + [0xb43a, 0xb43a], /* Hangul Syllable */ + [0xb43b, 0xb43b], /* Hangul Syllable */ + [0xb43c, 0xb43c], /* Hangul Syllable */ + [0xb43d, 0xb43d], /* Hangul Syllable */ + [0xb43e, 0xb43e], /* Hangul Syllable */ + [0xb43f, 0xb43f], /* Hangul Syllable */ + [0xb440, 0xb440], /* Hangul Syllable */ + [0xb441, 0xb441], /* Hangul Syllable */ + [0xb442, 0xb442], /* Hangul Syllable */ + [0xb443, 0xb443], /* Hangul Syllable */ + [0xb444, 0xb444], /* Hangul Syllable */ + [0xb445, 0xb445], /* Hangul Syllable */ + [0xb446, 0xb446], /* Hangul Syllable */ + [0xb447, 0xb447], /* Hangul Syllable */ + [0xb448, 0xb448], /* Hangul Syllable */ + [0xb449, 0xb449], /* Hangul Syllable */ + [0xb44a, 0xb44a], /* Hangul Syllable */ + [0xb44b, 0xb44b], /* Hangul Syllable */ + [0xb44c, 0xb44c], /* Hangul Syllable */ + [0xb44d, 0xb44d], /* Hangul Syllable */ + [0xb44e, 0xb44e], /* Hangul Syllable */ + [0xb44f, 0xb44f], /* Hangul Syllable */ + [0xb450, 0xb450], /* Hangul Syllable */ + [0xb451, 0xb451], /* Hangul Syllable */ + [0xb452, 0xb452], /* Hangul Syllable */ + [0xb453, 0xb453], /* Hangul Syllable */ + [0xb454, 0xb454], /* Hangul Syllable */ + [0xb455, 0xb455], /* Hangul Syllable */ + [0xb456, 0xb456], /* Hangul Syllable */ + [0xb457, 0xb457], /* Hangul Syllable */ + [0xb458, 0xb458], /* Hangul Syllable */ + [0xb459, 0xb459], /* Hangul Syllable */ + [0xb45a, 0xb45a], /* Hangul Syllable */ + [0xb45b, 0xb45b], /* Hangul Syllable */ + [0xb45c, 0xb45c], /* Hangul Syllable */ + [0xb45d, 0xb45d], /* Hangul Syllable */ + [0xb45e, 0xb45e], /* Hangul Syllable */ + [0xb45f, 0xb45f], /* Hangul Syllable */ + [0xb460, 0xb460], /* Hangul Syllable */ + [0xb461, 0xb461], /* Hangul Syllable */ + [0xb462, 0xb462], /* Hangul Syllable */ + [0xb463, 0xb463], /* Hangul Syllable */ + [0xb464, 0xb464], /* Hangul Syllable */ + [0xb465, 0xb465], /* Hangul Syllable */ + [0xb466, 0xb466], /* Hangul Syllable */ + [0xb467, 0xb467], /* Hangul Syllable */ + [0xb468, 0xb468], /* Hangul Syllable */ + [0xb469, 0xb469], /* Hangul Syllable */ + [0xb46a, 0xb46a], /* Hangul Syllable */ + [0xb46b, 0xb46b], /* Hangul Syllable */ + [0xb46c, 0xb46c], /* Hangul Syllable */ + [0xb46d, 0xb46d], /* Hangul Syllable */ + [0xb46e, 0xb46e], /* Hangul Syllable */ + [0xb46f, 0xb46f], /* Hangul Syllable */ + [0xb470, 0xb470], /* Hangul Syllable */ + [0xb471, 0xb471], /* Hangul Syllable */ + [0xb472, 0xb472], /* Hangul Syllable */ + [0xb473, 0xb473], /* Hangul Syllable */ + [0xb474, 0xb474], /* Hangul Syllable */ + [0xb475, 0xb475], /* Hangul Syllable */ + [0xb476, 0xb476], /* Hangul Syllable */ + [0xb477, 0xb477], /* Hangul Syllable */ + [0xb478, 0xb478], /* Hangul Syllable */ + [0xb479, 0xb479], /* Hangul Syllable */ + [0xb47a, 0xb47a], /* Hangul Syllable */ + [0xb47b, 0xb47b], /* Hangul Syllable */ + [0xb47c, 0xb47c], /* Hangul Syllable */ + [0xb47d, 0xb47d], /* Hangul Syllable */ + [0xb47e, 0xb47e], /* Hangul Syllable */ + [0xb47f, 0xb47f], /* Hangul Syllable */ + [0xb480, 0xb480], /* Hangul Syllable */ + [0xb481, 0xb481], /* Hangul Syllable */ + [0xb482, 0xb482], /* Hangul Syllable */ + [0xb483, 0xb483], /* Hangul Syllable */ + [0xb484, 0xb484], /* Hangul Syllable */ + [0xb485, 0xb485], /* Hangul Syllable */ + [0xb486, 0xb486], /* Hangul Syllable */ + [0xb487, 0xb487], /* Hangul Syllable */ + [0xb488, 0xb488], /* Hangul Syllable */ + [0xb489, 0xb489], /* Hangul Syllable */ + [0xb48a, 0xb48a], /* Hangul Syllable */ + [0xb48b, 0xb48b], /* Hangul Syllable */ + [0xb48c, 0xb48c], /* Hangul Syllable */ + [0xb48d, 0xb48d], /* Hangul Syllable */ + [0xb48e, 0xb48e], /* Hangul Syllable */ + [0xb48f, 0xb48f], /* Hangul Syllable */ + [0xb490, 0xb490], /* Hangul Syllable */ + [0xb491, 0xb491], /* Hangul Syllable */ + [0xb492, 0xb492], /* Hangul Syllable */ + [0xb493, 0xb493], /* Hangul Syllable */ + [0xb494, 0xb494], /* Hangul Syllable */ + [0xb495, 0xb495], /* Hangul Syllable */ + [0xb496, 0xb496], /* Hangul Syllable */ + [0xb497, 0xb497], /* Hangul Syllable */ + [0xb498, 0xb498], /* Hangul Syllable */ + [0xb499, 0xb499], /* Hangul Syllable */ + [0xb49a, 0xb49a], /* Hangul Syllable */ + [0xb49b, 0xb49b], /* Hangul Syllable */ + [0xb49c, 0xb49c], /* Hangul Syllable */ + [0xb49d, 0xb49d], /* Hangul Syllable */ + [0xb49e, 0xb49e], /* Hangul Syllable */ + [0xb49f, 0xb49f], /* Hangul Syllable */ + [0xb4a0, 0xb4a0], /* Hangul Syllable */ + [0xb4a1, 0xb4a1], /* Hangul Syllable */ + [0xb4a2, 0xb4a2], /* Hangul Syllable */ + [0xb4a3, 0xb4a3], /* Hangul Syllable */ + [0xb4a4, 0xb4a4], /* Hangul Syllable */ + [0xb4a5, 0xb4a5], /* Hangul Syllable */ + [0xb4a6, 0xb4a6], /* Hangul Syllable */ + [0xb4a7, 0xb4a7], /* Hangul Syllable */ + [0xb4a8, 0xb4a8], /* Hangul Syllable */ + [0xb4a9, 0xb4a9], /* Hangul Syllable */ + [0xb4aa, 0xb4aa], /* Hangul Syllable */ + [0xb4ab, 0xb4ab], /* Hangul Syllable */ + [0xb4ac, 0xb4ac], /* Hangul Syllable */ + [0xb4ad, 0xb4ad], /* Hangul Syllable */ + [0xb4ae, 0xb4ae], /* Hangul Syllable */ + [0xb4af, 0xb4af], /* Hangul Syllable */ + [0xb4b0, 0xb4b0], /* Hangul Syllable */ + [0xb4b1, 0xb4b1], /* Hangul Syllable */ + [0xb4b2, 0xb4b2], /* Hangul Syllable */ + [0xb4b3, 0xb4b3], /* Hangul Syllable */ + [0xb4b4, 0xb4b4], /* Hangul Syllable */ + [0xb4b5, 0xb4b5], /* Hangul Syllable */ + [0xb4b6, 0xb4b6], /* Hangul Syllable */ + [0xb4b7, 0xb4b7], /* Hangul Syllable */ + [0xb4b8, 0xb4b8], /* Hangul Syllable */ + [0xb4b9, 0xb4b9], /* Hangul Syllable */ + [0xb4ba, 0xb4ba], /* Hangul Syllable */ + [0xb4bb, 0xb4bb], /* Hangul Syllable */ + [0xb4bc, 0xb4bc], /* Hangul Syllable */ + [0xb4bd, 0xb4bd], /* Hangul Syllable */ + [0xb4be, 0xb4be], /* Hangul Syllable */ + [0xb4bf, 0xb4bf], /* Hangul Syllable */ + [0xb4c0, 0xb4c0], /* Hangul Syllable */ + [0xb4c1, 0xb4c1], /* Hangul Syllable */ + [0xb4c2, 0xb4c2], /* Hangul Syllable */ + [0xb4c3, 0xb4c3], /* Hangul Syllable */ + [0xb4c4, 0xb4c4], /* Hangul Syllable */ + [0xb4c5, 0xb4c5], /* Hangul Syllable */ + [0xb4c6, 0xb4c6], /* Hangul Syllable */ + [0xb4c7, 0xb4c7], /* Hangul Syllable */ + [0xb4c8, 0xb4c8], /* Hangul Syllable */ + [0xb4c9, 0xb4c9], /* Hangul Syllable */ + [0xb4ca, 0xb4ca], /* Hangul Syllable */ + [0xb4cb, 0xb4cb], /* Hangul Syllable */ + [0xb4cc, 0xb4cc], /* Hangul Syllable */ + [0xb4cd, 0xb4cd], /* Hangul Syllable */ + [0xb4ce, 0xb4ce], /* Hangul Syllable */ + [0xb4cf, 0xb4cf], /* Hangul Syllable */ + [0xb4d0, 0xb4d0], /* Hangul Syllable */ + [0xb4d1, 0xb4d1], /* Hangul Syllable */ + [0xb4d2, 0xb4d2], /* Hangul Syllable */ + [0xb4d3, 0xb4d3], /* Hangul Syllable */ + [0xb4d4, 0xb4d4], /* Hangul Syllable */ + [0xb4d5, 0xb4d5], /* Hangul Syllable */ + [0xb4d6, 0xb4d6], /* Hangul Syllable */ + [0xb4d7, 0xb4d7], /* Hangul Syllable */ + [0xb4d8, 0xb4d8], /* Hangul Syllable */ + [0xb4d9, 0xb4d9], /* Hangul Syllable */ + [0xb4da, 0xb4da], /* Hangul Syllable */ + [0xb4db, 0xb4db], /* Hangul Syllable */ + [0xb4dc, 0xb4dc], /* Hangul Syllable */ + [0xb4dd, 0xb4dd], /* Hangul Syllable */ + [0xb4de, 0xb4de], /* Hangul Syllable */ + [0xb4df, 0xb4df], /* Hangul Syllable */ + [0xb4e0, 0xb4e0], /* Hangul Syllable */ + [0xb4e1, 0xb4e1], /* Hangul Syllable */ + [0xb4e2, 0xb4e2], /* Hangul Syllable */ + [0xb4e3, 0xb4e3], /* Hangul Syllable */ + [0xb4e4, 0xb4e4], /* Hangul Syllable */ + [0xb4e5, 0xb4e5], /* Hangul Syllable */ + [0xb4e6, 0xb4e6], /* Hangul Syllable */ + [0xb4e7, 0xb4e7], /* Hangul Syllable */ + [0xb4e8, 0xb4e8], /* Hangul Syllable */ + [0xb4e9, 0xb4e9], /* Hangul Syllable */ + [0xb4ea, 0xb4ea], /* Hangul Syllable */ + [0xb4eb, 0xb4eb], /* Hangul Syllable */ + [0xb4ec, 0xb4ec], /* Hangul Syllable */ + [0xb4ed, 0xb4ed], /* Hangul Syllable */ + [0xb4ee, 0xb4ee], /* Hangul Syllable */ + [0xb4ef, 0xb4ef], /* Hangul Syllable */ + [0xb4f0, 0xb4f0], /* Hangul Syllable */ + [0xb4f1, 0xb4f1], /* Hangul Syllable */ + [0xb4f2, 0xb4f2], /* Hangul Syllable */ + [0xb4f3, 0xb4f3], /* Hangul Syllable */ + [0xb4f4, 0xb4f4], /* Hangul Syllable */ + [0xb4f5, 0xb4f5], /* Hangul Syllable */ + [0xb4f6, 0xb4f6], /* Hangul Syllable */ + [0xb4f7, 0xb4f7], /* Hangul Syllable */ + [0xb4f8, 0xb4f8], /* Hangul Syllable */ + [0xb4f9, 0xb4f9], /* Hangul Syllable */ + [0xb4fa, 0xb4fa], /* Hangul Syllable */ + [0xb4fb, 0xb4fb], /* Hangul Syllable */ + [0xb4fc, 0xb4fc], /* Hangul Syllable */ + [0xb4fd, 0xb4fd], /* Hangul Syllable */ + [0xb4fe, 0xb4fe], /* Hangul Syllable */ + [0xb4ff, 0xb4ff], /* Hangul Syllable */ + [0xb500, 0xb500], /* Hangul Syllable */ + [0xb501, 0xb501], /* Hangul Syllable */ + [0xb502, 0xb502], /* Hangul Syllable */ + [0xb503, 0xb503], /* Hangul Syllable */ + [0xb504, 0xb504], /* Hangul Syllable */ + [0xb505, 0xb505], /* Hangul Syllable */ + [0xb506, 0xb506], /* Hangul Syllable */ + [0xb507, 0xb507], /* Hangul Syllable */ + [0xb508, 0xb508], /* Hangul Syllable */ + [0xb509, 0xb509], /* Hangul Syllable */ + [0xb50a, 0xb50a], /* Hangul Syllable */ + [0xb50b, 0xb50b], /* Hangul Syllable */ + [0xb50c, 0xb50c], /* Hangul Syllable */ + [0xb50d, 0xb50d], /* Hangul Syllable */ + [0xb50e, 0xb50e], /* Hangul Syllable */ + [0xb50f, 0xb50f], /* Hangul Syllable */ + [0xb510, 0xb510], /* Hangul Syllable */ + [0xb511, 0xb511], /* Hangul Syllable */ + [0xb512, 0xb512], /* Hangul Syllable */ + [0xb513, 0xb513], /* Hangul Syllable */ + [0xb514, 0xb514], /* Hangul Syllable */ + [0xb515, 0xb515], /* Hangul Syllable */ + [0xb516, 0xb516], /* Hangul Syllable */ + [0xb517, 0xb517], /* Hangul Syllable */ + [0xb518, 0xb518], /* Hangul Syllable */ + [0xb519, 0xb519], /* Hangul Syllable */ + [0xb51a, 0xb51a], /* Hangul Syllable */ + [0xb51b, 0xb51b], /* Hangul Syllable */ + [0xb51c, 0xb51c], /* Hangul Syllable */ + [0xb51d, 0xb51d], /* Hangul Syllable */ + [0xb51e, 0xb51e], /* Hangul Syllable */ + [0xb51f, 0xb51f], /* Hangul Syllable */ + [0xb520, 0xb520], /* Hangul Syllable */ + [0xb521, 0xb521], /* Hangul Syllable */ + [0xb522, 0xb522], /* Hangul Syllable */ + [0xb523, 0xb523], /* Hangul Syllable */ + [0xb524, 0xb524], /* Hangul Syllable */ + [0xb525, 0xb525], /* Hangul Syllable */ + [0xb526, 0xb526], /* Hangul Syllable */ + [0xb527, 0xb527], /* Hangul Syllable */ + [0xb528, 0xb528], /* Hangul Syllable */ + [0xb529, 0xb529], /* Hangul Syllable */ + [0xb52a, 0xb52a], /* Hangul Syllable */ + [0xb52b, 0xb52b], /* Hangul Syllable */ + [0xb52c, 0xb52c], /* Hangul Syllable */ + [0xb52d, 0xb52d], /* Hangul Syllable */ + [0xb52e, 0xb52e], /* Hangul Syllable */ + [0xb52f, 0xb52f], /* Hangul Syllable */ + [0xb530, 0xb530], /* Hangul Syllable */ + [0xb531, 0xb531], /* Hangul Syllable */ + [0xb532, 0xb532], /* Hangul Syllable */ + [0xb533, 0xb533], /* Hangul Syllable */ + [0xb534, 0xb534], /* Hangul Syllable */ + [0xb535, 0xb535], /* Hangul Syllable */ + [0xb536, 0xb536], /* Hangul Syllable */ + [0xb537, 0xb537], /* Hangul Syllable */ + [0xb538, 0xb538], /* Hangul Syllable */ + [0xb539, 0xb539], /* Hangul Syllable */ + [0xb53a, 0xb53a], /* Hangul Syllable */ + [0xb53b, 0xb53b], /* Hangul Syllable */ + [0xb53c, 0xb53c], /* Hangul Syllable */ + [0xb53d, 0xb53d], /* Hangul Syllable */ + [0xb53e, 0xb53e], /* Hangul Syllable */ + [0xb53f, 0xb53f], /* Hangul Syllable */ + [0xb540, 0xb540], /* Hangul Syllable */ + [0xb541, 0xb541], /* Hangul Syllable */ + [0xb542, 0xb542], /* Hangul Syllable */ + [0xb543, 0xb543], /* Hangul Syllable */ + [0xb544, 0xb544], /* Hangul Syllable */ + [0xb545, 0xb545], /* Hangul Syllable */ + [0xb546, 0xb546], /* Hangul Syllable */ + [0xb547, 0xb547], /* Hangul Syllable */ + [0xb548, 0xb548], /* Hangul Syllable */ + [0xb549, 0xb549], /* Hangul Syllable */ + [0xb54a, 0xb54a], /* Hangul Syllable */ + [0xb54b, 0xb54b], /* Hangul Syllable */ + [0xb54c, 0xb54c], /* Hangul Syllable */ + [0xb54d, 0xb54d], /* Hangul Syllable */ + [0xb54e, 0xb54e], /* Hangul Syllable */ + [0xb54f, 0xb54f], /* Hangul Syllable */ + [0xb550, 0xb550], /* Hangul Syllable */ + [0xb551, 0xb551], /* Hangul Syllable */ + [0xb552, 0xb552], /* Hangul Syllable */ + [0xb553, 0xb553], /* Hangul Syllable */ + [0xb554, 0xb554], /* Hangul Syllable */ + [0xb555, 0xb555], /* Hangul Syllable */ + [0xb556, 0xb556], /* Hangul Syllable */ + [0xb557, 0xb557], /* Hangul Syllable */ + [0xb558, 0xb558], /* Hangul Syllable */ + [0xb559, 0xb559], /* Hangul Syllable */ + [0xb55a, 0xb55a], /* Hangul Syllable */ + [0xb55b, 0xb55b], /* Hangul Syllable */ + [0xb55c, 0xb55c], /* Hangul Syllable */ + [0xb55d, 0xb55d], /* Hangul Syllable */ + [0xb55e, 0xb55e], /* Hangul Syllable */ + [0xb55f, 0xb55f], /* Hangul Syllable */ + [0xb560, 0xb560], /* Hangul Syllable */ + [0xb561, 0xb561], /* Hangul Syllable */ + [0xb562, 0xb562], /* Hangul Syllable */ + [0xb563, 0xb563], /* Hangul Syllable */ + [0xb564, 0xb564], /* Hangul Syllable */ + [0xb565, 0xb565], /* Hangul Syllable */ + [0xb566, 0xb566], /* Hangul Syllable */ + [0xb567, 0xb567], /* Hangul Syllable */ + [0xb568, 0xb568], /* Hangul Syllable */ + [0xb569, 0xb569], /* Hangul Syllable */ + [0xb56a, 0xb56a], /* Hangul Syllable */ + [0xb56b, 0xb56b], /* Hangul Syllable */ + [0xb56c, 0xb56c], /* Hangul Syllable */ + [0xb56d, 0xb56d], /* Hangul Syllable */ + [0xb56e, 0xb56e], /* Hangul Syllable */ + [0xb56f, 0xb56f], /* Hangul Syllable */ + [0xb570, 0xb570], /* Hangul Syllable */ + [0xb571, 0xb571], /* Hangul Syllable */ + [0xb572, 0xb572], /* Hangul Syllable */ + [0xb573, 0xb573], /* Hangul Syllable */ + [0xb574, 0xb574], /* Hangul Syllable */ + [0xb575, 0xb575], /* Hangul Syllable */ + [0xb576, 0xb576], /* Hangul Syllable */ + [0xb577, 0xb577], /* Hangul Syllable */ + [0xb578, 0xb578], /* Hangul Syllable */ + [0xb579, 0xb579], /* Hangul Syllable */ + [0xb57a, 0xb57a], /* Hangul Syllable */ + [0xb57b, 0xb57b], /* Hangul Syllable */ + [0xb57c, 0xb57c], /* Hangul Syllable */ + [0xb57d, 0xb57d], /* Hangul Syllable */ + [0xb57e, 0xb57e], /* Hangul Syllable */ + [0xb57f, 0xb57f], /* Hangul Syllable */ + [0xb580, 0xb580], /* Hangul Syllable */ + [0xb581, 0xb581], /* Hangul Syllable */ + [0xb582, 0xb582], /* Hangul Syllable */ + [0xb583, 0xb583], /* Hangul Syllable */ + [0xb584, 0xb584], /* Hangul Syllable */ + [0xb585, 0xb585], /* Hangul Syllable */ + [0xb586, 0xb586], /* Hangul Syllable */ + [0xb587, 0xb587], /* Hangul Syllable */ + [0xb588, 0xb588], /* Hangul Syllable */ + [0xb589, 0xb589], /* Hangul Syllable */ + [0xb58a, 0xb58a], /* Hangul Syllable */ + [0xb58b, 0xb58b], /* Hangul Syllable */ + [0xb58c, 0xb58c], /* Hangul Syllable */ + [0xb58d, 0xb58d], /* Hangul Syllable */ + [0xb58e, 0xb58e], /* Hangul Syllable */ + [0xb58f, 0xb58f], /* Hangul Syllable */ + [0xb590, 0xb590], /* Hangul Syllable */ + [0xb591, 0xb591], /* Hangul Syllable */ + [0xb592, 0xb592], /* Hangul Syllable */ + [0xb593, 0xb593], /* Hangul Syllable */ + [0xb594, 0xb594], /* Hangul Syllable */ + [0xb595, 0xb595], /* Hangul Syllable */ + [0xb596, 0xb596], /* Hangul Syllable */ + [0xb597, 0xb597], /* Hangul Syllable */ + [0xb598, 0xb598], /* Hangul Syllable */ + [0xb599, 0xb599], /* Hangul Syllable */ + [0xb59a, 0xb59a], /* Hangul Syllable */ + [0xb59b, 0xb59b], /* Hangul Syllable */ + [0xb59c, 0xb59c], /* Hangul Syllable */ + [0xb59d, 0xb59d], /* Hangul Syllable */ + [0xb59e, 0xb59e], /* Hangul Syllable */ + [0xb59f, 0xb59f], /* Hangul Syllable */ + [0xb5a0, 0xb5a0], /* Hangul Syllable */ + [0xb5a1, 0xb5a1], /* Hangul Syllable */ + [0xb5a2, 0xb5a2], /* Hangul Syllable */ + [0xb5a3, 0xb5a3], /* Hangul Syllable */ + [0xb5a4, 0xb5a4], /* Hangul Syllable */ + [0xb5a5, 0xb5a5], /* Hangul Syllable */ + [0xb5a6, 0xb5a6], /* Hangul Syllable */ + [0xb5a7, 0xb5a7], /* Hangul Syllable */ + [0xb5a8, 0xb5a8], /* Hangul Syllable */ + [0xb5a9, 0xb5a9], /* Hangul Syllable */ + [0xb5aa, 0xb5aa], /* Hangul Syllable */ + [0xb5ab, 0xb5ab], /* Hangul Syllable */ + [0xb5ac, 0xb5ac], /* Hangul Syllable */ + [0xb5ad, 0xb5ad], /* Hangul Syllable */ + [0xb5ae, 0xb5ae], /* Hangul Syllable */ + [0xb5af, 0xb5af], /* Hangul Syllable */ + [0xb5b0, 0xb5b0], /* Hangul Syllable */ + [0xb5b1, 0xb5b1], /* Hangul Syllable */ + [0xb5b2, 0xb5b2], /* Hangul Syllable */ + [0xb5b3, 0xb5b3], /* Hangul Syllable */ + [0xb5b4, 0xb5b4], /* Hangul Syllable */ + [0xb5b5, 0xb5b5], /* Hangul Syllable */ + [0xb5b6, 0xb5b6], /* Hangul Syllable */ + [0xb5b7, 0xb5b7], /* Hangul Syllable */ + [0xb5b8, 0xb5b8], /* Hangul Syllable */ + [0xb5b9, 0xb5b9], /* Hangul Syllable */ + [0xb5ba, 0xb5ba], /* Hangul Syllable */ + [0xb5bb, 0xb5bb], /* Hangul Syllable */ + [0xb5bc, 0xb5bc], /* Hangul Syllable */ + [0xb5bd, 0xb5bd], /* Hangul Syllable */ + [0xb5be, 0xb5be], /* Hangul Syllable */ + [0xb5bf, 0xb5bf], /* Hangul Syllable */ + [0xb5c0, 0xb5c0], /* Hangul Syllable */ + [0xb5c1, 0xb5c1], /* Hangul Syllable */ + [0xb5c2, 0xb5c2], /* Hangul Syllable */ + [0xb5c3, 0xb5c3], /* Hangul Syllable */ + [0xb5c4, 0xb5c4], /* Hangul Syllable */ + [0xb5c5, 0xb5c5], /* Hangul Syllable */ + [0xb5c6, 0xb5c6], /* Hangul Syllable */ + [0xb5c7, 0xb5c7], /* Hangul Syllable */ + [0xb5c8, 0xb5c8], /* Hangul Syllable */ + [0xb5c9, 0xb5c9], /* Hangul Syllable */ + [0xb5ca, 0xb5ca], /* Hangul Syllable */ + [0xb5cb, 0xb5cb], /* Hangul Syllable */ + [0xb5cc, 0xb5cc], /* Hangul Syllable */ + [0xb5cd, 0xb5cd], /* Hangul Syllable */ + [0xb5ce, 0xb5ce], /* Hangul Syllable */ + [0xb5cf, 0xb5cf], /* Hangul Syllable */ + [0xb5d0, 0xb5d0], /* Hangul Syllable */ + [0xb5d1, 0xb5d1], /* Hangul Syllable */ + [0xb5d2, 0xb5d2], /* Hangul Syllable */ + [0xb5d3, 0xb5d3], /* Hangul Syllable */ + [0xb5d4, 0xb5d4], /* Hangul Syllable */ + [0xb5d5, 0xb5d5], /* Hangul Syllable */ + [0xb5d6, 0xb5d6], /* Hangul Syllable */ + [0xb5d7, 0xb5d7], /* Hangul Syllable */ + [0xb5d8, 0xb5d8], /* Hangul Syllable */ + [0xb5d9, 0xb5d9], /* Hangul Syllable */ + [0xb5da, 0xb5da], /* Hangul Syllable */ + [0xb5db, 0xb5db], /* Hangul Syllable */ + [0xb5dc, 0xb5dc], /* Hangul Syllable */ + [0xb5dd, 0xb5dd], /* Hangul Syllable */ + [0xb5de, 0xb5de], /* Hangul Syllable */ + [0xb5df, 0xb5df], /* Hangul Syllable */ + [0xb5e0, 0xb5e0], /* Hangul Syllable */ + [0xb5e1, 0xb5e1], /* Hangul Syllable */ + [0xb5e2, 0xb5e2], /* Hangul Syllable */ + [0xb5e3, 0xb5e3], /* Hangul Syllable */ + [0xb5e4, 0xb5e4], /* Hangul Syllable */ + [0xb5e5, 0xb5e5], /* Hangul Syllable */ + [0xb5e6, 0xb5e6], /* Hangul Syllable */ + [0xb5e7, 0xb5e7], /* Hangul Syllable */ + [0xb5e8, 0xb5e8], /* Hangul Syllable */ + [0xb5e9, 0xb5e9], /* Hangul Syllable */ + [0xb5ea, 0xb5ea], /* Hangul Syllable */ + [0xb5eb, 0xb5eb], /* Hangul Syllable */ + [0xb5ec, 0xb5ec], /* Hangul Syllable */ + [0xb5ed, 0xb5ed], /* Hangul Syllable */ + [0xb5ee, 0xb5ee], /* Hangul Syllable */ + [0xb5ef, 0xb5ef], /* Hangul Syllable */ + [0xb5f0, 0xb5f0], /* Hangul Syllable */ + [0xb5f1, 0xb5f1], /* Hangul Syllable */ + [0xb5f2, 0xb5f2], /* Hangul Syllable */ + [0xb5f3, 0xb5f3], /* Hangul Syllable */ + [0xb5f4, 0xb5f4], /* Hangul Syllable */ + [0xb5f5, 0xb5f5], /* Hangul Syllable */ + [0xb5f6, 0xb5f6], /* Hangul Syllable */ + [0xb5f7, 0xb5f7], /* Hangul Syllable */ + [0xb5f8, 0xb5f8], /* Hangul Syllable */ + [0xb5f9, 0xb5f9], /* Hangul Syllable */ + [0xb5fa, 0xb5fa], /* Hangul Syllable */ + [0xb5fb, 0xb5fb], /* Hangul Syllable */ + [0xb5fc, 0xb5fc], /* Hangul Syllable */ + [0xb5fd, 0xb5fd], /* Hangul Syllable */ + [0xb5fe, 0xb5fe], /* Hangul Syllable */ + [0xb5ff, 0xb5ff], /* Hangul Syllable */ + [0xb600, 0xb600], /* Hangul Syllable */ + [0xb601, 0xb601], /* Hangul Syllable */ + [0xb602, 0xb602], /* Hangul Syllable */ + [0xb603, 0xb603], /* Hangul Syllable */ + [0xb604, 0xb604], /* Hangul Syllable */ + [0xb605, 0xb605], /* Hangul Syllable */ + [0xb606, 0xb606], /* Hangul Syllable */ + [0xb607, 0xb607], /* Hangul Syllable */ + [0xb608, 0xb608], /* Hangul Syllable */ + [0xb609, 0xb609], /* Hangul Syllable */ + [0xb60a, 0xb60a], /* Hangul Syllable */ + [0xb60b, 0xb60b], /* Hangul Syllable */ + [0xb60c, 0xb60c], /* Hangul Syllable */ + [0xb60d, 0xb60d], /* Hangul Syllable */ + [0xb60e, 0xb60e], /* Hangul Syllable */ + [0xb60f, 0xb60f], /* Hangul Syllable */ + [0xb610, 0xb610], /* Hangul Syllable */ + [0xb611, 0xb611], /* Hangul Syllable */ + [0xb612, 0xb612], /* Hangul Syllable */ + [0xb613, 0xb613], /* Hangul Syllable */ + [0xb614, 0xb614], /* Hangul Syllable */ + [0xb615, 0xb615], /* Hangul Syllable */ + [0xb616, 0xb616], /* Hangul Syllable */ + [0xb617, 0xb617], /* Hangul Syllable */ + [0xb618, 0xb618], /* Hangul Syllable */ + [0xb619, 0xb619], /* Hangul Syllable */ + [0xb61a, 0xb61a], /* Hangul Syllable */ + [0xb61b, 0xb61b], /* Hangul Syllable */ + [0xb61c, 0xb61c], /* Hangul Syllable */ + [0xb61d, 0xb61d], /* Hangul Syllable */ + [0xb61e, 0xb61e], /* Hangul Syllable */ + [0xb61f, 0xb61f], /* Hangul Syllable */ + [0xb620, 0xb620], /* Hangul Syllable */ + [0xb621, 0xb621], /* Hangul Syllable */ + [0xb622, 0xb622], /* Hangul Syllable */ + [0xb623, 0xb623], /* Hangul Syllable */ + [0xb624, 0xb624], /* Hangul Syllable */ + [0xb625, 0xb625], /* Hangul Syllable */ + [0xb626, 0xb626], /* Hangul Syllable */ + [0xb627, 0xb627], /* Hangul Syllable */ + [0xb628, 0xb628], /* Hangul Syllable */ + [0xb629, 0xb629], /* Hangul Syllable */ + [0xb62a, 0xb62a], /* Hangul Syllable */ + [0xb62b, 0xb62b], /* Hangul Syllable */ + [0xb62c, 0xb62c], /* Hangul Syllable */ + [0xb62d, 0xb62d], /* Hangul Syllable */ + [0xb62e, 0xb62e], /* Hangul Syllable */ + [0xb62f, 0xb62f], /* Hangul Syllable */ + [0xb630, 0xb630], /* Hangul Syllable */ + [0xb631, 0xb631], /* Hangul Syllable */ + [0xb632, 0xb632], /* Hangul Syllable */ + [0xb633, 0xb633], /* Hangul Syllable */ + [0xb634, 0xb634], /* Hangul Syllable */ + [0xb635, 0xb635], /* Hangul Syllable */ + [0xb636, 0xb636], /* Hangul Syllable */ + [0xb637, 0xb637], /* Hangul Syllable */ + [0xb638, 0xb638], /* Hangul Syllable */ + [0xb639, 0xb639], /* Hangul Syllable */ + [0xb63a, 0xb63a], /* Hangul Syllable */ + [0xb63b, 0xb63b], /* Hangul Syllable */ + [0xb63c, 0xb63c], /* Hangul Syllable */ + [0xb63d, 0xb63d], /* Hangul Syllable */ + [0xb63e, 0xb63e], /* Hangul Syllable */ + [0xb63f, 0xb63f], /* Hangul Syllable */ + [0xb640, 0xb640], /* Hangul Syllable */ + [0xb641, 0xb641], /* Hangul Syllable */ + [0xb642, 0xb642], /* Hangul Syllable */ + [0xb643, 0xb643], /* Hangul Syllable */ + [0xb644, 0xb644], /* Hangul Syllable */ + [0xb645, 0xb645], /* Hangul Syllable */ + [0xb646, 0xb646], /* Hangul Syllable */ + [0xb647, 0xb647], /* Hangul Syllable */ + [0xb648, 0xb648], /* Hangul Syllable */ + [0xb649, 0xb649], /* Hangul Syllable */ + [0xb64a, 0xb64a], /* Hangul Syllable */ + [0xb64b, 0xb64b], /* Hangul Syllable */ + [0xb64c, 0xb64c], /* Hangul Syllable */ + [0xb64d, 0xb64d], /* Hangul Syllable */ + [0xb64e, 0xb64e], /* Hangul Syllable */ + [0xb64f, 0xb64f], /* Hangul Syllable */ + [0xb650, 0xb650], /* Hangul Syllable */ + [0xb651, 0xb651], /* Hangul Syllable */ + [0xb652, 0xb652], /* Hangul Syllable */ + [0xb653, 0xb653], /* Hangul Syllable */ + [0xb654, 0xb654], /* Hangul Syllable */ + [0xb655, 0xb655], /* Hangul Syllable */ + [0xb656, 0xb656], /* Hangul Syllable */ + [0xb657, 0xb657], /* Hangul Syllable */ + [0xb658, 0xb658], /* Hangul Syllable */ + [0xb659, 0xb659], /* Hangul Syllable */ + [0xb65a, 0xb65a], /* Hangul Syllable */ + [0xb65b, 0xb65b], /* Hangul Syllable */ + [0xb65c, 0xb65c], /* Hangul Syllable */ + [0xb65d, 0xb65d], /* Hangul Syllable */ + [0xb65e, 0xb65e], /* Hangul Syllable */ + [0xb65f, 0xb65f], /* Hangul Syllable */ + [0xb660, 0xb660], /* Hangul Syllable */ + [0xb661, 0xb661], /* Hangul Syllable */ + [0xb662, 0xb662], /* Hangul Syllable */ + [0xb663, 0xb663], /* Hangul Syllable */ + [0xb664, 0xb664], /* Hangul Syllable */ + [0xb665, 0xb665], /* Hangul Syllable */ + [0xb666, 0xb666], /* Hangul Syllable */ + [0xb667, 0xb667], /* Hangul Syllable */ + [0xb668, 0xb668], /* Hangul Syllable */ + [0xb669, 0xb669], /* Hangul Syllable */ + [0xb66a, 0xb66a], /* Hangul Syllable */ + [0xb66b, 0xb66b], /* Hangul Syllable */ + [0xb66c, 0xb66c], /* Hangul Syllable */ + [0xb66d, 0xb66d], /* Hangul Syllable */ + [0xb66e, 0xb66e], /* Hangul Syllable */ + [0xb66f, 0xb66f], /* Hangul Syllable */ + [0xb670, 0xb670], /* Hangul Syllable */ + [0xb671, 0xb671], /* Hangul Syllable */ + [0xb672, 0xb672], /* Hangul Syllable */ + [0xb673, 0xb673], /* Hangul Syllable */ + [0xb674, 0xb674], /* Hangul Syllable */ + [0xb675, 0xb675], /* Hangul Syllable */ + [0xb676, 0xb676], /* Hangul Syllable */ + [0xb677, 0xb677], /* Hangul Syllable */ + [0xb678, 0xb678], /* Hangul Syllable */ + [0xb679, 0xb679], /* Hangul Syllable */ + [0xb67a, 0xb67a], /* Hangul Syllable */ + [0xb67b, 0xb67b], /* Hangul Syllable */ + [0xb67c, 0xb67c], /* Hangul Syllable */ + [0xb67d, 0xb67d], /* Hangul Syllable */ + [0xb67e, 0xb67e], /* Hangul Syllable */ + [0xb67f, 0xb67f], /* Hangul Syllable */ + [0xb680, 0xb680], /* Hangul Syllable */ + [0xb681, 0xb681], /* Hangul Syllable */ + [0xb682, 0xb682], /* Hangul Syllable */ + [0xb683, 0xb683], /* Hangul Syllable */ + [0xb684, 0xb684], /* Hangul Syllable */ + [0xb685, 0xb685], /* Hangul Syllable */ + [0xb686, 0xb686], /* Hangul Syllable */ + [0xb687, 0xb687], /* Hangul Syllable */ + [0xb688, 0xb688], /* Hangul Syllable */ + [0xb689, 0xb689], /* Hangul Syllable */ + [0xb68a, 0xb68a], /* Hangul Syllable */ + [0xb68b, 0xb68b], /* Hangul Syllable */ + [0xb68c, 0xb68c], /* Hangul Syllable */ + [0xb68d, 0xb68d], /* Hangul Syllable */ + [0xb68e, 0xb68e], /* Hangul Syllable */ + [0xb68f, 0xb68f], /* Hangul Syllable */ + [0xb690, 0xb690], /* Hangul Syllable */ + [0xb691, 0xb691], /* Hangul Syllable */ + [0xb692, 0xb692], /* Hangul Syllable */ + [0xb693, 0xb693], /* Hangul Syllable */ + [0xb694, 0xb694], /* Hangul Syllable */ + [0xb695, 0xb695], /* Hangul Syllable */ + [0xb696, 0xb696], /* Hangul Syllable */ + [0xb697, 0xb697], /* Hangul Syllable */ + [0xb698, 0xb698], /* Hangul Syllable */ + [0xb699, 0xb699], /* Hangul Syllable */ + [0xb69a, 0xb69a], /* Hangul Syllable */ + [0xb69b, 0xb69b], /* Hangul Syllable */ + [0xb69c, 0xb69c], /* Hangul Syllable */ + [0xb69d, 0xb69d], /* Hangul Syllable */ + [0xb69e, 0xb69e], /* Hangul Syllable */ + [0xb69f, 0xb69f], /* Hangul Syllable */ + [0xb6a0, 0xb6a0], /* Hangul Syllable */ + [0xb6a1, 0xb6a1], /* Hangul Syllable */ + [0xb6a2, 0xb6a2], /* Hangul Syllable */ + [0xb6a3, 0xb6a3], /* Hangul Syllable */ + [0xb6a4, 0xb6a4], /* Hangul Syllable */ + [0xb6a5, 0xb6a5], /* Hangul Syllable */ + [0xb6a6, 0xb6a6], /* Hangul Syllable */ + [0xb6a7, 0xb6a7], /* Hangul Syllable */ + [0xb6a8, 0xb6a8], /* Hangul Syllable */ + [0xb6a9, 0xb6a9], /* Hangul Syllable */ + [0xb6aa, 0xb6aa], /* Hangul Syllable */ + [0xb6ab, 0xb6ab], /* Hangul Syllable */ + [0xb6ac, 0xb6ac], /* Hangul Syllable */ + [0xb6ad, 0xb6ad], /* Hangul Syllable */ + [0xb6ae, 0xb6ae], /* Hangul Syllable */ + [0xb6af, 0xb6af], /* Hangul Syllable */ + [0xb6b0, 0xb6b0], /* Hangul Syllable */ + [0xb6b1, 0xb6b1], /* Hangul Syllable */ + [0xb6b2, 0xb6b2], /* Hangul Syllable */ + [0xb6b3, 0xb6b3], /* Hangul Syllable */ + [0xb6b4, 0xb6b4], /* Hangul Syllable */ + [0xb6b5, 0xb6b5], /* Hangul Syllable */ + [0xb6b6, 0xb6b6], /* Hangul Syllable */ + [0xb6b7, 0xb6b7], /* Hangul Syllable */ + [0xb6b8, 0xb6b8], /* Hangul Syllable */ + [0xb6b9, 0xb6b9], /* Hangul Syllable */ + [0xb6ba, 0xb6ba], /* Hangul Syllable */ + [0xb6bb, 0xb6bb], /* Hangul Syllable */ + [0xb6bc, 0xb6bc], /* Hangul Syllable */ + [0xb6bd, 0xb6bd], /* Hangul Syllable */ + [0xb6be, 0xb6be], /* Hangul Syllable */ + [0xb6bf, 0xb6bf], /* Hangul Syllable */ + [0xb6c0, 0xb6c0], /* Hangul Syllable */ + [0xb6c1, 0xb6c1], /* Hangul Syllable */ + [0xb6c2, 0xb6c2], /* Hangul Syllable */ + [0xb6c3, 0xb6c3], /* Hangul Syllable */ + [0xb6c4, 0xb6c4], /* Hangul Syllable */ + [0xb6c5, 0xb6c5], /* Hangul Syllable */ + [0xb6c6, 0xb6c6], /* Hangul Syllable */ + [0xb6c7, 0xb6c7], /* Hangul Syllable */ + [0xb6c8, 0xb6c8], /* Hangul Syllable */ + [0xb6c9, 0xb6c9], /* Hangul Syllable */ + [0xb6ca, 0xb6ca], /* Hangul Syllable */ + [0xb6cb, 0xb6cb], /* Hangul Syllable */ + [0xb6cc, 0xb6cc], /* Hangul Syllable */ + [0xb6cd, 0xb6cd], /* Hangul Syllable */ + [0xb6ce, 0xb6ce], /* Hangul Syllable */ + [0xb6cf, 0xb6cf], /* Hangul Syllable */ + [0xb6d0, 0xb6d0], /* Hangul Syllable */ + [0xb6d1, 0xb6d1], /* Hangul Syllable */ + [0xb6d2, 0xb6d2], /* Hangul Syllable */ + [0xb6d3, 0xb6d3], /* Hangul Syllable */ + [0xb6d4, 0xb6d4], /* Hangul Syllable */ + [0xb6d5, 0xb6d5], /* Hangul Syllable */ + [0xb6d6, 0xb6d6], /* Hangul Syllable */ + [0xb6d7, 0xb6d7], /* Hangul Syllable */ + [0xb6d8, 0xb6d8], /* Hangul Syllable */ + [0xb6d9, 0xb6d9], /* Hangul Syllable */ + [0xb6da, 0xb6da], /* Hangul Syllable */ + [0xb6db, 0xb6db], /* Hangul Syllable */ + [0xb6dc, 0xb6dc], /* Hangul Syllable */ + [0xb6dd, 0xb6dd], /* Hangul Syllable */ + [0xb6de, 0xb6de], /* Hangul Syllable */ + [0xb6df, 0xb6df], /* Hangul Syllable */ + [0xb6e0, 0xb6e0], /* Hangul Syllable */ + [0xb6e1, 0xb6e1], /* Hangul Syllable */ + [0xb6e2, 0xb6e2], /* Hangul Syllable */ + [0xb6e3, 0xb6e3], /* Hangul Syllable */ + [0xb6e4, 0xb6e4], /* Hangul Syllable */ + [0xb6e5, 0xb6e5], /* Hangul Syllable */ + [0xb6e6, 0xb6e6], /* Hangul Syllable */ + [0xb6e7, 0xb6e7], /* Hangul Syllable */ + [0xb6e8, 0xb6e8], /* Hangul Syllable */ + [0xb6e9, 0xb6e9], /* Hangul Syllable */ + [0xb6ea, 0xb6ea], /* Hangul Syllable */ + [0xb6eb, 0xb6eb], /* Hangul Syllable */ + [0xb6ec, 0xb6ec], /* Hangul Syllable */ + [0xb6ed, 0xb6ed], /* Hangul Syllable */ + [0xb6ee, 0xb6ee], /* Hangul Syllable */ + [0xb6ef, 0xb6ef], /* Hangul Syllable */ + [0xb6f0, 0xb6f0], /* Hangul Syllable */ + [0xb6f1, 0xb6f1], /* Hangul Syllable */ + [0xb6f2, 0xb6f2], /* Hangul Syllable */ + [0xb6f3, 0xb6f3], /* Hangul Syllable */ + [0xb6f4, 0xb6f4], /* Hangul Syllable */ + [0xb6f5, 0xb6f5], /* Hangul Syllable */ + [0xb6f6, 0xb6f6], /* Hangul Syllable */ + [0xb6f7, 0xb6f7], /* Hangul Syllable */ + [0xb6f8, 0xb6f8], /* Hangul Syllable */ + [0xb6f9, 0xb6f9], /* Hangul Syllable */ + [0xb6fa, 0xb6fa], /* Hangul Syllable */ + [0xb6fb, 0xb6fb], /* Hangul Syllable */ + [0xb6fc, 0xb6fc], /* Hangul Syllable */ + [0xb6fd, 0xb6fd], /* Hangul Syllable */ + [0xb6fe, 0xb6fe], /* Hangul Syllable */ + [0xb6ff, 0xb6ff], /* Hangul Syllable */ + [0xb700, 0xb700], /* Hangul Syllable */ + [0xb701, 0xb701], /* Hangul Syllable */ + [0xb702, 0xb702], /* Hangul Syllable */ + [0xb703, 0xb703], /* Hangul Syllable */ + [0xb704, 0xb704], /* Hangul Syllable */ + [0xb705, 0xb705], /* Hangul Syllable */ + [0xb706, 0xb706], /* Hangul Syllable */ + [0xb707, 0xb707], /* Hangul Syllable */ + [0xb708, 0xb708], /* Hangul Syllable */ + [0xb709, 0xb709], /* Hangul Syllable */ + [0xb70a, 0xb70a], /* Hangul Syllable */ + [0xb70b, 0xb70b], /* Hangul Syllable */ + [0xb70c, 0xb70c], /* Hangul Syllable */ + [0xb70d, 0xb70d], /* Hangul Syllable */ + [0xb70e, 0xb70e], /* Hangul Syllable */ + [0xb70f, 0xb70f], /* Hangul Syllable */ + [0xb710, 0xb710], /* Hangul Syllable */ + [0xb711, 0xb711], /* Hangul Syllable */ + [0xb712, 0xb712], /* Hangul Syllable */ + [0xb713, 0xb713], /* Hangul Syllable */ + [0xb714, 0xb714], /* Hangul Syllable */ + [0xb715, 0xb715], /* Hangul Syllable */ + [0xb716, 0xb716], /* Hangul Syllable */ + [0xb717, 0xb717], /* Hangul Syllable */ + [0xb718, 0xb718], /* Hangul Syllable */ + [0xb719, 0xb719], /* Hangul Syllable */ + [0xb71a, 0xb71a], /* Hangul Syllable */ + [0xb71b, 0xb71b], /* Hangul Syllable */ + [0xb71c, 0xb71c], /* Hangul Syllable */ + [0xb71d, 0xb71d], /* Hangul Syllable */ + [0xb71e, 0xb71e], /* Hangul Syllable */ + [0xb71f, 0xb71f], /* Hangul Syllable */ + [0xb720, 0xb720], /* Hangul Syllable */ + [0xb721, 0xb721], /* Hangul Syllable */ + [0xb722, 0xb722], /* Hangul Syllable */ + [0xb723, 0xb723], /* Hangul Syllable */ + [0xb724, 0xb724], /* Hangul Syllable */ + [0xb725, 0xb725], /* Hangul Syllable */ + [0xb726, 0xb726], /* Hangul Syllable */ + [0xb727, 0xb727], /* Hangul Syllable */ + [0xb728, 0xb728], /* Hangul Syllable */ + [0xb729, 0xb729], /* Hangul Syllable */ + [0xb72a, 0xb72a], /* Hangul Syllable */ + [0xb72b, 0xb72b], /* Hangul Syllable */ + [0xb72c, 0xb72c], /* Hangul Syllable */ + [0xb72d, 0xb72d], /* Hangul Syllable */ + [0xb72e, 0xb72e], /* Hangul Syllable */ + [0xb72f, 0xb72f], /* Hangul Syllable */ + [0xb730, 0xb730], /* Hangul Syllable */ + [0xb731, 0xb731], /* Hangul Syllable */ + [0xb732, 0xb732], /* Hangul Syllable */ + [0xb733, 0xb733], /* Hangul Syllable */ + [0xb734, 0xb734], /* Hangul Syllable */ + [0xb735, 0xb735], /* Hangul Syllable */ + [0xb736, 0xb736], /* Hangul Syllable */ + [0xb737, 0xb737], /* Hangul Syllable */ + [0xb738, 0xb738], /* Hangul Syllable */ + [0xb739, 0xb739], /* Hangul Syllable */ + [0xb73a, 0xb73a], /* Hangul Syllable */ + [0xb73b, 0xb73b], /* Hangul Syllable */ + [0xb73c, 0xb73c], /* Hangul Syllable */ + [0xb73d, 0xb73d], /* Hangul Syllable */ + [0xb73e, 0xb73e], /* Hangul Syllable */ + [0xb73f, 0xb73f], /* Hangul Syllable */ + [0xb740, 0xb740], /* Hangul Syllable */ + [0xb741, 0xb741], /* Hangul Syllable */ + [0xb742, 0xb742], /* Hangul Syllable */ + [0xb743, 0xb743], /* Hangul Syllable */ + [0xb744, 0xb744], /* Hangul Syllable */ + [0xb745, 0xb745], /* Hangul Syllable */ + [0xb746, 0xb746], /* Hangul Syllable */ + [0xb747, 0xb747], /* Hangul Syllable */ + [0xb748, 0xb748], /* Hangul Syllable */ + [0xb749, 0xb749], /* Hangul Syllable */ + [0xb74a, 0xb74a], /* Hangul Syllable */ + [0xb74b, 0xb74b], /* Hangul Syllable */ + [0xb74c, 0xb74c], /* Hangul Syllable */ + [0xb74d, 0xb74d], /* Hangul Syllable */ + [0xb74e, 0xb74e], /* Hangul Syllable */ + [0xb74f, 0xb74f], /* Hangul Syllable */ + [0xb750, 0xb750], /* Hangul Syllable */ + [0xb751, 0xb751], /* Hangul Syllable */ + [0xb752, 0xb752], /* Hangul Syllable */ + [0xb753, 0xb753], /* Hangul Syllable */ + [0xb754, 0xb754], /* Hangul Syllable */ + [0xb755, 0xb755], /* Hangul Syllable */ + [0xb756, 0xb756], /* Hangul Syllable */ + [0xb757, 0xb757], /* Hangul Syllable */ + [0xb758, 0xb758], /* Hangul Syllable */ + [0xb759, 0xb759], /* Hangul Syllable */ + [0xb75a, 0xb75a], /* Hangul Syllable */ + [0xb75b, 0xb75b], /* Hangul Syllable */ + [0xb75c, 0xb75c], /* Hangul Syllable */ + [0xb75d, 0xb75d], /* Hangul Syllable */ + [0xb75e, 0xb75e], /* Hangul Syllable */ + [0xb75f, 0xb75f], /* Hangul Syllable */ + [0xb760, 0xb760], /* Hangul Syllable */ + [0xb761, 0xb761], /* Hangul Syllable */ + [0xb762, 0xb762], /* Hangul Syllable */ + [0xb763, 0xb763], /* Hangul Syllable */ + [0xb764, 0xb764], /* Hangul Syllable */ + [0xb765, 0xb765], /* Hangul Syllable */ + [0xb766, 0xb766], /* Hangul Syllable */ + [0xb767, 0xb767], /* Hangul Syllable */ + [0xb768, 0xb768], /* Hangul Syllable */ + [0xb769, 0xb769], /* Hangul Syllable */ + [0xb76a, 0xb76a], /* Hangul Syllable */ + [0xb76b, 0xb76b], /* Hangul Syllable */ + [0xb76c, 0xb76c], /* Hangul Syllable */ + [0xb76d, 0xb76d], /* Hangul Syllable */ + [0xb76e, 0xb76e], /* Hangul Syllable */ + [0xb76f, 0xb76f], /* Hangul Syllable */ + [0xb770, 0xb770], /* Hangul Syllable */ + [0xb771, 0xb771], /* Hangul Syllable */ + [0xb772, 0xb772], /* Hangul Syllable */ + [0xb773, 0xb773], /* Hangul Syllable */ + [0xb774, 0xb774], /* Hangul Syllable */ + [0xb775, 0xb775], /* Hangul Syllable */ + [0xb776, 0xb776], /* Hangul Syllable */ + [0xb777, 0xb777], /* Hangul Syllable */ + [0xb778, 0xb778], /* Hangul Syllable */ + [0xb779, 0xb779], /* Hangul Syllable */ + [0xb77a, 0xb77a], /* Hangul Syllable */ + [0xb77b, 0xb77b], /* Hangul Syllable */ + [0xb77c, 0xb77c], /* Hangul Syllable */ + [0xb77d, 0xb77d], /* Hangul Syllable */ + [0xb77e, 0xb77e], /* Hangul Syllable */ + [0xb77f, 0xb77f], /* Hangul Syllable */ + [0xb780, 0xb780], /* Hangul Syllable */ + [0xb781, 0xb781], /* Hangul Syllable */ + [0xb782, 0xb782], /* Hangul Syllable */ + [0xb783, 0xb783], /* Hangul Syllable */ + [0xb784, 0xb784], /* Hangul Syllable */ + [0xb785, 0xb785], /* Hangul Syllable */ + [0xb786, 0xb786], /* Hangul Syllable */ + [0xb787, 0xb787], /* Hangul Syllable */ + [0xb788, 0xb788], /* Hangul Syllable */ + [0xb789, 0xb789], /* Hangul Syllable */ + [0xb78a, 0xb78a], /* Hangul Syllable */ + [0xb78b, 0xb78b], /* Hangul Syllable */ + [0xb78c, 0xb78c], /* Hangul Syllable */ + [0xb78d, 0xb78d], /* Hangul Syllable */ + [0xb78e, 0xb78e], /* Hangul Syllable */ + [0xb78f, 0xb78f], /* Hangul Syllable */ + [0xb790, 0xb790], /* Hangul Syllable */ + [0xb791, 0xb791], /* Hangul Syllable */ + [0xb792, 0xb792], /* Hangul Syllable */ + [0xb793, 0xb793], /* Hangul Syllable */ + [0xb794, 0xb794], /* Hangul Syllable */ + [0xb795, 0xb795], /* Hangul Syllable */ + [0xb796, 0xb796], /* Hangul Syllable */ + [0xb797, 0xb797], /* Hangul Syllable */ + [0xb798, 0xb798], /* Hangul Syllable */ + [0xb799, 0xb799], /* Hangul Syllable */ + [0xb79a, 0xb79a], /* Hangul Syllable */ + [0xb79b, 0xb79b], /* Hangul Syllable */ + [0xb79c, 0xb79c], /* Hangul Syllable */ + [0xb79d, 0xb79d], /* Hangul Syllable */ + [0xb79e, 0xb79e], /* Hangul Syllable */ + [0xb79f, 0xb79f], /* Hangul Syllable */ + [0xb7a0, 0xb7a0], /* Hangul Syllable */ + [0xb7a1, 0xb7a1], /* Hangul Syllable */ + [0xb7a2, 0xb7a2], /* Hangul Syllable */ + [0xb7a3, 0xb7a3], /* Hangul Syllable */ + [0xb7a4, 0xb7a4], /* Hangul Syllable */ + [0xb7a5, 0xb7a5], /* Hangul Syllable */ + [0xb7a6, 0xb7a6], /* Hangul Syllable */ + [0xb7a7, 0xb7a7], /* Hangul Syllable */ + [0xb7a8, 0xb7a8], /* Hangul Syllable */ + [0xb7a9, 0xb7a9], /* Hangul Syllable */ + [0xb7aa, 0xb7aa], /* Hangul Syllable */ + [0xb7ab, 0xb7ab], /* Hangul Syllable */ + [0xb7ac, 0xb7ac], /* Hangul Syllable */ + [0xb7ad, 0xb7ad], /* Hangul Syllable */ + [0xb7ae, 0xb7ae], /* Hangul Syllable */ + [0xb7af, 0xb7af], /* Hangul Syllable */ + [0xb7b0, 0xb7b0], /* Hangul Syllable */ + [0xb7b1, 0xb7b1], /* Hangul Syllable */ + [0xb7b2, 0xb7b2], /* Hangul Syllable */ + [0xb7b3, 0xb7b3], /* Hangul Syllable */ + [0xb7b4, 0xb7b4], /* Hangul Syllable */ + [0xb7b5, 0xb7b5], /* Hangul Syllable */ + [0xb7b6, 0xb7b6], /* Hangul Syllable */ + [0xb7b7, 0xb7b7], /* Hangul Syllable */ + [0xb7b8, 0xb7b8], /* Hangul Syllable */ + [0xb7b9, 0xb7b9], /* Hangul Syllable */ + [0xb7ba, 0xb7ba], /* Hangul Syllable */ + [0xb7bb, 0xb7bb], /* Hangul Syllable */ + [0xb7bc, 0xb7bc], /* Hangul Syllable */ + [0xb7bd, 0xb7bd], /* Hangul Syllable */ + [0xb7be, 0xb7be], /* Hangul Syllable */ + [0xb7bf, 0xb7bf], /* Hangul Syllable */ + [0xb7c0, 0xb7c0], /* Hangul Syllable */ + [0xb7c1, 0xb7c1], /* Hangul Syllable */ + [0xb7c2, 0xb7c2], /* Hangul Syllable */ + [0xb7c3, 0xb7c3], /* Hangul Syllable */ + [0xb7c4, 0xb7c4], /* Hangul Syllable */ + [0xb7c5, 0xb7c5], /* Hangul Syllable */ + [0xb7c6, 0xb7c6], /* Hangul Syllable */ + [0xb7c7, 0xb7c7], /* Hangul Syllable */ + [0xb7c8, 0xb7c8], /* Hangul Syllable */ + [0xb7c9, 0xb7c9], /* Hangul Syllable */ + [0xb7ca, 0xb7ca], /* Hangul Syllable */ + [0xb7cb, 0xb7cb], /* Hangul Syllable */ + [0xb7cc, 0xb7cc], /* Hangul Syllable */ + [0xb7cd, 0xb7cd], /* Hangul Syllable */ + [0xb7ce, 0xb7ce], /* Hangul Syllable */ + [0xb7cf, 0xb7cf], /* Hangul Syllable */ + [0xb7d0, 0xb7d0], /* Hangul Syllable */ + [0xb7d1, 0xb7d1], /* Hangul Syllable */ + [0xb7d2, 0xb7d2], /* Hangul Syllable */ + [0xb7d3, 0xb7d3], /* Hangul Syllable */ + [0xb7d4, 0xb7d4], /* Hangul Syllable */ + [0xb7d5, 0xb7d5], /* Hangul Syllable */ + [0xb7d6, 0xb7d6], /* Hangul Syllable */ + [0xb7d7, 0xb7d7], /* Hangul Syllable */ + [0xb7d8, 0xb7d8], /* Hangul Syllable */ + [0xb7d9, 0xb7d9], /* Hangul Syllable */ + [0xb7da, 0xb7da], /* Hangul Syllable */ + [0xb7db, 0xb7db], /* Hangul Syllable */ + [0xb7dc, 0xb7dc], /* Hangul Syllable */ + [0xb7dd, 0xb7dd], /* Hangul Syllable */ + [0xb7de, 0xb7de], /* Hangul Syllable */ + [0xb7df, 0xb7df], /* Hangul Syllable */ + [0xb7e0, 0xb7e0], /* Hangul Syllable */ + [0xb7e1, 0xb7e1], /* Hangul Syllable */ + [0xb7e2, 0xb7e2], /* Hangul Syllable */ + [0xb7e3, 0xb7e3], /* Hangul Syllable */ + [0xb7e4, 0xb7e4], /* Hangul Syllable */ + [0xb7e5, 0xb7e5], /* Hangul Syllable */ + [0xb7e6, 0xb7e6], /* Hangul Syllable */ + [0xb7e7, 0xb7e7], /* Hangul Syllable */ + [0xb7e8, 0xb7e8], /* Hangul Syllable */ + [0xb7e9, 0xb7e9], /* Hangul Syllable */ + [0xb7ea, 0xb7ea], /* Hangul Syllable */ + [0xb7eb, 0xb7eb], /* Hangul Syllable */ + [0xb7ec, 0xb7ec], /* Hangul Syllable */ + [0xb7ed, 0xb7ed], /* Hangul Syllable */ + [0xb7ee, 0xb7ee], /* Hangul Syllable */ + [0xb7ef, 0xb7ef], /* Hangul Syllable */ + [0xb7f0, 0xb7f0], /* Hangul Syllable */ + [0xb7f1, 0xb7f1], /* Hangul Syllable */ + [0xb7f2, 0xb7f2], /* Hangul Syllable */ + [0xb7f3, 0xb7f3], /* Hangul Syllable */ + [0xb7f4, 0xb7f4], /* Hangul Syllable */ + [0xb7f5, 0xb7f5], /* Hangul Syllable */ + [0xb7f6, 0xb7f6], /* Hangul Syllable */ + [0xb7f7, 0xb7f7], /* Hangul Syllable */ + [0xb7f8, 0xb7f8], /* Hangul Syllable */ + [0xb7f9, 0xb7f9], /* Hangul Syllable */ + [0xb7fa, 0xb7fa], /* Hangul Syllable */ + [0xb7fb, 0xb7fb], /* Hangul Syllable */ + [0xb7fc, 0xb7fc], /* Hangul Syllable */ + [0xb7fd, 0xb7fd], /* Hangul Syllable */ + [0xb7fe, 0xb7fe], /* Hangul Syllable */ + [0xb7ff, 0xb7ff], /* Hangul Syllable */ + [0xb800, 0xb800], /* Hangul Syllable */ + [0xb801, 0xb801], /* Hangul Syllable */ + [0xb802, 0xb802], /* Hangul Syllable */ + [0xb803, 0xb803], /* Hangul Syllable */ + [0xb804, 0xb804], /* Hangul Syllable */ + [0xb805, 0xb805], /* Hangul Syllable */ + [0xb806, 0xb806], /* Hangul Syllable */ + [0xb807, 0xb807], /* Hangul Syllable */ + [0xb808, 0xb808], /* Hangul Syllable */ + [0xb809, 0xb809], /* Hangul Syllable */ + [0xb80a, 0xb80a], /* Hangul Syllable */ + [0xb80b, 0xb80b], /* Hangul Syllable */ + [0xb80c, 0xb80c], /* Hangul Syllable */ + [0xb80d, 0xb80d], /* Hangul Syllable */ + [0xb80e, 0xb80e], /* Hangul Syllable */ + [0xb80f, 0xb80f], /* Hangul Syllable */ + [0xb810, 0xb810], /* Hangul Syllable */ + [0xb811, 0xb811], /* Hangul Syllable */ + [0xb812, 0xb812], /* Hangul Syllable */ + [0xb813, 0xb813], /* Hangul Syllable */ + [0xb814, 0xb814], /* Hangul Syllable */ + [0xb815, 0xb815], /* Hangul Syllable */ + [0xb816, 0xb816], /* Hangul Syllable */ + [0xb817, 0xb817], /* Hangul Syllable */ + [0xb818, 0xb818], /* Hangul Syllable */ + [0xb819, 0xb819], /* Hangul Syllable */ + [0xb81a, 0xb81a], /* Hangul Syllable */ + [0xb81b, 0xb81b], /* Hangul Syllable */ + [0xb81c, 0xb81c], /* Hangul Syllable */ + [0xb81d, 0xb81d], /* Hangul Syllable */ + [0xb81e, 0xb81e], /* Hangul Syllable */ + [0xb81f, 0xb81f], /* Hangul Syllable */ + [0xb820, 0xb820], /* Hangul Syllable */ + [0xb821, 0xb821], /* Hangul Syllable */ + [0xb822, 0xb822], /* Hangul Syllable */ + [0xb823, 0xb823], /* Hangul Syllable */ + [0xb824, 0xb824], /* Hangul Syllable */ + [0xb825, 0xb825], /* Hangul Syllable */ + [0xb826, 0xb826], /* Hangul Syllable */ + [0xb827, 0xb827], /* Hangul Syllable */ + [0xb828, 0xb828], /* Hangul Syllable */ + [0xb829, 0xb829], /* Hangul Syllable */ + [0xb82a, 0xb82a], /* Hangul Syllable */ + [0xb82b, 0xb82b], /* Hangul Syllable */ + [0xb82c, 0xb82c], /* Hangul Syllable */ + [0xb82d, 0xb82d], /* Hangul Syllable */ + [0xb82e, 0xb82e], /* Hangul Syllable */ + [0xb82f, 0xb82f], /* Hangul Syllable */ + [0xb830, 0xb830], /* Hangul Syllable */ + [0xb831, 0xb831], /* Hangul Syllable */ + [0xb832, 0xb832], /* Hangul Syllable */ + [0xb833, 0xb833], /* Hangul Syllable */ + [0xb834, 0xb834], /* Hangul Syllable */ + [0xb835, 0xb835], /* Hangul Syllable */ + [0xb836, 0xb836], /* Hangul Syllable */ + [0xb837, 0xb837], /* Hangul Syllable */ + [0xb838, 0xb838], /* Hangul Syllable */ + [0xb839, 0xb839], /* Hangul Syllable */ + [0xb83a, 0xb83a], /* Hangul Syllable */ + [0xb83b, 0xb83b], /* Hangul Syllable */ + [0xb83c, 0xb83c], /* Hangul Syllable */ + [0xb83d, 0xb83d], /* Hangul Syllable */ + [0xb83e, 0xb83e], /* Hangul Syllable */ + [0xb83f, 0xb83f], /* Hangul Syllable */ + [0xb840, 0xb840], /* Hangul Syllable */ + [0xb841, 0xb841], /* Hangul Syllable */ + [0xb842, 0xb842], /* Hangul Syllable */ + [0xb843, 0xb843], /* Hangul Syllable */ + [0xb844, 0xb844], /* Hangul Syllable */ + [0xb845, 0xb845], /* Hangul Syllable */ + [0xb846, 0xb846], /* Hangul Syllable */ + [0xb847, 0xb847], /* Hangul Syllable */ + [0xb848, 0xb848], /* Hangul Syllable */ + [0xb849, 0xb849], /* Hangul Syllable */ + [0xb84a, 0xb84a], /* Hangul Syllable */ + [0xb84b, 0xb84b], /* Hangul Syllable */ + [0xb84c, 0xb84c], /* Hangul Syllable */ + [0xb84d, 0xb84d], /* Hangul Syllable */ + [0xb84e, 0xb84e], /* Hangul Syllable */ + [0xb84f, 0xb84f], /* Hangul Syllable */ + [0xb850, 0xb850], /* Hangul Syllable */ + [0xb851, 0xb851], /* Hangul Syllable */ + [0xb852, 0xb852], /* Hangul Syllable */ + [0xb853, 0xb853], /* Hangul Syllable */ + [0xb854, 0xb854], /* Hangul Syllable */ + [0xb855, 0xb855], /* Hangul Syllable */ + [0xb856, 0xb856], /* Hangul Syllable */ + [0xb857, 0xb857], /* Hangul Syllable */ + [0xb858, 0xb858], /* Hangul Syllable */ + [0xb859, 0xb859], /* Hangul Syllable */ + [0xb85a, 0xb85a], /* Hangul Syllable */ + [0xb85b, 0xb85b], /* Hangul Syllable */ + [0xb85c, 0xb85c], /* Hangul Syllable */ + [0xb85d, 0xb85d], /* Hangul Syllable */ + [0xb85e, 0xb85e], /* Hangul Syllable */ + [0xb85f, 0xb85f], /* Hangul Syllable */ + [0xb860, 0xb860], /* Hangul Syllable */ + [0xb861, 0xb861], /* Hangul Syllable */ + [0xb862, 0xb862], /* Hangul Syllable */ + [0xb863, 0xb863], /* Hangul Syllable */ + [0xb864, 0xb864], /* Hangul Syllable */ + [0xb865, 0xb865], /* Hangul Syllable */ + [0xb866, 0xb866], /* Hangul Syllable */ + [0xb867, 0xb867], /* Hangul Syllable */ + [0xb868, 0xb868], /* Hangul Syllable */ + [0xb869, 0xb869], /* Hangul Syllable */ + [0xb86a, 0xb86a], /* Hangul Syllable */ + [0xb86b, 0xb86b], /* Hangul Syllable */ + [0xb86c, 0xb86c], /* Hangul Syllable */ + [0xb86d, 0xb86d], /* Hangul Syllable */ + [0xb86e, 0xb86e], /* Hangul Syllable */ + [0xb86f, 0xb86f], /* Hangul Syllable */ + [0xb870, 0xb870], /* Hangul Syllable */ + [0xb871, 0xb871], /* Hangul Syllable */ + [0xb872, 0xb872], /* Hangul Syllable */ + [0xb873, 0xb873], /* Hangul Syllable */ + [0xb874, 0xb874], /* Hangul Syllable */ + [0xb875, 0xb875], /* Hangul Syllable */ + [0xb876, 0xb876], /* Hangul Syllable */ + [0xb877, 0xb877], /* Hangul Syllable */ + [0xb878, 0xb878], /* Hangul Syllable */ + [0xb879, 0xb879], /* Hangul Syllable */ + [0xb87a, 0xb87a], /* Hangul Syllable */ + [0xb87b, 0xb87b], /* Hangul Syllable */ + [0xb87c, 0xb87c], /* Hangul Syllable */ + [0xb87d, 0xb87d], /* Hangul Syllable */ + [0xb87e, 0xb87e], /* Hangul Syllable */ + [0xb87f, 0xb87f], /* Hangul Syllable */ + [0xb880, 0xb880], /* Hangul Syllable */ + [0xb881, 0xb881], /* Hangul Syllable */ + [0xb882, 0xb882], /* Hangul Syllable */ + [0xb883, 0xb883], /* Hangul Syllable */ + [0xb884, 0xb884], /* Hangul Syllable */ + [0xb885, 0xb885], /* Hangul Syllable */ + [0xb886, 0xb886], /* Hangul Syllable */ + [0xb887, 0xb887], /* Hangul Syllable */ + [0xb888, 0xb888], /* Hangul Syllable */ + [0xb889, 0xb889], /* Hangul Syllable */ + [0xb88a, 0xb88a], /* Hangul Syllable */ + [0xb88b, 0xb88b], /* Hangul Syllable */ + [0xb88c, 0xb88c], /* Hangul Syllable */ + [0xb88d, 0xb88d], /* Hangul Syllable */ + [0xb88e, 0xb88e], /* Hangul Syllable */ + [0xb88f, 0xb88f], /* Hangul Syllable */ + [0xb890, 0xb890], /* Hangul Syllable */ + [0xb891, 0xb891], /* Hangul Syllable */ + [0xb892, 0xb892], /* Hangul Syllable */ + [0xb893, 0xb893], /* Hangul Syllable */ + [0xb894, 0xb894], /* Hangul Syllable */ + [0xb895, 0xb895], /* Hangul Syllable */ + [0xb896, 0xb896], /* Hangul Syllable */ + [0xb897, 0xb897], /* Hangul Syllable */ + [0xb898, 0xb898], /* Hangul Syllable */ + [0xb899, 0xb899], /* Hangul Syllable */ + [0xb89a, 0xb89a], /* Hangul Syllable */ + [0xb89b, 0xb89b], /* Hangul Syllable */ + [0xb89c, 0xb89c], /* Hangul Syllable */ + [0xb89d, 0xb89d], /* Hangul Syllable */ + [0xb89e, 0xb89e], /* Hangul Syllable */ + [0xb89f, 0xb89f], /* Hangul Syllable */ + [0xb8a0, 0xb8a0], /* Hangul Syllable */ + [0xb8a1, 0xb8a1], /* Hangul Syllable */ + [0xb8a2, 0xb8a2], /* Hangul Syllable */ + [0xb8a3, 0xb8a3], /* Hangul Syllable */ + [0xb8a4, 0xb8a4], /* Hangul Syllable */ + [0xb8a5, 0xb8a5], /* Hangul Syllable */ + [0xb8a6, 0xb8a6], /* Hangul Syllable */ + [0xb8a7, 0xb8a7], /* Hangul Syllable */ + [0xb8a8, 0xb8a8], /* Hangul Syllable */ + [0xb8a9, 0xb8a9], /* Hangul Syllable */ + [0xb8aa, 0xb8aa], /* Hangul Syllable */ + [0xb8ab, 0xb8ab], /* Hangul Syllable */ + [0xb8ac, 0xb8ac], /* Hangul Syllable */ + [0xb8ad, 0xb8ad], /* Hangul Syllable */ + [0xb8ae, 0xb8ae], /* Hangul Syllable */ + [0xb8af, 0xb8af], /* Hangul Syllable */ + [0xb8b0, 0xb8b0], /* Hangul Syllable */ + [0xb8b1, 0xb8b1], /* Hangul Syllable */ + [0xb8b2, 0xb8b2], /* Hangul Syllable */ + [0xb8b3, 0xb8b3], /* Hangul Syllable */ + [0xb8b4, 0xb8b4], /* Hangul Syllable */ + [0xb8b5, 0xb8b5], /* Hangul Syllable */ + [0xb8b6, 0xb8b6], /* Hangul Syllable */ + [0xb8b7, 0xb8b7], /* Hangul Syllable */ + [0xb8b8, 0xb8b8], /* Hangul Syllable */ + [0xb8b9, 0xb8b9], /* Hangul Syllable */ + [0xb8ba, 0xb8ba], /* Hangul Syllable */ + [0xb8bb, 0xb8bb], /* Hangul Syllable */ + [0xb8bc, 0xb8bc], /* Hangul Syllable */ + [0xb8bd, 0xb8bd], /* Hangul Syllable */ + [0xb8be, 0xb8be], /* Hangul Syllable */ + [0xb8bf, 0xb8bf], /* Hangul Syllable */ + [0xb8c0, 0xb8c0], /* Hangul Syllable */ + [0xb8c1, 0xb8c1], /* Hangul Syllable */ + [0xb8c2, 0xb8c2], /* Hangul Syllable */ + [0xb8c3, 0xb8c3], /* Hangul Syllable */ + [0xb8c4, 0xb8c4], /* Hangul Syllable */ + [0xb8c5, 0xb8c5], /* Hangul Syllable */ + [0xb8c6, 0xb8c6], /* Hangul Syllable */ + [0xb8c7, 0xb8c7], /* Hangul Syllable */ + [0xb8c8, 0xb8c8], /* Hangul Syllable */ + [0xb8c9, 0xb8c9], /* Hangul Syllable */ + [0xb8ca, 0xb8ca], /* Hangul Syllable */ + [0xb8cb, 0xb8cb], /* Hangul Syllable */ + [0xb8cc, 0xb8cc], /* Hangul Syllable */ + [0xb8cd, 0xb8cd], /* Hangul Syllable */ + [0xb8ce, 0xb8ce], /* Hangul Syllable */ + [0xb8cf, 0xb8cf], /* Hangul Syllable */ + [0xb8d0, 0xb8d0], /* Hangul Syllable */ + [0xb8d1, 0xb8d1], /* Hangul Syllable */ + [0xb8d2, 0xb8d2], /* Hangul Syllable */ + [0xb8d3, 0xb8d3], /* Hangul Syllable */ + [0xb8d4, 0xb8d4], /* Hangul Syllable */ + [0xb8d5, 0xb8d5], /* Hangul Syllable */ + [0xb8d6, 0xb8d6], /* Hangul Syllable */ + [0xb8d7, 0xb8d7], /* Hangul Syllable */ + [0xb8d8, 0xb8d8], /* Hangul Syllable */ + [0xb8d9, 0xb8d9], /* Hangul Syllable */ + [0xb8da, 0xb8da], /* Hangul Syllable */ + [0xb8db, 0xb8db], /* Hangul Syllable */ + [0xb8dc, 0xb8dc], /* Hangul Syllable */ + [0xb8dd, 0xb8dd], /* Hangul Syllable */ + [0xb8de, 0xb8de], /* Hangul Syllable */ + [0xb8df, 0xb8df], /* Hangul Syllable */ + [0xb8e0, 0xb8e0], /* Hangul Syllable */ + [0xb8e1, 0xb8e1], /* Hangul Syllable */ + [0xb8e2, 0xb8e2], /* Hangul Syllable */ + [0xb8e3, 0xb8e3], /* Hangul Syllable */ + [0xb8e4, 0xb8e4], /* Hangul Syllable */ + [0xb8e5, 0xb8e5], /* Hangul Syllable */ + [0xb8e6, 0xb8e6], /* Hangul Syllable */ + [0xb8e7, 0xb8e7], /* Hangul Syllable */ + [0xb8e8, 0xb8e8], /* Hangul Syllable */ + [0xb8e9, 0xb8e9], /* Hangul Syllable */ + [0xb8ea, 0xb8ea], /* Hangul Syllable */ + [0xb8eb, 0xb8eb], /* Hangul Syllable */ + [0xb8ec, 0xb8ec], /* Hangul Syllable */ + [0xb8ed, 0xb8ed], /* Hangul Syllable */ + [0xb8ee, 0xb8ee], /* Hangul Syllable */ + [0xb8ef, 0xb8ef], /* Hangul Syllable */ + [0xb8f0, 0xb8f0], /* Hangul Syllable */ + [0xb8f1, 0xb8f1], /* Hangul Syllable */ + [0xb8f2, 0xb8f2], /* Hangul Syllable */ + [0xb8f3, 0xb8f3], /* Hangul Syllable */ + [0xb8f4, 0xb8f4], /* Hangul Syllable */ + [0xb8f5, 0xb8f5], /* Hangul Syllable */ + [0xb8f6, 0xb8f6], /* Hangul Syllable */ + [0xb8f7, 0xb8f7], /* Hangul Syllable */ + [0xb8f8, 0xb8f8], /* Hangul Syllable */ + [0xb8f9, 0xb8f9], /* Hangul Syllable */ + [0xb8fa, 0xb8fa], /* Hangul Syllable */ + [0xb8fb, 0xb8fb], /* Hangul Syllable */ + [0xb8fc, 0xb8fc], /* Hangul Syllable */ + [0xb8fd, 0xb8fd], /* Hangul Syllable */ + [0xb8fe, 0xb8fe], /* Hangul Syllable */ + [0xb8ff, 0xb8ff], /* Hangul Syllable */ + [0xb900, 0xb900], /* Hangul Syllable */ + [0xb901, 0xb901], /* Hangul Syllable */ + [0xb902, 0xb902], /* Hangul Syllable */ + [0xb903, 0xb903], /* Hangul Syllable */ + [0xb904, 0xb904], /* Hangul Syllable */ + [0xb905, 0xb905], /* Hangul Syllable */ + [0xb906, 0xb906], /* Hangul Syllable */ + [0xb907, 0xb907], /* Hangul Syllable */ + [0xb908, 0xb908], /* Hangul Syllable */ + [0xb909, 0xb909], /* Hangul Syllable */ + [0xb90a, 0xb90a], /* Hangul Syllable */ + [0xb90b, 0xb90b], /* Hangul Syllable */ + [0xb90c, 0xb90c], /* Hangul Syllable */ + [0xb90d, 0xb90d], /* Hangul Syllable */ + [0xb90e, 0xb90e], /* Hangul Syllable */ + [0xb90f, 0xb90f], /* Hangul Syllable */ + [0xb910, 0xb910], /* Hangul Syllable */ + [0xb911, 0xb911], /* Hangul Syllable */ + [0xb912, 0xb912], /* Hangul Syllable */ + [0xb913, 0xb913], /* Hangul Syllable */ + [0xb914, 0xb914], /* Hangul Syllable */ + [0xb915, 0xb915], /* Hangul Syllable */ + [0xb916, 0xb916], /* Hangul Syllable */ + [0xb917, 0xb917], /* Hangul Syllable */ + [0xb918, 0xb918], /* Hangul Syllable */ + [0xb919, 0xb919], /* Hangul Syllable */ + [0xb91a, 0xb91a], /* Hangul Syllable */ + [0xb91b, 0xb91b], /* Hangul Syllable */ + [0xb91c, 0xb91c], /* Hangul Syllable */ + [0xb91d, 0xb91d], /* Hangul Syllable */ + [0xb91e, 0xb91e], /* Hangul Syllable */ + [0xb91f, 0xb91f], /* Hangul Syllable */ + [0xb920, 0xb920], /* Hangul Syllable */ + [0xb921, 0xb921], /* Hangul Syllable */ + [0xb922, 0xb922], /* Hangul Syllable */ + [0xb923, 0xb923], /* Hangul Syllable */ + [0xb924, 0xb924], /* Hangul Syllable */ + [0xb925, 0xb925], /* Hangul Syllable */ + [0xb926, 0xb926], /* Hangul Syllable */ + [0xb927, 0xb927], /* Hangul Syllable */ + [0xb928, 0xb928], /* Hangul Syllable */ + [0xb929, 0xb929], /* Hangul Syllable */ + [0xb92a, 0xb92a], /* Hangul Syllable */ + [0xb92b, 0xb92b], /* Hangul Syllable */ + [0xb92c, 0xb92c], /* Hangul Syllable */ + [0xb92d, 0xb92d], /* Hangul Syllable */ + [0xb92e, 0xb92e], /* Hangul Syllable */ + [0xb92f, 0xb92f], /* Hangul Syllable */ + [0xb930, 0xb930], /* Hangul Syllable */ + [0xb931, 0xb931], /* Hangul Syllable */ + [0xb932, 0xb932], /* Hangul Syllable */ + [0xb933, 0xb933], /* Hangul Syllable */ + [0xb934, 0xb934], /* Hangul Syllable */ + [0xb935, 0xb935], /* Hangul Syllable */ + [0xb936, 0xb936], /* Hangul Syllable */ + [0xb937, 0xb937], /* Hangul Syllable */ + [0xb938, 0xb938], /* Hangul Syllable */ + [0xb939, 0xb939], /* Hangul Syllable */ + [0xb93a, 0xb93a], /* Hangul Syllable */ + [0xb93b, 0xb93b], /* Hangul Syllable */ + [0xb93c, 0xb93c], /* Hangul Syllable */ + [0xb93d, 0xb93d], /* Hangul Syllable */ + [0xb93e, 0xb93e], /* Hangul Syllable */ + [0xb93f, 0xb93f], /* Hangul Syllable */ + [0xb940, 0xb940], /* Hangul Syllable */ + [0xb941, 0xb941], /* Hangul Syllable */ + [0xb942, 0xb942], /* Hangul Syllable */ + [0xb943, 0xb943], /* Hangul Syllable */ + [0xb944, 0xb944], /* Hangul Syllable */ + [0xb945, 0xb945], /* Hangul Syllable */ + [0xb946, 0xb946], /* Hangul Syllable */ + [0xb947, 0xb947], /* Hangul Syllable */ + [0xb948, 0xb948], /* Hangul Syllable */ + [0xb949, 0xb949], /* Hangul Syllable */ + [0xb94a, 0xb94a], /* Hangul Syllable */ + [0xb94b, 0xb94b], /* Hangul Syllable */ + [0xb94c, 0xb94c], /* Hangul Syllable */ + [0xb94d, 0xb94d], /* Hangul Syllable */ + [0xb94e, 0xb94e], /* Hangul Syllable */ + [0xb94f, 0xb94f], /* Hangul Syllable */ + [0xb950, 0xb950], /* Hangul Syllable */ + [0xb951, 0xb951], /* Hangul Syllable */ + [0xb952, 0xb952], /* Hangul Syllable */ + [0xb953, 0xb953], /* Hangul Syllable */ + [0xb954, 0xb954], /* Hangul Syllable */ + [0xb955, 0xb955], /* Hangul Syllable */ + [0xb956, 0xb956], /* Hangul Syllable */ + [0xb957, 0xb957], /* Hangul Syllable */ + [0xb958, 0xb958], /* Hangul Syllable */ + [0xb959, 0xb959], /* Hangul Syllable */ + [0xb95a, 0xb95a], /* Hangul Syllable */ + [0xb95b, 0xb95b], /* Hangul Syllable */ + [0xb95c, 0xb95c], /* Hangul Syllable */ + [0xb95d, 0xb95d], /* Hangul Syllable */ + [0xb95e, 0xb95e], /* Hangul Syllable */ + [0xb95f, 0xb95f], /* Hangul Syllable */ + [0xb960, 0xb960], /* Hangul Syllable */ + [0xb961, 0xb961], /* Hangul Syllable */ + [0xb962, 0xb962], /* Hangul Syllable */ + [0xb963, 0xb963], /* Hangul Syllable */ + [0xb964, 0xb964], /* Hangul Syllable */ + [0xb965, 0xb965], /* Hangul Syllable */ + [0xb966, 0xb966], /* Hangul Syllable */ + [0xb967, 0xb967], /* Hangul Syllable */ + [0xb968, 0xb968], /* Hangul Syllable */ + [0xb969, 0xb969], /* Hangul Syllable */ + [0xb96a, 0xb96a], /* Hangul Syllable */ + [0xb96b, 0xb96b], /* Hangul Syllable */ + [0xb96c, 0xb96c], /* Hangul Syllable */ + [0xb96d, 0xb96d], /* Hangul Syllable */ + [0xb96e, 0xb96e], /* Hangul Syllable */ + [0xb96f, 0xb96f], /* Hangul Syllable */ + [0xb970, 0xb970], /* Hangul Syllable */ + [0xb971, 0xb971], /* Hangul Syllable */ + [0xb972, 0xb972], /* Hangul Syllable */ + [0xb973, 0xb973], /* Hangul Syllable */ + [0xb974, 0xb974], /* Hangul Syllable */ + [0xb975, 0xb975], /* Hangul Syllable */ + [0xb976, 0xb976], /* Hangul Syllable */ + [0xb977, 0xb977], /* Hangul Syllable */ + [0xb978, 0xb978], /* Hangul Syllable */ + [0xb979, 0xb979], /* Hangul Syllable */ + [0xb97a, 0xb97a], /* Hangul Syllable */ + [0xb97b, 0xb97b], /* Hangul Syllable */ + [0xb97c, 0xb97c], /* Hangul Syllable */ + [0xb97d, 0xb97d], /* Hangul Syllable */ + [0xb97e, 0xb97e], /* Hangul Syllable */ + [0xb97f, 0xb97f], /* Hangul Syllable */ + [0xb980, 0xb980], /* Hangul Syllable */ + [0xb981, 0xb981], /* Hangul Syllable */ + [0xb982, 0xb982], /* Hangul Syllable */ + [0xb983, 0xb983], /* Hangul Syllable */ + [0xb984, 0xb984], /* Hangul Syllable */ + [0xb985, 0xb985], /* Hangul Syllable */ + [0xb986, 0xb986], /* Hangul Syllable */ + [0xb987, 0xb987], /* Hangul Syllable */ + [0xb988, 0xb988], /* Hangul Syllable */ + [0xb989, 0xb989], /* Hangul Syllable */ + [0xb98a, 0xb98a], /* Hangul Syllable */ + [0xb98b, 0xb98b], /* Hangul Syllable */ + [0xb98c, 0xb98c], /* Hangul Syllable */ + [0xb98d, 0xb98d], /* Hangul Syllable */ + [0xb98e, 0xb98e], /* Hangul Syllable */ + [0xb98f, 0xb98f], /* Hangul Syllable */ + [0xb990, 0xb990], /* Hangul Syllable */ + [0xb991, 0xb991], /* Hangul Syllable */ + [0xb992, 0xb992], /* Hangul Syllable */ + [0xb993, 0xb993], /* Hangul Syllable */ + [0xb994, 0xb994], /* Hangul Syllable */ + [0xb995, 0xb995], /* Hangul Syllable */ + [0xb996, 0xb996], /* Hangul Syllable */ + [0xb997, 0xb997], /* Hangul Syllable */ + [0xb998, 0xb998], /* Hangul Syllable */ + [0xb999, 0xb999], /* Hangul Syllable */ + [0xb99a, 0xb99a], /* Hangul Syllable */ + [0xb99b, 0xb99b], /* Hangul Syllable */ + [0xb99c, 0xb99c], /* Hangul Syllable */ + [0xb99d, 0xb99d], /* Hangul Syllable */ + [0xb99e, 0xb99e], /* Hangul Syllable */ + [0xb99f, 0xb99f], /* Hangul Syllable */ + [0xb9a0, 0xb9a0], /* Hangul Syllable */ + [0xb9a1, 0xb9a1], /* Hangul Syllable */ + [0xb9a2, 0xb9a2], /* Hangul Syllable */ + [0xb9a3, 0xb9a3], /* Hangul Syllable */ + [0xb9a4, 0xb9a4], /* Hangul Syllable */ + [0xb9a5, 0xb9a5], /* Hangul Syllable */ + [0xb9a6, 0xb9a6], /* Hangul Syllable */ + [0xb9a7, 0xb9a7], /* Hangul Syllable */ + [0xb9a8, 0xb9a8], /* Hangul Syllable */ + [0xb9a9, 0xb9a9], /* Hangul Syllable */ + [0xb9aa, 0xb9aa], /* Hangul Syllable */ + [0xb9ab, 0xb9ab], /* Hangul Syllable */ + [0xb9ac, 0xb9ac], /* Hangul Syllable */ + [0xb9ad, 0xb9ad], /* Hangul Syllable */ + [0xb9ae, 0xb9ae], /* Hangul Syllable */ + [0xb9af, 0xb9af], /* Hangul Syllable */ + [0xb9b0, 0xb9b0], /* Hangul Syllable */ + [0xb9b1, 0xb9b1], /* Hangul Syllable */ + [0xb9b2, 0xb9b2], /* Hangul Syllable */ + [0xb9b3, 0xb9b3], /* Hangul Syllable */ + [0xb9b4, 0xb9b4], /* Hangul Syllable */ + [0xb9b5, 0xb9b5], /* Hangul Syllable */ + [0xb9b6, 0xb9b6], /* Hangul Syllable */ + [0xb9b7, 0xb9b7], /* Hangul Syllable */ + [0xb9b8, 0xb9b8], /* Hangul Syllable */ + [0xb9b9, 0xb9b9], /* Hangul Syllable */ + [0xb9ba, 0xb9ba], /* Hangul Syllable */ + [0xb9bb, 0xb9bb], /* Hangul Syllable */ + [0xb9bc, 0xb9bc], /* Hangul Syllable */ + [0xb9bd, 0xb9bd], /* Hangul Syllable */ + [0xb9be, 0xb9be], /* Hangul Syllable */ + [0xb9bf, 0xb9bf], /* Hangul Syllable */ + [0xb9c0, 0xb9c0], /* Hangul Syllable */ + [0xb9c1, 0xb9c1], /* Hangul Syllable */ + [0xb9c2, 0xb9c2], /* Hangul Syllable */ + [0xb9c3, 0xb9c3], /* Hangul Syllable */ + [0xb9c4, 0xb9c4], /* Hangul Syllable */ + [0xb9c5, 0xb9c5], /* Hangul Syllable */ + [0xb9c6, 0xb9c6], /* Hangul Syllable */ + [0xb9c7, 0xb9c7], /* Hangul Syllable */ + [0xb9c8, 0xb9c8], /* Hangul Syllable */ + [0xb9c9, 0xb9c9], /* Hangul Syllable */ + [0xb9ca, 0xb9ca], /* Hangul Syllable */ + [0xb9cb, 0xb9cb], /* Hangul Syllable */ + [0xb9cc, 0xb9cc], /* Hangul Syllable */ + [0xb9cd, 0xb9cd], /* Hangul Syllable */ + [0xb9ce, 0xb9ce], /* Hangul Syllable */ + [0xb9cf, 0xb9cf], /* Hangul Syllable */ + [0xb9d0, 0xb9d0], /* Hangul Syllable */ + [0xb9d1, 0xb9d1], /* Hangul Syllable */ + [0xb9d2, 0xb9d2], /* Hangul Syllable */ + [0xb9d3, 0xb9d3], /* Hangul Syllable */ + [0xb9d4, 0xb9d4], /* Hangul Syllable */ + [0xb9d5, 0xb9d5], /* Hangul Syllable */ + [0xb9d6, 0xb9d6], /* Hangul Syllable */ + [0xb9d7, 0xb9d7], /* Hangul Syllable */ + [0xb9d8, 0xb9d8], /* Hangul Syllable */ + [0xb9d9, 0xb9d9], /* Hangul Syllable */ + [0xb9da, 0xb9da], /* Hangul Syllable */ + [0xb9db, 0xb9db], /* Hangul Syllable */ + [0xb9dc, 0xb9dc], /* Hangul Syllable */ + [0xb9dd, 0xb9dd], /* Hangul Syllable */ + [0xb9de, 0xb9de], /* Hangul Syllable */ + [0xb9df, 0xb9df], /* Hangul Syllable */ + [0xb9e0, 0xb9e0], /* Hangul Syllable */ + [0xb9e1, 0xb9e1], /* Hangul Syllable */ + [0xb9e2, 0xb9e2], /* Hangul Syllable */ + [0xb9e3, 0xb9e3], /* Hangul Syllable */ + [0xb9e4, 0xb9e4], /* Hangul Syllable */ + [0xb9e5, 0xb9e5], /* Hangul Syllable */ + [0xb9e6, 0xb9e6], /* Hangul Syllable */ + [0xb9e7, 0xb9e7], /* Hangul Syllable */ + [0xb9e8, 0xb9e8], /* Hangul Syllable */ + [0xb9e9, 0xb9e9], /* Hangul Syllable */ + [0xb9ea, 0xb9ea], /* Hangul Syllable */ + [0xb9eb, 0xb9eb], /* Hangul Syllable */ + [0xb9ec, 0xb9ec], /* Hangul Syllable */ + [0xb9ed, 0xb9ed], /* Hangul Syllable */ + [0xb9ee, 0xb9ee], /* Hangul Syllable */ + [0xb9ef, 0xb9ef], /* Hangul Syllable */ + [0xb9f0, 0xb9f0], /* Hangul Syllable */ + [0xb9f1, 0xb9f1], /* Hangul Syllable */ + [0xb9f2, 0xb9f2], /* Hangul Syllable */ + [0xb9f3, 0xb9f3], /* Hangul Syllable */ + [0xb9f4, 0xb9f4], /* Hangul Syllable */ + [0xb9f5, 0xb9f5], /* Hangul Syllable */ + [0xb9f6, 0xb9f6], /* Hangul Syllable */ + [0xb9f7, 0xb9f7], /* Hangul Syllable */ + [0xb9f8, 0xb9f8], /* Hangul Syllable */ + [0xb9f9, 0xb9f9], /* Hangul Syllable */ + [0xb9fa, 0xb9fa], /* Hangul Syllable */ + [0xb9fb, 0xb9fb], /* Hangul Syllable */ + [0xb9fc, 0xb9fc], /* Hangul Syllable */ + [0xb9fd, 0xb9fd], /* Hangul Syllable */ + [0xb9fe, 0xb9fe], /* Hangul Syllable */ + [0xb9ff, 0xb9ff], /* Hangul Syllable */ + [0xba00, 0xba00], /* Hangul Syllable */ + [0xba01, 0xba01], /* Hangul Syllable */ + [0xba02, 0xba02], /* Hangul Syllable */ + [0xba03, 0xba03], /* Hangul Syllable */ + [0xba04, 0xba04], /* Hangul Syllable */ + [0xba05, 0xba05], /* Hangul Syllable */ + [0xba06, 0xba06], /* Hangul Syllable */ + [0xba07, 0xba07], /* Hangul Syllable */ + [0xba08, 0xba08], /* Hangul Syllable */ + [0xba09, 0xba09], /* Hangul Syllable */ + [0xba0a, 0xba0a], /* Hangul Syllable */ + [0xba0b, 0xba0b], /* Hangul Syllable */ + [0xba0c, 0xba0c], /* Hangul Syllable */ + [0xba0d, 0xba0d], /* Hangul Syllable */ + [0xba0e, 0xba0e], /* Hangul Syllable */ + [0xba0f, 0xba0f], /* Hangul Syllable */ + [0xba10, 0xba10], /* Hangul Syllable */ + [0xba11, 0xba11], /* Hangul Syllable */ + [0xba12, 0xba12], /* Hangul Syllable */ + [0xba13, 0xba13], /* Hangul Syllable */ + [0xba14, 0xba14], /* Hangul Syllable */ + [0xba15, 0xba15], /* Hangul Syllable */ + [0xba16, 0xba16], /* Hangul Syllable */ + [0xba17, 0xba17], /* Hangul Syllable */ + [0xba18, 0xba18], /* Hangul Syllable */ + [0xba19, 0xba19], /* Hangul Syllable */ + [0xba1a, 0xba1a], /* Hangul Syllable */ + [0xba1b, 0xba1b], /* Hangul Syllable */ + [0xba1c, 0xba1c], /* Hangul Syllable */ + [0xba1d, 0xba1d], /* Hangul Syllable */ + [0xba1e, 0xba1e], /* Hangul Syllable */ + [0xba1f, 0xba1f], /* Hangul Syllable */ + [0xba20, 0xba20], /* Hangul Syllable */ + [0xba21, 0xba21], /* Hangul Syllable */ + [0xba22, 0xba22], /* Hangul Syllable */ + [0xba23, 0xba23], /* Hangul Syllable */ + [0xba24, 0xba24], /* Hangul Syllable */ + [0xba25, 0xba25], /* Hangul Syllable */ + [0xba26, 0xba26], /* Hangul Syllable */ + [0xba27, 0xba27], /* Hangul Syllable */ + [0xba28, 0xba28], /* Hangul Syllable */ + [0xba29, 0xba29], /* Hangul Syllable */ + [0xba2a, 0xba2a], /* Hangul Syllable */ + [0xba2b, 0xba2b], /* Hangul Syllable */ + [0xba2c, 0xba2c], /* Hangul Syllable */ + [0xba2d, 0xba2d], /* Hangul Syllable */ + [0xba2e, 0xba2e], /* Hangul Syllable */ + [0xba2f, 0xba2f], /* Hangul Syllable */ + [0xba30, 0xba30], /* Hangul Syllable */ + [0xba31, 0xba31], /* Hangul Syllable */ + [0xba32, 0xba32], /* Hangul Syllable */ + [0xba33, 0xba33], /* Hangul Syllable */ + [0xba34, 0xba34], /* Hangul Syllable */ + [0xba35, 0xba35], /* Hangul Syllable */ + [0xba36, 0xba36], /* Hangul Syllable */ + [0xba37, 0xba37], /* Hangul Syllable */ + [0xba38, 0xba38], /* Hangul Syllable */ + [0xba39, 0xba39], /* Hangul Syllable */ + [0xba3a, 0xba3a], /* Hangul Syllable */ + [0xba3b, 0xba3b], /* Hangul Syllable */ + [0xba3c, 0xba3c], /* Hangul Syllable */ + [0xba3d, 0xba3d], /* Hangul Syllable */ + [0xba3e, 0xba3e], /* Hangul Syllable */ + [0xba3f, 0xba3f], /* Hangul Syllable */ + [0xba40, 0xba40], /* Hangul Syllable */ + [0xba41, 0xba41], /* Hangul Syllable */ + [0xba42, 0xba42], /* Hangul Syllable */ + [0xba43, 0xba43], /* Hangul Syllable */ + [0xba44, 0xba44], /* Hangul Syllable */ + [0xba45, 0xba45], /* Hangul Syllable */ + [0xba46, 0xba46], /* Hangul Syllable */ + [0xba47, 0xba47], /* Hangul Syllable */ + [0xba48, 0xba48], /* Hangul Syllable */ + [0xba49, 0xba49], /* Hangul Syllable */ + [0xba4a, 0xba4a], /* Hangul Syllable */ + [0xba4b, 0xba4b], /* Hangul Syllable */ + [0xba4c, 0xba4c], /* Hangul Syllable */ + [0xba4d, 0xba4d], /* Hangul Syllable */ + [0xba4e, 0xba4e], /* Hangul Syllable */ + [0xba4f, 0xba4f], /* Hangul Syllable */ + [0xba50, 0xba50], /* Hangul Syllable */ + [0xba51, 0xba51], /* Hangul Syllable */ + [0xba52, 0xba52], /* Hangul Syllable */ + [0xba53, 0xba53], /* Hangul Syllable */ + [0xba54, 0xba54], /* Hangul Syllable */ + [0xba55, 0xba55], /* Hangul Syllable */ + [0xba56, 0xba56], /* Hangul Syllable */ + [0xba57, 0xba57], /* Hangul Syllable */ + [0xba58, 0xba58], /* Hangul Syllable */ + [0xba59, 0xba59], /* Hangul Syllable */ + [0xba5a, 0xba5a], /* Hangul Syllable */ + [0xba5b, 0xba5b], /* Hangul Syllable */ + [0xba5c, 0xba5c], /* Hangul Syllable */ + [0xba5d, 0xba5d], /* Hangul Syllable */ + [0xba5e, 0xba5e], /* Hangul Syllable */ + [0xba5f, 0xba5f], /* Hangul Syllable */ + [0xba60, 0xba60], /* Hangul Syllable */ + [0xba61, 0xba61], /* Hangul Syllable */ + [0xba62, 0xba62], /* Hangul Syllable */ + [0xba63, 0xba63], /* Hangul Syllable */ + [0xba64, 0xba64], /* Hangul Syllable */ + [0xba65, 0xba65], /* Hangul Syllable */ + [0xba66, 0xba66], /* Hangul Syllable */ + [0xba67, 0xba67], /* Hangul Syllable */ + [0xba68, 0xba68], /* Hangul Syllable */ + [0xba69, 0xba69], /* Hangul Syllable */ + [0xba6a, 0xba6a], /* Hangul Syllable */ + [0xba6b, 0xba6b], /* Hangul Syllable */ + [0xba6c, 0xba6c], /* Hangul Syllable */ + [0xba6d, 0xba6d], /* Hangul Syllable */ + [0xba6e, 0xba6e], /* Hangul Syllable */ + [0xba6f, 0xba6f], /* Hangul Syllable */ + [0xba70, 0xba70], /* Hangul Syllable */ + [0xba71, 0xba71], /* Hangul Syllable */ + [0xba72, 0xba72], /* Hangul Syllable */ + [0xba73, 0xba73], /* Hangul Syllable */ + [0xba74, 0xba74], /* Hangul Syllable */ + [0xba75, 0xba75], /* Hangul Syllable */ + [0xba76, 0xba76], /* Hangul Syllable */ + [0xba77, 0xba77], /* Hangul Syllable */ + [0xba78, 0xba78], /* Hangul Syllable */ + [0xba79, 0xba79], /* Hangul Syllable */ + [0xba7a, 0xba7a], /* Hangul Syllable */ + [0xba7b, 0xba7b], /* Hangul Syllable */ + [0xba7c, 0xba7c], /* Hangul Syllable */ + [0xba7d, 0xba7d], /* Hangul Syllable */ + [0xba7e, 0xba7e], /* Hangul Syllable */ + [0xba7f, 0xba7f], /* Hangul Syllable */ + [0xba80, 0xba80], /* Hangul Syllable */ + [0xba81, 0xba81], /* Hangul Syllable */ + [0xba82, 0xba82], /* Hangul Syllable */ + [0xba83, 0xba83], /* Hangul Syllable */ + [0xba84, 0xba84], /* Hangul Syllable */ + [0xba85, 0xba85], /* Hangul Syllable */ + [0xba86, 0xba86], /* Hangul Syllable */ + [0xba87, 0xba87], /* Hangul Syllable */ + [0xba88, 0xba88], /* Hangul Syllable */ + [0xba89, 0xba89], /* Hangul Syllable */ + [0xba8a, 0xba8a], /* Hangul Syllable */ + [0xba8b, 0xba8b], /* Hangul Syllable */ + [0xba8c, 0xba8c], /* Hangul Syllable */ + [0xba8d, 0xba8d], /* Hangul Syllable */ + [0xba8e, 0xba8e], /* Hangul Syllable */ + [0xba8f, 0xba8f], /* Hangul Syllable */ + [0xba90, 0xba90], /* Hangul Syllable */ + [0xba91, 0xba91], /* Hangul Syllable */ + [0xba92, 0xba92], /* Hangul Syllable */ + [0xba93, 0xba93], /* Hangul Syllable */ + [0xba94, 0xba94], /* Hangul Syllable */ + [0xba95, 0xba95], /* Hangul Syllable */ + [0xba96, 0xba96], /* Hangul Syllable */ + [0xba97, 0xba97], /* Hangul Syllable */ + [0xba98, 0xba98], /* Hangul Syllable */ + [0xba99, 0xba99], /* Hangul Syllable */ + [0xba9a, 0xba9a], /* Hangul Syllable */ + [0xba9b, 0xba9b], /* Hangul Syllable */ + [0xba9c, 0xba9c], /* Hangul Syllable */ + [0xba9d, 0xba9d], /* Hangul Syllable */ + [0xba9e, 0xba9e], /* Hangul Syllable */ + [0xba9f, 0xba9f], /* Hangul Syllable */ + [0xbaa0, 0xbaa0], /* Hangul Syllable */ + [0xbaa1, 0xbaa1], /* Hangul Syllable */ + [0xbaa2, 0xbaa2], /* Hangul Syllable */ + [0xbaa3, 0xbaa3], /* Hangul Syllable */ + [0xbaa4, 0xbaa4], /* Hangul Syllable */ + [0xbaa5, 0xbaa5], /* Hangul Syllable */ + [0xbaa6, 0xbaa6], /* Hangul Syllable */ + [0xbaa7, 0xbaa7], /* Hangul Syllable */ + [0xbaa8, 0xbaa8], /* Hangul Syllable */ + [0xbaa9, 0xbaa9], /* Hangul Syllable */ + [0xbaaa, 0xbaaa], /* Hangul Syllable */ + [0xbaab, 0xbaab], /* Hangul Syllable */ + [0xbaac, 0xbaac], /* Hangul Syllable */ + [0xbaad, 0xbaad], /* Hangul Syllable */ + [0xbaae, 0xbaae], /* Hangul Syllable */ + [0xbaaf, 0xbaaf], /* Hangul Syllable */ + [0xbab0, 0xbab0], /* Hangul Syllable */ + [0xbab1, 0xbab1], /* Hangul Syllable */ + [0xbab2, 0xbab2], /* Hangul Syllable */ + [0xbab3, 0xbab3], /* Hangul Syllable */ + [0xbab4, 0xbab4], /* Hangul Syllable */ + [0xbab5, 0xbab5], /* Hangul Syllable */ + [0xbab6, 0xbab6], /* Hangul Syllable */ + [0xbab7, 0xbab7], /* Hangul Syllable */ + [0xbab8, 0xbab8], /* Hangul Syllable */ + [0xbab9, 0xbab9], /* Hangul Syllable */ + [0xbaba, 0xbaba], /* Hangul Syllable */ + [0xbabb, 0xbabb], /* Hangul Syllable */ + [0xbabc, 0xbabc], /* Hangul Syllable */ + [0xbabd, 0xbabd], /* Hangul Syllable */ + [0xbabe, 0xbabe], /* Hangul Syllable */ + [0xbabf, 0xbabf], /* Hangul Syllable */ + [0xbac0, 0xbac0], /* Hangul Syllable */ + [0xbac1, 0xbac1], /* Hangul Syllable */ + [0xbac2, 0xbac2], /* Hangul Syllable */ + [0xbac3, 0xbac3], /* Hangul Syllable */ + [0xbac4, 0xbac4], /* Hangul Syllable */ + [0xbac5, 0xbac5], /* Hangul Syllable */ + [0xbac6, 0xbac6], /* Hangul Syllable */ + [0xbac7, 0xbac7], /* Hangul Syllable */ + [0xbac8, 0xbac8], /* Hangul Syllable */ + [0xbac9, 0xbac9], /* Hangul Syllable */ + [0xbaca, 0xbaca], /* Hangul Syllable */ + [0xbacb, 0xbacb], /* Hangul Syllable */ + [0xbacc, 0xbacc], /* Hangul Syllable */ + [0xbacd, 0xbacd], /* Hangul Syllable */ + [0xbace, 0xbace], /* Hangul Syllable */ + [0xbacf, 0xbacf], /* Hangul Syllable */ + [0xbad0, 0xbad0], /* Hangul Syllable */ + [0xbad1, 0xbad1], /* Hangul Syllable */ + [0xbad2, 0xbad2], /* Hangul Syllable */ + [0xbad3, 0xbad3], /* Hangul Syllable */ + [0xbad4, 0xbad4], /* Hangul Syllable */ + [0xbad5, 0xbad5], /* Hangul Syllable */ + [0xbad6, 0xbad6], /* Hangul Syllable */ + [0xbad7, 0xbad7], /* Hangul Syllable */ + [0xbad8, 0xbad8], /* Hangul Syllable */ + [0xbad9, 0xbad9], /* Hangul Syllable */ + [0xbada, 0xbada], /* Hangul Syllable */ + [0xbadb, 0xbadb], /* Hangul Syllable */ + [0xbadc, 0xbadc], /* Hangul Syllable */ + [0xbadd, 0xbadd], /* Hangul Syllable */ + [0xbade, 0xbade], /* Hangul Syllable */ + [0xbadf, 0xbadf], /* Hangul Syllable */ + [0xbae0, 0xbae0], /* Hangul Syllable */ + [0xbae1, 0xbae1], /* Hangul Syllable */ + [0xbae2, 0xbae2], /* Hangul Syllable */ + [0xbae3, 0xbae3], /* Hangul Syllable */ + [0xbae4, 0xbae4], /* Hangul Syllable */ + [0xbae5, 0xbae5], /* Hangul Syllable */ + [0xbae6, 0xbae6], /* Hangul Syllable */ + [0xbae7, 0xbae7], /* Hangul Syllable */ + [0xbae8, 0xbae8], /* Hangul Syllable */ + [0xbae9, 0xbae9], /* Hangul Syllable */ + [0xbaea, 0xbaea], /* Hangul Syllable */ + [0xbaeb, 0xbaeb], /* Hangul Syllable */ + [0xbaec, 0xbaec], /* Hangul Syllable */ + [0xbaed, 0xbaed], /* Hangul Syllable */ + [0xbaee, 0xbaee], /* Hangul Syllable */ + [0xbaef, 0xbaef], /* Hangul Syllable */ + [0xbaf0, 0xbaf0], /* Hangul Syllable */ + [0xbaf1, 0xbaf1], /* Hangul Syllable */ + [0xbaf2, 0xbaf2], /* Hangul Syllable */ + [0xbaf3, 0xbaf3], /* Hangul Syllable */ + [0xbaf4, 0xbaf4], /* Hangul Syllable */ + [0xbaf5, 0xbaf5], /* Hangul Syllable */ + [0xbaf6, 0xbaf6], /* Hangul Syllable */ + [0xbaf7, 0xbaf7], /* Hangul Syllable */ + [0xbaf8, 0xbaf8], /* Hangul Syllable */ + [0xbaf9, 0xbaf9], /* Hangul Syllable */ + [0xbafa, 0xbafa], /* Hangul Syllable */ + [0xbafb, 0xbafb], /* Hangul Syllable */ + [0xbafc, 0xbafc], /* Hangul Syllable */ + [0xbafd, 0xbafd], /* Hangul Syllable */ + [0xbafe, 0xbafe], /* Hangul Syllable */ + [0xbaff, 0xbaff], /* Hangul Syllable */ + [0xbb00, 0xbb00], /* Hangul Syllable */ + [0xbb01, 0xbb01], /* Hangul Syllable */ + [0xbb02, 0xbb02], /* Hangul Syllable */ + [0xbb03, 0xbb03], /* Hangul Syllable */ + [0xbb04, 0xbb04], /* Hangul Syllable */ + [0xbb05, 0xbb05], /* Hangul Syllable */ + [0xbb06, 0xbb06], /* Hangul Syllable */ + [0xbb07, 0xbb07], /* Hangul Syllable */ + [0xbb08, 0xbb08], /* Hangul Syllable */ + [0xbb09, 0xbb09], /* Hangul Syllable */ + [0xbb0a, 0xbb0a], /* Hangul Syllable */ + [0xbb0b, 0xbb0b], /* Hangul Syllable */ + [0xbb0c, 0xbb0c], /* Hangul Syllable */ + [0xbb0d, 0xbb0d], /* Hangul Syllable */ + [0xbb0e, 0xbb0e], /* Hangul Syllable */ + [0xbb0f, 0xbb0f], /* Hangul Syllable */ + [0xbb10, 0xbb10], /* Hangul Syllable */ + [0xbb11, 0xbb11], /* Hangul Syllable */ + [0xbb12, 0xbb12], /* Hangul Syllable */ + [0xbb13, 0xbb13], /* Hangul Syllable */ + [0xbb14, 0xbb14], /* Hangul Syllable */ + [0xbb15, 0xbb15], /* Hangul Syllable */ + [0xbb16, 0xbb16], /* Hangul Syllable */ + [0xbb17, 0xbb17], /* Hangul Syllable */ + [0xbb18, 0xbb18], /* Hangul Syllable */ + [0xbb19, 0xbb19], /* Hangul Syllable */ + [0xbb1a, 0xbb1a], /* Hangul Syllable */ + [0xbb1b, 0xbb1b], /* Hangul Syllable */ + [0xbb1c, 0xbb1c], /* Hangul Syllable */ + [0xbb1d, 0xbb1d], /* Hangul Syllable */ + [0xbb1e, 0xbb1e], /* Hangul Syllable */ + [0xbb1f, 0xbb1f], /* Hangul Syllable */ + [0xbb20, 0xbb20], /* Hangul Syllable */ + [0xbb21, 0xbb21], /* Hangul Syllable */ + [0xbb22, 0xbb22], /* Hangul Syllable */ + [0xbb23, 0xbb23], /* Hangul Syllable */ + [0xbb24, 0xbb24], /* Hangul Syllable */ + [0xbb25, 0xbb25], /* Hangul Syllable */ + [0xbb26, 0xbb26], /* Hangul Syllable */ + [0xbb27, 0xbb27], /* Hangul Syllable */ + [0xbb28, 0xbb28], /* Hangul Syllable */ + [0xbb29, 0xbb29], /* Hangul Syllable */ + [0xbb2a, 0xbb2a], /* Hangul Syllable */ + [0xbb2b, 0xbb2b], /* Hangul Syllable */ + [0xbb2c, 0xbb2c], /* Hangul Syllable */ + [0xbb2d, 0xbb2d], /* Hangul Syllable */ + [0xbb2e, 0xbb2e], /* Hangul Syllable */ + [0xbb2f, 0xbb2f], /* Hangul Syllable */ + [0xbb30, 0xbb30], /* Hangul Syllable */ + [0xbb31, 0xbb31], /* Hangul Syllable */ + [0xbb32, 0xbb32], /* Hangul Syllable */ + [0xbb33, 0xbb33], /* Hangul Syllable */ + [0xbb34, 0xbb34], /* Hangul Syllable */ + [0xbb35, 0xbb35], /* Hangul Syllable */ + [0xbb36, 0xbb36], /* Hangul Syllable */ + [0xbb37, 0xbb37], /* Hangul Syllable */ + [0xbb38, 0xbb38], /* Hangul Syllable */ + [0xbb39, 0xbb39], /* Hangul Syllable */ + [0xbb3a, 0xbb3a], /* Hangul Syllable */ + [0xbb3b, 0xbb3b], /* Hangul Syllable */ + [0xbb3c, 0xbb3c], /* Hangul Syllable */ + [0xbb3d, 0xbb3d], /* Hangul Syllable */ + [0xbb3e, 0xbb3e], /* Hangul Syllable */ + [0xbb3f, 0xbb3f], /* Hangul Syllable */ + [0xbb40, 0xbb40], /* Hangul Syllable */ + [0xbb41, 0xbb41], /* Hangul Syllable */ + [0xbb42, 0xbb42], /* Hangul Syllable */ + [0xbb43, 0xbb43], /* Hangul Syllable */ + [0xbb44, 0xbb44], /* Hangul Syllable */ + [0xbb45, 0xbb45], /* Hangul Syllable */ + [0xbb46, 0xbb46], /* Hangul Syllable */ + [0xbb47, 0xbb47], /* Hangul Syllable */ + [0xbb48, 0xbb48], /* Hangul Syllable */ + [0xbb49, 0xbb49], /* Hangul Syllable */ + [0xbb4a, 0xbb4a], /* Hangul Syllable */ + [0xbb4b, 0xbb4b], /* Hangul Syllable */ + [0xbb4c, 0xbb4c], /* Hangul Syllable */ + [0xbb4d, 0xbb4d], /* Hangul Syllable */ + [0xbb4e, 0xbb4e], /* Hangul Syllable */ + [0xbb4f, 0xbb4f], /* Hangul Syllable */ + [0xbb50, 0xbb50], /* Hangul Syllable */ + [0xbb51, 0xbb51], /* Hangul Syllable */ + [0xbb52, 0xbb52], /* Hangul Syllable */ + [0xbb53, 0xbb53], /* Hangul Syllable */ + [0xbb54, 0xbb54], /* Hangul Syllable */ + [0xbb55, 0xbb55], /* Hangul Syllable */ + [0xbb56, 0xbb56], /* Hangul Syllable */ + [0xbb57, 0xbb57], /* Hangul Syllable */ + [0xbb58, 0xbb58], /* Hangul Syllable */ + [0xbb59, 0xbb59], /* Hangul Syllable */ + [0xbb5a, 0xbb5a], /* Hangul Syllable */ + [0xbb5b, 0xbb5b], /* Hangul Syllable */ + [0xbb5c, 0xbb5c], /* Hangul Syllable */ + [0xbb5d, 0xbb5d], /* Hangul Syllable */ + [0xbb5e, 0xbb5e], /* Hangul Syllable */ + [0xbb5f, 0xbb5f], /* Hangul Syllable */ + [0xbb60, 0xbb60], /* Hangul Syllable */ + [0xbb61, 0xbb61], /* Hangul Syllable */ + [0xbb62, 0xbb62], /* Hangul Syllable */ + [0xbb63, 0xbb63], /* Hangul Syllable */ + [0xbb64, 0xbb64], /* Hangul Syllable */ + [0xbb65, 0xbb65], /* Hangul Syllable */ + [0xbb66, 0xbb66], /* Hangul Syllable */ + [0xbb67, 0xbb67], /* Hangul Syllable */ + [0xbb68, 0xbb68], /* Hangul Syllable */ + [0xbb69, 0xbb69], /* Hangul Syllable */ + [0xbb6a, 0xbb6a], /* Hangul Syllable */ + [0xbb6b, 0xbb6b], /* Hangul Syllable */ + [0xbb6c, 0xbb6c], /* Hangul Syllable */ + [0xbb6d, 0xbb6d], /* Hangul Syllable */ + [0xbb6e, 0xbb6e], /* Hangul Syllable */ + [0xbb6f, 0xbb6f], /* Hangul Syllable */ + [0xbb70, 0xbb70], /* Hangul Syllable */ + [0xbb71, 0xbb71], /* Hangul Syllable */ + [0xbb72, 0xbb72], /* Hangul Syllable */ + [0xbb73, 0xbb73], /* Hangul Syllable */ + [0xbb74, 0xbb74], /* Hangul Syllable */ + [0xbb75, 0xbb75], /* Hangul Syllable */ + [0xbb76, 0xbb76], /* Hangul Syllable */ + [0xbb77, 0xbb77], /* Hangul Syllable */ + [0xbb78, 0xbb78], /* Hangul Syllable */ + [0xbb79, 0xbb79], /* Hangul Syllable */ + [0xbb7a, 0xbb7a], /* Hangul Syllable */ + [0xbb7b, 0xbb7b], /* Hangul Syllable */ + [0xbb7c, 0xbb7c], /* Hangul Syllable */ + [0xbb7d, 0xbb7d], /* Hangul Syllable */ + [0xbb7e, 0xbb7e], /* Hangul Syllable */ + [0xbb7f, 0xbb7f], /* Hangul Syllable */ + [0xbb80, 0xbb80], /* Hangul Syllable */ + [0xbb81, 0xbb81], /* Hangul Syllable */ + [0xbb82, 0xbb82], /* Hangul Syllable */ + [0xbb83, 0xbb83], /* Hangul Syllable */ + [0xbb84, 0xbb84], /* Hangul Syllable */ + [0xbb85, 0xbb85], /* Hangul Syllable */ + [0xbb86, 0xbb86], /* Hangul Syllable */ + [0xbb87, 0xbb87], /* Hangul Syllable */ + [0xbb88, 0xbb88], /* Hangul Syllable */ + [0xbb89, 0xbb89], /* Hangul Syllable */ + [0xbb8a, 0xbb8a], /* Hangul Syllable */ + [0xbb8b, 0xbb8b], /* Hangul Syllable */ + [0xbb8c, 0xbb8c], /* Hangul Syllable */ + [0xbb8d, 0xbb8d], /* Hangul Syllable */ + [0xbb8e, 0xbb8e], /* Hangul Syllable */ + [0xbb8f, 0xbb8f], /* Hangul Syllable */ + [0xbb90, 0xbb90], /* Hangul Syllable */ + [0xbb91, 0xbb91], /* Hangul Syllable */ + [0xbb92, 0xbb92], /* Hangul Syllable */ + [0xbb93, 0xbb93], /* Hangul Syllable */ + [0xbb94, 0xbb94], /* Hangul Syllable */ + [0xbb95, 0xbb95], /* Hangul Syllable */ + [0xbb96, 0xbb96], /* Hangul Syllable */ + [0xbb97, 0xbb97], /* Hangul Syllable */ + [0xbb98, 0xbb98], /* Hangul Syllable */ + [0xbb99, 0xbb99], /* Hangul Syllable */ + [0xbb9a, 0xbb9a], /* Hangul Syllable */ + [0xbb9b, 0xbb9b], /* Hangul Syllable */ + [0xbb9c, 0xbb9c], /* Hangul Syllable */ + [0xbb9d, 0xbb9d], /* Hangul Syllable */ + [0xbb9e, 0xbb9e], /* Hangul Syllable */ + [0xbb9f, 0xbb9f], /* Hangul Syllable */ + [0xbba0, 0xbba0], /* Hangul Syllable */ + [0xbba1, 0xbba1], /* Hangul Syllable */ + [0xbba2, 0xbba2], /* Hangul Syllable */ + [0xbba3, 0xbba3], /* Hangul Syllable */ + [0xbba4, 0xbba4], /* Hangul Syllable */ + [0xbba5, 0xbba5], /* Hangul Syllable */ + [0xbba6, 0xbba6], /* Hangul Syllable */ + [0xbba7, 0xbba7], /* Hangul Syllable */ + [0xbba8, 0xbba8], /* Hangul Syllable */ + [0xbba9, 0xbba9], /* Hangul Syllable */ + [0xbbaa, 0xbbaa], /* Hangul Syllable */ + [0xbbab, 0xbbab], /* Hangul Syllable */ + [0xbbac, 0xbbac], /* Hangul Syllable */ + [0xbbad, 0xbbad], /* Hangul Syllable */ + [0xbbae, 0xbbae], /* Hangul Syllable */ + [0xbbaf, 0xbbaf], /* Hangul Syllable */ + [0xbbb0, 0xbbb0], /* Hangul Syllable */ + [0xbbb1, 0xbbb1], /* Hangul Syllable */ + [0xbbb2, 0xbbb2], /* Hangul Syllable */ + [0xbbb3, 0xbbb3], /* Hangul Syllable */ + [0xbbb4, 0xbbb4], /* Hangul Syllable */ + [0xbbb5, 0xbbb5], /* Hangul Syllable */ + [0xbbb6, 0xbbb6], /* Hangul Syllable */ + [0xbbb7, 0xbbb7], /* Hangul Syllable */ + [0xbbb8, 0xbbb8], /* Hangul Syllable */ + [0xbbb9, 0xbbb9], /* Hangul Syllable */ + [0xbbba, 0xbbba], /* Hangul Syllable */ + [0xbbbb, 0xbbbb], /* Hangul Syllable */ + [0xbbbc, 0xbbbc], /* Hangul Syllable */ + [0xbbbd, 0xbbbd], /* Hangul Syllable */ + [0xbbbe, 0xbbbe], /* Hangul Syllable */ + [0xbbbf, 0xbbbf], /* Hangul Syllable */ + [0xbbc0, 0xbbc0], /* Hangul Syllable */ + [0xbbc1, 0xbbc1], /* Hangul Syllable */ + [0xbbc2, 0xbbc2], /* Hangul Syllable */ + [0xbbc3, 0xbbc3], /* Hangul Syllable */ + [0xbbc4, 0xbbc4], /* Hangul Syllable */ + [0xbbc5, 0xbbc5], /* Hangul Syllable */ + [0xbbc6, 0xbbc6], /* Hangul Syllable */ + [0xbbc7, 0xbbc7], /* Hangul Syllable */ + [0xbbc8, 0xbbc8], /* Hangul Syllable */ + [0xbbc9, 0xbbc9], /* Hangul Syllable */ + [0xbbca, 0xbbca], /* Hangul Syllable */ + [0xbbcb, 0xbbcb], /* Hangul Syllable */ + [0xbbcc, 0xbbcc], /* Hangul Syllable */ + [0xbbcd, 0xbbcd], /* Hangul Syllable */ + [0xbbce, 0xbbce], /* Hangul Syllable */ + [0xbbcf, 0xbbcf], /* Hangul Syllable */ + [0xbbd0, 0xbbd0], /* Hangul Syllable */ + [0xbbd1, 0xbbd1], /* Hangul Syllable */ + [0xbbd2, 0xbbd2], /* Hangul Syllable */ + [0xbbd3, 0xbbd3], /* Hangul Syllable */ + [0xbbd4, 0xbbd4], /* Hangul Syllable */ + [0xbbd5, 0xbbd5], /* Hangul Syllable */ + [0xbbd6, 0xbbd6], /* Hangul Syllable */ + [0xbbd7, 0xbbd7], /* Hangul Syllable */ + [0xbbd8, 0xbbd8], /* Hangul Syllable */ + [0xbbd9, 0xbbd9], /* Hangul Syllable */ + [0xbbda, 0xbbda], /* Hangul Syllable */ + [0xbbdb, 0xbbdb], /* Hangul Syllable */ + [0xbbdc, 0xbbdc], /* Hangul Syllable */ + [0xbbdd, 0xbbdd], /* Hangul Syllable */ + [0xbbde, 0xbbde], /* Hangul Syllable */ + [0xbbdf, 0xbbdf], /* Hangul Syllable */ + [0xbbe0, 0xbbe0], /* Hangul Syllable */ + [0xbbe1, 0xbbe1], /* Hangul Syllable */ + [0xbbe2, 0xbbe2], /* Hangul Syllable */ + [0xbbe3, 0xbbe3], /* Hangul Syllable */ + [0xbbe4, 0xbbe4], /* Hangul Syllable */ + [0xbbe5, 0xbbe5], /* Hangul Syllable */ + [0xbbe6, 0xbbe6], /* Hangul Syllable */ + [0xbbe7, 0xbbe7], /* Hangul Syllable */ + [0xbbe8, 0xbbe8], /* Hangul Syllable */ + [0xbbe9, 0xbbe9], /* Hangul Syllable */ + [0xbbea, 0xbbea], /* Hangul Syllable */ + [0xbbeb, 0xbbeb], /* Hangul Syllable */ + [0xbbec, 0xbbec], /* Hangul Syllable */ + [0xbbed, 0xbbed], /* Hangul Syllable */ + [0xbbee, 0xbbee], /* Hangul Syllable */ + [0xbbef, 0xbbef], /* Hangul Syllable */ + [0xbbf0, 0xbbf0], /* Hangul Syllable */ + [0xbbf1, 0xbbf1], /* Hangul Syllable */ + [0xbbf2, 0xbbf2], /* Hangul Syllable */ + [0xbbf3, 0xbbf3], /* Hangul Syllable */ + [0xbbf4, 0xbbf4], /* Hangul Syllable */ + [0xbbf5, 0xbbf5], /* Hangul Syllable */ + [0xbbf6, 0xbbf6], /* Hangul Syllable */ + [0xbbf7, 0xbbf7], /* Hangul Syllable */ + [0xbbf8, 0xbbf8], /* Hangul Syllable */ + [0xbbf9, 0xbbf9], /* Hangul Syllable */ + [0xbbfa, 0xbbfa], /* Hangul Syllable */ + [0xbbfb, 0xbbfb], /* Hangul Syllable */ + [0xbbfc, 0xbbfc], /* Hangul Syllable */ + [0xbbfd, 0xbbfd], /* Hangul Syllable */ + [0xbbfe, 0xbbfe], /* Hangul Syllable */ + [0xbbff, 0xbbff], /* Hangul Syllable */ + [0xbc00, 0xbc00], /* Hangul Syllable */ + [0xbc01, 0xbc01], /* Hangul Syllable */ + [0xbc02, 0xbc02], /* Hangul Syllable */ + [0xbc03, 0xbc03], /* Hangul Syllable */ + [0xbc04, 0xbc04], /* Hangul Syllable */ + [0xbc05, 0xbc05], /* Hangul Syllable */ + [0xbc06, 0xbc06], /* Hangul Syllable */ + [0xbc07, 0xbc07], /* Hangul Syllable */ + [0xbc08, 0xbc08], /* Hangul Syllable */ + [0xbc09, 0xbc09], /* Hangul Syllable */ + [0xbc0a, 0xbc0a], /* Hangul Syllable */ + [0xbc0b, 0xbc0b], /* Hangul Syllable */ + [0xbc0c, 0xbc0c], /* Hangul Syllable */ + [0xbc0d, 0xbc0d], /* Hangul Syllable */ + [0xbc0e, 0xbc0e], /* Hangul Syllable */ + [0xbc0f, 0xbc0f], /* Hangul Syllable */ + [0xbc10, 0xbc10], /* Hangul Syllable */ + [0xbc11, 0xbc11], /* Hangul Syllable */ + [0xbc12, 0xbc12], /* Hangul Syllable */ + [0xbc13, 0xbc13], /* Hangul Syllable */ + [0xbc14, 0xbc14], /* Hangul Syllable */ + [0xbc15, 0xbc15], /* Hangul Syllable */ + [0xbc16, 0xbc16], /* Hangul Syllable */ + [0xbc17, 0xbc17], /* Hangul Syllable */ + [0xbc18, 0xbc18], /* Hangul Syllable */ + [0xbc19, 0xbc19], /* Hangul Syllable */ + [0xbc1a, 0xbc1a], /* Hangul Syllable */ + [0xbc1b, 0xbc1b], /* Hangul Syllable */ + [0xbc1c, 0xbc1c], /* Hangul Syllable */ + [0xbc1d, 0xbc1d], /* Hangul Syllable */ + [0xbc1e, 0xbc1e], /* Hangul Syllable */ + [0xbc1f, 0xbc1f], /* Hangul Syllable */ + [0xbc20, 0xbc20], /* Hangul Syllable */ + [0xbc21, 0xbc21], /* Hangul Syllable */ + [0xbc22, 0xbc22], /* Hangul Syllable */ + [0xbc23, 0xbc23], /* Hangul Syllable */ + [0xbc24, 0xbc24], /* Hangul Syllable */ + [0xbc25, 0xbc25], /* Hangul Syllable */ + [0xbc26, 0xbc26], /* Hangul Syllable */ + [0xbc27, 0xbc27], /* Hangul Syllable */ + [0xbc28, 0xbc28], /* Hangul Syllable */ + [0xbc29, 0xbc29], /* Hangul Syllable */ + [0xbc2a, 0xbc2a], /* Hangul Syllable */ + [0xbc2b, 0xbc2b], /* Hangul Syllable */ + [0xbc2c, 0xbc2c], /* Hangul Syllable */ + [0xbc2d, 0xbc2d], /* Hangul Syllable */ + [0xbc2e, 0xbc2e], /* Hangul Syllable */ + [0xbc2f, 0xbc2f], /* Hangul Syllable */ + [0xbc30, 0xbc30], /* Hangul Syllable */ + [0xbc31, 0xbc31], /* Hangul Syllable */ + [0xbc32, 0xbc32], /* Hangul Syllable */ + [0xbc33, 0xbc33], /* Hangul Syllable */ + [0xbc34, 0xbc34], /* Hangul Syllable */ + [0xbc35, 0xbc35], /* Hangul Syllable */ + [0xbc36, 0xbc36], /* Hangul Syllable */ + [0xbc37, 0xbc37], /* Hangul Syllable */ + [0xbc38, 0xbc38], /* Hangul Syllable */ + [0xbc39, 0xbc39], /* Hangul Syllable */ + [0xbc3a, 0xbc3a], /* Hangul Syllable */ + [0xbc3b, 0xbc3b], /* Hangul Syllable */ + [0xbc3c, 0xbc3c], /* Hangul Syllable */ + [0xbc3d, 0xbc3d], /* Hangul Syllable */ + [0xbc3e, 0xbc3e], /* Hangul Syllable */ + [0xbc3f, 0xbc3f], /* Hangul Syllable */ + [0xbc40, 0xbc40], /* Hangul Syllable */ + [0xbc41, 0xbc41], /* Hangul Syllable */ + [0xbc42, 0xbc42], /* Hangul Syllable */ + [0xbc43, 0xbc43], /* Hangul Syllable */ + [0xbc44, 0xbc44], /* Hangul Syllable */ + [0xbc45, 0xbc45], /* Hangul Syllable */ + [0xbc46, 0xbc46], /* Hangul Syllable */ + [0xbc47, 0xbc47], /* Hangul Syllable */ + [0xbc48, 0xbc48], /* Hangul Syllable */ + [0xbc49, 0xbc49], /* Hangul Syllable */ + [0xbc4a, 0xbc4a], /* Hangul Syllable */ + [0xbc4b, 0xbc4b], /* Hangul Syllable */ + [0xbc4c, 0xbc4c], /* Hangul Syllable */ + [0xbc4d, 0xbc4d], /* Hangul Syllable */ + [0xbc4e, 0xbc4e], /* Hangul Syllable */ + [0xbc4f, 0xbc4f], /* Hangul Syllable */ + [0xbc50, 0xbc50], /* Hangul Syllable */ + [0xbc51, 0xbc51], /* Hangul Syllable */ + [0xbc52, 0xbc52], /* Hangul Syllable */ + [0xbc53, 0xbc53], /* Hangul Syllable */ + [0xbc54, 0xbc54], /* Hangul Syllable */ + [0xbc55, 0xbc55], /* Hangul Syllable */ + [0xbc56, 0xbc56], /* Hangul Syllable */ + [0xbc57, 0xbc57], /* Hangul Syllable */ + [0xbc58, 0xbc58], /* Hangul Syllable */ + [0xbc59, 0xbc59], /* Hangul Syllable */ + [0xbc5a, 0xbc5a], /* Hangul Syllable */ + [0xbc5b, 0xbc5b], /* Hangul Syllable */ + [0xbc5c, 0xbc5c], /* Hangul Syllable */ + [0xbc5d, 0xbc5d], /* Hangul Syllable */ + [0xbc5e, 0xbc5e], /* Hangul Syllable */ + [0xbc5f, 0xbc5f], /* Hangul Syllable */ + [0xbc60, 0xbc60], /* Hangul Syllable */ + [0xbc61, 0xbc61], /* Hangul Syllable */ + [0xbc62, 0xbc62], /* Hangul Syllable */ + [0xbc63, 0xbc63], /* Hangul Syllable */ + [0xbc64, 0xbc64], /* Hangul Syllable */ + [0xbc65, 0xbc65], /* Hangul Syllable */ + [0xbc66, 0xbc66], /* Hangul Syllable */ + [0xbc67, 0xbc67], /* Hangul Syllable */ + [0xbc68, 0xbc68], /* Hangul Syllable */ + [0xbc69, 0xbc69], /* Hangul Syllable */ + [0xbc6a, 0xbc6a], /* Hangul Syllable */ + [0xbc6b, 0xbc6b], /* Hangul Syllable */ + [0xbc6c, 0xbc6c], /* Hangul Syllable */ + [0xbc6d, 0xbc6d], /* Hangul Syllable */ + [0xbc6e, 0xbc6e], /* Hangul Syllable */ + [0xbc6f, 0xbc6f], /* Hangul Syllable */ + [0xbc70, 0xbc70], /* Hangul Syllable */ + [0xbc71, 0xbc71], /* Hangul Syllable */ + [0xbc72, 0xbc72], /* Hangul Syllable */ + [0xbc73, 0xbc73], /* Hangul Syllable */ + [0xbc74, 0xbc74], /* Hangul Syllable */ + [0xbc75, 0xbc75], /* Hangul Syllable */ + [0xbc76, 0xbc76], /* Hangul Syllable */ + [0xbc77, 0xbc77], /* Hangul Syllable */ + [0xbc78, 0xbc78], /* Hangul Syllable */ + [0xbc79, 0xbc79], /* Hangul Syllable */ + [0xbc7a, 0xbc7a], /* Hangul Syllable */ + [0xbc7b, 0xbc7b], /* Hangul Syllable */ + [0xbc7c, 0xbc7c], /* Hangul Syllable */ + [0xbc7d, 0xbc7d], /* Hangul Syllable */ + [0xbc7e, 0xbc7e], /* Hangul Syllable */ + [0xbc7f, 0xbc7f], /* Hangul Syllable */ + [0xbc80, 0xbc80], /* Hangul Syllable */ + [0xbc81, 0xbc81], /* Hangul Syllable */ + [0xbc82, 0xbc82], /* Hangul Syllable */ + [0xbc83, 0xbc83], /* Hangul Syllable */ + [0xbc84, 0xbc84], /* Hangul Syllable */ + [0xbc85, 0xbc85], /* Hangul Syllable */ + [0xbc86, 0xbc86], /* Hangul Syllable */ + [0xbc87, 0xbc87], /* Hangul Syllable */ + [0xbc88, 0xbc88], /* Hangul Syllable */ + [0xbc89, 0xbc89], /* Hangul Syllable */ + [0xbc8a, 0xbc8a], /* Hangul Syllable */ + [0xbc8b, 0xbc8b], /* Hangul Syllable */ + [0xbc8c, 0xbc8c], /* Hangul Syllable */ + [0xbc8d, 0xbc8d], /* Hangul Syllable */ + [0xbc8e, 0xbc8e], /* Hangul Syllable */ + [0xbc8f, 0xbc8f], /* Hangul Syllable */ + [0xbc90, 0xbc90], /* Hangul Syllable */ + [0xbc91, 0xbc91], /* Hangul Syllable */ + [0xbc92, 0xbc92], /* Hangul Syllable */ + [0xbc93, 0xbc93], /* Hangul Syllable */ + [0xbc94, 0xbc94], /* Hangul Syllable */ + [0xbc95, 0xbc95], /* Hangul Syllable */ + [0xbc96, 0xbc96], /* Hangul Syllable */ + [0xbc97, 0xbc97], /* Hangul Syllable */ + [0xbc98, 0xbc98], /* Hangul Syllable */ + [0xbc99, 0xbc99], /* Hangul Syllable */ + [0xbc9a, 0xbc9a], /* Hangul Syllable */ + [0xbc9b, 0xbc9b], /* Hangul Syllable */ + [0xbc9c, 0xbc9c], /* Hangul Syllable */ + [0xbc9d, 0xbc9d], /* Hangul Syllable */ + [0xbc9e, 0xbc9e], /* Hangul Syllable */ + [0xbc9f, 0xbc9f], /* Hangul Syllable */ + [0xbca0, 0xbca0], /* Hangul Syllable */ + [0xbca1, 0xbca1], /* Hangul Syllable */ + [0xbca2, 0xbca2], /* Hangul Syllable */ + [0xbca3, 0xbca3], /* Hangul Syllable */ + [0xbca4, 0xbca4], /* Hangul Syllable */ + [0xbca5, 0xbca5], /* Hangul Syllable */ + [0xbca6, 0xbca6], /* Hangul Syllable */ + [0xbca7, 0xbca7], /* Hangul Syllable */ + [0xbca8, 0xbca8], /* Hangul Syllable */ + [0xbca9, 0xbca9], /* Hangul Syllable */ + [0xbcaa, 0xbcaa], /* Hangul Syllable */ + [0xbcab, 0xbcab], /* Hangul Syllable */ + [0xbcac, 0xbcac], /* Hangul Syllable */ + [0xbcad, 0xbcad], /* Hangul Syllable */ + [0xbcae, 0xbcae], /* Hangul Syllable */ + [0xbcaf, 0xbcaf], /* Hangul Syllable */ + [0xbcb0, 0xbcb0], /* Hangul Syllable */ + [0xbcb1, 0xbcb1], /* Hangul Syllable */ + [0xbcb2, 0xbcb2], /* Hangul Syllable */ + [0xbcb3, 0xbcb3], /* Hangul Syllable */ + [0xbcb4, 0xbcb4], /* Hangul Syllable */ + [0xbcb5, 0xbcb5], /* Hangul Syllable */ + [0xbcb6, 0xbcb6], /* Hangul Syllable */ + [0xbcb7, 0xbcb7], /* Hangul Syllable */ + [0xbcb8, 0xbcb8], /* Hangul Syllable */ + [0xbcb9, 0xbcb9], /* Hangul Syllable */ + [0xbcba, 0xbcba], /* Hangul Syllable */ + [0xbcbb, 0xbcbb], /* Hangul Syllable */ + [0xbcbc, 0xbcbc], /* Hangul Syllable */ + [0xbcbd, 0xbcbd], /* Hangul Syllable */ + [0xbcbe, 0xbcbe], /* Hangul Syllable */ + [0xbcbf, 0xbcbf], /* Hangul Syllable */ + [0xbcc0, 0xbcc0], /* Hangul Syllable */ + [0xbcc1, 0xbcc1], /* Hangul Syllable */ + [0xbcc2, 0xbcc2], /* Hangul Syllable */ + [0xbcc3, 0xbcc3], /* Hangul Syllable */ + [0xbcc4, 0xbcc4], /* Hangul Syllable */ + [0xbcc5, 0xbcc5], /* Hangul Syllable */ + [0xbcc6, 0xbcc6], /* Hangul Syllable */ + [0xbcc7, 0xbcc7], /* Hangul Syllable */ + [0xbcc8, 0xbcc8], /* Hangul Syllable */ + [0xbcc9, 0xbcc9], /* Hangul Syllable */ + [0xbcca, 0xbcca], /* Hangul Syllable */ + [0xbccb, 0xbccb], /* Hangul Syllable */ + [0xbccc, 0xbccc], /* Hangul Syllable */ + [0xbccd, 0xbccd], /* Hangul Syllable */ + [0xbcce, 0xbcce], /* Hangul Syllable */ + [0xbccf, 0xbccf], /* Hangul Syllable */ + [0xbcd0, 0xbcd0], /* Hangul Syllable */ + [0xbcd1, 0xbcd1], /* Hangul Syllable */ + [0xbcd2, 0xbcd2], /* Hangul Syllable */ + [0xbcd3, 0xbcd3], /* Hangul Syllable */ + [0xbcd4, 0xbcd4], /* Hangul Syllable */ + [0xbcd5, 0xbcd5], /* Hangul Syllable */ + [0xbcd6, 0xbcd6], /* Hangul Syllable */ + [0xbcd7, 0xbcd7], /* Hangul Syllable */ + [0xbcd8, 0xbcd8], /* Hangul Syllable */ + [0xbcd9, 0xbcd9], /* Hangul Syllable */ + [0xbcda, 0xbcda], /* Hangul Syllable */ + [0xbcdb, 0xbcdb], /* Hangul Syllable */ + [0xbcdc, 0xbcdc], /* Hangul Syllable */ + [0xbcdd, 0xbcdd], /* Hangul Syllable */ + [0xbcde, 0xbcde], /* Hangul Syllable */ + [0xbcdf, 0xbcdf], /* Hangul Syllable */ + [0xbce0, 0xbce0], /* Hangul Syllable */ + [0xbce1, 0xbce1], /* Hangul Syllable */ + [0xbce2, 0xbce2], /* Hangul Syllable */ + [0xbce3, 0xbce3], /* Hangul Syllable */ + [0xbce4, 0xbce4], /* Hangul Syllable */ + [0xbce5, 0xbce5], /* Hangul Syllable */ + [0xbce6, 0xbce6], /* Hangul Syllable */ + [0xbce7, 0xbce7], /* Hangul Syllable */ + [0xbce8, 0xbce8], /* Hangul Syllable */ + [0xbce9, 0xbce9], /* Hangul Syllable */ + [0xbcea, 0xbcea], /* Hangul Syllable */ + [0xbceb, 0xbceb], /* Hangul Syllable */ + [0xbcec, 0xbcec], /* Hangul Syllable */ + [0xbced, 0xbced], /* Hangul Syllable */ + [0xbcee, 0xbcee], /* Hangul Syllable */ + [0xbcef, 0xbcef], /* Hangul Syllable */ + [0xbcf0, 0xbcf0], /* Hangul Syllable */ + [0xbcf1, 0xbcf1], /* Hangul Syllable */ + [0xbcf2, 0xbcf2], /* Hangul Syllable */ + [0xbcf3, 0xbcf3], /* Hangul Syllable */ + [0xbcf4, 0xbcf4], /* Hangul Syllable */ + [0xbcf5, 0xbcf5], /* Hangul Syllable */ + [0xbcf6, 0xbcf6], /* Hangul Syllable */ + [0xbcf7, 0xbcf7], /* Hangul Syllable */ + [0xbcf8, 0xbcf8], /* Hangul Syllable */ + [0xbcf9, 0xbcf9], /* Hangul Syllable */ + [0xbcfa, 0xbcfa], /* Hangul Syllable */ + [0xbcfb, 0xbcfb], /* Hangul Syllable */ + [0xbcfc, 0xbcfc], /* Hangul Syllable */ + [0xbcfd, 0xbcfd], /* Hangul Syllable */ + [0xbcfe, 0xbcfe], /* Hangul Syllable */ + [0xbcff, 0xbcff], /* Hangul Syllable */ + [0xbd00, 0xbd00], /* Hangul Syllable */ + [0xbd01, 0xbd01], /* Hangul Syllable */ + [0xbd02, 0xbd02], /* Hangul Syllable */ + [0xbd03, 0xbd03], /* Hangul Syllable */ + [0xbd04, 0xbd04], /* Hangul Syllable */ + [0xbd05, 0xbd05], /* Hangul Syllable */ + [0xbd06, 0xbd06], /* Hangul Syllable */ + [0xbd07, 0xbd07], /* Hangul Syllable */ + [0xbd08, 0xbd08], /* Hangul Syllable */ + [0xbd09, 0xbd09], /* Hangul Syllable */ + [0xbd0a, 0xbd0a], /* Hangul Syllable */ + [0xbd0b, 0xbd0b], /* Hangul Syllable */ + [0xbd0c, 0xbd0c], /* Hangul Syllable */ + [0xbd0d, 0xbd0d], /* Hangul Syllable */ + [0xbd0e, 0xbd0e], /* Hangul Syllable */ + [0xbd0f, 0xbd0f], /* Hangul Syllable */ + [0xbd10, 0xbd10], /* Hangul Syllable */ + [0xbd11, 0xbd11], /* Hangul Syllable */ + [0xbd12, 0xbd12], /* Hangul Syllable */ + [0xbd13, 0xbd13], /* Hangul Syllable */ + [0xbd14, 0xbd14], /* Hangul Syllable */ + [0xbd15, 0xbd15], /* Hangul Syllable */ + [0xbd16, 0xbd16], /* Hangul Syllable */ + [0xbd17, 0xbd17], /* Hangul Syllable */ + [0xbd18, 0xbd18], /* Hangul Syllable */ + [0xbd19, 0xbd19], /* Hangul Syllable */ + [0xbd1a, 0xbd1a], /* Hangul Syllable */ + [0xbd1b, 0xbd1b], /* Hangul Syllable */ + [0xbd1c, 0xbd1c], /* Hangul Syllable */ + [0xbd1d, 0xbd1d], /* Hangul Syllable */ + [0xbd1e, 0xbd1e], /* Hangul Syllable */ + [0xbd1f, 0xbd1f], /* Hangul Syllable */ + [0xbd20, 0xbd20], /* Hangul Syllable */ + [0xbd21, 0xbd21], /* Hangul Syllable */ + [0xbd22, 0xbd22], /* Hangul Syllable */ + [0xbd23, 0xbd23], /* Hangul Syllable */ + [0xbd24, 0xbd24], /* Hangul Syllable */ + [0xbd25, 0xbd25], /* Hangul Syllable */ + [0xbd26, 0xbd26], /* Hangul Syllable */ + [0xbd27, 0xbd27], /* Hangul Syllable */ + [0xbd28, 0xbd28], /* Hangul Syllable */ + [0xbd29, 0xbd29], /* Hangul Syllable */ + [0xbd2a, 0xbd2a], /* Hangul Syllable */ + [0xbd2b, 0xbd2b], /* Hangul Syllable */ + [0xbd2c, 0xbd2c], /* Hangul Syllable */ + [0xbd2d, 0xbd2d], /* Hangul Syllable */ + [0xbd2e, 0xbd2e], /* Hangul Syllable */ + [0xbd2f, 0xbd2f], /* Hangul Syllable */ + [0xbd30, 0xbd30], /* Hangul Syllable */ + [0xbd31, 0xbd31], /* Hangul Syllable */ + [0xbd32, 0xbd32], /* Hangul Syllable */ + [0xbd33, 0xbd33], /* Hangul Syllable */ + [0xbd34, 0xbd34], /* Hangul Syllable */ + [0xbd35, 0xbd35], /* Hangul Syllable */ + [0xbd36, 0xbd36], /* Hangul Syllable */ + [0xbd37, 0xbd37], /* Hangul Syllable */ + [0xbd38, 0xbd38], /* Hangul Syllable */ + [0xbd39, 0xbd39], /* Hangul Syllable */ + [0xbd3a, 0xbd3a], /* Hangul Syllable */ + [0xbd3b, 0xbd3b], /* Hangul Syllable */ + [0xbd3c, 0xbd3c], /* Hangul Syllable */ + [0xbd3d, 0xbd3d], /* Hangul Syllable */ + [0xbd3e, 0xbd3e], /* Hangul Syllable */ + [0xbd3f, 0xbd3f], /* Hangul Syllable */ + [0xbd40, 0xbd40], /* Hangul Syllable */ + [0xbd41, 0xbd41], /* Hangul Syllable */ + [0xbd42, 0xbd42], /* Hangul Syllable */ + [0xbd43, 0xbd43], /* Hangul Syllable */ + [0xbd44, 0xbd44], /* Hangul Syllable */ + [0xbd45, 0xbd45], /* Hangul Syllable */ + [0xbd46, 0xbd46], /* Hangul Syllable */ + [0xbd47, 0xbd47], /* Hangul Syllable */ + [0xbd48, 0xbd48], /* Hangul Syllable */ + [0xbd49, 0xbd49], /* Hangul Syllable */ + [0xbd4a, 0xbd4a], /* Hangul Syllable */ + [0xbd4b, 0xbd4b], /* Hangul Syllable */ + [0xbd4c, 0xbd4c], /* Hangul Syllable */ + [0xbd4d, 0xbd4d], /* Hangul Syllable */ + [0xbd4e, 0xbd4e], /* Hangul Syllable */ + [0xbd4f, 0xbd4f], /* Hangul Syllable */ + [0xbd50, 0xbd50], /* Hangul Syllable */ + [0xbd51, 0xbd51], /* Hangul Syllable */ + [0xbd52, 0xbd52], /* Hangul Syllable */ + [0xbd53, 0xbd53], /* Hangul Syllable */ + [0xbd54, 0xbd54], /* Hangul Syllable */ + [0xbd55, 0xbd55], /* Hangul Syllable */ + [0xbd56, 0xbd56], /* Hangul Syllable */ + [0xbd57, 0xbd57], /* Hangul Syllable */ + [0xbd58, 0xbd58], /* Hangul Syllable */ + [0xbd59, 0xbd59], /* Hangul Syllable */ + [0xbd5a, 0xbd5a], /* Hangul Syllable */ + [0xbd5b, 0xbd5b], /* Hangul Syllable */ + [0xbd5c, 0xbd5c], /* Hangul Syllable */ + [0xbd5d, 0xbd5d], /* Hangul Syllable */ + [0xbd5e, 0xbd5e], /* Hangul Syllable */ + [0xbd5f, 0xbd5f], /* Hangul Syllable */ + [0xbd60, 0xbd60], /* Hangul Syllable */ + [0xbd61, 0xbd61], /* Hangul Syllable */ + [0xbd62, 0xbd62], /* Hangul Syllable */ + [0xbd63, 0xbd63], /* Hangul Syllable */ + [0xbd64, 0xbd64], /* Hangul Syllable */ + [0xbd65, 0xbd65], /* Hangul Syllable */ + [0xbd66, 0xbd66], /* Hangul Syllable */ + [0xbd67, 0xbd67], /* Hangul Syllable */ + [0xbd68, 0xbd68], /* Hangul Syllable */ + [0xbd69, 0xbd69], /* Hangul Syllable */ + [0xbd6a, 0xbd6a], /* Hangul Syllable */ + [0xbd6b, 0xbd6b], /* Hangul Syllable */ + [0xbd6c, 0xbd6c], /* Hangul Syllable */ + [0xbd6d, 0xbd6d], /* Hangul Syllable */ + [0xbd6e, 0xbd6e], /* Hangul Syllable */ + [0xbd6f, 0xbd6f], /* Hangul Syllable */ + [0xbd70, 0xbd70], /* Hangul Syllable */ + [0xbd71, 0xbd71], /* Hangul Syllable */ + [0xbd72, 0xbd72], /* Hangul Syllable */ + [0xbd73, 0xbd73], /* Hangul Syllable */ + [0xbd74, 0xbd74], /* Hangul Syllable */ + [0xbd75, 0xbd75], /* Hangul Syllable */ + [0xbd76, 0xbd76], /* Hangul Syllable */ + [0xbd77, 0xbd77], /* Hangul Syllable */ + [0xbd78, 0xbd78], /* Hangul Syllable */ + [0xbd79, 0xbd79], /* Hangul Syllable */ + [0xbd7a, 0xbd7a], /* Hangul Syllable */ + [0xbd7b, 0xbd7b], /* Hangul Syllable */ + [0xbd7c, 0xbd7c], /* Hangul Syllable */ + [0xbd7d, 0xbd7d], /* Hangul Syllable */ + [0xbd7e, 0xbd7e], /* Hangul Syllable */ + [0xbd7f, 0xbd7f], /* Hangul Syllable */ + [0xbd80, 0xbd80], /* Hangul Syllable */ + [0xbd81, 0xbd81], /* Hangul Syllable */ + [0xbd82, 0xbd82], /* Hangul Syllable */ + [0xbd83, 0xbd83], /* Hangul Syllable */ + [0xbd84, 0xbd84], /* Hangul Syllable */ + [0xbd85, 0xbd85], /* Hangul Syllable */ + [0xbd86, 0xbd86], /* Hangul Syllable */ + [0xbd87, 0xbd87], /* Hangul Syllable */ + [0xbd88, 0xbd88], /* Hangul Syllable */ + [0xbd89, 0xbd89], /* Hangul Syllable */ + [0xbd8a, 0xbd8a], /* Hangul Syllable */ + [0xbd8b, 0xbd8b], /* Hangul Syllable */ + [0xbd8c, 0xbd8c], /* Hangul Syllable */ + [0xbd8d, 0xbd8d], /* Hangul Syllable */ + [0xbd8e, 0xbd8e], /* Hangul Syllable */ + [0xbd8f, 0xbd8f], /* Hangul Syllable */ + [0xbd90, 0xbd90], /* Hangul Syllable */ + [0xbd91, 0xbd91], /* Hangul Syllable */ + [0xbd92, 0xbd92], /* Hangul Syllable */ + [0xbd93, 0xbd93], /* Hangul Syllable */ + [0xbd94, 0xbd94], /* Hangul Syllable */ + [0xbd95, 0xbd95], /* Hangul Syllable */ + [0xbd96, 0xbd96], /* Hangul Syllable */ + [0xbd97, 0xbd97], /* Hangul Syllable */ + [0xbd98, 0xbd98], /* Hangul Syllable */ + [0xbd99, 0xbd99], /* Hangul Syllable */ + [0xbd9a, 0xbd9a], /* Hangul Syllable */ + [0xbd9b, 0xbd9b], /* Hangul Syllable */ + [0xbd9c, 0xbd9c], /* Hangul Syllable */ + [0xbd9d, 0xbd9d], /* Hangul Syllable */ + [0xbd9e, 0xbd9e], /* Hangul Syllable */ + [0xbd9f, 0xbd9f], /* Hangul Syllable */ + [0xbda0, 0xbda0], /* Hangul Syllable */ + [0xbda1, 0xbda1], /* Hangul Syllable */ + [0xbda2, 0xbda2], /* Hangul Syllable */ + [0xbda3, 0xbda3], /* Hangul Syllable */ + [0xbda4, 0xbda4], /* Hangul Syllable */ + [0xbda5, 0xbda5], /* Hangul Syllable */ + [0xbda6, 0xbda6], /* Hangul Syllable */ + [0xbda7, 0xbda7], /* Hangul Syllable */ + [0xbda8, 0xbda8], /* Hangul Syllable */ + [0xbda9, 0xbda9], /* Hangul Syllable */ + [0xbdaa, 0xbdaa], /* Hangul Syllable */ + [0xbdab, 0xbdab], /* Hangul Syllable */ + [0xbdac, 0xbdac], /* Hangul Syllable */ + [0xbdad, 0xbdad], /* Hangul Syllable */ + [0xbdae, 0xbdae], /* Hangul Syllable */ + [0xbdaf, 0xbdaf], /* Hangul Syllable */ + [0xbdb0, 0xbdb0], /* Hangul Syllable */ + [0xbdb1, 0xbdb1], /* Hangul Syllable */ + [0xbdb2, 0xbdb2], /* Hangul Syllable */ + [0xbdb3, 0xbdb3], /* Hangul Syllable */ + [0xbdb4, 0xbdb4], /* Hangul Syllable */ + [0xbdb5, 0xbdb5], /* Hangul Syllable */ + [0xbdb6, 0xbdb6], /* Hangul Syllable */ + [0xbdb7, 0xbdb7], /* Hangul Syllable */ + [0xbdb8, 0xbdb8], /* Hangul Syllable */ + [0xbdb9, 0xbdb9], /* Hangul Syllable */ + [0xbdba, 0xbdba], /* Hangul Syllable */ + [0xbdbb, 0xbdbb], /* Hangul Syllable */ + [0xbdbc, 0xbdbc], /* Hangul Syllable */ + [0xbdbd, 0xbdbd], /* Hangul Syllable */ + [0xbdbe, 0xbdbe], /* Hangul Syllable */ + [0xbdbf, 0xbdbf], /* Hangul Syllable */ + [0xbdc0, 0xbdc0], /* Hangul Syllable */ + [0xbdc1, 0xbdc1], /* Hangul Syllable */ + [0xbdc2, 0xbdc2], /* Hangul Syllable */ + [0xbdc3, 0xbdc3], /* Hangul Syllable */ + [0xbdc4, 0xbdc4], /* Hangul Syllable */ + [0xbdc5, 0xbdc5], /* Hangul Syllable */ + [0xbdc6, 0xbdc6], /* Hangul Syllable */ + [0xbdc7, 0xbdc7], /* Hangul Syllable */ + [0xbdc8, 0xbdc8], /* Hangul Syllable */ + [0xbdc9, 0xbdc9], /* Hangul Syllable */ + [0xbdca, 0xbdca], /* Hangul Syllable */ + [0xbdcb, 0xbdcb], /* Hangul Syllable */ + [0xbdcc, 0xbdcc], /* Hangul Syllable */ + [0xbdcd, 0xbdcd], /* Hangul Syllable */ + [0xbdce, 0xbdce], /* Hangul Syllable */ + [0xbdcf, 0xbdcf], /* Hangul Syllable */ + [0xbdd0, 0xbdd0], /* Hangul Syllable */ + [0xbdd1, 0xbdd1], /* Hangul Syllable */ + [0xbdd2, 0xbdd2], /* Hangul Syllable */ + [0xbdd3, 0xbdd3], /* Hangul Syllable */ + [0xbdd4, 0xbdd4], /* Hangul Syllable */ + [0xbdd5, 0xbdd5], /* Hangul Syllable */ + [0xbdd6, 0xbdd6], /* Hangul Syllable */ + [0xbdd7, 0xbdd7], /* Hangul Syllable */ + [0xbdd8, 0xbdd8], /* Hangul Syllable */ + [0xbdd9, 0xbdd9], /* Hangul Syllable */ + [0xbdda, 0xbdda], /* Hangul Syllable */ + [0xbddb, 0xbddb], /* Hangul Syllable */ + [0xbddc, 0xbddc], /* Hangul Syllable */ + [0xbddd, 0xbddd], /* Hangul Syllable */ + [0xbdde, 0xbdde], /* Hangul Syllable */ + [0xbddf, 0xbddf], /* Hangul Syllable */ + [0xbde0, 0xbde0], /* Hangul Syllable */ + [0xbde1, 0xbde1], /* Hangul Syllable */ + [0xbde2, 0xbde2], /* Hangul Syllable */ + [0xbde3, 0xbde3], /* Hangul Syllable */ + [0xbde4, 0xbde4], /* Hangul Syllable */ + [0xbde5, 0xbde5], /* Hangul Syllable */ + [0xbde6, 0xbde6], /* Hangul Syllable */ + [0xbde7, 0xbde7], /* Hangul Syllable */ + [0xbde8, 0xbde8], /* Hangul Syllable */ + [0xbde9, 0xbde9], /* Hangul Syllable */ + [0xbdea, 0xbdea], /* Hangul Syllable */ + [0xbdeb, 0xbdeb], /* Hangul Syllable */ + [0xbdec, 0xbdec], /* Hangul Syllable */ + [0xbded, 0xbded], /* Hangul Syllable */ + [0xbdee, 0xbdee], /* Hangul Syllable */ + [0xbdef, 0xbdef], /* Hangul Syllable */ + [0xbdf0, 0xbdf0], /* Hangul Syllable */ + [0xbdf1, 0xbdf1], /* Hangul Syllable */ + [0xbdf2, 0xbdf2], /* Hangul Syllable */ + [0xbdf3, 0xbdf3], /* Hangul Syllable */ + [0xbdf4, 0xbdf4], /* Hangul Syllable */ + [0xbdf5, 0xbdf5], /* Hangul Syllable */ + [0xbdf6, 0xbdf6], /* Hangul Syllable */ + [0xbdf7, 0xbdf7], /* Hangul Syllable */ + [0xbdf8, 0xbdf8], /* Hangul Syllable */ + [0xbdf9, 0xbdf9], /* Hangul Syllable */ + [0xbdfa, 0xbdfa], /* Hangul Syllable */ + [0xbdfb, 0xbdfb], /* Hangul Syllable */ + [0xbdfc, 0xbdfc], /* Hangul Syllable */ + [0xbdfd, 0xbdfd], /* Hangul Syllable */ + [0xbdfe, 0xbdfe], /* Hangul Syllable */ + [0xbdff, 0xbdff], /* Hangul Syllable */ + [0xbe00, 0xbe00], /* Hangul Syllable */ + [0xbe01, 0xbe01], /* Hangul Syllable */ + [0xbe02, 0xbe02], /* Hangul Syllable */ + [0xbe03, 0xbe03], /* Hangul Syllable */ + [0xbe04, 0xbe04], /* Hangul Syllable */ + [0xbe05, 0xbe05], /* Hangul Syllable */ + [0xbe06, 0xbe06], /* Hangul Syllable */ + [0xbe07, 0xbe07], /* Hangul Syllable */ + [0xbe08, 0xbe08], /* Hangul Syllable */ + [0xbe09, 0xbe09], /* Hangul Syllable */ + [0xbe0a, 0xbe0a], /* Hangul Syllable */ + [0xbe0b, 0xbe0b], /* Hangul Syllable */ + [0xbe0c, 0xbe0c], /* Hangul Syllable */ + [0xbe0d, 0xbe0d], /* Hangul Syllable */ + [0xbe0e, 0xbe0e], /* Hangul Syllable */ + [0xbe0f, 0xbe0f], /* Hangul Syllable */ + [0xbe10, 0xbe10], /* Hangul Syllable */ + [0xbe11, 0xbe11], /* Hangul Syllable */ + [0xbe12, 0xbe12], /* Hangul Syllable */ + [0xbe13, 0xbe13], /* Hangul Syllable */ + [0xbe14, 0xbe14], /* Hangul Syllable */ + [0xbe15, 0xbe15], /* Hangul Syllable */ + [0xbe16, 0xbe16], /* Hangul Syllable */ + [0xbe17, 0xbe17], /* Hangul Syllable */ + [0xbe18, 0xbe18], /* Hangul Syllable */ + [0xbe19, 0xbe19], /* Hangul Syllable */ + [0xbe1a, 0xbe1a], /* Hangul Syllable */ + [0xbe1b, 0xbe1b], /* Hangul Syllable */ + [0xbe1c, 0xbe1c], /* Hangul Syllable */ + [0xbe1d, 0xbe1d], /* Hangul Syllable */ + [0xbe1e, 0xbe1e], /* Hangul Syllable */ + [0xbe1f, 0xbe1f], /* Hangul Syllable */ + [0xbe20, 0xbe20], /* Hangul Syllable */ + [0xbe21, 0xbe21], /* Hangul Syllable */ + [0xbe22, 0xbe22], /* Hangul Syllable */ + [0xbe23, 0xbe23], /* Hangul Syllable */ + [0xbe24, 0xbe24], /* Hangul Syllable */ + [0xbe25, 0xbe25], /* Hangul Syllable */ + [0xbe26, 0xbe26], /* Hangul Syllable */ + [0xbe27, 0xbe27], /* Hangul Syllable */ + [0xbe28, 0xbe28], /* Hangul Syllable */ + [0xbe29, 0xbe29], /* Hangul Syllable */ + [0xbe2a, 0xbe2a], /* Hangul Syllable */ + [0xbe2b, 0xbe2b], /* Hangul Syllable */ + [0xbe2c, 0xbe2c], /* Hangul Syllable */ + [0xbe2d, 0xbe2d], /* Hangul Syllable */ + [0xbe2e, 0xbe2e], /* Hangul Syllable */ + [0xbe2f, 0xbe2f], /* Hangul Syllable */ + [0xbe30, 0xbe30], /* Hangul Syllable */ + [0xbe31, 0xbe31], /* Hangul Syllable */ + [0xbe32, 0xbe32], /* Hangul Syllable */ + [0xbe33, 0xbe33], /* Hangul Syllable */ + [0xbe34, 0xbe34], /* Hangul Syllable */ + [0xbe35, 0xbe35], /* Hangul Syllable */ + [0xbe36, 0xbe36], /* Hangul Syllable */ + [0xbe37, 0xbe37], /* Hangul Syllable */ + [0xbe38, 0xbe38], /* Hangul Syllable */ + [0xbe39, 0xbe39], /* Hangul Syllable */ + [0xbe3a, 0xbe3a], /* Hangul Syllable */ + [0xbe3b, 0xbe3b], /* Hangul Syllable */ + [0xbe3c, 0xbe3c], /* Hangul Syllable */ + [0xbe3d, 0xbe3d], /* Hangul Syllable */ + [0xbe3e, 0xbe3e], /* Hangul Syllable */ + [0xbe3f, 0xbe3f], /* Hangul Syllable */ + [0xbe40, 0xbe40], /* Hangul Syllable */ + [0xbe41, 0xbe41], /* Hangul Syllable */ + [0xbe42, 0xbe42], /* Hangul Syllable */ + [0xbe43, 0xbe43], /* Hangul Syllable */ + [0xbe44, 0xbe44], /* Hangul Syllable */ + [0xbe45, 0xbe45], /* Hangul Syllable */ + [0xbe46, 0xbe46], /* Hangul Syllable */ + [0xbe47, 0xbe47], /* Hangul Syllable */ + [0xbe48, 0xbe48], /* Hangul Syllable */ + [0xbe49, 0xbe49], /* Hangul Syllable */ + [0xbe4a, 0xbe4a], /* Hangul Syllable */ + [0xbe4b, 0xbe4b], /* Hangul Syllable */ + [0xbe4c, 0xbe4c], /* Hangul Syllable */ + [0xbe4d, 0xbe4d], /* Hangul Syllable */ + [0xbe4e, 0xbe4e], /* Hangul Syllable */ + [0xbe4f, 0xbe4f], /* Hangul Syllable */ + [0xbe50, 0xbe50], /* Hangul Syllable */ + [0xbe51, 0xbe51], /* Hangul Syllable */ + [0xbe52, 0xbe52], /* Hangul Syllable */ + [0xbe53, 0xbe53], /* Hangul Syllable */ + [0xbe54, 0xbe54], /* Hangul Syllable */ + [0xbe55, 0xbe55], /* Hangul Syllable */ + [0xbe56, 0xbe56], /* Hangul Syllable */ + [0xbe57, 0xbe57], /* Hangul Syllable */ + [0xbe58, 0xbe58], /* Hangul Syllable */ + [0xbe59, 0xbe59], /* Hangul Syllable */ + [0xbe5a, 0xbe5a], /* Hangul Syllable */ + [0xbe5b, 0xbe5b], /* Hangul Syllable */ + [0xbe5c, 0xbe5c], /* Hangul Syllable */ + [0xbe5d, 0xbe5d], /* Hangul Syllable */ + [0xbe5e, 0xbe5e], /* Hangul Syllable */ + [0xbe5f, 0xbe5f], /* Hangul Syllable */ + [0xbe60, 0xbe60], /* Hangul Syllable */ + [0xbe61, 0xbe61], /* Hangul Syllable */ + [0xbe62, 0xbe62], /* Hangul Syllable */ + [0xbe63, 0xbe63], /* Hangul Syllable */ + [0xbe64, 0xbe64], /* Hangul Syllable */ + [0xbe65, 0xbe65], /* Hangul Syllable */ + [0xbe66, 0xbe66], /* Hangul Syllable */ + [0xbe67, 0xbe67], /* Hangul Syllable */ + [0xbe68, 0xbe68], /* Hangul Syllable */ + [0xbe69, 0xbe69], /* Hangul Syllable */ + [0xbe6a, 0xbe6a], /* Hangul Syllable */ + [0xbe6b, 0xbe6b], /* Hangul Syllable */ + [0xbe6c, 0xbe6c], /* Hangul Syllable */ + [0xbe6d, 0xbe6d], /* Hangul Syllable */ + [0xbe6e, 0xbe6e], /* Hangul Syllable */ + [0xbe6f, 0xbe6f], /* Hangul Syllable */ + [0xbe70, 0xbe70], /* Hangul Syllable */ + [0xbe71, 0xbe71], /* Hangul Syllable */ + [0xbe72, 0xbe72], /* Hangul Syllable */ + [0xbe73, 0xbe73], /* Hangul Syllable */ + [0xbe74, 0xbe74], /* Hangul Syllable */ + [0xbe75, 0xbe75], /* Hangul Syllable */ + [0xbe76, 0xbe76], /* Hangul Syllable */ + [0xbe77, 0xbe77], /* Hangul Syllable */ + [0xbe78, 0xbe78], /* Hangul Syllable */ + [0xbe79, 0xbe79], /* Hangul Syllable */ + [0xbe7a, 0xbe7a], /* Hangul Syllable */ + [0xbe7b, 0xbe7b], /* Hangul Syllable */ + [0xbe7c, 0xbe7c], /* Hangul Syllable */ + [0xbe7d, 0xbe7d], /* Hangul Syllable */ + [0xbe7e, 0xbe7e], /* Hangul Syllable */ + [0xbe7f, 0xbe7f], /* Hangul Syllable */ + [0xbe80, 0xbe80], /* Hangul Syllable */ + [0xbe81, 0xbe81], /* Hangul Syllable */ + [0xbe82, 0xbe82], /* Hangul Syllable */ + [0xbe83, 0xbe83], /* Hangul Syllable */ + [0xbe84, 0xbe84], /* Hangul Syllable */ + [0xbe85, 0xbe85], /* Hangul Syllable */ + [0xbe86, 0xbe86], /* Hangul Syllable */ + [0xbe87, 0xbe87], /* Hangul Syllable */ + [0xbe88, 0xbe88], /* Hangul Syllable */ + [0xbe89, 0xbe89], /* Hangul Syllable */ + [0xbe8a, 0xbe8a], /* Hangul Syllable */ + [0xbe8b, 0xbe8b], /* Hangul Syllable */ + [0xbe8c, 0xbe8c], /* Hangul Syllable */ + [0xbe8d, 0xbe8d], /* Hangul Syllable */ + [0xbe8e, 0xbe8e], /* Hangul Syllable */ + [0xbe8f, 0xbe8f], /* Hangul Syllable */ + [0xbe90, 0xbe90], /* Hangul Syllable */ + [0xbe91, 0xbe91], /* Hangul Syllable */ + [0xbe92, 0xbe92], /* Hangul Syllable */ + [0xbe93, 0xbe93], /* Hangul Syllable */ + [0xbe94, 0xbe94], /* Hangul Syllable */ + [0xbe95, 0xbe95], /* Hangul Syllable */ + [0xbe96, 0xbe96], /* Hangul Syllable */ + [0xbe97, 0xbe97], /* Hangul Syllable */ + [0xbe98, 0xbe98], /* Hangul Syllable */ + [0xbe99, 0xbe99], /* Hangul Syllable */ + [0xbe9a, 0xbe9a], /* Hangul Syllable */ + [0xbe9b, 0xbe9b], /* Hangul Syllable */ + [0xbe9c, 0xbe9c], /* Hangul Syllable */ + [0xbe9d, 0xbe9d], /* Hangul Syllable */ + [0xbe9e, 0xbe9e], /* Hangul Syllable */ + [0xbe9f, 0xbe9f], /* Hangul Syllable */ + [0xbea0, 0xbea0], /* Hangul Syllable */ + [0xbea1, 0xbea1], /* Hangul Syllable */ + [0xbea2, 0xbea2], /* Hangul Syllable */ + [0xbea3, 0xbea3], /* Hangul Syllable */ + [0xbea4, 0xbea4], /* Hangul Syllable */ + [0xbea5, 0xbea5], /* Hangul Syllable */ + [0xbea6, 0xbea6], /* Hangul Syllable */ + [0xbea7, 0xbea7], /* Hangul Syllable */ + [0xbea8, 0xbea8], /* Hangul Syllable */ + [0xbea9, 0xbea9], /* Hangul Syllable */ + [0xbeaa, 0xbeaa], /* Hangul Syllable */ + [0xbeab, 0xbeab], /* Hangul Syllable */ + [0xbeac, 0xbeac], /* Hangul Syllable */ + [0xbead, 0xbead], /* Hangul Syllable */ + [0xbeae, 0xbeae], /* Hangul Syllable */ + [0xbeaf, 0xbeaf], /* Hangul Syllable */ + [0xbeb0, 0xbeb0], /* Hangul Syllable */ + [0xbeb1, 0xbeb1], /* Hangul Syllable */ + [0xbeb2, 0xbeb2], /* Hangul Syllable */ + [0xbeb3, 0xbeb3], /* Hangul Syllable */ + [0xbeb4, 0xbeb4], /* Hangul Syllable */ + [0xbeb5, 0xbeb5], /* Hangul Syllable */ + [0xbeb6, 0xbeb6], /* Hangul Syllable */ + [0xbeb7, 0xbeb7], /* Hangul Syllable */ + [0xbeb8, 0xbeb8], /* Hangul Syllable */ + [0xbeb9, 0xbeb9], /* Hangul Syllable */ + [0xbeba, 0xbeba], /* Hangul Syllable */ + [0xbebb, 0xbebb], /* Hangul Syllable */ + [0xbebc, 0xbebc], /* Hangul Syllable */ + [0xbebd, 0xbebd], /* Hangul Syllable */ + [0xbebe, 0xbebe], /* Hangul Syllable */ + [0xbebf, 0xbebf], /* Hangul Syllable */ + [0xbec0, 0xbec0], /* Hangul Syllable */ + [0xbec1, 0xbec1], /* Hangul Syllable */ + [0xbec2, 0xbec2], /* Hangul Syllable */ + [0xbec3, 0xbec3], /* Hangul Syllable */ + [0xbec4, 0xbec4], /* Hangul Syllable */ + [0xbec5, 0xbec5], /* Hangul Syllable */ + [0xbec6, 0xbec6], /* Hangul Syllable */ + [0xbec7, 0xbec7], /* Hangul Syllable */ + [0xbec8, 0xbec8], /* Hangul Syllable */ + [0xbec9, 0xbec9], /* Hangul Syllable */ + [0xbeca, 0xbeca], /* Hangul Syllable */ + [0xbecb, 0xbecb], /* Hangul Syllable */ + [0xbecc, 0xbecc], /* Hangul Syllable */ + [0xbecd, 0xbecd], /* Hangul Syllable */ + [0xbece, 0xbece], /* Hangul Syllable */ + [0xbecf, 0xbecf], /* Hangul Syllable */ + [0xbed0, 0xbed0], /* Hangul Syllable */ + [0xbed1, 0xbed1], /* Hangul Syllable */ + [0xbed2, 0xbed2], /* Hangul Syllable */ + [0xbed3, 0xbed3], /* Hangul Syllable */ + [0xbed4, 0xbed4], /* Hangul Syllable */ + [0xbed5, 0xbed5], /* Hangul Syllable */ + [0xbed6, 0xbed6], /* Hangul Syllable */ + [0xbed7, 0xbed7], /* Hangul Syllable */ + [0xbed8, 0xbed8], /* Hangul Syllable */ + [0xbed9, 0xbed9], /* Hangul Syllable */ + [0xbeda, 0xbeda], /* Hangul Syllable */ + [0xbedb, 0xbedb], /* Hangul Syllable */ + [0xbedc, 0xbedc], /* Hangul Syllable */ + [0xbedd, 0xbedd], /* Hangul Syllable */ + [0xbede, 0xbede], /* Hangul Syllable */ + [0xbedf, 0xbedf], /* Hangul Syllable */ + [0xbee0, 0xbee0], /* Hangul Syllable */ + [0xbee1, 0xbee1], /* Hangul Syllable */ + [0xbee2, 0xbee2], /* Hangul Syllable */ + [0xbee3, 0xbee3], /* Hangul Syllable */ + [0xbee4, 0xbee4], /* Hangul Syllable */ + [0xbee5, 0xbee5], /* Hangul Syllable */ + [0xbee6, 0xbee6], /* Hangul Syllable */ + [0xbee7, 0xbee7], /* Hangul Syllable */ + [0xbee8, 0xbee8], /* Hangul Syllable */ + [0xbee9, 0xbee9], /* Hangul Syllable */ + [0xbeea, 0xbeea], /* Hangul Syllable */ + [0xbeeb, 0xbeeb], /* Hangul Syllable */ + [0xbeec, 0xbeec], /* Hangul Syllable */ + [0xbeed, 0xbeed], /* Hangul Syllable */ + [0xbeee, 0xbeee], /* Hangul Syllable */ + [0xbeef, 0xbeef], /* Hangul Syllable */ + [0xbef0, 0xbef0], /* Hangul Syllable */ + [0xbef1, 0xbef1], /* Hangul Syllable */ + [0xbef2, 0xbef2], /* Hangul Syllable */ + [0xbef3, 0xbef3], /* Hangul Syllable */ + [0xbef4, 0xbef4], /* Hangul Syllable */ + [0xbef5, 0xbef5], /* Hangul Syllable */ + [0xbef6, 0xbef6], /* Hangul Syllable */ + [0xbef7, 0xbef7], /* Hangul Syllable */ + [0xbef8, 0xbef8], /* Hangul Syllable */ + [0xbef9, 0xbef9], /* Hangul Syllable */ + [0xbefa, 0xbefa], /* Hangul Syllable */ + [0xbefb, 0xbefb], /* Hangul Syllable */ + [0xbefc, 0xbefc], /* Hangul Syllable */ + [0xbefd, 0xbefd], /* Hangul Syllable */ + [0xbefe, 0xbefe], /* Hangul Syllable */ + [0xbeff, 0xbeff], /* Hangul Syllable */ + [0xbf00, 0xbf00], /* Hangul Syllable */ + [0xbf01, 0xbf01], /* Hangul Syllable */ + [0xbf02, 0xbf02], /* Hangul Syllable */ + [0xbf03, 0xbf03], /* Hangul Syllable */ + [0xbf04, 0xbf04], /* Hangul Syllable */ + [0xbf05, 0xbf05], /* Hangul Syllable */ + [0xbf06, 0xbf06], /* Hangul Syllable */ + [0xbf07, 0xbf07], /* Hangul Syllable */ + [0xbf08, 0xbf08], /* Hangul Syllable */ + [0xbf09, 0xbf09], /* Hangul Syllable */ + [0xbf0a, 0xbf0a], /* Hangul Syllable */ + [0xbf0b, 0xbf0b], /* Hangul Syllable */ + [0xbf0c, 0xbf0c], /* Hangul Syllable */ + [0xbf0d, 0xbf0d], /* Hangul Syllable */ + [0xbf0e, 0xbf0e], /* Hangul Syllable */ + [0xbf0f, 0xbf0f], /* Hangul Syllable */ + [0xbf10, 0xbf10], /* Hangul Syllable */ + [0xbf11, 0xbf11], /* Hangul Syllable */ + [0xbf12, 0xbf12], /* Hangul Syllable */ + [0xbf13, 0xbf13], /* Hangul Syllable */ + [0xbf14, 0xbf14], /* Hangul Syllable */ + [0xbf15, 0xbf15], /* Hangul Syllable */ + [0xbf16, 0xbf16], /* Hangul Syllable */ + [0xbf17, 0xbf17], /* Hangul Syllable */ + [0xbf18, 0xbf18], /* Hangul Syllable */ + [0xbf19, 0xbf19], /* Hangul Syllable */ + [0xbf1a, 0xbf1a], /* Hangul Syllable */ + [0xbf1b, 0xbf1b], /* Hangul Syllable */ + [0xbf1c, 0xbf1c], /* Hangul Syllable */ + [0xbf1d, 0xbf1d], /* Hangul Syllable */ + [0xbf1e, 0xbf1e], /* Hangul Syllable */ + [0xbf1f, 0xbf1f], /* Hangul Syllable */ + [0xbf20, 0xbf20], /* Hangul Syllable */ + [0xbf21, 0xbf21], /* Hangul Syllable */ + [0xbf22, 0xbf22], /* Hangul Syllable */ + [0xbf23, 0xbf23], /* Hangul Syllable */ + [0xbf24, 0xbf24], /* Hangul Syllable */ + [0xbf25, 0xbf25], /* Hangul Syllable */ + [0xbf26, 0xbf26], /* Hangul Syllable */ + [0xbf27, 0xbf27], /* Hangul Syllable */ + [0xbf28, 0xbf28], /* Hangul Syllable */ + [0xbf29, 0xbf29], /* Hangul Syllable */ + [0xbf2a, 0xbf2a], /* Hangul Syllable */ + [0xbf2b, 0xbf2b], /* Hangul Syllable */ + [0xbf2c, 0xbf2c], /* Hangul Syllable */ + [0xbf2d, 0xbf2d], /* Hangul Syllable */ + [0xbf2e, 0xbf2e], /* Hangul Syllable */ + [0xbf2f, 0xbf2f], /* Hangul Syllable */ + [0xbf30, 0xbf30], /* Hangul Syllable */ + [0xbf31, 0xbf31], /* Hangul Syllable */ + [0xbf32, 0xbf32], /* Hangul Syllable */ + [0xbf33, 0xbf33], /* Hangul Syllable */ + [0xbf34, 0xbf34], /* Hangul Syllable */ + [0xbf35, 0xbf35], /* Hangul Syllable */ + [0xbf36, 0xbf36], /* Hangul Syllable */ + [0xbf37, 0xbf37], /* Hangul Syllable */ + [0xbf38, 0xbf38], /* Hangul Syllable */ + [0xbf39, 0xbf39], /* Hangul Syllable */ + [0xbf3a, 0xbf3a], /* Hangul Syllable */ + [0xbf3b, 0xbf3b], /* Hangul Syllable */ + [0xbf3c, 0xbf3c], /* Hangul Syllable */ + [0xbf3d, 0xbf3d], /* Hangul Syllable */ + [0xbf3e, 0xbf3e], /* Hangul Syllable */ + [0xbf3f, 0xbf3f], /* Hangul Syllable */ + [0xbf40, 0xbf40], /* Hangul Syllable */ + [0xbf41, 0xbf41], /* Hangul Syllable */ + [0xbf42, 0xbf42], /* Hangul Syllable */ + [0xbf43, 0xbf43], /* Hangul Syllable */ + [0xbf44, 0xbf44], /* Hangul Syllable */ + [0xbf45, 0xbf45], /* Hangul Syllable */ + [0xbf46, 0xbf46], /* Hangul Syllable */ + [0xbf47, 0xbf47], /* Hangul Syllable */ + [0xbf48, 0xbf48], /* Hangul Syllable */ + [0xbf49, 0xbf49], /* Hangul Syllable */ + [0xbf4a, 0xbf4a], /* Hangul Syllable */ + [0xbf4b, 0xbf4b], /* Hangul Syllable */ + [0xbf4c, 0xbf4c], /* Hangul Syllable */ + [0xbf4d, 0xbf4d], /* Hangul Syllable */ + [0xbf4e, 0xbf4e], /* Hangul Syllable */ + [0xbf4f, 0xbf4f], /* Hangul Syllable */ + [0xbf50, 0xbf50], /* Hangul Syllable */ + [0xbf51, 0xbf51], /* Hangul Syllable */ + [0xbf52, 0xbf52], /* Hangul Syllable */ + [0xbf53, 0xbf53], /* Hangul Syllable */ + [0xbf54, 0xbf54], /* Hangul Syllable */ + [0xbf55, 0xbf55], /* Hangul Syllable */ + [0xbf56, 0xbf56], /* Hangul Syllable */ + [0xbf57, 0xbf57], /* Hangul Syllable */ + [0xbf58, 0xbf58], /* Hangul Syllable */ + [0xbf59, 0xbf59], /* Hangul Syllable */ + [0xbf5a, 0xbf5a], /* Hangul Syllable */ + [0xbf5b, 0xbf5b], /* Hangul Syllable */ + [0xbf5c, 0xbf5c], /* Hangul Syllable */ + [0xbf5d, 0xbf5d], /* Hangul Syllable */ + [0xbf5e, 0xbf5e], /* Hangul Syllable */ + [0xbf5f, 0xbf5f], /* Hangul Syllable */ + [0xbf60, 0xbf60], /* Hangul Syllable */ + [0xbf61, 0xbf61], /* Hangul Syllable */ + [0xbf62, 0xbf62], /* Hangul Syllable */ + [0xbf63, 0xbf63], /* Hangul Syllable */ + [0xbf64, 0xbf64], /* Hangul Syllable */ + [0xbf65, 0xbf65], /* Hangul Syllable */ + [0xbf66, 0xbf66], /* Hangul Syllable */ + [0xbf67, 0xbf67], /* Hangul Syllable */ + [0xbf68, 0xbf68], /* Hangul Syllable */ + [0xbf69, 0xbf69], /* Hangul Syllable */ + [0xbf6a, 0xbf6a], /* Hangul Syllable */ + [0xbf6b, 0xbf6b], /* Hangul Syllable */ + [0xbf6c, 0xbf6c], /* Hangul Syllable */ + [0xbf6d, 0xbf6d], /* Hangul Syllable */ + [0xbf6e, 0xbf6e], /* Hangul Syllable */ + [0xbf6f, 0xbf6f], /* Hangul Syllable */ + [0xbf70, 0xbf70], /* Hangul Syllable */ + [0xbf71, 0xbf71], /* Hangul Syllable */ + [0xbf72, 0xbf72], /* Hangul Syllable */ + [0xbf73, 0xbf73], /* Hangul Syllable */ + [0xbf74, 0xbf74], /* Hangul Syllable */ + [0xbf75, 0xbf75], /* Hangul Syllable */ + [0xbf76, 0xbf76], /* Hangul Syllable */ + [0xbf77, 0xbf77], /* Hangul Syllable */ + [0xbf78, 0xbf78], /* Hangul Syllable */ + [0xbf79, 0xbf79], /* Hangul Syllable */ + [0xbf7a, 0xbf7a], /* Hangul Syllable */ + [0xbf7b, 0xbf7b], /* Hangul Syllable */ + [0xbf7c, 0xbf7c], /* Hangul Syllable */ + [0xbf7d, 0xbf7d], /* Hangul Syllable */ + [0xbf7e, 0xbf7e], /* Hangul Syllable */ + [0xbf7f, 0xbf7f], /* Hangul Syllable */ + [0xbf80, 0xbf80], /* Hangul Syllable */ + [0xbf81, 0xbf81], /* Hangul Syllable */ + [0xbf82, 0xbf82], /* Hangul Syllable */ + [0xbf83, 0xbf83], /* Hangul Syllable */ + [0xbf84, 0xbf84], /* Hangul Syllable */ + [0xbf85, 0xbf85], /* Hangul Syllable */ + [0xbf86, 0xbf86], /* Hangul Syllable */ + [0xbf87, 0xbf87], /* Hangul Syllable */ + [0xbf88, 0xbf88], /* Hangul Syllable */ + [0xbf89, 0xbf89], /* Hangul Syllable */ + [0xbf8a, 0xbf8a], /* Hangul Syllable */ + [0xbf8b, 0xbf8b], /* Hangul Syllable */ + [0xbf8c, 0xbf8c], /* Hangul Syllable */ + [0xbf8d, 0xbf8d], /* Hangul Syllable */ + [0xbf8e, 0xbf8e], /* Hangul Syllable */ + [0xbf8f, 0xbf8f], /* Hangul Syllable */ + [0xbf90, 0xbf90], /* Hangul Syllable */ + [0xbf91, 0xbf91], /* Hangul Syllable */ + [0xbf92, 0xbf92], /* Hangul Syllable */ + [0xbf93, 0xbf93], /* Hangul Syllable */ + [0xbf94, 0xbf94], /* Hangul Syllable */ + [0xbf95, 0xbf95], /* Hangul Syllable */ + [0xbf96, 0xbf96], /* Hangul Syllable */ + [0xbf97, 0xbf97], /* Hangul Syllable */ + [0xbf98, 0xbf98], /* Hangul Syllable */ + [0xbf99, 0xbf99], /* Hangul Syllable */ + [0xbf9a, 0xbf9a], /* Hangul Syllable */ + [0xbf9b, 0xbf9b], /* Hangul Syllable */ + [0xbf9c, 0xbf9c], /* Hangul Syllable */ + [0xbf9d, 0xbf9d], /* Hangul Syllable */ + [0xbf9e, 0xbf9e], /* Hangul Syllable */ + [0xbf9f, 0xbf9f], /* Hangul Syllable */ + [0xbfa0, 0xbfa0], /* Hangul Syllable */ + [0xbfa1, 0xbfa1], /* Hangul Syllable */ + [0xbfa2, 0xbfa2], /* Hangul Syllable */ + [0xbfa3, 0xbfa3], /* Hangul Syllable */ + [0xbfa4, 0xbfa4], /* Hangul Syllable */ + [0xbfa5, 0xbfa5], /* Hangul Syllable */ + [0xbfa6, 0xbfa6], /* Hangul Syllable */ + [0xbfa7, 0xbfa7], /* Hangul Syllable */ + [0xbfa8, 0xbfa8], /* Hangul Syllable */ + [0xbfa9, 0xbfa9], /* Hangul Syllable */ + [0xbfaa, 0xbfaa], /* Hangul Syllable */ + [0xbfab, 0xbfab], /* Hangul Syllable */ + [0xbfac, 0xbfac], /* Hangul Syllable */ + [0xbfad, 0xbfad], /* Hangul Syllable */ + [0xbfae, 0xbfae], /* Hangul Syllable */ + [0xbfaf, 0xbfaf], /* Hangul Syllable */ + [0xbfb0, 0xbfb0], /* Hangul Syllable */ + [0xbfb1, 0xbfb1], /* Hangul Syllable */ + [0xbfb2, 0xbfb2], /* Hangul Syllable */ + [0xbfb3, 0xbfb3], /* Hangul Syllable */ + [0xbfb4, 0xbfb4], /* Hangul Syllable */ + [0xbfb5, 0xbfb5], /* Hangul Syllable */ + [0xbfb6, 0xbfb6], /* Hangul Syllable */ + [0xbfb7, 0xbfb7], /* Hangul Syllable */ + [0xbfb8, 0xbfb8], /* Hangul Syllable */ + [0xbfb9, 0xbfb9], /* Hangul Syllable */ + [0xbfba, 0xbfba], /* Hangul Syllable */ + [0xbfbb, 0xbfbb], /* Hangul Syllable */ + [0xbfbc, 0xbfbc], /* Hangul Syllable */ + [0xbfbd, 0xbfbd], /* Hangul Syllable */ + [0xbfbe, 0xbfbe], /* Hangul Syllable */ + [0xbfbf, 0xbfbf], /* Hangul Syllable */ + [0xbfc0, 0xbfc0], /* Hangul Syllable */ + [0xbfc1, 0xbfc1], /* Hangul Syllable */ + [0xbfc2, 0xbfc2], /* Hangul Syllable */ + [0xbfc3, 0xbfc3], /* Hangul Syllable */ + [0xbfc4, 0xbfc4], /* Hangul Syllable */ + [0xbfc5, 0xbfc5], /* Hangul Syllable */ + [0xbfc6, 0xbfc6], /* Hangul Syllable */ + [0xbfc7, 0xbfc7], /* Hangul Syllable */ + [0xbfc8, 0xbfc8], /* Hangul Syllable */ + [0xbfc9, 0xbfc9], /* Hangul Syllable */ + [0xbfca, 0xbfca], /* Hangul Syllable */ + [0xbfcb, 0xbfcb], /* Hangul Syllable */ + [0xbfcc, 0xbfcc], /* Hangul Syllable */ + [0xbfcd, 0xbfcd], /* Hangul Syllable */ + [0xbfce, 0xbfce], /* Hangul Syllable */ + [0xbfcf, 0xbfcf], /* Hangul Syllable */ + [0xbfd0, 0xbfd0], /* Hangul Syllable */ + [0xbfd1, 0xbfd1], /* Hangul Syllable */ + [0xbfd2, 0xbfd2], /* Hangul Syllable */ + [0xbfd3, 0xbfd3], /* Hangul Syllable */ + [0xbfd4, 0xbfd4], /* Hangul Syllable */ + [0xbfd5, 0xbfd5], /* Hangul Syllable */ + [0xbfd6, 0xbfd6], /* Hangul Syllable */ + [0xbfd7, 0xbfd7], /* Hangul Syllable */ + [0xbfd8, 0xbfd8], /* Hangul Syllable */ + [0xbfd9, 0xbfd9], /* Hangul Syllable */ + [0xbfda, 0xbfda], /* Hangul Syllable */ + [0xbfdb, 0xbfdb], /* Hangul Syllable */ + [0xbfdc, 0xbfdc], /* Hangul Syllable */ + [0xbfdd, 0xbfdd], /* Hangul Syllable */ + [0xbfde, 0xbfde], /* Hangul Syllable */ + [0xbfdf, 0xbfdf], /* Hangul Syllable */ + [0xbfe0, 0xbfe0], /* Hangul Syllable */ + [0xbfe1, 0xbfe1], /* Hangul Syllable */ + [0xbfe2, 0xbfe2], /* Hangul Syllable */ + [0xbfe3, 0xbfe3], /* Hangul Syllable */ + [0xbfe4, 0xbfe4], /* Hangul Syllable */ + [0xbfe5, 0xbfe5], /* Hangul Syllable */ + [0xbfe6, 0xbfe6], /* Hangul Syllable */ + [0xbfe7, 0xbfe7], /* Hangul Syllable */ + [0xbfe8, 0xbfe8], /* Hangul Syllable */ + [0xbfe9, 0xbfe9], /* Hangul Syllable */ + [0xbfea, 0xbfea], /* Hangul Syllable */ + [0xbfeb, 0xbfeb], /* Hangul Syllable */ + [0xbfec, 0xbfec], /* Hangul Syllable */ + [0xbfed, 0xbfed], /* Hangul Syllable */ + [0xbfee, 0xbfee], /* Hangul Syllable */ + [0xbfef, 0xbfef], /* Hangul Syllable */ + [0xbff0, 0xbff0], /* Hangul Syllable */ + [0xbff1, 0xbff1], /* Hangul Syllable */ + [0xbff2, 0xbff2], /* Hangul Syllable */ + [0xbff3, 0xbff3], /* Hangul Syllable */ + [0xbff4, 0xbff4], /* Hangul Syllable */ + [0xbff5, 0xbff5], /* Hangul Syllable */ + [0xbff6, 0xbff6], /* Hangul Syllable */ + [0xbff7, 0xbff7], /* Hangul Syllable */ + [0xbff8, 0xbff8], /* Hangul Syllable */ + [0xbff9, 0xbff9], /* Hangul Syllable */ + [0xbffa, 0xbffa], /* Hangul Syllable */ + [0xbffb, 0xbffb], /* Hangul Syllable */ + [0xbffc, 0xbffc], /* Hangul Syllable */ + [0xbffd, 0xbffd], /* Hangul Syllable */ + [0xbffe, 0xbffe], /* Hangul Syllable */ + [0xbfff, 0xbfff], /* Hangul Syllable */ + [0xc000, 0xc000], /* Hangul Syllable */ + [0xc001, 0xc001], /* Hangul Syllable */ + [0xc002, 0xc002], /* Hangul Syllable */ + [0xc003, 0xc003], /* Hangul Syllable */ + [0xc004, 0xc004], /* Hangul Syllable */ + [0xc005, 0xc005], /* Hangul Syllable */ + [0xc006, 0xc006], /* Hangul Syllable */ + [0xc007, 0xc007], /* Hangul Syllable */ + [0xc008, 0xc008], /* Hangul Syllable */ + [0xc009, 0xc009], /* Hangul Syllable */ + [0xc00a, 0xc00a], /* Hangul Syllable */ + [0xc00b, 0xc00b], /* Hangul Syllable */ + [0xc00c, 0xc00c], /* Hangul Syllable */ + [0xc00d, 0xc00d], /* Hangul Syllable */ + [0xc00e, 0xc00e], /* Hangul Syllable */ + [0xc00f, 0xc00f], /* Hangul Syllable */ + [0xc010, 0xc010], /* Hangul Syllable */ + [0xc011, 0xc011], /* Hangul Syllable */ + [0xc012, 0xc012], /* Hangul Syllable */ + [0xc013, 0xc013], /* Hangul Syllable */ + [0xc014, 0xc014], /* Hangul Syllable */ + [0xc015, 0xc015], /* Hangul Syllable */ + [0xc016, 0xc016], /* Hangul Syllable */ + [0xc017, 0xc017], /* Hangul Syllable */ + [0xc018, 0xc018], /* Hangul Syllable */ + [0xc019, 0xc019], /* Hangul Syllable */ + [0xc01a, 0xc01a], /* Hangul Syllable */ + [0xc01b, 0xc01b], /* Hangul Syllable */ + [0xc01c, 0xc01c], /* Hangul Syllable */ + [0xc01d, 0xc01d], /* Hangul Syllable */ + [0xc01e, 0xc01e], /* Hangul Syllable */ + [0xc01f, 0xc01f], /* Hangul Syllable */ + [0xc020, 0xc020], /* Hangul Syllable */ + [0xc021, 0xc021], /* Hangul Syllable */ + [0xc022, 0xc022], /* Hangul Syllable */ + [0xc023, 0xc023], /* Hangul Syllable */ + [0xc024, 0xc024], /* Hangul Syllable */ + [0xc025, 0xc025], /* Hangul Syllable */ + [0xc026, 0xc026], /* Hangul Syllable */ + [0xc027, 0xc027], /* Hangul Syllable */ + [0xc028, 0xc028], /* Hangul Syllable */ + [0xc029, 0xc029], /* Hangul Syllable */ + [0xc02a, 0xc02a], /* Hangul Syllable */ + [0xc02b, 0xc02b], /* Hangul Syllable */ + [0xc02c, 0xc02c], /* Hangul Syllable */ + [0xc02d, 0xc02d], /* Hangul Syllable */ + [0xc02e, 0xc02e], /* Hangul Syllable */ + [0xc02f, 0xc02f], /* Hangul Syllable */ + [0xc030, 0xc030], /* Hangul Syllable */ + [0xc031, 0xc031], /* Hangul Syllable */ + [0xc032, 0xc032], /* Hangul Syllable */ + [0xc033, 0xc033], /* Hangul Syllable */ + [0xc034, 0xc034], /* Hangul Syllable */ + [0xc035, 0xc035], /* Hangul Syllable */ + [0xc036, 0xc036], /* Hangul Syllable */ + [0xc037, 0xc037], /* Hangul Syllable */ + [0xc038, 0xc038], /* Hangul Syllable */ + [0xc039, 0xc039], /* Hangul Syllable */ + [0xc03a, 0xc03a], /* Hangul Syllable */ + [0xc03b, 0xc03b], /* Hangul Syllable */ + [0xc03c, 0xc03c], /* Hangul Syllable */ + [0xc03d, 0xc03d], /* Hangul Syllable */ + [0xc03e, 0xc03e], /* Hangul Syllable */ + [0xc03f, 0xc03f], /* Hangul Syllable */ + [0xc040, 0xc040], /* Hangul Syllable */ + [0xc041, 0xc041], /* Hangul Syllable */ + [0xc042, 0xc042], /* Hangul Syllable */ + [0xc043, 0xc043], /* Hangul Syllable */ + [0xc044, 0xc044], /* Hangul Syllable */ + [0xc045, 0xc045], /* Hangul Syllable */ + [0xc046, 0xc046], /* Hangul Syllable */ + [0xc047, 0xc047], /* Hangul Syllable */ + [0xc048, 0xc048], /* Hangul Syllable */ + [0xc049, 0xc049], /* Hangul Syllable */ + [0xc04a, 0xc04a], /* Hangul Syllable */ + [0xc04b, 0xc04b], /* Hangul Syllable */ + [0xc04c, 0xc04c], /* Hangul Syllable */ + [0xc04d, 0xc04d], /* Hangul Syllable */ + [0xc04e, 0xc04e], /* Hangul Syllable */ + [0xc04f, 0xc04f], /* Hangul Syllable */ + [0xc050, 0xc050], /* Hangul Syllable */ + [0xc051, 0xc051], /* Hangul Syllable */ + [0xc052, 0xc052], /* Hangul Syllable */ + [0xc053, 0xc053], /* Hangul Syllable */ + [0xc054, 0xc054], /* Hangul Syllable */ + [0xc055, 0xc055], /* Hangul Syllable */ + [0xc056, 0xc056], /* Hangul Syllable */ + [0xc057, 0xc057], /* Hangul Syllable */ + [0xc058, 0xc058], /* Hangul Syllable */ + [0xc059, 0xc059], /* Hangul Syllable */ + [0xc05a, 0xc05a], /* Hangul Syllable */ + [0xc05b, 0xc05b], /* Hangul Syllable */ + [0xc05c, 0xc05c], /* Hangul Syllable */ + [0xc05d, 0xc05d], /* Hangul Syllable */ + [0xc05e, 0xc05e], /* Hangul Syllable */ + [0xc05f, 0xc05f], /* Hangul Syllable */ + [0xc060, 0xc060], /* Hangul Syllable */ + [0xc061, 0xc061], /* Hangul Syllable */ + [0xc062, 0xc062], /* Hangul Syllable */ + [0xc063, 0xc063], /* Hangul Syllable */ + [0xc064, 0xc064], /* Hangul Syllable */ + [0xc065, 0xc065], /* Hangul Syllable */ + [0xc066, 0xc066], /* Hangul Syllable */ + [0xc067, 0xc067], /* Hangul Syllable */ + [0xc068, 0xc068], /* Hangul Syllable */ + [0xc069, 0xc069], /* Hangul Syllable */ + [0xc06a, 0xc06a], /* Hangul Syllable */ + [0xc06b, 0xc06b], /* Hangul Syllable */ + [0xc06c, 0xc06c], /* Hangul Syllable */ + [0xc06d, 0xc06d], /* Hangul Syllable */ + [0xc06e, 0xc06e], /* Hangul Syllable */ + [0xc06f, 0xc06f], /* Hangul Syllable */ + [0xc070, 0xc070], /* Hangul Syllable */ + [0xc071, 0xc071], /* Hangul Syllable */ + [0xc072, 0xc072], /* Hangul Syllable */ + [0xc073, 0xc073], /* Hangul Syllable */ + [0xc074, 0xc074], /* Hangul Syllable */ + [0xc075, 0xc075], /* Hangul Syllable */ + [0xc076, 0xc076], /* Hangul Syllable */ + [0xc077, 0xc077], /* Hangul Syllable */ + [0xc078, 0xc078], /* Hangul Syllable */ + [0xc079, 0xc079], /* Hangul Syllable */ + [0xc07a, 0xc07a], /* Hangul Syllable */ + [0xc07b, 0xc07b], /* Hangul Syllable */ + [0xc07c, 0xc07c], /* Hangul Syllable */ + [0xc07d, 0xc07d], /* Hangul Syllable */ + [0xc07e, 0xc07e], /* Hangul Syllable */ + [0xc07f, 0xc07f], /* Hangul Syllable */ + [0xc080, 0xc080], /* Hangul Syllable */ + [0xc081, 0xc081], /* Hangul Syllable */ + [0xc082, 0xc082], /* Hangul Syllable */ + [0xc083, 0xc083], /* Hangul Syllable */ + [0xc084, 0xc084], /* Hangul Syllable */ + [0xc085, 0xc085], /* Hangul Syllable */ + [0xc086, 0xc086], /* Hangul Syllable */ + [0xc087, 0xc087], /* Hangul Syllable */ + [0xc088, 0xc088], /* Hangul Syllable */ + [0xc089, 0xc089], /* Hangul Syllable */ + [0xc08a, 0xc08a], /* Hangul Syllable */ + [0xc08b, 0xc08b], /* Hangul Syllable */ + [0xc08c, 0xc08c], /* Hangul Syllable */ + [0xc08d, 0xc08d], /* Hangul Syllable */ + [0xc08e, 0xc08e], /* Hangul Syllable */ + [0xc08f, 0xc08f], /* Hangul Syllable */ + [0xc090, 0xc090], /* Hangul Syllable */ + [0xc091, 0xc091], /* Hangul Syllable */ + [0xc092, 0xc092], /* Hangul Syllable */ + [0xc093, 0xc093], /* Hangul Syllable */ + [0xc094, 0xc094], /* Hangul Syllable */ + [0xc095, 0xc095], /* Hangul Syllable */ + [0xc096, 0xc096], /* Hangul Syllable */ + [0xc097, 0xc097], /* Hangul Syllable */ + [0xc098, 0xc098], /* Hangul Syllable */ + [0xc099, 0xc099], /* Hangul Syllable */ + [0xc09a, 0xc09a], /* Hangul Syllable */ + [0xc09b, 0xc09b], /* Hangul Syllable */ + [0xc09c, 0xc09c], /* Hangul Syllable */ + [0xc09d, 0xc09d], /* Hangul Syllable */ + [0xc09e, 0xc09e], /* Hangul Syllable */ + [0xc09f, 0xc09f], /* Hangul Syllable */ + [0xc0a0, 0xc0a0], /* Hangul Syllable */ + [0xc0a1, 0xc0a1], /* Hangul Syllable */ + [0xc0a2, 0xc0a2], /* Hangul Syllable */ + [0xc0a3, 0xc0a3], /* Hangul Syllable */ + [0xc0a4, 0xc0a4], /* Hangul Syllable */ + [0xc0a5, 0xc0a5], /* Hangul Syllable */ + [0xc0a6, 0xc0a6], /* Hangul Syllable */ + [0xc0a7, 0xc0a7], /* Hangul Syllable */ + [0xc0a8, 0xc0a8], /* Hangul Syllable */ + [0xc0a9, 0xc0a9], /* Hangul Syllable */ + [0xc0aa, 0xc0aa], /* Hangul Syllable */ + [0xc0ab, 0xc0ab], /* Hangul Syllable */ + [0xc0ac, 0xc0ac], /* Hangul Syllable */ + [0xc0ad, 0xc0ad], /* Hangul Syllable */ + [0xc0ae, 0xc0ae], /* Hangul Syllable */ + [0xc0af, 0xc0af], /* Hangul Syllable */ + [0xc0b0, 0xc0b0], /* Hangul Syllable */ + [0xc0b1, 0xc0b1], /* Hangul Syllable */ + [0xc0b2, 0xc0b2], /* Hangul Syllable */ + [0xc0b3, 0xc0b3], /* Hangul Syllable */ + [0xc0b4, 0xc0b4], /* Hangul Syllable */ + [0xc0b5, 0xc0b5], /* Hangul Syllable */ + [0xc0b6, 0xc0b6], /* Hangul Syllable */ + [0xc0b7, 0xc0b7], /* Hangul Syllable */ + [0xc0b8, 0xc0b8], /* Hangul Syllable */ + [0xc0b9, 0xc0b9], /* Hangul Syllable */ + [0xc0ba, 0xc0ba], /* Hangul Syllable */ + [0xc0bb, 0xc0bb], /* Hangul Syllable */ + [0xc0bc, 0xc0bc], /* Hangul Syllable */ + [0xc0bd, 0xc0bd], /* Hangul Syllable */ + [0xc0be, 0xc0be], /* Hangul Syllable */ + [0xc0bf, 0xc0bf], /* Hangul Syllable */ + [0xc0c0, 0xc0c0], /* Hangul Syllable */ + [0xc0c1, 0xc0c1], /* Hangul Syllable */ + [0xc0c2, 0xc0c2], /* Hangul Syllable */ + [0xc0c3, 0xc0c3], /* Hangul Syllable */ + [0xc0c4, 0xc0c4], /* Hangul Syllable */ + [0xc0c5, 0xc0c5], /* Hangul Syllable */ + [0xc0c6, 0xc0c6], /* Hangul Syllable */ + [0xc0c7, 0xc0c7], /* Hangul Syllable */ + [0xc0c8, 0xc0c8], /* Hangul Syllable */ + [0xc0c9, 0xc0c9], /* Hangul Syllable */ + [0xc0ca, 0xc0ca], /* Hangul Syllable */ + [0xc0cb, 0xc0cb], /* Hangul Syllable */ + [0xc0cc, 0xc0cc], /* Hangul Syllable */ + [0xc0cd, 0xc0cd], /* Hangul Syllable */ + [0xc0ce, 0xc0ce], /* Hangul Syllable */ + [0xc0cf, 0xc0cf], /* Hangul Syllable */ + [0xc0d0, 0xc0d0], /* Hangul Syllable */ + [0xc0d1, 0xc0d1], /* Hangul Syllable */ + [0xc0d2, 0xc0d2], /* Hangul Syllable */ + [0xc0d3, 0xc0d3], /* Hangul Syllable */ + [0xc0d4, 0xc0d4], /* Hangul Syllable */ + [0xc0d5, 0xc0d5], /* Hangul Syllable */ + [0xc0d6, 0xc0d6], /* Hangul Syllable */ + [0xc0d7, 0xc0d7], /* Hangul Syllable */ + [0xc0d8, 0xc0d8], /* Hangul Syllable */ + [0xc0d9, 0xc0d9], /* Hangul Syllable */ + [0xc0da, 0xc0da], /* Hangul Syllable */ + [0xc0db, 0xc0db], /* Hangul Syllable */ + [0xc0dc, 0xc0dc], /* Hangul Syllable */ + [0xc0dd, 0xc0dd], /* Hangul Syllable */ + [0xc0de, 0xc0de], /* Hangul Syllable */ + [0xc0df, 0xc0df], /* Hangul Syllable */ + [0xc0e0, 0xc0e0], /* Hangul Syllable */ + [0xc0e1, 0xc0e1], /* Hangul Syllable */ + [0xc0e2, 0xc0e2], /* Hangul Syllable */ + [0xc0e3, 0xc0e3], /* Hangul Syllable */ + [0xc0e4, 0xc0e4], /* Hangul Syllable */ + [0xc0e5, 0xc0e5], /* Hangul Syllable */ + [0xc0e6, 0xc0e6], /* Hangul Syllable */ + [0xc0e7, 0xc0e7], /* Hangul Syllable */ + [0xc0e8, 0xc0e8], /* Hangul Syllable */ + [0xc0e9, 0xc0e9], /* Hangul Syllable */ + [0xc0ea, 0xc0ea], /* Hangul Syllable */ + [0xc0eb, 0xc0eb], /* Hangul Syllable */ + [0xc0ec, 0xc0ec], /* Hangul Syllable */ + [0xc0ed, 0xc0ed], /* Hangul Syllable */ + [0xc0ee, 0xc0ee], /* Hangul Syllable */ + [0xc0ef, 0xc0ef], /* Hangul Syllable */ + [0xc0f0, 0xc0f0], /* Hangul Syllable */ + [0xc0f1, 0xc0f1], /* Hangul Syllable */ + [0xc0f2, 0xc0f2], /* Hangul Syllable */ + [0xc0f3, 0xc0f3], /* Hangul Syllable */ + [0xc0f4, 0xc0f4], /* Hangul Syllable */ + [0xc0f5, 0xc0f5], /* Hangul Syllable */ + [0xc0f6, 0xc0f6], /* Hangul Syllable */ + [0xc0f7, 0xc0f7], /* Hangul Syllable */ + [0xc0f8, 0xc0f8], /* Hangul Syllable */ + [0xc0f9, 0xc0f9], /* Hangul Syllable */ + [0xc0fa, 0xc0fa], /* Hangul Syllable */ + [0xc0fb, 0xc0fb], /* Hangul Syllable */ + [0xc0fc, 0xc0fc], /* Hangul Syllable */ + [0xc0fd, 0xc0fd], /* Hangul Syllable */ + [0xc0fe, 0xc0fe], /* Hangul Syllable */ + [0xc0ff, 0xc0ff], /* Hangul Syllable */ + [0xc100, 0xc100], /* Hangul Syllable */ + [0xc101, 0xc101], /* Hangul Syllable */ + [0xc102, 0xc102], /* Hangul Syllable */ + [0xc103, 0xc103], /* Hangul Syllable */ + [0xc104, 0xc104], /* Hangul Syllable */ + [0xc105, 0xc105], /* Hangul Syllable */ + [0xc106, 0xc106], /* Hangul Syllable */ + [0xc107, 0xc107], /* Hangul Syllable */ + [0xc108, 0xc108], /* Hangul Syllable */ + [0xc109, 0xc109], /* Hangul Syllable */ + [0xc10a, 0xc10a], /* Hangul Syllable */ + [0xc10b, 0xc10b], /* Hangul Syllable */ + [0xc10c, 0xc10c], /* Hangul Syllable */ + [0xc10d, 0xc10d], /* Hangul Syllable */ + [0xc10e, 0xc10e], /* Hangul Syllable */ + [0xc10f, 0xc10f], /* Hangul Syllable */ + [0xc110, 0xc110], /* Hangul Syllable */ + [0xc111, 0xc111], /* Hangul Syllable */ + [0xc112, 0xc112], /* Hangul Syllable */ + [0xc113, 0xc113], /* Hangul Syllable */ + [0xc114, 0xc114], /* Hangul Syllable */ + [0xc115, 0xc115], /* Hangul Syllable */ + [0xc116, 0xc116], /* Hangul Syllable */ + [0xc117, 0xc117], /* Hangul Syllable */ + [0xc118, 0xc118], /* Hangul Syllable */ + [0xc119, 0xc119], /* Hangul Syllable */ + [0xc11a, 0xc11a], /* Hangul Syllable */ + [0xc11b, 0xc11b], /* Hangul Syllable */ + [0xc11c, 0xc11c], /* Hangul Syllable */ + [0xc11d, 0xc11d], /* Hangul Syllable */ + [0xc11e, 0xc11e], /* Hangul Syllable */ + [0xc11f, 0xc11f], /* Hangul Syllable */ + [0xc120, 0xc120], /* Hangul Syllable */ + [0xc121, 0xc121], /* Hangul Syllable */ + [0xc122, 0xc122], /* Hangul Syllable */ + [0xc123, 0xc123], /* Hangul Syllable */ + [0xc124, 0xc124], /* Hangul Syllable */ + [0xc125, 0xc125], /* Hangul Syllable */ + [0xc126, 0xc126], /* Hangul Syllable */ + [0xc127, 0xc127], /* Hangul Syllable */ + [0xc128, 0xc128], /* Hangul Syllable */ + [0xc129, 0xc129], /* Hangul Syllable */ + [0xc12a, 0xc12a], /* Hangul Syllable */ + [0xc12b, 0xc12b], /* Hangul Syllable */ + [0xc12c, 0xc12c], /* Hangul Syllable */ + [0xc12d, 0xc12d], /* Hangul Syllable */ + [0xc12e, 0xc12e], /* Hangul Syllable */ + [0xc12f, 0xc12f], /* Hangul Syllable */ + [0xc130, 0xc130], /* Hangul Syllable */ + [0xc131, 0xc131], /* Hangul Syllable */ + [0xc132, 0xc132], /* Hangul Syllable */ + [0xc133, 0xc133], /* Hangul Syllable */ + [0xc134, 0xc134], /* Hangul Syllable */ + [0xc135, 0xc135], /* Hangul Syllable */ + [0xc136, 0xc136], /* Hangul Syllable */ + [0xc137, 0xc137], /* Hangul Syllable */ + [0xc138, 0xc138], /* Hangul Syllable */ + [0xc139, 0xc139], /* Hangul Syllable */ + [0xc13a, 0xc13a], /* Hangul Syllable */ + [0xc13b, 0xc13b], /* Hangul Syllable */ + [0xc13c, 0xc13c], /* Hangul Syllable */ + [0xc13d, 0xc13d], /* Hangul Syllable */ + [0xc13e, 0xc13e], /* Hangul Syllable */ + [0xc13f, 0xc13f], /* Hangul Syllable */ + [0xc140, 0xc140], /* Hangul Syllable */ + [0xc141, 0xc141], /* Hangul Syllable */ + [0xc142, 0xc142], /* Hangul Syllable */ + [0xc143, 0xc143], /* Hangul Syllable */ + [0xc144, 0xc144], /* Hangul Syllable */ + [0xc145, 0xc145], /* Hangul Syllable */ + [0xc146, 0xc146], /* Hangul Syllable */ + [0xc147, 0xc147], /* Hangul Syllable */ + [0xc148, 0xc148], /* Hangul Syllable */ + [0xc149, 0xc149], /* Hangul Syllable */ + [0xc14a, 0xc14a], /* Hangul Syllable */ + [0xc14b, 0xc14b], /* Hangul Syllable */ + [0xc14c, 0xc14c], /* Hangul Syllable */ + [0xc14d, 0xc14d], /* Hangul Syllable */ + [0xc14e, 0xc14e], /* Hangul Syllable */ + [0xc14f, 0xc14f], /* Hangul Syllable */ + [0xc150, 0xc150], /* Hangul Syllable */ + [0xc151, 0xc151], /* Hangul Syllable */ + [0xc152, 0xc152], /* Hangul Syllable */ + [0xc153, 0xc153], /* Hangul Syllable */ + [0xc154, 0xc154], /* Hangul Syllable */ + [0xc155, 0xc155], /* Hangul Syllable */ + [0xc156, 0xc156], /* Hangul Syllable */ + [0xc157, 0xc157], /* Hangul Syllable */ + [0xc158, 0xc158], /* Hangul Syllable */ + [0xc159, 0xc159], /* Hangul Syllable */ + [0xc15a, 0xc15a], /* Hangul Syllable */ + [0xc15b, 0xc15b], /* Hangul Syllable */ + [0xc15c, 0xc15c], /* Hangul Syllable */ + [0xc15d, 0xc15d], /* Hangul Syllable */ + [0xc15e, 0xc15e], /* Hangul Syllable */ + [0xc15f, 0xc15f], /* Hangul Syllable */ + [0xc160, 0xc160], /* Hangul Syllable */ + [0xc161, 0xc161], /* Hangul Syllable */ + [0xc162, 0xc162], /* Hangul Syllable */ + [0xc163, 0xc163], /* Hangul Syllable */ + [0xc164, 0xc164], /* Hangul Syllable */ + [0xc165, 0xc165], /* Hangul Syllable */ + [0xc166, 0xc166], /* Hangul Syllable */ + [0xc167, 0xc167], /* Hangul Syllable */ + [0xc168, 0xc168], /* Hangul Syllable */ + [0xc169, 0xc169], /* Hangul Syllable */ + [0xc16a, 0xc16a], /* Hangul Syllable */ + [0xc16b, 0xc16b], /* Hangul Syllable */ + [0xc16c, 0xc16c], /* Hangul Syllable */ + [0xc16d, 0xc16d], /* Hangul Syllable */ + [0xc16e, 0xc16e], /* Hangul Syllable */ + [0xc16f, 0xc16f], /* Hangul Syllable */ + [0xc170, 0xc170], /* Hangul Syllable */ + [0xc171, 0xc171], /* Hangul Syllable */ + [0xc172, 0xc172], /* Hangul Syllable */ + [0xc173, 0xc173], /* Hangul Syllable */ + [0xc174, 0xc174], /* Hangul Syllable */ + [0xc175, 0xc175], /* Hangul Syllable */ + [0xc176, 0xc176], /* Hangul Syllable */ + [0xc177, 0xc177], /* Hangul Syllable */ + [0xc178, 0xc178], /* Hangul Syllable */ + [0xc179, 0xc179], /* Hangul Syllable */ + [0xc17a, 0xc17a], /* Hangul Syllable */ + [0xc17b, 0xc17b], /* Hangul Syllable */ + [0xc17c, 0xc17c], /* Hangul Syllable */ + [0xc17d, 0xc17d], /* Hangul Syllable */ + [0xc17e, 0xc17e], /* Hangul Syllable */ + [0xc17f, 0xc17f], /* Hangul Syllable */ + [0xc180, 0xc180], /* Hangul Syllable */ + [0xc181, 0xc181], /* Hangul Syllable */ + [0xc182, 0xc182], /* Hangul Syllable */ + [0xc183, 0xc183], /* Hangul Syllable */ + [0xc184, 0xc184], /* Hangul Syllable */ + [0xc185, 0xc185], /* Hangul Syllable */ + [0xc186, 0xc186], /* Hangul Syllable */ + [0xc187, 0xc187], /* Hangul Syllable */ + [0xc188, 0xc188], /* Hangul Syllable */ + [0xc189, 0xc189], /* Hangul Syllable */ + [0xc18a, 0xc18a], /* Hangul Syllable */ + [0xc18b, 0xc18b], /* Hangul Syllable */ + [0xc18c, 0xc18c], /* Hangul Syllable */ + [0xc18d, 0xc18d], /* Hangul Syllable */ + [0xc18e, 0xc18e], /* Hangul Syllable */ + [0xc18f, 0xc18f], /* Hangul Syllable */ + [0xc190, 0xc190], /* Hangul Syllable */ + [0xc191, 0xc191], /* Hangul Syllable */ + [0xc192, 0xc192], /* Hangul Syllable */ + [0xc193, 0xc193], /* Hangul Syllable */ + [0xc194, 0xc194], /* Hangul Syllable */ + [0xc195, 0xc195], /* Hangul Syllable */ + [0xc196, 0xc196], /* Hangul Syllable */ + [0xc197, 0xc197], /* Hangul Syllable */ + [0xc198, 0xc198], /* Hangul Syllable */ + [0xc199, 0xc199], /* Hangul Syllable */ + [0xc19a, 0xc19a], /* Hangul Syllable */ + [0xc19b, 0xc19b], /* Hangul Syllable */ + [0xc19c, 0xc19c], /* Hangul Syllable */ + [0xc19d, 0xc19d], /* Hangul Syllable */ + [0xc19e, 0xc19e], /* Hangul Syllable */ + [0xc19f, 0xc19f], /* Hangul Syllable */ + [0xc1a0, 0xc1a0], /* Hangul Syllable */ + [0xc1a1, 0xc1a1], /* Hangul Syllable */ + [0xc1a2, 0xc1a2], /* Hangul Syllable */ + [0xc1a3, 0xc1a3], /* Hangul Syllable */ + [0xc1a4, 0xc1a4], /* Hangul Syllable */ + [0xc1a5, 0xc1a5], /* Hangul Syllable */ + [0xc1a6, 0xc1a6], /* Hangul Syllable */ + [0xc1a7, 0xc1a7], /* Hangul Syllable */ + [0xc1a8, 0xc1a8], /* Hangul Syllable */ + [0xc1a9, 0xc1a9], /* Hangul Syllable */ + [0xc1aa, 0xc1aa], /* Hangul Syllable */ + [0xc1ab, 0xc1ab], /* Hangul Syllable */ + [0xc1ac, 0xc1ac], /* Hangul Syllable */ + [0xc1ad, 0xc1ad], /* Hangul Syllable */ + [0xc1ae, 0xc1ae], /* Hangul Syllable */ + [0xc1af, 0xc1af], /* Hangul Syllable */ + [0xc1b0, 0xc1b0], /* Hangul Syllable */ + [0xc1b1, 0xc1b1], /* Hangul Syllable */ + [0xc1b2, 0xc1b2], /* Hangul Syllable */ + [0xc1b3, 0xc1b3], /* Hangul Syllable */ + [0xc1b4, 0xc1b4], /* Hangul Syllable */ + [0xc1b5, 0xc1b5], /* Hangul Syllable */ + [0xc1b6, 0xc1b6], /* Hangul Syllable */ + [0xc1b7, 0xc1b7], /* Hangul Syllable */ + [0xc1b8, 0xc1b8], /* Hangul Syllable */ + [0xc1b9, 0xc1b9], /* Hangul Syllable */ + [0xc1ba, 0xc1ba], /* Hangul Syllable */ + [0xc1bb, 0xc1bb], /* Hangul Syllable */ + [0xc1bc, 0xc1bc], /* Hangul Syllable */ + [0xc1bd, 0xc1bd], /* Hangul Syllable */ + [0xc1be, 0xc1be], /* Hangul Syllable */ + [0xc1bf, 0xc1bf], /* Hangul Syllable */ + [0xc1c0, 0xc1c0], /* Hangul Syllable */ + [0xc1c1, 0xc1c1], /* Hangul Syllable */ + [0xc1c2, 0xc1c2], /* Hangul Syllable */ + [0xc1c3, 0xc1c3], /* Hangul Syllable */ + [0xc1c4, 0xc1c4], /* Hangul Syllable */ + [0xc1c5, 0xc1c5], /* Hangul Syllable */ + [0xc1c6, 0xc1c6], /* Hangul Syllable */ + [0xc1c7, 0xc1c7], /* Hangul Syllable */ + [0xc1c8, 0xc1c8], /* Hangul Syllable */ + [0xc1c9, 0xc1c9], /* Hangul Syllable */ + [0xc1ca, 0xc1ca], /* Hangul Syllable */ + [0xc1cb, 0xc1cb], /* Hangul Syllable */ + [0xc1cc, 0xc1cc], /* Hangul Syllable */ + [0xc1cd, 0xc1cd], /* Hangul Syllable */ + [0xc1ce, 0xc1ce], /* Hangul Syllable */ + [0xc1cf, 0xc1cf], /* Hangul Syllable */ + [0xc1d0, 0xc1d0], /* Hangul Syllable */ + [0xc1d1, 0xc1d1], /* Hangul Syllable */ + [0xc1d2, 0xc1d2], /* Hangul Syllable */ + [0xc1d3, 0xc1d3], /* Hangul Syllable */ + [0xc1d4, 0xc1d4], /* Hangul Syllable */ + [0xc1d5, 0xc1d5], /* Hangul Syllable */ + [0xc1d6, 0xc1d6], /* Hangul Syllable */ + [0xc1d7, 0xc1d7], /* Hangul Syllable */ + [0xc1d8, 0xc1d8], /* Hangul Syllable */ + [0xc1d9, 0xc1d9], /* Hangul Syllable */ + [0xc1da, 0xc1da], /* Hangul Syllable */ + [0xc1db, 0xc1db], /* Hangul Syllable */ + [0xc1dc, 0xc1dc], /* Hangul Syllable */ + [0xc1dd, 0xc1dd], /* Hangul Syllable */ + [0xc1de, 0xc1de], /* Hangul Syllable */ + [0xc1df, 0xc1df], /* Hangul Syllable */ + [0xc1e0, 0xc1e0], /* Hangul Syllable */ + [0xc1e1, 0xc1e1], /* Hangul Syllable */ + [0xc1e2, 0xc1e2], /* Hangul Syllable */ + [0xc1e3, 0xc1e3], /* Hangul Syllable */ + [0xc1e4, 0xc1e4], /* Hangul Syllable */ + [0xc1e5, 0xc1e5], /* Hangul Syllable */ + [0xc1e6, 0xc1e6], /* Hangul Syllable */ + [0xc1e7, 0xc1e7], /* Hangul Syllable */ + [0xc1e8, 0xc1e8], /* Hangul Syllable */ + [0xc1e9, 0xc1e9], /* Hangul Syllable */ + [0xc1ea, 0xc1ea], /* Hangul Syllable */ + [0xc1eb, 0xc1eb], /* Hangul Syllable */ + [0xc1ec, 0xc1ec], /* Hangul Syllable */ + [0xc1ed, 0xc1ed], /* Hangul Syllable */ + [0xc1ee, 0xc1ee], /* Hangul Syllable */ + [0xc1ef, 0xc1ef], /* Hangul Syllable */ + [0xc1f0, 0xc1f0], /* Hangul Syllable */ + [0xc1f1, 0xc1f1], /* Hangul Syllable */ + [0xc1f2, 0xc1f2], /* Hangul Syllable */ + [0xc1f3, 0xc1f3], /* Hangul Syllable */ + [0xc1f4, 0xc1f4], /* Hangul Syllable */ + [0xc1f5, 0xc1f5], /* Hangul Syllable */ + [0xc1f6, 0xc1f6], /* Hangul Syllable */ + [0xc1f7, 0xc1f7], /* Hangul Syllable */ + [0xc1f8, 0xc1f8], /* Hangul Syllable */ + [0xc1f9, 0xc1f9], /* Hangul Syllable */ + [0xc1fa, 0xc1fa], /* Hangul Syllable */ + [0xc1fb, 0xc1fb], /* Hangul Syllable */ + [0xc1fc, 0xc1fc], /* Hangul Syllable */ + [0xc1fd, 0xc1fd], /* Hangul Syllable */ + [0xc1fe, 0xc1fe], /* Hangul Syllable */ + [0xc1ff, 0xc1ff], /* Hangul Syllable */ + [0xc200, 0xc200], /* Hangul Syllable */ + [0xc201, 0xc201], /* Hangul Syllable */ + [0xc202, 0xc202], /* Hangul Syllable */ + [0xc203, 0xc203], /* Hangul Syllable */ + [0xc204, 0xc204], /* Hangul Syllable */ + [0xc205, 0xc205], /* Hangul Syllable */ + [0xc206, 0xc206], /* Hangul Syllable */ + [0xc207, 0xc207], /* Hangul Syllable */ + [0xc208, 0xc208], /* Hangul Syllable */ + [0xc209, 0xc209], /* Hangul Syllable */ + [0xc20a, 0xc20a], /* Hangul Syllable */ + [0xc20b, 0xc20b], /* Hangul Syllable */ + [0xc20c, 0xc20c], /* Hangul Syllable */ + [0xc20d, 0xc20d], /* Hangul Syllable */ + [0xc20e, 0xc20e], /* Hangul Syllable */ + [0xc20f, 0xc20f], /* Hangul Syllable */ + [0xc210, 0xc210], /* Hangul Syllable */ + [0xc211, 0xc211], /* Hangul Syllable */ + [0xc212, 0xc212], /* Hangul Syllable */ + [0xc213, 0xc213], /* Hangul Syllable */ + [0xc214, 0xc214], /* Hangul Syllable */ + [0xc215, 0xc215], /* Hangul Syllable */ + [0xc216, 0xc216], /* Hangul Syllable */ + [0xc217, 0xc217], /* Hangul Syllable */ + [0xc218, 0xc218], /* Hangul Syllable */ + [0xc219, 0xc219], /* Hangul Syllable */ + [0xc21a, 0xc21a], /* Hangul Syllable */ + [0xc21b, 0xc21b], /* Hangul Syllable */ + [0xc21c, 0xc21c], /* Hangul Syllable */ + [0xc21d, 0xc21d], /* Hangul Syllable */ + [0xc21e, 0xc21e], /* Hangul Syllable */ + [0xc21f, 0xc21f], /* Hangul Syllable */ + [0xc220, 0xc220], /* Hangul Syllable */ + [0xc221, 0xc221], /* Hangul Syllable */ + [0xc222, 0xc222], /* Hangul Syllable */ + [0xc223, 0xc223], /* Hangul Syllable */ + [0xc224, 0xc224], /* Hangul Syllable */ + [0xc225, 0xc225], /* Hangul Syllable */ + [0xc226, 0xc226], /* Hangul Syllable */ + [0xc227, 0xc227], /* Hangul Syllable */ + [0xc228, 0xc228], /* Hangul Syllable */ + [0xc229, 0xc229], /* Hangul Syllable */ + [0xc22a, 0xc22a], /* Hangul Syllable */ + [0xc22b, 0xc22b], /* Hangul Syllable */ + [0xc22c, 0xc22c], /* Hangul Syllable */ + [0xc22d, 0xc22d], /* Hangul Syllable */ + [0xc22e, 0xc22e], /* Hangul Syllable */ + [0xc22f, 0xc22f], /* Hangul Syllable */ + [0xc230, 0xc230], /* Hangul Syllable */ + [0xc231, 0xc231], /* Hangul Syllable */ + [0xc232, 0xc232], /* Hangul Syllable */ + [0xc233, 0xc233], /* Hangul Syllable */ + [0xc234, 0xc234], /* Hangul Syllable */ + [0xc235, 0xc235], /* Hangul Syllable */ + [0xc236, 0xc236], /* Hangul Syllable */ + [0xc237, 0xc237], /* Hangul Syllable */ + [0xc238, 0xc238], /* Hangul Syllable */ + [0xc239, 0xc239], /* Hangul Syllable */ + [0xc23a, 0xc23a], /* Hangul Syllable */ + [0xc23b, 0xc23b], /* Hangul Syllable */ + [0xc23c, 0xc23c], /* Hangul Syllable */ + [0xc23d, 0xc23d], /* Hangul Syllable */ + [0xc23e, 0xc23e], /* Hangul Syllable */ + [0xc23f, 0xc23f], /* Hangul Syllable */ + [0xc240, 0xc240], /* Hangul Syllable */ + [0xc241, 0xc241], /* Hangul Syllable */ + [0xc242, 0xc242], /* Hangul Syllable */ + [0xc243, 0xc243], /* Hangul Syllable */ + [0xc244, 0xc244], /* Hangul Syllable */ + [0xc245, 0xc245], /* Hangul Syllable */ + [0xc246, 0xc246], /* Hangul Syllable */ + [0xc247, 0xc247], /* Hangul Syllable */ + [0xc248, 0xc248], /* Hangul Syllable */ + [0xc249, 0xc249], /* Hangul Syllable */ + [0xc24a, 0xc24a], /* Hangul Syllable */ + [0xc24b, 0xc24b], /* Hangul Syllable */ + [0xc24c, 0xc24c], /* Hangul Syllable */ + [0xc24d, 0xc24d], /* Hangul Syllable */ + [0xc24e, 0xc24e], /* Hangul Syllable */ + [0xc24f, 0xc24f], /* Hangul Syllable */ + [0xc250, 0xc250], /* Hangul Syllable */ + [0xc251, 0xc251], /* Hangul Syllable */ + [0xc252, 0xc252], /* Hangul Syllable */ + [0xc253, 0xc253], /* Hangul Syllable */ + [0xc254, 0xc254], /* Hangul Syllable */ + [0xc255, 0xc255], /* Hangul Syllable */ + [0xc256, 0xc256], /* Hangul Syllable */ + [0xc257, 0xc257], /* Hangul Syllable */ + [0xc258, 0xc258], /* Hangul Syllable */ + [0xc259, 0xc259], /* Hangul Syllable */ + [0xc25a, 0xc25a], /* Hangul Syllable */ + [0xc25b, 0xc25b], /* Hangul Syllable */ + [0xc25c, 0xc25c], /* Hangul Syllable */ + [0xc25d, 0xc25d], /* Hangul Syllable */ + [0xc25e, 0xc25e], /* Hangul Syllable */ + [0xc25f, 0xc25f], /* Hangul Syllable */ + [0xc260, 0xc260], /* Hangul Syllable */ + [0xc261, 0xc261], /* Hangul Syllable */ + [0xc262, 0xc262], /* Hangul Syllable */ + [0xc263, 0xc263], /* Hangul Syllable */ + [0xc264, 0xc264], /* Hangul Syllable */ + [0xc265, 0xc265], /* Hangul Syllable */ + [0xc266, 0xc266], /* Hangul Syllable */ + [0xc267, 0xc267], /* Hangul Syllable */ + [0xc268, 0xc268], /* Hangul Syllable */ + [0xc269, 0xc269], /* Hangul Syllable */ + [0xc26a, 0xc26a], /* Hangul Syllable */ + [0xc26b, 0xc26b], /* Hangul Syllable */ + [0xc26c, 0xc26c], /* Hangul Syllable */ + [0xc26d, 0xc26d], /* Hangul Syllable */ + [0xc26e, 0xc26e], /* Hangul Syllable */ + [0xc26f, 0xc26f], /* Hangul Syllable */ + [0xc270, 0xc270], /* Hangul Syllable */ + [0xc271, 0xc271], /* Hangul Syllable */ + [0xc272, 0xc272], /* Hangul Syllable */ + [0xc273, 0xc273], /* Hangul Syllable */ + [0xc274, 0xc274], /* Hangul Syllable */ + [0xc275, 0xc275], /* Hangul Syllable */ + [0xc276, 0xc276], /* Hangul Syllable */ + [0xc277, 0xc277], /* Hangul Syllable */ + [0xc278, 0xc278], /* Hangul Syllable */ + [0xc279, 0xc279], /* Hangul Syllable */ + [0xc27a, 0xc27a], /* Hangul Syllable */ + [0xc27b, 0xc27b], /* Hangul Syllable */ + [0xc27c, 0xc27c], /* Hangul Syllable */ + [0xc27d, 0xc27d], /* Hangul Syllable */ + [0xc27e, 0xc27e], /* Hangul Syllable */ + [0xc27f, 0xc27f], /* Hangul Syllable */ + [0xc280, 0xc280], /* Hangul Syllable */ + [0xc281, 0xc281], /* Hangul Syllable */ + [0xc282, 0xc282], /* Hangul Syllable */ + [0xc283, 0xc283], /* Hangul Syllable */ + [0xc284, 0xc284], /* Hangul Syllable */ + [0xc285, 0xc285], /* Hangul Syllable */ + [0xc286, 0xc286], /* Hangul Syllable */ + [0xc287, 0xc287], /* Hangul Syllable */ + [0xc288, 0xc288], /* Hangul Syllable */ + [0xc289, 0xc289], /* Hangul Syllable */ + [0xc28a, 0xc28a], /* Hangul Syllable */ + [0xc28b, 0xc28b], /* Hangul Syllable */ + [0xc28c, 0xc28c], /* Hangul Syllable */ + [0xc28d, 0xc28d], /* Hangul Syllable */ + [0xc28e, 0xc28e], /* Hangul Syllable */ + [0xc28f, 0xc28f], /* Hangul Syllable */ + [0xc290, 0xc290], /* Hangul Syllable */ + [0xc291, 0xc291], /* Hangul Syllable */ + [0xc292, 0xc292], /* Hangul Syllable */ + [0xc293, 0xc293], /* Hangul Syllable */ + [0xc294, 0xc294], /* Hangul Syllable */ + [0xc295, 0xc295], /* Hangul Syllable */ + [0xc296, 0xc296], /* Hangul Syllable */ + [0xc297, 0xc297], /* Hangul Syllable */ + [0xc298, 0xc298], /* Hangul Syllable */ + [0xc299, 0xc299], /* Hangul Syllable */ + [0xc29a, 0xc29a], /* Hangul Syllable */ + [0xc29b, 0xc29b], /* Hangul Syllable */ + [0xc29c, 0xc29c], /* Hangul Syllable */ + [0xc29d, 0xc29d], /* Hangul Syllable */ + [0xc29e, 0xc29e], /* Hangul Syllable */ + [0xc29f, 0xc29f], /* Hangul Syllable */ + [0xc2a0, 0xc2a0], /* Hangul Syllable */ + [0xc2a1, 0xc2a1], /* Hangul Syllable */ + [0xc2a2, 0xc2a2], /* Hangul Syllable */ + [0xc2a3, 0xc2a3], /* Hangul Syllable */ + [0xc2a4, 0xc2a4], /* Hangul Syllable */ + [0xc2a5, 0xc2a5], /* Hangul Syllable */ + [0xc2a6, 0xc2a6], /* Hangul Syllable */ + [0xc2a7, 0xc2a7], /* Hangul Syllable */ + [0xc2a8, 0xc2a8], /* Hangul Syllable */ + [0xc2a9, 0xc2a9], /* Hangul Syllable */ + [0xc2aa, 0xc2aa], /* Hangul Syllable */ + [0xc2ab, 0xc2ab], /* Hangul Syllable */ + [0xc2ac, 0xc2ac], /* Hangul Syllable */ + [0xc2ad, 0xc2ad], /* Hangul Syllable */ + [0xc2ae, 0xc2ae], /* Hangul Syllable */ + [0xc2af, 0xc2af], /* Hangul Syllable */ + [0xc2b0, 0xc2b0], /* Hangul Syllable */ + [0xc2b1, 0xc2b1], /* Hangul Syllable */ + [0xc2b2, 0xc2b2], /* Hangul Syllable */ + [0xc2b3, 0xc2b3], /* Hangul Syllable */ + [0xc2b4, 0xc2b4], /* Hangul Syllable */ + [0xc2b5, 0xc2b5], /* Hangul Syllable */ + [0xc2b6, 0xc2b6], /* Hangul Syllable */ + [0xc2b7, 0xc2b7], /* Hangul Syllable */ + [0xc2b8, 0xc2b8], /* Hangul Syllable */ + [0xc2b9, 0xc2b9], /* Hangul Syllable */ + [0xc2ba, 0xc2ba], /* Hangul Syllable */ + [0xc2bb, 0xc2bb], /* Hangul Syllable */ + [0xc2bc, 0xc2bc], /* Hangul Syllable */ + [0xc2bd, 0xc2bd], /* Hangul Syllable */ + [0xc2be, 0xc2be], /* Hangul Syllable */ + [0xc2bf, 0xc2bf], /* Hangul Syllable */ + [0xc2c0, 0xc2c0], /* Hangul Syllable */ + [0xc2c1, 0xc2c1], /* Hangul Syllable */ + [0xc2c2, 0xc2c2], /* Hangul Syllable */ + [0xc2c3, 0xc2c3], /* Hangul Syllable */ + [0xc2c4, 0xc2c4], /* Hangul Syllable */ + [0xc2c5, 0xc2c5], /* Hangul Syllable */ + [0xc2c6, 0xc2c6], /* Hangul Syllable */ + [0xc2c7, 0xc2c7], /* Hangul Syllable */ + [0xc2c8, 0xc2c8], /* Hangul Syllable */ + [0xc2c9, 0xc2c9], /* Hangul Syllable */ + [0xc2ca, 0xc2ca], /* Hangul Syllable */ + [0xc2cb, 0xc2cb], /* Hangul Syllable */ + [0xc2cc, 0xc2cc], /* Hangul Syllable */ + [0xc2cd, 0xc2cd], /* Hangul Syllable */ + [0xc2ce, 0xc2ce], /* Hangul Syllable */ + [0xc2cf, 0xc2cf], /* Hangul Syllable */ + [0xc2d0, 0xc2d0], /* Hangul Syllable */ + [0xc2d1, 0xc2d1], /* Hangul Syllable */ + [0xc2d2, 0xc2d2], /* Hangul Syllable */ + [0xc2d3, 0xc2d3], /* Hangul Syllable */ + [0xc2d4, 0xc2d4], /* Hangul Syllable */ + [0xc2d5, 0xc2d5], /* Hangul Syllable */ + [0xc2d6, 0xc2d6], /* Hangul Syllable */ + [0xc2d7, 0xc2d7], /* Hangul Syllable */ + [0xc2d8, 0xc2d8], /* Hangul Syllable */ + [0xc2d9, 0xc2d9], /* Hangul Syllable */ + [0xc2da, 0xc2da], /* Hangul Syllable */ + [0xc2db, 0xc2db], /* Hangul Syllable */ + [0xc2dc, 0xc2dc], /* Hangul Syllable */ + [0xc2dd, 0xc2dd], /* Hangul Syllable */ + [0xc2de, 0xc2de], /* Hangul Syllable */ + [0xc2df, 0xc2df], /* Hangul Syllable */ + [0xc2e0, 0xc2e0], /* Hangul Syllable */ + [0xc2e1, 0xc2e1], /* Hangul Syllable */ + [0xc2e2, 0xc2e2], /* Hangul Syllable */ + [0xc2e3, 0xc2e3], /* Hangul Syllable */ + [0xc2e4, 0xc2e4], /* Hangul Syllable */ + [0xc2e5, 0xc2e5], /* Hangul Syllable */ + [0xc2e6, 0xc2e6], /* Hangul Syllable */ + [0xc2e7, 0xc2e7], /* Hangul Syllable */ + [0xc2e8, 0xc2e8], /* Hangul Syllable */ + [0xc2e9, 0xc2e9], /* Hangul Syllable */ + [0xc2ea, 0xc2ea], /* Hangul Syllable */ + [0xc2eb, 0xc2eb], /* Hangul Syllable */ + [0xc2ec, 0xc2ec], /* Hangul Syllable */ + [0xc2ed, 0xc2ed], /* Hangul Syllable */ + [0xc2ee, 0xc2ee], /* Hangul Syllable */ + [0xc2ef, 0xc2ef], /* Hangul Syllable */ + [0xc2f0, 0xc2f0], /* Hangul Syllable */ + [0xc2f1, 0xc2f1], /* Hangul Syllable */ + [0xc2f2, 0xc2f2], /* Hangul Syllable */ + [0xc2f3, 0xc2f3], /* Hangul Syllable */ + [0xc2f4, 0xc2f4], /* Hangul Syllable */ + [0xc2f5, 0xc2f5], /* Hangul Syllable */ + [0xc2f6, 0xc2f6], /* Hangul Syllable */ + [0xc2f7, 0xc2f7], /* Hangul Syllable */ + [0xc2f8, 0xc2f8], /* Hangul Syllable */ + [0xc2f9, 0xc2f9], /* Hangul Syllable */ + [0xc2fa, 0xc2fa], /* Hangul Syllable */ + [0xc2fb, 0xc2fb], /* Hangul Syllable */ + [0xc2fc, 0xc2fc], /* Hangul Syllable */ + [0xc2fd, 0xc2fd], /* Hangul Syllable */ + [0xc2fe, 0xc2fe], /* Hangul Syllable */ + [0xc2ff, 0xc2ff], /* Hangul Syllable */ + [0xc300, 0xc300], /* Hangul Syllable */ + [0xc301, 0xc301], /* Hangul Syllable */ + [0xc302, 0xc302], /* Hangul Syllable */ + [0xc303, 0xc303], /* Hangul Syllable */ + [0xc304, 0xc304], /* Hangul Syllable */ + [0xc305, 0xc305], /* Hangul Syllable */ + [0xc306, 0xc306], /* Hangul Syllable */ + [0xc307, 0xc307], /* Hangul Syllable */ + [0xc308, 0xc308], /* Hangul Syllable */ + [0xc309, 0xc309], /* Hangul Syllable */ + [0xc30a, 0xc30a], /* Hangul Syllable */ + [0xc30b, 0xc30b], /* Hangul Syllable */ + [0xc30c, 0xc30c], /* Hangul Syllable */ + [0xc30d, 0xc30d], /* Hangul Syllable */ + [0xc30e, 0xc30e], /* Hangul Syllable */ + [0xc30f, 0xc30f], /* Hangul Syllable */ + [0xc310, 0xc310], /* Hangul Syllable */ + [0xc311, 0xc311], /* Hangul Syllable */ + [0xc312, 0xc312], /* Hangul Syllable */ + [0xc313, 0xc313], /* Hangul Syllable */ + [0xc314, 0xc314], /* Hangul Syllable */ + [0xc315, 0xc315], /* Hangul Syllable */ + [0xc316, 0xc316], /* Hangul Syllable */ + [0xc317, 0xc317], /* Hangul Syllable */ + [0xc318, 0xc318], /* Hangul Syllable */ + [0xc319, 0xc319], /* Hangul Syllable */ + [0xc31a, 0xc31a], /* Hangul Syllable */ + [0xc31b, 0xc31b], /* Hangul Syllable */ + [0xc31c, 0xc31c], /* Hangul Syllable */ + [0xc31d, 0xc31d], /* Hangul Syllable */ + [0xc31e, 0xc31e], /* Hangul Syllable */ + [0xc31f, 0xc31f], /* Hangul Syllable */ + [0xc320, 0xc320], /* Hangul Syllable */ + [0xc321, 0xc321], /* Hangul Syllable */ + [0xc322, 0xc322], /* Hangul Syllable */ + [0xc323, 0xc323], /* Hangul Syllable */ + [0xc324, 0xc324], /* Hangul Syllable */ + [0xc325, 0xc325], /* Hangul Syllable */ + [0xc326, 0xc326], /* Hangul Syllable */ + [0xc327, 0xc327], /* Hangul Syllable */ + [0xc328, 0xc328], /* Hangul Syllable */ + [0xc329, 0xc329], /* Hangul Syllable */ + [0xc32a, 0xc32a], /* Hangul Syllable */ + [0xc32b, 0xc32b], /* Hangul Syllable */ + [0xc32c, 0xc32c], /* Hangul Syllable */ + [0xc32d, 0xc32d], /* Hangul Syllable */ + [0xc32e, 0xc32e], /* Hangul Syllable */ + [0xc32f, 0xc32f], /* Hangul Syllable */ + [0xc330, 0xc330], /* Hangul Syllable */ + [0xc331, 0xc331], /* Hangul Syllable */ + [0xc332, 0xc332], /* Hangul Syllable */ + [0xc333, 0xc333], /* Hangul Syllable */ + [0xc334, 0xc334], /* Hangul Syllable */ + [0xc335, 0xc335], /* Hangul Syllable */ + [0xc336, 0xc336], /* Hangul Syllable */ + [0xc337, 0xc337], /* Hangul Syllable */ + [0xc338, 0xc338], /* Hangul Syllable */ + [0xc339, 0xc339], /* Hangul Syllable */ + [0xc33a, 0xc33a], /* Hangul Syllable */ + [0xc33b, 0xc33b], /* Hangul Syllable */ + [0xc33c, 0xc33c], /* Hangul Syllable */ + [0xc33d, 0xc33d], /* Hangul Syllable */ + [0xc33e, 0xc33e], /* Hangul Syllable */ + [0xc33f, 0xc33f], /* Hangul Syllable */ + [0xc340, 0xc340], /* Hangul Syllable */ + [0xc341, 0xc341], /* Hangul Syllable */ + [0xc342, 0xc342], /* Hangul Syllable */ + [0xc343, 0xc343], /* Hangul Syllable */ + [0xc344, 0xc344], /* Hangul Syllable */ + [0xc345, 0xc345], /* Hangul Syllable */ + [0xc346, 0xc346], /* Hangul Syllable */ + [0xc347, 0xc347], /* Hangul Syllable */ + [0xc348, 0xc348], /* Hangul Syllable */ + [0xc349, 0xc349], /* Hangul Syllable */ + [0xc34a, 0xc34a], /* Hangul Syllable */ + [0xc34b, 0xc34b], /* Hangul Syllable */ + [0xc34c, 0xc34c], /* Hangul Syllable */ + [0xc34d, 0xc34d], /* Hangul Syllable */ + [0xc34e, 0xc34e], /* Hangul Syllable */ + [0xc34f, 0xc34f], /* Hangul Syllable */ + [0xc350, 0xc350], /* Hangul Syllable */ + [0xc351, 0xc351], /* Hangul Syllable */ + [0xc352, 0xc352], /* Hangul Syllable */ + [0xc353, 0xc353], /* Hangul Syllable */ + [0xc354, 0xc354], /* Hangul Syllable */ + [0xc355, 0xc355], /* Hangul Syllable */ + [0xc356, 0xc356], /* Hangul Syllable */ + [0xc357, 0xc357], /* Hangul Syllable */ + [0xc358, 0xc358], /* Hangul Syllable */ + [0xc359, 0xc359], /* Hangul Syllable */ + [0xc35a, 0xc35a], /* Hangul Syllable */ + [0xc35b, 0xc35b], /* Hangul Syllable */ + [0xc35c, 0xc35c], /* Hangul Syllable */ + [0xc35d, 0xc35d], /* Hangul Syllable */ + [0xc35e, 0xc35e], /* Hangul Syllable */ + [0xc35f, 0xc35f], /* Hangul Syllable */ + [0xc360, 0xc360], /* Hangul Syllable */ + [0xc361, 0xc361], /* Hangul Syllable */ + [0xc362, 0xc362], /* Hangul Syllable */ + [0xc363, 0xc363], /* Hangul Syllable */ + [0xc364, 0xc364], /* Hangul Syllable */ + [0xc365, 0xc365], /* Hangul Syllable */ + [0xc366, 0xc366], /* Hangul Syllable */ + [0xc367, 0xc367], /* Hangul Syllable */ + [0xc368, 0xc368], /* Hangul Syllable */ + [0xc369, 0xc369], /* Hangul Syllable */ + [0xc36a, 0xc36a], /* Hangul Syllable */ + [0xc36b, 0xc36b], /* Hangul Syllable */ + [0xc36c, 0xc36c], /* Hangul Syllable */ + [0xc36d, 0xc36d], /* Hangul Syllable */ + [0xc36e, 0xc36e], /* Hangul Syllable */ + [0xc36f, 0xc36f], /* Hangul Syllable */ + [0xc370, 0xc370], /* Hangul Syllable */ + [0xc371, 0xc371], /* Hangul Syllable */ + [0xc372, 0xc372], /* Hangul Syllable */ + [0xc373, 0xc373], /* Hangul Syllable */ + [0xc374, 0xc374], /* Hangul Syllable */ + [0xc375, 0xc375], /* Hangul Syllable */ + [0xc376, 0xc376], /* Hangul Syllable */ + [0xc377, 0xc377], /* Hangul Syllable */ + [0xc378, 0xc378], /* Hangul Syllable */ + [0xc379, 0xc379], /* Hangul Syllable */ + [0xc37a, 0xc37a], /* Hangul Syllable */ + [0xc37b, 0xc37b], /* Hangul Syllable */ + [0xc37c, 0xc37c], /* Hangul Syllable */ + [0xc37d, 0xc37d], /* Hangul Syllable */ + [0xc37e, 0xc37e], /* Hangul Syllable */ + [0xc37f, 0xc37f], /* Hangul Syllable */ + [0xc380, 0xc380], /* Hangul Syllable */ + [0xc381, 0xc381], /* Hangul Syllable */ + [0xc382, 0xc382], /* Hangul Syllable */ + [0xc383, 0xc383], /* Hangul Syllable */ + [0xc384, 0xc384], /* Hangul Syllable */ + [0xc385, 0xc385], /* Hangul Syllable */ + [0xc386, 0xc386], /* Hangul Syllable */ + [0xc387, 0xc387], /* Hangul Syllable */ + [0xc388, 0xc388], /* Hangul Syllable */ + [0xc389, 0xc389], /* Hangul Syllable */ + [0xc38a, 0xc38a], /* Hangul Syllable */ + [0xc38b, 0xc38b], /* Hangul Syllable */ + [0xc38c, 0xc38c], /* Hangul Syllable */ + [0xc38d, 0xc38d], /* Hangul Syllable */ + [0xc38e, 0xc38e], /* Hangul Syllable */ + [0xc38f, 0xc38f], /* Hangul Syllable */ + [0xc390, 0xc390], /* Hangul Syllable */ + [0xc391, 0xc391], /* Hangul Syllable */ + [0xc392, 0xc392], /* Hangul Syllable */ + [0xc393, 0xc393], /* Hangul Syllable */ + [0xc394, 0xc394], /* Hangul Syllable */ + [0xc395, 0xc395], /* Hangul Syllable */ + [0xc396, 0xc396], /* Hangul Syllable */ + [0xc397, 0xc397], /* Hangul Syllable */ + [0xc398, 0xc398], /* Hangul Syllable */ + [0xc399, 0xc399], /* Hangul Syllable */ + [0xc39a, 0xc39a], /* Hangul Syllable */ + [0xc39b, 0xc39b], /* Hangul Syllable */ + [0xc39c, 0xc39c], /* Hangul Syllable */ + [0xc39d, 0xc39d], /* Hangul Syllable */ + [0xc39e, 0xc39e], /* Hangul Syllable */ + [0xc39f, 0xc39f], /* Hangul Syllable */ + [0xc3a0, 0xc3a0], /* Hangul Syllable */ + [0xc3a1, 0xc3a1], /* Hangul Syllable */ + [0xc3a2, 0xc3a2], /* Hangul Syllable */ + [0xc3a3, 0xc3a3], /* Hangul Syllable */ + [0xc3a4, 0xc3a4], /* Hangul Syllable */ + [0xc3a5, 0xc3a5], /* Hangul Syllable */ + [0xc3a6, 0xc3a6], /* Hangul Syllable */ + [0xc3a7, 0xc3a7], /* Hangul Syllable */ + [0xc3a8, 0xc3a8], /* Hangul Syllable */ + [0xc3a9, 0xc3a9], /* Hangul Syllable */ + [0xc3aa, 0xc3aa], /* Hangul Syllable */ + [0xc3ab, 0xc3ab], /* Hangul Syllable */ + [0xc3ac, 0xc3ac], /* Hangul Syllable */ + [0xc3ad, 0xc3ad], /* Hangul Syllable */ + [0xc3ae, 0xc3ae], /* Hangul Syllable */ + [0xc3af, 0xc3af], /* Hangul Syllable */ + [0xc3b0, 0xc3b0], /* Hangul Syllable */ + [0xc3b1, 0xc3b1], /* Hangul Syllable */ + [0xc3b2, 0xc3b2], /* Hangul Syllable */ + [0xc3b3, 0xc3b3], /* Hangul Syllable */ + [0xc3b4, 0xc3b4], /* Hangul Syllable */ + [0xc3b5, 0xc3b5], /* Hangul Syllable */ + [0xc3b6, 0xc3b6], /* Hangul Syllable */ + [0xc3b7, 0xc3b7], /* Hangul Syllable */ + [0xc3b8, 0xc3b8], /* Hangul Syllable */ + [0xc3b9, 0xc3b9], /* Hangul Syllable */ + [0xc3ba, 0xc3ba], /* Hangul Syllable */ + [0xc3bb, 0xc3bb], /* Hangul Syllable */ + [0xc3bc, 0xc3bc], /* Hangul Syllable */ + [0xc3bd, 0xc3bd], /* Hangul Syllable */ + [0xc3be, 0xc3be], /* Hangul Syllable */ + [0xc3bf, 0xc3bf], /* Hangul Syllable */ + [0xc3c0, 0xc3c0], /* Hangul Syllable */ + [0xc3c1, 0xc3c1], /* Hangul Syllable */ + [0xc3c2, 0xc3c2], /* Hangul Syllable */ + [0xc3c3, 0xc3c3], /* Hangul Syllable */ + [0xc3c4, 0xc3c4], /* Hangul Syllable */ + [0xc3c5, 0xc3c5], /* Hangul Syllable */ + [0xc3c6, 0xc3c6], /* Hangul Syllable */ + [0xc3c7, 0xc3c7], /* Hangul Syllable */ + [0xc3c8, 0xc3c8], /* Hangul Syllable */ + [0xc3c9, 0xc3c9], /* Hangul Syllable */ + [0xc3ca, 0xc3ca], /* Hangul Syllable */ + [0xc3cb, 0xc3cb], /* Hangul Syllable */ + [0xc3cc, 0xc3cc], /* Hangul Syllable */ + [0xc3cd, 0xc3cd], /* Hangul Syllable */ + [0xc3ce, 0xc3ce], /* Hangul Syllable */ + [0xc3cf, 0xc3cf], /* Hangul Syllable */ + [0xc3d0, 0xc3d0], /* Hangul Syllable */ + [0xc3d1, 0xc3d1], /* Hangul Syllable */ + [0xc3d2, 0xc3d2], /* Hangul Syllable */ + [0xc3d3, 0xc3d3], /* Hangul Syllable */ + [0xc3d4, 0xc3d4], /* Hangul Syllable */ + [0xc3d5, 0xc3d5], /* Hangul Syllable */ + [0xc3d6, 0xc3d6], /* Hangul Syllable */ + [0xc3d7, 0xc3d7], /* Hangul Syllable */ + [0xc3d8, 0xc3d8], /* Hangul Syllable */ + [0xc3d9, 0xc3d9], /* Hangul Syllable */ + [0xc3da, 0xc3da], /* Hangul Syllable */ + [0xc3db, 0xc3db], /* Hangul Syllable */ + [0xc3dc, 0xc3dc], /* Hangul Syllable */ + [0xc3dd, 0xc3dd], /* Hangul Syllable */ + [0xc3de, 0xc3de], /* Hangul Syllable */ + [0xc3df, 0xc3df], /* Hangul Syllable */ + [0xc3e0, 0xc3e0], /* Hangul Syllable */ + [0xc3e1, 0xc3e1], /* Hangul Syllable */ + [0xc3e2, 0xc3e2], /* Hangul Syllable */ + [0xc3e3, 0xc3e3], /* Hangul Syllable */ + [0xc3e4, 0xc3e4], /* Hangul Syllable */ + [0xc3e5, 0xc3e5], /* Hangul Syllable */ + [0xc3e6, 0xc3e6], /* Hangul Syllable */ + [0xc3e7, 0xc3e7], /* Hangul Syllable */ + [0xc3e8, 0xc3e8], /* Hangul Syllable */ + [0xc3e9, 0xc3e9], /* Hangul Syllable */ + [0xc3ea, 0xc3ea], /* Hangul Syllable */ + [0xc3eb, 0xc3eb], /* Hangul Syllable */ + [0xc3ec, 0xc3ec], /* Hangul Syllable */ + [0xc3ed, 0xc3ed], /* Hangul Syllable */ + [0xc3ee, 0xc3ee], /* Hangul Syllable */ + [0xc3ef, 0xc3ef], /* Hangul Syllable */ + [0xc3f0, 0xc3f0], /* Hangul Syllable */ + [0xc3f1, 0xc3f1], /* Hangul Syllable */ + [0xc3f2, 0xc3f2], /* Hangul Syllable */ + [0xc3f3, 0xc3f3], /* Hangul Syllable */ + [0xc3f4, 0xc3f4], /* Hangul Syllable */ + [0xc3f5, 0xc3f5], /* Hangul Syllable */ + [0xc3f6, 0xc3f6], /* Hangul Syllable */ + [0xc3f7, 0xc3f7], /* Hangul Syllable */ + [0xc3f8, 0xc3f8], /* Hangul Syllable */ + [0xc3f9, 0xc3f9], /* Hangul Syllable */ + [0xc3fa, 0xc3fa], /* Hangul Syllable */ + [0xc3fb, 0xc3fb], /* Hangul Syllable */ + [0xc3fc, 0xc3fc], /* Hangul Syllable */ + [0xc3fd, 0xc3fd], /* Hangul Syllable */ + [0xc3fe, 0xc3fe], /* Hangul Syllable */ + [0xc3ff, 0xc3ff], /* Hangul Syllable */ + [0xc400, 0xc400], /* Hangul Syllable */ + [0xc401, 0xc401], /* Hangul Syllable */ + [0xc402, 0xc402], /* Hangul Syllable */ + [0xc403, 0xc403], /* Hangul Syllable */ + [0xc404, 0xc404], /* Hangul Syllable */ + [0xc405, 0xc405], /* Hangul Syllable */ + [0xc406, 0xc406], /* Hangul Syllable */ + [0xc407, 0xc407], /* Hangul Syllable */ + [0xc408, 0xc408], /* Hangul Syllable */ + [0xc409, 0xc409], /* Hangul Syllable */ + [0xc40a, 0xc40a], /* Hangul Syllable */ + [0xc40b, 0xc40b], /* Hangul Syllable */ + [0xc40c, 0xc40c], /* Hangul Syllable */ + [0xc40d, 0xc40d], /* Hangul Syllable */ + [0xc40e, 0xc40e], /* Hangul Syllable */ + [0xc40f, 0xc40f], /* Hangul Syllable */ + [0xc410, 0xc410], /* Hangul Syllable */ + [0xc411, 0xc411], /* Hangul Syllable */ + [0xc412, 0xc412], /* Hangul Syllable */ + [0xc413, 0xc413], /* Hangul Syllable */ + [0xc414, 0xc414], /* Hangul Syllable */ + [0xc415, 0xc415], /* Hangul Syllable */ + [0xc416, 0xc416], /* Hangul Syllable */ + [0xc417, 0xc417], /* Hangul Syllable */ + [0xc418, 0xc418], /* Hangul Syllable */ + [0xc419, 0xc419], /* Hangul Syllable */ + [0xc41a, 0xc41a], /* Hangul Syllable */ + [0xc41b, 0xc41b], /* Hangul Syllable */ + [0xc41c, 0xc41c], /* Hangul Syllable */ + [0xc41d, 0xc41d], /* Hangul Syllable */ + [0xc41e, 0xc41e], /* Hangul Syllable */ + [0xc41f, 0xc41f], /* Hangul Syllable */ + [0xc420, 0xc420], /* Hangul Syllable */ + [0xc421, 0xc421], /* Hangul Syllable */ + [0xc422, 0xc422], /* Hangul Syllable */ + [0xc423, 0xc423], /* Hangul Syllable */ + [0xc424, 0xc424], /* Hangul Syllable */ + [0xc425, 0xc425], /* Hangul Syllable */ + [0xc426, 0xc426], /* Hangul Syllable */ + [0xc427, 0xc427], /* Hangul Syllable */ + [0xc428, 0xc428], /* Hangul Syllable */ + [0xc429, 0xc429], /* Hangul Syllable */ + [0xc42a, 0xc42a], /* Hangul Syllable */ + [0xc42b, 0xc42b], /* Hangul Syllable */ + [0xc42c, 0xc42c], /* Hangul Syllable */ + [0xc42d, 0xc42d], /* Hangul Syllable */ + [0xc42e, 0xc42e], /* Hangul Syllable */ + [0xc42f, 0xc42f], /* Hangul Syllable */ + [0xc430, 0xc430], /* Hangul Syllable */ + [0xc431, 0xc431], /* Hangul Syllable */ + [0xc432, 0xc432], /* Hangul Syllable */ + [0xc433, 0xc433], /* Hangul Syllable */ + [0xc434, 0xc434], /* Hangul Syllable */ + [0xc435, 0xc435], /* Hangul Syllable */ + [0xc436, 0xc436], /* Hangul Syllable */ + [0xc437, 0xc437], /* Hangul Syllable */ + [0xc438, 0xc438], /* Hangul Syllable */ + [0xc439, 0xc439], /* Hangul Syllable */ + [0xc43a, 0xc43a], /* Hangul Syllable */ + [0xc43b, 0xc43b], /* Hangul Syllable */ + [0xc43c, 0xc43c], /* Hangul Syllable */ + [0xc43d, 0xc43d], /* Hangul Syllable */ + [0xc43e, 0xc43e], /* Hangul Syllable */ + [0xc43f, 0xc43f], /* Hangul Syllable */ + [0xc440, 0xc440], /* Hangul Syllable */ + [0xc441, 0xc441], /* Hangul Syllable */ + [0xc442, 0xc442], /* Hangul Syllable */ + [0xc443, 0xc443], /* Hangul Syllable */ + [0xc444, 0xc444], /* Hangul Syllable */ + [0xc445, 0xc445], /* Hangul Syllable */ + [0xc446, 0xc446], /* Hangul Syllable */ + [0xc447, 0xc447], /* Hangul Syllable */ + [0xc448, 0xc448], /* Hangul Syllable */ + [0xc449, 0xc449], /* Hangul Syllable */ + [0xc44a, 0xc44a], /* Hangul Syllable */ + [0xc44b, 0xc44b], /* Hangul Syllable */ + [0xc44c, 0xc44c], /* Hangul Syllable */ + [0xc44d, 0xc44d], /* Hangul Syllable */ + [0xc44e, 0xc44e], /* Hangul Syllable */ + [0xc44f, 0xc44f], /* Hangul Syllable */ + [0xc450, 0xc450], /* Hangul Syllable */ + [0xc451, 0xc451], /* Hangul Syllable */ + [0xc452, 0xc452], /* Hangul Syllable */ + [0xc453, 0xc453], /* Hangul Syllable */ + [0xc454, 0xc454], /* Hangul Syllable */ + [0xc455, 0xc455], /* Hangul Syllable */ + [0xc456, 0xc456], /* Hangul Syllable */ + [0xc457, 0xc457], /* Hangul Syllable */ + [0xc458, 0xc458], /* Hangul Syllable */ + [0xc459, 0xc459], /* Hangul Syllable */ + [0xc45a, 0xc45a], /* Hangul Syllable */ + [0xc45b, 0xc45b], /* Hangul Syllable */ + [0xc45c, 0xc45c], /* Hangul Syllable */ + [0xc45d, 0xc45d], /* Hangul Syllable */ + [0xc45e, 0xc45e], /* Hangul Syllable */ + [0xc45f, 0xc45f], /* Hangul Syllable */ + [0xc460, 0xc460], /* Hangul Syllable */ + [0xc461, 0xc461], /* Hangul Syllable */ + [0xc462, 0xc462], /* Hangul Syllable */ + [0xc463, 0xc463], /* Hangul Syllable */ + [0xc464, 0xc464], /* Hangul Syllable */ + [0xc465, 0xc465], /* Hangul Syllable */ + [0xc466, 0xc466], /* Hangul Syllable */ + [0xc467, 0xc467], /* Hangul Syllable */ + [0xc468, 0xc468], /* Hangul Syllable */ + [0xc469, 0xc469], /* Hangul Syllable */ + [0xc46a, 0xc46a], /* Hangul Syllable */ + [0xc46b, 0xc46b], /* Hangul Syllable */ + [0xc46c, 0xc46c], /* Hangul Syllable */ + [0xc46d, 0xc46d], /* Hangul Syllable */ + [0xc46e, 0xc46e], /* Hangul Syllable */ + [0xc46f, 0xc46f], /* Hangul Syllable */ + [0xc470, 0xc470], /* Hangul Syllable */ + [0xc471, 0xc471], /* Hangul Syllable */ + [0xc472, 0xc472], /* Hangul Syllable */ + [0xc473, 0xc473], /* Hangul Syllable */ + [0xc474, 0xc474], /* Hangul Syllable */ + [0xc475, 0xc475], /* Hangul Syllable */ + [0xc476, 0xc476], /* Hangul Syllable */ + [0xc477, 0xc477], /* Hangul Syllable */ + [0xc478, 0xc478], /* Hangul Syllable */ + [0xc479, 0xc479], /* Hangul Syllable */ + [0xc47a, 0xc47a], /* Hangul Syllable */ + [0xc47b, 0xc47b], /* Hangul Syllable */ + [0xc47c, 0xc47c], /* Hangul Syllable */ + [0xc47d, 0xc47d], /* Hangul Syllable */ + [0xc47e, 0xc47e], /* Hangul Syllable */ + [0xc47f, 0xc47f], /* Hangul Syllable */ + [0xc480, 0xc480], /* Hangul Syllable */ + [0xc481, 0xc481], /* Hangul Syllable */ + [0xc482, 0xc482], /* Hangul Syllable */ + [0xc483, 0xc483], /* Hangul Syllable */ + [0xc484, 0xc484], /* Hangul Syllable */ + [0xc485, 0xc485], /* Hangul Syllable */ + [0xc486, 0xc486], /* Hangul Syllable */ + [0xc487, 0xc487], /* Hangul Syllable */ + [0xc488, 0xc488], /* Hangul Syllable */ + [0xc489, 0xc489], /* Hangul Syllable */ + [0xc48a, 0xc48a], /* Hangul Syllable */ + [0xc48b, 0xc48b], /* Hangul Syllable */ + [0xc48c, 0xc48c], /* Hangul Syllable */ + [0xc48d, 0xc48d], /* Hangul Syllable */ + [0xc48e, 0xc48e], /* Hangul Syllable */ + [0xc48f, 0xc48f], /* Hangul Syllable */ + [0xc490, 0xc490], /* Hangul Syllable */ + [0xc491, 0xc491], /* Hangul Syllable */ + [0xc492, 0xc492], /* Hangul Syllable */ + [0xc493, 0xc493], /* Hangul Syllable */ + [0xc494, 0xc494], /* Hangul Syllable */ + [0xc495, 0xc495], /* Hangul Syllable */ + [0xc496, 0xc496], /* Hangul Syllable */ + [0xc497, 0xc497], /* Hangul Syllable */ + [0xc498, 0xc498], /* Hangul Syllable */ + [0xc499, 0xc499], /* Hangul Syllable */ + [0xc49a, 0xc49a], /* Hangul Syllable */ + [0xc49b, 0xc49b], /* Hangul Syllable */ + [0xc49c, 0xc49c], /* Hangul Syllable */ + [0xc49d, 0xc49d], /* Hangul Syllable */ + [0xc49e, 0xc49e], /* Hangul Syllable */ + [0xc49f, 0xc49f], /* Hangul Syllable */ + [0xc4a0, 0xc4a0], /* Hangul Syllable */ + [0xc4a1, 0xc4a1], /* Hangul Syllable */ + [0xc4a2, 0xc4a2], /* Hangul Syllable */ + [0xc4a3, 0xc4a3], /* Hangul Syllable */ + [0xc4a4, 0xc4a4], /* Hangul Syllable */ + [0xc4a5, 0xc4a5], /* Hangul Syllable */ + [0xc4a6, 0xc4a6], /* Hangul Syllable */ + [0xc4a7, 0xc4a7], /* Hangul Syllable */ + [0xc4a8, 0xc4a8], /* Hangul Syllable */ + [0xc4a9, 0xc4a9], /* Hangul Syllable */ + [0xc4aa, 0xc4aa], /* Hangul Syllable */ + [0xc4ab, 0xc4ab], /* Hangul Syllable */ + [0xc4ac, 0xc4ac], /* Hangul Syllable */ + [0xc4ad, 0xc4ad], /* Hangul Syllable */ + [0xc4ae, 0xc4ae], /* Hangul Syllable */ + [0xc4af, 0xc4af], /* Hangul Syllable */ + [0xc4b0, 0xc4b0], /* Hangul Syllable */ + [0xc4b1, 0xc4b1], /* Hangul Syllable */ + [0xc4b2, 0xc4b2], /* Hangul Syllable */ + [0xc4b3, 0xc4b3], /* Hangul Syllable */ + [0xc4b4, 0xc4b4], /* Hangul Syllable */ + [0xc4b5, 0xc4b5], /* Hangul Syllable */ + [0xc4b6, 0xc4b6], /* Hangul Syllable */ + [0xc4b7, 0xc4b7], /* Hangul Syllable */ + [0xc4b8, 0xc4b8], /* Hangul Syllable */ + [0xc4b9, 0xc4b9], /* Hangul Syllable */ + [0xc4ba, 0xc4ba], /* Hangul Syllable */ + [0xc4bb, 0xc4bb], /* Hangul Syllable */ + [0xc4bc, 0xc4bc], /* Hangul Syllable */ + [0xc4bd, 0xc4bd], /* Hangul Syllable */ + [0xc4be, 0xc4be], /* Hangul Syllable */ + [0xc4bf, 0xc4bf], /* Hangul Syllable */ + [0xc4c0, 0xc4c0], /* Hangul Syllable */ + [0xc4c1, 0xc4c1], /* Hangul Syllable */ + [0xc4c2, 0xc4c2], /* Hangul Syllable */ + [0xc4c3, 0xc4c3], /* Hangul Syllable */ + [0xc4c4, 0xc4c4], /* Hangul Syllable */ + [0xc4c5, 0xc4c5], /* Hangul Syllable */ + [0xc4c6, 0xc4c6], /* Hangul Syllable */ + [0xc4c7, 0xc4c7], /* Hangul Syllable */ + [0xc4c8, 0xc4c8], /* Hangul Syllable */ + [0xc4c9, 0xc4c9], /* Hangul Syllable */ + [0xc4ca, 0xc4ca], /* Hangul Syllable */ + [0xc4cb, 0xc4cb], /* Hangul Syllable */ + [0xc4cc, 0xc4cc], /* Hangul Syllable */ + [0xc4cd, 0xc4cd], /* Hangul Syllable */ + [0xc4ce, 0xc4ce], /* Hangul Syllable */ + [0xc4cf, 0xc4cf], /* Hangul Syllable */ + [0xc4d0, 0xc4d0], /* Hangul Syllable */ + [0xc4d1, 0xc4d1], /* Hangul Syllable */ + [0xc4d2, 0xc4d2], /* Hangul Syllable */ + [0xc4d3, 0xc4d3], /* Hangul Syllable */ + [0xc4d4, 0xc4d4], /* Hangul Syllable */ + [0xc4d5, 0xc4d5], /* Hangul Syllable */ + [0xc4d6, 0xc4d6], /* Hangul Syllable */ + [0xc4d7, 0xc4d7], /* Hangul Syllable */ + [0xc4d8, 0xc4d8], /* Hangul Syllable */ + [0xc4d9, 0xc4d9], /* Hangul Syllable */ + [0xc4da, 0xc4da], /* Hangul Syllable */ + [0xc4db, 0xc4db], /* Hangul Syllable */ + [0xc4dc, 0xc4dc], /* Hangul Syllable */ + [0xc4dd, 0xc4dd], /* Hangul Syllable */ + [0xc4de, 0xc4de], /* Hangul Syllable */ + [0xc4df, 0xc4df], /* Hangul Syllable */ + [0xc4e0, 0xc4e0], /* Hangul Syllable */ + [0xc4e1, 0xc4e1], /* Hangul Syllable */ + [0xc4e2, 0xc4e2], /* Hangul Syllable */ + [0xc4e3, 0xc4e3], /* Hangul Syllable */ + [0xc4e4, 0xc4e4], /* Hangul Syllable */ + [0xc4e5, 0xc4e5], /* Hangul Syllable */ + [0xc4e6, 0xc4e6], /* Hangul Syllable */ + [0xc4e7, 0xc4e7], /* Hangul Syllable */ + [0xc4e8, 0xc4e8], /* Hangul Syllable */ + [0xc4e9, 0xc4e9], /* Hangul Syllable */ + [0xc4ea, 0xc4ea], /* Hangul Syllable */ + [0xc4eb, 0xc4eb], /* Hangul Syllable */ + [0xc4ec, 0xc4ec], /* Hangul Syllable */ + [0xc4ed, 0xc4ed], /* Hangul Syllable */ + [0xc4ee, 0xc4ee], /* Hangul Syllable */ + [0xc4ef, 0xc4ef], /* Hangul Syllable */ + [0xc4f0, 0xc4f0], /* Hangul Syllable */ + [0xc4f1, 0xc4f1], /* Hangul Syllable */ + [0xc4f2, 0xc4f2], /* Hangul Syllable */ + [0xc4f3, 0xc4f3], /* Hangul Syllable */ + [0xc4f4, 0xc4f4], /* Hangul Syllable */ + [0xc4f5, 0xc4f5], /* Hangul Syllable */ + [0xc4f6, 0xc4f6], /* Hangul Syllable */ + [0xc4f7, 0xc4f7], /* Hangul Syllable */ + [0xc4f8, 0xc4f8], /* Hangul Syllable */ + [0xc4f9, 0xc4f9], /* Hangul Syllable */ + [0xc4fa, 0xc4fa], /* Hangul Syllable */ + [0xc4fb, 0xc4fb], /* Hangul Syllable */ + [0xc4fc, 0xc4fc], /* Hangul Syllable */ + [0xc4fd, 0xc4fd], /* Hangul Syllable */ + [0xc4fe, 0xc4fe], /* Hangul Syllable */ + [0xc4ff, 0xc4ff], /* Hangul Syllable */ + [0xc500, 0xc500], /* Hangul Syllable */ + [0xc501, 0xc501], /* Hangul Syllable */ + [0xc502, 0xc502], /* Hangul Syllable */ + [0xc503, 0xc503], /* Hangul Syllable */ + [0xc504, 0xc504], /* Hangul Syllable */ + [0xc505, 0xc505], /* Hangul Syllable */ + [0xc506, 0xc506], /* Hangul Syllable */ + [0xc507, 0xc507], /* Hangul Syllable */ + [0xc508, 0xc508], /* Hangul Syllable */ + [0xc509, 0xc509], /* Hangul Syllable */ + [0xc50a, 0xc50a], /* Hangul Syllable */ + [0xc50b, 0xc50b], /* Hangul Syllable */ + [0xc50c, 0xc50c], /* Hangul Syllable */ + [0xc50d, 0xc50d], /* Hangul Syllable */ + [0xc50e, 0xc50e], /* Hangul Syllable */ + [0xc50f, 0xc50f], /* Hangul Syllable */ + [0xc510, 0xc510], /* Hangul Syllable */ + [0xc511, 0xc511], /* Hangul Syllable */ + [0xc512, 0xc512], /* Hangul Syllable */ + [0xc513, 0xc513], /* Hangul Syllable */ + [0xc514, 0xc514], /* Hangul Syllable */ + [0xc515, 0xc515], /* Hangul Syllable */ + [0xc516, 0xc516], /* Hangul Syllable */ + [0xc517, 0xc517], /* Hangul Syllable */ + [0xc518, 0xc518], /* Hangul Syllable */ + [0xc519, 0xc519], /* Hangul Syllable */ + [0xc51a, 0xc51a], /* Hangul Syllable */ + [0xc51b, 0xc51b], /* Hangul Syllable */ + [0xc51c, 0xc51c], /* Hangul Syllable */ + [0xc51d, 0xc51d], /* Hangul Syllable */ + [0xc51e, 0xc51e], /* Hangul Syllable */ + [0xc51f, 0xc51f], /* Hangul Syllable */ + [0xc520, 0xc520], /* Hangul Syllable */ + [0xc521, 0xc521], /* Hangul Syllable */ + [0xc522, 0xc522], /* Hangul Syllable */ + [0xc523, 0xc523], /* Hangul Syllable */ + [0xc524, 0xc524], /* Hangul Syllable */ + [0xc525, 0xc525], /* Hangul Syllable */ + [0xc526, 0xc526], /* Hangul Syllable */ + [0xc527, 0xc527], /* Hangul Syllable */ + [0xc528, 0xc528], /* Hangul Syllable */ + [0xc529, 0xc529], /* Hangul Syllable */ + [0xc52a, 0xc52a], /* Hangul Syllable */ + [0xc52b, 0xc52b], /* Hangul Syllable */ + [0xc52c, 0xc52c], /* Hangul Syllable */ + [0xc52d, 0xc52d], /* Hangul Syllable */ + [0xc52e, 0xc52e], /* Hangul Syllable */ + [0xc52f, 0xc52f], /* Hangul Syllable */ + [0xc530, 0xc530], /* Hangul Syllable */ + [0xc531, 0xc531], /* Hangul Syllable */ + [0xc532, 0xc532], /* Hangul Syllable */ + [0xc533, 0xc533], /* Hangul Syllable */ + [0xc534, 0xc534], /* Hangul Syllable */ + [0xc535, 0xc535], /* Hangul Syllable */ + [0xc536, 0xc536], /* Hangul Syllable */ + [0xc537, 0xc537], /* Hangul Syllable */ + [0xc538, 0xc538], /* Hangul Syllable */ + [0xc539, 0xc539], /* Hangul Syllable */ + [0xc53a, 0xc53a], /* Hangul Syllable */ + [0xc53b, 0xc53b], /* Hangul Syllable */ + [0xc53c, 0xc53c], /* Hangul Syllable */ + [0xc53d, 0xc53d], /* Hangul Syllable */ + [0xc53e, 0xc53e], /* Hangul Syllable */ + [0xc53f, 0xc53f], /* Hangul Syllable */ + [0xc540, 0xc540], /* Hangul Syllable */ + [0xc541, 0xc541], /* Hangul Syllable */ + [0xc542, 0xc542], /* Hangul Syllable */ + [0xc543, 0xc543], /* Hangul Syllable */ + [0xc544, 0xc544], /* Hangul Syllable */ + [0xc545, 0xc545], /* Hangul Syllable */ + [0xc546, 0xc546], /* Hangul Syllable */ + [0xc547, 0xc547], /* Hangul Syllable */ + [0xc548, 0xc548], /* Hangul Syllable */ + [0xc549, 0xc549], /* Hangul Syllable */ + [0xc54a, 0xc54a], /* Hangul Syllable */ + [0xc54b, 0xc54b], /* Hangul Syllable */ + [0xc54c, 0xc54c], /* Hangul Syllable */ + [0xc54d, 0xc54d], /* Hangul Syllable */ + [0xc54e, 0xc54e], /* Hangul Syllable */ + [0xc54f, 0xc54f], /* Hangul Syllable */ + [0xc550, 0xc550], /* Hangul Syllable */ + [0xc551, 0xc551], /* Hangul Syllable */ + [0xc552, 0xc552], /* Hangul Syllable */ + [0xc553, 0xc553], /* Hangul Syllable */ + [0xc554, 0xc554], /* Hangul Syllable */ + [0xc555, 0xc555], /* Hangul Syllable */ + [0xc556, 0xc556], /* Hangul Syllable */ + [0xc557, 0xc557], /* Hangul Syllable */ + [0xc558, 0xc558], /* Hangul Syllable */ + [0xc559, 0xc559], /* Hangul Syllable */ + [0xc55a, 0xc55a], /* Hangul Syllable */ + [0xc55b, 0xc55b], /* Hangul Syllable */ + [0xc55c, 0xc55c], /* Hangul Syllable */ + [0xc55d, 0xc55d], /* Hangul Syllable */ + [0xc55e, 0xc55e], /* Hangul Syllable */ + [0xc55f, 0xc55f], /* Hangul Syllable */ + [0xc560, 0xc560], /* Hangul Syllable */ + [0xc561, 0xc561], /* Hangul Syllable */ + [0xc562, 0xc562], /* Hangul Syllable */ + [0xc563, 0xc563], /* Hangul Syllable */ + [0xc564, 0xc564], /* Hangul Syllable */ + [0xc565, 0xc565], /* Hangul Syllable */ + [0xc566, 0xc566], /* Hangul Syllable */ + [0xc567, 0xc567], /* Hangul Syllable */ + [0xc568, 0xc568], /* Hangul Syllable */ + [0xc569, 0xc569], /* Hangul Syllable */ + [0xc56a, 0xc56a], /* Hangul Syllable */ + [0xc56b, 0xc56b], /* Hangul Syllable */ + [0xc56c, 0xc56c], /* Hangul Syllable */ + [0xc56d, 0xc56d], /* Hangul Syllable */ + [0xc56e, 0xc56e], /* Hangul Syllable */ + [0xc56f, 0xc56f], /* Hangul Syllable */ + [0xc570, 0xc570], /* Hangul Syllable */ + [0xc571, 0xc571], /* Hangul Syllable */ + [0xc572, 0xc572], /* Hangul Syllable */ + [0xc573, 0xc573], /* Hangul Syllable */ + [0xc574, 0xc574], /* Hangul Syllable */ + [0xc575, 0xc575], /* Hangul Syllable */ + [0xc576, 0xc576], /* Hangul Syllable */ + [0xc577, 0xc577], /* Hangul Syllable */ + [0xc578, 0xc578], /* Hangul Syllable */ + [0xc579, 0xc579], /* Hangul Syllable */ + [0xc57a, 0xc57a], /* Hangul Syllable */ + [0xc57b, 0xc57b], /* Hangul Syllable */ + [0xc57c, 0xc57c], /* Hangul Syllable */ + [0xc57d, 0xc57d], /* Hangul Syllable */ + [0xc57e, 0xc57e], /* Hangul Syllable */ + [0xc57f, 0xc57f], /* Hangul Syllable */ + [0xc580, 0xc580], /* Hangul Syllable */ + [0xc581, 0xc581], /* Hangul Syllable */ + [0xc582, 0xc582], /* Hangul Syllable */ + [0xc583, 0xc583], /* Hangul Syllable */ + [0xc584, 0xc584], /* Hangul Syllable */ + [0xc585, 0xc585], /* Hangul Syllable */ + [0xc586, 0xc586], /* Hangul Syllable */ + [0xc587, 0xc587], /* Hangul Syllable */ + [0xc588, 0xc588], /* Hangul Syllable */ + [0xc589, 0xc589], /* Hangul Syllable */ + [0xc58a, 0xc58a], /* Hangul Syllable */ + [0xc58b, 0xc58b], /* Hangul Syllable */ + [0xc58c, 0xc58c], /* Hangul Syllable */ + [0xc58d, 0xc58d], /* Hangul Syllable */ + [0xc58e, 0xc58e], /* Hangul Syllable */ + [0xc58f, 0xc58f], /* Hangul Syllable */ + [0xc590, 0xc590], /* Hangul Syllable */ + [0xc591, 0xc591], /* Hangul Syllable */ + [0xc592, 0xc592], /* Hangul Syllable */ + [0xc593, 0xc593], /* Hangul Syllable */ + [0xc594, 0xc594], /* Hangul Syllable */ + [0xc595, 0xc595], /* Hangul Syllable */ + [0xc596, 0xc596], /* Hangul Syllable */ + [0xc597, 0xc597], /* Hangul Syllable */ + [0xc598, 0xc598], /* Hangul Syllable */ + [0xc599, 0xc599], /* Hangul Syllable */ + [0xc59a, 0xc59a], /* Hangul Syllable */ + [0xc59b, 0xc59b], /* Hangul Syllable */ + [0xc59c, 0xc59c], /* Hangul Syllable */ + [0xc59d, 0xc59d], /* Hangul Syllable */ + [0xc59e, 0xc59e], /* Hangul Syllable */ + [0xc59f, 0xc59f], /* Hangul Syllable */ + [0xc5a0, 0xc5a0], /* Hangul Syllable */ + [0xc5a1, 0xc5a1], /* Hangul Syllable */ + [0xc5a2, 0xc5a2], /* Hangul Syllable */ + [0xc5a3, 0xc5a3], /* Hangul Syllable */ + [0xc5a4, 0xc5a4], /* Hangul Syllable */ + [0xc5a5, 0xc5a5], /* Hangul Syllable */ + [0xc5a6, 0xc5a6], /* Hangul Syllable */ + [0xc5a7, 0xc5a7], /* Hangul Syllable */ + [0xc5a8, 0xc5a8], /* Hangul Syllable */ + [0xc5a9, 0xc5a9], /* Hangul Syllable */ + [0xc5aa, 0xc5aa], /* Hangul Syllable */ + [0xc5ab, 0xc5ab], /* Hangul Syllable */ + [0xc5ac, 0xc5ac], /* Hangul Syllable */ + [0xc5ad, 0xc5ad], /* Hangul Syllable */ + [0xc5ae, 0xc5ae], /* Hangul Syllable */ + [0xc5af, 0xc5af], /* Hangul Syllable */ + [0xc5b0, 0xc5b0], /* Hangul Syllable */ + [0xc5b1, 0xc5b1], /* Hangul Syllable */ + [0xc5b2, 0xc5b2], /* Hangul Syllable */ + [0xc5b3, 0xc5b3], /* Hangul Syllable */ + [0xc5b4, 0xc5b4], /* Hangul Syllable */ + [0xc5b5, 0xc5b5], /* Hangul Syllable */ + [0xc5b6, 0xc5b6], /* Hangul Syllable */ + [0xc5b7, 0xc5b7], /* Hangul Syllable */ + [0xc5b8, 0xc5b8], /* Hangul Syllable */ + [0xc5b9, 0xc5b9], /* Hangul Syllable */ + [0xc5ba, 0xc5ba], /* Hangul Syllable */ + [0xc5bb, 0xc5bb], /* Hangul Syllable */ + [0xc5bc, 0xc5bc], /* Hangul Syllable */ + [0xc5bd, 0xc5bd], /* Hangul Syllable */ + [0xc5be, 0xc5be], /* Hangul Syllable */ + [0xc5bf, 0xc5bf], /* Hangul Syllable */ + [0xc5c0, 0xc5c0], /* Hangul Syllable */ + [0xc5c1, 0xc5c1], /* Hangul Syllable */ + [0xc5c2, 0xc5c2], /* Hangul Syllable */ + [0xc5c3, 0xc5c3], /* Hangul Syllable */ + [0xc5c4, 0xc5c4], /* Hangul Syllable */ + [0xc5c5, 0xc5c5], /* Hangul Syllable */ + [0xc5c6, 0xc5c6], /* Hangul Syllable */ + [0xc5c7, 0xc5c7], /* Hangul Syllable */ + [0xc5c8, 0xc5c8], /* Hangul Syllable */ + [0xc5c9, 0xc5c9], /* Hangul Syllable */ + [0xc5ca, 0xc5ca], /* Hangul Syllable */ + [0xc5cb, 0xc5cb], /* Hangul Syllable */ + [0xc5cc, 0xc5cc], /* Hangul Syllable */ + [0xc5cd, 0xc5cd], /* Hangul Syllable */ + [0xc5ce, 0xc5ce], /* Hangul Syllable */ + [0xc5cf, 0xc5cf], /* Hangul Syllable */ + [0xc5d0, 0xc5d0], /* Hangul Syllable */ + [0xc5d1, 0xc5d1], /* Hangul Syllable */ + [0xc5d2, 0xc5d2], /* Hangul Syllable */ + [0xc5d3, 0xc5d3], /* Hangul Syllable */ + [0xc5d4, 0xc5d4], /* Hangul Syllable */ + [0xc5d5, 0xc5d5], /* Hangul Syllable */ + [0xc5d6, 0xc5d6], /* Hangul Syllable */ + [0xc5d7, 0xc5d7], /* Hangul Syllable */ + [0xc5d8, 0xc5d8], /* Hangul Syllable */ + [0xc5d9, 0xc5d9], /* Hangul Syllable */ + [0xc5da, 0xc5da], /* Hangul Syllable */ + [0xc5db, 0xc5db], /* Hangul Syllable */ + [0xc5dc, 0xc5dc], /* Hangul Syllable */ + [0xc5dd, 0xc5dd], /* Hangul Syllable */ + [0xc5de, 0xc5de], /* Hangul Syllable */ + [0xc5df, 0xc5df], /* Hangul Syllable */ + [0xc5e0, 0xc5e0], /* Hangul Syllable */ + [0xc5e1, 0xc5e1], /* Hangul Syllable */ + [0xc5e2, 0xc5e2], /* Hangul Syllable */ + [0xc5e3, 0xc5e3], /* Hangul Syllable */ + [0xc5e4, 0xc5e4], /* Hangul Syllable */ + [0xc5e5, 0xc5e5], /* Hangul Syllable */ + [0xc5e6, 0xc5e6], /* Hangul Syllable */ + [0xc5e7, 0xc5e7], /* Hangul Syllable */ + [0xc5e8, 0xc5e8], /* Hangul Syllable */ + [0xc5e9, 0xc5e9], /* Hangul Syllable */ + [0xc5ea, 0xc5ea], /* Hangul Syllable */ + [0xc5eb, 0xc5eb], /* Hangul Syllable */ + [0xc5ec, 0xc5ec], /* Hangul Syllable */ + [0xc5ed, 0xc5ed], /* Hangul Syllable */ + [0xc5ee, 0xc5ee], /* Hangul Syllable */ + [0xc5ef, 0xc5ef], /* Hangul Syllable */ + [0xc5f0, 0xc5f0], /* Hangul Syllable */ + [0xc5f1, 0xc5f1], /* Hangul Syllable */ + [0xc5f2, 0xc5f2], /* Hangul Syllable */ + [0xc5f3, 0xc5f3], /* Hangul Syllable */ + [0xc5f4, 0xc5f4], /* Hangul Syllable */ + [0xc5f5, 0xc5f5], /* Hangul Syllable */ + [0xc5f6, 0xc5f6], /* Hangul Syllable */ + [0xc5f7, 0xc5f7], /* Hangul Syllable */ + [0xc5f8, 0xc5f8], /* Hangul Syllable */ + [0xc5f9, 0xc5f9], /* Hangul Syllable */ + [0xc5fa, 0xc5fa], /* Hangul Syllable */ + [0xc5fb, 0xc5fb], /* Hangul Syllable */ + [0xc5fc, 0xc5fc], /* Hangul Syllable */ + [0xc5fd, 0xc5fd], /* Hangul Syllable */ + [0xc5fe, 0xc5fe], /* Hangul Syllable */ + [0xc5ff, 0xc5ff], /* Hangul Syllable */ + [0xc600, 0xc600], /* Hangul Syllable */ + [0xc601, 0xc601], /* Hangul Syllable */ + [0xc602, 0xc602], /* Hangul Syllable */ + [0xc603, 0xc603], /* Hangul Syllable */ + [0xc604, 0xc604], /* Hangul Syllable */ + [0xc605, 0xc605], /* Hangul Syllable */ + [0xc606, 0xc606], /* Hangul Syllable */ + [0xc607, 0xc607], /* Hangul Syllable */ + [0xc608, 0xc608], /* Hangul Syllable */ + [0xc609, 0xc609], /* Hangul Syllable */ + [0xc60a, 0xc60a], /* Hangul Syllable */ + [0xc60b, 0xc60b], /* Hangul Syllable */ + [0xc60c, 0xc60c], /* Hangul Syllable */ + [0xc60d, 0xc60d], /* Hangul Syllable */ + [0xc60e, 0xc60e], /* Hangul Syllable */ + [0xc60f, 0xc60f], /* Hangul Syllable */ + [0xc610, 0xc610], /* Hangul Syllable */ + [0xc611, 0xc611], /* Hangul Syllable */ + [0xc612, 0xc612], /* Hangul Syllable */ + [0xc613, 0xc613], /* Hangul Syllable */ + [0xc614, 0xc614], /* Hangul Syllable */ + [0xc615, 0xc615], /* Hangul Syllable */ + [0xc616, 0xc616], /* Hangul Syllable */ + [0xc617, 0xc617], /* Hangul Syllable */ + [0xc618, 0xc618], /* Hangul Syllable */ + [0xc619, 0xc619], /* Hangul Syllable */ + [0xc61a, 0xc61a], /* Hangul Syllable */ + [0xc61b, 0xc61b], /* Hangul Syllable */ + [0xc61c, 0xc61c], /* Hangul Syllable */ + [0xc61d, 0xc61d], /* Hangul Syllable */ + [0xc61e, 0xc61e], /* Hangul Syllable */ + [0xc61f, 0xc61f], /* Hangul Syllable */ + [0xc620, 0xc620], /* Hangul Syllable */ + [0xc621, 0xc621], /* Hangul Syllable */ + [0xc622, 0xc622], /* Hangul Syllable */ + [0xc623, 0xc623], /* Hangul Syllable */ + [0xc624, 0xc624], /* Hangul Syllable */ + [0xc625, 0xc625], /* Hangul Syllable */ + [0xc626, 0xc626], /* Hangul Syllable */ + [0xc627, 0xc627], /* Hangul Syllable */ + [0xc628, 0xc628], /* Hangul Syllable */ + [0xc629, 0xc629], /* Hangul Syllable */ + [0xc62a, 0xc62a], /* Hangul Syllable */ + [0xc62b, 0xc62b], /* Hangul Syllable */ + [0xc62c, 0xc62c], /* Hangul Syllable */ + [0xc62d, 0xc62d], /* Hangul Syllable */ + [0xc62e, 0xc62e], /* Hangul Syllable */ + [0xc62f, 0xc62f], /* Hangul Syllable */ + [0xc630, 0xc630], /* Hangul Syllable */ + [0xc631, 0xc631], /* Hangul Syllable */ + [0xc632, 0xc632], /* Hangul Syllable */ + [0xc633, 0xc633], /* Hangul Syllable */ + [0xc634, 0xc634], /* Hangul Syllable */ + [0xc635, 0xc635], /* Hangul Syllable */ + [0xc636, 0xc636], /* Hangul Syllable */ + [0xc637, 0xc637], /* Hangul Syllable */ + [0xc638, 0xc638], /* Hangul Syllable */ + [0xc639, 0xc639], /* Hangul Syllable */ + [0xc63a, 0xc63a], /* Hangul Syllable */ + [0xc63b, 0xc63b], /* Hangul Syllable */ + [0xc63c, 0xc63c], /* Hangul Syllable */ + [0xc63d, 0xc63d], /* Hangul Syllable */ + [0xc63e, 0xc63e], /* Hangul Syllable */ + [0xc63f, 0xc63f], /* Hangul Syllable */ + [0xc640, 0xc640], /* Hangul Syllable */ + [0xc641, 0xc641], /* Hangul Syllable */ + [0xc642, 0xc642], /* Hangul Syllable */ + [0xc643, 0xc643], /* Hangul Syllable */ + [0xc644, 0xc644], /* Hangul Syllable */ + [0xc645, 0xc645], /* Hangul Syllable */ + [0xc646, 0xc646], /* Hangul Syllable */ + [0xc647, 0xc647], /* Hangul Syllable */ + [0xc648, 0xc648], /* Hangul Syllable */ + [0xc649, 0xc649], /* Hangul Syllable */ + [0xc64a, 0xc64a], /* Hangul Syllable */ + [0xc64b, 0xc64b], /* Hangul Syllable */ + [0xc64c, 0xc64c], /* Hangul Syllable */ + [0xc64d, 0xc64d], /* Hangul Syllable */ + [0xc64e, 0xc64e], /* Hangul Syllable */ + [0xc64f, 0xc64f], /* Hangul Syllable */ + [0xc650, 0xc650], /* Hangul Syllable */ + [0xc651, 0xc651], /* Hangul Syllable */ + [0xc652, 0xc652], /* Hangul Syllable */ + [0xc653, 0xc653], /* Hangul Syllable */ + [0xc654, 0xc654], /* Hangul Syllable */ + [0xc655, 0xc655], /* Hangul Syllable */ + [0xc656, 0xc656], /* Hangul Syllable */ + [0xc657, 0xc657], /* Hangul Syllable */ + [0xc658, 0xc658], /* Hangul Syllable */ + [0xc659, 0xc659], /* Hangul Syllable */ + [0xc65a, 0xc65a], /* Hangul Syllable */ + [0xc65b, 0xc65b], /* Hangul Syllable */ + [0xc65c, 0xc65c], /* Hangul Syllable */ + [0xc65d, 0xc65d], /* Hangul Syllable */ + [0xc65e, 0xc65e], /* Hangul Syllable */ + [0xc65f, 0xc65f], /* Hangul Syllable */ + [0xc660, 0xc660], /* Hangul Syllable */ + [0xc661, 0xc661], /* Hangul Syllable */ + [0xc662, 0xc662], /* Hangul Syllable */ + [0xc663, 0xc663], /* Hangul Syllable */ + [0xc664, 0xc664], /* Hangul Syllable */ + [0xc665, 0xc665], /* Hangul Syllable */ + [0xc666, 0xc666], /* Hangul Syllable */ + [0xc667, 0xc667], /* Hangul Syllable */ + [0xc668, 0xc668], /* Hangul Syllable */ + [0xc669, 0xc669], /* Hangul Syllable */ + [0xc66a, 0xc66a], /* Hangul Syllable */ + [0xc66b, 0xc66b], /* Hangul Syllable */ + [0xc66c, 0xc66c], /* Hangul Syllable */ + [0xc66d, 0xc66d], /* Hangul Syllable */ + [0xc66e, 0xc66e], /* Hangul Syllable */ + [0xc66f, 0xc66f], /* Hangul Syllable */ + [0xc670, 0xc670], /* Hangul Syllable */ + [0xc671, 0xc671], /* Hangul Syllable */ + [0xc672, 0xc672], /* Hangul Syllable */ + [0xc673, 0xc673], /* Hangul Syllable */ + [0xc674, 0xc674], /* Hangul Syllable */ + [0xc675, 0xc675], /* Hangul Syllable */ + [0xc676, 0xc676], /* Hangul Syllable */ + [0xc677, 0xc677], /* Hangul Syllable */ + [0xc678, 0xc678], /* Hangul Syllable */ + [0xc679, 0xc679], /* Hangul Syllable */ + [0xc67a, 0xc67a], /* Hangul Syllable */ + [0xc67b, 0xc67b], /* Hangul Syllable */ + [0xc67c, 0xc67c], /* Hangul Syllable */ + [0xc67d, 0xc67d], /* Hangul Syllable */ + [0xc67e, 0xc67e], /* Hangul Syllable */ + [0xc67f, 0xc67f], /* Hangul Syllable */ + [0xc680, 0xc680], /* Hangul Syllable */ + [0xc681, 0xc681], /* Hangul Syllable */ + [0xc682, 0xc682], /* Hangul Syllable */ + [0xc683, 0xc683], /* Hangul Syllable */ + [0xc684, 0xc684], /* Hangul Syllable */ + [0xc685, 0xc685], /* Hangul Syllable */ + [0xc686, 0xc686], /* Hangul Syllable */ + [0xc687, 0xc687], /* Hangul Syllable */ + [0xc688, 0xc688], /* Hangul Syllable */ + [0xc689, 0xc689], /* Hangul Syllable */ + [0xc68a, 0xc68a], /* Hangul Syllable */ + [0xc68b, 0xc68b], /* Hangul Syllable */ + [0xc68c, 0xc68c], /* Hangul Syllable */ + [0xc68d, 0xc68d], /* Hangul Syllable */ + [0xc68e, 0xc68e], /* Hangul Syllable */ + [0xc68f, 0xc68f], /* Hangul Syllable */ + [0xc690, 0xc690], /* Hangul Syllable */ + [0xc691, 0xc691], /* Hangul Syllable */ + [0xc692, 0xc692], /* Hangul Syllable */ + [0xc693, 0xc693], /* Hangul Syllable */ + [0xc694, 0xc694], /* Hangul Syllable */ + [0xc695, 0xc695], /* Hangul Syllable */ + [0xc696, 0xc696], /* Hangul Syllable */ + [0xc697, 0xc697], /* Hangul Syllable */ + [0xc698, 0xc698], /* Hangul Syllable */ + [0xc699, 0xc699], /* Hangul Syllable */ + [0xc69a, 0xc69a], /* Hangul Syllable */ + [0xc69b, 0xc69b], /* Hangul Syllable */ + [0xc69c, 0xc69c], /* Hangul Syllable */ + [0xc69d, 0xc69d], /* Hangul Syllable */ + [0xc69e, 0xc69e], /* Hangul Syllable */ + [0xc69f, 0xc69f], /* Hangul Syllable */ + [0xc6a0, 0xc6a0], /* Hangul Syllable */ + [0xc6a1, 0xc6a1], /* Hangul Syllable */ + [0xc6a2, 0xc6a2], /* Hangul Syllable */ + [0xc6a3, 0xc6a3], /* Hangul Syllable */ + [0xc6a4, 0xc6a4], /* Hangul Syllable */ + [0xc6a5, 0xc6a5], /* Hangul Syllable */ + [0xc6a6, 0xc6a6], /* Hangul Syllable */ + [0xc6a7, 0xc6a7], /* Hangul Syllable */ + [0xc6a8, 0xc6a8], /* Hangul Syllable */ + [0xc6a9, 0xc6a9], /* Hangul Syllable */ + [0xc6aa, 0xc6aa], /* Hangul Syllable */ + [0xc6ab, 0xc6ab], /* Hangul Syllable */ + [0xc6ac, 0xc6ac], /* Hangul Syllable */ + [0xc6ad, 0xc6ad], /* Hangul Syllable */ + [0xc6ae, 0xc6ae], /* Hangul Syllable */ + [0xc6af, 0xc6af], /* Hangul Syllable */ + [0xc6b0, 0xc6b0], /* Hangul Syllable */ + [0xc6b1, 0xc6b1], /* Hangul Syllable */ + [0xc6b2, 0xc6b2], /* Hangul Syllable */ + [0xc6b3, 0xc6b3], /* Hangul Syllable */ + [0xc6b4, 0xc6b4], /* Hangul Syllable */ + [0xc6b5, 0xc6b5], /* Hangul Syllable */ + [0xc6b6, 0xc6b6], /* Hangul Syllable */ + [0xc6b7, 0xc6b7], /* Hangul Syllable */ + [0xc6b8, 0xc6b8], /* Hangul Syllable */ + [0xc6b9, 0xc6b9], /* Hangul Syllable */ + [0xc6ba, 0xc6ba], /* Hangul Syllable */ + [0xc6bb, 0xc6bb], /* Hangul Syllable */ + [0xc6bc, 0xc6bc], /* Hangul Syllable */ + [0xc6bd, 0xc6bd], /* Hangul Syllable */ + [0xc6be, 0xc6be], /* Hangul Syllable */ + [0xc6bf, 0xc6bf], /* Hangul Syllable */ + [0xc6c0, 0xc6c0], /* Hangul Syllable */ + [0xc6c1, 0xc6c1], /* Hangul Syllable */ + [0xc6c2, 0xc6c2], /* Hangul Syllable */ + [0xc6c3, 0xc6c3], /* Hangul Syllable */ + [0xc6c4, 0xc6c4], /* Hangul Syllable */ + [0xc6c5, 0xc6c5], /* Hangul Syllable */ + [0xc6c6, 0xc6c6], /* Hangul Syllable */ + [0xc6c7, 0xc6c7], /* Hangul Syllable */ + [0xc6c8, 0xc6c8], /* Hangul Syllable */ + [0xc6c9, 0xc6c9], /* Hangul Syllable */ + [0xc6ca, 0xc6ca], /* Hangul Syllable */ + [0xc6cb, 0xc6cb], /* Hangul Syllable */ + [0xc6cc, 0xc6cc], /* Hangul Syllable */ + [0xc6cd, 0xc6cd], /* Hangul Syllable */ + [0xc6ce, 0xc6ce], /* Hangul Syllable */ + [0xc6cf, 0xc6cf], /* Hangul Syllable */ + [0xc6d0, 0xc6d0], /* Hangul Syllable */ + [0xc6d1, 0xc6d1], /* Hangul Syllable */ + [0xc6d2, 0xc6d2], /* Hangul Syllable */ + [0xc6d3, 0xc6d3], /* Hangul Syllable */ + [0xc6d4, 0xc6d4], /* Hangul Syllable */ + [0xc6d5, 0xc6d5], /* Hangul Syllable */ + [0xc6d6, 0xc6d6], /* Hangul Syllable */ + [0xc6d7, 0xc6d7], /* Hangul Syllable */ + [0xc6d8, 0xc6d8], /* Hangul Syllable */ + [0xc6d9, 0xc6d9], /* Hangul Syllable */ + [0xc6da, 0xc6da], /* Hangul Syllable */ + [0xc6db, 0xc6db], /* Hangul Syllable */ + [0xc6dc, 0xc6dc], /* Hangul Syllable */ + [0xc6dd, 0xc6dd], /* Hangul Syllable */ + [0xc6de, 0xc6de], /* Hangul Syllable */ + [0xc6df, 0xc6df], /* Hangul Syllable */ + [0xc6e0, 0xc6e0], /* Hangul Syllable */ + [0xc6e1, 0xc6e1], /* Hangul Syllable */ + [0xc6e2, 0xc6e2], /* Hangul Syllable */ + [0xc6e3, 0xc6e3], /* Hangul Syllable */ + [0xc6e4, 0xc6e4], /* Hangul Syllable */ + [0xc6e5, 0xc6e5], /* Hangul Syllable */ + [0xc6e6, 0xc6e6], /* Hangul Syllable */ + [0xc6e7, 0xc6e7], /* Hangul Syllable */ + [0xc6e8, 0xc6e8], /* Hangul Syllable */ + [0xc6e9, 0xc6e9], /* Hangul Syllable */ + [0xc6ea, 0xc6ea], /* Hangul Syllable */ + [0xc6eb, 0xc6eb], /* Hangul Syllable */ + [0xc6ec, 0xc6ec], /* Hangul Syllable */ + [0xc6ed, 0xc6ed], /* Hangul Syllable */ + [0xc6ee, 0xc6ee], /* Hangul Syllable */ + [0xc6ef, 0xc6ef], /* Hangul Syllable */ + [0xc6f0, 0xc6f0], /* Hangul Syllable */ + [0xc6f1, 0xc6f1], /* Hangul Syllable */ + [0xc6f2, 0xc6f2], /* Hangul Syllable */ + [0xc6f3, 0xc6f3], /* Hangul Syllable */ + [0xc6f4, 0xc6f4], /* Hangul Syllable */ + [0xc6f5, 0xc6f5], /* Hangul Syllable */ + [0xc6f6, 0xc6f6], /* Hangul Syllable */ + [0xc6f7, 0xc6f7], /* Hangul Syllable */ + [0xc6f8, 0xc6f8], /* Hangul Syllable */ + [0xc6f9, 0xc6f9], /* Hangul Syllable */ + [0xc6fa, 0xc6fa], /* Hangul Syllable */ + [0xc6fb, 0xc6fb], /* Hangul Syllable */ + [0xc6fc, 0xc6fc], /* Hangul Syllable */ + [0xc6fd, 0xc6fd], /* Hangul Syllable */ + [0xc6fe, 0xc6fe], /* Hangul Syllable */ + [0xc6ff, 0xc6ff], /* Hangul Syllable */ + [0xc700, 0xc700], /* Hangul Syllable */ + [0xc701, 0xc701], /* Hangul Syllable */ + [0xc702, 0xc702], /* Hangul Syllable */ + [0xc703, 0xc703], /* Hangul Syllable */ + [0xc704, 0xc704], /* Hangul Syllable */ + [0xc705, 0xc705], /* Hangul Syllable */ + [0xc706, 0xc706], /* Hangul Syllable */ + [0xc707, 0xc707], /* Hangul Syllable */ + [0xc708, 0xc708], /* Hangul Syllable */ + [0xc709, 0xc709], /* Hangul Syllable */ + [0xc70a, 0xc70a], /* Hangul Syllable */ + [0xc70b, 0xc70b], /* Hangul Syllable */ + [0xc70c, 0xc70c], /* Hangul Syllable */ + [0xc70d, 0xc70d], /* Hangul Syllable */ + [0xc70e, 0xc70e], /* Hangul Syllable */ + [0xc70f, 0xc70f], /* Hangul Syllable */ + [0xc710, 0xc710], /* Hangul Syllable */ + [0xc711, 0xc711], /* Hangul Syllable */ + [0xc712, 0xc712], /* Hangul Syllable */ + [0xc713, 0xc713], /* Hangul Syllable */ + [0xc714, 0xc714], /* Hangul Syllable */ + [0xc715, 0xc715], /* Hangul Syllable */ + [0xc716, 0xc716], /* Hangul Syllable */ + [0xc717, 0xc717], /* Hangul Syllable */ + [0xc718, 0xc718], /* Hangul Syllable */ + [0xc719, 0xc719], /* Hangul Syllable */ + [0xc71a, 0xc71a], /* Hangul Syllable */ + [0xc71b, 0xc71b], /* Hangul Syllable */ + [0xc71c, 0xc71c], /* Hangul Syllable */ + [0xc71d, 0xc71d], /* Hangul Syllable */ + [0xc71e, 0xc71e], /* Hangul Syllable */ + [0xc71f, 0xc71f], /* Hangul Syllable */ + [0xc720, 0xc720], /* Hangul Syllable */ + [0xc721, 0xc721], /* Hangul Syllable */ + [0xc722, 0xc722], /* Hangul Syllable */ + [0xc723, 0xc723], /* Hangul Syllable */ + [0xc724, 0xc724], /* Hangul Syllable */ + [0xc725, 0xc725], /* Hangul Syllable */ + [0xc726, 0xc726], /* Hangul Syllable */ + [0xc727, 0xc727], /* Hangul Syllable */ + [0xc728, 0xc728], /* Hangul Syllable */ + [0xc729, 0xc729], /* Hangul Syllable */ + [0xc72a, 0xc72a], /* Hangul Syllable */ + [0xc72b, 0xc72b], /* Hangul Syllable */ + [0xc72c, 0xc72c], /* Hangul Syllable */ + [0xc72d, 0xc72d], /* Hangul Syllable */ + [0xc72e, 0xc72e], /* Hangul Syllable */ + [0xc72f, 0xc72f], /* Hangul Syllable */ + [0xc730, 0xc730], /* Hangul Syllable */ + [0xc731, 0xc731], /* Hangul Syllable */ + [0xc732, 0xc732], /* Hangul Syllable */ + [0xc733, 0xc733], /* Hangul Syllable */ + [0xc734, 0xc734], /* Hangul Syllable */ + [0xc735, 0xc735], /* Hangul Syllable */ + [0xc736, 0xc736], /* Hangul Syllable */ + [0xc737, 0xc737], /* Hangul Syllable */ + [0xc738, 0xc738], /* Hangul Syllable */ + [0xc739, 0xc739], /* Hangul Syllable */ + [0xc73a, 0xc73a], /* Hangul Syllable */ + [0xc73b, 0xc73b], /* Hangul Syllable */ + [0xc73c, 0xc73c], /* Hangul Syllable */ + [0xc73d, 0xc73d], /* Hangul Syllable */ + [0xc73e, 0xc73e], /* Hangul Syllable */ + [0xc73f, 0xc73f], /* Hangul Syllable */ + [0xc740, 0xc740], /* Hangul Syllable */ + [0xc741, 0xc741], /* Hangul Syllable */ + [0xc742, 0xc742], /* Hangul Syllable */ + [0xc743, 0xc743], /* Hangul Syllable */ + [0xc744, 0xc744], /* Hangul Syllable */ + [0xc745, 0xc745], /* Hangul Syllable */ + [0xc746, 0xc746], /* Hangul Syllable */ + [0xc747, 0xc747], /* Hangul Syllable */ + [0xc748, 0xc748], /* Hangul Syllable */ + [0xc749, 0xc749], /* Hangul Syllable */ + [0xc74a, 0xc74a], /* Hangul Syllable */ + [0xc74b, 0xc74b], /* Hangul Syllable */ + [0xc74c, 0xc74c], /* Hangul Syllable */ + [0xc74d, 0xc74d], /* Hangul Syllable */ + [0xc74e, 0xc74e], /* Hangul Syllable */ + [0xc74f, 0xc74f], /* Hangul Syllable */ + [0xc750, 0xc750], /* Hangul Syllable */ + [0xc751, 0xc751], /* Hangul Syllable */ + [0xc752, 0xc752], /* Hangul Syllable */ + [0xc753, 0xc753], /* Hangul Syllable */ + [0xc754, 0xc754], /* Hangul Syllable */ + [0xc755, 0xc755], /* Hangul Syllable */ + [0xc756, 0xc756], /* Hangul Syllable */ + [0xc757, 0xc757], /* Hangul Syllable */ + [0xc758, 0xc758], /* Hangul Syllable */ + [0xc759, 0xc759], /* Hangul Syllable */ + [0xc75a, 0xc75a], /* Hangul Syllable */ + [0xc75b, 0xc75b], /* Hangul Syllable */ + [0xc75c, 0xc75c], /* Hangul Syllable */ + [0xc75d, 0xc75d], /* Hangul Syllable */ + [0xc75e, 0xc75e], /* Hangul Syllable */ + [0xc75f, 0xc75f], /* Hangul Syllable */ + [0xc760, 0xc760], /* Hangul Syllable */ + [0xc761, 0xc761], /* Hangul Syllable */ + [0xc762, 0xc762], /* Hangul Syllable */ + [0xc763, 0xc763], /* Hangul Syllable */ + [0xc764, 0xc764], /* Hangul Syllable */ + [0xc765, 0xc765], /* Hangul Syllable */ + [0xc766, 0xc766], /* Hangul Syllable */ + [0xc767, 0xc767], /* Hangul Syllable */ + [0xc768, 0xc768], /* Hangul Syllable */ + [0xc769, 0xc769], /* Hangul Syllable */ + [0xc76a, 0xc76a], /* Hangul Syllable */ + [0xc76b, 0xc76b], /* Hangul Syllable */ + [0xc76c, 0xc76c], /* Hangul Syllable */ + [0xc76d, 0xc76d], /* Hangul Syllable */ + [0xc76e, 0xc76e], /* Hangul Syllable */ + [0xc76f, 0xc76f], /* Hangul Syllable */ + [0xc770, 0xc770], /* Hangul Syllable */ + [0xc771, 0xc771], /* Hangul Syllable */ + [0xc772, 0xc772], /* Hangul Syllable */ + [0xc773, 0xc773], /* Hangul Syllable */ + [0xc774, 0xc774], /* Hangul Syllable */ + [0xc775, 0xc775], /* Hangul Syllable */ + [0xc776, 0xc776], /* Hangul Syllable */ + [0xc777, 0xc777], /* Hangul Syllable */ + [0xc778, 0xc778], /* Hangul Syllable */ + [0xc779, 0xc779], /* Hangul Syllable */ + [0xc77a, 0xc77a], /* Hangul Syllable */ + [0xc77b, 0xc77b], /* Hangul Syllable */ + [0xc77c, 0xc77c], /* Hangul Syllable */ + [0xc77d, 0xc77d], /* Hangul Syllable */ + [0xc77e, 0xc77e], /* Hangul Syllable */ + [0xc77f, 0xc77f], /* Hangul Syllable */ + [0xc780, 0xc780], /* Hangul Syllable */ + [0xc781, 0xc781], /* Hangul Syllable */ + [0xc782, 0xc782], /* Hangul Syllable */ + [0xc783, 0xc783], /* Hangul Syllable */ + [0xc784, 0xc784], /* Hangul Syllable */ + [0xc785, 0xc785], /* Hangul Syllable */ + [0xc786, 0xc786], /* Hangul Syllable */ + [0xc787, 0xc787], /* Hangul Syllable */ + [0xc788, 0xc788], /* Hangul Syllable */ + [0xc789, 0xc789], /* Hangul Syllable */ + [0xc78a, 0xc78a], /* Hangul Syllable */ + [0xc78b, 0xc78b], /* Hangul Syllable */ + [0xc78c, 0xc78c], /* Hangul Syllable */ + [0xc78d, 0xc78d], /* Hangul Syllable */ + [0xc78e, 0xc78e], /* Hangul Syllable */ + [0xc78f, 0xc78f], /* Hangul Syllable */ + [0xc790, 0xc790], /* Hangul Syllable */ + [0xc791, 0xc791], /* Hangul Syllable */ + [0xc792, 0xc792], /* Hangul Syllable */ + [0xc793, 0xc793], /* Hangul Syllable */ + [0xc794, 0xc794], /* Hangul Syllable */ + [0xc795, 0xc795], /* Hangul Syllable */ + [0xc796, 0xc796], /* Hangul Syllable */ + [0xc797, 0xc797], /* Hangul Syllable */ + [0xc798, 0xc798], /* Hangul Syllable */ + [0xc799, 0xc799], /* Hangul Syllable */ + [0xc79a, 0xc79a], /* Hangul Syllable */ + [0xc79b, 0xc79b], /* Hangul Syllable */ + [0xc79c, 0xc79c], /* Hangul Syllable */ + [0xc79d, 0xc79d], /* Hangul Syllable */ + [0xc79e, 0xc79e], /* Hangul Syllable */ + [0xc79f, 0xc79f], /* Hangul Syllable */ + [0xc7a0, 0xc7a0], /* Hangul Syllable */ + [0xc7a1, 0xc7a1], /* Hangul Syllable */ + [0xc7a2, 0xc7a2], /* Hangul Syllable */ + [0xc7a3, 0xc7a3], /* Hangul Syllable */ + [0xc7a4, 0xc7a4], /* Hangul Syllable */ + [0xc7a5, 0xc7a5], /* Hangul Syllable */ + [0xc7a6, 0xc7a6], /* Hangul Syllable */ + [0xc7a7, 0xc7a7], /* Hangul Syllable */ + [0xc7a8, 0xc7a8], /* Hangul Syllable */ + [0xc7a9, 0xc7a9], /* Hangul Syllable */ + [0xc7aa, 0xc7aa], /* Hangul Syllable */ + [0xc7ab, 0xc7ab], /* Hangul Syllable */ + [0xc7ac, 0xc7ac], /* Hangul Syllable */ + [0xc7ad, 0xc7ad], /* Hangul Syllable */ + [0xc7ae, 0xc7ae], /* Hangul Syllable */ + [0xc7af, 0xc7af], /* Hangul Syllable */ + [0xc7b0, 0xc7b0], /* Hangul Syllable */ + [0xc7b1, 0xc7b1], /* Hangul Syllable */ + [0xc7b2, 0xc7b2], /* Hangul Syllable */ + [0xc7b3, 0xc7b3], /* Hangul Syllable */ + [0xc7b4, 0xc7b4], /* Hangul Syllable */ + [0xc7b5, 0xc7b5], /* Hangul Syllable */ + [0xc7b6, 0xc7b6], /* Hangul Syllable */ + [0xc7b7, 0xc7b7], /* Hangul Syllable */ + [0xc7b8, 0xc7b8], /* Hangul Syllable */ + [0xc7b9, 0xc7b9], /* Hangul Syllable */ + [0xc7ba, 0xc7ba], /* Hangul Syllable */ + [0xc7bb, 0xc7bb], /* Hangul Syllable */ + [0xc7bc, 0xc7bc], /* Hangul Syllable */ + [0xc7bd, 0xc7bd], /* Hangul Syllable */ + [0xc7be, 0xc7be], /* Hangul Syllable */ + [0xc7bf, 0xc7bf], /* Hangul Syllable */ + [0xc7c0, 0xc7c0], /* Hangul Syllable */ + [0xc7c1, 0xc7c1], /* Hangul Syllable */ + [0xc7c2, 0xc7c2], /* Hangul Syllable */ + [0xc7c3, 0xc7c3], /* Hangul Syllable */ + [0xc7c4, 0xc7c4], /* Hangul Syllable */ + [0xc7c5, 0xc7c5], /* Hangul Syllable */ + [0xc7c6, 0xc7c6], /* Hangul Syllable */ + [0xc7c7, 0xc7c7], /* Hangul Syllable */ + [0xc7c8, 0xc7c8], /* Hangul Syllable */ + [0xc7c9, 0xc7c9], /* Hangul Syllable */ + [0xc7ca, 0xc7ca], /* Hangul Syllable */ + [0xc7cb, 0xc7cb], /* Hangul Syllable */ + [0xc7cc, 0xc7cc], /* Hangul Syllable */ + [0xc7cd, 0xc7cd], /* Hangul Syllable */ + [0xc7ce, 0xc7ce], /* Hangul Syllable */ + [0xc7cf, 0xc7cf], /* Hangul Syllable */ + [0xc7d0, 0xc7d0], /* Hangul Syllable */ + [0xc7d1, 0xc7d1], /* Hangul Syllable */ + [0xc7d2, 0xc7d2], /* Hangul Syllable */ + [0xc7d3, 0xc7d3], /* Hangul Syllable */ + [0xc7d4, 0xc7d4], /* Hangul Syllable */ + [0xc7d5, 0xc7d5], /* Hangul Syllable */ + [0xc7d6, 0xc7d6], /* Hangul Syllable */ + [0xc7d7, 0xc7d7], /* Hangul Syllable */ + [0xc7d8, 0xc7d8], /* Hangul Syllable */ + [0xc7d9, 0xc7d9], /* Hangul Syllable */ + [0xc7da, 0xc7da], /* Hangul Syllable */ + [0xc7db, 0xc7db], /* Hangul Syllable */ + [0xc7dc, 0xc7dc], /* Hangul Syllable */ + [0xc7dd, 0xc7dd], /* Hangul Syllable */ + [0xc7de, 0xc7de], /* Hangul Syllable */ + [0xc7df, 0xc7df], /* Hangul Syllable */ + [0xc7e0, 0xc7e0], /* Hangul Syllable */ + [0xc7e1, 0xc7e1], /* Hangul Syllable */ + [0xc7e2, 0xc7e2], /* Hangul Syllable */ + [0xc7e3, 0xc7e3], /* Hangul Syllable */ + [0xc7e4, 0xc7e4], /* Hangul Syllable */ + [0xc7e5, 0xc7e5], /* Hangul Syllable */ + [0xc7e6, 0xc7e6], /* Hangul Syllable */ + [0xc7e7, 0xc7e7], /* Hangul Syllable */ + [0xc7e8, 0xc7e8], /* Hangul Syllable */ + [0xc7e9, 0xc7e9], /* Hangul Syllable */ + [0xc7ea, 0xc7ea], /* Hangul Syllable */ + [0xc7eb, 0xc7eb], /* Hangul Syllable */ + [0xc7ec, 0xc7ec], /* Hangul Syllable */ + [0xc7ed, 0xc7ed], /* Hangul Syllable */ + [0xc7ee, 0xc7ee], /* Hangul Syllable */ + [0xc7ef, 0xc7ef], /* Hangul Syllable */ + [0xc7f0, 0xc7f0], /* Hangul Syllable */ + [0xc7f1, 0xc7f1], /* Hangul Syllable */ + [0xc7f2, 0xc7f2], /* Hangul Syllable */ + [0xc7f3, 0xc7f3], /* Hangul Syllable */ + [0xc7f4, 0xc7f4], /* Hangul Syllable */ + [0xc7f5, 0xc7f5], /* Hangul Syllable */ + [0xc7f6, 0xc7f6], /* Hangul Syllable */ + [0xc7f7, 0xc7f7], /* Hangul Syllable */ + [0xc7f8, 0xc7f8], /* Hangul Syllable */ + [0xc7f9, 0xc7f9], /* Hangul Syllable */ + [0xc7fa, 0xc7fa], /* Hangul Syllable */ + [0xc7fb, 0xc7fb], /* Hangul Syllable */ + [0xc7fc, 0xc7fc], /* Hangul Syllable */ + [0xc7fd, 0xc7fd], /* Hangul Syllable */ + [0xc7fe, 0xc7fe], /* Hangul Syllable */ + [0xc7ff, 0xc7ff], /* Hangul Syllable */ + [0xc800, 0xc800], /* Hangul Syllable */ + [0xc801, 0xc801], /* Hangul Syllable */ + [0xc802, 0xc802], /* Hangul Syllable */ + [0xc803, 0xc803], /* Hangul Syllable */ + [0xc804, 0xc804], /* Hangul Syllable */ + [0xc805, 0xc805], /* Hangul Syllable */ + [0xc806, 0xc806], /* Hangul Syllable */ + [0xc807, 0xc807], /* Hangul Syllable */ + [0xc808, 0xc808], /* Hangul Syllable */ + [0xc809, 0xc809], /* Hangul Syllable */ + [0xc80a, 0xc80a], /* Hangul Syllable */ + [0xc80b, 0xc80b], /* Hangul Syllable */ + [0xc80c, 0xc80c], /* Hangul Syllable */ + [0xc80d, 0xc80d], /* Hangul Syllable */ + [0xc80e, 0xc80e], /* Hangul Syllable */ + [0xc80f, 0xc80f], /* Hangul Syllable */ + [0xc810, 0xc810], /* Hangul Syllable */ + [0xc811, 0xc811], /* Hangul Syllable */ + [0xc812, 0xc812], /* Hangul Syllable */ + [0xc813, 0xc813], /* Hangul Syllable */ + [0xc814, 0xc814], /* Hangul Syllable */ + [0xc815, 0xc815], /* Hangul Syllable */ + [0xc816, 0xc816], /* Hangul Syllable */ + [0xc817, 0xc817], /* Hangul Syllable */ + [0xc818, 0xc818], /* Hangul Syllable */ + [0xc819, 0xc819], /* Hangul Syllable */ + [0xc81a, 0xc81a], /* Hangul Syllable */ + [0xc81b, 0xc81b], /* Hangul Syllable */ + [0xc81c, 0xc81c], /* Hangul Syllable */ + [0xc81d, 0xc81d], /* Hangul Syllable */ + [0xc81e, 0xc81e], /* Hangul Syllable */ + [0xc81f, 0xc81f], /* Hangul Syllable */ + [0xc820, 0xc820], /* Hangul Syllable */ + [0xc821, 0xc821], /* Hangul Syllable */ + [0xc822, 0xc822], /* Hangul Syllable */ + [0xc823, 0xc823], /* Hangul Syllable */ + [0xc824, 0xc824], /* Hangul Syllable */ + [0xc825, 0xc825], /* Hangul Syllable */ + [0xc826, 0xc826], /* Hangul Syllable */ + [0xc827, 0xc827], /* Hangul Syllable */ + [0xc828, 0xc828], /* Hangul Syllable */ + [0xc829, 0xc829], /* Hangul Syllable */ + [0xc82a, 0xc82a], /* Hangul Syllable */ + [0xc82b, 0xc82b], /* Hangul Syllable */ + [0xc82c, 0xc82c], /* Hangul Syllable */ + [0xc82d, 0xc82d], /* Hangul Syllable */ + [0xc82e, 0xc82e], /* Hangul Syllable */ + [0xc82f, 0xc82f], /* Hangul Syllable */ + [0xc830, 0xc830], /* Hangul Syllable */ + [0xc831, 0xc831], /* Hangul Syllable */ + [0xc832, 0xc832], /* Hangul Syllable */ + [0xc833, 0xc833], /* Hangul Syllable */ + [0xc834, 0xc834], /* Hangul Syllable */ + [0xc835, 0xc835], /* Hangul Syllable */ + [0xc836, 0xc836], /* Hangul Syllable */ + [0xc837, 0xc837], /* Hangul Syllable */ + [0xc838, 0xc838], /* Hangul Syllable */ + [0xc839, 0xc839], /* Hangul Syllable */ + [0xc83a, 0xc83a], /* Hangul Syllable */ + [0xc83b, 0xc83b], /* Hangul Syllable */ + [0xc83c, 0xc83c], /* Hangul Syllable */ + [0xc83d, 0xc83d], /* Hangul Syllable */ + [0xc83e, 0xc83e], /* Hangul Syllable */ + [0xc83f, 0xc83f], /* Hangul Syllable */ + [0xc840, 0xc840], /* Hangul Syllable */ + [0xc841, 0xc841], /* Hangul Syllable */ + [0xc842, 0xc842], /* Hangul Syllable */ + [0xc843, 0xc843], /* Hangul Syllable */ + [0xc844, 0xc844], /* Hangul Syllable */ + [0xc845, 0xc845], /* Hangul Syllable */ + [0xc846, 0xc846], /* Hangul Syllable */ + [0xc847, 0xc847], /* Hangul Syllable */ + [0xc848, 0xc848], /* Hangul Syllable */ + [0xc849, 0xc849], /* Hangul Syllable */ + [0xc84a, 0xc84a], /* Hangul Syllable */ + [0xc84b, 0xc84b], /* Hangul Syllable */ + [0xc84c, 0xc84c], /* Hangul Syllable */ + [0xc84d, 0xc84d], /* Hangul Syllable */ + [0xc84e, 0xc84e], /* Hangul Syllable */ + [0xc84f, 0xc84f], /* Hangul Syllable */ + [0xc850, 0xc850], /* Hangul Syllable */ + [0xc851, 0xc851], /* Hangul Syllable */ + [0xc852, 0xc852], /* Hangul Syllable */ + [0xc853, 0xc853], /* Hangul Syllable */ + [0xc854, 0xc854], /* Hangul Syllable */ + [0xc855, 0xc855], /* Hangul Syllable */ + [0xc856, 0xc856], /* Hangul Syllable */ + [0xc857, 0xc857], /* Hangul Syllable */ + [0xc858, 0xc858], /* Hangul Syllable */ + [0xc859, 0xc859], /* Hangul Syllable */ + [0xc85a, 0xc85a], /* Hangul Syllable */ + [0xc85b, 0xc85b], /* Hangul Syllable */ + [0xc85c, 0xc85c], /* Hangul Syllable */ + [0xc85d, 0xc85d], /* Hangul Syllable */ + [0xc85e, 0xc85e], /* Hangul Syllable */ + [0xc85f, 0xc85f], /* Hangul Syllable */ + [0xc860, 0xc860], /* Hangul Syllable */ + [0xc861, 0xc861], /* Hangul Syllable */ + [0xc862, 0xc862], /* Hangul Syllable */ + [0xc863, 0xc863], /* Hangul Syllable */ + [0xc864, 0xc864], /* Hangul Syllable */ + [0xc865, 0xc865], /* Hangul Syllable */ + [0xc866, 0xc866], /* Hangul Syllable */ + [0xc867, 0xc867], /* Hangul Syllable */ + [0xc868, 0xc868], /* Hangul Syllable */ + [0xc869, 0xc869], /* Hangul Syllable */ + [0xc86a, 0xc86a], /* Hangul Syllable */ + [0xc86b, 0xc86b], /* Hangul Syllable */ + [0xc86c, 0xc86c], /* Hangul Syllable */ + [0xc86d, 0xc86d], /* Hangul Syllable */ + [0xc86e, 0xc86e], /* Hangul Syllable */ + [0xc86f, 0xc86f], /* Hangul Syllable */ + [0xc870, 0xc870], /* Hangul Syllable */ + [0xc871, 0xc871], /* Hangul Syllable */ + [0xc872, 0xc872], /* Hangul Syllable */ + [0xc873, 0xc873], /* Hangul Syllable */ + [0xc874, 0xc874], /* Hangul Syllable */ + [0xc875, 0xc875], /* Hangul Syllable */ + [0xc876, 0xc876], /* Hangul Syllable */ + [0xc877, 0xc877], /* Hangul Syllable */ + [0xc878, 0xc878], /* Hangul Syllable */ + [0xc879, 0xc879], /* Hangul Syllable */ + [0xc87a, 0xc87a], /* Hangul Syllable */ + [0xc87b, 0xc87b], /* Hangul Syllable */ + [0xc87c, 0xc87c], /* Hangul Syllable */ + [0xc87d, 0xc87d], /* Hangul Syllable */ + [0xc87e, 0xc87e], /* Hangul Syllable */ + [0xc87f, 0xc87f], /* Hangul Syllable */ + [0xc880, 0xc880], /* Hangul Syllable */ + [0xc881, 0xc881], /* Hangul Syllable */ + [0xc882, 0xc882], /* Hangul Syllable */ + [0xc883, 0xc883], /* Hangul Syllable */ + [0xc884, 0xc884], /* Hangul Syllable */ + [0xc885, 0xc885], /* Hangul Syllable */ + [0xc886, 0xc886], /* Hangul Syllable */ + [0xc887, 0xc887], /* Hangul Syllable */ + [0xc888, 0xc888], /* Hangul Syllable */ + [0xc889, 0xc889], /* Hangul Syllable */ + [0xc88a, 0xc88a], /* Hangul Syllable */ + [0xc88b, 0xc88b], /* Hangul Syllable */ + [0xc88c, 0xc88c], /* Hangul Syllable */ + [0xc88d, 0xc88d], /* Hangul Syllable */ + [0xc88e, 0xc88e], /* Hangul Syllable */ + [0xc88f, 0xc88f], /* Hangul Syllable */ + [0xc890, 0xc890], /* Hangul Syllable */ + [0xc891, 0xc891], /* Hangul Syllable */ + [0xc892, 0xc892], /* Hangul Syllable */ + [0xc893, 0xc893], /* Hangul Syllable */ + [0xc894, 0xc894], /* Hangul Syllable */ + [0xc895, 0xc895], /* Hangul Syllable */ + [0xc896, 0xc896], /* Hangul Syllable */ + [0xc897, 0xc897], /* Hangul Syllable */ + [0xc898, 0xc898], /* Hangul Syllable */ + [0xc899, 0xc899], /* Hangul Syllable */ + [0xc89a, 0xc89a], /* Hangul Syllable */ + [0xc89b, 0xc89b], /* Hangul Syllable */ + [0xc89c, 0xc89c], /* Hangul Syllable */ + [0xc89d, 0xc89d], /* Hangul Syllable */ + [0xc89e, 0xc89e], /* Hangul Syllable */ + [0xc89f, 0xc89f], /* Hangul Syllable */ + [0xc8a0, 0xc8a0], /* Hangul Syllable */ + [0xc8a1, 0xc8a1], /* Hangul Syllable */ + [0xc8a2, 0xc8a2], /* Hangul Syllable */ + [0xc8a3, 0xc8a3], /* Hangul Syllable */ + [0xc8a4, 0xc8a4], /* Hangul Syllable */ + [0xc8a5, 0xc8a5], /* Hangul Syllable */ + [0xc8a6, 0xc8a6], /* Hangul Syllable */ + [0xc8a7, 0xc8a7], /* Hangul Syllable */ + [0xc8a8, 0xc8a8], /* Hangul Syllable */ + [0xc8a9, 0xc8a9], /* Hangul Syllable */ + [0xc8aa, 0xc8aa], /* Hangul Syllable */ + [0xc8ab, 0xc8ab], /* Hangul Syllable */ + [0xc8ac, 0xc8ac], /* Hangul Syllable */ + [0xc8ad, 0xc8ad], /* Hangul Syllable */ + [0xc8ae, 0xc8ae], /* Hangul Syllable */ + [0xc8af, 0xc8af], /* Hangul Syllable */ + [0xc8b0, 0xc8b0], /* Hangul Syllable */ + [0xc8b1, 0xc8b1], /* Hangul Syllable */ + [0xc8b2, 0xc8b2], /* Hangul Syllable */ + [0xc8b3, 0xc8b3], /* Hangul Syllable */ + [0xc8b4, 0xc8b4], /* Hangul Syllable */ + [0xc8b5, 0xc8b5], /* Hangul Syllable */ + [0xc8b6, 0xc8b6], /* Hangul Syllable */ + [0xc8b7, 0xc8b7], /* Hangul Syllable */ + [0xc8b8, 0xc8b8], /* Hangul Syllable */ + [0xc8b9, 0xc8b9], /* Hangul Syllable */ + [0xc8ba, 0xc8ba], /* Hangul Syllable */ + [0xc8bb, 0xc8bb], /* Hangul Syllable */ + [0xc8bc, 0xc8bc], /* Hangul Syllable */ + [0xc8bd, 0xc8bd], /* Hangul Syllable */ + [0xc8be, 0xc8be], /* Hangul Syllable */ + [0xc8bf, 0xc8bf], /* Hangul Syllable */ + [0xc8c0, 0xc8c0], /* Hangul Syllable */ + [0xc8c1, 0xc8c1], /* Hangul Syllable */ + [0xc8c2, 0xc8c2], /* Hangul Syllable */ + [0xc8c3, 0xc8c3], /* Hangul Syllable */ + [0xc8c4, 0xc8c4], /* Hangul Syllable */ + [0xc8c5, 0xc8c5], /* Hangul Syllable */ + [0xc8c6, 0xc8c6], /* Hangul Syllable */ + [0xc8c7, 0xc8c7], /* Hangul Syllable */ + [0xc8c8, 0xc8c8], /* Hangul Syllable */ + [0xc8c9, 0xc8c9], /* Hangul Syllable */ + [0xc8ca, 0xc8ca], /* Hangul Syllable */ + [0xc8cb, 0xc8cb], /* Hangul Syllable */ + [0xc8cc, 0xc8cc], /* Hangul Syllable */ + [0xc8cd, 0xc8cd], /* Hangul Syllable */ + [0xc8ce, 0xc8ce], /* Hangul Syllable */ + [0xc8cf, 0xc8cf], /* Hangul Syllable */ + [0xc8d0, 0xc8d0], /* Hangul Syllable */ + [0xc8d1, 0xc8d1], /* Hangul Syllable */ + [0xc8d2, 0xc8d2], /* Hangul Syllable */ + [0xc8d3, 0xc8d3], /* Hangul Syllable */ + [0xc8d4, 0xc8d4], /* Hangul Syllable */ + [0xc8d5, 0xc8d5], /* Hangul Syllable */ + [0xc8d6, 0xc8d6], /* Hangul Syllable */ + [0xc8d7, 0xc8d7], /* Hangul Syllable */ + [0xc8d8, 0xc8d8], /* Hangul Syllable */ + [0xc8d9, 0xc8d9], /* Hangul Syllable */ + [0xc8da, 0xc8da], /* Hangul Syllable */ + [0xc8db, 0xc8db], /* Hangul Syllable */ + [0xc8dc, 0xc8dc], /* Hangul Syllable */ + [0xc8dd, 0xc8dd], /* Hangul Syllable */ + [0xc8de, 0xc8de], /* Hangul Syllable */ + [0xc8df, 0xc8df], /* Hangul Syllable */ + [0xc8e0, 0xc8e0], /* Hangul Syllable */ + [0xc8e1, 0xc8e1], /* Hangul Syllable */ + [0xc8e2, 0xc8e2], /* Hangul Syllable */ + [0xc8e3, 0xc8e3], /* Hangul Syllable */ + [0xc8e4, 0xc8e4], /* Hangul Syllable */ + [0xc8e5, 0xc8e5], /* Hangul Syllable */ + [0xc8e6, 0xc8e6], /* Hangul Syllable */ + [0xc8e7, 0xc8e7], /* Hangul Syllable */ + [0xc8e8, 0xc8e8], /* Hangul Syllable */ + [0xc8e9, 0xc8e9], /* Hangul Syllable */ + [0xc8ea, 0xc8ea], /* Hangul Syllable */ + [0xc8eb, 0xc8eb], /* Hangul Syllable */ + [0xc8ec, 0xc8ec], /* Hangul Syllable */ + [0xc8ed, 0xc8ed], /* Hangul Syllable */ + [0xc8ee, 0xc8ee], /* Hangul Syllable */ + [0xc8ef, 0xc8ef], /* Hangul Syllable */ + [0xc8f0, 0xc8f0], /* Hangul Syllable */ + [0xc8f1, 0xc8f1], /* Hangul Syllable */ + [0xc8f2, 0xc8f2], /* Hangul Syllable */ + [0xc8f3, 0xc8f3], /* Hangul Syllable */ + [0xc8f4, 0xc8f4], /* Hangul Syllable */ + [0xc8f5, 0xc8f5], /* Hangul Syllable */ + [0xc8f6, 0xc8f6], /* Hangul Syllable */ + [0xc8f7, 0xc8f7], /* Hangul Syllable */ + [0xc8f8, 0xc8f8], /* Hangul Syllable */ + [0xc8f9, 0xc8f9], /* Hangul Syllable */ + [0xc8fa, 0xc8fa], /* Hangul Syllable */ + [0xc8fb, 0xc8fb], /* Hangul Syllable */ + [0xc8fc, 0xc8fc], /* Hangul Syllable */ + [0xc8fd, 0xc8fd], /* Hangul Syllable */ + [0xc8fe, 0xc8fe], /* Hangul Syllable */ + [0xc8ff, 0xc8ff], /* Hangul Syllable */ + [0xc900, 0xc900], /* Hangul Syllable */ + [0xc901, 0xc901], /* Hangul Syllable */ + [0xc902, 0xc902], /* Hangul Syllable */ + [0xc903, 0xc903], /* Hangul Syllable */ + [0xc904, 0xc904], /* Hangul Syllable */ + [0xc905, 0xc905], /* Hangul Syllable */ + [0xc906, 0xc906], /* Hangul Syllable */ + [0xc907, 0xc907], /* Hangul Syllable */ + [0xc908, 0xc908], /* Hangul Syllable */ + [0xc909, 0xc909], /* Hangul Syllable */ + [0xc90a, 0xc90a], /* Hangul Syllable */ + [0xc90b, 0xc90b], /* Hangul Syllable */ + [0xc90c, 0xc90c], /* Hangul Syllable */ + [0xc90d, 0xc90d], /* Hangul Syllable */ + [0xc90e, 0xc90e], /* Hangul Syllable */ + [0xc90f, 0xc90f], /* Hangul Syllable */ + [0xc910, 0xc910], /* Hangul Syllable */ + [0xc911, 0xc911], /* Hangul Syllable */ + [0xc912, 0xc912], /* Hangul Syllable */ + [0xc913, 0xc913], /* Hangul Syllable */ + [0xc914, 0xc914], /* Hangul Syllable */ + [0xc915, 0xc915], /* Hangul Syllable */ + [0xc916, 0xc916], /* Hangul Syllable */ + [0xc917, 0xc917], /* Hangul Syllable */ + [0xc918, 0xc918], /* Hangul Syllable */ + [0xc919, 0xc919], /* Hangul Syllable */ + [0xc91a, 0xc91a], /* Hangul Syllable */ + [0xc91b, 0xc91b], /* Hangul Syllable */ + [0xc91c, 0xc91c], /* Hangul Syllable */ + [0xc91d, 0xc91d], /* Hangul Syllable */ + [0xc91e, 0xc91e], /* Hangul Syllable */ + [0xc91f, 0xc91f], /* Hangul Syllable */ + [0xc920, 0xc920], /* Hangul Syllable */ + [0xc921, 0xc921], /* Hangul Syllable */ + [0xc922, 0xc922], /* Hangul Syllable */ + [0xc923, 0xc923], /* Hangul Syllable */ + [0xc924, 0xc924], /* Hangul Syllable */ + [0xc925, 0xc925], /* Hangul Syllable */ + [0xc926, 0xc926], /* Hangul Syllable */ + [0xc927, 0xc927], /* Hangul Syllable */ + [0xc928, 0xc928], /* Hangul Syllable */ + [0xc929, 0xc929], /* Hangul Syllable */ + [0xc92a, 0xc92a], /* Hangul Syllable */ + [0xc92b, 0xc92b], /* Hangul Syllable */ + [0xc92c, 0xc92c], /* Hangul Syllable */ + [0xc92d, 0xc92d], /* Hangul Syllable */ + [0xc92e, 0xc92e], /* Hangul Syllable */ + [0xc92f, 0xc92f], /* Hangul Syllable */ + [0xc930, 0xc930], /* Hangul Syllable */ + [0xc931, 0xc931], /* Hangul Syllable */ + [0xc932, 0xc932], /* Hangul Syllable */ + [0xc933, 0xc933], /* Hangul Syllable */ + [0xc934, 0xc934], /* Hangul Syllable */ + [0xc935, 0xc935], /* Hangul Syllable */ + [0xc936, 0xc936], /* Hangul Syllable */ + [0xc937, 0xc937], /* Hangul Syllable */ + [0xc938, 0xc938], /* Hangul Syllable */ + [0xc939, 0xc939], /* Hangul Syllable */ + [0xc93a, 0xc93a], /* Hangul Syllable */ + [0xc93b, 0xc93b], /* Hangul Syllable */ + [0xc93c, 0xc93c], /* Hangul Syllable */ + [0xc93d, 0xc93d], /* Hangul Syllable */ + [0xc93e, 0xc93e], /* Hangul Syllable */ + [0xc93f, 0xc93f], /* Hangul Syllable */ + [0xc940, 0xc940], /* Hangul Syllable */ + [0xc941, 0xc941], /* Hangul Syllable */ + [0xc942, 0xc942], /* Hangul Syllable */ + [0xc943, 0xc943], /* Hangul Syllable */ + [0xc944, 0xc944], /* Hangul Syllable */ + [0xc945, 0xc945], /* Hangul Syllable */ + [0xc946, 0xc946], /* Hangul Syllable */ + [0xc947, 0xc947], /* Hangul Syllable */ + [0xc948, 0xc948], /* Hangul Syllable */ + [0xc949, 0xc949], /* Hangul Syllable */ + [0xc94a, 0xc94a], /* Hangul Syllable */ + [0xc94b, 0xc94b], /* Hangul Syllable */ + [0xc94c, 0xc94c], /* Hangul Syllable */ + [0xc94d, 0xc94d], /* Hangul Syllable */ + [0xc94e, 0xc94e], /* Hangul Syllable */ + [0xc94f, 0xc94f], /* Hangul Syllable */ + [0xc950, 0xc950], /* Hangul Syllable */ + [0xc951, 0xc951], /* Hangul Syllable */ + [0xc952, 0xc952], /* Hangul Syllable */ + [0xc953, 0xc953], /* Hangul Syllable */ + [0xc954, 0xc954], /* Hangul Syllable */ + [0xc955, 0xc955], /* Hangul Syllable */ + [0xc956, 0xc956], /* Hangul Syllable */ + [0xc957, 0xc957], /* Hangul Syllable */ + [0xc958, 0xc958], /* Hangul Syllable */ + [0xc959, 0xc959], /* Hangul Syllable */ + [0xc95a, 0xc95a], /* Hangul Syllable */ + [0xc95b, 0xc95b], /* Hangul Syllable */ + [0xc95c, 0xc95c], /* Hangul Syllable */ + [0xc95d, 0xc95d], /* Hangul Syllable */ + [0xc95e, 0xc95e], /* Hangul Syllable */ + [0xc95f, 0xc95f], /* Hangul Syllable */ + [0xc960, 0xc960], /* Hangul Syllable */ + [0xc961, 0xc961], /* Hangul Syllable */ + [0xc962, 0xc962], /* Hangul Syllable */ + [0xc963, 0xc963], /* Hangul Syllable */ + [0xc964, 0xc964], /* Hangul Syllable */ + [0xc965, 0xc965], /* Hangul Syllable */ + [0xc966, 0xc966], /* Hangul Syllable */ + [0xc967, 0xc967], /* Hangul Syllable */ + [0xc968, 0xc968], /* Hangul Syllable */ + [0xc969, 0xc969], /* Hangul Syllable */ + [0xc96a, 0xc96a], /* Hangul Syllable */ + [0xc96b, 0xc96b], /* Hangul Syllable */ + [0xc96c, 0xc96c], /* Hangul Syllable */ + [0xc96d, 0xc96d], /* Hangul Syllable */ + [0xc96e, 0xc96e], /* Hangul Syllable */ + [0xc96f, 0xc96f], /* Hangul Syllable */ + [0xc970, 0xc970], /* Hangul Syllable */ + [0xc971, 0xc971], /* Hangul Syllable */ + [0xc972, 0xc972], /* Hangul Syllable */ + [0xc973, 0xc973], /* Hangul Syllable */ + [0xc974, 0xc974], /* Hangul Syllable */ + [0xc975, 0xc975], /* Hangul Syllable */ + [0xc976, 0xc976], /* Hangul Syllable */ + [0xc977, 0xc977], /* Hangul Syllable */ + [0xc978, 0xc978], /* Hangul Syllable */ + [0xc979, 0xc979], /* Hangul Syllable */ + [0xc97a, 0xc97a], /* Hangul Syllable */ + [0xc97b, 0xc97b], /* Hangul Syllable */ + [0xc97c, 0xc97c], /* Hangul Syllable */ + [0xc97d, 0xc97d], /* Hangul Syllable */ + [0xc97e, 0xc97e], /* Hangul Syllable */ + [0xc97f, 0xc97f], /* Hangul Syllable */ + [0xc980, 0xc980], /* Hangul Syllable */ + [0xc981, 0xc981], /* Hangul Syllable */ + [0xc982, 0xc982], /* Hangul Syllable */ + [0xc983, 0xc983], /* Hangul Syllable */ + [0xc984, 0xc984], /* Hangul Syllable */ + [0xc985, 0xc985], /* Hangul Syllable */ + [0xc986, 0xc986], /* Hangul Syllable */ + [0xc987, 0xc987], /* Hangul Syllable */ + [0xc988, 0xc988], /* Hangul Syllable */ + [0xc989, 0xc989], /* Hangul Syllable */ + [0xc98a, 0xc98a], /* Hangul Syllable */ + [0xc98b, 0xc98b], /* Hangul Syllable */ + [0xc98c, 0xc98c], /* Hangul Syllable */ + [0xc98d, 0xc98d], /* Hangul Syllable */ + [0xc98e, 0xc98e], /* Hangul Syllable */ + [0xc98f, 0xc98f], /* Hangul Syllable */ + [0xc990, 0xc990], /* Hangul Syllable */ + [0xc991, 0xc991], /* Hangul Syllable */ + [0xc992, 0xc992], /* Hangul Syllable */ + [0xc993, 0xc993], /* Hangul Syllable */ + [0xc994, 0xc994], /* Hangul Syllable */ + [0xc995, 0xc995], /* Hangul Syllable */ + [0xc996, 0xc996], /* Hangul Syllable */ + [0xc997, 0xc997], /* Hangul Syllable */ + [0xc998, 0xc998], /* Hangul Syllable */ + [0xc999, 0xc999], /* Hangul Syllable */ + [0xc99a, 0xc99a], /* Hangul Syllable */ + [0xc99b, 0xc99b], /* Hangul Syllable */ + [0xc99c, 0xc99c], /* Hangul Syllable */ + [0xc99d, 0xc99d], /* Hangul Syllable */ + [0xc99e, 0xc99e], /* Hangul Syllable */ + [0xc99f, 0xc99f], /* Hangul Syllable */ + [0xc9a0, 0xc9a0], /* Hangul Syllable */ + [0xc9a1, 0xc9a1], /* Hangul Syllable */ + [0xc9a2, 0xc9a2], /* Hangul Syllable */ + [0xc9a3, 0xc9a3], /* Hangul Syllable */ + [0xc9a4, 0xc9a4], /* Hangul Syllable */ + [0xc9a5, 0xc9a5], /* Hangul Syllable */ + [0xc9a6, 0xc9a6], /* Hangul Syllable */ + [0xc9a7, 0xc9a7], /* Hangul Syllable */ + [0xc9a8, 0xc9a8], /* Hangul Syllable */ + [0xc9a9, 0xc9a9], /* Hangul Syllable */ + [0xc9aa, 0xc9aa], /* Hangul Syllable */ + [0xc9ab, 0xc9ab], /* Hangul Syllable */ + [0xc9ac, 0xc9ac], /* Hangul Syllable */ + [0xc9ad, 0xc9ad], /* Hangul Syllable */ + [0xc9ae, 0xc9ae], /* Hangul Syllable */ + [0xc9af, 0xc9af], /* Hangul Syllable */ + [0xc9b0, 0xc9b0], /* Hangul Syllable */ + [0xc9b1, 0xc9b1], /* Hangul Syllable */ + [0xc9b2, 0xc9b2], /* Hangul Syllable */ + [0xc9b3, 0xc9b3], /* Hangul Syllable */ + [0xc9b4, 0xc9b4], /* Hangul Syllable */ + [0xc9b5, 0xc9b5], /* Hangul Syllable */ + [0xc9b6, 0xc9b6], /* Hangul Syllable */ + [0xc9b7, 0xc9b7], /* Hangul Syllable */ + [0xc9b8, 0xc9b8], /* Hangul Syllable */ + [0xc9b9, 0xc9b9], /* Hangul Syllable */ + [0xc9ba, 0xc9ba], /* Hangul Syllable */ + [0xc9bb, 0xc9bb], /* Hangul Syllable */ + [0xc9bc, 0xc9bc], /* Hangul Syllable */ + [0xc9bd, 0xc9bd], /* Hangul Syllable */ + [0xc9be, 0xc9be], /* Hangul Syllable */ + [0xc9bf, 0xc9bf], /* Hangul Syllable */ + [0xc9c0, 0xc9c0], /* Hangul Syllable */ + [0xc9c1, 0xc9c1], /* Hangul Syllable */ + [0xc9c2, 0xc9c2], /* Hangul Syllable */ + [0xc9c3, 0xc9c3], /* Hangul Syllable */ + [0xc9c4, 0xc9c4], /* Hangul Syllable */ + [0xc9c5, 0xc9c5], /* Hangul Syllable */ + [0xc9c6, 0xc9c6], /* Hangul Syllable */ + [0xc9c7, 0xc9c7], /* Hangul Syllable */ + [0xc9c8, 0xc9c8], /* Hangul Syllable */ + [0xc9c9, 0xc9c9], /* Hangul Syllable */ + [0xc9ca, 0xc9ca], /* Hangul Syllable */ + [0xc9cb, 0xc9cb], /* Hangul Syllable */ + [0xc9cc, 0xc9cc], /* Hangul Syllable */ + [0xc9cd, 0xc9cd], /* Hangul Syllable */ + [0xc9ce, 0xc9ce], /* Hangul Syllable */ + [0xc9cf, 0xc9cf], /* Hangul Syllable */ + [0xc9d0, 0xc9d0], /* Hangul Syllable */ + [0xc9d1, 0xc9d1], /* Hangul Syllable */ + [0xc9d2, 0xc9d2], /* Hangul Syllable */ + [0xc9d3, 0xc9d3], /* Hangul Syllable */ + [0xc9d4, 0xc9d4], /* Hangul Syllable */ + [0xc9d5, 0xc9d5], /* Hangul Syllable */ + [0xc9d6, 0xc9d6], /* Hangul Syllable */ + [0xc9d7, 0xc9d7], /* Hangul Syllable */ + [0xc9d8, 0xc9d8], /* Hangul Syllable */ + [0xc9d9, 0xc9d9], /* Hangul Syllable */ + [0xc9da, 0xc9da], /* Hangul Syllable */ + [0xc9db, 0xc9db], /* Hangul Syllable */ + [0xc9dc, 0xc9dc], /* Hangul Syllable */ + [0xc9dd, 0xc9dd], /* Hangul Syllable */ + [0xc9de, 0xc9de], /* Hangul Syllable */ + [0xc9df, 0xc9df], /* Hangul Syllable */ + [0xc9e0, 0xc9e0], /* Hangul Syllable */ + [0xc9e1, 0xc9e1], /* Hangul Syllable */ + [0xc9e2, 0xc9e2], /* Hangul Syllable */ + [0xc9e3, 0xc9e3], /* Hangul Syllable */ + [0xc9e4, 0xc9e4], /* Hangul Syllable */ + [0xc9e5, 0xc9e5], /* Hangul Syllable */ + [0xc9e6, 0xc9e6], /* Hangul Syllable */ + [0xc9e7, 0xc9e7], /* Hangul Syllable */ + [0xc9e8, 0xc9e8], /* Hangul Syllable */ + [0xc9e9, 0xc9e9], /* Hangul Syllable */ + [0xc9ea, 0xc9ea], /* Hangul Syllable */ + [0xc9eb, 0xc9eb], /* Hangul Syllable */ + [0xc9ec, 0xc9ec], /* Hangul Syllable */ + [0xc9ed, 0xc9ed], /* Hangul Syllable */ + [0xc9ee, 0xc9ee], /* Hangul Syllable */ + [0xc9ef, 0xc9ef], /* Hangul Syllable */ + [0xc9f0, 0xc9f0], /* Hangul Syllable */ + [0xc9f1, 0xc9f1], /* Hangul Syllable */ + [0xc9f2, 0xc9f2], /* Hangul Syllable */ + [0xc9f3, 0xc9f3], /* Hangul Syllable */ + [0xc9f4, 0xc9f4], /* Hangul Syllable */ + [0xc9f5, 0xc9f5], /* Hangul Syllable */ + [0xc9f6, 0xc9f6], /* Hangul Syllable */ + [0xc9f7, 0xc9f7], /* Hangul Syllable */ + [0xc9f8, 0xc9f8], /* Hangul Syllable */ + [0xc9f9, 0xc9f9], /* Hangul Syllable */ + [0xc9fa, 0xc9fa], /* Hangul Syllable */ + [0xc9fb, 0xc9fb], /* Hangul Syllable */ + [0xc9fc, 0xc9fc], /* Hangul Syllable */ + [0xc9fd, 0xc9fd], /* Hangul Syllable */ + [0xc9fe, 0xc9fe], /* Hangul Syllable */ + [0xc9ff, 0xc9ff], /* Hangul Syllable */ + [0xca00, 0xca00], /* Hangul Syllable */ + [0xca01, 0xca01], /* Hangul Syllable */ + [0xca02, 0xca02], /* Hangul Syllable */ + [0xca03, 0xca03], /* Hangul Syllable */ + [0xca04, 0xca04], /* Hangul Syllable */ + [0xca05, 0xca05], /* Hangul Syllable */ + [0xca06, 0xca06], /* Hangul Syllable */ + [0xca07, 0xca07], /* Hangul Syllable */ + [0xca08, 0xca08], /* Hangul Syllable */ + [0xca09, 0xca09], /* Hangul Syllable */ + [0xca0a, 0xca0a], /* Hangul Syllable */ + [0xca0b, 0xca0b], /* Hangul Syllable */ + [0xca0c, 0xca0c], /* Hangul Syllable */ + [0xca0d, 0xca0d], /* Hangul Syllable */ + [0xca0e, 0xca0e], /* Hangul Syllable */ + [0xca0f, 0xca0f], /* Hangul Syllable */ + [0xca10, 0xca10], /* Hangul Syllable */ + [0xca11, 0xca11], /* Hangul Syllable */ + [0xca12, 0xca12], /* Hangul Syllable */ + [0xca13, 0xca13], /* Hangul Syllable */ + [0xca14, 0xca14], /* Hangul Syllable */ + [0xca15, 0xca15], /* Hangul Syllable */ + [0xca16, 0xca16], /* Hangul Syllable */ + [0xca17, 0xca17], /* Hangul Syllable */ + [0xca18, 0xca18], /* Hangul Syllable */ + [0xca19, 0xca19], /* Hangul Syllable */ + [0xca1a, 0xca1a], /* Hangul Syllable */ + [0xca1b, 0xca1b], /* Hangul Syllable */ + [0xca1c, 0xca1c], /* Hangul Syllable */ + [0xca1d, 0xca1d], /* Hangul Syllable */ + [0xca1e, 0xca1e], /* Hangul Syllable */ + [0xca1f, 0xca1f], /* Hangul Syllable */ + [0xca20, 0xca20], /* Hangul Syllable */ + [0xca21, 0xca21], /* Hangul Syllable */ + [0xca22, 0xca22], /* Hangul Syllable */ + [0xca23, 0xca23], /* Hangul Syllable */ + [0xca24, 0xca24], /* Hangul Syllable */ + [0xca25, 0xca25], /* Hangul Syllable */ + [0xca26, 0xca26], /* Hangul Syllable */ + [0xca27, 0xca27], /* Hangul Syllable */ + [0xca28, 0xca28], /* Hangul Syllable */ + [0xca29, 0xca29], /* Hangul Syllable */ + [0xca2a, 0xca2a], /* Hangul Syllable */ + [0xca2b, 0xca2b], /* Hangul Syllable */ + [0xca2c, 0xca2c], /* Hangul Syllable */ + [0xca2d, 0xca2d], /* Hangul Syllable */ + [0xca2e, 0xca2e], /* Hangul Syllable */ + [0xca2f, 0xca2f], /* Hangul Syllable */ + [0xca30, 0xca30], /* Hangul Syllable */ + [0xca31, 0xca31], /* Hangul Syllable */ + [0xca32, 0xca32], /* Hangul Syllable */ + [0xca33, 0xca33], /* Hangul Syllable */ + [0xca34, 0xca34], /* Hangul Syllable */ + [0xca35, 0xca35], /* Hangul Syllable */ + [0xca36, 0xca36], /* Hangul Syllable */ + [0xca37, 0xca37], /* Hangul Syllable */ + [0xca38, 0xca38], /* Hangul Syllable */ + [0xca39, 0xca39], /* Hangul Syllable */ + [0xca3a, 0xca3a], /* Hangul Syllable */ + [0xca3b, 0xca3b], /* Hangul Syllable */ + [0xca3c, 0xca3c], /* Hangul Syllable */ + [0xca3d, 0xca3d], /* Hangul Syllable */ + [0xca3e, 0xca3e], /* Hangul Syllable */ + [0xca3f, 0xca3f], /* Hangul Syllable */ + [0xca40, 0xca40], /* Hangul Syllable */ + [0xca41, 0xca41], /* Hangul Syllable */ + [0xca42, 0xca42], /* Hangul Syllable */ + [0xca43, 0xca43], /* Hangul Syllable */ + [0xca44, 0xca44], /* Hangul Syllable */ + [0xca45, 0xca45], /* Hangul Syllable */ + [0xca46, 0xca46], /* Hangul Syllable */ + [0xca47, 0xca47], /* Hangul Syllable */ + [0xca48, 0xca48], /* Hangul Syllable */ + [0xca49, 0xca49], /* Hangul Syllable */ + [0xca4a, 0xca4a], /* Hangul Syllable */ + [0xca4b, 0xca4b], /* Hangul Syllable */ + [0xca4c, 0xca4c], /* Hangul Syllable */ + [0xca4d, 0xca4d], /* Hangul Syllable */ + [0xca4e, 0xca4e], /* Hangul Syllable */ + [0xca4f, 0xca4f], /* Hangul Syllable */ + [0xca50, 0xca50], /* Hangul Syllable */ + [0xca51, 0xca51], /* Hangul Syllable */ + [0xca52, 0xca52], /* Hangul Syllable */ + [0xca53, 0xca53], /* Hangul Syllable */ + [0xca54, 0xca54], /* Hangul Syllable */ + [0xca55, 0xca55], /* Hangul Syllable */ + [0xca56, 0xca56], /* Hangul Syllable */ + [0xca57, 0xca57], /* Hangul Syllable */ + [0xca58, 0xca58], /* Hangul Syllable */ + [0xca59, 0xca59], /* Hangul Syllable */ + [0xca5a, 0xca5a], /* Hangul Syllable */ + [0xca5b, 0xca5b], /* Hangul Syllable */ + [0xca5c, 0xca5c], /* Hangul Syllable */ + [0xca5d, 0xca5d], /* Hangul Syllable */ + [0xca5e, 0xca5e], /* Hangul Syllable */ + [0xca5f, 0xca5f], /* Hangul Syllable */ + [0xca60, 0xca60], /* Hangul Syllable */ + [0xca61, 0xca61], /* Hangul Syllable */ + [0xca62, 0xca62], /* Hangul Syllable */ + [0xca63, 0xca63], /* Hangul Syllable */ + [0xca64, 0xca64], /* Hangul Syllable */ + [0xca65, 0xca65], /* Hangul Syllable */ + [0xca66, 0xca66], /* Hangul Syllable */ + [0xca67, 0xca67], /* Hangul Syllable */ + [0xca68, 0xca68], /* Hangul Syllable */ + [0xca69, 0xca69], /* Hangul Syllable */ + [0xca6a, 0xca6a], /* Hangul Syllable */ + [0xca6b, 0xca6b], /* Hangul Syllable */ + [0xca6c, 0xca6c], /* Hangul Syllable */ + [0xca6d, 0xca6d], /* Hangul Syllable */ + [0xca6e, 0xca6e], /* Hangul Syllable */ + [0xca6f, 0xca6f], /* Hangul Syllable */ + [0xca70, 0xca70], /* Hangul Syllable */ + [0xca71, 0xca71], /* Hangul Syllable */ + [0xca72, 0xca72], /* Hangul Syllable */ + [0xca73, 0xca73], /* Hangul Syllable */ + [0xca74, 0xca74], /* Hangul Syllable */ + [0xca75, 0xca75], /* Hangul Syllable */ + [0xca76, 0xca76], /* Hangul Syllable */ + [0xca77, 0xca77], /* Hangul Syllable */ + [0xca78, 0xca78], /* Hangul Syllable */ + [0xca79, 0xca79], /* Hangul Syllable */ + [0xca7a, 0xca7a], /* Hangul Syllable */ + [0xca7b, 0xca7b], /* Hangul Syllable */ + [0xca7c, 0xca7c], /* Hangul Syllable */ + [0xca7d, 0xca7d], /* Hangul Syllable */ + [0xca7e, 0xca7e], /* Hangul Syllable */ + [0xca7f, 0xca7f], /* Hangul Syllable */ + [0xca80, 0xca80], /* Hangul Syllable */ + [0xca81, 0xca81], /* Hangul Syllable */ + [0xca82, 0xca82], /* Hangul Syllable */ + [0xca83, 0xca83], /* Hangul Syllable */ + [0xca84, 0xca84], /* Hangul Syllable */ + [0xca85, 0xca85], /* Hangul Syllable */ + [0xca86, 0xca86], /* Hangul Syllable */ + [0xca87, 0xca87], /* Hangul Syllable */ + [0xca88, 0xca88], /* Hangul Syllable */ + [0xca89, 0xca89], /* Hangul Syllable */ + [0xca8a, 0xca8a], /* Hangul Syllable */ + [0xca8b, 0xca8b], /* Hangul Syllable */ + [0xca8c, 0xca8c], /* Hangul Syllable */ + [0xca8d, 0xca8d], /* Hangul Syllable */ + [0xca8e, 0xca8e], /* Hangul Syllable */ + [0xca8f, 0xca8f], /* Hangul Syllable */ + [0xca90, 0xca90], /* Hangul Syllable */ + [0xca91, 0xca91], /* Hangul Syllable */ + [0xca92, 0xca92], /* Hangul Syllable */ + [0xca93, 0xca93], /* Hangul Syllable */ + [0xca94, 0xca94], /* Hangul Syllable */ + [0xca95, 0xca95], /* Hangul Syllable */ + [0xca96, 0xca96], /* Hangul Syllable */ + [0xca97, 0xca97], /* Hangul Syllable */ + [0xca98, 0xca98], /* Hangul Syllable */ + [0xca99, 0xca99], /* Hangul Syllable */ + [0xca9a, 0xca9a], /* Hangul Syllable */ + [0xca9b, 0xca9b], /* Hangul Syllable */ + [0xca9c, 0xca9c], /* Hangul Syllable */ + [0xca9d, 0xca9d], /* Hangul Syllable */ + [0xca9e, 0xca9e], /* Hangul Syllable */ + [0xca9f, 0xca9f], /* Hangul Syllable */ + [0xcaa0, 0xcaa0], /* Hangul Syllable */ + [0xcaa1, 0xcaa1], /* Hangul Syllable */ + [0xcaa2, 0xcaa2], /* Hangul Syllable */ + [0xcaa3, 0xcaa3], /* Hangul Syllable */ + [0xcaa4, 0xcaa4], /* Hangul Syllable */ + [0xcaa5, 0xcaa5], /* Hangul Syllable */ + [0xcaa6, 0xcaa6], /* Hangul Syllable */ + [0xcaa7, 0xcaa7], /* Hangul Syllable */ + [0xcaa8, 0xcaa8], /* Hangul Syllable */ + [0xcaa9, 0xcaa9], /* Hangul Syllable */ + [0xcaaa, 0xcaaa], /* Hangul Syllable */ + [0xcaab, 0xcaab], /* Hangul Syllable */ + [0xcaac, 0xcaac], /* Hangul Syllable */ + [0xcaad, 0xcaad], /* Hangul Syllable */ + [0xcaae, 0xcaae], /* Hangul Syllable */ + [0xcaaf, 0xcaaf], /* Hangul Syllable */ + [0xcab0, 0xcab0], /* Hangul Syllable */ + [0xcab1, 0xcab1], /* Hangul Syllable */ + [0xcab2, 0xcab2], /* Hangul Syllable */ + [0xcab3, 0xcab3], /* Hangul Syllable */ + [0xcab4, 0xcab4], /* Hangul Syllable */ + [0xcab5, 0xcab5], /* Hangul Syllable */ + [0xcab6, 0xcab6], /* Hangul Syllable */ + [0xcab7, 0xcab7], /* Hangul Syllable */ + [0xcab8, 0xcab8], /* Hangul Syllable */ + [0xcab9, 0xcab9], /* Hangul Syllable */ + [0xcaba, 0xcaba], /* Hangul Syllable */ + [0xcabb, 0xcabb], /* Hangul Syllable */ + [0xcabc, 0xcabc], /* Hangul Syllable */ + [0xcabd, 0xcabd], /* Hangul Syllable */ + [0xcabe, 0xcabe], /* Hangul Syllable */ + [0xcabf, 0xcabf], /* Hangul Syllable */ + [0xcac0, 0xcac0], /* Hangul Syllable */ + [0xcac1, 0xcac1], /* Hangul Syllable */ + [0xcac2, 0xcac2], /* Hangul Syllable */ + [0xcac3, 0xcac3], /* Hangul Syllable */ + [0xcac4, 0xcac4], /* Hangul Syllable */ + [0xcac5, 0xcac5], /* Hangul Syllable */ + [0xcac6, 0xcac6], /* Hangul Syllable */ + [0xcac7, 0xcac7], /* Hangul Syllable */ + [0xcac8, 0xcac8], /* Hangul Syllable */ + [0xcac9, 0xcac9], /* Hangul Syllable */ + [0xcaca, 0xcaca], /* Hangul Syllable */ + [0xcacb, 0xcacb], /* Hangul Syllable */ + [0xcacc, 0xcacc], /* Hangul Syllable */ + [0xcacd, 0xcacd], /* Hangul Syllable */ + [0xcace, 0xcace], /* Hangul Syllable */ + [0xcacf, 0xcacf], /* Hangul Syllable */ + [0xcad0, 0xcad0], /* Hangul Syllable */ + [0xcad1, 0xcad1], /* Hangul Syllable */ + [0xcad2, 0xcad2], /* Hangul Syllable */ + [0xcad3, 0xcad3], /* Hangul Syllable */ + [0xcad4, 0xcad4], /* Hangul Syllable */ + [0xcad5, 0xcad5], /* Hangul Syllable */ + [0xcad6, 0xcad6], /* Hangul Syllable */ + [0xcad7, 0xcad7], /* Hangul Syllable */ + [0xcad8, 0xcad8], /* Hangul Syllable */ + [0xcad9, 0xcad9], /* Hangul Syllable */ + [0xcada, 0xcada], /* Hangul Syllable */ + [0xcadb, 0xcadb], /* Hangul Syllable */ + [0xcadc, 0xcadc], /* Hangul Syllable */ + [0xcadd, 0xcadd], /* Hangul Syllable */ + [0xcade, 0xcade], /* Hangul Syllable */ + [0xcadf, 0xcadf], /* Hangul Syllable */ + [0xcae0, 0xcae0], /* Hangul Syllable */ + [0xcae1, 0xcae1], /* Hangul Syllable */ + [0xcae2, 0xcae2], /* Hangul Syllable */ + [0xcae3, 0xcae3], /* Hangul Syllable */ + [0xcae4, 0xcae4], /* Hangul Syllable */ + [0xcae5, 0xcae5], /* Hangul Syllable */ + [0xcae6, 0xcae6], /* Hangul Syllable */ + [0xcae7, 0xcae7], /* Hangul Syllable */ + [0xcae8, 0xcae8], /* Hangul Syllable */ + [0xcae9, 0xcae9], /* Hangul Syllable */ + [0xcaea, 0xcaea], /* Hangul Syllable */ + [0xcaeb, 0xcaeb], /* Hangul Syllable */ + [0xcaec, 0xcaec], /* Hangul Syllable */ + [0xcaed, 0xcaed], /* Hangul Syllable */ + [0xcaee, 0xcaee], /* Hangul Syllable */ + [0xcaef, 0xcaef], /* Hangul Syllable */ + [0xcaf0, 0xcaf0], /* Hangul Syllable */ + [0xcaf1, 0xcaf1], /* Hangul Syllable */ + [0xcaf2, 0xcaf2], /* Hangul Syllable */ + [0xcaf3, 0xcaf3], /* Hangul Syllable */ + [0xcaf4, 0xcaf4], /* Hangul Syllable */ + [0xcaf5, 0xcaf5], /* Hangul Syllable */ + [0xcaf6, 0xcaf6], /* Hangul Syllable */ + [0xcaf7, 0xcaf7], /* Hangul Syllable */ + [0xcaf8, 0xcaf8], /* Hangul Syllable */ + [0xcaf9, 0xcaf9], /* Hangul Syllable */ + [0xcafa, 0xcafa], /* Hangul Syllable */ + [0xcafb, 0xcafb], /* Hangul Syllable */ + [0xcafc, 0xcafc], /* Hangul Syllable */ + [0xcafd, 0xcafd], /* Hangul Syllable */ + [0xcafe, 0xcafe], /* Hangul Syllable */ + [0xcaff, 0xcaff], /* Hangul Syllable */ + [0xcb00, 0xcb00], /* Hangul Syllable */ + [0xcb01, 0xcb01], /* Hangul Syllable */ + [0xcb02, 0xcb02], /* Hangul Syllable */ + [0xcb03, 0xcb03], /* Hangul Syllable */ + [0xcb04, 0xcb04], /* Hangul Syllable */ + [0xcb05, 0xcb05], /* Hangul Syllable */ + [0xcb06, 0xcb06], /* Hangul Syllable */ + [0xcb07, 0xcb07], /* Hangul Syllable */ + [0xcb08, 0xcb08], /* Hangul Syllable */ + [0xcb09, 0xcb09], /* Hangul Syllable */ + [0xcb0a, 0xcb0a], /* Hangul Syllable */ + [0xcb0b, 0xcb0b], /* Hangul Syllable */ + [0xcb0c, 0xcb0c], /* Hangul Syllable */ + [0xcb0d, 0xcb0d], /* Hangul Syllable */ + [0xcb0e, 0xcb0e], /* Hangul Syllable */ + [0xcb0f, 0xcb0f], /* Hangul Syllable */ + [0xcb10, 0xcb10], /* Hangul Syllable */ + [0xcb11, 0xcb11], /* Hangul Syllable */ + [0xcb12, 0xcb12], /* Hangul Syllable */ + [0xcb13, 0xcb13], /* Hangul Syllable */ + [0xcb14, 0xcb14], /* Hangul Syllable */ + [0xcb15, 0xcb15], /* Hangul Syllable */ + [0xcb16, 0xcb16], /* Hangul Syllable */ + [0xcb17, 0xcb17], /* Hangul Syllable */ + [0xcb18, 0xcb18], /* Hangul Syllable */ + [0xcb19, 0xcb19], /* Hangul Syllable */ + [0xcb1a, 0xcb1a], /* Hangul Syllable */ + [0xcb1b, 0xcb1b], /* Hangul Syllable */ + [0xcb1c, 0xcb1c], /* Hangul Syllable */ + [0xcb1d, 0xcb1d], /* Hangul Syllable */ + [0xcb1e, 0xcb1e], /* Hangul Syllable */ + [0xcb1f, 0xcb1f], /* Hangul Syllable */ + [0xcb20, 0xcb20], /* Hangul Syllable */ + [0xcb21, 0xcb21], /* Hangul Syllable */ + [0xcb22, 0xcb22], /* Hangul Syllable */ + [0xcb23, 0xcb23], /* Hangul Syllable */ + [0xcb24, 0xcb24], /* Hangul Syllable */ + [0xcb25, 0xcb25], /* Hangul Syllable */ + [0xcb26, 0xcb26], /* Hangul Syllable */ + [0xcb27, 0xcb27], /* Hangul Syllable */ + [0xcb28, 0xcb28], /* Hangul Syllable */ + [0xcb29, 0xcb29], /* Hangul Syllable */ + [0xcb2a, 0xcb2a], /* Hangul Syllable */ + [0xcb2b, 0xcb2b], /* Hangul Syllable */ + [0xcb2c, 0xcb2c], /* Hangul Syllable */ + [0xcb2d, 0xcb2d], /* Hangul Syllable */ + [0xcb2e, 0xcb2e], /* Hangul Syllable */ + [0xcb2f, 0xcb2f], /* Hangul Syllable */ + [0xcb30, 0xcb30], /* Hangul Syllable */ + [0xcb31, 0xcb31], /* Hangul Syllable */ + [0xcb32, 0xcb32], /* Hangul Syllable */ + [0xcb33, 0xcb33], /* Hangul Syllable */ + [0xcb34, 0xcb34], /* Hangul Syllable */ + [0xcb35, 0xcb35], /* Hangul Syllable */ + [0xcb36, 0xcb36], /* Hangul Syllable */ + [0xcb37, 0xcb37], /* Hangul Syllable */ + [0xcb38, 0xcb38], /* Hangul Syllable */ + [0xcb39, 0xcb39], /* Hangul Syllable */ + [0xcb3a, 0xcb3a], /* Hangul Syllable */ + [0xcb3b, 0xcb3b], /* Hangul Syllable */ + [0xcb3c, 0xcb3c], /* Hangul Syllable */ + [0xcb3d, 0xcb3d], /* Hangul Syllable */ + [0xcb3e, 0xcb3e], /* Hangul Syllable */ + [0xcb3f, 0xcb3f], /* Hangul Syllable */ + [0xcb40, 0xcb40], /* Hangul Syllable */ + [0xcb41, 0xcb41], /* Hangul Syllable */ + [0xcb42, 0xcb42], /* Hangul Syllable */ + [0xcb43, 0xcb43], /* Hangul Syllable */ + [0xcb44, 0xcb44], /* Hangul Syllable */ + [0xcb45, 0xcb45], /* Hangul Syllable */ + [0xcb46, 0xcb46], /* Hangul Syllable */ + [0xcb47, 0xcb47], /* Hangul Syllable */ + [0xcb48, 0xcb48], /* Hangul Syllable */ + [0xcb49, 0xcb49], /* Hangul Syllable */ + [0xcb4a, 0xcb4a], /* Hangul Syllable */ + [0xcb4b, 0xcb4b], /* Hangul Syllable */ + [0xcb4c, 0xcb4c], /* Hangul Syllable */ + [0xcb4d, 0xcb4d], /* Hangul Syllable */ + [0xcb4e, 0xcb4e], /* Hangul Syllable */ + [0xcb4f, 0xcb4f], /* Hangul Syllable */ + [0xcb50, 0xcb50], /* Hangul Syllable */ + [0xcb51, 0xcb51], /* Hangul Syllable */ + [0xcb52, 0xcb52], /* Hangul Syllable */ + [0xcb53, 0xcb53], /* Hangul Syllable */ + [0xcb54, 0xcb54], /* Hangul Syllable */ + [0xcb55, 0xcb55], /* Hangul Syllable */ + [0xcb56, 0xcb56], /* Hangul Syllable */ + [0xcb57, 0xcb57], /* Hangul Syllable */ + [0xcb58, 0xcb58], /* Hangul Syllable */ + [0xcb59, 0xcb59], /* Hangul Syllable */ + [0xcb5a, 0xcb5a], /* Hangul Syllable */ + [0xcb5b, 0xcb5b], /* Hangul Syllable */ + [0xcb5c, 0xcb5c], /* Hangul Syllable */ + [0xcb5d, 0xcb5d], /* Hangul Syllable */ + [0xcb5e, 0xcb5e], /* Hangul Syllable */ + [0xcb5f, 0xcb5f], /* Hangul Syllable */ + [0xcb60, 0xcb60], /* Hangul Syllable */ + [0xcb61, 0xcb61], /* Hangul Syllable */ + [0xcb62, 0xcb62], /* Hangul Syllable */ + [0xcb63, 0xcb63], /* Hangul Syllable */ + [0xcb64, 0xcb64], /* Hangul Syllable */ + [0xcb65, 0xcb65], /* Hangul Syllable */ + [0xcb66, 0xcb66], /* Hangul Syllable */ + [0xcb67, 0xcb67], /* Hangul Syllable */ + [0xcb68, 0xcb68], /* Hangul Syllable */ + [0xcb69, 0xcb69], /* Hangul Syllable */ + [0xcb6a, 0xcb6a], /* Hangul Syllable */ + [0xcb6b, 0xcb6b], /* Hangul Syllable */ + [0xcb6c, 0xcb6c], /* Hangul Syllable */ + [0xcb6d, 0xcb6d], /* Hangul Syllable */ + [0xcb6e, 0xcb6e], /* Hangul Syllable */ + [0xcb6f, 0xcb6f], /* Hangul Syllable */ + [0xcb70, 0xcb70], /* Hangul Syllable */ + [0xcb71, 0xcb71], /* Hangul Syllable */ + [0xcb72, 0xcb72], /* Hangul Syllable */ + [0xcb73, 0xcb73], /* Hangul Syllable */ + [0xcb74, 0xcb74], /* Hangul Syllable */ + [0xcb75, 0xcb75], /* Hangul Syllable */ + [0xcb76, 0xcb76], /* Hangul Syllable */ + [0xcb77, 0xcb77], /* Hangul Syllable */ + [0xcb78, 0xcb78], /* Hangul Syllable */ + [0xcb79, 0xcb79], /* Hangul Syllable */ + [0xcb7a, 0xcb7a], /* Hangul Syllable */ + [0xcb7b, 0xcb7b], /* Hangul Syllable */ + [0xcb7c, 0xcb7c], /* Hangul Syllable */ + [0xcb7d, 0xcb7d], /* Hangul Syllable */ + [0xcb7e, 0xcb7e], /* Hangul Syllable */ + [0xcb7f, 0xcb7f], /* Hangul Syllable */ + [0xcb80, 0xcb80], /* Hangul Syllable */ + [0xcb81, 0xcb81], /* Hangul Syllable */ + [0xcb82, 0xcb82], /* Hangul Syllable */ + [0xcb83, 0xcb83], /* Hangul Syllable */ + [0xcb84, 0xcb84], /* Hangul Syllable */ + [0xcb85, 0xcb85], /* Hangul Syllable */ + [0xcb86, 0xcb86], /* Hangul Syllable */ + [0xcb87, 0xcb87], /* Hangul Syllable */ + [0xcb88, 0xcb88], /* Hangul Syllable */ + [0xcb89, 0xcb89], /* Hangul Syllable */ + [0xcb8a, 0xcb8a], /* Hangul Syllable */ + [0xcb8b, 0xcb8b], /* Hangul Syllable */ + [0xcb8c, 0xcb8c], /* Hangul Syllable */ + [0xcb8d, 0xcb8d], /* Hangul Syllable */ + [0xcb8e, 0xcb8e], /* Hangul Syllable */ + [0xcb8f, 0xcb8f], /* Hangul Syllable */ + [0xcb90, 0xcb90], /* Hangul Syllable */ + [0xcb91, 0xcb91], /* Hangul Syllable */ + [0xcb92, 0xcb92], /* Hangul Syllable */ + [0xcb93, 0xcb93], /* Hangul Syllable */ + [0xcb94, 0xcb94], /* Hangul Syllable */ + [0xcb95, 0xcb95], /* Hangul Syllable */ + [0xcb96, 0xcb96], /* Hangul Syllable */ + [0xcb97, 0xcb97], /* Hangul Syllable */ + [0xcb98, 0xcb98], /* Hangul Syllable */ + [0xcb99, 0xcb99], /* Hangul Syllable */ + [0xcb9a, 0xcb9a], /* Hangul Syllable */ + [0xcb9b, 0xcb9b], /* Hangul Syllable */ + [0xcb9c, 0xcb9c], /* Hangul Syllable */ + [0xcb9d, 0xcb9d], /* Hangul Syllable */ + [0xcb9e, 0xcb9e], /* Hangul Syllable */ + [0xcb9f, 0xcb9f], /* Hangul Syllable */ + [0xcba0, 0xcba0], /* Hangul Syllable */ + [0xcba1, 0xcba1], /* Hangul Syllable */ + [0xcba2, 0xcba2], /* Hangul Syllable */ + [0xcba3, 0xcba3], /* Hangul Syllable */ + [0xcba4, 0xcba4], /* Hangul Syllable */ + [0xcba5, 0xcba5], /* Hangul Syllable */ + [0xcba6, 0xcba6], /* Hangul Syllable */ + [0xcba7, 0xcba7], /* Hangul Syllable */ + [0xcba8, 0xcba8], /* Hangul Syllable */ + [0xcba9, 0xcba9], /* Hangul Syllable */ + [0xcbaa, 0xcbaa], /* Hangul Syllable */ + [0xcbab, 0xcbab], /* Hangul Syllable */ + [0xcbac, 0xcbac], /* Hangul Syllable */ + [0xcbad, 0xcbad], /* Hangul Syllable */ + [0xcbae, 0xcbae], /* Hangul Syllable */ + [0xcbaf, 0xcbaf], /* Hangul Syllable */ + [0xcbb0, 0xcbb0], /* Hangul Syllable */ + [0xcbb1, 0xcbb1], /* Hangul Syllable */ + [0xcbb2, 0xcbb2], /* Hangul Syllable */ + [0xcbb3, 0xcbb3], /* Hangul Syllable */ + [0xcbb4, 0xcbb4], /* Hangul Syllable */ + [0xcbb5, 0xcbb5], /* Hangul Syllable */ + [0xcbb6, 0xcbb6], /* Hangul Syllable */ + [0xcbb7, 0xcbb7], /* Hangul Syllable */ + [0xcbb8, 0xcbb8], /* Hangul Syllable */ + [0xcbb9, 0xcbb9], /* Hangul Syllable */ + [0xcbba, 0xcbba], /* Hangul Syllable */ + [0xcbbb, 0xcbbb], /* Hangul Syllable */ + [0xcbbc, 0xcbbc], /* Hangul Syllable */ + [0xcbbd, 0xcbbd], /* Hangul Syllable */ + [0xcbbe, 0xcbbe], /* Hangul Syllable */ + [0xcbbf, 0xcbbf], /* Hangul Syllable */ + [0xcbc0, 0xcbc0], /* Hangul Syllable */ + [0xcbc1, 0xcbc1], /* Hangul Syllable */ + [0xcbc2, 0xcbc2], /* Hangul Syllable */ + [0xcbc3, 0xcbc3], /* Hangul Syllable */ + [0xcbc4, 0xcbc4], /* Hangul Syllable */ + [0xcbc5, 0xcbc5], /* Hangul Syllable */ + [0xcbc6, 0xcbc6], /* Hangul Syllable */ + [0xcbc7, 0xcbc7], /* Hangul Syllable */ + [0xcbc8, 0xcbc8], /* Hangul Syllable */ + [0xcbc9, 0xcbc9], /* Hangul Syllable */ + [0xcbca, 0xcbca], /* Hangul Syllable */ + [0xcbcb, 0xcbcb], /* Hangul Syllable */ + [0xcbcc, 0xcbcc], /* Hangul Syllable */ + [0xcbcd, 0xcbcd], /* Hangul Syllable */ + [0xcbce, 0xcbce], /* Hangul Syllable */ + [0xcbcf, 0xcbcf], /* Hangul Syllable */ + [0xcbd0, 0xcbd0], /* Hangul Syllable */ + [0xcbd1, 0xcbd1], /* Hangul Syllable */ + [0xcbd2, 0xcbd2], /* Hangul Syllable */ + [0xcbd3, 0xcbd3], /* Hangul Syllable */ + [0xcbd4, 0xcbd4], /* Hangul Syllable */ + [0xcbd5, 0xcbd5], /* Hangul Syllable */ + [0xcbd6, 0xcbd6], /* Hangul Syllable */ + [0xcbd7, 0xcbd7], /* Hangul Syllable */ + [0xcbd8, 0xcbd8], /* Hangul Syllable */ + [0xcbd9, 0xcbd9], /* Hangul Syllable */ + [0xcbda, 0xcbda], /* Hangul Syllable */ + [0xcbdb, 0xcbdb], /* Hangul Syllable */ + [0xcbdc, 0xcbdc], /* Hangul Syllable */ + [0xcbdd, 0xcbdd], /* Hangul Syllable */ + [0xcbde, 0xcbde], /* Hangul Syllable */ + [0xcbdf, 0xcbdf], /* Hangul Syllable */ + [0xcbe0, 0xcbe0], /* Hangul Syllable */ + [0xcbe1, 0xcbe1], /* Hangul Syllable */ + [0xcbe2, 0xcbe2], /* Hangul Syllable */ + [0xcbe3, 0xcbe3], /* Hangul Syllable */ + [0xcbe4, 0xcbe4], /* Hangul Syllable */ + [0xcbe5, 0xcbe5], /* Hangul Syllable */ + [0xcbe6, 0xcbe6], /* Hangul Syllable */ + [0xcbe7, 0xcbe7], /* Hangul Syllable */ + [0xcbe8, 0xcbe8], /* Hangul Syllable */ + [0xcbe9, 0xcbe9], /* Hangul Syllable */ + [0xcbea, 0xcbea], /* Hangul Syllable */ + [0xcbeb, 0xcbeb], /* Hangul Syllable */ + [0xcbec, 0xcbec], /* Hangul Syllable */ + [0xcbed, 0xcbed], /* Hangul Syllable */ + [0xcbee, 0xcbee], /* Hangul Syllable */ + [0xcbef, 0xcbef], /* Hangul Syllable */ + [0xcbf0, 0xcbf0], /* Hangul Syllable */ + [0xcbf1, 0xcbf1], /* Hangul Syllable */ + [0xcbf2, 0xcbf2], /* Hangul Syllable */ + [0xcbf3, 0xcbf3], /* Hangul Syllable */ + [0xcbf4, 0xcbf4], /* Hangul Syllable */ + [0xcbf5, 0xcbf5], /* Hangul Syllable */ + [0xcbf6, 0xcbf6], /* Hangul Syllable */ + [0xcbf7, 0xcbf7], /* Hangul Syllable */ + [0xcbf8, 0xcbf8], /* Hangul Syllable */ + [0xcbf9, 0xcbf9], /* Hangul Syllable */ + [0xcbfa, 0xcbfa], /* Hangul Syllable */ + [0xcbfb, 0xcbfb], /* Hangul Syllable */ + [0xcbfc, 0xcbfc], /* Hangul Syllable */ + [0xcbfd, 0xcbfd], /* Hangul Syllable */ + [0xcbfe, 0xcbfe], /* Hangul Syllable */ + [0xcbff, 0xcbff], /* Hangul Syllable */ + [0xcc00, 0xcc00], /* Hangul Syllable */ + [0xcc01, 0xcc01], /* Hangul Syllable */ + [0xcc02, 0xcc02], /* Hangul Syllable */ + [0xcc03, 0xcc03], /* Hangul Syllable */ + [0xcc04, 0xcc04], /* Hangul Syllable */ + [0xcc05, 0xcc05], /* Hangul Syllable */ + [0xcc06, 0xcc06], /* Hangul Syllable */ + [0xcc07, 0xcc07], /* Hangul Syllable */ + [0xcc08, 0xcc08], /* Hangul Syllable */ + [0xcc09, 0xcc09], /* Hangul Syllable */ + [0xcc0a, 0xcc0a], /* Hangul Syllable */ + [0xcc0b, 0xcc0b], /* Hangul Syllable */ + [0xcc0c, 0xcc0c], /* Hangul Syllable */ + [0xcc0d, 0xcc0d], /* Hangul Syllable */ + [0xcc0e, 0xcc0e], /* Hangul Syllable */ + [0xcc0f, 0xcc0f], /* Hangul Syllable */ + [0xcc10, 0xcc10], /* Hangul Syllable */ + [0xcc11, 0xcc11], /* Hangul Syllable */ + [0xcc12, 0xcc12], /* Hangul Syllable */ + [0xcc13, 0xcc13], /* Hangul Syllable */ + [0xcc14, 0xcc14], /* Hangul Syllable */ + [0xcc15, 0xcc15], /* Hangul Syllable */ + [0xcc16, 0xcc16], /* Hangul Syllable */ + [0xcc17, 0xcc17], /* Hangul Syllable */ + [0xcc18, 0xcc18], /* Hangul Syllable */ + [0xcc19, 0xcc19], /* Hangul Syllable */ + [0xcc1a, 0xcc1a], /* Hangul Syllable */ + [0xcc1b, 0xcc1b], /* Hangul Syllable */ + [0xcc1c, 0xcc1c], /* Hangul Syllable */ + [0xcc1d, 0xcc1d], /* Hangul Syllable */ + [0xcc1e, 0xcc1e], /* Hangul Syllable */ + [0xcc1f, 0xcc1f], /* Hangul Syllable */ + [0xcc20, 0xcc20], /* Hangul Syllable */ + [0xcc21, 0xcc21], /* Hangul Syllable */ + [0xcc22, 0xcc22], /* Hangul Syllable */ + [0xcc23, 0xcc23], /* Hangul Syllable */ + [0xcc24, 0xcc24], /* Hangul Syllable */ + [0xcc25, 0xcc25], /* Hangul Syllable */ + [0xcc26, 0xcc26], /* Hangul Syllable */ + [0xcc27, 0xcc27], /* Hangul Syllable */ + [0xcc28, 0xcc28], /* Hangul Syllable */ + [0xcc29, 0xcc29], /* Hangul Syllable */ + [0xcc2a, 0xcc2a], /* Hangul Syllable */ + [0xcc2b, 0xcc2b], /* Hangul Syllable */ + [0xcc2c, 0xcc2c], /* Hangul Syllable */ + [0xcc2d, 0xcc2d], /* Hangul Syllable */ + [0xcc2e, 0xcc2e], /* Hangul Syllable */ + [0xcc2f, 0xcc2f], /* Hangul Syllable */ + [0xcc30, 0xcc30], /* Hangul Syllable */ + [0xcc31, 0xcc31], /* Hangul Syllable */ + [0xcc32, 0xcc32], /* Hangul Syllable */ + [0xcc33, 0xcc33], /* Hangul Syllable */ + [0xcc34, 0xcc34], /* Hangul Syllable */ + [0xcc35, 0xcc35], /* Hangul Syllable */ + [0xcc36, 0xcc36], /* Hangul Syllable */ + [0xcc37, 0xcc37], /* Hangul Syllable */ + [0xcc38, 0xcc38], /* Hangul Syllable */ + [0xcc39, 0xcc39], /* Hangul Syllable */ + [0xcc3a, 0xcc3a], /* Hangul Syllable */ + [0xcc3b, 0xcc3b], /* Hangul Syllable */ + [0xcc3c, 0xcc3c], /* Hangul Syllable */ + [0xcc3d, 0xcc3d], /* Hangul Syllable */ + [0xcc3e, 0xcc3e], /* Hangul Syllable */ + [0xcc3f, 0xcc3f], /* Hangul Syllable */ + [0xcc40, 0xcc40], /* Hangul Syllable */ + [0xcc41, 0xcc41], /* Hangul Syllable */ + [0xcc42, 0xcc42], /* Hangul Syllable */ + [0xcc43, 0xcc43], /* Hangul Syllable */ + [0xcc44, 0xcc44], /* Hangul Syllable */ + [0xcc45, 0xcc45], /* Hangul Syllable */ + [0xcc46, 0xcc46], /* Hangul Syllable */ + [0xcc47, 0xcc47], /* Hangul Syllable */ + [0xcc48, 0xcc48], /* Hangul Syllable */ + [0xcc49, 0xcc49], /* Hangul Syllable */ + [0xcc4a, 0xcc4a], /* Hangul Syllable */ + [0xcc4b, 0xcc4b], /* Hangul Syllable */ + [0xcc4c, 0xcc4c], /* Hangul Syllable */ + [0xcc4d, 0xcc4d], /* Hangul Syllable */ + [0xcc4e, 0xcc4e], /* Hangul Syllable */ + [0xcc4f, 0xcc4f], /* Hangul Syllable */ + [0xcc50, 0xcc50], /* Hangul Syllable */ + [0xcc51, 0xcc51], /* Hangul Syllable */ + [0xcc52, 0xcc52], /* Hangul Syllable */ + [0xcc53, 0xcc53], /* Hangul Syllable */ + [0xcc54, 0xcc54], /* Hangul Syllable */ + [0xcc55, 0xcc55], /* Hangul Syllable */ + [0xcc56, 0xcc56], /* Hangul Syllable */ + [0xcc57, 0xcc57], /* Hangul Syllable */ + [0xcc58, 0xcc58], /* Hangul Syllable */ + [0xcc59, 0xcc59], /* Hangul Syllable */ + [0xcc5a, 0xcc5a], /* Hangul Syllable */ + [0xcc5b, 0xcc5b], /* Hangul Syllable */ + [0xcc5c, 0xcc5c], /* Hangul Syllable */ + [0xcc5d, 0xcc5d], /* Hangul Syllable */ + [0xcc5e, 0xcc5e], /* Hangul Syllable */ + [0xcc5f, 0xcc5f], /* Hangul Syllable */ + [0xcc60, 0xcc60], /* Hangul Syllable */ + [0xcc61, 0xcc61], /* Hangul Syllable */ + [0xcc62, 0xcc62], /* Hangul Syllable */ + [0xcc63, 0xcc63], /* Hangul Syllable */ + [0xcc64, 0xcc64], /* Hangul Syllable */ + [0xcc65, 0xcc65], /* Hangul Syllable */ + [0xcc66, 0xcc66], /* Hangul Syllable */ + [0xcc67, 0xcc67], /* Hangul Syllable */ + [0xcc68, 0xcc68], /* Hangul Syllable */ + [0xcc69, 0xcc69], /* Hangul Syllable */ + [0xcc6a, 0xcc6a], /* Hangul Syllable */ + [0xcc6b, 0xcc6b], /* Hangul Syllable */ + [0xcc6c, 0xcc6c], /* Hangul Syllable */ + [0xcc6d, 0xcc6d], /* Hangul Syllable */ + [0xcc6e, 0xcc6e], /* Hangul Syllable */ + [0xcc6f, 0xcc6f], /* Hangul Syllable */ + [0xcc70, 0xcc70], /* Hangul Syllable */ + [0xcc71, 0xcc71], /* Hangul Syllable */ + [0xcc72, 0xcc72], /* Hangul Syllable */ + [0xcc73, 0xcc73], /* Hangul Syllable */ + [0xcc74, 0xcc74], /* Hangul Syllable */ + [0xcc75, 0xcc75], /* Hangul Syllable */ + [0xcc76, 0xcc76], /* Hangul Syllable */ + [0xcc77, 0xcc77], /* Hangul Syllable */ + [0xcc78, 0xcc78], /* Hangul Syllable */ + [0xcc79, 0xcc79], /* Hangul Syllable */ + [0xcc7a, 0xcc7a], /* Hangul Syllable */ + [0xcc7b, 0xcc7b], /* Hangul Syllable */ + [0xcc7c, 0xcc7c], /* Hangul Syllable */ + [0xcc7d, 0xcc7d], /* Hangul Syllable */ + [0xcc7e, 0xcc7e], /* Hangul Syllable */ + [0xcc7f, 0xcc7f], /* Hangul Syllable */ + [0xcc80, 0xcc80], /* Hangul Syllable */ + [0xcc81, 0xcc81], /* Hangul Syllable */ + [0xcc82, 0xcc82], /* Hangul Syllable */ + [0xcc83, 0xcc83], /* Hangul Syllable */ + [0xcc84, 0xcc84], /* Hangul Syllable */ + [0xcc85, 0xcc85], /* Hangul Syllable */ + [0xcc86, 0xcc86], /* Hangul Syllable */ + [0xcc87, 0xcc87], /* Hangul Syllable */ + [0xcc88, 0xcc88], /* Hangul Syllable */ + [0xcc89, 0xcc89], /* Hangul Syllable */ + [0xcc8a, 0xcc8a], /* Hangul Syllable */ + [0xcc8b, 0xcc8b], /* Hangul Syllable */ + [0xcc8c, 0xcc8c], /* Hangul Syllable */ + [0xcc8d, 0xcc8d], /* Hangul Syllable */ + [0xcc8e, 0xcc8e], /* Hangul Syllable */ + [0xcc8f, 0xcc8f], /* Hangul Syllable */ + [0xcc90, 0xcc90], /* Hangul Syllable */ + [0xcc91, 0xcc91], /* Hangul Syllable */ + [0xcc92, 0xcc92], /* Hangul Syllable */ + [0xcc93, 0xcc93], /* Hangul Syllable */ + [0xcc94, 0xcc94], /* Hangul Syllable */ + [0xcc95, 0xcc95], /* Hangul Syllable */ + [0xcc96, 0xcc96], /* Hangul Syllable */ + [0xcc97, 0xcc97], /* Hangul Syllable */ + [0xcc98, 0xcc98], /* Hangul Syllable */ + [0xcc99, 0xcc99], /* Hangul Syllable */ + [0xcc9a, 0xcc9a], /* Hangul Syllable */ + [0xcc9b, 0xcc9b], /* Hangul Syllable */ + [0xcc9c, 0xcc9c], /* Hangul Syllable */ + [0xcc9d, 0xcc9d], /* Hangul Syllable */ + [0xcc9e, 0xcc9e], /* Hangul Syllable */ + [0xcc9f, 0xcc9f], /* Hangul Syllable */ + [0xcca0, 0xcca0], /* Hangul Syllable */ + [0xcca1, 0xcca1], /* Hangul Syllable */ + [0xcca2, 0xcca2], /* Hangul Syllable */ + [0xcca3, 0xcca3], /* Hangul Syllable */ + [0xcca4, 0xcca4], /* Hangul Syllable */ + [0xcca5, 0xcca5], /* Hangul Syllable */ + [0xcca6, 0xcca6], /* Hangul Syllable */ + [0xcca7, 0xcca7], /* Hangul Syllable */ + [0xcca8, 0xcca8], /* Hangul Syllable */ + [0xcca9, 0xcca9], /* Hangul Syllable */ + [0xccaa, 0xccaa], /* Hangul Syllable */ + [0xccab, 0xccab], /* Hangul Syllable */ + [0xccac, 0xccac], /* Hangul Syllable */ + [0xccad, 0xccad], /* Hangul Syllable */ + [0xccae, 0xccae], /* Hangul Syllable */ + [0xccaf, 0xccaf], /* Hangul Syllable */ + [0xccb0, 0xccb0], /* Hangul Syllable */ + [0xccb1, 0xccb1], /* Hangul Syllable */ + [0xccb2, 0xccb2], /* Hangul Syllable */ + [0xccb3, 0xccb3], /* Hangul Syllable */ + [0xccb4, 0xccb4], /* Hangul Syllable */ + [0xccb5, 0xccb5], /* Hangul Syllable */ + [0xccb6, 0xccb6], /* Hangul Syllable */ + [0xccb7, 0xccb7], /* Hangul Syllable */ + [0xccb8, 0xccb8], /* Hangul Syllable */ + [0xccb9, 0xccb9], /* Hangul Syllable */ + [0xccba, 0xccba], /* Hangul Syllable */ + [0xccbb, 0xccbb], /* Hangul Syllable */ + [0xccbc, 0xccbc], /* Hangul Syllable */ + [0xccbd, 0xccbd], /* Hangul Syllable */ + [0xccbe, 0xccbe], /* Hangul Syllable */ + [0xccbf, 0xccbf], /* Hangul Syllable */ + [0xccc0, 0xccc0], /* Hangul Syllable */ + [0xccc1, 0xccc1], /* Hangul Syllable */ + [0xccc2, 0xccc2], /* Hangul Syllable */ + [0xccc3, 0xccc3], /* Hangul Syllable */ + [0xccc4, 0xccc4], /* Hangul Syllable */ + [0xccc5, 0xccc5], /* Hangul Syllable */ + [0xccc6, 0xccc6], /* Hangul Syllable */ + [0xccc7, 0xccc7], /* Hangul Syllable */ + [0xccc8, 0xccc8], /* Hangul Syllable */ + [0xccc9, 0xccc9], /* Hangul Syllable */ + [0xccca, 0xccca], /* Hangul Syllable */ + [0xcccb, 0xcccb], /* Hangul Syllable */ + [0xcccc, 0xcccc], /* Hangul Syllable */ + [0xcccd, 0xcccd], /* Hangul Syllable */ + [0xccce, 0xccce], /* Hangul Syllable */ + [0xcccf, 0xcccf], /* Hangul Syllable */ + [0xccd0, 0xccd0], /* Hangul Syllable */ + [0xccd1, 0xccd1], /* Hangul Syllable */ + [0xccd2, 0xccd2], /* Hangul Syllable */ + [0xccd3, 0xccd3], /* Hangul Syllable */ + [0xccd4, 0xccd4], /* Hangul Syllable */ + [0xccd5, 0xccd5], /* Hangul Syllable */ + [0xccd6, 0xccd6], /* Hangul Syllable */ + [0xccd7, 0xccd7], /* Hangul Syllable */ + [0xccd8, 0xccd8], /* Hangul Syllable */ + [0xccd9, 0xccd9], /* Hangul Syllable */ + [0xccda, 0xccda], /* Hangul Syllable */ + [0xccdb, 0xccdb], /* Hangul Syllable */ + [0xccdc, 0xccdc], /* Hangul Syllable */ + [0xccdd, 0xccdd], /* Hangul Syllable */ + [0xccde, 0xccde], /* Hangul Syllable */ + [0xccdf, 0xccdf], /* Hangul Syllable */ + [0xcce0, 0xcce0], /* Hangul Syllable */ + [0xcce1, 0xcce1], /* Hangul Syllable */ + [0xcce2, 0xcce2], /* Hangul Syllable */ + [0xcce3, 0xcce3], /* Hangul Syllable */ + [0xcce4, 0xcce4], /* Hangul Syllable */ + [0xcce5, 0xcce5], /* Hangul Syllable */ + [0xcce6, 0xcce6], /* Hangul Syllable */ + [0xcce7, 0xcce7], /* Hangul Syllable */ + [0xcce8, 0xcce8], /* Hangul Syllable */ + [0xcce9, 0xcce9], /* Hangul Syllable */ + [0xccea, 0xccea], /* Hangul Syllable */ + [0xcceb, 0xcceb], /* Hangul Syllable */ + [0xccec, 0xccec], /* Hangul Syllable */ + [0xcced, 0xcced], /* Hangul Syllable */ + [0xccee, 0xccee], /* Hangul Syllable */ + [0xccef, 0xccef], /* Hangul Syllable */ + [0xccf0, 0xccf0], /* Hangul Syllable */ + [0xccf1, 0xccf1], /* Hangul Syllable */ + [0xccf2, 0xccf2], /* Hangul Syllable */ + [0xccf3, 0xccf3], /* Hangul Syllable */ + [0xccf4, 0xccf4], /* Hangul Syllable */ + [0xccf5, 0xccf5], /* Hangul Syllable */ + [0xccf6, 0xccf6], /* Hangul Syllable */ + [0xccf7, 0xccf7], /* Hangul Syllable */ + [0xccf8, 0xccf8], /* Hangul Syllable */ + [0xccf9, 0xccf9], /* Hangul Syllable */ + [0xccfa, 0xccfa], /* Hangul Syllable */ + [0xccfb, 0xccfb], /* Hangul Syllable */ + [0xccfc, 0xccfc], /* Hangul Syllable */ + [0xccfd, 0xccfd], /* Hangul Syllable */ + [0xccfe, 0xccfe], /* Hangul Syllable */ + [0xccff, 0xccff], /* Hangul Syllable */ + [0xcd00, 0xcd00], /* Hangul Syllable */ + [0xcd01, 0xcd01], /* Hangul Syllable */ + [0xcd02, 0xcd02], /* Hangul Syllable */ + [0xcd03, 0xcd03], /* Hangul Syllable */ + [0xcd04, 0xcd04], /* Hangul Syllable */ + [0xcd05, 0xcd05], /* Hangul Syllable */ + [0xcd06, 0xcd06], /* Hangul Syllable */ + [0xcd07, 0xcd07], /* Hangul Syllable */ + [0xcd08, 0xcd08], /* Hangul Syllable */ + [0xcd09, 0xcd09], /* Hangul Syllable */ + [0xcd0a, 0xcd0a], /* Hangul Syllable */ + [0xcd0b, 0xcd0b], /* Hangul Syllable */ + [0xcd0c, 0xcd0c], /* Hangul Syllable */ + [0xcd0d, 0xcd0d], /* Hangul Syllable */ + [0xcd0e, 0xcd0e], /* Hangul Syllable */ + [0xcd0f, 0xcd0f], /* Hangul Syllable */ + [0xcd10, 0xcd10], /* Hangul Syllable */ + [0xcd11, 0xcd11], /* Hangul Syllable */ + [0xcd12, 0xcd12], /* Hangul Syllable */ + [0xcd13, 0xcd13], /* Hangul Syllable */ + [0xcd14, 0xcd14], /* Hangul Syllable */ + [0xcd15, 0xcd15], /* Hangul Syllable */ + [0xcd16, 0xcd16], /* Hangul Syllable */ + [0xcd17, 0xcd17], /* Hangul Syllable */ + [0xcd18, 0xcd18], /* Hangul Syllable */ + [0xcd19, 0xcd19], /* Hangul Syllable */ + [0xcd1a, 0xcd1a], /* Hangul Syllable */ + [0xcd1b, 0xcd1b], /* Hangul Syllable */ + [0xcd1c, 0xcd1c], /* Hangul Syllable */ + [0xcd1d, 0xcd1d], /* Hangul Syllable */ + [0xcd1e, 0xcd1e], /* Hangul Syllable */ + [0xcd1f, 0xcd1f], /* Hangul Syllable */ + [0xcd20, 0xcd20], /* Hangul Syllable */ + [0xcd21, 0xcd21], /* Hangul Syllable */ + [0xcd22, 0xcd22], /* Hangul Syllable */ + [0xcd23, 0xcd23], /* Hangul Syllable */ + [0xcd24, 0xcd24], /* Hangul Syllable */ + [0xcd25, 0xcd25], /* Hangul Syllable */ + [0xcd26, 0xcd26], /* Hangul Syllable */ + [0xcd27, 0xcd27], /* Hangul Syllable */ + [0xcd28, 0xcd28], /* Hangul Syllable */ + [0xcd29, 0xcd29], /* Hangul Syllable */ + [0xcd2a, 0xcd2a], /* Hangul Syllable */ + [0xcd2b, 0xcd2b], /* Hangul Syllable */ + [0xcd2c, 0xcd2c], /* Hangul Syllable */ + [0xcd2d, 0xcd2d], /* Hangul Syllable */ + [0xcd2e, 0xcd2e], /* Hangul Syllable */ + [0xcd2f, 0xcd2f], /* Hangul Syllable */ + [0xcd30, 0xcd30], /* Hangul Syllable */ + [0xcd31, 0xcd31], /* Hangul Syllable */ + [0xcd32, 0xcd32], /* Hangul Syllable */ + [0xcd33, 0xcd33], /* Hangul Syllable */ + [0xcd34, 0xcd34], /* Hangul Syllable */ + [0xcd35, 0xcd35], /* Hangul Syllable */ + [0xcd36, 0xcd36], /* Hangul Syllable */ + [0xcd37, 0xcd37], /* Hangul Syllable */ + [0xcd38, 0xcd38], /* Hangul Syllable */ + [0xcd39, 0xcd39], /* Hangul Syllable */ + [0xcd3a, 0xcd3a], /* Hangul Syllable */ + [0xcd3b, 0xcd3b], /* Hangul Syllable */ + [0xcd3c, 0xcd3c], /* Hangul Syllable */ + [0xcd3d, 0xcd3d], /* Hangul Syllable */ + [0xcd3e, 0xcd3e], /* Hangul Syllable */ + [0xcd3f, 0xcd3f], /* Hangul Syllable */ + [0xcd40, 0xcd40], /* Hangul Syllable */ + [0xcd41, 0xcd41], /* Hangul Syllable */ + [0xcd42, 0xcd42], /* Hangul Syllable */ + [0xcd43, 0xcd43], /* Hangul Syllable */ + [0xcd44, 0xcd44], /* Hangul Syllable */ + [0xcd45, 0xcd45], /* Hangul Syllable */ + [0xcd46, 0xcd46], /* Hangul Syllable */ + [0xcd47, 0xcd47], /* Hangul Syllable */ + [0xcd48, 0xcd48], /* Hangul Syllable */ + [0xcd49, 0xcd49], /* Hangul Syllable */ + [0xcd4a, 0xcd4a], /* Hangul Syllable */ + [0xcd4b, 0xcd4b], /* Hangul Syllable */ + [0xcd4c, 0xcd4c], /* Hangul Syllable */ + [0xcd4d, 0xcd4d], /* Hangul Syllable */ + [0xcd4e, 0xcd4e], /* Hangul Syllable */ + [0xcd4f, 0xcd4f], /* Hangul Syllable */ + [0xcd50, 0xcd50], /* Hangul Syllable */ + [0xcd51, 0xcd51], /* Hangul Syllable */ + [0xcd52, 0xcd52], /* Hangul Syllable */ + [0xcd53, 0xcd53], /* Hangul Syllable */ + [0xcd54, 0xcd54], /* Hangul Syllable */ + [0xcd55, 0xcd55], /* Hangul Syllable */ + [0xcd56, 0xcd56], /* Hangul Syllable */ + [0xcd57, 0xcd57], /* Hangul Syllable */ + [0xcd58, 0xcd58], /* Hangul Syllable */ + [0xcd59, 0xcd59], /* Hangul Syllable */ + [0xcd5a, 0xcd5a], /* Hangul Syllable */ + [0xcd5b, 0xcd5b], /* Hangul Syllable */ + [0xcd5c, 0xcd5c], /* Hangul Syllable */ + [0xcd5d, 0xcd5d], /* Hangul Syllable */ + [0xcd5e, 0xcd5e], /* Hangul Syllable */ + [0xcd5f, 0xcd5f], /* Hangul Syllable */ + [0xcd60, 0xcd60], /* Hangul Syllable */ + [0xcd61, 0xcd61], /* Hangul Syllable */ + [0xcd62, 0xcd62], /* Hangul Syllable */ + [0xcd63, 0xcd63], /* Hangul Syllable */ + [0xcd64, 0xcd64], /* Hangul Syllable */ + [0xcd65, 0xcd65], /* Hangul Syllable */ + [0xcd66, 0xcd66], /* Hangul Syllable */ + [0xcd67, 0xcd67], /* Hangul Syllable */ + [0xcd68, 0xcd68], /* Hangul Syllable */ + [0xcd69, 0xcd69], /* Hangul Syllable */ + [0xcd6a, 0xcd6a], /* Hangul Syllable */ + [0xcd6b, 0xcd6b], /* Hangul Syllable */ + [0xcd6c, 0xcd6c], /* Hangul Syllable */ + [0xcd6d, 0xcd6d], /* Hangul Syllable */ + [0xcd6e, 0xcd6e], /* Hangul Syllable */ + [0xcd6f, 0xcd6f], /* Hangul Syllable */ + [0xcd70, 0xcd70], /* Hangul Syllable */ + [0xcd71, 0xcd71], /* Hangul Syllable */ + [0xcd72, 0xcd72], /* Hangul Syllable */ + [0xcd73, 0xcd73], /* Hangul Syllable */ + [0xcd74, 0xcd74], /* Hangul Syllable */ + [0xcd75, 0xcd75], /* Hangul Syllable */ + [0xcd76, 0xcd76], /* Hangul Syllable */ + [0xcd77, 0xcd77], /* Hangul Syllable */ + [0xcd78, 0xcd78], /* Hangul Syllable */ + [0xcd79, 0xcd79], /* Hangul Syllable */ + [0xcd7a, 0xcd7a], /* Hangul Syllable */ + [0xcd7b, 0xcd7b], /* Hangul Syllable */ + [0xcd7c, 0xcd7c], /* Hangul Syllable */ + [0xcd7d, 0xcd7d], /* Hangul Syllable */ + [0xcd7e, 0xcd7e], /* Hangul Syllable */ + [0xcd7f, 0xcd7f], /* Hangul Syllable */ + [0xcd80, 0xcd80], /* Hangul Syllable */ + [0xcd81, 0xcd81], /* Hangul Syllable */ + [0xcd82, 0xcd82], /* Hangul Syllable */ + [0xcd83, 0xcd83], /* Hangul Syllable */ + [0xcd84, 0xcd84], /* Hangul Syllable */ + [0xcd85, 0xcd85], /* Hangul Syllable */ + [0xcd86, 0xcd86], /* Hangul Syllable */ + [0xcd87, 0xcd87], /* Hangul Syllable */ + [0xcd88, 0xcd88], /* Hangul Syllable */ + [0xcd89, 0xcd89], /* Hangul Syllable */ + [0xcd8a, 0xcd8a], /* Hangul Syllable */ + [0xcd8b, 0xcd8b], /* Hangul Syllable */ + [0xcd8c, 0xcd8c], /* Hangul Syllable */ + [0xcd8d, 0xcd8d], /* Hangul Syllable */ + [0xcd8e, 0xcd8e], /* Hangul Syllable */ + [0xcd8f, 0xcd8f], /* Hangul Syllable */ + [0xcd90, 0xcd90], /* Hangul Syllable */ + [0xcd91, 0xcd91], /* Hangul Syllable */ + [0xcd92, 0xcd92], /* Hangul Syllable */ + [0xcd93, 0xcd93], /* Hangul Syllable */ + [0xcd94, 0xcd94], /* Hangul Syllable */ + [0xcd95, 0xcd95], /* Hangul Syllable */ + [0xcd96, 0xcd96], /* Hangul Syllable */ + [0xcd97, 0xcd97], /* Hangul Syllable */ + [0xcd98, 0xcd98], /* Hangul Syllable */ + [0xcd99, 0xcd99], /* Hangul Syllable */ + [0xcd9a, 0xcd9a], /* Hangul Syllable */ + [0xcd9b, 0xcd9b], /* Hangul Syllable */ + [0xcd9c, 0xcd9c], /* Hangul Syllable */ + [0xcd9d, 0xcd9d], /* Hangul Syllable */ + [0xcd9e, 0xcd9e], /* Hangul Syllable */ + [0xcd9f, 0xcd9f], /* Hangul Syllable */ + [0xcda0, 0xcda0], /* Hangul Syllable */ + [0xcda1, 0xcda1], /* Hangul Syllable */ + [0xcda2, 0xcda2], /* Hangul Syllable */ + [0xcda3, 0xcda3], /* Hangul Syllable */ + [0xcda4, 0xcda4], /* Hangul Syllable */ + [0xcda5, 0xcda5], /* Hangul Syllable */ + [0xcda6, 0xcda6], /* Hangul Syllable */ + [0xcda7, 0xcda7], /* Hangul Syllable */ + [0xcda8, 0xcda8], /* Hangul Syllable */ + [0xcda9, 0xcda9], /* Hangul Syllable */ + [0xcdaa, 0xcdaa], /* Hangul Syllable */ + [0xcdab, 0xcdab], /* Hangul Syllable */ + [0xcdac, 0xcdac], /* Hangul Syllable */ + [0xcdad, 0xcdad], /* Hangul Syllable */ + [0xcdae, 0xcdae], /* Hangul Syllable */ + [0xcdaf, 0xcdaf], /* Hangul Syllable */ + [0xcdb0, 0xcdb0], /* Hangul Syllable */ + [0xcdb1, 0xcdb1], /* Hangul Syllable */ + [0xcdb2, 0xcdb2], /* Hangul Syllable */ + [0xcdb3, 0xcdb3], /* Hangul Syllable */ + [0xcdb4, 0xcdb4], /* Hangul Syllable */ + [0xcdb5, 0xcdb5], /* Hangul Syllable */ + [0xcdb6, 0xcdb6], /* Hangul Syllable */ + [0xcdb7, 0xcdb7], /* Hangul Syllable */ + [0xcdb8, 0xcdb8], /* Hangul Syllable */ + [0xcdb9, 0xcdb9], /* Hangul Syllable */ + [0xcdba, 0xcdba], /* Hangul Syllable */ + [0xcdbb, 0xcdbb], /* Hangul Syllable */ + [0xcdbc, 0xcdbc], /* Hangul Syllable */ + [0xcdbd, 0xcdbd], /* Hangul Syllable */ + [0xcdbe, 0xcdbe], /* Hangul Syllable */ + [0xcdbf, 0xcdbf], /* Hangul Syllable */ + [0xcdc0, 0xcdc0], /* Hangul Syllable */ + [0xcdc1, 0xcdc1], /* Hangul Syllable */ + [0xcdc2, 0xcdc2], /* Hangul Syllable */ + [0xcdc3, 0xcdc3], /* Hangul Syllable */ + [0xcdc4, 0xcdc4], /* Hangul Syllable */ + [0xcdc5, 0xcdc5], /* Hangul Syllable */ + [0xcdc6, 0xcdc6], /* Hangul Syllable */ + [0xcdc7, 0xcdc7], /* Hangul Syllable */ + [0xcdc8, 0xcdc8], /* Hangul Syllable */ + [0xcdc9, 0xcdc9], /* Hangul Syllable */ + [0xcdca, 0xcdca], /* Hangul Syllable */ + [0xcdcb, 0xcdcb], /* Hangul Syllable */ + [0xcdcc, 0xcdcc], /* Hangul Syllable */ + [0xcdcd, 0xcdcd], /* Hangul Syllable */ + [0xcdce, 0xcdce], /* Hangul Syllable */ + [0xcdcf, 0xcdcf], /* Hangul Syllable */ + [0xcdd0, 0xcdd0], /* Hangul Syllable */ + [0xcdd1, 0xcdd1], /* Hangul Syllable */ + [0xcdd2, 0xcdd2], /* Hangul Syllable */ + [0xcdd3, 0xcdd3], /* Hangul Syllable */ + [0xcdd4, 0xcdd4], /* Hangul Syllable */ + [0xcdd5, 0xcdd5], /* Hangul Syllable */ + [0xcdd6, 0xcdd6], /* Hangul Syllable */ + [0xcdd7, 0xcdd7], /* Hangul Syllable */ + [0xcdd8, 0xcdd8], /* Hangul Syllable */ + [0xcdd9, 0xcdd9], /* Hangul Syllable */ + [0xcdda, 0xcdda], /* Hangul Syllable */ + [0xcddb, 0xcddb], /* Hangul Syllable */ + [0xcddc, 0xcddc], /* Hangul Syllable */ + [0xcddd, 0xcddd], /* Hangul Syllable */ + [0xcdde, 0xcdde], /* Hangul Syllable */ + [0xcddf, 0xcddf], /* Hangul Syllable */ + [0xcde0, 0xcde0], /* Hangul Syllable */ + [0xcde1, 0xcde1], /* Hangul Syllable */ + [0xcde2, 0xcde2], /* Hangul Syllable */ + [0xcde3, 0xcde3], /* Hangul Syllable */ + [0xcde4, 0xcde4], /* Hangul Syllable */ + [0xcde5, 0xcde5], /* Hangul Syllable */ + [0xcde6, 0xcde6], /* Hangul Syllable */ + [0xcde7, 0xcde7], /* Hangul Syllable */ + [0xcde8, 0xcde8], /* Hangul Syllable */ + [0xcde9, 0xcde9], /* Hangul Syllable */ + [0xcdea, 0xcdea], /* Hangul Syllable */ + [0xcdeb, 0xcdeb], /* Hangul Syllable */ + [0xcdec, 0xcdec], /* Hangul Syllable */ + [0xcded, 0xcded], /* Hangul Syllable */ + [0xcdee, 0xcdee], /* Hangul Syllable */ + [0xcdef, 0xcdef], /* Hangul Syllable */ + [0xcdf0, 0xcdf0], /* Hangul Syllable */ + [0xcdf1, 0xcdf1], /* Hangul Syllable */ + [0xcdf2, 0xcdf2], /* Hangul Syllable */ + [0xcdf3, 0xcdf3], /* Hangul Syllable */ + [0xcdf4, 0xcdf4], /* Hangul Syllable */ + [0xcdf5, 0xcdf5], /* Hangul Syllable */ + [0xcdf6, 0xcdf6], /* Hangul Syllable */ + [0xcdf7, 0xcdf7], /* Hangul Syllable */ + [0xcdf8, 0xcdf8], /* Hangul Syllable */ + [0xcdf9, 0xcdf9], /* Hangul Syllable */ + [0xcdfa, 0xcdfa], /* Hangul Syllable */ + [0xcdfb, 0xcdfb], /* Hangul Syllable */ + [0xcdfc, 0xcdfc], /* Hangul Syllable */ + [0xcdfd, 0xcdfd], /* Hangul Syllable */ + [0xcdfe, 0xcdfe], /* Hangul Syllable */ + [0xcdff, 0xcdff], /* Hangul Syllable */ + [0xce00, 0xce00], /* Hangul Syllable */ + [0xce01, 0xce01], /* Hangul Syllable */ + [0xce02, 0xce02], /* Hangul Syllable */ + [0xce03, 0xce03], /* Hangul Syllable */ + [0xce04, 0xce04], /* Hangul Syllable */ + [0xce05, 0xce05], /* Hangul Syllable */ + [0xce06, 0xce06], /* Hangul Syllable */ + [0xce07, 0xce07], /* Hangul Syllable */ + [0xce08, 0xce08], /* Hangul Syllable */ + [0xce09, 0xce09], /* Hangul Syllable */ + [0xce0a, 0xce0a], /* Hangul Syllable */ + [0xce0b, 0xce0b], /* Hangul Syllable */ + [0xce0c, 0xce0c], /* Hangul Syllable */ + [0xce0d, 0xce0d], /* Hangul Syllable */ + [0xce0e, 0xce0e], /* Hangul Syllable */ + [0xce0f, 0xce0f], /* Hangul Syllable */ + [0xce10, 0xce10], /* Hangul Syllable */ + [0xce11, 0xce11], /* Hangul Syllable */ + [0xce12, 0xce12], /* Hangul Syllable */ + [0xce13, 0xce13], /* Hangul Syllable */ + [0xce14, 0xce14], /* Hangul Syllable */ + [0xce15, 0xce15], /* Hangul Syllable */ + [0xce16, 0xce16], /* Hangul Syllable */ + [0xce17, 0xce17], /* Hangul Syllable */ + [0xce18, 0xce18], /* Hangul Syllable */ + [0xce19, 0xce19], /* Hangul Syllable */ + [0xce1a, 0xce1a], /* Hangul Syllable */ + [0xce1b, 0xce1b], /* Hangul Syllable */ + [0xce1c, 0xce1c], /* Hangul Syllable */ + [0xce1d, 0xce1d], /* Hangul Syllable */ + [0xce1e, 0xce1e], /* Hangul Syllable */ + [0xce1f, 0xce1f], /* Hangul Syllable */ + [0xce20, 0xce20], /* Hangul Syllable */ + [0xce21, 0xce21], /* Hangul Syllable */ + [0xce22, 0xce22], /* Hangul Syllable */ + [0xce23, 0xce23], /* Hangul Syllable */ + [0xce24, 0xce24], /* Hangul Syllable */ + [0xce25, 0xce25], /* Hangul Syllable */ + [0xce26, 0xce26], /* Hangul Syllable */ + [0xce27, 0xce27], /* Hangul Syllable */ + [0xce28, 0xce28], /* Hangul Syllable */ + [0xce29, 0xce29], /* Hangul Syllable */ + [0xce2a, 0xce2a], /* Hangul Syllable */ + [0xce2b, 0xce2b], /* Hangul Syllable */ + [0xce2c, 0xce2c], /* Hangul Syllable */ + [0xce2d, 0xce2d], /* Hangul Syllable */ + [0xce2e, 0xce2e], /* Hangul Syllable */ + [0xce2f, 0xce2f], /* Hangul Syllable */ + [0xce30, 0xce30], /* Hangul Syllable */ + [0xce31, 0xce31], /* Hangul Syllable */ + [0xce32, 0xce32], /* Hangul Syllable */ + [0xce33, 0xce33], /* Hangul Syllable */ + [0xce34, 0xce34], /* Hangul Syllable */ + [0xce35, 0xce35], /* Hangul Syllable */ + [0xce36, 0xce36], /* Hangul Syllable */ + [0xce37, 0xce37], /* Hangul Syllable */ + [0xce38, 0xce38], /* Hangul Syllable */ + [0xce39, 0xce39], /* Hangul Syllable */ + [0xce3a, 0xce3a], /* Hangul Syllable */ + [0xce3b, 0xce3b], /* Hangul Syllable */ + [0xce3c, 0xce3c], /* Hangul Syllable */ + [0xce3d, 0xce3d], /* Hangul Syllable */ + [0xce3e, 0xce3e], /* Hangul Syllable */ + [0xce3f, 0xce3f], /* Hangul Syllable */ + [0xce40, 0xce40], /* Hangul Syllable */ + [0xce41, 0xce41], /* Hangul Syllable */ + [0xce42, 0xce42], /* Hangul Syllable */ + [0xce43, 0xce43], /* Hangul Syllable */ + [0xce44, 0xce44], /* Hangul Syllable */ + [0xce45, 0xce45], /* Hangul Syllable */ + [0xce46, 0xce46], /* Hangul Syllable */ + [0xce47, 0xce47], /* Hangul Syllable */ + [0xce48, 0xce48], /* Hangul Syllable */ + [0xce49, 0xce49], /* Hangul Syllable */ + [0xce4a, 0xce4a], /* Hangul Syllable */ + [0xce4b, 0xce4b], /* Hangul Syllable */ + [0xce4c, 0xce4c], /* Hangul Syllable */ + [0xce4d, 0xce4d], /* Hangul Syllable */ + [0xce4e, 0xce4e], /* Hangul Syllable */ + [0xce4f, 0xce4f], /* Hangul Syllable */ + [0xce50, 0xce50], /* Hangul Syllable */ + [0xce51, 0xce51], /* Hangul Syllable */ + [0xce52, 0xce52], /* Hangul Syllable */ + [0xce53, 0xce53], /* Hangul Syllable */ + [0xce54, 0xce54], /* Hangul Syllable */ + [0xce55, 0xce55], /* Hangul Syllable */ + [0xce56, 0xce56], /* Hangul Syllable */ + [0xce57, 0xce57], /* Hangul Syllable */ + [0xce58, 0xce58], /* Hangul Syllable */ + [0xce59, 0xce59], /* Hangul Syllable */ + [0xce5a, 0xce5a], /* Hangul Syllable */ + [0xce5b, 0xce5b], /* Hangul Syllable */ + [0xce5c, 0xce5c], /* Hangul Syllable */ + [0xce5d, 0xce5d], /* Hangul Syllable */ + [0xce5e, 0xce5e], /* Hangul Syllable */ + [0xce5f, 0xce5f], /* Hangul Syllable */ + [0xce60, 0xce60], /* Hangul Syllable */ + [0xce61, 0xce61], /* Hangul Syllable */ + [0xce62, 0xce62], /* Hangul Syllable */ + [0xce63, 0xce63], /* Hangul Syllable */ + [0xce64, 0xce64], /* Hangul Syllable */ + [0xce65, 0xce65], /* Hangul Syllable */ + [0xce66, 0xce66], /* Hangul Syllable */ + [0xce67, 0xce67], /* Hangul Syllable */ + [0xce68, 0xce68], /* Hangul Syllable */ + [0xce69, 0xce69], /* Hangul Syllable */ + [0xce6a, 0xce6a], /* Hangul Syllable */ + [0xce6b, 0xce6b], /* Hangul Syllable */ + [0xce6c, 0xce6c], /* Hangul Syllable */ + [0xce6d, 0xce6d], /* Hangul Syllable */ + [0xce6e, 0xce6e], /* Hangul Syllable */ + [0xce6f, 0xce6f], /* Hangul Syllable */ + [0xce70, 0xce70], /* Hangul Syllable */ + [0xce71, 0xce71], /* Hangul Syllable */ + [0xce72, 0xce72], /* Hangul Syllable */ + [0xce73, 0xce73], /* Hangul Syllable */ + [0xce74, 0xce74], /* Hangul Syllable */ + [0xce75, 0xce75], /* Hangul Syllable */ + [0xce76, 0xce76], /* Hangul Syllable */ + [0xce77, 0xce77], /* Hangul Syllable */ + [0xce78, 0xce78], /* Hangul Syllable */ + [0xce79, 0xce79], /* Hangul Syllable */ + [0xce7a, 0xce7a], /* Hangul Syllable */ + [0xce7b, 0xce7b], /* Hangul Syllable */ + [0xce7c, 0xce7c], /* Hangul Syllable */ + [0xce7d, 0xce7d], /* Hangul Syllable */ + [0xce7e, 0xce7e], /* Hangul Syllable */ + [0xce7f, 0xce7f], /* Hangul Syllable */ + [0xce80, 0xce80], /* Hangul Syllable */ + [0xce81, 0xce81], /* Hangul Syllable */ + [0xce82, 0xce82], /* Hangul Syllable */ + [0xce83, 0xce83], /* Hangul Syllable */ + [0xce84, 0xce84], /* Hangul Syllable */ + [0xce85, 0xce85], /* Hangul Syllable */ + [0xce86, 0xce86], /* Hangul Syllable */ + [0xce87, 0xce87], /* Hangul Syllable */ + [0xce88, 0xce88], /* Hangul Syllable */ + [0xce89, 0xce89], /* Hangul Syllable */ + [0xce8a, 0xce8a], /* Hangul Syllable */ + [0xce8b, 0xce8b], /* Hangul Syllable */ + [0xce8c, 0xce8c], /* Hangul Syllable */ + [0xce8d, 0xce8d], /* Hangul Syllable */ + [0xce8e, 0xce8e], /* Hangul Syllable */ + [0xce8f, 0xce8f], /* Hangul Syllable */ + [0xce90, 0xce90], /* Hangul Syllable */ + [0xce91, 0xce91], /* Hangul Syllable */ + [0xce92, 0xce92], /* Hangul Syllable */ + [0xce93, 0xce93], /* Hangul Syllable */ + [0xce94, 0xce94], /* Hangul Syllable */ + [0xce95, 0xce95], /* Hangul Syllable */ + [0xce96, 0xce96], /* Hangul Syllable */ + [0xce97, 0xce97], /* Hangul Syllable */ + [0xce98, 0xce98], /* Hangul Syllable */ + [0xce99, 0xce99], /* Hangul Syllable */ + [0xce9a, 0xce9a], /* Hangul Syllable */ + [0xce9b, 0xce9b], /* Hangul Syllable */ + [0xce9c, 0xce9c], /* Hangul Syllable */ + [0xce9d, 0xce9d], /* Hangul Syllable */ + [0xce9e, 0xce9e], /* Hangul Syllable */ + [0xce9f, 0xce9f], /* Hangul Syllable */ + [0xcea0, 0xcea0], /* Hangul Syllable */ + [0xcea1, 0xcea1], /* Hangul Syllable */ + [0xcea2, 0xcea2], /* Hangul Syllable */ + [0xcea3, 0xcea3], /* Hangul Syllable */ + [0xcea4, 0xcea4], /* Hangul Syllable */ + [0xcea5, 0xcea5], /* Hangul Syllable */ + [0xcea6, 0xcea6], /* Hangul Syllable */ + [0xcea7, 0xcea7], /* Hangul Syllable */ + [0xcea8, 0xcea8], /* Hangul Syllable */ + [0xcea9, 0xcea9], /* Hangul Syllable */ + [0xceaa, 0xceaa], /* Hangul Syllable */ + [0xceab, 0xceab], /* Hangul Syllable */ + [0xceac, 0xceac], /* Hangul Syllable */ + [0xcead, 0xcead], /* Hangul Syllable */ + [0xceae, 0xceae], /* Hangul Syllable */ + [0xceaf, 0xceaf], /* Hangul Syllable */ + [0xceb0, 0xceb0], /* Hangul Syllable */ + [0xceb1, 0xceb1], /* Hangul Syllable */ + [0xceb2, 0xceb2], /* Hangul Syllable */ + [0xceb3, 0xceb3], /* Hangul Syllable */ + [0xceb4, 0xceb4], /* Hangul Syllable */ + [0xceb5, 0xceb5], /* Hangul Syllable */ + [0xceb6, 0xceb6], /* Hangul Syllable */ + [0xceb7, 0xceb7], /* Hangul Syllable */ + [0xceb8, 0xceb8], /* Hangul Syllable */ + [0xceb9, 0xceb9], /* Hangul Syllable */ + [0xceba, 0xceba], /* Hangul Syllable */ + [0xcebb, 0xcebb], /* Hangul Syllable */ + [0xcebc, 0xcebc], /* Hangul Syllable */ + [0xcebd, 0xcebd], /* Hangul Syllable */ + [0xcebe, 0xcebe], /* Hangul Syllable */ + [0xcebf, 0xcebf], /* Hangul Syllable */ + [0xcec0, 0xcec0], /* Hangul Syllable */ + [0xcec1, 0xcec1], /* Hangul Syllable */ + [0xcec2, 0xcec2], /* Hangul Syllable */ + [0xcec3, 0xcec3], /* Hangul Syllable */ + [0xcec4, 0xcec4], /* Hangul Syllable */ + [0xcec5, 0xcec5], /* Hangul Syllable */ + [0xcec6, 0xcec6], /* Hangul Syllable */ + [0xcec7, 0xcec7], /* Hangul Syllable */ + [0xcec8, 0xcec8], /* Hangul Syllable */ + [0xcec9, 0xcec9], /* Hangul Syllable */ + [0xceca, 0xceca], /* Hangul Syllable */ + [0xcecb, 0xcecb], /* Hangul Syllable */ + [0xcecc, 0xcecc], /* Hangul Syllable */ + [0xcecd, 0xcecd], /* Hangul Syllable */ + [0xcece, 0xcece], /* Hangul Syllable */ + [0xcecf, 0xcecf], /* Hangul Syllable */ + [0xced0, 0xced0], /* Hangul Syllable */ + [0xced1, 0xced1], /* Hangul Syllable */ + [0xced2, 0xced2], /* Hangul Syllable */ + [0xced3, 0xced3], /* Hangul Syllable */ + [0xced4, 0xced4], /* Hangul Syllable */ + [0xced5, 0xced5], /* Hangul Syllable */ + [0xced6, 0xced6], /* Hangul Syllable */ + [0xced7, 0xced7], /* Hangul Syllable */ + [0xced8, 0xced8], /* Hangul Syllable */ + [0xced9, 0xced9], /* Hangul Syllable */ + [0xceda, 0xceda], /* Hangul Syllable */ + [0xcedb, 0xcedb], /* Hangul Syllable */ + [0xcedc, 0xcedc], /* Hangul Syllable */ + [0xcedd, 0xcedd], /* Hangul Syllable */ + [0xcede, 0xcede], /* Hangul Syllable */ + [0xcedf, 0xcedf], /* Hangul Syllable */ + [0xcee0, 0xcee0], /* Hangul Syllable */ + [0xcee1, 0xcee1], /* Hangul Syllable */ + [0xcee2, 0xcee2], /* Hangul Syllable */ + [0xcee3, 0xcee3], /* Hangul Syllable */ + [0xcee4, 0xcee4], /* Hangul Syllable */ + [0xcee5, 0xcee5], /* Hangul Syllable */ + [0xcee6, 0xcee6], /* Hangul Syllable */ + [0xcee7, 0xcee7], /* Hangul Syllable */ + [0xcee8, 0xcee8], /* Hangul Syllable */ + [0xcee9, 0xcee9], /* Hangul Syllable */ + [0xceea, 0xceea], /* Hangul Syllable */ + [0xceeb, 0xceeb], /* Hangul Syllable */ + [0xceec, 0xceec], /* Hangul Syllable */ + [0xceed, 0xceed], /* Hangul Syllable */ + [0xceee, 0xceee], /* Hangul Syllable */ + [0xceef, 0xceef], /* Hangul Syllable */ + [0xcef0, 0xcef0], /* Hangul Syllable */ + [0xcef1, 0xcef1], /* Hangul Syllable */ + [0xcef2, 0xcef2], /* Hangul Syllable */ + [0xcef3, 0xcef3], /* Hangul Syllable */ + [0xcef4, 0xcef4], /* Hangul Syllable */ + [0xcef5, 0xcef5], /* Hangul Syllable */ + [0xcef6, 0xcef6], /* Hangul Syllable */ + [0xcef7, 0xcef7], /* Hangul Syllable */ + [0xcef8, 0xcef8], /* Hangul Syllable */ + [0xcef9, 0xcef9], /* Hangul Syllable */ + [0xcefa, 0xcefa], /* Hangul Syllable */ + [0xcefb, 0xcefb], /* Hangul Syllable */ + [0xcefc, 0xcefc], /* Hangul Syllable */ + [0xcefd, 0xcefd], /* Hangul Syllable */ + [0xcefe, 0xcefe], /* Hangul Syllable */ + [0xceff, 0xceff], /* Hangul Syllable */ + [0xcf00, 0xcf00], /* Hangul Syllable */ + [0xcf01, 0xcf01], /* Hangul Syllable */ + [0xcf02, 0xcf02], /* Hangul Syllable */ + [0xcf03, 0xcf03], /* Hangul Syllable */ + [0xcf04, 0xcf04], /* Hangul Syllable */ + [0xcf05, 0xcf05], /* Hangul Syllable */ + [0xcf06, 0xcf06], /* Hangul Syllable */ + [0xcf07, 0xcf07], /* Hangul Syllable */ + [0xcf08, 0xcf08], /* Hangul Syllable */ + [0xcf09, 0xcf09], /* Hangul Syllable */ + [0xcf0a, 0xcf0a], /* Hangul Syllable */ + [0xcf0b, 0xcf0b], /* Hangul Syllable */ + [0xcf0c, 0xcf0c], /* Hangul Syllable */ + [0xcf0d, 0xcf0d], /* Hangul Syllable */ + [0xcf0e, 0xcf0e], /* Hangul Syllable */ + [0xcf0f, 0xcf0f], /* Hangul Syllable */ + [0xcf10, 0xcf10], /* Hangul Syllable */ + [0xcf11, 0xcf11], /* Hangul Syllable */ + [0xcf12, 0xcf12], /* Hangul Syllable */ + [0xcf13, 0xcf13], /* Hangul Syllable */ + [0xcf14, 0xcf14], /* Hangul Syllable */ + [0xcf15, 0xcf15], /* Hangul Syllable */ + [0xcf16, 0xcf16], /* Hangul Syllable */ + [0xcf17, 0xcf17], /* Hangul Syllable */ + [0xcf18, 0xcf18], /* Hangul Syllable */ + [0xcf19, 0xcf19], /* Hangul Syllable */ + [0xcf1a, 0xcf1a], /* Hangul Syllable */ + [0xcf1b, 0xcf1b], /* Hangul Syllable */ + [0xcf1c, 0xcf1c], /* Hangul Syllable */ + [0xcf1d, 0xcf1d], /* Hangul Syllable */ + [0xcf1e, 0xcf1e], /* Hangul Syllable */ + [0xcf1f, 0xcf1f], /* Hangul Syllable */ + [0xcf20, 0xcf20], /* Hangul Syllable */ + [0xcf21, 0xcf21], /* Hangul Syllable */ + [0xcf22, 0xcf22], /* Hangul Syllable */ + [0xcf23, 0xcf23], /* Hangul Syllable */ + [0xcf24, 0xcf24], /* Hangul Syllable */ + [0xcf25, 0xcf25], /* Hangul Syllable */ + [0xcf26, 0xcf26], /* Hangul Syllable */ + [0xcf27, 0xcf27], /* Hangul Syllable */ + [0xcf28, 0xcf28], /* Hangul Syllable */ + [0xcf29, 0xcf29], /* Hangul Syllable */ + [0xcf2a, 0xcf2a], /* Hangul Syllable */ + [0xcf2b, 0xcf2b], /* Hangul Syllable */ + [0xcf2c, 0xcf2c], /* Hangul Syllable */ + [0xcf2d, 0xcf2d], /* Hangul Syllable */ + [0xcf2e, 0xcf2e], /* Hangul Syllable */ + [0xcf2f, 0xcf2f], /* Hangul Syllable */ + [0xcf30, 0xcf30], /* Hangul Syllable */ + [0xcf31, 0xcf31], /* Hangul Syllable */ + [0xcf32, 0xcf32], /* Hangul Syllable */ + [0xcf33, 0xcf33], /* Hangul Syllable */ + [0xcf34, 0xcf34], /* Hangul Syllable */ + [0xcf35, 0xcf35], /* Hangul Syllable */ + [0xcf36, 0xcf36], /* Hangul Syllable */ + [0xcf37, 0xcf37], /* Hangul Syllable */ + [0xcf38, 0xcf38], /* Hangul Syllable */ + [0xcf39, 0xcf39], /* Hangul Syllable */ + [0xcf3a, 0xcf3a], /* Hangul Syllable */ + [0xcf3b, 0xcf3b], /* Hangul Syllable */ + [0xcf3c, 0xcf3c], /* Hangul Syllable */ + [0xcf3d, 0xcf3d], /* Hangul Syllable */ + [0xcf3e, 0xcf3e], /* Hangul Syllable */ + [0xcf3f, 0xcf3f], /* Hangul Syllable */ + [0xcf40, 0xcf40], /* Hangul Syllable */ + [0xcf41, 0xcf41], /* Hangul Syllable */ + [0xcf42, 0xcf42], /* Hangul Syllable */ + [0xcf43, 0xcf43], /* Hangul Syllable */ + [0xcf44, 0xcf44], /* Hangul Syllable */ + [0xcf45, 0xcf45], /* Hangul Syllable */ + [0xcf46, 0xcf46], /* Hangul Syllable */ + [0xcf47, 0xcf47], /* Hangul Syllable */ + [0xcf48, 0xcf48], /* Hangul Syllable */ + [0xcf49, 0xcf49], /* Hangul Syllable */ + [0xcf4a, 0xcf4a], /* Hangul Syllable */ + [0xcf4b, 0xcf4b], /* Hangul Syllable */ + [0xcf4c, 0xcf4c], /* Hangul Syllable */ + [0xcf4d, 0xcf4d], /* Hangul Syllable */ + [0xcf4e, 0xcf4e], /* Hangul Syllable */ + [0xcf4f, 0xcf4f], /* Hangul Syllable */ + [0xcf50, 0xcf50], /* Hangul Syllable */ + [0xcf51, 0xcf51], /* Hangul Syllable */ + [0xcf52, 0xcf52], /* Hangul Syllable */ + [0xcf53, 0xcf53], /* Hangul Syllable */ + [0xcf54, 0xcf54], /* Hangul Syllable */ + [0xcf55, 0xcf55], /* Hangul Syllable */ + [0xcf56, 0xcf56], /* Hangul Syllable */ + [0xcf57, 0xcf57], /* Hangul Syllable */ + [0xcf58, 0xcf58], /* Hangul Syllable */ + [0xcf59, 0xcf59], /* Hangul Syllable */ + [0xcf5a, 0xcf5a], /* Hangul Syllable */ + [0xcf5b, 0xcf5b], /* Hangul Syllable */ + [0xcf5c, 0xcf5c], /* Hangul Syllable */ + [0xcf5d, 0xcf5d], /* Hangul Syllable */ + [0xcf5e, 0xcf5e], /* Hangul Syllable */ + [0xcf5f, 0xcf5f], /* Hangul Syllable */ + [0xcf60, 0xcf60], /* Hangul Syllable */ + [0xcf61, 0xcf61], /* Hangul Syllable */ + [0xcf62, 0xcf62], /* Hangul Syllable */ + [0xcf63, 0xcf63], /* Hangul Syllable */ + [0xcf64, 0xcf64], /* Hangul Syllable */ + [0xcf65, 0xcf65], /* Hangul Syllable */ + [0xcf66, 0xcf66], /* Hangul Syllable */ + [0xcf67, 0xcf67], /* Hangul Syllable */ + [0xcf68, 0xcf68], /* Hangul Syllable */ + [0xcf69, 0xcf69], /* Hangul Syllable */ + [0xcf6a, 0xcf6a], /* Hangul Syllable */ + [0xcf6b, 0xcf6b], /* Hangul Syllable */ + [0xcf6c, 0xcf6c], /* Hangul Syllable */ + [0xcf6d, 0xcf6d], /* Hangul Syllable */ + [0xcf6e, 0xcf6e], /* Hangul Syllable */ + [0xcf6f, 0xcf6f], /* Hangul Syllable */ + [0xcf70, 0xcf70], /* Hangul Syllable */ + [0xcf71, 0xcf71], /* Hangul Syllable */ + [0xcf72, 0xcf72], /* Hangul Syllable */ + [0xcf73, 0xcf73], /* Hangul Syllable */ + [0xcf74, 0xcf74], /* Hangul Syllable */ + [0xcf75, 0xcf75], /* Hangul Syllable */ + [0xcf76, 0xcf76], /* Hangul Syllable */ + [0xcf77, 0xcf77], /* Hangul Syllable */ + [0xcf78, 0xcf78], /* Hangul Syllable */ + [0xcf79, 0xcf79], /* Hangul Syllable */ + [0xcf7a, 0xcf7a], /* Hangul Syllable */ + [0xcf7b, 0xcf7b], /* Hangul Syllable */ + [0xcf7c, 0xcf7c], /* Hangul Syllable */ + [0xcf7d, 0xcf7d], /* Hangul Syllable */ + [0xcf7e, 0xcf7e], /* Hangul Syllable */ + [0xcf7f, 0xcf7f], /* Hangul Syllable */ + [0xcf80, 0xcf80], /* Hangul Syllable */ + [0xcf81, 0xcf81], /* Hangul Syllable */ + [0xcf82, 0xcf82], /* Hangul Syllable */ + [0xcf83, 0xcf83], /* Hangul Syllable */ + [0xcf84, 0xcf84], /* Hangul Syllable */ + [0xcf85, 0xcf85], /* Hangul Syllable */ + [0xcf86, 0xcf86], /* Hangul Syllable */ + [0xcf87, 0xcf87], /* Hangul Syllable */ + [0xcf88, 0xcf88], /* Hangul Syllable */ + [0xcf89, 0xcf89], /* Hangul Syllable */ + [0xcf8a, 0xcf8a], /* Hangul Syllable */ + [0xcf8b, 0xcf8b], /* Hangul Syllable */ + [0xcf8c, 0xcf8c], /* Hangul Syllable */ + [0xcf8d, 0xcf8d], /* Hangul Syllable */ + [0xcf8e, 0xcf8e], /* Hangul Syllable */ + [0xcf8f, 0xcf8f], /* Hangul Syllable */ + [0xcf90, 0xcf90], /* Hangul Syllable */ + [0xcf91, 0xcf91], /* Hangul Syllable */ + [0xcf92, 0xcf92], /* Hangul Syllable */ + [0xcf93, 0xcf93], /* Hangul Syllable */ + [0xcf94, 0xcf94], /* Hangul Syllable */ + [0xcf95, 0xcf95], /* Hangul Syllable */ + [0xcf96, 0xcf96], /* Hangul Syllable */ + [0xcf97, 0xcf97], /* Hangul Syllable */ + [0xcf98, 0xcf98], /* Hangul Syllable */ + [0xcf99, 0xcf99], /* Hangul Syllable */ + [0xcf9a, 0xcf9a], /* Hangul Syllable */ + [0xcf9b, 0xcf9b], /* Hangul Syllable */ + [0xcf9c, 0xcf9c], /* Hangul Syllable */ + [0xcf9d, 0xcf9d], /* Hangul Syllable */ + [0xcf9e, 0xcf9e], /* Hangul Syllable */ + [0xcf9f, 0xcf9f], /* Hangul Syllable */ + [0xcfa0, 0xcfa0], /* Hangul Syllable */ + [0xcfa1, 0xcfa1], /* Hangul Syllable */ + [0xcfa2, 0xcfa2], /* Hangul Syllable */ + [0xcfa3, 0xcfa3], /* Hangul Syllable */ + [0xcfa4, 0xcfa4], /* Hangul Syllable */ + [0xcfa5, 0xcfa5], /* Hangul Syllable */ + [0xcfa6, 0xcfa6], /* Hangul Syllable */ + [0xcfa7, 0xcfa7], /* Hangul Syllable */ + [0xcfa8, 0xcfa8], /* Hangul Syllable */ + [0xcfa9, 0xcfa9], /* Hangul Syllable */ + [0xcfaa, 0xcfaa], /* Hangul Syllable */ + [0xcfab, 0xcfab], /* Hangul Syllable */ + [0xcfac, 0xcfac], /* Hangul Syllable */ + [0xcfad, 0xcfad], /* Hangul Syllable */ + [0xcfae, 0xcfae], /* Hangul Syllable */ + [0xcfaf, 0xcfaf], /* Hangul Syllable */ + [0xcfb0, 0xcfb0], /* Hangul Syllable */ + [0xcfb1, 0xcfb1], /* Hangul Syllable */ + [0xcfb2, 0xcfb2], /* Hangul Syllable */ + [0xcfb3, 0xcfb3], /* Hangul Syllable */ + [0xcfb4, 0xcfb4], /* Hangul Syllable */ + [0xcfb5, 0xcfb5], /* Hangul Syllable */ + [0xcfb6, 0xcfb6], /* Hangul Syllable */ + [0xcfb7, 0xcfb7], /* Hangul Syllable */ + [0xcfb8, 0xcfb8], /* Hangul Syllable */ + [0xcfb9, 0xcfb9], /* Hangul Syllable */ + [0xcfba, 0xcfba], /* Hangul Syllable */ + [0xcfbb, 0xcfbb], /* Hangul Syllable */ + [0xcfbc, 0xcfbc], /* Hangul Syllable */ + [0xcfbd, 0xcfbd], /* Hangul Syllable */ + [0xcfbe, 0xcfbe], /* Hangul Syllable */ + [0xcfbf, 0xcfbf], /* Hangul Syllable */ + [0xcfc0, 0xcfc0], /* Hangul Syllable */ + [0xcfc1, 0xcfc1], /* Hangul Syllable */ + [0xcfc2, 0xcfc2], /* Hangul Syllable */ + [0xcfc3, 0xcfc3], /* Hangul Syllable */ + [0xcfc4, 0xcfc4], /* Hangul Syllable */ + [0xcfc5, 0xcfc5], /* Hangul Syllable */ + [0xcfc6, 0xcfc6], /* Hangul Syllable */ + [0xcfc7, 0xcfc7], /* Hangul Syllable */ + [0xcfc8, 0xcfc8], /* Hangul Syllable */ + [0xcfc9, 0xcfc9], /* Hangul Syllable */ + [0xcfca, 0xcfca], /* Hangul Syllable */ + [0xcfcb, 0xcfcb], /* Hangul Syllable */ + [0xcfcc, 0xcfcc], /* Hangul Syllable */ + [0xcfcd, 0xcfcd], /* Hangul Syllable */ + [0xcfce, 0xcfce], /* Hangul Syllable */ + [0xcfcf, 0xcfcf], /* Hangul Syllable */ + [0xcfd0, 0xcfd0], /* Hangul Syllable */ + [0xcfd1, 0xcfd1], /* Hangul Syllable */ + [0xcfd2, 0xcfd2], /* Hangul Syllable */ + [0xcfd3, 0xcfd3], /* Hangul Syllable */ + [0xcfd4, 0xcfd4], /* Hangul Syllable */ + [0xcfd5, 0xcfd5], /* Hangul Syllable */ + [0xcfd6, 0xcfd6], /* Hangul Syllable */ + [0xcfd7, 0xcfd7], /* Hangul Syllable */ + [0xcfd8, 0xcfd8], /* Hangul Syllable */ + [0xcfd9, 0xcfd9], /* Hangul Syllable */ + [0xcfda, 0xcfda], /* Hangul Syllable */ + [0xcfdb, 0xcfdb], /* Hangul Syllable */ + [0xcfdc, 0xcfdc], /* Hangul Syllable */ + [0xcfdd, 0xcfdd], /* Hangul Syllable */ + [0xcfde, 0xcfde], /* Hangul Syllable */ + [0xcfdf, 0xcfdf], /* Hangul Syllable */ + [0xcfe0, 0xcfe0], /* Hangul Syllable */ + [0xcfe1, 0xcfe1], /* Hangul Syllable */ + [0xcfe2, 0xcfe2], /* Hangul Syllable */ + [0xcfe3, 0xcfe3], /* Hangul Syllable */ + [0xcfe4, 0xcfe4], /* Hangul Syllable */ + [0xcfe5, 0xcfe5], /* Hangul Syllable */ + [0xcfe6, 0xcfe6], /* Hangul Syllable */ + [0xcfe7, 0xcfe7], /* Hangul Syllable */ + [0xcfe8, 0xcfe8], /* Hangul Syllable */ + [0xcfe9, 0xcfe9], /* Hangul Syllable */ + [0xcfea, 0xcfea], /* Hangul Syllable */ + [0xcfeb, 0xcfeb], /* Hangul Syllable */ + [0xcfec, 0xcfec], /* Hangul Syllable */ + [0xcfed, 0xcfed], /* Hangul Syllable */ + [0xcfee, 0xcfee], /* Hangul Syllable */ + [0xcfef, 0xcfef], /* Hangul Syllable */ + [0xcff0, 0xcff0], /* Hangul Syllable */ + [0xcff1, 0xcff1], /* Hangul Syllable */ + [0xcff2, 0xcff2], /* Hangul Syllable */ + [0xcff3, 0xcff3], /* Hangul Syllable */ + [0xcff4, 0xcff4], /* Hangul Syllable */ + [0xcff5, 0xcff5], /* Hangul Syllable */ + [0xcff6, 0xcff6], /* Hangul Syllable */ + [0xcff7, 0xcff7], /* Hangul Syllable */ + [0xcff8, 0xcff8], /* Hangul Syllable */ + [0xcff9, 0xcff9], /* Hangul Syllable */ + [0xcffa, 0xcffa], /* Hangul Syllable */ + [0xcffb, 0xcffb], /* Hangul Syllable */ + [0xcffc, 0xcffc], /* Hangul Syllable */ + [0xcffd, 0xcffd], /* Hangul Syllable */ + [0xcffe, 0xcffe], /* Hangul Syllable */ + [0xcfff, 0xcfff], /* Hangul Syllable */ + [0xd000, 0xd000], /* Hangul Syllable */ + [0xd001, 0xd001], /* Hangul Syllable */ + [0xd002, 0xd002], /* Hangul Syllable */ + [0xd003, 0xd003], /* Hangul Syllable */ + [0xd004, 0xd004], /* Hangul Syllable */ + [0xd005, 0xd005], /* Hangul Syllable */ + [0xd006, 0xd006], /* Hangul Syllable */ + [0xd007, 0xd007], /* Hangul Syllable */ + [0xd008, 0xd008], /* Hangul Syllable */ + [0xd009, 0xd009], /* Hangul Syllable */ + [0xd00a, 0xd00a], /* Hangul Syllable */ + [0xd00b, 0xd00b], /* Hangul Syllable */ + [0xd00c, 0xd00c], /* Hangul Syllable */ + [0xd00d, 0xd00d], /* Hangul Syllable */ + [0xd00e, 0xd00e], /* Hangul Syllable */ + [0xd00f, 0xd00f], /* Hangul Syllable */ + [0xd010, 0xd010], /* Hangul Syllable */ + [0xd011, 0xd011], /* Hangul Syllable */ + [0xd012, 0xd012], /* Hangul Syllable */ + [0xd013, 0xd013], /* Hangul Syllable */ + [0xd014, 0xd014], /* Hangul Syllable */ + [0xd015, 0xd015], /* Hangul Syllable */ + [0xd016, 0xd016], /* Hangul Syllable */ + [0xd017, 0xd017], /* Hangul Syllable */ + [0xd018, 0xd018], /* Hangul Syllable */ + [0xd019, 0xd019], /* Hangul Syllable */ + [0xd01a, 0xd01a], /* Hangul Syllable */ + [0xd01b, 0xd01b], /* Hangul Syllable */ + [0xd01c, 0xd01c], /* Hangul Syllable */ + [0xd01d, 0xd01d], /* Hangul Syllable */ + [0xd01e, 0xd01e], /* Hangul Syllable */ + [0xd01f, 0xd01f], /* Hangul Syllable */ + [0xd020, 0xd020], /* Hangul Syllable */ + [0xd021, 0xd021], /* Hangul Syllable */ + [0xd022, 0xd022], /* Hangul Syllable */ + [0xd023, 0xd023], /* Hangul Syllable */ + [0xd024, 0xd024], /* Hangul Syllable */ + [0xd025, 0xd025], /* Hangul Syllable */ + [0xd026, 0xd026], /* Hangul Syllable */ + [0xd027, 0xd027], /* Hangul Syllable */ + [0xd028, 0xd028], /* Hangul Syllable */ + [0xd029, 0xd029], /* Hangul Syllable */ + [0xd02a, 0xd02a], /* Hangul Syllable */ + [0xd02b, 0xd02b], /* Hangul Syllable */ + [0xd02c, 0xd02c], /* Hangul Syllable */ + [0xd02d, 0xd02d], /* Hangul Syllable */ + [0xd02e, 0xd02e], /* Hangul Syllable */ + [0xd02f, 0xd02f], /* Hangul Syllable */ + [0xd030, 0xd030], /* Hangul Syllable */ + [0xd031, 0xd031], /* Hangul Syllable */ + [0xd032, 0xd032], /* Hangul Syllable */ + [0xd033, 0xd033], /* Hangul Syllable */ + [0xd034, 0xd034], /* Hangul Syllable */ + [0xd035, 0xd035], /* Hangul Syllable */ + [0xd036, 0xd036], /* Hangul Syllable */ + [0xd037, 0xd037], /* Hangul Syllable */ + [0xd038, 0xd038], /* Hangul Syllable */ + [0xd039, 0xd039], /* Hangul Syllable */ + [0xd03a, 0xd03a], /* Hangul Syllable */ + [0xd03b, 0xd03b], /* Hangul Syllable */ + [0xd03c, 0xd03c], /* Hangul Syllable */ + [0xd03d, 0xd03d], /* Hangul Syllable */ + [0xd03e, 0xd03e], /* Hangul Syllable */ + [0xd03f, 0xd03f], /* Hangul Syllable */ + [0xd040, 0xd040], /* Hangul Syllable */ + [0xd041, 0xd041], /* Hangul Syllable */ + [0xd042, 0xd042], /* Hangul Syllable */ + [0xd043, 0xd043], /* Hangul Syllable */ + [0xd044, 0xd044], /* Hangul Syllable */ + [0xd045, 0xd045], /* Hangul Syllable */ + [0xd046, 0xd046], /* Hangul Syllable */ + [0xd047, 0xd047], /* Hangul Syllable */ + [0xd048, 0xd048], /* Hangul Syllable */ + [0xd049, 0xd049], /* Hangul Syllable */ + [0xd04a, 0xd04a], /* Hangul Syllable */ + [0xd04b, 0xd04b], /* Hangul Syllable */ + [0xd04c, 0xd04c], /* Hangul Syllable */ + [0xd04d, 0xd04d], /* Hangul Syllable */ + [0xd04e, 0xd04e], /* Hangul Syllable */ + [0xd04f, 0xd04f], /* Hangul Syllable */ + [0xd050, 0xd050], /* Hangul Syllable */ + [0xd051, 0xd051], /* Hangul Syllable */ + [0xd052, 0xd052], /* Hangul Syllable */ + [0xd053, 0xd053], /* Hangul Syllable */ + [0xd054, 0xd054], /* Hangul Syllable */ + [0xd055, 0xd055], /* Hangul Syllable */ + [0xd056, 0xd056], /* Hangul Syllable */ + [0xd057, 0xd057], /* Hangul Syllable */ + [0xd058, 0xd058], /* Hangul Syllable */ + [0xd059, 0xd059], /* Hangul Syllable */ + [0xd05a, 0xd05a], /* Hangul Syllable */ + [0xd05b, 0xd05b], /* Hangul Syllable */ + [0xd05c, 0xd05c], /* Hangul Syllable */ + [0xd05d, 0xd05d], /* Hangul Syllable */ + [0xd05e, 0xd05e], /* Hangul Syllable */ + [0xd05f, 0xd05f], /* Hangul Syllable */ + [0xd060, 0xd060], /* Hangul Syllable */ + [0xd061, 0xd061], /* Hangul Syllable */ + [0xd062, 0xd062], /* Hangul Syllable */ + [0xd063, 0xd063], /* Hangul Syllable */ + [0xd064, 0xd064], /* Hangul Syllable */ + [0xd065, 0xd065], /* Hangul Syllable */ + [0xd066, 0xd066], /* Hangul Syllable */ + [0xd067, 0xd067], /* Hangul Syllable */ + [0xd068, 0xd068], /* Hangul Syllable */ + [0xd069, 0xd069], /* Hangul Syllable */ + [0xd06a, 0xd06a], /* Hangul Syllable */ + [0xd06b, 0xd06b], /* Hangul Syllable */ + [0xd06c, 0xd06c], /* Hangul Syllable */ + [0xd06d, 0xd06d], /* Hangul Syllable */ + [0xd06e, 0xd06e], /* Hangul Syllable */ + [0xd06f, 0xd06f], /* Hangul Syllable */ + [0xd070, 0xd070], /* Hangul Syllable */ + [0xd071, 0xd071], /* Hangul Syllable */ + [0xd072, 0xd072], /* Hangul Syllable */ + [0xd073, 0xd073], /* Hangul Syllable */ + [0xd074, 0xd074], /* Hangul Syllable */ + [0xd075, 0xd075], /* Hangul Syllable */ + [0xd076, 0xd076], /* Hangul Syllable */ + [0xd077, 0xd077], /* Hangul Syllable */ + [0xd078, 0xd078], /* Hangul Syllable */ + [0xd079, 0xd079], /* Hangul Syllable */ + [0xd07a, 0xd07a], /* Hangul Syllable */ + [0xd07b, 0xd07b], /* Hangul Syllable */ + [0xd07c, 0xd07c], /* Hangul Syllable */ + [0xd07d, 0xd07d], /* Hangul Syllable */ + [0xd07e, 0xd07e], /* Hangul Syllable */ + [0xd07f, 0xd07f], /* Hangul Syllable */ + [0xd080, 0xd080], /* Hangul Syllable */ + [0xd081, 0xd081], /* Hangul Syllable */ + [0xd082, 0xd082], /* Hangul Syllable */ + [0xd083, 0xd083], /* Hangul Syllable */ + [0xd084, 0xd084], /* Hangul Syllable */ + [0xd085, 0xd085], /* Hangul Syllable */ + [0xd086, 0xd086], /* Hangul Syllable */ + [0xd087, 0xd087], /* Hangul Syllable */ + [0xd088, 0xd088], /* Hangul Syllable */ + [0xd089, 0xd089], /* Hangul Syllable */ + [0xd08a, 0xd08a], /* Hangul Syllable */ + [0xd08b, 0xd08b], /* Hangul Syllable */ + [0xd08c, 0xd08c], /* Hangul Syllable */ + [0xd08d, 0xd08d], /* Hangul Syllable */ + [0xd08e, 0xd08e], /* Hangul Syllable */ + [0xd08f, 0xd08f], /* Hangul Syllable */ + [0xd090, 0xd090], /* Hangul Syllable */ + [0xd091, 0xd091], /* Hangul Syllable */ + [0xd092, 0xd092], /* Hangul Syllable */ + [0xd093, 0xd093], /* Hangul Syllable */ + [0xd094, 0xd094], /* Hangul Syllable */ + [0xd095, 0xd095], /* Hangul Syllable */ + [0xd096, 0xd096], /* Hangul Syllable */ + [0xd097, 0xd097], /* Hangul Syllable */ + [0xd098, 0xd098], /* Hangul Syllable */ + [0xd099, 0xd099], /* Hangul Syllable */ + [0xd09a, 0xd09a], /* Hangul Syllable */ + [0xd09b, 0xd09b], /* Hangul Syllable */ + [0xd09c, 0xd09c], /* Hangul Syllable */ + [0xd09d, 0xd09d], /* Hangul Syllable */ + [0xd09e, 0xd09e], /* Hangul Syllable */ + [0xd09f, 0xd09f], /* Hangul Syllable */ + [0xd0a0, 0xd0a0], /* Hangul Syllable */ + [0xd0a1, 0xd0a1], /* Hangul Syllable */ + [0xd0a2, 0xd0a2], /* Hangul Syllable */ + [0xd0a3, 0xd0a3], /* Hangul Syllable */ + [0xd0a4, 0xd0a4], /* Hangul Syllable */ + [0xd0a5, 0xd0a5], /* Hangul Syllable */ + [0xd0a6, 0xd0a6], /* Hangul Syllable */ + [0xd0a7, 0xd0a7], /* Hangul Syllable */ + [0xd0a8, 0xd0a8], /* Hangul Syllable */ + [0xd0a9, 0xd0a9], /* Hangul Syllable */ + [0xd0aa, 0xd0aa], /* Hangul Syllable */ + [0xd0ab, 0xd0ab], /* Hangul Syllable */ + [0xd0ac, 0xd0ac], /* Hangul Syllable */ + [0xd0ad, 0xd0ad], /* Hangul Syllable */ + [0xd0ae, 0xd0ae], /* Hangul Syllable */ + [0xd0af, 0xd0af], /* Hangul Syllable */ + [0xd0b0, 0xd0b0], /* Hangul Syllable */ + [0xd0b1, 0xd0b1], /* Hangul Syllable */ + [0xd0b2, 0xd0b2], /* Hangul Syllable */ + [0xd0b3, 0xd0b3], /* Hangul Syllable */ + [0xd0b4, 0xd0b4], /* Hangul Syllable */ + [0xd0b5, 0xd0b5], /* Hangul Syllable */ + [0xd0b6, 0xd0b6], /* Hangul Syllable */ + [0xd0b7, 0xd0b7], /* Hangul Syllable */ + [0xd0b8, 0xd0b8], /* Hangul Syllable */ + [0xd0b9, 0xd0b9], /* Hangul Syllable */ + [0xd0ba, 0xd0ba], /* Hangul Syllable */ + [0xd0bb, 0xd0bb], /* Hangul Syllable */ + [0xd0bc, 0xd0bc], /* Hangul Syllable */ + [0xd0bd, 0xd0bd], /* Hangul Syllable */ + [0xd0be, 0xd0be], /* Hangul Syllable */ + [0xd0bf, 0xd0bf], /* Hangul Syllable */ + [0xd0c0, 0xd0c0], /* Hangul Syllable */ + [0xd0c1, 0xd0c1], /* Hangul Syllable */ + [0xd0c2, 0xd0c2], /* Hangul Syllable */ + [0xd0c3, 0xd0c3], /* Hangul Syllable */ + [0xd0c4, 0xd0c4], /* Hangul Syllable */ + [0xd0c5, 0xd0c5], /* Hangul Syllable */ + [0xd0c6, 0xd0c6], /* Hangul Syllable */ + [0xd0c7, 0xd0c7], /* Hangul Syllable */ + [0xd0c8, 0xd0c8], /* Hangul Syllable */ + [0xd0c9, 0xd0c9], /* Hangul Syllable */ + [0xd0ca, 0xd0ca], /* Hangul Syllable */ + [0xd0cb, 0xd0cb], /* Hangul Syllable */ + [0xd0cc, 0xd0cc], /* Hangul Syllable */ + [0xd0cd, 0xd0cd], /* Hangul Syllable */ + [0xd0ce, 0xd0ce], /* Hangul Syllable */ + [0xd0cf, 0xd0cf], /* Hangul Syllable */ + [0xd0d0, 0xd0d0], /* Hangul Syllable */ + [0xd0d1, 0xd0d1], /* Hangul Syllable */ + [0xd0d2, 0xd0d2], /* Hangul Syllable */ + [0xd0d3, 0xd0d3], /* Hangul Syllable */ + [0xd0d4, 0xd0d4], /* Hangul Syllable */ + [0xd0d5, 0xd0d5], /* Hangul Syllable */ + [0xd0d6, 0xd0d6], /* Hangul Syllable */ + [0xd0d7, 0xd0d7], /* Hangul Syllable */ + [0xd0d8, 0xd0d8], /* Hangul Syllable */ + [0xd0d9, 0xd0d9], /* Hangul Syllable */ + [0xd0da, 0xd0da], /* Hangul Syllable */ + [0xd0db, 0xd0db], /* Hangul Syllable */ + [0xd0dc, 0xd0dc], /* Hangul Syllable */ + [0xd0dd, 0xd0dd], /* Hangul Syllable */ + [0xd0de, 0xd0de], /* Hangul Syllable */ + [0xd0df, 0xd0df], /* Hangul Syllable */ + [0xd0e0, 0xd0e0], /* Hangul Syllable */ + [0xd0e1, 0xd0e1], /* Hangul Syllable */ + [0xd0e2, 0xd0e2], /* Hangul Syllable */ + [0xd0e3, 0xd0e3], /* Hangul Syllable */ + [0xd0e4, 0xd0e4], /* Hangul Syllable */ + [0xd0e5, 0xd0e5], /* Hangul Syllable */ + [0xd0e6, 0xd0e6], /* Hangul Syllable */ + [0xd0e7, 0xd0e7], /* Hangul Syllable */ + [0xd0e8, 0xd0e8], /* Hangul Syllable */ + [0xd0e9, 0xd0e9], /* Hangul Syllable */ + [0xd0ea, 0xd0ea], /* Hangul Syllable */ + [0xd0eb, 0xd0eb], /* Hangul Syllable */ + [0xd0ec, 0xd0ec], /* Hangul Syllable */ + [0xd0ed, 0xd0ed], /* Hangul Syllable */ + [0xd0ee, 0xd0ee], /* Hangul Syllable */ + [0xd0ef, 0xd0ef], /* Hangul Syllable */ + [0xd0f0, 0xd0f0], /* Hangul Syllable */ + [0xd0f1, 0xd0f1], /* Hangul Syllable */ + [0xd0f2, 0xd0f2], /* Hangul Syllable */ + [0xd0f3, 0xd0f3], /* Hangul Syllable */ + [0xd0f4, 0xd0f4], /* Hangul Syllable */ + [0xd0f5, 0xd0f5], /* Hangul Syllable */ + [0xd0f6, 0xd0f6], /* Hangul Syllable */ + [0xd0f7, 0xd0f7], /* Hangul Syllable */ + [0xd0f8, 0xd0f8], /* Hangul Syllable */ + [0xd0f9, 0xd0f9], /* Hangul Syllable */ + [0xd0fa, 0xd0fa], /* Hangul Syllable */ + [0xd0fb, 0xd0fb], /* Hangul Syllable */ + [0xd0fc, 0xd0fc], /* Hangul Syllable */ + [0xd0fd, 0xd0fd], /* Hangul Syllable */ + [0xd0fe, 0xd0fe], /* Hangul Syllable */ + [0xd0ff, 0xd0ff], /* Hangul Syllable */ + [0xd100, 0xd100], /* Hangul Syllable */ + [0xd101, 0xd101], /* Hangul Syllable */ + [0xd102, 0xd102], /* Hangul Syllable */ + [0xd103, 0xd103], /* Hangul Syllable */ + [0xd104, 0xd104], /* Hangul Syllable */ + [0xd105, 0xd105], /* Hangul Syllable */ + [0xd106, 0xd106], /* Hangul Syllable */ + [0xd107, 0xd107], /* Hangul Syllable */ + [0xd108, 0xd108], /* Hangul Syllable */ + [0xd109, 0xd109], /* Hangul Syllable */ + [0xd10a, 0xd10a], /* Hangul Syllable */ + [0xd10b, 0xd10b], /* Hangul Syllable */ + [0xd10c, 0xd10c], /* Hangul Syllable */ + [0xd10d, 0xd10d], /* Hangul Syllable */ + [0xd10e, 0xd10e], /* Hangul Syllable */ + [0xd10f, 0xd10f], /* Hangul Syllable */ + [0xd110, 0xd110], /* Hangul Syllable */ + [0xd111, 0xd111], /* Hangul Syllable */ + [0xd112, 0xd112], /* Hangul Syllable */ + [0xd113, 0xd113], /* Hangul Syllable */ + [0xd114, 0xd114], /* Hangul Syllable */ + [0xd115, 0xd115], /* Hangul Syllable */ + [0xd116, 0xd116], /* Hangul Syllable */ + [0xd117, 0xd117], /* Hangul Syllable */ + [0xd118, 0xd118], /* Hangul Syllable */ + [0xd119, 0xd119], /* Hangul Syllable */ + [0xd11a, 0xd11a], /* Hangul Syllable */ + [0xd11b, 0xd11b], /* Hangul Syllable */ + [0xd11c, 0xd11c], /* Hangul Syllable */ + [0xd11d, 0xd11d], /* Hangul Syllable */ + [0xd11e, 0xd11e], /* Hangul Syllable */ + [0xd11f, 0xd11f], /* Hangul Syllable */ + [0xd120, 0xd120], /* Hangul Syllable */ + [0xd121, 0xd121], /* Hangul Syllable */ + [0xd122, 0xd122], /* Hangul Syllable */ + [0xd123, 0xd123], /* Hangul Syllable */ + [0xd124, 0xd124], /* Hangul Syllable */ + [0xd125, 0xd125], /* Hangul Syllable */ + [0xd126, 0xd126], /* Hangul Syllable */ + [0xd127, 0xd127], /* Hangul Syllable */ + [0xd128, 0xd128], /* Hangul Syllable */ + [0xd129, 0xd129], /* Hangul Syllable */ + [0xd12a, 0xd12a], /* Hangul Syllable */ + [0xd12b, 0xd12b], /* Hangul Syllable */ + [0xd12c, 0xd12c], /* Hangul Syllable */ + [0xd12d, 0xd12d], /* Hangul Syllable */ + [0xd12e, 0xd12e], /* Hangul Syllable */ + [0xd12f, 0xd12f], /* Hangul Syllable */ + [0xd130, 0xd130], /* Hangul Syllable */ + [0xd131, 0xd131], /* Hangul Syllable */ + [0xd132, 0xd132], /* Hangul Syllable */ + [0xd133, 0xd133], /* Hangul Syllable */ + [0xd134, 0xd134], /* Hangul Syllable */ + [0xd135, 0xd135], /* Hangul Syllable */ + [0xd136, 0xd136], /* Hangul Syllable */ + [0xd137, 0xd137], /* Hangul Syllable */ + [0xd138, 0xd138], /* Hangul Syllable */ + [0xd139, 0xd139], /* Hangul Syllable */ + [0xd13a, 0xd13a], /* Hangul Syllable */ + [0xd13b, 0xd13b], /* Hangul Syllable */ + [0xd13c, 0xd13c], /* Hangul Syllable */ + [0xd13d, 0xd13d], /* Hangul Syllable */ + [0xd13e, 0xd13e], /* Hangul Syllable */ + [0xd13f, 0xd13f], /* Hangul Syllable */ + [0xd140, 0xd140], /* Hangul Syllable */ + [0xd141, 0xd141], /* Hangul Syllable */ + [0xd142, 0xd142], /* Hangul Syllable */ + [0xd143, 0xd143], /* Hangul Syllable */ + [0xd144, 0xd144], /* Hangul Syllable */ + [0xd145, 0xd145], /* Hangul Syllable */ + [0xd146, 0xd146], /* Hangul Syllable */ + [0xd147, 0xd147], /* Hangul Syllable */ + [0xd148, 0xd148], /* Hangul Syllable */ + [0xd149, 0xd149], /* Hangul Syllable */ + [0xd14a, 0xd14a], /* Hangul Syllable */ + [0xd14b, 0xd14b], /* Hangul Syllable */ + [0xd14c, 0xd14c], /* Hangul Syllable */ + [0xd14d, 0xd14d], /* Hangul Syllable */ + [0xd14e, 0xd14e], /* Hangul Syllable */ + [0xd14f, 0xd14f], /* Hangul Syllable */ + [0xd150, 0xd150], /* Hangul Syllable */ + [0xd151, 0xd151], /* Hangul Syllable */ + [0xd152, 0xd152], /* Hangul Syllable */ + [0xd153, 0xd153], /* Hangul Syllable */ + [0xd154, 0xd154], /* Hangul Syllable */ + [0xd155, 0xd155], /* Hangul Syllable */ + [0xd156, 0xd156], /* Hangul Syllable */ + [0xd157, 0xd157], /* Hangul Syllable */ + [0xd158, 0xd158], /* Hangul Syllable */ + [0xd159, 0xd159], /* Hangul Syllable */ + [0xd15a, 0xd15a], /* Hangul Syllable */ + [0xd15b, 0xd15b], /* Hangul Syllable */ + [0xd15c, 0xd15c], /* Hangul Syllable */ + [0xd15d, 0xd15d], /* Hangul Syllable */ + [0xd15e, 0xd15e], /* Hangul Syllable */ + [0xd15f, 0xd15f], /* Hangul Syllable */ + [0xd160, 0xd160], /* Hangul Syllable */ + [0xd161, 0xd161], /* Hangul Syllable */ + [0xd162, 0xd162], /* Hangul Syllable */ + [0xd163, 0xd163], /* Hangul Syllable */ + [0xd164, 0xd164], /* Hangul Syllable */ + [0xd165, 0xd165], /* Hangul Syllable */ + [0xd166, 0xd166], /* Hangul Syllable */ + [0xd167, 0xd167], /* Hangul Syllable */ + [0xd168, 0xd168], /* Hangul Syllable */ + [0xd169, 0xd169], /* Hangul Syllable */ + [0xd16a, 0xd16a], /* Hangul Syllable */ + [0xd16b, 0xd16b], /* Hangul Syllable */ + [0xd16c, 0xd16c], /* Hangul Syllable */ + [0xd16d, 0xd16d], /* Hangul Syllable */ + [0xd16e, 0xd16e], /* Hangul Syllable */ + [0xd16f, 0xd16f], /* Hangul Syllable */ + [0xd170, 0xd170], /* Hangul Syllable */ + [0xd171, 0xd171], /* Hangul Syllable */ + [0xd172, 0xd172], /* Hangul Syllable */ + [0xd173, 0xd173], /* Hangul Syllable */ + [0xd174, 0xd174], /* Hangul Syllable */ + [0xd175, 0xd175], /* Hangul Syllable */ + [0xd176, 0xd176], /* Hangul Syllable */ + [0xd177, 0xd177], /* Hangul Syllable */ + [0xd178, 0xd178], /* Hangul Syllable */ + [0xd179, 0xd179], /* Hangul Syllable */ + [0xd17a, 0xd17a], /* Hangul Syllable */ + [0xd17b, 0xd17b], /* Hangul Syllable */ + [0xd17c, 0xd17c], /* Hangul Syllable */ + [0xd17d, 0xd17d], /* Hangul Syllable */ + [0xd17e, 0xd17e], /* Hangul Syllable */ + [0xd17f, 0xd17f], /* Hangul Syllable */ + [0xd180, 0xd180], /* Hangul Syllable */ + [0xd181, 0xd181], /* Hangul Syllable */ + [0xd182, 0xd182], /* Hangul Syllable */ + [0xd183, 0xd183], /* Hangul Syllable */ + [0xd184, 0xd184], /* Hangul Syllable */ + [0xd185, 0xd185], /* Hangul Syllable */ + [0xd186, 0xd186], /* Hangul Syllable */ + [0xd187, 0xd187], /* Hangul Syllable */ + [0xd188, 0xd188], /* Hangul Syllable */ + [0xd189, 0xd189], /* Hangul Syllable */ + [0xd18a, 0xd18a], /* Hangul Syllable */ + [0xd18b, 0xd18b], /* Hangul Syllable */ + [0xd18c, 0xd18c], /* Hangul Syllable */ + [0xd18d, 0xd18d], /* Hangul Syllable */ + [0xd18e, 0xd18e], /* Hangul Syllable */ + [0xd18f, 0xd18f], /* Hangul Syllable */ + [0xd190, 0xd190], /* Hangul Syllable */ + [0xd191, 0xd191], /* Hangul Syllable */ + [0xd192, 0xd192], /* Hangul Syllable */ + [0xd193, 0xd193], /* Hangul Syllable */ + [0xd194, 0xd194], /* Hangul Syllable */ + [0xd195, 0xd195], /* Hangul Syllable */ + [0xd196, 0xd196], /* Hangul Syllable */ + [0xd197, 0xd197], /* Hangul Syllable */ + [0xd198, 0xd198], /* Hangul Syllable */ + [0xd199, 0xd199], /* Hangul Syllable */ + [0xd19a, 0xd19a], /* Hangul Syllable */ + [0xd19b, 0xd19b], /* Hangul Syllable */ + [0xd19c, 0xd19c], /* Hangul Syllable */ + [0xd19d, 0xd19d], /* Hangul Syllable */ + [0xd19e, 0xd19e], /* Hangul Syllable */ + [0xd19f, 0xd19f], /* Hangul Syllable */ + [0xd1a0, 0xd1a0], /* Hangul Syllable */ + [0xd1a1, 0xd1a1], /* Hangul Syllable */ + [0xd1a2, 0xd1a2], /* Hangul Syllable */ + [0xd1a3, 0xd1a3], /* Hangul Syllable */ + [0xd1a4, 0xd1a4], /* Hangul Syllable */ + [0xd1a5, 0xd1a5], /* Hangul Syllable */ + [0xd1a6, 0xd1a6], /* Hangul Syllable */ + [0xd1a7, 0xd1a7], /* Hangul Syllable */ + [0xd1a8, 0xd1a8], /* Hangul Syllable */ + [0xd1a9, 0xd1a9], /* Hangul Syllable */ + [0xd1aa, 0xd1aa], /* Hangul Syllable */ + [0xd1ab, 0xd1ab], /* Hangul Syllable */ + [0xd1ac, 0xd1ac], /* Hangul Syllable */ + [0xd1ad, 0xd1ad], /* Hangul Syllable */ + [0xd1ae, 0xd1ae], /* Hangul Syllable */ + [0xd1af, 0xd1af], /* Hangul Syllable */ + [0xd1b0, 0xd1b0], /* Hangul Syllable */ + [0xd1b1, 0xd1b1], /* Hangul Syllable */ + [0xd1b2, 0xd1b2], /* Hangul Syllable */ + [0xd1b3, 0xd1b3], /* Hangul Syllable */ + [0xd1b4, 0xd1b4], /* Hangul Syllable */ + [0xd1b5, 0xd1b5], /* Hangul Syllable */ + [0xd1b6, 0xd1b6], /* Hangul Syllable */ + [0xd1b7, 0xd1b7], /* Hangul Syllable */ + [0xd1b8, 0xd1b8], /* Hangul Syllable */ + [0xd1b9, 0xd1b9], /* Hangul Syllable */ + [0xd1ba, 0xd1ba], /* Hangul Syllable */ + [0xd1bb, 0xd1bb], /* Hangul Syllable */ + [0xd1bc, 0xd1bc], /* Hangul Syllable */ + [0xd1bd, 0xd1bd], /* Hangul Syllable */ + [0xd1be, 0xd1be], /* Hangul Syllable */ + [0xd1bf, 0xd1bf], /* Hangul Syllable */ + [0xd1c0, 0xd1c0], /* Hangul Syllable */ + [0xd1c1, 0xd1c1], /* Hangul Syllable */ + [0xd1c2, 0xd1c2], /* Hangul Syllable */ + [0xd1c3, 0xd1c3], /* Hangul Syllable */ + [0xd1c4, 0xd1c4], /* Hangul Syllable */ + [0xd1c5, 0xd1c5], /* Hangul Syllable */ + [0xd1c6, 0xd1c6], /* Hangul Syllable */ + [0xd1c7, 0xd1c7], /* Hangul Syllable */ + [0xd1c8, 0xd1c8], /* Hangul Syllable */ + [0xd1c9, 0xd1c9], /* Hangul Syllable */ + [0xd1ca, 0xd1ca], /* Hangul Syllable */ + [0xd1cb, 0xd1cb], /* Hangul Syllable */ + [0xd1cc, 0xd1cc], /* Hangul Syllable */ + [0xd1cd, 0xd1cd], /* Hangul Syllable */ + [0xd1ce, 0xd1ce], /* Hangul Syllable */ + [0xd1cf, 0xd1cf], /* Hangul Syllable */ + [0xd1d0, 0xd1d0], /* Hangul Syllable */ + [0xd1d1, 0xd1d1], /* Hangul Syllable */ + [0xd1d2, 0xd1d2], /* Hangul Syllable */ + [0xd1d3, 0xd1d3], /* Hangul Syllable */ + [0xd1d4, 0xd1d4], /* Hangul Syllable */ + [0xd1d5, 0xd1d5], /* Hangul Syllable */ + [0xd1d6, 0xd1d6], /* Hangul Syllable */ + [0xd1d7, 0xd1d7], /* Hangul Syllable */ + [0xd1d8, 0xd1d8], /* Hangul Syllable */ + [0xd1d9, 0xd1d9], /* Hangul Syllable */ + [0xd1da, 0xd1da], /* Hangul Syllable */ + [0xd1db, 0xd1db], /* Hangul Syllable */ + [0xd1dc, 0xd1dc], /* Hangul Syllable */ + [0xd1dd, 0xd1dd], /* Hangul Syllable */ + [0xd1de, 0xd1de], /* Hangul Syllable */ + [0xd1df, 0xd1df], /* Hangul Syllable */ + [0xd1e0, 0xd1e0], /* Hangul Syllable */ + [0xd1e1, 0xd1e1], /* Hangul Syllable */ + [0xd1e2, 0xd1e2], /* Hangul Syllable */ + [0xd1e3, 0xd1e3], /* Hangul Syllable */ + [0xd1e4, 0xd1e4], /* Hangul Syllable */ + [0xd1e5, 0xd1e5], /* Hangul Syllable */ + [0xd1e6, 0xd1e6], /* Hangul Syllable */ + [0xd1e7, 0xd1e7], /* Hangul Syllable */ + [0xd1e8, 0xd1e8], /* Hangul Syllable */ + [0xd1e9, 0xd1e9], /* Hangul Syllable */ + [0xd1ea, 0xd1ea], /* Hangul Syllable */ + [0xd1eb, 0xd1eb], /* Hangul Syllable */ + [0xd1ec, 0xd1ec], /* Hangul Syllable */ + [0xd1ed, 0xd1ed], /* Hangul Syllable */ + [0xd1ee, 0xd1ee], /* Hangul Syllable */ + [0xd1ef, 0xd1ef], /* Hangul Syllable */ + [0xd1f0, 0xd1f0], /* Hangul Syllable */ + [0xd1f1, 0xd1f1], /* Hangul Syllable */ + [0xd1f2, 0xd1f2], /* Hangul Syllable */ + [0xd1f3, 0xd1f3], /* Hangul Syllable */ + [0xd1f4, 0xd1f4], /* Hangul Syllable */ + [0xd1f5, 0xd1f5], /* Hangul Syllable */ + [0xd1f6, 0xd1f6], /* Hangul Syllable */ + [0xd1f7, 0xd1f7], /* Hangul Syllable */ + [0xd1f8, 0xd1f8], /* Hangul Syllable */ + [0xd1f9, 0xd1f9], /* Hangul Syllable */ + [0xd1fa, 0xd1fa], /* Hangul Syllable */ + [0xd1fb, 0xd1fb], /* Hangul Syllable */ + [0xd1fc, 0xd1fc], /* Hangul Syllable */ + [0xd1fd, 0xd1fd], /* Hangul Syllable */ + [0xd1fe, 0xd1fe], /* Hangul Syllable */ + [0xd1ff, 0xd1ff], /* Hangul Syllable */ + [0xd200, 0xd200], /* Hangul Syllable */ + [0xd201, 0xd201], /* Hangul Syllable */ + [0xd202, 0xd202], /* Hangul Syllable */ + [0xd203, 0xd203], /* Hangul Syllable */ + [0xd204, 0xd204], /* Hangul Syllable */ + [0xd205, 0xd205], /* Hangul Syllable */ + [0xd206, 0xd206], /* Hangul Syllable */ + [0xd207, 0xd207], /* Hangul Syllable */ + [0xd208, 0xd208], /* Hangul Syllable */ + [0xd209, 0xd209], /* Hangul Syllable */ + [0xd20a, 0xd20a], /* Hangul Syllable */ + [0xd20b, 0xd20b], /* Hangul Syllable */ + [0xd20c, 0xd20c], /* Hangul Syllable */ + [0xd20d, 0xd20d], /* Hangul Syllable */ + [0xd20e, 0xd20e], /* Hangul Syllable */ + [0xd20f, 0xd20f], /* Hangul Syllable */ + [0xd210, 0xd210], /* Hangul Syllable */ + [0xd211, 0xd211], /* Hangul Syllable */ + [0xd212, 0xd212], /* Hangul Syllable */ + [0xd213, 0xd213], /* Hangul Syllable */ + [0xd214, 0xd214], /* Hangul Syllable */ + [0xd215, 0xd215], /* Hangul Syllable */ + [0xd216, 0xd216], /* Hangul Syllable */ + [0xd217, 0xd217], /* Hangul Syllable */ + [0xd218, 0xd218], /* Hangul Syllable */ + [0xd219, 0xd219], /* Hangul Syllable */ + [0xd21a, 0xd21a], /* Hangul Syllable */ + [0xd21b, 0xd21b], /* Hangul Syllable */ + [0xd21c, 0xd21c], /* Hangul Syllable */ + [0xd21d, 0xd21d], /* Hangul Syllable */ + [0xd21e, 0xd21e], /* Hangul Syllable */ + [0xd21f, 0xd21f], /* Hangul Syllable */ + [0xd220, 0xd220], /* Hangul Syllable */ + [0xd221, 0xd221], /* Hangul Syllable */ + [0xd222, 0xd222], /* Hangul Syllable */ + [0xd223, 0xd223], /* Hangul Syllable */ + [0xd224, 0xd224], /* Hangul Syllable */ + [0xd225, 0xd225], /* Hangul Syllable */ + [0xd226, 0xd226], /* Hangul Syllable */ + [0xd227, 0xd227], /* Hangul Syllable */ + [0xd228, 0xd228], /* Hangul Syllable */ + [0xd229, 0xd229], /* Hangul Syllable */ + [0xd22a, 0xd22a], /* Hangul Syllable */ + [0xd22b, 0xd22b], /* Hangul Syllable */ + [0xd22c, 0xd22c], /* Hangul Syllable */ + [0xd22d, 0xd22d], /* Hangul Syllable */ + [0xd22e, 0xd22e], /* Hangul Syllable */ + [0xd22f, 0xd22f], /* Hangul Syllable */ + [0xd230, 0xd230], /* Hangul Syllable */ + [0xd231, 0xd231], /* Hangul Syllable */ + [0xd232, 0xd232], /* Hangul Syllable */ + [0xd233, 0xd233], /* Hangul Syllable */ + [0xd234, 0xd234], /* Hangul Syllable */ + [0xd235, 0xd235], /* Hangul Syllable */ + [0xd236, 0xd236], /* Hangul Syllable */ + [0xd237, 0xd237], /* Hangul Syllable */ + [0xd238, 0xd238], /* Hangul Syllable */ + [0xd239, 0xd239], /* Hangul Syllable */ + [0xd23a, 0xd23a], /* Hangul Syllable */ + [0xd23b, 0xd23b], /* Hangul Syllable */ + [0xd23c, 0xd23c], /* Hangul Syllable */ + [0xd23d, 0xd23d], /* Hangul Syllable */ + [0xd23e, 0xd23e], /* Hangul Syllable */ + [0xd23f, 0xd23f], /* Hangul Syllable */ + [0xd240, 0xd240], /* Hangul Syllable */ + [0xd241, 0xd241], /* Hangul Syllable */ + [0xd242, 0xd242], /* Hangul Syllable */ + [0xd243, 0xd243], /* Hangul Syllable */ + [0xd244, 0xd244], /* Hangul Syllable */ + [0xd245, 0xd245], /* Hangul Syllable */ + [0xd246, 0xd246], /* Hangul Syllable */ + [0xd247, 0xd247], /* Hangul Syllable */ + [0xd248, 0xd248], /* Hangul Syllable */ + [0xd249, 0xd249], /* Hangul Syllable */ + [0xd24a, 0xd24a], /* Hangul Syllable */ + [0xd24b, 0xd24b], /* Hangul Syllable */ + [0xd24c, 0xd24c], /* Hangul Syllable */ + [0xd24d, 0xd24d], /* Hangul Syllable */ + [0xd24e, 0xd24e], /* Hangul Syllable */ + [0xd24f, 0xd24f], /* Hangul Syllable */ + [0xd250, 0xd250], /* Hangul Syllable */ + [0xd251, 0xd251], /* Hangul Syllable */ + [0xd252, 0xd252], /* Hangul Syllable */ + [0xd253, 0xd253], /* Hangul Syllable */ + [0xd254, 0xd254], /* Hangul Syllable */ + [0xd255, 0xd255], /* Hangul Syllable */ + [0xd256, 0xd256], /* Hangul Syllable */ + [0xd257, 0xd257], /* Hangul Syllable */ + [0xd258, 0xd258], /* Hangul Syllable */ + [0xd259, 0xd259], /* Hangul Syllable */ + [0xd25a, 0xd25a], /* Hangul Syllable */ + [0xd25b, 0xd25b], /* Hangul Syllable */ + [0xd25c, 0xd25c], /* Hangul Syllable */ + [0xd25d, 0xd25d], /* Hangul Syllable */ + [0xd25e, 0xd25e], /* Hangul Syllable */ + [0xd25f, 0xd25f], /* Hangul Syllable */ + [0xd260, 0xd260], /* Hangul Syllable */ + [0xd261, 0xd261], /* Hangul Syllable */ + [0xd262, 0xd262], /* Hangul Syllable */ + [0xd263, 0xd263], /* Hangul Syllable */ + [0xd264, 0xd264], /* Hangul Syllable */ + [0xd265, 0xd265], /* Hangul Syllable */ + [0xd266, 0xd266], /* Hangul Syllable */ + [0xd267, 0xd267], /* Hangul Syllable */ + [0xd268, 0xd268], /* Hangul Syllable */ + [0xd269, 0xd269], /* Hangul Syllable */ + [0xd26a, 0xd26a], /* Hangul Syllable */ + [0xd26b, 0xd26b], /* Hangul Syllable */ + [0xd26c, 0xd26c], /* Hangul Syllable */ + [0xd26d, 0xd26d], /* Hangul Syllable */ + [0xd26e, 0xd26e], /* Hangul Syllable */ + [0xd26f, 0xd26f], /* Hangul Syllable */ + [0xd270, 0xd270], /* Hangul Syllable */ + [0xd271, 0xd271], /* Hangul Syllable */ + [0xd272, 0xd272], /* Hangul Syllable */ + [0xd273, 0xd273], /* Hangul Syllable */ + [0xd274, 0xd274], /* Hangul Syllable */ + [0xd275, 0xd275], /* Hangul Syllable */ + [0xd276, 0xd276], /* Hangul Syllable */ + [0xd277, 0xd277], /* Hangul Syllable */ + [0xd278, 0xd278], /* Hangul Syllable */ + [0xd279, 0xd279], /* Hangul Syllable */ + [0xd27a, 0xd27a], /* Hangul Syllable */ + [0xd27b, 0xd27b], /* Hangul Syllable */ + [0xd27c, 0xd27c], /* Hangul Syllable */ + [0xd27d, 0xd27d], /* Hangul Syllable */ + [0xd27e, 0xd27e], /* Hangul Syllable */ + [0xd27f, 0xd27f], /* Hangul Syllable */ + [0xd280, 0xd280], /* Hangul Syllable */ + [0xd281, 0xd281], /* Hangul Syllable */ + [0xd282, 0xd282], /* Hangul Syllable */ + [0xd283, 0xd283], /* Hangul Syllable */ + [0xd284, 0xd284], /* Hangul Syllable */ + [0xd285, 0xd285], /* Hangul Syllable */ + [0xd286, 0xd286], /* Hangul Syllable */ + [0xd287, 0xd287], /* Hangul Syllable */ + [0xd288, 0xd288], /* Hangul Syllable */ + [0xd289, 0xd289], /* Hangul Syllable */ + [0xd28a, 0xd28a], /* Hangul Syllable */ + [0xd28b, 0xd28b], /* Hangul Syllable */ + [0xd28c, 0xd28c], /* Hangul Syllable */ + [0xd28d, 0xd28d], /* Hangul Syllable */ + [0xd28e, 0xd28e], /* Hangul Syllable */ + [0xd28f, 0xd28f], /* Hangul Syllable */ + [0xd290, 0xd290], /* Hangul Syllable */ + [0xd291, 0xd291], /* Hangul Syllable */ + [0xd292, 0xd292], /* Hangul Syllable */ + [0xd293, 0xd293], /* Hangul Syllable */ + [0xd294, 0xd294], /* Hangul Syllable */ + [0xd295, 0xd295], /* Hangul Syllable */ + [0xd296, 0xd296], /* Hangul Syllable */ + [0xd297, 0xd297], /* Hangul Syllable */ + [0xd298, 0xd298], /* Hangul Syllable */ + [0xd299, 0xd299], /* Hangul Syllable */ + [0xd29a, 0xd29a], /* Hangul Syllable */ + [0xd29b, 0xd29b], /* Hangul Syllable */ + [0xd29c, 0xd29c], /* Hangul Syllable */ + [0xd29d, 0xd29d], /* Hangul Syllable */ + [0xd29e, 0xd29e], /* Hangul Syllable */ + [0xd29f, 0xd29f], /* Hangul Syllable */ + [0xd2a0, 0xd2a0], /* Hangul Syllable */ + [0xd2a1, 0xd2a1], /* Hangul Syllable */ + [0xd2a2, 0xd2a2], /* Hangul Syllable */ + [0xd2a3, 0xd2a3], /* Hangul Syllable */ + [0xd2a4, 0xd2a4], /* Hangul Syllable */ + [0xd2a5, 0xd2a5], /* Hangul Syllable */ + [0xd2a6, 0xd2a6], /* Hangul Syllable */ + [0xd2a7, 0xd2a7], /* Hangul Syllable */ + [0xd2a8, 0xd2a8], /* Hangul Syllable */ + [0xd2a9, 0xd2a9], /* Hangul Syllable */ + [0xd2aa, 0xd2aa], /* Hangul Syllable */ + [0xd2ab, 0xd2ab], /* Hangul Syllable */ + [0xd2ac, 0xd2ac], /* Hangul Syllable */ + [0xd2ad, 0xd2ad], /* Hangul Syllable */ + [0xd2ae, 0xd2ae], /* Hangul Syllable */ + [0xd2af, 0xd2af], /* Hangul Syllable */ + [0xd2b0, 0xd2b0], /* Hangul Syllable */ + [0xd2b1, 0xd2b1], /* Hangul Syllable */ + [0xd2b2, 0xd2b2], /* Hangul Syllable */ + [0xd2b3, 0xd2b3], /* Hangul Syllable */ + [0xd2b4, 0xd2b4], /* Hangul Syllable */ + [0xd2b5, 0xd2b5], /* Hangul Syllable */ + [0xd2b6, 0xd2b6], /* Hangul Syllable */ + [0xd2b7, 0xd2b7], /* Hangul Syllable */ + [0xd2b8, 0xd2b8], /* Hangul Syllable */ + [0xd2b9, 0xd2b9], /* Hangul Syllable */ + [0xd2ba, 0xd2ba], /* Hangul Syllable */ + [0xd2bb, 0xd2bb], /* Hangul Syllable */ + [0xd2bc, 0xd2bc], /* Hangul Syllable */ + [0xd2bd, 0xd2bd], /* Hangul Syllable */ + [0xd2be, 0xd2be], /* Hangul Syllable */ + [0xd2bf, 0xd2bf], /* Hangul Syllable */ + [0xd2c0, 0xd2c0], /* Hangul Syllable */ + [0xd2c1, 0xd2c1], /* Hangul Syllable */ + [0xd2c2, 0xd2c2], /* Hangul Syllable */ + [0xd2c3, 0xd2c3], /* Hangul Syllable */ + [0xd2c4, 0xd2c4], /* Hangul Syllable */ + [0xd2c5, 0xd2c5], /* Hangul Syllable */ + [0xd2c6, 0xd2c6], /* Hangul Syllable */ + [0xd2c7, 0xd2c7], /* Hangul Syllable */ + [0xd2c8, 0xd2c8], /* Hangul Syllable */ + [0xd2c9, 0xd2c9], /* Hangul Syllable */ + [0xd2ca, 0xd2ca], /* Hangul Syllable */ + [0xd2cb, 0xd2cb], /* Hangul Syllable */ + [0xd2cc, 0xd2cc], /* Hangul Syllable */ + [0xd2cd, 0xd2cd], /* Hangul Syllable */ + [0xd2ce, 0xd2ce], /* Hangul Syllable */ + [0xd2cf, 0xd2cf], /* Hangul Syllable */ + [0xd2d0, 0xd2d0], /* Hangul Syllable */ + [0xd2d1, 0xd2d1], /* Hangul Syllable */ + [0xd2d2, 0xd2d2], /* Hangul Syllable */ + [0xd2d3, 0xd2d3], /* Hangul Syllable */ + [0xd2d4, 0xd2d4], /* Hangul Syllable */ + [0xd2d5, 0xd2d5], /* Hangul Syllable */ + [0xd2d6, 0xd2d6], /* Hangul Syllable */ + [0xd2d7, 0xd2d7], /* Hangul Syllable */ + [0xd2d8, 0xd2d8], /* Hangul Syllable */ + [0xd2d9, 0xd2d9], /* Hangul Syllable */ + [0xd2da, 0xd2da], /* Hangul Syllable */ + [0xd2db, 0xd2db], /* Hangul Syllable */ + [0xd2dc, 0xd2dc], /* Hangul Syllable */ + [0xd2dd, 0xd2dd], /* Hangul Syllable */ + [0xd2de, 0xd2de], /* Hangul Syllable */ + [0xd2df, 0xd2df], /* Hangul Syllable */ + [0xd2e0, 0xd2e0], /* Hangul Syllable */ + [0xd2e1, 0xd2e1], /* Hangul Syllable */ + [0xd2e2, 0xd2e2], /* Hangul Syllable */ + [0xd2e3, 0xd2e3], /* Hangul Syllable */ + [0xd2e4, 0xd2e4], /* Hangul Syllable */ + [0xd2e5, 0xd2e5], /* Hangul Syllable */ + [0xd2e6, 0xd2e6], /* Hangul Syllable */ + [0xd2e7, 0xd2e7], /* Hangul Syllable */ + [0xd2e8, 0xd2e8], /* Hangul Syllable */ + [0xd2e9, 0xd2e9], /* Hangul Syllable */ + [0xd2ea, 0xd2ea], /* Hangul Syllable */ + [0xd2eb, 0xd2eb], /* Hangul Syllable */ + [0xd2ec, 0xd2ec], /* Hangul Syllable */ + [0xd2ed, 0xd2ed], /* Hangul Syllable */ + [0xd2ee, 0xd2ee], /* Hangul Syllable */ + [0xd2ef, 0xd2ef], /* Hangul Syllable */ + [0xd2f0, 0xd2f0], /* Hangul Syllable */ + [0xd2f1, 0xd2f1], /* Hangul Syllable */ + [0xd2f2, 0xd2f2], /* Hangul Syllable */ + [0xd2f3, 0xd2f3], /* Hangul Syllable */ + [0xd2f4, 0xd2f4], /* Hangul Syllable */ + [0xd2f5, 0xd2f5], /* Hangul Syllable */ + [0xd2f6, 0xd2f6], /* Hangul Syllable */ + [0xd2f7, 0xd2f7], /* Hangul Syllable */ + [0xd2f8, 0xd2f8], /* Hangul Syllable */ + [0xd2f9, 0xd2f9], /* Hangul Syllable */ + [0xd2fa, 0xd2fa], /* Hangul Syllable */ + [0xd2fb, 0xd2fb], /* Hangul Syllable */ + [0xd2fc, 0xd2fc], /* Hangul Syllable */ + [0xd2fd, 0xd2fd], /* Hangul Syllable */ + [0xd2fe, 0xd2fe], /* Hangul Syllable */ + [0xd2ff, 0xd2ff], /* Hangul Syllable */ + [0xd300, 0xd300], /* Hangul Syllable */ + [0xd301, 0xd301], /* Hangul Syllable */ + [0xd302, 0xd302], /* Hangul Syllable */ + [0xd303, 0xd303], /* Hangul Syllable */ + [0xd304, 0xd304], /* Hangul Syllable */ + [0xd305, 0xd305], /* Hangul Syllable */ + [0xd306, 0xd306], /* Hangul Syllable */ + [0xd307, 0xd307], /* Hangul Syllable */ + [0xd308, 0xd308], /* Hangul Syllable */ + [0xd309, 0xd309], /* Hangul Syllable */ + [0xd30a, 0xd30a], /* Hangul Syllable */ + [0xd30b, 0xd30b], /* Hangul Syllable */ + [0xd30c, 0xd30c], /* Hangul Syllable */ + [0xd30d, 0xd30d], /* Hangul Syllable */ + [0xd30e, 0xd30e], /* Hangul Syllable */ + [0xd30f, 0xd30f], /* Hangul Syllable */ + [0xd310, 0xd310], /* Hangul Syllable */ + [0xd311, 0xd311], /* Hangul Syllable */ + [0xd312, 0xd312], /* Hangul Syllable */ + [0xd313, 0xd313], /* Hangul Syllable */ + [0xd314, 0xd314], /* Hangul Syllable */ + [0xd315, 0xd315], /* Hangul Syllable */ + [0xd316, 0xd316], /* Hangul Syllable */ + [0xd317, 0xd317], /* Hangul Syllable */ + [0xd318, 0xd318], /* Hangul Syllable */ + [0xd319, 0xd319], /* Hangul Syllable */ + [0xd31a, 0xd31a], /* Hangul Syllable */ + [0xd31b, 0xd31b], /* Hangul Syllable */ + [0xd31c, 0xd31c], /* Hangul Syllable */ + [0xd31d, 0xd31d], /* Hangul Syllable */ + [0xd31e, 0xd31e], /* Hangul Syllable */ + [0xd31f, 0xd31f], /* Hangul Syllable */ + [0xd320, 0xd320], /* Hangul Syllable */ + [0xd321, 0xd321], /* Hangul Syllable */ + [0xd322, 0xd322], /* Hangul Syllable */ + [0xd323, 0xd323], /* Hangul Syllable */ + [0xd324, 0xd324], /* Hangul Syllable */ + [0xd325, 0xd325], /* Hangul Syllable */ + [0xd326, 0xd326], /* Hangul Syllable */ + [0xd327, 0xd327], /* Hangul Syllable */ + [0xd328, 0xd328], /* Hangul Syllable */ + [0xd329, 0xd329], /* Hangul Syllable */ + [0xd32a, 0xd32a], /* Hangul Syllable */ + [0xd32b, 0xd32b], /* Hangul Syllable */ + [0xd32c, 0xd32c], /* Hangul Syllable */ + [0xd32d, 0xd32d], /* Hangul Syllable */ + [0xd32e, 0xd32e], /* Hangul Syllable */ + [0xd32f, 0xd32f], /* Hangul Syllable */ + [0xd330, 0xd330], /* Hangul Syllable */ + [0xd331, 0xd331], /* Hangul Syllable */ + [0xd332, 0xd332], /* Hangul Syllable */ + [0xd333, 0xd333], /* Hangul Syllable */ + [0xd334, 0xd334], /* Hangul Syllable */ + [0xd335, 0xd335], /* Hangul Syllable */ + [0xd336, 0xd336], /* Hangul Syllable */ + [0xd337, 0xd337], /* Hangul Syllable */ + [0xd338, 0xd338], /* Hangul Syllable */ + [0xd339, 0xd339], /* Hangul Syllable */ + [0xd33a, 0xd33a], /* Hangul Syllable */ + [0xd33b, 0xd33b], /* Hangul Syllable */ + [0xd33c, 0xd33c], /* Hangul Syllable */ + [0xd33d, 0xd33d], /* Hangul Syllable */ + [0xd33e, 0xd33e], /* Hangul Syllable */ + [0xd33f, 0xd33f], /* Hangul Syllable */ + [0xd340, 0xd340], /* Hangul Syllable */ + [0xd341, 0xd341], /* Hangul Syllable */ + [0xd342, 0xd342], /* Hangul Syllable */ + [0xd343, 0xd343], /* Hangul Syllable */ + [0xd344, 0xd344], /* Hangul Syllable */ + [0xd345, 0xd345], /* Hangul Syllable */ + [0xd346, 0xd346], /* Hangul Syllable */ + [0xd347, 0xd347], /* Hangul Syllable */ + [0xd348, 0xd348], /* Hangul Syllable */ + [0xd349, 0xd349], /* Hangul Syllable */ + [0xd34a, 0xd34a], /* Hangul Syllable */ + [0xd34b, 0xd34b], /* Hangul Syllable */ + [0xd34c, 0xd34c], /* Hangul Syllable */ + [0xd34d, 0xd34d], /* Hangul Syllable */ + [0xd34e, 0xd34e], /* Hangul Syllable */ + [0xd34f, 0xd34f], /* Hangul Syllable */ + [0xd350, 0xd350], /* Hangul Syllable */ + [0xd351, 0xd351], /* Hangul Syllable */ + [0xd352, 0xd352], /* Hangul Syllable */ + [0xd353, 0xd353], /* Hangul Syllable */ + [0xd354, 0xd354], /* Hangul Syllable */ + [0xd355, 0xd355], /* Hangul Syllable */ + [0xd356, 0xd356], /* Hangul Syllable */ + [0xd357, 0xd357], /* Hangul Syllable */ + [0xd358, 0xd358], /* Hangul Syllable */ + [0xd359, 0xd359], /* Hangul Syllable */ + [0xd35a, 0xd35a], /* Hangul Syllable */ + [0xd35b, 0xd35b], /* Hangul Syllable */ + [0xd35c, 0xd35c], /* Hangul Syllable */ + [0xd35d, 0xd35d], /* Hangul Syllable */ + [0xd35e, 0xd35e], /* Hangul Syllable */ + [0xd35f, 0xd35f], /* Hangul Syllable */ + [0xd360, 0xd360], /* Hangul Syllable */ + [0xd361, 0xd361], /* Hangul Syllable */ + [0xd362, 0xd362], /* Hangul Syllable */ + [0xd363, 0xd363], /* Hangul Syllable */ + [0xd364, 0xd364], /* Hangul Syllable */ + [0xd365, 0xd365], /* Hangul Syllable */ + [0xd366, 0xd366], /* Hangul Syllable */ + [0xd367, 0xd367], /* Hangul Syllable */ + [0xd368, 0xd368], /* Hangul Syllable */ + [0xd369, 0xd369], /* Hangul Syllable */ + [0xd36a, 0xd36a], /* Hangul Syllable */ + [0xd36b, 0xd36b], /* Hangul Syllable */ + [0xd36c, 0xd36c], /* Hangul Syllable */ + [0xd36d, 0xd36d], /* Hangul Syllable */ + [0xd36e, 0xd36e], /* Hangul Syllable */ + [0xd36f, 0xd36f], /* Hangul Syllable */ + [0xd370, 0xd370], /* Hangul Syllable */ + [0xd371, 0xd371], /* Hangul Syllable */ + [0xd372, 0xd372], /* Hangul Syllable */ + [0xd373, 0xd373], /* Hangul Syllable */ + [0xd374, 0xd374], /* Hangul Syllable */ + [0xd375, 0xd375], /* Hangul Syllable */ + [0xd376, 0xd376], /* Hangul Syllable */ + [0xd377, 0xd377], /* Hangul Syllable */ + [0xd378, 0xd378], /* Hangul Syllable */ + [0xd379, 0xd379], /* Hangul Syllable */ + [0xd37a, 0xd37a], /* Hangul Syllable */ + [0xd37b, 0xd37b], /* Hangul Syllable */ + [0xd37c, 0xd37c], /* Hangul Syllable */ + [0xd37d, 0xd37d], /* Hangul Syllable */ + [0xd37e, 0xd37e], /* Hangul Syllable */ + [0xd37f, 0xd37f], /* Hangul Syllable */ + [0xd380, 0xd380], /* Hangul Syllable */ + [0xd381, 0xd381], /* Hangul Syllable */ + [0xd382, 0xd382], /* Hangul Syllable */ + [0xd383, 0xd383], /* Hangul Syllable */ + [0xd384, 0xd384], /* Hangul Syllable */ + [0xd385, 0xd385], /* Hangul Syllable */ + [0xd386, 0xd386], /* Hangul Syllable */ + [0xd387, 0xd387], /* Hangul Syllable */ + [0xd388, 0xd388], /* Hangul Syllable */ + [0xd389, 0xd389], /* Hangul Syllable */ + [0xd38a, 0xd38a], /* Hangul Syllable */ + [0xd38b, 0xd38b], /* Hangul Syllable */ + [0xd38c, 0xd38c], /* Hangul Syllable */ + [0xd38d, 0xd38d], /* Hangul Syllable */ + [0xd38e, 0xd38e], /* Hangul Syllable */ + [0xd38f, 0xd38f], /* Hangul Syllable */ + [0xd390, 0xd390], /* Hangul Syllable */ + [0xd391, 0xd391], /* Hangul Syllable */ + [0xd392, 0xd392], /* Hangul Syllable */ + [0xd393, 0xd393], /* Hangul Syllable */ + [0xd394, 0xd394], /* Hangul Syllable */ + [0xd395, 0xd395], /* Hangul Syllable */ + [0xd396, 0xd396], /* Hangul Syllable */ + [0xd397, 0xd397], /* Hangul Syllable */ + [0xd398, 0xd398], /* Hangul Syllable */ + [0xd399, 0xd399], /* Hangul Syllable */ + [0xd39a, 0xd39a], /* Hangul Syllable */ + [0xd39b, 0xd39b], /* Hangul Syllable */ + [0xd39c, 0xd39c], /* Hangul Syllable */ + [0xd39d, 0xd39d], /* Hangul Syllable */ + [0xd39e, 0xd39e], /* Hangul Syllable */ + [0xd39f, 0xd39f], /* Hangul Syllable */ + [0xd3a0, 0xd3a0], /* Hangul Syllable */ + [0xd3a1, 0xd3a1], /* Hangul Syllable */ + [0xd3a2, 0xd3a2], /* Hangul Syllable */ + [0xd3a3, 0xd3a3], /* Hangul Syllable */ + [0xd3a4, 0xd3a4], /* Hangul Syllable */ + [0xd3a5, 0xd3a5], /* Hangul Syllable */ + [0xd3a6, 0xd3a6], /* Hangul Syllable */ + [0xd3a7, 0xd3a7], /* Hangul Syllable */ + [0xd3a8, 0xd3a8], /* Hangul Syllable */ + [0xd3a9, 0xd3a9], /* Hangul Syllable */ + [0xd3aa, 0xd3aa], /* Hangul Syllable */ + [0xd3ab, 0xd3ab], /* Hangul Syllable */ + [0xd3ac, 0xd3ac], /* Hangul Syllable */ + [0xd3ad, 0xd3ad], /* Hangul Syllable */ + [0xd3ae, 0xd3ae], /* Hangul Syllable */ + [0xd3af, 0xd3af], /* Hangul Syllable */ + [0xd3b0, 0xd3b0], /* Hangul Syllable */ + [0xd3b1, 0xd3b1], /* Hangul Syllable */ + [0xd3b2, 0xd3b2], /* Hangul Syllable */ + [0xd3b3, 0xd3b3], /* Hangul Syllable */ + [0xd3b4, 0xd3b4], /* Hangul Syllable */ + [0xd3b5, 0xd3b5], /* Hangul Syllable */ + [0xd3b6, 0xd3b6], /* Hangul Syllable */ + [0xd3b7, 0xd3b7], /* Hangul Syllable */ + [0xd3b8, 0xd3b8], /* Hangul Syllable */ + [0xd3b9, 0xd3b9], /* Hangul Syllable */ + [0xd3ba, 0xd3ba], /* Hangul Syllable */ + [0xd3bb, 0xd3bb], /* Hangul Syllable */ + [0xd3bc, 0xd3bc], /* Hangul Syllable */ + [0xd3bd, 0xd3bd], /* Hangul Syllable */ + [0xd3be, 0xd3be], /* Hangul Syllable */ + [0xd3bf, 0xd3bf], /* Hangul Syllable */ + [0xd3c0, 0xd3c0], /* Hangul Syllable */ + [0xd3c1, 0xd3c1], /* Hangul Syllable */ + [0xd3c2, 0xd3c2], /* Hangul Syllable */ + [0xd3c3, 0xd3c3], /* Hangul Syllable */ + [0xd3c4, 0xd3c4], /* Hangul Syllable */ + [0xd3c5, 0xd3c5], /* Hangul Syllable */ + [0xd3c6, 0xd3c6], /* Hangul Syllable */ + [0xd3c7, 0xd3c7], /* Hangul Syllable */ + [0xd3c8, 0xd3c8], /* Hangul Syllable */ + [0xd3c9, 0xd3c9], /* Hangul Syllable */ + [0xd3ca, 0xd3ca], /* Hangul Syllable */ + [0xd3cb, 0xd3cb], /* Hangul Syllable */ + [0xd3cc, 0xd3cc], /* Hangul Syllable */ + [0xd3cd, 0xd3cd], /* Hangul Syllable */ + [0xd3ce, 0xd3ce], /* Hangul Syllable */ + [0xd3cf, 0xd3cf], /* Hangul Syllable */ + [0xd3d0, 0xd3d0], /* Hangul Syllable */ + [0xd3d1, 0xd3d1], /* Hangul Syllable */ + [0xd3d2, 0xd3d2], /* Hangul Syllable */ + [0xd3d3, 0xd3d3], /* Hangul Syllable */ + [0xd3d4, 0xd3d4], /* Hangul Syllable */ + [0xd3d5, 0xd3d5], /* Hangul Syllable */ + [0xd3d6, 0xd3d6], /* Hangul Syllable */ + [0xd3d7, 0xd3d7], /* Hangul Syllable */ + [0xd3d8, 0xd3d8], /* Hangul Syllable */ + [0xd3d9, 0xd3d9], /* Hangul Syllable */ + [0xd3da, 0xd3da], /* Hangul Syllable */ + [0xd3db, 0xd3db], /* Hangul Syllable */ + [0xd3dc, 0xd3dc], /* Hangul Syllable */ + [0xd3dd, 0xd3dd], /* Hangul Syllable */ + [0xd3de, 0xd3de], /* Hangul Syllable */ + [0xd3df, 0xd3df], /* Hangul Syllable */ + [0xd3e0, 0xd3e0], /* Hangul Syllable */ + [0xd3e1, 0xd3e1], /* Hangul Syllable */ + [0xd3e2, 0xd3e2], /* Hangul Syllable */ + [0xd3e3, 0xd3e3], /* Hangul Syllable */ + [0xd3e4, 0xd3e4], /* Hangul Syllable */ + [0xd3e5, 0xd3e5], /* Hangul Syllable */ + [0xd3e6, 0xd3e6], /* Hangul Syllable */ + [0xd3e7, 0xd3e7], /* Hangul Syllable */ + [0xd3e8, 0xd3e8], /* Hangul Syllable */ + [0xd3e9, 0xd3e9], /* Hangul Syllable */ + [0xd3ea, 0xd3ea], /* Hangul Syllable */ + [0xd3eb, 0xd3eb], /* Hangul Syllable */ + [0xd3ec, 0xd3ec], /* Hangul Syllable */ + [0xd3ed, 0xd3ed], /* Hangul Syllable */ + [0xd3ee, 0xd3ee], /* Hangul Syllable */ + [0xd3ef, 0xd3ef], /* Hangul Syllable */ + [0xd3f0, 0xd3f0], /* Hangul Syllable */ + [0xd3f1, 0xd3f1], /* Hangul Syllable */ + [0xd3f2, 0xd3f2], /* Hangul Syllable */ + [0xd3f3, 0xd3f3], /* Hangul Syllable */ + [0xd3f4, 0xd3f4], /* Hangul Syllable */ + [0xd3f5, 0xd3f5], /* Hangul Syllable */ + [0xd3f6, 0xd3f6], /* Hangul Syllable */ + [0xd3f7, 0xd3f7], /* Hangul Syllable */ + [0xd3f8, 0xd3f8], /* Hangul Syllable */ + [0xd3f9, 0xd3f9], /* Hangul Syllable */ + [0xd3fa, 0xd3fa], /* Hangul Syllable */ + [0xd3fb, 0xd3fb], /* Hangul Syllable */ + [0xd3fc, 0xd3fc], /* Hangul Syllable */ + [0xd3fd, 0xd3fd], /* Hangul Syllable */ + [0xd3fe, 0xd3fe], /* Hangul Syllable */ + [0xd3ff, 0xd3ff], /* Hangul Syllable */ + [0xd400, 0xd400], /* Hangul Syllable */ + [0xd401, 0xd401], /* Hangul Syllable */ + [0xd402, 0xd402], /* Hangul Syllable */ + [0xd403, 0xd403], /* Hangul Syllable */ + [0xd404, 0xd404], /* Hangul Syllable */ + [0xd405, 0xd405], /* Hangul Syllable */ + [0xd406, 0xd406], /* Hangul Syllable */ + [0xd407, 0xd407], /* Hangul Syllable */ + [0xd408, 0xd408], /* Hangul Syllable */ + [0xd409, 0xd409], /* Hangul Syllable */ + [0xd40a, 0xd40a], /* Hangul Syllable */ + [0xd40b, 0xd40b], /* Hangul Syllable */ + [0xd40c, 0xd40c], /* Hangul Syllable */ + [0xd40d, 0xd40d], /* Hangul Syllable */ + [0xd40e, 0xd40e], /* Hangul Syllable */ + [0xd40f, 0xd40f], /* Hangul Syllable */ + [0xd410, 0xd410], /* Hangul Syllable */ + [0xd411, 0xd411], /* Hangul Syllable */ + [0xd412, 0xd412], /* Hangul Syllable */ + [0xd413, 0xd413], /* Hangul Syllable */ + [0xd414, 0xd414], /* Hangul Syllable */ + [0xd415, 0xd415], /* Hangul Syllable */ + [0xd416, 0xd416], /* Hangul Syllable */ + [0xd417, 0xd417], /* Hangul Syllable */ + [0xd418, 0xd418], /* Hangul Syllable */ + [0xd419, 0xd419], /* Hangul Syllable */ + [0xd41a, 0xd41a], /* Hangul Syllable */ + [0xd41b, 0xd41b], /* Hangul Syllable */ + [0xd41c, 0xd41c], /* Hangul Syllable */ + [0xd41d, 0xd41d], /* Hangul Syllable */ + [0xd41e, 0xd41e], /* Hangul Syllable */ + [0xd41f, 0xd41f], /* Hangul Syllable */ + [0xd420, 0xd420], /* Hangul Syllable */ + [0xd421, 0xd421], /* Hangul Syllable */ + [0xd422, 0xd422], /* Hangul Syllable */ + [0xd423, 0xd423], /* Hangul Syllable */ + [0xd424, 0xd424], /* Hangul Syllable */ + [0xd425, 0xd425], /* Hangul Syllable */ + [0xd426, 0xd426], /* Hangul Syllable */ + [0xd427, 0xd427], /* Hangul Syllable */ + [0xd428, 0xd428], /* Hangul Syllable */ + [0xd429, 0xd429], /* Hangul Syllable */ + [0xd42a, 0xd42a], /* Hangul Syllable */ + [0xd42b, 0xd42b], /* Hangul Syllable */ + [0xd42c, 0xd42c], /* Hangul Syllable */ + [0xd42d, 0xd42d], /* Hangul Syllable */ + [0xd42e, 0xd42e], /* Hangul Syllable */ + [0xd42f, 0xd42f], /* Hangul Syllable */ + [0xd430, 0xd430], /* Hangul Syllable */ + [0xd431, 0xd431], /* Hangul Syllable */ + [0xd432, 0xd432], /* Hangul Syllable */ + [0xd433, 0xd433], /* Hangul Syllable */ + [0xd434, 0xd434], /* Hangul Syllable */ + [0xd435, 0xd435], /* Hangul Syllable */ + [0xd436, 0xd436], /* Hangul Syllable */ + [0xd437, 0xd437], /* Hangul Syllable */ + [0xd438, 0xd438], /* Hangul Syllable */ + [0xd439, 0xd439], /* Hangul Syllable */ + [0xd43a, 0xd43a], /* Hangul Syllable */ + [0xd43b, 0xd43b], /* Hangul Syllable */ + [0xd43c, 0xd43c], /* Hangul Syllable */ + [0xd43d, 0xd43d], /* Hangul Syllable */ + [0xd43e, 0xd43e], /* Hangul Syllable */ + [0xd43f, 0xd43f], /* Hangul Syllable */ + [0xd440, 0xd440], /* Hangul Syllable */ + [0xd441, 0xd441], /* Hangul Syllable */ + [0xd442, 0xd442], /* Hangul Syllable */ + [0xd443, 0xd443], /* Hangul Syllable */ + [0xd444, 0xd444], /* Hangul Syllable */ + [0xd445, 0xd445], /* Hangul Syllable */ + [0xd446, 0xd446], /* Hangul Syllable */ + [0xd447, 0xd447], /* Hangul Syllable */ + [0xd448, 0xd448], /* Hangul Syllable */ + [0xd449, 0xd449], /* Hangul Syllable */ + [0xd44a, 0xd44a], /* Hangul Syllable */ + [0xd44b, 0xd44b], /* Hangul Syllable */ + [0xd44c, 0xd44c], /* Hangul Syllable */ + [0xd44d, 0xd44d], /* Hangul Syllable */ + [0xd44e, 0xd44e], /* Hangul Syllable */ + [0xd44f, 0xd44f], /* Hangul Syllable */ + [0xd450, 0xd450], /* Hangul Syllable */ + [0xd451, 0xd451], /* Hangul Syllable */ + [0xd452, 0xd452], /* Hangul Syllable */ + [0xd453, 0xd453], /* Hangul Syllable */ + [0xd454, 0xd454], /* Hangul Syllable */ + [0xd455, 0xd455], /* Hangul Syllable */ + [0xd456, 0xd456], /* Hangul Syllable */ + [0xd457, 0xd457], /* Hangul Syllable */ + [0xd458, 0xd458], /* Hangul Syllable */ + [0xd459, 0xd459], /* Hangul Syllable */ + [0xd45a, 0xd45a], /* Hangul Syllable */ + [0xd45b, 0xd45b], /* Hangul Syllable */ + [0xd45c, 0xd45c], /* Hangul Syllable */ + [0xd45d, 0xd45d], /* Hangul Syllable */ + [0xd45e, 0xd45e], /* Hangul Syllable */ + [0xd45f, 0xd45f], /* Hangul Syllable */ + [0xd460, 0xd460], /* Hangul Syllable */ + [0xd461, 0xd461], /* Hangul Syllable */ + [0xd462, 0xd462], /* Hangul Syllable */ + [0xd463, 0xd463], /* Hangul Syllable */ + [0xd464, 0xd464], /* Hangul Syllable */ + [0xd465, 0xd465], /* Hangul Syllable */ + [0xd466, 0xd466], /* Hangul Syllable */ + [0xd467, 0xd467], /* Hangul Syllable */ + [0xd468, 0xd468], /* Hangul Syllable */ + [0xd469, 0xd469], /* Hangul Syllable */ + [0xd46a, 0xd46a], /* Hangul Syllable */ + [0xd46b, 0xd46b], /* Hangul Syllable */ + [0xd46c, 0xd46c], /* Hangul Syllable */ + [0xd46d, 0xd46d], /* Hangul Syllable */ + [0xd46e, 0xd46e], /* Hangul Syllable */ + [0xd46f, 0xd46f], /* Hangul Syllable */ + [0xd470, 0xd470], /* Hangul Syllable */ + [0xd471, 0xd471], /* Hangul Syllable */ + [0xd472, 0xd472], /* Hangul Syllable */ + [0xd473, 0xd473], /* Hangul Syllable */ + [0xd474, 0xd474], /* Hangul Syllable */ + [0xd475, 0xd475], /* Hangul Syllable */ + [0xd476, 0xd476], /* Hangul Syllable */ + [0xd477, 0xd477], /* Hangul Syllable */ + [0xd478, 0xd478], /* Hangul Syllable */ + [0xd479, 0xd479], /* Hangul Syllable */ + [0xd47a, 0xd47a], /* Hangul Syllable */ + [0xd47b, 0xd47b], /* Hangul Syllable */ + [0xd47c, 0xd47c], /* Hangul Syllable */ + [0xd47d, 0xd47d], /* Hangul Syllable */ + [0xd47e, 0xd47e], /* Hangul Syllable */ + [0xd47f, 0xd47f], /* Hangul Syllable */ + [0xd480, 0xd480], /* Hangul Syllable */ + [0xd481, 0xd481], /* Hangul Syllable */ + [0xd482, 0xd482], /* Hangul Syllable */ + [0xd483, 0xd483], /* Hangul Syllable */ + [0xd484, 0xd484], /* Hangul Syllable */ + [0xd485, 0xd485], /* Hangul Syllable */ + [0xd486, 0xd486], /* Hangul Syllable */ + [0xd487, 0xd487], /* Hangul Syllable */ + [0xd488, 0xd488], /* Hangul Syllable */ + [0xd489, 0xd489], /* Hangul Syllable */ + [0xd48a, 0xd48a], /* Hangul Syllable */ + [0xd48b, 0xd48b], /* Hangul Syllable */ + [0xd48c, 0xd48c], /* Hangul Syllable */ + [0xd48d, 0xd48d], /* Hangul Syllable */ + [0xd48e, 0xd48e], /* Hangul Syllable */ + [0xd48f, 0xd48f], /* Hangul Syllable */ + [0xd490, 0xd490], /* Hangul Syllable */ + [0xd491, 0xd491], /* Hangul Syllable */ + [0xd492, 0xd492], /* Hangul Syllable */ + [0xd493, 0xd493], /* Hangul Syllable */ + [0xd494, 0xd494], /* Hangul Syllable */ + [0xd495, 0xd495], /* Hangul Syllable */ + [0xd496, 0xd496], /* Hangul Syllable */ + [0xd497, 0xd497], /* Hangul Syllable */ + [0xd498, 0xd498], /* Hangul Syllable */ + [0xd499, 0xd499], /* Hangul Syllable */ + [0xd49a, 0xd49a], /* Hangul Syllable */ + [0xd49b, 0xd49b], /* Hangul Syllable */ + [0xd49c, 0xd49c], /* Hangul Syllable */ + [0xd49d, 0xd49d], /* Hangul Syllable */ + [0xd49e, 0xd49e], /* Hangul Syllable */ + [0xd49f, 0xd49f], /* Hangul Syllable */ + [0xd4a0, 0xd4a0], /* Hangul Syllable */ + [0xd4a1, 0xd4a1], /* Hangul Syllable */ + [0xd4a2, 0xd4a2], /* Hangul Syllable */ + [0xd4a3, 0xd4a3], /* Hangul Syllable */ + [0xd4a4, 0xd4a4], /* Hangul Syllable */ + [0xd4a5, 0xd4a5], /* Hangul Syllable */ + [0xd4a6, 0xd4a6], /* Hangul Syllable */ + [0xd4a7, 0xd4a7], /* Hangul Syllable */ + [0xd4a8, 0xd4a8], /* Hangul Syllable */ + [0xd4a9, 0xd4a9], /* Hangul Syllable */ + [0xd4aa, 0xd4aa], /* Hangul Syllable */ + [0xd4ab, 0xd4ab], /* Hangul Syllable */ + [0xd4ac, 0xd4ac], /* Hangul Syllable */ + [0xd4ad, 0xd4ad], /* Hangul Syllable */ + [0xd4ae, 0xd4ae], /* Hangul Syllable */ + [0xd4af, 0xd4af], /* Hangul Syllable */ + [0xd4b0, 0xd4b0], /* Hangul Syllable */ + [0xd4b1, 0xd4b1], /* Hangul Syllable */ + [0xd4b2, 0xd4b2], /* Hangul Syllable */ + [0xd4b3, 0xd4b3], /* Hangul Syllable */ + [0xd4b4, 0xd4b4], /* Hangul Syllable */ + [0xd4b5, 0xd4b5], /* Hangul Syllable */ + [0xd4b6, 0xd4b6], /* Hangul Syllable */ + [0xd4b7, 0xd4b7], /* Hangul Syllable */ + [0xd4b8, 0xd4b8], /* Hangul Syllable */ + [0xd4b9, 0xd4b9], /* Hangul Syllable */ + [0xd4ba, 0xd4ba], /* Hangul Syllable */ + [0xd4bb, 0xd4bb], /* Hangul Syllable */ + [0xd4bc, 0xd4bc], /* Hangul Syllable */ + [0xd4bd, 0xd4bd], /* Hangul Syllable */ + [0xd4be, 0xd4be], /* Hangul Syllable */ + [0xd4bf, 0xd4bf], /* Hangul Syllable */ + [0xd4c0, 0xd4c0], /* Hangul Syllable */ + [0xd4c1, 0xd4c1], /* Hangul Syllable */ + [0xd4c2, 0xd4c2], /* Hangul Syllable */ + [0xd4c3, 0xd4c3], /* Hangul Syllable */ + [0xd4c4, 0xd4c4], /* Hangul Syllable */ + [0xd4c5, 0xd4c5], /* Hangul Syllable */ + [0xd4c6, 0xd4c6], /* Hangul Syllable */ + [0xd4c7, 0xd4c7], /* Hangul Syllable */ + [0xd4c8, 0xd4c8], /* Hangul Syllable */ + [0xd4c9, 0xd4c9], /* Hangul Syllable */ + [0xd4ca, 0xd4ca], /* Hangul Syllable */ + [0xd4cb, 0xd4cb], /* Hangul Syllable */ + [0xd4cc, 0xd4cc], /* Hangul Syllable */ + [0xd4cd, 0xd4cd], /* Hangul Syllable */ + [0xd4ce, 0xd4ce], /* Hangul Syllable */ + [0xd4cf, 0xd4cf], /* Hangul Syllable */ + [0xd4d0, 0xd4d0], /* Hangul Syllable */ + [0xd4d1, 0xd4d1], /* Hangul Syllable */ + [0xd4d2, 0xd4d2], /* Hangul Syllable */ + [0xd4d3, 0xd4d3], /* Hangul Syllable */ + [0xd4d4, 0xd4d4], /* Hangul Syllable */ + [0xd4d5, 0xd4d5], /* Hangul Syllable */ + [0xd4d6, 0xd4d6], /* Hangul Syllable */ + [0xd4d7, 0xd4d7], /* Hangul Syllable */ + [0xd4d8, 0xd4d8], /* Hangul Syllable */ + [0xd4d9, 0xd4d9], /* Hangul Syllable */ + [0xd4da, 0xd4da], /* Hangul Syllable */ + [0xd4db, 0xd4db], /* Hangul Syllable */ + [0xd4dc, 0xd4dc], /* Hangul Syllable */ + [0xd4dd, 0xd4dd], /* Hangul Syllable */ + [0xd4de, 0xd4de], /* Hangul Syllable */ + [0xd4df, 0xd4df], /* Hangul Syllable */ + [0xd4e0, 0xd4e0], /* Hangul Syllable */ + [0xd4e1, 0xd4e1], /* Hangul Syllable */ + [0xd4e2, 0xd4e2], /* Hangul Syllable */ + [0xd4e3, 0xd4e3], /* Hangul Syllable */ + [0xd4e4, 0xd4e4], /* Hangul Syllable */ + [0xd4e5, 0xd4e5], /* Hangul Syllable */ + [0xd4e6, 0xd4e6], /* Hangul Syllable */ + [0xd4e7, 0xd4e7], /* Hangul Syllable */ + [0xd4e8, 0xd4e8], /* Hangul Syllable */ + [0xd4e9, 0xd4e9], /* Hangul Syllable */ + [0xd4ea, 0xd4ea], /* Hangul Syllable */ + [0xd4eb, 0xd4eb], /* Hangul Syllable */ + [0xd4ec, 0xd4ec], /* Hangul Syllable */ + [0xd4ed, 0xd4ed], /* Hangul Syllable */ + [0xd4ee, 0xd4ee], /* Hangul Syllable */ + [0xd4ef, 0xd4ef], /* Hangul Syllable */ + [0xd4f0, 0xd4f0], /* Hangul Syllable */ + [0xd4f1, 0xd4f1], /* Hangul Syllable */ + [0xd4f2, 0xd4f2], /* Hangul Syllable */ + [0xd4f3, 0xd4f3], /* Hangul Syllable */ + [0xd4f4, 0xd4f4], /* Hangul Syllable */ + [0xd4f5, 0xd4f5], /* Hangul Syllable */ + [0xd4f6, 0xd4f6], /* Hangul Syllable */ + [0xd4f7, 0xd4f7], /* Hangul Syllable */ + [0xd4f8, 0xd4f8], /* Hangul Syllable */ + [0xd4f9, 0xd4f9], /* Hangul Syllable */ + [0xd4fa, 0xd4fa], /* Hangul Syllable */ + [0xd4fb, 0xd4fb], /* Hangul Syllable */ + [0xd4fc, 0xd4fc], /* Hangul Syllable */ + [0xd4fd, 0xd4fd], /* Hangul Syllable */ + [0xd4fe, 0xd4fe], /* Hangul Syllable */ + [0xd4ff, 0xd4ff], /* Hangul Syllable */ + [0xd500, 0xd500], /* Hangul Syllable */ + [0xd501, 0xd501], /* Hangul Syllable */ + [0xd502, 0xd502], /* Hangul Syllable */ + [0xd503, 0xd503], /* Hangul Syllable */ + [0xd504, 0xd504], /* Hangul Syllable */ + [0xd505, 0xd505], /* Hangul Syllable */ + [0xd506, 0xd506], /* Hangul Syllable */ + [0xd507, 0xd507], /* Hangul Syllable */ + [0xd508, 0xd508], /* Hangul Syllable */ + [0xd509, 0xd509], /* Hangul Syllable */ + [0xd50a, 0xd50a], /* Hangul Syllable */ + [0xd50b, 0xd50b], /* Hangul Syllable */ + [0xd50c, 0xd50c], /* Hangul Syllable */ + [0xd50d, 0xd50d], /* Hangul Syllable */ + [0xd50e, 0xd50e], /* Hangul Syllable */ + [0xd50f, 0xd50f], /* Hangul Syllable */ + [0xd510, 0xd510], /* Hangul Syllable */ + [0xd511, 0xd511], /* Hangul Syllable */ + [0xd512, 0xd512], /* Hangul Syllable */ + [0xd513, 0xd513], /* Hangul Syllable */ + [0xd514, 0xd514], /* Hangul Syllable */ + [0xd515, 0xd515], /* Hangul Syllable */ + [0xd516, 0xd516], /* Hangul Syllable */ + [0xd517, 0xd517], /* Hangul Syllable */ + [0xd518, 0xd518], /* Hangul Syllable */ + [0xd519, 0xd519], /* Hangul Syllable */ + [0xd51a, 0xd51a], /* Hangul Syllable */ + [0xd51b, 0xd51b], /* Hangul Syllable */ + [0xd51c, 0xd51c], /* Hangul Syllable */ + [0xd51d, 0xd51d], /* Hangul Syllable */ + [0xd51e, 0xd51e], /* Hangul Syllable */ + [0xd51f, 0xd51f], /* Hangul Syllable */ + [0xd520, 0xd520], /* Hangul Syllable */ + [0xd521, 0xd521], /* Hangul Syllable */ + [0xd522, 0xd522], /* Hangul Syllable */ + [0xd523, 0xd523], /* Hangul Syllable */ + [0xd524, 0xd524], /* Hangul Syllable */ + [0xd525, 0xd525], /* Hangul Syllable */ + [0xd526, 0xd526], /* Hangul Syllable */ + [0xd527, 0xd527], /* Hangul Syllable */ + [0xd528, 0xd528], /* Hangul Syllable */ + [0xd529, 0xd529], /* Hangul Syllable */ + [0xd52a, 0xd52a], /* Hangul Syllable */ + [0xd52b, 0xd52b], /* Hangul Syllable */ + [0xd52c, 0xd52c], /* Hangul Syllable */ + [0xd52d, 0xd52d], /* Hangul Syllable */ + [0xd52e, 0xd52e], /* Hangul Syllable */ + [0xd52f, 0xd52f], /* Hangul Syllable */ + [0xd530, 0xd530], /* Hangul Syllable */ + [0xd531, 0xd531], /* Hangul Syllable */ + [0xd532, 0xd532], /* Hangul Syllable */ + [0xd533, 0xd533], /* Hangul Syllable */ + [0xd534, 0xd534], /* Hangul Syllable */ + [0xd535, 0xd535], /* Hangul Syllable */ + [0xd536, 0xd536], /* Hangul Syllable */ + [0xd537, 0xd537], /* Hangul Syllable */ + [0xd538, 0xd538], /* Hangul Syllable */ + [0xd539, 0xd539], /* Hangul Syllable */ + [0xd53a, 0xd53a], /* Hangul Syllable */ + [0xd53b, 0xd53b], /* Hangul Syllable */ + [0xd53c, 0xd53c], /* Hangul Syllable */ + [0xd53d, 0xd53d], /* Hangul Syllable */ + [0xd53e, 0xd53e], /* Hangul Syllable */ + [0xd53f, 0xd53f], /* Hangul Syllable */ + [0xd540, 0xd540], /* Hangul Syllable */ + [0xd541, 0xd541], /* Hangul Syllable */ + [0xd542, 0xd542], /* Hangul Syllable */ + [0xd543, 0xd543], /* Hangul Syllable */ + [0xd544, 0xd544], /* Hangul Syllable */ + [0xd545, 0xd545], /* Hangul Syllable */ + [0xd546, 0xd546], /* Hangul Syllable */ + [0xd547, 0xd547], /* Hangul Syllable */ + [0xd548, 0xd548], /* Hangul Syllable */ + [0xd549, 0xd549], /* Hangul Syllable */ + [0xd54a, 0xd54a], /* Hangul Syllable */ + [0xd54b, 0xd54b], /* Hangul Syllable */ + [0xd54c, 0xd54c], /* Hangul Syllable */ + [0xd54d, 0xd54d], /* Hangul Syllable */ + [0xd54e, 0xd54e], /* Hangul Syllable */ + [0xd54f, 0xd54f], /* Hangul Syllable */ + [0xd550, 0xd550], /* Hangul Syllable */ + [0xd551, 0xd551], /* Hangul Syllable */ + [0xd552, 0xd552], /* Hangul Syllable */ + [0xd553, 0xd553], /* Hangul Syllable */ + [0xd554, 0xd554], /* Hangul Syllable */ + [0xd555, 0xd555], /* Hangul Syllable */ + [0xd556, 0xd556], /* Hangul Syllable */ + [0xd557, 0xd557], /* Hangul Syllable */ + [0xd558, 0xd558], /* Hangul Syllable */ + [0xd559, 0xd559], /* Hangul Syllable */ + [0xd55a, 0xd55a], /* Hangul Syllable */ + [0xd55b, 0xd55b], /* Hangul Syllable */ + [0xd55c, 0xd55c], /* Hangul Syllable */ + [0xd55d, 0xd55d], /* Hangul Syllable */ + [0xd55e, 0xd55e], /* Hangul Syllable */ + [0xd55f, 0xd55f], /* Hangul Syllable */ + [0xd560, 0xd560], /* Hangul Syllable */ + [0xd561, 0xd561], /* Hangul Syllable */ + [0xd562, 0xd562], /* Hangul Syllable */ + [0xd563, 0xd563], /* Hangul Syllable */ + [0xd564, 0xd564], /* Hangul Syllable */ + [0xd565, 0xd565], /* Hangul Syllable */ + [0xd566, 0xd566], /* Hangul Syllable */ + [0xd567, 0xd567], /* Hangul Syllable */ + [0xd568, 0xd568], /* Hangul Syllable */ + [0xd569, 0xd569], /* Hangul Syllable */ + [0xd56a, 0xd56a], /* Hangul Syllable */ + [0xd56b, 0xd56b], /* Hangul Syllable */ + [0xd56c, 0xd56c], /* Hangul Syllable */ + [0xd56d, 0xd56d], /* Hangul Syllable */ + [0xd56e, 0xd56e], /* Hangul Syllable */ + [0xd56f, 0xd56f], /* Hangul Syllable */ + [0xd570, 0xd570], /* Hangul Syllable */ + [0xd571, 0xd571], /* Hangul Syllable */ + [0xd572, 0xd572], /* Hangul Syllable */ + [0xd573, 0xd573], /* Hangul Syllable */ + [0xd574, 0xd574], /* Hangul Syllable */ + [0xd575, 0xd575], /* Hangul Syllable */ + [0xd576, 0xd576], /* Hangul Syllable */ + [0xd577, 0xd577], /* Hangul Syllable */ + [0xd578, 0xd578], /* Hangul Syllable */ + [0xd579, 0xd579], /* Hangul Syllable */ + [0xd57a, 0xd57a], /* Hangul Syllable */ + [0xd57b, 0xd57b], /* Hangul Syllable */ + [0xd57c, 0xd57c], /* Hangul Syllable */ + [0xd57d, 0xd57d], /* Hangul Syllable */ + [0xd57e, 0xd57e], /* Hangul Syllable */ + [0xd57f, 0xd57f], /* Hangul Syllable */ + [0xd580, 0xd580], /* Hangul Syllable */ + [0xd581, 0xd581], /* Hangul Syllable */ + [0xd582, 0xd582], /* Hangul Syllable */ + [0xd583, 0xd583], /* Hangul Syllable */ + [0xd584, 0xd584], /* Hangul Syllable */ + [0xd585, 0xd585], /* Hangul Syllable */ + [0xd586, 0xd586], /* Hangul Syllable */ + [0xd587, 0xd587], /* Hangul Syllable */ + [0xd588, 0xd588], /* Hangul Syllable */ + [0xd589, 0xd589], /* Hangul Syllable */ + [0xd58a, 0xd58a], /* Hangul Syllable */ + [0xd58b, 0xd58b], /* Hangul Syllable */ + [0xd58c, 0xd58c], /* Hangul Syllable */ + [0xd58d, 0xd58d], /* Hangul Syllable */ + [0xd58e, 0xd58e], /* Hangul Syllable */ + [0xd58f, 0xd58f], /* Hangul Syllable */ + [0xd590, 0xd590], /* Hangul Syllable */ + [0xd591, 0xd591], /* Hangul Syllable */ + [0xd592, 0xd592], /* Hangul Syllable */ + [0xd593, 0xd593], /* Hangul Syllable */ + [0xd594, 0xd594], /* Hangul Syllable */ + [0xd595, 0xd595], /* Hangul Syllable */ + [0xd596, 0xd596], /* Hangul Syllable */ + [0xd597, 0xd597], /* Hangul Syllable */ + [0xd598, 0xd598], /* Hangul Syllable */ + [0xd599, 0xd599], /* Hangul Syllable */ + [0xd59a, 0xd59a], /* Hangul Syllable */ + [0xd59b, 0xd59b], /* Hangul Syllable */ + [0xd59c, 0xd59c], /* Hangul Syllable */ + [0xd59d, 0xd59d], /* Hangul Syllable */ + [0xd59e, 0xd59e], /* Hangul Syllable */ + [0xd59f, 0xd59f], /* Hangul Syllable */ + [0xd5a0, 0xd5a0], /* Hangul Syllable */ + [0xd5a1, 0xd5a1], /* Hangul Syllable */ + [0xd5a2, 0xd5a2], /* Hangul Syllable */ + [0xd5a3, 0xd5a3], /* Hangul Syllable */ + [0xd5a4, 0xd5a4], /* Hangul Syllable */ + [0xd5a5, 0xd5a5], /* Hangul Syllable */ + [0xd5a6, 0xd5a6], /* Hangul Syllable */ + [0xd5a7, 0xd5a7], /* Hangul Syllable */ + [0xd5a8, 0xd5a8], /* Hangul Syllable */ + [0xd5a9, 0xd5a9], /* Hangul Syllable */ + [0xd5aa, 0xd5aa], /* Hangul Syllable */ + [0xd5ab, 0xd5ab], /* Hangul Syllable */ + [0xd5ac, 0xd5ac], /* Hangul Syllable */ + [0xd5ad, 0xd5ad], /* Hangul Syllable */ + [0xd5ae, 0xd5ae], /* Hangul Syllable */ + [0xd5af, 0xd5af], /* Hangul Syllable */ + [0xd5b0, 0xd5b0], /* Hangul Syllable */ + [0xd5b1, 0xd5b1], /* Hangul Syllable */ + [0xd5b2, 0xd5b2], /* Hangul Syllable */ + [0xd5b3, 0xd5b3], /* Hangul Syllable */ + [0xd5b4, 0xd5b4], /* Hangul Syllable */ + [0xd5b5, 0xd5b5], /* Hangul Syllable */ + [0xd5b6, 0xd5b6], /* Hangul Syllable */ + [0xd5b7, 0xd5b7], /* Hangul Syllable */ + [0xd5b8, 0xd5b8], /* Hangul Syllable */ + [0xd5b9, 0xd5b9], /* Hangul Syllable */ + [0xd5ba, 0xd5ba], /* Hangul Syllable */ + [0xd5bb, 0xd5bb], /* Hangul Syllable */ + [0xd5bc, 0xd5bc], /* Hangul Syllable */ + [0xd5bd, 0xd5bd], /* Hangul Syllable */ + [0xd5be, 0xd5be], /* Hangul Syllable */ + [0xd5bf, 0xd5bf], /* Hangul Syllable */ + [0xd5c0, 0xd5c0], /* Hangul Syllable */ + [0xd5c1, 0xd5c1], /* Hangul Syllable */ + [0xd5c2, 0xd5c2], /* Hangul Syllable */ + [0xd5c3, 0xd5c3], /* Hangul Syllable */ + [0xd5c4, 0xd5c4], /* Hangul Syllable */ + [0xd5c5, 0xd5c5], /* Hangul Syllable */ + [0xd5c6, 0xd5c6], /* Hangul Syllable */ + [0xd5c7, 0xd5c7], /* Hangul Syllable */ + [0xd5c8, 0xd5c8], /* Hangul Syllable */ + [0xd5c9, 0xd5c9], /* Hangul Syllable */ + [0xd5ca, 0xd5ca], /* Hangul Syllable */ + [0xd5cb, 0xd5cb], /* Hangul Syllable */ + [0xd5cc, 0xd5cc], /* Hangul Syllable */ + [0xd5cd, 0xd5cd], /* Hangul Syllable */ + [0xd5ce, 0xd5ce], /* Hangul Syllable */ + [0xd5cf, 0xd5cf], /* Hangul Syllable */ + [0xd5d0, 0xd5d0], /* Hangul Syllable */ + [0xd5d1, 0xd5d1], /* Hangul Syllable */ + [0xd5d2, 0xd5d2], /* Hangul Syllable */ + [0xd5d3, 0xd5d3], /* Hangul Syllable */ + [0xd5d4, 0xd5d4], /* Hangul Syllable */ + [0xd5d5, 0xd5d5], /* Hangul Syllable */ + [0xd5d6, 0xd5d6], /* Hangul Syllable */ + [0xd5d7, 0xd5d7], /* Hangul Syllable */ + [0xd5d8, 0xd5d8], /* Hangul Syllable */ + [0xd5d9, 0xd5d9], /* Hangul Syllable */ + [0xd5da, 0xd5da], /* Hangul Syllable */ + [0xd5db, 0xd5db], /* Hangul Syllable */ + [0xd5dc, 0xd5dc], /* Hangul Syllable */ + [0xd5dd, 0xd5dd], /* Hangul Syllable */ + [0xd5de, 0xd5de], /* Hangul Syllable */ + [0xd5df, 0xd5df], /* Hangul Syllable */ + [0xd5e0, 0xd5e0], /* Hangul Syllable */ + [0xd5e1, 0xd5e1], /* Hangul Syllable */ + [0xd5e2, 0xd5e2], /* Hangul Syllable */ + [0xd5e3, 0xd5e3], /* Hangul Syllable */ + [0xd5e4, 0xd5e4], /* Hangul Syllable */ + [0xd5e5, 0xd5e5], /* Hangul Syllable */ + [0xd5e6, 0xd5e6], /* Hangul Syllable */ + [0xd5e7, 0xd5e7], /* Hangul Syllable */ + [0xd5e8, 0xd5e8], /* Hangul Syllable */ + [0xd5e9, 0xd5e9], /* Hangul Syllable */ + [0xd5ea, 0xd5ea], /* Hangul Syllable */ + [0xd5eb, 0xd5eb], /* Hangul Syllable */ + [0xd5ec, 0xd5ec], /* Hangul Syllable */ + [0xd5ed, 0xd5ed], /* Hangul Syllable */ + [0xd5ee, 0xd5ee], /* Hangul Syllable */ + [0xd5ef, 0xd5ef], /* Hangul Syllable */ + [0xd5f0, 0xd5f0], /* Hangul Syllable */ + [0xd5f1, 0xd5f1], /* Hangul Syllable */ + [0xd5f2, 0xd5f2], /* Hangul Syllable */ + [0xd5f3, 0xd5f3], /* Hangul Syllable */ + [0xd5f4, 0xd5f4], /* Hangul Syllable */ + [0xd5f5, 0xd5f5], /* Hangul Syllable */ + [0xd5f6, 0xd5f6], /* Hangul Syllable */ + [0xd5f7, 0xd5f7], /* Hangul Syllable */ + [0xd5f8, 0xd5f8], /* Hangul Syllable */ + [0xd5f9, 0xd5f9], /* Hangul Syllable */ + [0xd5fa, 0xd5fa], /* Hangul Syllable */ + [0xd5fb, 0xd5fb], /* Hangul Syllable */ + [0xd5fc, 0xd5fc], /* Hangul Syllable */ + [0xd5fd, 0xd5fd], /* Hangul Syllable */ + [0xd5fe, 0xd5fe], /* Hangul Syllable */ + [0xd5ff, 0xd5ff], /* Hangul Syllable */ + [0xd600, 0xd600], /* Hangul Syllable */ + [0xd601, 0xd601], /* Hangul Syllable */ + [0xd602, 0xd602], /* Hangul Syllable */ + [0xd603, 0xd603], /* Hangul Syllable */ + [0xd604, 0xd604], /* Hangul Syllable */ + [0xd605, 0xd605], /* Hangul Syllable */ + [0xd606, 0xd606], /* Hangul Syllable */ + [0xd607, 0xd607], /* Hangul Syllable */ + [0xd608, 0xd608], /* Hangul Syllable */ + [0xd609, 0xd609], /* Hangul Syllable */ + [0xd60a, 0xd60a], /* Hangul Syllable */ + [0xd60b, 0xd60b], /* Hangul Syllable */ + [0xd60c, 0xd60c], /* Hangul Syllable */ + [0xd60d, 0xd60d], /* Hangul Syllable */ + [0xd60e, 0xd60e], /* Hangul Syllable */ + [0xd60f, 0xd60f], /* Hangul Syllable */ + [0xd610, 0xd610], /* Hangul Syllable */ + [0xd611, 0xd611], /* Hangul Syllable */ + [0xd612, 0xd612], /* Hangul Syllable */ + [0xd613, 0xd613], /* Hangul Syllable */ + [0xd614, 0xd614], /* Hangul Syllable */ + [0xd615, 0xd615], /* Hangul Syllable */ + [0xd616, 0xd616], /* Hangul Syllable */ + [0xd617, 0xd617], /* Hangul Syllable */ + [0xd618, 0xd618], /* Hangul Syllable */ + [0xd619, 0xd619], /* Hangul Syllable */ + [0xd61a, 0xd61a], /* Hangul Syllable */ + [0xd61b, 0xd61b], /* Hangul Syllable */ + [0xd61c, 0xd61c], /* Hangul Syllable */ + [0xd61d, 0xd61d], /* Hangul Syllable */ + [0xd61e, 0xd61e], /* Hangul Syllable */ + [0xd61f, 0xd61f], /* Hangul Syllable */ + [0xd620, 0xd620], /* Hangul Syllable */ + [0xd621, 0xd621], /* Hangul Syllable */ + [0xd622, 0xd622], /* Hangul Syllable */ + [0xd623, 0xd623], /* Hangul Syllable */ + [0xd624, 0xd624], /* Hangul Syllable */ + [0xd625, 0xd625], /* Hangul Syllable */ + [0xd626, 0xd626], /* Hangul Syllable */ + [0xd627, 0xd627], /* Hangul Syllable */ + [0xd628, 0xd628], /* Hangul Syllable */ + [0xd629, 0xd629], /* Hangul Syllable */ + [0xd62a, 0xd62a], /* Hangul Syllable */ + [0xd62b, 0xd62b], /* Hangul Syllable */ + [0xd62c, 0xd62c], /* Hangul Syllable */ + [0xd62d, 0xd62d], /* Hangul Syllable */ + [0xd62e, 0xd62e], /* Hangul Syllable */ + [0xd62f, 0xd62f], /* Hangul Syllable */ + [0xd630, 0xd630], /* Hangul Syllable */ + [0xd631, 0xd631], /* Hangul Syllable */ + [0xd632, 0xd632], /* Hangul Syllable */ + [0xd633, 0xd633], /* Hangul Syllable */ + [0xd634, 0xd634], /* Hangul Syllable */ + [0xd635, 0xd635], /* Hangul Syllable */ + [0xd636, 0xd636], /* Hangul Syllable */ + [0xd637, 0xd637], /* Hangul Syllable */ + [0xd638, 0xd638], /* Hangul Syllable */ + [0xd639, 0xd639], /* Hangul Syllable */ + [0xd63a, 0xd63a], /* Hangul Syllable */ + [0xd63b, 0xd63b], /* Hangul Syllable */ + [0xd63c, 0xd63c], /* Hangul Syllable */ + [0xd63d, 0xd63d], /* Hangul Syllable */ + [0xd63e, 0xd63e], /* Hangul Syllable */ + [0xd63f, 0xd63f], /* Hangul Syllable */ + [0xd640, 0xd640], /* Hangul Syllable */ + [0xd641, 0xd641], /* Hangul Syllable */ + [0xd642, 0xd642], /* Hangul Syllable */ + [0xd643, 0xd643], /* Hangul Syllable */ + [0xd644, 0xd644], /* Hangul Syllable */ + [0xd645, 0xd645], /* Hangul Syllable */ + [0xd646, 0xd646], /* Hangul Syllable */ + [0xd647, 0xd647], /* Hangul Syllable */ + [0xd648, 0xd648], /* Hangul Syllable */ + [0xd649, 0xd649], /* Hangul Syllable */ + [0xd64a, 0xd64a], /* Hangul Syllable */ + [0xd64b, 0xd64b], /* Hangul Syllable */ + [0xd64c, 0xd64c], /* Hangul Syllable */ + [0xd64d, 0xd64d], /* Hangul Syllable */ + [0xd64e, 0xd64e], /* Hangul Syllable */ + [0xd64f, 0xd64f], /* Hangul Syllable */ + [0xd650, 0xd650], /* Hangul Syllable */ + [0xd651, 0xd651], /* Hangul Syllable */ + [0xd652, 0xd652], /* Hangul Syllable */ + [0xd653, 0xd653], /* Hangul Syllable */ + [0xd654, 0xd654], /* Hangul Syllable */ + [0xd655, 0xd655], /* Hangul Syllable */ + [0xd656, 0xd656], /* Hangul Syllable */ + [0xd657, 0xd657], /* Hangul Syllable */ + [0xd658, 0xd658], /* Hangul Syllable */ + [0xd659, 0xd659], /* Hangul Syllable */ + [0xd65a, 0xd65a], /* Hangul Syllable */ + [0xd65b, 0xd65b], /* Hangul Syllable */ + [0xd65c, 0xd65c], /* Hangul Syllable */ + [0xd65d, 0xd65d], /* Hangul Syllable */ + [0xd65e, 0xd65e], /* Hangul Syllable */ + [0xd65f, 0xd65f], /* Hangul Syllable */ + [0xd660, 0xd660], /* Hangul Syllable */ + [0xd661, 0xd661], /* Hangul Syllable */ + [0xd662, 0xd662], /* Hangul Syllable */ + [0xd663, 0xd663], /* Hangul Syllable */ + [0xd664, 0xd664], /* Hangul Syllable */ + [0xd665, 0xd665], /* Hangul Syllable */ + [0xd666, 0xd666], /* Hangul Syllable */ + [0xd667, 0xd667], /* Hangul Syllable */ + [0xd668, 0xd668], /* Hangul Syllable */ + [0xd669, 0xd669], /* Hangul Syllable */ + [0xd66a, 0xd66a], /* Hangul Syllable */ + [0xd66b, 0xd66b], /* Hangul Syllable */ + [0xd66c, 0xd66c], /* Hangul Syllable */ + [0xd66d, 0xd66d], /* Hangul Syllable */ + [0xd66e, 0xd66e], /* Hangul Syllable */ + [0xd66f, 0xd66f], /* Hangul Syllable */ + [0xd670, 0xd670], /* Hangul Syllable */ + [0xd671, 0xd671], /* Hangul Syllable */ + [0xd672, 0xd672], /* Hangul Syllable */ + [0xd673, 0xd673], /* Hangul Syllable */ + [0xd674, 0xd674], /* Hangul Syllable */ + [0xd675, 0xd675], /* Hangul Syllable */ + [0xd676, 0xd676], /* Hangul Syllable */ + [0xd677, 0xd677], /* Hangul Syllable */ + [0xd678, 0xd678], /* Hangul Syllable */ + [0xd679, 0xd679], /* Hangul Syllable */ + [0xd67a, 0xd67a], /* Hangul Syllable */ + [0xd67b, 0xd67b], /* Hangul Syllable */ + [0xd67c, 0xd67c], /* Hangul Syllable */ + [0xd67d, 0xd67d], /* Hangul Syllable */ + [0xd67e, 0xd67e], /* Hangul Syllable */ + [0xd67f, 0xd67f], /* Hangul Syllable */ + [0xd680, 0xd680], /* Hangul Syllable */ + [0xd681, 0xd681], /* Hangul Syllable */ + [0xd682, 0xd682], /* Hangul Syllable */ + [0xd683, 0xd683], /* Hangul Syllable */ + [0xd684, 0xd684], /* Hangul Syllable */ + [0xd685, 0xd685], /* Hangul Syllable */ + [0xd686, 0xd686], /* Hangul Syllable */ + [0xd687, 0xd687], /* Hangul Syllable */ + [0xd688, 0xd688], /* Hangul Syllable */ + [0xd689, 0xd689], /* Hangul Syllable */ + [0xd68a, 0xd68a], /* Hangul Syllable */ + [0xd68b, 0xd68b], /* Hangul Syllable */ + [0xd68c, 0xd68c], /* Hangul Syllable */ + [0xd68d, 0xd68d], /* Hangul Syllable */ + [0xd68e, 0xd68e], /* Hangul Syllable */ + [0xd68f, 0xd68f], /* Hangul Syllable */ + [0xd690, 0xd690], /* Hangul Syllable */ + [0xd691, 0xd691], /* Hangul Syllable */ + [0xd692, 0xd692], /* Hangul Syllable */ + [0xd693, 0xd693], /* Hangul Syllable */ + [0xd694, 0xd694], /* Hangul Syllable */ + [0xd695, 0xd695], /* Hangul Syllable */ + [0xd696, 0xd696], /* Hangul Syllable */ + [0xd697, 0xd697], /* Hangul Syllable */ + [0xd698, 0xd698], /* Hangul Syllable */ + [0xd699, 0xd699], /* Hangul Syllable */ + [0xd69a, 0xd69a], /* Hangul Syllable */ + [0xd69b, 0xd69b], /* Hangul Syllable */ + [0xd69c, 0xd69c], /* Hangul Syllable */ + [0xd69d, 0xd69d], /* Hangul Syllable */ + [0xd69e, 0xd69e], /* Hangul Syllable */ + [0xd69f, 0xd69f], /* Hangul Syllable */ + [0xd6a0, 0xd6a0], /* Hangul Syllable */ + [0xd6a1, 0xd6a1], /* Hangul Syllable */ + [0xd6a2, 0xd6a2], /* Hangul Syllable */ + [0xd6a3, 0xd6a3], /* Hangul Syllable */ + [0xd6a4, 0xd6a4], /* Hangul Syllable */ + [0xd6a5, 0xd6a5], /* Hangul Syllable */ + [0xd6a6, 0xd6a6], /* Hangul Syllable */ + [0xd6a7, 0xd6a7], /* Hangul Syllable */ + [0xd6a8, 0xd6a8], /* Hangul Syllable */ + [0xd6a9, 0xd6a9], /* Hangul Syllable */ + [0xd6aa, 0xd6aa], /* Hangul Syllable */ + [0xd6ab, 0xd6ab], /* Hangul Syllable */ + [0xd6ac, 0xd6ac], /* Hangul Syllable */ + [0xd6ad, 0xd6ad], /* Hangul Syllable */ + [0xd6ae, 0xd6ae], /* Hangul Syllable */ + [0xd6af, 0xd6af], /* Hangul Syllable */ + [0xd6b0, 0xd6b0], /* Hangul Syllable */ + [0xd6b1, 0xd6b1], /* Hangul Syllable */ + [0xd6b2, 0xd6b2], /* Hangul Syllable */ + [0xd6b3, 0xd6b3], /* Hangul Syllable */ + [0xd6b4, 0xd6b4], /* Hangul Syllable */ + [0xd6b5, 0xd6b5], /* Hangul Syllable */ + [0xd6b6, 0xd6b6], /* Hangul Syllable */ + [0xd6b7, 0xd6b7], /* Hangul Syllable */ + [0xd6b8, 0xd6b8], /* Hangul Syllable */ + [0xd6b9, 0xd6b9], /* Hangul Syllable */ + [0xd6ba, 0xd6ba], /* Hangul Syllable */ + [0xd6bb, 0xd6bb], /* Hangul Syllable */ + [0xd6bc, 0xd6bc], /* Hangul Syllable */ + [0xd6bd, 0xd6bd], /* Hangul Syllable */ + [0xd6be, 0xd6be], /* Hangul Syllable */ + [0xd6bf, 0xd6bf], /* Hangul Syllable */ + [0xd6c0, 0xd6c0], /* Hangul Syllable */ + [0xd6c1, 0xd6c1], /* Hangul Syllable */ + [0xd6c2, 0xd6c2], /* Hangul Syllable */ + [0xd6c3, 0xd6c3], /* Hangul Syllable */ + [0xd6c4, 0xd6c4], /* Hangul Syllable */ + [0xd6c5, 0xd6c5], /* Hangul Syllable */ + [0xd6c6, 0xd6c6], /* Hangul Syllable */ + [0xd6c7, 0xd6c7], /* Hangul Syllable */ + [0xd6c8, 0xd6c8], /* Hangul Syllable */ + [0xd6c9, 0xd6c9], /* Hangul Syllable */ + [0xd6ca, 0xd6ca], /* Hangul Syllable */ + [0xd6cb, 0xd6cb], /* Hangul Syllable */ + [0xd6cc, 0xd6cc], /* Hangul Syllable */ + [0xd6cd, 0xd6cd], /* Hangul Syllable */ + [0xd6ce, 0xd6ce], /* Hangul Syllable */ + [0xd6cf, 0xd6cf], /* Hangul Syllable */ + [0xd6d0, 0xd6d0], /* Hangul Syllable */ + [0xd6d1, 0xd6d1], /* Hangul Syllable */ + [0xd6d2, 0xd6d2], /* Hangul Syllable */ + [0xd6d3, 0xd6d3], /* Hangul Syllable */ + [0xd6d4, 0xd6d4], /* Hangul Syllable */ + [0xd6d5, 0xd6d5], /* Hangul Syllable */ + [0xd6d6, 0xd6d6], /* Hangul Syllable */ + [0xd6d7, 0xd6d7], /* Hangul Syllable */ + [0xd6d8, 0xd6d8], /* Hangul Syllable */ + [0xd6d9, 0xd6d9], /* Hangul Syllable */ + [0xd6da, 0xd6da], /* Hangul Syllable */ + [0xd6db, 0xd6db], /* Hangul Syllable */ + [0xd6dc, 0xd6dc], /* Hangul Syllable */ + [0xd6dd, 0xd6dd], /* Hangul Syllable */ + [0xd6de, 0xd6de], /* Hangul Syllable */ + [0xd6df, 0xd6df], /* Hangul Syllable */ + [0xd6e0, 0xd6e0], /* Hangul Syllable */ + [0xd6e1, 0xd6e1], /* Hangul Syllable */ + [0xd6e2, 0xd6e2], /* Hangul Syllable */ + [0xd6e3, 0xd6e3], /* Hangul Syllable */ + [0xd6e4, 0xd6e4], /* Hangul Syllable */ + [0xd6e5, 0xd6e5], /* Hangul Syllable */ + [0xd6e6, 0xd6e6], /* Hangul Syllable */ + [0xd6e7, 0xd6e7], /* Hangul Syllable */ + [0xd6e8, 0xd6e8], /* Hangul Syllable */ + [0xd6e9, 0xd6e9], /* Hangul Syllable */ + [0xd6ea, 0xd6ea], /* Hangul Syllable */ + [0xd6eb, 0xd6eb], /* Hangul Syllable */ + [0xd6ec, 0xd6ec], /* Hangul Syllable */ + [0xd6ed, 0xd6ed], /* Hangul Syllable */ + [0xd6ee, 0xd6ee], /* Hangul Syllable */ + [0xd6ef, 0xd6ef], /* Hangul Syllable */ + [0xd6f0, 0xd6f0], /* Hangul Syllable */ + [0xd6f1, 0xd6f1], /* Hangul Syllable */ + [0xd6f2, 0xd6f2], /* Hangul Syllable */ + [0xd6f3, 0xd6f3], /* Hangul Syllable */ + [0xd6f4, 0xd6f4], /* Hangul Syllable */ + [0xd6f5, 0xd6f5], /* Hangul Syllable */ + [0xd6f6, 0xd6f6], /* Hangul Syllable */ + [0xd6f7, 0xd6f7], /* Hangul Syllable */ + [0xd6f8, 0xd6f8], /* Hangul Syllable */ + [0xd6f9, 0xd6f9], /* Hangul Syllable */ + [0xd6fa, 0xd6fa], /* Hangul Syllable */ + [0xd6fb, 0xd6fb], /* Hangul Syllable */ + [0xd6fc, 0xd6fc], /* Hangul Syllable */ + [0xd6fd, 0xd6fd], /* Hangul Syllable */ + [0xd6fe, 0xd6fe], /* Hangul Syllable */ + [0xd6ff, 0xd6ff], /* Hangul Syllable */ + [0xd700, 0xd700], /* Hangul Syllable */ + [0xd701, 0xd701], /* Hangul Syllable */ + [0xd702, 0xd702], /* Hangul Syllable */ + [0xd703, 0xd703], /* Hangul Syllable */ + [0xd704, 0xd704], /* Hangul Syllable */ + [0xd705, 0xd705], /* Hangul Syllable */ + [0xd706, 0xd706], /* Hangul Syllable */ + [0xd707, 0xd707], /* Hangul Syllable */ + [0xd708, 0xd708], /* Hangul Syllable */ + [0xd709, 0xd709], /* Hangul Syllable */ + [0xd70a, 0xd70a], /* Hangul Syllable */ + [0xd70b, 0xd70b], /* Hangul Syllable */ + [0xd70c, 0xd70c], /* Hangul Syllable */ + [0xd70d, 0xd70d], /* Hangul Syllable */ + [0xd70e, 0xd70e], /* Hangul Syllable */ + [0xd70f, 0xd70f], /* Hangul Syllable */ + [0xd710, 0xd710], /* Hangul Syllable */ + [0xd711, 0xd711], /* Hangul Syllable */ + [0xd712, 0xd712], /* Hangul Syllable */ + [0xd713, 0xd713], /* Hangul Syllable */ + [0xd714, 0xd714], /* Hangul Syllable */ + [0xd715, 0xd715], /* Hangul Syllable */ + [0xd716, 0xd716], /* Hangul Syllable */ + [0xd717, 0xd717], /* Hangul Syllable */ + [0xd718, 0xd718], /* Hangul Syllable */ + [0xd719, 0xd719], /* Hangul Syllable */ + [0xd71a, 0xd71a], /* Hangul Syllable */ + [0xd71b, 0xd71b], /* Hangul Syllable */ + [0xd71c, 0xd71c], /* Hangul Syllable */ + [0xd71d, 0xd71d], /* Hangul Syllable */ + [0xd71e, 0xd71e], /* Hangul Syllable */ + [0xd71f, 0xd71f], /* Hangul Syllable */ + [0xd720, 0xd720], /* Hangul Syllable */ + [0xd721, 0xd721], /* Hangul Syllable */ + [0xd722, 0xd722], /* Hangul Syllable */ + [0xd723, 0xd723], /* Hangul Syllable */ + [0xd724, 0xd724], /* Hangul Syllable */ + [0xd725, 0xd725], /* Hangul Syllable */ + [0xd726, 0xd726], /* Hangul Syllable */ + [0xd727, 0xd727], /* Hangul Syllable */ + [0xd728, 0xd728], /* Hangul Syllable */ + [0xd729, 0xd729], /* Hangul Syllable */ + [0xd72a, 0xd72a], /* Hangul Syllable */ + [0xd72b, 0xd72b], /* Hangul Syllable */ + [0xd72c, 0xd72c], /* Hangul Syllable */ + [0xd72d, 0xd72d], /* Hangul Syllable */ + [0xd72e, 0xd72e], /* Hangul Syllable */ + [0xd72f, 0xd72f], /* Hangul Syllable */ + [0xd730, 0xd730], /* Hangul Syllable */ + [0xd731, 0xd731], /* Hangul Syllable */ + [0xd732, 0xd732], /* Hangul Syllable */ + [0xd733, 0xd733], /* Hangul Syllable */ + [0xd734, 0xd734], /* Hangul Syllable */ + [0xd735, 0xd735], /* Hangul Syllable */ + [0xd736, 0xd736], /* Hangul Syllable */ + [0xd737, 0xd737], /* Hangul Syllable */ + [0xd738, 0xd738], /* Hangul Syllable */ + [0xd739, 0xd739], /* Hangul Syllable */ + [0xd73a, 0xd73a], /* Hangul Syllable */ + [0xd73b, 0xd73b], /* Hangul Syllable */ + [0xd73c, 0xd73c], /* Hangul Syllable */ + [0xd73d, 0xd73d], /* Hangul Syllable */ + [0xd73e, 0xd73e], /* Hangul Syllable */ + [0xd73f, 0xd73f], /* Hangul Syllable */ + [0xd740, 0xd740], /* Hangul Syllable */ + [0xd741, 0xd741], /* Hangul Syllable */ + [0xd742, 0xd742], /* Hangul Syllable */ + [0xd743, 0xd743], /* Hangul Syllable */ + [0xd744, 0xd744], /* Hangul Syllable */ + [0xd745, 0xd745], /* Hangul Syllable */ + [0xd746, 0xd746], /* Hangul Syllable */ + [0xd747, 0xd747], /* Hangul Syllable */ + [0xd748, 0xd748], /* Hangul Syllable */ + [0xd749, 0xd749], /* Hangul Syllable */ + [0xd74a, 0xd74a], /* Hangul Syllable */ + [0xd74b, 0xd74b], /* Hangul Syllable */ + [0xd74c, 0xd74c], /* Hangul Syllable */ + [0xd74d, 0xd74d], /* Hangul Syllable */ + [0xd74e, 0xd74e], /* Hangul Syllable */ + [0xd74f, 0xd74f], /* Hangul Syllable */ + [0xd750, 0xd750], /* Hangul Syllable */ + [0xd751, 0xd751], /* Hangul Syllable */ + [0xd752, 0xd752], /* Hangul Syllable */ + [0xd753, 0xd753], /* Hangul Syllable */ + [0xd754, 0xd754], /* Hangul Syllable */ + [0xd755, 0xd755], /* Hangul Syllable */ + [0xd756, 0xd756], /* Hangul Syllable */ + [0xd757, 0xd757], /* Hangul Syllable */ + [0xd758, 0xd758], /* Hangul Syllable */ + [0xd759, 0xd759], /* Hangul Syllable */ + [0xd75a, 0xd75a], /* Hangul Syllable */ + [0xd75b, 0xd75b], /* Hangul Syllable */ + [0xd75c, 0xd75c], /* Hangul Syllable */ + [0xd75d, 0xd75d], /* Hangul Syllable */ + [0xd75e, 0xd75e], /* Hangul Syllable */ + [0xd75f, 0xd75f], /* Hangul Syllable */ + [0xd760, 0xd760], /* Hangul Syllable */ + [0xd761, 0xd761], /* Hangul Syllable */ + [0xd762, 0xd762], /* Hangul Syllable */ + [0xd763, 0xd763], /* Hangul Syllable */ + [0xd764, 0xd764], /* Hangul Syllable */ + [0xd765, 0xd765], /* Hangul Syllable */ + [0xd766, 0xd766], /* Hangul Syllable */ + [0xd767, 0xd767], /* Hangul Syllable */ + [0xd768, 0xd768], /* Hangul Syllable */ + [0xd769, 0xd769], /* Hangul Syllable */ + [0xd76a, 0xd76a], /* Hangul Syllable */ + [0xd76b, 0xd76b], /* Hangul Syllable */ + [0xd76c, 0xd76c], /* Hangul Syllable */ + [0xd76d, 0xd76d], /* Hangul Syllable */ + [0xd76e, 0xd76e], /* Hangul Syllable */ + [0xd76f, 0xd76f], /* Hangul Syllable */ + [0xd770, 0xd770], /* Hangul Syllable */ + [0xd771, 0xd771], /* Hangul Syllable */ + [0xd772, 0xd772], /* Hangul Syllable */ + [0xd773, 0xd773], /* Hangul Syllable */ + [0xd774, 0xd774], /* Hangul Syllable */ + [0xd775, 0xd775], /* Hangul Syllable */ + [0xd776, 0xd776], /* Hangul Syllable */ + [0xd777, 0xd777], /* Hangul Syllable */ + [0xd778, 0xd778], /* Hangul Syllable */ + [0xd779, 0xd779], /* Hangul Syllable */ + [0xd77a, 0xd77a], /* Hangul Syllable */ + [0xd77b, 0xd77b], /* Hangul Syllable */ + [0xd77c, 0xd77c], /* Hangul Syllable */ + [0xd77d, 0xd77d], /* Hangul Syllable */ + [0xd77e, 0xd77e], /* Hangul Syllable */ + [0xd77f, 0xd77f], /* Hangul Syllable */ + [0xd780, 0xd780], /* Hangul Syllable */ + [0xd781, 0xd781], /* Hangul Syllable */ + [0xd782, 0xd782], /* Hangul Syllable */ + [0xd783, 0xd783], /* Hangul Syllable */ + [0xd784, 0xd784], /* Hangul Syllable */ + [0xd785, 0xd785], /* Hangul Syllable */ + [0xd786, 0xd786], /* Hangul Syllable */ + [0xd787, 0xd787], /* Hangul Syllable */ + [0xd788, 0xd788], /* Hangul Syllable */ + [0xd789, 0xd789], /* Hangul Syllable */ + [0xd78a, 0xd78a], /* Hangul Syllable */ + [0xd78b, 0xd78b], /* Hangul Syllable */ + [0xd78c, 0xd78c], /* Hangul Syllable */ + [0xd78d, 0xd78d], /* Hangul Syllable */ + [0xd78e, 0xd78e], /* Hangul Syllable */ + [0xd78f, 0xd78f], /* Hangul Syllable */ + [0xd790, 0xd790], /* Hangul Syllable */ + [0xd791, 0xd791], /* Hangul Syllable */ + [0xd792, 0xd792], /* Hangul Syllable */ + [0xd793, 0xd793], /* Hangul Syllable */ + [0xd794, 0xd794], /* Hangul Syllable */ + [0xd795, 0xd795], /* Hangul Syllable */ + [0xd796, 0xd796], /* Hangul Syllable */ + [0xd797, 0xd797], /* Hangul Syllable */ + [0xd798, 0xd798], /* Hangul Syllable */ + [0xd799, 0xd799], /* Hangul Syllable */ + [0xd79a, 0xd79a], /* Hangul Syllable */ + [0xd79b, 0xd79b], /* Hangul Syllable */ + [0xd79c, 0xd79c], /* Hangul Syllable */ + [0xd79d, 0xd79d], /* Hangul Syllable */ + [0xd79e, 0xd79e], /* Hangul Syllable */ + [0xd79f, 0xd79f], /* Hangul Syllable */ + [0xd7a0, 0xd7a0], /* Hangul Syllable */ + [0xd7a1, 0xd7a1], /* Hangul Syllable */ + [0xd7a2, 0xd7a2], /* Hangul Syllable */ + [0xd7a3, 0xd7a3], /* Hangul Syllable */ + [0xd7a4, 0xd7a4], + [0xd7a5, 0xd7a5], + [0xd7a6, 0xd7a6], + [0xd7a7, 0xd7a7], + [0xd7a8, 0xd7a8], + [0xd7a9, 0xd7a9], + [0xd7aa, 0xd7aa], + [0xd7ab, 0xd7ab], + [0xd7ac, 0xd7ac], + [0xd7ad, 0xd7ad], + [0xd7ae, 0xd7ae], + [0xd7af, 0xd7af], + [0xd7b0, 0xd7b0], /* HANGUL JUNGSEONG O-YEO */ + [0xd7b1, 0xd7b1], /* HANGUL JUNGSEONG O-O-I */ + [0xd7b2, 0xd7b2], /* HANGUL JUNGSEONG YO-A */ + [0xd7b3, 0xd7b3], /* HANGUL JUNGSEONG YO-AE */ + [0xd7b4, 0xd7b4], /* HANGUL JUNGSEONG YO-EO */ + [0xd7b5, 0xd7b5], /* HANGUL JUNGSEONG U-YEO */ + [0xd7b6, 0xd7b6], /* HANGUL JUNGSEONG U-I-I */ + [0xd7b7, 0xd7b7], /* HANGUL JUNGSEONG YU-AE */ + [0xd7b8, 0xd7b8], /* HANGUL JUNGSEONG YU-O */ + [0xd7b9, 0xd7b9], /* HANGUL JUNGSEONG EU-A */ + [0xd7ba, 0xd7ba], /* HANGUL JUNGSEONG EU-EO */ + [0xd7bb, 0xd7bb], /* HANGUL JUNGSEONG EU-E */ + [0xd7bc, 0xd7bc], /* HANGUL JUNGSEONG EU-O */ + [0xd7bd, 0xd7bd], /* HANGUL JUNGSEONG I-YA-O */ + [0xd7be, 0xd7be], /* HANGUL JUNGSEONG I-YAE */ + [0xd7bf, 0xd7bf], /* HANGUL JUNGSEONG I-YEO */ + [0xd7c0, 0xd7c0], /* HANGUL JUNGSEONG I-YE */ + [0xd7c1, 0xd7c1], /* HANGUL JUNGSEONG I-O-I */ + [0xd7c2, 0xd7c2], /* HANGUL JUNGSEONG I-YO */ + [0xd7c3, 0xd7c3], /* HANGUL JUNGSEONG I-YU */ + [0xd7c4, 0xd7c4], /* HANGUL JUNGSEONG I-I */ + [0xd7c5, 0xd7c5], /* HANGUL JUNGSEONG ARAEA-A */ + [0xd7c6, 0xd7c6], /* HANGUL JUNGSEONG ARAEA-E */ + [0xd7c7, 0xd7c7], + [0xd7c8, 0xd7c8], + [0xd7c9, 0xd7c9], + [0xd7ca, 0xd7ca], + [0xd7cb, 0xd7cb], /* HANGUL JONGSEONG NIEUN-RIEUL */ + [0xd7cc, 0xd7cc], /* HANGUL JONGSEONG NIEUN-CHIEUCH */ + [0xd7cd, 0xd7cd], /* HANGUL JONGSEONG SSANGTIKEUT */ + [0xd7ce, 0xd7ce], /* HANGUL JONGSEONG SSANGTIKEUT-PIEUP */ + [0xd7cf, 0xd7cf], /* HANGUL JONGSEONG TIKEUT-PIEUP */ + [0xd7d0, 0xd7d0], /* HANGUL JONGSEONG TIKEUT-SIOS */ + [0xd7d1, 0xd7d1], /* HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK */ + [0xd7d2, 0xd7d2], /* HANGUL JONGSEONG TIKEUT-CIEUC */ + [0xd7d3, 0xd7d3], /* HANGUL JONGSEONG TIKEUT-CHIEUCH */ + [0xd7d4, 0xd7d4], /* HANGUL JONGSEONG TIKEUT-THIEUTH */ + [0xd7d5, 0xd7d5], /* HANGUL JONGSEONG RIEUL-SSANGKIYEOK */ + [0xd7d6, 0xd7d6], /* HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH */ + [0xd7d7, 0xd7d7], /* HANGUL JONGSEONG SSANGRIEUL-KHIEUKH */ + [0xd7d8, 0xd7d8], /* HANGUL JONGSEONG RIEUL-MIEUM-HIEUH */ + [0xd7d9, 0xd7d9], /* HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT */ + [0xd7da, 0xd7da], /* HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH */ + [0xd7db, 0xd7db], /* HANGUL JONGSEONG RIEUL-YESIEUNG */ + [0xd7dc, 0xd7dc], /* HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH */ + [0xd7dd, 0xd7dd], /* HANGUL JONGSEONG KAPYEOUNRIEUL */ + [0xd7de, 0xd7de], /* HANGUL JONGSEONG MIEUM-NIEUN */ + [0xd7df, 0xd7df], /* HANGUL JONGSEONG MIEUM-SSANGNIEUN */ + [0xd7e0, 0xd7e0], /* HANGUL JONGSEONG SSANGMIEUM */ + [0xd7e1, 0xd7e1], /* HANGUL JONGSEONG MIEUM-PIEUP-SIOS */ + [0xd7e2, 0xd7e2], /* HANGUL JONGSEONG MIEUM-CIEUC */ + [0xd7e3, 0xd7e3], /* HANGUL JONGSEONG PIEUP-TIKEUT */ + [0xd7e4, 0xd7e4], /* HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH */ + [0xd7e5, 0xd7e5], /* HANGUL JONGSEONG PIEUP-MIEUM */ + [0xd7e6, 0xd7e6], /* HANGUL JONGSEONG SSANGPIEUP */ + [0xd7e7, 0xd7e7], /* HANGUL JONGSEONG PIEUP-SIOS-TIKEUT */ + [0xd7e8, 0xd7e8], /* HANGUL JONGSEONG PIEUP-CIEUC */ + [0xd7e9, 0xd7e9], /* HANGUL JONGSEONG PIEUP-CHIEUCH */ + [0xd7ea, 0xd7ea], /* HANGUL JONGSEONG SIOS-MIEUM */ + [0xd7eb, 0xd7eb], /* HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP */ + [0xd7ec, 0xd7ec], /* HANGUL JONGSEONG SSANGSIOS-KIYEOK */ + [0xd7ed, 0xd7ed], /* HANGUL JONGSEONG SSANGSIOS-TIKEUT */ + [0xd7ee, 0xd7ee], /* HANGUL JONGSEONG SIOS-PANSIOS */ + [0xd7ef, 0xd7ef], /* HANGUL JONGSEONG SIOS-CIEUC */ + [0xd7f0, 0xd7f0], /* HANGUL JONGSEONG SIOS-CHIEUCH */ + [0xd7f1, 0xd7f1], /* HANGUL JONGSEONG SIOS-THIEUTH */ + [0xd7f2, 0xd7f2], /* HANGUL JONGSEONG SIOS-HIEUH */ + [0xd7f3, 0xd7f3], /* HANGUL JONGSEONG PANSIOS-PIEUP */ + [0xd7f4, 0xd7f4], /* HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP */ + [0xd7f5, 0xd7f5], /* HANGUL JONGSEONG YESIEUNG-MIEUM */ + [0xd7f6, 0xd7f6], /* HANGUL JONGSEONG YESIEUNG-HIEUH */ + [0xd7f7, 0xd7f7], /* HANGUL JONGSEONG CIEUC-PIEUP */ + [0xd7f8, 0xd7f8], /* HANGUL JONGSEONG CIEUC-SSANGPIEUP */ + [0xd7f9, 0xd7f9], /* HANGUL JONGSEONG SSANGCIEUC */ + [0xd7fa, 0xd7fa], /* HANGUL JONGSEONG PHIEUPH-SIOS */ + [0xd7fb, 0xd7fb], /* HANGUL JONGSEONG PHIEUPH-THIEUTH */ + [0xd7fc, 0xd7fc], + [0xd7fd, 0xd7fd], + [0xd7fe, 0xd7fe], + [0xd7ff, 0xd7ff], + [0xd800, 0xd800], /* Non Private Use High Surrogate */ + [0xd801, 0xd801], /* Non Private Use High Surrogate */ + [0xd802, 0xd802], /* Non Private Use High Surrogate */ + [0xd803, 0xd803], /* Non Private Use High Surrogate */ + [0xd804, 0xd804], /* Non Private Use High Surrogate */ + [0xd805, 0xd805], /* Non Private Use High Surrogate */ + [0xd806, 0xd806], /* Non Private Use High Surrogate */ + [0xd807, 0xd807], /* Non Private Use High Surrogate */ + [0xd808, 0xd808], /* Non Private Use High Surrogate */ + [0xd809, 0xd809], /* Non Private Use High Surrogate */ + [0xd80a, 0xd80a], /* Non Private Use High Surrogate */ + [0xd80b, 0xd80b], /* Non Private Use High Surrogate */ + [0xd80c, 0xd80c], /* Non Private Use High Surrogate */ + [0xd80d, 0xd80d], /* Non Private Use High Surrogate */ + [0xd80e, 0xd80e], /* Non Private Use High Surrogate */ + [0xd80f, 0xd80f], /* Non Private Use High Surrogate */ + [0xd810, 0xd810], /* Non Private Use High Surrogate */ + [0xd811, 0xd811], /* Non Private Use High Surrogate */ + [0xd812, 0xd812], /* Non Private Use High Surrogate */ + [0xd813, 0xd813], /* Non Private Use High Surrogate */ + [0xd814, 0xd814], /* Non Private Use High Surrogate */ + [0xd815, 0xd815], /* Non Private Use High Surrogate */ + [0xd816, 0xd816], /* Non Private Use High Surrogate */ + [0xd817, 0xd817], /* Non Private Use High Surrogate */ + [0xd818, 0xd818], /* Non Private Use High Surrogate */ + [0xd819, 0xd819], /* Non Private Use High Surrogate */ + [0xd81a, 0xd81a], /* Non Private Use High Surrogate */ + [0xd81b, 0xd81b], /* Non Private Use High Surrogate */ + [0xd81c, 0xd81c], /* Non Private Use High Surrogate */ + [0xd81d, 0xd81d], /* Non Private Use High Surrogate */ + [0xd81e, 0xd81e], /* Non Private Use High Surrogate */ + [0xd81f, 0xd81f], /* Non Private Use High Surrogate */ + [0xd820, 0xd820], /* Non Private Use High Surrogate */ + [0xd821, 0xd821], /* Non Private Use High Surrogate */ + [0xd822, 0xd822], /* Non Private Use High Surrogate */ + [0xd823, 0xd823], /* Non Private Use High Surrogate */ + [0xd824, 0xd824], /* Non Private Use High Surrogate */ + [0xd825, 0xd825], /* Non Private Use High Surrogate */ + [0xd826, 0xd826], /* Non Private Use High Surrogate */ + [0xd827, 0xd827], /* Non Private Use High Surrogate */ + [0xd828, 0xd828], /* Non Private Use High Surrogate */ + [0xd829, 0xd829], /* Non Private Use High Surrogate */ + [0xd82a, 0xd82a], /* Non Private Use High Surrogate */ + [0xd82b, 0xd82b], /* Non Private Use High Surrogate */ + [0xd82c, 0xd82c], /* Non Private Use High Surrogate */ + [0xd82d, 0xd82d], /* Non Private Use High Surrogate */ + [0xd82e, 0xd82e], /* Non Private Use High Surrogate */ + [0xd82f, 0xd82f], /* Non Private Use High Surrogate */ + [0xd830, 0xd830], /* Non Private Use High Surrogate */ + [0xd831, 0xd831], /* Non Private Use High Surrogate */ + [0xd832, 0xd832], /* Non Private Use High Surrogate */ + [0xd833, 0xd833], /* Non Private Use High Surrogate */ + [0xd834, 0xd834], /* Non Private Use High Surrogate */ + [0xd835, 0xd835], /* Non Private Use High Surrogate */ + [0xd836, 0xd836], /* Non Private Use High Surrogate */ + [0xd837, 0xd837], /* Non Private Use High Surrogate */ + [0xd838, 0xd838], /* Non Private Use High Surrogate */ + [0xd839, 0xd839], /* Non Private Use High Surrogate */ + [0xd83a, 0xd83a], /* Non Private Use High Surrogate */ + [0xd83b, 0xd83b], /* Non Private Use High Surrogate */ + [0xd83c, 0xd83c], /* Non Private Use High Surrogate */ + [0xd83d, 0xd83d], /* Non Private Use High Surrogate */ + [0xd83e, 0xd83e], /* Non Private Use High Surrogate */ + [0xd83f, 0xd83f], /* Non Private Use High Surrogate */ + [0xd840, 0xd840], /* Non Private Use High Surrogate */ + [0xd841, 0xd841], /* Non Private Use High Surrogate */ + [0xd842, 0xd842], /* Non Private Use High Surrogate */ + [0xd843, 0xd843], /* Non Private Use High Surrogate */ + [0xd844, 0xd844], /* Non Private Use High Surrogate */ + [0xd845, 0xd845], /* Non Private Use High Surrogate */ + [0xd846, 0xd846], /* Non Private Use High Surrogate */ + [0xd847, 0xd847], /* Non Private Use High Surrogate */ + [0xd848, 0xd848], /* Non Private Use High Surrogate */ + [0xd849, 0xd849], /* Non Private Use High Surrogate */ + [0xd84a, 0xd84a], /* Non Private Use High Surrogate */ + [0xd84b, 0xd84b], /* Non Private Use High Surrogate */ + [0xd84c, 0xd84c], /* Non Private Use High Surrogate */ + [0xd84d, 0xd84d], /* Non Private Use High Surrogate */ + [0xd84e, 0xd84e], /* Non Private Use High Surrogate */ + [0xd84f, 0xd84f], /* Non Private Use High Surrogate */ + [0xd850, 0xd850], /* Non Private Use High Surrogate */ + [0xd851, 0xd851], /* Non Private Use High Surrogate */ + [0xd852, 0xd852], /* Non Private Use High Surrogate */ + [0xd853, 0xd853], /* Non Private Use High Surrogate */ + [0xd854, 0xd854], /* Non Private Use High Surrogate */ + [0xd855, 0xd855], /* Non Private Use High Surrogate */ + [0xd856, 0xd856], /* Non Private Use High Surrogate */ + [0xd857, 0xd857], /* Non Private Use High Surrogate */ + [0xd858, 0xd858], /* Non Private Use High Surrogate */ + [0xd859, 0xd859], /* Non Private Use High Surrogate */ + [0xd85a, 0xd85a], /* Non Private Use High Surrogate */ + [0xd85b, 0xd85b], /* Non Private Use High Surrogate */ + [0xd85c, 0xd85c], /* Non Private Use High Surrogate */ + [0xd85d, 0xd85d], /* Non Private Use High Surrogate */ + [0xd85e, 0xd85e], /* Non Private Use High Surrogate */ + [0xd85f, 0xd85f], /* Non Private Use High Surrogate */ + [0xd860, 0xd860], /* Non Private Use High Surrogate */ + [0xd861, 0xd861], /* Non Private Use High Surrogate */ + [0xd862, 0xd862], /* Non Private Use High Surrogate */ + [0xd863, 0xd863], /* Non Private Use High Surrogate */ + [0xd864, 0xd864], /* Non Private Use High Surrogate */ + [0xd865, 0xd865], /* Non Private Use High Surrogate */ + [0xd866, 0xd866], /* Non Private Use High Surrogate */ + [0xd867, 0xd867], /* Non Private Use High Surrogate */ + [0xd868, 0xd868], /* Non Private Use High Surrogate */ + [0xd869, 0xd869], /* Non Private Use High Surrogate */ + [0xd86a, 0xd86a], /* Non Private Use High Surrogate */ + [0xd86b, 0xd86b], /* Non Private Use High Surrogate */ + [0xd86c, 0xd86c], /* Non Private Use High Surrogate */ + [0xd86d, 0xd86d], /* Non Private Use High Surrogate */ + [0xd86e, 0xd86e], /* Non Private Use High Surrogate */ + [0xd86f, 0xd86f], /* Non Private Use High Surrogate */ + [0xd870, 0xd870], /* Non Private Use High Surrogate */ + [0xd871, 0xd871], /* Non Private Use High Surrogate */ + [0xd872, 0xd872], /* Non Private Use High Surrogate */ + [0xd873, 0xd873], /* Non Private Use High Surrogate */ + [0xd874, 0xd874], /* Non Private Use High Surrogate */ + [0xd875, 0xd875], /* Non Private Use High Surrogate */ + [0xd876, 0xd876], /* Non Private Use High Surrogate */ + [0xd877, 0xd877], /* Non Private Use High Surrogate */ + [0xd878, 0xd878], /* Non Private Use High Surrogate */ + [0xd879, 0xd879], /* Non Private Use High Surrogate */ + [0xd87a, 0xd87a], /* Non Private Use High Surrogate */ + [0xd87b, 0xd87b], /* Non Private Use High Surrogate */ + [0xd87c, 0xd87c], /* Non Private Use High Surrogate */ + [0xd87d, 0xd87d], /* Non Private Use High Surrogate */ + [0xd87e, 0xd87e], /* Non Private Use High Surrogate */ + [0xd87f, 0xd87f], /* Non Private Use High Surrogate */ + [0xd880, 0xd880], /* Non Private Use High Surrogate */ + [0xd881, 0xd881], /* Non Private Use High Surrogate */ + [0xd882, 0xd882], /* Non Private Use High Surrogate */ + [0xd883, 0xd883], /* Non Private Use High Surrogate */ + [0xd884, 0xd884], /* Non Private Use High Surrogate */ + [0xd885, 0xd885], /* Non Private Use High Surrogate */ + [0xd886, 0xd886], /* Non Private Use High Surrogate */ + [0xd887, 0xd887], /* Non Private Use High Surrogate */ + [0xd888, 0xd888], /* Non Private Use High Surrogate */ + [0xd889, 0xd889], /* Non Private Use High Surrogate */ + [0xd88a, 0xd88a], /* Non Private Use High Surrogate */ + [0xd88b, 0xd88b], /* Non Private Use High Surrogate */ + [0xd88c, 0xd88c], /* Non Private Use High Surrogate */ + [0xd88d, 0xd88d], /* Non Private Use High Surrogate */ + [0xd88e, 0xd88e], /* Non Private Use High Surrogate */ + [0xd88f, 0xd88f], /* Non Private Use High Surrogate */ + [0xd890, 0xd890], /* Non Private Use High Surrogate */ + [0xd891, 0xd891], /* Non Private Use High Surrogate */ + [0xd892, 0xd892], /* Non Private Use High Surrogate */ + [0xd893, 0xd893], /* Non Private Use High Surrogate */ + [0xd894, 0xd894], /* Non Private Use High Surrogate */ + [0xd895, 0xd895], /* Non Private Use High Surrogate */ + [0xd896, 0xd896], /* Non Private Use High Surrogate */ + [0xd897, 0xd897], /* Non Private Use High Surrogate */ + [0xd898, 0xd898], /* Non Private Use High Surrogate */ + [0xd899, 0xd899], /* Non Private Use High Surrogate */ + [0xd89a, 0xd89a], /* Non Private Use High Surrogate */ + [0xd89b, 0xd89b], /* Non Private Use High Surrogate */ + [0xd89c, 0xd89c], /* Non Private Use High Surrogate */ + [0xd89d, 0xd89d], /* Non Private Use High Surrogate */ + [0xd89e, 0xd89e], /* Non Private Use High Surrogate */ + [0xd89f, 0xd89f], /* Non Private Use High Surrogate */ + [0xd8a0, 0xd8a0], /* Non Private Use High Surrogate */ + [0xd8a1, 0xd8a1], /* Non Private Use High Surrogate */ + [0xd8a2, 0xd8a2], /* Non Private Use High Surrogate */ + [0xd8a3, 0xd8a3], /* Non Private Use High Surrogate */ + [0xd8a4, 0xd8a4], /* Non Private Use High Surrogate */ + [0xd8a5, 0xd8a5], /* Non Private Use High Surrogate */ + [0xd8a6, 0xd8a6], /* Non Private Use High Surrogate */ + [0xd8a7, 0xd8a7], /* Non Private Use High Surrogate */ + [0xd8a8, 0xd8a8], /* Non Private Use High Surrogate */ + [0xd8a9, 0xd8a9], /* Non Private Use High Surrogate */ + [0xd8aa, 0xd8aa], /* Non Private Use High Surrogate */ + [0xd8ab, 0xd8ab], /* Non Private Use High Surrogate */ + [0xd8ac, 0xd8ac], /* Non Private Use High Surrogate */ + [0xd8ad, 0xd8ad], /* Non Private Use High Surrogate */ + [0xd8ae, 0xd8ae], /* Non Private Use High Surrogate */ + [0xd8af, 0xd8af], /* Non Private Use High Surrogate */ + [0xd8b0, 0xd8b0], /* Non Private Use High Surrogate */ + [0xd8b1, 0xd8b1], /* Non Private Use High Surrogate */ + [0xd8b2, 0xd8b2], /* Non Private Use High Surrogate */ + [0xd8b3, 0xd8b3], /* Non Private Use High Surrogate */ + [0xd8b4, 0xd8b4], /* Non Private Use High Surrogate */ + [0xd8b5, 0xd8b5], /* Non Private Use High Surrogate */ + [0xd8b6, 0xd8b6], /* Non Private Use High Surrogate */ + [0xd8b7, 0xd8b7], /* Non Private Use High Surrogate */ + [0xd8b8, 0xd8b8], /* Non Private Use High Surrogate */ + [0xd8b9, 0xd8b9], /* Non Private Use High Surrogate */ + [0xd8ba, 0xd8ba], /* Non Private Use High Surrogate */ + [0xd8bb, 0xd8bb], /* Non Private Use High Surrogate */ + [0xd8bc, 0xd8bc], /* Non Private Use High Surrogate */ + [0xd8bd, 0xd8bd], /* Non Private Use High Surrogate */ + [0xd8be, 0xd8be], /* Non Private Use High Surrogate */ + [0xd8bf, 0xd8bf], /* Non Private Use High Surrogate */ + [0xd8c0, 0xd8c0], /* Non Private Use High Surrogate */ + [0xd8c1, 0xd8c1], /* Non Private Use High Surrogate */ + [0xd8c2, 0xd8c2], /* Non Private Use High Surrogate */ + [0xd8c3, 0xd8c3], /* Non Private Use High Surrogate */ + [0xd8c4, 0xd8c4], /* Non Private Use High Surrogate */ + [0xd8c5, 0xd8c5], /* Non Private Use High Surrogate */ + [0xd8c6, 0xd8c6], /* Non Private Use High Surrogate */ + [0xd8c7, 0xd8c7], /* Non Private Use High Surrogate */ + [0xd8c8, 0xd8c8], /* Non Private Use High Surrogate */ + [0xd8c9, 0xd8c9], /* Non Private Use High Surrogate */ + [0xd8ca, 0xd8ca], /* Non Private Use High Surrogate */ + [0xd8cb, 0xd8cb], /* Non Private Use High Surrogate */ + [0xd8cc, 0xd8cc], /* Non Private Use High Surrogate */ + [0xd8cd, 0xd8cd], /* Non Private Use High Surrogate */ + [0xd8ce, 0xd8ce], /* Non Private Use High Surrogate */ + [0xd8cf, 0xd8cf], /* Non Private Use High Surrogate */ + [0xd8d0, 0xd8d0], /* Non Private Use High Surrogate */ + [0xd8d1, 0xd8d1], /* Non Private Use High Surrogate */ + [0xd8d2, 0xd8d2], /* Non Private Use High Surrogate */ + [0xd8d3, 0xd8d3], /* Non Private Use High Surrogate */ + [0xd8d4, 0xd8d4], /* Non Private Use High Surrogate */ + [0xd8d5, 0xd8d5], /* Non Private Use High Surrogate */ + [0xd8d6, 0xd8d6], /* Non Private Use High Surrogate */ + [0xd8d7, 0xd8d7], /* Non Private Use High Surrogate */ + [0xd8d8, 0xd8d8], /* Non Private Use High Surrogate */ + [0xd8d9, 0xd8d9], /* Non Private Use High Surrogate */ + [0xd8da, 0xd8da], /* Non Private Use High Surrogate */ + [0xd8db, 0xd8db], /* Non Private Use High Surrogate */ + [0xd8dc, 0xd8dc], /* Non Private Use High Surrogate */ + [0xd8dd, 0xd8dd], /* Non Private Use High Surrogate */ + [0xd8de, 0xd8de], /* Non Private Use High Surrogate */ + [0xd8df, 0xd8df], /* Non Private Use High Surrogate */ + [0xd8e0, 0xd8e0], /* Non Private Use High Surrogate */ + [0xd8e1, 0xd8e1], /* Non Private Use High Surrogate */ + [0xd8e2, 0xd8e2], /* Non Private Use High Surrogate */ + [0xd8e3, 0xd8e3], /* Non Private Use High Surrogate */ + [0xd8e4, 0xd8e4], /* Non Private Use High Surrogate */ + [0xd8e5, 0xd8e5], /* Non Private Use High Surrogate */ + [0xd8e6, 0xd8e6], /* Non Private Use High Surrogate */ + [0xd8e7, 0xd8e7], /* Non Private Use High Surrogate */ + [0xd8e8, 0xd8e8], /* Non Private Use High Surrogate */ + [0xd8e9, 0xd8e9], /* Non Private Use High Surrogate */ + [0xd8ea, 0xd8ea], /* Non Private Use High Surrogate */ + [0xd8eb, 0xd8eb], /* Non Private Use High Surrogate */ + [0xd8ec, 0xd8ec], /* Non Private Use High Surrogate */ + [0xd8ed, 0xd8ed], /* Non Private Use High Surrogate */ + [0xd8ee, 0xd8ee], /* Non Private Use High Surrogate */ + [0xd8ef, 0xd8ef], /* Non Private Use High Surrogate */ + [0xd8f0, 0xd8f0], /* Non Private Use High Surrogate */ + [0xd8f1, 0xd8f1], /* Non Private Use High Surrogate */ + [0xd8f2, 0xd8f2], /* Non Private Use High Surrogate */ + [0xd8f3, 0xd8f3], /* Non Private Use High Surrogate */ + [0xd8f4, 0xd8f4], /* Non Private Use High Surrogate */ + [0xd8f5, 0xd8f5], /* Non Private Use High Surrogate */ + [0xd8f6, 0xd8f6], /* Non Private Use High Surrogate */ + [0xd8f7, 0xd8f7], /* Non Private Use High Surrogate */ + [0xd8f8, 0xd8f8], /* Non Private Use High Surrogate */ + [0xd8f9, 0xd8f9], /* Non Private Use High Surrogate */ + [0xd8fa, 0xd8fa], /* Non Private Use High Surrogate */ + [0xd8fb, 0xd8fb], /* Non Private Use High Surrogate */ + [0xd8fc, 0xd8fc], /* Non Private Use High Surrogate */ + [0xd8fd, 0xd8fd], /* Non Private Use High Surrogate */ + [0xd8fe, 0xd8fe], /* Non Private Use High Surrogate */ + [0xd8ff, 0xd8ff], /* Non Private Use High Surrogate */ + [0xd900, 0xd900], /* Non Private Use High Surrogate */ + [0xd901, 0xd901], /* Non Private Use High Surrogate */ + [0xd902, 0xd902], /* Non Private Use High Surrogate */ + [0xd903, 0xd903], /* Non Private Use High Surrogate */ + [0xd904, 0xd904], /* Non Private Use High Surrogate */ + [0xd905, 0xd905], /* Non Private Use High Surrogate */ + [0xd906, 0xd906], /* Non Private Use High Surrogate */ + [0xd907, 0xd907], /* Non Private Use High Surrogate */ + [0xd908, 0xd908], /* Non Private Use High Surrogate */ + [0xd909, 0xd909], /* Non Private Use High Surrogate */ + [0xd90a, 0xd90a], /* Non Private Use High Surrogate */ + [0xd90b, 0xd90b], /* Non Private Use High Surrogate */ + [0xd90c, 0xd90c], /* Non Private Use High Surrogate */ + [0xd90d, 0xd90d], /* Non Private Use High Surrogate */ + [0xd90e, 0xd90e], /* Non Private Use High Surrogate */ + [0xd90f, 0xd90f], /* Non Private Use High Surrogate */ + [0xd910, 0xd910], /* Non Private Use High Surrogate */ + [0xd911, 0xd911], /* Non Private Use High Surrogate */ + [0xd912, 0xd912], /* Non Private Use High Surrogate */ + [0xd913, 0xd913], /* Non Private Use High Surrogate */ + [0xd914, 0xd914], /* Non Private Use High Surrogate */ + [0xd915, 0xd915], /* Non Private Use High Surrogate */ + [0xd916, 0xd916], /* Non Private Use High Surrogate */ + [0xd917, 0xd917], /* Non Private Use High Surrogate */ + [0xd918, 0xd918], /* Non Private Use High Surrogate */ + [0xd919, 0xd919], /* Non Private Use High Surrogate */ + [0xd91a, 0xd91a], /* Non Private Use High Surrogate */ + [0xd91b, 0xd91b], /* Non Private Use High Surrogate */ + [0xd91c, 0xd91c], /* Non Private Use High Surrogate */ + [0xd91d, 0xd91d], /* Non Private Use High Surrogate */ + [0xd91e, 0xd91e], /* Non Private Use High Surrogate */ + [0xd91f, 0xd91f], /* Non Private Use High Surrogate */ + [0xd920, 0xd920], /* Non Private Use High Surrogate */ + [0xd921, 0xd921], /* Non Private Use High Surrogate */ + [0xd922, 0xd922], /* Non Private Use High Surrogate */ + [0xd923, 0xd923], /* Non Private Use High Surrogate */ + [0xd924, 0xd924], /* Non Private Use High Surrogate */ + [0xd925, 0xd925], /* Non Private Use High Surrogate */ + [0xd926, 0xd926], /* Non Private Use High Surrogate */ + [0xd927, 0xd927], /* Non Private Use High Surrogate */ + [0xd928, 0xd928], /* Non Private Use High Surrogate */ + [0xd929, 0xd929], /* Non Private Use High Surrogate */ + [0xd92a, 0xd92a], /* Non Private Use High Surrogate */ + [0xd92b, 0xd92b], /* Non Private Use High Surrogate */ + [0xd92c, 0xd92c], /* Non Private Use High Surrogate */ + [0xd92d, 0xd92d], /* Non Private Use High Surrogate */ + [0xd92e, 0xd92e], /* Non Private Use High Surrogate */ + [0xd92f, 0xd92f], /* Non Private Use High Surrogate */ + [0xd930, 0xd930], /* Non Private Use High Surrogate */ + [0xd931, 0xd931], /* Non Private Use High Surrogate */ + [0xd932, 0xd932], /* Non Private Use High Surrogate */ + [0xd933, 0xd933], /* Non Private Use High Surrogate */ + [0xd934, 0xd934], /* Non Private Use High Surrogate */ + [0xd935, 0xd935], /* Non Private Use High Surrogate */ + [0xd936, 0xd936], /* Non Private Use High Surrogate */ + [0xd937, 0xd937], /* Non Private Use High Surrogate */ + [0xd938, 0xd938], /* Non Private Use High Surrogate */ + [0xd939, 0xd939], /* Non Private Use High Surrogate */ + [0xd93a, 0xd93a], /* Non Private Use High Surrogate */ + [0xd93b, 0xd93b], /* Non Private Use High Surrogate */ + [0xd93c, 0xd93c], /* Non Private Use High Surrogate */ + [0xd93d, 0xd93d], /* Non Private Use High Surrogate */ + [0xd93e, 0xd93e], /* Non Private Use High Surrogate */ + [0xd93f, 0xd93f], /* Non Private Use High Surrogate */ + [0xd940, 0xd940], /* Non Private Use High Surrogate */ + [0xd941, 0xd941], /* Non Private Use High Surrogate */ + [0xd942, 0xd942], /* Non Private Use High Surrogate */ + [0xd943, 0xd943], /* Non Private Use High Surrogate */ + [0xd944, 0xd944], /* Non Private Use High Surrogate */ + [0xd945, 0xd945], /* Non Private Use High Surrogate */ + [0xd946, 0xd946], /* Non Private Use High Surrogate */ + [0xd947, 0xd947], /* Non Private Use High Surrogate */ + [0xd948, 0xd948], /* Non Private Use High Surrogate */ + [0xd949, 0xd949], /* Non Private Use High Surrogate */ + [0xd94a, 0xd94a], /* Non Private Use High Surrogate */ + [0xd94b, 0xd94b], /* Non Private Use High Surrogate */ + [0xd94c, 0xd94c], /* Non Private Use High Surrogate */ + [0xd94d, 0xd94d], /* Non Private Use High Surrogate */ + [0xd94e, 0xd94e], /* Non Private Use High Surrogate */ + [0xd94f, 0xd94f], /* Non Private Use High Surrogate */ + [0xd950, 0xd950], /* Non Private Use High Surrogate */ + [0xd951, 0xd951], /* Non Private Use High Surrogate */ + [0xd952, 0xd952], /* Non Private Use High Surrogate */ + [0xd953, 0xd953], /* Non Private Use High Surrogate */ + [0xd954, 0xd954], /* Non Private Use High Surrogate */ + [0xd955, 0xd955], /* Non Private Use High Surrogate */ + [0xd956, 0xd956], /* Non Private Use High Surrogate */ + [0xd957, 0xd957], /* Non Private Use High Surrogate */ + [0xd958, 0xd958], /* Non Private Use High Surrogate */ + [0xd959, 0xd959], /* Non Private Use High Surrogate */ + [0xd95a, 0xd95a], /* Non Private Use High Surrogate */ + [0xd95b, 0xd95b], /* Non Private Use High Surrogate */ + [0xd95c, 0xd95c], /* Non Private Use High Surrogate */ + [0xd95d, 0xd95d], /* Non Private Use High Surrogate */ + [0xd95e, 0xd95e], /* Non Private Use High Surrogate */ + [0xd95f, 0xd95f], /* Non Private Use High Surrogate */ + [0xd960, 0xd960], /* Non Private Use High Surrogate */ + [0xd961, 0xd961], /* Non Private Use High Surrogate */ + [0xd962, 0xd962], /* Non Private Use High Surrogate */ + [0xd963, 0xd963], /* Non Private Use High Surrogate */ + [0xd964, 0xd964], /* Non Private Use High Surrogate */ + [0xd965, 0xd965], /* Non Private Use High Surrogate */ + [0xd966, 0xd966], /* Non Private Use High Surrogate */ + [0xd967, 0xd967], /* Non Private Use High Surrogate */ + [0xd968, 0xd968], /* Non Private Use High Surrogate */ + [0xd969, 0xd969], /* Non Private Use High Surrogate */ + [0xd96a, 0xd96a], /* Non Private Use High Surrogate */ + [0xd96b, 0xd96b], /* Non Private Use High Surrogate */ + [0xd96c, 0xd96c], /* Non Private Use High Surrogate */ + [0xd96d, 0xd96d], /* Non Private Use High Surrogate */ + [0xd96e, 0xd96e], /* Non Private Use High Surrogate */ + [0xd96f, 0xd96f], /* Non Private Use High Surrogate */ + [0xd970, 0xd970], /* Non Private Use High Surrogate */ + [0xd971, 0xd971], /* Non Private Use High Surrogate */ + [0xd972, 0xd972], /* Non Private Use High Surrogate */ + [0xd973, 0xd973], /* Non Private Use High Surrogate */ + [0xd974, 0xd974], /* Non Private Use High Surrogate */ + [0xd975, 0xd975], /* Non Private Use High Surrogate */ + [0xd976, 0xd976], /* Non Private Use High Surrogate */ + [0xd977, 0xd977], /* Non Private Use High Surrogate */ + [0xd978, 0xd978], /* Non Private Use High Surrogate */ + [0xd979, 0xd979], /* Non Private Use High Surrogate */ + [0xd97a, 0xd97a], /* Non Private Use High Surrogate */ + [0xd97b, 0xd97b], /* Non Private Use High Surrogate */ + [0xd97c, 0xd97c], /* Non Private Use High Surrogate */ + [0xd97d, 0xd97d], /* Non Private Use High Surrogate */ + [0xd97e, 0xd97e], /* Non Private Use High Surrogate */ + [0xd97f, 0xd97f], /* Non Private Use High Surrogate */ + [0xd980, 0xd980], /* Non Private Use High Surrogate */ + [0xd981, 0xd981], /* Non Private Use High Surrogate */ + [0xd982, 0xd982], /* Non Private Use High Surrogate */ + [0xd983, 0xd983], /* Non Private Use High Surrogate */ + [0xd984, 0xd984], /* Non Private Use High Surrogate */ + [0xd985, 0xd985], /* Non Private Use High Surrogate */ + [0xd986, 0xd986], /* Non Private Use High Surrogate */ + [0xd987, 0xd987], /* Non Private Use High Surrogate */ + [0xd988, 0xd988], /* Non Private Use High Surrogate */ + [0xd989, 0xd989], /* Non Private Use High Surrogate */ + [0xd98a, 0xd98a], /* Non Private Use High Surrogate */ + [0xd98b, 0xd98b], /* Non Private Use High Surrogate */ + [0xd98c, 0xd98c], /* Non Private Use High Surrogate */ + [0xd98d, 0xd98d], /* Non Private Use High Surrogate */ + [0xd98e, 0xd98e], /* Non Private Use High Surrogate */ + [0xd98f, 0xd98f], /* Non Private Use High Surrogate */ + [0xd990, 0xd990], /* Non Private Use High Surrogate */ + [0xd991, 0xd991], /* Non Private Use High Surrogate */ + [0xd992, 0xd992], /* Non Private Use High Surrogate */ + [0xd993, 0xd993], /* Non Private Use High Surrogate */ + [0xd994, 0xd994], /* Non Private Use High Surrogate */ + [0xd995, 0xd995], /* Non Private Use High Surrogate */ + [0xd996, 0xd996], /* Non Private Use High Surrogate */ + [0xd997, 0xd997], /* Non Private Use High Surrogate */ + [0xd998, 0xd998], /* Non Private Use High Surrogate */ + [0xd999, 0xd999], /* Non Private Use High Surrogate */ + [0xd99a, 0xd99a], /* Non Private Use High Surrogate */ + [0xd99b, 0xd99b], /* Non Private Use High Surrogate */ + [0xd99c, 0xd99c], /* Non Private Use High Surrogate */ + [0xd99d, 0xd99d], /* Non Private Use High Surrogate */ + [0xd99e, 0xd99e], /* Non Private Use High Surrogate */ + [0xd99f, 0xd99f], /* Non Private Use High Surrogate */ + [0xd9a0, 0xd9a0], /* Non Private Use High Surrogate */ + [0xd9a1, 0xd9a1], /* Non Private Use High Surrogate */ + [0xd9a2, 0xd9a2], /* Non Private Use High Surrogate */ + [0xd9a3, 0xd9a3], /* Non Private Use High Surrogate */ + [0xd9a4, 0xd9a4], /* Non Private Use High Surrogate */ + [0xd9a5, 0xd9a5], /* Non Private Use High Surrogate */ + [0xd9a6, 0xd9a6], /* Non Private Use High Surrogate */ + [0xd9a7, 0xd9a7], /* Non Private Use High Surrogate */ + [0xd9a8, 0xd9a8], /* Non Private Use High Surrogate */ + [0xd9a9, 0xd9a9], /* Non Private Use High Surrogate */ + [0xd9aa, 0xd9aa], /* Non Private Use High Surrogate */ + [0xd9ab, 0xd9ab], /* Non Private Use High Surrogate */ + [0xd9ac, 0xd9ac], /* Non Private Use High Surrogate */ + [0xd9ad, 0xd9ad], /* Non Private Use High Surrogate */ + [0xd9ae, 0xd9ae], /* Non Private Use High Surrogate */ + [0xd9af, 0xd9af], /* Non Private Use High Surrogate */ + [0xd9b0, 0xd9b0], /* Non Private Use High Surrogate */ + [0xd9b1, 0xd9b1], /* Non Private Use High Surrogate */ + [0xd9b2, 0xd9b2], /* Non Private Use High Surrogate */ + [0xd9b3, 0xd9b3], /* Non Private Use High Surrogate */ + [0xd9b4, 0xd9b4], /* Non Private Use High Surrogate */ + [0xd9b5, 0xd9b5], /* Non Private Use High Surrogate */ + [0xd9b6, 0xd9b6], /* Non Private Use High Surrogate */ + [0xd9b7, 0xd9b7], /* Non Private Use High Surrogate */ + [0xd9b8, 0xd9b8], /* Non Private Use High Surrogate */ + [0xd9b9, 0xd9b9], /* Non Private Use High Surrogate */ + [0xd9ba, 0xd9ba], /* Non Private Use High Surrogate */ + [0xd9bb, 0xd9bb], /* Non Private Use High Surrogate */ + [0xd9bc, 0xd9bc], /* Non Private Use High Surrogate */ + [0xd9bd, 0xd9bd], /* Non Private Use High Surrogate */ + [0xd9be, 0xd9be], /* Non Private Use High Surrogate */ + [0xd9bf, 0xd9bf], /* Non Private Use High Surrogate */ + [0xd9c0, 0xd9c0], /* Non Private Use High Surrogate */ + [0xd9c1, 0xd9c1], /* Non Private Use High Surrogate */ + [0xd9c2, 0xd9c2], /* Non Private Use High Surrogate */ + [0xd9c3, 0xd9c3], /* Non Private Use High Surrogate */ + [0xd9c4, 0xd9c4], /* Non Private Use High Surrogate */ + [0xd9c5, 0xd9c5], /* Non Private Use High Surrogate */ + [0xd9c6, 0xd9c6], /* Non Private Use High Surrogate */ + [0xd9c7, 0xd9c7], /* Non Private Use High Surrogate */ + [0xd9c8, 0xd9c8], /* Non Private Use High Surrogate */ + [0xd9c9, 0xd9c9], /* Non Private Use High Surrogate */ + [0xd9ca, 0xd9ca], /* Non Private Use High Surrogate */ + [0xd9cb, 0xd9cb], /* Non Private Use High Surrogate */ + [0xd9cc, 0xd9cc], /* Non Private Use High Surrogate */ + [0xd9cd, 0xd9cd], /* Non Private Use High Surrogate */ + [0xd9ce, 0xd9ce], /* Non Private Use High Surrogate */ + [0xd9cf, 0xd9cf], /* Non Private Use High Surrogate */ + [0xd9d0, 0xd9d0], /* Non Private Use High Surrogate */ + [0xd9d1, 0xd9d1], /* Non Private Use High Surrogate */ + [0xd9d2, 0xd9d2], /* Non Private Use High Surrogate */ + [0xd9d3, 0xd9d3], /* Non Private Use High Surrogate */ + [0xd9d4, 0xd9d4], /* Non Private Use High Surrogate */ + [0xd9d5, 0xd9d5], /* Non Private Use High Surrogate */ + [0xd9d6, 0xd9d6], /* Non Private Use High Surrogate */ + [0xd9d7, 0xd9d7], /* Non Private Use High Surrogate */ + [0xd9d8, 0xd9d8], /* Non Private Use High Surrogate */ + [0xd9d9, 0xd9d9], /* Non Private Use High Surrogate */ + [0xd9da, 0xd9da], /* Non Private Use High Surrogate */ + [0xd9db, 0xd9db], /* Non Private Use High Surrogate */ + [0xd9dc, 0xd9dc], /* Non Private Use High Surrogate */ + [0xd9dd, 0xd9dd], /* Non Private Use High Surrogate */ + [0xd9de, 0xd9de], /* Non Private Use High Surrogate */ + [0xd9df, 0xd9df], /* Non Private Use High Surrogate */ + [0xd9e0, 0xd9e0], /* Non Private Use High Surrogate */ + [0xd9e1, 0xd9e1], /* Non Private Use High Surrogate */ + [0xd9e2, 0xd9e2], /* Non Private Use High Surrogate */ + [0xd9e3, 0xd9e3], /* Non Private Use High Surrogate */ + [0xd9e4, 0xd9e4], /* Non Private Use High Surrogate */ + [0xd9e5, 0xd9e5], /* Non Private Use High Surrogate */ + [0xd9e6, 0xd9e6], /* Non Private Use High Surrogate */ + [0xd9e7, 0xd9e7], /* Non Private Use High Surrogate */ + [0xd9e8, 0xd9e8], /* Non Private Use High Surrogate */ + [0xd9e9, 0xd9e9], /* Non Private Use High Surrogate */ + [0xd9ea, 0xd9ea], /* Non Private Use High Surrogate */ + [0xd9eb, 0xd9eb], /* Non Private Use High Surrogate */ + [0xd9ec, 0xd9ec], /* Non Private Use High Surrogate */ + [0xd9ed, 0xd9ed], /* Non Private Use High Surrogate */ + [0xd9ee, 0xd9ee], /* Non Private Use High Surrogate */ + [0xd9ef, 0xd9ef], /* Non Private Use High Surrogate */ + [0xd9f0, 0xd9f0], /* Non Private Use High Surrogate */ + [0xd9f1, 0xd9f1], /* Non Private Use High Surrogate */ + [0xd9f2, 0xd9f2], /* Non Private Use High Surrogate */ + [0xd9f3, 0xd9f3], /* Non Private Use High Surrogate */ + [0xd9f4, 0xd9f4], /* Non Private Use High Surrogate */ + [0xd9f5, 0xd9f5], /* Non Private Use High Surrogate */ + [0xd9f6, 0xd9f6], /* Non Private Use High Surrogate */ + [0xd9f7, 0xd9f7], /* Non Private Use High Surrogate */ + [0xd9f8, 0xd9f8], /* Non Private Use High Surrogate */ + [0xd9f9, 0xd9f9], /* Non Private Use High Surrogate */ + [0xd9fa, 0xd9fa], /* Non Private Use High Surrogate */ + [0xd9fb, 0xd9fb], /* Non Private Use High Surrogate */ + [0xd9fc, 0xd9fc], /* Non Private Use High Surrogate */ + [0xd9fd, 0xd9fd], /* Non Private Use High Surrogate */ + [0xd9fe, 0xd9fe], /* Non Private Use High Surrogate */ + [0xd9ff, 0xd9ff], /* Non Private Use High Surrogate */ + [0xda00, 0xda00], /* Non Private Use High Surrogate */ + [0xda01, 0xda01], /* Non Private Use High Surrogate */ + [0xda02, 0xda02], /* Non Private Use High Surrogate */ + [0xda03, 0xda03], /* Non Private Use High Surrogate */ + [0xda04, 0xda04], /* Non Private Use High Surrogate */ + [0xda05, 0xda05], /* Non Private Use High Surrogate */ + [0xda06, 0xda06], /* Non Private Use High Surrogate */ + [0xda07, 0xda07], /* Non Private Use High Surrogate */ + [0xda08, 0xda08], /* Non Private Use High Surrogate */ + [0xda09, 0xda09], /* Non Private Use High Surrogate */ + [0xda0a, 0xda0a], /* Non Private Use High Surrogate */ + [0xda0b, 0xda0b], /* Non Private Use High Surrogate */ + [0xda0c, 0xda0c], /* Non Private Use High Surrogate */ + [0xda0d, 0xda0d], /* Non Private Use High Surrogate */ + [0xda0e, 0xda0e], /* Non Private Use High Surrogate */ + [0xda0f, 0xda0f], /* Non Private Use High Surrogate */ + [0xda10, 0xda10], /* Non Private Use High Surrogate */ + [0xda11, 0xda11], /* Non Private Use High Surrogate */ + [0xda12, 0xda12], /* Non Private Use High Surrogate */ + [0xda13, 0xda13], /* Non Private Use High Surrogate */ + [0xda14, 0xda14], /* Non Private Use High Surrogate */ + [0xda15, 0xda15], /* Non Private Use High Surrogate */ + [0xda16, 0xda16], /* Non Private Use High Surrogate */ + [0xda17, 0xda17], /* Non Private Use High Surrogate */ + [0xda18, 0xda18], /* Non Private Use High Surrogate */ + [0xda19, 0xda19], /* Non Private Use High Surrogate */ + [0xda1a, 0xda1a], /* Non Private Use High Surrogate */ + [0xda1b, 0xda1b], /* Non Private Use High Surrogate */ + [0xda1c, 0xda1c], /* Non Private Use High Surrogate */ + [0xda1d, 0xda1d], /* Non Private Use High Surrogate */ + [0xda1e, 0xda1e], /* Non Private Use High Surrogate */ + [0xda1f, 0xda1f], /* Non Private Use High Surrogate */ + [0xda20, 0xda20], /* Non Private Use High Surrogate */ + [0xda21, 0xda21], /* Non Private Use High Surrogate */ + [0xda22, 0xda22], /* Non Private Use High Surrogate */ + [0xda23, 0xda23], /* Non Private Use High Surrogate */ + [0xda24, 0xda24], /* Non Private Use High Surrogate */ + [0xda25, 0xda25], /* Non Private Use High Surrogate */ + [0xda26, 0xda26], /* Non Private Use High Surrogate */ + [0xda27, 0xda27], /* Non Private Use High Surrogate */ + [0xda28, 0xda28], /* Non Private Use High Surrogate */ + [0xda29, 0xda29], /* Non Private Use High Surrogate */ + [0xda2a, 0xda2a], /* Non Private Use High Surrogate */ + [0xda2b, 0xda2b], /* Non Private Use High Surrogate */ + [0xda2c, 0xda2c], /* Non Private Use High Surrogate */ + [0xda2d, 0xda2d], /* Non Private Use High Surrogate */ + [0xda2e, 0xda2e], /* Non Private Use High Surrogate */ + [0xda2f, 0xda2f], /* Non Private Use High Surrogate */ + [0xda30, 0xda30], /* Non Private Use High Surrogate */ + [0xda31, 0xda31], /* Non Private Use High Surrogate */ + [0xda32, 0xda32], /* Non Private Use High Surrogate */ + [0xda33, 0xda33], /* Non Private Use High Surrogate */ + [0xda34, 0xda34], /* Non Private Use High Surrogate */ + [0xda35, 0xda35], /* Non Private Use High Surrogate */ + [0xda36, 0xda36], /* Non Private Use High Surrogate */ + [0xda37, 0xda37], /* Non Private Use High Surrogate */ + [0xda38, 0xda38], /* Non Private Use High Surrogate */ + [0xda39, 0xda39], /* Non Private Use High Surrogate */ + [0xda3a, 0xda3a], /* Non Private Use High Surrogate */ + [0xda3b, 0xda3b], /* Non Private Use High Surrogate */ + [0xda3c, 0xda3c], /* Non Private Use High Surrogate */ + [0xda3d, 0xda3d], /* Non Private Use High Surrogate */ + [0xda3e, 0xda3e], /* Non Private Use High Surrogate */ + [0xda3f, 0xda3f], /* Non Private Use High Surrogate */ + [0xda40, 0xda40], /* Non Private Use High Surrogate */ + [0xda41, 0xda41], /* Non Private Use High Surrogate */ + [0xda42, 0xda42], /* Non Private Use High Surrogate */ + [0xda43, 0xda43], /* Non Private Use High Surrogate */ + [0xda44, 0xda44], /* Non Private Use High Surrogate */ + [0xda45, 0xda45], /* Non Private Use High Surrogate */ + [0xda46, 0xda46], /* Non Private Use High Surrogate */ + [0xda47, 0xda47], /* Non Private Use High Surrogate */ + [0xda48, 0xda48], /* Non Private Use High Surrogate */ + [0xda49, 0xda49], /* Non Private Use High Surrogate */ + [0xda4a, 0xda4a], /* Non Private Use High Surrogate */ + [0xda4b, 0xda4b], /* Non Private Use High Surrogate */ + [0xda4c, 0xda4c], /* Non Private Use High Surrogate */ + [0xda4d, 0xda4d], /* Non Private Use High Surrogate */ + [0xda4e, 0xda4e], /* Non Private Use High Surrogate */ + [0xda4f, 0xda4f], /* Non Private Use High Surrogate */ + [0xda50, 0xda50], /* Non Private Use High Surrogate */ + [0xda51, 0xda51], /* Non Private Use High Surrogate */ + [0xda52, 0xda52], /* Non Private Use High Surrogate */ + [0xda53, 0xda53], /* Non Private Use High Surrogate */ + [0xda54, 0xda54], /* Non Private Use High Surrogate */ + [0xda55, 0xda55], /* Non Private Use High Surrogate */ + [0xda56, 0xda56], /* Non Private Use High Surrogate */ + [0xda57, 0xda57], /* Non Private Use High Surrogate */ + [0xda58, 0xda58], /* Non Private Use High Surrogate */ + [0xda59, 0xda59], /* Non Private Use High Surrogate */ + [0xda5a, 0xda5a], /* Non Private Use High Surrogate */ + [0xda5b, 0xda5b], /* Non Private Use High Surrogate */ + [0xda5c, 0xda5c], /* Non Private Use High Surrogate */ + [0xda5d, 0xda5d], /* Non Private Use High Surrogate */ + [0xda5e, 0xda5e], /* Non Private Use High Surrogate */ + [0xda5f, 0xda5f], /* Non Private Use High Surrogate */ + [0xda60, 0xda60], /* Non Private Use High Surrogate */ + [0xda61, 0xda61], /* Non Private Use High Surrogate */ + [0xda62, 0xda62], /* Non Private Use High Surrogate */ + [0xda63, 0xda63], /* Non Private Use High Surrogate */ + [0xda64, 0xda64], /* Non Private Use High Surrogate */ + [0xda65, 0xda65], /* Non Private Use High Surrogate */ + [0xda66, 0xda66], /* Non Private Use High Surrogate */ + [0xda67, 0xda67], /* Non Private Use High Surrogate */ + [0xda68, 0xda68], /* Non Private Use High Surrogate */ + [0xda69, 0xda69], /* Non Private Use High Surrogate */ + [0xda6a, 0xda6a], /* Non Private Use High Surrogate */ + [0xda6b, 0xda6b], /* Non Private Use High Surrogate */ + [0xda6c, 0xda6c], /* Non Private Use High Surrogate */ + [0xda6d, 0xda6d], /* Non Private Use High Surrogate */ + [0xda6e, 0xda6e], /* Non Private Use High Surrogate */ + [0xda6f, 0xda6f], /* Non Private Use High Surrogate */ + [0xda70, 0xda70], /* Non Private Use High Surrogate */ + [0xda71, 0xda71], /* Non Private Use High Surrogate */ + [0xda72, 0xda72], /* Non Private Use High Surrogate */ + [0xda73, 0xda73], /* Non Private Use High Surrogate */ + [0xda74, 0xda74], /* Non Private Use High Surrogate */ + [0xda75, 0xda75], /* Non Private Use High Surrogate */ + [0xda76, 0xda76], /* Non Private Use High Surrogate */ + [0xda77, 0xda77], /* Non Private Use High Surrogate */ + [0xda78, 0xda78], /* Non Private Use High Surrogate */ + [0xda79, 0xda79], /* Non Private Use High Surrogate */ + [0xda7a, 0xda7a], /* Non Private Use High Surrogate */ + [0xda7b, 0xda7b], /* Non Private Use High Surrogate */ + [0xda7c, 0xda7c], /* Non Private Use High Surrogate */ + [0xda7d, 0xda7d], /* Non Private Use High Surrogate */ + [0xda7e, 0xda7e], /* Non Private Use High Surrogate */ + [0xda7f, 0xda7f], /* Non Private Use High Surrogate */ + [0xda80, 0xda80], /* Non Private Use High Surrogate */ + [0xda81, 0xda81], /* Non Private Use High Surrogate */ + [0xda82, 0xda82], /* Non Private Use High Surrogate */ + [0xda83, 0xda83], /* Non Private Use High Surrogate */ + [0xda84, 0xda84], /* Non Private Use High Surrogate */ + [0xda85, 0xda85], /* Non Private Use High Surrogate */ + [0xda86, 0xda86], /* Non Private Use High Surrogate */ + [0xda87, 0xda87], /* Non Private Use High Surrogate */ + [0xda88, 0xda88], /* Non Private Use High Surrogate */ + [0xda89, 0xda89], /* Non Private Use High Surrogate */ + [0xda8a, 0xda8a], /* Non Private Use High Surrogate */ + [0xda8b, 0xda8b], /* Non Private Use High Surrogate */ + [0xda8c, 0xda8c], /* Non Private Use High Surrogate */ + [0xda8d, 0xda8d], /* Non Private Use High Surrogate */ + [0xda8e, 0xda8e], /* Non Private Use High Surrogate */ + [0xda8f, 0xda8f], /* Non Private Use High Surrogate */ + [0xda90, 0xda90], /* Non Private Use High Surrogate */ + [0xda91, 0xda91], /* Non Private Use High Surrogate */ + [0xda92, 0xda92], /* Non Private Use High Surrogate */ + [0xda93, 0xda93], /* Non Private Use High Surrogate */ + [0xda94, 0xda94], /* Non Private Use High Surrogate */ + [0xda95, 0xda95], /* Non Private Use High Surrogate */ + [0xda96, 0xda96], /* Non Private Use High Surrogate */ + [0xda97, 0xda97], /* Non Private Use High Surrogate */ + [0xda98, 0xda98], /* Non Private Use High Surrogate */ + [0xda99, 0xda99], /* Non Private Use High Surrogate */ + [0xda9a, 0xda9a], /* Non Private Use High Surrogate */ + [0xda9b, 0xda9b], /* Non Private Use High Surrogate */ + [0xda9c, 0xda9c], /* Non Private Use High Surrogate */ + [0xda9d, 0xda9d], /* Non Private Use High Surrogate */ + [0xda9e, 0xda9e], /* Non Private Use High Surrogate */ + [0xda9f, 0xda9f], /* Non Private Use High Surrogate */ + [0xdaa0, 0xdaa0], /* Non Private Use High Surrogate */ + [0xdaa1, 0xdaa1], /* Non Private Use High Surrogate */ + [0xdaa2, 0xdaa2], /* Non Private Use High Surrogate */ + [0xdaa3, 0xdaa3], /* Non Private Use High Surrogate */ + [0xdaa4, 0xdaa4], /* Non Private Use High Surrogate */ + [0xdaa5, 0xdaa5], /* Non Private Use High Surrogate */ + [0xdaa6, 0xdaa6], /* Non Private Use High Surrogate */ + [0xdaa7, 0xdaa7], /* Non Private Use High Surrogate */ + [0xdaa8, 0xdaa8], /* Non Private Use High Surrogate */ + [0xdaa9, 0xdaa9], /* Non Private Use High Surrogate */ + [0xdaaa, 0xdaaa], /* Non Private Use High Surrogate */ + [0xdaab, 0xdaab], /* Non Private Use High Surrogate */ + [0xdaac, 0xdaac], /* Non Private Use High Surrogate */ + [0xdaad, 0xdaad], /* Non Private Use High Surrogate */ + [0xdaae, 0xdaae], /* Non Private Use High Surrogate */ + [0xdaaf, 0xdaaf], /* Non Private Use High Surrogate */ + [0xdab0, 0xdab0], /* Non Private Use High Surrogate */ + [0xdab1, 0xdab1], /* Non Private Use High Surrogate */ + [0xdab2, 0xdab2], /* Non Private Use High Surrogate */ + [0xdab3, 0xdab3], /* Non Private Use High Surrogate */ + [0xdab4, 0xdab4], /* Non Private Use High Surrogate */ + [0xdab5, 0xdab5], /* Non Private Use High Surrogate */ + [0xdab6, 0xdab6], /* Non Private Use High Surrogate */ + [0xdab7, 0xdab7], /* Non Private Use High Surrogate */ + [0xdab8, 0xdab8], /* Non Private Use High Surrogate */ + [0xdab9, 0xdab9], /* Non Private Use High Surrogate */ + [0xdaba, 0xdaba], /* Non Private Use High Surrogate */ + [0xdabb, 0xdabb], /* Non Private Use High Surrogate */ + [0xdabc, 0xdabc], /* Non Private Use High Surrogate */ + [0xdabd, 0xdabd], /* Non Private Use High Surrogate */ + [0xdabe, 0xdabe], /* Non Private Use High Surrogate */ + [0xdabf, 0xdabf], /* Non Private Use High Surrogate */ + [0xdac0, 0xdac0], /* Non Private Use High Surrogate */ + [0xdac1, 0xdac1], /* Non Private Use High Surrogate */ + [0xdac2, 0xdac2], /* Non Private Use High Surrogate */ + [0xdac3, 0xdac3], /* Non Private Use High Surrogate */ + [0xdac4, 0xdac4], /* Non Private Use High Surrogate */ + [0xdac5, 0xdac5], /* Non Private Use High Surrogate */ + [0xdac6, 0xdac6], /* Non Private Use High Surrogate */ + [0xdac7, 0xdac7], /* Non Private Use High Surrogate */ + [0xdac8, 0xdac8], /* Non Private Use High Surrogate */ + [0xdac9, 0xdac9], /* Non Private Use High Surrogate */ + [0xdaca, 0xdaca], /* Non Private Use High Surrogate */ + [0xdacb, 0xdacb], /* Non Private Use High Surrogate */ + [0xdacc, 0xdacc], /* Non Private Use High Surrogate */ + [0xdacd, 0xdacd], /* Non Private Use High Surrogate */ + [0xdace, 0xdace], /* Non Private Use High Surrogate */ + [0xdacf, 0xdacf], /* Non Private Use High Surrogate */ + [0xdad0, 0xdad0], /* Non Private Use High Surrogate */ + [0xdad1, 0xdad1], /* Non Private Use High Surrogate */ + [0xdad2, 0xdad2], /* Non Private Use High Surrogate */ + [0xdad3, 0xdad3], /* Non Private Use High Surrogate */ + [0xdad4, 0xdad4], /* Non Private Use High Surrogate */ + [0xdad5, 0xdad5], /* Non Private Use High Surrogate */ + [0xdad6, 0xdad6], /* Non Private Use High Surrogate */ + [0xdad7, 0xdad7], /* Non Private Use High Surrogate */ + [0xdad8, 0xdad8], /* Non Private Use High Surrogate */ + [0xdad9, 0xdad9], /* Non Private Use High Surrogate */ + [0xdada, 0xdada], /* Non Private Use High Surrogate */ + [0xdadb, 0xdadb], /* Non Private Use High Surrogate */ + [0xdadc, 0xdadc], /* Non Private Use High Surrogate */ + [0xdadd, 0xdadd], /* Non Private Use High Surrogate */ + [0xdade, 0xdade], /* Non Private Use High Surrogate */ + [0xdadf, 0xdadf], /* Non Private Use High Surrogate */ + [0xdae0, 0xdae0], /* Non Private Use High Surrogate */ + [0xdae1, 0xdae1], /* Non Private Use High Surrogate */ + [0xdae2, 0xdae2], /* Non Private Use High Surrogate */ + [0xdae3, 0xdae3], /* Non Private Use High Surrogate */ + [0xdae4, 0xdae4], /* Non Private Use High Surrogate */ + [0xdae5, 0xdae5], /* Non Private Use High Surrogate */ + [0xdae6, 0xdae6], /* Non Private Use High Surrogate */ + [0xdae7, 0xdae7], /* Non Private Use High Surrogate */ + [0xdae8, 0xdae8], /* Non Private Use High Surrogate */ + [0xdae9, 0xdae9], /* Non Private Use High Surrogate */ + [0xdaea, 0xdaea], /* Non Private Use High Surrogate */ + [0xdaeb, 0xdaeb], /* Non Private Use High Surrogate */ + [0xdaec, 0xdaec], /* Non Private Use High Surrogate */ + [0xdaed, 0xdaed], /* Non Private Use High Surrogate */ + [0xdaee, 0xdaee], /* Non Private Use High Surrogate */ + [0xdaef, 0xdaef], /* Non Private Use High Surrogate */ + [0xdaf0, 0xdaf0], /* Non Private Use High Surrogate */ + [0xdaf1, 0xdaf1], /* Non Private Use High Surrogate */ + [0xdaf2, 0xdaf2], /* Non Private Use High Surrogate */ + [0xdaf3, 0xdaf3], /* Non Private Use High Surrogate */ + [0xdaf4, 0xdaf4], /* Non Private Use High Surrogate */ + [0xdaf5, 0xdaf5], /* Non Private Use High Surrogate */ + [0xdaf6, 0xdaf6], /* Non Private Use High Surrogate */ + [0xdaf7, 0xdaf7], /* Non Private Use High Surrogate */ + [0xdaf8, 0xdaf8], /* Non Private Use High Surrogate */ + [0xdaf9, 0xdaf9], /* Non Private Use High Surrogate */ + [0xdafa, 0xdafa], /* Non Private Use High Surrogate */ + [0xdafb, 0xdafb], /* Non Private Use High Surrogate */ + [0xdafc, 0xdafc], /* Non Private Use High Surrogate */ + [0xdafd, 0xdafd], /* Non Private Use High Surrogate */ + [0xdafe, 0xdafe], /* Non Private Use High Surrogate */ + [0xdaff, 0xdaff], /* Non Private Use High Surrogate */ + [0xdb00, 0xdb00], /* Non Private Use High Surrogate */ + [0xdb01, 0xdb01], /* Non Private Use High Surrogate */ + [0xdb02, 0xdb02], /* Non Private Use High Surrogate */ + [0xdb03, 0xdb03], /* Non Private Use High Surrogate */ + [0xdb04, 0xdb04], /* Non Private Use High Surrogate */ + [0xdb05, 0xdb05], /* Non Private Use High Surrogate */ + [0xdb06, 0xdb06], /* Non Private Use High Surrogate */ + [0xdb07, 0xdb07], /* Non Private Use High Surrogate */ + [0xdb08, 0xdb08], /* Non Private Use High Surrogate */ + [0xdb09, 0xdb09], /* Non Private Use High Surrogate */ + [0xdb0a, 0xdb0a], /* Non Private Use High Surrogate */ + [0xdb0b, 0xdb0b], /* Non Private Use High Surrogate */ + [0xdb0c, 0xdb0c], /* Non Private Use High Surrogate */ + [0xdb0d, 0xdb0d], /* Non Private Use High Surrogate */ + [0xdb0e, 0xdb0e], /* Non Private Use High Surrogate */ + [0xdb0f, 0xdb0f], /* Non Private Use High Surrogate */ + [0xdb10, 0xdb10], /* Non Private Use High Surrogate */ + [0xdb11, 0xdb11], /* Non Private Use High Surrogate */ + [0xdb12, 0xdb12], /* Non Private Use High Surrogate */ + [0xdb13, 0xdb13], /* Non Private Use High Surrogate */ + [0xdb14, 0xdb14], /* Non Private Use High Surrogate */ + [0xdb15, 0xdb15], /* Non Private Use High Surrogate */ + [0xdb16, 0xdb16], /* Non Private Use High Surrogate */ + [0xdb17, 0xdb17], /* Non Private Use High Surrogate */ + [0xdb18, 0xdb18], /* Non Private Use High Surrogate */ + [0xdb19, 0xdb19], /* Non Private Use High Surrogate */ + [0xdb1a, 0xdb1a], /* Non Private Use High Surrogate */ + [0xdb1b, 0xdb1b], /* Non Private Use High Surrogate */ + [0xdb1c, 0xdb1c], /* Non Private Use High Surrogate */ + [0xdb1d, 0xdb1d], /* Non Private Use High Surrogate */ + [0xdb1e, 0xdb1e], /* Non Private Use High Surrogate */ + [0xdb1f, 0xdb1f], /* Non Private Use High Surrogate */ + [0xdb20, 0xdb20], /* Non Private Use High Surrogate */ + [0xdb21, 0xdb21], /* Non Private Use High Surrogate */ + [0xdb22, 0xdb22], /* Non Private Use High Surrogate */ + [0xdb23, 0xdb23], /* Non Private Use High Surrogate */ + [0xdb24, 0xdb24], /* Non Private Use High Surrogate */ + [0xdb25, 0xdb25], /* Non Private Use High Surrogate */ + [0xdb26, 0xdb26], /* Non Private Use High Surrogate */ + [0xdb27, 0xdb27], /* Non Private Use High Surrogate */ + [0xdb28, 0xdb28], /* Non Private Use High Surrogate */ + [0xdb29, 0xdb29], /* Non Private Use High Surrogate */ + [0xdb2a, 0xdb2a], /* Non Private Use High Surrogate */ + [0xdb2b, 0xdb2b], /* Non Private Use High Surrogate */ + [0xdb2c, 0xdb2c], /* Non Private Use High Surrogate */ + [0xdb2d, 0xdb2d], /* Non Private Use High Surrogate */ + [0xdb2e, 0xdb2e], /* Non Private Use High Surrogate */ + [0xdb2f, 0xdb2f], /* Non Private Use High Surrogate */ + [0xdb30, 0xdb30], /* Non Private Use High Surrogate */ + [0xdb31, 0xdb31], /* Non Private Use High Surrogate */ + [0xdb32, 0xdb32], /* Non Private Use High Surrogate */ + [0xdb33, 0xdb33], /* Non Private Use High Surrogate */ + [0xdb34, 0xdb34], /* Non Private Use High Surrogate */ + [0xdb35, 0xdb35], /* Non Private Use High Surrogate */ + [0xdb36, 0xdb36], /* Non Private Use High Surrogate */ + [0xdb37, 0xdb37], /* Non Private Use High Surrogate */ + [0xdb38, 0xdb38], /* Non Private Use High Surrogate */ + [0xdb39, 0xdb39], /* Non Private Use High Surrogate */ + [0xdb3a, 0xdb3a], /* Non Private Use High Surrogate */ + [0xdb3b, 0xdb3b], /* Non Private Use High Surrogate */ + [0xdb3c, 0xdb3c], /* Non Private Use High Surrogate */ + [0xdb3d, 0xdb3d], /* Non Private Use High Surrogate */ + [0xdb3e, 0xdb3e], /* Non Private Use High Surrogate */ + [0xdb3f, 0xdb3f], /* Non Private Use High Surrogate */ + [0xdb40, 0xdb40], /* Non Private Use High Surrogate */ + [0xdb41, 0xdb41], /* Non Private Use High Surrogate */ + [0xdb42, 0xdb42], /* Non Private Use High Surrogate */ + [0xdb43, 0xdb43], /* Non Private Use High Surrogate */ + [0xdb44, 0xdb44], /* Non Private Use High Surrogate */ + [0xdb45, 0xdb45], /* Non Private Use High Surrogate */ + [0xdb46, 0xdb46], /* Non Private Use High Surrogate */ + [0xdb47, 0xdb47], /* Non Private Use High Surrogate */ + [0xdb48, 0xdb48], /* Non Private Use High Surrogate */ + [0xdb49, 0xdb49], /* Non Private Use High Surrogate */ + [0xdb4a, 0xdb4a], /* Non Private Use High Surrogate */ + [0xdb4b, 0xdb4b], /* Non Private Use High Surrogate */ + [0xdb4c, 0xdb4c], /* Non Private Use High Surrogate */ + [0xdb4d, 0xdb4d], /* Non Private Use High Surrogate */ + [0xdb4e, 0xdb4e], /* Non Private Use High Surrogate */ + [0xdb4f, 0xdb4f], /* Non Private Use High Surrogate */ + [0xdb50, 0xdb50], /* Non Private Use High Surrogate */ + [0xdb51, 0xdb51], /* Non Private Use High Surrogate */ + [0xdb52, 0xdb52], /* Non Private Use High Surrogate */ + [0xdb53, 0xdb53], /* Non Private Use High Surrogate */ + [0xdb54, 0xdb54], /* Non Private Use High Surrogate */ + [0xdb55, 0xdb55], /* Non Private Use High Surrogate */ + [0xdb56, 0xdb56], /* Non Private Use High Surrogate */ + [0xdb57, 0xdb57], /* Non Private Use High Surrogate */ + [0xdb58, 0xdb58], /* Non Private Use High Surrogate */ + [0xdb59, 0xdb59], /* Non Private Use High Surrogate */ + [0xdb5a, 0xdb5a], /* Non Private Use High Surrogate */ + [0xdb5b, 0xdb5b], /* Non Private Use High Surrogate */ + [0xdb5c, 0xdb5c], /* Non Private Use High Surrogate */ + [0xdb5d, 0xdb5d], /* Non Private Use High Surrogate */ + [0xdb5e, 0xdb5e], /* Non Private Use High Surrogate */ + [0xdb5f, 0xdb5f], /* Non Private Use High Surrogate */ + [0xdb60, 0xdb60], /* Non Private Use High Surrogate */ + [0xdb61, 0xdb61], /* Non Private Use High Surrogate */ + [0xdb62, 0xdb62], /* Non Private Use High Surrogate */ + [0xdb63, 0xdb63], /* Non Private Use High Surrogate */ + [0xdb64, 0xdb64], /* Non Private Use High Surrogate */ + [0xdb65, 0xdb65], /* Non Private Use High Surrogate */ + [0xdb66, 0xdb66], /* Non Private Use High Surrogate */ + [0xdb67, 0xdb67], /* Non Private Use High Surrogate */ + [0xdb68, 0xdb68], /* Non Private Use High Surrogate */ + [0xdb69, 0xdb69], /* Non Private Use High Surrogate */ + [0xdb6a, 0xdb6a], /* Non Private Use High Surrogate */ + [0xdb6b, 0xdb6b], /* Non Private Use High Surrogate */ + [0xdb6c, 0xdb6c], /* Non Private Use High Surrogate */ + [0xdb6d, 0xdb6d], /* Non Private Use High Surrogate */ + [0xdb6e, 0xdb6e], /* Non Private Use High Surrogate */ + [0xdb6f, 0xdb6f], /* Non Private Use High Surrogate */ + [0xdb70, 0xdb70], /* Non Private Use High Surrogate */ + [0xdb71, 0xdb71], /* Non Private Use High Surrogate */ + [0xdb72, 0xdb72], /* Non Private Use High Surrogate */ + [0xdb73, 0xdb73], /* Non Private Use High Surrogate */ + [0xdb74, 0xdb74], /* Non Private Use High Surrogate */ + [0xdb75, 0xdb75], /* Non Private Use High Surrogate */ + [0xdb76, 0xdb76], /* Non Private Use High Surrogate */ + [0xdb77, 0xdb77], /* Non Private Use High Surrogate */ + [0xdb78, 0xdb78], /* Non Private Use High Surrogate */ + [0xdb79, 0xdb79], /* Non Private Use High Surrogate */ + [0xdb7a, 0xdb7a], /* Non Private Use High Surrogate */ + [0xdb7b, 0xdb7b], /* Non Private Use High Surrogate */ + [0xdb7c, 0xdb7c], /* Non Private Use High Surrogate */ + [0xdb7d, 0xdb7d], /* Non Private Use High Surrogate */ + [0xdb7e, 0xdb7e], /* Non Private Use High Surrogate */ + [0xdb7f, 0xdb7f], /* Non Private Use High Surrogate */ + [0xdb80, 0xdb80], /* Private Use High Surrogate */ + [0xdb81, 0xdb81], /* Private Use High Surrogate */ + [0xdb82, 0xdb82], /* Private Use High Surrogate */ + [0xdb83, 0xdb83], /* Private Use High Surrogate */ + [0xdb84, 0xdb84], /* Private Use High Surrogate */ + [0xdb85, 0xdb85], /* Private Use High Surrogate */ + [0xdb86, 0xdb86], /* Private Use High Surrogate */ + [0xdb87, 0xdb87], /* Private Use High Surrogate */ + [0xdb88, 0xdb88], /* Private Use High Surrogate */ + [0xdb89, 0xdb89], /* Private Use High Surrogate */ + [0xdb8a, 0xdb8a], /* Private Use High Surrogate */ + [0xdb8b, 0xdb8b], /* Private Use High Surrogate */ + [0xdb8c, 0xdb8c], /* Private Use High Surrogate */ + [0xdb8d, 0xdb8d], /* Private Use High Surrogate */ + [0xdb8e, 0xdb8e], /* Private Use High Surrogate */ + [0xdb8f, 0xdb8f], /* Private Use High Surrogate */ + [0xdb90, 0xdb90], /* Private Use High Surrogate */ + [0xdb91, 0xdb91], /* Private Use High Surrogate */ + [0xdb92, 0xdb92], /* Private Use High Surrogate */ + [0xdb93, 0xdb93], /* Private Use High Surrogate */ + [0xdb94, 0xdb94], /* Private Use High Surrogate */ + [0xdb95, 0xdb95], /* Private Use High Surrogate */ + [0xdb96, 0xdb96], /* Private Use High Surrogate */ + [0xdb97, 0xdb97], /* Private Use High Surrogate */ + [0xdb98, 0xdb98], /* Private Use High Surrogate */ + [0xdb99, 0xdb99], /* Private Use High Surrogate */ + [0xdb9a, 0xdb9a], /* Private Use High Surrogate */ + [0xdb9b, 0xdb9b], /* Private Use High Surrogate */ + [0xdb9c, 0xdb9c], /* Private Use High Surrogate */ + [0xdb9d, 0xdb9d], /* Private Use High Surrogate */ + [0xdb9e, 0xdb9e], /* Private Use High Surrogate */ + [0xdb9f, 0xdb9f], /* Private Use High Surrogate */ + [0xdba0, 0xdba0], /* Private Use High Surrogate */ + [0xdba1, 0xdba1], /* Private Use High Surrogate */ + [0xdba2, 0xdba2], /* Private Use High Surrogate */ + [0xdba3, 0xdba3], /* Private Use High Surrogate */ + [0xdba4, 0xdba4], /* Private Use High Surrogate */ + [0xdba5, 0xdba5], /* Private Use High Surrogate */ + [0xdba6, 0xdba6], /* Private Use High Surrogate */ + [0xdba7, 0xdba7], /* Private Use High Surrogate */ + [0xdba8, 0xdba8], /* Private Use High Surrogate */ + [0xdba9, 0xdba9], /* Private Use High Surrogate */ + [0xdbaa, 0xdbaa], /* Private Use High Surrogate */ + [0xdbab, 0xdbab], /* Private Use High Surrogate */ + [0xdbac, 0xdbac], /* Private Use High Surrogate */ + [0xdbad, 0xdbad], /* Private Use High Surrogate */ + [0xdbae, 0xdbae], /* Private Use High Surrogate */ + [0xdbaf, 0xdbaf], /* Private Use High Surrogate */ + [0xdbb0, 0xdbb0], /* Private Use High Surrogate */ + [0xdbb1, 0xdbb1], /* Private Use High Surrogate */ + [0xdbb2, 0xdbb2], /* Private Use High Surrogate */ + [0xdbb3, 0xdbb3], /* Private Use High Surrogate */ + [0xdbb4, 0xdbb4], /* Private Use High Surrogate */ + [0xdbb5, 0xdbb5], /* Private Use High Surrogate */ + [0xdbb6, 0xdbb6], /* Private Use High Surrogate */ + [0xdbb7, 0xdbb7], /* Private Use High Surrogate */ + [0xdbb8, 0xdbb8], /* Private Use High Surrogate */ + [0xdbb9, 0xdbb9], /* Private Use High Surrogate */ + [0xdbba, 0xdbba], /* Private Use High Surrogate */ + [0xdbbb, 0xdbbb], /* Private Use High Surrogate */ + [0xdbbc, 0xdbbc], /* Private Use High Surrogate */ + [0xdbbd, 0xdbbd], /* Private Use High Surrogate */ + [0xdbbe, 0xdbbe], /* Private Use High Surrogate */ + [0xdbbf, 0xdbbf], /* Private Use High Surrogate */ + [0xdbc0, 0xdbc0], /* Private Use High Surrogate */ + [0xdbc1, 0xdbc1], /* Private Use High Surrogate */ + [0xdbc2, 0xdbc2], /* Private Use High Surrogate */ + [0xdbc3, 0xdbc3], /* Private Use High Surrogate */ + [0xdbc4, 0xdbc4], /* Private Use High Surrogate */ + [0xdbc5, 0xdbc5], /* Private Use High Surrogate */ + [0xdbc6, 0xdbc6], /* Private Use High Surrogate */ + [0xdbc7, 0xdbc7], /* Private Use High Surrogate */ + [0xdbc8, 0xdbc8], /* Private Use High Surrogate */ + [0xdbc9, 0xdbc9], /* Private Use High Surrogate */ + [0xdbca, 0xdbca], /* Private Use High Surrogate */ + [0xdbcb, 0xdbcb], /* Private Use High Surrogate */ + [0xdbcc, 0xdbcc], /* Private Use High Surrogate */ + [0xdbcd, 0xdbcd], /* Private Use High Surrogate */ + [0xdbce, 0xdbce], /* Private Use High Surrogate */ + [0xdbcf, 0xdbcf], /* Private Use High Surrogate */ + [0xdbd0, 0xdbd0], /* Private Use High Surrogate */ + [0xdbd1, 0xdbd1], /* Private Use High Surrogate */ + [0xdbd2, 0xdbd2], /* Private Use High Surrogate */ + [0xdbd3, 0xdbd3], /* Private Use High Surrogate */ + [0xdbd4, 0xdbd4], /* Private Use High Surrogate */ + [0xdbd5, 0xdbd5], /* Private Use High Surrogate */ + [0xdbd6, 0xdbd6], /* Private Use High Surrogate */ + [0xdbd7, 0xdbd7], /* Private Use High Surrogate */ + [0xdbd8, 0xdbd8], /* Private Use High Surrogate */ + [0xdbd9, 0xdbd9], /* Private Use High Surrogate */ + [0xdbda, 0xdbda], /* Private Use High Surrogate */ + [0xdbdb, 0xdbdb], /* Private Use High Surrogate */ + [0xdbdc, 0xdbdc], /* Private Use High Surrogate */ + [0xdbdd, 0xdbdd], /* Private Use High Surrogate */ + [0xdbde, 0xdbde], /* Private Use High Surrogate */ + [0xdbdf, 0xdbdf], /* Private Use High Surrogate */ + [0xdbe0, 0xdbe0], /* Private Use High Surrogate */ + [0xdbe1, 0xdbe1], /* Private Use High Surrogate */ + [0xdbe2, 0xdbe2], /* Private Use High Surrogate */ + [0xdbe3, 0xdbe3], /* Private Use High Surrogate */ + [0xdbe4, 0xdbe4], /* Private Use High Surrogate */ + [0xdbe5, 0xdbe5], /* Private Use High Surrogate */ + [0xdbe6, 0xdbe6], /* Private Use High Surrogate */ + [0xdbe7, 0xdbe7], /* Private Use High Surrogate */ + [0xdbe8, 0xdbe8], /* Private Use High Surrogate */ + [0xdbe9, 0xdbe9], /* Private Use High Surrogate */ + [0xdbea, 0xdbea], /* Private Use High Surrogate */ + [0xdbeb, 0xdbeb], /* Private Use High Surrogate */ + [0xdbec, 0xdbec], /* Private Use High Surrogate */ + [0xdbed, 0xdbed], /* Private Use High Surrogate */ + [0xdbee, 0xdbee], /* Private Use High Surrogate */ + [0xdbef, 0xdbef], /* Private Use High Surrogate */ + [0xdbf0, 0xdbf0], /* Private Use High Surrogate */ + [0xdbf1, 0xdbf1], /* Private Use High Surrogate */ + [0xdbf2, 0xdbf2], /* Private Use High Surrogate */ + [0xdbf3, 0xdbf3], /* Private Use High Surrogate */ + [0xdbf4, 0xdbf4], /* Private Use High Surrogate */ + [0xdbf5, 0xdbf5], /* Private Use High Surrogate */ + [0xdbf6, 0xdbf6], /* Private Use High Surrogate */ + [0xdbf7, 0xdbf7], /* Private Use High Surrogate */ + [0xdbf8, 0xdbf8], /* Private Use High Surrogate */ + [0xdbf9, 0xdbf9], /* Private Use High Surrogate */ + [0xdbfa, 0xdbfa], /* Private Use High Surrogate */ + [0xdbfb, 0xdbfb], /* Private Use High Surrogate */ + [0xdbfc, 0xdbfc], /* Private Use High Surrogate */ + [0xdbfd, 0xdbfd], /* Private Use High Surrogate */ + [0xdbfe, 0xdbfe], /* Private Use High Surrogate */ + [0xdbff, 0xdbff], /* Private Use High Surrogate */ + [0xdc00, 0xdc00], /* Low Surrogate */ + [0xdc01, 0xdc01], /* Low Surrogate */ + [0xdc02, 0xdc02], /* Low Surrogate */ + [0xdc03, 0xdc03], /* Low Surrogate */ + [0xdc04, 0xdc04], /* Low Surrogate */ + [0xdc05, 0xdc05], /* Low Surrogate */ + [0xdc06, 0xdc06], /* Low Surrogate */ + [0xdc07, 0xdc07], /* Low Surrogate */ + [0xdc08, 0xdc08], /* Low Surrogate */ + [0xdc09, 0xdc09], /* Low Surrogate */ + [0xdc0a, 0xdc0a], /* Low Surrogate */ + [0xdc0b, 0xdc0b], /* Low Surrogate */ + [0xdc0c, 0xdc0c], /* Low Surrogate */ + [0xdc0d, 0xdc0d], /* Low Surrogate */ + [0xdc0e, 0xdc0e], /* Low Surrogate */ + [0xdc0f, 0xdc0f], /* Low Surrogate */ + [0xdc10, 0xdc10], /* Low Surrogate */ + [0xdc11, 0xdc11], /* Low Surrogate */ + [0xdc12, 0xdc12], /* Low Surrogate */ + [0xdc13, 0xdc13], /* Low Surrogate */ + [0xdc14, 0xdc14], /* Low Surrogate */ + [0xdc15, 0xdc15], /* Low Surrogate */ + [0xdc16, 0xdc16], /* Low Surrogate */ + [0xdc17, 0xdc17], /* Low Surrogate */ + [0xdc18, 0xdc18], /* Low Surrogate */ + [0xdc19, 0xdc19], /* Low Surrogate */ + [0xdc1a, 0xdc1a], /* Low Surrogate */ + [0xdc1b, 0xdc1b], /* Low Surrogate */ + [0xdc1c, 0xdc1c], /* Low Surrogate */ + [0xdc1d, 0xdc1d], /* Low Surrogate */ + [0xdc1e, 0xdc1e], /* Low Surrogate */ + [0xdc1f, 0xdc1f], /* Low Surrogate */ + [0xdc20, 0xdc20], /* Low Surrogate */ + [0xdc21, 0xdc21], /* Low Surrogate */ + [0xdc22, 0xdc22], /* Low Surrogate */ + [0xdc23, 0xdc23], /* Low Surrogate */ + [0xdc24, 0xdc24], /* Low Surrogate */ + [0xdc25, 0xdc25], /* Low Surrogate */ + [0xdc26, 0xdc26], /* Low Surrogate */ + [0xdc27, 0xdc27], /* Low Surrogate */ + [0xdc28, 0xdc28], /* Low Surrogate */ + [0xdc29, 0xdc29], /* Low Surrogate */ + [0xdc2a, 0xdc2a], /* Low Surrogate */ + [0xdc2b, 0xdc2b], /* Low Surrogate */ + [0xdc2c, 0xdc2c], /* Low Surrogate */ + [0xdc2d, 0xdc2d], /* Low Surrogate */ + [0xdc2e, 0xdc2e], /* Low Surrogate */ + [0xdc2f, 0xdc2f], /* Low Surrogate */ + [0xdc30, 0xdc30], /* Low Surrogate */ + [0xdc31, 0xdc31], /* Low Surrogate */ + [0xdc32, 0xdc32], /* Low Surrogate */ + [0xdc33, 0xdc33], /* Low Surrogate */ + [0xdc34, 0xdc34], /* Low Surrogate */ + [0xdc35, 0xdc35], /* Low Surrogate */ + [0xdc36, 0xdc36], /* Low Surrogate */ + [0xdc37, 0xdc37], /* Low Surrogate */ + [0xdc38, 0xdc38], /* Low Surrogate */ + [0xdc39, 0xdc39], /* Low Surrogate */ + [0xdc3a, 0xdc3a], /* Low Surrogate */ + [0xdc3b, 0xdc3b], /* Low Surrogate */ + [0xdc3c, 0xdc3c], /* Low Surrogate */ + [0xdc3d, 0xdc3d], /* Low Surrogate */ + [0xdc3e, 0xdc3e], /* Low Surrogate */ + [0xdc3f, 0xdc3f], /* Low Surrogate */ + [0xdc40, 0xdc40], /* Low Surrogate */ + [0xdc41, 0xdc41], /* Low Surrogate */ + [0xdc42, 0xdc42], /* Low Surrogate */ + [0xdc43, 0xdc43], /* Low Surrogate */ + [0xdc44, 0xdc44], /* Low Surrogate */ + [0xdc45, 0xdc45], /* Low Surrogate */ + [0xdc46, 0xdc46], /* Low Surrogate */ + [0xdc47, 0xdc47], /* Low Surrogate */ + [0xdc48, 0xdc48], /* Low Surrogate */ + [0xdc49, 0xdc49], /* Low Surrogate */ + [0xdc4a, 0xdc4a], /* Low Surrogate */ + [0xdc4b, 0xdc4b], /* Low Surrogate */ + [0xdc4c, 0xdc4c], /* Low Surrogate */ + [0xdc4d, 0xdc4d], /* Low Surrogate */ + [0xdc4e, 0xdc4e], /* Low Surrogate */ + [0xdc4f, 0xdc4f], /* Low Surrogate */ + [0xdc50, 0xdc50], /* Low Surrogate */ + [0xdc51, 0xdc51], /* Low Surrogate */ + [0xdc52, 0xdc52], /* Low Surrogate */ + [0xdc53, 0xdc53], /* Low Surrogate */ + [0xdc54, 0xdc54], /* Low Surrogate */ + [0xdc55, 0xdc55], /* Low Surrogate */ + [0xdc56, 0xdc56], /* Low Surrogate */ + [0xdc57, 0xdc57], /* Low Surrogate */ + [0xdc58, 0xdc58], /* Low Surrogate */ + [0xdc59, 0xdc59], /* Low Surrogate */ + [0xdc5a, 0xdc5a], /* Low Surrogate */ + [0xdc5b, 0xdc5b], /* Low Surrogate */ + [0xdc5c, 0xdc5c], /* Low Surrogate */ + [0xdc5d, 0xdc5d], /* Low Surrogate */ + [0xdc5e, 0xdc5e], /* Low Surrogate */ + [0xdc5f, 0xdc5f], /* Low Surrogate */ + [0xdc60, 0xdc60], /* Low Surrogate */ + [0xdc61, 0xdc61], /* Low Surrogate */ + [0xdc62, 0xdc62], /* Low Surrogate */ + [0xdc63, 0xdc63], /* Low Surrogate */ + [0xdc64, 0xdc64], /* Low Surrogate */ + [0xdc65, 0xdc65], /* Low Surrogate */ + [0xdc66, 0xdc66], /* Low Surrogate */ + [0xdc67, 0xdc67], /* Low Surrogate */ + [0xdc68, 0xdc68], /* Low Surrogate */ + [0xdc69, 0xdc69], /* Low Surrogate */ + [0xdc6a, 0xdc6a], /* Low Surrogate */ + [0xdc6b, 0xdc6b], /* Low Surrogate */ + [0xdc6c, 0xdc6c], /* Low Surrogate */ + [0xdc6d, 0xdc6d], /* Low Surrogate */ + [0xdc6e, 0xdc6e], /* Low Surrogate */ + [0xdc6f, 0xdc6f], /* Low Surrogate */ + [0xdc70, 0xdc70], /* Low Surrogate */ + [0xdc71, 0xdc71], /* Low Surrogate */ + [0xdc72, 0xdc72], /* Low Surrogate */ + [0xdc73, 0xdc73], /* Low Surrogate */ + [0xdc74, 0xdc74], /* Low Surrogate */ + [0xdc75, 0xdc75], /* Low Surrogate */ + [0xdc76, 0xdc76], /* Low Surrogate */ + [0xdc77, 0xdc77], /* Low Surrogate */ + [0xdc78, 0xdc78], /* Low Surrogate */ + [0xdc79, 0xdc79], /* Low Surrogate */ + [0xdc7a, 0xdc7a], /* Low Surrogate */ + [0xdc7b, 0xdc7b], /* Low Surrogate */ + [0xdc7c, 0xdc7c], /* Low Surrogate */ + [0xdc7d, 0xdc7d], /* Low Surrogate */ + [0xdc7e, 0xdc7e], /* Low Surrogate */ + [0xdc7f, 0xdc7f], /* Low Surrogate */ + [0xdc80, 0xdc80], /* Low Surrogate */ + [0xdc81, 0xdc81], /* Low Surrogate */ + [0xdc82, 0xdc82], /* Low Surrogate */ + [0xdc83, 0xdc83], /* Low Surrogate */ + [0xdc84, 0xdc84], /* Low Surrogate */ + [0xdc85, 0xdc85], /* Low Surrogate */ + [0xdc86, 0xdc86], /* Low Surrogate */ + [0xdc87, 0xdc87], /* Low Surrogate */ + [0xdc88, 0xdc88], /* Low Surrogate */ + [0xdc89, 0xdc89], /* Low Surrogate */ + [0xdc8a, 0xdc8a], /* Low Surrogate */ + [0xdc8b, 0xdc8b], /* Low Surrogate */ + [0xdc8c, 0xdc8c], /* Low Surrogate */ + [0xdc8d, 0xdc8d], /* Low Surrogate */ + [0xdc8e, 0xdc8e], /* Low Surrogate */ + [0xdc8f, 0xdc8f], /* Low Surrogate */ + [0xdc90, 0xdc90], /* Low Surrogate */ + [0xdc91, 0xdc91], /* Low Surrogate */ + [0xdc92, 0xdc92], /* Low Surrogate */ + [0xdc93, 0xdc93], /* Low Surrogate */ + [0xdc94, 0xdc94], /* Low Surrogate */ + [0xdc95, 0xdc95], /* Low Surrogate */ + [0xdc96, 0xdc96], /* Low Surrogate */ + [0xdc97, 0xdc97], /* Low Surrogate */ + [0xdc98, 0xdc98], /* Low Surrogate */ + [0xdc99, 0xdc99], /* Low Surrogate */ + [0xdc9a, 0xdc9a], /* Low Surrogate */ + [0xdc9b, 0xdc9b], /* Low Surrogate */ + [0xdc9c, 0xdc9c], /* Low Surrogate */ + [0xdc9d, 0xdc9d], /* Low Surrogate */ + [0xdc9e, 0xdc9e], /* Low Surrogate */ + [0xdc9f, 0xdc9f], /* Low Surrogate */ + [0xdca0, 0xdca0], /* Low Surrogate */ + [0xdca1, 0xdca1], /* Low Surrogate */ + [0xdca2, 0xdca2], /* Low Surrogate */ + [0xdca3, 0xdca3], /* Low Surrogate */ + [0xdca4, 0xdca4], /* Low Surrogate */ + [0xdca5, 0xdca5], /* Low Surrogate */ + [0xdca6, 0xdca6], /* Low Surrogate */ + [0xdca7, 0xdca7], /* Low Surrogate */ + [0xdca8, 0xdca8], /* Low Surrogate */ + [0xdca9, 0xdca9], /* Low Surrogate */ + [0xdcaa, 0xdcaa], /* Low Surrogate */ + [0xdcab, 0xdcab], /* Low Surrogate */ + [0xdcac, 0xdcac], /* Low Surrogate */ + [0xdcad, 0xdcad], /* Low Surrogate */ + [0xdcae, 0xdcae], /* Low Surrogate */ + [0xdcaf, 0xdcaf], /* Low Surrogate */ + [0xdcb0, 0xdcb0], /* Low Surrogate */ + [0xdcb1, 0xdcb1], /* Low Surrogate */ + [0xdcb2, 0xdcb2], /* Low Surrogate */ + [0xdcb3, 0xdcb3], /* Low Surrogate */ + [0xdcb4, 0xdcb4], /* Low Surrogate */ + [0xdcb5, 0xdcb5], /* Low Surrogate */ + [0xdcb6, 0xdcb6], /* Low Surrogate */ + [0xdcb7, 0xdcb7], /* Low Surrogate */ + [0xdcb8, 0xdcb8], /* Low Surrogate */ + [0xdcb9, 0xdcb9], /* Low Surrogate */ + [0xdcba, 0xdcba], /* Low Surrogate */ + [0xdcbb, 0xdcbb], /* Low Surrogate */ + [0xdcbc, 0xdcbc], /* Low Surrogate */ + [0xdcbd, 0xdcbd], /* Low Surrogate */ + [0xdcbe, 0xdcbe], /* Low Surrogate */ + [0xdcbf, 0xdcbf], /* Low Surrogate */ + [0xdcc0, 0xdcc0], /* Low Surrogate */ + [0xdcc1, 0xdcc1], /* Low Surrogate */ + [0xdcc2, 0xdcc2], /* Low Surrogate */ + [0xdcc3, 0xdcc3], /* Low Surrogate */ + [0xdcc4, 0xdcc4], /* Low Surrogate */ + [0xdcc5, 0xdcc5], /* Low Surrogate */ + [0xdcc6, 0xdcc6], /* Low Surrogate */ + [0xdcc7, 0xdcc7], /* Low Surrogate */ + [0xdcc8, 0xdcc8], /* Low Surrogate */ + [0xdcc9, 0xdcc9], /* Low Surrogate */ + [0xdcca, 0xdcca], /* Low Surrogate */ + [0xdccb, 0xdccb], /* Low Surrogate */ + [0xdccc, 0xdccc], /* Low Surrogate */ + [0xdccd, 0xdccd], /* Low Surrogate */ + [0xdcce, 0xdcce], /* Low Surrogate */ + [0xdccf, 0xdccf], /* Low Surrogate */ + [0xdcd0, 0xdcd0], /* Low Surrogate */ + [0xdcd1, 0xdcd1], /* Low Surrogate */ + [0xdcd2, 0xdcd2], /* Low Surrogate */ + [0xdcd3, 0xdcd3], /* Low Surrogate */ + [0xdcd4, 0xdcd4], /* Low Surrogate */ + [0xdcd5, 0xdcd5], /* Low Surrogate */ + [0xdcd6, 0xdcd6], /* Low Surrogate */ + [0xdcd7, 0xdcd7], /* Low Surrogate */ + [0xdcd8, 0xdcd8], /* Low Surrogate */ + [0xdcd9, 0xdcd9], /* Low Surrogate */ + [0xdcda, 0xdcda], /* Low Surrogate */ + [0xdcdb, 0xdcdb], /* Low Surrogate */ + [0xdcdc, 0xdcdc], /* Low Surrogate */ + [0xdcdd, 0xdcdd], /* Low Surrogate */ + [0xdcde, 0xdcde], /* Low Surrogate */ + [0xdcdf, 0xdcdf], /* Low Surrogate */ + [0xdce0, 0xdce0], /* Low Surrogate */ + [0xdce1, 0xdce1], /* Low Surrogate */ + [0xdce2, 0xdce2], /* Low Surrogate */ + [0xdce3, 0xdce3], /* Low Surrogate */ + [0xdce4, 0xdce4], /* Low Surrogate */ + [0xdce5, 0xdce5], /* Low Surrogate */ + [0xdce6, 0xdce6], /* Low Surrogate */ + [0xdce7, 0xdce7], /* Low Surrogate */ + [0xdce8, 0xdce8], /* Low Surrogate */ + [0xdce9, 0xdce9], /* Low Surrogate */ + [0xdcea, 0xdcea], /* Low Surrogate */ + [0xdceb, 0xdceb], /* Low Surrogate */ + [0xdcec, 0xdcec], /* Low Surrogate */ + [0xdced, 0xdced], /* Low Surrogate */ + [0xdcee, 0xdcee], /* Low Surrogate */ + [0xdcef, 0xdcef], /* Low Surrogate */ + [0xdcf0, 0xdcf0], /* Low Surrogate */ + [0xdcf1, 0xdcf1], /* Low Surrogate */ + [0xdcf2, 0xdcf2], /* Low Surrogate */ + [0xdcf3, 0xdcf3], /* Low Surrogate */ + [0xdcf4, 0xdcf4], /* Low Surrogate */ + [0xdcf5, 0xdcf5], /* Low Surrogate */ + [0xdcf6, 0xdcf6], /* Low Surrogate */ + [0xdcf7, 0xdcf7], /* Low Surrogate */ + [0xdcf8, 0xdcf8], /* Low Surrogate */ + [0xdcf9, 0xdcf9], /* Low Surrogate */ + [0xdcfa, 0xdcfa], /* Low Surrogate */ + [0xdcfb, 0xdcfb], /* Low Surrogate */ + [0xdcfc, 0xdcfc], /* Low Surrogate */ + [0xdcfd, 0xdcfd], /* Low Surrogate */ + [0xdcfe, 0xdcfe], /* Low Surrogate */ + [0xdcff, 0xdcff], /* Low Surrogate */ + [0xdd00, 0xdd00], /* Low Surrogate */ + [0xdd01, 0xdd01], /* Low Surrogate */ + [0xdd02, 0xdd02], /* Low Surrogate */ + [0xdd03, 0xdd03], /* Low Surrogate */ + [0xdd04, 0xdd04], /* Low Surrogate */ + [0xdd05, 0xdd05], /* Low Surrogate */ + [0xdd06, 0xdd06], /* Low Surrogate */ + [0xdd07, 0xdd07], /* Low Surrogate */ + [0xdd08, 0xdd08], /* Low Surrogate */ + [0xdd09, 0xdd09], /* Low Surrogate */ + [0xdd0a, 0xdd0a], /* Low Surrogate */ + [0xdd0b, 0xdd0b], /* Low Surrogate */ + [0xdd0c, 0xdd0c], /* Low Surrogate */ + [0xdd0d, 0xdd0d], /* Low Surrogate */ + [0xdd0e, 0xdd0e], /* Low Surrogate */ + [0xdd0f, 0xdd0f], /* Low Surrogate */ + [0xdd10, 0xdd10], /* Low Surrogate */ + [0xdd11, 0xdd11], /* Low Surrogate */ + [0xdd12, 0xdd12], /* Low Surrogate */ + [0xdd13, 0xdd13], /* Low Surrogate */ + [0xdd14, 0xdd14], /* Low Surrogate */ + [0xdd15, 0xdd15], /* Low Surrogate */ + [0xdd16, 0xdd16], /* Low Surrogate */ + [0xdd17, 0xdd17], /* Low Surrogate */ + [0xdd18, 0xdd18], /* Low Surrogate */ + [0xdd19, 0xdd19], /* Low Surrogate */ + [0xdd1a, 0xdd1a], /* Low Surrogate */ + [0xdd1b, 0xdd1b], /* Low Surrogate */ + [0xdd1c, 0xdd1c], /* Low Surrogate */ + [0xdd1d, 0xdd1d], /* Low Surrogate */ + [0xdd1e, 0xdd1e], /* Low Surrogate */ + [0xdd1f, 0xdd1f], /* Low Surrogate */ + [0xdd20, 0xdd20], /* Low Surrogate */ + [0xdd21, 0xdd21], /* Low Surrogate */ + [0xdd22, 0xdd22], /* Low Surrogate */ + [0xdd23, 0xdd23], /* Low Surrogate */ + [0xdd24, 0xdd24], /* Low Surrogate */ + [0xdd25, 0xdd25], /* Low Surrogate */ + [0xdd26, 0xdd26], /* Low Surrogate */ + [0xdd27, 0xdd27], /* Low Surrogate */ + [0xdd28, 0xdd28], /* Low Surrogate */ + [0xdd29, 0xdd29], /* Low Surrogate */ + [0xdd2a, 0xdd2a], /* Low Surrogate */ + [0xdd2b, 0xdd2b], /* Low Surrogate */ + [0xdd2c, 0xdd2c], /* Low Surrogate */ + [0xdd2d, 0xdd2d], /* Low Surrogate */ + [0xdd2e, 0xdd2e], /* Low Surrogate */ + [0xdd2f, 0xdd2f], /* Low Surrogate */ + [0xdd30, 0xdd30], /* Low Surrogate */ + [0xdd31, 0xdd31], /* Low Surrogate */ + [0xdd32, 0xdd32], /* Low Surrogate */ + [0xdd33, 0xdd33], /* Low Surrogate */ + [0xdd34, 0xdd34], /* Low Surrogate */ + [0xdd35, 0xdd35], /* Low Surrogate */ + [0xdd36, 0xdd36], /* Low Surrogate */ + [0xdd37, 0xdd37], /* Low Surrogate */ + [0xdd38, 0xdd38], /* Low Surrogate */ + [0xdd39, 0xdd39], /* Low Surrogate */ + [0xdd3a, 0xdd3a], /* Low Surrogate */ + [0xdd3b, 0xdd3b], /* Low Surrogate */ + [0xdd3c, 0xdd3c], /* Low Surrogate */ + [0xdd3d, 0xdd3d], /* Low Surrogate */ + [0xdd3e, 0xdd3e], /* Low Surrogate */ + [0xdd3f, 0xdd3f], /* Low Surrogate */ + [0xdd40, 0xdd40], /* Low Surrogate */ + [0xdd41, 0xdd41], /* Low Surrogate */ + [0xdd42, 0xdd42], /* Low Surrogate */ + [0xdd43, 0xdd43], /* Low Surrogate */ + [0xdd44, 0xdd44], /* Low Surrogate */ + [0xdd45, 0xdd45], /* Low Surrogate */ + [0xdd46, 0xdd46], /* Low Surrogate */ + [0xdd47, 0xdd47], /* Low Surrogate */ + [0xdd48, 0xdd48], /* Low Surrogate */ + [0xdd49, 0xdd49], /* Low Surrogate */ + [0xdd4a, 0xdd4a], /* Low Surrogate */ + [0xdd4b, 0xdd4b], /* Low Surrogate */ + [0xdd4c, 0xdd4c], /* Low Surrogate */ + [0xdd4d, 0xdd4d], /* Low Surrogate */ + [0xdd4e, 0xdd4e], /* Low Surrogate */ + [0xdd4f, 0xdd4f], /* Low Surrogate */ + [0xdd50, 0xdd50], /* Low Surrogate */ + [0xdd51, 0xdd51], /* Low Surrogate */ + [0xdd52, 0xdd52], /* Low Surrogate */ + [0xdd53, 0xdd53], /* Low Surrogate */ + [0xdd54, 0xdd54], /* Low Surrogate */ + [0xdd55, 0xdd55], /* Low Surrogate */ + [0xdd56, 0xdd56], /* Low Surrogate */ + [0xdd57, 0xdd57], /* Low Surrogate */ + [0xdd58, 0xdd58], /* Low Surrogate */ + [0xdd59, 0xdd59], /* Low Surrogate */ + [0xdd5a, 0xdd5a], /* Low Surrogate */ + [0xdd5b, 0xdd5b], /* Low Surrogate */ + [0xdd5c, 0xdd5c], /* Low Surrogate */ + [0xdd5d, 0xdd5d], /* Low Surrogate */ + [0xdd5e, 0xdd5e], /* Low Surrogate */ + [0xdd5f, 0xdd5f], /* Low Surrogate */ + [0xdd60, 0xdd60], /* Low Surrogate */ + [0xdd61, 0xdd61], /* Low Surrogate */ + [0xdd62, 0xdd62], /* Low Surrogate */ + [0xdd63, 0xdd63], /* Low Surrogate */ + [0xdd64, 0xdd64], /* Low Surrogate */ + [0xdd65, 0xdd65], /* Low Surrogate */ + [0xdd66, 0xdd66], /* Low Surrogate */ + [0xdd67, 0xdd67], /* Low Surrogate */ + [0xdd68, 0xdd68], /* Low Surrogate */ + [0xdd69, 0xdd69], /* Low Surrogate */ + [0xdd6a, 0xdd6a], /* Low Surrogate */ + [0xdd6b, 0xdd6b], /* Low Surrogate */ + [0xdd6c, 0xdd6c], /* Low Surrogate */ + [0xdd6d, 0xdd6d], /* Low Surrogate */ + [0xdd6e, 0xdd6e], /* Low Surrogate */ + [0xdd6f, 0xdd6f], /* Low Surrogate */ + [0xdd70, 0xdd70], /* Low Surrogate */ + [0xdd71, 0xdd71], /* Low Surrogate */ + [0xdd72, 0xdd72], /* Low Surrogate */ + [0xdd73, 0xdd73], /* Low Surrogate */ + [0xdd74, 0xdd74], /* Low Surrogate */ + [0xdd75, 0xdd75], /* Low Surrogate */ + [0xdd76, 0xdd76], /* Low Surrogate */ + [0xdd77, 0xdd77], /* Low Surrogate */ + [0xdd78, 0xdd78], /* Low Surrogate */ + [0xdd79, 0xdd79], /* Low Surrogate */ + [0xdd7a, 0xdd7a], /* Low Surrogate */ + [0xdd7b, 0xdd7b], /* Low Surrogate */ + [0xdd7c, 0xdd7c], /* Low Surrogate */ + [0xdd7d, 0xdd7d], /* Low Surrogate */ + [0xdd7e, 0xdd7e], /* Low Surrogate */ + [0xdd7f, 0xdd7f], /* Low Surrogate */ + [0xdd80, 0xdd80], /* Low Surrogate */ + [0xdd81, 0xdd81], /* Low Surrogate */ + [0xdd82, 0xdd82], /* Low Surrogate */ + [0xdd83, 0xdd83], /* Low Surrogate */ + [0xdd84, 0xdd84], /* Low Surrogate */ + [0xdd85, 0xdd85], /* Low Surrogate */ + [0xdd86, 0xdd86], /* Low Surrogate */ + [0xdd87, 0xdd87], /* Low Surrogate */ + [0xdd88, 0xdd88], /* Low Surrogate */ + [0xdd89, 0xdd89], /* Low Surrogate */ + [0xdd8a, 0xdd8a], /* Low Surrogate */ + [0xdd8b, 0xdd8b], /* Low Surrogate */ + [0xdd8c, 0xdd8c], /* Low Surrogate */ + [0xdd8d, 0xdd8d], /* Low Surrogate */ + [0xdd8e, 0xdd8e], /* Low Surrogate */ + [0xdd8f, 0xdd8f], /* Low Surrogate */ + [0xdd90, 0xdd90], /* Low Surrogate */ + [0xdd91, 0xdd91], /* Low Surrogate */ + [0xdd92, 0xdd92], /* Low Surrogate */ + [0xdd93, 0xdd93], /* Low Surrogate */ + [0xdd94, 0xdd94], /* Low Surrogate */ + [0xdd95, 0xdd95], /* Low Surrogate */ + [0xdd96, 0xdd96], /* Low Surrogate */ + [0xdd97, 0xdd97], /* Low Surrogate */ + [0xdd98, 0xdd98], /* Low Surrogate */ + [0xdd99, 0xdd99], /* Low Surrogate */ + [0xdd9a, 0xdd9a], /* Low Surrogate */ + [0xdd9b, 0xdd9b], /* Low Surrogate */ + [0xdd9c, 0xdd9c], /* Low Surrogate */ + [0xdd9d, 0xdd9d], /* Low Surrogate */ + [0xdd9e, 0xdd9e], /* Low Surrogate */ + [0xdd9f, 0xdd9f], /* Low Surrogate */ + [0xdda0, 0xdda0], /* Low Surrogate */ + [0xdda1, 0xdda1], /* Low Surrogate */ + [0xdda2, 0xdda2], /* Low Surrogate */ + [0xdda3, 0xdda3], /* Low Surrogate */ + [0xdda4, 0xdda4], /* Low Surrogate */ + [0xdda5, 0xdda5], /* Low Surrogate */ + [0xdda6, 0xdda6], /* Low Surrogate */ + [0xdda7, 0xdda7], /* Low Surrogate */ + [0xdda8, 0xdda8], /* Low Surrogate */ + [0xdda9, 0xdda9], /* Low Surrogate */ + [0xddaa, 0xddaa], /* Low Surrogate */ + [0xddab, 0xddab], /* Low Surrogate */ + [0xddac, 0xddac], /* Low Surrogate */ + [0xddad, 0xddad], /* Low Surrogate */ + [0xddae, 0xddae], /* Low Surrogate */ + [0xddaf, 0xddaf], /* Low Surrogate */ + [0xddb0, 0xddb0], /* Low Surrogate */ + [0xddb1, 0xddb1], /* Low Surrogate */ + [0xddb2, 0xddb2], /* Low Surrogate */ + [0xddb3, 0xddb3], /* Low Surrogate */ + [0xddb4, 0xddb4], /* Low Surrogate */ + [0xddb5, 0xddb5], /* Low Surrogate */ + [0xddb6, 0xddb6], /* Low Surrogate */ + [0xddb7, 0xddb7], /* Low Surrogate */ + [0xddb8, 0xddb8], /* Low Surrogate */ + [0xddb9, 0xddb9], /* Low Surrogate */ + [0xddba, 0xddba], /* Low Surrogate */ + [0xddbb, 0xddbb], /* Low Surrogate */ + [0xddbc, 0xddbc], /* Low Surrogate */ + [0xddbd, 0xddbd], /* Low Surrogate */ + [0xddbe, 0xddbe], /* Low Surrogate */ + [0xddbf, 0xddbf], /* Low Surrogate */ + [0xddc0, 0xddc0], /* Low Surrogate */ + [0xddc1, 0xddc1], /* Low Surrogate */ + [0xddc2, 0xddc2], /* Low Surrogate */ + [0xddc3, 0xddc3], /* Low Surrogate */ + [0xddc4, 0xddc4], /* Low Surrogate */ + [0xddc5, 0xddc5], /* Low Surrogate */ + [0xddc6, 0xddc6], /* Low Surrogate */ + [0xddc7, 0xddc7], /* Low Surrogate */ + [0xddc8, 0xddc8], /* Low Surrogate */ + [0xddc9, 0xddc9], /* Low Surrogate */ + [0xddca, 0xddca], /* Low Surrogate */ + [0xddcb, 0xddcb], /* Low Surrogate */ + [0xddcc, 0xddcc], /* Low Surrogate */ + [0xddcd, 0xddcd], /* Low Surrogate */ + [0xddce, 0xddce], /* Low Surrogate */ + [0xddcf, 0xddcf], /* Low Surrogate */ + [0xddd0, 0xddd0], /* Low Surrogate */ + [0xddd1, 0xddd1], /* Low Surrogate */ + [0xddd2, 0xddd2], /* Low Surrogate */ + [0xddd3, 0xddd3], /* Low Surrogate */ + [0xddd4, 0xddd4], /* Low Surrogate */ + [0xddd5, 0xddd5], /* Low Surrogate */ + [0xddd6, 0xddd6], /* Low Surrogate */ + [0xddd7, 0xddd7], /* Low Surrogate */ + [0xddd8, 0xddd8], /* Low Surrogate */ + [0xddd9, 0xddd9], /* Low Surrogate */ + [0xddda, 0xddda], /* Low Surrogate */ + [0xdddb, 0xdddb], /* Low Surrogate */ + [0xdddc, 0xdddc], /* Low Surrogate */ + [0xdddd, 0xdddd], /* Low Surrogate */ + [0xddde, 0xddde], /* Low Surrogate */ + [0xdddf, 0xdddf], /* Low Surrogate */ + [0xdde0, 0xdde0], /* Low Surrogate */ + [0xdde1, 0xdde1], /* Low Surrogate */ + [0xdde2, 0xdde2], /* Low Surrogate */ + [0xdde3, 0xdde3], /* Low Surrogate */ + [0xdde4, 0xdde4], /* Low Surrogate */ + [0xdde5, 0xdde5], /* Low Surrogate */ + [0xdde6, 0xdde6], /* Low Surrogate */ + [0xdde7, 0xdde7], /* Low Surrogate */ + [0xdde8, 0xdde8], /* Low Surrogate */ + [0xdde9, 0xdde9], /* Low Surrogate */ + [0xddea, 0xddea], /* Low Surrogate */ + [0xddeb, 0xddeb], /* Low Surrogate */ + [0xddec, 0xddec], /* Low Surrogate */ + [0xdded, 0xdded], /* Low Surrogate */ + [0xddee, 0xddee], /* Low Surrogate */ + [0xddef, 0xddef], /* Low Surrogate */ + [0xddf0, 0xddf0], /* Low Surrogate */ + [0xddf1, 0xddf1], /* Low Surrogate */ + [0xddf2, 0xddf2], /* Low Surrogate */ + [0xddf3, 0xddf3], /* Low Surrogate */ + [0xddf4, 0xddf4], /* Low Surrogate */ + [0xddf5, 0xddf5], /* Low Surrogate */ + [0xddf6, 0xddf6], /* Low Surrogate */ + [0xddf7, 0xddf7], /* Low Surrogate */ + [0xddf8, 0xddf8], /* Low Surrogate */ + [0xddf9, 0xddf9], /* Low Surrogate */ + [0xddfa, 0xddfa], /* Low Surrogate */ + [0xddfb, 0xddfb], /* Low Surrogate */ + [0xddfc, 0xddfc], /* Low Surrogate */ + [0xddfd, 0xddfd], /* Low Surrogate */ + [0xddfe, 0xddfe], /* Low Surrogate */ + [0xddff, 0xddff], /* Low Surrogate */ + [0xde00, 0xde00], /* Low Surrogate */ + [0xde01, 0xde01], /* Low Surrogate */ + [0xde02, 0xde02], /* Low Surrogate */ + [0xde03, 0xde03], /* Low Surrogate */ + [0xde04, 0xde04], /* Low Surrogate */ + [0xde05, 0xde05], /* Low Surrogate */ + [0xde06, 0xde06], /* Low Surrogate */ + [0xde07, 0xde07], /* Low Surrogate */ + [0xde08, 0xde08], /* Low Surrogate */ + [0xde09, 0xde09], /* Low Surrogate */ + [0xde0a, 0xde0a], /* Low Surrogate */ + [0xde0b, 0xde0b], /* Low Surrogate */ + [0xde0c, 0xde0c], /* Low Surrogate */ + [0xde0d, 0xde0d], /* Low Surrogate */ + [0xde0e, 0xde0e], /* Low Surrogate */ + [0xde0f, 0xde0f], /* Low Surrogate */ + [0xde10, 0xde10], /* Low Surrogate */ + [0xde11, 0xde11], /* Low Surrogate */ + [0xde12, 0xde12], /* Low Surrogate */ + [0xde13, 0xde13], /* Low Surrogate */ + [0xde14, 0xde14], /* Low Surrogate */ + [0xde15, 0xde15], /* Low Surrogate */ + [0xde16, 0xde16], /* Low Surrogate */ + [0xde17, 0xde17], /* Low Surrogate */ + [0xde18, 0xde18], /* Low Surrogate */ + [0xde19, 0xde19], /* Low Surrogate */ + [0xde1a, 0xde1a], /* Low Surrogate */ + [0xde1b, 0xde1b], /* Low Surrogate */ + [0xde1c, 0xde1c], /* Low Surrogate */ + [0xde1d, 0xde1d], /* Low Surrogate */ + [0xde1e, 0xde1e], /* Low Surrogate */ + [0xde1f, 0xde1f], /* Low Surrogate */ + [0xde20, 0xde20], /* Low Surrogate */ + [0xde21, 0xde21], /* Low Surrogate */ + [0xde22, 0xde22], /* Low Surrogate */ + [0xde23, 0xde23], /* Low Surrogate */ + [0xde24, 0xde24], /* Low Surrogate */ + [0xde25, 0xde25], /* Low Surrogate */ + [0xde26, 0xde26], /* Low Surrogate */ + [0xde27, 0xde27], /* Low Surrogate */ + [0xde28, 0xde28], /* Low Surrogate */ + [0xde29, 0xde29], /* Low Surrogate */ + [0xde2a, 0xde2a], /* Low Surrogate */ + [0xde2b, 0xde2b], /* Low Surrogate */ + [0xde2c, 0xde2c], /* Low Surrogate */ + [0xde2d, 0xde2d], /* Low Surrogate */ + [0xde2e, 0xde2e], /* Low Surrogate */ + [0xde2f, 0xde2f], /* Low Surrogate */ + [0xde30, 0xde30], /* Low Surrogate */ + [0xde31, 0xde31], /* Low Surrogate */ + [0xde32, 0xde32], /* Low Surrogate */ + [0xde33, 0xde33], /* Low Surrogate */ + [0xde34, 0xde34], /* Low Surrogate */ + [0xde35, 0xde35], /* Low Surrogate */ + [0xde36, 0xde36], /* Low Surrogate */ + [0xde37, 0xde37], /* Low Surrogate */ + [0xde38, 0xde38], /* Low Surrogate */ + [0xde39, 0xde39], /* Low Surrogate */ + [0xde3a, 0xde3a], /* Low Surrogate */ + [0xde3b, 0xde3b], /* Low Surrogate */ + [0xde3c, 0xde3c], /* Low Surrogate */ + [0xde3d, 0xde3d], /* Low Surrogate */ + [0xde3e, 0xde3e], /* Low Surrogate */ + [0xde3f, 0xde3f], /* Low Surrogate */ + [0xde40, 0xde40], /* Low Surrogate */ + [0xde41, 0xde41], /* Low Surrogate */ + [0xde42, 0xde42], /* Low Surrogate */ + [0xde43, 0xde43], /* Low Surrogate */ + [0xde44, 0xde44], /* Low Surrogate */ + [0xde45, 0xde45], /* Low Surrogate */ + [0xde46, 0xde46], /* Low Surrogate */ + [0xde47, 0xde47], /* Low Surrogate */ + [0xde48, 0xde48], /* Low Surrogate */ + [0xde49, 0xde49], /* Low Surrogate */ + [0xde4a, 0xde4a], /* Low Surrogate */ + [0xde4b, 0xde4b], /* Low Surrogate */ + [0xde4c, 0xde4c], /* Low Surrogate */ + [0xde4d, 0xde4d], /* Low Surrogate */ + [0xde4e, 0xde4e], /* Low Surrogate */ + [0xde4f, 0xde4f], /* Low Surrogate */ + [0xde50, 0xde50], /* Low Surrogate */ + [0xde51, 0xde51], /* Low Surrogate */ + [0xde52, 0xde52], /* Low Surrogate */ + [0xde53, 0xde53], /* Low Surrogate */ + [0xde54, 0xde54], /* Low Surrogate */ + [0xde55, 0xde55], /* Low Surrogate */ + [0xde56, 0xde56], /* Low Surrogate */ + [0xde57, 0xde57], /* Low Surrogate */ + [0xde58, 0xde58], /* Low Surrogate */ + [0xde59, 0xde59], /* Low Surrogate */ + [0xde5a, 0xde5a], /* Low Surrogate */ + [0xde5b, 0xde5b], /* Low Surrogate */ + [0xde5c, 0xde5c], /* Low Surrogate */ + [0xde5d, 0xde5d], /* Low Surrogate */ + [0xde5e, 0xde5e], /* Low Surrogate */ + [0xde5f, 0xde5f], /* Low Surrogate */ + [0xde60, 0xde60], /* Low Surrogate */ + [0xde61, 0xde61], /* Low Surrogate */ + [0xde62, 0xde62], /* Low Surrogate */ + [0xde63, 0xde63], /* Low Surrogate */ + [0xde64, 0xde64], /* Low Surrogate */ + [0xde65, 0xde65], /* Low Surrogate */ + [0xde66, 0xde66], /* Low Surrogate */ + [0xde67, 0xde67], /* Low Surrogate */ + [0xde68, 0xde68], /* Low Surrogate */ + [0xde69, 0xde69], /* Low Surrogate */ + [0xde6a, 0xde6a], /* Low Surrogate */ + [0xde6b, 0xde6b], /* Low Surrogate */ + [0xde6c, 0xde6c], /* Low Surrogate */ + [0xde6d, 0xde6d], /* Low Surrogate */ + [0xde6e, 0xde6e], /* Low Surrogate */ + [0xde6f, 0xde6f], /* Low Surrogate */ + [0xde70, 0xde70], /* Low Surrogate */ + [0xde71, 0xde71], /* Low Surrogate */ + [0xde72, 0xde72], /* Low Surrogate */ + [0xde73, 0xde73], /* Low Surrogate */ + [0xde74, 0xde74], /* Low Surrogate */ + [0xde75, 0xde75], /* Low Surrogate */ + [0xde76, 0xde76], /* Low Surrogate */ + [0xde77, 0xde77], /* Low Surrogate */ + [0xde78, 0xde78], /* Low Surrogate */ + [0xde79, 0xde79], /* Low Surrogate */ + [0xde7a, 0xde7a], /* Low Surrogate */ + [0xde7b, 0xde7b], /* Low Surrogate */ + [0xde7c, 0xde7c], /* Low Surrogate */ + [0xde7d, 0xde7d], /* Low Surrogate */ + [0xde7e, 0xde7e], /* Low Surrogate */ + [0xde7f, 0xde7f], /* Low Surrogate */ + [0xde80, 0xde80], /* Low Surrogate */ + [0xde81, 0xde81], /* Low Surrogate */ + [0xde82, 0xde82], /* Low Surrogate */ + [0xde83, 0xde83], /* Low Surrogate */ + [0xde84, 0xde84], /* Low Surrogate */ + [0xde85, 0xde85], /* Low Surrogate */ + [0xde86, 0xde86], /* Low Surrogate */ + [0xde87, 0xde87], /* Low Surrogate */ + [0xde88, 0xde88], /* Low Surrogate */ + [0xde89, 0xde89], /* Low Surrogate */ + [0xde8a, 0xde8a], /* Low Surrogate */ + [0xde8b, 0xde8b], /* Low Surrogate */ + [0xde8c, 0xde8c], /* Low Surrogate */ + [0xde8d, 0xde8d], /* Low Surrogate */ + [0xde8e, 0xde8e], /* Low Surrogate */ + [0xde8f, 0xde8f], /* Low Surrogate */ + [0xde90, 0xde90], /* Low Surrogate */ + [0xde91, 0xde91], /* Low Surrogate */ + [0xde92, 0xde92], /* Low Surrogate */ + [0xde93, 0xde93], /* Low Surrogate */ + [0xde94, 0xde94], /* Low Surrogate */ + [0xde95, 0xde95], /* Low Surrogate */ + [0xde96, 0xde96], /* Low Surrogate */ + [0xde97, 0xde97], /* Low Surrogate */ + [0xde98, 0xde98], /* Low Surrogate */ + [0xde99, 0xde99], /* Low Surrogate */ + [0xde9a, 0xde9a], /* Low Surrogate */ + [0xde9b, 0xde9b], /* Low Surrogate */ + [0xde9c, 0xde9c], /* Low Surrogate */ + [0xde9d, 0xde9d], /* Low Surrogate */ + [0xde9e, 0xde9e], /* Low Surrogate */ + [0xde9f, 0xde9f], /* Low Surrogate */ + [0xdea0, 0xdea0], /* Low Surrogate */ + [0xdea1, 0xdea1], /* Low Surrogate */ + [0xdea2, 0xdea2], /* Low Surrogate */ + [0xdea3, 0xdea3], /* Low Surrogate */ + [0xdea4, 0xdea4], /* Low Surrogate */ + [0xdea5, 0xdea5], /* Low Surrogate */ + [0xdea6, 0xdea6], /* Low Surrogate */ + [0xdea7, 0xdea7], /* Low Surrogate */ + [0xdea8, 0xdea8], /* Low Surrogate */ + [0xdea9, 0xdea9], /* Low Surrogate */ + [0xdeaa, 0xdeaa], /* Low Surrogate */ + [0xdeab, 0xdeab], /* Low Surrogate */ + [0xdeac, 0xdeac], /* Low Surrogate */ + [0xdead, 0xdead], /* Low Surrogate */ + [0xdeae, 0xdeae], /* Low Surrogate */ + [0xdeaf, 0xdeaf], /* Low Surrogate */ + [0xdeb0, 0xdeb0], /* Low Surrogate */ + [0xdeb1, 0xdeb1], /* Low Surrogate */ + [0xdeb2, 0xdeb2], /* Low Surrogate */ + [0xdeb3, 0xdeb3], /* Low Surrogate */ + [0xdeb4, 0xdeb4], /* Low Surrogate */ + [0xdeb5, 0xdeb5], /* Low Surrogate */ + [0xdeb6, 0xdeb6], /* Low Surrogate */ + [0xdeb7, 0xdeb7], /* Low Surrogate */ + [0xdeb8, 0xdeb8], /* Low Surrogate */ + [0xdeb9, 0xdeb9], /* Low Surrogate */ + [0xdeba, 0xdeba], /* Low Surrogate */ + [0xdebb, 0xdebb], /* Low Surrogate */ + [0xdebc, 0xdebc], /* Low Surrogate */ + [0xdebd, 0xdebd], /* Low Surrogate */ + [0xdebe, 0xdebe], /* Low Surrogate */ + [0xdebf, 0xdebf], /* Low Surrogate */ + [0xdec0, 0xdec0], /* Low Surrogate */ + [0xdec1, 0xdec1], /* Low Surrogate */ + [0xdec2, 0xdec2], /* Low Surrogate */ + [0xdec3, 0xdec3], /* Low Surrogate */ + [0xdec4, 0xdec4], /* Low Surrogate */ + [0xdec5, 0xdec5], /* Low Surrogate */ + [0xdec6, 0xdec6], /* Low Surrogate */ + [0xdec7, 0xdec7], /* Low Surrogate */ + [0xdec8, 0xdec8], /* Low Surrogate */ + [0xdec9, 0xdec9], /* Low Surrogate */ + [0xdeca, 0xdeca], /* Low Surrogate */ + [0xdecb, 0xdecb], /* Low Surrogate */ + [0xdecc, 0xdecc], /* Low Surrogate */ + [0xdecd, 0xdecd], /* Low Surrogate */ + [0xdece, 0xdece], /* Low Surrogate */ + [0xdecf, 0xdecf], /* Low Surrogate */ + [0xded0, 0xded0], /* Low Surrogate */ + [0xded1, 0xded1], /* Low Surrogate */ + [0xded2, 0xded2], /* Low Surrogate */ + [0xded3, 0xded3], /* Low Surrogate */ + [0xded4, 0xded4], /* Low Surrogate */ + [0xded5, 0xded5], /* Low Surrogate */ + [0xded6, 0xded6], /* Low Surrogate */ + [0xded7, 0xded7], /* Low Surrogate */ + [0xded8, 0xded8], /* Low Surrogate */ + [0xded9, 0xded9], /* Low Surrogate */ + [0xdeda, 0xdeda], /* Low Surrogate */ + [0xdedb, 0xdedb], /* Low Surrogate */ + [0xdedc, 0xdedc], /* Low Surrogate */ + [0xdedd, 0xdedd], /* Low Surrogate */ + [0xdede, 0xdede], /* Low Surrogate */ + [0xdedf, 0xdedf], /* Low Surrogate */ + [0xdee0, 0xdee0], /* Low Surrogate */ + [0xdee1, 0xdee1], /* Low Surrogate */ + [0xdee2, 0xdee2], /* Low Surrogate */ + [0xdee3, 0xdee3], /* Low Surrogate */ + [0xdee4, 0xdee4], /* Low Surrogate */ + [0xdee5, 0xdee5], /* Low Surrogate */ + [0xdee6, 0xdee6], /* Low Surrogate */ + [0xdee7, 0xdee7], /* Low Surrogate */ + [0xdee8, 0xdee8], /* Low Surrogate */ + [0xdee9, 0xdee9], /* Low Surrogate */ + [0xdeea, 0xdeea], /* Low Surrogate */ + [0xdeeb, 0xdeeb], /* Low Surrogate */ + [0xdeec, 0xdeec], /* Low Surrogate */ + [0xdeed, 0xdeed], /* Low Surrogate */ + [0xdeee, 0xdeee], /* Low Surrogate */ + [0xdeef, 0xdeef], /* Low Surrogate */ + [0xdef0, 0xdef0], /* Low Surrogate */ + [0xdef1, 0xdef1], /* Low Surrogate */ + [0xdef2, 0xdef2], /* Low Surrogate */ + [0xdef3, 0xdef3], /* Low Surrogate */ + [0xdef4, 0xdef4], /* Low Surrogate */ + [0xdef5, 0xdef5], /* Low Surrogate */ + [0xdef6, 0xdef6], /* Low Surrogate */ + [0xdef7, 0xdef7], /* Low Surrogate */ + [0xdef8, 0xdef8], /* Low Surrogate */ + [0xdef9, 0xdef9], /* Low Surrogate */ + [0xdefa, 0xdefa], /* Low Surrogate */ + [0xdefb, 0xdefb], /* Low Surrogate */ + [0xdefc, 0xdefc], /* Low Surrogate */ + [0xdefd, 0xdefd], /* Low Surrogate */ + [0xdefe, 0xdefe], /* Low Surrogate */ + [0xdeff, 0xdeff], /* Low Surrogate */ + [0xdf00, 0xdf00], /* Low Surrogate */ + [0xdf01, 0xdf01], /* Low Surrogate */ + [0xdf02, 0xdf02], /* Low Surrogate */ + [0xdf03, 0xdf03], /* Low Surrogate */ + [0xdf04, 0xdf04], /* Low Surrogate */ + [0xdf05, 0xdf05], /* Low Surrogate */ + [0xdf06, 0xdf06], /* Low Surrogate */ + [0xdf07, 0xdf07], /* Low Surrogate */ + [0xdf08, 0xdf08], /* Low Surrogate */ + [0xdf09, 0xdf09], /* Low Surrogate */ + [0xdf0a, 0xdf0a], /* Low Surrogate */ + [0xdf0b, 0xdf0b], /* Low Surrogate */ + [0xdf0c, 0xdf0c], /* Low Surrogate */ + [0xdf0d, 0xdf0d], /* Low Surrogate */ + [0xdf0e, 0xdf0e], /* Low Surrogate */ + [0xdf0f, 0xdf0f], /* Low Surrogate */ + [0xdf10, 0xdf10], /* Low Surrogate */ + [0xdf11, 0xdf11], /* Low Surrogate */ + [0xdf12, 0xdf12], /* Low Surrogate */ + [0xdf13, 0xdf13], /* Low Surrogate */ + [0xdf14, 0xdf14], /* Low Surrogate */ + [0xdf15, 0xdf15], /* Low Surrogate */ + [0xdf16, 0xdf16], /* Low Surrogate */ + [0xdf17, 0xdf17], /* Low Surrogate */ + [0xdf18, 0xdf18], /* Low Surrogate */ + [0xdf19, 0xdf19], /* Low Surrogate */ + [0xdf1a, 0xdf1a], /* Low Surrogate */ + [0xdf1b, 0xdf1b], /* Low Surrogate */ + [0xdf1c, 0xdf1c], /* Low Surrogate */ + [0xdf1d, 0xdf1d], /* Low Surrogate */ + [0xdf1e, 0xdf1e], /* Low Surrogate */ + [0xdf1f, 0xdf1f], /* Low Surrogate */ + [0xdf20, 0xdf20], /* Low Surrogate */ + [0xdf21, 0xdf21], /* Low Surrogate */ + [0xdf22, 0xdf22], /* Low Surrogate */ + [0xdf23, 0xdf23], /* Low Surrogate */ + [0xdf24, 0xdf24], /* Low Surrogate */ + [0xdf25, 0xdf25], /* Low Surrogate */ + [0xdf26, 0xdf26], /* Low Surrogate */ + [0xdf27, 0xdf27], /* Low Surrogate */ + [0xdf28, 0xdf28], /* Low Surrogate */ + [0xdf29, 0xdf29], /* Low Surrogate */ + [0xdf2a, 0xdf2a], /* Low Surrogate */ + [0xdf2b, 0xdf2b], /* Low Surrogate */ + [0xdf2c, 0xdf2c], /* Low Surrogate */ + [0xdf2d, 0xdf2d], /* Low Surrogate */ + [0xdf2e, 0xdf2e], /* Low Surrogate */ + [0xdf2f, 0xdf2f], /* Low Surrogate */ + [0xdf30, 0xdf30], /* Low Surrogate */ + [0xdf31, 0xdf31], /* Low Surrogate */ + [0xdf32, 0xdf32], /* Low Surrogate */ + [0xdf33, 0xdf33], /* Low Surrogate */ + [0xdf34, 0xdf34], /* Low Surrogate */ + [0xdf35, 0xdf35], /* Low Surrogate */ + [0xdf36, 0xdf36], /* Low Surrogate */ + [0xdf37, 0xdf37], /* Low Surrogate */ + [0xdf38, 0xdf38], /* Low Surrogate */ + [0xdf39, 0xdf39], /* Low Surrogate */ + [0xdf3a, 0xdf3a], /* Low Surrogate */ + [0xdf3b, 0xdf3b], /* Low Surrogate */ + [0xdf3c, 0xdf3c], /* Low Surrogate */ + [0xdf3d, 0xdf3d], /* Low Surrogate */ + [0xdf3e, 0xdf3e], /* Low Surrogate */ + [0xdf3f, 0xdf3f], /* Low Surrogate */ + [0xdf40, 0xdf40], /* Low Surrogate */ + [0xdf41, 0xdf41], /* Low Surrogate */ + [0xdf42, 0xdf42], /* Low Surrogate */ + [0xdf43, 0xdf43], /* Low Surrogate */ + [0xdf44, 0xdf44], /* Low Surrogate */ + [0xdf45, 0xdf45], /* Low Surrogate */ + [0xdf46, 0xdf46], /* Low Surrogate */ + [0xdf47, 0xdf47], /* Low Surrogate */ + [0xdf48, 0xdf48], /* Low Surrogate */ + [0xdf49, 0xdf49], /* Low Surrogate */ + [0xdf4a, 0xdf4a], /* Low Surrogate */ + [0xdf4b, 0xdf4b], /* Low Surrogate */ + [0xdf4c, 0xdf4c], /* Low Surrogate */ + [0xdf4d, 0xdf4d], /* Low Surrogate */ + [0xdf4e, 0xdf4e], /* Low Surrogate */ + [0xdf4f, 0xdf4f], /* Low Surrogate */ + [0xdf50, 0xdf50], /* Low Surrogate */ + [0xdf51, 0xdf51], /* Low Surrogate */ + [0xdf52, 0xdf52], /* Low Surrogate */ + [0xdf53, 0xdf53], /* Low Surrogate */ + [0xdf54, 0xdf54], /* Low Surrogate */ + [0xdf55, 0xdf55], /* Low Surrogate */ + [0xdf56, 0xdf56], /* Low Surrogate */ + [0xdf57, 0xdf57], /* Low Surrogate */ + [0xdf58, 0xdf58], /* Low Surrogate */ + [0xdf59, 0xdf59], /* Low Surrogate */ + [0xdf5a, 0xdf5a], /* Low Surrogate */ + [0xdf5b, 0xdf5b], /* Low Surrogate */ + [0xdf5c, 0xdf5c], /* Low Surrogate */ + [0xdf5d, 0xdf5d], /* Low Surrogate */ + [0xdf5e, 0xdf5e], /* Low Surrogate */ + [0xdf5f, 0xdf5f], /* Low Surrogate */ + [0xdf60, 0xdf60], /* Low Surrogate */ + [0xdf61, 0xdf61], /* Low Surrogate */ + [0xdf62, 0xdf62], /* Low Surrogate */ + [0xdf63, 0xdf63], /* Low Surrogate */ + [0xdf64, 0xdf64], /* Low Surrogate */ + [0xdf65, 0xdf65], /* Low Surrogate */ + [0xdf66, 0xdf66], /* Low Surrogate */ + [0xdf67, 0xdf67], /* Low Surrogate */ + [0xdf68, 0xdf68], /* Low Surrogate */ + [0xdf69, 0xdf69], /* Low Surrogate */ + [0xdf6a, 0xdf6a], /* Low Surrogate */ + [0xdf6b, 0xdf6b], /* Low Surrogate */ + [0xdf6c, 0xdf6c], /* Low Surrogate */ + [0xdf6d, 0xdf6d], /* Low Surrogate */ + [0xdf6e, 0xdf6e], /* Low Surrogate */ + [0xdf6f, 0xdf6f], /* Low Surrogate */ + [0xdf70, 0xdf70], /* Low Surrogate */ + [0xdf71, 0xdf71], /* Low Surrogate */ + [0xdf72, 0xdf72], /* Low Surrogate */ + [0xdf73, 0xdf73], /* Low Surrogate */ + [0xdf74, 0xdf74], /* Low Surrogate */ + [0xdf75, 0xdf75], /* Low Surrogate */ + [0xdf76, 0xdf76], /* Low Surrogate */ + [0xdf77, 0xdf77], /* Low Surrogate */ + [0xdf78, 0xdf78], /* Low Surrogate */ + [0xdf79, 0xdf79], /* Low Surrogate */ + [0xdf7a, 0xdf7a], /* Low Surrogate */ + [0xdf7b, 0xdf7b], /* Low Surrogate */ + [0xdf7c, 0xdf7c], /* Low Surrogate */ + [0xdf7d, 0xdf7d], /* Low Surrogate */ + [0xdf7e, 0xdf7e], /* Low Surrogate */ + [0xdf7f, 0xdf7f], /* Low Surrogate */ + [0xdf80, 0xdf80], /* Low Surrogate */ + [0xdf81, 0xdf81], /* Low Surrogate */ + [0xdf82, 0xdf82], /* Low Surrogate */ + [0xdf83, 0xdf83], /* Low Surrogate */ + [0xdf84, 0xdf84], /* Low Surrogate */ + [0xdf85, 0xdf85], /* Low Surrogate */ + [0xdf86, 0xdf86], /* Low Surrogate */ + [0xdf87, 0xdf87], /* Low Surrogate */ + [0xdf88, 0xdf88], /* Low Surrogate */ + [0xdf89, 0xdf89], /* Low Surrogate */ + [0xdf8a, 0xdf8a], /* Low Surrogate */ + [0xdf8b, 0xdf8b], /* Low Surrogate */ + [0xdf8c, 0xdf8c], /* Low Surrogate */ + [0xdf8d, 0xdf8d], /* Low Surrogate */ + [0xdf8e, 0xdf8e], /* Low Surrogate */ + [0xdf8f, 0xdf8f], /* Low Surrogate */ + [0xdf90, 0xdf90], /* Low Surrogate */ + [0xdf91, 0xdf91], /* Low Surrogate */ + [0xdf92, 0xdf92], /* Low Surrogate */ + [0xdf93, 0xdf93], /* Low Surrogate */ + [0xdf94, 0xdf94], /* Low Surrogate */ + [0xdf95, 0xdf95], /* Low Surrogate */ + [0xdf96, 0xdf96], /* Low Surrogate */ + [0xdf97, 0xdf97], /* Low Surrogate */ + [0xdf98, 0xdf98], /* Low Surrogate */ + [0xdf99, 0xdf99], /* Low Surrogate */ + [0xdf9a, 0xdf9a], /* Low Surrogate */ + [0xdf9b, 0xdf9b], /* Low Surrogate */ + [0xdf9c, 0xdf9c], /* Low Surrogate */ + [0xdf9d, 0xdf9d], /* Low Surrogate */ + [0xdf9e, 0xdf9e], /* Low Surrogate */ + [0xdf9f, 0xdf9f], /* Low Surrogate */ + [0xdfa0, 0xdfa0], /* Low Surrogate */ + [0xdfa1, 0xdfa1], /* Low Surrogate */ + [0xdfa2, 0xdfa2], /* Low Surrogate */ + [0xdfa3, 0xdfa3], /* Low Surrogate */ + [0xdfa4, 0xdfa4], /* Low Surrogate */ + [0xdfa5, 0xdfa5], /* Low Surrogate */ + [0xdfa6, 0xdfa6], /* Low Surrogate */ + [0xdfa7, 0xdfa7], /* Low Surrogate */ + [0xdfa8, 0xdfa8], /* Low Surrogate */ + [0xdfa9, 0xdfa9], /* Low Surrogate */ + [0xdfaa, 0xdfaa], /* Low Surrogate */ + [0xdfab, 0xdfab], /* Low Surrogate */ + [0xdfac, 0xdfac], /* Low Surrogate */ + [0xdfad, 0xdfad], /* Low Surrogate */ + [0xdfae, 0xdfae], /* Low Surrogate */ + [0xdfaf, 0xdfaf], /* Low Surrogate */ + [0xdfb0, 0xdfb0], /* Low Surrogate */ + [0xdfb1, 0xdfb1], /* Low Surrogate */ + [0xdfb2, 0xdfb2], /* Low Surrogate */ + [0xdfb3, 0xdfb3], /* Low Surrogate */ + [0xdfb4, 0xdfb4], /* Low Surrogate */ + [0xdfb5, 0xdfb5], /* Low Surrogate */ + [0xdfb6, 0xdfb6], /* Low Surrogate */ + [0xdfb7, 0xdfb7], /* Low Surrogate */ + [0xdfb8, 0xdfb8], /* Low Surrogate */ + [0xdfb9, 0xdfb9], /* Low Surrogate */ + [0xdfba, 0xdfba], /* Low Surrogate */ + [0xdfbb, 0xdfbb], /* Low Surrogate */ + [0xdfbc, 0xdfbc], /* Low Surrogate */ + [0xdfbd, 0xdfbd], /* Low Surrogate */ + [0xdfbe, 0xdfbe], /* Low Surrogate */ + [0xdfbf, 0xdfbf], /* Low Surrogate */ + [0xdfc0, 0xdfc0], /* Low Surrogate */ + [0xdfc1, 0xdfc1], /* Low Surrogate */ + [0xdfc2, 0xdfc2], /* Low Surrogate */ + [0xdfc3, 0xdfc3], /* Low Surrogate */ + [0xdfc4, 0xdfc4], /* Low Surrogate */ + [0xdfc5, 0xdfc5], /* Low Surrogate */ + [0xdfc6, 0xdfc6], /* Low Surrogate */ + [0xdfc7, 0xdfc7], /* Low Surrogate */ + [0xdfc8, 0xdfc8], /* Low Surrogate */ + [0xdfc9, 0xdfc9], /* Low Surrogate */ + [0xdfca, 0xdfca], /* Low Surrogate */ + [0xdfcb, 0xdfcb], /* Low Surrogate */ + [0xdfcc, 0xdfcc], /* Low Surrogate */ + [0xdfcd, 0xdfcd], /* Low Surrogate */ + [0xdfce, 0xdfce], /* Low Surrogate */ + [0xdfcf, 0xdfcf], /* Low Surrogate */ + [0xdfd0, 0xdfd0], /* Low Surrogate */ + [0xdfd1, 0xdfd1], /* Low Surrogate */ + [0xdfd2, 0xdfd2], /* Low Surrogate */ + [0xdfd3, 0xdfd3], /* Low Surrogate */ + [0xdfd4, 0xdfd4], /* Low Surrogate */ + [0xdfd5, 0xdfd5], /* Low Surrogate */ + [0xdfd6, 0xdfd6], /* Low Surrogate */ + [0xdfd7, 0xdfd7], /* Low Surrogate */ + [0xdfd8, 0xdfd8], /* Low Surrogate */ + [0xdfd9, 0xdfd9], /* Low Surrogate */ + [0xdfda, 0xdfda], /* Low Surrogate */ + [0xdfdb, 0xdfdb], /* Low Surrogate */ + [0xdfdc, 0xdfdc], /* Low Surrogate */ + [0xdfdd, 0xdfdd], /* Low Surrogate */ + [0xdfde, 0xdfde], /* Low Surrogate */ + [0xdfdf, 0xdfdf], /* Low Surrogate */ + [0xdfe0, 0xdfe0], /* Low Surrogate */ + [0xdfe1, 0xdfe1], /* Low Surrogate */ + [0xdfe2, 0xdfe2], /* Low Surrogate */ + [0xdfe3, 0xdfe3], /* Low Surrogate */ + [0xdfe4, 0xdfe4], /* Low Surrogate */ + [0xdfe5, 0xdfe5], /* Low Surrogate */ + [0xdfe6, 0xdfe6], /* Low Surrogate */ + [0xdfe7, 0xdfe7], /* Low Surrogate */ + [0xdfe8, 0xdfe8], /* Low Surrogate */ + [0xdfe9, 0xdfe9], /* Low Surrogate */ + [0xdfea, 0xdfea], /* Low Surrogate */ + [0xdfeb, 0xdfeb], /* Low Surrogate */ + [0xdfec, 0xdfec], /* Low Surrogate */ + [0xdfed, 0xdfed], /* Low Surrogate */ + [0xdfee, 0xdfee], /* Low Surrogate */ + [0xdfef, 0xdfef], /* Low Surrogate */ + [0xdff0, 0xdff0], /* Low Surrogate */ + [0xdff1, 0xdff1], /* Low Surrogate */ + [0xdff2, 0xdff2], /* Low Surrogate */ + [0xdff3, 0xdff3], /* Low Surrogate */ + [0xdff4, 0xdff4], /* Low Surrogate */ + [0xdff5, 0xdff5], /* Low Surrogate */ + [0xdff6, 0xdff6], /* Low Surrogate */ + [0xdff7, 0xdff7], /* Low Surrogate */ + [0xdff8, 0xdff8], /* Low Surrogate */ + [0xdff9, 0xdff9], /* Low Surrogate */ + [0xdffa, 0xdffa], /* Low Surrogate */ + [0xdffb, 0xdffb], /* Low Surrogate */ + [0xdffc, 0xdffc], /* Low Surrogate */ + [0xdffd, 0xdffd], /* Low Surrogate */ + [0xdffe, 0xdffe], /* Low Surrogate */ + [0xdfff, 0xdfff], /* Low Surrogate */ + [0xe000, 0xe000], /* Private Use */ + [0xe001, 0xe001], /* Private Use */ + [0xe002, 0xe002], /* Private Use */ + [0xe003, 0xe003], /* Private Use */ + [0xe004, 0xe004], /* Private Use */ + [0xe005, 0xe005], /* Private Use */ + [0xe006, 0xe006], /* Private Use */ + [0xe007, 0xe007], /* Private Use */ + [0xe008, 0xe008], /* Private Use */ + [0xe009, 0xe009], /* Private Use */ + [0xe00a, 0xe00a], /* Private Use */ + [0xe00b, 0xe00b], /* Private Use */ + [0xe00c, 0xe00c], /* Private Use */ + [0xe00d, 0xe00d], /* Private Use */ + [0xe00e, 0xe00e], /* Private Use */ + [0xe00f, 0xe00f], /* Private Use */ + [0xe010, 0xe010], /* Private Use */ + [0xe011, 0xe011], /* Private Use */ + [0xe012, 0xe012], /* Private Use */ + [0xe013, 0xe013], /* Private Use */ + [0xe014, 0xe014], /* Private Use */ + [0xe015, 0xe015], /* Private Use */ + [0xe016, 0xe016], /* Private Use */ + [0xe017, 0xe017], /* Private Use */ + [0xe018, 0xe018], /* Private Use */ + [0xe019, 0xe019], /* Private Use */ + [0xe01a, 0xe01a], /* Private Use */ + [0xe01b, 0xe01b], /* Private Use */ + [0xe01c, 0xe01c], /* Private Use */ + [0xe01d, 0xe01d], /* Private Use */ + [0xe01e, 0xe01e], /* Private Use */ + [0xe01f, 0xe01f], /* Private Use */ + [0xe020, 0xe020], /* Private Use */ + [0xe021, 0xe021], /* Private Use */ + [0xe022, 0xe022], /* Private Use */ + [0xe023, 0xe023], /* Private Use */ + [0xe024, 0xe024], /* Private Use */ + [0xe025, 0xe025], /* Private Use */ + [0xe026, 0xe026], /* Private Use */ + [0xe027, 0xe027], /* Private Use */ + [0xe028, 0xe028], /* Private Use */ + [0xe029, 0xe029], /* Private Use */ + [0xe02a, 0xe02a], /* Private Use */ + [0xe02b, 0xe02b], /* Private Use */ + [0xe02c, 0xe02c], /* Private Use */ + [0xe02d, 0xe02d], /* Private Use */ + [0xe02e, 0xe02e], /* Private Use */ + [0xe02f, 0xe02f], /* Private Use */ + [0xe030, 0xe030], /* Private Use */ + [0xe031, 0xe031], /* Private Use */ + [0xe032, 0xe032], /* Private Use */ + [0xe033, 0xe033], /* Private Use */ + [0xe034, 0xe034], /* Private Use */ + [0xe035, 0xe035], /* Private Use */ + [0xe036, 0xe036], /* Private Use */ + [0xe037, 0xe037], /* Private Use */ + [0xe038, 0xe038], /* Private Use */ + [0xe039, 0xe039], /* Private Use */ + [0xe03a, 0xe03a], /* Private Use */ + [0xe03b, 0xe03b], /* Private Use */ + [0xe03c, 0xe03c], /* Private Use */ + [0xe03d, 0xe03d], /* Private Use */ + [0xe03e, 0xe03e], /* Private Use */ + [0xe03f, 0xe03f], /* Private Use */ + [0xe040, 0xe040], /* Private Use */ + [0xe041, 0xe041], /* Private Use */ + [0xe042, 0xe042], /* Private Use */ + [0xe043, 0xe043], /* Private Use */ + [0xe044, 0xe044], /* Private Use */ + [0xe045, 0xe045], /* Private Use */ + [0xe046, 0xe046], /* Private Use */ + [0xe047, 0xe047], /* Private Use */ + [0xe048, 0xe048], /* Private Use */ + [0xe049, 0xe049], /* Private Use */ + [0xe04a, 0xe04a], /* Private Use */ + [0xe04b, 0xe04b], /* Private Use */ + [0xe04c, 0xe04c], /* Private Use */ + [0xe04d, 0xe04d], /* Private Use */ + [0xe04e, 0xe04e], /* Private Use */ + [0xe04f, 0xe04f], /* Private Use */ + [0xe050, 0xe050], /* Private Use */ + [0xe051, 0xe051], /* Private Use */ + [0xe052, 0xe052], /* Private Use */ + [0xe053, 0xe053], /* Private Use */ + [0xe054, 0xe054], /* Private Use */ + [0xe055, 0xe055], /* Private Use */ + [0xe056, 0xe056], /* Private Use */ + [0xe057, 0xe057], /* Private Use */ + [0xe058, 0xe058], /* Private Use */ + [0xe059, 0xe059], /* Private Use */ + [0xe05a, 0xe05a], /* Private Use */ + [0xe05b, 0xe05b], /* Private Use */ + [0xe05c, 0xe05c], /* Private Use */ + [0xe05d, 0xe05d], /* Private Use */ + [0xe05e, 0xe05e], /* Private Use */ + [0xe05f, 0xe05f], /* Private Use */ + [0xe060, 0xe060], /* Private Use */ + [0xe061, 0xe061], /* Private Use */ + [0xe062, 0xe062], /* Private Use */ + [0xe063, 0xe063], /* Private Use */ + [0xe064, 0xe064], /* Private Use */ + [0xe065, 0xe065], /* Private Use */ + [0xe066, 0xe066], /* Private Use */ + [0xe067, 0xe067], /* Private Use */ + [0xe068, 0xe068], /* Private Use */ + [0xe069, 0xe069], /* Private Use */ + [0xe06a, 0xe06a], /* Private Use */ + [0xe06b, 0xe06b], /* Private Use */ + [0xe06c, 0xe06c], /* Private Use */ + [0xe06d, 0xe06d], /* Private Use */ + [0xe06e, 0xe06e], /* Private Use */ + [0xe06f, 0xe06f], /* Private Use */ + [0xe070, 0xe070], /* Private Use */ + [0xe071, 0xe071], /* Private Use */ + [0xe072, 0xe072], /* Private Use */ + [0xe073, 0xe073], /* Private Use */ + [0xe074, 0xe074], /* Private Use */ + [0xe075, 0xe075], /* Private Use */ + [0xe076, 0xe076], /* Private Use */ + [0xe077, 0xe077], /* Private Use */ + [0xe078, 0xe078], /* Private Use */ + [0xe079, 0xe079], /* Private Use */ + [0xe07a, 0xe07a], /* Private Use */ + [0xe07b, 0xe07b], /* Private Use */ + [0xe07c, 0xe07c], /* Private Use */ + [0xe07d, 0xe07d], /* Private Use */ + [0xe07e, 0xe07e], /* Private Use */ + [0xe07f, 0xe07f], /* Private Use */ + [0xe080, 0xe080], /* Private Use */ + [0xe081, 0xe081], /* Private Use */ + [0xe082, 0xe082], /* Private Use */ + [0xe083, 0xe083], /* Private Use */ + [0xe084, 0xe084], /* Private Use */ + [0xe085, 0xe085], /* Private Use */ + [0xe086, 0xe086], /* Private Use */ + [0xe087, 0xe087], /* Private Use */ + [0xe088, 0xe088], /* Private Use */ + [0xe089, 0xe089], /* Private Use */ + [0xe08a, 0xe08a], /* Private Use */ + [0xe08b, 0xe08b], /* Private Use */ + [0xe08c, 0xe08c], /* Private Use */ + [0xe08d, 0xe08d], /* Private Use */ + [0xe08e, 0xe08e], /* Private Use */ + [0xe08f, 0xe08f], /* Private Use */ + [0xe090, 0xe090], /* Private Use */ + [0xe091, 0xe091], /* Private Use */ + [0xe092, 0xe092], /* Private Use */ + [0xe093, 0xe093], /* Private Use */ + [0xe094, 0xe094], /* Private Use */ + [0xe095, 0xe095], /* Private Use */ + [0xe096, 0xe096], /* Private Use */ + [0xe097, 0xe097], /* Private Use */ + [0xe098, 0xe098], /* Private Use */ + [0xe099, 0xe099], /* Private Use */ + [0xe09a, 0xe09a], /* Private Use */ + [0xe09b, 0xe09b], /* Private Use */ + [0xe09c, 0xe09c], /* Private Use */ + [0xe09d, 0xe09d], /* Private Use */ + [0xe09e, 0xe09e], /* Private Use */ + [0xe09f, 0xe09f], /* Private Use */ + [0xe0a0, 0xe0a0], /* Private Use */ + [0xe0a1, 0xe0a1], /* Private Use */ + [0xe0a2, 0xe0a2], /* Private Use */ + [0xe0a3, 0xe0a3], /* Private Use */ + [0xe0a4, 0xe0a4], /* Private Use */ + [0xe0a5, 0xe0a5], /* Private Use */ + [0xe0a6, 0xe0a6], /* Private Use */ + [0xe0a7, 0xe0a7], /* Private Use */ + [0xe0a8, 0xe0a8], /* Private Use */ + [0xe0a9, 0xe0a9], /* Private Use */ + [0xe0aa, 0xe0aa], /* Private Use */ + [0xe0ab, 0xe0ab], /* Private Use */ + [0xe0ac, 0xe0ac], /* Private Use */ + [0xe0ad, 0xe0ad], /* Private Use */ + [0xe0ae, 0xe0ae], /* Private Use */ + [0xe0af, 0xe0af], /* Private Use */ + [0xe0b0, 0xe0b0], /* Private Use */ + [0xe0b1, 0xe0b1], /* Private Use */ + [0xe0b2, 0xe0b2], /* Private Use */ + [0xe0b3, 0xe0b3], /* Private Use */ + [0xe0b4, 0xe0b4], /* Private Use */ + [0xe0b5, 0xe0b5], /* Private Use */ + [0xe0b6, 0xe0b6], /* Private Use */ + [0xe0b7, 0xe0b7], /* Private Use */ + [0xe0b8, 0xe0b8], /* Private Use */ + [0xe0b9, 0xe0b9], /* Private Use */ + [0xe0ba, 0xe0ba], /* Private Use */ + [0xe0bb, 0xe0bb], /* Private Use */ + [0xe0bc, 0xe0bc], /* Private Use */ + [0xe0bd, 0xe0bd], /* Private Use */ + [0xe0be, 0xe0be], /* Private Use */ + [0xe0bf, 0xe0bf], /* Private Use */ + [0xe0c0, 0xe0c0], /* Private Use */ + [0xe0c1, 0xe0c1], /* Private Use */ + [0xe0c2, 0xe0c2], /* Private Use */ + [0xe0c3, 0xe0c3], /* Private Use */ + [0xe0c4, 0xe0c4], /* Private Use */ + [0xe0c5, 0xe0c5], /* Private Use */ + [0xe0c6, 0xe0c6], /* Private Use */ + [0xe0c7, 0xe0c7], /* Private Use */ + [0xe0c8, 0xe0c8], /* Private Use */ + [0xe0c9, 0xe0c9], /* Private Use */ + [0xe0ca, 0xe0ca], /* Private Use */ + [0xe0cb, 0xe0cb], /* Private Use */ + [0xe0cc, 0xe0cc], /* Private Use */ + [0xe0cd, 0xe0cd], /* Private Use */ + [0xe0ce, 0xe0ce], /* Private Use */ + [0xe0cf, 0xe0cf], /* Private Use */ + [0xe0d0, 0xe0d0], /* Private Use */ + [0xe0d1, 0xe0d1], /* Private Use */ + [0xe0d2, 0xe0d2], /* Private Use */ + [0xe0d3, 0xe0d3], /* Private Use */ + [0xe0d4, 0xe0d4], /* Private Use */ + [0xe0d5, 0xe0d5], /* Private Use */ + [0xe0d6, 0xe0d6], /* Private Use */ + [0xe0d7, 0xe0d7], /* Private Use */ + [0xe0d8, 0xe0d8], /* Private Use */ + [0xe0d9, 0xe0d9], /* Private Use */ + [0xe0da, 0xe0da], /* Private Use */ + [0xe0db, 0xe0db], /* Private Use */ + [0xe0dc, 0xe0dc], /* Private Use */ + [0xe0dd, 0xe0dd], /* Private Use */ + [0xe0de, 0xe0de], /* Private Use */ + [0xe0df, 0xe0df], /* Private Use */ + [0xe0e0, 0xe0e0], /* Private Use */ + [0xe0e1, 0xe0e1], /* Private Use */ + [0xe0e2, 0xe0e2], /* Private Use */ + [0xe0e3, 0xe0e3], /* Private Use */ + [0xe0e4, 0xe0e4], /* Private Use */ + [0xe0e5, 0xe0e5], /* Private Use */ + [0xe0e6, 0xe0e6], /* Private Use */ + [0xe0e7, 0xe0e7], /* Private Use */ + [0xe0e8, 0xe0e8], /* Private Use */ + [0xe0e9, 0xe0e9], /* Private Use */ + [0xe0ea, 0xe0ea], /* Private Use */ + [0xe0eb, 0xe0eb], /* Private Use */ + [0xe0ec, 0xe0ec], /* Private Use */ + [0xe0ed, 0xe0ed], /* Private Use */ + [0xe0ee, 0xe0ee], /* Private Use */ + [0xe0ef, 0xe0ef], /* Private Use */ + [0xe0f0, 0xe0f0], /* Private Use */ + [0xe0f1, 0xe0f1], /* Private Use */ + [0xe0f2, 0xe0f2], /* Private Use */ + [0xe0f3, 0xe0f3], /* Private Use */ + [0xe0f4, 0xe0f4], /* Private Use */ + [0xe0f5, 0xe0f5], /* Private Use */ + [0xe0f6, 0xe0f6], /* Private Use */ + [0xe0f7, 0xe0f7], /* Private Use */ + [0xe0f8, 0xe0f8], /* Private Use */ + [0xe0f9, 0xe0f9], /* Private Use */ + [0xe0fa, 0xe0fa], /* Private Use */ + [0xe0fb, 0xe0fb], /* Private Use */ + [0xe0fc, 0xe0fc], /* Private Use */ + [0xe0fd, 0xe0fd], /* Private Use */ + [0xe0fe, 0xe0fe], /* Private Use */ + [0xe0ff, 0xe0ff], /* Private Use */ + [0xe100, 0xe100], /* Private Use */ + [0xe101, 0xe101], /* Private Use */ + [0xe102, 0xe102], /* Private Use */ + [0xe103, 0xe103], /* Private Use */ + [0xe104, 0xe104], /* Private Use */ + [0xe105, 0xe105], /* Private Use */ + [0xe106, 0xe106], /* Private Use */ + [0xe107, 0xe107], /* Private Use */ + [0xe108, 0xe108], /* Private Use */ + [0xe109, 0xe109], /* Private Use */ + [0xe10a, 0xe10a], /* Private Use */ + [0xe10b, 0xe10b], /* Private Use */ + [0xe10c, 0xe10c], /* Private Use */ + [0xe10d, 0xe10d], /* Private Use */ + [0xe10e, 0xe10e], /* Private Use */ + [0xe10f, 0xe10f], /* Private Use */ + [0xe110, 0xe110], /* Private Use */ + [0xe111, 0xe111], /* Private Use */ + [0xe112, 0xe112], /* Private Use */ + [0xe113, 0xe113], /* Private Use */ + [0xe114, 0xe114], /* Private Use */ + [0xe115, 0xe115], /* Private Use */ + [0xe116, 0xe116], /* Private Use */ + [0xe117, 0xe117], /* Private Use */ + [0xe118, 0xe118], /* Private Use */ + [0xe119, 0xe119], /* Private Use */ + [0xe11a, 0xe11a], /* Private Use */ + [0xe11b, 0xe11b], /* Private Use */ + [0xe11c, 0xe11c], /* Private Use */ + [0xe11d, 0xe11d], /* Private Use */ + [0xe11e, 0xe11e], /* Private Use */ + [0xe11f, 0xe11f], /* Private Use */ + [0xe120, 0xe120], /* Private Use */ + [0xe121, 0xe121], /* Private Use */ + [0xe122, 0xe122], /* Private Use */ + [0xe123, 0xe123], /* Private Use */ + [0xe124, 0xe124], /* Private Use */ + [0xe125, 0xe125], /* Private Use */ + [0xe126, 0xe126], /* Private Use */ + [0xe127, 0xe127], /* Private Use */ + [0xe128, 0xe128], /* Private Use */ + [0xe129, 0xe129], /* Private Use */ + [0xe12a, 0xe12a], /* Private Use */ + [0xe12b, 0xe12b], /* Private Use */ + [0xe12c, 0xe12c], /* Private Use */ + [0xe12d, 0xe12d], /* Private Use */ + [0xe12e, 0xe12e], /* Private Use */ + [0xe12f, 0xe12f], /* Private Use */ + [0xe130, 0xe130], /* Private Use */ + [0xe131, 0xe131], /* Private Use */ + [0xe132, 0xe132], /* Private Use */ + [0xe133, 0xe133], /* Private Use */ + [0xe134, 0xe134], /* Private Use */ + [0xe135, 0xe135], /* Private Use */ + [0xe136, 0xe136], /* Private Use */ + [0xe137, 0xe137], /* Private Use */ + [0xe138, 0xe138], /* Private Use */ + [0xe139, 0xe139], /* Private Use */ + [0xe13a, 0xe13a], /* Private Use */ + [0xe13b, 0xe13b], /* Private Use */ + [0xe13c, 0xe13c], /* Private Use */ + [0xe13d, 0xe13d], /* Private Use */ + [0xe13e, 0xe13e], /* Private Use */ + [0xe13f, 0xe13f], /* Private Use */ + [0xe140, 0xe140], /* Private Use */ + [0xe141, 0xe141], /* Private Use */ + [0xe142, 0xe142], /* Private Use */ + [0xe143, 0xe143], /* Private Use */ + [0xe144, 0xe144], /* Private Use */ + [0xe145, 0xe145], /* Private Use */ + [0xe146, 0xe146], /* Private Use */ + [0xe147, 0xe147], /* Private Use */ + [0xe148, 0xe148], /* Private Use */ + [0xe149, 0xe149], /* Private Use */ + [0xe14a, 0xe14a], /* Private Use */ + [0xe14b, 0xe14b], /* Private Use */ + [0xe14c, 0xe14c], /* Private Use */ + [0xe14d, 0xe14d], /* Private Use */ + [0xe14e, 0xe14e], /* Private Use */ + [0xe14f, 0xe14f], /* Private Use */ + [0xe150, 0xe150], /* Private Use */ + [0xe151, 0xe151], /* Private Use */ + [0xe152, 0xe152], /* Private Use */ + [0xe153, 0xe153], /* Private Use */ + [0xe154, 0xe154], /* Private Use */ + [0xe155, 0xe155], /* Private Use */ + [0xe156, 0xe156], /* Private Use */ + [0xe157, 0xe157], /* Private Use */ + [0xe158, 0xe158], /* Private Use */ + [0xe159, 0xe159], /* Private Use */ + [0xe15a, 0xe15a], /* Private Use */ + [0xe15b, 0xe15b], /* Private Use */ + [0xe15c, 0xe15c], /* Private Use */ + [0xe15d, 0xe15d], /* Private Use */ + [0xe15e, 0xe15e], /* Private Use */ + [0xe15f, 0xe15f], /* Private Use */ + [0xe160, 0xe160], /* Private Use */ + [0xe161, 0xe161], /* Private Use */ + [0xe162, 0xe162], /* Private Use */ + [0xe163, 0xe163], /* Private Use */ + [0xe164, 0xe164], /* Private Use */ + [0xe165, 0xe165], /* Private Use */ + [0xe166, 0xe166], /* Private Use */ + [0xe167, 0xe167], /* Private Use */ + [0xe168, 0xe168], /* Private Use */ + [0xe169, 0xe169], /* Private Use */ + [0xe16a, 0xe16a], /* Private Use */ + [0xe16b, 0xe16b], /* Private Use */ + [0xe16c, 0xe16c], /* Private Use */ + [0xe16d, 0xe16d], /* Private Use */ + [0xe16e, 0xe16e], /* Private Use */ + [0xe16f, 0xe16f], /* Private Use */ + [0xe170, 0xe170], /* Private Use */ + [0xe171, 0xe171], /* Private Use */ + [0xe172, 0xe172], /* Private Use */ + [0xe173, 0xe173], /* Private Use */ + [0xe174, 0xe174], /* Private Use */ + [0xe175, 0xe175], /* Private Use */ + [0xe176, 0xe176], /* Private Use */ + [0xe177, 0xe177], /* Private Use */ + [0xe178, 0xe178], /* Private Use */ + [0xe179, 0xe179], /* Private Use */ + [0xe17a, 0xe17a], /* Private Use */ + [0xe17b, 0xe17b], /* Private Use */ + [0xe17c, 0xe17c], /* Private Use */ + [0xe17d, 0xe17d], /* Private Use */ + [0xe17e, 0xe17e], /* Private Use */ + [0xe17f, 0xe17f], /* Private Use */ + [0xe180, 0xe180], /* Private Use */ + [0xe181, 0xe181], /* Private Use */ + [0xe182, 0xe182], /* Private Use */ + [0xe183, 0xe183], /* Private Use */ + [0xe184, 0xe184], /* Private Use */ + [0xe185, 0xe185], /* Private Use */ + [0xe186, 0xe186], /* Private Use */ + [0xe187, 0xe187], /* Private Use */ + [0xe188, 0xe188], /* Private Use */ + [0xe189, 0xe189], /* Private Use */ + [0xe18a, 0xe18a], /* Private Use */ + [0xe18b, 0xe18b], /* Private Use */ + [0xe18c, 0xe18c], /* Private Use */ + [0xe18d, 0xe18d], /* Private Use */ + [0xe18e, 0xe18e], /* Private Use */ + [0xe18f, 0xe18f], /* Private Use */ + [0xe190, 0xe190], /* Private Use */ + [0xe191, 0xe191], /* Private Use */ + [0xe192, 0xe192], /* Private Use */ + [0xe193, 0xe193], /* Private Use */ + [0xe194, 0xe194], /* Private Use */ + [0xe195, 0xe195], /* Private Use */ + [0xe196, 0xe196], /* Private Use */ + [0xe197, 0xe197], /* Private Use */ + [0xe198, 0xe198], /* Private Use */ + [0xe199, 0xe199], /* Private Use */ + [0xe19a, 0xe19a], /* Private Use */ + [0xe19b, 0xe19b], /* Private Use */ + [0xe19c, 0xe19c], /* Private Use */ + [0xe19d, 0xe19d], /* Private Use */ + [0xe19e, 0xe19e], /* Private Use */ + [0xe19f, 0xe19f], /* Private Use */ + [0xe1a0, 0xe1a0], /* Private Use */ + [0xe1a1, 0xe1a1], /* Private Use */ + [0xe1a2, 0xe1a2], /* Private Use */ + [0xe1a3, 0xe1a3], /* Private Use */ + [0xe1a4, 0xe1a4], /* Private Use */ + [0xe1a5, 0xe1a5], /* Private Use */ + [0xe1a6, 0xe1a6], /* Private Use */ + [0xe1a7, 0xe1a7], /* Private Use */ + [0xe1a8, 0xe1a8], /* Private Use */ + [0xe1a9, 0xe1a9], /* Private Use */ + [0xe1aa, 0xe1aa], /* Private Use */ + [0xe1ab, 0xe1ab], /* Private Use */ + [0xe1ac, 0xe1ac], /* Private Use */ + [0xe1ad, 0xe1ad], /* Private Use */ + [0xe1ae, 0xe1ae], /* Private Use */ + [0xe1af, 0xe1af], /* Private Use */ + [0xe1b0, 0xe1b0], /* Private Use */ + [0xe1b1, 0xe1b1], /* Private Use */ + [0xe1b2, 0xe1b2], /* Private Use */ + [0xe1b3, 0xe1b3], /* Private Use */ + [0xe1b4, 0xe1b4], /* Private Use */ + [0xe1b5, 0xe1b5], /* Private Use */ + [0xe1b6, 0xe1b6], /* Private Use */ + [0xe1b7, 0xe1b7], /* Private Use */ + [0xe1b8, 0xe1b8], /* Private Use */ + [0xe1b9, 0xe1b9], /* Private Use */ + [0xe1ba, 0xe1ba], /* Private Use */ + [0xe1bb, 0xe1bb], /* Private Use */ + [0xe1bc, 0xe1bc], /* Private Use */ + [0xe1bd, 0xe1bd], /* Private Use */ + [0xe1be, 0xe1be], /* Private Use */ + [0xe1bf, 0xe1bf], /* Private Use */ + [0xe1c0, 0xe1c0], /* Private Use */ + [0xe1c1, 0xe1c1], /* Private Use */ + [0xe1c2, 0xe1c2], /* Private Use */ + [0xe1c3, 0xe1c3], /* Private Use */ + [0xe1c4, 0xe1c4], /* Private Use */ + [0xe1c5, 0xe1c5], /* Private Use */ + [0xe1c6, 0xe1c6], /* Private Use */ + [0xe1c7, 0xe1c7], /* Private Use */ + [0xe1c8, 0xe1c8], /* Private Use */ + [0xe1c9, 0xe1c9], /* Private Use */ + [0xe1ca, 0xe1ca], /* Private Use */ + [0xe1cb, 0xe1cb], /* Private Use */ + [0xe1cc, 0xe1cc], /* Private Use */ + [0xe1cd, 0xe1cd], /* Private Use */ + [0xe1ce, 0xe1ce], /* Private Use */ + [0xe1cf, 0xe1cf], /* Private Use */ + [0xe1d0, 0xe1d0], /* Private Use */ + [0xe1d1, 0xe1d1], /* Private Use */ + [0xe1d2, 0xe1d2], /* Private Use */ + [0xe1d3, 0xe1d3], /* Private Use */ + [0xe1d4, 0xe1d4], /* Private Use */ + [0xe1d5, 0xe1d5], /* Private Use */ + [0xe1d6, 0xe1d6], /* Private Use */ + [0xe1d7, 0xe1d7], /* Private Use */ + [0xe1d8, 0xe1d8], /* Private Use */ + [0xe1d9, 0xe1d9], /* Private Use */ + [0xe1da, 0xe1da], /* Private Use */ + [0xe1db, 0xe1db], /* Private Use */ + [0xe1dc, 0xe1dc], /* Private Use */ + [0xe1dd, 0xe1dd], /* Private Use */ + [0xe1de, 0xe1de], /* Private Use */ + [0xe1df, 0xe1df], /* Private Use */ + [0xe1e0, 0xe1e0], /* Private Use */ + [0xe1e1, 0xe1e1], /* Private Use */ + [0xe1e2, 0xe1e2], /* Private Use */ + [0xe1e3, 0xe1e3], /* Private Use */ + [0xe1e4, 0xe1e4], /* Private Use */ + [0xe1e5, 0xe1e5], /* Private Use */ + [0xe1e6, 0xe1e6], /* Private Use */ + [0xe1e7, 0xe1e7], /* Private Use */ + [0xe1e8, 0xe1e8], /* Private Use */ + [0xe1e9, 0xe1e9], /* Private Use */ + [0xe1ea, 0xe1ea], /* Private Use */ + [0xe1eb, 0xe1eb], /* Private Use */ + [0xe1ec, 0xe1ec], /* Private Use */ + [0xe1ed, 0xe1ed], /* Private Use */ + [0xe1ee, 0xe1ee], /* Private Use */ + [0xe1ef, 0xe1ef], /* Private Use */ + [0xe1f0, 0xe1f0], /* Private Use */ + [0xe1f1, 0xe1f1], /* Private Use */ + [0xe1f2, 0xe1f2], /* Private Use */ + [0xe1f3, 0xe1f3], /* Private Use */ + [0xe1f4, 0xe1f4], /* Private Use */ + [0xe1f5, 0xe1f5], /* Private Use */ + [0xe1f6, 0xe1f6], /* Private Use */ + [0xe1f7, 0xe1f7], /* Private Use */ + [0xe1f8, 0xe1f8], /* Private Use */ + [0xe1f9, 0xe1f9], /* Private Use */ + [0xe1fa, 0xe1fa], /* Private Use */ + [0xe1fb, 0xe1fb], /* Private Use */ + [0xe1fc, 0xe1fc], /* Private Use */ + [0xe1fd, 0xe1fd], /* Private Use */ + [0xe1fe, 0xe1fe], /* Private Use */ + [0xe1ff, 0xe1ff], /* Private Use */ + [0xe200, 0xe200], /* Private Use */ + [0xe201, 0xe201], /* Private Use */ + [0xe202, 0xe202], /* Private Use */ + [0xe203, 0xe203], /* Private Use */ + [0xe204, 0xe204], /* Private Use */ + [0xe205, 0xe205], /* Private Use */ + [0xe206, 0xe206], /* Private Use */ + [0xe207, 0xe207], /* Private Use */ + [0xe208, 0xe208], /* Private Use */ + [0xe209, 0xe209], /* Private Use */ + [0xe20a, 0xe20a], /* Private Use */ + [0xe20b, 0xe20b], /* Private Use */ + [0xe20c, 0xe20c], /* Private Use */ + [0xe20d, 0xe20d], /* Private Use */ + [0xe20e, 0xe20e], /* Private Use */ + [0xe20f, 0xe20f], /* Private Use */ + [0xe210, 0xe210], /* Private Use */ + [0xe211, 0xe211], /* Private Use */ + [0xe212, 0xe212], /* Private Use */ + [0xe213, 0xe213], /* Private Use */ + [0xe214, 0xe214], /* Private Use */ + [0xe215, 0xe215], /* Private Use */ + [0xe216, 0xe216], /* Private Use */ + [0xe217, 0xe217], /* Private Use */ + [0xe218, 0xe218], /* Private Use */ + [0xe219, 0xe219], /* Private Use */ + [0xe21a, 0xe21a], /* Private Use */ + [0xe21b, 0xe21b], /* Private Use */ + [0xe21c, 0xe21c], /* Private Use */ + [0xe21d, 0xe21d], /* Private Use */ + [0xe21e, 0xe21e], /* Private Use */ + [0xe21f, 0xe21f], /* Private Use */ + [0xe220, 0xe220], /* Private Use */ + [0xe221, 0xe221], /* Private Use */ + [0xe222, 0xe222], /* Private Use */ + [0xe223, 0xe223], /* Private Use */ + [0xe224, 0xe224], /* Private Use */ + [0xe225, 0xe225], /* Private Use */ + [0xe226, 0xe226], /* Private Use */ + [0xe227, 0xe227], /* Private Use */ + [0xe228, 0xe228], /* Private Use */ + [0xe229, 0xe229], /* Private Use */ + [0xe22a, 0xe22a], /* Private Use */ + [0xe22b, 0xe22b], /* Private Use */ + [0xe22c, 0xe22c], /* Private Use */ + [0xe22d, 0xe22d], /* Private Use */ + [0xe22e, 0xe22e], /* Private Use */ + [0xe22f, 0xe22f], /* Private Use */ + [0xe230, 0xe230], /* Private Use */ + [0xe231, 0xe231], /* Private Use */ + [0xe232, 0xe232], /* Private Use */ + [0xe233, 0xe233], /* Private Use */ + [0xe234, 0xe234], /* Private Use */ + [0xe235, 0xe235], /* Private Use */ + [0xe236, 0xe236], /* Private Use */ + [0xe237, 0xe237], /* Private Use */ + [0xe238, 0xe238], /* Private Use */ + [0xe239, 0xe239], /* Private Use */ + [0xe23a, 0xe23a], /* Private Use */ + [0xe23b, 0xe23b], /* Private Use */ + [0xe23c, 0xe23c], /* Private Use */ + [0xe23d, 0xe23d], /* Private Use */ + [0xe23e, 0xe23e], /* Private Use */ + [0xe23f, 0xe23f], /* Private Use */ + [0xe240, 0xe240], /* Private Use */ + [0xe241, 0xe241], /* Private Use */ + [0xe242, 0xe242], /* Private Use */ + [0xe243, 0xe243], /* Private Use */ + [0xe244, 0xe244], /* Private Use */ + [0xe245, 0xe245], /* Private Use */ + [0xe246, 0xe246], /* Private Use */ + [0xe247, 0xe247], /* Private Use */ + [0xe248, 0xe248], /* Private Use */ + [0xe249, 0xe249], /* Private Use */ + [0xe24a, 0xe24a], /* Private Use */ + [0xe24b, 0xe24b], /* Private Use */ + [0xe24c, 0xe24c], /* Private Use */ + [0xe24d, 0xe24d], /* Private Use */ + [0xe24e, 0xe24e], /* Private Use */ + [0xe24f, 0xe24f], /* Private Use */ + [0xe250, 0xe250], /* Private Use */ + [0xe251, 0xe251], /* Private Use */ + [0xe252, 0xe252], /* Private Use */ + [0xe253, 0xe253], /* Private Use */ + [0xe254, 0xe254], /* Private Use */ + [0xe255, 0xe255], /* Private Use */ + [0xe256, 0xe256], /* Private Use */ + [0xe257, 0xe257], /* Private Use */ + [0xe258, 0xe258], /* Private Use */ + [0xe259, 0xe259], /* Private Use */ + [0xe25a, 0xe25a], /* Private Use */ + [0xe25b, 0xe25b], /* Private Use */ + [0xe25c, 0xe25c], /* Private Use */ + [0xe25d, 0xe25d], /* Private Use */ + [0xe25e, 0xe25e], /* Private Use */ + [0xe25f, 0xe25f], /* Private Use */ + [0xe260, 0xe260], /* Private Use */ + [0xe261, 0xe261], /* Private Use */ + [0xe262, 0xe262], /* Private Use */ + [0xe263, 0xe263], /* Private Use */ + [0xe264, 0xe264], /* Private Use */ + [0xe265, 0xe265], /* Private Use */ + [0xe266, 0xe266], /* Private Use */ + [0xe267, 0xe267], /* Private Use */ + [0xe268, 0xe268], /* Private Use */ + [0xe269, 0xe269], /* Private Use */ + [0xe26a, 0xe26a], /* Private Use */ + [0xe26b, 0xe26b], /* Private Use */ + [0xe26c, 0xe26c], /* Private Use */ + [0xe26d, 0xe26d], /* Private Use */ + [0xe26e, 0xe26e], /* Private Use */ + [0xe26f, 0xe26f], /* Private Use */ + [0xe270, 0xe270], /* Private Use */ + [0xe271, 0xe271], /* Private Use */ + [0xe272, 0xe272], /* Private Use */ + [0xe273, 0xe273], /* Private Use */ + [0xe274, 0xe274], /* Private Use */ + [0xe275, 0xe275], /* Private Use */ + [0xe276, 0xe276], /* Private Use */ + [0xe277, 0xe277], /* Private Use */ + [0xe278, 0xe278], /* Private Use */ + [0xe279, 0xe279], /* Private Use */ + [0xe27a, 0xe27a], /* Private Use */ + [0xe27b, 0xe27b], /* Private Use */ + [0xe27c, 0xe27c], /* Private Use */ + [0xe27d, 0xe27d], /* Private Use */ + [0xe27e, 0xe27e], /* Private Use */ + [0xe27f, 0xe27f], /* Private Use */ + [0xe280, 0xe280], /* Private Use */ + [0xe281, 0xe281], /* Private Use */ + [0xe282, 0xe282], /* Private Use */ + [0xe283, 0xe283], /* Private Use */ + [0xe284, 0xe284], /* Private Use */ + [0xe285, 0xe285], /* Private Use */ + [0xe286, 0xe286], /* Private Use */ + [0xe287, 0xe287], /* Private Use */ + [0xe288, 0xe288], /* Private Use */ + [0xe289, 0xe289], /* Private Use */ + [0xe28a, 0xe28a], /* Private Use */ + [0xe28b, 0xe28b], /* Private Use */ + [0xe28c, 0xe28c], /* Private Use */ + [0xe28d, 0xe28d], /* Private Use */ + [0xe28e, 0xe28e], /* Private Use */ + [0xe28f, 0xe28f], /* Private Use */ + [0xe290, 0xe290], /* Private Use */ + [0xe291, 0xe291], /* Private Use */ + [0xe292, 0xe292], /* Private Use */ + [0xe293, 0xe293], /* Private Use */ + [0xe294, 0xe294], /* Private Use */ + [0xe295, 0xe295], /* Private Use */ + [0xe296, 0xe296], /* Private Use */ + [0xe297, 0xe297], /* Private Use */ + [0xe298, 0xe298], /* Private Use */ + [0xe299, 0xe299], /* Private Use */ + [0xe29a, 0xe29a], /* Private Use */ + [0xe29b, 0xe29b], /* Private Use */ + [0xe29c, 0xe29c], /* Private Use */ + [0xe29d, 0xe29d], /* Private Use */ + [0xe29e, 0xe29e], /* Private Use */ + [0xe29f, 0xe29f], /* Private Use */ + [0xe2a0, 0xe2a0], /* Private Use */ + [0xe2a1, 0xe2a1], /* Private Use */ + [0xe2a2, 0xe2a2], /* Private Use */ + [0xe2a3, 0xe2a3], /* Private Use */ + [0xe2a4, 0xe2a4], /* Private Use */ + [0xe2a5, 0xe2a5], /* Private Use */ + [0xe2a6, 0xe2a6], /* Private Use */ + [0xe2a7, 0xe2a7], /* Private Use */ + [0xe2a8, 0xe2a8], /* Private Use */ + [0xe2a9, 0xe2a9], /* Private Use */ + [0xe2aa, 0xe2aa], /* Private Use */ + [0xe2ab, 0xe2ab], /* Private Use */ + [0xe2ac, 0xe2ac], /* Private Use */ + [0xe2ad, 0xe2ad], /* Private Use */ + [0xe2ae, 0xe2ae], /* Private Use */ + [0xe2af, 0xe2af], /* Private Use */ + [0xe2b0, 0xe2b0], /* Private Use */ + [0xe2b1, 0xe2b1], /* Private Use */ + [0xe2b2, 0xe2b2], /* Private Use */ + [0xe2b3, 0xe2b3], /* Private Use */ + [0xe2b4, 0xe2b4], /* Private Use */ + [0xe2b5, 0xe2b5], /* Private Use */ + [0xe2b6, 0xe2b6], /* Private Use */ + [0xe2b7, 0xe2b7], /* Private Use */ + [0xe2b8, 0xe2b8], /* Private Use */ + [0xe2b9, 0xe2b9], /* Private Use */ + [0xe2ba, 0xe2ba], /* Private Use */ + [0xe2bb, 0xe2bb], /* Private Use */ + [0xe2bc, 0xe2bc], /* Private Use */ + [0xe2bd, 0xe2bd], /* Private Use */ + [0xe2be, 0xe2be], /* Private Use */ + [0xe2bf, 0xe2bf], /* Private Use */ + [0xe2c0, 0xe2c0], /* Private Use */ + [0xe2c1, 0xe2c1], /* Private Use */ + [0xe2c2, 0xe2c2], /* Private Use */ + [0xe2c3, 0xe2c3], /* Private Use */ + [0xe2c4, 0xe2c4], /* Private Use */ + [0xe2c5, 0xe2c5], /* Private Use */ + [0xe2c6, 0xe2c6], /* Private Use */ + [0xe2c7, 0xe2c7], /* Private Use */ + [0xe2c8, 0xe2c8], /* Private Use */ + [0xe2c9, 0xe2c9], /* Private Use */ + [0xe2ca, 0xe2ca], /* Private Use */ + [0xe2cb, 0xe2cb], /* Private Use */ + [0xe2cc, 0xe2cc], /* Private Use */ + [0xe2cd, 0xe2cd], /* Private Use */ + [0xe2ce, 0xe2ce], /* Private Use */ + [0xe2cf, 0xe2cf], /* Private Use */ + [0xe2d0, 0xe2d0], /* Private Use */ + [0xe2d1, 0xe2d1], /* Private Use */ + [0xe2d2, 0xe2d2], /* Private Use */ + [0xe2d3, 0xe2d3], /* Private Use */ + [0xe2d4, 0xe2d4], /* Private Use */ + [0xe2d5, 0xe2d5], /* Private Use */ + [0xe2d6, 0xe2d6], /* Private Use */ + [0xe2d7, 0xe2d7], /* Private Use */ + [0xe2d8, 0xe2d8], /* Private Use */ + [0xe2d9, 0xe2d9], /* Private Use */ + [0xe2da, 0xe2da], /* Private Use */ + [0xe2db, 0xe2db], /* Private Use */ + [0xe2dc, 0xe2dc], /* Private Use */ + [0xe2dd, 0xe2dd], /* Private Use */ + [0xe2de, 0xe2de], /* Private Use */ + [0xe2df, 0xe2df], /* Private Use */ + [0xe2e0, 0xe2e0], /* Private Use */ + [0xe2e1, 0xe2e1], /* Private Use */ + [0xe2e2, 0xe2e2], /* Private Use */ + [0xe2e3, 0xe2e3], /* Private Use */ + [0xe2e4, 0xe2e4], /* Private Use */ + [0xe2e5, 0xe2e5], /* Private Use */ + [0xe2e6, 0xe2e6], /* Private Use */ + [0xe2e7, 0xe2e7], /* Private Use */ + [0xe2e8, 0xe2e8], /* Private Use */ + [0xe2e9, 0xe2e9], /* Private Use */ + [0xe2ea, 0xe2ea], /* Private Use */ + [0xe2eb, 0xe2eb], /* Private Use */ + [0xe2ec, 0xe2ec], /* Private Use */ + [0xe2ed, 0xe2ed], /* Private Use */ + [0xe2ee, 0xe2ee], /* Private Use */ + [0xe2ef, 0xe2ef], /* Private Use */ + [0xe2f0, 0xe2f0], /* Private Use */ + [0xe2f1, 0xe2f1], /* Private Use */ + [0xe2f2, 0xe2f2], /* Private Use */ + [0xe2f3, 0xe2f3], /* Private Use */ + [0xe2f4, 0xe2f4], /* Private Use */ + [0xe2f5, 0xe2f5], /* Private Use */ + [0xe2f6, 0xe2f6], /* Private Use */ + [0xe2f7, 0xe2f7], /* Private Use */ + [0xe2f8, 0xe2f8], /* Private Use */ + [0xe2f9, 0xe2f9], /* Private Use */ + [0xe2fa, 0xe2fa], /* Private Use */ + [0xe2fb, 0xe2fb], /* Private Use */ + [0xe2fc, 0xe2fc], /* Private Use */ + [0xe2fd, 0xe2fd], /* Private Use */ + [0xe2fe, 0xe2fe], /* Private Use */ + [0xe2ff, 0xe2ff], /* Private Use */ + [0xe300, 0xe300], /* Private Use */ + [0xe301, 0xe301], /* Private Use */ + [0xe302, 0xe302], /* Private Use */ + [0xe303, 0xe303], /* Private Use */ + [0xe304, 0xe304], /* Private Use */ + [0xe305, 0xe305], /* Private Use */ + [0xe306, 0xe306], /* Private Use */ + [0xe307, 0xe307], /* Private Use */ + [0xe308, 0xe308], /* Private Use */ + [0xe309, 0xe309], /* Private Use */ + [0xe30a, 0xe30a], /* Private Use */ + [0xe30b, 0xe30b], /* Private Use */ + [0xe30c, 0xe30c], /* Private Use */ + [0xe30d, 0xe30d], /* Private Use */ + [0xe30e, 0xe30e], /* Private Use */ + [0xe30f, 0xe30f], /* Private Use */ + [0xe310, 0xe310], /* Private Use */ + [0xe311, 0xe311], /* Private Use */ + [0xe312, 0xe312], /* Private Use */ + [0xe313, 0xe313], /* Private Use */ + [0xe314, 0xe314], /* Private Use */ + [0xe315, 0xe315], /* Private Use */ + [0xe316, 0xe316], /* Private Use */ + [0xe317, 0xe317], /* Private Use */ + [0xe318, 0xe318], /* Private Use */ + [0xe319, 0xe319], /* Private Use */ + [0xe31a, 0xe31a], /* Private Use */ + [0xe31b, 0xe31b], /* Private Use */ + [0xe31c, 0xe31c], /* Private Use */ + [0xe31d, 0xe31d], /* Private Use */ + [0xe31e, 0xe31e], /* Private Use */ + [0xe31f, 0xe31f], /* Private Use */ + [0xe320, 0xe320], /* Private Use */ + [0xe321, 0xe321], /* Private Use */ + [0xe322, 0xe322], /* Private Use */ + [0xe323, 0xe323], /* Private Use */ + [0xe324, 0xe324], /* Private Use */ + [0xe325, 0xe325], /* Private Use */ + [0xe326, 0xe326], /* Private Use */ + [0xe327, 0xe327], /* Private Use */ + [0xe328, 0xe328], /* Private Use */ + [0xe329, 0xe329], /* Private Use */ + [0xe32a, 0xe32a], /* Private Use */ + [0xe32b, 0xe32b], /* Private Use */ + [0xe32c, 0xe32c], /* Private Use */ + [0xe32d, 0xe32d], /* Private Use */ + [0xe32e, 0xe32e], /* Private Use */ + [0xe32f, 0xe32f], /* Private Use */ + [0xe330, 0xe330], /* Private Use */ + [0xe331, 0xe331], /* Private Use */ + [0xe332, 0xe332], /* Private Use */ + [0xe333, 0xe333], /* Private Use */ + [0xe334, 0xe334], /* Private Use */ + [0xe335, 0xe335], /* Private Use */ + [0xe336, 0xe336], /* Private Use */ + [0xe337, 0xe337], /* Private Use */ + [0xe338, 0xe338], /* Private Use */ + [0xe339, 0xe339], /* Private Use */ + [0xe33a, 0xe33a], /* Private Use */ + [0xe33b, 0xe33b], /* Private Use */ + [0xe33c, 0xe33c], /* Private Use */ + [0xe33d, 0xe33d], /* Private Use */ + [0xe33e, 0xe33e], /* Private Use */ + [0xe33f, 0xe33f], /* Private Use */ + [0xe340, 0xe340], /* Private Use */ + [0xe341, 0xe341], /* Private Use */ + [0xe342, 0xe342], /* Private Use */ + [0xe343, 0xe343], /* Private Use */ + [0xe344, 0xe344], /* Private Use */ + [0xe345, 0xe345], /* Private Use */ + [0xe346, 0xe346], /* Private Use */ + [0xe347, 0xe347], /* Private Use */ + [0xe348, 0xe348], /* Private Use */ + [0xe349, 0xe349], /* Private Use */ + [0xe34a, 0xe34a], /* Private Use */ + [0xe34b, 0xe34b], /* Private Use */ + [0xe34c, 0xe34c], /* Private Use */ + [0xe34d, 0xe34d], /* Private Use */ + [0xe34e, 0xe34e], /* Private Use */ + [0xe34f, 0xe34f], /* Private Use */ + [0xe350, 0xe350], /* Private Use */ + [0xe351, 0xe351], /* Private Use */ + [0xe352, 0xe352], /* Private Use */ + [0xe353, 0xe353], /* Private Use */ + [0xe354, 0xe354], /* Private Use */ + [0xe355, 0xe355], /* Private Use */ + [0xe356, 0xe356], /* Private Use */ + [0xe357, 0xe357], /* Private Use */ + [0xe358, 0xe358], /* Private Use */ + [0xe359, 0xe359], /* Private Use */ + [0xe35a, 0xe35a], /* Private Use */ + [0xe35b, 0xe35b], /* Private Use */ + [0xe35c, 0xe35c], /* Private Use */ + [0xe35d, 0xe35d], /* Private Use */ + [0xe35e, 0xe35e], /* Private Use */ + [0xe35f, 0xe35f], /* Private Use */ + [0xe360, 0xe360], /* Private Use */ + [0xe361, 0xe361], /* Private Use */ + [0xe362, 0xe362], /* Private Use */ + [0xe363, 0xe363], /* Private Use */ + [0xe364, 0xe364], /* Private Use */ + [0xe365, 0xe365], /* Private Use */ + [0xe366, 0xe366], /* Private Use */ + [0xe367, 0xe367], /* Private Use */ + [0xe368, 0xe368], /* Private Use */ + [0xe369, 0xe369], /* Private Use */ + [0xe36a, 0xe36a], /* Private Use */ + [0xe36b, 0xe36b], /* Private Use */ + [0xe36c, 0xe36c], /* Private Use */ + [0xe36d, 0xe36d], /* Private Use */ + [0xe36e, 0xe36e], /* Private Use */ + [0xe36f, 0xe36f], /* Private Use */ + [0xe370, 0xe370], /* Private Use */ + [0xe371, 0xe371], /* Private Use */ + [0xe372, 0xe372], /* Private Use */ + [0xe373, 0xe373], /* Private Use */ + [0xe374, 0xe374], /* Private Use */ + [0xe375, 0xe375], /* Private Use */ + [0xe376, 0xe376], /* Private Use */ + [0xe377, 0xe377], /* Private Use */ + [0xe378, 0xe378], /* Private Use */ + [0xe379, 0xe379], /* Private Use */ + [0xe37a, 0xe37a], /* Private Use */ + [0xe37b, 0xe37b], /* Private Use */ + [0xe37c, 0xe37c], /* Private Use */ + [0xe37d, 0xe37d], /* Private Use */ + [0xe37e, 0xe37e], /* Private Use */ + [0xe37f, 0xe37f], /* Private Use */ + [0xe380, 0xe380], /* Private Use */ + [0xe381, 0xe381], /* Private Use */ + [0xe382, 0xe382], /* Private Use */ + [0xe383, 0xe383], /* Private Use */ + [0xe384, 0xe384], /* Private Use */ + [0xe385, 0xe385], /* Private Use */ + [0xe386, 0xe386], /* Private Use */ + [0xe387, 0xe387], /* Private Use */ + [0xe388, 0xe388], /* Private Use */ + [0xe389, 0xe389], /* Private Use */ + [0xe38a, 0xe38a], /* Private Use */ + [0xe38b, 0xe38b], /* Private Use */ + [0xe38c, 0xe38c], /* Private Use */ + [0xe38d, 0xe38d], /* Private Use */ + [0xe38e, 0xe38e], /* Private Use */ + [0xe38f, 0xe38f], /* Private Use */ + [0xe390, 0xe390], /* Private Use */ + [0xe391, 0xe391], /* Private Use */ + [0xe392, 0xe392], /* Private Use */ + [0xe393, 0xe393], /* Private Use */ + [0xe394, 0xe394], /* Private Use */ + [0xe395, 0xe395], /* Private Use */ + [0xe396, 0xe396], /* Private Use */ + [0xe397, 0xe397], /* Private Use */ + [0xe398, 0xe398], /* Private Use */ + [0xe399, 0xe399], /* Private Use */ + [0xe39a, 0xe39a], /* Private Use */ + [0xe39b, 0xe39b], /* Private Use */ + [0xe39c, 0xe39c], /* Private Use */ + [0xe39d, 0xe39d], /* Private Use */ + [0xe39e, 0xe39e], /* Private Use */ + [0xe39f, 0xe39f], /* Private Use */ + [0xe3a0, 0xe3a0], /* Private Use */ + [0xe3a1, 0xe3a1], /* Private Use */ + [0xe3a2, 0xe3a2], /* Private Use */ + [0xe3a3, 0xe3a3], /* Private Use */ + [0xe3a4, 0xe3a4], /* Private Use */ + [0xe3a5, 0xe3a5], /* Private Use */ + [0xe3a6, 0xe3a6], /* Private Use */ + [0xe3a7, 0xe3a7], /* Private Use */ + [0xe3a8, 0xe3a8], /* Private Use */ + [0xe3a9, 0xe3a9], /* Private Use */ + [0xe3aa, 0xe3aa], /* Private Use */ + [0xe3ab, 0xe3ab], /* Private Use */ + [0xe3ac, 0xe3ac], /* Private Use */ + [0xe3ad, 0xe3ad], /* Private Use */ + [0xe3ae, 0xe3ae], /* Private Use */ + [0xe3af, 0xe3af], /* Private Use */ + [0xe3b0, 0xe3b0], /* Private Use */ + [0xe3b1, 0xe3b1], /* Private Use */ + [0xe3b2, 0xe3b2], /* Private Use */ + [0xe3b3, 0xe3b3], /* Private Use */ + [0xe3b4, 0xe3b4], /* Private Use */ + [0xe3b5, 0xe3b5], /* Private Use */ + [0xe3b6, 0xe3b6], /* Private Use */ + [0xe3b7, 0xe3b7], /* Private Use */ + [0xe3b8, 0xe3b8], /* Private Use */ + [0xe3b9, 0xe3b9], /* Private Use */ + [0xe3ba, 0xe3ba], /* Private Use */ + [0xe3bb, 0xe3bb], /* Private Use */ + [0xe3bc, 0xe3bc], /* Private Use */ + [0xe3bd, 0xe3bd], /* Private Use */ + [0xe3be, 0xe3be], /* Private Use */ + [0xe3bf, 0xe3bf], /* Private Use */ + [0xe3c0, 0xe3c0], /* Private Use */ + [0xe3c1, 0xe3c1], /* Private Use */ + [0xe3c2, 0xe3c2], /* Private Use */ + [0xe3c3, 0xe3c3], /* Private Use */ + [0xe3c4, 0xe3c4], /* Private Use */ + [0xe3c5, 0xe3c5], /* Private Use */ + [0xe3c6, 0xe3c6], /* Private Use */ + [0xe3c7, 0xe3c7], /* Private Use */ + [0xe3c8, 0xe3c8], /* Private Use */ + [0xe3c9, 0xe3c9], /* Private Use */ + [0xe3ca, 0xe3ca], /* Private Use */ + [0xe3cb, 0xe3cb], /* Private Use */ + [0xe3cc, 0xe3cc], /* Private Use */ + [0xe3cd, 0xe3cd], /* Private Use */ + [0xe3ce, 0xe3ce], /* Private Use */ + [0xe3cf, 0xe3cf], /* Private Use */ + [0xe3d0, 0xe3d0], /* Private Use */ + [0xe3d1, 0xe3d1], /* Private Use */ + [0xe3d2, 0xe3d2], /* Private Use */ + [0xe3d3, 0xe3d3], /* Private Use */ + [0xe3d4, 0xe3d4], /* Private Use */ + [0xe3d5, 0xe3d5], /* Private Use */ + [0xe3d6, 0xe3d6], /* Private Use */ + [0xe3d7, 0xe3d7], /* Private Use */ + [0xe3d8, 0xe3d8], /* Private Use */ + [0xe3d9, 0xe3d9], /* Private Use */ + [0xe3da, 0xe3da], /* Private Use */ + [0xe3db, 0xe3db], /* Private Use */ + [0xe3dc, 0xe3dc], /* Private Use */ + [0xe3dd, 0xe3dd], /* Private Use */ + [0xe3de, 0xe3de], /* Private Use */ + [0xe3df, 0xe3df], /* Private Use */ + [0xe3e0, 0xe3e0], /* Private Use */ + [0xe3e1, 0xe3e1], /* Private Use */ + [0xe3e2, 0xe3e2], /* Private Use */ + [0xe3e3, 0xe3e3], /* Private Use */ + [0xe3e4, 0xe3e4], /* Private Use */ + [0xe3e5, 0xe3e5], /* Private Use */ + [0xe3e6, 0xe3e6], /* Private Use */ + [0xe3e7, 0xe3e7], /* Private Use */ + [0xe3e8, 0xe3e8], /* Private Use */ + [0xe3e9, 0xe3e9], /* Private Use */ + [0xe3ea, 0xe3ea], /* Private Use */ + [0xe3eb, 0xe3eb], /* Private Use */ + [0xe3ec, 0xe3ec], /* Private Use */ + [0xe3ed, 0xe3ed], /* Private Use */ + [0xe3ee, 0xe3ee], /* Private Use */ + [0xe3ef, 0xe3ef], /* Private Use */ + [0xe3f0, 0xe3f0], /* Private Use */ + [0xe3f1, 0xe3f1], /* Private Use */ + [0xe3f2, 0xe3f2], /* Private Use */ + [0xe3f3, 0xe3f3], /* Private Use */ + [0xe3f4, 0xe3f4], /* Private Use */ + [0xe3f5, 0xe3f5], /* Private Use */ + [0xe3f6, 0xe3f6], /* Private Use */ + [0xe3f7, 0xe3f7], /* Private Use */ + [0xe3f8, 0xe3f8], /* Private Use */ + [0xe3f9, 0xe3f9], /* Private Use */ + [0xe3fa, 0xe3fa], /* Private Use */ + [0xe3fb, 0xe3fb], /* Private Use */ + [0xe3fc, 0xe3fc], /* Private Use */ + [0xe3fd, 0xe3fd], /* Private Use */ + [0xe3fe, 0xe3fe], /* Private Use */ + [0xe3ff, 0xe3ff], /* Private Use */ + [0xe400, 0xe400], /* Private Use */ + [0xe401, 0xe401], /* Private Use */ + [0xe402, 0xe402], /* Private Use */ + [0xe403, 0xe403], /* Private Use */ + [0xe404, 0xe404], /* Private Use */ + [0xe405, 0xe405], /* Private Use */ + [0xe406, 0xe406], /* Private Use */ + [0xe407, 0xe407], /* Private Use */ + [0xe408, 0xe408], /* Private Use */ + [0xe409, 0xe409], /* Private Use */ + [0xe40a, 0xe40a], /* Private Use */ + [0xe40b, 0xe40b], /* Private Use */ + [0xe40c, 0xe40c], /* Private Use */ + [0xe40d, 0xe40d], /* Private Use */ + [0xe40e, 0xe40e], /* Private Use */ + [0xe40f, 0xe40f], /* Private Use */ + [0xe410, 0xe410], /* Private Use */ + [0xe411, 0xe411], /* Private Use */ + [0xe412, 0xe412], /* Private Use */ + [0xe413, 0xe413], /* Private Use */ + [0xe414, 0xe414], /* Private Use */ + [0xe415, 0xe415], /* Private Use */ + [0xe416, 0xe416], /* Private Use */ + [0xe417, 0xe417], /* Private Use */ + [0xe418, 0xe418], /* Private Use */ + [0xe419, 0xe419], /* Private Use */ + [0xe41a, 0xe41a], /* Private Use */ + [0xe41b, 0xe41b], /* Private Use */ + [0xe41c, 0xe41c], /* Private Use */ + [0xe41d, 0xe41d], /* Private Use */ + [0xe41e, 0xe41e], /* Private Use */ + [0xe41f, 0xe41f], /* Private Use */ + [0xe420, 0xe420], /* Private Use */ + [0xe421, 0xe421], /* Private Use */ + [0xe422, 0xe422], /* Private Use */ + [0xe423, 0xe423], /* Private Use */ + [0xe424, 0xe424], /* Private Use */ + [0xe425, 0xe425], /* Private Use */ + [0xe426, 0xe426], /* Private Use */ + [0xe427, 0xe427], /* Private Use */ + [0xe428, 0xe428], /* Private Use */ + [0xe429, 0xe429], /* Private Use */ + [0xe42a, 0xe42a], /* Private Use */ + [0xe42b, 0xe42b], /* Private Use */ + [0xe42c, 0xe42c], /* Private Use */ + [0xe42d, 0xe42d], /* Private Use */ + [0xe42e, 0xe42e], /* Private Use */ + [0xe42f, 0xe42f], /* Private Use */ + [0xe430, 0xe430], /* Private Use */ + [0xe431, 0xe431], /* Private Use */ + [0xe432, 0xe432], /* Private Use */ + [0xe433, 0xe433], /* Private Use */ + [0xe434, 0xe434], /* Private Use */ + [0xe435, 0xe435], /* Private Use */ + [0xe436, 0xe436], /* Private Use */ + [0xe437, 0xe437], /* Private Use */ + [0xe438, 0xe438], /* Private Use */ + [0xe439, 0xe439], /* Private Use */ + [0xe43a, 0xe43a], /* Private Use */ + [0xe43b, 0xe43b], /* Private Use */ + [0xe43c, 0xe43c], /* Private Use */ + [0xe43d, 0xe43d], /* Private Use */ + [0xe43e, 0xe43e], /* Private Use */ + [0xe43f, 0xe43f], /* Private Use */ + [0xe440, 0xe440], /* Private Use */ + [0xe441, 0xe441], /* Private Use */ + [0xe442, 0xe442], /* Private Use */ + [0xe443, 0xe443], /* Private Use */ + [0xe444, 0xe444], /* Private Use */ + [0xe445, 0xe445], /* Private Use */ + [0xe446, 0xe446], /* Private Use */ + [0xe447, 0xe447], /* Private Use */ + [0xe448, 0xe448], /* Private Use */ + [0xe449, 0xe449], /* Private Use */ + [0xe44a, 0xe44a], /* Private Use */ + [0xe44b, 0xe44b], /* Private Use */ + [0xe44c, 0xe44c], /* Private Use */ + [0xe44d, 0xe44d], /* Private Use */ + [0xe44e, 0xe44e], /* Private Use */ + [0xe44f, 0xe44f], /* Private Use */ + [0xe450, 0xe450], /* Private Use */ + [0xe451, 0xe451], /* Private Use */ + [0xe452, 0xe452], /* Private Use */ + [0xe453, 0xe453], /* Private Use */ + [0xe454, 0xe454], /* Private Use */ + [0xe455, 0xe455], /* Private Use */ + [0xe456, 0xe456], /* Private Use */ + [0xe457, 0xe457], /* Private Use */ + [0xe458, 0xe458], /* Private Use */ + [0xe459, 0xe459], /* Private Use */ + [0xe45a, 0xe45a], /* Private Use */ + [0xe45b, 0xe45b], /* Private Use */ + [0xe45c, 0xe45c], /* Private Use */ + [0xe45d, 0xe45d], /* Private Use */ + [0xe45e, 0xe45e], /* Private Use */ + [0xe45f, 0xe45f], /* Private Use */ + [0xe460, 0xe460], /* Private Use */ + [0xe461, 0xe461], /* Private Use */ + [0xe462, 0xe462], /* Private Use */ + [0xe463, 0xe463], /* Private Use */ + [0xe464, 0xe464], /* Private Use */ + [0xe465, 0xe465], /* Private Use */ + [0xe466, 0xe466], /* Private Use */ + [0xe467, 0xe467], /* Private Use */ + [0xe468, 0xe468], /* Private Use */ + [0xe469, 0xe469], /* Private Use */ + [0xe46a, 0xe46a], /* Private Use */ + [0xe46b, 0xe46b], /* Private Use */ + [0xe46c, 0xe46c], /* Private Use */ + [0xe46d, 0xe46d], /* Private Use */ + [0xe46e, 0xe46e], /* Private Use */ + [0xe46f, 0xe46f], /* Private Use */ + [0xe470, 0xe470], /* Private Use */ + [0xe471, 0xe471], /* Private Use */ + [0xe472, 0xe472], /* Private Use */ + [0xe473, 0xe473], /* Private Use */ + [0xe474, 0xe474], /* Private Use */ + [0xe475, 0xe475], /* Private Use */ + [0xe476, 0xe476], /* Private Use */ + [0xe477, 0xe477], /* Private Use */ + [0xe478, 0xe478], /* Private Use */ + [0xe479, 0xe479], /* Private Use */ + [0xe47a, 0xe47a], /* Private Use */ + [0xe47b, 0xe47b], /* Private Use */ + [0xe47c, 0xe47c], /* Private Use */ + [0xe47d, 0xe47d], /* Private Use */ + [0xe47e, 0xe47e], /* Private Use */ + [0xe47f, 0xe47f], /* Private Use */ + [0xe480, 0xe480], /* Private Use */ + [0xe481, 0xe481], /* Private Use */ + [0xe482, 0xe482], /* Private Use */ + [0xe483, 0xe483], /* Private Use */ + [0xe484, 0xe484], /* Private Use */ + [0xe485, 0xe485], /* Private Use */ + [0xe486, 0xe486], /* Private Use */ + [0xe487, 0xe487], /* Private Use */ + [0xe488, 0xe488], /* Private Use */ + [0xe489, 0xe489], /* Private Use */ + [0xe48a, 0xe48a], /* Private Use */ + [0xe48b, 0xe48b], /* Private Use */ + [0xe48c, 0xe48c], /* Private Use */ + [0xe48d, 0xe48d], /* Private Use */ + [0xe48e, 0xe48e], /* Private Use */ + [0xe48f, 0xe48f], /* Private Use */ + [0xe490, 0xe490], /* Private Use */ + [0xe491, 0xe491], /* Private Use */ + [0xe492, 0xe492], /* Private Use */ + [0xe493, 0xe493], /* Private Use */ + [0xe494, 0xe494], /* Private Use */ + [0xe495, 0xe495], /* Private Use */ + [0xe496, 0xe496], /* Private Use */ + [0xe497, 0xe497], /* Private Use */ + [0xe498, 0xe498], /* Private Use */ + [0xe499, 0xe499], /* Private Use */ + [0xe49a, 0xe49a], /* Private Use */ + [0xe49b, 0xe49b], /* Private Use */ + [0xe49c, 0xe49c], /* Private Use */ + [0xe49d, 0xe49d], /* Private Use */ + [0xe49e, 0xe49e], /* Private Use */ + [0xe49f, 0xe49f], /* Private Use */ + [0xe4a0, 0xe4a0], /* Private Use */ + [0xe4a1, 0xe4a1], /* Private Use */ + [0xe4a2, 0xe4a2], /* Private Use */ + [0xe4a3, 0xe4a3], /* Private Use */ + [0xe4a4, 0xe4a4], /* Private Use */ + [0xe4a5, 0xe4a5], /* Private Use */ + [0xe4a6, 0xe4a6], /* Private Use */ + [0xe4a7, 0xe4a7], /* Private Use */ + [0xe4a8, 0xe4a8], /* Private Use */ + [0xe4a9, 0xe4a9], /* Private Use */ + [0xe4aa, 0xe4aa], /* Private Use */ + [0xe4ab, 0xe4ab], /* Private Use */ + [0xe4ac, 0xe4ac], /* Private Use */ + [0xe4ad, 0xe4ad], /* Private Use */ + [0xe4ae, 0xe4ae], /* Private Use */ + [0xe4af, 0xe4af], /* Private Use */ + [0xe4b0, 0xe4b0], /* Private Use */ + [0xe4b1, 0xe4b1], /* Private Use */ + [0xe4b2, 0xe4b2], /* Private Use */ + [0xe4b3, 0xe4b3], /* Private Use */ + [0xe4b4, 0xe4b4], /* Private Use */ + [0xe4b5, 0xe4b5], /* Private Use */ + [0xe4b6, 0xe4b6], /* Private Use */ + [0xe4b7, 0xe4b7], /* Private Use */ + [0xe4b8, 0xe4b8], /* Private Use */ + [0xe4b9, 0xe4b9], /* Private Use */ + [0xe4ba, 0xe4ba], /* Private Use */ + [0xe4bb, 0xe4bb], /* Private Use */ + [0xe4bc, 0xe4bc], /* Private Use */ + [0xe4bd, 0xe4bd], /* Private Use */ + [0xe4be, 0xe4be], /* Private Use */ + [0xe4bf, 0xe4bf], /* Private Use */ + [0xe4c0, 0xe4c0], /* Private Use */ + [0xe4c1, 0xe4c1], /* Private Use */ + [0xe4c2, 0xe4c2], /* Private Use */ + [0xe4c3, 0xe4c3], /* Private Use */ + [0xe4c4, 0xe4c4], /* Private Use */ + [0xe4c5, 0xe4c5], /* Private Use */ + [0xe4c6, 0xe4c6], /* Private Use */ + [0xe4c7, 0xe4c7], /* Private Use */ + [0xe4c8, 0xe4c8], /* Private Use */ + [0xe4c9, 0xe4c9], /* Private Use */ + [0xe4ca, 0xe4ca], /* Private Use */ + [0xe4cb, 0xe4cb], /* Private Use */ + [0xe4cc, 0xe4cc], /* Private Use */ + [0xe4cd, 0xe4cd], /* Private Use */ + [0xe4ce, 0xe4ce], /* Private Use */ + [0xe4cf, 0xe4cf], /* Private Use */ + [0xe4d0, 0xe4d0], /* Private Use */ + [0xe4d1, 0xe4d1], /* Private Use */ + [0xe4d2, 0xe4d2], /* Private Use */ + [0xe4d3, 0xe4d3], /* Private Use */ + [0xe4d4, 0xe4d4], /* Private Use */ + [0xe4d5, 0xe4d5], /* Private Use */ + [0xe4d6, 0xe4d6], /* Private Use */ + [0xe4d7, 0xe4d7], /* Private Use */ + [0xe4d8, 0xe4d8], /* Private Use */ + [0xe4d9, 0xe4d9], /* Private Use */ + [0xe4da, 0xe4da], /* Private Use */ + [0xe4db, 0xe4db], /* Private Use */ + [0xe4dc, 0xe4dc], /* Private Use */ + [0xe4dd, 0xe4dd], /* Private Use */ + [0xe4de, 0xe4de], /* Private Use */ + [0xe4df, 0xe4df], /* Private Use */ + [0xe4e0, 0xe4e0], /* Private Use */ + [0xe4e1, 0xe4e1], /* Private Use */ + [0xe4e2, 0xe4e2], /* Private Use */ + [0xe4e3, 0xe4e3], /* Private Use */ + [0xe4e4, 0xe4e4], /* Private Use */ + [0xe4e5, 0xe4e5], /* Private Use */ + [0xe4e6, 0xe4e6], /* Private Use */ + [0xe4e7, 0xe4e7], /* Private Use */ + [0xe4e8, 0xe4e8], /* Private Use */ + [0xe4e9, 0xe4e9], /* Private Use */ + [0xe4ea, 0xe4ea], /* Private Use */ + [0xe4eb, 0xe4eb], /* Private Use */ + [0xe4ec, 0xe4ec], /* Private Use */ + [0xe4ed, 0xe4ed], /* Private Use */ + [0xe4ee, 0xe4ee], /* Private Use */ + [0xe4ef, 0xe4ef], /* Private Use */ + [0xe4f0, 0xe4f0], /* Private Use */ + [0xe4f1, 0xe4f1], /* Private Use */ + [0xe4f2, 0xe4f2], /* Private Use */ + [0xe4f3, 0xe4f3], /* Private Use */ + [0xe4f4, 0xe4f4], /* Private Use */ + [0xe4f5, 0xe4f5], /* Private Use */ + [0xe4f6, 0xe4f6], /* Private Use */ + [0xe4f7, 0xe4f7], /* Private Use */ + [0xe4f8, 0xe4f8], /* Private Use */ + [0xe4f9, 0xe4f9], /* Private Use */ + [0xe4fa, 0xe4fa], /* Private Use */ + [0xe4fb, 0xe4fb], /* Private Use */ + [0xe4fc, 0xe4fc], /* Private Use */ + [0xe4fd, 0xe4fd], /* Private Use */ + [0xe4fe, 0xe4fe], /* Private Use */ + [0xe4ff, 0xe4ff], /* Private Use */ + [0xe500, 0xe500], /* Private Use */ + [0xe501, 0xe501], /* Private Use */ + [0xe502, 0xe502], /* Private Use */ + [0xe503, 0xe503], /* Private Use */ + [0xe504, 0xe504], /* Private Use */ + [0xe505, 0xe505], /* Private Use */ + [0xe506, 0xe506], /* Private Use */ + [0xe507, 0xe507], /* Private Use */ + [0xe508, 0xe508], /* Private Use */ + [0xe509, 0xe509], /* Private Use */ + [0xe50a, 0xe50a], /* Private Use */ + [0xe50b, 0xe50b], /* Private Use */ + [0xe50c, 0xe50c], /* Private Use */ + [0xe50d, 0xe50d], /* Private Use */ + [0xe50e, 0xe50e], /* Private Use */ + [0xe50f, 0xe50f], /* Private Use */ + [0xe510, 0xe510], /* Private Use */ + [0xe511, 0xe511], /* Private Use */ + [0xe512, 0xe512], /* Private Use */ + [0xe513, 0xe513], /* Private Use */ + [0xe514, 0xe514], /* Private Use */ + [0xe515, 0xe515], /* Private Use */ + [0xe516, 0xe516], /* Private Use */ + [0xe517, 0xe517], /* Private Use */ + [0xe518, 0xe518], /* Private Use */ + [0xe519, 0xe519], /* Private Use */ + [0xe51a, 0xe51a], /* Private Use */ + [0xe51b, 0xe51b], /* Private Use */ + [0xe51c, 0xe51c], /* Private Use */ + [0xe51d, 0xe51d], /* Private Use */ + [0xe51e, 0xe51e], /* Private Use */ + [0xe51f, 0xe51f], /* Private Use */ + [0xe520, 0xe520], /* Private Use */ + [0xe521, 0xe521], /* Private Use */ + [0xe522, 0xe522], /* Private Use */ + [0xe523, 0xe523], /* Private Use */ + [0xe524, 0xe524], /* Private Use */ + [0xe525, 0xe525], /* Private Use */ + [0xe526, 0xe526], /* Private Use */ + [0xe527, 0xe527], /* Private Use */ + [0xe528, 0xe528], /* Private Use */ + [0xe529, 0xe529], /* Private Use */ + [0xe52a, 0xe52a], /* Private Use */ + [0xe52b, 0xe52b], /* Private Use */ + [0xe52c, 0xe52c], /* Private Use */ + [0xe52d, 0xe52d], /* Private Use */ + [0xe52e, 0xe52e], /* Private Use */ + [0xe52f, 0xe52f], /* Private Use */ + [0xe530, 0xe530], /* Private Use */ + [0xe531, 0xe531], /* Private Use */ + [0xe532, 0xe532], /* Private Use */ + [0xe533, 0xe533], /* Private Use */ + [0xe534, 0xe534], /* Private Use */ + [0xe535, 0xe535], /* Private Use */ + [0xe536, 0xe536], /* Private Use */ + [0xe537, 0xe537], /* Private Use */ + [0xe538, 0xe538], /* Private Use */ + [0xe539, 0xe539], /* Private Use */ + [0xe53a, 0xe53a], /* Private Use */ + [0xe53b, 0xe53b], /* Private Use */ + [0xe53c, 0xe53c], /* Private Use */ + [0xe53d, 0xe53d], /* Private Use */ + [0xe53e, 0xe53e], /* Private Use */ + [0xe53f, 0xe53f], /* Private Use */ + [0xe540, 0xe540], /* Private Use */ + [0xe541, 0xe541], /* Private Use */ + [0xe542, 0xe542], /* Private Use */ + [0xe543, 0xe543], /* Private Use */ + [0xe544, 0xe544], /* Private Use */ + [0xe545, 0xe545], /* Private Use */ + [0xe546, 0xe546], /* Private Use */ + [0xe547, 0xe547], /* Private Use */ + [0xe548, 0xe548], /* Private Use */ + [0xe549, 0xe549], /* Private Use */ + [0xe54a, 0xe54a], /* Private Use */ + [0xe54b, 0xe54b], /* Private Use */ + [0xe54c, 0xe54c], /* Private Use */ + [0xe54d, 0xe54d], /* Private Use */ + [0xe54e, 0xe54e], /* Private Use */ + [0xe54f, 0xe54f], /* Private Use */ + [0xe550, 0xe550], /* Private Use */ + [0xe551, 0xe551], /* Private Use */ + [0xe552, 0xe552], /* Private Use */ + [0xe553, 0xe553], /* Private Use */ + [0xe554, 0xe554], /* Private Use */ + [0xe555, 0xe555], /* Private Use */ + [0xe556, 0xe556], /* Private Use */ + [0xe557, 0xe557], /* Private Use */ + [0xe558, 0xe558], /* Private Use */ + [0xe559, 0xe559], /* Private Use */ + [0xe55a, 0xe55a], /* Private Use */ + [0xe55b, 0xe55b], /* Private Use */ + [0xe55c, 0xe55c], /* Private Use */ + [0xe55d, 0xe55d], /* Private Use */ + [0xe55e, 0xe55e], /* Private Use */ + [0xe55f, 0xe55f], /* Private Use */ + [0xe560, 0xe560], /* Private Use */ + [0xe561, 0xe561], /* Private Use */ + [0xe562, 0xe562], /* Private Use */ + [0xe563, 0xe563], /* Private Use */ + [0xe564, 0xe564], /* Private Use */ + [0xe565, 0xe565], /* Private Use */ + [0xe566, 0xe566], /* Private Use */ + [0xe567, 0xe567], /* Private Use */ + [0xe568, 0xe568], /* Private Use */ + [0xe569, 0xe569], /* Private Use */ + [0xe56a, 0xe56a], /* Private Use */ + [0xe56b, 0xe56b], /* Private Use */ + [0xe56c, 0xe56c], /* Private Use */ + [0xe56d, 0xe56d], /* Private Use */ + [0xe56e, 0xe56e], /* Private Use */ + [0xe56f, 0xe56f], /* Private Use */ + [0xe570, 0xe570], /* Private Use */ + [0xe571, 0xe571], /* Private Use */ + [0xe572, 0xe572], /* Private Use */ + [0xe573, 0xe573], /* Private Use */ + [0xe574, 0xe574], /* Private Use */ + [0xe575, 0xe575], /* Private Use */ + [0xe576, 0xe576], /* Private Use */ + [0xe577, 0xe577], /* Private Use */ + [0xe578, 0xe578], /* Private Use */ + [0xe579, 0xe579], /* Private Use */ + [0xe57a, 0xe57a], /* Private Use */ + [0xe57b, 0xe57b], /* Private Use */ + [0xe57c, 0xe57c], /* Private Use */ + [0xe57d, 0xe57d], /* Private Use */ + [0xe57e, 0xe57e], /* Private Use */ + [0xe57f, 0xe57f], /* Private Use */ + [0xe580, 0xe580], /* Private Use */ + [0xe581, 0xe581], /* Private Use */ + [0xe582, 0xe582], /* Private Use */ + [0xe583, 0xe583], /* Private Use */ + [0xe584, 0xe584], /* Private Use */ + [0xe585, 0xe585], /* Private Use */ + [0xe586, 0xe586], /* Private Use */ + [0xe587, 0xe587], /* Private Use */ + [0xe588, 0xe588], /* Private Use */ + [0xe589, 0xe589], /* Private Use */ + [0xe58a, 0xe58a], /* Private Use */ + [0xe58b, 0xe58b], /* Private Use */ + [0xe58c, 0xe58c], /* Private Use */ + [0xe58d, 0xe58d], /* Private Use */ + [0xe58e, 0xe58e], /* Private Use */ + [0xe58f, 0xe58f], /* Private Use */ + [0xe590, 0xe590], /* Private Use */ + [0xe591, 0xe591], /* Private Use */ + [0xe592, 0xe592], /* Private Use */ + [0xe593, 0xe593], /* Private Use */ + [0xe594, 0xe594], /* Private Use */ + [0xe595, 0xe595], /* Private Use */ + [0xe596, 0xe596], /* Private Use */ + [0xe597, 0xe597], /* Private Use */ + [0xe598, 0xe598], /* Private Use */ + [0xe599, 0xe599], /* Private Use */ + [0xe59a, 0xe59a], /* Private Use */ + [0xe59b, 0xe59b], /* Private Use */ + [0xe59c, 0xe59c], /* Private Use */ + [0xe59d, 0xe59d], /* Private Use */ + [0xe59e, 0xe59e], /* Private Use */ + [0xe59f, 0xe59f], /* Private Use */ + [0xe5a0, 0xe5a0], /* Private Use */ + [0xe5a1, 0xe5a1], /* Private Use */ + [0xe5a2, 0xe5a2], /* Private Use */ + [0xe5a3, 0xe5a3], /* Private Use */ + [0xe5a4, 0xe5a4], /* Private Use */ + [0xe5a5, 0xe5a5], /* Private Use */ + [0xe5a6, 0xe5a6], /* Private Use */ + [0xe5a7, 0xe5a7], /* Private Use */ + [0xe5a8, 0xe5a8], /* Private Use */ + [0xe5a9, 0xe5a9], /* Private Use */ + [0xe5aa, 0xe5aa], /* Private Use */ + [0xe5ab, 0xe5ab], /* Private Use */ + [0xe5ac, 0xe5ac], /* Private Use */ + [0xe5ad, 0xe5ad], /* Private Use */ + [0xe5ae, 0xe5ae], /* Private Use */ + [0xe5af, 0xe5af], /* Private Use */ + [0xe5b0, 0xe5b0], /* Private Use */ + [0xe5b1, 0xe5b1], /* Private Use */ + [0xe5b2, 0xe5b2], /* Private Use */ + [0xe5b3, 0xe5b3], /* Private Use */ + [0xe5b4, 0xe5b4], /* Private Use */ + [0xe5b5, 0xe5b5], /* Private Use */ + [0xe5b6, 0xe5b6], /* Private Use */ + [0xe5b7, 0xe5b7], /* Private Use */ + [0xe5b8, 0xe5b8], /* Private Use */ + [0xe5b9, 0xe5b9], /* Private Use */ + [0xe5ba, 0xe5ba], /* Private Use */ + [0xe5bb, 0xe5bb], /* Private Use */ + [0xe5bc, 0xe5bc], /* Private Use */ + [0xe5bd, 0xe5bd], /* Private Use */ + [0xe5be, 0xe5be], /* Private Use */ + [0xe5bf, 0xe5bf], /* Private Use */ + [0xe5c0, 0xe5c0], /* Private Use */ + [0xe5c1, 0xe5c1], /* Private Use */ + [0xe5c2, 0xe5c2], /* Private Use */ + [0xe5c3, 0xe5c3], /* Private Use */ + [0xe5c4, 0xe5c4], /* Private Use */ + [0xe5c5, 0xe5c5], /* Private Use */ + [0xe5c6, 0xe5c6], /* Private Use */ + [0xe5c7, 0xe5c7], /* Private Use */ + [0xe5c8, 0xe5c8], /* Private Use */ + [0xe5c9, 0xe5c9], /* Private Use */ + [0xe5ca, 0xe5ca], /* Private Use */ + [0xe5cb, 0xe5cb], /* Private Use */ + [0xe5cc, 0xe5cc], /* Private Use */ + [0xe5cd, 0xe5cd], /* Private Use */ + [0xe5ce, 0xe5ce], /* Private Use */ + [0xe5cf, 0xe5cf], /* Private Use */ + [0xe5d0, 0xe5d0], /* Private Use */ + [0xe5d1, 0xe5d1], /* Private Use */ + [0xe5d2, 0xe5d2], /* Private Use */ + [0xe5d3, 0xe5d3], /* Private Use */ + [0xe5d4, 0xe5d4], /* Private Use */ + [0xe5d5, 0xe5d5], /* Private Use */ + [0xe5d6, 0xe5d6], /* Private Use */ + [0xe5d7, 0xe5d7], /* Private Use */ + [0xe5d8, 0xe5d8], /* Private Use */ + [0xe5d9, 0xe5d9], /* Private Use */ + [0xe5da, 0xe5da], /* Private Use */ + [0xe5db, 0xe5db], /* Private Use */ + [0xe5dc, 0xe5dc], /* Private Use */ + [0xe5dd, 0xe5dd], /* Private Use */ + [0xe5de, 0xe5de], /* Private Use */ + [0xe5df, 0xe5df], /* Private Use */ + [0xe5e0, 0xe5e0], /* Private Use */ + [0xe5e1, 0xe5e1], /* Private Use */ + [0xe5e2, 0xe5e2], /* Private Use */ + [0xe5e3, 0xe5e3], /* Private Use */ + [0xe5e4, 0xe5e4], /* Private Use */ + [0xe5e5, 0xe5e5], /* Private Use */ + [0xe5e6, 0xe5e6], /* Private Use */ + [0xe5e7, 0xe5e7], /* Private Use */ + [0xe5e8, 0xe5e8], /* Private Use */ + [0xe5e9, 0xe5e9], /* Private Use */ + [0xe5ea, 0xe5ea], /* Private Use */ + [0xe5eb, 0xe5eb], /* Private Use */ + [0xe5ec, 0xe5ec], /* Private Use */ + [0xe5ed, 0xe5ed], /* Private Use */ + [0xe5ee, 0xe5ee], /* Private Use */ + [0xe5ef, 0xe5ef], /* Private Use */ + [0xe5f0, 0xe5f0], /* Private Use */ + [0xe5f1, 0xe5f1], /* Private Use */ + [0xe5f2, 0xe5f2], /* Private Use */ + [0xe5f3, 0xe5f3], /* Private Use */ + [0xe5f4, 0xe5f4], /* Private Use */ + [0xe5f5, 0xe5f5], /* Private Use */ + [0xe5f6, 0xe5f6], /* Private Use */ + [0xe5f7, 0xe5f7], /* Private Use */ + [0xe5f8, 0xe5f8], /* Private Use */ + [0xe5f9, 0xe5f9], /* Private Use */ + [0xe5fa, 0xe5fa], /* Private Use */ + [0xe5fb, 0xe5fb], /* Private Use */ + [0xe5fc, 0xe5fc], /* Private Use */ + [0xe5fd, 0xe5fd], /* Private Use */ + [0xe5fe, 0xe5fe], /* Private Use */ + [0xe5ff, 0xe5ff], /* Private Use */ + [0xe600, 0xe600], /* Private Use */ + [0xe601, 0xe601], /* Private Use */ + [0xe602, 0xe602], /* Private Use */ + [0xe603, 0xe603], /* Private Use */ + [0xe604, 0xe604], /* Private Use */ + [0xe605, 0xe605], /* Private Use */ + [0xe606, 0xe606], /* Private Use */ + [0xe607, 0xe607], /* Private Use */ + [0xe608, 0xe608], /* Private Use */ + [0xe609, 0xe609], /* Private Use */ + [0xe60a, 0xe60a], /* Private Use */ + [0xe60b, 0xe60b], /* Private Use */ + [0xe60c, 0xe60c], /* Private Use */ + [0xe60d, 0xe60d], /* Private Use */ + [0xe60e, 0xe60e], /* Private Use */ + [0xe60f, 0xe60f], /* Private Use */ + [0xe610, 0xe610], /* Private Use */ + [0xe611, 0xe611], /* Private Use */ + [0xe612, 0xe612], /* Private Use */ + [0xe613, 0xe613], /* Private Use */ + [0xe614, 0xe614], /* Private Use */ + [0xe615, 0xe615], /* Private Use */ + [0xe616, 0xe616], /* Private Use */ + [0xe617, 0xe617], /* Private Use */ + [0xe618, 0xe618], /* Private Use */ + [0xe619, 0xe619], /* Private Use */ + [0xe61a, 0xe61a], /* Private Use */ + [0xe61b, 0xe61b], /* Private Use */ + [0xe61c, 0xe61c], /* Private Use */ + [0xe61d, 0xe61d], /* Private Use */ + [0xe61e, 0xe61e], /* Private Use */ + [0xe61f, 0xe61f], /* Private Use */ + [0xe620, 0xe620], /* Private Use */ + [0xe621, 0xe621], /* Private Use */ + [0xe622, 0xe622], /* Private Use */ + [0xe623, 0xe623], /* Private Use */ + [0xe624, 0xe624], /* Private Use */ + [0xe625, 0xe625], /* Private Use */ + [0xe626, 0xe626], /* Private Use */ + [0xe627, 0xe627], /* Private Use */ + [0xe628, 0xe628], /* Private Use */ + [0xe629, 0xe629], /* Private Use */ + [0xe62a, 0xe62a], /* Private Use */ + [0xe62b, 0xe62b], /* Private Use */ + [0xe62c, 0xe62c], /* Private Use */ + [0xe62d, 0xe62d], /* Private Use */ + [0xe62e, 0xe62e], /* Private Use */ + [0xe62f, 0xe62f], /* Private Use */ + [0xe630, 0xe630], /* Private Use */ + [0xe631, 0xe631], /* Private Use */ + [0xe632, 0xe632], /* Private Use */ + [0xe633, 0xe633], /* Private Use */ + [0xe634, 0xe634], /* Private Use */ + [0xe635, 0xe635], /* Private Use */ + [0xe636, 0xe636], /* Private Use */ + [0xe637, 0xe637], /* Private Use */ + [0xe638, 0xe638], /* Private Use */ + [0xe639, 0xe639], /* Private Use */ + [0xe63a, 0xe63a], /* Private Use */ + [0xe63b, 0xe63b], /* Private Use */ + [0xe63c, 0xe63c], /* Private Use */ + [0xe63d, 0xe63d], /* Private Use */ + [0xe63e, 0xe63e], /* Private Use */ + [0xe63f, 0xe63f], /* Private Use */ + [0xe640, 0xe640], /* Private Use */ + [0xe641, 0xe641], /* Private Use */ + [0xe642, 0xe642], /* Private Use */ + [0xe643, 0xe643], /* Private Use */ + [0xe644, 0xe644], /* Private Use */ + [0xe645, 0xe645], /* Private Use */ + [0xe646, 0xe646], /* Private Use */ + [0xe647, 0xe647], /* Private Use */ + [0xe648, 0xe648], /* Private Use */ + [0xe649, 0xe649], /* Private Use */ + [0xe64a, 0xe64a], /* Private Use */ + [0xe64b, 0xe64b], /* Private Use */ + [0xe64c, 0xe64c], /* Private Use */ + [0xe64d, 0xe64d], /* Private Use */ + [0xe64e, 0xe64e], /* Private Use */ + [0xe64f, 0xe64f], /* Private Use */ + [0xe650, 0xe650], /* Private Use */ + [0xe651, 0xe651], /* Private Use */ + [0xe652, 0xe652], /* Private Use */ + [0xe653, 0xe653], /* Private Use */ + [0xe654, 0xe654], /* Private Use */ + [0xe655, 0xe655], /* Private Use */ + [0xe656, 0xe656], /* Private Use */ + [0xe657, 0xe657], /* Private Use */ + [0xe658, 0xe658], /* Private Use */ + [0xe659, 0xe659], /* Private Use */ + [0xe65a, 0xe65a], /* Private Use */ + [0xe65b, 0xe65b], /* Private Use */ + [0xe65c, 0xe65c], /* Private Use */ + [0xe65d, 0xe65d], /* Private Use */ + [0xe65e, 0xe65e], /* Private Use */ + [0xe65f, 0xe65f], /* Private Use */ + [0xe660, 0xe660], /* Private Use */ + [0xe661, 0xe661], /* Private Use */ + [0xe662, 0xe662], /* Private Use */ + [0xe663, 0xe663], /* Private Use */ + [0xe664, 0xe664], /* Private Use */ + [0xe665, 0xe665], /* Private Use */ + [0xe666, 0xe666], /* Private Use */ + [0xe667, 0xe667], /* Private Use */ + [0xe668, 0xe668], /* Private Use */ + [0xe669, 0xe669], /* Private Use */ + [0xe66a, 0xe66a], /* Private Use */ + [0xe66b, 0xe66b], /* Private Use */ + [0xe66c, 0xe66c], /* Private Use */ + [0xe66d, 0xe66d], /* Private Use */ + [0xe66e, 0xe66e], /* Private Use */ + [0xe66f, 0xe66f], /* Private Use */ + [0xe670, 0xe670], /* Private Use */ + [0xe671, 0xe671], /* Private Use */ + [0xe672, 0xe672], /* Private Use */ + [0xe673, 0xe673], /* Private Use */ + [0xe674, 0xe674], /* Private Use */ + [0xe675, 0xe675], /* Private Use */ + [0xe676, 0xe676], /* Private Use */ + [0xe677, 0xe677], /* Private Use */ + [0xe678, 0xe678], /* Private Use */ + [0xe679, 0xe679], /* Private Use */ + [0xe67a, 0xe67a], /* Private Use */ + [0xe67b, 0xe67b], /* Private Use */ + [0xe67c, 0xe67c], /* Private Use */ + [0xe67d, 0xe67d], /* Private Use */ + [0xe67e, 0xe67e], /* Private Use */ + [0xe67f, 0xe67f], /* Private Use */ + [0xe680, 0xe680], /* Private Use */ + [0xe681, 0xe681], /* Private Use */ + [0xe682, 0xe682], /* Private Use */ + [0xe683, 0xe683], /* Private Use */ + [0xe684, 0xe684], /* Private Use */ + [0xe685, 0xe685], /* Private Use */ + [0xe686, 0xe686], /* Private Use */ + [0xe687, 0xe687], /* Private Use */ + [0xe688, 0xe688], /* Private Use */ + [0xe689, 0xe689], /* Private Use */ + [0xe68a, 0xe68a], /* Private Use */ + [0xe68b, 0xe68b], /* Private Use */ + [0xe68c, 0xe68c], /* Private Use */ + [0xe68d, 0xe68d], /* Private Use */ + [0xe68e, 0xe68e], /* Private Use */ + [0xe68f, 0xe68f], /* Private Use */ + [0xe690, 0xe690], /* Private Use */ + [0xe691, 0xe691], /* Private Use */ + [0xe692, 0xe692], /* Private Use */ + [0xe693, 0xe693], /* Private Use */ + [0xe694, 0xe694], /* Private Use */ + [0xe695, 0xe695], /* Private Use */ + [0xe696, 0xe696], /* Private Use */ + [0xe697, 0xe697], /* Private Use */ + [0xe698, 0xe698], /* Private Use */ + [0xe699, 0xe699], /* Private Use */ + [0xe69a, 0xe69a], /* Private Use */ + [0xe69b, 0xe69b], /* Private Use */ + [0xe69c, 0xe69c], /* Private Use */ + [0xe69d, 0xe69d], /* Private Use */ + [0xe69e, 0xe69e], /* Private Use */ + [0xe69f, 0xe69f], /* Private Use */ + [0xe6a0, 0xe6a0], /* Private Use */ + [0xe6a1, 0xe6a1], /* Private Use */ + [0xe6a2, 0xe6a2], /* Private Use */ + [0xe6a3, 0xe6a3], /* Private Use */ + [0xe6a4, 0xe6a4], /* Private Use */ + [0xe6a5, 0xe6a5], /* Private Use */ + [0xe6a6, 0xe6a6], /* Private Use */ + [0xe6a7, 0xe6a7], /* Private Use */ + [0xe6a8, 0xe6a8], /* Private Use */ + [0xe6a9, 0xe6a9], /* Private Use */ + [0xe6aa, 0xe6aa], /* Private Use */ + [0xe6ab, 0xe6ab], /* Private Use */ + [0xe6ac, 0xe6ac], /* Private Use */ + [0xe6ad, 0xe6ad], /* Private Use */ + [0xe6ae, 0xe6ae], /* Private Use */ + [0xe6af, 0xe6af], /* Private Use */ + [0xe6b0, 0xe6b0], /* Private Use */ + [0xe6b1, 0xe6b1], /* Private Use */ + [0xe6b2, 0xe6b2], /* Private Use */ + [0xe6b3, 0xe6b3], /* Private Use */ + [0xe6b4, 0xe6b4], /* Private Use */ + [0xe6b5, 0xe6b5], /* Private Use */ + [0xe6b6, 0xe6b6], /* Private Use */ + [0xe6b7, 0xe6b7], /* Private Use */ + [0xe6b8, 0xe6b8], /* Private Use */ + [0xe6b9, 0xe6b9], /* Private Use */ + [0xe6ba, 0xe6ba], /* Private Use */ + [0xe6bb, 0xe6bb], /* Private Use */ + [0xe6bc, 0xe6bc], /* Private Use */ + [0xe6bd, 0xe6bd], /* Private Use */ + [0xe6be, 0xe6be], /* Private Use */ + [0xe6bf, 0xe6bf], /* Private Use */ + [0xe6c0, 0xe6c0], /* Private Use */ + [0xe6c1, 0xe6c1], /* Private Use */ + [0xe6c2, 0xe6c2], /* Private Use */ + [0xe6c3, 0xe6c3], /* Private Use */ + [0xe6c4, 0xe6c4], /* Private Use */ + [0xe6c5, 0xe6c5], /* Private Use */ + [0xe6c6, 0xe6c6], /* Private Use */ + [0xe6c7, 0xe6c7], /* Private Use */ + [0xe6c8, 0xe6c8], /* Private Use */ + [0xe6c9, 0xe6c9], /* Private Use */ + [0xe6ca, 0xe6ca], /* Private Use */ + [0xe6cb, 0xe6cb], /* Private Use */ + [0xe6cc, 0xe6cc], /* Private Use */ + [0xe6cd, 0xe6cd], /* Private Use */ + [0xe6ce, 0xe6ce], /* Private Use */ + [0xe6cf, 0xe6cf], /* Private Use */ + [0xe6d0, 0xe6d0], /* Private Use */ + [0xe6d1, 0xe6d1], /* Private Use */ + [0xe6d2, 0xe6d2], /* Private Use */ + [0xe6d3, 0xe6d3], /* Private Use */ + [0xe6d4, 0xe6d4], /* Private Use */ + [0xe6d5, 0xe6d5], /* Private Use */ + [0xe6d6, 0xe6d6], /* Private Use */ + [0xe6d7, 0xe6d7], /* Private Use */ + [0xe6d8, 0xe6d8], /* Private Use */ + [0xe6d9, 0xe6d9], /* Private Use */ + [0xe6da, 0xe6da], /* Private Use */ + [0xe6db, 0xe6db], /* Private Use */ + [0xe6dc, 0xe6dc], /* Private Use */ + [0xe6dd, 0xe6dd], /* Private Use */ + [0xe6de, 0xe6de], /* Private Use */ + [0xe6df, 0xe6df], /* Private Use */ + [0xe6e0, 0xe6e0], /* Private Use */ + [0xe6e1, 0xe6e1], /* Private Use */ + [0xe6e2, 0xe6e2], /* Private Use */ + [0xe6e3, 0xe6e3], /* Private Use */ + [0xe6e4, 0xe6e4], /* Private Use */ + [0xe6e5, 0xe6e5], /* Private Use */ + [0xe6e6, 0xe6e6], /* Private Use */ + [0xe6e7, 0xe6e7], /* Private Use */ + [0xe6e8, 0xe6e8], /* Private Use */ + [0xe6e9, 0xe6e9], /* Private Use */ + [0xe6ea, 0xe6ea], /* Private Use */ + [0xe6eb, 0xe6eb], /* Private Use */ + [0xe6ec, 0xe6ec], /* Private Use */ + [0xe6ed, 0xe6ed], /* Private Use */ + [0xe6ee, 0xe6ee], /* Private Use */ + [0xe6ef, 0xe6ef], /* Private Use */ + [0xe6f0, 0xe6f0], /* Private Use */ + [0xe6f1, 0xe6f1], /* Private Use */ + [0xe6f2, 0xe6f2], /* Private Use */ + [0xe6f3, 0xe6f3], /* Private Use */ + [0xe6f4, 0xe6f4], /* Private Use */ + [0xe6f5, 0xe6f5], /* Private Use */ + [0xe6f6, 0xe6f6], /* Private Use */ + [0xe6f7, 0xe6f7], /* Private Use */ + [0xe6f8, 0xe6f8], /* Private Use */ + [0xe6f9, 0xe6f9], /* Private Use */ + [0xe6fa, 0xe6fa], /* Private Use */ + [0xe6fb, 0xe6fb], /* Private Use */ + [0xe6fc, 0xe6fc], /* Private Use */ + [0xe6fd, 0xe6fd], /* Private Use */ + [0xe6fe, 0xe6fe], /* Private Use */ + [0xe6ff, 0xe6ff], /* Private Use */ + [0xe700, 0xe700], /* Private Use */ + [0xe701, 0xe701], /* Private Use */ + [0xe702, 0xe702], /* Private Use */ + [0xe703, 0xe703], /* Private Use */ + [0xe704, 0xe704], /* Private Use */ + [0xe705, 0xe705], /* Private Use */ + [0xe706, 0xe706], /* Private Use */ + [0xe707, 0xe707], /* Private Use */ + [0xe708, 0xe708], /* Private Use */ + [0xe709, 0xe709], /* Private Use */ + [0xe70a, 0xe70a], /* Private Use */ + [0xe70b, 0xe70b], /* Private Use */ + [0xe70c, 0xe70c], /* Private Use */ + [0xe70d, 0xe70d], /* Private Use */ + [0xe70e, 0xe70e], /* Private Use */ + [0xe70f, 0xe70f], /* Private Use */ + [0xe710, 0xe710], /* Private Use */ + [0xe711, 0xe711], /* Private Use */ + [0xe712, 0xe712], /* Private Use */ + [0xe713, 0xe713], /* Private Use */ + [0xe714, 0xe714], /* Private Use */ + [0xe715, 0xe715], /* Private Use */ + [0xe716, 0xe716], /* Private Use */ + [0xe717, 0xe717], /* Private Use */ + [0xe718, 0xe718], /* Private Use */ + [0xe719, 0xe719], /* Private Use */ + [0xe71a, 0xe71a], /* Private Use */ + [0xe71b, 0xe71b], /* Private Use */ + [0xe71c, 0xe71c], /* Private Use */ + [0xe71d, 0xe71d], /* Private Use */ + [0xe71e, 0xe71e], /* Private Use */ + [0xe71f, 0xe71f], /* Private Use */ + [0xe720, 0xe720], /* Private Use */ + [0xe721, 0xe721], /* Private Use */ + [0xe722, 0xe722], /* Private Use */ + [0xe723, 0xe723], /* Private Use */ + [0xe724, 0xe724], /* Private Use */ + [0xe725, 0xe725], /* Private Use */ + [0xe726, 0xe726], /* Private Use */ + [0xe727, 0xe727], /* Private Use */ + [0xe728, 0xe728], /* Private Use */ + [0xe729, 0xe729], /* Private Use */ + [0xe72a, 0xe72a], /* Private Use */ + [0xe72b, 0xe72b], /* Private Use */ + [0xe72c, 0xe72c], /* Private Use */ + [0xe72d, 0xe72d], /* Private Use */ + [0xe72e, 0xe72e], /* Private Use */ + [0xe72f, 0xe72f], /* Private Use */ + [0xe730, 0xe730], /* Private Use */ + [0xe731, 0xe731], /* Private Use */ + [0xe732, 0xe732], /* Private Use */ + [0xe733, 0xe733], /* Private Use */ + [0xe734, 0xe734], /* Private Use */ + [0xe735, 0xe735], /* Private Use */ + [0xe736, 0xe736], /* Private Use */ + [0xe737, 0xe737], /* Private Use */ + [0xe738, 0xe738], /* Private Use */ + [0xe739, 0xe739], /* Private Use */ + [0xe73a, 0xe73a], /* Private Use */ + [0xe73b, 0xe73b], /* Private Use */ + [0xe73c, 0xe73c], /* Private Use */ + [0xe73d, 0xe73d], /* Private Use */ + [0xe73e, 0xe73e], /* Private Use */ + [0xe73f, 0xe73f], /* Private Use */ + [0xe740, 0xe740], /* Private Use */ + [0xe741, 0xe741], /* Private Use */ + [0xe742, 0xe742], /* Private Use */ + [0xe743, 0xe743], /* Private Use */ + [0xe744, 0xe744], /* Private Use */ + [0xe745, 0xe745], /* Private Use */ + [0xe746, 0xe746], /* Private Use */ + [0xe747, 0xe747], /* Private Use */ + [0xe748, 0xe748], /* Private Use */ + [0xe749, 0xe749], /* Private Use */ + [0xe74a, 0xe74a], /* Private Use */ + [0xe74b, 0xe74b], /* Private Use */ + [0xe74c, 0xe74c], /* Private Use */ + [0xe74d, 0xe74d], /* Private Use */ + [0xe74e, 0xe74e], /* Private Use */ + [0xe74f, 0xe74f], /* Private Use */ + [0xe750, 0xe750], /* Private Use */ + [0xe751, 0xe751], /* Private Use */ + [0xe752, 0xe752], /* Private Use */ + [0xe753, 0xe753], /* Private Use */ + [0xe754, 0xe754], /* Private Use */ + [0xe755, 0xe755], /* Private Use */ + [0xe756, 0xe756], /* Private Use */ + [0xe757, 0xe757], /* Private Use */ + [0xe758, 0xe758], /* Private Use */ + [0xe759, 0xe759], /* Private Use */ + [0xe75a, 0xe75a], /* Private Use */ + [0xe75b, 0xe75b], /* Private Use */ + [0xe75c, 0xe75c], /* Private Use */ + [0xe75d, 0xe75d], /* Private Use */ + [0xe75e, 0xe75e], /* Private Use */ + [0xe75f, 0xe75f], /* Private Use */ + [0xe760, 0xe760], /* Private Use */ + [0xe761, 0xe761], /* Private Use */ + [0xe762, 0xe762], /* Private Use */ + [0xe763, 0xe763], /* Private Use */ + [0xe764, 0xe764], /* Private Use */ + [0xe765, 0xe765], /* Private Use */ + [0xe766, 0xe766], /* Private Use */ + [0xe767, 0xe767], /* Private Use */ + [0xe768, 0xe768], /* Private Use */ + [0xe769, 0xe769], /* Private Use */ + [0xe76a, 0xe76a], /* Private Use */ + [0xe76b, 0xe76b], /* Private Use */ + [0xe76c, 0xe76c], /* Private Use */ + [0xe76d, 0xe76d], /* Private Use */ + [0xe76e, 0xe76e], /* Private Use */ + [0xe76f, 0xe76f], /* Private Use */ + [0xe770, 0xe770], /* Private Use */ + [0xe771, 0xe771], /* Private Use */ + [0xe772, 0xe772], /* Private Use */ + [0xe773, 0xe773], /* Private Use */ + [0xe774, 0xe774], /* Private Use */ + [0xe775, 0xe775], /* Private Use */ + [0xe776, 0xe776], /* Private Use */ + [0xe777, 0xe777], /* Private Use */ + [0xe778, 0xe778], /* Private Use */ + [0xe779, 0xe779], /* Private Use */ + [0xe77a, 0xe77a], /* Private Use */ + [0xe77b, 0xe77b], /* Private Use */ + [0xe77c, 0xe77c], /* Private Use */ + [0xe77d, 0xe77d], /* Private Use */ + [0xe77e, 0xe77e], /* Private Use */ + [0xe77f, 0xe77f], /* Private Use */ + [0xe780, 0xe780], /* Private Use */ + [0xe781, 0xe781], /* Private Use */ + [0xe782, 0xe782], /* Private Use */ + [0xe783, 0xe783], /* Private Use */ + [0xe784, 0xe784], /* Private Use */ + [0xe785, 0xe785], /* Private Use */ + [0xe786, 0xe786], /* Private Use */ + [0xe787, 0xe787], /* Private Use */ + [0xe788, 0xe788], /* Private Use */ + [0xe789, 0xe789], /* Private Use */ + [0xe78a, 0xe78a], /* Private Use */ + [0xe78b, 0xe78b], /* Private Use */ + [0xe78c, 0xe78c], /* Private Use */ + [0xe78d, 0xe78d], /* Private Use */ + [0xe78e, 0xe78e], /* Private Use */ + [0xe78f, 0xe78f], /* Private Use */ + [0xe790, 0xe790], /* Private Use */ + [0xe791, 0xe791], /* Private Use */ + [0xe792, 0xe792], /* Private Use */ + [0xe793, 0xe793], /* Private Use */ + [0xe794, 0xe794], /* Private Use */ + [0xe795, 0xe795], /* Private Use */ + [0xe796, 0xe796], /* Private Use */ + [0xe797, 0xe797], /* Private Use */ + [0xe798, 0xe798], /* Private Use */ + [0xe799, 0xe799], /* Private Use */ + [0xe79a, 0xe79a], /* Private Use */ + [0xe79b, 0xe79b], /* Private Use */ + [0xe79c, 0xe79c], /* Private Use */ + [0xe79d, 0xe79d], /* Private Use */ + [0xe79e, 0xe79e], /* Private Use */ + [0xe79f, 0xe79f], /* Private Use */ + [0xe7a0, 0xe7a0], /* Private Use */ + [0xe7a1, 0xe7a1], /* Private Use */ + [0xe7a2, 0xe7a2], /* Private Use */ + [0xe7a3, 0xe7a3], /* Private Use */ + [0xe7a4, 0xe7a4], /* Private Use */ + [0xe7a5, 0xe7a5], /* Private Use */ + [0xe7a6, 0xe7a6], /* Private Use */ + [0xe7a7, 0xe7a7], /* Private Use */ + [0xe7a8, 0xe7a8], /* Private Use */ + [0xe7a9, 0xe7a9], /* Private Use */ + [0xe7aa, 0xe7aa], /* Private Use */ + [0xe7ab, 0xe7ab], /* Private Use */ + [0xe7ac, 0xe7ac], /* Private Use */ + [0xe7ad, 0xe7ad], /* Private Use */ + [0xe7ae, 0xe7ae], /* Private Use */ + [0xe7af, 0xe7af], /* Private Use */ + [0xe7b0, 0xe7b0], /* Private Use */ + [0xe7b1, 0xe7b1], /* Private Use */ + [0xe7b2, 0xe7b2], /* Private Use */ + [0xe7b3, 0xe7b3], /* Private Use */ + [0xe7b4, 0xe7b4], /* Private Use */ + [0xe7b5, 0xe7b5], /* Private Use */ + [0xe7b6, 0xe7b6], /* Private Use */ + [0xe7b7, 0xe7b7], /* Private Use */ + [0xe7b8, 0xe7b8], /* Private Use */ + [0xe7b9, 0xe7b9], /* Private Use */ + [0xe7ba, 0xe7ba], /* Private Use */ + [0xe7bb, 0xe7bb], /* Private Use */ + [0xe7bc, 0xe7bc], /* Private Use */ + [0xe7bd, 0xe7bd], /* Private Use */ + [0xe7be, 0xe7be], /* Private Use */ + [0xe7bf, 0xe7bf], /* Private Use */ + [0xe7c0, 0xe7c0], /* Private Use */ + [0xe7c1, 0xe7c1], /* Private Use */ + [0xe7c2, 0xe7c2], /* Private Use */ + [0xe7c3, 0xe7c3], /* Private Use */ + [0xe7c4, 0xe7c4], /* Private Use */ + [0xe7c5, 0xe7c5], /* Private Use */ + [0xe7c6, 0xe7c6], /* Private Use */ + [0xe7c7, 0xe7c7], /* Private Use */ + [0xe7c8, 0xe7c8], /* Private Use */ + [0xe7c9, 0xe7c9], /* Private Use */ + [0xe7ca, 0xe7ca], /* Private Use */ + [0xe7cb, 0xe7cb], /* Private Use */ + [0xe7cc, 0xe7cc], /* Private Use */ + [0xe7cd, 0xe7cd], /* Private Use */ + [0xe7ce, 0xe7ce], /* Private Use */ + [0xe7cf, 0xe7cf], /* Private Use */ + [0xe7d0, 0xe7d0], /* Private Use */ + [0xe7d1, 0xe7d1], /* Private Use */ + [0xe7d2, 0xe7d2], /* Private Use */ + [0xe7d3, 0xe7d3], /* Private Use */ + [0xe7d4, 0xe7d4], /* Private Use */ + [0xe7d5, 0xe7d5], /* Private Use */ + [0xe7d6, 0xe7d6], /* Private Use */ + [0xe7d7, 0xe7d7], /* Private Use */ + [0xe7d8, 0xe7d8], /* Private Use */ + [0xe7d9, 0xe7d9], /* Private Use */ + [0xe7da, 0xe7da], /* Private Use */ + [0xe7db, 0xe7db], /* Private Use */ + [0xe7dc, 0xe7dc], /* Private Use */ + [0xe7dd, 0xe7dd], /* Private Use */ + [0xe7de, 0xe7de], /* Private Use */ + [0xe7df, 0xe7df], /* Private Use */ + [0xe7e0, 0xe7e0], /* Private Use */ + [0xe7e1, 0xe7e1], /* Private Use */ + [0xe7e2, 0xe7e2], /* Private Use */ + [0xe7e3, 0xe7e3], /* Private Use */ + [0xe7e4, 0xe7e4], /* Private Use */ + [0xe7e5, 0xe7e5], /* Private Use */ + [0xe7e6, 0xe7e6], /* Private Use */ + [0xe7e7, 0xe7e7], /* Private Use */ + [0xe7e8, 0xe7e8], /* Private Use */ + [0xe7e9, 0xe7e9], /* Private Use */ + [0xe7ea, 0xe7ea], /* Private Use */ + [0xe7eb, 0xe7eb], /* Private Use */ + [0xe7ec, 0xe7ec], /* Private Use */ + [0xe7ed, 0xe7ed], /* Private Use */ + [0xe7ee, 0xe7ee], /* Private Use */ + [0xe7ef, 0xe7ef], /* Private Use */ + [0xe7f0, 0xe7f0], /* Private Use */ + [0xe7f1, 0xe7f1], /* Private Use */ + [0xe7f2, 0xe7f2], /* Private Use */ + [0xe7f3, 0xe7f3], /* Private Use */ + [0xe7f4, 0xe7f4], /* Private Use */ + [0xe7f5, 0xe7f5], /* Private Use */ + [0xe7f6, 0xe7f6], /* Private Use */ + [0xe7f7, 0xe7f7], /* Private Use */ + [0xe7f8, 0xe7f8], /* Private Use */ + [0xe7f9, 0xe7f9], /* Private Use */ + [0xe7fa, 0xe7fa], /* Private Use */ + [0xe7fb, 0xe7fb], /* Private Use */ + [0xe7fc, 0xe7fc], /* Private Use */ + [0xe7fd, 0xe7fd], /* Private Use */ + [0xe7fe, 0xe7fe], /* Private Use */ + [0xe7ff, 0xe7ff], /* Private Use */ + [0xe800, 0xe800], /* Private Use */ + [0xe801, 0xe801], /* Private Use */ + [0xe802, 0xe802], /* Private Use */ + [0xe803, 0xe803], /* Private Use */ + [0xe804, 0xe804], /* Private Use */ + [0xe805, 0xe805], /* Private Use */ + [0xe806, 0xe806], /* Private Use */ + [0xe807, 0xe807], /* Private Use */ + [0xe808, 0xe808], /* Private Use */ + [0xe809, 0xe809], /* Private Use */ + [0xe80a, 0xe80a], /* Private Use */ + [0xe80b, 0xe80b], /* Private Use */ + [0xe80c, 0xe80c], /* Private Use */ + [0xe80d, 0xe80d], /* Private Use */ + [0xe80e, 0xe80e], /* Private Use */ + [0xe80f, 0xe80f], /* Private Use */ + [0xe810, 0xe810], /* Private Use */ + [0xe811, 0xe811], /* Private Use */ + [0xe812, 0xe812], /* Private Use */ + [0xe813, 0xe813], /* Private Use */ + [0xe814, 0xe814], /* Private Use */ + [0xe815, 0xe815], /* Private Use */ + [0xe816, 0xe816], /* Private Use */ + [0xe817, 0xe817], /* Private Use */ + [0xe818, 0xe818], /* Private Use */ + [0xe819, 0xe819], /* Private Use */ + [0xe81a, 0xe81a], /* Private Use */ + [0xe81b, 0xe81b], /* Private Use */ + [0xe81c, 0xe81c], /* Private Use */ + [0xe81d, 0xe81d], /* Private Use */ + [0xe81e, 0xe81e], /* Private Use */ + [0xe81f, 0xe81f], /* Private Use */ + [0xe820, 0xe820], /* Private Use */ + [0xe821, 0xe821], /* Private Use */ + [0xe822, 0xe822], /* Private Use */ + [0xe823, 0xe823], /* Private Use */ + [0xe824, 0xe824], /* Private Use */ + [0xe825, 0xe825], /* Private Use */ + [0xe826, 0xe826], /* Private Use */ + [0xe827, 0xe827], /* Private Use */ + [0xe828, 0xe828], /* Private Use */ + [0xe829, 0xe829], /* Private Use */ + [0xe82a, 0xe82a], /* Private Use */ + [0xe82b, 0xe82b], /* Private Use */ + [0xe82c, 0xe82c], /* Private Use */ + [0xe82d, 0xe82d], /* Private Use */ + [0xe82e, 0xe82e], /* Private Use */ + [0xe82f, 0xe82f], /* Private Use */ + [0xe830, 0xe830], /* Private Use */ + [0xe831, 0xe831], /* Private Use */ + [0xe832, 0xe832], /* Private Use */ + [0xe833, 0xe833], /* Private Use */ + [0xe834, 0xe834], /* Private Use */ + [0xe835, 0xe835], /* Private Use */ + [0xe836, 0xe836], /* Private Use */ + [0xe837, 0xe837], /* Private Use */ + [0xe838, 0xe838], /* Private Use */ + [0xe839, 0xe839], /* Private Use */ + [0xe83a, 0xe83a], /* Private Use */ + [0xe83b, 0xe83b], /* Private Use */ + [0xe83c, 0xe83c], /* Private Use */ + [0xe83d, 0xe83d], /* Private Use */ + [0xe83e, 0xe83e], /* Private Use */ + [0xe83f, 0xe83f], /* Private Use */ + [0xe840, 0xe840], /* Private Use */ + [0xe841, 0xe841], /* Private Use */ + [0xe842, 0xe842], /* Private Use */ + [0xe843, 0xe843], /* Private Use */ + [0xe844, 0xe844], /* Private Use */ + [0xe845, 0xe845], /* Private Use */ + [0xe846, 0xe846], /* Private Use */ + [0xe847, 0xe847], /* Private Use */ + [0xe848, 0xe848], /* Private Use */ + [0xe849, 0xe849], /* Private Use */ + [0xe84a, 0xe84a], /* Private Use */ + [0xe84b, 0xe84b], /* Private Use */ + [0xe84c, 0xe84c], /* Private Use */ + [0xe84d, 0xe84d], /* Private Use */ + [0xe84e, 0xe84e], /* Private Use */ + [0xe84f, 0xe84f], /* Private Use */ + [0xe850, 0xe850], /* Private Use */ + [0xe851, 0xe851], /* Private Use */ + [0xe852, 0xe852], /* Private Use */ + [0xe853, 0xe853], /* Private Use */ + [0xe854, 0xe854], /* Private Use */ + [0xe855, 0xe855], /* Private Use */ + [0xe856, 0xe856], /* Private Use */ + [0xe857, 0xe857], /* Private Use */ + [0xe858, 0xe858], /* Private Use */ + [0xe859, 0xe859], /* Private Use */ + [0xe85a, 0xe85a], /* Private Use */ + [0xe85b, 0xe85b], /* Private Use */ + [0xe85c, 0xe85c], /* Private Use */ + [0xe85d, 0xe85d], /* Private Use */ + [0xe85e, 0xe85e], /* Private Use */ + [0xe85f, 0xe85f], /* Private Use */ + [0xe860, 0xe860], /* Private Use */ + [0xe861, 0xe861], /* Private Use */ + [0xe862, 0xe862], /* Private Use */ + [0xe863, 0xe863], /* Private Use */ + [0xe864, 0xe864], /* Private Use */ + [0xe865, 0xe865], /* Private Use */ + [0xe866, 0xe866], /* Private Use */ + [0xe867, 0xe867], /* Private Use */ + [0xe868, 0xe868], /* Private Use */ + [0xe869, 0xe869], /* Private Use */ + [0xe86a, 0xe86a], /* Private Use */ + [0xe86b, 0xe86b], /* Private Use */ + [0xe86c, 0xe86c], /* Private Use */ + [0xe86d, 0xe86d], /* Private Use */ + [0xe86e, 0xe86e], /* Private Use */ + [0xe86f, 0xe86f], /* Private Use */ + [0xe870, 0xe870], /* Private Use */ + [0xe871, 0xe871], /* Private Use */ + [0xe872, 0xe872], /* Private Use */ + [0xe873, 0xe873], /* Private Use */ + [0xe874, 0xe874], /* Private Use */ + [0xe875, 0xe875], /* Private Use */ + [0xe876, 0xe876], /* Private Use */ + [0xe877, 0xe877], /* Private Use */ + [0xe878, 0xe878], /* Private Use */ + [0xe879, 0xe879], /* Private Use */ + [0xe87a, 0xe87a], /* Private Use */ + [0xe87b, 0xe87b], /* Private Use */ + [0xe87c, 0xe87c], /* Private Use */ + [0xe87d, 0xe87d], /* Private Use */ + [0xe87e, 0xe87e], /* Private Use */ + [0xe87f, 0xe87f], /* Private Use */ + [0xe880, 0xe880], /* Private Use */ + [0xe881, 0xe881], /* Private Use */ + [0xe882, 0xe882], /* Private Use */ + [0xe883, 0xe883], /* Private Use */ + [0xe884, 0xe884], /* Private Use */ + [0xe885, 0xe885], /* Private Use */ + [0xe886, 0xe886], /* Private Use */ + [0xe887, 0xe887], /* Private Use */ + [0xe888, 0xe888], /* Private Use */ + [0xe889, 0xe889], /* Private Use */ + [0xe88a, 0xe88a], /* Private Use */ + [0xe88b, 0xe88b], /* Private Use */ + [0xe88c, 0xe88c], /* Private Use */ + [0xe88d, 0xe88d], /* Private Use */ + [0xe88e, 0xe88e], /* Private Use */ + [0xe88f, 0xe88f], /* Private Use */ + [0xe890, 0xe890], /* Private Use */ + [0xe891, 0xe891], /* Private Use */ + [0xe892, 0xe892], /* Private Use */ + [0xe893, 0xe893], /* Private Use */ + [0xe894, 0xe894], /* Private Use */ + [0xe895, 0xe895], /* Private Use */ + [0xe896, 0xe896], /* Private Use */ + [0xe897, 0xe897], /* Private Use */ + [0xe898, 0xe898], /* Private Use */ + [0xe899, 0xe899], /* Private Use */ + [0xe89a, 0xe89a], /* Private Use */ + [0xe89b, 0xe89b], /* Private Use */ + [0xe89c, 0xe89c], /* Private Use */ + [0xe89d, 0xe89d], /* Private Use */ + [0xe89e, 0xe89e], /* Private Use */ + [0xe89f, 0xe89f], /* Private Use */ + [0xe8a0, 0xe8a0], /* Private Use */ + [0xe8a1, 0xe8a1], /* Private Use */ + [0xe8a2, 0xe8a2], /* Private Use */ + [0xe8a3, 0xe8a3], /* Private Use */ + [0xe8a4, 0xe8a4], /* Private Use */ + [0xe8a5, 0xe8a5], /* Private Use */ + [0xe8a6, 0xe8a6], /* Private Use */ + [0xe8a7, 0xe8a7], /* Private Use */ + [0xe8a8, 0xe8a8], /* Private Use */ + [0xe8a9, 0xe8a9], /* Private Use */ + [0xe8aa, 0xe8aa], /* Private Use */ + [0xe8ab, 0xe8ab], /* Private Use */ + [0xe8ac, 0xe8ac], /* Private Use */ + [0xe8ad, 0xe8ad], /* Private Use */ + [0xe8ae, 0xe8ae], /* Private Use */ + [0xe8af, 0xe8af], /* Private Use */ + [0xe8b0, 0xe8b0], /* Private Use */ + [0xe8b1, 0xe8b1], /* Private Use */ + [0xe8b2, 0xe8b2], /* Private Use */ + [0xe8b3, 0xe8b3], /* Private Use */ + [0xe8b4, 0xe8b4], /* Private Use */ + [0xe8b5, 0xe8b5], /* Private Use */ + [0xe8b6, 0xe8b6], /* Private Use */ + [0xe8b7, 0xe8b7], /* Private Use */ + [0xe8b8, 0xe8b8], /* Private Use */ + [0xe8b9, 0xe8b9], /* Private Use */ + [0xe8ba, 0xe8ba], /* Private Use */ + [0xe8bb, 0xe8bb], /* Private Use */ + [0xe8bc, 0xe8bc], /* Private Use */ + [0xe8bd, 0xe8bd], /* Private Use */ + [0xe8be, 0xe8be], /* Private Use */ + [0xe8bf, 0xe8bf], /* Private Use */ + [0xe8c0, 0xe8c0], /* Private Use */ + [0xe8c1, 0xe8c1], /* Private Use */ + [0xe8c2, 0xe8c2], /* Private Use */ + [0xe8c3, 0xe8c3], /* Private Use */ + [0xe8c4, 0xe8c4], /* Private Use */ + [0xe8c5, 0xe8c5], /* Private Use */ + [0xe8c6, 0xe8c6], /* Private Use */ + [0xe8c7, 0xe8c7], /* Private Use */ + [0xe8c8, 0xe8c8], /* Private Use */ + [0xe8c9, 0xe8c9], /* Private Use */ + [0xe8ca, 0xe8ca], /* Private Use */ + [0xe8cb, 0xe8cb], /* Private Use */ + [0xe8cc, 0xe8cc], /* Private Use */ + [0xe8cd, 0xe8cd], /* Private Use */ + [0xe8ce, 0xe8ce], /* Private Use */ + [0xe8cf, 0xe8cf], /* Private Use */ + [0xe8d0, 0xe8d0], /* Private Use */ + [0xe8d1, 0xe8d1], /* Private Use */ + [0xe8d2, 0xe8d2], /* Private Use */ + [0xe8d3, 0xe8d3], /* Private Use */ + [0xe8d4, 0xe8d4], /* Private Use */ + [0xe8d5, 0xe8d5], /* Private Use */ + [0xe8d6, 0xe8d6], /* Private Use */ + [0xe8d7, 0xe8d7], /* Private Use */ + [0xe8d8, 0xe8d8], /* Private Use */ + [0xe8d9, 0xe8d9], /* Private Use */ + [0xe8da, 0xe8da], /* Private Use */ + [0xe8db, 0xe8db], /* Private Use */ + [0xe8dc, 0xe8dc], /* Private Use */ + [0xe8dd, 0xe8dd], /* Private Use */ + [0xe8de, 0xe8de], /* Private Use */ + [0xe8df, 0xe8df], /* Private Use */ + [0xe8e0, 0xe8e0], /* Private Use */ + [0xe8e1, 0xe8e1], /* Private Use */ + [0xe8e2, 0xe8e2], /* Private Use */ + [0xe8e3, 0xe8e3], /* Private Use */ + [0xe8e4, 0xe8e4], /* Private Use */ + [0xe8e5, 0xe8e5], /* Private Use */ + [0xe8e6, 0xe8e6], /* Private Use */ + [0xe8e7, 0xe8e7], /* Private Use */ + [0xe8e8, 0xe8e8], /* Private Use */ + [0xe8e9, 0xe8e9], /* Private Use */ + [0xe8ea, 0xe8ea], /* Private Use */ + [0xe8eb, 0xe8eb], /* Private Use */ + [0xe8ec, 0xe8ec], /* Private Use */ + [0xe8ed, 0xe8ed], /* Private Use */ + [0xe8ee, 0xe8ee], /* Private Use */ + [0xe8ef, 0xe8ef], /* Private Use */ + [0xe8f0, 0xe8f0], /* Private Use */ + [0xe8f1, 0xe8f1], /* Private Use */ + [0xe8f2, 0xe8f2], /* Private Use */ + [0xe8f3, 0xe8f3], /* Private Use */ + [0xe8f4, 0xe8f4], /* Private Use */ + [0xe8f5, 0xe8f5], /* Private Use */ + [0xe8f6, 0xe8f6], /* Private Use */ + [0xe8f7, 0xe8f7], /* Private Use */ + [0xe8f8, 0xe8f8], /* Private Use */ + [0xe8f9, 0xe8f9], /* Private Use */ + [0xe8fa, 0xe8fa], /* Private Use */ + [0xe8fb, 0xe8fb], /* Private Use */ + [0xe8fc, 0xe8fc], /* Private Use */ + [0xe8fd, 0xe8fd], /* Private Use */ + [0xe8fe, 0xe8fe], /* Private Use */ + [0xe8ff, 0xe8ff], /* Private Use */ + [0xe900, 0xe900], /* Private Use */ + [0xe901, 0xe901], /* Private Use */ + [0xe902, 0xe902], /* Private Use */ + [0xe903, 0xe903], /* Private Use */ + [0xe904, 0xe904], /* Private Use */ + [0xe905, 0xe905], /* Private Use */ + [0xe906, 0xe906], /* Private Use */ + [0xe907, 0xe907], /* Private Use */ + [0xe908, 0xe908], /* Private Use */ + [0xe909, 0xe909], /* Private Use */ + [0xe90a, 0xe90a], /* Private Use */ + [0xe90b, 0xe90b], /* Private Use */ + [0xe90c, 0xe90c], /* Private Use */ + [0xe90d, 0xe90d], /* Private Use */ + [0xe90e, 0xe90e], /* Private Use */ + [0xe90f, 0xe90f], /* Private Use */ + [0xe910, 0xe910], /* Private Use */ + [0xe911, 0xe911], /* Private Use */ + [0xe912, 0xe912], /* Private Use */ + [0xe913, 0xe913], /* Private Use */ + [0xe914, 0xe914], /* Private Use */ + [0xe915, 0xe915], /* Private Use */ + [0xe916, 0xe916], /* Private Use */ + [0xe917, 0xe917], /* Private Use */ + [0xe918, 0xe918], /* Private Use */ + [0xe919, 0xe919], /* Private Use */ + [0xe91a, 0xe91a], /* Private Use */ + [0xe91b, 0xe91b], /* Private Use */ + [0xe91c, 0xe91c], /* Private Use */ + [0xe91d, 0xe91d], /* Private Use */ + [0xe91e, 0xe91e], /* Private Use */ + [0xe91f, 0xe91f], /* Private Use */ + [0xe920, 0xe920], /* Private Use */ + [0xe921, 0xe921], /* Private Use */ + [0xe922, 0xe922], /* Private Use */ + [0xe923, 0xe923], /* Private Use */ + [0xe924, 0xe924], /* Private Use */ + [0xe925, 0xe925], /* Private Use */ + [0xe926, 0xe926], /* Private Use */ + [0xe927, 0xe927], /* Private Use */ + [0xe928, 0xe928], /* Private Use */ + [0xe929, 0xe929], /* Private Use */ + [0xe92a, 0xe92a], /* Private Use */ + [0xe92b, 0xe92b], /* Private Use */ + [0xe92c, 0xe92c], /* Private Use */ + [0xe92d, 0xe92d], /* Private Use */ + [0xe92e, 0xe92e], /* Private Use */ + [0xe92f, 0xe92f], /* Private Use */ + [0xe930, 0xe930], /* Private Use */ + [0xe931, 0xe931], /* Private Use */ + [0xe932, 0xe932], /* Private Use */ + [0xe933, 0xe933], /* Private Use */ + [0xe934, 0xe934], /* Private Use */ + [0xe935, 0xe935], /* Private Use */ + [0xe936, 0xe936], /* Private Use */ + [0xe937, 0xe937], /* Private Use */ + [0xe938, 0xe938], /* Private Use */ + [0xe939, 0xe939], /* Private Use */ + [0xe93a, 0xe93a], /* Private Use */ + [0xe93b, 0xe93b], /* Private Use */ + [0xe93c, 0xe93c], /* Private Use */ + [0xe93d, 0xe93d], /* Private Use */ + [0xe93e, 0xe93e], /* Private Use */ + [0xe93f, 0xe93f], /* Private Use */ + [0xe940, 0xe940], /* Private Use */ + [0xe941, 0xe941], /* Private Use */ + [0xe942, 0xe942], /* Private Use */ + [0xe943, 0xe943], /* Private Use */ + [0xe944, 0xe944], /* Private Use */ + [0xe945, 0xe945], /* Private Use */ + [0xe946, 0xe946], /* Private Use */ + [0xe947, 0xe947], /* Private Use */ + [0xe948, 0xe948], /* Private Use */ + [0xe949, 0xe949], /* Private Use */ + [0xe94a, 0xe94a], /* Private Use */ + [0xe94b, 0xe94b], /* Private Use */ + [0xe94c, 0xe94c], /* Private Use */ + [0xe94d, 0xe94d], /* Private Use */ + [0xe94e, 0xe94e], /* Private Use */ + [0xe94f, 0xe94f], /* Private Use */ + [0xe950, 0xe950], /* Private Use */ + [0xe951, 0xe951], /* Private Use */ + [0xe952, 0xe952], /* Private Use */ + [0xe953, 0xe953], /* Private Use */ + [0xe954, 0xe954], /* Private Use */ + [0xe955, 0xe955], /* Private Use */ + [0xe956, 0xe956], /* Private Use */ + [0xe957, 0xe957], /* Private Use */ + [0xe958, 0xe958], /* Private Use */ + [0xe959, 0xe959], /* Private Use */ + [0xe95a, 0xe95a], /* Private Use */ + [0xe95b, 0xe95b], /* Private Use */ + [0xe95c, 0xe95c], /* Private Use */ + [0xe95d, 0xe95d], /* Private Use */ + [0xe95e, 0xe95e], /* Private Use */ + [0xe95f, 0xe95f], /* Private Use */ + [0xe960, 0xe960], /* Private Use */ + [0xe961, 0xe961], /* Private Use */ + [0xe962, 0xe962], /* Private Use */ + [0xe963, 0xe963], /* Private Use */ + [0xe964, 0xe964], /* Private Use */ + [0xe965, 0xe965], /* Private Use */ + [0xe966, 0xe966], /* Private Use */ + [0xe967, 0xe967], /* Private Use */ + [0xe968, 0xe968], /* Private Use */ + [0xe969, 0xe969], /* Private Use */ + [0xe96a, 0xe96a], /* Private Use */ + [0xe96b, 0xe96b], /* Private Use */ + [0xe96c, 0xe96c], /* Private Use */ + [0xe96d, 0xe96d], /* Private Use */ + [0xe96e, 0xe96e], /* Private Use */ + [0xe96f, 0xe96f], /* Private Use */ + [0xe970, 0xe970], /* Private Use */ + [0xe971, 0xe971], /* Private Use */ + [0xe972, 0xe972], /* Private Use */ + [0xe973, 0xe973], /* Private Use */ + [0xe974, 0xe974], /* Private Use */ + [0xe975, 0xe975], /* Private Use */ + [0xe976, 0xe976], /* Private Use */ + [0xe977, 0xe977], /* Private Use */ + [0xe978, 0xe978], /* Private Use */ + [0xe979, 0xe979], /* Private Use */ + [0xe97a, 0xe97a], /* Private Use */ + [0xe97b, 0xe97b], /* Private Use */ + [0xe97c, 0xe97c], /* Private Use */ + [0xe97d, 0xe97d], /* Private Use */ + [0xe97e, 0xe97e], /* Private Use */ + [0xe97f, 0xe97f], /* Private Use */ + [0xe980, 0xe980], /* Private Use */ + [0xe981, 0xe981], /* Private Use */ + [0xe982, 0xe982], /* Private Use */ + [0xe983, 0xe983], /* Private Use */ + [0xe984, 0xe984], /* Private Use */ + [0xe985, 0xe985], /* Private Use */ + [0xe986, 0xe986], /* Private Use */ + [0xe987, 0xe987], /* Private Use */ + [0xe988, 0xe988], /* Private Use */ + [0xe989, 0xe989], /* Private Use */ + [0xe98a, 0xe98a], /* Private Use */ + [0xe98b, 0xe98b], /* Private Use */ + [0xe98c, 0xe98c], /* Private Use */ + [0xe98d, 0xe98d], /* Private Use */ + [0xe98e, 0xe98e], /* Private Use */ + [0xe98f, 0xe98f], /* Private Use */ + [0xe990, 0xe990], /* Private Use */ + [0xe991, 0xe991], /* Private Use */ + [0xe992, 0xe992], /* Private Use */ + [0xe993, 0xe993], /* Private Use */ + [0xe994, 0xe994], /* Private Use */ + [0xe995, 0xe995], /* Private Use */ + [0xe996, 0xe996], /* Private Use */ + [0xe997, 0xe997], /* Private Use */ + [0xe998, 0xe998], /* Private Use */ + [0xe999, 0xe999], /* Private Use */ + [0xe99a, 0xe99a], /* Private Use */ + [0xe99b, 0xe99b], /* Private Use */ + [0xe99c, 0xe99c], /* Private Use */ + [0xe99d, 0xe99d], /* Private Use */ + [0xe99e, 0xe99e], /* Private Use */ + [0xe99f, 0xe99f], /* Private Use */ + [0xe9a0, 0xe9a0], /* Private Use */ + [0xe9a1, 0xe9a1], /* Private Use */ + [0xe9a2, 0xe9a2], /* Private Use */ + [0xe9a3, 0xe9a3], /* Private Use */ + [0xe9a4, 0xe9a4], /* Private Use */ + [0xe9a5, 0xe9a5], /* Private Use */ + [0xe9a6, 0xe9a6], /* Private Use */ + [0xe9a7, 0xe9a7], /* Private Use */ + [0xe9a8, 0xe9a8], /* Private Use */ + [0xe9a9, 0xe9a9], /* Private Use */ + [0xe9aa, 0xe9aa], /* Private Use */ + [0xe9ab, 0xe9ab], /* Private Use */ + [0xe9ac, 0xe9ac], /* Private Use */ + [0xe9ad, 0xe9ad], /* Private Use */ + [0xe9ae, 0xe9ae], /* Private Use */ + [0xe9af, 0xe9af], /* Private Use */ + [0xe9b0, 0xe9b0], /* Private Use */ + [0xe9b1, 0xe9b1], /* Private Use */ + [0xe9b2, 0xe9b2], /* Private Use */ + [0xe9b3, 0xe9b3], /* Private Use */ + [0xe9b4, 0xe9b4], /* Private Use */ + [0xe9b5, 0xe9b5], /* Private Use */ + [0xe9b6, 0xe9b6], /* Private Use */ + [0xe9b7, 0xe9b7], /* Private Use */ + [0xe9b8, 0xe9b8], /* Private Use */ + [0xe9b9, 0xe9b9], /* Private Use */ + [0xe9ba, 0xe9ba], /* Private Use */ + [0xe9bb, 0xe9bb], /* Private Use */ + [0xe9bc, 0xe9bc], /* Private Use */ + [0xe9bd, 0xe9bd], /* Private Use */ + [0xe9be, 0xe9be], /* Private Use */ + [0xe9bf, 0xe9bf], /* Private Use */ + [0xe9c0, 0xe9c0], /* Private Use */ + [0xe9c1, 0xe9c1], /* Private Use */ + [0xe9c2, 0xe9c2], /* Private Use */ + [0xe9c3, 0xe9c3], /* Private Use */ + [0xe9c4, 0xe9c4], /* Private Use */ + [0xe9c5, 0xe9c5], /* Private Use */ + [0xe9c6, 0xe9c6], /* Private Use */ + [0xe9c7, 0xe9c7], /* Private Use */ + [0xe9c8, 0xe9c8], /* Private Use */ + [0xe9c9, 0xe9c9], /* Private Use */ + [0xe9ca, 0xe9ca], /* Private Use */ + [0xe9cb, 0xe9cb], /* Private Use */ + [0xe9cc, 0xe9cc], /* Private Use */ + [0xe9cd, 0xe9cd], /* Private Use */ + [0xe9ce, 0xe9ce], /* Private Use */ + [0xe9cf, 0xe9cf], /* Private Use */ + [0xe9d0, 0xe9d0], /* Private Use */ + [0xe9d1, 0xe9d1], /* Private Use */ + [0xe9d2, 0xe9d2], /* Private Use */ + [0xe9d3, 0xe9d3], /* Private Use */ + [0xe9d4, 0xe9d4], /* Private Use */ + [0xe9d5, 0xe9d5], /* Private Use */ + [0xe9d6, 0xe9d6], /* Private Use */ + [0xe9d7, 0xe9d7], /* Private Use */ + [0xe9d8, 0xe9d8], /* Private Use */ + [0xe9d9, 0xe9d9], /* Private Use */ + [0xe9da, 0xe9da], /* Private Use */ + [0xe9db, 0xe9db], /* Private Use */ + [0xe9dc, 0xe9dc], /* Private Use */ + [0xe9dd, 0xe9dd], /* Private Use */ + [0xe9de, 0xe9de], /* Private Use */ + [0xe9df, 0xe9df], /* Private Use */ + [0xe9e0, 0xe9e0], /* Private Use */ + [0xe9e1, 0xe9e1], /* Private Use */ + [0xe9e2, 0xe9e2], /* Private Use */ + [0xe9e3, 0xe9e3], /* Private Use */ + [0xe9e4, 0xe9e4], /* Private Use */ + [0xe9e5, 0xe9e5], /* Private Use */ + [0xe9e6, 0xe9e6], /* Private Use */ + [0xe9e7, 0xe9e7], /* Private Use */ + [0xe9e8, 0xe9e8], /* Private Use */ + [0xe9e9, 0xe9e9], /* Private Use */ + [0xe9ea, 0xe9ea], /* Private Use */ + [0xe9eb, 0xe9eb], /* Private Use */ + [0xe9ec, 0xe9ec], /* Private Use */ + [0xe9ed, 0xe9ed], /* Private Use */ + [0xe9ee, 0xe9ee], /* Private Use */ + [0xe9ef, 0xe9ef], /* Private Use */ + [0xe9f0, 0xe9f0], /* Private Use */ + [0xe9f1, 0xe9f1], /* Private Use */ + [0xe9f2, 0xe9f2], /* Private Use */ + [0xe9f3, 0xe9f3], /* Private Use */ + [0xe9f4, 0xe9f4], /* Private Use */ + [0xe9f5, 0xe9f5], /* Private Use */ + [0xe9f6, 0xe9f6], /* Private Use */ + [0xe9f7, 0xe9f7], /* Private Use */ + [0xe9f8, 0xe9f8], /* Private Use */ + [0xe9f9, 0xe9f9], /* Private Use */ + [0xe9fa, 0xe9fa], /* Private Use */ + [0xe9fb, 0xe9fb], /* Private Use */ + [0xe9fc, 0xe9fc], /* Private Use */ + [0xe9fd, 0xe9fd], /* Private Use */ + [0xe9fe, 0xe9fe], /* Private Use */ + [0xe9ff, 0xe9ff], /* Private Use */ + [0xea00, 0xea00], /* Private Use */ + [0xea01, 0xea01], /* Private Use */ + [0xea02, 0xea02], /* Private Use */ + [0xea03, 0xea03], /* Private Use */ + [0xea04, 0xea04], /* Private Use */ + [0xea05, 0xea05], /* Private Use */ + [0xea06, 0xea06], /* Private Use */ + [0xea07, 0xea07], /* Private Use */ + [0xea08, 0xea08], /* Private Use */ + [0xea09, 0xea09], /* Private Use */ + [0xea0a, 0xea0a], /* Private Use */ + [0xea0b, 0xea0b], /* Private Use */ + [0xea0c, 0xea0c], /* Private Use */ + [0xea0d, 0xea0d], /* Private Use */ + [0xea0e, 0xea0e], /* Private Use */ + [0xea0f, 0xea0f], /* Private Use */ + [0xea10, 0xea10], /* Private Use */ + [0xea11, 0xea11], /* Private Use */ + [0xea12, 0xea12], /* Private Use */ + [0xea13, 0xea13], /* Private Use */ + [0xea14, 0xea14], /* Private Use */ + [0xea15, 0xea15], /* Private Use */ + [0xea16, 0xea16], /* Private Use */ + [0xea17, 0xea17], /* Private Use */ + [0xea18, 0xea18], /* Private Use */ + [0xea19, 0xea19], /* Private Use */ + [0xea1a, 0xea1a], /* Private Use */ + [0xea1b, 0xea1b], /* Private Use */ + [0xea1c, 0xea1c], /* Private Use */ + [0xea1d, 0xea1d], /* Private Use */ + [0xea1e, 0xea1e], /* Private Use */ + [0xea1f, 0xea1f], /* Private Use */ + [0xea20, 0xea20], /* Private Use */ + [0xea21, 0xea21], /* Private Use */ + [0xea22, 0xea22], /* Private Use */ + [0xea23, 0xea23], /* Private Use */ + [0xea24, 0xea24], /* Private Use */ + [0xea25, 0xea25], /* Private Use */ + [0xea26, 0xea26], /* Private Use */ + [0xea27, 0xea27], /* Private Use */ + [0xea28, 0xea28], /* Private Use */ + [0xea29, 0xea29], /* Private Use */ + [0xea2a, 0xea2a], /* Private Use */ + [0xea2b, 0xea2b], /* Private Use */ + [0xea2c, 0xea2c], /* Private Use */ + [0xea2d, 0xea2d], /* Private Use */ + [0xea2e, 0xea2e], /* Private Use */ + [0xea2f, 0xea2f], /* Private Use */ + [0xea30, 0xea30], /* Private Use */ + [0xea31, 0xea31], /* Private Use */ + [0xea32, 0xea32], /* Private Use */ + [0xea33, 0xea33], /* Private Use */ + [0xea34, 0xea34], /* Private Use */ + [0xea35, 0xea35], /* Private Use */ + [0xea36, 0xea36], /* Private Use */ + [0xea37, 0xea37], /* Private Use */ + [0xea38, 0xea38], /* Private Use */ + [0xea39, 0xea39], /* Private Use */ + [0xea3a, 0xea3a], /* Private Use */ + [0xea3b, 0xea3b], /* Private Use */ + [0xea3c, 0xea3c], /* Private Use */ + [0xea3d, 0xea3d], /* Private Use */ + [0xea3e, 0xea3e], /* Private Use */ + [0xea3f, 0xea3f], /* Private Use */ + [0xea40, 0xea40], /* Private Use */ + [0xea41, 0xea41], /* Private Use */ + [0xea42, 0xea42], /* Private Use */ + [0xea43, 0xea43], /* Private Use */ + [0xea44, 0xea44], /* Private Use */ + [0xea45, 0xea45], /* Private Use */ + [0xea46, 0xea46], /* Private Use */ + [0xea47, 0xea47], /* Private Use */ + [0xea48, 0xea48], /* Private Use */ + [0xea49, 0xea49], /* Private Use */ + [0xea4a, 0xea4a], /* Private Use */ + [0xea4b, 0xea4b], /* Private Use */ + [0xea4c, 0xea4c], /* Private Use */ + [0xea4d, 0xea4d], /* Private Use */ + [0xea4e, 0xea4e], /* Private Use */ + [0xea4f, 0xea4f], /* Private Use */ + [0xea50, 0xea50], /* Private Use */ + [0xea51, 0xea51], /* Private Use */ + [0xea52, 0xea52], /* Private Use */ + [0xea53, 0xea53], /* Private Use */ + [0xea54, 0xea54], /* Private Use */ + [0xea55, 0xea55], /* Private Use */ + [0xea56, 0xea56], /* Private Use */ + [0xea57, 0xea57], /* Private Use */ + [0xea58, 0xea58], /* Private Use */ + [0xea59, 0xea59], /* Private Use */ + [0xea5a, 0xea5a], /* Private Use */ + [0xea5b, 0xea5b], /* Private Use */ + [0xea5c, 0xea5c], /* Private Use */ + [0xea5d, 0xea5d], /* Private Use */ + [0xea5e, 0xea5e], /* Private Use */ + [0xea5f, 0xea5f], /* Private Use */ + [0xea60, 0xea60], /* Private Use */ + [0xea61, 0xea61], /* Private Use */ + [0xea62, 0xea62], /* Private Use */ + [0xea63, 0xea63], /* Private Use */ + [0xea64, 0xea64], /* Private Use */ + [0xea65, 0xea65], /* Private Use */ + [0xea66, 0xea66], /* Private Use */ + [0xea67, 0xea67], /* Private Use */ + [0xea68, 0xea68], /* Private Use */ + [0xea69, 0xea69], /* Private Use */ + [0xea6a, 0xea6a], /* Private Use */ + [0xea6b, 0xea6b], /* Private Use */ + [0xea6c, 0xea6c], /* Private Use */ + [0xea6d, 0xea6d], /* Private Use */ + [0xea6e, 0xea6e], /* Private Use */ + [0xea6f, 0xea6f], /* Private Use */ + [0xea70, 0xea70], /* Private Use */ + [0xea71, 0xea71], /* Private Use */ + [0xea72, 0xea72], /* Private Use */ + [0xea73, 0xea73], /* Private Use */ + [0xea74, 0xea74], /* Private Use */ + [0xea75, 0xea75], /* Private Use */ + [0xea76, 0xea76], /* Private Use */ + [0xea77, 0xea77], /* Private Use */ + [0xea78, 0xea78], /* Private Use */ + [0xea79, 0xea79], /* Private Use */ + [0xea7a, 0xea7a], /* Private Use */ + [0xea7b, 0xea7b], /* Private Use */ + [0xea7c, 0xea7c], /* Private Use */ + [0xea7d, 0xea7d], /* Private Use */ + [0xea7e, 0xea7e], /* Private Use */ + [0xea7f, 0xea7f], /* Private Use */ + [0xea80, 0xea80], /* Private Use */ + [0xea81, 0xea81], /* Private Use */ + [0xea82, 0xea82], /* Private Use */ + [0xea83, 0xea83], /* Private Use */ + [0xea84, 0xea84], /* Private Use */ + [0xea85, 0xea85], /* Private Use */ + [0xea86, 0xea86], /* Private Use */ + [0xea87, 0xea87], /* Private Use */ + [0xea88, 0xea88], /* Private Use */ + [0xea89, 0xea89], /* Private Use */ + [0xea8a, 0xea8a], /* Private Use */ + [0xea8b, 0xea8b], /* Private Use */ + [0xea8c, 0xea8c], /* Private Use */ + [0xea8d, 0xea8d], /* Private Use */ + [0xea8e, 0xea8e], /* Private Use */ + [0xea8f, 0xea8f], /* Private Use */ + [0xea90, 0xea90], /* Private Use */ + [0xea91, 0xea91], /* Private Use */ + [0xea92, 0xea92], /* Private Use */ + [0xea93, 0xea93], /* Private Use */ + [0xea94, 0xea94], /* Private Use */ + [0xea95, 0xea95], /* Private Use */ + [0xea96, 0xea96], /* Private Use */ + [0xea97, 0xea97], /* Private Use */ + [0xea98, 0xea98], /* Private Use */ + [0xea99, 0xea99], /* Private Use */ + [0xea9a, 0xea9a], /* Private Use */ + [0xea9b, 0xea9b], /* Private Use */ + [0xea9c, 0xea9c], /* Private Use */ + [0xea9d, 0xea9d], /* Private Use */ + [0xea9e, 0xea9e], /* Private Use */ + [0xea9f, 0xea9f], /* Private Use */ + [0xeaa0, 0xeaa0], /* Private Use */ + [0xeaa1, 0xeaa1], /* Private Use */ + [0xeaa2, 0xeaa2], /* Private Use */ + [0xeaa3, 0xeaa3], /* Private Use */ + [0xeaa4, 0xeaa4], /* Private Use */ + [0xeaa5, 0xeaa5], /* Private Use */ + [0xeaa6, 0xeaa6], /* Private Use */ + [0xeaa7, 0xeaa7], /* Private Use */ + [0xeaa8, 0xeaa8], /* Private Use */ + [0xeaa9, 0xeaa9], /* Private Use */ + [0xeaaa, 0xeaaa], /* Private Use */ + [0xeaab, 0xeaab], /* Private Use */ + [0xeaac, 0xeaac], /* Private Use */ + [0xeaad, 0xeaad], /* Private Use */ + [0xeaae, 0xeaae], /* Private Use */ + [0xeaaf, 0xeaaf], /* Private Use */ + [0xeab0, 0xeab0], /* Private Use */ + [0xeab1, 0xeab1], /* Private Use */ + [0xeab2, 0xeab2], /* Private Use */ + [0xeab3, 0xeab3], /* Private Use */ + [0xeab4, 0xeab4], /* Private Use */ + [0xeab5, 0xeab5], /* Private Use */ + [0xeab6, 0xeab6], /* Private Use */ + [0xeab7, 0xeab7], /* Private Use */ + [0xeab8, 0xeab8], /* Private Use */ + [0xeab9, 0xeab9], /* Private Use */ + [0xeaba, 0xeaba], /* Private Use */ + [0xeabb, 0xeabb], /* Private Use */ + [0xeabc, 0xeabc], /* Private Use */ + [0xeabd, 0xeabd], /* Private Use */ + [0xeabe, 0xeabe], /* Private Use */ + [0xeabf, 0xeabf], /* Private Use */ + [0xeac0, 0xeac0], /* Private Use */ + [0xeac1, 0xeac1], /* Private Use */ + [0xeac2, 0xeac2], /* Private Use */ + [0xeac3, 0xeac3], /* Private Use */ + [0xeac4, 0xeac4], /* Private Use */ + [0xeac5, 0xeac5], /* Private Use */ + [0xeac6, 0xeac6], /* Private Use */ + [0xeac7, 0xeac7], /* Private Use */ + [0xeac8, 0xeac8], /* Private Use */ + [0xeac9, 0xeac9], /* Private Use */ + [0xeaca, 0xeaca], /* Private Use */ + [0xeacb, 0xeacb], /* Private Use */ + [0xeacc, 0xeacc], /* Private Use */ + [0xeacd, 0xeacd], /* Private Use */ + [0xeace, 0xeace], /* Private Use */ + [0xeacf, 0xeacf], /* Private Use */ + [0xead0, 0xead0], /* Private Use */ + [0xead1, 0xead1], /* Private Use */ + [0xead2, 0xead2], /* Private Use */ + [0xead3, 0xead3], /* Private Use */ + [0xead4, 0xead4], /* Private Use */ + [0xead5, 0xead5], /* Private Use */ + [0xead6, 0xead6], /* Private Use */ + [0xead7, 0xead7], /* Private Use */ + [0xead8, 0xead8], /* Private Use */ + [0xead9, 0xead9], /* Private Use */ + [0xeada, 0xeada], /* Private Use */ + [0xeadb, 0xeadb], /* Private Use */ + [0xeadc, 0xeadc], /* Private Use */ + [0xeadd, 0xeadd], /* Private Use */ + [0xeade, 0xeade], /* Private Use */ + [0xeadf, 0xeadf], /* Private Use */ + [0xeae0, 0xeae0], /* Private Use */ + [0xeae1, 0xeae1], /* Private Use */ + [0xeae2, 0xeae2], /* Private Use */ + [0xeae3, 0xeae3], /* Private Use */ + [0xeae4, 0xeae4], /* Private Use */ + [0xeae5, 0xeae5], /* Private Use */ + [0xeae6, 0xeae6], /* Private Use */ + [0xeae7, 0xeae7], /* Private Use */ + [0xeae8, 0xeae8], /* Private Use */ + [0xeae9, 0xeae9], /* Private Use */ + [0xeaea, 0xeaea], /* Private Use */ + [0xeaeb, 0xeaeb], /* Private Use */ + [0xeaec, 0xeaec], /* Private Use */ + [0xeaed, 0xeaed], /* Private Use */ + [0xeaee, 0xeaee], /* Private Use */ + [0xeaef, 0xeaef], /* Private Use */ + [0xeaf0, 0xeaf0], /* Private Use */ + [0xeaf1, 0xeaf1], /* Private Use */ + [0xeaf2, 0xeaf2], /* Private Use */ + [0xeaf3, 0xeaf3], /* Private Use */ + [0xeaf4, 0xeaf4], /* Private Use */ + [0xeaf5, 0xeaf5], /* Private Use */ + [0xeaf6, 0xeaf6], /* Private Use */ + [0xeaf7, 0xeaf7], /* Private Use */ + [0xeaf8, 0xeaf8], /* Private Use */ + [0xeaf9, 0xeaf9], /* Private Use */ + [0xeafa, 0xeafa], /* Private Use */ + [0xeafb, 0xeafb], /* Private Use */ + [0xeafc, 0xeafc], /* Private Use */ + [0xeafd, 0xeafd], /* Private Use */ + [0xeafe, 0xeafe], /* Private Use */ + [0xeaff, 0xeaff], /* Private Use */ + [0xeb00, 0xeb00], /* Private Use */ + [0xeb01, 0xeb01], /* Private Use */ + [0xeb02, 0xeb02], /* Private Use */ + [0xeb03, 0xeb03], /* Private Use */ + [0xeb04, 0xeb04], /* Private Use */ + [0xeb05, 0xeb05], /* Private Use */ + [0xeb06, 0xeb06], /* Private Use */ + [0xeb07, 0xeb07], /* Private Use */ + [0xeb08, 0xeb08], /* Private Use */ + [0xeb09, 0xeb09], /* Private Use */ + [0xeb0a, 0xeb0a], /* Private Use */ + [0xeb0b, 0xeb0b], /* Private Use */ + [0xeb0c, 0xeb0c], /* Private Use */ + [0xeb0d, 0xeb0d], /* Private Use */ + [0xeb0e, 0xeb0e], /* Private Use */ + [0xeb0f, 0xeb0f], /* Private Use */ + [0xeb10, 0xeb10], /* Private Use */ + [0xeb11, 0xeb11], /* Private Use */ + [0xeb12, 0xeb12], /* Private Use */ + [0xeb13, 0xeb13], /* Private Use */ + [0xeb14, 0xeb14], /* Private Use */ + [0xeb15, 0xeb15], /* Private Use */ + [0xeb16, 0xeb16], /* Private Use */ + [0xeb17, 0xeb17], /* Private Use */ + [0xeb18, 0xeb18], /* Private Use */ + [0xeb19, 0xeb19], /* Private Use */ + [0xeb1a, 0xeb1a], /* Private Use */ + [0xeb1b, 0xeb1b], /* Private Use */ + [0xeb1c, 0xeb1c], /* Private Use */ + [0xeb1d, 0xeb1d], /* Private Use */ + [0xeb1e, 0xeb1e], /* Private Use */ + [0xeb1f, 0xeb1f], /* Private Use */ + [0xeb20, 0xeb20], /* Private Use */ + [0xeb21, 0xeb21], /* Private Use */ + [0xeb22, 0xeb22], /* Private Use */ + [0xeb23, 0xeb23], /* Private Use */ + [0xeb24, 0xeb24], /* Private Use */ + [0xeb25, 0xeb25], /* Private Use */ + [0xeb26, 0xeb26], /* Private Use */ + [0xeb27, 0xeb27], /* Private Use */ + [0xeb28, 0xeb28], /* Private Use */ + [0xeb29, 0xeb29], /* Private Use */ + [0xeb2a, 0xeb2a], /* Private Use */ + [0xeb2b, 0xeb2b], /* Private Use */ + [0xeb2c, 0xeb2c], /* Private Use */ + [0xeb2d, 0xeb2d], /* Private Use */ + [0xeb2e, 0xeb2e], /* Private Use */ + [0xeb2f, 0xeb2f], /* Private Use */ + [0xeb30, 0xeb30], /* Private Use */ + [0xeb31, 0xeb31], /* Private Use */ + [0xeb32, 0xeb32], /* Private Use */ + [0xeb33, 0xeb33], /* Private Use */ + [0xeb34, 0xeb34], /* Private Use */ + [0xeb35, 0xeb35], /* Private Use */ + [0xeb36, 0xeb36], /* Private Use */ + [0xeb37, 0xeb37], /* Private Use */ + [0xeb38, 0xeb38], /* Private Use */ + [0xeb39, 0xeb39], /* Private Use */ + [0xeb3a, 0xeb3a], /* Private Use */ + [0xeb3b, 0xeb3b], /* Private Use */ + [0xeb3c, 0xeb3c], /* Private Use */ + [0xeb3d, 0xeb3d], /* Private Use */ + [0xeb3e, 0xeb3e], /* Private Use */ + [0xeb3f, 0xeb3f], /* Private Use */ + [0xeb40, 0xeb40], /* Private Use */ + [0xeb41, 0xeb41], /* Private Use */ + [0xeb42, 0xeb42], /* Private Use */ + [0xeb43, 0xeb43], /* Private Use */ + [0xeb44, 0xeb44], /* Private Use */ + [0xeb45, 0xeb45], /* Private Use */ + [0xeb46, 0xeb46], /* Private Use */ + [0xeb47, 0xeb47], /* Private Use */ + [0xeb48, 0xeb48], /* Private Use */ + [0xeb49, 0xeb49], /* Private Use */ + [0xeb4a, 0xeb4a], /* Private Use */ + [0xeb4b, 0xeb4b], /* Private Use */ + [0xeb4c, 0xeb4c], /* Private Use */ + [0xeb4d, 0xeb4d], /* Private Use */ + [0xeb4e, 0xeb4e], /* Private Use */ + [0xeb4f, 0xeb4f], /* Private Use */ + [0xeb50, 0xeb50], /* Private Use */ + [0xeb51, 0xeb51], /* Private Use */ + [0xeb52, 0xeb52], /* Private Use */ + [0xeb53, 0xeb53], /* Private Use */ + [0xeb54, 0xeb54], /* Private Use */ + [0xeb55, 0xeb55], /* Private Use */ + [0xeb56, 0xeb56], /* Private Use */ + [0xeb57, 0xeb57], /* Private Use */ + [0xeb58, 0xeb58], /* Private Use */ + [0xeb59, 0xeb59], /* Private Use */ + [0xeb5a, 0xeb5a], /* Private Use */ + [0xeb5b, 0xeb5b], /* Private Use */ + [0xeb5c, 0xeb5c], /* Private Use */ + [0xeb5d, 0xeb5d], /* Private Use */ + [0xeb5e, 0xeb5e], /* Private Use */ + [0xeb5f, 0xeb5f], /* Private Use */ + [0xeb60, 0xeb60], /* Private Use */ + [0xeb61, 0xeb61], /* Private Use */ + [0xeb62, 0xeb62], /* Private Use */ + [0xeb63, 0xeb63], /* Private Use */ + [0xeb64, 0xeb64], /* Private Use */ + [0xeb65, 0xeb65], /* Private Use */ + [0xeb66, 0xeb66], /* Private Use */ + [0xeb67, 0xeb67], /* Private Use */ + [0xeb68, 0xeb68], /* Private Use */ + [0xeb69, 0xeb69], /* Private Use */ + [0xeb6a, 0xeb6a], /* Private Use */ + [0xeb6b, 0xeb6b], /* Private Use */ + [0xeb6c, 0xeb6c], /* Private Use */ + [0xeb6d, 0xeb6d], /* Private Use */ + [0xeb6e, 0xeb6e], /* Private Use */ + [0xeb6f, 0xeb6f], /* Private Use */ + [0xeb70, 0xeb70], /* Private Use */ + [0xeb71, 0xeb71], /* Private Use */ + [0xeb72, 0xeb72], /* Private Use */ + [0xeb73, 0xeb73], /* Private Use */ + [0xeb74, 0xeb74], /* Private Use */ + [0xeb75, 0xeb75], /* Private Use */ + [0xeb76, 0xeb76], /* Private Use */ + [0xeb77, 0xeb77], /* Private Use */ + [0xeb78, 0xeb78], /* Private Use */ + [0xeb79, 0xeb79], /* Private Use */ + [0xeb7a, 0xeb7a], /* Private Use */ + [0xeb7b, 0xeb7b], /* Private Use */ + [0xeb7c, 0xeb7c], /* Private Use */ + [0xeb7d, 0xeb7d], /* Private Use */ + [0xeb7e, 0xeb7e], /* Private Use */ + [0xeb7f, 0xeb7f], /* Private Use */ + [0xeb80, 0xeb80], /* Private Use */ + [0xeb81, 0xeb81], /* Private Use */ + [0xeb82, 0xeb82], /* Private Use */ + [0xeb83, 0xeb83], /* Private Use */ + [0xeb84, 0xeb84], /* Private Use */ + [0xeb85, 0xeb85], /* Private Use */ + [0xeb86, 0xeb86], /* Private Use */ + [0xeb87, 0xeb87], /* Private Use */ + [0xeb88, 0xeb88], /* Private Use */ + [0xeb89, 0xeb89], /* Private Use */ + [0xeb8a, 0xeb8a], /* Private Use */ + [0xeb8b, 0xeb8b], /* Private Use */ + [0xeb8c, 0xeb8c], /* Private Use */ + [0xeb8d, 0xeb8d], /* Private Use */ + [0xeb8e, 0xeb8e], /* Private Use */ + [0xeb8f, 0xeb8f], /* Private Use */ + [0xeb90, 0xeb90], /* Private Use */ + [0xeb91, 0xeb91], /* Private Use */ + [0xeb92, 0xeb92], /* Private Use */ + [0xeb93, 0xeb93], /* Private Use */ + [0xeb94, 0xeb94], /* Private Use */ + [0xeb95, 0xeb95], /* Private Use */ + [0xeb96, 0xeb96], /* Private Use */ + [0xeb97, 0xeb97], /* Private Use */ + [0xeb98, 0xeb98], /* Private Use */ + [0xeb99, 0xeb99], /* Private Use */ + [0xeb9a, 0xeb9a], /* Private Use */ + [0xeb9b, 0xeb9b], /* Private Use */ + [0xeb9c, 0xeb9c], /* Private Use */ + [0xeb9d, 0xeb9d], /* Private Use */ + [0xeb9e, 0xeb9e], /* Private Use */ + [0xeb9f, 0xeb9f], /* Private Use */ + [0xeba0, 0xeba0], /* Private Use */ + [0xeba1, 0xeba1], /* Private Use */ + [0xeba2, 0xeba2], /* Private Use */ + [0xeba3, 0xeba3], /* Private Use */ + [0xeba4, 0xeba4], /* Private Use */ + [0xeba5, 0xeba5], /* Private Use */ + [0xeba6, 0xeba6], /* Private Use */ + [0xeba7, 0xeba7], /* Private Use */ + [0xeba8, 0xeba8], /* Private Use */ + [0xeba9, 0xeba9], /* Private Use */ + [0xebaa, 0xebaa], /* Private Use */ + [0xebab, 0xebab], /* Private Use */ + [0xebac, 0xebac], /* Private Use */ + [0xebad, 0xebad], /* Private Use */ + [0xebae, 0xebae], /* Private Use */ + [0xebaf, 0xebaf], /* Private Use */ + [0xebb0, 0xebb0], /* Private Use */ + [0xebb1, 0xebb1], /* Private Use */ + [0xebb2, 0xebb2], /* Private Use */ + [0xebb3, 0xebb3], /* Private Use */ + [0xebb4, 0xebb4], /* Private Use */ + [0xebb5, 0xebb5], /* Private Use */ + [0xebb6, 0xebb6], /* Private Use */ + [0xebb7, 0xebb7], /* Private Use */ + [0xebb8, 0xebb8], /* Private Use */ + [0xebb9, 0xebb9], /* Private Use */ + [0xebba, 0xebba], /* Private Use */ + [0xebbb, 0xebbb], /* Private Use */ + [0xebbc, 0xebbc], /* Private Use */ + [0xebbd, 0xebbd], /* Private Use */ + [0xebbe, 0xebbe], /* Private Use */ + [0xebbf, 0xebbf], /* Private Use */ + [0xebc0, 0xebc0], /* Private Use */ + [0xebc1, 0xebc1], /* Private Use */ + [0xebc2, 0xebc2], /* Private Use */ + [0xebc3, 0xebc3], /* Private Use */ + [0xebc4, 0xebc4], /* Private Use */ + [0xebc5, 0xebc5], /* Private Use */ + [0xebc6, 0xebc6], /* Private Use */ + [0xebc7, 0xebc7], /* Private Use */ + [0xebc8, 0xebc8], /* Private Use */ + [0xebc9, 0xebc9], /* Private Use */ + [0xebca, 0xebca], /* Private Use */ + [0xebcb, 0xebcb], /* Private Use */ + [0xebcc, 0xebcc], /* Private Use */ + [0xebcd, 0xebcd], /* Private Use */ + [0xebce, 0xebce], /* Private Use */ + [0xebcf, 0xebcf], /* Private Use */ + [0xebd0, 0xebd0], /* Private Use */ + [0xebd1, 0xebd1], /* Private Use */ + [0xebd2, 0xebd2], /* Private Use */ + [0xebd3, 0xebd3], /* Private Use */ + [0xebd4, 0xebd4], /* Private Use */ + [0xebd5, 0xebd5], /* Private Use */ + [0xebd6, 0xebd6], /* Private Use */ + [0xebd7, 0xebd7], /* Private Use */ + [0xebd8, 0xebd8], /* Private Use */ + [0xebd9, 0xebd9], /* Private Use */ + [0xebda, 0xebda], /* Private Use */ + [0xebdb, 0xebdb], /* Private Use */ + [0xebdc, 0xebdc], /* Private Use */ + [0xebdd, 0xebdd], /* Private Use */ + [0xebde, 0xebde], /* Private Use */ + [0xebdf, 0xebdf], /* Private Use */ + [0xebe0, 0xebe0], /* Private Use */ + [0xebe1, 0xebe1], /* Private Use */ + [0xebe2, 0xebe2], /* Private Use */ + [0xebe3, 0xebe3], /* Private Use */ + [0xebe4, 0xebe4], /* Private Use */ + [0xebe5, 0xebe5], /* Private Use */ + [0xebe6, 0xebe6], /* Private Use */ + [0xebe7, 0xebe7], /* Private Use */ + [0xebe8, 0xebe8], /* Private Use */ + [0xebe9, 0xebe9], /* Private Use */ + [0xebea, 0xebea], /* Private Use */ + [0xebeb, 0xebeb], /* Private Use */ + [0xebec, 0xebec], /* Private Use */ + [0xebed, 0xebed], /* Private Use */ + [0xebee, 0xebee], /* Private Use */ + [0xebef, 0xebef], /* Private Use */ + [0xebf0, 0xebf0], /* Private Use */ + [0xebf1, 0xebf1], /* Private Use */ + [0xebf2, 0xebf2], /* Private Use */ + [0xebf3, 0xebf3], /* Private Use */ + [0xebf4, 0xebf4], /* Private Use */ + [0xebf5, 0xebf5], /* Private Use */ + [0xebf6, 0xebf6], /* Private Use */ + [0xebf7, 0xebf7], /* Private Use */ + [0xebf8, 0xebf8], /* Private Use */ + [0xebf9, 0xebf9], /* Private Use */ + [0xebfa, 0xebfa], /* Private Use */ + [0xebfb, 0xebfb], /* Private Use */ + [0xebfc, 0xebfc], /* Private Use */ + [0xebfd, 0xebfd], /* Private Use */ + [0xebfe, 0xebfe], /* Private Use */ + [0xebff, 0xebff], /* Private Use */ + [0xec00, 0xec00], /* Private Use */ + [0xec01, 0xec01], /* Private Use */ + [0xec02, 0xec02], /* Private Use */ + [0xec03, 0xec03], /* Private Use */ + [0xec04, 0xec04], /* Private Use */ + [0xec05, 0xec05], /* Private Use */ + [0xec06, 0xec06], /* Private Use */ + [0xec07, 0xec07], /* Private Use */ + [0xec08, 0xec08], /* Private Use */ + [0xec09, 0xec09], /* Private Use */ + [0xec0a, 0xec0a], /* Private Use */ + [0xec0b, 0xec0b], /* Private Use */ + [0xec0c, 0xec0c], /* Private Use */ + [0xec0d, 0xec0d], /* Private Use */ + [0xec0e, 0xec0e], /* Private Use */ + [0xec0f, 0xec0f], /* Private Use */ + [0xec10, 0xec10], /* Private Use */ + [0xec11, 0xec11], /* Private Use */ + [0xec12, 0xec12], /* Private Use */ + [0xec13, 0xec13], /* Private Use */ + [0xec14, 0xec14], /* Private Use */ + [0xec15, 0xec15], /* Private Use */ + [0xec16, 0xec16], /* Private Use */ + [0xec17, 0xec17], /* Private Use */ + [0xec18, 0xec18], /* Private Use */ + [0xec19, 0xec19], /* Private Use */ + [0xec1a, 0xec1a], /* Private Use */ + [0xec1b, 0xec1b], /* Private Use */ + [0xec1c, 0xec1c], /* Private Use */ + [0xec1d, 0xec1d], /* Private Use */ + [0xec1e, 0xec1e], /* Private Use */ + [0xec1f, 0xec1f], /* Private Use */ + [0xec20, 0xec20], /* Private Use */ + [0xec21, 0xec21], /* Private Use */ + [0xec22, 0xec22], /* Private Use */ + [0xec23, 0xec23], /* Private Use */ + [0xec24, 0xec24], /* Private Use */ + [0xec25, 0xec25], /* Private Use */ + [0xec26, 0xec26], /* Private Use */ + [0xec27, 0xec27], /* Private Use */ + [0xec28, 0xec28], /* Private Use */ + [0xec29, 0xec29], /* Private Use */ + [0xec2a, 0xec2a], /* Private Use */ + [0xec2b, 0xec2b], /* Private Use */ + [0xec2c, 0xec2c], /* Private Use */ + [0xec2d, 0xec2d], /* Private Use */ + [0xec2e, 0xec2e], /* Private Use */ + [0xec2f, 0xec2f], /* Private Use */ + [0xec30, 0xec30], /* Private Use */ + [0xec31, 0xec31], /* Private Use */ + [0xec32, 0xec32], /* Private Use */ + [0xec33, 0xec33], /* Private Use */ + [0xec34, 0xec34], /* Private Use */ + [0xec35, 0xec35], /* Private Use */ + [0xec36, 0xec36], /* Private Use */ + [0xec37, 0xec37], /* Private Use */ + [0xec38, 0xec38], /* Private Use */ + [0xec39, 0xec39], /* Private Use */ + [0xec3a, 0xec3a], /* Private Use */ + [0xec3b, 0xec3b], /* Private Use */ + [0xec3c, 0xec3c], /* Private Use */ + [0xec3d, 0xec3d], /* Private Use */ + [0xec3e, 0xec3e], /* Private Use */ + [0xec3f, 0xec3f], /* Private Use */ + [0xec40, 0xec40], /* Private Use */ + [0xec41, 0xec41], /* Private Use */ + [0xec42, 0xec42], /* Private Use */ + [0xec43, 0xec43], /* Private Use */ + [0xec44, 0xec44], /* Private Use */ + [0xec45, 0xec45], /* Private Use */ + [0xec46, 0xec46], /* Private Use */ + [0xec47, 0xec47], /* Private Use */ + [0xec48, 0xec48], /* Private Use */ + [0xec49, 0xec49], /* Private Use */ + [0xec4a, 0xec4a], /* Private Use */ + [0xec4b, 0xec4b], /* Private Use */ + [0xec4c, 0xec4c], /* Private Use */ + [0xec4d, 0xec4d], /* Private Use */ + [0xec4e, 0xec4e], /* Private Use */ + [0xec4f, 0xec4f], /* Private Use */ + [0xec50, 0xec50], /* Private Use */ + [0xec51, 0xec51], /* Private Use */ + [0xec52, 0xec52], /* Private Use */ + [0xec53, 0xec53], /* Private Use */ + [0xec54, 0xec54], /* Private Use */ + [0xec55, 0xec55], /* Private Use */ + [0xec56, 0xec56], /* Private Use */ + [0xec57, 0xec57], /* Private Use */ + [0xec58, 0xec58], /* Private Use */ + [0xec59, 0xec59], /* Private Use */ + [0xec5a, 0xec5a], /* Private Use */ + [0xec5b, 0xec5b], /* Private Use */ + [0xec5c, 0xec5c], /* Private Use */ + [0xec5d, 0xec5d], /* Private Use */ + [0xec5e, 0xec5e], /* Private Use */ + [0xec5f, 0xec5f], /* Private Use */ + [0xec60, 0xec60], /* Private Use */ + [0xec61, 0xec61], /* Private Use */ + [0xec62, 0xec62], /* Private Use */ + [0xec63, 0xec63], /* Private Use */ + [0xec64, 0xec64], /* Private Use */ + [0xec65, 0xec65], /* Private Use */ + [0xec66, 0xec66], /* Private Use */ + [0xec67, 0xec67], /* Private Use */ + [0xec68, 0xec68], /* Private Use */ + [0xec69, 0xec69], /* Private Use */ + [0xec6a, 0xec6a], /* Private Use */ + [0xec6b, 0xec6b], /* Private Use */ + [0xec6c, 0xec6c], /* Private Use */ + [0xec6d, 0xec6d], /* Private Use */ + [0xec6e, 0xec6e], /* Private Use */ + [0xec6f, 0xec6f], /* Private Use */ + [0xec70, 0xec70], /* Private Use */ + [0xec71, 0xec71], /* Private Use */ + [0xec72, 0xec72], /* Private Use */ + [0xec73, 0xec73], /* Private Use */ + [0xec74, 0xec74], /* Private Use */ + [0xec75, 0xec75], /* Private Use */ + [0xec76, 0xec76], /* Private Use */ + [0xec77, 0xec77], /* Private Use */ + [0xec78, 0xec78], /* Private Use */ + [0xec79, 0xec79], /* Private Use */ + [0xec7a, 0xec7a], /* Private Use */ + [0xec7b, 0xec7b], /* Private Use */ + [0xec7c, 0xec7c], /* Private Use */ + [0xec7d, 0xec7d], /* Private Use */ + [0xec7e, 0xec7e], /* Private Use */ + [0xec7f, 0xec7f], /* Private Use */ + [0xec80, 0xec80], /* Private Use */ + [0xec81, 0xec81], /* Private Use */ + [0xec82, 0xec82], /* Private Use */ + [0xec83, 0xec83], /* Private Use */ + [0xec84, 0xec84], /* Private Use */ + [0xec85, 0xec85], /* Private Use */ + [0xec86, 0xec86], /* Private Use */ + [0xec87, 0xec87], /* Private Use */ + [0xec88, 0xec88], /* Private Use */ + [0xec89, 0xec89], /* Private Use */ + [0xec8a, 0xec8a], /* Private Use */ + [0xec8b, 0xec8b], /* Private Use */ + [0xec8c, 0xec8c], /* Private Use */ + [0xec8d, 0xec8d], /* Private Use */ + [0xec8e, 0xec8e], /* Private Use */ + [0xec8f, 0xec8f], /* Private Use */ + [0xec90, 0xec90], /* Private Use */ + [0xec91, 0xec91], /* Private Use */ + [0xec92, 0xec92], /* Private Use */ + [0xec93, 0xec93], /* Private Use */ + [0xec94, 0xec94], /* Private Use */ + [0xec95, 0xec95], /* Private Use */ + [0xec96, 0xec96], /* Private Use */ + [0xec97, 0xec97], /* Private Use */ + [0xec98, 0xec98], /* Private Use */ + [0xec99, 0xec99], /* Private Use */ + [0xec9a, 0xec9a], /* Private Use */ + [0xec9b, 0xec9b], /* Private Use */ + [0xec9c, 0xec9c], /* Private Use */ + [0xec9d, 0xec9d], /* Private Use */ + [0xec9e, 0xec9e], /* Private Use */ + [0xec9f, 0xec9f], /* Private Use */ + [0xeca0, 0xeca0], /* Private Use */ + [0xeca1, 0xeca1], /* Private Use */ + [0xeca2, 0xeca2], /* Private Use */ + [0xeca3, 0xeca3], /* Private Use */ + [0xeca4, 0xeca4], /* Private Use */ + [0xeca5, 0xeca5], /* Private Use */ + [0xeca6, 0xeca6], /* Private Use */ + [0xeca7, 0xeca7], /* Private Use */ + [0xeca8, 0xeca8], /* Private Use */ + [0xeca9, 0xeca9], /* Private Use */ + [0xecaa, 0xecaa], /* Private Use */ + [0xecab, 0xecab], /* Private Use */ + [0xecac, 0xecac], /* Private Use */ + [0xecad, 0xecad], /* Private Use */ + [0xecae, 0xecae], /* Private Use */ + [0xecaf, 0xecaf], /* Private Use */ + [0xecb0, 0xecb0], /* Private Use */ + [0xecb1, 0xecb1], /* Private Use */ + [0xecb2, 0xecb2], /* Private Use */ + [0xecb3, 0xecb3], /* Private Use */ + [0xecb4, 0xecb4], /* Private Use */ + [0xecb5, 0xecb5], /* Private Use */ + [0xecb6, 0xecb6], /* Private Use */ + [0xecb7, 0xecb7], /* Private Use */ + [0xecb8, 0xecb8], /* Private Use */ + [0xecb9, 0xecb9], /* Private Use */ + [0xecba, 0xecba], /* Private Use */ + [0xecbb, 0xecbb], /* Private Use */ + [0xecbc, 0xecbc], /* Private Use */ + [0xecbd, 0xecbd], /* Private Use */ + [0xecbe, 0xecbe], /* Private Use */ + [0xecbf, 0xecbf], /* Private Use */ + [0xecc0, 0xecc0], /* Private Use */ + [0xecc1, 0xecc1], /* Private Use */ + [0xecc2, 0xecc2], /* Private Use */ + [0xecc3, 0xecc3], /* Private Use */ + [0xecc4, 0xecc4], /* Private Use */ + [0xecc5, 0xecc5], /* Private Use */ + [0xecc6, 0xecc6], /* Private Use */ + [0xecc7, 0xecc7], /* Private Use */ + [0xecc8, 0xecc8], /* Private Use */ + [0xecc9, 0xecc9], /* Private Use */ + [0xecca, 0xecca], /* Private Use */ + [0xeccb, 0xeccb], /* Private Use */ + [0xeccc, 0xeccc], /* Private Use */ + [0xeccd, 0xeccd], /* Private Use */ + [0xecce, 0xecce], /* Private Use */ + [0xeccf, 0xeccf], /* Private Use */ + [0xecd0, 0xecd0], /* Private Use */ + [0xecd1, 0xecd1], /* Private Use */ + [0xecd2, 0xecd2], /* Private Use */ + [0xecd3, 0xecd3], /* Private Use */ + [0xecd4, 0xecd4], /* Private Use */ + [0xecd5, 0xecd5], /* Private Use */ + [0xecd6, 0xecd6], /* Private Use */ + [0xecd7, 0xecd7], /* Private Use */ + [0xecd8, 0xecd8], /* Private Use */ + [0xecd9, 0xecd9], /* Private Use */ + [0xecda, 0xecda], /* Private Use */ + [0xecdb, 0xecdb], /* Private Use */ + [0xecdc, 0xecdc], /* Private Use */ + [0xecdd, 0xecdd], /* Private Use */ + [0xecde, 0xecde], /* Private Use */ + [0xecdf, 0xecdf], /* Private Use */ + [0xece0, 0xece0], /* Private Use */ + [0xece1, 0xece1], /* Private Use */ + [0xece2, 0xece2], /* Private Use */ + [0xece3, 0xece3], /* Private Use */ + [0xece4, 0xece4], /* Private Use */ + [0xece5, 0xece5], /* Private Use */ + [0xece6, 0xece6], /* Private Use */ + [0xece7, 0xece7], /* Private Use */ + [0xece8, 0xece8], /* Private Use */ + [0xece9, 0xece9], /* Private Use */ + [0xecea, 0xecea], /* Private Use */ + [0xeceb, 0xeceb], /* Private Use */ + [0xecec, 0xecec], /* Private Use */ + [0xeced, 0xeced], /* Private Use */ + [0xecee, 0xecee], /* Private Use */ + [0xecef, 0xecef], /* Private Use */ + [0xecf0, 0xecf0], /* Private Use */ + [0xecf1, 0xecf1], /* Private Use */ + [0xecf2, 0xecf2], /* Private Use */ + [0xecf3, 0xecf3], /* Private Use */ + [0xecf4, 0xecf4], /* Private Use */ + [0xecf5, 0xecf5], /* Private Use */ + [0xecf6, 0xecf6], /* Private Use */ + [0xecf7, 0xecf7], /* Private Use */ + [0xecf8, 0xecf8], /* Private Use */ + [0xecf9, 0xecf9], /* Private Use */ + [0xecfa, 0xecfa], /* Private Use */ + [0xecfb, 0xecfb], /* Private Use */ + [0xecfc, 0xecfc], /* Private Use */ + [0xecfd, 0xecfd], /* Private Use */ + [0xecfe, 0xecfe], /* Private Use */ + [0xecff, 0xecff], /* Private Use */ + [0xed00, 0xed00], /* Private Use */ + [0xed01, 0xed01], /* Private Use */ + [0xed02, 0xed02], /* Private Use */ + [0xed03, 0xed03], /* Private Use */ + [0xed04, 0xed04], /* Private Use */ + [0xed05, 0xed05], /* Private Use */ + [0xed06, 0xed06], /* Private Use */ + [0xed07, 0xed07], /* Private Use */ + [0xed08, 0xed08], /* Private Use */ + [0xed09, 0xed09], /* Private Use */ + [0xed0a, 0xed0a], /* Private Use */ + [0xed0b, 0xed0b], /* Private Use */ + [0xed0c, 0xed0c], /* Private Use */ + [0xed0d, 0xed0d], /* Private Use */ + [0xed0e, 0xed0e], /* Private Use */ + [0xed0f, 0xed0f], /* Private Use */ + [0xed10, 0xed10], /* Private Use */ + [0xed11, 0xed11], /* Private Use */ + [0xed12, 0xed12], /* Private Use */ + [0xed13, 0xed13], /* Private Use */ + [0xed14, 0xed14], /* Private Use */ + [0xed15, 0xed15], /* Private Use */ + [0xed16, 0xed16], /* Private Use */ + [0xed17, 0xed17], /* Private Use */ + [0xed18, 0xed18], /* Private Use */ + [0xed19, 0xed19], /* Private Use */ + [0xed1a, 0xed1a], /* Private Use */ + [0xed1b, 0xed1b], /* Private Use */ + [0xed1c, 0xed1c], /* Private Use */ + [0xed1d, 0xed1d], /* Private Use */ + [0xed1e, 0xed1e], /* Private Use */ + [0xed1f, 0xed1f], /* Private Use */ + [0xed20, 0xed20], /* Private Use */ + [0xed21, 0xed21], /* Private Use */ + [0xed22, 0xed22], /* Private Use */ + [0xed23, 0xed23], /* Private Use */ + [0xed24, 0xed24], /* Private Use */ + [0xed25, 0xed25], /* Private Use */ + [0xed26, 0xed26], /* Private Use */ + [0xed27, 0xed27], /* Private Use */ + [0xed28, 0xed28], /* Private Use */ + [0xed29, 0xed29], /* Private Use */ + [0xed2a, 0xed2a], /* Private Use */ + [0xed2b, 0xed2b], /* Private Use */ + [0xed2c, 0xed2c], /* Private Use */ + [0xed2d, 0xed2d], /* Private Use */ + [0xed2e, 0xed2e], /* Private Use */ + [0xed2f, 0xed2f], /* Private Use */ + [0xed30, 0xed30], /* Private Use */ + [0xed31, 0xed31], /* Private Use */ + [0xed32, 0xed32], /* Private Use */ + [0xed33, 0xed33], /* Private Use */ + [0xed34, 0xed34], /* Private Use */ + [0xed35, 0xed35], /* Private Use */ + [0xed36, 0xed36], /* Private Use */ + [0xed37, 0xed37], /* Private Use */ + [0xed38, 0xed38], /* Private Use */ + [0xed39, 0xed39], /* Private Use */ + [0xed3a, 0xed3a], /* Private Use */ + [0xed3b, 0xed3b], /* Private Use */ + [0xed3c, 0xed3c], /* Private Use */ + [0xed3d, 0xed3d], /* Private Use */ + [0xed3e, 0xed3e], /* Private Use */ + [0xed3f, 0xed3f], /* Private Use */ + [0xed40, 0xed40], /* Private Use */ + [0xed41, 0xed41], /* Private Use */ + [0xed42, 0xed42], /* Private Use */ + [0xed43, 0xed43], /* Private Use */ + [0xed44, 0xed44], /* Private Use */ + [0xed45, 0xed45], /* Private Use */ + [0xed46, 0xed46], /* Private Use */ + [0xed47, 0xed47], /* Private Use */ + [0xed48, 0xed48], /* Private Use */ + [0xed49, 0xed49], /* Private Use */ + [0xed4a, 0xed4a], /* Private Use */ + [0xed4b, 0xed4b], /* Private Use */ + [0xed4c, 0xed4c], /* Private Use */ + [0xed4d, 0xed4d], /* Private Use */ + [0xed4e, 0xed4e], /* Private Use */ + [0xed4f, 0xed4f], /* Private Use */ + [0xed50, 0xed50], /* Private Use */ + [0xed51, 0xed51], /* Private Use */ + [0xed52, 0xed52], /* Private Use */ + [0xed53, 0xed53], /* Private Use */ + [0xed54, 0xed54], /* Private Use */ + [0xed55, 0xed55], /* Private Use */ + [0xed56, 0xed56], /* Private Use */ + [0xed57, 0xed57], /* Private Use */ + [0xed58, 0xed58], /* Private Use */ + [0xed59, 0xed59], /* Private Use */ + [0xed5a, 0xed5a], /* Private Use */ + [0xed5b, 0xed5b], /* Private Use */ + [0xed5c, 0xed5c], /* Private Use */ + [0xed5d, 0xed5d], /* Private Use */ + [0xed5e, 0xed5e], /* Private Use */ + [0xed5f, 0xed5f], /* Private Use */ + [0xed60, 0xed60], /* Private Use */ + [0xed61, 0xed61], /* Private Use */ + [0xed62, 0xed62], /* Private Use */ + [0xed63, 0xed63], /* Private Use */ + [0xed64, 0xed64], /* Private Use */ + [0xed65, 0xed65], /* Private Use */ + [0xed66, 0xed66], /* Private Use */ + [0xed67, 0xed67], /* Private Use */ + [0xed68, 0xed68], /* Private Use */ + [0xed69, 0xed69], /* Private Use */ + [0xed6a, 0xed6a], /* Private Use */ + [0xed6b, 0xed6b], /* Private Use */ + [0xed6c, 0xed6c], /* Private Use */ + [0xed6d, 0xed6d], /* Private Use */ + [0xed6e, 0xed6e], /* Private Use */ + [0xed6f, 0xed6f], /* Private Use */ + [0xed70, 0xed70], /* Private Use */ + [0xed71, 0xed71], /* Private Use */ + [0xed72, 0xed72], /* Private Use */ + [0xed73, 0xed73], /* Private Use */ + [0xed74, 0xed74], /* Private Use */ + [0xed75, 0xed75], /* Private Use */ + [0xed76, 0xed76], /* Private Use */ + [0xed77, 0xed77], /* Private Use */ + [0xed78, 0xed78], /* Private Use */ + [0xed79, 0xed79], /* Private Use */ + [0xed7a, 0xed7a], /* Private Use */ + [0xed7b, 0xed7b], /* Private Use */ + [0xed7c, 0xed7c], /* Private Use */ + [0xed7d, 0xed7d], /* Private Use */ + [0xed7e, 0xed7e], /* Private Use */ + [0xed7f, 0xed7f], /* Private Use */ + [0xed80, 0xed80], /* Private Use */ + [0xed81, 0xed81], /* Private Use */ + [0xed82, 0xed82], /* Private Use */ + [0xed83, 0xed83], /* Private Use */ + [0xed84, 0xed84], /* Private Use */ + [0xed85, 0xed85], /* Private Use */ + [0xed86, 0xed86], /* Private Use */ + [0xed87, 0xed87], /* Private Use */ + [0xed88, 0xed88], /* Private Use */ + [0xed89, 0xed89], /* Private Use */ + [0xed8a, 0xed8a], /* Private Use */ + [0xed8b, 0xed8b], /* Private Use */ + [0xed8c, 0xed8c], /* Private Use */ + [0xed8d, 0xed8d], /* Private Use */ + [0xed8e, 0xed8e], /* Private Use */ + [0xed8f, 0xed8f], /* Private Use */ + [0xed90, 0xed90], /* Private Use */ + [0xed91, 0xed91], /* Private Use */ + [0xed92, 0xed92], /* Private Use */ + [0xed93, 0xed93], /* Private Use */ + [0xed94, 0xed94], /* Private Use */ + [0xed95, 0xed95], /* Private Use */ + [0xed96, 0xed96], /* Private Use */ + [0xed97, 0xed97], /* Private Use */ + [0xed98, 0xed98], /* Private Use */ + [0xed99, 0xed99], /* Private Use */ + [0xed9a, 0xed9a], /* Private Use */ + [0xed9b, 0xed9b], /* Private Use */ + [0xed9c, 0xed9c], /* Private Use */ + [0xed9d, 0xed9d], /* Private Use */ + [0xed9e, 0xed9e], /* Private Use */ + [0xed9f, 0xed9f], /* Private Use */ + [0xeda0, 0xeda0], /* Private Use */ + [0xeda1, 0xeda1], /* Private Use */ + [0xeda2, 0xeda2], /* Private Use */ + [0xeda3, 0xeda3], /* Private Use */ + [0xeda4, 0xeda4], /* Private Use */ + [0xeda5, 0xeda5], /* Private Use */ + [0xeda6, 0xeda6], /* Private Use */ + [0xeda7, 0xeda7], /* Private Use */ + [0xeda8, 0xeda8], /* Private Use */ + [0xeda9, 0xeda9], /* Private Use */ + [0xedaa, 0xedaa], /* Private Use */ + [0xedab, 0xedab], /* Private Use */ + [0xedac, 0xedac], /* Private Use */ + [0xedad, 0xedad], /* Private Use */ + [0xedae, 0xedae], /* Private Use */ + [0xedaf, 0xedaf], /* Private Use */ + [0xedb0, 0xedb0], /* Private Use */ + [0xedb1, 0xedb1], /* Private Use */ + [0xedb2, 0xedb2], /* Private Use */ + [0xedb3, 0xedb3], /* Private Use */ + [0xedb4, 0xedb4], /* Private Use */ + [0xedb5, 0xedb5], /* Private Use */ + [0xedb6, 0xedb6], /* Private Use */ + [0xedb7, 0xedb7], /* Private Use */ + [0xedb8, 0xedb8], /* Private Use */ + [0xedb9, 0xedb9], /* Private Use */ + [0xedba, 0xedba], /* Private Use */ + [0xedbb, 0xedbb], /* Private Use */ + [0xedbc, 0xedbc], /* Private Use */ + [0xedbd, 0xedbd], /* Private Use */ + [0xedbe, 0xedbe], /* Private Use */ + [0xedbf, 0xedbf], /* Private Use */ + [0xedc0, 0xedc0], /* Private Use */ + [0xedc1, 0xedc1], /* Private Use */ + [0xedc2, 0xedc2], /* Private Use */ + [0xedc3, 0xedc3], /* Private Use */ + [0xedc4, 0xedc4], /* Private Use */ + [0xedc5, 0xedc5], /* Private Use */ + [0xedc6, 0xedc6], /* Private Use */ + [0xedc7, 0xedc7], /* Private Use */ + [0xedc8, 0xedc8], /* Private Use */ + [0xedc9, 0xedc9], /* Private Use */ + [0xedca, 0xedca], /* Private Use */ + [0xedcb, 0xedcb], /* Private Use */ + [0xedcc, 0xedcc], /* Private Use */ + [0xedcd, 0xedcd], /* Private Use */ + [0xedce, 0xedce], /* Private Use */ + [0xedcf, 0xedcf], /* Private Use */ + [0xedd0, 0xedd0], /* Private Use */ + [0xedd1, 0xedd1], /* Private Use */ + [0xedd2, 0xedd2], /* Private Use */ + [0xedd3, 0xedd3], /* Private Use */ + [0xedd4, 0xedd4], /* Private Use */ + [0xedd5, 0xedd5], /* Private Use */ + [0xedd6, 0xedd6], /* Private Use */ + [0xedd7, 0xedd7], /* Private Use */ + [0xedd8, 0xedd8], /* Private Use */ + [0xedd9, 0xedd9], /* Private Use */ + [0xedda, 0xedda], /* Private Use */ + [0xeddb, 0xeddb], /* Private Use */ + [0xeddc, 0xeddc], /* Private Use */ + [0xeddd, 0xeddd], /* Private Use */ + [0xedde, 0xedde], /* Private Use */ + [0xeddf, 0xeddf], /* Private Use */ + [0xede0, 0xede0], /* Private Use */ + [0xede1, 0xede1], /* Private Use */ + [0xede2, 0xede2], /* Private Use */ + [0xede3, 0xede3], /* Private Use */ + [0xede4, 0xede4], /* Private Use */ + [0xede5, 0xede5], /* Private Use */ + [0xede6, 0xede6], /* Private Use */ + [0xede7, 0xede7], /* Private Use */ + [0xede8, 0xede8], /* Private Use */ + [0xede9, 0xede9], /* Private Use */ + [0xedea, 0xedea], /* Private Use */ + [0xedeb, 0xedeb], /* Private Use */ + [0xedec, 0xedec], /* Private Use */ + [0xeded, 0xeded], /* Private Use */ + [0xedee, 0xedee], /* Private Use */ + [0xedef, 0xedef], /* Private Use */ + [0xedf0, 0xedf0], /* Private Use */ + [0xedf1, 0xedf1], /* Private Use */ + [0xedf2, 0xedf2], /* Private Use */ + [0xedf3, 0xedf3], /* Private Use */ + [0xedf4, 0xedf4], /* Private Use */ + [0xedf5, 0xedf5], /* Private Use */ + [0xedf6, 0xedf6], /* Private Use */ + [0xedf7, 0xedf7], /* Private Use */ + [0xedf8, 0xedf8], /* Private Use */ + [0xedf9, 0xedf9], /* Private Use */ + [0xedfa, 0xedfa], /* Private Use */ + [0xedfb, 0xedfb], /* Private Use */ + [0xedfc, 0xedfc], /* Private Use */ + [0xedfd, 0xedfd], /* Private Use */ + [0xedfe, 0xedfe], /* Private Use */ + [0xedff, 0xedff], /* Private Use */ + [0xee00, 0xee00], /* Private Use */ + [0xee01, 0xee01], /* Private Use */ + [0xee02, 0xee02], /* Private Use */ + [0xee03, 0xee03], /* Private Use */ + [0xee04, 0xee04], /* Private Use */ + [0xee05, 0xee05], /* Private Use */ + [0xee06, 0xee06], /* Private Use */ + [0xee07, 0xee07], /* Private Use */ + [0xee08, 0xee08], /* Private Use */ + [0xee09, 0xee09], /* Private Use */ + [0xee0a, 0xee0a], /* Private Use */ + [0xee0b, 0xee0b], /* Private Use */ + [0xee0c, 0xee0c], /* Private Use */ + [0xee0d, 0xee0d], /* Private Use */ + [0xee0e, 0xee0e], /* Private Use */ + [0xee0f, 0xee0f], /* Private Use */ + [0xee10, 0xee10], /* Private Use */ + [0xee11, 0xee11], /* Private Use */ + [0xee12, 0xee12], /* Private Use */ + [0xee13, 0xee13], /* Private Use */ + [0xee14, 0xee14], /* Private Use */ + [0xee15, 0xee15], /* Private Use */ + [0xee16, 0xee16], /* Private Use */ + [0xee17, 0xee17], /* Private Use */ + [0xee18, 0xee18], /* Private Use */ + [0xee19, 0xee19], /* Private Use */ + [0xee1a, 0xee1a], /* Private Use */ + [0xee1b, 0xee1b], /* Private Use */ + [0xee1c, 0xee1c], /* Private Use */ + [0xee1d, 0xee1d], /* Private Use */ + [0xee1e, 0xee1e], /* Private Use */ + [0xee1f, 0xee1f], /* Private Use */ + [0xee20, 0xee20], /* Private Use */ + [0xee21, 0xee21], /* Private Use */ + [0xee22, 0xee22], /* Private Use */ + [0xee23, 0xee23], /* Private Use */ + [0xee24, 0xee24], /* Private Use */ + [0xee25, 0xee25], /* Private Use */ + [0xee26, 0xee26], /* Private Use */ + [0xee27, 0xee27], /* Private Use */ + [0xee28, 0xee28], /* Private Use */ + [0xee29, 0xee29], /* Private Use */ + [0xee2a, 0xee2a], /* Private Use */ + [0xee2b, 0xee2b], /* Private Use */ + [0xee2c, 0xee2c], /* Private Use */ + [0xee2d, 0xee2d], /* Private Use */ + [0xee2e, 0xee2e], /* Private Use */ + [0xee2f, 0xee2f], /* Private Use */ + [0xee30, 0xee30], /* Private Use */ + [0xee31, 0xee31], /* Private Use */ + [0xee32, 0xee32], /* Private Use */ + [0xee33, 0xee33], /* Private Use */ + [0xee34, 0xee34], /* Private Use */ + [0xee35, 0xee35], /* Private Use */ + [0xee36, 0xee36], /* Private Use */ + [0xee37, 0xee37], /* Private Use */ + [0xee38, 0xee38], /* Private Use */ + [0xee39, 0xee39], /* Private Use */ + [0xee3a, 0xee3a], /* Private Use */ + [0xee3b, 0xee3b], /* Private Use */ + [0xee3c, 0xee3c], /* Private Use */ + [0xee3d, 0xee3d], /* Private Use */ + [0xee3e, 0xee3e], /* Private Use */ + [0xee3f, 0xee3f], /* Private Use */ + [0xee40, 0xee40], /* Private Use */ + [0xee41, 0xee41], /* Private Use */ + [0xee42, 0xee42], /* Private Use */ + [0xee43, 0xee43], /* Private Use */ + [0xee44, 0xee44], /* Private Use */ + [0xee45, 0xee45], /* Private Use */ + [0xee46, 0xee46], /* Private Use */ + [0xee47, 0xee47], /* Private Use */ + [0xee48, 0xee48], /* Private Use */ + [0xee49, 0xee49], /* Private Use */ + [0xee4a, 0xee4a], /* Private Use */ + [0xee4b, 0xee4b], /* Private Use */ + [0xee4c, 0xee4c], /* Private Use */ + [0xee4d, 0xee4d], /* Private Use */ + [0xee4e, 0xee4e], /* Private Use */ + [0xee4f, 0xee4f], /* Private Use */ + [0xee50, 0xee50], /* Private Use */ + [0xee51, 0xee51], /* Private Use */ + [0xee52, 0xee52], /* Private Use */ + [0xee53, 0xee53], /* Private Use */ + [0xee54, 0xee54], /* Private Use */ + [0xee55, 0xee55], /* Private Use */ + [0xee56, 0xee56], /* Private Use */ + [0xee57, 0xee57], /* Private Use */ + [0xee58, 0xee58], /* Private Use */ + [0xee59, 0xee59], /* Private Use */ + [0xee5a, 0xee5a], /* Private Use */ + [0xee5b, 0xee5b], /* Private Use */ + [0xee5c, 0xee5c], /* Private Use */ + [0xee5d, 0xee5d], /* Private Use */ + [0xee5e, 0xee5e], /* Private Use */ + [0xee5f, 0xee5f], /* Private Use */ + [0xee60, 0xee60], /* Private Use */ + [0xee61, 0xee61], /* Private Use */ + [0xee62, 0xee62], /* Private Use */ + [0xee63, 0xee63], /* Private Use */ + [0xee64, 0xee64], /* Private Use */ + [0xee65, 0xee65], /* Private Use */ + [0xee66, 0xee66], /* Private Use */ + [0xee67, 0xee67], /* Private Use */ + [0xee68, 0xee68], /* Private Use */ + [0xee69, 0xee69], /* Private Use */ + [0xee6a, 0xee6a], /* Private Use */ + [0xee6b, 0xee6b], /* Private Use */ + [0xee6c, 0xee6c], /* Private Use */ + [0xee6d, 0xee6d], /* Private Use */ + [0xee6e, 0xee6e], /* Private Use */ + [0xee6f, 0xee6f], /* Private Use */ + [0xee70, 0xee70], /* Private Use */ + [0xee71, 0xee71], /* Private Use */ + [0xee72, 0xee72], /* Private Use */ + [0xee73, 0xee73], /* Private Use */ + [0xee74, 0xee74], /* Private Use */ + [0xee75, 0xee75], /* Private Use */ + [0xee76, 0xee76], /* Private Use */ + [0xee77, 0xee77], /* Private Use */ + [0xee78, 0xee78], /* Private Use */ + [0xee79, 0xee79], /* Private Use */ + [0xee7a, 0xee7a], /* Private Use */ + [0xee7b, 0xee7b], /* Private Use */ + [0xee7c, 0xee7c], /* Private Use */ + [0xee7d, 0xee7d], /* Private Use */ + [0xee7e, 0xee7e], /* Private Use */ + [0xee7f, 0xee7f], /* Private Use */ + [0xee80, 0xee80], /* Private Use */ + [0xee81, 0xee81], /* Private Use */ + [0xee82, 0xee82], /* Private Use */ + [0xee83, 0xee83], /* Private Use */ + [0xee84, 0xee84], /* Private Use */ + [0xee85, 0xee85], /* Private Use */ + [0xee86, 0xee86], /* Private Use */ + [0xee87, 0xee87], /* Private Use */ + [0xee88, 0xee88], /* Private Use */ + [0xee89, 0xee89], /* Private Use */ + [0xee8a, 0xee8a], /* Private Use */ + [0xee8b, 0xee8b], /* Private Use */ + [0xee8c, 0xee8c], /* Private Use */ + [0xee8d, 0xee8d], /* Private Use */ + [0xee8e, 0xee8e], /* Private Use */ + [0xee8f, 0xee8f], /* Private Use */ + [0xee90, 0xee90], /* Private Use */ + [0xee91, 0xee91], /* Private Use */ + [0xee92, 0xee92], /* Private Use */ + [0xee93, 0xee93], /* Private Use */ + [0xee94, 0xee94], /* Private Use */ + [0xee95, 0xee95], /* Private Use */ + [0xee96, 0xee96], /* Private Use */ + [0xee97, 0xee97], /* Private Use */ + [0xee98, 0xee98], /* Private Use */ + [0xee99, 0xee99], /* Private Use */ + [0xee9a, 0xee9a], /* Private Use */ + [0xee9b, 0xee9b], /* Private Use */ + [0xee9c, 0xee9c], /* Private Use */ + [0xee9d, 0xee9d], /* Private Use */ + [0xee9e, 0xee9e], /* Private Use */ + [0xee9f, 0xee9f], /* Private Use */ + [0xeea0, 0xeea0], /* Private Use */ + [0xeea1, 0xeea1], /* Private Use */ + [0xeea2, 0xeea2], /* Private Use */ + [0xeea3, 0xeea3], /* Private Use */ + [0xeea4, 0xeea4], /* Private Use */ + [0xeea5, 0xeea5], /* Private Use */ + [0xeea6, 0xeea6], /* Private Use */ + [0xeea7, 0xeea7], /* Private Use */ + [0xeea8, 0xeea8], /* Private Use */ + [0xeea9, 0xeea9], /* Private Use */ + [0xeeaa, 0xeeaa], /* Private Use */ + [0xeeab, 0xeeab], /* Private Use */ + [0xeeac, 0xeeac], /* Private Use */ + [0xeead, 0xeead], /* Private Use */ + [0xeeae, 0xeeae], /* Private Use */ + [0xeeaf, 0xeeaf], /* Private Use */ + [0xeeb0, 0xeeb0], /* Private Use */ + [0xeeb1, 0xeeb1], /* Private Use */ + [0xeeb2, 0xeeb2], /* Private Use */ + [0xeeb3, 0xeeb3], /* Private Use */ + [0xeeb4, 0xeeb4], /* Private Use */ + [0xeeb5, 0xeeb5], /* Private Use */ + [0xeeb6, 0xeeb6], /* Private Use */ + [0xeeb7, 0xeeb7], /* Private Use */ + [0xeeb8, 0xeeb8], /* Private Use */ + [0xeeb9, 0xeeb9], /* Private Use */ + [0xeeba, 0xeeba], /* Private Use */ + [0xeebb, 0xeebb], /* Private Use */ + [0xeebc, 0xeebc], /* Private Use */ + [0xeebd, 0xeebd], /* Private Use */ + [0xeebe, 0xeebe], /* Private Use */ + [0xeebf, 0xeebf], /* Private Use */ + [0xeec0, 0xeec0], /* Private Use */ + [0xeec1, 0xeec1], /* Private Use */ + [0xeec2, 0xeec2], /* Private Use */ + [0xeec3, 0xeec3], /* Private Use */ + [0xeec4, 0xeec4], /* Private Use */ + [0xeec5, 0xeec5], /* Private Use */ + [0xeec6, 0xeec6], /* Private Use */ + [0xeec7, 0xeec7], /* Private Use */ + [0xeec8, 0xeec8], /* Private Use */ + [0xeec9, 0xeec9], /* Private Use */ + [0xeeca, 0xeeca], /* Private Use */ + [0xeecb, 0xeecb], /* Private Use */ + [0xeecc, 0xeecc], /* Private Use */ + [0xeecd, 0xeecd], /* Private Use */ + [0xeece, 0xeece], /* Private Use */ + [0xeecf, 0xeecf], /* Private Use */ + [0xeed0, 0xeed0], /* Private Use */ + [0xeed1, 0xeed1], /* Private Use */ + [0xeed2, 0xeed2], /* Private Use */ + [0xeed3, 0xeed3], /* Private Use */ + [0xeed4, 0xeed4], /* Private Use */ + [0xeed5, 0xeed5], /* Private Use */ + [0xeed6, 0xeed6], /* Private Use */ + [0xeed7, 0xeed7], /* Private Use */ + [0xeed8, 0xeed8], /* Private Use */ + [0xeed9, 0xeed9], /* Private Use */ + [0xeeda, 0xeeda], /* Private Use */ + [0xeedb, 0xeedb], /* Private Use */ + [0xeedc, 0xeedc], /* Private Use */ + [0xeedd, 0xeedd], /* Private Use */ + [0xeede, 0xeede], /* Private Use */ + [0xeedf, 0xeedf], /* Private Use */ + [0xeee0, 0xeee0], /* Private Use */ + [0xeee1, 0xeee1], /* Private Use */ + [0xeee2, 0xeee2], /* Private Use */ + [0xeee3, 0xeee3], /* Private Use */ + [0xeee4, 0xeee4], /* Private Use */ + [0xeee5, 0xeee5], /* Private Use */ + [0xeee6, 0xeee6], /* Private Use */ + [0xeee7, 0xeee7], /* Private Use */ + [0xeee8, 0xeee8], /* Private Use */ + [0xeee9, 0xeee9], /* Private Use */ + [0xeeea, 0xeeea], /* Private Use */ + [0xeeeb, 0xeeeb], /* Private Use */ + [0xeeec, 0xeeec], /* Private Use */ + [0xeeed, 0xeeed], /* Private Use */ + [0xeeee, 0xeeee], /* Private Use */ + [0xeeef, 0xeeef], /* Private Use */ + [0xeef0, 0xeef0], /* Private Use */ + [0xeef1, 0xeef1], /* Private Use */ + [0xeef2, 0xeef2], /* Private Use */ + [0xeef3, 0xeef3], /* Private Use */ + [0xeef4, 0xeef4], /* Private Use */ + [0xeef5, 0xeef5], /* Private Use */ + [0xeef6, 0xeef6], /* Private Use */ + [0xeef7, 0xeef7], /* Private Use */ + [0xeef8, 0xeef8], /* Private Use */ + [0xeef9, 0xeef9], /* Private Use */ + [0xeefa, 0xeefa], /* Private Use */ + [0xeefb, 0xeefb], /* Private Use */ + [0xeefc, 0xeefc], /* Private Use */ + [0xeefd, 0xeefd], /* Private Use */ + [0xeefe, 0xeefe], /* Private Use */ + [0xeeff, 0xeeff], /* Private Use */ + [0xef00, 0xef00], /* Private Use */ + [0xef01, 0xef01], /* Private Use */ + [0xef02, 0xef02], /* Private Use */ + [0xef03, 0xef03], /* Private Use */ + [0xef04, 0xef04], /* Private Use */ + [0xef05, 0xef05], /* Private Use */ + [0xef06, 0xef06], /* Private Use */ + [0xef07, 0xef07], /* Private Use */ + [0xef08, 0xef08], /* Private Use */ + [0xef09, 0xef09], /* Private Use */ + [0xef0a, 0xef0a], /* Private Use */ + [0xef0b, 0xef0b], /* Private Use */ + [0xef0c, 0xef0c], /* Private Use */ + [0xef0d, 0xef0d], /* Private Use */ + [0xef0e, 0xef0e], /* Private Use */ + [0xef0f, 0xef0f], /* Private Use */ + [0xef10, 0xef10], /* Private Use */ + [0xef11, 0xef11], /* Private Use */ + [0xef12, 0xef12], /* Private Use */ + [0xef13, 0xef13], /* Private Use */ + [0xef14, 0xef14], /* Private Use */ + [0xef15, 0xef15], /* Private Use */ + [0xef16, 0xef16], /* Private Use */ + [0xef17, 0xef17], /* Private Use */ + [0xef18, 0xef18], /* Private Use */ + [0xef19, 0xef19], /* Private Use */ + [0xef1a, 0xef1a], /* Private Use */ + [0xef1b, 0xef1b], /* Private Use */ + [0xef1c, 0xef1c], /* Private Use */ + [0xef1d, 0xef1d], /* Private Use */ + [0xef1e, 0xef1e], /* Private Use */ + [0xef1f, 0xef1f], /* Private Use */ + [0xef20, 0xef20], /* Private Use */ + [0xef21, 0xef21], /* Private Use */ + [0xef22, 0xef22], /* Private Use */ + [0xef23, 0xef23], /* Private Use */ + [0xef24, 0xef24], /* Private Use */ + [0xef25, 0xef25], /* Private Use */ + [0xef26, 0xef26], /* Private Use */ + [0xef27, 0xef27], /* Private Use */ + [0xef28, 0xef28], /* Private Use */ + [0xef29, 0xef29], /* Private Use */ + [0xef2a, 0xef2a], /* Private Use */ + [0xef2b, 0xef2b], /* Private Use */ + [0xef2c, 0xef2c], /* Private Use */ + [0xef2d, 0xef2d], /* Private Use */ + [0xef2e, 0xef2e], /* Private Use */ + [0xef2f, 0xef2f], /* Private Use */ + [0xef30, 0xef30], /* Private Use */ + [0xef31, 0xef31], /* Private Use */ + [0xef32, 0xef32], /* Private Use */ + [0xef33, 0xef33], /* Private Use */ + [0xef34, 0xef34], /* Private Use */ + [0xef35, 0xef35], /* Private Use */ + [0xef36, 0xef36], /* Private Use */ + [0xef37, 0xef37], /* Private Use */ + [0xef38, 0xef38], /* Private Use */ + [0xef39, 0xef39], /* Private Use */ + [0xef3a, 0xef3a], /* Private Use */ + [0xef3b, 0xef3b], /* Private Use */ + [0xef3c, 0xef3c], /* Private Use */ + [0xef3d, 0xef3d], /* Private Use */ + [0xef3e, 0xef3e], /* Private Use */ + [0xef3f, 0xef3f], /* Private Use */ + [0xef40, 0xef40], /* Private Use */ + [0xef41, 0xef41], /* Private Use */ + [0xef42, 0xef42], /* Private Use */ + [0xef43, 0xef43], /* Private Use */ + [0xef44, 0xef44], /* Private Use */ + [0xef45, 0xef45], /* Private Use */ + [0xef46, 0xef46], /* Private Use */ + [0xef47, 0xef47], /* Private Use */ + [0xef48, 0xef48], /* Private Use */ + [0xef49, 0xef49], /* Private Use */ + [0xef4a, 0xef4a], /* Private Use */ + [0xef4b, 0xef4b], /* Private Use */ + [0xef4c, 0xef4c], /* Private Use */ + [0xef4d, 0xef4d], /* Private Use */ + [0xef4e, 0xef4e], /* Private Use */ + [0xef4f, 0xef4f], /* Private Use */ + [0xef50, 0xef50], /* Private Use */ + [0xef51, 0xef51], /* Private Use */ + [0xef52, 0xef52], /* Private Use */ + [0xef53, 0xef53], /* Private Use */ + [0xef54, 0xef54], /* Private Use */ + [0xef55, 0xef55], /* Private Use */ + [0xef56, 0xef56], /* Private Use */ + [0xef57, 0xef57], /* Private Use */ + [0xef58, 0xef58], /* Private Use */ + [0xef59, 0xef59], /* Private Use */ + [0xef5a, 0xef5a], /* Private Use */ + [0xef5b, 0xef5b], /* Private Use */ + [0xef5c, 0xef5c], /* Private Use */ + [0xef5d, 0xef5d], /* Private Use */ + [0xef5e, 0xef5e], /* Private Use */ + [0xef5f, 0xef5f], /* Private Use */ + [0xef60, 0xef60], /* Private Use */ + [0xef61, 0xef61], /* Private Use */ + [0xef62, 0xef62], /* Private Use */ + [0xef63, 0xef63], /* Private Use */ + [0xef64, 0xef64], /* Private Use */ + [0xef65, 0xef65], /* Private Use */ + [0xef66, 0xef66], /* Private Use */ + [0xef67, 0xef67], /* Private Use */ + [0xef68, 0xef68], /* Private Use */ + [0xef69, 0xef69], /* Private Use */ + [0xef6a, 0xef6a], /* Private Use */ + [0xef6b, 0xef6b], /* Private Use */ + [0xef6c, 0xef6c], /* Private Use */ + [0xef6d, 0xef6d], /* Private Use */ + [0xef6e, 0xef6e], /* Private Use */ + [0xef6f, 0xef6f], /* Private Use */ + [0xef70, 0xef70], /* Private Use */ + [0xef71, 0xef71], /* Private Use */ + [0xef72, 0xef72], /* Private Use */ + [0xef73, 0xef73], /* Private Use */ + [0xef74, 0xef74], /* Private Use */ + [0xef75, 0xef75], /* Private Use */ + [0xef76, 0xef76], /* Private Use */ + [0xef77, 0xef77], /* Private Use */ + [0xef78, 0xef78], /* Private Use */ + [0xef79, 0xef79], /* Private Use */ + [0xef7a, 0xef7a], /* Private Use */ + [0xef7b, 0xef7b], /* Private Use */ + [0xef7c, 0xef7c], /* Private Use */ + [0xef7d, 0xef7d], /* Private Use */ + [0xef7e, 0xef7e], /* Private Use */ + [0xef7f, 0xef7f], /* Private Use */ + [0xef80, 0xef80], /* Private Use */ + [0xef81, 0xef81], /* Private Use */ + [0xef82, 0xef82], /* Private Use */ + [0xef83, 0xef83], /* Private Use */ + [0xef84, 0xef84], /* Private Use */ + [0xef85, 0xef85], /* Private Use */ + [0xef86, 0xef86], /* Private Use */ + [0xef87, 0xef87], /* Private Use */ + [0xef88, 0xef88], /* Private Use */ + [0xef89, 0xef89], /* Private Use */ + [0xef8a, 0xef8a], /* Private Use */ + [0xef8b, 0xef8b], /* Private Use */ + [0xef8c, 0xef8c], /* Private Use */ + [0xef8d, 0xef8d], /* Private Use */ + [0xef8e, 0xef8e], /* Private Use */ + [0xef8f, 0xef8f], /* Private Use */ + [0xef90, 0xef90], /* Private Use */ + [0xef91, 0xef91], /* Private Use */ + [0xef92, 0xef92], /* Private Use */ + [0xef93, 0xef93], /* Private Use */ + [0xef94, 0xef94], /* Private Use */ + [0xef95, 0xef95], /* Private Use */ + [0xef96, 0xef96], /* Private Use */ + [0xef97, 0xef97], /* Private Use */ + [0xef98, 0xef98], /* Private Use */ + [0xef99, 0xef99], /* Private Use */ + [0xef9a, 0xef9a], /* Private Use */ + [0xef9b, 0xef9b], /* Private Use */ + [0xef9c, 0xef9c], /* Private Use */ + [0xef9d, 0xef9d], /* Private Use */ + [0xef9e, 0xef9e], /* Private Use */ + [0xef9f, 0xef9f], /* Private Use */ + [0xefa0, 0xefa0], /* Private Use */ + [0xefa1, 0xefa1], /* Private Use */ + [0xefa2, 0xefa2], /* Private Use */ + [0xefa3, 0xefa3], /* Private Use */ + [0xefa4, 0xefa4], /* Private Use */ + [0xefa5, 0xefa5], /* Private Use */ + [0xefa6, 0xefa6], /* Private Use */ + [0xefa7, 0xefa7], /* Private Use */ + [0xefa8, 0xefa8], /* Private Use */ + [0xefa9, 0xefa9], /* Private Use */ + [0xefaa, 0xefaa], /* Private Use */ + [0xefab, 0xefab], /* Private Use */ + [0xefac, 0xefac], /* Private Use */ + [0xefad, 0xefad], /* Private Use */ + [0xefae, 0xefae], /* Private Use */ + [0xefaf, 0xefaf], /* Private Use */ + [0xefb0, 0xefb0], /* Private Use */ + [0xefb1, 0xefb1], /* Private Use */ + [0xefb2, 0xefb2], /* Private Use */ + [0xefb3, 0xefb3], /* Private Use */ + [0xefb4, 0xefb4], /* Private Use */ + [0xefb5, 0xefb5], /* Private Use */ + [0xefb6, 0xefb6], /* Private Use */ + [0xefb7, 0xefb7], /* Private Use */ + [0xefb8, 0xefb8], /* Private Use */ + [0xefb9, 0xefb9], /* Private Use */ + [0xefba, 0xefba], /* Private Use */ + [0xefbb, 0xefbb], /* Private Use */ + [0xefbc, 0xefbc], /* Private Use */ + [0xefbd, 0xefbd], /* Private Use */ + [0xefbe, 0xefbe], /* Private Use */ + [0xefbf, 0xefbf], /* Private Use */ + [0xefc0, 0xefc0], /* Private Use */ + [0xefc1, 0xefc1], /* Private Use */ + [0xefc2, 0xefc2], /* Private Use */ + [0xefc3, 0xefc3], /* Private Use */ + [0xefc4, 0xefc4], /* Private Use */ + [0xefc5, 0xefc5], /* Private Use */ + [0xefc6, 0xefc6], /* Private Use */ + [0xefc7, 0xefc7], /* Private Use */ + [0xefc8, 0xefc8], /* Private Use */ + [0xefc9, 0xefc9], /* Private Use */ + [0xefca, 0xefca], /* Private Use */ + [0xefcb, 0xefcb], /* Private Use */ + [0xefcc, 0xefcc], /* Private Use */ + [0xefcd, 0xefcd], /* Private Use */ + [0xefce, 0xefce], /* Private Use */ + [0xefcf, 0xefcf], /* Private Use */ + [0xefd0, 0xefd0], /* Private Use */ + [0xefd1, 0xefd1], /* Private Use */ + [0xefd2, 0xefd2], /* Private Use */ + [0xefd3, 0xefd3], /* Private Use */ + [0xefd4, 0xefd4], /* Private Use */ + [0xefd5, 0xefd5], /* Private Use */ + [0xefd6, 0xefd6], /* Private Use */ + [0xefd7, 0xefd7], /* Private Use */ + [0xefd8, 0xefd8], /* Private Use */ + [0xefd9, 0xefd9], /* Private Use */ + [0xefda, 0xefda], /* Private Use */ + [0xefdb, 0xefdb], /* Private Use */ + [0xefdc, 0xefdc], /* Private Use */ + [0xefdd, 0xefdd], /* Private Use */ + [0xefde, 0xefde], /* Private Use */ + [0xefdf, 0xefdf], /* Private Use */ + [0xefe0, 0xefe0], /* Private Use */ + [0xefe1, 0xefe1], /* Private Use */ + [0xefe2, 0xefe2], /* Private Use */ + [0xefe3, 0xefe3], /* Private Use */ + [0xefe4, 0xefe4], /* Private Use */ + [0xefe5, 0xefe5], /* Private Use */ + [0xefe6, 0xefe6], /* Private Use */ + [0xefe7, 0xefe7], /* Private Use */ + [0xefe8, 0xefe8], /* Private Use */ + [0xefe9, 0xefe9], /* Private Use */ + [0xefea, 0xefea], /* Private Use */ + [0xefeb, 0xefeb], /* Private Use */ + [0xefec, 0xefec], /* Private Use */ + [0xefed, 0xefed], /* Private Use */ + [0xefee, 0xefee], /* Private Use */ + [0xefef, 0xefef], /* Private Use */ + [0xeff0, 0xeff0], /* Private Use */ + [0xeff1, 0xeff1], /* Private Use */ + [0xeff2, 0xeff2], /* Private Use */ + [0xeff3, 0xeff3], /* Private Use */ + [0xeff4, 0xeff4], /* Private Use */ + [0xeff5, 0xeff5], /* Private Use */ + [0xeff6, 0xeff6], /* Private Use */ + [0xeff7, 0xeff7], /* Private Use */ + [0xeff8, 0xeff8], /* Private Use */ + [0xeff9, 0xeff9], /* Private Use */ + [0xeffa, 0xeffa], /* Private Use */ + [0xeffb, 0xeffb], /* Private Use */ + [0xeffc, 0xeffc], /* Private Use */ + [0xeffd, 0xeffd], /* Private Use */ + [0xeffe, 0xeffe], /* Private Use */ + [0xefff, 0xefff], /* Private Use */ + [0xf000, 0xf000], /* Private Use */ + [0xf001, 0xf001], /* Private Use */ + [0xf002, 0xf002], /* Private Use */ + [0xf003, 0xf003], /* Private Use */ + [0xf004, 0xf004], /* Private Use */ + [0xf005, 0xf005], /* Private Use */ + [0xf006, 0xf006], /* Private Use */ + [0xf007, 0xf007], /* Private Use */ + [0xf008, 0xf008], /* Private Use */ + [0xf009, 0xf009], /* Private Use */ + [0xf00a, 0xf00a], /* Private Use */ + [0xf00b, 0xf00b], /* Private Use */ + [0xf00c, 0xf00c], /* Private Use */ + [0xf00d, 0xf00d], /* Private Use */ + [0xf00e, 0xf00e], /* Private Use */ + [0xf00f, 0xf00f], /* Private Use */ + [0xf010, 0xf010], /* Private Use */ + [0xf011, 0xf011], /* Private Use */ + [0xf012, 0xf012], /* Private Use */ + [0xf013, 0xf013], /* Private Use */ + [0xf014, 0xf014], /* Private Use */ + [0xf015, 0xf015], /* Private Use */ + [0xf016, 0xf016], /* Private Use */ + [0xf017, 0xf017], /* Private Use */ + [0xf018, 0xf018], /* Private Use */ + [0xf019, 0xf019], /* Private Use */ + [0xf01a, 0xf01a], /* Private Use */ + [0xf01b, 0xf01b], /* Private Use */ + [0xf01c, 0xf01c], /* Private Use */ + [0xf01d, 0xf01d], /* Private Use */ + [0xf01e, 0xf01e], /* Private Use */ + [0xf01f, 0xf01f], /* Private Use */ + [0xf020, 0xf020], /* Private Use */ + [0xf021, 0xf021], /* Private Use */ + [0xf022, 0xf022], /* Private Use */ + [0xf023, 0xf023], /* Private Use */ + [0xf024, 0xf024], /* Private Use */ + [0xf025, 0xf025], /* Private Use */ + [0xf026, 0xf026], /* Private Use */ + [0xf027, 0xf027], /* Private Use */ + [0xf028, 0xf028], /* Private Use */ + [0xf029, 0xf029], /* Private Use */ + [0xf02a, 0xf02a], /* Private Use */ + [0xf02b, 0xf02b], /* Private Use */ + [0xf02c, 0xf02c], /* Private Use */ + [0xf02d, 0xf02d], /* Private Use */ + [0xf02e, 0xf02e], /* Private Use */ + [0xf02f, 0xf02f], /* Private Use */ + [0xf030, 0xf030], /* Private Use */ + [0xf031, 0xf031], /* Private Use */ + [0xf032, 0xf032], /* Private Use */ + [0xf033, 0xf033], /* Private Use */ + [0xf034, 0xf034], /* Private Use */ + [0xf035, 0xf035], /* Private Use */ + [0xf036, 0xf036], /* Private Use */ + [0xf037, 0xf037], /* Private Use */ + [0xf038, 0xf038], /* Private Use */ + [0xf039, 0xf039], /* Private Use */ + [0xf03a, 0xf03a], /* Private Use */ + [0xf03b, 0xf03b], /* Private Use */ + [0xf03c, 0xf03c], /* Private Use */ + [0xf03d, 0xf03d], /* Private Use */ + [0xf03e, 0xf03e], /* Private Use */ + [0xf03f, 0xf03f], /* Private Use */ + [0xf040, 0xf040], /* Private Use */ + [0xf041, 0xf041], /* Private Use */ + [0xf042, 0xf042], /* Private Use */ + [0xf043, 0xf043], /* Private Use */ + [0xf044, 0xf044], /* Private Use */ + [0xf045, 0xf045], /* Private Use */ + [0xf046, 0xf046], /* Private Use */ + [0xf047, 0xf047], /* Private Use */ + [0xf048, 0xf048], /* Private Use */ + [0xf049, 0xf049], /* Private Use */ + [0xf04a, 0xf04a], /* Private Use */ + [0xf04b, 0xf04b], /* Private Use */ + [0xf04c, 0xf04c], /* Private Use */ + [0xf04d, 0xf04d], /* Private Use */ + [0xf04e, 0xf04e], /* Private Use */ + [0xf04f, 0xf04f], /* Private Use */ + [0xf050, 0xf050], /* Private Use */ + [0xf051, 0xf051], /* Private Use */ + [0xf052, 0xf052], /* Private Use */ + [0xf053, 0xf053], /* Private Use */ + [0xf054, 0xf054], /* Private Use */ + [0xf055, 0xf055], /* Private Use */ + [0xf056, 0xf056], /* Private Use */ + [0xf057, 0xf057], /* Private Use */ + [0xf058, 0xf058], /* Private Use */ + [0xf059, 0xf059], /* Private Use */ + [0xf05a, 0xf05a], /* Private Use */ + [0xf05b, 0xf05b], /* Private Use */ + [0xf05c, 0xf05c], /* Private Use */ + [0xf05d, 0xf05d], /* Private Use */ + [0xf05e, 0xf05e], /* Private Use */ + [0xf05f, 0xf05f], /* Private Use */ + [0xf060, 0xf060], /* Private Use */ + [0xf061, 0xf061], /* Private Use */ + [0xf062, 0xf062], /* Private Use */ + [0xf063, 0xf063], /* Private Use */ + [0xf064, 0xf064], /* Private Use */ + [0xf065, 0xf065], /* Private Use */ + [0xf066, 0xf066], /* Private Use */ + [0xf067, 0xf067], /* Private Use */ + [0xf068, 0xf068], /* Private Use */ + [0xf069, 0xf069], /* Private Use */ + [0xf06a, 0xf06a], /* Private Use */ + [0xf06b, 0xf06b], /* Private Use */ + [0xf06c, 0xf06c], /* Private Use */ + [0xf06d, 0xf06d], /* Private Use */ + [0xf06e, 0xf06e], /* Private Use */ + [0xf06f, 0xf06f], /* Private Use */ + [0xf070, 0xf070], /* Private Use */ + [0xf071, 0xf071], /* Private Use */ + [0xf072, 0xf072], /* Private Use */ + [0xf073, 0xf073], /* Private Use */ + [0xf074, 0xf074], /* Private Use */ + [0xf075, 0xf075], /* Private Use */ + [0xf076, 0xf076], /* Private Use */ + [0xf077, 0xf077], /* Private Use */ + [0xf078, 0xf078], /* Private Use */ + [0xf079, 0xf079], /* Private Use */ + [0xf07a, 0xf07a], /* Private Use */ + [0xf07b, 0xf07b], /* Private Use */ + [0xf07c, 0xf07c], /* Private Use */ + [0xf07d, 0xf07d], /* Private Use */ + [0xf07e, 0xf07e], /* Private Use */ + [0xf07f, 0xf07f], /* Private Use */ + [0xf080, 0xf080], /* Private Use */ + [0xf081, 0xf081], /* Private Use */ + [0xf082, 0xf082], /* Private Use */ + [0xf083, 0xf083], /* Private Use */ + [0xf084, 0xf084], /* Private Use */ + [0xf085, 0xf085], /* Private Use */ + [0xf086, 0xf086], /* Private Use */ + [0xf087, 0xf087], /* Private Use */ + [0xf088, 0xf088], /* Private Use */ + [0xf089, 0xf089], /* Private Use */ + [0xf08a, 0xf08a], /* Private Use */ + [0xf08b, 0xf08b], /* Private Use */ + [0xf08c, 0xf08c], /* Private Use */ + [0xf08d, 0xf08d], /* Private Use */ + [0xf08e, 0xf08e], /* Private Use */ + [0xf08f, 0xf08f], /* Private Use */ + [0xf090, 0xf090], /* Private Use */ + [0xf091, 0xf091], /* Private Use */ + [0xf092, 0xf092], /* Private Use */ + [0xf093, 0xf093], /* Private Use */ + [0xf094, 0xf094], /* Private Use */ + [0xf095, 0xf095], /* Private Use */ + [0xf096, 0xf096], /* Private Use */ + [0xf097, 0xf097], /* Private Use */ + [0xf098, 0xf098], /* Private Use */ + [0xf099, 0xf099], /* Private Use */ + [0xf09a, 0xf09a], /* Private Use */ + [0xf09b, 0xf09b], /* Private Use */ + [0xf09c, 0xf09c], /* Private Use */ + [0xf09d, 0xf09d], /* Private Use */ + [0xf09e, 0xf09e], /* Private Use */ + [0xf09f, 0xf09f], /* Private Use */ + [0xf0a0, 0xf0a0], /* Private Use */ + [0xf0a1, 0xf0a1], /* Private Use */ + [0xf0a2, 0xf0a2], /* Private Use */ + [0xf0a3, 0xf0a3], /* Private Use */ + [0xf0a4, 0xf0a4], /* Private Use */ + [0xf0a5, 0xf0a5], /* Private Use */ + [0xf0a6, 0xf0a6], /* Private Use */ + [0xf0a7, 0xf0a7], /* Private Use */ + [0xf0a8, 0xf0a8], /* Private Use */ + [0xf0a9, 0xf0a9], /* Private Use */ + [0xf0aa, 0xf0aa], /* Private Use */ + [0xf0ab, 0xf0ab], /* Private Use */ + [0xf0ac, 0xf0ac], /* Private Use */ + [0xf0ad, 0xf0ad], /* Private Use */ + [0xf0ae, 0xf0ae], /* Private Use */ + [0xf0af, 0xf0af], /* Private Use */ + [0xf0b0, 0xf0b0], /* Private Use */ + [0xf0b1, 0xf0b1], /* Private Use */ + [0xf0b2, 0xf0b2], /* Private Use */ + [0xf0b3, 0xf0b3], /* Private Use */ + [0xf0b4, 0xf0b4], /* Private Use */ + [0xf0b5, 0xf0b5], /* Private Use */ + [0xf0b6, 0xf0b6], /* Private Use */ + [0xf0b7, 0xf0b7], /* Private Use */ + [0xf0b8, 0xf0b8], /* Private Use */ + [0xf0b9, 0xf0b9], /* Private Use */ + [0xf0ba, 0xf0ba], /* Private Use */ + [0xf0bb, 0xf0bb], /* Private Use */ + [0xf0bc, 0xf0bc], /* Private Use */ + [0xf0bd, 0xf0bd], /* Private Use */ + [0xf0be, 0xf0be], /* Private Use */ + [0xf0bf, 0xf0bf], /* Private Use */ + [0xf0c0, 0xf0c0], /* Private Use */ + [0xf0c1, 0xf0c1], /* Private Use */ + [0xf0c2, 0xf0c2], /* Private Use */ + [0xf0c3, 0xf0c3], /* Private Use */ + [0xf0c4, 0xf0c4], /* Private Use */ + [0xf0c5, 0xf0c5], /* Private Use */ + [0xf0c6, 0xf0c6], /* Private Use */ + [0xf0c7, 0xf0c7], /* Private Use */ + [0xf0c8, 0xf0c8], /* Private Use */ + [0xf0c9, 0xf0c9], /* Private Use */ + [0xf0ca, 0xf0ca], /* Private Use */ + [0xf0cb, 0xf0cb], /* Private Use */ + [0xf0cc, 0xf0cc], /* Private Use */ + [0xf0cd, 0xf0cd], /* Private Use */ + [0xf0ce, 0xf0ce], /* Private Use */ + [0xf0cf, 0xf0cf], /* Private Use */ + [0xf0d0, 0xf0d0], /* Private Use */ + [0xf0d1, 0xf0d1], /* Private Use */ + [0xf0d2, 0xf0d2], /* Private Use */ + [0xf0d3, 0xf0d3], /* Private Use */ + [0xf0d4, 0xf0d4], /* Private Use */ + [0xf0d5, 0xf0d5], /* Private Use */ + [0xf0d6, 0xf0d6], /* Private Use */ + [0xf0d7, 0xf0d7], /* Private Use */ + [0xf0d8, 0xf0d8], /* Private Use */ + [0xf0d9, 0xf0d9], /* Private Use */ + [0xf0da, 0xf0da], /* Private Use */ + [0xf0db, 0xf0db], /* Private Use */ + [0xf0dc, 0xf0dc], /* Private Use */ + [0xf0dd, 0xf0dd], /* Private Use */ + [0xf0de, 0xf0de], /* Private Use */ + [0xf0df, 0xf0df], /* Private Use */ + [0xf0e0, 0xf0e0], /* Private Use */ + [0xf0e1, 0xf0e1], /* Private Use */ + [0xf0e2, 0xf0e2], /* Private Use */ + [0xf0e3, 0xf0e3], /* Private Use */ + [0xf0e4, 0xf0e4], /* Private Use */ + [0xf0e5, 0xf0e5], /* Private Use */ + [0xf0e6, 0xf0e6], /* Private Use */ + [0xf0e7, 0xf0e7], /* Private Use */ + [0xf0e8, 0xf0e8], /* Private Use */ + [0xf0e9, 0xf0e9], /* Private Use */ + [0xf0ea, 0xf0ea], /* Private Use */ + [0xf0eb, 0xf0eb], /* Private Use */ + [0xf0ec, 0xf0ec], /* Private Use */ + [0xf0ed, 0xf0ed], /* Private Use */ + [0xf0ee, 0xf0ee], /* Private Use */ + [0xf0ef, 0xf0ef], /* Private Use */ + [0xf0f0, 0xf0f0], /* Private Use */ + [0xf0f1, 0xf0f1], /* Private Use */ + [0xf0f2, 0xf0f2], /* Private Use */ + [0xf0f3, 0xf0f3], /* Private Use */ + [0xf0f4, 0xf0f4], /* Private Use */ + [0xf0f5, 0xf0f5], /* Private Use */ + [0xf0f6, 0xf0f6], /* Private Use */ + [0xf0f7, 0xf0f7], /* Private Use */ + [0xf0f8, 0xf0f8], /* Private Use */ + [0xf0f9, 0xf0f9], /* Private Use */ + [0xf0fa, 0xf0fa], /* Private Use */ + [0xf0fb, 0xf0fb], /* Private Use */ + [0xf0fc, 0xf0fc], /* Private Use */ + [0xf0fd, 0xf0fd], /* Private Use */ + [0xf0fe, 0xf0fe], /* Private Use */ + [0xf0ff, 0xf0ff], /* Private Use */ + [0xf100, 0xf100], /* Private Use */ + [0xf101, 0xf101], /* Private Use */ + [0xf102, 0xf102], /* Private Use */ + [0xf103, 0xf103], /* Private Use */ + [0xf104, 0xf104], /* Private Use */ + [0xf105, 0xf105], /* Private Use */ + [0xf106, 0xf106], /* Private Use */ + [0xf107, 0xf107], /* Private Use */ + [0xf108, 0xf108], /* Private Use */ + [0xf109, 0xf109], /* Private Use */ + [0xf10a, 0xf10a], /* Private Use */ + [0xf10b, 0xf10b], /* Private Use */ + [0xf10c, 0xf10c], /* Private Use */ + [0xf10d, 0xf10d], /* Private Use */ + [0xf10e, 0xf10e], /* Private Use */ + [0xf10f, 0xf10f], /* Private Use */ + [0xf110, 0xf110], /* Private Use */ + [0xf111, 0xf111], /* Private Use */ + [0xf112, 0xf112], /* Private Use */ + [0xf113, 0xf113], /* Private Use */ + [0xf114, 0xf114], /* Private Use */ + [0xf115, 0xf115], /* Private Use */ + [0xf116, 0xf116], /* Private Use */ + [0xf117, 0xf117], /* Private Use */ + [0xf118, 0xf118], /* Private Use */ + [0xf119, 0xf119], /* Private Use */ + [0xf11a, 0xf11a], /* Private Use */ + [0xf11b, 0xf11b], /* Private Use */ + [0xf11c, 0xf11c], /* Private Use */ + [0xf11d, 0xf11d], /* Private Use */ + [0xf11e, 0xf11e], /* Private Use */ + [0xf11f, 0xf11f], /* Private Use */ + [0xf120, 0xf120], /* Private Use */ + [0xf121, 0xf121], /* Private Use */ + [0xf122, 0xf122], /* Private Use */ + [0xf123, 0xf123], /* Private Use */ + [0xf124, 0xf124], /* Private Use */ + [0xf125, 0xf125], /* Private Use */ + [0xf126, 0xf126], /* Private Use */ + [0xf127, 0xf127], /* Private Use */ + [0xf128, 0xf128], /* Private Use */ + [0xf129, 0xf129], /* Private Use */ + [0xf12a, 0xf12a], /* Private Use */ + [0xf12b, 0xf12b], /* Private Use */ + [0xf12c, 0xf12c], /* Private Use */ + [0xf12d, 0xf12d], /* Private Use */ + [0xf12e, 0xf12e], /* Private Use */ + [0xf12f, 0xf12f], /* Private Use */ + [0xf130, 0xf130], /* Private Use */ + [0xf131, 0xf131], /* Private Use */ + [0xf132, 0xf132], /* Private Use */ + [0xf133, 0xf133], /* Private Use */ + [0xf134, 0xf134], /* Private Use */ + [0xf135, 0xf135], /* Private Use */ + [0xf136, 0xf136], /* Private Use */ + [0xf137, 0xf137], /* Private Use */ + [0xf138, 0xf138], /* Private Use */ + [0xf139, 0xf139], /* Private Use */ + [0xf13a, 0xf13a], /* Private Use */ + [0xf13b, 0xf13b], /* Private Use */ + [0xf13c, 0xf13c], /* Private Use */ + [0xf13d, 0xf13d], /* Private Use */ + [0xf13e, 0xf13e], /* Private Use */ + [0xf13f, 0xf13f], /* Private Use */ + [0xf140, 0xf140], /* Private Use */ + [0xf141, 0xf141], /* Private Use */ + [0xf142, 0xf142], /* Private Use */ + [0xf143, 0xf143], /* Private Use */ + [0xf144, 0xf144], /* Private Use */ + [0xf145, 0xf145], /* Private Use */ + [0xf146, 0xf146], /* Private Use */ + [0xf147, 0xf147], /* Private Use */ + [0xf148, 0xf148], /* Private Use */ + [0xf149, 0xf149], /* Private Use */ + [0xf14a, 0xf14a], /* Private Use */ + [0xf14b, 0xf14b], /* Private Use */ + [0xf14c, 0xf14c], /* Private Use */ + [0xf14d, 0xf14d], /* Private Use */ + [0xf14e, 0xf14e], /* Private Use */ + [0xf14f, 0xf14f], /* Private Use */ + [0xf150, 0xf150], /* Private Use */ + [0xf151, 0xf151], /* Private Use */ + [0xf152, 0xf152], /* Private Use */ + [0xf153, 0xf153], /* Private Use */ + [0xf154, 0xf154], /* Private Use */ + [0xf155, 0xf155], /* Private Use */ + [0xf156, 0xf156], /* Private Use */ + [0xf157, 0xf157], /* Private Use */ + [0xf158, 0xf158], /* Private Use */ + [0xf159, 0xf159], /* Private Use */ + [0xf15a, 0xf15a], /* Private Use */ + [0xf15b, 0xf15b], /* Private Use */ + [0xf15c, 0xf15c], /* Private Use */ + [0xf15d, 0xf15d], /* Private Use */ + [0xf15e, 0xf15e], /* Private Use */ + [0xf15f, 0xf15f], /* Private Use */ + [0xf160, 0xf160], /* Private Use */ + [0xf161, 0xf161], /* Private Use */ + [0xf162, 0xf162], /* Private Use */ + [0xf163, 0xf163], /* Private Use */ + [0xf164, 0xf164], /* Private Use */ + [0xf165, 0xf165], /* Private Use */ + [0xf166, 0xf166], /* Private Use */ + [0xf167, 0xf167], /* Private Use */ + [0xf168, 0xf168], /* Private Use */ + [0xf169, 0xf169], /* Private Use */ + [0xf16a, 0xf16a], /* Private Use */ + [0xf16b, 0xf16b], /* Private Use */ + [0xf16c, 0xf16c], /* Private Use */ + [0xf16d, 0xf16d], /* Private Use */ + [0xf16e, 0xf16e], /* Private Use */ + [0xf16f, 0xf16f], /* Private Use */ + [0xf170, 0xf170], /* Private Use */ + [0xf171, 0xf171], /* Private Use */ + [0xf172, 0xf172], /* Private Use */ + [0xf173, 0xf173], /* Private Use */ + [0xf174, 0xf174], /* Private Use */ + [0xf175, 0xf175], /* Private Use */ + [0xf176, 0xf176], /* Private Use */ + [0xf177, 0xf177], /* Private Use */ + [0xf178, 0xf178], /* Private Use */ + [0xf179, 0xf179], /* Private Use */ + [0xf17a, 0xf17a], /* Private Use */ + [0xf17b, 0xf17b], /* Private Use */ + [0xf17c, 0xf17c], /* Private Use */ + [0xf17d, 0xf17d], /* Private Use */ + [0xf17e, 0xf17e], /* Private Use */ + [0xf17f, 0xf17f], /* Private Use */ + [0xf180, 0xf180], /* Private Use */ + [0xf181, 0xf181], /* Private Use */ + [0xf182, 0xf182], /* Private Use */ + [0xf183, 0xf183], /* Private Use */ + [0xf184, 0xf184], /* Private Use */ + [0xf185, 0xf185], /* Private Use */ + [0xf186, 0xf186], /* Private Use */ + [0xf187, 0xf187], /* Private Use */ + [0xf188, 0xf188], /* Private Use */ + [0xf189, 0xf189], /* Private Use */ + [0xf18a, 0xf18a], /* Private Use */ + [0xf18b, 0xf18b], /* Private Use */ + [0xf18c, 0xf18c], /* Private Use */ + [0xf18d, 0xf18d], /* Private Use */ + [0xf18e, 0xf18e], /* Private Use */ + [0xf18f, 0xf18f], /* Private Use */ + [0xf190, 0xf190], /* Private Use */ + [0xf191, 0xf191], /* Private Use */ + [0xf192, 0xf192], /* Private Use */ + [0xf193, 0xf193], /* Private Use */ + [0xf194, 0xf194], /* Private Use */ + [0xf195, 0xf195], /* Private Use */ + [0xf196, 0xf196], /* Private Use */ + [0xf197, 0xf197], /* Private Use */ + [0xf198, 0xf198], /* Private Use */ + [0xf199, 0xf199], /* Private Use */ + [0xf19a, 0xf19a], /* Private Use */ + [0xf19b, 0xf19b], /* Private Use */ + [0xf19c, 0xf19c], /* Private Use */ + [0xf19d, 0xf19d], /* Private Use */ + [0xf19e, 0xf19e], /* Private Use */ + [0xf19f, 0xf19f], /* Private Use */ + [0xf1a0, 0xf1a0], /* Private Use */ + [0xf1a1, 0xf1a1], /* Private Use */ + [0xf1a2, 0xf1a2], /* Private Use */ + [0xf1a3, 0xf1a3], /* Private Use */ + [0xf1a4, 0xf1a4], /* Private Use */ + [0xf1a5, 0xf1a5], /* Private Use */ + [0xf1a6, 0xf1a6], /* Private Use */ + [0xf1a7, 0xf1a7], /* Private Use */ + [0xf1a8, 0xf1a8], /* Private Use */ + [0xf1a9, 0xf1a9], /* Private Use */ + [0xf1aa, 0xf1aa], /* Private Use */ + [0xf1ab, 0xf1ab], /* Private Use */ + [0xf1ac, 0xf1ac], /* Private Use */ + [0xf1ad, 0xf1ad], /* Private Use */ + [0xf1ae, 0xf1ae], /* Private Use */ + [0xf1af, 0xf1af], /* Private Use */ + [0xf1b0, 0xf1b0], /* Private Use */ + [0xf1b1, 0xf1b1], /* Private Use */ + [0xf1b2, 0xf1b2], /* Private Use */ + [0xf1b3, 0xf1b3], /* Private Use */ + [0xf1b4, 0xf1b4], /* Private Use */ + [0xf1b5, 0xf1b5], /* Private Use */ + [0xf1b6, 0xf1b6], /* Private Use */ + [0xf1b7, 0xf1b7], /* Private Use */ + [0xf1b8, 0xf1b8], /* Private Use */ + [0xf1b9, 0xf1b9], /* Private Use */ + [0xf1ba, 0xf1ba], /* Private Use */ + [0xf1bb, 0xf1bb], /* Private Use */ + [0xf1bc, 0xf1bc], /* Private Use */ + [0xf1bd, 0xf1bd], /* Private Use */ + [0xf1be, 0xf1be], /* Private Use */ + [0xf1bf, 0xf1bf], /* Private Use */ + [0xf1c0, 0xf1c0], /* Private Use */ + [0xf1c1, 0xf1c1], /* Private Use */ + [0xf1c2, 0xf1c2], /* Private Use */ + [0xf1c3, 0xf1c3], /* Private Use */ + [0xf1c4, 0xf1c4], /* Private Use */ + [0xf1c5, 0xf1c5], /* Private Use */ + [0xf1c6, 0xf1c6], /* Private Use */ + [0xf1c7, 0xf1c7], /* Private Use */ + [0xf1c8, 0xf1c8], /* Private Use */ + [0xf1c9, 0xf1c9], /* Private Use */ + [0xf1ca, 0xf1ca], /* Private Use */ + [0xf1cb, 0xf1cb], /* Private Use */ + [0xf1cc, 0xf1cc], /* Private Use */ + [0xf1cd, 0xf1cd], /* Private Use */ + [0xf1ce, 0xf1ce], /* Private Use */ + [0xf1cf, 0xf1cf], /* Private Use */ + [0xf1d0, 0xf1d0], /* Private Use */ + [0xf1d1, 0xf1d1], /* Private Use */ + [0xf1d2, 0xf1d2], /* Private Use */ + [0xf1d3, 0xf1d3], /* Private Use */ + [0xf1d4, 0xf1d4], /* Private Use */ + [0xf1d5, 0xf1d5], /* Private Use */ + [0xf1d6, 0xf1d6], /* Private Use */ + [0xf1d7, 0xf1d7], /* Private Use */ + [0xf1d8, 0xf1d8], /* Private Use */ + [0xf1d9, 0xf1d9], /* Private Use */ + [0xf1da, 0xf1da], /* Private Use */ + [0xf1db, 0xf1db], /* Private Use */ + [0xf1dc, 0xf1dc], /* Private Use */ + [0xf1dd, 0xf1dd], /* Private Use */ + [0xf1de, 0xf1de], /* Private Use */ + [0xf1df, 0xf1df], /* Private Use */ + [0xf1e0, 0xf1e0], /* Private Use */ + [0xf1e1, 0xf1e1], /* Private Use */ + [0xf1e2, 0xf1e2], /* Private Use */ + [0xf1e3, 0xf1e3], /* Private Use */ + [0xf1e4, 0xf1e4], /* Private Use */ + [0xf1e5, 0xf1e5], /* Private Use */ + [0xf1e6, 0xf1e6], /* Private Use */ + [0xf1e7, 0xf1e7], /* Private Use */ + [0xf1e8, 0xf1e8], /* Private Use */ + [0xf1e9, 0xf1e9], /* Private Use */ + [0xf1ea, 0xf1ea], /* Private Use */ + [0xf1eb, 0xf1eb], /* Private Use */ + [0xf1ec, 0xf1ec], /* Private Use */ + [0xf1ed, 0xf1ed], /* Private Use */ + [0xf1ee, 0xf1ee], /* Private Use */ + [0xf1ef, 0xf1ef], /* Private Use */ + [0xf1f0, 0xf1f0], /* Private Use */ + [0xf1f1, 0xf1f1], /* Private Use */ + [0xf1f2, 0xf1f2], /* Private Use */ + [0xf1f3, 0xf1f3], /* Private Use */ + [0xf1f4, 0xf1f4], /* Private Use */ + [0xf1f5, 0xf1f5], /* Private Use */ + [0xf1f6, 0xf1f6], /* Private Use */ + [0xf1f7, 0xf1f7], /* Private Use */ + [0xf1f8, 0xf1f8], /* Private Use */ + [0xf1f9, 0xf1f9], /* Private Use */ + [0xf1fa, 0xf1fa], /* Private Use */ + [0xf1fb, 0xf1fb], /* Private Use */ + [0xf1fc, 0xf1fc], /* Private Use */ + [0xf1fd, 0xf1fd], /* Private Use */ + [0xf1fe, 0xf1fe], /* Private Use */ + [0xf1ff, 0xf1ff], /* Private Use */ + [0xf200, 0xf200], /* Private Use */ + [0xf201, 0xf201], /* Private Use */ + [0xf202, 0xf202], /* Private Use */ + [0xf203, 0xf203], /* Private Use */ + [0xf204, 0xf204], /* Private Use */ + [0xf205, 0xf205], /* Private Use */ + [0xf206, 0xf206], /* Private Use */ + [0xf207, 0xf207], /* Private Use */ + [0xf208, 0xf208], /* Private Use */ + [0xf209, 0xf209], /* Private Use */ + [0xf20a, 0xf20a], /* Private Use */ + [0xf20b, 0xf20b], /* Private Use */ + [0xf20c, 0xf20c], /* Private Use */ + [0xf20d, 0xf20d], /* Private Use */ + [0xf20e, 0xf20e], /* Private Use */ + [0xf20f, 0xf20f], /* Private Use */ + [0xf210, 0xf210], /* Private Use */ + [0xf211, 0xf211], /* Private Use */ + [0xf212, 0xf212], /* Private Use */ + [0xf213, 0xf213], /* Private Use */ + [0xf214, 0xf214], /* Private Use */ + [0xf215, 0xf215], /* Private Use */ + [0xf216, 0xf216], /* Private Use */ + [0xf217, 0xf217], /* Private Use */ + [0xf218, 0xf218], /* Private Use */ + [0xf219, 0xf219], /* Private Use */ + [0xf21a, 0xf21a], /* Private Use */ + [0xf21b, 0xf21b], /* Private Use */ + [0xf21c, 0xf21c], /* Private Use */ + [0xf21d, 0xf21d], /* Private Use */ + [0xf21e, 0xf21e], /* Private Use */ + [0xf21f, 0xf21f], /* Private Use */ + [0xf220, 0xf220], /* Private Use */ + [0xf221, 0xf221], /* Private Use */ + [0xf222, 0xf222], /* Private Use */ + [0xf223, 0xf223], /* Private Use */ + [0xf224, 0xf224], /* Private Use */ + [0xf225, 0xf225], /* Private Use */ + [0xf226, 0xf226], /* Private Use */ + [0xf227, 0xf227], /* Private Use */ + [0xf228, 0xf228], /* Private Use */ + [0xf229, 0xf229], /* Private Use */ + [0xf22a, 0xf22a], /* Private Use */ + [0xf22b, 0xf22b], /* Private Use */ + [0xf22c, 0xf22c], /* Private Use */ + [0xf22d, 0xf22d], /* Private Use */ + [0xf22e, 0xf22e], /* Private Use */ + [0xf22f, 0xf22f], /* Private Use */ + [0xf230, 0xf230], /* Private Use */ + [0xf231, 0xf231], /* Private Use */ + [0xf232, 0xf232], /* Private Use */ + [0xf233, 0xf233], /* Private Use */ + [0xf234, 0xf234], /* Private Use */ + [0xf235, 0xf235], /* Private Use */ + [0xf236, 0xf236], /* Private Use */ + [0xf237, 0xf237], /* Private Use */ + [0xf238, 0xf238], /* Private Use */ + [0xf239, 0xf239], /* Private Use */ + [0xf23a, 0xf23a], /* Private Use */ + [0xf23b, 0xf23b], /* Private Use */ + [0xf23c, 0xf23c], /* Private Use */ + [0xf23d, 0xf23d], /* Private Use */ + [0xf23e, 0xf23e], /* Private Use */ + [0xf23f, 0xf23f], /* Private Use */ + [0xf240, 0xf240], /* Private Use */ + [0xf241, 0xf241], /* Private Use */ + [0xf242, 0xf242], /* Private Use */ + [0xf243, 0xf243], /* Private Use */ + [0xf244, 0xf244], /* Private Use */ + [0xf245, 0xf245], /* Private Use */ + [0xf246, 0xf246], /* Private Use */ + [0xf247, 0xf247], /* Private Use */ + [0xf248, 0xf248], /* Private Use */ + [0xf249, 0xf249], /* Private Use */ + [0xf24a, 0xf24a], /* Private Use */ + [0xf24b, 0xf24b], /* Private Use */ + [0xf24c, 0xf24c], /* Private Use */ + [0xf24d, 0xf24d], /* Private Use */ + [0xf24e, 0xf24e], /* Private Use */ + [0xf24f, 0xf24f], /* Private Use */ + [0xf250, 0xf250], /* Private Use */ + [0xf251, 0xf251], /* Private Use */ + [0xf252, 0xf252], /* Private Use */ + [0xf253, 0xf253], /* Private Use */ + [0xf254, 0xf254], /* Private Use */ + [0xf255, 0xf255], /* Private Use */ + [0xf256, 0xf256], /* Private Use */ + [0xf257, 0xf257], /* Private Use */ + [0xf258, 0xf258], /* Private Use */ + [0xf259, 0xf259], /* Private Use */ + [0xf25a, 0xf25a], /* Private Use */ + [0xf25b, 0xf25b], /* Private Use */ + [0xf25c, 0xf25c], /* Private Use */ + [0xf25d, 0xf25d], /* Private Use */ + [0xf25e, 0xf25e], /* Private Use */ + [0xf25f, 0xf25f], /* Private Use */ + [0xf260, 0xf260], /* Private Use */ + [0xf261, 0xf261], /* Private Use */ + [0xf262, 0xf262], /* Private Use */ + [0xf263, 0xf263], /* Private Use */ + [0xf264, 0xf264], /* Private Use */ + [0xf265, 0xf265], /* Private Use */ + [0xf266, 0xf266], /* Private Use */ + [0xf267, 0xf267], /* Private Use */ + [0xf268, 0xf268], /* Private Use */ + [0xf269, 0xf269], /* Private Use */ + [0xf26a, 0xf26a], /* Private Use */ + [0xf26b, 0xf26b], /* Private Use */ + [0xf26c, 0xf26c], /* Private Use */ + [0xf26d, 0xf26d], /* Private Use */ + [0xf26e, 0xf26e], /* Private Use */ + [0xf26f, 0xf26f], /* Private Use */ + [0xf270, 0xf270], /* Private Use */ + [0xf271, 0xf271], /* Private Use */ + [0xf272, 0xf272], /* Private Use */ + [0xf273, 0xf273], /* Private Use */ + [0xf274, 0xf274], /* Private Use */ + [0xf275, 0xf275], /* Private Use */ + [0xf276, 0xf276], /* Private Use */ + [0xf277, 0xf277], /* Private Use */ + [0xf278, 0xf278], /* Private Use */ + [0xf279, 0xf279], /* Private Use */ + [0xf27a, 0xf27a], /* Private Use */ + [0xf27b, 0xf27b], /* Private Use */ + [0xf27c, 0xf27c], /* Private Use */ + [0xf27d, 0xf27d], /* Private Use */ + [0xf27e, 0xf27e], /* Private Use */ + [0xf27f, 0xf27f], /* Private Use */ + [0xf280, 0xf280], /* Private Use */ + [0xf281, 0xf281], /* Private Use */ + [0xf282, 0xf282], /* Private Use */ + [0xf283, 0xf283], /* Private Use */ + [0xf284, 0xf284], /* Private Use */ + [0xf285, 0xf285], /* Private Use */ + [0xf286, 0xf286], /* Private Use */ + [0xf287, 0xf287], /* Private Use */ + [0xf288, 0xf288], /* Private Use */ + [0xf289, 0xf289], /* Private Use */ + [0xf28a, 0xf28a], /* Private Use */ + [0xf28b, 0xf28b], /* Private Use */ + [0xf28c, 0xf28c], /* Private Use */ + [0xf28d, 0xf28d], /* Private Use */ + [0xf28e, 0xf28e], /* Private Use */ + [0xf28f, 0xf28f], /* Private Use */ + [0xf290, 0xf290], /* Private Use */ + [0xf291, 0xf291], /* Private Use */ + [0xf292, 0xf292], /* Private Use */ + [0xf293, 0xf293], /* Private Use */ + [0xf294, 0xf294], /* Private Use */ + [0xf295, 0xf295], /* Private Use */ + [0xf296, 0xf296], /* Private Use */ + [0xf297, 0xf297], /* Private Use */ + [0xf298, 0xf298], /* Private Use */ + [0xf299, 0xf299], /* Private Use */ + [0xf29a, 0xf29a], /* Private Use */ + [0xf29b, 0xf29b], /* Private Use */ + [0xf29c, 0xf29c], /* Private Use */ + [0xf29d, 0xf29d], /* Private Use */ + [0xf29e, 0xf29e], /* Private Use */ + [0xf29f, 0xf29f], /* Private Use */ + [0xf2a0, 0xf2a0], /* Private Use */ + [0xf2a1, 0xf2a1], /* Private Use */ + [0xf2a2, 0xf2a2], /* Private Use */ + [0xf2a3, 0xf2a3], /* Private Use */ + [0xf2a4, 0xf2a4], /* Private Use */ + [0xf2a5, 0xf2a5], /* Private Use */ + [0xf2a6, 0xf2a6], /* Private Use */ + [0xf2a7, 0xf2a7], /* Private Use */ + [0xf2a8, 0xf2a8], /* Private Use */ + [0xf2a9, 0xf2a9], /* Private Use */ + [0xf2aa, 0xf2aa], /* Private Use */ + [0xf2ab, 0xf2ab], /* Private Use */ + [0xf2ac, 0xf2ac], /* Private Use */ + [0xf2ad, 0xf2ad], /* Private Use */ + [0xf2ae, 0xf2ae], /* Private Use */ + [0xf2af, 0xf2af], /* Private Use */ + [0xf2b0, 0xf2b0], /* Private Use */ + [0xf2b1, 0xf2b1], /* Private Use */ + [0xf2b2, 0xf2b2], /* Private Use */ + [0xf2b3, 0xf2b3], /* Private Use */ + [0xf2b4, 0xf2b4], /* Private Use */ + [0xf2b5, 0xf2b5], /* Private Use */ + [0xf2b6, 0xf2b6], /* Private Use */ + [0xf2b7, 0xf2b7], /* Private Use */ + [0xf2b8, 0xf2b8], /* Private Use */ + [0xf2b9, 0xf2b9], /* Private Use */ + [0xf2ba, 0xf2ba], /* Private Use */ + [0xf2bb, 0xf2bb], /* Private Use */ + [0xf2bc, 0xf2bc], /* Private Use */ + [0xf2bd, 0xf2bd], /* Private Use */ + [0xf2be, 0xf2be], /* Private Use */ + [0xf2bf, 0xf2bf], /* Private Use */ + [0xf2c0, 0xf2c0], /* Private Use */ + [0xf2c1, 0xf2c1], /* Private Use */ + [0xf2c2, 0xf2c2], /* Private Use */ + [0xf2c3, 0xf2c3], /* Private Use */ + [0xf2c4, 0xf2c4], /* Private Use */ + [0xf2c5, 0xf2c5], /* Private Use */ + [0xf2c6, 0xf2c6], /* Private Use */ + [0xf2c7, 0xf2c7], /* Private Use */ + [0xf2c8, 0xf2c8], /* Private Use */ + [0xf2c9, 0xf2c9], /* Private Use */ + [0xf2ca, 0xf2ca], /* Private Use */ + [0xf2cb, 0xf2cb], /* Private Use */ + [0xf2cc, 0xf2cc], /* Private Use */ + [0xf2cd, 0xf2cd], /* Private Use */ + [0xf2ce, 0xf2ce], /* Private Use */ + [0xf2cf, 0xf2cf], /* Private Use */ + [0xf2d0, 0xf2d0], /* Private Use */ + [0xf2d1, 0xf2d1], /* Private Use */ + [0xf2d2, 0xf2d2], /* Private Use */ + [0xf2d3, 0xf2d3], /* Private Use */ + [0xf2d4, 0xf2d4], /* Private Use */ + [0xf2d5, 0xf2d5], /* Private Use */ + [0xf2d6, 0xf2d6], /* Private Use */ + [0xf2d7, 0xf2d7], /* Private Use */ + [0xf2d8, 0xf2d8], /* Private Use */ + [0xf2d9, 0xf2d9], /* Private Use */ + [0xf2da, 0xf2da], /* Private Use */ + [0xf2db, 0xf2db], /* Private Use */ + [0xf2dc, 0xf2dc], /* Private Use */ + [0xf2dd, 0xf2dd], /* Private Use */ + [0xf2de, 0xf2de], /* Private Use */ + [0xf2df, 0xf2df], /* Private Use */ + [0xf2e0, 0xf2e0], /* Private Use */ + [0xf2e1, 0xf2e1], /* Private Use */ + [0xf2e2, 0xf2e2], /* Private Use */ + [0xf2e3, 0xf2e3], /* Private Use */ + [0xf2e4, 0xf2e4], /* Private Use */ + [0xf2e5, 0xf2e5], /* Private Use */ + [0xf2e6, 0xf2e6], /* Private Use */ + [0xf2e7, 0xf2e7], /* Private Use */ + [0xf2e8, 0xf2e8], /* Private Use */ + [0xf2e9, 0xf2e9], /* Private Use */ + [0xf2ea, 0xf2ea], /* Private Use */ + [0xf2eb, 0xf2eb], /* Private Use */ + [0xf2ec, 0xf2ec], /* Private Use */ + [0xf2ed, 0xf2ed], /* Private Use */ + [0xf2ee, 0xf2ee], /* Private Use */ + [0xf2ef, 0xf2ef], /* Private Use */ + [0xf2f0, 0xf2f0], /* Private Use */ + [0xf2f1, 0xf2f1], /* Private Use */ + [0xf2f2, 0xf2f2], /* Private Use */ + [0xf2f3, 0xf2f3], /* Private Use */ + [0xf2f4, 0xf2f4], /* Private Use */ + [0xf2f5, 0xf2f5], /* Private Use */ + [0xf2f6, 0xf2f6], /* Private Use */ + [0xf2f7, 0xf2f7], /* Private Use */ + [0xf2f8, 0xf2f8], /* Private Use */ + [0xf2f9, 0xf2f9], /* Private Use */ + [0xf2fa, 0xf2fa], /* Private Use */ + [0xf2fb, 0xf2fb], /* Private Use */ + [0xf2fc, 0xf2fc], /* Private Use */ + [0xf2fd, 0xf2fd], /* Private Use */ + [0xf2fe, 0xf2fe], /* Private Use */ + [0xf2ff, 0xf2ff], /* Private Use */ + [0xf300, 0xf300], /* Private Use */ + [0xf301, 0xf301], /* Private Use */ + [0xf302, 0xf302], /* Private Use */ + [0xf303, 0xf303], /* Private Use */ + [0xf304, 0xf304], /* Private Use */ + [0xf305, 0xf305], /* Private Use */ + [0xf306, 0xf306], /* Private Use */ + [0xf307, 0xf307], /* Private Use */ + [0xf308, 0xf308], /* Private Use */ + [0xf309, 0xf309], /* Private Use */ + [0xf30a, 0xf30a], /* Private Use */ + [0xf30b, 0xf30b], /* Private Use */ + [0xf30c, 0xf30c], /* Private Use */ + [0xf30d, 0xf30d], /* Private Use */ + [0xf30e, 0xf30e], /* Private Use */ + [0xf30f, 0xf30f], /* Private Use */ + [0xf310, 0xf310], /* Private Use */ + [0xf311, 0xf311], /* Private Use */ + [0xf312, 0xf312], /* Private Use */ + [0xf313, 0xf313], /* Private Use */ + [0xf314, 0xf314], /* Private Use */ + [0xf315, 0xf315], /* Private Use */ + [0xf316, 0xf316], /* Private Use */ + [0xf317, 0xf317], /* Private Use */ + [0xf318, 0xf318], /* Private Use */ + [0xf319, 0xf319], /* Private Use */ + [0xf31a, 0xf31a], /* Private Use */ + [0xf31b, 0xf31b], /* Private Use */ + [0xf31c, 0xf31c], /* Private Use */ + [0xf31d, 0xf31d], /* Private Use */ + [0xf31e, 0xf31e], /* Private Use */ + [0xf31f, 0xf31f], /* Private Use */ + [0xf320, 0xf320], /* Private Use */ + [0xf321, 0xf321], /* Private Use */ + [0xf322, 0xf322], /* Private Use */ + [0xf323, 0xf323], /* Private Use */ + [0xf324, 0xf324], /* Private Use */ + [0xf325, 0xf325], /* Private Use */ + [0xf326, 0xf326], /* Private Use */ + [0xf327, 0xf327], /* Private Use */ + [0xf328, 0xf328], /* Private Use */ + [0xf329, 0xf329], /* Private Use */ + [0xf32a, 0xf32a], /* Private Use */ + [0xf32b, 0xf32b], /* Private Use */ + [0xf32c, 0xf32c], /* Private Use */ + [0xf32d, 0xf32d], /* Private Use */ + [0xf32e, 0xf32e], /* Private Use */ + [0xf32f, 0xf32f], /* Private Use */ + [0xf330, 0xf330], /* Private Use */ + [0xf331, 0xf331], /* Private Use */ + [0xf332, 0xf332], /* Private Use */ + [0xf333, 0xf333], /* Private Use */ + [0xf334, 0xf334], /* Private Use */ + [0xf335, 0xf335], /* Private Use */ + [0xf336, 0xf336], /* Private Use */ + [0xf337, 0xf337], /* Private Use */ + [0xf338, 0xf338], /* Private Use */ + [0xf339, 0xf339], /* Private Use */ + [0xf33a, 0xf33a], /* Private Use */ + [0xf33b, 0xf33b], /* Private Use */ + [0xf33c, 0xf33c], /* Private Use */ + [0xf33d, 0xf33d], /* Private Use */ + [0xf33e, 0xf33e], /* Private Use */ + [0xf33f, 0xf33f], /* Private Use */ + [0xf340, 0xf340], /* Private Use */ + [0xf341, 0xf341], /* Private Use */ + [0xf342, 0xf342], /* Private Use */ + [0xf343, 0xf343], /* Private Use */ + [0xf344, 0xf344], /* Private Use */ + [0xf345, 0xf345], /* Private Use */ + [0xf346, 0xf346], /* Private Use */ + [0xf347, 0xf347], /* Private Use */ + [0xf348, 0xf348], /* Private Use */ + [0xf349, 0xf349], /* Private Use */ + [0xf34a, 0xf34a], /* Private Use */ + [0xf34b, 0xf34b], /* Private Use */ + [0xf34c, 0xf34c], /* Private Use */ + [0xf34d, 0xf34d], /* Private Use */ + [0xf34e, 0xf34e], /* Private Use */ + [0xf34f, 0xf34f], /* Private Use */ + [0xf350, 0xf350], /* Private Use */ + [0xf351, 0xf351], /* Private Use */ + [0xf352, 0xf352], /* Private Use */ + [0xf353, 0xf353], /* Private Use */ + [0xf354, 0xf354], /* Private Use */ + [0xf355, 0xf355], /* Private Use */ + [0xf356, 0xf356], /* Private Use */ + [0xf357, 0xf357], /* Private Use */ + [0xf358, 0xf358], /* Private Use */ + [0xf359, 0xf359], /* Private Use */ + [0xf35a, 0xf35a], /* Private Use */ + [0xf35b, 0xf35b], /* Private Use */ + [0xf35c, 0xf35c], /* Private Use */ + [0xf35d, 0xf35d], /* Private Use */ + [0xf35e, 0xf35e], /* Private Use */ + [0xf35f, 0xf35f], /* Private Use */ + [0xf360, 0xf360], /* Private Use */ + [0xf361, 0xf361], /* Private Use */ + [0xf362, 0xf362], /* Private Use */ + [0xf363, 0xf363], /* Private Use */ + [0xf364, 0xf364], /* Private Use */ + [0xf365, 0xf365], /* Private Use */ + [0xf366, 0xf366], /* Private Use */ + [0xf367, 0xf367], /* Private Use */ + [0xf368, 0xf368], /* Private Use */ + [0xf369, 0xf369], /* Private Use */ + [0xf36a, 0xf36a], /* Private Use */ + [0xf36b, 0xf36b], /* Private Use */ + [0xf36c, 0xf36c], /* Private Use */ + [0xf36d, 0xf36d], /* Private Use */ + [0xf36e, 0xf36e], /* Private Use */ + [0xf36f, 0xf36f], /* Private Use */ + [0xf370, 0xf370], /* Private Use */ + [0xf371, 0xf371], /* Private Use */ + [0xf372, 0xf372], /* Private Use */ + [0xf373, 0xf373], /* Private Use */ + [0xf374, 0xf374], /* Private Use */ + [0xf375, 0xf375], /* Private Use */ + [0xf376, 0xf376], /* Private Use */ + [0xf377, 0xf377], /* Private Use */ + [0xf378, 0xf378], /* Private Use */ + [0xf379, 0xf379], /* Private Use */ + [0xf37a, 0xf37a], /* Private Use */ + [0xf37b, 0xf37b], /* Private Use */ + [0xf37c, 0xf37c], /* Private Use */ + [0xf37d, 0xf37d], /* Private Use */ + [0xf37e, 0xf37e], /* Private Use */ + [0xf37f, 0xf37f], /* Private Use */ + [0xf380, 0xf380], /* Private Use */ + [0xf381, 0xf381], /* Private Use */ + [0xf382, 0xf382], /* Private Use */ + [0xf383, 0xf383], /* Private Use */ + [0xf384, 0xf384], /* Private Use */ + [0xf385, 0xf385], /* Private Use */ + [0xf386, 0xf386], /* Private Use */ + [0xf387, 0xf387], /* Private Use */ + [0xf388, 0xf388], /* Private Use */ + [0xf389, 0xf389], /* Private Use */ + [0xf38a, 0xf38a], /* Private Use */ + [0xf38b, 0xf38b], /* Private Use */ + [0xf38c, 0xf38c], /* Private Use */ + [0xf38d, 0xf38d], /* Private Use */ + [0xf38e, 0xf38e], /* Private Use */ + [0xf38f, 0xf38f], /* Private Use */ + [0xf390, 0xf390], /* Private Use */ + [0xf391, 0xf391], /* Private Use */ + [0xf392, 0xf392], /* Private Use */ + [0xf393, 0xf393], /* Private Use */ + [0xf394, 0xf394], /* Private Use */ + [0xf395, 0xf395], /* Private Use */ + [0xf396, 0xf396], /* Private Use */ + [0xf397, 0xf397], /* Private Use */ + [0xf398, 0xf398], /* Private Use */ + [0xf399, 0xf399], /* Private Use */ + [0xf39a, 0xf39a], /* Private Use */ + [0xf39b, 0xf39b], /* Private Use */ + [0xf39c, 0xf39c], /* Private Use */ + [0xf39d, 0xf39d], /* Private Use */ + [0xf39e, 0xf39e], /* Private Use */ + [0xf39f, 0xf39f], /* Private Use */ + [0xf3a0, 0xf3a0], /* Private Use */ + [0xf3a1, 0xf3a1], /* Private Use */ + [0xf3a2, 0xf3a2], /* Private Use */ + [0xf3a3, 0xf3a3], /* Private Use */ + [0xf3a4, 0xf3a4], /* Private Use */ + [0xf3a5, 0xf3a5], /* Private Use */ + [0xf3a6, 0xf3a6], /* Private Use */ + [0xf3a7, 0xf3a7], /* Private Use */ + [0xf3a8, 0xf3a8], /* Private Use */ + [0xf3a9, 0xf3a9], /* Private Use */ + [0xf3aa, 0xf3aa], /* Private Use */ + [0xf3ab, 0xf3ab], /* Private Use */ + [0xf3ac, 0xf3ac], /* Private Use */ + [0xf3ad, 0xf3ad], /* Private Use */ + [0xf3ae, 0xf3ae], /* Private Use */ + [0xf3af, 0xf3af], /* Private Use */ + [0xf3b0, 0xf3b0], /* Private Use */ + [0xf3b1, 0xf3b1], /* Private Use */ + [0xf3b2, 0xf3b2], /* Private Use */ + [0xf3b3, 0xf3b3], /* Private Use */ + [0xf3b4, 0xf3b4], /* Private Use */ + [0xf3b5, 0xf3b5], /* Private Use */ + [0xf3b6, 0xf3b6], /* Private Use */ + [0xf3b7, 0xf3b7], /* Private Use */ + [0xf3b8, 0xf3b8], /* Private Use */ + [0xf3b9, 0xf3b9], /* Private Use */ + [0xf3ba, 0xf3ba], /* Private Use */ + [0xf3bb, 0xf3bb], /* Private Use */ + [0xf3bc, 0xf3bc], /* Private Use */ + [0xf3bd, 0xf3bd], /* Private Use */ + [0xf3be, 0xf3be], /* Private Use */ + [0xf3bf, 0xf3bf], /* Private Use */ + [0xf3c0, 0xf3c0], /* Private Use */ + [0xf3c1, 0xf3c1], /* Private Use */ + [0xf3c2, 0xf3c2], /* Private Use */ + [0xf3c3, 0xf3c3], /* Private Use */ + [0xf3c4, 0xf3c4], /* Private Use */ + [0xf3c5, 0xf3c5], /* Private Use */ + [0xf3c6, 0xf3c6], /* Private Use */ + [0xf3c7, 0xf3c7], /* Private Use */ + [0xf3c8, 0xf3c8], /* Private Use */ + [0xf3c9, 0xf3c9], /* Private Use */ + [0xf3ca, 0xf3ca], /* Private Use */ + [0xf3cb, 0xf3cb], /* Private Use */ + [0xf3cc, 0xf3cc], /* Private Use */ + [0xf3cd, 0xf3cd], /* Private Use */ + [0xf3ce, 0xf3ce], /* Private Use */ + [0xf3cf, 0xf3cf], /* Private Use */ + [0xf3d0, 0xf3d0], /* Private Use */ + [0xf3d1, 0xf3d1], /* Private Use */ + [0xf3d2, 0xf3d2], /* Private Use */ + [0xf3d3, 0xf3d3], /* Private Use */ + [0xf3d4, 0xf3d4], /* Private Use */ + [0xf3d5, 0xf3d5], /* Private Use */ + [0xf3d6, 0xf3d6], /* Private Use */ + [0xf3d7, 0xf3d7], /* Private Use */ + [0xf3d8, 0xf3d8], /* Private Use */ + [0xf3d9, 0xf3d9], /* Private Use */ + [0xf3da, 0xf3da], /* Private Use */ + [0xf3db, 0xf3db], /* Private Use */ + [0xf3dc, 0xf3dc], /* Private Use */ + [0xf3dd, 0xf3dd], /* Private Use */ + [0xf3de, 0xf3de], /* Private Use */ + [0xf3df, 0xf3df], /* Private Use */ + [0xf3e0, 0xf3e0], /* Private Use */ + [0xf3e1, 0xf3e1], /* Private Use */ + [0xf3e2, 0xf3e2], /* Private Use */ + [0xf3e3, 0xf3e3], /* Private Use */ + [0xf3e4, 0xf3e4], /* Private Use */ + [0xf3e5, 0xf3e5], /* Private Use */ + [0xf3e6, 0xf3e6], /* Private Use */ + [0xf3e7, 0xf3e7], /* Private Use */ + [0xf3e8, 0xf3e8], /* Private Use */ + [0xf3e9, 0xf3e9], /* Private Use */ + [0xf3ea, 0xf3ea], /* Private Use */ + [0xf3eb, 0xf3eb], /* Private Use */ + [0xf3ec, 0xf3ec], /* Private Use */ + [0xf3ed, 0xf3ed], /* Private Use */ + [0xf3ee, 0xf3ee], /* Private Use */ + [0xf3ef, 0xf3ef], /* Private Use */ + [0xf3f0, 0xf3f0], /* Private Use */ + [0xf3f1, 0xf3f1], /* Private Use */ + [0xf3f2, 0xf3f2], /* Private Use */ + [0xf3f3, 0xf3f3], /* Private Use */ + [0xf3f4, 0xf3f4], /* Private Use */ + [0xf3f5, 0xf3f5], /* Private Use */ + [0xf3f6, 0xf3f6], /* Private Use */ + [0xf3f7, 0xf3f7], /* Private Use */ + [0xf3f8, 0xf3f8], /* Private Use */ + [0xf3f9, 0xf3f9], /* Private Use */ + [0xf3fa, 0xf3fa], /* Private Use */ + [0xf3fb, 0xf3fb], /* Private Use */ + [0xf3fc, 0xf3fc], /* Private Use */ + [0xf3fd, 0xf3fd], /* Private Use */ + [0xf3fe, 0xf3fe], /* Private Use */ + [0xf3ff, 0xf3ff], /* Private Use */ + [0xf400, 0xf400], /* Private Use */ + [0xf401, 0xf401], /* Private Use */ + [0xf402, 0xf402], /* Private Use */ + [0xf403, 0xf403], /* Private Use */ + [0xf404, 0xf404], /* Private Use */ + [0xf405, 0xf405], /* Private Use */ + [0xf406, 0xf406], /* Private Use */ + [0xf407, 0xf407], /* Private Use */ + [0xf408, 0xf408], /* Private Use */ + [0xf409, 0xf409], /* Private Use */ + [0xf40a, 0xf40a], /* Private Use */ + [0xf40b, 0xf40b], /* Private Use */ + [0xf40c, 0xf40c], /* Private Use */ + [0xf40d, 0xf40d], /* Private Use */ + [0xf40e, 0xf40e], /* Private Use */ + [0xf40f, 0xf40f], /* Private Use */ + [0xf410, 0xf410], /* Private Use */ + [0xf411, 0xf411], /* Private Use */ + [0xf412, 0xf412], /* Private Use */ + [0xf413, 0xf413], /* Private Use */ + [0xf414, 0xf414], /* Private Use */ + [0xf415, 0xf415], /* Private Use */ + [0xf416, 0xf416], /* Private Use */ + [0xf417, 0xf417], /* Private Use */ + [0xf418, 0xf418], /* Private Use */ + [0xf419, 0xf419], /* Private Use */ + [0xf41a, 0xf41a], /* Private Use */ + [0xf41b, 0xf41b], /* Private Use */ + [0xf41c, 0xf41c], /* Private Use */ + [0xf41d, 0xf41d], /* Private Use */ + [0xf41e, 0xf41e], /* Private Use */ + [0xf41f, 0xf41f], /* Private Use */ + [0xf420, 0xf420], /* Private Use */ + [0xf421, 0xf421], /* Private Use */ + [0xf422, 0xf422], /* Private Use */ + [0xf423, 0xf423], /* Private Use */ + [0xf424, 0xf424], /* Private Use */ + [0xf425, 0xf425], /* Private Use */ + [0xf426, 0xf426], /* Private Use */ + [0xf427, 0xf427], /* Private Use */ + [0xf428, 0xf428], /* Private Use */ + [0xf429, 0xf429], /* Private Use */ + [0xf42a, 0xf42a], /* Private Use */ + [0xf42b, 0xf42b], /* Private Use */ + [0xf42c, 0xf42c], /* Private Use */ + [0xf42d, 0xf42d], /* Private Use */ + [0xf42e, 0xf42e], /* Private Use */ + [0xf42f, 0xf42f], /* Private Use */ + [0xf430, 0xf430], /* Private Use */ + [0xf431, 0xf431], /* Private Use */ + [0xf432, 0xf432], /* Private Use */ + [0xf433, 0xf433], /* Private Use */ + [0xf434, 0xf434], /* Private Use */ + [0xf435, 0xf435], /* Private Use */ + [0xf436, 0xf436], /* Private Use */ + [0xf437, 0xf437], /* Private Use */ + [0xf438, 0xf438], /* Private Use */ + [0xf439, 0xf439], /* Private Use */ + [0xf43a, 0xf43a], /* Private Use */ + [0xf43b, 0xf43b], /* Private Use */ + [0xf43c, 0xf43c], /* Private Use */ + [0xf43d, 0xf43d], /* Private Use */ + [0xf43e, 0xf43e], /* Private Use */ + [0xf43f, 0xf43f], /* Private Use */ + [0xf440, 0xf440], /* Private Use */ + [0xf441, 0xf441], /* Private Use */ + [0xf442, 0xf442], /* Private Use */ + [0xf443, 0xf443], /* Private Use */ + [0xf444, 0xf444], /* Private Use */ + [0xf445, 0xf445], /* Private Use */ + [0xf446, 0xf446], /* Private Use */ + [0xf447, 0xf447], /* Private Use */ + [0xf448, 0xf448], /* Private Use */ + [0xf449, 0xf449], /* Private Use */ + [0xf44a, 0xf44a], /* Private Use */ + [0xf44b, 0xf44b], /* Private Use */ + [0xf44c, 0xf44c], /* Private Use */ + [0xf44d, 0xf44d], /* Private Use */ + [0xf44e, 0xf44e], /* Private Use */ + [0xf44f, 0xf44f], /* Private Use */ + [0xf450, 0xf450], /* Private Use */ + [0xf451, 0xf451], /* Private Use */ + [0xf452, 0xf452], /* Private Use */ + [0xf453, 0xf453], /* Private Use */ + [0xf454, 0xf454], /* Private Use */ + [0xf455, 0xf455], /* Private Use */ + [0xf456, 0xf456], /* Private Use */ + [0xf457, 0xf457], /* Private Use */ + [0xf458, 0xf458], /* Private Use */ + [0xf459, 0xf459], /* Private Use */ + [0xf45a, 0xf45a], /* Private Use */ + [0xf45b, 0xf45b], /* Private Use */ + [0xf45c, 0xf45c], /* Private Use */ + [0xf45d, 0xf45d], /* Private Use */ + [0xf45e, 0xf45e], /* Private Use */ + [0xf45f, 0xf45f], /* Private Use */ + [0xf460, 0xf460], /* Private Use */ + [0xf461, 0xf461], /* Private Use */ + [0xf462, 0xf462], /* Private Use */ + [0xf463, 0xf463], /* Private Use */ + [0xf464, 0xf464], /* Private Use */ + [0xf465, 0xf465], /* Private Use */ + [0xf466, 0xf466], /* Private Use */ + [0xf467, 0xf467], /* Private Use */ + [0xf468, 0xf468], /* Private Use */ + [0xf469, 0xf469], /* Private Use */ + [0xf46a, 0xf46a], /* Private Use */ + [0xf46b, 0xf46b], /* Private Use */ + [0xf46c, 0xf46c], /* Private Use */ + [0xf46d, 0xf46d], /* Private Use */ + [0xf46e, 0xf46e], /* Private Use */ + [0xf46f, 0xf46f], /* Private Use */ + [0xf470, 0xf470], /* Private Use */ + [0xf471, 0xf471], /* Private Use */ + [0xf472, 0xf472], /* Private Use */ + [0xf473, 0xf473], /* Private Use */ + [0xf474, 0xf474], /* Private Use */ + [0xf475, 0xf475], /* Private Use */ + [0xf476, 0xf476], /* Private Use */ + [0xf477, 0xf477], /* Private Use */ + [0xf478, 0xf478], /* Private Use */ + [0xf479, 0xf479], /* Private Use */ + [0xf47a, 0xf47a], /* Private Use */ + [0xf47b, 0xf47b], /* Private Use */ + [0xf47c, 0xf47c], /* Private Use */ + [0xf47d, 0xf47d], /* Private Use */ + [0xf47e, 0xf47e], /* Private Use */ + [0xf47f, 0xf47f], /* Private Use */ + [0xf480, 0xf480], /* Private Use */ + [0xf481, 0xf481], /* Private Use */ + [0xf482, 0xf482], /* Private Use */ + [0xf483, 0xf483], /* Private Use */ + [0xf484, 0xf484], /* Private Use */ + [0xf485, 0xf485], /* Private Use */ + [0xf486, 0xf486], /* Private Use */ + [0xf487, 0xf487], /* Private Use */ + [0xf488, 0xf488], /* Private Use */ + [0xf489, 0xf489], /* Private Use */ + [0xf48a, 0xf48a], /* Private Use */ + [0xf48b, 0xf48b], /* Private Use */ + [0xf48c, 0xf48c], /* Private Use */ + [0xf48d, 0xf48d], /* Private Use */ + [0xf48e, 0xf48e], /* Private Use */ + [0xf48f, 0xf48f], /* Private Use */ + [0xf490, 0xf490], /* Private Use */ + [0xf491, 0xf491], /* Private Use */ + [0xf492, 0xf492], /* Private Use */ + [0xf493, 0xf493], /* Private Use */ + [0xf494, 0xf494], /* Private Use */ + [0xf495, 0xf495], /* Private Use */ + [0xf496, 0xf496], /* Private Use */ + [0xf497, 0xf497], /* Private Use */ + [0xf498, 0xf498], /* Private Use */ + [0xf499, 0xf499], /* Private Use */ + [0xf49a, 0xf49a], /* Private Use */ + [0xf49b, 0xf49b], /* Private Use */ + [0xf49c, 0xf49c], /* Private Use */ + [0xf49d, 0xf49d], /* Private Use */ + [0xf49e, 0xf49e], /* Private Use */ + [0xf49f, 0xf49f], /* Private Use */ + [0xf4a0, 0xf4a0], /* Private Use */ + [0xf4a1, 0xf4a1], /* Private Use */ + [0xf4a2, 0xf4a2], /* Private Use */ + [0xf4a3, 0xf4a3], /* Private Use */ + [0xf4a4, 0xf4a4], /* Private Use */ + [0xf4a5, 0xf4a5], /* Private Use */ + [0xf4a6, 0xf4a6], /* Private Use */ + [0xf4a7, 0xf4a7], /* Private Use */ + [0xf4a8, 0xf4a8], /* Private Use */ + [0xf4a9, 0xf4a9], /* Private Use */ + [0xf4aa, 0xf4aa], /* Private Use */ + [0xf4ab, 0xf4ab], /* Private Use */ + [0xf4ac, 0xf4ac], /* Private Use */ + [0xf4ad, 0xf4ad], /* Private Use */ + [0xf4ae, 0xf4ae], /* Private Use */ + [0xf4af, 0xf4af], /* Private Use */ + [0xf4b0, 0xf4b0], /* Private Use */ + [0xf4b1, 0xf4b1], /* Private Use */ + [0xf4b2, 0xf4b2], /* Private Use */ + [0xf4b3, 0xf4b3], /* Private Use */ + [0xf4b4, 0xf4b4], /* Private Use */ + [0xf4b5, 0xf4b5], /* Private Use */ + [0xf4b6, 0xf4b6], /* Private Use */ + [0xf4b7, 0xf4b7], /* Private Use */ + [0xf4b8, 0xf4b8], /* Private Use */ + [0xf4b9, 0xf4b9], /* Private Use */ + [0xf4ba, 0xf4ba], /* Private Use */ + [0xf4bb, 0xf4bb], /* Private Use */ + [0xf4bc, 0xf4bc], /* Private Use */ + [0xf4bd, 0xf4bd], /* Private Use */ + [0xf4be, 0xf4be], /* Private Use */ + [0xf4bf, 0xf4bf], /* Private Use */ + [0xf4c0, 0xf4c0], /* Private Use */ + [0xf4c1, 0xf4c1], /* Private Use */ + [0xf4c2, 0xf4c2], /* Private Use */ + [0xf4c3, 0xf4c3], /* Private Use */ + [0xf4c4, 0xf4c4], /* Private Use */ + [0xf4c5, 0xf4c5], /* Private Use */ + [0xf4c6, 0xf4c6], /* Private Use */ + [0xf4c7, 0xf4c7], /* Private Use */ + [0xf4c8, 0xf4c8], /* Private Use */ + [0xf4c9, 0xf4c9], /* Private Use */ + [0xf4ca, 0xf4ca], /* Private Use */ + [0xf4cb, 0xf4cb], /* Private Use */ + [0xf4cc, 0xf4cc], /* Private Use */ + [0xf4cd, 0xf4cd], /* Private Use */ + [0xf4ce, 0xf4ce], /* Private Use */ + [0xf4cf, 0xf4cf], /* Private Use */ + [0xf4d0, 0xf4d0], /* Private Use */ + [0xf4d1, 0xf4d1], /* Private Use */ + [0xf4d2, 0xf4d2], /* Private Use */ + [0xf4d3, 0xf4d3], /* Private Use */ + [0xf4d4, 0xf4d4], /* Private Use */ + [0xf4d5, 0xf4d5], /* Private Use */ + [0xf4d6, 0xf4d6], /* Private Use */ + [0xf4d7, 0xf4d7], /* Private Use */ + [0xf4d8, 0xf4d8], /* Private Use */ + [0xf4d9, 0xf4d9], /* Private Use */ + [0xf4da, 0xf4da], /* Private Use */ + [0xf4db, 0xf4db], /* Private Use */ + [0xf4dc, 0xf4dc], /* Private Use */ + [0xf4dd, 0xf4dd], /* Private Use */ + [0xf4de, 0xf4de], /* Private Use */ + [0xf4df, 0xf4df], /* Private Use */ + [0xf4e0, 0xf4e0], /* Private Use */ + [0xf4e1, 0xf4e1], /* Private Use */ + [0xf4e2, 0xf4e2], /* Private Use */ + [0xf4e3, 0xf4e3], /* Private Use */ + [0xf4e4, 0xf4e4], /* Private Use */ + [0xf4e5, 0xf4e5], /* Private Use */ + [0xf4e6, 0xf4e6], /* Private Use */ + [0xf4e7, 0xf4e7], /* Private Use */ + [0xf4e8, 0xf4e8], /* Private Use */ + [0xf4e9, 0xf4e9], /* Private Use */ + [0xf4ea, 0xf4ea], /* Private Use */ + [0xf4eb, 0xf4eb], /* Private Use */ + [0xf4ec, 0xf4ec], /* Private Use */ + [0xf4ed, 0xf4ed], /* Private Use */ + [0xf4ee, 0xf4ee], /* Private Use */ + [0xf4ef, 0xf4ef], /* Private Use */ + [0xf4f0, 0xf4f0], /* Private Use */ + [0xf4f1, 0xf4f1], /* Private Use */ + [0xf4f2, 0xf4f2], /* Private Use */ + [0xf4f3, 0xf4f3], /* Private Use */ + [0xf4f4, 0xf4f4], /* Private Use */ + [0xf4f5, 0xf4f5], /* Private Use */ + [0xf4f6, 0xf4f6], /* Private Use */ + [0xf4f7, 0xf4f7], /* Private Use */ + [0xf4f8, 0xf4f8], /* Private Use */ + [0xf4f9, 0xf4f9], /* Private Use */ + [0xf4fa, 0xf4fa], /* Private Use */ + [0xf4fb, 0xf4fb], /* Private Use */ + [0xf4fc, 0xf4fc], /* Private Use */ + [0xf4fd, 0xf4fd], /* Private Use */ + [0xf4fe, 0xf4fe], /* Private Use */ + [0xf4ff, 0xf4ff], /* Private Use */ + [0xf500, 0xf500], /* Private Use */ + [0xf501, 0xf501], /* Private Use */ + [0xf502, 0xf502], /* Private Use */ + [0xf503, 0xf503], /* Private Use */ + [0xf504, 0xf504], /* Private Use */ + [0xf505, 0xf505], /* Private Use */ + [0xf506, 0xf506], /* Private Use */ + [0xf507, 0xf507], /* Private Use */ + [0xf508, 0xf508], /* Private Use */ + [0xf509, 0xf509], /* Private Use */ + [0xf50a, 0xf50a], /* Private Use */ + [0xf50b, 0xf50b], /* Private Use */ + [0xf50c, 0xf50c], /* Private Use */ + [0xf50d, 0xf50d], /* Private Use */ + [0xf50e, 0xf50e], /* Private Use */ + [0xf50f, 0xf50f], /* Private Use */ + [0xf510, 0xf510], /* Private Use */ + [0xf511, 0xf511], /* Private Use */ + [0xf512, 0xf512], /* Private Use */ + [0xf513, 0xf513], /* Private Use */ + [0xf514, 0xf514], /* Private Use */ + [0xf515, 0xf515], /* Private Use */ + [0xf516, 0xf516], /* Private Use */ + [0xf517, 0xf517], /* Private Use */ + [0xf518, 0xf518], /* Private Use */ + [0xf519, 0xf519], /* Private Use */ + [0xf51a, 0xf51a], /* Private Use */ + [0xf51b, 0xf51b], /* Private Use */ + [0xf51c, 0xf51c], /* Private Use */ + [0xf51d, 0xf51d], /* Private Use */ + [0xf51e, 0xf51e], /* Private Use */ + [0xf51f, 0xf51f], /* Private Use */ + [0xf520, 0xf520], /* Private Use */ + [0xf521, 0xf521], /* Private Use */ + [0xf522, 0xf522], /* Private Use */ + [0xf523, 0xf523], /* Private Use */ + [0xf524, 0xf524], /* Private Use */ + [0xf525, 0xf525], /* Private Use */ + [0xf526, 0xf526], /* Private Use */ + [0xf527, 0xf527], /* Private Use */ + [0xf528, 0xf528], /* Private Use */ + [0xf529, 0xf529], /* Private Use */ + [0xf52a, 0xf52a], /* Private Use */ + [0xf52b, 0xf52b], /* Private Use */ + [0xf52c, 0xf52c], /* Private Use */ + [0xf52d, 0xf52d], /* Private Use */ + [0xf52e, 0xf52e], /* Private Use */ + [0xf52f, 0xf52f], /* Private Use */ + [0xf530, 0xf530], /* Private Use */ + [0xf531, 0xf531], /* Private Use */ + [0xf532, 0xf532], /* Private Use */ + [0xf533, 0xf533], /* Private Use */ + [0xf534, 0xf534], /* Private Use */ + [0xf535, 0xf535], /* Private Use */ + [0xf536, 0xf536], /* Private Use */ + [0xf537, 0xf537], /* Private Use */ + [0xf538, 0xf538], /* Private Use */ + [0xf539, 0xf539], /* Private Use */ + [0xf53a, 0xf53a], /* Private Use */ + [0xf53b, 0xf53b], /* Private Use */ + [0xf53c, 0xf53c], /* Private Use */ + [0xf53d, 0xf53d], /* Private Use */ + [0xf53e, 0xf53e], /* Private Use */ + [0xf53f, 0xf53f], /* Private Use */ + [0xf540, 0xf540], /* Private Use */ + [0xf541, 0xf541], /* Private Use */ + [0xf542, 0xf542], /* Private Use */ + [0xf543, 0xf543], /* Private Use */ + [0xf544, 0xf544], /* Private Use */ + [0xf545, 0xf545], /* Private Use */ + [0xf546, 0xf546], /* Private Use */ + [0xf547, 0xf547], /* Private Use */ + [0xf548, 0xf548], /* Private Use */ + [0xf549, 0xf549], /* Private Use */ + [0xf54a, 0xf54a], /* Private Use */ + [0xf54b, 0xf54b], /* Private Use */ + [0xf54c, 0xf54c], /* Private Use */ + [0xf54d, 0xf54d], /* Private Use */ + [0xf54e, 0xf54e], /* Private Use */ + [0xf54f, 0xf54f], /* Private Use */ + [0xf550, 0xf550], /* Private Use */ + [0xf551, 0xf551], /* Private Use */ + [0xf552, 0xf552], /* Private Use */ + [0xf553, 0xf553], /* Private Use */ + [0xf554, 0xf554], /* Private Use */ + [0xf555, 0xf555], /* Private Use */ + [0xf556, 0xf556], /* Private Use */ + [0xf557, 0xf557], /* Private Use */ + [0xf558, 0xf558], /* Private Use */ + [0xf559, 0xf559], /* Private Use */ + [0xf55a, 0xf55a], /* Private Use */ + [0xf55b, 0xf55b], /* Private Use */ + [0xf55c, 0xf55c], /* Private Use */ + [0xf55d, 0xf55d], /* Private Use */ + [0xf55e, 0xf55e], /* Private Use */ + [0xf55f, 0xf55f], /* Private Use */ + [0xf560, 0xf560], /* Private Use */ + [0xf561, 0xf561], /* Private Use */ + [0xf562, 0xf562], /* Private Use */ + [0xf563, 0xf563], /* Private Use */ + [0xf564, 0xf564], /* Private Use */ + [0xf565, 0xf565], /* Private Use */ + [0xf566, 0xf566], /* Private Use */ + [0xf567, 0xf567], /* Private Use */ + [0xf568, 0xf568], /* Private Use */ + [0xf569, 0xf569], /* Private Use */ + [0xf56a, 0xf56a], /* Private Use */ + [0xf56b, 0xf56b], /* Private Use */ + [0xf56c, 0xf56c], /* Private Use */ + [0xf56d, 0xf56d], /* Private Use */ + [0xf56e, 0xf56e], /* Private Use */ + [0xf56f, 0xf56f], /* Private Use */ + [0xf570, 0xf570], /* Private Use */ + [0xf571, 0xf571], /* Private Use */ + [0xf572, 0xf572], /* Private Use */ + [0xf573, 0xf573], /* Private Use */ + [0xf574, 0xf574], /* Private Use */ + [0xf575, 0xf575], /* Private Use */ + [0xf576, 0xf576], /* Private Use */ + [0xf577, 0xf577], /* Private Use */ + [0xf578, 0xf578], /* Private Use */ + [0xf579, 0xf579], /* Private Use */ + [0xf57a, 0xf57a], /* Private Use */ + [0xf57b, 0xf57b], /* Private Use */ + [0xf57c, 0xf57c], /* Private Use */ + [0xf57d, 0xf57d], /* Private Use */ + [0xf57e, 0xf57e], /* Private Use */ + [0xf57f, 0xf57f], /* Private Use */ + [0xf580, 0xf580], /* Private Use */ + [0xf581, 0xf581], /* Private Use */ + [0xf582, 0xf582], /* Private Use */ + [0xf583, 0xf583], /* Private Use */ + [0xf584, 0xf584], /* Private Use */ + [0xf585, 0xf585], /* Private Use */ + [0xf586, 0xf586], /* Private Use */ + [0xf587, 0xf587], /* Private Use */ + [0xf588, 0xf588], /* Private Use */ + [0xf589, 0xf589], /* Private Use */ + [0xf58a, 0xf58a], /* Private Use */ + [0xf58b, 0xf58b], /* Private Use */ + [0xf58c, 0xf58c], /* Private Use */ + [0xf58d, 0xf58d], /* Private Use */ + [0xf58e, 0xf58e], /* Private Use */ + [0xf58f, 0xf58f], /* Private Use */ + [0xf590, 0xf590], /* Private Use */ + [0xf591, 0xf591], /* Private Use */ + [0xf592, 0xf592], /* Private Use */ + [0xf593, 0xf593], /* Private Use */ + [0xf594, 0xf594], /* Private Use */ + [0xf595, 0xf595], /* Private Use */ + [0xf596, 0xf596], /* Private Use */ + [0xf597, 0xf597], /* Private Use */ + [0xf598, 0xf598], /* Private Use */ + [0xf599, 0xf599], /* Private Use */ + [0xf59a, 0xf59a], /* Private Use */ + [0xf59b, 0xf59b], /* Private Use */ + [0xf59c, 0xf59c], /* Private Use */ + [0xf59d, 0xf59d], /* Private Use */ + [0xf59e, 0xf59e], /* Private Use */ + [0xf59f, 0xf59f], /* Private Use */ + [0xf5a0, 0xf5a0], /* Private Use */ + [0xf5a1, 0xf5a1], /* Private Use */ + [0xf5a2, 0xf5a2], /* Private Use */ + [0xf5a3, 0xf5a3], /* Private Use */ + [0xf5a4, 0xf5a4], /* Private Use */ + [0xf5a5, 0xf5a5], /* Private Use */ + [0xf5a6, 0xf5a6], /* Private Use */ + [0xf5a7, 0xf5a7], /* Private Use */ + [0xf5a8, 0xf5a8], /* Private Use */ + [0xf5a9, 0xf5a9], /* Private Use */ + [0xf5aa, 0xf5aa], /* Private Use */ + [0xf5ab, 0xf5ab], /* Private Use */ + [0xf5ac, 0xf5ac], /* Private Use */ + [0xf5ad, 0xf5ad], /* Private Use */ + [0xf5ae, 0xf5ae], /* Private Use */ + [0xf5af, 0xf5af], /* Private Use */ + [0xf5b0, 0xf5b0], /* Private Use */ + [0xf5b1, 0xf5b1], /* Private Use */ + [0xf5b2, 0xf5b2], /* Private Use */ + [0xf5b3, 0xf5b3], /* Private Use */ + [0xf5b4, 0xf5b4], /* Private Use */ + [0xf5b5, 0xf5b5], /* Private Use */ + [0xf5b6, 0xf5b6], /* Private Use */ + [0xf5b7, 0xf5b7], /* Private Use */ + [0xf5b8, 0xf5b8], /* Private Use */ + [0xf5b9, 0xf5b9], /* Private Use */ + [0xf5ba, 0xf5ba], /* Private Use */ + [0xf5bb, 0xf5bb], /* Private Use */ + [0xf5bc, 0xf5bc], /* Private Use */ + [0xf5bd, 0xf5bd], /* Private Use */ + [0xf5be, 0xf5be], /* Private Use */ + [0xf5bf, 0xf5bf], /* Private Use */ + [0xf5c0, 0xf5c0], /* Private Use */ + [0xf5c1, 0xf5c1], /* Private Use */ + [0xf5c2, 0xf5c2], /* Private Use */ + [0xf5c3, 0xf5c3], /* Private Use */ + [0xf5c4, 0xf5c4], /* Private Use */ + [0xf5c5, 0xf5c5], /* Private Use */ + [0xf5c6, 0xf5c6], /* Private Use */ + [0xf5c7, 0xf5c7], /* Private Use */ + [0xf5c8, 0xf5c8], /* Private Use */ + [0xf5c9, 0xf5c9], /* Private Use */ + [0xf5ca, 0xf5ca], /* Private Use */ + [0xf5cb, 0xf5cb], /* Private Use */ + [0xf5cc, 0xf5cc], /* Private Use */ + [0xf5cd, 0xf5cd], /* Private Use */ + [0xf5ce, 0xf5ce], /* Private Use */ + [0xf5cf, 0xf5cf], /* Private Use */ + [0xf5d0, 0xf5d0], /* Private Use */ + [0xf5d1, 0xf5d1], /* Private Use */ + [0xf5d2, 0xf5d2], /* Private Use */ + [0xf5d3, 0xf5d3], /* Private Use */ + [0xf5d4, 0xf5d4], /* Private Use */ + [0xf5d5, 0xf5d5], /* Private Use */ + [0xf5d6, 0xf5d6], /* Private Use */ + [0xf5d7, 0xf5d7], /* Private Use */ + [0xf5d8, 0xf5d8], /* Private Use */ + [0xf5d9, 0xf5d9], /* Private Use */ + [0xf5da, 0xf5da], /* Private Use */ + [0xf5db, 0xf5db], /* Private Use */ + [0xf5dc, 0xf5dc], /* Private Use */ + [0xf5dd, 0xf5dd], /* Private Use */ + [0xf5de, 0xf5de], /* Private Use */ + [0xf5df, 0xf5df], /* Private Use */ + [0xf5e0, 0xf5e0], /* Private Use */ + [0xf5e1, 0xf5e1], /* Private Use */ + [0xf5e2, 0xf5e2], /* Private Use */ + [0xf5e3, 0xf5e3], /* Private Use */ + [0xf5e4, 0xf5e4], /* Private Use */ + [0xf5e5, 0xf5e5], /* Private Use */ + [0xf5e6, 0xf5e6], /* Private Use */ + [0xf5e7, 0xf5e7], /* Private Use */ + [0xf5e8, 0xf5e8], /* Private Use */ + [0xf5e9, 0xf5e9], /* Private Use */ + [0xf5ea, 0xf5ea], /* Private Use */ + [0xf5eb, 0xf5eb], /* Private Use */ + [0xf5ec, 0xf5ec], /* Private Use */ + [0xf5ed, 0xf5ed], /* Private Use */ + [0xf5ee, 0xf5ee], /* Private Use */ + [0xf5ef, 0xf5ef], /* Private Use */ + [0xf5f0, 0xf5f0], /* Private Use */ + [0xf5f1, 0xf5f1], /* Private Use */ + [0xf5f2, 0xf5f2], /* Private Use */ + [0xf5f3, 0xf5f3], /* Private Use */ + [0xf5f4, 0xf5f4], /* Private Use */ + [0xf5f5, 0xf5f5], /* Private Use */ + [0xf5f6, 0xf5f6], /* Private Use */ + [0xf5f7, 0xf5f7], /* Private Use */ + [0xf5f8, 0xf5f8], /* Private Use */ + [0xf5f9, 0xf5f9], /* Private Use */ + [0xf5fa, 0xf5fa], /* Private Use */ + [0xf5fb, 0xf5fb], /* Private Use */ + [0xf5fc, 0xf5fc], /* Private Use */ + [0xf5fd, 0xf5fd], /* Private Use */ + [0xf5fe, 0xf5fe], /* Private Use */ + [0xf5ff, 0xf5ff], /* Private Use */ + [0xf600, 0xf600], /* Private Use */ + [0xf601, 0xf601], /* Private Use */ + [0xf602, 0xf602], /* Private Use */ + [0xf603, 0xf603], /* Private Use */ + [0xf604, 0xf604], /* Private Use */ + [0xf605, 0xf605], /* Private Use */ + [0xf606, 0xf606], /* Private Use */ + [0xf607, 0xf607], /* Private Use */ + [0xf608, 0xf608], /* Private Use */ + [0xf609, 0xf609], /* Private Use */ + [0xf60a, 0xf60a], /* Private Use */ + [0xf60b, 0xf60b], /* Private Use */ + [0xf60c, 0xf60c], /* Private Use */ + [0xf60d, 0xf60d], /* Private Use */ + [0xf60e, 0xf60e], /* Private Use */ + [0xf60f, 0xf60f], /* Private Use */ + [0xf610, 0xf610], /* Private Use */ + [0xf611, 0xf611], /* Private Use */ + [0xf612, 0xf612], /* Private Use */ + [0xf613, 0xf613], /* Private Use */ + [0xf614, 0xf614], /* Private Use */ + [0xf615, 0xf615], /* Private Use */ + [0xf616, 0xf616], /* Private Use */ + [0xf617, 0xf617], /* Private Use */ + [0xf618, 0xf618], /* Private Use */ + [0xf619, 0xf619], /* Private Use */ + [0xf61a, 0xf61a], /* Private Use */ + [0xf61b, 0xf61b], /* Private Use */ + [0xf61c, 0xf61c], /* Private Use */ + [0xf61d, 0xf61d], /* Private Use */ + [0xf61e, 0xf61e], /* Private Use */ + [0xf61f, 0xf61f], /* Private Use */ + [0xf620, 0xf620], /* Private Use */ + [0xf621, 0xf621], /* Private Use */ + [0xf622, 0xf622], /* Private Use */ + [0xf623, 0xf623], /* Private Use */ + [0xf624, 0xf624], /* Private Use */ + [0xf625, 0xf625], /* Private Use */ + [0xf626, 0xf626], /* Private Use */ + [0xf627, 0xf627], /* Private Use */ + [0xf628, 0xf628], /* Private Use */ + [0xf629, 0xf629], /* Private Use */ + [0xf62a, 0xf62a], /* Private Use */ + [0xf62b, 0xf62b], /* Private Use */ + [0xf62c, 0xf62c], /* Private Use */ + [0xf62d, 0xf62d], /* Private Use */ + [0xf62e, 0xf62e], /* Private Use */ + [0xf62f, 0xf62f], /* Private Use */ + [0xf630, 0xf630], /* Private Use */ + [0xf631, 0xf631], /* Private Use */ + [0xf632, 0xf632], /* Private Use */ + [0xf633, 0xf633], /* Private Use */ + [0xf634, 0xf634], /* Private Use */ + [0xf635, 0xf635], /* Private Use */ + [0xf636, 0xf636], /* Private Use */ + [0xf637, 0xf637], /* Private Use */ + [0xf638, 0xf638], /* Private Use */ + [0xf639, 0xf639], /* Private Use */ + [0xf63a, 0xf63a], /* Private Use */ + [0xf63b, 0xf63b], /* Private Use */ + [0xf63c, 0xf63c], /* Private Use */ + [0xf63d, 0xf63d], /* Private Use */ + [0xf63e, 0xf63e], /* Private Use */ + [0xf63f, 0xf63f], /* Private Use */ + [0xf640, 0xf640], /* Private Use */ + [0xf641, 0xf641], /* Private Use */ + [0xf642, 0xf642], /* Private Use */ + [0xf643, 0xf643], /* Private Use */ + [0xf644, 0xf644], /* Private Use */ + [0xf645, 0xf645], /* Private Use */ + [0xf646, 0xf646], /* Private Use */ + [0xf647, 0xf647], /* Private Use */ + [0xf648, 0xf648], /* Private Use */ + [0xf649, 0xf649], /* Private Use */ + [0xf64a, 0xf64a], /* Private Use */ + [0xf64b, 0xf64b], /* Private Use */ + [0xf64c, 0xf64c], /* Private Use */ + [0xf64d, 0xf64d], /* Private Use */ + [0xf64e, 0xf64e], /* Private Use */ + [0xf64f, 0xf64f], /* Private Use */ + [0xf650, 0xf650], /* Private Use */ + [0xf651, 0xf651], /* Private Use */ + [0xf652, 0xf652], /* Private Use */ + [0xf653, 0xf653], /* Private Use */ + [0xf654, 0xf654], /* Private Use */ + [0xf655, 0xf655], /* Private Use */ + [0xf656, 0xf656], /* Private Use */ + [0xf657, 0xf657], /* Private Use */ + [0xf658, 0xf658], /* Private Use */ + [0xf659, 0xf659], /* Private Use */ + [0xf65a, 0xf65a], /* Private Use */ + [0xf65b, 0xf65b], /* Private Use */ + [0xf65c, 0xf65c], /* Private Use */ + [0xf65d, 0xf65d], /* Private Use */ + [0xf65e, 0xf65e], /* Private Use */ + [0xf65f, 0xf65f], /* Private Use */ + [0xf660, 0xf660], /* Private Use */ + [0xf661, 0xf661], /* Private Use */ + [0xf662, 0xf662], /* Private Use */ + [0xf663, 0xf663], /* Private Use */ + [0xf664, 0xf664], /* Private Use */ + [0xf665, 0xf665], /* Private Use */ + [0xf666, 0xf666], /* Private Use */ + [0xf667, 0xf667], /* Private Use */ + [0xf668, 0xf668], /* Private Use */ + [0xf669, 0xf669], /* Private Use */ + [0xf66a, 0xf66a], /* Private Use */ + [0xf66b, 0xf66b], /* Private Use */ + [0xf66c, 0xf66c], /* Private Use */ + [0xf66d, 0xf66d], /* Private Use */ + [0xf66e, 0xf66e], /* Private Use */ + [0xf66f, 0xf66f], /* Private Use */ + [0xf670, 0xf670], /* Private Use */ + [0xf671, 0xf671], /* Private Use */ + [0xf672, 0xf672], /* Private Use */ + [0xf673, 0xf673], /* Private Use */ + [0xf674, 0xf674], /* Private Use */ + [0xf675, 0xf675], /* Private Use */ + [0xf676, 0xf676], /* Private Use */ + [0xf677, 0xf677], /* Private Use */ + [0xf678, 0xf678], /* Private Use */ + [0xf679, 0xf679], /* Private Use */ + [0xf67a, 0xf67a], /* Private Use */ + [0xf67b, 0xf67b], /* Private Use */ + [0xf67c, 0xf67c], /* Private Use */ + [0xf67d, 0xf67d], /* Private Use */ + [0xf67e, 0xf67e], /* Private Use */ + [0xf67f, 0xf67f], /* Private Use */ + [0xf680, 0xf680], /* Private Use */ + [0xf681, 0xf681], /* Private Use */ + [0xf682, 0xf682], /* Private Use */ + [0xf683, 0xf683], /* Private Use */ + [0xf684, 0xf684], /* Private Use */ + [0xf685, 0xf685], /* Private Use */ + [0xf686, 0xf686], /* Private Use */ + [0xf687, 0xf687], /* Private Use */ + [0xf688, 0xf688], /* Private Use */ + [0xf689, 0xf689], /* Private Use */ + [0xf68a, 0xf68a], /* Private Use */ + [0xf68b, 0xf68b], /* Private Use */ + [0xf68c, 0xf68c], /* Private Use */ + [0xf68d, 0xf68d], /* Private Use */ + [0xf68e, 0xf68e], /* Private Use */ + [0xf68f, 0xf68f], /* Private Use */ + [0xf690, 0xf690], /* Private Use */ + [0xf691, 0xf691], /* Private Use */ + [0xf692, 0xf692], /* Private Use */ + [0xf693, 0xf693], /* Private Use */ + [0xf694, 0xf694], /* Private Use */ + [0xf695, 0xf695], /* Private Use */ + [0xf696, 0xf696], /* Private Use */ + [0xf697, 0xf697], /* Private Use */ + [0xf698, 0xf698], /* Private Use */ + [0xf699, 0xf699], /* Private Use */ + [0xf69a, 0xf69a], /* Private Use */ + [0xf69b, 0xf69b], /* Private Use */ + [0xf69c, 0xf69c], /* Private Use */ + [0xf69d, 0xf69d], /* Private Use */ + [0xf69e, 0xf69e], /* Private Use */ + [0xf69f, 0xf69f], /* Private Use */ + [0xf6a0, 0xf6a0], /* Private Use */ + [0xf6a1, 0xf6a1], /* Private Use */ + [0xf6a2, 0xf6a2], /* Private Use */ + [0xf6a3, 0xf6a3], /* Private Use */ + [0xf6a4, 0xf6a4], /* Private Use */ + [0xf6a5, 0xf6a5], /* Private Use */ + [0xf6a6, 0xf6a6], /* Private Use */ + [0xf6a7, 0xf6a7], /* Private Use */ + [0xf6a8, 0xf6a8], /* Private Use */ + [0xf6a9, 0xf6a9], /* Private Use */ + [0xf6aa, 0xf6aa], /* Private Use */ + [0xf6ab, 0xf6ab], /* Private Use */ + [0xf6ac, 0xf6ac], /* Private Use */ + [0xf6ad, 0xf6ad], /* Private Use */ + [0xf6ae, 0xf6ae], /* Private Use */ + [0xf6af, 0xf6af], /* Private Use */ + [0xf6b0, 0xf6b0], /* Private Use */ + [0xf6b1, 0xf6b1], /* Private Use */ + [0xf6b2, 0xf6b2], /* Private Use */ + [0xf6b3, 0xf6b3], /* Private Use */ + [0xf6b4, 0xf6b4], /* Private Use */ + [0xf6b5, 0xf6b5], /* Private Use */ + [0xf6b6, 0xf6b6], /* Private Use */ + [0xf6b7, 0xf6b7], /* Private Use */ + [0xf6b8, 0xf6b8], /* Private Use */ + [0xf6b9, 0xf6b9], /* Private Use */ + [0xf6ba, 0xf6ba], /* Private Use */ + [0xf6bb, 0xf6bb], /* Private Use */ + [0xf6bc, 0xf6bc], /* Private Use */ + [0xf6bd, 0xf6bd], /* Private Use */ + [0xf6be, 0xf6be], /* Private Use */ + [0xf6bf, 0xf6bf], /* Private Use */ + [0xf6c0, 0xf6c0], /* Private Use */ + [0xf6c1, 0xf6c1], /* Private Use */ + [0xf6c2, 0xf6c2], /* Private Use */ + [0xf6c3, 0xf6c3], /* Private Use */ + [0xf6c4, 0xf6c4], /* Private Use */ + [0xf6c5, 0xf6c5], /* Private Use */ + [0xf6c6, 0xf6c6], /* Private Use */ + [0xf6c7, 0xf6c7], /* Private Use */ + [0xf6c8, 0xf6c8], /* Private Use */ + [0xf6c9, 0xf6c9], /* Private Use */ + [0xf6ca, 0xf6ca], /* Private Use */ + [0xf6cb, 0xf6cb], /* Private Use */ + [0xf6cc, 0xf6cc], /* Private Use */ + [0xf6cd, 0xf6cd], /* Private Use */ + [0xf6ce, 0xf6ce], /* Private Use */ + [0xf6cf, 0xf6cf], /* Private Use */ + [0xf6d0, 0xf6d0], /* Private Use */ + [0xf6d1, 0xf6d1], /* Private Use */ + [0xf6d2, 0xf6d2], /* Private Use */ + [0xf6d3, 0xf6d3], /* Private Use */ + [0xf6d4, 0xf6d4], /* Private Use */ + [0xf6d5, 0xf6d5], /* Private Use */ + [0xf6d6, 0xf6d6], /* Private Use */ + [0xf6d7, 0xf6d7], /* Private Use */ + [0xf6d8, 0xf6d8], /* Private Use */ + [0xf6d9, 0xf6d9], /* Private Use */ + [0xf6da, 0xf6da], /* Private Use */ + [0xf6db, 0xf6db], /* Private Use */ + [0xf6dc, 0xf6dc], /* Private Use */ + [0xf6dd, 0xf6dd], /* Private Use */ + [0xf6de, 0xf6de], /* Private Use */ + [0xf6df, 0xf6df], /* Private Use */ + [0xf6e0, 0xf6e0], /* Private Use */ + [0xf6e1, 0xf6e1], /* Private Use */ + [0xf6e2, 0xf6e2], /* Private Use */ + [0xf6e3, 0xf6e3], /* Private Use */ + [0xf6e4, 0xf6e4], /* Private Use */ + [0xf6e5, 0xf6e5], /* Private Use */ + [0xf6e6, 0xf6e6], /* Private Use */ + [0xf6e7, 0xf6e7], /* Private Use */ + [0xf6e8, 0xf6e8], /* Private Use */ + [0xf6e9, 0xf6e9], /* Private Use */ + [0xf6ea, 0xf6ea], /* Private Use */ + [0xf6eb, 0xf6eb], /* Private Use */ + [0xf6ec, 0xf6ec], /* Private Use */ + [0xf6ed, 0xf6ed], /* Private Use */ + [0xf6ee, 0xf6ee], /* Private Use */ + [0xf6ef, 0xf6ef], /* Private Use */ + [0xf6f0, 0xf6f0], /* Private Use */ + [0xf6f1, 0xf6f1], /* Private Use */ + [0xf6f2, 0xf6f2], /* Private Use */ + [0xf6f3, 0xf6f3], /* Private Use */ + [0xf6f4, 0xf6f4], /* Private Use */ + [0xf6f5, 0xf6f5], /* Private Use */ + [0xf6f6, 0xf6f6], /* Private Use */ + [0xf6f7, 0xf6f7], /* Private Use */ + [0xf6f8, 0xf6f8], /* Private Use */ + [0xf6f9, 0xf6f9], /* Private Use */ + [0xf6fa, 0xf6fa], /* Private Use */ + [0xf6fb, 0xf6fb], /* Private Use */ + [0xf6fc, 0xf6fc], /* Private Use */ + [0xf6fd, 0xf6fd], /* Private Use */ + [0xf6fe, 0xf6fe], /* Private Use */ + [0xf6ff, 0xf6ff], /* Private Use */ + [0xf700, 0xf700], /* Private Use */ + [0xf701, 0xf701], /* Private Use */ + [0xf702, 0xf702], /* Private Use */ + [0xf703, 0xf703], /* Private Use */ + [0xf704, 0xf704], /* Private Use */ + [0xf705, 0xf705], /* Private Use */ + [0xf706, 0xf706], /* Private Use */ + [0xf707, 0xf707], /* Private Use */ + [0xf708, 0xf708], /* Private Use */ + [0xf709, 0xf709], /* Private Use */ + [0xf70a, 0xf70a], /* Private Use */ + [0xf70b, 0xf70b], /* Private Use */ + [0xf70c, 0xf70c], /* Private Use */ + [0xf70d, 0xf70d], /* Private Use */ + [0xf70e, 0xf70e], /* Private Use */ + [0xf70f, 0xf70f], /* Private Use */ + [0xf710, 0xf710], /* Private Use */ + [0xf711, 0xf711], /* Private Use */ + [0xf712, 0xf712], /* Private Use */ + [0xf713, 0xf713], /* Private Use */ + [0xf714, 0xf714], /* Private Use */ + [0xf715, 0xf715], /* Private Use */ + [0xf716, 0xf716], /* Private Use */ + [0xf717, 0xf717], /* Private Use */ + [0xf718, 0xf718], /* Private Use */ + [0xf719, 0xf719], /* Private Use */ + [0xf71a, 0xf71a], /* Private Use */ + [0xf71b, 0xf71b], /* Private Use */ + [0xf71c, 0xf71c], /* Private Use */ + [0xf71d, 0xf71d], /* Private Use */ + [0xf71e, 0xf71e], /* Private Use */ + [0xf71f, 0xf71f], /* Private Use */ + [0xf720, 0xf720], /* Private Use */ + [0xf721, 0xf721], /* Private Use */ + [0xf722, 0xf722], /* Private Use */ + [0xf723, 0xf723], /* Private Use */ + [0xf724, 0xf724], /* Private Use */ + [0xf725, 0xf725], /* Private Use */ + [0xf726, 0xf726], /* Private Use */ + [0xf727, 0xf727], /* Private Use */ + [0xf728, 0xf728], /* Private Use */ + [0xf729, 0xf729], /* Private Use */ + [0xf72a, 0xf72a], /* Private Use */ + [0xf72b, 0xf72b], /* Private Use */ + [0xf72c, 0xf72c], /* Private Use */ + [0xf72d, 0xf72d], /* Private Use */ + [0xf72e, 0xf72e], /* Private Use */ + [0xf72f, 0xf72f], /* Private Use */ + [0xf730, 0xf730], /* Private Use */ + [0xf731, 0xf731], /* Private Use */ + [0xf732, 0xf732], /* Private Use */ + [0xf733, 0xf733], /* Private Use */ + [0xf734, 0xf734], /* Private Use */ + [0xf735, 0xf735], /* Private Use */ + [0xf736, 0xf736], /* Private Use */ + [0xf737, 0xf737], /* Private Use */ + [0xf738, 0xf738], /* Private Use */ + [0xf739, 0xf739], /* Private Use */ + [0xf73a, 0xf73a], /* Private Use */ + [0xf73b, 0xf73b], /* Private Use */ + [0xf73c, 0xf73c], /* Private Use */ + [0xf73d, 0xf73d], /* Private Use */ + [0xf73e, 0xf73e], /* Private Use */ + [0xf73f, 0xf73f], /* Private Use */ + [0xf740, 0xf740], /* Private Use */ + [0xf741, 0xf741], /* Private Use */ + [0xf742, 0xf742], /* Private Use */ + [0xf743, 0xf743], /* Private Use */ + [0xf744, 0xf744], /* Private Use */ + [0xf745, 0xf745], /* Private Use */ + [0xf746, 0xf746], /* Private Use */ + [0xf747, 0xf747], /* Private Use */ + [0xf748, 0xf748], /* Private Use */ + [0xf749, 0xf749], /* Private Use */ + [0xf74a, 0xf74a], /* Private Use */ + [0xf74b, 0xf74b], /* Private Use */ + [0xf74c, 0xf74c], /* Private Use */ + [0xf74d, 0xf74d], /* Private Use */ + [0xf74e, 0xf74e], /* Private Use */ + [0xf74f, 0xf74f], /* Private Use */ + [0xf750, 0xf750], /* Private Use */ + [0xf751, 0xf751], /* Private Use */ + [0xf752, 0xf752], /* Private Use */ + [0xf753, 0xf753], /* Private Use */ + [0xf754, 0xf754], /* Private Use */ + [0xf755, 0xf755], /* Private Use */ + [0xf756, 0xf756], /* Private Use */ + [0xf757, 0xf757], /* Private Use */ + [0xf758, 0xf758], /* Private Use */ + [0xf759, 0xf759], /* Private Use */ + [0xf75a, 0xf75a], /* Private Use */ + [0xf75b, 0xf75b], /* Private Use */ + [0xf75c, 0xf75c], /* Private Use */ + [0xf75d, 0xf75d], /* Private Use */ + [0xf75e, 0xf75e], /* Private Use */ + [0xf75f, 0xf75f], /* Private Use */ + [0xf760, 0xf760], /* Private Use */ + [0xf761, 0xf761], /* Private Use */ + [0xf762, 0xf762], /* Private Use */ + [0xf763, 0xf763], /* Private Use */ + [0xf764, 0xf764], /* Private Use */ + [0xf765, 0xf765], /* Private Use */ + [0xf766, 0xf766], /* Private Use */ + [0xf767, 0xf767], /* Private Use */ + [0xf768, 0xf768], /* Private Use */ + [0xf769, 0xf769], /* Private Use */ + [0xf76a, 0xf76a], /* Private Use */ + [0xf76b, 0xf76b], /* Private Use */ + [0xf76c, 0xf76c], /* Private Use */ + [0xf76d, 0xf76d], /* Private Use */ + [0xf76e, 0xf76e], /* Private Use */ + [0xf76f, 0xf76f], /* Private Use */ + [0xf770, 0xf770], /* Private Use */ + [0xf771, 0xf771], /* Private Use */ + [0xf772, 0xf772], /* Private Use */ + [0xf773, 0xf773], /* Private Use */ + [0xf774, 0xf774], /* Private Use */ + [0xf775, 0xf775], /* Private Use */ + [0xf776, 0xf776], /* Private Use */ + [0xf777, 0xf777], /* Private Use */ + [0xf778, 0xf778], /* Private Use */ + [0xf779, 0xf779], /* Private Use */ + [0xf77a, 0xf77a], /* Private Use */ + [0xf77b, 0xf77b], /* Private Use */ + [0xf77c, 0xf77c], /* Private Use */ + [0xf77d, 0xf77d], /* Private Use */ + [0xf77e, 0xf77e], /* Private Use */ + [0xf77f, 0xf77f], /* Private Use */ + [0xf780, 0xf780], /* Private Use */ + [0xf781, 0xf781], /* Private Use */ + [0xf782, 0xf782], /* Private Use */ + [0xf783, 0xf783], /* Private Use */ + [0xf784, 0xf784], /* Private Use */ + [0xf785, 0xf785], /* Private Use */ + [0xf786, 0xf786], /* Private Use */ + [0xf787, 0xf787], /* Private Use */ + [0xf788, 0xf788], /* Private Use */ + [0xf789, 0xf789], /* Private Use */ + [0xf78a, 0xf78a], /* Private Use */ + [0xf78b, 0xf78b], /* Private Use */ + [0xf78c, 0xf78c], /* Private Use */ + [0xf78d, 0xf78d], /* Private Use */ + [0xf78e, 0xf78e], /* Private Use */ + [0xf78f, 0xf78f], /* Private Use */ + [0xf790, 0xf790], /* Private Use */ + [0xf791, 0xf791], /* Private Use */ + [0xf792, 0xf792], /* Private Use */ + [0xf793, 0xf793], /* Private Use */ + [0xf794, 0xf794], /* Private Use */ + [0xf795, 0xf795], /* Private Use */ + [0xf796, 0xf796], /* Private Use */ + [0xf797, 0xf797], /* Private Use */ + [0xf798, 0xf798], /* Private Use */ + [0xf799, 0xf799], /* Private Use */ + [0xf79a, 0xf79a], /* Private Use */ + [0xf79b, 0xf79b], /* Private Use */ + [0xf79c, 0xf79c], /* Private Use */ + [0xf79d, 0xf79d], /* Private Use */ + [0xf79e, 0xf79e], /* Private Use */ + [0xf79f, 0xf79f], /* Private Use */ + [0xf7a0, 0xf7a0], /* Private Use */ + [0xf7a1, 0xf7a1], /* Private Use */ + [0xf7a2, 0xf7a2], /* Private Use */ + [0xf7a3, 0xf7a3], /* Private Use */ + [0xf7a4, 0xf7a4], /* Private Use */ + [0xf7a5, 0xf7a5], /* Private Use */ + [0xf7a6, 0xf7a6], /* Private Use */ + [0xf7a7, 0xf7a7], /* Private Use */ + [0xf7a8, 0xf7a8], /* Private Use */ + [0xf7a9, 0xf7a9], /* Private Use */ + [0xf7aa, 0xf7aa], /* Private Use */ + [0xf7ab, 0xf7ab], /* Private Use */ + [0xf7ac, 0xf7ac], /* Private Use */ + [0xf7ad, 0xf7ad], /* Private Use */ + [0xf7ae, 0xf7ae], /* Private Use */ + [0xf7af, 0xf7af], /* Private Use */ + [0xf7b0, 0xf7b0], /* Private Use */ + [0xf7b1, 0xf7b1], /* Private Use */ + [0xf7b2, 0xf7b2], /* Private Use */ + [0xf7b3, 0xf7b3], /* Private Use */ + [0xf7b4, 0xf7b4], /* Private Use */ + [0xf7b5, 0xf7b5], /* Private Use */ + [0xf7b6, 0xf7b6], /* Private Use */ + [0xf7b7, 0xf7b7], /* Private Use */ + [0xf7b8, 0xf7b8], /* Private Use */ + [0xf7b9, 0xf7b9], /* Private Use */ + [0xf7ba, 0xf7ba], /* Private Use */ + [0xf7bb, 0xf7bb], /* Private Use */ + [0xf7bc, 0xf7bc], /* Private Use */ + [0xf7bd, 0xf7bd], /* Private Use */ + [0xf7be, 0xf7be], /* Private Use */ + [0xf7bf, 0xf7bf], /* Private Use */ + [0xf7c0, 0xf7c0], /* Private Use */ + [0xf7c1, 0xf7c1], /* Private Use */ + [0xf7c2, 0xf7c2], /* Private Use */ + [0xf7c3, 0xf7c3], /* Private Use */ + [0xf7c4, 0xf7c4], /* Private Use */ + [0xf7c5, 0xf7c5], /* Private Use */ + [0xf7c6, 0xf7c6], /* Private Use */ + [0xf7c7, 0xf7c7], /* Private Use */ + [0xf7c8, 0xf7c8], /* Private Use */ + [0xf7c9, 0xf7c9], /* Private Use */ + [0xf7ca, 0xf7ca], /* Private Use */ + [0xf7cb, 0xf7cb], /* Private Use */ + [0xf7cc, 0xf7cc], /* Private Use */ + [0xf7cd, 0xf7cd], /* Private Use */ + [0xf7ce, 0xf7ce], /* Private Use */ + [0xf7cf, 0xf7cf], /* Private Use */ + [0xf7d0, 0xf7d0], /* Private Use */ + [0xf7d1, 0xf7d1], /* Private Use */ + [0xf7d2, 0xf7d2], /* Private Use */ + [0xf7d3, 0xf7d3], /* Private Use */ + [0xf7d4, 0xf7d4], /* Private Use */ + [0xf7d5, 0xf7d5], /* Private Use */ + [0xf7d6, 0xf7d6], /* Private Use */ + [0xf7d7, 0xf7d7], /* Private Use */ + [0xf7d8, 0xf7d8], /* Private Use */ + [0xf7d9, 0xf7d9], /* Private Use */ + [0xf7da, 0xf7da], /* Private Use */ + [0xf7db, 0xf7db], /* Private Use */ + [0xf7dc, 0xf7dc], /* Private Use */ + [0xf7dd, 0xf7dd], /* Private Use */ + [0xf7de, 0xf7de], /* Private Use */ + [0xf7df, 0xf7df], /* Private Use */ + [0xf7e0, 0xf7e0], /* Private Use */ + [0xf7e1, 0xf7e1], /* Private Use */ + [0xf7e2, 0xf7e2], /* Private Use */ + [0xf7e3, 0xf7e3], /* Private Use */ + [0xf7e4, 0xf7e4], /* Private Use */ + [0xf7e5, 0xf7e5], /* Private Use */ + [0xf7e6, 0xf7e6], /* Private Use */ + [0xf7e7, 0xf7e7], /* Private Use */ + [0xf7e8, 0xf7e8], /* Private Use */ + [0xf7e9, 0xf7e9], /* Private Use */ + [0xf7ea, 0xf7ea], /* Private Use */ + [0xf7eb, 0xf7eb], /* Private Use */ + [0xf7ec, 0xf7ec], /* Private Use */ + [0xf7ed, 0xf7ed], /* Private Use */ + [0xf7ee, 0xf7ee], /* Private Use */ + [0xf7ef, 0xf7ef], /* Private Use */ + [0xf7f0, 0xf7f0], /* Private Use */ + [0xf7f1, 0xf7f1], /* Private Use */ + [0xf7f2, 0xf7f2], /* Private Use */ + [0xf7f3, 0xf7f3], /* Private Use */ + [0xf7f4, 0xf7f4], /* Private Use */ + [0xf7f5, 0xf7f5], /* Private Use */ + [0xf7f6, 0xf7f6], /* Private Use */ + [0xf7f7, 0xf7f7], /* Private Use */ + [0xf7f8, 0xf7f8], /* Private Use */ + [0xf7f9, 0xf7f9], /* Private Use */ + [0xf7fa, 0xf7fa], /* Private Use */ + [0xf7fb, 0xf7fb], /* Private Use */ + [0xf7fc, 0xf7fc], /* Private Use */ + [0xf7fd, 0xf7fd], /* Private Use */ + [0xf7fe, 0xf7fe], /* Private Use */ + [0xf7ff, 0xf7ff], /* Private Use */ + [0xf800, 0xf800], /* Private Use */ + [0xf801, 0xf801], /* Private Use */ + [0xf802, 0xf802], /* Private Use */ + [0xf803, 0xf803], /* Private Use */ + [0xf804, 0xf804], /* Private Use */ + [0xf805, 0xf805], /* Private Use */ + [0xf806, 0xf806], /* Private Use */ + [0xf807, 0xf807], /* Private Use */ + [0xf808, 0xf808], /* Private Use */ + [0xf809, 0xf809], /* Private Use */ + [0xf80a, 0xf80a], /* Private Use */ + [0xf80b, 0xf80b], /* Private Use */ + [0xf80c, 0xf80c], /* Private Use */ + [0xf80d, 0xf80d], /* Private Use */ + [0xf80e, 0xf80e], /* Private Use */ + [0xf80f, 0xf80f], /* Private Use */ + [0xf810, 0xf810], /* Private Use */ + [0xf811, 0xf811], /* Private Use */ + [0xf812, 0xf812], /* Private Use */ + [0xf813, 0xf813], /* Private Use */ + [0xf814, 0xf814], /* Private Use */ + [0xf815, 0xf815], /* Private Use */ + [0xf816, 0xf816], /* Private Use */ + [0xf817, 0xf817], /* Private Use */ + [0xf818, 0xf818], /* Private Use */ + [0xf819, 0xf819], /* Private Use */ + [0xf81a, 0xf81a], /* Private Use */ + [0xf81b, 0xf81b], /* Private Use */ + [0xf81c, 0xf81c], /* Private Use */ + [0xf81d, 0xf81d], /* Private Use */ + [0xf81e, 0xf81e], /* Private Use */ + [0xf81f, 0xf81f], /* Private Use */ + [0xf820, 0xf820], /* Private Use */ + [0xf821, 0xf821], /* Private Use */ + [0xf822, 0xf822], /* Private Use */ + [0xf823, 0xf823], /* Private Use */ + [0xf824, 0xf824], /* Private Use */ + [0xf825, 0xf825], /* Private Use */ + [0xf826, 0xf826], /* Private Use */ + [0xf827, 0xf827], /* Private Use */ + [0xf828, 0xf828], /* Private Use */ + [0xf829, 0xf829], /* Private Use */ + [0xf82a, 0xf82a], /* Private Use */ + [0xf82b, 0xf82b], /* Private Use */ + [0xf82c, 0xf82c], /* Private Use */ + [0xf82d, 0xf82d], /* Private Use */ + [0xf82e, 0xf82e], /* Private Use */ + [0xf82f, 0xf82f], /* Private Use */ + [0xf830, 0xf830], /* Private Use */ + [0xf831, 0xf831], /* Private Use */ + [0xf832, 0xf832], /* Private Use */ + [0xf833, 0xf833], /* Private Use */ + [0xf834, 0xf834], /* Private Use */ + [0xf835, 0xf835], /* Private Use */ + [0xf836, 0xf836], /* Private Use */ + [0xf837, 0xf837], /* Private Use */ + [0xf838, 0xf838], /* Private Use */ + [0xf839, 0xf839], /* Private Use */ + [0xf83a, 0xf83a], /* Private Use */ + [0xf83b, 0xf83b], /* Private Use */ + [0xf83c, 0xf83c], /* Private Use */ + [0xf83d, 0xf83d], /* Private Use */ + [0xf83e, 0xf83e], /* Private Use */ + [0xf83f, 0xf83f], /* Private Use */ + [0xf840, 0xf840], /* Private Use */ + [0xf841, 0xf841], /* Private Use */ + [0xf842, 0xf842], /* Private Use */ + [0xf843, 0xf843], /* Private Use */ + [0xf844, 0xf844], /* Private Use */ + [0xf845, 0xf845], /* Private Use */ + [0xf846, 0xf846], /* Private Use */ + [0xf847, 0xf847], /* Private Use */ + [0xf848, 0xf848], /* Private Use */ + [0xf849, 0xf849], /* Private Use */ + [0xf84a, 0xf84a], /* Private Use */ + [0xf84b, 0xf84b], /* Private Use */ + [0xf84c, 0xf84c], /* Private Use */ + [0xf84d, 0xf84d], /* Private Use */ + [0xf84e, 0xf84e], /* Private Use */ + [0xf84f, 0xf84f], /* Private Use */ + [0xf850, 0xf850], /* Private Use */ + [0xf851, 0xf851], /* Private Use */ + [0xf852, 0xf852], /* Private Use */ + [0xf853, 0xf853], /* Private Use */ + [0xf854, 0xf854], /* Private Use */ + [0xf855, 0xf855], /* Private Use */ + [0xf856, 0xf856], /* Private Use */ + [0xf857, 0xf857], /* Private Use */ + [0xf858, 0xf858], /* Private Use */ + [0xf859, 0xf859], /* Private Use */ + [0xf85a, 0xf85a], /* Private Use */ + [0xf85b, 0xf85b], /* Private Use */ + [0xf85c, 0xf85c], /* Private Use */ + [0xf85d, 0xf85d], /* Private Use */ + [0xf85e, 0xf85e], /* Private Use */ + [0xf85f, 0xf85f], /* Private Use */ + [0xf860, 0xf860], /* Private Use */ + [0xf861, 0xf861], /* Private Use */ + [0xf862, 0xf862], /* Private Use */ + [0xf863, 0xf863], /* Private Use */ + [0xf864, 0xf864], /* Private Use */ + [0xf865, 0xf865], /* Private Use */ + [0xf866, 0xf866], /* Private Use */ + [0xf867, 0xf867], /* Private Use */ + [0xf868, 0xf868], /* Private Use */ + [0xf869, 0xf869], /* Private Use */ + [0xf86a, 0xf86a], /* Private Use */ + [0xf86b, 0xf86b], /* Private Use */ + [0xf86c, 0xf86c], /* Private Use */ + [0xf86d, 0xf86d], /* Private Use */ + [0xf86e, 0xf86e], /* Private Use */ + [0xf86f, 0xf86f], /* Private Use */ + [0xf870, 0xf870], /* Private Use */ + [0xf871, 0xf871], /* Private Use */ + [0xf872, 0xf872], /* Private Use */ + [0xf873, 0xf873], /* Private Use */ + [0xf874, 0xf874], /* Private Use */ + [0xf875, 0xf875], /* Private Use */ + [0xf876, 0xf876], /* Private Use */ + [0xf877, 0xf877], /* Private Use */ + [0xf878, 0xf878], /* Private Use */ + [0xf879, 0xf879], /* Private Use */ + [0xf87a, 0xf87a], /* Private Use */ + [0xf87b, 0xf87b], /* Private Use */ + [0xf87c, 0xf87c], /* Private Use */ + [0xf87d, 0xf87d], /* Private Use */ + [0xf87e, 0xf87e], /* Private Use */ + [0xf87f, 0xf87f], /* Private Use */ + [0xf880, 0xf880], /* Private Use */ + [0xf881, 0xf881], /* Private Use */ + [0xf882, 0xf882], /* Private Use */ + [0xf883, 0xf883], /* Private Use */ + [0xf884, 0xf884], /* Private Use */ + [0xf885, 0xf885], /* Private Use */ + [0xf886, 0xf886], /* Private Use */ + [0xf887, 0xf887], /* Private Use */ + [0xf888, 0xf888], /* Private Use */ + [0xf889, 0xf889], /* Private Use */ + [0xf88a, 0xf88a], /* Private Use */ + [0xf88b, 0xf88b], /* Private Use */ + [0xf88c, 0xf88c], /* Private Use */ + [0xf88d, 0xf88d], /* Private Use */ + [0xf88e, 0xf88e], /* Private Use */ + [0xf88f, 0xf88f], /* Private Use */ + [0xf890, 0xf890], /* Private Use */ + [0xf891, 0xf891], /* Private Use */ + [0xf892, 0xf892], /* Private Use */ + [0xf893, 0xf893], /* Private Use */ + [0xf894, 0xf894], /* Private Use */ + [0xf895, 0xf895], /* Private Use */ + [0xf896, 0xf896], /* Private Use */ + [0xf897, 0xf897], /* Private Use */ + [0xf898, 0xf898], /* Private Use */ + [0xf899, 0xf899], /* Private Use */ + [0xf89a, 0xf89a], /* Private Use */ + [0xf89b, 0xf89b], /* Private Use */ + [0xf89c, 0xf89c], /* Private Use */ + [0xf89d, 0xf89d], /* Private Use */ + [0xf89e, 0xf89e], /* Private Use */ + [0xf89f, 0xf89f], /* Private Use */ + [0xf8a0, 0xf8a0], /* Private Use */ + [0xf8a1, 0xf8a1], /* Private Use */ + [0xf8a2, 0xf8a2], /* Private Use */ + [0xf8a3, 0xf8a3], /* Private Use */ + [0xf8a4, 0xf8a4], /* Private Use */ + [0xf8a5, 0xf8a5], /* Private Use */ + [0xf8a6, 0xf8a6], /* Private Use */ + [0xf8a7, 0xf8a7], /* Private Use */ + [0xf8a8, 0xf8a8], /* Private Use */ + [0xf8a9, 0xf8a9], /* Private Use */ + [0xf8aa, 0xf8aa], /* Private Use */ + [0xf8ab, 0xf8ab], /* Private Use */ + [0xf8ac, 0xf8ac], /* Private Use */ + [0xf8ad, 0xf8ad], /* Private Use */ + [0xf8ae, 0xf8ae], /* Private Use */ + [0xf8af, 0xf8af], /* Private Use */ + [0xf8b0, 0xf8b0], /* Private Use */ + [0xf8b1, 0xf8b1], /* Private Use */ + [0xf8b2, 0xf8b2], /* Private Use */ + [0xf8b3, 0xf8b3], /* Private Use */ + [0xf8b4, 0xf8b4], /* Private Use */ + [0xf8b5, 0xf8b5], /* Private Use */ + [0xf8b6, 0xf8b6], /* Private Use */ + [0xf8b7, 0xf8b7], /* Private Use */ + [0xf8b8, 0xf8b8], /* Private Use */ + [0xf8b9, 0xf8b9], /* Private Use */ + [0xf8ba, 0xf8ba], /* Private Use */ + [0xf8bb, 0xf8bb], /* Private Use */ + [0xf8bc, 0xf8bc], /* Private Use */ + [0xf8bd, 0xf8bd], /* Private Use */ + [0xf8be, 0xf8be], /* Private Use */ + [0xf8bf, 0xf8bf], /* Private Use */ + [0xf8c0, 0xf8c0], /* Private Use */ + [0xf8c1, 0xf8c1], /* Private Use */ + [0xf8c2, 0xf8c2], /* Private Use */ + [0xf8c3, 0xf8c3], /* Private Use */ + [0xf8c4, 0xf8c4], /* Private Use */ + [0xf8c5, 0xf8c5], /* Private Use */ + [0xf8c6, 0xf8c6], /* Private Use */ + [0xf8c7, 0xf8c7], /* Private Use */ + [0xf8c8, 0xf8c8], /* Private Use */ + [0xf8c9, 0xf8c9], /* Private Use */ + [0xf8ca, 0xf8ca], /* Private Use */ + [0xf8cb, 0xf8cb], /* Private Use */ + [0xf8cc, 0xf8cc], /* Private Use */ + [0xf8cd, 0xf8cd], /* Private Use */ + [0xf8ce, 0xf8ce], /* Private Use */ + [0xf8cf, 0xf8cf], /* Private Use */ + [0xf8d0, 0xf8d0], /* Private Use */ + [0xf8d1, 0xf8d1], /* Private Use */ + [0xf8d2, 0xf8d2], /* Private Use */ + [0xf8d3, 0xf8d3], /* Private Use */ + [0xf8d4, 0xf8d4], /* Private Use */ + [0xf8d5, 0xf8d5], /* Private Use */ + [0xf8d6, 0xf8d6], /* Private Use */ + [0xf8d7, 0xf8d7], /* Private Use */ + [0xf8d8, 0xf8d8], /* Private Use */ + [0xf8d9, 0xf8d9], /* Private Use */ + [0xf8da, 0xf8da], /* Private Use */ + [0xf8db, 0xf8db], /* Private Use */ + [0xf8dc, 0xf8dc], /* Private Use */ + [0xf8dd, 0xf8dd], /* Private Use */ + [0xf8de, 0xf8de], /* Private Use */ + [0xf8df, 0xf8df], /* Private Use */ + [0xf8e0, 0xf8e0], /* Private Use */ + [0xf8e1, 0xf8e1], /* Private Use */ + [0xf8e2, 0xf8e2], /* Private Use */ + [0xf8e3, 0xf8e3], /* Private Use */ + [0xf8e4, 0xf8e4], /* Private Use */ + [0xf8e5, 0xf8e5], /* Private Use */ + [0xf8e6, 0xf8e6], /* Private Use */ + [0xf8e7, 0xf8e7], /* Private Use */ + [0xf8e8, 0xf8e8], /* Private Use */ + [0xf8e9, 0xf8e9], /* Private Use */ + [0xf8ea, 0xf8ea], /* Private Use */ + [0xf8eb, 0xf8eb], /* Private Use */ + [0xf8ec, 0xf8ec], /* Private Use */ + [0xf8ed, 0xf8ed], /* Private Use */ + [0xf8ee, 0xf8ee], /* Private Use */ + [0xf8ef, 0xf8ef], /* Private Use */ + [0xf8f0, 0xf8f0], /* Private Use */ + [0xf8f1, 0xf8f1], /* Private Use */ + [0xf8f2, 0xf8f2], /* Private Use */ + [0xf8f3, 0xf8f3], /* Private Use */ + [0xf8f4, 0xf8f4], /* Private Use */ + [0xf8f5, 0xf8f5], /* Private Use */ + [0xf8f6, 0xf8f6], /* Private Use */ + [0xf8f7, 0xf8f7], /* Private Use */ + [0xf8f8, 0xf8f8], /* Private Use */ + [0xf8f9, 0xf8f9], /* Private Use */ + [0xf8fa, 0xf8fa], /* Private Use */ + [0xf8fb, 0xf8fb], /* Private Use */ + [0xf8fc, 0xf8fc], /* Private Use */ + [0xf8fd, 0xf8fd], /* Private Use */ + [0xf8fe, 0xf8fe], /* Private Use */ + [0xf8ff, 0xf8ff], /* Private Use */ + [0xf900, 0xf900], /* CJK COMPATIBILITY IDEOGRAPH-F900 */ + [0xf901, 0xf901], /* CJK COMPATIBILITY IDEOGRAPH-F901 */ + [0xf902, 0xf902], /* CJK COMPATIBILITY IDEOGRAPH-F902 */ + [0xf903, 0xf903], /* CJK COMPATIBILITY IDEOGRAPH-F903 */ + [0xf904, 0xf904], /* CJK COMPATIBILITY IDEOGRAPH-F904 */ + [0xf905, 0xf905], /* CJK COMPATIBILITY IDEOGRAPH-F905 */ + [0xf906, 0xf906], /* CJK COMPATIBILITY IDEOGRAPH-F906 */ + [0xf907, 0xf907], /* CJK COMPATIBILITY IDEOGRAPH-F907 */ + [0xf908, 0xf908], /* CJK COMPATIBILITY IDEOGRAPH-F908 */ + [0xf909, 0xf909], /* CJK COMPATIBILITY IDEOGRAPH-F909 */ + [0xf90a, 0xf90a], /* CJK COMPATIBILITY IDEOGRAPH-F90A */ + [0xf90b, 0xf90b], /* CJK COMPATIBILITY IDEOGRAPH-F90B */ + [0xf90c, 0xf90c], /* CJK COMPATIBILITY IDEOGRAPH-F90C */ + [0xf90d, 0xf90d], /* CJK COMPATIBILITY IDEOGRAPH-F90D */ + [0xf90e, 0xf90e], /* CJK COMPATIBILITY IDEOGRAPH-F90E */ + [0xf90f, 0xf90f], /* CJK COMPATIBILITY IDEOGRAPH-F90F */ + [0xf910, 0xf910], /* CJK COMPATIBILITY IDEOGRAPH-F910 */ + [0xf911, 0xf911], /* CJK COMPATIBILITY IDEOGRAPH-F911 */ + [0xf912, 0xf912], /* CJK COMPATIBILITY IDEOGRAPH-F912 */ + [0xf913, 0xf913], /* CJK COMPATIBILITY IDEOGRAPH-F913 */ + [0xf914, 0xf914], /* CJK COMPATIBILITY IDEOGRAPH-F914 */ + [0xf915, 0xf915], /* CJK COMPATIBILITY IDEOGRAPH-F915 */ + [0xf916, 0xf916], /* CJK COMPATIBILITY IDEOGRAPH-F916 */ + [0xf917, 0xf917], /* CJK COMPATIBILITY IDEOGRAPH-F917 */ + [0xf918, 0xf918], /* CJK COMPATIBILITY IDEOGRAPH-F918 */ + [0xf919, 0xf919], /* CJK COMPATIBILITY IDEOGRAPH-F919 */ + [0xf91a, 0xf91a], /* CJK COMPATIBILITY IDEOGRAPH-F91A */ + [0xf91b, 0xf91b], /* CJK COMPATIBILITY IDEOGRAPH-F91B */ + [0xf91c, 0xf91c], /* CJK COMPATIBILITY IDEOGRAPH-F91C */ + [0xf91d, 0xf91d], /* CJK COMPATIBILITY IDEOGRAPH-F91D */ + [0xf91e, 0xf91e], /* CJK COMPATIBILITY IDEOGRAPH-F91E */ + [0xf91f, 0xf91f], /* CJK COMPATIBILITY IDEOGRAPH-F91F */ + [0xf920, 0xf920], /* CJK COMPATIBILITY IDEOGRAPH-F920 */ + [0xf921, 0xf921], /* CJK COMPATIBILITY IDEOGRAPH-F921 */ + [0xf922, 0xf922], /* CJK COMPATIBILITY IDEOGRAPH-F922 */ + [0xf923, 0xf923], /* CJK COMPATIBILITY IDEOGRAPH-F923 */ + [0xf924, 0xf924], /* CJK COMPATIBILITY IDEOGRAPH-F924 */ + [0xf925, 0xf925], /* CJK COMPATIBILITY IDEOGRAPH-F925 */ + [0xf926, 0xf926], /* CJK COMPATIBILITY IDEOGRAPH-F926 */ + [0xf927, 0xf927], /* CJK COMPATIBILITY IDEOGRAPH-F927 */ + [0xf928, 0xf928], /* CJK COMPATIBILITY IDEOGRAPH-F928 */ + [0xf929, 0xf929], /* CJK COMPATIBILITY IDEOGRAPH-F929 */ + [0xf92a, 0xf92a], /* CJK COMPATIBILITY IDEOGRAPH-F92A */ + [0xf92b, 0xf92b], /* CJK COMPATIBILITY IDEOGRAPH-F92B */ + [0xf92c, 0xf92c], /* CJK COMPATIBILITY IDEOGRAPH-F92C */ + [0xf92d, 0xf92d], /* CJK COMPATIBILITY IDEOGRAPH-F92D */ + [0xf92e, 0xf92e], /* CJK COMPATIBILITY IDEOGRAPH-F92E */ + [0xf92f, 0xf92f], /* CJK COMPATIBILITY IDEOGRAPH-F92F */ + [0xf930, 0xf930], /* CJK COMPATIBILITY IDEOGRAPH-F930 */ + [0xf931, 0xf931], /* CJK COMPATIBILITY IDEOGRAPH-F931 */ + [0xf932, 0xf932], /* CJK COMPATIBILITY IDEOGRAPH-F932 */ + [0xf933, 0xf933], /* CJK COMPATIBILITY IDEOGRAPH-F933 */ + [0xf934, 0xf934], /* CJK COMPATIBILITY IDEOGRAPH-F934 */ + [0xf935, 0xf935], /* CJK COMPATIBILITY IDEOGRAPH-F935 */ + [0xf936, 0xf936], /* CJK COMPATIBILITY IDEOGRAPH-F936 */ + [0xf937, 0xf937], /* CJK COMPATIBILITY IDEOGRAPH-F937 */ + [0xf938, 0xf938], /* CJK COMPATIBILITY IDEOGRAPH-F938 */ + [0xf939, 0xf939], /* CJK COMPATIBILITY IDEOGRAPH-F939 */ + [0xf93a, 0xf93a], /* CJK COMPATIBILITY IDEOGRAPH-F93A */ + [0xf93b, 0xf93b], /* CJK COMPATIBILITY IDEOGRAPH-F93B */ + [0xf93c, 0xf93c], /* CJK COMPATIBILITY IDEOGRAPH-F93C */ + [0xf93d, 0xf93d], /* CJK COMPATIBILITY IDEOGRAPH-F93D */ + [0xf93e, 0xf93e], /* CJK COMPATIBILITY IDEOGRAPH-F93E */ + [0xf93f, 0xf93f], /* CJK COMPATIBILITY IDEOGRAPH-F93F */ + [0xf940, 0xf940], /* CJK COMPATIBILITY IDEOGRAPH-F940 */ + [0xf941, 0xf941], /* CJK COMPATIBILITY IDEOGRAPH-F941 */ + [0xf942, 0xf942], /* CJK COMPATIBILITY IDEOGRAPH-F942 */ + [0xf943, 0xf943], /* CJK COMPATIBILITY IDEOGRAPH-F943 */ + [0xf944, 0xf944], /* CJK COMPATIBILITY IDEOGRAPH-F944 */ + [0xf945, 0xf945], /* CJK COMPATIBILITY IDEOGRAPH-F945 */ + [0xf946, 0xf946], /* CJK COMPATIBILITY IDEOGRAPH-F946 */ + [0xf947, 0xf947], /* CJK COMPATIBILITY IDEOGRAPH-F947 */ + [0xf948, 0xf948], /* CJK COMPATIBILITY IDEOGRAPH-F948 */ + [0xf949, 0xf949], /* CJK COMPATIBILITY IDEOGRAPH-F949 */ + [0xf94a, 0xf94a], /* CJK COMPATIBILITY IDEOGRAPH-F94A */ + [0xf94b, 0xf94b], /* CJK COMPATIBILITY IDEOGRAPH-F94B */ + [0xf94c, 0xf94c], /* CJK COMPATIBILITY IDEOGRAPH-F94C */ + [0xf94d, 0xf94d], /* CJK COMPATIBILITY IDEOGRAPH-F94D */ + [0xf94e, 0xf94e], /* CJK COMPATIBILITY IDEOGRAPH-F94E */ + [0xf94f, 0xf94f], /* CJK COMPATIBILITY IDEOGRAPH-F94F */ + [0xf950, 0xf950], /* CJK COMPATIBILITY IDEOGRAPH-F950 */ + [0xf951, 0xf951], /* CJK COMPATIBILITY IDEOGRAPH-F951 */ + [0xf952, 0xf952], /* CJK COMPATIBILITY IDEOGRAPH-F952 */ + [0xf953, 0xf953], /* CJK COMPATIBILITY IDEOGRAPH-F953 */ + [0xf954, 0xf954], /* CJK COMPATIBILITY IDEOGRAPH-F954 */ + [0xf955, 0xf955], /* CJK COMPATIBILITY IDEOGRAPH-F955 */ + [0xf956, 0xf956], /* CJK COMPATIBILITY IDEOGRAPH-F956 */ + [0xf957, 0xf957], /* CJK COMPATIBILITY IDEOGRAPH-F957 */ + [0xf958, 0xf958], /* CJK COMPATIBILITY IDEOGRAPH-F958 */ + [0xf959, 0xf959], /* CJK COMPATIBILITY IDEOGRAPH-F959 */ + [0xf95a, 0xf95a], /* CJK COMPATIBILITY IDEOGRAPH-F95A */ + [0xf95b, 0xf95b], /* CJK COMPATIBILITY IDEOGRAPH-F95B */ + [0xf95c, 0xf95c], /* CJK COMPATIBILITY IDEOGRAPH-F95C */ + [0xf95d, 0xf95d], /* CJK COMPATIBILITY IDEOGRAPH-F95D */ + [0xf95e, 0xf95e], /* CJK COMPATIBILITY IDEOGRAPH-F95E */ + [0xf95f, 0xf95f], /* CJK COMPATIBILITY IDEOGRAPH-F95F */ + [0xf960, 0xf960], /* CJK COMPATIBILITY IDEOGRAPH-F960 */ + [0xf961, 0xf961], /* CJK COMPATIBILITY IDEOGRAPH-F961 */ + [0xf962, 0xf962], /* CJK COMPATIBILITY IDEOGRAPH-F962 */ + [0xf963, 0xf963], /* CJK COMPATIBILITY IDEOGRAPH-F963 */ + [0xf964, 0xf964], /* CJK COMPATIBILITY IDEOGRAPH-F964 */ + [0xf965, 0xf965], /* CJK COMPATIBILITY IDEOGRAPH-F965 */ + [0xf966, 0xf966], /* CJK COMPATIBILITY IDEOGRAPH-F966 */ + [0xf967, 0xf967], /* CJK COMPATIBILITY IDEOGRAPH-F967 */ + [0xf968, 0xf968], /* CJK COMPATIBILITY IDEOGRAPH-F968 */ + [0xf969, 0xf969], /* CJK COMPATIBILITY IDEOGRAPH-F969 */ + [0xf96a, 0xf96a], /* CJK COMPATIBILITY IDEOGRAPH-F96A */ + [0xf96b, 0xf96b], /* CJK COMPATIBILITY IDEOGRAPH-F96B */ + [0xf96c, 0xf96c], /* CJK COMPATIBILITY IDEOGRAPH-F96C */ + [0xf96d, 0xf96d], /* CJK COMPATIBILITY IDEOGRAPH-F96D */ + [0xf96e, 0xf96e], /* CJK COMPATIBILITY IDEOGRAPH-F96E */ + [0xf96f, 0xf96f], /* CJK COMPATIBILITY IDEOGRAPH-F96F */ + [0xf970, 0xf970], /* CJK COMPATIBILITY IDEOGRAPH-F970 */ + [0xf971, 0xf971], /* CJK COMPATIBILITY IDEOGRAPH-F971 */ + [0xf972, 0xf972], /* CJK COMPATIBILITY IDEOGRAPH-F972 */ + [0xf973, 0xf973], /* CJK COMPATIBILITY IDEOGRAPH-F973 */ + [0xf974, 0xf974], /* CJK COMPATIBILITY IDEOGRAPH-F974 */ + [0xf975, 0xf975], /* CJK COMPATIBILITY IDEOGRAPH-F975 */ + [0xf976, 0xf976], /* CJK COMPATIBILITY IDEOGRAPH-F976 */ + [0xf977, 0xf977], /* CJK COMPATIBILITY IDEOGRAPH-F977 */ + [0xf978, 0xf978], /* CJK COMPATIBILITY IDEOGRAPH-F978 */ + [0xf979, 0xf979], /* CJK COMPATIBILITY IDEOGRAPH-F979 */ + [0xf97a, 0xf97a], /* CJK COMPATIBILITY IDEOGRAPH-F97A */ + [0xf97b, 0xf97b], /* CJK COMPATIBILITY IDEOGRAPH-F97B */ + [0xf97c, 0xf97c], /* CJK COMPATIBILITY IDEOGRAPH-F97C */ + [0xf97d, 0xf97d], /* CJK COMPATIBILITY IDEOGRAPH-F97D */ + [0xf97e, 0xf97e], /* CJK COMPATIBILITY IDEOGRAPH-F97E */ + [0xf97f, 0xf97f], /* CJK COMPATIBILITY IDEOGRAPH-F97F */ + [0xf980, 0xf980], /* CJK COMPATIBILITY IDEOGRAPH-F980 */ + [0xf981, 0xf981], /* CJK COMPATIBILITY IDEOGRAPH-F981 */ + [0xf982, 0xf982], /* CJK COMPATIBILITY IDEOGRAPH-F982 */ + [0xf983, 0xf983], /* CJK COMPATIBILITY IDEOGRAPH-F983 */ + [0xf984, 0xf984], /* CJK COMPATIBILITY IDEOGRAPH-F984 */ + [0xf985, 0xf985], /* CJK COMPATIBILITY IDEOGRAPH-F985 */ + [0xf986, 0xf986], /* CJK COMPATIBILITY IDEOGRAPH-F986 */ + [0xf987, 0xf987], /* CJK COMPATIBILITY IDEOGRAPH-F987 */ + [0xf988, 0xf988], /* CJK COMPATIBILITY IDEOGRAPH-F988 */ + [0xf989, 0xf989], /* CJK COMPATIBILITY IDEOGRAPH-F989 */ + [0xf98a, 0xf98a], /* CJK COMPATIBILITY IDEOGRAPH-F98A */ + [0xf98b, 0xf98b], /* CJK COMPATIBILITY IDEOGRAPH-F98B */ + [0xf98c, 0xf98c], /* CJK COMPATIBILITY IDEOGRAPH-F98C */ + [0xf98d, 0xf98d], /* CJK COMPATIBILITY IDEOGRAPH-F98D */ + [0xf98e, 0xf98e], /* CJK COMPATIBILITY IDEOGRAPH-F98E */ + [0xf98f, 0xf98f], /* CJK COMPATIBILITY IDEOGRAPH-F98F */ + [0xf990, 0xf990], /* CJK COMPATIBILITY IDEOGRAPH-F990 */ + [0xf991, 0xf991], /* CJK COMPATIBILITY IDEOGRAPH-F991 */ + [0xf992, 0xf992], /* CJK COMPATIBILITY IDEOGRAPH-F992 */ + [0xf993, 0xf993], /* CJK COMPATIBILITY IDEOGRAPH-F993 */ + [0xf994, 0xf994], /* CJK COMPATIBILITY IDEOGRAPH-F994 */ + [0xf995, 0xf995], /* CJK COMPATIBILITY IDEOGRAPH-F995 */ + [0xf996, 0xf996], /* CJK COMPATIBILITY IDEOGRAPH-F996 */ + [0xf997, 0xf997], /* CJK COMPATIBILITY IDEOGRAPH-F997 */ + [0xf998, 0xf998], /* CJK COMPATIBILITY IDEOGRAPH-F998 */ + [0xf999, 0xf999], /* CJK COMPATIBILITY IDEOGRAPH-F999 */ + [0xf99a, 0xf99a], /* CJK COMPATIBILITY IDEOGRAPH-F99A */ + [0xf99b, 0xf99b], /* CJK COMPATIBILITY IDEOGRAPH-F99B */ + [0xf99c, 0xf99c], /* CJK COMPATIBILITY IDEOGRAPH-F99C */ + [0xf99d, 0xf99d], /* CJK COMPATIBILITY IDEOGRAPH-F99D */ + [0xf99e, 0xf99e], /* CJK COMPATIBILITY IDEOGRAPH-F99E */ + [0xf99f, 0xf99f], /* CJK COMPATIBILITY IDEOGRAPH-F99F */ + [0xf9a0, 0xf9a0], /* CJK COMPATIBILITY IDEOGRAPH-F9A0 */ + [0xf9a1, 0xf9a1], /* CJK COMPATIBILITY IDEOGRAPH-F9A1 */ + [0xf9a2, 0xf9a2], /* CJK COMPATIBILITY IDEOGRAPH-F9A2 */ + [0xf9a3, 0xf9a3], /* CJK COMPATIBILITY IDEOGRAPH-F9A3 */ + [0xf9a4, 0xf9a4], /* CJK COMPATIBILITY IDEOGRAPH-F9A4 */ + [0xf9a5, 0xf9a5], /* CJK COMPATIBILITY IDEOGRAPH-F9A5 */ + [0xf9a6, 0xf9a6], /* CJK COMPATIBILITY IDEOGRAPH-F9A6 */ + [0xf9a7, 0xf9a7], /* CJK COMPATIBILITY IDEOGRAPH-F9A7 */ + [0xf9a8, 0xf9a8], /* CJK COMPATIBILITY IDEOGRAPH-F9A8 */ + [0xf9a9, 0xf9a9], /* CJK COMPATIBILITY IDEOGRAPH-F9A9 */ + [0xf9aa, 0xf9aa], /* CJK COMPATIBILITY IDEOGRAPH-F9AA */ + [0xf9ab, 0xf9ab], /* CJK COMPATIBILITY IDEOGRAPH-F9AB */ + [0xf9ac, 0xf9ac], /* CJK COMPATIBILITY IDEOGRAPH-F9AC */ + [0xf9ad, 0xf9ad], /* CJK COMPATIBILITY IDEOGRAPH-F9AD */ + [0xf9ae, 0xf9ae], /* CJK COMPATIBILITY IDEOGRAPH-F9AE */ + [0xf9af, 0xf9af], /* CJK COMPATIBILITY IDEOGRAPH-F9AF */ + [0xf9b0, 0xf9b0], /* CJK COMPATIBILITY IDEOGRAPH-F9B0 */ + [0xf9b1, 0xf9b1], /* CJK COMPATIBILITY IDEOGRAPH-F9B1 */ + [0xf9b2, 0xf9b2], /* CJK COMPATIBILITY IDEOGRAPH-F9B2 */ + [0xf9b3, 0xf9b3], /* CJK COMPATIBILITY IDEOGRAPH-F9B3 */ + [0xf9b4, 0xf9b4], /* CJK COMPATIBILITY IDEOGRAPH-F9B4 */ + [0xf9b5, 0xf9b5], /* CJK COMPATIBILITY IDEOGRAPH-F9B5 */ + [0xf9b6, 0xf9b6], /* CJK COMPATIBILITY IDEOGRAPH-F9B6 */ + [0xf9b7, 0xf9b7], /* CJK COMPATIBILITY IDEOGRAPH-F9B7 */ + [0xf9b8, 0xf9b8], /* CJK COMPATIBILITY IDEOGRAPH-F9B8 */ + [0xf9b9, 0xf9b9], /* CJK COMPATIBILITY IDEOGRAPH-F9B9 */ + [0xf9ba, 0xf9ba], /* CJK COMPATIBILITY IDEOGRAPH-F9BA */ + [0xf9bb, 0xf9bb], /* CJK COMPATIBILITY IDEOGRAPH-F9BB */ + [0xf9bc, 0xf9bc], /* CJK COMPATIBILITY IDEOGRAPH-F9BC */ + [0xf9bd, 0xf9bd], /* CJK COMPATIBILITY IDEOGRAPH-F9BD */ + [0xf9be, 0xf9be], /* CJK COMPATIBILITY IDEOGRAPH-F9BE */ + [0xf9bf, 0xf9bf], /* CJK COMPATIBILITY IDEOGRAPH-F9BF */ + [0xf9c0, 0xf9c0], /* CJK COMPATIBILITY IDEOGRAPH-F9C0 */ + [0xf9c1, 0xf9c1], /* CJK COMPATIBILITY IDEOGRAPH-F9C1 */ + [0xf9c2, 0xf9c2], /* CJK COMPATIBILITY IDEOGRAPH-F9C2 */ + [0xf9c3, 0xf9c3], /* CJK COMPATIBILITY IDEOGRAPH-F9C3 */ + [0xf9c4, 0xf9c4], /* CJK COMPATIBILITY IDEOGRAPH-F9C4 */ + [0xf9c5, 0xf9c5], /* CJK COMPATIBILITY IDEOGRAPH-F9C5 */ + [0xf9c6, 0xf9c6], /* CJK COMPATIBILITY IDEOGRAPH-F9C6 */ + [0xf9c7, 0xf9c7], /* CJK COMPATIBILITY IDEOGRAPH-F9C7 */ + [0xf9c8, 0xf9c8], /* CJK COMPATIBILITY IDEOGRAPH-F9C8 */ + [0xf9c9, 0xf9c9], /* CJK COMPATIBILITY IDEOGRAPH-F9C9 */ + [0xf9ca, 0xf9ca], /* CJK COMPATIBILITY IDEOGRAPH-F9CA */ + [0xf9cb, 0xf9cb], /* CJK COMPATIBILITY IDEOGRAPH-F9CB */ + [0xf9cc, 0xf9cc], /* CJK COMPATIBILITY IDEOGRAPH-F9CC */ + [0xf9cd, 0xf9cd], /* CJK COMPATIBILITY IDEOGRAPH-F9CD */ + [0xf9ce, 0xf9ce], /* CJK COMPATIBILITY IDEOGRAPH-F9CE */ + [0xf9cf, 0xf9cf], /* CJK COMPATIBILITY IDEOGRAPH-F9CF */ + [0xf9d0, 0xf9d0], /* CJK COMPATIBILITY IDEOGRAPH-F9D0 */ + [0xf9d1, 0xf9d1], /* CJK COMPATIBILITY IDEOGRAPH-F9D1 */ + [0xf9d2, 0xf9d2], /* CJK COMPATIBILITY IDEOGRAPH-F9D2 */ + [0xf9d3, 0xf9d3], /* CJK COMPATIBILITY IDEOGRAPH-F9D3 */ + [0xf9d4, 0xf9d4], /* CJK COMPATIBILITY IDEOGRAPH-F9D4 */ + [0xf9d5, 0xf9d5], /* CJK COMPATIBILITY IDEOGRAPH-F9D5 */ + [0xf9d6, 0xf9d6], /* CJK COMPATIBILITY IDEOGRAPH-F9D6 */ + [0xf9d7, 0xf9d7], /* CJK COMPATIBILITY IDEOGRAPH-F9D7 */ + [0xf9d8, 0xf9d8], /* CJK COMPATIBILITY IDEOGRAPH-F9D8 */ + [0xf9d9, 0xf9d9], /* CJK COMPATIBILITY IDEOGRAPH-F9D9 */ + [0xf9da, 0xf9da], /* CJK COMPATIBILITY IDEOGRAPH-F9DA */ + [0xf9db, 0xf9db], /* CJK COMPATIBILITY IDEOGRAPH-F9DB */ + [0xf9dc, 0xf9dc], /* CJK COMPATIBILITY IDEOGRAPH-F9DC */ + [0xf9dd, 0xf9dd], /* CJK COMPATIBILITY IDEOGRAPH-F9DD */ + [0xf9de, 0xf9de], /* CJK COMPATIBILITY IDEOGRAPH-F9DE */ + [0xf9df, 0xf9df], /* CJK COMPATIBILITY IDEOGRAPH-F9DF */ + [0xf9e0, 0xf9e0], /* CJK COMPATIBILITY IDEOGRAPH-F9E0 */ + [0xf9e1, 0xf9e1], /* CJK COMPATIBILITY IDEOGRAPH-F9E1 */ + [0xf9e2, 0xf9e2], /* CJK COMPATIBILITY IDEOGRAPH-F9E2 */ + [0xf9e3, 0xf9e3], /* CJK COMPATIBILITY IDEOGRAPH-F9E3 */ + [0xf9e4, 0xf9e4], /* CJK COMPATIBILITY IDEOGRAPH-F9E4 */ + [0xf9e5, 0xf9e5], /* CJK COMPATIBILITY IDEOGRAPH-F9E5 */ + [0xf9e6, 0xf9e6], /* CJK COMPATIBILITY IDEOGRAPH-F9E6 */ + [0xf9e7, 0xf9e7], /* CJK COMPATIBILITY IDEOGRAPH-F9E7 */ + [0xf9e8, 0xf9e8], /* CJK COMPATIBILITY IDEOGRAPH-F9E8 */ + [0xf9e9, 0xf9e9], /* CJK COMPATIBILITY IDEOGRAPH-F9E9 */ + [0xf9ea, 0xf9ea], /* CJK COMPATIBILITY IDEOGRAPH-F9EA */ + [0xf9eb, 0xf9eb], /* CJK COMPATIBILITY IDEOGRAPH-F9EB */ + [0xf9ec, 0xf9ec], /* CJK COMPATIBILITY IDEOGRAPH-F9EC */ + [0xf9ed, 0xf9ed], /* CJK COMPATIBILITY IDEOGRAPH-F9ED */ + [0xf9ee, 0xf9ee], /* CJK COMPATIBILITY IDEOGRAPH-F9EE */ + [0xf9ef, 0xf9ef], /* CJK COMPATIBILITY IDEOGRAPH-F9EF */ + [0xf9f0, 0xf9f0], /* CJK COMPATIBILITY IDEOGRAPH-F9F0 */ + [0xf9f1, 0xf9f1], /* CJK COMPATIBILITY IDEOGRAPH-F9F1 */ + [0xf9f2, 0xf9f2], /* CJK COMPATIBILITY IDEOGRAPH-F9F2 */ + [0xf9f3, 0xf9f3], /* CJK COMPATIBILITY IDEOGRAPH-F9F3 */ + [0xf9f4, 0xf9f4], /* CJK COMPATIBILITY IDEOGRAPH-F9F4 */ + [0xf9f5, 0xf9f5], /* CJK COMPATIBILITY IDEOGRAPH-F9F5 */ + [0xf9f6, 0xf9f6], /* CJK COMPATIBILITY IDEOGRAPH-F9F6 */ + [0xf9f7, 0xf9f7], /* CJK COMPATIBILITY IDEOGRAPH-F9F7 */ + [0xf9f8, 0xf9f8], /* CJK COMPATIBILITY IDEOGRAPH-F9F8 */ + [0xf9f9, 0xf9f9], /* CJK COMPATIBILITY IDEOGRAPH-F9F9 */ + [0xf9fa, 0xf9fa], /* CJK COMPATIBILITY IDEOGRAPH-F9FA */ + [0xf9fb, 0xf9fb], /* CJK COMPATIBILITY IDEOGRAPH-F9FB */ + [0xf9fc, 0xf9fc], /* CJK COMPATIBILITY IDEOGRAPH-F9FC */ + [0xf9fd, 0xf9fd], /* CJK COMPATIBILITY IDEOGRAPH-F9FD */ + [0xf9fe, 0xf9fe], /* CJK COMPATIBILITY IDEOGRAPH-F9FE */ + [0xf9ff, 0xf9ff], /* CJK COMPATIBILITY IDEOGRAPH-F9FF */ + [0xfa00, 0xfa00], /* CJK COMPATIBILITY IDEOGRAPH-FA00 */ + [0xfa01, 0xfa01], /* CJK COMPATIBILITY IDEOGRAPH-FA01 */ + [0xfa02, 0xfa02], /* CJK COMPATIBILITY IDEOGRAPH-FA02 */ + [0xfa03, 0xfa03], /* CJK COMPATIBILITY IDEOGRAPH-FA03 */ + [0xfa04, 0xfa04], /* CJK COMPATIBILITY IDEOGRAPH-FA04 */ + [0xfa05, 0xfa05], /* CJK COMPATIBILITY IDEOGRAPH-FA05 */ + [0xfa06, 0xfa06], /* CJK COMPATIBILITY IDEOGRAPH-FA06 */ + [0xfa07, 0xfa07], /* CJK COMPATIBILITY IDEOGRAPH-FA07 */ + [0xfa08, 0xfa08], /* CJK COMPATIBILITY IDEOGRAPH-FA08 */ + [0xfa09, 0xfa09], /* CJK COMPATIBILITY IDEOGRAPH-FA09 */ + [0xfa0a, 0xfa0a], /* CJK COMPATIBILITY IDEOGRAPH-FA0A */ + [0xfa0b, 0xfa0b], /* CJK COMPATIBILITY IDEOGRAPH-FA0B */ + [0xfa0c, 0xfa0c], /* CJK COMPATIBILITY IDEOGRAPH-FA0C */ + [0xfa0d, 0xfa0d], /* CJK COMPATIBILITY IDEOGRAPH-FA0D */ + [0xfa0e, 0xfa0e], /* CJK COMPATIBILITY IDEOGRAPH-FA0E */ + [0xfa0f, 0xfa0f], /* CJK COMPATIBILITY IDEOGRAPH-FA0F */ + [0xfa10, 0xfa10], /* CJK COMPATIBILITY IDEOGRAPH-FA10 */ + [0xfa11, 0xfa11], /* CJK COMPATIBILITY IDEOGRAPH-FA11 */ + [0xfa12, 0xfa12], /* CJK COMPATIBILITY IDEOGRAPH-FA12 */ + [0xfa13, 0xfa13], /* CJK COMPATIBILITY IDEOGRAPH-FA13 */ + [0xfa14, 0xfa14], /* CJK COMPATIBILITY IDEOGRAPH-FA14 */ + [0xfa15, 0xfa15], /* CJK COMPATIBILITY IDEOGRAPH-FA15 */ + [0xfa16, 0xfa16], /* CJK COMPATIBILITY IDEOGRAPH-FA16 */ + [0xfa17, 0xfa17], /* CJK COMPATIBILITY IDEOGRAPH-FA17 */ + [0xfa18, 0xfa18], /* CJK COMPATIBILITY IDEOGRAPH-FA18 */ + [0xfa19, 0xfa19], /* CJK COMPATIBILITY IDEOGRAPH-FA19 */ + [0xfa1a, 0xfa1a], /* CJK COMPATIBILITY IDEOGRAPH-FA1A */ + [0xfa1b, 0xfa1b], /* CJK COMPATIBILITY IDEOGRAPH-FA1B */ + [0xfa1c, 0xfa1c], /* CJK COMPATIBILITY IDEOGRAPH-FA1C */ + [0xfa1d, 0xfa1d], /* CJK COMPATIBILITY IDEOGRAPH-FA1D */ + [0xfa1e, 0xfa1e], /* CJK COMPATIBILITY IDEOGRAPH-FA1E */ + [0xfa1f, 0xfa1f], /* CJK COMPATIBILITY IDEOGRAPH-FA1F */ + [0xfa20, 0xfa20], /* CJK COMPATIBILITY IDEOGRAPH-FA20 */ + [0xfa21, 0xfa21], /* CJK COMPATIBILITY IDEOGRAPH-FA21 */ + [0xfa22, 0xfa22], /* CJK COMPATIBILITY IDEOGRAPH-FA22 */ + [0xfa23, 0xfa23], /* CJK COMPATIBILITY IDEOGRAPH-FA23 */ + [0xfa24, 0xfa24], /* CJK COMPATIBILITY IDEOGRAPH-FA24 */ + [0xfa25, 0xfa25], /* CJK COMPATIBILITY IDEOGRAPH-FA25 */ + [0xfa26, 0xfa26], /* CJK COMPATIBILITY IDEOGRAPH-FA26 */ + [0xfa27, 0xfa27], /* CJK COMPATIBILITY IDEOGRAPH-FA27 */ + [0xfa28, 0xfa28], /* CJK COMPATIBILITY IDEOGRAPH-FA28 */ + [0xfa29, 0xfa29], /* CJK COMPATIBILITY IDEOGRAPH-FA29 */ + [0xfa2a, 0xfa2a], /* CJK COMPATIBILITY IDEOGRAPH-FA2A */ + [0xfa2b, 0xfa2b], /* CJK COMPATIBILITY IDEOGRAPH-FA2B */ + [0xfa2c, 0xfa2c], /* CJK COMPATIBILITY IDEOGRAPH-FA2C */ + [0xfa2d, 0xfa2d], /* CJK COMPATIBILITY IDEOGRAPH-FA2D */ + [0xfa2e, 0xfa2e], /* CJK COMPATIBILITY IDEOGRAPH-FA2E */ + [0xfa2f, 0xfa2f], /* CJK COMPATIBILITY IDEOGRAPH-FA2F */ + [0xfa30, 0xfa30], /* CJK COMPATIBILITY IDEOGRAPH-FA30 */ + [0xfa31, 0xfa31], /* CJK COMPATIBILITY IDEOGRAPH-FA31 */ + [0xfa32, 0xfa32], /* CJK COMPATIBILITY IDEOGRAPH-FA32 */ + [0xfa33, 0xfa33], /* CJK COMPATIBILITY IDEOGRAPH-FA33 */ + [0xfa34, 0xfa34], /* CJK COMPATIBILITY IDEOGRAPH-FA34 */ + [0xfa35, 0xfa35], /* CJK COMPATIBILITY IDEOGRAPH-FA35 */ + [0xfa36, 0xfa36], /* CJK COMPATIBILITY IDEOGRAPH-FA36 */ + [0xfa37, 0xfa37], /* CJK COMPATIBILITY IDEOGRAPH-FA37 */ + [0xfa38, 0xfa38], /* CJK COMPATIBILITY IDEOGRAPH-FA38 */ + [0xfa39, 0xfa39], /* CJK COMPATIBILITY IDEOGRAPH-FA39 */ + [0xfa3a, 0xfa3a], /* CJK COMPATIBILITY IDEOGRAPH-FA3A */ + [0xfa3b, 0xfa3b], /* CJK COMPATIBILITY IDEOGRAPH-FA3B */ + [0xfa3c, 0xfa3c], /* CJK COMPATIBILITY IDEOGRAPH-FA3C */ + [0xfa3d, 0xfa3d], /* CJK COMPATIBILITY IDEOGRAPH-FA3D */ + [0xfa3e, 0xfa3e], /* CJK COMPATIBILITY IDEOGRAPH-FA3E */ + [0xfa3f, 0xfa3f], /* CJK COMPATIBILITY IDEOGRAPH-FA3F */ + [0xfa40, 0xfa40], /* CJK COMPATIBILITY IDEOGRAPH-FA40 */ + [0xfa41, 0xfa41], /* CJK COMPATIBILITY IDEOGRAPH-FA41 */ + [0xfa42, 0xfa42], /* CJK COMPATIBILITY IDEOGRAPH-FA42 */ + [0xfa43, 0xfa43], /* CJK COMPATIBILITY IDEOGRAPH-FA43 */ + [0xfa44, 0xfa44], /* CJK COMPATIBILITY IDEOGRAPH-FA44 */ + [0xfa45, 0xfa45], /* CJK COMPATIBILITY IDEOGRAPH-FA45 */ + [0xfa46, 0xfa46], /* CJK COMPATIBILITY IDEOGRAPH-FA46 */ + [0xfa47, 0xfa47], /* CJK COMPATIBILITY IDEOGRAPH-FA47 */ + [0xfa48, 0xfa48], /* CJK COMPATIBILITY IDEOGRAPH-FA48 */ + [0xfa49, 0xfa49], /* CJK COMPATIBILITY IDEOGRAPH-FA49 */ + [0xfa4a, 0xfa4a], /* CJK COMPATIBILITY IDEOGRAPH-FA4A */ + [0xfa4b, 0xfa4b], /* CJK COMPATIBILITY IDEOGRAPH-FA4B */ + [0xfa4c, 0xfa4c], /* CJK COMPATIBILITY IDEOGRAPH-FA4C */ + [0xfa4d, 0xfa4d], /* CJK COMPATIBILITY IDEOGRAPH-FA4D */ + [0xfa4e, 0xfa4e], /* CJK COMPATIBILITY IDEOGRAPH-FA4E */ + [0xfa4f, 0xfa4f], /* CJK COMPATIBILITY IDEOGRAPH-FA4F */ + [0xfa50, 0xfa50], /* CJK COMPATIBILITY IDEOGRAPH-FA50 */ + [0xfa51, 0xfa51], /* CJK COMPATIBILITY IDEOGRAPH-FA51 */ + [0xfa52, 0xfa52], /* CJK COMPATIBILITY IDEOGRAPH-FA52 */ + [0xfa53, 0xfa53], /* CJK COMPATIBILITY IDEOGRAPH-FA53 */ + [0xfa54, 0xfa54], /* CJK COMPATIBILITY IDEOGRAPH-FA54 */ + [0xfa55, 0xfa55], /* CJK COMPATIBILITY IDEOGRAPH-FA55 */ + [0xfa56, 0xfa56], /* CJK COMPATIBILITY IDEOGRAPH-FA56 */ + [0xfa57, 0xfa57], /* CJK COMPATIBILITY IDEOGRAPH-FA57 */ + [0xfa58, 0xfa58], /* CJK COMPATIBILITY IDEOGRAPH-FA58 */ + [0xfa59, 0xfa59], /* CJK COMPATIBILITY IDEOGRAPH-FA59 */ + [0xfa5a, 0xfa5a], /* CJK COMPATIBILITY IDEOGRAPH-FA5A */ + [0xfa5b, 0xfa5b], /* CJK COMPATIBILITY IDEOGRAPH-FA5B */ + [0xfa5c, 0xfa5c], /* CJK COMPATIBILITY IDEOGRAPH-FA5C */ + [0xfa5d, 0xfa5d], /* CJK COMPATIBILITY IDEOGRAPH-FA5D */ + [0xfa5e, 0xfa5e], /* CJK COMPATIBILITY IDEOGRAPH-FA5E */ + [0xfa5f, 0xfa5f], /* CJK COMPATIBILITY IDEOGRAPH-FA5F */ + [0xfa60, 0xfa60], /* CJK COMPATIBILITY IDEOGRAPH-FA60 */ + [0xfa61, 0xfa61], /* CJK COMPATIBILITY IDEOGRAPH-FA61 */ + [0xfa62, 0xfa62], /* CJK COMPATIBILITY IDEOGRAPH-FA62 */ + [0xfa63, 0xfa63], /* CJK COMPATIBILITY IDEOGRAPH-FA63 */ + [0xfa64, 0xfa64], /* CJK COMPATIBILITY IDEOGRAPH-FA64 */ + [0xfa65, 0xfa65], /* CJK COMPATIBILITY IDEOGRAPH-FA65 */ + [0xfa66, 0xfa66], /* CJK COMPATIBILITY IDEOGRAPH-FA66 */ + [0xfa67, 0xfa67], /* CJK COMPATIBILITY IDEOGRAPH-FA67 */ + [0xfa68, 0xfa68], /* CJK COMPATIBILITY IDEOGRAPH-FA68 */ + [0xfa69, 0xfa69], /* CJK COMPATIBILITY IDEOGRAPH-FA69 */ + [0xfa6a, 0xfa6a], /* CJK COMPATIBILITY IDEOGRAPH-FA6A */ + [0xfa6b, 0xfa6b], /* CJK COMPATIBILITY IDEOGRAPH-FA6B */ + [0xfa6c, 0xfa6c], /* CJK COMPATIBILITY IDEOGRAPH-FA6C */ + [0xfa6d, 0xfa6d], /* CJK COMPATIBILITY IDEOGRAPH-FA6D */ + [0xfa6e, 0xfa6e], + [0xfa6f, 0xfa6f], + [0xfa70, 0xfa70], /* CJK COMPATIBILITY IDEOGRAPH-FA70 */ + [0xfa71, 0xfa71], /* CJK COMPATIBILITY IDEOGRAPH-FA71 */ + [0xfa72, 0xfa72], /* CJK COMPATIBILITY IDEOGRAPH-FA72 */ + [0xfa73, 0xfa73], /* CJK COMPATIBILITY IDEOGRAPH-FA73 */ + [0xfa74, 0xfa74], /* CJK COMPATIBILITY IDEOGRAPH-FA74 */ + [0xfa75, 0xfa75], /* CJK COMPATIBILITY IDEOGRAPH-FA75 */ + [0xfa76, 0xfa76], /* CJK COMPATIBILITY IDEOGRAPH-FA76 */ + [0xfa77, 0xfa77], /* CJK COMPATIBILITY IDEOGRAPH-FA77 */ + [0xfa78, 0xfa78], /* CJK COMPATIBILITY IDEOGRAPH-FA78 */ + [0xfa79, 0xfa79], /* CJK COMPATIBILITY IDEOGRAPH-FA79 */ + [0xfa7a, 0xfa7a], /* CJK COMPATIBILITY IDEOGRAPH-FA7A */ + [0xfa7b, 0xfa7b], /* CJK COMPATIBILITY IDEOGRAPH-FA7B */ + [0xfa7c, 0xfa7c], /* CJK COMPATIBILITY IDEOGRAPH-FA7C */ + [0xfa7d, 0xfa7d], /* CJK COMPATIBILITY IDEOGRAPH-FA7D */ + [0xfa7e, 0xfa7e], /* CJK COMPATIBILITY IDEOGRAPH-FA7E */ + [0xfa7f, 0xfa7f], /* CJK COMPATIBILITY IDEOGRAPH-FA7F */ + [0xfa80, 0xfa80], /* CJK COMPATIBILITY IDEOGRAPH-FA80 */ + [0xfa81, 0xfa81], /* CJK COMPATIBILITY IDEOGRAPH-FA81 */ + [0xfa82, 0xfa82], /* CJK COMPATIBILITY IDEOGRAPH-FA82 */ + [0xfa83, 0xfa83], /* CJK COMPATIBILITY IDEOGRAPH-FA83 */ + [0xfa84, 0xfa84], /* CJK COMPATIBILITY IDEOGRAPH-FA84 */ + [0xfa85, 0xfa85], /* CJK COMPATIBILITY IDEOGRAPH-FA85 */ + [0xfa86, 0xfa86], /* CJK COMPATIBILITY IDEOGRAPH-FA86 */ + [0xfa87, 0xfa87], /* CJK COMPATIBILITY IDEOGRAPH-FA87 */ + [0xfa88, 0xfa88], /* CJK COMPATIBILITY IDEOGRAPH-FA88 */ + [0xfa89, 0xfa89], /* CJK COMPATIBILITY IDEOGRAPH-FA89 */ + [0xfa8a, 0xfa8a], /* CJK COMPATIBILITY IDEOGRAPH-FA8A */ + [0xfa8b, 0xfa8b], /* CJK COMPATIBILITY IDEOGRAPH-FA8B */ + [0xfa8c, 0xfa8c], /* CJK COMPATIBILITY IDEOGRAPH-FA8C */ + [0xfa8d, 0xfa8d], /* CJK COMPATIBILITY IDEOGRAPH-FA8D */ + [0xfa8e, 0xfa8e], /* CJK COMPATIBILITY IDEOGRAPH-FA8E */ + [0xfa8f, 0xfa8f], /* CJK COMPATIBILITY IDEOGRAPH-FA8F */ + [0xfa90, 0xfa90], /* CJK COMPATIBILITY IDEOGRAPH-FA90 */ + [0xfa91, 0xfa91], /* CJK COMPATIBILITY IDEOGRAPH-FA91 */ + [0xfa92, 0xfa92], /* CJK COMPATIBILITY IDEOGRAPH-FA92 */ + [0xfa93, 0xfa93], /* CJK COMPATIBILITY IDEOGRAPH-FA93 */ + [0xfa94, 0xfa94], /* CJK COMPATIBILITY IDEOGRAPH-FA94 */ + [0xfa95, 0xfa95], /* CJK COMPATIBILITY IDEOGRAPH-FA95 */ + [0xfa96, 0xfa96], /* CJK COMPATIBILITY IDEOGRAPH-FA96 */ + [0xfa97, 0xfa97], /* CJK COMPATIBILITY IDEOGRAPH-FA97 */ + [0xfa98, 0xfa98], /* CJK COMPATIBILITY IDEOGRAPH-FA98 */ + [0xfa99, 0xfa99], /* CJK COMPATIBILITY IDEOGRAPH-FA99 */ + [0xfa9a, 0xfa9a], /* CJK COMPATIBILITY IDEOGRAPH-FA9A */ + [0xfa9b, 0xfa9b], /* CJK COMPATIBILITY IDEOGRAPH-FA9B */ + [0xfa9c, 0xfa9c], /* CJK COMPATIBILITY IDEOGRAPH-FA9C */ + [0xfa9d, 0xfa9d], /* CJK COMPATIBILITY IDEOGRAPH-FA9D */ + [0xfa9e, 0xfa9e], /* CJK COMPATIBILITY IDEOGRAPH-FA9E */ + [0xfa9f, 0xfa9f], /* CJK COMPATIBILITY IDEOGRAPH-FA9F */ + [0xfaa0, 0xfaa0], /* CJK COMPATIBILITY IDEOGRAPH-FAA0 */ + [0xfaa1, 0xfaa1], /* CJK COMPATIBILITY IDEOGRAPH-FAA1 */ + [0xfaa2, 0xfaa2], /* CJK COMPATIBILITY IDEOGRAPH-FAA2 */ + [0xfaa3, 0xfaa3], /* CJK COMPATIBILITY IDEOGRAPH-FAA3 */ + [0xfaa4, 0xfaa4], /* CJK COMPATIBILITY IDEOGRAPH-FAA4 */ + [0xfaa5, 0xfaa5], /* CJK COMPATIBILITY IDEOGRAPH-FAA5 */ + [0xfaa6, 0xfaa6], /* CJK COMPATIBILITY IDEOGRAPH-FAA6 */ + [0xfaa7, 0xfaa7], /* CJK COMPATIBILITY IDEOGRAPH-FAA7 */ + [0xfaa8, 0xfaa8], /* CJK COMPATIBILITY IDEOGRAPH-FAA8 */ + [0xfaa9, 0xfaa9], /* CJK COMPATIBILITY IDEOGRAPH-FAA9 */ + [0xfaaa, 0xfaaa], /* CJK COMPATIBILITY IDEOGRAPH-FAAA */ + [0xfaab, 0xfaab], /* CJK COMPATIBILITY IDEOGRAPH-FAAB */ + [0xfaac, 0xfaac], /* CJK COMPATIBILITY IDEOGRAPH-FAAC */ + [0xfaad, 0xfaad], /* CJK COMPATIBILITY IDEOGRAPH-FAAD */ + [0xfaae, 0xfaae], /* CJK COMPATIBILITY IDEOGRAPH-FAAE */ + [0xfaaf, 0xfaaf], /* CJK COMPATIBILITY IDEOGRAPH-FAAF */ + [0xfab0, 0xfab0], /* CJK COMPATIBILITY IDEOGRAPH-FAB0 */ + [0xfab1, 0xfab1], /* CJK COMPATIBILITY IDEOGRAPH-FAB1 */ + [0xfab2, 0xfab2], /* CJK COMPATIBILITY IDEOGRAPH-FAB2 */ + [0xfab3, 0xfab3], /* CJK COMPATIBILITY IDEOGRAPH-FAB3 */ + [0xfab4, 0xfab4], /* CJK COMPATIBILITY IDEOGRAPH-FAB4 */ + [0xfab5, 0xfab5], /* CJK COMPATIBILITY IDEOGRAPH-FAB5 */ + [0xfab6, 0xfab6], /* CJK COMPATIBILITY IDEOGRAPH-FAB6 */ + [0xfab7, 0xfab7], /* CJK COMPATIBILITY IDEOGRAPH-FAB7 */ + [0xfab8, 0xfab8], /* CJK COMPATIBILITY IDEOGRAPH-FAB8 */ + [0xfab9, 0xfab9], /* CJK COMPATIBILITY IDEOGRAPH-FAB9 */ + [0xfaba, 0xfaba], /* CJK COMPATIBILITY IDEOGRAPH-FABA */ + [0xfabb, 0xfabb], /* CJK COMPATIBILITY IDEOGRAPH-FABB */ + [0xfabc, 0xfabc], /* CJK COMPATIBILITY IDEOGRAPH-FABC */ + [0xfabd, 0xfabd], /* CJK COMPATIBILITY IDEOGRAPH-FABD */ + [0xfabe, 0xfabe], /* CJK COMPATIBILITY IDEOGRAPH-FABE */ + [0xfabf, 0xfabf], /* CJK COMPATIBILITY IDEOGRAPH-FABF */ + [0xfac0, 0xfac0], /* CJK COMPATIBILITY IDEOGRAPH-FAC0 */ + [0xfac1, 0xfac1], /* CJK COMPATIBILITY IDEOGRAPH-FAC1 */ + [0xfac2, 0xfac2], /* CJK COMPATIBILITY IDEOGRAPH-FAC2 */ + [0xfac3, 0xfac3], /* CJK COMPATIBILITY IDEOGRAPH-FAC3 */ + [0xfac4, 0xfac4], /* CJK COMPATIBILITY IDEOGRAPH-FAC4 */ + [0xfac5, 0xfac5], /* CJK COMPATIBILITY IDEOGRAPH-FAC5 */ + [0xfac6, 0xfac6], /* CJK COMPATIBILITY IDEOGRAPH-FAC6 */ + [0xfac7, 0xfac7], /* CJK COMPATIBILITY IDEOGRAPH-FAC7 */ + [0xfac8, 0xfac8], /* CJK COMPATIBILITY IDEOGRAPH-FAC8 */ + [0xfac9, 0xfac9], /* CJK COMPATIBILITY IDEOGRAPH-FAC9 */ + [0xfaca, 0xfaca], /* CJK COMPATIBILITY IDEOGRAPH-FACA */ + [0xfacb, 0xfacb], /* CJK COMPATIBILITY IDEOGRAPH-FACB */ + [0xfacc, 0xfacc], /* CJK COMPATIBILITY IDEOGRAPH-FACC */ + [0xfacd, 0xfacd], /* CJK COMPATIBILITY IDEOGRAPH-FACD */ + [0xface, 0xface], /* CJK COMPATIBILITY IDEOGRAPH-FACE */ + [0xfacf, 0xfacf], /* CJK COMPATIBILITY IDEOGRAPH-FACF */ + [0xfad0, 0xfad0], /* CJK COMPATIBILITY IDEOGRAPH-FAD0 */ + [0xfad1, 0xfad1], /* CJK COMPATIBILITY IDEOGRAPH-FAD1 */ + [0xfad2, 0xfad2], /* CJK COMPATIBILITY IDEOGRAPH-FAD2 */ + [0xfad3, 0xfad3], /* CJK COMPATIBILITY IDEOGRAPH-FAD3 */ + [0xfad4, 0xfad4], /* CJK COMPATIBILITY IDEOGRAPH-FAD4 */ + [0xfad5, 0xfad5], /* CJK COMPATIBILITY IDEOGRAPH-FAD5 */ + [0xfad6, 0xfad6], /* CJK COMPATIBILITY IDEOGRAPH-FAD6 */ + [0xfad7, 0xfad7], /* CJK COMPATIBILITY IDEOGRAPH-FAD7 */ + [0xfad8, 0xfad8], /* CJK COMPATIBILITY IDEOGRAPH-FAD8 */ + [0xfad9, 0xfad9], /* CJK COMPATIBILITY IDEOGRAPH-FAD9 */ + [0xfada, 0xfada], + [0xfadb, 0xfadb], + [0xfadc, 0xfadc], + [0xfadd, 0xfadd], + [0xfade, 0xfade], + [0xfadf, 0xfadf], + [0xfae0, 0xfae0], + [0xfae1, 0xfae1], + [0xfae2, 0xfae2], + [0xfae3, 0xfae3], + [0xfae4, 0xfae4], + [0xfae5, 0xfae5], + [0xfae6, 0xfae6], + [0xfae7, 0xfae7], + [0xfae8, 0xfae8], + [0xfae9, 0xfae9], + [0xfaea, 0xfaea], + [0xfaeb, 0xfaeb], + [0xfaec, 0xfaec], + [0xfaed, 0xfaed], + [0xfaee, 0xfaee], + [0xfaef, 0xfaef], + [0xfaf0, 0xfaf0], + [0xfaf1, 0xfaf1], + [0xfaf2, 0xfaf2], + [0xfaf3, 0xfaf3], + [0xfaf4, 0xfaf4], + [0xfaf5, 0xfaf5], + [0xfaf6, 0xfaf6], + [0xfaf7, 0xfaf7], + [0xfaf8, 0xfaf8], + [0xfaf9, 0xfaf9], + [0xfafa, 0xfafa], + [0xfafb, 0xfafb], + [0xfafc, 0xfafc], + [0xfafd, 0xfafd], + [0xfafe, 0xfafe], + [0xfaff, 0xfaff], + [0xfb00, 0xfb00], /* LATIN SMALL LIGATURE FF */ + [0xfb01, 0xfb01], /* LATIN SMALL LIGATURE FI */ + [0xfb02, 0xfb02], /* LATIN SMALL LIGATURE FL */ + [0xfb03, 0xfb03], /* LATIN SMALL LIGATURE FFI */ + [0xfb04, 0xfb04], /* LATIN SMALL LIGATURE FFL */ + [0xfb05, 0xfb05], /* LATIN SMALL LIGATURE LONG S T */ + [0xfb06, 0xfb06], /* LATIN SMALL LIGATURE ST */ + [0xfb07, 0xfb07], + [0xfb08, 0xfb08], + [0xfb09, 0xfb09], + [0xfb0a, 0xfb0a], + [0xfb0b, 0xfb0b], + [0xfb0c, 0xfb0c], + [0xfb0d, 0xfb0d], + [0xfb0e, 0xfb0e], + [0xfb0f, 0xfb0f], + [0xfb10, 0xfb10], + [0xfb11, 0xfb11], + [0xfb12, 0xfb12], + [0xfb13, 0xfb13], /* ARMENIAN SMALL LIGATURE MEN NOW */ + [0xfb14, 0xfb14], /* ARMENIAN SMALL LIGATURE MEN ECH */ + [0xfb15, 0xfb15], /* ARMENIAN SMALL LIGATURE MEN INI */ + [0xfb16, 0xfb16], /* ARMENIAN SMALL LIGATURE VEW NOW */ + [0xfb17, 0xfb17], /* ARMENIAN SMALL LIGATURE MEN XEH */ + [0xfb18, 0xfb18], + [0xfb19, 0xfb19], + [0xfb1a, 0xfb1a], + [0xfb1b, 0xfb1b], + [0xfb1c, 0xfb1c], + [0xfb1d, 0xfb1d], /* HEBREW LETTER YOD WITH HIRIQ */ + [0xfb1e, 0xfb1e], /* HEBREW POINT JUDEO-SPANISH VARIKA (HEBREW POINT VARIKA) */ + [0xfb1f, 0xfb1f], /* HEBREW LIGATURE YIDDISH YOD YOD PATAH */ + [0xfb20, 0xfb20], /* HEBREW LETTER ALTERNATIVE AYIN */ + [0xfb21, 0xfb21], /* HEBREW LETTER WIDE ALEF */ + [0xfb22, 0xfb22], /* HEBREW LETTER WIDE DALET */ + [0xfb23, 0xfb23], /* HEBREW LETTER WIDE HE */ + [0xfb24, 0xfb24], /* HEBREW LETTER WIDE KAF */ + [0xfb25, 0xfb25], /* HEBREW LETTER WIDE LAMED */ + [0xfb26, 0xfb26], /* HEBREW LETTER WIDE FINAL MEM */ + [0xfb27, 0xfb27], /* HEBREW LETTER WIDE RESH */ + [0xfb28, 0xfb28], /* HEBREW LETTER WIDE TAV */ + [0xfb29, 0xfb29], /* HEBREW LETTER ALTERNATIVE PLUS SIGN */ + [0xfb2a, 0xfb2a], /* HEBREW LETTER SHIN WITH SHIN DOT */ + [0xfb2b, 0xfb2b], /* HEBREW LETTER SHIN WITH SIN DOT */ + [0xfb2c, 0xfb2c], /* HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT */ + [0xfb2d, 0xfb2d], /* HEBREW LETTER SHIN WITH DAGESH AND SIN DOT */ + [0xfb2e, 0xfb2e], /* HEBREW LETTER ALEF WITH PATAH */ + [0xfb2f, 0xfb2f], /* HEBREW LETTER ALEF WITH QAMATS */ + [0xfb30, 0xfb30], /* HEBREW LETTER ALEF WITH MAPIQ */ + [0xfb31, 0xfb31], /* HEBREW LETTER BET WITH DAGESH */ + [0xfb32, 0xfb32], /* HEBREW LETTER GIMEL WITH DAGESH */ + [0xfb33, 0xfb33], /* HEBREW LETTER DALET WITH DAGESH */ + [0xfb34, 0xfb34], /* HEBREW LETTER HE WITH MAPIQ */ + [0xfb35, 0xfb35], /* HEBREW LETTER VAV WITH DAGESH */ + [0xfb36, 0xfb36], /* HEBREW LETTER ZAYIN WITH DAGESH */ + [0xfb37, 0xfb37], + [0xfb38, 0xfb38], /* HEBREW LETTER TET WITH DAGESH */ + [0xfb39, 0xfb39], /* HEBREW LETTER YOD WITH DAGESH */ + [0xfb3a, 0xfb3a], /* HEBREW LETTER FINAL KAF WITH DAGESH */ + [0xfb3b, 0xfb3b], /* HEBREW LETTER KAF WITH DAGESH */ + [0xfb3c, 0xfb3c], /* HEBREW LETTER LAMED WITH DAGESH */ + [0xfb3d, 0xfb3d], + [0xfb3e, 0xfb3e], /* HEBREW LETTER MEM WITH DAGESH */ + [0xfb3f, 0xfb3f], + [0xfb40, 0xfb40], /* HEBREW LETTER NUN WITH DAGESH */ + [0xfb41, 0xfb41], /* HEBREW LETTER SAMEKH WITH DAGESH */ + [0xfb42, 0xfb42], + [0xfb43, 0xfb43], /* HEBREW LETTER FINAL PE WITH DAGESH */ + [0xfb44, 0xfb44], /* HEBREW LETTER PE WITH DAGESH */ + [0xfb45, 0xfb45], + [0xfb46, 0xfb46], /* HEBREW LETTER TSADI WITH DAGESH */ + [0xfb47, 0xfb47], /* HEBREW LETTER QOF WITH DAGESH */ + [0xfb48, 0xfb48], /* HEBREW LETTER RESH WITH DAGESH */ + [0xfb49, 0xfb49], /* HEBREW LETTER SHIN WITH DAGESH */ + [0xfb4a, 0xfb4a], /* HEBREW LETTER TAV WITH DAGESH */ + [0xfb4b, 0xfb4b], /* HEBREW LETTER VAV WITH HOLAM */ + [0xfb4c, 0xfb4c], /* HEBREW LETTER BET WITH RAFE */ + [0xfb4d, 0xfb4d], /* HEBREW LETTER KAF WITH RAFE */ + [0xfb4e, 0xfb4e], /* HEBREW LETTER PE WITH RAFE */ + [0xfb4f, 0xfb4f], /* HEBREW LIGATURE ALEF LAMED */ + [0xfb50, 0xfb50], /* ARABIC LETTER ALEF WASLA ISOLATED FORM */ + [0xfb51, 0xfb51], /* ARABIC LETTER ALEF WASLA FINAL FORM */ + [0xfb52, 0xfb52], /* ARABIC LETTER BEEH ISOLATED FORM */ + [0xfb53, 0xfb53], /* ARABIC LETTER BEEH FINAL FORM */ + [0xfb54, 0xfb54], /* ARABIC LETTER BEEH INITIAL FORM */ + [0xfb55, 0xfb55], /* ARABIC LETTER BEEH MEDIAL FORM */ + [0xfb56, 0xfb56], /* ARABIC LETTER PEH ISOLATED FORM */ + [0xfb57, 0xfb57], /* ARABIC LETTER PEH FINAL FORM */ + [0xfb58, 0xfb58], /* ARABIC LETTER PEH INITIAL FORM */ + [0xfb59, 0xfb59], /* ARABIC LETTER PEH MEDIAL FORM */ + [0xfb5a, 0xfb5a], /* ARABIC LETTER BEHEH ISOLATED FORM */ + [0xfb5b, 0xfb5b], /* ARABIC LETTER BEHEH FINAL FORM */ + [0xfb5c, 0xfb5c], /* ARABIC LETTER BEHEH INITIAL FORM */ + [0xfb5d, 0xfb5d], /* ARABIC LETTER BEHEH MEDIAL FORM */ + [0xfb5e, 0xfb5e], /* ARABIC LETTER TTEHEH ISOLATED FORM */ + [0xfb5f, 0xfb5f], /* ARABIC LETTER TTEHEH FINAL FORM */ + [0xfb60, 0xfb60], /* ARABIC LETTER TTEHEH INITIAL FORM */ + [0xfb61, 0xfb61], /* ARABIC LETTER TTEHEH MEDIAL FORM */ + [0xfb62, 0xfb62], /* ARABIC LETTER TEHEH ISOLATED FORM */ + [0xfb63, 0xfb63], /* ARABIC LETTER TEHEH FINAL FORM */ + [0xfb64, 0xfb64], /* ARABIC LETTER TEHEH INITIAL FORM */ + [0xfb65, 0xfb65], /* ARABIC LETTER TEHEH MEDIAL FORM */ + [0xfb66, 0xfb66], /* ARABIC LETTER TTEH ISOLATED FORM */ + [0xfb67, 0xfb67], /* ARABIC LETTER TTEH FINAL FORM */ + [0xfb68, 0xfb68], /* ARABIC LETTER TTEH INITIAL FORM */ + [0xfb69, 0xfb69], /* ARABIC LETTER TTEH MEDIAL FORM */ + [0xfb6a, 0xfb6a], /* ARABIC LETTER VEH ISOLATED FORM */ + [0xfb6b, 0xfb6b], /* ARABIC LETTER VEH FINAL FORM */ + [0xfb6c, 0xfb6c], /* ARABIC LETTER VEH INITIAL FORM */ + [0xfb6d, 0xfb6d], /* ARABIC LETTER VEH MEDIAL FORM */ + [0xfb6e, 0xfb6e], /* ARABIC LETTER PEHEH ISOLATED FORM */ + [0xfb6f, 0xfb6f], /* ARABIC LETTER PEHEH FINAL FORM */ + [0xfb70, 0xfb70], /* ARABIC LETTER PEHEH INITIAL FORM */ + [0xfb71, 0xfb71], /* ARABIC LETTER PEHEH MEDIAL FORM */ + [0xfb72, 0xfb72], /* ARABIC LETTER DYEH ISOLATED FORM */ + [0xfb73, 0xfb73], /* ARABIC LETTER DYEH FINAL FORM */ + [0xfb74, 0xfb74], /* ARABIC LETTER DYEH INITIAL FORM */ + [0xfb75, 0xfb75], /* ARABIC LETTER DYEH MEDIAL FORM */ + [0xfb76, 0xfb76], /* ARABIC LETTER NYEH ISOLATED FORM */ + [0xfb77, 0xfb77], /* ARABIC LETTER NYEH FINAL FORM */ + [0xfb78, 0xfb78], /* ARABIC LETTER NYEH INITIAL FORM */ + [0xfb79, 0xfb79], /* ARABIC LETTER NYEH MEDIAL FORM */ + [0xfb7a, 0xfb7a], /* ARABIC LETTER TCHEH ISOLATED FORM */ + [0xfb7b, 0xfb7b], /* ARABIC LETTER TCHEH FINAL FORM */ + [0xfb7c, 0xfb7c], /* ARABIC LETTER TCHEH INITIAL FORM */ + [0xfb7d, 0xfb7d], /* ARABIC LETTER TCHEH MEDIAL FORM */ + [0xfb7e, 0xfb7e], /* ARABIC LETTER TCHEHEH ISOLATED FORM */ + [0xfb7f, 0xfb7f], /* ARABIC LETTER TCHEHEH FINAL FORM */ + [0xfb80, 0xfb80], /* ARABIC LETTER TCHEHEH INITIAL FORM */ + [0xfb81, 0xfb81], /* ARABIC LETTER TCHEHEH MEDIAL FORM */ + [0xfb82, 0xfb82], /* ARABIC LETTER DDAHAL ISOLATED FORM */ + [0xfb83, 0xfb83], /* ARABIC LETTER DDAHAL FINAL FORM */ + [0xfb84, 0xfb84], /* ARABIC LETTER DAHAL ISOLATED FORM */ + [0xfb85, 0xfb85], /* ARABIC LETTER DAHAL FINAL FORM */ + [0xfb86, 0xfb86], /* ARABIC LETTER DUL ISOLATED FORM */ + [0xfb87, 0xfb87], /* ARABIC LETTER DUL FINAL FORM */ + [0xfb88, 0xfb88], /* ARABIC LETTER DDAL ISOLATED FORM */ + [0xfb89, 0xfb89], /* ARABIC LETTER DDAL FINAL FORM */ + [0xfb8a, 0xfb8a], /* ARABIC LETTER JEH ISOLATED FORM */ + [0xfb8b, 0xfb8b], /* ARABIC LETTER JEH FINAL FORM */ + [0xfb8c, 0xfb8c], /* ARABIC LETTER RREH ISOLATED FORM */ + [0xfb8d, 0xfb8d], /* ARABIC LETTER RREH FINAL FORM */ + [0xfb8e, 0xfb8e], /* ARABIC LETTER KEHEH ISOLATED FORM */ + [0xfb8f, 0xfb8f], /* ARABIC LETTER KEHEH FINAL FORM */ + [0xfb90, 0xfb90], /* ARABIC LETTER KEHEH INITIAL FORM */ + [0xfb91, 0xfb91], /* ARABIC LETTER KEHEH MEDIAL FORM */ + [0xfb92, 0xfb92], /* ARABIC LETTER GAF ISOLATED FORM */ + [0xfb93, 0xfb93], /* ARABIC LETTER GAF FINAL FORM */ + [0xfb94, 0xfb94], /* ARABIC LETTER GAF INITIAL FORM */ + [0xfb95, 0xfb95], /* ARABIC LETTER GAF MEDIAL FORM */ + [0xfb96, 0xfb96], /* ARABIC LETTER GUEH ISOLATED FORM */ + [0xfb97, 0xfb97], /* ARABIC LETTER GUEH FINAL FORM */ + [0xfb98, 0xfb98], /* ARABIC LETTER GUEH INITIAL FORM */ + [0xfb99, 0xfb99], /* ARABIC LETTER GUEH MEDIAL FORM */ + [0xfb9a, 0xfb9a], /* ARABIC LETTER NGOEH ISOLATED FORM */ + [0xfb9b, 0xfb9b], /* ARABIC LETTER NGOEH FINAL FORM */ + [0xfb9c, 0xfb9c], /* ARABIC LETTER NGOEH INITIAL FORM */ + [0xfb9d, 0xfb9d], /* ARABIC LETTER NGOEH MEDIAL FORM */ + [0xfb9e, 0xfb9e], /* ARABIC LETTER NOON GHUNNA ISOLATED FORM */ + [0xfb9f, 0xfb9f], /* ARABIC LETTER NOON GHUNNA FINAL FORM */ + [0xfba0, 0xfba0], /* ARABIC LETTER RNOON ISOLATED FORM */ + [0xfba1, 0xfba1], /* ARABIC LETTER RNOON FINAL FORM */ + [0xfba2, 0xfba2], /* ARABIC LETTER RNOON INITIAL FORM */ + [0xfba3, 0xfba3], /* ARABIC LETTER RNOON MEDIAL FORM */ + [0xfba4, 0xfba4], /* ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM */ + [0xfba5, 0xfba5], /* ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM */ + [0xfba6, 0xfba6], /* ARABIC LETTER HEH GOAL ISOLATED FORM */ + [0xfba7, 0xfba7], /* ARABIC LETTER HEH GOAL FINAL FORM */ + [0xfba8, 0xfba8], /* ARABIC LETTER HEH GOAL INITIAL FORM */ + [0xfba9, 0xfba9], /* ARABIC LETTER HEH GOAL MEDIAL FORM */ + [0xfbaa, 0xfbaa], /* ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM */ + [0xfbab, 0xfbab], /* ARABIC LETTER HEH DOACHASHMEE FINAL FORM */ + [0xfbac, 0xfbac], /* ARABIC LETTER HEH DOACHASHMEE INITIAL FORM */ + [0xfbad, 0xfbad], /* ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM */ + [0xfbae, 0xfbae], /* ARABIC LETTER YEH BARREE ISOLATED FORM */ + [0xfbaf, 0xfbaf], /* ARABIC LETTER YEH BARREE FINAL FORM */ + [0xfbb0, 0xfbb0], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM */ + [0xfbb1, 0xfbb1], /* ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM */ + [0xfbb2, 0xfbb2], /* ARABIC SYMBOL DOT ABOVE */ + [0xfbb3, 0xfbb3], /* ARABIC SYMBOL DOT BELOW */ + [0xfbb4, 0xfbb4], /* ARABIC SYMBOL TWO DOTS ABOVE */ + [0xfbb5, 0xfbb5], /* ARABIC SYMBOL TWO DOTS BELOW */ + [0xfbb6, 0xfbb6], /* ARABIC SYMBOL THREE DOTS ABOVE */ + [0xfbb7, 0xfbb7], /* ARABIC SYMBOL THREE DOTS BELOW */ + [0xfbb8, 0xfbb8], /* ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE */ + [0xfbb9, 0xfbb9], /* ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW */ + [0xfbba, 0xfbba], /* ARABIC SYMBOL FOUR DOTS ABOVE */ + [0xfbbb, 0xfbbb], /* ARABIC SYMBOL FOUR DOTS BELOW */ + [0xfbbc, 0xfbbc], /* ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW */ + [0xfbbd, 0xfbbd], /* ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE */ + [0xfbbe, 0xfbbe], /* ARABIC SYMBOL TWO DOTS VERTICALLY BELOW */ + [0xfbbf, 0xfbbf], /* ARABIC SYMBOL RING */ + [0xfbc0, 0xfbc0], /* ARABIC SYMBOL SMALL TAH ABOVE */ + [0xfbc1, 0xfbc1], /* ARABIC SYMBOL SMALL TAH BELOW */ + [0xfbc2, 0xfbc2], + [0xfbc3, 0xfbc3], + [0xfbc4, 0xfbc4], + [0xfbc5, 0xfbc5], + [0xfbc6, 0xfbc6], + [0xfbc7, 0xfbc7], + [0xfbc8, 0xfbc8], + [0xfbc9, 0xfbc9], + [0xfbca, 0xfbca], + [0xfbcb, 0xfbcb], + [0xfbcc, 0xfbcc], + [0xfbcd, 0xfbcd], + [0xfbce, 0xfbce], + [0xfbcf, 0xfbcf], + [0xfbd0, 0xfbd0], + [0xfbd1, 0xfbd1], + [0xfbd2, 0xfbd2], + [0xfbd3, 0xfbd3], /* ARABIC LETTER NG ISOLATED FORM */ + [0xfbd4, 0xfbd4], /* ARABIC LETTER NG FINAL FORM */ + [0xfbd5, 0xfbd5], /* ARABIC LETTER NG INITIAL FORM */ + [0xfbd6, 0xfbd6], /* ARABIC LETTER NG MEDIAL FORM */ + [0xfbd7, 0xfbd7], /* ARABIC LETTER U ISOLATED FORM */ + [0xfbd8, 0xfbd8], /* ARABIC LETTER U FINAL FORM */ + [0xfbd9, 0xfbd9], /* ARABIC LETTER OE ISOLATED FORM */ + [0xfbda, 0xfbda], /* ARABIC LETTER OE FINAL FORM */ + [0xfbdb, 0xfbdb], /* ARABIC LETTER YU ISOLATED FORM */ + [0xfbdc, 0xfbdc], /* ARABIC LETTER YU FINAL FORM */ + [0xfbdd, 0xfbdd], /* ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM */ + [0xfbde, 0xfbde], /* ARABIC LETTER VE ISOLATED FORM */ + [0xfbdf, 0xfbdf], /* ARABIC LETTER VE FINAL FORM */ + [0xfbe0, 0xfbe0], /* ARABIC LETTER KIRGHIZ OE ISOLATED FORM */ + [0xfbe1, 0xfbe1], /* ARABIC LETTER KIRGHIZ OE FINAL FORM */ + [0xfbe2, 0xfbe2], /* ARABIC LETTER KIRGHIZ YU ISOLATED FORM */ + [0xfbe3, 0xfbe3], /* ARABIC LETTER KIRGHIZ YU FINAL FORM */ + [0xfbe4, 0xfbe4], /* ARABIC LETTER E ISOLATED FORM */ + [0xfbe5, 0xfbe5], /* ARABIC LETTER E FINAL FORM */ + [0xfbe6, 0xfbe6], /* ARABIC LETTER E INITIAL FORM */ + [0xfbe7, 0xfbe7], /* ARABIC LETTER E MEDIAL FORM */ + [0xfbe8, 0xfbe8], /* ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM */ + [0xfbe9, 0xfbe9], /* ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM */ + [0xfbea, 0xfbea], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM */ + [0xfbeb, 0xfbeb], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM */ + [0xfbec, 0xfbec], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM */ + [0xfbed, 0xfbed], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM */ + [0xfbee, 0xfbee], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM */ + [0xfbef, 0xfbef], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM */ + [0xfbf0, 0xfbf0], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM */ + [0xfbf1, 0xfbf1], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM */ + [0xfbf2, 0xfbf2], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM */ + [0xfbf3, 0xfbf3], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM */ + [0xfbf4, 0xfbf4], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM */ + [0xfbf5, 0xfbf5], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM */ + [0xfbf6, 0xfbf6], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM */ + [0xfbf7, 0xfbf7], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM */ + [0xfbf8, 0xfbf8], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM */ + [0xfbf9, 0xfbf9], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM */ + [0xfbfa, 0xfbfa], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM */ + [0xfbfb, 0xfbfb], /* ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM */ + [0xfbfc, 0xfbfc], /* ARABIC LETTER FARSI YEH ISOLATED FORM */ + [0xfbfd, 0xfbfd], /* ARABIC LETTER FARSI YEH FINAL FORM */ + [0xfbfe, 0xfbfe], /* ARABIC LETTER FARSI YEH INITIAL FORM */ + [0xfbff, 0xfbff], /* ARABIC LETTER FARSI YEH MEDIAL FORM */ + [0xfc00, 0xfc00], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM */ + [0xfc01, 0xfc01], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM */ + [0xfc02, 0xfc02], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM */ + [0xfc03, 0xfc03], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc04, 0xfc04], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM */ + [0xfc05, 0xfc05], /* ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM */ + [0xfc06, 0xfc06], /* ARABIC LIGATURE BEH WITH HAH ISOLATED FORM */ + [0xfc07, 0xfc07], /* ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM */ + [0xfc08, 0xfc08], /* ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM */ + [0xfc09, 0xfc09], /* ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc0a, 0xfc0a], /* ARABIC LIGATURE BEH WITH YEH ISOLATED FORM */ + [0xfc0b, 0xfc0b], /* ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM */ + [0xfc0c, 0xfc0c], /* ARABIC LIGATURE TEH WITH HAH ISOLATED FORM */ + [0xfc0d, 0xfc0d], /* ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM */ + [0xfc0e, 0xfc0e], /* ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM */ + [0xfc0f, 0xfc0f], /* ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc10, 0xfc10], /* ARABIC LIGATURE TEH WITH YEH ISOLATED FORM */ + [0xfc11, 0xfc11], /* ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM */ + [0xfc12, 0xfc12], /* ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM */ + [0xfc13, 0xfc13], /* ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc14, 0xfc14], /* ARABIC LIGATURE THEH WITH YEH ISOLATED FORM */ + [0xfc15, 0xfc15], /* ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM */ + [0xfc16, 0xfc16], /* ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM */ + [0xfc17, 0xfc17], /* ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM */ + [0xfc18, 0xfc18], /* ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM */ + [0xfc19, 0xfc19], /* ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM */ + [0xfc1a, 0xfc1a], /* ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM */ + [0xfc1b, 0xfc1b], /* ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM */ + [0xfc1c, 0xfc1c], /* ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM */ + [0xfc1d, 0xfc1d], /* ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM */ + [0xfc1e, 0xfc1e], /* ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM */ + [0xfc1f, 0xfc1f], /* ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM */ + [0xfc20, 0xfc20], /* ARABIC LIGATURE SAD WITH HAH ISOLATED FORM */ + [0xfc21, 0xfc21], /* ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM */ + [0xfc22, 0xfc22], /* ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM */ + [0xfc23, 0xfc23], /* ARABIC LIGATURE DAD WITH HAH ISOLATED FORM */ + [0xfc24, 0xfc24], /* ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM */ + [0xfc25, 0xfc25], /* ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM */ + [0xfc26, 0xfc26], /* ARABIC LIGATURE TAH WITH HAH ISOLATED FORM */ + [0xfc27, 0xfc27], /* ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM */ + [0xfc28, 0xfc28], /* ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM */ + [0xfc29, 0xfc29], /* ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM */ + [0xfc2a, 0xfc2a], /* ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM */ + [0xfc2b, 0xfc2b], /* ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM */ + [0xfc2c, 0xfc2c], /* ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM */ + [0xfc2d, 0xfc2d], /* ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM */ + [0xfc2e, 0xfc2e], /* ARABIC LIGATURE FEH WITH HAH ISOLATED FORM */ + [0xfc2f, 0xfc2f], /* ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM */ + [0xfc30, 0xfc30], /* ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM */ + [0xfc31, 0xfc31], /* ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc32, 0xfc32], /* ARABIC LIGATURE FEH WITH YEH ISOLATED FORM */ + [0xfc33, 0xfc33], /* ARABIC LIGATURE QAF WITH HAH ISOLATED FORM */ + [0xfc34, 0xfc34], /* ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM */ + [0xfc35, 0xfc35], /* ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc36, 0xfc36], /* ARABIC LIGATURE QAF WITH YEH ISOLATED FORM */ + [0xfc37, 0xfc37], /* ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM */ + [0xfc38, 0xfc38], /* ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM */ + [0xfc39, 0xfc39], /* ARABIC LIGATURE KAF WITH HAH ISOLATED FORM */ + [0xfc3a, 0xfc3a], /* ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM */ + [0xfc3b, 0xfc3b], /* ARABIC LIGATURE KAF WITH LAM ISOLATED FORM */ + [0xfc3c, 0xfc3c], /* ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM */ + [0xfc3d, 0xfc3d], /* ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc3e, 0xfc3e], /* ARABIC LIGATURE KAF WITH YEH ISOLATED FORM */ + [0xfc3f, 0xfc3f], /* ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM */ + [0xfc40, 0xfc40], /* ARABIC LIGATURE LAM WITH HAH ISOLATED FORM */ + [0xfc41, 0xfc41], /* ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM */ + [0xfc42, 0xfc42], /* ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM */ + [0xfc43, 0xfc43], /* ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc44, 0xfc44], /* ARABIC LIGATURE LAM WITH YEH ISOLATED FORM */ + [0xfc45, 0xfc45], /* ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM */ + [0xfc46, 0xfc46], /* ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM */ + [0xfc47, 0xfc47], /* ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM */ + [0xfc48, 0xfc48], /* ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM */ + [0xfc49, 0xfc49], /* ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc4a, 0xfc4a], /* ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM */ + [0xfc4b, 0xfc4b], /* ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM */ + [0xfc4c, 0xfc4c], /* ARABIC LIGATURE NOON WITH HAH ISOLATED FORM */ + [0xfc4d, 0xfc4d], /* ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM */ + [0xfc4e, 0xfc4e], /* ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM */ + [0xfc4f, 0xfc4f], /* ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc50, 0xfc50], /* ARABIC LIGATURE NOON WITH YEH ISOLATED FORM */ + [0xfc51, 0xfc51], /* ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM */ + [0xfc52, 0xfc52], /* ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM */ + [0xfc53, 0xfc53], /* ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc54, 0xfc54], /* ARABIC LIGATURE HEH WITH YEH ISOLATED FORM */ + [0xfc55, 0xfc55], /* ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM */ + [0xfc56, 0xfc56], /* ARABIC LIGATURE YEH WITH HAH ISOLATED FORM */ + [0xfc57, 0xfc57], /* ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM */ + [0xfc58, 0xfc58], /* ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM */ + [0xfc59, 0xfc59], /* ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfc5a, 0xfc5a], /* ARABIC LIGATURE YEH WITH YEH ISOLATED FORM */ + [0xfc5b, 0xfc5b], /* ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM */ + [0xfc5c, 0xfc5c], /* ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM */ + [0xfc5d, 0xfc5d], /* ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM */ + [0xfc5e, 0xfc5e], /* ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM */ + [0xfc5f, 0xfc5f], /* ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM */ + [0xfc60, 0xfc60], /* ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM */ + [0xfc61, 0xfc61], /* ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM */ + [0xfc62, 0xfc62], /* ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM */ + [0xfc63, 0xfc63], /* ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM */ + [0xfc64, 0xfc64], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM */ + [0xfc65, 0xfc65], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM */ + [0xfc66, 0xfc66], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM */ + [0xfc67, 0xfc67], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM */ + [0xfc68, 0xfc68], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM */ + [0xfc69, 0xfc69], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM */ + [0xfc6a, 0xfc6a], /* ARABIC LIGATURE BEH WITH REH FINAL FORM */ + [0xfc6b, 0xfc6b], /* ARABIC LIGATURE BEH WITH ZAIN FINAL FORM */ + [0xfc6c, 0xfc6c], /* ARABIC LIGATURE BEH WITH MEEM FINAL FORM */ + [0xfc6d, 0xfc6d], /* ARABIC LIGATURE BEH WITH NOON FINAL FORM */ + [0xfc6e, 0xfc6e], /* ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM */ + [0xfc6f, 0xfc6f], /* ARABIC LIGATURE BEH WITH YEH FINAL FORM */ + [0xfc70, 0xfc70], /* ARABIC LIGATURE TEH WITH REH FINAL FORM */ + [0xfc71, 0xfc71], /* ARABIC LIGATURE TEH WITH ZAIN FINAL FORM */ + [0xfc72, 0xfc72], /* ARABIC LIGATURE TEH WITH MEEM FINAL FORM */ + [0xfc73, 0xfc73], /* ARABIC LIGATURE TEH WITH NOON FINAL FORM */ + [0xfc74, 0xfc74], /* ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM */ + [0xfc75, 0xfc75], /* ARABIC LIGATURE TEH WITH YEH FINAL FORM */ + [0xfc76, 0xfc76], /* ARABIC LIGATURE THEH WITH REH FINAL FORM */ + [0xfc77, 0xfc77], /* ARABIC LIGATURE THEH WITH ZAIN FINAL FORM */ + [0xfc78, 0xfc78], /* ARABIC LIGATURE THEH WITH MEEM FINAL FORM */ + [0xfc79, 0xfc79], /* ARABIC LIGATURE THEH WITH NOON FINAL FORM */ + [0xfc7a, 0xfc7a], /* ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM */ + [0xfc7b, 0xfc7b], /* ARABIC LIGATURE THEH WITH YEH FINAL FORM */ + [0xfc7c, 0xfc7c], /* ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM */ + [0xfc7d, 0xfc7d], /* ARABIC LIGATURE FEH WITH YEH FINAL FORM */ + [0xfc7e, 0xfc7e], /* ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM */ + [0xfc7f, 0xfc7f], /* ARABIC LIGATURE QAF WITH YEH FINAL FORM */ + [0xfc80, 0xfc80], /* ARABIC LIGATURE KAF WITH ALEF FINAL FORM */ + [0xfc81, 0xfc81], /* ARABIC LIGATURE KAF WITH LAM FINAL FORM */ + [0xfc82, 0xfc82], /* ARABIC LIGATURE KAF WITH MEEM FINAL FORM */ + [0xfc83, 0xfc83], /* ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM */ + [0xfc84, 0xfc84], /* ARABIC LIGATURE KAF WITH YEH FINAL FORM */ + [0xfc85, 0xfc85], /* ARABIC LIGATURE LAM WITH MEEM FINAL FORM */ + [0xfc86, 0xfc86], /* ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM */ + [0xfc87, 0xfc87], /* ARABIC LIGATURE LAM WITH YEH FINAL FORM */ + [0xfc88, 0xfc88], /* ARABIC LIGATURE MEEM WITH ALEF FINAL FORM */ + [0xfc89, 0xfc89], /* ARABIC LIGATURE MEEM WITH MEEM FINAL FORM */ + [0xfc8a, 0xfc8a], /* ARABIC LIGATURE NOON WITH REH FINAL FORM */ + [0xfc8b, 0xfc8b], /* ARABIC LIGATURE NOON WITH ZAIN FINAL FORM */ + [0xfc8c, 0xfc8c], /* ARABIC LIGATURE NOON WITH MEEM FINAL FORM */ + [0xfc8d, 0xfc8d], /* ARABIC LIGATURE NOON WITH NOON FINAL FORM */ + [0xfc8e, 0xfc8e], /* ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM */ + [0xfc8f, 0xfc8f], /* ARABIC LIGATURE NOON WITH YEH FINAL FORM */ + [0xfc90, 0xfc90], /* ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM */ + [0xfc91, 0xfc91], /* ARABIC LIGATURE YEH WITH REH FINAL FORM */ + [0xfc92, 0xfc92], /* ARABIC LIGATURE YEH WITH ZAIN FINAL FORM */ + [0xfc93, 0xfc93], /* ARABIC LIGATURE YEH WITH MEEM FINAL FORM */ + [0xfc94, 0xfc94], /* ARABIC LIGATURE YEH WITH NOON FINAL FORM */ + [0xfc95, 0xfc95], /* ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM */ + [0xfc96, 0xfc96], /* ARABIC LIGATURE YEH WITH YEH FINAL FORM */ + [0xfc97, 0xfc97], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM */ + [0xfc98, 0xfc98], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM */ + [0xfc99, 0xfc99], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM */ + [0xfc9a, 0xfc9a], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM */ + [0xfc9b, 0xfc9b], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM */ + [0xfc9c, 0xfc9c], /* ARABIC LIGATURE BEH WITH JEEM INITIAL FORM */ + [0xfc9d, 0xfc9d], /* ARABIC LIGATURE BEH WITH HAH INITIAL FORM */ + [0xfc9e, 0xfc9e], /* ARABIC LIGATURE BEH WITH KHAH INITIAL FORM */ + [0xfc9f, 0xfc9f], /* ARABIC LIGATURE BEH WITH MEEM INITIAL FORM */ + [0xfca0, 0xfca0], /* ARABIC LIGATURE BEH WITH HEH INITIAL FORM */ + [0xfca1, 0xfca1], /* ARABIC LIGATURE TEH WITH JEEM INITIAL FORM */ + [0xfca2, 0xfca2], /* ARABIC LIGATURE TEH WITH HAH INITIAL FORM */ + [0xfca3, 0xfca3], /* ARABIC LIGATURE TEH WITH KHAH INITIAL FORM */ + [0xfca4, 0xfca4], /* ARABIC LIGATURE TEH WITH MEEM INITIAL FORM */ + [0xfca5, 0xfca5], /* ARABIC LIGATURE TEH WITH HEH INITIAL FORM */ + [0xfca6, 0xfca6], /* ARABIC LIGATURE THEH WITH MEEM INITIAL FORM */ + [0xfca7, 0xfca7], /* ARABIC LIGATURE JEEM WITH HAH INITIAL FORM */ + [0xfca8, 0xfca8], /* ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM */ + [0xfca9, 0xfca9], /* ARABIC LIGATURE HAH WITH JEEM INITIAL FORM */ + [0xfcaa, 0xfcaa], /* ARABIC LIGATURE HAH WITH MEEM INITIAL FORM */ + [0xfcab, 0xfcab], /* ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM */ + [0xfcac, 0xfcac], /* ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM */ + [0xfcad, 0xfcad], /* ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM */ + [0xfcae, 0xfcae], /* ARABIC LIGATURE SEEN WITH HAH INITIAL FORM */ + [0xfcaf, 0xfcaf], /* ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM */ + [0xfcb0, 0xfcb0], /* ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM */ + [0xfcb1, 0xfcb1], /* ARABIC LIGATURE SAD WITH HAH INITIAL FORM */ + [0xfcb2, 0xfcb2], /* ARABIC LIGATURE SAD WITH KHAH INITIAL FORM */ + [0xfcb3, 0xfcb3], /* ARABIC LIGATURE SAD WITH MEEM INITIAL FORM */ + [0xfcb4, 0xfcb4], /* ARABIC LIGATURE DAD WITH JEEM INITIAL FORM */ + [0xfcb5, 0xfcb5], /* ARABIC LIGATURE DAD WITH HAH INITIAL FORM */ + [0xfcb6, 0xfcb6], /* ARABIC LIGATURE DAD WITH KHAH INITIAL FORM */ + [0xfcb7, 0xfcb7], /* ARABIC LIGATURE DAD WITH MEEM INITIAL FORM */ + [0xfcb8, 0xfcb8], /* ARABIC LIGATURE TAH WITH HAH INITIAL FORM */ + [0xfcb9, 0xfcb9], /* ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM */ + [0xfcba, 0xfcba], /* ARABIC LIGATURE AIN WITH JEEM INITIAL FORM */ + [0xfcbb, 0xfcbb], /* ARABIC LIGATURE AIN WITH MEEM INITIAL FORM */ + [0xfcbc, 0xfcbc], /* ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM */ + [0xfcbd, 0xfcbd], /* ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM */ + [0xfcbe, 0xfcbe], /* ARABIC LIGATURE FEH WITH JEEM INITIAL FORM */ + [0xfcbf, 0xfcbf], /* ARABIC LIGATURE FEH WITH HAH INITIAL FORM */ + [0xfcc0, 0xfcc0], /* ARABIC LIGATURE FEH WITH KHAH INITIAL FORM */ + [0xfcc1, 0xfcc1], /* ARABIC LIGATURE FEH WITH MEEM INITIAL FORM */ + [0xfcc2, 0xfcc2], /* ARABIC LIGATURE QAF WITH HAH INITIAL FORM */ + [0xfcc3, 0xfcc3], /* ARABIC LIGATURE QAF WITH MEEM INITIAL FORM */ + [0xfcc4, 0xfcc4], /* ARABIC LIGATURE KAF WITH JEEM INITIAL FORM */ + [0xfcc5, 0xfcc5], /* ARABIC LIGATURE KAF WITH HAH INITIAL FORM */ + [0xfcc6, 0xfcc6], /* ARABIC LIGATURE KAF WITH KHAH INITIAL FORM */ + [0xfcc7, 0xfcc7], /* ARABIC LIGATURE KAF WITH LAM INITIAL FORM */ + [0xfcc8, 0xfcc8], /* ARABIC LIGATURE KAF WITH MEEM INITIAL FORM */ + [0xfcc9, 0xfcc9], /* ARABIC LIGATURE LAM WITH JEEM INITIAL FORM */ + [0xfcca, 0xfcca], /* ARABIC LIGATURE LAM WITH HAH INITIAL FORM */ + [0xfccb, 0xfccb], /* ARABIC LIGATURE LAM WITH KHAH INITIAL FORM */ + [0xfccc, 0xfccc], /* ARABIC LIGATURE LAM WITH MEEM INITIAL FORM */ + [0xfccd, 0xfccd], /* ARABIC LIGATURE LAM WITH HEH INITIAL FORM */ + [0xfcce, 0xfcce], /* ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM */ + [0xfccf, 0xfccf], /* ARABIC LIGATURE MEEM WITH HAH INITIAL FORM */ + [0xfcd0, 0xfcd0], /* ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM */ + [0xfcd1, 0xfcd1], /* ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM */ + [0xfcd2, 0xfcd2], /* ARABIC LIGATURE NOON WITH JEEM INITIAL FORM */ + [0xfcd3, 0xfcd3], /* ARABIC LIGATURE NOON WITH HAH INITIAL FORM */ + [0xfcd4, 0xfcd4], /* ARABIC LIGATURE NOON WITH KHAH INITIAL FORM */ + [0xfcd5, 0xfcd5], /* ARABIC LIGATURE NOON WITH MEEM INITIAL FORM */ + [0xfcd6, 0xfcd6], /* ARABIC LIGATURE NOON WITH HEH INITIAL FORM */ + [0xfcd7, 0xfcd7], /* ARABIC LIGATURE HEH WITH JEEM INITIAL FORM */ + [0xfcd8, 0xfcd8], /* ARABIC LIGATURE HEH WITH MEEM INITIAL FORM */ + [0xfcd9, 0xfcd9], /* ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM */ + [0xfcda, 0xfcda], /* ARABIC LIGATURE YEH WITH JEEM INITIAL FORM */ + [0xfcdb, 0xfcdb], /* ARABIC LIGATURE YEH WITH HAH INITIAL FORM */ + [0xfcdc, 0xfcdc], /* ARABIC LIGATURE YEH WITH KHAH INITIAL FORM */ + [0xfcdd, 0xfcdd], /* ARABIC LIGATURE YEH WITH MEEM INITIAL FORM */ + [0xfcde, 0xfcde], /* ARABIC LIGATURE YEH WITH HEH INITIAL FORM */ + [0xfcdf, 0xfcdf], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM */ + [0xfce0, 0xfce0], /* ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM */ + [0xfce1, 0xfce1], /* ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM */ + [0xfce2, 0xfce2], /* ARABIC LIGATURE BEH WITH HEH MEDIAL FORM */ + [0xfce3, 0xfce3], /* ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM */ + [0xfce4, 0xfce4], /* ARABIC LIGATURE TEH WITH HEH MEDIAL FORM */ + [0xfce5, 0xfce5], /* ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM */ + [0xfce6, 0xfce6], /* ARABIC LIGATURE THEH WITH HEH MEDIAL FORM */ + [0xfce7, 0xfce7], /* ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM */ + [0xfce8, 0xfce8], /* ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM */ + [0xfce9, 0xfce9], /* ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM */ + [0xfcea, 0xfcea], /* ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM */ + [0xfceb, 0xfceb], /* ARABIC LIGATURE KAF WITH LAM MEDIAL FORM */ + [0xfcec, 0xfcec], /* ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM */ + [0xfced, 0xfced], /* ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM */ + [0xfcee, 0xfcee], /* ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM */ + [0xfcef, 0xfcef], /* ARABIC LIGATURE NOON WITH HEH MEDIAL FORM */ + [0xfcf0, 0xfcf0], /* ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM */ + [0xfcf1, 0xfcf1], /* ARABIC LIGATURE YEH WITH HEH MEDIAL FORM */ + [0xfcf2, 0xfcf2], /* ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM */ + [0xfcf3, 0xfcf3], /* ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM */ + [0xfcf4, 0xfcf4], /* ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM */ + [0xfcf5, 0xfcf5], /* ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfcf6, 0xfcf6], /* ARABIC LIGATURE TAH WITH YEH ISOLATED FORM */ + [0xfcf7, 0xfcf7], /* ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM */ + [0xfcf8, 0xfcf8], /* ARABIC LIGATURE AIN WITH YEH ISOLATED FORM */ + [0xfcf9, 0xfcf9], /* ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM */ + [0xfcfa, 0xfcfa], /* ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM */ + [0xfcfb, 0xfcfb], /* ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM */ + [0xfcfc, 0xfcfc], /* ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM */ + [0xfcfd, 0xfcfd], /* ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM */ + [0xfcfe, 0xfcfe], /* ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM */ + [0xfcff, 0xfcff], /* ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfd00, 0xfd00], /* ARABIC LIGATURE HAH WITH YEH ISOLATED FORM */ + [0xfd01, 0xfd01], /* ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM */ + [0xfd02, 0xfd02], /* ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM */ + [0xfd03, 0xfd03], /* ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM */ + [0xfd04, 0xfd04], /* ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM */ + [0xfd05, 0xfd05], /* ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM */ + [0xfd06, 0xfd06], /* ARABIC LIGATURE SAD WITH YEH ISOLATED FORM */ + [0xfd07, 0xfd07], /* ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM */ + [0xfd08, 0xfd08], /* ARABIC LIGATURE DAD WITH YEH ISOLATED FORM */ + [0xfd09, 0xfd09], /* ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM */ + [0xfd0a, 0xfd0a], /* ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM */ + [0xfd0b, 0xfd0b], /* ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM */ + [0xfd0c, 0xfd0c], /* ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM */ + [0xfd0d, 0xfd0d], /* ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM */ + [0xfd0e, 0xfd0e], /* ARABIC LIGATURE SEEN WITH REH ISOLATED FORM */ + [0xfd0f, 0xfd0f], /* ARABIC LIGATURE SAD WITH REH ISOLATED FORM */ + [0xfd10, 0xfd10], /* ARABIC LIGATURE DAD WITH REH ISOLATED FORM */ + [0xfd11, 0xfd11], /* ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM */ + [0xfd12, 0xfd12], /* ARABIC LIGATURE TAH WITH YEH FINAL FORM */ + [0xfd13, 0xfd13], /* ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM */ + [0xfd14, 0xfd14], /* ARABIC LIGATURE AIN WITH YEH FINAL FORM */ + [0xfd15, 0xfd15], /* ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM */ + [0xfd16, 0xfd16], /* ARABIC LIGATURE GHAIN WITH YEH FINAL FORM */ + [0xfd17, 0xfd17], /* ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM */ + [0xfd18, 0xfd18], /* ARABIC LIGATURE SEEN WITH YEH FINAL FORM */ + [0xfd19, 0xfd19], /* ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM */ + [0xfd1a, 0xfd1a], /* ARABIC LIGATURE SHEEN WITH YEH FINAL FORM */ + [0xfd1b, 0xfd1b], /* ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM */ + [0xfd1c, 0xfd1c], /* ARABIC LIGATURE HAH WITH YEH FINAL FORM */ + [0xfd1d, 0xfd1d], /* ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfd1e, 0xfd1e], /* ARABIC LIGATURE JEEM WITH YEH FINAL FORM */ + [0xfd1f, 0xfd1f], /* ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM */ + [0xfd20, 0xfd20], /* ARABIC LIGATURE KHAH WITH YEH FINAL FORM */ + [0xfd21, 0xfd21], /* ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM */ + [0xfd22, 0xfd22], /* ARABIC LIGATURE SAD WITH YEH FINAL FORM */ + [0xfd23, 0xfd23], /* ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM */ + [0xfd24, 0xfd24], /* ARABIC LIGATURE DAD WITH YEH FINAL FORM */ + [0xfd25, 0xfd25], /* ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM */ + [0xfd26, 0xfd26], /* ARABIC LIGATURE SHEEN WITH HAH FINAL FORM */ + [0xfd27, 0xfd27], /* ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM */ + [0xfd28, 0xfd28], /* ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM */ + [0xfd29, 0xfd29], /* ARABIC LIGATURE SHEEN WITH REH FINAL FORM */ + [0xfd2a, 0xfd2a], /* ARABIC LIGATURE SEEN WITH REH FINAL FORM */ + [0xfd2b, 0xfd2b], /* ARABIC LIGATURE SAD WITH REH FINAL FORM */ + [0xfd2c, 0xfd2c], /* ARABIC LIGATURE DAD WITH REH FINAL FORM */ + [0xfd2d, 0xfd2d], /* ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM */ + [0xfd2e, 0xfd2e], /* ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM */ + [0xfd2f, 0xfd2f], /* ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM */ + [0xfd30, 0xfd30], /* ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM */ + [0xfd31, 0xfd31], /* ARABIC LIGATURE SEEN WITH HEH INITIAL FORM */ + [0xfd32, 0xfd32], /* ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM */ + [0xfd33, 0xfd33], /* ARABIC LIGATURE TAH WITH MEEM INITIAL FORM */ + [0xfd34, 0xfd34], /* ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM */ + [0xfd35, 0xfd35], /* ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM */ + [0xfd36, 0xfd36], /* ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM */ + [0xfd37, 0xfd37], /* ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM */ + [0xfd38, 0xfd38], /* ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM */ + [0xfd39, 0xfd39], /* ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM */ + [0xfd3a, 0xfd3a], /* ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM */ + [0xfd3b, 0xfd3b], /* ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM */ + [0xfd3c, 0xfd3c], /* ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM */ + [0xfd3d, 0xfd3d], /* ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM */ + [0xfd3e, 0xfd3e], /* ORNATE LEFT PARENTHESIS */ + [0xfd3f, 0xfd3f], /* ORNATE RIGHT PARENTHESIS */ + [0xfd40, 0xfd40], + [0xfd41, 0xfd41], + [0xfd42, 0xfd42], + [0xfd43, 0xfd43], + [0xfd44, 0xfd44], + [0xfd45, 0xfd45], + [0xfd46, 0xfd46], + [0xfd47, 0xfd47], + [0xfd48, 0xfd48], + [0xfd49, 0xfd49], + [0xfd4a, 0xfd4a], + [0xfd4b, 0xfd4b], + [0xfd4c, 0xfd4c], + [0xfd4d, 0xfd4d], + [0xfd4e, 0xfd4e], + [0xfd4f, 0xfd4f], + [0xfd50, 0xfd50], /* ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM */ + [0xfd51, 0xfd51], /* ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM */ + [0xfd52, 0xfd52], /* ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM */ + [0xfd53, 0xfd53], /* ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM */ + [0xfd54, 0xfd54], /* ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM */ + [0xfd55, 0xfd55], /* ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM */ + [0xfd56, 0xfd56], /* ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM */ + [0xfd57, 0xfd57], /* ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM */ + [0xfd58, 0xfd58], /* ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM */ + [0xfd59, 0xfd59], /* ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM */ + [0xfd5a, 0xfd5a], /* ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM */ + [0xfd5b, 0xfd5b], /* ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfd5c, 0xfd5c], /* ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM */ + [0xfd5d, 0xfd5d], /* ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM */ + [0xfd5e, 0xfd5e], /* ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfd5f, 0xfd5f], /* ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM */ + [0xfd60, 0xfd60], /* ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM */ + [0xfd61, 0xfd61], /* ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM */ + [0xfd62, 0xfd62], /* ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM */ + [0xfd63, 0xfd63], /* ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM */ + [0xfd64, 0xfd64], /* ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM */ + [0xfd65, 0xfd65], /* ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM */ + [0xfd66, 0xfd66], /* ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM */ + [0xfd67, 0xfd67], /* ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM */ + [0xfd68, 0xfd68], /* ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM */ + [0xfd69, 0xfd69], /* ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM */ + [0xfd6a, 0xfd6a], /* ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM */ + [0xfd6b, 0xfd6b], /* ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM */ + [0xfd6c, 0xfd6c], /* ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM */ + [0xfd6d, 0xfd6d], /* ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM */ + [0xfd6e, 0xfd6e], /* ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM */ + [0xfd6f, 0xfd6f], /* ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM */ + [0xfd70, 0xfd70], /* ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM */ + [0xfd71, 0xfd71], /* ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM */ + [0xfd72, 0xfd72], /* ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM */ + [0xfd73, 0xfd73], /* ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM */ + [0xfd74, 0xfd74], /* ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM */ + [0xfd75, 0xfd75], /* ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM */ + [0xfd76, 0xfd76], /* ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM */ + [0xfd77, 0xfd77], /* ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM */ + [0xfd78, 0xfd78], /* ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfd79, 0xfd79], /* ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM */ + [0xfd7a, 0xfd7a], /* ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM */ + [0xfd7b, 0xfd7b], /* ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfd7c, 0xfd7c], /* ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM */ + [0xfd7d, 0xfd7d], /* ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM */ + [0xfd7e, 0xfd7e], /* ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM */ + [0xfd7f, 0xfd7f], /* ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM */ + [0xfd80, 0xfd80], /* ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM */ + [0xfd81, 0xfd81], /* ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM */ + [0xfd82, 0xfd82], /* ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM */ + [0xfd83, 0xfd83], /* ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM */ + [0xfd84, 0xfd84], /* ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM */ + [0xfd85, 0xfd85], /* ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM */ + [0xfd86, 0xfd86], /* ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM */ + [0xfd87, 0xfd87], /* ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM */ + [0xfd88, 0xfd88], /* ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM */ + [0xfd89, 0xfd89], /* ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM */ + [0xfd8a, 0xfd8a], /* ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM */ + [0xfd8b, 0xfd8b], /* ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM */ + [0xfd8c, 0xfd8c], /* ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM */ + [0xfd8d, 0xfd8d], /* ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM */ + [0xfd8e, 0xfd8e], /* ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM */ + [0xfd8f, 0xfd8f], /* ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM */ + [0xfd90, 0xfd90], + [0xfd91, 0xfd91], + [0xfd92, 0xfd92], /* ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM */ + [0xfd93, 0xfd93], /* ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM */ + [0xfd94, 0xfd94], /* ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM */ + [0xfd95, 0xfd95], /* ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM */ + [0xfd96, 0xfd96], /* ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM */ + [0xfd97, 0xfd97], /* ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM */ + [0xfd98, 0xfd98], /* ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM */ + [0xfd99, 0xfd99], /* ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfd9a, 0xfd9a], /* ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM */ + [0xfd9b, 0xfd9b], /* ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfd9c, 0xfd9c], /* ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM */ + [0xfd9d, 0xfd9d], /* ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM */ + [0xfd9e, 0xfd9e], /* ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM */ + [0xfd9f, 0xfd9f], /* ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM */ + [0xfda0, 0xfda0], /* ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfda1, 0xfda1], /* ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM */ + [0xfda2, 0xfda2], /* ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM */ + [0xfda3, 0xfda3], /* ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM */ + [0xfda4, 0xfda4], /* ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfda5, 0xfda5], /* ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM */ + [0xfda6, 0xfda6], /* ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM */ + [0xfda7, 0xfda7], /* ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM */ + [0xfda8, 0xfda8], /* ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM */ + [0xfda9, 0xfda9], /* ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM */ + [0xfdaa, 0xfdaa], /* ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM */ + [0xfdab, 0xfdab], /* ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM */ + [0xfdac, 0xfdac], /* ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM */ + [0xfdad, 0xfdad], /* ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM */ + [0xfdae, 0xfdae], /* ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM */ + [0xfdaf, 0xfdaf], /* ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM */ + [0xfdb0, 0xfdb0], /* ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM */ + [0xfdb1, 0xfdb1], /* ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM */ + [0xfdb2, 0xfdb2], /* ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM */ + [0xfdb3, 0xfdb3], /* ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM */ + [0xfdb4, 0xfdb4], /* ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM */ + [0xfdb5, 0xfdb5], /* ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM */ + [0xfdb6, 0xfdb6], /* ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM */ + [0xfdb7, 0xfdb7], /* ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM */ + [0xfdb8, 0xfdb8], /* ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM */ + [0xfdb9, 0xfdb9], /* ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM */ + [0xfdba, 0xfdba], /* ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM */ + [0xfdbb, 0xfdbb], /* ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM */ + [0xfdbc, 0xfdbc], /* ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM */ + [0xfdbd, 0xfdbd], /* ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM */ + [0xfdbe, 0xfdbe], /* ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM */ + [0xfdbf, 0xfdbf], /* ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM */ + [0xfdc0, 0xfdc0], /* ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM */ + [0xfdc1, 0xfdc1], /* ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM */ + [0xfdc2, 0xfdc2], /* ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM */ + [0xfdc3, 0xfdc3], /* ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM */ + [0xfdc4, 0xfdc4], /* ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM */ + [0xfdc5, 0xfdc5], /* ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM */ + [0xfdc6, 0xfdc6], /* ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM */ + [0xfdc7, 0xfdc7], /* ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM */ + [0xfdc8, 0xfdc8], + [0xfdc9, 0xfdc9], + [0xfdca, 0xfdca], + [0xfdcb, 0xfdcb], + [0xfdcc, 0xfdcc], + [0xfdcd, 0xfdcd], + [0xfdce, 0xfdce], + [0xfdcf, 0xfdcf], + [0xfdd0, 0xfdd0], + [0xfdd1, 0xfdd1], + [0xfdd2, 0xfdd2], + [0xfdd3, 0xfdd3], + [0xfdd4, 0xfdd4], + [0xfdd5, 0xfdd5], + [0xfdd6, 0xfdd6], + [0xfdd7, 0xfdd7], + [0xfdd8, 0xfdd8], + [0xfdd9, 0xfdd9], + [0xfdda, 0xfdda], + [0xfddb, 0xfddb], + [0xfddc, 0xfddc], + [0xfddd, 0xfddd], + [0xfdde, 0xfdde], + [0xfddf, 0xfddf], + [0xfde0, 0xfde0], + [0xfde1, 0xfde1], + [0xfde2, 0xfde2], + [0xfde3, 0xfde3], + [0xfde4, 0xfde4], + [0xfde5, 0xfde5], + [0xfde6, 0xfde6], + [0xfde7, 0xfde7], + [0xfde8, 0xfde8], + [0xfde9, 0xfde9], + [0xfdea, 0xfdea], + [0xfdeb, 0xfdeb], + [0xfdec, 0xfdec], + [0xfded, 0xfded], + [0xfdee, 0xfdee], + [0xfdef, 0xfdef], + [0xfdf0, 0xfdf0], /* ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM */ + [0xfdf1, 0xfdf1], /* ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM */ + [0xfdf2, 0xfdf2], /* ARABIC LIGATURE ALLAH ISOLATED FORM */ + [0xfdf3, 0xfdf3], /* ARABIC LIGATURE AKBAR ISOLATED FORM */ + [0xfdf4, 0xfdf4], /* ARABIC LIGATURE MOHAMMAD ISOLATED FORM */ + [0xfdf5, 0xfdf5], /* ARABIC LIGATURE SALAM ISOLATED FORM */ + [0xfdf6, 0xfdf6], /* ARABIC LIGATURE RASOUL ISOLATED FORM */ + [0xfdf7, 0xfdf7], /* ARABIC LIGATURE ALAYHE ISOLATED FORM */ + [0xfdf8, 0xfdf8], /* ARABIC LIGATURE WASALLAM ISOLATED FORM */ + [0xfdf9, 0xfdf9], /* ARABIC LIGATURE SALLA ISOLATED FORM */ + [0xfdfa, 0xfdfa], /* ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM (ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM) */ + [0xfdfb, 0xfdfb], /* ARABIC LIGATURE JALLAJALALOUHOU (ARABIC LETTER JALLAJALALOUHOU) */ + [0xfdfc, 0xfdfc], /* RIAL SIGN */ + [0xfdfd, 0xfdfd], /* ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM */ + [0xfdfe, 0xfdfe], + [0xfdff, 0xfdff], + [0xfe00, 0xfe00], /* VARIATION SELECTOR-1 */ + [0xfe01, 0xfe01], /* VARIATION SELECTOR-2 */ + [0xfe02, 0xfe02], /* VARIATION SELECTOR-3 */ + [0xfe03, 0xfe03], /* VARIATION SELECTOR-4 */ + [0xfe04, 0xfe04], /* VARIATION SELECTOR-5 */ + [0xfe05, 0xfe05], /* VARIATION SELECTOR-6 */ + [0xfe06, 0xfe06], /* VARIATION SELECTOR-7 */ + [0xfe07, 0xfe07], /* VARIATION SELECTOR-8 */ + [0xfe08, 0xfe08], /* VARIATION SELECTOR-9 */ + [0xfe09, 0xfe09], /* VARIATION SELECTOR-10 */ + [0xfe0a, 0xfe0a], /* VARIATION SELECTOR-11 */ + [0xfe0b, 0xfe0b], /* VARIATION SELECTOR-12 */ + [0xfe0c, 0xfe0c], /* VARIATION SELECTOR-13 */ + [0xfe0d, 0xfe0d], /* VARIATION SELECTOR-14 */ + [0xfe0e, 0xfe0e], /* VARIATION SELECTOR-15 */ + [0xfe0f, 0xfe0f], /* VARIATION SELECTOR-16 */ + [0xfe10, 0xfe10], /* PRESENTATION FORM FOR VERTICAL COMMA */ + [0xfe11, 0xfe11], /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA */ + [0xfe12, 0xfe12], /* PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP */ + [0xfe13, 0xfe13], /* PRESENTATION FORM FOR VERTICAL COLON */ + [0xfe14, 0xfe14], /* PRESENTATION FORM FOR VERTICAL SEMICOLON */ + [0xfe15, 0xfe15], /* PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK */ + [0xfe16, 0xfe16], /* PRESENTATION FORM FOR VERTICAL QUESTION MARK */ + [0xfe17, 0xfe17], /* PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET */ + [0xfe18, 0xfe18], /* PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET */ + [0xfe19, 0xfe19], /* PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS */ + [0xfe1a, 0xfe1a], + [0xfe1b, 0xfe1b], + [0xfe1c, 0xfe1c], + [0xfe1d, 0xfe1d], + [0xfe1e, 0xfe1e], + [0xfe1f, 0xfe1f], + [0xfe20, 0xfe20], /* COMBINING LIGATURE LEFT HALF */ + [0xfe21, 0xfe21], /* COMBINING LIGATURE RIGHT HALF */ + [0xfe22, 0xfe22], /* COMBINING DOUBLE TILDE LEFT HALF */ + [0xfe23, 0xfe23], /* COMBINING DOUBLE TILDE RIGHT HALF */ + [0xfe24, 0xfe24], /* COMBINING MACRON LEFT HALF */ + [0xfe25, 0xfe25], /* COMBINING MACRON RIGHT HALF */ + [0xfe26, 0xfe26], /* COMBINING CONJOINING MACRON */ + [0xfe27, 0xfe27], + [0xfe28, 0xfe28], + [0xfe29, 0xfe29], + [0xfe2a, 0xfe2a], + [0xfe2b, 0xfe2b], + [0xfe2c, 0xfe2c], + [0xfe2d, 0xfe2d], + [0xfe2e, 0xfe2e], + [0xfe2f, 0xfe2f], + [0xfe30, 0xfe30], /* PRESENTATION FORM FOR VERTICAL TWO DOT LEADER (GLYPH FOR VERTICAL TWO DOT LEADER) */ + [0xfe31, 0xfe31], /* PRESENTATION FORM FOR VERTICAL EM DASH (GLYPH FOR VERTICAL EM DASH) */ + [0xfe32, 0xfe32], /* PRESENTATION FORM FOR VERTICAL EN DASH (GLYPH FOR VERTICAL EN DASH) */ + [0xfe33, 0xfe33], /* PRESENTATION FORM FOR VERTICAL LOW LINE (GLYPH FOR VERTICAL SPACING UNDERSCORE) */ + [0xfe34, 0xfe34], /* PRESENTATION FORM FOR VERTICAL WAVY LOW LINE (GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE) */ + [0xfe35, 0xfe35], /* PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS (GLYPH FOR VERTICAL OPENING PARENTHESIS) */ + [0xfe36, 0xfe36], /* PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS (GLYPH FOR VERTICAL CLOSING PARENTHESIS) */ + [0xfe37, 0xfe37], /* PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET (GLYPH FOR VERTICAL OPENING CURLY BRACKET) */ + [0xfe38, 0xfe38], /* PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET (GLYPH FOR VERTICAL CLOSING CURLY BRACKET) */ + [0xfe39, 0xfe39], /* PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET (GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET) */ + [0xfe3a, 0xfe3a], /* PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET (GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET) */ + [0xfe3b, 0xfe3b], /* PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET (GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET) */ + [0xfe3c, 0xfe3c], /* PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET (GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET) */ + [0xfe3d, 0xfe3d], /* PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET (GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET) */ + [0xfe3e, 0xfe3e], /* PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET (GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET) */ + [0xfe3f, 0xfe3f], /* PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET (GLYPH FOR VERTICAL OPENING ANGLE BRACKET) */ + [0xfe40, 0xfe40], /* PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET (GLYPH FOR VERTICAL CLOSING ANGLE BRACKET) */ + [0xfe41, 0xfe41], /* PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET (GLYPH FOR VERTICAL OPENING CORNER BRACKET) */ + [0xfe42, 0xfe42], /* PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET (GLYPH FOR VERTICAL CLOSING CORNER BRACKET) */ + [0xfe43, 0xfe43], /* PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET (GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET) */ + [0xfe44, 0xfe44], /* PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET (GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET) */ + [0xfe45, 0xfe45], /* SESAME DOT */ + [0xfe46, 0xfe46], /* WHITE SESAME DOT */ + [0xfe47, 0xfe47], /* PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET */ + [0xfe48, 0xfe48], /* PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET */ + [0xfe49, 0xfe49], /* DASHED OVERLINE (SPACING DASHED OVERSCORE) */ + [0xfe4a, 0xfe4a], /* CENTRELINE OVERLINE (SPACING CENTERLINE OVERSCORE) */ + [0xfe4b, 0xfe4b], /* WAVY OVERLINE (SPACING WAVY OVERSCORE) */ + [0xfe4c, 0xfe4c], /* DOUBLE WAVY OVERLINE (SPACING DOUBLE WAVY OVERSCORE) */ + [0xfe4d, 0xfe4d], /* DASHED LOW LINE (SPACING DASHED UNDERSCORE) */ + [0xfe4e, 0xfe4e], /* CENTRELINE LOW LINE (SPACING CENTERLINE UNDERSCORE) */ + [0xfe4f, 0xfe4f], /* WAVY LOW LINE (SPACING WAVY UNDERSCORE) */ + [0xfe50, 0xfe50], /* SMALL COMMA */ + [0xfe51, 0xfe51], /* SMALL IDEOGRAPHIC COMMA */ + [0xfe52, 0xfe52], /* SMALL FULL STOP (SMALL PERIOD) */ + [0xfe53, 0xfe53], + [0xfe54, 0xfe54], /* SMALL SEMICOLON */ + [0xfe55, 0xfe55], /* SMALL COLON */ + [0xfe56, 0xfe56], /* SMALL QUESTION MARK */ + [0xfe57, 0xfe57], /* SMALL EXCLAMATION MARK */ + [0xfe58, 0xfe58], /* SMALL EM DASH */ + [0xfe59, 0xfe59], /* SMALL LEFT PARENTHESIS (SMALL OPENING PARENTHESIS) */ + [0xfe5a, 0xfe5a], /* SMALL RIGHT PARENTHESIS (SMALL CLOSING PARENTHESIS) */ + [0xfe5b, 0xfe5b], /* SMALL LEFT CURLY BRACKET (SMALL OPENING CURLY BRACKET) */ + [0xfe5c, 0xfe5c], /* SMALL RIGHT CURLY BRACKET (SMALL CLOSING CURLY BRACKET) */ + [0xfe5d, 0xfe5d], /* SMALL LEFT TORTOISE SHELL BRACKET (SMALL OPENING TORTOISE SHELL BRACKET) */ + [0xfe5e, 0xfe5e], /* SMALL RIGHT TORTOISE SHELL BRACKET (SMALL CLOSING TORTOISE SHELL BRACKET) */ + [0xfe5f, 0xfe5f], /* SMALL NUMBER SIGN */ + [0xfe60, 0xfe60], /* SMALL AMPERSAND */ + [0xfe61, 0xfe61], /* SMALL ASTERISK */ + [0xfe62, 0xfe62], /* SMALL PLUS SIGN */ + [0xfe63, 0xfe63], /* SMALL HYPHEN-MINUS */ + [0xfe64, 0xfe64], /* SMALL LESS-THAN SIGN */ + [0xfe65, 0xfe65], /* SMALL GREATER-THAN SIGN */ + [0xfe66, 0xfe66], /* SMALL EQUALS SIGN */ + [0xfe67, 0xfe67], + [0xfe68, 0xfe68], /* SMALL REVERSE SOLIDUS (SMALL BACKSLASH) */ + [0xfe69, 0xfe69], /* SMALL DOLLAR SIGN */ + [0xfe6a, 0xfe6a], /* SMALL PERCENT SIGN */ + [0xfe6b, 0xfe6b], /* SMALL COMMERCIAL AT */ + [0xfe6c, 0xfe6c], + [0xfe6d, 0xfe6d], + [0xfe6e, 0xfe6e], + [0xfe6f, 0xfe6f], + [0xfe70, 0xfe70], /* ARABIC FATHATAN ISOLATED FORM (ARABIC SPACING FATHATAN) */ + [0xfe71, 0xfe71], /* ARABIC TATWEEL WITH FATHATAN ABOVE (ARABIC FATHATAN ON TATWEEL) */ + [0xfe72, 0xfe72], /* ARABIC DAMMATAN ISOLATED FORM (ARABIC SPACING DAMMATAN) */ + [0xfe73, 0xfe73], /* ARABIC TAIL FRAGMENT */ + [0xfe74, 0xfe74], /* ARABIC KASRATAN ISOLATED FORM (ARABIC SPACING KASRATAN) */ + [0xfe75, 0xfe75], + [0xfe76, 0xfe76], /* ARABIC FATHA ISOLATED FORM (ARABIC SPACING FATHAH) */ + [0xfe77, 0xfe77], /* ARABIC FATHA MEDIAL FORM (ARABIC FATHAH ON TATWEEL) */ + [0xfe78, 0xfe78], /* ARABIC DAMMA ISOLATED FORM (ARABIC SPACING DAMMAH) */ + [0xfe79, 0xfe79], /* ARABIC DAMMA MEDIAL FORM (ARABIC DAMMAH ON TATWEEL) */ + [0xfe7a, 0xfe7a], /* ARABIC KASRA ISOLATED FORM (ARABIC SPACING KASRAH) */ + [0xfe7b, 0xfe7b], /* ARABIC KASRA MEDIAL FORM (ARABIC KASRAH ON TATWEEL) */ + [0xfe7c, 0xfe7c], /* ARABIC SHADDA ISOLATED FORM (ARABIC SPACING SHADDAH) */ + [0xfe7d, 0xfe7d], /* ARABIC SHADDA MEDIAL FORM (ARABIC SHADDAH ON TATWEEL) */ + [0xfe7e, 0xfe7e], /* ARABIC SUKUN ISOLATED FORM (ARABIC SPACING SUKUN) */ + [0xfe7f, 0xfe7f], /* ARABIC SUKUN MEDIAL FORM (ARABIC SUKUN ON TATWEEL) */ + [0xfe80, 0xfe80], /* ARABIC LETTER HAMZA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH) */ + [0xfe81, 0xfe81], /* ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF) */ + [0xfe82, 0xfe82], /* ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC MADDAH ON ALEF) */ + [0xfe83, 0xfe83], /* ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF) */ + [0xfe84, 0xfe84], /* ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON ALEF) */ + [0xfe85, 0xfe85], /* ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW) */ + [0xfe86, 0xfe86], /* ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON WAW) */ + [0xfe87, 0xfe87], /* ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF) */ + [0xfe88, 0xfe88], /* ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF) */ + [0xfe89, 0xfe89], /* ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON YA) */ + [0xfe8a, 0xfe8a], /* ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON YA) */ + [0xfe8b, 0xfe8b], /* ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM (GLYPH FOR INITIAL ARABIC HAMZAH ON YA) */ + [0xfe8c, 0xfe8c], /* ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HAMZAH ON YA) */ + [0xfe8d, 0xfe8d], /* ARABIC LETTER ALEF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ALEF) */ + [0xfe8e, 0xfe8e], /* ARABIC LETTER ALEF FINAL FORM (GLYPH FOR FINAL ARABIC ALEF) */ + [0xfe8f, 0xfe8f], /* ARABIC LETTER BEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC BAA) */ + [0xfe90, 0xfe90], /* ARABIC LETTER BEH FINAL FORM (GLYPH FOR FINAL ARABIC BAA) */ + [0xfe91, 0xfe91], /* ARABIC LETTER BEH INITIAL FORM (GLYPH FOR INITIAL ARABIC BAA) */ + [0xfe92, 0xfe92], /* ARABIC LETTER BEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC BAA) */ + [0xfe93, 0xfe93], /* ARABIC LETTER TEH MARBUTA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAA MARBUTAH) */ + [0xfe94, 0xfe94], /* ARABIC LETTER TEH MARBUTA FINAL FORM (GLYPH FOR FINAL ARABIC TAA MARBUTAH) */ + [0xfe95, 0xfe95], /* ARABIC LETTER TEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAA) */ + [0xfe96, 0xfe96], /* ARABIC LETTER TEH FINAL FORM (GLYPH FOR FINAL ARABIC TAA) */ + [0xfe97, 0xfe97], /* ARABIC LETTER TEH INITIAL FORM (GLYPH FOR INITIAL ARABIC TAA) */ + [0xfe98, 0xfe98], /* ARABIC LETTER TEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC TAA) */ + [0xfe99, 0xfe99], /* ARABIC LETTER THEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC THAA) */ + [0xfe9a, 0xfe9a], /* ARABIC LETTER THEH FINAL FORM (GLYPH FOR FINAL ARABIC THAA) */ + [0xfe9b, 0xfe9b], /* ARABIC LETTER THEH INITIAL FORM (GLYPH FOR INITIAL ARABIC THAA) */ + [0xfe9c, 0xfe9c], /* ARABIC LETTER THEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC THAA) */ + [0xfe9d, 0xfe9d], /* ARABIC LETTER JEEM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC JEEM) */ + [0xfe9e, 0xfe9e], /* ARABIC LETTER JEEM FINAL FORM (GLYPH FOR FINAL ARABIC JEEM) */ + [0xfe9f, 0xfe9f], /* ARABIC LETTER JEEM INITIAL FORM (GLYPH FOR INITIAL ARABIC JEEM) */ + [0xfea0, 0xfea0], /* ARABIC LETTER JEEM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC JEEM) */ + [0xfea1, 0xfea1], /* ARABIC LETTER HAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAA) */ + [0xfea2, 0xfea2], /* ARABIC LETTER HAH FINAL FORM (GLYPH FOR FINAL ARABIC HAA) */ + [0xfea3, 0xfea3], /* ARABIC LETTER HAH INITIAL FORM (GLYPH FOR INITIAL ARABIC HAA) */ + [0xfea4, 0xfea4], /* ARABIC LETTER HAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HAA) */ + [0xfea5, 0xfea5], /* ARABIC LETTER KHAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC KHAA) */ + [0xfea6, 0xfea6], /* ARABIC LETTER KHAH FINAL FORM (GLYPH FOR FINAL ARABIC KHAA) */ + [0xfea7, 0xfea7], /* ARABIC LETTER KHAH INITIAL FORM (GLYPH FOR INITIAL ARABIC KHAA) */ + [0xfea8, 0xfea8], /* ARABIC LETTER KHAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC KHAA) */ + [0xfea9, 0xfea9], /* ARABIC LETTER DAL ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DAL) */ + [0xfeaa, 0xfeaa], /* ARABIC LETTER DAL FINAL FORM (GLYPH FOR FINAL ARABIC DAL) */ + [0xfeab, 0xfeab], /* ARABIC LETTER THAL ISOLATED FORM (GLYPH FOR ISOLATE ARABIC THAL) */ + [0xfeac, 0xfeac], /* ARABIC LETTER THAL FINAL FORM (GLYPH FOR FINAL ARABIC THAL) */ + [0xfead, 0xfead], /* ARABIC LETTER REH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC RA) */ + [0xfeae, 0xfeae], /* ARABIC LETTER REH FINAL FORM (GLYPH FOR FINAL ARABIC RA) */ + [0xfeaf, 0xfeaf], /* ARABIC LETTER ZAIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ZAIN) */ + [0xfeb0, 0xfeb0], /* ARABIC LETTER ZAIN FINAL FORM (GLYPH FOR FINAL ARABIC ZAIN) */ + [0xfeb1, 0xfeb1], /* ARABIC LETTER SEEN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SEEN) */ + [0xfeb2, 0xfeb2], /* ARABIC LETTER SEEN FINAL FORM (GLYPH FOR FINAL ARABIC SEEN) */ + [0xfeb3, 0xfeb3], /* ARABIC LETTER SEEN INITIAL FORM (GLYPH FOR INITIAL ARABIC SEEN) */ + [0xfeb4, 0xfeb4], /* ARABIC LETTER SEEN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SEEN) */ + [0xfeb5, 0xfeb5], /* ARABIC LETTER SHEEN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SHEEN) */ + [0xfeb6, 0xfeb6], /* ARABIC LETTER SHEEN FINAL FORM (GLYPH FOR FINAL ARABIC SHEEN) */ + [0xfeb7, 0xfeb7], /* ARABIC LETTER SHEEN INITIAL FORM (GLYPH FOR INITIAL ARABIC SHEEN) */ + [0xfeb8, 0xfeb8], /* ARABIC LETTER SHEEN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SHEEN) */ + [0xfeb9, 0xfeb9], /* ARABIC LETTER SAD ISOLATED FORM (GLYPH FOR ISOLATE ARABIC SAD) */ + [0xfeba, 0xfeba], /* ARABIC LETTER SAD FINAL FORM (GLYPH FOR FINAL ARABIC SAD) */ + [0xfebb, 0xfebb], /* ARABIC LETTER SAD INITIAL FORM (GLYPH FOR INITIAL ARABIC SAD) */ + [0xfebc, 0xfebc], /* ARABIC LETTER SAD MEDIAL FORM (GLYPH FOR MEDIAL ARABIC SAD) */ + [0xfebd, 0xfebd], /* ARABIC LETTER DAD ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DAD) */ + [0xfebe, 0xfebe], /* ARABIC LETTER DAD FINAL FORM (GLYPH FOR FINAL ARABIC DAD) */ + [0xfebf, 0xfebf], /* ARABIC LETTER DAD INITIAL FORM (GLYPH FOR INITIAL ARABIC DAD) */ + [0xfec0, 0xfec0], /* ARABIC LETTER DAD MEDIAL FORM (GLYPH FOR MEDIAL ARABIC DAD) */ + [0xfec1, 0xfec1], /* ARABIC LETTER TAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC TAH) */ + [0xfec2, 0xfec2], /* ARABIC LETTER TAH FINAL FORM (GLYPH FOR FINAL ARABIC TAH) */ + [0xfec3, 0xfec3], /* ARABIC LETTER TAH INITIAL FORM (GLYPH FOR INITIAL ARABIC TAH) */ + [0xfec4, 0xfec4], /* ARABIC LETTER TAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC TAH) */ + [0xfec5, 0xfec5], /* ARABIC LETTER ZAH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC DHAH) */ + [0xfec6, 0xfec6], /* ARABIC LETTER ZAH FINAL FORM (GLYPH FOR FINAL ARABIC DHAH) */ + [0xfec7, 0xfec7], /* ARABIC LETTER ZAH INITIAL FORM (GLYPH FOR INITIAL ARABIC DHAH) */ + [0xfec8, 0xfec8], /* ARABIC LETTER ZAH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC DHAH) */ + [0xfec9, 0xfec9], /* ARABIC LETTER AIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC AIN) */ + [0xfeca, 0xfeca], /* ARABIC LETTER AIN FINAL FORM (GLYPH FOR FINAL ARABIC AIN) */ + [0xfecb, 0xfecb], /* ARABIC LETTER AIN INITIAL FORM (GLYPH FOR INITIAL ARABIC AIN) */ + [0xfecc, 0xfecc], /* ARABIC LETTER AIN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC AIN) */ + [0xfecd, 0xfecd], /* ARABIC LETTER GHAIN ISOLATED FORM (GLYPH FOR ISOLATE ARABIC GHAIN) */ + [0xfece, 0xfece], /* ARABIC LETTER GHAIN FINAL FORM (GLYPH FOR FINAL ARABIC GHAIN) */ + [0xfecf, 0xfecf], /* ARABIC LETTER GHAIN INITIAL FORM (GLYPH FOR INITIAL ARABIC GHAIN) */ + [0xfed0, 0xfed0], /* ARABIC LETTER GHAIN MEDIAL FORM (GLYPH FOR MEDIAL ARABIC GHAIN) */ + [0xfed1, 0xfed1], /* ARABIC LETTER FEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC FA) */ + [0xfed2, 0xfed2], /* ARABIC LETTER FEH FINAL FORM (GLYPH FOR FINAL ARABIC FA) */ + [0xfed3, 0xfed3], /* ARABIC LETTER FEH INITIAL FORM (GLYPH FOR INITIAL ARABIC FA) */ + [0xfed4, 0xfed4], /* ARABIC LETTER FEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC FA) */ + [0xfed5, 0xfed5], /* ARABIC LETTER QAF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC QAF) */ + [0xfed6, 0xfed6], /* ARABIC LETTER QAF FINAL FORM (GLYPH FOR FINAL ARABIC QAF) */ + [0xfed7, 0xfed7], /* ARABIC LETTER QAF INITIAL FORM (GLYPH FOR INITIAL ARABIC QAF) */ + [0xfed8, 0xfed8], /* ARABIC LETTER QAF MEDIAL FORM (GLYPH FOR MEDIAL ARABIC QAF) */ + [0xfed9, 0xfed9], /* ARABIC LETTER KAF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC CAF) */ + [0xfeda, 0xfeda], /* ARABIC LETTER KAF FINAL FORM (GLYPH FOR FINAL ARABIC CAF) */ + [0xfedb, 0xfedb], /* ARABIC LETTER KAF INITIAL FORM (GLYPH FOR INITIAL ARABIC CAF) */ + [0xfedc, 0xfedc], /* ARABIC LETTER KAF MEDIAL FORM (GLYPH FOR MEDIAL ARABIC CAF) */ + [0xfedd, 0xfedd], /* ARABIC LETTER LAM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC LAM) */ + [0xfede, 0xfede], /* ARABIC LETTER LAM FINAL FORM (GLYPH FOR FINAL ARABIC LAM) */ + [0xfedf, 0xfedf], /* ARABIC LETTER LAM INITIAL FORM (GLYPH FOR INITIAL ARABIC LAM) */ + [0xfee0, 0xfee0], /* ARABIC LETTER LAM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC LAM) */ + [0xfee1, 0xfee1], /* ARABIC LETTER MEEM ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MEEM) */ + [0xfee2, 0xfee2], /* ARABIC LETTER MEEM FINAL FORM (GLYPH FOR FINAL ARABIC MEEM) */ + [0xfee3, 0xfee3], /* ARABIC LETTER MEEM INITIAL FORM (GLYPH FOR INITIAL ARABIC MEEM) */ + [0xfee4, 0xfee4], /* ARABIC LETTER MEEM MEDIAL FORM (GLYPH FOR MEDIAL ARABIC MEEM) */ + [0xfee5, 0xfee5], /* ARABIC LETTER NOON ISOLATED FORM (GLYPH FOR ISOLATE ARABIC NOON) */ + [0xfee6, 0xfee6], /* ARABIC LETTER NOON FINAL FORM (GLYPH FOR FINAL ARABIC NOON) */ + [0xfee7, 0xfee7], /* ARABIC LETTER NOON INITIAL FORM (GLYPH FOR INITIAL ARABIC NOON) */ + [0xfee8, 0xfee8], /* ARABIC LETTER NOON MEDIAL FORM (GLYPH FOR MEDIAL ARABIC NOON) */ + [0xfee9, 0xfee9], /* ARABIC LETTER HEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HA) */ + [0xfeea, 0xfeea], /* ARABIC LETTER HEH FINAL FORM (GLYPH FOR FINAL ARABIC HA) */ + [0xfeeb, 0xfeeb], /* ARABIC LETTER HEH INITIAL FORM (GLYPH FOR INITIAL ARABIC HA) */ + [0xfeec, 0xfeec], /* ARABIC LETTER HEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC HA) */ + [0xfeed, 0xfeed], /* ARABIC LETTER WAW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC WAW) */ + [0xfeee, 0xfeee], /* ARABIC LETTER WAW FINAL FORM (GLYPH FOR FINAL ARABIC WAW) */ + [0xfeef, 0xfeef], /* ARABIC LETTER ALEF MAKSURA ISOLATED FORM (GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH) */ + [0xfef0, 0xfef0], /* ARABIC LETTER ALEF MAKSURA FINAL FORM (GLYPH FOR FINAL ARABIC ALEF MAQSURAH) */ + [0xfef1, 0xfef1], /* ARABIC LETTER YEH ISOLATED FORM (GLYPH FOR ISOLATE ARABIC YA) */ + [0xfef2, 0xfef2], /* ARABIC LETTER YEH FINAL FORM (GLYPH FOR FINAL ARABIC YA) */ + [0xfef3, 0xfef3], /* ARABIC LETTER YEH INITIAL FORM (GLYPH FOR INITIAL ARABIC YA) */ + [0xfef4, 0xfef4], /* ARABIC LETTER YEH MEDIAL FORM (GLYPH FOR MEDIAL ARABIC YA) */ + [0xfef5, 0xfef5], /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF) */ + [0xfef6, 0xfef6], /* ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF) */ + [0xfef7, 0xfef7], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF) */ + [0xfef8, 0xfef8], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF) */ + [0xfef9, 0xfef9], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM (GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF) */ + [0xfefa, 0xfefa], /* ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM (GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF) */ + [0xfefb, 0xfefb], /* ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM (GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF) */ + [0xfefc, 0xfefc], /* ARABIC LIGATURE LAM WITH ALEF FINAL FORM (GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF) */ + [0xfefd, 0xfefd], + [0xfefe, 0xfefe], + [0xfeff, 0xfeff], /* ZERO WIDTH NO-BREAK SPACE (BYTE ORDER MARK) */ + [0xff00, 0xff00], + [0xff01, 0xff01], /* FULLWIDTH EXCLAMATION MARK */ + [0xff02, 0xff02], /* FULLWIDTH QUOTATION MARK */ + [0xff03, 0xff03], /* FULLWIDTH NUMBER SIGN */ + [0xff04, 0xff04], /* FULLWIDTH DOLLAR SIGN */ + [0xff05, 0xff05], /* FULLWIDTH PERCENT SIGN */ + [0xff06, 0xff06], /* FULLWIDTH AMPERSAND */ + [0xff07, 0xff07], /* FULLWIDTH APOSTROPHE */ + [0xff08, 0xff08], /* FULLWIDTH LEFT PARENTHESIS (FULLWIDTH OPENING PARENTHESIS) */ + [0xff09, 0xff09], /* FULLWIDTH RIGHT PARENTHESIS (FULLWIDTH CLOSING PARENTHESIS) */ + [0xff0a, 0xff0a], /* FULLWIDTH ASTERISK */ + [0xff0b, 0xff0b], /* FULLWIDTH PLUS SIGN */ + [0xff0c, 0xff0c], /* FULLWIDTH COMMA */ + [0xff0d, 0xff0d], /* FULLWIDTH HYPHEN-MINUS */ + [0xff0e, 0xff0e], /* FULLWIDTH FULL STOP (FULLWIDTH PERIOD) */ + [0xff0f, 0xff0f], /* FULLWIDTH SOLIDUS (FULLWIDTH SLASH) */ + [0xff10, 0xff10], /* FULLWIDTH DIGIT ZERO */ + [0xff11, 0xff11], /* FULLWIDTH DIGIT ONE */ + [0xff12, 0xff12], /* FULLWIDTH DIGIT TWO */ + [0xff13, 0xff13], /* FULLWIDTH DIGIT THREE */ + [0xff14, 0xff14], /* FULLWIDTH DIGIT FOUR */ + [0xff15, 0xff15], /* FULLWIDTH DIGIT FIVE */ + [0xff16, 0xff16], /* FULLWIDTH DIGIT SIX */ + [0xff17, 0xff17], /* FULLWIDTH DIGIT SEVEN */ + [0xff18, 0xff18], /* FULLWIDTH DIGIT EIGHT */ + [0xff19, 0xff19], /* FULLWIDTH DIGIT NINE */ + [0xff1a, 0xff1a], /* FULLWIDTH COLON */ + [0xff1b, 0xff1b], /* FULLWIDTH SEMICOLON */ + [0xff1c, 0xff1c], /* FULLWIDTH LESS-THAN SIGN */ + [0xff1d, 0xff1d], /* FULLWIDTH EQUALS SIGN */ + [0xff1e, 0xff1e], /* FULLWIDTH GREATER-THAN SIGN */ + [0xff1f, 0xff1f], /* FULLWIDTH QUESTION MARK */ + [0xff20, 0xff20], /* FULLWIDTH COMMERCIAL AT */ + [0xff21, 0xff41], /* FULLWIDTH LATIN CAPITAL LETTER A */ + [0xff22, 0xff42], /* FULLWIDTH LATIN CAPITAL LETTER B */ + [0xff23, 0xff43], /* FULLWIDTH LATIN CAPITAL LETTER C */ + [0xff24, 0xff44], /* FULLWIDTH LATIN CAPITAL LETTER D */ + [0xff25, 0xff45], /* FULLWIDTH LATIN CAPITAL LETTER E */ + [0xff26, 0xff46], /* FULLWIDTH LATIN CAPITAL LETTER F */ + [0xff27, 0xff47], /* FULLWIDTH LATIN CAPITAL LETTER G */ + [0xff28, 0xff48], /* FULLWIDTH LATIN CAPITAL LETTER H */ + [0xff29, 0xff49], /* FULLWIDTH LATIN CAPITAL LETTER I */ + [0xff2a, 0xff4a], /* FULLWIDTH LATIN CAPITAL LETTER J */ + [0xff2b, 0xff4b], /* FULLWIDTH LATIN CAPITAL LETTER K */ + [0xff2c, 0xff4c], /* FULLWIDTH LATIN CAPITAL LETTER L */ + [0xff2d, 0xff4d], /* FULLWIDTH LATIN CAPITAL LETTER M */ + [0xff2e, 0xff4e], /* FULLWIDTH LATIN CAPITAL LETTER N */ + [0xff2f, 0xff4f], /* FULLWIDTH LATIN CAPITAL LETTER O */ + [0xff30, 0xff50], /* FULLWIDTH LATIN CAPITAL LETTER P */ + [0xff31, 0xff51], /* FULLWIDTH LATIN CAPITAL LETTER Q */ + [0xff32, 0xff52], /* FULLWIDTH LATIN CAPITAL LETTER R */ + [0xff33, 0xff53], /* FULLWIDTH LATIN CAPITAL LETTER S */ + [0xff34, 0xff54], /* FULLWIDTH LATIN CAPITAL LETTER T */ + [0xff35, 0xff55], /* FULLWIDTH LATIN CAPITAL LETTER U */ + [0xff36, 0xff56], /* FULLWIDTH LATIN CAPITAL LETTER V */ + [0xff37, 0xff57], /* FULLWIDTH LATIN CAPITAL LETTER W */ + [0xff38, 0xff58], /* FULLWIDTH LATIN CAPITAL LETTER X */ + [0xff39, 0xff59], /* FULLWIDTH LATIN CAPITAL LETTER Y */ + [0xff3a, 0xff5a], /* FULLWIDTH LATIN CAPITAL LETTER Z */ + [0xff3b, 0xff3b], /* FULLWIDTH LEFT SQUARE BRACKET (FULLWIDTH OPENING SQUARE BRACKET) */ + [0xff3c, 0xff3c], /* FULLWIDTH REVERSE SOLIDUS (FULLWIDTH BACKSLASH) */ + [0xff3d, 0xff3d], /* FULLWIDTH RIGHT SQUARE BRACKET (FULLWIDTH CLOSING SQUARE BRACKET) */ + [0xff3e, 0xff3e], /* FULLWIDTH CIRCUMFLEX ACCENT (FULLWIDTH SPACING CIRCUMFLEX) */ + [0xff3f, 0xff3f], /* FULLWIDTH LOW LINE (FULLWIDTH SPACING UNDERSCORE) */ + [0xff40, 0xff40], /* FULLWIDTH GRAVE ACCENT (FULLWIDTH SPACING GRAVE) */ + [0xff21, 0xff41], /* FULLWIDTH LATIN SMALL LETTER A */ + [0xff22, 0xff42], /* FULLWIDTH LATIN SMALL LETTER B */ + [0xff23, 0xff43], /* FULLWIDTH LATIN SMALL LETTER C */ + [0xff24, 0xff44], /* FULLWIDTH LATIN SMALL LETTER D */ + [0xff25, 0xff45], /* FULLWIDTH LATIN SMALL LETTER E */ + [0xff26, 0xff46], /* FULLWIDTH LATIN SMALL LETTER F */ + [0xff27, 0xff47], /* FULLWIDTH LATIN SMALL LETTER G */ + [0xff28, 0xff48], /* FULLWIDTH LATIN SMALL LETTER H */ + [0xff29, 0xff49], /* FULLWIDTH LATIN SMALL LETTER I */ + [0xff2a, 0xff4a], /* FULLWIDTH LATIN SMALL LETTER J */ + [0xff2b, 0xff4b], /* FULLWIDTH LATIN SMALL LETTER K */ + [0xff2c, 0xff4c], /* FULLWIDTH LATIN SMALL LETTER L */ + [0xff2d, 0xff4d], /* FULLWIDTH LATIN SMALL LETTER M */ + [0xff2e, 0xff4e], /* FULLWIDTH LATIN SMALL LETTER N */ + [0xff2f, 0xff4f], /* FULLWIDTH LATIN SMALL LETTER O */ + [0xff30, 0xff50], /* FULLWIDTH LATIN SMALL LETTER P */ + [0xff31, 0xff51], /* FULLWIDTH LATIN SMALL LETTER Q */ + [0xff32, 0xff52], /* FULLWIDTH LATIN SMALL LETTER R */ + [0xff33, 0xff53], /* FULLWIDTH LATIN SMALL LETTER S */ + [0xff34, 0xff54], /* FULLWIDTH LATIN SMALL LETTER T */ + [0xff35, 0xff55], /* FULLWIDTH LATIN SMALL LETTER U */ + [0xff36, 0xff56], /* FULLWIDTH LATIN SMALL LETTER V */ + [0xff37, 0xff57], /* FULLWIDTH LATIN SMALL LETTER W */ + [0xff38, 0xff58], /* FULLWIDTH LATIN SMALL LETTER X */ + [0xff39, 0xff59], /* FULLWIDTH LATIN SMALL LETTER Y */ + [0xff3a, 0xff5a], /* FULLWIDTH LATIN SMALL LETTER Z */ + [0xff5b, 0xff5b], /* FULLWIDTH LEFT CURLY BRACKET (FULLWIDTH OPENING CURLY BRACKET) */ + [0xff5c, 0xff5c], /* FULLWIDTH VERTICAL LINE (FULLWIDTH VERTICAL BAR) */ + [0xff5d, 0xff5d], /* FULLWIDTH RIGHT CURLY BRACKET (FULLWIDTH CLOSING CURLY BRACKET) */ + [0xff5e, 0xff5e], /* FULLWIDTH TILDE (FULLWIDTH SPACING TILDE) */ + [0xff5f, 0xff5f], /* FULLWIDTH LEFT WHITE PARENTHESIS */ + [0xff60, 0xff60], /* FULLWIDTH RIGHT WHITE PARENTHESIS */ + [0xff61, 0xff61], /* HALFWIDTH IDEOGRAPHIC FULL STOP (HALFWIDTH IDEOGRAPHIC PERIOD) */ + [0xff62, 0xff62], /* HALFWIDTH LEFT CORNER BRACKET (HALFWIDTH OPENING CORNER BRACKET) */ + [0xff63, 0xff63], /* HALFWIDTH RIGHT CORNER BRACKET (HALFWIDTH CLOSING CORNER BRACKET) */ + [0xff64, 0xff64], /* HALFWIDTH IDEOGRAPHIC COMMA */ + [0xff65, 0xff65], /* HALFWIDTH KATAKANA MIDDLE DOT */ + [0xff66, 0xff66], /* HALFWIDTH KATAKANA LETTER WO */ + [0xff67, 0xff67], /* HALFWIDTH KATAKANA LETTER SMALL A */ + [0xff68, 0xff68], /* HALFWIDTH KATAKANA LETTER SMALL I */ + [0xff69, 0xff69], /* HALFWIDTH KATAKANA LETTER SMALL U */ + [0xff6a, 0xff6a], /* HALFWIDTH KATAKANA LETTER SMALL E */ + [0xff6b, 0xff6b], /* HALFWIDTH KATAKANA LETTER SMALL O */ + [0xff6c, 0xff6c], /* HALFWIDTH KATAKANA LETTER SMALL YA */ + [0xff6d, 0xff6d], /* HALFWIDTH KATAKANA LETTER SMALL YU */ + [0xff6e, 0xff6e], /* HALFWIDTH KATAKANA LETTER SMALL YO */ + [0xff6f, 0xff6f], /* HALFWIDTH KATAKANA LETTER SMALL TU */ + [0xff70, 0xff70], /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */ + [0xff71, 0xff71], /* HALFWIDTH KATAKANA LETTER A */ + [0xff72, 0xff72], /* HALFWIDTH KATAKANA LETTER I */ + [0xff73, 0xff73], /* HALFWIDTH KATAKANA LETTER U */ + [0xff74, 0xff74], /* HALFWIDTH KATAKANA LETTER E */ + [0xff75, 0xff75], /* HALFWIDTH KATAKANA LETTER O */ + [0xff76, 0xff76], /* HALFWIDTH KATAKANA LETTER KA */ + [0xff77, 0xff77], /* HALFWIDTH KATAKANA LETTER KI */ + [0xff78, 0xff78], /* HALFWIDTH KATAKANA LETTER KU */ + [0xff79, 0xff79], /* HALFWIDTH KATAKANA LETTER KE */ + [0xff7a, 0xff7a], /* HALFWIDTH KATAKANA LETTER KO */ + [0xff7b, 0xff7b], /* HALFWIDTH KATAKANA LETTER SA */ + [0xff7c, 0xff7c], /* HALFWIDTH KATAKANA LETTER SI */ + [0xff7d, 0xff7d], /* HALFWIDTH KATAKANA LETTER SU */ + [0xff7e, 0xff7e], /* HALFWIDTH KATAKANA LETTER SE */ + [0xff7f, 0xff7f], /* HALFWIDTH KATAKANA LETTER SO */ + [0xff80, 0xff80], /* HALFWIDTH KATAKANA LETTER TA */ + [0xff81, 0xff81], /* HALFWIDTH KATAKANA LETTER TI */ + [0xff82, 0xff82], /* HALFWIDTH KATAKANA LETTER TU */ + [0xff83, 0xff83], /* HALFWIDTH KATAKANA LETTER TE */ + [0xff84, 0xff84], /* HALFWIDTH KATAKANA LETTER TO */ + [0xff85, 0xff85], /* HALFWIDTH KATAKANA LETTER NA */ + [0xff86, 0xff86], /* HALFWIDTH KATAKANA LETTER NI */ + [0xff87, 0xff87], /* HALFWIDTH KATAKANA LETTER NU */ + [0xff88, 0xff88], /* HALFWIDTH KATAKANA LETTER NE */ + [0xff89, 0xff89], /* HALFWIDTH KATAKANA LETTER NO */ + [0xff8a, 0xff8a], /* HALFWIDTH KATAKANA LETTER HA */ + [0xff8b, 0xff8b], /* HALFWIDTH KATAKANA LETTER HI */ + [0xff8c, 0xff8c], /* HALFWIDTH KATAKANA LETTER HU */ + [0xff8d, 0xff8d], /* HALFWIDTH KATAKANA LETTER HE */ + [0xff8e, 0xff8e], /* HALFWIDTH KATAKANA LETTER HO */ + [0xff8f, 0xff8f], /* HALFWIDTH KATAKANA LETTER MA */ + [0xff90, 0xff90], /* HALFWIDTH KATAKANA LETTER MI */ + [0xff91, 0xff91], /* HALFWIDTH KATAKANA LETTER MU */ + [0xff92, 0xff92], /* HALFWIDTH KATAKANA LETTER ME */ + [0xff93, 0xff93], /* HALFWIDTH KATAKANA LETTER MO */ + [0xff94, 0xff94], /* HALFWIDTH KATAKANA LETTER YA */ + [0xff95, 0xff95], /* HALFWIDTH KATAKANA LETTER YU */ + [0xff96, 0xff96], /* HALFWIDTH KATAKANA LETTER YO */ + [0xff97, 0xff97], /* HALFWIDTH KATAKANA LETTER RA */ + [0xff98, 0xff98], /* HALFWIDTH KATAKANA LETTER RI */ + [0xff99, 0xff99], /* HALFWIDTH KATAKANA LETTER RU */ + [0xff9a, 0xff9a], /* HALFWIDTH KATAKANA LETTER RE */ + [0xff9b, 0xff9b], /* HALFWIDTH KATAKANA LETTER RO */ + [0xff9c, 0xff9c], /* HALFWIDTH KATAKANA LETTER WA */ + [0xff9d, 0xff9d], /* HALFWIDTH KATAKANA LETTER N */ + [0xff9e, 0xff9e], /* HALFWIDTH KATAKANA VOICED SOUND MARK */ + [0xff9f, 0xff9f], /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */ + [0xffa0, 0xffa0], /* HALFWIDTH HANGUL FILLER (HALFWIDTH HANGUL CAE OM) */ + [0xffa1, 0xffa1], /* HALFWIDTH HANGUL LETTER KIYEOK (HALFWIDTH HANGUL LETTER GIYEOG) */ + [0xffa2, 0xffa2], /* HALFWIDTH HANGUL LETTER SSANGKIYEOK (HALFWIDTH HANGUL LETTER SSANG GIYEOG) */ + [0xffa3, 0xffa3], /* HALFWIDTH HANGUL LETTER KIYEOK-SIOS (HALFWIDTH HANGUL LETTER GIYEOG SIOS) */ + [0xffa4, 0xffa4], /* HALFWIDTH HANGUL LETTER NIEUN */ + [0xffa5, 0xffa5], /* HALFWIDTH HANGUL LETTER NIEUN-CIEUC (HALFWIDTH HANGUL LETTER NIEUN JIEUJ) */ + [0xffa6, 0xffa6], /* HALFWIDTH HANGUL LETTER NIEUN-HIEUH (HALFWIDTH HANGUL LETTER NIEUN HIEUH) */ + [0xffa7, 0xffa7], /* HALFWIDTH HANGUL LETTER TIKEUT (HALFWIDTH HANGUL LETTER DIGEUD) */ + [0xffa8, 0xffa8], /* HALFWIDTH HANGUL LETTER SSANGTIKEUT (HALFWIDTH HANGUL LETTER SSANG DIGEUD) */ + [0xffa9, 0xffa9], /* HALFWIDTH HANGUL LETTER RIEUL (HALFWIDTH HANGUL LETTER LIEUL) */ + [0xffaa, 0xffaa], /* HALFWIDTH HANGUL LETTER RIEUL-KIYEOK (HALFWIDTH HANGUL LETTER LIEUL GIYEOG) */ + [0xffab, 0xffab], /* HALFWIDTH HANGUL LETTER RIEUL-MIEUM (HALFWIDTH HANGUL LETTER LIEUL MIEUM) */ + [0xffac, 0xffac], /* HALFWIDTH HANGUL LETTER RIEUL-PIEUP (HALFWIDTH HANGUL LETTER LIEUL BIEUB) */ + [0xffad, 0xffad], /* HALFWIDTH HANGUL LETTER RIEUL-SIOS (HALFWIDTH HANGUL LETTER LIEUL SIOS) */ + [0xffae, 0xffae], /* HALFWIDTH HANGUL LETTER RIEUL-THIEUTH (HALFWIDTH HANGUL LETTER LIEUL TIEUT) */ + [0xffaf, 0xffaf], /* HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH (HALFWIDTH HANGUL LETTER LIEUL PIEUP) */ + [0xffb0, 0xffb0], /* HALFWIDTH HANGUL LETTER RIEUL-HIEUH (HALFWIDTH HANGUL LETTER LIEUL HIEUH) */ + [0xffb1, 0xffb1], /* HALFWIDTH HANGUL LETTER MIEUM */ + [0xffb2, 0xffb2], /* HALFWIDTH HANGUL LETTER PIEUP (HALFWIDTH HANGUL LETTER BIEUB) */ + [0xffb3, 0xffb3], /* HALFWIDTH HANGUL LETTER SSANGPIEUP (HALFWIDTH HANGUL LETTER SSANG BIEUB) */ + [0xffb4, 0xffb4], /* HALFWIDTH HANGUL LETTER PIEUP-SIOS (HALFWIDTH HANGUL LETTER BIEUB SIOS) */ + [0xffb5, 0xffb5], /* HALFWIDTH HANGUL LETTER SIOS */ + [0xffb6, 0xffb6], /* HALFWIDTH HANGUL LETTER SSANGSIOS (HALFWIDTH HANGUL LETTER SSANG SIOS) */ + [0xffb7, 0xffb7], /* HALFWIDTH HANGUL LETTER IEUNG */ + [0xffb8, 0xffb8], /* HALFWIDTH HANGUL LETTER CIEUC (HALFWIDTH HANGUL LETTER JIEUJ) */ + [0xffb9, 0xffb9], /* HALFWIDTH HANGUL LETTER SSANGCIEUC (HALFWIDTH HANGUL LETTER SSANG JIEUJ) */ + [0xffba, 0xffba], /* HALFWIDTH HANGUL LETTER CHIEUCH (HALFWIDTH HANGUL LETTER CIEUC) */ + [0xffbb, 0xffbb], /* HALFWIDTH HANGUL LETTER KHIEUKH (HALFWIDTH HANGUL LETTER KIYEOK) */ + [0xffbc, 0xffbc], /* HALFWIDTH HANGUL LETTER THIEUTH (HALFWIDTH HANGUL LETTER TIEUT) */ + [0xffbd, 0xffbd], /* HALFWIDTH HANGUL LETTER PHIEUPH (HALFWIDTH HANGUL LETTER PIEUP) */ + [0xffbe, 0xffbe], /* HALFWIDTH HANGUL LETTER HIEUH */ + [0xffbf, 0xffbf], + [0xffc0, 0xffc0], + [0xffc1, 0xffc1], + [0xffc2, 0xffc2], /* HALFWIDTH HANGUL LETTER A */ + [0xffc3, 0xffc3], /* HALFWIDTH HANGUL LETTER AE */ + [0xffc4, 0xffc4], /* HALFWIDTH HANGUL LETTER YA */ + [0xffc5, 0xffc5], /* HALFWIDTH HANGUL LETTER YAE */ + [0xffc6, 0xffc6], /* HALFWIDTH HANGUL LETTER EO */ + [0xffc7, 0xffc7], /* HALFWIDTH HANGUL LETTER E */ + [0xffc8, 0xffc8], + [0xffc9, 0xffc9], + [0xffca, 0xffca], /* HALFWIDTH HANGUL LETTER YEO */ + [0xffcb, 0xffcb], /* HALFWIDTH HANGUL LETTER YE */ + [0xffcc, 0xffcc], /* HALFWIDTH HANGUL LETTER O */ + [0xffcd, 0xffcd], /* HALFWIDTH HANGUL LETTER WA */ + [0xffce, 0xffce], /* HALFWIDTH HANGUL LETTER WAE */ + [0xffcf, 0xffcf], /* HALFWIDTH HANGUL LETTER OE */ + [0xffd0, 0xffd0], + [0xffd1, 0xffd1], + [0xffd2, 0xffd2], /* HALFWIDTH HANGUL LETTER YO */ + [0xffd3, 0xffd3], /* HALFWIDTH HANGUL LETTER U */ + [0xffd4, 0xffd4], /* HALFWIDTH HANGUL LETTER WEO */ + [0xffd5, 0xffd5], /* HALFWIDTH HANGUL LETTER WE */ + [0xffd6, 0xffd6], /* HALFWIDTH HANGUL LETTER WI */ + [0xffd7, 0xffd7], /* HALFWIDTH HANGUL LETTER YU */ + [0xffd8, 0xffd8], + [0xffd9, 0xffd9], + [0xffda, 0xffda], /* HALFWIDTH HANGUL LETTER EU */ + [0xffdb, 0xffdb], /* HALFWIDTH HANGUL LETTER YI */ + [0xffdc, 0xffdc], /* HALFWIDTH HANGUL LETTER I */ + [0xffdd, 0xffdd], + [0xffde, 0xffde], + [0xffdf, 0xffdf], + [0xffe0, 0xffe0], /* FULLWIDTH CENT SIGN */ + [0xffe1, 0xffe1], /* FULLWIDTH POUND SIGN */ + [0xffe2, 0xffe2], /* FULLWIDTH NOT SIGN */ + [0xffe3, 0xffe3], /* FULLWIDTH MACRON (FULLWIDTH SPACING MACRON) */ + [0xffe4, 0xffe4], /* FULLWIDTH BROKEN BAR (FULLWIDTH BROKEN VERTICAL BAR) */ + [0xffe5, 0xffe5], /* FULLWIDTH YEN SIGN */ + [0xffe6, 0xffe6], /* FULLWIDTH WON SIGN */ + [0xffe7, 0xffe7], + [0xffe8, 0xffe8], /* HALFWIDTH FORMS LIGHT VERTICAL */ + [0xffe9, 0xffe9], /* HALFWIDTH LEFTWARDS ARROW */ + [0xffea, 0xffea], /* HALFWIDTH UPWARDS ARROW */ + [0xffeb, 0xffeb], /* HALFWIDTH RIGHTWARDS ARROW */ + [0xffec, 0xffec], /* HALFWIDTH DOWNWARDS ARROW */ + [0xffed, 0xffed], /* HALFWIDTH BLACK SQUARE */ + [0xffee, 0xffee], /* HALFWIDTH WHITE CIRCLE */ + [0xffef, 0xffef], + [0xfff0, 0xfff0], + [0xfff1, 0xfff1], + [0xfff2, 0xfff2], + [0xfff3, 0xfff3], + [0xfff4, 0xfff4], + [0xfff5, 0xfff5], + [0xfff6, 0xfff6], + [0xfff7, 0xfff7], + [0xfff8, 0xfff8], + [0xfff9, 0xfff9], /* INTERLINEAR ANNOTATION ANCHOR */ + [0xfffa, 0xfffa], /* INTERLINEAR ANNOTATION SEPARATOR */ + [0xfffb, 0xfffb], /* INTERLINEAR ANNOTATION TERMINATOR */ + [0xfffc, 0xfffc], /* OBJECT REPLACEMENT CHARACTER */ + [0xfffd, 0xfffd], /* REPLACEMENT CHARACTER */ + [0xfffe, 0xfffe], + [0xffff, 0xffff], +]; +assertEq(mapping.length, 0x10000); +for (var i = 0; i <= 0xffff; i++) { + var char = String.fromCharCode(i); + var info = mapping[i]; + + assertEq(char.toUpperCase().charCodeAt(0), info[0]); + assertEq(char.toLowerCase().charCodeAt(0), info[1]); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/Types/8.12.5-01.js b/source/spidermonkey-tests/ecma_5/Types/8.12.5-01.js new file mode 100644 index 00000000..b41de0bb --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/Types/8.12.5-01.js @@ -0,0 +1,110 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jason Orendorff + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 523846; +var summary = + "Assignments to a property that has a getter but not a setter should not " + + "throw a TypeError per ES5 (at least not until strict mode is supported)"; +var actual = "Early failure"; +var expect = "No errors"; + + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var o = { get p() { return "a"; } }; + +function test1() +{ + o.p = "b"; + assertEq(o.p, "a"); +} + +function test2() +{ + function T() {} + T.prototype = o; + y = new T(); + y.p = "b"; + assertEq(y.p, "a"); +} + +function strictTest1() +{ + "use strict"; + + o.p = "b"; // strict-mode violation here + assertEq(o.p, "a"); +} + +function strictTest2() +{ + "use strict"; + + function T() {} + T.prototype = o; + y = new T; + y.p = "b"; // strict-mode violation here + assertEq(y.p, "a"); +} + +var errors = []; +try +{ + try + { + test1(); + } + catch (e) + { + errors.push(e); + } + + try + { + test2(); + } + catch (e) + { + errors.push(e); + } + + try + { + strictTest1(); + errors.push("strictTest1 didn't fail"); + } + catch (e) + { + if (!(e instanceof TypeError)) + errors.push("strictTest1 didn't fail with a TypeError: " + e); + } + + try + { + strictTest2(); + errors.push("strictTest2 didn't fail"); + } + catch (e) + { + if (!(e instanceof TypeError)) + errors.push("strictTest2 didn't fail with a TypeError: " + e); + } +} +catch (e) +{ + errors.push("Unexpected error: " + e); +} +finally +{ + actual = errors.length > 0 ? errors.join(", ") : "No errors"; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_5/Types/browser.js b/source/spidermonkey-tests/ecma_5/Types/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/Types/shell.js b/source/spidermonkey-tests/ecma_5/Types/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/browser.js b/source/spidermonkey-tests/ecma_5/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/eval/browser.js b/source/spidermonkey-tests/ecma_5/eval/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-normalcode.js new file mode 100644 index 00000000..1a4b56c6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-normalcode.js @@ -0,0 +1,208 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 4); +assertEq(resultsX.global1, 17); + +assertEq(resultsX.inner2, 7); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 17); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 9); +assertEq(resultsX.global3, 17); + +assertEq(resultsX.del, false); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 9); +assertEq(resultsX.global4, 17); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 23); +assertEq(resultsX.global5, 17); + + +function testY() +{ + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 5); +assertEq(resultsY.global1, 42); + +assertEq(resultsY.inner2, 8); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 42); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 2); +assertEq(resultsY.global3, 42); + +assertEq(resultsY.del, true); + +assertEq(resultsY.inner4, 42); +assertEq(resultsY.local4, 42); +assertEq(resultsY.global4, 42); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 71); +assertEq(resultsY.global5, 71); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-strictcode.js new file mode 100644 index 00000000..7bd4ea65 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-direct-strictcode.js @@ -0,0 +1,210 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 2); +assertEq(resultsX.global1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 17); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); +assertEq(resultsX.global3, 17); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); +assertEq(resultsX.global4, 17); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); +assertEq(resultsX.global5, 17); + + +function testY() +{ + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 42); +assertEq(resultsY.global1, 42); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 8); +assertEq(resultsY.global3, 8); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 8); +assertEq(resultsY.global4, 8); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 8); +assertEq(resultsY.global5, 8); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-normalcode.js new file mode 100644 index 00000000..d75496fa --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-normalcode.js @@ -0,0 +1,208 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 2); +assertEq(resultsX.global1, 4); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 4); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); +assertEq(resultsX.global3, 9); + +assertEq(resultsX.del, false); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); +assertEq(resultsX.global4, 9); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); +assertEq(resultsX.global5, 23); + + +function testY() +{ + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 5); +assertEq(resultsY.global1, 5); + +assertEq(resultsY.inner2, 8); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 2); +assertEq(resultsY.global3, 2); + +assertEq(resultsY.del, false); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 2); +assertEq(resultsY.global4, 2); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 71); +assertEq(resultsY.global5, 71); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-strictcode.js new file mode 100644 index 00000000..f38fc1b5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-normalcaller-indirect-strictcode.js @@ -0,0 +1,210 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 2); +assertEq(resultsX.global1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 17); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); +assertEq(resultsX.global3, 17); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); +assertEq(resultsX.global4, 17); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); +assertEq(resultsX.global5, 17); + + +function testY() +{ + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 42); +assertEq(resultsY.global1, 42); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 8); +assertEq(resultsY.global3, 8); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 8); +assertEq(resultsY.global4, 8); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 8); +assertEq(resultsY.global5, 8); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-normalcode.js new file mode 100644 index 00000000..5d556458 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-normalcode.js @@ -0,0 +1,212 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 2); +assertEq(resultsX.global1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 17); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); +assertEq(resultsX.global3, 17); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); +assertEq(resultsX.global4, 17); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); +assertEq(resultsX.global5, 17); + + +function testY() +{ + "use strict"; + + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 42); +assertEq(resultsY.global1, 42); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 8); +assertEq(resultsY.global3, 8); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 8); +assertEq(resultsY.global4, 8); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 8); +assertEq(resultsY.global5, 8); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-strictcode.js new file mode 100644 index 00000000..a215a3ce --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-direct-strictcode.js @@ -0,0 +1,214 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = eval(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 2); +assertEq(resultsX.global1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 17); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); +assertEq(resultsX.global3, 17); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); +assertEq(resultsX.global4, 17); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); +assertEq(resultsX.global5, 17); + + +function testY() +{ + "use strict"; + + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = eval(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 42); +assertEq(resultsY.global1, 42); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 8); +assertEq(resultsY.global3, 8); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 8); +assertEq(resultsY.global4, 8); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 8); +assertEq(resultsY.global5, 8); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-normalcode.js new file mode 100644 index 00000000..8b3016d2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-normalcode.js @@ -0,0 +1,212 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 2); +assertEq(resultsX.global1, 4); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 4); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); +assertEq(resultsX.global3, 9); + +assertEq(resultsX.del, false); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); +assertEq(resultsX.global4, 9); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); +assertEq(resultsX.global5, 23); + + +function testY() +{ + "use strict"; + + var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 5); +assertEq(resultsY.global1, 5); + +assertEq(resultsY.inner2, 8); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 2); +assertEq(resultsY.global3, 2); + +assertEq(resultsY.del, false); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 2); +assertEq(resultsY.global4, 2); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 71); +assertEq(resultsY.global5, 71); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js new file mode 100644 index 00000000..4157369b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-fun-strictcaller-indirect-strictcode.js @@ -0,0 +1,214 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; +function globalX() { return x; } +var y = 42; +function globalY() { return y; } + +var ev = eval; + +function testX() +{ + "use strict"; + + var x = 2; + var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + + var local0 = x; + var global0 = globalX(); + + var f = ev(xcode); + + var inner1 = f("get"); + var local1 = x; + var global1 = globalX(); + + x = 7; + var inner2 = f("get"); + var local2 = x; + var global2 = globalX(); + + f("set1"); + var inner3 = f("get"); + var local3 = x; + var global3 = globalX(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = x; + var global4 = globalX(); + + f("set2"); + var inner5 = f("get"); + var local5 = x; + var global5 = globalX(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsX = testX(); + +assertEq(resultsX.local0, 2); +assertEq(resultsX.global0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 2); +assertEq(resultsX.global1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); +assertEq(resultsX.global2, 17); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); +assertEq(resultsX.global3, 17); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); +assertEq(resultsX.global4, 17); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); +assertEq(resultsX.global5, 17); + + +function testY() +{ + "use strict"; + + var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + + var local0 = y; + var global0 = globalY(); + + var f = ev(ycode); + + var inner1 = f("get"); + var local1 = y; + var global1 = globalY(); + + y = 8; + var inner2 = f("get"); + var local2 = y; + var global2 = globalY(); + + f("set1"); + var inner3 = f("get"); + var local3 = y; + var global3 = globalY(); + + var del = f("delete"); + var inner4 = f("get"); + var local4 = y; + var global4 = globalY(); + + f("set2"); + var inner5 = f("get"); + var local5 = y; + var global5 = globalY(); + + return { + local0: local0, global0: global0, + inner1: inner1, local1: local1, global1: global1, + inner2: inner2, local2: local2, global2: global2, + inner3: inner3, local3: local3, global3: global3, + del: del, + inner4: inner4, local4: local4, global4: global4, + inner5: inner5, local5: local5, global5: global5, + }; +} + +var resultsY = testY(); + +assertEq(resultsY.local0, 42); +assertEq(resultsY.global0, 42); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 42); +assertEq(resultsY.global1, 42); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, 8); +assertEq(resultsY.global2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 8); +assertEq(resultsY.global3, 8); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 8); +assertEq(resultsY.global4, 8); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 8); +assertEq(resultsY.global5, 8); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js new file mode 100644 index 00000000..cb565085 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-direct-normalcode.js @@ -0,0 +1,172 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 4); + +assertEq(resultsX.inner2, 7); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 9); + +assertEq(resultsX.del, false); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 9); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 23); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +var local1 = y; + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 5); + +assertEq(resultsY.inner2, 8); +assertEq(resultsY.local2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 2); + +assertEq(resultsY.del, true); + +assertEq(resultsY.inner4, "ReferenceError"); +assertEq(resultsY.local4, "ReferenceError"); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 71); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-direct-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-direct-strictcode.js new file mode 100644 index 00000000..cede8de8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-direct-strictcode.js @@ -0,0 +1,174 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, "ReferenceError"); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 8); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 8); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 8); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js new file mode 100644 index 00000000..5f4089f3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-normalcode.js @@ -0,0 +1,172 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 4); + +assertEq(resultsX.inner2, 7); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 9); + +assertEq(resultsX.del, false); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 9); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 23); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +var local1 = y; + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 5); + +assertEq(resultsY.inner2, 8); +assertEq(resultsY.local2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 2); + +assertEq(resultsY.del, true); + +assertEq(resultsY.inner4, "ReferenceError"); +assertEq(resultsY.local4, "ReferenceError"); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 71); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-strictcode.js new file mode 100644 index 00000000..c225b979 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-normalcaller-indirect-strictcode.js @@ -0,0 +1,174 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +y = 8; +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, "ReferenceError"); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 8); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, 8); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 8); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-direct-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-direct-normalcode.js new file mode 100644 index 00000000..4a6b289f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-direct-normalcode.js @@ -0,0 +1,173 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); } +var inner2 = f("get"); +try { var local2 = y; } catch (e) { local2 = e.name; } + +f("set1"); +var inner3 = f("get"); +try { var local3 = y; } catch (e) { local3 = e.name; } + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, "ReferenceError"); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, "ReferenceError"); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, "ReferenceError"); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, "ReferenceError"); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, "ReferenceError"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js new file mode 100644 index 00000000..2e624ecb --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-direct-strictcode.js @@ -0,0 +1,175 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = eval(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = eval(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); } +var inner2 = f("get"); +try { var local2 = y; } catch (e) { local2 = e.name; } + +f("set1"); +var inner3 = f("get"); +try { var local3 = y; } catch (e) { local3 = e.name; } + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, "ReferenceError"); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, "ReferenceError"); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, "ReferenceError"); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, "ReferenceError"); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, "ReferenceError"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-normalcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-normalcode.js new file mode 100644 index 00000000..ac11ccb7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-normalcode.js @@ -0,0 +1,173 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 4); + +assertEq(resultsX.inner2, 7); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 9); + +assertEq(resultsX.del, false); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 9); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 23); + + +var ycode = + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +var local1 = y; + +try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); } +var inner2 = f("get"); +var local2 = y; + +f("set1"); +var inner3 = f("get"); +var local3 = y; + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, 5); + +assertEq(resultsY.inner2, 8); +assertEq(resultsY.local2, 8); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, 2); + +assertEq(resultsY.del, true); + +assertEq(resultsY.inner4, "ReferenceError"); +assertEq(resultsY.local4, "ReferenceError"); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, 71); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-strictcode.js b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-strictcode.js new file mode 100644 index 00000000..137a8bad --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/exhaustive-global-strictcaller-indirect-strictcode.js @@ -0,0 +1,175 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = "eval in all its myriad flavors"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = 17; + +var ev = eval; + +var xcode = + "'use strict';" + + "var x = 4;" + + "function actX(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return x;" + + " case 'set1':" + + " x = 9;" + + " return;" + + " case 'set2':" + + " x = 23;" + + " return;" + + " case 'delete':" + + " try { return eval('delete x'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actX;"; + +var local0 = x; + +var f = ev(xcode); + +var inner1 = f("get"); +var local1 = x; + +x = 7; +var inner2 = f("get"); +var local2 = x; + +f("set1"); +var inner3 = f("get"); +var local3 = x; + +var del = f("delete"); +var inner4 = f("get"); +var local4 = x; + +f("set2"); +var inner5 = f("get"); +var local5 = x; + +var resultsX = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsX.local0, 17); + +assertEq(resultsX.inner1, 4); +assertEq(resultsX.local1, 17); + +assertEq(resultsX.inner2, 4); +assertEq(resultsX.local2, 7); + +assertEq(resultsX.inner3, 9); +assertEq(resultsX.local3, 7); + +assertEq(resultsX.del, "SyntaxError"); + +assertEq(resultsX.inner4, 9); +assertEq(resultsX.local4, 7); + +assertEq(resultsX.inner5, 23); +assertEq(resultsX.local5, 7); + + +var ycode = + "'use strict';" + + "var y = 5;" + + "function actY(action)" + + "{" + + " switch (action)" + + " {" + + " case 'get':" + + " return y;" + + " case 'set1':" + + " y = 2;" + + " return;" + + " case 'set2':" + + " y = 71;" + + " return;" + + " case 'delete':" + + " try { return eval('delete y'); }" + + " catch (e) { return e.name; }" + + " }" + + "}" + + "actY;"; + +try { var local0 = y; } catch (e) { local0 = e.name; } + +var f = ev(ycode); + +var inner1 = f("get"); +try { var local1 = y; } catch (e) { local1 = e.name; } + +try { y = 8; } catch (e) { assertEq(e.name, "ReferenceError"); } +var inner2 = f("get"); +try { var local2 = y; } catch (e) { local2 = e.name; } + +f("set1"); +var inner3 = f("get"); +try { var local3 = y; } catch (e) { local3 = e.name; } + +var del = f("delete"); +try { var inner4 = f("get"); } catch (e) { inner4 = e.name; } +try { var local4 = y; } catch (e) { local4 = e.name; } + +f("set2"); +try { var inner5 = f("get"); } catch (e) { inner5 = e.name; } +try { var local5 = y; } catch (e) { local5 = e.name; } + +var resultsY = + { + local0: local0, + inner1: inner1, local1: local1, + inner2: inner2, local2: local2, + inner3: inner3, local3: local3, + del: del, + inner4: inner4, local4: local4, + inner5: inner5, local5: local5, + }; + +assertEq(resultsY.local0, "ReferenceError"); + +assertEq(resultsY.inner1, 5); +assertEq(resultsY.local1, "ReferenceError"); + +assertEq(resultsY.inner2, 5); +assertEq(resultsY.local2, "ReferenceError"); + +assertEq(resultsY.inner3, 2); +assertEq(resultsY.local3, "ReferenceError"); + +assertEq(resultsY.del, "SyntaxError"); + +assertEq(resultsY.inner4, 2); +assertEq(resultsY.local4, "ReferenceError"); + +assertEq(resultsY.inner5, 71); +assertEq(resultsY.local5, "ReferenceError"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/line-terminator-paragraph-terminator.js b/source/spidermonkey-tests/ecma_5/eval/line-terminator-paragraph-terminator.js new file mode 100644 index 00000000..61047fb1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/line-terminator-paragraph-terminator.js @@ -0,0 +1,73 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 657367; +var summary = "eval must not parse strings containing U+2028 or U+2029"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function esc(s) +{ + return s.split("").map(function(v) + { + var code = + ("000" + v.charCodeAt(0).toString(16)).slice(-4); + return "\\u" + code; + }).join(""); +} + +try +{ + var r = eval('"\u2028"'); + throw new Error("\"\\u2028\" didn't throw, returned " + esc(r)); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "U+2028 is not a valid string character"); +} + +try +{ + var r = eval('("\u2028")'); + throw new Error("(\"\\u2028\") didn't throw, returned " + esc(r)); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "U+2028 is not a valid string character"); +} + +try +{ + var r = eval('"\u2029"'); + throw new Error("\"\\u2029\" didn't throw, returned " + esc(r)); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "U+2029 is not a valid string character"); +} + +try +{ + var r = eval('("\u2029")'); + throw new Error("(\"\\u2029\") didn't throw, returned " + esc(r)); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "U+2029 is not a valid string character"); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/eval/shell.js b/source/spidermonkey-tests/ecma_5/eval/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/eval/undeclared-name-in-nested-strict-eval.js b/source/spidermonkey-tests/ecma_5/eval/undeclared-name-in-nested-strict-eval.js new file mode 100644 index 00000000..1cefe474 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/eval/undeclared-name-in-nested-strict-eval.js @@ -0,0 +1,26 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ +"use strict"; + +//----------------------------------------------------------------------------- +var BUGNUMBER = 514568; +var summary = + "Verify that we don't optimize free names to gnames in eval code that's " + + "global, when the name refers to a binding introduced by a strict mode " + + "eval frame"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var x = "global"; +assertEq(eval('var x = "eval"; eval("x")'), "eval"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/15.4.4.11.js b/source/spidermonkey-tests/ecma_5/extensions/15.4.4.11.js new file mode 100644 index 00000000..a4c38faa --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/15.4.4.11.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function arr() { + return Object.defineProperty([20, 10, 30], 0, {writable: false}); +} + +assertEq(testLenientAndStrict('var a = arr(); a.sort()', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function obj() { + var o = {0: 20, 1: 10, 2: 30, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assertEq(testLenientAndStrict('var o = obj(); Array.prototype.sort.call(o)', + raisesException(TypeError), + raisesException(TypeError)), + true); + +// The behavior of sort is implementation-defined if the object being +// sorted is sparse, so I'm not sure how to test its behavior on +// non-configurable properties. + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/15.9.4.2.js b/source/spidermonkey-tests/ecma_5/extensions/15.9.4.2.js new file mode 100644 index 00000000..c517f8be --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/15.9.4.2.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 682754; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function iso(d) +{ + return new Date(d).toISOString(); +} + +function check(s, millis){ + description = "Date.parse('"+s+"') == '"+iso(millis)+"'"; + expected = millis; + actual = Date.parse(s); + reportCompare(expected, actual, description); +} + +function checkInvalid(s) +{ + description = "Date.parse('"+s+"') produces invalid date"; + expected = NaN; + actual = Date.parse(s); + reportCompare(expected, actual, description); +} + +function dd(year, month, day, hour, minute, second, millis){ + return Date.UTC(year, month-1, day, hour, minute, second, millis); +} + +function TZAtDate(d){ + return d.getTimezoneOffset() * 60000; +} + +function TZInMonth(month){ + return TZAtDate(new Date(dd(2009,month,1,0,0,0,0))); +} + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + + JanTZ = TZInMonth(1); + JulTZ = TZInMonth(7); + CurrTZ = TZAtDate(new Date()); + + // Allow non-standard "-0700" as timezone, not just "-07:00" + check("2009-07-23T00:53:21.001-0700", dd(2009,7,23,7,53,21,1)); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_5/extensions/8.12.5-01.js b/source/spidermonkey-tests/ecma_5/extensions/8.12.5-01.js new file mode 100644 index 00000000..c6f1c18e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/8.12.5-01.js @@ -0,0 +1,97 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jason Orendorff + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 523846; +var summary = + "Assignments to a property that has a getter but not a setter should not " + + "throw a TypeError per ES5 (at least not until strict mode is supported)"; +var actual = "Early failure"; +var expect = "No errors"; + + +printBugNumber(BUGNUMBER); +printStatus(summary); + +var o = { get p() { return "a"; } }; + +function test1() +{ + o.p = "b"; // strict-mode violation here + assertEq(o.p, "a"); +} + +function test2() +{ + function T() {} + T.prototype = o; + y = new T(); + y.p = "b"; // strict-mode violation here + assertEq(y.p, "a"); +} + + +var errors = []; +try +{ + try + { + test1(); + } + catch (e) + { + errors.push(e); + } + + try + { + test2(); + } + catch (e) + { + errors.push(e); + } + + options("strict"); + options("werror"); + try + { + test1(); + errors.push("strict+werror didn't make test1 fail"); + } + catch (e) + { + if (!(e instanceof TypeError)) + errors.push("test1 with strict+werror failed without a TypeError: " + e); + } + + try + { + test2(); + errors.push("strict+werror didn't make test2 fail"); + } + catch (e) + { + if (!(e instanceof TypeError)) + errors.push("test2 with strict+werror failed without a TypeError: " + e); + } + + options("strict"); + options("werror"); +} +catch (e) +{ + errors.push("Unexpected error: " + e); +} +finally +{ + actual = errors.length > 0 ? errors.join(", ") : "No errors"; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/ecma_5/extensions/Boolean-toSource.js b/source/spidermonkey-tests/ecma_5/extensions/Boolean-toSource.js new file mode 100644 index 00000000..8d135a9f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/Boolean-toSource.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(42)'), true); +assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call("")'), true); +assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call({})'), true); +assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(null)'), true); +assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call([])'), true); +assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(undefined)'), true); +assertEq(raisesException(TypeError)('Boolean.prototype.toSource.call(new String())'), true); + +assertEq(completesNormally('Boolean.prototype.toSource.call(true)'), true); +assertEq(completesNormally('Boolean.prototype.toSource.call(new Boolean(true))'), true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/Number-toSource.js b/source/spidermonkey-tests/ecma_5/extensions/Number-toSource.js new file mode 100644 index 00000000..c2e306f5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/Number-toSource.js @@ -0,0 +1,17 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(raisesException(TypeError)('Number.prototype.toSource.call("")'), true); +assertEq(raisesException(TypeError)('Number.prototype.toSource.call(true)'), true); +assertEq(raisesException(TypeError)('Number.prototype.toSource.call({})'), true); +assertEq(raisesException(TypeError)('Number.prototype.toSource.call(null)'), true); +assertEq(raisesException(TypeError)('Number.prototype.toSource.call([])'), true); +assertEq(raisesException(TypeError)('Number.prototype.toSource.call(undefined)'), true); +assertEq(raisesException(TypeError)('Number.prototype.toSource.call(new Boolean(true))'), true); + +assertEq(completesNormally('Number.prototype.toSource.call(42)'), true); +assertEq(completesNormally('Number.prototype.toSource.call(new Number(42))'), true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/String-methods-infinite-recursion.js b/source/spidermonkey-tests/ecma_5/extensions/String-methods-infinite-recursion.js new file mode 100644 index 00000000..a5972d8c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/String-methods-infinite-recursion.js @@ -0,0 +1,36 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 657585; +var summary = + 'Guard against infinite recursion when converting |this| to string for the ' + + 'String.prototype.* methods'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + var obj = {}; + obj.toString = String.prototype.charAt; + "" + obj; + throw new Error("should have thrown"); +} +catch (e) +{ + assertEq(e instanceof InternalError, true, + "should have thrown InternalError for over-recursion, got: " + e); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/String-toSource.js b/source/spidermonkey-tests/ecma_5/extensions/String-toSource.js new file mode 100644 index 00000000..0614e574 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/String-toSource.js @@ -0,0 +1,14 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(raisesException(TypeError)('String.prototype.toSource.call(42)'), true); +assertEq(raisesException(TypeError)('String.prototype.toSource.call(true)'), true); +assertEq(raisesException(TypeError)('String.prototype.toSource.call({})'), true); +assertEq(raisesException(TypeError)('String.prototype.toSource.call(null)'), true); +assertEq(raisesException(TypeError)('String.prototype.toSource.call([])'), true); +assertEq(raisesException(TypeError)('String.prototype.toSource.call(undefined)'), true); +assertEq(completesNormally('String.prototype.toSource.call("")'), true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/__proto__.js b/source/spidermonkey-tests/ecma_5/extensions/__proto__.js new file mode 100644 index 00000000..aa6d6087 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/__proto__.js @@ -0,0 +1,53 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = '__proto__.js'; +var BUGNUMBER = 770344; +var summary = "__proto__ as accessor"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var protoDesc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); +assertEq(protoDesc !== null, true); +assertEq(typeof protoDesc, "object"); +assertEq(protoDesc.hasOwnProperty("get"), true); +assertEq(protoDesc.hasOwnProperty("set"), true); +assertEq(protoDesc.hasOwnProperty("enumerable"), true); +assertEq(protoDesc.hasOwnProperty("configurable"), true); +assertEq(protoDesc.hasOwnProperty("value"), false); +assertEq(protoDesc.hasOwnProperty("writable"), false); + +assertEq(protoDesc.configurable, true); +assertEq(protoDesc.enumerable, false); +assertEq(typeof protoDesc.get, "function", protoDesc.get + ""); +assertEq(typeof protoDesc.set, "function", protoDesc.set + ""); + +assertEq(delete Object.prototype.__proto__, true); +assertEq(Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"), + undefined); + +var obj = {}; +obj.__proto__ = 5; +assertEq(Object.getPrototypeOf(obj), Object.prototype); +assertEq(obj.hasOwnProperty("__proto__"), true); + +var desc = Object.getOwnPropertyDescriptor(obj, "__proto__"); +assertEq(desc !== null, true); +assertEq(typeof desc, "object"); +assertEq(desc.value, 5); +assertEq(desc.writable, true); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, true); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/arguments-property-access-in-function.js b/source/spidermonkey-tests/ecma_5/extensions/arguments-property-access-in-function.js new file mode 100644 index 00000000..f8c7e97f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/arguments-property-access-in-function.js @@ -0,0 +1,58 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 721322; +var summary = + 'f.arguments must trigger an arguments object in non-strict mode functions'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var obj = + { + test: function() + { + var args = obj.test.arguments; + assertEq(args !== null, true); + assertEq(args[0], 5); + assertEq(args[1], undefined); + assertEq(args.length, 2); + } + }; +obj.test(5, undefined); + +var sobj = + { + test: function() + { + "use strict"; + + try + { + var args = sobj.test.arguments; + throw new Error("access to arguments property of strict mode " + + "function didn't throw"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "should have thrown TypeError, instead got: " + e); + } + } + }; +sobj.test(5, undefined); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/array-inherited-__proto__.js b/source/spidermonkey-tests/ecma_5/extensions/array-inherited-__proto__.js new file mode 100644 index 00000000..0409d475 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/array-inherited-__proto__.js @@ -0,0 +1,32 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'array-inherited-__proto__.js'; +var BUGNUMBER = 769041; +var summary = + "The [[Prototype]] of an object whose prototype chain contains an array " + + "isn't that array's [[Prototype]]"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +assertEq(Array.isArray(arr), true); +var objWithArrPrototype = Object.create(arr); +assertEq(!Array.isArray(objWithArrPrototype), true); +assertEq(objWithArrPrototype.__proto__, arr); +var objWithArrGrandPrototype = Object.create(objWithArrPrototype); +assertEq(!Array.isArray(objWithArrGrandPrototype), true); +assertEq(objWithArrGrandPrototype.__proto__, objWithArrPrototype); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/array-pop-proxy.js b/source/spidermonkey-tests/ecma_5/extensions/array-pop-proxy.js new file mode 100644 index 00000000..15c23097 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/array-pop-proxy.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'array-pop-proxy.js'; +var BUGNUMBER = 858381; +var summary = "Behavior of [].pop on proxies"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var p = new Proxy([0, 1, 2], {}); +Array.prototype.pop.call(p); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/array-toString-recursion.js b/source/spidermonkey-tests/ecma_5/extensions/array-toString-recursion.js new file mode 100644 index 00000000..aa5d856c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/array-toString-recursion.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 635389; +var summary = 'Infinite recursion via [].{toString,toLocaleString,join}'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + var x = []; + x.join = Array.prototype.toString; + "" + x; + throw new Error("should have thrown"); +} +catch (e) +{ + assertEq(e instanceof InternalError, true, + "should have thrown for over-recursion"); +} + +try +{ + var x = { toString: Array.prototype.toString, join: Array.prototype.toString }; + "" + x; + throw new Error("should have thrown"); +} +catch (e) +{ + assertEq(e instanceof InternalError, true, + "should have thrown for over-recursion"); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/browser.js b/source/spidermonkey-tests/ecma_5/extensions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/extensions/bug472534.js b/source/spidermonkey-tests/ecma_5/extensions/bug472534.js new file mode 100644 index 00000000..0c7d5f3e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/bug472534.js @@ -0,0 +1,30 @@ +function monthNames () { + return [ + /jan(uar(y)?)?/, 0, + /feb(ruar(y)?)?/, 1, + /m\u00e4r|mar|m\u00e4rz|maerz|march/, 2, + /apr(il)?/, 3, + /ma(i|y)/, 4, + /jun(i|o|e)?/, 5, + /jul(i|y)?/, 6, + /aug(ust)?/, 7, + /sep((t)?(ember))?/, 8, + /o(c|k)t(ober)?/, 9, + /nov(ember)?/, 10, + /de(c|z)(ember)?/, 11 + ]; +}; + +var actual = ''; +var expected = '(jan(uar(y)?)?)|(feb(ruar(y)?)?)|(m\\u00e4r|mar|m\\u00e4rz|maerz|march)|(apr(il)?)|(ma(i|y))|(jun(i|o|e)?)|(jul(i|y)?)|(aug(ust)?)|(sep((t)?(ember))?)|(o(c|k)t(ober)?)|(nov(ember)?)|(de(c|z)(ember)?)'; +var mn = monthNames(); +for (var i = 0; i < mn.length; ++i) { + if (actual) + actual += '|'; + actual += '(' + mn[i++].source + ')'; +} + +assertEq(actual, expected); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/bug496985.js b/source/spidermonkey-tests/ecma_5/extensions/bug496985.js new file mode 100644 index 00000000..be1dd19c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/bug496985.js @@ -0,0 +1,12 @@ +var a = function() { + return function ({x: arguments}) { + return arguments; + } +} +var b = eval(uneval(a)); + +assertEq(a()({x: 1}), 1); +assertEq(b()({x: 1}), 1); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/bug566661.js b/source/spidermonkey-tests/ecma_5/extensions/bug566661.js new file mode 100644 index 00000000..0e22d8db --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/bug566661.js @@ -0,0 +1,6 @@ +var f = function (q) { return q['\xC7']; } +var d = eval(uneval(f)); +assertEq(d({'\xC7': 'good'}), 'good'); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/builtin-function-arguments-caller.js b/source/spidermonkey-tests/ecma_5/extensions/builtin-function-arguments-caller.js new file mode 100644 index 00000000..2acf5f45 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/builtin-function-arguments-caller.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'builtin-function-arguments-caller.js'; +var BUGNUMBER = 929642; +var summary = + "Built-in functions defined in ECMAScript pick up arguments/caller " + + "properties from Function.prototype"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function expectNoProperty(obj, prop) +{ + var desc = Object.getOwnPropertyDescriptor(obj, prop); + assertEq(desc, undefined, + "should be no '" + prop + "' property on " + obj); +} + +// Test a builtin that's native. +expectNoProperty(Object, "arguments"); +expectNoProperty(Object, "caller"); + +// Also test a builtin that's self-hosted. +expectNoProperty(Array.prototype.indexOf, "arguments"); +expectNoProperty(Array.prototype.indexOf, "caller"); + +// Test the Function construct for good measure, because it's so intricately +// invovled in bootstrapping. +expectNoProperty(Function, "arguments"); +expectNoProperty(Function, "caller"); + +var argsDesc = Object.getOwnPropertyDescriptor(Function.prototype, "arguments"); +var callerDesc = Object.getOwnPropertyDescriptor(Function.prototype, "caller"); + +var argsGet = argsDesc.get, argsSet = argsDesc.set; + +expectNoProperty(argsGet, "arguments"); +expectNoProperty(argsGet, "caller"); +expectNoProperty(argsSet, "arguments"); +expectNoProperty(argsSet, "caller"); + +var callerGet = callerDesc.get, callerSet = callerDesc.set; + +expectNoProperty(callerGet, "arguments"); +expectNoProperty(callerGet, "caller"); +expectNoProperty(callerSet, "arguments"); +expectNoProperty(callerSet, "caller"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/cross-global-eval-is-indirect.js b/source/spidermonkey-tests/ecma_5/extensions/cross-global-eval-is-indirect.js new file mode 100644 index 00000000..6cd35846 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/cross-global-eval-is-indirect.js @@ -0,0 +1,60 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 608473; +var summary = + '|var eval = otherWindow.eval; eval(...)| should behave like indirectly ' + + 'calling that eval from a script in that other window'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var originalEval = eval; +var res; + +function f() +{ + return [this, eval("this")]; +} + +var otherGlobalSameCompartment = newGlobal("same-compartment"); + +eval = otherGlobalSameCompartment.eval; +res = new f(); +assertEq(res[0] !== res[1], true); +assertEq(res[0] !== this, true); +assertEq(res[0] instanceof f, true); +assertEq(res[1], otherGlobalSameCompartment); + +res = f(); +assertEq(res[0] !== res[1], true); +assertEq(res[0], this); +assertEq(res[1], otherGlobalSameCompartment); + +var otherGlobalDifferentCompartment = newGlobal(); + +eval = otherGlobalDifferentCompartment.eval; +res = new f(); +assertEq(res[0] !== res[1], true); +assertEq(res[0] !== this, true); +assertEq(res[0] instanceof f, true); +assertEq(res[1], otherGlobalDifferentCompartment); + +res = f(); +assertEq(res[0] !== res[1], true); +assertEq(res[0], this); +assertEq(res[1], otherGlobalDifferentCompartment); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/cross-global-getPrototypeOf.js b/source/spidermonkey-tests/ecma_5/extensions/cross-global-getPrototypeOf.js new file mode 100644 index 00000000..1480a8ea --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/cross-global-getPrototypeOf.js @@ -0,0 +1,55 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 770344; +var summary = "Object.getPrototypeOf behavior across compartments"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var other = newGlobal(); + +var getProto = Object.getPrototypeOf; +var otherGetProto = other.Object.getPrototypeOf; + +var proto = {}; +var obj = Object.create(proto); +assertEq(getProto(obj), proto); +assertEq(otherGetProto(obj), proto); + +other.proto = proto; +var otherObj = other.evaluate("Object.create(proto)"); +assertEq(getProto(otherObj), proto); +assertEq(otherGetProto(otherObj), proto); + +var p = other.evaluate("({})"); +var objOtherProto = Object.create(p); +assertEq(getProto(objOtherProto), p); +assertEq(otherGetProto(objOtherProto), p); + +other.evaluate("var otherProto = { otherProto: 1 }; " + + "var otherObj = Object.create(otherProto);"); +assertEq(getProto(other.otherObj), other.otherProto); +assertEq(otherGetProto(other.otherObj), other.otherProto); + +other.evaluate("var newOtherProto = { newOtherProto: 1 }; " + + "otherObj.__proto__ = newOtherProto;"); +assertEq(otherGetProto(other.otherObj), other.newOtherProto); + +// TODO This assertion fails due to bug 764307 +//assertEq(getProto(other.otherObj), other.newOtherProto); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment-before-var.js b/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment-before-var.js new file mode 100644 index 00000000..da0da55c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment-before-var.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'destructuring-__proto__-shorthand-assignment-before-var.js'; +var BUGNUMBER = 963641; +var summary = "{ __proto__ } should work as a destructuring assignment pattern"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +({ __proto__ } = objectWithProtoProperty(17)); +assertEq(__proto__, 17); + +var { __proto__ } = objectWithProtoProperty(42); +assertEq(__proto__, 42); + +function nested() +{ + ({ __proto__ } = objectWithProtoProperty(undefined)); + assertEq(__proto__, undefined); + + var { __proto__ } = objectWithProtoProperty("fnord"); + assertEq(__proto__, "fnord"); +} +nested(); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment.js b/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment.js new file mode 100644 index 00000000..0ab26465 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-shorthand-assignment.js @@ -0,0 +1,49 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'destructuring-__proto__-shorthand-assignment.js'; +var BUGNUMBER = 963641; +var summary = "{ __proto__ } should work as a destructuring assignment pattern"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +var { __proto__ } = objectWithProtoProperty(42); +assertEq(__proto__, 42); + +({ __proto__ } = objectWithProtoProperty(17)); +assertEq(__proto__, 17); + +function nested() +{ + var { __proto__ } = objectWithProtoProperty("fnord"); + assertEq(__proto__, "fnord"); + + ({ __proto__ } = objectWithProtoProperty(undefined)); + assertEq(__proto__, undefined); +} +nested(); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-target-assignment.js b/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-target-assignment.js new file mode 100644 index 00000000..9e8ec721 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/destructuring-__proto__-target-assignment.js @@ -0,0 +1,50 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'destructuring-__proto__-target--assignment.js'; +var BUGNUMBER = 963641; +var summary = + "{ __proto__: target } should work as a destructuring assignment pattern"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +var { __proto__: target } = objectWithProtoProperty(null); +assertEq(target, null); + +({ __proto__: target } = objectWithProtoProperty("aacchhorrt")); +assertEq(target, "aacchhorrt"); + +function nested() +{ + var { __proto__: target } = objectWithProtoProperty(3.141592654); + assertEq(target, 3.141592654); + + ({ __proto__: target } = objectWithProtoProperty(-0)); + assertEq(target, -0); +} +nested(); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/destructuring-for-inof-__proto__.js b/source/spidermonkey-tests/ecma_5/extensions/destructuring-for-inof-__proto__.js new file mode 100644 index 00000000..283dee31 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/destructuring-for-inof-__proto__.js @@ -0,0 +1,85 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'destructuring-for-inof-__proto__.js'; +var BUGNUMBER = 963641; +var summary = + "__proto__ should work in destructuring patterns as the targets of " + + "for-in/for-of loops"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function objectWithProtoProperty(v) +{ + var obj = {}; + return Object.defineProperty(obj, "__proto__", + { + enumerable: true, + configurable: true, + writable: true, + value: v + }); +} + +function* objectWithProtoGenerator(v) +{ + yield objectWithProtoProperty(v); +} + +function* identityGenerator(v) +{ + yield v; +} + +for (var { __proto__: target } of objectWithProtoGenerator(null)) + assertEq(target, null); + +for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt")) + assertEq(target, "aacchhorrt"); + +for ({ __proto__: target } of identityGenerator(42)) + assertEq(target, Number.prototype); + +for (var { __proto__: target } in { prop: "kneedle" }) + assertEq(target, String.prototype); + +for ({ __proto__: target } in { prop: "snork" }) + assertEq(target, String.prototype); + +for ({ __proto__: target } in { prop: "ohia" }) + assertEq(target, String.prototype); + +function nested() +{ + for (var { __proto__: target } of objectWithProtoGenerator(null)) + assertEq(target, null); + + for ({ __proto__: target } of objectWithProtoGenerator("aacchhorrt")) + assertEq(target, "aacchhorrt"); + + for ({ __proto__: target } of identityGenerator(42)) + assertEq(target, Number.prototype); + + for (var { __proto__: target } in { prop: "kneedle" }) + assertEq(target, String.prototype); + + for ({ __proto__: target } in { prop: "snork" }) + assertEq(target, String.prototype); + + for ({ __proto__: target } in { prop: "ohia" }) + assertEq(target, String.prototype); +} +nested(); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/error-tostring-function.js b/source/spidermonkey-tests/ecma_5/extensions/error-tostring-function.js new file mode 100644 index 00000000..5e92f107 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/error-tostring-function.js @@ -0,0 +1,45 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 894653; +var summary = + "Error.prototype.toString called on function objects should work as on any " + + "object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function ErrorToString(v) +{ + return Error.prototype.toString.call(v); +} + +// The name property of function objects isn't standardized, so this must be an +// extension-land test. + +assertEq(ErrorToString(function f(){}), "f"); +assertEq(ErrorToString(function g(){}), "g"); +assertEq(ErrorToString(function(){}), ""); + +var fn1 = function() {}; +fn1.message = "ohai"; +assertEq(ErrorToString(fn1), "ohai"); + +var fn2 = function blerch() {}; +fn2.message = "fnord"; +assertEq(ErrorToString(fn2), "blerch: fnord"); + +var fn3 = function() {}; +fn3.message = ""; +assertEq(ErrorToString(fn3), ""); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/es5ish-defineGetter-defineSetter.js b/source/spidermonkey-tests/ecma_5/extensions/es5ish-defineGetter-defineSetter.js new file mode 100644 index 00000000..681a157a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/es5ish-defineGetter-defineSetter.js @@ -0,0 +1,281 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 715821; +var summary = "Implement __define[GS]etter__ using Object.defineProperty"; + +print(BUGNUMBER + ": " + summary); + +/************* + * UTILITIES * + *************/ + +function s(desc) +{ + if (typeof desc === "undefined") + return ""; + assertEq(typeof desc, "object"); + assertEq(desc !== null, true); + + var str = ", " + + " configurable: <" + desc.configurable + ">,"; + + if (desc.hasOwnProperty("value")) + { + return str + + " value: <" + desc.value + ">," + + " writable: <" + desc.writable + ">>"; + } + + return str + + " get: <" + desc.get + ">," + + " set: <" + desc.set + ">>"; +} + +function checkField(field, desc, expected) +{ + var present = desc.hasOwnProperty(field); + assertEq(present, expected.hasOwnProperty(field), + field + " presence mismatch (got " + s(desc) + ", expected " + s(expected) + ")"); + if (present) + { + assertEq(desc[field], expected[field], + field + " value mismatch (got " + s(desc) + ", expected " + s(expected) + ")"); + } +} + +function check(obj, prop, expected) +{ + var desc = Object.getOwnPropertyDescriptor(obj, prop); + assertEq(typeof desc, typeof expected, + "type mismatch (got " + s(desc) + ", expected " + s(expected) + ")"); + + assertEq(desc.hasOwnProperty("get"), desc.hasOwnProperty("set"), + "bad descriptor: " + s(desc)); + assertEq(desc.hasOwnProperty("value"), desc.hasOwnProperty("writable"), + "bad descriptor: " + s(desc)); + + assertEq(desc.hasOwnProperty("get"), !desc.hasOwnProperty("value"), + "bad descriptor: " + s(desc)); + + checkField("get", desc, expected); + checkField("set", desc, expected); + checkField("value", desc, expected); + checkField("writable", desc, expected); + checkField("enumerable", desc, expected); + checkField("configurable", desc, expected); +} + +function expectTypeError(f) +{ + try + { + f(); + throw new Error("no error thrown"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "wrong error thrown: got " + e + ", not a TypeError"); + } +} + +/************** + * BEGIN TEST * + **************/ + +// Adding a new getter, overwriting an existing one + +function g1() { } +var gobj = {}; +gobj.__defineGetter__("foo", g1); +check(gobj, "foo", { get: g1, set: undefined, enumerable: true, configurable: true }); + +function g2() { } +gobj.__defineGetter__("foo", g2); +check(gobj, "foo", { get: g2, set: undefined, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a new setter, overwriting an existing one + +function s1() { } +var sobj = {}; +sobj.__defineSetter__("bar", s1); +check(sobj, "bar", { get: undefined, set: s1, enumerable: true, configurable: true }); + +function s2() { } +sobj.__defineSetter__("bar", s2); +check(sobj, "bar", { get: undefined, set: s2, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a new getter, then adding a setter +// Changing an existing accessor's enumerability, then "null"-changing the accessor +// Changing an accessor's configurability, then "null"-changing and real-changing the accessor + +function g3() { } +var gsobj = {}; +gsobj.__defineGetter__("baz", g3); +check(gsobj, "baz", { get: g3, set: undefined, enumerable: true, configurable: true }); + +function s3() { } +gsobj.__defineSetter__("baz", s3); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true }); + +Object.defineProperty(gsobj, "baz", { enumerable: false }); +check(gsobj, "baz", { get: g3, set: s3, enumerable: false, configurable: true }); + +gsobj.__defineGetter__("baz", g3); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true }); + +Object.defineProperty(gsobj, "baz", { enumerable: false }); +check(gsobj, "baz", { get: g3, set: s3, enumerable: false, configurable: true }); + +gsobj.__defineSetter__("baz", s3); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: true }); + +Object.defineProperty(gsobj, "baz", { configurable: false }); +expectTypeError(function() { gsobj.__defineSetter__("baz", s2); }); +expectTypeError(function() { gsobj.__defineSetter__("baz", s3); }); +check(gsobj, "baz", { get: g3, set: s3, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a new setter, then adding a getter +// Changing an existing accessor's enumerability, then "null"-changing the accessor +// Changing an accessor's configurability, then "null"-changing and real-changing the accessor + +function s4() { } +var sgobj = {}; +sgobj.__defineSetter__("baz", s4); +check(sgobj, "baz", { get: undefined, set: s4, enumerable: true, configurable: true }); + +function g4() { } +sgobj.__defineGetter__("baz", g4); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true }); + +Object.defineProperty(sgobj, "baz", { enumerable: false }); +check(sgobj, "baz", { get: g4, set: s4, enumerable: false, configurable: true }); + +sgobj.__defineSetter__("baz", s4); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true }); + +Object.defineProperty(sgobj, "baz", { enumerable: false }); +check(sgobj, "baz", { get: g4, set: s4, enumerable: false, configurable: true }); + +sgobj.__defineSetter__("baz", s4); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: true }); + +Object.defineProperty(sgobj, "baz", { configurable: false }); +expectTypeError(function() { sgobj.__defineGetter__("baz", g3); }); +expectTypeError(function() { sgobj.__defineSetter__("baz", s4); }); +check(sgobj, "baz", { get: g4, set: s4, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a getter over a writable data property + +function g5() { } +var gover = { quux: 17 }; +check(gover, "quux", { value: 17, writable: true, enumerable: true, configurable: true }); + +gover.__defineGetter__("quux", g5); +check(gover, "quux", { get: g5, set: undefined, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a setter over a writable data property + +function s5() { } +var sover = { quux: 17 }; +check(sover, "quux", { value: 17, writable: true, enumerable: true, configurable: true }); + +sover.__defineSetter__("quux", s5); +check(sover, "quux", { get: undefined, set: s5, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a getter over a non-writable data property + +function g6() { } +var gnover = { eit: 17 }; +check(gnover, "eit", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(gnover, "eit", { writable: false }); +check(gnover, "eit", { value: 17, writable: false, enumerable: true, configurable: true }); + +gnover.__defineGetter__("eit", g6); +check(gnover, "eit", { get: g6, set: undefined, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a setter over a non-writable data property + +function s6() { } +var snover = { eit: 17 }; +check(snover, "eit", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(snover, "eit", { writable: false }); +check(snover, "eit", { value: 17, writable: false, enumerable: true, configurable: true }); + +snover.__defineSetter__("eit", s6); +check(snover, "eit", { get: undefined, set: s6, enumerable: true, configurable: true }); + +/******************************************************************************/ + +// Adding a getter over a non-configurable, writable data property + +function g7() { } +var gncover = { moo: 17 }; +check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(gncover, "moo", { configurable: false }); +check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +expectTypeError(function() { gncover.__defineGetter__("moo", g7); }); +check(gncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a setter over a non-configurable, writable data property + +function s7() { } +var sncover = { moo: 17 }; +check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(sncover, "moo", { configurable: false }); +check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +expectTypeError(function() { sncover.__defineSetter__("moo", s7); }); +check(sncover, "moo", { value: 17, writable: true, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a getter over a non-configurable, non-writable data property + +function g8() { } +var gncwover = { fwoosh: 17 }; +check(gncwover, "fwoosh", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(gncwover, "fwoosh", { writable: false, configurable: false }); +check(gncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +expectTypeError(function() { gncwover.__defineGetter__("fwoosh", g7); }); +check(gncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +/******************************************************************************/ + +// Adding a setter over a non-configurable, non-writable data property + +function s8() { } +var sncwover = { fwoosh: 17 }; +check(sncwover, "fwoosh", { value: 17, writable: true, enumerable: true, configurable: true }); +Object.defineProperty(sncwover, "fwoosh", { writable: false, configurable: false }); +check(sncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +expectTypeError(function() { sncwover.__defineSetter__("fwoosh", s7); }); +check(sncwover, "fwoosh", { value: 17, writable: false, enumerable: true, configurable: false }); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/eval-native-callback-is-indirect.js b/source/spidermonkey-tests/ecma_5/extensions/eval-native-callback-is-indirect.js new file mode 100644 index 00000000..662f619e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/eval-native-callback-is-indirect.js @@ -0,0 +1,43 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 604504; +var summary = "eval called from a native function is indirect"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var originalEval = eval; + +var global = this; +var directCheckCode = "this === global"; + +function testArrayGeneric() +{ + var global = "psych!"; + var eval = Array.map; + + var mapped = eval([directCheckCode], originalEval); + assertEq(mapped[0], true); +} + +function testStringGeneric() +{ + var global = "psych!"; + var eval = String.replace; + + var newString = eval(directCheckCode, directCheckCode, originalEval); + assertEq(newString, "true"); +} +testStringGeneric(); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/extension-methods-reject-null-undefined-this.js b/source/spidermonkey-tests/ecma_5/extensions/extension-methods-reject-null-undefined-this.js new file mode 100644 index 00000000..5ea399fe --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/extension-methods-reject-null-undefined-this.js @@ -0,0 +1,112 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 619283; +var summary = + "ECMAScript built-in methods that immediately throw when |this| is " + + "|undefined| or |null| (due to CheckObjectCoercible, ToObject, or ToString)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// This test fills out for the non-standard methods which +// ecma_5/misc/builtin-methods-reject-null-undefined-this.js declines to test. + +var ClassToMethodMap = + { + Object: [/* + * Don't box this just yet for these methods -- they're used too + * much without qualification to do that. :-( + */ + /* "__defineGetter__", "__defineSetter__", */ + "__lookupGetter__", "__lookupSetter__", "watch", "unwatch", + "toSource"], + Function: ["toSource"], + Array: ["toSource"], + String: ["toSource", "quote", "bold", "italics", "fixed", "fontsize", + "fontcolor", "link", "anchor", "strike", "small", "big", "blink", + "sup", "sub", "substr", "trimLeft", "trimRight", "toJSON"], + Boolean: ["toSource", "toJSON"], + Number: ["toSource", "toJSON"], + Date: ["toSource", "toLocaleFormat", "getYear", "setYear", + "toGMTString"], + RegExp: ["toSource"], + Error: ["toSource"], + }; + +var badThisValues = [null, undefined]; + +function testMethod(Class, className, method) +{ + var expr; + + // Try out explicit this values + for (var i = 0, sz = badThisValues.length; i < sz; i++) + { + var badThis = badThisValues[i]; + + expr = className + ".prototype." + method + ".call(" + badThis + ")"; + try + { + Class.prototype[method].call(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + + expr = className + ".prototype." + method + ".apply(" + badThis + ")"; + try + { + Class.prototype[method].apply(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + } + + // ..and for good measure.. + + expr = "(0, " + className + ".prototype." + method + ")()" + try + { + // comma operator to call GetValue() on the method and de-Reference it + (0, Class.prototype[method])(); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } +} + +for (var className in ClassToMethodMap) +{ + var Class = this[className]; + + var methodNames = ClassToMethodMap[className]; + for (var i = 0, sz = methodNames.length; i < sz; i++) + { + var method = methodNames[i]; + testMethod(Class, className, method); + } +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/function-caller-skips-eval-frames.js b/source/spidermonkey-tests/ecma_5/extensions/function-caller-skips-eval-frames.js new file mode 100644 index 00000000..77eb9910 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/function-caller-skips-eval-frames.js @@ -0,0 +1,34 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +function innermost() { return arguments.callee.caller; } +function nest() { return eval("innermost();"); } +function nest2() { return nest(); } + +assertEq(nest2(), nest); + +var innermost = function innermost() { return arguments.callee.caller.caller; }; + +assertEq(nest2(), nest2); + +function nestTwice() { return eval("eval('innermost();');"); } +var nest = nestTwice; + +assertEq(nest2(), nest2); + +function innermostEval() { return eval("arguments.callee.caller"); } +var innermost = innermostEval; + +assertEq(nest2(), nestTwice); + +function innermostEvalTwice() { return eval('eval("arguments.callee.caller");'); } +var innermost = innermostEvalTwice; + +assertEq(nest2(), nestTwice); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/function-caller-strict-cross-global.js b/source/spidermonkey-tests/ecma_5/extensions/function-caller-strict-cross-global.js new file mode 100644 index 00000000..45fd7b1b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/function-caller-strict-cross-global.js @@ -0,0 +1,28 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal() +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var g1 = newGlobal(); +g1.evaluate("function f() { return f.caller; }"); + +var g2 = newGlobal(); +g2.f = g1.f; + +try +{ + g2.evaluate("function g() { 'use strict'; return f(); } g()"); + throw new Error("failed to throw"); +} +catch (e) +{ + assertEq(e.constructor.name, "TypeError", + "expected TypeError accessing strict .caller across globals, got " + + e); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/function-definition-with.js b/source/spidermonkey-tests/ecma_5/extensions/function-definition-with.js new file mode 100644 index 00000000..df0ab9e0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/function-definition-with.js @@ -0,0 +1,53 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 577325; +var summary = 'Implement the ES5 algorithm for processing function statements'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var called, obj; + +function inFile1() { return "in file"; } +called = false; +obj = { set inFile1(v) { called = true; } }; +with (obj) + function inFile1() { return "in file in with"; }; +assertEq(inFile1(), "in file in with"); +assertEq("set" in Object.getOwnPropertyDescriptor(obj, "inFile1"), true); +assertEq(called, false); + +evaluate("function notInFile1() { return 'not in file'; }"); +called = false; +obj = { set notInFile1(v) { called = true; return "not in file 2"; } }; +with (obj) + function notInFile1() { return "not in file in with"; }; +assertEq(notInFile1(), "not in file in with"); +assertEq("set" in Object.getOwnPropertyDescriptor(obj, "notInFile1"), true); +assertEq(called, false); + +function inFile2() { return "in file 1"; } +called = false; +obj = + Object.defineProperty({}, "inFile2", + { value: 42, configurable: false, enumerable: false }); +with (obj) + function inFile2() { return "in file 2"; }; +assertEq(inFile2(), "in file 2"); +assertEq(obj.inFile2, 42); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/function-properties.js b/source/spidermonkey-tests/ecma_5/extensions/function-properties.js new file mode 100644 index 00000000..9585322e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/function-properties.js @@ -0,0 +1,21 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +function foo() +{ + assertEq(foo.arguments.length, 0); + assertEq(foo.caller, null); +} + +assertEq(foo.arguments, null); +assertEq(foo.caller, null); +foo(); +assertEq(foo.arguments, null); +assertEq(foo.caller, null); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/getOwnPropertyNames-__proto__.js b/source/spidermonkey-tests/ecma_5/extensions/getOwnPropertyNames-__proto__.js new file mode 100644 index 00000000..764e0dcc --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/getOwnPropertyNames-__proto__.js @@ -0,0 +1,28 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 690031; +var summary = + 'Exclude __proto__ from showing up when enumerating properties of ' + + 'Object.prototype again'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var keys = Object.getOwnPropertyNames(Object.prototype); +assertEq(keys.indexOf("__proto__"), -1, + "shouldn't have gotten __proto__ as a property of Object.prototype " + + "(got these properties: " + keys + ")"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/iterator-in-catch.js b/source/spidermonkey-tests/ecma_5/extensions/iterator-in-catch.js new file mode 100644 index 00000000..390b585e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/iterator-in-catch.js @@ -0,0 +1,20 @@ +//Bug 350712 + +function iterator () { + for (var i in []); +} + +try { + try { + throw 5; + } + catch(error if iterator()) { + assertEq(false, true); + } +} +catch(error) { + assertEq(error, 5); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/misplaced-inconsistent-directive.js b/source/spidermonkey-tests/ecma_5/extensions/misplaced-inconsistent-directive.js new file mode 100644 index 00000000..7fe24c1d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/misplaced-inconsistent-directive.js @@ -0,0 +1,65 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 1046964; +var summary = + "Misplaced directives (e.g. 'use strict') should trigger warnings if they " + + "contradict the actually-used semantics"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +options("strict"); +options("werror"); + +function evaluateNoRval(code) +{ + evaluate(code, { compileAndGo: true, noScriptRval: true }); +} + +function expectSyntaxError(code) +{ + try + { + evaluateNoRval(code); + throw new Error("didn't throw"); + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "should have thrown a SyntaxError, instead got:\n" + + " " + e + "\n" + + "when evaluating:\n" + + " " + code); + } +} + +expectSyntaxError("function f1() {} 'use strict'; function f2() {}"); +expectSyntaxError("function f3() { var x; 'use strict'; }"); + +expectSyntaxError("function f4() {} 'use asm'; function f5() {}"); +expectSyntaxError("function f6() { var x; 'use strict'; }"); +expectSyntaxError("'use asm'; function f7() {}"); + +// No errors expected -- useless non-directives, but not contrary to used +// semantics. +evaluateNoRval("'use strict'; function f8() {} 'use strict'; function f9() {}"); +evaluateNoRval("'use strict'; function f10() { var z; 'use strict' }"); + +evaluateNoRval("function f11() { 'use asm'; return {}; }"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/nested-delete-name-in-evalcode.js b/source/spidermonkey-tests/ecma_5/extensions/nested-delete-name-in-evalcode.js new file mode 100644 index 00000000..c273988b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/nested-delete-name-in-evalcode.js @@ -0,0 +1,99 @@ +// |reftest| fails -- bug 604301, at a minimum +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 616294; +var summary = + "|delete x| inside a function in eval code, where that eval code includes " + + "|var x| at top level, actually does delete the binding for x"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var f; + +function testOuterLet() +{ + return eval("let x; (function() { return delete x; })"); +} + +f = testOuterLet(); + +assertEq(f(), true); // configurable, so remove => true +assertEq(f(), true); // not there => true (only non-configurable => false) + + +function testOuterForLet() +{ + return eval("for (let x; false; ); (function() { return delete x; })"); +} + +f = testOuterForLet(); + +assertEq(f(), true); // not there => true (only non-configurable => false) + + +function testOuterForInLet() +{ + return eval("for (let x in {}); (function() { return delete x; })"); +} + +f = testOuterForInLet(); + +assertEq(f(), true); // configurable, so remove => true +assertEq(f(), true); // not there => true (only non-configurable => false) + + +function testOuterNestedVarInLetBlock() +{ + return eval("let (x = 7) { var x = 9; } (function() { return delete x; })"); +} + +f = testOuterNestedVarInLetBlock(); + +assertEq(f(), true); // configurable var, so remove => true +assertEq(f(), true); // let still there, configurable => true +assertEq(f(), true); // nothing at all => true + + +function testOuterNestedVarInForLet() +{ + return eval("for (let q = 0; q < 5; q++) { var x; } (function() { return delete x; })"); +} + +f = testOuterNestedVarInForLet(); + +assertEq(f(), true); // configurable, so remove => true +assertEq(f(), true); // there => true + + +function testArgumentShadowLet() +{ + return eval("let x; (function(x) { return delete x; })"); +} + +f = testArgumentShadowLet(); + +assertEq(f(), false); // non-configurable argument => false + + +function testFunctionLocal() +{ + return eval("(function() { let x; return delete x; })"); +} + +f = testFunctionLocal(); + +assertEq(f(), false); // defined by function code => not configurable => false + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/preventExtensions-cross-global.js b/source/spidermonkey-tests/ecma_5/extensions/preventExtensions-cross-global.js new file mode 100644 index 00000000..0cc68e0f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/preventExtensions-cross-global.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +var gTestfile = 'preventExtensions-cross-global.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 789897; +var summary = + "Object.preventExtensions and Object.isExtensible should work correctly " + + "across globals"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var otherGlobal = newGlobal(); + +var obj = {}; +assertEq(otherGlobal.Object.isExtensible(obj), true); +assertEq(otherGlobal.Object.preventExtensions(obj), obj); +assertEq(otherGlobal.Object.isExtensible(obj), false); + +var objFromOther = otherGlobal.Object(); +assertEq(Object.isExtensible(objFromOther), true); +assertEq(Object.preventExtensions(objFromOther), objFromOther); +assertEq(Object.isExtensible(objFromOther), false); + +var proxy = new Proxy({}, {}); +assertEq(otherGlobal.Object.isExtensible(proxy), true); +assertEq(otherGlobal.Object.preventExtensions(proxy), proxy); +assertEq(otherGlobal.Object.isExtensible(proxy), false); + +var proxyFromOther = otherGlobal.evaluate("new Proxy({}, {})"); +assertEq(Object.isExtensible(proxyFromOther), true); +assertEq(Object.preventExtensions(proxyFromOther), proxyFromOther); +assertEq(Object.isExtensible(proxyFromOther), false); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/proxy-__proto__.js b/source/spidermonkey-tests/ecma_5/extensions/proxy-__proto__.js new file mode 100644 index 00000000..480d4304 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/proxy-__proto__.js @@ -0,0 +1,81 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'proxy-__proto__.js'; +var BUGNUMBER = 770344; +var summary = "Behavior of __proto__ on proxies"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var protoDesc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); +var protoGetter = protoDesc.get; +var protoSetter = protoDesc.set; + +function pp(arr) +{ + return arr.map(function(v) { return "" + v; }).join(", "); +} + +function testProxy(creator, args, proto) +{ + print("Now testing behavior for " + + "Proxy." + creator + "(" + pp(args) + ")"); + + var pobj = Proxy[creator].apply(Proxy, args); + + // Check [[Prototype]] before attempted mutation + assertEq(Object.getPrototypeOf(pobj), proto); + assertEq(protoGetter.call(pobj), proto); + + // Attempt [[Prototype]] mutation + protoSetter.call(pobj, null); + + // Check [[Prototype]] after attempted mutation + assertEq(Object.getPrototypeOf(pobj), null); + assertEq(protoGetter.call(pobj), null); +} + +// Proxy object with non-null [[Prototype]] +var nonNullProto = { toString: function() { return "non-null prototype"; } }; +var nonNullHandler = { toString: function() { return "non-null handler"; } }; +testProxy("create", [nonNullHandler, nonNullProto], nonNullProto); + +// Proxy object with null [[Prototype]] +var nullProto = null; +var nullHandler = { toString: function() { return "null handler"; } }; +testProxy("create", [nullHandler, nullProto], nullProto); + +// Proxy function with [[Call]] +var callForCallOnly = function () { }; +callForCallOnly.toString = function() { return "callForCallOnly"; }; +var callOnlyHandler = { toString: function() { return "call-only handler"; } }; +testProxy("createFunction", + [callOnlyHandler, callForCallOnly], Function.prototype); + +// Proxy function with [[Call]] and [[Construct]] +var callForCallConstruct = function() { }; +callForCallConstruct.toString = function() { return "call/construct call"; }; +var constructForCallConstruct = function() { }; +constructForCallConstruct.toString = + function() { return "call/construct construct"; }; +var handlerForCallConstruct = + { toString: function() { return "call/construct handler"; } }; +testProxy("createFunction", + [handlerForCallConstruct, + callForCallConstruct, + constructForCallConstruct], + Function.prototype); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/proxy-array-target-length-definition.js b/source/spidermonkey-tests/ecma_5/extensions/proxy-array-target-length-definition.js new file mode 100644 index 00000000..c573c4ba --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/proxy-array-target-length-definition.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'proxy-array-target-length-definition.js'; +var BUGNUMBER = 905947; +var summary = + "Redefining an array's |length| property when redefining the |length| " + + "property on a proxy with an array as target"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var arr = []; +var p = new Proxy(arr, {}); + +function assertThrowsTypeError(f) +{ + try { + f(); + assertEq(false, true, "Must have thrown"); + } catch (e) { + assertEq(e instanceof TypeError, true, "Must have thrown TypeError"); + } +} + +// Redefining non-configurable length should throw a TypeError +assertThrowsTypeError(function () { Object.defineProperty(p, "length", { value: 17, configurable: true }); }); + +// Same here. +assertThrowsTypeError(function () { Object.defineProperty(p, "length", { value: 42, enumerable: true }); }); + +// Check the property went unchanged. +var pd = Object.getOwnPropertyDescriptor(p, "length"); +assertEq(pd.value, 0); +assertEq(pd.writable, true); +assertEq(pd.enumerable, false); +assertEq(pd.configurable, false); + +var ad = Object.getOwnPropertyDescriptor(arr, "length"); +assertEq(ad.value, 0); +assertEq(ad.writable, true); +assertEq(ad.enumerable, false); +assertEq(ad.configurable, false); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/proxy-enumeration.js b/source/spidermonkey-tests/ecma_5/extensions/proxy-enumeration.js new file mode 100644 index 00000000..f872d635 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/proxy-enumeration.js @@ -0,0 +1,4 @@ +var list = Object.getOwnPropertyNames(this); +var found = list.indexOf("Proxy") != -1; +assertEq(found, true) +reportCompare(true, true) diff --git a/source/spidermonkey-tests/ecma_5/extensions/proxy-strict.js b/source/spidermonkey-tests/ecma_5/extensions/proxy-strict.js new file mode 100644 index 00000000..30e5779d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/proxy-strict.js @@ -0,0 +1,12 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var s = "grape"; +function f() { "use strict"; return this; } +var p = Proxy.createFunction(f, f); +String.prototype.p = p; +assertEq(s.p(), "grape"); + +reportCompare(true,true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/regress-bug567606.js b/source/spidermonkey-tests/ecma_5/extensions/regress-bug567606.js new file mode 100644 index 00000000..6bebc806 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/regress-bug567606.js @@ -0,0 +1,19 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var global = this; + +(function() { + function f() { + this.b = function() {}; + Object.defineProperty(this, "b", ({ + configurable: global.__defineSetter__("", function() {}) + })); + } + for (y of [0]) { + _ = new f(); + } +})(); +uneval(this); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/regress-bug607284.js b/source/spidermonkey-tests/ecma_5/extensions/regress-bug607284.js new file mode 100644 index 00000000..7d2c4921 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/regress-bug607284.js @@ -0,0 +1,16 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +if ("evalcx" in this) { + var sandbox = evalcx(""); + var obj = { get foo() { throw("FAIL"); } }; + var getter = obj.__lookupGetter__("foo"); + var desc = sandbox.Object.getOwnPropertyDescriptor(obj, "foo"); + reportCompare(desc.get, getter, "getter is correct"); + reportCompare(desc.set, undefined, "setter is correct"); +} +else { + reportCompare(true, true); +} diff --git a/source/spidermonkey-tests/ecma_5/extensions/regress-bug629723.js b/source/spidermonkey-tests/ecma_5/extensions/regress-bug629723.js new file mode 100644 index 00000000..6c826e0c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/regress-bug629723.js @@ -0,0 +1,16 @@ +function f(foo) { + "use strict"; + foo.bar; +} + +var actual; +try { + f(); + actual = "no error"; +} catch (x) { + actual = (x instanceof TypeError) ? "type error" : "some other error"; + actual += (/use strict/.test(x)) ? " with directive" : " without directive"; +} + +reportCompare("type error without directive", actual, + "decompiled expressions in error messages should not include directive prologues"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array-ccw.js b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array-ccw.js new file mode 100644 index 00000000..1594e98c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array-ccw.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 901351; +var summary = "Behavior when the JSON.parse reviver mutates the holder array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +if (typeof newGlobal !== "function") +{ + var newGlobal = function() + { + return { evaluate: eval }; + }; +} + +var proxyObj = null; + +var arr = JSON.parse('[0, 1]', function(prop, v) { + if (prop === "0") + { + proxyObj = newGlobal().evaluate("({ c: 17, d: 42 })"); + this[1] = proxyObj; + } + return v; +}); + +assertEq(arr[0], 0); +assertEq(arr[1], proxyObj); +assertEq(arr[1].c, 17); +assertEq(arr[1].d, 42); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array-nonnative.js b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array-nonnative.js new file mode 100644 index 00000000..de4ad703 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array-nonnative.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 901380; +var summary = "Behavior when JSON.parse walks over a non-native object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var typedArray = null; + +var observedTypedArrayElementCount = 0; + +var arr = JSON.parse('[0, 1]', function(prop, v) { + if (prop === "0" && Array.isArray(this)) // exclude typedArray[0] + { + typedArray = new Int8Array(1); + this[1] = typedArray; + } + if (this instanceof Int8Array) + { + assertEq(prop, "0"); + observedTypedArrayElementCount++; + } + return v; +}); + +assertEq(arr[0], 0); +assertEq(arr[1], typedArray); + +assertEq(observedTypedArrayElementCount, 1); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array.js b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array.js new file mode 100644 index 00000000..f4f89ac0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-array.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 901351; +var summary = "Behavior when the JSON.parse reviver mutates the holder array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var proxyObj = null; + +var arr = JSON.parse('[0, 1]', function(prop, v) { + if (prop === "0") + { + proxyObj = new Proxy({ c: 17, d: 42 }, {}); + this[1] = proxyObj; + } + return v; +}); + +assertEq(arr[0], 0); +assertEq(arr[1], proxyObj); +assertEq(arr[1].c, 17); +assertEq(arr[1].d, 42); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object-ccw.js b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object-ccw.js new file mode 100644 index 00000000..8b97db23 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object-ccw.js @@ -0,0 +1,64 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 901351; +var summary = "Behavior when the JSON.parse reviver mutates the holder object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +if (typeof newGlobal !== "function") +{ + var newGlobal = function() + { + return { evaluate: eval }; + }; +} + +// A little trickiness to account for the undefined-ness of property +// enumeration order. +var first = "unset"; + +var proxyObj = null; + +var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) { + if (first === "unset") + { + first = prop; + var second = (prop === "a") ? "b" : "a"; + + proxyObj = newGlobal().evaluate("({ c: 42, d: 17 })"); + Object.defineProperty(this, second, { value: proxyObj }); + } + return v; +}); + +if (first === "a") +{ + assertEq(obj.a, 0); + assertEq(obj.b, proxyObj); + assertEq(obj.b.c, 42); + assertEq(obj.b.d, 17); +} +else +{ + assertEq(obj.a, proxyObj); + assertEq(obj.a.c, 42); + assertEq(obj.a.d, 17); + assertEq(obj.b, 1); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object-nonnative.js b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object-nonnative.js new file mode 100644 index 00000000..1300f8dd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object-nonnative.js @@ -0,0 +1,60 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 901380; +var summary = "Behavior when JSON.parse walks over a non-native object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// A little trickiness to account for the undefined-ness of property +// enumeration order. +var first = "unset"; + +var observedTypedArrayElementCount = 0; + +var typedArray = null; + +var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) { + if (first === "unset") + { + first = prop; + var second = (prop === "a") ? "b" : "a"; + typedArray = new Int8Array(1); + Object.defineProperty(this, second, { value: typedArray }); + } + if (this instanceof Int8Array) + { + assertEq(prop, "0"); + observedTypedArrayElementCount++; + } + return v; +}); + +if (first === "a") +{ + assertEq(obj.a, 0); + assertEq(obj.b, typedArray); +} +else +{ + assertEq(obj.a, typedArray); + assertEq(obj.b, 1); +} + +assertEq(observedTypedArrayElementCount, 1); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object.js b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object.js new file mode 100644 index 00000000..973766e9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/reviver-mutates-holder-object.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + * Jeff Walden + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 901351; +var summary = "Behavior when the JSON.parse reviver mutates the holder object"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// A little trickiness to account for the undefined-ness of property +// enumeration order. +var first = "unset"; + +var proxyObj = null; + +var obj = JSON.parse('{ "a": 0, "b": 1 }', function(prop, v) { + if (first === "unset") + { + first = prop; + var second = (prop === "a") ? "b" : "a"; + + proxyObj = new Proxy({ c: 42, d: 17 }, {}); + Object.defineProperty(this, second, { value: proxyObj }); + } + return v; +}); + +if (first === "a") +{ + assertEq(obj.a, 0); + assertEq(obj.b, proxyObj); + assertEq(obj.b.c, 42); + assertEq(obj.b.d, 17); +} +else +{ + assertEq(obj.a, proxyObj); + assertEq(obj.a.c, 42); + assertEq(obj.a.d, 17); + assertEq(obj.b, 1); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/shell.js b/source/spidermonkey-tests/ecma_5/extensions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/extensions/strict-function-statements.js b/source/spidermonkey-tests/ecma_5/extensions/strict-function-statements.js new file mode 100644 index 00000000..95b872fa --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/strict-function-statements.js @@ -0,0 +1,100 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +// Ordinary function definitions should be unaffected. +assertEq(testLenientAndStrict("function f() { }", + parsesSuccessfully, + parsesSuccessfully), + true); + +// Function statements within blocks are forbidden in strict mode code. +assertEq(testLenientAndStrict("{ function f() { } }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +// Lambdas are always permitted within blocks. +assertEq(testLenientAndStrict("{ (function f() { }) }", + parsesSuccessfully, + parsesSuccessfully), + true); + +// Function statements within any sort of statement are forbidden in strict mode code. +assertEq(testLenientAndStrict("if (true) function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("while (true) function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("do function f() { } while (true);", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("for(;;) function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("for(x in []) function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("with(o) function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("switch(1) { case 1: function f() { } }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("x: function f() { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict("try { function f() { } } catch (x) { }", + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +// Lambdas are always permitted within any sort of statement. +assertEq(testLenientAndStrict("if (true) (function f() { })", + parsesSuccessfully, + parsesSuccessfully), + true); + +// Function statements are permitted in blocks within lenient functions. +assertEq(parsesSuccessfully("function f() { function g() { } }"), + true); + +// Function statements are permitted in any statement within lenient functions. +assertEq(parsesSuccessfully("function f() { if (true) function g() { } }"), + true); + +assertEq(parseRaisesException(SyntaxError) + ("function f() { 'use strict'; if (true) function g() { } }"), + true); + +assertEq(parseRaisesException(SyntaxError) + ("function f() { 'use strict'; { function g() { } } }"), + true); + +assertEq(parsesSuccessfully("function f() { 'use strict'; if (true) (function g() { }) }"), + true); + +assertEq(parsesSuccessfully("function f() { 'use strict'; { (function g() { }) } }"), + true); + +// Eval should behave the same way. (The parse-only tests use the Function constructor.) +assertEq(testLenientAndStrict("function f() { }", + completesNormally, + completesNormally), + true); +assertEq(testLenientAndStrict("{ function f() { } }", + completesNormally, + raisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/strict-function-toSource.js b/source/spidermonkey-tests/ecma_5/extensions/strict-function-toSource.js new file mode 100644 index 00000000..1454fcf4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/strict-function-toSource.js @@ -0,0 +1,17 @@ +/* + * Bug 800407 - Functions defined with Function construcor + * do have strict mode when JSOPTION_STRICT_MODE is on. + */ + +options("strict_mode"); +function testRunOptionStrictMode(str, arg, result) { + var strict_inner = new Function('return typeof this == "undefined";'); + return strict_inner; +} +assertEq(eval(uneval(testRunOptionStrictMode()))(), true); + +if (typeof decompileBody !== "undefined") { + assertEq(decompileBody(new Function('x', 'return x*2;')).contains('\n"use strict"'), true); +} + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/strict-option-redeclared-parameter.js b/source/spidermonkey-tests/ecma_5/extensions/strict-option-redeclared-parameter.js new file mode 100644 index 00000000..5a36b694 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/strict-option-redeclared-parameter.js @@ -0,0 +1,30 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 630770; +var summary = + 'Correctly warn about duplicate parameters when the strict option is enabled'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Verify that duplicate parameters, with the strict option set, don't provoke +// an assertion. Ideally we'd also verify that we warn exactly once per +// duplicated parameter name, but at present there's no way to test that +// without more effort (further customizing the shell JSErrorReporter) than we +// want to make now. +options("strict"); +eval("function a(x, x, x, x) { }"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/string-literal-getter-setter-decompilation.js b/source/spidermonkey-tests/ecma_5/extensions/string-literal-getter-setter-decompilation.js new file mode 100644 index 00000000..a0a57140 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/string-literal-getter-setter-decompilation.js @@ -0,0 +1,34 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var f; +try +{ + f = eval("(function literalInside() { return { set 'c d e'(v) { } }; })"); +} +catch (e) +{ + assertEq(true, false, + "string-literal property name in setter in object literal in " + + "function statement failed to parse: " + e); +} + +var fstr = "" + f; +assertEq(fstr.indexOf("set") < fstr.indexOf("c d e"), true, + "should be using new-style syntax with string literal in place of " + + "property identifier"); +assertEq(fstr.indexOf("setter") < 0, true, "using old-style syntax?"); + +var o = f(); +var ostr = "" + o; +assertEq("c d e" in o, true, "missing the property?"); +assertEq("set" in Object.getOwnPropertyDescriptor(o, "c d e"), true, + "'c d e' property not a setter?"); +// disabled because we still generate old-style syntax here (toSource +// decompilation is as yet unfixed) +// assertEq(ostr.indexOf("set") < ostr.indexOf("c d e"), true, +// "should be using new-style syntax when getting the source of a " + +// "getter/setter while decompiling an object"); +// assertEq(ostr.indexOf("setter") < 0, true, "using old-style syntax?"); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/toLocaleString-infinite-recursion.js b/source/spidermonkey-tests/ecma_5/extensions/toLocaleString-infinite-recursion.js new file mode 100644 index 00000000..a11433ce --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/toLocaleString-infinite-recursion.js @@ -0,0 +1,31 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 653789; +var summary = 'Check for too-deep stack when calling toLocaleString'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + "" + { toString: Object.prototype.toLocaleString }; + throw new Error("should have thrown on over-recursion"); +} +catch (e) +{ + assertEq(e instanceof InternalError, true); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/toSource-infinite-recursion.js b/source/spidermonkey-tests/ecma_5/extensions/toSource-infinite-recursion.js new file mode 100644 index 00000000..2ddcaa75 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/toSource-infinite-recursion.js @@ -0,0 +1,34 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 650574; +var summary = 'Check for too-deep stack when converting a value to source'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + var e = Error(''); + e.fileName = e; + e.toSource(); + throw new Error("should have thrown"); +} +catch (e) +{ + assertEq(e instanceof InternalError, true, + "should have thrown for over-recursion"); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/uneval-strict-functions.js b/source/spidermonkey-tests/ecma_5/extensions/uneval-strict-functions.js new file mode 100644 index 00000000..06e0b09d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/uneval-strict-functions.js @@ -0,0 +1,61 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Check that strict mode functions get decompiled properly. */ +function lenient() { return typeof this == "object"; } +assertEq(eval(uneval(lenient) + "lenient;")(), true); + +function strict() { 'use strict'; return typeof this == "undefined"; } +print(uneval(strict)); +assertEq(eval(uneval(strict) + "strict;")(), true); + +function lenient_outer() { + function lenient_inner() { + return typeof this == "object"; + } + return lenient_inner; +} +assertEq(eval(uneval(lenient_outer()) + "lenient_inner;")(), true); + +function strict_outer() { + "use strict"; + function strict_inner() { + return typeof this == "undefined"; + } + return strict_inner; +} +assertEq(eval(uneval(strict_outer()) + "strict_inner;")(), true); + +function lenient_outer_closure() { + return function lenient_inner_closure() { + return typeof this == "object"; + }; +} +assertEq(eval(uneval(lenient_outer_closure()))(), true); + +function strict_outer_closure() { + "use strict"; + return function strict_inner_closure() { + return typeof this == "undefined"; + }; +} +assertEq(eval(uneval(strict_outer_closure()))(), true); + +function lenient_outer_expr() { + return function lenient_inner_expr() (typeof this == "object"); +} +assertEq(eval(uneval(lenient_outer_expr()))(), true); + +/* + * This doesn't work, because we have no way to include strict mode + * directives in expression closures. + * + * function strict_outer_expr() { + * return function strict_inner_expr() (typeof this == "undefined"); + * } + * assertEq(eval(uneval(strict_outer_expr()))(), true); + */ + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/watch-array-length.js b/source/spidermonkey-tests/ecma_5/extensions/watch-array-length.js new file mode 100644 index 00000000..e9b356ef --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/watch-array-length.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var hitCount; +function watcher(p,o,n) { hitCount++; return n; } + +var a = [1]; +a.watch('length', watcher); +hitCount = 0; +a.length = 0; +reportCompare(1, hitCount, "lenient; configurable: watchpoint hit"); + +var b = Object.defineProperty([1],'0',{configurable:false}); +b.watch('length', watcher); +hitCount = 0; +var result; +try { + b.length = 0; + result = "no error"; +} catch (x) { + result = x.toString(); +} +reportCompare(1, hitCount, "lenient; non-configurable: watchpoint hit"); +reportCompare(1, b.length, "lenient; non-configurable: length unchanged"); +reportCompare("no error", result, "lenient; non-configurable: no error thrown"); + +var c = Object.defineProperty([1],'0',{configurable:false}); +c.watch('length', watcher); +hitCount = 0; +var threwTypeError; +try { + (function(){'use strict'; c.length = 0;})(); + threwTypeError = false; +} catch (x) { + threwTypeError = x instanceof TypeError; +} +reportCompare(1, hitCount, "strict; non-configurable: watchpoint hit"); +reportCompare(1, c.length, "strict; non-configurable: length unchanged"); +reportCompare(true, threwTypeError, "strict; non-configurable: TypeError thrown"); diff --git a/source/spidermonkey-tests/ecma_5/extensions/watch-inherited-property.js b/source/spidermonkey-tests/ecma_5/extensions/watch-inherited-property.js new file mode 100644 index 00000000..1a0ad566 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/watch-inherited-property.js @@ -0,0 +1,38 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Create a prototype object with a setter property. */ +var protoSetterCount; +var proto = ({ set x(v) { protoSetterCount++; } }); + +/* Put a watchpoint on that setter. */ +var protoWatchCount; +proto.watch('x', function() { protoWatchCount++; }); + +/* Make an object with the above as its prototype. */ +function C() { } +C.prototype = proto; +var o = new C(); + +/* + * Set a watchpoint on the property in the inheriting object. We have + * defined this to mean "duplicate the property, setter and all, in the + * inheriting object." I don't think debugging observation mechanisms + * should mutate the program being run, but that's what we've got. + */ +var oWatchCount; +o.watch('x', function() { oWatchCount++; }); + +/* + * Assign to the property. This should trip the watchpoint on the inheriting object and + * the setter. + */ +protoSetterCount = protoWatchCount = oWatchCount = 0; +o.x = 1; +assertEq(protoWatchCount, 0); +assertEq(oWatchCount, 1); +assertEq(protoSetterCount, 1); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/watch-replaced-setter.js b/source/spidermonkey-tests/ecma_5/extensions/watch-replaced-setter.js new file mode 100644 index 00000000..05cf60af --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/watch-replaced-setter.js @@ -0,0 +1,46 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* A stock watcher function. */ +var watcherCount; +function watcher(id, oldval, newval) { watcherCount++; return newval; } + +/* Create an object with a JavaScript setter. */ +var setterCount; +var o = { w:2, set x(v) { setterCount++; } }; + +/* + * Put the object in dictionary mode, so that JSObject::putProperty will + * mutate its shapes instead of creating new ones. + */ +delete o.w; + +/* + * Place a watchpoint on the property. The watchpoint structure holds the + * original JavaScript setter, and a pointer to the shape. + */ +o.watch('x', watcher); + +/* + * Replace the accessor property with a value property. The shape's setter + * should become a non-JS setter, js_watch_set, and the watchpoint + * structure's saved setter should be updated (in this case, cleared). + */ +Object.defineProperty(o, 'x', { value:3, + writable:true, + enumerable:true, + configurable:true }); + +/* + * Assign to the property. This should trigger js_watch_set, which should + * call the handler, and then see that there is no JS-level setter to pass + * control on to, and return. + */ +watcherCount = setterCount = 0; +o.x = 3; +assertEq(watcherCount, 1); +assertEq(setterCount, 0); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/watch-setter-become-setter.js b/source/spidermonkey-tests/ecma_5/extensions/watch-setter-become-setter.js new file mode 100644 index 00000000..f5eff98b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/watch-setter-become-setter.js @@ -0,0 +1,44 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Create an object with a JavaScript setter. */ +var firstSetterCount; +var o = { w:2, set x(v) { firstSetterCount++; } }; + +/* + * Put the object in dictionary mode, so that JSObject::putProperty will + * mutate its shapes instead of creating new ones. + */ +delete o.w; + +/* A stock watcher function. */ +var watcherCount; +function watcher(id, oldval, newval) { watcherCount++; return newval; } + +/* + * Place a watchpoint on the property. The property's shape now has the + * watchpoint setter, with the original setter saved in the watchpoint + * structure. + */ +o.watch('x', watcher); + +/* + * Replace the setter with a new setter. The shape should get updated to + * refer to the new setter, and then the watchpoint setter should be + * re-established. + */ +var secondSetterCount; +Object.defineProperty(o, 'x', { set: function () { secondSetterCount++ } }); + +/* + * Assign to the property. This should trigger the watchpoint and the new setter. + */ +watcherCount = firstSetterCount = secondSetterCount = 0; +o.x = 3; +assertEq(watcherCount, 1); +assertEq(firstSetterCount, 0); +assertEq(secondSetterCount, 1); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/watch-value-prop-becoming-setter.js b/source/spidermonkey-tests/ecma_5/extensions/watch-value-prop-becoming-setter.js new file mode 100644 index 00000000..03cdd788 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/watch-value-prop-becoming-setter.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* A stock watcher function. */ +var watcherCount; +function watcher(id, old, newval) { + watcherCount++; + return newval; +} + +/* Create an object with a value property. */ +var o = { w:2, x:3 }; + +/* + * Place a watchpoint on the value property. The watchpoint structure holds + * the original JavaScript setter, and a pointer to the shape. + */ +o.watch('x', watcher); + +/* + * Put the object in dictionary mode, so that JSObject::putProperty will + * mutate its shapes instead of creating new ones. + */ +delete o.w; + +/* + * Replace the value property with a setter. + */ +var setterCount; +o.__defineSetter__('x', function() { setterCount++; }); + +/* + * Trigger the watchpoint. The watchpoint handler should run, and then the + * setter should run. + */ +watcherCount = setterCount = 0; +o.x = 4; +assertEq(watcherCount, 1); +assertEq(setterCount, 1); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/extensions/watchpoint-deletes-JSPropertyOp-setter.js b/source/spidermonkey-tests/ecma_5/extensions/watchpoint-deletes-JSPropertyOp-setter.js new file mode 100644 index 00000000..85410bbd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/extensions/watchpoint-deletes-JSPropertyOp-setter.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function make_watcher(name) { + return function (id, oldv, newv) { + print("watched " + name + "[0]"); + }; +} + +var o, p; +function f(flag) { + if (flag) { + o = arguments; + } else { + p = arguments; + o.watch(0, make_watcher('o')); + p.watch(0, make_watcher('p')); + + /* + * Previously, the watchpoint implementation actually substituted its magic setter + * functions for the setters of shared shapes, and then 1) carefully ignored calls + * to its magic setter from unrelated objects, and 2) avoided restoring the + * original setter until all watchpoints on that shape had been removed. + * + * However, when the watchpoint code began using JSObject::changeProperty and + * js_ChangeNativePropertyAttrs to change shapes' setters, the shape tree code + * became conscious of the presence of watchpoints, and shared shapes between + * objects only when their watchpoint nature coincided. Clearing the magic setter + * from one object's shape would not affect other objects, because the + * watchpointed and non-watchpointed shapes were distinct if they were shared. + * + * Thus, the first unwatch call must go ahead and fix p's shape, even though a + * watchpoint exists on the same shape in o. o's watchpoint's presence shouldn't + * cause 'unwatch' to leave p's magic setter in place. + */ + + /* DropWatchPointAndUnlock would see o's watchpoint, and not change p's property. */ + p.unwatch(0); + + /* DropWatchPointAndUnlock would fix o's property, but not p's; p's setter would be gone. */ + o.unwatch(0); + + /* This would fail to invoke the arguments object's setter. */ + p[0] = 4; + + /* And the formal parameter would not get updated. */ + assertEq(flag, 4); + } +} + +f(true); +f(false); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/misc/browser.js b/source/spidermonkey-tests/ecma_5/misc/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/misc/builtin-methods-reject-null-undefined-this.js b/source/spidermonkey-tests/ecma_5/misc/builtin-methods-reject-null-undefined-this.js new file mode 100644 index 00000000..7bfe89d9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/builtin-methods-reject-null-undefined-this.js @@ -0,0 +1,153 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 619283; +var summary = + "ECMAScript built-in methods that immediately throw when |this| is " + + "|undefined| or |null| (due to CheckObjectCoercible, ToObject, or ToString)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// We can't just exhaustively loop over everything because 1) method properties +// might be extensions with special |this| handling, and 2) some methods don't +// *quite* immediately throw a TypeError, first thing, if |this| is |undefined| +// or |null|, or their algorithms are very slightly ambiguous about whether they +// do. Why? Ipse-dixitism. *shrug* + +var ClassToMethodMap = + { + Object: [/* "toString" has special |this| handling */ + "toLocaleString", "valueOf", "hasOwnProperty", + /* + * "isPrototypeOf" has special |this| handling already tested in + * ecma_5/Object/isPrototypeOf.js. + */ + /* + * "isPrototypeOf" has special |this| handling already tested in + * ecma_5/Object/propertyIsEnumerable.js. + */], + // Function methods often don't ToObject(this) as their very first step, + // and they're already stepwise well-tested such that manual tests here + // would be redundant. + Array: ["toString", "toLocaleString", "concat", "join", "pop", "push", + "reverse", "shift", "slice", "sort", "splice", "unshift", + "indexOf", "lastIndexOf", "every", "some", "forEach", "map", + "filter", "reduce", "reduceRight"], + String: ["toString", "valueOf", "charAt", "charCodeAt", "concat", + "indexOf", "lastIndexOf", "localeCompare", "match", "replace", + "search", "slice", "split", "substring", "toLowerCase", + "toLocaleLowerCase", "toUpperCase", "toLocaleUpperCase", "trim", + /* + * "trimLeft" and "trimRight" are non-standard and thus are tested + * in ecma_5/extensions/trim-extensions.js. + */ + ], + Boolean: ["toString", "valueOf"], + Number: ["toString", "toLocaleString", "valueOf", + /* + * toFixed doesn't *immediately* test |this| for number or + * Number-ness, but because the ToInteger(void 0) which arguably + * precedes it in the toFixed algorithm won't throw in this test, + * we don't need to specially test it. + */ + "toFixed", + "toExponential", "toPrecision"], + Date: ["toString", "toDateString", "toTimeString", "toLocaleString", + "toLocaleDateString", "toLocaleTimeString", "valueOf", "getTime", + "getFullYear", "getUTCFullYear", "getMonth", "getUTCMonth", + "getDate", "getUTCDate", "getDay", "getUTCDay", "getHours", + "getUTCHours", "getMinutes", "getUTCMinutes", "getSeconds", + "getUTCSeconds", "getMilliseconds", "getUTCMilliseconds", + /* + * toFixed doesn't *immediately* test |this| for number or + * Number-ness, but because the TimeClip(ToNumber(void 0)) which + * arguably precedes it in the setTime algorithm won't throw in + * this test, we don't need to specially test it. + */ + "setTime", + "getTimezoneOffset", "setMilliseconds", "setUTCMilliseconds", + "setSeconds", "setUTCSeconds", "setMinutes", "setUTCMinutes", + "setHours", "setUTCHours", "setDate", "setUTCDate", "setMonth", + "setUTCMonth", "setFullYear", "setUTCFullYear", "toUTCString", + "toISOString", "toJSON"], + RegExp: ["exec", "test", "toString"], + Error: ["toString"], + }; + +var badThisValues = [null, undefined]; + +function testMethod(Class, className, method) +{ + var expr; + + // Try out explicit this values + for (var i = 0, sz = badThisValues.length; i < sz; i++) + { + var badThis = badThisValues[i]; + + expr = className + ".prototype." + method + ".call(" + badThis + ")"; + try + { + Class.prototype[method].call(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + + expr = className + ".prototype." + method + ".apply(" + badThis + ")"; + try + { + Class.prototype[method].apply(badThis); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } + } + + // ..and for good measure.. + + expr = "(0, " + className + ".prototype." + method + ")()" + try + { + // comma operator to call GetValue() on the method and de-Reference it + (0, Class.prototype[method])(); + throw new Error(expr + " didn't throw a TypeError"); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "wrong error for " + expr + ", instead threw " + e); + } +} + +for (var className in ClassToMethodMap) +{ + var Class = this[className]; + + var methodNames = ClassToMethodMap[className]; + for (var i = 0, sz = methodNames.length; i < sz; i++) + { + var method = methodNames[i]; + testMethod(Class, className, method); + } +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/enumerate-undefined.js b/source/spidermonkey-tests/ecma_5/misc/enumerate-undefined.js new file mode 100644 index 00000000..17bc1c4c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/enumerate-undefined.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 547087; +var summary = 'JS_EnumerateStandardClasses uses wrong attributes for undefined'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +for (var p in this); + +assertEq(Object.getOwnPropertyDescriptor(this, "undefined").writable, false); + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/error-undefined-message.js b/source/spidermonkey-tests/ecma_5/misc/error-undefined-message.js new file mode 100644 index 00000000..8a9202b8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/error-undefined-message.js @@ -0,0 +1,7 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +assertEq(new Error().hasOwnProperty('message'), false); +assertEq(new Error(undefined).hasOwnProperty('message'), false); + +reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_5/misc/explicit-undefined-optional-argument.js b/source/spidermonkey-tests/ecma_5/misc/explicit-undefined-optional-argument.js new file mode 100644 index 00000000..f861ccfd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/explicit-undefined-optional-argument.js @@ -0,0 +1,34 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +var BUGNUMBER = 373118; +var summary = + 'Properly handle explicitly-undefined optional arguments to a bunch of ' + + 'functions'; + +print(BUGNUMBER + ": " + summary); + +//----------------------------------------------------------------------------- + +var a; + +a = "abc".slice(0, undefined); +assertEq(a, "abc"); + +a = "abc".substr(0, undefined); +assertEq(a, "abc"); + +a = "abc".substring(0, undefined); +assertEq(a, "abc"); + +a = [1, 2, 3].slice(0, undefined); +assertEq(a.join(), '1,2,3'); + +a = [1, 2, 3].sort(undefined); +assertEq(a.join(), '1,2,3'); + +assertEq((20).toString(undefined), '20'); + +//----------------------------------------------------------------------------- + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/misc/function-definition-eval.js b/source/spidermonkey-tests/ecma_5/misc/function-definition-eval.js new file mode 100644 index 00000000..1f7fdd39 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/function-definition-eval.js @@ -0,0 +1,343 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 577325; +var summary = 'Implement the ES5 algorithm for processing function statements'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var outer, desc; + +/////////////////////////////////////////////////// +// Function definitions over accessor properties // +/////////////////////////////////////////////////// + +var getCalled, setCalled; + +// configurable properties get blown away + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc1", + { + get: function() { getCalled = true; throw "FAIL get 1"; }, + set: function(v) { setCalled = true; throw "FAIL set 1 " + v; }, + configurable: true, + enumerable: false + }); + +// does not throw +outer = undefined; +eval("function acc1() { throw 'FAIL redefined 1'; } outer = acc1;"); +assertEq(getCalled, false); +assertEq(setCalled, false); +assertEq(typeof acc1, "function"); +assertEq(acc1, outer); +desc = Object.getOwnPropertyDescriptor(this, "acc1"); +assertEq(desc.value, acc1); +assertEq(desc.writable, true); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, true); + + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc2", + { + get: function() { getCalled = true; throw "FAIL get 2"; }, + set: function(v) { setCalled = true; throw "FAIL set 2 " + v; }, + configurable: true, + enumerable: true + }); + +// does not throw +outer = undefined; +eval("function acc2() { throw 'FAIL redefined 2'; } outer = acc2;"); +assertEq(getCalled, false); +assertEq(setCalled, false); +assertEq(typeof acc2, "function"); +assertEq(acc2, outer); +desc = Object.getOwnPropertyDescriptor(this, "acc2"); +assertEq(desc.value, acc2); +assertEq(desc.writable, true); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, true); + + +// non-configurable properties produce a TypeError + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc3", + { + get: function() { getCalled = true; throw "FAIL get 3"; }, + set: function(v) { setCalled = true; throw "FAIL set 3 " + v; }, + configurable: false, + enumerable: true + }); + +outer = undefined; +try +{ + eval("function acc3() { throw 'FAIL redefined 3'; }; outer = acc3"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, enumerable accessor"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, enumerable accessor, must throw a TypeError " + + "per ES5+errata: " + e); + desc = Object.getOwnPropertyDescriptor(this, "acc3"); + assertEq(typeof desc.get, "function"); + assertEq(typeof desc.set, "function"); + assertEq(desc.enumerable, true); + assertEq(desc.configurable, false); + assertEq(outer, undefined); + assertEq(getCalled, false); + assertEq(setCalled, false); +} + + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc4", + { + get: function() { getCalled = true; throw "FAIL get 4"; }, + set: function(v) { setCalled = true; throw "FAIL set 4 " + v; }, + configurable: false, + enumerable: false + }); + +outer = undefined; +try +{ + eval("function acc4() { throw 'FAIL redefined 4'; }; outer = acc4"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable accessor"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable accessor, must throw a " + + "TypeError per ES5+errata: " + e); + desc = Object.getOwnPropertyDescriptor(this, "acc4"); + assertEq(typeof desc.get, "function"); + assertEq(typeof desc.set, "function"); + assertEq(desc.enumerable, false); + assertEq(desc.configurable, false); + assertEq(outer, undefined); + assertEq(getCalled, false); + assertEq(setCalled, false); +} + + +/////////////////////////////////////////////// +// Function definitions over data properties // +/////////////////////////////////////////////// + + +// configurable properties, regardless of other attributes, get blown away + +Object.defineProperty(this, "data1", + { + configurable: true, + enumerable: true, + writable: true, + value: "data1" + }); + +outer = undefined; +eval("function data1() { return 'data1 function'; } outer = data1;"); +assertEq(typeof data1, "function"); +assertEq(data1, outer); +desc = Object.getOwnPropertyDescriptor(this, "data1"); +assertEq(desc.configurable, true); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data1); + + +Object.defineProperty(this, "data2", + { + configurable: true, + enumerable: true, + writable: false, + value: "data2" + }); + +outer = undefined; +eval("function data2() { return 'data2 function'; } outer = data2;"); +assertEq(typeof data2, "function"); +assertEq(data2, outer); +desc = Object.getOwnPropertyDescriptor(this, "data2"); +assertEq(desc.configurable, true); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data2); + + +Object.defineProperty(this, "data3", + { + configurable: true, + enumerable: false, + writable: true, + value: "data3" + }); + +outer = undefined; +eval("function data3() { return 'data3 function'; } outer = data3;"); +assertEq(typeof data3, "function"); +assertEq(data3, outer); +desc = Object.getOwnPropertyDescriptor(this, "data3"); +assertEq(desc.configurable, true); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data3); + + +Object.defineProperty(this, "data4", + { + configurable: true, + enumerable: false, + writable: false, + value: "data4" + }); + +outer = undefined; +eval("function data4() { return 'data4 function'; } outer = data4;"); +assertEq(typeof data4, "function"); +assertEq(data4, outer); +desc = Object.getOwnPropertyDescriptor(this, "data4"); +assertEq(desc.value, data4); +assertEq(desc.writable, true); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, true); + + +// non-configurable data properties are trickier + +Object.defineProperty(this, "data5", + { + configurable: false, + enumerable: true, + writable: true, + value: "data5" + }); + +outer = undefined; +eval("function data5() { return 'data5 function'; } outer = data5;"); +assertEq(typeof data5, "function"); +assertEq(data5, outer); +desc = Object.getOwnPropertyDescriptor(this, "data5"); +assertEq(desc.configurable, false); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data5); + + +Object.defineProperty(this, "data6", + { + configurable: false, + enumerable: true, + writable: false, + value: "data6" + }); + +outer = undefined; +try +{ + eval("function data6() { return 'data6 function'; } outer = data6;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, enumerable, non-writable accessor"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, enumerable, non-writable data property, must " + + "throw a TypeError per ES5+errata: " + e); + assertEq(data6, "data6"); + assertEq(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data6"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, true); + assertEq(desc.writable, false); + assertEq(desc.value, "data6"); +} + + +Object.defineProperty(this, "data7", + { + configurable: false, + enumerable: false, + writable: true, + value: "data7" + }); + +outer = undefined; +try +{ + eval("function data7() { return 'data7 function'; } outer = data7;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable, writable data" + + "property"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable, writable data property, must " + + "throw a TypeError per ES5+errata: " + e); + assertEq(data7, "data7"); + assertEq(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data7"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, false); + assertEq(desc.writable, true); + assertEq(desc.value, "data7"); +} + + +Object.defineProperty(this, "data8", + { + configurable: false, + enumerable: false, + writable: false, + value: "data8" + }); + +outer = undefined; +try +{ + eval("function data8() { return 'data8 function'; } outer = data8;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable, non-writable data" + + "property"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable, non-writable data property, " + + "must throw a TypeError per ES5+errata: " + e); + assertEq(data8, "data8"); + assertEq(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data8"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, false); + assertEq(desc.writable, false); + assertEq(desc.value, "data8"); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/function-definition-evaluate.js b/source/spidermonkey-tests/ecma_5/misc/function-definition-evaluate.js new file mode 100644 index 00000000..4ed156b2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/function-definition-evaluate.js @@ -0,0 +1,344 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs evaluate() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 577325; +var summary = 'Implement the ES5 algorithm for processing function statements'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var outer, desc; + +/////////////////////////////////////////////////// +// Function definitions over accessor properties // +/////////////////////////////////////////////////// + +var getCalled, setCalled; + +// configurable properties get blown away + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc1", + { + get: function() { getCalled = true; throw "FAIL get 1"; }, + set: function(v) { setCalled = true; throw "FAIL set 1 " + v; }, + configurable: true, + enumerable: false + }); + +// does not throw +outer = undefined; +evaluate("function acc1() { throw 'FAIL redefined 1'; } outer = acc1;"); +assertEq(getCalled, false); +assertEq(setCalled, false); +assertEq(typeof acc1, "function"); +assertEq(acc1, outer); +desc = Object.getOwnPropertyDescriptor(this, "acc1"); +assertEq(desc.value, acc1); +assertEq(desc.writable, true); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, false); + + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc2", + { + get: function() { getCalled = true; throw "FAIL get 2"; }, + set: function(v) { setCalled = true; throw "FAIL set 2 " + v; }, + configurable: true, + enumerable: true + }); + +// does not throw +outer = undefined; +evaluate("function acc2() { throw 'FAIL redefined 2'; } outer = acc2;"); +assertEq(getCalled, false); +assertEq(setCalled, false); +assertEq(typeof acc2, "function"); +assertEq(acc2, outer); +desc = Object.getOwnPropertyDescriptor(this, "acc2"); +assertEq(desc.value, acc2); +assertEq(desc.writable, true); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, false); + + +// non-configurable properties produce a TypeError + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc3", + { + get: function() { getCalled = true; throw "FAIL get 3"; }, + set: function(v) { setCalled = true; throw "FAIL set 3 " + v; }, + configurable: false, + enumerable: true + }); + +outer = undefined; +try +{ + evaluate("function acc3() { throw 'FAIL redefined 3'; }; outer = acc3"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, enumerable accessor"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, enumerable accessor, must throw a TypeError " + + "per ES5+errata: " + e); + desc = Object.getOwnPropertyDescriptor(this, "acc3"); + assertEq(typeof desc.get, "function"); + assertEq(typeof desc.set, "function"); + assertEq(desc.enumerable, true); + assertEq(desc.configurable, false); + assertEq(outer, undefined); + assertEq(getCalled, false); + assertEq(setCalled, false); +} + + +getCalled = false, setCalled = false; +Object.defineProperty(this, "acc4", + { + get: function() { getCalled = true; throw "FAIL get 4"; }, + set: function(v) { setCalled = true; throw "FAIL set 4 " + v; }, + configurable: false, + enumerable: false + }); + +outer = undefined; +try +{ + evaluate("function acc4() { throw 'FAIL redefined 4'; }; outer = acc4"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable accessor"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable accessor, must throw a " + + "TypeError per ES5+errata: " + e); + desc = Object.getOwnPropertyDescriptor(this, "acc4"); + assertEq(typeof desc.get, "function"); + assertEq(typeof desc.set, "function"); + assertEq(desc.enumerable, false); + assertEq(desc.configurable, false); + assertEq(outer, undefined); + assertEq(getCalled, false); + assertEq(setCalled, false); +} + + +/////////////////////////////////////////////// +// Function definitions over data properties // +/////////////////////////////////////////////// + + +// configurable properties, regardless of other attributes, get blown away + +Object.defineProperty(this, "data1", + { + configurable: true, + enumerable: true, + writable: true, + value: "data1" + }); + +outer = undefined; +evaluate("function data1() { return 'data1 function'; } outer = data1;"); +assertEq(typeof data1, "function"); +assertEq(data1, outer); +desc = Object.getOwnPropertyDescriptor(this, "data1"); +assertEq(desc.configurable, false); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data1); + + +Object.defineProperty(this, "data2", + { + configurable: true, + enumerable: true, + writable: false, + value: "data2" + }); + +outer = undefined; +evaluate("function data2() { return 'data2 function'; } outer = data2;"); +assertEq(typeof data2, "function"); +assertEq(data2, outer); +desc = Object.getOwnPropertyDescriptor(this, "data2"); +assertEq(desc.configurable, false); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data2); + + +Object.defineProperty(this, "data3", + { + configurable: true, + enumerable: false, + writable: true, + value: "data3" + }); + +outer = undefined; +evaluate("function data3() { return 'data3 function'; } outer = data3;"); +assertEq(typeof data3, "function"); +assertEq(data3, outer); +desc = Object.getOwnPropertyDescriptor(this, "data3"); +assertEq(desc.configurable, false); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data3); + + +Object.defineProperty(this, "data4", + { + configurable: true, + enumerable: false, + writable: false, + value: "data4" + }); + +outer = undefined; +evaluate("function data4() { return 'data4 function'; } outer = data4;"); +assertEq(typeof data4, "function"); +assertEq(data4, outer); +desc = Object.getOwnPropertyDescriptor(this, "data4"); +assertEq(desc.value, data4); +assertEq(desc.writable, true); +assertEq(desc.enumerable, true); +assertEq(desc.configurable, false); + + +// non-configurable data properties are trickier + +Object.defineProperty(this, "data5", + { + configurable: false, + enumerable: true, + writable: true, + value: "data5" + }); + +outer = undefined; +evaluate("function data5() { return 'data5 function'; } outer = data5;"); +assertEq(typeof data5, "function"); +assertEq(data5, outer); +desc = Object.getOwnPropertyDescriptor(this, "data5"); +assertEq(desc.configurable, false); +assertEq(desc.enumerable, true); +assertEq(desc.writable, true); +assertEq(desc.value, data5); + + +Object.defineProperty(this, "data6", + { + configurable: false, + enumerable: true, + writable: false, + value: "data6" + }); + +outer = undefined; +try +{ + evaluate("function data6() { return 'data6 function'; } outer = data6;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, enumerable, non-writable accessor"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, enumerable, non-writable data property, must " + + "throw a TypeError per ES5+errata: " + e); + assertEq(data6, "data6"); + assertEq(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data6"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, true); + assertEq(desc.writable, false); + assertEq(desc.value, "data6"); +} + + +Object.defineProperty(this, "data7", + { + configurable: false, + enumerable: false, + writable: true, + value: "data7" + }); + +outer = undefined; +try +{ + evaluate("function data7() { return 'data7 function'; } outer = data7;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable, writable data" + + "property"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable, writable data property, must " + + "throw a TypeError per ES5+errata: " + e); + assertEq(data7, "data7"); + assertEq(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data7"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, false); + assertEq(desc.writable, true); + assertEq(desc.value, "data7"); +} + + +Object.defineProperty(this, "data8", + { + configurable: false, + enumerable: false, + writable: false, + value: "data8" + }); + +outer = undefined; +try +{ + evaluate("function data8() { return 'data8 function'; } outer = data8;"); + throw new Error("should have thrown trying to redefine global function " + + "over a non-configurable, non-enumerable, non-writable data" + + "property"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "global function definition, when that function would overwrite " + + "a non-configurable, non-enumerable, non-writable data property, " + + "must throw a TypeError per ES5+errata: " + e); + assertEq(data8, "data8"); + assertEq(outer, undefined); + desc = Object.getOwnPropertyDescriptor(this, "data8"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, false); + assertEq(desc.writable, false); + assertEq(desc.value, "data8"); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/future-reserved-words.js b/source/spidermonkey-tests/ecma_5/misc/future-reserved-words.js new file mode 100644 index 00000000..b4a41a2b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/future-reserved-words.js @@ -0,0 +1,463 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 497869; +var summary = "Implement FutureReservedWords per-spec"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var futureReservedWords = + [ + "class", + // "const", // Mozilla extension enabled even for versionless code + "enum", + "export", + "extends", + "import", + "super", + ]; + +var strictFutureReservedWords = + [ + "implements", + "interface", + "let", // enabled: this file doesn't execute as JS1.7 + "package", + "private", + "protected", + "public", + "static", + "yield", // enabled: this file doesn't execute as JS1.7 + ]; + +function testWord(word, expectNormal, expectStrict) +{ + var actual, status; + + // USE AS LHS FOR ASSIGNMENT + + actual = ""; + status = summary + ": " + word + ": normal assignment"; + try + { + eval(word + " = 'foo';"); + actual = "no error"; + } + catch(e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict assignment"; + try + { + eval("'use strict'; " + word + " = 'foo';"); + actual = "no error"; + } + catch(e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE IN VARIABLE DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal var"; + try + { + eval("var " + word + ";"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict var"; + try + { + eval("'use strict'; var " + word + ";"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE IN FOR-IN VARIABLE DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal for-in var"; + try + { + eval("for (var " + word + " in {});"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict for-in var"; + try + { + eval("'use strict'; for (var " + word + " in {});"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS CATCH IDENTIFIER + + actual = ""; + status = summary + ": " + word + ": normal var"; + try + { + eval("try { } catch (" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict var"; + try + { + eval("'use strict'; try { } catch (" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS LABEL + + actual = ""; + status = summary + ": " + word + ": normal label"; + try + { + eval(word + ": while (false);"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict label"; + try + { + eval("'use strict'; " + word + ": while (false);"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS ARGUMENT NAME IN FUNCTION DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal function argument"; + try + { + eval("function foo(" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict function argument"; + try + { + eval("'use strict'; function foo(" + word + ") { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + actual = ""; + status = summary + ": " + word + ": function argument retroactively strict"; + try + { + eval("function foo(" + word + ") { 'use strict'; }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS ARGUMENT NAME IN FUNCTION EXPRESSION + + actual = ""; + status = summary + ": " + word + ": normal function expression argument"; + try + { + eval("var s = (function foo(" + word + ") { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict function expression argument"; + try + { + eval("'use strict'; var s = (function foo(" + word + ") { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + actual = ""; + status = summary + ": " + word + ": function expression argument retroactively strict"; + try + { + eval("var s = (function foo(" + word + ") { 'use strict'; });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS ARGUMENT NAME WITH FUNCTION CONSTRUCTOR + + actual = ""; + status = summary + ": " + word + ": argument with normal Function"; + try + { + Function(word, "return 17"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": argument with strict Function"; + try + { + Function(word, "'use strict'; return 17"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS ARGUMENT NAME IN PROPERTY SETTER + + actual = ""; + status = summary + ": " + word + ": normal property setter argument"; + try + { + eval("var o = { set x(" + word + ") { } };"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict property setter argument"; + try + { + eval("'use strict'; var o = { set x(" + word + ") { } };"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + actual = ""; + status = summary + ": " + word + ": property setter argument retroactively strict"; + try + { + eval("var o = { set x(" + word + ") { 'use strict'; } };"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS FUNCTION NAME IN FUNCTION DECLARATION + + actual = ""; + status = summary + ": " + word + ": normal function name"; + try + { + eval("function " + word + "() { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict function name"; + try + { + eval("'use strict'; function " + word + "() { }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + actual = ""; + status = summary + ": " + word + ": function name retroactively strict"; + try + { + eval("function " + word + "() { 'use strict'; }"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + // USE AS FUNCTION NAME IN FUNCTION EXPRESSION + + actual = ""; + status = summary + ": " + word + ": normal function expression name"; + try + { + eval("var s = (function " + word + "() { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectNormal, actual, status); + + actual = ""; + status = summary + ": " + word + ": strict function expression name"; + try + { + eval("'use strict'; var s = (function " + word + "() { });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); + + actual = ""; + status = summary + ": " + word + ": function expression name retroactively strict"; + try + { + eval("var s = (function " + word + "() { 'use strict'; });"); + actual = "no error"; + } + catch (e) + { + actual = e.name; + status += ", " + e.name + ": " + e.message + " "; + } + reportCompare(expectStrict, actual, status); +} + +function testFutureReservedWord(word) +{ + testWord(word, "SyntaxError", "SyntaxError"); +} + +function testStrictFutureReservedWord(word) +{ + testWord(word, "no error", "SyntaxError"); +} + +futureReservedWords.forEach(testFutureReservedWord); +strictFutureReservedWords.forEach(testStrictFutureReservedWord); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/global-numeric-properties.js b/source/spidermonkey-tests/ecma_5/misc/global-numeric-properties.js new file mode 100644 index 00000000..352c0d3b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/global-numeric-properties.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 537863; +var summary = + 'undefined, Infinity, and NaN global properties should not be writable'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var desc, old, error; +var global = this; + +var names = ["NaN", "Infinity", "undefined"]; + +for (var i = 0; i < names.length; i++) +{ + var name = names[i]; + desc = Object.getOwnPropertyDescriptor(global, name); + assertEq(desc !== undefined, true, name + " should be present"); + assertEq(desc.enumerable, false, name + " should not be enumerable"); + assertEq(desc.configurable, false, name + " should not be configurable"); + assertEq(desc.writable, false, name + " should not be writable"); + + old = global[name]; + global[name] = 17; + assertEq(global[name], old, name + " changed on setting?"); + + error = "before"; + try + { + throw new TypeError("SpiderMonkey doesn't currently implement " + + "strict-mode throwing when setting a readonly " + + "property, not running this bit of test for now; " + + "see bug 537873"); + + (function() { "use strict"; global[name] = 42; error = "didn't throw"; })(); + } + catch (e) + { + if (e instanceof TypeError) + error = "typeerror"; + else + error = "bad exception: " + e; + } + assertEq(error, "typeerror", "wrong strict mode error setting " + name); +} + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/line-paragraph-separator-parse-as-lineterminator.js b/source/spidermonkey-tests/ecma_5/misc/line-paragraph-separator-parse-as-lineterminator.js new file mode 100644 index 00000000..8eef6d65 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/line-paragraph-separator-parse-as-lineterminator.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 663331; +var summary = + "U+2028 LINE SEPARATOR and U+2029 PARAGRAPH SEPARATOR must match the " + + "LineTerminator production when parsing code"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var hidden = 17; +var assigned; + +assigned = 42; +assertEq(eval('"use strict"; var hidden\u2028assigned = 5; typeof hidden'), + "undefined"); +assertEq(assigned, 5); + +assigned = 42; +function t1() +{ + assertEq(eval('var hidden\u2028assigned = 5; typeof hidden'), "undefined"); + assertEq(assigned, 5); +} +t1(); + +assigned = 42; +assertEq(eval('"use strict"; var hidden\u2029assigned = 5; typeof hidden'), + "undefined"); +assertEq(assigned, 5); + +assigned = 42; +function t2() +{ + assertEq(eval('var hidden\u2029assigned = 5; typeof hidden'), "undefined"); + assertEq(assigned, 5); +} +t2(); + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/new-with-non-constructor.js b/source/spidermonkey-tests/ecma_5/misc/new-with-non-constructor.js new file mode 100644 index 00000000..5935c942 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/new-with-non-constructor.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function checkConstruct(thing, buggy) { + try { + new thing(); + assertEq(0, 1, "not reached " + thing); + } catch (e) { + if (buggy) + assertEq(String(e.message).indexOf("is not a constructor") === -1, false); + else + assertEq(String(e.message).indexOf("thing is not a constructor") === -1, false); + } +} + +var re = /aaa/ +checkConstruct(re, false); + +var boundFunctionPrototype = Function.prototype.bind(); +checkConstruct(boundFunctionPrototype, true); + +var boundBuiltin = Math.sin.bind(); +checkConstruct(boundBuiltin, true); + +/* We set the proxies construct trap to undefined, + * so the call trap is used as constructor. + */ + +var proxiedFunctionPrototype = Proxy.create({}, Function.prototype, undefined); +checkConstruct(proxiedFunctionPrototype, false); + +var proxiedBuiltin = Proxy.create({}, parseInt, undefined); +checkConstruct(proxiedBuiltin, false); + + +if (typeof reportCompare == 'function') + reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_5/misc/redeclare-var-non-writable-property.js b/source/spidermonkey-tests/ecma_5/misc/redeclare-var-non-writable-property.js new file mode 100644 index 00000000..f21289d8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/redeclare-var-non-writable-property.js @@ -0,0 +1,24 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 539488; +var summary = + '|var| statements for existing, read-only/permanent properties should not ' + + 'be errors'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var undefined; + +/******************************************************************************/ + +reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/regexp-functions-with-undefined.js b/source/spidermonkey-tests/ecma_5/misc/regexp-functions-with-undefined.js new file mode 100644 index 00000000..e55b2acd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/regexp-functions-with-undefined.js @@ -0,0 +1,43 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var a = /undefined/.exec(); +assertEq(a[0], 'undefined'); +assertEq(a.length, 1); + +a = /undefined/.exec(undefined); +assertEq(a[0], 'undefined'); +assertEq(a.length, 1); + +assertEq(/undefined/.test(), true); +assertEq(/undefined/.test(undefined), true); + +assertEq(/aaaa/.exec(), null); +assertEq(/aaaa/.exec(undefined), null); + +assertEq(/aaaa/.test(), false); +assertEq(/aaaa/.test(undefined), false); + + +assertEq("undefined".search(), 0); +assertEq("undefined".search(undefined), 0); +assertEq("aaaa".search(), 0); +assertEq("aaaa".search(undefined), 0); + +a = "undefined".match(); +assertEq(a[0], ""); +assertEq(a.length, 1); +a = "undefined".match(undefined); +assertEq(a[0], ""); +assertEq(a.length, 1); +a = "aaaa".match(); +assertEq(a[0], ""); +assertEq(a.length, 1); +a = "aaaa".match(undefined); +assertEq(a[0], ""); +assertEq(a.length, 1); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/misc/regress-bug632003.js b/source/spidermonkey-tests/ecma_5/misc/regress-bug632003.js new file mode 100644 index 00000000..c299f6dc --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/regress-bug632003.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + */ +var BUGNUMBER = 632003; +var summary = 'The var statement should add the property to the global if it exists on the prototype'; + +// Define properties on Object.prototype with various attributes and +// value-getter-setter combinations then check that a var statement +// can always define a variable with the same name in the global object. + +if (typeof evaluate != "undefined") { + var global_case = def_all("global_case"); + evaluate(global_case.source); + check_values(this, global_case.var_list); +} + +var eval_case = def_all("eval_case"); +eval(eval_case.source); +check_values(this, eval_case.var_list); + +function def_all(prefix) +{ + var builder, index, i, j; + + builder = {source: "", var_list: []}; + index = 0; + for (i = 0; i <= 1; ++i) { + for (j = 0; j <= 1; ++j) { + def({value: index}); + def({value: index, writable: true}); + def({get: Function("return "+index+";")}); + def({set: function() { }}); + def({get: Function("return "+index+";"), set: function() { }}); + } + } + return builder; + + function def(descriptor_seed) + { + var var_name = prefix + index; + descriptor_seed.configurable = !!i; + descriptor_seed.enumerable = !!j; + Object.defineProperty(Object.prototype, var_name, descriptor_seed); + var var_value = index + 0.5; + builder.source += "var "+var_name+" = "+var_value+";\n"; + builder.var_list.push({name: var_name, expected_value: var_value}); + ++index; + } +} + +function check_values(obj, var_list) +{ + for (i = 0; i != var_list.length; ++i) { + var name = var_list[i].name; + assertEq(obj.hasOwnProperty(name), true); + assertEq(obj[name], var_list[i].expected_value); + } +} + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/misc/shell.js b/source/spidermonkey-tests/ecma_5/misc/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/misc/syntax-error-end-of-for-head-part.js b/source/spidermonkey-tests/ecma_5/misc/syntax-error-end-of-for-head-part.js new file mode 100644 index 00000000..f715b3e1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/syntax-error-end-of-for-head-part.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 672854; +var summary = + "Syntax errors at the end of |for| statement header parts shouldn't cause " + + "crashes"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function checkSyntaxError(str) +{ + try + { + var f = Function("for(w in\\"); + throw new Error("didn't throw, returned " + f); + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "expected SyntaxError, got " + e); + } +} + +checkSyntaxError("for(var w in \\"); +checkSyntaxError("for(w in \\"); +checkSyntaxError("for(var w\\"); +checkSyntaxError("for(w\\"); +checkSyntaxError("for(var w;\\"); +checkSyntaxError("for(w;\\"); +checkSyntaxError("for(var w; w >\\"); +checkSyntaxError("for(w; w >\\"); +checkSyntaxError("for(var w; w > 3;\\"); +checkSyntaxError("for(w; w > 3;\\"); +checkSyntaxError("for(var w; w > 3; 5\\"); +checkSyntaxError("for(w; w > 3; 5\\"); +checkSyntaxError("for(var w; w > 3; 5foo"); +checkSyntaxError("for(w; w > 3; 5foo"); + +/******************************************************************************/ + +reportCompare(true, true); + +print("Tests complete!"); diff --git a/source/spidermonkey-tests/ecma_5/misc/unicode-escaped-keyword.js b/source/spidermonkey-tests/ecma_5/misc/unicode-escaped-keyword.js new file mode 100644 index 00000000..e17df168 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/unicode-escaped-keyword.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function throws(code) { + var type; + try { + eval(code); + } catch (ex) { + type = ex.name; + } + assertEq(type, 'SyntaxError'); +} + +var s = '\\u0073'; +throws('var thi' + s); +throws('switch (' + s + 'witch) {}') +throws('var ' + s + 'witch'); + +if (typeof reportCompare == 'function') + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/misc/unicode-identifier-1d17.js b/source/spidermonkey-tests/ecma_5/misc/unicode-identifier-1d17.js new file mode 100644 index 00000000..ae763fdf --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/unicode-identifier-1d17.js @@ -0,0 +1,16 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var o = {} +try { + eval('o.\\u1d17 = 42;'); +} +catch (e) { + assertEq('should not fail', true); +} +assertEq(o['\u1d17'], 42); + +if (typeof reportCompare == 'function') + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/misc/unicode-identifier-82f1.js b/source/spidermonkey-tests/ecma_5/misc/unicode-identifier-82f1.js new file mode 100644 index 00000000..313832cc --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/unicode-identifier-82f1.js @@ -0,0 +1,16 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var o = {} +try { + eval('o.\\u82f1 = 42;'); +} +catch (e) { + assertEq('should not fail', true); +} +assertEq(o['\u82f1'], 42); + +if (typeof reportCompare == 'function') + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/misc/unnamed-function.js b/source/spidermonkey-tests/ecma_5/misc/unnamed-function.js new file mode 100644 index 00000000..d004149c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/unnamed-function.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 376052; +var summary = 'Unnamed function expressions are forbidden in statement context'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval('(function () {1;})'); + reportCompare(true, true, + "unnamed function expression not in statement context works"); + } + catch(ex) + { + reportCompare(true, false, "threw exception: " + ex); + } + + try + { + eval('function () {1;}'); + reportCompare(true, false, "didn't throw an exception"); + } + catch(ex) + { + reportCompare(ex instanceof SyntaxError, true, + "unnamed function expression not in statement context " + + "should have been a SyntaxError"); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_5/misc/unwrapped-no-such-method.js b/source/spidermonkey-tests/ecma_5/misc/unwrapped-no-such-method.js new file mode 100644 index 00000000..d17406e7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/misc/unwrapped-no-such-method.js @@ -0,0 +1,13 @@ +// Our __noSuchMethod__ handling should only be called when |this| is an object. + +var x = ""; +// Reached from interpreter's JSOP_CALLPROP, and js::mjit::ic::CallProp. +try { x.i(); } catch (ex) { } + +// Reached from interpreter's JSOP_CALLELEM, and js::mjit::stubs::CallElem. +try { x[x](); } catch (ex) { } + +// Reached from js::mjit::stubs::CallProp: +try { true.i(); } catch(ex) { } + +reportCompare(true,true); diff --git a/source/spidermonkey-tests/ecma_5/shell.js b/source/spidermonkey-tests/ecma_5/shell.js new file mode 100644 index 00000000..2d5ccea3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/shell.js @@ -0,0 +1,154 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + + +/* + * Return true if both of these return true: + * - LENIENT_PRED applied to CODE + * - STRICT_PRED applied to CODE with a use strict directive added to the front + * + * Run STRICT_PRED first, for testing code that affects the global environment + * in loose mode, but fails in strict mode. + */ +function testLenientAndStrict(code, lenient_pred, strict_pred) { + return (strict_pred("'use strict'; " + code) && + lenient_pred(code)); +} + +/* + * completesNormally(CODE) returns true if evaluating CODE (as eval + * code) completes normally (rather than throwing an exception). + */ +function completesNormally(code) { + try { + eval(code); + return true; + } catch (exception) { + return false; + } +} + +/* + * returns(VALUE)(CODE) returns true if evaluating CODE (as eval code) + * completes normally (rather than throwing an exception), yielding a value + * strictly equal to VALUE. + */ +function returns(value) { + return function(code) { + try { + return eval(code) === value; + } catch (exception) { + return false; + } + } +} + +/* + * returnsCopyOf(VALUE)(CODE) returns true if evaluating CODE (as eval code) + * completes normally (rather than throwing an exception), yielding a value + * that is deepEqual to VALUE. + */ +function returnsCopyOf(value) { + return function(code) { + try { + return deepEqual(eval(code), value); + } catch (exception) { + return false; + } + } +} + +/* + * raisesException(EXCEPTION)(CODE) returns true if evaluating CODE (as + * eval code) throws an exception object that is an instance of EXCEPTION, + * and returns false if it throws any other error or evaluates + * successfully. For example: raises(TypeError)("0()") == true. + */ +function raisesException(exception) { + return function (code) { + try { + eval(code); + return false; + } catch (actual) { + return actual instanceof exception; + } + }; +}; + +/* + * parsesSuccessfully(CODE) returns true if CODE parses as function + * code without an error. + */ +function parsesSuccessfully(code) { + try { + Function(code); + return true; + } catch (exception) { + return false; + } +}; + +/* + * parseRaisesException(EXCEPTION)(CODE) returns true if parsing CODE + * as function code raises EXCEPTION. + */ +function parseRaisesException(exception) { + return function (code) { + try { + Function(code); + return false; + } catch (actual) { + return actual instanceof exception; + } + }; +}; + +/* + * Return the result of applying uneval to VAL, and replacing all runs + * of whitespace with a single horizontal space (poor man's + * tokenization). + */ +function clean_uneval(val) { + return uneval(val).replace(/\s+/g, ' '); +} + +/* + * Return true if A is equal to B, where equality on arrays and objects + * means that they have the same set of enumerable properties, the values + * of each property are deep_equal, and their 'length' properties are + * equal. Equality on other types is ==. + */ +function deepEqual(a, b) { + if (typeof a != typeof b) + return false; + + if (typeof a == 'object') { + var props = {}; + // For every property of a, does b have that property with an equal value? + for (var prop in a) { + if (!deepEqual(a[prop], b[prop])) + return false; + props[prop] = true; + } + // Are all of b's properties present on a? + for (var prop in b) + if (!props[prop]) + return false; + // length isn't enumerable, but we want to check it, too. + return a.length == b.length; + } + + if (a === b) { + // Distinguish 0 from -0, even though they are ===. + return a !== 0 || 1/a === 1/b; + } + + // Treat NaNs as equal, even though NaN !== NaN. + // NaNs are the only non-reflexive values, i.e., if a !== a, then a is a NaN. + // isNaN is broken: it converts its argument to number, so isNaN("foo") => true + return a !== a && b !== b; +} diff --git a/source/spidermonkey-tests/ecma_5/strict/10.4.2.js b/source/spidermonkey-tests/ecma_5/strict/10.4.2.js new file mode 100644 index 00000000..b68578d6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/10.4.2.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Direct calls to eval should inherit the strictness of the calling code. */ +assertEq(testLenientAndStrict("eval('010')", + completesNormally, + raisesException(SyntaxError)), + true); + +/* + * Directives in the eval code itself should always override a direct + * caller's strictness. + */ +assertEq(testLenientAndStrict("eval('\"use strict\"; 010')", + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); + +/* Code passed to indirect calls to eval should never be strict. */ +assertEq(testLenientAndStrict("var evil=eval; evil('010')", + completesNormally, + completesNormally), + true); + +/* + * Code passed to the Function constructor never inherits the caller's + * strictness. + */ +assertEq(completesNormally("Function('010')"), + true); +assertEq(raisesException(SyntaxError)("Function('\"use strict\"; 010')"), + true); + +/* + * If 'eval' causes a frame's primitive |this| to become wrapped, the frame should see the same + * wrapper object as the eval code. + */ +var call_this, eval_this; +function f(code) { + /* + * At this point, a primitive |this| has not yet been wrapped. A + * reference to |this| from the eval call should wrap it, and the wrapper + * should be stored where the call frame can see it. + */ + eval(code); + call_this = this; +} +f.call(true, 'eval_this = this'); +assertEq(call_this, eval_this); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/10.4.3.js b/source/spidermonkey-tests/ecma_5/strict/10.4.3.js new file mode 100644 index 00000000..b70a6a0d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/10.4.3.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var obj = {} + +function strict() { "use strict"; return this; } +assertEq(strict.call(""), ""); +assertEq(strict.call(true), true); +assertEq(strict.call(42), 42); +assertEq(strict.call(null), null); +assertEq(strict.call(undefined), undefined); +assertEq(strict.call(obj), obj); +assertEq(new strict() instanceof Object, true); + +/* + * The compiler internally converts x['foo'] to x.foo. Writing x[s] where + * s='foo' is enough to throw it off the scent for now. + */ +var strictString = 'strict'; + +Boolean.prototype.strict = strict; +assertEq(true.strict(), true); +assertEq(true[strictString](), true); + +Number.prototype.strict = strict; +assertEq((42).strict(), 42); +assertEq(42[strictString](), 42); + +String.prototype.strict = strict; +assertEq("".strict(), ""); +assertEq(""[strictString](), ""); + +function lenient() { return this; } +assertEq(lenient.call("") instanceof String, true); +assertEq(lenient.call(true) instanceof Boolean, true); +assertEq(lenient.call(42) instanceof Number, true); +assertEq(lenient.call(null), this); +assertEq(lenient.call(undefined), this); +assertEq(lenient.call(obj), obj); +assertEq(new lenient() instanceof Object, true); + +var lenientString = 'lenient'; + +Boolean.prototype.lenient = lenient; +assertEq(true.lenient() instanceof Boolean, true); +assertEq(true[lenientString]() instanceof Boolean, true); + +Number.prototype.lenient = lenient; +assertEq(42[lenientString]() instanceof Number, true); + +String.prototype.lenient = lenient; +assertEq(""[lenientString]() instanceof String, true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/10.6.js b/source/spidermonkey-tests/ecma_5/strict/10.6.js new file mode 100644 index 00000000..3001d0dd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/10.6.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function callFunctionBody(expr) { + return ( + '(function f() {\n' + + 'Object.defineProperties(arguments, {1: { writable: false },\n' + + ' 2: { configurable: false },\n' + + ' 3: { writable: false,\n' + + ' configurable: false }});\n' + + 'return (' + expr + ');\n' + + '})(0, 1, 2, 3);'); +} + +assertEq(testLenientAndStrict(callFunctionBody('arguments[0] = 42'), + returns(42), returns(42)), + true); + +assertEq(testLenientAndStrict(callFunctionBody('delete arguments[0]'), + returns(true), returns(true)), + true); + + +assertEq(testLenientAndStrict(callFunctionBody('arguments[1] = 42'), + returns(42), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict(callFunctionBody('delete arguments[1]'), + returns(true), returns(true)), + true); + + +assertEq(testLenientAndStrict(callFunctionBody('arguments[2] = 42'), + returns(42), returns(42)), + true); + +assertEq(testLenientAndStrict(callFunctionBody('delete arguments[2]'), + returns(false), raisesException(TypeError)), + true); + + +assertEq(testLenientAndStrict(callFunctionBody('arguments[3] = 42'), + returns(42), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict(callFunctionBody('delete arguments[3]'), + returns(false), raisesException(TypeError)), + true); + + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.1.5.js b/source/spidermonkey-tests/ecma_5/strict/11.1.5.js new file mode 100644 index 00000000..7ba12fa9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.1.5.js @@ -0,0 +1,171 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Simple identifier labels. */ +assertEq(testLenientAndStrict('({x:1, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({x:1, y:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({x:1, y:1, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* Property names can be written as strings, too. */ +assertEq(testLenientAndStrict('({x:1, "x":1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({"x":1, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({"x":1, "x":1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* Numeric property names. */ +assertEq(testLenientAndStrict('({1.5:1, 1.5:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({1.5:1, 15e-1:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({6.02214179e23:1, 6.02214179e23:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({6.02214179e23:1, 3.1415926535:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({ 1: 1, "1": 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({ "1": 1, 1: 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({ 2.5: 1, "2.5": 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({ "2.5": 1, 2.5: 2 })', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* Many properties, to exercise JSAtomList's hash-table variant. */ +assertEq(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, z:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({a:1, b:1, c:1, d:1, e:1, f:1, g:1, h:1, i:1, j:1, k:1, l:1, m:1, n:1, o:1, p:1, q:1, r:1, s:1, t:1, u:1, v:1, w:1, x:1, y:1, a:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* + * Getters, setters, and value properties should conflict only when + * appropriate. + */ +assertEq(testLenientAndStrict('({get x() {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({x:1, get x() {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({set x(q) {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({x:1, set x(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({1:1, set 1(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({set 1(q) {}, 1:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({"1":1, set 1(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({set 1(q) {}, "1":1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({get x() {}, set x(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({set x(q) {}, get x() {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({get x() {}, set x(q) {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({set x(q) {}, get x() {}, x:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({get x() {}, get x() {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({set x(q) {}, set x(q) {}})', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('({get x() {}, set x(q) {}, y:1})', + parsesSuccessfully, + parsesSuccessfully), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.13.1.js b/source/spidermonkey-tests/ecma_5/strict/11.13.1.js new file mode 100644 index 00000000..d3d3e698 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.13.1.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * Simple assignment expressions in strict mode code must not be + * assignments to 'eval' or 'arguments'. + */ +assertEq(testLenientAndStrict('arguments=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('eval=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(arguments)=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(eval)=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.13.2.js b/source/spidermonkey-tests/ecma_5/strict/11.13.2.js new file mode 100644 index 00000000..678f0b61 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.13.2.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * Compound assignment expressions in strict mode code must not be + * assignments to 'eval' or 'arguments'. + */ +assertEq(testLenientAndStrict('arguments+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('eval+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(arguments)+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(eval)+=1', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.3.1.js b/source/spidermonkey-tests/ecma_5/strict/11.3.1.js new file mode 100644 index 00000000..159f7858 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.3.1.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * Postfix increment expressions must not have 'eval' or 'arguments' + * as their operands. + */ +assertEq(testLenientAndStrict('arguments++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('eval++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(arguments)++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(eval)++', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.3.2.js b/source/spidermonkey-tests/ecma_5/strict/11.3.2.js new file mode 100644 index 00000000..c8225e12 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.3.2.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * Postfix decrement expressions must not have 'eval' or 'arguments' + * as their operands. + */ +assertEq(testLenientAndStrict('arguments--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('eval--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(arguments)--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(eval)--', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.4.1.js b/source/spidermonkey-tests/ecma_5/strict/11.4.1.js new file mode 100644 index 00000000..1125962a --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.4.1.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Deleting an identifier is a syntax error in strict mode code only. */ +assertEq(testLenientAndStrict('delete x;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* + * A reference expression surrounded by parens is itself a reference + * expression. + */ +assertEq(testLenientAndStrict('delete (x);', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Deleting other sorts of expressions are not syntax errors in either mode. */ +assertEq(testLenientAndStrict('delete x.y;', + parsesSuccessfully, + parsesSuccessfully), + true); +assertEq(testLenientAndStrict('delete Object();', + returns(true), + returns(true)), + true); + +/* Functions should inherit the surrounding code's strictness. */ +assertEq(testLenientAndStrict('function f() { delete x; }', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Local directives override the surrounding code's strictness. */ +assertEq(testLenientAndStrict('function f() { "use strict"; delete x; }', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.4.4.js b/source/spidermonkey-tests/ecma_5/strict/11.4.4.js new file mode 100644 index 00000000..bd22b54f --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.4.4.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * Prefix increment expressions must not have 'eval' or 'arguments' as + * their operands. + */ +assertEq(testLenientAndStrict('++arguments', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('++eval', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('++(arguments)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('++(eval)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/11.4.5.js b/source/spidermonkey-tests/ecma_5/strict/11.4.5.js new file mode 100644 index 00000000..754b8f96 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/11.4.5.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * Prefix decrement expressions must not have 'eval' or 'arguments' as + * their operands. + */ +assertEq(testLenientAndStrict('--arguments', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('--eval', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('--(arguments)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('--(eval)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/12.10.1.js b/source/spidermonkey-tests/ecma_5/strict/12.10.1.js new file mode 100644 index 00000000..f45c77ad --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/12.10.1.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * 'with' statements are forbidden in strict top-level code. This is + * eval code, but that's close enough. + */ +assertEq(testLenientAndStrict('with (1) {}', + completesNormally, + raisesException(SyntaxError)), + true); + +/* 'with' statements are forbidden in strict function code. */ +assertEq(testLenientAndStrict('function f() { "use strict"; with (1) {} }', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * A use strict directive in a function mustn't affect the strictness + * of subsequent code. + */ +assertEq(parsesSuccessfully('function f() { "use strict"; }; with (1) {}'), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/12.14.1.js b/source/spidermonkey-tests/ecma_5/strict/12.14.1.js new file mode 100644 index 00000000..e7f9b303 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/12.14.1.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * In strict mode, the identifier bound by a 'catch' clause may not + * be 'eval' or 'arguments'. + */ +assertEq(testLenientAndStrict('try{}catch(eval){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('try{}catch([eval]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('try{}catch({x:eval}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('try{}catch(arguments){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('try{}catch([arguments]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('try{}catch({x:arguments}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/12.2.1.js b/source/spidermonkey-tests/ecma_5/strict/12.2.1.js new file mode 100644 index 00000000..ba348cf4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/12.2.1.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(testLenientAndStrict('var eval;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('var x,eval;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('var arguments;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('var x,arguments;', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/13.1.js b/source/spidermonkey-tests/ecma_5/strict/13.1.js new file mode 100644 index 00000000..c5f2acb9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/13.1.js @@ -0,0 +1,345 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * In strict mode, it is a syntax error for an identifier to appear + * more than once in a function's argument list. + */ + +/* + * The parameters of ordinary function definitions should not contain + * duplicate identifiers. + */ +assertEq(testLenientAndStrict('function f(x,y) {}', + parsesSuccessfully, + parsesSuccessfully), + true); +assertEq(testLenientAndStrict('function f(x,x) {}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f(x,y,z,y) {}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Exercise the hashed local name map case. */ +assertEq(testLenientAndStrict('function f(a,b,c,d,e,f,g,h,d) {}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* + * SpiderMonkey has always treated duplicates in destructuring + * patterns as an error. Strict mode should not affect this. + */ +assertEq(testLenientAndStrict('function f([x,y]) {}', + parsesSuccessfully, + parsesSuccessfully), + true); +assertEq(testLenientAndStrict('function f([x,x]){}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f(x,[x]){}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * Strict rules apply to the parameters if the function's body is + * strict. + */ +assertEq(testLenientAndStrict('function f(x,x) { "use strict" };', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * Calls to the function constructor should not be affected by the + * strictness of the calling code, but should be affected by the + * strictness of the function body. + */ +assertEq(testLenientAndStrict('Function("x","x","")', + completesNormally, + completesNormally), + true); +assertEq(testLenientAndStrict('Function("x","y","")', + completesNormally, + completesNormally), + true); +assertEq(testLenientAndStrict('Function("x","x","\'use strict\'")', + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('Function("x","y","\'use strict\'")', + completesNormally, + completesNormally), + true); + + +/* + * The parameter lists of function expressions should not contain + * duplicate identifiers. + */ +assertEq(testLenientAndStrict('(function (x,x) 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function (x,y) 2)', + parsesSuccessfully, + parsesSuccessfully), + true); + +/* + * All permutations of: + * - For the two magic identifiers 'arguments' or 'eval' + * - For function definitions, function expressions, expression closures, + * and getter and setter property definitions, + * - For forms that inherit their context's strictness, and forms that + * include their own strictness directives, + * - For ordinary parameters, array destructuring parameters, and + * object destructuring parameters, + * - the magic identifiers may be used to name such parameters + * in lenient code, but not in strict code + * - the magic identifiers may be used as function names in lenient code, + * but not in strict code + */ +assertEq(testLenientAndStrict('function f(eval){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f([eval]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f({x:eval}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function eval(){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f(eval){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f([eval]){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f({x:eval}){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function eval(){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f(eval){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f([eval]){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f({x:eval}){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function eval(){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f(eval){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f([eval]){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f({x:eval}){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function eval(){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f(eval) 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f([eval]) 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f({x:eval}) 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function eval() 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x(eval){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x([eval]){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x({x:eval}){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x(eval){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x([eval]){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x({x:eval}){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f(arguments){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f([arguments]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f({x:arguments}){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function arguments(){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f(arguments){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f([arguments]){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function f({x:arguments}){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('function arguments(){"use strict";}', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f(arguments){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f([arguments]){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f({x:arguments}){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function arguments(){})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f(arguments){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f([arguments]){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f({x:arguments}){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function arguments(){"use strict";})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f(arguments) 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f([arguments]) 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function f({x:arguments}) 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('(function arguments() 2)', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x(arguments){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x([arguments]){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x({x:arguments}){}})', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x(arguments){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x([arguments]){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('({set x({x:arguments}){"use strict";}})', + parseRaisesException(SyntaxError), + parseRaisesException(SyntaxError)), + true); + +/* + * Functions produced using the Function constructor may not use + * 'eval' or 'arguments' as a parameter name if their body is strict + * mode code. The strictness of the calling code does not affect the + * constraints applied to the parameters. + */ +assertEq(testLenientAndStrict('Function("eval","")', + completesNormally, + completesNormally), + true); +assertEq(testLenientAndStrict('Function("eval","\'use strict\';")', + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); +assertEq(testLenientAndStrict('Function("arguments","")', + completesNormally, + completesNormally), + true); +assertEq(testLenientAndStrict('Function("arguments","\'use strict\';")', + raisesException(SyntaxError), + raisesException(SyntaxError)), + true); + + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.10.7.js b/source/spidermonkey-tests/ecma_5/strict/15.10.7.js new file mode 100644 index 00000000..b8bab8f4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.10.7.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(testLenientAndStrict('var r = /foo/; r.source = "bar"; r.source', + returns("foo"), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('var r = /foo/; delete r.source', + returns(false), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var r = /foo/; r.global = true; r.global', + returns(false), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('var r = /foo/; delete r.global', + returns(false), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var r = /foo/; r.ignoreCase = true; r.ignoreCase', + returns(false), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('var r = /foo/; delete r.ignoreCase', + returns(false), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var r = /foo/; r.multiline = true; r.multiline', + returns(false), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('var r = /foo/; delete r.multiline', + returns(false), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var r = /foo/; r.lastIndex = 42; r.lastIndex', + returns(42), returns(42)), + true); +assertEq(testLenientAndStrict('var r = /foo/; delete r.lastIndex', + returns(false), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.3.4.5.js b/source/spidermonkey-tests/ecma_5/strict/15.3.4.5.js new file mode 100644 index 00000000..bc93bb67 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.3.4.5.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function strict() { 'use strict'; return this; } +function lenient() { return this; } +var obj = {}; + +assertEq(strict.bind(true)(), true); +assertEq(strict.bind(42)(), 42); +assertEq(strict.bind("")(), ""); +assertEq(strict.bind(null)(), null); +assertEq(strict.bind(undefined)(), undefined); +assertEq(strict.bind(obj)(), obj); + +assertEq(lenient.bind(true)() instanceof Boolean, true); +assertEq(lenient.bind(42)() instanceof Number, true); +assertEq(lenient.bind("")() instanceof String, true); +assertEq(lenient.bind(null)(), this); +assertEq(lenient.bind(undefined)(), this); +assertEq(lenient.bind(obj)(), obj); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.3.5.1.js b/source/spidermonkey-tests/ecma_5/strict/15.3.5.1.js new file mode 100644 index 00000000..612faf5e --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.3.5.1.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function fn() { + return function(a, b, c) { }; +} + +assertEq(testLenientAndStrict('var f = fn(); f.length = 1; f.length', + returns(3), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('var f = fn(); delete f.length', + returns(false), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.3.5.2.js b/source/spidermonkey-tests/ecma_5/strict/15.3.5.2.js new file mode 100644 index 00000000..3106a098 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.3.5.2.js @@ -0,0 +1,16 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function fn() { + return function(a, b, c) { }; +} + +assertEq(testLenientAndStrict('var f = fn(); delete f.prototype', + returns(false), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.4.4.12.js b/source/spidermonkey-tests/ecma_5/strict/15.4.4.12.js new file mode 100644 index 00000000..5b98c8a7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.4.4.12.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function arr() { + return Object.defineProperty([1, 2, 3], 0, {writable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = arr(); [a.splice(0, 1), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.splice.call(o, 0, 1), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 1, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 1, {configurable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = agap(); [a.splice(0, 1), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = ogap(); [Array.prototype.splice.call(o, 0, 1), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.4.4.13.js b/source/spidermonkey-tests/ecma_5/strict/15.4.4.13.js new file mode 100644 index 00000000..05d757ae --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.4.4.13.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function arr() { + return Object.defineProperty([1, 2, 3], 0, {writable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = arr(); [a.unshift(40, 50), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.unshift.call(o, 40, 50), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 3, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 3, {configurable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = agap(); [a.unshift(9), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = ogap(); [Array.prototype.unshift.call(o, 9), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.4.4.6.js b/source/spidermonkey-tests/ecma_5/strict/15.4.4.6.js new file mode 100644 index 00000000..2625f1ba --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.4.4.6.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function arr() { + return Object.defineProperty([1, 2, 3], 2, {configurable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 2, {configurable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = arr(); [a.pop(), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.pop.call(o), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.4.4.8.js b/source/spidermonkey-tests/ecma_5/strict/15.4.4.8.js new file mode 100644 index 00000000..67687140 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.4.4.8.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function arr() { + return Object.defineProperty([1, 2, 3], 0, {writable: false}); +} + +function obj() { + var o = {0: 1, 1: 2, 2: 3, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = arr(); a.reverse()', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = obj(); Array.prototype.reverse.call(o)', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 1, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 1, {configurable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = agap(); a.reverse()', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = ogap(); Array.prototype.reverse.call(o)', + raisesException(TypeError), + raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.4.4.9.js b/source/spidermonkey-tests/ecma_5/strict/15.4.4.9.js new file mode 100644 index 00000000..4d08fe98 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.4.4.9.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function arr() { + return Object.defineProperty([10, 20, 30], 0, {writable: false}); +} + +function obj() { + var o = {0: 10, 1: 20, 2: 30, length: 3}; + Object.defineProperty(o, 0, {writable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = arr(); [a.shift(), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = obj(); [Array.prototype.shift.call(o), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +function agap() { + var a = [1, 2, , 4]; + Object.defineProperty(a, 1, {configurable: false}); + return a; +} + +function ogap() { + var o = {0: 1, 1: 2, /* no 2 */ 3: 4, length: 4}; + Object.defineProperty(o, 1, {configurable: false}); + return o; +} + +assertEq(testLenientAndStrict('var a = agap(); [a.shift(), a]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = ogap(); [Array.prototype.shift.call(o), o]', + raisesException(TypeError), + raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.4.5.1.js b/source/spidermonkey-tests/ecma_5/strict/15.4.5.1.js new file mode 100644 index 00000000..3fb04ebd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.4.5.1.js @@ -0,0 +1,84 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var out = {}; + +function arr() { + return Object.defineProperty([1, 2, 3, 4], 2, {configurable: false}); +} + +function nonStrict1(out) +{ + var a = out.array = arr(); + a.length = 2; +} + +function strict1(out) +{ + "use strict"; + var a = out.array = arr(); + a.length = 2; + return a; +} + +out.array = null; +nonStrict1(out); +assertEq(deepEqual(out.array, [1, 2, 3]), true); + +out.array = null; +try +{ + strict1(out); + throw "no error"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, "expected TypeError, got " + e); +} +assertEq(deepEqual(out.array, [1, 2, 3]), true); + +// Internally, SpiderMonkey has two representations for arrays: +// fast-but-inflexible, and slow-but-flexible. Adding a non-index property +// to an array turns it into the latter. We should test on both kinds. +function addx(obj) { + obj.x = 5; + return obj; +} + +function nonStrict2(out) +{ + var a = out.array = addx(arr()); + a.length = 2; +} + +function strict2(out) +{ + "use strict"; + var a = out.array = addx(arr()); + a.length = 2; +} + +out.array = null; +nonStrict2(out); +assertEq(deepEqual(out.array, addx([1, 2, 3])), true); + +out.array = null; +try +{ + strict2(out); + throw "no error"; +} +catch (e) +{ + assertEq(e instanceof TypeError, true, "expected TypeError, got " + e); +} +assertEq(deepEqual(out.array, addx([1, 2, 3])), true); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.5.5.1.js b/source/spidermonkey-tests/ecma_5/strict/15.5.5.1.js new file mode 100644 index 00000000..f07828eb --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.5.5.1.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function str() { + return new String("foo"); +} + +assertEq(testLenientAndStrict('var s = str(); s.length = 1; s.length', + returns(3), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('var s = str(); delete s.length', + returns(false), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('"foo".length = 1', + returns(1), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('delete "foo".length', + returns(false), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/15.5.5.2.js b/source/spidermonkey-tests/ecma_5/strict/15.5.5.2.js new file mode 100644 index 00000000..fa2c9231 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/15.5.5.2.js @@ -0,0 +1,15 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(testLenientAndStrict('"foo"[0] = 1', + returns(1), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('delete "foo"[0]', + returns(false), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/8.12.5.js b/source/spidermonkey-tests/ecma_5/strict/8.12.5.js new file mode 100644 index 00000000..c351c19c --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/8.12.5.js @@ -0,0 +1,82 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function obj() { + var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1}; + Object.defineProperty(o, 'nowrite', {writable: false}); + Object.defineProperty(o, 'noconfig', {configurable: false}); + Object.defineProperty(o, 'noble', {writable: false, configurable: false}); + return o; +} + +assertEq(testLenientAndStrict('var o = obj(); o.all = 2; o.all', + returns(2), returns(2)), + true); + +assertEq(testLenientAndStrict('var o = obj(); o.nowrite = 2; o.nowrite', + returns(1), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = obj(); o.noconfig = 2; o.noconfig', + returns(2), returns(2)), + true); + +assertEq(testLenientAndStrict('var o = obj(); o.noble = 2; o.noble', + returns(1), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('obj().nowrite++', + returns(1), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('++obj().nowrite', + returns(2), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('obj().nowrite--', + returns(1), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('--obj().nowrite', + returns(0), raisesException(TypeError)), + true); + + +function arr() { + return Object.defineProperties([1, 1, 1, 1], + { 1: { writable: false }, + 2: { configurable: false }, + 3: { writable: false, configurable: false }}); +} + +assertEq(testLenientAndStrict('var a = arr(); a[0] = 2; a[0]', + returns(2), returns(2)), + true); + +assertEq(testLenientAndStrict('var a = arr(); a[1] = 2; a[1]', + returns(1), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var a = arr(); a[2] = 2; a[2]', + returns(2), returns(2)), + true); + +assertEq(testLenientAndStrict('var a = arr(); a[3] = 2; a[3]', + returns(1), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('arr()[1]++', + returns(1), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('++arr()[1]', + returns(2), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('arr()[1]--', + returns(1), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('--arr()[1]', + returns(0), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/8.12.7-2.js b/source/spidermonkey-tests/ecma_5/strict/8.12.7-2.js new file mode 100644 index 00000000..2fd4dbae --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/8.12.7-2.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +// delete o[p] only performs ToString(p) once, even if there's a strict error. +var hits = 0; +var p = { + toString: function () { + hits++; + return "noconfig"; + } +}; +assertEq(testLenientAndStrict('var o = Object.freeze({noconfig: "ow"}); delete o[p]', + returns(false), raisesException(TypeError)), + true); +assertEq(hits, 2); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/8.12.7.js b/source/spidermonkey-tests/ecma_5/strict/8.12.7.js new file mode 100644 index 00000000..518adc79 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/8.12.7.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function setup() { + var o = {all: 1, nowrite: 1, noconfig: 1, noble: 1}; + Object.defineProperty(o, 'nowrite', {writable: false}); + Object.defineProperty(o, 'noconfig', {configurable: false}); + Object.defineProperty(o, 'noble', {writable: false, configurable: false}); + return o; +} + +assertEq(testLenientAndStrict('var o = setup(); delete o.all', + returns(true), returns(true)), + true); + +assertEq(testLenientAndStrict('var o = setup(); delete o.nowrite', + returns(true), returns(true)), + true); + +assertEq(testLenientAndStrict('var o = setup(); delete o.noconfig', + returns(false), raisesException(TypeError)), + true); + +assertEq(testLenientAndStrict('var o = setup(); delete o.noble', + returns(false), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/8.7.2.js b/source/spidermonkey-tests/ecma_5/strict/8.7.2.js new file mode 100644 index 00000000..76b474cd --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/8.7.2.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * These tests depend on the fact that testLenientAndStrict tries the + * strict case first; otherwise, the non-strict evaluation creates the + * variable. Ugh. Ideally, we would use evalcx, but that's not + * available in the browser. + */ + +/* Assigning to an undeclared variable should fail in strict mode. */ +assertEq(testLenientAndStrict('undeclared=1', + completesNormally, + raisesException(ReferenceError)), + true); + +/* + * Assigning to a var-declared variable should be okay in strict and + * lenient modes. + */ +assertEq(testLenientAndStrict('var var_declared; var_declared=1', + completesNormally, + completesNormally), + true); + +/* + * We mustn't report errors until the code is actually run; the variable + * could be created in the mean time. + */ +assertEq(testLenientAndStrict('undeclared_at_compiletime=1', + parsesSuccessfully, + parsesSuccessfully), + true); + +function obj() { + var o = { x: 1, y: 1 }; + Object.defineProperty(o, 'x', { writable: false }); + return o; +} + +/* Put EXPR in a strict mode code context with 'with' bindings in scope. */ +function in_strict_with(expr) { + return "with(obj()) { (function () { 'use strict'; " + expr + " })(); }"; +} + +assertEq(raisesException(TypeError)(in_strict_with('x = 2; y = 2;')), true); +assertEq(raisesException(TypeError)(in_strict_with('x++;')), true); +assertEq(raisesException(TypeError)(in_strict_with('++x;')), true); +assertEq(raisesException(TypeError)(in_strict_with('x--;')), true); +assertEq(raisesException(TypeError)(in_strict_with('--x;')), true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/B.1.1.js b/source/spidermonkey-tests/ecma_5/strict/B.1.1.js new file mode 100644 index 00000000..cf36711d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/B.1.1.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Octal integer literal at top level. */ +assertEq(testLenientAndStrict('010', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +/* Octal integer literal in strict function body */ +assertEq(parseRaisesException(SyntaxError) + ('function f() { "use strict"; 010; }'), + true); + + +/* + * Octal integer literal after strict function body (restoration of + * scanner state) + */ +assertEq(parsesSuccessfully('function f() { "use strict"; }; 010'), + true); + +/* Octal integer literal in function body */ +assertEq(parsesSuccessfully('function f() { 010; }'), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/B.1.2.js b/source/spidermonkey-tests/ecma_5/strict/B.1.2.js new file mode 100644 index 00000000..b44108fe --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/B.1.2.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(testLenientAndStrict('"\\010"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assertEq(testLenientAndStrict('"\\00"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assertEq(testLenientAndStrict('"\\1"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assertEq(testLenientAndStrict('"\\08"', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +assertEq(testLenientAndStrict('"\\0"', + parsesSuccessfully, + parsesSuccessfully), + true); + +assertEq(testLenientAndStrict('"\\0x"', + parsesSuccessfully, + parsesSuccessfully), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/assign-to-callee-name.js b/source/spidermonkey-tests/ecma_5/strict/assign-to-callee-name.js new file mode 100644 index 00000000..3c2efba2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/assign-to-callee-name.js @@ -0,0 +1,42 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'assign-to-callee-name.js'; +var BUGNUMBER = 610350; +var summary = + "Assigning to a function expression's name within that function should " + + "throw a TypeError in strict mode code"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var f = function assignSelfStrict() { "use strict"; assignSelfStrict = 12; }; + +try +{ + var r = f(); + throw new Error("should have thrown a TypeError, returned " + r); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "didn't throw a TypeError: " + e); +} + +var assignSelf = 42; +var f2 = function assignSelf() { assignSelf = 12; }; + +f2(); // shouldn't throw, does nothing +assertEq(assignSelf, 42); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/strict/browser.js b/source/spidermonkey-tests/ecma_5/strict/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/strict/directive-prologue-01.js b/source/spidermonkey-tests/ecma_5/strict/directive-prologue-01.js new file mode 100644 index 00000000..681fa929 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/directive-prologue-01.js @@ -0,0 +1,78 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 601262; +var summary = + "A string literal containing an octal escape before a strict mode " + + "directive should be a syntax error"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +try +{ + eval(" '\\145'; 'use strict'; "); + throw new Error("no error thrown for eval"); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in eval"); +} + +try +{ + Function(" '\\145'; 'use strict'; "); + throw new Error("no error thrown for Function"); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in Function"); +} + +try +{ + eval(" function f(){ '\\145'; 'use strict'; } "); + throw new Error("no error thrown for eval of function"); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in eval of " + + "function"); +} + +try +{ + Function(" function f(){ '\\145'; 'use strict'; } "); + throw new Error("no error thrown for eval of function"); +} +catch (e) +{ + assertEq(e instanceof SyntaxError, true, + "wrong error for octal-escape before strict directive in eval of " + + "function"); +} + +eval("function notAnError1() { 5; '\\145'; function g() { 'use strict'; } }"); + +Function("function notAnError2() { 5; '\\145'; function g() { 'use strict'; } }"); + +function notAnError3() +{ + 5; + "\145"; + function g() { "use strict"; } +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/strict/eval-variable-environment.js b/source/spidermonkey-tests/ecma_5/strict/eval-variable-environment.js new file mode 100644 index 00000000..a10f43f4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/eval-variable-environment.js @@ -0,0 +1,67 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var code; + +code = + "eval('var x = 2; typeof x');"; +assertEq(testLenientAndStrict(code, returns("number"), returns("number")), + true); + +code = + "eval('\"use strict\"; var x = 2; typeof x');"; +assertEq(testLenientAndStrict(code, returns("number"), returns("number")), + true); + +code = + "eval('var x = 2;'); " + + "typeof x"; +assertEq(testLenientAndStrict(code, returns("number"), returns("undefined")), + true); + +code = + "eval('\"use strict\"; var x = 2;'); " + + "typeof x"; +assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + +code = + "eval('\"use strict\"; var x = 2; typeof x'); " + + "typeof x"; +assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + +code = + "function test() " + + "{ " + + " eval('var x = 2;'); " + + " return typeof x; " + + "} " + + "test();"; +assertEq(testLenientAndStrict(code, returns("number"), returns("undefined")), + true); + +code = + "function test() " + + "{ " + + " 'use strict'; " + + " eval('var x = 2;'); " + + " return typeof x; " + + "} " + + "test();"; +assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + +code = + "function test() " + + "{ " + + " eval('\"use strict\"; var x = 2;'); " + + " return typeof x; " + + "} " + + "test();"; +assertEq(testLenientAndStrict(code, returns("undefined"), returns("undefined")), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/function-name.js b/source/spidermonkey-tests/ecma_5/strict/function-name.js new file mode 100644 index 00000000..b68305cb --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/function-name.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function fn() { + return function f(a, b, c) { }; +} + +assertEq(testLenientAndStrict('var f = fn(); f.name = "g"; f.name', + returns("f"), raisesException(TypeError)), + true); +assertEq(testLenientAndStrict('var f = fn(); delete f.name', + returns(false), raisesException(TypeError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/primitive-this-no-writeback.js b/source/spidermonkey-tests/ecma_5/strict/primitive-this-no-writeback.js new file mode 100644 index 00000000..2f58fb23 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/primitive-this-no-writeback.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Verify that GETTHISPROP does not update the frame's |this| slot. */ + +var f = String.prototype.m = function () { + "use strict"; + assertEq(this, "s"); + // The GETTHISPROP should not cause |this| to become wrapped. + return [this.m, this]; +}; +var a = "s".m(); +assertEq(a[0], f); +assertEq(a[1], "s"); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/rebind-eval-should-fail-in-strict-mode.js b/source/spidermonkey-tests/ecma_5/strict/rebind-eval-should-fail-in-strict-mode.js new file mode 100644 index 00000000..41f00762 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/rebind-eval-should-fail-in-strict-mode.js @@ -0,0 +1,39 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BadSyntaxStrings = [ + "function foo1() { \"use strict\"; try {} catch (eval) {} }", + "function foo2() { \"use strict\"; let eval = 9; foo(); }", + "function foo3() { \"use strict\"; for (let eval = 3;;) { foo(); }}", + "function foo4() { \"use strict\"; for (let eval in {a:1}) { foo(); }}", + "function foo5() { \"use strict\"; for (let eval of [1, 2, 3]) { foo(); }}", + "function foo6() { \"use strict\"; var eval = 12; }", + "function foo7() { \"use strict\"; for (var eval = 3;;) { foo(); }}", + "function foo8() { \"use strict\"; for (var eval in {a:1}) { foo(); }}", + "function foo9() { \"use strict\"; for (var eval of [1, 2, 3]) { foo(); }}", + "function foo10() { \"use strict\"; const eval = 12; }", + "function foo11() { \"use strict\"; for (const eval = 3;;) { foo(); }}", + "function foo12() { \"use strict\"; return [eval for (eval of [1, 2, 3])]; }", + "function foo13() { \"use strict\"; return [eval for (eval in {a:3})]; }", + "function foo14() { \"use strict\"; return (eval for (eval of [1, 2, 3])); }", + "function foo15() { \"use strict\"; return (eval for (eval in {a:3})); }" +]; + +function testString(s, i) { + var gotSyntaxError = -1; + try { + eval(s); + } catch(err) { + if (err instanceof SyntaxError) + gotSyntaxError = i; + } + + assertEq(gotSyntaxError, i); +} + +for (var i = 0; i < BadSyntaxStrings.length; i++) + testString(BadSyntaxStrings[i], i); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/regress-532041.js b/source/spidermonkey-tests/ecma_5/strict/regress-532041.js new file mode 100644 index 00000000..82311f3b --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/regress-532041.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + + +/* + * JSFunction::findDuplicateFormal (nee js_FindDuplicateFormal), used + * by strict checks, sometimes failed to choose the correct branch of + * the fun->u.i.names union: it used the argument count, not the + * overall name count. + */ +function f(a1,a2,a3,a4,a5) { "use strict"; var v1, v2, v3, v4, v5, v6, v7; } + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/regress-532254.js b/source/spidermonkey-tests/ecma_5/strict/regress-532254.js new file mode 100644 index 00000000..d45dbba6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/regress-532254.js @@ -0,0 +1,13 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +assertEq(testLenientAndStrict('function f(eval,[x]){}', + parsesSuccessfully, + parseRaisesException(SyntaxError)), + true); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/regress-599159.js b/source/spidermonkey-tests/ecma_5/strict/regress-599159.js new file mode 100644 index 00000000..71a413e2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/regress-599159.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +// Shu's test +function test(makeNonArray) { + function C() {} + C.prototype = [] + if (makeNonArray) + C.prototype.constructor = C + c = new C(); + c.push("foo"); + return c.length +} +assertEq(test(true), 1); +assertEq(test(false), 1); + +// jorendorff's longer test +var a = []; +a.slowify = 1; +var b = Object.create(a); +b.length = 12; +assertEq(b.length, 12); + +// jorendorff's shorter test +var b = Object.create(Array.prototype); +b.length = 12; +assertEq(b.length, 12); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/strict/shell.js b/source/spidermonkey-tests/ecma_5/strict/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_5/strict/strict-this-is-not-truthy.js b/source/spidermonkey-tests/ecma_5/strict/strict-this-is-not-truthy.js new file mode 100644 index 00000000..ec1a8683 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/strict-this-is-not-truthy.js @@ -0,0 +1,12 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +// See bug 630543. + +function f() { + "use strict"; + return !this; +} +assertEq(f.call(null), true); + +reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_5/strict/this-for-function-expression-recursion.js b/source/spidermonkey-tests/ecma_5/strict/this-for-function-expression-recursion.js new file mode 100644 index 00000000..197b4646 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/this-for-function-expression-recursion.js @@ -0,0 +1,44 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'this-for-function-expression-recursion.js'; +var BUGNUMBER = 611276; +var summary = "JSOP_CALLEE should push undefined, not null, for this"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Calling a named function expression (not function statement) uses the +// JSOP_CALLEE opcode. This opcode pushes its own |this|, distinct from the +// normal call path; verify that that |this| value is properly |undefined|. + +var calleeThisFun = + function calleeThisFun(recurring) + { + if (recurring) + return this; + return calleeThisFun(true); + }; +assertEq(calleeThisFun(false), this); + +var calleeThisStrictFun = + function calleeThisStrictFun(recurring) + { + "use strict"; + if (recurring) + return this; + return calleeThisStrictFun(true); + }; +assertEq(calleeThisStrictFun(false), undefined); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_5/strict/unbrand-this.js b/source/spidermonkey-tests/ecma_5/strict/unbrand-this.js new file mode 100644 index 00000000..219d1588 --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/strict/unbrand-this.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* Test JSOP_UNBRANDTHIS's behavior on object and non-object |this| values. */ + +function strict() { + "use strict"; + this.insert = function(){ bar(); }; + function bar() {} +} + +var exception; + +// Try 'undefined' as a |this| value. +exception = null; +try { + strict.call(undefined); +} catch (x) { + exception = x; +} +assertEq(exception instanceof TypeError, true); + +// Try 'null' as a |this| value. +exception = null; +try { + strict.call(null); +} catch (x) { + exception = x; +} +assertEq(exception instanceof TypeError, true); + +// An object as a |this| value should be fine. +exception = null; +try { + strict.call({}); +} catch (x) { + exception = x; +} +assertEq(exception, null); + +reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_5/template.js b/source/spidermonkey-tests/ecma_5/template.js new file mode 100644 index 00000000..089aae2d --- /dev/null +++ b/source/spidermonkey-tests/ecma_5/template.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 99999; +var summary = ''; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_6/Array/browser.js b/source/spidermonkey-tests/ecma_6/Array/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Array/fill.js b/source/spidermonkey-tests/ecma_6/Array/fill.js new file mode 100644 index 00000000..ad94e663 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/fill.js @@ -0,0 +1,97 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 911147; +var summary = 'Array.prototype.fill'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(typeof [].fill, 'function'); +assertEq([].fill.length, 1); + +// Default values for arguments and absolute values for negative start and end +// arguments are resolved correctly. +assertDeepEq([].fill(1), []); +assertDeepEq([1,1,1].fill(2), [2,2,2]); +assertDeepEq([1,1,1].fill(2, 1), [1,2,2]); +assertDeepEq([1,1,1].fill(2, 1, 2), [1,2,1]); +assertDeepEq([1,1,1].fill(2, -2), [1,2,2]); +assertDeepEq([1,1,1].fill(2, -2, -1), [1,2,1]); +assertDeepEq([1,1,1].fill(2, undefined), [2,2,2]); +assertDeepEq([1,1,1].fill(2, undefined, undefined), [2,2,2]); +assertDeepEq([1,1,1].fill(2, 1, undefined), [1,2,2]); +assertDeepEq([1,1,1].fill(2, undefined, 1), [2,1,1]); +assertDeepEq([1,1,1].fill(2, 2, 1), [1,1,1]); +assertDeepEq([1,1,1].fill(2, -1, 1), [1,1,1]); +assertDeepEq([1,1,1].fill(2, -2, 1), [1,1,1]); +assertDeepEq([1,1,1].fill(2, 1, -2), [1,1,1]); +assertDeepEq([1,1,1].fill(2, 0.1), [2,2,2]); +assertDeepEq([1,1,1].fill(2, 0.9), [2,2,2]); +assertDeepEq([1,1,1].fill(2, 1.1), [1,2,2]); +assertDeepEq([1,1,1].fill(2, 0.1, 0.9), [1,1,1]); +assertDeepEq([1,1,1].fill(2, 0.1, 1.9), [2,1,1]); +assertDeepEq([1,1,1].fill(2, 0.1, 1.9), [2,1,1]); +assertDeepEq([1,1,1].fill(2, -0), [2,2,2]); +assertDeepEq([1,1,1].fill(2, 0, -0), [1,1,1]); +assertDeepEq([1,1,1].fill(2, NaN), [2,2,2]); +assertDeepEq([1,1,1].fill(2, 0, NaN), [1,1,1]); +assertDeepEq([1,1,1].fill(2, false), [2,2,2]); +assertDeepEq([1,1,1].fill(2, true), [1,2,2]); +assertDeepEq([1,1,1].fill(2, "0"), [2,2,2]); +assertDeepEq([1,1,1].fill(2, "1"), [1,2,2]); +assertDeepEq([1,1,1].fill(2, "-2"), [1,2,2]); +assertDeepEq([1,1,1].fill(2, "-2", "-1"), [1,2,1]); +assertDeepEq([1,1,1].fill(2, {valueOf: ()=>1}), [1,2,2]); +assertDeepEq([1,1,1].fill(2, 0, {valueOf: ()=>1}), [2,1,1]); + +// fill works generically for objects, too. +assertDeepEq([].fill.call({length: 2}, 2), {0: 2, 1: 2, length: 2}); + +var setterCalled = false; +var objWithSetter = {set "0"(val) { setterCalled = true}, length: 1}; +[].fill.call(objWithSetter, 2); +assertEq(setterCalled, true); + +var setHandlerCallCount = 0; +var proxy = new Proxy({length: 3}, {set: function(value) {setHandlerCallCount++;}}); +[].fill.call(proxy, 2); +assertEq(setHandlerCallCount, 3); + +var valueOfCallCount = 0; +var typedArray = new Uint8ClampedArray(3); +[].fill.call(typedArray, {valueOf: function() {valueOfCallCount++; return 2000;}}); +assertEq(valueOfCallCount, 3); +assertEq(typedArray[0], 0xff); + +// All remaining cases should throw. +var objWithGetterOnly = {get "0"() {return 1;}, length: 1}; + +var objWithReadOnlyProp = {length: 1}; +Object.defineProperty(objWithReadOnlyProp, 0, {value: 1, writable: false}); + +var objWithNonconfigurableProp = {length: 1}; +Object.defineProperty(objWithNonconfigurableProp, 0, {value: 1, configurable: false}); + +var frozenObj = {length: 1}; +Object.freeze(frozenObj); + +var frozenArray = [1, 1, 1]; +Object.freeze(frozenArray); + +assertThrowsInstanceOf(() => [].fill.call(objWithGetterOnly, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(objWithReadOnlyProp, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(objWithNonconfigurableProp, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(frozenObj, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(frozenArray, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call("111", 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(null, 2), TypeError); +assertThrowsInstanceOf(() => [].fill.call(undefined, 2), TypeError); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Array/find_findindex.js b/source/spidermonkey-tests/ecma_6/Array/find_findindex.js new file mode 100644 index 00000000..6e32ea6b --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/find_findindex.js @@ -0,0 +1,285 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 885553; +var summary = 'Array.prototype.find and Array.prototype.findIndex'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function isString(v, index, array) +{ + assertEq(array[index], v); + return typeof v == 'string'; +} + +function dumpError(e) +{ + var s = e.name + ': ' + e.message + + ' File: ' + e.fileName + + ', Line: ' + e.lineNumber + + ', Stack: ' + e.stack; + return s; +} + +var expect; +var actual; +var obj; + +var strings = ['hello', 'Array', 'WORLD']; +var mixed = [0, '1', 2]; +var sparsestrings = new Array(); +sparsestrings[2] = 'sparse'; +var arraylike = {0:0, 1:'string', 2:2, length:3}; +// array for which JSObject::isIndexed() holds. +var indexedArray = []; +Object.defineProperty(indexedArray, 42, { get: function() { return 42; } }); +Object.defineProperty(indexedArray, 142, { get: function() { return 'string'; } }); + +// find and findIndex have 1 required argument + +expect = 1; +actual = Array.prototype.find.length; +reportCompare(expect, actual, 'Array.prototype.find.length == 1'); +actual = Array.prototype.findIndex.length; +reportCompare(expect, actual, 'Array.prototype.findIndex.length == 1'); + +// throw TypeError if no predicate specified +expect = 'TypeError'; +try +{ + strings.find(); + actual = 'no error'; +} +catch(e) +{ + actual = e.name; +} +reportCompare(expect, actual, 'Array.find(undefined) throws TypeError'); +try +{ + strings.findIndex(); + actual = 'no error'; +} +catch(e) +{ + actual = e.name; +} +reportCompare(expect, actual, 'Array.findIndex(undefined) throws TypeError'); + +// Length gets treated as integer, not uint32 +obj = { length: -4294967295, 0: 42 }; +expected = undefined; +actual = Array.prototype.find.call(obj, () => true); +reportCompare(expected, actual, 'find correctly treats "length" as an integer'); +expected = -1 +actual = Array.prototype.findIndex.call(obj, () => true); +reportCompare(expected, actual, 'findIndex correctly treats "length" as an integer'); + +// test find and findIndex results +try +{ + expect = 'hello'; + actual = strings.find(isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'strings: find finds first string element'); + +try +{ + expect = 0; + actual = strings.findIndex(isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'strings: findIndex finds first string element'); + +try +{ + expect = '1'; + actual = mixed.find(isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'mixed: find finds first string element'); + +try +{ + expect = 1; + actual = mixed.findIndex(isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'mixed: findIndex finds first string element'); + +try +{ + expect = 'sparse'; + actual = sparsestrings.find(isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'sparsestrings: find finds first string element'); + +try +{ + expect = 2; + actual = sparsestrings.findIndex(isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'sparsestrings: findIndex finds first string element'); + +try +{ + expect = 'string'; + actual = [].find.call(arraylike, isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'arraylike: find finds first string element'); + +try +{ + expect = 1; + actual = [].findIndex.call(arraylike, isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'arraylike: findIndex finds first string element'); + +try +{ + expect = 1; + actual = 0; + Array.prototype.find.call({get 0(){ actual++ }, length: 1}, ()=>true); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'arraylike with getter: getter only called once'); + +try +{ + expect = 'string'; + actual = [].find.call(indexedArray, isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'indexedArray: find finds first string element'); + +try +{ + expect = 142; + actual = [].findIndex.call(indexedArray, isString); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, 'indexedArray: findIndex finds first string element'); + +// Bug 1058394 - Array#find and Array#findIndex no longer skip holes +var sparseArray = [,,1]; +var sparseArrayWithInheritedDataProperty = Object.setPrototypeOf([,,1], { + __proto__: [].__proto__, + 0 : 0 +}); +var sparseArrayWithInheritedAccessorProperty = Object.setPrototypeOf([,,1], { + __proto__: [].__proto__, + get 0(){ + throw "get 0"; + } +}); + +try +{ + expect = undefined; + actual = sparseArray.find(() => true); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, "Don't skip holes in Array#find."); + +try +{ + expect = 0; + actual = sparseArray.findIndex(() => true); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, "Don't skip holes in Array#findIndex."); + +try +{ + expect = 0; + actual = sparseArrayWithInheritedDataProperty.find(v => v === 0); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, "Array#find can find inherited data property."); + +try +{ + expect = 0; + actual = sparseArrayWithInheritedDataProperty.findIndex(v => v === 0); +} +catch(e) +{ + actual = dumpError(e); +} +reportCompare(expect, actual, "Array#findIndex can find inherited data property."); + +try +{ + expect = "get 0"; + actual = sparseArrayWithInheritedAccessorProperty.find(() => true); +} +catch(e) +{ + actual = e; +} +reportCompare(expect, actual, "Array#find can find inherited accessor property."); + +try +{ + expect = "get 0"; + actual = sparseArrayWithInheritedAccessorProperty.findIndex(() => true); +} +catch(e) +{ + actual = e; +} +reportCompare(expect, actual, "Array#findIndex can find inherited accessor property."); diff --git a/source/spidermonkey-tests/ecma_6/Array/for_of_1.js b/source/spidermonkey-tests/ecma_6/Array/for_of_1.js new file mode 100644 index 00000000..0233c1d2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/for_of_1.js @@ -0,0 +1,138 @@ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// Test the properties and prototype of a generator object. +function TestManySmallArrays() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + + var TRUE_SUM = 0; + var N = 100; + var M = 3; + var sum = 0; + for (var i = 0; i < N; i++) { + var arr = new Array(M); + for (var j = 0; j < M; j++) { + arr[j] = j; + TRUE_SUM += j; + } + sum += doIter(fun, arr); + } + assertEq(sum, TRUE_SUM); +} +TestManySmallArrays(); + +// Test the properties and prototype of a generator object. +function TestSingleSmallArray() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + + var TRUE_SUM = 0; + var N = 100; + var M = 3; + var arr = new Array(M); + for (var j = 0; j < M; j++) { + arr[j] = j; + TRUE_SUM += j; + } + TRUE_SUM *= N; + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + } + assertEq(sum, TRUE_SUM); +} +TestSingleSmallArray(); + + +function TestChangeArrayPrototype() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var Proto1 = Object.create(Array.prototype); + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + if (i == MID) + arr.__proto__ = Proto1; + TRUE_SUM += ARR_SUM; + } + assertEq(sum, TRUE_SUM); +} +TestChangeArrayPrototype(); + + +function TestChangeManyArrayShape() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var sum = 0; + for (var i = 0; i < N; i++) { + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + arr['v_' + i] = i; + sum += doIter(fun, arr); + TRUE_SUM += ARR_SUM; + } + assertEq(sum, TRUE_SUM); +} +TestChangeManyArrayShape(); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Array/for_of_2.js b/source/spidermonkey-tests/ecma_6/Array/for_of_2.js new file mode 100644 index 00000000..6bf12161 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/for_of_2.js @@ -0,0 +1,58 @@ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// +// Check case where ArrayIterator.prototype.next changes in the middle of iteration. +// +function TestChangeArrayIteratorNext() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var GET_COUNT = 0; + function getter() { + GET_COUNT++; + if (GET_COUNT == MID) + iterProto.next = NewNext; + return M2; + } + + var iter = ([])[std_iterator](); + var iterProto = Object.getPrototypeOf(iter); + var OldNext = iterProto.next; + var NewNext = function () { + return OldNext.apply(this, arguments); + }; + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + var M2 = (M/2)|0; + Object.defineProperty(arr, M2, {'get':getter}); + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + TRUE_SUM += ARR_SUM; + } + assertEq(sum, TRUE_SUM); +} +TestChangeArrayIteratorNext(); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Array/for_of_3.js b/source/spidermonkey-tests/ecma_6/Array/for_of_3.js new file mode 100644 index 00000000..b659287f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/for_of_3.js @@ -0,0 +1,60 @@ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// +// Check array length increases changes during iteration. +// +function TestIncreaseArrayLength() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var GET_COUNT = 0; + function getter() { + GET_COUNT++; + if (GET_COUNT == MID) { + ARR_SUM += arr.length; + arr.push(arr.length); + } + return M2; + } + + var iter = ([])[std_iterator](); + var iterProto = Object.getPrototypeOf(iter); + var OldNext = iterProto.next; + var NewNext = function () { + return OldNext.apply(this, arguments); + }; + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + var M2 = (M/2)|0; + Object.defineProperty(arr, M2, {'get':getter}); + + var sum = 0; + for (var i = 0; i < N; i++) { + sum += doIter(fun, arr); + TRUE_SUM += ARR_SUM; + } + assertEq(sum, TRUE_SUM); +} +TestIncreaseArrayLength(); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Array/for_of_4.js b/source/spidermonkey-tests/ecma_6/Array/for_of_4.js new file mode 100644 index 00000000..30379201 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/for_of_4.js @@ -0,0 +1,64 @@ +// Test corner cases of for-of iteration over Arrays. +// The current SetObject::construct method uses a ForOfIterator to extract +// values from the array, so we use that mechanism to test ForOfIterator here. + +// +// Check array length decreases changes during iteration. +// +function TestDecreaseArrayLength() { + function doIter(f, arr) { + return f(...new Set(arr)); + } + + function fun(a, b, c) { + var result = 0; + for (var i = 0; i < arguments.length; i++) + result += arguments[i]; + return result; + } + + var GET_COUNT = 0; + function getter() { + GET_COUNT++; + if (GET_COUNT == MID) { + arr.length = 0; + } + return M2; + } + + var iter = ([])[std_iterator](); + var iterProto = Object.getPrototypeOf(iter); + var OldNext = iterProto.next; + var NewNext = function () { + return OldNext.apply(this, arguments); + }; + + var TRUE_SUM = 0; + var N = 100; + var MID = N/2; + var M = 3; + var arr = new Array(M); + var ARR_SUM = 0; + for (var j = 0; j < M; j++) { + arr[j] = j; + ARR_SUM += j; + } + var M2 = (M/2)|0; + Object.defineProperty(arr, M2, {'get':getter}); + + var sum = 0; + for (var i = 0; i < N; i++) { + var oldLen = arr.length; + sum += doIter(fun, arr); + var newLen = arr.length; + if (oldLen == newLen) + TRUE_SUM += arr.length > 0 ? ARR_SUM : 0; + else + TRUE_SUM += 1 + } + assertEq(sum, TRUE_SUM); +} +TestDecreaseArrayLength(); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_basics.js b/source/spidermonkey-tests/ecma_6/Array/from_basics.js new file mode 100644 index 00000000..c35599b1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_basics.js @@ -0,0 +1,48 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Array.from copies arrays. +var src = [1, 2, 3], copy = Array.from(src); +assertEq(copy === src, false); +assertEq(Array.isArray(copy), true); +assertDeepEq(copy, src); + +// Non-element properties are not copied. +var a = [0, 1]; +a.name = "lisa"; +assertDeepEq(Array.from(a), [0, 1]); + +// It's a shallow copy. +src = [[0], [1]]; +copy = Array.from(src); +assertEq(copy[0], src[0]); +assertEq(copy[1], src[1]); + +// Array.from can copy non-iterable objects, if they're array-like. +src = {0: "zero", 1: "one", length: 2}; +copy = Array.from(src); +assertEq(Array.isArray(copy), true); +assertDeepEq(copy, ["zero", "one"]); + +// Properties past the .length are not copied. +src = {0: "zero", 1: "one", 2: "two", 9: "nine", name: "lisa", length: 2}; +assertDeepEq(Array.from(src), ["zero", "one"]); + +// If an object has neither an @@iterator method nor .length, +// then it's treated as zero-length. +assertDeepEq(Array.from({}), []); + +// Source object property order doesn't matter. +src = {length: 2, 1: "last", 0: "first"}; +assertDeepEq(Array.from(src), ["first", "last"]); + +// Array.from does not preserve holes. +assertDeepEq(Array.from(Array(3)), [undefined, undefined, undefined]); +assertDeepEq(Array.from([, , 2, 3]), [undefined, undefined, 2, 3]); +assertDeepEq(Array.from([0, , , ,]), [0, undefined, undefined, undefined]); + +// Even on non-iterable objects. +assertDeepEq(Array.from({length: 4}), [undefined, undefined, undefined, undefined]); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_constructor.js b/source/spidermonkey-tests/ecma_6/Array/from_constructor.js new file mode 100644 index 00000000..6846ef09 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_constructor.js @@ -0,0 +1,56 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Array.from can be applied to any constructor. +// For example, the Date builtin constructor. +var d = Array.from.call(Date, ["A", "B"]); +assertEq(Array.isArray(d), false); +assertEq(Object.prototype.toString.call(d), "[object Date]"); +assertEq(Object.getPrototypeOf(d), Date.prototype); +assertEq(d.length, 2); +assertEq(d[0], "A"); +assertEq(d[1], "B"); + +// Or Object. +var obj = Array.from.call(Object, []); +assertEq(Array.isArray(obj), false); +assertEq(Object.getPrototypeOf(obj), Object.prototype); +assertEq(Object.getOwnPropertyNames(obj).join(","), "length"); +assertEq(obj.length, 0); + +// Or any JS function. +function C(arg) { + this.args = arguments; +} +var c = Array.from.call(C, {length: 1, 0: "zero"}); +assertEq(c instanceof C, true); +assertEq(c.args.length, 1); +assertEq(c.args[0], 1); +assertEq(c.length, 1); +assertEq(c[0], "zero"); + +// If the 'this' value passed to Array.from is not a constructor, +// a plain Array is created. +var arr = [3, 4, 5]; +var nonconstructors = [ + {}, Math, Object.getPrototypeOf, undefined, 17, + () => ({}) // arrow functions are not constructors +]; +for (var v of nonconstructors) { + obj = Array.from.call(v, arr); + assertEq(Array.isArray(obj), true); + assertDeepEq(obj, arr); +} + +// Array.from does not get confused if global.Array is replaced with another +// constructor. +function NotArray() { +} +var RealArray = Array; +NotArray.from = Array.from; +Array = NotArray; +assertEq(RealArray.from([1]) instanceof RealArray, true); +assertEq(NotArray.from([1]) instanceof NotArray, true); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_errors.js b/source/spidermonkey-tests/ecma_6/Array/from_errors.js new file mode 100644 index 00000000..4266cb20 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_errors.js @@ -0,0 +1,145 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Array.from throws if the argument is undefined or null. +assertThrowsInstanceOf(() => Array.from(), TypeError); +assertThrowsInstanceOf(() => Array.from(undefined), TypeError); +assertThrowsInstanceOf(() => Array.from(null), TypeError); + +// Array.from throws if an element can't be defined on the new object. +function ObjectWithReadOnlyElement() { + Object.defineProperty(this, "0", {value: null}); + this.length = 0; +} +ObjectWithReadOnlyElement.from = Array.from; +assertDeepEq(ObjectWithReadOnlyElement.from([]), new ObjectWithReadOnlyElement); +assertThrowsInstanceOf(() => ObjectWithReadOnlyElement.from([1]), TypeError); + +// The same, but via preventExtensions. +function InextensibleObject() { + Object.preventExtensions(this); +} +InextensibleObject.from = Array.from; +assertThrowsInstanceOf(() => InextensibleObject.from([1]), TypeError); + +// We will now test this property, that Array.from throws if the .length can't +// be assigned, using several different kinds of object. +var obj; +function init(self) { + obj = self; + self[0] = self[1] = self[2] = self[3] = 0; +} + +function testUnsettableLength(C, Exc) { + if (Exc === undefined) + Exc = TypeError; // the usual expected exception type + C.from = Array.from; + + obj = null; + assertThrowsInstanceOf(() => C.from([]), Exc); + assertEq(obj instanceof C, true); + for (var i = 0; i < 4; i++) + assertEq(obj[0], 0); + + obj = null; + assertThrowsInstanceOf(() => C.from([0, 10, 20, 30]), Exc); + assertEq(obj instanceof C, true); + for (var i = 0; i < 4; i++) + assertEq(obj[i], i * 10); +} + +// Array.from throws if the new object's .length can't be assigned because +// there is no .length and the object is inextensible. +function InextensibleObject4() { + init(this); + Object.preventExtensions(this); +} +testUnsettableLength(InextensibleObject4); + +// Array.from throws if the new object's .length can't be assigned because it's +// read-only. +function ObjectWithReadOnlyLength() { + init(this); + Object.defineProperty(this, "length", {configurable: true, writable: false, value: 4}); +} +testUnsettableLength(ObjectWithReadOnlyLength); + +// The same, but using a builtin type. +Uint8Array.from = Array.from; +assertThrowsInstanceOf(() => Uint8Array.from([]), TypeError); + +// Array.from throws if the new object's .length can't be assigned because it +// inherits a readonly .length along the prototype chain. +function ObjectWithInheritedReadOnlyLength() { + init(this); +} +Object.defineProperty(ObjectWithInheritedReadOnlyLength.prototype, + "length", + {configurable: true, writable: false, value: 4}); +testUnsettableLength(ObjectWithInheritedReadOnlyLength); + +// The same, but using an object with a .length getter but no setter. +function ObjectWithGetterOnlyLength() { + init(this); + Object.defineProperty(this, "length", {configurable: true, get: () => 4}); +} +testUnsettableLength(ObjectWithGetterOnlyLength); + +// The same, but with a setter that throws. +function ObjectWithThrowingLengthSetter() { + init(this); + Object.defineProperty(this, "length", { + configurable: true, + get: () => 4, + set: () => { throw new RangeError("surprise!"); } + }); +} +testUnsettableLength(ObjectWithThrowingLengthSetter, RangeError); + +// Array.from throws if mapfn is neither callable nor undefined. +assertThrowsInstanceOf(() => Array.from([3, 4, 5], {}), TypeError); +assertThrowsInstanceOf(() => Array.from([3, 4, 5], "also not a function"), TypeError); +assertThrowsInstanceOf(() => Array.from([3, 4, 5], null), TypeError); + +// Even if the function would not have been called. +assertThrowsInstanceOf(() => Array.from([], JSON), TypeError); + +// If mapfn is not undefined and not callable, the error happens before anything else. +// Before calling the constructor, before touching the arrayLike. +var log = ""; +function C() { + log += "C"; + obj = this; +} +var p = new Proxy({}, { + has: function () { log += "1"; }, + get: function () { log += "2"; }, + getOwnPropertyDescriptor: function () { log += "3"; } +}); +assertThrowsInstanceOf(() => Array.from.call(C, p, {}), TypeError); +assertEq(log, ""); + +// If mapfn throws, the new object has already been created. +var arrayish = { + get length() { log += "l"; return 1; }, + get 0() { log += "0"; return "q"; } +}; +log = ""; +var exc = {surprise: "ponies"}; +assertThrowsValue(() => Array.from.call(C, arrayish, () => { throw exc; }), exc); +assertEq(log, "lC0"); +assertEq(obj instanceof C, true); + +// It's a TypeError if the iterator's .next() method returns a primitive. +for (var primitive of [undefined, null, 17]) { + assertThrowsInstanceOf( + () => Array.from({ + [std_iterator]() { + return {next() { return primitive; }}; + } + }), + TypeError); +} + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_iterable.js b/source/spidermonkey-tests/ecma_6/Array/from_iterable.js new file mode 100644 index 00000000..3e099331 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_iterable.js @@ -0,0 +1,50 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Array.from works on arguments objects. +(function () { + assertDeepEq(Array.from(arguments), ["arg0", "arg1", undefined]); +})("arg0", "arg1", undefined); + +// If an object has both .length and [@@iterator] properties, [@@iterator] is used. +var a = ['a', 'e', 'i', 'o', 'u']; +a[std_iterator] = function* () { + for (var i = 5; i--; ) + yield this[i]; +}; + +var log = ''; +function f(x) { + log += x; + return x + x; +} + +var b = Array.from(a, f); +assertDeepEq(b, ['uu', 'oo', 'ii', 'ee', 'aa']); +assertEq(log, 'uoiea'); + +// In fact, if [@@iterator] is present, .length isn't queried at all. +var pa = new Proxy(a, { + has: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (has)"); + return id in target; + }, + get: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (get)"); + return target[id]; + }, + getOwnPropertyDescriptor: function (target, id) { + if (id === "length") + throw new Error(".length should not be queried (getOwnPropertyDescriptor)"); + return Object.getOwnPropertyDescriptor(target, id) + } +}); +log = ""; +b = Array.from(pa, f); +assertDeepEq(b, ['uu', 'oo', 'ii', 'ee', 'aa']); +assertEq(log, 'uoiea'); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_length_setter.js b/source/spidermonkey-tests/ecma_6/Array/from_length_setter.js new file mode 100644 index 00000000..43f35f73 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_length_setter.js @@ -0,0 +1,13 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Array.from calls a length setter if present. +var hits = 0; +function C() {} +C.prototype = {set length(v) { hits++; }}; +C.from = Array.from; +var copy = C.from(["A", "B"]); +assertEq(hits, 1); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_mapping.js b/source/spidermonkey-tests/ecma_6/Array/from_mapping.js new file mode 100644 index 00000000..568b9d6d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_mapping.js @@ -0,0 +1,41 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// If the mapfn argument to Array.from is undefined, don't map. +assertDeepEq(Array.from([3, 4, 5], undefined), [3, 4, 5]); +assertDeepEq(Array.from([4, 5, 6], undefined, Math), [4, 5, 6]); + +// mapfn is called with two arguments: value and index. +var log = []; +function f() { + log.push(Array.from(arguments)); + return log.length; +} +assertDeepEq(Array.from(['a', 'e', 'i', 'o', 'u'], f), [1, 2, 3, 4, 5]); +assertDeepEq(log, [['a', 0], ['e', 1], ['i', 2], ['o', 3], ['u', 4]]); + +// If the object to be copied is non-iterable, mapfn is still called with two +// arguments. +log = []; +assertDeepEq(Array.from({0: "zero", 1: "one", length: 2}, f), [1, 2]); +assertDeepEq(log, [["zero", 0], ["one", 1]]); + +// If the object to be copied is iterable and the constructor is not Array, +// mapfn is still called with two arguments. +log = []; +function C() {} +C.from = Array.from; +var c = new C; +c[0] = 1; +c[1] = 2; +c.length = 2; +assertDeepEq(C.from(["zero", "one"], f), c); +assertDeepEq(log, [["zero", 0], ["one", 1]]); + +// The mapfn is called even if the value to be mapped is undefined. +assertDeepEq(Array.from([0, 1, , 3], String), ["0", "1", "undefined", "3"]); +var arraylike = {length: 4, "0": 0, "1": 1, "3": 3}; +assertDeepEq(Array.from(arraylike, String), ["0", "1", "undefined", "3"]); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_proxy.js b/source/spidermonkey-tests/ecma_6/Array/from_proxy.js new file mode 100644 index 00000000..0374dfe4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_proxy.js @@ -0,0 +1,54 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Two tests involving Array.from and a Proxy. +var log = []; +function LoggingProxy(target) { + var h = { + defineProperty: function (t, id) { + log.push("define", id); + return undefined; + }, + has: function (t, id) { + log.push("has", id); + return id in t; + }, + get: function (t, id) { + log.push("get", id); + return t[id]; + }, + set: function (t, id, v) { + log.push("set", id); + t[id] = v; + } + }; + return new Proxy(target || [], h); +} + +// When the new object created by Array.from is a Proxy, +// Array.from calls handler.defineProperty to create new elements +// but handler.set to set the length. +LoggingProxy.from = Array.from; +LoggingProxy.from([3, 4, 5]); +assertDeepEq(log, ["define", "0", "define", "1", "define", "2", "set", "length"]); + +// When the argument passed to Array.from is a Proxy, Array.from +// calls handler.get on it. +log = []; +assertDeepEq(Array.from(new LoggingProxy([3, 4, 5])), [3, 4, 5]); +assertDeepEq(log, ["get", std_iterator, + "get", "length", "get", "0", + "get", "length", "get", "1", + "get", "length", "get", "2", + "get", "length"]); + +// Array-like iteration only gets the length once. +log = []; +var arr = [5, 6, 7]; +arr[std_iterator] = undefined; +assertDeepEq(Array.from(new LoggingProxy(arr)), [5, 6, 7]); +assertDeepEq(log, ["get", std_iterator, + "get", "length", "get", "0", "get", "1", "get", "2"]); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_realms.js b/source/spidermonkey-tests/ecma_6/Array/from_realms.js new file mode 100644 index 00000000..28fe28d5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_realms.js @@ -0,0 +1,36 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof newGlobal === 'function') { + // G.Array.from, where G is any global, produces an array whose prototype + // is G.Array.prototype. + var g = newGlobal(); + var ga = g.Array.from([1, 2, 3]); + assertEq(ga instanceof g.Array, true); + + // Even if G.Array is not passed in as the 'this' value to the call. + var from = g.Array.from + var ga2 = from([1, 2, 3]); + assertEq(ga2 instanceof g.Array, true); + + // Array.from can be applied to a constructor from another realm. + var p = Array.from.call(g.Array, [1, 2, 3]); + assertEq(p instanceof g.Array, true); + var q = g.Array.from.call(Array, [3, 4, 5]); + assertEq(q instanceof Array, true); + + // The default 'this' value received by a non-strict mapping function is + // that function's global, not Array.from's global or the caller's global. + var h = newGlobal(), result = undefined; + h.mainGlobal = this; + h.eval("function f() { mainGlobal.result = this; }"); + g.Array.from.call(Array, [5, 6, 7], h.f); + // (Give each global in the test a name, for better error messages.) + this.name = "main"; + g.name = "g"; + h.name = "h"; + assertEq(result.name, "h"); +} + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_string.js b/source/spidermonkey-tests/ecma_6/Array/from_string.js new file mode 100644 index 00000000..c57bcc7f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_string.js @@ -0,0 +1,23 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Array.from on a string iterates over the string. +assertDeepEq(Array.from("test string"), + ['t', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g']); + +// Array.from on a string handles surrogate pairs correctly. +var gclef = "\uD834\uDD1E"; // U+1D11E MUSICAL SYMBOL G CLEF +assertDeepEq(Array.from(gclef), [gclef]); +assertDeepEq(Array.from(gclef + " G"), [gclef, " ", "G"]); + +// Array.from on a string calls the @@iterator method. +String.prototype[std_iterator] = function* () { yield 1; yield 2; }; +assertDeepEq(Array.from("anything"), [1, 2]); + +// If the iterator method is deleted, Strings are still arraylike. +delete String.prototype[std_iterator]; +assertDeepEq(Array.from("works"), ['w', 'o', 'r', 'k', 's']); +assertDeepEq(Array.from(gclef), ['\uD834', '\uDD1E']); + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_surfaces.js b/source/spidermonkey-tests/ecma_6/Array/from_surfaces.js new file mode 100644 index 00000000..680b6481 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_surfaces.js @@ -0,0 +1,13 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Check superficial features of Array.from. +var desc = Object.getOwnPropertyDescriptor(Array, "from"); +assertEq(desc.configurable, true); +assertEq(desc.enumerable, false); +assertEq(desc.writable, true); +assertEq(Array.from.length, 1); +assertThrowsInstanceOf(() => new Array.from(), TypeError); // not a constructor + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/from_this.js b/source/spidermonkey-tests/ecma_6/Array/from_this.js new file mode 100644 index 00000000..978c90b8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Array/from_this.js @@ -0,0 +1,48 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// The third argument to Array.from is passed as the 'this' value to the +// mapping function. +var hits = 0, obj = {}; +function f(x) { + assertEq(this, obj); + hits++; +} +Array.from(["a", "b", "c"], f, obj); +assertEq(hits, 3); + +// Without an argument, undefined is passed... +hits = 0; +function gs(x) { + "use strict"; + assertEq(this, undefined); + hits++; +} +Array.from("def", gs); +assertEq(hits, 3); + +// ...and if the mapping function is non-strict, that means the global is +// passed. +var global = this; +hits = 0; +function g(x) { + assertEq(this, global); + hits++; +} +Array.from("ghi", g); +assertEq(hits, 3); + +// A primitive value can be passed. +for (var v of [0, "str", undefined]) { + hits = 0; + var mapfn = function h(x) { + "use strict"; + assertEq(this, v); + hits++; + }; + Array.from("pq", mapfn, v); + assertEq(hits, 2); +} + +if (typeof reportCompare === 'function') + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Array/shell.js b/source/spidermonkey-tests/ecma_6/Array/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/ArrayBuffer/browser.js b/source/spidermonkey-tests/ecma_6/ArrayBuffer/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/ArrayBuffer/shell.js b/source/spidermonkey-tests/ecma_6/ArrayBuffer/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Class/browser.js b/source/spidermonkey-tests/ecma_6/Class/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Class/compPropDestr.js b/source/spidermonkey-tests/ecma_6/Class/compPropDestr.js new file mode 100644 index 00000000..6ef9bf19 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Class/compPropDestr.js @@ -0,0 +1,11 @@ +var BUGNUMBER = 924688; +var summary = 'Computed Property Names'; + +print(BUGNUMBER + ": " + summary); + +var key = "z"; +var { [key]: foo } = { z: "bar" }; +assertEq(foo, "bar"); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Class/compPropNames.js b/source/spidermonkey-tests/ecma_6/Class/compPropNames.js new file mode 100644 index 00000000..803b02b9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Class/compPropNames.js @@ -0,0 +1,247 @@ +var BUGNUMBER = 924688; +var summary = 'Computed Property Names'; + +print(BUGNUMBER + ": " + summary); + +// Function definitions. +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e instanceof SyntaxError) { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + + +// Tests begin. + +assertThrowsInstanceOf(function() { var a = {[field1]: "a", [field2]: "b"}; }, ReferenceError); + +assertThrowsInstanceOf(function() { + field1 = 1; + var a = {[field1]: "a", [field2]: "b"}; + }, ReferenceError); + +var f1 = 1; +var f2 = 2; +var a = {[f1]: "a", [f2]: "b"}; +assertEq(a[1], "a"); +assertEq(a[2], "b"); + +var a = {[f1]: "a", f2: "b"}; +assertEq(a[1], "a"); +assertEq(a.f2, "b"); + +var a = {["f1"]: "a", [++f2]: "b"}; +assertEq(a.f1, "a"); +assertEq(a[3], "b"); + +var a = {["f1"]: "a", f2: "b"}; +assertEq(a.f1, "a"); +assertEq(a.f2, "b"); + + +var i = 0; +var a = { + ["foo" + ++i]: i, + ["foo" + ++i]: i, + ["foo" + ++i]: i +}; +assertEq(a.foo1, 1); +assertEq(a.foo2, 2); +assertEq(a.foo3, 3); + +var expr = "abc"; +syntaxError("({["); +syntaxError("({[expr"); +syntaxError("({[expr]"); +syntaxError("({[expr]})"); +syntaxError("({[expr] 0})"); +syntaxError("({[expr], 0})"); +syntaxError("[[expr]: 0]"); +syntaxError("({[expr]: name: 0})"); +syntaxError("({[1, 2]: 3})"); // because '1,2' is an Expression but not an AssignmentExpression +syntaxError("({[1;]: 1})"); // and not an ExpressionStatement +syntaxError("({[if (0) 0;]})"); // much less a Statement +syntaxError("function f() { {[x]: 1} }"); // that's not even an ObjectLiteral +syntaxError("function f() { [x]: 1 }"); // or that +syntaxError('a = {[f1@]: "a", [f2]: "b"}'); // unexpected symbol at end of AssignmentExpression +try { JSON.parse('{["a"]:4}'); } catch(e) { + if (!(e instanceof SyntaxError)) throw new Error('Expected syntax error'); +} + +// Property characteristics. +a = { ["b"] : 4 }; +b = Object.getOwnPropertyDescriptor(a, "b"); +assertEq(b.configurable, true); +assertEq(b.enumerable, true); +assertEq(b.writable, true); +assertEq(b.value, 4); + +// Setter and getter are not hit. +Object.defineProperty(Object.prototype, "x", { set: function (x) { throw "FAIL"; }, + get: function (x) { throw "FAIL"; } }); +var a = {["x"]: 0}; +assertEq(a.x, 0); + +a = {["x"]: 1, ["x"]: 2}; +assertEq(a.x, 2); +a = {x: 1, ["x"]: 2}; +assertEq(a.x, 2); +a = {["x"]: 1, x: 2}; +assertEq(a.x, 2); + +// Symbols +if (typeof Symbol === "function") { + var unique_sym = Symbol("1"), registered_sym = Symbol.for("2"); + a = { [unique_sym] : 2, [registered_sym] : 3 }; + assertEq(a[unique_sym], 2); + assertEq(a[registered_sym], 3); +} + +// Same expression can be run several times to build objects with different property names. +a = []; +for (var i = 0; i < 3; i++) { + a[i] = {["foo" + i]: i}; +} +assertEq(a[0].foo0, 0); +assertEq(a[1].foo1, 1); +assertEq(a[2].foo2, 2); + +// Following are stored in object's elements rather than slots. +var i = 0; +a = { [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i +} +for (var i = 1; i < 9; i++) + assertEq(a[i], i); +syntaxError("a.1"); +syntaxError("a.2"); +syntaxError("a.3"); +syntaxError("a.4"); +syntaxError("a.5"); +syntaxError("a.6"); +syntaxError("a.7"); +syntaxError("a.8"); + +// Adding a single large index. +var i = 0; +a = { [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [++i] : i, + [3000] : 2999 +} +for (var i = 1; i < 9; i++) + assertEq(a[i], i); +assertEq(a[3000], 2999); + +// Defining several properties using eval. +var code = "({"; +for (i = 0; i < 1000; i++) + code += "['foo' + " + i + "]: 'ok', " +code += "['bar']: 'ok'});"; +var obj = eval(code); +for (i = 0; i < 1000; i++) + assertEq(obj["foo" + i], "ok"); +assertEq(obj["bar"], "ok"); + +// Can yield in a computed property name which is in a generator. +function* g() { + var a = { [yield 1]: 2, [yield 2]: 3}; + return a; +} + +var it = g(); +var next = it.next(); +assertEq(next.done, false); +assertEq(next.value, 1); +next = it.next("hello"); +assertEq(next.done, false); +assertEq(next.value, 2); +next = it.next("world"); +assertEq(next.done, true); +assertEq(next.value.hello, 2); +assertEq(next.value.world, 3); + +// get and set. +expr = "abc"; +syntaxError("({get ["); +syntaxError("({get [expr()"); +syntaxError("({get [expr]()"); +syntaxError("({get [expr]()})"); +syntaxError("({get [expr] 0 ()})"); +syntaxError("({get [expr], 0(})"); +syntaxError("[get [expr]: 0()]"); +syntaxError("({get [expr](: name: 0})"); +syntaxError("({get [1, 2](): 3})"); +syntaxError("({get [1;](): 1})"); +syntaxError("({get [if (0) 0;](){}})"); +syntaxError("({set [(a)"); +syntaxError("({set [expr(a)"); +syntaxError("({set [expr](a){}"); +syntaxError("({set [expr]}(a)"); +syntaxError("({set [expr](a), 0})"); +syntaxError("[set [expr](a): 0]"); +syntaxError("({set [expr](a): name: 0})"); +syntaxError("({set [1, 2](a) {return 3;}})"); +syntaxError("({set [1;](a) {return 1}})"); +syntaxError("({set [if (0) 0;](a){}})"); +syntaxError("function f() { {get [x](): 1} }"); +syntaxError("function f() { get [x](): 1 }"); +syntaxError("function f() { {set [x](a): 1} }"); +syntaxError("function f() { set [x](a): 1 }"); +f1 = "abc"; +syntaxError('a = {get [f1@](){}, set [f1](a){}}'); // unexpected symbol at end of AssignmentExpression +syntaxError('a = {get@ [f1](){}, set [f1](a){}}'); // unexpected symbol after get +syntaxError('a = {get [f1](){}, set@ [f1](a){}}'); // unexpected symbol after set + +expr = "hey"; +a = {get [expr]() { return 3; }, set[expr](v) { throw 2; }}; +assertEq(a.hey, 3); +assertThrowsValue(() => { a.hey = 5; }, 2); + +// Symbols with duplicate get and set. +if (typeof Symbol === "function") { + expr = Symbol("hey"); + a = {get [expr]() { return 3; }, set[expr](v) { throw 2; }, + set [expr] (w) { throw 4; }, get[expr](){return 5; }}; + assertEq(a[expr], 5); + assertThrowsValue(() => { a[expr] = 7; }, 4); +} + +// expressions with side effects are called in the right order +log = ""; +obj = { + "a": log += 'a', + get [log += 'b']() {}, + [log += 'c']: log += 'd', + set [log += 'e'](a) {} +}; +assertEq(log, "abcde"); + +// assignment expressions, objects and regex in computed names +obj = { + get [a = "hey"]() { return 1; }, + get [a = {b : 4}.b]() { return 2; }, + set [/x/.source](a) { throw 3; } +} +assertEq(obj.hey, 1); +assertEq(obj[4], 2); +assertThrowsValue(() => { obj.x = 7; }, 3); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Class/methDefn.js b/source/spidermonkey-tests/ecma_6/Class/methDefn.js new file mode 100644 index 00000000..302f366f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Class/methDefn.js @@ -0,0 +1,175 @@ +var BUGNUMBER = 924672; +var summary = 'Method Definitions' + +print(BUGNUMBER + ": " + summary); + +// Function definitions. +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e instanceof SyntaxError) { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + + +// Tests begin. + +syntaxError("{a(){}}"); +syntaxError("b = {a("); +syntaxError("b = {a)"); +syntaxError("b = {a(}"); +syntaxError("b = {a)}"); +syntaxError("b = {a()"); +syntaxError("b = {a()}"); +syntaxError("b = {a(){}"); +syntaxError("b = {a){}"); +syntaxError("b = {a}}"); +syntaxError("b = {a{}}"); +syntaxError("b = {a({}}"); +syntaxError("b = {a@(){}}"); +syntaxError("b = {a() => 0}"); + +b = {a(){return 5;}}; +assertEq(b.a(), 5); + +b = {a(){return "hey";}}; +assertEq(b.a(), "hey"); + +b = {a(){return arguments;}}; +assertEq(b.a().length, 0); + +b = {a(c){return arguments;}}; +assertEq(b.a().length, 0); + +b = {a(c){return arguments;}}; +assertEq(b.a(1).length, 1); + +b = {a(c){return arguments;}}; +assertEq(b.a(1)[0], 1); + +b = {a(c,d){return arguments;}}; +assertEq(b.a(1,2).length, 2); + +b = {a(c,d){return arguments;}}; +assertEq(b.a(1,2)[0], 1); + +b = {a(c,d){return arguments;}}; +assertEq(b.a(1,2)[1], 2); + +// Methods along with other properties. +syntaxError("b = {,a(){}}"); +syntaxError("b = {@,a(){}}"); +syntaxError("b = {a(){},@}"); +syntaxError("b = {a : 5 , (){}}"); +syntaxError("b = {a : 5@ , a(){}}"); +syntaxError("b = {a : , a(){}}"); +syntaxError("b = {a : 5, a()}}"); +syntaxError("b = {a : 5, a({}}"); +syntaxError("b = {a : 5, a){}}"); +syntaxError("b = {a : 5, a(){}"); +var c = "d"; +b = { a : 5, + [c] : "hey", + e() {return 6;}, + get f() {return 7;}, + set f(g) {this.h = 9;} +} +assertEq(b.a, 5); +assertEq(b.d, "hey"); +assertEq(b.e(), 6); +assertEq(b.f, 7); +assertEq(b.h !== 9, true); +b.f = 15; +assertEq(b.h, 9); + + +var i = 0; +var a = { + foo0 : function (){return 0;}, + ["foo" + ++i](){return 1;}, + ["foo" + ++i](){return 2;}, + ["foo" + ++i](){return 3;}, + foo4(){return 4;} +}; +assertEq(a.foo0(), 0); +assertEq(a.foo1(), 1); +assertEq(a.foo2(), 2); +assertEq(a.foo3(), 3); +assertEq(a.foo4(), 4); + +// Symbols. +if (typeof Symbol === "function") { + var unique_sym = Symbol("1"), registered_sym = Symbol.for("2"); + a = { [unique_sym](){return 2;}, [registered_sym](){return 3;} }; + assertEq(a[unique_sym](), 2); + assertEq(a[registered_sym](), 3); +} + +// Method characteristics. +a = { b(){ return 4;} }; +b = Object.getOwnPropertyDescriptor(a, "b"); +assertEq(b.configurable, true); +assertEq(b.enumerable, true); +assertEq(b.writable, true); +assertEq(b.value(), 4); + +// Defining several methods using eval. +var code = "({"; +for (i = 0; i < 1000; i++) + code += "['foo' + " + i + "]() {return 'ok';}, " +code += "['bar']() {return 'all ok'}});"; +var obj = eval(code); +for (i = 0; i < 1000; i++) + assertEq(obj["foo" + i](), "ok"); +assertEq(obj["bar"](), "all ok"); + +// this +var obj = { + a : "hey", + meth(){return this.a;} +} +assertEq(obj.meth(), "hey"); + +// Inheritance +var obj2 = Object.create(obj); +assertEq(obj2.meth(), "hey"); + +var obj = { + a() { + return "hey"; + } +} +assertEq(obj.a.call(), "hey"); + +// Duplicates +var obj = { + meth : 3, + meth() { return 4; }, + meth() { return 5; } +} +assertEq(obj.meth(), 5); + +var obj = { + meth() { return 4; }, + meth() { return 5; }, + meth : 3 +} +assertEq(obj.meth, 3); +assertThrowsInstanceOf(function() {obj.meth();}, TypeError); + +// Strict mode +a = {b(c){"use strict";return c;}}; +assertEq(a.b(1), 1); +a = {["b"](c){"use strict";return c;}}; +assertEq(a.b(1), 1); + +// Tests provided by benvie in the bug to distinguish from ES5 desugar. +assertEq(({ method() {} }).method.name, "method"); +assertThrowsInstanceOf(function() {({ method() { method() } }).method() }, ReferenceError); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Class/methDefnGen.js b/source/spidermonkey-tests/ecma_6/Class/methDefnGen.js new file mode 100644 index 00000000..30f96db0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Class/methDefnGen.js @@ -0,0 +1,75 @@ +var BUGNUMBER = 924672; +var summary = 'Method Definitions - Generators' + +print(BUGNUMBER + ": " + summary); + +// Function definitions. +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e instanceof SyntaxError) { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + + +// Tests begin. + +syntaxError("{*a(){}}"); +syntaxError("b = {*(){}"); +syntaxError("b = {*{}"); +syntaxError("b = {*){}"); +syntaxError("b = {*({}"); +syntaxError("b = {*(){"); +syntaxError("b = {*()}"); +syntaxError("b = {*a("); +syntaxError("b = {*a)"); +syntaxError("b = {*a(}"); +syntaxError("b = {*a)}"); +syntaxError("b = {*a()"); +syntaxError("b = {*a()}"); +syntaxError("b = {*a(){}"); +syntaxError("b = {*a){}"); +syntaxError("b = {*a}}"); +syntaxError("b = {*a{}}"); +syntaxError("b = {*a({}}"); +syntaxError("b = {*a@(){}}"); +syntaxError("b = {*@(){}}"); +syntaxError("b = {*get a(){}}"); +syntaxError("b = {get *a(){}}"); +syntaxError("b = {get a*(){}}"); +syntaxError("b = {*set a(c){}}"); +syntaxError("b = {set *a(c){}}"); +syntaxError("b = {set a*(c){}}"); +syntaxError("b = {*a : 1}"); +syntaxError("b = {a* : 1}"); +syntaxError("b = {a :* 1}"); +syntaxError("b = {a*(){}}"); + +// Generator methods. +b = { * g() { + var a = { [yield 1]: 2, [yield 2]: 3}; + return a; +} } +var it = b.g(); +var next = it.next(); +assertEq(next.done, false); +assertEq(next.value, 1); +next = it.next("hello"); +assertEq(next.done, false); +assertEq(next.value, 2); +next = it.next("world"); +assertEq(next.done, true); +assertEq(next.value.hello, 2); +assertEq(next.value.world, 3); + +// Strict mode +a = {*b(c){"use strict";yield c;}}; +assertEq(a.b(1).next().value, 1); +a = {*["b"](c){"use strict";return c;}}; +assertEq(a.b(1).next().value, 1); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Class/shell.js b/source/spidermonkey-tests/ecma_6/Class/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/arguments.js b/source/spidermonkey-tests/ecma_6/Comprehensions/arguments.js new file mode 100644 index 00000000..08237477 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/arguments.js @@ -0,0 +1,14 @@ + + +function values(g) { + return [for (x of g) x]; +} + +function argumentsTest() { + return values((for (i of [0,1,2]) arguments[i])); +} + +assertDeepEq(argumentsTest('a', 'b', 'c'), ['a', 'b', 'c']); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/array-yield.js b/source/spidermonkey-tests/ecma_6/Comprehensions/array-yield.js new file mode 100644 index 00000000..69e69952 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/array-yield.js @@ -0,0 +1,23 @@ +// Interactions between yield and array comprehensions. + + +function assertIteratorResult(result, value, done) { + assertDeepEq(result.value, value); + assertEq(result.done, done); +} + +function* t1() { return [for (x of yield 0) x*2] } + +var o = t1(); +assertIteratorResult(o.next(), 0, false); +assertIteratorResult(o.next([0, 1, 2]), [0, 2, 4], true); + +function* t2() { return [for (x of [1,2,3]) yield x] } + +o = t2(); +assertIteratorResult(o.next(), 1, false); +assertIteratorResult(o.next(5), 2, false); +assertIteratorResult(o.next(6), 3, false); +assertIteratorResult(o.next(7), [5, 6, 7], true); + +reportCompare(null, null, "test"); diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/error-messages.js b/source/spidermonkey-tests/ecma_6/Comprehensions/error-messages.js new file mode 100644 index 00000000..ee8f9c21 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/error-messages.js @@ -0,0 +1,172 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +// This file tests contextual restrictions for yield and arguments, and is +// derived from js1_8/genexps/regress-634472.js. + +function error(str) { + var base; + try { + // the following line must not be broken up into multiple lines + base = (function(){try{eval('throw new Error()')}catch(e){return e.lineNumber}})(); eval(str); + return null; + } catch (e) { + e.lineNumber = e.lineNumber - base + 1; + return e; + } +} + +const YIELD_PAREN = error("(function*(){(for (y of (yield 1, 2)) y)})").message; +const GENEXP_YIELD = error("(function*(){(for (x of yield 1) x)})").message; +const TOP_YIELD = error("yield").message; +const GENERIC = error("(for)").message; +const BAD_GENERATOR_SYNTAX = error("(for (x of []) x, 1)").message; +const MISSING_SEMI = error("yield 1").message; +const MISSING_PAREN = error("(yield 1)").message; +const PAREN_PAREN = error("(foo").message; +const FOR_OF_PAREN = error("(for (x of y, z) w)").message; + +const cases = [ +// Expressions involving yield without a value, not currently implemented. Many +// of these errors would need to be updated. +//{ expr: "yield", top: TOP_YIELD, fun: null, gen: GENEXP_YIELD, desc: "simple yield" }, +//{ expr: "1, yield", top: TOP_YIELD, fun: null, gen: GENEXP_YIELD, desc: "simple yield at end of list" }, +//{ expr: "yield, 1", top: TOP_YIELD, fun: YIELD_PAREN, gen: YIELD_PAREN, desc: "simple yield in list" }, +//{ expr: "(yield)", top: TOP_YIELD, fun: null, gen: GENEXP_YIELD, desc: "simple yield, parenthesized" }, +//{ expr: "(1, yield)", top: TOP_YIELD, fun: null, gen: GENEXP_YIELD, desc: "simple yield at end of list, parenthesized" }, +//{ expr: "(yield, 1)", top: TOP_YIELD, fun: YIELD_PAREN, gen: YIELD_PAREN, desc: "simple yield in list, parenthesized" }, +//{ expr: "((((yield))))", top: TOP_YIELD, fun: null, gen: GENEXP_YIELD, desc: "deeply nested yield" }, +//{ expr: "(for (x of []) yield)", top: TOP_YIELD, fun: GENERIC, gen: GENERIC, desc: "simple yield in genexp" }, +//{ expr: "(for (x of []) yield, 1)", top: TOP_YIELD, fun: YIELD_PAREN, gen: YIELD_PAREN, desc: "simple yield in list in genexp" }, +//{ expr: "(for (x of []) 1, yield)", top: TOP_YIELD, fun: GENERIC, gen: GENERIC, desc: "simple yield at end of list in genexp" }, +//{ expr: "(for (x of []) (yield))", top: TOP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, desc: "simple yield, parenthesized in genexp" }, +//{ expr: "(for (x of []) 1, (yield))", top: TOP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, desc: "simple yield, parenthesized in list in genexp" }, +//{ expr: "(for (x of []) (1, yield))", top: TOP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, desc: "simple yield at end of list, parenthesized in genexp" }, +//{ expr: "(for (x of []) 1, (2, yield))", top: TOP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, desc: "simple yield at end of list, parenthesized in list in genexp" }, +//{ expr: "(for (x of []) (yield, 1))", top: TOP_YIELD, fun: YIELD_PAREN, gen: YIELD_PAREN, desc: "simple yield in list, parenthesized in genexp" }, +//{ expr: "(for (x of []) 1, (yield, 2))", top: TOP_YIELD, fun: YIELD_PAREN, gen: YIELD_PAREN, desc: "simple yield in list, parenthesized in list in genexp" }, +//{ expr: "(for (x of []) (function*() { yield }))", top: null, fun: null, gen: null, desc: "legal yield in nested function" }, + + // yield expressions + { expr: "yield 1", top: MISSING_SEMI, fun: MISSING_SEMI, gen: null, genexp: GENEXP_YIELD, desc: "yield w/ arg" }, + { expr: "1, yield 2", top: MISSING_SEMI, fun: MISSING_SEMI, gen: null, genexp: FOR_OF_PAREN, desc: "yield w/ arg at end of list" }, + { expr: "yield 1, 2", top: MISSING_SEMI, fun: MISSING_SEMI, gen: null, genexp: FOR_OF_PAREN, desc: "yield w/ arg in list" }, + { expr: "(yield 1)", top: MISSING_PAREN, fun: MISSING_PAREN, gen: null, genexp: GENEXP_YIELD, desc: "yield w/ arg, parenthesized" }, + { expr: "(1, yield 2)", top: MISSING_PAREN, fun: MISSING_PAREN, gen: null, genexp: GENEXP_YIELD, desc: "yield w/ arg at end of list, parenthesized" }, + { expr: "(yield 1, 2)", top: MISSING_PAREN, fun: MISSING_PAREN, gen: null, genexp: YIELD_PAREN, desc: "yield w/ arg in list, parenthesized" }, + + // deeply nested yield expressions + { expr: "((((yield 1))))", top: MISSING_PAREN, fun: MISSING_PAREN, gen: null, genexp: GENEXP_YIELD, desc: "deeply nested yield w/ arg" }, + + // arguments + { expr: "arguments", top: null, fun: null, gen: null, genexp: null, desc: "arguments in list" }, + { expr: "1, arguments", top: null, fun: null, gen: null, genexp: FOR_OF_PAREN, desc: "arguments in list" }, + + // yield in generator expressions + { expr: "(for (x of []) yield 1)", top: GENEXP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, genexp: GENEXP_YIELD, desc: "yield w/ arg in genexp" }, + { expr: "(for (x of []) yield 1, 2)", top: GENEXP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, genexp: GENEXP_YIELD, desc: "yield w/ arg in list in genexp" }, + { expr: "(for (x of []) 1, yield 2)", top: PAREN_PAREN, fun: PAREN_PAREN, gen: PAREN_PAREN, genexp: PAREN_PAREN, desc: "yield w/ arg at end of list in genexp" }, + { expr: "(for (x of []) (yield 1))", top: GENEXP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, genexp: GENEXP_YIELD, desc: "yield w/ arg, parenthesized in genexp" }, + { expr: "(for (x of []) 1, (yield 2))", top: PAREN_PAREN, fun: PAREN_PAREN, gen: PAREN_PAREN, genexp: PAREN_PAREN, desc: "yield w/ arg, parenthesized in list in genexp" }, + { expr: "(for (x of []) (1, yield 2))", top: GENEXP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, genexp: GENEXP_YIELD, desc: "yield w/ arg at end of list, parenthesized in genexp" }, + { expr: "(for (x of []) 1, (2, yield 3))", top: PAREN_PAREN, fun: PAREN_PAREN, gen: PAREN_PAREN, genexp: PAREN_PAREN, desc: "yield w/ arg at end of list, parenthesized in list in genexp" }, + { expr: "(for (x of []) (yield 1, 2))", top: YIELD_PAREN, fun: YIELD_PAREN, gen: YIELD_PAREN, genexp: YIELD_PAREN, desc: "yield w/ arg in list, parenthesized in genexp" }, + { expr: "(for (x of []) 1, (yield 2, 3))", top: PAREN_PAREN, fun: PAREN_PAREN, gen: PAREN_PAREN, genexp: PAREN_PAREN, desc: "yield w/ arg in list, parenthesized in list in genexp" }, + + // deeply nested yield in generator expressions + { expr: "(for (x of []) (((1, yield 2))))", top: GENEXP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, genexp: GENEXP_YIELD, desc: "deeply nested yield in genexp" }, + { expr: "(for (y of []) (for (x of []) ((1, yield 2))))", top: GENEXP_YIELD, fun: GENEXP_YIELD, gen: GENEXP_YIELD, genexp: GENEXP_YIELD, desc: "deeply nested yield in multiple genexps" }, + + // arguments in generator expressions + { expr: "(for (x of []) arguments)", top: null, fun: null, gen: null, genexp: null, desc: "simple arguments in genexp" }, + { expr: "(for (x of []) 1, arguments)", top: BAD_GENERATOR_SYNTAX, fun: BAD_GENERATOR_SYNTAX, gen: BAD_GENERATOR_SYNTAX, genexp: BAD_GENERATOR_SYNTAX, desc: "arguments in list in genexp" }, + { expr: "(for (x of []) (arguments))", top: null, fun: null, gen: null, genexp: null, desc: "arguments, parenthesized in genexp" }, + { expr: "(for (x of []) 1, (arguments))", top: BAD_GENERATOR_SYNTAX, fun: BAD_GENERATOR_SYNTAX, gen: BAD_GENERATOR_SYNTAX, genexp: BAD_GENERATOR_SYNTAX, desc: "arguments, parenthesized in list in genexp" }, + { expr: "(for (x of []) (1, arguments))", top: null, fun: null, gen: null, genexp: null, desc: "arguments in list, parenthesized in genexp" }, + { expr: "(for (x of []) 1, (2, arguments))", top: BAD_GENERATOR_SYNTAX, fun: BAD_GENERATOR_SYNTAX, gen: BAD_GENERATOR_SYNTAX, genexp: BAD_GENERATOR_SYNTAX, desc: "arguments in list, parenthesized in list in genexp" }, + + // deeply nested arguments in generator expressions + { expr: "(for (x of []) (((1, arguments))))", top: null, fun: null, gen: null, genexp: null, desc: "deeply nested arguments in genexp" }, + { expr: "(for (y of []) (for (x of []) ((1, arguments))))", top: null, fun: null, gen: null, genexp: null, desc: "deeply nested arguments in multiple genexps" }, + + // legal yield/arguments in nested function + { expr: "(for (x of []) (function*() { yield 1 }))", top: null, fun: null, gen: null, genexp: null, desc: "legal yield in nested function" }, + { expr: "(for (x of []) (function() { arguments }))", top: null, fun: null, gen: null, genexp: null, desc: "legal arguments in nested function" }, + { expr: "(for (x of []) (function() arguments))", top: null, fun: null, gen: null, genexp: null, desc: "legal arguments in nested expression-closure" } +]; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function splitKeyword(str) { + return str. +// replace(/[)] yield/, ')\nyield\n'). + replace(/yield ([0-9])/, '\nyield $1\n'). + replace(/yield([^ ]|$)/, '\nyield\n$1'). + replace(/arguments/, '\narguments\n'); +} + +function expectError1(err, ctx, msg) { + reportCompare('object', typeof err, 'exn for: ' + msg); + reportCompare(ctx, err.message, 'exn message for: ' + msg); + if (ctx !== BAD_GENERATOR_SYNTAX && ctx != PAREN_PAREN && ctx != FOR_OF_PAREN) + reportCompare(2, err.lineNumber, 'exn token for: ' + msg); +} + +function expectError(expr, wrapCtx, expect, msg) { + expectError1(error(wrapCtx(expr)), expect, msg); +} + +function expectSuccess(err, msg) { + reportCompare(null, err, 'parse: ' + msg); +} + +function atTop(str) { return str } +function inFun(str) { return '(function(){' + str + '})' } +function inGen(str) { return '(function*(){' + str + '})' } +function inGenExp(str) { return '(for (y of ' + str + ') y)' } + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0, len = cases.length; i < len; i++) { + var expr, top, fun, gen, genexp, desc; + expr = cases[i].expr; + top = cases[i].top; + fun = cases[i].fun; + gen = cases[i].gen; + genexp = cases[i].genexp; + desc = cases[i].desc; + + expr = splitKeyword(expr); + + if (top) + expectError(expr, atTop, top, 'top-level context, ' + desc); + else + expectSuccess(error(expr), 'top-level context, ' + desc); + + if (fun) + expectError(expr, inFun, fun, 'function context, ' + desc); + else + expectSuccess(error(inFun(expr)), 'function context, ' + desc); + + if (gen) + expectError(expr, inGen, gen, 'generator context, ' + desc); + else + expectSuccess(error(inGen(expr)), 'generator context, ' + desc); + + if (genexp) + expectError(expr, inGenExp, genexp, 'genexp context, ' + desc); + else + expectSuccess(error(inGenExp(expr)), 'genexp context, ' + desc); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/generator-semantics.js b/source/spidermonkey-tests/ecma_6/Comprehensions/generator-semantics.js new file mode 100644 index 00000000..52426115 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/generator-semantics.js @@ -0,0 +1,52 @@ +// Interaction of eval with generator expressions. +function a1() { + var a = 10; + var g = (for (y of [0]) eval('var a=42;')); + g.next(); + return a; +} +assertEq(a1(), 10); + +function a2() { + var a = 10; + (for (y of [0]) eval('a=42')).next(); + return a; +} +assertEq(a2(), 42) + +// Arguments and this. +function b1() { + return [for (arg of (for (i of [0, 1, 2]) arguments[i])) arg]; +} +assertDeepEq(b1('a', 'b', 'c'), ['a', 'b', 'c']); + +function b2() { + return [for (x of (for (i of [0]) this)) x]; +} +var b2o = { b2: b2 } +assertDeepEq(b2o.b2(), [b2o]) + +// Assignment to eval or arguments. +function c1() { + return [for (arg of (for (i of [0, 1, 2]) arguments = i)) arg]; +} +assertDeepEq(c1(), [0, 1, 2]); + +function c2() { + "use strict"; + return eval('[for (arg of (for (i of [0, 1, 2]) arguments = i)) arg]'); +} +assertThrows(c2, SyntaxError); + +function c3() { + return [for (arg of (for (i of [0, 1, 2]) eval = i)) arg]; +} +assertDeepEq(c3(), [0, 1, 2]); + +function c4() { + "use strict"; + return eval('[for (arg of (for (i of [0, 1, 2]) eval = i)) arg]'); +} +assertThrows(c4, SyntaxError); + +reportCompare(null, null, "test"); diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/nested-for-if.js b/source/spidermonkey-tests/ecma_6/Comprehensions/nested-for-if.js new file mode 100644 index 00000000..4e329118 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/nested-for-if.js @@ -0,0 +1,20 @@ +// For and if clauses can nest without limit in comprehensions. This is +// unlike JS 1.8 comprehensions, which can only have one trailing "if" +// clause. + +function* range(start, end) { + for (var n = start; n < end; n++) + yield n; +} + +function primesBetween6And25() { + return [for (n of range(6, 25)) if (n % 2) if (n % 3) if (n % 5) n]; +} +assertDeepEq(primesBetween6And25(), [7,11,13,17,19,23]); + +function countUpToEvens(limit) { + return [for (n of range(0, limit)) if (!(n % 2)) for (m of range(0, n)) m] +} +assertDeepEq(countUpToEvens(7), [0,1,0,1,2,3,0,1,2,3,4,5]); + +reportCompare(null, null, "test"); diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/scope.js b/source/spidermonkey-tests/ecma_6/Comprehensions/scope.js new file mode 100644 index 00000000..e9083d55 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/scope.js @@ -0,0 +1,18 @@ +// The identifier of a ComprehensionFor is only bound within its tail. + +function t() { + var x = [0, 1, 2]; + return [for (x of x) x*2] +} +assertDeepEq(t(), [0, 2, 4]); + +// Each iteration should create a fresh binding. Unfortunately this is +// not currently the case, but bug 449811 will fix this. +function t2() { + var x = [0, 1, 2]; + return [for (x of x) ()=>x] +} +// FIXME: Should be [0, 1, 2]. +assertDeepEq([for (x of t2()) x()], [2, 2, 2]); + +reportCompare(null, null, "test"); diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/shell.js b/source/spidermonkey-tests/ecma_6/Comprehensions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/sudoku.js b/source/spidermonkey-tests/ecma_6/Comprehensions/sudoku.js new file mode 100644 index 00000000..b49587ce --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/sudoku.js @@ -0,0 +1,175 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +function copy(obj) { + var o = {}; + for (var i in obj) + o[i] = obj[i]; + return o; +} + +Array.prototype.contains = String.prototype.contains = function (e) { + for (var elt of this) + if (elt == e) + return true; + return false; +} + +Array.prototype.repeat = String.prototype.repeat = function (n) { + var s = this.constructor(); + for (var i = 0; i < n; i++) + s = s.concat(this); + return s; +} + +String.prototype.center = function (w) { + var n = this.length; + if (w <= n) + return this; + var m = Math.floor((w - n) / 2); + return ' '.repeat(m) + this + ' '.repeat(w - n - m); +} + +Array.prototype.toString = Array.prototype.toSource +Object.prototype.toString = Object.prototype.toSource + +function all(seq) { + for (var e of seq) + if (!e) + return false; + return true; +} + +function some(seq) { + for (var e of seq) + if (e) + return e; + return false; +} + +function cross(A, B) { + return [for (a of A) for (b of B) a+b]; +} + +function dict(A) { + var d = {}; + for (var e of A) + d[e[0]] = e[1]; + return d; +} + +function set(A) { + var s = []; + for (var e of A) + if (!s.contains(e)) + s.push(e); + return s; +} + +function zip(A, B) { + var z = []; + var n = Math.min(A.length, B.length); + for (var i = 0; i < n; i++) + z.push([A[i], B[i]]); + return z; +} + +rows = 'ABCDEFGHI'; +cols = '123456789'; +digits = '123456789'; +squares = cross(rows, cols); +unitlist = [for (c of cols) cross(rows, c)] + .concat([for (r of rows) cross(r, cols)]) + .concat([for (rs of ['ABC','DEF','GHI']) for (cs of ['123','456','789']) cross(rs, cs)]); +units = dict((for (s of squares) + [s, [for (u of unitlist) if (u.contains(s)) u]])); + +peers = dict((for (s of squares) + [s, set([for (u of units[s]) for (s2 of u) if (s2 != s) s2])])); + +// Given a string of 81 digits (or . or 0 or -), return a dict of {cell:values}. +function parse_grid(grid) { + grid = [for (c of grid) if ('0.-123456789'.contains(c)) c]; + var values = dict((for (s of squares) [s, digits])); + + for (var pair of zip(squares, grid)) { + var s = pair[0], d = pair[1]; + if (digits.contains(d) && !assign(values, s, d)) + return false; + } + return values; +} + +// Eliminate all the other values (except d) from values[s] and propagate. +function assign(values, s, d) { + if (all((for (d2 of values[s]) if (d2 != d) eliminate(values, s, d2)))) + return values; + return false; +} + +// Eliminate d from values[s]; propagate when values or places <= 2. +function eliminate(values, s, d) { + if (!values[s].contains(d)) + return values; // Already eliminated + values[s] = values[s].replace(d, ''); + if (values[s].length == 0) + return false; // Contradiction: removed last value + if (values[s].length == 1) { + // If there is only one value (d2) left in square, remove it from peers + var d2 = values[s][0]; + if (!all((for (s2 of peers[s]) eliminate(values, s2, d2)))) + return false; + } + // Now check the places where d appears in the units of s + for (var u of units[s]) { + var dplaces = [for (s of u) if (values[s].contains(d)) s]; + if (dplaces.length == 0) + return false; + if (dplaces.length == 1) + // d can only be in one place in unit; assign it there + if (!assign(values, dplaces[0], d)) + return false; + } + return values; +} + +// Used for debugging. +function print_board(values) { + var width = 1 + Math.max.apply(Math, [for (s of squares) values[s].length]); + var line = '\n' + ['-'.repeat(width*3)].repeat(3).join('+'); + for (var r of rows) + print([for (c of cols) + values[r+c].center(width) + ('36'.contains(c) && '|' || '')] + .join('') + ('CF'.contains(r) && line || '')); + print('\n'); +} + +easy = "..3.2.6..9..3.5..1..18.64....81.29..7.......8..67.82....26.95..8..2.3..9..5.1.3.."; + +print_board(parse_grid(easy)); + +// Using depth-first search and constraint propagation, try all possible values. +function search(values) { + if (!values) + return false; // Failed earlier + if (all((for (s of squares) values[s].length == 1))) + return values; // Solved! + + // Choose the unfilled square s with the fewest possibilities + // XXX Math.min etc. should work with generator expressions and other iterators + // XXX Math.min etc. should work on arrays (lists or tuples in Python) as well as numbers + var a = [for (s of squares) if (values[s].length > 1) values[s].length + s].sort(); + var s = a[0].slice(-2); + + return some((for (d of values[s]) search(assign(copy(values), s, d)))); +} + +hard = '4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4......'; + +print_board(search(parse_grid(hard))) + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/syntax.js b/source/spidermonkey-tests/ecma_6/Comprehensions/syntax.js new file mode 100644 index 00000000..a57b1e6d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/syntax.js @@ -0,0 +1,6 @@ +// "let" is not allowed as an identifier. + +assertThrowsInstanceOf(function () { eval('[for (let of y) foo]') }, SyntaxError); +assertThrowsInstanceOf(function () { eval('(for (let of y) foo)') }, SyntaxError); + +reportCompare(null, null, "test"); diff --git a/source/spidermonkey-tests/ecma_6/Comprehensions/toSource.js b/source/spidermonkey-tests/ecma_6/Comprehensions/toSource.js new file mode 100644 index 00000000..5ce1db17 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Comprehensions/toSource.js @@ -0,0 +1,14 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +assertEq( function () { g = (for (d of [0]) d); g.next(); }.toSource(), + '(function () { g = (for (d of [0]) d); g.next(); })'); + + +assertEq( function () { return [for (d of [0]) d]; }.toSource(), + '(function () { return [for (d of [0]) d]; })'); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/DataView/browser.js b/source/spidermonkey-tests/ecma_6/DataView/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/DataView/shell.js b/source/spidermonkey-tests/ecma_6/DataView/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Expressions/binary-literals.js b/source/spidermonkey-tests/ecma_6/Expressions/binary-literals.js new file mode 100644 index 00000000..df1f2ed6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Expressions/binary-literals.js @@ -0,0 +1,115 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 894026; +var summary = "Implement ES6 binary literals"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var chars = ['b', 'B']; + +for (var i = 0; i < 2; i++) +{ + if (i === 2) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i); + throw "didn't throw"; + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + ", " + + "got " + e); + } + }); + continue; + } + + for (var j = 0; j < 2; j++) + { + if (j === 2) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j); + throw "didn't throw"; + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + ", " + + "got " + e); + } + }); + continue; + } + + for (var k = 0; k < 2; k++) + { + if (k === 2) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j + k); + throw "didn't throw"; + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + k + ", " + + "got " + e); + } + }); + continue; + } + + chars.forEach(function(v) + { + assertEq(eval('0' + v + i + j + k), i * 4 + j * 2 + k); + }); + } + } +} + +chars.forEach(function(v) +{ + try + { + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + ", got " + e); + } +}); + +// Off-by-one check: '/' immediately precedes '0'. +assertEq(0b110/1, 6); +assertEq(0B10110/1, 22); + +function strict() +{ + "use strict"; + return 0b11010101; +} +assertEq(strict(), 128 + 64 + 16 + 4 + 1); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Expressions/browser.js b/source/spidermonkey-tests/ecma_6/Expressions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Expressions/object-literal-__proto__.js b/source/spidermonkey-tests/ecma_6/Expressions/object-literal-__proto__.js new file mode 100644 index 00000000..531ef7fc --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Expressions/object-literal-__proto__.js @@ -0,0 +1,267 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 1061853; +var summary = + "__proto__ in object literals in non-__proto__:v contexts doesn't modify " + + "[[Prototype]]"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function hasOwn(obj, prop) +{ + return Object.getOwnPropertyDescriptor(obj, prop) !== undefined; +} + +var objectStart = "{ "; +var objectEnd = " }"; + +var members = + { + nullProto: "__proto__: null", + functionProtoProto: "__proto__: Function.prototype", + computedNull: "['__proto__']: null", + method: "__proto__() {}", + computedMethod: "['__proto__']() {}", + generatorMethod: "*__proto__() {}", + computedGenerator: "*['__proto__']() {}", + shorthand: "__proto__", + getter: "get __proto__() { return 42; }", + getterComputed: "get ['__proto__']() { return 42; }", + setter: "set __proto__(v) { }", + setterComputed: "set ['__proto__'](v) { }", + }; + +function isProtoMutation(key) +{ + return key === "nullProto" || key === "functionProtoProto"; +} + +function isGetter(key) +{ + return key === "getter" || key === "getterComputed"; +} + +function isSetter(key) +{ + return key === "setter" || key === "setterComputed"; +} + +function isData(key) +{ + return !isProtoMutation(key) && !isGetter(key) && !isSetter(key); +} + +var __proto__ = "string value"; + +function typeOfProto(key) +{ + if (key === "computedNull") + return "object"; + if (key === "method" || key === "computedMethod" || + key === "computedGenerator" || key === "generatorMethod") + { + return "function"; + } + if (key === "getter" || key === "getterComputed") + return "number"; + assertEq(key, "shorthand", "bug in test!"); + return "string"; +} + +for (var first in members) +{ + var fcode = "return " + objectStart + members[first] + objectEnd; + var f = Function(fcode); + var oneProp = f(); + + if (first === "nullProto") + { + assertEq(Object.getPrototypeOf(oneProp), null); + assertEq(hasOwn(oneProp, "__proto__"), false); + } + else if (first === "functionProtoProto") + { + assertEq(Object.getPrototypeOf(oneProp), Function.prototype); + assertEq(hasOwn(oneProp, "__proto__"), false); + } + else if (isSetter(first)) + { + assertEq(Object.getPrototypeOf(oneProp), Object.prototype); + assertEq(hasOwn(oneProp, "__proto__"), true); + assertEq(typeof Object.getOwnPropertyDescriptor(oneProp, "__proto__").set, + "function"); + } + else + { + assertEq(Object.getPrototypeOf(oneProp), Object.prototype); + assertEq(hasOwn(oneProp, "__proto__"), true); + assertEq(typeof oneProp.__proto__, typeOfProto(first)); + } + + for (var second in members) + { + try + { + var gcode = "return " + objectStart + members[first] + ", " + + members[second] + objectEnd; + var g = Function(gcode); + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "__proto__ member conflicts should be syntax errors, got " + e); + assertEq(+(first === "nullProto" || first === "functionProtoProto") + + +(second === "nullProto" || second === "functionProtoProto") > 1, + true, + "unexpected conflict between members: " + first + ", " + second); + continue; + } + + var twoProps = g(); + + if (first === "nullProto" || second === "nullProto") + assertEq(Object.getPrototypeOf(twoProps), null); + else if (first === "functionProtoProto" || second === "functionProtoProto") + assertEq(Object.getPrototypeOf(twoProps), Function.prototype); + else + assertEq(Object.getPrototypeOf(twoProps), Object.prototype); + + if (isSetter(second)) + { + assertEq(hasOwn(twoProps, "__proto__"), true); + assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get, + isGetter(first) ? "function" : "undefined"); + } + else if (!isProtoMutation(second)) + { + assertEq(hasOwn(twoProps, "__proto__"), true); + assertEq(typeof twoProps.__proto__, typeOfProto(second)); + if (isGetter(second)) + { + assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get, + "function"); + assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").set, + isSetter(first) ? "function" : "undefined"); + } + } + else if (isSetter(first)) + { + assertEq(hasOwn(twoProps, "__proto__"), true); + assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").set, + "function"); + assertEq(typeof Object.getOwnPropertyDescriptor(twoProps, "__proto__").get, + "undefined"); + } + else if (!isProtoMutation(first)) + { + assertEq(hasOwn(twoProps, "__proto__"), true); + assertEq(typeof twoProps.__proto__, typeOfProto(first)); + } + else + { + assertEq(true, false, "should be unreachable: " + first + ", " + second); + } + + for (var third in members) + { + try + { + var hcode = "return " + objectStart + members[first] + ", " + + members[second] + ", " + + members[third] + objectEnd; + var h = Function(hcode); + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "__proto__ member conflicts should be syntax errors, got " + e); + assertEq(+(first === "nullProto" || first === "functionProtoProto") + + +(second === "nullProto" || second === "functionProtoProto") + + +(third === "nullProto" || third === "functionProtoProto") > 1, + true, + "unexpected conflict among members: " + + first + ", " + second + ", " + third); + continue; + } + + var threeProps = h(); + + if (first === "nullProto" || second === "nullProto" || + third === "nullProto") + { + assertEq(Object.getPrototypeOf(threeProps), null); + } + else if (first === "functionProtoProto" || + second === "functionProtoProto" || + third === "functionProtoProto") + { + assertEq(Object.getPrototypeOf(threeProps), Function.prototype); + } + else + { + assertEq(Object.getPrototypeOf(threeProps), Object.prototype); + } + + if (isSetter(third)) + { + assertEq(hasOwn(threeProps, "__proto__"), true); + assertEq(typeof Object.getOwnPropertyDescriptor(threeProps, "__proto__").get, + isGetter(second) || (!isData(second) && isGetter(first)) + ? "function" + : "undefined", + "\n" + hcode); + } + else if (!isProtoMutation(third)) + { + assertEq(hasOwn(threeProps, "__proto__"), true); + assertEq(typeof threeProps.__proto__, typeOfProto(third), first + ", " + second + ", " + third); + if (isGetter(third)) + { + var desc = Object.getOwnPropertyDescriptor(threeProps, "__proto__"); + assertEq(typeof desc.get, "function"); + assertEq(typeof desc.set, + isSetter(second) || (!isData(second) && isSetter(first)) + ? "function" + : "undefined"); + } + } + else if (isSetter(second)) + { + assertEq(hasOwn(threeProps, "__proto__"), true); + assertEq(typeof Object.getOwnPropertyDescriptor(threeProps, "__proto__").get, + isGetter(first) ? "function" : "undefined"); + } + else if (!isProtoMutation(second)) + { + assertEq(hasOwn(threeProps, "__proto__"), true); + assertEq(typeof threeProps.__proto__, typeOfProto(second)); + if (isGetter(second)) + { + var desc = Object.getOwnPropertyDescriptor(threeProps, "__proto__"); + assertEq(typeof desc.get, "function"); + assertEq(typeof desc.set, + isSetter(first) ? "function" : "undefined"); + } + } + else + { + assertEq(true, false, + "should be unreachable: " + + first + ", " + second + ", " + third); + } + } + } +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Expressions/octal-literals.js b/source/spidermonkey-tests/ecma_6/Expressions/octal-literals.js new file mode 100644 index 00000000..abeef873 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Expressions/octal-literals.js @@ -0,0 +1,103 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 894026; +var summary = "Implement ES6 octal literals"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var chars = ['o', 'O']; + +for (var i = 0; i < 8; i++) +{ + if (i === 8) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i); + throw "didn't throw"; + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + ", " + + "got " + e); + } + }); + continue; + } + + for (var j = 0; j < 8; j++) + { + if (j === 8) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j); + throw "didn't throw"; + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + ", " + + "got " + e); + } + }); + continue; + } + + for (var k = 0; k < 8; k++) + { + if (k === 8) + { + chars.forEach(function(v) + { + try + { + eval('0' + v + i + j + k); + throw "didn't throw"; + } + catch (e) + { + assertEq(e instanceof SyntaxError, true, + "no syntax error evaluating 0" + v + i + j + k + ", " + + "got " + e); + } + }); + continue; + } + + chars.forEach(function(v) + { + assertEq(eval('0' + v + i + j + k), i * 64 + j * 8 + k); + }); + } + } +} + +// Off-by-one check: '/' immediately precedes '0'. +assertEq(0o110/2, 36); +assertEq(0O644/2, 210); + +function strict() +{ + "use strict"; + return 0o755; +} +assertEq(strict(), 7 * 64 + 5 * 8 + 5); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Expressions/shell.js b/source/spidermonkey-tests/ecma_6/Expressions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-1.js b/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-1.js new file mode 100644 index 00000000..d55fa75b --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-1.js @@ -0,0 +1,42 @@ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-objects.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js + +// Test that yield* re-yields received results without re-boxing. + +function results(results) { + var i = 0; + function next() { + return results[i++]; + } + var iter = { next: next } + var ret = {}; + ret[std_iterator] = function () { return iter; } + return ret; +} + +function* yield_results(expected) { + return yield* results(expected); +} + +function collect_results(iterable) { + var ret = []; + var result; + var iter = iterable[std_iterator](); + do { + result = iter.next(); + ret.push(result); + } while (!result.done); + return ret; +} + +// We have to put a full result for the end, because the return will re-box. +var expected = [{value: 1}, 13, "foo", {value: 34, done: true}]; + +// Sanity check. +assertDeepEq(expected, collect_results(results(expected))); +assertDeepEq(expected, collect_results(yield_results(expected))); + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-10.js b/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-10.js new file mode 100644 index 00000000..1f317023 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-10.js @@ -0,0 +1,49 @@ +// Errors accessing next, done, or value don't cause an exception to be +// thrown into the iterator of a yield*. + +function* g(n) { for (var i=0; i 0) { + yield n; + yield* countdown(--n); + } + return 34; +} + +function collect_results(iter) { + var ret = []; + var result; + do { + result = iter.next(); + ret.push(result); + } while (!result.done); + return ret; +} + +var expected = [ + // yield in countdown(3), n == 3 + {value: 3, done: false}, + // yield in yield* countdown(2), n == 2 + {value: 2, done: false}, + // yield in nested yield* countdown(1), n == 1 + {value: 1, done: false}, + // countdown(0) yields no values + // second go-through of countdown(2) loop, n == 1 + {value: 1, done: false}, + // second go-through of countdown(3) loop, n == 2 + {value: 2, done: false}, + // yield in yield* countdown(1), n == 1 + {value: 1, done: false}, + // third go-through of countdown(3) loop, n == 1 + {value: 1, done: false}, + // done + {value: 34, done: true} +]; + +assertDeepEq(expected, collect_results(countdown(3))); + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-9.js b/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-9.js new file mode 100644 index 00000000..60c35b94 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/delegating-yield-9.js @@ -0,0 +1,37 @@ +// Test that yield* can appear in a loop, and inside yield. + +function* countdown(n) { + while (n > 0) { + yield (yield* countdown(--n)); + } + return 34; +} + +function collect_results(iter) { + var ret = []; + var result; + do { + result = iter.next(); + ret.push(result); + } while (!result.done); + return ret; +} + +var expected = [ + // Only 34 yielded from the "yield" and the last return make it out. + // Three yields in countdown(3), two in countdown(2), and one in + // countdown(1) (called twice). + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: false}, + {value: 34, done: true}, // final +]; + +assertDeepEq(collect_results(countdown(3)), expected); + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Generators/iteration.js b/source/spidermonkey-tests/ecma_6/Generators/iteration.js new file mode 100644 index 00000000..a0673a1f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/iteration.js @@ -0,0 +1,574 @@ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-objects.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js + +// Test aspects of the generator runtime. + + +var GeneratorFunction = (function*(){yield 1;}).constructor; + + +function TestGeneratorResultPrototype() { + function* g() { yield 1; } + var iter = g(); + assertIteratorNext(iter, 1); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); +} +TestGeneratorResultPrototype(); + +function TestGenerator(g, expected_values_for_next, + send_val, expected_values_for_send) { + function testNext(thunk) { + var iter = thunk(); + for (var i = 0; i < expected_values_for_next.length; i++) { + assertIteratorResult(iter.next(), expected_values_for_next[i], + i == expected_values_for_next.length - 1); + } + assertIteratorDone(iter, undefined); + } + function testSend(thunk) { + var iter = thunk(); + for (var i = 0; i < expected_values_for_send.length; i++) { + assertIteratorResult(iter.next(send_val), + expected_values_for_send[i], + i == expected_values_for_send.length - 1); + } + assertIteratorDone(iter, undefined); + } + function testThrow(thunk) { + for (var i = 0; i < expected_values_for_next.length; i++) { + var iter = thunk(); + for (var j = 0; j < i; j++) { + assertIteratorResult(iter.next(), + expected_values_for_next[j], + j == expected_values_for_next.length - 1); + } + var Sentinel = function () {} + assertThrowsInstanceOf(function () { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + } + + testNext(g); + testSend(g); + testThrow(g); + + testNext(function*() { return yield* g(); }); + testSend(function*() { return yield* g(); }); + testThrow(function*() { return yield* g(); }); + + if (g instanceof GeneratorFunction) { + testNext(function() { return new g(); }); + testSend(function() { return new g(); }); + testThrow(function() { return new g(); }); + } +} + +TestGenerator(function* g1() { }, + [undefined], + "foo", + [undefined]); + +TestGenerator(function* g2() { yield 1; }, + [1, undefined], + "foo", + [1, undefined]); + +TestGenerator(function* g3() { yield 1; yield 2; }, + [1, 2, undefined], + "foo", + [1, 2, undefined]); + +TestGenerator(function* g4() { yield 1; yield 2; return 3; }, + [1, 2, 3], + "foo", + [1, 2, 3]); + +TestGenerator(function* g5() { return 1; }, + [1], + "foo", + [1]); + +TestGenerator(function* g6() { var x = yield 1; return x; }, + [1, undefined], + "foo", + [1, "foo"]); + +TestGenerator(function* g7() { var x = yield 1; yield 2; return x; }, + [1, 2, undefined], + "foo", + [1, 2, "foo"]); + +TestGenerator(function* g8() { for (var x = 0; x < 4; x++) { yield x; } }, + [0, 1, 2, 3, undefined], + "foo", + [0, 1, 2, 3, undefined]); + +// Generator with arguments. +TestGenerator( + function g9() { + return (function*(a, b, c, d) { + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// Too few arguments. +TestGenerator( + function g10() { + return (function*(a, b, c, d) { + yield a; yield b; yield c; yield d; + })("fee", "fi"); + }, + ["fee", "fi", undefined, undefined, undefined], + "foo", + ["fee", "fi", undefined, undefined, undefined]); + +// Too many arguments. +TestGenerator( + function g11() { + return (function*(a, b, c, d) { + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum", "I smell the blood of an Englishman"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// The arguments object. +TestGenerator( + function g12() { + return (function*(a, b, c, d) { + for (var i = 0; i < arguments.length; i++) { + yield arguments[i]; + } + })("fee", "fi", "fo", "fum", "I smell the blood of an Englishman"); + }, + ["fee", "fi", "fo", "fum", "I smell the blood of an Englishman", + undefined], + "foo", + ["fee", "fi", "fo", "fum", "I smell the blood of an Englishman", + undefined]); + +// Access to captured free variables. +TestGenerator( + function g13() { + return (function(a, b, c, d) { + return (function*() { + yield a; yield b; yield c; yield d; + })(); + })("fee", "fi", "fo", "fum"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// Abusing the arguments object. +TestGenerator( + function g14() { + return (function*(a, b, c, d) { + arguments[0] = "Be he live"; + arguments[1] = "or be he dead"; + arguments[2] = "I'll grind his bones"; + arguments[3] = "to make my bread"; + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum"); + }, + ["Be he live", "or be he dead", "I'll grind his bones", "to make my bread", + undefined], + "foo", + ["Be he live", "or be he dead", "I'll grind his bones", "to make my bread", + undefined]); + +// Abusing the arguments object: strict mode. +TestGenerator( + function g15() { + return (function*(a, b, c, d) { + "use strict"; + arguments[0] = "Be he live"; + arguments[1] = "or be he dead"; + arguments[2] = "I'll grind his bones"; + arguments[3] = "to make my bread"; + yield a; yield b; yield c; yield d; + })("fee", "fi", "fo", "fum"); + }, + ["fee", "fi", "fo", "fum", undefined], + "foo", + ["fee", "fi", "fo", "fum", undefined]); + +// GC. +if (typeof gc == 'function') { + TestGenerator(function* g16() { yield "baz"; gc(); yield "qux"; }, + ["baz", "qux", undefined], + "foo", + ["baz", "qux", undefined]); +} + +// Receivers. +TestGenerator( + function g17() { + function* g() { yield this.x; yield this.y; } + var o = { start: g, x: 1, y: 2 }; + return o.start(); + }, + [1, 2, undefined], + "foo", + [1, 2, undefined]); + +// FIXME: Capture the generator object as "this" in new g(). Bug 907742. +// TestGenerator( +// function g18() { +// function* g() { yield this.x; yield this.y; } +// var iter = new g; +// iter.x = 1; +// iter.y = 2; +// return iter; +// }, +// [1, 2, undefined], +// "foo", +// [1, 2, undefined]); + +TestGenerator( + function* g19() { + var x = 1; + yield x; + with({x:2}) { yield x; } + yield x; + }, + [1, 2, 1, undefined], + "foo", + [1, 2, 1, undefined]); + +TestGenerator( + function* g20() { yield (1 + (yield 2) + 3); }, + [2, NaN, undefined], + "foo", + [2, "1foo3", undefined]); + +TestGenerator( + function* g21() { return (1 + (yield 2) + 3); }, + [2, NaN], + "foo", + [2, "1foo3"]); + +TestGenerator( + function* g22() { yield (1 + (yield 2) + 3); yield (4 + (yield 5) + 6); }, + [2, NaN, 5, NaN, undefined], + "foo", + [2, "1foo3", 5, "4foo6", undefined]); + +TestGenerator( + function* g23() { + return (yield (1 + (yield 2) + 3)) + (yield (4 + (yield 5) + 6)); + }, + [2, NaN, 5, NaN, NaN], + "foo", + [2, "1foo3", 5, "4foo6", "foofoo"]); + +// Rewind a try context with and without operands on the stack. +TestGenerator( + function* g24() { + try { + return (yield (1 + (yield 2) + 3)) + (yield (4 + (yield 5) + 6)); + } catch (e) { + throw e; + } + }, + [2, NaN, 5, NaN, NaN], + "foo", + [2, "1foo3", 5, "4foo6", "foofoo"]); + +// Yielding in a catch context, with and without operands on the stack. +TestGenerator( + function* g25() { + try { + throw (yield (1 + (yield 2) + 3)) + } catch (e) { + if (typeof e == 'object') throw e; + return e + (yield (4 + (yield 5) + 6)); + } + }, + [2, NaN, 5, NaN, NaN], + "foo", + [2, "1foo3", 5, "4foo6", "foofoo"]); + +// Generator function instances. +TestGenerator(GeneratorFunction(), + [undefined], + "foo", + [undefined]); + +TestGenerator(new GeneratorFunction(), + [undefined], + "foo", + [undefined]); + +TestGenerator(GeneratorFunction('yield 1;'), + [1, undefined], + "foo", + [1, undefined]); + +TestGenerator( + function() { return GeneratorFunction('x', 'y', 'yield x + y;')(1, 2) }, + [3, undefined], + "foo", + [3, undefined]); + +// Access to this with formal arguments. +TestGenerator( + function () { + return ({ x: 42, g: function* (a) { yield this.x } }).g(0); + }, + [42, undefined], + "foo", + [42, undefined]); + +function TestTryCatch(instantiate) { + function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } + function Sentinel() {} + + function Test1(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test1(instantiate(g)); + + function Test2(iter) { + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test2(instantiate(g)); + + function Test3(iter) { + assertIteratorNext(iter, 1); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test3(instantiate(g)); + + function Test4(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test4(instantiate(g)); + + function Test5(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + + } + Test5(instantiate(g)); + + function Test6(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test6(instantiate(g)); +} +TestTryCatch(function (g) { return g(); }); +TestTryCatch(function* (g) { return yield* g(); }); + +function TestTryFinally(instantiate) { + function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } + function Sentinel() {} + function Sentinel2() {} + + function Test1(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test1(instantiate(g)); + + function Test2(iter) { + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test2(instantiate(g)); + + function Test3(iter) { + assertIteratorNext(iter, 1); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test3(instantiate(g)); + + function Test4(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorResult(iter.throw(new Sentinel), 3, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel); + assertIteratorDone(iter, undefined); + + } + Test4(instantiate(g)); + + function Test5(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorResult(iter.throw(new Sentinel), 3, false); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel2); }, Sentinel2); + assertIteratorDone(iter, undefined); + } + Test5(instantiate(g)); + + function Test6(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test6(instantiate(g)); + + function Test7(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test7(instantiate(g)); +} +TestTryFinally(function (g) { return g(); }); +TestTryFinally(function* (g) { return yield* g(); }); + +function TestNestedTry(instantiate) { + function* g() { + try { + yield 1; + try { yield 2; } catch (e) { yield e; } + yield 3; + } finally { + yield 4; + } + yield 5; + } + function Sentinel() {} + function Sentinel2() {} + + function Test1(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertIteratorNext(iter, 5); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + } + Test1(instantiate(g)); + + function Test2(iter) { + assertThrowsInstanceOf(function() { iter.throw(new Sentinel); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test2(instantiate(g)); + + function Test3(iter) { + assertIteratorNext(iter, 1); + assertIteratorResult(iter.throw(new Sentinel), 4, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel); + assertIteratorDone(iter, undefined); + } + Test3(instantiate(g)); + + function Test4(iter) { + assertIteratorNext(iter, 1); + assertIteratorResult(iter.throw(new Sentinel), 4, false); + assertThrowsInstanceOf(function() { iter.throw(new Sentinel2); }, Sentinel2); + assertIteratorDone(iter, undefined); + } + Test4(instantiate(g)); + + function Test5(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertIteratorNext(iter, 4); + assertIteratorNext(iter, 5); + assertIteratorDone(iter, undefined); + assertIteratorDone(iter, undefined); + + } + Test5(instantiate(g)); + + function Test6(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorResult(iter.throw(new Sentinel2), 4, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel2); + assertIteratorDone(iter, undefined); + } + Test6(instantiate(g)); + + function Test7(iter) { + assertIteratorNext(iter, 1); + assertIteratorNext(iter, 2); + var exn = new Sentinel; + assertIteratorResult(iter.throw(exn), exn, false); + assertIteratorNext(iter, 3); + assertIteratorResult(iter.throw(new Sentinel2), 4, false); + assertThrowsInstanceOf(function() { iter.next(); }, Sentinel2); + assertIteratorDone(iter, undefined); + + } + Test7(instantiate(g)); + + // That's probably enough. +} +TestNestedTry(function (g) { return g(); }); +TestNestedTry(function* (g) { return yield* g(); }); + +function TestRecursion() { + function TestNextRecursion() { + function* g() { yield iter.next(); } + var iter = g(); + return iter.next(); + } + function TestSendRecursion() { + function* g() { yield iter.next(42); } + var iter = g(); + return iter.next(); + } + function TestThrowRecursion() { + function* g() { yield iter.throw(1); } + var iter = g(); + return iter.next(); + } + assertThrowsInstanceOf(TestNextRecursion, TypeError); + assertThrowsInstanceOf(TestSendRecursion, TypeError); + assertThrowsInstanceOf(TestThrowRecursion, TypeError); +} +TestRecursion(); + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Generators/objects.js b/source/spidermonkey-tests/ecma_6/Generators/objects.js new file mode 100644 index 00000000..aaeba185 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/objects.js @@ -0,0 +1,52 @@ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-objects.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-objects.js + +// Test aspects of the generator runtime. + +// Test the properties and prototype of a generator object. +function TestGeneratorObject() { + function* g() { yield 1; } + + var iter = g(); + assertEq(Object.getPrototypeOf(iter), g.prototype); + assertTrue(iter instanceof g); + assertEq(String(iter), "[object Generator]"); + assertDeepEq(Object.getOwnPropertyNames(iter), []); + assertNotEq(g(), iter); + + // g() is the same as new g(). + iter = new g(); + assertEq(Object.getPrototypeOf(iter), g.prototype); + assertTrue(iter instanceof g); + assertEq(String(iter), "[object Generator]"); + assertDeepEq(Object.getOwnPropertyNames(iter), []); + assertNotEq(new g(), iter); +} +TestGeneratorObject(); + + +// Test the methods of generator objects. +function TestGeneratorObjectMethods() { + function* g() { yield 1; } + var iter = g(); + + function TestNonGenerator(non_generator) { + assertThrowsInstanceOf(function() { iter.next.call(non_generator); }, TypeError); + assertThrowsInstanceOf(function() { iter.next.call(non_generator, 1); }, TypeError); + assertThrowsInstanceOf(function() { iter.throw.call(non_generator, 1); }, TypeError); + assertThrowsInstanceOf(function() { iter.close.call(non_generator); }, TypeError); + } + + TestNonGenerator(1); + TestNonGenerator({}); + TestNonGenerator(function(){}); + TestNonGenerator(g); + TestNonGenerator(g.prototype); +} +TestGeneratorObjectMethods(); + + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Generators/runtime.js b/source/spidermonkey-tests/ecma_6/Generators/runtime.js new file mode 100644 index 00000000..e5f39991 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/runtime.js @@ -0,0 +1,131 @@ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-runtime.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-runtime.js + +// Test aspects of the generator runtime. + +// See http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.19.3. + +function assertSyntaxError(str) { + assertThrowsInstanceOf(Function(str), SyntaxError); +} + + +function f() { } +function* g() { yield 1; } +var GeneratorFunctionPrototype = Object.getPrototypeOf(g); +var GeneratorFunction = GeneratorFunctionPrototype.constructor; +var GeneratorObjectPrototype = GeneratorFunctionPrototype.prototype; + + +// A generator function should have the same set of properties as any +// other function. +function TestGeneratorFunctionInstance() { + var f_own_property_names = Object.getOwnPropertyNames(f); + var g_own_property_names = Object.getOwnPropertyNames(g); + + f_own_property_names.sort(); + g_own_property_names.sort(); + + assertDeepEq(f_own_property_names, g_own_property_names); + var i; + for (i = 0; i < f_own_property_names.length; i++) { + var prop = f_own_property_names[i]; + var f_desc = Object.getOwnPropertyDescriptor(f, prop); + var g_desc = Object.getOwnPropertyDescriptor(g, prop); + assertEq(f_desc.configurable, g_desc.configurable, prop); + assertEq(f_desc.writable, g_desc.writable, prop); + assertEq(f_desc.enumerable, g_desc.enumerable, prop); + } +} +TestGeneratorFunctionInstance(); + + +// Generators have an additional object interposed in the chain between +// themselves and Function.prototype. +function TestGeneratorFunctionPrototype() { + // Sanity check. + assertEq(Object.getPrototypeOf(f), Function.prototype); + assertNotEq(GeneratorFunctionPrototype, Function.prototype); + assertEq(Object.getPrototypeOf(GeneratorFunctionPrototype), + Function.prototype); + assertEq(Object.getPrototypeOf(function* () {}), + GeneratorFunctionPrototype); +} +TestGeneratorFunctionPrototype(); + + +// Functions that we associate with generator objects are actually defined by +// a common prototype. +function TestGeneratorObjectPrototype() { + assertEq(Object.getPrototypeOf(GeneratorObjectPrototype), + Object.prototype); + assertEq(Object.getPrototypeOf((function*(){yield 1}).prototype), + GeneratorObjectPrototype); + + var expected_property_names = ["next", "throw", "constructor"]; + if (!JS_HAS_SYMBOLS) + expected_property_names.push(std_iterator); + var found_property_names = + Object.getOwnPropertyNames(GeneratorObjectPrototype); + + expected_property_names.sort(); + found_property_names.sort(); + + assertDeepEq(found_property_names, expected_property_names); +} +TestGeneratorObjectPrototype(); + + +// This tests the object that would be called "GeneratorFunction", if it were +// like "Function". +function TestGeneratorFunction() { + assertEq(GeneratorFunctionPrototype, GeneratorFunction.prototype); + assertTrue(g instanceof GeneratorFunction); + + assertEq(Function, Object.getPrototypeOf(GeneratorFunction)); + assertTrue(g instanceof Function); + + assertEq("function* g() { yield 1; }", g.toString()); + + // Not all functions are generators. + assertTrue(f instanceof Function); // Sanity check. + assertFalse(f instanceof GeneratorFunction); + + assertTrue((new GeneratorFunction()) instanceof GeneratorFunction); + assertTrue(GeneratorFunction() instanceof GeneratorFunction); + + assertTrue(GeneratorFunction('yield 1') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('return 1') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('a', 'yield a') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('a', 'return a') instanceof GeneratorFunction); + assertTrue(GeneratorFunction('a', 'return a') instanceof GeneratorFunction); + assertSyntaxError("GeneratorFunction('yield', 'return yield')"); + assertTrue(GeneratorFunction('with (x) return foo;') instanceof GeneratorFunction); + assertSyntaxError("GeneratorFunction('\"use strict\"; with (x) return foo;')"); + + // Doesn't matter particularly what string gets serialized, as long + // as it contains "function*" and "yield 10". + assertEq(GeneratorFunction('yield 10').toString(), + "function* anonymous() {\nyield 10\n}"); +} +TestGeneratorFunction(); + + +function TestPerGeneratorPrototype() { + assertNotEq((function*(){}).prototype, (function*(){}).prototype); + assertNotEq((function*(){}).prototype, g.prototype); + assertEq(typeof GeneratorFunctionPrototype, "object"); + assertEq(g.prototype.__proto__.constructor, GeneratorFunctionPrototype, "object"); + assertEq(Object.getPrototypeOf(g.prototype), GeneratorObjectPrototype); + assertFalse(g.prototype instanceof Function); + assertEq(typeof (g.prototype), "object"); + + assertDeepEq(Object.getOwnPropertyNames(g.prototype), []); +} +TestPerGeneratorPrototype(); + + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Generators/shell.js b/source/spidermonkey-tests/ecma_6/Generators/shell.js new file mode 100644 index 00000000..b12da1af --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/shell.js @@ -0,0 +1,28 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var std_iterator = (function() { + try { + for (var _ of new Proxy({}, { get: function(_, name) { throw name; } })) + break; + } catch (name) { + return name; + } + throw 'wat'; +})(); + +function assertFalse(a) { assertEq(a, false) } +function assertTrue(a) { assertEq(a, true) } +function assertNotEq(found, not_expected) { assertFalse(found === expected) } +function assertIteratorResult(result, value, done) { + assertDeepEq(result.value, value); + assertEq(result.done, done); +} +function assertIteratorNext(iter, value) { + assertIteratorResult(iter.next(), value, false); +} +function assertIteratorDone(iter, value) { + assertIteratorResult(iter.next(), value, true); +} diff --git a/source/spidermonkey-tests/ecma_6/Generators/syntax.js b/source/spidermonkey-tests/ecma_6/Generators/syntax.js new file mode 100644 index 00000000..8c5f8517 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Generators/syntax.js @@ -0,0 +1,127 @@ +// This file was written by Andy Wingo and originally +// contributed to V8 as generators-parsing.js, available here: +// +// http://code.google.com/p/v8/source/browse/branches/bleeding_edge/test/mjsunit/harmony/generators-parsing.js + +function assertSyntaxError(str) { + var msg; + var evil = eval; + try { + // Non-direct eval. + evil(str); + } catch (exc) { + if (exc instanceof SyntaxError) + return; + msg = "Assertion failed: expected SyntaxError, got " + exc; + } + if (msg === undefined) + msg = "Assertion failed: expected SyntaxError, but no exception thrown"; + throw new Error(msg + " - " + str); +} + +// Yield statements. +function* g() { yield 3; yield 4; } + +// Yield expressions. +function* g() { (yield 3) + (yield 4); } + +// Yield without a RHS. +function* g() { yield; } +function* g() { yield } +function* g() { + yield +} +function* g() { (yield) } +function* g() { [yield] } +function* g() { {yield} } +function* g() { yield, yield } +function* g() { yield; yield } +function* g() { (yield) ? yield : yield } +function* g() { + (yield) + ? yield + : yield +} + +// If yield has a RHS, it needs to start on the same line. The * in a +// yield* counts as starting the RHS. +function* g() { + yield * + foo +} +assertThrows("function* g() { yield\n* foo }", SyntaxError); +assertIteratorNext(function*(){ + yield + 3 + }(), undefined) + +// A YieldExpression is not a LogicalORExpression. +assertThrows("function* g() { yield ? yield : yield }", SyntaxError); + +// You can have a generator in strict mode. +function* g() { "use strict"; yield 3; yield 4; } + +// Generators can have return statements also, which internally parse to a kind +// of yield expression. +function* g() { yield 1; return; } +function* g() { yield 1; return 2; } +function* g() { yield 1; return 2; yield "dead"; } + +// Generator expression. +(function* () { yield 3; }); + +// Named generator expression. +(function* g() { yield 3; }); + +// Generators do not have to contain yield expressions. +function* g() { } + +// YieldExpressions can occur in the RHS of a YieldExpression. +function* g() { yield yield 1; } +function* g() { yield 3 + (yield 4); } + +// Generator definitions with a name of "yield" are not specifically ruled out +// by the spec, as the `yield' name is outside the generator itself. However, +// in strict-mode, "yield" is an invalid identifier. +function* yield() { (yield 3) + (yield 4); } +assertSyntaxError("function* yield() { 'use strict'; (yield 3) + (yield 4); }"); + +// In classic mode, yield is a normal identifier, outside of generators. +function yield(yield) { yield: yield (yield + yield (0)); } + +// Yield is always valid as a key in an object literal. +({ yield: 1 }); +function* g() { yield ({ yield: 1 }) } +function* g() { yield ({ get yield() { return 1; }}) } + +// Yield is a valid property name. +function* g(obj) { yield obj.yield; } + +// Checks that yield is a valid label in classic mode, but not valid in a strict +// mode or in generators. +function f() { yield: 1 } +assertSyntaxError("function f() { 'use strict'; yield: 1 }") +assertSyntaxError("function* g() { yield: 1 }") + +// Yield is only a keyword in the body of the generator, not in nested +// functions. +function* g() { function f(yield) { yield (yield + yield (0)); } } + +// Yield in a generator is not an identifier. +assertSyntaxError("function* g() { yield = 10; }"); + +// Yield binds very loosely, so this parses as "yield (3 + yield 4)", which is +// invalid. +assertSyntaxError("function* g() { yield 3 + yield 4; }"); + +// Yield is still a future-reserved-word in strict mode +assertSyntaxError("function f() { 'use strict'; var yield = 13; }"); + +// The name of the NFE is let-bound in G, so is invalid. +assertSyntaxError("function* g() { yield (function yield() {}); }"); + +// In generators, yield is invalid as a formal argument name. +assertSyntaxError("function* g(yield) { yield (10); }"); + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/LexicalEnvironment/browser.js b/source/spidermonkey-tests/ecma_6/LexicalEnvironment/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/LexicalEnvironment/shell.js b/source/spidermonkey-tests/ecma_6/LexicalEnvironment/shell.js new file mode 100644 index 00000000..4d731295 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/LexicalEnvironment/shell.js @@ -0,0 +1,5 @@ +// NOTE: This only turns on 1.8.5 in shell builds. The browser requires the +// futzing in js/src/tests/browser.js (which only turns on 1.8, the most +// the browser supports). +if (typeof version != 'undefined') + version(185); diff --git a/source/spidermonkey-tests/ecma_6/LexicalEnvironment/with-global-ignores-global-let-variables.js b/source/spidermonkey-tests/ecma_6/LexicalEnvironment/with-global-ignores-global-let-variables.js new file mode 100644 index 00000000..0f816ac4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/LexicalEnvironment/with-global-ignores-global-let-variables.js @@ -0,0 +1,25 @@ +// |reftest| fails-if(Function("try{Function('let\x20x=5;');return(1,eval)('let\x20x=3;\\'x\\'\x20in\x20this');}catch(e){return(true);}")()) -- needs bug 589199 fix (top-level let not same as var); please convert AssertEq to assertEq when removing this fails-if, too +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +let v = "global-v"; + +function f(v, global) +{ + with (global) + return v; +} + +// Don't use assertEq because it triggers tbpl error-highlighting false +// positives. When this test isn't fails-if, just use assertEq directly. +var AssertEq = typeof reportCompare === "function" + ? (act, exp, msg) => reportCompare(exp, act, msg) + : assertEq; + +AssertEq(f("argument-v", this), "argument-v", + "let-var shouldn't appear in global for |with| purposes"); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Map/NaN-as-key.js b/source/spidermonkey-tests/ecma_6/Map/NaN-as-key.js new file mode 100644 index 00000000..6fa5ee67 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Map/NaN-as-key.js @@ -0,0 +1,55 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 722260; +var summary = 'All NaNs must be treated as identical keys for Map'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* Avoid constant-folding that would happen were |undefined| to be used. */ +var key = -/a/g.missingProperty; + +var m = new Map(); +m.set(key, 17); +assertEq(m.get(key), 17); +assertEq(m.get(-key), 17); +assertEq(m.get(NaN), 17); + +m.delete(-key); +assertEq(m.has(key), false); +assertEq(m.has(-key), false); +assertEq(m.has(NaN), false); + +m.set(-key, 17); +assertEq(m.get(key), 17); +assertEq(m.get(-key), 17); +assertEq(m.get(NaN), 17); + +m.delete(NaN); +assertEq(m.has(key), false); +assertEq(m.has(-key), false); +assertEq(m.has(NaN), false); + +m.set(NaN, 17); +assertEq(m.get(key), 17); +assertEq(m.get(-key), 17); +assertEq(m.get(NaN), 17); + +m.delete(key); +assertEq(m.has(key), false); +assertEq(m.has(-key), false); +assertEq(m.has(NaN), false); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Map/browser.js b/source/spidermonkey-tests/ecma_6/Map/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Map/forEach-selfhosted-behavior.js b/source/spidermonkey-tests/ecma_6/Map/forEach-selfhosted-behavior.js new file mode 100644 index 00000000..ed4d8b57 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Map/forEach-selfhosted-behavior.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 987243; +var summary = "Don't use .call(...) in the self-hosted Map.prototype.forEach"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var functionCall = Function.prototype.call; + +function throwSyntaxError() +{ + throw new SyntaxError("Function.prototype.call incorrectly called"); +} + +function lalala() {} + +Function.prototype.call = throwSyntaxError; + +new Map().forEach(throwSyntaxError); +new Map([[1, 2]]).forEach(lalala); +new Map([[1, 2], [3, 4]]).forEach(lalala); + +Function.prototype.call = function() { this.set(42, "fnord"); }; + +new Map().forEach(throwSyntaxError); +new Map([[1, 2]]).forEach(lalala); +new Map([[1, 2], [3, 4]]).forEach(lalala); + +var callCount = 0; +Function.prototype.call = function() { callCount++; }; + +new Map().forEach(throwSyntaxError); +new Map([[1, 2]]).forEach(lalala); +new Map([[1, 2], [3, 4]]).forEach(lalala); + +assertEq(callCount, 0); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Map/shell.js b/source/spidermonkey-tests/ecma_6/Map/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Map/symbols.js b/source/spidermonkey-tests/ecma_6/Map/symbols.js new file mode 100644 index 00000000..f6fe795d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Map/symbols.js @@ -0,0 +1,35 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + var m = new Map; + + // Symbols can be Map keys. + var sym = Symbol(); + m.set(sym, "zero"); + assertEq(m.has(sym), true); + assertEq(m.get(sym), "zero"); + assertEq(m.has(Symbol()), false); + assertEq(m.get(Symbol()), undefined); + assertEq([...m][0][0], sym); + m.set(sym, "replaced"); + assertEq(m.get(sym), "replaced"); + m.delete(sym); + assertEq(m.has(sym), false); + assertEq(m.size, 0); + + // Symbols returned by Symbol.for() can be Map keys. + for (var word of "that that is is that that is not is not is that not it".split(' ')) { + sym = Symbol.for(word); + m.set(sym, (m.get(sym) || 0) + 1); + } + assertDeepEq([...m], [ + [Symbol.for("that"), 5], + [Symbol.for("is"), 5], + [Symbol.for("not"), 3], + [Symbol.for("it"), 1] + ]); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Math/20.2.2.ToNumber.js b/source/spidermonkey-tests/ecma_6/Math/20.2.2.ToNumber.js new file mode 100644 index 00000000..de1f4e61 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/20.2.2.ToNumber.js @@ -0,0 +1,112 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +/* + * ECMA-262 6th Edition / Draft November 8, 2013 + * + * 20.2.2 Function Properties of the Math Object + */ + +/* + * This custom object will allow us to check if valueOf() is called + */ + +TestNumber.prototype = new Number(); + +function TestNumber(value) { + this.value = value; + this.valueOfCalled = false; +} + +TestNumber.prototype = { + valueOf: function() { + this.valueOfCalled = true; + return this.value; + } +} + +// Verify that each TestNumber's flag is set after calling Math func +function test(func /*, args */) { + var args = Array.prototype.slice.call(arguments, 1); + func.apply(null, args); + + for (var i = 0; i < args.length; ++i) + assertEq(args[i].valueOfCalled, true); +} + +// Note that we are not testing these functions' return values +// We only test whether valueOf() is called for each argument + +// 1. Test Math.atan2() +var x = new TestNumber(1); +test(Math.atan2, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.atan2, y, x); + +// Remove comment block once patch for bug 896264 is approved +/* +// 2. Test Math.hypot() +var x = new TestNumber(1); +test(Math.hypot, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.hypot, x, y); + +var x = new TestNumber(1); +var y = new TestNumber(2); +var z = new TestNumber(3); +test(Math.hypot, x, y, z); +*/ + +// Remove comment block once patch for bug 808148 is approved +/* +// 3. Test Math.imul() +var x = new TestNumber(1); +test(Math.imul, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.imul, x, y); +*/ + +// 4. Test Math.max() +var x = new TestNumber(1); +test(Math.max, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.max, x, y); + +var x = new TestNumber(1); +var y = new TestNumber(2); +var z = new TestNumber(3); +test(Math.max, x, y, z); + +// 5. Test Math.min() +var x = new TestNumber(1); +test(Math.min, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.min, x, y); + +var x = new TestNumber(1); +var y = new TestNumber(2); +var z = new TestNumber(3); +test(Math.min, x, y, z); + +// 6. Test Math.pow() +var x = new TestNumber(1); +test(Math.pow, x); + +var x = new TestNumber(1); +var y = new TestNumber(2); +test(Math.pow, x, y); + +reportCompare(0, 0, "ok"); + diff --git a/source/spidermonkey-tests/ecma_6/Math/acosh-approx.js b/source/spidermonkey-tests/ecma_6/Math/acosh-approx.js new file mode 100644 index 00000000..53800e2e --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/acosh-approx.js @@ -0,0 +1,283 @@ +var cosh_data = [ + [1.0000014305114746, 0.0016914556651292944], + [1.0000019073486328, 0.001953124689559275], + [1.000007152557373, 0.003782208044661295], + [1.000013828277588, 0.005258943946801101], + [1.0000171661376953, 0.005859366618129203], + [1.0000600814819336, 0.010961831992188852], + [1.0001168251037598, 0.015285472131830425], + [1.0001487731933594, 0.017249319093529877], + [1.0003981590270996, 0.028218171738655373], + [1.000638484954834, 0.03573281468231457], + [1.0010714530944824, 0.046287402472878776], + [1.0030217170715332, 0.07771996527168971], + [1.0049939155578613, 0.0998975930860278], + [1.0092840194702148, 0.13615938768032465], + [1.024169921875, 0.21942279004958354], + [1.0622773170471191, 0.3511165938166055], + [1.1223440170288086, 0.48975026711288183], + [1.2495574951171875, 0.692556883708491], + [1.4912219047546387, 0.954530572221414], + [1.9838471412658691, 1.307581416910453], + [2.1576128005981445, 1.4035188779741334], + [2.406397819519043, 1.5250070845427517], + [3.386958122253418, 1.8905372013072799], + [4.451677322387695, 2.1735673399948254], + [6.9391326904296875, 2.625091127868242], + [7.756023406982422, 2.737434918695162], + [8.882369995117188, 2.8740317167801948], + [9.869171142578125, 2.97998639328949], + [16.848876953125, 3.516549380542481], + [16.88458251953125, 3.51867003468025], + [18.18859100341797, 3.593185165198829], + [18.82012176513672, 3.6273672142963385], + [19.184181213378906, 3.646553244410946], + [24.039520263671875, 3.872413451393967], + [26.556991577148438, 3.972085568933329], + [27.921104431152344, 4.022209178119238], + [32.314666748046875, 4.168428891496629], + [34.73008728027344, 4.240546229861005], + [36.51556396484375, 4.290698214968891], + [38.851287841796875, 4.352722738491574], + [49.46875, 4.594386162629449], + [49.67265319824219, 4.598500387004538], + [55.821014404296875, 4.7152173401856095], + [57.119781494140625, 4.73822104001982], + [60.37983703613281, 4.793733825338029], + [63.4661865234375, 4.8435923769530165], + [63.822418212890625, 4.849190310904695], + [64.36642456054688, 4.85767897228448], + [65.82318115234375, 4.880061548144127], + [68.60302734375, 4.921430721025434], + [70.173583984375, 4.94406835208057], + [71.80126953125, 4.967000841791218], + [75.40786743164062, 5.016014824864732], + [75.49771118164062, 5.017205657609766], + [78.06475830078125, 5.0506448716550825], + [79.64892578125, 5.0707363201405276], + [79.8707275390625, 5.073517411135063], + [82.14324951171875, 5.101574796209937], + [86.42214965820312, 5.152357710985635], + [87.75869750976562, 5.167705692500117], + [94.24942016601562, 5.2390637098028074], + [95.00259399414062, 5.247023676519904], + [96.06402587890625, 5.258134994273664], + [99.10101318359375, 5.289261389093961], + [104.82595825195312, 5.345425863147171], + [105.89431762695312, 5.3555664787245885], + [106.750244140625, 5.363617180711895], + [109.40167236328125, 5.388152468690488], + [111.29598999023438, 5.405320225963013], + [112.68215942382812, 5.417698597745429], + [115.84786987304688, 5.445406415908933], + [122.51895141601562, 5.501396249028249], + [126.29083251953125, 5.531718947357248], + [127.88677978515625, 5.544277233951787], + [128.29241943359375, 5.547444176085567], + [129.49658203125, 5.556786759298988], + [138.73651123046875, 5.625710723366437], + [139.18450927734375, 5.628934733085022], + [139.9705810546875, 5.634566685055491], + [143.6336669921875, 5.660401141376928], + [149.2176513671875, 5.698541939965668], + [150.61602783203125, 5.7078698961812995], + [151.65460205078125, 5.714741890601693], + [154.77532958984375, 5.735111323217677], + [158.9586181640625, 5.761781191641161], + [159.23260498046875, 5.763503378028959], + [166.89166259765625, 5.810483079631769], + [169.22418212890625, 5.824362807770767], + [170.85247802734375, 5.833939098607025], + [175.641845703125, 5.861586030831371], + [176.47808837890625, 5.866335876872544], + [177.0284423828125, 5.869449614294116], + [178.81622314453125, 5.879497954012966], + [181.28570556640625, 5.893213844044451], + [190.84246826171875, 5.944588630523773], + [191.39764404296875, 5.947493525920713], + [194.2606201171875, 5.962341215900494], + [194.89630126953125, 5.9656082276276], + [196.72125244140625, 5.9749284849312865], + [196.76788330078125, 5.975165500176202], + [198.0592041015625, 5.981706804024238], + [199.97052001953125, 5.991310884439669], + [202.70001220703125, 6.004868209578554], + [204.95684814453125, 6.0159406892865155], + [206.92059326171875, 6.025476453825986], + [211.4588623046875, 6.047172064627678], + [211.6217041015625, 6.0479418642231595], + [212.15936279296875, 6.050479329955437], + [219.93341064453125, 6.086466833749719], + [223.34747314453125, 6.101870903204913], + [228.56036376953125, 6.1249427443985525], + [229.53656005859375, 6.129204755426344], + [231.15753173828125, 6.136241935513706], + [235.22589111328125, 6.153688953514383], + [237.17108154296875, 6.1619244798633215], + [237.904541015625, 6.165012268502458], + [243.202392578125, 6.187036941752032], + [244.296875, 6.191527178125454], + [245.39239501953125, 6.196001570568187], + [245.80389404296875, 6.197677082130341], + [249.68365478515625, 6.2133379061260285], + [252.32763671875, 6.223871642756905], + [253.4725341796875, 6.228398760115369], + [264.1583251953125, 6.269692237869835], + [265.867919921875, 6.276143287577458], + [273.893798828125, 6.305884283737176], + [274.060546875, 6.306492908028797], + [274.06298828125, 6.3065018163217115], + [275.31201171875, 6.31104892482331], + [281.2171630859375, 6.3322712125431915], + [284.3428955078125, 6.343324976847916], + [284.8428955078125, 6.345081883725142], + [287.3035888671875, 6.353683609448096], + [290.8973388671875, 6.366114643735997], + [293.0467529296875, 6.373476431987165], + [293.048583984375, 6.3734826803404045], + [296.819091796875, 6.3862671775996915], + [297.6572265625, 6.389086936901673], + [308.40625, 6.424562459508495], + [316.5472412109375, 6.4506171773701535], + [320.2418212890625, 6.462221144761522], + [322.33642578125, 6.468740575092418], + [323.5101318359375, 6.472375224718483], + [327.8939208984375, 6.485834999462654], + [328.0833740234375, 6.486412623146554], + [328.214599609375, 6.486812521370483], + [332.13916015625, 6.498698952535687], + [339.6888427734375, 6.521175044233963], + [340.171630859375, 6.522595306993373], + [340.22998046875, 6.522766822935215], + [340.9984130859375, 6.52502285413445], + [347.719482421875, 6.5445411825986985], + [347.921142578125, 6.5451209675856825], + [349.8392333984375, 6.55061885367159], + [353.1812744140625, 6.560126626713879], + [353.3170166015625, 6.560510895819139], + [354.9730224609375, 6.565186990039135], + [355.6412353515625, 6.567067660815945], + [363.193603515625, 6.588081320423386], + [363.7503662109375, 6.5896131163651415], + [366.66650390625, 6.597598047275183], + [370.5828857421875, 6.608222493065004], + [371.822998046875, 6.611563301604297], + [375.8822021484375, 6.622421213257873], + [377.1107177734375, 6.625684248051368], + [377.588623046875, 6.626950731244344], + [378.8428955078125, 6.630267034079059], + [379.1123046875, 6.630977920761718], + [381.1038818359375, 6.636217452968849], + [382.1112060546875, 6.638857149899159], + [382.9927978515625, 6.641161660644278], + [387.1845703125, 6.652047018118426], + [389.669921875, 6.658445560711748], + [389.804443359375, 6.658790721334144], + [396.3114013671875, 6.675345858154136], + [397.005126953125, 6.677094789236718], + [397.1934814453125, 6.6775691166680895], + [397.8046875, 6.679106750673113], + [398.8426513671875, 6.681712590609845], + [399.1663818359375, 6.682523938576487], + [399.2547607421875, 6.68274532345516], + [400.33984375, 6.685459416477178], + [403.9578857421875, 6.694456277839498], + [404.279541015625, 6.6952522228540765], + [405.0574951171875, 6.6971746771142415], + [407.328125, 6.702764738337774], + [407.547119140625, 6.7033022311799595], + [410.5994873046875, 6.710763953621196], + [410.8016357421875, 6.711256159037373], + [411.129638671875, 6.712054288828399], + [411.9053955078125, 6.713939407502346], + [415.5833740234375, 6.722828986708716], + [417.669189453125, 6.727835453862132], + [420.517822265625, 6.734632628835641], + [424.3853759765625, 6.743787740494532], + [424.7154541015625, 6.744565219553757], + [436.3419189453125, 6.7715720212680655], + [438.501953125, 6.776510146304201], + [439.3369140625, 6.778412462065226], + [445.5606689453125, 6.79247934060035], + [452.9901123046875, 6.809016260337229], + [453.77490234375, 6.810747231716348], + [456.7745361328125, 6.817335895109251], + [457.9520263671875, 6.819910421197311], + [458.6795654296875, 6.821497844004013], + [460.5164794921875, 6.8254946428721475], + [461.8717041015625, 6.828433164406687], + [464.7025146484375, 6.834543470287694], + [467.0626220703125, 6.839609377592375], + [467.0712890625, 6.839627933844213], + [470.096923828125, 6.846084943645239], + [475.1607666015625, 6.856799276049143], + [477.5537109375, 6.861822721577315], + [478.626220703125, 6.864066049482581], + [478.7958984375, 6.864420497333681], + [479.6864013671875, 6.866278653973069], + [479.7867431640625, 6.866487814627139], + [479.9122314453125, 6.8667493311188395], + [482.4793701171875, 6.872084270243208], + [482.5181884765625, 6.872164723177875], + [483.8797607421875, 6.874982560453874], + [484.4649658203125, 6.876191234145179], + [485.3258056640625, 6.877966548833207], + [490.57373046875, 6.888721726428236], + [493.7423095703125, 6.89515989558997], + [494.272216796875, 6.896232568812718], + [496.44775390625, 6.900624415355815], + [497.0401611328125, 6.901816998553275], + [498.234130859375, 6.9042162822876465], + [665.0791015625, 7.193052598670793], + [1170.29150390625, 7.758155143419732], + [2058.7958984375, 8.323023697145112], + [5824.533203125, 9.36298131161099], + [9114.30859375, 9.810748008110926], + [31388.40625, 11.047341056314202], + [53732.765625, 11.584925435512535], + [117455.09375, 12.366958539207397], + [246210.625, 13.107089828327874], + [513670.125, 13.84248373881162], + [788353.25, 14.27084873575108], + [1736171, 15.060339852215408], + [3770530, 15.835873313657556], + [4344090, 15.977474039173265], + [11419360, 16.943967899150145], + [31023240, 17.943394339560967], + [40665424, 18.214035936745432], + [129788064, 19.374560581709215], + [225668224, 19.927723623778547], + [450631936, 20.619308638400597], + [750941952, 21.129986093026698], + [1887358976, 22.05159150215413], + [3738011648, 22.734966842639743], + [7486695424, 23.42954051928097], + [12668080128, 23.955498471391667], + [23918272512, 24.591055724582848], + [48862560256, 25.305424481799395], + [113763549184, 26.150535181949436], + [161334755328, 26.499894449532565], + [321933279232, 27.19075733422632], + [715734122496, 27.989721778208146], + [1875817529344, 28.953212876533797] +]; + +var sloppy_tolerance = 1000; // FIXME + +for (var [x, y] of cosh_data) + assertNear(Math.acosh(x), y, sloppy_tolerance); + +assertNear(Math.acosh(1e300), 691.4686750787737, sloppy_tolerance); +assertNear(Math.acosh(1.0000000001), 0.000014142136208675862, sloppy_tolerance); + +for (var i = 0; i <= 100; i++) { + var x = (i - 50) / 5; + var y = Math.cosh(x); + var z = Math.acosh(y); + assertNear(z, Math.abs(x), sloppy_tolerance); +} + +for (var i = 1; i < 20; i++) + assertNear(Math.acosh(Math.cosh(i)), i, sloppy_tolerance); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/acosh-exact.js b/source/spidermonkey-tests/ecma_6/Math/acosh-exact.js new file mode 100644 index 00000000..ededaa48 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/acosh-exact.js @@ -0,0 +1,26 @@ +// Properties of Math.acosh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.acosh(NaN), NaN); + +// If x is less than 1, the result is NaN. +assertEq(Math.acosh(ONE_MINUS_EPSILON), NaN); +assertEq(Math.acosh(Number.MIN_VALUE), NaN); +assertEq(Math.acosh(+0), NaN); +assertEq(Math.acosh(-0), NaN); +assertEq(Math.acosh(-Number.MIN_VALUE), NaN); +assertEq(Math.acosh(-1), NaN); +assertEq(Math.acosh(-Number.MAX_VALUE), NaN); +assertEq(Math.acosh(-Infinity), NaN); + +for (var i = -20; i < 1; i++) + assertEq(Math.acosh(i), NaN); + +// If x is 1, the result is +0. +assertEq(Math.acosh(1), +0); + +// If x is +∞, the result is +∞. +assertEq(Math.acosh(Number.POSITIVE_INFINITY), Number.POSITIVE_INFINITY); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/asinh-approx.js b/source/spidermonkey-tests/ecma_6/Math/asinh-approx.js new file mode 100644 index 00000000..daf60ed8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/asinh-approx.js @@ -0,0 +1,305 @@ +var sinh_data = [ + [-497.181640625, -6.902103625349695], + [-495.216552734375, -6.898143347143859], + [-488.0980224609375, -6.883664481302669], + [-486.4609375, -6.880304842490273], + [-482.2261962890625, -6.871561546509046], + [-468.167236328125, -6.841973895837549], + [-465.553955078125, -6.836376331805493], + [-464.288330078125, -6.833654100575195], + [-463.558837890625, -6.8320816635009045], + [-453.82861328125, -6.8108680173663085], + [-448.7835693359375, -6.799689165151487], + [-446.0499267578125, -6.793579326246197], + [-432.4046630859375, -6.762510387544996], + [-424.145751953125, -6.743225720989222], + [-402.8682861328125, -6.691758395994307], + [-402.4595947265625, -6.690743430063694], + [-390.1383056640625, -6.6596501292114505], + [-387.5355224609375, -6.652956360641761], + [-381.0023193359375, -6.635954365364267], + [-374.8172607421875, -6.619587562578274], + [-374.1033935546875, -6.617681179427804], + [-373.01318359375, -6.614762741096185], + [-370.0938720703125, -6.60690568753706], + [-364.5230712890625, -6.591738907156094], + [-361.3756103515625, -6.583066984213974], + [-358.1136474609375, -6.573999516974134], + [-350.8861083984375, -6.553610904389896], + [-350.7060546875, -6.553097634736138], + [-345.5616455078125, -6.538320325468202], + [-342.386962890625, -6.529090881007076], + [-341.9425048828125, -6.527791927233787], + [-337.3883056640625, -6.514383886150781], + [-328.8133544921875, -6.488639771044976], + [-326.1348876953125, -6.480460592697477], + [-313.12744140625, -6.439759999015992], + [-311.6180419921875, -6.434927968512049], + [-303.40478515625, -6.4082177348965725], + [-291.9320068359375, -6.369671035834965], + [-289.791015625, -6.362310184909175], + [-288.07568359375, -6.356373428913315], + [-282.76220703125, -6.337756593913614], + [-278.9659423828125, -6.32424009706147], + [-276.1881103515625, -6.314232650754295], + [-269.843994140625, -6.290994606392703], + [-256.47509765625, -6.240182555852785], + [-248.91619873046875, -6.2102675039793604], + [-245.71783447265625, -6.197335184435549], + [-244.9049072265625, -6.194021350132335], + [-242.49176025390625, -6.184119163536406], + [-223.97491455078125, -6.104686221071835], + [-223.0770263671875, -6.100669325836893], + [-221.50177001953125, -6.093582856519022], + [-214.1610107421875, -6.0598807500687935], + [-202.9705810546875, -6.0062142965262515], + [-200.1683349609375, -5.9923121073369945], + [-198.0869140625, -5.981859446096083], + [-191.8330078125, -5.9497792165852905], + [-183.4495849609375, -5.90509449745879], + [-182.9005126953125, -5.902097012275789], + [-167.5517578125, -5.8144483910067954], + [-162.87738037109375, -5.786154254111214], + [-159.6142578125, -5.765917008989405], + [-150.01629638671875, -5.703902219845274], + [-148.34051513671875, -5.6926689504460395], + [-147.23760986328125, -5.685206387751923], + [-143.65484619140625, -5.660572815631807], + [-138.70599365234375, -5.625516713960633], + [-119.55416870117188, -5.476934234171879], + [-118.44155883789062, -5.467584665632571], + [-112.7041015625, -5.417932675603434], + [-111.43020629882812, -5.406565756574079], + [-107.77297973632812, -5.373195678988387], + [-107.6795654296875, -5.3723285712183735], + [-105.091796875, -5.348004040102253], + [-101.261474609375, -5.31087758970896], + [-95.79150390625, -5.255348419702703], + [-91.26885986328125, -5.206986845736275], + [-87.33349609375, -5.162914035396619], + [-78.23873901367188, -5.052952927749896], + [-77.912353515625, -5.048772883924985], + [-76.83489990234375, -5.034848487644809], + [-61.255645751953125, -4.808269821238499], + [-54.41380310058594, -4.689849459883311], + [-43.967193603515625, -4.476720236388958], + [-42.01084899902344, -4.431216695067421], + [-30.609375, -4.114720236218123], + [-26.711166381835938, -3.9785790831656023], + [-25.241317749023438, -3.9220215830953484], + [-14.624359130859375, -3.3770026324620295], + [-12.431087493896484, -3.214961448471211], + [-10.235607147216797, -3.021397455139021], + [-9.41094970703125, -2.937831931335705], + [-1.635939121246338, -1.267878515574959], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.3050326092288742e-8, 2.305032609228874e-8], + [5.9392490925347374e-8, 5.939249092534734e-8], + [1.166764889148908e-7, 1.1667648891489053e-7], + [2.3799674409019644e-7, 2.379967440901942e-7], + [4.684659415943315e-7, 4.6846594159431437e-7], + [9.382699772686465e-7, 9.382699772685088e-7], + [0.00000110398559627356, 0.0000011039855962733358], + [0.0000032917760108830407, 0.000003291776010877096], + [0.00000751721381675452, 0.000007517213816683722], + [0.000015114666894078255, 0.000015114666893502755], + [0.00002986399340443313, 0.00002986399339999406], + [0.00003387028118595481, 0.000033870281179478836], + [0.00009066011989489198, 0.00009066011977069884], + [0.00021949532674625516, 0.00021949532498377364], + [0.00043952150736004114, 0.00043952149320897676], + [0.0006333151832222939, 0.0006333151408864353], + [0.001115123275667429, 0.0011151230445582744], + [0.001962467096745968, 0.0019624658370807177], + [0.005553754046559334, 0.005553725496786973], + [0.008691128343343735, 0.008691018931968294], + [0.02993336319923401, 0.02992889492062484], + [0.05124260485172272, 0.05122020579778827], + [0.11201295256614685, 0.1117800293787828], + [0.23480379581451416, 0.23269806521543376], + [0.4898730516433716, 0.4721357117742938], + [0.7518312931060791, 0.694611571189336], + [1.655740737915039, 1.2781607348262256], + [3.5958566665649414, 1.9917262343245115], + [3.662705421447754, 2.009484184971722], + [4.142845153808594, 2.128787712416205], + [5.957065582275391, 2.4846967934155475], + [10.890350341796875, 3.083125584533294], + [27.3714599609375, 4.002981567623351], + [29.58606719970703, 4.080736210902826], + [30.79753875732422, 4.120845430011113], + [38.78157043457031, 4.351258506393416], + [46.88148498535156, 4.540883728536112], + [47.21551513671875, 4.547981853382592], + [47.2205810546875, 4.5480891170767], + [49.72361755371094, 4.599728302509061], + [61.557464599609375, 4.8131842711857535], + [67.82162475585938, 4.910082619934558], + [68.82363891601562, 4.924747230639767], + [73.75466918945312, 4.993937439635391], + [80.95669555664062, 5.087099712053554], + [85.26406860351562, 5.1389346970196295], + [85.2677001953125, 5.138977285472121], + [92.8238525390625, 5.223879832616765], + [94.50357055664062, 5.241812789460327], + [116.044677734375, 5.447141014648796], + [123.77554321289062, 5.511633288238573], + [132.3592529296875, 5.578681289305598], + [139.7633056640625, 5.633110296634631], + [143.9609375, 5.662701238627725], + [146.31298828125, 5.678906941005323], + [155.0980224609375, 5.737214893086866], + [155.47784423828125, 5.739660763047893], + [155.74066162109375, 5.741349685869528], + [163.60546875, 5.790614371552514], + [178.735107421875, 5.879059869096351], + [179.70269775390625, 5.884458728291027], + [179.81976318359375, 5.885109945587401], + [181.3594970703125, 5.893636014368936], + [194.82861328125, 5.965274032538233], + [195.23284912109375, 5.967346683696556], + [199.07666015625, 5.986843466070591], + [205.77423095703125, 6.019932686217942], + [206.04608154296875, 6.021252909681261], + [209.36480712890625, 6.037231102920489], + [210.703857421875, 6.043606439928324], + [215.2139892578125, 6.06478541011501], + [225.83892822265625, 6.112974120371601], + [226.95465087890625, 6.117902255760311], + [232.79864501953125, 6.1433256889594094], + [240.647216796875, 6.176483527820343], + [243.1324462890625, 6.186757751007361], + [251.26702880859375, 6.219667373726848], + [253.72906494140625, 6.229418088083555], + [254.6866455078125, 6.233184983047428], + [257.2001953125, 6.243005711460192], + [257.7401123046875, 6.245102704489327], + [261.731201171875, 6.260468857392134], + [263.75, 6.268152459140511], + [265.5167236328125, 6.2748285545831655], + [273.9171142578125, 6.305976070434008], + [278.897705078125, 6.32399546069982], + [279.167236328125, 6.324961403980197], + [292.207275390625, 6.370613506132747], + [293.5975341796875, 6.375359978930309], + [293.9749755859375, 6.3766447200146], + [295.1998291015625, 6.380802563199264], + [297.2799072265625, 6.387824152942429], + [297.9285888671875, 6.390003820200831], + [298.1058349609375, 6.3905985680679], + [300.2803955078125, 6.397866642974941], + [307.531005859375, 6.421725738171608], + [308.1754150390625, 6.423818963102848], + [309.7344970703125, 6.428865255911759], + [314.2847900390625, 6.443449261058927], + [314.7236328125, 6.444844602076255], + [320.8406982421875, 6.464094341970107], + [321.2459716796875, 6.465356699668166], + [321.9031982421875, 6.467400466944125], + [323.457763671875, 6.472218114936839], + [330.82861328125, 6.4947499213823265], + [335.008544921875, 6.507305446835735], + [340.7171630859375, 6.524202033435675], + [348.4677734375, 6.546694993078936], + [349.1292724609375, 6.548591493378012], + [372.4288330078125, 6.613194950203132], + [376.7574462890625, 6.6247505436339065], + [378.4306640625, 6.629181796246806], + [390.9031982421875, 6.6616087711302185], + [405.7918701171875, 6.698989091751707], + [407.3646240234375, 6.702857353572475], + [413.3758544921875, 6.717505881986416], + [415.7354736328125, 6.723197804327891], + [417.193603515625, 6.726699007993023], + [420.874755859375, 6.735483889307782], + [429.2635498046875, 6.755219602793124], + [429.756103515625, 6.756366380816258], + [433.9931640625, 6.766177290841293], + [434.0106201171875, 6.766217511883346], + [440.073974609375, 6.780091308338912], + [450.2220458984375, 6.802889310303153], + [455.017578125, 6.813484439494547], + [457.1668701171875, 6.818196843455478], + [457.5068359375, 6.818940201487998], + [459.2913818359375, 6.822833193143805], + [459.492431640625, 6.82327083544577], + [459.743896484375, 6.823817951018], + [464.888427734375, 6.834945773756887], + [464.96630859375, 6.835113285253827], + [467.6949462890625, 6.840964582694129], + [468.86767578125, 6.84346890521034], + [470.5927734375, 6.847141429556457], + [481.109619140625, 6.869243403190376], + [487.4595947265625, 6.882355637062964], + [488.521484375, 6.884531678915821], + [492.8812255859375, 6.89341643293734], + [494.0684814453125, 6.895822338701104], + [496.4613037109375, 6.900653737167637], + [716.154052734375, 7.2670429692740965], + [1799.92578125, 8.188647968122073], + [3564.845703125, 8.872023251113289], + [7139.869140625, 9.566596912986167], + [12081.22265625, 10.092554861905608], + [22810.2421875, 10.728112113864427], + [46598.96875, 11.442480870715618], + [108493.375, 12.28759157077177], + [153860.8125, 12.636950838344218], + [307019.5, 13.327813723030063], + [682577.25, 14.126778167009777], + [1788919, 15.090269265334971], + [3769169, 15.835512291283944], + [4327820, 15.973721689554742], + [11044024, 16.910547205715446], + [21423208, 17.573132558903225], + [62828288, 18.649063156437965], + [70207360, 18.760110887365155], + [154231424, 19.547111966180875], + [294509056, 20.193967491567523], + [1070557184, 21.484592263156223], + [1957922816, 22.088297141021556], + [3912507392, 22.780591462699917], + [7279233024, 23.401438520318692], + [9665245184, 23.684949498080787], + [22627590144, 24.5355829820426], + [60601991168, 25.520740767599584], + [134018236416, 26.31438890085422], + [204864946176, 26.73876398039979], + [284346286080, 27.06660583008718], + [914576637952, 28.234874284944635], + [1581915832320, 28.78280496108106] +]; + +var sloppy_tolerance = 1000; // FIXME + +for (var [x, y] of sinh_data) + assertNear(Math.asinh(x), y, sloppy_tolerance); + +assertNear(Math.asinh(1e300), 691.4686750787737, sloppy_tolerance); +assertNear(Math.asinh(1e-300), 1e-300, sloppy_tolerance); +assertNear(Math.asinh(1e-5), 0.000009999999999833334, sloppy_tolerance); +assertNear(Math.asinh(0.3), 0.29567304756342244, sloppy_tolerance); +assertNear(Math.asinh(1), 0.881373587019543, sloppy_tolerance); + +for (var i = 0; i <= 80; i++) { + var x = (i - 40) / 4; + assertNear(Math.asinh(Math.sinh(x)), x, sloppy_tolerance); +} + +for (var i = -20; i < 20; i++) + assertNear(Math.asinh(Math.sinh(i)), i, sloppy_tolerance); + +reportCompare(0, 0, "ok"); + diff --git a/source/spidermonkey-tests/ecma_6/Math/asinh-exact.js b/source/spidermonkey-tests/ecma_6/Math/asinh-exact.js new file mode 100644 index 00000000..49463d01 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/asinh-exact.js @@ -0,0 +1,19 @@ +// Properties of Math.asinh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.asinh(NaN), NaN); + +// If x is +0, the result is +0. +assertEq(Math.asinh(+0), +0); + +// If x is −0, the result is −0. +assertEq(Math.asinh(-0), -0); + +// If x is +∞, the result is +∞. +assertEq(Math.asinh(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assertEq(Math.asinh(-Infinity), -Infinity); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/atanh-approx.js b/source/spidermonkey-tests/ecma_6/Math/atanh-approx.js new file mode 100644 index 00000000..998db4e7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/atanh-approx.js @@ -0,0 +1,280 @@ +var tanh_data = [ + [-0.9999983310699463, -6.998237084679027], + [-0.9999978542327881, -6.87257975132917], + [-0.999992847442627, -6.2705920974657525], + [-0.9999861717224121, -5.940967614084813], + [-0.9999828338623047, -5.832855225378502], + [-0.9999399185180664, -5.20646301208756], + [-0.9998834133148193, -4.8749821841810785], + [-0.9998509883880615, -4.752279497280338], + [-0.9996016025543213, -4.260504202858904], + [-0.9993612766265869, -4.0244334353203115], + [-0.9989283084869385, -3.7655641082999236], + [-0.9969782829284668, -3.246782610980921], + [-0.9950058460235596, -2.9950671179940938], + [-0.9942638874053955, -2.9256242749609536], + [-0.990715742111206, -2.6839646283308363], + [-0.9903340339660645, -2.663723350226518], + [-0.9760982990264893, -2.207464998348322], + [-0.975830078125, -2.201817459680556], + [-0.9728245735168457, -2.1424542308291437], + [-0.9643559455871582, -2.0046686756020917], + [-0.9377224445343018, -1.7188337346177065], + [-0.9362406730651855, -1.7066940482565154], + [-0.9310147762298584, -1.6659543005533146], + [-0.9284839630126953, -1.6472838718760747], + [-0.9270248413085938, -1.6368067340881562], + [-0.9075665473937988, -1.5135473477311114], + [-0.897477388381958, -1.4590986086331497], + [-0.8920106887817383, -1.431681573516303], + [-0.8776559829711914, -1.365471286049011], + [-0.864722728729248, -1.3117705583444539], + [-0.8482067584991455, -1.249725893334944], + [-0.8056559562683105, -1.1145246028592257], + [-0.8048388957977295, -1.112200609756455], + [-0.7801985740661621, -1.0458778330822556], + [-0.7749934196472168, -1.032711173436253], + [-0.7619285583496094, -1.0007967281362184], + [-0.7504425048828125, -0.9739672824457072], + [-0.7495596408843994, -0.9719492983286864], + [-0.7481319904327393, -0.968698942014487], + [-0.7459518909454346, -0.9637657636705832], + [-0.7401137351989746, -0.9507308314464193], + [-0.7289731502532959, -0.9265325319867653], + [-0.7226788997650146, -0.9132299082876396], + [-0.7161557674407959, -0.8997082193533088], + [-0.7017018795013428, -0.8706453720344796], + [-0.7013418674468994, -0.86993650130945], + [-0.691054105758667, -0.8499705913361888], + [-0.6847054958343506, -0.837919455842005], + [-0.6838164329528809, -0.8362476144993315], + [-0.6747090816497803, -0.8193374156276964], + [-0.6575610637664795, -0.7885046044142132], + [-0.6522045135498047, -0.7791255597799839], + [-0.6261923313140869, -0.7351275788820003], + [-0.623173713684082, -0.7301771459970386], + [-0.6067488193511963, -0.7037597526130627], + [-0.5838055610656738, -0.6682166303197608], + [-0.579524040222168, -0.6617457665293066], + [-0.5760939121246338, -0.656596458857398], + [-0.5654678344726562, -0.6408350116350283], + [-0.5578761100769043, -0.6297442839791668], + [-0.5523209571838379, -0.6217149641475687], + [-0.5396339893341064, -0.6036390747171698], + [-0.5128989219665527, -0.5666556256064771], + [-0.5087778568267822, -0.5610793900942042], + [-0.4977825880050659, -0.546353950571504], + [-0.4913865327835083, -0.5378865967606703], + [-0.48976075649261475, -0.5357455496477738], + [-0.48493504524230957, -0.5294166456244711], + [-0.4479050636291504, -0.4820764946679979], + [-0.4461095333099365, -0.4798325976916711], + [-0.4429593086242676, -0.47590653371561276], + [-0.42827916145324707, -0.45778739362936793], + [-0.40590059757232666, -0.4306933608076879], + [-0.40029656887054443, -0.4240020382545707], + [-0.3961341381072998, -0.4190551379319939], + [-0.3836275339126587, -0.40430627175908734], + [-0.36686253547668457, -0.3847928551425507], + [-0.3657644987106323, -0.38352464227459343], + [-0.33507001399993896, -0.3485286317501442], + [-0.32572221755981445, -0.3380352468276522], + [-0.3191967010498047, -0.3307524237890151], + [-0.3000025749206543, -0.3095224337886503], + [-0.29665136337280273, -0.3058438250228025], + [-0.2944457530975342, -0.3034271164344305], + [-0.2872810363769531, -0.29560018347246825], + [-0.27738428115844727, -0.28484608203169437], + [-0.2390844225883484, -0.2438028008332661], + [-0.23685944080352783, -0.24144425169391517], + [-0.2253856658935547, -0.2293228153248168], + [-0.22283810377120972, -0.22664053064745143], + [-0.21552443504333496, -0.21895773601143995], + [-0.2153375744819641, -0.21876178107952995], + [-0.21016258001327515, -0.21334143320771737], + [-0.20250272750854492, -0.2053409277979887], + [-0.19156384468078613, -0.19396008474133075], + [-0.18251943588256836, -0.18458771439322938], + [-0.17464947700500488, -0.17645844608618066], + [-0.15646183490753174, -0.15775766677189154], + [-0.15580910444259644, -0.15708862621964176], + [-0.15365445613861084, -0.15488112515549593], + [-0.122499018907547, -0.12311733609904851], + [-0.1088167130947113, -0.10924929296737837], + [-0.08792558312416077, -0.08815322150790302], + [-0.08401328325271606, -0.08421178632314608], + [-0.06121261417865753, -0.06128924075509796], + [-0.05341699719429016, -0.05346789060550386], + [-0.05047759413719177, -0.05052053189238029], + [-0.02924579381942749, -0.029254136237332657], + [-0.02485968917608261, -0.02486481220617492], + [-0.020469173789024353, -0.02047203328100153], + [-0.01882001757621765, -0.018822240021756347], + [-0.016152501106262207, -0.016153906073109205], + [-0.0032715508714318275, -0.003271562543358962], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.3050326092288742e-8, 2.3050326092288745e-8], + [5.9392490925347374e-8, 5.939249092534745e-8], + [1.166764889148908e-7, 1.1667648891489133e-7], + [2.3799674409019644e-7, 2.3799674409020094e-7], + [4.684659415943315e-7, 4.684659415943658e-7], + [9.382699772686465e-7, 9.382699772689218e-7], + [0.00000110398559627356, 0.0000011039855962740086], + [0.0000032917760108830407, 0.0000032917760108949305], + [0.00000751721381675452, 0.000007517213816896115], + [0.000015114666894078255, 0.000015114666895229252], + [0.00002986399340443313, 0.00002986399341331128], + [0.00003387028118595481, 0.000033870281198906756], + [0.00009066011989489198, 0.00009066012014327826], + [0.00021949532674625516, 0.0002194953302712184], + [0.00043952150736004114, 0.0004395215356621756], + [0.0006333151832222939, 0.0006333152678940465], + [0.001115123275667429, 0.0011151237378863419], + [0.001962467096745968, 0.001962469616086656], + [0.005553754046559334, 0.005553811147953338], + [0.007324676960706711, 0.0073248079567425], + [0.008691128343343735, 0.008691347183450786], + [0.011912941932678223, 0.011913505535037906], + [0.02993336319923401, 0.029942308168570204], + [0.05124260485172272, 0.05128752666822782], + [0.05473744869232178, 0.05479221508125444], + [0.06158891320228577, 0.061666963819518306], + [0.09375360608100891, 0.09402975380882211], + [0.09442159533500671, 0.09470370926367391], + [0.09443172812461853, 0.09471393321406026], + [0.09943729639053345, 0.09976699249016487], + [0.11201295256614685, 0.11248498303558895], + [0.12310260534286499, 0.12373016402339168], + [0.13562965393066406, 0.13647060950861248], + [0.13763350248336792, 0.13851257866094746], + [0.14749455451965332, 0.14857829980464834], + [0.1618971824645996, 0.16333433166790448], + [0.17051106691360474, 0.17219298693637355], + [0.17051833868026733, 0.17220047646299907], + [0.18562912940979004, 0.18780647318150087], + [0.18898820877075195, 0.1912876932893582], + [0.23206615447998047, 0.23637212433914523], + [0.23480379581451416, 0.2392675448267427], + [0.2646920680999756, 0.27114729033023005], + [0.2794986963272095, 0.2871382059344433], + [0.28789305686950684, 0.2962673858386819], + [0.292596697807312, 0.30140373665239234], + [0.3101649284362793, 0.320727882769785], + [0.3109246492385864, 0.3215686893944558], + [0.31145012378692627, 0.3221505056451929], + [0.3271782398223877, 0.3396649461699478], + [0.3574345111846924, 0.37394153436545424], + [0.3593693971633911, 0.37616159223090223], + [0.35960352420806885, 0.37643046596933716], + [0.3626827001571655, 0.3799714809649667], + [0.38961827754974365, 0.4113499159905353], + [0.3904266357421875, 0.41230330080214], + [0.3981136083602905, 0.4214052375603139], + [0.411507248878479, 0.43742438709579096], + [0.4120509624481201, 0.43807911823743495], + [0.41868770122528076, 0.4460997186945703], + [0.42136549949645996, 0.4493511447897729], + [0.4516327381134033, 0.48674948990473677], + [0.4538639783859253, 0.4895560176112375], + [0.4655507802963257, 0.5043748446613433], + [0.48124635219573975, 0.5246050193978663], + [0.48621630668640137, 0.5310932154891663], + [0.4898730516433716, 0.5358932909903701], + [0.5024838447570801, 0.5526234425942533], + [0.5074074268341064, 0.5592320547729962], + [0.5093221664428711, 0.5618140818296767], + [0.5143489837646484, 0.5686253097655146], + [0.5154285430908203, 0.5700943191671631], + [0.5234100818634033, 0.5810250825991418], + [0.5274472236633301, 0.5866018515043636], + [0.5309803485870361, 0.5915094458340507], + [0.5477793216705322, 0.6152030999229688], + [0.5577394962310791, 0.6295459624918965], + [0.5582785606384277, 0.6303287742357745], + [0.5843560695648193, 0.6690521906099505], + [0.5871362686157227, 0.6732844960442398], + [0.5878911018371582, 0.6744372167164567], + [0.5903406143188477, 0.6781887236623534], + [0.5945003032684326, 0.684597775489552], + [0.5957975387573242, 0.6866065102131665], + [0.5961520671844482, 0.6871563252400655], + [0.6005008220672607, 0.6939300827887145], + [0.6150004863739014, 0.7169242329194352], + [0.6162893772125244, 0.7189998055497108], + [0.6194069385528564, 0.7240422748778544], + [0.6285066604614258, 0.7389438896054792], + [0.6293842792510986, 0.7403958734869583], + [0.6416172981262207, 0.7609178886018204], + [0.6424276828765869, 0.7622965466812235], + [0.6437420845031738, 0.7645378650643101], + [0.6468508243560791, 0.769864795178161], + [0.6615910530090332, 0.7956379107512945], + [0.669950008392334, 0.8106524185805045], + [0.6813662052154541, 0.8316597473423232], + [0.6968657970428467, 0.8611812790659296], + [0.6981887817382812, 0.8637579113749143], + [0.7447831630706787, 0.9611360201710216], + [0.7518312931060791, 0.9771540941752986], + [0.7534394264221191, 0.9808634133542229], + [0.7567856311798096, 0.9886489208209699], + [0.7817282676696777, 1.0497991719828956], + [0.8115026950836182, 1.1314141444187586], + [0.814647912979126, 1.1406947755584418], + [0.8266689777374268, 1.1775230833699681], + [0.8313877582550049, 1.1926138225701433], + [0.8343038558959961, 1.2021323323039612], + [0.8416652679443359, 1.2268570644335162], + [0.8584413528442383, 1.2873896671573652], + [0.8678996562957764, 1.3245040433929398], + [0.8679344654083252, 1.3246451309261607], + [0.8800599575042725, 1.3760334877782177], + [0.9003539085388184, 1.4740852961194106], + [0.9099440574645996, 1.5271990851861994], + [0.9142425060272217, 1.5527768948273004], + [0.9149219989776611, 1.556931837197936], + [0.9184908866882324, 1.5792896628381612], + [0.9188928604125977, 1.5818663359427627], + [0.919395923614502, 1.5851082843320008], + [0.9296839237213135, 1.6560555223295368], + [0.9298396110534668, 1.6572041418041492], + [0.9352962970733643, 1.6990986433619266], + [0.9376416206359863, 1.718164398807965], + [0.9410912990570068, 1.7475084077246632], + [0.962122917175293, 1.9737180163455101], + [0.9748215675354004, 2.1811227771083783], + [0.9769454002380371, 2.2257214499698255], + [0.985663890838623, 2.4654635601650536], + [0.9880380630493164, 2.5565869228142004], + [0.9928233623504639, 2.8132383539094192], + [1e-300, 1e-300], + [0.00001, 0.000010000000000333334], + [0.3, 0.3095196042031117], + [1e-30, 1e-30], + [1e-10, 1e-10], +]; + +var sloppy_tolerance = 10; // FIXME + +for (var [x, y] of tanh_data) + assertNear(Math.atanh(x), y, sloppy_tolerance); + +assertNear(Math.atanh(+3 / 5), +Math.log(2), sloppy_tolerance); +assertNear(Math.atanh(-3 / 5), -Math.log(2), sloppy_tolerance); + +for (var i = -1; i < 1; i += 0.05) + assertNear(Math.atanh(Math.tanh(i)), i, sloppy_tolerance); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/atanh-exact.js b/source/spidermonkey-tests/ecma_6/Math/atanh-exact.js new file mode 100644 index 00000000..f49bdb1a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/atanh-exact.js @@ -0,0 +1,35 @@ +// Properties of Math.atanh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.atanh(NaN), NaN); + +// If x is less than −1, the result is NaN. +assertEq(Math.atanh(-ONE_PLUS_EPSILON), NaN); +assertEq(Math.atanh(-Number.MAX_VALUE), NaN); +assertEq(Math.atanh(-Infinity), NaN); + +for (var i = -5; i < -1; i += 0.1) + assertEq(Math.atanh(i), NaN); + +// If x is greater than 1, the result is NaN. +assertEq(Math.atanh(ONE_PLUS_EPSILON), NaN); +assertEq(Math.atanh(Number.MAX_VALUE), NaN); +assertEq(Math.atanh(Infinity), NaN); + +for (var i = +5; i > +1; i -= 0.1) + assertEq(Math.atanh(i), NaN); + +// If x is −1, the result is −∞. +assertEq(Math.atanh(-1), -Infinity); + +// If x is +1, the result is +∞. +assertEq(Math.atanh(+1), Infinity); + +// If x is +0, the result is +0. +assertEq(Math.atanh(+0), +0); + +// If x is −0, the result is −0. +assertEq(Math.atanh(-0), -0); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/browser.js b/source/spidermonkey-tests/ecma_6/Math/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Math/cbrt-approx.js b/source/spidermonkey-tests/ecma_6/Math/cbrt-approx.js new file mode 100644 index 00000000..2c7f26fa --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/cbrt-approx.js @@ -0,0 +1,19 @@ +assertEq(Math.cbrt(1), 1); +assertEq(Math.cbrt(-1), -1); + +var sloppy_tolerance = 200; // FIXME + +assertNear(Math.cbrt(1e-300), 1e-100, sloppy_tolerance); +assertNear(Math.cbrt(-1e-300), -1e-100, sloppy_tolerance); + +var cbrt_data = [ + [ Math.E, 1.3956124250860895 ], + [ Math.PI, 1.4645918875615231 ], + [ Math.LN2, 0.8849970445005177 ], + [ Math.SQRT2, 1.1224620483093728 ] +]; + +for (var [x, y] of cbrt_data) + assertNear(Math.cbrt(x), y, sloppy_tolerance); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/cbrt-exact.js b/source/spidermonkey-tests/ecma_6/Math/cbrt-exact.js new file mode 100644 index 00000000..e0b7289f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/cbrt-exact.js @@ -0,0 +1,19 @@ +// Properties of Math.cbrt that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.cbrt(NaN), NaN); + +// If x is +0, the result is +0. +assertEq(Math.cbrt(+0), +0); + +// If x is −0, the result is −0. +assertEq(Math.cbrt(-0), -0); + +// If x is +∞, the result is +∞. +assertEq(Math.cbrt(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assertEq(Math.cbrt(-Infinity), -Infinity); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/clz32.js b/source/spidermonkey-tests/ecma_6/Math/clz32.js new file mode 100644 index 00000000..00626763 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/clz32.js @@ -0,0 +1,40 @@ +// Undefined and NaN end up as zero after ToUint32 +assertEq(Math.clz32(), 32); +assertEq(Math.clz32(NaN), 32); +assertEq(Math.clz32.call(), 32); +// 0 +assertEq(Math.clz32(null), 32); +assertEq(Math.clz32(false), 32); +// 1 +assertEq(Math.clz32(true), 31); +// 3 +assertEq(Math.clz32(3.5), 30); +// NaN -> 0 +assertEq(Math.clz32({}), 32); +// 2 +assertEq(Math.clz32({valueOf: function() { return 2; }}), 30); +// 0 -> 0 +assertEq(Math.clz32([]), 32); +assertEq(Math.clz32(""), 32); +// NaN -> 0 +assertEq(Math.clz32([1, 2, 3]), 32); +assertEq(Math.clz32("bar"), 32); +// 15 +assertEq(Math.clz32("15"), 28); + + +assertEq(Math.clz32(0x80000000), 0); +assertEq(Math.clz32(0xF0FF1000), 0); +assertEq(Math.clz32(0x7F8F0001), 1); +assertEq(Math.clz32(0x3FFF0100), 2); +assertEq(Math.clz32(0x1FF50010), 3); +assertEq(Math.clz32(0x00800000), 8); +assertEq(Math.clz32(0x00400000), 9); +assertEq(Math.clz32(0x00008000), 16); +assertEq(Math.clz32(0x00004000), 17); +assertEq(Math.clz32(0x00000080), 24); +assertEq(Math.clz32(0x00000040), 25); +assertEq(Math.clz32(0x00000001), 31); +assertEq(Math.clz32(0), 32); + +reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_6/Math/cosh-approx.js b/source/spidermonkey-tests/ecma_6/Math/cosh-approx.js new file mode 100644 index 00000000..b701bb1d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/cosh-approx.js @@ -0,0 +1,278 @@ +var sloppy_tolerance = 100; + +assertEq(Math.cosh(1000), Infinity); +assertEq(Math.cosh(Number.MAX_VALUE), Infinity); +assertNear(Math.cosh(1e-30), 1, sloppy_tolerance); +assertNear(Math.cosh(1e-10), 1, sloppy_tolerance); + +var cosh_data = [ + [0.0016914556651292944, 1.0000014305114746], + [0.001953124689559275, 1.0000019073486328], + [0.003782208044661295, 1.000007152557373], + [0.005258943946801101, 1.000013828277588], + [0.005859366618129203, 1.0000171661376953], + [0.010961831992188852, 1.0000600814819336], + [0.015285472131830425, 1.0001168251037598], + [0.017249319093529877, 1.0001487731933594], + [0.028218171738655373, 1.0003981590270996], + [0.03573281468231457, 1.000638484954834], + [0.046287402472878776, 1.0010714530944824], + [0.07771996527168971, 1.0030217170715332], + [0.0998975930860278, 1.0049939155578613], + [0.13615938768032465, 1.0092840194702148], + [0.21942279004958354, 1.024169921875], + [0.3511165938166055, 1.0622773170471191], + [0.48975026711288183, 1.1223440170288086], + [0.692556883708491, 1.2495574951171875], + [0.954530572221414, 1.4912219047546387], + [1.307581416910453, 1.983847141265869], + [1.4035188779741334, 2.1576128005981445], + [1.5250070845427517, 2.406397819519043], + [1.8905372013072799, 3.386958122253418], + [2.1735673399948254, 4.451677322387695], + [2.625091127868242, 6.939132690429686], + [2.737434918695162, 7.756023406982421], + [2.8740317167801948, 8.88236999511719], + [2.97998639328949, 9.869171142578123], + [3.516549380542481, 16.848876953125], + [3.51867003468025, 16.884582519531254], + [3.593185165198829, 18.18859100341797], + [3.6273672142963385, 18.82012176513672], + [3.646553244410946, 19.184181213378906], + [3.872413451393967, 24.03952026367187], + [3.972085568933329, 26.556991577148434], + [4.022209178119238, 27.921104431152337], + [4.168428891496629, 32.31466674804686], + [4.240546229861005, 34.730087280273445], + [4.290698214968891, 36.51556396484376], + [4.352722738491574, 38.851287841796875], + [4.594386162629449, 49.46875], + [4.598500387004538, 49.67265319824219], + [4.7152173401856095, 55.821014404296896], + [4.73822104001982, 57.119781494140604], + [4.793733825338029, 60.37983703613279], + [4.8435923769530165, 63.46618652343747], + [4.849190310904695, 63.82241821289062], + [4.85767897228448, 64.36642456054685], + [4.880061548144127, 65.82318115234375], + [4.921430721025434, 68.60302734374997], + [4.94406835208057, 70.17358398437497], + [4.967000841791218, 71.80126953124997], + [5.016014824864732, 75.40786743164065], + [5.017205657609766, 75.49771118164062], + [5.0506448716550825, 78.06475830078126], + [5.0707363201405276, 79.64892578125], + [5.073517411135063, 79.87072753906253], + [5.101574796209937, 82.14324951171874], + [5.152357710985635, 86.4221496582031], + [5.167705692500117, 87.75869750976562], + [5.2390637098028074, 94.24942016601562], + [5.247023676519904, 95.00259399414062], + [5.258134994273664, 96.06402587890626], + [5.289261389093961, 99.10101318359374], + [5.345425863147171, 104.82595825195315], + [5.3555664787245885, 105.89431762695308], + [5.363617180711895, 106.750244140625], + [5.388152468690488, 109.40167236328122], + [5.405320225963013, 111.2959899902344], + [5.417698597745429, 112.68215942382815], + [5.445406415908933, 115.8478698730469], + [5.501396249028249, 122.51895141601562], + [5.531718947357248, 126.29083251953128], + [5.544277233951787, 127.88677978515626], + [5.547444176085567, 128.29241943359372], + [5.556786759298988, 129.49658203125006], + [5.625710723366437, 138.7365112304687], + [5.628934733085022, 139.18450927734378], + [5.634566685055491, 139.97058105468747], + [5.660401141376928, 143.63366699218747], + [5.698541939965668, 149.21765136718753], + [5.7078698961812995, 150.6160278320313], + [5.714741890601693, 151.6546020507813], + [5.735111323217677, 154.77532958984378], + [5.761781191641161, 158.95861816406253], + [5.763503378028959, 159.23260498046878], + [5.810483079631769, 166.89166259765622], + [5.824362807770767, 169.22418212890625], + [5.833939098607025, 170.85247802734372], + [5.861586030831371, 175.64184570312503], + [5.866335876872544, 176.47808837890625], + [5.869449614294116, 177.02844238281247], + [5.879497954012966, 178.81622314453122], + [5.893213844044451, 181.28570556640625], + [5.944588630523773, 190.84246826171866], + [5.947493525920713, 191.39764404296875], + [5.962341215900494, 194.26062011718753], + [5.9656082276276, 194.89630126953122], + [5.9749284849312865, 196.7212524414062], + [5.975165500176202, 196.76788330078128], + [5.981706804024238, 198.05920410156241], + [5.991310884439669, 199.9705200195312], + [6.004868209578554, 202.70001220703122], + [6.0159406892865155, 204.95684814453116], + [6.025476453825986, 206.92059326171866], + [6.047172064627678, 211.45886230468741], + [6.0479418642231595, 211.62170410156256], + [6.050479329955437, 212.1593627929687], + [6.086466833749719, 219.93341064453125], + [6.101870903204913, 223.3474731445312], + [6.1249427443985525, 228.56036376953128], + [6.129204755426344, 229.53656005859375], + [6.136241935513706, 231.1575317382813], + [6.153688953514383, 235.22589111328134], + [6.1619244798633215, 237.17108154296884], + [6.165012268502458, 237.90454101562506], + [6.187036941752032, 243.202392578125], + [6.191527178125454, 244.29687500000003], + [6.196001570568187, 245.3923950195312], + [6.197677082130341, 245.80389404296875], + [6.2133379061260285, 249.68365478515622], + [6.223871642756905, 252.3276367187501], + [6.228398760115369, 253.47253417968756], + [6.269692237869835, 264.1583251953126], + [6.276143287577458, 265.8679199218749], + [6.305884283737176, 273.89379882812494], + [6.306492908028797, 274.0605468750001], + [6.3065018163217115, 274.06298828125006], + [6.31104892482331, 275.3120117187501], + [6.3322712125431915, 281.2171630859374], + [6.343324976847916, 284.34289550781244], + [6.345081883725142, 284.84289550781256], + [6.353683609448096, 287.30358886718756], + [6.366114643735997, 290.8973388671876], + [6.373476431987165, 293.0467529296875], + [6.3734826803404045, 293.04858398437494], + [6.3862671775996915, 296.819091796875], + [6.389086936901673, 297.6572265625], + [6.424562459508495, 308.4062500000001], + [6.4506171773701535, 316.5472412109376], + [6.462221144761522, 320.24182128906256], + [6.468740575092418, 322.33642578125], + [6.472375224718483, 323.5101318359374], + [6.485834999462654, 327.8939208984375], + [6.486412623146554, 328.08337402343744], + [6.486812521370483, 328.214599609375], + [6.498698952535687, 332.1391601562501], + [6.521175044233963, 339.6888427734376], + [6.522595306993373, 340.171630859375], + [6.522766822935215, 340.2299804687499], + [6.52502285413445, 340.99841308593744], + [6.5445411825986985, 347.7194824218749], + [6.5451209675856825, 347.9211425781249], + [6.55061885367159, 349.8392333984375], + [6.560126626713879, 353.1812744140626], + [6.560510895819139, 353.31701660156244], + [6.565186990039135, 354.97302246093756], + [6.567067660815945, 355.64123535156233], + [6.588081320423386, 363.19360351562517], + [6.5896131163651415, 363.7503662109376], + [6.597598047275183, 366.66650390624983], + [6.608222493065004, 370.5828857421874], + [6.611563301604297, 371.822998046875], + [6.622421213257873, 375.88220214843756], + [6.625684248051368, 377.11071777343744], + [6.626950731244344, 377.58862304687483], + [6.630267034079059, 378.8428955078124], + [6.630977920761718, 379.11230468749994], + [6.636217452968849, 381.10388183593756], + [6.638857149899159, 382.1112060546874], + [6.641161660644278, 382.9927978515625], + [6.652047018118426, 387.1845703124999], + [6.658445560711748, 389.66992187499994], + [6.658790721334144, 389.8044433593749], + [6.675345858154136, 396.3114013671875], + [6.677094789236718, 397.00512695312494], + [6.6775691166680895, 397.1934814453124], + [6.679106750673113, 397.80468749999994], + [6.681712590609845, 398.84265136718744], + [6.682523938576487, 399.16638183593744], + [6.68274532345516, 399.2547607421874], + [6.685459416477178, 400.3398437499999], + [6.694456277839498, 403.9578857421875], + [6.6952522228540765, 404.27954101562517], + [6.6971746771142415, 405.05749511718744], + [6.702764738337774, 407.328125], + [6.7033022311799595, 407.54711914062506], + [6.710763953621196, 410.59948730468756], + [6.711256159037373, 410.8016357421876], + [6.712054288828399, 411.12963867187494], + [6.713939407502346, 411.9053955078124], + [6.722828986708716, 415.5833740234374], + [6.727835453862132, 417.66918945312506], + [6.734632628835641, 420.51782226562506], + [6.743787740494532, 424.38537597656233], + [6.744565219553757, 424.71545410156244], + [6.7715720212680655, 436.3419189453125], + [6.776510146304201, 438.50195312500017], + [6.778412462065226, 439.33691406250017], + [6.79247934060035, 445.5606689453126], + [6.809016260337229, 452.9901123046875], + [6.810747231716348, 453.7749023437499], + [6.817335895109251, 456.7745361328125], + [6.819910421197311, 457.9520263671875], + [6.821497844004013, 458.6795654296874], + [6.8254946428721475, 460.51647949218767], + [6.828433164406687, 461.87170410156256], + [6.834543470287694, 464.70251464843756], + [6.839609377592375, 467.06262207031267], + [6.839627933844213, 467.0712890625001], + [6.846084943645239, 470.09692382812494], + [6.856799276049143, 475.16076660156233], + [6.861822721577315, 477.5537109374998], + [6.864066049482581, 478.62622070312517], + [6.864420497333681, 478.79589843750017], + [6.866278653973069, 479.68640136718733], + [6.866487814627139, 479.7867431640625], + [6.8667493311188395, 479.9122314453126], + [6.872084270243208, 482.4793701171875], + [6.872164723177875, 482.5181884765627], + [6.874982560453874, 483.87976074218767], + [6.876191234145179, 484.46496582031233], + [6.877966548833207, 485.3258056640624], + [6.888721726428236, 490.57373046875006], + [6.89515989558997, 493.74230957031244], + [6.896232568812718, 494.2722167968751], + [6.900624415355815, 496.44775390624983], + [6.901816998553275, 497.0401611328125], + [6.9042162822876465, 498.23413085937483], + [7.193052598670793, 665.0791015625001], + [7.758155143419732, 1170.29150390625], + [8.323023697145112, 2058.795898437501], + [9.36298131161099, 5824.533203125004], + [9.810748008110926, 9114.308593750004], + [11.047341056314202, 31388.40624999998], + [11.584925435512535, 53732.765624999956], + [12.366958539207397, 117455.0937500001], + [13.107089828327874, 246210.62499999983], + [13.84248373881162, 513670.1250000003], + [14.27084873575108, 788353.2499999999], + [15.060339852215408, 1736170.999999999], + [15.835873313657556, 3770530.0000000005], + [15.977474039173265, 4344089.999999998], + [16.943967899150145, 11419360.000000006], + [17.943394339560967, 31023239.99999997], + [18.214035936745432, 40665424.00000006], + [19.374560581709215, 129788063.99999991], + [19.927723623778547, 225668224.00000027], + [20.619308638400597, 450631936.0000006], + [21.129986093026698, 750941952.0000008], + [22.05159150215413, 1887358976.0000033], + [22.734966842639743, 3738011648.0000052], + [23.42954051928097, 7486695423.99999], + [23.955498471391667, 12668080127.99998], + [24.591055724582848, 23918272512], + [25.305424481799395, 48862560256.00005], + [26.150535181949436, 113763549183.99998], + [26.499894449532565, 161334755328.00018], + [27.19075733422632, 321933279232.0004], + [27.989721778208146, 715734122496], + [28.953212876533797, 1875817529343.9976], +]; + +for (var [x, y] of cosh_data) + assertNear(Math.cosh(x), y, sloppy_tolerance); + +for (var i = -20; i < 20; i++) + assertNear(Math.cosh(i), (Math.exp(i) + Math.exp(-i)) / 2, sloppy_tolerance); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/cosh-exact.js b/source/spidermonkey-tests/ecma_6/Math/cosh-exact.js new file mode 100644 index 00000000..a302776c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/cosh-exact.js @@ -0,0 +1,19 @@ +// Properties of Math.cosh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.cosh(NaN), NaN); + +// If x is +0, the result is 1. +assertEq(Math.cosh(+0), 1); + +// If x is −0, the result is 1. +assertEq(Math.cosh(-0), 1); + +// If x is +∞, the result is +∞. +assertEq(Math.cosh(Infinity), Infinity); + +// If x is −∞, the result is +∞. +assertEq(Math.cosh(-Infinity), Infinity); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/expm1-approx.js b/source/spidermonkey-tests/ecma_6/Math/expm1-approx.js new file mode 100644 index 00000000..35d45541 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/expm1-approx.js @@ -0,0 +1,24 @@ +assertNear(Math.expm1(1e-300), 1e-300); +assertNear(Math.expm1(1e-100), 1e-100); +assertNear(Math.expm1(1e-14), 1.000000000000005e-14); +assertNear(Math.expm1(1e-6), 0.0000010000005000001665); + +var expm1_data = [ + [ -1.875817529344e-70, -1.875817529344e-70 ], + [ -7.09962844069878e-15, -7.099628440698755e-15 ], + [ -2.114990849122478e-10, -2.1149908488988187e-10 ], + [ -0.0000031404608812881633, -0.000003140455950046052 ], + + [ 1.875817529344e-70, 1.875817529344e-70 ], + [ 6.261923313140869e-30, 6.261923313140869e-30 ], + [ 7.09962844069878e-15, 7.099628440698805e-15 ], + [ 1.3671879628418538e-12, 1.3671879628427884e-12 ], + [ 2.114990849122478e-10, 2.1149908493461373e-10 ], + [ 1.6900931765206906e-8, 1.6900931908027652e-8 ], + [ 0.0000031404608812881633, 0.0000031404658125405988 ] +]; + +for (var [x, y] of expm1_data) + assertNear(Math.expm1(x), y); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/expm1-exact.js b/source/spidermonkey-tests/ecma_6/Math/expm1-exact.js new file mode 100644 index 00000000..57b94ed2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/expm1-exact.js @@ -0,0 +1,20 @@ +// Properties of Math.expm1 that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.expm1(NaN), NaN); + +// If x is +0, the result is +0. +assertEq(Math.expm1(+0), +0); + +// If x is −0, the result is −0. +assertEq(Math.expm1(-0), -0); + +// If x is +∞, the result is +∞. +assertEq(Math.expm1(Infinity), Infinity); + +// If x is −∞, the result is -1. +assertEq(Math.expm1(-Infinity), -1); + + +reportCompare(0, 0, "ok"); + diff --git a/source/spidermonkey-tests/ecma_6/Math/fround.js b/source/spidermonkey-tests/ecma_6/Math/fround.js new file mode 100644 index 00000000..353f798d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/fround.js @@ -0,0 +1,81 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +// Some tests regarding conversion to Float32 +assertEq(Math.fround(), NaN); + +// Special values +assertEq(Math.fround(NaN), NaN); +assertEq(Math.fround(-Infinity), -Infinity); +assertEq(Math.fround(Infinity), Infinity); +assertEq(Math.fround(-0), -0); +assertEq(Math.fround(+0), +0); + +// Polyfill function for Float32 conversion +var toFloat32 = (function() { + var f32 = new Float32Array(1); + function f(x) { + f32[0] = x; + return f32[0]; + } + return f; +})(); + +// A test on a certain range of numbers, including big numbers, so that +// we get a loss in precision for some of them. +for (var i = 0; i < 64; ++i) { + var p = Math.pow(2, i) + 1; + assertEq(Math.fround(p), toFloat32(p)); + assertEq(Math.fround(-p), toFloat32(-p)); +} + +/******************************************** +/* Tests on maximal Float32 / Double values * +/*******************************************/ +function maxValue(exponentWidth, significandWidth) { + var n = 0; + var maxExp = Math.pow(2, exponentWidth - 1) - 1; + for (var i = significandWidth; i >= 0; i--) + n += Math.pow(2, maxExp - i); + return n; +} + +var DBL_MAX = maxValue(11, 52); +assertEq(DBL_MAX, Number.MAX_VALUE); // sanity check + +// Finite as a double, too big for a float +assertEq(Math.fround(DBL_MAX), Infinity); + +var FLT_MAX = maxValue(8, 23); +assertEq(Math.fround(FLT_MAX), FLT_MAX); +assertEq(Math.fround(FLT_MAX + Math.pow(2, Math.pow(2, 8 - 1) - 1 - 23 - 2)), FLT_MAX); // round-nearest rounds down to FLT_MAX +assertEq(Math.fround(FLT_MAX + Math.pow(2, Math.pow(2, 8 - 1) - 1 - 23 - 1)), Infinity); // no longer rounds down to FLT_MAX + +/********************************************************* +/******* Tests on denormalizations and roundings ********* +/********************************************************/ + +function minValue(exponentWidth, significandWidth) { + return Math.pow(2, -(Math.pow(2, exponentWidth - 1) - 2) - significandWidth); +} + +var DBL_MIN = Math.pow(2, -1074); +assertEq(DBL_MIN, Number.MIN_VALUE); // sanity check + +// Too small for a float +assertEq(Math.fround(DBL_MIN), 0); + +var FLT_MIN = minValue(8, 23); +assertEq(Math.fround(FLT_MIN), FLT_MIN); + +assertEq(Math.fround(FLT_MIN / 2), 0); // halfway, round-nearest rounds down to 0 (even) +assertEq(Math.fround(FLT_MIN / 2 + Math.pow(2, -202)), FLT_MIN); // first double > FLT_MIN / 2, rounds up to FLT_MIN + +assertEq(Math.fround(-FLT_MIN), -FLT_MIN); + +assertEq(Math.fround(-FLT_MIN / 2), -0); // halfway, round-nearest rounds up to -0 (even) +assertEq(Math.fround(-FLT_MIN / 2 - Math.pow(2, -202)), -FLT_MIN); // first double < -FLT_MIN / 2, rounds down to -FLT_MIN + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/log10-approx.js b/source/spidermonkey-tests/ecma_6/Math/log10-approx.js new file mode 100644 index 00000000..04894485 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/log10-approx.js @@ -0,0 +1,9 @@ +assertNear(Math.log10(2), 0.3010299956639812); +assertNear(Math.log10(7), 0.8450980400142568); +assertNear(Math.log10(Math.E), Math.LOG10E); + +for (var i = -10; i < 10; i++) + assertNear(Math.log10(Math.pow(10, i)), i); + +reportCompare(0, 0, 'ok'); + diff --git a/source/spidermonkey-tests/ecma_6/Math/log10-exact.js b/source/spidermonkey-tests/ecma_6/Math/log10-exact.js new file mode 100644 index 00000000..0c125306 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/log10-exact.js @@ -0,0 +1,30 @@ +// Properties of Math.log10 that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.log10(NaN), NaN); + +// If x is less than 0, the result is NaN. +assertEq(Math.log10(-1e-10), NaN); +assertEq(Math.log10(-1e-5), NaN); +assertEq(Math.log10(-1e-1), NaN); +assertEq(Math.log10(-Number.MIN_VALUE), NaN); +assertEq(Math.log10(-Number.MAX_VALUE), NaN); +assertEq(Math.log10(-Infinity), NaN); + +for (var i = -1; i > -10; i--) + assertEq(Math.log10(i), NaN); + +// If x is +0, the result is −∞. +assertEq(Math.log10(+0), -Infinity); + +// If x is −0, the result is −∞. +assertEq(Math.log10(-0), -Infinity); + +// If x is 1, the result is +0. +assertEq(Math.log10(1), +0); + +// If x is +∞, the result is +∞. +assertEq(Math.log10(Infinity), Infinity); + + +reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_6/Math/log1p-approx.js b/source/spidermonkey-tests/ecma_6/Math/log1p-approx.js new file mode 100644 index 00000000..f1d120af --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/log1p-approx.js @@ -0,0 +1,20 @@ +assertNear(Math.log1p(1e-300), 1e-300); +assertNear(Math.log1p(1e-15), 9.999999999999995e-16); +assertNear(Math.log1p(1e-6), 9.999995000003334e-7); + +var log1p_data = [ + [ 1.875817529344e-70, 1.875817529344e-70 ], + [ 6.261923313140869e-30, 6.261923313140869e-30 ], + [ 7.09962844069878e-15, 7.099628440698755e-15 ], + [ 1.3671879628418538e-12, 1.3671879628409192e-12 ], + [ 2.114990849122478e-10, 2.1149908488988187e-10 ], + [ 1.6900931765206906e-8, 1.690093162238616e-8 ], + [ 0.0000709962844069878, 0.00007099376429006658 ], + [ 0.0016793412882520897, 0.00167793277137076 ], + [ 0.011404608812881634, 0.011340066517988035 ], +]; + +for (var [x, y] of log1p_data) + assertNear(Math.log1p(x), y); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/log1p-exact.js b/source/spidermonkey-tests/ecma_6/Math/log1p-exact.js new file mode 100644 index 00000000..bec11b65 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/log1p-exact.js @@ -0,0 +1,29 @@ +// Properties of Math.log1p that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.log1p(NaN), NaN); + +// If x is less than -1, the result is NaN. +assertEq(Math.log1p(-1 - 1e-10), NaN); +assertEq(Math.log1p(-1 - 1e-5), NaN); +assertEq(Math.log1p(-1 - 1e-1), NaN); +assertEq(Math.log1p(-ONE_PLUS_EPSILON), NaN); + +for (var i = -2; i > -20; i--) + assertEq(Math.log1p(i), NaN); + +// If x is -1, the result is -∞. +assertEq(Math.log1p(-1), -Infinity); + +// If x is +0, the result is +0. +assertEq(Math.log1p(+0), +0); + +// If x is −0, the result is −0. +assertEq(Math.log1p(-0), -0); + +// If x is +∞, the result is +∞. +assertEq(Math.log1p(Infinity), Infinity); + + +reportCompare(0, 0, "ok"); + diff --git a/source/spidermonkey-tests/ecma_6/Math/log2-approx.js b/source/spidermonkey-tests/ecma_6/Math/log2-approx.js new file mode 100644 index 00000000..a9b0305f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/log2-approx.js @@ -0,0 +1,8 @@ +for (var i = -10; i < 10; i++) + assertNear(Math.log2(Math.pow(2, i)), i); + +assertNear(Math.log2(5), 2.321928094887362); +assertNear(Math.log2(7), 2.807354922057604); +assertNear(Math.log2(Math.E), Math.LOG2E); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/log2-exact.js b/source/spidermonkey-tests/ecma_6/Math/log2-exact.js new file mode 100644 index 00000000..160034dd --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/log2-exact.js @@ -0,0 +1,30 @@ +// Properties of Math.log2 that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.log2(NaN), NaN); + +// If x is less than 0, the result is NaN. +assertEq(Math.log2(-1e-10), NaN); +assertEq(Math.log2(-1e-5), NaN); +assertEq(Math.log2(-1e-1), NaN); +assertEq(Math.log2(-Number.MIN_VALUE), NaN); +assertEq(Math.log2(-Number.MAX_VALUE), NaN); +assertEq(Math.log2(-Infinity), NaN); + +for (var i = -1; i > -10; i--) + assertEq(Math.log2(i), NaN); + +// If x is +0, the result is −∞. +assertEq(Math.log2(+0), -Infinity); + +// If x is −0, the result is −∞. +assertEq(Math.log2(-0), -Infinity); + +// If x is 1, the result is +0. +assertEq(Math.log2(1), +0); + +// If x is +∞, the result is +∞. +assertEq(Math.log2(Infinity), Infinity); + + +reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_6/Math/shell.js b/source/spidermonkey-tests/ecma_6/Math/shell.js new file mode 100644 index 00000000..d423c081 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/shell.js @@ -0,0 +1,74 @@ +// The nearest representable values to +1.0. +const ONE_PLUS_EPSILON = 1 + Math.pow(2, -52); // 0.9999999999999999 +const ONE_MINUS_EPSILON = 1 - Math.pow(2, -53); // 1.0000000000000002 + +{ + var fail = function (msg) { + var exc = new Error(msg); + try { + // Try to improve on exc.fileName and .lineNumber; leave exc.stack + // alone. We skip two frames: fail() and its caller, an assertX() + // function. + var frames = exc.stack.trim().split("\n"); + if (frames.length > 2) { + var m = /@([^@:]*):([0-9]+)$/.exec(frames[2]); + if (m) { + exc.fileName = m[1]; + exc.lineNumber = +m[2]; + } + } + } catch (ignore) { throw ignore;} + throw exc; + }; + + var ENDIAN; // 0 for little-endian, 1 for big-endian. + + // Return the difference between the IEEE 754 bit-patterns for a and b. + // + // This is meaningful when a and b are both finite and have the same + // sign. Then the following hold: + // + // * If a === b, then diff(a, b) === 0. + // + // * If a !== b, then diff(a, b) === 1 + the number of representable values + // between a and b. + // + var f = new Float64Array([0, 0]); + var u = new Uint32Array(f.buffer); + var diff = function (a, b) { + f[0] = a; + f[1] = b; + //print(u[1].toString(16) + u[0].toString(16) + " " + u[3].toString(16) + u[2].toString(16)); + return Math.abs((u[3-ENDIAN] - u[1-ENDIAN]) * 0x100000000 + u[2+ENDIAN] - u[0+ENDIAN]); + }; + + // Set ENDIAN to the platform's endianness. + ENDIAN = 0; // try little-endian first + if (diff(2, 4) === 0x100000) // exact wrong answer we'll get on a big-endian platform + ENDIAN = 1; + assertEq(diff(2,4), 0x10000000000000); + assertEq(diff(0, Number.MIN_VALUE), 1); + assertEq(diff(1, ONE_PLUS_EPSILON), 1); + assertEq(diff(1, ONE_MINUS_EPSILON), 1); + + var assertNear = function assertNear(a, b, tolerance=1) { + if (!Number.isFinite(b)) { + fail("second argument to assertNear (expected value) must be a finite number"); + } else if (Number.isNaN(a)) { + fail("got NaN, expected a number near " + b); + } else if (!Number.isFinite(a)) { + if (b * Math.sign(a) < Number.MAX_VALUE) + fail("got " + a + ", expected a number near " + b); + } else { + // When the two arguments do not have the same sign bit, diff() + // returns some huge number. So if b is positive or negative 0, + // make target the zero that has the same sign bit as a. + var target = b === 0 ? a * 0 : b; + var err = diff(a, target); + if (err > tolerance) { + fail("got " + a + ", expected a number near " + b + + " (relative error: " + err + ")"); + } + } + }; +} diff --git a/source/spidermonkey-tests/ecma_6/Math/sign.js b/source/spidermonkey-tests/ecma_6/Math/sign.js new file mode 100644 index 00000000..5552dfc3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/sign.js @@ -0,0 +1,34 @@ +// If x is NaN, the result is NaN. +assertEq(Math.sign(NaN), NaN); + +// If x is −0, the result is −0. +assertEq(Math.sign(-0), -0); + +// If x is +0, the result is +0. +assertEq(Math.sign(+0), +0); + +// If x is negative and not −0, the result is −1. +assertEq(Math.sign(-Number.MIN_VALUE), -1); +assertEq(Math.sign(-Number.MAX_VALUE), -1); +assertEq(Math.sign(-Infinity), -1); + +for (var i = -1; i > -20; i--) + assertEq(Math.sign(i), -1); + +assertEq(Math.sign(-1e-300), -1); +assertEq(Math.sign(-0x80000000), -1); + +// If x is positive and not +0, the result is +1. +assertEq(Math.sign(Number.MIN_VALUE), +1); +assertEq(Math.sign(Number.MAX_VALUE), +1); +assertEq(Math.sign(Infinity), +1); + +for (var i = 1; i < 20; i++) + assertEq(Math.sign(i), +1); + +assertEq(Math.sign(+1e-300), +1); +assertEq(Math.sign(0x80000000), +1); +assertEq(Math.sign(0xffffffff), +1); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/sinh-approx.js b/source/spidermonkey-tests/ecma_6/Math/sinh-approx.js new file mode 100644 index 00000000..91eda049 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/sinh-approx.js @@ -0,0 +1,298 @@ +var sloppy_tolerance = 100; +for (var i = -20; i < 20; i++) + assertNear(Math.sinh(i), (Math.exp(i) - Math.exp(-i)) / 2, sloppy_tolerance); + +assertEq(Math.sinh(1000), Infinity); +assertEq(Math.sinh(Number.MAX_VALUE), Infinity); +assertNear(Math.sinh(1e-30), 1e-30, sloppy_tolerance); +assertNear(Math.sinh(1e-10), 1e-10, sloppy_tolerance); + +var sinh_data = [ + [-6.902103625349695, -497.1816406250001], + [-6.898143347143859, -495.21655273437517], + [-6.883664481302669, -488.0980224609375], + [-6.880304842490273, -486.46093750000006], + [-6.871561546509046, -482.2261962890624], + [-6.841973895837549, -468.167236328125], + [-6.836376331805493, -465.5539550781251], + [-6.833654100575195, -464.2883300781251], + [-6.8320816635009045, -463.55883789062483], + [-6.8108680173663085, -453.82861328125], + [-6.799689165151487, -448.78356933593756], + [-6.793579326246197, -446.0499267578126], + [-6.762510387544996, -432.4046630859374], + [-6.743225720989222, -424.14575195312506], + [-6.691758395994307, -402.86828613281244], + [-6.690743430063694, -402.4595947265625], + [-6.6596501292114505, -390.1383056640624], + [-6.652956360641761, -387.5355224609375], + [-6.635954365364267, -381.00231933593767], + [-6.619587562578274, -374.81726074218744], + [-6.617681179427804, -374.10339355468744], + [-6.614762741096185, -373.0131835937501], + [-6.60690568753706, -370.0938720703124], + [-6.591738907156094, -364.5230712890626], + [-6.583066984213974, -361.3756103515625], + [-6.573999516974134, -358.1136474609374], + [-6.553610904389896, -350.8861083984376], + [-6.553097634736138, -350.7060546875001], + [-6.538320325468202, -345.56164550781267], + [-6.529090881007076, -342.386962890625], + [-6.527791927233787, -341.94250488281256], + [-6.514383886150781, -337.38830566406244], + [-6.488639771044976, -328.8133544921875], + [-6.480460592697477, -326.13488769531256], + [-6.439759999015992, -313.1274414062499], + [-6.434927968512049, -311.61804199218744], + [-6.4082177348965725, -303.4047851562501], + [-6.369671035834965, -291.93200683593756], + [-6.362310184909175, -289.79101562500006], + [-6.356373428913315, -288.0756835937499], + [-6.337756593913614, -282.76220703125006], + [-6.32424009706147, -278.96594238281256], + [-6.314232650754295, -276.18811035156256], + [-6.290994606392703, -269.8439941406249], + [-6.240182555852785, -256.4750976562499], + [-6.2102675039793604, -248.9161987304687], + [-6.197335184435549, -245.71783447265628], + [-6.194021350132335, -244.90490722656253], + [-6.184119163536406, -242.4917602539062], + [-6.104686221071835, -223.97491455078116], + [-6.100669325836893, -223.07702636718747], + [-6.093582856519022, -221.50177001953122], + [-6.0598807500687935, -214.16101074218741], + [-6.0062142965262515, -202.97058105468741], + [-5.9923121073369945, -200.1683349609375], + [-5.981859446096083, -198.08691406249997], + [-5.9497792165852905, -191.83300781250006], + [-5.90509449745879, -183.44958496093747], + [-5.902097012275789, -182.90051269531256], + [-5.8144483910067954, -167.55175781250006], + [-5.786154254111214, -162.8773803710938], + [-5.765917008989405, -159.61425781250006], + [-5.703902219845274, -150.0162963867188], + [-5.6926689504460395, -148.34051513671872], + [-5.685206387751923, -147.23760986328122], + [-5.660572815631807, -143.6548461914062], + [-5.625516713960633, -138.70599365234375], + [-5.476934234171879, -119.55416870117192], + [-5.467584665632571, -118.4415588378906], + [-5.417932675603434, -112.70410156250004], + [-5.406565756574079, -111.43020629882811], + [-5.373195678988387, -107.77297973632808], + [-5.3723285712183735, -107.67956542968749], + [-5.348004040102253, -105.09179687499999], + [-5.31087758970896, -101.261474609375], + [-5.255348419702703, -95.79150390624997], + [-5.206986845736275, -91.26885986328122], + [-5.162914035396619, -87.33349609375003], + [-5.052952927749896, -78.23873901367186], + [-5.048772883924985, -77.91235351562501], + [-5.034848487644809, -76.83489990234378], + [-4.808269821238499, -61.25564575195312], + [-4.689849459883311, -54.413803100585945], + [-4.476720236388958, -43.96719360351561], + [-4.431216695067421, -42.01084899902342], + [-4.114720236218123, -30.60937499999999], + [-3.9785790831656023, -26.711166381835938], + [-3.9220215830953484, -25.24131774902344], + [-3.3770026324620295, -14.624359130859379], + [-3.214961448471211, -12.431087493896483], + [-3.021397455139021, -10.235607147216797], + [-2.937831931335705, -9.41094970703125], + [-1.267878515574959, -1.6359391212463381], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.305032609228874e-8, 2.3050326092288742e-8], + [5.939249092534734e-8, 5.9392490925347374e-8], + [1.1667648891489053e-7, 1.166764889148908e-7], + [2.379967440901942e-7, 2.3799674409019644e-7], + [4.6846594159431437e-7, 4.684659415943315e-7], + [9.382699772685088e-7, 9.382699772686465e-7], + [0.0000011039855962733358, 0.00000110398559627356], + [0.000003291776010877096, 0.0000032917760108830407], + [0.000007517213816683722, 0.00000751721381675452], + [0.000015114666893502755, 0.000015114666894078255], + [0.00002986399339999406, 0.00002986399340443313], + [0.000033870281179478836, 0.00003387028118595481], + [0.00009066011977069884, 0.00009066011989489198], + [0.00021949532498377364, 0.00021949532674625516], + [0.00043952149320897676, 0.00043952150736004114], + [0.0006333151408864353, 0.0006333151832222939], + [0.0011151230445582744, 0.001115123275667429], + [0.0019624658370807177, 0.001962467096745968], + [0.005553725496786973, 0.005553754046559334], + [0.008691018931968294, 0.008691128343343735], + [0.02992889492062484, 0.02993336319923401], + [0.05122020579778827, 0.05124260485172272], + [0.1117800293787828, 0.11201295256614685], + [0.23269806521543376, 0.23480379581451416], + [0.4721357117742938, 0.4898730516433716], + [0.694611571189336, 0.7518312931060792], + [1.2781607348262256, 1.6557407379150393], + [1.9917262343245115, 3.5958566665649414], + [2.009484184971722, 3.6627054214477544], + [2.128787712416205, 4.142845153808595], + [2.4846967934155475, 5.95706558227539], + [3.083125584533294, 10.890350341796875], + [4.002981567623351, 27.3714599609375], + [4.080736210902826, 29.586067199707028], + [4.120845430011113, 30.79753875732421], + [4.351258506393416, 38.78157043457031], + [4.540883728536112, 46.88148498535155], + [4.547981853382592, 47.21551513671875], + [4.5480891170767, 47.220581054687514], + [4.599728302509061, 49.72361755371096], + [4.8131842711857535, 61.557464599609396], + [4.910082619934558, 67.82162475585939], + [4.924747230639767, 68.82363891601564], + [4.993937439635391, 73.75466918945312], + [5.087099712053554, 80.95669555664065], + [5.1389346970196295, 85.26406860351562], + [5.138977285472121, 85.26770019531251], + [5.223879832616765, 92.82385253906247], + [5.241812789460327, 94.50357055664062], + [5.447141014648796, 116.04467773437499], + [5.511633288238573, 123.77554321289061], + [5.578681289305598, 132.3592529296875], + [5.633110296634631, 139.76330566406253], + [5.662701238627725, 143.96093750000003], + [5.678906941005323, 146.31298828124997], + [5.737214893086866, 155.0980224609375], + [5.739660763047893, 155.4778442382812], + [5.741349685869528, 155.74066162109372], + [5.790614371552514, 163.60546874999994], + [5.879059869096351, 178.73510742187494], + [5.884458728291027, 179.70269775390622], + [5.885109945587401, 179.8197631835937], + [5.893636014368936, 181.35949707031256], + [5.965274032538233, 194.82861328125003], + [5.967346683696556, 195.23284912109375], + [5.986843466070591, 199.07666015624994], + [6.019932686217942, 205.77423095703134], + [6.021252909681261, 206.0460815429687], + [6.037231102920489, 209.36480712890634], + [6.043606439928324, 210.70385742187506], + [6.06478541011501, 215.21398925781244], + [6.112974120371601, 225.83892822265622], + [6.117902255760311, 226.95465087890622], + [6.1433256889594094, 232.79864501953136], + [6.176483527820343, 240.64721679687503], + [6.186757751007361, 243.13244628906241], + [6.219667373726848, 251.26702880859372], + [6.229418088083555, 253.72906494140634], + [6.233184983047428, 254.68664550781241], + [6.243005711460192, 257.20019531250006], + [6.245102704489327, 257.74011230468744], + [6.260468857392134, 261.73120117187506], + [6.268152459140511, 263.74999999999994], + [6.2748285545831655, 265.5167236328125], + [6.305976070434008, 273.9171142578125], + [6.32399546069982, 278.8977050781249], + [6.324961403980197, 279.16723632812506], + [6.370613506132747, 292.20727539062494], + [6.375359978930309, 293.59753417968744], + [6.3766447200146, 293.9749755859376], + [6.380802563199264, 295.19982910156244], + [6.387824152942429, 297.27990722656244], + [6.390003820200831, 297.9285888671876], + [6.3905985680679, 298.10583496093744], + [6.397866642974941, 300.2803955078125], + [6.421725738171608, 307.5310058593751], + [6.423818963102848, 308.17541503906244], + [6.428865255911759, 309.7344970703124], + [6.443449261058927, 314.28479003906244], + [6.444844602076255, 314.7236328125], + [6.464094341970107, 320.84069824218756], + [6.465356699668166, 321.24597167968744], + [6.467400466944125, 321.90319824218756], + [6.472218114936839, 323.457763671875], + [6.4947499213823265, 330.8286132812501], + [6.507305446835735, 335.00854492187483], + [6.524202033435675, 340.71716308593756], + [6.546694993078936, 348.46777343749994], + [6.548591493378012, 349.1292724609374], + [6.613194950203132, 372.4288330078126], + [6.6247505436339065, 376.7574462890626], + [6.629181796246806, 378.43066406249994], + [6.6616087711302185, 390.9031982421874], + [6.698989091751707, 405.79187011718744], + [6.702857353572475, 407.3646240234375], + [6.717505881986416, 413.37585449218756], + [6.723197804327891, 415.73547363281256], + [6.726699007993023, 417.1936035156251], + [6.735483889307782, 420.87475585937483], + [6.755219602793124, 429.26354980468756], + [6.756366380816258, 429.75610351562506], + [6.766177290841293, 433.99316406250006], + [6.766217511883346, 434.01062011718767], + [6.780091308338912, 440.0739746093749], + [6.802889310303153, 450.22204589843744], + [6.813484439494547, 455.017578125], + [6.818196843455478, 457.16687011718744], + [6.818940201487998, 457.50683593749994], + [6.822833193143805, 459.29138183593756], + [6.82327083544577, 459.49243164062506], + [6.823817951018, 459.743896484375], + [6.834945773756887, 464.8884277343749], + [6.835113285253827, 464.96630859375017], + [6.840964582694129, 467.6949462890624], + [6.84346890521034, 468.86767578125017], + [6.847141429556457, 470.5927734375002], + [6.869243403190376, 481.10961914062483], + [6.882355637062964, 487.4595947265624], + [6.884531678915821, 488.5214843750001], + [6.89341643293734, 492.8812255859376], + [6.895822338701104, 494.06848144531233], + [6.900653737167637, 496.46130371093733], + [7.2670429692740965, 716.1540527343751], + [8.188647968122073, 1799.925781250001], + [8.872023251113289, 3564.8457031250014], + [9.566596912986167, 7139.869140625004], + [10.092554861905608, 12081.222656249996], + [10.728112113864427, 22810.24218749999], + [11.442480870715618, 46598.96875000003], + [12.28759157077177, 108493.37500000009], + [12.636950838344218, 153860.81249999988], + [13.327813723030063, 307019.4999999998], + [14.126778167009777, 682577.25], + [15.090269265334971, 1788919.000000001], + [15.835512291283944, 3769169], + [15.973721689554742, 4327820.000000002], + [16.910547205715446, 11044023.999999983], + [17.573132558903225, 21423208.000000004], + [18.649063156437965, 62828288.00000006], + [18.760110887365155, 70207360.00000012], + [19.547111966180875, 154231424.00000012], + [20.193967491567523, 294509055.9999997], + [21.484592263156223, 1070557183.9999999], + [22.088297141021556, 1957922816.0000024], + [22.780591462699917, 3912507392.0000005], + [23.401438520318692, 7279233024.000007], + [23.684949498080787, 9665245184.000017], + [24.5355829820426, 22627590144.000004], + [25.520740767599584, 60601991168.00004], + [26.31438890085422, 134018236416.00002], + [26.73876398039979, 204864946175.99973], + [27.06660583008718, 284346286080.00024], + [28.234874284944635, 914576637951.9989], + [28.78280496108106, 1581915832319.9973] +]; + +for (var [x, y] of sinh_data) + assertNear(Math.sinh(x), y, sloppy_tolerance); + +reportCompare(0, 0, "ok"); + diff --git a/source/spidermonkey-tests/ecma_6/Math/sinh-exact.js b/source/spidermonkey-tests/ecma_6/Math/sinh-exact.js new file mode 100644 index 00000000..bfae1f75 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/sinh-exact.js @@ -0,0 +1,19 @@ +// Properties of Math.sinh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.sinh(NaN), NaN); + +// If x is +0, the result is +0. +assertEq(Math.sinh(+0), +0); + +// If x is −0, the result is −0. +assertEq(Math.sinh(-0), -0); + +// If x is +∞, the result is +∞. +assertEq(Math.sinh(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assertEq(Math.sinh(-Infinity), -Infinity); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/tanh-approx.js b/source/spidermonkey-tests/ecma_6/Math/tanh-approx.js new file mode 100644 index 00000000..b41427c3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/tanh-approx.js @@ -0,0 +1,282 @@ +var sloppy_tolerance = 4; + +for (var i = -20; i < 20; i++) { + assertNear(Math.tanh(i), + (Math.exp(i) - Math.exp(-i)) / (Math.exp(i) + Math.exp(-i)), + sloppy_tolerance); +} + +assertEq(Math.tanh(1e300), 1); + +var tanh_data = [ + [-0.9999983310699463, -6.998237084679027], + [-0.9999978542327881, -6.87257975132917], + [-0.999992847442627, -6.2705920974657525], + [-0.9999861717224121, -5.940967614084813], + [-0.9999828338623047, -5.832855225378502], + [-0.9999399185180664, -5.20646301208756], + [-0.9998834133148193, -4.8749821841810785], + [-0.9998509883880615, -4.752279497280338], + [-0.9996016025543213, -4.260504202858904], + [-0.9993612766265869, -4.0244334353203115], + [-0.9989283084869385, -3.7655641082999236], + [-0.9969782829284668, -3.246782610980921], + [-0.9950058460235596, -2.9950671179940938], + [-0.9942638874053955, -2.9256242749609536], + [-0.990715742111206, -2.6839646283308363], + [-0.9903340339660645, -2.663723350226518], + [-0.9760982990264893, -2.207464998348322], + [-0.975830078125, -2.201817459680556], + [-0.9728245735168457, -2.1424542308291437], + [-0.9643559455871582, -2.0046686756020917], + [-0.9377224445343018, -1.7188337346177065], + [-0.9362406730651855, -1.7066940482565154], + [-0.9310147762298584, -1.6659543005533146], + [-0.9284839630126953, -1.6472838718760747], + [-0.9270248413085938, -1.6368067340881562], + [-0.9075665473937988, -1.5135473477311114], + [-0.897477388381958, -1.4590986086331497], + [-0.8920106887817383, -1.431681573516303], + [-0.8776559829711914, -1.365471286049011], + [-0.864722728729248, -1.3117705583444539], + [-0.8482067584991455, -1.249725893334944], + [-0.8056559562683105, -1.1145246028592257], + [-0.8048388957977295, -1.112200609756455], + [-0.7801985740661621, -1.0458778330822556], + [-0.7749934196472168, -1.032711173436253], + [-0.7619285583496094, -1.0007967281362184], + [-0.7504425048828125, -0.9739672824457072], + [-0.7495596408843994, -0.9719492983286864], + [-0.7481319904327393, -0.968698942014487], + [-0.7459518909454346, -0.9637657636705832], + [-0.7401137351989746, -0.9507308314464193], + [-0.7289731502532959, -0.9265325319867653], + [-0.7226788997650146, -0.9132299082876396], + [-0.7161557674407959, -0.8997082193533088], + [-0.7017018795013428, -0.8706453720344796], + [-0.7013418674468994, -0.86993650130945], + [-0.691054105758667, -0.8499705913361888], + [-0.6847054958343506, -0.837919455842005], + [-0.6838164329528809, -0.8362476144993315], + [-0.6747090816497803, -0.8193374156276964], + [-0.6575610637664795, -0.7885046044142132], + [-0.6522045135498047, -0.7791255597799839], + [-0.6261923313140869, -0.7351275788820003], + [-0.623173713684082, -0.7301771459970386], + [-0.6067488193511963, -0.7037597526130627], + [-0.5838055610656738, -0.6682166303197608], + [-0.579524040222168, -0.6617457665293066], + [-0.5760939121246338, -0.656596458857398], + [-0.5654678344726562, -0.6408350116350283], + [-0.5578761100769043, -0.6297442839791668], + [-0.5523209571838379, -0.6217149641475687], + [-0.5396339893341064, -0.6036390747171698], + [-0.5128989219665527, -0.5666556256064771], + [-0.5087778568267822, -0.5610793900942042], + [-0.4977825880050659, -0.546353950571504], + [-0.4913865327835083, -0.5378865967606703], + [-0.48976075649261475, -0.5357455496477738], + [-0.48493504524230957, -0.5294166456244711], + [-0.4479050636291504, -0.4820764946679979], + [-0.4461095333099365, -0.4798325976916711], + [-0.4429593086242676, -0.47590653371561276], + [-0.42827916145324707, -0.45778739362936793], + [-0.40590059757232666, -0.4306933608076879], + [-0.40029656887054443, -0.4240020382545707], + [-0.3961341381072998, -0.4190551379319939], + [-0.3836275339126587, -0.40430627175908734], + [-0.36686253547668457, -0.3847928551425507], + [-0.3657644987106323, -0.38352464227459343], + [-0.33507001399993896, -0.3485286317501442], + [-0.32572221755981445, -0.3380352468276522], + [-0.3191967010498047, -0.3307524237890151], + [-0.3000025749206543, -0.3095224337886503], + [-0.29665136337280273, -0.3058438250228025], + [-0.2944457530975342, -0.3034271164344305], + [-0.2872810363769531, -0.29560018347246825], + [-0.27738428115844727, -0.28484608203169437], + [-0.2390844225883484, -0.2438028008332661], + [-0.23685944080352783, -0.24144425169391517], + [-0.2253856658935547, -0.2293228153248168], + [-0.22283810377120972, -0.22664053064745143], + [-0.21552443504333496, -0.21895773601143995], + [-0.2153375744819641, -0.21876178107952995], + [-0.21016258001327515, -0.21334143320771737], + [-0.20250272750854492, -0.2053409277979887], + [-0.19156384468078613, -0.19396008474133075], + [-0.18251943588256836, -0.18458771439322938], + [-0.17464947700500488, -0.17645844608618066], + [-0.15646183490753174, -0.15775766677189154], + [-0.15580910444259644, -0.15708862621964176], + [-0.15365445613861084, -0.15488112515549593], + [-0.122499018907547, -0.12311733609904851], + [-0.1088167130947113, -0.10924929296737837], + [-0.08792558312416077, -0.08815322150790302], + [-0.08401328325271606, -0.08421178632314608], + [-0.06121261417865753, -0.06128924075509796], + [-0.05341699719429016, -0.05346789060550386], + [-0.05047759413719177, -0.05052053189238029], + [-0.02924579381942749, -0.029254136237332657], + [-0.02485968917608261, -0.02486481220617492], + [-0.020469173789024353, -0.02047203328100153], + [-0.01882001757621765, -0.018822240021756347], + [-0.016152501106262207, -0.016153906073109205], + [-0.0032715508714318275, -0.003271562543358962], + [1.6504814008555524e-12, 1.6504814008555524e-12], + [2.0654207510961697e-12, 2.0654207510961697e-12], + [6.933230031758164e-12, 6.933230031758164e-12], + [1.3351444949627478e-11, 1.3351444949627478e-11], + [1.6399812063916386e-11, 1.6399812063916386e-11], + [5.730159402528301e-11, 5.730159402528301e-11], + [1.113731329382972e-10, 1.113731329382972e-10], + [1.4214707189097453e-10, 1.4214707189097453e-10], + [3.8006320313144215e-10, 3.8006320313144215e-10], + [6.09162720266454e-10, 6.09162720266454e-10], + [1.0221641311147778e-9, 1.0221641311147778e-9], + [2.8819222563924995e-9, 2.8819222563924995e-9], + [4.7627768395841485e-9, 4.7627768395841485e-9], + [8.854133426439148e-9, 8.854133426439148e-9], + [2.3050326092288742e-8, 2.3050326092288745e-8], + [5.9392490925347374e-8, 5.939249092534745e-8], + [1.166764889148908e-7, 1.1667648891489133e-7], + [2.3799674409019644e-7, 2.3799674409020094e-7], + [4.684659415943315e-7, 4.684659415943658e-7], + [9.382699772686465e-7, 9.382699772689218e-7], + [0.00000110398559627356, 0.0000011039855962740086], + [0.0000032917760108830407, 0.0000032917760108949305], + [0.00000751721381675452, 0.000007517213816896115], + [0.000015114666894078255, 0.000015114666895229252], + [0.00002986399340443313, 0.00002986399341331128], + [0.00003387028118595481, 0.000033870281198906756], + [0.00009066011989489198, 0.00009066012014327826], + [0.00021949532674625516, 0.0002194953302712184], + [0.00043952150736004114, 0.0004395215356621756], + [0.0006333151832222939, 0.0006333152678940465], + [0.001115123275667429, 0.0011151237378863419], + [0.001962467096745968, 0.001962469616086656], + [0.005553754046559334, 0.005553811147953338], + [0.007324676960706711, 0.0073248079567425], + [0.008691128343343735, 0.008691347183450786], + [0.011912941932678223, 0.011913505535037906], + [0.02993336319923401, 0.029942308168570204], + [0.05124260485172272, 0.05128752666822782], + [0.05473744869232178, 0.05479221508125444], + [0.06158891320228577, 0.061666963819518306], + [0.09375360608100891, 0.09402975380882211], + [0.09442159533500671, 0.09470370926367391], + [0.09443172812461853, 0.09471393321406026], + [0.09943729639053345, 0.09976699249016487], + [0.11201295256614685, 0.11248498303558895], + [0.12310260534286499, 0.12373016402339168], + [0.13562965393066406, 0.13647060950861248], + [0.13763350248336792, 0.13851257866094746], + [0.14749455451965332, 0.14857829980464834], + [0.1618971824645996, 0.16333433166790448], + [0.17051106691360474, 0.17219298693637355], + [0.17051833868026733, 0.17220047646299907], + [0.18562912940979004, 0.18780647318150087], + [0.18898820877075195, 0.1912876932893582], + [0.23206615447998047, 0.23637212433914523], + [0.23480379581451416, 0.2392675448267427], + [0.2646920680999756, 0.27114729033023005], + [0.2794986963272095, 0.2871382059344433], + [0.28789305686950684, 0.2962673858386819], + [0.292596697807312, 0.30140373665239234], + [0.3101649284362793, 0.320727882769785], + [0.3109246492385864, 0.3215686893944558], + [0.31145012378692627, 0.3221505056451929], + [0.3271782398223877, 0.3396649461699478], + [0.3574345111846924, 0.37394153436545424], + [0.3593693971633911, 0.37616159223090223], + [0.35960352420806885, 0.37643046596933716], + [0.3626827001571655, 0.3799714809649667], + [0.38961827754974365, 0.4113499159905353], + [0.3904266357421875, 0.41230330080214], + [0.3981136083602905, 0.4214052375603139], + [0.411507248878479, 0.43742438709579096], + [0.4120509624481201, 0.43807911823743495], + [0.41868770122528076, 0.4460997186945703], + [0.42136549949645996, 0.4493511447897729], + [0.4516327381134033, 0.48674948990473677], + [0.4538639783859253, 0.4895560176112375], + [0.4655507802963257, 0.5043748446613433], + [0.48124635219573975, 0.5246050193978663], + [0.48621630668640137, 0.5310932154891663], + [0.4898730516433716, 0.5358932909903701], + [0.5024838447570801, 0.5526234425942533], + [0.5074074268341064, 0.5592320547729962], + [0.5093221664428711, 0.5618140818296767], + [0.5143489837646484, 0.5686253097655146], + [0.5154285430908203, 0.5700943191671631], + [0.5234100818634033, 0.5810250825991418], + [0.5274472236633301, 0.5866018515043636], + [0.5309803485870361, 0.5915094458340507], + [0.5477793216705322, 0.6152030999229688], + [0.5577394962310791, 0.6295459624918965], + [0.5582785606384277, 0.6303287742357745], + [0.5843560695648193, 0.6690521906099505], + [0.5871362686157227, 0.6732844960442398], + [0.5878911018371582, 0.6744372167164567], + [0.5903406143188477, 0.6781887236623534], + [0.5945003032684326, 0.684597775489552], + [0.5957975387573242, 0.6866065102131665], + [0.5961520671844482, 0.6871563252400655], + [0.6005008220672607, 0.6939300827887145], + [0.6150004863739014, 0.7169242329194352], + [0.6162893772125244, 0.7189998055497108], + [0.6194069385528564, 0.7240422748778544], + [0.6285066604614258, 0.7389438896054792], + [0.6293842792510986, 0.7403958734869583], + [0.6416172981262207, 0.7609178886018204], + [0.6424276828765869, 0.7622965466812235], + [0.6437420845031738, 0.7645378650643101], + [0.6468508243560791, 0.769864795178161], + [0.6615910530090332, 0.7956379107512945], + [0.669950008392334, 0.8106524185805045], + [0.6813662052154541, 0.8316597473423232], + [0.6968657970428467, 0.8611812790659296], + [0.6981887817382812, 0.8637579113749143], + [0.7447831630706787, 0.9611360201710216], + [0.7518312931060791, 0.9771540941752986], + [0.7534394264221191, 0.9808634133542229], + [0.7567856311798096, 0.9886489208209699], + [0.7817282676696777, 1.0497991719828956], + [0.8115026950836182, 1.1314141444187586], + [0.814647912979126, 1.1406947755584418], + [0.8266689777374268, 1.1775230833699681], + [0.8313877582550049, 1.1926138225701433], + [0.8343038558959961, 1.2021323323039612], + [0.8416652679443359, 1.2268570644335162], + [0.8584413528442383, 1.2873896671573652], + [0.8678996562957764, 1.3245040433929398], + [0.8679344654083252, 1.3246451309261607], + [0.8800599575042725, 1.3760334877782177], + [0.9003539085388184, 1.4740852961194106], + [0.9099440574645996, 1.5271990851861994], + [0.9142425060272217, 1.5527768948273004], + [0.9149219989776611, 1.556931837197936], + [0.9184908866882324, 1.5792896628381612], + [0.9188928604125977, 1.5818663359427627], + [0.919395923614502, 1.5851082843320008], + [0.9296839237213135, 1.6560555223295368], + [0.9298396110534668, 1.6572041418041492], + [0.9352962970733643, 1.6990986433619266], + [0.9376416206359863, 1.718164398807965], + [0.9410912990570068, 1.7475084077246632], + [0.962122917175293, 1.9737180163455101], + [0.9748215675354004, 2.1811227771083783], + [0.9769454002380371, 2.2257214499698255], + [0.985663890838623, 2.4654635601650536], + [0.9880380630493164, 2.5565869228142004], + [0.9928233623504639, 2.8132383539094192], + [1e-300, 1e-300], + [0.00001, 0.000010000000000333334], + [0.3, 0.3095196042031117], + [1e-30, 1e-30], + [1e-10, 1e-10], +]; + +for (var [x, y] of tanh_data) + assertNear(Math.tanh(y), x, sloppy_tolerance); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/tanh-exact.js b/source/spidermonkey-tests/ecma_6/Math/tanh-exact.js new file mode 100644 index 00000000..bfd9ac4d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/tanh-exact.js @@ -0,0 +1,19 @@ +// Properties of Math.tanh that are guaranteed by the spec. + +// If x is NaN, the result is NaN. +assertEq(Math.tanh(NaN), NaN); + +// If x is +0, the result is +0. +assertEq(Math.tanh(+0), +0); + +// If x is −0, the result is −0. +assertEq(Math.tanh(-0), -0); + +// If x is +∞, the result is +1. +assertEq(Math.tanh(Number.POSITIVE_INFINITY), +1); + +// If x is −∞, the result is -1. +assertEq(Math.tanh(Number.NEGATIVE_INFINITY), -1); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Math/trunc.js b/source/spidermonkey-tests/ecma_6/Math/trunc.js new file mode 100644 index 00000000..4cadfd92 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Math/trunc.js @@ -0,0 +1,50 @@ +// If x is NaN, the result is NaN. +assertEq(Math.trunc(NaN), NaN); + +// If x is −0, the result is −0. +assertEq(Math.trunc(-0), -0); + +// If x is +0, the result is +0. +assertEq(Math.trunc(+0), +0); + +// If x is +∞, the result is +∞. +assertEq(Math.trunc(Infinity), Infinity); + +// If x is −∞, the result is −∞. +assertEq(Math.trunc(-Infinity), -Infinity); + +// Other boundary cases. +var MAX_NONINTEGER_VALUE = 4503599627370495.5; +var TRUNC_MAX_NONINTEGER_VALUE = 4503599627370495; + +assertEq(Math.trunc(Number.MIN_VALUE), +0); +assertEq(Math.trunc(ONE_MINUS_EPSILON), +0); +assertEq(Math.trunc(ONE_PLUS_EPSILON), 1); +assertEq(Math.trunc(MAX_NONINTEGER_VALUE), TRUNC_MAX_NONINTEGER_VALUE); +assertEq(Math.trunc(Number.MAX_VALUE), Number.MAX_VALUE); + +assertEq(Math.trunc(-Number.MIN_VALUE), -0); +assertEq(Math.trunc(-ONE_MINUS_EPSILON), -0); +assertEq(Math.trunc(-ONE_PLUS_EPSILON), -1); +assertEq(Math.trunc(-MAX_NONINTEGER_VALUE), -TRUNC_MAX_NONINTEGER_VALUE); +assertEq(Math.trunc(-Number.MAX_VALUE), -Number.MAX_VALUE); + +// Other cases. +for (var i = 1, f = 1.1; i < 20; i++, f += 1.0) + assertEq(Math.trunc(f), i); + +for (var i = -1, f = -1.1; i > -20; i--, f -= 1.0) + assertEq(Math.trunc(f), i); + +assertEq(Math.trunc(1e40 + 0.5), 1e40); + +assertEq(Math.trunc(1e300), 1e300); +assertEq(Math.trunc(-1e300), -1e300); +assertEq(Math.trunc(1e-300), 0); +assertEq(Math.trunc(-1e-300), -0); + +assertEq(Math.trunc(+0.9999), +0); +assertEq(Math.trunc(-0.9999), -0); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/Number/15.7.3.7-EPSILON.js b/source/spidermonkey-tests/ecma_6/Number/15.7.3.7-EPSILON.js new file mode 100644 index 00000000..55e92ef1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/15.7.3.7-EPSILON.js @@ -0,0 +1,24 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 885798; +var summary = "ES6 (draft May 2013) 15.7.3.7 Number.EPSILON"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Test value +assertEq(Number.EPSILON, Math.pow(2, -52)); + +// Test property attributes +var descriptor = Object.getOwnPropertyDescriptor(Number, 'EPSILON'); +assertEq(descriptor.writable, false); +assertEq(descriptor.configurable, false); +assertEq(descriptor.enumerable, false); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Number/20.1.2.10-MIN_SAFE_INTEGER.js b/source/spidermonkey-tests/ecma_6/Number/20.1.2.10-MIN_SAFE_INTEGER.js new file mode 100644 index 00000000..8b96651f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/20.1.2.10-MIN_SAFE_INTEGER.js @@ -0,0 +1,26 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- + +var BUGNUMBER = 885798; +var summary = "ES6 (draft April 2014) 20.1.2.10 Number.MIN_SAFE_INTEGER"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Test value +assertEq(Number.MIN_SAFE_INTEGER, -(Math.pow(2, 53) - 1)); + +//Test property attributes +var descriptor = Object.getOwnPropertyDescriptor(Number, 'MIN_SAFE_INTEGER'); + +assertEq(descriptor.writable, false); +assertEq(descriptor.configurable, false); +assertEq(descriptor.enumerable, false); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Number/20.1.2.6-MAX_SAFE_INTEGER.js b/source/spidermonkey-tests/ecma_6/Number/20.1.2.6-MAX_SAFE_INTEGER.js new file mode 100644 index 00000000..e3a2ddff --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/20.1.2.6-MAX_SAFE_INTEGER.js @@ -0,0 +1,26 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- + +var BUGNUMBER = 885798; +var summary = "ES6 (draft April 2014) 20.1.2.6 Number.MAX_SAFE_INTEGER"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// Test value +assertEq(Number.MAX_SAFE_INTEGER, Math.pow(2, 53) - 1); + +//Test property attributes +var descriptor = Object.getOwnPropertyDescriptor(Number, 'MAX_SAFE_INTEGER'); + +assertEq(descriptor.writable, false); +assertEq(descriptor.configurable, false); +assertEq(descriptor.enumerable, false); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Number/ToNumber.js b/source/spidermonkey-tests/ecma_6/Number/ToNumber.js new file mode 100644 index 00000000..5716c8a0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/ToNumber.js @@ -0,0 +1,26 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +assertEq(Number("0b11"), 3); +assertEq(Number("0B11"), 3); +assertEq(Number(" 0b11 "), 3); +assertEq(Number("0b12"), NaN); +assertEq(Number("-0b11"), NaN); +assertEq(+"0b11", 3); + +assertEq(Number("0o66"), 54); +assertEq(Number("0O66"), 54); +assertEq(Number(" 0o66 "), 54); +assertEq(Number("0o88"), NaN); +assertEq(Number("-0o66"), NaN); +assertEq(+"0o66", 54); + +if(typeof getSelfHostedValue === "function"){ + assertEq(getSelfHostedValue("ToNumber")("0b11"), 3); + assertEq(getSelfHostedValue("ToNumber")("0o66"), 54); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Number/browser.js b/source/spidermonkey-tests/ecma_6/Number/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Number/isSafeInteger-01.js b/source/spidermonkey-tests/ecma_6/Number/isSafeInteger-01.js new file mode 100644 index 00000000..d1a11cfe --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/isSafeInteger-01.js @@ -0,0 +1,40 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 1003764; +var summary = "ES6 (draft Draft May 22, 2014) ES6 20.1.2.5 Number.isSafeInteger(number)"; + +print(BUGNUMBER + ": " + summary); + +assertEq(Number.isSafeInteger.length, 1); + +assertEq(Number.isSafeInteger({}), false); +assertEq(Number.isSafeInteger(NaN), false); +assertEq(Number.isSafeInteger(+Infinity), false); +assertEq(Number.isSafeInteger(-Infinity), false); + +assertEq(Number.isSafeInteger(-1), true); +assertEq(Number.isSafeInteger(+0), true); +assertEq(Number.isSafeInteger(-0), true); +assertEq(Number.isSafeInteger(1), true); + +assertEq(Number.isSafeInteger(3.2), false); + +assertEq(Number.isSafeInteger(Math.pow(2, 53) - 2), true); +assertEq(Number.isSafeInteger(Math.pow(2, 53) - 1), true); +assertEq(Number.isSafeInteger(Math.pow(2, 53)), false); +assertEq(Number.isSafeInteger(Math.pow(2, 53) + 1), false); +assertEq(Number.isSafeInteger(Math.pow(2, 53) + 2), false); + +assertEq(Number.isSafeInteger(-Math.pow(2, 53) - 2), false); +assertEq(Number.isSafeInteger(-Math.pow(2, 53) - 1), false); +assertEq(Number.isSafeInteger(-Math.pow(2, 53)), false); +assertEq(Number.isSafeInteger(-Math.pow(2, 53) + 1), true); +assertEq(Number.isSafeInteger(-Math.pow(2, 53) + 2), true); + + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_6/Number/parseFloat-01.js b/source/spidermonkey-tests/ecma_6/Number/parseFloat-01.js new file mode 100644 index 00000000..b870f93f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/parseFloat-01.js @@ -0,0 +1,24 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 886949; +var summary = "ES6 (draft May 2013) 15.7.3.10 Number.parseFloat(string)"; + +print(BUGNUMBER + ": " + summary); + +assertEq(Number.parseFloat("Infinity"), Infinity); +assertEq(Number.parseFloat("+Infinity"), Infinity); +assertEq(Number.parseFloat("-Infinity"), -Infinity); + +assertEq(Number.parseFloat("inf"), NaN); +assertEq(Number.parseFloat("Inf"), NaN); +assertEq(Number.parseFloat("infinity"), NaN); + +assertEq(Number.parseFloat("nan"), NaN); +assertEq(Number.parseFloat("NaN"), NaN); + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_6/Number/parseInt-01.js b/source/spidermonkey-tests/ecma_6/Number/parseInt-01.js new file mode 100644 index 00000000..7ffd26e2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/parseInt-01.js @@ -0,0 +1,170 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 886949; +var summary = "ES6 (draft May 2013) 15.7.3.9 Number.parseInt(string, radix)"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var str, radix; +var upvar; + +/* 1. Let inputString be ToString(string). */ + +assertEq(Number.parseInt({ toString: function() { return "17" } }, 10), 17); + +upvar = 0; +str = { get toString() { upvar++; return function() { upvar++; return "12345"; } } }; +assertEq(Number.parseInt(str, 10), 12345); +assertEq(upvar, 2); + + +/* + * 2. Let S be a newly created substring of inputString consisting of the first + * character that is not a StrWhiteSpaceChar and all characters following + * that character. (In other words, remove leading white space.) + */ + +var ws = + ["\t", "\v", "\f", " ", "\xA0", "\uFEFF", + "\u2004", "\u3000", // a few Unicode whitespaces + "\r", "\n", "\u2028", "\u2029"]; + +str = "8675309"; +for (var i = 0, sz = ws.length; i < sz; i++) +{ + assertEq(Number.parseInt(ws[i] + str, 10), 8675309); + for (var j = 0, sz = ws.length; j < sz; j++) + { + assertEq(Number.parseInt(ws[i] + ws[j] + str, 10), 8675309, + ws[i].charCodeAt(0).toString(16) + ", " + + ws[j].charCodeAt(0).toString(16)); + } +} + + +/* + * 3. Let sign be 1. + * 4. If S is not empty and the first character of S is a minus sign -, let + * sign be −1. + */ +str = "5552368"; +assertEq(Number.parseInt("-" + str, 10), -Number.parseInt(str, 10)); +assertEq(Number.parseInt(" -" + str, 10), -Number.parseInt(str, 10)); +assertEq(Number.parseInt("-", 10), NaN); +assertEq(Number.parseInt("", 10), NaN); +assertEq(Number.parseInt("-0", 10), -0); + + +/* + * 5. If S is not empty and the first character of S is a plus sign + or a + * minus sign -, then remove the first character from S. + */ +assertEq(Number.parseInt("+12345", 10), 12345); +assertEq(Number.parseInt(" +12345", 10), 12345); +assertEq(Number.parseInt("-12345", 10), -12345); +assertEq(Number.parseInt(" -12345", 10), -12345); + + +/* + * 6. Let R = ToInt32(radix). + */ + +upvar = ""; +str = + { toString: function() { if (!upvar) upvar = "string"; return "42"; } }; +radix = + { toString: function() { if (!upvar) upvar = "radix"; return "10"; } }; + +assertEq(Number.parseInt(str, radix), 42); +assertEq(upvar, "string"); + +assertEq(Number.parseInt("123", null), 123); +assertEq(Number.parseInt("123", undefined), 123); +assertEq(Number.parseInt("123", NaN), 123); +assertEq(Number.parseInt("123", -0), 123); +assertEq(Number.parseInt("10", 72057594037927950), 16); +assertEq(Number.parseInt("10", -4294967292), 4); +assertEq(Number.parseInt("0x10", 1e308), 16); +assertEq(Number.parseInt("10", 1e308), 10); +assertEq(Number.parseInt("10", { valueOf: function() { return 16; } }), 16); + + +/* + * 7. Let stripPrefix be true. + * 8. If R ≠ 0, then + * a. If R < 2 or R > 36, then return NaN. + * b. If R ≠ 16, let stripPrefix be false. + * 9. Else, R = 0 + * a. Let R = 10. + * 10. If stripPrefix is true, then + * a. If the length of S is at least 2 and the first two characters of S + * are either “0x” or “0X”, then remove the first two characters from S and + * let R = 16. + */ +var vs = ["1", "51", "917", "2343", "99963"]; +for (var i = 0, sz = vs.length; i < sz; i++) + assertEq(Number.parseInt(vs[i], 0), Number.parseInt(vs[i], 10), "bad " + vs[i]); + +assertEq(Number.parseInt("0x10"), 16); +assertEq(Number.parseInt("0x10", 0), 16); +assertEq(Number.parseInt("0x10", 16), 16); +assertEq(Number.parseInt("0x10", 8), 0); +assertEq(Number.parseInt("-0x10", 16), -16); + +assertEq(Number.parseInt("5", 1), NaN); +assertEq(Number.parseInt("5", 37), NaN); +assertEq(Number.parseInt("5", { valueOf: function() { return -1; } }), NaN); + + +/* + * 11. If S contains any character that is not a radix-R digit, then let Z be + * the substring of S consisting of all characters before the first such + * character; otherwise, let Z be S. + * 12. If Z is empty, return NaN. + */ +assertEq(Number.parseInt(""), NaN); +assertEq(Number.parseInt("ohai"), NaN); +assertEq(Number.parseInt("0xohai"), NaN); +assertEq(Number.parseInt("-ohai"), NaN); +assertEq(Number.parseInt("+ohai"), NaN); +assertEq(Number.parseInt(" ohai"), NaN); + +assertEq(Number.parseInt("0xaohai"), 10); +assertEq(Number.parseInt("hohai", 18), 17); + + +/* + * 13. Let mathInt be the mathematical integer value that is represented by Z + * in radix-R notation, using the letters A-Z and a-z for digits with + * values 10 through 35. (However, if R is 10 and Z contains more than 20 + * significant digits, every significant digit after the 20th may be + * replaced by a 0 digit, at the option of the implementation; and if R is + * not 2, 4, 8, 10, 16, or 32, then mathInt may be an implementation- + * dependent approximation to the mathematical integer value that is + * represented by Z in radix-R notation.) + * 14. Let number be the Number value for mathInt. + * 15. Return sign × number. + */ +assertEq(Number.parseInt("ohai", 36), 1142154); +assertEq(Number.parseInt("0ohai", 36), 1142154); +assertEq(Number.parseInt("00ohai", 36), 1142154); +assertEq(Number.parseInt("A", 16), 10); +assertEq(Number.parseInt("0A", 16), 10); +assertEq(Number.parseInt("00A", 16), 10); +assertEq(Number.parseInt("A", 17), 10); +assertEq(Number.parseInt("0A", 17), 10); +assertEq(Number.parseInt("00A", 17), 10); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_6/Number/parseInt-default-to-decimal.js b/source/spidermonkey-tests/ecma_6/Number/parseInt-default-to-decimal.js new file mode 100644 index 00000000..7049ef66 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Number/parseInt-default-to-decimal.js @@ -0,0 +1,30 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/licenses/publicdomain/ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 886949; +var summary = "ES6 (draft May 2013) 15.7.3.9 Number.parseInt(string, radix)." + + " Verify that Number.parseInt defaults to decimal."; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +assertEq(Number.parseInt("08"), 8); +assertEq(Number.parseInt("09"), 9); +assertEq(Number.parseInt("014"), 14); + +function strictParseInt(s) { "use strict"; return Number.parseInt(s); } + +assertEq(strictParseInt("08"), 8); +assertEq(strictParseInt("09"), 9); +assertEq(strictParseInt("014"), 14); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("All tests passed!"); diff --git a/source/spidermonkey-tests/ecma_6/Number/shell.js b/source/spidermonkey-tests/ecma_6/Number/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Object/assign.js b/source/spidermonkey-tests/ecma_6/Object/assign.js new file mode 100644 index 00000000..6c720804 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/assign.js @@ -0,0 +1,359 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +function checkDataProperty(object, propertyKey, value, writable, enumerable, configurable) { + var desc = Object.getOwnPropertyDescriptor(object, propertyKey); + assertEq(desc === undefined, false); + assertEq('value' in desc, true); + assertEq(desc.value, value); + assertEq(desc.writable, writable); + assertEq(desc.enumerable, enumerable); + assertEq(desc.configurable, configurable); +} + +/* 19.1.2.1 Object.assign ( target, ...sources ) */ +assertEq(Object.assign.length, 2); + +// Basic functionality works with multiple sources +function basicMultipleSources() { + var a = {}; + var b = { bProp : 7 }; + var c = { cProp : 8 }; + Object.assign(a, b, c); + assertEq(a.bProp, 7); + assertEq(a.cProp, 8); +} +basicMultipleSources(); + +// Basic functionality works with symbols (Bug 1052358) +function basicSymbols() { + var a = {}; + var b = { bProp : 7 }; + var aSymbol = Symbol("aSymbol"); + b[aSymbol] = 22; + Object.assign(a, b); + assertEq(a.bProp, 7); + assertEq(a[aSymbol], 22); +} +if (typeof Symbol === "function") + basicSymbols(); + +// Calls ToObject() for target, skips null/undefined sources, uses +// ToObject(source) otherwise. +function testToObject() { + assertThrowsInstanceOf(() => Object.assign(null, null), TypeError); + assertThrowsInstanceOf(() => Object.assign(), TypeError); + assertThrowsInstanceOf(() => Object.assign(null, {}), TypeError); + assertEq(Object.assign({}, null) instanceof Object, true); + assertEq(Object.assign({}, undefined) instanceof Object, true); + + // Technically an embedding could have this as extension acting differently + // from ours, so a feature-test is inadequate. We can move this subtest + // into extensions/ if that ever matters. + if (typeof objectEmulatingUndefined === "function") { + var falsyObject = objectEmulatingUndefined(); + falsyObject.foo = 7; + + var obj = Object.assign({}, falsyObject); + assertEq(obj instanceof Object, true); + assertEq(obj.foo, 7); + } + + assertEq(Object.assign(true, {}) instanceof Boolean, true); + assertEq(Object.assign(1, {}) instanceof Number, true); + assertEq(Object.assign("string", {}) instanceof String, true); + var o = {}; + assertEq(Object.assign(o, {}), o); +} +testToObject(); + +// Invokes [[OwnPropertyKeys]] on ToObject(source) +function testOwnPropertyKeys() { + assertThrowsInstanceOf(() => Object.assign(null, new Proxy({}, { + getOwnPropertyNames: () => { throw new Error("not called"); } + })), TypeError); + + var ownKeysCalled = false; + Object.assign({}, new Proxy({}, { + ownKeys: function() { + ownKeysCalled = true; + return []; + } + })); + assertEq(ownKeysCalled, true); +}; +testOwnPropertyKeys(); + +// Ensure correct property traversal +function correctPropertyTraversal() { + var log = ""; + var source = new Proxy({a: 1, b: 2}, { + ownKeys: () => ["b", "c", "a"], + getOwnPropertyDescriptor: function(t, pk) { + log += "#" + pk; + return Object.getOwnPropertyDescriptor(t, pk); + }, + get: function(t, pk, r) { + log += "-" + pk; + return t[pk]; + }, + }); + Object.assign({}, source); + assertEq(log, "#b-b#c#a-a"); +} +correctPropertyTraversal(); + +// Only [[Enumerable]] properties are assigned to target +function onlyEnumerablePropertiesAssigned() { + var source = Object.defineProperties({}, { + a: {value: 1, enumerable: true}, + b: {value: 2, enumerable: false}, + }); + var target = Object.assign({}, source); + assertEq("a" in target, true); + assertEq("b" in target, false); +} +onlyEnumerablePropertiesAssigned(); + + +// Enumerability is decided on-time, not before main loop (1) +function testEnumerabilityDeterminedInLoop1() +{ + var getterCalled = false; + var sourceTarget = { + get a() { getterCalled = true }, + get b() { Object.defineProperty(sourceTarget, "a", {enumerable: false}) }, + }; + var source = new Proxy(sourceTarget, { ownKeys: () => ["b", "a"] }); + Object.assign({}, source); + assertEq(getterCalled, false); +} +testEnumerabilityDeterminedInLoop1(); + +// Enumerability is decided on-time, not before main loop (2) +function testEnumerabilityDeterminedInLoop2() +{ + var getterCalled = false; + var sourceTarget = { + get a() { getterCalled = true }, + get b() { Object.defineProperty(sourceTarget, "a", {enumerable: true}) }, + }; + var source = new Proxy(sourceTarget, { + ownKeys: () => ["b", "a"] + }); + Object.defineProperty(sourceTarget, "a", {enumerable: false}); + Object.assign({}, source); + assertEq(getterCalled, true); +} +testEnumerabilityDeterminedInLoop2(); + +// Properties are retrieved through Get() and assigned onto +// the target as data properties, not in any sense cloned over as descriptors +function testPropertiesRetrievedThroughGet() { + var getterCalled = false; + Object.assign({}, {get a() { getterCalled = true }}); + assertEq(getterCalled, true); +} +testPropertiesRetrievedThroughGet(); + +// Properties are retrieved through Get() +// Properties are assigned through Put() +function testPropertiesAssignedThroughPut() { + var setterCalled = false; + Object.assign({set a(v) { setterCalled = v }}, {a: true}); + assertEq(setterCalled, true); +} +testPropertiesAssignedThroughPut(); + +// Properties are retrieved through Get() +// Properties are assigned through Put(): Existing property attributes are not altered +function propertiesAssignedExistingNotAltered() { + var source = {a: 1, b: 2, c: 3}; + var target = {a: 0, b: 0, c: 0}; + Object.defineProperty(target, "a", {enumerable: false}); + Object.defineProperty(target, "b", {configurable: false}); + Object.defineProperty(target, "c", {enumerable: false, configurable: false}); + Object.assign(target, source); + checkDataProperty(target, "a", 1, true, false, true); + checkDataProperty(target, "b", 2, true, true, false); + checkDataProperty(target, "c", 3, true, false, false); +} +propertiesAssignedExistingNotAltered(); + +// Properties are retrieved through Get() +// Properties are assigned through Put(): Throws TypeError if non-writable +function propertiesAssignedTypeErrorNonWritable() { + var source = {a: 1}; + var target = {a: 0}; + Object.defineProperty(target, "a", {writable: false}); + assertThrowsInstanceOf(() => Object.assign(target, source), TypeError); + checkDataProperty(target, "a", 0, false, true, true); +} +propertiesAssignedTypeErrorNonWritable(); + +// Properties are retrieved through Get() +// Put() creates standard properties; Property attributes from source are ignored +function createsStandardProperties() { + var source = {a: 1, b: 2, c: 3, get d() { return 4 }}; + Object.defineProperty(source, "b", {writable: false}); + Object.defineProperty(source, "c", {configurable: false}); + var target = Object.assign({}, source); + checkDataProperty(target, "a", 1, true, true, true); + checkDataProperty(target, "b", 2, true, true, true); + checkDataProperty(target, "c", 3, true, true, true); + checkDataProperty(target, "d", 4, true, true, true); +} +createsStandardProperties(); + +// Properties created during traversal are not copied +function propertiesCreatedDuringTraversalNotCopied() { + var source = {get a() { this.b = 2 }}; + var target = Object.assign({}, source); + assertEq("a" in target, true); + assertEq("b" in target, false); +} +propertiesCreatedDuringTraversalNotCopied(); + +// Properties deleted during traversal are not copied +function testDeletePropertiesNotCopied() { + var source = new Proxy({ + get a() { delete this.b }, + b: 2, + }, { + getOwnPropertyNames: () => ["a", "b"] + }); + var target = Object.assign({}, source); + assertEq("a" in target, true); + assertEq("b" in target, false); +} +testDeletePropertiesNotCopied(); + +function testDeletionExposingShadowedProperty() +{ + var srcProto = { b: 42 }; + var src = + Object.create(srcProto, + { a: { enumerable: true, get: function() { delete this.b; } }, + b: { value: 2, configurable: true, enumerable: true } }); + var source = new Proxy(src, { getOwnPropertyNames: () => ["a", "b"] }); + var target = Object.assign({}, source); + assertEq("a" in target, true); + assertEq("b" in target, false); +} +testDeletionExposingShadowedProperty(); + +// Properties first deleted and then recreated during traversal are copied (1) +function testDeletedAndRecreatedPropertiesCopied1() { + var source = new Proxy({ + get a() { delete this.c }, + get b() { this.c = 4 }, + c: 3, + }, { + getOwnPropertyNames: () => ["a", "b", "c"] + }); + var target = Object.assign({}, source); + assertEq("a" in target, true); + assertEq("b" in target, true); + assertEq("c" in target, true); + checkDataProperty(target, "c", 4, true, true, true); +} +testDeletedAndRecreatedPropertiesCopied1(); + +// Properties first deleted and then recreated during traversal are copied (2) +function testDeletedAndRecreatedPropertiesCopied2() { + var source = new Proxy({ + get a() { delete this.c }, + get b() { this.c = 4 }, + c: 3, + }, { + ownKeys: () => ["a", "c", "b"] + }); + var target = Object.assign({}, source); + assertEq("a" in target, true); + assertEq("b" in target, true); + assertEq("c" in target, false); +} +testDeletedAndRecreatedPropertiesCopied2(); + +// String and Symbol valued properties are copied +function testStringAndSymbolPropertiesCopied() { + var keyA = "str-prop"; + var source = {"str-prop": 1}; + var target = Object.assign({}, source); + checkDataProperty(target, keyA, 1, true, true, true); +} +testStringAndSymbolPropertiesCopied(); + +// Intermediate exceptions do not stop property traversal, first exception is reported (1) +function testExceptionsDoNotStopFirstReported1() { + var ErrorA = function ErrorA() {}; + var ErrorB = function ErrorB() {}; + var log = ""; + var source = new Proxy({}, { + getOwnPropertyDescriptor: function(t, pk) { + log += pk; + throw new (pk === "a" ? ErrorA : ErrorB); + }, + ownKeys: () => ["b", "a"] + }); + assertThrowsInstanceOf(() => Object.assign({}, source), ErrorB); + assertEq(log, "ba"); +} +testExceptionsDoNotStopFirstReported1(); + +// Properties are retrieved through Get() +// Intermediate exceptions do not stop property traversal, first exception is reported (2) +function testExceptionsDoNotStopFirstReported2() { + var ErrorA = function ErrorA() {}; + var ErrorB = function ErrorB() {}; + var log = ""; + var source = new Proxy({ + get a() { log += "a"; throw new ErrorA }, + get b() { log += "b"; throw new ErrorB }, + }, { + ownKeys: () => ["b", "a"] + }); + assertThrowsInstanceOf(() => Object.assign({}, source), ErrorB); + assertEq(log, "ba"); +} +testExceptionsDoNotStopFirstReported2(); + +// Intermediate exceptions do not stop property traversal, first exception is reported (3) +function testExceptionsDoNotStopFirstReported3() { + var ErrorA = function ErrorA() {}; + var ErrorB = function ErrorB() {}; + var log = ""; + var source = new Proxy({a: 1, b: 2}, { + ownKeys: () => ["b", "a"] + }); + var target = { + set a(v) { log += "a"; throw new ErrorA }, + set b(v) { log += "b"; throw new ErrorB }, + }; + assertThrowsInstanceOf(() => Object.assign(target, source), ErrorB); + assertEq(log, "ba"); +} +testExceptionsDoNotStopFirstReported3(); + +// Intermediate exceptions do not stop property traversal, first exception is reported (4) +function testExceptionsDoNotStopFirstReported4() { + var ErrorGetOwnProperty = function ErrorGetOwnProperty() {}; + var ErrorGet = function ErrorGet() {}; + var ErrorSet = function ErrorSet() {}; + var source = new Proxy({ + get a() { throw new ErrorGet } + }, { + getOwnPropertyDescriptor: function(t, pk) { + throw new ErrorGetOwnProperty; + } + }); + var target = { + set a(v) { throw new ErrorSet } + }; + assertThrowsInstanceOf(() => Object.assign({}, source), ErrorGetOwnProperty); +} +testExceptionsDoNotStopFirstReported4(); + +if (typeof reportCompare == "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/browser.js b/source/spidermonkey-tests/ecma_6/Object/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Object/defineProperty-proxy.js b/source/spidermonkey-tests/ecma_6/Object/defineProperty-proxy.js new file mode 100644 index 00000000..b5ece940 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/defineProperty-proxy.js @@ -0,0 +1,54 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +// Test details of the implementation of ToPropertyDescriptor exposed to scripts +// thanks to scriptable proxies. + +// A LoggingProxy object logs certain operations performed on it. +var log = []; +function LoggingProxy(target) { + return new Proxy(target, { + has: function (t, id) { + log.push("has " + id); + return id in t; + }, + get: function (t, id) { + log.push("get " + id); + return t[id]; + } + }); +} + +// Tragically, we use separate code to implement Object.defineProperty on +// arrays and on proxies. So run the test three times. +var testSubjects = [ + {}, + [], + new Proxy({}, {}) +]; + +for (var obj of testSubjects) { + log = []; + + // Object.defineProperty is one public method that performs a + // ToPropertyDescriptor call. + Object.defineProperty(obj, "x", new LoggingProxy({ + enumerable: true, + configurable: true, + value: 3, + writable: true + })); + + // It should have performed exactly these operations on the proxy, in this + // order. See ES6 rev 24 (2014 April 27) 6.2.4.5 ToPropertyDescriptor. + assertDeepEq(log, [ + "has enumerable", "get enumerable", + "has configurable", "get configurable", + "has value", "get value", + "has writable", "get writable", + "has get", + "has set" + ]); +} + +reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/duplProps.js b/source/spidermonkey-tests/ecma_6/Object/duplProps.js new file mode 100644 index 00000000..41b8d67f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/duplProps.js @@ -0,0 +1,116 @@ +/* + * ES6 allows duplicate property names in object literals, even in strict mode. + * These tests modify the tests in test262 to reflect this change. + */ + +// test262/ch11/11.1/11.1.5/11.1.5-4-4-a-1-s.js +a = function() { "use strict"; return { foo: 0, foo : 1 }}; +assertEq(a().foo, 1); +a = function() { return { foo: 0, foo : 1 }}; +assertEq(a().foo, 1); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-b-1.js +a = function() { "use strict"; return { foo : 1, get foo() { return 2; }}}; +assertEq(a().foo, 2); +a = function() { return { foo : 1, get foo() { return 2;} }}; +assertEq(a().foo, 2); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-c-1.js +a = function() { "use strict"; return { get foo() { return 2; }, foo : 1 }}; +assertEq(a().foo, 1); +a = function() { return { get foo() { return 2; }, foo : 1 }}; +assertEq(a().foo, 1); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-b-2.js +a = function() { "use strict"; return { foo : 1, set foo(a) { throw 2; }}}; +try { + a().foo = 5; + throw new Error("2 should be thrown here"); +} catch (e) { + if (e !== 2) + throw new Error("2 should be thrown here"); +} +a = function() { return { foo : 1, set foo(a) { throw 2;} }}; +try { + a().foo = 5; + throw new Error("2 should be thrown here"); +} catch (e) { + if (e !== 2) + throw new Error("2 should be thrown here"); +} + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-1.js +a = function() { "use strict"; return { get foo() { return 2; }, get foo() { return 3; } }}; +assertEq(a().foo, 3); +a = function() { return { get foo() { return 2; }, get foo() { return 3; } }}; +assertEq(a().foo, 3); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-c-2.js +a = function() { "use strict"; return { set foo(a) { throw 2; }, foo : 1 }}; +assertEq(a().foo, 1); +a = function() { return { set foo(a) { throw 2; }, foo : 1 }}; +assertEq(a().foo, 1); + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-2.js +a = function() { "use strict"; return { set foo(a) { throw 2; }, set foo(a) { throw 3; }}}; +try { + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} +a = function() { return { set foo(a) { throw 2; }, set foo(a) { throw 3; }}}; +try { + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-3.js +a = function() { "use strict"; return { get foo() { return 2; }, set foo(a) { throw 3; }, + get foo() { return 4; }}}; +try { + assertEq(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} +a = function() { return { get foo() { return 2; }, set foo(a) { throw 3; }, + get foo() { return 4; }}}; +try { + assertEq(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} + +// test262/ch11/11.1/11.1.5/11.1.5_4-4-d-4.js +a = function() { "use strict"; return { set foo(a) { throw 2; }, get foo() { return 4; }, + set foo(a) { throw 3; }}}; +try { + assertEq(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} +a = function() { return { set foo(a) { throw 2; }, get foo() { return 4; }, + set foo(a) { throw 3; }}}; +try { + assertEq(a().foo, 4); + a().foo = 5; + throw new Error("3 should be thrown here"); +} catch (e) { + if (e !== 3) + throw new Error("3 should be thrown here"); +} + +reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/freeze-proxy.js b/source/spidermonkey-tests/ecma_6/Object/freeze-proxy.js new file mode 100644 index 00000000..3d95a28d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/freeze-proxy.js @@ -0,0 +1,27 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object = {}, handler = {}) { + var log = []; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + log.push(propertyKey); + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +// The order of operations is backwards when compared to ES6 draft rev 27 +// (2014 August 24), but see https://bugs.ecmascript.org/show_bug.cgi?id=3215 +// for an explanation on why the spec version is clearly wrong. + +var {proxy, log} = logProxy(); +Object.freeze(proxy); +assertDeepEq(log, ["preventExtensions", "ownKeys"]); + +var {proxy, log} = logProxy(); +Object.freeze(Object.freeze(proxy)); +assertDeepEq(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]); + +reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/freeze.js b/source/spidermonkey-tests/ecma_6/Object/freeze.js new file mode 100644 index 00000000..18f71f76 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/freeze.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1076588; +var summary = "Object.freeze() should return its argument with no conversion when the argument is a primitive value"; + +print(BUGNUMBER + ": " + summary); +assertEq(Object.freeze(), undefined); +assertEq(Object.freeze(undefined), undefined); +assertEq(Object.freeze(null), null); +assertEq(Object.freeze(1), 1); +assertEq(Object.freeze("foo"), "foo"); +assertEq(Object.freeze(true), true); +if (typeof Symbol === "function") { + assertEq(Object.freeze(Symbol.for("foo")), Symbol.for("foo")); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/getOwnPropertyDescriptor.js b/source/spidermonkey-tests/ecma_6/Object/getOwnPropertyDescriptor.js new file mode 100644 index 00000000..52d5762c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/getOwnPropertyDescriptor.js @@ -0,0 +1,35 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1079188; +var summary = "Coerce the argument passed to Object.getOwnPropertyDescriptor using ToObject"; +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(), TypeError); +assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(undefined), TypeError); +assertThrowsInstanceOf(() => Object.getOwnPropertyDescriptor(null), TypeError); + +Object.getOwnPropertyDescriptor(1); +Object.getOwnPropertyDescriptor(true); +if (typeof Symbol === "function") { + Object.getOwnPropertyDescriptor(Symbol("foo")); +} + +assertDeepEq(Object.getOwnPropertyDescriptor("foo", "length"), { + configurable: false, + enumerable: false, + value: 3, + writable: false +}); + +assertDeepEq(Object.getOwnPropertyDescriptor("foo", 0), { + configurable: false, + enumerable: true, + value: "f", + writable: false +}); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/getOwnPropertySymbols-proxy.js b/source/spidermonkey-tests/ecma_6/Object/getOwnPropertySymbols-proxy.js new file mode 100644 index 00000000..7a0540e0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/getOwnPropertySymbols-proxy.js @@ -0,0 +1,30 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +function HandlerProxy() { + return new Proxy({}, { + get: function (t, key) { + if (key !== "ownKeys") + throw new Error("tried to access handler[" + uneval(key) + "]"); + hits++; + return t => symbols; + } + }); +} + +function OwnKeysProxy() { + return new Proxy({}, new HandlerProxy); +} + +if (typeof Symbol === "function") { + // getOwnPropertySymbols(proxy) calls the getOwnPropertyNames hook (only). + + var symbols = [Symbol(), Symbol("moon"), Symbol.for("sun"), Symbol.iterator]; + var hits = 0; + + assertDeepEq(Object.getOwnPropertySymbols(new OwnKeysProxy), symbols); + assertEq(hits, 1); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/getOwnPropertySymbols.js b/source/spidermonkey-tests/ecma_6/Object/getOwnPropertySymbols.js new file mode 100644 index 00000000..ea500707 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/getOwnPropertySymbols.js @@ -0,0 +1,48 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + assertDeepEq(Object.getOwnPropertySymbols({}), []); + + // String keys are ignored. + assertEq(Object.getOwnPropertySymbols({a: 1, b: 2}).length, 0); + assertEq(Object.getOwnPropertySymbols([0, 1, 2, 3]).length, 0); + + // Symbol keys are observed. + var iterable = {}; + Object.defineProperty(iterable, Symbol.iterator, { + value: () => [][Symbol.iterator]() + }); + assertDeepEq(Object.getOwnPropertySymbols(iterable), [Symbol.iterator]); + assertDeepEq(Object.getOwnPropertySymbols(new Proxy(iterable, {})), [Symbol.iterator]); + + // Test on an object with a thousand own properties. + var obj = {}; + for (var i = 0; i < 1000; i++) { + obj[Symbol.for("x" + i)] = 1; + } + assertEq(Object.getOwnPropertyNames(obj).length, 0); + var symbols = Object.getOwnPropertySymbols(obj); + assertEq(symbols.length, 1000); + assertEq(symbols.indexOf(Symbol.for("x0")) !== -1, true); + assertEq(symbols.indexOf(Symbol.for("x241")) !== -1, true); + assertEq(symbols.indexOf(Symbol.for("x999")) !== -1, true); + assertEq(Object.getOwnPropertySymbols(new Proxy(obj, {})).length, 1000); + + // The prototype chain is not consulted. + assertEq(Object.getOwnPropertySymbols(Object.create(obj)).length, 0); + assertEq(Object.getOwnPropertySymbols(new Proxy(Object.create(obj), {})).length, 0); + + // Primitives are coerced to objects; but there are never any symbol-keyed + // properties on the resulting wrapper objects. + assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(), TypeError); + assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(undefined), TypeError); + assertThrowsInstanceOf(() => Object.getOwnPropertySymbols(null), TypeError); + for (var primitive of [true, 1, 3.14, "hello", Symbol()]) + assertEq(Object.getOwnPropertySymbols(primitive).length, 0); + + assertEq(Object.getOwnPropertySymbols.length, 1); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/getPrototypeOf.js b/source/spidermonkey-tests/ecma_6/Object/getPrototypeOf.js new file mode 100644 index 00000000..71cd30c6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/getPrototypeOf.js @@ -0,0 +1,22 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1079090; +var summary = "Coerce the argument passed to Object.getPrototypeOf using ToObject"; +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => Object.getPrototypeOf(), TypeError); +assertThrowsInstanceOf(() => Object.getPrototypeOf(undefined), TypeError); +assertThrowsInstanceOf(() => Object.getPrototypeOf(null), TypeError); + +assertEq(Object.getPrototypeOf(1), Number.prototype); +assertEq(Object.getPrototypeOf(true), Boolean.prototype); +assertEq(Object.getPrototypeOf("foo"), String.prototype); +if (typeof Symbol === "function") { + assertEq(Object.getPrototypeOf(Symbol("foo")), Symbol.prototype); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/isExtensible.js b/source/spidermonkey-tests/ecma_6/Object/isExtensible.js new file mode 100644 index 00000000..f1fa0087 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/isExtensible.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 1060873; +var summary = "Object.isExtensible() should return false when given primitive values as input"; + +print(BUGNUMBER + ": " + summary); +assertEq(Object.isExtensible(), false); +assertEq(Object.isExtensible(undefined), false); +assertEq(Object.isExtensible(null), false); +assertEq(Object.isExtensible(1), false); +assertEq(Object.isExtensible("foo"), false); +assertEq(Object.isExtensible(true), false); +if (typeof Symbol === "function") { + assertEq(Object.isExtensible(Symbol()), false); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/isFrozen.js b/source/spidermonkey-tests/ecma_6/Object/isFrozen.js new file mode 100644 index 00000000..02056802 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/isFrozen.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1071464; +var summary = "Object.isFrozen() should return true when given primitive values as input"; + +print(BUGNUMBER + ": " + summary); +assertEq(Object.isFrozen(), true); +assertEq(Object.isFrozen(undefined), true); +assertEq(Object.isFrozen(null), true); +assertEq(Object.isFrozen(1), true); +assertEq(Object.isFrozen("foo"), true); +assertEq(Object.isFrozen(true), true); +if (typeof Symbol === "function") { + assertEq(Object.isFrozen(Symbol()), true); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/isSealed.js b/source/spidermonkey-tests/ecma_6/Object/isSealed.js new file mode 100644 index 00000000..cd363a87 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/isSealed.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1062860; +var summary = "Object.isSealed() should return true when given primitive values as input"; + +print(BUGNUMBER + ": " + summary); +assertEq(Object.isSealed(), true); +assertEq(Object.isSealed(undefined), true); +assertEq(Object.isSealed(null), true); +assertEq(Object.isSealed(1), true); +assertEq(Object.isSealed("foo"), true); +assertEq(Object.isSealed(true), true); +if (typeof Symbol === "function") { + assertEq(Object.isSealed(Symbol()), true); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/keys.js b/source/spidermonkey-tests/ecma_6/Object/keys.js new file mode 100644 index 00000000..5766f16d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/keys.js @@ -0,0 +1,23 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1038545; +var summary = "Coerce the argument passed to Object.keys using ToObject"; +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(() => Object.keys(), TypeError); +assertThrowsInstanceOf(() => Object.keys(undefined), TypeError); +assertThrowsInstanceOf(() => Object.keys(null), TypeError); + +assertDeepEq(Object.keys(1), []); +assertDeepEq(Object.keys(true), []); +if (typeof Symbol === "function") { + assertDeepEq(Object.keys(Symbol("foo")), []); +} + +assertDeepEq(Object.keys("foo"), ["0", "1", "2"]); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/preventExtensions-proxy.js b/source/spidermonkey-tests/ecma_6/Object/preventExtensions-proxy.js new file mode 100644 index 00000000..347a63bc --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/preventExtensions-proxy.js @@ -0,0 +1,23 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object = {}, handler = {}) { + var log = []; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + log.push(propertyKey); + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +var {proxy, log} = logProxy(); +Object.preventExtensions(proxy); +assertDeepEq(log, ["preventExtensions"]); + +var {proxy, log} = logProxy(); +Object.preventExtensions(Object.preventExtensions(proxy)); +assertDeepEq(log, ["preventExtensions", "preventExtensions"]); + +reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/preventExtensions.js b/source/spidermonkey-tests/ecma_6/Object/preventExtensions.js new file mode 100644 index 00000000..75c8ed3d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/preventExtensions.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1073446; +var summary = "Object.preventExtensions() should return its argument with no conversion when the argument is a primitive value"; + +print(BUGNUMBER + ": " + summary); +assertEq(Object.preventExtensions(), undefined); +assertEq(Object.preventExtensions(undefined), undefined); +assertEq(Object.preventExtensions(null), null); +assertEq(Object.preventExtensions(1), 1); +assertEq(Object.preventExtensions("foo"), "foo"); +assertEq(Object.preventExtensions(true), true); +if (typeof Symbol === "function") { + assertEq(Object.preventExtensions(Symbol.for("foo")), Symbol.for("foo")); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/propertyIsEnumerable-proxy.js b/source/spidermonkey-tests/ecma_6/Object/propertyIsEnumerable-proxy.js new file mode 100644 index 00000000..a1dda90e --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/propertyIsEnumerable-proxy.js @@ -0,0 +1,59 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object) { + var log = []; + var handler = { + getOwnPropertyDescriptor(target, propertyKey) { + log.push(propertyKey); + return Object.getOwnPropertyDescriptor(target, propertyKey); + } + }; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + if (!(propertyKey in target)) { + throw new Error(`Unexpected call to trap: "${propertyKey}"`); + } + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +var properties = ["string-property"]; +if (typeof Symbol === 'function') + properties.push(Symbol("symbol-property")); + +for (var property of properties) { + // Test 1: property is not present on object + var {proxy, log} = logProxy({}); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, false); + assertDeepEq(log, [property]); + + // Test 2: property is present on object and enumerable + var {proxy, log} = logProxy({[property]: 0}); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, true); + assertDeepEq(log, [property]); + + // Test 3: property is present on object, but not enumerable + var {proxy, log} = logProxy(Object.defineProperty({[property]: 0}, property, {enumerable: false})); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, false); + assertDeepEq(log, [property]); + + // Test 4: property is present on prototype object + var {proxy, log} = logProxy(Object.create({[property]: 0})); + var result = Object.prototype.propertyIsEnumerable.call(proxy, property); + assertEq(result, false); + assertDeepEq(log, [property]); + + // Test 5: property is present on prototype object, prototype is proxy object + var {proxy, log} = logProxy({[property]: 0}); + var result = Object.prototype.propertyIsEnumerable.call(Object.create(proxy), property); + assertEq(result, false); + assertDeepEq(log, []); +} + +reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/seal-proxy.js b/source/spidermonkey-tests/ecma_6/Object/seal-proxy.js new file mode 100644 index 00000000..44bb685c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/seal-proxy.js @@ -0,0 +1,27 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +function logProxy(object = {}, handler = {}) { + var log = []; + var proxy = new Proxy(object, new Proxy(handler, { + get(target, propertyKey, receiver) { + log.push(propertyKey); + return target[propertyKey]; + } + })); + return {proxy, log}; +} + +// The order of operations is backwards when compared to ES6 draft rev 27 +// (2014 August 24), but see https://bugs.ecmascript.org/show_bug.cgi?id=3215 +// for an explanation on why the spec version is clearly wrong. + +var {proxy, log} = logProxy(); +Object.seal(proxy); +assertDeepEq(log, ["preventExtensions", "ownKeys"]); + +var {proxy, log} = logProxy(); +Object.seal(Object.seal(proxy)); +assertDeepEq(log, ["preventExtensions", "ownKeys", "preventExtensions", "ownKeys"]); + +reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Object/seal.js b/source/spidermonkey-tests/ecma_6/Object/seal.js new file mode 100644 index 00000000..e325c80d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Object/seal.js @@ -0,0 +1,21 @@ +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var BUGNUMBER = 1075294; +var summary = "Object.seal() should return its argument with no conversion when the argument is a primitive value"; + +print(BUGNUMBER + ": " + summary); +assertEq(Object.seal(), undefined); +assertEq(Object.seal(undefined), undefined); +assertEq(Object.seal(null), null); +assertEq(Object.seal(1), 1); +assertEq(Object.seal("foo"), "foo"); +assertEq(Object.seal(true), true); +if (typeof Symbol === "function") { + assertEq(Object.seal(Symbol.for("foo")), Symbol.for("foo")); +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Object/shell.js b/source/spidermonkey-tests/ecma_6/Object/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Proxy/proxy-__proto__.js b/source/spidermonkey-tests/ecma_6/Proxy/proxy-__proto__.js new file mode 100644 index 00000000..f68bea48 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Proxy/proxy-__proto__.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'proxy-__proto__.js'; +var BUGNUMBER = 950407; +var summary = "Behavior of __proto__ on ES6 proxies"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var protoDesc = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__"); +var protoGetter = protoDesc.get; +var protoSetter = protoDesc.set; + +function testProxy(target, initialProto) +{ + print("Now testing behavior for new Proxy(" + ("" + target) + ", {})"); + + var pobj = new Proxy(target, {}); + + // Check [[Prototype]] before attempted mutation + assertEq(Object.getPrototypeOf(pobj), initialProto); + assertEq(protoGetter.call(pobj), initialProto); + + // Attempt [[Prototype]] mutation + protoSetter.call(pobj, null); + + // Check [[Prototype]] after attempted mutation + assertEq(Object.getPrototypeOf(pobj), null); + assertEq(protoGetter.call(pobj), null); + assertEq(Object.getPrototypeOf(target), null); +} + +// Proxy object with non-null [[Prototype]] +var nonNullProto = { toString: function() { return "non-null prototype"; } }; +var target = Object.create(nonNullProto); +testProxy(target, nonNullProto); + +// Proxy object with null [[Prototype]] +target = Object.create(null); +target.toString = function() { return "null prototype" }; +testProxy(target, null); + +// Proxy function with [[Call]] +var callForCallOnly = function () { }; +callForCallOnly.toString = function() { return "callable target"; }; +testProxy(callForCallOnly, Function.prototype); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Proxy/proxy-constructNonObject.js b/source/spidermonkey-tests/ecma_6/Proxy/proxy-constructNonObject.js new file mode 100644 index 00000000..04cee11e --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Proxy/proxy-constructNonObject.js @@ -0,0 +1,18 @@ +function bogusConstruct(target) { return 4; } +function bogusConstructUndefined(target) { } + +var handler = { construct: bogusConstruct } + +function callable() {} + +var p = new Proxy(callable, handler); + +assertThrowsInstanceOf(function () { new p(); }, TypeError, + "[[Construct must throw if an object is not returned."); + +handler.construct = bogusConstructUndefined; +assertThrowsInstanceOf(function () { new p(); }, TypeError, + "[[Construct must throw if an object is not returned."); + +if (typeof reportCompare === "function") + reportCompare(0,0, "OK"); diff --git a/source/spidermonkey-tests/ecma_6/Proxy/regress-bug1037770.js b/source/spidermonkey-tests/ecma_6/Proxy/regress-bug1037770.js new file mode 100644 index 00000000..c97d6d21 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Proxy/regress-bug1037770.js @@ -0,0 +1,7 @@ +foo = 1; +Object.defineProperty(this, "foo", {writable:false}); +foo = 2; +assertEq(foo, 1); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/Proxy/regress-bug950407.js b/source/spidermonkey-tests/ecma_6/Proxy/regress-bug950407.js new file mode 100644 index 00000000..bb4a71eb --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Proxy/regress-bug950407.js @@ -0,0 +1,11 @@ +var ab = new ArrayBuffer(5); +var p = new Proxy(ab, {}); +var ps = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set; +var threw = 0; +try { + ps.call(p, {}); +} catch(ex) { + threw = 1; +} + +reportCompare(1, threw, "Setting __proto__ on a proxy to an ArrayBuffer must throw."); diff --git a/source/spidermonkey-tests/ecma_6/Proxy/revocable-proxy-prototype.js b/source/spidermonkey-tests/ecma_6/Proxy/revocable-proxy-prototype.js new file mode 100644 index 00000000..7afbc15d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Proxy/revocable-proxy-prototype.js @@ -0,0 +1,40 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'revocable-proxy-prototype.js'; +var BUGNUMBER = 1052139; +var summary = "Accessing a revocable proxy's [[Prototype]] shouldn't crash"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ +function checkFunctionAppliedToRevokedProxy(fun) +{ + var p = Proxy.revocable({}, {}); + p.revoke(); + + try + { + fun(p.proxy); + throw "didn't throw"; + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "expected TypeError, got " + e); + } +} + +checkFunctionAppliedToRevokedProxy(proxy => Object.getPrototypeOf(proxy)); +checkFunctionAppliedToRevokedProxy(proxy => Object.setPrototypeOf(proxy, null)); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Proxy/shell.js b/source/spidermonkey-tests/ecma_6/Proxy/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Set/NaN-as-key.js b/source/spidermonkey-tests/ecma_6/Set/NaN-as-key.js new file mode 100644 index 00000000..8c9207e8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Set/NaN-as-key.js @@ -0,0 +1,56 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 722260; +var summary = 'All NaNs must be treated as identical keys for Set'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +/* Avoid constant-folding that would happen were |undefined| to be used. */ +var key = -/a/g.missingProperty; + +var s = new Set(); +s.add(key, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(-key); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + +s.add(-key, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(NaN); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + +s.add(NaN, 17); +assertEq(s.has(key), true); +assertEq(s.has(-key), true); +assertEq(s.has(NaN), true); + +s.delete(key); +assertEq(s.has(key), false); +assertEq(s.has(-key), false); +assertEq(s.has(NaN), false); + + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Set/browser.js b/source/spidermonkey-tests/ecma_6/Set/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Set/forEach-selfhosted-behavior.js b/source/spidermonkey-tests/ecma_6/Set/forEach-selfhosted-behavior.js new file mode 100644 index 00000000..37c87fee --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Set/forEach-selfhosted-behavior.js @@ -0,0 +1,51 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 987243; +var summary = "Don't use .call(...) in the self-hosted Set.prototype.forEach"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var functionCall = Function.prototype.call; + +function throwSyntaxError() +{ + throw new SyntaxError("Function.prototype.call incorrectly called"); +} + +function lalala() {} + +Function.prototype.call = throwSyntaxError; + +new Set().forEach(throwSyntaxError); +new Set([1]).forEach(lalala); +new Set([{}, 4]).forEach(lalala); + +Function.prototype.call = function() { this.add(3.141592654); }; + +new Set().forEach(throwSyntaxError); +new Set(["foo"]).forEach(lalala); +new Set([undefined, NaN]).forEach(lalala); + +var callCount = 0; +Function.prototype.call = function() { callCount++; }; + +new Set().forEach(throwSyntaxError); +new Set([new Number]).forEach(lalala); +new Set([true, new Boolean(false)]).forEach(lalala); + +assertEq(callCount, 0); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/Set/shell.js b/source/spidermonkey-tests/ecma_6/Set/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Set/symbols.js b/source/spidermonkey-tests/ecma_6/Set/symbols.js new file mode 100644 index 00000000..bad0031c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Set/symbols.js @@ -0,0 +1,29 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + var s = new Set; + + // Symbols can be stored in Sets. + var sym = Symbol(); + s.add(sym); + assertEq(s.has(sym), true); + assertEq(s.has(Symbol()), false); + assertEq([...s][0], sym); + s.add(sym); + assertEq(s.has(sym), true); + assertEq(s.size, 1); + s.delete(sym); + assertEq(s.has(sym), false); + assertEq(s.size, 0); + + // Symbols returned by Symbol.for() can be in Sets. + var str = "how much wood would a woodchuck chuck if a woodchuck could chuck wood"; + var s2 = "how much wood would a woodchuck chuck if could"; + var arr = [for (word of str.split(" ")) Symbol.for(word)]; + s = new Set(arr); + assertDeepEq([...s], [for (word of s2.split(" ")) Symbol.for(word)]); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/String/browser.js b/source/spidermonkey-tests/ecma_6/String/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/String/codePointAt.js b/source/spidermonkey-tests/ecma_6/String/codePointAt.js new file mode 100644 index 00000000..5b149693 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/String/codePointAt.js @@ -0,0 +1,84 @@ +var BUGNUMBER = 918879; +var summary = 'String.prototype.codePointAt'; + +print(BUGNUMBER + ": " + summary); + +// Tests taken from: +// https://github.com/mathiasbynens/String.prototype.codePointAt/blob/master/tests/tests.js +assertEq(String.prototype.codePointAt.length, 1); +assertEq(String.prototype.propertyIsEnumerable('codePointAt'), false); + +// String that starts with a BMP symbol +assertEq('abc\uD834\uDF06def'.codePointAt(''), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt('_'), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt(), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt(-Infinity), undefined); +assertEq('abc\uD834\uDF06def'.codePointAt(-1), undefined); +assertEq('abc\uD834\uDF06def'.codePointAt(-0), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt(0), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt(3), 0x1D306); +assertEq('abc\uD834\uDF06def'.codePointAt(4), 0xDF06); +assertEq('abc\uD834\uDF06def'.codePointAt(5), 0x64); +assertEq('abc\uD834\uDF06def'.codePointAt(42), undefined); +assertEq('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); +assertEq('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); +assertEq('abc\uD834\uDF06def'.codePointAt(NaN), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt(false), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt(null), 0x61); +assertEq('abc\uD834\uDF06def'.codePointAt(undefined), 0x61); + +// String that starts with an astral symbol +assertEq('\uD834\uDF06def'.codePointAt(''), 0x1D306); +assertEq('\uD834\uDF06def'.codePointAt('1'), 0xDF06); +assertEq('\uD834\uDF06def'.codePointAt('_'), 0x1D306); +assertEq('\uD834\uDF06def'.codePointAt(), 0x1D306); +assertEq('\uD834\uDF06def'.codePointAt(-1), undefined); +assertEq('\uD834\uDF06def'.codePointAt(-0), 0x1D306); +assertEq('\uD834\uDF06def'.codePointAt(0), 0x1D306); +assertEq('\uD834\uDF06def'.codePointAt(1), 0xDF06); +assertEq('\uD834\uDF06def'.codePointAt(42), undefined); +assertEq('\uD834\uDF06def'.codePointAt(false), 0x1D306); +assertEq('\uD834\uDF06def'.codePointAt(null), 0x1D306); +assertEq('\uD834\uDF06def'.codePointAt(undefined), 0x1D306); + +// Lone high surrogates +assertEq('\uD834abc'.codePointAt(''), 0xD834); +assertEq('\uD834abc'.codePointAt('_'), 0xD834); +assertEq('\uD834abc'.codePointAt(), 0xD834); +assertEq('\uD834abc'.codePointAt(-1), undefined); +assertEq('\uD834abc'.codePointAt(-0), 0xD834); +assertEq('\uD834abc'.codePointAt(0), 0xD834); +assertEq('\uD834abc'.codePointAt(false), 0xD834); +assertEq('\uD834abc'.codePointAt(NaN), 0xD834); +assertEq('\uD834abc'.codePointAt(null), 0xD834); +assertEq('\uD834abc'.codePointAt(undefined), 0xD834); + +// Lone low surrogates +assertEq('\uDF06abc'.codePointAt(''), 0xDF06); +assertEq('\uDF06abc'.codePointAt('_'), 0xDF06); +assertEq('\uDF06abc'.codePointAt(), 0xDF06); +assertEq('\uDF06abc'.codePointAt(-1), undefined); +assertEq('\uDF06abc'.codePointAt(-0), 0xDF06); +assertEq('\uDF06abc'.codePointAt(0), 0xDF06); +assertEq('\uDF06abc'.codePointAt(false), 0xDF06); +assertEq('\uDF06abc'.codePointAt(NaN), 0xDF06); +assertEq('\uDF06abc'.codePointAt(null), 0xDF06); +assertEq('\uDF06abc'.codePointAt(undefined), 0xDF06); + +(function() { String.prototype.codePointAt.call(undefined); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(undefined, 4); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(null); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.call(null, 4); }, TypeError); +assertEq(String.prototype.codePointAt.call(42, 0), 0x34); +assertEq(String.prototype.codePointAt.call(42, 1), 0x32); +assertEq(String.prototype.codePointAt.call({ 'toString': function() { return 'abc'; } }, 2), 0x63); + +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(undefined); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(undefined, [4]); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(null); }, TypeError); +assertThrowsInstanceOf(function() { String.prototype.codePointAt.apply(null, [4]); }, TypeError); +assertEq(String.prototype.codePointAt.apply(42, [0]), 0x34); +assertEq(String.prototype.codePointAt.apply(42, [1]), 0x32); +assertEq(String.prototype.codePointAt.apply({ 'toString': function() { return 'abc'; } }, [2]), 0x63); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/String/fromCodePoint.js b/source/spidermonkey-tests/ecma_6/String/fromCodePoint.js new file mode 100644 index 00000000..490afb13 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/String/fromCodePoint.js @@ -0,0 +1,48 @@ +var BUGNUMBER = 918879; +var summary = 'String.fromCodePoint'; + +print(BUGNUMBER + ": " + summary); + +// Tests taken from: +// https://github.com/mathiasbynens/String.fromCodePoint/blob/master/tests/tests.js + +assertEq(String.fromCodePoint.length, 1); +assertEq(String.propertyIsEnumerable('fromCodePoint'), false); + +assertEq(String.fromCodePoint(''), '\0'); +assertEq(String.fromCodePoint(), ''); +assertEq(String.fromCodePoint(-0), '\0'); +assertEq(String.fromCodePoint(0), '\0'); +assertEq(String.fromCodePoint(0x1D306), '\uD834\uDF06'); +assertEq(String.fromCodePoint(0x1D306, 0x61, 0x1D307), '\uD834\uDF06a\uD834\uDF07'); +assertEq(String.fromCodePoint(0x61, 0x62, 0x1D307), 'ab\uD834\uDF07'); +assertEq(String.fromCodePoint(false), '\0'); +assertEq(String.fromCodePoint(null), '\0'); + +assertThrowsInstanceOf(function() { String.fromCodePoint('_'); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint('+Infinity'); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint('-Infinity'); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(-1); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(0x10FFFF + 1); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(3.14); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(3e-2); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(Infinity); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(NaN); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint(undefined); }, RangeError); +assertThrowsInstanceOf(function() { String.fromCodePoint({}); }, RangeError); + +var counter = Math.pow(2, 15) * 3 / 2; +var result = []; +while (--counter >= 0) { + result.push(0); // one code unit per symbol +} +String.fromCodePoint.apply(null, result); // must not throw + +var counter = Math.pow(2, 15) * 3 / 2; +var result = []; +while (--counter >= 0) { + result.push(0xFFFF + 1); // two code units per symbol +} +String.fromCodePoint.apply(null, result); // must not throw + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/String/make-normalize-generateddata-input.py b/source/spidermonkey-tests/ecma_6/String/make-normalize-generateddata-input.py new file mode 100644 index 00000000..c1983dbd --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/String/make-normalize-generateddata-input.py @@ -0,0 +1,70 @@ +#!/usr/bin/python -B + +""" Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL + + This script generates test input data for String.prototype.normalize + from intl/icu/source/data/unidata/NormalizationTest.txt + to js/src/tests/ecma_6/String/normalize-generateddata-input.js +""" + +from __future__ import print_function +import re, sys + +sep_pat = re.compile(' +') +def to_code_list(codes): + return '[' + ', '.join(map(lambda x: '0x{0}'.format(x), re.split(sep_pat, codes))) + ']' + +def convert(dir): + ver_pat = re.compile('NormalizationTest-([0-9\.]+)\.txt') + part_pat = re.compile('^@(Part([0-9]+) .+)$') + test_pat = re.compile('^([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);([0-9A-Fa-f ]+);$') + ignore_pat = re.compile('^#|^$') + js_path = 'js/src/tests/ecma_6/String/normalize-generateddata-input.js' + txt_path = 'intl/icu/source/data/unidata/NormalizationTest.txt' + + part_opened = False + not_empty = False + with open('{dir}/{path}'.format(dir=dir, path=txt_path), 'r') as f: + with open('{dir}/{path}'.format(dir=dir, path=js_path), 'w') as outf: + for line in f: + m = test_pat.search(line) + if m: + if not_empty: + outf.write(',') + outf.write('\n') + pat = '{{ source: {source}, NFC: {NFC}, NFD: {NFD}, NFKC: {NFKC}, NFKD: {NFKD} }}' + outf.write(pat.format(source=to_code_list(m.group(1)), + NFC=to_code_list(m.group(2)), + NFD=to_code_list(m.group(3)), + NFKC=to_code_list(m.group(4)), + NFKD=to_code_list(m.group(5)))) + not_empty = True + continue + m = part_pat.search(line) + if m: + desc = m.group(1) + part = m.group(2) + if part_opened: + outf.write('\n];\n') + outf.write('/* {desc} */\n'.format(desc=desc)) + outf.write('var tests_part{part} = ['.format(part=part)) + part_opened = True + not_empty = False + continue + m = ver_pat.search(line) + if m: + ver = m.group(1) + outf.write('/* created from NormalizationTest-{ver}.txt */\n'.format(ver=ver)) + continue + m = ignore_pat.search(line) + if m: + continue + print("Unknown line: {0}".format(line), file=sys.stderr) + if part_opened: + outf.write('\n];\n') + +if __name__ == '__main__': + if len(sys.argv) < 2: + print("Usage: make-normalize-generateddata-input.py PATH_TO_MOZILLA_CENTRAL", file=sys.stderr) + sys.exit(1) + convert(sys.argv[1]) diff --git a/source/spidermonkey-tests/ecma_6/String/normalize-generateddata-input.js b/source/spidermonkey-tests/ecma_6/String/normalize-generateddata-input.js new file mode 100644 index 00000000..4d6be90c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/String/normalize-generateddata-input.js @@ -0,0 +1,18390 @@ +/* created from NormalizationTest-6.3.0.txt */ +/* Part0 # Specific cases */ +var tests_part0 = [ +{ source: [0x1E0A], NFC: [0x1E0A], NFD: [0x0044, 0x0307], NFKC: [0x1E0A], NFKD: [0x0044, 0x0307] }, +{ source: [0x1E0C], NFC: [0x1E0C], NFD: [0x0044, 0x0323], NFKC: [0x1E0C], NFKD: [0x0044, 0x0323] }, +{ source: [0x1E0A, 0x0323], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x1E0C, 0x0307], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x0044, 0x0307, 0x0323], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x0044, 0x0323, 0x0307], NFC: [0x1E0C, 0x0307], NFD: [0x0044, 0x0323, 0x0307], NFKC: [0x1E0C, 0x0307], NFKD: [0x0044, 0x0323, 0x0307] }, +{ source: [0x1E0A, 0x031B], NFC: [0x1E0A, 0x031B], NFD: [0x0044, 0x031B, 0x0307], NFKC: [0x1E0A, 0x031B], NFKD: [0x0044, 0x031B, 0x0307] }, +{ source: [0x1E0C, 0x031B], NFC: [0x1E0C, 0x031B], NFD: [0x0044, 0x031B, 0x0323], NFKC: [0x1E0C, 0x031B], NFKD: [0x0044, 0x031B, 0x0323] }, +{ source: [0x1E0A, 0x031B, 0x0323], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x1E0C, 0x031B, 0x0307], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x0044, 0x031B, 0x0307, 0x0323], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x0044, 0x031B, 0x0323, 0x0307], NFC: [0x1E0C, 0x031B, 0x0307], NFD: [0x0044, 0x031B, 0x0323, 0x0307], NFKC: [0x1E0C, 0x031B, 0x0307], NFKD: [0x0044, 0x031B, 0x0323, 0x0307] }, +{ source: [0x00C8], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] }, +{ source: [0x0112], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] }, +{ source: [0x0045, 0x0300], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] }, +{ source: [0x0045, 0x0304], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] }, +{ source: [0x1E14], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x0112, 0x0300], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x1E14, 0x0304], NFC: [0x1E14, 0x0304], NFD: [0x0045, 0x0304, 0x0300, 0x0304], NFKC: [0x1E14, 0x0304], NFKD: [0x0045, 0x0304, 0x0300, 0x0304] }, +{ source: [0x0045, 0x0304, 0x0300], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x0045, 0x0300, 0x0304], NFC: [0x00C8, 0x0304], NFD: [0x0045, 0x0300, 0x0304], NFKC: [0x00C8, 0x0304], NFKD: [0x0045, 0x0300, 0x0304] }, +{ source: [0x05B8, 0x05B9, 0x05B1, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKC: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F], NFKD: [0x05B1, 0x05B8, 0x05B9, 0x0591, 0x05C3, 0x05B0, 0x05AC, 0x059F] }, +{ source: [0x0592, 0x05B7, 0x05BC, 0x05A5, 0x05B0, 0x05C0, 0x05C4, 0x05AD], NFC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKC: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4], NFKD: [0x05B0, 0x05B7, 0x05BC, 0x05A5, 0x0592, 0x05C0, 0x05AD, 0x05C4] } +]; +/* Part1 # Character by character test */ +var tests_part1 = [ +{ source: [0x00A0], NFC: [0x00A0], NFD: [0x00A0], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x00A8], NFC: [0x00A8], NFD: [0x00A8], NFKC: [0x0020, 0x0308], NFKD: [0x0020, 0x0308] }, +{ source: [0x00AA], NFC: [0x00AA], NFD: [0x00AA], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x00AF], NFC: [0x00AF], NFD: [0x00AF], NFKC: [0x0020, 0x0304], NFKD: [0x0020, 0x0304] }, +{ source: [0x00B2], NFC: [0x00B2], NFD: [0x00B2], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x00B3], NFC: [0x00B3], NFD: [0x00B3], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x00B4], NFC: [0x00B4], NFD: [0x00B4], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] }, +{ source: [0x00B5], NFC: [0x00B5], NFD: [0x00B5], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x00B8], NFC: [0x00B8], NFD: [0x00B8], NFKC: [0x0020, 0x0327], NFKD: [0x0020, 0x0327] }, +{ source: [0x00B9], NFC: [0x00B9], NFD: [0x00B9], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x00BA], NFC: [0x00BA], NFD: [0x00BA], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x00BC], NFC: [0x00BC], NFD: [0x00BC], NFKC: [0x0031, 0x2044, 0x0034], NFKD: [0x0031, 0x2044, 0x0034] }, +{ source: [0x00BD], NFC: [0x00BD], NFD: [0x00BD], NFKC: [0x0031, 0x2044, 0x0032], NFKD: [0x0031, 0x2044, 0x0032] }, +{ source: [0x00BE], NFC: [0x00BE], NFD: [0x00BE], NFKC: [0x0033, 0x2044, 0x0034], NFKD: [0x0033, 0x2044, 0x0034] }, +{ source: [0x00C0], NFC: [0x00C0], NFD: [0x0041, 0x0300], NFKC: [0x00C0], NFKD: [0x0041, 0x0300] }, +{ source: [0x00C1], NFC: [0x00C1], NFD: [0x0041, 0x0301], NFKC: [0x00C1], NFKD: [0x0041, 0x0301] }, +{ source: [0x00C2], NFC: [0x00C2], NFD: [0x0041, 0x0302], NFKC: [0x00C2], NFKD: [0x0041, 0x0302] }, +{ source: [0x00C3], NFC: [0x00C3], NFD: [0x0041, 0x0303], NFKC: [0x00C3], NFKD: [0x0041, 0x0303] }, +{ source: [0x00C4], NFC: [0x00C4], NFD: [0x0041, 0x0308], NFKC: [0x00C4], NFKD: [0x0041, 0x0308] }, +{ source: [0x00C5], NFC: [0x00C5], NFD: [0x0041, 0x030A], NFKC: [0x00C5], NFKD: [0x0041, 0x030A] }, +{ source: [0x00C7], NFC: [0x00C7], NFD: [0x0043, 0x0327], NFKC: [0x00C7], NFKD: [0x0043, 0x0327] }, +{ source: [0x00C8], NFC: [0x00C8], NFD: [0x0045, 0x0300], NFKC: [0x00C8], NFKD: [0x0045, 0x0300] }, +{ source: [0x00C9], NFC: [0x00C9], NFD: [0x0045, 0x0301], NFKC: [0x00C9], NFKD: [0x0045, 0x0301] }, +{ source: [0x00CA], NFC: [0x00CA], NFD: [0x0045, 0x0302], NFKC: [0x00CA], NFKD: [0x0045, 0x0302] }, +{ source: [0x00CB], NFC: [0x00CB], NFD: [0x0045, 0x0308], NFKC: [0x00CB], NFKD: [0x0045, 0x0308] }, +{ source: [0x00CC], NFC: [0x00CC], NFD: [0x0049, 0x0300], NFKC: [0x00CC], NFKD: [0x0049, 0x0300] }, +{ source: [0x00CD], NFC: [0x00CD], NFD: [0x0049, 0x0301], NFKC: [0x00CD], NFKD: [0x0049, 0x0301] }, +{ source: [0x00CE], NFC: [0x00CE], NFD: [0x0049, 0x0302], NFKC: [0x00CE], NFKD: [0x0049, 0x0302] }, +{ source: [0x00CF], NFC: [0x00CF], NFD: [0x0049, 0x0308], NFKC: [0x00CF], NFKD: [0x0049, 0x0308] }, +{ source: [0x00D1], NFC: [0x00D1], NFD: [0x004E, 0x0303], NFKC: [0x00D1], NFKD: [0x004E, 0x0303] }, +{ source: [0x00D2], NFC: [0x00D2], NFD: [0x004F, 0x0300], NFKC: [0x00D2], NFKD: [0x004F, 0x0300] }, +{ source: [0x00D3], NFC: [0x00D3], NFD: [0x004F, 0x0301], NFKC: [0x00D3], NFKD: [0x004F, 0x0301] }, +{ source: [0x00D4], NFC: [0x00D4], NFD: [0x004F, 0x0302], NFKC: [0x00D4], NFKD: [0x004F, 0x0302] }, +{ source: [0x00D5], NFC: [0x00D5], NFD: [0x004F, 0x0303], NFKC: [0x00D5], NFKD: [0x004F, 0x0303] }, +{ source: [0x00D6], NFC: [0x00D6], NFD: [0x004F, 0x0308], NFKC: [0x00D6], NFKD: [0x004F, 0x0308] }, +{ source: [0x00D9], NFC: [0x00D9], NFD: [0x0055, 0x0300], NFKC: [0x00D9], NFKD: [0x0055, 0x0300] }, +{ source: [0x00DA], NFC: [0x00DA], NFD: [0x0055, 0x0301], NFKC: [0x00DA], NFKD: [0x0055, 0x0301] }, +{ source: [0x00DB], NFC: [0x00DB], NFD: [0x0055, 0x0302], NFKC: [0x00DB], NFKD: [0x0055, 0x0302] }, +{ source: [0x00DC], NFC: [0x00DC], NFD: [0x0055, 0x0308], NFKC: [0x00DC], NFKD: [0x0055, 0x0308] }, +{ source: [0x00DD], NFC: [0x00DD], NFD: [0x0059, 0x0301], NFKC: [0x00DD], NFKD: [0x0059, 0x0301] }, +{ source: [0x00E0], NFC: [0x00E0], NFD: [0x0061, 0x0300], NFKC: [0x00E0], NFKD: [0x0061, 0x0300] }, +{ source: [0x00E1], NFC: [0x00E1], NFD: [0x0061, 0x0301], NFKC: [0x00E1], NFKD: [0x0061, 0x0301] }, +{ source: [0x00E2], NFC: [0x00E2], NFD: [0x0061, 0x0302], NFKC: [0x00E2], NFKD: [0x0061, 0x0302] }, +{ source: [0x00E3], NFC: [0x00E3], NFD: [0x0061, 0x0303], NFKC: [0x00E3], NFKD: [0x0061, 0x0303] }, +{ source: [0x00E4], NFC: [0x00E4], NFD: [0x0061, 0x0308], NFKC: [0x00E4], NFKD: [0x0061, 0x0308] }, +{ source: [0x00E5], NFC: [0x00E5], NFD: [0x0061, 0x030A], NFKC: [0x00E5], NFKD: [0x0061, 0x030A] }, +{ source: [0x00E7], NFC: [0x00E7], NFD: [0x0063, 0x0327], NFKC: [0x00E7], NFKD: [0x0063, 0x0327] }, +{ source: [0x00E8], NFC: [0x00E8], NFD: [0x0065, 0x0300], NFKC: [0x00E8], NFKD: [0x0065, 0x0300] }, +{ source: [0x00E9], NFC: [0x00E9], NFD: [0x0065, 0x0301], NFKC: [0x00E9], NFKD: [0x0065, 0x0301] }, +{ source: [0x00EA], NFC: [0x00EA], NFD: [0x0065, 0x0302], NFKC: [0x00EA], NFKD: [0x0065, 0x0302] }, +{ source: [0x00EB], NFC: [0x00EB], NFD: [0x0065, 0x0308], NFKC: [0x00EB], NFKD: [0x0065, 0x0308] }, +{ source: [0x00EC], NFC: [0x00EC], NFD: [0x0069, 0x0300], NFKC: [0x00EC], NFKD: [0x0069, 0x0300] }, +{ source: [0x00ED], NFC: [0x00ED], NFD: [0x0069, 0x0301], NFKC: [0x00ED], NFKD: [0x0069, 0x0301] }, +{ source: [0x00EE], NFC: [0x00EE], NFD: [0x0069, 0x0302], NFKC: [0x00EE], NFKD: [0x0069, 0x0302] }, +{ source: [0x00EF], NFC: [0x00EF], NFD: [0x0069, 0x0308], NFKC: [0x00EF], NFKD: [0x0069, 0x0308] }, +{ source: [0x00F1], NFC: [0x00F1], NFD: [0x006E, 0x0303], NFKC: [0x00F1], NFKD: [0x006E, 0x0303] }, +{ source: [0x00F2], NFC: [0x00F2], NFD: [0x006F, 0x0300], NFKC: [0x00F2], NFKD: [0x006F, 0x0300] }, +{ source: [0x00F3], NFC: [0x00F3], NFD: [0x006F, 0x0301], NFKC: [0x00F3], NFKD: [0x006F, 0x0301] }, +{ source: [0x00F4], NFC: [0x00F4], NFD: [0x006F, 0x0302], NFKC: [0x00F4], NFKD: [0x006F, 0x0302] }, +{ source: [0x00F5], NFC: [0x00F5], NFD: [0x006F, 0x0303], NFKC: [0x00F5], NFKD: [0x006F, 0x0303] }, +{ source: [0x00F6], NFC: [0x00F6], NFD: [0x006F, 0x0308], NFKC: [0x00F6], NFKD: [0x006F, 0x0308] }, +{ source: [0x00F9], NFC: [0x00F9], NFD: [0x0075, 0x0300], NFKC: [0x00F9], NFKD: [0x0075, 0x0300] }, +{ source: [0x00FA], NFC: [0x00FA], NFD: [0x0075, 0x0301], NFKC: [0x00FA], NFKD: [0x0075, 0x0301] }, +{ source: [0x00FB], NFC: [0x00FB], NFD: [0x0075, 0x0302], NFKC: [0x00FB], NFKD: [0x0075, 0x0302] }, +{ source: [0x00FC], NFC: [0x00FC], NFD: [0x0075, 0x0308], NFKC: [0x00FC], NFKD: [0x0075, 0x0308] }, +{ source: [0x00FD], NFC: [0x00FD], NFD: [0x0079, 0x0301], NFKC: [0x00FD], NFKD: [0x0079, 0x0301] }, +{ source: [0x00FF], NFC: [0x00FF], NFD: [0x0079, 0x0308], NFKC: [0x00FF], NFKD: [0x0079, 0x0308] }, +{ source: [0x0100], NFC: [0x0100], NFD: [0x0041, 0x0304], NFKC: [0x0100], NFKD: [0x0041, 0x0304] }, +{ source: [0x0101], NFC: [0x0101], NFD: [0x0061, 0x0304], NFKC: [0x0101], NFKD: [0x0061, 0x0304] }, +{ source: [0x0102], NFC: [0x0102], NFD: [0x0041, 0x0306], NFKC: [0x0102], NFKD: [0x0041, 0x0306] }, +{ source: [0x0103], NFC: [0x0103], NFD: [0x0061, 0x0306], NFKC: [0x0103], NFKD: [0x0061, 0x0306] }, +{ source: [0x0104], NFC: [0x0104], NFD: [0x0041, 0x0328], NFKC: [0x0104], NFKD: [0x0041, 0x0328] }, +{ source: [0x0105], NFC: [0x0105], NFD: [0x0061, 0x0328], NFKC: [0x0105], NFKD: [0x0061, 0x0328] }, +{ source: [0x0106], NFC: [0x0106], NFD: [0x0043, 0x0301], NFKC: [0x0106], NFKD: [0x0043, 0x0301] }, +{ source: [0x0107], NFC: [0x0107], NFD: [0x0063, 0x0301], NFKC: [0x0107], NFKD: [0x0063, 0x0301] }, +{ source: [0x0108], NFC: [0x0108], NFD: [0x0043, 0x0302], NFKC: [0x0108], NFKD: [0x0043, 0x0302] }, +{ source: [0x0109], NFC: [0x0109], NFD: [0x0063, 0x0302], NFKC: [0x0109], NFKD: [0x0063, 0x0302] }, +{ source: [0x010A], NFC: [0x010A], NFD: [0x0043, 0x0307], NFKC: [0x010A], NFKD: [0x0043, 0x0307] }, +{ source: [0x010B], NFC: [0x010B], NFD: [0x0063, 0x0307], NFKC: [0x010B], NFKD: [0x0063, 0x0307] }, +{ source: [0x010C], NFC: [0x010C], NFD: [0x0043, 0x030C], NFKC: [0x010C], NFKD: [0x0043, 0x030C] }, +{ source: [0x010D], NFC: [0x010D], NFD: [0x0063, 0x030C], NFKC: [0x010D], NFKD: [0x0063, 0x030C] }, +{ source: [0x010E], NFC: [0x010E], NFD: [0x0044, 0x030C], NFKC: [0x010E], NFKD: [0x0044, 0x030C] }, +{ source: [0x010F], NFC: [0x010F], NFD: [0x0064, 0x030C], NFKC: [0x010F], NFKD: [0x0064, 0x030C] }, +{ source: [0x0112], NFC: [0x0112], NFD: [0x0045, 0x0304], NFKC: [0x0112], NFKD: [0x0045, 0x0304] }, +{ source: [0x0113], NFC: [0x0113], NFD: [0x0065, 0x0304], NFKC: [0x0113], NFKD: [0x0065, 0x0304] }, +{ source: [0x0114], NFC: [0x0114], NFD: [0x0045, 0x0306], NFKC: [0x0114], NFKD: [0x0045, 0x0306] }, +{ source: [0x0115], NFC: [0x0115], NFD: [0x0065, 0x0306], NFKC: [0x0115], NFKD: [0x0065, 0x0306] }, +{ source: [0x0116], NFC: [0x0116], NFD: [0x0045, 0x0307], NFKC: [0x0116], NFKD: [0x0045, 0x0307] }, +{ source: [0x0117], NFC: [0x0117], NFD: [0x0065, 0x0307], NFKC: [0x0117], NFKD: [0x0065, 0x0307] }, +{ source: [0x0118], NFC: [0x0118], NFD: [0x0045, 0x0328], NFKC: [0x0118], NFKD: [0x0045, 0x0328] }, +{ source: [0x0119], NFC: [0x0119], NFD: [0x0065, 0x0328], NFKC: [0x0119], NFKD: [0x0065, 0x0328] }, +{ source: [0x011A], NFC: [0x011A], NFD: [0x0045, 0x030C], NFKC: [0x011A], NFKD: [0x0045, 0x030C] }, +{ source: [0x011B], NFC: [0x011B], NFD: [0x0065, 0x030C], NFKC: [0x011B], NFKD: [0x0065, 0x030C] }, +{ source: [0x011C], NFC: [0x011C], NFD: [0x0047, 0x0302], NFKC: [0x011C], NFKD: [0x0047, 0x0302] }, +{ source: [0x011D], NFC: [0x011D], NFD: [0x0067, 0x0302], NFKC: [0x011D], NFKD: [0x0067, 0x0302] }, +{ source: [0x011E], NFC: [0x011E], NFD: [0x0047, 0x0306], NFKC: [0x011E], NFKD: [0x0047, 0x0306] }, +{ source: [0x011F], NFC: [0x011F], NFD: [0x0067, 0x0306], NFKC: [0x011F], NFKD: [0x0067, 0x0306] }, +{ source: [0x0120], NFC: [0x0120], NFD: [0x0047, 0x0307], NFKC: [0x0120], NFKD: [0x0047, 0x0307] }, +{ source: [0x0121], NFC: [0x0121], NFD: [0x0067, 0x0307], NFKC: [0x0121], NFKD: [0x0067, 0x0307] }, +{ source: [0x0122], NFC: [0x0122], NFD: [0x0047, 0x0327], NFKC: [0x0122], NFKD: [0x0047, 0x0327] }, +{ source: [0x0123], NFC: [0x0123], NFD: [0x0067, 0x0327], NFKC: [0x0123], NFKD: [0x0067, 0x0327] }, +{ source: [0x0124], NFC: [0x0124], NFD: [0x0048, 0x0302], NFKC: [0x0124], NFKD: [0x0048, 0x0302] }, +{ source: [0x0125], NFC: [0x0125], NFD: [0x0068, 0x0302], NFKC: [0x0125], NFKD: [0x0068, 0x0302] }, +{ source: [0x0128], NFC: [0x0128], NFD: [0x0049, 0x0303], NFKC: [0x0128], NFKD: [0x0049, 0x0303] }, +{ source: [0x0129], NFC: [0x0129], NFD: [0x0069, 0x0303], NFKC: [0x0129], NFKD: [0x0069, 0x0303] }, +{ source: [0x012A], NFC: [0x012A], NFD: [0x0049, 0x0304], NFKC: [0x012A], NFKD: [0x0049, 0x0304] }, +{ source: [0x012B], NFC: [0x012B], NFD: [0x0069, 0x0304], NFKC: [0x012B], NFKD: [0x0069, 0x0304] }, +{ source: [0x012C], NFC: [0x012C], NFD: [0x0049, 0x0306], NFKC: [0x012C], NFKD: [0x0049, 0x0306] }, +{ source: [0x012D], NFC: [0x012D], NFD: [0x0069, 0x0306], NFKC: [0x012D], NFKD: [0x0069, 0x0306] }, +{ source: [0x012E], NFC: [0x012E], NFD: [0x0049, 0x0328], NFKC: [0x012E], NFKD: [0x0049, 0x0328] }, +{ source: [0x012F], NFC: [0x012F], NFD: [0x0069, 0x0328], NFKC: [0x012F], NFKD: [0x0069, 0x0328] }, +{ source: [0x0130], NFC: [0x0130], NFD: [0x0049, 0x0307], NFKC: [0x0130], NFKD: [0x0049, 0x0307] }, +{ source: [0x0132], NFC: [0x0132], NFD: [0x0132], NFKC: [0x0049, 0x004A], NFKD: [0x0049, 0x004A] }, +{ source: [0x0133], NFC: [0x0133], NFD: [0x0133], NFKC: [0x0069, 0x006A], NFKD: [0x0069, 0x006A] }, +{ source: [0x0134], NFC: [0x0134], NFD: [0x004A, 0x0302], NFKC: [0x0134], NFKD: [0x004A, 0x0302] }, +{ source: [0x0135], NFC: [0x0135], NFD: [0x006A, 0x0302], NFKC: [0x0135], NFKD: [0x006A, 0x0302] }, +{ source: [0x0136], NFC: [0x0136], NFD: [0x004B, 0x0327], NFKC: [0x0136], NFKD: [0x004B, 0x0327] }, +{ source: [0x0137], NFC: [0x0137], NFD: [0x006B, 0x0327], NFKC: [0x0137], NFKD: [0x006B, 0x0327] }, +{ source: [0x0139], NFC: [0x0139], NFD: [0x004C, 0x0301], NFKC: [0x0139], NFKD: [0x004C, 0x0301] }, +{ source: [0x013A], NFC: [0x013A], NFD: [0x006C, 0x0301], NFKC: [0x013A], NFKD: [0x006C, 0x0301] }, +{ source: [0x013B], NFC: [0x013B], NFD: [0x004C, 0x0327], NFKC: [0x013B], NFKD: [0x004C, 0x0327] }, +{ source: [0x013C], NFC: [0x013C], NFD: [0x006C, 0x0327], NFKC: [0x013C], NFKD: [0x006C, 0x0327] }, +{ source: [0x013D], NFC: [0x013D], NFD: [0x004C, 0x030C], NFKC: [0x013D], NFKD: [0x004C, 0x030C] }, +{ source: [0x013E], NFC: [0x013E], NFD: [0x006C, 0x030C], NFKC: [0x013E], NFKD: [0x006C, 0x030C] }, +{ source: [0x013F], NFC: [0x013F], NFD: [0x013F], NFKC: [0x004C, 0x00B7], NFKD: [0x004C, 0x00B7] }, +{ source: [0x0140], NFC: [0x0140], NFD: [0x0140], NFKC: [0x006C, 0x00B7], NFKD: [0x006C, 0x00B7] }, +{ source: [0x0143], NFC: [0x0143], NFD: [0x004E, 0x0301], NFKC: [0x0143], NFKD: [0x004E, 0x0301] }, +{ source: [0x0144], NFC: [0x0144], NFD: [0x006E, 0x0301], NFKC: [0x0144], NFKD: [0x006E, 0x0301] }, +{ source: [0x0145], NFC: [0x0145], NFD: [0x004E, 0x0327], NFKC: [0x0145], NFKD: [0x004E, 0x0327] }, +{ source: [0x0146], NFC: [0x0146], NFD: [0x006E, 0x0327], NFKC: [0x0146], NFKD: [0x006E, 0x0327] }, +{ source: [0x0147], NFC: [0x0147], NFD: [0x004E, 0x030C], NFKC: [0x0147], NFKD: [0x004E, 0x030C] }, +{ source: [0x0148], NFC: [0x0148], NFD: [0x006E, 0x030C], NFKC: [0x0148], NFKD: [0x006E, 0x030C] }, +{ source: [0x0149], NFC: [0x0149], NFD: [0x0149], NFKC: [0x02BC, 0x006E], NFKD: [0x02BC, 0x006E] }, +{ source: [0x014C], NFC: [0x014C], NFD: [0x004F, 0x0304], NFKC: [0x014C], NFKD: [0x004F, 0x0304] }, +{ source: [0x014D], NFC: [0x014D], NFD: [0x006F, 0x0304], NFKC: [0x014D], NFKD: [0x006F, 0x0304] }, +{ source: [0x014E], NFC: [0x014E], NFD: [0x004F, 0x0306], NFKC: [0x014E], NFKD: [0x004F, 0x0306] }, +{ source: [0x014F], NFC: [0x014F], NFD: [0x006F, 0x0306], NFKC: [0x014F], NFKD: [0x006F, 0x0306] }, +{ source: [0x0150], NFC: [0x0150], NFD: [0x004F, 0x030B], NFKC: [0x0150], NFKD: [0x004F, 0x030B] }, +{ source: [0x0151], NFC: [0x0151], NFD: [0x006F, 0x030B], NFKC: [0x0151], NFKD: [0x006F, 0x030B] }, +{ source: [0x0154], NFC: [0x0154], NFD: [0x0052, 0x0301], NFKC: [0x0154], NFKD: [0x0052, 0x0301] }, +{ source: [0x0155], NFC: [0x0155], NFD: [0x0072, 0x0301], NFKC: [0x0155], NFKD: [0x0072, 0x0301] }, +{ source: [0x0156], NFC: [0x0156], NFD: [0x0052, 0x0327], NFKC: [0x0156], NFKD: [0x0052, 0x0327] }, +{ source: [0x0157], NFC: [0x0157], NFD: [0x0072, 0x0327], NFKC: [0x0157], NFKD: [0x0072, 0x0327] }, +{ source: [0x0158], NFC: [0x0158], NFD: [0x0052, 0x030C], NFKC: [0x0158], NFKD: [0x0052, 0x030C] }, +{ source: [0x0159], NFC: [0x0159], NFD: [0x0072, 0x030C], NFKC: [0x0159], NFKD: [0x0072, 0x030C] }, +{ source: [0x015A], NFC: [0x015A], NFD: [0x0053, 0x0301], NFKC: [0x015A], NFKD: [0x0053, 0x0301] }, +{ source: [0x015B], NFC: [0x015B], NFD: [0x0073, 0x0301], NFKC: [0x015B], NFKD: [0x0073, 0x0301] }, +{ source: [0x015C], NFC: [0x015C], NFD: [0x0053, 0x0302], NFKC: [0x015C], NFKD: [0x0053, 0x0302] }, +{ source: [0x015D], NFC: [0x015D], NFD: [0x0073, 0x0302], NFKC: [0x015D], NFKD: [0x0073, 0x0302] }, +{ source: [0x015E], NFC: [0x015E], NFD: [0x0053, 0x0327], NFKC: [0x015E], NFKD: [0x0053, 0x0327] }, +{ source: [0x015F], NFC: [0x015F], NFD: [0x0073, 0x0327], NFKC: [0x015F], NFKD: [0x0073, 0x0327] }, +{ source: [0x0160], NFC: [0x0160], NFD: [0x0053, 0x030C], NFKC: [0x0160], NFKD: [0x0053, 0x030C] }, +{ source: [0x0161], NFC: [0x0161], NFD: [0x0073, 0x030C], NFKC: [0x0161], NFKD: [0x0073, 0x030C] }, +{ source: [0x0162], NFC: [0x0162], NFD: [0x0054, 0x0327], NFKC: [0x0162], NFKD: [0x0054, 0x0327] }, +{ source: [0x0163], NFC: [0x0163], NFD: [0x0074, 0x0327], NFKC: [0x0163], NFKD: [0x0074, 0x0327] }, +{ source: [0x0164], NFC: [0x0164], NFD: [0x0054, 0x030C], NFKC: [0x0164], NFKD: [0x0054, 0x030C] }, +{ source: [0x0165], NFC: [0x0165], NFD: [0x0074, 0x030C], NFKC: [0x0165], NFKD: [0x0074, 0x030C] }, +{ source: [0x0168], NFC: [0x0168], NFD: [0x0055, 0x0303], NFKC: [0x0168], NFKD: [0x0055, 0x0303] }, +{ source: [0x0169], NFC: [0x0169], NFD: [0x0075, 0x0303], NFKC: [0x0169], NFKD: [0x0075, 0x0303] }, +{ source: [0x016A], NFC: [0x016A], NFD: [0x0055, 0x0304], NFKC: [0x016A], NFKD: [0x0055, 0x0304] }, +{ source: [0x016B], NFC: [0x016B], NFD: [0x0075, 0x0304], NFKC: [0x016B], NFKD: [0x0075, 0x0304] }, +{ source: [0x016C], NFC: [0x016C], NFD: [0x0055, 0x0306], NFKC: [0x016C], NFKD: [0x0055, 0x0306] }, +{ source: [0x016D], NFC: [0x016D], NFD: [0x0075, 0x0306], NFKC: [0x016D], NFKD: [0x0075, 0x0306] }, +{ source: [0x016E], NFC: [0x016E], NFD: [0x0055, 0x030A], NFKC: [0x016E], NFKD: [0x0055, 0x030A] }, +{ source: [0x016F], NFC: [0x016F], NFD: [0x0075, 0x030A], NFKC: [0x016F], NFKD: [0x0075, 0x030A] }, +{ source: [0x0170], NFC: [0x0170], NFD: [0x0055, 0x030B], NFKC: [0x0170], NFKD: [0x0055, 0x030B] }, +{ source: [0x0171], NFC: [0x0171], NFD: [0x0075, 0x030B], NFKC: [0x0171], NFKD: [0x0075, 0x030B] }, +{ source: [0x0172], NFC: [0x0172], NFD: [0x0055, 0x0328], NFKC: [0x0172], NFKD: [0x0055, 0x0328] }, +{ source: [0x0173], NFC: [0x0173], NFD: [0x0075, 0x0328], NFKC: [0x0173], NFKD: [0x0075, 0x0328] }, +{ source: [0x0174], NFC: [0x0174], NFD: [0x0057, 0x0302], NFKC: [0x0174], NFKD: [0x0057, 0x0302] }, +{ source: [0x0175], NFC: [0x0175], NFD: [0x0077, 0x0302], NFKC: [0x0175], NFKD: [0x0077, 0x0302] }, +{ source: [0x0176], NFC: [0x0176], NFD: [0x0059, 0x0302], NFKC: [0x0176], NFKD: [0x0059, 0x0302] }, +{ source: [0x0177], NFC: [0x0177], NFD: [0x0079, 0x0302], NFKC: [0x0177], NFKD: [0x0079, 0x0302] }, +{ source: [0x0178], NFC: [0x0178], NFD: [0x0059, 0x0308], NFKC: [0x0178], NFKD: [0x0059, 0x0308] }, +{ source: [0x0179], NFC: [0x0179], NFD: [0x005A, 0x0301], NFKC: [0x0179], NFKD: [0x005A, 0x0301] }, +{ source: [0x017A], NFC: [0x017A], NFD: [0x007A, 0x0301], NFKC: [0x017A], NFKD: [0x007A, 0x0301] }, +{ source: [0x017B], NFC: [0x017B], NFD: [0x005A, 0x0307], NFKC: [0x017B], NFKD: [0x005A, 0x0307] }, +{ source: [0x017C], NFC: [0x017C], NFD: [0x007A, 0x0307], NFKC: [0x017C], NFKD: [0x007A, 0x0307] }, +{ source: [0x017D], NFC: [0x017D], NFD: [0x005A, 0x030C], NFKC: [0x017D], NFKD: [0x005A, 0x030C] }, +{ source: [0x017E], NFC: [0x017E], NFD: [0x007A, 0x030C], NFKC: [0x017E], NFKD: [0x007A, 0x030C] }, +{ source: [0x017F], NFC: [0x017F], NFD: [0x017F], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x01A0], NFC: [0x01A0], NFD: [0x004F, 0x031B], NFKC: [0x01A0], NFKD: [0x004F, 0x031B] }, +{ source: [0x01A1], NFC: [0x01A1], NFD: [0x006F, 0x031B], NFKC: [0x01A1], NFKD: [0x006F, 0x031B] }, +{ source: [0x01AF], NFC: [0x01AF], NFD: [0x0055, 0x031B], NFKC: [0x01AF], NFKD: [0x0055, 0x031B] }, +{ source: [0x01B0], NFC: [0x01B0], NFD: [0x0075, 0x031B], NFKC: [0x01B0], NFKD: [0x0075, 0x031B] }, +{ source: [0x01C4], NFC: [0x01C4], NFD: [0x01C4], NFKC: [0x0044, 0x017D], NFKD: [0x0044, 0x005A, 0x030C] }, +{ source: [0x01C5], NFC: [0x01C5], NFD: [0x01C5], NFKC: [0x0044, 0x017E], NFKD: [0x0044, 0x007A, 0x030C] }, +{ source: [0x01C6], NFC: [0x01C6], NFD: [0x01C6], NFKC: [0x0064, 0x017E], NFKD: [0x0064, 0x007A, 0x030C] }, +{ source: [0x01C7], NFC: [0x01C7], NFD: [0x01C7], NFKC: [0x004C, 0x004A], NFKD: [0x004C, 0x004A] }, +{ source: [0x01C8], NFC: [0x01C8], NFD: [0x01C8], NFKC: [0x004C, 0x006A], NFKD: [0x004C, 0x006A] }, +{ source: [0x01C9], NFC: [0x01C9], NFD: [0x01C9], NFKC: [0x006C, 0x006A], NFKD: [0x006C, 0x006A] }, +{ source: [0x01CA], NFC: [0x01CA], NFD: [0x01CA], NFKC: [0x004E, 0x004A], NFKD: [0x004E, 0x004A] }, +{ source: [0x01CB], NFC: [0x01CB], NFD: [0x01CB], NFKC: [0x004E, 0x006A], NFKD: [0x004E, 0x006A] }, +{ source: [0x01CC], NFC: [0x01CC], NFD: [0x01CC], NFKC: [0x006E, 0x006A], NFKD: [0x006E, 0x006A] }, +{ source: [0x01CD], NFC: [0x01CD], NFD: [0x0041, 0x030C], NFKC: [0x01CD], NFKD: [0x0041, 0x030C] }, +{ source: [0x01CE], NFC: [0x01CE], NFD: [0x0061, 0x030C], NFKC: [0x01CE], NFKD: [0x0061, 0x030C] }, +{ source: [0x01CF], NFC: [0x01CF], NFD: [0x0049, 0x030C], NFKC: [0x01CF], NFKD: [0x0049, 0x030C] }, +{ source: [0x01D0], NFC: [0x01D0], NFD: [0x0069, 0x030C], NFKC: [0x01D0], NFKD: [0x0069, 0x030C] }, +{ source: [0x01D1], NFC: [0x01D1], NFD: [0x004F, 0x030C], NFKC: [0x01D1], NFKD: [0x004F, 0x030C] }, +{ source: [0x01D2], NFC: [0x01D2], NFD: [0x006F, 0x030C], NFKC: [0x01D2], NFKD: [0x006F, 0x030C] }, +{ source: [0x01D3], NFC: [0x01D3], NFD: [0x0055, 0x030C], NFKC: [0x01D3], NFKD: [0x0055, 0x030C] }, +{ source: [0x01D4], NFC: [0x01D4], NFD: [0x0075, 0x030C], NFKC: [0x01D4], NFKD: [0x0075, 0x030C] }, +{ source: [0x01D5], NFC: [0x01D5], NFD: [0x0055, 0x0308, 0x0304], NFKC: [0x01D5], NFKD: [0x0055, 0x0308, 0x0304] }, +{ source: [0x01D6], NFC: [0x01D6], NFD: [0x0075, 0x0308, 0x0304], NFKC: [0x01D6], NFKD: [0x0075, 0x0308, 0x0304] }, +{ source: [0x01D7], NFC: [0x01D7], NFD: [0x0055, 0x0308, 0x0301], NFKC: [0x01D7], NFKD: [0x0055, 0x0308, 0x0301] }, +{ source: [0x01D8], NFC: [0x01D8], NFD: [0x0075, 0x0308, 0x0301], NFKC: [0x01D8], NFKD: [0x0075, 0x0308, 0x0301] }, +{ source: [0x01D9], NFC: [0x01D9], NFD: [0x0055, 0x0308, 0x030C], NFKC: [0x01D9], NFKD: [0x0055, 0x0308, 0x030C] }, +{ source: [0x01DA], NFC: [0x01DA], NFD: [0x0075, 0x0308, 0x030C], NFKC: [0x01DA], NFKD: [0x0075, 0x0308, 0x030C] }, +{ source: [0x01DB], NFC: [0x01DB], NFD: [0x0055, 0x0308, 0x0300], NFKC: [0x01DB], NFKD: [0x0055, 0x0308, 0x0300] }, +{ source: [0x01DC], NFC: [0x01DC], NFD: [0x0075, 0x0308, 0x0300], NFKC: [0x01DC], NFKD: [0x0075, 0x0308, 0x0300] }, +{ source: [0x01DE], NFC: [0x01DE], NFD: [0x0041, 0x0308, 0x0304], NFKC: [0x01DE], NFKD: [0x0041, 0x0308, 0x0304] }, +{ source: [0x01DF], NFC: [0x01DF], NFD: [0x0061, 0x0308, 0x0304], NFKC: [0x01DF], NFKD: [0x0061, 0x0308, 0x0304] }, +{ source: [0x01E0], NFC: [0x01E0], NFD: [0x0041, 0x0307, 0x0304], NFKC: [0x01E0], NFKD: [0x0041, 0x0307, 0x0304] }, +{ source: [0x01E1], NFC: [0x01E1], NFD: [0x0061, 0x0307, 0x0304], NFKC: [0x01E1], NFKD: [0x0061, 0x0307, 0x0304] }, +{ source: [0x01E2], NFC: [0x01E2], NFD: [0x00C6, 0x0304], NFKC: [0x01E2], NFKD: [0x00C6, 0x0304] }, +{ source: [0x01E3], NFC: [0x01E3], NFD: [0x00E6, 0x0304], NFKC: [0x01E3], NFKD: [0x00E6, 0x0304] }, +{ source: [0x01E6], NFC: [0x01E6], NFD: [0x0047, 0x030C], NFKC: [0x01E6], NFKD: [0x0047, 0x030C] }, +{ source: [0x01E7], NFC: [0x01E7], NFD: [0x0067, 0x030C], NFKC: [0x01E7], NFKD: [0x0067, 0x030C] }, +{ source: [0x01E8], NFC: [0x01E8], NFD: [0x004B, 0x030C], NFKC: [0x01E8], NFKD: [0x004B, 0x030C] }, +{ source: [0x01E9], NFC: [0x01E9], NFD: [0x006B, 0x030C], NFKC: [0x01E9], NFKD: [0x006B, 0x030C] }, +{ source: [0x01EA], NFC: [0x01EA], NFD: [0x004F, 0x0328], NFKC: [0x01EA], NFKD: [0x004F, 0x0328] }, +{ source: [0x01EB], NFC: [0x01EB], NFD: [0x006F, 0x0328], NFKC: [0x01EB], NFKD: [0x006F, 0x0328] }, +{ source: [0x01EC], NFC: [0x01EC], NFD: [0x004F, 0x0328, 0x0304], NFKC: [0x01EC], NFKD: [0x004F, 0x0328, 0x0304] }, +{ source: [0x01ED], NFC: [0x01ED], NFD: [0x006F, 0x0328, 0x0304], NFKC: [0x01ED], NFKD: [0x006F, 0x0328, 0x0304] }, +{ source: [0x01EE], NFC: [0x01EE], NFD: [0x01B7, 0x030C], NFKC: [0x01EE], NFKD: [0x01B7, 0x030C] }, +{ source: [0x01EF], NFC: [0x01EF], NFD: [0x0292, 0x030C], NFKC: [0x01EF], NFKD: [0x0292, 0x030C] }, +{ source: [0x01F0], NFC: [0x01F0], NFD: [0x006A, 0x030C], NFKC: [0x01F0], NFKD: [0x006A, 0x030C] }, +{ source: [0x01F1], NFC: [0x01F1], NFD: [0x01F1], NFKC: [0x0044, 0x005A], NFKD: [0x0044, 0x005A] }, +{ source: [0x01F2], NFC: [0x01F2], NFD: [0x01F2], NFKC: [0x0044, 0x007A], NFKD: [0x0044, 0x007A] }, +{ source: [0x01F3], NFC: [0x01F3], NFD: [0x01F3], NFKC: [0x0064, 0x007A], NFKD: [0x0064, 0x007A] }, +{ source: [0x01F4], NFC: [0x01F4], NFD: [0x0047, 0x0301], NFKC: [0x01F4], NFKD: [0x0047, 0x0301] }, +{ source: [0x01F5], NFC: [0x01F5], NFD: [0x0067, 0x0301], NFKC: [0x01F5], NFKD: [0x0067, 0x0301] }, +{ source: [0x01F8], NFC: [0x01F8], NFD: [0x004E, 0x0300], NFKC: [0x01F8], NFKD: [0x004E, 0x0300] }, +{ source: [0x01F9], NFC: [0x01F9], NFD: [0x006E, 0x0300], NFKC: [0x01F9], NFKD: [0x006E, 0x0300] }, +{ source: [0x01FA], NFC: [0x01FA], NFD: [0x0041, 0x030A, 0x0301], NFKC: [0x01FA], NFKD: [0x0041, 0x030A, 0x0301] }, +{ source: [0x01FB], NFC: [0x01FB], NFD: [0x0061, 0x030A, 0x0301], NFKC: [0x01FB], NFKD: [0x0061, 0x030A, 0x0301] }, +{ source: [0x01FC], NFC: [0x01FC], NFD: [0x00C6, 0x0301], NFKC: [0x01FC], NFKD: [0x00C6, 0x0301] }, +{ source: [0x01FD], NFC: [0x01FD], NFD: [0x00E6, 0x0301], NFKC: [0x01FD], NFKD: [0x00E6, 0x0301] }, +{ source: [0x01FE], NFC: [0x01FE], NFD: [0x00D8, 0x0301], NFKC: [0x01FE], NFKD: [0x00D8, 0x0301] }, +{ source: [0x01FF], NFC: [0x01FF], NFD: [0x00F8, 0x0301], NFKC: [0x01FF], NFKD: [0x00F8, 0x0301] }, +{ source: [0x0200], NFC: [0x0200], NFD: [0x0041, 0x030F], NFKC: [0x0200], NFKD: [0x0041, 0x030F] }, +{ source: [0x0201], NFC: [0x0201], NFD: [0x0061, 0x030F], NFKC: [0x0201], NFKD: [0x0061, 0x030F] }, +{ source: [0x0202], NFC: [0x0202], NFD: [0x0041, 0x0311], NFKC: [0x0202], NFKD: [0x0041, 0x0311] }, +{ source: [0x0203], NFC: [0x0203], NFD: [0x0061, 0x0311], NFKC: [0x0203], NFKD: [0x0061, 0x0311] }, +{ source: [0x0204], NFC: [0x0204], NFD: [0x0045, 0x030F], NFKC: [0x0204], NFKD: [0x0045, 0x030F] }, +{ source: [0x0205], NFC: [0x0205], NFD: [0x0065, 0x030F], NFKC: [0x0205], NFKD: [0x0065, 0x030F] }, +{ source: [0x0206], NFC: [0x0206], NFD: [0x0045, 0x0311], NFKC: [0x0206], NFKD: [0x0045, 0x0311] }, +{ source: [0x0207], NFC: [0x0207], NFD: [0x0065, 0x0311], NFKC: [0x0207], NFKD: [0x0065, 0x0311] }, +{ source: [0x0208], NFC: [0x0208], NFD: [0x0049, 0x030F], NFKC: [0x0208], NFKD: [0x0049, 0x030F] }, +{ source: [0x0209], NFC: [0x0209], NFD: [0x0069, 0x030F], NFKC: [0x0209], NFKD: [0x0069, 0x030F] }, +{ source: [0x020A], NFC: [0x020A], NFD: [0x0049, 0x0311], NFKC: [0x020A], NFKD: [0x0049, 0x0311] }, +{ source: [0x020B], NFC: [0x020B], NFD: [0x0069, 0x0311], NFKC: [0x020B], NFKD: [0x0069, 0x0311] }, +{ source: [0x020C], NFC: [0x020C], NFD: [0x004F, 0x030F], NFKC: [0x020C], NFKD: [0x004F, 0x030F] }, +{ source: [0x020D], NFC: [0x020D], NFD: [0x006F, 0x030F], NFKC: [0x020D], NFKD: [0x006F, 0x030F] }, +{ source: [0x020E], NFC: [0x020E], NFD: [0x004F, 0x0311], NFKC: [0x020E], NFKD: [0x004F, 0x0311] }, +{ source: [0x020F], NFC: [0x020F], NFD: [0x006F, 0x0311], NFKC: [0x020F], NFKD: [0x006F, 0x0311] }, +{ source: [0x0210], NFC: [0x0210], NFD: [0x0052, 0x030F], NFKC: [0x0210], NFKD: [0x0052, 0x030F] }, +{ source: [0x0211], NFC: [0x0211], NFD: [0x0072, 0x030F], NFKC: [0x0211], NFKD: [0x0072, 0x030F] }, +{ source: [0x0212], NFC: [0x0212], NFD: [0x0052, 0x0311], NFKC: [0x0212], NFKD: [0x0052, 0x0311] }, +{ source: [0x0213], NFC: [0x0213], NFD: [0x0072, 0x0311], NFKC: [0x0213], NFKD: [0x0072, 0x0311] }, +{ source: [0x0214], NFC: [0x0214], NFD: [0x0055, 0x030F], NFKC: [0x0214], NFKD: [0x0055, 0x030F] }, +{ source: [0x0215], NFC: [0x0215], NFD: [0x0075, 0x030F], NFKC: [0x0215], NFKD: [0x0075, 0x030F] }, +{ source: [0x0216], NFC: [0x0216], NFD: [0x0055, 0x0311], NFKC: [0x0216], NFKD: [0x0055, 0x0311] }, +{ source: [0x0217], NFC: [0x0217], NFD: [0x0075, 0x0311], NFKC: [0x0217], NFKD: [0x0075, 0x0311] }, +{ source: [0x0218], NFC: [0x0218], NFD: [0x0053, 0x0326], NFKC: [0x0218], NFKD: [0x0053, 0x0326] }, +{ source: [0x0219], NFC: [0x0219], NFD: [0x0073, 0x0326], NFKC: [0x0219], NFKD: [0x0073, 0x0326] }, +{ source: [0x021A], NFC: [0x021A], NFD: [0x0054, 0x0326], NFKC: [0x021A], NFKD: [0x0054, 0x0326] }, +{ source: [0x021B], NFC: [0x021B], NFD: [0x0074, 0x0326], NFKC: [0x021B], NFKD: [0x0074, 0x0326] }, +{ source: [0x021E], NFC: [0x021E], NFD: [0x0048, 0x030C], NFKC: [0x021E], NFKD: [0x0048, 0x030C] }, +{ source: [0x021F], NFC: [0x021F], NFD: [0x0068, 0x030C], NFKC: [0x021F], NFKD: [0x0068, 0x030C] }, +{ source: [0x0226], NFC: [0x0226], NFD: [0x0041, 0x0307], NFKC: [0x0226], NFKD: [0x0041, 0x0307] }, +{ source: [0x0227], NFC: [0x0227], NFD: [0x0061, 0x0307], NFKC: [0x0227], NFKD: [0x0061, 0x0307] }, +{ source: [0x0228], NFC: [0x0228], NFD: [0x0045, 0x0327], NFKC: [0x0228], NFKD: [0x0045, 0x0327] }, +{ source: [0x0229], NFC: [0x0229], NFD: [0x0065, 0x0327], NFKC: [0x0229], NFKD: [0x0065, 0x0327] }, +{ source: [0x022A], NFC: [0x022A], NFD: [0x004F, 0x0308, 0x0304], NFKC: [0x022A], NFKD: [0x004F, 0x0308, 0x0304] }, +{ source: [0x022B], NFC: [0x022B], NFD: [0x006F, 0x0308, 0x0304], NFKC: [0x022B], NFKD: [0x006F, 0x0308, 0x0304] }, +{ source: [0x022C], NFC: [0x022C], NFD: [0x004F, 0x0303, 0x0304], NFKC: [0x022C], NFKD: [0x004F, 0x0303, 0x0304] }, +{ source: [0x022D], NFC: [0x022D], NFD: [0x006F, 0x0303, 0x0304], NFKC: [0x022D], NFKD: [0x006F, 0x0303, 0x0304] }, +{ source: [0x022E], NFC: [0x022E], NFD: [0x004F, 0x0307], NFKC: [0x022E], NFKD: [0x004F, 0x0307] }, +{ source: [0x022F], NFC: [0x022F], NFD: [0x006F, 0x0307], NFKC: [0x022F], NFKD: [0x006F, 0x0307] }, +{ source: [0x0230], NFC: [0x0230], NFD: [0x004F, 0x0307, 0x0304], NFKC: [0x0230], NFKD: [0x004F, 0x0307, 0x0304] }, +{ source: [0x0231], NFC: [0x0231], NFD: [0x006F, 0x0307, 0x0304], NFKC: [0x0231], NFKD: [0x006F, 0x0307, 0x0304] }, +{ source: [0x0232], NFC: [0x0232], NFD: [0x0059, 0x0304], NFKC: [0x0232], NFKD: [0x0059, 0x0304] }, +{ source: [0x0233], NFC: [0x0233], NFD: [0x0079, 0x0304], NFKC: [0x0233], NFKD: [0x0079, 0x0304] }, +{ source: [0x02B0], NFC: [0x02B0], NFD: [0x02B0], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x02B1], NFC: [0x02B1], NFD: [0x02B1], NFKC: [0x0266], NFKD: [0x0266] }, +{ source: [0x02B2], NFC: [0x02B2], NFD: [0x02B2], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x02B3], NFC: [0x02B3], NFD: [0x02B3], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x02B4], NFC: [0x02B4], NFD: [0x02B4], NFKC: [0x0279], NFKD: [0x0279] }, +{ source: [0x02B5], NFC: [0x02B5], NFD: [0x02B5], NFKC: [0x027B], NFKD: [0x027B] }, +{ source: [0x02B6], NFC: [0x02B6], NFD: [0x02B6], NFKC: [0x0281], NFKD: [0x0281] }, +{ source: [0x02B7], NFC: [0x02B7], NFD: [0x02B7], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x02B8], NFC: [0x02B8], NFD: [0x02B8], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x02D8], NFC: [0x02D8], NFD: [0x02D8], NFKC: [0x0020, 0x0306], NFKD: [0x0020, 0x0306] }, +{ source: [0x02D9], NFC: [0x02D9], NFD: [0x02D9], NFKC: [0x0020, 0x0307], NFKD: [0x0020, 0x0307] }, +{ source: [0x02DA], NFC: [0x02DA], NFD: [0x02DA], NFKC: [0x0020, 0x030A], NFKD: [0x0020, 0x030A] }, +{ source: [0x02DB], NFC: [0x02DB], NFD: [0x02DB], NFKC: [0x0020, 0x0328], NFKD: [0x0020, 0x0328] }, +{ source: [0x02DC], NFC: [0x02DC], NFD: [0x02DC], NFKC: [0x0020, 0x0303], NFKD: [0x0020, 0x0303] }, +{ source: [0x02DD], NFC: [0x02DD], NFD: [0x02DD], NFKC: [0x0020, 0x030B], NFKD: [0x0020, 0x030B] }, +{ source: [0x02E0], NFC: [0x02E0], NFD: [0x02E0], NFKC: [0x0263], NFKD: [0x0263] }, +{ source: [0x02E1], NFC: [0x02E1], NFD: [0x02E1], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x02E2], NFC: [0x02E2], NFD: [0x02E2], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x02E3], NFC: [0x02E3], NFD: [0x02E3], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x02E4], NFC: [0x02E4], NFD: [0x02E4], NFKC: [0x0295], NFKD: [0x0295] }, +{ source: [0x0340], NFC: [0x0300], NFD: [0x0300], NFKC: [0x0300], NFKD: [0x0300] }, +{ source: [0x0341], NFC: [0x0301], NFD: [0x0301], NFKC: [0x0301], NFKD: [0x0301] }, +{ source: [0x0343], NFC: [0x0313], NFD: [0x0313], NFKC: [0x0313], NFKD: [0x0313] }, +{ source: [0x0344], NFC: [0x0308, 0x0301], NFD: [0x0308, 0x0301], NFKC: [0x0308, 0x0301], NFKD: [0x0308, 0x0301] }, +{ source: [0x0374], NFC: [0x02B9], NFD: [0x02B9], NFKC: [0x02B9], NFKD: [0x02B9] }, +{ source: [0x037A], NFC: [0x037A], NFD: [0x037A], NFKC: [0x0020, 0x0345], NFKD: [0x0020, 0x0345] }, +{ source: [0x037E], NFC: [0x003B], NFD: [0x003B], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0x0384], NFC: [0x0384], NFD: [0x0384], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] }, +{ source: [0x0385], NFC: [0x0385], NFD: [0x00A8, 0x0301], NFKC: [0x0020, 0x0308, 0x0301], NFKD: [0x0020, 0x0308, 0x0301] }, +{ source: [0x0386], NFC: [0x0386], NFD: [0x0391, 0x0301], NFKC: [0x0386], NFKD: [0x0391, 0x0301] }, +{ source: [0x0387], NFC: [0x00B7], NFD: [0x00B7], NFKC: [0x00B7], NFKD: [0x00B7] }, +{ source: [0x0388], NFC: [0x0388], NFD: [0x0395, 0x0301], NFKC: [0x0388], NFKD: [0x0395, 0x0301] }, +{ source: [0x0389], NFC: [0x0389], NFD: [0x0397, 0x0301], NFKC: [0x0389], NFKD: [0x0397, 0x0301] }, +{ source: [0x038A], NFC: [0x038A], NFD: [0x0399, 0x0301], NFKC: [0x038A], NFKD: [0x0399, 0x0301] }, +{ source: [0x038C], NFC: [0x038C], NFD: [0x039F, 0x0301], NFKC: [0x038C], NFKD: [0x039F, 0x0301] }, +{ source: [0x038E], NFC: [0x038E], NFD: [0x03A5, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] }, +{ source: [0x038F], NFC: [0x038F], NFD: [0x03A9, 0x0301], NFKC: [0x038F], NFKD: [0x03A9, 0x0301] }, +{ source: [0x0390], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x03AA], NFC: [0x03AA], NFD: [0x0399, 0x0308], NFKC: [0x03AA], NFKD: [0x0399, 0x0308] }, +{ source: [0x03AB], NFC: [0x03AB], NFD: [0x03A5, 0x0308], NFKC: [0x03AB], NFKD: [0x03A5, 0x0308] }, +{ source: [0x03AC], NFC: [0x03AC], NFD: [0x03B1, 0x0301], NFKC: [0x03AC], NFKD: [0x03B1, 0x0301] }, +{ source: [0x03AD], NFC: [0x03AD], NFD: [0x03B5, 0x0301], NFKC: [0x03AD], NFKD: [0x03B5, 0x0301] }, +{ source: [0x03AE], NFC: [0x03AE], NFD: [0x03B7, 0x0301], NFKC: [0x03AE], NFKD: [0x03B7, 0x0301] }, +{ source: [0x03AF], NFC: [0x03AF], NFD: [0x03B9, 0x0301], NFKC: [0x03AF], NFKD: [0x03B9, 0x0301] }, +{ source: [0x03B0], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x03CA], NFC: [0x03CA], NFD: [0x03B9, 0x0308], NFKC: [0x03CA], NFKD: [0x03B9, 0x0308] }, +{ source: [0x03CB], NFC: [0x03CB], NFD: [0x03C5, 0x0308], NFKC: [0x03CB], NFKD: [0x03C5, 0x0308] }, +{ source: [0x03CC], NFC: [0x03CC], NFD: [0x03BF, 0x0301], NFKC: [0x03CC], NFKD: [0x03BF, 0x0301] }, +{ source: [0x03CD], NFC: [0x03CD], NFD: [0x03C5, 0x0301], NFKC: [0x03CD], NFKD: [0x03C5, 0x0301] }, +{ source: [0x03CE], NFC: [0x03CE], NFD: [0x03C9, 0x0301], NFKC: [0x03CE], NFKD: [0x03C9, 0x0301] }, +{ source: [0x03D0], NFC: [0x03D0], NFD: [0x03D0], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x03D1], NFC: [0x03D1], NFD: [0x03D1], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x03D2], NFC: [0x03D2], NFD: [0x03D2], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x03D3], NFC: [0x03D3], NFD: [0x03D2, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] }, +{ source: [0x03D4], NFC: [0x03D4], NFD: [0x03D2, 0x0308], NFKC: [0x03AB], NFKD: [0x03A5, 0x0308] }, +{ source: [0x03D5], NFC: [0x03D5], NFD: [0x03D5], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x03D6], NFC: [0x03D6], NFD: [0x03D6], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x03F0], NFC: [0x03F0], NFD: [0x03F0], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x03F1], NFC: [0x03F1], NFD: [0x03F1], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x03F2], NFC: [0x03F2], NFD: [0x03F2], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x03F4], NFC: [0x03F4], NFD: [0x03F4], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x03F5], NFC: [0x03F5], NFD: [0x03F5], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x03F9], NFC: [0x03F9], NFD: [0x03F9], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x0400], NFC: [0x0400], NFD: [0x0415, 0x0300], NFKC: [0x0400], NFKD: [0x0415, 0x0300] }, +{ source: [0x0401], NFC: [0x0401], NFD: [0x0415, 0x0308], NFKC: [0x0401], NFKD: [0x0415, 0x0308] }, +{ source: [0x0403], NFC: [0x0403], NFD: [0x0413, 0x0301], NFKC: [0x0403], NFKD: [0x0413, 0x0301] }, +{ source: [0x0407], NFC: [0x0407], NFD: [0x0406, 0x0308], NFKC: [0x0407], NFKD: [0x0406, 0x0308] }, +{ source: [0x040C], NFC: [0x040C], NFD: [0x041A, 0x0301], NFKC: [0x040C], NFKD: [0x041A, 0x0301] }, +{ source: [0x040D], NFC: [0x040D], NFD: [0x0418, 0x0300], NFKC: [0x040D], NFKD: [0x0418, 0x0300] }, +{ source: [0x040E], NFC: [0x040E], NFD: [0x0423, 0x0306], NFKC: [0x040E], NFKD: [0x0423, 0x0306] }, +{ source: [0x0419], NFC: [0x0419], NFD: [0x0418, 0x0306], NFKC: [0x0419], NFKD: [0x0418, 0x0306] }, +{ source: [0x0439], NFC: [0x0439], NFD: [0x0438, 0x0306], NFKC: [0x0439], NFKD: [0x0438, 0x0306] }, +{ source: [0x0450], NFC: [0x0450], NFD: [0x0435, 0x0300], NFKC: [0x0450], NFKD: [0x0435, 0x0300] }, +{ source: [0x0451], NFC: [0x0451], NFD: [0x0435, 0x0308], NFKC: [0x0451], NFKD: [0x0435, 0x0308] }, +{ source: [0x0453], NFC: [0x0453], NFD: [0x0433, 0x0301], NFKC: [0x0453], NFKD: [0x0433, 0x0301] }, +{ source: [0x0457], NFC: [0x0457], NFD: [0x0456, 0x0308], NFKC: [0x0457], NFKD: [0x0456, 0x0308] }, +{ source: [0x045C], NFC: [0x045C], NFD: [0x043A, 0x0301], NFKC: [0x045C], NFKD: [0x043A, 0x0301] }, +{ source: [0x045D], NFC: [0x045D], NFD: [0x0438, 0x0300], NFKC: [0x045D], NFKD: [0x0438, 0x0300] }, +{ source: [0x045E], NFC: [0x045E], NFD: [0x0443, 0x0306], NFKC: [0x045E], NFKD: [0x0443, 0x0306] }, +{ source: [0x0476], NFC: [0x0476], NFD: [0x0474, 0x030F], NFKC: [0x0476], NFKD: [0x0474, 0x030F] }, +{ source: [0x0477], NFC: [0x0477], NFD: [0x0475, 0x030F], NFKC: [0x0477], NFKD: [0x0475, 0x030F] }, +{ source: [0x04C1], NFC: [0x04C1], NFD: [0x0416, 0x0306], NFKC: [0x04C1], NFKD: [0x0416, 0x0306] }, +{ source: [0x04C2], NFC: [0x04C2], NFD: [0x0436, 0x0306], NFKC: [0x04C2], NFKD: [0x0436, 0x0306] }, +{ source: [0x04D0], NFC: [0x04D0], NFD: [0x0410, 0x0306], NFKC: [0x04D0], NFKD: [0x0410, 0x0306] }, +{ source: [0x04D1], NFC: [0x04D1], NFD: [0x0430, 0x0306], NFKC: [0x04D1], NFKD: [0x0430, 0x0306] }, +{ source: [0x04D2], NFC: [0x04D2], NFD: [0x0410, 0x0308], NFKC: [0x04D2], NFKD: [0x0410, 0x0308] }, +{ source: [0x04D3], NFC: [0x04D3], NFD: [0x0430, 0x0308], NFKC: [0x04D3], NFKD: [0x0430, 0x0308] }, +{ source: [0x04D6], NFC: [0x04D6], NFD: [0x0415, 0x0306], NFKC: [0x04D6], NFKD: [0x0415, 0x0306] }, +{ source: [0x04D7], NFC: [0x04D7], NFD: [0x0435, 0x0306], NFKC: [0x04D7], NFKD: [0x0435, 0x0306] }, +{ source: [0x04DA], NFC: [0x04DA], NFD: [0x04D8, 0x0308], NFKC: [0x04DA], NFKD: [0x04D8, 0x0308] }, +{ source: [0x04DB], NFC: [0x04DB], NFD: [0x04D9, 0x0308], NFKC: [0x04DB], NFKD: [0x04D9, 0x0308] }, +{ source: [0x04DC], NFC: [0x04DC], NFD: [0x0416, 0x0308], NFKC: [0x04DC], NFKD: [0x0416, 0x0308] }, +{ source: [0x04DD], NFC: [0x04DD], NFD: [0x0436, 0x0308], NFKC: [0x04DD], NFKD: [0x0436, 0x0308] }, +{ source: [0x04DE], NFC: [0x04DE], NFD: [0x0417, 0x0308], NFKC: [0x04DE], NFKD: [0x0417, 0x0308] }, +{ source: [0x04DF], NFC: [0x04DF], NFD: [0x0437, 0x0308], NFKC: [0x04DF], NFKD: [0x0437, 0x0308] }, +{ source: [0x04E2], NFC: [0x04E2], NFD: [0x0418, 0x0304], NFKC: [0x04E2], NFKD: [0x0418, 0x0304] }, +{ source: [0x04E3], NFC: [0x04E3], NFD: [0x0438, 0x0304], NFKC: [0x04E3], NFKD: [0x0438, 0x0304] }, +{ source: [0x04E4], NFC: [0x04E4], NFD: [0x0418, 0x0308], NFKC: [0x04E4], NFKD: [0x0418, 0x0308] }, +{ source: [0x04E5], NFC: [0x04E5], NFD: [0x0438, 0x0308], NFKC: [0x04E5], NFKD: [0x0438, 0x0308] }, +{ source: [0x04E6], NFC: [0x04E6], NFD: [0x041E, 0x0308], NFKC: [0x04E6], NFKD: [0x041E, 0x0308] }, +{ source: [0x04E7], NFC: [0x04E7], NFD: [0x043E, 0x0308], NFKC: [0x04E7], NFKD: [0x043E, 0x0308] }, +{ source: [0x04EA], NFC: [0x04EA], NFD: [0x04E8, 0x0308], NFKC: [0x04EA], NFKD: [0x04E8, 0x0308] }, +{ source: [0x04EB], NFC: [0x04EB], NFD: [0x04E9, 0x0308], NFKC: [0x04EB], NFKD: [0x04E9, 0x0308] }, +{ source: [0x04EC], NFC: [0x04EC], NFD: [0x042D, 0x0308], NFKC: [0x04EC], NFKD: [0x042D, 0x0308] }, +{ source: [0x04ED], NFC: [0x04ED], NFD: [0x044D, 0x0308], NFKC: [0x04ED], NFKD: [0x044D, 0x0308] }, +{ source: [0x04EE], NFC: [0x04EE], NFD: [0x0423, 0x0304], NFKC: [0x04EE], NFKD: [0x0423, 0x0304] }, +{ source: [0x04EF], NFC: [0x04EF], NFD: [0x0443, 0x0304], NFKC: [0x04EF], NFKD: [0x0443, 0x0304] }, +{ source: [0x04F0], NFC: [0x04F0], NFD: [0x0423, 0x0308], NFKC: [0x04F0], NFKD: [0x0423, 0x0308] }, +{ source: [0x04F1], NFC: [0x04F1], NFD: [0x0443, 0x0308], NFKC: [0x04F1], NFKD: [0x0443, 0x0308] }, +{ source: [0x04F2], NFC: [0x04F2], NFD: [0x0423, 0x030B], NFKC: [0x04F2], NFKD: [0x0423, 0x030B] }, +{ source: [0x04F3], NFC: [0x04F3], NFD: [0x0443, 0x030B], NFKC: [0x04F3], NFKD: [0x0443, 0x030B] }, +{ source: [0x04F4], NFC: [0x04F4], NFD: [0x0427, 0x0308], NFKC: [0x04F4], NFKD: [0x0427, 0x0308] }, +{ source: [0x04F5], NFC: [0x04F5], NFD: [0x0447, 0x0308], NFKC: [0x04F5], NFKD: [0x0447, 0x0308] }, +{ source: [0x04F8], NFC: [0x04F8], NFD: [0x042B, 0x0308], NFKC: [0x04F8], NFKD: [0x042B, 0x0308] }, +{ source: [0x04F9], NFC: [0x04F9], NFD: [0x044B, 0x0308], NFKC: [0x04F9], NFKD: [0x044B, 0x0308] }, +{ source: [0x0587], NFC: [0x0587], NFD: [0x0587], NFKC: [0x0565, 0x0582], NFKD: [0x0565, 0x0582] }, +{ source: [0x0622], NFC: [0x0622], NFD: [0x0627, 0x0653], NFKC: [0x0622], NFKD: [0x0627, 0x0653] }, +{ source: [0x0623], NFC: [0x0623], NFD: [0x0627, 0x0654], NFKC: [0x0623], NFKD: [0x0627, 0x0654] }, +{ source: [0x0624], NFC: [0x0624], NFD: [0x0648, 0x0654], NFKC: [0x0624], NFKD: [0x0648, 0x0654] }, +{ source: [0x0625], NFC: [0x0625], NFD: [0x0627, 0x0655], NFKC: [0x0625], NFKD: [0x0627, 0x0655] }, +{ source: [0x0626], NFC: [0x0626], NFD: [0x064A, 0x0654], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0x0675], NFC: [0x0675], NFD: [0x0675], NFKC: [0x0627, 0x0674], NFKD: [0x0627, 0x0674] }, +{ source: [0x0676], NFC: [0x0676], NFD: [0x0676], NFKC: [0x0648, 0x0674], NFKD: [0x0648, 0x0674] }, +{ source: [0x0677], NFC: [0x0677], NFD: [0x0677], NFKC: [0x06C7, 0x0674], NFKD: [0x06C7, 0x0674] }, +{ source: [0x0678], NFC: [0x0678], NFD: [0x0678], NFKC: [0x064A, 0x0674], NFKD: [0x064A, 0x0674] }, +{ source: [0x06C0], NFC: [0x06C0], NFD: [0x06D5, 0x0654], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] }, +{ source: [0x06C2], NFC: [0x06C2], NFD: [0x06C1, 0x0654], NFKC: [0x06C2], NFKD: [0x06C1, 0x0654] }, +{ source: [0x06D3], NFC: [0x06D3], NFD: [0x06D2, 0x0654], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] }, +{ source: [0x0929], NFC: [0x0929], NFD: [0x0928, 0x093C], NFKC: [0x0929], NFKD: [0x0928, 0x093C] }, +{ source: [0x0931], NFC: [0x0931], NFD: [0x0930, 0x093C], NFKC: [0x0931], NFKD: [0x0930, 0x093C] }, +{ source: [0x0934], NFC: [0x0934], NFD: [0x0933, 0x093C], NFKC: [0x0934], NFKD: [0x0933, 0x093C] }, +{ source: [0x0958], NFC: [0x0915, 0x093C], NFD: [0x0915, 0x093C], NFKC: [0x0915, 0x093C], NFKD: [0x0915, 0x093C] }, +{ source: [0x0959], NFC: [0x0916, 0x093C], NFD: [0x0916, 0x093C], NFKC: [0x0916, 0x093C], NFKD: [0x0916, 0x093C] }, +{ source: [0x095A], NFC: [0x0917, 0x093C], NFD: [0x0917, 0x093C], NFKC: [0x0917, 0x093C], NFKD: [0x0917, 0x093C] }, +{ source: [0x095B], NFC: [0x091C, 0x093C], NFD: [0x091C, 0x093C], NFKC: [0x091C, 0x093C], NFKD: [0x091C, 0x093C] }, +{ source: [0x095C], NFC: [0x0921, 0x093C], NFD: [0x0921, 0x093C], NFKC: [0x0921, 0x093C], NFKD: [0x0921, 0x093C] }, +{ source: [0x095D], NFC: [0x0922, 0x093C], NFD: [0x0922, 0x093C], NFKC: [0x0922, 0x093C], NFKD: [0x0922, 0x093C] }, +{ source: [0x095E], NFC: [0x092B, 0x093C], NFD: [0x092B, 0x093C], NFKC: [0x092B, 0x093C], NFKD: [0x092B, 0x093C] }, +{ source: [0x095F], NFC: [0x092F, 0x093C], NFD: [0x092F, 0x093C], NFKC: [0x092F, 0x093C], NFKD: [0x092F, 0x093C] }, +{ source: [0x09CB], NFC: [0x09CB], NFD: [0x09C7, 0x09BE], NFKC: [0x09CB], NFKD: [0x09C7, 0x09BE] }, +{ source: [0x09CC], NFC: [0x09CC], NFD: [0x09C7, 0x09D7], NFKC: [0x09CC], NFKD: [0x09C7, 0x09D7] }, +{ source: [0x09DC], NFC: [0x09A1, 0x09BC], NFD: [0x09A1, 0x09BC], NFKC: [0x09A1, 0x09BC], NFKD: [0x09A1, 0x09BC] }, +{ source: [0x09DD], NFC: [0x09A2, 0x09BC], NFD: [0x09A2, 0x09BC], NFKC: [0x09A2, 0x09BC], NFKD: [0x09A2, 0x09BC] }, +{ source: [0x09DF], NFC: [0x09AF, 0x09BC], NFD: [0x09AF, 0x09BC], NFKC: [0x09AF, 0x09BC], NFKD: [0x09AF, 0x09BC] }, +{ source: [0x0A33], NFC: [0x0A32, 0x0A3C], NFD: [0x0A32, 0x0A3C], NFKC: [0x0A32, 0x0A3C], NFKD: [0x0A32, 0x0A3C] }, +{ source: [0x0A36], NFC: [0x0A38, 0x0A3C], NFD: [0x0A38, 0x0A3C], NFKC: [0x0A38, 0x0A3C], NFKD: [0x0A38, 0x0A3C] }, +{ source: [0x0A59], NFC: [0x0A16, 0x0A3C], NFD: [0x0A16, 0x0A3C], NFKC: [0x0A16, 0x0A3C], NFKD: [0x0A16, 0x0A3C] }, +{ source: [0x0A5A], NFC: [0x0A17, 0x0A3C], NFD: [0x0A17, 0x0A3C], NFKC: [0x0A17, 0x0A3C], NFKD: [0x0A17, 0x0A3C] }, +{ source: [0x0A5B], NFC: [0x0A1C, 0x0A3C], NFD: [0x0A1C, 0x0A3C], NFKC: [0x0A1C, 0x0A3C], NFKD: [0x0A1C, 0x0A3C] }, +{ source: [0x0A5E], NFC: [0x0A2B, 0x0A3C], NFD: [0x0A2B, 0x0A3C], NFKC: [0x0A2B, 0x0A3C], NFKD: [0x0A2B, 0x0A3C] }, +{ source: [0x0B48], NFC: [0x0B48], NFD: [0x0B47, 0x0B56], NFKC: [0x0B48], NFKD: [0x0B47, 0x0B56] }, +{ source: [0x0B4B], NFC: [0x0B4B], NFD: [0x0B47, 0x0B3E], NFKC: [0x0B4B], NFKD: [0x0B47, 0x0B3E] }, +{ source: [0x0B4C], NFC: [0x0B4C], NFD: [0x0B47, 0x0B57], NFKC: [0x0B4C], NFKD: [0x0B47, 0x0B57] }, +{ source: [0x0B5C], NFC: [0x0B21, 0x0B3C], NFD: [0x0B21, 0x0B3C], NFKC: [0x0B21, 0x0B3C], NFKD: [0x0B21, 0x0B3C] }, +{ source: [0x0B5D], NFC: [0x0B22, 0x0B3C], NFD: [0x0B22, 0x0B3C], NFKC: [0x0B22, 0x0B3C], NFKD: [0x0B22, 0x0B3C] }, +{ source: [0x0B94], NFC: [0x0B94], NFD: [0x0B92, 0x0BD7], NFKC: [0x0B94], NFKD: [0x0B92, 0x0BD7] }, +{ source: [0x0BCA], NFC: [0x0BCA], NFD: [0x0BC6, 0x0BBE], NFKC: [0x0BCA], NFKD: [0x0BC6, 0x0BBE] }, +{ source: [0x0BCB], NFC: [0x0BCB], NFD: [0x0BC7, 0x0BBE], NFKC: [0x0BCB], NFKD: [0x0BC7, 0x0BBE] }, +{ source: [0x0BCC], NFC: [0x0BCC], NFD: [0x0BC6, 0x0BD7], NFKC: [0x0BCC], NFKD: [0x0BC6, 0x0BD7] }, +{ source: [0x0C48], NFC: [0x0C48], NFD: [0x0C46, 0x0C56], NFKC: [0x0C48], NFKD: [0x0C46, 0x0C56] }, +{ source: [0x0CC0], NFC: [0x0CC0], NFD: [0x0CBF, 0x0CD5], NFKC: [0x0CC0], NFKD: [0x0CBF, 0x0CD5] }, +{ source: [0x0CC7], NFC: [0x0CC7], NFD: [0x0CC6, 0x0CD5], NFKC: [0x0CC7], NFKD: [0x0CC6, 0x0CD5] }, +{ source: [0x0CC8], NFC: [0x0CC8], NFD: [0x0CC6, 0x0CD6], NFKC: [0x0CC8], NFKD: [0x0CC6, 0x0CD6] }, +{ source: [0x0CCA], NFC: [0x0CCA], NFD: [0x0CC6, 0x0CC2], NFKC: [0x0CCA], NFKD: [0x0CC6, 0x0CC2] }, +{ source: [0x0CCB], NFC: [0x0CCB], NFD: [0x0CC6, 0x0CC2, 0x0CD5], NFKC: [0x0CCB], NFKD: [0x0CC6, 0x0CC2, 0x0CD5] }, +{ source: [0x0D4A], NFC: [0x0D4A], NFD: [0x0D46, 0x0D3E], NFKC: [0x0D4A], NFKD: [0x0D46, 0x0D3E] }, +{ source: [0x0D4B], NFC: [0x0D4B], NFD: [0x0D47, 0x0D3E], NFKC: [0x0D4B], NFKD: [0x0D47, 0x0D3E] }, +{ source: [0x0D4C], NFC: [0x0D4C], NFD: [0x0D46, 0x0D57], NFKC: [0x0D4C], NFKD: [0x0D46, 0x0D57] }, +{ source: [0x0DDA], NFC: [0x0DDA], NFD: [0x0DD9, 0x0DCA], NFKC: [0x0DDA], NFKD: [0x0DD9, 0x0DCA] }, +{ source: [0x0DDC], NFC: [0x0DDC], NFD: [0x0DD9, 0x0DCF], NFKC: [0x0DDC], NFKD: [0x0DD9, 0x0DCF] }, +{ source: [0x0DDD], NFC: [0x0DDD], NFD: [0x0DD9, 0x0DCF, 0x0DCA], NFKC: [0x0DDD], NFKD: [0x0DD9, 0x0DCF, 0x0DCA] }, +{ source: [0x0DDE], NFC: [0x0DDE], NFD: [0x0DD9, 0x0DDF], NFKC: [0x0DDE], NFKD: [0x0DD9, 0x0DDF] }, +{ source: [0x0E33], NFC: [0x0E33], NFD: [0x0E33], NFKC: [0x0E4D, 0x0E32], NFKD: [0x0E4D, 0x0E32] }, +{ source: [0x0EB3], NFC: [0x0EB3], NFD: [0x0EB3], NFKC: [0x0ECD, 0x0EB2], NFKD: [0x0ECD, 0x0EB2] }, +{ source: [0x0EDC], NFC: [0x0EDC], NFD: [0x0EDC], NFKC: [0x0EAB, 0x0E99], NFKD: [0x0EAB, 0x0E99] }, +{ source: [0x0EDD], NFC: [0x0EDD], NFD: [0x0EDD], NFKC: [0x0EAB, 0x0EA1], NFKD: [0x0EAB, 0x0EA1] }, +{ source: [0x0F0C], NFC: [0x0F0C], NFD: [0x0F0C], NFKC: [0x0F0B], NFKD: [0x0F0B] }, +{ source: [0x0F43], NFC: [0x0F42, 0x0FB7], NFD: [0x0F42, 0x0FB7], NFKC: [0x0F42, 0x0FB7], NFKD: [0x0F42, 0x0FB7] }, +{ source: [0x0F4D], NFC: [0x0F4C, 0x0FB7], NFD: [0x0F4C, 0x0FB7], NFKC: [0x0F4C, 0x0FB7], NFKD: [0x0F4C, 0x0FB7] }, +{ source: [0x0F52], NFC: [0x0F51, 0x0FB7], NFD: [0x0F51, 0x0FB7], NFKC: [0x0F51, 0x0FB7], NFKD: [0x0F51, 0x0FB7] }, +{ source: [0x0F57], NFC: [0x0F56, 0x0FB7], NFD: [0x0F56, 0x0FB7], NFKC: [0x0F56, 0x0FB7], NFKD: [0x0F56, 0x0FB7] }, +{ source: [0x0F5C], NFC: [0x0F5B, 0x0FB7], NFD: [0x0F5B, 0x0FB7], NFKC: [0x0F5B, 0x0FB7], NFKD: [0x0F5B, 0x0FB7] }, +{ source: [0x0F69], NFC: [0x0F40, 0x0FB5], NFD: [0x0F40, 0x0FB5], NFKC: [0x0F40, 0x0FB5], NFKD: [0x0F40, 0x0FB5] }, +{ source: [0x0F73], NFC: [0x0F71, 0x0F72], NFD: [0x0F71, 0x0F72], NFKC: [0x0F71, 0x0F72], NFKD: [0x0F71, 0x0F72] }, +{ source: [0x0F75], NFC: [0x0F71, 0x0F74], NFD: [0x0F71, 0x0F74], NFKC: [0x0F71, 0x0F74], NFKD: [0x0F71, 0x0F74] }, +{ source: [0x0F76], NFC: [0x0FB2, 0x0F80], NFD: [0x0FB2, 0x0F80], NFKC: [0x0FB2, 0x0F80], NFKD: [0x0FB2, 0x0F80] }, +{ source: [0x0F77], NFC: [0x0F77], NFD: [0x0F77], NFKC: [0x0FB2, 0x0F71, 0x0F80], NFKD: [0x0FB2, 0x0F71, 0x0F80] }, +{ source: [0x0F78], NFC: [0x0FB3, 0x0F80], NFD: [0x0FB3, 0x0F80], NFKC: [0x0FB3, 0x0F80], NFKD: [0x0FB3, 0x0F80] }, +{ source: [0x0F79], NFC: [0x0F79], NFD: [0x0F79], NFKC: [0x0FB3, 0x0F71, 0x0F80], NFKD: [0x0FB3, 0x0F71, 0x0F80] }, +{ source: [0x0F81], NFC: [0x0F71, 0x0F80], NFD: [0x0F71, 0x0F80], NFKC: [0x0F71, 0x0F80], NFKD: [0x0F71, 0x0F80] }, +{ source: [0x0F93], NFC: [0x0F92, 0x0FB7], NFD: [0x0F92, 0x0FB7], NFKC: [0x0F92, 0x0FB7], NFKD: [0x0F92, 0x0FB7] }, +{ source: [0x0F9D], NFC: [0x0F9C, 0x0FB7], NFD: [0x0F9C, 0x0FB7], NFKC: [0x0F9C, 0x0FB7], NFKD: [0x0F9C, 0x0FB7] }, +{ source: [0x0FA2], NFC: [0x0FA1, 0x0FB7], NFD: [0x0FA1, 0x0FB7], NFKC: [0x0FA1, 0x0FB7], NFKD: [0x0FA1, 0x0FB7] }, +{ source: [0x0FA7], NFC: [0x0FA6, 0x0FB7], NFD: [0x0FA6, 0x0FB7], NFKC: [0x0FA6, 0x0FB7], NFKD: [0x0FA6, 0x0FB7] }, +{ source: [0x0FAC], NFC: [0x0FAB, 0x0FB7], NFD: [0x0FAB, 0x0FB7], NFKC: [0x0FAB, 0x0FB7], NFKD: [0x0FAB, 0x0FB7] }, +{ source: [0x0FB9], NFC: [0x0F90, 0x0FB5], NFD: [0x0F90, 0x0FB5], NFKC: [0x0F90, 0x0FB5], NFKD: [0x0F90, 0x0FB5] }, +{ source: [0x1026], NFC: [0x1026], NFD: [0x1025, 0x102E], NFKC: [0x1026], NFKD: [0x1025, 0x102E] }, +{ source: [0x10FC], NFC: [0x10FC], NFD: [0x10FC], NFKC: [0x10DC], NFKD: [0x10DC] }, +{ source: [0x1B06], NFC: [0x1B06], NFD: [0x1B05, 0x1B35], NFKC: [0x1B06], NFKD: [0x1B05, 0x1B35] }, +{ source: [0x1B08], NFC: [0x1B08], NFD: [0x1B07, 0x1B35], NFKC: [0x1B08], NFKD: [0x1B07, 0x1B35] }, +{ source: [0x1B0A], NFC: [0x1B0A], NFD: [0x1B09, 0x1B35], NFKC: [0x1B0A], NFKD: [0x1B09, 0x1B35] }, +{ source: [0x1B0C], NFC: [0x1B0C], NFD: [0x1B0B, 0x1B35], NFKC: [0x1B0C], NFKD: [0x1B0B, 0x1B35] }, +{ source: [0x1B0E], NFC: [0x1B0E], NFD: [0x1B0D, 0x1B35], NFKC: [0x1B0E], NFKD: [0x1B0D, 0x1B35] }, +{ source: [0x1B12], NFC: [0x1B12], NFD: [0x1B11, 0x1B35], NFKC: [0x1B12], NFKD: [0x1B11, 0x1B35] }, +{ source: [0x1B3B], NFC: [0x1B3B], NFD: [0x1B3A, 0x1B35], NFKC: [0x1B3B], NFKD: [0x1B3A, 0x1B35] }, +{ source: [0x1B3D], NFC: [0x1B3D], NFD: [0x1B3C, 0x1B35], NFKC: [0x1B3D], NFKD: [0x1B3C, 0x1B35] }, +{ source: [0x1B40], NFC: [0x1B40], NFD: [0x1B3E, 0x1B35], NFKC: [0x1B40], NFKD: [0x1B3E, 0x1B35] }, +{ source: [0x1B41], NFC: [0x1B41], NFD: [0x1B3F, 0x1B35], NFKC: [0x1B41], NFKD: [0x1B3F, 0x1B35] }, +{ source: [0x1B43], NFC: [0x1B43], NFD: [0x1B42, 0x1B35], NFKC: [0x1B43], NFKD: [0x1B42, 0x1B35] }, +{ source: [0x1D2C], NFC: [0x1D2C], NFD: [0x1D2C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D2D], NFC: [0x1D2D], NFD: [0x1D2D], NFKC: [0x00C6], NFKD: [0x00C6] }, +{ source: [0x1D2E], NFC: [0x1D2E], NFD: [0x1D2E], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D30], NFC: [0x1D30], NFD: [0x1D30], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D31], NFC: [0x1D31], NFD: [0x1D31], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D32], NFC: [0x1D32], NFD: [0x1D32], NFKC: [0x018E], NFKD: [0x018E] }, +{ source: [0x1D33], NFC: [0x1D33], NFD: [0x1D33], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D34], NFC: [0x1D34], NFD: [0x1D34], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D35], NFC: [0x1D35], NFD: [0x1D35], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D36], NFC: [0x1D36], NFD: [0x1D36], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D37], NFC: [0x1D37], NFD: [0x1D37], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D38], NFC: [0x1D38], NFD: [0x1D38], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D39], NFC: [0x1D39], NFD: [0x1D39], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D3A], NFC: [0x1D3A], NFD: [0x1D3A], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D3C], NFC: [0x1D3C], NFD: [0x1D3C], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D3D], NFC: [0x1D3D], NFD: [0x1D3D], NFKC: [0x0222], NFKD: [0x0222] }, +{ source: [0x1D3E], NFC: [0x1D3E], NFD: [0x1D3E], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D3F], NFC: [0x1D3F], NFD: [0x1D3F], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D40], NFC: [0x1D40], NFD: [0x1D40], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D41], NFC: [0x1D41], NFD: [0x1D41], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D42], NFC: [0x1D42], NFD: [0x1D42], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D43], NFC: [0x1D43], NFD: [0x1D43], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D44], NFC: [0x1D44], NFD: [0x1D44], NFKC: [0x0250], NFKD: [0x0250] }, +{ source: [0x1D45], NFC: [0x1D45], NFD: [0x1D45], NFKC: [0x0251], NFKD: [0x0251] }, +{ source: [0x1D46], NFC: [0x1D46], NFD: [0x1D46], NFKC: [0x1D02], NFKD: [0x1D02] }, +{ source: [0x1D47], NFC: [0x1D47], NFD: [0x1D47], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D48], NFC: [0x1D48], NFD: [0x1D48], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D49], NFC: [0x1D49], NFD: [0x1D49], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D4A], NFC: [0x1D4A], NFD: [0x1D4A], NFKC: [0x0259], NFKD: [0x0259] }, +{ source: [0x1D4B], NFC: [0x1D4B], NFD: [0x1D4B], NFKC: [0x025B], NFKD: [0x025B] }, +{ source: [0x1D4C], NFC: [0x1D4C], NFD: [0x1D4C], NFKC: [0x025C], NFKD: [0x025C] }, +{ source: [0x1D4D], NFC: [0x1D4D], NFD: [0x1D4D], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D4F], NFC: [0x1D4F], NFD: [0x1D4F], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D50], NFC: [0x1D50], NFD: [0x1D50], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D51], NFC: [0x1D51], NFD: [0x1D51], NFKC: [0x014B], NFKD: [0x014B] }, +{ source: [0x1D52], NFC: [0x1D52], NFD: [0x1D52], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D53], NFC: [0x1D53], NFD: [0x1D53], NFKC: [0x0254], NFKD: [0x0254] }, +{ source: [0x1D54], NFC: [0x1D54], NFD: [0x1D54], NFKC: [0x1D16], NFKD: [0x1D16] }, +{ source: [0x1D55], NFC: [0x1D55], NFD: [0x1D55], NFKC: [0x1D17], NFKD: [0x1D17] }, +{ source: [0x1D56], NFC: [0x1D56], NFD: [0x1D56], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D57], NFC: [0x1D57], NFD: [0x1D57], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D58], NFC: [0x1D58], NFD: [0x1D58], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D59], NFC: [0x1D59], NFD: [0x1D59], NFKC: [0x1D1D], NFKD: [0x1D1D] }, +{ source: [0x1D5A], NFC: [0x1D5A], NFD: [0x1D5A], NFKC: [0x026F], NFKD: [0x026F] }, +{ source: [0x1D5B], NFC: [0x1D5B], NFD: [0x1D5B], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D5C], NFC: [0x1D5C], NFD: [0x1D5C], NFKC: [0x1D25], NFKD: [0x1D25] }, +{ source: [0x1D5D], NFC: [0x1D5D], NFD: [0x1D5D], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D5E], NFC: [0x1D5E], NFD: [0x1D5E], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D5F], NFC: [0x1D5F], NFD: [0x1D5F], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D60], NFC: [0x1D60], NFD: [0x1D60], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D61], NFC: [0x1D61], NFD: [0x1D61], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D62], NFC: [0x1D62], NFD: [0x1D62], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D63], NFC: [0x1D63], NFD: [0x1D63], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D64], NFC: [0x1D64], NFD: [0x1D64], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D65], NFC: [0x1D65], NFD: [0x1D65], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D66], NFC: [0x1D66], NFD: [0x1D66], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D67], NFC: [0x1D67], NFD: [0x1D67], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D68], NFC: [0x1D68], NFD: [0x1D68], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D69], NFC: [0x1D69], NFD: [0x1D69], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D6A], NFC: [0x1D6A], NFD: [0x1D6A], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D78], NFC: [0x1D78], NFD: [0x1D78], NFKC: [0x043D], NFKD: [0x043D] }, +{ source: [0x1D9B], NFC: [0x1D9B], NFD: [0x1D9B], NFKC: [0x0252], NFKD: [0x0252] }, +{ source: [0x1D9C], NFC: [0x1D9C], NFD: [0x1D9C], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D9D], NFC: [0x1D9D], NFD: [0x1D9D], NFKC: [0x0255], NFKD: [0x0255] }, +{ source: [0x1D9E], NFC: [0x1D9E], NFD: [0x1D9E], NFKC: [0x00F0], NFKD: [0x00F0] }, +{ source: [0x1D9F], NFC: [0x1D9F], NFD: [0x1D9F], NFKC: [0x025C], NFKD: [0x025C] }, +{ source: [0x1DA0], NFC: [0x1DA0], NFD: [0x1DA0], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1DA1], NFC: [0x1DA1], NFD: [0x1DA1], NFKC: [0x025F], NFKD: [0x025F] }, +{ source: [0x1DA2], NFC: [0x1DA2], NFD: [0x1DA2], NFKC: [0x0261], NFKD: [0x0261] }, +{ source: [0x1DA3], NFC: [0x1DA3], NFD: [0x1DA3], NFKC: [0x0265], NFKD: [0x0265] }, +{ source: [0x1DA4], NFC: [0x1DA4], NFD: [0x1DA4], NFKC: [0x0268], NFKD: [0x0268] }, +{ source: [0x1DA5], NFC: [0x1DA5], NFD: [0x1DA5], NFKC: [0x0269], NFKD: [0x0269] }, +{ source: [0x1DA6], NFC: [0x1DA6], NFD: [0x1DA6], NFKC: [0x026A], NFKD: [0x026A] }, +{ source: [0x1DA7], NFC: [0x1DA7], NFD: [0x1DA7], NFKC: [0x1D7B], NFKD: [0x1D7B] }, +{ source: [0x1DA8], NFC: [0x1DA8], NFD: [0x1DA8], NFKC: [0x029D], NFKD: [0x029D] }, +{ source: [0x1DA9], NFC: [0x1DA9], NFD: [0x1DA9], NFKC: [0x026D], NFKD: [0x026D] }, +{ source: [0x1DAA], NFC: [0x1DAA], NFD: [0x1DAA], NFKC: [0x1D85], NFKD: [0x1D85] }, +{ source: [0x1DAB], NFC: [0x1DAB], NFD: [0x1DAB], NFKC: [0x029F], NFKD: [0x029F] }, +{ source: [0x1DAC], NFC: [0x1DAC], NFD: [0x1DAC], NFKC: [0x0271], NFKD: [0x0271] }, +{ source: [0x1DAD], NFC: [0x1DAD], NFD: [0x1DAD], NFKC: [0x0270], NFKD: [0x0270] }, +{ source: [0x1DAE], NFC: [0x1DAE], NFD: [0x1DAE], NFKC: [0x0272], NFKD: [0x0272] }, +{ source: [0x1DAF], NFC: [0x1DAF], NFD: [0x1DAF], NFKC: [0x0273], NFKD: [0x0273] }, +{ source: [0x1DB0], NFC: [0x1DB0], NFD: [0x1DB0], NFKC: [0x0274], NFKD: [0x0274] }, +{ source: [0x1DB1], NFC: [0x1DB1], NFD: [0x1DB1], NFKC: [0x0275], NFKD: [0x0275] }, +{ source: [0x1DB2], NFC: [0x1DB2], NFD: [0x1DB2], NFKC: [0x0278], NFKD: [0x0278] }, +{ source: [0x1DB3], NFC: [0x1DB3], NFD: [0x1DB3], NFKC: [0x0282], NFKD: [0x0282] }, +{ source: [0x1DB4], NFC: [0x1DB4], NFD: [0x1DB4], NFKC: [0x0283], NFKD: [0x0283] }, +{ source: [0x1DB5], NFC: [0x1DB5], NFD: [0x1DB5], NFKC: [0x01AB], NFKD: [0x01AB] }, +{ source: [0x1DB6], NFC: [0x1DB6], NFD: [0x1DB6], NFKC: [0x0289], NFKD: [0x0289] }, +{ source: [0x1DB7], NFC: [0x1DB7], NFD: [0x1DB7], NFKC: [0x028A], NFKD: [0x028A] }, +{ source: [0x1DB8], NFC: [0x1DB8], NFD: [0x1DB8], NFKC: [0x1D1C], NFKD: [0x1D1C] }, +{ source: [0x1DB9], NFC: [0x1DB9], NFD: [0x1DB9], NFKC: [0x028B], NFKD: [0x028B] }, +{ source: [0x1DBA], NFC: [0x1DBA], NFD: [0x1DBA], NFKC: [0x028C], NFKD: [0x028C] }, +{ source: [0x1DBB], NFC: [0x1DBB], NFD: [0x1DBB], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1DBC], NFC: [0x1DBC], NFD: [0x1DBC], NFKC: [0x0290], NFKD: [0x0290] }, +{ source: [0x1DBD], NFC: [0x1DBD], NFD: [0x1DBD], NFKC: [0x0291], NFKD: [0x0291] }, +{ source: [0x1DBE], NFC: [0x1DBE], NFD: [0x1DBE], NFKC: [0x0292], NFKD: [0x0292] }, +{ source: [0x1DBF], NFC: [0x1DBF], NFD: [0x1DBF], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1E00], NFC: [0x1E00], NFD: [0x0041, 0x0325], NFKC: [0x1E00], NFKD: [0x0041, 0x0325] }, +{ source: [0x1E01], NFC: [0x1E01], NFD: [0x0061, 0x0325], NFKC: [0x1E01], NFKD: [0x0061, 0x0325] }, +{ source: [0x1E02], NFC: [0x1E02], NFD: [0x0042, 0x0307], NFKC: [0x1E02], NFKD: [0x0042, 0x0307] }, +{ source: [0x1E03], NFC: [0x1E03], NFD: [0x0062, 0x0307], NFKC: [0x1E03], NFKD: [0x0062, 0x0307] }, +{ source: [0x1E04], NFC: [0x1E04], NFD: [0x0042, 0x0323], NFKC: [0x1E04], NFKD: [0x0042, 0x0323] }, +{ source: [0x1E05], NFC: [0x1E05], NFD: [0x0062, 0x0323], NFKC: [0x1E05], NFKD: [0x0062, 0x0323] }, +{ source: [0x1E06], NFC: [0x1E06], NFD: [0x0042, 0x0331], NFKC: [0x1E06], NFKD: [0x0042, 0x0331] }, +{ source: [0x1E07], NFC: [0x1E07], NFD: [0x0062, 0x0331], NFKC: [0x1E07], NFKD: [0x0062, 0x0331] }, +{ source: [0x1E08], NFC: [0x1E08], NFD: [0x0043, 0x0327, 0x0301], NFKC: [0x1E08], NFKD: [0x0043, 0x0327, 0x0301] }, +{ source: [0x1E09], NFC: [0x1E09], NFD: [0x0063, 0x0327, 0x0301], NFKC: [0x1E09], NFKD: [0x0063, 0x0327, 0x0301] }, +{ source: [0x1E0A], NFC: [0x1E0A], NFD: [0x0044, 0x0307], NFKC: [0x1E0A], NFKD: [0x0044, 0x0307] }, +{ source: [0x1E0B], NFC: [0x1E0B], NFD: [0x0064, 0x0307], NFKC: [0x1E0B], NFKD: [0x0064, 0x0307] }, +{ source: [0x1E0C], NFC: [0x1E0C], NFD: [0x0044, 0x0323], NFKC: [0x1E0C], NFKD: [0x0044, 0x0323] }, +{ source: [0x1E0D], NFC: [0x1E0D], NFD: [0x0064, 0x0323], NFKC: [0x1E0D], NFKD: [0x0064, 0x0323] }, +{ source: [0x1E0E], NFC: [0x1E0E], NFD: [0x0044, 0x0331], NFKC: [0x1E0E], NFKD: [0x0044, 0x0331] }, +{ source: [0x1E0F], NFC: [0x1E0F], NFD: [0x0064, 0x0331], NFKC: [0x1E0F], NFKD: [0x0064, 0x0331] }, +{ source: [0x1E10], NFC: [0x1E10], NFD: [0x0044, 0x0327], NFKC: [0x1E10], NFKD: [0x0044, 0x0327] }, +{ source: [0x1E11], NFC: [0x1E11], NFD: [0x0064, 0x0327], NFKC: [0x1E11], NFKD: [0x0064, 0x0327] }, +{ source: [0x1E12], NFC: [0x1E12], NFD: [0x0044, 0x032D], NFKC: [0x1E12], NFKD: [0x0044, 0x032D] }, +{ source: [0x1E13], NFC: [0x1E13], NFD: [0x0064, 0x032D], NFKC: [0x1E13], NFKD: [0x0064, 0x032D] }, +{ source: [0x1E14], NFC: [0x1E14], NFD: [0x0045, 0x0304, 0x0300], NFKC: [0x1E14], NFKD: [0x0045, 0x0304, 0x0300] }, +{ source: [0x1E15], NFC: [0x1E15], NFD: [0x0065, 0x0304, 0x0300], NFKC: [0x1E15], NFKD: [0x0065, 0x0304, 0x0300] }, +{ source: [0x1E16], NFC: [0x1E16], NFD: [0x0045, 0x0304, 0x0301], NFKC: [0x1E16], NFKD: [0x0045, 0x0304, 0x0301] }, +{ source: [0x1E17], NFC: [0x1E17], NFD: [0x0065, 0x0304, 0x0301], NFKC: [0x1E17], NFKD: [0x0065, 0x0304, 0x0301] }, +{ source: [0x1E18], NFC: [0x1E18], NFD: [0x0045, 0x032D], NFKC: [0x1E18], NFKD: [0x0045, 0x032D] }, +{ source: [0x1E19], NFC: [0x1E19], NFD: [0x0065, 0x032D], NFKC: [0x1E19], NFKD: [0x0065, 0x032D] }, +{ source: [0x1E1A], NFC: [0x1E1A], NFD: [0x0045, 0x0330], NFKC: [0x1E1A], NFKD: [0x0045, 0x0330] }, +{ source: [0x1E1B], NFC: [0x1E1B], NFD: [0x0065, 0x0330], NFKC: [0x1E1B], NFKD: [0x0065, 0x0330] }, +{ source: [0x1E1C], NFC: [0x1E1C], NFD: [0x0045, 0x0327, 0x0306], NFKC: [0x1E1C], NFKD: [0x0045, 0x0327, 0x0306] }, +{ source: [0x1E1D], NFC: [0x1E1D], NFD: [0x0065, 0x0327, 0x0306], NFKC: [0x1E1D], NFKD: [0x0065, 0x0327, 0x0306] }, +{ source: [0x1E1E], NFC: [0x1E1E], NFD: [0x0046, 0x0307], NFKC: [0x1E1E], NFKD: [0x0046, 0x0307] }, +{ source: [0x1E1F], NFC: [0x1E1F], NFD: [0x0066, 0x0307], NFKC: [0x1E1F], NFKD: [0x0066, 0x0307] }, +{ source: [0x1E20], NFC: [0x1E20], NFD: [0x0047, 0x0304], NFKC: [0x1E20], NFKD: [0x0047, 0x0304] }, +{ source: [0x1E21], NFC: [0x1E21], NFD: [0x0067, 0x0304], NFKC: [0x1E21], NFKD: [0x0067, 0x0304] }, +{ source: [0x1E22], NFC: [0x1E22], NFD: [0x0048, 0x0307], NFKC: [0x1E22], NFKD: [0x0048, 0x0307] }, +{ source: [0x1E23], NFC: [0x1E23], NFD: [0x0068, 0x0307], NFKC: [0x1E23], NFKD: [0x0068, 0x0307] }, +{ source: [0x1E24], NFC: [0x1E24], NFD: [0x0048, 0x0323], NFKC: [0x1E24], NFKD: [0x0048, 0x0323] }, +{ source: [0x1E25], NFC: [0x1E25], NFD: [0x0068, 0x0323], NFKC: [0x1E25], NFKD: [0x0068, 0x0323] }, +{ source: [0x1E26], NFC: [0x1E26], NFD: [0x0048, 0x0308], NFKC: [0x1E26], NFKD: [0x0048, 0x0308] }, +{ source: [0x1E27], NFC: [0x1E27], NFD: [0x0068, 0x0308], NFKC: [0x1E27], NFKD: [0x0068, 0x0308] }, +{ source: [0x1E28], NFC: [0x1E28], NFD: [0x0048, 0x0327], NFKC: [0x1E28], NFKD: [0x0048, 0x0327] }, +{ source: [0x1E29], NFC: [0x1E29], NFD: [0x0068, 0x0327], NFKC: [0x1E29], NFKD: [0x0068, 0x0327] }, +{ source: [0x1E2A], NFC: [0x1E2A], NFD: [0x0048, 0x032E], NFKC: [0x1E2A], NFKD: [0x0048, 0x032E] }, +{ source: [0x1E2B], NFC: [0x1E2B], NFD: [0x0068, 0x032E], NFKC: [0x1E2B], NFKD: [0x0068, 0x032E] }, +{ source: [0x1E2C], NFC: [0x1E2C], NFD: [0x0049, 0x0330], NFKC: [0x1E2C], NFKD: [0x0049, 0x0330] }, +{ source: [0x1E2D], NFC: [0x1E2D], NFD: [0x0069, 0x0330], NFKC: [0x1E2D], NFKD: [0x0069, 0x0330] }, +{ source: [0x1E2E], NFC: [0x1E2E], NFD: [0x0049, 0x0308, 0x0301], NFKC: [0x1E2E], NFKD: [0x0049, 0x0308, 0x0301] }, +{ source: [0x1E2F], NFC: [0x1E2F], NFD: [0x0069, 0x0308, 0x0301], NFKC: [0x1E2F], NFKD: [0x0069, 0x0308, 0x0301] }, +{ source: [0x1E30], NFC: [0x1E30], NFD: [0x004B, 0x0301], NFKC: [0x1E30], NFKD: [0x004B, 0x0301] }, +{ source: [0x1E31], NFC: [0x1E31], NFD: [0x006B, 0x0301], NFKC: [0x1E31], NFKD: [0x006B, 0x0301] }, +{ source: [0x1E32], NFC: [0x1E32], NFD: [0x004B, 0x0323], NFKC: [0x1E32], NFKD: [0x004B, 0x0323] }, +{ source: [0x1E33], NFC: [0x1E33], NFD: [0x006B, 0x0323], NFKC: [0x1E33], NFKD: [0x006B, 0x0323] }, +{ source: [0x1E34], NFC: [0x1E34], NFD: [0x004B, 0x0331], NFKC: [0x1E34], NFKD: [0x004B, 0x0331] }, +{ source: [0x1E35], NFC: [0x1E35], NFD: [0x006B, 0x0331], NFKC: [0x1E35], NFKD: [0x006B, 0x0331] }, +{ source: [0x1E36], NFC: [0x1E36], NFD: [0x004C, 0x0323], NFKC: [0x1E36], NFKD: [0x004C, 0x0323] }, +{ source: [0x1E37], NFC: [0x1E37], NFD: [0x006C, 0x0323], NFKC: [0x1E37], NFKD: [0x006C, 0x0323] }, +{ source: [0x1E38], NFC: [0x1E38], NFD: [0x004C, 0x0323, 0x0304], NFKC: [0x1E38], NFKD: [0x004C, 0x0323, 0x0304] }, +{ source: [0x1E39], NFC: [0x1E39], NFD: [0x006C, 0x0323, 0x0304], NFKC: [0x1E39], NFKD: [0x006C, 0x0323, 0x0304] }, +{ source: [0x1E3A], NFC: [0x1E3A], NFD: [0x004C, 0x0331], NFKC: [0x1E3A], NFKD: [0x004C, 0x0331] }, +{ source: [0x1E3B], NFC: [0x1E3B], NFD: [0x006C, 0x0331], NFKC: [0x1E3B], NFKD: [0x006C, 0x0331] }, +{ source: [0x1E3C], NFC: [0x1E3C], NFD: [0x004C, 0x032D], NFKC: [0x1E3C], NFKD: [0x004C, 0x032D] }, +{ source: [0x1E3D], NFC: [0x1E3D], NFD: [0x006C, 0x032D], NFKC: [0x1E3D], NFKD: [0x006C, 0x032D] }, +{ source: [0x1E3E], NFC: [0x1E3E], NFD: [0x004D, 0x0301], NFKC: [0x1E3E], NFKD: [0x004D, 0x0301] }, +{ source: [0x1E3F], NFC: [0x1E3F], NFD: [0x006D, 0x0301], NFKC: [0x1E3F], NFKD: [0x006D, 0x0301] }, +{ source: [0x1E40], NFC: [0x1E40], NFD: [0x004D, 0x0307], NFKC: [0x1E40], NFKD: [0x004D, 0x0307] }, +{ source: [0x1E41], NFC: [0x1E41], NFD: [0x006D, 0x0307], NFKC: [0x1E41], NFKD: [0x006D, 0x0307] }, +{ source: [0x1E42], NFC: [0x1E42], NFD: [0x004D, 0x0323], NFKC: [0x1E42], NFKD: [0x004D, 0x0323] }, +{ source: [0x1E43], NFC: [0x1E43], NFD: [0x006D, 0x0323], NFKC: [0x1E43], NFKD: [0x006D, 0x0323] }, +{ source: [0x1E44], NFC: [0x1E44], NFD: [0x004E, 0x0307], NFKC: [0x1E44], NFKD: [0x004E, 0x0307] }, +{ source: [0x1E45], NFC: [0x1E45], NFD: [0x006E, 0x0307], NFKC: [0x1E45], NFKD: [0x006E, 0x0307] }, +{ source: [0x1E46], NFC: [0x1E46], NFD: [0x004E, 0x0323], NFKC: [0x1E46], NFKD: [0x004E, 0x0323] }, +{ source: [0x1E47], NFC: [0x1E47], NFD: [0x006E, 0x0323], NFKC: [0x1E47], NFKD: [0x006E, 0x0323] }, +{ source: [0x1E48], NFC: [0x1E48], NFD: [0x004E, 0x0331], NFKC: [0x1E48], NFKD: [0x004E, 0x0331] }, +{ source: [0x1E49], NFC: [0x1E49], NFD: [0x006E, 0x0331], NFKC: [0x1E49], NFKD: [0x006E, 0x0331] }, +{ source: [0x1E4A], NFC: [0x1E4A], NFD: [0x004E, 0x032D], NFKC: [0x1E4A], NFKD: [0x004E, 0x032D] }, +{ source: [0x1E4B], NFC: [0x1E4B], NFD: [0x006E, 0x032D], NFKC: [0x1E4B], NFKD: [0x006E, 0x032D] }, +{ source: [0x1E4C], NFC: [0x1E4C], NFD: [0x004F, 0x0303, 0x0301], NFKC: [0x1E4C], NFKD: [0x004F, 0x0303, 0x0301] }, +{ source: [0x1E4D], NFC: [0x1E4D], NFD: [0x006F, 0x0303, 0x0301], NFKC: [0x1E4D], NFKD: [0x006F, 0x0303, 0x0301] }, +{ source: [0x1E4E], NFC: [0x1E4E], NFD: [0x004F, 0x0303, 0x0308], NFKC: [0x1E4E], NFKD: [0x004F, 0x0303, 0x0308] }, +{ source: [0x1E4F], NFC: [0x1E4F], NFD: [0x006F, 0x0303, 0x0308], NFKC: [0x1E4F], NFKD: [0x006F, 0x0303, 0x0308] }, +{ source: [0x1E50], NFC: [0x1E50], NFD: [0x004F, 0x0304, 0x0300], NFKC: [0x1E50], NFKD: [0x004F, 0x0304, 0x0300] }, +{ source: [0x1E51], NFC: [0x1E51], NFD: [0x006F, 0x0304, 0x0300], NFKC: [0x1E51], NFKD: [0x006F, 0x0304, 0x0300] }, +{ source: [0x1E52], NFC: [0x1E52], NFD: [0x004F, 0x0304, 0x0301], NFKC: [0x1E52], NFKD: [0x004F, 0x0304, 0x0301] }, +{ source: [0x1E53], NFC: [0x1E53], NFD: [0x006F, 0x0304, 0x0301], NFKC: [0x1E53], NFKD: [0x006F, 0x0304, 0x0301] }, +{ source: [0x1E54], NFC: [0x1E54], NFD: [0x0050, 0x0301], NFKC: [0x1E54], NFKD: [0x0050, 0x0301] }, +{ source: [0x1E55], NFC: [0x1E55], NFD: [0x0070, 0x0301], NFKC: [0x1E55], NFKD: [0x0070, 0x0301] }, +{ source: [0x1E56], NFC: [0x1E56], NFD: [0x0050, 0x0307], NFKC: [0x1E56], NFKD: [0x0050, 0x0307] }, +{ source: [0x1E57], NFC: [0x1E57], NFD: [0x0070, 0x0307], NFKC: [0x1E57], NFKD: [0x0070, 0x0307] }, +{ source: [0x1E58], NFC: [0x1E58], NFD: [0x0052, 0x0307], NFKC: [0x1E58], NFKD: [0x0052, 0x0307] }, +{ source: [0x1E59], NFC: [0x1E59], NFD: [0x0072, 0x0307], NFKC: [0x1E59], NFKD: [0x0072, 0x0307] }, +{ source: [0x1E5A], NFC: [0x1E5A], NFD: [0x0052, 0x0323], NFKC: [0x1E5A], NFKD: [0x0052, 0x0323] }, +{ source: [0x1E5B], NFC: [0x1E5B], NFD: [0x0072, 0x0323], NFKC: [0x1E5B], NFKD: [0x0072, 0x0323] }, +{ source: [0x1E5C], NFC: [0x1E5C], NFD: [0x0052, 0x0323, 0x0304], NFKC: [0x1E5C], NFKD: [0x0052, 0x0323, 0x0304] }, +{ source: [0x1E5D], NFC: [0x1E5D], NFD: [0x0072, 0x0323, 0x0304], NFKC: [0x1E5D], NFKD: [0x0072, 0x0323, 0x0304] }, +{ source: [0x1E5E], NFC: [0x1E5E], NFD: [0x0052, 0x0331], NFKC: [0x1E5E], NFKD: [0x0052, 0x0331] }, +{ source: [0x1E5F], NFC: [0x1E5F], NFD: [0x0072, 0x0331], NFKC: [0x1E5F], NFKD: [0x0072, 0x0331] }, +{ source: [0x1E60], NFC: [0x1E60], NFD: [0x0053, 0x0307], NFKC: [0x1E60], NFKD: [0x0053, 0x0307] }, +{ source: [0x1E61], NFC: [0x1E61], NFD: [0x0073, 0x0307], NFKC: [0x1E61], NFKD: [0x0073, 0x0307] }, +{ source: [0x1E62], NFC: [0x1E62], NFD: [0x0053, 0x0323], NFKC: [0x1E62], NFKD: [0x0053, 0x0323] }, +{ source: [0x1E63], NFC: [0x1E63], NFD: [0x0073, 0x0323], NFKC: [0x1E63], NFKD: [0x0073, 0x0323] }, +{ source: [0x1E64], NFC: [0x1E64], NFD: [0x0053, 0x0301, 0x0307], NFKC: [0x1E64], NFKD: [0x0053, 0x0301, 0x0307] }, +{ source: [0x1E65], NFC: [0x1E65], NFD: [0x0073, 0x0301, 0x0307], NFKC: [0x1E65], NFKD: [0x0073, 0x0301, 0x0307] }, +{ source: [0x1E66], NFC: [0x1E66], NFD: [0x0053, 0x030C, 0x0307], NFKC: [0x1E66], NFKD: [0x0053, 0x030C, 0x0307] }, +{ source: [0x1E67], NFC: [0x1E67], NFD: [0x0073, 0x030C, 0x0307], NFKC: [0x1E67], NFKD: [0x0073, 0x030C, 0x0307] }, +{ source: [0x1E68], NFC: [0x1E68], NFD: [0x0053, 0x0323, 0x0307], NFKC: [0x1E68], NFKD: [0x0053, 0x0323, 0x0307] }, +{ source: [0x1E69], NFC: [0x1E69], NFD: [0x0073, 0x0323, 0x0307], NFKC: [0x1E69], NFKD: [0x0073, 0x0323, 0x0307] }, +{ source: [0x1E6A], NFC: [0x1E6A], NFD: [0x0054, 0x0307], NFKC: [0x1E6A], NFKD: [0x0054, 0x0307] }, +{ source: [0x1E6B], NFC: [0x1E6B], NFD: [0x0074, 0x0307], NFKC: [0x1E6B], NFKD: [0x0074, 0x0307] }, +{ source: [0x1E6C], NFC: [0x1E6C], NFD: [0x0054, 0x0323], NFKC: [0x1E6C], NFKD: [0x0054, 0x0323] }, +{ source: [0x1E6D], NFC: [0x1E6D], NFD: [0x0074, 0x0323], NFKC: [0x1E6D], NFKD: [0x0074, 0x0323] }, +{ source: [0x1E6E], NFC: [0x1E6E], NFD: [0x0054, 0x0331], NFKC: [0x1E6E], NFKD: [0x0054, 0x0331] }, +{ source: [0x1E6F], NFC: [0x1E6F], NFD: [0x0074, 0x0331], NFKC: [0x1E6F], NFKD: [0x0074, 0x0331] }, +{ source: [0x1E70], NFC: [0x1E70], NFD: [0x0054, 0x032D], NFKC: [0x1E70], NFKD: [0x0054, 0x032D] }, +{ source: [0x1E71], NFC: [0x1E71], NFD: [0x0074, 0x032D], NFKC: [0x1E71], NFKD: [0x0074, 0x032D] }, +{ source: [0x1E72], NFC: [0x1E72], NFD: [0x0055, 0x0324], NFKC: [0x1E72], NFKD: [0x0055, 0x0324] }, +{ source: [0x1E73], NFC: [0x1E73], NFD: [0x0075, 0x0324], NFKC: [0x1E73], NFKD: [0x0075, 0x0324] }, +{ source: [0x1E74], NFC: [0x1E74], NFD: [0x0055, 0x0330], NFKC: [0x1E74], NFKD: [0x0055, 0x0330] }, +{ source: [0x1E75], NFC: [0x1E75], NFD: [0x0075, 0x0330], NFKC: [0x1E75], NFKD: [0x0075, 0x0330] }, +{ source: [0x1E76], NFC: [0x1E76], NFD: [0x0055, 0x032D], NFKC: [0x1E76], NFKD: [0x0055, 0x032D] }, +{ source: [0x1E77], NFC: [0x1E77], NFD: [0x0075, 0x032D], NFKC: [0x1E77], NFKD: [0x0075, 0x032D] }, +{ source: [0x1E78], NFC: [0x1E78], NFD: [0x0055, 0x0303, 0x0301], NFKC: [0x1E78], NFKD: [0x0055, 0x0303, 0x0301] }, +{ source: [0x1E79], NFC: [0x1E79], NFD: [0x0075, 0x0303, 0x0301], NFKC: [0x1E79], NFKD: [0x0075, 0x0303, 0x0301] }, +{ source: [0x1E7A], NFC: [0x1E7A], NFD: [0x0055, 0x0304, 0x0308], NFKC: [0x1E7A], NFKD: [0x0055, 0x0304, 0x0308] }, +{ source: [0x1E7B], NFC: [0x1E7B], NFD: [0x0075, 0x0304, 0x0308], NFKC: [0x1E7B], NFKD: [0x0075, 0x0304, 0x0308] }, +{ source: [0x1E7C], NFC: [0x1E7C], NFD: [0x0056, 0x0303], NFKC: [0x1E7C], NFKD: [0x0056, 0x0303] }, +{ source: [0x1E7D], NFC: [0x1E7D], NFD: [0x0076, 0x0303], NFKC: [0x1E7D], NFKD: [0x0076, 0x0303] }, +{ source: [0x1E7E], NFC: [0x1E7E], NFD: [0x0056, 0x0323], NFKC: [0x1E7E], NFKD: [0x0056, 0x0323] }, +{ source: [0x1E7F], NFC: [0x1E7F], NFD: [0x0076, 0x0323], NFKC: [0x1E7F], NFKD: [0x0076, 0x0323] }, +{ source: [0x1E80], NFC: [0x1E80], NFD: [0x0057, 0x0300], NFKC: [0x1E80], NFKD: [0x0057, 0x0300] }, +{ source: [0x1E81], NFC: [0x1E81], NFD: [0x0077, 0x0300], NFKC: [0x1E81], NFKD: [0x0077, 0x0300] }, +{ source: [0x1E82], NFC: [0x1E82], NFD: [0x0057, 0x0301], NFKC: [0x1E82], NFKD: [0x0057, 0x0301] }, +{ source: [0x1E83], NFC: [0x1E83], NFD: [0x0077, 0x0301], NFKC: [0x1E83], NFKD: [0x0077, 0x0301] }, +{ source: [0x1E84], NFC: [0x1E84], NFD: [0x0057, 0x0308], NFKC: [0x1E84], NFKD: [0x0057, 0x0308] }, +{ source: [0x1E85], NFC: [0x1E85], NFD: [0x0077, 0x0308], NFKC: [0x1E85], NFKD: [0x0077, 0x0308] }, +{ source: [0x1E86], NFC: [0x1E86], NFD: [0x0057, 0x0307], NFKC: [0x1E86], NFKD: [0x0057, 0x0307] }, +{ source: [0x1E87], NFC: [0x1E87], NFD: [0x0077, 0x0307], NFKC: [0x1E87], NFKD: [0x0077, 0x0307] }, +{ source: [0x1E88], NFC: [0x1E88], NFD: [0x0057, 0x0323], NFKC: [0x1E88], NFKD: [0x0057, 0x0323] }, +{ source: [0x1E89], NFC: [0x1E89], NFD: [0x0077, 0x0323], NFKC: [0x1E89], NFKD: [0x0077, 0x0323] }, +{ source: [0x1E8A], NFC: [0x1E8A], NFD: [0x0058, 0x0307], NFKC: [0x1E8A], NFKD: [0x0058, 0x0307] }, +{ source: [0x1E8B], NFC: [0x1E8B], NFD: [0x0078, 0x0307], NFKC: [0x1E8B], NFKD: [0x0078, 0x0307] }, +{ source: [0x1E8C], NFC: [0x1E8C], NFD: [0x0058, 0x0308], NFKC: [0x1E8C], NFKD: [0x0058, 0x0308] }, +{ source: [0x1E8D], NFC: [0x1E8D], NFD: [0x0078, 0x0308], NFKC: [0x1E8D], NFKD: [0x0078, 0x0308] }, +{ source: [0x1E8E], NFC: [0x1E8E], NFD: [0x0059, 0x0307], NFKC: [0x1E8E], NFKD: [0x0059, 0x0307] }, +{ source: [0x1E8F], NFC: [0x1E8F], NFD: [0x0079, 0x0307], NFKC: [0x1E8F], NFKD: [0x0079, 0x0307] }, +{ source: [0x1E90], NFC: [0x1E90], NFD: [0x005A, 0x0302], NFKC: [0x1E90], NFKD: [0x005A, 0x0302] }, +{ source: [0x1E91], NFC: [0x1E91], NFD: [0x007A, 0x0302], NFKC: [0x1E91], NFKD: [0x007A, 0x0302] }, +{ source: [0x1E92], NFC: [0x1E92], NFD: [0x005A, 0x0323], NFKC: [0x1E92], NFKD: [0x005A, 0x0323] }, +{ source: [0x1E93], NFC: [0x1E93], NFD: [0x007A, 0x0323], NFKC: [0x1E93], NFKD: [0x007A, 0x0323] }, +{ source: [0x1E94], NFC: [0x1E94], NFD: [0x005A, 0x0331], NFKC: [0x1E94], NFKD: [0x005A, 0x0331] }, +{ source: [0x1E95], NFC: [0x1E95], NFD: [0x007A, 0x0331], NFKC: [0x1E95], NFKD: [0x007A, 0x0331] }, +{ source: [0x1E96], NFC: [0x1E96], NFD: [0x0068, 0x0331], NFKC: [0x1E96], NFKD: [0x0068, 0x0331] }, +{ source: [0x1E97], NFC: [0x1E97], NFD: [0x0074, 0x0308], NFKC: [0x1E97], NFKD: [0x0074, 0x0308] }, +{ source: [0x1E98], NFC: [0x1E98], NFD: [0x0077, 0x030A], NFKC: [0x1E98], NFKD: [0x0077, 0x030A] }, +{ source: [0x1E99], NFC: [0x1E99], NFD: [0x0079, 0x030A], NFKC: [0x1E99], NFKD: [0x0079, 0x030A] }, +{ source: [0x1E9A], NFC: [0x1E9A], NFD: [0x1E9A], NFKC: [0x0061, 0x02BE], NFKD: [0x0061, 0x02BE] }, +{ source: [0x1E9B], NFC: [0x1E9B], NFD: [0x017F, 0x0307], NFKC: [0x1E61], NFKD: [0x0073, 0x0307] }, +{ source: [0x1EA0], NFC: [0x1EA0], NFD: [0x0041, 0x0323], NFKC: [0x1EA0], NFKD: [0x0041, 0x0323] }, +{ source: [0x1EA1], NFC: [0x1EA1], NFD: [0x0061, 0x0323], NFKC: [0x1EA1], NFKD: [0x0061, 0x0323] }, +{ source: [0x1EA2], NFC: [0x1EA2], NFD: [0x0041, 0x0309], NFKC: [0x1EA2], NFKD: [0x0041, 0x0309] }, +{ source: [0x1EA3], NFC: [0x1EA3], NFD: [0x0061, 0x0309], NFKC: [0x1EA3], NFKD: [0x0061, 0x0309] }, +{ source: [0x1EA4], NFC: [0x1EA4], NFD: [0x0041, 0x0302, 0x0301], NFKC: [0x1EA4], NFKD: [0x0041, 0x0302, 0x0301] }, +{ source: [0x1EA5], NFC: [0x1EA5], NFD: [0x0061, 0x0302, 0x0301], NFKC: [0x1EA5], NFKD: [0x0061, 0x0302, 0x0301] }, +{ source: [0x1EA6], NFC: [0x1EA6], NFD: [0x0041, 0x0302, 0x0300], NFKC: [0x1EA6], NFKD: [0x0041, 0x0302, 0x0300] }, +{ source: [0x1EA7], NFC: [0x1EA7], NFD: [0x0061, 0x0302, 0x0300], NFKC: [0x1EA7], NFKD: [0x0061, 0x0302, 0x0300] }, +{ source: [0x1EA8], NFC: [0x1EA8], NFD: [0x0041, 0x0302, 0x0309], NFKC: [0x1EA8], NFKD: [0x0041, 0x0302, 0x0309] }, +{ source: [0x1EA9], NFC: [0x1EA9], NFD: [0x0061, 0x0302, 0x0309], NFKC: [0x1EA9], NFKD: [0x0061, 0x0302, 0x0309] }, +{ source: [0x1EAA], NFC: [0x1EAA], NFD: [0x0041, 0x0302, 0x0303], NFKC: [0x1EAA], NFKD: [0x0041, 0x0302, 0x0303] }, +{ source: [0x1EAB], NFC: [0x1EAB], NFD: [0x0061, 0x0302, 0x0303], NFKC: [0x1EAB], NFKD: [0x0061, 0x0302, 0x0303] }, +{ source: [0x1EAC], NFC: [0x1EAC], NFD: [0x0041, 0x0323, 0x0302], NFKC: [0x1EAC], NFKD: [0x0041, 0x0323, 0x0302] }, +{ source: [0x1EAD], NFC: [0x1EAD], NFD: [0x0061, 0x0323, 0x0302], NFKC: [0x1EAD], NFKD: [0x0061, 0x0323, 0x0302] }, +{ source: [0x1EAE], NFC: [0x1EAE], NFD: [0x0041, 0x0306, 0x0301], NFKC: [0x1EAE], NFKD: [0x0041, 0x0306, 0x0301] }, +{ source: [0x1EAF], NFC: [0x1EAF], NFD: [0x0061, 0x0306, 0x0301], NFKC: [0x1EAF], NFKD: [0x0061, 0x0306, 0x0301] }, +{ source: [0x1EB0], NFC: [0x1EB0], NFD: [0x0041, 0x0306, 0x0300], NFKC: [0x1EB0], NFKD: [0x0041, 0x0306, 0x0300] }, +{ source: [0x1EB1], NFC: [0x1EB1], NFD: [0x0061, 0x0306, 0x0300], NFKC: [0x1EB1], NFKD: [0x0061, 0x0306, 0x0300] }, +{ source: [0x1EB2], NFC: [0x1EB2], NFD: [0x0041, 0x0306, 0x0309], NFKC: [0x1EB2], NFKD: [0x0041, 0x0306, 0x0309] }, +{ source: [0x1EB3], NFC: [0x1EB3], NFD: [0x0061, 0x0306, 0x0309], NFKC: [0x1EB3], NFKD: [0x0061, 0x0306, 0x0309] }, +{ source: [0x1EB4], NFC: [0x1EB4], NFD: [0x0041, 0x0306, 0x0303], NFKC: [0x1EB4], NFKD: [0x0041, 0x0306, 0x0303] }, +{ source: [0x1EB5], NFC: [0x1EB5], NFD: [0x0061, 0x0306, 0x0303], NFKC: [0x1EB5], NFKD: [0x0061, 0x0306, 0x0303] }, +{ source: [0x1EB6], NFC: [0x1EB6], NFD: [0x0041, 0x0323, 0x0306], NFKC: [0x1EB6], NFKD: [0x0041, 0x0323, 0x0306] }, +{ source: [0x1EB7], NFC: [0x1EB7], NFD: [0x0061, 0x0323, 0x0306], NFKC: [0x1EB7], NFKD: [0x0061, 0x0323, 0x0306] }, +{ source: [0x1EB8], NFC: [0x1EB8], NFD: [0x0045, 0x0323], NFKC: [0x1EB8], NFKD: [0x0045, 0x0323] }, +{ source: [0x1EB9], NFC: [0x1EB9], NFD: [0x0065, 0x0323], NFKC: [0x1EB9], NFKD: [0x0065, 0x0323] }, +{ source: [0x1EBA], NFC: [0x1EBA], NFD: [0x0045, 0x0309], NFKC: [0x1EBA], NFKD: [0x0045, 0x0309] }, +{ source: [0x1EBB], NFC: [0x1EBB], NFD: [0x0065, 0x0309], NFKC: [0x1EBB], NFKD: [0x0065, 0x0309] }, +{ source: [0x1EBC], NFC: [0x1EBC], NFD: [0x0045, 0x0303], NFKC: [0x1EBC], NFKD: [0x0045, 0x0303] }, +{ source: [0x1EBD], NFC: [0x1EBD], NFD: [0x0065, 0x0303], NFKC: [0x1EBD], NFKD: [0x0065, 0x0303] }, +{ source: [0x1EBE], NFC: [0x1EBE], NFD: [0x0045, 0x0302, 0x0301], NFKC: [0x1EBE], NFKD: [0x0045, 0x0302, 0x0301] }, +{ source: [0x1EBF], NFC: [0x1EBF], NFD: [0x0065, 0x0302, 0x0301], NFKC: [0x1EBF], NFKD: [0x0065, 0x0302, 0x0301] }, +{ source: [0x1EC0], NFC: [0x1EC0], NFD: [0x0045, 0x0302, 0x0300], NFKC: [0x1EC0], NFKD: [0x0045, 0x0302, 0x0300] }, +{ source: [0x1EC1], NFC: [0x1EC1], NFD: [0x0065, 0x0302, 0x0300], NFKC: [0x1EC1], NFKD: [0x0065, 0x0302, 0x0300] }, +{ source: [0x1EC2], NFC: [0x1EC2], NFD: [0x0045, 0x0302, 0x0309], NFKC: [0x1EC2], NFKD: [0x0045, 0x0302, 0x0309] }, +{ source: [0x1EC3], NFC: [0x1EC3], NFD: [0x0065, 0x0302, 0x0309], NFKC: [0x1EC3], NFKD: [0x0065, 0x0302, 0x0309] }, +{ source: [0x1EC4], NFC: [0x1EC4], NFD: [0x0045, 0x0302, 0x0303], NFKC: [0x1EC4], NFKD: [0x0045, 0x0302, 0x0303] }, +{ source: [0x1EC5], NFC: [0x1EC5], NFD: [0x0065, 0x0302, 0x0303], NFKC: [0x1EC5], NFKD: [0x0065, 0x0302, 0x0303] }, +{ source: [0x1EC6], NFC: [0x1EC6], NFD: [0x0045, 0x0323, 0x0302], NFKC: [0x1EC6], NFKD: [0x0045, 0x0323, 0x0302] }, +{ source: [0x1EC7], NFC: [0x1EC7], NFD: [0x0065, 0x0323, 0x0302], NFKC: [0x1EC7], NFKD: [0x0065, 0x0323, 0x0302] }, +{ source: [0x1EC8], NFC: [0x1EC8], NFD: [0x0049, 0x0309], NFKC: [0x1EC8], NFKD: [0x0049, 0x0309] }, +{ source: [0x1EC9], NFC: [0x1EC9], NFD: [0x0069, 0x0309], NFKC: [0x1EC9], NFKD: [0x0069, 0x0309] }, +{ source: [0x1ECA], NFC: [0x1ECA], NFD: [0x0049, 0x0323], NFKC: [0x1ECA], NFKD: [0x0049, 0x0323] }, +{ source: [0x1ECB], NFC: [0x1ECB], NFD: [0x0069, 0x0323], NFKC: [0x1ECB], NFKD: [0x0069, 0x0323] }, +{ source: [0x1ECC], NFC: [0x1ECC], NFD: [0x004F, 0x0323], NFKC: [0x1ECC], NFKD: [0x004F, 0x0323] }, +{ source: [0x1ECD], NFC: [0x1ECD], NFD: [0x006F, 0x0323], NFKC: [0x1ECD], NFKD: [0x006F, 0x0323] }, +{ source: [0x1ECE], NFC: [0x1ECE], NFD: [0x004F, 0x0309], NFKC: [0x1ECE], NFKD: [0x004F, 0x0309] }, +{ source: [0x1ECF], NFC: [0x1ECF], NFD: [0x006F, 0x0309], NFKC: [0x1ECF], NFKD: [0x006F, 0x0309] }, +{ source: [0x1ED0], NFC: [0x1ED0], NFD: [0x004F, 0x0302, 0x0301], NFKC: [0x1ED0], NFKD: [0x004F, 0x0302, 0x0301] }, +{ source: [0x1ED1], NFC: [0x1ED1], NFD: [0x006F, 0x0302, 0x0301], NFKC: [0x1ED1], NFKD: [0x006F, 0x0302, 0x0301] }, +{ source: [0x1ED2], NFC: [0x1ED2], NFD: [0x004F, 0x0302, 0x0300], NFKC: [0x1ED2], NFKD: [0x004F, 0x0302, 0x0300] }, +{ source: [0x1ED3], NFC: [0x1ED3], NFD: [0x006F, 0x0302, 0x0300], NFKC: [0x1ED3], NFKD: [0x006F, 0x0302, 0x0300] }, +{ source: [0x1ED4], NFC: [0x1ED4], NFD: [0x004F, 0x0302, 0x0309], NFKC: [0x1ED4], NFKD: [0x004F, 0x0302, 0x0309] }, +{ source: [0x1ED5], NFC: [0x1ED5], NFD: [0x006F, 0x0302, 0x0309], NFKC: [0x1ED5], NFKD: [0x006F, 0x0302, 0x0309] }, +{ source: [0x1ED6], NFC: [0x1ED6], NFD: [0x004F, 0x0302, 0x0303], NFKC: [0x1ED6], NFKD: [0x004F, 0x0302, 0x0303] }, +{ source: [0x1ED7], NFC: [0x1ED7], NFD: [0x006F, 0x0302, 0x0303], NFKC: [0x1ED7], NFKD: [0x006F, 0x0302, 0x0303] }, +{ source: [0x1ED8], NFC: [0x1ED8], NFD: [0x004F, 0x0323, 0x0302], NFKC: [0x1ED8], NFKD: [0x004F, 0x0323, 0x0302] }, +{ source: [0x1ED9], NFC: [0x1ED9], NFD: [0x006F, 0x0323, 0x0302], NFKC: [0x1ED9], NFKD: [0x006F, 0x0323, 0x0302] }, +{ source: [0x1EDA], NFC: [0x1EDA], NFD: [0x004F, 0x031B, 0x0301], NFKC: [0x1EDA], NFKD: [0x004F, 0x031B, 0x0301] }, +{ source: [0x1EDB], NFC: [0x1EDB], NFD: [0x006F, 0x031B, 0x0301], NFKC: [0x1EDB], NFKD: [0x006F, 0x031B, 0x0301] }, +{ source: [0x1EDC], NFC: [0x1EDC], NFD: [0x004F, 0x031B, 0x0300], NFKC: [0x1EDC], NFKD: [0x004F, 0x031B, 0x0300] }, +{ source: [0x1EDD], NFC: [0x1EDD], NFD: [0x006F, 0x031B, 0x0300], NFKC: [0x1EDD], NFKD: [0x006F, 0x031B, 0x0300] }, +{ source: [0x1EDE], NFC: [0x1EDE], NFD: [0x004F, 0x031B, 0x0309], NFKC: [0x1EDE], NFKD: [0x004F, 0x031B, 0x0309] }, +{ source: [0x1EDF], NFC: [0x1EDF], NFD: [0x006F, 0x031B, 0x0309], NFKC: [0x1EDF], NFKD: [0x006F, 0x031B, 0x0309] }, +{ source: [0x1EE0], NFC: [0x1EE0], NFD: [0x004F, 0x031B, 0x0303], NFKC: [0x1EE0], NFKD: [0x004F, 0x031B, 0x0303] }, +{ source: [0x1EE1], NFC: [0x1EE1], NFD: [0x006F, 0x031B, 0x0303], NFKC: [0x1EE1], NFKD: [0x006F, 0x031B, 0x0303] }, +{ source: [0x1EE2], NFC: [0x1EE2], NFD: [0x004F, 0x031B, 0x0323], NFKC: [0x1EE2], NFKD: [0x004F, 0x031B, 0x0323] }, +{ source: [0x1EE3], NFC: [0x1EE3], NFD: [0x006F, 0x031B, 0x0323], NFKC: [0x1EE3], NFKD: [0x006F, 0x031B, 0x0323] }, +{ source: [0x1EE4], NFC: [0x1EE4], NFD: [0x0055, 0x0323], NFKC: [0x1EE4], NFKD: [0x0055, 0x0323] }, +{ source: [0x1EE5], NFC: [0x1EE5], NFD: [0x0075, 0x0323], NFKC: [0x1EE5], NFKD: [0x0075, 0x0323] }, +{ source: [0x1EE6], NFC: [0x1EE6], NFD: [0x0055, 0x0309], NFKC: [0x1EE6], NFKD: [0x0055, 0x0309] }, +{ source: [0x1EE7], NFC: [0x1EE7], NFD: [0x0075, 0x0309], NFKC: [0x1EE7], NFKD: [0x0075, 0x0309] }, +{ source: [0x1EE8], NFC: [0x1EE8], NFD: [0x0055, 0x031B, 0x0301], NFKC: [0x1EE8], NFKD: [0x0055, 0x031B, 0x0301] }, +{ source: [0x1EE9], NFC: [0x1EE9], NFD: [0x0075, 0x031B, 0x0301], NFKC: [0x1EE9], NFKD: [0x0075, 0x031B, 0x0301] }, +{ source: [0x1EEA], NFC: [0x1EEA], NFD: [0x0055, 0x031B, 0x0300], NFKC: [0x1EEA], NFKD: [0x0055, 0x031B, 0x0300] }, +{ source: [0x1EEB], NFC: [0x1EEB], NFD: [0x0075, 0x031B, 0x0300], NFKC: [0x1EEB], NFKD: [0x0075, 0x031B, 0x0300] }, +{ source: [0x1EEC], NFC: [0x1EEC], NFD: [0x0055, 0x031B, 0x0309], NFKC: [0x1EEC], NFKD: [0x0055, 0x031B, 0x0309] }, +{ source: [0x1EED], NFC: [0x1EED], NFD: [0x0075, 0x031B, 0x0309], NFKC: [0x1EED], NFKD: [0x0075, 0x031B, 0x0309] }, +{ source: [0x1EEE], NFC: [0x1EEE], NFD: [0x0055, 0x031B, 0x0303], NFKC: [0x1EEE], NFKD: [0x0055, 0x031B, 0x0303] }, +{ source: [0x1EEF], NFC: [0x1EEF], NFD: [0x0075, 0x031B, 0x0303], NFKC: [0x1EEF], NFKD: [0x0075, 0x031B, 0x0303] }, +{ source: [0x1EF0], NFC: [0x1EF0], NFD: [0x0055, 0x031B, 0x0323], NFKC: [0x1EF0], NFKD: [0x0055, 0x031B, 0x0323] }, +{ source: [0x1EF1], NFC: [0x1EF1], NFD: [0x0075, 0x031B, 0x0323], NFKC: [0x1EF1], NFKD: [0x0075, 0x031B, 0x0323] }, +{ source: [0x1EF2], NFC: [0x1EF2], NFD: [0x0059, 0x0300], NFKC: [0x1EF2], NFKD: [0x0059, 0x0300] }, +{ source: [0x1EF3], NFC: [0x1EF3], NFD: [0x0079, 0x0300], NFKC: [0x1EF3], NFKD: [0x0079, 0x0300] }, +{ source: [0x1EF4], NFC: [0x1EF4], NFD: [0x0059, 0x0323], NFKC: [0x1EF4], NFKD: [0x0059, 0x0323] }, +{ source: [0x1EF5], NFC: [0x1EF5], NFD: [0x0079, 0x0323], NFKC: [0x1EF5], NFKD: [0x0079, 0x0323] }, +{ source: [0x1EF6], NFC: [0x1EF6], NFD: [0x0059, 0x0309], NFKC: [0x1EF6], NFKD: [0x0059, 0x0309] }, +{ source: [0x1EF7], NFC: [0x1EF7], NFD: [0x0079, 0x0309], NFKC: [0x1EF7], NFKD: [0x0079, 0x0309] }, +{ source: [0x1EF8], NFC: [0x1EF8], NFD: [0x0059, 0x0303], NFKC: [0x1EF8], NFKD: [0x0059, 0x0303] }, +{ source: [0x1EF9], NFC: [0x1EF9], NFD: [0x0079, 0x0303], NFKC: [0x1EF9], NFKD: [0x0079, 0x0303] }, +{ source: [0x1F00], NFC: [0x1F00], NFD: [0x03B1, 0x0313], NFKC: [0x1F00], NFKD: [0x03B1, 0x0313] }, +{ source: [0x1F01], NFC: [0x1F01], NFD: [0x03B1, 0x0314], NFKC: [0x1F01], NFKD: [0x03B1, 0x0314] }, +{ source: [0x1F02], NFC: [0x1F02], NFD: [0x03B1, 0x0313, 0x0300], NFKC: [0x1F02], NFKD: [0x03B1, 0x0313, 0x0300] }, +{ source: [0x1F03], NFC: [0x1F03], NFD: [0x03B1, 0x0314, 0x0300], NFKC: [0x1F03], NFKD: [0x03B1, 0x0314, 0x0300] }, +{ source: [0x1F04], NFC: [0x1F04], NFD: [0x03B1, 0x0313, 0x0301], NFKC: [0x1F04], NFKD: [0x03B1, 0x0313, 0x0301] }, +{ source: [0x1F05], NFC: [0x1F05], NFD: [0x03B1, 0x0314, 0x0301], NFKC: [0x1F05], NFKD: [0x03B1, 0x0314, 0x0301] }, +{ source: [0x1F06], NFC: [0x1F06], NFD: [0x03B1, 0x0313, 0x0342], NFKC: [0x1F06], NFKD: [0x03B1, 0x0313, 0x0342] }, +{ source: [0x1F07], NFC: [0x1F07], NFD: [0x03B1, 0x0314, 0x0342], NFKC: [0x1F07], NFKD: [0x03B1, 0x0314, 0x0342] }, +{ source: [0x1F08], NFC: [0x1F08], NFD: [0x0391, 0x0313], NFKC: [0x1F08], NFKD: [0x0391, 0x0313] }, +{ source: [0x1F09], NFC: [0x1F09], NFD: [0x0391, 0x0314], NFKC: [0x1F09], NFKD: [0x0391, 0x0314] }, +{ source: [0x1F0A], NFC: [0x1F0A], NFD: [0x0391, 0x0313, 0x0300], NFKC: [0x1F0A], NFKD: [0x0391, 0x0313, 0x0300] }, +{ source: [0x1F0B], NFC: [0x1F0B], NFD: [0x0391, 0x0314, 0x0300], NFKC: [0x1F0B], NFKD: [0x0391, 0x0314, 0x0300] }, +{ source: [0x1F0C], NFC: [0x1F0C], NFD: [0x0391, 0x0313, 0x0301], NFKC: [0x1F0C], NFKD: [0x0391, 0x0313, 0x0301] }, +{ source: [0x1F0D], NFC: [0x1F0D], NFD: [0x0391, 0x0314, 0x0301], NFKC: [0x1F0D], NFKD: [0x0391, 0x0314, 0x0301] }, +{ source: [0x1F0E], NFC: [0x1F0E], NFD: [0x0391, 0x0313, 0x0342], NFKC: [0x1F0E], NFKD: [0x0391, 0x0313, 0x0342] }, +{ source: [0x1F0F], NFC: [0x1F0F], NFD: [0x0391, 0x0314, 0x0342], NFKC: [0x1F0F], NFKD: [0x0391, 0x0314, 0x0342] }, +{ source: [0x1F10], NFC: [0x1F10], NFD: [0x03B5, 0x0313], NFKC: [0x1F10], NFKD: [0x03B5, 0x0313] }, +{ source: [0x1F11], NFC: [0x1F11], NFD: [0x03B5, 0x0314], NFKC: [0x1F11], NFKD: [0x03B5, 0x0314] }, +{ source: [0x1F12], NFC: [0x1F12], NFD: [0x03B5, 0x0313, 0x0300], NFKC: [0x1F12], NFKD: [0x03B5, 0x0313, 0x0300] }, +{ source: [0x1F13], NFC: [0x1F13], NFD: [0x03B5, 0x0314, 0x0300], NFKC: [0x1F13], NFKD: [0x03B5, 0x0314, 0x0300] }, +{ source: [0x1F14], NFC: [0x1F14], NFD: [0x03B5, 0x0313, 0x0301], NFKC: [0x1F14], NFKD: [0x03B5, 0x0313, 0x0301] }, +{ source: [0x1F15], NFC: [0x1F15], NFD: [0x03B5, 0x0314, 0x0301], NFKC: [0x1F15], NFKD: [0x03B5, 0x0314, 0x0301] }, +{ source: [0x1F18], NFC: [0x1F18], NFD: [0x0395, 0x0313], NFKC: [0x1F18], NFKD: [0x0395, 0x0313] }, +{ source: [0x1F19], NFC: [0x1F19], NFD: [0x0395, 0x0314], NFKC: [0x1F19], NFKD: [0x0395, 0x0314] }, +{ source: [0x1F1A], NFC: [0x1F1A], NFD: [0x0395, 0x0313, 0x0300], NFKC: [0x1F1A], NFKD: [0x0395, 0x0313, 0x0300] }, +{ source: [0x1F1B], NFC: [0x1F1B], NFD: [0x0395, 0x0314, 0x0300], NFKC: [0x1F1B], NFKD: [0x0395, 0x0314, 0x0300] }, +{ source: [0x1F1C], NFC: [0x1F1C], NFD: [0x0395, 0x0313, 0x0301], NFKC: [0x1F1C], NFKD: [0x0395, 0x0313, 0x0301] }, +{ source: [0x1F1D], NFC: [0x1F1D], NFD: [0x0395, 0x0314, 0x0301], NFKC: [0x1F1D], NFKD: [0x0395, 0x0314, 0x0301] }, +{ source: [0x1F20], NFC: [0x1F20], NFD: [0x03B7, 0x0313], NFKC: [0x1F20], NFKD: [0x03B7, 0x0313] }, +{ source: [0x1F21], NFC: [0x1F21], NFD: [0x03B7, 0x0314], NFKC: [0x1F21], NFKD: [0x03B7, 0x0314] }, +{ source: [0x1F22], NFC: [0x1F22], NFD: [0x03B7, 0x0313, 0x0300], NFKC: [0x1F22], NFKD: [0x03B7, 0x0313, 0x0300] }, +{ source: [0x1F23], NFC: [0x1F23], NFD: [0x03B7, 0x0314, 0x0300], NFKC: [0x1F23], NFKD: [0x03B7, 0x0314, 0x0300] }, +{ source: [0x1F24], NFC: [0x1F24], NFD: [0x03B7, 0x0313, 0x0301], NFKC: [0x1F24], NFKD: [0x03B7, 0x0313, 0x0301] }, +{ source: [0x1F25], NFC: [0x1F25], NFD: [0x03B7, 0x0314, 0x0301], NFKC: [0x1F25], NFKD: [0x03B7, 0x0314, 0x0301] }, +{ source: [0x1F26], NFC: [0x1F26], NFD: [0x03B7, 0x0313, 0x0342], NFKC: [0x1F26], NFKD: [0x03B7, 0x0313, 0x0342] }, +{ source: [0x1F27], NFC: [0x1F27], NFD: [0x03B7, 0x0314, 0x0342], NFKC: [0x1F27], NFKD: [0x03B7, 0x0314, 0x0342] }, +{ source: [0x1F28], NFC: [0x1F28], NFD: [0x0397, 0x0313], NFKC: [0x1F28], NFKD: [0x0397, 0x0313] }, +{ source: [0x1F29], NFC: [0x1F29], NFD: [0x0397, 0x0314], NFKC: [0x1F29], NFKD: [0x0397, 0x0314] }, +{ source: [0x1F2A], NFC: [0x1F2A], NFD: [0x0397, 0x0313, 0x0300], NFKC: [0x1F2A], NFKD: [0x0397, 0x0313, 0x0300] }, +{ source: [0x1F2B], NFC: [0x1F2B], NFD: [0x0397, 0x0314, 0x0300], NFKC: [0x1F2B], NFKD: [0x0397, 0x0314, 0x0300] }, +{ source: [0x1F2C], NFC: [0x1F2C], NFD: [0x0397, 0x0313, 0x0301], NFKC: [0x1F2C], NFKD: [0x0397, 0x0313, 0x0301] }, +{ source: [0x1F2D], NFC: [0x1F2D], NFD: [0x0397, 0x0314, 0x0301], NFKC: [0x1F2D], NFKD: [0x0397, 0x0314, 0x0301] }, +{ source: [0x1F2E], NFC: [0x1F2E], NFD: [0x0397, 0x0313, 0x0342], NFKC: [0x1F2E], NFKD: [0x0397, 0x0313, 0x0342] }, +{ source: [0x1F2F], NFC: [0x1F2F], NFD: [0x0397, 0x0314, 0x0342], NFKC: [0x1F2F], NFKD: [0x0397, 0x0314, 0x0342] }, +{ source: [0x1F30], NFC: [0x1F30], NFD: [0x03B9, 0x0313], NFKC: [0x1F30], NFKD: [0x03B9, 0x0313] }, +{ source: [0x1F31], NFC: [0x1F31], NFD: [0x03B9, 0x0314], NFKC: [0x1F31], NFKD: [0x03B9, 0x0314] }, +{ source: [0x1F32], NFC: [0x1F32], NFD: [0x03B9, 0x0313, 0x0300], NFKC: [0x1F32], NFKD: [0x03B9, 0x0313, 0x0300] }, +{ source: [0x1F33], NFC: [0x1F33], NFD: [0x03B9, 0x0314, 0x0300], NFKC: [0x1F33], NFKD: [0x03B9, 0x0314, 0x0300] }, +{ source: [0x1F34], NFC: [0x1F34], NFD: [0x03B9, 0x0313, 0x0301], NFKC: [0x1F34], NFKD: [0x03B9, 0x0313, 0x0301] }, +{ source: [0x1F35], NFC: [0x1F35], NFD: [0x03B9, 0x0314, 0x0301], NFKC: [0x1F35], NFKD: [0x03B9, 0x0314, 0x0301] }, +{ source: [0x1F36], NFC: [0x1F36], NFD: [0x03B9, 0x0313, 0x0342], NFKC: [0x1F36], NFKD: [0x03B9, 0x0313, 0x0342] }, +{ source: [0x1F37], NFC: [0x1F37], NFD: [0x03B9, 0x0314, 0x0342], NFKC: [0x1F37], NFKD: [0x03B9, 0x0314, 0x0342] }, +{ source: [0x1F38], NFC: [0x1F38], NFD: [0x0399, 0x0313], NFKC: [0x1F38], NFKD: [0x0399, 0x0313] }, +{ source: [0x1F39], NFC: [0x1F39], NFD: [0x0399, 0x0314], NFKC: [0x1F39], NFKD: [0x0399, 0x0314] }, +{ source: [0x1F3A], NFC: [0x1F3A], NFD: [0x0399, 0x0313, 0x0300], NFKC: [0x1F3A], NFKD: [0x0399, 0x0313, 0x0300] }, +{ source: [0x1F3B], NFC: [0x1F3B], NFD: [0x0399, 0x0314, 0x0300], NFKC: [0x1F3B], NFKD: [0x0399, 0x0314, 0x0300] }, +{ source: [0x1F3C], NFC: [0x1F3C], NFD: [0x0399, 0x0313, 0x0301], NFKC: [0x1F3C], NFKD: [0x0399, 0x0313, 0x0301] }, +{ source: [0x1F3D], NFC: [0x1F3D], NFD: [0x0399, 0x0314, 0x0301], NFKC: [0x1F3D], NFKD: [0x0399, 0x0314, 0x0301] }, +{ source: [0x1F3E], NFC: [0x1F3E], NFD: [0x0399, 0x0313, 0x0342], NFKC: [0x1F3E], NFKD: [0x0399, 0x0313, 0x0342] }, +{ source: [0x1F3F], NFC: [0x1F3F], NFD: [0x0399, 0x0314, 0x0342], NFKC: [0x1F3F], NFKD: [0x0399, 0x0314, 0x0342] }, +{ source: [0x1F40], NFC: [0x1F40], NFD: [0x03BF, 0x0313], NFKC: [0x1F40], NFKD: [0x03BF, 0x0313] }, +{ source: [0x1F41], NFC: [0x1F41], NFD: [0x03BF, 0x0314], NFKC: [0x1F41], NFKD: [0x03BF, 0x0314] }, +{ source: [0x1F42], NFC: [0x1F42], NFD: [0x03BF, 0x0313, 0x0300], NFKC: [0x1F42], NFKD: [0x03BF, 0x0313, 0x0300] }, +{ source: [0x1F43], NFC: [0x1F43], NFD: [0x03BF, 0x0314, 0x0300], NFKC: [0x1F43], NFKD: [0x03BF, 0x0314, 0x0300] }, +{ source: [0x1F44], NFC: [0x1F44], NFD: [0x03BF, 0x0313, 0x0301], NFKC: [0x1F44], NFKD: [0x03BF, 0x0313, 0x0301] }, +{ source: [0x1F45], NFC: [0x1F45], NFD: [0x03BF, 0x0314, 0x0301], NFKC: [0x1F45], NFKD: [0x03BF, 0x0314, 0x0301] }, +{ source: [0x1F48], NFC: [0x1F48], NFD: [0x039F, 0x0313], NFKC: [0x1F48], NFKD: [0x039F, 0x0313] }, +{ source: [0x1F49], NFC: [0x1F49], NFD: [0x039F, 0x0314], NFKC: [0x1F49], NFKD: [0x039F, 0x0314] }, +{ source: [0x1F4A], NFC: [0x1F4A], NFD: [0x039F, 0x0313, 0x0300], NFKC: [0x1F4A], NFKD: [0x039F, 0x0313, 0x0300] }, +{ source: [0x1F4B], NFC: [0x1F4B], NFD: [0x039F, 0x0314, 0x0300], NFKC: [0x1F4B], NFKD: [0x039F, 0x0314, 0x0300] }, +{ source: [0x1F4C], NFC: [0x1F4C], NFD: [0x039F, 0x0313, 0x0301], NFKC: [0x1F4C], NFKD: [0x039F, 0x0313, 0x0301] }, +{ source: [0x1F4D], NFC: [0x1F4D], NFD: [0x039F, 0x0314, 0x0301], NFKC: [0x1F4D], NFKD: [0x039F, 0x0314, 0x0301] }, +{ source: [0x1F50], NFC: [0x1F50], NFD: [0x03C5, 0x0313], NFKC: [0x1F50], NFKD: [0x03C5, 0x0313] }, +{ source: [0x1F51], NFC: [0x1F51], NFD: [0x03C5, 0x0314], NFKC: [0x1F51], NFKD: [0x03C5, 0x0314] }, +{ source: [0x1F52], NFC: [0x1F52], NFD: [0x03C5, 0x0313, 0x0300], NFKC: [0x1F52], NFKD: [0x03C5, 0x0313, 0x0300] }, +{ source: [0x1F53], NFC: [0x1F53], NFD: [0x03C5, 0x0314, 0x0300], NFKC: [0x1F53], NFKD: [0x03C5, 0x0314, 0x0300] }, +{ source: [0x1F54], NFC: [0x1F54], NFD: [0x03C5, 0x0313, 0x0301], NFKC: [0x1F54], NFKD: [0x03C5, 0x0313, 0x0301] }, +{ source: [0x1F55], NFC: [0x1F55], NFD: [0x03C5, 0x0314, 0x0301], NFKC: [0x1F55], NFKD: [0x03C5, 0x0314, 0x0301] }, +{ source: [0x1F56], NFC: [0x1F56], NFD: [0x03C5, 0x0313, 0x0342], NFKC: [0x1F56], NFKD: [0x03C5, 0x0313, 0x0342] }, +{ source: [0x1F57], NFC: [0x1F57], NFD: [0x03C5, 0x0314, 0x0342], NFKC: [0x1F57], NFKD: [0x03C5, 0x0314, 0x0342] }, +{ source: [0x1F59], NFC: [0x1F59], NFD: [0x03A5, 0x0314], NFKC: [0x1F59], NFKD: [0x03A5, 0x0314] }, +{ source: [0x1F5B], NFC: [0x1F5B], NFD: [0x03A5, 0x0314, 0x0300], NFKC: [0x1F5B], NFKD: [0x03A5, 0x0314, 0x0300] }, +{ source: [0x1F5D], NFC: [0x1F5D], NFD: [0x03A5, 0x0314, 0x0301], NFKC: [0x1F5D], NFKD: [0x03A5, 0x0314, 0x0301] }, +{ source: [0x1F5F], NFC: [0x1F5F], NFD: [0x03A5, 0x0314, 0x0342], NFKC: [0x1F5F], NFKD: [0x03A5, 0x0314, 0x0342] }, +{ source: [0x1F60], NFC: [0x1F60], NFD: [0x03C9, 0x0313], NFKC: [0x1F60], NFKD: [0x03C9, 0x0313] }, +{ source: [0x1F61], NFC: [0x1F61], NFD: [0x03C9, 0x0314], NFKC: [0x1F61], NFKD: [0x03C9, 0x0314] }, +{ source: [0x1F62], NFC: [0x1F62], NFD: [0x03C9, 0x0313, 0x0300], NFKC: [0x1F62], NFKD: [0x03C9, 0x0313, 0x0300] }, +{ source: [0x1F63], NFC: [0x1F63], NFD: [0x03C9, 0x0314, 0x0300], NFKC: [0x1F63], NFKD: [0x03C9, 0x0314, 0x0300] }, +{ source: [0x1F64], NFC: [0x1F64], NFD: [0x03C9, 0x0313, 0x0301], NFKC: [0x1F64], NFKD: [0x03C9, 0x0313, 0x0301] }, +{ source: [0x1F65], NFC: [0x1F65], NFD: [0x03C9, 0x0314, 0x0301], NFKC: [0x1F65], NFKD: [0x03C9, 0x0314, 0x0301] }, +{ source: [0x1F66], NFC: [0x1F66], NFD: [0x03C9, 0x0313, 0x0342], NFKC: [0x1F66], NFKD: [0x03C9, 0x0313, 0x0342] }, +{ source: [0x1F67], NFC: [0x1F67], NFD: [0x03C9, 0x0314, 0x0342], NFKC: [0x1F67], NFKD: [0x03C9, 0x0314, 0x0342] }, +{ source: [0x1F68], NFC: [0x1F68], NFD: [0x03A9, 0x0313], NFKC: [0x1F68], NFKD: [0x03A9, 0x0313] }, +{ source: [0x1F69], NFC: [0x1F69], NFD: [0x03A9, 0x0314], NFKC: [0x1F69], NFKD: [0x03A9, 0x0314] }, +{ source: [0x1F6A], NFC: [0x1F6A], NFD: [0x03A9, 0x0313, 0x0300], NFKC: [0x1F6A], NFKD: [0x03A9, 0x0313, 0x0300] }, +{ source: [0x1F6B], NFC: [0x1F6B], NFD: [0x03A9, 0x0314, 0x0300], NFKC: [0x1F6B], NFKD: [0x03A9, 0x0314, 0x0300] }, +{ source: [0x1F6C], NFC: [0x1F6C], NFD: [0x03A9, 0x0313, 0x0301], NFKC: [0x1F6C], NFKD: [0x03A9, 0x0313, 0x0301] }, +{ source: [0x1F6D], NFC: [0x1F6D], NFD: [0x03A9, 0x0314, 0x0301], NFKC: [0x1F6D], NFKD: [0x03A9, 0x0314, 0x0301] }, +{ source: [0x1F6E], NFC: [0x1F6E], NFD: [0x03A9, 0x0313, 0x0342], NFKC: [0x1F6E], NFKD: [0x03A9, 0x0313, 0x0342] }, +{ source: [0x1F6F], NFC: [0x1F6F], NFD: [0x03A9, 0x0314, 0x0342], NFKC: [0x1F6F], NFKD: [0x03A9, 0x0314, 0x0342] }, +{ source: [0x1F70], NFC: [0x1F70], NFD: [0x03B1, 0x0300], NFKC: [0x1F70], NFKD: [0x03B1, 0x0300] }, +{ source: [0x1F71], NFC: [0x03AC], NFD: [0x03B1, 0x0301], NFKC: [0x03AC], NFKD: [0x03B1, 0x0301] }, +{ source: [0x1F72], NFC: [0x1F72], NFD: [0x03B5, 0x0300], NFKC: [0x1F72], NFKD: [0x03B5, 0x0300] }, +{ source: [0x1F73], NFC: [0x03AD], NFD: [0x03B5, 0x0301], NFKC: [0x03AD], NFKD: [0x03B5, 0x0301] }, +{ source: [0x1F74], NFC: [0x1F74], NFD: [0x03B7, 0x0300], NFKC: [0x1F74], NFKD: [0x03B7, 0x0300] }, +{ source: [0x1F75], NFC: [0x03AE], NFD: [0x03B7, 0x0301], NFKC: [0x03AE], NFKD: [0x03B7, 0x0301] }, +{ source: [0x1F76], NFC: [0x1F76], NFD: [0x03B9, 0x0300], NFKC: [0x1F76], NFKD: [0x03B9, 0x0300] }, +{ source: [0x1F77], NFC: [0x03AF], NFD: [0x03B9, 0x0301], NFKC: [0x03AF], NFKD: [0x03B9, 0x0301] }, +{ source: [0x1F78], NFC: [0x1F78], NFD: [0x03BF, 0x0300], NFKC: [0x1F78], NFKD: [0x03BF, 0x0300] }, +{ source: [0x1F79], NFC: [0x03CC], NFD: [0x03BF, 0x0301], NFKC: [0x03CC], NFKD: [0x03BF, 0x0301] }, +{ source: [0x1F7A], NFC: [0x1F7A], NFD: [0x03C5, 0x0300], NFKC: [0x1F7A], NFKD: [0x03C5, 0x0300] }, +{ source: [0x1F7B], NFC: [0x03CD], NFD: [0x03C5, 0x0301], NFKC: [0x03CD], NFKD: [0x03C5, 0x0301] }, +{ source: [0x1F7C], NFC: [0x1F7C], NFD: [0x03C9, 0x0300], NFKC: [0x1F7C], NFKD: [0x03C9, 0x0300] }, +{ source: [0x1F7D], NFC: [0x03CE], NFD: [0x03C9, 0x0301], NFKC: [0x03CE], NFKD: [0x03C9, 0x0301] }, +{ source: [0x1F80], NFC: [0x1F80], NFD: [0x03B1, 0x0313, 0x0345], NFKC: [0x1F80], NFKD: [0x03B1, 0x0313, 0x0345] }, +{ source: [0x1F81], NFC: [0x1F81], NFD: [0x03B1, 0x0314, 0x0345], NFKC: [0x1F81], NFKD: [0x03B1, 0x0314, 0x0345] }, +{ source: [0x1F82], NFC: [0x1F82], NFD: [0x03B1, 0x0313, 0x0300, 0x0345], NFKC: [0x1F82], NFKD: [0x03B1, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F83], NFC: [0x1F83], NFD: [0x03B1, 0x0314, 0x0300, 0x0345], NFKC: [0x1F83], NFKD: [0x03B1, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F84], NFC: [0x1F84], NFD: [0x03B1, 0x0313, 0x0301, 0x0345], NFKC: [0x1F84], NFKD: [0x03B1, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F85], NFC: [0x1F85], NFD: [0x03B1, 0x0314, 0x0301, 0x0345], NFKC: [0x1F85], NFKD: [0x03B1, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F86], NFC: [0x1F86], NFD: [0x03B1, 0x0313, 0x0342, 0x0345], NFKC: [0x1F86], NFKD: [0x03B1, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F87], NFC: [0x1F87], NFD: [0x03B1, 0x0314, 0x0342, 0x0345], NFKC: [0x1F87], NFKD: [0x03B1, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F88], NFC: [0x1F88], NFD: [0x0391, 0x0313, 0x0345], NFKC: [0x1F88], NFKD: [0x0391, 0x0313, 0x0345] }, +{ source: [0x1F89], NFC: [0x1F89], NFD: [0x0391, 0x0314, 0x0345], NFKC: [0x1F89], NFKD: [0x0391, 0x0314, 0x0345] }, +{ source: [0x1F8A], NFC: [0x1F8A], NFD: [0x0391, 0x0313, 0x0300, 0x0345], NFKC: [0x1F8A], NFKD: [0x0391, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F8B], NFC: [0x1F8B], NFD: [0x0391, 0x0314, 0x0300, 0x0345], NFKC: [0x1F8B], NFKD: [0x0391, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F8C], NFC: [0x1F8C], NFD: [0x0391, 0x0313, 0x0301, 0x0345], NFKC: [0x1F8C], NFKD: [0x0391, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F8D], NFC: [0x1F8D], NFD: [0x0391, 0x0314, 0x0301, 0x0345], NFKC: [0x1F8D], NFKD: [0x0391, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F8E], NFC: [0x1F8E], NFD: [0x0391, 0x0313, 0x0342, 0x0345], NFKC: [0x1F8E], NFKD: [0x0391, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F8F], NFC: [0x1F8F], NFD: [0x0391, 0x0314, 0x0342, 0x0345], NFKC: [0x1F8F], NFKD: [0x0391, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F90], NFC: [0x1F90], NFD: [0x03B7, 0x0313, 0x0345], NFKC: [0x1F90], NFKD: [0x03B7, 0x0313, 0x0345] }, +{ source: [0x1F91], NFC: [0x1F91], NFD: [0x03B7, 0x0314, 0x0345], NFKC: [0x1F91], NFKD: [0x03B7, 0x0314, 0x0345] }, +{ source: [0x1F92], NFC: [0x1F92], NFD: [0x03B7, 0x0313, 0x0300, 0x0345], NFKC: [0x1F92], NFKD: [0x03B7, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F93], NFC: [0x1F93], NFD: [0x03B7, 0x0314, 0x0300, 0x0345], NFKC: [0x1F93], NFKD: [0x03B7, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F94], NFC: [0x1F94], NFD: [0x03B7, 0x0313, 0x0301, 0x0345], NFKC: [0x1F94], NFKD: [0x03B7, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F95], NFC: [0x1F95], NFD: [0x03B7, 0x0314, 0x0301, 0x0345], NFKC: [0x1F95], NFKD: [0x03B7, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F96], NFC: [0x1F96], NFD: [0x03B7, 0x0313, 0x0342, 0x0345], NFKC: [0x1F96], NFKD: [0x03B7, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F97], NFC: [0x1F97], NFD: [0x03B7, 0x0314, 0x0342, 0x0345], NFKC: [0x1F97], NFKD: [0x03B7, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1F98], NFC: [0x1F98], NFD: [0x0397, 0x0313, 0x0345], NFKC: [0x1F98], NFKD: [0x0397, 0x0313, 0x0345] }, +{ source: [0x1F99], NFC: [0x1F99], NFD: [0x0397, 0x0314, 0x0345], NFKC: [0x1F99], NFKD: [0x0397, 0x0314, 0x0345] }, +{ source: [0x1F9A], NFC: [0x1F9A], NFD: [0x0397, 0x0313, 0x0300, 0x0345], NFKC: [0x1F9A], NFKD: [0x0397, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1F9B], NFC: [0x1F9B], NFD: [0x0397, 0x0314, 0x0300, 0x0345], NFKC: [0x1F9B], NFKD: [0x0397, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1F9C], NFC: [0x1F9C], NFD: [0x0397, 0x0313, 0x0301, 0x0345], NFKC: [0x1F9C], NFKD: [0x0397, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1F9D], NFC: [0x1F9D], NFD: [0x0397, 0x0314, 0x0301, 0x0345], NFKC: [0x1F9D], NFKD: [0x0397, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1F9E], NFC: [0x1F9E], NFD: [0x0397, 0x0313, 0x0342, 0x0345], NFKC: [0x1F9E], NFKD: [0x0397, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1F9F], NFC: [0x1F9F], NFD: [0x0397, 0x0314, 0x0342, 0x0345], NFKC: [0x1F9F], NFKD: [0x0397, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FA0], NFC: [0x1FA0], NFD: [0x03C9, 0x0313, 0x0345], NFKC: [0x1FA0], NFKD: [0x03C9, 0x0313, 0x0345] }, +{ source: [0x1FA1], NFC: [0x1FA1], NFD: [0x03C9, 0x0314, 0x0345], NFKC: [0x1FA1], NFKD: [0x03C9, 0x0314, 0x0345] }, +{ source: [0x1FA2], NFC: [0x1FA2], NFD: [0x03C9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FA2], NFKD: [0x03C9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FA3], NFC: [0x1FA3], NFD: [0x03C9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FA3], NFKD: [0x03C9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FA4], NFC: [0x1FA4], NFD: [0x03C9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FA4], NFKD: [0x03C9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FA5], NFC: [0x1FA5], NFD: [0x03C9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FA5], NFKD: [0x03C9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FA6], NFC: [0x1FA6], NFD: [0x03C9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FA6], NFKD: [0x03C9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FA7], NFC: [0x1FA7], NFD: [0x03C9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FA7], NFKD: [0x03C9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FA8], NFC: [0x1FA8], NFD: [0x03A9, 0x0313, 0x0345], NFKC: [0x1FA8], NFKD: [0x03A9, 0x0313, 0x0345] }, +{ source: [0x1FA9], NFC: [0x1FA9], NFD: [0x03A9, 0x0314, 0x0345], NFKC: [0x1FA9], NFKD: [0x03A9, 0x0314, 0x0345] }, +{ source: [0x1FAA], NFC: [0x1FAA], NFD: [0x03A9, 0x0313, 0x0300, 0x0345], NFKC: [0x1FAA], NFKD: [0x03A9, 0x0313, 0x0300, 0x0345] }, +{ source: [0x1FAB], NFC: [0x1FAB], NFD: [0x03A9, 0x0314, 0x0300, 0x0345], NFKC: [0x1FAB], NFKD: [0x03A9, 0x0314, 0x0300, 0x0345] }, +{ source: [0x1FAC], NFC: [0x1FAC], NFD: [0x03A9, 0x0313, 0x0301, 0x0345], NFKC: [0x1FAC], NFKD: [0x03A9, 0x0313, 0x0301, 0x0345] }, +{ source: [0x1FAD], NFC: [0x1FAD], NFD: [0x03A9, 0x0314, 0x0301, 0x0345], NFKC: [0x1FAD], NFKD: [0x03A9, 0x0314, 0x0301, 0x0345] }, +{ source: [0x1FAE], NFC: [0x1FAE], NFD: [0x03A9, 0x0313, 0x0342, 0x0345], NFKC: [0x1FAE], NFKD: [0x03A9, 0x0313, 0x0342, 0x0345] }, +{ source: [0x1FAF], NFC: [0x1FAF], NFD: [0x03A9, 0x0314, 0x0342, 0x0345], NFKC: [0x1FAF], NFKD: [0x03A9, 0x0314, 0x0342, 0x0345] }, +{ source: [0x1FB0], NFC: [0x1FB0], NFD: [0x03B1, 0x0306], NFKC: [0x1FB0], NFKD: [0x03B1, 0x0306] }, +{ source: [0x1FB1], NFC: [0x1FB1], NFD: [0x03B1, 0x0304], NFKC: [0x1FB1], NFKD: [0x03B1, 0x0304] }, +{ source: [0x1FB2], NFC: [0x1FB2], NFD: [0x03B1, 0x0300, 0x0345], NFKC: [0x1FB2], NFKD: [0x03B1, 0x0300, 0x0345] }, +{ source: [0x1FB3], NFC: [0x1FB3], NFD: [0x03B1, 0x0345], NFKC: [0x1FB3], NFKD: [0x03B1, 0x0345] }, +{ source: [0x1FB4], NFC: [0x1FB4], NFD: [0x03B1, 0x0301, 0x0345], NFKC: [0x1FB4], NFKD: [0x03B1, 0x0301, 0x0345] }, +{ source: [0x1FB6], NFC: [0x1FB6], NFD: [0x03B1, 0x0342], NFKC: [0x1FB6], NFKD: [0x03B1, 0x0342] }, +{ source: [0x1FB7], NFC: [0x1FB7], NFD: [0x03B1, 0x0342, 0x0345], NFKC: [0x1FB7], NFKD: [0x03B1, 0x0342, 0x0345] }, +{ source: [0x1FB8], NFC: [0x1FB8], NFD: [0x0391, 0x0306], NFKC: [0x1FB8], NFKD: [0x0391, 0x0306] }, +{ source: [0x1FB9], NFC: [0x1FB9], NFD: [0x0391, 0x0304], NFKC: [0x1FB9], NFKD: [0x0391, 0x0304] }, +{ source: [0x1FBA], NFC: [0x1FBA], NFD: [0x0391, 0x0300], NFKC: [0x1FBA], NFKD: [0x0391, 0x0300] }, +{ source: [0x1FBB], NFC: [0x0386], NFD: [0x0391, 0x0301], NFKC: [0x0386], NFKD: [0x0391, 0x0301] }, +{ source: [0x1FBC], NFC: [0x1FBC], NFD: [0x0391, 0x0345], NFKC: [0x1FBC], NFKD: [0x0391, 0x0345] }, +{ source: [0x1FBD], NFC: [0x1FBD], NFD: [0x1FBD], NFKC: [0x0020, 0x0313], NFKD: [0x0020, 0x0313] }, +{ source: [0x1FBE], NFC: [0x03B9], NFD: [0x03B9], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1FBF], NFC: [0x1FBF], NFD: [0x1FBF], NFKC: [0x0020, 0x0313], NFKD: [0x0020, 0x0313] }, +{ source: [0x1FC0], NFC: [0x1FC0], NFD: [0x1FC0], NFKC: [0x0020, 0x0342], NFKD: [0x0020, 0x0342] }, +{ source: [0x1FC1], NFC: [0x1FC1], NFD: [0x00A8, 0x0342], NFKC: [0x0020, 0x0308, 0x0342], NFKD: [0x0020, 0x0308, 0x0342] }, +{ source: [0x1FC2], NFC: [0x1FC2], NFD: [0x03B7, 0x0300, 0x0345], NFKC: [0x1FC2], NFKD: [0x03B7, 0x0300, 0x0345] }, +{ source: [0x1FC3], NFC: [0x1FC3], NFD: [0x03B7, 0x0345], NFKC: [0x1FC3], NFKD: [0x03B7, 0x0345] }, +{ source: [0x1FC4], NFC: [0x1FC4], NFD: [0x03B7, 0x0301, 0x0345], NFKC: [0x1FC4], NFKD: [0x03B7, 0x0301, 0x0345] }, +{ source: [0x1FC6], NFC: [0x1FC6], NFD: [0x03B7, 0x0342], NFKC: [0x1FC6], NFKD: [0x03B7, 0x0342] }, +{ source: [0x1FC7], NFC: [0x1FC7], NFD: [0x03B7, 0x0342, 0x0345], NFKC: [0x1FC7], NFKD: [0x03B7, 0x0342, 0x0345] }, +{ source: [0x1FC8], NFC: [0x1FC8], NFD: [0x0395, 0x0300], NFKC: [0x1FC8], NFKD: [0x0395, 0x0300] }, +{ source: [0x1FC9], NFC: [0x0388], NFD: [0x0395, 0x0301], NFKC: [0x0388], NFKD: [0x0395, 0x0301] }, +{ source: [0x1FCA], NFC: [0x1FCA], NFD: [0x0397, 0x0300], NFKC: [0x1FCA], NFKD: [0x0397, 0x0300] }, +{ source: [0x1FCB], NFC: [0x0389], NFD: [0x0397, 0x0301], NFKC: [0x0389], NFKD: [0x0397, 0x0301] }, +{ source: [0x1FCC], NFC: [0x1FCC], NFD: [0x0397, 0x0345], NFKC: [0x1FCC], NFKD: [0x0397, 0x0345] }, +{ source: [0x1FCD], NFC: [0x1FCD], NFD: [0x1FBF, 0x0300], NFKC: [0x0020, 0x0313, 0x0300], NFKD: [0x0020, 0x0313, 0x0300] }, +{ source: [0x1FCE], NFC: [0x1FCE], NFD: [0x1FBF, 0x0301], NFKC: [0x0020, 0x0313, 0x0301], NFKD: [0x0020, 0x0313, 0x0301] }, +{ source: [0x1FCF], NFC: [0x1FCF], NFD: [0x1FBF, 0x0342], NFKC: [0x0020, 0x0313, 0x0342], NFKD: [0x0020, 0x0313, 0x0342] }, +{ source: [0x1FD0], NFC: [0x1FD0], NFD: [0x03B9, 0x0306], NFKC: [0x1FD0], NFKD: [0x03B9, 0x0306] }, +{ source: [0x1FD1], NFC: [0x1FD1], NFD: [0x03B9, 0x0304], NFKC: [0x1FD1], NFKD: [0x03B9, 0x0304] }, +{ source: [0x1FD2], NFC: [0x1FD2], NFD: [0x03B9, 0x0308, 0x0300], NFKC: [0x1FD2], NFKD: [0x03B9, 0x0308, 0x0300] }, +{ source: [0x1FD3], NFC: [0x0390], NFD: [0x03B9, 0x0308, 0x0301], NFKC: [0x0390], NFKD: [0x03B9, 0x0308, 0x0301] }, +{ source: [0x1FD6], NFC: [0x1FD6], NFD: [0x03B9, 0x0342], NFKC: [0x1FD6], NFKD: [0x03B9, 0x0342] }, +{ source: [0x1FD7], NFC: [0x1FD7], NFD: [0x03B9, 0x0308, 0x0342], NFKC: [0x1FD7], NFKD: [0x03B9, 0x0308, 0x0342] }, +{ source: [0x1FD8], NFC: [0x1FD8], NFD: [0x0399, 0x0306], NFKC: [0x1FD8], NFKD: [0x0399, 0x0306] }, +{ source: [0x1FD9], NFC: [0x1FD9], NFD: [0x0399, 0x0304], NFKC: [0x1FD9], NFKD: [0x0399, 0x0304] }, +{ source: [0x1FDA], NFC: [0x1FDA], NFD: [0x0399, 0x0300], NFKC: [0x1FDA], NFKD: [0x0399, 0x0300] }, +{ source: [0x1FDB], NFC: [0x038A], NFD: [0x0399, 0x0301], NFKC: [0x038A], NFKD: [0x0399, 0x0301] }, +{ source: [0x1FDD], NFC: [0x1FDD], NFD: [0x1FFE, 0x0300], NFKC: [0x0020, 0x0314, 0x0300], NFKD: [0x0020, 0x0314, 0x0300] }, +{ source: [0x1FDE], NFC: [0x1FDE], NFD: [0x1FFE, 0x0301], NFKC: [0x0020, 0x0314, 0x0301], NFKD: [0x0020, 0x0314, 0x0301] }, +{ source: [0x1FDF], NFC: [0x1FDF], NFD: [0x1FFE, 0x0342], NFKC: [0x0020, 0x0314, 0x0342], NFKD: [0x0020, 0x0314, 0x0342] }, +{ source: [0x1FE0], NFC: [0x1FE0], NFD: [0x03C5, 0x0306], NFKC: [0x1FE0], NFKD: [0x03C5, 0x0306] }, +{ source: [0x1FE1], NFC: [0x1FE1], NFD: [0x03C5, 0x0304], NFKC: [0x1FE1], NFKD: [0x03C5, 0x0304] }, +{ source: [0x1FE2], NFC: [0x1FE2], NFD: [0x03C5, 0x0308, 0x0300], NFKC: [0x1FE2], NFKD: [0x03C5, 0x0308, 0x0300] }, +{ source: [0x1FE3], NFC: [0x03B0], NFD: [0x03C5, 0x0308, 0x0301], NFKC: [0x03B0], NFKD: [0x03C5, 0x0308, 0x0301] }, +{ source: [0x1FE4], NFC: [0x1FE4], NFD: [0x03C1, 0x0313], NFKC: [0x1FE4], NFKD: [0x03C1, 0x0313] }, +{ source: [0x1FE5], NFC: [0x1FE5], NFD: [0x03C1, 0x0314], NFKC: [0x1FE5], NFKD: [0x03C1, 0x0314] }, +{ source: [0x1FE6], NFC: [0x1FE6], NFD: [0x03C5, 0x0342], NFKC: [0x1FE6], NFKD: [0x03C5, 0x0342] }, +{ source: [0x1FE7], NFC: [0x1FE7], NFD: [0x03C5, 0x0308, 0x0342], NFKC: [0x1FE7], NFKD: [0x03C5, 0x0308, 0x0342] }, +{ source: [0x1FE8], NFC: [0x1FE8], NFD: [0x03A5, 0x0306], NFKC: [0x1FE8], NFKD: [0x03A5, 0x0306] }, +{ source: [0x1FE9], NFC: [0x1FE9], NFD: [0x03A5, 0x0304], NFKC: [0x1FE9], NFKD: [0x03A5, 0x0304] }, +{ source: [0x1FEA], NFC: [0x1FEA], NFD: [0x03A5, 0x0300], NFKC: [0x1FEA], NFKD: [0x03A5, 0x0300] }, +{ source: [0x1FEB], NFC: [0x038E], NFD: [0x03A5, 0x0301], NFKC: [0x038E], NFKD: [0x03A5, 0x0301] }, +{ source: [0x1FEC], NFC: [0x1FEC], NFD: [0x03A1, 0x0314], NFKC: [0x1FEC], NFKD: [0x03A1, 0x0314] }, +{ source: [0x1FED], NFC: [0x1FED], NFD: [0x00A8, 0x0300], NFKC: [0x0020, 0x0308, 0x0300], NFKD: [0x0020, 0x0308, 0x0300] }, +{ source: [0x1FEE], NFC: [0x0385], NFD: [0x00A8, 0x0301], NFKC: [0x0020, 0x0308, 0x0301], NFKD: [0x0020, 0x0308, 0x0301] }, +{ source: [0x1FEF], NFC: [0x0060], NFD: [0x0060], NFKC: [0x0060], NFKD: [0x0060] }, +{ source: [0x1FF2], NFC: [0x1FF2], NFD: [0x03C9, 0x0300, 0x0345], NFKC: [0x1FF2], NFKD: [0x03C9, 0x0300, 0x0345] }, +{ source: [0x1FF3], NFC: [0x1FF3], NFD: [0x03C9, 0x0345], NFKC: [0x1FF3], NFKD: [0x03C9, 0x0345] }, +{ source: [0x1FF4], NFC: [0x1FF4], NFD: [0x03C9, 0x0301, 0x0345], NFKC: [0x1FF4], NFKD: [0x03C9, 0x0301, 0x0345] }, +{ source: [0x1FF6], NFC: [0x1FF6], NFD: [0x03C9, 0x0342], NFKC: [0x1FF6], NFKD: [0x03C9, 0x0342] }, +{ source: [0x1FF7], NFC: [0x1FF7], NFD: [0x03C9, 0x0342, 0x0345], NFKC: [0x1FF7], NFKD: [0x03C9, 0x0342, 0x0345] }, +{ source: [0x1FF8], NFC: [0x1FF8], NFD: [0x039F, 0x0300], NFKC: [0x1FF8], NFKD: [0x039F, 0x0300] }, +{ source: [0x1FF9], NFC: [0x038C], NFD: [0x039F, 0x0301], NFKC: [0x038C], NFKD: [0x039F, 0x0301] }, +{ source: [0x1FFA], NFC: [0x1FFA], NFD: [0x03A9, 0x0300], NFKC: [0x1FFA], NFKD: [0x03A9, 0x0300] }, +{ source: [0x1FFB], NFC: [0x038F], NFD: [0x03A9, 0x0301], NFKC: [0x038F], NFKD: [0x03A9, 0x0301] }, +{ source: [0x1FFC], NFC: [0x1FFC], NFD: [0x03A9, 0x0345], NFKC: [0x1FFC], NFKD: [0x03A9, 0x0345] }, +{ source: [0x1FFD], NFC: [0x00B4], NFD: [0x00B4], NFKC: [0x0020, 0x0301], NFKD: [0x0020, 0x0301] }, +{ source: [0x1FFE], NFC: [0x1FFE], NFD: [0x1FFE], NFKC: [0x0020, 0x0314], NFKD: [0x0020, 0x0314] }, +{ source: [0x2000], NFC: [0x2002], NFD: [0x2002], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2001], NFC: [0x2003], NFD: [0x2003], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2002], NFC: [0x2002], NFD: [0x2002], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2003], NFC: [0x2003], NFD: [0x2003], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2004], NFC: [0x2004], NFD: [0x2004], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2005], NFC: [0x2005], NFD: [0x2005], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2006], NFC: [0x2006], NFD: [0x2006], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2007], NFC: [0x2007], NFD: [0x2007], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2008], NFC: [0x2008], NFD: [0x2008], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2009], NFC: [0x2009], NFD: [0x2009], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x200A], NFC: [0x200A], NFD: [0x200A], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2011], NFC: [0x2011], NFD: [0x2011], NFKC: [0x2010], NFKD: [0x2010] }, +{ source: [0x2017], NFC: [0x2017], NFD: [0x2017], NFKC: [0x0020, 0x0333], NFKD: [0x0020, 0x0333] }, +{ source: [0x2024], NFC: [0x2024], NFD: [0x2024], NFKC: [0x002E], NFKD: [0x002E] }, +{ source: [0x2025], NFC: [0x2025], NFD: [0x2025], NFKC: [0x002E, 0x002E], NFKD: [0x002E, 0x002E] }, +{ source: [0x2026], NFC: [0x2026], NFD: [0x2026], NFKC: [0x002E, 0x002E, 0x002E], NFKD: [0x002E, 0x002E, 0x002E] }, +{ source: [0x202F], NFC: [0x202F], NFD: [0x202F], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2033], NFC: [0x2033], NFD: [0x2033], NFKC: [0x2032, 0x2032], NFKD: [0x2032, 0x2032] }, +{ source: [0x2034], NFC: [0x2034], NFD: [0x2034], NFKC: [0x2032, 0x2032, 0x2032], NFKD: [0x2032, 0x2032, 0x2032] }, +{ source: [0x2036], NFC: [0x2036], NFD: [0x2036], NFKC: [0x2035, 0x2035], NFKD: [0x2035, 0x2035] }, +{ source: [0x2037], NFC: [0x2037], NFD: [0x2037], NFKC: [0x2035, 0x2035, 0x2035], NFKD: [0x2035, 0x2035, 0x2035] }, +{ source: [0x203C], NFC: [0x203C], NFD: [0x203C], NFKC: [0x0021, 0x0021], NFKD: [0x0021, 0x0021] }, +{ source: [0x203E], NFC: [0x203E], NFD: [0x203E], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0x2047], NFC: [0x2047], NFD: [0x2047], NFKC: [0x003F, 0x003F], NFKD: [0x003F, 0x003F] }, +{ source: [0x2048], NFC: [0x2048], NFD: [0x2048], NFKC: [0x003F, 0x0021], NFKD: [0x003F, 0x0021] }, +{ source: [0x2049], NFC: [0x2049], NFD: [0x2049], NFKC: [0x0021, 0x003F], NFKD: [0x0021, 0x003F] }, +{ source: [0x2057], NFC: [0x2057], NFD: [0x2057], NFKC: [0x2032, 0x2032, 0x2032, 0x2032], NFKD: [0x2032, 0x2032, 0x2032, 0x2032] }, +{ source: [0x205F], NFC: [0x205F], NFD: [0x205F], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x2070], NFC: [0x2070], NFD: [0x2070], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x2071], NFC: [0x2071], NFD: [0x2071], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x2074], NFC: [0x2074], NFD: [0x2074], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x2075], NFC: [0x2075], NFD: [0x2075], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x2076], NFC: [0x2076], NFD: [0x2076], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x2077], NFC: [0x2077], NFD: [0x2077], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x2078], NFC: [0x2078], NFD: [0x2078], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x2079], NFC: [0x2079], NFD: [0x2079], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x207A], NFC: [0x207A], NFD: [0x207A], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0x207B], NFC: [0x207B], NFD: [0x207B], NFKC: [0x2212], NFKD: [0x2212] }, +{ source: [0x207C], NFC: [0x207C], NFD: [0x207C], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0x207D], NFC: [0x207D], NFD: [0x207D], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0x207E], NFC: [0x207E], NFD: [0x207E], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0x207F], NFC: [0x207F], NFD: [0x207F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x2080], NFC: [0x2080], NFD: [0x2080], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x2081], NFC: [0x2081], NFD: [0x2081], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x2082], NFC: [0x2082], NFD: [0x2082], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x2083], NFC: [0x2083], NFD: [0x2083], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x2084], NFC: [0x2084], NFD: [0x2084], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x2085], NFC: [0x2085], NFD: [0x2085], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x2086], NFC: [0x2086], NFD: [0x2086], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x2087], NFC: [0x2087], NFD: [0x2087], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x2088], NFC: [0x2088], NFD: [0x2088], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x2089], NFC: [0x2089], NFD: [0x2089], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x208A], NFC: [0x208A], NFD: [0x208A], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0x208B], NFC: [0x208B], NFD: [0x208B], NFKC: [0x2212], NFKD: [0x2212] }, +{ source: [0x208C], NFC: [0x208C], NFD: [0x208C], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0x208D], NFC: [0x208D], NFD: [0x208D], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0x208E], NFC: [0x208E], NFD: [0x208E], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0x2090], NFC: [0x2090], NFD: [0x2090], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x2091], NFC: [0x2091], NFD: [0x2091], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x2092], NFC: [0x2092], NFD: [0x2092], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x2093], NFC: [0x2093], NFD: [0x2093], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x2094], NFC: [0x2094], NFD: [0x2094], NFKC: [0x0259], NFKD: [0x0259] }, +{ source: [0x2095], NFC: [0x2095], NFD: [0x2095], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x2096], NFC: [0x2096], NFD: [0x2096], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x2097], NFC: [0x2097], NFD: [0x2097], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x2098], NFC: [0x2098], NFD: [0x2098], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x2099], NFC: [0x2099], NFD: [0x2099], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x209A], NFC: [0x209A], NFD: [0x209A], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x209B], NFC: [0x209B], NFD: [0x209B], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x209C], NFC: [0x209C], NFD: [0x209C], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x20A8], NFC: [0x20A8], NFD: [0x20A8], NFKC: [0x0052, 0x0073], NFKD: [0x0052, 0x0073] }, +{ source: [0x2100], NFC: [0x2100], NFD: [0x2100], NFKC: [0x0061, 0x002F, 0x0063], NFKD: [0x0061, 0x002F, 0x0063] }, +{ source: [0x2101], NFC: [0x2101], NFD: [0x2101], NFKC: [0x0061, 0x002F, 0x0073], NFKD: [0x0061, 0x002F, 0x0073] }, +{ source: [0x2102], NFC: [0x2102], NFD: [0x2102], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x2103], NFC: [0x2103], NFD: [0x2103], NFKC: [0x00B0, 0x0043], NFKD: [0x00B0, 0x0043] }, +{ source: [0x2105], NFC: [0x2105], NFD: [0x2105], NFKC: [0x0063, 0x002F, 0x006F], NFKD: [0x0063, 0x002F, 0x006F] }, +{ source: [0x2106], NFC: [0x2106], NFD: [0x2106], NFKC: [0x0063, 0x002F, 0x0075], NFKD: [0x0063, 0x002F, 0x0075] }, +{ source: [0x2107], NFC: [0x2107], NFD: [0x2107], NFKC: [0x0190], NFKD: [0x0190] }, +{ source: [0x2109], NFC: [0x2109], NFD: [0x2109], NFKC: [0x00B0, 0x0046], NFKD: [0x00B0, 0x0046] }, +{ source: [0x210A], NFC: [0x210A], NFD: [0x210A], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x210B], NFC: [0x210B], NFD: [0x210B], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x210C], NFC: [0x210C], NFD: [0x210C], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x210D], NFC: [0x210D], NFD: [0x210D], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x210E], NFC: [0x210E], NFD: [0x210E], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x210F], NFC: [0x210F], NFD: [0x210F], NFKC: [0x0127], NFKD: [0x0127] }, +{ source: [0x2110], NFC: [0x2110], NFD: [0x2110], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x2111], NFC: [0x2111], NFD: [0x2111], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x2112], NFC: [0x2112], NFD: [0x2112], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x2113], NFC: [0x2113], NFD: [0x2113], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x2115], NFC: [0x2115], NFD: [0x2115], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x2116], NFC: [0x2116], NFD: [0x2116], NFKC: [0x004E, 0x006F], NFKD: [0x004E, 0x006F] }, +{ source: [0x2119], NFC: [0x2119], NFD: [0x2119], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x211A], NFC: [0x211A], NFD: [0x211A], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x211B], NFC: [0x211B], NFD: [0x211B], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x211C], NFC: [0x211C], NFD: [0x211C], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x211D], NFC: [0x211D], NFD: [0x211D], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x2120], NFC: [0x2120], NFD: [0x2120], NFKC: [0x0053, 0x004D], NFKD: [0x0053, 0x004D] }, +{ source: [0x2121], NFC: [0x2121], NFD: [0x2121], NFKC: [0x0054, 0x0045, 0x004C], NFKD: [0x0054, 0x0045, 0x004C] }, +{ source: [0x2122], NFC: [0x2122], NFD: [0x2122], NFKC: [0x0054, 0x004D], NFKD: [0x0054, 0x004D] }, +{ source: [0x2124], NFC: [0x2124], NFD: [0x2124], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x2126], NFC: [0x03A9], NFD: [0x03A9], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x2128], NFC: [0x2128], NFD: [0x2128], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x212A], NFC: [0x004B], NFD: [0x004B], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x212B], NFC: [0x00C5], NFD: [0x0041, 0x030A], NFKC: [0x00C5], NFKD: [0x0041, 0x030A] }, +{ source: [0x212C], NFC: [0x212C], NFD: [0x212C], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x212D], NFC: [0x212D], NFD: [0x212D], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x212F], NFC: [0x212F], NFD: [0x212F], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x2130], NFC: [0x2130], NFD: [0x2130], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x2131], NFC: [0x2131], NFD: [0x2131], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x2133], NFC: [0x2133], NFD: [0x2133], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x2134], NFC: [0x2134], NFD: [0x2134], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x2135], NFC: [0x2135], NFD: [0x2135], NFKC: [0x05D0], NFKD: [0x05D0] }, +{ source: [0x2136], NFC: [0x2136], NFD: [0x2136], NFKC: [0x05D1], NFKD: [0x05D1] }, +{ source: [0x2137], NFC: [0x2137], NFD: [0x2137], NFKC: [0x05D2], NFKD: [0x05D2] }, +{ source: [0x2138], NFC: [0x2138], NFD: [0x2138], NFKC: [0x05D3], NFKD: [0x05D3] }, +{ source: [0x2139], NFC: [0x2139], NFD: [0x2139], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x213B], NFC: [0x213B], NFD: [0x213B], NFKC: [0x0046, 0x0041, 0x0058], NFKD: [0x0046, 0x0041, 0x0058] }, +{ source: [0x213C], NFC: [0x213C], NFD: [0x213C], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x213D], NFC: [0x213D], NFD: [0x213D], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x213E], NFC: [0x213E], NFD: [0x213E], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x213F], NFC: [0x213F], NFD: [0x213F], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x2140], NFC: [0x2140], NFD: [0x2140], NFKC: [0x2211], NFKD: [0x2211] }, +{ source: [0x2145], NFC: [0x2145], NFD: [0x2145], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x2146], NFC: [0x2146], NFD: [0x2146], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x2147], NFC: [0x2147], NFD: [0x2147], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x2148], NFC: [0x2148], NFD: [0x2148], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x2149], NFC: [0x2149], NFD: [0x2149], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x2150], NFC: [0x2150], NFD: [0x2150], NFKC: [0x0031, 0x2044, 0x0037], NFKD: [0x0031, 0x2044, 0x0037] }, +{ source: [0x2151], NFC: [0x2151], NFD: [0x2151], NFKC: [0x0031, 0x2044, 0x0039], NFKD: [0x0031, 0x2044, 0x0039] }, +{ source: [0x2152], NFC: [0x2152], NFD: [0x2152], NFKC: [0x0031, 0x2044, 0x0031, 0x0030], NFKD: [0x0031, 0x2044, 0x0031, 0x0030] }, +{ source: [0x2153], NFC: [0x2153], NFD: [0x2153], NFKC: [0x0031, 0x2044, 0x0033], NFKD: [0x0031, 0x2044, 0x0033] }, +{ source: [0x2154], NFC: [0x2154], NFD: [0x2154], NFKC: [0x0032, 0x2044, 0x0033], NFKD: [0x0032, 0x2044, 0x0033] }, +{ source: [0x2155], NFC: [0x2155], NFD: [0x2155], NFKC: [0x0031, 0x2044, 0x0035], NFKD: [0x0031, 0x2044, 0x0035] }, +{ source: [0x2156], NFC: [0x2156], NFD: [0x2156], NFKC: [0x0032, 0x2044, 0x0035], NFKD: [0x0032, 0x2044, 0x0035] }, +{ source: [0x2157], NFC: [0x2157], NFD: [0x2157], NFKC: [0x0033, 0x2044, 0x0035], NFKD: [0x0033, 0x2044, 0x0035] }, +{ source: [0x2158], NFC: [0x2158], NFD: [0x2158], NFKC: [0x0034, 0x2044, 0x0035], NFKD: [0x0034, 0x2044, 0x0035] }, +{ source: [0x2159], NFC: [0x2159], NFD: [0x2159], NFKC: [0x0031, 0x2044, 0x0036], NFKD: [0x0031, 0x2044, 0x0036] }, +{ source: [0x215A], NFC: [0x215A], NFD: [0x215A], NFKC: [0x0035, 0x2044, 0x0036], NFKD: [0x0035, 0x2044, 0x0036] }, +{ source: [0x215B], NFC: [0x215B], NFD: [0x215B], NFKC: [0x0031, 0x2044, 0x0038], NFKD: [0x0031, 0x2044, 0x0038] }, +{ source: [0x215C], NFC: [0x215C], NFD: [0x215C], NFKC: [0x0033, 0x2044, 0x0038], NFKD: [0x0033, 0x2044, 0x0038] }, +{ source: [0x215D], NFC: [0x215D], NFD: [0x215D], NFKC: [0x0035, 0x2044, 0x0038], NFKD: [0x0035, 0x2044, 0x0038] }, +{ source: [0x215E], NFC: [0x215E], NFD: [0x215E], NFKC: [0x0037, 0x2044, 0x0038], NFKD: [0x0037, 0x2044, 0x0038] }, +{ source: [0x215F], NFC: [0x215F], NFD: [0x215F], NFKC: [0x0031, 0x2044], NFKD: [0x0031, 0x2044] }, +{ source: [0x2160], NFC: [0x2160], NFD: [0x2160], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x2161], NFC: [0x2161], NFD: [0x2161], NFKC: [0x0049, 0x0049], NFKD: [0x0049, 0x0049] }, +{ source: [0x2162], NFC: [0x2162], NFD: [0x2162], NFKC: [0x0049, 0x0049, 0x0049], NFKD: [0x0049, 0x0049, 0x0049] }, +{ source: [0x2163], NFC: [0x2163], NFD: [0x2163], NFKC: [0x0049, 0x0056], NFKD: [0x0049, 0x0056] }, +{ source: [0x2164], NFC: [0x2164], NFD: [0x2164], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x2165], NFC: [0x2165], NFD: [0x2165], NFKC: [0x0056, 0x0049], NFKD: [0x0056, 0x0049] }, +{ source: [0x2166], NFC: [0x2166], NFD: [0x2166], NFKC: [0x0056, 0x0049, 0x0049], NFKD: [0x0056, 0x0049, 0x0049] }, +{ source: [0x2167], NFC: [0x2167], NFD: [0x2167], NFKC: [0x0056, 0x0049, 0x0049, 0x0049], NFKD: [0x0056, 0x0049, 0x0049, 0x0049] }, +{ source: [0x2168], NFC: [0x2168], NFD: [0x2168], NFKC: [0x0049, 0x0058], NFKD: [0x0049, 0x0058] }, +{ source: [0x2169], NFC: [0x2169], NFD: [0x2169], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x216A], NFC: [0x216A], NFD: [0x216A], NFKC: [0x0058, 0x0049], NFKD: [0x0058, 0x0049] }, +{ source: [0x216B], NFC: [0x216B], NFD: [0x216B], NFKC: [0x0058, 0x0049, 0x0049], NFKD: [0x0058, 0x0049, 0x0049] }, +{ source: [0x216C], NFC: [0x216C], NFD: [0x216C], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x216D], NFC: [0x216D], NFD: [0x216D], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x216E], NFC: [0x216E], NFD: [0x216E], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x216F], NFC: [0x216F], NFD: [0x216F], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x2170], NFC: [0x2170], NFD: [0x2170], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x2171], NFC: [0x2171], NFD: [0x2171], NFKC: [0x0069, 0x0069], NFKD: [0x0069, 0x0069] }, +{ source: [0x2172], NFC: [0x2172], NFD: [0x2172], NFKC: [0x0069, 0x0069, 0x0069], NFKD: [0x0069, 0x0069, 0x0069] }, +{ source: [0x2173], NFC: [0x2173], NFD: [0x2173], NFKC: [0x0069, 0x0076], NFKD: [0x0069, 0x0076] }, +{ source: [0x2174], NFC: [0x2174], NFD: [0x2174], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x2175], NFC: [0x2175], NFD: [0x2175], NFKC: [0x0076, 0x0069], NFKD: [0x0076, 0x0069] }, +{ source: [0x2176], NFC: [0x2176], NFD: [0x2176], NFKC: [0x0076, 0x0069, 0x0069], NFKD: [0x0076, 0x0069, 0x0069] }, +{ source: [0x2177], NFC: [0x2177], NFD: [0x2177], NFKC: [0x0076, 0x0069, 0x0069, 0x0069], NFKD: [0x0076, 0x0069, 0x0069, 0x0069] }, +{ source: [0x2178], NFC: [0x2178], NFD: [0x2178], NFKC: [0x0069, 0x0078], NFKD: [0x0069, 0x0078] }, +{ source: [0x2179], NFC: [0x2179], NFD: [0x2179], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x217A], NFC: [0x217A], NFD: [0x217A], NFKC: [0x0078, 0x0069], NFKD: [0x0078, 0x0069] }, +{ source: [0x217B], NFC: [0x217B], NFD: [0x217B], NFKC: [0x0078, 0x0069, 0x0069], NFKD: [0x0078, 0x0069, 0x0069] }, +{ source: [0x217C], NFC: [0x217C], NFD: [0x217C], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x217D], NFC: [0x217D], NFD: [0x217D], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x217E], NFC: [0x217E], NFD: [0x217E], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x217F], NFC: [0x217F], NFD: [0x217F], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x2189], NFC: [0x2189], NFD: [0x2189], NFKC: [0x0030, 0x2044, 0x0033], NFKD: [0x0030, 0x2044, 0x0033] }, +{ source: [0x219A], NFC: [0x219A], NFD: [0x2190, 0x0338], NFKC: [0x219A], NFKD: [0x2190, 0x0338] }, +{ source: [0x219B], NFC: [0x219B], NFD: [0x2192, 0x0338], NFKC: [0x219B], NFKD: [0x2192, 0x0338] }, +{ source: [0x21AE], NFC: [0x21AE], NFD: [0x2194, 0x0338], NFKC: [0x21AE], NFKD: [0x2194, 0x0338] }, +{ source: [0x21CD], NFC: [0x21CD], NFD: [0x21D0, 0x0338], NFKC: [0x21CD], NFKD: [0x21D0, 0x0338] }, +{ source: [0x21CE], NFC: [0x21CE], NFD: [0x21D4, 0x0338], NFKC: [0x21CE], NFKD: [0x21D4, 0x0338] }, +{ source: [0x21CF], NFC: [0x21CF], NFD: [0x21D2, 0x0338], NFKC: [0x21CF], NFKD: [0x21D2, 0x0338] }, +{ source: [0x2204], NFC: [0x2204], NFD: [0x2203, 0x0338], NFKC: [0x2204], NFKD: [0x2203, 0x0338] }, +{ source: [0x2209], NFC: [0x2209], NFD: [0x2208, 0x0338], NFKC: [0x2209], NFKD: [0x2208, 0x0338] }, +{ source: [0x220C], NFC: [0x220C], NFD: [0x220B, 0x0338], NFKC: [0x220C], NFKD: [0x220B, 0x0338] }, +{ source: [0x2224], NFC: [0x2224], NFD: [0x2223, 0x0338], NFKC: [0x2224], NFKD: [0x2223, 0x0338] }, +{ source: [0x2226], NFC: [0x2226], NFD: [0x2225, 0x0338], NFKC: [0x2226], NFKD: [0x2225, 0x0338] }, +{ source: [0x222C], NFC: [0x222C], NFD: [0x222C], NFKC: [0x222B, 0x222B], NFKD: [0x222B, 0x222B] }, +{ source: [0x222D], NFC: [0x222D], NFD: [0x222D], NFKC: [0x222B, 0x222B, 0x222B], NFKD: [0x222B, 0x222B, 0x222B] }, +{ source: [0x222F], NFC: [0x222F], NFD: [0x222F], NFKC: [0x222E, 0x222E], NFKD: [0x222E, 0x222E] }, +{ source: [0x2230], NFC: [0x2230], NFD: [0x2230], NFKC: [0x222E, 0x222E, 0x222E], NFKD: [0x222E, 0x222E, 0x222E] }, +{ source: [0x2241], NFC: [0x2241], NFD: [0x223C, 0x0338], NFKC: [0x2241], NFKD: [0x223C, 0x0338] }, +{ source: [0x2244], NFC: [0x2244], NFD: [0x2243, 0x0338], NFKC: [0x2244], NFKD: [0x2243, 0x0338] }, +{ source: [0x2247], NFC: [0x2247], NFD: [0x2245, 0x0338], NFKC: [0x2247], NFKD: [0x2245, 0x0338] }, +{ source: [0x2249], NFC: [0x2249], NFD: [0x2248, 0x0338], NFKC: [0x2249], NFKD: [0x2248, 0x0338] }, +{ source: [0x2260], NFC: [0x2260], NFD: [0x003D, 0x0338], NFKC: [0x2260], NFKD: [0x003D, 0x0338] }, +{ source: [0x2262], NFC: [0x2262], NFD: [0x2261, 0x0338], NFKC: [0x2262], NFKD: [0x2261, 0x0338] }, +{ source: [0x226D], NFC: [0x226D], NFD: [0x224D, 0x0338], NFKC: [0x226D], NFKD: [0x224D, 0x0338] }, +{ source: [0x226E], NFC: [0x226E], NFD: [0x003C, 0x0338], NFKC: [0x226E], NFKD: [0x003C, 0x0338] }, +{ source: [0x226F], NFC: [0x226F], NFD: [0x003E, 0x0338], NFKC: [0x226F], NFKD: [0x003E, 0x0338] }, +{ source: [0x2270], NFC: [0x2270], NFD: [0x2264, 0x0338], NFKC: [0x2270], NFKD: [0x2264, 0x0338] }, +{ source: [0x2271], NFC: [0x2271], NFD: [0x2265, 0x0338], NFKC: [0x2271], NFKD: [0x2265, 0x0338] }, +{ source: [0x2274], NFC: [0x2274], NFD: [0x2272, 0x0338], NFKC: [0x2274], NFKD: [0x2272, 0x0338] }, +{ source: [0x2275], NFC: [0x2275], NFD: [0x2273, 0x0338], NFKC: [0x2275], NFKD: [0x2273, 0x0338] }, +{ source: [0x2278], NFC: [0x2278], NFD: [0x2276, 0x0338], NFKC: [0x2278], NFKD: [0x2276, 0x0338] }, +{ source: [0x2279], NFC: [0x2279], NFD: [0x2277, 0x0338], NFKC: [0x2279], NFKD: [0x2277, 0x0338] }, +{ source: [0x2280], NFC: [0x2280], NFD: [0x227A, 0x0338], NFKC: [0x2280], NFKD: [0x227A, 0x0338] }, +{ source: [0x2281], NFC: [0x2281], NFD: [0x227B, 0x0338], NFKC: [0x2281], NFKD: [0x227B, 0x0338] }, +{ source: [0x2284], NFC: [0x2284], NFD: [0x2282, 0x0338], NFKC: [0x2284], NFKD: [0x2282, 0x0338] }, +{ source: [0x2285], NFC: [0x2285], NFD: [0x2283, 0x0338], NFKC: [0x2285], NFKD: [0x2283, 0x0338] }, +{ source: [0x2288], NFC: [0x2288], NFD: [0x2286, 0x0338], NFKC: [0x2288], NFKD: [0x2286, 0x0338] }, +{ source: [0x2289], NFC: [0x2289], NFD: [0x2287, 0x0338], NFKC: [0x2289], NFKD: [0x2287, 0x0338] }, +{ source: [0x22AC], NFC: [0x22AC], NFD: [0x22A2, 0x0338], NFKC: [0x22AC], NFKD: [0x22A2, 0x0338] }, +{ source: [0x22AD], NFC: [0x22AD], NFD: [0x22A8, 0x0338], NFKC: [0x22AD], NFKD: [0x22A8, 0x0338] }, +{ source: [0x22AE], NFC: [0x22AE], NFD: [0x22A9, 0x0338], NFKC: [0x22AE], NFKD: [0x22A9, 0x0338] }, +{ source: [0x22AF], NFC: [0x22AF], NFD: [0x22AB, 0x0338], NFKC: [0x22AF], NFKD: [0x22AB, 0x0338] }, +{ source: [0x22E0], NFC: [0x22E0], NFD: [0x227C, 0x0338], NFKC: [0x22E0], NFKD: [0x227C, 0x0338] }, +{ source: [0x22E1], NFC: [0x22E1], NFD: [0x227D, 0x0338], NFKC: [0x22E1], NFKD: [0x227D, 0x0338] }, +{ source: [0x22E2], NFC: [0x22E2], NFD: [0x2291, 0x0338], NFKC: [0x22E2], NFKD: [0x2291, 0x0338] }, +{ source: [0x22E3], NFC: [0x22E3], NFD: [0x2292, 0x0338], NFKC: [0x22E3], NFKD: [0x2292, 0x0338] }, +{ source: [0x22EA], NFC: [0x22EA], NFD: [0x22B2, 0x0338], NFKC: [0x22EA], NFKD: [0x22B2, 0x0338] }, +{ source: [0x22EB], NFC: [0x22EB], NFD: [0x22B3, 0x0338], NFKC: [0x22EB], NFKD: [0x22B3, 0x0338] }, +{ source: [0x22EC], NFC: [0x22EC], NFD: [0x22B4, 0x0338], NFKC: [0x22EC], NFKD: [0x22B4, 0x0338] }, +{ source: [0x22ED], NFC: [0x22ED], NFD: [0x22B5, 0x0338], NFKC: [0x22ED], NFKD: [0x22B5, 0x0338] }, +{ source: [0x2329], NFC: [0x3008], NFD: [0x3008], NFKC: [0x3008], NFKD: [0x3008] }, +{ source: [0x232A], NFC: [0x3009], NFD: [0x3009], NFKC: [0x3009], NFKD: [0x3009] }, +{ source: [0x2460], NFC: [0x2460], NFD: [0x2460], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x2461], NFC: [0x2461], NFD: [0x2461], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x2462], NFC: [0x2462], NFD: [0x2462], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x2463], NFC: [0x2463], NFD: [0x2463], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x2464], NFC: [0x2464], NFD: [0x2464], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x2465], NFC: [0x2465], NFD: [0x2465], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x2466], NFC: [0x2466], NFD: [0x2466], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x2467], NFC: [0x2467], NFD: [0x2467], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x2468], NFC: [0x2468], NFD: [0x2468], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x2469], NFC: [0x2469], NFD: [0x2469], NFKC: [0x0031, 0x0030], NFKD: [0x0031, 0x0030] }, +{ source: [0x246A], NFC: [0x246A], NFD: [0x246A], NFKC: [0x0031, 0x0031], NFKD: [0x0031, 0x0031] }, +{ source: [0x246B], NFC: [0x246B], NFD: [0x246B], NFKC: [0x0031, 0x0032], NFKD: [0x0031, 0x0032] }, +{ source: [0x246C], NFC: [0x246C], NFD: [0x246C], NFKC: [0x0031, 0x0033], NFKD: [0x0031, 0x0033] }, +{ source: [0x246D], NFC: [0x246D], NFD: [0x246D], NFKC: [0x0031, 0x0034], NFKD: [0x0031, 0x0034] }, +{ source: [0x246E], NFC: [0x246E], NFD: [0x246E], NFKC: [0x0031, 0x0035], NFKD: [0x0031, 0x0035] }, +{ source: [0x246F], NFC: [0x246F], NFD: [0x246F], NFKC: [0x0031, 0x0036], NFKD: [0x0031, 0x0036] }, +{ source: [0x2470], NFC: [0x2470], NFD: [0x2470], NFKC: [0x0031, 0x0037], NFKD: [0x0031, 0x0037] }, +{ source: [0x2471], NFC: [0x2471], NFD: [0x2471], NFKC: [0x0031, 0x0038], NFKD: [0x0031, 0x0038] }, +{ source: [0x2472], NFC: [0x2472], NFD: [0x2472], NFKC: [0x0031, 0x0039], NFKD: [0x0031, 0x0039] }, +{ source: [0x2473], NFC: [0x2473], NFD: [0x2473], NFKC: [0x0032, 0x0030], NFKD: [0x0032, 0x0030] }, +{ source: [0x2474], NFC: [0x2474], NFD: [0x2474], NFKC: [0x0028, 0x0031, 0x0029], NFKD: [0x0028, 0x0031, 0x0029] }, +{ source: [0x2475], NFC: [0x2475], NFD: [0x2475], NFKC: [0x0028, 0x0032, 0x0029], NFKD: [0x0028, 0x0032, 0x0029] }, +{ source: [0x2476], NFC: [0x2476], NFD: [0x2476], NFKC: [0x0028, 0x0033, 0x0029], NFKD: [0x0028, 0x0033, 0x0029] }, +{ source: [0x2477], NFC: [0x2477], NFD: [0x2477], NFKC: [0x0028, 0x0034, 0x0029], NFKD: [0x0028, 0x0034, 0x0029] }, +{ source: [0x2478], NFC: [0x2478], NFD: [0x2478], NFKC: [0x0028, 0x0035, 0x0029], NFKD: [0x0028, 0x0035, 0x0029] }, +{ source: [0x2479], NFC: [0x2479], NFD: [0x2479], NFKC: [0x0028, 0x0036, 0x0029], NFKD: [0x0028, 0x0036, 0x0029] }, +{ source: [0x247A], NFC: [0x247A], NFD: [0x247A], NFKC: [0x0028, 0x0037, 0x0029], NFKD: [0x0028, 0x0037, 0x0029] }, +{ source: [0x247B], NFC: [0x247B], NFD: [0x247B], NFKC: [0x0028, 0x0038, 0x0029], NFKD: [0x0028, 0x0038, 0x0029] }, +{ source: [0x247C], NFC: [0x247C], NFD: [0x247C], NFKC: [0x0028, 0x0039, 0x0029], NFKD: [0x0028, 0x0039, 0x0029] }, +{ source: [0x247D], NFC: [0x247D], NFD: [0x247D], NFKC: [0x0028, 0x0031, 0x0030, 0x0029], NFKD: [0x0028, 0x0031, 0x0030, 0x0029] }, +{ source: [0x247E], NFC: [0x247E], NFD: [0x247E], NFKC: [0x0028, 0x0031, 0x0031, 0x0029], NFKD: [0x0028, 0x0031, 0x0031, 0x0029] }, +{ source: [0x247F], NFC: [0x247F], NFD: [0x247F], NFKC: [0x0028, 0x0031, 0x0032, 0x0029], NFKD: [0x0028, 0x0031, 0x0032, 0x0029] }, +{ source: [0x2480], NFC: [0x2480], NFD: [0x2480], NFKC: [0x0028, 0x0031, 0x0033, 0x0029], NFKD: [0x0028, 0x0031, 0x0033, 0x0029] }, +{ source: [0x2481], NFC: [0x2481], NFD: [0x2481], NFKC: [0x0028, 0x0031, 0x0034, 0x0029], NFKD: [0x0028, 0x0031, 0x0034, 0x0029] }, +{ source: [0x2482], NFC: [0x2482], NFD: [0x2482], NFKC: [0x0028, 0x0031, 0x0035, 0x0029], NFKD: [0x0028, 0x0031, 0x0035, 0x0029] }, +{ source: [0x2483], NFC: [0x2483], NFD: [0x2483], NFKC: [0x0028, 0x0031, 0x0036, 0x0029], NFKD: [0x0028, 0x0031, 0x0036, 0x0029] }, +{ source: [0x2484], NFC: [0x2484], NFD: [0x2484], NFKC: [0x0028, 0x0031, 0x0037, 0x0029], NFKD: [0x0028, 0x0031, 0x0037, 0x0029] }, +{ source: [0x2485], NFC: [0x2485], NFD: [0x2485], NFKC: [0x0028, 0x0031, 0x0038, 0x0029], NFKD: [0x0028, 0x0031, 0x0038, 0x0029] }, +{ source: [0x2486], NFC: [0x2486], NFD: [0x2486], NFKC: [0x0028, 0x0031, 0x0039, 0x0029], NFKD: [0x0028, 0x0031, 0x0039, 0x0029] }, +{ source: [0x2487], NFC: [0x2487], NFD: [0x2487], NFKC: [0x0028, 0x0032, 0x0030, 0x0029], NFKD: [0x0028, 0x0032, 0x0030, 0x0029] }, +{ source: [0x2488], NFC: [0x2488], NFD: [0x2488], NFKC: [0x0031, 0x002E], NFKD: [0x0031, 0x002E] }, +{ source: [0x2489], NFC: [0x2489], NFD: [0x2489], NFKC: [0x0032, 0x002E], NFKD: [0x0032, 0x002E] }, +{ source: [0x248A], NFC: [0x248A], NFD: [0x248A], NFKC: [0x0033, 0x002E], NFKD: [0x0033, 0x002E] }, +{ source: [0x248B], NFC: [0x248B], NFD: [0x248B], NFKC: [0x0034, 0x002E], NFKD: [0x0034, 0x002E] }, +{ source: [0x248C], NFC: [0x248C], NFD: [0x248C], NFKC: [0x0035, 0x002E], NFKD: [0x0035, 0x002E] }, +{ source: [0x248D], NFC: [0x248D], NFD: [0x248D], NFKC: [0x0036, 0x002E], NFKD: [0x0036, 0x002E] }, +{ source: [0x248E], NFC: [0x248E], NFD: [0x248E], NFKC: [0x0037, 0x002E], NFKD: [0x0037, 0x002E] }, +{ source: [0x248F], NFC: [0x248F], NFD: [0x248F], NFKC: [0x0038, 0x002E], NFKD: [0x0038, 0x002E] }, +{ source: [0x2490], NFC: [0x2490], NFD: [0x2490], NFKC: [0x0039, 0x002E], NFKD: [0x0039, 0x002E] }, +{ source: [0x2491], NFC: [0x2491], NFD: [0x2491], NFKC: [0x0031, 0x0030, 0x002E], NFKD: [0x0031, 0x0030, 0x002E] }, +{ source: [0x2492], NFC: [0x2492], NFD: [0x2492], NFKC: [0x0031, 0x0031, 0x002E], NFKD: [0x0031, 0x0031, 0x002E] }, +{ source: [0x2493], NFC: [0x2493], NFD: [0x2493], NFKC: [0x0031, 0x0032, 0x002E], NFKD: [0x0031, 0x0032, 0x002E] }, +{ source: [0x2494], NFC: [0x2494], NFD: [0x2494], NFKC: [0x0031, 0x0033, 0x002E], NFKD: [0x0031, 0x0033, 0x002E] }, +{ source: [0x2495], NFC: [0x2495], NFD: [0x2495], NFKC: [0x0031, 0x0034, 0x002E], NFKD: [0x0031, 0x0034, 0x002E] }, +{ source: [0x2496], NFC: [0x2496], NFD: [0x2496], NFKC: [0x0031, 0x0035, 0x002E], NFKD: [0x0031, 0x0035, 0x002E] }, +{ source: [0x2497], NFC: [0x2497], NFD: [0x2497], NFKC: [0x0031, 0x0036, 0x002E], NFKD: [0x0031, 0x0036, 0x002E] }, +{ source: [0x2498], NFC: [0x2498], NFD: [0x2498], NFKC: [0x0031, 0x0037, 0x002E], NFKD: [0x0031, 0x0037, 0x002E] }, +{ source: [0x2499], NFC: [0x2499], NFD: [0x2499], NFKC: [0x0031, 0x0038, 0x002E], NFKD: [0x0031, 0x0038, 0x002E] }, +{ source: [0x249A], NFC: [0x249A], NFD: [0x249A], NFKC: [0x0031, 0x0039, 0x002E], NFKD: [0x0031, 0x0039, 0x002E] }, +{ source: [0x249B], NFC: [0x249B], NFD: [0x249B], NFKC: [0x0032, 0x0030, 0x002E], NFKD: [0x0032, 0x0030, 0x002E] }, +{ source: [0x249C], NFC: [0x249C], NFD: [0x249C], NFKC: [0x0028, 0x0061, 0x0029], NFKD: [0x0028, 0x0061, 0x0029] }, +{ source: [0x249D], NFC: [0x249D], NFD: [0x249D], NFKC: [0x0028, 0x0062, 0x0029], NFKD: [0x0028, 0x0062, 0x0029] }, +{ source: [0x249E], NFC: [0x249E], NFD: [0x249E], NFKC: [0x0028, 0x0063, 0x0029], NFKD: [0x0028, 0x0063, 0x0029] }, +{ source: [0x249F], NFC: [0x249F], NFD: [0x249F], NFKC: [0x0028, 0x0064, 0x0029], NFKD: [0x0028, 0x0064, 0x0029] }, +{ source: [0x24A0], NFC: [0x24A0], NFD: [0x24A0], NFKC: [0x0028, 0x0065, 0x0029], NFKD: [0x0028, 0x0065, 0x0029] }, +{ source: [0x24A1], NFC: [0x24A1], NFD: [0x24A1], NFKC: [0x0028, 0x0066, 0x0029], NFKD: [0x0028, 0x0066, 0x0029] }, +{ source: [0x24A2], NFC: [0x24A2], NFD: [0x24A2], NFKC: [0x0028, 0x0067, 0x0029], NFKD: [0x0028, 0x0067, 0x0029] }, +{ source: [0x24A3], NFC: [0x24A3], NFD: [0x24A3], NFKC: [0x0028, 0x0068, 0x0029], NFKD: [0x0028, 0x0068, 0x0029] }, +{ source: [0x24A4], NFC: [0x24A4], NFD: [0x24A4], NFKC: [0x0028, 0x0069, 0x0029], NFKD: [0x0028, 0x0069, 0x0029] }, +{ source: [0x24A5], NFC: [0x24A5], NFD: [0x24A5], NFKC: [0x0028, 0x006A, 0x0029], NFKD: [0x0028, 0x006A, 0x0029] }, +{ source: [0x24A6], NFC: [0x24A6], NFD: [0x24A6], NFKC: [0x0028, 0x006B, 0x0029], NFKD: [0x0028, 0x006B, 0x0029] }, +{ source: [0x24A7], NFC: [0x24A7], NFD: [0x24A7], NFKC: [0x0028, 0x006C, 0x0029], NFKD: [0x0028, 0x006C, 0x0029] }, +{ source: [0x24A8], NFC: [0x24A8], NFD: [0x24A8], NFKC: [0x0028, 0x006D, 0x0029], NFKD: [0x0028, 0x006D, 0x0029] }, +{ source: [0x24A9], NFC: [0x24A9], NFD: [0x24A9], NFKC: [0x0028, 0x006E, 0x0029], NFKD: [0x0028, 0x006E, 0x0029] }, +{ source: [0x24AA], NFC: [0x24AA], NFD: [0x24AA], NFKC: [0x0028, 0x006F, 0x0029], NFKD: [0x0028, 0x006F, 0x0029] }, +{ source: [0x24AB], NFC: [0x24AB], NFD: [0x24AB], NFKC: [0x0028, 0x0070, 0x0029], NFKD: [0x0028, 0x0070, 0x0029] }, +{ source: [0x24AC], NFC: [0x24AC], NFD: [0x24AC], NFKC: [0x0028, 0x0071, 0x0029], NFKD: [0x0028, 0x0071, 0x0029] }, +{ source: [0x24AD], NFC: [0x24AD], NFD: [0x24AD], NFKC: [0x0028, 0x0072, 0x0029], NFKD: [0x0028, 0x0072, 0x0029] }, +{ source: [0x24AE], NFC: [0x24AE], NFD: [0x24AE], NFKC: [0x0028, 0x0073, 0x0029], NFKD: [0x0028, 0x0073, 0x0029] }, +{ source: [0x24AF], NFC: [0x24AF], NFD: [0x24AF], NFKC: [0x0028, 0x0074, 0x0029], NFKD: [0x0028, 0x0074, 0x0029] }, +{ source: [0x24B0], NFC: [0x24B0], NFD: [0x24B0], NFKC: [0x0028, 0x0075, 0x0029], NFKD: [0x0028, 0x0075, 0x0029] }, +{ source: [0x24B1], NFC: [0x24B1], NFD: [0x24B1], NFKC: [0x0028, 0x0076, 0x0029], NFKD: [0x0028, 0x0076, 0x0029] }, +{ source: [0x24B2], NFC: [0x24B2], NFD: [0x24B2], NFKC: [0x0028, 0x0077, 0x0029], NFKD: [0x0028, 0x0077, 0x0029] }, +{ source: [0x24B3], NFC: [0x24B3], NFD: [0x24B3], NFKC: [0x0028, 0x0078, 0x0029], NFKD: [0x0028, 0x0078, 0x0029] }, +{ source: [0x24B4], NFC: [0x24B4], NFD: [0x24B4], NFKC: [0x0028, 0x0079, 0x0029], NFKD: [0x0028, 0x0079, 0x0029] }, +{ source: [0x24B5], NFC: [0x24B5], NFD: [0x24B5], NFKC: [0x0028, 0x007A, 0x0029], NFKD: [0x0028, 0x007A, 0x0029] }, +{ source: [0x24B6], NFC: [0x24B6], NFD: [0x24B6], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x24B7], NFC: [0x24B7], NFD: [0x24B7], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x24B8], NFC: [0x24B8], NFD: [0x24B8], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x24B9], NFC: [0x24B9], NFD: [0x24B9], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x24BA], NFC: [0x24BA], NFD: [0x24BA], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x24BB], NFC: [0x24BB], NFD: [0x24BB], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x24BC], NFC: [0x24BC], NFD: [0x24BC], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x24BD], NFC: [0x24BD], NFD: [0x24BD], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x24BE], NFC: [0x24BE], NFD: [0x24BE], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x24BF], NFC: [0x24BF], NFD: [0x24BF], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x24C0], NFC: [0x24C0], NFD: [0x24C0], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x24C1], NFC: [0x24C1], NFD: [0x24C1], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x24C2], NFC: [0x24C2], NFD: [0x24C2], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x24C3], NFC: [0x24C3], NFD: [0x24C3], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x24C4], NFC: [0x24C4], NFD: [0x24C4], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x24C5], NFC: [0x24C5], NFD: [0x24C5], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x24C6], NFC: [0x24C6], NFD: [0x24C6], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x24C7], NFC: [0x24C7], NFD: [0x24C7], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x24C8], NFC: [0x24C8], NFD: [0x24C8], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x24C9], NFC: [0x24C9], NFD: [0x24C9], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x24CA], NFC: [0x24CA], NFD: [0x24CA], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x24CB], NFC: [0x24CB], NFD: [0x24CB], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x24CC], NFC: [0x24CC], NFD: [0x24CC], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x24CD], NFC: [0x24CD], NFD: [0x24CD], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x24CE], NFC: [0x24CE], NFD: [0x24CE], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x24CF], NFC: [0x24CF], NFD: [0x24CF], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x24D0], NFC: [0x24D0], NFD: [0x24D0], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x24D1], NFC: [0x24D1], NFD: [0x24D1], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x24D2], NFC: [0x24D2], NFD: [0x24D2], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x24D3], NFC: [0x24D3], NFD: [0x24D3], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x24D4], NFC: [0x24D4], NFD: [0x24D4], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x24D5], NFC: [0x24D5], NFD: [0x24D5], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x24D6], NFC: [0x24D6], NFD: [0x24D6], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x24D7], NFC: [0x24D7], NFD: [0x24D7], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x24D8], NFC: [0x24D8], NFD: [0x24D8], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x24D9], NFC: [0x24D9], NFD: [0x24D9], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x24DA], NFC: [0x24DA], NFD: [0x24DA], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x24DB], NFC: [0x24DB], NFD: [0x24DB], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x24DC], NFC: [0x24DC], NFD: [0x24DC], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x24DD], NFC: [0x24DD], NFD: [0x24DD], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x24DE], NFC: [0x24DE], NFD: [0x24DE], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x24DF], NFC: [0x24DF], NFD: [0x24DF], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x24E0], NFC: [0x24E0], NFD: [0x24E0], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x24E1], NFC: [0x24E1], NFD: [0x24E1], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x24E2], NFC: [0x24E2], NFD: [0x24E2], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x24E3], NFC: [0x24E3], NFD: [0x24E3], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x24E4], NFC: [0x24E4], NFD: [0x24E4], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x24E5], NFC: [0x24E5], NFD: [0x24E5], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x24E6], NFC: [0x24E6], NFD: [0x24E6], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x24E7], NFC: [0x24E7], NFD: [0x24E7], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x24E8], NFC: [0x24E8], NFD: [0x24E8], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x24E9], NFC: [0x24E9], NFD: [0x24E9], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x24EA], NFC: [0x24EA], NFD: [0x24EA], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x2A0C], NFC: [0x2A0C], NFD: [0x2A0C], NFKC: [0x222B, 0x222B, 0x222B, 0x222B], NFKD: [0x222B, 0x222B, 0x222B, 0x222B] }, +{ source: [0x2A74], NFC: [0x2A74], NFD: [0x2A74], NFKC: [0x003A, 0x003A, 0x003D], NFKD: [0x003A, 0x003A, 0x003D] }, +{ source: [0x2A75], NFC: [0x2A75], NFD: [0x2A75], NFKC: [0x003D, 0x003D], NFKD: [0x003D, 0x003D] }, +{ source: [0x2A76], NFC: [0x2A76], NFD: [0x2A76], NFKC: [0x003D, 0x003D, 0x003D], NFKD: [0x003D, 0x003D, 0x003D] }, +{ source: [0x2ADC], NFC: [0x2ADD, 0x0338], NFD: [0x2ADD, 0x0338], NFKC: [0x2ADD, 0x0338], NFKD: [0x2ADD, 0x0338] }, +{ source: [0x2C7C], NFC: [0x2C7C], NFD: [0x2C7C], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x2C7D], NFC: [0x2C7D], NFD: [0x2C7D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x2D6F], NFC: [0x2D6F], NFD: [0x2D6F], NFKC: [0x2D61], NFKD: [0x2D61] }, +{ source: [0x2E9F], NFC: [0x2E9F], NFD: [0x2E9F], NFKC: [0x6BCD], NFKD: [0x6BCD] }, +{ source: [0x2EF3], NFC: [0x2EF3], NFD: [0x2EF3], NFKC: [0x9F9F], NFKD: [0x9F9F] }, +{ source: [0x2F00], NFC: [0x2F00], NFD: [0x2F00], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x2F01], NFC: [0x2F01], NFD: [0x2F01], NFKC: [0x4E28], NFKD: [0x4E28] }, +{ source: [0x2F02], NFC: [0x2F02], NFD: [0x2F02], NFKC: [0x4E36], NFKD: [0x4E36] }, +{ source: [0x2F03], NFC: [0x2F03], NFD: [0x2F03], NFKC: [0x4E3F], NFKD: [0x4E3F] }, +{ source: [0x2F04], NFC: [0x2F04], NFD: [0x2F04], NFKC: [0x4E59], NFKD: [0x4E59] }, +{ source: [0x2F05], NFC: [0x2F05], NFD: [0x2F05], NFKC: [0x4E85], NFKD: [0x4E85] }, +{ source: [0x2F06], NFC: [0x2F06], NFD: [0x2F06], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x2F07], NFC: [0x2F07], NFD: [0x2F07], NFKC: [0x4EA0], NFKD: [0x4EA0] }, +{ source: [0x2F08], NFC: [0x2F08], NFD: [0x2F08], NFKC: [0x4EBA], NFKD: [0x4EBA] }, +{ source: [0x2F09], NFC: [0x2F09], NFD: [0x2F09], NFKC: [0x513F], NFKD: [0x513F] }, +{ source: [0x2F0A], NFC: [0x2F0A], NFD: [0x2F0A], NFKC: [0x5165], NFKD: [0x5165] }, +{ source: [0x2F0B], NFC: [0x2F0B], NFD: [0x2F0B], NFKC: [0x516B], NFKD: [0x516B] }, +{ source: [0x2F0C], NFC: [0x2F0C], NFD: [0x2F0C], NFKC: [0x5182], NFKD: [0x5182] }, +{ source: [0x2F0D], NFC: [0x2F0D], NFD: [0x2F0D], NFKC: [0x5196], NFKD: [0x5196] }, +{ source: [0x2F0E], NFC: [0x2F0E], NFD: [0x2F0E], NFKC: [0x51AB], NFKD: [0x51AB] }, +{ source: [0x2F0F], NFC: [0x2F0F], NFD: [0x2F0F], NFKC: [0x51E0], NFKD: [0x51E0] }, +{ source: [0x2F10], NFC: [0x2F10], NFD: [0x2F10], NFKC: [0x51F5], NFKD: [0x51F5] }, +{ source: [0x2F11], NFC: [0x2F11], NFD: [0x2F11], NFKC: [0x5200], NFKD: [0x5200] }, +{ source: [0x2F12], NFC: [0x2F12], NFD: [0x2F12], NFKC: [0x529B], NFKD: [0x529B] }, +{ source: [0x2F13], NFC: [0x2F13], NFD: [0x2F13], NFKC: [0x52F9], NFKD: [0x52F9] }, +{ source: [0x2F14], NFC: [0x2F14], NFD: [0x2F14], NFKC: [0x5315], NFKD: [0x5315] }, +{ source: [0x2F15], NFC: [0x2F15], NFD: [0x2F15], NFKC: [0x531A], NFKD: [0x531A] }, +{ source: [0x2F16], NFC: [0x2F16], NFD: [0x2F16], NFKC: [0x5338], NFKD: [0x5338] }, +{ source: [0x2F17], NFC: [0x2F17], NFD: [0x2F17], NFKC: [0x5341], NFKD: [0x5341] }, +{ source: [0x2F18], NFC: [0x2F18], NFD: [0x2F18], NFKC: [0x535C], NFKD: [0x535C] }, +{ source: [0x2F19], NFC: [0x2F19], NFD: [0x2F19], NFKC: [0x5369], NFKD: [0x5369] }, +{ source: [0x2F1A], NFC: [0x2F1A], NFD: [0x2F1A], NFKC: [0x5382], NFKD: [0x5382] }, +{ source: [0x2F1B], NFC: [0x2F1B], NFD: [0x2F1B], NFKC: [0x53B6], NFKD: [0x53B6] }, +{ source: [0x2F1C], NFC: [0x2F1C], NFD: [0x2F1C], NFKC: [0x53C8], NFKD: [0x53C8] }, +{ source: [0x2F1D], NFC: [0x2F1D], NFD: [0x2F1D], NFKC: [0x53E3], NFKD: [0x53E3] }, +{ source: [0x2F1E], NFC: [0x2F1E], NFD: [0x2F1E], NFKC: [0x56D7], NFKD: [0x56D7] }, +{ source: [0x2F1F], NFC: [0x2F1F], NFD: [0x2F1F], NFKC: [0x571F], NFKD: [0x571F] }, +{ source: [0x2F20], NFC: [0x2F20], NFD: [0x2F20], NFKC: [0x58EB], NFKD: [0x58EB] }, +{ source: [0x2F21], NFC: [0x2F21], NFD: [0x2F21], NFKC: [0x5902], NFKD: [0x5902] }, +{ source: [0x2F22], NFC: [0x2F22], NFD: [0x2F22], NFKC: [0x590A], NFKD: [0x590A] }, +{ source: [0x2F23], NFC: [0x2F23], NFD: [0x2F23], NFKC: [0x5915], NFKD: [0x5915] }, +{ source: [0x2F24], NFC: [0x2F24], NFD: [0x2F24], NFKC: [0x5927], NFKD: [0x5927] }, +{ source: [0x2F25], NFC: [0x2F25], NFD: [0x2F25], NFKC: [0x5973], NFKD: [0x5973] }, +{ source: [0x2F26], NFC: [0x2F26], NFD: [0x2F26], NFKC: [0x5B50], NFKD: [0x5B50] }, +{ source: [0x2F27], NFC: [0x2F27], NFD: [0x2F27], NFKC: [0x5B80], NFKD: [0x5B80] }, +{ source: [0x2F28], NFC: [0x2F28], NFD: [0x2F28], NFKC: [0x5BF8], NFKD: [0x5BF8] }, +{ source: [0x2F29], NFC: [0x2F29], NFD: [0x2F29], NFKC: [0x5C0F], NFKD: [0x5C0F] }, +{ source: [0x2F2A], NFC: [0x2F2A], NFD: [0x2F2A], NFKC: [0x5C22], NFKD: [0x5C22] }, +{ source: [0x2F2B], NFC: [0x2F2B], NFD: [0x2F2B], NFKC: [0x5C38], NFKD: [0x5C38] }, +{ source: [0x2F2C], NFC: [0x2F2C], NFD: [0x2F2C], NFKC: [0x5C6E], NFKD: [0x5C6E] }, +{ source: [0x2F2D], NFC: [0x2F2D], NFD: [0x2F2D], NFKC: [0x5C71], NFKD: [0x5C71] }, +{ source: [0x2F2E], NFC: [0x2F2E], NFD: [0x2F2E], NFKC: [0x5DDB], NFKD: [0x5DDB] }, +{ source: [0x2F2F], NFC: [0x2F2F], NFD: [0x2F2F], NFKC: [0x5DE5], NFKD: [0x5DE5] }, +{ source: [0x2F30], NFC: [0x2F30], NFD: [0x2F30], NFKC: [0x5DF1], NFKD: [0x5DF1] }, +{ source: [0x2F31], NFC: [0x2F31], NFD: [0x2F31], NFKC: [0x5DFE], NFKD: [0x5DFE] }, +{ source: [0x2F32], NFC: [0x2F32], NFD: [0x2F32], NFKC: [0x5E72], NFKD: [0x5E72] }, +{ source: [0x2F33], NFC: [0x2F33], NFD: [0x2F33], NFKC: [0x5E7A], NFKD: [0x5E7A] }, +{ source: [0x2F34], NFC: [0x2F34], NFD: [0x2F34], NFKC: [0x5E7F], NFKD: [0x5E7F] }, +{ source: [0x2F35], NFC: [0x2F35], NFD: [0x2F35], NFKC: [0x5EF4], NFKD: [0x5EF4] }, +{ source: [0x2F36], NFC: [0x2F36], NFD: [0x2F36], NFKC: [0x5EFE], NFKD: [0x5EFE] }, +{ source: [0x2F37], NFC: [0x2F37], NFD: [0x2F37], NFKC: [0x5F0B], NFKD: [0x5F0B] }, +{ source: [0x2F38], NFC: [0x2F38], NFD: [0x2F38], NFKC: [0x5F13], NFKD: [0x5F13] }, +{ source: [0x2F39], NFC: [0x2F39], NFD: [0x2F39], NFKC: [0x5F50], NFKD: [0x5F50] }, +{ source: [0x2F3A], NFC: [0x2F3A], NFD: [0x2F3A], NFKC: [0x5F61], NFKD: [0x5F61] }, +{ source: [0x2F3B], NFC: [0x2F3B], NFD: [0x2F3B], NFKC: [0x5F73], NFKD: [0x5F73] }, +{ source: [0x2F3C], NFC: [0x2F3C], NFD: [0x2F3C], NFKC: [0x5FC3], NFKD: [0x5FC3] }, +{ source: [0x2F3D], NFC: [0x2F3D], NFD: [0x2F3D], NFKC: [0x6208], NFKD: [0x6208] }, +{ source: [0x2F3E], NFC: [0x2F3E], NFD: [0x2F3E], NFKC: [0x6236], NFKD: [0x6236] }, +{ source: [0x2F3F], NFC: [0x2F3F], NFD: [0x2F3F], NFKC: [0x624B], NFKD: [0x624B] }, +{ source: [0x2F40], NFC: [0x2F40], NFD: [0x2F40], NFKC: [0x652F], NFKD: [0x652F] }, +{ source: [0x2F41], NFC: [0x2F41], NFD: [0x2F41], NFKC: [0x6534], NFKD: [0x6534] }, +{ source: [0x2F42], NFC: [0x2F42], NFD: [0x2F42], NFKC: [0x6587], NFKD: [0x6587] }, +{ source: [0x2F43], NFC: [0x2F43], NFD: [0x2F43], NFKC: [0x6597], NFKD: [0x6597] }, +{ source: [0x2F44], NFC: [0x2F44], NFD: [0x2F44], NFKC: [0x65A4], NFKD: [0x65A4] }, +{ source: [0x2F45], NFC: [0x2F45], NFD: [0x2F45], NFKC: [0x65B9], NFKD: [0x65B9] }, +{ source: [0x2F46], NFC: [0x2F46], NFD: [0x2F46], NFKC: [0x65E0], NFKD: [0x65E0] }, +{ source: [0x2F47], NFC: [0x2F47], NFD: [0x2F47], NFKC: [0x65E5], NFKD: [0x65E5] }, +{ source: [0x2F48], NFC: [0x2F48], NFD: [0x2F48], NFKC: [0x66F0], NFKD: [0x66F0] }, +{ source: [0x2F49], NFC: [0x2F49], NFD: [0x2F49], NFKC: [0x6708], NFKD: [0x6708] }, +{ source: [0x2F4A], NFC: [0x2F4A], NFD: [0x2F4A], NFKC: [0x6728], NFKD: [0x6728] }, +{ source: [0x2F4B], NFC: [0x2F4B], NFD: [0x2F4B], NFKC: [0x6B20], NFKD: [0x6B20] }, +{ source: [0x2F4C], NFC: [0x2F4C], NFD: [0x2F4C], NFKC: [0x6B62], NFKD: [0x6B62] }, +{ source: [0x2F4D], NFC: [0x2F4D], NFD: [0x2F4D], NFKC: [0x6B79], NFKD: [0x6B79] }, +{ source: [0x2F4E], NFC: [0x2F4E], NFD: [0x2F4E], NFKC: [0x6BB3], NFKD: [0x6BB3] }, +{ source: [0x2F4F], NFC: [0x2F4F], NFD: [0x2F4F], NFKC: [0x6BCB], NFKD: [0x6BCB] }, +{ source: [0x2F50], NFC: [0x2F50], NFD: [0x2F50], NFKC: [0x6BD4], NFKD: [0x6BD4] }, +{ source: [0x2F51], NFC: [0x2F51], NFD: [0x2F51], NFKC: [0x6BDB], NFKD: [0x6BDB] }, +{ source: [0x2F52], NFC: [0x2F52], NFD: [0x2F52], NFKC: [0x6C0F], NFKD: [0x6C0F] }, +{ source: [0x2F53], NFC: [0x2F53], NFD: [0x2F53], NFKC: [0x6C14], NFKD: [0x6C14] }, +{ source: [0x2F54], NFC: [0x2F54], NFD: [0x2F54], NFKC: [0x6C34], NFKD: [0x6C34] }, +{ source: [0x2F55], NFC: [0x2F55], NFD: [0x2F55], NFKC: [0x706B], NFKD: [0x706B] }, +{ source: [0x2F56], NFC: [0x2F56], NFD: [0x2F56], NFKC: [0x722A], NFKD: [0x722A] }, +{ source: [0x2F57], NFC: [0x2F57], NFD: [0x2F57], NFKC: [0x7236], NFKD: [0x7236] }, +{ source: [0x2F58], NFC: [0x2F58], NFD: [0x2F58], NFKC: [0x723B], NFKD: [0x723B] }, +{ source: [0x2F59], NFC: [0x2F59], NFD: [0x2F59], NFKC: [0x723F], NFKD: [0x723F] }, +{ source: [0x2F5A], NFC: [0x2F5A], NFD: [0x2F5A], NFKC: [0x7247], NFKD: [0x7247] }, +{ source: [0x2F5B], NFC: [0x2F5B], NFD: [0x2F5B], NFKC: [0x7259], NFKD: [0x7259] }, +{ source: [0x2F5C], NFC: [0x2F5C], NFD: [0x2F5C], NFKC: [0x725B], NFKD: [0x725B] }, +{ source: [0x2F5D], NFC: [0x2F5D], NFD: [0x2F5D], NFKC: [0x72AC], NFKD: [0x72AC] }, +{ source: [0x2F5E], NFC: [0x2F5E], NFD: [0x2F5E], NFKC: [0x7384], NFKD: [0x7384] }, +{ source: [0x2F5F], NFC: [0x2F5F], NFD: [0x2F5F], NFKC: [0x7389], NFKD: [0x7389] }, +{ source: [0x2F60], NFC: [0x2F60], NFD: [0x2F60], NFKC: [0x74DC], NFKD: [0x74DC] }, +{ source: [0x2F61], NFC: [0x2F61], NFD: [0x2F61], NFKC: [0x74E6], NFKD: [0x74E6] }, +{ source: [0x2F62], NFC: [0x2F62], NFD: [0x2F62], NFKC: [0x7518], NFKD: [0x7518] }, +{ source: [0x2F63], NFC: [0x2F63], NFD: [0x2F63], NFKC: [0x751F], NFKD: [0x751F] }, +{ source: [0x2F64], NFC: [0x2F64], NFD: [0x2F64], NFKC: [0x7528], NFKD: [0x7528] }, +{ source: [0x2F65], NFC: [0x2F65], NFD: [0x2F65], NFKC: [0x7530], NFKD: [0x7530] }, +{ source: [0x2F66], NFC: [0x2F66], NFD: [0x2F66], NFKC: [0x758B], NFKD: [0x758B] }, +{ source: [0x2F67], NFC: [0x2F67], NFD: [0x2F67], NFKC: [0x7592], NFKD: [0x7592] }, +{ source: [0x2F68], NFC: [0x2F68], NFD: [0x2F68], NFKC: [0x7676], NFKD: [0x7676] }, +{ source: [0x2F69], NFC: [0x2F69], NFD: [0x2F69], NFKC: [0x767D], NFKD: [0x767D] }, +{ source: [0x2F6A], NFC: [0x2F6A], NFD: [0x2F6A], NFKC: [0x76AE], NFKD: [0x76AE] }, +{ source: [0x2F6B], NFC: [0x2F6B], NFD: [0x2F6B], NFKC: [0x76BF], NFKD: [0x76BF] }, +{ source: [0x2F6C], NFC: [0x2F6C], NFD: [0x2F6C], NFKC: [0x76EE], NFKD: [0x76EE] }, +{ source: [0x2F6D], NFC: [0x2F6D], NFD: [0x2F6D], NFKC: [0x77DB], NFKD: [0x77DB] }, +{ source: [0x2F6E], NFC: [0x2F6E], NFD: [0x2F6E], NFKC: [0x77E2], NFKD: [0x77E2] }, +{ source: [0x2F6F], NFC: [0x2F6F], NFD: [0x2F6F], NFKC: [0x77F3], NFKD: [0x77F3] }, +{ source: [0x2F70], NFC: [0x2F70], NFD: [0x2F70], NFKC: [0x793A], NFKD: [0x793A] }, +{ source: [0x2F71], NFC: [0x2F71], NFD: [0x2F71], NFKC: [0x79B8], NFKD: [0x79B8] }, +{ source: [0x2F72], NFC: [0x2F72], NFD: [0x2F72], NFKC: [0x79BE], NFKD: [0x79BE] }, +{ source: [0x2F73], NFC: [0x2F73], NFD: [0x2F73], NFKC: [0x7A74], NFKD: [0x7A74] }, +{ source: [0x2F74], NFC: [0x2F74], NFD: [0x2F74], NFKC: [0x7ACB], NFKD: [0x7ACB] }, +{ source: [0x2F75], NFC: [0x2F75], NFD: [0x2F75], NFKC: [0x7AF9], NFKD: [0x7AF9] }, +{ source: [0x2F76], NFC: [0x2F76], NFD: [0x2F76], NFKC: [0x7C73], NFKD: [0x7C73] }, +{ source: [0x2F77], NFC: [0x2F77], NFD: [0x2F77], NFKC: [0x7CF8], NFKD: [0x7CF8] }, +{ source: [0x2F78], NFC: [0x2F78], NFD: [0x2F78], NFKC: [0x7F36], NFKD: [0x7F36] }, +{ source: [0x2F79], NFC: [0x2F79], NFD: [0x2F79], NFKC: [0x7F51], NFKD: [0x7F51] }, +{ source: [0x2F7A], NFC: [0x2F7A], NFD: [0x2F7A], NFKC: [0x7F8A], NFKD: [0x7F8A] }, +{ source: [0x2F7B], NFC: [0x2F7B], NFD: [0x2F7B], NFKC: [0x7FBD], NFKD: [0x7FBD] }, +{ source: [0x2F7C], NFC: [0x2F7C], NFD: [0x2F7C], NFKC: [0x8001], NFKD: [0x8001] }, +{ source: [0x2F7D], NFC: [0x2F7D], NFD: [0x2F7D], NFKC: [0x800C], NFKD: [0x800C] }, +{ source: [0x2F7E], NFC: [0x2F7E], NFD: [0x2F7E], NFKC: [0x8012], NFKD: [0x8012] }, +{ source: [0x2F7F], NFC: [0x2F7F], NFD: [0x2F7F], NFKC: [0x8033], NFKD: [0x8033] }, +{ source: [0x2F80], NFC: [0x2F80], NFD: [0x2F80], NFKC: [0x807F], NFKD: [0x807F] }, +{ source: [0x2F81], NFC: [0x2F81], NFD: [0x2F81], NFKC: [0x8089], NFKD: [0x8089] }, +{ source: [0x2F82], NFC: [0x2F82], NFD: [0x2F82], NFKC: [0x81E3], NFKD: [0x81E3] }, +{ source: [0x2F83], NFC: [0x2F83], NFD: [0x2F83], NFKC: [0x81EA], NFKD: [0x81EA] }, +{ source: [0x2F84], NFC: [0x2F84], NFD: [0x2F84], NFKC: [0x81F3], NFKD: [0x81F3] }, +{ source: [0x2F85], NFC: [0x2F85], NFD: [0x2F85], NFKC: [0x81FC], NFKD: [0x81FC] }, +{ source: [0x2F86], NFC: [0x2F86], NFD: [0x2F86], NFKC: [0x820C], NFKD: [0x820C] }, +{ source: [0x2F87], NFC: [0x2F87], NFD: [0x2F87], NFKC: [0x821B], NFKD: [0x821B] }, +{ source: [0x2F88], NFC: [0x2F88], NFD: [0x2F88], NFKC: [0x821F], NFKD: [0x821F] }, +{ source: [0x2F89], NFC: [0x2F89], NFD: [0x2F89], NFKC: [0x826E], NFKD: [0x826E] }, +{ source: [0x2F8A], NFC: [0x2F8A], NFD: [0x2F8A], NFKC: [0x8272], NFKD: [0x8272] }, +{ source: [0x2F8B], NFC: [0x2F8B], NFD: [0x2F8B], NFKC: [0x8278], NFKD: [0x8278] }, +{ source: [0x2F8C], NFC: [0x2F8C], NFD: [0x2F8C], NFKC: [0x864D], NFKD: [0x864D] }, +{ source: [0x2F8D], NFC: [0x2F8D], NFD: [0x2F8D], NFKC: [0x866B], NFKD: [0x866B] }, +{ source: [0x2F8E], NFC: [0x2F8E], NFD: [0x2F8E], NFKC: [0x8840], NFKD: [0x8840] }, +{ source: [0x2F8F], NFC: [0x2F8F], NFD: [0x2F8F], NFKC: [0x884C], NFKD: [0x884C] }, +{ source: [0x2F90], NFC: [0x2F90], NFD: [0x2F90], NFKC: [0x8863], NFKD: [0x8863] }, +{ source: [0x2F91], NFC: [0x2F91], NFD: [0x2F91], NFKC: [0x897E], NFKD: [0x897E] }, +{ source: [0x2F92], NFC: [0x2F92], NFD: [0x2F92], NFKC: [0x898B], NFKD: [0x898B] }, +{ source: [0x2F93], NFC: [0x2F93], NFD: [0x2F93], NFKC: [0x89D2], NFKD: [0x89D2] }, +{ source: [0x2F94], NFC: [0x2F94], NFD: [0x2F94], NFKC: [0x8A00], NFKD: [0x8A00] }, +{ source: [0x2F95], NFC: [0x2F95], NFD: [0x2F95], NFKC: [0x8C37], NFKD: [0x8C37] }, +{ source: [0x2F96], NFC: [0x2F96], NFD: [0x2F96], NFKC: [0x8C46], NFKD: [0x8C46] }, +{ source: [0x2F97], NFC: [0x2F97], NFD: [0x2F97], NFKC: [0x8C55], NFKD: [0x8C55] }, +{ source: [0x2F98], NFC: [0x2F98], NFD: [0x2F98], NFKC: [0x8C78], NFKD: [0x8C78] }, +{ source: [0x2F99], NFC: [0x2F99], NFD: [0x2F99], NFKC: [0x8C9D], NFKD: [0x8C9D] }, +{ source: [0x2F9A], NFC: [0x2F9A], NFD: [0x2F9A], NFKC: [0x8D64], NFKD: [0x8D64] }, +{ source: [0x2F9B], NFC: [0x2F9B], NFD: [0x2F9B], NFKC: [0x8D70], NFKD: [0x8D70] }, +{ source: [0x2F9C], NFC: [0x2F9C], NFD: [0x2F9C], NFKC: [0x8DB3], NFKD: [0x8DB3] }, +{ source: [0x2F9D], NFC: [0x2F9D], NFD: [0x2F9D], NFKC: [0x8EAB], NFKD: [0x8EAB] }, +{ source: [0x2F9E], NFC: [0x2F9E], NFD: [0x2F9E], NFKC: [0x8ECA], NFKD: [0x8ECA] }, +{ source: [0x2F9F], NFC: [0x2F9F], NFD: [0x2F9F], NFKC: [0x8F9B], NFKD: [0x8F9B] }, +{ source: [0x2FA0], NFC: [0x2FA0], NFD: [0x2FA0], NFKC: [0x8FB0], NFKD: [0x8FB0] }, +{ source: [0x2FA1], NFC: [0x2FA1], NFD: [0x2FA1], NFKC: [0x8FB5], NFKD: [0x8FB5] }, +{ source: [0x2FA2], NFC: [0x2FA2], NFD: [0x2FA2], NFKC: [0x9091], NFKD: [0x9091] }, +{ source: [0x2FA3], NFC: [0x2FA3], NFD: [0x2FA3], NFKC: [0x9149], NFKD: [0x9149] }, +{ source: [0x2FA4], NFC: [0x2FA4], NFD: [0x2FA4], NFKC: [0x91C6], NFKD: [0x91C6] }, +{ source: [0x2FA5], NFC: [0x2FA5], NFD: [0x2FA5], NFKC: [0x91CC], NFKD: [0x91CC] }, +{ source: [0x2FA6], NFC: [0x2FA6], NFD: [0x2FA6], NFKC: [0x91D1], NFKD: [0x91D1] }, +{ source: [0x2FA7], NFC: [0x2FA7], NFD: [0x2FA7], NFKC: [0x9577], NFKD: [0x9577] }, +{ source: [0x2FA8], NFC: [0x2FA8], NFD: [0x2FA8], NFKC: [0x9580], NFKD: [0x9580] }, +{ source: [0x2FA9], NFC: [0x2FA9], NFD: [0x2FA9], NFKC: [0x961C], NFKD: [0x961C] }, +{ source: [0x2FAA], NFC: [0x2FAA], NFD: [0x2FAA], NFKC: [0x96B6], NFKD: [0x96B6] }, +{ source: [0x2FAB], NFC: [0x2FAB], NFD: [0x2FAB], NFKC: [0x96B9], NFKD: [0x96B9] }, +{ source: [0x2FAC], NFC: [0x2FAC], NFD: [0x2FAC], NFKC: [0x96E8], NFKD: [0x96E8] }, +{ source: [0x2FAD], NFC: [0x2FAD], NFD: [0x2FAD], NFKC: [0x9751], NFKD: [0x9751] }, +{ source: [0x2FAE], NFC: [0x2FAE], NFD: [0x2FAE], NFKC: [0x975E], NFKD: [0x975E] }, +{ source: [0x2FAF], NFC: [0x2FAF], NFD: [0x2FAF], NFKC: [0x9762], NFKD: [0x9762] }, +{ source: [0x2FB0], NFC: [0x2FB0], NFD: [0x2FB0], NFKC: [0x9769], NFKD: [0x9769] }, +{ source: [0x2FB1], NFC: [0x2FB1], NFD: [0x2FB1], NFKC: [0x97CB], NFKD: [0x97CB] }, +{ source: [0x2FB2], NFC: [0x2FB2], NFD: [0x2FB2], NFKC: [0x97ED], NFKD: [0x97ED] }, +{ source: [0x2FB3], NFC: [0x2FB3], NFD: [0x2FB3], NFKC: [0x97F3], NFKD: [0x97F3] }, +{ source: [0x2FB4], NFC: [0x2FB4], NFD: [0x2FB4], NFKC: [0x9801], NFKD: [0x9801] }, +{ source: [0x2FB5], NFC: [0x2FB5], NFD: [0x2FB5], NFKC: [0x98A8], NFKD: [0x98A8] }, +{ source: [0x2FB6], NFC: [0x2FB6], NFD: [0x2FB6], NFKC: [0x98DB], NFKD: [0x98DB] }, +{ source: [0x2FB7], NFC: [0x2FB7], NFD: [0x2FB7], NFKC: [0x98DF], NFKD: [0x98DF] }, +{ source: [0x2FB8], NFC: [0x2FB8], NFD: [0x2FB8], NFKC: [0x9996], NFKD: [0x9996] }, +{ source: [0x2FB9], NFC: [0x2FB9], NFD: [0x2FB9], NFKC: [0x9999], NFKD: [0x9999] }, +{ source: [0x2FBA], NFC: [0x2FBA], NFD: [0x2FBA], NFKC: [0x99AC], NFKD: [0x99AC] }, +{ source: [0x2FBB], NFC: [0x2FBB], NFD: [0x2FBB], NFKC: [0x9AA8], NFKD: [0x9AA8] }, +{ source: [0x2FBC], NFC: [0x2FBC], NFD: [0x2FBC], NFKC: [0x9AD8], NFKD: [0x9AD8] }, +{ source: [0x2FBD], NFC: [0x2FBD], NFD: [0x2FBD], NFKC: [0x9ADF], NFKD: [0x9ADF] }, +{ source: [0x2FBE], NFC: [0x2FBE], NFD: [0x2FBE], NFKC: [0x9B25], NFKD: [0x9B25] }, +{ source: [0x2FBF], NFC: [0x2FBF], NFD: [0x2FBF], NFKC: [0x9B2F], NFKD: [0x9B2F] }, +{ source: [0x2FC0], NFC: [0x2FC0], NFD: [0x2FC0], NFKC: [0x9B32], NFKD: [0x9B32] }, +{ source: [0x2FC1], NFC: [0x2FC1], NFD: [0x2FC1], NFKC: [0x9B3C], NFKD: [0x9B3C] }, +{ source: [0x2FC2], NFC: [0x2FC2], NFD: [0x2FC2], NFKC: [0x9B5A], NFKD: [0x9B5A] }, +{ source: [0x2FC3], NFC: [0x2FC3], NFD: [0x2FC3], NFKC: [0x9CE5], NFKD: [0x9CE5] }, +{ source: [0x2FC4], NFC: [0x2FC4], NFD: [0x2FC4], NFKC: [0x9E75], NFKD: [0x9E75] }, +{ source: [0x2FC5], NFC: [0x2FC5], NFD: [0x2FC5], NFKC: [0x9E7F], NFKD: [0x9E7F] }, +{ source: [0x2FC6], NFC: [0x2FC6], NFD: [0x2FC6], NFKC: [0x9EA5], NFKD: [0x9EA5] }, +{ source: [0x2FC7], NFC: [0x2FC7], NFD: [0x2FC7], NFKC: [0x9EBB], NFKD: [0x9EBB] }, +{ source: [0x2FC8], NFC: [0x2FC8], NFD: [0x2FC8], NFKC: [0x9EC3], NFKD: [0x9EC3] }, +{ source: [0x2FC9], NFC: [0x2FC9], NFD: [0x2FC9], NFKC: [0x9ECD], NFKD: [0x9ECD] }, +{ source: [0x2FCA], NFC: [0x2FCA], NFD: [0x2FCA], NFKC: [0x9ED1], NFKD: [0x9ED1] }, +{ source: [0x2FCB], NFC: [0x2FCB], NFD: [0x2FCB], NFKC: [0x9EF9], NFKD: [0x9EF9] }, +{ source: [0x2FCC], NFC: [0x2FCC], NFD: [0x2FCC], NFKC: [0x9EFD], NFKD: [0x9EFD] }, +{ source: [0x2FCD], NFC: [0x2FCD], NFD: [0x2FCD], NFKC: [0x9F0E], NFKD: [0x9F0E] }, +{ source: [0x2FCE], NFC: [0x2FCE], NFD: [0x2FCE], NFKC: [0x9F13], NFKD: [0x9F13] }, +{ source: [0x2FCF], NFC: [0x2FCF], NFD: [0x2FCF], NFKC: [0x9F20], NFKD: [0x9F20] }, +{ source: [0x2FD0], NFC: [0x2FD0], NFD: [0x2FD0], NFKC: [0x9F3B], NFKD: [0x9F3B] }, +{ source: [0x2FD1], NFC: [0x2FD1], NFD: [0x2FD1], NFKC: [0x9F4A], NFKD: [0x9F4A] }, +{ source: [0x2FD2], NFC: [0x2FD2], NFD: [0x2FD2], NFKC: [0x9F52], NFKD: [0x9F52] }, +{ source: [0x2FD3], NFC: [0x2FD3], NFD: [0x2FD3], NFKC: [0x9F8D], NFKD: [0x9F8D] }, +{ source: [0x2FD4], NFC: [0x2FD4], NFD: [0x2FD4], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0x2FD5], NFC: [0x2FD5], NFD: [0x2FD5], NFKC: [0x9FA0], NFKD: [0x9FA0] }, +{ source: [0x3000], NFC: [0x3000], NFD: [0x3000], NFKC: [0x0020], NFKD: [0x0020] }, +{ source: [0x3036], NFC: [0x3036], NFD: [0x3036], NFKC: [0x3012], NFKD: [0x3012] }, +{ source: [0x3038], NFC: [0x3038], NFD: [0x3038], NFKC: [0x5341], NFKD: [0x5341] }, +{ source: [0x3039], NFC: [0x3039], NFD: [0x3039], NFKC: [0x5344], NFKD: [0x5344] }, +{ source: [0x303A], NFC: [0x303A], NFD: [0x303A], NFKC: [0x5345], NFKD: [0x5345] }, +{ source: [0x304C], NFC: [0x304C], NFD: [0x304B, 0x3099], NFKC: [0x304C], NFKD: [0x304B, 0x3099] }, +{ source: [0x304E], NFC: [0x304E], NFD: [0x304D, 0x3099], NFKC: [0x304E], NFKD: [0x304D, 0x3099] }, +{ source: [0x3050], NFC: [0x3050], NFD: [0x304F, 0x3099], NFKC: [0x3050], NFKD: [0x304F, 0x3099] }, +{ source: [0x3052], NFC: [0x3052], NFD: [0x3051, 0x3099], NFKC: [0x3052], NFKD: [0x3051, 0x3099] }, +{ source: [0x3054], NFC: [0x3054], NFD: [0x3053, 0x3099], NFKC: [0x3054], NFKD: [0x3053, 0x3099] }, +{ source: [0x3056], NFC: [0x3056], NFD: [0x3055, 0x3099], NFKC: [0x3056], NFKD: [0x3055, 0x3099] }, +{ source: [0x3058], NFC: [0x3058], NFD: [0x3057, 0x3099], NFKC: [0x3058], NFKD: [0x3057, 0x3099] }, +{ source: [0x305A], NFC: [0x305A], NFD: [0x3059, 0x3099], NFKC: [0x305A], NFKD: [0x3059, 0x3099] }, +{ source: [0x305C], NFC: [0x305C], NFD: [0x305B, 0x3099], NFKC: [0x305C], NFKD: [0x305B, 0x3099] }, +{ source: [0x305E], NFC: [0x305E], NFD: [0x305D, 0x3099], NFKC: [0x305E], NFKD: [0x305D, 0x3099] }, +{ source: [0x3060], NFC: [0x3060], NFD: [0x305F, 0x3099], NFKC: [0x3060], NFKD: [0x305F, 0x3099] }, +{ source: [0x3062], NFC: [0x3062], NFD: [0x3061, 0x3099], NFKC: [0x3062], NFKD: [0x3061, 0x3099] }, +{ source: [0x3065], NFC: [0x3065], NFD: [0x3064, 0x3099], NFKC: [0x3065], NFKD: [0x3064, 0x3099] }, +{ source: [0x3067], NFC: [0x3067], NFD: [0x3066, 0x3099], NFKC: [0x3067], NFKD: [0x3066, 0x3099] }, +{ source: [0x3069], NFC: [0x3069], NFD: [0x3068, 0x3099], NFKC: [0x3069], NFKD: [0x3068, 0x3099] }, +{ source: [0x3070], NFC: [0x3070], NFD: [0x306F, 0x3099], NFKC: [0x3070], NFKD: [0x306F, 0x3099] }, +{ source: [0x3071], NFC: [0x3071], NFD: [0x306F, 0x309A], NFKC: [0x3071], NFKD: [0x306F, 0x309A] }, +{ source: [0x3073], NFC: [0x3073], NFD: [0x3072, 0x3099], NFKC: [0x3073], NFKD: [0x3072, 0x3099] }, +{ source: [0x3074], NFC: [0x3074], NFD: [0x3072, 0x309A], NFKC: [0x3074], NFKD: [0x3072, 0x309A] }, +{ source: [0x3076], NFC: [0x3076], NFD: [0x3075, 0x3099], NFKC: [0x3076], NFKD: [0x3075, 0x3099] }, +{ source: [0x3077], NFC: [0x3077], NFD: [0x3075, 0x309A], NFKC: [0x3077], NFKD: [0x3075, 0x309A] }, +{ source: [0x3079], NFC: [0x3079], NFD: [0x3078, 0x3099], NFKC: [0x3079], NFKD: [0x3078, 0x3099] }, +{ source: [0x307A], NFC: [0x307A], NFD: [0x3078, 0x309A], NFKC: [0x307A], NFKD: [0x3078, 0x309A] }, +{ source: [0x307C], NFC: [0x307C], NFD: [0x307B, 0x3099], NFKC: [0x307C], NFKD: [0x307B, 0x3099] }, +{ source: [0x307D], NFC: [0x307D], NFD: [0x307B, 0x309A], NFKC: [0x307D], NFKD: [0x307B, 0x309A] }, +{ source: [0x3094], NFC: [0x3094], NFD: [0x3046, 0x3099], NFKC: [0x3094], NFKD: [0x3046, 0x3099] }, +{ source: [0x309B], NFC: [0x309B], NFD: [0x309B], NFKC: [0x0020, 0x3099], NFKD: [0x0020, 0x3099] }, +{ source: [0x309C], NFC: [0x309C], NFD: [0x309C], NFKC: [0x0020, 0x309A], NFKD: [0x0020, 0x309A] }, +{ source: [0x309E], NFC: [0x309E], NFD: [0x309D, 0x3099], NFKC: [0x309E], NFKD: [0x309D, 0x3099] }, +{ source: [0x309F], NFC: [0x309F], NFD: [0x309F], NFKC: [0x3088, 0x308A], NFKD: [0x3088, 0x308A] }, +{ source: [0x30AC], NFC: [0x30AC], NFD: [0x30AB, 0x3099], NFKC: [0x30AC], NFKD: [0x30AB, 0x3099] }, +{ source: [0x30AE], NFC: [0x30AE], NFD: [0x30AD, 0x3099], NFKC: [0x30AE], NFKD: [0x30AD, 0x3099] }, +{ source: [0x30B0], NFC: [0x30B0], NFD: [0x30AF, 0x3099], NFKC: [0x30B0], NFKD: [0x30AF, 0x3099] }, +{ source: [0x30B2], NFC: [0x30B2], NFD: [0x30B1, 0x3099], NFKC: [0x30B2], NFKD: [0x30B1, 0x3099] }, +{ source: [0x30B4], NFC: [0x30B4], NFD: [0x30B3, 0x3099], NFKC: [0x30B4], NFKD: [0x30B3, 0x3099] }, +{ source: [0x30B6], NFC: [0x30B6], NFD: [0x30B5, 0x3099], NFKC: [0x30B6], NFKD: [0x30B5, 0x3099] }, +{ source: [0x30B8], NFC: [0x30B8], NFD: [0x30B7, 0x3099], NFKC: [0x30B8], NFKD: [0x30B7, 0x3099] }, +{ source: [0x30BA], NFC: [0x30BA], NFD: [0x30B9, 0x3099], NFKC: [0x30BA], NFKD: [0x30B9, 0x3099] }, +{ source: [0x30BC], NFC: [0x30BC], NFD: [0x30BB, 0x3099], NFKC: [0x30BC], NFKD: [0x30BB, 0x3099] }, +{ source: [0x30BE], NFC: [0x30BE], NFD: [0x30BD, 0x3099], NFKC: [0x30BE], NFKD: [0x30BD, 0x3099] }, +{ source: [0x30C0], NFC: [0x30C0], NFD: [0x30BF, 0x3099], NFKC: [0x30C0], NFKD: [0x30BF, 0x3099] }, +{ source: [0x30C2], NFC: [0x30C2], NFD: [0x30C1, 0x3099], NFKC: [0x30C2], NFKD: [0x30C1, 0x3099] }, +{ source: [0x30C5], NFC: [0x30C5], NFD: [0x30C4, 0x3099], NFKC: [0x30C5], NFKD: [0x30C4, 0x3099] }, +{ source: [0x30C7], NFC: [0x30C7], NFD: [0x30C6, 0x3099], NFKC: [0x30C7], NFKD: [0x30C6, 0x3099] }, +{ source: [0x30C9], NFC: [0x30C9], NFD: [0x30C8, 0x3099], NFKC: [0x30C9], NFKD: [0x30C8, 0x3099] }, +{ source: [0x30D0], NFC: [0x30D0], NFD: [0x30CF, 0x3099], NFKC: [0x30D0], NFKD: [0x30CF, 0x3099] }, +{ source: [0x30D1], NFC: [0x30D1], NFD: [0x30CF, 0x309A], NFKC: [0x30D1], NFKD: [0x30CF, 0x309A] }, +{ source: [0x30D3], NFC: [0x30D3], NFD: [0x30D2, 0x3099], NFKC: [0x30D3], NFKD: [0x30D2, 0x3099] }, +{ source: [0x30D4], NFC: [0x30D4], NFD: [0x30D2, 0x309A], NFKC: [0x30D4], NFKD: [0x30D2, 0x309A] }, +{ source: [0x30D6], NFC: [0x30D6], NFD: [0x30D5, 0x3099], NFKC: [0x30D6], NFKD: [0x30D5, 0x3099] }, +{ source: [0x30D7], NFC: [0x30D7], NFD: [0x30D5, 0x309A], NFKC: [0x30D7], NFKD: [0x30D5, 0x309A] }, +{ source: [0x30D9], NFC: [0x30D9], NFD: [0x30D8, 0x3099], NFKC: [0x30D9], NFKD: [0x30D8, 0x3099] }, +{ source: [0x30DA], NFC: [0x30DA], NFD: [0x30D8, 0x309A], NFKC: [0x30DA], NFKD: [0x30D8, 0x309A] }, +{ source: [0x30DC], NFC: [0x30DC], NFD: [0x30DB, 0x3099], NFKC: [0x30DC], NFKD: [0x30DB, 0x3099] }, +{ source: [0x30DD], NFC: [0x30DD], NFD: [0x30DB, 0x309A], NFKC: [0x30DD], NFKD: [0x30DB, 0x309A] }, +{ source: [0x30F4], NFC: [0x30F4], NFD: [0x30A6, 0x3099], NFKC: [0x30F4], NFKD: [0x30A6, 0x3099] }, +{ source: [0x30F7], NFC: [0x30F7], NFD: [0x30EF, 0x3099], NFKC: [0x30F7], NFKD: [0x30EF, 0x3099] }, +{ source: [0x30F8], NFC: [0x30F8], NFD: [0x30F0, 0x3099], NFKC: [0x30F8], NFKD: [0x30F0, 0x3099] }, +{ source: [0x30F9], NFC: [0x30F9], NFD: [0x30F1, 0x3099], NFKC: [0x30F9], NFKD: [0x30F1, 0x3099] }, +{ source: [0x30FA], NFC: [0x30FA], NFD: [0x30F2, 0x3099], NFKC: [0x30FA], NFKD: [0x30F2, 0x3099] }, +{ source: [0x30FE], NFC: [0x30FE], NFD: [0x30FD, 0x3099], NFKC: [0x30FE], NFKD: [0x30FD, 0x3099] }, +{ source: [0x30FF], NFC: [0x30FF], NFD: [0x30FF], NFKC: [0x30B3, 0x30C8], NFKD: [0x30B3, 0x30C8] }, +{ source: [0x3131], NFC: [0x3131], NFD: [0x3131], NFKC: [0x1100], NFKD: [0x1100] }, +{ source: [0x3132], NFC: [0x3132], NFD: [0x3132], NFKC: [0x1101], NFKD: [0x1101] }, +{ source: [0x3133], NFC: [0x3133], NFD: [0x3133], NFKC: [0x11AA], NFKD: [0x11AA] }, +{ source: [0x3134], NFC: [0x3134], NFD: [0x3134], NFKC: [0x1102], NFKD: [0x1102] }, +{ source: [0x3135], NFC: [0x3135], NFD: [0x3135], NFKC: [0x11AC], NFKD: [0x11AC] }, +{ source: [0x3136], NFC: [0x3136], NFD: [0x3136], NFKC: [0x11AD], NFKD: [0x11AD] }, +{ source: [0x3137], NFC: [0x3137], NFD: [0x3137], NFKC: [0x1103], NFKD: [0x1103] }, +{ source: [0x3138], NFC: [0x3138], NFD: [0x3138], NFKC: [0x1104], NFKD: [0x1104] }, +{ source: [0x3139], NFC: [0x3139], NFD: [0x3139], NFKC: [0x1105], NFKD: [0x1105] }, +{ source: [0x313A], NFC: [0x313A], NFD: [0x313A], NFKC: [0x11B0], NFKD: [0x11B0] }, +{ source: [0x313B], NFC: [0x313B], NFD: [0x313B], NFKC: [0x11B1], NFKD: [0x11B1] }, +{ source: [0x313C], NFC: [0x313C], NFD: [0x313C], NFKC: [0x11B2], NFKD: [0x11B2] }, +{ source: [0x313D], NFC: [0x313D], NFD: [0x313D], NFKC: [0x11B3], NFKD: [0x11B3] }, +{ source: [0x313E], NFC: [0x313E], NFD: [0x313E], NFKC: [0x11B4], NFKD: [0x11B4] }, +{ source: [0x313F], NFC: [0x313F], NFD: [0x313F], NFKC: [0x11B5], NFKD: [0x11B5] }, +{ source: [0x3140], NFC: [0x3140], NFD: [0x3140], NFKC: [0x111A], NFKD: [0x111A] }, +{ source: [0x3141], NFC: [0x3141], NFD: [0x3141], NFKC: [0x1106], NFKD: [0x1106] }, +{ source: [0x3142], NFC: [0x3142], NFD: [0x3142], NFKC: [0x1107], NFKD: [0x1107] }, +{ source: [0x3143], NFC: [0x3143], NFD: [0x3143], NFKC: [0x1108], NFKD: [0x1108] }, +{ source: [0x3144], NFC: [0x3144], NFD: [0x3144], NFKC: [0x1121], NFKD: [0x1121] }, +{ source: [0x3145], NFC: [0x3145], NFD: [0x3145], NFKC: [0x1109], NFKD: [0x1109] }, +{ source: [0x3146], NFC: [0x3146], NFD: [0x3146], NFKC: [0x110A], NFKD: [0x110A] }, +{ source: [0x3147], NFC: [0x3147], NFD: [0x3147], NFKC: [0x110B], NFKD: [0x110B] }, +{ source: [0x3148], NFC: [0x3148], NFD: [0x3148], NFKC: [0x110C], NFKD: [0x110C] }, +{ source: [0x3149], NFC: [0x3149], NFD: [0x3149], NFKC: [0x110D], NFKD: [0x110D] }, +{ source: [0x314A], NFC: [0x314A], NFD: [0x314A], NFKC: [0x110E], NFKD: [0x110E] }, +{ source: [0x314B], NFC: [0x314B], NFD: [0x314B], NFKC: [0x110F], NFKD: [0x110F] }, +{ source: [0x314C], NFC: [0x314C], NFD: [0x314C], NFKC: [0x1110], NFKD: [0x1110] }, +{ source: [0x314D], NFC: [0x314D], NFD: [0x314D], NFKC: [0x1111], NFKD: [0x1111] }, +{ source: [0x314E], NFC: [0x314E], NFD: [0x314E], NFKC: [0x1112], NFKD: [0x1112] }, +{ source: [0x314F], NFC: [0x314F], NFD: [0x314F], NFKC: [0x1161], NFKD: [0x1161] }, +{ source: [0x3150], NFC: [0x3150], NFD: [0x3150], NFKC: [0x1162], NFKD: [0x1162] }, +{ source: [0x3151], NFC: [0x3151], NFD: [0x3151], NFKC: [0x1163], NFKD: [0x1163] }, +{ source: [0x3152], NFC: [0x3152], NFD: [0x3152], NFKC: [0x1164], NFKD: [0x1164] }, +{ source: [0x3153], NFC: [0x3153], NFD: [0x3153], NFKC: [0x1165], NFKD: [0x1165] }, +{ source: [0x3154], NFC: [0x3154], NFD: [0x3154], NFKC: [0x1166], NFKD: [0x1166] }, +{ source: [0x3155], NFC: [0x3155], NFD: [0x3155], NFKC: [0x1167], NFKD: [0x1167] }, +{ source: [0x3156], NFC: [0x3156], NFD: [0x3156], NFKC: [0x1168], NFKD: [0x1168] }, +{ source: [0x3157], NFC: [0x3157], NFD: [0x3157], NFKC: [0x1169], NFKD: [0x1169] }, +{ source: [0x3158], NFC: [0x3158], NFD: [0x3158], NFKC: [0x116A], NFKD: [0x116A] }, +{ source: [0x3159], NFC: [0x3159], NFD: [0x3159], NFKC: [0x116B], NFKD: [0x116B] }, +{ source: [0x315A], NFC: [0x315A], NFD: [0x315A], NFKC: [0x116C], NFKD: [0x116C] }, +{ source: [0x315B], NFC: [0x315B], NFD: [0x315B], NFKC: [0x116D], NFKD: [0x116D] }, +{ source: [0x315C], NFC: [0x315C], NFD: [0x315C], NFKC: [0x116E], NFKD: [0x116E] }, +{ source: [0x315D], NFC: [0x315D], NFD: [0x315D], NFKC: [0x116F], NFKD: [0x116F] }, +{ source: [0x315E], NFC: [0x315E], NFD: [0x315E], NFKC: [0x1170], NFKD: [0x1170] }, +{ source: [0x315F], NFC: [0x315F], NFD: [0x315F], NFKC: [0x1171], NFKD: [0x1171] }, +{ source: [0x3160], NFC: [0x3160], NFD: [0x3160], NFKC: [0x1172], NFKD: [0x1172] }, +{ source: [0x3161], NFC: [0x3161], NFD: [0x3161], NFKC: [0x1173], NFKD: [0x1173] }, +{ source: [0x3162], NFC: [0x3162], NFD: [0x3162], NFKC: [0x1174], NFKD: [0x1174] }, +{ source: [0x3163], NFC: [0x3163], NFD: [0x3163], NFKC: [0x1175], NFKD: [0x1175] }, +{ source: [0x3164], NFC: [0x3164], NFD: [0x3164], NFKC: [0x1160], NFKD: [0x1160] }, +{ source: [0x3165], NFC: [0x3165], NFD: [0x3165], NFKC: [0x1114], NFKD: [0x1114] }, +{ source: [0x3166], NFC: [0x3166], NFD: [0x3166], NFKC: [0x1115], NFKD: [0x1115] }, +{ source: [0x3167], NFC: [0x3167], NFD: [0x3167], NFKC: [0x11C7], NFKD: [0x11C7] }, +{ source: [0x3168], NFC: [0x3168], NFD: [0x3168], NFKC: [0x11C8], NFKD: [0x11C8] }, +{ source: [0x3169], NFC: [0x3169], NFD: [0x3169], NFKC: [0x11CC], NFKD: [0x11CC] }, +{ source: [0x316A], NFC: [0x316A], NFD: [0x316A], NFKC: [0x11CE], NFKD: [0x11CE] }, +{ source: [0x316B], NFC: [0x316B], NFD: [0x316B], NFKC: [0x11D3], NFKD: [0x11D3] }, +{ source: [0x316C], NFC: [0x316C], NFD: [0x316C], NFKC: [0x11D7], NFKD: [0x11D7] }, +{ source: [0x316D], NFC: [0x316D], NFD: [0x316D], NFKC: [0x11D9], NFKD: [0x11D9] }, +{ source: [0x316E], NFC: [0x316E], NFD: [0x316E], NFKC: [0x111C], NFKD: [0x111C] }, +{ source: [0x316F], NFC: [0x316F], NFD: [0x316F], NFKC: [0x11DD], NFKD: [0x11DD] }, +{ source: [0x3170], NFC: [0x3170], NFD: [0x3170], NFKC: [0x11DF], NFKD: [0x11DF] }, +{ source: [0x3171], NFC: [0x3171], NFD: [0x3171], NFKC: [0x111D], NFKD: [0x111D] }, +{ source: [0x3172], NFC: [0x3172], NFD: [0x3172], NFKC: [0x111E], NFKD: [0x111E] }, +{ source: [0x3173], NFC: [0x3173], NFD: [0x3173], NFKC: [0x1120], NFKD: [0x1120] }, +{ source: [0x3174], NFC: [0x3174], NFD: [0x3174], NFKC: [0x1122], NFKD: [0x1122] }, +{ source: [0x3175], NFC: [0x3175], NFD: [0x3175], NFKC: [0x1123], NFKD: [0x1123] }, +{ source: [0x3176], NFC: [0x3176], NFD: [0x3176], NFKC: [0x1127], NFKD: [0x1127] }, +{ source: [0x3177], NFC: [0x3177], NFD: [0x3177], NFKC: [0x1129], NFKD: [0x1129] }, +{ source: [0x3178], NFC: [0x3178], NFD: [0x3178], NFKC: [0x112B], NFKD: [0x112B] }, +{ source: [0x3179], NFC: [0x3179], NFD: [0x3179], NFKC: [0x112C], NFKD: [0x112C] }, +{ source: [0x317A], NFC: [0x317A], NFD: [0x317A], NFKC: [0x112D], NFKD: [0x112D] }, +{ source: [0x317B], NFC: [0x317B], NFD: [0x317B], NFKC: [0x112E], NFKD: [0x112E] }, +{ source: [0x317C], NFC: [0x317C], NFD: [0x317C], NFKC: [0x112F], NFKD: [0x112F] }, +{ source: [0x317D], NFC: [0x317D], NFD: [0x317D], NFKC: [0x1132], NFKD: [0x1132] }, +{ source: [0x317E], NFC: [0x317E], NFD: [0x317E], NFKC: [0x1136], NFKD: [0x1136] }, +{ source: [0x317F], NFC: [0x317F], NFD: [0x317F], NFKC: [0x1140], NFKD: [0x1140] }, +{ source: [0x3180], NFC: [0x3180], NFD: [0x3180], NFKC: [0x1147], NFKD: [0x1147] }, +{ source: [0x3181], NFC: [0x3181], NFD: [0x3181], NFKC: [0x114C], NFKD: [0x114C] }, +{ source: [0x3182], NFC: [0x3182], NFD: [0x3182], NFKC: [0x11F1], NFKD: [0x11F1] }, +{ source: [0x3183], NFC: [0x3183], NFD: [0x3183], NFKC: [0x11F2], NFKD: [0x11F2] }, +{ source: [0x3184], NFC: [0x3184], NFD: [0x3184], NFKC: [0x1157], NFKD: [0x1157] }, +{ source: [0x3185], NFC: [0x3185], NFD: [0x3185], NFKC: [0x1158], NFKD: [0x1158] }, +{ source: [0x3186], NFC: [0x3186], NFD: [0x3186], NFKC: [0x1159], NFKD: [0x1159] }, +{ source: [0x3187], NFC: [0x3187], NFD: [0x3187], NFKC: [0x1184], NFKD: [0x1184] }, +{ source: [0x3188], NFC: [0x3188], NFD: [0x3188], NFKC: [0x1185], NFKD: [0x1185] }, +{ source: [0x3189], NFC: [0x3189], NFD: [0x3189], NFKC: [0x1188], NFKD: [0x1188] }, +{ source: [0x318A], NFC: [0x318A], NFD: [0x318A], NFKC: [0x1191], NFKD: [0x1191] }, +{ source: [0x318B], NFC: [0x318B], NFD: [0x318B], NFKC: [0x1192], NFKD: [0x1192] }, +{ source: [0x318C], NFC: [0x318C], NFD: [0x318C], NFKC: [0x1194], NFKD: [0x1194] }, +{ source: [0x318D], NFC: [0x318D], NFD: [0x318D], NFKC: [0x119E], NFKD: [0x119E] }, +{ source: [0x318E], NFC: [0x318E], NFD: [0x318E], NFKC: [0x11A1], NFKD: [0x11A1] }, +{ source: [0x3192], NFC: [0x3192], NFD: [0x3192], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x3193], NFC: [0x3193], NFD: [0x3193], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x3194], NFC: [0x3194], NFD: [0x3194], NFKC: [0x4E09], NFKD: [0x4E09] }, +{ source: [0x3195], NFC: [0x3195], NFD: [0x3195], NFKC: [0x56DB], NFKD: [0x56DB] }, +{ source: [0x3196], NFC: [0x3196], NFD: [0x3196], NFKC: [0x4E0A], NFKD: [0x4E0A] }, +{ source: [0x3197], NFC: [0x3197], NFD: [0x3197], NFKC: [0x4E2D], NFKD: [0x4E2D] }, +{ source: [0x3198], NFC: [0x3198], NFD: [0x3198], NFKC: [0x4E0B], NFKD: [0x4E0B] }, +{ source: [0x3199], NFC: [0x3199], NFD: [0x3199], NFKC: [0x7532], NFKD: [0x7532] }, +{ source: [0x319A], NFC: [0x319A], NFD: [0x319A], NFKC: [0x4E59], NFKD: [0x4E59] }, +{ source: [0x319B], NFC: [0x319B], NFD: [0x319B], NFKC: [0x4E19], NFKD: [0x4E19] }, +{ source: [0x319C], NFC: [0x319C], NFD: [0x319C], NFKC: [0x4E01], NFKD: [0x4E01] }, +{ source: [0x319D], NFC: [0x319D], NFD: [0x319D], NFKC: [0x5929], NFKD: [0x5929] }, +{ source: [0x319E], NFC: [0x319E], NFD: [0x319E], NFKC: [0x5730], NFKD: [0x5730] }, +{ source: [0x319F], NFC: [0x319F], NFD: [0x319F], NFKC: [0x4EBA], NFKD: [0x4EBA] }, +{ source: [0x3200], NFC: [0x3200], NFD: [0x3200], NFKC: [0x0028, 0x1100, 0x0029], NFKD: [0x0028, 0x1100, 0x0029] }, +{ source: [0x3201], NFC: [0x3201], NFD: [0x3201], NFKC: [0x0028, 0x1102, 0x0029], NFKD: [0x0028, 0x1102, 0x0029] }, +{ source: [0x3202], NFC: [0x3202], NFD: [0x3202], NFKC: [0x0028, 0x1103, 0x0029], NFKD: [0x0028, 0x1103, 0x0029] }, +{ source: [0x3203], NFC: [0x3203], NFD: [0x3203], NFKC: [0x0028, 0x1105, 0x0029], NFKD: [0x0028, 0x1105, 0x0029] }, +{ source: [0x3204], NFC: [0x3204], NFD: [0x3204], NFKC: [0x0028, 0x1106, 0x0029], NFKD: [0x0028, 0x1106, 0x0029] }, +{ source: [0x3205], NFC: [0x3205], NFD: [0x3205], NFKC: [0x0028, 0x1107, 0x0029], NFKD: [0x0028, 0x1107, 0x0029] }, +{ source: [0x3206], NFC: [0x3206], NFD: [0x3206], NFKC: [0x0028, 0x1109, 0x0029], NFKD: [0x0028, 0x1109, 0x0029] }, +{ source: [0x3207], NFC: [0x3207], NFD: [0x3207], NFKC: [0x0028, 0x110B, 0x0029], NFKD: [0x0028, 0x110B, 0x0029] }, +{ source: [0x3208], NFC: [0x3208], NFD: [0x3208], NFKC: [0x0028, 0x110C, 0x0029], NFKD: [0x0028, 0x110C, 0x0029] }, +{ source: [0x3209], NFC: [0x3209], NFD: [0x3209], NFKC: [0x0028, 0x110E, 0x0029], NFKD: [0x0028, 0x110E, 0x0029] }, +{ source: [0x320A], NFC: [0x320A], NFD: [0x320A], NFKC: [0x0028, 0x110F, 0x0029], NFKD: [0x0028, 0x110F, 0x0029] }, +{ source: [0x320B], NFC: [0x320B], NFD: [0x320B], NFKC: [0x0028, 0x1110, 0x0029], NFKD: [0x0028, 0x1110, 0x0029] }, +{ source: [0x320C], NFC: [0x320C], NFD: [0x320C], NFKC: [0x0028, 0x1111, 0x0029], NFKD: [0x0028, 0x1111, 0x0029] }, +{ source: [0x320D], NFC: [0x320D], NFD: [0x320D], NFKC: [0x0028, 0x1112, 0x0029], NFKD: [0x0028, 0x1112, 0x0029] }, +{ source: [0x320E], NFC: [0x320E], NFD: [0x320E], NFKC: [0x0028, 0xAC00, 0x0029], NFKD: [0x0028, 0x1100, 0x1161, 0x0029] }, +{ source: [0x320F], NFC: [0x320F], NFD: [0x320F], NFKC: [0x0028, 0xB098, 0x0029], NFKD: [0x0028, 0x1102, 0x1161, 0x0029] }, +{ source: [0x3210], NFC: [0x3210], NFD: [0x3210], NFKC: [0x0028, 0xB2E4, 0x0029], NFKD: [0x0028, 0x1103, 0x1161, 0x0029] }, +{ source: [0x3211], NFC: [0x3211], NFD: [0x3211], NFKC: [0x0028, 0xB77C, 0x0029], NFKD: [0x0028, 0x1105, 0x1161, 0x0029] }, +{ source: [0x3212], NFC: [0x3212], NFD: [0x3212], NFKC: [0x0028, 0xB9C8, 0x0029], NFKD: [0x0028, 0x1106, 0x1161, 0x0029] }, +{ source: [0x3213], NFC: [0x3213], NFD: [0x3213], NFKC: [0x0028, 0xBC14, 0x0029], NFKD: [0x0028, 0x1107, 0x1161, 0x0029] }, +{ source: [0x3214], NFC: [0x3214], NFD: [0x3214], NFKC: [0x0028, 0xC0AC, 0x0029], NFKD: [0x0028, 0x1109, 0x1161, 0x0029] }, +{ source: [0x3215], NFC: [0x3215], NFD: [0x3215], NFKC: [0x0028, 0xC544, 0x0029], NFKD: [0x0028, 0x110B, 0x1161, 0x0029] }, +{ source: [0x3216], NFC: [0x3216], NFD: [0x3216], NFKC: [0x0028, 0xC790, 0x0029], NFKD: [0x0028, 0x110C, 0x1161, 0x0029] }, +{ source: [0x3217], NFC: [0x3217], NFD: [0x3217], NFKC: [0x0028, 0xCC28, 0x0029], NFKD: [0x0028, 0x110E, 0x1161, 0x0029] }, +{ source: [0x3218], NFC: [0x3218], NFD: [0x3218], NFKC: [0x0028, 0xCE74, 0x0029], NFKD: [0x0028, 0x110F, 0x1161, 0x0029] }, +{ source: [0x3219], NFC: [0x3219], NFD: [0x3219], NFKC: [0x0028, 0xD0C0, 0x0029], NFKD: [0x0028, 0x1110, 0x1161, 0x0029] }, +{ source: [0x321A], NFC: [0x321A], NFD: [0x321A], NFKC: [0x0028, 0xD30C, 0x0029], NFKD: [0x0028, 0x1111, 0x1161, 0x0029] }, +{ source: [0x321B], NFC: [0x321B], NFD: [0x321B], NFKC: [0x0028, 0xD558, 0x0029], NFKD: [0x0028, 0x1112, 0x1161, 0x0029] }, +{ source: [0x321C], NFC: [0x321C], NFD: [0x321C], NFKC: [0x0028, 0xC8FC, 0x0029], NFKD: [0x0028, 0x110C, 0x116E, 0x0029] }, +{ source: [0x321D], NFC: [0x321D], NFD: [0x321D], NFKC: [0x0028, 0xC624, 0xC804, 0x0029], NFKD: [0x0028, 0x110B, 0x1169, 0x110C, 0x1165, 0x11AB, 0x0029] }, +{ source: [0x321E], NFC: [0x321E], NFD: [0x321E], NFKC: [0x0028, 0xC624, 0xD6C4, 0x0029], NFKD: [0x0028, 0x110B, 0x1169, 0x1112, 0x116E, 0x0029] }, +{ source: [0x3220], NFC: [0x3220], NFD: [0x3220], NFKC: [0x0028, 0x4E00, 0x0029], NFKD: [0x0028, 0x4E00, 0x0029] }, +{ source: [0x3221], NFC: [0x3221], NFD: [0x3221], NFKC: [0x0028, 0x4E8C, 0x0029], NFKD: [0x0028, 0x4E8C, 0x0029] }, +{ source: [0x3222], NFC: [0x3222], NFD: [0x3222], NFKC: [0x0028, 0x4E09, 0x0029], NFKD: [0x0028, 0x4E09, 0x0029] }, +{ source: [0x3223], NFC: [0x3223], NFD: [0x3223], NFKC: [0x0028, 0x56DB, 0x0029], NFKD: [0x0028, 0x56DB, 0x0029] }, +{ source: [0x3224], NFC: [0x3224], NFD: [0x3224], NFKC: [0x0028, 0x4E94, 0x0029], NFKD: [0x0028, 0x4E94, 0x0029] }, +{ source: [0x3225], NFC: [0x3225], NFD: [0x3225], NFKC: [0x0028, 0x516D, 0x0029], NFKD: [0x0028, 0x516D, 0x0029] }, +{ source: [0x3226], NFC: [0x3226], NFD: [0x3226], NFKC: [0x0028, 0x4E03, 0x0029], NFKD: [0x0028, 0x4E03, 0x0029] }, +{ source: [0x3227], NFC: [0x3227], NFD: [0x3227], NFKC: [0x0028, 0x516B, 0x0029], NFKD: [0x0028, 0x516B, 0x0029] }, +{ source: [0x3228], NFC: [0x3228], NFD: [0x3228], NFKC: [0x0028, 0x4E5D, 0x0029], NFKD: [0x0028, 0x4E5D, 0x0029] }, +{ source: [0x3229], NFC: [0x3229], NFD: [0x3229], NFKC: [0x0028, 0x5341, 0x0029], NFKD: [0x0028, 0x5341, 0x0029] }, +{ source: [0x322A], NFC: [0x322A], NFD: [0x322A], NFKC: [0x0028, 0x6708, 0x0029], NFKD: [0x0028, 0x6708, 0x0029] }, +{ source: [0x322B], NFC: [0x322B], NFD: [0x322B], NFKC: [0x0028, 0x706B, 0x0029], NFKD: [0x0028, 0x706B, 0x0029] }, +{ source: [0x322C], NFC: [0x322C], NFD: [0x322C], NFKC: [0x0028, 0x6C34, 0x0029], NFKD: [0x0028, 0x6C34, 0x0029] }, +{ source: [0x322D], NFC: [0x322D], NFD: [0x322D], NFKC: [0x0028, 0x6728, 0x0029], NFKD: [0x0028, 0x6728, 0x0029] }, +{ source: [0x322E], NFC: [0x322E], NFD: [0x322E], NFKC: [0x0028, 0x91D1, 0x0029], NFKD: [0x0028, 0x91D1, 0x0029] }, +{ source: [0x322F], NFC: [0x322F], NFD: [0x322F], NFKC: [0x0028, 0x571F, 0x0029], NFKD: [0x0028, 0x571F, 0x0029] }, +{ source: [0x3230], NFC: [0x3230], NFD: [0x3230], NFKC: [0x0028, 0x65E5, 0x0029], NFKD: [0x0028, 0x65E5, 0x0029] }, +{ source: [0x3231], NFC: [0x3231], NFD: [0x3231], NFKC: [0x0028, 0x682A, 0x0029], NFKD: [0x0028, 0x682A, 0x0029] }, +{ source: [0x3232], NFC: [0x3232], NFD: [0x3232], NFKC: [0x0028, 0x6709, 0x0029], NFKD: [0x0028, 0x6709, 0x0029] }, +{ source: [0x3233], NFC: [0x3233], NFD: [0x3233], NFKC: [0x0028, 0x793E, 0x0029], NFKD: [0x0028, 0x793E, 0x0029] }, +{ source: [0x3234], NFC: [0x3234], NFD: [0x3234], NFKC: [0x0028, 0x540D, 0x0029], NFKD: [0x0028, 0x540D, 0x0029] }, +{ source: [0x3235], NFC: [0x3235], NFD: [0x3235], NFKC: [0x0028, 0x7279, 0x0029], NFKD: [0x0028, 0x7279, 0x0029] }, +{ source: [0x3236], NFC: [0x3236], NFD: [0x3236], NFKC: [0x0028, 0x8CA1, 0x0029], NFKD: [0x0028, 0x8CA1, 0x0029] }, +{ source: [0x3237], NFC: [0x3237], NFD: [0x3237], NFKC: [0x0028, 0x795D, 0x0029], NFKD: [0x0028, 0x795D, 0x0029] }, +{ source: [0x3238], NFC: [0x3238], NFD: [0x3238], NFKC: [0x0028, 0x52B4, 0x0029], NFKD: [0x0028, 0x52B4, 0x0029] }, +{ source: [0x3239], NFC: [0x3239], NFD: [0x3239], NFKC: [0x0028, 0x4EE3, 0x0029], NFKD: [0x0028, 0x4EE3, 0x0029] }, +{ source: [0x323A], NFC: [0x323A], NFD: [0x323A], NFKC: [0x0028, 0x547C, 0x0029], NFKD: [0x0028, 0x547C, 0x0029] }, +{ source: [0x323B], NFC: [0x323B], NFD: [0x323B], NFKC: [0x0028, 0x5B66, 0x0029], NFKD: [0x0028, 0x5B66, 0x0029] }, +{ source: [0x323C], NFC: [0x323C], NFD: [0x323C], NFKC: [0x0028, 0x76E3, 0x0029], NFKD: [0x0028, 0x76E3, 0x0029] }, +{ source: [0x323D], NFC: [0x323D], NFD: [0x323D], NFKC: [0x0028, 0x4F01, 0x0029], NFKD: [0x0028, 0x4F01, 0x0029] }, +{ source: [0x323E], NFC: [0x323E], NFD: [0x323E], NFKC: [0x0028, 0x8CC7, 0x0029], NFKD: [0x0028, 0x8CC7, 0x0029] }, +{ source: [0x323F], NFC: [0x323F], NFD: [0x323F], NFKC: [0x0028, 0x5354, 0x0029], NFKD: [0x0028, 0x5354, 0x0029] }, +{ source: [0x3240], NFC: [0x3240], NFD: [0x3240], NFKC: [0x0028, 0x796D, 0x0029], NFKD: [0x0028, 0x796D, 0x0029] }, +{ source: [0x3241], NFC: [0x3241], NFD: [0x3241], NFKC: [0x0028, 0x4F11, 0x0029], NFKD: [0x0028, 0x4F11, 0x0029] }, +{ source: [0x3242], NFC: [0x3242], NFD: [0x3242], NFKC: [0x0028, 0x81EA, 0x0029], NFKD: [0x0028, 0x81EA, 0x0029] }, +{ source: [0x3243], NFC: [0x3243], NFD: [0x3243], NFKC: [0x0028, 0x81F3, 0x0029], NFKD: [0x0028, 0x81F3, 0x0029] }, +{ source: [0x3244], NFC: [0x3244], NFD: [0x3244], NFKC: [0x554F], NFKD: [0x554F] }, +{ source: [0x3245], NFC: [0x3245], NFD: [0x3245], NFKC: [0x5E7C], NFKD: [0x5E7C] }, +{ source: [0x3246], NFC: [0x3246], NFD: [0x3246], NFKC: [0x6587], NFKD: [0x6587] }, +{ source: [0x3247], NFC: [0x3247], NFD: [0x3247], NFKC: [0x7B8F], NFKD: [0x7B8F] }, +{ source: [0x3250], NFC: [0x3250], NFD: [0x3250], NFKC: [0x0050, 0x0054, 0x0045], NFKD: [0x0050, 0x0054, 0x0045] }, +{ source: [0x3251], NFC: [0x3251], NFD: [0x3251], NFKC: [0x0032, 0x0031], NFKD: [0x0032, 0x0031] }, +{ source: [0x3252], NFC: [0x3252], NFD: [0x3252], NFKC: [0x0032, 0x0032], NFKD: [0x0032, 0x0032] }, +{ source: [0x3253], NFC: [0x3253], NFD: [0x3253], NFKC: [0x0032, 0x0033], NFKD: [0x0032, 0x0033] }, +{ source: [0x3254], NFC: [0x3254], NFD: [0x3254], NFKC: [0x0032, 0x0034], NFKD: [0x0032, 0x0034] }, +{ source: [0x3255], NFC: [0x3255], NFD: [0x3255], NFKC: [0x0032, 0x0035], NFKD: [0x0032, 0x0035] }, +{ source: [0x3256], NFC: [0x3256], NFD: [0x3256], NFKC: [0x0032, 0x0036], NFKD: [0x0032, 0x0036] }, +{ source: [0x3257], NFC: [0x3257], NFD: [0x3257], NFKC: [0x0032, 0x0037], NFKD: [0x0032, 0x0037] }, +{ source: [0x3258], NFC: [0x3258], NFD: [0x3258], NFKC: [0x0032, 0x0038], NFKD: [0x0032, 0x0038] }, +{ source: [0x3259], NFC: [0x3259], NFD: [0x3259], NFKC: [0x0032, 0x0039], NFKD: [0x0032, 0x0039] }, +{ source: [0x325A], NFC: [0x325A], NFD: [0x325A], NFKC: [0x0033, 0x0030], NFKD: [0x0033, 0x0030] }, +{ source: [0x325B], NFC: [0x325B], NFD: [0x325B], NFKC: [0x0033, 0x0031], NFKD: [0x0033, 0x0031] }, +{ source: [0x325C], NFC: [0x325C], NFD: [0x325C], NFKC: [0x0033, 0x0032], NFKD: [0x0033, 0x0032] }, +{ source: [0x325D], NFC: [0x325D], NFD: [0x325D], NFKC: [0x0033, 0x0033], NFKD: [0x0033, 0x0033] }, +{ source: [0x325E], NFC: [0x325E], NFD: [0x325E], NFKC: [0x0033, 0x0034], NFKD: [0x0033, 0x0034] }, +{ source: [0x325F], NFC: [0x325F], NFD: [0x325F], NFKC: [0x0033, 0x0035], NFKD: [0x0033, 0x0035] }, +{ source: [0x3260], NFC: [0x3260], NFD: [0x3260], NFKC: [0x1100], NFKD: [0x1100] }, +{ source: [0x3261], NFC: [0x3261], NFD: [0x3261], NFKC: [0x1102], NFKD: [0x1102] }, +{ source: [0x3262], NFC: [0x3262], NFD: [0x3262], NFKC: [0x1103], NFKD: [0x1103] }, +{ source: [0x3263], NFC: [0x3263], NFD: [0x3263], NFKC: [0x1105], NFKD: [0x1105] }, +{ source: [0x3264], NFC: [0x3264], NFD: [0x3264], NFKC: [0x1106], NFKD: [0x1106] }, +{ source: [0x3265], NFC: [0x3265], NFD: [0x3265], NFKC: [0x1107], NFKD: [0x1107] }, +{ source: [0x3266], NFC: [0x3266], NFD: [0x3266], NFKC: [0x1109], NFKD: [0x1109] }, +{ source: [0x3267], NFC: [0x3267], NFD: [0x3267], NFKC: [0x110B], NFKD: [0x110B] }, +{ source: [0x3268], NFC: [0x3268], NFD: [0x3268], NFKC: [0x110C], NFKD: [0x110C] }, +{ source: [0x3269], NFC: [0x3269], NFD: [0x3269], NFKC: [0x110E], NFKD: [0x110E] }, +{ source: [0x326A], NFC: [0x326A], NFD: [0x326A], NFKC: [0x110F], NFKD: [0x110F] }, +{ source: [0x326B], NFC: [0x326B], NFD: [0x326B], NFKC: [0x1110], NFKD: [0x1110] }, +{ source: [0x326C], NFC: [0x326C], NFD: [0x326C], NFKC: [0x1111], NFKD: [0x1111] }, +{ source: [0x326D], NFC: [0x326D], NFD: [0x326D], NFKC: [0x1112], NFKD: [0x1112] }, +{ source: [0x326E], NFC: [0x326E], NFD: [0x326E], NFKC: [0xAC00], NFKD: [0x1100, 0x1161] }, +{ source: [0x326F], NFC: [0x326F], NFD: [0x326F], NFKC: [0xB098], NFKD: [0x1102, 0x1161] }, +{ source: [0x3270], NFC: [0x3270], NFD: [0x3270], NFKC: [0xB2E4], NFKD: [0x1103, 0x1161] }, +{ source: [0x3271], NFC: [0x3271], NFD: [0x3271], NFKC: [0xB77C], NFKD: [0x1105, 0x1161] }, +{ source: [0x3272], NFC: [0x3272], NFD: [0x3272], NFKC: [0xB9C8], NFKD: [0x1106, 0x1161] }, +{ source: [0x3273], NFC: [0x3273], NFD: [0x3273], NFKC: [0xBC14], NFKD: [0x1107, 0x1161] }, +{ source: [0x3274], NFC: [0x3274], NFD: [0x3274], NFKC: [0xC0AC], NFKD: [0x1109, 0x1161] }, +{ source: [0x3275], NFC: [0x3275], NFD: [0x3275], NFKC: [0xC544], NFKD: [0x110B, 0x1161] }, +{ source: [0x3276], NFC: [0x3276], NFD: [0x3276], NFKC: [0xC790], NFKD: [0x110C, 0x1161] }, +{ source: [0x3277], NFC: [0x3277], NFD: [0x3277], NFKC: [0xCC28], NFKD: [0x110E, 0x1161] }, +{ source: [0x3278], NFC: [0x3278], NFD: [0x3278], NFKC: [0xCE74], NFKD: [0x110F, 0x1161] }, +{ source: [0x3279], NFC: [0x3279], NFD: [0x3279], NFKC: [0xD0C0], NFKD: [0x1110, 0x1161] }, +{ source: [0x327A], NFC: [0x327A], NFD: [0x327A], NFKC: [0xD30C], NFKD: [0x1111, 0x1161] }, +{ source: [0x327B], NFC: [0x327B], NFD: [0x327B], NFKC: [0xD558], NFKD: [0x1112, 0x1161] }, +{ source: [0x327C], NFC: [0x327C], NFD: [0x327C], NFKC: [0xCC38, 0xACE0], NFKD: [0x110E, 0x1161, 0x11B7, 0x1100, 0x1169] }, +{ source: [0x327D], NFC: [0x327D], NFD: [0x327D], NFKC: [0xC8FC, 0xC758], NFKD: [0x110C, 0x116E, 0x110B, 0x1174] }, +{ source: [0x327E], NFC: [0x327E], NFD: [0x327E], NFKC: [0xC6B0], NFKD: [0x110B, 0x116E] }, +{ source: [0x3280], NFC: [0x3280], NFD: [0x3280], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x3281], NFC: [0x3281], NFD: [0x3281], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x3282], NFC: [0x3282], NFD: [0x3282], NFKC: [0x4E09], NFKD: [0x4E09] }, +{ source: [0x3283], NFC: [0x3283], NFD: [0x3283], NFKC: [0x56DB], NFKD: [0x56DB] }, +{ source: [0x3284], NFC: [0x3284], NFD: [0x3284], NFKC: [0x4E94], NFKD: [0x4E94] }, +{ source: [0x3285], NFC: [0x3285], NFD: [0x3285], NFKC: [0x516D], NFKD: [0x516D] }, +{ source: [0x3286], NFC: [0x3286], NFD: [0x3286], NFKC: [0x4E03], NFKD: [0x4E03] }, +{ source: [0x3287], NFC: [0x3287], NFD: [0x3287], NFKC: [0x516B], NFKD: [0x516B] }, +{ source: [0x3288], NFC: [0x3288], NFD: [0x3288], NFKC: [0x4E5D], NFKD: [0x4E5D] }, +{ source: [0x3289], NFC: [0x3289], NFD: [0x3289], NFKC: [0x5341], NFKD: [0x5341] }, +{ source: [0x328A], NFC: [0x328A], NFD: [0x328A], NFKC: [0x6708], NFKD: [0x6708] }, +{ source: [0x328B], NFC: [0x328B], NFD: [0x328B], NFKC: [0x706B], NFKD: [0x706B] }, +{ source: [0x328C], NFC: [0x328C], NFD: [0x328C], NFKC: [0x6C34], NFKD: [0x6C34] }, +{ source: [0x328D], NFC: [0x328D], NFD: [0x328D], NFKC: [0x6728], NFKD: [0x6728] }, +{ source: [0x328E], NFC: [0x328E], NFD: [0x328E], NFKC: [0x91D1], NFKD: [0x91D1] }, +{ source: [0x328F], NFC: [0x328F], NFD: [0x328F], NFKC: [0x571F], NFKD: [0x571F] }, +{ source: [0x3290], NFC: [0x3290], NFD: [0x3290], NFKC: [0x65E5], NFKD: [0x65E5] }, +{ source: [0x3291], NFC: [0x3291], NFD: [0x3291], NFKC: [0x682A], NFKD: [0x682A] }, +{ source: [0x3292], NFC: [0x3292], NFD: [0x3292], NFKC: [0x6709], NFKD: [0x6709] }, +{ source: [0x3293], NFC: [0x3293], NFD: [0x3293], NFKC: [0x793E], NFKD: [0x793E] }, +{ source: [0x3294], NFC: [0x3294], NFD: [0x3294], NFKC: [0x540D], NFKD: [0x540D] }, +{ source: [0x3295], NFC: [0x3295], NFD: [0x3295], NFKC: [0x7279], NFKD: [0x7279] }, +{ source: [0x3296], NFC: [0x3296], NFD: [0x3296], NFKC: [0x8CA1], NFKD: [0x8CA1] }, +{ source: [0x3297], NFC: [0x3297], NFD: [0x3297], NFKC: [0x795D], NFKD: [0x795D] }, +{ source: [0x3298], NFC: [0x3298], NFD: [0x3298], NFKC: [0x52B4], NFKD: [0x52B4] }, +{ source: [0x3299], NFC: [0x3299], NFD: [0x3299], NFKC: [0x79D8], NFKD: [0x79D8] }, +{ source: [0x329A], NFC: [0x329A], NFD: [0x329A], NFKC: [0x7537], NFKD: [0x7537] }, +{ source: [0x329B], NFC: [0x329B], NFD: [0x329B], NFKC: [0x5973], NFKD: [0x5973] }, +{ source: [0x329C], NFC: [0x329C], NFD: [0x329C], NFKC: [0x9069], NFKD: [0x9069] }, +{ source: [0x329D], NFC: [0x329D], NFD: [0x329D], NFKC: [0x512A], NFKD: [0x512A] }, +{ source: [0x329E], NFC: [0x329E], NFD: [0x329E], NFKC: [0x5370], NFKD: [0x5370] }, +{ source: [0x329F], NFC: [0x329F], NFD: [0x329F], NFKC: [0x6CE8], NFKD: [0x6CE8] }, +{ source: [0x32A0], NFC: [0x32A0], NFD: [0x32A0], NFKC: [0x9805], NFKD: [0x9805] }, +{ source: [0x32A1], NFC: [0x32A1], NFD: [0x32A1], NFKC: [0x4F11], NFKD: [0x4F11] }, +{ source: [0x32A2], NFC: [0x32A2], NFD: [0x32A2], NFKC: [0x5199], NFKD: [0x5199] }, +{ source: [0x32A3], NFC: [0x32A3], NFD: [0x32A3], NFKC: [0x6B63], NFKD: [0x6B63] }, +{ source: [0x32A4], NFC: [0x32A4], NFD: [0x32A4], NFKC: [0x4E0A], NFKD: [0x4E0A] }, +{ source: [0x32A5], NFC: [0x32A5], NFD: [0x32A5], NFKC: [0x4E2D], NFKD: [0x4E2D] }, +{ source: [0x32A6], NFC: [0x32A6], NFD: [0x32A6], NFKC: [0x4E0B], NFKD: [0x4E0B] }, +{ source: [0x32A7], NFC: [0x32A7], NFD: [0x32A7], NFKC: [0x5DE6], NFKD: [0x5DE6] }, +{ source: [0x32A8], NFC: [0x32A8], NFD: [0x32A8], NFKC: [0x53F3], NFKD: [0x53F3] }, +{ source: [0x32A9], NFC: [0x32A9], NFD: [0x32A9], NFKC: [0x533B], NFKD: [0x533B] }, +{ source: [0x32AA], NFC: [0x32AA], NFD: [0x32AA], NFKC: [0x5B97], NFKD: [0x5B97] }, +{ source: [0x32AB], NFC: [0x32AB], NFD: [0x32AB], NFKC: [0x5B66], NFKD: [0x5B66] }, +{ source: [0x32AC], NFC: [0x32AC], NFD: [0x32AC], NFKC: [0x76E3], NFKD: [0x76E3] }, +{ source: [0x32AD], NFC: [0x32AD], NFD: [0x32AD], NFKC: [0x4F01], NFKD: [0x4F01] }, +{ source: [0x32AE], NFC: [0x32AE], NFD: [0x32AE], NFKC: [0x8CC7], NFKD: [0x8CC7] }, +{ source: [0x32AF], NFC: [0x32AF], NFD: [0x32AF], NFKC: [0x5354], NFKD: [0x5354] }, +{ source: [0x32B0], NFC: [0x32B0], NFD: [0x32B0], NFKC: [0x591C], NFKD: [0x591C] }, +{ source: [0x32B1], NFC: [0x32B1], NFD: [0x32B1], NFKC: [0x0033, 0x0036], NFKD: [0x0033, 0x0036] }, +{ source: [0x32B2], NFC: [0x32B2], NFD: [0x32B2], NFKC: [0x0033, 0x0037], NFKD: [0x0033, 0x0037] }, +{ source: [0x32B3], NFC: [0x32B3], NFD: [0x32B3], NFKC: [0x0033, 0x0038], NFKD: [0x0033, 0x0038] }, +{ source: [0x32B4], NFC: [0x32B4], NFD: [0x32B4], NFKC: [0x0033, 0x0039], NFKD: [0x0033, 0x0039] }, +{ source: [0x32B5], NFC: [0x32B5], NFD: [0x32B5], NFKC: [0x0034, 0x0030], NFKD: [0x0034, 0x0030] }, +{ source: [0x32B6], NFC: [0x32B6], NFD: [0x32B6], NFKC: [0x0034, 0x0031], NFKD: [0x0034, 0x0031] }, +{ source: [0x32B7], NFC: [0x32B7], NFD: [0x32B7], NFKC: [0x0034, 0x0032], NFKD: [0x0034, 0x0032] }, +{ source: [0x32B8], NFC: [0x32B8], NFD: [0x32B8], NFKC: [0x0034, 0x0033], NFKD: [0x0034, 0x0033] }, +{ source: [0x32B9], NFC: [0x32B9], NFD: [0x32B9], NFKC: [0x0034, 0x0034], NFKD: [0x0034, 0x0034] }, +{ source: [0x32BA], NFC: [0x32BA], NFD: [0x32BA], NFKC: [0x0034, 0x0035], NFKD: [0x0034, 0x0035] }, +{ source: [0x32BB], NFC: [0x32BB], NFD: [0x32BB], NFKC: [0x0034, 0x0036], NFKD: [0x0034, 0x0036] }, +{ source: [0x32BC], NFC: [0x32BC], NFD: [0x32BC], NFKC: [0x0034, 0x0037], NFKD: [0x0034, 0x0037] }, +{ source: [0x32BD], NFC: [0x32BD], NFD: [0x32BD], NFKC: [0x0034, 0x0038], NFKD: [0x0034, 0x0038] }, +{ source: [0x32BE], NFC: [0x32BE], NFD: [0x32BE], NFKC: [0x0034, 0x0039], NFKD: [0x0034, 0x0039] }, +{ source: [0x32BF], NFC: [0x32BF], NFD: [0x32BF], NFKC: [0x0035, 0x0030], NFKD: [0x0035, 0x0030] }, +{ source: [0x32C0], NFC: [0x32C0], NFD: [0x32C0], NFKC: [0x0031, 0x6708], NFKD: [0x0031, 0x6708] }, +{ source: [0x32C1], NFC: [0x32C1], NFD: [0x32C1], NFKC: [0x0032, 0x6708], NFKD: [0x0032, 0x6708] }, +{ source: [0x32C2], NFC: [0x32C2], NFD: [0x32C2], NFKC: [0x0033, 0x6708], NFKD: [0x0033, 0x6708] }, +{ source: [0x32C3], NFC: [0x32C3], NFD: [0x32C3], NFKC: [0x0034, 0x6708], NFKD: [0x0034, 0x6708] }, +{ source: [0x32C4], NFC: [0x32C4], NFD: [0x32C4], NFKC: [0x0035, 0x6708], NFKD: [0x0035, 0x6708] }, +{ source: [0x32C5], NFC: [0x32C5], NFD: [0x32C5], NFKC: [0x0036, 0x6708], NFKD: [0x0036, 0x6708] }, +{ source: [0x32C6], NFC: [0x32C6], NFD: [0x32C6], NFKC: [0x0037, 0x6708], NFKD: [0x0037, 0x6708] }, +{ source: [0x32C7], NFC: [0x32C7], NFD: [0x32C7], NFKC: [0x0038, 0x6708], NFKD: [0x0038, 0x6708] }, +{ source: [0x32C8], NFC: [0x32C8], NFD: [0x32C8], NFKC: [0x0039, 0x6708], NFKD: [0x0039, 0x6708] }, +{ source: [0x32C9], NFC: [0x32C9], NFD: [0x32C9], NFKC: [0x0031, 0x0030, 0x6708], NFKD: [0x0031, 0x0030, 0x6708] }, +{ source: [0x32CA], NFC: [0x32CA], NFD: [0x32CA], NFKC: [0x0031, 0x0031, 0x6708], NFKD: [0x0031, 0x0031, 0x6708] }, +{ source: [0x32CB], NFC: [0x32CB], NFD: [0x32CB], NFKC: [0x0031, 0x0032, 0x6708], NFKD: [0x0031, 0x0032, 0x6708] }, +{ source: [0x32CC], NFC: [0x32CC], NFD: [0x32CC], NFKC: [0x0048, 0x0067], NFKD: [0x0048, 0x0067] }, +{ source: [0x32CD], NFC: [0x32CD], NFD: [0x32CD], NFKC: [0x0065, 0x0072, 0x0067], NFKD: [0x0065, 0x0072, 0x0067] }, +{ source: [0x32CE], NFC: [0x32CE], NFD: [0x32CE], NFKC: [0x0065, 0x0056], NFKD: [0x0065, 0x0056] }, +{ source: [0x32CF], NFC: [0x32CF], NFD: [0x32CF], NFKC: [0x004C, 0x0054, 0x0044], NFKD: [0x004C, 0x0054, 0x0044] }, +{ source: [0x32D0], NFC: [0x32D0], NFD: [0x32D0], NFKC: [0x30A2], NFKD: [0x30A2] }, +{ source: [0x32D1], NFC: [0x32D1], NFD: [0x32D1], NFKC: [0x30A4], NFKD: [0x30A4] }, +{ source: [0x32D2], NFC: [0x32D2], NFD: [0x32D2], NFKC: [0x30A6], NFKD: [0x30A6] }, +{ source: [0x32D3], NFC: [0x32D3], NFD: [0x32D3], NFKC: [0x30A8], NFKD: [0x30A8] }, +{ source: [0x32D4], NFC: [0x32D4], NFD: [0x32D4], NFKC: [0x30AA], NFKD: [0x30AA] }, +{ source: [0x32D5], NFC: [0x32D5], NFD: [0x32D5], NFKC: [0x30AB], NFKD: [0x30AB] }, +{ source: [0x32D6], NFC: [0x32D6], NFD: [0x32D6], NFKC: [0x30AD], NFKD: [0x30AD] }, +{ source: [0x32D7], NFC: [0x32D7], NFD: [0x32D7], NFKC: [0x30AF], NFKD: [0x30AF] }, +{ source: [0x32D8], NFC: [0x32D8], NFD: [0x32D8], NFKC: [0x30B1], NFKD: [0x30B1] }, +{ source: [0x32D9], NFC: [0x32D9], NFD: [0x32D9], NFKC: [0x30B3], NFKD: [0x30B3] }, +{ source: [0x32DA], NFC: [0x32DA], NFD: [0x32DA], NFKC: [0x30B5], NFKD: [0x30B5] }, +{ source: [0x32DB], NFC: [0x32DB], NFD: [0x32DB], NFKC: [0x30B7], NFKD: [0x30B7] }, +{ source: [0x32DC], NFC: [0x32DC], NFD: [0x32DC], NFKC: [0x30B9], NFKD: [0x30B9] }, +{ source: [0x32DD], NFC: [0x32DD], NFD: [0x32DD], NFKC: [0x30BB], NFKD: [0x30BB] }, +{ source: [0x32DE], NFC: [0x32DE], NFD: [0x32DE], NFKC: [0x30BD], NFKD: [0x30BD] }, +{ source: [0x32DF], NFC: [0x32DF], NFD: [0x32DF], NFKC: [0x30BF], NFKD: [0x30BF] }, +{ source: [0x32E0], NFC: [0x32E0], NFD: [0x32E0], NFKC: [0x30C1], NFKD: [0x30C1] }, +{ source: [0x32E1], NFC: [0x32E1], NFD: [0x32E1], NFKC: [0x30C4], NFKD: [0x30C4] }, +{ source: [0x32E2], NFC: [0x32E2], NFD: [0x32E2], NFKC: [0x30C6], NFKD: [0x30C6] }, +{ source: [0x32E3], NFC: [0x32E3], NFD: [0x32E3], NFKC: [0x30C8], NFKD: [0x30C8] }, +{ source: [0x32E4], NFC: [0x32E4], NFD: [0x32E4], NFKC: [0x30CA], NFKD: [0x30CA] }, +{ source: [0x32E5], NFC: [0x32E5], NFD: [0x32E5], NFKC: [0x30CB], NFKD: [0x30CB] }, +{ source: [0x32E6], NFC: [0x32E6], NFD: [0x32E6], NFKC: [0x30CC], NFKD: [0x30CC] }, +{ source: [0x32E7], NFC: [0x32E7], NFD: [0x32E7], NFKC: [0x30CD], NFKD: [0x30CD] }, +{ source: [0x32E8], NFC: [0x32E8], NFD: [0x32E8], NFKC: [0x30CE], NFKD: [0x30CE] }, +{ source: [0x32E9], NFC: [0x32E9], NFD: [0x32E9], NFKC: [0x30CF], NFKD: [0x30CF] }, +{ source: [0x32EA], NFC: [0x32EA], NFD: [0x32EA], NFKC: [0x30D2], NFKD: [0x30D2] }, +{ source: [0x32EB], NFC: [0x32EB], NFD: [0x32EB], NFKC: [0x30D5], NFKD: [0x30D5] }, +{ source: [0x32EC], NFC: [0x32EC], NFD: [0x32EC], NFKC: [0x30D8], NFKD: [0x30D8] }, +{ source: [0x32ED], NFC: [0x32ED], NFD: [0x32ED], NFKC: [0x30DB], NFKD: [0x30DB] }, +{ source: [0x32EE], NFC: [0x32EE], NFD: [0x32EE], NFKC: [0x30DE], NFKD: [0x30DE] }, +{ source: [0x32EF], NFC: [0x32EF], NFD: [0x32EF], NFKC: [0x30DF], NFKD: [0x30DF] }, +{ source: [0x32F0], NFC: [0x32F0], NFD: [0x32F0], NFKC: [0x30E0], NFKD: [0x30E0] }, +{ source: [0x32F1], NFC: [0x32F1], NFD: [0x32F1], NFKC: [0x30E1], NFKD: [0x30E1] }, +{ source: [0x32F2], NFC: [0x32F2], NFD: [0x32F2], NFKC: [0x30E2], NFKD: [0x30E2] }, +{ source: [0x32F3], NFC: [0x32F3], NFD: [0x32F3], NFKC: [0x30E4], NFKD: [0x30E4] }, +{ source: [0x32F4], NFC: [0x32F4], NFD: [0x32F4], NFKC: [0x30E6], NFKD: [0x30E6] }, +{ source: [0x32F5], NFC: [0x32F5], NFD: [0x32F5], NFKC: [0x30E8], NFKD: [0x30E8] }, +{ source: [0x32F6], NFC: [0x32F6], NFD: [0x32F6], NFKC: [0x30E9], NFKD: [0x30E9] }, +{ source: [0x32F7], NFC: [0x32F7], NFD: [0x32F7], NFKC: [0x30EA], NFKD: [0x30EA] }, +{ source: [0x32F8], NFC: [0x32F8], NFD: [0x32F8], NFKC: [0x30EB], NFKD: [0x30EB] }, +{ source: [0x32F9], NFC: [0x32F9], NFD: [0x32F9], NFKC: [0x30EC], NFKD: [0x30EC] }, +{ source: [0x32FA], NFC: [0x32FA], NFD: [0x32FA], NFKC: [0x30ED], NFKD: [0x30ED] }, +{ source: [0x32FB], NFC: [0x32FB], NFD: [0x32FB], NFKC: [0x30EF], NFKD: [0x30EF] }, +{ source: [0x32FC], NFC: [0x32FC], NFD: [0x32FC], NFKC: [0x30F0], NFKD: [0x30F0] }, +{ source: [0x32FD], NFC: [0x32FD], NFD: [0x32FD], NFKC: [0x30F1], NFKD: [0x30F1] }, +{ source: [0x32FE], NFC: [0x32FE], NFD: [0x32FE], NFKC: [0x30F2], NFKD: [0x30F2] }, +{ source: [0x3300], NFC: [0x3300], NFD: [0x3300], NFKC: [0x30A2, 0x30D1, 0x30FC, 0x30C8], NFKD: [0x30A2, 0x30CF, 0x309A, 0x30FC, 0x30C8] }, +{ source: [0x3301], NFC: [0x3301], NFD: [0x3301], NFKC: [0x30A2, 0x30EB, 0x30D5, 0x30A1], NFKD: [0x30A2, 0x30EB, 0x30D5, 0x30A1] }, +{ source: [0x3302], NFC: [0x3302], NFD: [0x3302], NFKC: [0x30A2, 0x30F3, 0x30DA, 0x30A2], NFKD: [0x30A2, 0x30F3, 0x30D8, 0x309A, 0x30A2] }, +{ source: [0x3303], NFC: [0x3303], NFD: [0x3303], NFKC: [0x30A2, 0x30FC, 0x30EB], NFKD: [0x30A2, 0x30FC, 0x30EB] }, +{ source: [0x3304], NFC: [0x3304], NFD: [0x3304], NFKC: [0x30A4, 0x30CB, 0x30F3, 0x30B0], NFKD: [0x30A4, 0x30CB, 0x30F3, 0x30AF, 0x3099] }, +{ source: [0x3305], NFC: [0x3305], NFD: [0x3305], NFKC: [0x30A4, 0x30F3, 0x30C1], NFKD: [0x30A4, 0x30F3, 0x30C1] }, +{ source: [0x3306], NFC: [0x3306], NFD: [0x3306], NFKC: [0x30A6, 0x30A9, 0x30F3], NFKD: [0x30A6, 0x30A9, 0x30F3] }, +{ source: [0x3307], NFC: [0x3307], NFD: [0x3307], NFKC: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9], NFKD: [0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C8, 0x3099] }, +{ source: [0x3308], NFC: [0x3308], NFD: [0x3308], NFKC: [0x30A8, 0x30FC, 0x30AB, 0x30FC], NFKD: [0x30A8, 0x30FC, 0x30AB, 0x30FC] }, +{ source: [0x3309], NFC: [0x3309], NFD: [0x3309], NFKC: [0x30AA, 0x30F3, 0x30B9], NFKD: [0x30AA, 0x30F3, 0x30B9] }, +{ source: [0x330A], NFC: [0x330A], NFD: [0x330A], NFKC: [0x30AA, 0x30FC, 0x30E0], NFKD: [0x30AA, 0x30FC, 0x30E0] }, +{ source: [0x330B], NFC: [0x330B], NFD: [0x330B], NFKC: [0x30AB, 0x30A4, 0x30EA], NFKD: [0x30AB, 0x30A4, 0x30EA] }, +{ source: [0x330C], NFC: [0x330C], NFD: [0x330C], NFKC: [0x30AB, 0x30E9, 0x30C3, 0x30C8], NFKD: [0x30AB, 0x30E9, 0x30C3, 0x30C8] }, +{ source: [0x330D], NFC: [0x330D], NFD: [0x330D], NFKC: [0x30AB, 0x30ED, 0x30EA, 0x30FC], NFKD: [0x30AB, 0x30ED, 0x30EA, 0x30FC] }, +{ source: [0x330E], NFC: [0x330E], NFD: [0x330E], NFKC: [0x30AC, 0x30ED, 0x30F3], NFKD: [0x30AB, 0x3099, 0x30ED, 0x30F3] }, +{ source: [0x330F], NFC: [0x330F], NFD: [0x330F], NFKC: [0x30AC, 0x30F3, 0x30DE], NFKD: [0x30AB, 0x3099, 0x30F3, 0x30DE] }, +{ source: [0x3310], NFC: [0x3310], NFD: [0x3310], NFKC: [0x30AE, 0x30AC], NFKD: [0x30AD, 0x3099, 0x30AB, 0x3099] }, +{ source: [0x3311], NFC: [0x3311], NFD: [0x3311], NFKC: [0x30AE, 0x30CB, 0x30FC], NFKD: [0x30AD, 0x3099, 0x30CB, 0x30FC] }, +{ source: [0x3312], NFC: [0x3312], NFD: [0x3312], NFKC: [0x30AD, 0x30E5, 0x30EA, 0x30FC], NFKD: [0x30AD, 0x30E5, 0x30EA, 0x30FC] }, +{ source: [0x3313], NFC: [0x3313], NFD: [0x3313], NFKC: [0x30AE, 0x30EB, 0x30C0, 0x30FC], NFKD: [0x30AD, 0x3099, 0x30EB, 0x30BF, 0x3099, 0x30FC] }, +{ source: [0x3314], NFC: [0x3314], NFD: [0x3314], NFKC: [0x30AD, 0x30ED], NFKD: [0x30AD, 0x30ED] }, +{ source: [0x3315], NFC: [0x3315], NFD: [0x3315], NFKC: [0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0], NFKD: [0x30AD, 0x30ED, 0x30AF, 0x3099, 0x30E9, 0x30E0] }, +{ source: [0x3316], NFC: [0x3316], NFD: [0x3316], NFKC: [0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB], NFKD: [0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB] }, +{ source: [0x3317], NFC: [0x3317], NFD: [0x3317], NFKC: [0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8], NFKD: [0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8] }, +{ source: [0x3318], NFC: [0x3318], NFD: [0x3318], NFKC: [0x30B0, 0x30E9, 0x30E0], NFKD: [0x30AF, 0x3099, 0x30E9, 0x30E0] }, +{ source: [0x3319], NFC: [0x3319], NFD: [0x3319], NFKC: [0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3], NFKD: [0x30AF, 0x3099, 0x30E9, 0x30E0, 0x30C8, 0x30F3] }, +{ source: [0x331A], NFC: [0x331A], NFD: [0x331A], NFKC: [0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED], NFKD: [0x30AF, 0x30EB, 0x30BB, 0x3099, 0x30A4, 0x30ED] }, +{ source: [0x331B], NFC: [0x331B], NFD: [0x331B], NFKC: [0x30AF, 0x30ED, 0x30FC, 0x30CD], NFKD: [0x30AF, 0x30ED, 0x30FC, 0x30CD] }, +{ source: [0x331C], NFC: [0x331C], NFD: [0x331C], NFKC: [0x30B1, 0x30FC, 0x30B9], NFKD: [0x30B1, 0x30FC, 0x30B9] }, +{ source: [0x331D], NFC: [0x331D], NFD: [0x331D], NFKC: [0x30B3, 0x30EB, 0x30CA], NFKD: [0x30B3, 0x30EB, 0x30CA] }, +{ source: [0x331E], NFC: [0x331E], NFD: [0x331E], NFKC: [0x30B3, 0x30FC, 0x30DD], NFKD: [0x30B3, 0x30FC, 0x30DB, 0x309A] }, +{ source: [0x331F], NFC: [0x331F], NFD: [0x331F], NFKC: [0x30B5, 0x30A4, 0x30AF, 0x30EB], NFKD: [0x30B5, 0x30A4, 0x30AF, 0x30EB] }, +{ source: [0x3320], NFC: [0x3320], NFD: [0x3320], NFKC: [0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0], NFKD: [0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0] }, +{ source: [0x3321], NFC: [0x3321], NFD: [0x3321], NFKC: [0x30B7, 0x30EA, 0x30F3, 0x30B0], NFKD: [0x30B7, 0x30EA, 0x30F3, 0x30AF, 0x3099] }, +{ source: [0x3322], NFC: [0x3322], NFD: [0x3322], NFKC: [0x30BB, 0x30F3, 0x30C1], NFKD: [0x30BB, 0x30F3, 0x30C1] }, +{ source: [0x3323], NFC: [0x3323], NFD: [0x3323], NFKC: [0x30BB, 0x30F3, 0x30C8], NFKD: [0x30BB, 0x30F3, 0x30C8] }, +{ source: [0x3324], NFC: [0x3324], NFD: [0x3324], NFKC: [0x30C0, 0x30FC, 0x30B9], NFKD: [0x30BF, 0x3099, 0x30FC, 0x30B9] }, +{ source: [0x3325], NFC: [0x3325], NFD: [0x3325], NFKC: [0x30C7, 0x30B7], NFKD: [0x30C6, 0x3099, 0x30B7] }, +{ source: [0x3326], NFC: [0x3326], NFD: [0x3326], NFKC: [0x30C9, 0x30EB], NFKD: [0x30C8, 0x3099, 0x30EB] }, +{ source: [0x3327], NFC: [0x3327], NFD: [0x3327], NFKC: [0x30C8, 0x30F3], NFKD: [0x30C8, 0x30F3] }, +{ source: [0x3328], NFC: [0x3328], NFD: [0x3328], NFKC: [0x30CA, 0x30CE], NFKD: [0x30CA, 0x30CE] }, +{ source: [0x3329], NFC: [0x3329], NFD: [0x3329], NFKC: [0x30CE, 0x30C3, 0x30C8], NFKD: [0x30CE, 0x30C3, 0x30C8] }, +{ source: [0x332A], NFC: [0x332A], NFD: [0x332A], NFKC: [0x30CF, 0x30A4, 0x30C4], NFKD: [0x30CF, 0x30A4, 0x30C4] }, +{ source: [0x332B], NFC: [0x332B], NFD: [0x332B], NFKC: [0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8], NFKD: [0x30CF, 0x309A, 0x30FC, 0x30BB, 0x30F3, 0x30C8] }, +{ source: [0x332C], NFC: [0x332C], NFD: [0x332C], NFKC: [0x30D1, 0x30FC, 0x30C4], NFKD: [0x30CF, 0x309A, 0x30FC, 0x30C4] }, +{ source: [0x332D], NFC: [0x332D], NFD: [0x332D], NFKC: [0x30D0, 0x30FC, 0x30EC, 0x30EB], NFKD: [0x30CF, 0x3099, 0x30FC, 0x30EC, 0x30EB] }, +{ source: [0x332E], NFC: [0x332E], NFD: [0x332E], NFKC: [0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB], NFKD: [0x30D2, 0x309A, 0x30A2, 0x30B9, 0x30C8, 0x30EB] }, +{ source: [0x332F], NFC: [0x332F], NFD: [0x332F], NFKC: [0x30D4, 0x30AF, 0x30EB], NFKD: [0x30D2, 0x309A, 0x30AF, 0x30EB] }, +{ source: [0x3330], NFC: [0x3330], NFD: [0x3330], NFKC: [0x30D4, 0x30B3], NFKD: [0x30D2, 0x309A, 0x30B3] }, +{ source: [0x3331], NFC: [0x3331], NFD: [0x3331], NFKC: [0x30D3, 0x30EB], NFKD: [0x30D2, 0x3099, 0x30EB] }, +{ source: [0x3332], NFC: [0x3332], NFD: [0x3332], NFKC: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9], NFKD: [0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C8, 0x3099] }, +{ source: [0x3333], NFC: [0x3333], NFD: [0x3333], NFKC: [0x30D5, 0x30A3, 0x30FC, 0x30C8], NFKD: [0x30D5, 0x30A3, 0x30FC, 0x30C8] }, +{ source: [0x3334], NFC: [0x3334], NFD: [0x3334], NFKC: [0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB], NFKD: [0x30D5, 0x3099, 0x30C3, 0x30B7, 0x30A7, 0x30EB] }, +{ source: [0x3335], NFC: [0x3335], NFD: [0x3335], NFKC: [0x30D5, 0x30E9, 0x30F3], NFKD: [0x30D5, 0x30E9, 0x30F3] }, +{ source: [0x3336], NFC: [0x3336], NFD: [0x3336], NFKC: [0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB], NFKD: [0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB] }, +{ source: [0x3337], NFC: [0x3337], NFD: [0x3337], NFKC: [0x30DA, 0x30BD], NFKD: [0x30D8, 0x309A, 0x30BD] }, +{ source: [0x3338], NFC: [0x3338], NFD: [0x3338], NFKC: [0x30DA, 0x30CB, 0x30D2], NFKD: [0x30D8, 0x309A, 0x30CB, 0x30D2] }, +{ source: [0x3339], NFC: [0x3339], NFD: [0x3339], NFKC: [0x30D8, 0x30EB, 0x30C4], NFKD: [0x30D8, 0x30EB, 0x30C4] }, +{ source: [0x333A], NFC: [0x333A], NFD: [0x333A], NFKC: [0x30DA, 0x30F3, 0x30B9], NFKD: [0x30D8, 0x309A, 0x30F3, 0x30B9] }, +{ source: [0x333B], NFC: [0x333B], NFD: [0x333B], NFKC: [0x30DA, 0x30FC, 0x30B8], NFKD: [0x30D8, 0x309A, 0x30FC, 0x30B7, 0x3099] }, +{ source: [0x333C], NFC: [0x333C], NFD: [0x333C], NFKC: [0x30D9, 0x30FC, 0x30BF], NFKD: [0x30D8, 0x3099, 0x30FC, 0x30BF] }, +{ source: [0x333D], NFC: [0x333D], NFD: [0x333D], NFKC: [0x30DD, 0x30A4, 0x30F3, 0x30C8], NFKD: [0x30DB, 0x309A, 0x30A4, 0x30F3, 0x30C8] }, +{ source: [0x333E], NFC: [0x333E], NFD: [0x333E], NFKC: [0x30DC, 0x30EB, 0x30C8], NFKD: [0x30DB, 0x3099, 0x30EB, 0x30C8] }, +{ source: [0x333F], NFC: [0x333F], NFD: [0x333F], NFKC: [0x30DB, 0x30F3], NFKD: [0x30DB, 0x30F3] }, +{ source: [0x3340], NFC: [0x3340], NFD: [0x3340], NFKC: [0x30DD, 0x30F3, 0x30C9], NFKD: [0x30DB, 0x309A, 0x30F3, 0x30C8, 0x3099] }, +{ source: [0x3341], NFC: [0x3341], NFD: [0x3341], NFKC: [0x30DB, 0x30FC, 0x30EB], NFKD: [0x30DB, 0x30FC, 0x30EB] }, +{ source: [0x3342], NFC: [0x3342], NFD: [0x3342], NFKC: [0x30DB, 0x30FC, 0x30F3], NFKD: [0x30DB, 0x30FC, 0x30F3] }, +{ source: [0x3343], NFC: [0x3343], NFD: [0x3343], NFKC: [0x30DE, 0x30A4, 0x30AF, 0x30ED], NFKD: [0x30DE, 0x30A4, 0x30AF, 0x30ED] }, +{ source: [0x3344], NFC: [0x3344], NFD: [0x3344], NFKC: [0x30DE, 0x30A4, 0x30EB], NFKD: [0x30DE, 0x30A4, 0x30EB] }, +{ source: [0x3345], NFC: [0x3345], NFD: [0x3345], NFKC: [0x30DE, 0x30C3, 0x30CF], NFKD: [0x30DE, 0x30C3, 0x30CF] }, +{ source: [0x3346], NFC: [0x3346], NFD: [0x3346], NFKC: [0x30DE, 0x30EB, 0x30AF], NFKD: [0x30DE, 0x30EB, 0x30AF] }, +{ source: [0x3347], NFC: [0x3347], NFD: [0x3347], NFKC: [0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3], NFKD: [0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3] }, +{ source: [0x3348], NFC: [0x3348], NFD: [0x3348], NFKC: [0x30DF, 0x30AF, 0x30ED, 0x30F3], NFKD: [0x30DF, 0x30AF, 0x30ED, 0x30F3] }, +{ source: [0x3349], NFC: [0x3349], NFD: [0x3349], NFKC: [0x30DF, 0x30EA], NFKD: [0x30DF, 0x30EA] }, +{ source: [0x334A], NFC: [0x334A], NFD: [0x334A], NFKC: [0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB], NFKD: [0x30DF, 0x30EA, 0x30CF, 0x3099, 0x30FC, 0x30EB] }, +{ source: [0x334B], NFC: [0x334B], NFD: [0x334B], NFKC: [0x30E1, 0x30AC], NFKD: [0x30E1, 0x30AB, 0x3099] }, +{ source: [0x334C], NFC: [0x334C], NFD: [0x334C], NFKC: [0x30E1, 0x30AC, 0x30C8, 0x30F3], NFKD: [0x30E1, 0x30AB, 0x3099, 0x30C8, 0x30F3] }, +{ source: [0x334D], NFC: [0x334D], NFD: [0x334D], NFKC: [0x30E1, 0x30FC, 0x30C8, 0x30EB], NFKD: [0x30E1, 0x30FC, 0x30C8, 0x30EB] }, +{ source: [0x334E], NFC: [0x334E], NFD: [0x334E], NFKC: [0x30E4, 0x30FC, 0x30C9], NFKD: [0x30E4, 0x30FC, 0x30C8, 0x3099] }, +{ source: [0x334F], NFC: [0x334F], NFD: [0x334F], NFKC: [0x30E4, 0x30FC, 0x30EB], NFKD: [0x30E4, 0x30FC, 0x30EB] }, +{ source: [0x3350], NFC: [0x3350], NFD: [0x3350], NFKC: [0x30E6, 0x30A2, 0x30F3], NFKD: [0x30E6, 0x30A2, 0x30F3] }, +{ source: [0x3351], NFC: [0x3351], NFD: [0x3351], NFKC: [0x30EA, 0x30C3, 0x30C8, 0x30EB], NFKD: [0x30EA, 0x30C3, 0x30C8, 0x30EB] }, +{ source: [0x3352], NFC: [0x3352], NFD: [0x3352], NFKC: [0x30EA, 0x30E9], NFKD: [0x30EA, 0x30E9] }, +{ source: [0x3353], NFC: [0x3353], NFD: [0x3353], NFKC: [0x30EB, 0x30D4, 0x30FC], NFKD: [0x30EB, 0x30D2, 0x309A, 0x30FC] }, +{ source: [0x3354], NFC: [0x3354], NFD: [0x3354], NFKC: [0x30EB, 0x30FC, 0x30D6, 0x30EB], NFKD: [0x30EB, 0x30FC, 0x30D5, 0x3099, 0x30EB] }, +{ source: [0x3355], NFC: [0x3355], NFD: [0x3355], NFKC: [0x30EC, 0x30E0], NFKD: [0x30EC, 0x30E0] }, +{ source: [0x3356], NFC: [0x3356], NFD: [0x3356], NFKC: [0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3], NFKD: [0x30EC, 0x30F3, 0x30C8, 0x30B1, 0x3099, 0x30F3] }, +{ source: [0x3357], NFC: [0x3357], NFD: [0x3357], NFKC: [0x30EF, 0x30C3, 0x30C8], NFKD: [0x30EF, 0x30C3, 0x30C8] }, +{ source: [0x3358], NFC: [0x3358], NFD: [0x3358], NFKC: [0x0030, 0x70B9], NFKD: [0x0030, 0x70B9] }, +{ source: [0x3359], NFC: [0x3359], NFD: [0x3359], NFKC: [0x0031, 0x70B9], NFKD: [0x0031, 0x70B9] }, +{ source: [0x335A], NFC: [0x335A], NFD: [0x335A], NFKC: [0x0032, 0x70B9], NFKD: [0x0032, 0x70B9] }, +{ source: [0x335B], NFC: [0x335B], NFD: [0x335B], NFKC: [0x0033, 0x70B9], NFKD: [0x0033, 0x70B9] }, +{ source: [0x335C], NFC: [0x335C], NFD: [0x335C], NFKC: [0x0034, 0x70B9], NFKD: [0x0034, 0x70B9] }, +{ source: [0x335D], NFC: [0x335D], NFD: [0x335D], NFKC: [0x0035, 0x70B9], NFKD: [0x0035, 0x70B9] }, +{ source: [0x335E], NFC: [0x335E], NFD: [0x335E], NFKC: [0x0036, 0x70B9], NFKD: [0x0036, 0x70B9] }, +{ source: [0x335F], NFC: [0x335F], NFD: [0x335F], NFKC: [0x0037, 0x70B9], NFKD: [0x0037, 0x70B9] }, +{ source: [0x3360], NFC: [0x3360], NFD: [0x3360], NFKC: [0x0038, 0x70B9], NFKD: [0x0038, 0x70B9] }, +{ source: [0x3361], NFC: [0x3361], NFD: [0x3361], NFKC: [0x0039, 0x70B9], NFKD: [0x0039, 0x70B9] }, +{ source: [0x3362], NFC: [0x3362], NFD: [0x3362], NFKC: [0x0031, 0x0030, 0x70B9], NFKD: [0x0031, 0x0030, 0x70B9] }, +{ source: [0x3363], NFC: [0x3363], NFD: [0x3363], NFKC: [0x0031, 0x0031, 0x70B9], NFKD: [0x0031, 0x0031, 0x70B9] }, +{ source: [0x3364], NFC: [0x3364], NFD: [0x3364], NFKC: [0x0031, 0x0032, 0x70B9], NFKD: [0x0031, 0x0032, 0x70B9] }, +{ source: [0x3365], NFC: [0x3365], NFD: [0x3365], NFKC: [0x0031, 0x0033, 0x70B9], NFKD: [0x0031, 0x0033, 0x70B9] }, +{ source: [0x3366], NFC: [0x3366], NFD: [0x3366], NFKC: [0x0031, 0x0034, 0x70B9], NFKD: [0x0031, 0x0034, 0x70B9] }, +{ source: [0x3367], NFC: [0x3367], NFD: [0x3367], NFKC: [0x0031, 0x0035, 0x70B9], NFKD: [0x0031, 0x0035, 0x70B9] }, +{ source: [0x3368], NFC: [0x3368], NFD: [0x3368], NFKC: [0x0031, 0x0036, 0x70B9], NFKD: [0x0031, 0x0036, 0x70B9] }, +{ source: [0x3369], NFC: [0x3369], NFD: [0x3369], NFKC: [0x0031, 0x0037, 0x70B9], NFKD: [0x0031, 0x0037, 0x70B9] }, +{ source: [0x336A], NFC: [0x336A], NFD: [0x336A], NFKC: [0x0031, 0x0038, 0x70B9], NFKD: [0x0031, 0x0038, 0x70B9] }, +{ source: [0x336B], NFC: [0x336B], NFD: [0x336B], NFKC: [0x0031, 0x0039, 0x70B9], NFKD: [0x0031, 0x0039, 0x70B9] }, +{ source: [0x336C], NFC: [0x336C], NFD: [0x336C], NFKC: [0x0032, 0x0030, 0x70B9], NFKD: [0x0032, 0x0030, 0x70B9] }, +{ source: [0x336D], NFC: [0x336D], NFD: [0x336D], NFKC: [0x0032, 0x0031, 0x70B9], NFKD: [0x0032, 0x0031, 0x70B9] }, +{ source: [0x336E], NFC: [0x336E], NFD: [0x336E], NFKC: [0x0032, 0x0032, 0x70B9], NFKD: [0x0032, 0x0032, 0x70B9] }, +{ source: [0x336F], NFC: [0x336F], NFD: [0x336F], NFKC: [0x0032, 0x0033, 0x70B9], NFKD: [0x0032, 0x0033, 0x70B9] }, +{ source: [0x3370], NFC: [0x3370], NFD: [0x3370], NFKC: [0x0032, 0x0034, 0x70B9], NFKD: [0x0032, 0x0034, 0x70B9] }, +{ source: [0x3371], NFC: [0x3371], NFD: [0x3371], NFKC: [0x0068, 0x0050, 0x0061], NFKD: [0x0068, 0x0050, 0x0061] }, +{ source: [0x3372], NFC: [0x3372], NFD: [0x3372], NFKC: [0x0064, 0x0061], NFKD: [0x0064, 0x0061] }, +{ source: [0x3373], NFC: [0x3373], NFD: [0x3373], NFKC: [0x0041, 0x0055], NFKD: [0x0041, 0x0055] }, +{ source: [0x3374], NFC: [0x3374], NFD: [0x3374], NFKC: [0x0062, 0x0061, 0x0072], NFKD: [0x0062, 0x0061, 0x0072] }, +{ source: [0x3375], NFC: [0x3375], NFD: [0x3375], NFKC: [0x006F, 0x0056], NFKD: [0x006F, 0x0056] }, +{ source: [0x3376], NFC: [0x3376], NFD: [0x3376], NFKC: [0x0070, 0x0063], NFKD: [0x0070, 0x0063] }, +{ source: [0x3377], NFC: [0x3377], NFD: [0x3377], NFKC: [0x0064, 0x006D], NFKD: [0x0064, 0x006D] }, +{ source: [0x3378], NFC: [0x3378], NFD: [0x3378], NFKC: [0x0064, 0x006D, 0x0032], NFKD: [0x0064, 0x006D, 0x0032] }, +{ source: [0x3379], NFC: [0x3379], NFD: [0x3379], NFKC: [0x0064, 0x006D, 0x0033], NFKD: [0x0064, 0x006D, 0x0033] }, +{ source: [0x337A], NFC: [0x337A], NFD: [0x337A], NFKC: [0x0049, 0x0055], NFKD: [0x0049, 0x0055] }, +{ source: [0x337B], NFC: [0x337B], NFD: [0x337B], NFKC: [0x5E73, 0x6210], NFKD: [0x5E73, 0x6210] }, +{ source: [0x337C], NFC: [0x337C], NFD: [0x337C], NFKC: [0x662D, 0x548C], NFKD: [0x662D, 0x548C] }, +{ source: [0x337D], NFC: [0x337D], NFD: [0x337D], NFKC: [0x5927, 0x6B63], NFKD: [0x5927, 0x6B63] }, +{ source: [0x337E], NFC: [0x337E], NFD: [0x337E], NFKC: [0x660E, 0x6CBB], NFKD: [0x660E, 0x6CBB] }, +{ source: [0x337F], NFC: [0x337F], NFD: [0x337F], NFKC: [0x682A, 0x5F0F, 0x4F1A, 0x793E], NFKD: [0x682A, 0x5F0F, 0x4F1A, 0x793E] }, +{ source: [0x3380], NFC: [0x3380], NFD: [0x3380], NFKC: [0x0070, 0x0041], NFKD: [0x0070, 0x0041] }, +{ source: [0x3381], NFC: [0x3381], NFD: [0x3381], NFKC: [0x006E, 0x0041], NFKD: [0x006E, 0x0041] }, +{ source: [0x3382], NFC: [0x3382], NFD: [0x3382], NFKC: [0x03BC, 0x0041], NFKD: [0x03BC, 0x0041] }, +{ source: [0x3383], NFC: [0x3383], NFD: [0x3383], NFKC: [0x006D, 0x0041], NFKD: [0x006D, 0x0041] }, +{ source: [0x3384], NFC: [0x3384], NFD: [0x3384], NFKC: [0x006B, 0x0041], NFKD: [0x006B, 0x0041] }, +{ source: [0x3385], NFC: [0x3385], NFD: [0x3385], NFKC: [0x004B, 0x0042], NFKD: [0x004B, 0x0042] }, +{ source: [0x3386], NFC: [0x3386], NFD: [0x3386], NFKC: [0x004D, 0x0042], NFKD: [0x004D, 0x0042] }, +{ source: [0x3387], NFC: [0x3387], NFD: [0x3387], NFKC: [0x0047, 0x0042], NFKD: [0x0047, 0x0042] }, +{ source: [0x3388], NFC: [0x3388], NFD: [0x3388], NFKC: [0x0063, 0x0061, 0x006C], NFKD: [0x0063, 0x0061, 0x006C] }, +{ source: [0x3389], NFC: [0x3389], NFD: [0x3389], NFKC: [0x006B, 0x0063, 0x0061, 0x006C], NFKD: [0x006B, 0x0063, 0x0061, 0x006C] }, +{ source: [0x338A], NFC: [0x338A], NFD: [0x338A], NFKC: [0x0070, 0x0046], NFKD: [0x0070, 0x0046] }, +{ source: [0x338B], NFC: [0x338B], NFD: [0x338B], NFKC: [0x006E, 0x0046], NFKD: [0x006E, 0x0046] }, +{ source: [0x338C], NFC: [0x338C], NFD: [0x338C], NFKC: [0x03BC, 0x0046], NFKD: [0x03BC, 0x0046] }, +{ source: [0x338D], NFC: [0x338D], NFD: [0x338D], NFKC: [0x03BC, 0x0067], NFKD: [0x03BC, 0x0067] }, +{ source: [0x338E], NFC: [0x338E], NFD: [0x338E], NFKC: [0x006D, 0x0067], NFKD: [0x006D, 0x0067] }, +{ source: [0x338F], NFC: [0x338F], NFD: [0x338F], NFKC: [0x006B, 0x0067], NFKD: [0x006B, 0x0067] }, +{ source: [0x3390], NFC: [0x3390], NFD: [0x3390], NFKC: [0x0048, 0x007A], NFKD: [0x0048, 0x007A] }, +{ source: [0x3391], NFC: [0x3391], NFD: [0x3391], NFKC: [0x006B, 0x0048, 0x007A], NFKD: [0x006B, 0x0048, 0x007A] }, +{ source: [0x3392], NFC: [0x3392], NFD: [0x3392], NFKC: [0x004D, 0x0048, 0x007A], NFKD: [0x004D, 0x0048, 0x007A] }, +{ source: [0x3393], NFC: [0x3393], NFD: [0x3393], NFKC: [0x0047, 0x0048, 0x007A], NFKD: [0x0047, 0x0048, 0x007A] }, +{ source: [0x3394], NFC: [0x3394], NFD: [0x3394], NFKC: [0x0054, 0x0048, 0x007A], NFKD: [0x0054, 0x0048, 0x007A] }, +{ source: [0x3395], NFC: [0x3395], NFD: [0x3395], NFKC: [0x03BC, 0x006C], NFKD: [0x03BC, 0x006C] }, +{ source: [0x3396], NFC: [0x3396], NFD: [0x3396], NFKC: [0x006D, 0x006C], NFKD: [0x006D, 0x006C] }, +{ source: [0x3397], NFC: [0x3397], NFD: [0x3397], NFKC: [0x0064, 0x006C], NFKD: [0x0064, 0x006C] }, +{ source: [0x3398], NFC: [0x3398], NFD: [0x3398], NFKC: [0x006B, 0x006C], NFKD: [0x006B, 0x006C] }, +{ source: [0x3399], NFC: [0x3399], NFD: [0x3399], NFKC: [0x0066, 0x006D], NFKD: [0x0066, 0x006D] }, +{ source: [0x339A], NFC: [0x339A], NFD: [0x339A], NFKC: [0x006E, 0x006D], NFKD: [0x006E, 0x006D] }, +{ source: [0x339B], NFC: [0x339B], NFD: [0x339B], NFKC: [0x03BC, 0x006D], NFKD: [0x03BC, 0x006D] }, +{ source: [0x339C], NFC: [0x339C], NFD: [0x339C], NFKC: [0x006D, 0x006D], NFKD: [0x006D, 0x006D] }, +{ source: [0x339D], NFC: [0x339D], NFD: [0x339D], NFKC: [0x0063, 0x006D], NFKD: [0x0063, 0x006D] }, +{ source: [0x339E], NFC: [0x339E], NFD: [0x339E], NFKC: [0x006B, 0x006D], NFKD: [0x006B, 0x006D] }, +{ source: [0x339F], NFC: [0x339F], NFD: [0x339F], NFKC: [0x006D, 0x006D, 0x0032], NFKD: [0x006D, 0x006D, 0x0032] }, +{ source: [0x33A0], NFC: [0x33A0], NFD: [0x33A0], NFKC: [0x0063, 0x006D, 0x0032], NFKD: [0x0063, 0x006D, 0x0032] }, +{ source: [0x33A1], NFC: [0x33A1], NFD: [0x33A1], NFKC: [0x006D, 0x0032], NFKD: [0x006D, 0x0032] }, +{ source: [0x33A2], NFC: [0x33A2], NFD: [0x33A2], NFKC: [0x006B, 0x006D, 0x0032], NFKD: [0x006B, 0x006D, 0x0032] }, +{ source: [0x33A3], NFC: [0x33A3], NFD: [0x33A3], NFKC: [0x006D, 0x006D, 0x0033], NFKD: [0x006D, 0x006D, 0x0033] }, +{ source: [0x33A4], NFC: [0x33A4], NFD: [0x33A4], NFKC: [0x0063, 0x006D, 0x0033], NFKD: [0x0063, 0x006D, 0x0033] }, +{ source: [0x33A5], NFC: [0x33A5], NFD: [0x33A5], NFKC: [0x006D, 0x0033], NFKD: [0x006D, 0x0033] }, +{ source: [0x33A6], NFC: [0x33A6], NFD: [0x33A6], NFKC: [0x006B, 0x006D, 0x0033], NFKD: [0x006B, 0x006D, 0x0033] }, +{ source: [0x33A7], NFC: [0x33A7], NFD: [0x33A7], NFKC: [0x006D, 0x2215, 0x0073], NFKD: [0x006D, 0x2215, 0x0073] }, +{ source: [0x33A8], NFC: [0x33A8], NFD: [0x33A8], NFKC: [0x006D, 0x2215, 0x0073, 0x0032], NFKD: [0x006D, 0x2215, 0x0073, 0x0032] }, +{ source: [0x33A9], NFC: [0x33A9], NFD: [0x33A9], NFKC: [0x0050, 0x0061], NFKD: [0x0050, 0x0061] }, +{ source: [0x33AA], NFC: [0x33AA], NFD: [0x33AA], NFKC: [0x006B, 0x0050, 0x0061], NFKD: [0x006B, 0x0050, 0x0061] }, +{ source: [0x33AB], NFC: [0x33AB], NFD: [0x33AB], NFKC: [0x004D, 0x0050, 0x0061], NFKD: [0x004D, 0x0050, 0x0061] }, +{ source: [0x33AC], NFC: [0x33AC], NFD: [0x33AC], NFKC: [0x0047, 0x0050, 0x0061], NFKD: [0x0047, 0x0050, 0x0061] }, +{ source: [0x33AD], NFC: [0x33AD], NFD: [0x33AD], NFKC: [0x0072, 0x0061, 0x0064], NFKD: [0x0072, 0x0061, 0x0064] }, +{ source: [0x33AE], NFC: [0x33AE], NFD: [0x33AE], NFKC: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073], NFKD: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073] }, +{ source: [0x33AF], NFC: [0x33AF], NFD: [0x33AF], NFKC: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0032], NFKD: [0x0072, 0x0061, 0x0064, 0x2215, 0x0073, 0x0032] }, +{ source: [0x33B0], NFC: [0x33B0], NFD: [0x33B0], NFKC: [0x0070, 0x0073], NFKD: [0x0070, 0x0073] }, +{ source: [0x33B1], NFC: [0x33B1], NFD: [0x33B1], NFKC: [0x006E, 0x0073], NFKD: [0x006E, 0x0073] }, +{ source: [0x33B2], NFC: [0x33B2], NFD: [0x33B2], NFKC: [0x03BC, 0x0073], NFKD: [0x03BC, 0x0073] }, +{ source: [0x33B3], NFC: [0x33B3], NFD: [0x33B3], NFKC: [0x006D, 0x0073], NFKD: [0x006D, 0x0073] }, +{ source: [0x33B4], NFC: [0x33B4], NFD: [0x33B4], NFKC: [0x0070, 0x0056], NFKD: [0x0070, 0x0056] }, +{ source: [0x33B5], NFC: [0x33B5], NFD: [0x33B5], NFKC: [0x006E, 0x0056], NFKD: [0x006E, 0x0056] }, +{ source: [0x33B6], NFC: [0x33B6], NFD: [0x33B6], NFKC: [0x03BC, 0x0056], NFKD: [0x03BC, 0x0056] }, +{ source: [0x33B7], NFC: [0x33B7], NFD: [0x33B7], NFKC: [0x006D, 0x0056], NFKD: [0x006D, 0x0056] }, +{ source: [0x33B8], NFC: [0x33B8], NFD: [0x33B8], NFKC: [0x006B, 0x0056], NFKD: [0x006B, 0x0056] }, +{ source: [0x33B9], NFC: [0x33B9], NFD: [0x33B9], NFKC: [0x004D, 0x0056], NFKD: [0x004D, 0x0056] }, +{ source: [0x33BA], NFC: [0x33BA], NFD: [0x33BA], NFKC: [0x0070, 0x0057], NFKD: [0x0070, 0x0057] }, +{ source: [0x33BB], NFC: [0x33BB], NFD: [0x33BB], NFKC: [0x006E, 0x0057], NFKD: [0x006E, 0x0057] }, +{ source: [0x33BC], NFC: [0x33BC], NFD: [0x33BC], NFKC: [0x03BC, 0x0057], NFKD: [0x03BC, 0x0057] }, +{ source: [0x33BD], NFC: [0x33BD], NFD: [0x33BD], NFKC: [0x006D, 0x0057], NFKD: [0x006D, 0x0057] }, +{ source: [0x33BE], NFC: [0x33BE], NFD: [0x33BE], NFKC: [0x006B, 0x0057], NFKD: [0x006B, 0x0057] }, +{ source: [0x33BF], NFC: [0x33BF], NFD: [0x33BF], NFKC: [0x004D, 0x0057], NFKD: [0x004D, 0x0057] }, +{ source: [0x33C0], NFC: [0x33C0], NFD: [0x33C0], NFKC: [0x006B, 0x03A9], NFKD: [0x006B, 0x03A9] }, +{ source: [0x33C1], NFC: [0x33C1], NFD: [0x33C1], NFKC: [0x004D, 0x03A9], NFKD: [0x004D, 0x03A9] }, +{ source: [0x33C2], NFC: [0x33C2], NFD: [0x33C2], NFKC: [0x0061, 0x002E, 0x006D, 0x002E], NFKD: [0x0061, 0x002E, 0x006D, 0x002E] }, +{ source: [0x33C3], NFC: [0x33C3], NFD: [0x33C3], NFKC: [0x0042, 0x0071], NFKD: [0x0042, 0x0071] }, +{ source: [0x33C4], NFC: [0x33C4], NFD: [0x33C4], NFKC: [0x0063, 0x0063], NFKD: [0x0063, 0x0063] }, +{ source: [0x33C5], NFC: [0x33C5], NFD: [0x33C5], NFKC: [0x0063, 0x0064], NFKD: [0x0063, 0x0064] }, +{ source: [0x33C6], NFC: [0x33C6], NFD: [0x33C6], NFKC: [0x0043, 0x2215, 0x006B, 0x0067], NFKD: [0x0043, 0x2215, 0x006B, 0x0067] }, +{ source: [0x33C7], NFC: [0x33C7], NFD: [0x33C7], NFKC: [0x0043, 0x006F, 0x002E], NFKD: [0x0043, 0x006F, 0x002E] }, +{ source: [0x33C8], NFC: [0x33C8], NFD: [0x33C8], NFKC: [0x0064, 0x0042], NFKD: [0x0064, 0x0042] }, +{ source: [0x33C9], NFC: [0x33C9], NFD: [0x33C9], NFKC: [0x0047, 0x0079], NFKD: [0x0047, 0x0079] }, +{ source: [0x33CA], NFC: [0x33CA], NFD: [0x33CA], NFKC: [0x0068, 0x0061], NFKD: [0x0068, 0x0061] }, +{ source: [0x33CB], NFC: [0x33CB], NFD: [0x33CB], NFKC: [0x0048, 0x0050], NFKD: [0x0048, 0x0050] }, +{ source: [0x33CC], NFC: [0x33CC], NFD: [0x33CC], NFKC: [0x0069, 0x006E], NFKD: [0x0069, 0x006E] }, +{ source: [0x33CD], NFC: [0x33CD], NFD: [0x33CD], NFKC: [0x004B, 0x004B], NFKD: [0x004B, 0x004B] }, +{ source: [0x33CE], NFC: [0x33CE], NFD: [0x33CE], NFKC: [0x004B, 0x004D], NFKD: [0x004B, 0x004D] }, +{ source: [0x33CF], NFC: [0x33CF], NFD: [0x33CF], NFKC: [0x006B, 0x0074], NFKD: [0x006B, 0x0074] }, +{ source: [0x33D0], NFC: [0x33D0], NFD: [0x33D0], NFKC: [0x006C, 0x006D], NFKD: [0x006C, 0x006D] }, +{ source: [0x33D1], NFC: [0x33D1], NFD: [0x33D1], NFKC: [0x006C, 0x006E], NFKD: [0x006C, 0x006E] }, +{ source: [0x33D2], NFC: [0x33D2], NFD: [0x33D2], NFKC: [0x006C, 0x006F, 0x0067], NFKD: [0x006C, 0x006F, 0x0067] }, +{ source: [0x33D3], NFC: [0x33D3], NFD: [0x33D3], NFKC: [0x006C, 0x0078], NFKD: [0x006C, 0x0078] }, +{ source: [0x33D4], NFC: [0x33D4], NFD: [0x33D4], NFKC: [0x006D, 0x0062], NFKD: [0x006D, 0x0062] }, +{ source: [0x33D5], NFC: [0x33D5], NFD: [0x33D5], NFKC: [0x006D, 0x0069, 0x006C], NFKD: [0x006D, 0x0069, 0x006C] }, +{ source: [0x33D6], NFC: [0x33D6], NFD: [0x33D6], NFKC: [0x006D, 0x006F, 0x006C], NFKD: [0x006D, 0x006F, 0x006C] }, +{ source: [0x33D7], NFC: [0x33D7], NFD: [0x33D7], NFKC: [0x0050, 0x0048], NFKD: [0x0050, 0x0048] }, +{ source: [0x33D8], NFC: [0x33D8], NFD: [0x33D8], NFKC: [0x0070, 0x002E, 0x006D, 0x002E], NFKD: [0x0070, 0x002E, 0x006D, 0x002E] }, +{ source: [0x33D9], NFC: [0x33D9], NFD: [0x33D9], NFKC: [0x0050, 0x0050, 0x004D], NFKD: [0x0050, 0x0050, 0x004D] }, +{ source: [0x33DA], NFC: [0x33DA], NFD: [0x33DA], NFKC: [0x0050, 0x0052], NFKD: [0x0050, 0x0052] }, +{ source: [0x33DB], NFC: [0x33DB], NFD: [0x33DB], NFKC: [0x0073, 0x0072], NFKD: [0x0073, 0x0072] }, +{ source: [0x33DC], NFC: [0x33DC], NFD: [0x33DC], NFKC: [0x0053, 0x0076], NFKD: [0x0053, 0x0076] }, +{ source: [0x33DD], NFC: [0x33DD], NFD: [0x33DD], NFKC: [0x0057, 0x0062], NFKD: [0x0057, 0x0062] }, +{ source: [0x33DE], NFC: [0x33DE], NFD: [0x33DE], NFKC: [0x0056, 0x2215, 0x006D], NFKD: [0x0056, 0x2215, 0x006D] }, +{ source: [0x33DF], NFC: [0x33DF], NFD: [0x33DF], NFKC: [0x0041, 0x2215, 0x006D], NFKD: [0x0041, 0x2215, 0x006D] }, +{ source: [0x33E0], NFC: [0x33E0], NFD: [0x33E0], NFKC: [0x0031, 0x65E5], NFKD: [0x0031, 0x65E5] }, +{ source: [0x33E1], NFC: [0x33E1], NFD: [0x33E1], NFKC: [0x0032, 0x65E5], NFKD: [0x0032, 0x65E5] }, +{ source: [0x33E2], NFC: [0x33E2], NFD: [0x33E2], NFKC: [0x0033, 0x65E5], NFKD: [0x0033, 0x65E5] }, +{ source: [0x33E3], NFC: [0x33E3], NFD: [0x33E3], NFKC: [0x0034, 0x65E5], NFKD: [0x0034, 0x65E5] }, +{ source: [0x33E4], NFC: [0x33E4], NFD: [0x33E4], NFKC: [0x0035, 0x65E5], NFKD: [0x0035, 0x65E5] }, +{ source: [0x33E5], NFC: [0x33E5], NFD: [0x33E5], NFKC: [0x0036, 0x65E5], NFKD: [0x0036, 0x65E5] }, +{ source: [0x33E6], NFC: [0x33E6], NFD: [0x33E6], NFKC: [0x0037, 0x65E5], NFKD: [0x0037, 0x65E5] }, +{ source: [0x33E7], NFC: [0x33E7], NFD: [0x33E7], NFKC: [0x0038, 0x65E5], NFKD: [0x0038, 0x65E5] }, +{ source: [0x33E8], NFC: [0x33E8], NFD: [0x33E8], NFKC: [0x0039, 0x65E5], NFKD: [0x0039, 0x65E5] }, +{ source: [0x33E9], NFC: [0x33E9], NFD: [0x33E9], NFKC: [0x0031, 0x0030, 0x65E5], NFKD: [0x0031, 0x0030, 0x65E5] }, +{ source: [0x33EA], NFC: [0x33EA], NFD: [0x33EA], NFKC: [0x0031, 0x0031, 0x65E5], NFKD: [0x0031, 0x0031, 0x65E5] }, +{ source: [0x33EB], NFC: [0x33EB], NFD: [0x33EB], NFKC: [0x0031, 0x0032, 0x65E5], NFKD: [0x0031, 0x0032, 0x65E5] }, +{ source: [0x33EC], NFC: [0x33EC], NFD: [0x33EC], NFKC: [0x0031, 0x0033, 0x65E5], NFKD: [0x0031, 0x0033, 0x65E5] }, +{ source: [0x33ED], NFC: [0x33ED], NFD: [0x33ED], NFKC: [0x0031, 0x0034, 0x65E5], NFKD: [0x0031, 0x0034, 0x65E5] }, +{ source: [0x33EE], NFC: [0x33EE], NFD: [0x33EE], NFKC: [0x0031, 0x0035, 0x65E5], NFKD: [0x0031, 0x0035, 0x65E5] }, +{ source: [0x33EF], NFC: [0x33EF], NFD: [0x33EF], NFKC: [0x0031, 0x0036, 0x65E5], NFKD: [0x0031, 0x0036, 0x65E5] }, +{ source: [0x33F0], NFC: [0x33F0], NFD: [0x33F0], NFKC: [0x0031, 0x0037, 0x65E5], NFKD: [0x0031, 0x0037, 0x65E5] }, +{ source: [0x33F1], NFC: [0x33F1], NFD: [0x33F1], NFKC: [0x0031, 0x0038, 0x65E5], NFKD: [0x0031, 0x0038, 0x65E5] }, +{ source: [0x33F2], NFC: [0x33F2], NFD: [0x33F2], NFKC: [0x0031, 0x0039, 0x65E5], NFKD: [0x0031, 0x0039, 0x65E5] }, +{ source: [0x33F3], NFC: [0x33F3], NFD: [0x33F3], NFKC: [0x0032, 0x0030, 0x65E5], NFKD: [0x0032, 0x0030, 0x65E5] }, +{ source: [0x33F4], NFC: [0x33F4], NFD: [0x33F4], NFKC: [0x0032, 0x0031, 0x65E5], NFKD: [0x0032, 0x0031, 0x65E5] }, +{ source: [0x33F5], NFC: [0x33F5], NFD: [0x33F5], NFKC: [0x0032, 0x0032, 0x65E5], NFKD: [0x0032, 0x0032, 0x65E5] }, +{ source: [0x33F6], NFC: [0x33F6], NFD: [0x33F6], NFKC: [0x0032, 0x0033, 0x65E5], NFKD: [0x0032, 0x0033, 0x65E5] }, +{ source: [0x33F7], NFC: [0x33F7], NFD: [0x33F7], NFKC: [0x0032, 0x0034, 0x65E5], NFKD: [0x0032, 0x0034, 0x65E5] }, +{ source: [0x33F8], NFC: [0x33F8], NFD: [0x33F8], NFKC: [0x0032, 0x0035, 0x65E5], NFKD: [0x0032, 0x0035, 0x65E5] }, +{ source: [0x33F9], NFC: [0x33F9], NFD: [0x33F9], NFKC: [0x0032, 0x0036, 0x65E5], NFKD: [0x0032, 0x0036, 0x65E5] }, +{ source: [0x33FA], NFC: [0x33FA], NFD: [0x33FA], NFKC: [0x0032, 0x0037, 0x65E5], NFKD: [0x0032, 0x0037, 0x65E5] }, +{ source: [0x33FB], NFC: [0x33FB], NFD: [0x33FB], NFKC: [0x0032, 0x0038, 0x65E5], NFKD: [0x0032, 0x0038, 0x65E5] }, +{ source: [0x33FC], NFC: [0x33FC], NFD: [0x33FC], NFKC: [0x0032, 0x0039, 0x65E5], NFKD: [0x0032, 0x0039, 0x65E5] }, +{ source: [0x33FD], NFC: [0x33FD], NFD: [0x33FD], NFKC: [0x0033, 0x0030, 0x65E5], NFKD: [0x0033, 0x0030, 0x65E5] }, +{ source: [0x33FE], NFC: [0x33FE], NFD: [0x33FE], NFKC: [0x0033, 0x0031, 0x65E5], NFKD: [0x0033, 0x0031, 0x65E5] }, +{ source: [0x33FF], NFC: [0x33FF], NFD: [0x33FF], NFKC: [0x0067, 0x0061, 0x006C], NFKD: [0x0067, 0x0061, 0x006C] }, +{ source: [0xA770], NFC: [0xA770], NFD: [0xA770], NFKC: [0xA76F], NFKD: [0xA76F] }, +{ source: [0xA7F8], NFC: [0xA7F8], NFD: [0xA7F8], NFKC: [0x0126], NFKD: [0x0126] }, +{ source: [0xA7F9], NFC: [0xA7F9], NFD: [0xA7F9], NFKC: [0x0153], NFKD: [0x0153] }, +{ source: [0xAC00], NFC: [0xAC00], NFD: [0x1100, 0x1161], NFKC: [0xAC00], NFKD: [0x1100, 0x1161] }, +{ source: [0xAC01], NFC: [0xAC01], NFD: [0x1100, 0x1161, 0x11A8], NFKC: [0xAC01], NFKD: [0x1100, 0x1161, 0x11A8] }, +{ source: [0xAC02], NFC: [0xAC02], NFD: [0x1100, 0x1161, 0x11A9], NFKC: [0xAC02], NFKD: [0x1100, 0x1161, 0x11A9] }, +{ source: [0xAC03], NFC: [0xAC03], NFD: [0x1100, 0x1161, 0x11AA], NFKC: [0xAC03], NFKD: [0x1100, 0x1161, 0x11AA] }, +{ source: [0xAC04], NFC: [0xAC04], NFD: [0x1100, 0x1161, 0x11AB], NFKC: [0xAC04], NFKD: [0x1100, 0x1161, 0x11AB] }, +{ source: [0xAC05], NFC: [0xAC05], NFD: [0x1100, 0x1161, 0x11AC], NFKC: [0xAC05], NFKD: [0x1100, 0x1161, 0x11AC] }, +{ source: [0xAC06], NFC: [0xAC06], NFD: [0x1100, 0x1161, 0x11AD], NFKC: [0xAC06], NFKD: [0x1100, 0x1161, 0x11AD] }, +{ source: [0xAC07], NFC: [0xAC07], NFD: [0x1100, 0x1161, 0x11AE], NFKC: [0xAC07], NFKD: [0x1100, 0x1161, 0x11AE] }, +{ source: [0xAC08], NFC: [0xAC08], NFD: [0x1100, 0x1161, 0x11AF], NFKC: [0xAC08], NFKD: [0x1100, 0x1161, 0x11AF] }, +{ source: [0xAC09], NFC: [0xAC09], NFD: [0x1100, 0x1161, 0x11B0], NFKC: [0xAC09], NFKD: [0x1100, 0x1161, 0x11B0] }, +{ source: [0xAC0A], NFC: [0xAC0A], NFD: [0x1100, 0x1161, 0x11B1], NFKC: [0xAC0A], NFKD: [0x1100, 0x1161, 0x11B1] }, +{ source: [0xAC0B], NFC: [0xAC0B], NFD: [0x1100, 0x1161, 0x11B2], NFKC: [0xAC0B], NFKD: [0x1100, 0x1161, 0x11B2] }, +{ source: [0xAC0C], NFC: [0xAC0C], NFD: [0x1100, 0x1161, 0x11B3], NFKC: [0xAC0C], NFKD: [0x1100, 0x1161, 0x11B3] }, +{ source: [0xAC0D], NFC: [0xAC0D], NFD: [0x1100, 0x1161, 0x11B4], NFKC: [0xAC0D], NFKD: [0x1100, 0x1161, 0x11B4] }, +{ source: [0xAC0E], NFC: [0xAC0E], NFD: [0x1100, 0x1161, 0x11B5], NFKC: [0xAC0E], NFKD: [0x1100, 0x1161, 0x11B5] }, +{ source: [0xAC0F], NFC: [0xAC0F], NFD: [0x1100, 0x1161, 0x11B6], NFKC: [0xAC0F], NFKD: [0x1100, 0x1161, 0x11B6] }, +{ source: [0xAC10], NFC: [0xAC10], NFD: [0x1100, 0x1161, 0x11B7], NFKC: [0xAC10], NFKD: [0x1100, 0x1161, 0x11B7] }, +{ source: [0xAC11], NFC: [0xAC11], NFD: [0x1100, 0x1161, 0x11B8], NFKC: [0xAC11], NFKD: [0x1100, 0x1161, 0x11B8] }, +{ source: [0xAC12], NFC: [0xAC12], NFD: [0x1100, 0x1161, 0x11B9], NFKC: [0xAC12], NFKD: [0x1100, 0x1161, 0x11B9] }, +{ source: [0xAC13], NFC: [0xAC13], NFD: [0x1100, 0x1161, 0x11BA], NFKC: [0xAC13], NFKD: [0x1100, 0x1161, 0x11BA] }, +{ source: [0xAC14], NFC: [0xAC14], NFD: [0x1100, 0x1161, 0x11BB], NFKC: [0xAC14], NFKD: [0x1100, 0x1161, 0x11BB] }, +{ source: [0xAC15], NFC: [0xAC15], NFD: [0x1100, 0x1161, 0x11BC], NFKC: [0xAC15], NFKD: [0x1100, 0x1161, 0x11BC] }, +{ source: [0xAC16], NFC: [0xAC16], NFD: [0x1100, 0x1161, 0x11BD], NFKC: [0xAC16], NFKD: [0x1100, 0x1161, 0x11BD] }, +{ source: [0xAC17], NFC: [0xAC17], NFD: [0x1100, 0x1161, 0x11BE], NFKC: [0xAC17], NFKD: [0x1100, 0x1161, 0x11BE] }, +{ source: [0xAC18], NFC: [0xAC18], NFD: [0x1100, 0x1161, 0x11BF], NFKC: [0xAC18], NFKD: [0x1100, 0x1161, 0x11BF] }, +{ source: [0xAC19], NFC: [0xAC19], NFD: [0x1100, 0x1161, 0x11C0], NFKC: [0xAC19], NFKD: [0x1100, 0x1161, 0x11C0] }, +{ source: [0xAC1A], NFC: [0xAC1A], NFD: [0x1100, 0x1161, 0x11C1], NFKC: [0xAC1A], NFKD: [0x1100, 0x1161, 0x11C1] }, +{ source: [0xAC1B], NFC: [0xAC1B], NFD: [0x1100, 0x1161, 0x11C2], NFKC: [0xAC1B], NFKD: [0x1100, 0x1161, 0x11C2] }, +{ source: [0xAC1C], NFC: [0xAC1C], NFD: [0x1100, 0x1162], NFKC: [0xAC1C], NFKD: [0x1100, 0x1162] }, +{ source: [0xAC1D], NFC: [0xAC1D], NFD: [0x1100, 0x1162, 0x11A8], NFKC: [0xAC1D], NFKD: [0x1100, 0x1162, 0x11A8] }, +{ source: [0xAC1E], NFC: [0xAC1E], NFD: [0x1100, 0x1162, 0x11A9], NFKC: [0xAC1E], NFKD: [0x1100, 0x1162, 0x11A9] }, +{ source: [0xAC1F], NFC: [0xAC1F], NFD: [0x1100, 0x1162, 0x11AA], NFKC: [0xAC1F], NFKD: [0x1100, 0x1162, 0x11AA] }, +{ source: [0xAC20], NFC: [0xAC20], NFD: [0x1100, 0x1162, 0x11AB], NFKC: [0xAC20], NFKD: [0x1100, 0x1162, 0x11AB] }, +{ source: [0xAC21], NFC: [0xAC21], NFD: [0x1100, 0x1162, 0x11AC], NFKC: [0xAC21], NFKD: [0x1100, 0x1162, 0x11AC] }, +{ source: [0xAC22], NFC: [0xAC22], NFD: [0x1100, 0x1162, 0x11AD], NFKC: [0xAC22], NFKD: [0x1100, 0x1162, 0x11AD] }, +{ source: [0xAC23], NFC: [0xAC23], NFD: [0x1100, 0x1162, 0x11AE], NFKC: [0xAC23], NFKD: [0x1100, 0x1162, 0x11AE] }, +{ source: [0xAC24], NFC: [0xAC24], NFD: [0x1100, 0x1162, 0x11AF], NFKC: [0xAC24], NFKD: [0x1100, 0x1162, 0x11AF] }, +{ source: [0xAC25], NFC: [0xAC25], NFD: [0x1100, 0x1162, 0x11B0], NFKC: [0xAC25], NFKD: [0x1100, 0x1162, 0x11B0] }, +{ source: [0xAC26], NFC: [0xAC26], NFD: [0x1100, 0x1162, 0x11B1], NFKC: [0xAC26], NFKD: [0x1100, 0x1162, 0x11B1] }, +{ source: [0xAC27], NFC: [0xAC27], NFD: [0x1100, 0x1162, 0x11B2], NFKC: [0xAC27], NFKD: [0x1100, 0x1162, 0x11B2] }, +{ source: [0xAC28], NFC: [0xAC28], NFD: [0x1100, 0x1162, 0x11B3], NFKC: [0xAC28], NFKD: [0x1100, 0x1162, 0x11B3] }, +{ source: [0xAC29], NFC: [0xAC29], NFD: [0x1100, 0x1162, 0x11B4], NFKC: [0xAC29], NFKD: [0x1100, 0x1162, 0x11B4] }, +{ source: [0xAC2A], NFC: [0xAC2A], NFD: [0x1100, 0x1162, 0x11B5], NFKC: [0xAC2A], NFKD: [0x1100, 0x1162, 0x11B5] }, +{ source: [0xAC2B], NFC: [0xAC2B], NFD: [0x1100, 0x1162, 0x11B6], NFKC: [0xAC2B], NFKD: [0x1100, 0x1162, 0x11B6] }, +{ source: [0xAC2C], NFC: [0xAC2C], NFD: [0x1100, 0x1162, 0x11B7], NFKC: [0xAC2C], NFKD: [0x1100, 0x1162, 0x11B7] }, +{ source: [0xAC2D], NFC: [0xAC2D], NFD: [0x1100, 0x1162, 0x11B8], NFKC: [0xAC2D], NFKD: [0x1100, 0x1162, 0x11B8] }, +{ source: [0xAC2E], NFC: [0xAC2E], NFD: [0x1100, 0x1162, 0x11B9], NFKC: [0xAC2E], NFKD: [0x1100, 0x1162, 0x11B9] }, +{ source: [0xAC2F], NFC: [0xAC2F], NFD: [0x1100, 0x1162, 0x11BA], NFKC: [0xAC2F], NFKD: [0x1100, 0x1162, 0x11BA] }, +{ source: [0xAC30], NFC: [0xAC30], NFD: [0x1100, 0x1162, 0x11BB], NFKC: [0xAC30], NFKD: [0x1100, 0x1162, 0x11BB] }, +{ source: [0xAC31], NFC: [0xAC31], NFD: [0x1100, 0x1162, 0x11BC], NFKC: [0xAC31], NFKD: [0x1100, 0x1162, 0x11BC] }, +{ source: [0xAC32], NFC: [0xAC32], NFD: [0x1100, 0x1162, 0x11BD], NFKC: [0xAC32], NFKD: [0x1100, 0x1162, 0x11BD] }, +{ source: [0xAC33], NFC: [0xAC33], NFD: [0x1100, 0x1162, 0x11BE], NFKC: [0xAC33], NFKD: [0x1100, 0x1162, 0x11BE] }, +{ source: [0xAC34], NFC: [0xAC34], NFD: [0x1100, 0x1162, 0x11BF], NFKC: [0xAC34], NFKD: [0x1100, 0x1162, 0x11BF] }, +{ source: [0xAC35], NFC: [0xAC35], NFD: [0x1100, 0x1162, 0x11C0], NFKC: [0xAC35], NFKD: [0x1100, 0x1162, 0x11C0] }, +{ source: [0xAC36], NFC: [0xAC36], NFD: [0x1100, 0x1162, 0x11C1], NFKC: [0xAC36], NFKD: [0x1100, 0x1162, 0x11C1] }, +{ source: [0xAC37], NFC: [0xAC37], NFD: [0x1100, 0x1162, 0x11C2], NFKC: [0xAC37], NFKD: [0x1100, 0x1162, 0x11C2] }, +{ source: [0xAC38], NFC: [0xAC38], NFD: [0x1100, 0x1163], NFKC: [0xAC38], NFKD: [0x1100, 0x1163] }, +{ source: [0xAC39], NFC: [0xAC39], NFD: [0x1100, 0x1163, 0x11A8], NFKC: [0xAC39], NFKD: [0x1100, 0x1163, 0x11A8] }, +{ source: [0xAC3A], NFC: [0xAC3A], NFD: [0x1100, 0x1163, 0x11A9], NFKC: [0xAC3A], NFKD: [0x1100, 0x1163, 0x11A9] }, +{ source: [0xAC3B], NFC: [0xAC3B], NFD: [0x1100, 0x1163, 0x11AA], NFKC: [0xAC3B], NFKD: [0x1100, 0x1163, 0x11AA] }, +{ source: [0xAC3C], NFC: [0xAC3C], NFD: [0x1100, 0x1163, 0x11AB], NFKC: [0xAC3C], NFKD: [0x1100, 0x1163, 0x11AB] }, +{ source: [0xAC3D], NFC: [0xAC3D], NFD: [0x1100, 0x1163, 0x11AC], NFKC: [0xAC3D], NFKD: [0x1100, 0x1163, 0x11AC] }, +{ source: [0xAC3E], NFC: [0xAC3E], NFD: [0x1100, 0x1163, 0x11AD], NFKC: [0xAC3E], NFKD: [0x1100, 0x1163, 0x11AD] }, +{ source: [0xAC3F], NFC: [0xAC3F], NFD: [0x1100, 0x1163, 0x11AE], NFKC: [0xAC3F], NFKD: [0x1100, 0x1163, 0x11AE] }, +{ source: [0xAC40], NFC: [0xAC40], NFD: [0x1100, 0x1163, 0x11AF], NFKC: [0xAC40], NFKD: [0x1100, 0x1163, 0x11AF] }, +{ source: [0xAC41], NFC: [0xAC41], NFD: [0x1100, 0x1163, 0x11B0], NFKC: [0xAC41], NFKD: [0x1100, 0x1163, 0x11B0] }, +{ source: [0xAC42], NFC: [0xAC42], NFD: [0x1100, 0x1163, 0x11B1], NFKC: [0xAC42], NFKD: [0x1100, 0x1163, 0x11B1] }, +{ source: [0xAC43], NFC: [0xAC43], NFD: [0x1100, 0x1163, 0x11B2], NFKC: [0xAC43], NFKD: [0x1100, 0x1163, 0x11B2] }, +{ source: [0xAC44], NFC: [0xAC44], NFD: [0x1100, 0x1163, 0x11B3], NFKC: [0xAC44], NFKD: [0x1100, 0x1163, 0x11B3] }, +{ source: [0xAC45], NFC: [0xAC45], NFD: [0x1100, 0x1163, 0x11B4], NFKC: [0xAC45], NFKD: [0x1100, 0x1163, 0x11B4] }, +{ source: [0xAC46], NFC: [0xAC46], NFD: [0x1100, 0x1163, 0x11B5], NFKC: [0xAC46], NFKD: [0x1100, 0x1163, 0x11B5] }, +{ source: [0xAC47], NFC: [0xAC47], NFD: [0x1100, 0x1163, 0x11B6], NFKC: [0xAC47], NFKD: [0x1100, 0x1163, 0x11B6] }, +{ source: [0xAC48], NFC: [0xAC48], NFD: [0x1100, 0x1163, 0x11B7], NFKC: [0xAC48], NFKD: [0x1100, 0x1163, 0x11B7] }, +{ source: [0xAC49], NFC: [0xAC49], NFD: [0x1100, 0x1163, 0x11B8], NFKC: [0xAC49], NFKD: [0x1100, 0x1163, 0x11B8] }, +{ source: [0xAC4A], NFC: [0xAC4A], NFD: [0x1100, 0x1163, 0x11B9], NFKC: [0xAC4A], NFKD: [0x1100, 0x1163, 0x11B9] }, +{ source: [0xAC4B], NFC: [0xAC4B], NFD: [0x1100, 0x1163, 0x11BA], NFKC: [0xAC4B], NFKD: [0x1100, 0x1163, 0x11BA] }, +{ source: [0xAC4C], NFC: [0xAC4C], NFD: [0x1100, 0x1163, 0x11BB], NFKC: [0xAC4C], NFKD: [0x1100, 0x1163, 0x11BB] }, +{ source: [0xAC4D], NFC: [0xAC4D], NFD: [0x1100, 0x1163, 0x11BC], NFKC: [0xAC4D], NFKD: [0x1100, 0x1163, 0x11BC] }, +{ source: [0xAC4E], NFC: [0xAC4E], NFD: [0x1100, 0x1163, 0x11BD], NFKC: [0xAC4E], NFKD: [0x1100, 0x1163, 0x11BD] }, +{ source: [0xAC4F], NFC: [0xAC4F], NFD: [0x1100, 0x1163, 0x11BE], NFKC: [0xAC4F], NFKD: [0x1100, 0x1163, 0x11BE] }, +{ source: [0xAC50], NFC: [0xAC50], NFD: [0x1100, 0x1163, 0x11BF], NFKC: [0xAC50], NFKD: [0x1100, 0x1163, 0x11BF] }, +{ source: [0xAC51], NFC: [0xAC51], NFD: [0x1100, 0x1163, 0x11C0], NFKC: [0xAC51], NFKD: [0x1100, 0x1163, 0x11C0] }, +{ source: [0xAC52], NFC: [0xAC52], NFD: [0x1100, 0x1163, 0x11C1], NFKC: [0xAC52], NFKD: [0x1100, 0x1163, 0x11C1] }, +{ source: [0xAC53], NFC: [0xAC53], NFD: [0x1100, 0x1163, 0x11C2], NFKC: [0xAC53], NFKD: [0x1100, 0x1163, 0x11C2] }, +{ source: [0xAC54], NFC: [0xAC54], NFD: [0x1100, 0x1164], NFKC: [0xAC54], NFKD: [0x1100, 0x1164] }, +{ source: [0xAC55], NFC: [0xAC55], NFD: [0x1100, 0x1164, 0x11A8], NFKC: [0xAC55], NFKD: [0x1100, 0x1164, 0x11A8] }, +{ source: [0xAC56], NFC: [0xAC56], NFD: [0x1100, 0x1164, 0x11A9], NFKC: [0xAC56], NFKD: [0x1100, 0x1164, 0x11A9] }, +{ source: [0xAC57], NFC: [0xAC57], NFD: [0x1100, 0x1164, 0x11AA], NFKC: [0xAC57], NFKD: [0x1100, 0x1164, 0x11AA] }, +{ source: [0xAC58], NFC: [0xAC58], NFD: [0x1100, 0x1164, 0x11AB], NFKC: [0xAC58], NFKD: [0x1100, 0x1164, 0x11AB] }, +{ source: [0xAC59], NFC: [0xAC59], NFD: [0x1100, 0x1164, 0x11AC], NFKC: [0xAC59], NFKD: [0x1100, 0x1164, 0x11AC] }, +{ source: [0xAC5A], NFC: [0xAC5A], NFD: [0x1100, 0x1164, 0x11AD], NFKC: [0xAC5A], NFKD: [0x1100, 0x1164, 0x11AD] }, +{ source: [0xAC5B], NFC: [0xAC5B], NFD: [0x1100, 0x1164, 0x11AE], NFKC: [0xAC5B], NFKD: [0x1100, 0x1164, 0x11AE] }, +{ source: [0xAC5C], NFC: [0xAC5C], NFD: [0x1100, 0x1164, 0x11AF], NFKC: [0xAC5C], NFKD: [0x1100, 0x1164, 0x11AF] }, +{ source: [0xAC5D], NFC: [0xAC5D], NFD: [0x1100, 0x1164, 0x11B0], NFKC: [0xAC5D], NFKD: [0x1100, 0x1164, 0x11B0] }, +{ source: [0xAC5E], NFC: [0xAC5E], NFD: [0x1100, 0x1164, 0x11B1], NFKC: [0xAC5E], NFKD: [0x1100, 0x1164, 0x11B1] }, +{ source: [0xAC5F], NFC: [0xAC5F], NFD: [0x1100, 0x1164, 0x11B2], NFKC: [0xAC5F], NFKD: [0x1100, 0x1164, 0x11B2] }, +{ source: [0xAC60], NFC: [0xAC60], NFD: [0x1100, 0x1164, 0x11B3], NFKC: [0xAC60], NFKD: [0x1100, 0x1164, 0x11B3] }, +{ source: [0xAC61], NFC: [0xAC61], NFD: [0x1100, 0x1164, 0x11B4], NFKC: [0xAC61], NFKD: [0x1100, 0x1164, 0x11B4] }, +{ source: [0xAC62], NFC: [0xAC62], NFD: [0x1100, 0x1164, 0x11B5], NFKC: [0xAC62], NFKD: [0x1100, 0x1164, 0x11B5] }, +{ source: [0xAC63], NFC: [0xAC63], NFD: [0x1100, 0x1164, 0x11B6], NFKC: [0xAC63], NFKD: [0x1100, 0x1164, 0x11B6] }, +{ source: [0xAC64], NFC: [0xAC64], NFD: [0x1100, 0x1164, 0x11B7], NFKC: [0xAC64], NFKD: [0x1100, 0x1164, 0x11B7] }, +{ source: [0xAC65], NFC: [0xAC65], NFD: [0x1100, 0x1164, 0x11B8], NFKC: [0xAC65], NFKD: [0x1100, 0x1164, 0x11B8] }, +{ source: [0xAC66], NFC: [0xAC66], NFD: [0x1100, 0x1164, 0x11B9], NFKC: [0xAC66], NFKD: [0x1100, 0x1164, 0x11B9] }, +{ source: [0xAC67], NFC: [0xAC67], NFD: [0x1100, 0x1164, 0x11BA], NFKC: [0xAC67], NFKD: [0x1100, 0x1164, 0x11BA] }, +{ source: [0xAC68], NFC: [0xAC68], NFD: [0x1100, 0x1164, 0x11BB], NFKC: [0xAC68], NFKD: [0x1100, 0x1164, 0x11BB] }, +{ source: [0xAC69], NFC: [0xAC69], NFD: [0x1100, 0x1164, 0x11BC], NFKC: [0xAC69], NFKD: [0x1100, 0x1164, 0x11BC] }, +{ source: [0xAC6A], NFC: [0xAC6A], NFD: [0x1100, 0x1164, 0x11BD], NFKC: [0xAC6A], NFKD: [0x1100, 0x1164, 0x11BD] }, +{ source: [0xAC6B], NFC: [0xAC6B], NFD: [0x1100, 0x1164, 0x11BE], NFKC: [0xAC6B], NFKD: [0x1100, 0x1164, 0x11BE] }, +{ source: [0xAC6C], NFC: [0xAC6C], NFD: [0x1100, 0x1164, 0x11BF], NFKC: [0xAC6C], NFKD: [0x1100, 0x1164, 0x11BF] }, +{ source: [0xAC6D], NFC: [0xAC6D], NFD: [0x1100, 0x1164, 0x11C0], NFKC: [0xAC6D], NFKD: [0x1100, 0x1164, 0x11C0] }, +{ source: [0xAC6E], NFC: [0xAC6E], NFD: [0x1100, 0x1164, 0x11C1], NFKC: [0xAC6E], NFKD: [0x1100, 0x1164, 0x11C1] }, +{ source: [0xAC6F], NFC: [0xAC6F], NFD: [0x1100, 0x1164, 0x11C2], NFKC: [0xAC6F], NFKD: [0x1100, 0x1164, 0x11C2] }, +{ source: [0xAC70], NFC: [0xAC70], NFD: [0x1100, 0x1165], NFKC: [0xAC70], NFKD: [0x1100, 0x1165] }, +{ source: [0xAC71], NFC: [0xAC71], NFD: [0x1100, 0x1165, 0x11A8], NFKC: [0xAC71], NFKD: [0x1100, 0x1165, 0x11A8] }, +{ source: [0xAC72], NFC: [0xAC72], NFD: [0x1100, 0x1165, 0x11A9], NFKC: [0xAC72], NFKD: [0x1100, 0x1165, 0x11A9] }, +{ source: [0xAC73], NFC: [0xAC73], NFD: [0x1100, 0x1165, 0x11AA], NFKC: [0xAC73], NFKD: [0x1100, 0x1165, 0x11AA] }, +{ source: [0xAC74], NFC: [0xAC74], NFD: [0x1100, 0x1165, 0x11AB], NFKC: [0xAC74], NFKD: [0x1100, 0x1165, 0x11AB] }, +{ source: [0xAC75], NFC: [0xAC75], NFD: [0x1100, 0x1165, 0x11AC], NFKC: [0xAC75], NFKD: [0x1100, 0x1165, 0x11AC] }, +{ source: [0xAC76], NFC: [0xAC76], NFD: [0x1100, 0x1165, 0x11AD], NFKC: [0xAC76], NFKD: [0x1100, 0x1165, 0x11AD] }, +{ source: [0xAC77], NFC: [0xAC77], NFD: [0x1100, 0x1165, 0x11AE], NFKC: [0xAC77], NFKD: [0x1100, 0x1165, 0x11AE] }, +{ source: [0xAC78], NFC: [0xAC78], NFD: [0x1100, 0x1165, 0x11AF], NFKC: [0xAC78], NFKD: [0x1100, 0x1165, 0x11AF] }, +{ source: [0xAC79], NFC: [0xAC79], NFD: [0x1100, 0x1165, 0x11B0], NFKC: [0xAC79], NFKD: [0x1100, 0x1165, 0x11B0] }, +{ source: [0xAC7A], NFC: [0xAC7A], NFD: [0x1100, 0x1165, 0x11B1], NFKC: [0xAC7A], NFKD: [0x1100, 0x1165, 0x11B1] }, +{ source: [0xAC7B], NFC: [0xAC7B], NFD: [0x1100, 0x1165, 0x11B2], NFKC: [0xAC7B], NFKD: [0x1100, 0x1165, 0x11B2] }, +{ source: [0xAC7C], NFC: [0xAC7C], NFD: [0x1100, 0x1165, 0x11B3], NFKC: [0xAC7C], NFKD: [0x1100, 0x1165, 0x11B3] }, +{ source: [0xAC7D], NFC: [0xAC7D], NFD: [0x1100, 0x1165, 0x11B4], NFKC: [0xAC7D], NFKD: [0x1100, 0x1165, 0x11B4] }, +{ source: [0xAC7E], NFC: [0xAC7E], NFD: [0x1100, 0x1165, 0x11B5], NFKC: [0xAC7E], NFKD: [0x1100, 0x1165, 0x11B5] }, +{ source: [0xAC7F], NFC: [0xAC7F], NFD: [0x1100, 0x1165, 0x11B6], NFKC: [0xAC7F], NFKD: [0x1100, 0x1165, 0x11B6] }, +{ source: [0xAC80], NFC: [0xAC80], NFD: [0x1100, 0x1165, 0x11B7], NFKC: [0xAC80], NFKD: [0x1100, 0x1165, 0x11B7] }, +{ source: [0xAC81], NFC: [0xAC81], NFD: [0x1100, 0x1165, 0x11B8], NFKC: [0xAC81], NFKD: [0x1100, 0x1165, 0x11B8] }, +{ source: [0xAC82], NFC: [0xAC82], NFD: [0x1100, 0x1165, 0x11B9], NFKC: [0xAC82], NFKD: [0x1100, 0x1165, 0x11B9] }, +{ source: [0xAC83], NFC: [0xAC83], NFD: [0x1100, 0x1165, 0x11BA], NFKC: [0xAC83], NFKD: [0x1100, 0x1165, 0x11BA] }, +{ source: [0xAC84], NFC: [0xAC84], NFD: [0x1100, 0x1165, 0x11BB], NFKC: [0xAC84], NFKD: [0x1100, 0x1165, 0x11BB] }, +{ source: [0xAC85], NFC: [0xAC85], NFD: [0x1100, 0x1165, 0x11BC], NFKC: [0xAC85], NFKD: [0x1100, 0x1165, 0x11BC] }, +{ source: [0xAC86], NFC: [0xAC86], NFD: [0x1100, 0x1165, 0x11BD], NFKC: [0xAC86], NFKD: [0x1100, 0x1165, 0x11BD] }, +{ source: [0xAC87], NFC: [0xAC87], NFD: [0x1100, 0x1165, 0x11BE], NFKC: [0xAC87], NFKD: [0x1100, 0x1165, 0x11BE] }, +{ source: [0xAC88], NFC: [0xAC88], NFD: [0x1100, 0x1165, 0x11BF], NFKC: [0xAC88], NFKD: [0x1100, 0x1165, 0x11BF] }, +{ source: [0xAC89], NFC: [0xAC89], NFD: [0x1100, 0x1165, 0x11C0], NFKC: [0xAC89], NFKD: [0x1100, 0x1165, 0x11C0] }, +{ source: [0xAC8A], NFC: [0xAC8A], NFD: [0x1100, 0x1165, 0x11C1], NFKC: [0xAC8A], NFKD: [0x1100, 0x1165, 0x11C1] }, +{ source: [0xAC8B], NFC: [0xAC8B], NFD: [0x1100, 0x1165, 0x11C2], NFKC: [0xAC8B], NFKD: [0x1100, 0x1165, 0x11C2] }, +{ source: [0xAC8C], NFC: [0xAC8C], NFD: [0x1100, 0x1166], NFKC: [0xAC8C], NFKD: [0x1100, 0x1166] }, +{ source: [0xAC8D], NFC: [0xAC8D], NFD: [0x1100, 0x1166, 0x11A8], NFKC: [0xAC8D], NFKD: [0x1100, 0x1166, 0x11A8] }, +{ source: [0xAC8E], NFC: [0xAC8E], NFD: [0x1100, 0x1166, 0x11A9], NFKC: [0xAC8E], NFKD: [0x1100, 0x1166, 0x11A9] }, +{ source: [0xAC8F], NFC: [0xAC8F], NFD: [0x1100, 0x1166, 0x11AA], NFKC: [0xAC8F], NFKD: [0x1100, 0x1166, 0x11AA] }, +{ source: [0xAC90], NFC: [0xAC90], NFD: [0x1100, 0x1166, 0x11AB], NFKC: [0xAC90], NFKD: [0x1100, 0x1166, 0x11AB] }, +{ source: [0xAC91], NFC: [0xAC91], NFD: [0x1100, 0x1166, 0x11AC], NFKC: [0xAC91], NFKD: [0x1100, 0x1166, 0x11AC] }, +{ source: [0xAC92], NFC: [0xAC92], NFD: [0x1100, 0x1166, 0x11AD], NFKC: [0xAC92], NFKD: [0x1100, 0x1166, 0x11AD] }, +{ source: [0xAC93], NFC: [0xAC93], NFD: [0x1100, 0x1166, 0x11AE], NFKC: [0xAC93], NFKD: [0x1100, 0x1166, 0x11AE] }, +{ source: [0xAC94], NFC: [0xAC94], NFD: [0x1100, 0x1166, 0x11AF], NFKC: [0xAC94], NFKD: [0x1100, 0x1166, 0x11AF] }, +{ source: [0xAC95], NFC: [0xAC95], NFD: [0x1100, 0x1166, 0x11B0], NFKC: [0xAC95], NFKD: [0x1100, 0x1166, 0x11B0] }, +{ source: [0xAC96], NFC: [0xAC96], NFD: [0x1100, 0x1166, 0x11B1], NFKC: [0xAC96], NFKD: [0x1100, 0x1166, 0x11B1] }, +{ source: [0xAC97], NFC: [0xAC97], NFD: [0x1100, 0x1166, 0x11B2], NFKC: [0xAC97], NFKD: [0x1100, 0x1166, 0x11B2] }, +{ source: [0xAC98], NFC: [0xAC98], NFD: [0x1100, 0x1166, 0x11B3], NFKC: [0xAC98], NFKD: [0x1100, 0x1166, 0x11B3] }, +{ source: [0xAC99], NFC: [0xAC99], NFD: [0x1100, 0x1166, 0x11B4], NFKC: [0xAC99], NFKD: [0x1100, 0x1166, 0x11B4] }, +{ source: [0xAC9A], NFC: [0xAC9A], NFD: [0x1100, 0x1166, 0x11B5], NFKC: [0xAC9A], NFKD: [0x1100, 0x1166, 0x11B5] }, +{ source: [0xAC9B], NFC: [0xAC9B], NFD: [0x1100, 0x1166, 0x11B6], NFKC: [0xAC9B], NFKD: [0x1100, 0x1166, 0x11B6] }, +{ source: [0xAC9C], NFC: [0xAC9C], NFD: [0x1100, 0x1166, 0x11B7], NFKC: [0xAC9C], NFKD: [0x1100, 0x1166, 0x11B7] }, +{ source: [0xAC9D], NFC: [0xAC9D], NFD: [0x1100, 0x1166, 0x11B8], NFKC: [0xAC9D], NFKD: [0x1100, 0x1166, 0x11B8] }, +{ source: [0xAC9E], NFC: [0xAC9E], NFD: [0x1100, 0x1166, 0x11B9], NFKC: [0xAC9E], NFKD: [0x1100, 0x1166, 0x11B9] }, +{ source: [0xAC9F], NFC: [0xAC9F], NFD: [0x1100, 0x1166, 0x11BA], NFKC: [0xAC9F], NFKD: [0x1100, 0x1166, 0x11BA] }, +{ source: [0xACA0], NFC: [0xACA0], NFD: [0x1100, 0x1166, 0x11BB], NFKC: [0xACA0], NFKD: [0x1100, 0x1166, 0x11BB] }, +{ source: [0xACA1], NFC: [0xACA1], NFD: [0x1100, 0x1166, 0x11BC], NFKC: [0xACA1], NFKD: [0x1100, 0x1166, 0x11BC] }, +{ source: [0xACA2], NFC: [0xACA2], NFD: [0x1100, 0x1166, 0x11BD], NFKC: [0xACA2], NFKD: [0x1100, 0x1166, 0x11BD] }, +{ source: [0xACA3], NFC: [0xACA3], NFD: [0x1100, 0x1166, 0x11BE], NFKC: [0xACA3], NFKD: [0x1100, 0x1166, 0x11BE] }, +{ source: [0xACA4], NFC: [0xACA4], NFD: [0x1100, 0x1166, 0x11BF], NFKC: [0xACA4], NFKD: [0x1100, 0x1166, 0x11BF] }, +{ source: [0xACA5], NFC: [0xACA5], NFD: [0x1100, 0x1166, 0x11C0], NFKC: [0xACA5], NFKD: [0x1100, 0x1166, 0x11C0] }, +{ source: [0xACA6], NFC: [0xACA6], NFD: [0x1100, 0x1166, 0x11C1], NFKC: [0xACA6], NFKD: [0x1100, 0x1166, 0x11C1] }, +{ source: [0xACA7], NFC: [0xACA7], NFD: [0x1100, 0x1166, 0x11C2], NFKC: [0xACA7], NFKD: [0x1100, 0x1166, 0x11C2] }, +{ source: [0xACA8], NFC: [0xACA8], NFD: [0x1100, 0x1167], NFKC: [0xACA8], NFKD: [0x1100, 0x1167] }, +{ source: [0xACA9], NFC: [0xACA9], NFD: [0x1100, 0x1167, 0x11A8], NFKC: [0xACA9], NFKD: [0x1100, 0x1167, 0x11A8] }, +{ source: [0xACAA], NFC: [0xACAA], NFD: [0x1100, 0x1167, 0x11A9], NFKC: [0xACAA], NFKD: [0x1100, 0x1167, 0x11A9] }, +{ source: [0xACAB], NFC: [0xACAB], NFD: [0x1100, 0x1167, 0x11AA], NFKC: [0xACAB], NFKD: [0x1100, 0x1167, 0x11AA] }, +{ source: [0xACAC], NFC: [0xACAC], NFD: [0x1100, 0x1167, 0x11AB], NFKC: [0xACAC], NFKD: [0x1100, 0x1167, 0x11AB] }, +{ source: [0xACAD], NFC: [0xACAD], NFD: [0x1100, 0x1167, 0x11AC], NFKC: [0xACAD], NFKD: [0x1100, 0x1167, 0x11AC] }, +{ source: [0xACAE], NFC: [0xACAE], NFD: [0x1100, 0x1167, 0x11AD], NFKC: [0xACAE], NFKD: [0x1100, 0x1167, 0x11AD] }, +{ source: [0xACAF], NFC: [0xACAF], NFD: [0x1100, 0x1167, 0x11AE], NFKC: [0xACAF], NFKD: [0x1100, 0x1167, 0x11AE] }, +{ source: [0xACB0], NFC: [0xACB0], NFD: [0x1100, 0x1167, 0x11AF], NFKC: [0xACB0], NFKD: [0x1100, 0x1167, 0x11AF] }, +{ source: [0xACB1], NFC: [0xACB1], NFD: [0x1100, 0x1167, 0x11B0], NFKC: [0xACB1], NFKD: [0x1100, 0x1167, 0x11B0] }, +{ source: [0xACB2], NFC: [0xACB2], NFD: [0x1100, 0x1167, 0x11B1], NFKC: [0xACB2], NFKD: [0x1100, 0x1167, 0x11B1] }, +{ source: [0xACB3], NFC: [0xACB3], NFD: [0x1100, 0x1167, 0x11B2], NFKC: [0xACB3], NFKD: [0x1100, 0x1167, 0x11B2] }, +{ source: [0xACB4], NFC: [0xACB4], NFD: [0x1100, 0x1167, 0x11B3], NFKC: [0xACB4], NFKD: [0x1100, 0x1167, 0x11B3] }, +{ source: [0xACB5], NFC: [0xACB5], NFD: [0x1100, 0x1167, 0x11B4], NFKC: [0xACB5], NFKD: [0x1100, 0x1167, 0x11B4] }, +{ source: [0xACB6], NFC: [0xACB6], NFD: [0x1100, 0x1167, 0x11B5], NFKC: [0xACB6], NFKD: [0x1100, 0x1167, 0x11B5] }, +{ source: [0xACB7], NFC: [0xACB7], NFD: [0x1100, 0x1167, 0x11B6], NFKC: [0xACB7], NFKD: [0x1100, 0x1167, 0x11B6] }, +{ source: [0xACB8], NFC: [0xACB8], NFD: [0x1100, 0x1167, 0x11B7], NFKC: [0xACB8], NFKD: [0x1100, 0x1167, 0x11B7] }, +{ source: [0xACB9], NFC: [0xACB9], NFD: [0x1100, 0x1167, 0x11B8], NFKC: [0xACB9], NFKD: [0x1100, 0x1167, 0x11B8] }, +{ source: [0xACBA], NFC: [0xACBA], NFD: [0x1100, 0x1167, 0x11B9], NFKC: [0xACBA], NFKD: [0x1100, 0x1167, 0x11B9] }, +{ source: [0xACBB], NFC: [0xACBB], NFD: [0x1100, 0x1167, 0x11BA], NFKC: [0xACBB], NFKD: [0x1100, 0x1167, 0x11BA] }, +{ source: [0xACBC], NFC: [0xACBC], NFD: [0x1100, 0x1167, 0x11BB], NFKC: [0xACBC], NFKD: [0x1100, 0x1167, 0x11BB] }, +{ source: [0xACBD], NFC: [0xACBD], NFD: [0x1100, 0x1167, 0x11BC], NFKC: [0xACBD], NFKD: [0x1100, 0x1167, 0x11BC] }, +{ source: [0xACBE], NFC: [0xACBE], NFD: [0x1100, 0x1167, 0x11BD], NFKC: [0xACBE], NFKD: [0x1100, 0x1167, 0x11BD] }, +{ source: [0xACBF], NFC: [0xACBF], NFD: [0x1100, 0x1167, 0x11BE], NFKC: [0xACBF], NFKD: [0x1100, 0x1167, 0x11BE] }, +{ source: [0xACC0], NFC: [0xACC0], NFD: [0x1100, 0x1167, 0x11BF], NFKC: [0xACC0], NFKD: [0x1100, 0x1167, 0x11BF] }, +{ source: [0xACC1], NFC: [0xACC1], NFD: [0x1100, 0x1167, 0x11C0], NFKC: [0xACC1], NFKD: [0x1100, 0x1167, 0x11C0] }, +{ source: [0xACC2], NFC: [0xACC2], NFD: [0x1100, 0x1167, 0x11C1], NFKC: [0xACC2], NFKD: [0x1100, 0x1167, 0x11C1] }, +{ source: [0xACC3], NFC: [0xACC3], NFD: [0x1100, 0x1167, 0x11C2], NFKC: [0xACC3], NFKD: [0x1100, 0x1167, 0x11C2] }, +{ source: [0xACC4], NFC: [0xACC4], NFD: [0x1100, 0x1168], NFKC: [0xACC4], NFKD: [0x1100, 0x1168] }, +{ source: [0xACC5], NFC: [0xACC5], NFD: [0x1100, 0x1168, 0x11A8], NFKC: [0xACC5], NFKD: [0x1100, 0x1168, 0x11A8] }, +{ source: [0xACC6], NFC: [0xACC6], NFD: [0x1100, 0x1168, 0x11A9], NFKC: [0xACC6], NFKD: [0x1100, 0x1168, 0x11A9] }, +{ source: [0xACC7], NFC: [0xACC7], NFD: [0x1100, 0x1168, 0x11AA], NFKC: [0xACC7], NFKD: [0x1100, 0x1168, 0x11AA] }, +{ source: [0xACC8], NFC: [0xACC8], NFD: [0x1100, 0x1168, 0x11AB], NFKC: [0xACC8], NFKD: [0x1100, 0x1168, 0x11AB] }, +{ source: [0xACC9], NFC: [0xACC9], NFD: [0x1100, 0x1168, 0x11AC], NFKC: [0xACC9], NFKD: [0x1100, 0x1168, 0x11AC] }, +{ source: [0xACCA], NFC: [0xACCA], NFD: [0x1100, 0x1168, 0x11AD], NFKC: [0xACCA], NFKD: [0x1100, 0x1168, 0x11AD] }, +{ source: [0xACCB], NFC: [0xACCB], NFD: [0x1100, 0x1168, 0x11AE], NFKC: [0xACCB], NFKD: [0x1100, 0x1168, 0x11AE] }, +{ source: [0xACCC], NFC: [0xACCC], NFD: [0x1100, 0x1168, 0x11AF], NFKC: [0xACCC], NFKD: [0x1100, 0x1168, 0x11AF] }, +{ source: [0xACCD], NFC: [0xACCD], NFD: [0x1100, 0x1168, 0x11B0], NFKC: [0xACCD], NFKD: [0x1100, 0x1168, 0x11B0] }, +{ source: [0xACCE], NFC: [0xACCE], NFD: [0x1100, 0x1168, 0x11B1], NFKC: [0xACCE], NFKD: [0x1100, 0x1168, 0x11B1] }, +{ source: [0xACCF], NFC: [0xACCF], NFD: [0x1100, 0x1168, 0x11B2], NFKC: [0xACCF], NFKD: [0x1100, 0x1168, 0x11B2] }, +{ source: [0xACD0], NFC: [0xACD0], NFD: [0x1100, 0x1168, 0x11B3], NFKC: [0xACD0], NFKD: [0x1100, 0x1168, 0x11B3] }, +{ source: [0xACD1], NFC: [0xACD1], NFD: [0x1100, 0x1168, 0x11B4], NFKC: [0xACD1], NFKD: [0x1100, 0x1168, 0x11B4] }, +{ source: [0xACD2], NFC: [0xACD2], NFD: [0x1100, 0x1168, 0x11B5], NFKC: [0xACD2], NFKD: [0x1100, 0x1168, 0x11B5] }, +{ source: [0xACD3], NFC: [0xACD3], NFD: [0x1100, 0x1168, 0x11B6], NFKC: [0xACD3], NFKD: [0x1100, 0x1168, 0x11B6] }, +{ source: [0xACD4], NFC: [0xACD4], NFD: [0x1100, 0x1168, 0x11B7], NFKC: [0xACD4], NFKD: [0x1100, 0x1168, 0x11B7] }, +{ source: [0xACD5], NFC: [0xACD5], NFD: [0x1100, 0x1168, 0x11B8], NFKC: [0xACD5], NFKD: [0x1100, 0x1168, 0x11B8] }, +{ source: [0xACD6], NFC: [0xACD6], NFD: [0x1100, 0x1168, 0x11B9], NFKC: [0xACD6], NFKD: [0x1100, 0x1168, 0x11B9] }, +{ source: [0xACD7], NFC: [0xACD7], NFD: [0x1100, 0x1168, 0x11BA], NFKC: [0xACD7], NFKD: [0x1100, 0x1168, 0x11BA] }, +{ source: [0xACD8], NFC: [0xACD8], NFD: [0x1100, 0x1168, 0x11BB], NFKC: [0xACD8], NFKD: [0x1100, 0x1168, 0x11BB] }, +{ source: [0xACD9], NFC: [0xACD9], NFD: [0x1100, 0x1168, 0x11BC], NFKC: [0xACD9], NFKD: [0x1100, 0x1168, 0x11BC] }, +{ source: [0xACDA], NFC: [0xACDA], NFD: [0x1100, 0x1168, 0x11BD], NFKC: [0xACDA], NFKD: [0x1100, 0x1168, 0x11BD] }, +{ source: [0xACDB], NFC: [0xACDB], NFD: [0x1100, 0x1168, 0x11BE], NFKC: [0xACDB], NFKD: [0x1100, 0x1168, 0x11BE] }, +{ source: [0xACDC], NFC: [0xACDC], NFD: [0x1100, 0x1168, 0x11BF], NFKC: [0xACDC], NFKD: [0x1100, 0x1168, 0x11BF] }, +{ source: [0xACDD], NFC: [0xACDD], NFD: [0x1100, 0x1168, 0x11C0], NFKC: [0xACDD], NFKD: [0x1100, 0x1168, 0x11C0] }, +{ source: [0xACDE], NFC: [0xACDE], NFD: [0x1100, 0x1168, 0x11C1], NFKC: [0xACDE], NFKD: [0x1100, 0x1168, 0x11C1] }, +{ source: [0xACDF], NFC: [0xACDF], NFD: [0x1100, 0x1168, 0x11C2], NFKC: [0xACDF], NFKD: [0x1100, 0x1168, 0x11C2] }, +{ source: [0xACE0], NFC: [0xACE0], NFD: [0x1100, 0x1169], NFKC: [0xACE0], NFKD: [0x1100, 0x1169] }, +{ source: [0xACE1], NFC: [0xACE1], NFD: [0x1100, 0x1169, 0x11A8], NFKC: [0xACE1], NFKD: [0x1100, 0x1169, 0x11A8] }, +{ source: [0xACE2], NFC: [0xACE2], NFD: [0x1100, 0x1169, 0x11A9], NFKC: [0xACE2], NFKD: [0x1100, 0x1169, 0x11A9] }, +{ source: [0xACE3], NFC: [0xACE3], NFD: [0x1100, 0x1169, 0x11AA], NFKC: [0xACE3], NFKD: [0x1100, 0x1169, 0x11AA] }, +{ source: [0xACE4], NFC: [0xACE4], NFD: [0x1100, 0x1169, 0x11AB], NFKC: [0xACE4], NFKD: [0x1100, 0x1169, 0x11AB] }, +{ source: [0xACE5], NFC: [0xACE5], NFD: [0x1100, 0x1169, 0x11AC], NFKC: [0xACE5], NFKD: [0x1100, 0x1169, 0x11AC] }, +{ source: [0xACE6], NFC: [0xACE6], NFD: [0x1100, 0x1169, 0x11AD], NFKC: [0xACE6], NFKD: [0x1100, 0x1169, 0x11AD] }, +{ source: [0xACE7], NFC: [0xACE7], NFD: [0x1100, 0x1169, 0x11AE], NFKC: [0xACE7], NFKD: [0x1100, 0x1169, 0x11AE] }, +{ source: [0xACE8], NFC: [0xACE8], NFD: [0x1100, 0x1169, 0x11AF], NFKC: [0xACE8], NFKD: [0x1100, 0x1169, 0x11AF] }, +{ source: [0xACE9], NFC: [0xACE9], NFD: [0x1100, 0x1169, 0x11B0], NFKC: [0xACE9], NFKD: [0x1100, 0x1169, 0x11B0] }, +{ source: [0xACEA], NFC: [0xACEA], NFD: [0x1100, 0x1169, 0x11B1], NFKC: [0xACEA], NFKD: [0x1100, 0x1169, 0x11B1] }, +{ source: [0xACEB], NFC: [0xACEB], NFD: [0x1100, 0x1169, 0x11B2], NFKC: [0xACEB], NFKD: [0x1100, 0x1169, 0x11B2] }, +{ source: [0xACEC], NFC: [0xACEC], NFD: [0x1100, 0x1169, 0x11B3], NFKC: [0xACEC], NFKD: [0x1100, 0x1169, 0x11B3] }, +{ source: [0xACED], NFC: [0xACED], NFD: [0x1100, 0x1169, 0x11B4], NFKC: [0xACED], NFKD: [0x1100, 0x1169, 0x11B4] }, +{ source: [0xACEE], NFC: [0xACEE], NFD: [0x1100, 0x1169, 0x11B5], NFKC: [0xACEE], NFKD: [0x1100, 0x1169, 0x11B5] }, +{ source: [0xACEF], NFC: [0xACEF], NFD: [0x1100, 0x1169, 0x11B6], NFKC: [0xACEF], NFKD: [0x1100, 0x1169, 0x11B6] }, +{ source: [0xACF0], NFC: [0xACF0], NFD: [0x1100, 0x1169, 0x11B7], NFKC: [0xACF0], NFKD: [0x1100, 0x1169, 0x11B7] }, +{ source: [0xACF1], NFC: [0xACF1], NFD: [0x1100, 0x1169, 0x11B8], NFKC: [0xACF1], NFKD: [0x1100, 0x1169, 0x11B8] }, +{ source: [0xACF2], NFC: [0xACF2], NFD: [0x1100, 0x1169, 0x11B9], NFKC: [0xACF2], NFKD: [0x1100, 0x1169, 0x11B9] }, +{ source: [0xACF3], NFC: [0xACF3], NFD: [0x1100, 0x1169, 0x11BA], NFKC: [0xACF3], NFKD: [0x1100, 0x1169, 0x11BA] }, +{ source: [0xACF4], NFC: [0xACF4], NFD: [0x1100, 0x1169, 0x11BB], NFKC: [0xACF4], NFKD: [0x1100, 0x1169, 0x11BB] }, +{ source: [0xACF5], NFC: [0xACF5], NFD: [0x1100, 0x1169, 0x11BC], NFKC: [0xACF5], NFKD: [0x1100, 0x1169, 0x11BC] }, +{ source: [0xACF6], NFC: [0xACF6], NFD: [0x1100, 0x1169, 0x11BD], NFKC: [0xACF6], NFKD: [0x1100, 0x1169, 0x11BD] }, +{ source: [0xACF7], NFC: [0xACF7], NFD: [0x1100, 0x1169, 0x11BE], NFKC: [0xACF7], NFKD: [0x1100, 0x1169, 0x11BE] }, +{ source: [0xACF8], NFC: [0xACF8], NFD: [0x1100, 0x1169, 0x11BF], NFKC: [0xACF8], NFKD: [0x1100, 0x1169, 0x11BF] }, +{ source: [0xACF9], NFC: [0xACF9], NFD: [0x1100, 0x1169, 0x11C0], NFKC: [0xACF9], NFKD: [0x1100, 0x1169, 0x11C0] }, +{ source: [0xACFA], NFC: [0xACFA], NFD: [0x1100, 0x1169, 0x11C1], NFKC: [0xACFA], NFKD: [0x1100, 0x1169, 0x11C1] }, +{ source: [0xACFB], NFC: [0xACFB], NFD: [0x1100, 0x1169, 0x11C2], NFKC: [0xACFB], NFKD: [0x1100, 0x1169, 0x11C2] }, +{ source: [0xACFC], NFC: [0xACFC], NFD: [0x1100, 0x116A], NFKC: [0xACFC], NFKD: [0x1100, 0x116A] }, +{ source: [0xACFD], NFC: [0xACFD], NFD: [0x1100, 0x116A, 0x11A8], NFKC: [0xACFD], NFKD: [0x1100, 0x116A, 0x11A8] }, +{ source: [0xACFE], NFC: [0xACFE], NFD: [0x1100, 0x116A, 0x11A9], NFKC: [0xACFE], NFKD: [0x1100, 0x116A, 0x11A9] }, +{ source: [0xACFF], NFC: [0xACFF], NFD: [0x1100, 0x116A, 0x11AA], NFKC: [0xACFF], NFKD: [0x1100, 0x116A, 0x11AA] }, +{ source: [0xAD00], NFC: [0xAD00], NFD: [0x1100, 0x116A, 0x11AB], NFKC: [0xAD00], NFKD: [0x1100, 0x116A, 0x11AB] }, +{ source: [0xAD01], NFC: [0xAD01], NFD: [0x1100, 0x116A, 0x11AC], NFKC: [0xAD01], NFKD: [0x1100, 0x116A, 0x11AC] }, +{ source: [0xAD02], NFC: [0xAD02], NFD: [0x1100, 0x116A, 0x11AD], NFKC: [0xAD02], NFKD: [0x1100, 0x116A, 0x11AD] }, +{ source: [0xAD03], NFC: [0xAD03], NFD: [0x1100, 0x116A, 0x11AE], NFKC: [0xAD03], NFKD: [0x1100, 0x116A, 0x11AE] }, +{ source: [0xAD04], NFC: [0xAD04], NFD: [0x1100, 0x116A, 0x11AF], NFKC: [0xAD04], NFKD: [0x1100, 0x116A, 0x11AF] }, +{ source: [0xAD05], NFC: [0xAD05], NFD: [0x1100, 0x116A, 0x11B0], NFKC: [0xAD05], NFKD: [0x1100, 0x116A, 0x11B0] }, +{ source: [0xAD06], NFC: [0xAD06], NFD: [0x1100, 0x116A, 0x11B1], NFKC: [0xAD06], NFKD: [0x1100, 0x116A, 0x11B1] }, +{ source: [0xAD07], NFC: [0xAD07], NFD: [0x1100, 0x116A, 0x11B2], NFKC: [0xAD07], NFKD: [0x1100, 0x116A, 0x11B2] }, +{ source: [0xAD08], NFC: [0xAD08], NFD: [0x1100, 0x116A, 0x11B3], NFKC: [0xAD08], NFKD: [0x1100, 0x116A, 0x11B3] }, +{ source: [0xAD09], NFC: [0xAD09], NFD: [0x1100, 0x116A, 0x11B4], NFKC: [0xAD09], NFKD: [0x1100, 0x116A, 0x11B4] }, +{ source: [0xAD0A], NFC: [0xAD0A], NFD: [0x1100, 0x116A, 0x11B5], NFKC: [0xAD0A], NFKD: [0x1100, 0x116A, 0x11B5] }, +{ source: [0xAD0B], NFC: [0xAD0B], NFD: [0x1100, 0x116A, 0x11B6], NFKC: [0xAD0B], NFKD: [0x1100, 0x116A, 0x11B6] }, +{ source: [0xAD0C], NFC: [0xAD0C], NFD: [0x1100, 0x116A, 0x11B7], NFKC: [0xAD0C], NFKD: [0x1100, 0x116A, 0x11B7] }, +{ source: [0xAD0D], NFC: [0xAD0D], NFD: [0x1100, 0x116A, 0x11B8], NFKC: [0xAD0D], NFKD: [0x1100, 0x116A, 0x11B8] }, +{ source: [0xAD0E], NFC: [0xAD0E], NFD: [0x1100, 0x116A, 0x11B9], NFKC: [0xAD0E], NFKD: [0x1100, 0x116A, 0x11B9] }, +{ source: [0xAD0F], NFC: [0xAD0F], NFD: [0x1100, 0x116A, 0x11BA], NFKC: [0xAD0F], NFKD: [0x1100, 0x116A, 0x11BA] }, +{ source: [0xAD10], NFC: [0xAD10], NFD: [0x1100, 0x116A, 0x11BB], NFKC: [0xAD10], NFKD: [0x1100, 0x116A, 0x11BB] }, +{ source: [0xAD11], NFC: [0xAD11], NFD: [0x1100, 0x116A, 0x11BC], NFKC: [0xAD11], NFKD: [0x1100, 0x116A, 0x11BC] }, +{ source: [0xAD12], NFC: [0xAD12], NFD: [0x1100, 0x116A, 0x11BD], NFKC: [0xAD12], NFKD: [0x1100, 0x116A, 0x11BD] }, +{ source: [0xAD13], NFC: [0xAD13], NFD: [0x1100, 0x116A, 0x11BE], NFKC: [0xAD13], NFKD: [0x1100, 0x116A, 0x11BE] }, +{ source: [0xAD14], NFC: [0xAD14], NFD: [0x1100, 0x116A, 0x11BF], NFKC: [0xAD14], NFKD: [0x1100, 0x116A, 0x11BF] }, +{ source: [0xAD15], NFC: [0xAD15], NFD: [0x1100, 0x116A, 0x11C0], NFKC: [0xAD15], NFKD: [0x1100, 0x116A, 0x11C0] }, +{ source: [0xAD16], NFC: [0xAD16], NFD: [0x1100, 0x116A, 0x11C1], NFKC: [0xAD16], NFKD: [0x1100, 0x116A, 0x11C1] }, +{ source: [0xAD17], NFC: [0xAD17], NFD: [0x1100, 0x116A, 0x11C2], NFKC: [0xAD17], NFKD: [0x1100, 0x116A, 0x11C2] }, +{ source: [0xAD18], NFC: [0xAD18], NFD: [0x1100, 0x116B], NFKC: [0xAD18], NFKD: [0x1100, 0x116B] }, +{ source: [0xAD19], NFC: [0xAD19], NFD: [0x1100, 0x116B, 0x11A8], NFKC: [0xAD19], NFKD: [0x1100, 0x116B, 0x11A8] }, +{ source: [0xAD1A], NFC: [0xAD1A], NFD: [0x1100, 0x116B, 0x11A9], NFKC: [0xAD1A], NFKD: [0x1100, 0x116B, 0x11A9] }, +{ source: [0xAD1B], NFC: [0xAD1B], NFD: [0x1100, 0x116B, 0x11AA], NFKC: [0xAD1B], NFKD: [0x1100, 0x116B, 0x11AA] }, +{ source: [0xAD1C], NFC: [0xAD1C], NFD: [0x1100, 0x116B, 0x11AB], NFKC: [0xAD1C], NFKD: [0x1100, 0x116B, 0x11AB] }, +{ source: [0xAD1D], NFC: [0xAD1D], NFD: [0x1100, 0x116B, 0x11AC], NFKC: [0xAD1D], NFKD: [0x1100, 0x116B, 0x11AC] }, +{ source: [0xAD1E], NFC: [0xAD1E], NFD: [0x1100, 0x116B, 0x11AD], NFKC: [0xAD1E], NFKD: [0x1100, 0x116B, 0x11AD] }, +{ source: [0xAD1F], NFC: [0xAD1F], NFD: [0x1100, 0x116B, 0x11AE], NFKC: [0xAD1F], NFKD: [0x1100, 0x116B, 0x11AE] }, +{ source: [0xAD20], NFC: [0xAD20], NFD: [0x1100, 0x116B, 0x11AF], NFKC: [0xAD20], NFKD: [0x1100, 0x116B, 0x11AF] }, +{ source: [0xAD21], NFC: [0xAD21], NFD: [0x1100, 0x116B, 0x11B0], NFKC: [0xAD21], NFKD: [0x1100, 0x116B, 0x11B0] }, +{ source: [0xAD22], NFC: [0xAD22], NFD: [0x1100, 0x116B, 0x11B1], NFKC: [0xAD22], NFKD: [0x1100, 0x116B, 0x11B1] }, +{ source: [0xAD23], NFC: [0xAD23], NFD: [0x1100, 0x116B, 0x11B2], NFKC: [0xAD23], NFKD: [0x1100, 0x116B, 0x11B2] }, +{ source: [0xAD24], NFC: [0xAD24], NFD: [0x1100, 0x116B, 0x11B3], NFKC: [0xAD24], NFKD: [0x1100, 0x116B, 0x11B3] }, +{ source: [0xAD25], NFC: [0xAD25], NFD: [0x1100, 0x116B, 0x11B4], NFKC: [0xAD25], NFKD: [0x1100, 0x116B, 0x11B4] }, +{ source: [0xAD26], NFC: [0xAD26], NFD: [0x1100, 0x116B, 0x11B5], NFKC: [0xAD26], NFKD: [0x1100, 0x116B, 0x11B5] }, +{ source: [0xAD27], NFC: [0xAD27], NFD: [0x1100, 0x116B, 0x11B6], NFKC: [0xAD27], NFKD: [0x1100, 0x116B, 0x11B6] }, +{ source: [0xAD28], NFC: [0xAD28], NFD: [0x1100, 0x116B, 0x11B7], NFKC: [0xAD28], NFKD: [0x1100, 0x116B, 0x11B7] }, +{ source: [0xAD29], NFC: [0xAD29], NFD: [0x1100, 0x116B, 0x11B8], NFKC: [0xAD29], NFKD: [0x1100, 0x116B, 0x11B8] }, +{ source: [0xAD2A], NFC: [0xAD2A], NFD: [0x1100, 0x116B, 0x11B9], NFKC: [0xAD2A], NFKD: [0x1100, 0x116B, 0x11B9] }, +{ source: [0xAD2B], NFC: [0xAD2B], NFD: [0x1100, 0x116B, 0x11BA], NFKC: [0xAD2B], NFKD: [0x1100, 0x116B, 0x11BA] }, +{ source: [0xAD2C], NFC: [0xAD2C], NFD: [0x1100, 0x116B, 0x11BB], NFKC: [0xAD2C], NFKD: [0x1100, 0x116B, 0x11BB] }, +{ source: [0xAD2D], NFC: [0xAD2D], NFD: [0x1100, 0x116B, 0x11BC], NFKC: [0xAD2D], NFKD: [0x1100, 0x116B, 0x11BC] }, +{ source: [0xAD2E], NFC: [0xAD2E], NFD: [0x1100, 0x116B, 0x11BD], NFKC: [0xAD2E], NFKD: [0x1100, 0x116B, 0x11BD] }, +{ source: [0xAD2F], NFC: [0xAD2F], NFD: [0x1100, 0x116B, 0x11BE], NFKC: [0xAD2F], NFKD: [0x1100, 0x116B, 0x11BE] }, +{ source: [0xAD30], NFC: [0xAD30], NFD: [0x1100, 0x116B, 0x11BF], NFKC: [0xAD30], NFKD: [0x1100, 0x116B, 0x11BF] }, +{ source: [0xAD31], NFC: [0xAD31], NFD: [0x1100, 0x116B, 0x11C0], NFKC: [0xAD31], NFKD: [0x1100, 0x116B, 0x11C0] }, +{ source: [0xAD32], NFC: [0xAD32], NFD: [0x1100, 0x116B, 0x11C1], NFKC: [0xAD32], NFKD: [0x1100, 0x116B, 0x11C1] }, +{ source: [0xAD33], NFC: [0xAD33], NFD: [0x1100, 0x116B, 0x11C2], NFKC: [0xAD33], NFKD: [0x1100, 0x116B, 0x11C2] }, +{ source: [0xAD34], NFC: [0xAD34], NFD: [0x1100, 0x116C], NFKC: [0xAD34], NFKD: [0x1100, 0x116C] }, +{ source: [0xAD35], NFC: [0xAD35], NFD: [0x1100, 0x116C, 0x11A8], NFKC: [0xAD35], NFKD: [0x1100, 0x116C, 0x11A8] }, +{ source: [0xAD36], NFC: [0xAD36], NFD: [0x1100, 0x116C, 0x11A9], NFKC: [0xAD36], NFKD: [0x1100, 0x116C, 0x11A9] }, +{ source: [0xAD37], NFC: [0xAD37], NFD: [0x1100, 0x116C, 0x11AA], NFKC: [0xAD37], NFKD: [0x1100, 0x116C, 0x11AA] }, +{ source: [0xAD38], NFC: [0xAD38], NFD: [0x1100, 0x116C, 0x11AB], NFKC: [0xAD38], NFKD: [0x1100, 0x116C, 0x11AB] }, +{ source: [0xAD39], NFC: [0xAD39], NFD: [0x1100, 0x116C, 0x11AC], NFKC: [0xAD39], NFKD: [0x1100, 0x116C, 0x11AC] }, +{ source: [0xAD3A], NFC: [0xAD3A], NFD: [0x1100, 0x116C, 0x11AD], NFKC: [0xAD3A], NFKD: [0x1100, 0x116C, 0x11AD] }, +{ source: [0xAD3B], NFC: [0xAD3B], NFD: [0x1100, 0x116C, 0x11AE], NFKC: [0xAD3B], NFKD: [0x1100, 0x116C, 0x11AE] }, +{ source: [0xAD3C], NFC: [0xAD3C], NFD: [0x1100, 0x116C, 0x11AF], NFKC: [0xAD3C], NFKD: [0x1100, 0x116C, 0x11AF] }, +{ source: [0xAD3D], NFC: [0xAD3D], NFD: [0x1100, 0x116C, 0x11B0], NFKC: [0xAD3D], NFKD: [0x1100, 0x116C, 0x11B0] }, +{ source: [0xAD3E], NFC: [0xAD3E], NFD: [0x1100, 0x116C, 0x11B1], NFKC: [0xAD3E], NFKD: [0x1100, 0x116C, 0x11B1] }, +{ source: [0xAD3F], NFC: [0xAD3F], NFD: [0x1100, 0x116C, 0x11B2], NFKC: [0xAD3F], NFKD: [0x1100, 0x116C, 0x11B2] }, +{ source: [0xAD40], NFC: [0xAD40], NFD: [0x1100, 0x116C, 0x11B3], NFKC: [0xAD40], NFKD: [0x1100, 0x116C, 0x11B3] }, +{ source: [0xAD41], NFC: [0xAD41], NFD: [0x1100, 0x116C, 0x11B4], NFKC: [0xAD41], NFKD: [0x1100, 0x116C, 0x11B4] }, +{ source: [0xAD42], NFC: [0xAD42], NFD: [0x1100, 0x116C, 0x11B5], NFKC: [0xAD42], NFKD: [0x1100, 0x116C, 0x11B5] }, +{ source: [0xAD43], NFC: [0xAD43], NFD: [0x1100, 0x116C, 0x11B6], NFKC: [0xAD43], NFKD: [0x1100, 0x116C, 0x11B6] }, +{ source: [0xAD44], NFC: [0xAD44], NFD: [0x1100, 0x116C, 0x11B7], NFKC: [0xAD44], NFKD: [0x1100, 0x116C, 0x11B7] }, +{ source: [0xAD45], NFC: [0xAD45], NFD: [0x1100, 0x116C, 0x11B8], NFKC: [0xAD45], NFKD: [0x1100, 0x116C, 0x11B8] }, +{ source: [0xAD46], NFC: [0xAD46], NFD: [0x1100, 0x116C, 0x11B9], NFKC: [0xAD46], NFKD: [0x1100, 0x116C, 0x11B9] }, +{ source: [0xAD47], NFC: [0xAD47], NFD: [0x1100, 0x116C, 0x11BA], NFKC: [0xAD47], NFKD: [0x1100, 0x116C, 0x11BA] }, +{ source: [0xAD48], NFC: [0xAD48], NFD: [0x1100, 0x116C, 0x11BB], NFKC: [0xAD48], NFKD: [0x1100, 0x116C, 0x11BB] }, +{ source: [0xAD49], NFC: [0xAD49], NFD: [0x1100, 0x116C, 0x11BC], NFKC: [0xAD49], NFKD: [0x1100, 0x116C, 0x11BC] }, +{ source: [0xAD4A], NFC: [0xAD4A], NFD: [0x1100, 0x116C, 0x11BD], NFKC: [0xAD4A], NFKD: [0x1100, 0x116C, 0x11BD] }, +{ source: [0xAD4B], NFC: [0xAD4B], NFD: [0x1100, 0x116C, 0x11BE], NFKC: [0xAD4B], NFKD: [0x1100, 0x116C, 0x11BE] }, +{ source: [0xAD4C], NFC: [0xAD4C], NFD: [0x1100, 0x116C, 0x11BF], NFKC: [0xAD4C], NFKD: [0x1100, 0x116C, 0x11BF] }, +{ source: [0xAD4D], NFC: [0xAD4D], NFD: [0x1100, 0x116C, 0x11C0], NFKC: [0xAD4D], NFKD: [0x1100, 0x116C, 0x11C0] }, +{ source: [0xAD4E], NFC: [0xAD4E], NFD: [0x1100, 0x116C, 0x11C1], NFKC: [0xAD4E], NFKD: [0x1100, 0x116C, 0x11C1] }, +{ source: [0xAD4F], NFC: [0xAD4F], NFD: [0x1100, 0x116C, 0x11C2], NFKC: [0xAD4F], NFKD: [0x1100, 0x116C, 0x11C2] }, +{ source: [0xAD50], NFC: [0xAD50], NFD: [0x1100, 0x116D], NFKC: [0xAD50], NFKD: [0x1100, 0x116D] }, +{ source: [0xAD51], NFC: [0xAD51], NFD: [0x1100, 0x116D, 0x11A8], NFKC: [0xAD51], NFKD: [0x1100, 0x116D, 0x11A8] }, +{ source: [0xAD52], NFC: [0xAD52], NFD: [0x1100, 0x116D, 0x11A9], NFKC: [0xAD52], NFKD: [0x1100, 0x116D, 0x11A9] }, +{ source: [0xAD53], NFC: [0xAD53], NFD: [0x1100, 0x116D, 0x11AA], NFKC: [0xAD53], NFKD: [0x1100, 0x116D, 0x11AA] }, +{ source: [0xAD54], NFC: [0xAD54], NFD: [0x1100, 0x116D, 0x11AB], NFKC: [0xAD54], NFKD: [0x1100, 0x116D, 0x11AB] }, +{ source: [0xAD55], NFC: [0xAD55], NFD: [0x1100, 0x116D, 0x11AC], NFKC: [0xAD55], NFKD: [0x1100, 0x116D, 0x11AC] }, +{ source: [0xAD56], NFC: [0xAD56], NFD: [0x1100, 0x116D, 0x11AD], NFKC: [0xAD56], NFKD: [0x1100, 0x116D, 0x11AD] }, +{ source: [0xAD57], NFC: [0xAD57], NFD: [0x1100, 0x116D, 0x11AE], NFKC: [0xAD57], NFKD: [0x1100, 0x116D, 0x11AE] }, +{ source: [0xAD58], NFC: [0xAD58], NFD: [0x1100, 0x116D, 0x11AF], NFKC: [0xAD58], NFKD: [0x1100, 0x116D, 0x11AF] }, +{ source: [0xAD59], NFC: [0xAD59], NFD: [0x1100, 0x116D, 0x11B0], NFKC: [0xAD59], NFKD: [0x1100, 0x116D, 0x11B0] }, +{ source: [0xAD5A], NFC: [0xAD5A], NFD: [0x1100, 0x116D, 0x11B1], NFKC: [0xAD5A], NFKD: [0x1100, 0x116D, 0x11B1] }, +{ source: [0xAD5B], NFC: [0xAD5B], NFD: [0x1100, 0x116D, 0x11B2], NFKC: [0xAD5B], NFKD: [0x1100, 0x116D, 0x11B2] }, +{ source: [0xAD5C], NFC: [0xAD5C], NFD: [0x1100, 0x116D, 0x11B3], NFKC: [0xAD5C], NFKD: [0x1100, 0x116D, 0x11B3] }, +{ source: [0xAD5D], NFC: [0xAD5D], NFD: [0x1100, 0x116D, 0x11B4], NFKC: [0xAD5D], NFKD: [0x1100, 0x116D, 0x11B4] }, +{ source: [0xAD5E], NFC: [0xAD5E], NFD: [0x1100, 0x116D, 0x11B5], NFKC: [0xAD5E], NFKD: [0x1100, 0x116D, 0x11B5] }, +{ source: [0xAD5F], NFC: [0xAD5F], NFD: [0x1100, 0x116D, 0x11B6], NFKC: [0xAD5F], NFKD: [0x1100, 0x116D, 0x11B6] }, +{ source: [0xAD60], NFC: [0xAD60], NFD: [0x1100, 0x116D, 0x11B7], NFKC: [0xAD60], NFKD: [0x1100, 0x116D, 0x11B7] }, +{ source: [0xAD61], NFC: [0xAD61], NFD: [0x1100, 0x116D, 0x11B8], NFKC: [0xAD61], NFKD: [0x1100, 0x116D, 0x11B8] }, +{ source: [0xAD62], NFC: [0xAD62], NFD: [0x1100, 0x116D, 0x11B9], NFKC: [0xAD62], NFKD: [0x1100, 0x116D, 0x11B9] }, +{ source: [0xAD63], NFC: [0xAD63], NFD: [0x1100, 0x116D, 0x11BA], NFKC: [0xAD63], NFKD: [0x1100, 0x116D, 0x11BA] }, +{ source: [0xAD64], NFC: [0xAD64], NFD: [0x1100, 0x116D, 0x11BB], NFKC: [0xAD64], NFKD: [0x1100, 0x116D, 0x11BB] }, +{ source: [0xAD65], NFC: [0xAD65], NFD: [0x1100, 0x116D, 0x11BC], NFKC: [0xAD65], NFKD: [0x1100, 0x116D, 0x11BC] }, +{ source: [0xAD66], NFC: [0xAD66], NFD: [0x1100, 0x116D, 0x11BD], NFKC: [0xAD66], NFKD: [0x1100, 0x116D, 0x11BD] }, +{ source: [0xAD67], NFC: [0xAD67], NFD: [0x1100, 0x116D, 0x11BE], NFKC: [0xAD67], NFKD: [0x1100, 0x116D, 0x11BE] }, +{ source: [0xAD68], NFC: [0xAD68], NFD: [0x1100, 0x116D, 0x11BF], NFKC: [0xAD68], NFKD: [0x1100, 0x116D, 0x11BF] }, +{ source: [0xAD69], NFC: [0xAD69], NFD: [0x1100, 0x116D, 0x11C0], NFKC: [0xAD69], NFKD: [0x1100, 0x116D, 0x11C0] }, +{ source: [0xAD6A], NFC: [0xAD6A], NFD: [0x1100, 0x116D, 0x11C1], NFKC: [0xAD6A], NFKD: [0x1100, 0x116D, 0x11C1] }, +{ source: [0xAD6B], NFC: [0xAD6B], NFD: [0x1100, 0x116D, 0x11C2], NFKC: [0xAD6B], NFKD: [0x1100, 0x116D, 0x11C2] }, +{ source: [0xAD6C], NFC: [0xAD6C], NFD: [0x1100, 0x116E], NFKC: [0xAD6C], NFKD: [0x1100, 0x116E] }, +{ source: [0xAD6D], NFC: [0xAD6D], NFD: [0x1100, 0x116E, 0x11A8], NFKC: [0xAD6D], NFKD: [0x1100, 0x116E, 0x11A8] }, +{ source: [0xAD6E], NFC: [0xAD6E], NFD: [0x1100, 0x116E, 0x11A9], NFKC: [0xAD6E], NFKD: [0x1100, 0x116E, 0x11A9] }, +{ source: [0xAD6F], NFC: [0xAD6F], NFD: [0x1100, 0x116E, 0x11AA], NFKC: [0xAD6F], NFKD: [0x1100, 0x116E, 0x11AA] }, +{ source: [0xAD70], NFC: [0xAD70], NFD: [0x1100, 0x116E, 0x11AB], NFKC: [0xAD70], NFKD: [0x1100, 0x116E, 0x11AB] }, +{ source: [0xAD71], NFC: [0xAD71], NFD: [0x1100, 0x116E, 0x11AC], NFKC: [0xAD71], NFKD: [0x1100, 0x116E, 0x11AC] }, +{ source: [0xAD72], NFC: [0xAD72], NFD: [0x1100, 0x116E, 0x11AD], NFKC: [0xAD72], NFKD: [0x1100, 0x116E, 0x11AD] }, +{ source: [0xAD73], NFC: [0xAD73], NFD: [0x1100, 0x116E, 0x11AE], NFKC: [0xAD73], NFKD: [0x1100, 0x116E, 0x11AE] }, +{ source: [0xAD74], NFC: [0xAD74], NFD: [0x1100, 0x116E, 0x11AF], NFKC: [0xAD74], NFKD: [0x1100, 0x116E, 0x11AF] }, +{ source: [0xAD75], NFC: [0xAD75], NFD: [0x1100, 0x116E, 0x11B0], NFKC: [0xAD75], NFKD: [0x1100, 0x116E, 0x11B0] }, +{ source: [0xAD76], NFC: [0xAD76], NFD: [0x1100, 0x116E, 0x11B1], NFKC: [0xAD76], NFKD: [0x1100, 0x116E, 0x11B1] }, +{ source: [0xAD77], NFC: [0xAD77], NFD: [0x1100, 0x116E, 0x11B2], NFKC: [0xAD77], NFKD: [0x1100, 0x116E, 0x11B2] }, +{ source: [0xAD78], NFC: [0xAD78], NFD: [0x1100, 0x116E, 0x11B3], NFKC: [0xAD78], NFKD: [0x1100, 0x116E, 0x11B3] }, +{ source: [0xAD79], NFC: [0xAD79], NFD: [0x1100, 0x116E, 0x11B4], NFKC: [0xAD79], NFKD: [0x1100, 0x116E, 0x11B4] }, +{ source: [0xAD7A], NFC: [0xAD7A], NFD: [0x1100, 0x116E, 0x11B5], NFKC: [0xAD7A], NFKD: [0x1100, 0x116E, 0x11B5] }, +{ source: [0xAD7B], NFC: [0xAD7B], NFD: [0x1100, 0x116E, 0x11B6], NFKC: [0xAD7B], NFKD: [0x1100, 0x116E, 0x11B6] }, +{ source: [0xAD7C], NFC: [0xAD7C], NFD: [0x1100, 0x116E, 0x11B7], NFKC: [0xAD7C], NFKD: [0x1100, 0x116E, 0x11B7] }, +{ source: [0xAD7D], NFC: [0xAD7D], NFD: [0x1100, 0x116E, 0x11B8], NFKC: [0xAD7D], NFKD: [0x1100, 0x116E, 0x11B8] }, +{ source: [0xAD7E], NFC: [0xAD7E], NFD: [0x1100, 0x116E, 0x11B9], NFKC: [0xAD7E], NFKD: [0x1100, 0x116E, 0x11B9] }, +{ source: [0xAD7F], NFC: [0xAD7F], NFD: [0x1100, 0x116E, 0x11BA], NFKC: [0xAD7F], NFKD: [0x1100, 0x116E, 0x11BA] }, +{ source: [0xAD80], NFC: [0xAD80], NFD: [0x1100, 0x116E, 0x11BB], NFKC: [0xAD80], NFKD: [0x1100, 0x116E, 0x11BB] }, +{ source: [0xAD81], NFC: [0xAD81], NFD: [0x1100, 0x116E, 0x11BC], NFKC: [0xAD81], NFKD: [0x1100, 0x116E, 0x11BC] }, +{ source: [0xAD82], NFC: [0xAD82], NFD: [0x1100, 0x116E, 0x11BD], NFKC: [0xAD82], NFKD: [0x1100, 0x116E, 0x11BD] }, +{ source: [0xAD83], NFC: [0xAD83], NFD: [0x1100, 0x116E, 0x11BE], NFKC: [0xAD83], NFKD: [0x1100, 0x116E, 0x11BE] }, +{ source: [0xAD84], NFC: [0xAD84], NFD: [0x1100, 0x116E, 0x11BF], NFKC: [0xAD84], NFKD: [0x1100, 0x116E, 0x11BF] }, +{ source: [0xAD85], NFC: [0xAD85], NFD: [0x1100, 0x116E, 0x11C0], NFKC: [0xAD85], NFKD: [0x1100, 0x116E, 0x11C0] }, +{ source: [0xAD86], NFC: [0xAD86], NFD: [0x1100, 0x116E, 0x11C1], NFKC: [0xAD86], NFKD: [0x1100, 0x116E, 0x11C1] }, +{ source: [0xAD87], NFC: [0xAD87], NFD: [0x1100, 0x116E, 0x11C2], NFKC: [0xAD87], NFKD: [0x1100, 0x116E, 0x11C2] }, +{ source: [0xAD88], NFC: [0xAD88], NFD: [0x1100, 0x116F], NFKC: [0xAD88], NFKD: [0x1100, 0x116F] }, +{ source: [0xAD89], NFC: [0xAD89], NFD: [0x1100, 0x116F, 0x11A8], NFKC: [0xAD89], NFKD: [0x1100, 0x116F, 0x11A8] }, +{ source: [0xAD8A], NFC: [0xAD8A], NFD: [0x1100, 0x116F, 0x11A9], NFKC: [0xAD8A], NFKD: [0x1100, 0x116F, 0x11A9] }, +{ source: [0xAD8B], NFC: [0xAD8B], NFD: [0x1100, 0x116F, 0x11AA], NFKC: [0xAD8B], NFKD: [0x1100, 0x116F, 0x11AA] }, +{ source: [0xAD8C], NFC: [0xAD8C], NFD: [0x1100, 0x116F, 0x11AB], NFKC: [0xAD8C], NFKD: [0x1100, 0x116F, 0x11AB] }, +{ source: [0xAD8D], NFC: [0xAD8D], NFD: [0x1100, 0x116F, 0x11AC], NFKC: [0xAD8D], NFKD: [0x1100, 0x116F, 0x11AC] }, +{ source: [0xAD8E], NFC: [0xAD8E], NFD: [0x1100, 0x116F, 0x11AD], NFKC: [0xAD8E], NFKD: [0x1100, 0x116F, 0x11AD] }, +{ source: [0xAD8F], NFC: [0xAD8F], NFD: [0x1100, 0x116F, 0x11AE], NFKC: [0xAD8F], NFKD: [0x1100, 0x116F, 0x11AE] }, +{ source: [0xAD90], NFC: [0xAD90], NFD: [0x1100, 0x116F, 0x11AF], NFKC: [0xAD90], NFKD: [0x1100, 0x116F, 0x11AF] }, +{ source: [0xAD91], NFC: [0xAD91], NFD: [0x1100, 0x116F, 0x11B0], NFKC: [0xAD91], NFKD: [0x1100, 0x116F, 0x11B0] }, +{ source: [0xAD92], NFC: [0xAD92], NFD: [0x1100, 0x116F, 0x11B1], NFKC: [0xAD92], NFKD: [0x1100, 0x116F, 0x11B1] }, +{ source: [0xAD93], NFC: [0xAD93], NFD: [0x1100, 0x116F, 0x11B2], NFKC: [0xAD93], NFKD: [0x1100, 0x116F, 0x11B2] }, +{ source: [0xAD94], NFC: [0xAD94], NFD: [0x1100, 0x116F, 0x11B3], NFKC: [0xAD94], NFKD: [0x1100, 0x116F, 0x11B3] }, +{ source: [0xAD95], NFC: [0xAD95], NFD: [0x1100, 0x116F, 0x11B4], NFKC: [0xAD95], NFKD: [0x1100, 0x116F, 0x11B4] }, +{ source: [0xAD96], NFC: [0xAD96], NFD: [0x1100, 0x116F, 0x11B5], NFKC: [0xAD96], NFKD: [0x1100, 0x116F, 0x11B5] }, +{ source: [0xAD97], NFC: [0xAD97], NFD: [0x1100, 0x116F, 0x11B6], NFKC: [0xAD97], NFKD: [0x1100, 0x116F, 0x11B6] }, +{ source: [0xAD98], NFC: [0xAD98], NFD: [0x1100, 0x116F, 0x11B7], NFKC: [0xAD98], NFKD: [0x1100, 0x116F, 0x11B7] }, +{ source: [0xAD99], NFC: [0xAD99], NFD: [0x1100, 0x116F, 0x11B8], NFKC: [0xAD99], NFKD: [0x1100, 0x116F, 0x11B8] }, +{ source: [0xAD9A], NFC: [0xAD9A], NFD: [0x1100, 0x116F, 0x11B9], NFKC: [0xAD9A], NFKD: [0x1100, 0x116F, 0x11B9] }, +{ source: [0xAD9B], NFC: [0xAD9B], NFD: [0x1100, 0x116F, 0x11BA], NFKC: [0xAD9B], NFKD: [0x1100, 0x116F, 0x11BA] }, +{ source: [0xAD9C], NFC: [0xAD9C], NFD: [0x1100, 0x116F, 0x11BB], NFKC: [0xAD9C], NFKD: [0x1100, 0x116F, 0x11BB] }, +{ source: [0xAD9D], NFC: [0xAD9D], NFD: [0x1100, 0x116F, 0x11BC], NFKC: [0xAD9D], NFKD: [0x1100, 0x116F, 0x11BC] }, +{ source: [0xAD9E], NFC: [0xAD9E], NFD: [0x1100, 0x116F, 0x11BD], NFKC: [0xAD9E], NFKD: [0x1100, 0x116F, 0x11BD] }, +{ source: [0xAD9F], NFC: [0xAD9F], NFD: [0x1100, 0x116F, 0x11BE], NFKC: [0xAD9F], NFKD: [0x1100, 0x116F, 0x11BE] }, +{ source: [0xADA0], NFC: [0xADA0], NFD: [0x1100, 0x116F, 0x11BF], NFKC: [0xADA0], NFKD: [0x1100, 0x116F, 0x11BF] }, +{ source: [0xADA1], NFC: [0xADA1], NFD: [0x1100, 0x116F, 0x11C0], NFKC: [0xADA1], NFKD: [0x1100, 0x116F, 0x11C0] }, +{ source: [0xADA2], NFC: [0xADA2], NFD: [0x1100, 0x116F, 0x11C1], NFKC: [0xADA2], NFKD: [0x1100, 0x116F, 0x11C1] }, +{ source: [0xADA3], NFC: [0xADA3], NFD: [0x1100, 0x116F, 0x11C2], NFKC: [0xADA3], NFKD: [0x1100, 0x116F, 0x11C2] }, +{ source: [0xADA4], NFC: [0xADA4], NFD: [0x1100, 0x1170], NFKC: [0xADA4], NFKD: [0x1100, 0x1170] }, +{ source: [0xADA5], NFC: [0xADA5], NFD: [0x1100, 0x1170, 0x11A8], NFKC: [0xADA5], NFKD: [0x1100, 0x1170, 0x11A8] }, +{ source: [0xADA6], NFC: [0xADA6], NFD: [0x1100, 0x1170, 0x11A9], NFKC: [0xADA6], NFKD: [0x1100, 0x1170, 0x11A9] }, +{ source: [0xADA7], NFC: [0xADA7], NFD: [0x1100, 0x1170, 0x11AA], NFKC: [0xADA7], NFKD: [0x1100, 0x1170, 0x11AA] }, +{ source: [0xADA8], NFC: [0xADA8], NFD: [0x1100, 0x1170, 0x11AB], NFKC: [0xADA8], NFKD: [0x1100, 0x1170, 0x11AB] }, +{ source: [0xADA9], NFC: [0xADA9], NFD: [0x1100, 0x1170, 0x11AC], NFKC: [0xADA9], NFKD: [0x1100, 0x1170, 0x11AC] }, +{ source: [0xADAA], NFC: [0xADAA], NFD: [0x1100, 0x1170, 0x11AD], NFKC: [0xADAA], NFKD: [0x1100, 0x1170, 0x11AD] }, +{ source: [0xADAB], NFC: [0xADAB], NFD: [0x1100, 0x1170, 0x11AE], NFKC: [0xADAB], NFKD: [0x1100, 0x1170, 0x11AE] }, +{ source: [0xADAC], NFC: [0xADAC], NFD: [0x1100, 0x1170, 0x11AF], NFKC: [0xADAC], NFKD: [0x1100, 0x1170, 0x11AF] }, +{ source: [0xADAD], NFC: [0xADAD], NFD: [0x1100, 0x1170, 0x11B0], NFKC: [0xADAD], NFKD: [0x1100, 0x1170, 0x11B0] }, +{ source: [0xADAE], NFC: [0xADAE], NFD: [0x1100, 0x1170, 0x11B1], NFKC: [0xADAE], NFKD: [0x1100, 0x1170, 0x11B1] }, +{ source: [0xADAF], NFC: [0xADAF], NFD: [0x1100, 0x1170, 0x11B2], NFKC: [0xADAF], NFKD: [0x1100, 0x1170, 0x11B2] }, +{ source: [0xADB0], NFC: [0xADB0], NFD: [0x1100, 0x1170, 0x11B3], NFKC: [0xADB0], NFKD: [0x1100, 0x1170, 0x11B3] }, +{ source: [0xADB1], NFC: [0xADB1], NFD: [0x1100, 0x1170, 0x11B4], NFKC: [0xADB1], NFKD: [0x1100, 0x1170, 0x11B4] }, +{ source: [0xADB2], NFC: [0xADB2], NFD: [0x1100, 0x1170, 0x11B5], NFKC: [0xADB2], NFKD: [0x1100, 0x1170, 0x11B5] }, +{ source: [0xADB3], NFC: [0xADB3], NFD: [0x1100, 0x1170, 0x11B6], NFKC: [0xADB3], NFKD: [0x1100, 0x1170, 0x11B6] }, +{ source: [0xADB4], NFC: [0xADB4], NFD: [0x1100, 0x1170, 0x11B7], NFKC: [0xADB4], NFKD: [0x1100, 0x1170, 0x11B7] }, +{ source: [0xADB5], NFC: [0xADB5], NFD: [0x1100, 0x1170, 0x11B8], NFKC: [0xADB5], NFKD: [0x1100, 0x1170, 0x11B8] }, +{ source: [0xADB6], NFC: [0xADB6], NFD: [0x1100, 0x1170, 0x11B9], NFKC: [0xADB6], NFKD: [0x1100, 0x1170, 0x11B9] }, +{ source: [0xADB7], NFC: [0xADB7], NFD: [0x1100, 0x1170, 0x11BA], NFKC: [0xADB7], NFKD: [0x1100, 0x1170, 0x11BA] }, +{ source: [0xADB8], NFC: [0xADB8], NFD: [0x1100, 0x1170, 0x11BB], NFKC: [0xADB8], NFKD: [0x1100, 0x1170, 0x11BB] }, +{ source: [0xADB9], NFC: [0xADB9], NFD: [0x1100, 0x1170, 0x11BC], NFKC: [0xADB9], NFKD: [0x1100, 0x1170, 0x11BC] }, +{ source: [0xADBA], NFC: [0xADBA], NFD: [0x1100, 0x1170, 0x11BD], NFKC: [0xADBA], NFKD: [0x1100, 0x1170, 0x11BD] }, +{ source: [0xADBB], NFC: [0xADBB], NFD: [0x1100, 0x1170, 0x11BE], NFKC: [0xADBB], NFKD: [0x1100, 0x1170, 0x11BE] }, +{ source: [0xADBC], NFC: [0xADBC], NFD: [0x1100, 0x1170, 0x11BF], NFKC: [0xADBC], NFKD: [0x1100, 0x1170, 0x11BF] }, +{ source: [0xADBD], NFC: [0xADBD], NFD: [0x1100, 0x1170, 0x11C0], NFKC: [0xADBD], NFKD: [0x1100, 0x1170, 0x11C0] }, +{ source: [0xADBE], NFC: [0xADBE], NFD: [0x1100, 0x1170, 0x11C1], NFKC: [0xADBE], NFKD: [0x1100, 0x1170, 0x11C1] }, +{ source: [0xADBF], NFC: [0xADBF], NFD: [0x1100, 0x1170, 0x11C2], NFKC: [0xADBF], NFKD: [0x1100, 0x1170, 0x11C2] }, +{ source: [0xADC0], NFC: [0xADC0], NFD: [0x1100, 0x1171], NFKC: [0xADC0], NFKD: [0x1100, 0x1171] }, +{ source: [0xADC1], NFC: [0xADC1], NFD: [0x1100, 0x1171, 0x11A8], NFKC: [0xADC1], NFKD: [0x1100, 0x1171, 0x11A8] }, +{ source: [0xADC2], NFC: [0xADC2], NFD: [0x1100, 0x1171, 0x11A9], NFKC: [0xADC2], NFKD: [0x1100, 0x1171, 0x11A9] }, +{ source: [0xADC3], NFC: [0xADC3], NFD: [0x1100, 0x1171, 0x11AA], NFKC: [0xADC3], NFKD: [0x1100, 0x1171, 0x11AA] }, +{ source: [0xADC4], NFC: [0xADC4], NFD: [0x1100, 0x1171, 0x11AB], NFKC: [0xADC4], NFKD: [0x1100, 0x1171, 0x11AB] }, +{ source: [0xADC5], NFC: [0xADC5], NFD: [0x1100, 0x1171, 0x11AC], NFKC: [0xADC5], NFKD: [0x1100, 0x1171, 0x11AC] }, +{ source: [0xADC6], NFC: [0xADC6], NFD: [0x1100, 0x1171, 0x11AD], NFKC: [0xADC6], NFKD: [0x1100, 0x1171, 0x11AD] }, +{ source: [0xADC7], NFC: [0xADC7], NFD: [0x1100, 0x1171, 0x11AE], NFKC: [0xADC7], NFKD: [0x1100, 0x1171, 0x11AE] }, +{ source: [0xADC8], NFC: [0xADC8], NFD: [0x1100, 0x1171, 0x11AF], NFKC: [0xADC8], NFKD: [0x1100, 0x1171, 0x11AF] }, +{ source: [0xADC9], NFC: [0xADC9], NFD: [0x1100, 0x1171, 0x11B0], NFKC: [0xADC9], NFKD: [0x1100, 0x1171, 0x11B0] }, +{ source: [0xADCA], NFC: [0xADCA], NFD: [0x1100, 0x1171, 0x11B1], NFKC: [0xADCA], NFKD: [0x1100, 0x1171, 0x11B1] }, +{ source: [0xADCB], NFC: [0xADCB], NFD: [0x1100, 0x1171, 0x11B2], NFKC: [0xADCB], NFKD: [0x1100, 0x1171, 0x11B2] }, +{ source: [0xADCC], NFC: [0xADCC], NFD: [0x1100, 0x1171, 0x11B3], NFKC: [0xADCC], NFKD: [0x1100, 0x1171, 0x11B3] }, +{ source: [0xADCD], NFC: [0xADCD], NFD: [0x1100, 0x1171, 0x11B4], NFKC: [0xADCD], NFKD: [0x1100, 0x1171, 0x11B4] }, +{ source: [0xADCE], NFC: [0xADCE], NFD: [0x1100, 0x1171, 0x11B5], NFKC: [0xADCE], NFKD: [0x1100, 0x1171, 0x11B5] }, +{ source: [0xADCF], NFC: [0xADCF], NFD: [0x1100, 0x1171, 0x11B6], NFKC: [0xADCF], NFKD: [0x1100, 0x1171, 0x11B6] }, +{ source: [0xADD0], NFC: [0xADD0], NFD: [0x1100, 0x1171, 0x11B7], NFKC: [0xADD0], NFKD: [0x1100, 0x1171, 0x11B7] }, +{ source: [0xADD1], NFC: [0xADD1], NFD: [0x1100, 0x1171, 0x11B8], NFKC: [0xADD1], NFKD: [0x1100, 0x1171, 0x11B8] }, +{ source: [0xADD2], NFC: [0xADD2], NFD: [0x1100, 0x1171, 0x11B9], NFKC: [0xADD2], NFKD: [0x1100, 0x1171, 0x11B9] }, +{ source: [0xADD3], NFC: [0xADD3], NFD: [0x1100, 0x1171, 0x11BA], NFKC: [0xADD3], NFKD: [0x1100, 0x1171, 0x11BA] }, +{ source: [0xADD4], NFC: [0xADD4], NFD: [0x1100, 0x1171, 0x11BB], NFKC: [0xADD4], NFKD: [0x1100, 0x1171, 0x11BB] }, +{ source: [0xADD5], NFC: [0xADD5], NFD: [0x1100, 0x1171, 0x11BC], NFKC: [0xADD5], NFKD: [0x1100, 0x1171, 0x11BC] }, +{ source: [0xADD6], NFC: [0xADD6], NFD: [0x1100, 0x1171, 0x11BD], NFKC: [0xADD6], NFKD: [0x1100, 0x1171, 0x11BD] }, +{ source: [0xADD7], NFC: [0xADD7], NFD: [0x1100, 0x1171, 0x11BE], NFKC: [0xADD7], NFKD: [0x1100, 0x1171, 0x11BE] }, +{ source: [0xADD8], NFC: [0xADD8], NFD: [0x1100, 0x1171, 0x11BF], NFKC: [0xADD8], NFKD: [0x1100, 0x1171, 0x11BF] }, +{ source: [0xADD9], NFC: [0xADD9], NFD: [0x1100, 0x1171, 0x11C0], NFKC: [0xADD9], NFKD: [0x1100, 0x1171, 0x11C0] }, +{ source: [0xADDA], NFC: [0xADDA], NFD: [0x1100, 0x1171, 0x11C1], NFKC: [0xADDA], NFKD: [0x1100, 0x1171, 0x11C1] }, +{ source: [0xADDB], NFC: [0xADDB], NFD: [0x1100, 0x1171, 0x11C2], NFKC: [0xADDB], NFKD: [0x1100, 0x1171, 0x11C2] }, +{ source: [0xADDC], NFC: [0xADDC], NFD: [0x1100, 0x1172], NFKC: [0xADDC], NFKD: [0x1100, 0x1172] }, +{ source: [0xADDD], NFC: [0xADDD], NFD: [0x1100, 0x1172, 0x11A8], NFKC: [0xADDD], NFKD: [0x1100, 0x1172, 0x11A8] }, +{ source: [0xADDE], NFC: [0xADDE], NFD: [0x1100, 0x1172, 0x11A9], NFKC: [0xADDE], NFKD: [0x1100, 0x1172, 0x11A9] }, +{ source: [0xADDF], NFC: [0xADDF], NFD: [0x1100, 0x1172, 0x11AA], NFKC: [0xADDF], NFKD: [0x1100, 0x1172, 0x11AA] }, +{ source: [0xADE0], NFC: [0xADE0], NFD: [0x1100, 0x1172, 0x11AB], NFKC: [0xADE0], NFKD: [0x1100, 0x1172, 0x11AB] }, +{ source: [0xADE1], NFC: [0xADE1], NFD: [0x1100, 0x1172, 0x11AC], NFKC: [0xADE1], NFKD: [0x1100, 0x1172, 0x11AC] }, +{ source: [0xADE2], NFC: [0xADE2], NFD: [0x1100, 0x1172, 0x11AD], NFKC: [0xADE2], NFKD: [0x1100, 0x1172, 0x11AD] }, +{ source: [0xADE3], NFC: [0xADE3], NFD: [0x1100, 0x1172, 0x11AE], NFKC: [0xADE3], NFKD: [0x1100, 0x1172, 0x11AE] }, +{ source: [0xADE4], NFC: [0xADE4], NFD: [0x1100, 0x1172, 0x11AF], NFKC: [0xADE4], NFKD: [0x1100, 0x1172, 0x11AF] }, +{ source: [0xADE5], NFC: [0xADE5], NFD: [0x1100, 0x1172, 0x11B0], NFKC: [0xADE5], NFKD: [0x1100, 0x1172, 0x11B0] }, +{ source: [0xADE6], NFC: [0xADE6], NFD: [0x1100, 0x1172, 0x11B1], NFKC: [0xADE6], NFKD: [0x1100, 0x1172, 0x11B1] }, +{ source: [0xADE7], NFC: [0xADE7], NFD: [0x1100, 0x1172, 0x11B2], NFKC: [0xADE7], NFKD: [0x1100, 0x1172, 0x11B2] }, +{ source: [0xADE8], NFC: [0xADE8], NFD: [0x1100, 0x1172, 0x11B3], NFKC: [0xADE8], NFKD: [0x1100, 0x1172, 0x11B3] }, +{ source: [0xADE9], NFC: [0xADE9], NFD: [0x1100, 0x1172, 0x11B4], NFKC: [0xADE9], NFKD: [0x1100, 0x1172, 0x11B4] }, +{ source: [0xADEA], NFC: [0xADEA], NFD: [0x1100, 0x1172, 0x11B5], NFKC: [0xADEA], NFKD: [0x1100, 0x1172, 0x11B5] }, +{ source: [0xADEB], NFC: [0xADEB], NFD: [0x1100, 0x1172, 0x11B6], NFKC: [0xADEB], NFKD: [0x1100, 0x1172, 0x11B6] }, +{ source: [0xADEC], NFC: [0xADEC], NFD: [0x1100, 0x1172, 0x11B7], NFKC: [0xADEC], NFKD: [0x1100, 0x1172, 0x11B7] }, +{ source: [0xADED], NFC: [0xADED], NFD: [0x1100, 0x1172, 0x11B8], NFKC: [0xADED], NFKD: [0x1100, 0x1172, 0x11B8] }, +{ source: [0xADEE], NFC: [0xADEE], NFD: [0x1100, 0x1172, 0x11B9], NFKC: [0xADEE], NFKD: [0x1100, 0x1172, 0x11B9] }, +{ source: [0xADEF], NFC: [0xADEF], NFD: [0x1100, 0x1172, 0x11BA], NFKC: [0xADEF], NFKD: [0x1100, 0x1172, 0x11BA] }, +{ source: [0xADF0], NFC: [0xADF0], NFD: [0x1100, 0x1172, 0x11BB], NFKC: [0xADF0], NFKD: [0x1100, 0x1172, 0x11BB] }, +{ source: [0xADF1], NFC: [0xADF1], NFD: [0x1100, 0x1172, 0x11BC], NFKC: [0xADF1], NFKD: [0x1100, 0x1172, 0x11BC] }, +{ source: [0xADF2], NFC: [0xADF2], NFD: [0x1100, 0x1172, 0x11BD], NFKC: [0xADF2], NFKD: [0x1100, 0x1172, 0x11BD] }, +{ source: [0xADF3], NFC: [0xADF3], NFD: [0x1100, 0x1172, 0x11BE], NFKC: [0xADF3], NFKD: [0x1100, 0x1172, 0x11BE] }, +{ source: [0xADF4], NFC: [0xADF4], NFD: [0x1100, 0x1172, 0x11BF], NFKC: [0xADF4], NFKD: [0x1100, 0x1172, 0x11BF] }, +{ source: [0xADF5], NFC: [0xADF5], NFD: [0x1100, 0x1172, 0x11C0], NFKC: [0xADF5], NFKD: [0x1100, 0x1172, 0x11C0] }, +{ source: [0xADF6], NFC: [0xADF6], NFD: [0x1100, 0x1172, 0x11C1], NFKC: [0xADF6], NFKD: [0x1100, 0x1172, 0x11C1] }, +{ source: [0xADF7], NFC: [0xADF7], NFD: [0x1100, 0x1172, 0x11C2], NFKC: [0xADF7], NFKD: [0x1100, 0x1172, 0x11C2] }, +{ source: [0xADF8], NFC: [0xADF8], NFD: [0x1100, 0x1173], NFKC: [0xADF8], NFKD: [0x1100, 0x1173] }, +{ source: [0xADF9], NFC: [0xADF9], NFD: [0x1100, 0x1173, 0x11A8], NFKC: [0xADF9], NFKD: [0x1100, 0x1173, 0x11A8] }, +{ source: [0xADFA], NFC: [0xADFA], NFD: [0x1100, 0x1173, 0x11A9], NFKC: [0xADFA], NFKD: [0x1100, 0x1173, 0x11A9] }, +{ source: [0xADFB], NFC: [0xADFB], NFD: [0x1100, 0x1173, 0x11AA], NFKC: [0xADFB], NFKD: [0x1100, 0x1173, 0x11AA] }, +{ source: [0xADFC], NFC: [0xADFC], NFD: [0x1100, 0x1173, 0x11AB], NFKC: [0xADFC], NFKD: [0x1100, 0x1173, 0x11AB] }, +{ source: [0xADFD], NFC: [0xADFD], NFD: [0x1100, 0x1173, 0x11AC], NFKC: [0xADFD], NFKD: [0x1100, 0x1173, 0x11AC] }, +{ source: [0xADFE], NFC: [0xADFE], NFD: [0x1100, 0x1173, 0x11AD], NFKC: [0xADFE], NFKD: [0x1100, 0x1173, 0x11AD] }, +{ source: [0xADFF], NFC: [0xADFF], NFD: [0x1100, 0x1173, 0x11AE], NFKC: [0xADFF], NFKD: [0x1100, 0x1173, 0x11AE] }, +{ source: [0xAE00], NFC: [0xAE00], NFD: [0x1100, 0x1173, 0x11AF], NFKC: [0xAE00], NFKD: [0x1100, 0x1173, 0x11AF] }, +{ source: [0xAE01], NFC: [0xAE01], NFD: [0x1100, 0x1173, 0x11B0], NFKC: [0xAE01], NFKD: [0x1100, 0x1173, 0x11B0] }, +{ source: [0xAE02], NFC: [0xAE02], NFD: [0x1100, 0x1173, 0x11B1], NFKC: [0xAE02], NFKD: [0x1100, 0x1173, 0x11B1] }, +{ source: [0xAE03], NFC: [0xAE03], NFD: [0x1100, 0x1173, 0x11B2], NFKC: [0xAE03], NFKD: [0x1100, 0x1173, 0x11B2] }, +{ source: [0xAE04], NFC: [0xAE04], NFD: [0x1100, 0x1173, 0x11B3], NFKC: [0xAE04], NFKD: [0x1100, 0x1173, 0x11B3] }, +{ source: [0xAE05], NFC: [0xAE05], NFD: [0x1100, 0x1173, 0x11B4], NFKC: [0xAE05], NFKD: [0x1100, 0x1173, 0x11B4] }, +{ source: [0xAE06], NFC: [0xAE06], NFD: [0x1100, 0x1173, 0x11B5], NFKC: [0xAE06], NFKD: [0x1100, 0x1173, 0x11B5] }, +{ source: [0xAE07], NFC: [0xAE07], NFD: [0x1100, 0x1173, 0x11B6], NFKC: [0xAE07], NFKD: [0x1100, 0x1173, 0x11B6] }, +{ source: [0xAE08], NFC: [0xAE08], NFD: [0x1100, 0x1173, 0x11B7], NFKC: [0xAE08], NFKD: [0x1100, 0x1173, 0x11B7] }, +{ source: [0xAE09], NFC: [0xAE09], NFD: [0x1100, 0x1173, 0x11B8], NFKC: [0xAE09], NFKD: [0x1100, 0x1173, 0x11B8] }, +{ source: [0xAE0A], NFC: [0xAE0A], NFD: [0x1100, 0x1173, 0x11B9], NFKC: [0xAE0A], NFKD: [0x1100, 0x1173, 0x11B9] }, +{ source: [0xAE0B], NFC: [0xAE0B], NFD: [0x1100, 0x1173, 0x11BA], NFKC: [0xAE0B], NFKD: [0x1100, 0x1173, 0x11BA] }, +{ source: [0xAE0C], NFC: [0xAE0C], NFD: [0x1100, 0x1173, 0x11BB], NFKC: [0xAE0C], NFKD: [0x1100, 0x1173, 0x11BB] }, +{ source: [0xAE0D], NFC: [0xAE0D], NFD: [0x1100, 0x1173, 0x11BC], NFKC: [0xAE0D], NFKD: [0x1100, 0x1173, 0x11BC] }, +{ source: [0xAE0E], NFC: [0xAE0E], NFD: [0x1100, 0x1173, 0x11BD], NFKC: [0xAE0E], NFKD: [0x1100, 0x1173, 0x11BD] }, +{ source: [0xAE0F], NFC: [0xAE0F], NFD: [0x1100, 0x1173, 0x11BE], NFKC: [0xAE0F], NFKD: [0x1100, 0x1173, 0x11BE] }, +{ source: [0xAE10], NFC: [0xAE10], NFD: [0x1100, 0x1173, 0x11BF], NFKC: [0xAE10], NFKD: [0x1100, 0x1173, 0x11BF] }, +{ source: [0xAE11], NFC: [0xAE11], NFD: [0x1100, 0x1173, 0x11C0], NFKC: [0xAE11], NFKD: [0x1100, 0x1173, 0x11C0] }, +{ source: [0xAE12], NFC: [0xAE12], NFD: [0x1100, 0x1173, 0x11C1], NFKC: [0xAE12], NFKD: [0x1100, 0x1173, 0x11C1] }, +{ source: [0xAE13], NFC: [0xAE13], NFD: [0x1100, 0x1173, 0x11C2], NFKC: [0xAE13], NFKD: [0x1100, 0x1173, 0x11C2] }, +{ source: [0xAE14], NFC: [0xAE14], NFD: [0x1100, 0x1174], NFKC: [0xAE14], NFKD: [0x1100, 0x1174] }, +{ source: [0xAE15], NFC: [0xAE15], NFD: [0x1100, 0x1174, 0x11A8], NFKC: [0xAE15], NFKD: [0x1100, 0x1174, 0x11A8] }, +{ source: [0xAE16], NFC: [0xAE16], NFD: [0x1100, 0x1174, 0x11A9], NFKC: [0xAE16], NFKD: [0x1100, 0x1174, 0x11A9] }, +{ source: [0xAE17], NFC: [0xAE17], NFD: [0x1100, 0x1174, 0x11AA], NFKC: [0xAE17], NFKD: [0x1100, 0x1174, 0x11AA] }, +{ source: [0xAE18], NFC: [0xAE18], NFD: [0x1100, 0x1174, 0x11AB], NFKC: [0xAE18], NFKD: [0x1100, 0x1174, 0x11AB] }, +{ source: [0xAE19], NFC: [0xAE19], NFD: [0x1100, 0x1174, 0x11AC], NFKC: [0xAE19], NFKD: [0x1100, 0x1174, 0x11AC] }, +{ source: [0xAE1A], NFC: [0xAE1A], NFD: [0x1100, 0x1174, 0x11AD], NFKC: [0xAE1A], NFKD: [0x1100, 0x1174, 0x11AD] }, +{ source: [0xAE1B], NFC: [0xAE1B], NFD: [0x1100, 0x1174, 0x11AE], NFKC: [0xAE1B], NFKD: [0x1100, 0x1174, 0x11AE] }, +{ source: [0xAE1C], NFC: [0xAE1C], NFD: [0x1100, 0x1174, 0x11AF], NFKC: [0xAE1C], NFKD: [0x1100, 0x1174, 0x11AF] }, +{ source: [0xAE1D], NFC: [0xAE1D], NFD: [0x1100, 0x1174, 0x11B0], NFKC: [0xAE1D], NFKD: [0x1100, 0x1174, 0x11B0] }, +{ source: [0xAE1E], NFC: [0xAE1E], NFD: [0x1100, 0x1174, 0x11B1], NFKC: [0xAE1E], NFKD: [0x1100, 0x1174, 0x11B1] }, +{ source: [0xAE1F], NFC: [0xAE1F], NFD: [0x1100, 0x1174, 0x11B2], NFKC: [0xAE1F], NFKD: [0x1100, 0x1174, 0x11B2] }, +{ source: [0xAE20], NFC: [0xAE20], NFD: [0x1100, 0x1174, 0x11B3], NFKC: [0xAE20], NFKD: [0x1100, 0x1174, 0x11B3] }, +{ source: [0xAE21], NFC: [0xAE21], NFD: [0x1100, 0x1174, 0x11B4], NFKC: [0xAE21], NFKD: [0x1100, 0x1174, 0x11B4] }, +{ source: [0xAE22], NFC: [0xAE22], NFD: [0x1100, 0x1174, 0x11B5], NFKC: [0xAE22], NFKD: [0x1100, 0x1174, 0x11B5] }, +{ source: [0xAE23], NFC: [0xAE23], NFD: [0x1100, 0x1174, 0x11B6], NFKC: [0xAE23], NFKD: [0x1100, 0x1174, 0x11B6] }, +{ source: [0xAE24], NFC: [0xAE24], NFD: [0x1100, 0x1174, 0x11B7], NFKC: [0xAE24], NFKD: [0x1100, 0x1174, 0x11B7] }, +{ source: [0xAE25], NFC: [0xAE25], NFD: [0x1100, 0x1174, 0x11B8], NFKC: [0xAE25], NFKD: [0x1100, 0x1174, 0x11B8] }, +{ source: [0xAE26], NFC: [0xAE26], NFD: [0x1100, 0x1174, 0x11B9], NFKC: [0xAE26], NFKD: [0x1100, 0x1174, 0x11B9] }, +{ source: [0xAE27], NFC: [0xAE27], NFD: [0x1100, 0x1174, 0x11BA], NFKC: [0xAE27], NFKD: [0x1100, 0x1174, 0x11BA] }, +{ source: [0xAE28], NFC: [0xAE28], NFD: [0x1100, 0x1174, 0x11BB], NFKC: [0xAE28], NFKD: [0x1100, 0x1174, 0x11BB] }, +{ source: [0xAE29], NFC: [0xAE29], NFD: [0x1100, 0x1174, 0x11BC], NFKC: [0xAE29], NFKD: [0x1100, 0x1174, 0x11BC] }, +{ source: [0xAE2A], NFC: [0xAE2A], NFD: [0x1100, 0x1174, 0x11BD], NFKC: [0xAE2A], NFKD: [0x1100, 0x1174, 0x11BD] }, +{ source: [0xAE2B], NFC: [0xAE2B], NFD: [0x1100, 0x1174, 0x11BE], NFKC: [0xAE2B], NFKD: [0x1100, 0x1174, 0x11BE] }, +{ source: [0xAE2C], NFC: [0xAE2C], NFD: [0x1100, 0x1174, 0x11BF], NFKC: [0xAE2C], NFKD: [0x1100, 0x1174, 0x11BF] }, +{ source: [0xAE2D], NFC: [0xAE2D], NFD: [0x1100, 0x1174, 0x11C0], NFKC: [0xAE2D], NFKD: [0x1100, 0x1174, 0x11C0] }, +{ source: [0xAE2E], NFC: [0xAE2E], NFD: [0x1100, 0x1174, 0x11C1], NFKC: [0xAE2E], NFKD: [0x1100, 0x1174, 0x11C1] }, +{ source: [0xAE2F], NFC: [0xAE2F], NFD: [0x1100, 0x1174, 0x11C2], NFKC: [0xAE2F], NFKD: [0x1100, 0x1174, 0x11C2] }, +{ source: [0xAE30], NFC: [0xAE30], NFD: [0x1100, 0x1175], NFKC: [0xAE30], NFKD: [0x1100, 0x1175] }, +{ source: [0xAE31], NFC: [0xAE31], NFD: [0x1100, 0x1175, 0x11A8], NFKC: [0xAE31], NFKD: [0x1100, 0x1175, 0x11A8] }, +{ source: [0xAE32], NFC: [0xAE32], NFD: [0x1100, 0x1175, 0x11A9], NFKC: [0xAE32], NFKD: [0x1100, 0x1175, 0x11A9] }, +{ source: [0xAE33], NFC: [0xAE33], NFD: [0x1100, 0x1175, 0x11AA], NFKC: [0xAE33], NFKD: [0x1100, 0x1175, 0x11AA] }, +{ source: [0xAE34], NFC: [0xAE34], NFD: [0x1100, 0x1175, 0x11AB], NFKC: [0xAE34], NFKD: [0x1100, 0x1175, 0x11AB] }, +{ source: [0xAE35], NFC: [0xAE35], NFD: [0x1100, 0x1175, 0x11AC], NFKC: [0xAE35], NFKD: [0x1100, 0x1175, 0x11AC] }, +{ source: [0xAE36], NFC: [0xAE36], NFD: [0x1100, 0x1175, 0x11AD], NFKC: [0xAE36], NFKD: [0x1100, 0x1175, 0x11AD] }, +{ source: [0xAE37], NFC: [0xAE37], NFD: [0x1100, 0x1175, 0x11AE], NFKC: [0xAE37], NFKD: [0x1100, 0x1175, 0x11AE] }, +{ source: [0xAE38], NFC: [0xAE38], NFD: [0x1100, 0x1175, 0x11AF], NFKC: [0xAE38], NFKD: [0x1100, 0x1175, 0x11AF] }, +{ source: [0xAE39], NFC: [0xAE39], NFD: [0x1100, 0x1175, 0x11B0], NFKC: [0xAE39], NFKD: [0x1100, 0x1175, 0x11B0] }, +{ source: [0xAE3A], NFC: [0xAE3A], NFD: [0x1100, 0x1175, 0x11B1], NFKC: [0xAE3A], NFKD: [0x1100, 0x1175, 0x11B1] }, +{ source: [0xAE3B], NFC: [0xAE3B], NFD: [0x1100, 0x1175, 0x11B2], NFKC: [0xAE3B], NFKD: [0x1100, 0x1175, 0x11B2] }, +{ source: [0xAE3C], NFC: [0xAE3C], NFD: [0x1100, 0x1175, 0x11B3], NFKC: [0xAE3C], NFKD: [0x1100, 0x1175, 0x11B3] }, +{ source: [0xAE3D], NFC: [0xAE3D], NFD: [0x1100, 0x1175, 0x11B4], NFKC: [0xAE3D], NFKD: [0x1100, 0x1175, 0x11B4] }, +{ source: [0xAE3E], NFC: [0xAE3E], NFD: [0x1100, 0x1175, 0x11B5], NFKC: [0xAE3E], NFKD: [0x1100, 0x1175, 0x11B5] }, +{ source: [0xAE3F], NFC: [0xAE3F], NFD: [0x1100, 0x1175, 0x11B6], NFKC: [0xAE3F], NFKD: [0x1100, 0x1175, 0x11B6] }, +{ source: [0xAE40], NFC: [0xAE40], NFD: [0x1100, 0x1175, 0x11B7], NFKC: [0xAE40], NFKD: [0x1100, 0x1175, 0x11B7] }, +{ source: [0xAE41], NFC: [0xAE41], NFD: [0x1100, 0x1175, 0x11B8], NFKC: [0xAE41], NFKD: [0x1100, 0x1175, 0x11B8] }, +{ source: [0xAE42], NFC: [0xAE42], NFD: [0x1100, 0x1175, 0x11B9], NFKC: [0xAE42], NFKD: [0x1100, 0x1175, 0x11B9] }, +{ source: [0xAE43], NFC: [0xAE43], NFD: [0x1100, 0x1175, 0x11BA], NFKC: [0xAE43], NFKD: [0x1100, 0x1175, 0x11BA] }, +{ source: [0xAE44], NFC: [0xAE44], NFD: [0x1100, 0x1175, 0x11BB], NFKC: [0xAE44], NFKD: [0x1100, 0x1175, 0x11BB] }, +{ source: [0xAE45], NFC: [0xAE45], NFD: [0x1100, 0x1175, 0x11BC], NFKC: [0xAE45], NFKD: [0x1100, 0x1175, 0x11BC] }, +{ source: [0xAE46], NFC: [0xAE46], NFD: [0x1100, 0x1175, 0x11BD], NFKC: [0xAE46], NFKD: [0x1100, 0x1175, 0x11BD] }, +{ source: [0xAE47], NFC: [0xAE47], NFD: [0x1100, 0x1175, 0x11BE], NFKC: [0xAE47], NFKD: [0x1100, 0x1175, 0x11BE] }, +{ source: [0xAE48], NFC: [0xAE48], NFD: [0x1100, 0x1175, 0x11BF], NFKC: [0xAE48], NFKD: [0x1100, 0x1175, 0x11BF] }, +{ source: [0xAE49], NFC: [0xAE49], NFD: [0x1100, 0x1175, 0x11C0], NFKC: [0xAE49], NFKD: [0x1100, 0x1175, 0x11C0] }, +{ source: [0xAE4A], NFC: [0xAE4A], NFD: [0x1100, 0x1175, 0x11C1], NFKC: [0xAE4A], NFKD: [0x1100, 0x1175, 0x11C1] }, +{ source: [0xAE4B], NFC: [0xAE4B], NFD: [0x1100, 0x1175, 0x11C2], NFKC: [0xAE4B], NFKD: [0x1100, 0x1175, 0x11C2] }, +{ source: [0xAE4C], NFC: [0xAE4C], NFD: [0x1101, 0x1161], NFKC: [0xAE4C], NFKD: [0x1101, 0x1161] }, +{ source: [0xAE4D], NFC: [0xAE4D], NFD: [0x1101, 0x1161, 0x11A8], NFKC: [0xAE4D], NFKD: [0x1101, 0x1161, 0x11A8] }, +{ source: [0xAE4E], NFC: [0xAE4E], NFD: [0x1101, 0x1161, 0x11A9], NFKC: [0xAE4E], NFKD: [0x1101, 0x1161, 0x11A9] }, +{ source: [0xAE4F], NFC: [0xAE4F], NFD: [0x1101, 0x1161, 0x11AA], NFKC: [0xAE4F], NFKD: [0x1101, 0x1161, 0x11AA] }, +{ source: [0xAE50], NFC: [0xAE50], NFD: [0x1101, 0x1161, 0x11AB], NFKC: [0xAE50], NFKD: [0x1101, 0x1161, 0x11AB] }, +{ source: [0xAE51], NFC: [0xAE51], NFD: [0x1101, 0x1161, 0x11AC], NFKC: [0xAE51], NFKD: [0x1101, 0x1161, 0x11AC] }, +{ source: [0xAE52], NFC: [0xAE52], NFD: [0x1101, 0x1161, 0x11AD], NFKC: [0xAE52], NFKD: [0x1101, 0x1161, 0x11AD] }, +{ source: [0xAE53], NFC: [0xAE53], NFD: [0x1101, 0x1161, 0x11AE], NFKC: [0xAE53], NFKD: [0x1101, 0x1161, 0x11AE] }, +{ source: [0xAE54], NFC: [0xAE54], NFD: [0x1101, 0x1161, 0x11AF], NFKC: [0xAE54], NFKD: [0x1101, 0x1161, 0x11AF] }, +{ source: [0xAE55], NFC: [0xAE55], NFD: [0x1101, 0x1161, 0x11B0], NFKC: [0xAE55], NFKD: [0x1101, 0x1161, 0x11B0] }, +{ source: [0xAE56], NFC: [0xAE56], NFD: [0x1101, 0x1161, 0x11B1], NFKC: [0xAE56], NFKD: [0x1101, 0x1161, 0x11B1] }, +{ source: [0xAE57], NFC: [0xAE57], NFD: [0x1101, 0x1161, 0x11B2], NFKC: [0xAE57], NFKD: [0x1101, 0x1161, 0x11B2] }, +{ source: [0xAE58], NFC: [0xAE58], NFD: [0x1101, 0x1161, 0x11B3], NFKC: [0xAE58], NFKD: [0x1101, 0x1161, 0x11B3] }, +{ source: [0xAE59], NFC: [0xAE59], NFD: [0x1101, 0x1161, 0x11B4], NFKC: [0xAE59], NFKD: [0x1101, 0x1161, 0x11B4] }, +{ source: [0xAE5A], NFC: [0xAE5A], NFD: [0x1101, 0x1161, 0x11B5], NFKC: [0xAE5A], NFKD: [0x1101, 0x1161, 0x11B5] }, +{ source: [0xAE5B], NFC: [0xAE5B], NFD: [0x1101, 0x1161, 0x11B6], NFKC: [0xAE5B], NFKD: [0x1101, 0x1161, 0x11B6] }, +{ source: [0xAE5C], NFC: [0xAE5C], NFD: [0x1101, 0x1161, 0x11B7], NFKC: [0xAE5C], NFKD: [0x1101, 0x1161, 0x11B7] }, +{ source: [0xAE5D], NFC: [0xAE5D], NFD: [0x1101, 0x1161, 0x11B8], NFKC: [0xAE5D], NFKD: [0x1101, 0x1161, 0x11B8] }, +{ source: [0xAE5E], NFC: [0xAE5E], NFD: [0x1101, 0x1161, 0x11B9], NFKC: [0xAE5E], NFKD: [0x1101, 0x1161, 0x11B9] }, +{ source: [0xAE5F], NFC: [0xAE5F], NFD: [0x1101, 0x1161, 0x11BA], NFKC: [0xAE5F], NFKD: [0x1101, 0x1161, 0x11BA] }, +{ source: [0xAE60], NFC: [0xAE60], NFD: [0x1101, 0x1161, 0x11BB], NFKC: [0xAE60], NFKD: [0x1101, 0x1161, 0x11BB] }, +{ source: [0xAE61], NFC: [0xAE61], NFD: [0x1101, 0x1161, 0x11BC], NFKC: [0xAE61], NFKD: [0x1101, 0x1161, 0x11BC] }, +{ source: [0xAE62], NFC: [0xAE62], NFD: [0x1101, 0x1161, 0x11BD], NFKC: [0xAE62], NFKD: [0x1101, 0x1161, 0x11BD] }, +{ source: [0xAE63], NFC: [0xAE63], NFD: [0x1101, 0x1161, 0x11BE], NFKC: [0xAE63], NFKD: [0x1101, 0x1161, 0x11BE] }, +{ source: [0xAE64], NFC: [0xAE64], NFD: [0x1101, 0x1161, 0x11BF], NFKC: [0xAE64], NFKD: [0x1101, 0x1161, 0x11BF] }, +{ source: [0xAE65], NFC: [0xAE65], NFD: [0x1101, 0x1161, 0x11C0], NFKC: [0xAE65], NFKD: [0x1101, 0x1161, 0x11C0] }, +{ source: [0xAE66], NFC: [0xAE66], NFD: [0x1101, 0x1161, 0x11C1], NFKC: [0xAE66], NFKD: [0x1101, 0x1161, 0x11C1] }, +{ source: [0xAE67], NFC: [0xAE67], NFD: [0x1101, 0x1161, 0x11C2], NFKC: [0xAE67], NFKD: [0x1101, 0x1161, 0x11C2] }, +{ source: [0xAE68], NFC: [0xAE68], NFD: [0x1101, 0x1162], NFKC: [0xAE68], NFKD: [0x1101, 0x1162] }, +{ source: [0xAE69], NFC: [0xAE69], NFD: [0x1101, 0x1162, 0x11A8], NFKC: [0xAE69], NFKD: [0x1101, 0x1162, 0x11A8] }, +{ source: [0xAE6A], NFC: [0xAE6A], NFD: [0x1101, 0x1162, 0x11A9], NFKC: [0xAE6A], NFKD: [0x1101, 0x1162, 0x11A9] }, +{ source: [0xAE6B], NFC: [0xAE6B], NFD: [0x1101, 0x1162, 0x11AA], NFKC: [0xAE6B], NFKD: [0x1101, 0x1162, 0x11AA] }, +{ source: [0xAE6C], NFC: [0xAE6C], NFD: [0x1101, 0x1162, 0x11AB], NFKC: [0xAE6C], NFKD: [0x1101, 0x1162, 0x11AB] }, +{ source: [0xAE6D], NFC: [0xAE6D], NFD: [0x1101, 0x1162, 0x11AC], NFKC: [0xAE6D], NFKD: [0x1101, 0x1162, 0x11AC] }, +{ source: [0xAE6E], NFC: [0xAE6E], NFD: [0x1101, 0x1162, 0x11AD], NFKC: [0xAE6E], NFKD: [0x1101, 0x1162, 0x11AD] }, +{ source: [0xAE6F], NFC: [0xAE6F], NFD: [0x1101, 0x1162, 0x11AE], NFKC: [0xAE6F], NFKD: [0x1101, 0x1162, 0x11AE] }, +{ source: [0xAE70], NFC: [0xAE70], NFD: [0x1101, 0x1162, 0x11AF], NFKC: [0xAE70], NFKD: [0x1101, 0x1162, 0x11AF] }, +{ source: [0xAE71], NFC: [0xAE71], NFD: [0x1101, 0x1162, 0x11B0], NFKC: [0xAE71], NFKD: [0x1101, 0x1162, 0x11B0] }, +{ source: [0xAE72], NFC: [0xAE72], NFD: [0x1101, 0x1162, 0x11B1], NFKC: [0xAE72], NFKD: [0x1101, 0x1162, 0x11B1] }, +{ source: [0xAE73], NFC: [0xAE73], NFD: [0x1101, 0x1162, 0x11B2], NFKC: [0xAE73], NFKD: [0x1101, 0x1162, 0x11B2] }, +{ source: [0xAE74], NFC: [0xAE74], NFD: [0x1101, 0x1162, 0x11B3], NFKC: [0xAE74], NFKD: [0x1101, 0x1162, 0x11B3] }, +{ source: [0xAE75], NFC: [0xAE75], NFD: [0x1101, 0x1162, 0x11B4], NFKC: [0xAE75], NFKD: [0x1101, 0x1162, 0x11B4] }, +{ source: [0xAE76], NFC: [0xAE76], NFD: [0x1101, 0x1162, 0x11B5], NFKC: [0xAE76], NFKD: [0x1101, 0x1162, 0x11B5] }, +{ source: [0xAE77], NFC: [0xAE77], NFD: [0x1101, 0x1162, 0x11B6], NFKC: [0xAE77], NFKD: [0x1101, 0x1162, 0x11B6] }, +{ source: [0xAE78], NFC: [0xAE78], NFD: [0x1101, 0x1162, 0x11B7], NFKC: [0xAE78], NFKD: [0x1101, 0x1162, 0x11B7] }, +{ source: [0xAE79], NFC: [0xAE79], NFD: [0x1101, 0x1162, 0x11B8], NFKC: [0xAE79], NFKD: [0x1101, 0x1162, 0x11B8] }, +{ source: [0xAE7A], NFC: [0xAE7A], NFD: [0x1101, 0x1162, 0x11B9], NFKC: [0xAE7A], NFKD: [0x1101, 0x1162, 0x11B9] }, +{ source: [0xAE7B], NFC: [0xAE7B], NFD: [0x1101, 0x1162, 0x11BA], NFKC: [0xAE7B], NFKD: [0x1101, 0x1162, 0x11BA] }, +{ source: [0xAE7C], NFC: [0xAE7C], NFD: [0x1101, 0x1162, 0x11BB], NFKC: [0xAE7C], NFKD: [0x1101, 0x1162, 0x11BB] }, +{ source: [0xAE7D], NFC: [0xAE7D], NFD: [0x1101, 0x1162, 0x11BC], NFKC: [0xAE7D], NFKD: [0x1101, 0x1162, 0x11BC] }, +{ source: [0xAE7E], NFC: [0xAE7E], NFD: [0x1101, 0x1162, 0x11BD], NFKC: [0xAE7E], NFKD: [0x1101, 0x1162, 0x11BD] }, +{ source: [0xAE7F], NFC: [0xAE7F], NFD: [0x1101, 0x1162, 0x11BE], NFKC: [0xAE7F], NFKD: [0x1101, 0x1162, 0x11BE] }, +{ source: [0xAE80], NFC: [0xAE80], NFD: [0x1101, 0x1162, 0x11BF], NFKC: [0xAE80], NFKD: [0x1101, 0x1162, 0x11BF] }, +{ source: [0xAE81], NFC: [0xAE81], NFD: [0x1101, 0x1162, 0x11C0], NFKC: [0xAE81], NFKD: [0x1101, 0x1162, 0x11C0] }, +{ source: [0xAE82], NFC: [0xAE82], NFD: [0x1101, 0x1162, 0x11C1], NFKC: [0xAE82], NFKD: [0x1101, 0x1162, 0x11C1] }, +{ source: [0xAE83], NFC: [0xAE83], NFD: [0x1101, 0x1162, 0x11C2], NFKC: [0xAE83], NFKD: [0x1101, 0x1162, 0x11C2] }, +{ source: [0xAE84], NFC: [0xAE84], NFD: [0x1101, 0x1163], NFKC: [0xAE84], NFKD: [0x1101, 0x1163] }, +{ source: [0xAE85], NFC: [0xAE85], NFD: [0x1101, 0x1163, 0x11A8], NFKC: [0xAE85], NFKD: [0x1101, 0x1163, 0x11A8] }, +{ source: [0xAE86], NFC: [0xAE86], NFD: [0x1101, 0x1163, 0x11A9], NFKC: [0xAE86], NFKD: [0x1101, 0x1163, 0x11A9] }, +{ source: [0xAE87], NFC: [0xAE87], NFD: [0x1101, 0x1163, 0x11AA], NFKC: [0xAE87], NFKD: [0x1101, 0x1163, 0x11AA] }, +{ source: [0xAE88], NFC: [0xAE88], NFD: [0x1101, 0x1163, 0x11AB], NFKC: [0xAE88], NFKD: [0x1101, 0x1163, 0x11AB] }, +{ source: [0xAE89], NFC: [0xAE89], NFD: [0x1101, 0x1163, 0x11AC], NFKC: [0xAE89], NFKD: [0x1101, 0x1163, 0x11AC] }, +{ source: [0xAE8A], NFC: [0xAE8A], NFD: [0x1101, 0x1163, 0x11AD], NFKC: [0xAE8A], NFKD: [0x1101, 0x1163, 0x11AD] }, +{ source: [0xAE8B], NFC: [0xAE8B], NFD: [0x1101, 0x1163, 0x11AE], NFKC: [0xAE8B], NFKD: [0x1101, 0x1163, 0x11AE] }, +{ source: [0xAE8C], NFC: [0xAE8C], NFD: [0x1101, 0x1163, 0x11AF], NFKC: [0xAE8C], NFKD: [0x1101, 0x1163, 0x11AF] }, +{ source: [0xAE8D], NFC: [0xAE8D], NFD: [0x1101, 0x1163, 0x11B0], NFKC: [0xAE8D], NFKD: [0x1101, 0x1163, 0x11B0] }, +{ source: [0xAE8E], NFC: [0xAE8E], NFD: [0x1101, 0x1163, 0x11B1], NFKC: [0xAE8E], NFKD: [0x1101, 0x1163, 0x11B1] }, +{ source: [0xAE8F], NFC: [0xAE8F], NFD: [0x1101, 0x1163, 0x11B2], NFKC: [0xAE8F], NFKD: [0x1101, 0x1163, 0x11B2] }, +{ source: [0xAE90], NFC: [0xAE90], NFD: [0x1101, 0x1163, 0x11B3], NFKC: [0xAE90], NFKD: [0x1101, 0x1163, 0x11B3] }, +{ source: [0xAE91], NFC: [0xAE91], NFD: [0x1101, 0x1163, 0x11B4], NFKC: [0xAE91], NFKD: [0x1101, 0x1163, 0x11B4] }, +{ source: [0xAE92], NFC: [0xAE92], NFD: [0x1101, 0x1163, 0x11B5], NFKC: [0xAE92], NFKD: [0x1101, 0x1163, 0x11B5] }, +{ source: [0xAE93], NFC: [0xAE93], NFD: [0x1101, 0x1163, 0x11B6], NFKC: [0xAE93], NFKD: [0x1101, 0x1163, 0x11B6] }, +{ source: [0xAE94], NFC: [0xAE94], NFD: [0x1101, 0x1163, 0x11B7], NFKC: [0xAE94], NFKD: [0x1101, 0x1163, 0x11B7] }, +{ source: [0xAE95], NFC: [0xAE95], NFD: [0x1101, 0x1163, 0x11B8], NFKC: [0xAE95], NFKD: [0x1101, 0x1163, 0x11B8] }, +{ source: [0xAE96], NFC: [0xAE96], NFD: [0x1101, 0x1163, 0x11B9], NFKC: [0xAE96], NFKD: [0x1101, 0x1163, 0x11B9] }, +{ source: [0xAE97], NFC: [0xAE97], NFD: [0x1101, 0x1163, 0x11BA], NFKC: [0xAE97], NFKD: [0x1101, 0x1163, 0x11BA] }, +{ source: [0xAE98], NFC: [0xAE98], NFD: [0x1101, 0x1163, 0x11BB], NFKC: [0xAE98], NFKD: [0x1101, 0x1163, 0x11BB] }, +{ source: [0xAE99], NFC: [0xAE99], NFD: [0x1101, 0x1163, 0x11BC], NFKC: [0xAE99], NFKD: [0x1101, 0x1163, 0x11BC] }, +{ source: [0xAE9A], NFC: [0xAE9A], NFD: [0x1101, 0x1163, 0x11BD], NFKC: [0xAE9A], NFKD: [0x1101, 0x1163, 0x11BD] }, +{ source: [0xAE9B], NFC: [0xAE9B], NFD: [0x1101, 0x1163, 0x11BE], NFKC: [0xAE9B], NFKD: [0x1101, 0x1163, 0x11BE] }, +{ source: [0xAE9C], NFC: [0xAE9C], NFD: [0x1101, 0x1163, 0x11BF], NFKC: [0xAE9C], NFKD: [0x1101, 0x1163, 0x11BF] }, +{ source: [0xAE9D], NFC: [0xAE9D], NFD: [0x1101, 0x1163, 0x11C0], NFKC: [0xAE9D], NFKD: [0x1101, 0x1163, 0x11C0] }, +{ source: [0xAE9E], NFC: [0xAE9E], NFD: [0x1101, 0x1163, 0x11C1], NFKC: [0xAE9E], NFKD: [0x1101, 0x1163, 0x11C1] }, +{ source: [0xAE9F], NFC: [0xAE9F], NFD: [0x1101, 0x1163, 0x11C2], NFKC: [0xAE9F], NFKD: [0x1101, 0x1163, 0x11C2] }, +{ source: [0xAEA0], NFC: [0xAEA0], NFD: [0x1101, 0x1164], NFKC: [0xAEA0], NFKD: [0x1101, 0x1164] }, +{ source: [0xAEA1], NFC: [0xAEA1], NFD: [0x1101, 0x1164, 0x11A8], NFKC: [0xAEA1], NFKD: [0x1101, 0x1164, 0x11A8] }, +{ source: [0xAEA2], NFC: [0xAEA2], NFD: [0x1101, 0x1164, 0x11A9], NFKC: [0xAEA2], NFKD: [0x1101, 0x1164, 0x11A9] }, +{ source: [0xAEA3], NFC: [0xAEA3], NFD: [0x1101, 0x1164, 0x11AA], NFKC: [0xAEA3], NFKD: [0x1101, 0x1164, 0x11AA] }, +{ source: [0xAEA4], NFC: [0xAEA4], NFD: [0x1101, 0x1164, 0x11AB], NFKC: [0xAEA4], NFKD: [0x1101, 0x1164, 0x11AB] }, +{ source: [0xAEA5], NFC: [0xAEA5], NFD: [0x1101, 0x1164, 0x11AC], NFKC: [0xAEA5], NFKD: [0x1101, 0x1164, 0x11AC] }, +{ source: [0xAEA6], NFC: [0xAEA6], NFD: [0x1101, 0x1164, 0x11AD], NFKC: [0xAEA6], NFKD: [0x1101, 0x1164, 0x11AD] }, +{ source: [0xAEA7], NFC: [0xAEA7], NFD: [0x1101, 0x1164, 0x11AE], NFKC: [0xAEA7], NFKD: [0x1101, 0x1164, 0x11AE] }, +{ source: [0xAEA8], NFC: [0xAEA8], NFD: [0x1101, 0x1164, 0x11AF], NFKC: [0xAEA8], NFKD: [0x1101, 0x1164, 0x11AF] }, +{ source: [0xAEA9], NFC: [0xAEA9], NFD: [0x1101, 0x1164, 0x11B0], NFKC: [0xAEA9], NFKD: [0x1101, 0x1164, 0x11B0] }, +{ source: [0xAEAA], NFC: [0xAEAA], NFD: [0x1101, 0x1164, 0x11B1], NFKC: [0xAEAA], NFKD: [0x1101, 0x1164, 0x11B1] }, +{ source: [0xAEAB], NFC: [0xAEAB], NFD: [0x1101, 0x1164, 0x11B2], NFKC: [0xAEAB], NFKD: [0x1101, 0x1164, 0x11B2] }, +{ source: [0xAEAC], NFC: [0xAEAC], NFD: [0x1101, 0x1164, 0x11B3], NFKC: [0xAEAC], NFKD: [0x1101, 0x1164, 0x11B3] }, +{ source: [0xAEAD], NFC: [0xAEAD], NFD: [0x1101, 0x1164, 0x11B4], NFKC: [0xAEAD], NFKD: [0x1101, 0x1164, 0x11B4] }, +{ source: [0xAEAE], NFC: [0xAEAE], NFD: [0x1101, 0x1164, 0x11B5], NFKC: [0xAEAE], NFKD: [0x1101, 0x1164, 0x11B5] }, +{ source: [0xAEAF], NFC: [0xAEAF], NFD: [0x1101, 0x1164, 0x11B6], NFKC: [0xAEAF], NFKD: [0x1101, 0x1164, 0x11B6] }, +{ source: [0xAEB0], NFC: [0xAEB0], NFD: [0x1101, 0x1164, 0x11B7], NFKC: [0xAEB0], NFKD: [0x1101, 0x1164, 0x11B7] }, +{ source: [0xAEB1], NFC: [0xAEB1], NFD: [0x1101, 0x1164, 0x11B8], NFKC: [0xAEB1], NFKD: [0x1101, 0x1164, 0x11B8] }, +{ source: [0xAEB2], NFC: [0xAEB2], NFD: [0x1101, 0x1164, 0x11B9], NFKC: [0xAEB2], NFKD: [0x1101, 0x1164, 0x11B9] }, +{ source: [0xAEB3], NFC: [0xAEB3], NFD: [0x1101, 0x1164, 0x11BA], NFKC: [0xAEB3], NFKD: [0x1101, 0x1164, 0x11BA] }, +{ source: [0xAEB4], NFC: [0xAEB4], NFD: [0x1101, 0x1164, 0x11BB], NFKC: [0xAEB4], NFKD: [0x1101, 0x1164, 0x11BB] }, +{ source: [0xAEB5], NFC: [0xAEB5], NFD: [0x1101, 0x1164, 0x11BC], NFKC: [0xAEB5], NFKD: [0x1101, 0x1164, 0x11BC] }, +{ source: [0xAEB6], NFC: [0xAEB6], NFD: [0x1101, 0x1164, 0x11BD], NFKC: [0xAEB6], NFKD: [0x1101, 0x1164, 0x11BD] }, +{ source: [0xAEB7], NFC: [0xAEB7], NFD: [0x1101, 0x1164, 0x11BE], NFKC: [0xAEB7], NFKD: [0x1101, 0x1164, 0x11BE] }, +{ source: [0xAEB8], NFC: [0xAEB8], NFD: [0x1101, 0x1164, 0x11BF], NFKC: [0xAEB8], NFKD: [0x1101, 0x1164, 0x11BF] }, +{ source: [0xAEB9], NFC: [0xAEB9], NFD: [0x1101, 0x1164, 0x11C0], NFKC: [0xAEB9], NFKD: [0x1101, 0x1164, 0x11C0] }, +{ source: [0xAEBA], NFC: [0xAEBA], NFD: [0x1101, 0x1164, 0x11C1], NFKC: [0xAEBA], NFKD: [0x1101, 0x1164, 0x11C1] }, +{ source: [0xAEBB], NFC: [0xAEBB], NFD: [0x1101, 0x1164, 0x11C2], NFKC: [0xAEBB], NFKD: [0x1101, 0x1164, 0x11C2] }, +{ source: [0xAEBC], NFC: [0xAEBC], NFD: [0x1101, 0x1165], NFKC: [0xAEBC], NFKD: [0x1101, 0x1165] }, +{ source: [0xAEBD], NFC: [0xAEBD], NFD: [0x1101, 0x1165, 0x11A8], NFKC: [0xAEBD], NFKD: [0x1101, 0x1165, 0x11A8] }, +{ source: [0xAEBE], NFC: [0xAEBE], NFD: [0x1101, 0x1165, 0x11A9], NFKC: [0xAEBE], NFKD: [0x1101, 0x1165, 0x11A9] }, +{ source: [0xAEBF], NFC: [0xAEBF], NFD: [0x1101, 0x1165, 0x11AA], NFKC: [0xAEBF], NFKD: [0x1101, 0x1165, 0x11AA] }, +{ source: [0xAEC0], NFC: [0xAEC0], NFD: [0x1101, 0x1165, 0x11AB], NFKC: [0xAEC0], NFKD: [0x1101, 0x1165, 0x11AB] }, +{ source: [0xAEC1], NFC: [0xAEC1], NFD: [0x1101, 0x1165, 0x11AC], NFKC: [0xAEC1], NFKD: [0x1101, 0x1165, 0x11AC] }, +{ source: [0xAEC2], NFC: [0xAEC2], NFD: [0x1101, 0x1165, 0x11AD], NFKC: [0xAEC2], NFKD: [0x1101, 0x1165, 0x11AD] }, +{ source: [0xAEC3], NFC: [0xAEC3], NFD: [0x1101, 0x1165, 0x11AE], NFKC: [0xAEC3], NFKD: [0x1101, 0x1165, 0x11AE] }, +{ source: [0xAEC4], NFC: [0xAEC4], NFD: [0x1101, 0x1165, 0x11AF], NFKC: [0xAEC4], NFKD: [0x1101, 0x1165, 0x11AF] }, +{ source: [0xAEC5], NFC: [0xAEC5], NFD: [0x1101, 0x1165, 0x11B0], NFKC: [0xAEC5], NFKD: [0x1101, 0x1165, 0x11B0] }, +{ source: [0xAEC6], NFC: [0xAEC6], NFD: [0x1101, 0x1165, 0x11B1], NFKC: [0xAEC6], NFKD: [0x1101, 0x1165, 0x11B1] }, +{ source: [0xAEC7], NFC: [0xAEC7], NFD: [0x1101, 0x1165, 0x11B2], NFKC: [0xAEC7], NFKD: [0x1101, 0x1165, 0x11B2] }, +{ source: [0xAEC8], NFC: [0xAEC8], NFD: [0x1101, 0x1165, 0x11B3], NFKC: [0xAEC8], NFKD: [0x1101, 0x1165, 0x11B3] }, +{ source: [0xAEC9], NFC: [0xAEC9], NFD: [0x1101, 0x1165, 0x11B4], NFKC: [0xAEC9], NFKD: [0x1101, 0x1165, 0x11B4] }, +{ source: [0xAECA], NFC: [0xAECA], NFD: [0x1101, 0x1165, 0x11B5], NFKC: [0xAECA], NFKD: [0x1101, 0x1165, 0x11B5] }, +{ source: [0xAECB], NFC: [0xAECB], NFD: [0x1101, 0x1165, 0x11B6], NFKC: [0xAECB], NFKD: [0x1101, 0x1165, 0x11B6] }, +{ source: [0xAECC], NFC: [0xAECC], NFD: [0x1101, 0x1165, 0x11B7], NFKC: [0xAECC], NFKD: [0x1101, 0x1165, 0x11B7] }, +{ source: [0xAECD], NFC: [0xAECD], NFD: [0x1101, 0x1165, 0x11B8], NFKC: [0xAECD], NFKD: [0x1101, 0x1165, 0x11B8] }, +{ source: [0xAECE], NFC: [0xAECE], NFD: [0x1101, 0x1165, 0x11B9], NFKC: [0xAECE], NFKD: [0x1101, 0x1165, 0x11B9] }, +{ source: [0xAECF], NFC: [0xAECF], NFD: [0x1101, 0x1165, 0x11BA], NFKC: [0xAECF], NFKD: [0x1101, 0x1165, 0x11BA] }, +{ source: [0xAED0], NFC: [0xAED0], NFD: [0x1101, 0x1165, 0x11BB], NFKC: [0xAED0], NFKD: [0x1101, 0x1165, 0x11BB] }, +{ source: [0xAED1], NFC: [0xAED1], NFD: [0x1101, 0x1165, 0x11BC], NFKC: [0xAED1], NFKD: [0x1101, 0x1165, 0x11BC] }, +{ source: [0xAED2], NFC: [0xAED2], NFD: [0x1101, 0x1165, 0x11BD], NFKC: [0xAED2], NFKD: [0x1101, 0x1165, 0x11BD] }, +{ source: [0xAED3], NFC: [0xAED3], NFD: [0x1101, 0x1165, 0x11BE], NFKC: [0xAED3], NFKD: [0x1101, 0x1165, 0x11BE] }, +{ source: [0xAED4], NFC: [0xAED4], NFD: [0x1101, 0x1165, 0x11BF], NFKC: [0xAED4], NFKD: [0x1101, 0x1165, 0x11BF] }, +{ source: [0xAED5], NFC: [0xAED5], NFD: [0x1101, 0x1165, 0x11C0], NFKC: [0xAED5], NFKD: [0x1101, 0x1165, 0x11C0] }, +{ source: [0xAED6], NFC: [0xAED6], NFD: [0x1101, 0x1165, 0x11C1], NFKC: [0xAED6], NFKD: [0x1101, 0x1165, 0x11C1] }, +{ source: [0xAED7], NFC: [0xAED7], NFD: [0x1101, 0x1165, 0x11C2], NFKC: [0xAED7], NFKD: [0x1101, 0x1165, 0x11C2] }, +{ source: [0xAED8], NFC: [0xAED8], NFD: [0x1101, 0x1166], NFKC: [0xAED8], NFKD: [0x1101, 0x1166] }, +{ source: [0xAED9], NFC: [0xAED9], NFD: [0x1101, 0x1166, 0x11A8], NFKC: [0xAED9], NFKD: [0x1101, 0x1166, 0x11A8] }, +{ source: [0xAEDA], NFC: [0xAEDA], NFD: [0x1101, 0x1166, 0x11A9], NFKC: [0xAEDA], NFKD: [0x1101, 0x1166, 0x11A9] }, +{ source: [0xAEDB], NFC: [0xAEDB], NFD: [0x1101, 0x1166, 0x11AA], NFKC: [0xAEDB], NFKD: [0x1101, 0x1166, 0x11AA] }, +{ source: [0xAEDC], NFC: [0xAEDC], NFD: [0x1101, 0x1166, 0x11AB], NFKC: [0xAEDC], NFKD: [0x1101, 0x1166, 0x11AB] }, +{ source: [0xAEDD], NFC: [0xAEDD], NFD: [0x1101, 0x1166, 0x11AC], NFKC: [0xAEDD], NFKD: [0x1101, 0x1166, 0x11AC] }, +{ source: [0xAEDE], NFC: [0xAEDE], NFD: [0x1101, 0x1166, 0x11AD], NFKC: [0xAEDE], NFKD: [0x1101, 0x1166, 0x11AD] }, +{ source: [0xAEDF], NFC: [0xAEDF], NFD: [0x1101, 0x1166, 0x11AE], NFKC: [0xAEDF], NFKD: [0x1101, 0x1166, 0x11AE] }, +{ source: [0xAEE0], NFC: [0xAEE0], NFD: [0x1101, 0x1166, 0x11AF], NFKC: [0xAEE0], NFKD: [0x1101, 0x1166, 0x11AF] }, +{ source: [0xAEE1], NFC: [0xAEE1], NFD: [0x1101, 0x1166, 0x11B0], NFKC: [0xAEE1], NFKD: [0x1101, 0x1166, 0x11B0] }, +{ source: [0xAEE2], NFC: [0xAEE2], NFD: [0x1101, 0x1166, 0x11B1], NFKC: [0xAEE2], NFKD: [0x1101, 0x1166, 0x11B1] }, +{ source: [0xAEE3], NFC: [0xAEE3], NFD: [0x1101, 0x1166, 0x11B2], NFKC: [0xAEE3], NFKD: [0x1101, 0x1166, 0x11B2] }, +{ source: [0xAEE4], NFC: [0xAEE4], NFD: [0x1101, 0x1166, 0x11B3], NFKC: [0xAEE4], NFKD: [0x1101, 0x1166, 0x11B3] }, +{ source: [0xAEE5], NFC: [0xAEE5], NFD: [0x1101, 0x1166, 0x11B4], NFKC: [0xAEE5], NFKD: [0x1101, 0x1166, 0x11B4] }, +{ source: [0xAEE6], NFC: [0xAEE6], NFD: [0x1101, 0x1166, 0x11B5], NFKC: [0xAEE6], NFKD: [0x1101, 0x1166, 0x11B5] }, +{ source: [0xAEE7], NFC: [0xAEE7], NFD: [0x1101, 0x1166, 0x11B6], NFKC: [0xAEE7], NFKD: [0x1101, 0x1166, 0x11B6] }, +{ source: [0xAEE8], NFC: [0xAEE8], NFD: [0x1101, 0x1166, 0x11B7], NFKC: [0xAEE8], NFKD: [0x1101, 0x1166, 0x11B7] }, +{ source: [0xAEE9], NFC: [0xAEE9], NFD: [0x1101, 0x1166, 0x11B8], NFKC: [0xAEE9], NFKD: [0x1101, 0x1166, 0x11B8] }, +{ source: [0xAEEA], NFC: [0xAEEA], NFD: [0x1101, 0x1166, 0x11B9], NFKC: [0xAEEA], NFKD: [0x1101, 0x1166, 0x11B9] }, +{ source: [0xAEEB], NFC: [0xAEEB], NFD: [0x1101, 0x1166, 0x11BA], NFKC: [0xAEEB], NFKD: [0x1101, 0x1166, 0x11BA] }, +{ source: [0xAEEC], NFC: [0xAEEC], NFD: [0x1101, 0x1166, 0x11BB], NFKC: [0xAEEC], NFKD: [0x1101, 0x1166, 0x11BB] }, +{ source: [0xAEED], NFC: [0xAEED], NFD: [0x1101, 0x1166, 0x11BC], NFKC: [0xAEED], NFKD: [0x1101, 0x1166, 0x11BC] }, +{ source: [0xAEEE], NFC: [0xAEEE], NFD: [0x1101, 0x1166, 0x11BD], NFKC: [0xAEEE], NFKD: [0x1101, 0x1166, 0x11BD] }, +{ source: [0xAEEF], NFC: [0xAEEF], NFD: [0x1101, 0x1166, 0x11BE], NFKC: [0xAEEF], NFKD: [0x1101, 0x1166, 0x11BE] }, +{ source: [0xAEF0], NFC: [0xAEF0], NFD: [0x1101, 0x1166, 0x11BF], NFKC: [0xAEF0], NFKD: [0x1101, 0x1166, 0x11BF] }, +{ source: [0xAEF1], NFC: [0xAEF1], NFD: [0x1101, 0x1166, 0x11C0], NFKC: [0xAEF1], NFKD: [0x1101, 0x1166, 0x11C0] }, +{ source: [0xAEF2], NFC: [0xAEF2], NFD: [0x1101, 0x1166, 0x11C1], NFKC: [0xAEF2], NFKD: [0x1101, 0x1166, 0x11C1] }, +{ source: [0xAEF3], NFC: [0xAEF3], NFD: [0x1101, 0x1166, 0x11C2], NFKC: [0xAEF3], NFKD: [0x1101, 0x1166, 0x11C2] }, +{ source: [0xAEF4], NFC: [0xAEF4], NFD: [0x1101, 0x1167], NFKC: [0xAEF4], NFKD: [0x1101, 0x1167] }, +{ source: [0xAEF5], NFC: [0xAEF5], NFD: [0x1101, 0x1167, 0x11A8], NFKC: [0xAEF5], NFKD: [0x1101, 0x1167, 0x11A8] }, +{ source: [0xAEF6], NFC: [0xAEF6], NFD: [0x1101, 0x1167, 0x11A9], NFKC: [0xAEF6], NFKD: [0x1101, 0x1167, 0x11A9] }, +{ source: [0xAEF7], NFC: [0xAEF7], NFD: [0x1101, 0x1167, 0x11AA], NFKC: [0xAEF7], NFKD: [0x1101, 0x1167, 0x11AA] }, +{ source: [0xAEF8], NFC: [0xAEF8], NFD: [0x1101, 0x1167, 0x11AB], NFKC: [0xAEF8], NFKD: [0x1101, 0x1167, 0x11AB] }, +{ source: [0xAEF9], NFC: [0xAEF9], NFD: [0x1101, 0x1167, 0x11AC], NFKC: [0xAEF9], NFKD: [0x1101, 0x1167, 0x11AC] }, +{ source: [0xAEFA], NFC: [0xAEFA], NFD: [0x1101, 0x1167, 0x11AD], NFKC: [0xAEFA], NFKD: [0x1101, 0x1167, 0x11AD] }, +{ source: [0xAEFB], NFC: [0xAEFB], NFD: [0x1101, 0x1167, 0x11AE], NFKC: [0xAEFB], NFKD: [0x1101, 0x1167, 0x11AE] }, +{ source: [0xAEFC], NFC: [0xAEFC], NFD: [0x1101, 0x1167, 0x11AF], NFKC: [0xAEFC], NFKD: [0x1101, 0x1167, 0x11AF] }, +{ source: [0xAEFD], NFC: [0xAEFD], NFD: [0x1101, 0x1167, 0x11B0], NFKC: [0xAEFD], NFKD: [0x1101, 0x1167, 0x11B0] }, +{ source: [0xAEFE], NFC: [0xAEFE], NFD: [0x1101, 0x1167, 0x11B1], NFKC: [0xAEFE], NFKD: [0x1101, 0x1167, 0x11B1] }, +{ source: [0xAEFF], NFC: [0xAEFF], NFD: [0x1101, 0x1167, 0x11B2], NFKC: [0xAEFF], NFKD: [0x1101, 0x1167, 0x11B2] }, +{ source: [0xAF00], NFC: [0xAF00], NFD: [0x1101, 0x1167, 0x11B3], NFKC: [0xAF00], NFKD: [0x1101, 0x1167, 0x11B3] }, +{ source: [0xAF01], NFC: [0xAF01], NFD: [0x1101, 0x1167, 0x11B4], NFKC: [0xAF01], NFKD: [0x1101, 0x1167, 0x11B4] }, +{ source: [0xAF02], NFC: [0xAF02], NFD: [0x1101, 0x1167, 0x11B5], NFKC: [0xAF02], NFKD: [0x1101, 0x1167, 0x11B5] }, +{ source: [0xAF03], NFC: [0xAF03], NFD: [0x1101, 0x1167, 0x11B6], NFKC: [0xAF03], NFKD: [0x1101, 0x1167, 0x11B6] }, +{ source: [0xAF04], NFC: [0xAF04], NFD: [0x1101, 0x1167, 0x11B7], NFKC: [0xAF04], NFKD: [0x1101, 0x1167, 0x11B7] }, +{ source: [0xAF05], NFC: [0xAF05], NFD: [0x1101, 0x1167, 0x11B8], NFKC: [0xAF05], NFKD: [0x1101, 0x1167, 0x11B8] }, +{ source: [0xAF06], NFC: [0xAF06], NFD: [0x1101, 0x1167, 0x11B9], NFKC: [0xAF06], NFKD: [0x1101, 0x1167, 0x11B9] }, +{ source: [0xAF07], NFC: [0xAF07], NFD: [0x1101, 0x1167, 0x11BA], NFKC: [0xAF07], NFKD: [0x1101, 0x1167, 0x11BA] }, +{ source: [0xAF08], NFC: [0xAF08], NFD: [0x1101, 0x1167, 0x11BB], NFKC: [0xAF08], NFKD: [0x1101, 0x1167, 0x11BB] }, +{ source: [0xAF09], NFC: [0xAF09], NFD: [0x1101, 0x1167, 0x11BC], NFKC: [0xAF09], NFKD: [0x1101, 0x1167, 0x11BC] }, +{ source: [0xAF0A], NFC: [0xAF0A], NFD: [0x1101, 0x1167, 0x11BD], NFKC: [0xAF0A], NFKD: [0x1101, 0x1167, 0x11BD] }, +{ source: [0xAF0B], NFC: [0xAF0B], NFD: [0x1101, 0x1167, 0x11BE], NFKC: [0xAF0B], NFKD: [0x1101, 0x1167, 0x11BE] }, +{ source: [0xAF0C], NFC: [0xAF0C], NFD: [0x1101, 0x1167, 0x11BF], NFKC: [0xAF0C], NFKD: [0x1101, 0x1167, 0x11BF] }, +{ source: [0xAF0D], NFC: [0xAF0D], NFD: [0x1101, 0x1167, 0x11C0], NFKC: [0xAF0D], NFKD: [0x1101, 0x1167, 0x11C0] }, +{ source: [0xAF0E], NFC: [0xAF0E], NFD: [0x1101, 0x1167, 0x11C1], NFKC: [0xAF0E], NFKD: [0x1101, 0x1167, 0x11C1] }, +{ source: [0xAF0F], NFC: [0xAF0F], NFD: [0x1101, 0x1167, 0x11C2], NFKC: [0xAF0F], NFKD: [0x1101, 0x1167, 0x11C2] }, +{ source: [0xAF10], NFC: [0xAF10], NFD: [0x1101, 0x1168], NFKC: [0xAF10], NFKD: [0x1101, 0x1168] }, +{ source: [0xAF11], NFC: [0xAF11], NFD: [0x1101, 0x1168, 0x11A8], NFKC: [0xAF11], NFKD: [0x1101, 0x1168, 0x11A8] }, +{ source: [0xAF12], NFC: [0xAF12], NFD: [0x1101, 0x1168, 0x11A9], NFKC: [0xAF12], NFKD: [0x1101, 0x1168, 0x11A9] }, +{ source: [0xAF13], NFC: [0xAF13], NFD: [0x1101, 0x1168, 0x11AA], NFKC: [0xAF13], NFKD: [0x1101, 0x1168, 0x11AA] }, +{ source: [0xAF14], NFC: [0xAF14], NFD: [0x1101, 0x1168, 0x11AB], NFKC: [0xAF14], NFKD: [0x1101, 0x1168, 0x11AB] }, +{ source: [0xAF15], NFC: [0xAF15], NFD: [0x1101, 0x1168, 0x11AC], NFKC: [0xAF15], NFKD: [0x1101, 0x1168, 0x11AC] }, +{ source: [0xAF16], NFC: [0xAF16], NFD: [0x1101, 0x1168, 0x11AD], NFKC: [0xAF16], NFKD: [0x1101, 0x1168, 0x11AD] }, +{ source: [0xAF17], NFC: [0xAF17], NFD: [0x1101, 0x1168, 0x11AE], NFKC: [0xAF17], NFKD: [0x1101, 0x1168, 0x11AE] }, +{ source: [0xAF18], NFC: [0xAF18], NFD: [0x1101, 0x1168, 0x11AF], NFKC: [0xAF18], NFKD: [0x1101, 0x1168, 0x11AF] }, +{ source: [0xAF19], NFC: [0xAF19], NFD: [0x1101, 0x1168, 0x11B0], NFKC: [0xAF19], NFKD: [0x1101, 0x1168, 0x11B0] }, +{ source: [0xAF1A], NFC: [0xAF1A], NFD: [0x1101, 0x1168, 0x11B1], NFKC: [0xAF1A], NFKD: [0x1101, 0x1168, 0x11B1] }, +{ source: [0xAF1B], NFC: [0xAF1B], NFD: [0x1101, 0x1168, 0x11B2], NFKC: [0xAF1B], NFKD: [0x1101, 0x1168, 0x11B2] }, +{ source: [0xAF1C], NFC: [0xAF1C], NFD: [0x1101, 0x1168, 0x11B3], NFKC: [0xAF1C], NFKD: [0x1101, 0x1168, 0x11B3] }, +{ source: [0xAF1D], NFC: [0xAF1D], NFD: [0x1101, 0x1168, 0x11B4], NFKC: [0xAF1D], NFKD: [0x1101, 0x1168, 0x11B4] }, +{ source: [0xAF1E], NFC: [0xAF1E], NFD: [0x1101, 0x1168, 0x11B5], NFKC: [0xAF1E], NFKD: [0x1101, 0x1168, 0x11B5] }, +{ source: [0xAF1F], NFC: [0xAF1F], NFD: [0x1101, 0x1168, 0x11B6], NFKC: [0xAF1F], NFKD: [0x1101, 0x1168, 0x11B6] }, +{ source: [0xAF20], NFC: [0xAF20], NFD: [0x1101, 0x1168, 0x11B7], NFKC: [0xAF20], NFKD: [0x1101, 0x1168, 0x11B7] }, +{ source: [0xAF21], NFC: [0xAF21], NFD: [0x1101, 0x1168, 0x11B8], NFKC: [0xAF21], NFKD: [0x1101, 0x1168, 0x11B8] }, +{ source: [0xAF22], NFC: [0xAF22], NFD: [0x1101, 0x1168, 0x11B9], NFKC: [0xAF22], NFKD: [0x1101, 0x1168, 0x11B9] }, +{ source: [0xAF23], NFC: [0xAF23], NFD: [0x1101, 0x1168, 0x11BA], NFKC: [0xAF23], NFKD: [0x1101, 0x1168, 0x11BA] }, +{ source: [0xAF24], NFC: [0xAF24], NFD: [0x1101, 0x1168, 0x11BB], NFKC: [0xAF24], NFKD: [0x1101, 0x1168, 0x11BB] }, +{ source: [0xAF25], NFC: [0xAF25], NFD: [0x1101, 0x1168, 0x11BC], NFKC: [0xAF25], NFKD: [0x1101, 0x1168, 0x11BC] }, +{ source: [0xAF26], NFC: [0xAF26], NFD: [0x1101, 0x1168, 0x11BD], NFKC: [0xAF26], NFKD: [0x1101, 0x1168, 0x11BD] }, +{ source: [0xAF27], NFC: [0xAF27], NFD: [0x1101, 0x1168, 0x11BE], NFKC: [0xAF27], NFKD: [0x1101, 0x1168, 0x11BE] }, +{ source: [0xAF28], NFC: [0xAF28], NFD: [0x1101, 0x1168, 0x11BF], NFKC: [0xAF28], NFKD: [0x1101, 0x1168, 0x11BF] }, +{ source: [0xAF29], NFC: [0xAF29], NFD: [0x1101, 0x1168, 0x11C0], NFKC: [0xAF29], NFKD: [0x1101, 0x1168, 0x11C0] }, +{ source: [0xAF2A], NFC: [0xAF2A], NFD: [0x1101, 0x1168, 0x11C1], NFKC: [0xAF2A], NFKD: [0x1101, 0x1168, 0x11C1] }, +{ source: [0xAF2B], NFC: [0xAF2B], NFD: [0x1101, 0x1168, 0x11C2], NFKC: [0xAF2B], NFKD: [0x1101, 0x1168, 0x11C2] }, +{ source: [0xAF2C], NFC: [0xAF2C], NFD: [0x1101, 0x1169], NFKC: [0xAF2C], NFKD: [0x1101, 0x1169] }, +{ source: [0xAF2D], NFC: [0xAF2D], NFD: [0x1101, 0x1169, 0x11A8], NFKC: [0xAF2D], NFKD: [0x1101, 0x1169, 0x11A8] }, +{ source: [0xAF2E], NFC: [0xAF2E], NFD: [0x1101, 0x1169, 0x11A9], NFKC: [0xAF2E], NFKD: [0x1101, 0x1169, 0x11A9] }, +{ source: [0xAF2F], NFC: [0xAF2F], NFD: [0x1101, 0x1169, 0x11AA], NFKC: [0xAF2F], NFKD: [0x1101, 0x1169, 0x11AA] }, +{ source: [0xAF30], NFC: [0xAF30], NFD: [0x1101, 0x1169, 0x11AB], NFKC: [0xAF30], NFKD: [0x1101, 0x1169, 0x11AB] }, +{ source: [0xAF31], NFC: [0xAF31], NFD: [0x1101, 0x1169, 0x11AC], NFKC: [0xAF31], NFKD: [0x1101, 0x1169, 0x11AC] }, +{ source: [0xAF32], NFC: [0xAF32], NFD: [0x1101, 0x1169, 0x11AD], NFKC: [0xAF32], NFKD: [0x1101, 0x1169, 0x11AD] }, +{ source: [0xAF33], NFC: [0xAF33], NFD: [0x1101, 0x1169, 0x11AE], NFKC: [0xAF33], NFKD: [0x1101, 0x1169, 0x11AE] }, +{ source: [0xAF34], NFC: [0xAF34], NFD: [0x1101, 0x1169, 0x11AF], NFKC: [0xAF34], NFKD: [0x1101, 0x1169, 0x11AF] }, +{ source: [0xAF35], NFC: [0xAF35], NFD: [0x1101, 0x1169, 0x11B0], NFKC: [0xAF35], NFKD: [0x1101, 0x1169, 0x11B0] }, +{ source: [0xAF36], NFC: [0xAF36], NFD: [0x1101, 0x1169, 0x11B1], NFKC: [0xAF36], NFKD: [0x1101, 0x1169, 0x11B1] }, +{ source: [0xAF37], NFC: [0xAF37], NFD: [0x1101, 0x1169, 0x11B2], NFKC: [0xAF37], NFKD: [0x1101, 0x1169, 0x11B2] }, +{ source: [0xAF38], NFC: [0xAF38], NFD: [0x1101, 0x1169, 0x11B3], NFKC: [0xAF38], NFKD: [0x1101, 0x1169, 0x11B3] }, +{ source: [0xAF39], NFC: [0xAF39], NFD: [0x1101, 0x1169, 0x11B4], NFKC: [0xAF39], NFKD: [0x1101, 0x1169, 0x11B4] }, +{ source: [0xAF3A], NFC: [0xAF3A], NFD: [0x1101, 0x1169, 0x11B5], NFKC: [0xAF3A], NFKD: [0x1101, 0x1169, 0x11B5] }, +{ source: [0xAF3B], NFC: [0xAF3B], NFD: [0x1101, 0x1169, 0x11B6], NFKC: [0xAF3B], NFKD: [0x1101, 0x1169, 0x11B6] }, +{ source: [0xAF3C], NFC: [0xAF3C], NFD: [0x1101, 0x1169, 0x11B7], NFKC: [0xAF3C], NFKD: [0x1101, 0x1169, 0x11B7] }, +{ source: [0xAF3D], NFC: [0xAF3D], NFD: [0x1101, 0x1169, 0x11B8], NFKC: [0xAF3D], NFKD: [0x1101, 0x1169, 0x11B8] }, +{ source: [0xAF3E], NFC: [0xAF3E], NFD: [0x1101, 0x1169, 0x11B9], NFKC: [0xAF3E], NFKD: [0x1101, 0x1169, 0x11B9] }, +{ source: [0xAF3F], NFC: [0xAF3F], NFD: [0x1101, 0x1169, 0x11BA], NFKC: [0xAF3F], NFKD: [0x1101, 0x1169, 0x11BA] }, +{ source: [0xAF40], NFC: [0xAF40], NFD: [0x1101, 0x1169, 0x11BB], NFKC: [0xAF40], NFKD: [0x1101, 0x1169, 0x11BB] }, +{ source: [0xAF41], NFC: [0xAF41], NFD: [0x1101, 0x1169, 0x11BC], NFKC: [0xAF41], NFKD: [0x1101, 0x1169, 0x11BC] }, +{ source: [0xAF42], NFC: [0xAF42], NFD: [0x1101, 0x1169, 0x11BD], NFKC: [0xAF42], NFKD: [0x1101, 0x1169, 0x11BD] }, +{ source: [0xAF43], NFC: [0xAF43], NFD: [0x1101, 0x1169, 0x11BE], NFKC: [0xAF43], NFKD: [0x1101, 0x1169, 0x11BE] }, +{ source: [0xAF44], NFC: [0xAF44], NFD: [0x1101, 0x1169, 0x11BF], NFKC: [0xAF44], NFKD: [0x1101, 0x1169, 0x11BF] }, +{ source: [0xAF45], NFC: [0xAF45], NFD: [0x1101, 0x1169, 0x11C0], NFKC: [0xAF45], NFKD: [0x1101, 0x1169, 0x11C0] }, +{ source: [0xAF46], NFC: [0xAF46], NFD: [0x1101, 0x1169, 0x11C1], NFKC: [0xAF46], NFKD: [0x1101, 0x1169, 0x11C1] }, +{ source: [0xAF47], NFC: [0xAF47], NFD: [0x1101, 0x1169, 0x11C2], NFKC: [0xAF47], NFKD: [0x1101, 0x1169, 0x11C2] }, +{ source: [0xAF48], NFC: [0xAF48], NFD: [0x1101, 0x116A], NFKC: [0xAF48], NFKD: [0x1101, 0x116A] }, +{ source: [0xAF49], NFC: [0xAF49], NFD: [0x1101, 0x116A, 0x11A8], NFKC: [0xAF49], NFKD: [0x1101, 0x116A, 0x11A8] }, +{ source: [0xAF4A], NFC: [0xAF4A], NFD: [0x1101, 0x116A, 0x11A9], NFKC: [0xAF4A], NFKD: [0x1101, 0x116A, 0x11A9] }, +{ source: [0xAF4B], NFC: [0xAF4B], NFD: [0x1101, 0x116A, 0x11AA], NFKC: [0xAF4B], NFKD: [0x1101, 0x116A, 0x11AA] }, +{ source: [0xAF4C], NFC: [0xAF4C], NFD: [0x1101, 0x116A, 0x11AB], NFKC: [0xAF4C], NFKD: [0x1101, 0x116A, 0x11AB] }, +{ source: [0xAF4D], NFC: [0xAF4D], NFD: [0x1101, 0x116A, 0x11AC], NFKC: [0xAF4D], NFKD: [0x1101, 0x116A, 0x11AC] }, +{ source: [0xAF4E], NFC: [0xAF4E], NFD: [0x1101, 0x116A, 0x11AD], NFKC: [0xAF4E], NFKD: [0x1101, 0x116A, 0x11AD] }, +{ source: [0xAF4F], NFC: [0xAF4F], NFD: [0x1101, 0x116A, 0x11AE], NFKC: [0xAF4F], NFKD: [0x1101, 0x116A, 0x11AE] }, +{ source: [0xAF50], NFC: [0xAF50], NFD: [0x1101, 0x116A, 0x11AF], NFKC: [0xAF50], NFKD: [0x1101, 0x116A, 0x11AF] }, +{ source: [0xAF51], NFC: [0xAF51], NFD: [0x1101, 0x116A, 0x11B0], NFKC: [0xAF51], NFKD: [0x1101, 0x116A, 0x11B0] }, +{ source: [0xAF52], NFC: [0xAF52], NFD: [0x1101, 0x116A, 0x11B1], NFKC: [0xAF52], NFKD: [0x1101, 0x116A, 0x11B1] }, +{ source: [0xAF53], NFC: [0xAF53], NFD: [0x1101, 0x116A, 0x11B2], NFKC: [0xAF53], NFKD: [0x1101, 0x116A, 0x11B2] }, +{ source: [0xAF54], NFC: [0xAF54], NFD: [0x1101, 0x116A, 0x11B3], NFKC: [0xAF54], NFKD: [0x1101, 0x116A, 0x11B3] }, +{ source: [0xAF55], NFC: [0xAF55], NFD: [0x1101, 0x116A, 0x11B4], NFKC: [0xAF55], NFKD: [0x1101, 0x116A, 0x11B4] }, +{ source: [0xAF56], NFC: [0xAF56], NFD: [0x1101, 0x116A, 0x11B5], NFKC: [0xAF56], NFKD: [0x1101, 0x116A, 0x11B5] }, +{ source: [0xAF57], NFC: [0xAF57], NFD: [0x1101, 0x116A, 0x11B6], NFKC: [0xAF57], NFKD: [0x1101, 0x116A, 0x11B6] }, +{ source: [0xAF58], NFC: [0xAF58], NFD: [0x1101, 0x116A, 0x11B7], NFKC: [0xAF58], NFKD: [0x1101, 0x116A, 0x11B7] }, +{ source: [0xAF59], NFC: [0xAF59], NFD: [0x1101, 0x116A, 0x11B8], NFKC: [0xAF59], NFKD: [0x1101, 0x116A, 0x11B8] }, +{ source: [0xAF5A], NFC: [0xAF5A], NFD: [0x1101, 0x116A, 0x11B9], NFKC: [0xAF5A], NFKD: [0x1101, 0x116A, 0x11B9] }, +{ source: [0xAF5B], NFC: [0xAF5B], NFD: [0x1101, 0x116A, 0x11BA], NFKC: [0xAF5B], NFKD: [0x1101, 0x116A, 0x11BA] }, +{ source: [0xAF5C], NFC: [0xAF5C], NFD: [0x1101, 0x116A, 0x11BB], NFKC: [0xAF5C], NFKD: [0x1101, 0x116A, 0x11BB] }, +{ source: [0xAF5D], NFC: [0xAF5D], NFD: [0x1101, 0x116A, 0x11BC], NFKC: [0xAF5D], NFKD: [0x1101, 0x116A, 0x11BC] }, +{ source: [0xAF5E], NFC: [0xAF5E], NFD: [0x1101, 0x116A, 0x11BD], NFKC: [0xAF5E], NFKD: [0x1101, 0x116A, 0x11BD] }, +{ source: [0xAF5F], NFC: [0xAF5F], NFD: [0x1101, 0x116A, 0x11BE], NFKC: [0xAF5F], NFKD: [0x1101, 0x116A, 0x11BE] }, +{ source: [0xAF60], NFC: [0xAF60], NFD: [0x1101, 0x116A, 0x11BF], NFKC: [0xAF60], NFKD: [0x1101, 0x116A, 0x11BF] }, +{ source: [0xAF61], NFC: [0xAF61], NFD: [0x1101, 0x116A, 0x11C0], NFKC: [0xAF61], NFKD: [0x1101, 0x116A, 0x11C0] }, +{ source: [0xAF62], NFC: [0xAF62], NFD: [0x1101, 0x116A, 0x11C1], NFKC: [0xAF62], NFKD: [0x1101, 0x116A, 0x11C1] }, +{ source: [0xAF63], NFC: [0xAF63], NFD: [0x1101, 0x116A, 0x11C2], NFKC: [0xAF63], NFKD: [0x1101, 0x116A, 0x11C2] }, +{ source: [0xAF64], NFC: [0xAF64], NFD: [0x1101, 0x116B], NFKC: [0xAF64], NFKD: [0x1101, 0x116B] }, +{ source: [0xAF65], NFC: [0xAF65], NFD: [0x1101, 0x116B, 0x11A8], NFKC: [0xAF65], NFKD: [0x1101, 0x116B, 0x11A8] }, +{ source: [0xAF66], NFC: [0xAF66], NFD: [0x1101, 0x116B, 0x11A9], NFKC: [0xAF66], NFKD: [0x1101, 0x116B, 0x11A9] }, +{ source: [0xAF67], NFC: [0xAF67], NFD: [0x1101, 0x116B, 0x11AA], NFKC: [0xAF67], NFKD: [0x1101, 0x116B, 0x11AA] }, +{ source: [0xAF68], NFC: [0xAF68], NFD: [0x1101, 0x116B, 0x11AB], NFKC: [0xAF68], NFKD: [0x1101, 0x116B, 0x11AB] }, +{ source: [0xAF69], NFC: [0xAF69], NFD: [0x1101, 0x116B, 0x11AC], NFKC: [0xAF69], NFKD: [0x1101, 0x116B, 0x11AC] }, +{ source: [0xAF6A], NFC: [0xAF6A], NFD: [0x1101, 0x116B, 0x11AD], NFKC: [0xAF6A], NFKD: [0x1101, 0x116B, 0x11AD] }, +{ source: [0xAF6B], NFC: [0xAF6B], NFD: [0x1101, 0x116B, 0x11AE], NFKC: [0xAF6B], NFKD: [0x1101, 0x116B, 0x11AE] }, +{ source: [0xAF6C], NFC: [0xAF6C], NFD: [0x1101, 0x116B, 0x11AF], NFKC: [0xAF6C], NFKD: [0x1101, 0x116B, 0x11AF] }, +{ source: [0xAF6D], NFC: [0xAF6D], NFD: [0x1101, 0x116B, 0x11B0], NFKC: [0xAF6D], NFKD: [0x1101, 0x116B, 0x11B0] }, +{ source: [0xAF6E], NFC: [0xAF6E], NFD: [0x1101, 0x116B, 0x11B1], NFKC: [0xAF6E], NFKD: [0x1101, 0x116B, 0x11B1] }, +{ source: [0xAF6F], NFC: [0xAF6F], NFD: [0x1101, 0x116B, 0x11B2], NFKC: [0xAF6F], NFKD: [0x1101, 0x116B, 0x11B2] }, +{ source: [0xAF70], NFC: [0xAF70], NFD: [0x1101, 0x116B, 0x11B3], NFKC: [0xAF70], NFKD: [0x1101, 0x116B, 0x11B3] }, +{ source: [0xAF71], NFC: [0xAF71], NFD: [0x1101, 0x116B, 0x11B4], NFKC: [0xAF71], NFKD: [0x1101, 0x116B, 0x11B4] }, +{ source: [0xAF72], NFC: [0xAF72], NFD: [0x1101, 0x116B, 0x11B5], NFKC: [0xAF72], NFKD: [0x1101, 0x116B, 0x11B5] }, +{ source: [0xAF73], NFC: [0xAF73], NFD: [0x1101, 0x116B, 0x11B6], NFKC: [0xAF73], NFKD: [0x1101, 0x116B, 0x11B6] }, +{ source: [0xAF74], NFC: [0xAF74], NFD: [0x1101, 0x116B, 0x11B7], NFKC: [0xAF74], NFKD: [0x1101, 0x116B, 0x11B7] }, +{ source: [0xAF75], NFC: [0xAF75], NFD: [0x1101, 0x116B, 0x11B8], NFKC: [0xAF75], NFKD: [0x1101, 0x116B, 0x11B8] }, +{ source: [0xAF76], NFC: [0xAF76], NFD: [0x1101, 0x116B, 0x11B9], NFKC: [0xAF76], NFKD: [0x1101, 0x116B, 0x11B9] }, +{ source: [0xAF77], NFC: [0xAF77], NFD: [0x1101, 0x116B, 0x11BA], NFKC: [0xAF77], NFKD: [0x1101, 0x116B, 0x11BA] }, +{ source: [0xAF78], NFC: [0xAF78], NFD: [0x1101, 0x116B, 0x11BB], NFKC: [0xAF78], NFKD: [0x1101, 0x116B, 0x11BB] }, +{ source: [0xAF79], NFC: [0xAF79], NFD: [0x1101, 0x116B, 0x11BC], NFKC: [0xAF79], NFKD: [0x1101, 0x116B, 0x11BC] }, +{ source: [0xAF7A], NFC: [0xAF7A], NFD: [0x1101, 0x116B, 0x11BD], NFKC: [0xAF7A], NFKD: [0x1101, 0x116B, 0x11BD] }, +{ source: [0xAF7B], NFC: [0xAF7B], NFD: [0x1101, 0x116B, 0x11BE], NFKC: [0xAF7B], NFKD: [0x1101, 0x116B, 0x11BE] }, +{ source: [0xAF7C], NFC: [0xAF7C], NFD: [0x1101, 0x116B, 0x11BF], NFKC: [0xAF7C], NFKD: [0x1101, 0x116B, 0x11BF] }, +{ source: [0xAF7D], NFC: [0xAF7D], NFD: [0x1101, 0x116B, 0x11C0], NFKC: [0xAF7D], NFKD: [0x1101, 0x116B, 0x11C0] }, +{ source: [0xAF7E], NFC: [0xAF7E], NFD: [0x1101, 0x116B, 0x11C1], NFKC: [0xAF7E], NFKD: [0x1101, 0x116B, 0x11C1] }, +{ source: [0xAF7F], NFC: [0xAF7F], NFD: [0x1101, 0x116B, 0x11C2], NFKC: [0xAF7F], NFKD: [0x1101, 0x116B, 0x11C2] }, +{ source: [0xAF80], NFC: [0xAF80], NFD: [0x1101, 0x116C], NFKC: [0xAF80], NFKD: [0x1101, 0x116C] }, +{ source: [0xAF81], NFC: [0xAF81], NFD: [0x1101, 0x116C, 0x11A8], NFKC: [0xAF81], NFKD: [0x1101, 0x116C, 0x11A8] }, +{ source: [0xAF82], NFC: [0xAF82], NFD: [0x1101, 0x116C, 0x11A9], NFKC: [0xAF82], NFKD: [0x1101, 0x116C, 0x11A9] }, +{ source: [0xAF83], NFC: [0xAF83], NFD: [0x1101, 0x116C, 0x11AA], NFKC: [0xAF83], NFKD: [0x1101, 0x116C, 0x11AA] }, +{ source: [0xAF84], NFC: [0xAF84], NFD: [0x1101, 0x116C, 0x11AB], NFKC: [0xAF84], NFKD: [0x1101, 0x116C, 0x11AB] }, +{ source: [0xAF85], NFC: [0xAF85], NFD: [0x1101, 0x116C, 0x11AC], NFKC: [0xAF85], NFKD: [0x1101, 0x116C, 0x11AC] }, +{ source: [0xAF86], NFC: [0xAF86], NFD: [0x1101, 0x116C, 0x11AD], NFKC: [0xAF86], NFKD: [0x1101, 0x116C, 0x11AD] }, +{ source: [0xAF87], NFC: [0xAF87], NFD: [0x1101, 0x116C, 0x11AE], NFKC: [0xAF87], NFKD: [0x1101, 0x116C, 0x11AE] }, +{ source: [0xAF88], NFC: [0xAF88], NFD: [0x1101, 0x116C, 0x11AF], NFKC: [0xAF88], NFKD: [0x1101, 0x116C, 0x11AF] }, +{ source: [0xAF89], NFC: [0xAF89], NFD: [0x1101, 0x116C, 0x11B0], NFKC: [0xAF89], NFKD: [0x1101, 0x116C, 0x11B0] }, +{ source: [0xAF8A], NFC: [0xAF8A], NFD: [0x1101, 0x116C, 0x11B1], NFKC: [0xAF8A], NFKD: [0x1101, 0x116C, 0x11B1] }, +{ source: [0xAF8B], NFC: [0xAF8B], NFD: [0x1101, 0x116C, 0x11B2], NFKC: [0xAF8B], NFKD: [0x1101, 0x116C, 0x11B2] }, +{ source: [0xAF8C], NFC: [0xAF8C], NFD: [0x1101, 0x116C, 0x11B3], NFKC: [0xAF8C], NFKD: [0x1101, 0x116C, 0x11B3] }, +{ source: [0xAF8D], NFC: [0xAF8D], NFD: [0x1101, 0x116C, 0x11B4], NFKC: [0xAF8D], NFKD: [0x1101, 0x116C, 0x11B4] }, +{ source: [0xAF8E], NFC: [0xAF8E], NFD: [0x1101, 0x116C, 0x11B5], NFKC: [0xAF8E], NFKD: [0x1101, 0x116C, 0x11B5] }, +{ source: [0xAF8F], NFC: [0xAF8F], NFD: [0x1101, 0x116C, 0x11B6], NFKC: [0xAF8F], NFKD: [0x1101, 0x116C, 0x11B6] }, +{ source: [0xAF90], NFC: [0xAF90], NFD: [0x1101, 0x116C, 0x11B7], NFKC: [0xAF90], NFKD: [0x1101, 0x116C, 0x11B7] }, +{ source: [0xAF91], NFC: [0xAF91], NFD: [0x1101, 0x116C, 0x11B8], NFKC: [0xAF91], NFKD: [0x1101, 0x116C, 0x11B8] }, +{ source: [0xAF92], NFC: [0xAF92], NFD: [0x1101, 0x116C, 0x11B9], NFKC: [0xAF92], NFKD: [0x1101, 0x116C, 0x11B9] }, +{ source: [0xAF93], NFC: [0xAF93], NFD: [0x1101, 0x116C, 0x11BA], NFKC: [0xAF93], NFKD: [0x1101, 0x116C, 0x11BA] }, +{ source: [0xAF94], NFC: [0xAF94], NFD: [0x1101, 0x116C, 0x11BB], NFKC: [0xAF94], NFKD: [0x1101, 0x116C, 0x11BB] }, +{ source: [0xAF95], NFC: [0xAF95], NFD: [0x1101, 0x116C, 0x11BC], NFKC: [0xAF95], NFKD: [0x1101, 0x116C, 0x11BC] }, +{ source: [0xAF96], NFC: [0xAF96], NFD: [0x1101, 0x116C, 0x11BD], NFKC: [0xAF96], NFKD: [0x1101, 0x116C, 0x11BD] }, +{ source: [0xAF97], NFC: [0xAF97], NFD: [0x1101, 0x116C, 0x11BE], NFKC: [0xAF97], NFKD: [0x1101, 0x116C, 0x11BE] }, +{ source: [0xAF98], NFC: [0xAF98], NFD: [0x1101, 0x116C, 0x11BF], NFKC: [0xAF98], NFKD: [0x1101, 0x116C, 0x11BF] }, +{ source: [0xAF99], NFC: [0xAF99], NFD: [0x1101, 0x116C, 0x11C0], NFKC: [0xAF99], NFKD: [0x1101, 0x116C, 0x11C0] }, +{ source: [0xAF9A], NFC: [0xAF9A], NFD: [0x1101, 0x116C, 0x11C1], NFKC: [0xAF9A], NFKD: [0x1101, 0x116C, 0x11C1] }, +{ source: [0xAF9B], NFC: [0xAF9B], NFD: [0x1101, 0x116C, 0x11C2], NFKC: [0xAF9B], NFKD: [0x1101, 0x116C, 0x11C2] }, +{ source: [0xAF9C], NFC: [0xAF9C], NFD: [0x1101, 0x116D], NFKC: [0xAF9C], NFKD: [0x1101, 0x116D] }, +{ source: [0xAF9D], NFC: [0xAF9D], NFD: [0x1101, 0x116D, 0x11A8], NFKC: [0xAF9D], NFKD: [0x1101, 0x116D, 0x11A8] }, +{ source: [0xAF9E], NFC: [0xAF9E], NFD: [0x1101, 0x116D, 0x11A9], NFKC: [0xAF9E], NFKD: [0x1101, 0x116D, 0x11A9] }, +{ source: [0xAF9F], NFC: [0xAF9F], NFD: [0x1101, 0x116D, 0x11AA], NFKC: [0xAF9F], NFKD: [0x1101, 0x116D, 0x11AA] }, +{ source: [0xAFA0], NFC: [0xAFA0], NFD: [0x1101, 0x116D, 0x11AB], NFKC: [0xAFA0], NFKD: [0x1101, 0x116D, 0x11AB] }, +{ source: [0xAFA1], NFC: [0xAFA1], NFD: [0x1101, 0x116D, 0x11AC], NFKC: [0xAFA1], NFKD: [0x1101, 0x116D, 0x11AC] }, +{ source: [0xAFA2], NFC: [0xAFA2], NFD: [0x1101, 0x116D, 0x11AD], NFKC: [0xAFA2], NFKD: [0x1101, 0x116D, 0x11AD] }, +{ source: [0xAFA3], NFC: [0xAFA3], NFD: [0x1101, 0x116D, 0x11AE], NFKC: [0xAFA3], NFKD: [0x1101, 0x116D, 0x11AE] }, +{ source: [0xAFA4], NFC: [0xAFA4], NFD: [0x1101, 0x116D, 0x11AF], NFKC: [0xAFA4], NFKD: [0x1101, 0x116D, 0x11AF] }, +{ source: [0xAFA5], NFC: [0xAFA5], NFD: [0x1101, 0x116D, 0x11B0], NFKC: [0xAFA5], NFKD: [0x1101, 0x116D, 0x11B0] }, +{ source: [0xAFA6], NFC: [0xAFA6], NFD: [0x1101, 0x116D, 0x11B1], NFKC: [0xAFA6], NFKD: [0x1101, 0x116D, 0x11B1] }, +{ source: [0xAFA7], NFC: [0xAFA7], NFD: [0x1101, 0x116D, 0x11B2], NFKC: [0xAFA7], NFKD: [0x1101, 0x116D, 0x11B2] }, +{ source: [0xAFA8], NFC: [0xAFA8], NFD: [0x1101, 0x116D, 0x11B3], NFKC: [0xAFA8], NFKD: [0x1101, 0x116D, 0x11B3] }, +{ source: [0xAFA9], NFC: [0xAFA9], NFD: [0x1101, 0x116D, 0x11B4], NFKC: [0xAFA9], NFKD: [0x1101, 0x116D, 0x11B4] }, +{ source: [0xAFAA], NFC: [0xAFAA], NFD: [0x1101, 0x116D, 0x11B5], NFKC: [0xAFAA], NFKD: [0x1101, 0x116D, 0x11B5] }, +{ source: [0xAFAB], NFC: [0xAFAB], NFD: [0x1101, 0x116D, 0x11B6], NFKC: [0xAFAB], NFKD: [0x1101, 0x116D, 0x11B6] }, +{ source: [0xAFAC], NFC: [0xAFAC], NFD: [0x1101, 0x116D, 0x11B7], NFKC: [0xAFAC], NFKD: [0x1101, 0x116D, 0x11B7] }, +{ source: [0xAFAD], NFC: [0xAFAD], NFD: [0x1101, 0x116D, 0x11B8], NFKC: [0xAFAD], NFKD: [0x1101, 0x116D, 0x11B8] }, +{ source: [0xAFAE], NFC: [0xAFAE], NFD: [0x1101, 0x116D, 0x11B9], NFKC: [0xAFAE], NFKD: [0x1101, 0x116D, 0x11B9] }, +{ source: [0xAFAF], NFC: [0xAFAF], NFD: [0x1101, 0x116D, 0x11BA], NFKC: [0xAFAF], NFKD: [0x1101, 0x116D, 0x11BA] }, +{ source: [0xAFB0], NFC: [0xAFB0], NFD: [0x1101, 0x116D, 0x11BB], NFKC: [0xAFB0], NFKD: [0x1101, 0x116D, 0x11BB] }, +{ source: [0xAFB1], NFC: [0xAFB1], NFD: [0x1101, 0x116D, 0x11BC], NFKC: [0xAFB1], NFKD: [0x1101, 0x116D, 0x11BC] }, +{ source: [0xAFB2], NFC: [0xAFB2], NFD: [0x1101, 0x116D, 0x11BD], NFKC: [0xAFB2], NFKD: [0x1101, 0x116D, 0x11BD] }, +{ source: [0xAFB3], NFC: [0xAFB3], NFD: [0x1101, 0x116D, 0x11BE], NFKC: [0xAFB3], NFKD: [0x1101, 0x116D, 0x11BE] }, +{ source: [0xAFB4], NFC: [0xAFB4], NFD: [0x1101, 0x116D, 0x11BF], NFKC: [0xAFB4], NFKD: [0x1101, 0x116D, 0x11BF] }, +{ source: [0xAFB5], NFC: [0xAFB5], NFD: [0x1101, 0x116D, 0x11C0], NFKC: [0xAFB5], NFKD: [0x1101, 0x116D, 0x11C0] }, +{ source: [0xAFB6], NFC: [0xAFB6], NFD: [0x1101, 0x116D, 0x11C1], NFKC: [0xAFB6], NFKD: [0x1101, 0x116D, 0x11C1] }, +{ source: [0xAFB7], NFC: [0xAFB7], NFD: [0x1101, 0x116D, 0x11C2], NFKC: [0xAFB7], NFKD: [0x1101, 0x116D, 0x11C2] }, +{ source: [0xAFB8], NFC: [0xAFB8], NFD: [0x1101, 0x116E], NFKC: [0xAFB8], NFKD: [0x1101, 0x116E] }, +{ source: [0xAFB9], NFC: [0xAFB9], NFD: [0x1101, 0x116E, 0x11A8], NFKC: [0xAFB9], NFKD: [0x1101, 0x116E, 0x11A8] }, +{ source: [0xAFBA], NFC: [0xAFBA], NFD: [0x1101, 0x116E, 0x11A9], NFKC: [0xAFBA], NFKD: [0x1101, 0x116E, 0x11A9] }, +{ source: [0xAFBB], NFC: [0xAFBB], NFD: [0x1101, 0x116E, 0x11AA], NFKC: [0xAFBB], NFKD: [0x1101, 0x116E, 0x11AA] }, +{ source: [0xAFBC], NFC: [0xAFBC], NFD: [0x1101, 0x116E, 0x11AB], NFKC: [0xAFBC], NFKD: [0x1101, 0x116E, 0x11AB] }, +{ source: [0xAFBD], NFC: [0xAFBD], NFD: [0x1101, 0x116E, 0x11AC], NFKC: [0xAFBD], NFKD: [0x1101, 0x116E, 0x11AC] }, +{ source: [0xAFBE], NFC: [0xAFBE], NFD: [0x1101, 0x116E, 0x11AD], NFKC: [0xAFBE], NFKD: [0x1101, 0x116E, 0x11AD] }, +{ source: [0xAFBF], NFC: [0xAFBF], NFD: [0x1101, 0x116E, 0x11AE], NFKC: [0xAFBF], NFKD: [0x1101, 0x116E, 0x11AE] }, +{ source: [0xAFC0], NFC: [0xAFC0], NFD: [0x1101, 0x116E, 0x11AF], NFKC: [0xAFC0], NFKD: [0x1101, 0x116E, 0x11AF] }, +{ source: [0xAFC1], NFC: [0xAFC1], NFD: [0x1101, 0x116E, 0x11B0], NFKC: [0xAFC1], NFKD: [0x1101, 0x116E, 0x11B0] }, +{ source: [0xAFC2], NFC: [0xAFC2], NFD: [0x1101, 0x116E, 0x11B1], NFKC: [0xAFC2], NFKD: [0x1101, 0x116E, 0x11B1] }, +{ source: [0xAFC3], NFC: [0xAFC3], NFD: [0x1101, 0x116E, 0x11B2], NFKC: [0xAFC3], NFKD: [0x1101, 0x116E, 0x11B2] }, +{ source: [0xAFC4], NFC: [0xAFC4], NFD: [0x1101, 0x116E, 0x11B3], NFKC: [0xAFC4], NFKD: [0x1101, 0x116E, 0x11B3] }, +{ source: [0xAFC5], NFC: [0xAFC5], NFD: [0x1101, 0x116E, 0x11B4], NFKC: [0xAFC5], NFKD: [0x1101, 0x116E, 0x11B4] }, +{ source: [0xAFC6], NFC: [0xAFC6], NFD: [0x1101, 0x116E, 0x11B5], NFKC: [0xAFC6], NFKD: [0x1101, 0x116E, 0x11B5] }, +{ source: [0xAFC7], NFC: [0xAFC7], NFD: [0x1101, 0x116E, 0x11B6], NFKC: [0xAFC7], NFKD: [0x1101, 0x116E, 0x11B6] }, +{ source: [0xAFC8], NFC: [0xAFC8], NFD: [0x1101, 0x116E, 0x11B7], NFKC: [0xAFC8], NFKD: [0x1101, 0x116E, 0x11B7] }, +{ source: [0xAFC9], NFC: [0xAFC9], NFD: [0x1101, 0x116E, 0x11B8], NFKC: [0xAFC9], NFKD: [0x1101, 0x116E, 0x11B8] }, +{ source: [0xAFCA], NFC: [0xAFCA], NFD: [0x1101, 0x116E, 0x11B9], NFKC: [0xAFCA], NFKD: [0x1101, 0x116E, 0x11B9] }, +{ source: [0xAFCB], NFC: [0xAFCB], NFD: [0x1101, 0x116E, 0x11BA], NFKC: [0xAFCB], NFKD: [0x1101, 0x116E, 0x11BA] }, +{ source: [0xAFCC], NFC: [0xAFCC], NFD: [0x1101, 0x116E, 0x11BB], NFKC: [0xAFCC], NFKD: [0x1101, 0x116E, 0x11BB] }, +{ source: [0xAFCD], NFC: [0xAFCD], NFD: [0x1101, 0x116E, 0x11BC], NFKC: [0xAFCD], NFKD: [0x1101, 0x116E, 0x11BC] }, +{ source: [0xAFCE], NFC: [0xAFCE], NFD: [0x1101, 0x116E, 0x11BD], NFKC: [0xAFCE], NFKD: [0x1101, 0x116E, 0x11BD] }, +{ source: [0xAFCF], NFC: [0xAFCF], NFD: [0x1101, 0x116E, 0x11BE], NFKC: [0xAFCF], NFKD: [0x1101, 0x116E, 0x11BE] }, +{ source: [0xAFD0], NFC: [0xAFD0], NFD: [0x1101, 0x116E, 0x11BF], NFKC: [0xAFD0], NFKD: [0x1101, 0x116E, 0x11BF] }, +{ source: [0xAFD1], NFC: [0xAFD1], NFD: [0x1101, 0x116E, 0x11C0], NFKC: [0xAFD1], NFKD: [0x1101, 0x116E, 0x11C0] }, +{ source: [0xAFD2], NFC: [0xAFD2], NFD: [0x1101, 0x116E, 0x11C1], NFKC: [0xAFD2], NFKD: [0x1101, 0x116E, 0x11C1] }, +{ source: [0xAFD3], NFC: [0xAFD3], NFD: [0x1101, 0x116E, 0x11C2], NFKC: [0xAFD3], NFKD: [0x1101, 0x116E, 0x11C2] }, +{ source: [0xAFD4], NFC: [0xAFD4], NFD: [0x1101, 0x116F], NFKC: [0xAFD4], NFKD: [0x1101, 0x116F] }, +{ source: [0xAFD5], NFC: [0xAFD5], NFD: [0x1101, 0x116F, 0x11A8], NFKC: [0xAFD5], NFKD: [0x1101, 0x116F, 0x11A8] }, +{ source: [0xAFD6], NFC: [0xAFD6], NFD: [0x1101, 0x116F, 0x11A9], NFKC: [0xAFD6], NFKD: [0x1101, 0x116F, 0x11A9] }, +{ source: [0xAFD7], NFC: [0xAFD7], NFD: [0x1101, 0x116F, 0x11AA], NFKC: [0xAFD7], NFKD: [0x1101, 0x116F, 0x11AA] }, +{ source: [0xAFD8], NFC: [0xAFD8], NFD: [0x1101, 0x116F, 0x11AB], NFKC: [0xAFD8], NFKD: [0x1101, 0x116F, 0x11AB] }, +{ source: [0xAFD9], NFC: [0xAFD9], NFD: [0x1101, 0x116F, 0x11AC], NFKC: [0xAFD9], NFKD: [0x1101, 0x116F, 0x11AC] }, +{ source: [0xAFDA], NFC: [0xAFDA], NFD: [0x1101, 0x116F, 0x11AD], NFKC: [0xAFDA], NFKD: [0x1101, 0x116F, 0x11AD] }, +{ source: [0xAFDB], NFC: [0xAFDB], NFD: [0x1101, 0x116F, 0x11AE], NFKC: [0xAFDB], NFKD: [0x1101, 0x116F, 0x11AE] }, +{ source: [0xAFDC], NFC: [0xAFDC], NFD: [0x1101, 0x116F, 0x11AF], NFKC: [0xAFDC], NFKD: [0x1101, 0x116F, 0x11AF] }, +{ source: [0xAFDD], NFC: [0xAFDD], NFD: [0x1101, 0x116F, 0x11B0], NFKC: [0xAFDD], NFKD: [0x1101, 0x116F, 0x11B0] }, +{ source: [0xAFDE], NFC: [0xAFDE], NFD: [0x1101, 0x116F, 0x11B1], NFKC: [0xAFDE], NFKD: [0x1101, 0x116F, 0x11B1] }, +{ source: [0xAFDF], NFC: [0xAFDF], NFD: [0x1101, 0x116F, 0x11B2], NFKC: [0xAFDF], NFKD: [0x1101, 0x116F, 0x11B2] }, +{ source: [0xAFE0], NFC: [0xAFE0], NFD: [0x1101, 0x116F, 0x11B3], NFKC: [0xAFE0], NFKD: [0x1101, 0x116F, 0x11B3] }, +{ source: [0xAFE1], NFC: [0xAFE1], NFD: [0x1101, 0x116F, 0x11B4], NFKC: [0xAFE1], NFKD: [0x1101, 0x116F, 0x11B4] }, +{ source: [0xAFE2], NFC: [0xAFE2], NFD: [0x1101, 0x116F, 0x11B5], NFKC: [0xAFE2], NFKD: [0x1101, 0x116F, 0x11B5] }, +{ source: [0xAFE3], NFC: [0xAFE3], NFD: [0x1101, 0x116F, 0x11B6], NFKC: [0xAFE3], NFKD: [0x1101, 0x116F, 0x11B6] }, +{ source: [0xAFE4], NFC: [0xAFE4], NFD: [0x1101, 0x116F, 0x11B7], NFKC: [0xAFE4], NFKD: [0x1101, 0x116F, 0x11B7] }, +{ source: [0xAFE5], NFC: [0xAFE5], NFD: [0x1101, 0x116F, 0x11B8], NFKC: [0xAFE5], NFKD: [0x1101, 0x116F, 0x11B8] }, +{ source: [0xAFE6], NFC: [0xAFE6], NFD: [0x1101, 0x116F, 0x11B9], NFKC: [0xAFE6], NFKD: [0x1101, 0x116F, 0x11B9] }, +{ source: [0xAFE7], NFC: [0xAFE7], NFD: [0x1101, 0x116F, 0x11BA], NFKC: [0xAFE7], NFKD: [0x1101, 0x116F, 0x11BA] }, +{ source: [0xAFE8], NFC: [0xAFE8], NFD: [0x1101, 0x116F, 0x11BB], NFKC: [0xAFE8], NFKD: [0x1101, 0x116F, 0x11BB] }, +{ source: [0xAFE9], NFC: [0xAFE9], NFD: [0x1101, 0x116F, 0x11BC], NFKC: [0xAFE9], NFKD: [0x1101, 0x116F, 0x11BC] }, +{ source: [0xAFEA], NFC: [0xAFEA], NFD: [0x1101, 0x116F, 0x11BD], NFKC: [0xAFEA], NFKD: [0x1101, 0x116F, 0x11BD] }, +{ source: [0xAFEB], NFC: [0xAFEB], NFD: [0x1101, 0x116F, 0x11BE], NFKC: [0xAFEB], NFKD: [0x1101, 0x116F, 0x11BE] }, +{ source: [0xAFEC], NFC: [0xAFEC], NFD: [0x1101, 0x116F, 0x11BF], NFKC: [0xAFEC], NFKD: [0x1101, 0x116F, 0x11BF] }, +{ source: [0xAFED], NFC: [0xAFED], NFD: [0x1101, 0x116F, 0x11C0], NFKC: [0xAFED], NFKD: [0x1101, 0x116F, 0x11C0] }, +{ source: [0xAFEE], NFC: [0xAFEE], NFD: [0x1101, 0x116F, 0x11C1], NFKC: [0xAFEE], NFKD: [0x1101, 0x116F, 0x11C1] }, +{ source: [0xAFEF], NFC: [0xAFEF], NFD: [0x1101, 0x116F, 0x11C2], NFKC: [0xAFEF], NFKD: [0x1101, 0x116F, 0x11C2] }, +{ source: [0xAFF0], NFC: [0xAFF0], NFD: [0x1101, 0x1170], NFKC: [0xAFF0], NFKD: [0x1101, 0x1170] }, +{ source: [0xAFF1], NFC: [0xAFF1], NFD: [0x1101, 0x1170, 0x11A8], NFKC: [0xAFF1], NFKD: [0x1101, 0x1170, 0x11A8] }, +{ source: [0xAFF2], NFC: [0xAFF2], NFD: [0x1101, 0x1170, 0x11A9], NFKC: [0xAFF2], NFKD: [0x1101, 0x1170, 0x11A9] }, +{ source: [0xAFF3], NFC: [0xAFF3], NFD: [0x1101, 0x1170, 0x11AA], NFKC: [0xAFF3], NFKD: [0x1101, 0x1170, 0x11AA] }, +{ source: [0xAFF4], NFC: [0xAFF4], NFD: [0x1101, 0x1170, 0x11AB], NFKC: [0xAFF4], NFKD: [0x1101, 0x1170, 0x11AB] }, +{ source: [0xAFF5], NFC: [0xAFF5], NFD: [0x1101, 0x1170, 0x11AC], NFKC: [0xAFF5], NFKD: [0x1101, 0x1170, 0x11AC] }, +{ source: [0xAFF6], NFC: [0xAFF6], NFD: [0x1101, 0x1170, 0x11AD], NFKC: [0xAFF6], NFKD: [0x1101, 0x1170, 0x11AD] }, +{ source: [0xAFF7], NFC: [0xAFF7], NFD: [0x1101, 0x1170, 0x11AE], NFKC: [0xAFF7], NFKD: [0x1101, 0x1170, 0x11AE] }, +{ source: [0xAFF8], NFC: [0xAFF8], NFD: [0x1101, 0x1170, 0x11AF], NFKC: [0xAFF8], NFKD: [0x1101, 0x1170, 0x11AF] }, +{ source: [0xAFF9], NFC: [0xAFF9], NFD: [0x1101, 0x1170, 0x11B0], NFKC: [0xAFF9], NFKD: [0x1101, 0x1170, 0x11B0] }, +{ source: [0xAFFA], NFC: [0xAFFA], NFD: [0x1101, 0x1170, 0x11B1], NFKC: [0xAFFA], NFKD: [0x1101, 0x1170, 0x11B1] }, +{ source: [0xAFFB], NFC: [0xAFFB], NFD: [0x1101, 0x1170, 0x11B2], NFKC: [0xAFFB], NFKD: [0x1101, 0x1170, 0x11B2] }, +{ source: [0xAFFC], NFC: [0xAFFC], NFD: [0x1101, 0x1170, 0x11B3], NFKC: [0xAFFC], NFKD: [0x1101, 0x1170, 0x11B3] }, +{ source: [0xAFFD], NFC: [0xAFFD], NFD: [0x1101, 0x1170, 0x11B4], NFKC: [0xAFFD], NFKD: [0x1101, 0x1170, 0x11B4] }, +{ source: [0xAFFE], NFC: [0xAFFE], NFD: [0x1101, 0x1170, 0x11B5], NFKC: [0xAFFE], NFKD: [0x1101, 0x1170, 0x11B5] }, +{ source: [0xAFFF], NFC: [0xAFFF], NFD: [0x1101, 0x1170, 0x11B6], NFKC: [0xAFFF], NFKD: [0x1101, 0x1170, 0x11B6] }, +{ source: [0xB000], NFC: [0xB000], NFD: [0x1101, 0x1170, 0x11B7], NFKC: [0xB000], NFKD: [0x1101, 0x1170, 0x11B7] }, +{ source: [0xB001], NFC: [0xB001], NFD: [0x1101, 0x1170, 0x11B8], NFKC: [0xB001], NFKD: [0x1101, 0x1170, 0x11B8] }, +{ source: [0xB002], NFC: [0xB002], NFD: [0x1101, 0x1170, 0x11B9], NFKC: [0xB002], NFKD: [0x1101, 0x1170, 0x11B9] }, +{ source: [0xB003], NFC: [0xB003], NFD: [0x1101, 0x1170, 0x11BA], NFKC: [0xB003], NFKD: [0x1101, 0x1170, 0x11BA] }, +{ source: [0xB004], NFC: [0xB004], NFD: [0x1101, 0x1170, 0x11BB], NFKC: [0xB004], NFKD: [0x1101, 0x1170, 0x11BB] }, +{ source: [0xB005], NFC: [0xB005], NFD: [0x1101, 0x1170, 0x11BC], NFKC: [0xB005], NFKD: [0x1101, 0x1170, 0x11BC] }, +{ source: [0xB006], NFC: [0xB006], NFD: [0x1101, 0x1170, 0x11BD], NFKC: [0xB006], NFKD: [0x1101, 0x1170, 0x11BD] }, +{ source: [0xB007], NFC: [0xB007], NFD: [0x1101, 0x1170, 0x11BE], NFKC: [0xB007], NFKD: [0x1101, 0x1170, 0x11BE] }, +{ source: [0xB008], NFC: [0xB008], NFD: [0x1101, 0x1170, 0x11BF], NFKC: [0xB008], NFKD: [0x1101, 0x1170, 0x11BF] }, +{ source: [0xB009], NFC: [0xB009], NFD: [0x1101, 0x1170, 0x11C0], NFKC: [0xB009], NFKD: [0x1101, 0x1170, 0x11C0] }, +{ source: [0xB00A], NFC: [0xB00A], NFD: [0x1101, 0x1170, 0x11C1], NFKC: [0xB00A], NFKD: [0x1101, 0x1170, 0x11C1] }, +{ source: [0xB00B], NFC: [0xB00B], NFD: [0x1101, 0x1170, 0x11C2], NFKC: [0xB00B], NFKD: [0x1101, 0x1170, 0x11C2] }, +{ source: [0xB00C], NFC: [0xB00C], NFD: [0x1101, 0x1171], NFKC: [0xB00C], NFKD: [0x1101, 0x1171] }, +{ source: [0xB00D], NFC: [0xB00D], NFD: [0x1101, 0x1171, 0x11A8], NFKC: [0xB00D], NFKD: [0x1101, 0x1171, 0x11A8] }, +{ source: [0xB00E], NFC: [0xB00E], NFD: [0x1101, 0x1171, 0x11A9], NFKC: [0xB00E], NFKD: [0x1101, 0x1171, 0x11A9] }, +{ source: [0xB00F], NFC: [0xB00F], NFD: [0x1101, 0x1171, 0x11AA], NFKC: [0xB00F], NFKD: [0x1101, 0x1171, 0x11AA] }, +{ source: [0xB010], NFC: [0xB010], NFD: [0x1101, 0x1171, 0x11AB], NFKC: [0xB010], NFKD: [0x1101, 0x1171, 0x11AB] }, +{ source: [0xB011], NFC: [0xB011], NFD: [0x1101, 0x1171, 0x11AC], NFKC: [0xB011], NFKD: [0x1101, 0x1171, 0x11AC] }, +{ source: [0xB012], NFC: [0xB012], NFD: [0x1101, 0x1171, 0x11AD], NFKC: [0xB012], NFKD: [0x1101, 0x1171, 0x11AD] }, +{ source: [0xB013], NFC: [0xB013], NFD: [0x1101, 0x1171, 0x11AE], NFKC: [0xB013], NFKD: [0x1101, 0x1171, 0x11AE] }, +{ source: [0xB014], NFC: [0xB014], NFD: [0x1101, 0x1171, 0x11AF], NFKC: [0xB014], NFKD: [0x1101, 0x1171, 0x11AF] }, +{ source: [0xB015], NFC: [0xB015], NFD: [0x1101, 0x1171, 0x11B0], NFKC: [0xB015], NFKD: [0x1101, 0x1171, 0x11B0] }, +{ source: [0xB016], NFC: [0xB016], NFD: [0x1101, 0x1171, 0x11B1], NFKC: [0xB016], NFKD: [0x1101, 0x1171, 0x11B1] }, +{ source: [0xB017], NFC: [0xB017], NFD: [0x1101, 0x1171, 0x11B2], NFKC: [0xB017], NFKD: [0x1101, 0x1171, 0x11B2] }, +{ source: [0xB018], NFC: [0xB018], NFD: [0x1101, 0x1171, 0x11B3], NFKC: [0xB018], NFKD: [0x1101, 0x1171, 0x11B3] }, +{ source: [0xB019], NFC: [0xB019], NFD: [0x1101, 0x1171, 0x11B4], NFKC: [0xB019], NFKD: [0x1101, 0x1171, 0x11B4] }, +{ source: [0xB01A], NFC: [0xB01A], NFD: [0x1101, 0x1171, 0x11B5], NFKC: [0xB01A], NFKD: [0x1101, 0x1171, 0x11B5] }, +{ source: [0xB01B], NFC: [0xB01B], NFD: [0x1101, 0x1171, 0x11B6], NFKC: [0xB01B], NFKD: [0x1101, 0x1171, 0x11B6] }, +{ source: [0xB01C], NFC: [0xB01C], NFD: [0x1101, 0x1171, 0x11B7], NFKC: [0xB01C], NFKD: [0x1101, 0x1171, 0x11B7] }, +{ source: [0xB01D], NFC: [0xB01D], NFD: [0x1101, 0x1171, 0x11B8], NFKC: [0xB01D], NFKD: [0x1101, 0x1171, 0x11B8] }, +{ source: [0xB01E], NFC: [0xB01E], NFD: [0x1101, 0x1171, 0x11B9], NFKC: [0xB01E], NFKD: [0x1101, 0x1171, 0x11B9] }, +{ source: [0xB01F], NFC: [0xB01F], NFD: [0x1101, 0x1171, 0x11BA], NFKC: [0xB01F], NFKD: [0x1101, 0x1171, 0x11BA] }, +{ source: [0xB020], NFC: [0xB020], NFD: [0x1101, 0x1171, 0x11BB], NFKC: [0xB020], NFKD: [0x1101, 0x1171, 0x11BB] }, +{ source: [0xB021], NFC: [0xB021], NFD: [0x1101, 0x1171, 0x11BC], NFKC: [0xB021], NFKD: [0x1101, 0x1171, 0x11BC] }, +{ source: [0xB022], NFC: [0xB022], NFD: [0x1101, 0x1171, 0x11BD], NFKC: [0xB022], NFKD: [0x1101, 0x1171, 0x11BD] }, +{ source: [0xB023], NFC: [0xB023], NFD: [0x1101, 0x1171, 0x11BE], NFKC: [0xB023], NFKD: [0x1101, 0x1171, 0x11BE] }, +{ source: [0xB024], NFC: [0xB024], NFD: [0x1101, 0x1171, 0x11BF], NFKC: [0xB024], NFKD: [0x1101, 0x1171, 0x11BF] }, +{ source: [0xB025], NFC: [0xB025], NFD: [0x1101, 0x1171, 0x11C0], NFKC: [0xB025], NFKD: [0x1101, 0x1171, 0x11C0] }, +{ source: [0xB026], NFC: [0xB026], NFD: [0x1101, 0x1171, 0x11C1], NFKC: [0xB026], NFKD: [0x1101, 0x1171, 0x11C1] }, +{ source: [0xB027], NFC: [0xB027], NFD: [0x1101, 0x1171, 0x11C2], NFKC: [0xB027], NFKD: [0x1101, 0x1171, 0x11C2] }, +{ source: [0xB028], NFC: [0xB028], NFD: [0x1101, 0x1172], NFKC: [0xB028], NFKD: [0x1101, 0x1172] }, +{ source: [0xB029], NFC: [0xB029], NFD: [0x1101, 0x1172, 0x11A8], NFKC: [0xB029], NFKD: [0x1101, 0x1172, 0x11A8] }, +{ source: [0xB02A], NFC: [0xB02A], NFD: [0x1101, 0x1172, 0x11A9], NFKC: [0xB02A], NFKD: [0x1101, 0x1172, 0x11A9] }, +{ source: [0xB02B], NFC: [0xB02B], NFD: [0x1101, 0x1172, 0x11AA], NFKC: [0xB02B], NFKD: [0x1101, 0x1172, 0x11AA] }, +{ source: [0xB02C], NFC: [0xB02C], NFD: [0x1101, 0x1172, 0x11AB], NFKC: [0xB02C], NFKD: [0x1101, 0x1172, 0x11AB] }, +{ source: [0xB02D], NFC: [0xB02D], NFD: [0x1101, 0x1172, 0x11AC], NFKC: [0xB02D], NFKD: [0x1101, 0x1172, 0x11AC] }, +{ source: [0xB02E], NFC: [0xB02E], NFD: [0x1101, 0x1172, 0x11AD], NFKC: [0xB02E], NFKD: [0x1101, 0x1172, 0x11AD] }, +{ source: [0xB02F], NFC: [0xB02F], NFD: [0x1101, 0x1172, 0x11AE], NFKC: [0xB02F], NFKD: [0x1101, 0x1172, 0x11AE] }, +{ source: [0xB030], NFC: [0xB030], NFD: [0x1101, 0x1172, 0x11AF], NFKC: [0xB030], NFKD: [0x1101, 0x1172, 0x11AF] }, +{ source: [0xB031], NFC: [0xB031], NFD: [0x1101, 0x1172, 0x11B0], NFKC: [0xB031], NFKD: [0x1101, 0x1172, 0x11B0] }, +{ source: [0xB032], NFC: [0xB032], NFD: [0x1101, 0x1172, 0x11B1], NFKC: [0xB032], NFKD: [0x1101, 0x1172, 0x11B1] }, +{ source: [0xB033], NFC: [0xB033], NFD: [0x1101, 0x1172, 0x11B2], NFKC: [0xB033], NFKD: [0x1101, 0x1172, 0x11B2] }, +{ source: [0xB034], NFC: [0xB034], NFD: [0x1101, 0x1172, 0x11B3], NFKC: [0xB034], NFKD: [0x1101, 0x1172, 0x11B3] }, +{ source: [0xB035], NFC: [0xB035], NFD: [0x1101, 0x1172, 0x11B4], NFKC: [0xB035], NFKD: [0x1101, 0x1172, 0x11B4] }, +{ source: [0xB036], NFC: [0xB036], NFD: [0x1101, 0x1172, 0x11B5], NFKC: [0xB036], NFKD: [0x1101, 0x1172, 0x11B5] }, +{ source: [0xB037], NFC: [0xB037], NFD: [0x1101, 0x1172, 0x11B6], NFKC: [0xB037], NFKD: [0x1101, 0x1172, 0x11B6] }, +{ source: [0xB038], NFC: [0xB038], NFD: [0x1101, 0x1172, 0x11B7], NFKC: [0xB038], NFKD: [0x1101, 0x1172, 0x11B7] }, +{ source: [0xB039], NFC: [0xB039], NFD: [0x1101, 0x1172, 0x11B8], NFKC: [0xB039], NFKD: [0x1101, 0x1172, 0x11B8] }, +{ source: [0xB03A], NFC: [0xB03A], NFD: [0x1101, 0x1172, 0x11B9], NFKC: [0xB03A], NFKD: [0x1101, 0x1172, 0x11B9] }, +{ source: [0xB03B], NFC: [0xB03B], NFD: [0x1101, 0x1172, 0x11BA], NFKC: [0xB03B], NFKD: [0x1101, 0x1172, 0x11BA] }, +{ source: [0xB03C], NFC: [0xB03C], NFD: [0x1101, 0x1172, 0x11BB], NFKC: [0xB03C], NFKD: [0x1101, 0x1172, 0x11BB] }, +{ source: [0xB03D], NFC: [0xB03D], NFD: [0x1101, 0x1172, 0x11BC], NFKC: [0xB03D], NFKD: [0x1101, 0x1172, 0x11BC] }, +{ source: [0xB03E], NFC: [0xB03E], NFD: [0x1101, 0x1172, 0x11BD], NFKC: [0xB03E], NFKD: [0x1101, 0x1172, 0x11BD] }, +{ source: [0xB03F], NFC: [0xB03F], NFD: [0x1101, 0x1172, 0x11BE], NFKC: [0xB03F], NFKD: [0x1101, 0x1172, 0x11BE] }, +{ source: [0xB040], NFC: [0xB040], NFD: [0x1101, 0x1172, 0x11BF], NFKC: [0xB040], NFKD: [0x1101, 0x1172, 0x11BF] }, +{ source: [0xB041], NFC: [0xB041], NFD: [0x1101, 0x1172, 0x11C0], NFKC: [0xB041], NFKD: [0x1101, 0x1172, 0x11C0] }, +{ source: [0xB042], NFC: [0xB042], NFD: [0x1101, 0x1172, 0x11C1], NFKC: [0xB042], NFKD: [0x1101, 0x1172, 0x11C1] }, +{ source: [0xB043], NFC: [0xB043], NFD: [0x1101, 0x1172, 0x11C2], NFKC: [0xB043], NFKD: [0x1101, 0x1172, 0x11C2] }, +{ source: [0xB044], NFC: [0xB044], NFD: [0x1101, 0x1173], NFKC: [0xB044], NFKD: [0x1101, 0x1173] }, +{ source: [0xB045], NFC: [0xB045], NFD: [0x1101, 0x1173, 0x11A8], NFKC: [0xB045], NFKD: [0x1101, 0x1173, 0x11A8] }, +{ source: [0xB046], NFC: [0xB046], NFD: [0x1101, 0x1173, 0x11A9], NFKC: [0xB046], NFKD: [0x1101, 0x1173, 0x11A9] }, +{ source: [0xB047], NFC: [0xB047], NFD: [0x1101, 0x1173, 0x11AA], NFKC: [0xB047], NFKD: [0x1101, 0x1173, 0x11AA] }, +{ source: [0xB048], NFC: [0xB048], NFD: [0x1101, 0x1173, 0x11AB], NFKC: [0xB048], NFKD: [0x1101, 0x1173, 0x11AB] }, +{ source: [0xB049], NFC: [0xB049], NFD: [0x1101, 0x1173, 0x11AC], NFKC: [0xB049], NFKD: [0x1101, 0x1173, 0x11AC] }, +{ source: [0xB04A], NFC: [0xB04A], NFD: [0x1101, 0x1173, 0x11AD], NFKC: [0xB04A], NFKD: [0x1101, 0x1173, 0x11AD] }, +{ source: [0xB04B], NFC: [0xB04B], NFD: [0x1101, 0x1173, 0x11AE], NFKC: [0xB04B], NFKD: [0x1101, 0x1173, 0x11AE] }, +{ source: [0xB04C], NFC: [0xB04C], NFD: [0x1101, 0x1173, 0x11AF], NFKC: [0xB04C], NFKD: [0x1101, 0x1173, 0x11AF] }, +{ source: [0xB04D], NFC: [0xB04D], NFD: [0x1101, 0x1173, 0x11B0], NFKC: [0xB04D], NFKD: [0x1101, 0x1173, 0x11B0] }, +{ source: [0xB04E], NFC: [0xB04E], NFD: [0x1101, 0x1173, 0x11B1], NFKC: [0xB04E], NFKD: [0x1101, 0x1173, 0x11B1] }, +{ source: [0xB04F], NFC: [0xB04F], NFD: [0x1101, 0x1173, 0x11B2], NFKC: [0xB04F], NFKD: [0x1101, 0x1173, 0x11B2] }, +{ source: [0xB050], NFC: [0xB050], NFD: [0x1101, 0x1173, 0x11B3], NFKC: [0xB050], NFKD: [0x1101, 0x1173, 0x11B3] }, +{ source: [0xB051], NFC: [0xB051], NFD: [0x1101, 0x1173, 0x11B4], NFKC: [0xB051], NFKD: [0x1101, 0x1173, 0x11B4] }, +{ source: [0xB052], NFC: [0xB052], NFD: [0x1101, 0x1173, 0x11B5], NFKC: [0xB052], NFKD: [0x1101, 0x1173, 0x11B5] }, +{ source: [0xB053], NFC: [0xB053], NFD: [0x1101, 0x1173, 0x11B6], NFKC: [0xB053], NFKD: [0x1101, 0x1173, 0x11B6] }, +{ source: [0xB054], NFC: [0xB054], NFD: [0x1101, 0x1173, 0x11B7], NFKC: [0xB054], NFKD: [0x1101, 0x1173, 0x11B7] }, +{ source: [0xB055], NFC: [0xB055], NFD: [0x1101, 0x1173, 0x11B8], NFKC: [0xB055], NFKD: [0x1101, 0x1173, 0x11B8] }, +{ source: [0xB056], NFC: [0xB056], NFD: [0x1101, 0x1173, 0x11B9], NFKC: [0xB056], NFKD: [0x1101, 0x1173, 0x11B9] }, +{ source: [0xB057], NFC: [0xB057], NFD: [0x1101, 0x1173, 0x11BA], NFKC: [0xB057], NFKD: [0x1101, 0x1173, 0x11BA] }, +{ source: [0xB058], NFC: [0xB058], NFD: [0x1101, 0x1173, 0x11BB], NFKC: [0xB058], NFKD: [0x1101, 0x1173, 0x11BB] }, +{ source: [0xB059], NFC: [0xB059], NFD: [0x1101, 0x1173, 0x11BC], NFKC: [0xB059], NFKD: [0x1101, 0x1173, 0x11BC] }, +{ source: [0xB05A], NFC: [0xB05A], NFD: [0x1101, 0x1173, 0x11BD], NFKC: [0xB05A], NFKD: [0x1101, 0x1173, 0x11BD] }, +{ source: [0xB05B], NFC: [0xB05B], NFD: [0x1101, 0x1173, 0x11BE], NFKC: [0xB05B], NFKD: [0x1101, 0x1173, 0x11BE] }, +{ source: [0xB05C], NFC: [0xB05C], NFD: [0x1101, 0x1173, 0x11BF], NFKC: [0xB05C], NFKD: [0x1101, 0x1173, 0x11BF] }, +{ source: [0xB05D], NFC: [0xB05D], NFD: [0x1101, 0x1173, 0x11C0], NFKC: [0xB05D], NFKD: [0x1101, 0x1173, 0x11C0] }, +{ source: [0xB05E], NFC: [0xB05E], NFD: [0x1101, 0x1173, 0x11C1], NFKC: [0xB05E], NFKD: [0x1101, 0x1173, 0x11C1] }, +{ source: [0xB05F], NFC: [0xB05F], NFD: [0x1101, 0x1173, 0x11C2], NFKC: [0xB05F], NFKD: [0x1101, 0x1173, 0x11C2] }, +{ source: [0xB060], NFC: [0xB060], NFD: [0x1101, 0x1174], NFKC: [0xB060], NFKD: [0x1101, 0x1174] }, +{ source: [0xB061], NFC: [0xB061], NFD: [0x1101, 0x1174, 0x11A8], NFKC: [0xB061], NFKD: [0x1101, 0x1174, 0x11A8] }, +{ source: [0xB062], NFC: [0xB062], NFD: [0x1101, 0x1174, 0x11A9], NFKC: [0xB062], NFKD: [0x1101, 0x1174, 0x11A9] }, +{ source: [0xB063], NFC: [0xB063], NFD: [0x1101, 0x1174, 0x11AA], NFKC: [0xB063], NFKD: [0x1101, 0x1174, 0x11AA] }, +{ source: [0xB064], NFC: [0xB064], NFD: [0x1101, 0x1174, 0x11AB], NFKC: [0xB064], NFKD: [0x1101, 0x1174, 0x11AB] }, +{ source: [0xB065], NFC: [0xB065], NFD: [0x1101, 0x1174, 0x11AC], NFKC: [0xB065], NFKD: [0x1101, 0x1174, 0x11AC] }, +{ source: [0xB066], NFC: [0xB066], NFD: [0x1101, 0x1174, 0x11AD], NFKC: [0xB066], NFKD: [0x1101, 0x1174, 0x11AD] }, +{ source: [0xB067], NFC: [0xB067], NFD: [0x1101, 0x1174, 0x11AE], NFKC: [0xB067], NFKD: [0x1101, 0x1174, 0x11AE] }, +{ source: [0xB068], NFC: [0xB068], NFD: [0x1101, 0x1174, 0x11AF], NFKC: [0xB068], NFKD: [0x1101, 0x1174, 0x11AF] }, +{ source: [0xB069], NFC: [0xB069], NFD: [0x1101, 0x1174, 0x11B0], NFKC: [0xB069], NFKD: [0x1101, 0x1174, 0x11B0] }, +{ source: [0xB06A], NFC: [0xB06A], NFD: [0x1101, 0x1174, 0x11B1], NFKC: [0xB06A], NFKD: [0x1101, 0x1174, 0x11B1] }, +{ source: [0xB06B], NFC: [0xB06B], NFD: [0x1101, 0x1174, 0x11B2], NFKC: [0xB06B], NFKD: [0x1101, 0x1174, 0x11B2] }, +{ source: [0xB06C], NFC: [0xB06C], NFD: [0x1101, 0x1174, 0x11B3], NFKC: [0xB06C], NFKD: [0x1101, 0x1174, 0x11B3] }, +{ source: [0xB06D], NFC: [0xB06D], NFD: [0x1101, 0x1174, 0x11B4], NFKC: [0xB06D], NFKD: [0x1101, 0x1174, 0x11B4] }, +{ source: [0xB06E], NFC: [0xB06E], NFD: [0x1101, 0x1174, 0x11B5], NFKC: [0xB06E], NFKD: [0x1101, 0x1174, 0x11B5] }, +{ source: [0xB06F], NFC: [0xB06F], NFD: [0x1101, 0x1174, 0x11B6], NFKC: [0xB06F], NFKD: [0x1101, 0x1174, 0x11B6] }, +{ source: [0xB070], NFC: [0xB070], NFD: [0x1101, 0x1174, 0x11B7], NFKC: [0xB070], NFKD: [0x1101, 0x1174, 0x11B7] }, +{ source: [0xB071], NFC: [0xB071], NFD: [0x1101, 0x1174, 0x11B8], NFKC: [0xB071], NFKD: [0x1101, 0x1174, 0x11B8] }, +{ source: [0xB072], NFC: [0xB072], NFD: [0x1101, 0x1174, 0x11B9], NFKC: [0xB072], NFKD: [0x1101, 0x1174, 0x11B9] }, +{ source: [0xB073], NFC: [0xB073], NFD: [0x1101, 0x1174, 0x11BA], NFKC: [0xB073], NFKD: [0x1101, 0x1174, 0x11BA] }, +{ source: [0xB074], NFC: [0xB074], NFD: [0x1101, 0x1174, 0x11BB], NFKC: [0xB074], NFKD: [0x1101, 0x1174, 0x11BB] }, +{ source: [0xB075], NFC: [0xB075], NFD: [0x1101, 0x1174, 0x11BC], NFKC: [0xB075], NFKD: [0x1101, 0x1174, 0x11BC] }, +{ source: [0xB076], NFC: [0xB076], NFD: [0x1101, 0x1174, 0x11BD], NFKC: [0xB076], NFKD: [0x1101, 0x1174, 0x11BD] }, +{ source: [0xB077], NFC: [0xB077], NFD: [0x1101, 0x1174, 0x11BE], NFKC: [0xB077], NFKD: [0x1101, 0x1174, 0x11BE] }, +{ source: [0xB078], NFC: [0xB078], NFD: [0x1101, 0x1174, 0x11BF], NFKC: [0xB078], NFKD: [0x1101, 0x1174, 0x11BF] }, +{ source: [0xB079], NFC: [0xB079], NFD: [0x1101, 0x1174, 0x11C0], NFKC: [0xB079], NFKD: [0x1101, 0x1174, 0x11C0] }, +{ source: [0xB07A], NFC: [0xB07A], NFD: [0x1101, 0x1174, 0x11C1], NFKC: [0xB07A], NFKD: [0x1101, 0x1174, 0x11C1] }, +{ source: [0xB07B], NFC: [0xB07B], NFD: [0x1101, 0x1174, 0x11C2], NFKC: [0xB07B], NFKD: [0x1101, 0x1174, 0x11C2] }, +{ source: [0xB07C], NFC: [0xB07C], NFD: [0x1101, 0x1175], NFKC: [0xB07C], NFKD: [0x1101, 0x1175] }, +{ source: [0xB07D], NFC: [0xB07D], NFD: [0x1101, 0x1175, 0x11A8], NFKC: [0xB07D], NFKD: [0x1101, 0x1175, 0x11A8] }, +{ source: [0xB07E], NFC: [0xB07E], NFD: [0x1101, 0x1175, 0x11A9], NFKC: [0xB07E], NFKD: [0x1101, 0x1175, 0x11A9] }, +{ source: [0xB07F], NFC: [0xB07F], NFD: [0x1101, 0x1175, 0x11AA], NFKC: [0xB07F], NFKD: [0x1101, 0x1175, 0x11AA] }, +{ source: [0xB080], NFC: [0xB080], NFD: [0x1101, 0x1175, 0x11AB], NFKC: [0xB080], NFKD: [0x1101, 0x1175, 0x11AB] }, +{ source: [0xB081], NFC: [0xB081], NFD: [0x1101, 0x1175, 0x11AC], NFKC: [0xB081], NFKD: [0x1101, 0x1175, 0x11AC] }, +{ source: [0xB082], NFC: [0xB082], NFD: [0x1101, 0x1175, 0x11AD], NFKC: [0xB082], NFKD: [0x1101, 0x1175, 0x11AD] }, +{ source: [0xB083], NFC: [0xB083], NFD: [0x1101, 0x1175, 0x11AE], NFKC: [0xB083], NFKD: [0x1101, 0x1175, 0x11AE] }, +{ source: [0xB084], NFC: [0xB084], NFD: [0x1101, 0x1175, 0x11AF], NFKC: [0xB084], NFKD: [0x1101, 0x1175, 0x11AF] }, +{ source: [0xB085], NFC: [0xB085], NFD: [0x1101, 0x1175, 0x11B0], NFKC: [0xB085], NFKD: [0x1101, 0x1175, 0x11B0] }, +{ source: [0xB086], NFC: [0xB086], NFD: [0x1101, 0x1175, 0x11B1], NFKC: [0xB086], NFKD: [0x1101, 0x1175, 0x11B1] }, +{ source: [0xB087], NFC: [0xB087], NFD: [0x1101, 0x1175, 0x11B2], NFKC: [0xB087], NFKD: [0x1101, 0x1175, 0x11B2] }, +{ source: [0xB088], NFC: [0xB088], NFD: [0x1101, 0x1175, 0x11B3], NFKC: [0xB088], NFKD: [0x1101, 0x1175, 0x11B3] }, +{ source: [0xB089], NFC: [0xB089], NFD: [0x1101, 0x1175, 0x11B4], NFKC: [0xB089], NFKD: [0x1101, 0x1175, 0x11B4] }, +{ source: [0xB08A], NFC: [0xB08A], NFD: [0x1101, 0x1175, 0x11B5], NFKC: [0xB08A], NFKD: [0x1101, 0x1175, 0x11B5] }, +{ source: [0xB08B], NFC: [0xB08B], NFD: [0x1101, 0x1175, 0x11B6], NFKC: [0xB08B], NFKD: [0x1101, 0x1175, 0x11B6] }, +{ source: [0xB08C], NFC: [0xB08C], NFD: [0x1101, 0x1175, 0x11B7], NFKC: [0xB08C], NFKD: [0x1101, 0x1175, 0x11B7] }, +{ source: [0xB08D], NFC: [0xB08D], NFD: [0x1101, 0x1175, 0x11B8], NFKC: [0xB08D], NFKD: [0x1101, 0x1175, 0x11B8] }, +{ source: [0xB08E], NFC: [0xB08E], NFD: [0x1101, 0x1175, 0x11B9], NFKC: [0xB08E], NFKD: [0x1101, 0x1175, 0x11B9] }, +{ source: [0xB08F], NFC: [0xB08F], NFD: [0x1101, 0x1175, 0x11BA], NFKC: [0xB08F], NFKD: [0x1101, 0x1175, 0x11BA] }, +{ source: [0xB090], NFC: [0xB090], NFD: [0x1101, 0x1175, 0x11BB], NFKC: [0xB090], NFKD: [0x1101, 0x1175, 0x11BB] }, +{ source: [0xB091], NFC: [0xB091], NFD: [0x1101, 0x1175, 0x11BC], NFKC: [0xB091], NFKD: [0x1101, 0x1175, 0x11BC] }, +{ source: [0xB092], NFC: [0xB092], NFD: [0x1101, 0x1175, 0x11BD], NFKC: [0xB092], NFKD: [0x1101, 0x1175, 0x11BD] }, +{ source: [0xB093], NFC: [0xB093], NFD: [0x1101, 0x1175, 0x11BE], NFKC: [0xB093], NFKD: [0x1101, 0x1175, 0x11BE] }, +{ source: [0xB094], NFC: [0xB094], NFD: [0x1101, 0x1175, 0x11BF], NFKC: [0xB094], NFKD: [0x1101, 0x1175, 0x11BF] }, +{ source: [0xB095], NFC: [0xB095], NFD: [0x1101, 0x1175, 0x11C0], NFKC: [0xB095], NFKD: [0x1101, 0x1175, 0x11C0] }, +{ source: [0xB096], NFC: [0xB096], NFD: [0x1101, 0x1175, 0x11C1], NFKC: [0xB096], NFKD: [0x1101, 0x1175, 0x11C1] }, +{ source: [0xB097], NFC: [0xB097], NFD: [0x1101, 0x1175, 0x11C2], NFKC: [0xB097], NFKD: [0x1101, 0x1175, 0x11C2] }, +{ source: [0xB098], NFC: [0xB098], NFD: [0x1102, 0x1161], NFKC: [0xB098], NFKD: [0x1102, 0x1161] }, +{ source: [0xB099], NFC: [0xB099], NFD: [0x1102, 0x1161, 0x11A8], NFKC: [0xB099], NFKD: [0x1102, 0x1161, 0x11A8] }, +{ source: [0xB09A], NFC: [0xB09A], NFD: [0x1102, 0x1161, 0x11A9], NFKC: [0xB09A], NFKD: [0x1102, 0x1161, 0x11A9] }, +{ source: [0xB09B], NFC: [0xB09B], NFD: [0x1102, 0x1161, 0x11AA], NFKC: [0xB09B], NFKD: [0x1102, 0x1161, 0x11AA] }, +{ source: [0xB09C], NFC: [0xB09C], NFD: [0x1102, 0x1161, 0x11AB], NFKC: [0xB09C], NFKD: [0x1102, 0x1161, 0x11AB] }, +{ source: [0xB09D], NFC: [0xB09D], NFD: [0x1102, 0x1161, 0x11AC], NFKC: [0xB09D], NFKD: [0x1102, 0x1161, 0x11AC] }, +{ source: [0xB09E], NFC: [0xB09E], NFD: [0x1102, 0x1161, 0x11AD], NFKC: [0xB09E], NFKD: [0x1102, 0x1161, 0x11AD] }, +{ source: [0xB09F], NFC: [0xB09F], NFD: [0x1102, 0x1161, 0x11AE], NFKC: [0xB09F], NFKD: [0x1102, 0x1161, 0x11AE] }, +{ source: [0xB0A0], NFC: [0xB0A0], NFD: [0x1102, 0x1161, 0x11AF], NFKC: [0xB0A0], NFKD: [0x1102, 0x1161, 0x11AF] }, +{ source: [0xB0A1], NFC: [0xB0A1], NFD: [0x1102, 0x1161, 0x11B0], NFKC: [0xB0A1], NFKD: [0x1102, 0x1161, 0x11B0] }, +{ source: [0xB0A2], NFC: [0xB0A2], NFD: [0x1102, 0x1161, 0x11B1], NFKC: [0xB0A2], NFKD: [0x1102, 0x1161, 0x11B1] }, +{ source: [0xB0A3], NFC: [0xB0A3], NFD: [0x1102, 0x1161, 0x11B2], NFKC: [0xB0A3], NFKD: [0x1102, 0x1161, 0x11B2] }, +{ source: [0xB0A4], NFC: [0xB0A4], NFD: [0x1102, 0x1161, 0x11B3], NFKC: [0xB0A4], NFKD: [0x1102, 0x1161, 0x11B3] }, +{ source: [0xB0A5], NFC: [0xB0A5], NFD: [0x1102, 0x1161, 0x11B4], NFKC: [0xB0A5], NFKD: [0x1102, 0x1161, 0x11B4] }, +{ source: [0xB0A6], NFC: [0xB0A6], NFD: [0x1102, 0x1161, 0x11B5], NFKC: [0xB0A6], NFKD: [0x1102, 0x1161, 0x11B5] }, +{ source: [0xB0A7], NFC: [0xB0A7], NFD: [0x1102, 0x1161, 0x11B6], NFKC: [0xB0A7], NFKD: [0x1102, 0x1161, 0x11B6] }, +{ source: [0xB0A8], NFC: [0xB0A8], NFD: [0x1102, 0x1161, 0x11B7], NFKC: [0xB0A8], NFKD: [0x1102, 0x1161, 0x11B7] }, +{ source: [0xB0A9], NFC: [0xB0A9], NFD: [0x1102, 0x1161, 0x11B8], NFKC: [0xB0A9], NFKD: [0x1102, 0x1161, 0x11B8] }, +{ source: [0xB0AA], NFC: [0xB0AA], NFD: [0x1102, 0x1161, 0x11B9], NFKC: [0xB0AA], NFKD: [0x1102, 0x1161, 0x11B9] }, +{ source: [0xB0AB], NFC: [0xB0AB], NFD: [0x1102, 0x1161, 0x11BA], NFKC: [0xB0AB], NFKD: [0x1102, 0x1161, 0x11BA] }, +{ source: [0xB0AC], NFC: [0xB0AC], NFD: [0x1102, 0x1161, 0x11BB], NFKC: [0xB0AC], NFKD: [0x1102, 0x1161, 0x11BB] }, +{ source: [0xB0AD], NFC: [0xB0AD], NFD: [0x1102, 0x1161, 0x11BC], NFKC: [0xB0AD], NFKD: [0x1102, 0x1161, 0x11BC] }, +{ source: [0xB0AE], NFC: [0xB0AE], NFD: [0x1102, 0x1161, 0x11BD], NFKC: [0xB0AE], NFKD: [0x1102, 0x1161, 0x11BD] }, +{ source: [0xB0AF], NFC: [0xB0AF], NFD: [0x1102, 0x1161, 0x11BE], NFKC: [0xB0AF], NFKD: [0x1102, 0x1161, 0x11BE] }, +{ source: [0xB0B0], NFC: [0xB0B0], NFD: [0x1102, 0x1161, 0x11BF], NFKC: [0xB0B0], NFKD: [0x1102, 0x1161, 0x11BF] }, +{ source: [0xB0B1], NFC: [0xB0B1], NFD: [0x1102, 0x1161, 0x11C0], NFKC: [0xB0B1], NFKD: [0x1102, 0x1161, 0x11C0] }, +{ source: [0xB0B2], NFC: [0xB0B2], NFD: [0x1102, 0x1161, 0x11C1], NFKC: [0xB0B2], NFKD: [0x1102, 0x1161, 0x11C1] }, +{ source: [0xB0B3], NFC: [0xB0B3], NFD: [0x1102, 0x1161, 0x11C2], NFKC: [0xB0B3], NFKD: [0x1102, 0x1161, 0x11C2] }, +{ source: [0xB0B4], NFC: [0xB0B4], NFD: [0x1102, 0x1162], NFKC: [0xB0B4], NFKD: [0x1102, 0x1162] }, +{ source: [0xB0B5], NFC: [0xB0B5], NFD: [0x1102, 0x1162, 0x11A8], NFKC: [0xB0B5], NFKD: [0x1102, 0x1162, 0x11A8] }, +{ source: [0xB0B6], NFC: [0xB0B6], NFD: [0x1102, 0x1162, 0x11A9], NFKC: [0xB0B6], NFKD: [0x1102, 0x1162, 0x11A9] }, +{ source: [0xB0B7], NFC: [0xB0B7], NFD: [0x1102, 0x1162, 0x11AA], NFKC: [0xB0B7], NFKD: [0x1102, 0x1162, 0x11AA] }, +{ source: [0xB0B8], NFC: [0xB0B8], NFD: [0x1102, 0x1162, 0x11AB], NFKC: [0xB0B8], NFKD: [0x1102, 0x1162, 0x11AB] }, +{ source: [0xB0B9], NFC: [0xB0B9], NFD: [0x1102, 0x1162, 0x11AC], NFKC: [0xB0B9], NFKD: [0x1102, 0x1162, 0x11AC] }, +{ source: [0xB0BA], NFC: [0xB0BA], NFD: [0x1102, 0x1162, 0x11AD], NFKC: [0xB0BA], NFKD: [0x1102, 0x1162, 0x11AD] }, +{ source: [0xB0BB], NFC: [0xB0BB], NFD: [0x1102, 0x1162, 0x11AE], NFKC: [0xB0BB], NFKD: [0x1102, 0x1162, 0x11AE] }, +{ source: [0xB0BC], NFC: [0xB0BC], NFD: [0x1102, 0x1162, 0x11AF], NFKC: [0xB0BC], NFKD: [0x1102, 0x1162, 0x11AF] }, +{ source: [0xB0BD], NFC: [0xB0BD], NFD: [0x1102, 0x1162, 0x11B0], NFKC: [0xB0BD], NFKD: [0x1102, 0x1162, 0x11B0] }, +{ source: [0xB0BE], NFC: [0xB0BE], NFD: [0x1102, 0x1162, 0x11B1], NFKC: [0xB0BE], NFKD: [0x1102, 0x1162, 0x11B1] }, +{ source: [0xB0BF], NFC: [0xB0BF], NFD: [0x1102, 0x1162, 0x11B2], NFKC: [0xB0BF], NFKD: [0x1102, 0x1162, 0x11B2] }, +{ source: [0xB0C0], NFC: [0xB0C0], NFD: [0x1102, 0x1162, 0x11B3], NFKC: [0xB0C0], NFKD: [0x1102, 0x1162, 0x11B3] }, +{ source: [0xB0C1], NFC: [0xB0C1], NFD: [0x1102, 0x1162, 0x11B4], NFKC: [0xB0C1], NFKD: [0x1102, 0x1162, 0x11B4] }, +{ source: [0xB0C2], NFC: [0xB0C2], NFD: [0x1102, 0x1162, 0x11B5], NFKC: [0xB0C2], NFKD: [0x1102, 0x1162, 0x11B5] }, +{ source: [0xB0C3], NFC: [0xB0C3], NFD: [0x1102, 0x1162, 0x11B6], NFKC: [0xB0C3], NFKD: [0x1102, 0x1162, 0x11B6] }, +{ source: [0xB0C4], NFC: [0xB0C4], NFD: [0x1102, 0x1162, 0x11B7], NFKC: [0xB0C4], NFKD: [0x1102, 0x1162, 0x11B7] }, +{ source: [0xB0C5], NFC: [0xB0C5], NFD: [0x1102, 0x1162, 0x11B8], NFKC: [0xB0C5], NFKD: [0x1102, 0x1162, 0x11B8] }, +{ source: [0xB0C6], NFC: [0xB0C6], NFD: [0x1102, 0x1162, 0x11B9], NFKC: [0xB0C6], NFKD: [0x1102, 0x1162, 0x11B9] }, +{ source: [0xB0C7], NFC: [0xB0C7], NFD: [0x1102, 0x1162, 0x11BA], NFKC: [0xB0C7], NFKD: [0x1102, 0x1162, 0x11BA] }, +{ source: [0xB0C8], NFC: [0xB0C8], NFD: [0x1102, 0x1162, 0x11BB], NFKC: [0xB0C8], NFKD: [0x1102, 0x1162, 0x11BB] }, +{ source: [0xB0C9], NFC: [0xB0C9], NFD: [0x1102, 0x1162, 0x11BC], NFKC: [0xB0C9], NFKD: [0x1102, 0x1162, 0x11BC] }, +{ source: [0xB0CA], NFC: [0xB0CA], NFD: [0x1102, 0x1162, 0x11BD], NFKC: [0xB0CA], NFKD: [0x1102, 0x1162, 0x11BD] }, +{ source: [0xB0CB], NFC: [0xB0CB], NFD: [0x1102, 0x1162, 0x11BE], NFKC: [0xB0CB], NFKD: [0x1102, 0x1162, 0x11BE] }, +{ source: [0xB0CC], NFC: [0xB0CC], NFD: [0x1102, 0x1162, 0x11BF], NFKC: [0xB0CC], NFKD: [0x1102, 0x1162, 0x11BF] }, +{ source: [0xB0CD], NFC: [0xB0CD], NFD: [0x1102, 0x1162, 0x11C0], NFKC: [0xB0CD], NFKD: [0x1102, 0x1162, 0x11C0] }, +{ source: [0xB0CE], NFC: [0xB0CE], NFD: [0x1102, 0x1162, 0x11C1], NFKC: [0xB0CE], NFKD: [0x1102, 0x1162, 0x11C1] }, +{ source: [0xB0CF], NFC: [0xB0CF], NFD: [0x1102, 0x1162, 0x11C2], NFKC: [0xB0CF], NFKD: [0x1102, 0x1162, 0x11C2] }, +{ source: [0xB0D0], NFC: [0xB0D0], NFD: [0x1102, 0x1163], NFKC: [0xB0D0], NFKD: [0x1102, 0x1163] }, +{ source: [0xB0D1], NFC: [0xB0D1], NFD: [0x1102, 0x1163, 0x11A8], NFKC: [0xB0D1], NFKD: [0x1102, 0x1163, 0x11A8] }, +{ source: [0xB0D2], NFC: [0xB0D2], NFD: [0x1102, 0x1163, 0x11A9], NFKC: [0xB0D2], NFKD: [0x1102, 0x1163, 0x11A9] }, +{ source: [0xB0D3], NFC: [0xB0D3], NFD: [0x1102, 0x1163, 0x11AA], NFKC: [0xB0D3], NFKD: [0x1102, 0x1163, 0x11AA] }, +{ source: [0xB0D4], NFC: [0xB0D4], NFD: [0x1102, 0x1163, 0x11AB], NFKC: [0xB0D4], NFKD: [0x1102, 0x1163, 0x11AB] }, +{ source: [0xB0D5], NFC: [0xB0D5], NFD: [0x1102, 0x1163, 0x11AC], NFKC: [0xB0D5], NFKD: [0x1102, 0x1163, 0x11AC] }, +{ source: [0xB0D6], NFC: [0xB0D6], NFD: [0x1102, 0x1163, 0x11AD], NFKC: [0xB0D6], NFKD: [0x1102, 0x1163, 0x11AD] }, +{ source: [0xB0D7], NFC: [0xB0D7], NFD: [0x1102, 0x1163, 0x11AE], NFKC: [0xB0D7], NFKD: [0x1102, 0x1163, 0x11AE] }, +{ source: [0xB0D8], NFC: [0xB0D8], NFD: [0x1102, 0x1163, 0x11AF], NFKC: [0xB0D8], NFKD: [0x1102, 0x1163, 0x11AF] }, +{ source: [0xB0D9], NFC: [0xB0D9], NFD: [0x1102, 0x1163, 0x11B0], NFKC: [0xB0D9], NFKD: [0x1102, 0x1163, 0x11B0] }, +{ source: [0xB0DA], NFC: [0xB0DA], NFD: [0x1102, 0x1163, 0x11B1], NFKC: [0xB0DA], NFKD: [0x1102, 0x1163, 0x11B1] }, +{ source: [0xB0DB], NFC: [0xB0DB], NFD: [0x1102, 0x1163, 0x11B2], NFKC: [0xB0DB], NFKD: [0x1102, 0x1163, 0x11B2] }, +{ source: [0xB0DC], NFC: [0xB0DC], NFD: [0x1102, 0x1163, 0x11B3], NFKC: [0xB0DC], NFKD: [0x1102, 0x1163, 0x11B3] }, +{ source: [0xB0DD], NFC: [0xB0DD], NFD: [0x1102, 0x1163, 0x11B4], NFKC: [0xB0DD], NFKD: [0x1102, 0x1163, 0x11B4] }, +{ source: [0xB0DE], NFC: [0xB0DE], NFD: [0x1102, 0x1163, 0x11B5], NFKC: [0xB0DE], NFKD: [0x1102, 0x1163, 0x11B5] }, +{ source: [0xB0DF], NFC: [0xB0DF], NFD: [0x1102, 0x1163, 0x11B6], NFKC: [0xB0DF], NFKD: [0x1102, 0x1163, 0x11B6] }, +{ source: [0xB0E0], NFC: [0xB0E0], NFD: [0x1102, 0x1163, 0x11B7], NFKC: [0xB0E0], NFKD: [0x1102, 0x1163, 0x11B7] }, +{ source: [0xB0E1], NFC: [0xB0E1], NFD: [0x1102, 0x1163, 0x11B8], NFKC: [0xB0E1], NFKD: [0x1102, 0x1163, 0x11B8] }, +{ source: [0xB0E2], NFC: [0xB0E2], NFD: [0x1102, 0x1163, 0x11B9], NFKC: [0xB0E2], NFKD: [0x1102, 0x1163, 0x11B9] }, +{ source: [0xB0E3], NFC: [0xB0E3], NFD: [0x1102, 0x1163, 0x11BA], NFKC: [0xB0E3], NFKD: [0x1102, 0x1163, 0x11BA] }, +{ source: [0xB0E4], NFC: [0xB0E4], NFD: [0x1102, 0x1163, 0x11BB], NFKC: [0xB0E4], NFKD: [0x1102, 0x1163, 0x11BB] }, +{ source: [0xB0E5], NFC: [0xB0E5], NFD: [0x1102, 0x1163, 0x11BC], NFKC: [0xB0E5], NFKD: [0x1102, 0x1163, 0x11BC] }, +{ source: [0xB0E6], NFC: [0xB0E6], NFD: [0x1102, 0x1163, 0x11BD], NFKC: [0xB0E6], NFKD: [0x1102, 0x1163, 0x11BD] }, +{ source: [0xB0E7], NFC: [0xB0E7], NFD: [0x1102, 0x1163, 0x11BE], NFKC: [0xB0E7], NFKD: [0x1102, 0x1163, 0x11BE] }, +{ source: [0xB0E8], NFC: [0xB0E8], NFD: [0x1102, 0x1163, 0x11BF], NFKC: [0xB0E8], NFKD: [0x1102, 0x1163, 0x11BF] }, +{ source: [0xB0E9], NFC: [0xB0E9], NFD: [0x1102, 0x1163, 0x11C0], NFKC: [0xB0E9], NFKD: [0x1102, 0x1163, 0x11C0] }, +{ source: [0xB0EA], NFC: [0xB0EA], NFD: [0x1102, 0x1163, 0x11C1], NFKC: [0xB0EA], NFKD: [0x1102, 0x1163, 0x11C1] }, +{ source: [0xB0EB], NFC: [0xB0EB], NFD: [0x1102, 0x1163, 0x11C2], NFKC: [0xB0EB], NFKD: [0x1102, 0x1163, 0x11C2] }, +{ source: [0xB0EC], NFC: [0xB0EC], NFD: [0x1102, 0x1164], NFKC: [0xB0EC], NFKD: [0x1102, 0x1164] }, +{ source: [0xB0ED], NFC: [0xB0ED], NFD: [0x1102, 0x1164, 0x11A8], NFKC: [0xB0ED], NFKD: [0x1102, 0x1164, 0x11A8] }, +{ source: [0xB0EE], NFC: [0xB0EE], NFD: [0x1102, 0x1164, 0x11A9], NFKC: [0xB0EE], NFKD: [0x1102, 0x1164, 0x11A9] }, +{ source: [0xB0EF], NFC: [0xB0EF], NFD: [0x1102, 0x1164, 0x11AA], NFKC: [0xB0EF], NFKD: [0x1102, 0x1164, 0x11AA] }, +{ source: [0xB0F0], NFC: [0xB0F0], NFD: [0x1102, 0x1164, 0x11AB], NFKC: [0xB0F0], NFKD: [0x1102, 0x1164, 0x11AB] }, +{ source: [0xB0F1], NFC: [0xB0F1], NFD: [0x1102, 0x1164, 0x11AC], NFKC: [0xB0F1], NFKD: [0x1102, 0x1164, 0x11AC] }, +{ source: [0xB0F2], NFC: [0xB0F2], NFD: [0x1102, 0x1164, 0x11AD], NFKC: [0xB0F2], NFKD: [0x1102, 0x1164, 0x11AD] }, +{ source: [0xB0F3], NFC: [0xB0F3], NFD: [0x1102, 0x1164, 0x11AE], NFKC: [0xB0F3], NFKD: [0x1102, 0x1164, 0x11AE] }, +{ source: [0xB0F4], NFC: [0xB0F4], NFD: [0x1102, 0x1164, 0x11AF], NFKC: [0xB0F4], NFKD: [0x1102, 0x1164, 0x11AF] }, +{ source: [0xB0F5], NFC: [0xB0F5], NFD: [0x1102, 0x1164, 0x11B0], NFKC: [0xB0F5], NFKD: [0x1102, 0x1164, 0x11B0] }, +{ source: [0xB0F6], NFC: [0xB0F6], NFD: [0x1102, 0x1164, 0x11B1], NFKC: [0xB0F6], NFKD: [0x1102, 0x1164, 0x11B1] }, +{ source: [0xB0F7], NFC: [0xB0F7], NFD: [0x1102, 0x1164, 0x11B2], NFKC: [0xB0F7], NFKD: [0x1102, 0x1164, 0x11B2] }, +{ source: [0xB0F8], NFC: [0xB0F8], NFD: [0x1102, 0x1164, 0x11B3], NFKC: [0xB0F8], NFKD: [0x1102, 0x1164, 0x11B3] }, +{ source: [0xB0F9], NFC: [0xB0F9], NFD: [0x1102, 0x1164, 0x11B4], NFKC: [0xB0F9], NFKD: [0x1102, 0x1164, 0x11B4] }, +{ source: [0xB0FA], NFC: [0xB0FA], NFD: [0x1102, 0x1164, 0x11B5], NFKC: [0xB0FA], NFKD: [0x1102, 0x1164, 0x11B5] }, +{ source: [0xB0FB], NFC: [0xB0FB], NFD: [0x1102, 0x1164, 0x11B6], NFKC: [0xB0FB], NFKD: [0x1102, 0x1164, 0x11B6] }, +{ source: [0xB0FC], NFC: [0xB0FC], NFD: [0x1102, 0x1164, 0x11B7], NFKC: [0xB0FC], NFKD: [0x1102, 0x1164, 0x11B7] }, +{ source: [0xB0FD], NFC: [0xB0FD], NFD: [0x1102, 0x1164, 0x11B8], NFKC: [0xB0FD], NFKD: [0x1102, 0x1164, 0x11B8] }, +{ source: [0xB0FE], NFC: [0xB0FE], NFD: [0x1102, 0x1164, 0x11B9], NFKC: [0xB0FE], NFKD: [0x1102, 0x1164, 0x11B9] }, +{ source: [0xB0FF], NFC: [0xB0FF], NFD: [0x1102, 0x1164, 0x11BA], NFKC: [0xB0FF], NFKD: [0x1102, 0x1164, 0x11BA] }, +{ source: [0xB100], NFC: [0xB100], NFD: [0x1102, 0x1164, 0x11BB], NFKC: [0xB100], NFKD: [0x1102, 0x1164, 0x11BB] }, +{ source: [0xB101], NFC: [0xB101], NFD: [0x1102, 0x1164, 0x11BC], NFKC: [0xB101], NFKD: [0x1102, 0x1164, 0x11BC] }, +{ source: [0xB102], NFC: [0xB102], NFD: [0x1102, 0x1164, 0x11BD], NFKC: [0xB102], NFKD: [0x1102, 0x1164, 0x11BD] }, +{ source: [0xB103], NFC: [0xB103], NFD: [0x1102, 0x1164, 0x11BE], NFKC: [0xB103], NFKD: [0x1102, 0x1164, 0x11BE] }, +{ source: [0xB104], NFC: [0xB104], NFD: [0x1102, 0x1164, 0x11BF], NFKC: [0xB104], NFKD: [0x1102, 0x1164, 0x11BF] }, +{ source: [0xB105], NFC: [0xB105], NFD: [0x1102, 0x1164, 0x11C0], NFKC: [0xB105], NFKD: [0x1102, 0x1164, 0x11C0] }, +{ source: [0xB106], NFC: [0xB106], NFD: [0x1102, 0x1164, 0x11C1], NFKC: [0xB106], NFKD: [0x1102, 0x1164, 0x11C1] }, +{ source: [0xB107], NFC: [0xB107], NFD: [0x1102, 0x1164, 0x11C2], NFKC: [0xB107], NFKD: [0x1102, 0x1164, 0x11C2] }, +{ source: [0xB108], NFC: [0xB108], NFD: [0x1102, 0x1165], NFKC: [0xB108], NFKD: [0x1102, 0x1165] }, +{ source: [0xB109], NFC: [0xB109], NFD: [0x1102, 0x1165, 0x11A8], NFKC: [0xB109], NFKD: [0x1102, 0x1165, 0x11A8] }, +{ source: [0xB10A], NFC: [0xB10A], NFD: [0x1102, 0x1165, 0x11A9], NFKC: [0xB10A], NFKD: [0x1102, 0x1165, 0x11A9] }, +{ source: [0xB10B], NFC: [0xB10B], NFD: [0x1102, 0x1165, 0x11AA], NFKC: [0xB10B], NFKD: [0x1102, 0x1165, 0x11AA] }, +{ source: [0xB10C], NFC: [0xB10C], NFD: [0x1102, 0x1165, 0x11AB], NFKC: [0xB10C], NFKD: [0x1102, 0x1165, 0x11AB] }, +{ source: [0xB10D], NFC: [0xB10D], NFD: [0x1102, 0x1165, 0x11AC], NFKC: [0xB10D], NFKD: [0x1102, 0x1165, 0x11AC] }, +{ source: [0xB10E], NFC: [0xB10E], NFD: [0x1102, 0x1165, 0x11AD], NFKC: [0xB10E], NFKD: [0x1102, 0x1165, 0x11AD] }, +{ source: [0xB10F], NFC: [0xB10F], NFD: [0x1102, 0x1165, 0x11AE], NFKC: [0xB10F], NFKD: [0x1102, 0x1165, 0x11AE] }, +{ source: [0xB110], NFC: [0xB110], NFD: [0x1102, 0x1165, 0x11AF], NFKC: [0xB110], NFKD: [0x1102, 0x1165, 0x11AF] }, +{ source: [0xB111], NFC: [0xB111], NFD: [0x1102, 0x1165, 0x11B0], NFKC: [0xB111], NFKD: [0x1102, 0x1165, 0x11B0] }, +{ source: [0xB112], NFC: [0xB112], NFD: [0x1102, 0x1165, 0x11B1], NFKC: [0xB112], NFKD: [0x1102, 0x1165, 0x11B1] }, +{ source: [0xB113], NFC: [0xB113], NFD: [0x1102, 0x1165, 0x11B2], NFKC: [0xB113], NFKD: [0x1102, 0x1165, 0x11B2] }, +{ source: [0xB114], NFC: [0xB114], NFD: [0x1102, 0x1165, 0x11B3], NFKC: [0xB114], NFKD: [0x1102, 0x1165, 0x11B3] }, +{ source: [0xB115], NFC: [0xB115], NFD: [0x1102, 0x1165, 0x11B4], NFKC: [0xB115], NFKD: [0x1102, 0x1165, 0x11B4] }, +{ source: [0xB116], NFC: [0xB116], NFD: [0x1102, 0x1165, 0x11B5], NFKC: [0xB116], NFKD: [0x1102, 0x1165, 0x11B5] }, +{ source: [0xB117], NFC: [0xB117], NFD: [0x1102, 0x1165, 0x11B6], NFKC: [0xB117], NFKD: [0x1102, 0x1165, 0x11B6] }, +{ source: [0xB118], NFC: [0xB118], NFD: [0x1102, 0x1165, 0x11B7], NFKC: [0xB118], NFKD: [0x1102, 0x1165, 0x11B7] }, +{ source: [0xB119], NFC: [0xB119], NFD: [0x1102, 0x1165, 0x11B8], NFKC: [0xB119], NFKD: [0x1102, 0x1165, 0x11B8] }, +{ source: [0xB11A], NFC: [0xB11A], NFD: [0x1102, 0x1165, 0x11B9], NFKC: [0xB11A], NFKD: [0x1102, 0x1165, 0x11B9] }, +{ source: [0xB11B], NFC: [0xB11B], NFD: [0x1102, 0x1165, 0x11BA], NFKC: [0xB11B], NFKD: [0x1102, 0x1165, 0x11BA] }, +{ source: [0xB11C], NFC: [0xB11C], NFD: [0x1102, 0x1165, 0x11BB], NFKC: [0xB11C], NFKD: [0x1102, 0x1165, 0x11BB] }, +{ source: [0xB11D], NFC: [0xB11D], NFD: [0x1102, 0x1165, 0x11BC], NFKC: [0xB11D], NFKD: [0x1102, 0x1165, 0x11BC] }, +{ source: [0xB11E], NFC: [0xB11E], NFD: [0x1102, 0x1165, 0x11BD], NFKC: [0xB11E], NFKD: [0x1102, 0x1165, 0x11BD] }, +{ source: [0xB11F], NFC: [0xB11F], NFD: [0x1102, 0x1165, 0x11BE], NFKC: [0xB11F], NFKD: [0x1102, 0x1165, 0x11BE] }, +{ source: [0xB120], NFC: [0xB120], NFD: [0x1102, 0x1165, 0x11BF], NFKC: [0xB120], NFKD: [0x1102, 0x1165, 0x11BF] }, +{ source: [0xB121], NFC: [0xB121], NFD: [0x1102, 0x1165, 0x11C0], NFKC: [0xB121], NFKD: [0x1102, 0x1165, 0x11C0] }, +{ source: [0xB122], NFC: [0xB122], NFD: [0x1102, 0x1165, 0x11C1], NFKC: [0xB122], NFKD: [0x1102, 0x1165, 0x11C1] }, +{ source: [0xB123], NFC: [0xB123], NFD: [0x1102, 0x1165, 0x11C2], NFKC: [0xB123], NFKD: [0x1102, 0x1165, 0x11C2] }, +{ source: [0xB124], NFC: [0xB124], NFD: [0x1102, 0x1166], NFKC: [0xB124], NFKD: [0x1102, 0x1166] }, +{ source: [0xB125], NFC: [0xB125], NFD: [0x1102, 0x1166, 0x11A8], NFKC: [0xB125], NFKD: [0x1102, 0x1166, 0x11A8] }, +{ source: [0xB126], NFC: [0xB126], NFD: [0x1102, 0x1166, 0x11A9], NFKC: [0xB126], NFKD: [0x1102, 0x1166, 0x11A9] }, +{ source: [0xB127], NFC: [0xB127], NFD: [0x1102, 0x1166, 0x11AA], NFKC: [0xB127], NFKD: [0x1102, 0x1166, 0x11AA] }, +{ source: [0xB128], NFC: [0xB128], NFD: [0x1102, 0x1166, 0x11AB], NFKC: [0xB128], NFKD: [0x1102, 0x1166, 0x11AB] }, +{ source: [0xB129], NFC: [0xB129], NFD: [0x1102, 0x1166, 0x11AC], NFKC: [0xB129], NFKD: [0x1102, 0x1166, 0x11AC] }, +{ source: [0xB12A], NFC: [0xB12A], NFD: [0x1102, 0x1166, 0x11AD], NFKC: [0xB12A], NFKD: [0x1102, 0x1166, 0x11AD] }, +{ source: [0xB12B], NFC: [0xB12B], NFD: [0x1102, 0x1166, 0x11AE], NFKC: [0xB12B], NFKD: [0x1102, 0x1166, 0x11AE] }, +{ source: [0xB12C], NFC: [0xB12C], NFD: [0x1102, 0x1166, 0x11AF], NFKC: [0xB12C], NFKD: [0x1102, 0x1166, 0x11AF] }, +{ source: [0xB12D], NFC: [0xB12D], NFD: [0x1102, 0x1166, 0x11B0], NFKC: [0xB12D], NFKD: [0x1102, 0x1166, 0x11B0] }, +{ source: [0xB12E], NFC: [0xB12E], NFD: [0x1102, 0x1166, 0x11B1], NFKC: [0xB12E], NFKD: [0x1102, 0x1166, 0x11B1] }, +{ source: [0xB12F], NFC: [0xB12F], NFD: [0x1102, 0x1166, 0x11B2], NFKC: [0xB12F], NFKD: [0x1102, 0x1166, 0x11B2] }, +{ source: [0xB130], NFC: [0xB130], NFD: [0x1102, 0x1166, 0x11B3], NFKC: [0xB130], NFKD: [0x1102, 0x1166, 0x11B3] }, +{ source: [0xB131], NFC: [0xB131], NFD: [0x1102, 0x1166, 0x11B4], NFKC: [0xB131], NFKD: [0x1102, 0x1166, 0x11B4] }, +{ source: [0xB132], NFC: [0xB132], NFD: [0x1102, 0x1166, 0x11B5], NFKC: [0xB132], NFKD: [0x1102, 0x1166, 0x11B5] }, +{ source: [0xB133], NFC: [0xB133], NFD: [0x1102, 0x1166, 0x11B6], NFKC: [0xB133], NFKD: [0x1102, 0x1166, 0x11B6] }, +{ source: [0xB134], NFC: [0xB134], NFD: [0x1102, 0x1166, 0x11B7], NFKC: [0xB134], NFKD: [0x1102, 0x1166, 0x11B7] }, +{ source: [0xB135], NFC: [0xB135], NFD: [0x1102, 0x1166, 0x11B8], NFKC: [0xB135], NFKD: [0x1102, 0x1166, 0x11B8] }, +{ source: [0xB136], NFC: [0xB136], NFD: [0x1102, 0x1166, 0x11B9], NFKC: [0xB136], NFKD: [0x1102, 0x1166, 0x11B9] }, +{ source: [0xB137], NFC: [0xB137], NFD: [0x1102, 0x1166, 0x11BA], NFKC: [0xB137], NFKD: [0x1102, 0x1166, 0x11BA] }, +{ source: [0xB138], NFC: [0xB138], NFD: [0x1102, 0x1166, 0x11BB], NFKC: [0xB138], NFKD: [0x1102, 0x1166, 0x11BB] }, +{ source: [0xB139], NFC: [0xB139], NFD: [0x1102, 0x1166, 0x11BC], NFKC: [0xB139], NFKD: [0x1102, 0x1166, 0x11BC] }, +{ source: [0xB13A], NFC: [0xB13A], NFD: [0x1102, 0x1166, 0x11BD], NFKC: [0xB13A], NFKD: [0x1102, 0x1166, 0x11BD] }, +{ source: [0xB13B], NFC: [0xB13B], NFD: [0x1102, 0x1166, 0x11BE], NFKC: [0xB13B], NFKD: [0x1102, 0x1166, 0x11BE] }, +{ source: [0xB13C], NFC: [0xB13C], NFD: [0x1102, 0x1166, 0x11BF], NFKC: [0xB13C], NFKD: [0x1102, 0x1166, 0x11BF] }, +{ source: [0xB13D], NFC: [0xB13D], NFD: [0x1102, 0x1166, 0x11C0], NFKC: [0xB13D], NFKD: [0x1102, 0x1166, 0x11C0] }, +{ source: [0xB13E], NFC: [0xB13E], NFD: [0x1102, 0x1166, 0x11C1], NFKC: [0xB13E], NFKD: [0x1102, 0x1166, 0x11C1] }, +{ source: [0xB13F], NFC: [0xB13F], NFD: [0x1102, 0x1166, 0x11C2], NFKC: [0xB13F], NFKD: [0x1102, 0x1166, 0x11C2] }, +{ source: [0xB140], NFC: [0xB140], NFD: [0x1102, 0x1167], NFKC: [0xB140], NFKD: [0x1102, 0x1167] }, +{ source: [0xB141], NFC: [0xB141], NFD: [0x1102, 0x1167, 0x11A8], NFKC: [0xB141], NFKD: [0x1102, 0x1167, 0x11A8] }, +{ source: [0xB142], NFC: [0xB142], NFD: [0x1102, 0x1167, 0x11A9], NFKC: [0xB142], NFKD: [0x1102, 0x1167, 0x11A9] }, +{ source: [0xB143], NFC: [0xB143], NFD: [0x1102, 0x1167, 0x11AA], NFKC: [0xB143], NFKD: [0x1102, 0x1167, 0x11AA] }, +{ source: [0xB144], NFC: [0xB144], NFD: [0x1102, 0x1167, 0x11AB], NFKC: [0xB144], NFKD: [0x1102, 0x1167, 0x11AB] }, +{ source: [0xB145], NFC: [0xB145], NFD: [0x1102, 0x1167, 0x11AC], NFKC: [0xB145], NFKD: [0x1102, 0x1167, 0x11AC] }, +{ source: [0xB146], NFC: [0xB146], NFD: [0x1102, 0x1167, 0x11AD], NFKC: [0xB146], NFKD: [0x1102, 0x1167, 0x11AD] }, +{ source: [0xB147], NFC: [0xB147], NFD: [0x1102, 0x1167, 0x11AE], NFKC: [0xB147], NFKD: [0x1102, 0x1167, 0x11AE] }, +{ source: [0xB148], NFC: [0xB148], NFD: [0x1102, 0x1167, 0x11AF], NFKC: [0xB148], NFKD: [0x1102, 0x1167, 0x11AF] }, +{ source: [0xB149], NFC: [0xB149], NFD: [0x1102, 0x1167, 0x11B0], NFKC: [0xB149], NFKD: [0x1102, 0x1167, 0x11B0] }, +{ source: [0xB14A], NFC: [0xB14A], NFD: [0x1102, 0x1167, 0x11B1], NFKC: [0xB14A], NFKD: [0x1102, 0x1167, 0x11B1] }, +{ source: [0xB14B], NFC: [0xB14B], NFD: [0x1102, 0x1167, 0x11B2], NFKC: [0xB14B], NFKD: [0x1102, 0x1167, 0x11B2] }, +{ source: [0xB14C], NFC: [0xB14C], NFD: [0x1102, 0x1167, 0x11B3], NFKC: [0xB14C], NFKD: [0x1102, 0x1167, 0x11B3] }, +{ source: [0xB14D], NFC: [0xB14D], NFD: [0x1102, 0x1167, 0x11B4], NFKC: [0xB14D], NFKD: [0x1102, 0x1167, 0x11B4] }, +{ source: [0xB14E], NFC: [0xB14E], NFD: [0x1102, 0x1167, 0x11B5], NFKC: [0xB14E], NFKD: [0x1102, 0x1167, 0x11B5] }, +{ source: [0xB14F], NFC: [0xB14F], NFD: [0x1102, 0x1167, 0x11B6], NFKC: [0xB14F], NFKD: [0x1102, 0x1167, 0x11B6] }, +{ source: [0xB150], NFC: [0xB150], NFD: [0x1102, 0x1167, 0x11B7], NFKC: [0xB150], NFKD: [0x1102, 0x1167, 0x11B7] }, +{ source: [0xB151], NFC: [0xB151], NFD: [0x1102, 0x1167, 0x11B8], NFKC: [0xB151], NFKD: [0x1102, 0x1167, 0x11B8] }, +{ source: [0xB152], NFC: [0xB152], NFD: [0x1102, 0x1167, 0x11B9], NFKC: [0xB152], NFKD: [0x1102, 0x1167, 0x11B9] }, +{ source: [0xB153], NFC: [0xB153], NFD: [0x1102, 0x1167, 0x11BA], NFKC: [0xB153], NFKD: [0x1102, 0x1167, 0x11BA] }, +{ source: [0xB154], NFC: [0xB154], NFD: [0x1102, 0x1167, 0x11BB], NFKC: [0xB154], NFKD: [0x1102, 0x1167, 0x11BB] }, +{ source: [0xB155], NFC: [0xB155], NFD: [0x1102, 0x1167, 0x11BC], NFKC: [0xB155], NFKD: [0x1102, 0x1167, 0x11BC] }, +{ source: [0xB156], NFC: [0xB156], NFD: [0x1102, 0x1167, 0x11BD], NFKC: [0xB156], NFKD: [0x1102, 0x1167, 0x11BD] }, +{ source: [0xB157], NFC: [0xB157], NFD: [0x1102, 0x1167, 0x11BE], NFKC: [0xB157], NFKD: [0x1102, 0x1167, 0x11BE] }, +{ source: [0xB158], NFC: [0xB158], NFD: [0x1102, 0x1167, 0x11BF], NFKC: [0xB158], NFKD: [0x1102, 0x1167, 0x11BF] }, +{ source: [0xB159], NFC: [0xB159], NFD: [0x1102, 0x1167, 0x11C0], NFKC: [0xB159], NFKD: [0x1102, 0x1167, 0x11C0] }, +{ source: [0xB15A], NFC: [0xB15A], NFD: [0x1102, 0x1167, 0x11C1], NFKC: [0xB15A], NFKD: [0x1102, 0x1167, 0x11C1] }, +{ source: [0xB15B], NFC: [0xB15B], NFD: [0x1102, 0x1167, 0x11C2], NFKC: [0xB15B], NFKD: [0x1102, 0x1167, 0x11C2] }, +{ source: [0xB15C], NFC: [0xB15C], NFD: [0x1102, 0x1168], NFKC: [0xB15C], NFKD: [0x1102, 0x1168] }, +{ source: [0xB15D], NFC: [0xB15D], NFD: [0x1102, 0x1168, 0x11A8], NFKC: [0xB15D], NFKD: [0x1102, 0x1168, 0x11A8] }, +{ source: [0xB15E], NFC: [0xB15E], NFD: [0x1102, 0x1168, 0x11A9], NFKC: [0xB15E], NFKD: [0x1102, 0x1168, 0x11A9] }, +{ source: [0xB15F], NFC: [0xB15F], NFD: [0x1102, 0x1168, 0x11AA], NFKC: [0xB15F], NFKD: [0x1102, 0x1168, 0x11AA] }, +{ source: [0xB160], NFC: [0xB160], NFD: [0x1102, 0x1168, 0x11AB], NFKC: [0xB160], NFKD: [0x1102, 0x1168, 0x11AB] }, +{ source: [0xB161], NFC: [0xB161], NFD: [0x1102, 0x1168, 0x11AC], NFKC: [0xB161], NFKD: [0x1102, 0x1168, 0x11AC] }, +{ source: [0xB162], NFC: [0xB162], NFD: [0x1102, 0x1168, 0x11AD], NFKC: [0xB162], NFKD: [0x1102, 0x1168, 0x11AD] }, +{ source: [0xB163], NFC: [0xB163], NFD: [0x1102, 0x1168, 0x11AE], NFKC: [0xB163], NFKD: [0x1102, 0x1168, 0x11AE] }, +{ source: [0xB164], NFC: [0xB164], NFD: [0x1102, 0x1168, 0x11AF], NFKC: [0xB164], NFKD: [0x1102, 0x1168, 0x11AF] }, +{ source: [0xB165], NFC: [0xB165], NFD: [0x1102, 0x1168, 0x11B0], NFKC: [0xB165], NFKD: [0x1102, 0x1168, 0x11B0] }, +{ source: [0xB166], NFC: [0xB166], NFD: [0x1102, 0x1168, 0x11B1], NFKC: [0xB166], NFKD: [0x1102, 0x1168, 0x11B1] }, +{ source: [0xB167], NFC: [0xB167], NFD: [0x1102, 0x1168, 0x11B2], NFKC: [0xB167], NFKD: [0x1102, 0x1168, 0x11B2] }, +{ source: [0xB168], NFC: [0xB168], NFD: [0x1102, 0x1168, 0x11B3], NFKC: [0xB168], NFKD: [0x1102, 0x1168, 0x11B3] }, +{ source: [0xB169], NFC: [0xB169], NFD: [0x1102, 0x1168, 0x11B4], NFKC: [0xB169], NFKD: [0x1102, 0x1168, 0x11B4] }, +{ source: [0xB16A], NFC: [0xB16A], NFD: [0x1102, 0x1168, 0x11B5], NFKC: [0xB16A], NFKD: [0x1102, 0x1168, 0x11B5] }, +{ source: [0xB16B], NFC: [0xB16B], NFD: [0x1102, 0x1168, 0x11B6], NFKC: [0xB16B], NFKD: [0x1102, 0x1168, 0x11B6] }, +{ source: [0xB16C], NFC: [0xB16C], NFD: [0x1102, 0x1168, 0x11B7], NFKC: [0xB16C], NFKD: [0x1102, 0x1168, 0x11B7] }, +{ source: [0xB16D], NFC: [0xB16D], NFD: [0x1102, 0x1168, 0x11B8], NFKC: [0xB16D], NFKD: [0x1102, 0x1168, 0x11B8] }, +{ source: [0xB16E], NFC: [0xB16E], NFD: [0x1102, 0x1168, 0x11B9], NFKC: [0xB16E], NFKD: [0x1102, 0x1168, 0x11B9] }, +{ source: [0xB16F], NFC: [0xB16F], NFD: [0x1102, 0x1168, 0x11BA], NFKC: [0xB16F], NFKD: [0x1102, 0x1168, 0x11BA] }, +{ source: [0xB170], NFC: [0xB170], NFD: [0x1102, 0x1168, 0x11BB], NFKC: [0xB170], NFKD: [0x1102, 0x1168, 0x11BB] }, +{ source: [0xB171], NFC: [0xB171], NFD: [0x1102, 0x1168, 0x11BC], NFKC: [0xB171], NFKD: [0x1102, 0x1168, 0x11BC] }, +{ source: [0xB172], NFC: [0xB172], NFD: [0x1102, 0x1168, 0x11BD], NFKC: [0xB172], NFKD: [0x1102, 0x1168, 0x11BD] }, +{ source: [0xB173], NFC: [0xB173], NFD: [0x1102, 0x1168, 0x11BE], NFKC: [0xB173], NFKD: [0x1102, 0x1168, 0x11BE] }, +{ source: [0xB174], NFC: [0xB174], NFD: [0x1102, 0x1168, 0x11BF], NFKC: [0xB174], NFKD: [0x1102, 0x1168, 0x11BF] }, +{ source: [0xB175], NFC: [0xB175], NFD: [0x1102, 0x1168, 0x11C0], NFKC: [0xB175], NFKD: [0x1102, 0x1168, 0x11C0] }, +{ source: [0xB176], NFC: [0xB176], NFD: [0x1102, 0x1168, 0x11C1], NFKC: [0xB176], NFKD: [0x1102, 0x1168, 0x11C1] }, +{ source: [0xB177], NFC: [0xB177], NFD: [0x1102, 0x1168, 0x11C2], NFKC: [0xB177], NFKD: [0x1102, 0x1168, 0x11C2] }, +{ source: [0xB178], NFC: [0xB178], NFD: [0x1102, 0x1169], NFKC: [0xB178], NFKD: [0x1102, 0x1169] }, +{ source: [0xB179], NFC: [0xB179], NFD: [0x1102, 0x1169, 0x11A8], NFKC: [0xB179], NFKD: [0x1102, 0x1169, 0x11A8] }, +{ source: [0xB17A], NFC: [0xB17A], NFD: [0x1102, 0x1169, 0x11A9], NFKC: [0xB17A], NFKD: [0x1102, 0x1169, 0x11A9] }, +{ source: [0xB17B], NFC: [0xB17B], NFD: [0x1102, 0x1169, 0x11AA], NFKC: [0xB17B], NFKD: [0x1102, 0x1169, 0x11AA] }, +{ source: [0xB17C], NFC: [0xB17C], NFD: [0x1102, 0x1169, 0x11AB], NFKC: [0xB17C], NFKD: [0x1102, 0x1169, 0x11AB] }, +{ source: [0xB17D], NFC: [0xB17D], NFD: [0x1102, 0x1169, 0x11AC], NFKC: [0xB17D], NFKD: [0x1102, 0x1169, 0x11AC] }, +{ source: [0xB17E], NFC: [0xB17E], NFD: [0x1102, 0x1169, 0x11AD], NFKC: [0xB17E], NFKD: [0x1102, 0x1169, 0x11AD] }, +{ source: [0xB17F], NFC: [0xB17F], NFD: [0x1102, 0x1169, 0x11AE], NFKC: [0xB17F], NFKD: [0x1102, 0x1169, 0x11AE] }, +{ source: [0xB180], NFC: [0xB180], NFD: [0x1102, 0x1169, 0x11AF], NFKC: [0xB180], NFKD: [0x1102, 0x1169, 0x11AF] }, +{ source: [0xB181], NFC: [0xB181], NFD: [0x1102, 0x1169, 0x11B0], NFKC: [0xB181], NFKD: [0x1102, 0x1169, 0x11B0] }, +{ source: [0xB182], NFC: [0xB182], NFD: [0x1102, 0x1169, 0x11B1], NFKC: [0xB182], NFKD: [0x1102, 0x1169, 0x11B1] }, +{ source: [0xB183], NFC: [0xB183], NFD: [0x1102, 0x1169, 0x11B2], NFKC: [0xB183], NFKD: [0x1102, 0x1169, 0x11B2] }, +{ source: [0xB184], NFC: [0xB184], NFD: [0x1102, 0x1169, 0x11B3], NFKC: [0xB184], NFKD: [0x1102, 0x1169, 0x11B3] }, +{ source: [0xB185], NFC: [0xB185], NFD: [0x1102, 0x1169, 0x11B4], NFKC: [0xB185], NFKD: [0x1102, 0x1169, 0x11B4] }, +{ source: [0xB186], NFC: [0xB186], NFD: [0x1102, 0x1169, 0x11B5], NFKC: [0xB186], NFKD: [0x1102, 0x1169, 0x11B5] }, +{ source: [0xB187], NFC: [0xB187], NFD: [0x1102, 0x1169, 0x11B6], NFKC: [0xB187], NFKD: [0x1102, 0x1169, 0x11B6] }, +{ source: [0xB188], NFC: [0xB188], NFD: [0x1102, 0x1169, 0x11B7], NFKC: [0xB188], NFKD: [0x1102, 0x1169, 0x11B7] }, +{ source: [0xB189], NFC: [0xB189], NFD: [0x1102, 0x1169, 0x11B8], NFKC: [0xB189], NFKD: [0x1102, 0x1169, 0x11B8] }, +{ source: [0xB18A], NFC: [0xB18A], NFD: [0x1102, 0x1169, 0x11B9], NFKC: [0xB18A], NFKD: [0x1102, 0x1169, 0x11B9] }, +{ source: [0xB18B], NFC: [0xB18B], NFD: [0x1102, 0x1169, 0x11BA], NFKC: [0xB18B], NFKD: [0x1102, 0x1169, 0x11BA] }, +{ source: [0xB18C], NFC: [0xB18C], NFD: [0x1102, 0x1169, 0x11BB], NFKC: [0xB18C], NFKD: [0x1102, 0x1169, 0x11BB] }, +{ source: [0xB18D], NFC: [0xB18D], NFD: [0x1102, 0x1169, 0x11BC], NFKC: [0xB18D], NFKD: [0x1102, 0x1169, 0x11BC] }, +{ source: [0xB18E], NFC: [0xB18E], NFD: [0x1102, 0x1169, 0x11BD], NFKC: [0xB18E], NFKD: [0x1102, 0x1169, 0x11BD] }, +{ source: [0xB18F], NFC: [0xB18F], NFD: [0x1102, 0x1169, 0x11BE], NFKC: [0xB18F], NFKD: [0x1102, 0x1169, 0x11BE] }, +{ source: [0xB190], NFC: [0xB190], NFD: [0x1102, 0x1169, 0x11BF], NFKC: [0xB190], NFKD: [0x1102, 0x1169, 0x11BF] }, +{ source: [0xB191], NFC: [0xB191], NFD: [0x1102, 0x1169, 0x11C0], NFKC: [0xB191], NFKD: [0x1102, 0x1169, 0x11C0] }, +{ source: [0xB192], NFC: [0xB192], NFD: [0x1102, 0x1169, 0x11C1], NFKC: [0xB192], NFKD: [0x1102, 0x1169, 0x11C1] }, +{ source: [0xB193], NFC: [0xB193], NFD: [0x1102, 0x1169, 0x11C2], NFKC: [0xB193], NFKD: [0x1102, 0x1169, 0x11C2] }, +{ source: [0xB194], NFC: [0xB194], NFD: [0x1102, 0x116A], NFKC: [0xB194], NFKD: [0x1102, 0x116A] }, +{ source: [0xB195], NFC: [0xB195], NFD: [0x1102, 0x116A, 0x11A8], NFKC: [0xB195], NFKD: [0x1102, 0x116A, 0x11A8] }, +{ source: [0xB196], NFC: [0xB196], NFD: [0x1102, 0x116A, 0x11A9], NFKC: [0xB196], NFKD: [0x1102, 0x116A, 0x11A9] }, +{ source: [0xB197], NFC: [0xB197], NFD: [0x1102, 0x116A, 0x11AA], NFKC: [0xB197], NFKD: [0x1102, 0x116A, 0x11AA] }, +{ source: [0xB198], NFC: [0xB198], NFD: [0x1102, 0x116A, 0x11AB], NFKC: [0xB198], NFKD: [0x1102, 0x116A, 0x11AB] }, +{ source: [0xB199], NFC: [0xB199], NFD: [0x1102, 0x116A, 0x11AC], NFKC: [0xB199], NFKD: [0x1102, 0x116A, 0x11AC] }, +{ source: [0xB19A], NFC: [0xB19A], NFD: [0x1102, 0x116A, 0x11AD], NFKC: [0xB19A], NFKD: [0x1102, 0x116A, 0x11AD] }, +{ source: [0xB19B], NFC: [0xB19B], NFD: [0x1102, 0x116A, 0x11AE], NFKC: [0xB19B], NFKD: [0x1102, 0x116A, 0x11AE] }, +{ source: [0xB19C], NFC: [0xB19C], NFD: [0x1102, 0x116A, 0x11AF], NFKC: [0xB19C], NFKD: [0x1102, 0x116A, 0x11AF] }, +{ source: [0xB19D], NFC: [0xB19D], NFD: [0x1102, 0x116A, 0x11B0], NFKC: [0xB19D], NFKD: [0x1102, 0x116A, 0x11B0] }, +{ source: [0xB19E], NFC: [0xB19E], NFD: [0x1102, 0x116A, 0x11B1], NFKC: [0xB19E], NFKD: [0x1102, 0x116A, 0x11B1] }, +{ source: [0xB19F], NFC: [0xB19F], NFD: [0x1102, 0x116A, 0x11B2], NFKC: [0xB19F], NFKD: [0x1102, 0x116A, 0x11B2] }, +{ source: [0xB1A0], NFC: [0xB1A0], NFD: [0x1102, 0x116A, 0x11B3], NFKC: [0xB1A0], NFKD: [0x1102, 0x116A, 0x11B3] }, +{ source: [0xB1A1], NFC: [0xB1A1], NFD: [0x1102, 0x116A, 0x11B4], NFKC: [0xB1A1], NFKD: [0x1102, 0x116A, 0x11B4] }, +{ source: [0xB1A2], NFC: [0xB1A2], NFD: [0x1102, 0x116A, 0x11B5], NFKC: [0xB1A2], NFKD: [0x1102, 0x116A, 0x11B5] }, +{ source: [0xB1A3], NFC: [0xB1A3], NFD: [0x1102, 0x116A, 0x11B6], NFKC: [0xB1A3], NFKD: [0x1102, 0x116A, 0x11B6] }, +{ source: [0xB1A4], NFC: [0xB1A4], NFD: [0x1102, 0x116A, 0x11B7], NFKC: [0xB1A4], NFKD: [0x1102, 0x116A, 0x11B7] }, +{ source: [0xB1A5], NFC: [0xB1A5], NFD: [0x1102, 0x116A, 0x11B8], NFKC: [0xB1A5], NFKD: [0x1102, 0x116A, 0x11B8] }, +{ source: [0xB1A6], NFC: [0xB1A6], NFD: [0x1102, 0x116A, 0x11B9], NFKC: [0xB1A6], NFKD: [0x1102, 0x116A, 0x11B9] }, +{ source: [0xB1A7], NFC: [0xB1A7], NFD: [0x1102, 0x116A, 0x11BA], NFKC: [0xB1A7], NFKD: [0x1102, 0x116A, 0x11BA] }, +{ source: [0xB1A8], NFC: [0xB1A8], NFD: [0x1102, 0x116A, 0x11BB], NFKC: [0xB1A8], NFKD: [0x1102, 0x116A, 0x11BB] }, +{ source: [0xB1A9], NFC: [0xB1A9], NFD: [0x1102, 0x116A, 0x11BC], NFKC: [0xB1A9], NFKD: [0x1102, 0x116A, 0x11BC] }, +{ source: [0xB1AA], NFC: [0xB1AA], NFD: [0x1102, 0x116A, 0x11BD], NFKC: [0xB1AA], NFKD: [0x1102, 0x116A, 0x11BD] }, +{ source: [0xB1AB], NFC: [0xB1AB], NFD: [0x1102, 0x116A, 0x11BE], NFKC: [0xB1AB], NFKD: [0x1102, 0x116A, 0x11BE] }, +{ source: [0xB1AC], NFC: [0xB1AC], NFD: [0x1102, 0x116A, 0x11BF], NFKC: [0xB1AC], NFKD: [0x1102, 0x116A, 0x11BF] }, +{ source: [0xB1AD], NFC: [0xB1AD], NFD: [0x1102, 0x116A, 0x11C0], NFKC: [0xB1AD], NFKD: [0x1102, 0x116A, 0x11C0] }, +{ source: [0xB1AE], NFC: [0xB1AE], NFD: [0x1102, 0x116A, 0x11C1], NFKC: [0xB1AE], NFKD: [0x1102, 0x116A, 0x11C1] }, +{ source: [0xB1AF], NFC: [0xB1AF], NFD: [0x1102, 0x116A, 0x11C2], NFKC: [0xB1AF], NFKD: [0x1102, 0x116A, 0x11C2] }, +{ source: [0xB1B0], NFC: [0xB1B0], NFD: [0x1102, 0x116B], NFKC: [0xB1B0], NFKD: [0x1102, 0x116B] }, +{ source: [0xB1B1], NFC: [0xB1B1], NFD: [0x1102, 0x116B, 0x11A8], NFKC: [0xB1B1], NFKD: [0x1102, 0x116B, 0x11A8] }, +{ source: [0xB1B2], NFC: [0xB1B2], NFD: [0x1102, 0x116B, 0x11A9], NFKC: [0xB1B2], NFKD: [0x1102, 0x116B, 0x11A9] }, +{ source: [0xB1B3], NFC: [0xB1B3], NFD: [0x1102, 0x116B, 0x11AA], NFKC: [0xB1B3], NFKD: [0x1102, 0x116B, 0x11AA] }, +{ source: [0xB1B4], NFC: [0xB1B4], NFD: [0x1102, 0x116B, 0x11AB], NFKC: [0xB1B4], NFKD: [0x1102, 0x116B, 0x11AB] }, +{ source: [0xB1B5], NFC: [0xB1B5], NFD: [0x1102, 0x116B, 0x11AC], NFKC: [0xB1B5], NFKD: [0x1102, 0x116B, 0x11AC] }, +{ source: [0xB1B6], NFC: [0xB1B6], NFD: [0x1102, 0x116B, 0x11AD], NFKC: [0xB1B6], NFKD: [0x1102, 0x116B, 0x11AD] }, +{ source: [0xB1B7], NFC: [0xB1B7], NFD: [0x1102, 0x116B, 0x11AE], NFKC: [0xB1B7], NFKD: [0x1102, 0x116B, 0x11AE] }, +{ source: [0xB1B8], NFC: [0xB1B8], NFD: [0x1102, 0x116B, 0x11AF], NFKC: [0xB1B8], NFKD: [0x1102, 0x116B, 0x11AF] }, +{ source: [0xB1B9], NFC: [0xB1B9], NFD: [0x1102, 0x116B, 0x11B0], NFKC: [0xB1B9], NFKD: [0x1102, 0x116B, 0x11B0] }, +{ source: [0xB1BA], NFC: [0xB1BA], NFD: [0x1102, 0x116B, 0x11B1], NFKC: [0xB1BA], NFKD: [0x1102, 0x116B, 0x11B1] }, +{ source: [0xB1BB], NFC: [0xB1BB], NFD: [0x1102, 0x116B, 0x11B2], NFKC: [0xB1BB], NFKD: [0x1102, 0x116B, 0x11B2] }, +{ source: [0xB1BC], NFC: [0xB1BC], NFD: [0x1102, 0x116B, 0x11B3], NFKC: [0xB1BC], NFKD: [0x1102, 0x116B, 0x11B3] }, +{ source: [0xB1BD], NFC: [0xB1BD], NFD: [0x1102, 0x116B, 0x11B4], NFKC: [0xB1BD], NFKD: [0x1102, 0x116B, 0x11B4] }, +{ source: [0xB1BE], NFC: [0xB1BE], NFD: [0x1102, 0x116B, 0x11B5], NFKC: [0xB1BE], NFKD: [0x1102, 0x116B, 0x11B5] }, +{ source: [0xB1BF], NFC: [0xB1BF], NFD: [0x1102, 0x116B, 0x11B6], NFKC: [0xB1BF], NFKD: [0x1102, 0x116B, 0x11B6] }, +{ source: [0xB1C0], NFC: [0xB1C0], NFD: [0x1102, 0x116B, 0x11B7], NFKC: [0xB1C0], NFKD: [0x1102, 0x116B, 0x11B7] }, +{ source: [0xB1C1], NFC: [0xB1C1], NFD: [0x1102, 0x116B, 0x11B8], NFKC: [0xB1C1], NFKD: [0x1102, 0x116B, 0x11B8] }, +{ source: [0xB1C2], NFC: [0xB1C2], NFD: [0x1102, 0x116B, 0x11B9], NFKC: [0xB1C2], NFKD: [0x1102, 0x116B, 0x11B9] }, +{ source: [0xB1C3], NFC: [0xB1C3], NFD: [0x1102, 0x116B, 0x11BA], NFKC: [0xB1C3], NFKD: [0x1102, 0x116B, 0x11BA] }, +{ source: [0xB1C4], NFC: [0xB1C4], NFD: [0x1102, 0x116B, 0x11BB], NFKC: [0xB1C4], NFKD: [0x1102, 0x116B, 0x11BB] }, +{ source: [0xB1C5], NFC: [0xB1C5], NFD: [0x1102, 0x116B, 0x11BC], NFKC: [0xB1C5], NFKD: [0x1102, 0x116B, 0x11BC] }, +{ source: [0xB1C6], NFC: [0xB1C6], NFD: [0x1102, 0x116B, 0x11BD], NFKC: [0xB1C6], NFKD: [0x1102, 0x116B, 0x11BD] }, +{ source: [0xB1C7], NFC: [0xB1C7], NFD: [0x1102, 0x116B, 0x11BE], NFKC: [0xB1C7], NFKD: [0x1102, 0x116B, 0x11BE] }, +{ source: [0xB1C8], NFC: [0xB1C8], NFD: [0x1102, 0x116B, 0x11BF], NFKC: [0xB1C8], NFKD: [0x1102, 0x116B, 0x11BF] }, +{ source: [0xB1C9], NFC: [0xB1C9], NFD: [0x1102, 0x116B, 0x11C0], NFKC: [0xB1C9], NFKD: [0x1102, 0x116B, 0x11C0] }, +{ source: [0xB1CA], NFC: [0xB1CA], NFD: [0x1102, 0x116B, 0x11C1], NFKC: [0xB1CA], NFKD: [0x1102, 0x116B, 0x11C1] }, +{ source: [0xB1CB], NFC: [0xB1CB], NFD: [0x1102, 0x116B, 0x11C2], NFKC: [0xB1CB], NFKD: [0x1102, 0x116B, 0x11C2] }, +{ source: [0xB1CC], NFC: [0xB1CC], NFD: [0x1102, 0x116C], NFKC: [0xB1CC], NFKD: [0x1102, 0x116C] }, +{ source: [0xB1CD], NFC: [0xB1CD], NFD: [0x1102, 0x116C, 0x11A8], NFKC: [0xB1CD], NFKD: [0x1102, 0x116C, 0x11A8] }, +{ source: [0xB1CE], NFC: [0xB1CE], NFD: [0x1102, 0x116C, 0x11A9], NFKC: [0xB1CE], NFKD: [0x1102, 0x116C, 0x11A9] }, +{ source: [0xB1CF], NFC: [0xB1CF], NFD: [0x1102, 0x116C, 0x11AA], NFKC: [0xB1CF], NFKD: [0x1102, 0x116C, 0x11AA] }, +{ source: [0xB1D0], NFC: [0xB1D0], NFD: [0x1102, 0x116C, 0x11AB], NFKC: [0xB1D0], NFKD: [0x1102, 0x116C, 0x11AB] }, +{ source: [0xB1D1], NFC: [0xB1D1], NFD: [0x1102, 0x116C, 0x11AC], NFKC: [0xB1D1], NFKD: [0x1102, 0x116C, 0x11AC] }, +{ source: [0xB1D2], NFC: [0xB1D2], NFD: [0x1102, 0x116C, 0x11AD], NFKC: [0xB1D2], NFKD: [0x1102, 0x116C, 0x11AD] }, +{ source: [0xB1D3], NFC: [0xB1D3], NFD: [0x1102, 0x116C, 0x11AE], NFKC: [0xB1D3], NFKD: [0x1102, 0x116C, 0x11AE] }, +{ source: [0xB1D4], NFC: [0xB1D4], NFD: [0x1102, 0x116C, 0x11AF], NFKC: [0xB1D4], NFKD: [0x1102, 0x116C, 0x11AF] }, +{ source: [0xB1D5], NFC: [0xB1D5], NFD: [0x1102, 0x116C, 0x11B0], NFKC: [0xB1D5], NFKD: [0x1102, 0x116C, 0x11B0] }, +{ source: [0xB1D6], NFC: [0xB1D6], NFD: [0x1102, 0x116C, 0x11B1], NFKC: [0xB1D6], NFKD: [0x1102, 0x116C, 0x11B1] }, +{ source: [0xB1D7], NFC: [0xB1D7], NFD: [0x1102, 0x116C, 0x11B2], NFKC: [0xB1D7], NFKD: [0x1102, 0x116C, 0x11B2] }, +{ source: [0xB1D8], NFC: [0xB1D8], NFD: [0x1102, 0x116C, 0x11B3], NFKC: [0xB1D8], NFKD: [0x1102, 0x116C, 0x11B3] }, +{ source: [0xB1D9], NFC: [0xB1D9], NFD: [0x1102, 0x116C, 0x11B4], NFKC: [0xB1D9], NFKD: [0x1102, 0x116C, 0x11B4] }, +{ source: [0xB1DA], NFC: [0xB1DA], NFD: [0x1102, 0x116C, 0x11B5], NFKC: [0xB1DA], NFKD: [0x1102, 0x116C, 0x11B5] }, +{ source: [0xB1DB], NFC: [0xB1DB], NFD: [0x1102, 0x116C, 0x11B6], NFKC: [0xB1DB], NFKD: [0x1102, 0x116C, 0x11B6] }, +{ source: [0xB1DC], NFC: [0xB1DC], NFD: [0x1102, 0x116C, 0x11B7], NFKC: [0xB1DC], NFKD: [0x1102, 0x116C, 0x11B7] }, +{ source: [0xB1DD], NFC: [0xB1DD], NFD: [0x1102, 0x116C, 0x11B8], NFKC: [0xB1DD], NFKD: [0x1102, 0x116C, 0x11B8] }, +{ source: [0xB1DE], NFC: [0xB1DE], NFD: [0x1102, 0x116C, 0x11B9], NFKC: [0xB1DE], NFKD: [0x1102, 0x116C, 0x11B9] }, +{ source: [0xB1DF], NFC: [0xB1DF], NFD: [0x1102, 0x116C, 0x11BA], NFKC: [0xB1DF], NFKD: [0x1102, 0x116C, 0x11BA] }, +{ source: [0xB1E0], NFC: [0xB1E0], NFD: [0x1102, 0x116C, 0x11BB], NFKC: [0xB1E0], NFKD: [0x1102, 0x116C, 0x11BB] }, +{ source: [0xB1E1], NFC: [0xB1E1], NFD: [0x1102, 0x116C, 0x11BC], NFKC: [0xB1E1], NFKD: [0x1102, 0x116C, 0x11BC] }, +{ source: [0xB1E2], NFC: [0xB1E2], NFD: [0x1102, 0x116C, 0x11BD], NFKC: [0xB1E2], NFKD: [0x1102, 0x116C, 0x11BD] }, +{ source: [0xB1E3], NFC: [0xB1E3], NFD: [0x1102, 0x116C, 0x11BE], NFKC: [0xB1E3], NFKD: [0x1102, 0x116C, 0x11BE] }, +{ source: [0xB1E4], NFC: [0xB1E4], NFD: [0x1102, 0x116C, 0x11BF], NFKC: [0xB1E4], NFKD: [0x1102, 0x116C, 0x11BF] }, +{ source: [0xB1E5], NFC: [0xB1E5], NFD: [0x1102, 0x116C, 0x11C0], NFKC: [0xB1E5], NFKD: [0x1102, 0x116C, 0x11C0] }, +{ source: [0xB1E6], NFC: [0xB1E6], NFD: [0x1102, 0x116C, 0x11C1], NFKC: [0xB1E6], NFKD: [0x1102, 0x116C, 0x11C1] }, +{ source: [0xB1E7], NFC: [0xB1E7], NFD: [0x1102, 0x116C, 0x11C2], NFKC: [0xB1E7], NFKD: [0x1102, 0x116C, 0x11C2] }, +{ source: [0xB1E8], NFC: [0xB1E8], NFD: [0x1102, 0x116D], NFKC: [0xB1E8], NFKD: [0x1102, 0x116D] }, +{ source: [0xB1E9], NFC: [0xB1E9], NFD: [0x1102, 0x116D, 0x11A8], NFKC: [0xB1E9], NFKD: [0x1102, 0x116D, 0x11A8] }, +{ source: [0xB1EA], NFC: [0xB1EA], NFD: [0x1102, 0x116D, 0x11A9], NFKC: [0xB1EA], NFKD: [0x1102, 0x116D, 0x11A9] }, +{ source: [0xB1EB], NFC: [0xB1EB], NFD: [0x1102, 0x116D, 0x11AA], NFKC: [0xB1EB], NFKD: [0x1102, 0x116D, 0x11AA] }, +{ source: [0xB1EC], NFC: [0xB1EC], NFD: [0x1102, 0x116D, 0x11AB], NFKC: [0xB1EC], NFKD: [0x1102, 0x116D, 0x11AB] }, +{ source: [0xB1ED], NFC: [0xB1ED], NFD: [0x1102, 0x116D, 0x11AC], NFKC: [0xB1ED], NFKD: [0x1102, 0x116D, 0x11AC] }, +{ source: [0xB1EE], NFC: [0xB1EE], NFD: [0x1102, 0x116D, 0x11AD], NFKC: [0xB1EE], NFKD: [0x1102, 0x116D, 0x11AD] }, +{ source: [0xB1EF], NFC: [0xB1EF], NFD: [0x1102, 0x116D, 0x11AE], NFKC: [0xB1EF], NFKD: [0x1102, 0x116D, 0x11AE] }, +{ source: [0xB1F0], NFC: [0xB1F0], NFD: [0x1102, 0x116D, 0x11AF], NFKC: [0xB1F0], NFKD: [0x1102, 0x116D, 0x11AF] }, +{ source: [0xB1F1], NFC: [0xB1F1], NFD: [0x1102, 0x116D, 0x11B0], NFKC: [0xB1F1], NFKD: [0x1102, 0x116D, 0x11B0] }, +{ source: [0xB1F2], NFC: [0xB1F2], NFD: [0x1102, 0x116D, 0x11B1], NFKC: [0xB1F2], NFKD: [0x1102, 0x116D, 0x11B1] }, +{ source: [0xB1F3], NFC: [0xB1F3], NFD: [0x1102, 0x116D, 0x11B2], NFKC: [0xB1F3], NFKD: [0x1102, 0x116D, 0x11B2] }, +{ source: [0xB1F4], NFC: [0xB1F4], NFD: [0x1102, 0x116D, 0x11B3], NFKC: [0xB1F4], NFKD: [0x1102, 0x116D, 0x11B3] }, +{ source: [0xB1F5], NFC: [0xB1F5], NFD: [0x1102, 0x116D, 0x11B4], NFKC: [0xB1F5], NFKD: [0x1102, 0x116D, 0x11B4] }, +{ source: [0xB1F6], NFC: [0xB1F6], NFD: [0x1102, 0x116D, 0x11B5], NFKC: [0xB1F6], NFKD: [0x1102, 0x116D, 0x11B5] }, +{ source: [0xB1F7], NFC: [0xB1F7], NFD: [0x1102, 0x116D, 0x11B6], NFKC: [0xB1F7], NFKD: [0x1102, 0x116D, 0x11B6] }, +{ source: [0xB1F8], NFC: [0xB1F8], NFD: [0x1102, 0x116D, 0x11B7], NFKC: [0xB1F8], NFKD: [0x1102, 0x116D, 0x11B7] }, +{ source: [0xB1F9], NFC: [0xB1F9], NFD: [0x1102, 0x116D, 0x11B8], NFKC: [0xB1F9], NFKD: [0x1102, 0x116D, 0x11B8] }, +{ source: [0xB1FA], NFC: [0xB1FA], NFD: [0x1102, 0x116D, 0x11B9], NFKC: [0xB1FA], NFKD: [0x1102, 0x116D, 0x11B9] }, +{ source: [0xB1FB], NFC: [0xB1FB], NFD: [0x1102, 0x116D, 0x11BA], NFKC: [0xB1FB], NFKD: [0x1102, 0x116D, 0x11BA] }, +{ source: [0xB1FC], NFC: [0xB1FC], NFD: [0x1102, 0x116D, 0x11BB], NFKC: [0xB1FC], NFKD: [0x1102, 0x116D, 0x11BB] }, +{ source: [0xB1FD], NFC: [0xB1FD], NFD: [0x1102, 0x116D, 0x11BC], NFKC: [0xB1FD], NFKD: [0x1102, 0x116D, 0x11BC] }, +{ source: [0xB1FE], NFC: [0xB1FE], NFD: [0x1102, 0x116D, 0x11BD], NFKC: [0xB1FE], NFKD: [0x1102, 0x116D, 0x11BD] }, +{ source: [0xB1FF], NFC: [0xB1FF], NFD: [0x1102, 0x116D, 0x11BE], NFKC: [0xB1FF], NFKD: [0x1102, 0x116D, 0x11BE] }, +{ source: [0xB200], NFC: [0xB200], NFD: [0x1102, 0x116D, 0x11BF], NFKC: [0xB200], NFKD: [0x1102, 0x116D, 0x11BF] }, +{ source: [0xB201], NFC: [0xB201], NFD: [0x1102, 0x116D, 0x11C0], NFKC: [0xB201], NFKD: [0x1102, 0x116D, 0x11C0] }, +{ source: [0xB202], NFC: [0xB202], NFD: [0x1102, 0x116D, 0x11C1], NFKC: [0xB202], NFKD: [0x1102, 0x116D, 0x11C1] }, +{ source: [0xB203], NFC: [0xB203], NFD: [0x1102, 0x116D, 0x11C2], NFKC: [0xB203], NFKD: [0x1102, 0x116D, 0x11C2] }, +{ source: [0xB204], NFC: [0xB204], NFD: [0x1102, 0x116E], NFKC: [0xB204], NFKD: [0x1102, 0x116E] }, +{ source: [0xB205], NFC: [0xB205], NFD: [0x1102, 0x116E, 0x11A8], NFKC: [0xB205], NFKD: [0x1102, 0x116E, 0x11A8] }, +{ source: [0xB206], NFC: [0xB206], NFD: [0x1102, 0x116E, 0x11A9], NFKC: [0xB206], NFKD: [0x1102, 0x116E, 0x11A9] }, +{ source: [0xB207], NFC: [0xB207], NFD: [0x1102, 0x116E, 0x11AA], NFKC: [0xB207], NFKD: [0x1102, 0x116E, 0x11AA] }, +{ source: [0xB208], NFC: [0xB208], NFD: [0x1102, 0x116E, 0x11AB], NFKC: [0xB208], NFKD: [0x1102, 0x116E, 0x11AB] }, +{ source: [0xB209], NFC: [0xB209], NFD: [0x1102, 0x116E, 0x11AC], NFKC: [0xB209], NFKD: [0x1102, 0x116E, 0x11AC] }, +{ source: [0xB20A], NFC: [0xB20A], NFD: [0x1102, 0x116E, 0x11AD], NFKC: [0xB20A], NFKD: [0x1102, 0x116E, 0x11AD] }, +{ source: [0xB20B], NFC: [0xB20B], NFD: [0x1102, 0x116E, 0x11AE], NFKC: [0xB20B], NFKD: [0x1102, 0x116E, 0x11AE] }, +{ source: [0xB20C], NFC: [0xB20C], NFD: [0x1102, 0x116E, 0x11AF], NFKC: [0xB20C], NFKD: [0x1102, 0x116E, 0x11AF] }, +{ source: [0xB20D], NFC: [0xB20D], NFD: [0x1102, 0x116E, 0x11B0], NFKC: [0xB20D], NFKD: [0x1102, 0x116E, 0x11B0] }, +{ source: [0xB20E], NFC: [0xB20E], NFD: [0x1102, 0x116E, 0x11B1], NFKC: [0xB20E], NFKD: [0x1102, 0x116E, 0x11B1] }, +{ source: [0xB20F], NFC: [0xB20F], NFD: [0x1102, 0x116E, 0x11B2], NFKC: [0xB20F], NFKD: [0x1102, 0x116E, 0x11B2] }, +{ source: [0xB210], NFC: [0xB210], NFD: [0x1102, 0x116E, 0x11B3], NFKC: [0xB210], NFKD: [0x1102, 0x116E, 0x11B3] }, +{ source: [0xB211], NFC: [0xB211], NFD: [0x1102, 0x116E, 0x11B4], NFKC: [0xB211], NFKD: [0x1102, 0x116E, 0x11B4] }, +{ source: [0xB212], NFC: [0xB212], NFD: [0x1102, 0x116E, 0x11B5], NFKC: [0xB212], NFKD: [0x1102, 0x116E, 0x11B5] }, +{ source: [0xB213], NFC: [0xB213], NFD: [0x1102, 0x116E, 0x11B6], NFKC: [0xB213], NFKD: [0x1102, 0x116E, 0x11B6] }, +{ source: [0xB214], NFC: [0xB214], NFD: [0x1102, 0x116E, 0x11B7], NFKC: [0xB214], NFKD: [0x1102, 0x116E, 0x11B7] }, +{ source: [0xB215], NFC: [0xB215], NFD: [0x1102, 0x116E, 0x11B8], NFKC: [0xB215], NFKD: [0x1102, 0x116E, 0x11B8] }, +{ source: [0xB216], NFC: [0xB216], NFD: [0x1102, 0x116E, 0x11B9], NFKC: [0xB216], NFKD: [0x1102, 0x116E, 0x11B9] }, +{ source: [0xB217], NFC: [0xB217], NFD: [0x1102, 0x116E, 0x11BA], NFKC: [0xB217], NFKD: [0x1102, 0x116E, 0x11BA] }, +{ source: [0xB218], NFC: [0xB218], NFD: [0x1102, 0x116E, 0x11BB], NFKC: [0xB218], NFKD: [0x1102, 0x116E, 0x11BB] }, +{ source: [0xB219], NFC: [0xB219], NFD: [0x1102, 0x116E, 0x11BC], NFKC: [0xB219], NFKD: [0x1102, 0x116E, 0x11BC] }, +{ source: [0xB21A], NFC: [0xB21A], NFD: [0x1102, 0x116E, 0x11BD], NFKC: [0xB21A], NFKD: [0x1102, 0x116E, 0x11BD] }, +{ source: [0xB21B], NFC: [0xB21B], NFD: [0x1102, 0x116E, 0x11BE], NFKC: [0xB21B], NFKD: [0x1102, 0x116E, 0x11BE] }, +{ source: [0xB21C], NFC: [0xB21C], NFD: [0x1102, 0x116E, 0x11BF], NFKC: [0xB21C], NFKD: [0x1102, 0x116E, 0x11BF] }, +{ source: [0xB21D], NFC: [0xB21D], NFD: [0x1102, 0x116E, 0x11C0], NFKC: [0xB21D], NFKD: [0x1102, 0x116E, 0x11C0] }, +{ source: [0xB21E], NFC: [0xB21E], NFD: [0x1102, 0x116E, 0x11C1], NFKC: [0xB21E], NFKD: [0x1102, 0x116E, 0x11C1] }, +{ source: [0xB21F], NFC: [0xB21F], NFD: [0x1102, 0x116E, 0x11C2], NFKC: [0xB21F], NFKD: [0x1102, 0x116E, 0x11C2] }, +{ source: [0xB220], NFC: [0xB220], NFD: [0x1102, 0x116F], NFKC: [0xB220], NFKD: [0x1102, 0x116F] }, +{ source: [0xB221], NFC: [0xB221], NFD: [0x1102, 0x116F, 0x11A8], NFKC: [0xB221], NFKD: [0x1102, 0x116F, 0x11A8] }, +{ source: [0xB222], NFC: [0xB222], NFD: [0x1102, 0x116F, 0x11A9], NFKC: [0xB222], NFKD: [0x1102, 0x116F, 0x11A9] }, +{ source: [0xB223], NFC: [0xB223], NFD: [0x1102, 0x116F, 0x11AA], NFKC: [0xB223], NFKD: [0x1102, 0x116F, 0x11AA] }, +{ source: [0xB224], NFC: [0xB224], NFD: [0x1102, 0x116F, 0x11AB], NFKC: [0xB224], NFKD: [0x1102, 0x116F, 0x11AB] }, +{ source: [0xB225], NFC: [0xB225], NFD: [0x1102, 0x116F, 0x11AC], NFKC: [0xB225], NFKD: [0x1102, 0x116F, 0x11AC] }, +{ source: [0xB226], NFC: [0xB226], NFD: [0x1102, 0x116F, 0x11AD], NFKC: [0xB226], NFKD: [0x1102, 0x116F, 0x11AD] }, +{ source: [0xB227], NFC: [0xB227], NFD: [0x1102, 0x116F, 0x11AE], NFKC: [0xB227], NFKD: [0x1102, 0x116F, 0x11AE] }, +{ source: [0xB228], NFC: [0xB228], NFD: [0x1102, 0x116F, 0x11AF], NFKC: [0xB228], NFKD: [0x1102, 0x116F, 0x11AF] }, +{ source: [0xB229], NFC: [0xB229], NFD: [0x1102, 0x116F, 0x11B0], NFKC: [0xB229], NFKD: [0x1102, 0x116F, 0x11B0] }, +{ source: [0xB22A], NFC: [0xB22A], NFD: [0x1102, 0x116F, 0x11B1], NFKC: [0xB22A], NFKD: [0x1102, 0x116F, 0x11B1] }, +{ source: [0xB22B], NFC: [0xB22B], NFD: [0x1102, 0x116F, 0x11B2], NFKC: [0xB22B], NFKD: [0x1102, 0x116F, 0x11B2] }, +{ source: [0xB22C], NFC: [0xB22C], NFD: [0x1102, 0x116F, 0x11B3], NFKC: [0xB22C], NFKD: [0x1102, 0x116F, 0x11B3] }, +{ source: [0xB22D], NFC: [0xB22D], NFD: [0x1102, 0x116F, 0x11B4], NFKC: [0xB22D], NFKD: [0x1102, 0x116F, 0x11B4] }, +{ source: [0xB22E], NFC: [0xB22E], NFD: [0x1102, 0x116F, 0x11B5], NFKC: [0xB22E], NFKD: [0x1102, 0x116F, 0x11B5] }, +{ source: [0xB22F], NFC: [0xB22F], NFD: [0x1102, 0x116F, 0x11B6], NFKC: [0xB22F], NFKD: [0x1102, 0x116F, 0x11B6] }, +{ source: [0xB230], NFC: [0xB230], NFD: [0x1102, 0x116F, 0x11B7], NFKC: [0xB230], NFKD: [0x1102, 0x116F, 0x11B7] }, +{ source: [0xB231], NFC: [0xB231], NFD: [0x1102, 0x116F, 0x11B8], NFKC: [0xB231], NFKD: [0x1102, 0x116F, 0x11B8] }, +{ source: [0xB232], NFC: [0xB232], NFD: [0x1102, 0x116F, 0x11B9], NFKC: [0xB232], NFKD: [0x1102, 0x116F, 0x11B9] }, +{ source: [0xB233], NFC: [0xB233], NFD: [0x1102, 0x116F, 0x11BA], NFKC: [0xB233], NFKD: [0x1102, 0x116F, 0x11BA] }, +{ source: [0xB234], NFC: [0xB234], NFD: [0x1102, 0x116F, 0x11BB], NFKC: [0xB234], NFKD: [0x1102, 0x116F, 0x11BB] }, +{ source: [0xB235], NFC: [0xB235], NFD: [0x1102, 0x116F, 0x11BC], NFKC: [0xB235], NFKD: [0x1102, 0x116F, 0x11BC] }, +{ source: [0xB236], NFC: [0xB236], NFD: [0x1102, 0x116F, 0x11BD], NFKC: [0xB236], NFKD: [0x1102, 0x116F, 0x11BD] }, +{ source: [0xB237], NFC: [0xB237], NFD: [0x1102, 0x116F, 0x11BE], NFKC: [0xB237], NFKD: [0x1102, 0x116F, 0x11BE] }, +{ source: [0xB238], NFC: [0xB238], NFD: [0x1102, 0x116F, 0x11BF], NFKC: [0xB238], NFKD: [0x1102, 0x116F, 0x11BF] }, +{ source: [0xB239], NFC: [0xB239], NFD: [0x1102, 0x116F, 0x11C0], NFKC: [0xB239], NFKD: [0x1102, 0x116F, 0x11C0] }, +{ source: [0xB23A], NFC: [0xB23A], NFD: [0x1102, 0x116F, 0x11C1], NFKC: [0xB23A], NFKD: [0x1102, 0x116F, 0x11C1] }, +{ source: [0xB23B], NFC: [0xB23B], NFD: [0x1102, 0x116F, 0x11C2], NFKC: [0xB23B], NFKD: [0x1102, 0x116F, 0x11C2] }, +{ source: [0xB23C], NFC: [0xB23C], NFD: [0x1102, 0x1170], NFKC: [0xB23C], NFKD: [0x1102, 0x1170] }, +{ source: [0xB23D], NFC: [0xB23D], NFD: [0x1102, 0x1170, 0x11A8], NFKC: [0xB23D], NFKD: [0x1102, 0x1170, 0x11A8] }, +{ source: [0xB23E], NFC: [0xB23E], NFD: [0x1102, 0x1170, 0x11A9], NFKC: [0xB23E], NFKD: [0x1102, 0x1170, 0x11A9] }, +{ source: [0xB23F], NFC: [0xB23F], NFD: [0x1102, 0x1170, 0x11AA], NFKC: [0xB23F], NFKD: [0x1102, 0x1170, 0x11AA] }, +{ source: [0xB240], NFC: [0xB240], NFD: [0x1102, 0x1170, 0x11AB], NFKC: [0xB240], NFKD: [0x1102, 0x1170, 0x11AB] }, +{ source: [0xB241], NFC: [0xB241], NFD: [0x1102, 0x1170, 0x11AC], NFKC: [0xB241], NFKD: [0x1102, 0x1170, 0x11AC] }, +{ source: [0xB242], NFC: [0xB242], NFD: [0x1102, 0x1170, 0x11AD], NFKC: [0xB242], NFKD: [0x1102, 0x1170, 0x11AD] }, +{ source: [0xB243], NFC: [0xB243], NFD: [0x1102, 0x1170, 0x11AE], NFKC: [0xB243], NFKD: [0x1102, 0x1170, 0x11AE] }, +{ source: [0xB244], NFC: [0xB244], NFD: [0x1102, 0x1170, 0x11AF], NFKC: [0xB244], NFKD: [0x1102, 0x1170, 0x11AF] }, +{ source: [0xB245], NFC: [0xB245], NFD: [0x1102, 0x1170, 0x11B0], NFKC: [0xB245], NFKD: [0x1102, 0x1170, 0x11B0] }, +{ source: [0xB246], NFC: [0xB246], NFD: [0x1102, 0x1170, 0x11B1], NFKC: [0xB246], NFKD: [0x1102, 0x1170, 0x11B1] }, +{ source: [0xB247], NFC: [0xB247], NFD: [0x1102, 0x1170, 0x11B2], NFKC: [0xB247], NFKD: [0x1102, 0x1170, 0x11B2] }, +{ source: [0xB248], NFC: [0xB248], NFD: [0x1102, 0x1170, 0x11B3], NFKC: [0xB248], NFKD: [0x1102, 0x1170, 0x11B3] }, +{ source: [0xB249], NFC: [0xB249], NFD: [0x1102, 0x1170, 0x11B4], NFKC: [0xB249], NFKD: [0x1102, 0x1170, 0x11B4] }, +{ source: [0xB24A], NFC: [0xB24A], NFD: [0x1102, 0x1170, 0x11B5], NFKC: [0xB24A], NFKD: [0x1102, 0x1170, 0x11B5] }, +{ source: [0xB24B], NFC: [0xB24B], NFD: [0x1102, 0x1170, 0x11B6], NFKC: [0xB24B], NFKD: [0x1102, 0x1170, 0x11B6] }, +{ source: [0xB24C], NFC: [0xB24C], NFD: [0x1102, 0x1170, 0x11B7], NFKC: [0xB24C], NFKD: [0x1102, 0x1170, 0x11B7] }, +{ source: [0xB24D], NFC: [0xB24D], NFD: [0x1102, 0x1170, 0x11B8], NFKC: [0xB24D], NFKD: [0x1102, 0x1170, 0x11B8] }, +{ source: [0xB24E], NFC: [0xB24E], NFD: [0x1102, 0x1170, 0x11B9], NFKC: [0xB24E], NFKD: [0x1102, 0x1170, 0x11B9] }, +{ source: [0xB24F], NFC: [0xB24F], NFD: [0x1102, 0x1170, 0x11BA], NFKC: [0xB24F], NFKD: [0x1102, 0x1170, 0x11BA] }, +{ source: [0xB250], NFC: [0xB250], NFD: [0x1102, 0x1170, 0x11BB], NFKC: [0xB250], NFKD: [0x1102, 0x1170, 0x11BB] }, +{ source: [0xB251], NFC: [0xB251], NFD: [0x1102, 0x1170, 0x11BC], NFKC: [0xB251], NFKD: [0x1102, 0x1170, 0x11BC] }, +{ source: [0xB252], NFC: [0xB252], NFD: [0x1102, 0x1170, 0x11BD], NFKC: [0xB252], NFKD: [0x1102, 0x1170, 0x11BD] }, +{ source: [0xB253], NFC: [0xB253], NFD: [0x1102, 0x1170, 0x11BE], NFKC: [0xB253], NFKD: [0x1102, 0x1170, 0x11BE] }, +{ source: [0xB254], NFC: [0xB254], NFD: [0x1102, 0x1170, 0x11BF], NFKC: [0xB254], NFKD: [0x1102, 0x1170, 0x11BF] }, +{ source: [0xB255], NFC: [0xB255], NFD: [0x1102, 0x1170, 0x11C0], NFKC: [0xB255], NFKD: [0x1102, 0x1170, 0x11C0] }, +{ source: [0xB256], NFC: [0xB256], NFD: [0x1102, 0x1170, 0x11C1], NFKC: [0xB256], NFKD: [0x1102, 0x1170, 0x11C1] }, +{ source: [0xB257], NFC: [0xB257], NFD: [0x1102, 0x1170, 0x11C2], NFKC: [0xB257], NFKD: [0x1102, 0x1170, 0x11C2] }, +{ source: [0xB258], NFC: [0xB258], NFD: [0x1102, 0x1171], NFKC: [0xB258], NFKD: [0x1102, 0x1171] }, +{ source: [0xB259], NFC: [0xB259], NFD: [0x1102, 0x1171, 0x11A8], NFKC: [0xB259], NFKD: [0x1102, 0x1171, 0x11A8] }, +{ source: [0xB25A], NFC: [0xB25A], NFD: [0x1102, 0x1171, 0x11A9], NFKC: [0xB25A], NFKD: [0x1102, 0x1171, 0x11A9] }, +{ source: [0xB25B], NFC: [0xB25B], NFD: [0x1102, 0x1171, 0x11AA], NFKC: [0xB25B], NFKD: [0x1102, 0x1171, 0x11AA] }, +{ source: [0xB25C], NFC: [0xB25C], NFD: [0x1102, 0x1171, 0x11AB], NFKC: [0xB25C], NFKD: [0x1102, 0x1171, 0x11AB] }, +{ source: [0xB25D], NFC: [0xB25D], NFD: [0x1102, 0x1171, 0x11AC], NFKC: [0xB25D], NFKD: [0x1102, 0x1171, 0x11AC] }, +{ source: [0xB25E], NFC: [0xB25E], NFD: [0x1102, 0x1171, 0x11AD], NFKC: [0xB25E], NFKD: [0x1102, 0x1171, 0x11AD] }, +{ source: [0xB25F], NFC: [0xB25F], NFD: [0x1102, 0x1171, 0x11AE], NFKC: [0xB25F], NFKD: [0x1102, 0x1171, 0x11AE] }, +{ source: [0xB260], NFC: [0xB260], NFD: [0x1102, 0x1171, 0x11AF], NFKC: [0xB260], NFKD: [0x1102, 0x1171, 0x11AF] }, +{ source: [0xB261], NFC: [0xB261], NFD: [0x1102, 0x1171, 0x11B0], NFKC: [0xB261], NFKD: [0x1102, 0x1171, 0x11B0] }, +{ source: [0xB262], NFC: [0xB262], NFD: [0x1102, 0x1171, 0x11B1], NFKC: [0xB262], NFKD: [0x1102, 0x1171, 0x11B1] }, +{ source: [0xB263], NFC: [0xB263], NFD: [0x1102, 0x1171, 0x11B2], NFKC: [0xB263], NFKD: [0x1102, 0x1171, 0x11B2] }, +{ source: [0xB264], NFC: [0xB264], NFD: [0x1102, 0x1171, 0x11B3], NFKC: [0xB264], NFKD: [0x1102, 0x1171, 0x11B3] }, +{ source: [0xB265], NFC: [0xB265], NFD: [0x1102, 0x1171, 0x11B4], NFKC: [0xB265], NFKD: [0x1102, 0x1171, 0x11B4] }, +{ source: [0xB266], NFC: [0xB266], NFD: [0x1102, 0x1171, 0x11B5], NFKC: [0xB266], NFKD: [0x1102, 0x1171, 0x11B5] }, +{ source: [0xB267], NFC: [0xB267], NFD: [0x1102, 0x1171, 0x11B6], NFKC: [0xB267], NFKD: [0x1102, 0x1171, 0x11B6] }, +{ source: [0xB268], NFC: [0xB268], NFD: [0x1102, 0x1171, 0x11B7], NFKC: [0xB268], NFKD: [0x1102, 0x1171, 0x11B7] }, +{ source: [0xB269], NFC: [0xB269], NFD: [0x1102, 0x1171, 0x11B8], NFKC: [0xB269], NFKD: [0x1102, 0x1171, 0x11B8] }, +{ source: [0xB26A], NFC: [0xB26A], NFD: [0x1102, 0x1171, 0x11B9], NFKC: [0xB26A], NFKD: [0x1102, 0x1171, 0x11B9] }, +{ source: [0xB26B], NFC: [0xB26B], NFD: [0x1102, 0x1171, 0x11BA], NFKC: [0xB26B], NFKD: [0x1102, 0x1171, 0x11BA] }, +{ source: [0xB26C], NFC: [0xB26C], NFD: [0x1102, 0x1171, 0x11BB], NFKC: [0xB26C], NFKD: [0x1102, 0x1171, 0x11BB] }, +{ source: [0xB26D], NFC: [0xB26D], NFD: [0x1102, 0x1171, 0x11BC], NFKC: [0xB26D], NFKD: [0x1102, 0x1171, 0x11BC] }, +{ source: [0xB26E], NFC: [0xB26E], NFD: [0x1102, 0x1171, 0x11BD], NFKC: [0xB26E], NFKD: [0x1102, 0x1171, 0x11BD] }, +{ source: [0xB26F], NFC: [0xB26F], NFD: [0x1102, 0x1171, 0x11BE], NFKC: [0xB26F], NFKD: [0x1102, 0x1171, 0x11BE] }, +{ source: [0xB270], NFC: [0xB270], NFD: [0x1102, 0x1171, 0x11BF], NFKC: [0xB270], NFKD: [0x1102, 0x1171, 0x11BF] }, +{ source: [0xB271], NFC: [0xB271], NFD: [0x1102, 0x1171, 0x11C0], NFKC: [0xB271], NFKD: [0x1102, 0x1171, 0x11C0] }, +{ source: [0xB272], NFC: [0xB272], NFD: [0x1102, 0x1171, 0x11C1], NFKC: [0xB272], NFKD: [0x1102, 0x1171, 0x11C1] }, +{ source: [0xB273], NFC: [0xB273], NFD: [0x1102, 0x1171, 0x11C2], NFKC: [0xB273], NFKD: [0x1102, 0x1171, 0x11C2] }, +{ source: [0xB274], NFC: [0xB274], NFD: [0x1102, 0x1172], NFKC: [0xB274], NFKD: [0x1102, 0x1172] }, +{ source: [0xB275], NFC: [0xB275], NFD: [0x1102, 0x1172, 0x11A8], NFKC: [0xB275], NFKD: [0x1102, 0x1172, 0x11A8] }, +{ source: [0xB276], NFC: [0xB276], NFD: [0x1102, 0x1172, 0x11A9], NFKC: [0xB276], NFKD: [0x1102, 0x1172, 0x11A9] }, +{ source: [0xB277], NFC: [0xB277], NFD: [0x1102, 0x1172, 0x11AA], NFKC: [0xB277], NFKD: [0x1102, 0x1172, 0x11AA] }, +{ source: [0xB278], NFC: [0xB278], NFD: [0x1102, 0x1172, 0x11AB], NFKC: [0xB278], NFKD: [0x1102, 0x1172, 0x11AB] }, +{ source: [0xB279], NFC: [0xB279], NFD: [0x1102, 0x1172, 0x11AC], NFKC: [0xB279], NFKD: [0x1102, 0x1172, 0x11AC] }, +{ source: [0xB27A], NFC: [0xB27A], NFD: [0x1102, 0x1172, 0x11AD], NFKC: [0xB27A], NFKD: [0x1102, 0x1172, 0x11AD] }, +{ source: [0xB27B], NFC: [0xB27B], NFD: [0x1102, 0x1172, 0x11AE], NFKC: [0xB27B], NFKD: [0x1102, 0x1172, 0x11AE] }, +{ source: [0xB27C], NFC: [0xB27C], NFD: [0x1102, 0x1172, 0x11AF], NFKC: [0xB27C], NFKD: [0x1102, 0x1172, 0x11AF] }, +{ source: [0xB27D], NFC: [0xB27D], NFD: [0x1102, 0x1172, 0x11B0], NFKC: [0xB27D], NFKD: [0x1102, 0x1172, 0x11B0] }, +{ source: [0xB27E], NFC: [0xB27E], NFD: [0x1102, 0x1172, 0x11B1], NFKC: [0xB27E], NFKD: [0x1102, 0x1172, 0x11B1] }, +{ source: [0xB27F], NFC: [0xB27F], NFD: [0x1102, 0x1172, 0x11B2], NFKC: [0xB27F], NFKD: [0x1102, 0x1172, 0x11B2] }, +{ source: [0xB280], NFC: [0xB280], NFD: [0x1102, 0x1172, 0x11B3], NFKC: [0xB280], NFKD: [0x1102, 0x1172, 0x11B3] }, +{ source: [0xB281], NFC: [0xB281], NFD: [0x1102, 0x1172, 0x11B4], NFKC: [0xB281], NFKD: [0x1102, 0x1172, 0x11B4] }, +{ source: [0xB282], NFC: [0xB282], NFD: [0x1102, 0x1172, 0x11B5], NFKC: [0xB282], NFKD: [0x1102, 0x1172, 0x11B5] }, +{ source: [0xB283], NFC: [0xB283], NFD: [0x1102, 0x1172, 0x11B6], NFKC: [0xB283], NFKD: [0x1102, 0x1172, 0x11B6] }, +{ source: [0xB284], NFC: [0xB284], NFD: [0x1102, 0x1172, 0x11B7], NFKC: [0xB284], NFKD: [0x1102, 0x1172, 0x11B7] }, +{ source: [0xB285], NFC: [0xB285], NFD: [0x1102, 0x1172, 0x11B8], NFKC: [0xB285], NFKD: [0x1102, 0x1172, 0x11B8] }, +{ source: [0xB286], NFC: [0xB286], NFD: [0x1102, 0x1172, 0x11B9], NFKC: [0xB286], NFKD: [0x1102, 0x1172, 0x11B9] }, +{ source: [0xB287], NFC: [0xB287], NFD: [0x1102, 0x1172, 0x11BA], NFKC: [0xB287], NFKD: [0x1102, 0x1172, 0x11BA] }, +{ source: [0xB288], NFC: [0xB288], NFD: [0x1102, 0x1172, 0x11BB], NFKC: [0xB288], NFKD: [0x1102, 0x1172, 0x11BB] }, +{ source: [0xB289], NFC: [0xB289], NFD: [0x1102, 0x1172, 0x11BC], NFKC: [0xB289], NFKD: [0x1102, 0x1172, 0x11BC] }, +{ source: [0xB28A], NFC: [0xB28A], NFD: [0x1102, 0x1172, 0x11BD], NFKC: [0xB28A], NFKD: [0x1102, 0x1172, 0x11BD] }, +{ source: [0xB28B], NFC: [0xB28B], NFD: [0x1102, 0x1172, 0x11BE], NFKC: [0xB28B], NFKD: [0x1102, 0x1172, 0x11BE] }, +{ source: [0xB28C], NFC: [0xB28C], NFD: [0x1102, 0x1172, 0x11BF], NFKC: [0xB28C], NFKD: [0x1102, 0x1172, 0x11BF] }, +{ source: [0xB28D], NFC: [0xB28D], NFD: [0x1102, 0x1172, 0x11C0], NFKC: [0xB28D], NFKD: [0x1102, 0x1172, 0x11C0] }, +{ source: [0xB28E], NFC: [0xB28E], NFD: [0x1102, 0x1172, 0x11C1], NFKC: [0xB28E], NFKD: [0x1102, 0x1172, 0x11C1] }, +{ source: [0xB28F], NFC: [0xB28F], NFD: [0x1102, 0x1172, 0x11C2], NFKC: [0xB28F], NFKD: [0x1102, 0x1172, 0x11C2] }, +{ source: [0xB290], NFC: [0xB290], NFD: [0x1102, 0x1173], NFKC: [0xB290], NFKD: [0x1102, 0x1173] }, +{ source: [0xB291], NFC: [0xB291], NFD: [0x1102, 0x1173, 0x11A8], NFKC: [0xB291], NFKD: [0x1102, 0x1173, 0x11A8] }, +{ source: [0xB292], NFC: [0xB292], NFD: [0x1102, 0x1173, 0x11A9], NFKC: [0xB292], NFKD: [0x1102, 0x1173, 0x11A9] }, +{ source: [0xB293], NFC: [0xB293], NFD: [0x1102, 0x1173, 0x11AA], NFKC: [0xB293], NFKD: [0x1102, 0x1173, 0x11AA] }, +{ source: [0xB294], NFC: [0xB294], NFD: [0x1102, 0x1173, 0x11AB], NFKC: [0xB294], NFKD: [0x1102, 0x1173, 0x11AB] }, +{ source: [0xB295], NFC: [0xB295], NFD: [0x1102, 0x1173, 0x11AC], NFKC: [0xB295], NFKD: [0x1102, 0x1173, 0x11AC] }, +{ source: [0xB296], NFC: [0xB296], NFD: [0x1102, 0x1173, 0x11AD], NFKC: [0xB296], NFKD: [0x1102, 0x1173, 0x11AD] }, +{ source: [0xB297], NFC: [0xB297], NFD: [0x1102, 0x1173, 0x11AE], NFKC: [0xB297], NFKD: [0x1102, 0x1173, 0x11AE] }, +{ source: [0xB298], NFC: [0xB298], NFD: [0x1102, 0x1173, 0x11AF], NFKC: [0xB298], NFKD: [0x1102, 0x1173, 0x11AF] }, +{ source: [0xB299], NFC: [0xB299], NFD: [0x1102, 0x1173, 0x11B0], NFKC: [0xB299], NFKD: [0x1102, 0x1173, 0x11B0] }, +{ source: [0xB29A], NFC: [0xB29A], NFD: [0x1102, 0x1173, 0x11B1], NFKC: [0xB29A], NFKD: [0x1102, 0x1173, 0x11B1] }, +{ source: [0xB29B], NFC: [0xB29B], NFD: [0x1102, 0x1173, 0x11B2], NFKC: [0xB29B], NFKD: [0x1102, 0x1173, 0x11B2] }, +{ source: [0xB29C], NFC: [0xB29C], NFD: [0x1102, 0x1173, 0x11B3], NFKC: [0xB29C], NFKD: [0x1102, 0x1173, 0x11B3] }, +{ source: [0xB29D], NFC: [0xB29D], NFD: [0x1102, 0x1173, 0x11B4], NFKC: [0xB29D], NFKD: [0x1102, 0x1173, 0x11B4] }, +{ source: [0xB29E], NFC: [0xB29E], NFD: [0x1102, 0x1173, 0x11B5], NFKC: [0xB29E], NFKD: [0x1102, 0x1173, 0x11B5] }, +{ source: [0xB29F], NFC: [0xB29F], NFD: [0x1102, 0x1173, 0x11B6], NFKC: [0xB29F], NFKD: [0x1102, 0x1173, 0x11B6] }, +{ source: [0xB2A0], NFC: [0xB2A0], NFD: [0x1102, 0x1173, 0x11B7], NFKC: [0xB2A0], NFKD: [0x1102, 0x1173, 0x11B7] }, +{ source: [0xB2A1], NFC: [0xB2A1], NFD: [0x1102, 0x1173, 0x11B8], NFKC: [0xB2A1], NFKD: [0x1102, 0x1173, 0x11B8] }, +{ source: [0xB2A2], NFC: [0xB2A2], NFD: [0x1102, 0x1173, 0x11B9], NFKC: [0xB2A2], NFKD: [0x1102, 0x1173, 0x11B9] }, +{ source: [0xB2A3], NFC: [0xB2A3], NFD: [0x1102, 0x1173, 0x11BA], NFKC: [0xB2A3], NFKD: [0x1102, 0x1173, 0x11BA] }, +{ source: [0xB2A4], NFC: [0xB2A4], NFD: [0x1102, 0x1173, 0x11BB], NFKC: [0xB2A4], NFKD: [0x1102, 0x1173, 0x11BB] }, +{ source: [0xB2A5], NFC: [0xB2A5], NFD: [0x1102, 0x1173, 0x11BC], NFKC: [0xB2A5], NFKD: [0x1102, 0x1173, 0x11BC] }, +{ source: [0xB2A6], NFC: [0xB2A6], NFD: [0x1102, 0x1173, 0x11BD], NFKC: [0xB2A6], NFKD: [0x1102, 0x1173, 0x11BD] }, +{ source: [0xB2A7], NFC: [0xB2A7], NFD: [0x1102, 0x1173, 0x11BE], NFKC: [0xB2A7], NFKD: [0x1102, 0x1173, 0x11BE] }, +{ source: [0xB2A8], NFC: [0xB2A8], NFD: [0x1102, 0x1173, 0x11BF], NFKC: [0xB2A8], NFKD: [0x1102, 0x1173, 0x11BF] }, +{ source: [0xB2A9], NFC: [0xB2A9], NFD: [0x1102, 0x1173, 0x11C0], NFKC: [0xB2A9], NFKD: [0x1102, 0x1173, 0x11C0] }, +{ source: [0xB2AA], NFC: [0xB2AA], NFD: [0x1102, 0x1173, 0x11C1], NFKC: [0xB2AA], NFKD: [0x1102, 0x1173, 0x11C1] }, +{ source: [0xB2AB], NFC: [0xB2AB], NFD: [0x1102, 0x1173, 0x11C2], NFKC: [0xB2AB], NFKD: [0x1102, 0x1173, 0x11C2] }, +{ source: [0xB2AC], NFC: [0xB2AC], NFD: [0x1102, 0x1174], NFKC: [0xB2AC], NFKD: [0x1102, 0x1174] }, +{ source: [0xB2AD], NFC: [0xB2AD], NFD: [0x1102, 0x1174, 0x11A8], NFKC: [0xB2AD], NFKD: [0x1102, 0x1174, 0x11A8] }, +{ source: [0xB2AE], NFC: [0xB2AE], NFD: [0x1102, 0x1174, 0x11A9], NFKC: [0xB2AE], NFKD: [0x1102, 0x1174, 0x11A9] }, +{ source: [0xB2AF], NFC: [0xB2AF], NFD: [0x1102, 0x1174, 0x11AA], NFKC: [0xB2AF], NFKD: [0x1102, 0x1174, 0x11AA] }, +{ source: [0xB2B0], NFC: [0xB2B0], NFD: [0x1102, 0x1174, 0x11AB], NFKC: [0xB2B0], NFKD: [0x1102, 0x1174, 0x11AB] }, +{ source: [0xB2B1], NFC: [0xB2B1], NFD: [0x1102, 0x1174, 0x11AC], NFKC: [0xB2B1], NFKD: [0x1102, 0x1174, 0x11AC] }, +{ source: [0xB2B2], NFC: [0xB2B2], NFD: [0x1102, 0x1174, 0x11AD], NFKC: [0xB2B2], NFKD: [0x1102, 0x1174, 0x11AD] }, +{ source: [0xB2B3], NFC: [0xB2B3], NFD: [0x1102, 0x1174, 0x11AE], NFKC: [0xB2B3], NFKD: [0x1102, 0x1174, 0x11AE] }, +{ source: [0xB2B4], NFC: [0xB2B4], NFD: [0x1102, 0x1174, 0x11AF], NFKC: [0xB2B4], NFKD: [0x1102, 0x1174, 0x11AF] }, +{ source: [0xB2B5], NFC: [0xB2B5], NFD: [0x1102, 0x1174, 0x11B0], NFKC: [0xB2B5], NFKD: [0x1102, 0x1174, 0x11B0] }, +{ source: [0xB2B6], NFC: [0xB2B6], NFD: [0x1102, 0x1174, 0x11B1], NFKC: [0xB2B6], NFKD: [0x1102, 0x1174, 0x11B1] }, +{ source: [0xB2B7], NFC: [0xB2B7], NFD: [0x1102, 0x1174, 0x11B2], NFKC: [0xB2B7], NFKD: [0x1102, 0x1174, 0x11B2] }, +{ source: [0xB2B8], NFC: [0xB2B8], NFD: [0x1102, 0x1174, 0x11B3], NFKC: [0xB2B8], NFKD: [0x1102, 0x1174, 0x11B3] }, +{ source: [0xB2B9], NFC: [0xB2B9], NFD: [0x1102, 0x1174, 0x11B4], NFKC: [0xB2B9], NFKD: [0x1102, 0x1174, 0x11B4] }, +{ source: [0xB2BA], NFC: [0xB2BA], NFD: [0x1102, 0x1174, 0x11B5], NFKC: [0xB2BA], NFKD: [0x1102, 0x1174, 0x11B5] }, +{ source: [0xB2BB], NFC: [0xB2BB], NFD: [0x1102, 0x1174, 0x11B6], NFKC: [0xB2BB], NFKD: [0x1102, 0x1174, 0x11B6] }, +{ source: [0xB2BC], NFC: [0xB2BC], NFD: [0x1102, 0x1174, 0x11B7], NFKC: [0xB2BC], NFKD: [0x1102, 0x1174, 0x11B7] }, +{ source: [0xB2BD], NFC: [0xB2BD], NFD: [0x1102, 0x1174, 0x11B8], NFKC: [0xB2BD], NFKD: [0x1102, 0x1174, 0x11B8] }, +{ source: [0xB2BE], NFC: [0xB2BE], NFD: [0x1102, 0x1174, 0x11B9], NFKC: [0xB2BE], NFKD: [0x1102, 0x1174, 0x11B9] }, +{ source: [0xB2BF], NFC: [0xB2BF], NFD: [0x1102, 0x1174, 0x11BA], NFKC: [0xB2BF], NFKD: [0x1102, 0x1174, 0x11BA] }, +{ source: [0xB2C0], NFC: [0xB2C0], NFD: [0x1102, 0x1174, 0x11BB], NFKC: [0xB2C0], NFKD: [0x1102, 0x1174, 0x11BB] }, +{ source: [0xB2C1], NFC: [0xB2C1], NFD: [0x1102, 0x1174, 0x11BC], NFKC: [0xB2C1], NFKD: [0x1102, 0x1174, 0x11BC] }, +{ source: [0xB2C2], NFC: [0xB2C2], NFD: [0x1102, 0x1174, 0x11BD], NFKC: [0xB2C2], NFKD: [0x1102, 0x1174, 0x11BD] }, +{ source: [0xB2C3], NFC: [0xB2C3], NFD: [0x1102, 0x1174, 0x11BE], NFKC: [0xB2C3], NFKD: [0x1102, 0x1174, 0x11BE] }, +{ source: [0xB2C4], NFC: [0xB2C4], NFD: [0x1102, 0x1174, 0x11BF], NFKC: [0xB2C4], NFKD: [0x1102, 0x1174, 0x11BF] }, +{ source: [0xB2C5], NFC: [0xB2C5], NFD: [0x1102, 0x1174, 0x11C0], NFKC: [0xB2C5], NFKD: [0x1102, 0x1174, 0x11C0] }, +{ source: [0xB2C6], NFC: [0xB2C6], NFD: [0x1102, 0x1174, 0x11C1], NFKC: [0xB2C6], NFKD: [0x1102, 0x1174, 0x11C1] }, +{ source: [0xB2C7], NFC: [0xB2C7], NFD: [0x1102, 0x1174, 0x11C2], NFKC: [0xB2C7], NFKD: [0x1102, 0x1174, 0x11C2] }, +{ source: [0xB2C8], NFC: [0xB2C8], NFD: [0x1102, 0x1175], NFKC: [0xB2C8], NFKD: [0x1102, 0x1175] }, +{ source: [0xB2C9], NFC: [0xB2C9], NFD: [0x1102, 0x1175, 0x11A8], NFKC: [0xB2C9], NFKD: [0x1102, 0x1175, 0x11A8] }, +{ source: [0xB2CA], NFC: [0xB2CA], NFD: [0x1102, 0x1175, 0x11A9], NFKC: [0xB2CA], NFKD: [0x1102, 0x1175, 0x11A9] }, +{ source: [0xB2CB], NFC: [0xB2CB], NFD: [0x1102, 0x1175, 0x11AA], NFKC: [0xB2CB], NFKD: [0x1102, 0x1175, 0x11AA] }, +{ source: [0xB2CC], NFC: [0xB2CC], NFD: [0x1102, 0x1175, 0x11AB], NFKC: [0xB2CC], NFKD: [0x1102, 0x1175, 0x11AB] }, +{ source: [0xB2CD], NFC: [0xB2CD], NFD: [0x1102, 0x1175, 0x11AC], NFKC: [0xB2CD], NFKD: [0x1102, 0x1175, 0x11AC] }, +{ source: [0xB2CE], NFC: [0xB2CE], NFD: [0x1102, 0x1175, 0x11AD], NFKC: [0xB2CE], NFKD: [0x1102, 0x1175, 0x11AD] }, +{ source: [0xB2CF], NFC: [0xB2CF], NFD: [0x1102, 0x1175, 0x11AE], NFKC: [0xB2CF], NFKD: [0x1102, 0x1175, 0x11AE] }, +{ source: [0xB2D0], NFC: [0xB2D0], NFD: [0x1102, 0x1175, 0x11AF], NFKC: [0xB2D0], NFKD: [0x1102, 0x1175, 0x11AF] }, +{ source: [0xB2D1], NFC: [0xB2D1], NFD: [0x1102, 0x1175, 0x11B0], NFKC: [0xB2D1], NFKD: [0x1102, 0x1175, 0x11B0] }, +{ source: [0xB2D2], NFC: [0xB2D2], NFD: [0x1102, 0x1175, 0x11B1], NFKC: [0xB2D2], NFKD: [0x1102, 0x1175, 0x11B1] }, +{ source: [0xB2D3], NFC: [0xB2D3], NFD: [0x1102, 0x1175, 0x11B2], NFKC: [0xB2D3], NFKD: [0x1102, 0x1175, 0x11B2] }, +{ source: [0xB2D4], NFC: [0xB2D4], NFD: [0x1102, 0x1175, 0x11B3], NFKC: [0xB2D4], NFKD: [0x1102, 0x1175, 0x11B3] }, +{ source: [0xB2D5], NFC: [0xB2D5], NFD: [0x1102, 0x1175, 0x11B4], NFKC: [0xB2D5], NFKD: [0x1102, 0x1175, 0x11B4] }, +{ source: [0xB2D6], NFC: [0xB2D6], NFD: [0x1102, 0x1175, 0x11B5], NFKC: [0xB2D6], NFKD: [0x1102, 0x1175, 0x11B5] }, +{ source: [0xB2D7], NFC: [0xB2D7], NFD: [0x1102, 0x1175, 0x11B6], NFKC: [0xB2D7], NFKD: [0x1102, 0x1175, 0x11B6] }, +{ source: [0xB2D8], NFC: [0xB2D8], NFD: [0x1102, 0x1175, 0x11B7], NFKC: [0xB2D8], NFKD: [0x1102, 0x1175, 0x11B7] }, +{ source: [0xB2D9], NFC: [0xB2D9], NFD: [0x1102, 0x1175, 0x11B8], NFKC: [0xB2D9], NFKD: [0x1102, 0x1175, 0x11B8] }, +{ source: [0xB2DA], NFC: [0xB2DA], NFD: [0x1102, 0x1175, 0x11B9], NFKC: [0xB2DA], NFKD: [0x1102, 0x1175, 0x11B9] }, +{ source: [0xB2DB], NFC: [0xB2DB], NFD: [0x1102, 0x1175, 0x11BA], NFKC: [0xB2DB], NFKD: [0x1102, 0x1175, 0x11BA] }, +{ source: [0xB2DC], NFC: [0xB2DC], NFD: [0x1102, 0x1175, 0x11BB], NFKC: [0xB2DC], NFKD: [0x1102, 0x1175, 0x11BB] }, +{ source: [0xB2DD], NFC: [0xB2DD], NFD: [0x1102, 0x1175, 0x11BC], NFKC: [0xB2DD], NFKD: [0x1102, 0x1175, 0x11BC] }, +{ source: [0xB2DE], NFC: [0xB2DE], NFD: [0x1102, 0x1175, 0x11BD], NFKC: [0xB2DE], NFKD: [0x1102, 0x1175, 0x11BD] }, +{ source: [0xB2DF], NFC: [0xB2DF], NFD: [0x1102, 0x1175, 0x11BE], NFKC: [0xB2DF], NFKD: [0x1102, 0x1175, 0x11BE] }, +{ source: [0xB2E0], NFC: [0xB2E0], NFD: [0x1102, 0x1175, 0x11BF], NFKC: [0xB2E0], NFKD: [0x1102, 0x1175, 0x11BF] }, +{ source: [0xB2E1], NFC: [0xB2E1], NFD: [0x1102, 0x1175, 0x11C0], NFKC: [0xB2E1], NFKD: [0x1102, 0x1175, 0x11C0] }, +{ source: [0xB2E2], NFC: [0xB2E2], NFD: [0x1102, 0x1175, 0x11C1], NFKC: [0xB2E2], NFKD: [0x1102, 0x1175, 0x11C1] }, +{ source: [0xB2E3], NFC: [0xB2E3], NFD: [0x1102, 0x1175, 0x11C2], NFKC: [0xB2E3], NFKD: [0x1102, 0x1175, 0x11C2] }, +{ source: [0xB2E4], NFC: [0xB2E4], NFD: [0x1103, 0x1161], NFKC: [0xB2E4], NFKD: [0x1103, 0x1161] }, +{ source: [0xB2E5], NFC: [0xB2E5], NFD: [0x1103, 0x1161, 0x11A8], NFKC: [0xB2E5], NFKD: [0x1103, 0x1161, 0x11A8] }, +{ source: [0xB2E6], NFC: [0xB2E6], NFD: [0x1103, 0x1161, 0x11A9], NFKC: [0xB2E6], NFKD: [0x1103, 0x1161, 0x11A9] }, +{ source: [0xB2E7], NFC: [0xB2E7], NFD: [0x1103, 0x1161, 0x11AA], NFKC: [0xB2E7], NFKD: [0x1103, 0x1161, 0x11AA] }, +{ source: [0xB2E8], NFC: [0xB2E8], NFD: [0x1103, 0x1161, 0x11AB], NFKC: [0xB2E8], NFKD: [0x1103, 0x1161, 0x11AB] }, +{ source: [0xB2E9], NFC: [0xB2E9], NFD: [0x1103, 0x1161, 0x11AC], NFKC: [0xB2E9], NFKD: [0x1103, 0x1161, 0x11AC] }, +{ source: [0xB2EA], NFC: [0xB2EA], NFD: [0x1103, 0x1161, 0x11AD], NFKC: [0xB2EA], NFKD: [0x1103, 0x1161, 0x11AD] }, +{ source: [0xB2EB], NFC: [0xB2EB], NFD: [0x1103, 0x1161, 0x11AE], NFKC: [0xB2EB], NFKD: [0x1103, 0x1161, 0x11AE] }, +{ source: [0xB2EC], NFC: [0xB2EC], NFD: [0x1103, 0x1161, 0x11AF], NFKC: [0xB2EC], NFKD: [0x1103, 0x1161, 0x11AF] }, +{ source: [0xB2ED], NFC: [0xB2ED], NFD: [0x1103, 0x1161, 0x11B0], NFKC: [0xB2ED], NFKD: [0x1103, 0x1161, 0x11B0] }, +{ source: [0xB2EE], NFC: [0xB2EE], NFD: [0x1103, 0x1161, 0x11B1], NFKC: [0xB2EE], NFKD: [0x1103, 0x1161, 0x11B1] }, +{ source: [0xB2EF], NFC: [0xB2EF], NFD: [0x1103, 0x1161, 0x11B2], NFKC: [0xB2EF], NFKD: [0x1103, 0x1161, 0x11B2] }, +{ source: [0xB2F0], NFC: [0xB2F0], NFD: [0x1103, 0x1161, 0x11B3], NFKC: [0xB2F0], NFKD: [0x1103, 0x1161, 0x11B3] }, +{ source: [0xB2F1], NFC: [0xB2F1], NFD: [0x1103, 0x1161, 0x11B4], NFKC: [0xB2F1], NFKD: [0x1103, 0x1161, 0x11B4] }, +{ source: [0xB2F2], NFC: [0xB2F2], NFD: [0x1103, 0x1161, 0x11B5], NFKC: [0xB2F2], NFKD: [0x1103, 0x1161, 0x11B5] }, +{ source: [0xB2F3], NFC: [0xB2F3], NFD: [0x1103, 0x1161, 0x11B6], NFKC: [0xB2F3], NFKD: [0x1103, 0x1161, 0x11B6] }, +{ source: [0xB2F4], NFC: [0xB2F4], NFD: [0x1103, 0x1161, 0x11B7], NFKC: [0xB2F4], NFKD: [0x1103, 0x1161, 0x11B7] }, +{ source: [0xB2F5], NFC: [0xB2F5], NFD: [0x1103, 0x1161, 0x11B8], NFKC: [0xB2F5], NFKD: [0x1103, 0x1161, 0x11B8] }, +{ source: [0xB2F6], NFC: [0xB2F6], NFD: [0x1103, 0x1161, 0x11B9], NFKC: [0xB2F6], NFKD: [0x1103, 0x1161, 0x11B9] }, +{ source: [0xB2F7], NFC: [0xB2F7], NFD: [0x1103, 0x1161, 0x11BA], NFKC: [0xB2F7], NFKD: [0x1103, 0x1161, 0x11BA] }, +{ source: [0xB2F8], NFC: [0xB2F8], NFD: [0x1103, 0x1161, 0x11BB], NFKC: [0xB2F8], NFKD: [0x1103, 0x1161, 0x11BB] }, +{ source: [0xB2F9], NFC: [0xB2F9], NFD: [0x1103, 0x1161, 0x11BC], NFKC: [0xB2F9], NFKD: [0x1103, 0x1161, 0x11BC] }, +{ source: [0xB2FA], NFC: [0xB2FA], NFD: [0x1103, 0x1161, 0x11BD], NFKC: [0xB2FA], NFKD: [0x1103, 0x1161, 0x11BD] }, +{ source: [0xB2FB], NFC: [0xB2FB], NFD: [0x1103, 0x1161, 0x11BE], NFKC: [0xB2FB], NFKD: [0x1103, 0x1161, 0x11BE] }, +{ source: [0xB2FC], NFC: [0xB2FC], NFD: [0x1103, 0x1161, 0x11BF], NFKC: [0xB2FC], NFKD: [0x1103, 0x1161, 0x11BF] }, +{ source: [0xB2FD], NFC: [0xB2FD], NFD: [0x1103, 0x1161, 0x11C0], NFKC: [0xB2FD], NFKD: [0x1103, 0x1161, 0x11C0] }, +{ source: [0xB2FE], NFC: [0xB2FE], NFD: [0x1103, 0x1161, 0x11C1], NFKC: [0xB2FE], NFKD: [0x1103, 0x1161, 0x11C1] }, +{ source: [0xB2FF], NFC: [0xB2FF], NFD: [0x1103, 0x1161, 0x11C2], NFKC: [0xB2FF], NFKD: [0x1103, 0x1161, 0x11C2] }, +{ source: [0xB300], NFC: [0xB300], NFD: [0x1103, 0x1162], NFKC: [0xB300], NFKD: [0x1103, 0x1162] }, +{ source: [0xB301], NFC: [0xB301], NFD: [0x1103, 0x1162, 0x11A8], NFKC: [0xB301], NFKD: [0x1103, 0x1162, 0x11A8] }, +{ source: [0xB302], NFC: [0xB302], NFD: [0x1103, 0x1162, 0x11A9], NFKC: [0xB302], NFKD: [0x1103, 0x1162, 0x11A9] }, +{ source: [0xB303], NFC: [0xB303], NFD: [0x1103, 0x1162, 0x11AA], NFKC: [0xB303], NFKD: [0x1103, 0x1162, 0x11AA] }, +{ source: [0xB304], NFC: [0xB304], NFD: [0x1103, 0x1162, 0x11AB], NFKC: [0xB304], NFKD: [0x1103, 0x1162, 0x11AB] }, +{ source: [0xB305], NFC: [0xB305], NFD: [0x1103, 0x1162, 0x11AC], NFKC: [0xB305], NFKD: [0x1103, 0x1162, 0x11AC] }, +{ source: [0xB306], NFC: [0xB306], NFD: [0x1103, 0x1162, 0x11AD], NFKC: [0xB306], NFKD: [0x1103, 0x1162, 0x11AD] }, +{ source: [0xB307], NFC: [0xB307], NFD: [0x1103, 0x1162, 0x11AE], NFKC: [0xB307], NFKD: [0x1103, 0x1162, 0x11AE] }, +{ source: [0xB308], NFC: [0xB308], NFD: [0x1103, 0x1162, 0x11AF], NFKC: [0xB308], NFKD: [0x1103, 0x1162, 0x11AF] }, +{ source: [0xB309], NFC: [0xB309], NFD: [0x1103, 0x1162, 0x11B0], NFKC: [0xB309], NFKD: [0x1103, 0x1162, 0x11B0] }, +{ source: [0xB30A], NFC: [0xB30A], NFD: [0x1103, 0x1162, 0x11B1], NFKC: [0xB30A], NFKD: [0x1103, 0x1162, 0x11B1] }, +{ source: [0xB30B], NFC: [0xB30B], NFD: [0x1103, 0x1162, 0x11B2], NFKC: [0xB30B], NFKD: [0x1103, 0x1162, 0x11B2] }, +{ source: [0xB30C], NFC: [0xB30C], NFD: [0x1103, 0x1162, 0x11B3], NFKC: [0xB30C], NFKD: [0x1103, 0x1162, 0x11B3] }, +{ source: [0xB30D], NFC: [0xB30D], NFD: [0x1103, 0x1162, 0x11B4], NFKC: [0xB30D], NFKD: [0x1103, 0x1162, 0x11B4] }, +{ source: [0xB30E], NFC: [0xB30E], NFD: [0x1103, 0x1162, 0x11B5], NFKC: [0xB30E], NFKD: [0x1103, 0x1162, 0x11B5] }, +{ source: [0xB30F], NFC: [0xB30F], NFD: [0x1103, 0x1162, 0x11B6], NFKC: [0xB30F], NFKD: [0x1103, 0x1162, 0x11B6] }, +{ source: [0xB310], NFC: [0xB310], NFD: [0x1103, 0x1162, 0x11B7], NFKC: [0xB310], NFKD: [0x1103, 0x1162, 0x11B7] }, +{ source: [0xB311], NFC: [0xB311], NFD: [0x1103, 0x1162, 0x11B8], NFKC: [0xB311], NFKD: [0x1103, 0x1162, 0x11B8] }, +{ source: [0xB312], NFC: [0xB312], NFD: [0x1103, 0x1162, 0x11B9], NFKC: [0xB312], NFKD: [0x1103, 0x1162, 0x11B9] }, +{ source: [0xB313], NFC: [0xB313], NFD: [0x1103, 0x1162, 0x11BA], NFKC: [0xB313], NFKD: [0x1103, 0x1162, 0x11BA] }, +{ source: [0xB314], NFC: [0xB314], NFD: [0x1103, 0x1162, 0x11BB], NFKC: [0xB314], NFKD: [0x1103, 0x1162, 0x11BB] }, +{ source: [0xB315], NFC: [0xB315], NFD: [0x1103, 0x1162, 0x11BC], NFKC: [0xB315], NFKD: [0x1103, 0x1162, 0x11BC] }, +{ source: [0xB316], NFC: [0xB316], NFD: [0x1103, 0x1162, 0x11BD], NFKC: [0xB316], NFKD: [0x1103, 0x1162, 0x11BD] }, +{ source: [0xB317], NFC: [0xB317], NFD: [0x1103, 0x1162, 0x11BE], NFKC: [0xB317], NFKD: [0x1103, 0x1162, 0x11BE] }, +{ source: [0xB318], NFC: [0xB318], NFD: [0x1103, 0x1162, 0x11BF], NFKC: [0xB318], NFKD: [0x1103, 0x1162, 0x11BF] }, +{ source: [0xB319], NFC: [0xB319], NFD: [0x1103, 0x1162, 0x11C0], NFKC: [0xB319], NFKD: [0x1103, 0x1162, 0x11C0] }, +{ source: [0xB31A], NFC: [0xB31A], NFD: [0x1103, 0x1162, 0x11C1], NFKC: [0xB31A], NFKD: [0x1103, 0x1162, 0x11C1] }, +{ source: [0xB31B], NFC: [0xB31B], NFD: [0x1103, 0x1162, 0x11C2], NFKC: [0xB31B], NFKD: [0x1103, 0x1162, 0x11C2] }, +{ source: [0xB31C], NFC: [0xB31C], NFD: [0x1103, 0x1163], NFKC: [0xB31C], NFKD: [0x1103, 0x1163] }, +{ source: [0xB31D], NFC: [0xB31D], NFD: [0x1103, 0x1163, 0x11A8], NFKC: [0xB31D], NFKD: [0x1103, 0x1163, 0x11A8] }, +{ source: [0xB31E], NFC: [0xB31E], NFD: [0x1103, 0x1163, 0x11A9], NFKC: [0xB31E], NFKD: [0x1103, 0x1163, 0x11A9] }, +{ source: [0xB31F], NFC: [0xB31F], NFD: [0x1103, 0x1163, 0x11AA], NFKC: [0xB31F], NFKD: [0x1103, 0x1163, 0x11AA] }, +{ source: [0xB320], NFC: [0xB320], NFD: [0x1103, 0x1163, 0x11AB], NFKC: [0xB320], NFKD: [0x1103, 0x1163, 0x11AB] }, +{ source: [0xB321], NFC: [0xB321], NFD: [0x1103, 0x1163, 0x11AC], NFKC: [0xB321], NFKD: [0x1103, 0x1163, 0x11AC] }, +{ source: [0xB322], NFC: [0xB322], NFD: [0x1103, 0x1163, 0x11AD], NFKC: [0xB322], NFKD: [0x1103, 0x1163, 0x11AD] }, +{ source: [0xB323], NFC: [0xB323], NFD: [0x1103, 0x1163, 0x11AE], NFKC: [0xB323], NFKD: [0x1103, 0x1163, 0x11AE] }, +{ source: [0xB324], NFC: [0xB324], NFD: [0x1103, 0x1163, 0x11AF], NFKC: [0xB324], NFKD: [0x1103, 0x1163, 0x11AF] }, +{ source: [0xB325], NFC: [0xB325], NFD: [0x1103, 0x1163, 0x11B0], NFKC: [0xB325], NFKD: [0x1103, 0x1163, 0x11B0] }, +{ source: [0xB326], NFC: [0xB326], NFD: [0x1103, 0x1163, 0x11B1], NFKC: [0xB326], NFKD: [0x1103, 0x1163, 0x11B1] }, +{ source: [0xB327], NFC: [0xB327], NFD: [0x1103, 0x1163, 0x11B2], NFKC: [0xB327], NFKD: [0x1103, 0x1163, 0x11B2] }, +{ source: [0xB328], NFC: [0xB328], NFD: [0x1103, 0x1163, 0x11B3], NFKC: [0xB328], NFKD: [0x1103, 0x1163, 0x11B3] }, +{ source: [0xB329], NFC: [0xB329], NFD: [0x1103, 0x1163, 0x11B4], NFKC: [0xB329], NFKD: [0x1103, 0x1163, 0x11B4] }, +{ source: [0xB32A], NFC: [0xB32A], NFD: [0x1103, 0x1163, 0x11B5], NFKC: [0xB32A], NFKD: [0x1103, 0x1163, 0x11B5] }, +{ source: [0xB32B], NFC: [0xB32B], NFD: [0x1103, 0x1163, 0x11B6], NFKC: [0xB32B], NFKD: [0x1103, 0x1163, 0x11B6] }, +{ source: [0xB32C], NFC: [0xB32C], NFD: [0x1103, 0x1163, 0x11B7], NFKC: [0xB32C], NFKD: [0x1103, 0x1163, 0x11B7] }, +{ source: [0xB32D], NFC: [0xB32D], NFD: [0x1103, 0x1163, 0x11B8], NFKC: [0xB32D], NFKD: [0x1103, 0x1163, 0x11B8] }, +{ source: [0xB32E], NFC: [0xB32E], NFD: [0x1103, 0x1163, 0x11B9], NFKC: [0xB32E], NFKD: [0x1103, 0x1163, 0x11B9] }, +{ source: [0xB32F], NFC: [0xB32F], NFD: [0x1103, 0x1163, 0x11BA], NFKC: [0xB32F], NFKD: [0x1103, 0x1163, 0x11BA] }, +{ source: [0xB330], NFC: [0xB330], NFD: [0x1103, 0x1163, 0x11BB], NFKC: [0xB330], NFKD: [0x1103, 0x1163, 0x11BB] }, +{ source: [0xB331], NFC: [0xB331], NFD: [0x1103, 0x1163, 0x11BC], NFKC: [0xB331], NFKD: [0x1103, 0x1163, 0x11BC] }, +{ source: [0xB332], NFC: [0xB332], NFD: [0x1103, 0x1163, 0x11BD], NFKC: [0xB332], NFKD: [0x1103, 0x1163, 0x11BD] }, +{ source: [0xB333], NFC: [0xB333], NFD: [0x1103, 0x1163, 0x11BE], NFKC: [0xB333], NFKD: [0x1103, 0x1163, 0x11BE] }, +{ source: [0xB334], NFC: [0xB334], NFD: [0x1103, 0x1163, 0x11BF], NFKC: [0xB334], NFKD: [0x1103, 0x1163, 0x11BF] }, +{ source: [0xB335], NFC: [0xB335], NFD: [0x1103, 0x1163, 0x11C0], NFKC: [0xB335], NFKD: [0x1103, 0x1163, 0x11C0] }, +{ source: [0xB336], NFC: [0xB336], NFD: [0x1103, 0x1163, 0x11C1], NFKC: [0xB336], NFKD: [0x1103, 0x1163, 0x11C1] }, +{ source: [0xB337], NFC: [0xB337], NFD: [0x1103, 0x1163, 0x11C2], NFKC: [0xB337], NFKD: [0x1103, 0x1163, 0x11C2] }, +{ source: [0xB338], NFC: [0xB338], NFD: [0x1103, 0x1164], NFKC: [0xB338], NFKD: [0x1103, 0x1164] }, +{ source: [0xB339], NFC: [0xB339], NFD: [0x1103, 0x1164, 0x11A8], NFKC: [0xB339], NFKD: [0x1103, 0x1164, 0x11A8] }, +{ source: [0xB33A], NFC: [0xB33A], NFD: [0x1103, 0x1164, 0x11A9], NFKC: [0xB33A], NFKD: [0x1103, 0x1164, 0x11A9] }, +{ source: [0xB33B], NFC: [0xB33B], NFD: [0x1103, 0x1164, 0x11AA], NFKC: [0xB33B], NFKD: [0x1103, 0x1164, 0x11AA] }, +{ source: [0xB33C], NFC: [0xB33C], NFD: [0x1103, 0x1164, 0x11AB], NFKC: [0xB33C], NFKD: [0x1103, 0x1164, 0x11AB] }, +{ source: [0xB33D], NFC: [0xB33D], NFD: [0x1103, 0x1164, 0x11AC], NFKC: [0xB33D], NFKD: [0x1103, 0x1164, 0x11AC] }, +{ source: [0xB33E], NFC: [0xB33E], NFD: [0x1103, 0x1164, 0x11AD], NFKC: [0xB33E], NFKD: [0x1103, 0x1164, 0x11AD] }, +{ source: [0xB33F], NFC: [0xB33F], NFD: [0x1103, 0x1164, 0x11AE], NFKC: [0xB33F], NFKD: [0x1103, 0x1164, 0x11AE] }, +{ source: [0xB340], NFC: [0xB340], NFD: [0x1103, 0x1164, 0x11AF], NFKC: [0xB340], NFKD: [0x1103, 0x1164, 0x11AF] }, +{ source: [0xB341], NFC: [0xB341], NFD: [0x1103, 0x1164, 0x11B0], NFKC: [0xB341], NFKD: [0x1103, 0x1164, 0x11B0] }, +{ source: [0xB342], NFC: [0xB342], NFD: [0x1103, 0x1164, 0x11B1], NFKC: [0xB342], NFKD: [0x1103, 0x1164, 0x11B1] }, +{ source: [0xB343], NFC: [0xB343], NFD: [0x1103, 0x1164, 0x11B2], NFKC: [0xB343], NFKD: [0x1103, 0x1164, 0x11B2] }, +{ source: [0xB344], NFC: [0xB344], NFD: [0x1103, 0x1164, 0x11B3], NFKC: [0xB344], NFKD: [0x1103, 0x1164, 0x11B3] }, +{ source: [0xB345], NFC: [0xB345], NFD: [0x1103, 0x1164, 0x11B4], NFKC: [0xB345], NFKD: [0x1103, 0x1164, 0x11B4] }, +{ source: [0xB346], NFC: [0xB346], NFD: [0x1103, 0x1164, 0x11B5], NFKC: [0xB346], NFKD: [0x1103, 0x1164, 0x11B5] }, +{ source: [0xB347], NFC: [0xB347], NFD: [0x1103, 0x1164, 0x11B6], NFKC: [0xB347], NFKD: [0x1103, 0x1164, 0x11B6] }, +{ source: [0xB348], NFC: [0xB348], NFD: [0x1103, 0x1164, 0x11B7], NFKC: [0xB348], NFKD: [0x1103, 0x1164, 0x11B7] }, +{ source: [0xB349], NFC: [0xB349], NFD: [0x1103, 0x1164, 0x11B8], NFKC: [0xB349], NFKD: [0x1103, 0x1164, 0x11B8] }, +{ source: [0xB34A], NFC: [0xB34A], NFD: [0x1103, 0x1164, 0x11B9], NFKC: [0xB34A], NFKD: [0x1103, 0x1164, 0x11B9] }, +{ source: [0xB34B], NFC: [0xB34B], NFD: [0x1103, 0x1164, 0x11BA], NFKC: [0xB34B], NFKD: [0x1103, 0x1164, 0x11BA] }, +{ source: [0xB34C], NFC: [0xB34C], NFD: [0x1103, 0x1164, 0x11BB], NFKC: [0xB34C], NFKD: [0x1103, 0x1164, 0x11BB] }, +{ source: [0xB34D], NFC: [0xB34D], NFD: [0x1103, 0x1164, 0x11BC], NFKC: [0xB34D], NFKD: [0x1103, 0x1164, 0x11BC] }, +{ source: [0xB34E], NFC: [0xB34E], NFD: [0x1103, 0x1164, 0x11BD], NFKC: [0xB34E], NFKD: [0x1103, 0x1164, 0x11BD] }, +{ source: [0xB34F], NFC: [0xB34F], NFD: [0x1103, 0x1164, 0x11BE], NFKC: [0xB34F], NFKD: [0x1103, 0x1164, 0x11BE] }, +{ source: [0xB350], NFC: [0xB350], NFD: [0x1103, 0x1164, 0x11BF], NFKC: [0xB350], NFKD: [0x1103, 0x1164, 0x11BF] }, +{ source: [0xB351], NFC: [0xB351], NFD: [0x1103, 0x1164, 0x11C0], NFKC: [0xB351], NFKD: [0x1103, 0x1164, 0x11C0] }, +{ source: [0xB352], NFC: [0xB352], NFD: [0x1103, 0x1164, 0x11C1], NFKC: [0xB352], NFKD: [0x1103, 0x1164, 0x11C1] }, +{ source: [0xB353], NFC: [0xB353], NFD: [0x1103, 0x1164, 0x11C2], NFKC: [0xB353], NFKD: [0x1103, 0x1164, 0x11C2] }, +{ source: [0xB354], NFC: [0xB354], NFD: [0x1103, 0x1165], NFKC: [0xB354], NFKD: [0x1103, 0x1165] }, +{ source: [0xB355], NFC: [0xB355], NFD: [0x1103, 0x1165, 0x11A8], NFKC: [0xB355], NFKD: [0x1103, 0x1165, 0x11A8] }, +{ source: [0xB356], NFC: [0xB356], NFD: [0x1103, 0x1165, 0x11A9], NFKC: [0xB356], NFKD: [0x1103, 0x1165, 0x11A9] }, +{ source: [0xB357], NFC: [0xB357], NFD: [0x1103, 0x1165, 0x11AA], NFKC: [0xB357], NFKD: [0x1103, 0x1165, 0x11AA] }, +{ source: [0xB358], NFC: [0xB358], NFD: [0x1103, 0x1165, 0x11AB], NFKC: [0xB358], NFKD: [0x1103, 0x1165, 0x11AB] }, +{ source: [0xB359], NFC: [0xB359], NFD: [0x1103, 0x1165, 0x11AC], NFKC: [0xB359], NFKD: [0x1103, 0x1165, 0x11AC] }, +{ source: [0xB35A], NFC: [0xB35A], NFD: [0x1103, 0x1165, 0x11AD], NFKC: [0xB35A], NFKD: [0x1103, 0x1165, 0x11AD] }, +{ source: [0xB35B], NFC: [0xB35B], NFD: [0x1103, 0x1165, 0x11AE], NFKC: [0xB35B], NFKD: [0x1103, 0x1165, 0x11AE] }, +{ source: [0xB35C], NFC: [0xB35C], NFD: [0x1103, 0x1165, 0x11AF], NFKC: [0xB35C], NFKD: [0x1103, 0x1165, 0x11AF] }, +{ source: [0xB35D], NFC: [0xB35D], NFD: [0x1103, 0x1165, 0x11B0], NFKC: [0xB35D], NFKD: [0x1103, 0x1165, 0x11B0] }, +{ source: [0xB35E], NFC: [0xB35E], NFD: [0x1103, 0x1165, 0x11B1], NFKC: [0xB35E], NFKD: [0x1103, 0x1165, 0x11B1] }, +{ source: [0xB35F], NFC: [0xB35F], NFD: [0x1103, 0x1165, 0x11B2], NFKC: [0xB35F], NFKD: [0x1103, 0x1165, 0x11B2] }, +{ source: [0xB360], NFC: [0xB360], NFD: [0x1103, 0x1165, 0x11B3], NFKC: [0xB360], NFKD: [0x1103, 0x1165, 0x11B3] }, +{ source: [0xB361], NFC: [0xB361], NFD: [0x1103, 0x1165, 0x11B4], NFKC: [0xB361], NFKD: [0x1103, 0x1165, 0x11B4] }, +{ source: [0xB362], NFC: [0xB362], NFD: [0x1103, 0x1165, 0x11B5], NFKC: [0xB362], NFKD: [0x1103, 0x1165, 0x11B5] }, +{ source: [0xB363], NFC: [0xB363], NFD: [0x1103, 0x1165, 0x11B6], NFKC: [0xB363], NFKD: [0x1103, 0x1165, 0x11B6] }, +{ source: [0xB364], NFC: [0xB364], NFD: [0x1103, 0x1165, 0x11B7], NFKC: [0xB364], NFKD: [0x1103, 0x1165, 0x11B7] }, +{ source: [0xB365], NFC: [0xB365], NFD: [0x1103, 0x1165, 0x11B8], NFKC: [0xB365], NFKD: [0x1103, 0x1165, 0x11B8] }, +{ source: [0xB366], NFC: [0xB366], NFD: [0x1103, 0x1165, 0x11B9], NFKC: [0xB366], NFKD: [0x1103, 0x1165, 0x11B9] }, +{ source: [0xB367], NFC: [0xB367], NFD: [0x1103, 0x1165, 0x11BA], NFKC: [0xB367], NFKD: [0x1103, 0x1165, 0x11BA] }, +{ source: [0xB368], NFC: [0xB368], NFD: [0x1103, 0x1165, 0x11BB], NFKC: [0xB368], NFKD: [0x1103, 0x1165, 0x11BB] }, +{ source: [0xB369], NFC: [0xB369], NFD: [0x1103, 0x1165, 0x11BC], NFKC: [0xB369], NFKD: [0x1103, 0x1165, 0x11BC] }, +{ source: [0xB36A], NFC: [0xB36A], NFD: [0x1103, 0x1165, 0x11BD], NFKC: [0xB36A], NFKD: [0x1103, 0x1165, 0x11BD] }, +{ source: [0xB36B], NFC: [0xB36B], NFD: [0x1103, 0x1165, 0x11BE], NFKC: [0xB36B], NFKD: [0x1103, 0x1165, 0x11BE] }, +{ source: [0xB36C], NFC: [0xB36C], NFD: [0x1103, 0x1165, 0x11BF], NFKC: [0xB36C], NFKD: [0x1103, 0x1165, 0x11BF] }, +{ source: [0xB36D], NFC: [0xB36D], NFD: [0x1103, 0x1165, 0x11C0], NFKC: [0xB36D], NFKD: [0x1103, 0x1165, 0x11C0] }, +{ source: [0xB36E], NFC: [0xB36E], NFD: [0x1103, 0x1165, 0x11C1], NFKC: [0xB36E], NFKD: [0x1103, 0x1165, 0x11C1] }, +{ source: [0xB36F], NFC: [0xB36F], NFD: [0x1103, 0x1165, 0x11C2], NFKC: [0xB36F], NFKD: [0x1103, 0x1165, 0x11C2] }, +{ source: [0xB370], NFC: [0xB370], NFD: [0x1103, 0x1166], NFKC: [0xB370], NFKD: [0x1103, 0x1166] }, +{ source: [0xB371], NFC: [0xB371], NFD: [0x1103, 0x1166, 0x11A8], NFKC: [0xB371], NFKD: [0x1103, 0x1166, 0x11A8] }, +{ source: [0xB372], NFC: [0xB372], NFD: [0x1103, 0x1166, 0x11A9], NFKC: [0xB372], NFKD: [0x1103, 0x1166, 0x11A9] }, +{ source: [0xB373], NFC: [0xB373], NFD: [0x1103, 0x1166, 0x11AA], NFKC: [0xB373], NFKD: [0x1103, 0x1166, 0x11AA] }, +{ source: [0xB374], NFC: [0xB374], NFD: [0x1103, 0x1166, 0x11AB], NFKC: [0xB374], NFKD: [0x1103, 0x1166, 0x11AB] }, +{ source: [0xB375], NFC: [0xB375], NFD: [0x1103, 0x1166, 0x11AC], NFKC: [0xB375], NFKD: [0x1103, 0x1166, 0x11AC] }, +{ source: [0xB376], NFC: [0xB376], NFD: [0x1103, 0x1166, 0x11AD], NFKC: [0xB376], NFKD: [0x1103, 0x1166, 0x11AD] }, +{ source: [0xB377], NFC: [0xB377], NFD: [0x1103, 0x1166, 0x11AE], NFKC: [0xB377], NFKD: [0x1103, 0x1166, 0x11AE] }, +{ source: [0xB378], NFC: [0xB378], NFD: [0x1103, 0x1166, 0x11AF], NFKC: [0xB378], NFKD: [0x1103, 0x1166, 0x11AF] }, +{ source: [0xB379], NFC: [0xB379], NFD: [0x1103, 0x1166, 0x11B0], NFKC: [0xB379], NFKD: [0x1103, 0x1166, 0x11B0] }, +{ source: [0xB37A], NFC: [0xB37A], NFD: [0x1103, 0x1166, 0x11B1], NFKC: [0xB37A], NFKD: [0x1103, 0x1166, 0x11B1] }, +{ source: [0xB37B], NFC: [0xB37B], NFD: [0x1103, 0x1166, 0x11B2], NFKC: [0xB37B], NFKD: [0x1103, 0x1166, 0x11B2] }, +{ source: [0xB37C], NFC: [0xB37C], NFD: [0x1103, 0x1166, 0x11B3], NFKC: [0xB37C], NFKD: [0x1103, 0x1166, 0x11B3] }, +{ source: [0xB37D], NFC: [0xB37D], NFD: [0x1103, 0x1166, 0x11B4], NFKC: [0xB37D], NFKD: [0x1103, 0x1166, 0x11B4] }, +{ source: [0xB37E], NFC: [0xB37E], NFD: [0x1103, 0x1166, 0x11B5], NFKC: [0xB37E], NFKD: [0x1103, 0x1166, 0x11B5] }, +{ source: [0xB37F], NFC: [0xB37F], NFD: [0x1103, 0x1166, 0x11B6], NFKC: [0xB37F], NFKD: [0x1103, 0x1166, 0x11B6] }, +{ source: [0xB380], NFC: [0xB380], NFD: [0x1103, 0x1166, 0x11B7], NFKC: [0xB380], NFKD: [0x1103, 0x1166, 0x11B7] }, +{ source: [0xB381], NFC: [0xB381], NFD: [0x1103, 0x1166, 0x11B8], NFKC: [0xB381], NFKD: [0x1103, 0x1166, 0x11B8] }, +{ source: [0xB382], NFC: [0xB382], NFD: [0x1103, 0x1166, 0x11B9], NFKC: [0xB382], NFKD: [0x1103, 0x1166, 0x11B9] }, +{ source: [0xB383], NFC: [0xB383], NFD: [0x1103, 0x1166, 0x11BA], NFKC: [0xB383], NFKD: [0x1103, 0x1166, 0x11BA] }, +{ source: [0xB384], NFC: [0xB384], NFD: [0x1103, 0x1166, 0x11BB], NFKC: [0xB384], NFKD: [0x1103, 0x1166, 0x11BB] }, +{ source: [0xB385], NFC: [0xB385], NFD: [0x1103, 0x1166, 0x11BC], NFKC: [0xB385], NFKD: [0x1103, 0x1166, 0x11BC] }, +{ source: [0xB386], NFC: [0xB386], NFD: [0x1103, 0x1166, 0x11BD], NFKC: [0xB386], NFKD: [0x1103, 0x1166, 0x11BD] }, +{ source: [0xB387], NFC: [0xB387], NFD: [0x1103, 0x1166, 0x11BE], NFKC: [0xB387], NFKD: [0x1103, 0x1166, 0x11BE] }, +{ source: [0xB388], NFC: [0xB388], NFD: [0x1103, 0x1166, 0x11BF], NFKC: [0xB388], NFKD: [0x1103, 0x1166, 0x11BF] }, +{ source: [0xB389], NFC: [0xB389], NFD: [0x1103, 0x1166, 0x11C0], NFKC: [0xB389], NFKD: [0x1103, 0x1166, 0x11C0] }, +{ source: [0xB38A], NFC: [0xB38A], NFD: [0x1103, 0x1166, 0x11C1], NFKC: [0xB38A], NFKD: [0x1103, 0x1166, 0x11C1] }, +{ source: [0xB38B], NFC: [0xB38B], NFD: [0x1103, 0x1166, 0x11C2], NFKC: [0xB38B], NFKD: [0x1103, 0x1166, 0x11C2] }, +{ source: [0xB38C], NFC: [0xB38C], NFD: [0x1103, 0x1167], NFKC: [0xB38C], NFKD: [0x1103, 0x1167] }, +{ source: [0xB38D], NFC: [0xB38D], NFD: [0x1103, 0x1167, 0x11A8], NFKC: [0xB38D], NFKD: [0x1103, 0x1167, 0x11A8] }, +{ source: [0xB38E], NFC: [0xB38E], NFD: [0x1103, 0x1167, 0x11A9], NFKC: [0xB38E], NFKD: [0x1103, 0x1167, 0x11A9] }, +{ source: [0xB38F], NFC: [0xB38F], NFD: [0x1103, 0x1167, 0x11AA], NFKC: [0xB38F], NFKD: [0x1103, 0x1167, 0x11AA] }, +{ source: [0xB390], NFC: [0xB390], NFD: [0x1103, 0x1167, 0x11AB], NFKC: [0xB390], NFKD: [0x1103, 0x1167, 0x11AB] }, +{ source: [0xB391], NFC: [0xB391], NFD: [0x1103, 0x1167, 0x11AC], NFKC: [0xB391], NFKD: [0x1103, 0x1167, 0x11AC] }, +{ source: [0xB392], NFC: [0xB392], NFD: [0x1103, 0x1167, 0x11AD], NFKC: [0xB392], NFKD: [0x1103, 0x1167, 0x11AD] }, +{ source: [0xB393], NFC: [0xB393], NFD: [0x1103, 0x1167, 0x11AE], NFKC: [0xB393], NFKD: [0x1103, 0x1167, 0x11AE] }, +{ source: [0xB394], NFC: [0xB394], NFD: [0x1103, 0x1167, 0x11AF], NFKC: [0xB394], NFKD: [0x1103, 0x1167, 0x11AF] }, +{ source: [0xB395], NFC: [0xB395], NFD: [0x1103, 0x1167, 0x11B0], NFKC: [0xB395], NFKD: [0x1103, 0x1167, 0x11B0] }, +{ source: [0xB396], NFC: [0xB396], NFD: [0x1103, 0x1167, 0x11B1], NFKC: [0xB396], NFKD: [0x1103, 0x1167, 0x11B1] }, +{ source: [0xB397], NFC: [0xB397], NFD: [0x1103, 0x1167, 0x11B2], NFKC: [0xB397], NFKD: [0x1103, 0x1167, 0x11B2] }, +{ source: [0xB398], NFC: [0xB398], NFD: [0x1103, 0x1167, 0x11B3], NFKC: [0xB398], NFKD: [0x1103, 0x1167, 0x11B3] }, +{ source: [0xB399], NFC: [0xB399], NFD: [0x1103, 0x1167, 0x11B4], NFKC: [0xB399], NFKD: [0x1103, 0x1167, 0x11B4] }, +{ source: [0xB39A], NFC: [0xB39A], NFD: [0x1103, 0x1167, 0x11B5], NFKC: [0xB39A], NFKD: [0x1103, 0x1167, 0x11B5] }, +{ source: [0xB39B], NFC: [0xB39B], NFD: [0x1103, 0x1167, 0x11B6], NFKC: [0xB39B], NFKD: [0x1103, 0x1167, 0x11B6] }, +{ source: [0xB39C], NFC: [0xB39C], NFD: [0x1103, 0x1167, 0x11B7], NFKC: [0xB39C], NFKD: [0x1103, 0x1167, 0x11B7] }, +{ source: [0xB39D], NFC: [0xB39D], NFD: [0x1103, 0x1167, 0x11B8], NFKC: [0xB39D], NFKD: [0x1103, 0x1167, 0x11B8] }, +{ source: [0xB39E], NFC: [0xB39E], NFD: [0x1103, 0x1167, 0x11B9], NFKC: [0xB39E], NFKD: [0x1103, 0x1167, 0x11B9] }, +{ source: [0xB39F], NFC: [0xB39F], NFD: [0x1103, 0x1167, 0x11BA], NFKC: [0xB39F], NFKD: [0x1103, 0x1167, 0x11BA] }, +{ source: [0xB3A0], NFC: [0xB3A0], NFD: [0x1103, 0x1167, 0x11BB], NFKC: [0xB3A0], NFKD: [0x1103, 0x1167, 0x11BB] }, +{ source: [0xB3A1], NFC: [0xB3A1], NFD: [0x1103, 0x1167, 0x11BC], NFKC: [0xB3A1], NFKD: [0x1103, 0x1167, 0x11BC] }, +{ source: [0xB3A2], NFC: [0xB3A2], NFD: [0x1103, 0x1167, 0x11BD], NFKC: [0xB3A2], NFKD: [0x1103, 0x1167, 0x11BD] }, +{ source: [0xB3A3], NFC: [0xB3A3], NFD: [0x1103, 0x1167, 0x11BE], NFKC: [0xB3A3], NFKD: [0x1103, 0x1167, 0x11BE] }, +{ source: [0xB3A4], NFC: [0xB3A4], NFD: [0x1103, 0x1167, 0x11BF], NFKC: [0xB3A4], NFKD: [0x1103, 0x1167, 0x11BF] }, +{ source: [0xB3A5], NFC: [0xB3A5], NFD: [0x1103, 0x1167, 0x11C0], NFKC: [0xB3A5], NFKD: [0x1103, 0x1167, 0x11C0] }, +{ source: [0xB3A6], NFC: [0xB3A6], NFD: [0x1103, 0x1167, 0x11C1], NFKC: [0xB3A6], NFKD: [0x1103, 0x1167, 0x11C1] }, +{ source: [0xB3A7], NFC: [0xB3A7], NFD: [0x1103, 0x1167, 0x11C2], NFKC: [0xB3A7], NFKD: [0x1103, 0x1167, 0x11C2] }, +{ source: [0xB3A8], NFC: [0xB3A8], NFD: [0x1103, 0x1168], NFKC: [0xB3A8], NFKD: [0x1103, 0x1168] }, +{ source: [0xB3A9], NFC: [0xB3A9], NFD: [0x1103, 0x1168, 0x11A8], NFKC: [0xB3A9], NFKD: [0x1103, 0x1168, 0x11A8] }, +{ source: [0xB3AA], NFC: [0xB3AA], NFD: [0x1103, 0x1168, 0x11A9], NFKC: [0xB3AA], NFKD: [0x1103, 0x1168, 0x11A9] }, +{ source: [0xB3AB], NFC: [0xB3AB], NFD: [0x1103, 0x1168, 0x11AA], NFKC: [0xB3AB], NFKD: [0x1103, 0x1168, 0x11AA] }, +{ source: [0xB3AC], NFC: [0xB3AC], NFD: [0x1103, 0x1168, 0x11AB], NFKC: [0xB3AC], NFKD: [0x1103, 0x1168, 0x11AB] }, +{ source: [0xB3AD], NFC: [0xB3AD], NFD: [0x1103, 0x1168, 0x11AC], NFKC: [0xB3AD], NFKD: [0x1103, 0x1168, 0x11AC] }, +{ source: [0xB3AE], NFC: [0xB3AE], NFD: [0x1103, 0x1168, 0x11AD], NFKC: [0xB3AE], NFKD: [0x1103, 0x1168, 0x11AD] }, +{ source: [0xB3AF], NFC: [0xB3AF], NFD: [0x1103, 0x1168, 0x11AE], NFKC: [0xB3AF], NFKD: [0x1103, 0x1168, 0x11AE] }, +{ source: [0xB3B0], NFC: [0xB3B0], NFD: [0x1103, 0x1168, 0x11AF], NFKC: [0xB3B0], NFKD: [0x1103, 0x1168, 0x11AF] }, +{ source: [0xB3B1], NFC: [0xB3B1], NFD: [0x1103, 0x1168, 0x11B0], NFKC: [0xB3B1], NFKD: [0x1103, 0x1168, 0x11B0] }, +{ source: [0xB3B2], NFC: [0xB3B2], NFD: [0x1103, 0x1168, 0x11B1], NFKC: [0xB3B2], NFKD: [0x1103, 0x1168, 0x11B1] }, +{ source: [0xB3B3], NFC: [0xB3B3], NFD: [0x1103, 0x1168, 0x11B2], NFKC: [0xB3B3], NFKD: [0x1103, 0x1168, 0x11B2] }, +{ source: [0xB3B4], NFC: [0xB3B4], NFD: [0x1103, 0x1168, 0x11B3], NFKC: [0xB3B4], NFKD: [0x1103, 0x1168, 0x11B3] }, +{ source: [0xB3B5], NFC: [0xB3B5], NFD: [0x1103, 0x1168, 0x11B4], NFKC: [0xB3B5], NFKD: [0x1103, 0x1168, 0x11B4] }, +{ source: [0xB3B6], NFC: [0xB3B6], NFD: [0x1103, 0x1168, 0x11B5], NFKC: [0xB3B6], NFKD: [0x1103, 0x1168, 0x11B5] }, +{ source: [0xB3B7], NFC: [0xB3B7], NFD: [0x1103, 0x1168, 0x11B6], NFKC: [0xB3B7], NFKD: [0x1103, 0x1168, 0x11B6] }, +{ source: [0xB3B8], NFC: [0xB3B8], NFD: [0x1103, 0x1168, 0x11B7], NFKC: [0xB3B8], NFKD: [0x1103, 0x1168, 0x11B7] }, +{ source: [0xB3B9], NFC: [0xB3B9], NFD: [0x1103, 0x1168, 0x11B8], NFKC: [0xB3B9], NFKD: [0x1103, 0x1168, 0x11B8] }, +{ source: [0xB3BA], NFC: [0xB3BA], NFD: [0x1103, 0x1168, 0x11B9], NFKC: [0xB3BA], NFKD: [0x1103, 0x1168, 0x11B9] }, +{ source: [0xB3BB], NFC: [0xB3BB], NFD: [0x1103, 0x1168, 0x11BA], NFKC: [0xB3BB], NFKD: [0x1103, 0x1168, 0x11BA] }, +{ source: [0xB3BC], NFC: [0xB3BC], NFD: [0x1103, 0x1168, 0x11BB], NFKC: [0xB3BC], NFKD: [0x1103, 0x1168, 0x11BB] }, +{ source: [0xB3BD], NFC: [0xB3BD], NFD: [0x1103, 0x1168, 0x11BC], NFKC: [0xB3BD], NFKD: [0x1103, 0x1168, 0x11BC] }, +{ source: [0xB3BE], NFC: [0xB3BE], NFD: [0x1103, 0x1168, 0x11BD], NFKC: [0xB3BE], NFKD: [0x1103, 0x1168, 0x11BD] }, +{ source: [0xB3BF], NFC: [0xB3BF], NFD: [0x1103, 0x1168, 0x11BE], NFKC: [0xB3BF], NFKD: [0x1103, 0x1168, 0x11BE] }, +{ source: [0xB3C0], NFC: [0xB3C0], NFD: [0x1103, 0x1168, 0x11BF], NFKC: [0xB3C0], NFKD: [0x1103, 0x1168, 0x11BF] }, +{ source: [0xB3C1], NFC: [0xB3C1], NFD: [0x1103, 0x1168, 0x11C0], NFKC: [0xB3C1], NFKD: [0x1103, 0x1168, 0x11C0] }, +{ source: [0xB3C2], NFC: [0xB3C2], NFD: [0x1103, 0x1168, 0x11C1], NFKC: [0xB3C2], NFKD: [0x1103, 0x1168, 0x11C1] }, +{ source: [0xB3C3], NFC: [0xB3C3], NFD: [0x1103, 0x1168, 0x11C2], NFKC: [0xB3C3], NFKD: [0x1103, 0x1168, 0x11C2] }, +{ source: [0xB3C4], NFC: [0xB3C4], NFD: [0x1103, 0x1169], NFKC: [0xB3C4], NFKD: [0x1103, 0x1169] }, +{ source: [0xB3C5], NFC: [0xB3C5], NFD: [0x1103, 0x1169, 0x11A8], NFKC: [0xB3C5], NFKD: [0x1103, 0x1169, 0x11A8] }, +{ source: [0xB3C6], NFC: [0xB3C6], NFD: [0x1103, 0x1169, 0x11A9], NFKC: [0xB3C6], NFKD: [0x1103, 0x1169, 0x11A9] }, +{ source: [0xB3C7], NFC: [0xB3C7], NFD: [0x1103, 0x1169, 0x11AA], NFKC: [0xB3C7], NFKD: [0x1103, 0x1169, 0x11AA] }, +{ source: [0xB3C8], NFC: [0xB3C8], NFD: [0x1103, 0x1169, 0x11AB], NFKC: [0xB3C8], NFKD: [0x1103, 0x1169, 0x11AB] }, +{ source: [0xB3C9], NFC: [0xB3C9], NFD: [0x1103, 0x1169, 0x11AC], NFKC: [0xB3C9], NFKD: [0x1103, 0x1169, 0x11AC] }, +{ source: [0xB3CA], NFC: [0xB3CA], NFD: [0x1103, 0x1169, 0x11AD], NFKC: [0xB3CA], NFKD: [0x1103, 0x1169, 0x11AD] }, +{ source: [0xB3CB], NFC: [0xB3CB], NFD: [0x1103, 0x1169, 0x11AE], NFKC: [0xB3CB], NFKD: [0x1103, 0x1169, 0x11AE] }, +{ source: [0xB3CC], NFC: [0xB3CC], NFD: [0x1103, 0x1169, 0x11AF], NFKC: [0xB3CC], NFKD: [0x1103, 0x1169, 0x11AF] }, +{ source: [0xB3CD], NFC: [0xB3CD], NFD: [0x1103, 0x1169, 0x11B0], NFKC: [0xB3CD], NFKD: [0x1103, 0x1169, 0x11B0] }, +{ source: [0xB3CE], NFC: [0xB3CE], NFD: [0x1103, 0x1169, 0x11B1], NFKC: [0xB3CE], NFKD: [0x1103, 0x1169, 0x11B1] }, +{ source: [0xB3CF], NFC: [0xB3CF], NFD: [0x1103, 0x1169, 0x11B2], NFKC: [0xB3CF], NFKD: [0x1103, 0x1169, 0x11B2] }, +{ source: [0xB3D0], NFC: [0xB3D0], NFD: [0x1103, 0x1169, 0x11B3], NFKC: [0xB3D0], NFKD: [0x1103, 0x1169, 0x11B3] }, +{ source: [0xB3D1], NFC: [0xB3D1], NFD: [0x1103, 0x1169, 0x11B4], NFKC: [0xB3D1], NFKD: [0x1103, 0x1169, 0x11B4] }, +{ source: [0xB3D2], NFC: [0xB3D2], NFD: [0x1103, 0x1169, 0x11B5], NFKC: [0xB3D2], NFKD: [0x1103, 0x1169, 0x11B5] }, +{ source: [0xB3D3], NFC: [0xB3D3], NFD: [0x1103, 0x1169, 0x11B6], NFKC: [0xB3D3], NFKD: [0x1103, 0x1169, 0x11B6] }, +{ source: [0xB3D4], NFC: [0xB3D4], NFD: [0x1103, 0x1169, 0x11B7], NFKC: [0xB3D4], NFKD: [0x1103, 0x1169, 0x11B7] }, +{ source: [0xB3D5], NFC: [0xB3D5], NFD: [0x1103, 0x1169, 0x11B8], NFKC: [0xB3D5], NFKD: [0x1103, 0x1169, 0x11B8] }, +{ source: [0xB3D6], NFC: [0xB3D6], NFD: [0x1103, 0x1169, 0x11B9], NFKC: [0xB3D6], NFKD: [0x1103, 0x1169, 0x11B9] }, +{ source: [0xB3D7], NFC: [0xB3D7], NFD: [0x1103, 0x1169, 0x11BA], NFKC: [0xB3D7], NFKD: [0x1103, 0x1169, 0x11BA] }, +{ source: [0xB3D8], NFC: [0xB3D8], NFD: [0x1103, 0x1169, 0x11BB], NFKC: [0xB3D8], NFKD: [0x1103, 0x1169, 0x11BB] }, +{ source: [0xB3D9], NFC: [0xB3D9], NFD: [0x1103, 0x1169, 0x11BC], NFKC: [0xB3D9], NFKD: [0x1103, 0x1169, 0x11BC] }, +{ source: [0xB3DA], NFC: [0xB3DA], NFD: [0x1103, 0x1169, 0x11BD], NFKC: [0xB3DA], NFKD: [0x1103, 0x1169, 0x11BD] }, +{ source: [0xB3DB], NFC: [0xB3DB], NFD: [0x1103, 0x1169, 0x11BE], NFKC: [0xB3DB], NFKD: [0x1103, 0x1169, 0x11BE] }, +{ source: [0xB3DC], NFC: [0xB3DC], NFD: [0x1103, 0x1169, 0x11BF], NFKC: [0xB3DC], NFKD: [0x1103, 0x1169, 0x11BF] }, +{ source: [0xB3DD], NFC: [0xB3DD], NFD: [0x1103, 0x1169, 0x11C0], NFKC: [0xB3DD], NFKD: [0x1103, 0x1169, 0x11C0] }, +{ source: [0xB3DE], NFC: [0xB3DE], NFD: [0x1103, 0x1169, 0x11C1], NFKC: [0xB3DE], NFKD: [0x1103, 0x1169, 0x11C1] }, +{ source: [0xB3DF], NFC: [0xB3DF], NFD: [0x1103, 0x1169, 0x11C2], NFKC: [0xB3DF], NFKD: [0x1103, 0x1169, 0x11C2] }, +{ source: [0xB3E0], NFC: [0xB3E0], NFD: [0x1103, 0x116A], NFKC: [0xB3E0], NFKD: [0x1103, 0x116A] }, +{ source: [0xB3E1], NFC: [0xB3E1], NFD: [0x1103, 0x116A, 0x11A8], NFKC: [0xB3E1], NFKD: [0x1103, 0x116A, 0x11A8] }, +{ source: [0xB3E2], NFC: [0xB3E2], NFD: [0x1103, 0x116A, 0x11A9], NFKC: [0xB3E2], NFKD: [0x1103, 0x116A, 0x11A9] }, +{ source: [0xB3E3], NFC: [0xB3E3], NFD: [0x1103, 0x116A, 0x11AA], NFKC: [0xB3E3], NFKD: [0x1103, 0x116A, 0x11AA] }, +{ source: [0xB3E4], NFC: [0xB3E4], NFD: [0x1103, 0x116A, 0x11AB], NFKC: [0xB3E4], NFKD: [0x1103, 0x116A, 0x11AB] }, +{ source: [0xB3E5], NFC: [0xB3E5], NFD: [0x1103, 0x116A, 0x11AC], NFKC: [0xB3E5], NFKD: [0x1103, 0x116A, 0x11AC] }, +{ source: [0xB3E6], NFC: [0xB3E6], NFD: [0x1103, 0x116A, 0x11AD], NFKC: [0xB3E6], NFKD: [0x1103, 0x116A, 0x11AD] }, +{ source: [0xB3E7], NFC: [0xB3E7], NFD: [0x1103, 0x116A, 0x11AE], NFKC: [0xB3E7], NFKD: [0x1103, 0x116A, 0x11AE] }, +{ source: [0xB3E8], NFC: [0xB3E8], NFD: [0x1103, 0x116A, 0x11AF], NFKC: [0xB3E8], NFKD: [0x1103, 0x116A, 0x11AF] }, +{ source: [0xB3E9], NFC: [0xB3E9], NFD: [0x1103, 0x116A, 0x11B0], NFKC: [0xB3E9], NFKD: [0x1103, 0x116A, 0x11B0] }, +{ source: [0xB3EA], NFC: [0xB3EA], NFD: [0x1103, 0x116A, 0x11B1], NFKC: [0xB3EA], NFKD: [0x1103, 0x116A, 0x11B1] }, +{ source: [0xB3EB], NFC: [0xB3EB], NFD: [0x1103, 0x116A, 0x11B2], NFKC: [0xB3EB], NFKD: [0x1103, 0x116A, 0x11B2] }, +{ source: [0xB3EC], NFC: [0xB3EC], NFD: [0x1103, 0x116A, 0x11B3], NFKC: [0xB3EC], NFKD: [0x1103, 0x116A, 0x11B3] }, +{ source: [0xB3ED], NFC: [0xB3ED], NFD: [0x1103, 0x116A, 0x11B4], NFKC: [0xB3ED], NFKD: [0x1103, 0x116A, 0x11B4] }, +{ source: [0xB3EE], NFC: [0xB3EE], NFD: [0x1103, 0x116A, 0x11B5], NFKC: [0xB3EE], NFKD: [0x1103, 0x116A, 0x11B5] }, +{ source: [0xB3EF], NFC: [0xB3EF], NFD: [0x1103, 0x116A, 0x11B6], NFKC: [0xB3EF], NFKD: [0x1103, 0x116A, 0x11B6] }, +{ source: [0xB3F0], NFC: [0xB3F0], NFD: [0x1103, 0x116A, 0x11B7], NFKC: [0xB3F0], NFKD: [0x1103, 0x116A, 0x11B7] }, +{ source: [0xB3F1], NFC: [0xB3F1], NFD: [0x1103, 0x116A, 0x11B8], NFKC: [0xB3F1], NFKD: [0x1103, 0x116A, 0x11B8] }, +{ source: [0xB3F2], NFC: [0xB3F2], NFD: [0x1103, 0x116A, 0x11B9], NFKC: [0xB3F2], NFKD: [0x1103, 0x116A, 0x11B9] }, +{ source: [0xB3F3], NFC: [0xB3F3], NFD: [0x1103, 0x116A, 0x11BA], NFKC: [0xB3F3], NFKD: [0x1103, 0x116A, 0x11BA] }, +{ source: [0xB3F4], NFC: [0xB3F4], NFD: [0x1103, 0x116A, 0x11BB], NFKC: [0xB3F4], NFKD: [0x1103, 0x116A, 0x11BB] }, +{ source: [0xB3F5], NFC: [0xB3F5], NFD: [0x1103, 0x116A, 0x11BC], NFKC: [0xB3F5], NFKD: [0x1103, 0x116A, 0x11BC] }, +{ source: [0xB3F6], NFC: [0xB3F6], NFD: [0x1103, 0x116A, 0x11BD], NFKC: [0xB3F6], NFKD: [0x1103, 0x116A, 0x11BD] }, +{ source: [0xB3F7], NFC: [0xB3F7], NFD: [0x1103, 0x116A, 0x11BE], NFKC: [0xB3F7], NFKD: [0x1103, 0x116A, 0x11BE] }, +{ source: [0xB3F8], NFC: [0xB3F8], NFD: [0x1103, 0x116A, 0x11BF], NFKC: [0xB3F8], NFKD: [0x1103, 0x116A, 0x11BF] }, +{ source: [0xB3F9], NFC: [0xB3F9], NFD: [0x1103, 0x116A, 0x11C0], NFKC: [0xB3F9], NFKD: [0x1103, 0x116A, 0x11C0] }, +{ source: [0xB3FA], NFC: [0xB3FA], NFD: [0x1103, 0x116A, 0x11C1], NFKC: [0xB3FA], NFKD: [0x1103, 0x116A, 0x11C1] }, +{ source: [0xB3FB], NFC: [0xB3FB], NFD: [0x1103, 0x116A, 0x11C2], NFKC: [0xB3FB], NFKD: [0x1103, 0x116A, 0x11C2] }, +{ source: [0xB3FC], NFC: [0xB3FC], NFD: [0x1103, 0x116B], NFKC: [0xB3FC], NFKD: [0x1103, 0x116B] }, +{ source: [0xB3FD], NFC: [0xB3FD], NFD: [0x1103, 0x116B, 0x11A8], NFKC: [0xB3FD], NFKD: [0x1103, 0x116B, 0x11A8] }, +{ source: [0xB3FE], NFC: [0xB3FE], NFD: [0x1103, 0x116B, 0x11A9], NFKC: [0xB3FE], NFKD: [0x1103, 0x116B, 0x11A9] }, +{ source: [0xB3FF], NFC: [0xB3FF], NFD: [0x1103, 0x116B, 0x11AA], NFKC: [0xB3FF], NFKD: [0x1103, 0x116B, 0x11AA] }, +{ source: [0xB400], NFC: [0xB400], NFD: [0x1103, 0x116B, 0x11AB], NFKC: [0xB400], NFKD: [0x1103, 0x116B, 0x11AB] }, +{ source: [0xB401], NFC: [0xB401], NFD: [0x1103, 0x116B, 0x11AC], NFKC: [0xB401], NFKD: [0x1103, 0x116B, 0x11AC] }, +{ source: [0xB402], NFC: [0xB402], NFD: [0x1103, 0x116B, 0x11AD], NFKC: [0xB402], NFKD: [0x1103, 0x116B, 0x11AD] }, +{ source: [0xB403], NFC: [0xB403], NFD: [0x1103, 0x116B, 0x11AE], NFKC: [0xB403], NFKD: [0x1103, 0x116B, 0x11AE] }, +{ source: [0xB404], NFC: [0xB404], NFD: [0x1103, 0x116B, 0x11AF], NFKC: [0xB404], NFKD: [0x1103, 0x116B, 0x11AF] }, +{ source: [0xB405], NFC: [0xB405], NFD: [0x1103, 0x116B, 0x11B0], NFKC: [0xB405], NFKD: [0x1103, 0x116B, 0x11B0] }, +{ source: [0xB406], NFC: [0xB406], NFD: [0x1103, 0x116B, 0x11B1], NFKC: [0xB406], NFKD: [0x1103, 0x116B, 0x11B1] }, +{ source: [0xB407], NFC: [0xB407], NFD: [0x1103, 0x116B, 0x11B2], NFKC: [0xB407], NFKD: [0x1103, 0x116B, 0x11B2] }, +{ source: [0xB408], NFC: [0xB408], NFD: [0x1103, 0x116B, 0x11B3], NFKC: [0xB408], NFKD: [0x1103, 0x116B, 0x11B3] }, +{ source: [0xB409], NFC: [0xB409], NFD: [0x1103, 0x116B, 0x11B4], NFKC: [0xB409], NFKD: [0x1103, 0x116B, 0x11B4] }, +{ source: [0xB40A], NFC: [0xB40A], NFD: [0x1103, 0x116B, 0x11B5], NFKC: [0xB40A], NFKD: [0x1103, 0x116B, 0x11B5] }, +{ source: [0xB40B], NFC: [0xB40B], NFD: [0x1103, 0x116B, 0x11B6], NFKC: [0xB40B], NFKD: [0x1103, 0x116B, 0x11B6] }, +{ source: [0xB40C], NFC: [0xB40C], NFD: [0x1103, 0x116B, 0x11B7], NFKC: [0xB40C], NFKD: [0x1103, 0x116B, 0x11B7] }, +{ source: [0xB40D], NFC: [0xB40D], NFD: [0x1103, 0x116B, 0x11B8], NFKC: [0xB40D], NFKD: [0x1103, 0x116B, 0x11B8] }, +{ source: [0xB40E], NFC: [0xB40E], NFD: [0x1103, 0x116B, 0x11B9], NFKC: [0xB40E], NFKD: [0x1103, 0x116B, 0x11B9] }, +{ source: [0xB40F], NFC: [0xB40F], NFD: [0x1103, 0x116B, 0x11BA], NFKC: [0xB40F], NFKD: [0x1103, 0x116B, 0x11BA] }, +{ source: [0xB410], NFC: [0xB410], NFD: [0x1103, 0x116B, 0x11BB], NFKC: [0xB410], NFKD: [0x1103, 0x116B, 0x11BB] }, +{ source: [0xB411], NFC: [0xB411], NFD: [0x1103, 0x116B, 0x11BC], NFKC: [0xB411], NFKD: [0x1103, 0x116B, 0x11BC] }, +{ source: [0xB412], NFC: [0xB412], NFD: [0x1103, 0x116B, 0x11BD], NFKC: [0xB412], NFKD: [0x1103, 0x116B, 0x11BD] }, +{ source: [0xB413], NFC: [0xB413], NFD: [0x1103, 0x116B, 0x11BE], NFKC: [0xB413], NFKD: [0x1103, 0x116B, 0x11BE] }, +{ source: [0xB414], NFC: [0xB414], NFD: [0x1103, 0x116B, 0x11BF], NFKC: [0xB414], NFKD: [0x1103, 0x116B, 0x11BF] }, +{ source: [0xB415], NFC: [0xB415], NFD: [0x1103, 0x116B, 0x11C0], NFKC: [0xB415], NFKD: [0x1103, 0x116B, 0x11C0] }, +{ source: [0xB416], NFC: [0xB416], NFD: [0x1103, 0x116B, 0x11C1], NFKC: [0xB416], NFKD: [0x1103, 0x116B, 0x11C1] }, +{ source: [0xB417], NFC: [0xB417], NFD: [0x1103, 0x116B, 0x11C2], NFKC: [0xB417], NFKD: [0x1103, 0x116B, 0x11C2] }, +{ source: [0xB418], NFC: [0xB418], NFD: [0x1103, 0x116C], NFKC: [0xB418], NFKD: [0x1103, 0x116C] }, +{ source: [0xB419], NFC: [0xB419], NFD: [0x1103, 0x116C, 0x11A8], NFKC: [0xB419], NFKD: [0x1103, 0x116C, 0x11A8] }, +{ source: [0xB41A], NFC: [0xB41A], NFD: [0x1103, 0x116C, 0x11A9], NFKC: [0xB41A], NFKD: [0x1103, 0x116C, 0x11A9] }, +{ source: [0xB41B], NFC: [0xB41B], NFD: [0x1103, 0x116C, 0x11AA], NFKC: [0xB41B], NFKD: [0x1103, 0x116C, 0x11AA] }, +{ source: [0xB41C], NFC: [0xB41C], NFD: [0x1103, 0x116C, 0x11AB], NFKC: [0xB41C], NFKD: [0x1103, 0x116C, 0x11AB] }, +{ source: [0xB41D], NFC: [0xB41D], NFD: [0x1103, 0x116C, 0x11AC], NFKC: [0xB41D], NFKD: [0x1103, 0x116C, 0x11AC] }, +{ source: [0xB41E], NFC: [0xB41E], NFD: [0x1103, 0x116C, 0x11AD], NFKC: [0xB41E], NFKD: [0x1103, 0x116C, 0x11AD] }, +{ source: [0xB41F], NFC: [0xB41F], NFD: [0x1103, 0x116C, 0x11AE], NFKC: [0xB41F], NFKD: [0x1103, 0x116C, 0x11AE] }, +{ source: [0xB420], NFC: [0xB420], NFD: [0x1103, 0x116C, 0x11AF], NFKC: [0xB420], NFKD: [0x1103, 0x116C, 0x11AF] }, +{ source: [0xB421], NFC: [0xB421], NFD: [0x1103, 0x116C, 0x11B0], NFKC: [0xB421], NFKD: [0x1103, 0x116C, 0x11B0] }, +{ source: [0xB422], NFC: [0xB422], NFD: [0x1103, 0x116C, 0x11B1], NFKC: [0xB422], NFKD: [0x1103, 0x116C, 0x11B1] }, +{ source: [0xB423], NFC: [0xB423], NFD: [0x1103, 0x116C, 0x11B2], NFKC: [0xB423], NFKD: [0x1103, 0x116C, 0x11B2] }, +{ source: [0xB424], NFC: [0xB424], NFD: [0x1103, 0x116C, 0x11B3], NFKC: [0xB424], NFKD: [0x1103, 0x116C, 0x11B3] }, +{ source: [0xB425], NFC: [0xB425], NFD: [0x1103, 0x116C, 0x11B4], NFKC: [0xB425], NFKD: [0x1103, 0x116C, 0x11B4] }, +{ source: [0xB426], NFC: [0xB426], NFD: [0x1103, 0x116C, 0x11B5], NFKC: [0xB426], NFKD: [0x1103, 0x116C, 0x11B5] }, +{ source: [0xB427], NFC: [0xB427], NFD: [0x1103, 0x116C, 0x11B6], NFKC: [0xB427], NFKD: [0x1103, 0x116C, 0x11B6] }, +{ source: [0xB428], NFC: [0xB428], NFD: [0x1103, 0x116C, 0x11B7], NFKC: [0xB428], NFKD: [0x1103, 0x116C, 0x11B7] }, +{ source: [0xB429], NFC: [0xB429], NFD: [0x1103, 0x116C, 0x11B8], NFKC: [0xB429], NFKD: [0x1103, 0x116C, 0x11B8] }, +{ source: [0xB42A], NFC: [0xB42A], NFD: [0x1103, 0x116C, 0x11B9], NFKC: [0xB42A], NFKD: [0x1103, 0x116C, 0x11B9] }, +{ source: [0xB42B], NFC: [0xB42B], NFD: [0x1103, 0x116C, 0x11BA], NFKC: [0xB42B], NFKD: [0x1103, 0x116C, 0x11BA] }, +{ source: [0xB42C], NFC: [0xB42C], NFD: [0x1103, 0x116C, 0x11BB], NFKC: [0xB42C], NFKD: [0x1103, 0x116C, 0x11BB] }, +{ source: [0xB42D], NFC: [0xB42D], NFD: [0x1103, 0x116C, 0x11BC], NFKC: [0xB42D], NFKD: [0x1103, 0x116C, 0x11BC] }, +{ source: [0xB42E], NFC: [0xB42E], NFD: [0x1103, 0x116C, 0x11BD], NFKC: [0xB42E], NFKD: [0x1103, 0x116C, 0x11BD] }, +{ source: [0xB42F], NFC: [0xB42F], NFD: [0x1103, 0x116C, 0x11BE], NFKC: [0xB42F], NFKD: [0x1103, 0x116C, 0x11BE] }, +{ source: [0xB430], NFC: [0xB430], NFD: [0x1103, 0x116C, 0x11BF], NFKC: [0xB430], NFKD: [0x1103, 0x116C, 0x11BF] }, +{ source: [0xB431], NFC: [0xB431], NFD: [0x1103, 0x116C, 0x11C0], NFKC: [0xB431], NFKD: [0x1103, 0x116C, 0x11C0] }, +{ source: [0xB432], NFC: [0xB432], NFD: [0x1103, 0x116C, 0x11C1], NFKC: [0xB432], NFKD: [0x1103, 0x116C, 0x11C1] }, +{ source: [0xB433], NFC: [0xB433], NFD: [0x1103, 0x116C, 0x11C2], NFKC: [0xB433], NFKD: [0x1103, 0x116C, 0x11C2] }, +{ source: [0xB434], NFC: [0xB434], NFD: [0x1103, 0x116D], NFKC: [0xB434], NFKD: [0x1103, 0x116D] }, +{ source: [0xB435], NFC: [0xB435], NFD: [0x1103, 0x116D, 0x11A8], NFKC: [0xB435], NFKD: [0x1103, 0x116D, 0x11A8] }, +{ source: [0xB436], NFC: [0xB436], NFD: [0x1103, 0x116D, 0x11A9], NFKC: [0xB436], NFKD: [0x1103, 0x116D, 0x11A9] }, +{ source: [0xB437], NFC: [0xB437], NFD: [0x1103, 0x116D, 0x11AA], NFKC: [0xB437], NFKD: [0x1103, 0x116D, 0x11AA] }, +{ source: [0xB438], NFC: [0xB438], NFD: [0x1103, 0x116D, 0x11AB], NFKC: [0xB438], NFKD: [0x1103, 0x116D, 0x11AB] }, +{ source: [0xB439], NFC: [0xB439], NFD: [0x1103, 0x116D, 0x11AC], NFKC: [0xB439], NFKD: [0x1103, 0x116D, 0x11AC] }, +{ source: [0xB43A], NFC: [0xB43A], NFD: [0x1103, 0x116D, 0x11AD], NFKC: [0xB43A], NFKD: [0x1103, 0x116D, 0x11AD] }, +{ source: [0xB43B], NFC: [0xB43B], NFD: [0x1103, 0x116D, 0x11AE], NFKC: [0xB43B], NFKD: [0x1103, 0x116D, 0x11AE] }, +{ source: [0xB43C], NFC: [0xB43C], NFD: [0x1103, 0x116D, 0x11AF], NFKC: [0xB43C], NFKD: [0x1103, 0x116D, 0x11AF] }, +{ source: [0xB43D], NFC: [0xB43D], NFD: [0x1103, 0x116D, 0x11B0], NFKC: [0xB43D], NFKD: [0x1103, 0x116D, 0x11B0] }, +{ source: [0xB43E], NFC: [0xB43E], NFD: [0x1103, 0x116D, 0x11B1], NFKC: [0xB43E], NFKD: [0x1103, 0x116D, 0x11B1] }, +{ source: [0xB43F], NFC: [0xB43F], NFD: [0x1103, 0x116D, 0x11B2], NFKC: [0xB43F], NFKD: [0x1103, 0x116D, 0x11B2] }, +{ source: [0xB440], NFC: [0xB440], NFD: [0x1103, 0x116D, 0x11B3], NFKC: [0xB440], NFKD: [0x1103, 0x116D, 0x11B3] }, +{ source: [0xB441], NFC: [0xB441], NFD: [0x1103, 0x116D, 0x11B4], NFKC: [0xB441], NFKD: [0x1103, 0x116D, 0x11B4] }, +{ source: [0xB442], NFC: [0xB442], NFD: [0x1103, 0x116D, 0x11B5], NFKC: [0xB442], NFKD: [0x1103, 0x116D, 0x11B5] }, +{ source: [0xB443], NFC: [0xB443], NFD: [0x1103, 0x116D, 0x11B6], NFKC: [0xB443], NFKD: [0x1103, 0x116D, 0x11B6] }, +{ source: [0xB444], NFC: [0xB444], NFD: [0x1103, 0x116D, 0x11B7], NFKC: [0xB444], NFKD: [0x1103, 0x116D, 0x11B7] }, +{ source: [0xB445], NFC: [0xB445], NFD: [0x1103, 0x116D, 0x11B8], NFKC: [0xB445], NFKD: [0x1103, 0x116D, 0x11B8] }, +{ source: [0xB446], NFC: [0xB446], NFD: [0x1103, 0x116D, 0x11B9], NFKC: [0xB446], NFKD: [0x1103, 0x116D, 0x11B9] }, +{ source: [0xB447], NFC: [0xB447], NFD: [0x1103, 0x116D, 0x11BA], NFKC: [0xB447], NFKD: [0x1103, 0x116D, 0x11BA] }, +{ source: [0xB448], NFC: [0xB448], NFD: [0x1103, 0x116D, 0x11BB], NFKC: [0xB448], NFKD: [0x1103, 0x116D, 0x11BB] }, +{ source: [0xB449], NFC: [0xB449], NFD: [0x1103, 0x116D, 0x11BC], NFKC: [0xB449], NFKD: [0x1103, 0x116D, 0x11BC] }, +{ source: [0xB44A], NFC: [0xB44A], NFD: [0x1103, 0x116D, 0x11BD], NFKC: [0xB44A], NFKD: [0x1103, 0x116D, 0x11BD] }, +{ source: [0xB44B], NFC: [0xB44B], NFD: [0x1103, 0x116D, 0x11BE], NFKC: [0xB44B], NFKD: [0x1103, 0x116D, 0x11BE] }, +{ source: [0xB44C], NFC: [0xB44C], NFD: [0x1103, 0x116D, 0x11BF], NFKC: [0xB44C], NFKD: [0x1103, 0x116D, 0x11BF] }, +{ source: [0xB44D], NFC: [0xB44D], NFD: [0x1103, 0x116D, 0x11C0], NFKC: [0xB44D], NFKD: [0x1103, 0x116D, 0x11C0] }, +{ source: [0xB44E], NFC: [0xB44E], NFD: [0x1103, 0x116D, 0x11C1], NFKC: [0xB44E], NFKD: [0x1103, 0x116D, 0x11C1] }, +{ source: [0xB44F], NFC: [0xB44F], NFD: [0x1103, 0x116D, 0x11C2], NFKC: [0xB44F], NFKD: [0x1103, 0x116D, 0x11C2] }, +{ source: [0xB450], NFC: [0xB450], NFD: [0x1103, 0x116E], NFKC: [0xB450], NFKD: [0x1103, 0x116E] }, +{ source: [0xB451], NFC: [0xB451], NFD: [0x1103, 0x116E, 0x11A8], NFKC: [0xB451], NFKD: [0x1103, 0x116E, 0x11A8] }, +{ source: [0xB452], NFC: [0xB452], NFD: [0x1103, 0x116E, 0x11A9], NFKC: [0xB452], NFKD: [0x1103, 0x116E, 0x11A9] }, +{ source: [0xB453], NFC: [0xB453], NFD: [0x1103, 0x116E, 0x11AA], NFKC: [0xB453], NFKD: [0x1103, 0x116E, 0x11AA] }, +{ source: [0xB454], NFC: [0xB454], NFD: [0x1103, 0x116E, 0x11AB], NFKC: [0xB454], NFKD: [0x1103, 0x116E, 0x11AB] }, +{ source: [0xB455], NFC: [0xB455], NFD: [0x1103, 0x116E, 0x11AC], NFKC: [0xB455], NFKD: [0x1103, 0x116E, 0x11AC] }, +{ source: [0xB456], NFC: [0xB456], NFD: [0x1103, 0x116E, 0x11AD], NFKC: [0xB456], NFKD: [0x1103, 0x116E, 0x11AD] }, +{ source: [0xB457], NFC: [0xB457], NFD: [0x1103, 0x116E, 0x11AE], NFKC: [0xB457], NFKD: [0x1103, 0x116E, 0x11AE] }, +{ source: [0xB458], NFC: [0xB458], NFD: [0x1103, 0x116E, 0x11AF], NFKC: [0xB458], NFKD: [0x1103, 0x116E, 0x11AF] }, +{ source: [0xB459], NFC: [0xB459], NFD: [0x1103, 0x116E, 0x11B0], NFKC: [0xB459], NFKD: [0x1103, 0x116E, 0x11B0] }, +{ source: [0xB45A], NFC: [0xB45A], NFD: [0x1103, 0x116E, 0x11B1], NFKC: [0xB45A], NFKD: [0x1103, 0x116E, 0x11B1] }, +{ source: [0xB45B], NFC: [0xB45B], NFD: [0x1103, 0x116E, 0x11B2], NFKC: [0xB45B], NFKD: [0x1103, 0x116E, 0x11B2] }, +{ source: [0xB45C], NFC: [0xB45C], NFD: [0x1103, 0x116E, 0x11B3], NFKC: [0xB45C], NFKD: [0x1103, 0x116E, 0x11B3] }, +{ source: [0xB45D], NFC: [0xB45D], NFD: [0x1103, 0x116E, 0x11B4], NFKC: [0xB45D], NFKD: [0x1103, 0x116E, 0x11B4] }, +{ source: [0xB45E], NFC: [0xB45E], NFD: [0x1103, 0x116E, 0x11B5], NFKC: [0xB45E], NFKD: [0x1103, 0x116E, 0x11B5] }, +{ source: [0xB45F], NFC: [0xB45F], NFD: [0x1103, 0x116E, 0x11B6], NFKC: [0xB45F], NFKD: [0x1103, 0x116E, 0x11B6] }, +{ source: [0xB460], NFC: [0xB460], NFD: [0x1103, 0x116E, 0x11B7], NFKC: [0xB460], NFKD: [0x1103, 0x116E, 0x11B7] }, +{ source: [0xB461], NFC: [0xB461], NFD: [0x1103, 0x116E, 0x11B8], NFKC: [0xB461], NFKD: [0x1103, 0x116E, 0x11B8] }, +{ source: [0xB462], NFC: [0xB462], NFD: [0x1103, 0x116E, 0x11B9], NFKC: [0xB462], NFKD: [0x1103, 0x116E, 0x11B9] }, +{ source: [0xB463], NFC: [0xB463], NFD: [0x1103, 0x116E, 0x11BA], NFKC: [0xB463], NFKD: [0x1103, 0x116E, 0x11BA] }, +{ source: [0xB464], NFC: [0xB464], NFD: [0x1103, 0x116E, 0x11BB], NFKC: [0xB464], NFKD: [0x1103, 0x116E, 0x11BB] }, +{ source: [0xB465], NFC: [0xB465], NFD: [0x1103, 0x116E, 0x11BC], NFKC: [0xB465], NFKD: [0x1103, 0x116E, 0x11BC] }, +{ source: [0xB466], NFC: [0xB466], NFD: [0x1103, 0x116E, 0x11BD], NFKC: [0xB466], NFKD: [0x1103, 0x116E, 0x11BD] }, +{ source: [0xB467], NFC: [0xB467], NFD: [0x1103, 0x116E, 0x11BE], NFKC: [0xB467], NFKD: [0x1103, 0x116E, 0x11BE] }, +{ source: [0xB468], NFC: [0xB468], NFD: [0x1103, 0x116E, 0x11BF], NFKC: [0xB468], NFKD: [0x1103, 0x116E, 0x11BF] }, +{ source: [0xB469], NFC: [0xB469], NFD: [0x1103, 0x116E, 0x11C0], NFKC: [0xB469], NFKD: [0x1103, 0x116E, 0x11C0] }, +{ source: [0xB46A], NFC: [0xB46A], NFD: [0x1103, 0x116E, 0x11C1], NFKC: [0xB46A], NFKD: [0x1103, 0x116E, 0x11C1] }, +{ source: [0xB46B], NFC: [0xB46B], NFD: [0x1103, 0x116E, 0x11C2], NFKC: [0xB46B], NFKD: [0x1103, 0x116E, 0x11C2] }, +{ source: [0xB46C], NFC: [0xB46C], NFD: [0x1103, 0x116F], NFKC: [0xB46C], NFKD: [0x1103, 0x116F] }, +{ source: [0xB46D], NFC: [0xB46D], NFD: [0x1103, 0x116F, 0x11A8], NFKC: [0xB46D], NFKD: [0x1103, 0x116F, 0x11A8] }, +{ source: [0xB46E], NFC: [0xB46E], NFD: [0x1103, 0x116F, 0x11A9], NFKC: [0xB46E], NFKD: [0x1103, 0x116F, 0x11A9] }, +{ source: [0xB46F], NFC: [0xB46F], NFD: [0x1103, 0x116F, 0x11AA], NFKC: [0xB46F], NFKD: [0x1103, 0x116F, 0x11AA] }, +{ source: [0xB470], NFC: [0xB470], NFD: [0x1103, 0x116F, 0x11AB], NFKC: [0xB470], NFKD: [0x1103, 0x116F, 0x11AB] }, +{ source: [0xB471], NFC: [0xB471], NFD: [0x1103, 0x116F, 0x11AC], NFKC: [0xB471], NFKD: [0x1103, 0x116F, 0x11AC] }, +{ source: [0xB472], NFC: [0xB472], NFD: [0x1103, 0x116F, 0x11AD], NFKC: [0xB472], NFKD: [0x1103, 0x116F, 0x11AD] }, +{ source: [0xB473], NFC: [0xB473], NFD: [0x1103, 0x116F, 0x11AE], NFKC: [0xB473], NFKD: [0x1103, 0x116F, 0x11AE] }, +{ source: [0xB474], NFC: [0xB474], NFD: [0x1103, 0x116F, 0x11AF], NFKC: [0xB474], NFKD: [0x1103, 0x116F, 0x11AF] }, +{ source: [0xB475], NFC: [0xB475], NFD: [0x1103, 0x116F, 0x11B0], NFKC: [0xB475], NFKD: [0x1103, 0x116F, 0x11B0] }, +{ source: [0xB476], NFC: [0xB476], NFD: [0x1103, 0x116F, 0x11B1], NFKC: [0xB476], NFKD: [0x1103, 0x116F, 0x11B1] }, +{ source: [0xB477], NFC: [0xB477], NFD: [0x1103, 0x116F, 0x11B2], NFKC: [0xB477], NFKD: [0x1103, 0x116F, 0x11B2] }, +{ source: [0xB478], NFC: [0xB478], NFD: [0x1103, 0x116F, 0x11B3], NFKC: [0xB478], NFKD: [0x1103, 0x116F, 0x11B3] }, +{ source: [0xB479], NFC: [0xB479], NFD: [0x1103, 0x116F, 0x11B4], NFKC: [0xB479], NFKD: [0x1103, 0x116F, 0x11B4] }, +{ source: [0xB47A], NFC: [0xB47A], NFD: [0x1103, 0x116F, 0x11B5], NFKC: [0xB47A], NFKD: [0x1103, 0x116F, 0x11B5] }, +{ source: [0xB47B], NFC: [0xB47B], NFD: [0x1103, 0x116F, 0x11B6], NFKC: [0xB47B], NFKD: [0x1103, 0x116F, 0x11B6] }, +{ source: [0xB47C], NFC: [0xB47C], NFD: [0x1103, 0x116F, 0x11B7], NFKC: [0xB47C], NFKD: [0x1103, 0x116F, 0x11B7] }, +{ source: [0xB47D], NFC: [0xB47D], NFD: [0x1103, 0x116F, 0x11B8], NFKC: [0xB47D], NFKD: [0x1103, 0x116F, 0x11B8] }, +{ source: [0xB47E], NFC: [0xB47E], NFD: [0x1103, 0x116F, 0x11B9], NFKC: [0xB47E], NFKD: [0x1103, 0x116F, 0x11B9] }, +{ source: [0xB47F], NFC: [0xB47F], NFD: [0x1103, 0x116F, 0x11BA], NFKC: [0xB47F], NFKD: [0x1103, 0x116F, 0x11BA] }, +{ source: [0xB480], NFC: [0xB480], NFD: [0x1103, 0x116F, 0x11BB], NFKC: [0xB480], NFKD: [0x1103, 0x116F, 0x11BB] }, +{ source: [0xB481], NFC: [0xB481], NFD: [0x1103, 0x116F, 0x11BC], NFKC: [0xB481], NFKD: [0x1103, 0x116F, 0x11BC] }, +{ source: [0xB482], NFC: [0xB482], NFD: [0x1103, 0x116F, 0x11BD], NFKC: [0xB482], NFKD: [0x1103, 0x116F, 0x11BD] }, +{ source: [0xB483], NFC: [0xB483], NFD: [0x1103, 0x116F, 0x11BE], NFKC: [0xB483], NFKD: [0x1103, 0x116F, 0x11BE] }, +{ source: [0xB484], NFC: [0xB484], NFD: [0x1103, 0x116F, 0x11BF], NFKC: [0xB484], NFKD: [0x1103, 0x116F, 0x11BF] }, +{ source: [0xB485], NFC: [0xB485], NFD: [0x1103, 0x116F, 0x11C0], NFKC: [0xB485], NFKD: [0x1103, 0x116F, 0x11C0] }, +{ source: [0xB486], NFC: [0xB486], NFD: [0x1103, 0x116F, 0x11C1], NFKC: [0xB486], NFKD: [0x1103, 0x116F, 0x11C1] }, +{ source: [0xB487], NFC: [0xB487], NFD: [0x1103, 0x116F, 0x11C2], NFKC: [0xB487], NFKD: [0x1103, 0x116F, 0x11C2] }, +{ source: [0xB488], NFC: [0xB488], NFD: [0x1103, 0x1170], NFKC: [0xB488], NFKD: [0x1103, 0x1170] }, +{ source: [0xB489], NFC: [0xB489], NFD: [0x1103, 0x1170, 0x11A8], NFKC: [0xB489], NFKD: [0x1103, 0x1170, 0x11A8] }, +{ source: [0xB48A], NFC: [0xB48A], NFD: [0x1103, 0x1170, 0x11A9], NFKC: [0xB48A], NFKD: [0x1103, 0x1170, 0x11A9] }, +{ source: [0xB48B], NFC: [0xB48B], NFD: [0x1103, 0x1170, 0x11AA], NFKC: [0xB48B], NFKD: [0x1103, 0x1170, 0x11AA] }, +{ source: [0xB48C], NFC: [0xB48C], NFD: [0x1103, 0x1170, 0x11AB], NFKC: [0xB48C], NFKD: [0x1103, 0x1170, 0x11AB] }, +{ source: [0xB48D], NFC: [0xB48D], NFD: [0x1103, 0x1170, 0x11AC], NFKC: [0xB48D], NFKD: [0x1103, 0x1170, 0x11AC] }, +{ source: [0xB48E], NFC: [0xB48E], NFD: [0x1103, 0x1170, 0x11AD], NFKC: [0xB48E], NFKD: [0x1103, 0x1170, 0x11AD] }, +{ source: [0xB48F], NFC: [0xB48F], NFD: [0x1103, 0x1170, 0x11AE], NFKC: [0xB48F], NFKD: [0x1103, 0x1170, 0x11AE] }, +{ source: [0xB490], NFC: [0xB490], NFD: [0x1103, 0x1170, 0x11AF], NFKC: [0xB490], NFKD: [0x1103, 0x1170, 0x11AF] }, +{ source: [0xB491], NFC: [0xB491], NFD: [0x1103, 0x1170, 0x11B0], NFKC: [0xB491], NFKD: [0x1103, 0x1170, 0x11B0] }, +{ source: [0xB492], NFC: [0xB492], NFD: [0x1103, 0x1170, 0x11B1], NFKC: [0xB492], NFKD: [0x1103, 0x1170, 0x11B1] }, +{ source: [0xB493], NFC: [0xB493], NFD: [0x1103, 0x1170, 0x11B2], NFKC: [0xB493], NFKD: [0x1103, 0x1170, 0x11B2] }, +{ source: [0xB494], NFC: [0xB494], NFD: [0x1103, 0x1170, 0x11B3], NFKC: [0xB494], NFKD: [0x1103, 0x1170, 0x11B3] }, +{ source: [0xB495], NFC: [0xB495], NFD: [0x1103, 0x1170, 0x11B4], NFKC: [0xB495], NFKD: [0x1103, 0x1170, 0x11B4] }, +{ source: [0xB496], NFC: [0xB496], NFD: [0x1103, 0x1170, 0x11B5], NFKC: [0xB496], NFKD: [0x1103, 0x1170, 0x11B5] }, +{ source: [0xB497], NFC: [0xB497], NFD: [0x1103, 0x1170, 0x11B6], NFKC: [0xB497], NFKD: [0x1103, 0x1170, 0x11B6] }, +{ source: [0xB498], NFC: [0xB498], NFD: [0x1103, 0x1170, 0x11B7], NFKC: [0xB498], NFKD: [0x1103, 0x1170, 0x11B7] }, +{ source: [0xB499], NFC: [0xB499], NFD: [0x1103, 0x1170, 0x11B8], NFKC: [0xB499], NFKD: [0x1103, 0x1170, 0x11B8] }, +{ source: [0xB49A], NFC: [0xB49A], NFD: [0x1103, 0x1170, 0x11B9], NFKC: [0xB49A], NFKD: [0x1103, 0x1170, 0x11B9] }, +{ source: [0xB49B], NFC: [0xB49B], NFD: [0x1103, 0x1170, 0x11BA], NFKC: [0xB49B], NFKD: [0x1103, 0x1170, 0x11BA] }, +{ source: [0xB49C], NFC: [0xB49C], NFD: [0x1103, 0x1170, 0x11BB], NFKC: [0xB49C], NFKD: [0x1103, 0x1170, 0x11BB] }, +{ source: [0xB49D], NFC: [0xB49D], NFD: [0x1103, 0x1170, 0x11BC], NFKC: [0xB49D], NFKD: [0x1103, 0x1170, 0x11BC] }, +{ source: [0xB49E], NFC: [0xB49E], NFD: [0x1103, 0x1170, 0x11BD], NFKC: [0xB49E], NFKD: [0x1103, 0x1170, 0x11BD] }, +{ source: [0xB49F], NFC: [0xB49F], NFD: [0x1103, 0x1170, 0x11BE], NFKC: [0xB49F], NFKD: [0x1103, 0x1170, 0x11BE] }, +{ source: [0xB4A0], NFC: [0xB4A0], NFD: [0x1103, 0x1170, 0x11BF], NFKC: [0xB4A0], NFKD: [0x1103, 0x1170, 0x11BF] }, +{ source: [0xB4A1], NFC: [0xB4A1], NFD: [0x1103, 0x1170, 0x11C0], NFKC: [0xB4A1], NFKD: [0x1103, 0x1170, 0x11C0] }, +{ source: [0xB4A2], NFC: [0xB4A2], NFD: [0x1103, 0x1170, 0x11C1], NFKC: [0xB4A2], NFKD: [0x1103, 0x1170, 0x11C1] }, +{ source: [0xB4A3], NFC: [0xB4A3], NFD: [0x1103, 0x1170, 0x11C2], NFKC: [0xB4A3], NFKD: [0x1103, 0x1170, 0x11C2] }, +{ source: [0xB4A4], NFC: [0xB4A4], NFD: [0x1103, 0x1171], NFKC: [0xB4A4], NFKD: [0x1103, 0x1171] }, +{ source: [0xB4A5], NFC: [0xB4A5], NFD: [0x1103, 0x1171, 0x11A8], NFKC: [0xB4A5], NFKD: [0x1103, 0x1171, 0x11A8] }, +{ source: [0xB4A6], NFC: [0xB4A6], NFD: [0x1103, 0x1171, 0x11A9], NFKC: [0xB4A6], NFKD: [0x1103, 0x1171, 0x11A9] }, +{ source: [0xB4A7], NFC: [0xB4A7], NFD: [0x1103, 0x1171, 0x11AA], NFKC: [0xB4A7], NFKD: [0x1103, 0x1171, 0x11AA] }, +{ source: [0xB4A8], NFC: [0xB4A8], NFD: [0x1103, 0x1171, 0x11AB], NFKC: [0xB4A8], NFKD: [0x1103, 0x1171, 0x11AB] }, +{ source: [0xB4A9], NFC: [0xB4A9], NFD: [0x1103, 0x1171, 0x11AC], NFKC: [0xB4A9], NFKD: [0x1103, 0x1171, 0x11AC] }, +{ source: [0xB4AA], NFC: [0xB4AA], NFD: [0x1103, 0x1171, 0x11AD], NFKC: [0xB4AA], NFKD: [0x1103, 0x1171, 0x11AD] }, +{ source: [0xB4AB], NFC: [0xB4AB], NFD: [0x1103, 0x1171, 0x11AE], NFKC: [0xB4AB], NFKD: [0x1103, 0x1171, 0x11AE] }, +{ source: [0xB4AC], NFC: [0xB4AC], NFD: [0x1103, 0x1171, 0x11AF], NFKC: [0xB4AC], NFKD: [0x1103, 0x1171, 0x11AF] }, +{ source: [0xB4AD], NFC: [0xB4AD], NFD: [0x1103, 0x1171, 0x11B0], NFKC: [0xB4AD], NFKD: [0x1103, 0x1171, 0x11B0] }, +{ source: [0xB4AE], NFC: [0xB4AE], NFD: [0x1103, 0x1171, 0x11B1], NFKC: [0xB4AE], NFKD: [0x1103, 0x1171, 0x11B1] }, +{ source: [0xB4AF], NFC: [0xB4AF], NFD: [0x1103, 0x1171, 0x11B2], NFKC: [0xB4AF], NFKD: [0x1103, 0x1171, 0x11B2] }, +{ source: [0xB4B0], NFC: [0xB4B0], NFD: [0x1103, 0x1171, 0x11B3], NFKC: [0xB4B0], NFKD: [0x1103, 0x1171, 0x11B3] }, +{ source: [0xB4B1], NFC: [0xB4B1], NFD: [0x1103, 0x1171, 0x11B4], NFKC: [0xB4B1], NFKD: [0x1103, 0x1171, 0x11B4] }, +{ source: [0xB4B2], NFC: [0xB4B2], NFD: [0x1103, 0x1171, 0x11B5], NFKC: [0xB4B2], NFKD: [0x1103, 0x1171, 0x11B5] }, +{ source: [0xB4B3], NFC: [0xB4B3], NFD: [0x1103, 0x1171, 0x11B6], NFKC: [0xB4B3], NFKD: [0x1103, 0x1171, 0x11B6] }, +{ source: [0xB4B4], NFC: [0xB4B4], NFD: [0x1103, 0x1171, 0x11B7], NFKC: [0xB4B4], NFKD: [0x1103, 0x1171, 0x11B7] }, +{ source: [0xB4B5], NFC: [0xB4B5], NFD: [0x1103, 0x1171, 0x11B8], NFKC: [0xB4B5], NFKD: [0x1103, 0x1171, 0x11B8] }, +{ source: [0xB4B6], NFC: [0xB4B6], NFD: [0x1103, 0x1171, 0x11B9], NFKC: [0xB4B6], NFKD: [0x1103, 0x1171, 0x11B9] }, +{ source: [0xB4B7], NFC: [0xB4B7], NFD: [0x1103, 0x1171, 0x11BA], NFKC: [0xB4B7], NFKD: [0x1103, 0x1171, 0x11BA] }, +{ source: [0xB4B8], NFC: [0xB4B8], NFD: [0x1103, 0x1171, 0x11BB], NFKC: [0xB4B8], NFKD: [0x1103, 0x1171, 0x11BB] }, +{ source: [0xB4B9], NFC: [0xB4B9], NFD: [0x1103, 0x1171, 0x11BC], NFKC: [0xB4B9], NFKD: [0x1103, 0x1171, 0x11BC] }, +{ source: [0xB4BA], NFC: [0xB4BA], NFD: [0x1103, 0x1171, 0x11BD], NFKC: [0xB4BA], NFKD: [0x1103, 0x1171, 0x11BD] }, +{ source: [0xB4BB], NFC: [0xB4BB], NFD: [0x1103, 0x1171, 0x11BE], NFKC: [0xB4BB], NFKD: [0x1103, 0x1171, 0x11BE] }, +{ source: [0xB4BC], NFC: [0xB4BC], NFD: [0x1103, 0x1171, 0x11BF], NFKC: [0xB4BC], NFKD: [0x1103, 0x1171, 0x11BF] }, +{ source: [0xB4BD], NFC: [0xB4BD], NFD: [0x1103, 0x1171, 0x11C0], NFKC: [0xB4BD], NFKD: [0x1103, 0x1171, 0x11C0] }, +{ source: [0xB4BE], NFC: [0xB4BE], NFD: [0x1103, 0x1171, 0x11C1], NFKC: [0xB4BE], NFKD: [0x1103, 0x1171, 0x11C1] }, +{ source: [0xB4BF], NFC: [0xB4BF], NFD: [0x1103, 0x1171, 0x11C2], NFKC: [0xB4BF], NFKD: [0x1103, 0x1171, 0x11C2] }, +{ source: [0xB4C0], NFC: [0xB4C0], NFD: [0x1103, 0x1172], NFKC: [0xB4C0], NFKD: [0x1103, 0x1172] }, +{ source: [0xB4C1], NFC: [0xB4C1], NFD: [0x1103, 0x1172, 0x11A8], NFKC: [0xB4C1], NFKD: [0x1103, 0x1172, 0x11A8] }, +{ source: [0xB4C2], NFC: [0xB4C2], NFD: [0x1103, 0x1172, 0x11A9], NFKC: [0xB4C2], NFKD: [0x1103, 0x1172, 0x11A9] }, +{ source: [0xB4C3], NFC: [0xB4C3], NFD: [0x1103, 0x1172, 0x11AA], NFKC: [0xB4C3], NFKD: [0x1103, 0x1172, 0x11AA] }, +{ source: [0xB4C4], NFC: [0xB4C4], NFD: [0x1103, 0x1172, 0x11AB], NFKC: [0xB4C4], NFKD: [0x1103, 0x1172, 0x11AB] }, +{ source: [0xB4C5], NFC: [0xB4C5], NFD: [0x1103, 0x1172, 0x11AC], NFKC: [0xB4C5], NFKD: [0x1103, 0x1172, 0x11AC] }, +{ source: [0xB4C6], NFC: [0xB4C6], NFD: [0x1103, 0x1172, 0x11AD], NFKC: [0xB4C6], NFKD: [0x1103, 0x1172, 0x11AD] }, +{ source: [0xB4C7], NFC: [0xB4C7], NFD: [0x1103, 0x1172, 0x11AE], NFKC: [0xB4C7], NFKD: [0x1103, 0x1172, 0x11AE] }, +{ source: [0xB4C8], NFC: [0xB4C8], NFD: [0x1103, 0x1172, 0x11AF], NFKC: [0xB4C8], NFKD: [0x1103, 0x1172, 0x11AF] }, +{ source: [0xB4C9], NFC: [0xB4C9], NFD: [0x1103, 0x1172, 0x11B0], NFKC: [0xB4C9], NFKD: [0x1103, 0x1172, 0x11B0] }, +{ source: [0xB4CA], NFC: [0xB4CA], NFD: [0x1103, 0x1172, 0x11B1], NFKC: [0xB4CA], NFKD: [0x1103, 0x1172, 0x11B1] }, +{ source: [0xB4CB], NFC: [0xB4CB], NFD: [0x1103, 0x1172, 0x11B2], NFKC: [0xB4CB], NFKD: [0x1103, 0x1172, 0x11B2] }, +{ source: [0xB4CC], NFC: [0xB4CC], NFD: [0x1103, 0x1172, 0x11B3], NFKC: [0xB4CC], NFKD: [0x1103, 0x1172, 0x11B3] }, +{ source: [0xB4CD], NFC: [0xB4CD], NFD: [0x1103, 0x1172, 0x11B4], NFKC: [0xB4CD], NFKD: [0x1103, 0x1172, 0x11B4] }, +{ source: [0xB4CE], NFC: [0xB4CE], NFD: [0x1103, 0x1172, 0x11B5], NFKC: [0xB4CE], NFKD: [0x1103, 0x1172, 0x11B5] }, +{ source: [0xB4CF], NFC: [0xB4CF], NFD: [0x1103, 0x1172, 0x11B6], NFKC: [0xB4CF], NFKD: [0x1103, 0x1172, 0x11B6] }, +{ source: [0xB4D0], NFC: [0xB4D0], NFD: [0x1103, 0x1172, 0x11B7], NFKC: [0xB4D0], NFKD: [0x1103, 0x1172, 0x11B7] }, +{ source: [0xB4D1], NFC: [0xB4D1], NFD: [0x1103, 0x1172, 0x11B8], NFKC: [0xB4D1], NFKD: [0x1103, 0x1172, 0x11B8] }, +{ source: [0xB4D2], NFC: [0xB4D2], NFD: [0x1103, 0x1172, 0x11B9], NFKC: [0xB4D2], NFKD: [0x1103, 0x1172, 0x11B9] }, +{ source: [0xB4D3], NFC: [0xB4D3], NFD: [0x1103, 0x1172, 0x11BA], NFKC: [0xB4D3], NFKD: [0x1103, 0x1172, 0x11BA] }, +{ source: [0xB4D4], NFC: [0xB4D4], NFD: [0x1103, 0x1172, 0x11BB], NFKC: [0xB4D4], NFKD: [0x1103, 0x1172, 0x11BB] }, +{ source: [0xB4D5], NFC: [0xB4D5], NFD: [0x1103, 0x1172, 0x11BC], NFKC: [0xB4D5], NFKD: [0x1103, 0x1172, 0x11BC] }, +{ source: [0xB4D6], NFC: [0xB4D6], NFD: [0x1103, 0x1172, 0x11BD], NFKC: [0xB4D6], NFKD: [0x1103, 0x1172, 0x11BD] }, +{ source: [0xB4D7], NFC: [0xB4D7], NFD: [0x1103, 0x1172, 0x11BE], NFKC: [0xB4D7], NFKD: [0x1103, 0x1172, 0x11BE] }, +{ source: [0xB4D8], NFC: [0xB4D8], NFD: [0x1103, 0x1172, 0x11BF], NFKC: [0xB4D8], NFKD: [0x1103, 0x1172, 0x11BF] }, +{ source: [0xB4D9], NFC: [0xB4D9], NFD: [0x1103, 0x1172, 0x11C0], NFKC: [0xB4D9], NFKD: [0x1103, 0x1172, 0x11C0] }, +{ source: [0xB4DA], NFC: [0xB4DA], NFD: [0x1103, 0x1172, 0x11C1], NFKC: [0xB4DA], NFKD: [0x1103, 0x1172, 0x11C1] }, +{ source: [0xB4DB], NFC: [0xB4DB], NFD: [0x1103, 0x1172, 0x11C2], NFKC: [0xB4DB], NFKD: [0x1103, 0x1172, 0x11C2] }, +{ source: [0xB4DC], NFC: [0xB4DC], NFD: [0x1103, 0x1173], NFKC: [0xB4DC], NFKD: [0x1103, 0x1173] }, +{ source: [0xB4DD], NFC: [0xB4DD], NFD: [0x1103, 0x1173, 0x11A8], NFKC: [0xB4DD], NFKD: [0x1103, 0x1173, 0x11A8] }, +{ source: [0xB4DE], NFC: [0xB4DE], NFD: [0x1103, 0x1173, 0x11A9], NFKC: [0xB4DE], NFKD: [0x1103, 0x1173, 0x11A9] }, +{ source: [0xB4DF], NFC: [0xB4DF], NFD: [0x1103, 0x1173, 0x11AA], NFKC: [0xB4DF], NFKD: [0x1103, 0x1173, 0x11AA] }, +{ source: [0xB4E0], NFC: [0xB4E0], NFD: [0x1103, 0x1173, 0x11AB], NFKC: [0xB4E0], NFKD: [0x1103, 0x1173, 0x11AB] }, +{ source: [0xB4E1], NFC: [0xB4E1], NFD: [0x1103, 0x1173, 0x11AC], NFKC: [0xB4E1], NFKD: [0x1103, 0x1173, 0x11AC] }, +{ source: [0xB4E2], NFC: [0xB4E2], NFD: [0x1103, 0x1173, 0x11AD], NFKC: [0xB4E2], NFKD: [0x1103, 0x1173, 0x11AD] }, +{ source: [0xB4E3], NFC: [0xB4E3], NFD: [0x1103, 0x1173, 0x11AE], NFKC: [0xB4E3], NFKD: [0x1103, 0x1173, 0x11AE] }, +{ source: [0xB4E4], NFC: [0xB4E4], NFD: [0x1103, 0x1173, 0x11AF], NFKC: [0xB4E4], NFKD: [0x1103, 0x1173, 0x11AF] }, +{ source: [0xB4E5], NFC: [0xB4E5], NFD: [0x1103, 0x1173, 0x11B0], NFKC: [0xB4E5], NFKD: [0x1103, 0x1173, 0x11B0] }, +{ source: [0xB4E6], NFC: [0xB4E6], NFD: [0x1103, 0x1173, 0x11B1], NFKC: [0xB4E6], NFKD: [0x1103, 0x1173, 0x11B1] }, +{ source: [0xB4E7], NFC: [0xB4E7], NFD: [0x1103, 0x1173, 0x11B2], NFKC: [0xB4E7], NFKD: [0x1103, 0x1173, 0x11B2] }, +{ source: [0xB4E8], NFC: [0xB4E8], NFD: [0x1103, 0x1173, 0x11B3], NFKC: [0xB4E8], NFKD: [0x1103, 0x1173, 0x11B3] }, +{ source: [0xB4E9], NFC: [0xB4E9], NFD: [0x1103, 0x1173, 0x11B4], NFKC: [0xB4E9], NFKD: [0x1103, 0x1173, 0x11B4] }, +{ source: [0xB4EA], NFC: [0xB4EA], NFD: [0x1103, 0x1173, 0x11B5], NFKC: [0xB4EA], NFKD: [0x1103, 0x1173, 0x11B5] }, +{ source: [0xB4EB], NFC: [0xB4EB], NFD: [0x1103, 0x1173, 0x11B6], NFKC: [0xB4EB], NFKD: [0x1103, 0x1173, 0x11B6] }, +{ source: [0xB4EC], NFC: [0xB4EC], NFD: [0x1103, 0x1173, 0x11B7], NFKC: [0xB4EC], NFKD: [0x1103, 0x1173, 0x11B7] }, +{ source: [0xB4ED], NFC: [0xB4ED], NFD: [0x1103, 0x1173, 0x11B8], NFKC: [0xB4ED], NFKD: [0x1103, 0x1173, 0x11B8] }, +{ source: [0xB4EE], NFC: [0xB4EE], NFD: [0x1103, 0x1173, 0x11B9], NFKC: [0xB4EE], NFKD: [0x1103, 0x1173, 0x11B9] }, +{ source: [0xB4EF], NFC: [0xB4EF], NFD: [0x1103, 0x1173, 0x11BA], NFKC: [0xB4EF], NFKD: [0x1103, 0x1173, 0x11BA] }, +{ source: [0xB4F0], NFC: [0xB4F0], NFD: [0x1103, 0x1173, 0x11BB], NFKC: [0xB4F0], NFKD: [0x1103, 0x1173, 0x11BB] }, +{ source: [0xB4F1], NFC: [0xB4F1], NFD: [0x1103, 0x1173, 0x11BC], NFKC: [0xB4F1], NFKD: [0x1103, 0x1173, 0x11BC] }, +{ source: [0xB4F2], NFC: [0xB4F2], NFD: [0x1103, 0x1173, 0x11BD], NFKC: [0xB4F2], NFKD: [0x1103, 0x1173, 0x11BD] }, +{ source: [0xB4F3], NFC: [0xB4F3], NFD: [0x1103, 0x1173, 0x11BE], NFKC: [0xB4F3], NFKD: [0x1103, 0x1173, 0x11BE] }, +{ source: [0xB4F4], NFC: [0xB4F4], NFD: [0x1103, 0x1173, 0x11BF], NFKC: [0xB4F4], NFKD: [0x1103, 0x1173, 0x11BF] }, +{ source: [0xB4F5], NFC: [0xB4F5], NFD: [0x1103, 0x1173, 0x11C0], NFKC: [0xB4F5], NFKD: [0x1103, 0x1173, 0x11C0] }, +{ source: [0xB4F6], NFC: [0xB4F6], NFD: [0x1103, 0x1173, 0x11C1], NFKC: [0xB4F6], NFKD: [0x1103, 0x1173, 0x11C1] }, +{ source: [0xB4F7], NFC: [0xB4F7], NFD: [0x1103, 0x1173, 0x11C2], NFKC: [0xB4F7], NFKD: [0x1103, 0x1173, 0x11C2] }, +{ source: [0xB4F8], NFC: [0xB4F8], NFD: [0x1103, 0x1174], NFKC: [0xB4F8], NFKD: [0x1103, 0x1174] }, +{ source: [0xB4F9], NFC: [0xB4F9], NFD: [0x1103, 0x1174, 0x11A8], NFKC: [0xB4F9], NFKD: [0x1103, 0x1174, 0x11A8] }, +{ source: [0xB4FA], NFC: [0xB4FA], NFD: [0x1103, 0x1174, 0x11A9], NFKC: [0xB4FA], NFKD: [0x1103, 0x1174, 0x11A9] }, +{ source: [0xB4FB], NFC: [0xB4FB], NFD: [0x1103, 0x1174, 0x11AA], NFKC: [0xB4FB], NFKD: [0x1103, 0x1174, 0x11AA] }, +{ source: [0xB4FC], NFC: [0xB4FC], NFD: [0x1103, 0x1174, 0x11AB], NFKC: [0xB4FC], NFKD: [0x1103, 0x1174, 0x11AB] }, +{ source: [0xB4FD], NFC: [0xB4FD], NFD: [0x1103, 0x1174, 0x11AC], NFKC: [0xB4FD], NFKD: [0x1103, 0x1174, 0x11AC] }, +{ source: [0xB4FE], NFC: [0xB4FE], NFD: [0x1103, 0x1174, 0x11AD], NFKC: [0xB4FE], NFKD: [0x1103, 0x1174, 0x11AD] }, +{ source: [0xB4FF], NFC: [0xB4FF], NFD: [0x1103, 0x1174, 0x11AE], NFKC: [0xB4FF], NFKD: [0x1103, 0x1174, 0x11AE] }, +{ source: [0xB500], NFC: [0xB500], NFD: [0x1103, 0x1174, 0x11AF], NFKC: [0xB500], NFKD: [0x1103, 0x1174, 0x11AF] }, +{ source: [0xB501], NFC: [0xB501], NFD: [0x1103, 0x1174, 0x11B0], NFKC: [0xB501], NFKD: [0x1103, 0x1174, 0x11B0] }, +{ source: [0xB502], NFC: [0xB502], NFD: [0x1103, 0x1174, 0x11B1], NFKC: [0xB502], NFKD: [0x1103, 0x1174, 0x11B1] }, +{ source: [0xB503], NFC: [0xB503], NFD: [0x1103, 0x1174, 0x11B2], NFKC: [0xB503], NFKD: [0x1103, 0x1174, 0x11B2] }, +{ source: [0xB504], NFC: [0xB504], NFD: [0x1103, 0x1174, 0x11B3], NFKC: [0xB504], NFKD: [0x1103, 0x1174, 0x11B3] }, +{ source: [0xB505], NFC: [0xB505], NFD: [0x1103, 0x1174, 0x11B4], NFKC: [0xB505], NFKD: [0x1103, 0x1174, 0x11B4] }, +{ source: [0xB506], NFC: [0xB506], NFD: [0x1103, 0x1174, 0x11B5], NFKC: [0xB506], NFKD: [0x1103, 0x1174, 0x11B5] }, +{ source: [0xB507], NFC: [0xB507], NFD: [0x1103, 0x1174, 0x11B6], NFKC: [0xB507], NFKD: [0x1103, 0x1174, 0x11B6] }, +{ source: [0xB508], NFC: [0xB508], NFD: [0x1103, 0x1174, 0x11B7], NFKC: [0xB508], NFKD: [0x1103, 0x1174, 0x11B7] }, +{ source: [0xB509], NFC: [0xB509], NFD: [0x1103, 0x1174, 0x11B8], NFKC: [0xB509], NFKD: [0x1103, 0x1174, 0x11B8] }, +{ source: [0xB50A], NFC: [0xB50A], NFD: [0x1103, 0x1174, 0x11B9], NFKC: [0xB50A], NFKD: [0x1103, 0x1174, 0x11B9] }, +{ source: [0xB50B], NFC: [0xB50B], NFD: [0x1103, 0x1174, 0x11BA], NFKC: [0xB50B], NFKD: [0x1103, 0x1174, 0x11BA] }, +{ source: [0xB50C], NFC: [0xB50C], NFD: [0x1103, 0x1174, 0x11BB], NFKC: [0xB50C], NFKD: [0x1103, 0x1174, 0x11BB] }, +{ source: [0xB50D], NFC: [0xB50D], NFD: [0x1103, 0x1174, 0x11BC], NFKC: [0xB50D], NFKD: [0x1103, 0x1174, 0x11BC] }, +{ source: [0xB50E], NFC: [0xB50E], NFD: [0x1103, 0x1174, 0x11BD], NFKC: [0xB50E], NFKD: [0x1103, 0x1174, 0x11BD] }, +{ source: [0xB50F], NFC: [0xB50F], NFD: [0x1103, 0x1174, 0x11BE], NFKC: [0xB50F], NFKD: [0x1103, 0x1174, 0x11BE] }, +{ source: [0xB510], NFC: [0xB510], NFD: [0x1103, 0x1174, 0x11BF], NFKC: [0xB510], NFKD: [0x1103, 0x1174, 0x11BF] }, +{ source: [0xB511], NFC: [0xB511], NFD: [0x1103, 0x1174, 0x11C0], NFKC: [0xB511], NFKD: [0x1103, 0x1174, 0x11C0] }, +{ source: [0xB512], NFC: [0xB512], NFD: [0x1103, 0x1174, 0x11C1], NFKC: [0xB512], NFKD: [0x1103, 0x1174, 0x11C1] }, +{ source: [0xB513], NFC: [0xB513], NFD: [0x1103, 0x1174, 0x11C2], NFKC: [0xB513], NFKD: [0x1103, 0x1174, 0x11C2] }, +{ source: [0xB514], NFC: [0xB514], NFD: [0x1103, 0x1175], NFKC: [0xB514], NFKD: [0x1103, 0x1175] }, +{ source: [0xB515], NFC: [0xB515], NFD: [0x1103, 0x1175, 0x11A8], NFKC: [0xB515], NFKD: [0x1103, 0x1175, 0x11A8] }, +{ source: [0xB516], NFC: [0xB516], NFD: [0x1103, 0x1175, 0x11A9], NFKC: [0xB516], NFKD: [0x1103, 0x1175, 0x11A9] }, +{ source: [0xB517], NFC: [0xB517], NFD: [0x1103, 0x1175, 0x11AA], NFKC: [0xB517], NFKD: [0x1103, 0x1175, 0x11AA] }, +{ source: [0xB518], NFC: [0xB518], NFD: [0x1103, 0x1175, 0x11AB], NFKC: [0xB518], NFKD: [0x1103, 0x1175, 0x11AB] }, +{ source: [0xB519], NFC: [0xB519], NFD: [0x1103, 0x1175, 0x11AC], NFKC: [0xB519], NFKD: [0x1103, 0x1175, 0x11AC] }, +{ source: [0xB51A], NFC: [0xB51A], NFD: [0x1103, 0x1175, 0x11AD], NFKC: [0xB51A], NFKD: [0x1103, 0x1175, 0x11AD] }, +{ source: [0xB51B], NFC: [0xB51B], NFD: [0x1103, 0x1175, 0x11AE], NFKC: [0xB51B], NFKD: [0x1103, 0x1175, 0x11AE] }, +{ source: [0xB51C], NFC: [0xB51C], NFD: [0x1103, 0x1175, 0x11AF], NFKC: [0xB51C], NFKD: [0x1103, 0x1175, 0x11AF] }, +{ source: [0xB51D], NFC: [0xB51D], NFD: [0x1103, 0x1175, 0x11B0], NFKC: [0xB51D], NFKD: [0x1103, 0x1175, 0x11B0] }, +{ source: [0xB51E], NFC: [0xB51E], NFD: [0x1103, 0x1175, 0x11B1], NFKC: [0xB51E], NFKD: [0x1103, 0x1175, 0x11B1] }, +{ source: [0xB51F], NFC: [0xB51F], NFD: [0x1103, 0x1175, 0x11B2], NFKC: [0xB51F], NFKD: [0x1103, 0x1175, 0x11B2] }, +{ source: [0xB520], NFC: [0xB520], NFD: [0x1103, 0x1175, 0x11B3], NFKC: [0xB520], NFKD: [0x1103, 0x1175, 0x11B3] }, +{ source: [0xB521], NFC: [0xB521], NFD: [0x1103, 0x1175, 0x11B4], NFKC: [0xB521], NFKD: [0x1103, 0x1175, 0x11B4] }, +{ source: [0xB522], NFC: [0xB522], NFD: [0x1103, 0x1175, 0x11B5], NFKC: [0xB522], NFKD: [0x1103, 0x1175, 0x11B5] }, +{ source: [0xB523], NFC: [0xB523], NFD: [0x1103, 0x1175, 0x11B6], NFKC: [0xB523], NFKD: [0x1103, 0x1175, 0x11B6] }, +{ source: [0xB524], NFC: [0xB524], NFD: [0x1103, 0x1175, 0x11B7], NFKC: [0xB524], NFKD: [0x1103, 0x1175, 0x11B7] }, +{ source: [0xB525], NFC: [0xB525], NFD: [0x1103, 0x1175, 0x11B8], NFKC: [0xB525], NFKD: [0x1103, 0x1175, 0x11B8] }, +{ source: [0xB526], NFC: [0xB526], NFD: [0x1103, 0x1175, 0x11B9], NFKC: [0xB526], NFKD: [0x1103, 0x1175, 0x11B9] }, +{ source: [0xB527], NFC: [0xB527], NFD: [0x1103, 0x1175, 0x11BA], NFKC: [0xB527], NFKD: [0x1103, 0x1175, 0x11BA] }, +{ source: [0xB528], NFC: [0xB528], NFD: [0x1103, 0x1175, 0x11BB], NFKC: [0xB528], NFKD: [0x1103, 0x1175, 0x11BB] }, +{ source: [0xB529], NFC: [0xB529], NFD: [0x1103, 0x1175, 0x11BC], NFKC: [0xB529], NFKD: [0x1103, 0x1175, 0x11BC] }, +{ source: [0xB52A], NFC: [0xB52A], NFD: [0x1103, 0x1175, 0x11BD], NFKC: [0xB52A], NFKD: [0x1103, 0x1175, 0x11BD] }, +{ source: [0xB52B], NFC: [0xB52B], NFD: [0x1103, 0x1175, 0x11BE], NFKC: [0xB52B], NFKD: [0x1103, 0x1175, 0x11BE] }, +{ source: [0xB52C], NFC: [0xB52C], NFD: [0x1103, 0x1175, 0x11BF], NFKC: [0xB52C], NFKD: [0x1103, 0x1175, 0x11BF] }, +{ source: [0xB52D], NFC: [0xB52D], NFD: [0x1103, 0x1175, 0x11C0], NFKC: [0xB52D], NFKD: [0x1103, 0x1175, 0x11C0] }, +{ source: [0xB52E], NFC: [0xB52E], NFD: [0x1103, 0x1175, 0x11C1], NFKC: [0xB52E], NFKD: [0x1103, 0x1175, 0x11C1] }, +{ source: [0xB52F], NFC: [0xB52F], NFD: [0x1103, 0x1175, 0x11C2], NFKC: [0xB52F], NFKD: [0x1103, 0x1175, 0x11C2] }, +{ source: [0xB530], NFC: [0xB530], NFD: [0x1104, 0x1161], NFKC: [0xB530], NFKD: [0x1104, 0x1161] }, +{ source: [0xB531], NFC: [0xB531], NFD: [0x1104, 0x1161, 0x11A8], NFKC: [0xB531], NFKD: [0x1104, 0x1161, 0x11A8] }, +{ source: [0xB532], NFC: [0xB532], NFD: [0x1104, 0x1161, 0x11A9], NFKC: [0xB532], NFKD: [0x1104, 0x1161, 0x11A9] }, +{ source: [0xB533], NFC: [0xB533], NFD: [0x1104, 0x1161, 0x11AA], NFKC: [0xB533], NFKD: [0x1104, 0x1161, 0x11AA] }, +{ source: [0xB534], NFC: [0xB534], NFD: [0x1104, 0x1161, 0x11AB], NFKC: [0xB534], NFKD: [0x1104, 0x1161, 0x11AB] }, +{ source: [0xB535], NFC: [0xB535], NFD: [0x1104, 0x1161, 0x11AC], NFKC: [0xB535], NFKD: [0x1104, 0x1161, 0x11AC] }, +{ source: [0xB536], NFC: [0xB536], NFD: [0x1104, 0x1161, 0x11AD], NFKC: [0xB536], NFKD: [0x1104, 0x1161, 0x11AD] }, +{ source: [0xB537], NFC: [0xB537], NFD: [0x1104, 0x1161, 0x11AE], NFKC: [0xB537], NFKD: [0x1104, 0x1161, 0x11AE] }, +{ source: [0xB538], NFC: [0xB538], NFD: [0x1104, 0x1161, 0x11AF], NFKC: [0xB538], NFKD: [0x1104, 0x1161, 0x11AF] }, +{ source: [0xB539], NFC: [0xB539], NFD: [0x1104, 0x1161, 0x11B0], NFKC: [0xB539], NFKD: [0x1104, 0x1161, 0x11B0] }, +{ source: [0xB53A], NFC: [0xB53A], NFD: [0x1104, 0x1161, 0x11B1], NFKC: [0xB53A], NFKD: [0x1104, 0x1161, 0x11B1] }, +{ source: [0xB53B], NFC: [0xB53B], NFD: [0x1104, 0x1161, 0x11B2], NFKC: [0xB53B], NFKD: [0x1104, 0x1161, 0x11B2] }, +{ source: [0xB53C], NFC: [0xB53C], NFD: [0x1104, 0x1161, 0x11B3], NFKC: [0xB53C], NFKD: [0x1104, 0x1161, 0x11B3] }, +{ source: [0xB53D], NFC: [0xB53D], NFD: [0x1104, 0x1161, 0x11B4], NFKC: [0xB53D], NFKD: [0x1104, 0x1161, 0x11B4] }, +{ source: [0xB53E], NFC: [0xB53E], NFD: [0x1104, 0x1161, 0x11B5], NFKC: [0xB53E], NFKD: [0x1104, 0x1161, 0x11B5] }, +{ source: [0xB53F], NFC: [0xB53F], NFD: [0x1104, 0x1161, 0x11B6], NFKC: [0xB53F], NFKD: [0x1104, 0x1161, 0x11B6] }, +{ source: [0xB540], NFC: [0xB540], NFD: [0x1104, 0x1161, 0x11B7], NFKC: [0xB540], NFKD: [0x1104, 0x1161, 0x11B7] }, +{ source: [0xB541], NFC: [0xB541], NFD: [0x1104, 0x1161, 0x11B8], NFKC: [0xB541], NFKD: [0x1104, 0x1161, 0x11B8] }, +{ source: [0xB542], NFC: [0xB542], NFD: [0x1104, 0x1161, 0x11B9], NFKC: [0xB542], NFKD: [0x1104, 0x1161, 0x11B9] }, +{ source: [0xB543], NFC: [0xB543], NFD: [0x1104, 0x1161, 0x11BA], NFKC: [0xB543], NFKD: [0x1104, 0x1161, 0x11BA] }, +{ source: [0xB544], NFC: [0xB544], NFD: [0x1104, 0x1161, 0x11BB], NFKC: [0xB544], NFKD: [0x1104, 0x1161, 0x11BB] }, +{ source: [0xB545], NFC: [0xB545], NFD: [0x1104, 0x1161, 0x11BC], NFKC: [0xB545], NFKD: [0x1104, 0x1161, 0x11BC] }, +{ source: [0xB546], NFC: [0xB546], NFD: [0x1104, 0x1161, 0x11BD], NFKC: [0xB546], NFKD: [0x1104, 0x1161, 0x11BD] }, +{ source: [0xB547], NFC: [0xB547], NFD: [0x1104, 0x1161, 0x11BE], NFKC: [0xB547], NFKD: [0x1104, 0x1161, 0x11BE] }, +{ source: [0xB548], NFC: [0xB548], NFD: [0x1104, 0x1161, 0x11BF], NFKC: [0xB548], NFKD: [0x1104, 0x1161, 0x11BF] }, +{ source: [0xB549], NFC: [0xB549], NFD: [0x1104, 0x1161, 0x11C0], NFKC: [0xB549], NFKD: [0x1104, 0x1161, 0x11C0] }, +{ source: [0xB54A], NFC: [0xB54A], NFD: [0x1104, 0x1161, 0x11C1], NFKC: [0xB54A], NFKD: [0x1104, 0x1161, 0x11C1] }, +{ source: [0xB54B], NFC: [0xB54B], NFD: [0x1104, 0x1161, 0x11C2], NFKC: [0xB54B], NFKD: [0x1104, 0x1161, 0x11C2] }, +{ source: [0xB54C], NFC: [0xB54C], NFD: [0x1104, 0x1162], NFKC: [0xB54C], NFKD: [0x1104, 0x1162] }, +{ source: [0xB54D], NFC: [0xB54D], NFD: [0x1104, 0x1162, 0x11A8], NFKC: [0xB54D], NFKD: [0x1104, 0x1162, 0x11A8] }, +{ source: [0xB54E], NFC: [0xB54E], NFD: [0x1104, 0x1162, 0x11A9], NFKC: [0xB54E], NFKD: [0x1104, 0x1162, 0x11A9] }, +{ source: [0xB54F], NFC: [0xB54F], NFD: [0x1104, 0x1162, 0x11AA], NFKC: [0xB54F], NFKD: [0x1104, 0x1162, 0x11AA] }, +{ source: [0xB550], NFC: [0xB550], NFD: [0x1104, 0x1162, 0x11AB], NFKC: [0xB550], NFKD: [0x1104, 0x1162, 0x11AB] }, +{ source: [0xB551], NFC: [0xB551], NFD: [0x1104, 0x1162, 0x11AC], NFKC: [0xB551], NFKD: [0x1104, 0x1162, 0x11AC] }, +{ source: [0xB552], NFC: [0xB552], NFD: [0x1104, 0x1162, 0x11AD], NFKC: [0xB552], NFKD: [0x1104, 0x1162, 0x11AD] }, +{ source: [0xB553], NFC: [0xB553], NFD: [0x1104, 0x1162, 0x11AE], NFKC: [0xB553], NFKD: [0x1104, 0x1162, 0x11AE] }, +{ source: [0xB554], NFC: [0xB554], NFD: [0x1104, 0x1162, 0x11AF], NFKC: [0xB554], NFKD: [0x1104, 0x1162, 0x11AF] }, +{ source: [0xB555], NFC: [0xB555], NFD: [0x1104, 0x1162, 0x11B0], NFKC: [0xB555], NFKD: [0x1104, 0x1162, 0x11B0] }, +{ source: [0xB556], NFC: [0xB556], NFD: [0x1104, 0x1162, 0x11B1], NFKC: [0xB556], NFKD: [0x1104, 0x1162, 0x11B1] }, +{ source: [0xB557], NFC: [0xB557], NFD: [0x1104, 0x1162, 0x11B2], NFKC: [0xB557], NFKD: [0x1104, 0x1162, 0x11B2] }, +{ source: [0xB558], NFC: [0xB558], NFD: [0x1104, 0x1162, 0x11B3], NFKC: [0xB558], NFKD: [0x1104, 0x1162, 0x11B3] }, +{ source: [0xB559], NFC: [0xB559], NFD: [0x1104, 0x1162, 0x11B4], NFKC: [0xB559], NFKD: [0x1104, 0x1162, 0x11B4] }, +{ source: [0xB55A], NFC: [0xB55A], NFD: [0x1104, 0x1162, 0x11B5], NFKC: [0xB55A], NFKD: [0x1104, 0x1162, 0x11B5] }, +{ source: [0xB55B], NFC: [0xB55B], NFD: [0x1104, 0x1162, 0x11B6], NFKC: [0xB55B], NFKD: [0x1104, 0x1162, 0x11B6] }, +{ source: [0xB55C], NFC: [0xB55C], NFD: [0x1104, 0x1162, 0x11B7], NFKC: [0xB55C], NFKD: [0x1104, 0x1162, 0x11B7] }, +{ source: [0xB55D], NFC: [0xB55D], NFD: [0x1104, 0x1162, 0x11B8], NFKC: [0xB55D], NFKD: [0x1104, 0x1162, 0x11B8] }, +{ source: [0xB55E], NFC: [0xB55E], NFD: [0x1104, 0x1162, 0x11B9], NFKC: [0xB55E], NFKD: [0x1104, 0x1162, 0x11B9] }, +{ source: [0xB55F], NFC: [0xB55F], NFD: [0x1104, 0x1162, 0x11BA], NFKC: [0xB55F], NFKD: [0x1104, 0x1162, 0x11BA] }, +{ source: [0xB560], NFC: [0xB560], NFD: [0x1104, 0x1162, 0x11BB], NFKC: [0xB560], NFKD: [0x1104, 0x1162, 0x11BB] }, +{ source: [0xB561], NFC: [0xB561], NFD: [0x1104, 0x1162, 0x11BC], NFKC: [0xB561], NFKD: [0x1104, 0x1162, 0x11BC] }, +{ source: [0xB562], NFC: [0xB562], NFD: [0x1104, 0x1162, 0x11BD], NFKC: [0xB562], NFKD: [0x1104, 0x1162, 0x11BD] }, +{ source: [0xB563], NFC: [0xB563], NFD: [0x1104, 0x1162, 0x11BE], NFKC: [0xB563], NFKD: [0x1104, 0x1162, 0x11BE] }, +{ source: [0xB564], NFC: [0xB564], NFD: [0x1104, 0x1162, 0x11BF], NFKC: [0xB564], NFKD: [0x1104, 0x1162, 0x11BF] }, +{ source: [0xB565], NFC: [0xB565], NFD: [0x1104, 0x1162, 0x11C0], NFKC: [0xB565], NFKD: [0x1104, 0x1162, 0x11C0] }, +{ source: [0xB566], NFC: [0xB566], NFD: [0x1104, 0x1162, 0x11C1], NFKC: [0xB566], NFKD: [0x1104, 0x1162, 0x11C1] }, +{ source: [0xB567], NFC: [0xB567], NFD: [0x1104, 0x1162, 0x11C2], NFKC: [0xB567], NFKD: [0x1104, 0x1162, 0x11C2] }, +{ source: [0xB568], NFC: [0xB568], NFD: [0x1104, 0x1163], NFKC: [0xB568], NFKD: [0x1104, 0x1163] }, +{ source: [0xB569], NFC: [0xB569], NFD: [0x1104, 0x1163, 0x11A8], NFKC: [0xB569], NFKD: [0x1104, 0x1163, 0x11A8] }, +{ source: [0xB56A], NFC: [0xB56A], NFD: [0x1104, 0x1163, 0x11A9], NFKC: [0xB56A], NFKD: [0x1104, 0x1163, 0x11A9] }, +{ source: [0xB56B], NFC: [0xB56B], NFD: [0x1104, 0x1163, 0x11AA], NFKC: [0xB56B], NFKD: [0x1104, 0x1163, 0x11AA] }, +{ source: [0xB56C], NFC: [0xB56C], NFD: [0x1104, 0x1163, 0x11AB], NFKC: [0xB56C], NFKD: [0x1104, 0x1163, 0x11AB] }, +{ source: [0xB56D], NFC: [0xB56D], NFD: [0x1104, 0x1163, 0x11AC], NFKC: [0xB56D], NFKD: [0x1104, 0x1163, 0x11AC] }, +{ source: [0xB56E], NFC: [0xB56E], NFD: [0x1104, 0x1163, 0x11AD], NFKC: [0xB56E], NFKD: [0x1104, 0x1163, 0x11AD] }, +{ source: [0xB56F], NFC: [0xB56F], NFD: [0x1104, 0x1163, 0x11AE], NFKC: [0xB56F], NFKD: [0x1104, 0x1163, 0x11AE] }, +{ source: [0xB570], NFC: [0xB570], NFD: [0x1104, 0x1163, 0x11AF], NFKC: [0xB570], NFKD: [0x1104, 0x1163, 0x11AF] }, +{ source: [0xB571], NFC: [0xB571], NFD: [0x1104, 0x1163, 0x11B0], NFKC: [0xB571], NFKD: [0x1104, 0x1163, 0x11B0] }, +{ source: [0xB572], NFC: [0xB572], NFD: [0x1104, 0x1163, 0x11B1], NFKC: [0xB572], NFKD: [0x1104, 0x1163, 0x11B1] }, +{ source: [0xB573], NFC: [0xB573], NFD: [0x1104, 0x1163, 0x11B2], NFKC: [0xB573], NFKD: [0x1104, 0x1163, 0x11B2] }, +{ source: [0xB574], NFC: [0xB574], NFD: [0x1104, 0x1163, 0x11B3], NFKC: [0xB574], NFKD: [0x1104, 0x1163, 0x11B3] }, +{ source: [0xB575], NFC: [0xB575], NFD: [0x1104, 0x1163, 0x11B4], NFKC: [0xB575], NFKD: [0x1104, 0x1163, 0x11B4] }, +{ source: [0xB576], NFC: [0xB576], NFD: [0x1104, 0x1163, 0x11B5], NFKC: [0xB576], NFKD: [0x1104, 0x1163, 0x11B5] }, +{ source: [0xB577], NFC: [0xB577], NFD: [0x1104, 0x1163, 0x11B6], NFKC: [0xB577], NFKD: [0x1104, 0x1163, 0x11B6] }, +{ source: [0xB578], NFC: [0xB578], NFD: [0x1104, 0x1163, 0x11B7], NFKC: [0xB578], NFKD: [0x1104, 0x1163, 0x11B7] }, +{ source: [0xB579], NFC: [0xB579], NFD: [0x1104, 0x1163, 0x11B8], NFKC: [0xB579], NFKD: [0x1104, 0x1163, 0x11B8] }, +{ source: [0xB57A], NFC: [0xB57A], NFD: [0x1104, 0x1163, 0x11B9], NFKC: [0xB57A], NFKD: [0x1104, 0x1163, 0x11B9] }, +{ source: [0xB57B], NFC: [0xB57B], NFD: [0x1104, 0x1163, 0x11BA], NFKC: [0xB57B], NFKD: [0x1104, 0x1163, 0x11BA] }, +{ source: [0xB57C], NFC: [0xB57C], NFD: [0x1104, 0x1163, 0x11BB], NFKC: [0xB57C], NFKD: [0x1104, 0x1163, 0x11BB] }, +{ source: [0xB57D], NFC: [0xB57D], NFD: [0x1104, 0x1163, 0x11BC], NFKC: [0xB57D], NFKD: [0x1104, 0x1163, 0x11BC] }, +{ source: [0xB57E], NFC: [0xB57E], NFD: [0x1104, 0x1163, 0x11BD], NFKC: [0xB57E], NFKD: [0x1104, 0x1163, 0x11BD] }, +{ source: [0xB57F], NFC: [0xB57F], NFD: [0x1104, 0x1163, 0x11BE], NFKC: [0xB57F], NFKD: [0x1104, 0x1163, 0x11BE] }, +{ source: [0xB580], NFC: [0xB580], NFD: [0x1104, 0x1163, 0x11BF], NFKC: [0xB580], NFKD: [0x1104, 0x1163, 0x11BF] }, +{ source: [0xB581], NFC: [0xB581], NFD: [0x1104, 0x1163, 0x11C0], NFKC: [0xB581], NFKD: [0x1104, 0x1163, 0x11C0] }, +{ source: [0xB582], NFC: [0xB582], NFD: [0x1104, 0x1163, 0x11C1], NFKC: [0xB582], NFKD: [0x1104, 0x1163, 0x11C1] }, +{ source: [0xB583], NFC: [0xB583], NFD: [0x1104, 0x1163, 0x11C2], NFKC: [0xB583], NFKD: [0x1104, 0x1163, 0x11C2] }, +{ source: [0xB584], NFC: [0xB584], NFD: [0x1104, 0x1164], NFKC: [0xB584], NFKD: [0x1104, 0x1164] }, +{ source: [0xB585], NFC: [0xB585], NFD: [0x1104, 0x1164, 0x11A8], NFKC: [0xB585], NFKD: [0x1104, 0x1164, 0x11A8] }, +{ source: [0xB586], NFC: [0xB586], NFD: [0x1104, 0x1164, 0x11A9], NFKC: [0xB586], NFKD: [0x1104, 0x1164, 0x11A9] }, +{ source: [0xB587], NFC: [0xB587], NFD: [0x1104, 0x1164, 0x11AA], NFKC: [0xB587], NFKD: [0x1104, 0x1164, 0x11AA] }, +{ source: [0xB588], NFC: [0xB588], NFD: [0x1104, 0x1164, 0x11AB], NFKC: [0xB588], NFKD: [0x1104, 0x1164, 0x11AB] }, +{ source: [0xB589], NFC: [0xB589], NFD: [0x1104, 0x1164, 0x11AC], NFKC: [0xB589], NFKD: [0x1104, 0x1164, 0x11AC] }, +{ source: [0xB58A], NFC: [0xB58A], NFD: [0x1104, 0x1164, 0x11AD], NFKC: [0xB58A], NFKD: [0x1104, 0x1164, 0x11AD] }, +{ source: [0xB58B], NFC: [0xB58B], NFD: [0x1104, 0x1164, 0x11AE], NFKC: [0xB58B], NFKD: [0x1104, 0x1164, 0x11AE] }, +{ source: [0xB58C], NFC: [0xB58C], NFD: [0x1104, 0x1164, 0x11AF], NFKC: [0xB58C], NFKD: [0x1104, 0x1164, 0x11AF] }, +{ source: [0xB58D], NFC: [0xB58D], NFD: [0x1104, 0x1164, 0x11B0], NFKC: [0xB58D], NFKD: [0x1104, 0x1164, 0x11B0] }, +{ source: [0xB58E], NFC: [0xB58E], NFD: [0x1104, 0x1164, 0x11B1], NFKC: [0xB58E], NFKD: [0x1104, 0x1164, 0x11B1] }, +{ source: [0xB58F], NFC: [0xB58F], NFD: [0x1104, 0x1164, 0x11B2], NFKC: [0xB58F], NFKD: [0x1104, 0x1164, 0x11B2] }, +{ source: [0xB590], NFC: [0xB590], NFD: [0x1104, 0x1164, 0x11B3], NFKC: [0xB590], NFKD: [0x1104, 0x1164, 0x11B3] }, +{ source: [0xB591], NFC: [0xB591], NFD: [0x1104, 0x1164, 0x11B4], NFKC: [0xB591], NFKD: [0x1104, 0x1164, 0x11B4] }, +{ source: [0xB592], NFC: [0xB592], NFD: [0x1104, 0x1164, 0x11B5], NFKC: [0xB592], NFKD: [0x1104, 0x1164, 0x11B5] }, +{ source: [0xB593], NFC: [0xB593], NFD: [0x1104, 0x1164, 0x11B6], NFKC: [0xB593], NFKD: [0x1104, 0x1164, 0x11B6] }, +{ source: [0xB594], NFC: [0xB594], NFD: [0x1104, 0x1164, 0x11B7], NFKC: [0xB594], NFKD: [0x1104, 0x1164, 0x11B7] }, +{ source: [0xB595], NFC: [0xB595], NFD: [0x1104, 0x1164, 0x11B8], NFKC: [0xB595], NFKD: [0x1104, 0x1164, 0x11B8] }, +{ source: [0xB596], NFC: [0xB596], NFD: [0x1104, 0x1164, 0x11B9], NFKC: [0xB596], NFKD: [0x1104, 0x1164, 0x11B9] }, +{ source: [0xB597], NFC: [0xB597], NFD: [0x1104, 0x1164, 0x11BA], NFKC: [0xB597], NFKD: [0x1104, 0x1164, 0x11BA] }, +{ source: [0xB598], NFC: [0xB598], NFD: [0x1104, 0x1164, 0x11BB], NFKC: [0xB598], NFKD: [0x1104, 0x1164, 0x11BB] }, +{ source: [0xB599], NFC: [0xB599], NFD: [0x1104, 0x1164, 0x11BC], NFKC: [0xB599], NFKD: [0x1104, 0x1164, 0x11BC] }, +{ source: [0xB59A], NFC: [0xB59A], NFD: [0x1104, 0x1164, 0x11BD], NFKC: [0xB59A], NFKD: [0x1104, 0x1164, 0x11BD] }, +{ source: [0xB59B], NFC: [0xB59B], NFD: [0x1104, 0x1164, 0x11BE], NFKC: [0xB59B], NFKD: [0x1104, 0x1164, 0x11BE] }, +{ source: [0xB59C], NFC: [0xB59C], NFD: [0x1104, 0x1164, 0x11BF], NFKC: [0xB59C], NFKD: [0x1104, 0x1164, 0x11BF] }, +{ source: [0xB59D], NFC: [0xB59D], NFD: [0x1104, 0x1164, 0x11C0], NFKC: [0xB59D], NFKD: [0x1104, 0x1164, 0x11C0] }, +{ source: [0xB59E], NFC: [0xB59E], NFD: [0x1104, 0x1164, 0x11C1], NFKC: [0xB59E], NFKD: [0x1104, 0x1164, 0x11C1] }, +{ source: [0xB59F], NFC: [0xB59F], NFD: [0x1104, 0x1164, 0x11C2], NFKC: [0xB59F], NFKD: [0x1104, 0x1164, 0x11C2] }, +{ source: [0xB5A0], NFC: [0xB5A0], NFD: [0x1104, 0x1165], NFKC: [0xB5A0], NFKD: [0x1104, 0x1165] }, +{ source: [0xB5A1], NFC: [0xB5A1], NFD: [0x1104, 0x1165, 0x11A8], NFKC: [0xB5A1], NFKD: [0x1104, 0x1165, 0x11A8] }, +{ source: [0xB5A2], NFC: [0xB5A2], NFD: [0x1104, 0x1165, 0x11A9], NFKC: [0xB5A2], NFKD: [0x1104, 0x1165, 0x11A9] }, +{ source: [0xB5A3], NFC: [0xB5A3], NFD: [0x1104, 0x1165, 0x11AA], NFKC: [0xB5A3], NFKD: [0x1104, 0x1165, 0x11AA] }, +{ source: [0xB5A4], NFC: [0xB5A4], NFD: [0x1104, 0x1165, 0x11AB], NFKC: [0xB5A4], NFKD: [0x1104, 0x1165, 0x11AB] }, +{ source: [0xB5A5], NFC: [0xB5A5], NFD: [0x1104, 0x1165, 0x11AC], NFKC: [0xB5A5], NFKD: [0x1104, 0x1165, 0x11AC] }, +{ source: [0xB5A6], NFC: [0xB5A6], NFD: [0x1104, 0x1165, 0x11AD], NFKC: [0xB5A6], NFKD: [0x1104, 0x1165, 0x11AD] }, +{ source: [0xB5A7], NFC: [0xB5A7], NFD: [0x1104, 0x1165, 0x11AE], NFKC: [0xB5A7], NFKD: [0x1104, 0x1165, 0x11AE] }, +{ source: [0xB5A8], NFC: [0xB5A8], NFD: [0x1104, 0x1165, 0x11AF], NFKC: [0xB5A8], NFKD: [0x1104, 0x1165, 0x11AF] }, +{ source: [0xB5A9], NFC: [0xB5A9], NFD: [0x1104, 0x1165, 0x11B0], NFKC: [0xB5A9], NFKD: [0x1104, 0x1165, 0x11B0] }, +{ source: [0xB5AA], NFC: [0xB5AA], NFD: [0x1104, 0x1165, 0x11B1], NFKC: [0xB5AA], NFKD: [0x1104, 0x1165, 0x11B1] }, +{ source: [0xB5AB], NFC: [0xB5AB], NFD: [0x1104, 0x1165, 0x11B2], NFKC: [0xB5AB], NFKD: [0x1104, 0x1165, 0x11B2] }, +{ source: [0xB5AC], NFC: [0xB5AC], NFD: [0x1104, 0x1165, 0x11B3], NFKC: [0xB5AC], NFKD: [0x1104, 0x1165, 0x11B3] }, +{ source: [0xB5AD], NFC: [0xB5AD], NFD: [0x1104, 0x1165, 0x11B4], NFKC: [0xB5AD], NFKD: [0x1104, 0x1165, 0x11B4] }, +{ source: [0xB5AE], NFC: [0xB5AE], NFD: [0x1104, 0x1165, 0x11B5], NFKC: [0xB5AE], NFKD: [0x1104, 0x1165, 0x11B5] }, +{ source: [0xB5AF], NFC: [0xB5AF], NFD: [0x1104, 0x1165, 0x11B6], NFKC: [0xB5AF], NFKD: [0x1104, 0x1165, 0x11B6] }, +{ source: [0xB5B0], NFC: [0xB5B0], NFD: [0x1104, 0x1165, 0x11B7], NFKC: [0xB5B0], NFKD: [0x1104, 0x1165, 0x11B7] }, +{ source: [0xB5B1], NFC: [0xB5B1], NFD: [0x1104, 0x1165, 0x11B8], NFKC: [0xB5B1], NFKD: [0x1104, 0x1165, 0x11B8] }, +{ source: [0xB5B2], NFC: [0xB5B2], NFD: [0x1104, 0x1165, 0x11B9], NFKC: [0xB5B2], NFKD: [0x1104, 0x1165, 0x11B9] }, +{ source: [0xB5B3], NFC: [0xB5B3], NFD: [0x1104, 0x1165, 0x11BA], NFKC: [0xB5B3], NFKD: [0x1104, 0x1165, 0x11BA] }, +{ source: [0xB5B4], NFC: [0xB5B4], NFD: [0x1104, 0x1165, 0x11BB], NFKC: [0xB5B4], NFKD: [0x1104, 0x1165, 0x11BB] }, +{ source: [0xB5B5], NFC: [0xB5B5], NFD: [0x1104, 0x1165, 0x11BC], NFKC: [0xB5B5], NFKD: [0x1104, 0x1165, 0x11BC] }, +{ source: [0xB5B6], NFC: [0xB5B6], NFD: [0x1104, 0x1165, 0x11BD], NFKC: [0xB5B6], NFKD: [0x1104, 0x1165, 0x11BD] }, +{ source: [0xB5B7], NFC: [0xB5B7], NFD: [0x1104, 0x1165, 0x11BE], NFKC: [0xB5B7], NFKD: [0x1104, 0x1165, 0x11BE] }, +{ source: [0xB5B8], NFC: [0xB5B8], NFD: [0x1104, 0x1165, 0x11BF], NFKC: [0xB5B8], NFKD: [0x1104, 0x1165, 0x11BF] }, +{ source: [0xB5B9], NFC: [0xB5B9], NFD: [0x1104, 0x1165, 0x11C0], NFKC: [0xB5B9], NFKD: [0x1104, 0x1165, 0x11C0] }, +{ source: [0xB5BA], NFC: [0xB5BA], NFD: [0x1104, 0x1165, 0x11C1], NFKC: [0xB5BA], NFKD: [0x1104, 0x1165, 0x11C1] }, +{ source: [0xB5BB], NFC: [0xB5BB], NFD: [0x1104, 0x1165, 0x11C2], NFKC: [0xB5BB], NFKD: [0x1104, 0x1165, 0x11C2] }, +{ source: [0xB5BC], NFC: [0xB5BC], NFD: [0x1104, 0x1166], NFKC: [0xB5BC], NFKD: [0x1104, 0x1166] }, +{ source: [0xB5BD], NFC: [0xB5BD], NFD: [0x1104, 0x1166, 0x11A8], NFKC: [0xB5BD], NFKD: [0x1104, 0x1166, 0x11A8] }, +{ source: [0xB5BE], NFC: [0xB5BE], NFD: [0x1104, 0x1166, 0x11A9], NFKC: [0xB5BE], NFKD: [0x1104, 0x1166, 0x11A9] }, +{ source: [0xB5BF], NFC: [0xB5BF], NFD: [0x1104, 0x1166, 0x11AA], NFKC: [0xB5BF], NFKD: [0x1104, 0x1166, 0x11AA] }, +{ source: [0xB5C0], NFC: [0xB5C0], NFD: [0x1104, 0x1166, 0x11AB], NFKC: [0xB5C0], NFKD: [0x1104, 0x1166, 0x11AB] }, +{ source: [0xB5C1], NFC: [0xB5C1], NFD: [0x1104, 0x1166, 0x11AC], NFKC: [0xB5C1], NFKD: [0x1104, 0x1166, 0x11AC] }, +{ source: [0xB5C2], NFC: [0xB5C2], NFD: [0x1104, 0x1166, 0x11AD], NFKC: [0xB5C2], NFKD: [0x1104, 0x1166, 0x11AD] }, +{ source: [0xB5C3], NFC: [0xB5C3], NFD: [0x1104, 0x1166, 0x11AE], NFKC: [0xB5C3], NFKD: [0x1104, 0x1166, 0x11AE] }, +{ source: [0xB5C4], NFC: [0xB5C4], NFD: [0x1104, 0x1166, 0x11AF], NFKC: [0xB5C4], NFKD: [0x1104, 0x1166, 0x11AF] }, +{ source: [0xB5C5], NFC: [0xB5C5], NFD: [0x1104, 0x1166, 0x11B0], NFKC: [0xB5C5], NFKD: [0x1104, 0x1166, 0x11B0] }, +{ source: [0xB5C6], NFC: [0xB5C6], NFD: [0x1104, 0x1166, 0x11B1], NFKC: [0xB5C6], NFKD: [0x1104, 0x1166, 0x11B1] }, +{ source: [0xB5C7], NFC: [0xB5C7], NFD: [0x1104, 0x1166, 0x11B2], NFKC: [0xB5C7], NFKD: [0x1104, 0x1166, 0x11B2] }, +{ source: [0xB5C8], NFC: [0xB5C8], NFD: [0x1104, 0x1166, 0x11B3], NFKC: [0xB5C8], NFKD: [0x1104, 0x1166, 0x11B3] }, +{ source: [0xB5C9], NFC: [0xB5C9], NFD: [0x1104, 0x1166, 0x11B4], NFKC: [0xB5C9], NFKD: [0x1104, 0x1166, 0x11B4] }, +{ source: [0xB5CA], NFC: [0xB5CA], NFD: [0x1104, 0x1166, 0x11B5], NFKC: [0xB5CA], NFKD: [0x1104, 0x1166, 0x11B5] }, +{ source: [0xB5CB], NFC: [0xB5CB], NFD: [0x1104, 0x1166, 0x11B6], NFKC: [0xB5CB], NFKD: [0x1104, 0x1166, 0x11B6] }, +{ source: [0xB5CC], NFC: [0xB5CC], NFD: [0x1104, 0x1166, 0x11B7], NFKC: [0xB5CC], NFKD: [0x1104, 0x1166, 0x11B7] }, +{ source: [0xB5CD], NFC: [0xB5CD], NFD: [0x1104, 0x1166, 0x11B8], NFKC: [0xB5CD], NFKD: [0x1104, 0x1166, 0x11B8] }, +{ source: [0xB5CE], NFC: [0xB5CE], NFD: [0x1104, 0x1166, 0x11B9], NFKC: [0xB5CE], NFKD: [0x1104, 0x1166, 0x11B9] }, +{ source: [0xB5CF], NFC: [0xB5CF], NFD: [0x1104, 0x1166, 0x11BA], NFKC: [0xB5CF], NFKD: [0x1104, 0x1166, 0x11BA] }, +{ source: [0xB5D0], NFC: [0xB5D0], NFD: [0x1104, 0x1166, 0x11BB], NFKC: [0xB5D0], NFKD: [0x1104, 0x1166, 0x11BB] }, +{ source: [0xB5D1], NFC: [0xB5D1], NFD: [0x1104, 0x1166, 0x11BC], NFKC: [0xB5D1], NFKD: [0x1104, 0x1166, 0x11BC] }, +{ source: [0xB5D2], NFC: [0xB5D2], NFD: [0x1104, 0x1166, 0x11BD], NFKC: [0xB5D2], NFKD: [0x1104, 0x1166, 0x11BD] }, +{ source: [0xB5D3], NFC: [0xB5D3], NFD: [0x1104, 0x1166, 0x11BE], NFKC: [0xB5D3], NFKD: [0x1104, 0x1166, 0x11BE] }, +{ source: [0xB5D4], NFC: [0xB5D4], NFD: [0x1104, 0x1166, 0x11BF], NFKC: [0xB5D4], NFKD: [0x1104, 0x1166, 0x11BF] }, +{ source: [0xB5D5], NFC: [0xB5D5], NFD: [0x1104, 0x1166, 0x11C0], NFKC: [0xB5D5], NFKD: [0x1104, 0x1166, 0x11C0] }, +{ source: [0xB5D6], NFC: [0xB5D6], NFD: [0x1104, 0x1166, 0x11C1], NFKC: [0xB5D6], NFKD: [0x1104, 0x1166, 0x11C1] }, +{ source: [0xB5D7], NFC: [0xB5D7], NFD: [0x1104, 0x1166, 0x11C2], NFKC: [0xB5D7], NFKD: [0x1104, 0x1166, 0x11C2] }, +{ source: [0xB5D8], NFC: [0xB5D8], NFD: [0x1104, 0x1167], NFKC: [0xB5D8], NFKD: [0x1104, 0x1167] }, +{ source: [0xB5D9], NFC: [0xB5D9], NFD: [0x1104, 0x1167, 0x11A8], NFKC: [0xB5D9], NFKD: [0x1104, 0x1167, 0x11A8] }, +{ source: [0xB5DA], NFC: [0xB5DA], NFD: [0x1104, 0x1167, 0x11A9], NFKC: [0xB5DA], NFKD: [0x1104, 0x1167, 0x11A9] }, +{ source: [0xB5DB], NFC: [0xB5DB], NFD: [0x1104, 0x1167, 0x11AA], NFKC: [0xB5DB], NFKD: [0x1104, 0x1167, 0x11AA] }, +{ source: [0xB5DC], NFC: [0xB5DC], NFD: [0x1104, 0x1167, 0x11AB], NFKC: [0xB5DC], NFKD: [0x1104, 0x1167, 0x11AB] }, +{ source: [0xB5DD], NFC: [0xB5DD], NFD: [0x1104, 0x1167, 0x11AC], NFKC: [0xB5DD], NFKD: [0x1104, 0x1167, 0x11AC] }, +{ source: [0xB5DE], NFC: [0xB5DE], NFD: [0x1104, 0x1167, 0x11AD], NFKC: [0xB5DE], NFKD: [0x1104, 0x1167, 0x11AD] }, +{ source: [0xB5DF], NFC: [0xB5DF], NFD: [0x1104, 0x1167, 0x11AE], NFKC: [0xB5DF], NFKD: [0x1104, 0x1167, 0x11AE] }, +{ source: [0xB5E0], NFC: [0xB5E0], NFD: [0x1104, 0x1167, 0x11AF], NFKC: [0xB5E0], NFKD: [0x1104, 0x1167, 0x11AF] }, +{ source: [0xB5E1], NFC: [0xB5E1], NFD: [0x1104, 0x1167, 0x11B0], NFKC: [0xB5E1], NFKD: [0x1104, 0x1167, 0x11B0] }, +{ source: [0xB5E2], NFC: [0xB5E2], NFD: [0x1104, 0x1167, 0x11B1], NFKC: [0xB5E2], NFKD: [0x1104, 0x1167, 0x11B1] }, +{ source: [0xB5E3], NFC: [0xB5E3], NFD: [0x1104, 0x1167, 0x11B2], NFKC: [0xB5E3], NFKD: [0x1104, 0x1167, 0x11B2] }, +{ source: [0xB5E4], NFC: [0xB5E4], NFD: [0x1104, 0x1167, 0x11B3], NFKC: [0xB5E4], NFKD: [0x1104, 0x1167, 0x11B3] }, +{ source: [0xB5E5], NFC: [0xB5E5], NFD: [0x1104, 0x1167, 0x11B4], NFKC: [0xB5E5], NFKD: [0x1104, 0x1167, 0x11B4] }, +{ source: [0xB5E6], NFC: [0xB5E6], NFD: [0x1104, 0x1167, 0x11B5], NFKC: [0xB5E6], NFKD: [0x1104, 0x1167, 0x11B5] }, +{ source: [0xB5E7], NFC: [0xB5E7], NFD: [0x1104, 0x1167, 0x11B6], NFKC: [0xB5E7], NFKD: [0x1104, 0x1167, 0x11B6] }, +{ source: [0xB5E8], NFC: [0xB5E8], NFD: [0x1104, 0x1167, 0x11B7], NFKC: [0xB5E8], NFKD: [0x1104, 0x1167, 0x11B7] }, +{ source: [0xB5E9], NFC: [0xB5E9], NFD: [0x1104, 0x1167, 0x11B8], NFKC: [0xB5E9], NFKD: [0x1104, 0x1167, 0x11B8] }, +{ source: [0xB5EA], NFC: [0xB5EA], NFD: [0x1104, 0x1167, 0x11B9], NFKC: [0xB5EA], NFKD: [0x1104, 0x1167, 0x11B9] }, +{ source: [0xB5EB], NFC: [0xB5EB], NFD: [0x1104, 0x1167, 0x11BA], NFKC: [0xB5EB], NFKD: [0x1104, 0x1167, 0x11BA] }, +{ source: [0xB5EC], NFC: [0xB5EC], NFD: [0x1104, 0x1167, 0x11BB], NFKC: [0xB5EC], NFKD: [0x1104, 0x1167, 0x11BB] }, +{ source: [0xB5ED], NFC: [0xB5ED], NFD: [0x1104, 0x1167, 0x11BC], NFKC: [0xB5ED], NFKD: [0x1104, 0x1167, 0x11BC] }, +{ source: [0xB5EE], NFC: [0xB5EE], NFD: [0x1104, 0x1167, 0x11BD], NFKC: [0xB5EE], NFKD: [0x1104, 0x1167, 0x11BD] }, +{ source: [0xB5EF], NFC: [0xB5EF], NFD: [0x1104, 0x1167, 0x11BE], NFKC: [0xB5EF], NFKD: [0x1104, 0x1167, 0x11BE] }, +{ source: [0xB5F0], NFC: [0xB5F0], NFD: [0x1104, 0x1167, 0x11BF], NFKC: [0xB5F0], NFKD: [0x1104, 0x1167, 0x11BF] }, +{ source: [0xB5F1], NFC: [0xB5F1], NFD: [0x1104, 0x1167, 0x11C0], NFKC: [0xB5F1], NFKD: [0x1104, 0x1167, 0x11C0] }, +{ source: [0xB5F2], NFC: [0xB5F2], NFD: [0x1104, 0x1167, 0x11C1], NFKC: [0xB5F2], NFKD: [0x1104, 0x1167, 0x11C1] }, +{ source: [0xB5F3], NFC: [0xB5F3], NFD: [0x1104, 0x1167, 0x11C2], NFKC: [0xB5F3], NFKD: [0x1104, 0x1167, 0x11C2] }, +{ source: [0xB5F4], NFC: [0xB5F4], NFD: [0x1104, 0x1168], NFKC: [0xB5F4], NFKD: [0x1104, 0x1168] }, +{ source: [0xB5F5], NFC: [0xB5F5], NFD: [0x1104, 0x1168, 0x11A8], NFKC: [0xB5F5], NFKD: [0x1104, 0x1168, 0x11A8] }, +{ source: [0xB5F6], NFC: [0xB5F6], NFD: [0x1104, 0x1168, 0x11A9], NFKC: [0xB5F6], NFKD: [0x1104, 0x1168, 0x11A9] }, +{ source: [0xB5F7], NFC: [0xB5F7], NFD: [0x1104, 0x1168, 0x11AA], NFKC: [0xB5F7], NFKD: [0x1104, 0x1168, 0x11AA] }, +{ source: [0xB5F8], NFC: [0xB5F8], NFD: [0x1104, 0x1168, 0x11AB], NFKC: [0xB5F8], NFKD: [0x1104, 0x1168, 0x11AB] }, +{ source: [0xB5F9], NFC: [0xB5F9], NFD: [0x1104, 0x1168, 0x11AC], NFKC: [0xB5F9], NFKD: [0x1104, 0x1168, 0x11AC] }, +{ source: [0xB5FA], NFC: [0xB5FA], NFD: [0x1104, 0x1168, 0x11AD], NFKC: [0xB5FA], NFKD: [0x1104, 0x1168, 0x11AD] }, +{ source: [0xB5FB], NFC: [0xB5FB], NFD: [0x1104, 0x1168, 0x11AE], NFKC: [0xB5FB], NFKD: [0x1104, 0x1168, 0x11AE] }, +{ source: [0xB5FC], NFC: [0xB5FC], NFD: [0x1104, 0x1168, 0x11AF], NFKC: [0xB5FC], NFKD: [0x1104, 0x1168, 0x11AF] }, +{ source: [0xB5FD], NFC: [0xB5FD], NFD: [0x1104, 0x1168, 0x11B0], NFKC: [0xB5FD], NFKD: [0x1104, 0x1168, 0x11B0] }, +{ source: [0xB5FE], NFC: [0xB5FE], NFD: [0x1104, 0x1168, 0x11B1], NFKC: [0xB5FE], NFKD: [0x1104, 0x1168, 0x11B1] }, +{ source: [0xB5FF], NFC: [0xB5FF], NFD: [0x1104, 0x1168, 0x11B2], NFKC: [0xB5FF], NFKD: [0x1104, 0x1168, 0x11B2] }, +{ source: [0xB600], NFC: [0xB600], NFD: [0x1104, 0x1168, 0x11B3], NFKC: [0xB600], NFKD: [0x1104, 0x1168, 0x11B3] }, +{ source: [0xB601], NFC: [0xB601], NFD: [0x1104, 0x1168, 0x11B4], NFKC: [0xB601], NFKD: [0x1104, 0x1168, 0x11B4] }, +{ source: [0xB602], NFC: [0xB602], NFD: [0x1104, 0x1168, 0x11B5], NFKC: [0xB602], NFKD: [0x1104, 0x1168, 0x11B5] }, +{ source: [0xB603], NFC: [0xB603], NFD: [0x1104, 0x1168, 0x11B6], NFKC: [0xB603], NFKD: [0x1104, 0x1168, 0x11B6] }, +{ source: [0xB604], NFC: [0xB604], NFD: [0x1104, 0x1168, 0x11B7], NFKC: [0xB604], NFKD: [0x1104, 0x1168, 0x11B7] }, +{ source: [0xB605], NFC: [0xB605], NFD: [0x1104, 0x1168, 0x11B8], NFKC: [0xB605], NFKD: [0x1104, 0x1168, 0x11B8] }, +{ source: [0xB606], NFC: [0xB606], NFD: [0x1104, 0x1168, 0x11B9], NFKC: [0xB606], NFKD: [0x1104, 0x1168, 0x11B9] }, +{ source: [0xB607], NFC: [0xB607], NFD: [0x1104, 0x1168, 0x11BA], NFKC: [0xB607], NFKD: [0x1104, 0x1168, 0x11BA] }, +{ source: [0xB608], NFC: [0xB608], NFD: [0x1104, 0x1168, 0x11BB], NFKC: [0xB608], NFKD: [0x1104, 0x1168, 0x11BB] }, +{ source: [0xB609], NFC: [0xB609], NFD: [0x1104, 0x1168, 0x11BC], NFKC: [0xB609], NFKD: [0x1104, 0x1168, 0x11BC] }, +{ source: [0xB60A], NFC: [0xB60A], NFD: [0x1104, 0x1168, 0x11BD], NFKC: [0xB60A], NFKD: [0x1104, 0x1168, 0x11BD] }, +{ source: [0xB60B], NFC: [0xB60B], NFD: [0x1104, 0x1168, 0x11BE], NFKC: [0xB60B], NFKD: [0x1104, 0x1168, 0x11BE] }, +{ source: [0xB60C], NFC: [0xB60C], NFD: [0x1104, 0x1168, 0x11BF], NFKC: [0xB60C], NFKD: [0x1104, 0x1168, 0x11BF] }, +{ source: [0xB60D], NFC: [0xB60D], NFD: [0x1104, 0x1168, 0x11C0], NFKC: [0xB60D], NFKD: [0x1104, 0x1168, 0x11C0] }, +{ source: [0xB60E], NFC: [0xB60E], NFD: [0x1104, 0x1168, 0x11C1], NFKC: [0xB60E], NFKD: [0x1104, 0x1168, 0x11C1] }, +{ source: [0xB60F], NFC: [0xB60F], NFD: [0x1104, 0x1168, 0x11C2], NFKC: [0xB60F], NFKD: [0x1104, 0x1168, 0x11C2] }, +{ source: [0xB610], NFC: [0xB610], NFD: [0x1104, 0x1169], NFKC: [0xB610], NFKD: [0x1104, 0x1169] }, +{ source: [0xB611], NFC: [0xB611], NFD: [0x1104, 0x1169, 0x11A8], NFKC: [0xB611], NFKD: [0x1104, 0x1169, 0x11A8] }, +{ source: [0xB612], NFC: [0xB612], NFD: [0x1104, 0x1169, 0x11A9], NFKC: [0xB612], NFKD: [0x1104, 0x1169, 0x11A9] }, +{ source: [0xB613], NFC: [0xB613], NFD: [0x1104, 0x1169, 0x11AA], NFKC: [0xB613], NFKD: [0x1104, 0x1169, 0x11AA] }, +{ source: [0xB614], NFC: [0xB614], NFD: [0x1104, 0x1169, 0x11AB], NFKC: [0xB614], NFKD: [0x1104, 0x1169, 0x11AB] }, +{ source: [0xB615], NFC: [0xB615], NFD: [0x1104, 0x1169, 0x11AC], NFKC: [0xB615], NFKD: [0x1104, 0x1169, 0x11AC] }, +{ source: [0xB616], NFC: [0xB616], NFD: [0x1104, 0x1169, 0x11AD], NFKC: [0xB616], NFKD: [0x1104, 0x1169, 0x11AD] }, +{ source: [0xB617], NFC: [0xB617], NFD: [0x1104, 0x1169, 0x11AE], NFKC: [0xB617], NFKD: [0x1104, 0x1169, 0x11AE] }, +{ source: [0xB618], NFC: [0xB618], NFD: [0x1104, 0x1169, 0x11AF], NFKC: [0xB618], NFKD: [0x1104, 0x1169, 0x11AF] }, +{ source: [0xB619], NFC: [0xB619], NFD: [0x1104, 0x1169, 0x11B0], NFKC: [0xB619], NFKD: [0x1104, 0x1169, 0x11B0] }, +{ source: [0xB61A], NFC: [0xB61A], NFD: [0x1104, 0x1169, 0x11B1], NFKC: [0xB61A], NFKD: [0x1104, 0x1169, 0x11B1] }, +{ source: [0xB61B], NFC: [0xB61B], NFD: [0x1104, 0x1169, 0x11B2], NFKC: [0xB61B], NFKD: [0x1104, 0x1169, 0x11B2] }, +{ source: [0xB61C], NFC: [0xB61C], NFD: [0x1104, 0x1169, 0x11B3], NFKC: [0xB61C], NFKD: [0x1104, 0x1169, 0x11B3] }, +{ source: [0xB61D], NFC: [0xB61D], NFD: [0x1104, 0x1169, 0x11B4], NFKC: [0xB61D], NFKD: [0x1104, 0x1169, 0x11B4] }, +{ source: [0xB61E], NFC: [0xB61E], NFD: [0x1104, 0x1169, 0x11B5], NFKC: [0xB61E], NFKD: [0x1104, 0x1169, 0x11B5] }, +{ source: [0xB61F], NFC: [0xB61F], NFD: [0x1104, 0x1169, 0x11B6], NFKC: [0xB61F], NFKD: [0x1104, 0x1169, 0x11B6] }, +{ source: [0xB620], NFC: [0xB620], NFD: [0x1104, 0x1169, 0x11B7], NFKC: [0xB620], NFKD: [0x1104, 0x1169, 0x11B7] }, +{ source: [0xB621], NFC: [0xB621], NFD: [0x1104, 0x1169, 0x11B8], NFKC: [0xB621], NFKD: [0x1104, 0x1169, 0x11B8] }, +{ source: [0xB622], NFC: [0xB622], NFD: [0x1104, 0x1169, 0x11B9], NFKC: [0xB622], NFKD: [0x1104, 0x1169, 0x11B9] }, +{ source: [0xB623], NFC: [0xB623], NFD: [0x1104, 0x1169, 0x11BA], NFKC: [0xB623], NFKD: [0x1104, 0x1169, 0x11BA] }, +{ source: [0xB624], NFC: [0xB624], NFD: [0x1104, 0x1169, 0x11BB], NFKC: [0xB624], NFKD: [0x1104, 0x1169, 0x11BB] }, +{ source: [0xB625], NFC: [0xB625], NFD: [0x1104, 0x1169, 0x11BC], NFKC: [0xB625], NFKD: [0x1104, 0x1169, 0x11BC] }, +{ source: [0xB626], NFC: [0xB626], NFD: [0x1104, 0x1169, 0x11BD], NFKC: [0xB626], NFKD: [0x1104, 0x1169, 0x11BD] }, +{ source: [0xB627], NFC: [0xB627], NFD: [0x1104, 0x1169, 0x11BE], NFKC: [0xB627], NFKD: [0x1104, 0x1169, 0x11BE] }, +{ source: [0xB628], NFC: [0xB628], NFD: [0x1104, 0x1169, 0x11BF], NFKC: [0xB628], NFKD: [0x1104, 0x1169, 0x11BF] }, +{ source: [0xB629], NFC: [0xB629], NFD: [0x1104, 0x1169, 0x11C0], NFKC: [0xB629], NFKD: [0x1104, 0x1169, 0x11C0] }, +{ source: [0xB62A], NFC: [0xB62A], NFD: [0x1104, 0x1169, 0x11C1], NFKC: [0xB62A], NFKD: [0x1104, 0x1169, 0x11C1] }, +{ source: [0xB62B], NFC: [0xB62B], NFD: [0x1104, 0x1169, 0x11C2], NFKC: [0xB62B], NFKD: [0x1104, 0x1169, 0x11C2] }, +{ source: [0xB62C], NFC: [0xB62C], NFD: [0x1104, 0x116A], NFKC: [0xB62C], NFKD: [0x1104, 0x116A] }, +{ source: [0xB62D], NFC: [0xB62D], NFD: [0x1104, 0x116A, 0x11A8], NFKC: [0xB62D], NFKD: [0x1104, 0x116A, 0x11A8] }, +{ source: [0xB62E], NFC: [0xB62E], NFD: [0x1104, 0x116A, 0x11A9], NFKC: [0xB62E], NFKD: [0x1104, 0x116A, 0x11A9] }, +{ source: [0xB62F], NFC: [0xB62F], NFD: [0x1104, 0x116A, 0x11AA], NFKC: [0xB62F], NFKD: [0x1104, 0x116A, 0x11AA] }, +{ source: [0xB630], NFC: [0xB630], NFD: [0x1104, 0x116A, 0x11AB], NFKC: [0xB630], NFKD: [0x1104, 0x116A, 0x11AB] }, +{ source: [0xB631], NFC: [0xB631], NFD: [0x1104, 0x116A, 0x11AC], NFKC: [0xB631], NFKD: [0x1104, 0x116A, 0x11AC] }, +{ source: [0xB632], NFC: [0xB632], NFD: [0x1104, 0x116A, 0x11AD], NFKC: [0xB632], NFKD: [0x1104, 0x116A, 0x11AD] }, +{ source: [0xB633], NFC: [0xB633], NFD: [0x1104, 0x116A, 0x11AE], NFKC: [0xB633], NFKD: [0x1104, 0x116A, 0x11AE] }, +{ source: [0xB634], NFC: [0xB634], NFD: [0x1104, 0x116A, 0x11AF], NFKC: [0xB634], NFKD: [0x1104, 0x116A, 0x11AF] }, +{ source: [0xB635], NFC: [0xB635], NFD: [0x1104, 0x116A, 0x11B0], NFKC: [0xB635], NFKD: [0x1104, 0x116A, 0x11B0] }, +{ source: [0xB636], NFC: [0xB636], NFD: [0x1104, 0x116A, 0x11B1], NFKC: [0xB636], NFKD: [0x1104, 0x116A, 0x11B1] }, +{ source: [0xB637], NFC: [0xB637], NFD: [0x1104, 0x116A, 0x11B2], NFKC: [0xB637], NFKD: [0x1104, 0x116A, 0x11B2] }, +{ source: [0xB638], NFC: [0xB638], NFD: [0x1104, 0x116A, 0x11B3], NFKC: [0xB638], NFKD: [0x1104, 0x116A, 0x11B3] }, +{ source: [0xB639], NFC: [0xB639], NFD: [0x1104, 0x116A, 0x11B4], NFKC: [0xB639], NFKD: [0x1104, 0x116A, 0x11B4] }, +{ source: [0xB63A], NFC: [0xB63A], NFD: [0x1104, 0x116A, 0x11B5], NFKC: [0xB63A], NFKD: [0x1104, 0x116A, 0x11B5] }, +{ source: [0xB63B], NFC: [0xB63B], NFD: [0x1104, 0x116A, 0x11B6], NFKC: [0xB63B], NFKD: [0x1104, 0x116A, 0x11B6] }, +{ source: [0xB63C], NFC: [0xB63C], NFD: [0x1104, 0x116A, 0x11B7], NFKC: [0xB63C], NFKD: [0x1104, 0x116A, 0x11B7] }, +{ source: [0xB63D], NFC: [0xB63D], NFD: [0x1104, 0x116A, 0x11B8], NFKC: [0xB63D], NFKD: [0x1104, 0x116A, 0x11B8] }, +{ source: [0xB63E], NFC: [0xB63E], NFD: [0x1104, 0x116A, 0x11B9], NFKC: [0xB63E], NFKD: [0x1104, 0x116A, 0x11B9] }, +{ source: [0xB63F], NFC: [0xB63F], NFD: [0x1104, 0x116A, 0x11BA], NFKC: [0xB63F], NFKD: [0x1104, 0x116A, 0x11BA] }, +{ source: [0xB640], NFC: [0xB640], NFD: [0x1104, 0x116A, 0x11BB], NFKC: [0xB640], NFKD: [0x1104, 0x116A, 0x11BB] }, +{ source: [0xB641], NFC: [0xB641], NFD: [0x1104, 0x116A, 0x11BC], NFKC: [0xB641], NFKD: [0x1104, 0x116A, 0x11BC] }, +{ source: [0xB642], NFC: [0xB642], NFD: [0x1104, 0x116A, 0x11BD], NFKC: [0xB642], NFKD: [0x1104, 0x116A, 0x11BD] }, +{ source: [0xB643], NFC: [0xB643], NFD: [0x1104, 0x116A, 0x11BE], NFKC: [0xB643], NFKD: [0x1104, 0x116A, 0x11BE] }, +{ source: [0xB644], NFC: [0xB644], NFD: [0x1104, 0x116A, 0x11BF], NFKC: [0xB644], NFKD: [0x1104, 0x116A, 0x11BF] }, +{ source: [0xB645], NFC: [0xB645], NFD: [0x1104, 0x116A, 0x11C0], NFKC: [0xB645], NFKD: [0x1104, 0x116A, 0x11C0] }, +{ source: [0xB646], NFC: [0xB646], NFD: [0x1104, 0x116A, 0x11C1], NFKC: [0xB646], NFKD: [0x1104, 0x116A, 0x11C1] }, +{ source: [0xB647], NFC: [0xB647], NFD: [0x1104, 0x116A, 0x11C2], NFKC: [0xB647], NFKD: [0x1104, 0x116A, 0x11C2] }, +{ source: [0xB648], NFC: [0xB648], NFD: [0x1104, 0x116B], NFKC: [0xB648], NFKD: [0x1104, 0x116B] }, +{ source: [0xB649], NFC: [0xB649], NFD: [0x1104, 0x116B, 0x11A8], NFKC: [0xB649], NFKD: [0x1104, 0x116B, 0x11A8] }, +{ source: [0xB64A], NFC: [0xB64A], NFD: [0x1104, 0x116B, 0x11A9], NFKC: [0xB64A], NFKD: [0x1104, 0x116B, 0x11A9] }, +{ source: [0xB64B], NFC: [0xB64B], NFD: [0x1104, 0x116B, 0x11AA], NFKC: [0xB64B], NFKD: [0x1104, 0x116B, 0x11AA] }, +{ source: [0xB64C], NFC: [0xB64C], NFD: [0x1104, 0x116B, 0x11AB], NFKC: [0xB64C], NFKD: [0x1104, 0x116B, 0x11AB] }, +{ source: [0xB64D], NFC: [0xB64D], NFD: [0x1104, 0x116B, 0x11AC], NFKC: [0xB64D], NFKD: [0x1104, 0x116B, 0x11AC] }, +{ source: [0xB64E], NFC: [0xB64E], NFD: [0x1104, 0x116B, 0x11AD], NFKC: [0xB64E], NFKD: [0x1104, 0x116B, 0x11AD] }, +{ source: [0xB64F], NFC: [0xB64F], NFD: [0x1104, 0x116B, 0x11AE], NFKC: [0xB64F], NFKD: [0x1104, 0x116B, 0x11AE] }, +{ source: [0xB650], NFC: [0xB650], NFD: [0x1104, 0x116B, 0x11AF], NFKC: [0xB650], NFKD: [0x1104, 0x116B, 0x11AF] }, +{ source: [0xB651], NFC: [0xB651], NFD: [0x1104, 0x116B, 0x11B0], NFKC: [0xB651], NFKD: [0x1104, 0x116B, 0x11B0] }, +{ source: [0xB652], NFC: [0xB652], NFD: [0x1104, 0x116B, 0x11B1], NFKC: [0xB652], NFKD: [0x1104, 0x116B, 0x11B1] }, +{ source: [0xB653], NFC: [0xB653], NFD: [0x1104, 0x116B, 0x11B2], NFKC: [0xB653], NFKD: [0x1104, 0x116B, 0x11B2] }, +{ source: [0xB654], NFC: [0xB654], NFD: [0x1104, 0x116B, 0x11B3], NFKC: [0xB654], NFKD: [0x1104, 0x116B, 0x11B3] }, +{ source: [0xB655], NFC: [0xB655], NFD: [0x1104, 0x116B, 0x11B4], NFKC: [0xB655], NFKD: [0x1104, 0x116B, 0x11B4] }, +{ source: [0xB656], NFC: [0xB656], NFD: [0x1104, 0x116B, 0x11B5], NFKC: [0xB656], NFKD: [0x1104, 0x116B, 0x11B5] }, +{ source: [0xB657], NFC: [0xB657], NFD: [0x1104, 0x116B, 0x11B6], NFKC: [0xB657], NFKD: [0x1104, 0x116B, 0x11B6] }, +{ source: [0xB658], NFC: [0xB658], NFD: [0x1104, 0x116B, 0x11B7], NFKC: [0xB658], NFKD: [0x1104, 0x116B, 0x11B7] }, +{ source: [0xB659], NFC: [0xB659], NFD: [0x1104, 0x116B, 0x11B8], NFKC: [0xB659], NFKD: [0x1104, 0x116B, 0x11B8] }, +{ source: [0xB65A], NFC: [0xB65A], NFD: [0x1104, 0x116B, 0x11B9], NFKC: [0xB65A], NFKD: [0x1104, 0x116B, 0x11B9] }, +{ source: [0xB65B], NFC: [0xB65B], NFD: [0x1104, 0x116B, 0x11BA], NFKC: [0xB65B], NFKD: [0x1104, 0x116B, 0x11BA] }, +{ source: [0xB65C], NFC: [0xB65C], NFD: [0x1104, 0x116B, 0x11BB], NFKC: [0xB65C], NFKD: [0x1104, 0x116B, 0x11BB] }, +{ source: [0xB65D], NFC: [0xB65D], NFD: [0x1104, 0x116B, 0x11BC], NFKC: [0xB65D], NFKD: [0x1104, 0x116B, 0x11BC] }, +{ source: [0xB65E], NFC: [0xB65E], NFD: [0x1104, 0x116B, 0x11BD], NFKC: [0xB65E], NFKD: [0x1104, 0x116B, 0x11BD] }, +{ source: [0xB65F], NFC: [0xB65F], NFD: [0x1104, 0x116B, 0x11BE], NFKC: [0xB65F], NFKD: [0x1104, 0x116B, 0x11BE] }, +{ source: [0xB660], NFC: [0xB660], NFD: [0x1104, 0x116B, 0x11BF], NFKC: [0xB660], NFKD: [0x1104, 0x116B, 0x11BF] }, +{ source: [0xB661], NFC: [0xB661], NFD: [0x1104, 0x116B, 0x11C0], NFKC: [0xB661], NFKD: [0x1104, 0x116B, 0x11C0] }, +{ source: [0xB662], NFC: [0xB662], NFD: [0x1104, 0x116B, 0x11C1], NFKC: [0xB662], NFKD: [0x1104, 0x116B, 0x11C1] }, +{ source: [0xB663], NFC: [0xB663], NFD: [0x1104, 0x116B, 0x11C2], NFKC: [0xB663], NFKD: [0x1104, 0x116B, 0x11C2] }, +{ source: [0xB664], NFC: [0xB664], NFD: [0x1104, 0x116C], NFKC: [0xB664], NFKD: [0x1104, 0x116C] }, +{ source: [0xB665], NFC: [0xB665], NFD: [0x1104, 0x116C, 0x11A8], NFKC: [0xB665], NFKD: [0x1104, 0x116C, 0x11A8] }, +{ source: [0xB666], NFC: [0xB666], NFD: [0x1104, 0x116C, 0x11A9], NFKC: [0xB666], NFKD: [0x1104, 0x116C, 0x11A9] }, +{ source: [0xB667], NFC: [0xB667], NFD: [0x1104, 0x116C, 0x11AA], NFKC: [0xB667], NFKD: [0x1104, 0x116C, 0x11AA] }, +{ source: [0xB668], NFC: [0xB668], NFD: [0x1104, 0x116C, 0x11AB], NFKC: [0xB668], NFKD: [0x1104, 0x116C, 0x11AB] }, +{ source: [0xB669], NFC: [0xB669], NFD: [0x1104, 0x116C, 0x11AC], NFKC: [0xB669], NFKD: [0x1104, 0x116C, 0x11AC] }, +{ source: [0xB66A], NFC: [0xB66A], NFD: [0x1104, 0x116C, 0x11AD], NFKC: [0xB66A], NFKD: [0x1104, 0x116C, 0x11AD] }, +{ source: [0xB66B], NFC: [0xB66B], NFD: [0x1104, 0x116C, 0x11AE], NFKC: [0xB66B], NFKD: [0x1104, 0x116C, 0x11AE] }, +{ source: [0xB66C], NFC: [0xB66C], NFD: [0x1104, 0x116C, 0x11AF], NFKC: [0xB66C], NFKD: [0x1104, 0x116C, 0x11AF] }, +{ source: [0xB66D], NFC: [0xB66D], NFD: [0x1104, 0x116C, 0x11B0], NFKC: [0xB66D], NFKD: [0x1104, 0x116C, 0x11B0] }, +{ source: [0xB66E], NFC: [0xB66E], NFD: [0x1104, 0x116C, 0x11B1], NFKC: [0xB66E], NFKD: [0x1104, 0x116C, 0x11B1] }, +{ source: [0xB66F], NFC: [0xB66F], NFD: [0x1104, 0x116C, 0x11B2], NFKC: [0xB66F], NFKD: [0x1104, 0x116C, 0x11B2] }, +{ source: [0xB670], NFC: [0xB670], NFD: [0x1104, 0x116C, 0x11B3], NFKC: [0xB670], NFKD: [0x1104, 0x116C, 0x11B3] }, +{ source: [0xB671], NFC: [0xB671], NFD: [0x1104, 0x116C, 0x11B4], NFKC: [0xB671], NFKD: [0x1104, 0x116C, 0x11B4] }, +{ source: [0xB672], NFC: [0xB672], NFD: [0x1104, 0x116C, 0x11B5], NFKC: [0xB672], NFKD: [0x1104, 0x116C, 0x11B5] }, +{ source: [0xB673], NFC: [0xB673], NFD: [0x1104, 0x116C, 0x11B6], NFKC: [0xB673], NFKD: [0x1104, 0x116C, 0x11B6] }, +{ source: [0xB674], NFC: [0xB674], NFD: [0x1104, 0x116C, 0x11B7], NFKC: [0xB674], NFKD: [0x1104, 0x116C, 0x11B7] }, +{ source: [0xB675], NFC: [0xB675], NFD: [0x1104, 0x116C, 0x11B8], NFKC: [0xB675], NFKD: [0x1104, 0x116C, 0x11B8] }, +{ source: [0xB676], NFC: [0xB676], NFD: [0x1104, 0x116C, 0x11B9], NFKC: [0xB676], NFKD: [0x1104, 0x116C, 0x11B9] }, +{ source: [0xB677], NFC: [0xB677], NFD: [0x1104, 0x116C, 0x11BA], NFKC: [0xB677], NFKD: [0x1104, 0x116C, 0x11BA] }, +{ source: [0xB678], NFC: [0xB678], NFD: [0x1104, 0x116C, 0x11BB], NFKC: [0xB678], NFKD: [0x1104, 0x116C, 0x11BB] }, +{ source: [0xB679], NFC: [0xB679], NFD: [0x1104, 0x116C, 0x11BC], NFKC: [0xB679], NFKD: [0x1104, 0x116C, 0x11BC] }, +{ source: [0xB67A], NFC: [0xB67A], NFD: [0x1104, 0x116C, 0x11BD], NFKC: [0xB67A], NFKD: [0x1104, 0x116C, 0x11BD] }, +{ source: [0xB67B], NFC: [0xB67B], NFD: [0x1104, 0x116C, 0x11BE], NFKC: [0xB67B], NFKD: [0x1104, 0x116C, 0x11BE] }, +{ source: [0xB67C], NFC: [0xB67C], NFD: [0x1104, 0x116C, 0x11BF], NFKC: [0xB67C], NFKD: [0x1104, 0x116C, 0x11BF] }, +{ source: [0xB67D], NFC: [0xB67D], NFD: [0x1104, 0x116C, 0x11C0], NFKC: [0xB67D], NFKD: [0x1104, 0x116C, 0x11C0] }, +{ source: [0xB67E], NFC: [0xB67E], NFD: [0x1104, 0x116C, 0x11C1], NFKC: [0xB67E], NFKD: [0x1104, 0x116C, 0x11C1] }, +{ source: [0xB67F], NFC: [0xB67F], NFD: [0x1104, 0x116C, 0x11C2], NFKC: [0xB67F], NFKD: [0x1104, 0x116C, 0x11C2] }, +{ source: [0xB680], NFC: [0xB680], NFD: [0x1104, 0x116D], NFKC: [0xB680], NFKD: [0x1104, 0x116D] }, +{ source: [0xB681], NFC: [0xB681], NFD: [0x1104, 0x116D, 0x11A8], NFKC: [0xB681], NFKD: [0x1104, 0x116D, 0x11A8] }, +{ source: [0xB682], NFC: [0xB682], NFD: [0x1104, 0x116D, 0x11A9], NFKC: [0xB682], NFKD: [0x1104, 0x116D, 0x11A9] }, +{ source: [0xB683], NFC: [0xB683], NFD: [0x1104, 0x116D, 0x11AA], NFKC: [0xB683], NFKD: [0x1104, 0x116D, 0x11AA] }, +{ source: [0xB684], NFC: [0xB684], NFD: [0x1104, 0x116D, 0x11AB], NFKC: [0xB684], NFKD: [0x1104, 0x116D, 0x11AB] }, +{ source: [0xB685], NFC: [0xB685], NFD: [0x1104, 0x116D, 0x11AC], NFKC: [0xB685], NFKD: [0x1104, 0x116D, 0x11AC] }, +{ source: [0xB686], NFC: [0xB686], NFD: [0x1104, 0x116D, 0x11AD], NFKC: [0xB686], NFKD: [0x1104, 0x116D, 0x11AD] }, +{ source: [0xB687], NFC: [0xB687], NFD: [0x1104, 0x116D, 0x11AE], NFKC: [0xB687], NFKD: [0x1104, 0x116D, 0x11AE] }, +{ source: [0xB688], NFC: [0xB688], NFD: [0x1104, 0x116D, 0x11AF], NFKC: [0xB688], NFKD: [0x1104, 0x116D, 0x11AF] }, +{ source: [0xB689], NFC: [0xB689], NFD: [0x1104, 0x116D, 0x11B0], NFKC: [0xB689], NFKD: [0x1104, 0x116D, 0x11B0] }, +{ source: [0xB68A], NFC: [0xB68A], NFD: [0x1104, 0x116D, 0x11B1], NFKC: [0xB68A], NFKD: [0x1104, 0x116D, 0x11B1] }, +{ source: [0xB68B], NFC: [0xB68B], NFD: [0x1104, 0x116D, 0x11B2], NFKC: [0xB68B], NFKD: [0x1104, 0x116D, 0x11B2] }, +{ source: [0xB68C], NFC: [0xB68C], NFD: [0x1104, 0x116D, 0x11B3], NFKC: [0xB68C], NFKD: [0x1104, 0x116D, 0x11B3] }, +{ source: [0xB68D], NFC: [0xB68D], NFD: [0x1104, 0x116D, 0x11B4], NFKC: [0xB68D], NFKD: [0x1104, 0x116D, 0x11B4] }, +{ source: [0xB68E], NFC: [0xB68E], NFD: [0x1104, 0x116D, 0x11B5], NFKC: [0xB68E], NFKD: [0x1104, 0x116D, 0x11B5] }, +{ source: [0xB68F], NFC: [0xB68F], NFD: [0x1104, 0x116D, 0x11B6], NFKC: [0xB68F], NFKD: [0x1104, 0x116D, 0x11B6] }, +{ source: [0xB690], NFC: [0xB690], NFD: [0x1104, 0x116D, 0x11B7], NFKC: [0xB690], NFKD: [0x1104, 0x116D, 0x11B7] }, +{ source: [0xB691], NFC: [0xB691], NFD: [0x1104, 0x116D, 0x11B8], NFKC: [0xB691], NFKD: [0x1104, 0x116D, 0x11B8] }, +{ source: [0xB692], NFC: [0xB692], NFD: [0x1104, 0x116D, 0x11B9], NFKC: [0xB692], NFKD: [0x1104, 0x116D, 0x11B9] }, +{ source: [0xB693], NFC: [0xB693], NFD: [0x1104, 0x116D, 0x11BA], NFKC: [0xB693], NFKD: [0x1104, 0x116D, 0x11BA] }, +{ source: [0xB694], NFC: [0xB694], NFD: [0x1104, 0x116D, 0x11BB], NFKC: [0xB694], NFKD: [0x1104, 0x116D, 0x11BB] }, +{ source: [0xB695], NFC: [0xB695], NFD: [0x1104, 0x116D, 0x11BC], NFKC: [0xB695], NFKD: [0x1104, 0x116D, 0x11BC] }, +{ source: [0xB696], NFC: [0xB696], NFD: [0x1104, 0x116D, 0x11BD], NFKC: [0xB696], NFKD: [0x1104, 0x116D, 0x11BD] }, +{ source: [0xB697], NFC: [0xB697], NFD: [0x1104, 0x116D, 0x11BE], NFKC: [0xB697], NFKD: [0x1104, 0x116D, 0x11BE] }, +{ source: [0xB698], NFC: [0xB698], NFD: [0x1104, 0x116D, 0x11BF], NFKC: [0xB698], NFKD: [0x1104, 0x116D, 0x11BF] }, +{ source: [0xB699], NFC: [0xB699], NFD: [0x1104, 0x116D, 0x11C0], NFKC: [0xB699], NFKD: [0x1104, 0x116D, 0x11C0] }, +{ source: [0xB69A], NFC: [0xB69A], NFD: [0x1104, 0x116D, 0x11C1], NFKC: [0xB69A], NFKD: [0x1104, 0x116D, 0x11C1] }, +{ source: [0xB69B], NFC: [0xB69B], NFD: [0x1104, 0x116D, 0x11C2], NFKC: [0xB69B], NFKD: [0x1104, 0x116D, 0x11C2] }, +{ source: [0xB69C], NFC: [0xB69C], NFD: [0x1104, 0x116E], NFKC: [0xB69C], NFKD: [0x1104, 0x116E] }, +{ source: [0xB69D], NFC: [0xB69D], NFD: [0x1104, 0x116E, 0x11A8], NFKC: [0xB69D], NFKD: [0x1104, 0x116E, 0x11A8] }, +{ source: [0xB69E], NFC: [0xB69E], NFD: [0x1104, 0x116E, 0x11A9], NFKC: [0xB69E], NFKD: [0x1104, 0x116E, 0x11A9] }, +{ source: [0xB69F], NFC: [0xB69F], NFD: [0x1104, 0x116E, 0x11AA], NFKC: [0xB69F], NFKD: [0x1104, 0x116E, 0x11AA] }, +{ source: [0xB6A0], NFC: [0xB6A0], NFD: [0x1104, 0x116E, 0x11AB], NFKC: [0xB6A0], NFKD: [0x1104, 0x116E, 0x11AB] }, +{ source: [0xB6A1], NFC: [0xB6A1], NFD: [0x1104, 0x116E, 0x11AC], NFKC: [0xB6A1], NFKD: [0x1104, 0x116E, 0x11AC] }, +{ source: [0xB6A2], NFC: [0xB6A2], NFD: [0x1104, 0x116E, 0x11AD], NFKC: [0xB6A2], NFKD: [0x1104, 0x116E, 0x11AD] }, +{ source: [0xB6A3], NFC: [0xB6A3], NFD: [0x1104, 0x116E, 0x11AE], NFKC: [0xB6A3], NFKD: [0x1104, 0x116E, 0x11AE] }, +{ source: [0xB6A4], NFC: [0xB6A4], NFD: [0x1104, 0x116E, 0x11AF], NFKC: [0xB6A4], NFKD: [0x1104, 0x116E, 0x11AF] }, +{ source: [0xB6A5], NFC: [0xB6A5], NFD: [0x1104, 0x116E, 0x11B0], NFKC: [0xB6A5], NFKD: [0x1104, 0x116E, 0x11B0] }, +{ source: [0xB6A6], NFC: [0xB6A6], NFD: [0x1104, 0x116E, 0x11B1], NFKC: [0xB6A6], NFKD: [0x1104, 0x116E, 0x11B1] }, +{ source: [0xB6A7], NFC: [0xB6A7], NFD: [0x1104, 0x116E, 0x11B2], NFKC: [0xB6A7], NFKD: [0x1104, 0x116E, 0x11B2] }, +{ source: [0xB6A8], NFC: [0xB6A8], NFD: [0x1104, 0x116E, 0x11B3], NFKC: [0xB6A8], NFKD: [0x1104, 0x116E, 0x11B3] }, +{ source: [0xB6A9], NFC: [0xB6A9], NFD: [0x1104, 0x116E, 0x11B4], NFKC: [0xB6A9], NFKD: [0x1104, 0x116E, 0x11B4] }, +{ source: [0xB6AA], NFC: [0xB6AA], NFD: [0x1104, 0x116E, 0x11B5], NFKC: [0xB6AA], NFKD: [0x1104, 0x116E, 0x11B5] }, +{ source: [0xB6AB], NFC: [0xB6AB], NFD: [0x1104, 0x116E, 0x11B6], NFKC: [0xB6AB], NFKD: [0x1104, 0x116E, 0x11B6] }, +{ source: [0xB6AC], NFC: [0xB6AC], NFD: [0x1104, 0x116E, 0x11B7], NFKC: [0xB6AC], NFKD: [0x1104, 0x116E, 0x11B7] }, +{ source: [0xB6AD], NFC: [0xB6AD], NFD: [0x1104, 0x116E, 0x11B8], NFKC: [0xB6AD], NFKD: [0x1104, 0x116E, 0x11B8] }, +{ source: [0xB6AE], NFC: [0xB6AE], NFD: [0x1104, 0x116E, 0x11B9], NFKC: [0xB6AE], NFKD: [0x1104, 0x116E, 0x11B9] }, +{ source: [0xB6AF], NFC: [0xB6AF], NFD: [0x1104, 0x116E, 0x11BA], NFKC: [0xB6AF], NFKD: [0x1104, 0x116E, 0x11BA] }, +{ source: [0xB6B0], NFC: [0xB6B0], NFD: [0x1104, 0x116E, 0x11BB], NFKC: [0xB6B0], NFKD: [0x1104, 0x116E, 0x11BB] }, +{ source: [0xB6B1], NFC: [0xB6B1], NFD: [0x1104, 0x116E, 0x11BC], NFKC: [0xB6B1], NFKD: [0x1104, 0x116E, 0x11BC] }, +{ source: [0xB6B2], NFC: [0xB6B2], NFD: [0x1104, 0x116E, 0x11BD], NFKC: [0xB6B2], NFKD: [0x1104, 0x116E, 0x11BD] }, +{ source: [0xB6B3], NFC: [0xB6B3], NFD: [0x1104, 0x116E, 0x11BE], NFKC: [0xB6B3], NFKD: [0x1104, 0x116E, 0x11BE] }, +{ source: [0xB6B4], NFC: [0xB6B4], NFD: [0x1104, 0x116E, 0x11BF], NFKC: [0xB6B4], NFKD: [0x1104, 0x116E, 0x11BF] }, +{ source: [0xB6B5], NFC: [0xB6B5], NFD: [0x1104, 0x116E, 0x11C0], NFKC: [0xB6B5], NFKD: [0x1104, 0x116E, 0x11C0] }, +{ source: [0xB6B6], NFC: [0xB6B6], NFD: [0x1104, 0x116E, 0x11C1], NFKC: [0xB6B6], NFKD: [0x1104, 0x116E, 0x11C1] }, +{ source: [0xB6B7], NFC: [0xB6B7], NFD: [0x1104, 0x116E, 0x11C2], NFKC: [0xB6B7], NFKD: [0x1104, 0x116E, 0x11C2] }, +{ source: [0xB6B8], NFC: [0xB6B8], NFD: [0x1104, 0x116F], NFKC: [0xB6B8], NFKD: [0x1104, 0x116F] }, +{ source: [0xB6B9], NFC: [0xB6B9], NFD: [0x1104, 0x116F, 0x11A8], NFKC: [0xB6B9], NFKD: [0x1104, 0x116F, 0x11A8] }, +{ source: [0xB6BA], NFC: [0xB6BA], NFD: [0x1104, 0x116F, 0x11A9], NFKC: [0xB6BA], NFKD: [0x1104, 0x116F, 0x11A9] }, +{ source: [0xB6BB], NFC: [0xB6BB], NFD: [0x1104, 0x116F, 0x11AA], NFKC: [0xB6BB], NFKD: [0x1104, 0x116F, 0x11AA] }, +{ source: [0xB6BC], NFC: [0xB6BC], NFD: [0x1104, 0x116F, 0x11AB], NFKC: [0xB6BC], NFKD: [0x1104, 0x116F, 0x11AB] }, +{ source: [0xB6BD], NFC: [0xB6BD], NFD: [0x1104, 0x116F, 0x11AC], NFKC: [0xB6BD], NFKD: [0x1104, 0x116F, 0x11AC] }, +{ source: [0xB6BE], NFC: [0xB6BE], NFD: [0x1104, 0x116F, 0x11AD], NFKC: [0xB6BE], NFKD: [0x1104, 0x116F, 0x11AD] }, +{ source: [0xB6BF], NFC: [0xB6BF], NFD: [0x1104, 0x116F, 0x11AE], NFKC: [0xB6BF], NFKD: [0x1104, 0x116F, 0x11AE] }, +{ source: [0xB6C0], NFC: [0xB6C0], NFD: [0x1104, 0x116F, 0x11AF], NFKC: [0xB6C0], NFKD: [0x1104, 0x116F, 0x11AF] }, +{ source: [0xB6C1], NFC: [0xB6C1], NFD: [0x1104, 0x116F, 0x11B0], NFKC: [0xB6C1], NFKD: [0x1104, 0x116F, 0x11B0] }, +{ source: [0xB6C2], NFC: [0xB6C2], NFD: [0x1104, 0x116F, 0x11B1], NFKC: [0xB6C2], NFKD: [0x1104, 0x116F, 0x11B1] }, +{ source: [0xB6C3], NFC: [0xB6C3], NFD: [0x1104, 0x116F, 0x11B2], NFKC: [0xB6C3], NFKD: [0x1104, 0x116F, 0x11B2] }, +{ source: [0xB6C4], NFC: [0xB6C4], NFD: [0x1104, 0x116F, 0x11B3], NFKC: [0xB6C4], NFKD: [0x1104, 0x116F, 0x11B3] }, +{ source: [0xB6C5], NFC: [0xB6C5], NFD: [0x1104, 0x116F, 0x11B4], NFKC: [0xB6C5], NFKD: [0x1104, 0x116F, 0x11B4] }, +{ source: [0xB6C6], NFC: [0xB6C6], NFD: [0x1104, 0x116F, 0x11B5], NFKC: [0xB6C6], NFKD: [0x1104, 0x116F, 0x11B5] }, +{ source: [0xB6C7], NFC: [0xB6C7], NFD: [0x1104, 0x116F, 0x11B6], NFKC: [0xB6C7], NFKD: [0x1104, 0x116F, 0x11B6] }, +{ source: [0xB6C8], NFC: [0xB6C8], NFD: [0x1104, 0x116F, 0x11B7], NFKC: [0xB6C8], NFKD: [0x1104, 0x116F, 0x11B7] }, +{ source: [0xB6C9], NFC: [0xB6C9], NFD: [0x1104, 0x116F, 0x11B8], NFKC: [0xB6C9], NFKD: [0x1104, 0x116F, 0x11B8] }, +{ source: [0xB6CA], NFC: [0xB6CA], NFD: [0x1104, 0x116F, 0x11B9], NFKC: [0xB6CA], NFKD: [0x1104, 0x116F, 0x11B9] }, +{ source: [0xB6CB], NFC: [0xB6CB], NFD: [0x1104, 0x116F, 0x11BA], NFKC: [0xB6CB], NFKD: [0x1104, 0x116F, 0x11BA] }, +{ source: [0xB6CC], NFC: [0xB6CC], NFD: [0x1104, 0x116F, 0x11BB], NFKC: [0xB6CC], NFKD: [0x1104, 0x116F, 0x11BB] }, +{ source: [0xB6CD], NFC: [0xB6CD], NFD: [0x1104, 0x116F, 0x11BC], NFKC: [0xB6CD], NFKD: [0x1104, 0x116F, 0x11BC] }, +{ source: [0xB6CE], NFC: [0xB6CE], NFD: [0x1104, 0x116F, 0x11BD], NFKC: [0xB6CE], NFKD: [0x1104, 0x116F, 0x11BD] }, +{ source: [0xB6CF], NFC: [0xB6CF], NFD: [0x1104, 0x116F, 0x11BE], NFKC: [0xB6CF], NFKD: [0x1104, 0x116F, 0x11BE] }, +{ source: [0xB6D0], NFC: [0xB6D0], NFD: [0x1104, 0x116F, 0x11BF], NFKC: [0xB6D0], NFKD: [0x1104, 0x116F, 0x11BF] }, +{ source: [0xB6D1], NFC: [0xB6D1], NFD: [0x1104, 0x116F, 0x11C0], NFKC: [0xB6D1], NFKD: [0x1104, 0x116F, 0x11C0] }, +{ source: [0xB6D2], NFC: [0xB6D2], NFD: [0x1104, 0x116F, 0x11C1], NFKC: [0xB6D2], NFKD: [0x1104, 0x116F, 0x11C1] }, +{ source: [0xB6D3], NFC: [0xB6D3], NFD: [0x1104, 0x116F, 0x11C2], NFKC: [0xB6D3], NFKD: [0x1104, 0x116F, 0x11C2] }, +{ source: [0xB6D4], NFC: [0xB6D4], NFD: [0x1104, 0x1170], NFKC: [0xB6D4], NFKD: [0x1104, 0x1170] }, +{ source: [0xB6D5], NFC: [0xB6D5], NFD: [0x1104, 0x1170, 0x11A8], NFKC: [0xB6D5], NFKD: [0x1104, 0x1170, 0x11A8] }, +{ source: [0xB6D6], NFC: [0xB6D6], NFD: [0x1104, 0x1170, 0x11A9], NFKC: [0xB6D6], NFKD: [0x1104, 0x1170, 0x11A9] }, +{ source: [0xB6D7], NFC: [0xB6D7], NFD: [0x1104, 0x1170, 0x11AA], NFKC: [0xB6D7], NFKD: [0x1104, 0x1170, 0x11AA] }, +{ source: [0xB6D8], NFC: [0xB6D8], NFD: [0x1104, 0x1170, 0x11AB], NFKC: [0xB6D8], NFKD: [0x1104, 0x1170, 0x11AB] }, +{ source: [0xB6D9], NFC: [0xB6D9], NFD: [0x1104, 0x1170, 0x11AC], NFKC: [0xB6D9], NFKD: [0x1104, 0x1170, 0x11AC] }, +{ source: [0xB6DA], NFC: [0xB6DA], NFD: [0x1104, 0x1170, 0x11AD], NFKC: [0xB6DA], NFKD: [0x1104, 0x1170, 0x11AD] }, +{ source: [0xB6DB], NFC: [0xB6DB], NFD: [0x1104, 0x1170, 0x11AE], NFKC: [0xB6DB], NFKD: [0x1104, 0x1170, 0x11AE] }, +{ source: [0xB6DC], NFC: [0xB6DC], NFD: [0x1104, 0x1170, 0x11AF], NFKC: [0xB6DC], NFKD: [0x1104, 0x1170, 0x11AF] }, +{ source: [0xB6DD], NFC: [0xB6DD], NFD: [0x1104, 0x1170, 0x11B0], NFKC: [0xB6DD], NFKD: [0x1104, 0x1170, 0x11B0] }, +{ source: [0xB6DE], NFC: [0xB6DE], NFD: [0x1104, 0x1170, 0x11B1], NFKC: [0xB6DE], NFKD: [0x1104, 0x1170, 0x11B1] }, +{ source: [0xB6DF], NFC: [0xB6DF], NFD: [0x1104, 0x1170, 0x11B2], NFKC: [0xB6DF], NFKD: [0x1104, 0x1170, 0x11B2] }, +{ source: [0xB6E0], NFC: [0xB6E0], NFD: [0x1104, 0x1170, 0x11B3], NFKC: [0xB6E0], NFKD: [0x1104, 0x1170, 0x11B3] }, +{ source: [0xB6E1], NFC: [0xB6E1], NFD: [0x1104, 0x1170, 0x11B4], NFKC: [0xB6E1], NFKD: [0x1104, 0x1170, 0x11B4] }, +{ source: [0xB6E2], NFC: [0xB6E2], NFD: [0x1104, 0x1170, 0x11B5], NFKC: [0xB6E2], NFKD: [0x1104, 0x1170, 0x11B5] }, +{ source: [0xB6E3], NFC: [0xB6E3], NFD: [0x1104, 0x1170, 0x11B6], NFKC: [0xB6E3], NFKD: [0x1104, 0x1170, 0x11B6] }, +{ source: [0xB6E4], NFC: [0xB6E4], NFD: [0x1104, 0x1170, 0x11B7], NFKC: [0xB6E4], NFKD: [0x1104, 0x1170, 0x11B7] }, +{ source: [0xB6E5], NFC: [0xB6E5], NFD: [0x1104, 0x1170, 0x11B8], NFKC: [0xB6E5], NFKD: [0x1104, 0x1170, 0x11B8] }, +{ source: [0xB6E6], NFC: [0xB6E6], NFD: [0x1104, 0x1170, 0x11B9], NFKC: [0xB6E6], NFKD: [0x1104, 0x1170, 0x11B9] }, +{ source: [0xB6E7], NFC: [0xB6E7], NFD: [0x1104, 0x1170, 0x11BA], NFKC: [0xB6E7], NFKD: [0x1104, 0x1170, 0x11BA] }, +{ source: [0xB6E8], NFC: [0xB6E8], NFD: [0x1104, 0x1170, 0x11BB], NFKC: [0xB6E8], NFKD: [0x1104, 0x1170, 0x11BB] }, +{ source: [0xB6E9], NFC: [0xB6E9], NFD: [0x1104, 0x1170, 0x11BC], NFKC: [0xB6E9], NFKD: [0x1104, 0x1170, 0x11BC] }, +{ source: [0xB6EA], NFC: [0xB6EA], NFD: [0x1104, 0x1170, 0x11BD], NFKC: [0xB6EA], NFKD: [0x1104, 0x1170, 0x11BD] }, +{ source: [0xB6EB], NFC: [0xB6EB], NFD: [0x1104, 0x1170, 0x11BE], NFKC: [0xB6EB], NFKD: [0x1104, 0x1170, 0x11BE] }, +{ source: [0xB6EC], NFC: [0xB6EC], NFD: [0x1104, 0x1170, 0x11BF], NFKC: [0xB6EC], NFKD: [0x1104, 0x1170, 0x11BF] }, +{ source: [0xB6ED], NFC: [0xB6ED], NFD: [0x1104, 0x1170, 0x11C0], NFKC: [0xB6ED], NFKD: [0x1104, 0x1170, 0x11C0] }, +{ source: [0xB6EE], NFC: [0xB6EE], NFD: [0x1104, 0x1170, 0x11C1], NFKC: [0xB6EE], NFKD: [0x1104, 0x1170, 0x11C1] }, +{ source: [0xB6EF], NFC: [0xB6EF], NFD: [0x1104, 0x1170, 0x11C2], NFKC: [0xB6EF], NFKD: [0x1104, 0x1170, 0x11C2] }, +{ source: [0xB6F0], NFC: [0xB6F0], NFD: [0x1104, 0x1171], NFKC: [0xB6F0], NFKD: [0x1104, 0x1171] }, +{ source: [0xB6F1], NFC: [0xB6F1], NFD: [0x1104, 0x1171, 0x11A8], NFKC: [0xB6F1], NFKD: [0x1104, 0x1171, 0x11A8] }, +{ source: [0xB6F2], NFC: [0xB6F2], NFD: [0x1104, 0x1171, 0x11A9], NFKC: [0xB6F2], NFKD: [0x1104, 0x1171, 0x11A9] }, +{ source: [0xB6F3], NFC: [0xB6F3], NFD: [0x1104, 0x1171, 0x11AA], NFKC: [0xB6F3], NFKD: [0x1104, 0x1171, 0x11AA] }, +{ source: [0xB6F4], NFC: [0xB6F4], NFD: [0x1104, 0x1171, 0x11AB], NFKC: [0xB6F4], NFKD: [0x1104, 0x1171, 0x11AB] }, +{ source: [0xB6F5], NFC: [0xB6F5], NFD: [0x1104, 0x1171, 0x11AC], NFKC: [0xB6F5], NFKD: [0x1104, 0x1171, 0x11AC] }, +{ source: [0xB6F6], NFC: [0xB6F6], NFD: [0x1104, 0x1171, 0x11AD], NFKC: [0xB6F6], NFKD: [0x1104, 0x1171, 0x11AD] }, +{ source: [0xB6F7], NFC: [0xB6F7], NFD: [0x1104, 0x1171, 0x11AE], NFKC: [0xB6F7], NFKD: [0x1104, 0x1171, 0x11AE] }, +{ source: [0xB6F8], NFC: [0xB6F8], NFD: [0x1104, 0x1171, 0x11AF], NFKC: [0xB6F8], NFKD: [0x1104, 0x1171, 0x11AF] }, +{ source: [0xB6F9], NFC: [0xB6F9], NFD: [0x1104, 0x1171, 0x11B0], NFKC: [0xB6F9], NFKD: [0x1104, 0x1171, 0x11B0] }, +{ source: [0xB6FA], NFC: [0xB6FA], NFD: [0x1104, 0x1171, 0x11B1], NFKC: [0xB6FA], NFKD: [0x1104, 0x1171, 0x11B1] }, +{ source: [0xB6FB], NFC: [0xB6FB], NFD: [0x1104, 0x1171, 0x11B2], NFKC: [0xB6FB], NFKD: [0x1104, 0x1171, 0x11B2] }, +{ source: [0xB6FC], NFC: [0xB6FC], NFD: [0x1104, 0x1171, 0x11B3], NFKC: [0xB6FC], NFKD: [0x1104, 0x1171, 0x11B3] }, +{ source: [0xB6FD], NFC: [0xB6FD], NFD: [0x1104, 0x1171, 0x11B4], NFKC: [0xB6FD], NFKD: [0x1104, 0x1171, 0x11B4] }, +{ source: [0xB6FE], NFC: [0xB6FE], NFD: [0x1104, 0x1171, 0x11B5], NFKC: [0xB6FE], NFKD: [0x1104, 0x1171, 0x11B5] }, +{ source: [0xB6FF], NFC: [0xB6FF], NFD: [0x1104, 0x1171, 0x11B6], NFKC: [0xB6FF], NFKD: [0x1104, 0x1171, 0x11B6] }, +{ source: [0xB700], NFC: [0xB700], NFD: [0x1104, 0x1171, 0x11B7], NFKC: [0xB700], NFKD: [0x1104, 0x1171, 0x11B7] }, +{ source: [0xB701], NFC: [0xB701], NFD: [0x1104, 0x1171, 0x11B8], NFKC: [0xB701], NFKD: [0x1104, 0x1171, 0x11B8] }, +{ source: [0xB702], NFC: [0xB702], NFD: [0x1104, 0x1171, 0x11B9], NFKC: [0xB702], NFKD: [0x1104, 0x1171, 0x11B9] }, +{ source: [0xB703], NFC: [0xB703], NFD: [0x1104, 0x1171, 0x11BA], NFKC: [0xB703], NFKD: [0x1104, 0x1171, 0x11BA] }, +{ source: [0xB704], NFC: [0xB704], NFD: [0x1104, 0x1171, 0x11BB], NFKC: [0xB704], NFKD: [0x1104, 0x1171, 0x11BB] }, +{ source: [0xB705], NFC: [0xB705], NFD: [0x1104, 0x1171, 0x11BC], NFKC: [0xB705], NFKD: [0x1104, 0x1171, 0x11BC] }, +{ source: [0xB706], NFC: [0xB706], NFD: [0x1104, 0x1171, 0x11BD], NFKC: [0xB706], NFKD: [0x1104, 0x1171, 0x11BD] }, +{ source: [0xB707], NFC: [0xB707], NFD: [0x1104, 0x1171, 0x11BE], NFKC: [0xB707], NFKD: [0x1104, 0x1171, 0x11BE] }, +{ source: [0xB708], NFC: [0xB708], NFD: [0x1104, 0x1171, 0x11BF], NFKC: [0xB708], NFKD: [0x1104, 0x1171, 0x11BF] }, +{ source: [0xB709], NFC: [0xB709], NFD: [0x1104, 0x1171, 0x11C0], NFKC: [0xB709], NFKD: [0x1104, 0x1171, 0x11C0] }, +{ source: [0xB70A], NFC: [0xB70A], NFD: [0x1104, 0x1171, 0x11C1], NFKC: [0xB70A], NFKD: [0x1104, 0x1171, 0x11C1] }, +{ source: [0xB70B], NFC: [0xB70B], NFD: [0x1104, 0x1171, 0x11C2], NFKC: [0xB70B], NFKD: [0x1104, 0x1171, 0x11C2] }, +{ source: [0xB70C], NFC: [0xB70C], NFD: [0x1104, 0x1172], NFKC: [0xB70C], NFKD: [0x1104, 0x1172] }, +{ source: [0xB70D], NFC: [0xB70D], NFD: [0x1104, 0x1172, 0x11A8], NFKC: [0xB70D], NFKD: [0x1104, 0x1172, 0x11A8] }, +{ source: [0xB70E], NFC: [0xB70E], NFD: [0x1104, 0x1172, 0x11A9], NFKC: [0xB70E], NFKD: [0x1104, 0x1172, 0x11A9] }, +{ source: [0xB70F], NFC: [0xB70F], NFD: [0x1104, 0x1172, 0x11AA], NFKC: [0xB70F], NFKD: [0x1104, 0x1172, 0x11AA] }, +{ source: [0xB710], NFC: [0xB710], NFD: [0x1104, 0x1172, 0x11AB], NFKC: [0xB710], NFKD: [0x1104, 0x1172, 0x11AB] }, +{ source: [0xB711], NFC: [0xB711], NFD: [0x1104, 0x1172, 0x11AC], NFKC: [0xB711], NFKD: [0x1104, 0x1172, 0x11AC] }, +{ source: [0xB712], NFC: [0xB712], NFD: [0x1104, 0x1172, 0x11AD], NFKC: [0xB712], NFKD: [0x1104, 0x1172, 0x11AD] }, +{ source: [0xB713], NFC: [0xB713], NFD: [0x1104, 0x1172, 0x11AE], NFKC: [0xB713], NFKD: [0x1104, 0x1172, 0x11AE] }, +{ source: [0xB714], NFC: [0xB714], NFD: [0x1104, 0x1172, 0x11AF], NFKC: [0xB714], NFKD: [0x1104, 0x1172, 0x11AF] }, +{ source: [0xB715], NFC: [0xB715], NFD: [0x1104, 0x1172, 0x11B0], NFKC: [0xB715], NFKD: [0x1104, 0x1172, 0x11B0] }, +{ source: [0xB716], NFC: [0xB716], NFD: [0x1104, 0x1172, 0x11B1], NFKC: [0xB716], NFKD: [0x1104, 0x1172, 0x11B1] }, +{ source: [0xB717], NFC: [0xB717], NFD: [0x1104, 0x1172, 0x11B2], NFKC: [0xB717], NFKD: [0x1104, 0x1172, 0x11B2] }, +{ source: [0xB718], NFC: [0xB718], NFD: [0x1104, 0x1172, 0x11B3], NFKC: [0xB718], NFKD: [0x1104, 0x1172, 0x11B3] }, +{ source: [0xB719], NFC: [0xB719], NFD: [0x1104, 0x1172, 0x11B4], NFKC: [0xB719], NFKD: [0x1104, 0x1172, 0x11B4] }, +{ source: [0xB71A], NFC: [0xB71A], NFD: [0x1104, 0x1172, 0x11B5], NFKC: [0xB71A], NFKD: [0x1104, 0x1172, 0x11B5] }, +{ source: [0xB71B], NFC: [0xB71B], NFD: [0x1104, 0x1172, 0x11B6], NFKC: [0xB71B], NFKD: [0x1104, 0x1172, 0x11B6] }, +{ source: [0xB71C], NFC: [0xB71C], NFD: [0x1104, 0x1172, 0x11B7], NFKC: [0xB71C], NFKD: [0x1104, 0x1172, 0x11B7] }, +{ source: [0xB71D], NFC: [0xB71D], NFD: [0x1104, 0x1172, 0x11B8], NFKC: [0xB71D], NFKD: [0x1104, 0x1172, 0x11B8] }, +{ source: [0xB71E], NFC: [0xB71E], NFD: [0x1104, 0x1172, 0x11B9], NFKC: [0xB71E], NFKD: [0x1104, 0x1172, 0x11B9] }, +{ source: [0xB71F], NFC: [0xB71F], NFD: [0x1104, 0x1172, 0x11BA], NFKC: [0xB71F], NFKD: [0x1104, 0x1172, 0x11BA] }, +{ source: [0xB720], NFC: [0xB720], NFD: [0x1104, 0x1172, 0x11BB], NFKC: [0xB720], NFKD: [0x1104, 0x1172, 0x11BB] }, +{ source: [0xB721], NFC: [0xB721], NFD: [0x1104, 0x1172, 0x11BC], NFKC: [0xB721], NFKD: [0x1104, 0x1172, 0x11BC] }, +{ source: [0xB722], NFC: [0xB722], NFD: [0x1104, 0x1172, 0x11BD], NFKC: [0xB722], NFKD: [0x1104, 0x1172, 0x11BD] }, +{ source: [0xB723], NFC: [0xB723], NFD: [0x1104, 0x1172, 0x11BE], NFKC: [0xB723], NFKD: [0x1104, 0x1172, 0x11BE] }, +{ source: [0xB724], NFC: [0xB724], NFD: [0x1104, 0x1172, 0x11BF], NFKC: [0xB724], NFKD: [0x1104, 0x1172, 0x11BF] }, +{ source: [0xB725], NFC: [0xB725], NFD: [0x1104, 0x1172, 0x11C0], NFKC: [0xB725], NFKD: [0x1104, 0x1172, 0x11C0] }, +{ source: [0xB726], NFC: [0xB726], NFD: [0x1104, 0x1172, 0x11C1], NFKC: [0xB726], NFKD: [0x1104, 0x1172, 0x11C1] }, +{ source: [0xB727], NFC: [0xB727], NFD: [0x1104, 0x1172, 0x11C2], NFKC: [0xB727], NFKD: [0x1104, 0x1172, 0x11C2] }, +{ source: [0xB728], NFC: [0xB728], NFD: [0x1104, 0x1173], NFKC: [0xB728], NFKD: [0x1104, 0x1173] }, +{ source: [0xB729], NFC: [0xB729], NFD: [0x1104, 0x1173, 0x11A8], NFKC: [0xB729], NFKD: [0x1104, 0x1173, 0x11A8] }, +{ source: [0xB72A], NFC: [0xB72A], NFD: [0x1104, 0x1173, 0x11A9], NFKC: [0xB72A], NFKD: [0x1104, 0x1173, 0x11A9] }, +{ source: [0xB72B], NFC: [0xB72B], NFD: [0x1104, 0x1173, 0x11AA], NFKC: [0xB72B], NFKD: [0x1104, 0x1173, 0x11AA] }, +{ source: [0xB72C], NFC: [0xB72C], NFD: [0x1104, 0x1173, 0x11AB], NFKC: [0xB72C], NFKD: [0x1104, 0x1173, 0x11AB] }, +{ source: [0xB72D], NFC: [0xB72D], NFD: [0x1104, 0x1173, 0x11AC], NFKC: [0xB72D], NFKD: [0x1104, 0x1173, 0x11AC] }, +{ source: [0xB72E], NFC: [0xB72E], NFD: [0x1104, 0x1173, 0x11AD], NFKC: [0xB72E], NFKD: [0x1104, 0x1173, 0x11AD] }, +{ source: [0xB72F], NFC: [0xB72F], NFD: [0x1104, 0x1173, 0x11AE], NFKC: [0xB72F], NFKD: [0x1104, 0x1173, 0x11AE] }, +{ source: [0xB730], NFC: [0xB730], NFD: [0x1104, 0x1173, 0x11AF], NFKC: [0xB730], NFKD: [0x1104, 0x1173, 0x11AF] }, +{ source: [0xB731], NFC: [0xB731], NFD: [0x1104, 0x1173, 0x11B0], NFKC: [0xB731], NFKD: [0x1104, 0x1173, 0x11B0] }, +{ source: [0xB732], NFC: [0xB732], NFD: [0x1104, 0x1173, 0x11B1], NFKC: [0xB732], NFKD: [0x1104, 0x1173, 0x11B1] }, +{ source: [0xB733], NFC: [0xB733], NFD: [0x1104, 0x1173, 0x11B2], NFKC: [0xB733], NFKD: [0x1104, 0x1173, 0x11B2] }, +{ source: [0xB734], NFC: [0xB734], NFD: [0x1104, 0x1173, 0x11B3], NFKC: [0xB734], NFKD: [0x1104, 0x1173, 0x11B3] }, +{ source: [0xB735], NFC: [0xB735], NFD: [0x1104, 0x1173, 0x11B4], NFKC: [0xB735], NFKD: [0x1104, 0x1173, 0x11B4] }, +{ source: [0xB736], NFC: [0xB736], NFD: [0x1104, 0x1173, 0x11B5], NFKC: [0xB736], NFKD: [0x1104, 0x1173, 0x11B5] }, +{ source: [0xB737], NFC: [0xB737], NFD: [0x1104, 0x1173, 0x11B6], NFKC: [0xB737], NFKD: [0x1104, 0x1173, 0x11B6] }, +{ source: [0xB738], NFC: [0xB738], NFD: [0x1104, 0x1173, 0x11B7], NFKC: [0xB738], NFKD: [0x1104, 0x1173, 0x11B7] }, +{ source: [0xB739], NFC: [0xB739], NFD: [0x1104, 0x1173, 0x11B8], NFKC: [0xB739], NFKD: [0x1104, 0x1173, 0x11B8] }, +{ source: [0xB73A], NFC: [0xB73A], NFD: [0x1104, 0x1173, 0x11B9], NFKC: [0xB73A], NFKD: [0x1104, 0x1173, 0x11B9] }, +{ source: [0xB73B], NFC: [0xB73B], NFD: [0x1104, 0x1173, 0x11BA], NFKC: [0xB73B], NFKD: [0x1104, 0x1173, 0x11BA] }, +{ source: [0xB73C], NFC: [0xB73C], NFD: [0x1104, 0x1173, 0x11BB], NFKC: [0xB73C], NFKD: [0x1104, 0x1173, 0x11BB] }, +{ source: [0xB73D], NFC: [0xB73D], NFD: [0x1104, 0x1173, 0x11BC], NFKC: [0xB73D], NFKD: [0x1104, 0x1173, 0x11BC] }, +{ source: [0xB73E], NFC: [0xB73E], NFD: [0x1104, 0x1173, 0x11BD], NFKC: [0xB73E], NFKD: [0x1104, 0x1173, 0x11BD] }, +{ source: [0xB73F], NFC: [0xB73F], NFD: [0x1104, 0x1173, 0x11BE], NFKC: [0xB73F], NFKD: [0x1104, 0x1173, 0x11BE] }, +{ source: [0xB740], NFC: [0xB740], NFD: [0x1104, 0x1173, 0x11BF], NFKC: [0xB740], NFKD: [0x1104, 0x1173, 0x11BF] }, +{ source: [0xB741], NFC: [0xB741], NFD: [0x1104, 0x1173, 0x11C0], NFKC: [0xB741], NFKD: [0x1104, 0x1173, 0x11C0] }, +{ source: [0xB742], NFC: [0xB742], NFD: [0x1104, 0x1173, 0x11C1], NFKC: [0xB742], NFKD: [0x1104, 0x1173, 0x11C1] }, +{ source: [0xB743], NFC: [0xB743], NFD: [0x1104, 0x1173, 0x11C2], NFKC: [0xB743], NFKD: [0x1104, 0x1173, 0x11C2] }, +{ source: [0xB744], NFC: [0xB744], NFD: [0x1104, 0x1174], NFKC: [0xB744], NFKD: [0x1104, 0x1174] }, +{ source: [0xB745], NFC: [0xB745], NFD: [0x1104, 0x1174, 0x11A8], NFKC: [0xB745], NFKD: [0x1104, 0x1174, 0x11A8] }, +{ source: [0xB746], NFC: [0xB746], NFD: [0x1104, 0x1174, 0x11A9], NFKC: [0xB746], NFKD: [0x1104, 0x1174, 0x11A9] }, +{ source: [0xB747], NFC: [0xB747], NFD: [0x1104, 0x1174, 0x11AA], NFKC: [0xB747], NFKD: [0x1104, 0x1174, 0x11AA] }, +{ source: [0xB748], NFC: [0xB748], NFD: [0x1104, 0x1174, 0x11AB], NFKC: [0xB748], NFKD: [0x1104, 0x1174, 0x11AB] }, +{ source: [0xB749], NFC: [0xB749], NFD: [0x1104, 0x1174, 0x11AC], NFKC: [0xB749], NFKD: [0x1104, 0x1174, 0x11AC] }, +{ source: [0xB74A], NFC: [0xB74A], NFD: [0x1104, 0x1174, 0x11AD], NFKC: [0xB74A], NFKD: [0x1104, 0x1174, 0x11AD] }, +{ source: [0xB74B], NFC: [0xB74B], NFD: [0x1104, 0x1174, 0x11AE], NFKC: [0xB74B], NFKD: [0x1104, 0x1174, 0x11AE] }, +{ source: [0xB74C], NFC: [0xB74C], NFD: [0x1104, 0x1174, 0x11AF], NFKC: [0xB74C], NFKD: [0x1104, 0x1174, 0x11AF] }, +{ source: [0xB74D], NFC: [0xB74D], NFD: [0x1104, 0x1174, 0x11B0], NFKC: [0xB74D], NFKD: [0x1104, 0x1174, 0x11B0] }, +{ source: [0xB74E], NFC: [0xB74E], NFD: [0x1104, 0x1174, 0x11B1], NFKC: [0xB74E], NFKD: [0x1104, 0x1174, 0x11B1] }, +{ source: [0xB74F], NFC: [0xB74F], NFD: [0x1104, 0x1174, 0x11B2], NFKC: [0xB74F], NFKD: [0x1104, 0x1174, 0x11B2] }, +{ source: [0xB750], NFC: [0xB750], NFD: [0x1104, 0x1174, 0x11B3], NFKC: [0xB750], NFKD: [0x1104, 0x1174, 0x11B3] }, +{ source: [0xB751], NFC: [0xB751], NFD: [0x1104, 0x1174, 0x11B4], NFKC: [0xB751], NFKD: [0x1104, 0x1174, 0x11B4] }, +{ source: [0xB752], NFC: [0xB752], NFD: [0x1104, 0x1174, 0x11B5], NFKC: [0xB752], NFKD: [0x1104, 0x1174, 0x11B5] }, +{ source: [0xB753], NFC: [0xB753], NFD: [0x1104, 0x1174, 0x11B6], NFKC: [0xB753], NFKD: [0x1104, 0x1174, 0x11B6] }, +{ source: [0xB754], NFC: [0xB754], NFD: [0x1104, 0x1174, 0x11B7], NFKC: [0xB754], NFKD: [0x1104, 0x1174, 0x11B7] }, +{ source: [0xB755], NFC: [0xB755], NFD: [0x1104, 0x1174, 0x11B8], NFKC: [0xB755], NFKD: [0x1104, 0x1174, 0x11B8] }, +{ source: [0xB756], NFC: [0xB756], NFD: [0x1104, 0x1174, 0x11B9], NFKC: [0xB756], NFKD: [0x1104, 0x1174, 0x11B9] }, +{ source: [0xB757], NFC: [0xB757], NFD: [0x1104, 0x1174, 0x11BA], NFKC: [0xB757], NFKD: [0x1104, 0x1174, 0x11BA] }, +{ source: [0xB758], NFC: [0xB758], NFD: [0x1104, 0x1174, 0x11BB], NFKC: [0xB758], NFKD: [0x1104, 0x1174, 0x11BB] }, +{ source: [0xB759], NFC: [0xB759], NFD: [0x1104, 0x1174, 0x11BC], NFKC: [0xB759], NFKD: [0x1104, 0x1174, 0x11BC] }, +{ source: [0xB75A], NFC: [0xB75A], NFD: [0x1104, 0x1174, 0x11BD], NFKC: [0xB75A], NFKD: [0x1104, 0x1174, 0x11BD] }, +{ source: [0xB75B], NFC: [0xB75B], NFD: [0x1104, 0x1174, 0x11BE], NFKC: [0xB75B], NFKD: [0x1104, 0x1174, 0x11BE] }, +{ source: [0xB75C], NFC: [0xB75C], NFD: [0x1104, 0x1174, 0x11BF], NFKC: [0xB75C], NFKD: [0x1104, 0x1174, 0x11BF] }, +{ source: [0xB75D], NFC: [0xB75D], NFD: [0x1104, 0x1174, 0x11C0], NFKC: [0xB75D], NFKD: [0x1104, 0x1174, 0x11C0] }, +{ source: [0xB75E], NFC: [0xB75E], NFD: [0x1104, 0x1174, 0x11C1], NFKC: [0xB75E], NFKD: [0x1104, 0x1174, 0x11C1] }, +{ source: [0xB75F], NFC: [0xB75F], NFD: [0x1104, 0x1174, 0x11C2], NFKC: [0xB75F], NFKD: [0x1104, 0x1174, 0x11C2] }, +{ source: [0xB760], NFC: [0xB760], NFD: [0x1104, 0x1175], NFKC: [0xB760], NFKD: [0x1104, 0x1175] }, +{ source: [0xB761], NFC: [0xB761], NFD: [0x1104, 0x1175, 0x11A8], NFKC: [0xB761], NFKD: [0x1104, 0x1175, 0x11A8] }, +{ source: [0xB762], NFC: [0xB762], NFD: [0x1104, 0x1175, 0x11A9], NFKC: [0xB762], NFKD: [0x1104, 0x1175, 0x11A9] }, +{ source: [0xB763], NFC: [0xB763], NFD: [0x1104, 0x1175, 0x11AA], NFKC: [0xB763], NFKD: [0x1104, 0x1175, 0x11AA] }, +{ source: [0xB764], NFC: [0xB764], NFD: [0x1104, 0x1175, 0x11AB], NFKC: [0xB764], NFKD: [0x1104, 0x1175, 0x11AB] }, +{ source: [0xB765], NFC: [0xB765], NFD: [0x1104, 0x1175, 0x11AC], NFKC: [0xB765], NFKD: [0x1104, 0x1175, 0x11AC] }, +{ source: [0xB766], NFC: [0xB766], NFD: [0x1104, 0x1175, 0x11AD], NFKC: [0xB766], NFKD: [0x1104, 0x1175, 0x11AD] }, +{ source: [0xB767], NFC: [0xB767], NFD: [0x1104, 0x1175, 0x11AE], NFKC: [0xB767], NFKD: [0x1104, 0x1175, 0x11AE] }, +{ source: [0xB768], NFC: [0xB768], NFD: [0x1104, 0x1175, 0x11AF], NFKC: [0xB768], NFKD: [0x1104, 0x1175, 0x11AF] }, +{ source: [0xB769], NFC: [0xB769], NFD: [0x1104, 0x1175, 0x11B0], NFKC: [0xB769], NFKD: [0x1104, 0x1175, 0x11B0] }, +{ source: [0xB76A], NFC: [0xB76A], NFD: [0x1104, 0x1175, 0x11B1], NFKC: [0xB76A], NFKD: [0x1104, 0x1175, 0x11B1] }, +{ source: [0xB76B], NFC: [0xB76B], NFD: [0x1104, 0x1175, 0x11B2], NFKC: [0xB76B], NFKD: [0x1104, 0x1175, 0x11B2] }, +{ source: [0xB76C], NFC: [0xB76C], NFD: [0x1104, 0x1175, 0x11B3], NFKC: [0xB76C], NFKD: [0x1104, 0x1175, 0x11B3] }, +{ source: [0xB76D], NFC: [0xB76D], NFD: [0x1104, 0x1175, 0x11B4], NFKC: [0xB76D], NFKD: [0x1104, 0x1175, 0x11B4] }, +{ source: [0xB76E], NFC: [0xB76E], NFD: [0x1104, 0x1175, 0x11B5], NFKC: [0xB76E], NFKD: [0x1104, 0x1175, 0x11B5] }, +{ source: [0xB76F], NFC: [0xB76F], NFD: [0x1104, 0x1175, 0x11B6], NFKC: [0xB76F], NFKD: [0x1104, 0x1175, 0x11B6] }, +{ source: [0xB770], NFC: [0xB770], NFD: [0x1104, 0x1175, 0x11B7], NFKC: [0xB770], NFKD: [0x1104, 0x1175, 0x11B7] }, +{ source: [0xB771], NFC: [0xB771], NFD: [0x1104, 0x1175, 0x11B8], NFKC: [0xB771], NFKD: [0x1104, 0x1175, 0x11B8] }, +{ source: [0xB772], NFC: [0xB772], NFD: [0x1104, 0x1175, 0x11B9], NFKC: [0xB772], NFKD: [0x1104, 0x1175, 0x11B9] }, +{ source: [0xB773], NFC: [0xB773], NFD: [0x1104, 0x1175, 0x11BA], NFKC: [0xB773], NFKD: [0x1104, 0x1175, 0x11BA] }, +{ source: [0xB774], NFC: [0xB774], NFD: [0x1104, 0x1175, 0x11BB], NFKC: [0xB774], NFKD: [0x1104, 0x1175, 0x11BB] }, +{ source: [0xB775], NFC: [0xB775], NFD: [0x1104, 0x1175, 0x11BC], NFKC: [0xB775], NFKD: [0x1104, 0x1175, 0x11BC] }, +{ source: [0xB776], NFC: [0xB776], NFD: [0x1104, 0x1175, 0x11BD], NFKC: [0xB776], NFKD: [0x1104, 0x1175, 0x11BD] }, +{ source: [0xB777], NFC: [0xB777], NFD: [0x1104, 0x1175, 0x11BE], NFKC: [0xB777], NFKD: [0x1104, 0x1175, 0x11BE] }, +{ source: [0xB778], NFC: [0xB778], NFD: [0x1104, 0x1175, 0x11BF], NFKC: [0xB778], NFKD: [0x1104, 0x1175, 0x11BF] }, +{ source: [0xB779], NFC: [0xB779], NFD: [0x1104, 0x1175, 0x11C0], NFKC: [0xB779], NFKD: [0x1104, 0x1175, 0x11C0] }, +{ source: [0xB77A], NFC: [0xB77A], NFD: [0x1104, 0x1175, 0x11C1], NFKC: [0xB77A], NFKD: [0x1104, 0x1175, 0x11C1] }, +{ source: [0xB77B], NFC: [0xB77B], NFD: [0x1104, 0x1175, 0x11C2], NFKC: [0xB77B], NFKD: [0x1104, 0x1175, 0x11C2] }, +{ source: [0xB77C], NFC: [0xB77C], NFD: [0x1105, 0x1161], NFKC: [0xB77C], NFKD: [0x1105, 0x1161] }, +{ source: [0xB77D], NFC: [0xB77D], NFD: [0x1105, 0x1161, 0x11A8], NFKC: [0xB77D], NFKD: [0x1105, 0x1161, 0x11A8] }, +{ source: [0xB77E], NFC: [0xB77E], NFD: [0x1105, 0x1161, 0x11A9], NFKC: [0xB77E], NFKD: [0x1105, 0x1161, 0x11A9] }, +{ source: [0xB77F], NFC: [0xB77F], NFD: [0x1105, 0x1161, 0x11AA], NFKC: [0xB77F], NFKD: [0x1105, 0x1161, 0x11AA] }, +{ source: [0xB780], NFC: [0xB780], NFD: [0x1105, 0x1161, 0x11AB], NFKC: [0xB780], NFKD: [0x1105, 0x1161, 0x11AB] }, +{ source: [0xB781], NFC: [0xB781], NFD: [0x1105, 0x1161, 0x11AC], NFKC: [0xB781], NFKD: [0x1105, 0x1161, 0x11AC] }, +{ source: [0xB782], NFC: [0xB782], NFD: [0x1105, 0x1161, 0x11AD], NFKC: [0xB782], NFKD: [0x1105, 0x1161, 0x11AD] }, +{ source: [0xB783], NFC: [0xB783], NFD: [0x1105, 0x1161, 0x11AE], NFKC: [0xB783], NFKD: [0x1105, 0x1161, 0x11AE] }, +{ source: [0xB784], NFC: [0xB784], NFD: [0x1105, 0x1161, 0x11AF], NFKC: [0xB784], NFKD: [0x1105, 0x1161, 0x11AF] }, +{ source: [0xB785], NFC: [0xB785], NFD: [0x1105, 0x1161, 0x11B0], NFKC: [0xB785], NFKD: [0x1105, 0x1161, 0x11B0] }, +{ source: [0xB786], NFC: [0xB786], NFD: [0x1105, 0x1161, 0x11B1], NFKC: [0xB786], NFKD: [0x1105, 0x1161, 0x11B1] }, +{ source: [0xB787], NFC: [0xB787], NFD: [0x1105, 0x1161, 0x11B2], NFKC: [0xB787], NFKD: [0x1105, 0x1161, 0x11B2] }, +{ source: [0xB788], NFC: [0xB788], NFD: [0x1105, 0x1161, 0x11B3], NFKC: [0xB788], NFKD: [0x1105, 0x1161, 0x11B3] }, +{ source: [0xB789], NFC: [0xB789], NFD: [0x1105, 0x1161, 0x11B4], NFKC: [0xB789], NFKD: [0x1105, 0x1161, 0x11B4] }, +{ source: [0xB78A], NFC: [0xB78A], NFD: [0x1105, 0x1161, 0x11B5], NFKC: [0xB78A], NFKD: [0x1105, 0x1161, 0x11B5] }, +{ source: [0xB78B], NFC: [0xB78B], NFD: [0x1105, 0x1161, 0x11B6], NFKC: [0xB78B], NFKD: [0x1105, 0x1161, 0x11B6] }, +{ source: [0xB78C], NFC: [0xB78C], NFD: [0x1105, 0x1161, 0x11B7], NFKC: [0xB78C], NFKD: [0x1105, 0x1161, 0x11B7] }, +{ source: [0xB78D], NFC: [0xB78D], NFD: [0x1105, 0x1161, 0x11B8], NFKC: [0xB78D], NFKD: [0x1105, 0x1161, 0x11B8] }, +{ source: [0xB78E], NFC: [0xB78E], NFD: [0x1105, 0x1161, 0x11B9], NFKC: [0xB78E], NFKD: [0x1105, 0x1161, 0x11B9] }, +{ source: [0xB78F], NFC: [0xB78F], NFD: [0x1105, 0x1161, 0x11BA], NFKC: [0xB78F], NFKD: [0x1105, 0x1161, 0x11BA] }, +{ source: [0xB790], NFC: [0xB790], NFD: [0x1105, 0x1161, 0x11BB], NFKC: [0xB790], NFKD: [0x1105, 0x1161, 0x11BB] }, +{ source: [0xB791], NFC: [0xB791], NFD: [0x1105, 0x1161, 0x11BC], NFKC: [0xB791], NFKD: [0x1105, 0x1161, 0x11BC] }, +{ source: [0xB792], NFC: [0xB792], NFD: [0x1105, 0x1161, 0x11BD], NFKC: [0xB792], NFKD: [0x1105, 0x1161, 0x11BD] }, +{ source: [0xB793], NFC: [0xB793], NFD: [0x1105, 0x1161, 0x11BE], NFKC: [0xB793], NFKD: [0x1105, 0x1161, 0x11BE] }, +{ source: [0xB794], NFC: [0xB794], NFD: [0x1105, 0x1161, 0x11BF], NFKC: [0xB794], NFKD: [0x1105, 0x1161, 0x11BF] }, +{ source: [0xB795], NFC: [0xB795], NFD: [0x1105, 0x1161, 0x11C0], NFKC: [0xB795], NFKD: [0x1105, 0x1161, 0x11C0] }, +{ source: [0xB796], NFC: [0xB796], NFD: [0x1105, 0x1161, 0x11C1], NFKC: [0xB796], NFKD: [0x1105, 0x1161, 0x11C1] }, +{ source: [0xB797], NFC: [0xB797], NFD: [0x1105, 0x1161, 0x11C2], NFKC: [0xB797], NFKD: [0x1105, 0x1161, 0x11C2] }, +{ source: [0xB798], NFC: [0xB798], NFD: [0x1105, 0x1162], NFKC: [0xB798], NFKD: [0x1105, 0x1162] }, +{ source: [0xB799], NFC: [0xB799], NFD: [0x1105, 0x1162, 0x11A8], NFKC: [0xB799], NFKD: [0x1105, 0x1162, 0x11A8] }, +{ source: [0xB79A], NFC: [0xB79A], NFD: [0x1105, 0x1162, 0x11A9], NFKC: [0xB79A], NFKD: [0x1105, 0x1162, 0x11A9] }, +{ source: [0xB79B], NFC: [0xB79B], NFD: [0x1105, 0x1162, 0x11AA], NFKC: [0xB79B], NFKD: [0x1105, 0x1162, 0x11AA] }, +{ source: [0xB79C], NFC: [0xB79C], NFD: [0x1105, 0x1162, 0x11AB], NFKC: [0xB79C], NFKD: [0x1105, 0x1162, 0x11AB] }, +{ source: [0xB79D], NFC: [0xB79D], NFD: [0x1105, 0x1162, 0x11AC], NFKC: [0xB79D], NFKD: [0x1105, 0x1162, 0x11AC] }, +{ source: [0xB79E], NFC: [0xB79E], NFD: [0x1105, 0x1162, 0x11AD], NFKC: [0xB79E], NFKD: [0x1105, 0x1162, 0x11AD] }, +{ source: [0xB79F], NFC: [0xB79F], NFD: [0x1105, 0x1162, 0x11AE], NFKC: [0xB79F], NFKD: [0x1105, 0x1162, 0x11AE] }, +{ source: [0xB7A0], NFC: [0xB7A0], NFD: [0x1105, 0x1162, 0x11AF], NFKC: [0xB7A0], NFKD: [0x1105, 0x1162, 0x11AF] }, +{ source: [0xB7A1], NFC: [0xB7A1], NFD: [0x1105, 0x1162, 0x11B0], NFKC: [0xB7A1], NFKD: [0x1105, 0x1162, 0x11B0] }, +{ source: [0xB7A2], NFC: [0xB7A2], NFD: [0x1105, 0x1162, 0x11B1], NFKC: [0xB7A2], NFKD: [0x1105, 0x1162, 0x11B1] }, +{ source: [0xB7A3], NFC: [0xB7A3], NFD: [0x1105, 0x1162, 0x11B2], NFKC: [0xB7A3], NFKD: [0x1105, 0x1162, 0x11B2] }, +{ source: [0xB7A4], NFC: [0xB7A4], NFD: [0x1105, 0x1162, 0x11B3], NFKC: [0xB7A4], NFKD: [0x1105, 0x1162, 0x11B3] }, +{ source: [0xB7A5], NFC: [0xB7A5], NFD: [0x1105, 0x1162, 0x11B4], NFKC: [0xB7A5], NFKD: [0x1105, 0x1162, 0x11B4] }, +{ source: [0xB7A6], NFC: [0xB7A6], NFD: [0x1105, 0x1162, 0x11B5], NFKC: [0xB7A6], NFKD: [0x1105, 0x1162, 0x11B5] }, +{ source: [0xB7A7], NFC: [0xB7A7], NFD: [0x1105, 0x1162, 0x11B6], NFKC: [0xB7A7], NFKD: [0x1105, 0x1162, 0x11B6] }, +{ source: [0xB7A8], NFC: [0xB7A8], NFD: [0x1105, 0x1162, 0x11B7], NFKC: [0xB7A8], NFKD: [0x1105, 0x1162, 0x11B7] }, +{ source: [0xB7A9], NFC: [0xB7A9], NFD: [0x1105, 0x1162, 0x11B8], NFKC: [0xB7A9], NFKD: [0x1105, 0x1162, 0x11B8] }, +{ source: [0xB7AA], NFC: [0xB7AA], NFD: [0x1105, 0x1162, 0x11B9], NFKC: [0xB7AA], NFKD: [0x1105, 0x1162, 0x11B9] }, +{ source: [0xB7AB], NFC: [0xB7AB], NFD: [0x1105, 0x1162, 0x11BA], NFKC: [0xB7AB], NFKD: [0x1105, 0x1162, 0x11BA] }, +{ source: [0xB7AC], NFC: [0xB7AC], NFD: [0x1105, 0x1162, 0x11BB], NFKC: [0xB7AC], NFKD: [0x1105, 0x1162, 0x11BB] }, +{ source: [0xB7AD], NFC: [0xB7AD], NFD: [0x1105, 0x1162, 0x11BC], NFKC: [0xB7AD], NFKD: [0x1105, 0x1162, 0x11BC] }, +{ source: [0xB7AE], NFC: [0xB7AE], NFD: [0x1105, 0x1162, 0x11BD], NFKC: [0xB7AE], NFKD: [0x1105, 0x1162, 0x11BD] }, +{ source: [0xB7AF], NFC: [0xB7AF], NFD: [0x1105, 0x1162, 0x11BE], NFKC: [0xB7AF], NFKD: [0x1105, 0x1162, 0x11BE] }, +{ source: [0xB7B0], NFC: [0xB7B0], NFD: [0x1105, 0x1162, 0x11BF], NFKC: [0xB7B0], NFKD: [0x1105, 0x1162, 0x11BF] }, +{ source: [0xB7B1], NFC: [0xB7B1], NFD: [0x1105, 0x1162, 0x11C0], NFKC: [0xB7B1], NFKD: [0x1105, 0x1162, 0x11C0] }, +{ source: [0xB7B2], NFC: [0xB7B2], NFD: [0x1105, 0x1162, 0x11C1], NFKC: [0xB7B2], NFKD: [0x1105, 0x1162, 0x11C1] }, +{ source: [0xB7B3], NFC: [0xB7B3], NFD: [0x1105, 0x1162, 0x11C2], NFKC: [0xB7B3], NFKD: [0x1105, 0x1162, 0x11C2] }, +{ source: [0xB7B4], NFC: [0xB7B4], NFD: [0x1105, 0x1163], NFKC: [0xB7B4], NFKD: [0x1105, 0x1163] }, +{ source: [0xB7B5], NFC: [0xB7B5], NFD: [0x1105, 0x1163, 0x11A8], NFKC: [0xB7B5], NFKD: [0x1105, 0x1163, 0x11A8] }, +{ source: [0xB7B6], NFC: [0xB7B6], NFD: [0x1105, 0x1163, 0x11A9], NFKC: [0xB7B6], NFKD: [0x1105, 0x1163, 0x11A9] }, +{ source: [0xB7B7], NFC: [0xB7B7], NFD: [0x1105, 0x1163, 0x11AA], NFKC: [0xB7B7], NFKD: [0x1105, 0x1163, 0x11AA] }, +{ source: [0xB7B8], NFC: [0xB7B8], NFD: [0x1105, 0x1163, 0x11AB], NFKC: [0xB7B8], NFKD: [0x1105, 0x1163, 0x11AB] }, +{ source: [0xB7B9], NFC: [0xB7B9], NFD: [0x1105, 0x1163, 0x11AC], NFKC: [0xB7B9], NFKD: [0x1105, 0x1163, 0x11AC] }, +{ source: [0xB7BA], NFC: [0xB7BA], NFD: [0x1105, 0x1163, 0x11AD], NFKC: [0xB7BA], NFKD: [0x1105, 0x1163, 0x11AD] }, +{ source: [0xB7BB], NFC: [0xB7BB], NFD: [0x1105, 0x1163, 0x11AE], NFKC: [0xB7BB], NFKD: [0x1105, 0x1163, 0x11AE] }, +{ source: [0xB7BC], NFC: [0xB7BC], NFD: [0x1105, 0x1163, 0x11AF], NFKC: [0xB7BC], NFKD: [0x1105, 0x1163, 0x11AF] }, +{ source: [0xB7BD], NFC: [0xB7BD], NFD: [0x1105, 0x1163, 0x11B0], NFKC: [0xB7BD], NFKD: [0x1105, 0x1163, 0x11B0] }, +{ source: [0xB7BE], NFC: [0xB7BE], NFD: [0x1105, 0x1163, 0x11B1], NFKC: [0xB7BE], NFKD: [0x1105, 0x1163, 0x11B1] }, +{ source: [0xB7BF], NFC: [0xB7BF], NFD: [0x1105, 0x1163, 0x11B2], NFKC: [0xB7BF], NFKD: [0x1105, 0x1163, 0x11B2] }, +{ source: [0xB7C0], NFC: [0xB7C0], NFD: [0x1105, 0x1163, 0x11B3], NFKC: [0xB7C0], NFKD: [0x1105, 0x1163, 0x11B3] }, +{ source: [0xB7C1], NFC: [0xB7C1], NFD: [0x1105, 0x1163, 0x11B4], NFKC: [0xB7C1], NFKD: [0x1105, 0x1163, 0x11B4] }, +{ source: [0xB7C2], NFC: [0xB7C2], NFD: [0x1105, 0x1163, 0x11B5], NFKC: [0xB7C2], NFKD: [0x1105, 0x1163, 0x11B5] }, +{ source: [0xB7C3], NFC: [0xB7C3], NFD: [0x1105, 0x1163, 0x11B6], NFKC: [0xB7C3], NFKD: [0x1105, 0x1163, 0x11B6] }, +{ source: [0xB7C4], NFC: [0xB7C4], NFD: [0x1105, 0x1163, 0x11B7], NFKC: [0xB7C4], NFKD: [0x1105, 0x1163, 0x11B7] }, +{ source: [0xB7C5], NFC: [0xB7C5], NFD: [0x1105, 0x1163, 0x11B8], NFKC: [0xB7C5], NFKD: [0x1105, 0x1163, 0x11B8] }, +{ source: [0xB7C6], NFC: [0xB7C6], NFD: [0x1105, 0x1163, 0x11B9], NFKC: [0xB7C6], NFKD: [0x1105, 0x1163, 0x11B9] }, +{ source: [0xB7C7], NFC: [0xB7C7], NFD: [0x1105, 0x1163, 0x11BA], NFKC: [0xB7C7], NFKD: [0x1105, 0x1163, 0x11BA] }, +{ source: [0xB7C8], NFC: [0xB7C8], NFD: [0x1105, 0x1163, 0x11BB], NFKC: [0xB7C8], NFKD: [0x1105, 0x1163, 0x11BB] }, +{ source: [0xB7C9], NFC: [0xB7C9], NFD: [0x1105, 0x1163, 0x11BC], NFKC: [0xB7C9], NFKD: [0x1105, 0x1163, 0x11BC] }, +{ source: [0xB7CA], NFC: [0xB7CA], NFD: [0x1105, 0x1163, 0x11BD], NFKC: [0xB7CA], NFKD: [0x1105, 0x1163, 0x11BD] }, +{ source: [0xB7CB], NFC: [0xB7CB], NFD: [0x1105, 0x1163, 0x11BE], NFKC: [0xB7CB], NFKD: [0x1105, 0x1163, 0x11BE] }, +{ source: [0xB7CC], NFC: [0xB7CC], NFD: [0x1105, 0x1163, 0x11BF], NFKC: [0xB7CC], NFKD: [0x1105, 0x1163, 0x11BF] }, +{ source: [0xB7CD], NFC: [0xB7CD], NFD: [0x1105, 0x1163, 0x11C0], NFKC: [0xB7CD], NFKD: [0x1105, 0x1163, 0x11C0] }, +{ source: [0xB7CE], NFC: [0xB7CE], NFD: [0x1105, 0x1163, 0x11C1], NFKC: [0xB7CE], NFKD: [0x1105, 0x1163, 0x11C1] }, +{ source: [0xB7CF], NFC: [0xB7CF], NFD: [0x1105, 0x1163, 0x11C2], NFKC: [0xB7CF], NFKD: [0x1105, 0x1163, 0x11C2] }, +{ source: [0xB7D0], NFC: [0xB7D0], NFD: [0x1105, 0x1164], NFKC: [0xB7D0], NFKD: [0x1105, 0x1164] }, +{ source: [0xB7D1], NFC: [0xB7D1], NFD: [0x1105, 0x1164, 0x11A8], NFKC: [0xB7D1], NFKD: [0x1105, 0x1164, 0x11A8] }, +{ source: [0xB7D2], NFC: [0xB7D2], NFD: [0x1105, 0x1164, 0x11A9], NFKC: [0xB7D2], NFKD: [0x1105, 0x1164, 0x11A9] }, +{ source: [0xB7D3], NFC: [0xB7D3], NFD: [0x1105, 0x1164, 0x11AA], NFKC: [0xB7D3], NFKD: [0x1105, 0x1164, 0x11AA] }, +{ source: [0xB7D4], NFC: [0xB7D4], NFD: [0x1105, 0x1164, 0x11AB], NFKC: [0xB7D4], NFKD: [0x1105, 0x1164, 0x11AB] }, +{ source: [0xB7D5], NFC: [0xB7D5], NFD: [0x1105, 0x1164, 0x11AC], NFKC: [0xB7D5], NFKD: [0x1105, 0x1164, 0x11AC] }, +{ source: [0xB7D6], NFC: [0xB7D6], NFD: [0x1105, 0x1164, 0x11AD], NFKC: [0xB7D6], NFKD: [0x1105, 0x1164, 0x11AD] }, +{ source: [0xB7D7], NFC: [0xB7D7], NFD: [0x1105, 0x1164, 0x11AE], NFKC: [0xB7D7], NFKD: [0x1105, 0x1164, 0x11AE] }, +{ source: [0xB7D8], NFC: [0xB7D8], NFD: [0x1105, 0x1164, 0x11AF], NFKC: [0xB7D8], NFKD: [0x1105, 0x1164, 0x11AF] }, +{ source: [0xB7D9], NFC: [0xB7D9], NFD: [0x1105, 0x1164, 0x11B0], NFKC: [0xB7D9], NFKD: [0x1105, 0x1164, 0x11B0] }, +{ source: [0xB7DA], NFC: [0xB7DA], NFD: [0x1105, 0x1164, 0x11B1], NFKC: [0xB7DA], NFKD: [0x1105, 0x1164, 0x11B1] }, +{ source: [0xB7DB], NFC: [0xB7DB], NFD: [0x1105, 0x1164, 0x11B2], NFKC: [0xB7DB], NFKD: [0x1105, 0x1164, 0x11B2] }, +{ source: [0xB7DC], NFC: [0xB7DC], NFD: [0x1105, 0x1164, 0x11B3], NFKC: [0xB7DC], NFKD: [0x1105, 0x1164, 0x11B3] }, +{ source: [0xB7DD], NFC: [0xB7DD], NFD: [0x1105, 0x1164, 0x11B4], NFKC: [0xB7DD], NFKD: [0x1105, 0x1164, 0x11B4] }, +{ source: [0xB7DE], NFC: [0xB7DE], NFD: [0x1105, 0x1164, 0x11B5], NFKC: [0xB7DE], NFKD: [0x1105, 0x1164, 0x11B5] }, +{ source: [0xB7DF], NFC: [0xB7DF], NFD: [0x1105, 0x1164, 0x11B6], NFKC: [0xB7DF], NFKD: [0x1105, 0x1164, 0x11B6] }, +{ source: [0xB7E0], NFC: [0xB7E0], NFD: [0x1105, 0x1164, 0x11B7], NFKC: [0xB7E0], NFKD: [0x1105, 0x1164, 0x11B7] }, +{ source: [0xB7E1], NFC: [0xB7E1], NFD: [0x1105, 0x1164, 0x11B8], NFKC: [0xB7E1], NFKD: [0x1105, 0x1164, 0x11B8] }, +{ source: [0xB7E2], NFC: [0xB7E2], NFD: [0x1105, 0x1164, 0x11B9], NFKC: [0xB7E2], NFKD: [0x1105, 0x1164, 0x11B9] }, +{ source: [0xB7E3], NFC: [0xB7E3], NFD: [0x1105, 0x1164, 0x11BA], NFKC: [0xB7E3], NFKD: [0x1105, 0x1164, 0x11BA] }, +{ source: [0xB7E4], NFC: [0xB7E4], NFD: [0x1105, 0x1164, 0x11BB], NFKC: [0xB7E4], NFKD: [0x1105, 0x1164, 0x11BB] }, +{ source: [0xB7E5], NFC: [0xB7E5], NFD: [0x1105, 0x1164, 0x11BC], NFKC: [0xB7E5], NFKD: [0x1105, 0x1164, 0x11BC] }, +{ source: [0xB7E6], NFC: [0xB7E6], NFD: [0x1105, 0x1164, 0x11BD], NFKC: [0xB7E6], NFKD: [0x1105, 0x1164, 0x11BD] }, +{ source: [0xB7E7], NFC: [0xB7E7], NFD: [0x1105, 0x1164, 0x11BE], NFKC: [0xB7E7], NFKD: [0x1105, 0x1164, 0x11BE] }, +{ source: [0xB7E8], NFC: [0xB7E8], NFD: [0x1105, 0x1164, 0x11BF], NFKC: [0xB7E8], NFKD: [0x1105, 0x1164, 0x11BF] }, +{ source: [0xB7E9], NFC: [0xB7E9], NFD: [0x1105, 0x1164, 0x11C0], NFKC: [0xB7E9], NFKD: [0x1105, 0x1164, 0x11C0] }, +{ source: [0xB7EA], NFC: [0xB7EA], NFD: [0x1105, 0x1164, 0x11C1], NFKC: [0xB7EA], NFKD: [0x1105, 0x1164, 0x11C1] }, +{ source: [0xB7EB], NFC: [0xB7EB], NFD: [0x1105, 0x1164, 0x11C2], NFKC: [0xB7EB], NFKD: [0x1105, 0x1164, 0x11C2] }, +{ source: [0xB7EC], NFC: [0xB7EC], NFD: [0x1105, 0x1165], NFKC: [0xB7EC], NFKD: [0x1105, 0x1165] }, +{ source: [0xB7ED], NFC: [0xB7ED], NFD: [0x1105, 0x1165, 0x11A8], NFKC: [0xB7ED], NFKD: [0x1105, 0x1165, 0x11A8] }, +{ source: [0xB7EE], NFC: [0xB7EE], NFD: [0x1105, 0x1165, 0x11A9], NFKC: [0xB7EE], NFKD: [0x1105, 0x1165, 0x11A9] }, +{ source: [0xB7EF], NFC: [0xB7EF], NFD: [0x1105, 0x1165, 0x11AA], NFKC: [0xB7EF], NFKD: [0x1105, 0x1165, 0x11AA] }, +{ source: [0xB7F0], NFC: [0xB7F0], NFD: [0x1105, 0x1165, 0x11AB], NFKC: [0xB7F0], NFKD: [0x1105, 0x1165, 0x11AB] }, +{ source: [0xB7F1], NFC: [0xB7F1], NFD: [0x1105, 0x1165, 0x11AC], NFKC: [0xB7F1], NFKD: [0x1105, 0x1165, 0x11AC] }, +{ source: [0xB7F2], NFC: [0xB7F2], NFD: [0x1105, 0x1165, 0x11AD], NFKC: [0xB7F2], NFKD: [0x1105, 0x1165, 0x11AD] }, +{ source: [0xB7F3], NFC: [0xB7F3], NFD: [0x1105, 0x1165, 0x11AE], NFKC: [0xB7F3], NFKD: [0x1105, 0x1165, 0x11AE] }, +{ source: [0xB7F4], NFC: [0xB7F4], NFD: [0x1105, 0x1165, 0x11AF], NFKC: [0xB7F4], NFKD: [0x1105, 0x1165, 0x11AF] }, +{ source: [0xB7F5], NFC: [0xB7F5], NFD: [0x1105, 0x1165, 0x11B0], NFKC: [0xB7F5], NFKD: [0x1105, 0x1165, 0x11B0] }, +{ source: [0xB7F6], NFC: [0xB7F6], NFD: [0x1105, 0x1165, 0x11B1], NFKC: [0xB7F6], NFKD: [0x1105, 0x1165, 0x11B1] }, +{ source: [0xB7F7], NFC: [0xB7F7], NFD: [0x1105, 0x1165, 0x11B2], NFKC: [0xB7F7], NFKD: [0x1105, 0x1165, 0x11B2] }, +{ source: [0xB7F8], NFC: [0xB7F8], NFD: [0x1105, 0x1165, 0x11B3], NFKC: [0xB7F8], NFKD: [0x1105, 0x1165, 0x11B3] }, +{ source: [0xB7F9], NFC: [0xB7F9], NFD: [0x1105, 0x1165, 0x11B4], NFKC: [0xB7F9], NFKD: [0x1105, 0x1165, 0x11B4] }, +{ source: [0xB7FA], NFC: [0xB7FA], NFD: [0x1105, 0x1165, 0x11B5], NFKC: [0xB7FA], NFKD: [0x1105, 0x1165, 0x11B5] }, +{ source: [0xB7FB], NFC: [0xB7FB], NFD: [0x1105, 0x1165, 0x11B6], NFKC: [0xB7FB], NFKD: [0x1105, 0x1165, 0x11B6] }, +{ source: [0xB7FC], NFC: [0xB7FC], NFD: [0x1105, 0x1165, 0x11B7], NFKC: [0xB7FC], NFKD: [0x1105, 0x1165, 0x11B7] }, +{ source: [0xB7FD], NFC: [0xB7FD], NFD: [0x1105, 0x1165, 0x11B8], NFKC: [0xB7FD], NFKD: [0x1105, 0x1165, 0x11B8] }, +{ source: [0xB7FE], NFC: [0xB7FE], NFD: [0x1105, 0x1165, 0x11B9], NFKC: [0xB7FE], NFKD: [0x1105, 0x1165, 0x11B9] }, +{ source: [0xB7FF], NFC: [0xB7FF], NFD: [0x1105, 0x1165, 0x11BA], NFKC: [0xB7FF], NFKD: [0x1105, 0x1165, 0x11BA] }, +{ source: [0xB800], NFC: [0xB800], NFD: [0x1105, 0x1165, 0x11BB], NFKC: [0xB800], NFKD: [0x1105, 0x1165, 0x11BB] }, +{ source: [0xB801], NFC: [0xB801], NFD: [0x1105, 0x1165, 0x11BC], NFKC: [0xB801], NFKD: [0x1105, 0x1165, 0x11BC] }, +{ source: [0xB802], NFC: [0xB802], NFD: [0x1105, 0x1165, 0x11BD], NFKC: [0xB802], NFKD: [0x1105, 0x1165, 0x11BD] }, +{ source: [0xB803], NFC: [0xB803], NFD: [0x1105, 0x1165, 0x11BE], NFKC: [0xB803], NFKD: [0x1105, 0x1165, 0x11BE] }, +{ source: [0xB804], NFC: [0xB804], NFD: [0x1105, 0x1165, 0x11BF], NFKC: [0xB804], NFKD: [0x1105, 0x1165, 0x11BF] }, +{ source: [0xB805], NFC: [0xB805], NFD: [0x1105, 0x1165, 0x11C0], NFKC: [0xB805], NFKD: [0x1105, 0x1165, 0x11C0] }, +{ source: [0xB806], NFC: [0xB806], NFD: [0x1105, 0x1165, 0x11C1], NFKC: [0xB806], NFKD: [0x1105, 0x1165, 0x11C1] }, +{ source: [0xB807], NFC: [0xB807], NFD: [0x1105, 0x1165, 0x11C2], NFKC: [0xB807], NFKD: [0x1105, 0x1165, 0x11C2] }, +{ source: [0xB808], NFC: [0xB808], NFD: [0x1105, 0x1166], NFKC: [0xB808], NFKD: [0x1105, 0x1166] }, +{ source: [0xB809], NFC: [0xB809], NFD: [0x1105, 0x1166, 0x11A8], NFKC: [0xB809], NFKD: [0x1105, 0x1166, 0x11A8] }, +{ source: [0xB80A], NFC: [0xB80A], NFD: [0x1105, 0x1166, 0x11A9], NFKC: [0xB80A], NFKD: [0x1105, 0x1166, 0x11A9] }, +{ source: [0xB80B], NFC: [0xB80B], NFD: [0x1105, 0x1166, 0x11AA], NFKC: [0xB80B], NFKD: [0x1105, 0x1166, 0x11AA] }, +{ source: [0xB80C], NFC: [0xB80C], NFD: [0x1105, 0x1166, 0x11AB], NFKC: [0xB80C], NFKD: [0x1105, 0x1166, 0x11AB] }, +{ source: [0xB80D], NFC: [0xB80D], NFD: [0x1105, 0x1166, 0x11AC], NFKC: [0xB80D], NFKD: [0x1105, 0x1166, 0x11AC] }, +{ source: [0xB80E], NFC: [0xB80E], NFD: [0x1105, 0x1166, 0x11AD], NFKC: [0xB80E], NFKD: [0x1105, 0x1166, 0x11AD] }, +{ source: [0xB80F], NFC: [0xB80F], NFD: [0x1105, 0x1166, 0x11AE], NFKC: [0xB80F], NFKD: [0x1105, 0x1166, 0x11AE] }, +{ source: [0xB810], NFC: [0xB810], NFD: [0x1105, 0x1166, 0x11AF], NFKC: [0xB810], NFKD: [0x1105, 0x1166, 0x11AF] }, +{ source: [0xB811], NFC: [0xB811], NFD: [0x1105, 0x1166, 0x11B0], NFKC: [0xB811], NFKD: [0x1105, 0x1166, 0x11B0] }, +{ source: [0xB812], NFC: [0xB812], NFD: [0x1105, 0x1166, 0x11B1], NFKC: [0xB812], NFKD: [0x1105, 0x1166, 0x11B1] }, +{ source: [0xB813], NFC: [0xB813], NFD: [0x1105, 0x1166, 0x11B2], NFKC: [0xB813], NFKD: [0x1105, 0x1166, 0x11B2] }, +{ source: [0xB814], NFC: [0xB814], NFD: [0x1105, 0x1166, 0x11B3], NFKC: [0xB814], NFKD: [0x1105, 0x1166, 0x11B3] }, +{ source: [0xB815], NFC: [0xB815], NFD: [0x1105, 0x1166, 0x11B4], NFKC: [0xB815], NFKD: [0x1105, 0x1166, 0x11B4] }, +{ source: [0xB816], NFC: [0xB816], NFD: [0x1105, 0x1166, 0x11B5], NFKC: [0xB816], NFKD: [0x1105, 0x1166, 0x11B5] }, +{ source: [0xB817], NFC: [0xB817], NFD: [0x1105, 0x1166, 0x11B6], NFKC: [0xB817], NFKD: [0x1105, 0x1166, 0x11B6] }, +{ source: [0xB818], NFC: [0xB818], NFD: [0x1105, 0x1166, 0x11B7], NFKC: [0xB818], NFKD: [0x1105, 0x1166, 0x11B7] }, +{ source: [0xB819], NFC: [0xB819], NFD: [0x1105, 0x1166, 0x11B8], NFKC: [0xB819], NFKD: [0x1105, 0x1166, 0x11B8] }, +{ source: [0xB81A], NFC: [0xB81A], NFD: [0x1105, 0x1166, 0x11B9], NFKC: [0xB81A], NFKD: [0x1105, 0x1166, 0x11B9] }, +{ source: [0xB81B], NFC: [0xB81B], NFD: [0x1105, 0x1166, 0x11BA], NFKC: [0xB81B], NFKD: [0x1105, 0x1166, 0x11BA] }, +{ source: [0xB81C], NFC: [0xB81C], NFD: [0x1105, 0x1166, 0x11BB], NFKC: [0xB81C], NFKD: [0x1105, 0x1166, 0x11BB] }, +{ source: [0xB81D], NFC: [0xB81D], NFD: [0x1105, 0x1166, 0x11BC], NFKC: [0xB81D], NFKD: [0x1105, 0x1166, 0x11BC] }, +{ source: [0xB81E], NFC: [0xB81E], NFD: [0x1105, 0x1166, 0x11BD], NFKC: [0xB81E], NFKD: [0x1105, 0x1166, 0x11BD] }, +{ source: [0xB81F], NFC: [0xB81F], NFD: [0x1105, 0x1166, 0x11BE], NFKC: [0xB81F], NFKD: [0x1105, 0x1166, 0x11BE] }, +{ source: [0xB820], NFC: [0xB820], NFD: [0x1105, 0x1166, 0x11BF], NFKC: [0xB820], NFKD: [0x1105, 0x1166, 0x11BF] }, +{ source: [0xB821], NFC: [0xB821], NFD: [0x1105, 0x1166, 0x11C0], NFKC: [0xB821], NFKD: [0x1105, 0x1166, 0x11C0] }, +{ source: [0xB822], NFC: [0xB822], NFD: [0x1105, 0x1166, 0x11C1], NFKC: [0xB822], NFKD: [0x1105, 0x1166, 0x11C1] }, +{ source: [0xB823], NFC: [0xB823], NFD: [0x1105, 0x1166, 0x11C2], NFKC: [0xB823], NFKD: [0x1105, 0x1166, 0x11C2] }, +{ source: [0xB824], NFC: [0xB824], NFD: [0x1105, 0x1167], NFKC: [0xB824], NFKD: [0x1105, 0x1167] }, +{ source: [0xB825], NFC: [0xB825], NFD: [0x1105, 0x1167, 0x11A8], NFKC: [0xB825], NFKD: [0x1105, 0x1167, 0x11A8] }, +{ source: [0xB826], NFC: [0xB826], NFD: [0x1105, 0x1167, 0x11A9], NFKC: [0xB826], NFKD: [0x1105, 0x1167, 0x11A9] }, +{ source: [0xB827], NFC: [0xB827], NFD: [0x1105, 0x1167, 0x11AA], NFKC: [0xB827], NFKD: [0x1105, 0x1167, 0x11AA] }, +{ source: [0xB828], NFC: [0xB828], NFD: [0x1105, 0x1167, 0x11AB], NFKC: [0xB828], NFKD: [0x1105, 0x1167, 0x11AB] }, +{ source: [0xB829], NFC: [0xB829], NFD: [0x1105, 0x1167, 0x11AC], NFKC: [0xB829], NFKD: [0x1105, 0x1167, 0x11AC] }, +{ source: [0xB82A], NFC: [0xB82A], NFD: [0x1105, 0x1167, 0x11AD], NFKC: [0xB82A], NFKD: [0x1105, 0x1167, 0x11AD] }, +{ source: [0xB82B], NFC: [0xB82B], NFD: [0x1105, 0x1167, 0x11AE], NFKC: [0xB82B], NFKD: [0x1105, 0x1167, 0x11AE] }, +{ source: [0xB82C], NFC: [0xB82C], NFD: [0x1105, 0x1167, 0x11AF], NFKC: [0xB82C], NFKD: [0x1105, 0x1167, 0x11AF] }, +{ source: [0xB82D], NFC: [0xB82D], NFD: [0x1105, 0x1167, 0x11B0], NFKC: [0xB82D], NFKD: [0x1105, 0x1167, 0x11B0] }, +{ source: [0xB82E], NFC: [0xB82E], NFD: [0x1105, 0x1167, 0x11B1], NFKC: [0xB82E], NFKD: [0x1105, 0x1167, 0x11B1] }, +{ source: [0xB82F], NFC: [0xB82F], NFD: [0x1105, 0x1167, 0x11B2], NFKC: [0xB82F], NFKD: [0x1105, 0x1167, 0x11B2] }, +{ source: [0xB830], NFC: [0xB830], NFD: [0x1105, 0x1167, 0x11B3], NFKC: [0xB830], NFKD: [0x1105, 0x1167, 0x11B3] }, +{ source: [0xB831], NFC: [0xB831], NFD: [0x1105, 0x1167, 0x11B4], NFKC: [0xB831], NFKD: [0x1105, 0x1167, 0x11B4] }, +{ source: [0xB832], NFC: [0xB832], NFD: [0x1105, 0x1167, 0x11B5], NFKC: [0xB832], NFKD: [0x1105, 0x1167, 0x11B5] }, +{ source: [0xB833], NFC: [0xB833], NFD: [0x1105, 0x1167, 0x11B6], NFKC: [0xB833], NFKD: [0x1105, 0x1167, 0x11B6] }, +{ source: [0xB834], NFC: [0xB834], NFD: [0x1105, 0x1167, 0x11B7], NFKC: [0xB834], NFKD: [0x1105, 0x1167, 0x11B7] }, +{ source: [0xB835], NFC: [0xB835], NFD: [0x1105, 0x1167, 0x11B8], NFKC: [0xB835], NFKD: [0x1105, 0x1167, 0x11B8] }, +{ source: [0xB836], NFC: [0xB836], NFD: [0x1105, 0x1167, 0x11B9], NFKC: [0xB836], NFKD: [0x1105, 0x1167, 0x11B9] }, +{ source: [0xB837], NFC: [0xB837], NFD: [0x1105, 0x1167, 0x11BA], NFKC: [0xB837], NFKD: [0x1105, 0x1167, 0x11BA] }, +{ source: [0xB838], NFC: [0xB838], NFD: [0x1105, 0x1167, 0x11BB], NFKC: [0xB838], NFKD: [0x1105, 0x1167, 0x11BB] }, +{ source: [0xB839], NFC: [0xB839], NFD: [0x1105, 0x1167, 0x11BC], NFKC: [0xB839], NFKD: [0x1105, 0x1167, 0x11BC] }, +{ source: [0xB83A], NFC: [0xB83A], NFD: [0x1105, 0x1167, 0x11BD], NFKC: [0xB83A], NFKD: [0x1105, 0x1167, 0x11BD] }, +{ source: [0xB83B], NFC: [0xB83B], NFD: [0x1105, 0x1167, 0x11BE], NFKC: [0xB83B], NFKD: [0x1105, 0x1167, 0x11BE] }, +{ source: [0xB83C], NFC: [0xB83C], NFD: [0x1105, 0x1167, 0x11BF], NFKC: [0xB83C], NFKD: [0x1105, 0x1167, 0x11BF] }, +{ source: [0xB83D], NFC: [0xB83D], NFD: [0x1105, 0x1167, 0x11C0], NFKC: [0xB83D], NFKD: [0x1105, 0x1167, 0x11C0] }, +{ source: [0xB83E], NFC: [0xB83E], NFD: [0x1105, 0x1167, 0x11C1], NFKC: [0xB83E], NFKD: [0x1105, 0x1167, 0x11C1] }, +{ source: [0xB83F], NFC: [0xB83F], NFD: [0x1105, 0x1167, 0x11C2], NFKC: [0xB83F], NFKD: [0x1105, 0x1167, 0x11C2] }, +{ source: [0xB840], NFC: [0xB840], NFD: [0x1105, 0x1168], NFKC: [0xB840], NFKD: [0x1105, 0x1168] }, +{ source: [0xB841], NFC: [0xB841], NFD: [0x1105, 0x1168, 0x11A8], NFKC: [0xB841], NFKD: [0x1105, 0x1168, 0x11A8] }, +{ source: [0xB842], NFC: [0xB842], NFD: [0x1105, 0x1168, 0x11A9], NFKC: [0xB842], NFKD: [0x1105, 0x1168, 0x11A9] }, +{ source: [0xB843], NFC: [0xB843], NFD: [0x1105, 0x1168, 0x11AA], NFKC: [0xB843], NFKD: [0x1105, 0x1168, 0x11AA] }, +{ source: [0xB844], NFC: [0xB844], NFD: [0x1105, 0x1168, 0x11AB], NFKC: [0xB844], NFKD: [0x1105, 0x1168, 0x11AB] }, +{ source: [0xB845], NFC: [0xB845], NFD: [0x1105, 0x1168, 0x11AC], NFKC: [0xB845], NFKD: [0x1105, 0x1168, 0x11AC] }, +{ source: [0xB846], NFC: [0xB846], NFD: [0x1105, 0x1168, 0x11AD], NFKC: [0xB846], NFKD: [0x1105, 0x1168, 0x11AD] }, +{ source: [0xB847], NFC: [0xB847], NFD: [0x1105, 0x1168, 0x11AE], NFKC: [0xB847], NFKD: [0x1105, 0x1168, 0x11AE] }, +{ source: [0xB848], NFC: [0xB848], NFD: [0x1105, 0x1168, 0x11AF], NFKC: [0xB848], NFKD: [0x1105, 0x1168, 0x11AF] }, +{ source: [0xB849], NFC: [0xB849], NFD: [0x1105, 0x1168, 0x11B0], NFKC: [0xB849], NFKD: [0x1105, 0x1168, 0x11B0] }, +{ source: [0xB84A], NFC: [0xB84A], NFD: [0x1105, 0x1168, 0x11B1], NFKC: [0xB84A], NFKD: [0x1105, 0x1168, 0x11B1] }, +{ source: [0xB84B], NFC: [0xB84B], NFD: [0x1105, 0x1168, 0x11B2], NFKC: [0xB84B], NFKD: [0x1105, 0x1168, 0x11B2] }, +{ source: [0xB84C], NFC: [0xB84C], NFD: [0x1105, 0x1168, 0x11B3], NFKC: [0xB84C], NFKD: [0x1105, 0x1168, 0x11B3] }, +{ source: [0xB84D], NFC: [0xB84D], NFD: [0x1105, 0x1168, 0x11B4], NFKC: [0xB84D], NFKD: [0x1105, 0x1168, 0x11B4] }, +{ source: [0xB84E], NFC: [0xB84E], NFD: [0x1105, 0x1168, 0x11B5], NFKC: [0xB84E], NFKD: [0x1105, 0x1168, 0x11B5] }, +{ source: [0xB84F], NFC: [0xB84F], NFD: [0x1105, 0x1168, 0x11B6], NFKC: [0xB84F], NFKD: [0x1105, 0x1168, 0x11B6] }, +{ source: [0xB850], NFC: [0xB850], NFD: [0x1105, 0x1168, 0x11B7], NFKC: [0xB850], NFKD: [0x1105, 0x1168, 0x11B7] }, +{ source: [0xB851], NFC: [0xB851], NFD: [0x1105, 0x1168, 0x11B8], NFKC: [0xB851], NFKD: [0x1105, 0x1168, 0x11B8] }, +{ source: [0xB852], NFC: [0xB852], NFD: [0x1105, 0x1168, 0x11B9], NFKC: [0xB852], NFKD: [0x1105, 0x1168, 0x11B9] }, +{ source: [0xB853], NFC: [0xB853], NFD: [0x1105, 0x1168, 0x11BA], NFKC: [0xB853], NFKD: [0x1105, 0x1168, 0x11BA] }, +{ source: [0xB854], NFC: [0xB854], NFD: [0x1105, 0x1168, 0x11BB], NFKC: [0xB854], NFKD: [0x1105, 0x1168, 0x11BB] }, +{ source: [0xB855], NFC: [0xB855], NFD: [0x1105, 0x1168, 0x11BC], NFKC: [0xB855], NFKD: [0x1105, 0x1168, 0x11BC] }, +{ source: [0xB856], NFC: [0xB856], NFD: [0x1105, 0x1168, 0x11BD], NFKC: [0xB856], NFKD: [0x1105, 0x1168, 0x11BD] }, +{ source: [0xB857], NFC: [0xB857], NFD: [0x1105, 0x1168, 0x11BE], NFKC: [0xB857], NFKD: [0x1105, 0x1168, 0x11BE] }, +{ source: [0xB858], NFC: [0xB858], NFD: [0x1105, 0x1168, 0x11BF], NFKC: [0xB858], NFKD: [0x1105, 0x1168, 0x11BF] }, +{ source: [0xB859], NFC: [0xB859], NFD: [0x1105, 0x1168, 0x11C0], NFKC: [0xB859], NFKD: [0x1105, 0x1168, 0x11C0] }, +{ source: [0xB85A], NFC: [0xB85A], NFD: [0x1105, 0x1168, 0x11C1], NFKC: [0xB85A], NFKD: [0x1105, 0x1168, 0x11C1] }, +{ source: [0xB85B], NFC: [0xB85B], NFD: [0x1105, 0x1168, 0x11C2], NFKC: [0xB85B], NFKD: [0x1105, 0x1168, 0x11C2] }, +{ source: [0xB85C], NFC: [0xB85C], NFD: [0x1105, 0x1169], NFKC: [0xB85C], NFKD: [0x1105, 0x1169] }, +{ source: [0xB85D], NFC: [0xB85D], NFD: [0x1105, 0x1169, 0x11A8], NFKC: [0xB85D], NFKD: [0x1105, 0x1169, 0x11A8] }, +{ source: [0xB85E], NFC: [0xB85E], NFD: [0x1105, 0x1169, 0x11A9], NFKC: [0xB85E], NFKD: [0x1105, 0x1169, 0x11A9] }, +{ source: [0xB85F], NFC: [0xB85F], NFD: [0x1105, 0x1169, 0x11AA], NFKC: [0xB85F], NFKD: [0x1105, 0x1169, 0x11AA] }, +{ source: [0xB860], NFC: [0xB860], NFD: [0x1105, 0x1169, 0x11AB], NFKC: [0xB860], NFKD: [0x1105, 0x1169, 0x11AB] }, +{ source: [0xB861], NFC: [0xB861], NFD: [0x1105, 0x1169, 0x11AC], NFKC: [0xB861], NFKD: [0x1105, 0x1169, 0x11AC] }, +{ source: [0xB862], NFC: [0xB862], NFD: [0x1105, 0x1169, 0x11AD], NFKC: [0xB862], NFKD: [0x1105, 0x1169, 0x11AD] }, +{ source: [0xB863], NFC: [0xB863], NFD: [0x1105, 0x1169, 0x11AE], NFKC: [0xB863], NFKD: [0x1105, 0x1169, 0x11AE] }, +{ source: [0xB864], NFC: [0xB864], NFD: [0x1105, 0x1169, 0x11AF], NFKC: [0xB864], NFKD: [0x1105, 0x1169, 0x11AF] }, +{ source: [0xB865], NFC: [0xB865], NFD: [0x1105, 0x1169, 0x11B0], NFKC: [0xB865], NFKD: [0x1105, 0x1169, 0x11B0] }, +{ source: [0xB866], NFC: [0xB866], NFD: [0x1105, 0x1169, 0x11B1], NFKC: [0xB866], NFKD: [0x1105, 0x1169, 0x11B1] }, +{ source: [0xB867], NFC: [0xB867], NFD: [0x1105, 0x1169, 0x11B2], NFKC: [0xB867], NFKD: [0x1105, 0x1169, 0x11B2] }, +{ source: [0xB868], NFC: [0xB868], NFD: [0x1105, 0x1169, 0x11B3], NFKC: [0xB868], NFKD: [0x1105, 0x1169, 0x11B3] }, +{ source: [0xB869], NFC: [0xB869], NFD: [0x1105, 0x1169, 0x11B4], NFKC: [0xB869], NFKD: [0x1105, 0x1169, 0x11B4] }, +{ source: [0xB86A], NFC: [0xB86A], NFD: [0x1105, 0x1169, 0x11B5], NFKC: [0xB86A], NFKD: [0x1105, 0x1169, 0x11B5] }, +{ source: [0xB86B], NFC: [0xB86B], NFD: [0x1105, 0x1169, 0x11B6], NFKC: [0xB86B], NFKD: [0x1105, 0x1169, 0x11B6] }, +{ source: [0xB86C], NFC: [0xB86C], NFD: [0x1105, 0x1169, 0x11B7], NFKC: [0xB86C], NFKD: [0x1105, 0x1169, 0x11B7] }, +{ source: [0xB86D], NFC: [0xB86D], NFD: [0x1105, 0x1169, 0x11B8], NFKC: [0xB86D], NFKD: [0x1105, 0x1169, 0x11B8] }, +{ source: [0xB86E], NFC: [0xB86E], NFD: [0x1105, 0x1169, 0x11B9], NFKC: [0xB86E], NFKD: [0x1105, 0x1169, 0x11B9] }, +{ source: [0xB86F], NFC: [0xB86F], NFD: [0x1105, 0x1169, 0x11BA], NFKC: [0xB86F], NFKD: [0x1105, 0x1169, 0x11BA] }, +{ source: [0xB870], NFC: [0xB870], NFD: [0x1105, 0x1169, 0x11BB], NFKC: [0xB870], NFKD: [0x1105, 0x1169, 0x11BB] }, +{ source: [0xB871], NFC: [0xB871], NFD: [0x1105, 0x1169, 0x11BC], NFKC: [0xB871], NFKD: [0x1105, 0x1169, 0x11BC] }, +{ source: [0xB872], NFC: [0xB872], NFD: [0x1105, 0x1169, 0x11BD], NFKC: [0xB872], NFKD: [0x1105, 0x1169, 0x11BD] }, +{ source: [0xB873], NFC: [0xB873], NFD: [0x1105, 0x1169, 0x11BE], NFKC: [0xB873], NFKD: [0x1105, 0x1169, 0x11BE] }, +{ source: [0xB874], NFC: [0xB874], NFD: [0x1105, 0x1169, 0x11BF], NFKC: [0xB874], NFKD: [0x1105, 0x1169, 0x11BF] }, +{ source: [0xB875], NFC: [0xB875], NFD: [0x1105, 0x1169, 0x11C0], NFKC: [0xB875], NFKD: [0x1105, 0x1169, 0x11C0] }, +{ source: [0xB876], NFC: [0xB876], NFD: [0x1105, 0x1169, 0x11C1], NFKC: [0xB876], NFKD: [0x1105, 0x1169, 0x11C1] }, +{ source: [0xB877], NFC: [0xB877], NFD: [0x1105, 0x1169, 0x11C2], NFKC: [0xB877], NFKD: [0x1105, 0x1169, 0x11C2] }, +{ source: [0xB878], NFC: [0xB878], NFD: [0x1105, 0x116A], NFKC: [0xB878], NFKD: [0x1105, 0x116A] }, +{ source: [0xB879], NFC: [0xB879], NFD: [0x1105, 0x116A, 0x11A8], NFKC: [0xB879], NFKD: [0x1105, 0x116A, 0x11A8] }, +{ source: [0xB87A], NFC: [0xB87A], NFD: [0x1105, 0x116A, 0x11A9], NFKC: [0xB87A], NFKD: [0x1105, 0x116A, 0x11A9] }, +{ source: [0xB87B], NFC: [0xB87B], NFD: [0x1105, 0x116A, 0x11AA], NFKC: [0xB87B], NFKD: [0x1105, 0x116A, 0x11AA] }, +{ source: [0xB87C], NFC: [0xB87C], NFD: [0x1105, 0x116A, 0x11AB], NFKC: [0xB87C], NFKD: [0x1105, 0x116A, 0x11AB] }, +{ source: [0xB87D], NFC: [0xB87D], NFD: [0x1105, 0x116A, 0x11AC], NFKC: [0xB87D], NFKD: [0x1105, 0x116A, 0x11AC] }, +{ source: [0xB87E], NFC: [0xB87E], NFD: [0x1105, 0x116A, 0x11AD], NFKC: [0xB87E], NFKD: [0x1105, 0x116A, 0x11AD] }, +{ source: [0xB87F], NFC: [0xB87F], NFD: [0x1105, 0x116A, 0x11AE], NFKC: [0xB87F], NFKD: [0x1105, 0x116A, 0x11AE] }, +{ source: [0xB880], NFC: [0xB880], NFD: [0x1105, 0x116A, 0x11AF], NFKC: [0xB880], NFKD: [0x1105, 0x116A, 0x11AF] }, +{ source: [0xB881], NFC: [0xB881], NFD: [0x1105, 0x116A, 0x11B0], NFKC: [0xB881], NFKD: [0x1105, 0x116A, 0x11B0] }, +{ source: [0xB882], NFC: [0xB882], NFD: [0x1105, 0x116A, 0x11B1], NFKC: [0xB882], NFKD: [0x1105, 0x116A, 0x11B1] }, +{ source: [0xB883], NFC: [0xB883], NFD: [0x1105, 0x116A, 0x11B2], NFKC: [0xB883], NFKD: [0x1105, 0x116A, 0x11B2] }, +{ source: [0xB884], NFC: [0xB884], NFD: [0x1105, 0x116A, 0x11B3], NFKC: [0xB884], NFKD: [0x1105, 0x116A, 0x11B3] }, +{ source: [0xB885], NFC: [0xB885], NFD: [0x1105, 0x116A, 0x11B4], NFKC: [0xB885], NFKD: [0x1105, 0x116A, 0x11B4] }, +{ source: [0xB886], NFC: [0xB886], NFD: [0x1105, 0x116A, 0x11B5], NFKC: [0xB886], NFKD: [0x1105, 0x116A, 0x11B5] }, +{ source: [0xB887], NFC: [0xB887], NFD: [0x1105, 0x116A, 0x11B6], NFKC: [0xB887], NFKD: [0x1105, 0x116A, 0x11B6] }, +{ source: [0xB888], NFC: [0xB888], NFD: [0x1105, 0x116A, 0x11B7], NFKC: [0xB888], NFKD: [0x1105, 0x116A, 0x11B7] }, +{ source: [0xB889], NFC: [0xB889], NFD: [0x1105, 0x116A, 0x11B8], NFKC: [0xB889], NFKD: [0x1105, 0x116A, 0x11B8] }, +{ source: [0xB88A], NFC: [0xB88A], NFD: [0x1105, 0x116A, 0x11B9], NFKC: [0xB88A], NFKD: [0x1105, 0x116A, 0x11B9] }, +{ source: [0xB88B], NFC: [0xB88B], NFD: [0x1105, 0x116A, 0x11BA], NFKC: [0xB88B], NFKD: [0x1105, 0x116A, 0x11BA] }, +{ source: [0xB88C], NFC: [0xB88C], NFD: [0x1105, 0x116A, 0x11BB], NFKC: [0xB88C], NFKD: [0x1105, 0x116A, 0x11BB] }, +{ source: [0xB88D], NFC: [0xB88D], NFD: [0x1105, 0x116A, 0x11BC], NFKC: [0xB88D], NFKD: [0x1105, 0x116A, 0x11BC] }, +{ source: [0xB88E], NFC: [0xB88E], NFD: [0x1105, 0x116A, 0x11BD], NFKC: [0xB88E], NFKD: [0x1105, 0x116A, 0x11BD] }, +{ source: [0xB88F], NFC: [0xB88F], NFD: [0x1105, 0x116A, 0x11BE], NFKC: [0xB88F], NFKD: [0x1105, 0x116A, 0x11BE] }, +{ source: [0xB890], NFC: [0xB890], NFD: [0x1105, 0x116A, 0x11BF], NFKC: [0xB890], NFKD: [0x1105, 0x116A, 0x11BF] }, +{ source: [0xB891], NFC: [0xB891], NFD: [0x1105, 0x116A, 0x11C0], NFKC: [0xB891], NFKD: [0x1105, 0x116A, 0x11C0] }, +{ source: [0xB892], NFC: [0xB892], NFD: [0x1105, 0x116A, 0x11C1], NFKC: [0xB892], NFKD: [0x1105, 0x116A, 0x11C1] }, +{ source: [0xB893], NFC: [0xB893], NFD: [0x1105, 0x116A, 0x11C2], NFKC: [0xB893], NFKD: [0x1105, 0x116A, 0x11C2] }, +{ source: [0xB894], NFC: [0xB894], NFD: [0x1105, 0x116B], NFKC: [0xB894], NFKD: [0x1105, 0x116B] }, +{ source: [0xB895], NFC: [0xB895], NFD: [0x1105, 0x116B, 0x11A8], NFKC: [0xB895], NFKD: [0x1105, 0x116B, 0x11A8] }, +{ source: [0xB896], NFC: [0xB896], NFD: [0x1105, 0x116B, 0x11A9], NFKC: [0xB896], NFKD: [0x1105, 0x116B, 0x11A9] }, +{ source: [0xB897], NFC: [0xB897], NFD: [0x1105, 0x116B, 0x11AA], NFKC: [0xB897], NFKD: [0x1105, 0x116B, 0x11AA] }, +{ source: [0xB898], NFC: [0xB898], NFD: [0x1105, 0x116B, 0x11AB], NFKC: [0xB898], NFKD: [0x1105, 0x116B, 0x11AB] }, +{ source: [0xB899], NFC: [0xB899], NFD: [0x1105, 0x116B, 0x11AC], NFKC: [0xB899], NFKD: [0x1105, 0x116B, 0x11AC] }, +{ source: [0xB89A], NFC: [0xB89A], NFD: [0x1105, 0x116B, 0x11AD], NFKC: [0xB89A], NFKD: [0x1105, 0x116B, 0x11AD] }, +{ source: [0xB89B], NFC: [0xB89B], NFD: [0x1105, 0x116B, 0x11AE], NFKC: [0xB89B], NFKD: [0x1105, 0x116B, 0x11AE] }, +{ source: [0xB89C], NFC: [0xB89C], NFD: [0x1105, 0x116B, 0x11AF], NFKC: [0xB89C], NFKD: [0x1105, 0x116B, 0x11AF] }, +{ source: [0xB89D], NFC: [0xB89D], NFD: [0x1105, 0x116B, 0x11B0], NFKC: [0xB89D], NFKD: [0x1105, 0x116B, 0x11B0] }, +{ source: [0xB89E], NFC: [0xB89E], NFD: [0x1105, 0x116B, 0x11B1], NFKC: [0xB89E], NFKD: [0x1105, 0x116B, 0x11B1] }, +{ source: [0xB89F], NFC: [0xB89F], NFD: [0x1105, 0x116B, 0x11B2], NFKC: [0xB89F], NFKD: [0x1105, 0x116B, 0x11B2] }, +{ source: [0xB8A0], NFC: [0xB8A0], NFD: [0x1105, 0x116B, 0x11B3], NFKC: [0xB8A0], NFKD: [0x1105, 0x116B, 0x11B3] }, +{ source: [0xB8A1], NFC: [0xB8A1], NFD: [0x1105, 0x116B, 0x11B4], NFKC: [0xB8A1], NFKD: [0x1105, 0x116B, 0x11B4] }, +{ source: [0xB8A2], NFC: [0xB8A2], NFD: [0x1105, 0x116B, 0x11B5], NFKC: [0xB8A2], NFKD: [0x1105, 0x116B, 0x11B5] }, +{ source: [0xB8A3], NFC: [0xB8A3], NFD: [0x1105, 0x116B, 0x11B6], NFKC: [0xB8A3], NFKD: [0x1105, 0x116B, 0x11B6] }, +{ source: [0xB8A4], NFC: [0xB8A4], NFD: [0x1105, 0x116B, 0x11B7], NFKC: [0xB8A4], NFKD: [0x1105, 0x116B, 0x11B7] }, +{ source: [0xB8A5], NFC: [0xB8A5], NFD: [0x1105, 0x116B, 0x11B8], NFKC: [0xB8A5], NFKD: [0x1105, 0x116B, 0x11B8] }, +{ source: [0xB8A6], NFC: [0xB8A6], NFD: [0x1105, 0x116B, 0x11B9], NFKC: [0xB8A6], NFKD: [0x1105, 0x116B, 0x11B9] }, +{ source: [0xB8A7], NFC: [0xB8A7], NFD: [0x1105, 0x116B, 0x11BA], NFKC: [0xB8A7], NFKD: [0x1105, 0x116B, 0x11BA] }, +{ source: [0xB8A8], NFC: [0xB8A8], NFD: [0x1105, 0x116B, 0x11BB], NFKC: [0xB8A8], NFKD: [0x1105, 0x116B, 0x11BB] }, +{ source: [0xB8A9], NFC: [0xB8A9], NFD: [0x1105, 0x116B, 0x11BC], NFKC: [0xB8A9], NFKD: [0x1105, 0x116B, 0x11BC] }, +{ source: [0xB8AA], NFC: [0xB8AA], NFD: [0x1105, 0x116B, 0x11BD], NFKC: [0xB8AA], NFKD: [0x1105, 0x116B, 0x11BD] }, +{ source: [0xB8AB], NFC: [0xB8AB], NFD: [0x1105, 0x116B, 0x11BE], NFKC: [0xB8AB], NFKD: [0x1105, 0x116B, 0x11BE] }, +{ source: [0xB8AC], NFC: [0xB8AC], NFD: [0x1105, 0x116B, 0x11BF], NFKC: [0xB8AC], NFKD: [0x1105, 0x116B, 0x11BF] }, +{ source: [0xB8AD], NFC: [0xB8AD], NFD: [0x1105, 0x116B, 0x11C0], NFKC: [0xB8AD], NFKD: [0x1105, 0x116B, 0x11C0] }, +{ source: [0xB8AE], NFC: [0xB8AE], NFD: [0x1105, 0x116B, 0x11C1], NFKC: [0xB8AE], NFKD: [0x1105, 0x116B, 0x11C1] }, +{ source: [0xB8AF], NFC: [0xB8AF], NFD: [0x1105, 0x116B, 0x11C2], NFKC: [0xB8AF], NFKD: [0x1105, 0x116B, 0x11C2] }, +{ source: [0xB8B0], NFC: [0xB8B0], NFD: [0x1105, 0x116C], NFKC: [0xB8B0], NFKD: [0x1105, 0x116C] }, +{ source: [0xB8B1], NFC: [0xB8B1], NFD: [0x1105, 0x116C, 0x11A8], NFKC: [0xB8B1], NFKD: [0x1105, 0x116C, 0x11A8] }, +{ source: [0xB8B2], NFC: [0xB8B2], NFD: [0x1105, 0x116C, 0x11A9], NFKC: [0xB8B2], NFKD: [0x1105, 0x116C, 0x11A9] }, +{ source: [0xB8B3], NFC: [0xB8B3], NFD: [0x1105, 0x116C, 0x11AA], NFKC: [0xB8B3], NFKD: [0x1105, 0x116C, 0x11AA] }, +{ source: [0xB8B4], NFC: [0xB8B4], NFD: [0x1105, 0x116C, 0x11AB], NFKC: [0xB8B4], NFKD: [0x1105, 0x116C, 0x11AB] }, +{ source: [0xB8B5], NFC: [0xB8B5], NFD: [0x1105, 0x116C, 0x11AC], NFKC: [0xB8B5], NFKD: [0x1105, 0x116C, 0x11AC] }, +{ source: [0xB8B6], NFC: [0xB8B6], NFD: [0x1105, 0x116C, 0x11AD], NFKC: [0xB8B6], NFKD: [0x1105, 0x116C, 0x11AD] }, +{ source: [0xB8B7], NFC: [0xB8B7], NFD: [0x1105, 0x116C, 0x11AE], NFKC: [0xB8B7], NFKD: [0x1105, 0x116C, 0x11AE] }, +{ source: [0xB8B8], NFC: [0xB8B8], NFD: [0x1105, 0x116C, 0x11AF], NFKC: [0xB8B8], NFKD: [0x1105, 0x116C, 0x11AF] }, +{ source: [0xB8B9], NFC: [0xB8B9], NFD: [0x1105, 0x116C, 0x11B0], NFKC: [0xB8B9], NFKD: [0x1105, 0x116C, 0x11B0] }, +{ source: [0xB8BA], NFC: [0xB8BA], NFD: [0x1105, 0x116C, 0x11B1], NFKC: [0xB8BA], NFKD: [0x1105, 0x116C, 0x11B1] }, +{ source: [0xB8BB], NFC: [0xB8BB], NFD: [0x1105, 0x116C, 0x11B2], NFKC: [0xB8BB], NFKD: [0x1105, 0x116C, 0x11B2] }, +{ source: [0xB8BC], NFC: [0xB8BC], NFD: [0x1105, 0x116C, 0x11B3], NFKC: [0xB8BC], NFKD: [0x1105, 0x116C, 0x11B3] }, +{ source: [0xB8BD], NFC: [0xB8BD], NFD: [0x1105, 0x116C, 0x11B4], NFKC: [0xB8BD], NFKD: [0x1105, 0x116C, 0x11B4] }, +{ source: [0xB8BE], NFC: [0xB8BE], NFD: [0x1105, 0x116C, 0x11B5], NFKC: [0xB8BE], NFKD: [0x1105, 0x116C, 0x11B5] }, +{ source: [0xB8BF], NFC: [0xB8BF], NFD: [0x1105, 0x116C, 0x11B6], NFKC: [0xB8BF], NFKD: [0x1105, 0x116C, 0x11B6] }, +{ source: [0xB8C0], NFC: [0xB8C0], NFD: [0x1105, 0x116C, 0x11B7], NFKC: [0xB8C0], NFKD: [0x1105, 0x116C, 0x11B7] }, +{ source: [0xB8C1], NFC: [0xB8C1], NFD: [0x1105, 0x116C, 0x11B8], NFKC: [0xB8C1], NFKD: [0x1105, 0x116C, 0x11B8] }, +{ source: [0xB8C2], NFC: [0xB8C2], NFD: [0x1105, 0x116C, 0x11B9], NFKC: [0xB8C2], NFKD: [0x1105, 0x116C, 0x11B9] }, +{ source: [0xB8C3], NFC: [0xB8C3], NFD: [0x1105, 0x116C, 0x11BA], NFKC: [0xB8C3], NFKD: [0x1105, 0x116C, 0x11BA] }, +{ source: [0xB8C4], NFC: [0xB8C4], NFD: [0x1105, 0x116C, 0x11BB], NFKC: [0xB8C4], NFKD: [0x1105, 0x116C, 0x11BB] }, +{ source: [0xB8C5], NFC: [0xB8C5], NFD: [0x1105, 0x116C, 0x11BC], NFKC: [0xB8C5], NFKD: [0x1105, 0x116C, 0x11BC] }, +{ source: [0xB8C6], NFC: [0xB8C6], NFD: [0x1105, 0x116C, 0x11BD], NFKC: [0xB8C6], NFKD: [0x1105, 0x116C, 0x11BD] }, +{ source: [0xB8C7], NFC: [0xB8C7], NFD: [0x1105, 0x116C, 0x11BE], NFKC: [0xB8C7], NFKD: [0x1105, 0x116C, 0x11BE] }, +{ source: [0xB8C8], NFC: [0xB8C8], NFD: [0x1105, 0x116C, 0x11BF], NFKC: [0xB8C8], NFKD: [0x1105, 0x116C, 0x11BF] }, +{ source: [0xB8C9], NFC: [0xB8C9], NFD: [0x1105, 0x116C, 0x11C0], NFKC: [0xB8C9], NFKD: [0x1105, 0x116C, 0x11C0] }, +{ source: [0xB8CA], NFC: [0xB8CA], NFD: [0x1105, 0x116C, 0x11C1], NFKC: [0xB8CA], NFKD: [0x1105, 0x116C, 0x11C1] }, +{ source: [0xB8CB], NFC: [0xB8CB], NFD: [0x1105, 0x116C, 0x11C2], NFKC: [0xB8CB], NFKD: [0x1105, 0x116C, 0x11C2] }, +{ source: [0xB8CC], NFC: [0xB8CC], NFD: [0x1105, 0x116D], NFKC: [0xB8CC], NFKD: [0x1105, 0x116D] }, +{ source: [0xB8CD], NFC: [0xB8CD], NFD: [0x1105, 0x116D, 0x11A8], NFKC: [0xB8CD], NFKD: [0x1105, 0x116D, 0x11A8] }, +{ source: [0xB8CE], NFC: [0xB8CE], NFD: [0x1105, 0x116D, 0x11A9], NFKC: [0xB8CE], NFKD: [0x1105, 0x116D, 0x11A9] }, +{ source: [0xB8CF], NFC: [0xB8CF], NFD: [0x1105, 0x116D, 0x11AA], NFKC: [0xB8CF], NFKD: [0x1105, 0x116D, 0x11AA] }, +{ source: [0xB8D0], NFC: [0xB8D0], NFD: [0x1105, 0x116D, 0x11AB], NFKC: [0xB8D0], NFKD: [0x1105, 0x116D, 0x11AB] }, +{ source: [0xB8D1], NFC: [0xB8D1], NFD: [0x1105, 0x116D, 0x11AC], NFKC: [0xB8D1], NFKD: [0x1105, 0x116D, 0x11AC] }, +{ source: [0xB8D2], NFC: [0xB8D2], NFD: [0x1105, 0x116D, 0x11AD], NFKC: [0xB8D2], NFKD: [0x1105, 0x116D, 0x11AD] }, +{ source: [0xB8D3], NFC: [0xB8D3], NFD: [0x1105, 0x116D, 0x11AE], NFKC: [0xB8D3], NFKD: [0x1105, 0x116D, 0x11AE] }, +{ source: [0xB8D4], NFC: [0xB8D4], NFD: [0x1105, 0x116D, 0x11AF], NFKC: [0xB8D4], NFKD: [0x1105, 0x116D, 0x11AF] }, +{ source: [0xB8D5], NFC: [0xB8D5], NFD: [0x1105, 0x116D, 0x11B0], NFKC: [0xB8D5], NFKD: [0x1105, 0x116D, 0x11B0] }, +{ source: [0xB8D6], NFC: [0xB8D6], NFD: [0x1105, 0x116D, 0x11B1], NFKC: [0xB8D6], NFKD: [0x1105, 0x116D, 0x11B1] }, +{ source: [0xB8D7], NFC: [0xB8D7], NFD: [0x1105, 0x116D, 0x11B2], NFKC: [0xB8D7], NFKD: [0x1105, 0x116D, 0x11B2] }, +{ source: [0xB8D8], NFC: [0xB8D8], NFD: [0x1105, 0x116D, 0x11B3], NFKC: [0xB8D8], NFKD: [0x1105, 0x116D, 0x11B3] }, +{ source: [0xB8D9], NFC: [0xB8D9], NFD: [0x1105, 0x116D, 0x11B4], NFKC: [0xB8D9], NFKD: [0x1105, 0x116D, 0x11B4] }, +{ source: [0xB8DA], NFC: [0xB8DA], NFD: [0x1105, 0x116D, 0x11B5], NFKC: [0xB8DA], NFKD: [0x1105, 0x116D, 0x11B5] }, +{ source: [0xB8DB], NFC: [0xB8DB], NFD: [0x1105, 0x116D, 0x11B6], NFKC: [0xB8DB], NFKD: [0x1105, 0x116D, 0x11B6] }, +{ source: [0xB8DC], NFC: [0xB8DC], NFD: [0x1105, 0x116D, 0x11B7], NFKC: [0xB8DC], NFKD: [0x1105, 0x116D, 0x11B7] }, +{ source: [0xB8DD], NFC: [0xB8DD], NFD: [0x1105, 0x116D, 0x11B8], NFKC: [0xB8DD], NFKD: [0x1105, 0x116D, 0x11B8] }, +{ source: [0xB8DE], NFC: [0xB8DE], NFD: [0x1105, 0x116D, 0x11B9], NFKC: [0xB8DE], NFKD: [0x1105, 0x116D, 0x11B9] }, +{ source: [0xB8DF], NFC: [0xB8DF], NFD: [0x1105, 0x116D, 0x11BA], NFKC: [0xB8DF], NFKD: [0x1105, 0x116D, 0x11BA] }, +{ source: [0xB8E0], NFC: [0xB8E0], NFD: [0x1105, 0x116D, 0x11BB], NFKC: [0xB8E0], NFKD: [0x1105, 0x116D, 0x11BB] }, +{ source: [0xB8E1], NFC: [0xB8E1], NFD: [0x1105, 0x116D, 0x11BC], NFKC: [0xB8E1], NFKD: [0x1105, 0x116D, 0x11BC] }, +{ source: [0xB8E2], NFC: [0xB8E2], NFD: [0x1105, 0x116D, 0x11BD], NFKC: [0xB8E2], NFKD: [0x1105, 0x116D, 0x11BD] }, +{ source: [0xB8E3], NFC: [0xB8E3], NFD: [0x1105, 0x116D, 0x11BE], NFKC: [0xB8E3], NFKD: [0x1105, 0x116D, 0x11BE] }, +{ source: [0xB8E4], NFC: [0xB8E4], NFD: [0x1105, 0x116D, 0x11BF], NFKC: [0xB8E4], NFKD: [0x1105, 0x116D, 0x11BF] }, +{ source: [0xB8E5], NFC: [0xB8E5], NFD: [0x1105, 0x116D, 0x11C0], NFKC: [0xB8E5], NFKD: [0x1105, 0x116D, 0x11C0] }, +{ source: [0xB8E6], NFC: [0xB8E6], NFD: [0x1105, 0x116D, 0x11C1], NFKC: [0xB8E6], NFKD: [0x1105, 0x116D, 0x11C1] }, +{ source: [0xB8E7], NFC: [0xB8E7], NFD: [0x1105, 0x116D, 0x11C2], NFKC: [0xB8E7], NFKD: [0x1105, 0x116D, 0x11C2] }, +{ source: [0xB8E8], NFC: [0xB8E8], NFD: [0x1105, 0x116E], NFKC: [0xB8E8], NFKD: [0x1105, 0x116E] }, +{ source: [0xB8E9], NFC: [0xB8E9], NFD: [0x1105, 0x116E, 0x11A8], NFKC: [0xB8E9], NFKD: [0x1105, 0x116E, 0x11A8] }, +{ source: [0xB8EA], NFC: [0xB8EA], NFD: [0x1105, 0x116E, 0x11A9], NFKC: [0xB8EA], NFKD: [0x1105, 0x116E, 0x11A9] }, +{ source: [0xB8EB], NFC: [0xB8EB], NFD: [0x1105, 0x116E, 0x11AA], NFKC: [0xB8EB], NFKD: [0x1105, 0x116E, 0x11AA] }, +{ source: [0xB8EC], NFC: [0xB8EC], NFD: [0x1105, 0x116E, 0x11AB], NFKC: [0xB8EC], NFKD: [0x1105, 0x116E, 0x11AB] }, +{ source: [0xB8ED], NFC: [0xB8ED], NFD: [0x1105, 0x116E, 0x11AC], NFKC: [0xB8ED], NFKD: [0x1105, 0x116E, 0x11AC] }, +{ source: [0xB8EE], NFC: [0xB8EE], NFD: [0x1105, 0x116E, 0x11AD], NFKC: [0xB8EE], NFKD: [0x1105, 0x116E, 0x11AD] }, +{ source: [0xB8EF], NFC: [0xB8EF], NFD: [0x1105, 0x116E, 0x11AE], NFKC: [0xB8EF], NFKD: [0x1105, 0x116E, 0x11AE] }, +{ source: [0xB8F0], NFC: [0xB8F0], NFD: [0x1105, 0x116E, 0x11AF], NFKC: [0xB8F0], NFKD: [0x1105, 0x116E, 0x11AF] }, +{ source: [0xB8F1], NFC: [0xB8F1], NFD: [0x1105, 0x116E, 0x11B0], NFKC: [0xB8F1], NFKD: [0x1105, 0x116E, 0x11B0] }, +{ source: [0xB8F2], NFC: [0xB8F2], NFD: [0x1105, 0x116E, 0x11B1], NFKC: [0xB8F2], NFKD: [0x1105, 0x116E, 0x11B1] }, +{ source: [0xB8F3], NFC: [0xB8F3], NFD: [0x1105, 0x116E, 0x11B2], NFKC: [0xB8F3], NFKD: [0x1105, 0x116E, 0x11B2] }, +{ source: [0xB8F4], NFC: [0xB8F4], NFD: [0x1105, 0x116E, 0x11B3], NFKC: [0xB8F4], NFKD: [0x1105, 0x116E, 0x11B3] }, +{ source: [0xB8F5], NFC: [0xB8F5], NFD: [0x1105, 0x116E, 0x11B4], NFKC: [0xB8F5], NFKD: [0x1105, 0x116E, 0x11B4] }, +{ source: [0xB8F6], NFC: [0xB8F6], NFD: [0x1105, 0x116E, 0x11B5], NFKC: [0xB8F6], NFKD: [0x1105, 0x116E, 0x11B5] }, +{ source: [0xB8F7], NFC: [0xB8F7], NFD: [0x1105, 0x116E, 0x11B6], NFKC: [0xB8F7], NFKD: [0x1105, 0x116E, 0x11B6] }, +{ source: [0xB8F8], NFC: [0xB8F8], NFD: [0x1105, 0x116E, 0x11B7], NFKC: [0xB8F8], NFKD: [0x1105, 0x116E, 0x11B7] }, +{ source: [0xB8F9], NFC: [0xB8F9], NFD: [0x1105, 0x116E, 0x11B8], NFKC: [0xB8F9], NFKD: [0x1105, 0x116E, 0x11B8] }, +{ source: [0xB8FA], NFC: [0xB8FA], NFD: [0x1105, 0x116E, 0x11B9], NFKC: [0xB8FA], NFKD: [0x1105, 0x116E, 0x11B9] }, +{ source: [0xB8FB], NFC: [0xB8FB], NFD: [0x1105, 0x116E, 0x11BA], NFKC: [0xB8FB], NFKD: [0x1105, 0x116E, 0x11BA] }, +{ source: [0xB8FC], NFC: [0xB8FC], NFD: [0x1105, 0x116E, 0x11BB], NFKC: [0xB8FC], NFKD: [0x1105, 0x116E, 0x11BB] }, +{ source: [0xB8FD], NFC: [0xB8FD], NFD: [0x1105, 0x116E, 0x11BC], NFKC: [0xB8FD], NFKD: [0x1105, 0x116E, 0x11BC] }, +{ source: [0xB8FE], NFC: [0xB8FE], NFD: [0x1105, 0x116E, 0x11BD], NFKC: [0xB8FE], NFKD: [0x1105, 0x116E, 0x11BD] }, +{ source: [0xB8FF], NFC: [0xB8FF], NFD: [0x1105, 0x116E, 0x11BE], NFKC: [0xB8FF], NFKD: [0x1105, 0x116E, 0x11BE] }, +{ source: [0xB900], NFC: [0xB900], NFD: [0x1105, 0x116E, 0x11BF], NFKC: [0xB900], NFKD: [0x1105, 0x116E, 0x11BF] }, +{ source: [0xB901], NFC: [0xB901], NFD: [0x1105, 0x116E, 0x11C0], NFKC: [0xB901], NFKD: [0x1105, 0x116E, 0x11C0] }, +{ source: [0xB902], NFC: [0xB902], NFD: [0x1105, 0x116E, 0x11C1], NFKC: [0xB902], NFKD: [0x1105, 0x116E, 0x11C1] }, +{ source: [0xB903], NFC: [0xB903], NFD: [0x1105, 0x116E, 0x11C2], NFKC: [0xB903], NFKD: [0x1105, 0x116E, 0x11C2] }, +{ source: [0xB904], NFC: [0xB904], NFD: [0x1105, 0x116F], NFKC: [0xB904], NFKD: [0x1105, 0x116F] }, +{ source: [0xB905], NFC: [0xB905], NFD: [0x1105, 0x116F, 0x11A8], NFKC: [0xB905], NFKD: [0x1105, 0x116F, 0x11A8] }, +{ source: [0xB906], NFC: [0xB906], NFD: [0x1105, 0x116F, 0x11A9], NFKC: [0xB906], NFKD: [0x1105, 0x116F, 0x11A9] }, +{ source: [0xB907], NFC: [0xB907], NFD: [0x1105, 0x116F, 0x11AA], NFKC: [0xB907], NFKD: [0x1105, 0x116F, 0x11AA] }, +{ source: [0xB908], NFC: [0xB908], NFD: [0x1105, 0x116F, 0x11AB], NFKC: [0xB908], NFKD: [0x1105, 0x116F, 0x11AB] }, +{ source: [0xB909], NFC: [0xB909], NFD: [0x1105, 0x116F, 0x11AC], NFKC: [0xB909], NFKD: [0x1105, 0x116F, 0x11AC] }, +{ source: [0xB90A], NFC: [0xB90A], NFD: [0x1105, 0x116F, 0x11AD], NFKC: [0xB90A], NFKD: [0x1105, 0x116F, 0x11AD] }, +{ source: [0xB90B], NFC: [0xB90B], NFD: [0x1105, 0x116F, 0x11AE], NFKC: [0xB90B], NFKD: [0x1105, 0x116F, 0x11AE] }, +{ source: [0xB90C], NFC: [0xB90C], NFD: [0x1105, 0x116F, 0x11AF], NFKC: [0xB90C], NFKD: [0x1105, 0x116F, 0x11AF] }, +{ source: [0xB90D], NFC: [0xB90D], NFD: [0x1105, 0x116F, 0x11B0], NFKC: [0xB90D], NFKD: [0x1105, 0x116F, 0x11B0] }, +{ source: [0xB90E], NFC: [0xB90E], NFD: [0x1105, 0x116F, 0x11B1], NFKC: [0xB90E], NFKD: [0x1105, 0x116F, 0x11B1] }, +{ source: [0xB90F], NFC: [0xB90F], NFD: [0x1105, 0x116F, 0x11B2], NFKC: [0xB90F], NFKD: [0x1105, 0x116F, 0x11B2] }, +{ source: [0xB910], NFC: [0xB910], NFD: [0x1105, 0x116F, 0x11B3], NFKC: [0xB910], NFKD: [0x1105, 0x116F, 0x11B3] }, +{ source: [0xB911], NFC: [0xB911], NFD: [0x1105, 0x116F, 0x11B4], NFKC: [0xB911], NFKD: [0x1105, 0x116F, 0x11B4] }, +{ source: [0xB912], NFC: [0xB912], NFD: [0x1105, 0x116F, 0x11B5], NFKC: [0xB912], NFKD: [0x1105, 0x116F, 0x11B5] }, +{ source: [0xB913], NFC: [0xB913], NFD: [0x1105, 0x116F, 0x11B6], NFKC: [0xB913], NFKD: [0x1105, 0x116F, 0x11B6] }, +{ source: [0xB914], NFC: [0xB914], NFD: [0x1105, 0x116F, 0x11B7], NFKC: [0xB914], NFKD: [0x1105, 0x116F, 0x11B7] }, +{ source: [0xB915], NFC: [0xB915], NFD: [0x1105, 0x116F, 0x11B8], NFKC: [0xB915], NFKD: [0x1105, 0x116F, 0x11B8] }, +{ source: [0xB916], NFC: [0xB916], NFD: [0x1105, 0x116F, 0x11B9], NFKC: [0xB916], NFKD: [0x1105, 0x116F, 0x11B9] }, +{ source: [0xB917], NFC: [0xB917], NFD: [0x1105, 0x116F, 0x11BA], NFKC: [0xB917], NFKD: [0x1105, 0x116F, 0x11BA] }, +{ source: [0xB918], NFC: [0xB918], NFD: [0x1105, 0x116F, 0x11BB], NFKC: [0xB918], NFKD: [0x1105, 0x116F, 0x11BB] }, +{ source: [0xB919], NFC: [0xB919], NFD: [0x1105, 0x116F, 0x11BC], NFKC: [0xB919], NFKD: [0x1105, 0x116F, 0x11BC] }, +{ source: [0xB91A], NFC: [0xB91A], NFD: [0x1105, 0x116F, 0x11BD], NFKC: [0xB91A], NFKD: [0x1105, 0x116F, 0x11BD] }, +{ source: [0xB91B], NFC: [0xB91B], NFD: [0x1105, 0x116F, 0x11BE], NFKC: [0xB91B], NFKD: [0x1105, 0x116F, 0x11BE] }, +{ source: [0xB91C], NFC: [0xB91C], NFD: [0x1105, 0x116F, 0x11BF], NFKC: [0xB91C], NFKD: [0x1105, 0x116F, 0x11BF] }, +{ source: [0xB91D], NFC: [0xB91D], NFD: [0x1105, 0x116F, 0x11C0], NFKC: [0xB91D], NFKD: [0x1105, 0x116F, 0x11C0] }, +{ source: [0xB91E], NFC: [0xB91E], NFD: [0x1105, 0x116F, 0x11C1], NFKC: [0xB91E], NFKD: [0x1105, 0x116F, 0x11C1] }, +{ source: [0xB91F], NFC: [0xB91F], NFD: [0x1105, 0x116F, 0x11C2], NFKC: [0xB91F], NFKD: [0x1105, 0x116F, 0x11C2] }, +{ source: [0xB920], NFC: [0xB920], NFD: [0x1105, 0x1170], NFKC: [0xB920], NFKD: [0x1105, 0x1170] }, +{ source: [0xB921], NFC: [0xB921], NFD: [0x1105, 0x1170, 0x11A8], NFKC: [0xB921], NFKD: [0x1105, 0x1170, 0x11A8] }, +{ source: [0xB922], NFC: [0xB922], NFD: [0x1105, 0x1170, 0x11A9], NFKC: [0xB922], NFKD: [0x1105, 0x1170, 0x11A9] }, +{ source: [0xB923], NFC: [0xB923], NFD: [0x1105, 0x1170, 0x11AA], NFKC: [0xB923], NFKD: [0x1105, 0x1170, 0x11AA] }, +{ source: [0xB924], NFC: [0xB924], NFD: [0x1105, 0x1170, 0x11AB], NFKC: [0xB924], NFKD: [0x1105, 0x1170, 0x11AB] }, +{ source: [0xB925], NFC: [0xB925], NFD: [0x1105, 0x1170, 0x11AC], NFKC: [0xB925], NFKD: [0x1105, 0x1170, 0x11AC] }, +{ source: [0xB926], NFC: [0xB926], NFD: [0x1105, 0x1170, 0x11AD], NFKC: [0xB926], NFKD: [0x1105, 0x1170, 0x11AD] }, +{ source: [0xB927], NFC: [0xB927], NFD: [0x1105, 0x1170, 0x11AE], NFKC: [0xB927], NFKD: [0x1105, 0x1170, 0x11AE] }, +{ source: [0xB928], NFC: [0xB928], NFD: [0x1105, 0x1170, 0x11AF], NFKC: [0xB928], NFKD: [0x1105, 0x1170, 0x11AF] }, +{ source: [0xB929], NFC: [0xB929], NFD: [0x1105, 0x1170, 0x11B0], NFKC: [0xB929], NFKD: [0x1105, 0x1170, 0x11B0] }, +{ source: [0xB92A], NFC: [0xB92A], NFD: [0x1105, 0x1170, 0x11B1], NFKC: [0xB92A], NFKD: [0x1105, 0x1170, 0x11B1] }, +{ source: [0xB92B], NFC: [0xB92B], NFD: [0x1105, 0x1170, 0x11B2], NFKC: [0xB92B], NFKD: [0x1105, 0x1170, 0x11B2] }, +{ source: [0xB92C], NFC: [0xB92C], NFD: [0x1105, 0x1170, 0x11B3], NFKC: [0xB92C], NFKD: [0x1105, 0x1170, 0x11B3] }, +{ source: [0xB92D], NFC: [0xB92D], NFD: [0x1105, 0x1170, 0x11B4], NFKC: [0xB92D], NFKD: [0x1105, 0x1170, 0x11B4] }, +{ source: [0xB92E], NFC: [0xB92E], NFD: [0x1105, 0x1170, 0x11B5], NFKC: [0xB92E], NFKD: [0x1105, 0x1170, 0x11B5] }, +{ source: [0xB92F], NFC: [0xB92F], NFD: [0x1105, 0x1170, 0x11B6], NFKC: [0xB92F], NFKD: [0x1105, 0x1170, 0x11B6] }, +{ source: [0xB930], NFC: [0xB930], NFD: [0x1105, 0x1170, 0x11B7], NFKC: [0xB930], NFKD: [0x1105, 0x1170, 0x11B7] }, +{ source: [0xB931], NFC: [0xB931], NFD: [0x1105, 0x1170, 0x11B8], NFKC: [0xB931], NFKD: [0x1105, 0x1170, 0x11B8] }, +{ source: [0xB932], NFC: [0xB932], NFD: [0x1105, 0x1170, 0x11B9], NFKC: [0xB932], NFKD: [0x1105, 0x1170, 0x11B9] }, +{ source: [0xB933], NFC: [0xB933], NFD: [0x1105, 0x1170, 0x11BA], NFKC: [0xB933], NFKD: [0x1105, 0x1170, 0x11BA] }, +{ source: [0xB934], NFC: [0xB934], NFD: [0x1105, 0x1170, 0x11BB], NFKC: [0xB934], NFKD: [0x1105, 0x1170, 0x11BB] }, +{ source: [0xB935], NFC: [0xB935], NFD: [0x1105, 0x1170, 0x11BC], NFKC: [0xB935], NFKD: [0x1105, 0x1170, 0x11BC] }, +{ source: [0xB936], NFC: [0xB936], NFD: [0x1105, 0x1170, 0x11BD], NFKC: [0xB936], NFKD: [0x1105, 0x1170, 0x11BD] }, +{ source: [0xB937], NFC: [0xB937], NFD: [0x1105, 0x1170, 0x11BE], NFKC: [0xB937], NFKD: [0x1105, 0x1170, 0x11BE] }, +{ source: [0xB938], NFC: [0xB938], NFD: [0x1105, 0x1170, 0x11BF], NFKC: [0xB938], NFKD: [0x1105, 0x1170, 0x11BF] }, +{ source: [0xB939], NFC: [0xB939], NFD: [0x1105, 0x1170, 0x11C0], NFKC: [0xB939], NFKD: [0x1105, 0x1170, 0x11C0] }, +{ source: [0xB93A], NFC: [0xB93A], NFD: [0x1105, 0x1170, 0x11C1], NFKC: [0xB93A], NFKD: [0x1105, 0x1170, 0x11C1] }, +{ source: [0xB93B], NFC: [0xB93B], NFD: [0x1105, 0x1170, 0x11C2], NFKC: [0xB93B], NFKD: [0x1105, 0x1170, 0x11C2] }, +{ source: [0xB93C], NFC: [0xB93C], NFD: [0x1105, 0x1171], NFKC: [0xB93C], NFKD: [0x1105, 0x1171] }, +{ source: [0xB93D], NFC: [0xB93D], NFD: [0x1105, 0x1171, 0x11A8], NFKC: [0xB93D], NFKD: [0x1105, 0x1171, 0x11A8] }, +{ source: [0xB93E], NFC: [0xB93E], NFD: [0x1105, 0x1171, 0x11A9], NFKC: [0xB93E], NFKD: [0x1105, 0x1171, 0x11A9] }, +{ source: [0xB93F], NFC: [0xB93F], NFD: [0x1105, 0x1171, 0x11AA], NFKC: [0xB93F], NFKD: [0x1105, 0x1171, 0x11AA] }, +{ source: [0xB940], NFC: [0xB940], NFD: [0x1105, 0x1171, 0x11AB], NFKC: [0xB940], NFKD: [0x1105, 0x1171, 0x11AB] }, +{ source: [0xB941], NFC: [0xB941], NFD: [0x1105, 0x1171, 0x11AC], NFKC: [0xB941], NFKD: [0x1105, 0x1171, 0x11AC] }, +{ source: [0xB942], NFC: [0xB942], NFD: [0x1105, 0x1171, 0x11AD], NFKC: [0xB942], NFKD: [0x1105, 0x1171, 0x11AD] }, +{ source: [0xB943], NFC: [0xB943], NFD: [0x1105, 0x1171, 0x11AE], NFKC: [0xB943], NFKD: [0x1105, 0x1171, 0x11AE] }, +{ source: [0xB944], NFC: [0xB944], NFD: [0x1105, 0x1171, 0x11AF], NFKC: [0xB944], NFKD: [0x1105, 0x1171, 0x11AF] }, +{ source: [0xB945], NFC: [0xB945], NFD: [0x1105, 0x1171, 0x11B0], NFKC: [0xB945], NFKD: [0x1105, 0x1171, 0x11B0] }, +{ source: [0xB946], NFC: [0xB946], NFD: [0x1105, 0x1171, 0x11B1], NFKC: [0xB946], NFKD: [0x1105, 0x1171, 0x11B1] }, +{ source: [0xB947], NFC: [0xB947], NFD: [0x1105, 0x1171, 0x11B2], NFKC: [0xB947], NFKD: [0x1105, 0x1171, 0x11B2] }, +{ source: [0xB948], NFC: [0xB948], NFD: [0x1105, 0x1171, 0x11B3], NFKC: [0xB948], NFKD: [0x1105, 0x1171, 0x11B3] }, +{ source: [0xB949], NFC: [0xB949], NFD: [0x1105, 0x1171, 0x11B4], NFKC: [0xB949], NFKD: [0x1105, 0x1171, 0x11B4] }, +{ source: [0xB94A], NFC: [0xB94A], NFD: [0x1105, 0x1171, 0x11B5], NFKC: [0xB94A], NFKD: [0x1105, 0x1171, 0x11B5] }, +{ source: [0xB94B], NFC: [0xB94B], NFD: [0x1105, 0x1171, 0x11B6], NFKC: [0xB94B], NFKD: [0x1105, 0x1171, 0x11B6] }, +{ source: [0xB94C], NFC: [0xB94C], NFD: [0x1105, 0x1171, 0x11B7], NFKC: [0xB94C], NFKD: [0x1105, 0x1171, 0x11B7] }, +{ source: [0xB94D], NFC: [0xB94D], NFD: [0x1105, 0x1171, 0x11B8], NFKC: [0xB94D], NFKD: [0x1105, 0x1171, 0x11B8] }, +{ source: [0xB94E], NFC: [0xB94E], NFD: [0x1105, 0x1171, 0x11B9], NFKC: [0xB94E], NFKD: [0x1105, 0x1171, 0x11B9] }, +{ source: [0xB94F], NFC: [0xB94F], NFD: [0x1105, 0x1171, 0x11BA], NFKC: [0xB94F], NFKD: [0x1105, 0x1171, 0x11BA] }, +{ source: [0xB950], NFC: [0xB950], NFD: [0x1105, 0x1171, 0x11BB], NFKC: [0xB950], NFKD: [0x1105, 0x1171, 0x11BB] }, +{ source: [0xB951], NFC: [0xB951], NFD: [0x1105, 0x1171, 0x11BC], NFKC: [0xB951], NFKD: [0x1105, 0x1171, 0x11BC] }, +{ source: [0xB952], NFC: [0xB952], NFD: [0x1105, 0x1171, 0x11BD], NFKC: [0xB952], NFKD: [0x1105, 0x1171, 0x11BD] }, +{ source: [0xB953], NFC: [0xB953], NFD: [0x1105, 0x1171, 0x11BE], NFKC: [0xB953], NFKD: [0x1105, 0x1171, 0x11BE] }, +{ source: [0xB954], NFC: [0xB954], NFD: [0x1105, 0x1171, 0x11BF], NFKC: [0xB954], NFKD: [0x1105, 0x1171, 0x11BF] }, +{ source: [0xB955], NFC: [0xB955], NFD: [0x1105, 0x1171, 0x11C0], NFKC: [0xB955], NFKD: [0x1105, 0x1171, 0x11C0] }, +{ source: [0xB956], NFC: [0xB956], NFD: [0x1105, 0x1171, 0x11C1], NFKC: [0xB956], NFKD: [0x1105, 0x1171, 0x11C1] }, +{ source: [0xB957], NFC: [0xB957], NFD: [0x1105, 0x1171, 0x11C2], NFKC: [0xB957], NFKD: [0x1105, 0x1171, 0x11C2] }, +{ source: [0xB958], NFC: [0xB958], NFD: [0x1105, 0x1172], NFKC: [0xB958], NFKD: [0x1105, 0x1172] }, +{ source: [0xB959], NFC: [0xB959], NFD: [0x1105, 0x1172, 0x11A8], NFKC: [0xB959], NFKD: [0x1105, 0x1172, 0x11A8] }, +{ source: [0xB95A], NFC: [0xB95A], NFD: [0x1105, 0x1172, 0x11A9], NFKC: [0xB95A], NFKD: [0x1105, 0x1172, 0x11A9] }, +{ source: [0xB95B], NFC: [0xB95B], NFD: [0x1105, 0x1172, 0x11AA], NFKC: [0xB95B], NFKD: [0x1105, 0x1172, 0x11AA] }, +{ source: [0xB95C], NFC: [0xB95C], NFD: [0x1105, 0x1172, 0x11AB], NFKC: [0xB95C], NFKD: [0x1105, 0x1172, 0x11AB] }, +{ source: [0xB95D], NFC: [0xB95D], NFD: [0x1105, 0x1172, 0x11AC], NFKC: [0xB95D], NFKD: [0x1105, 0x1172, 0x11AC] }, +{ source: [0xB95E], NFC: [0xB95E], NFD: [0x1105, 0x1172, 0x11AD], NFKC: [0xB95E], NFKD: [0x1105, 0x1172, 0x11AD] }, +{ source: [0xB95F], NFC: [0xB95F], NFD: [0x1105, 0x1172, 0x11AE], NFKC: [0xB95F], NFKD: [0x1105, 0x1172, 0x11AE] }, +{ source: [0xB960], NFC: [0xB960], NFD: [0x1105, 0x1172, 0x11AF], NFKC: [0xB960], NFKD: [0x1105, 0x1172, 0x11AF] }, +{ source: [0xB961], NFC: [0xB961], NFD: [0x1105, 0x1172, 0x11B0], NFKC: [0xB961], NFKD: [0x1105, 0x1172, 0x11B0] }, +{ source: [0xB962], NFC: [0xB962], NFD: [0x1105, 0x1172, 0x11B1], NFKC: [0xB962], NFKD: [0x1105, 0x1172, 0x11B1] }, +{ source: [0xB963], NFC: [0xB963], NFD: [0x1105, 0x1172, 0x11B2], NFKC: [0xB963], NFKD: [0x1105, 0x1172, 0x11B2] }, +{ source: [0xB964], NFC: [0xB964], NFD: [0x1105, 0x1172, 0x11B3], NFKC: [0xB964], NFKD: [0x1105, 0x1172, 0x11B3] }, +{ source: [0xB965], NFC: [0xB965], NFD: [0x1105, 0x1172, 0x11B4], NFKC: [0xB965], NFKD: [0x1105, 0x1172, 0x11B4] }, +{ source: [0xB966], NFC: [0xB966], NFD: [0x1105, 0x1172, 0x11B5], NFKC: [0xB966], NFKD: [0x1105, 0x1172, 0x11B5] }, +{ source: [0xB967], NFC: [0xB967], NFD: [0x1105, 0x1172, 0x11B6], NFKC: [0xB967], NFKD: [0x1105, 0x1172, 0x11B6] }, +{ source: [0xB968], NFC: [0xB968], NFD: [0x1105, 0x1172, 0x11B7], NFKC: [0xB968], NFKD: [0x1105, 0x1172, 0x11B7] }, +{ source: [0xB969], NFC: [0xB969], NFD: [0x1105, 0x1172, 0x11B8], NFKC: [0xB969], NFKD: [0x1105, 0x1172, 0x11B8] }, +{ source: [0xB96A], NFC: [0xB96A], NFD: [0x1105, 0x1172, 0x11B9], NFKC: [0xB96A], NFKD: [0x1105, 0x1172, 0x11B9] }, +{ source: [0xB96B], NFC: [0xB96B], NFD: [0x1105, 0x1172, 0x11BA], NFKC: [0xB96B], NFKD: [0x1105, 0x1172, 0x11BA] }, +{ source: [0xB96C], NFC: [0xB96C], NFD: [0x1105, 0x1172, 0x11BB], NFKC: [0xB96C], NFKD: [0x1105, 0x1172, 0x11BB] }, +{ source: [0xB96D], NFC: [0xB96D], NFD: [0x1105, 0x1172, 0x11BC], NFKC: [0xB96D], NFKD: [0x1105, 0x1172, 0x11BC] }, +{ source: [0xB96E], NFC: [0xB96E], NFD: [0x1105, 0x1172, 0x11BD], NFKC: [0xB96E], NFKD: [0x1105, 0x1172, 0x11BD] }, +{ source: [0xB96F], NFC: [0xB96F], NFD: [0x1105, 0x1172, 0x11BE], NFKC: [0xB96F], NFKD: [0x1105, 0x1172, 0x11BE] }, +{ source: [0xB970], NFC: [0xB970], NFD: [0x1105, 0x1172, 0x11BF], NFKC: [0xB970], NFKD: [0x1105, 0x1172, 0x11BF] }, +{ source: [0xB971], NFC: [0xB971], NFD: [0x1105, 0x1172, 0x11C0], NFKC: [0xB971], NFKD: [0x1105, 0x1172, 0x11C0] }, +{ source: [0xB972], NFC: [0xB972], NFD: [0x1105, 0x1172, 0x11C1], NFKC: [0xB972], NFKD: [0x1105, 0x1172, 0x11C1] }, +{ source: [0xB973], NFC: [0xB973], NFD: [0x1105, 0x1172, 0x11C2], NFKC: [0xB973], NFKD: [0x1105, 0x1172, 0x11C2] }, +{ source: [0xB974], NFC: [0xB974], NFD: [0x1105, 0x1173], NFKC: [0xB974], NFKD: [0x1105, 0x1173] }, +{ source: [0xB975], NFC: [0xB975], NFD: [0x1105, 0x1173, 0x11A8], NFKC: [0xB975], NFKD: [0x1105, 0x1173, 0x11A8] }, +{ source: [0xB976], NFC: [0xB976], NFD: [0x1105, 0x1173, 0x11A9], NFKC: [0xB976], NFKD: [0x1105, 0x1173, 0x11A9] }, +{ source: [0xB977], NFC: [0xB977], NFD: [0x1105, 0x1173, 0x11AA], NFKC: [0xB977], NFKD: [0x1105, 0x1173, 0x11AA] }, +{ source: [0xB978], NFC: [0xB978], NFD: [0x1105, 0x1173, 0x11AB], NFKC: [0xB978], NFKD: [0x1105, 0x1173, 0x11AB] }, +{ source: [0xB979], NFC: [0xB979], NFD: [0x1105, 0x1173, 0x11AC], NFKC: [0xB979], NFKD: [0x1105, 0x1173, 0x11AC] }, +{ source: [0xB97A], NFC: [0xB97A], NFD: [0x1105, 0x1173, 0x11AD], NFKC: [0xB97A], NFKD: [0x1105, 0x1173, 0x11AD] }, +{ source: [0xB97B], NFC: [0xB97B], NFD: [0x1105, 0x1173, 0x11AE], NFKC: [0xB97B], NFKD: [0x1105, 0x1173, 0x11AE] }, +{ source: [0xB97C], NFC: [0xB97C], NFD: [0x1105, 0x1173, 0x11AF], NFKC: [0xB97C], NFKD: [0x1105, 0x1173, 0x11AF] }, +{ source: [0xB97D], NFC: [0xB97D], NFD: [0x1105, 0x1173, 0x11B0], NFKC: [0xB97D], NFKD: [0x1105, 0x1173, 0x11B0] }, +{ source: [0xB97E], NFC: [0xB97E], NFD: [0x1105, 0x1173, 0x11B1], NFKC: [0xB97E], NFKD: [0x1105, 0x1173, 0x11B1] }, +{ source: [0xB97F], NFC: [0xB97F], NFD: [0x1105, 0x1173, 0x11B2], NFKC: [0xB97F], NFKD: [0x1105, 0x1173, 0x11B2] }, +{ source: [0xB980], NFC: [0xB980], NFD: [0x1105, 0x1173, 0x11B3], NFKC: [0xB980], NFKD: [0x1105, 0x1173, 0x11B3] }, +{ source: [0xB981], NFC: [0xB981], NFD: [0x1105, 0x1173, 0x11B4], NFKC: [0xB981], NFKD: [0x1105, 0x1173, 0x11B4] }, +{ source: [0xB982], NFC: [0xB982], NFD: [0x1105, 0x1173, 0x11B5], NFKC: [0xB982], NFKD: [0x1105, 0x1173, 0x11B5] }, +{ source: [0xB983], NFC: [0xB983], NFD: [0x1105, 0x1173, 0x11B6], NFKC: [0xB983], NFKD: [0x1105, 0x1173, 0x11B6] }, +{ source: [0xB984], NFC: [0xB984], NFD: [0x1105, 0x1173, 0x11B7], NFKC: [0xB984], NFKD: [0x1105, 0x1173, 0x11B7] }, +{ source: [0xB985], NFC: [0xB985], NFD: [0x1105, 0x1173, 0x11B8], NFKC: [0xB985], NFKD: [0x1105, 0x1173, 0x11B8] }, +{ source: [0xB986], NFC: [0xB986], NFD: [0x1105, 0x1173, 0x11B9], NFKC: [0xB986], NFKD: [0x1105, 0x1173, 0x11B9] }, +{ source: [0xB987], NFC: [0xB987], NFD: [0x1105, 0x1173, 0x11BA], NFKC: [0xB987], NFKD: [0x1105, 0x1173, 0x11BA] }, +{ source: [0xB988], NFC: [0xB988], NFD: [0x1105, 0x1173, 0x11BB], NFKC: [0xB988], NFKD: [0x1105, 0x1173, 0x11BB] }, +{ source: [0xB989], NFC: [0xB989], NFD: [0x1105, 0x1173, 0x11BC], NFKC: [0xB989], NFKD: [0x1105, 0x1173, 0x11BC] }, +{ source: [0xB98A], NFC: [0xB98A], NFD: [0x1105, 0x1173, 0x11BD], NFKC: [0xB98A], NFKD: [0x1105, 0x1173, 0x11BD] }, +{ source: [0xB98B], NFC: [0xB98B], NFD: [0x1105, 0x1173, 0x11BE], NFKC: [0xB98B], NFKD: [0x1105, 0x1173, 0x11BE] }, +{ source: [0xB98C], NFC: [0xB98C], NFD: [0x1105, 0x1173, 0x11BF], NFKC: [0xB98C], NFKD: [0x1105, 0x1173, 0x11BF] }, +{ source: [0xB98D], NFC: [0xB98D], NFD: [0x1105, 0x1173, 0x11C0], NFKC: [0xB98D], NFKD: [0x1105, 0x1173, 0x11C0] }, +{ source: [0xB98E], NFC: [0xB98E], NFD: [0x1105, 0x1173, 0x11C1], NFKC: [0xB98E], NFKD: [0x1105, 0x1173, 0x11C1] }, +{ source: [0xB98F], NFC: [0xB98F], NFD: [0x1105, 0x1173, 0x11C2], NFKC: [0xB98F], NFKD: [0x1105, 0x1173, 0x11C2] }, +{ source: [0xB990], NFC: [0xB990], NFD: [0x1105, 0x1174], NFKC: [0xB990], NFKD: [0x1105, 0x1174] }, +{ source: [0xB991], NFC: [0xB991], NFD: [0x1105, 0x1174, 0x11A8], NFKC: [0xB991], NFKD: [0x1105, 0x1174, 0x11A8] }, +{ source: [0xB992], NFC: [0xB992], NFD: [0x1105, 0x1174, 0x11A9], NFKC: [0xB992], NFKD: [0x1105, 0x1174, 0x11A9] }, +{ source: [0xB993], NFC: [0xB993], NFD: [0x1105, 0x1174, 0x11AA], NFKC: [0xB993], NFKD: [0x1105, 0x1174, 0x11AA] }, +{ source: [0xB994], NFC: [0xB994], NFD: [0x1105, 0x1174, 0x11AB], NFKC: [0xB994], NFKD: [0x1105, 0x1174, 0x11AB] }, +{ source: [0xB995], NFC: [0xB995], NFD: [0x1105, 0x1174, 0x11AC], NFKC: [0xB995], NFKD: [0x1105, 0x1174, 0x11AC] }, +{ source: [0xB996], NFC: [0xB996], NFD: [0x1105, 0x1174, 0x11AD], NFKC: [0xB996], NFKD: [0x1105, 0x1174, 0x11AD] }, +{ source: [0xB997], NFC: [0xB997], NFD: [0x1105, 0x1174, 0x11AE], NFKC: [0xB997], NFKD: [0x1105, 0x1174, 0x11AE] }, +{ source: [0xB998], NFC: [0xB998], NFD: [0x1105, 0x1174, 0x11AF], NFKC: [0xB998], NFKD: [0x1105, 0x1174, 0x11AF] }, +{ source: [0xB999], NFC: [0xB999], NFD: [0x1105, 0x1174, 0x11B0], NFKC: [0xB999], NFKD: [0x1105, 0x1174, 0x11B0] }, +{ source: [0xB99A], NFC: [0xB99A], NFD: [0x1105, 0x1174, 0x11B1], NFKC: [0xB99A], NFKD: [0x1105, 0x1174, 0x11B1] }, +{ source: [0xB99B], NFC: [0xB99B], NFD: [0x1105, 0x1174, 0x11B2], NFKC: [0xB99B], NFKD: [0x1105, 0x1174, 0x11B2] }, +{ source: [0xB99C], NFC: [0xB99C], NFD: [0x1105, 0x1174, 0x11B3], NFKC: [0xB99C], NFKD: [0x1105, 0x1174, 0x11B3] }, +{ source: [0xB99D], NFC: [0xB99D], NFD: [0x1105, 0x1174, 0x11B4], NFKC: [0xB99D], NFKD: [0x1105, 0x1174, 0x11B4] }, +{ source: [0xB99E], NFC: [0xB99E], NFD: [0x1105, 0x1174, 0x11B5], NFKC: [0xB99E], NFKD: [0x1105, 0x1174, 0x11B5] }, +{ source: [0xB99F], NFC: [0xB99F], NFD: [0x1105, 0x1174, 0x11B6], NFKC: [0xB99F], NFKD: [0x1105, 0x1174, 0x11B6] }, +{ source: [0xB9A0], NFC: [0xB9A0], NFD: [0x1105, 0x1174, 0x11B7], NFKC: [0xB9A0], NFKD: [0x1105, 0x1174, 0x11B7] }, +{ source: [0xB9A1], NFC: [0xB9A1], NFD: [0x1105, 0x1174, 0x11B8], NFKC: [0xB9A1], NFKD: [0x1105, 0x1174, 0x11B8] }, +{ source: [0xB9A2], NFC: [0xB9A2], NFD: [0x1105, 0x1174, 0x11B9], NFKC: [0xB9A2], NFKD: [0x1105, 0x1174, 0x11B9] }, +{ source: [0xB9A3], NFC: [0xB9A3], NFD: [0x1105, 0x1174, 0x11BA], NFKC: [0xB9A3], NFKD: [0x1105, 0x1174, 0x11BA] }, +{ source: [0xB9A4], NFC: [0xB9A4], NFD: [0x1105, 0x1174, 0x11BB], NFKC: [0xB9A4], NFKD: [0x1105, 0x1174, 0x11BB] }, +{ source: [0xB9A5], NFC: [0xB9A5], NFD: [0x1105, 0x1174, 0x11BC], NFKC: [0xB9A5], NFKD: [0x1105, 0x1174, 0x11BC] }, +{ source: [0xB9A6], NFC: [0xB9A6], NFD: [0x1105, 0x1174, 0x11BD], NFKC: [0xB9A6], NFKD: [0x1105, 0x1174, 0x11BD] }, +{ source: [0xB9A7], NFC: [0xB9A7], NFD: [0x1105, 0x1174, 0x11BE], NFKC: [0xB9A7], NFKD: [0x1105, 0x1174, 0x11BE] }, +{ source: [0xB9A8], NFC: [0xB9A8], NFD: [0x1105, 0x1174, 0x11BF], NFKC: [0xB9A8], NFKD: [0x1105, 0x1174, 0x11BF] }, +{ source: [0xB9A9], NFC: [0xB9A9], NFD: [0x1105, 0x1174, 0x11C0], NFKC: [0xB9A9], NFKD: [0x1105, 0x1174, 0x11C0] }, +{ source: [0xB9AA], NFC: [0xB9AA], NFD: [0x1105, 0x1174, 0x11C1], NFKC: [0xB9AA], NFKD: [0x1105, 0x1174, 0x11C1] }, +{ source: [0xB9AB], NFC: [0xB9AB], NFD: [0x1105, 0x1174, 0x11C2], NFKC: [0xB9AB], NFKD: [0x1105, 0x1174, 0x11C2] }, +{ source: [0xB9AC], NFC: [0xB9AC], NFD: [0x1105, 0x1175], NFKC: [0xB9AC], NFKD: [0x1105, 0x1175] }, +{ source: [0xB9AD], NFC: [0xB9AD], NFD: [0x1105, 0x1175, 0x11A8], NFKC: [0xB9AD], NFKD: [0x1105, 0x1175, 0x11A8] }, +{ source: [0xB9AE], NFC: [0xB9AE], NFD: [0x1105, 0x1175, 0x11A9], NFKC: [0xB9AE], NFKD: [0x1105, 0x1175, 0x11A9] }, +{ source: [0xB9AF], NFC: [0xB9AF], NFD: [0x1105, 0x1175, 0x11AA], NFKC: [0xB9AF], NFKD: [0x1105, 0x1175, 0x11AA] }, +{ source: [0xB9B0], NFC: [0xB9B0], NFD: [0x1105, 0x1175, 0x11AB], NFKC: [0xB9B0], NFKD: [0x1105, 0x1175, 0x11AB] }, +{ source: [0xB9B1], NFC: [0xB9B1], NFD: [0x1105, 0x1175, 0x11AC], NFKC: [0xB9B1], NFKD: [0x1105, 0x1175, 0x11AC] }, +{ source: [0xB9B2], NFC: [0xB9B2], NFD: [0x1105, 0x1175, 0x11AD], NFKC: [0xB9B2], NFKD: [0x1105, 0x1175, 0x11AD] }, +{ source: [0xB9B3], NFC: [0xB9B3], NFD: [0x1105, 0x1175, 0x11AE], NFKC: [0xB9B3], NFKD: [0x1105, 0x1175, 0x11AE] }, +{ source: [0xB9B4], NFC: [0xB9B4], NFD: [0x1105, 0x1175, 0x11AF], NFKC: [0xB9B4], NFKD: [0x1105, 0x1175, 0x11AF] }, +{ source: [0xB9B5], NFC: [0xB9B5], NFD: [0x1105, 0x1175, 0x11B0], NFKC: [0xB9B5], NFKD: [0x1105, 0x1175, 0x11B0] }, +{ source: [0xB9B6], NFC: [0xB9B6], NFD: [0x1105, 0x1175, 0x11B1], NFKC: [0xB9B6], NFKD: [0x1105, 0x1175, 0x11B1] }, +{ source: [0xB9B7], NFC: [0xB9B7], NFD: [0x1105, 0x1175, 0x11B2], NFKC: [0xB9B7], NFKD: [0x1105, 0x1175, 0x11B2] }, +{ source: [0xB9B8], NFC: [0xB9B8], NFD: [0x1105, 0x1175, 0x11B3], NFKC: [0xB9B8], NFKD: [0x1105, 0x1175, 0x11B3] }, +{ source: [0xB9B9], NFC: [0xB9B9], NFD: [0x1105, 0x1175, 0x11B4], NFKC: [0xB9B9], NFKD: [0x1105, 0x1175, 0x11B4] }, +{ source: [0xB9BA], NFC: [0xB9BA], NFD: [0x1105, 0x1175, 0x11B5], NFKC: [0xB9BA], NFKD: [0x1105, 0x1175, 0x11B5] }, +{ source: [0xB9BB], NFC: [0xB9BB], NFD: [0x1105, 0x1175, 0x11B6], NFKC: [0xB9BB], NFKD: [0x1105, 0x1175, 0x11B6] }, +{ source: [0xB9BC], NFC: [0xB9BC], NFD: [0x1105, 0x1175, 0x11B7], NFKC: [0xB9BC], NFKD: [0x1105, 0x1175, 0x11B7] }, +{ source: [0xB9BD], NFC: [0xB9BD], NFD: [0x1105, 0x1175, 0x11B8], NFKC: [0xB9BD], NFKD: [0x1105, 0x1175, 0x11B8] }, +{ source: [0xB9BE], NFC: [0xB9BE], NFD: [0x1105, 0x1175, 0x11B9], NFKC: [0xB9BE], NFKD: [0x1105, 0x1175, 0x11B9] }, +{ source: [0xB9BF], NFC: [0xB9BF], NFD: [0x1105, 0x1175, 0x11BA], NFKC: [0xB9BF], NFKD: [0x1105, 0x1175, 0x11BA] }, +{ source: [0xB9C0], NFC: [0xB9C0], NFD: [0x1105, 0x1175, 0x11BB], NFKC: [0xB9C0], NFKD: [0x1105, 0x1175, 0x11BB] }, +{ source: [0xB9C1], NFC: [0xB9C1], NFD: [0x1105, 0x1175, 0x11BC], NFKC: [0xB9C1], NFKD: [0x1105, 0x1175, 0x11BC] }, +{ source: [0xB9C2], NFC: [0xB9C2], NFD: [0x1105, 0x1175, 0x11BD], NFKC: [0xB9C2], NFKD: [0x1105, 0x1175, 0x11BD] }, +{ source: [0xB9C3], NFC: [0xB9C3], NFD: [0x1105, 0x1175, 0x11BE], NFKC: [0xB9C3], NFKD: [0x1105, 0x1175, 0x11BE] }, +{ source: [0xB9C4], NFC: [0xB9C4], NFD: [0x1105, 0x1175, 0x11BF], NFKC: [0xB9C4], NFKD: [0x1105, 0x1175, 0x11BF] }, +{ source: [0xB9C5], NFC: [0xB9C5], NFD: [0x1105, 0x1175, 0x11C0], NFKC: [0xB9C5], NFKD: [0x1105, 0x1175, 0x11C0] }, +{ source: [0xB9C6], NFC: [0xB9C6], NFD: [0x1105, 0x1175, 0x11C1], NFKC: [0xB9C6], NFKD: [0x1105, 0x1175, 0x11C1] }, +{ source: [0xB9C7], NFC: [0xB9C7], NFD: [0x1105, 0x1175, 0x11C2], NFKC: [0xB9C7], NFKD: [0x1105, 0x1175, 0x11C2] }, +{ source: [0xB9C8], NFC: [0xB9C8], NFD: [0x1106, 0x1161], NFKC: [0xB9C8], NFKD: [0x1106, 0x1161] }, +{ source: [0xB9C9], NFC: [0xB9C9], NFD: [0x1106, 0x1161, 0x11A8], NFKC: [0xB9C9], NFKD: [0x1106, 0x1161, 0x11A8] }, +{ source: [0xB9CA], NFC: [0xB9CA], NFD: [0x1106, 0x1161, 0x11A9], NFKC: [0xB9CA], NFKD: [0x1106, 0x1161, 0x11A9] }, +{ source: [0xB9CB], NFC: [0xB9CB], NFD: [0x1106, 0x1161, 0x11AA], NFKC: [0xB9CB], NFKD: [0x1106, 0x1161, 0x11AA] }, +{ source: [0xB9CC], NFC: [0xB9CC], NFD: [0x1106, 0x1161, 0x11AB], NFKC: [0xB9CC], NFKD: [0x1106, 0x1161, 0x11AB] }, +{ source: [0xB9CD], NFC: [0xB9CD], NFD: [0x1106, 0x1161, 0x11AC], NFKC: [0xB9CD], NFKD: [0x1106, 0x1161, 0x11AC] }, +{ source: [0xB9CE], NFC: [0xB9CE], NFD: [0x1106, 0x1161, 0x11AD], NFKC: [0xB9CE], NFKD: [0x1106, 0x1161, 0x11AD] }, +{ source: [0xB9CF], NFC: [0xB9CF], NFD: [0x1106, 0x1161, 0x11AE], NFKC: [0xB9CF], NFKD: [0x1106, 0x1161, 0x11AE] }, +{ source: [0xB9D0], NFC: [0xB9D0], NFD: [0x1106, 0x1161, 0x11AF], NFKC: [0xB9D0], NFKD: [0x1106, 0x1161, 0x11AF] }, +{ source: [0xB9D1], NFC: [0xB9D1], NFD: [0x1106, 0x1161, 0x11B0], NFKC: [0xB9D1], NFKD: [0x1106, 0x1161, 0x11B0] }, +{ source: [0xB9D2], NFC: [0xB9D2], NFD: [0x1106, 0x1161, 0x11B1], NFKC: [0xB9D2], NFKD: [0x1106, 0x1161, 0x11B1] }, +{ source: [0xB9D3], NFC: [0xB9D3], NFD: [0x1106, 0x1161, 0x11B2], NFKC: [0xB9D3], NFKD: [0x1106, 0x1161, 0x11B2] }, +{ source: [0xB9D4], NFC: [0xB9D4], NFD: [0x1106, 0x1161, 0x11B3], NFKC: [0xB9D4], NFKD: [0x1106, 0x1161, 0x11B3] }, +{ source: [0xB9D5], NFC: [0xB9D5], NFD: [0x1106, 0x1161, 0x11B4], NFKC: [0xB9D5], NFKD: [0x1106, 0x1161, 0x11B4] }, +{ source: [0xB9D6], NFC: [0xB9D6], NFD: [0x1106, 0x1161, 0x11B5], NFKC: [0xB9D6], NFKD: [0x1106, 0x1161, 0x11B5] }, +{ source: [0xB9D7], NFC: [0xB9D7], NFD: [0x1106, 0x1161, 0x11B6], NFKC: [0xB9D7], NFKD: [0x1106, 0x1161, 0x11B6] }, +{ source: [0xB9D8], NFC: [0xB9D8], NFD: [0x1106, 0x1161, 0x11B7], NFKC: [0xB9D8], NFKD: [0x1106, 0x1161, 0x11B7] }, +{ source: [0xB9D9], NFC: [0xB9D9], NFD: [0x1106, 0x1161, 0x11B8], NFKC: [0xB9D9], NFKD: [0x1106, 0x1161, 0x11B8] }, +{ source: [0xB9DA], NFC: [0xB9DA], NFD: [0x1106, 0x1161, 0x11B9], NFKC: [0xB9DA], NFKD: [0x1106, 0x1161, 0x11B9] }, +{ source: [0xB9DB], NFC: [0xB9DB], NFD: [0x1106, 0x1161, 0x11BA], NFKC: [0xB9DB], NFKD: [0x1106, 0x1161, 0x11BA] }, +{ source: [0xB9DC], NFC: [0xB9DC], NFD: [0x1106, 0x1161, 0x11BB], NFKC: [0xB9DC], NFKD: [0x1106, 0x1161, 0x11BB] }, +{ source: [0xB9DD], NFC: [0xB9DD], NFD: [0x1106, 0x1161, 0x11BC], NFKC: [0xB9DD], NFKD: [0x1106, 0x1161, 0x11BC] }, +{ source: [0xB9DE], NFC: [0xB9DE], NFD: [0x1106, 0x1161, 0x11BD], NFKC: [0xB9DE], NFKD: [0x1106, 0x1161, 0x11BD] }, +{ source: [0xB9DF], NFC: [0xB9DF], NFD: [0x1106, 0x1161, 0x11BE], NFKC: [0xB9DF], NFKD: [0x1106, 0x1161, 0x11BE] }, +{ source: [0xB9E0], NFC: [0xB9E0], NFD: [0x1106, 0x1161, 0x11BF], NFKC: [0xB9E0], NFKD: [0x1106, 0x1161, 0x11BF] }, +{ source: [0xB9E1], NFC: [0xB9E1], NFD: [0x1106, 0x1161, 0x11C0], NFKC: [0xB9E1], NFKD: [0x1106, 0x1161, 0x11C0] }, +{ source: [0xB9E2], NFC: [0xB9E2], NFD: [0x1106, 0x1161, 0x11C1], NFKC: [0xB9E2], NFKD: [0x1106, 0x1161, 0x11C1] }, +{ source: [0xB9E3], NFC: [0xB9E3], NFD: [0x1106, 0x1161, 0x11C2], NFKC: [0xB9E3], NFKD: [0x1106, 0x1161, 0x11C2] }, +{ source: [0xB9E4], NFC: [0xB9E4], NFD: [0x1106, 0x1162], NFKC: [0xB9E4], NFKD: [0x1106, 0x1162] }, +{ source: [0xB9E5], NFC: [0xB9E5], NFD: [0x1106, 0x1162, 0x11A8], NFKC: [0xB9E5], NFKD: [0x1106, 0x1162, 0x11A8] }, +{ source: [0xB9E6], NFC: [0xB9E6], NFD: [0x1106, 0x1162, 0x11A9], NFKC: [0xB9E6], NFKD: [0x1106, 0x1162, 0x11A9] }, +{ source: [0xB9E7], NFC: [0xB9E7], NFD: [0x1106, 0x1162, 0x11AA], NFKC: [0xB9E7], NFKD: [0x1106, 0x1162, 0x11AA] }, +{ source: [0xB9E8], NFC: [0xB9E8], NFD: [0x1106, 0x1162, 0x11AB], NFKC: [0xB9E8], NFKD: [0x1106, 0x1162, 0x11AB] }, +{ source: [0xB9E9], NFC: [0xB9E9], NFD: [0x1106, 0x1162, 0x11AC], NFKC: [0xB9E9], NFKD: [0x1106, 0x1162, 0x11AC] }, +{ source: [0xB9EA], NFC: [0xB9EA], NFD: [0x1106, 0x1162, 0x11AD], NFKC: [0xB9EA], NFKD: [0x1106, 0x1162, 0x11AD] }, +{ source: [0xB9EB], NFC: [0xB9EB], NFD: [0x1106, 0x1162, 0x11AE], NFKC: [0xB9EB], NFKD: [0x1106, 0x1162, 0x11AE] }, +{ source: [0xB9EC], NFC: [0xB9EC], NFD: [0x1106, 0x1162, 0x11AF], NFKC: [0xB9EC], NFKD: [0x1106, 0x1162, 0x11AF] }, +{ source: [0xB9ED], NFC: [0xB9ED], NFD: [0x1106, 0x1162, 0x11B0], NFKC: [0xB9ED], NFKD: [0x1106, 0x1162, 0x11B0] }, +{ source: [0xB9EE], NFC: [0xB9EE], NFD: [0x1106, 0x1162, 0x11B1], NFKC: [0xB9EE], NFKD: [0x1106, 0x1162, 0x11B1] }, +{ source: [0xB9EF], NFC: [0xB9EF], NFD: [0x1106, 0x1162, 0x11B2], NFKC: [0xB9EF], NFKD: [0x1106, 0x1162, 0x11B2] }, +{ source: [0xB9F0], NFC: [0xB9F0], NFD: [0x1106, 0x1162, 0x11B3], NFKC: [0xB9F0], NFKD: [0x1106, 0x1162, 0x11B3] }, +{ source: [0xB9F1], NFC: [0xB9F1], NFD: [0x1106, 0x1162, 0x11B4], NFKC: [0xB9F1], NFKD: [0x1106, 0x1162, 0x11B4] }, +{ source: [0xB9F2], NFC: [0xB9F2], NFD: [0x1106, 0x1162, 0x11B5], NFKC: [0xB9F2], NFKD: [0x1106, 0x1162, 0x11B5] }, +{ source: [0xB9F3], NFC: [0xB9F3], NFD: [0x1106, 0x1162, 0x11B6], NFKC: [0xB9F3], NFKD: [0x1106, 0x1162, 0x11B6] }, +{ source: [0xB9F4], NFC: [0xB9F4], NFD: [0x1106, 0x1162, 0x11B7], NFKC: [0xB9F4], NFKD: [0x1106, 0x1162, 0x11B7] }, +{ source: [0xB9F5], NFC: [0xB9F5], NFD: [0x1106, 0x1162, 0x11B8], NFKC: [0xB9F5], NFKD: [0x1106, 0x1162, 0x11B8] }, +{ source: [0xB9F6], NFC: [0xB9F6], NFD: [0x1106, 0x1162, 0x11B9], NFKC: [0xB9F6], NFKD: [0x1106, 0x1162, 0x11B9] }, +{ source: [0xB9F7], NFC: [0xB9F7], NFD: [0x1106, 0x1162, 0x11BA], NFKC: [0xB9F7], NFKD: [0x1106, 0x1162, 0x11BA] }, +{ source: [0xB9F8], NFC: [0xB9F8], NFD: [0x1106, 0x1162, 0x11BB], NFKC: [0xB9F8], NFKD: [0x1106, 0x1162, 0x11BB] }, +{ source: [0xB9F9], NFC: [0xB9F9], NFD: [0x1106, 0x1162, 0x11BC], NFKC: [0xB9F9], NFKD: [0x1106, 0x1162, 0x11BC] }, +{ source: [0xB9FA], NFC: [0xB9FA], NFD: [0x1106, 0x1162, 0x11BD], NFKC: [0xB9FA], NFKD: [0x1106, 0x1162, 0x11BD] }, +{ source: [0xB9FB], NFC: [0xB9FB], NFD: [0x1106, 0x1162, 0x11BE], NFKC: [0xB9FB], NFKD: [0x1106, 0x1162, 0x11BE] }, +{ source: [0xB9FC], NFC: [0xB9FC], NFD: [0x1106, 0x1162, 0x11BF], NFKC: [0xB9FC], NFKD: [0x1106, 0x1162, 0x11BF] }, +{ source: [0xB9FD], NFC: [0xB9FD], NFD: [0x1106, 0x1162, 0x11C0], NFKC: [0xB9FD], NFKD: [0x1106, 0x1162, 0x11C0] }, +{ source: [0xB9FE], NFC: [0xB9FE], NFD: [0x1106, 0x1162, 0x11C1], NFKC: [0xB9FE], NFKD: [0x1106, 0x1162, 0x11C1] }, +{ source: [0xB9FF], NFC: [0xB9FF], NFD: [0x1106, 0x1162, 0x11C2], NFKC: [0xB9FF], NFKD: [0x1106, 0x1162, 0x11C2] }, +{ source: [0xBA00], NFC: [0xBA00], NFD: [0x1106, 0x1163], NFKC: [0xBA00], NFKD: [0x1106, 0x1163] }, +{ source: [0xBA01], NFC: [0xBA01], NFD: [0x1106, 0x1163, 0x11A8], NFKC: [0xBA01], NFKD: [0x1106, 0x1163, 0x11A8] }, +{ source: [0xBA02], NFC: [0xBA02], NFD: [0x1106, 0x1163, 0x11A9], NFKC: [0xBA02], NFKD: [0x1106, 0x1163, 0x11A9] }, +{ source: [0xBA03], NFC: [0xBA03], NFD: [0x1106, 0x1163, 0x11AA], NFKC: [0xBA03], NFKD: [0x1106, 0x1163, 0x11AA] }, +{ source: [0xBA04], NFC: [0xBA04], NFD: [0x1106, 0x1163, 0x11AB], NFKC: [0xBA04], NFKD: [0x1106, 0x1163, 0x11AB] }, +{ source: [0xBA05], NFC: [0xBA05], NFD: [0x1106, 0x1163, 0x11AC], NFKC: [0xBA05], NFKD: [0x1106, 0x1163, 0x11AC] }, +{ source: [0xBA06], NFC: [0xBA06], NFD: [0x1106, 0x1163, 0x11AD], NFKC: [0xBA06], NFKD: [0x1106, 0x1163, 0x11AD] }, +{ source: [0xBA07], NFC: [0xBA07], NFD: [0x1106, 0x1163, 0x11AE], NFKC: [0xBA07], NFKD: [0x1106, 0x1163, 0x11AE] }, +{ source: [0xBA08], NFC: [0xBA08], NFD: [0x1106, 0x1163, 0x11AF], NFKC: [0xBA08], NFKD: [0x1106, 0x1163, 0x11AF] }, +{ source: [0xBA09], NFC: [0xBA09], NFD: [0x1106, 0x1163, 0x11B0], NFKC: [0xBA09], NFKD: [0x1106, 0x1163, 0x11B0] }, +{ source: [0xBA0A], NFC: [0xBA0A], NFD: [0x1106, 0x1163, 0x11B1], NFKC: [0xBA0A], NFKD: [0x1106, 0x1163, 0x11B1] }, +{ source: [0xBA0B], NFC: [0xBA0B], NFD: [0x1106, 0x1163, 0x11B2], NFKC: [0xBA0B], NFKD: [0x1106, 0x1163, 0x11B2] }, +{ source: [0xBA0C], NFC: [0xBA0C], NFD: [0x1106, 0x1163, 0x11B3], NFKC: [0xBA0C], NFKD: [0x1106, 0x1163, 0x11B3] }, +{ source: [0xBA0D], NFC: [0xBA0D], NFD: [0x1106, 0x1163, 0x11B4], NFKC: [0xBA0D], NFKD: [0x1106, 0x1163, 0x11B4] }, +{ source: [0xBA0E], NFC: [0xBA0E], NFD: [0x1106, 0x1163, 0x11B5], NFKC: [0xBA0E], NFKD: [0x1106, 0x1163, 0x11B5] }, +{ source: [0xBA0F], NFC: [0xBA0F], NFD: [0x1106, 0x1163, 0x11B6], NFKC: [0xBA0F], NFKD: [0x1106, 0x1163, 0x11B6] }, +{ source: [0xBA10], NFC: [0xBA10], NFD: [0x1106, 0x1163, 0x11B7], NFKC: [0xBA10], NFKD: [0x1106, 0x1163, 0x11B7] }, +{ source: [0xBA11], NFC: [0xBA11], NFD: [0x1106, 0x1163, 0x11B8], NFKC: [0xBA11], NFKD: [0x1106, 0x1163, 0x11B8] }, +{ source: [0xBA12], NFC: [0xBA12], NFD: [0x1106, 0x1163, 0x11B9], NFKC: [0xBA12], NFKD: [0x1106, 0x1163, 0x11B9] }, +{ source: [0xBA13], NFC: [0xBA13], NFD: [0x1106, 0x1163, 0x11BA], NFKC: [0xBA13], NFKD: [0x1106, 0x1163, 0x11BA] }, +{ source: [0xBA14], NFC: [0xBA14], NFD: [0x1106, 0x1163, 0x11BB], NFKC: [0xBA14], NFKD: [0x1106, 0x1163, 0x11BB] }, +{ source: [0xBA15], NFC: [0xBA15], NFD: [0x1106, 0x1163, 0x11BC], NFKC: [0xBA15], NFKD: [0x1106, 0x1163, 0x11BC] }, +{ source: [0xBA16], NFC: [0xBA16], NFD: [0x1106, 0x1163, 0x11BD], NFKC: [0xBA16], NFKD: [0x1106, 0x1163, 0x11BD] }, +{ source: [0xBA17], NFC: [0xBA17], NFD: [0x1106, 0x1163, 0x11BE], NFKC: [0xBA17], NFKD: [0x1106, 0x1163, 0x11BE] }, +{ source: [0xBA18], NFC: [0xBA18], NFD: [0x1106, 0x1163, 0x11BF], NFKC: [0xBA18], NFKD: [0x1106, 0x1163, 0x11BF] }, +{ source: [0xBA19], NFC: [0xBA19], NFD: [0x1106, 0x1163, 0x11C0], NFKC: [0xBA19], NFKD: [0x1106, 0x1163, 0x11C0] }, +{ source: [0xBA1A], NFC: [0xBA1A], NFD: [0x1106, 0x1163, 0x11C1], NFKC: [0xBA1A], NFKD: [0x1106, 0x1163, 0x11C1] }, +{ source: [0xBA1B], NFC: [0xBA1B], NFD: [0x1106, 0x1163, 0x11C2], NFKC: [0xBA1B], NFKD: [0x1106, 0x1163, 0x11C2] }, +{ source: [0xBA1C], NFC: [0xBA1C], NFD: [0x1106, 0x1164], NFKC: [0xBA1C], NFKD: [0x1106, 0x1164] }, +{ source: [0xBA1D], NFC: [0xBA1D], NFD: [0x1106, 0x1164, 0x11A8], NFKC: [0xBA1D], NFKD: [0x1106, 0x1164, 0x11A8] }, +{ source: [0xBA1E], NFC: [0xBA1E], NFD: [0x1106, 0x1164, 0x11A9], NFKC: [0xBA1E], NFKD: [0x1106, 0x1164, 0x11A9] }, +{ source: [0xBA1F], NFC: [0xBA1F], NFD: [0x1106, 0x1164, 0x11AA], NFKC: [0xBA1F], NFKD: [0x1106, 0x1164, 0x11AA] }, +{ source: [0xBA20], NFC: [0xBA20], NFD: [0x1106, 0x1164, 0x11AB], NFKC: [0xBA20], NFKD: [0x1106, 0x1164, 0x11AB] }, +{ source: [0xBA21], NFC: [0xBA21], NFD: [0x1106, 0x1164, 0x11AC], NFKC: [0xBA21], NFKD: [0x1106, 0x1164, 0x11AC] }, +{ source: [0xBA22], NFC: [0xBA22], NFD: [0x1106, 0x1164, 0x11AD], NFKC: [0xBA22], NFKD: [0x1106, 0x1164, 0x11AD] }, +{ source: [0xBA23], NFC: [0xBA23], NFD: [0x1106, 0x1164, 0x11AE], NFKC: [0xBA23], NFKD: [0x1106, 0x1164, 0x11AE] }, +{ source: [0xBA24], NFC: [0xBA24], NFD: [0x1106, 0x1164, 0x11AF], NFKC: [0xBA24], NFKD: [0x1106, 0x1164, 0x11AF] }, +{ source: [0xBA25], NFC: [0xBA25], NFD: [0x1106, 0x1164, 0x11B0], NFKC: [0xBA25], NFKD: [0x1106, 0x1164, 0x11B0] }, +{ source: [0xBA26], NFC: [0xBA26], NFD: [0x1106, 0x1164, 0x11B1], NFKC: [0xBA26], NFKD: [0x1106, 0x1164, 0x11B1] }, +{ source: [0xBA27], NFC: [0xBA27], NFD: [0x1106, 0x1164, 0x11B2], NFKC: [0xBA27], NFKD: [0x1106, 0x1164, 0x11B2] }, +{ source: [0xBA28], NFC: [0xBA28], NFD: [0x1106, 0x1164, 0x11B3], NFKC: [0xBA28], NFKD: [0x1106, 0x1164, 0x11B3] }, +{ source: [0xBA29], NFC: [0xBA29], NFD: [0x1106, 0x1164, 0x11B4], NFKC: [0xBA29], NFKD: [0x1106, 0x1164, 0x11B4] }, +{ source: [0xBA2A], NFC: [0xBA2A], NFD: [0x1106, 0x1164, 0x11B5], NFKC: [0xBA2A], NFKD: [0x1106, 0x1164, 0x11B5] }, +{ source: [0xBA2B], NFC: [0xBA2B], NFD: [0x1106, 0x1164, 0x11B6], NFKC: [0xBA2B], NFKD: [0x1106, 0x1164, 0x11B6] }, +{ source: [0xBA2C], NFC: [0xBA2C], NFD: [0x1106, 0x1164, 0x11B7], NFKC: [0xBA2C], NFKD: [0x1106, 0x1164, 0x11B7] }, +{ source: [0xBA2D], NFC: [0xBA2D], NFD: [0x1106, 0x1164, 0x11B8], NFKC: [0xBA2D], NFKD: [0x1106, 0x1164, 0x11B8] }, +{ source: [0xBA2E], NFC: [0xBA2E], NFD: [0x1106, 0x1164, 0x11B9], NFKC: [0xBA2E], NFKD: [0x1106, 0x1164, 0x11B9] }, +{ source: [0xBA2F], NFC: [0xBA2F], NFD: [0x1106, 0x1164, 0x11BA], NFKC: [0xBA2F], NFKD: [0x1106, 0x1164, 0x11BA] }, +{ source: [0xBA30], NFC: [0xBA30], NFD: [0x1106, 0x1164, 0x11BB], NFKC: [0xBA30], NFKD: [0x1106, 0x1164, 0x11BB] }, +{ source: [0xBA31], NFC: [0xBA31], NFD: [0x1106, 0x1164, 0x11BC], NFKC: [0xBA31], NFKD: [0x1106, 0x1164, 0x11BC] }, +{ source: [0xBA32], NFC: [0xBA32], NFD: [0x1106, 0x1164, 0x11BD], NFKC: [0xBA32], NFKD: [0x1106, 0x1164, 0x11BD] }, +{ source: [0xBA33], NFC: [0xBA33], NFD: [0x1106, 0x1164, 0x11BE], NFKC: [0xBA33], NFKD: [0x1106, 0x1164, 0x11BE] }, +{ source: [0xBA34], NFC: [0xBA34], NFD: [0x1106, 0x1164, 0x11BF], NFKC: [0xBA34], NFKD: [0x1106, 0x1164, 0x11BF] }, +{ source: [0xBA35], NFC: [0xBA35], NFD: [0x1106, 0x1164, 0x11C0], NFKC: [0xBA35], NFKD: [0x1106, 0x1164, 0x11C0] }, +{ source: [0xBA36], NFC: [0xBA36], NFD: [0x1106, 0x1164, 0x11C1], NFKC: [0xBA36], NFKD: [0x1106, 0x1164, 0x11C1] }, +{ source: [0xBA37], NFC: [0xBA37], NFD: [0x1106, 0x1164, 0x11C2], NFKC: [0xBA37], NFKD: [0x1106, 0x1164, 0x11C2] }, +{ source: [0xBA38], NFC: [0xBA38], NFD: [0x1106, 0x1165], NFKC: [0xBA38], NFKD: [0x1106, 0x1165] }, +{ source: [0xBA39], NFC: [0xBA39], NFD: [0x1106, 0x1165, 0x11A8], NFKC: [0xBA39], NFKD: [0x1106, 0x1165, 0x11A8] }, +{ source: [0xBA3A], NFC: [0xBA3A], NFD: [0x1106, 0x1165, 0x11A9], NFKC: [0xBA3A], NFKD: [0x1106, 0x1165, 0x11A9] }, +{ source: [0xBA3B], NFC: [0xBA3B], NFD: [0x1106, 0x1165, 0x11AA], NFKC: [0xBA3B], NFKD: [0x1106, 0x1165, 0x11AA] }, +{ source: [0xBA3C], NFC: [0xBA3C], NFD: [0x1106, 0x1165, 0x11AB], NFKC: [0xBA3C], NFKD: [0x1106, 0x1165, 0x11AB] }, +{ source: [0xBA3D], NFC: [0xBA3D], NFD: [0x1106, 0x1165, 0x11AC], NFKC: [0xBA3D], NFKD: [0x1106, 0x1165, 0x11AC] }, +{ source: [0xBA3E], NFC: [0xBA3E], NFD: [0x1106, 0x1165, 0x11AD], NFKC: [0xBA3E], NFKD: [0x1106, 0x1165, 0x11AD] }, +{ source: [0xBA3F], NFC: [0xBA3F], NFD: [0x1106, 0x1165, 0x11AE], NFKC: [0xBA3F], NFKD: [0x1106, 0x1165, 0x11AE] }, +{ source: [0xBA40], NFC: [0xBA40], NFD: [0x1106, 0x1165, 0x11AF], NFKC: [0xBA40], NFKD: [0x1106, 0x1165, 0x11AF] }, +{ source: [0xBA41], NFC: [0xBA41], NFD: [0x1106, 0x1165, 0x11B0], NFKC: [0xBA41], NFKD: [0x1106, 0x1165, 0x11B0] }, +{ source: [0xBA42], NFC: [0xBA42], NFD: [0x1106, 0x1165, 0x11B1], NFKC: [0xBA42], NFKD: [0x1106, 0x1165, 0x11B1] }, +{ source: [0xBA43], NFC: [0xBA43], NFD: [0x1106, 0x1165, 0x11B2], NFKC: [0xBA43], NFKD: [0x1106, 0x1165, 0x11B2] }, +{ source: [0xBA44], NFC: [0xBA44], NFD: [0x1106, 0x1165, 0x11B3], NFKC: [0xBA44], NFKD: [0x1106, 0x1165, 0x11B3] }, +{ source: [0xBA45], NFC: [0xBA45], NFD: [0x1106, 0x1165, 0x11B4], NFKC: [0xBA45], NFKD: [0x1106, 0x1165, 0x11B4] }, +{ source: [0xBA46], NFC: [0xBA46], NFD: [0x1106, 0x1165, 0x11B5], NFKC: [0xBA46], NFKD: [0x1106, 0x1165, 0x11B5] }, +{ source: [0xBA47], NFC: [0xBA47], NFD: [0x1106, 0x1165, 0x11B6], NFKC: [0xBA47], NFKD: [0x1106, 0x1165, 0x11B6] }, +{ source: [0xBA48], NFC: [0xBA48], NFD: [0x1106, 0x1165, 0x11B7], NFKC: [0xBA48], NFKD: [0x1106, 0x1165, 0x11B7] }, +{ source: [0xBA49], NFC: [0xBA49], NFD: [0x1106, 0x1165, 0x11B8], NFKC: [0xBA49], NFKD: [0x1106, 0x1165, 0x11B8] }, +{ source: [0xBA4A], NFC: [0xBA4A], NFD: [0x1106, 0x1165, 0x11B9], NFKC: [0xBA4A], NFKD: [0x1106, 0x1165, 0x11B9] }, +{ source: [0xBA4B], NFC: [0xBA4B], NFD: [0x1106, 0x1165, 0x11BA], NFKC: [0xBA4B], NFKD: [0x1106, 0x1165, 0x11BA] }, +{ source: [0xBA4C], NFC: [0xBA4C], NFD: [0x1106, 0x1165, 0x11BB], NFKC: [0xBA4C], NFKD: [0x1106, 0x1165, 0x11BB] }, +{ source: [0xBA4D], NFC: [0xBA4D], NFD: [0x1106, 0x1165, 0x11BC], NFKC: [0xBA4D], NFKD: [0x1106, 0x1165, 0x11BC] }, +{ source: [0xBA4E], NFC: [0xBA4E], NFD: [0x1106, 0x1165, 0x11BD], NFKC: [0xBA4E], NFKD: [0x1106, 0x1165, 0x11BD] }, +{ source: [0xBA4F], NFC: [0xBA4F], NFD: [0x1106, 0x1165, 0x11BE], NFKC: [0xBA4F], NFKD: [0x1106, 0x1165, 0x11BE] }, +{ source: [0xBA50], NFC: [0xBA50], NFD: [0x1106, 0x1165, 0x11BF], NFKC: [0xBA50], NFKD: [0x1106, 0x1165, 0x11BF] }, +{ source: [0xBA51], NFC: [0xBA51], NFD: [0x1106, 0x1165, 0x11C0], NFKC: [0xBA51], NFKD: [0x1106, 0x1165, 0x11C0] }, +{ source: [0xBA52], NFC: [0xBA52], NFD: [0x1106, 0x1165, 0x11C1], NFKC: [0xBA52], NFKD: [0x1106, 0x1165, 0x11C1] }, +{ source: [0xBA53], NFC: [0xBA53], NFD: [0x1106, 0x1165, 0x11C2], NFKC: [0xBA53], NFKD: [0x1106, 0x1165, 0x11C2] }, +{ source: [0xBA54], NFC: [0xBA54], NFD: [0x1106, 0x1166], NFKC: [0xBA54], NFKD: [0x1106, 0x1166] }, +{ source: [0xBA55], NFC: [0xBA55], NFD: [0x1106, 0x1166, 0x11A8], NFKC: [0xBA55], NFKD: [0x1106, 0x1166, 0x11A8] }, +{ source: [0xBA56], NFC: [0xBA56], NFD: [0x1106, 0x1166, 0x11A9], NFKC: [0xBA56], NFKD: [0x1106, 0x1166, 0x11A9] }, +{ source: [0xBA57], NFC: [0xBA57], NFD: [0x1106, 0x1166, 0x11AA], NFKC: [0xBA57], NFKD: [0x1106, 0x1166, 0x11AA] }, +{ source: [0xBA58], NFC: [0xBA58], NFD: [0x1106, 0x1166, 0x11AB], NFKC: [0xBA58], NFKD: [0x1106, 0x1166, 0x11AB] }, +{ source: [0xBA59], NFC: [0xBA59], NFD: [0x1106, 0x1166, 0x11AC], NFKC: [0xBA59], NFKD: [0x1106, 0x1166, 0x11AC] }, +{ source: [0xBA5A], NFC: [0xBA5A], NFD: [0x1106, 0x1166, 0x11AD], NFKC: [0xBA5A], NFKD: [0x1106, 0x1166, 0x11AD] }, +{ source: [0xBA5B], NFC: [0xBA5B], NFD: [0x1106, 0x1166, 0x11AE], NFKC: [0xBA5B], NFKD: [0x1106, 0x1166, 0x11AE] }, +{ source: [0xBA5C], NFC: [0xBA5C], NFD: [0x1106, 0x1166, 0x11AF], NFKC: [0xBA5C], NFKD: [0x1106, 0x1166, 0x11AF] }, +{ source: [0xBA5D], NFC: [0xBA5D], NFD: [0x1106, 0x1166, 0x11B0], NFKC: [0xBA5D], NFKD: [0x1106, 0x1166, 0x11B0] }, +{ source: [0xBA5E], NFC: [0xBA5E], NFD: [0x1106, 0x1166, 0x11B1], NFKC: [0xBA5E], NFKD: [0x1106, 0x1166, 0x11B1] }, +{ source: [0xBA5F], NFC: [0xBA5F], NFD: [0x1106, 0x1166, 0x11B2], NFKC: [0xBA5F], NFKD: [0x1106, 0x1166, 0x11B2] }, +{ source: [0xBA60], NFC: [0xBA60], NFD: [0x1106, 0x1166, 0x11B3], NFKC: [0xBA60], NFKD: [0x1106, 0x1166, 0x11B3] }, +{ source: [0xBA61], NFC: [0xBA61], NFD: [0x1106, 0x1166, 0x11B4], NFKC: [0xBA61], NFKD: [0x1106, 0x1166, 0x11B4] }, +{ source: [0xBA62], NFC: [0xBA62], NFD: [0x1106, 0x1166, 0x11B5], NFKC: [0xBA62], NFKD: [0x1106, 0x1166, 0x11B5] }, +{ source: [0xBA63], NFC: [0xBA63], NFD: [0x1106, 0x1166, 0x11B6], NFKC: [0xBA63], NFKD: [0x1106, 0x1166, 0x11B6] }, +{ source: [0xBA64], NFC: [0xBA64], NFD: [0x1106, 0x1166, 0x11B7], NFKC: [0xBA64], NFKD: [0x1106, 0x1166, 0x11B7] }, +{ source: [0xBA65], NFC: [0xBA65], NFD: [0x1106, 0x1166, 0x11B8], NFKC: [0xBA65], NFKD: [0x1106, 0x1166, 0x11B8] }, +{ source: [0xBA66], NFC: [0xBA66], NFD: [0x1106, 0x1166, 0x11B9], NFKC: [0xBA66], NFKD: [0x1106, 0x1166, 0x11B9] }, +{ source: [0xBA67], NFC: [0xBA67], NFD: [0x1106, 0x1166, 0x11BA], NFKC: [0xBA67], NFKD: [0x1106, 0x1166, 0x11BA] }, +{ source: [0xBA68], NFC: [0xBA68], NFD: [0x1106, 0x1166, 0x11BB], NFKC: [0xBA68], NFKD: [0x1106, 0x1166, 0x11BB] }, +{ source: [0xBA69], NFC: [0xBA69], NFD: [0x1106, 0x1166, 0x11BC], NFKC: [0xBA69], NFKD: [0x1106, 0x1166, 0x11BC] }, +{ source: [0xBA6A], NFC: [0xBA6A], NFD: [0x1106, 0x1166, 0x11BD], NFKC: [0xBA6A], NFKD: [0x1106, 0x1166, 0x11BD] }, +{ source: [0xBA6B], NFC: [0xBA6B], NFD: [0x1106, 0x1166, 0x11BE], NFKC: [0xBA6B], NFKD: [0x1106, 0x1166, 0x11BE] }, +{ source: [0xBA6C], NFC: [0xBA6C], NFD: [0x1106, 0x1166, 0x11BF], NFKC: [0xBA6C], NFKD: [0x1106, 0x1166, 0x11BF] }, +{ source: [0xBA6D], NFC: [0xBA6D], NFD: [0x1106, 0x1166, 0x11C0], NFKC: [0xBA6D], NFKD: [0x1106, 0x1166, 0x11C0] }, +{ source: [0xBA6E], NFC: [0xBA6E], NFD: [0x1106, 0x1166, 0x11C1], NFKC: [0xBA6E], NFKD: [0x1106, 0x1166, 0x11C1] }, +{ source: [0xBA6F], NFC: [0xBA6F], NFD: [0x1106, 0x1166, 0x11C2], NFKC: [0xBA6F], NFKD: [0x1106, 0x1166, 0x11C2] }, +{ source: [0xBA70], NFC: [0xBA70], NFD: [0x1106, 0x1167], NFKC: [0xBA70], NFKD: [0x1106, 0x1167] }, +{ source: [0xBA71], NFC: [0xBA71], NFD: [0x1106, 0x1167, 0x11A8], NFKC: [0xBA71], NFKD: [0x1106, 0x1167, 0x11A8] }, +{ source: [0xBA72], NFC: [0xBA72], NFD: [0x1106, 0x1167, 0x11A9], NFKC: [0xBA72], NFKD: [0x1106, 0x1167, 0x11A9] }, +{ source: [0xBA73], NFC: [0xBA73], NFD: [0x1106, 0x1167, 0x11AA], NFKC: [0xBA73], NFKD: [0x1106, 0x1167, 0x11AA] }, +{ source: [0xBA74], NFC: [0xBA74], NFD: [0x1106, 0x1167, 0x11AB], NFKC: [0xBA74], NFKD: [0x1106, 0x1167, 0x11AB] }, +{ source: [0xBA75], NFC: [0xBA75], NFD: [0x1106, 0x1167, 0x11AC], NFKC: [0xBA75], NFKD: [0x1106, 0x1167, 0x11AC] }, +{ source: [0xBA76], NFC: [0xBA76], NFD: [0x1106, 0x1167, 0x11AD], NFKC: [0xBA76], NFKD: [0x1106, 0x1167, 0x11AD] }, +{ source: [0xBA77], NFC: [0xBA77], NFD: [0x1106, 0x1167, 0x11AE], NFKC: [0xBA77], NFKD: [0x1106, 0x1167, 0x11AE] }, +{ source: [0xBA78], NFC: [0xBA78], NFD: [0x1106, 0x1167, 0x11AF], NFKC: [0xBA78], NFKD: [0x1106, 0x1167, 0x11AF] }, +{ source: [0xBA79], NFC: [0xBA79], NFD: [0x1106, 0x1167, 0x11B0], NFKC: [0xBA79], NFKD: [0x1106, 0x1167, 0x11B0] }, +{ source: [0xBA7A], NFC: [0xBA7A], NFD: [0x1106, 0x1167, 0x11B1], NFKC: [0xBA7A], NFKD: [0x1106, 0x1167, 0x11B1] }, +{ source: [0xBA7B], NFC: [0xBA7B], NFD: [0x1106, 0x1167, 0x11B2], NFKC: [0xBA7B], NFKD: [0x1106, 0x1167, 0x11B2] }, +{ source: [0xBA7C], NFC: [0xBA7C], NFD: [0x1106, 0x1167, 0x11B3], NFKC: [0xBA7C], NFKD: [0x1106, 0x1167, 0x11B3] }, +{ source: [0xBA7D], NFC: [0xBA7D], NFD: [0x1106, 0x1167, 0x11B4], NFKC: [0xBA7D], NFKD: [0x1106, 0x1167, 0x11B4] }, +{ source: [0xBA7E], NFC: [0xBA7E], NFD: [0x1106, 0x1167, 0x11B5], NFKC: [0xBA7E], NFKD: [0x1106, 0x1167, 0x11B5] }, +{ source: [0xBA7F], NFC: [0xBA7F], NFD: [0x1106, 0x1167, 0x11B6], NFKC: [0xBA7F], NFKD: [0x1106, 0x1167, 0x11B6] }, +{ source: [0xBA80], NFC: [0xBA80], NFD: [0x1106, 0x1167, 0x11B7], NFKC: [0xBA80], NFKD: [0x1106, 0x1167, 0x11B7] }, +{ source: [0xBA81], NFC: [0xBA81], NFD: [0x1106, 0x1167, 0x11B8], NFKC: [0xBA81], NFKD: [0x1106, 0x1167, 0x11B8] }, +{ source: [0xBA82], NFC: [0xBA82], NFD: [0x1106, 0x1167, 0x11B9], NFKC: [0xBA82], NFKD: [0x1106, 0x1167, 0x11B9] }, +{ source: [0xBA83], NFC: [0xBA83], NFD: [0x1106, 0x1167, 0x11BA], NFKC: [0xBA83], NFKD: [0x1106, 0x1167, 0x11BA] }, +{ source: [0xBA84], NFC: [0xBA84], NFD: [0x1106, 0x1167, 0x11BB], NFKC: [0xBA84], NFKD: [0x1106, 0x1167, 0x11BB] }, +{ source: [0xBA85], NFC: [0xBA85], NFD: [0x1106, 0x1167, 0x11BC], NFKC: [0xBA85], NFKD: [0x1106, 0x1167, 0x11BC] }, +{ source: [0xBA86], NFC: [0xBA86], NFD: [0x1106, 0x1167, 0x11BD], NFKC: [0xBA86], NFKD: [0x1106, 0x1167, 0x11BD] }, +{ source: [0xBA87], NFC: [0xBA87], NFD: [0x1106, 0x1167, 0x11BE], NFKC: [0xBA87], NFKD: [0x1106, 0x1167, 0x11BE] }, +{ source: [0xBA88], NFC: [0xBA88], NFD: [0x1106, 0x1167, 0x11BF], NFKC: [0xBA88], NFKD: [0x1106, 0x1167, 0x11BF] }, +{ source: [0xBA89], NFC: [0xBA89], NFD: [0x1106, 0x1167, 0x11C0], NFKC: [0xBA89], NFKD: [0x1106, 0x1167, 0x11C0] }, +{ source: [0xBA8A], NFC: [0xBA8A], NFD: [0x1106, 0x1167, 0x11C1], NFKC: [0xBA8A], NFKD: [0x1106, 0x1167, 0x11C1] }, +{ source: [0xBA8B], NFC: [0xBA8B], NFD: [0x1106, 0x1167, 0x11C2], NFKC: [0xBA8B], NFKD: [0x1106, 0x1167, 0x11C2] }, +{ source: [0xBA8C], NFC: [0xBA8C], NFD: [0x1106, 0x1168], NFKC: [0xBA8C], NFKD: [0x1106, 0x1168] }, +{ source: [0xBA8D], NFC: [0xBA8D], NFD: [0x1106, 0x1168, 0x11A8], NFKC: [0xBA8D], NFKD: [0x1106, 0x1168, 0x11A8] }, +{ source: [0xBA8E], NFC: [0xBA8E], NFD: [0x1106, 0x1168, 0x11A9], NFKC: [0xBA8E], NFKD: [0x1106, 0x1168, 0x11A9] }, +{ source: [0xBA8F], NFC: [0xBA8F], NFD: [0x1106, 0x1168, 0x11AA], NFKC: [0xBA8F], NFKD: [0x1106, 0x1168, 0x11AA] }, +{ source: [0xBA90], NFC: [0xBA90], NFD: [0x1106, 0x1168, 0x11AB], NFKC: [0xBA90], NFKD: [0x1106, 0x1168, 0x11AB] }, +{ source: [0xBA91], NFC: [0xBA91], NFD: [0x1106, 0x1168, 0x11AC], NFKC: [0xBA91], NFKD: [0x1106, 0x1168, 0x11AC] }, +{ source: [0xBA92], NFC: [0xBA92], NFD: [0x1106, 0x1168, 0x11AD], NFKC: [0xBA92], NFKD: [0x1106, 0x1168, 0x11AD] }, +{ source: [0xBA93], NFC: [0xBA93], NFD: [0x1106, 0x1168, 0x11AE], NFKC: [0xBA93], NFKD: [0x1106, 0x1168, 0x11AE] }, +{ source: [0xBA94], NFC: [0xBA94], NFD: [0x1106, 0x1168, 0x11AF], NFKC: [0xBA94], NFKD: [0x1106, 0x1168, 0x11AF] }, +{ source: [0xBA95], NFC: [0xBA95], NFD: [0x1106, 0x1168, 0x11B0], NFKC: [0xBA95], NFKD: [0x1106, 0x1168, 0x11B0] }, +{ source: [0xBA96], NFC: [0xBA96], NFD: [0x1106, 0x1168, 0x11B1], NFKC: [0xBA96], NFKD: [0x1106, 0x1168, 0x11B1] }, +{ source: [0xBA97], NFC: [0xBA97], NFD: [0x1106, 0x1168, 0x11B2], NFKC: [0xBA97], NFKD: [0x1106, 0x1168, 0x11B2] }, +{ source: [0xBA98], NFC: [0xBA98], NFD: [0x1106, 0x1168, 0x11B3], NFKC: [0xBA98], NFKD: [0x1106, 0x1168, 0x11B3] }, +{ source: [0xBA99], NFC: [0xBA99], NFD: [0x1106, 0x1168, 0x11B4], NFKC: [0xBA99], NFKD: [0x1106, 0x1168, 0x11B4] }, +{ source: [0xBA9A], NFC: [0xBA9A], NFD: [0x1106, 0x1168, 0x11B5], NFKC: [0xBA9A], NFKD: [0x1106, 0x1168, 0x11B5] }, +{ source: [0xBA9B], NFC: [0xBA9B], NFD: [0x1106, 0x1168, 0x11B6], NFKC: [0xBA9B], NFKD: [0x1106, 0x1168, 0x11B6] }, +{ source: [0xBA9C], NFC: [0xBA9C], NFD: [0x1106, 0x1168, 0x11B7], NFKC: [0xBA9C], NFKD: [0x1106, 0x1168, 0x11B7] }, +{ source: [0xBA9D], NFC: [0xBA9D], NFD: [0x1106, 0x1168, 0x11B8], NFKC: [0xBA9D], NFKD: [0x1106, 0x1168, 0x11B8] }, +{ source: [0xBA9E], NFC: [0xBA9E], NFD: [0x1106, 0x1168, 0x11B9], NFKC: [0xBA9E], NFKD: [0x1106, 0x1168, 0x11B9] }, +{ source: [0xBA9F], NFC: [0xBA9F], NFD: [0x1106, 0x1168, 0x11BA], NFKC: [0xBA9F], NFKD: [0x1106, 0x1168, 0x11BA] }, +{ source: [0xBAA0], NFC: [0xBAA0], NFD: [0x1106, 0x1168, 0x11BB], NFKC: [0xBAA0], NFKD: [0x1106, 0x1168, 0x11BB] }, +{ source: [0xBAA1], NFC: [0xBAA1], NFD: [0x1106, 0x1168, 0x11BC], NFKC: [0xBAA1], NFKD: [0x1106, 0x1168, 0x11BC] }, +{ source: [0xBAA2], NFC: [0xBAA2], NFD: [0x1106, 0x1168, 0x11BD], NFKC: [0xBAA2], NFKD: [0x1106, 0x1168, 0x11BD] }, +{ source: [0xBAA3], NFC: [0xBAA3], NFD: [0x1106, 0x1168, 0x11BE], NFKC: [0xBAA3], NFKD: [0x1106, 0x1168, 0x11BE] }, +{ source: [0xBAA4], NFC: [0xBAA4], NFD: [0x1106, 0x1168, 0x11BF], NFKC: [0xBAA4], NFKD: [0x1106, 0x1168, 0x11BF] }, +{ source: [0xBAA5], NFC: [0xBAA5], NFD: [0x1106, 0x1168, 0x11C0], NFKC: [0xBAA5], NFKD: [0x1106, 0x1168, 0x11C0] }, +{ source: [0xBAA6], NFC: [0xBAA6], NFD: [0x1106, 0x1168, 0x11C1], NFKC: [0xBAA6], NFKD: [0x1106, 0x1168, 0x11C1] }, +{ source: [0xBAA7], NFC: [0xBAA7], NFD: [0x1106, 0x1168, 0x11C2], NFKC: [0xBAA7], NFKD: [0x1106, 0x1168, 0x11C2] }, +{ source: [0xBAA8], NFC: [0xBAA8], NFD: [0x1106, 0x1169], NFKC: [0xBAA8], NFKD: [0x1106, 0x1169] }, +{ source: [0xBAA9], NFC: [0xBAA9], NFD: [0x1106, 0x1169, 0x11A8], NFKC: [0xBAA9], NFKD: [0x1106, 0x1169, 0x11A8] }, +{ source: [0xBAAA], NFC: [0xBAAA], NFD: [0x1106, 0x1169, 0x11A9], NFKC: [0xBAAA], NFKD: [0x1106, 0x1169, 0x11A9] }, +{ source: [0xBAAB], NFC: [0xBAAB], NFD: [0x1106, 0x1169, 0x11AA], NFKC: [0xBAAB], NFKD: [0x1106, 0x1169, 0x11AA] }, +{ source: [0xBAAC], NFC: [0xBAAC], NFD: [0x1106, 0x1169, 0x11AB], NFKC: [0xBAAC], NFKD: [0x1106, 0x1169, 0x11AB] }, +{ source: [0xBAAD], NFC: [0xBAAD], NFD: [0x1106, 0x1169, 0x11AC], NFKC: [0xBAAD], NFKD: [0x1106, 0x1169, 0x11AC] }, +{ source: [0xBAAE], NFC: [0xBAAE], NFD: [0x1106, 0x1169, 0x11AD], NFKC: [0xBAAE], NFKD: [0x1106, 0x1169, 0x11AD] }, +{ source: [0xBAAF], NFC: [0xBAAF], NFD: [0x1106, 0x1169, 0x11AE], NFKC: [0xBAAF], NFKD: [0x1106, 0x1169, 0x11AE] }, +{ source: [0xBAB0], NFC: [0xBAB0], NFD: [0x1106, 0x1169, 0x11AF], NFKC: [0xBAB0], NFKD: [0x1106, 0x1169, 0x11AF] }, +{ source: [0xBAB1], NFC: [0xBAB1], NFD: [0x1106, 0x1169, 0x11B0], NFKC: [0xBAB1], NFKD: [0x1106, 0x1169, 0x11B0] }, +{ source: [0xBAB2], NFC: [0xBAB2], NFD: [0x1106, 0x1169, 0x11B1], NFKC: [0xBAB2], NFKD: [0x1106, 0x1169, 0x11B1] }, +{ source: [0xBAB3], NFC: [0xBAB3], NFD: [0x1106, 0x1169, 0x11B2], NFKC: [0xBAB3], NFKD: [0x1106, 0x1169, 0x11B2] }, +{ source: [0xBAB4], NFC: [0xBAB4], NFD: [0x1106, 0x1169, 0x11B3], NFKC: [0xBAB4], NFKD: [0x1106, 0x1169, 0x11B3] }, +{ source: [0xBAB5], NFC: [0xBAB5], NFD: [0x1106, 0x1169, 0x11B4], NFKC: [0xBAB5], NFKD: [0x1106, 0x1169, 0x11B4] }, +{ source: [0xBAB6], NFC: [0xBAB6], NFD: [0x1106, 0x1169, 0x11B5], NFKC: [0xBAB6], NFKD: [0x1106, 0x1169, 0x11B5] }, +{ source: [0xBAB7], NFC: [0xBAB7], NFD: [0x1106, 0x1169, 0x11B6], NFKC: [0xBAB7], NFKD: [0x1106, 0x1169, 0x11B6] }, +{ source: [0xBAB8], NFC: [0xBAB8], NFD: [0x1106, 0x1169, 0x11B7], NFKC: [0xBAB8], NFKD: [0x1106, 0x1169, 0x11B7] }, +{ source: [0xBAB9], NFC: [0xBAB9], NFD: [0x1106, 0x1169, 0x11B8], NFKC: [0xBAB9], NFKD: [0x1106, 0x1169, 0x11B8] }, +{ source: [0xBABA], NFC: [0xBABA], NFD: [0x1106, 0x1169, 0x11B9], NFKC: [0xBABA], NFKD: [0x1106, 0x1169, 0x11B9] }, +{ source: [0xBABB], NFC: [0xBABB], NFD: [0x1106, 0x1169, 0x11BA], NFKC: [0xBABB], NFKD: [0x1106, 0x1169, 0x11BA] }, +{ source: [0xBABC], NFC: [0xBABC], NFD: [0x1106, 0x1169, 0x11BB], NFKC: [0xBABC], NFKD: [0x1106, 0x1169, 0x11BB] }, +{ source: [0xBABD], NFC: [0xBABD], NFD: [0x1106, 0x1169, 0x11BC], NFKC: [0xBABD], NFKD: [0x1106, 0x1169, 0x11BC] }, +{ source: [0xBABE], NFC: [0xBABE], NFD: [0x1106, 0x1169, 0x11BD], NFKC: [0xBABE], NFKD: [0x1106, 0x1169, 0x11BD] }, +{ source: [0xBABF], NFC: [0xBABF], NFD: [0x1106, 0x1169, 0x11BE], NFKC: [0xBABF], NFKD: [0x1106, 0x1169, 0x11BE] }, +{ source: [0xBAC0], NFC: [0xBAC0], NFD: [0x1106, 0x1169, 0x11BF], NFKC: [0xBAC0], NFKD: [0x1106, 0x1169, 0x11BF] }, +{ source: [0xBAC1], NFC: [0xBAC1], NFD: [0x1106, 0x1169, 0x11C0], NFKC: [0xBAC1], NFKD: [0x1106, 0x1169, 0x11C0] }, +{ source: [0xBAC2], NFC: [0xBAC2], NFD: [0x1106, 0x1169, 0x11C1], NFKC: [0xBAC2], NFKD: [0x1106, 0x1169, 0x11C1] }, +{ source: [0xBAC3], NFC: [0xBAC3], NFD: [0x1106, 0x1169, 0x11C2], NFKC: [0xBAC3], NFKD: [0x1106, 0x1169, 0x11C2] }, +{ source: [0xBAC4], NFC: [0xBAC4], NFD: [0x1106, 0x116A], NFKC: [0xBAC4], NFKD: [0x1106, 0x116A] }, +{ source: [0xBAC5], NFC: [0xBAC5], NFD: [0x1106, 0x116A, 0x11A8], NFKC: [0xBAC5], NFKD: [0x1106, 0x116A, 0x11A8] }, +{ source: [0xBAC6], NFC: [0xBAC6], NFD: [0x1106, 0x116A, 0x11A9], NFKC: [0xBAC6], NFKD: [0x1106, 0x116A, 0x11A9] }, +{ source: [0xBAC7], NFC: [0xBAC7], NFD: [0x1106, 0x116A, 0x11AA], NFKC: [0xBAC7], NFKD: [0x1106, 0x116A, 0x11AA] }, +{ source: [0xBAC8], NFC: [0xBAC8], NFD: [0x1106, 0x116A, 0x11AB], NFKC: [0xBAC8], NFKD: [0x1106, 0x116A, 0x11AB] }, +{ source: [0xBAC9], NFC: [0xBAC9], NFD: [0x1106, 0x116A, 0x11AC], NFKC: [0xBAC9], NFKD: [0x1106, 0x116A, 0x11AC] }, +{ source: [0xBACA], NFC: [0xBACA], NFD: [0x1106, 0x116A, 0x11AD], NFKC: [0xBACA], NFKD: [0x1106, 0x116A, 0x11AD] }, +{ source: [0xBACB], NFC: [0xBACB], NFD: [0x1106, 0x116A, 0x11AE], NFKC: [0xBACB], NFKD: [0x1106, 0x116A, 0x11AE] }, +{ source: [0xBACC], NFC: [0xBACC], NFD: [0x1106, 0x116A, 0x11AF], NFKC: [0xBACC], NFKD: [0x1106, 0x116A, 0x11AF] }, +{ source: [0xBACD], NFC: [0xBACD], NFD: [0x1106, 0x116A, 0x11B0], NFKC: [0xBACD], NFKD: [0x1106, 0x116A, 0x11B0] }, +{ source: [0xBACE], NFC: [0xBACE], NFD: [0x1106, 0x116A, 0x11B1], NFKC: [0xBACE], NFKD: [0x1106, 0x116A, 0x11B1] }, +{ source: [0xBACF], NFC: [0xBACF], NFD: [0x1106, 0x116A, 0x11B2], NFKC: [0xBACF], NFKD: [0x1106, 0x116A, 0x11B2] }, +{ source: [0xBAD0], NFC: [0xBAD0], NFD: [0x1106, 0x116A, 0x11B3], NFKC: [0xBAD0], NFKD: [0x1106, 0x116A, 0x11B3] }, +{ source: [0xBAD1], NFC: [0xBAD1], NFD: [0x1106, 0x116A, 0x11B4], NFKC: [0xBAD1], NFKD: [0x1106, 0x116A, 0x11B4] }, +{ source: [0xBAD2], NFC: [0xBAD2], NFD: [0x1106, 0x116A, 0x11B5], NFKC: [0xBAD2], NFKD: [0x1106, 0x116A, 0x11B5] }, +{ source: [0xBAD3], NFC: [0xBAD3], NFD: [0x1106, 0x116A, 0x11B6], NFKC: [0xBAD3], NFKD: [0x1106, 0x116A, 0x11B6] }, +{ source: [0xBAD4], NFC: [0xBAD4], NFD: [0x1106, 0x116A, 0x11B7], NFKC: [0xBAD4], NFKD: [0x1106, 0x116A, 0x11B7] }, +{ source: [0xBAD5], NFC: [0xBAD5], NFD: [0x1106, 0x116A, 0x11B8], NFKC: [0xBAD5], NFKD: [0x1106, 0x116A, 0x11B8] }, +{ source: [0xBAD6], NFC: [0xBAD6], NFD: [0x1106, 0x116A, 0x11B9], NFKC: [0xBAD6], NFKD: [0x1106, 0x116A, 0x11B9] }, +{ source: [0xBAD7], NFC: [0xBAD7], NFD: [0x1106, 0x116A, 0x11BA], NFKC: [0xBAD7], NFKD: [0x1106, 0x116A, 0x11BA] }, +{ source: [0xBAD8], NFC: [0xBAD8], NFD: [0x1106, 0x116A, 0x11BB], NFKC: [0xBAD8], NFKD: [0x1106, 0x116A, 0x11BB] }, +{ source: [0xBAD9], NFC: [0xBAD9], NFD: [0x1106, 0x116A, 0x11BC], NFKC: [0xBAD9], NFKD: [0x1106, 0x116A, 0x11BC] }, +{ source: [0xBADA], NFC: [0xBADA], NFD: [0x1106, 0x116A, 0x11BD], NFKC: [0xBADA], NFKD: [0x1106, 0x116A, 0x11BD] }, +{ source: [0xBADB], NFC: [0xBADB], NFD: [0x1106, 0x116A, 0x11BE], NFKC: [0xBADB], NFKD: [0x1106, 0x116A, 0x11BE] }, +{ source: [0xBADC], NFC: [0xBADC], NFD: [0x1106, 0x116A, 0x11BF], NFKC: [0xBADC], NFKD: [0x1106, 0x116A, 0x11BF] }, +{ source: [0xBADD], NFC: [0xBADD], NFD: [0x1106, 0x116A, 0x11C0], NFKC: [0xBADD], NFKD: [0x1106, 0x116A, 0x11C0] }, +{ source: [0xBADE], NFC: [0xBADE], NFD: [0x1106, 0x116A, 0x11C1], NFKC: [0xBADE], NFKD: [0x1106, 0x116A, 0x11C1] }, +{ source: [0xBADF], NFC: [0xBADF], NFD: [0x1106, 0x116A, 0x11C2], NFKC: [0xBADF], NFKD: [0x1106, 0x116A, 0x11C2] }, +{ source: [0xBAE0], NFC: [0xBAE0], NFD: [0x1106, 0x116B], NFKC: [0xBAE0], NFKD: [0x1106, 0x116B] }, +{ source: [0xBAE1], NFC: [0xBAE1], NFD: [0x1106, 0x116B, 0x11A8], NFKC: [0xBAE1], NFKD: [0x1106, 0x116B, 0x11A8] }, +{ source: [0xBAE2], NFC: [0xBAE2], NFD: [0x1106, 0x116B, 0x11A9], NFKC: [0xBAE2], NFKD: [0x1106, 0x116B, 0x11A9] }, +{ source: [0xBAE3], NFC: [0xBAE3], NFD: [0x1106, 0x116B, 0x11AA], NFKC: [0xBAE3], NFKD: [0x1106, 0x116B, 0x11AA] }, +{ source: [0xBAE4], NFC: [0xBAE4], NFD: [0x1106, 0x116B, 0x11AB], NFKC: [0xBAE4], NFKD: [0x1106, 0x116B, 0x11AB] }, +{ source: [0xBAE5], NFC: [0xBAE5], NFD: [0x1106, 0x116B, 0x11AC], NFKC: [0xBAE5], NFKD: [0x1106, 0x116B, 0x11AC] }, +{ source: [0xBAE6], NFC: [0xBAE6], NFD: [0x1106, 0x116B, 0x11AD], NFKC: [0xBAE6], NFKD: [0x1106, 0x116B, 0x11AD] }, +{ source: [0xBAE7], NFC: [0xBAE7], NFD: [0x1106, 0x116B, 0x11AE], NFKC: [0xBAE7], NFKD: [0x1106, 0x116B, 0x11AE] }, +{ source: [0xBAE8], NFC: [0xBAE8], NFD: [0x1106, 0x116B, 0x11AF], NFKC: [0xBAE8], NFKD: [0x1106, 0x116B, 0x11AF] }, +{ source: [0xBAE9], NFC: [0xBAE9], NFD: [0x1106, 0x116B, 0x11B0], NFKC: [0xBAE9], NFKD: [0x1106, 0x116B, 0x11B0] }, +{ source: [0xBAEA], NFC: [0xBAEA], NFD: [0x1106, 0x116B, 0x11B1], NFKC: [0xBAEA], NFKD: [0x1106, 0x116B, 0x11B1] }, +{ source: [0xBAEB], NFC: [0xBAEB], NFD: [0x1106, 0x116B, 0x11B2], NFKC: [0xBAEB], NFKD: [0x1106, 0x116B, 0x11B2] }, +{ source: [0xBAEC], NFC: [0xBAEC], NFD: [0x1106, 0x116B, 0x11B3], NFKC: [0xBAEC], NFKD: [0x1106, 0x116B, 0x11B3] }, +{ source: [0xBAED], NFC: [0xBAED], NFD: [0x1106, 0x116B, 0x11B4], NFKC: [0xBAED], NFKD: [0x1106, 0x116B, 0x11B4] }, +{ source: [0xBAEE], NFC: [0xBAEE], NFD: [0x1106, 0x116B, 0x11B5], NFKC: [0xBAEE], NFKD: [0x1106, 0x116B, 0x11B5] }, +{ source: [0xBAEF], NFC: [0xBAEF], NFD: [0x1106, 0x116B, 0x11B6], NFKC: [0xBAEF], NFKD: [0x1106, 0x116B, 0x11B6] }, +{ source: [0xBAF0], NFC: [0xBAF0], NFD: [0x1106, 0x116B, 0x11B7], NFKC: [0xBAF0], NFKD: [0x1106, 0x116B, 0x11B7] }, +{ source: [0xBAF1], NFC: [0xBAF1], NFD: [0x1106, 0x116B, 0x11B8], NFKC: [0xBAF1], NFKD: [0x1106, 0x116B, 0x11B8] }, +{ source: [0xBAF2], NFC: [0xBAF2], NFD: [0x1106, 0x116B, 0x11B9], NFKC: [0xBAF2], NFKD: [0x1106, 0x116B, 0x11B9] }, +{ source: [0xBAF3], NFC: [0xBAF3], NFD: [0x1106, 0x116B, 0x11BA], NFKC: [0xBAF3], NFKD: [0x1106, 0x116B, 0x11BA] }, +{ source: [0xBAF4], NFC: [0xBAF4], NFD: [0x1106, 0x116B, 0x11BB], NFKC: [0xBAF4], NFKD: [0x1106, 0x116B, 0x11BB] }, +{ source: [0xBAF5], NFC: [0xBAF5], NFD: [0x1106, 0x116B, 0x11BC], NFKC: [0xBAF5], NFKD: [0x1106, 0x116B, 0x11BC] }, +{ source: [0xBAF6], NFC: [0xBAF6], NFD: [0x1106, 0x116B, 0x11BD], NFKC: [0xBAF6], NFKD: [0x1106, 0x116B, 0x11BD] }, +{ source: [0xBAF7], NFC: [0xBAF7], NFD: [0x1106, 0x116B, 0x11BE], NFKC: [0xBAF7], NFKD: [0x1106, 0x116B, 0x11BE] }, +{ source: [0xBAF8], NFC: [0xBAF8], NFD: [0x1106, 0x116B, 0x11BF], NFKC: [0xBAF8], NFKD: [0x1106, 0x116B, 0x11BF] }, +{ source: [0xBAF9], NFC: [0xBAF9], NFD: [0x1106, 0x116B, 0x11C0], NFKC: [0xBAF9], NFKD: [0x1106, 0x116B, 0x11C0] }, +{ source: [0xBAFA], NFC: [0xBAFA], NFD: [0x1106, 0x116B, 0x11C1], NFKC: [0xBAFA], NFKD: [0x1106, 0x116B, 0x11C1] }, +{ source: [0xBAFB], NFC: [0xBAFB], NFD: [0x1106, 0x116B, 0x11C2], NFKC: [0xBAFB], NFKD: [0x1106, 0x116B, 0x11C2] }, +{ source: [0xBAFC], NFC: [0xBAFC], NFD: [0x1106, 0x116C], NFKC: [0xBAFC], NFKD: [0x1106, 0x116C] }, +{ source: [0xBAFD], NFC: [0xBAFD], NFD: [0x1106, 0x116C, 0x11A8], NFKC: [0xBAFD], NFKD: [0x1106, 0x116C, 0x11A8] }, +{ source: [0xBAFE], NFC: [0xBAFE], NFD: [0x1106, 0x116C, 0x11A9], NFKC: [0xBAFE], NFKD: [0x1106, 0x116C, 0x11A9] }, +{ source: [0xBAFF], NFC: [0xBAFF], NFD: [0x1106, 0x116C, 0x11AA], NFKC: [0xBAFF], NFKD: [0x1106, 0x116C, 0x11AA] }, +{ source: [0xBB00], NFC: [0xBB00], NFD: [0x1106, 0x116C, 0x11AB], NFKC: [0xBB00], NFKD: [0x1106, 0x116C, 0x11AB] }, +{ source: [0xBB01], NFC: [0xBB01], NFD: [0x1106, 0x116C, 0x11AC], NFKC: [0xBB01], NFKD: [0x1106, 0x116C, 0x11AC] }, +{ source: [0xBB02], NFC: [0xBB02], NFD: [0x1106, 0x116C, 0x11AD], NFKC: [0xBB02], NFKD: [0x1106, 0x116C, 0x11AD] }, +{ source: [0xBB03], NFC: [0xBB03], NFD: [0x1106, 0x116C, 0x11AE], NFKC: [0xBB03], NFKD: [0x1106, 0x116C, 0x11AE] }, +{ source: [0xBB04], NFC: [0xBB04], NFD: [0x1106, 0x116C, 0x11AF], NFKC: [0xBB04], NFKD: [0x1106, 0x116C, 0x11AF] }, +{ source: [0xBB05], NFC: [0xBB05], NFD: [0x1106, 0x116C, 0x11B0], NFKC: [0xBB05], NFKD: [0x1106, 0x116C, 0x11B0] }, +{ source: [0xBB06], NFC: [0xBB06], NFD: [0x1106, 0x116C, 0x11B1], NFKC: [0xBB06], NFKD: [0x1106, 0x116C, 0x11B1] }, +{ source: [0xBB07], NFC: [0xBB07], NFD: [0x1106, 0x116C, 0x11B2], NFKC: [0xBB07], NFKD: [0x1106, 0x116C, 0x11B2] }, +{ source: [0xBB08], NFC: [0xBB08], NFD: [0x1106, 0x116C, 0x11B3], NFKC: [0xBB08], NFKD: [0x1106, 0x116C, 0x11B3] }, +{ source: [0xBB09], NFC: [0xBB09], NFD: [0x1106, 0x116C, 0x11B4], NFKC: [0xBB09], NFKD: [0x1106, 0x116C, 0x11B4] }, +{ source: [0xBB0A], NFC: [0xBB0A], NFD: [0x1106, 0x116C, 0x11B5], NFKC: [0xBB0A], NFKD: [0x1106, 0x116C, 0x11B5] }, +{ source: [0xBB0B], NFC: [0xBB0B], NFD: [0x1106, 0x116C, 0x11B6], NFKC: [0xBB0B], NFKD: [0x1106, 0x116C, 0x11B6] }, +{ source: [0xBB0C], NFC: [0xBB0C], NFD: [0x1106, 0x116C, 0x11B7], NFKC: [0xBB0C], NFKD: [0x1106, 0x116C, 0x11B7] }, +{ source: [0xBB0D], NFC: [0xBB0D], NFD: [0x1106, 0x116C, 0x11B8], NFKC: [0xBB0D], NFKD: [0x1106, 0x116C, 0x11B8] }, +{ source: [0xBB0E], NFC: [0xBB0E], NFD: [0x1106, 0x116C, 0x11B9], NFKC: [0xBB0E], NFKD: [0x1106, 0x116C, 0x11B9] }, +{ source: [0xBB0F], NFC: [0xBB0F], NFD: [0x1106, 0x116C, 0x11BA], NFKC: [0xBB0F], NFKD: [0x1106, 0x116C, 0x11BA] }, +{ source: [0xBB10], NFC: [0xBB10], NFD: [0x1106, 0x116C, 0x11BB], NFKC: [0xBB10], NFKD: [0x1106, 0x116C, 0x11BB] }, +{ source: [0xBB11], NFC: [0xBB11], NFD: [0x1106, 0x116C, 0x11BC], NFKC: [0xBB11], NFKD: [0x1106, 0x116C, 0x11BC] }, +{ source: [0xBB12], NFC: [0xBB12], NFD: [0x1106, 0x116C, 0x11BD], NFKC: [0xBB12], NFKD: [0x1106, 0x116C, 0x11BD] }, +{ source: [0xBB13], NFC: [0xBB13], NFD: [0x1106, 0x116C, 0x11BE], NFKC: [0xBB13], NFKD: [0x1106, 0x116C, 0x11BE] }, +{ source: [0xBB14], NFC: [0xBB14], NFD: [0x1106, 0x116C, 0x11BF], NFKC: [0xBB14], NFKD: [0x1106, 0x116C, 0x11BF] }, +{ source: [0xBB15], NFC: [0xBB15], NFD: [0x1106, 0x116C, 0x11C0], NFKC: [0xBB15], NFKD: [0x1106, 0x116C, 0x11C0] }, +{ source: [0xBB16], NFC: [0xBB16], NFD: [0x1106, 0x116C, 0x11C1], NFKC: [0xBB16], NFKD: [0x1106, 0x116C, 0x11C1] }, +{ source: [0xBB17], NFC: [0xBB17], NFD: [0x1106, 0x116C, 0x11C2], NFKC: [0xBB17], NFKD: [0x1106, 0x116C, 0x11C2] }, +{ source: [0xBB18], NFC: [0xBB18], NFD: [0x1106, 0x116D], NFKC: [0xBB18], NFKD: [0x1106, 0x116D] }, +{ source: [0xBB19], NFC: [0xBB19], NFD: [0x1106, 0x116D, 0x11A8], NFKC: [0xBB19], NFKD: [0x1106, 0x116D, 0x11A8] }, +{ source: [0xBB1A], NFC: [0xBB1A], NFD: [0x1106, 0x116D, 0x11A9], NFKC: [0xBB1A], NFKD: [0x1106, 0x116D, 0x11A9] }, +{ source: [0xBB1B], NFC: [0xBB1B], NFD: [0x1106, 0x116D, 0x11AA], NFKC: [0xBB1B], NFKD: [0x1106, 0x116D, 0x11AA] }, +{ source: [0xBB1C], NFC: [0xBB1C], NFD: [0x1106, 0x116D, 0x11AB], NFKC: [0xBB1C], NFKD: [0x1106, 0x116D, 0x11AB] }, +{ source: [0xBB1D], NFC: [0xBB1D], NFD: [0x1106, 0x116D, 0x11AC], NFKC: [0xBB1D], NFKD: [0x1106, 0x116D, 0x11AC] }, +{ source: [0xBB1E], NFC: [0xBB1E], NFD: [0x1106, 0x116D, 0x11AD], NFKC: [0xBB1E], NFKD: [0x1106, 0x116D, 0x11AD] }, +{ source: [0xBB1F], NFC: [0xBB1F], NFD: [0x1106, 0x116D, 0x11AE], NFKC: [0xBB1F], NFKD: [0x1106, 0x116D, 0x11AE] }, +{ source: [0xBB20], NFC: [0xBB20], NFD: [0x1106, 0x116D, 0x11AF], NFKC: [0xBB20], NFKD: [0x1106, 0x116D, 0x11AF] }, +{ source: [0xBB21], NFC: [0xBB21], NFD: [0x1106, 0x116D, 0x11B0], NFKC: [0xBB21], NFKD: [0x1106, 0x116D, 0x11B0] }, +{ source: [0xBB22], NFC: [0xBB22], NFD: [0x1106, 0x116D, 0x11B1], NFKC: [0xBB22], NFKD: [0x1106, 0x116D, 0x11B1] }, +{ source: [0xBB23], NFC: [0xBB23], NFD: [0x1106, 0x116D, 0x11B2], NFKC: [0xBB23], NFKD: [0x1106, 0x116D, 0x11B2] }, +{ source: [0xBB24], NFC: [0xBB24], NFD: [0x1106, 0x116D, 0x11B3], NFKC: [0xBB24], NFKD: [0x1106, 0x116D, 0x11B3] }, +{ source: [0xBB25], NFC: [0xBB25], NFD: [0x1106, 0x116D, 0x11B4], NFKC: [0xBB25], NFKD: [0x1106, 0x116D, 0x11B4] }, +{ source: [0xBB26], NFC: [0xBB26], NFD: [0x1106, 0x116D, 0x11B5], NFKC: [0xBB26], NFKD: [0x1106, 0x116D, 0x11B5] }, +{ source: [0xBB27], NFC: [0xBB27], NFD: [0x1106, 0x116D, 0x11B6], NFKC: [0xBB27], NFKD: [0x1106, 0x116D, 0x11B6] }, +{ source: [0xBB28], NFC: [0xBB28], NFD: [0x1106, 0x116D, 0x11B7], NFKC: [0xBB28], NFKD: [0x1106, 0x116D, 0x11B7] }, +{ source: [0xBB29], NFC: [0xBB29], NFD: [0x1106, 0x116D, 0x11B8], NFKC: [0xBB29], NFKD: [0x1106, 0x116D, 0x11B8] }, +{ source: [0xBB2A], NFC: [0xBB2A], NFD: [0x1106, 0x116D, 0x11B9], NFKC: [0xBB2A], NFKD: [0x1106, 0x116D, 0x11B9] }, +{ source: [0xBB2B], NFC: [0xBB2B], NFD: [0x1106, 0x116D, 0x11BA], NFKC: [0xBB2B], NFKD: [0x1106, 0x116D, 0x11BA] }, +{ source: [0xBB2C], NFC: [0xBB2C], NFD: [0x1106, 0x116D, 0x11BB], NFKC: [0xBB2C], NFKD: [0x1106, 0x116D, 0x11BB] }, +{ source: [0xBB2D], NFC: [0xBB2D], NFD: [0x1106, 0x116D, 0x11BC], NFKC: [0xBB2D], NFKD: [0x1106, 0x116D, 0x11BC] }, +{ source: [0xBB2E], NFC: [0xBB2E], NFD: [0x1106, 0x116D, 0x11BD], NFKC: [0xBB2E], NFKD: [0x1106, 0x116D, 0x11BD] }, +{ source: [0xBB2F], NFC: [0xBB2F], NFD: [0x1106, 0x116D, 0x11BE], NFKC: [0xBB2F], NFKD: [0x1106, 0x116D, 0x11BE] }, +{ source: [0xBB30], NFC: [0xBB30], NFD: [0x1106, 0x116D, 0x11BF], NFKC: [0xBB30], NFKD: [0x1106, 0x116D, 0x11BF] }, +{ source: [0xBB31], NFC: [0xBB31], NFD: [0x1106, 0x116D, 0x11C0], NFKC: [0xBB31], NFKD: [0x1106, 0x116D, 0x11C0] }, +{ source: [0xBB32], NFC: [0xBB32], NFD: [0x1106, 0x116D, 0x11C1], NFKC: [0xBB32], NFKD: [0x1106, 0x116D, 0x11C1] }, +{ source: [0xBB33], NFC: [0xBB33], NFD: [0x1106, 0x116D, 0x11C2], NFKC: [0xBB33], NFKD: [0x1106, 0x116D, 0x11C2] }, +{ source: [0xBB34], NFC: [0xBB34], NFD: [0x1106, 0x116E], NFKC: [0xBB34], NFKD: [0x1106, 0x116E] }, +{ source: [0xBB35], NFC: [0xBB35], NFD: [0x1106, 0x116E, 0x11A8], NFKC: [0xBB35], NFKD: [0x1106, 0x116E, 0x11A8] }, +{ source: [0xBB36], NFC: [0xBB36], NFD: [0x1106, 0x116E, 0x11A9], NFKC: [0xBB36], NFKD: [0x1106, 0x116E, 0x11A9] }, +{ source: [0xBB37], NFC: [0xBB37], NFD: [0x1106, 0x116E, 0x11AA], NFKC: [0xBB37], NFKD: [0x1106, 0x116E, 0x11AA] }, +{ source: [0xBB38], NFC: [0xBB38], NFD: [0x1106, 0x116E, 0x11AB], NFKC: [0xBB38], NFKD: [0x1106, 0x116E, 0x11AB] }, +{ source: [0xBB39], NFC: [0xBB39], NFD: [0x1106, 0x116E, 0x11AC], NFKC: [0xBB39], NFKD: [0x1106, 0x116E, 0x11AC] }, +{ source: [0xBB3A], NFC: [0xBB3A], NFD: [0x1106, 0x116E, 0x11AD], NFKC: [0xBB3A], NFKD: [0x1106, 0x116E, 0x11AD] }, +{ source: [0xBB3B], NFC: [0xBB3B], NFD: [0x1106, 0x116E, 0x11AE], NFKC: [0xBB3B], NFKD: [0x1106, 0x116E, 0x11AE] }, +{ source: [0xBB3C], NFC: [0xBB3C], NFD: [0x1106, 0x116E, 0x11AF], NFKC: [0xBB3C], NFKD: [0x1106, 0x116E, 0x11AF] }, +{ source: [0xBB3D], NFC: [0xBB3D], NFD: [0x1106, 0x116E, 0x11B0], NFKC: [0xBB3D], NFKD: [0x1106, 0x116E, 0x11B0] }, +{ source: [0xBB3E], NFC: [0xBB3E], NFD: [0x1106, 0x116E, 0x11B1], NFKC: [0xBB3E], NFKD: [0x1106, 0x116E, 0x11B1] }, +{ source: [0xBB3F], NFC: [0xBB3F], NFD: [0x1106, 0x116E, 0x11B2], NFKC: [0xBB3F], NFKD: [0x1106, 0x116E, 0x11B2] }, +{ source: [0xBB40], NFC: [0xBB40], NFD: [0x1106, 0x116E, 0x11B3], NFKC: [0xBB40], NFKD: [0x1106, 0x116E, 0x11B3] }, +{ source: [0xBB41], NFC: [0xBB41], NFD: [0x1106, 0x116E, 0x11B4], NFKC: [0xBB41], NFKD: [0x1106, 0x116E, 0x11B4] }, +{ source: [0xBB42], NFC: [0xBB42], NFD: [0x1106, 0x116E, 0x11B5], NFKC: [0xBB42], NFKD: [0x1106, 0x116E, 0x11B5] }, +{ source: [0xBB43], NFC: [0xBB43], NFD: [0x1106, 0x116E, 0x11B6], NFKC: [0xBB43], NFKD: [0x1106, 0x116E, 0x11B6] }, +{ source: [0xBB44], NFC: [0xBB44], NFD: [0x1106, 0x116E, 0x11B7], NFKC: [0xBB44], NFKD: [0x1106, 0x116E, 0x11B7] }, +{ source: [0xBB45], NFC: [0xBB45], NFD: [0x1106, 0x116E, 0x11B8], NFKC: [0xBB45], NFKD: [0x1106, 0x116E, 0x11B8] }, +{ source: [0xBB46], NFC: [0xBB46], NFD: [0x1106, 0x116E, 0x11B9], NFKC: [0xBB46], NFKD: [0x1106, 0x116E, 0x11B9] }, +{ source: [0xBB47], NFC: [0xBB47], NFD: [0x1106, 0x116E, 0x11BA], NFKC: [0xBB47], NFKD: [0x1106, 0x116E, 0x11BA] }, +{ source: [0xBB48], NFC: [0xBB48], NFD: [0x1106, 0x116E, 0x11BB], NFKC: [0xBB48], NFKD: [0x1106, 0x116E, 0x11BB] }, +{ source: [0xBB49], NFC: [0xBB49], NFD: [0x1106, 0x116E, 0x11BC], NFKC: [0xBB49], NFKD: [0x1106, 0x116E, 0x11BC] }, +{ source: [0xBB4A], NFC: [0xBB4A], NFD: [0x1106, 0x116E, 0x11BD], NFKC: [0xBB4A], NFKD: [0x1106, 0x116E, 0x11BD] }, +{ source: [0xBB4B], NFC: [0xBB4B], NFD: [0x1106, 0x116E, 0x11BE], NFKC: [0xBB4B], NFKD: [0x1106, 0x116E, 0x11BE] }, +{ source: [0xBB4C], NFC: [0xBB4C], NFD: [0x1106, 0x116E, 0x11BF], NFKC: [0xBB4C], NFKD: [0x1106, 0x116E, 0x11BF] }, +{ source: [0xBB4D], NFC: [0xBB4D], NFD: [0x1106, 0x116E, 0x11C0], NFKC: [0xBB4D], NFKD: [0x1106, 0x116E, 0x11C0] }, +{ source: [0xBB4E], NFC: [0xBB4E], NFD: [0x1106, 0x116E, 0x11C1], NFKC: [0xBB4E], NFKD: [0x1106, 0x116E, 0x11C1] }, +{ source: [0xBB4F], NFC: [0xBB4F], NFD: [0x1106, 0x116E, 0x11C2], NFKC: [0xBB4F], NFKD: [0x1106, 0x116E, 0x11C2] }, +{ source: [0xBB50], NFC: [0xBB50], NFD: [0x1106, 0x116F], NFKC: [0xBB50], NFKD: [0x1106, 0x116F] }, +{ source: [0xBB51], NFC: [0xBB51], NFD: [0x1106, 0x116F, 0x11A8], NFKC: [0xBB51], NFKD: [0x1106, 0x116F, 0x11A8] }, +{ source: [0xBB52], NFC: [0xBB52], NFD: [0x1106, 0x116F, 0x11A9], NFKC: [0xBB52], NFKD: [0x1106, 0x116F, 0x11A9] }, +{ source: [0xBB53], NFC: [0xBB53], NFD: [0x1106, 0x116F, 0x11AA], NFKC: [0xBB53], NFKD: [0x1106, 0x116F, 0x11AA] }, +{ source: [0xBB54], NFC: [0xBB54], NFD: [0x1106, 0x116F, 0x11AB], NFKC: [0xBB54], NFKD: [0x1106, 0x116F, 0x11AB] }, +{ source: [0xBB55], NFC: [0xBB55], NFD: [0x1106, 0x116F, 0x11AC], NFKC: [0xBB55], NFKD: [0x1106, 0x116F, 0x11AC] }, +{ source: [0xBB56], NFC: [0xBB56], NFD: [0x1106, 0x116F, 0x11AD], NFKC: [0xBB56], NFKD: [0x1106, 0x116F, 0x11AD] }, +{ source: [0xBB57], NFC: [0xBB57], NFD: [0x1106, 0x116F, 0x11AE], NFKC: [0xBB57], NFKD: [0x1106, 0x116F, 0x11AE] }, +{ source: [0xBB58], NFC: [0xBB58], NFD: [0x1106, 0x116F, 0x11AF], NFKC: [0xBB58], NFKD: [0x1106, 0x116F, 0x11AF] }, +{ source: [0xBB59], NFC: [0xBB59], NFD: [0x1106, 0x116F, 0x11B0], NFKC: [0xBB59], NFKD: [0x1106, 0x116F, 0x11B0] }, +{ source: [0xBB5A], NFC: [0xBB5A], NFD: [0x1106, 0x116F, 0x11B1], NFKC: [0xBB5A], NFKD: [0x1106, 0x116F, 0x11B1] }, +{ source: [0xBB5B], NFC: [0xBB5B], NFD: [0x1106, 0x116F, 0x11B2], NFKC: [0xBB5B], NFKD: [0x1106, 0x116F, 0x11B2] }, +{ source: [0xBB5C], NFC: [0xBB5C], NFD: [0x1106, 0x116F, 0x11B3], NFKC: [0xBB5C], NFKD: [0x1106, 0x116F, 0x11B3] }, +{ source: [0xBB5D], NFC: [0xBB5D], NFD: [0x1106, 0x116F, 0x11B4], NFKC: [0xBB5D], NFKD: [0x1106, 0x116F, 0x11B4] }, +{ source: [0xBB5E], NFC: [0xBB5E], NFD: [0x1106, 0x116F, 0x11B5], NFKC: [0xBB5E], NFKD: [0x1106, 0x116F, 0x11B5] }, +{ source: [0xBB5F], NFC: [0xBB5F], NFD: [0x1106, 0x116F, 0x11B6], NFKC: [0xBB5F], NFKD: [0x1106, 0x116F, 0x11B6] }, +{ source: [0xBB60], NFC: [0xBB60], NFD: [0x1106, 0x116F, 0x11B7], NFKC: [0xBB60], NFKD: [0x1106, 0x116F, 0x11B7] }, +{ source: [0xBB61], NFC: [0xBB61], NFD: [0x1106, 0x116F, 0x11B8], NFKC: [0xBB61], NFKD: [0x1106, 0x116F, 0x11B8] }, +{ source: [0xBB62], NFC: [0xBB62], NFD: [0x1106, 0x116F, 0x11B9], NFKC: [0xBB62], NFKD: [0x1106, 0x116F, 0x11B9] }, +{ source: [0xBB63], NFC: [0xBB63], NFD: [0x1106, 0x116F, 0x11BA], NFKC: [0xBB63], NFKD: [0x1106, 0x116F, 0x11BA] }, +{ source: [0xBB64], NFC: [0xBB64], NFD: [0x1106, 0x116F, 0x11BB], NFKC: [0xBB64], NFKD: [0x1106, 0x116F, 0x11BB] }, +{ source: [0xBB65], NFC: [0xBB65], NFD: [0x1106, 0x116F, 0x11BC], NFKC: [0xBB65], NFKD: [0x1106, 0x116F, 0x11BC] }, +{ source: [0xBB66], NFC: [0xBB66], NFD: [0x1106, 0x116F, 0x11BD], NFKC: [0xBB66], NFKD: [0x1106, 0x116F, 0x11BD] }, +{ source: [0xBB67], NFC: [0xBB67], NFD: [0x1106, 0x116F, 0x11BE], NFKC: [0xBB67], NFKD: [0x1106, 0x116F, 0x11BE] }, +{ source: [0xBB68], NFC: [0xBB68], NFD: [0x1106, 0x116F, 0x11BF], NFKC: [0xBB68], NFKD: [0x1106, 0x116F, 0x11BF] }, +{ source: [0xBB69], NFC: [0xBB69], NFD: [0x1106, 0x116F, 0x11C0], NFKC: [0xBB69], NFKD: [0x1106, 0x116F, 0x11C0] }, +{ source: [0xBB6A], NFC: [0xBB6A], NFD: [0x1106, 0x116F, 0x11C1], NFKC: [0xBB6A], NFKD: [0x1106, 0x116F, 0x11C1] }, +{ source: [0xBB6B], NFC: [0xBB6B], NFD: [0x1106, 0x116F, 0x11C2], NFKC: [0xBB6B], NFKD: [0x1106, 0x116F, 0x11C2] }, +{ source: [0xBB6C], NFC: [0xBB6C], NFD: [0x1106, 0x1170], NFKC: [0xBB6C], NFKD: [0x1106, 0x1170] }, +{ source: [0xBB6D], NFC: [0xBB6D], NFD: [0x1106, 0x1170, 0x11A8], NFKC: [0xBB6D], NFKD: [0x1106, 0x1170, 0x11A8] }, +{ source: [0xBB6E], NFC: [0xBB6E], NFD: [0x1106, 0x1170, 0x11A9], NFKC: [0xBB6E], NFKD: [0x1106, 0x1170, 0x11A9] }, +{ source: [0xBB6F], NFC: [0xBB6F], NFD: [0x1106, 0x1170, 0x11AA], NFKC: [0xBB6F], NFKD: [0x1106, 0x1170, 0x11AA] }, +{ source: [0xBB70], NFC: [0xBB70], NFD: [0x1106, 0x1170, 0x11AB], NFKC: [0xBB70], NFKD: [0x1106, 0x1170, 0x11AB] }, +{ source: [0xBB71], NFC: [0xBB71], NFD: [0x1106, 0x1170, 0x11AC], NFKC: [0xBB71], NFKD: [0x1106, 0x1170, 0x11AC] }, +{ source: [0xBB72], NFC: [0xBB72], NFD: [0x1106, 0x1170, 0x11AD], NFKC: [0xBB72], NFKD: [0x1106, 0x1170, 0x11AD] }, +{ source: [0xBB73], NFC: [0xBB73], NFD: [0x1106, 0x1170, 0x11AE], NFKC: [0xBB73], NFKD: [0x1106, 0x1170, 0x11AE] }, +{ source: [0xBB74], NFC: [0xBB74], NFD: [0x1106, 0x1170, 0x11AF], NFKC: [0xBB74], NFKD: [0x1106, 0x1170, 0x11AF] }, +{ source: [0xBB75], NFC: [0xBB75], NFD: [0x1106, 0x1170, 0x11B0], NFKC: [0xBB75], NFKD: [0x1106, 0x1170, 0x11B0] }, +{ source: [0xBB76], NFC: [0xBB76], NFD: [0x1106, 0x1170, 0x11B1], NFKC: [0xBB76], NFKD: [0x1106, 0x1170, 0x11B1] }, +{ source: [0xBB77], NFC: [0xBB77], NFD: [0x1106, 0x1170, 0x11B2], NFKC: [0xBB77], NFKD: [0x1106, 0x1170, 0x11B2] }, +{ source: [0xBB78], NFC: [0xBB78], NFD: [0x1106, 0x1170, 0x11B3], NFKC: [0xBB78], NFKD: [0x1106, 0x1170, 0x11B3] }, +{ source: [0xBB79], NFC: [0xBB79], NFD: [0x1106, 0x1170, 0x11B4], NFKC: [0xBB79], NFKD: [0x1106, 0x1170, 0x11B4] }, +{ source: [0xBB7A], NFC: [0xBB7A], NFD: [0x1106, 0x1170, 0x11B5], NFKC: [0xBB7A], NFKD: [0x1106, 0x1170, 0x11B5] }, +{ source: [0xBB7B], NFC: [0xBB7B], NFD: [0x1106, 0x1170, 0x11B6], NFKC: [0xBB7B], NFKD: [0x1106, 0x1170, 0x11B6] }, +{ source: [0xBB7C], NFC: [0xBB7C], NFD: [0x1106, 0x1170, 0x11B7], NFKC: [0xBB7C], NFKD: [0x1106, 0x1170, 0x11B7] }, +{ source: [0xBB7D], NFC: [0xBB7D], NFD: [0x1106, 0x1170, 0x11B8], NFKC: [0xBB7D], NFKD: [0x1106, 0x1170, 0x11B8] }, +{ source: [0xBB7E], NFC: [0xBB7E], NFD: [0x1106, 0x1170, 0x11B9], NFKC: [0xBB7E], NFKD: [0x1106, 0x1170, 0x11B9] }, +{ source: [0xBB7F], NFC: [0xBB7F], NFD: [0x1106, 0x1170, 0x11BA], NFKC: [0xBB7F], NFKD: [0x1106, 0x1170, 0x11BA] }, +{ source: [0xBB80], NFC: [0xBB80], NFD: [0x1106, 0x1170, 0x11BB], NFKC: [0xBB80], NFKD: [0x1106, 0x1170, 0x11BB] }, +{ source: [0xBB81], NFC: [0xBB81], NFD: [0x1106, 0x1170, 0x11BC], NFKC: [0xBB81], NFKD: [0x1106, 0x1170, 0x11BC] }, +{ source: [0xBB82], NFC: [0xBB82], NFD: [0x1106, 0x1170, 0x11BD], NFKC: [0xBB82], NFKD: [0x1106, 0x1170, 0x11BD] }, +{ source: [0xBB83], NFC: [0xBB83], NFD: [0x1106, 0x1170, 0x11BE], NFKC: [0xBB83], NFKD: [0x1106, 0x1170, 0x11BE] }, +{ source: [0xBB84], NFC: [0xBB84], NFD: [0x1106, 0x1170, 0x11BF], NFKC: [0xBB84], NFKD: [0x1106, 0x1170, 0x11BF] }, +{ source: [0xBB85], NFC: [0xBB85], NFD: [0x1106, 0x1170, 0x11C0], NFKC: [0xBB85], NFKD: [0x1106, 0x1170, 0x11C0] }, +{ source: [0xBB86], NFC: [0xBB86], NFD: [0x1106, 0x1170, 0x11C1], NFKC: [0xBB86], NFKD: [0x1106, 0x1170, 0x11C1] }, +{ source: [0xBB87], NFC: [0xBB87], NFD: [0x1106, 0x1170, 0x11C2], NFKC: [0xBB87], NFKD: [0x1106, 0x1170, 0x11C2] }, +{ source: [0xBB88], NFC: [0xBB88], NFD: [0x1106, 0x1171], NFKC: [0xBB88], NFKD: [0x1106, 0x1171] }, +{ source: [0xBB89], NFC: [0xBB89], NFD: [0x1106, 0x1171, 0x11A8], NFKC: [0xBB89], NFKD: [0x1106, 0x1171, 0x11A8] }, +{ source: [0xBB8A], NFC: [0xBB8A], NFD: [0x1106, 0x1171, 0x11A9], NFKC: [0xBB8A], NFKD: [0x1106, 0x1171, 0x11A9] }, +{ source: [0xBB8B], NFC: [0xBB8B], NFD: [0x1106, 0x1171, 0x11AA], NFKC: [0xBB8B], NFKD: [0x1106, 0x1171, 0x11AA] }, +{ source: [0xBB8C], NFC: [0xBB8C], NFD: [0x1106, 0x1171, 0x11AB], NFKC: [0xBB8C], NFKD: [0x1106, 0x1171, 0x11AB] }, +{ source: [0xBB8D], NFC: [0xBB8D], NFD: [0x1106, 0x1171, 0x11AC], NFKC: [0xBB8D], NFKD: [0x1106, 0x1171, 0x11AC] }, +{ source: [0xBB8E], NFC: [0xBB8E], NFD: [0x1106, 0x1171, 0x11AD], NFKC: [0xBB8E], NFKD: [0x1106, 0x1171, 0x11AD] }, +{ source: [0xBB8F], NFC: [0xBB8F], NFD: [0x1106, 0x1171, 0x11AE], NFKC: [0xBB8F], NFKD: [0x1106, 0x1171, 0x11AE] }, +{ source: [0xBB90], NFC: [0xBB90], NFD: [0x1106, 0x1171, 0x11AF], NFKC: [0xBB90], NFKD: [0x1106, 0x1171, 0x11AF] }, +{ source: [0xBB91], NFC: [0xBB91], NFD: [0x1106, 0x1171, 0x11B0], NFKC: [0xBB91], NFKD: [0x1106, 0x1171, 0x11B0] }, +{ source: [0xBB92], NFC: [0xBB92], NFD: [0x1106, 0x1171, 0x11B1], NFKC: [0xBB92], NFKD: [0x1106, 0x1171, 0x11B1] }, +{ source: [0xBB93], NFC: [0xBB93], NFD: [0x1106, 0x1171, 0x11B2], NFKC: [0xBB93], NFKD: [0x1106, 0x1171, 0x11B2] }, +{ source: [0xBB94], NFC: [0xBB94], NFD: [0x1106, 0x1171, 0x11B3], NFKC: [0xBB94], NFKD: [0x1106, 0x1171, 0x11B3] }, +{ source: [0xBB95], NFC: [0xBB95], NFD: [0x1106, 0x1171, 0x11B4], NFKC: [0xBB95], NFKD: [0x1106, 0x1171, 0x11B4] }, +{ source: [0xBB96], NFC: [0xBB96], NFD: [0x1106, 0x1171, 0x11B5], NFKC: [0xBB96], NFKD: [0x1106, 0x1171, 0x11B5] }, +{ source: [0xBB97], NFC: [0xBB97], NFD: [0x1106, 0x1171, 0x11B6], NFKC: [0xBB97], NFKD: [0x1106, 0x1171, 0x11B6] }, +{ source: [0xBB98], NFC: [0xBB98], NFD: [0x1106, 0x1171, 0x11B7], NFKC: [0xBB98], NFKD: [0x1106, 0x1171, 0x11B7] }, +{ source: [0xBB99], NFC: [0xBB99], NFD: [0x1106, 0x1171, 0x11B8], NFKC: [0xBB99], NFKD: [0x1106, 0x1171, 0x11B8] }, +{ source: [0xBB9A], NFC: [0xBB9A], NFD: [0x1106, 0x1171, 0x11B9], NFKC: [0xBB9A], NFKD: [0x1106, 0x1171, 0x11B9] }, +{ source: [0xBB9B], NFC: [0xBB9B], NFD: [0x1106, 0x1171, 0x11BA], NFKC: [0xBB9B], NFKD: [0x1106, 0x1171, 0x11BA] }, +{ source: [0xBB9C], NFC: [0xBB9C], NFD: [0x1106, 0x1171, 0x11BB], NFKC: [0xBB9C], NFKD: [0x1106, 0x1171, 0x11BB] }, +{ source: [0xBB9D], NFC: [0xBB9D], NFD: [0x1106, 0x1171, 0x11BC], NFKC: [0xBB9D], NFKD: [0x1106, 0x1171, 0x11BC] }, +{ source: [0xBB9E], NFC: [0xBB9E], NFD: [0x1106, 0x1171, 0x11BD], NFKC: [0xBB9E], NFKD: [0x1106, 0x1171, 0x11BD] }, +{ source: [0xBB9F], NFC: [0xBB9F], NFD: [0x1106, 0x1171, 0x11BE], NFKC: [0xBB9F], NFKD: [0x1106, 0x1171, 0x11BE] }, +{ source: [0xBBA0], NFC: [0xBBA0], NFD: [0x1106, 0x1171, 0x11BF], NFKC: [0xBBA0], NFKD: [0x1106, 0x1171, 0x11BF] }, +{ source: [0xBBA1], NFC: [0xBBA1], NFD: [0x1106, 0x1171, 0x11C0], NFKC: [0xBBA1], NFKD: [0x1106, 0x1171, 0x11C0] }, +{ source: [0xBBA2], NFC: [0xBBA2], NFD: [0x1106, 0x1171, 0x11C1], NFKC: [0xBBA2], NFKD: [0x1106, 0x1171, 0x11C1] }, +{ source: [0xBBA3], NFC: [0xBBA3], NFD: [0x1106, 0x1171, 0x11C2], NFKC: [0xBBA3], NFKD: [0x1106, 0x1171, 0x11C2] }, +{ source: [0xBBA4], NFC: [0xBBA4], NFD: [0x1106, 0x1172], NFKC: [0xBBA4], NFKD: [0x1106, 0x1172] }, +{ source: [0xBBA5], NFC: [0xBBA5], NFD: [0x1106, 0x1172, 0x11A8], NFKC: [0xBBA5], NFKD: [0x1106, 0x1172, 0x11A8] }, +{ source: [0xBBA6], NFC: [0xBBA6], NFD: [0x1106, 0x1172, 0x11A9], NFKC: [0xBBA6], NFKD: [0x1106, 0x1172, 0x11A9] }, +{ source: [0xBBA7], NFC: [0xBBA7], NFD: [0x1106, 0x1172, 0x11AA], NFKC: [0xBBA7], NFKD: [0x1106, 0x1172, 0x11AA] }, +{ source: [0xBBA8], NFC: [0xBBA8], NFD: [0x1106, 0x1172, 0x11AB], NFKC: [0xBBA8], NFKD: [0x1106, 0x1172, 0x11AB] }, +{ source: [0xBBA9], NFC: [0xBBA9], NFD: [0x1106, 0x1172, 0x11AC], NFKC: [0xBBA9], NFKD: [0x1106, 0x1172, 0x11AC] }, +{ source: [0xBBAA], NFC: [0xBBAA], NFD: [0x1106, 0x1172, 0x11AD], NFKC: [0xBBAA], NFKD: [0x1106, 0x1172, 0x11AD] }, +{ source: [0xBBAB], NFC: [0xBBAB], NFD: [0x1106, 0x1172, 0x11AE], NFKC: [0xBBAB], NFKD: [0x1106, 0x1172, 0x11AE] }, +{ source: [0xBBAC], NFC: [0xBBAC], NFD: [0x1106, 0x1172, 0x11AF], NFKC: [0xBBAC], NFKD: [0x1106, 0x1172, 0x11AF] }, +{ source: [0xBBAD], NFC: [0xBBAD], NFD: [0x1106, 0x1172, 0x11B0], NFKC: [0xBBAD], NFKD: [0x1106, 0x1172, 0x11B0] }, +{ source: [0xBBAE], NFC: [0xBBAE], NFD: [0x1106, 0x1172, 0x11B1], NFKC: [0xBBAE], NFKD: [0x1106, 0x1172, 0x11B1] }, +{ source: [0xBBAF], NFC: [0xBBAF], NFD: [0x1106, 0x1172, 0x11B2], NFKC: [0xBBAF], NFKD: [0x1106, 0x1172, 0x11B2] }, +{ source: [0xBBB0], NFC: [0xBBB0], NFD: [0x1106, 0x1172, 0x11B3], NFKC: [0xBBB0], NFKD: [0x1106, 0x1172, 0x11B3] }, +{ source: [0xBBB1], NFC: [0xBBB1], NFD: [0x1106, 0x1172, 0x11B4], NFKC: [0xBBB1], NFKD: [0x1106, 0x1172, 0x11B4] }, +{ source: [0xBBB2], NFC: [0xBBB2], NFD: [0x1106, 0x1172, 0x11B5], NFKC: [0xBBB2], NFKD: [0x1106, 0x1172, 0x11B5] }, +{ source: [0xBBB3], NFC: [0xBBB3], NFD: [0x1106, 0x1172, 0x11B6], NFKC: [0xBBB3], NFKD: [0x1106, 0x1172, 0x11B6] }, +{ source: [0xBBB4], NFC: [0xBBB4], NFD: [0x1106, 0x1172, 0x11B7], NFKC: [0xBBB4], NFKD: [0x1106, 0x1172, 0x11B7] }, +{ source: [0xBBB5], NFC: [0xBBB5], NFD: [0x1106, 0x1172, 0x11B8], NFKC: [0xBBB5], NFKD: [0x1106, 0x1172, 0x11B8] }, +{ source: [0xBBB6], NFC: [0xBBB6], NFD: [0x1106, 0x1172, 0x11B9], NFKC: [0xBBB6], NFKD: [0x1106, 0x1172, 0x11B9] }, +{ source: [0xBBB7], NFC: [0xBBB7], NFD: [0x1106, 0x1172, 0x11BA], NFKC: [0xBBB7], NFKD: [0x1106, 0x1172, 0x11BA] }, +{ source: [0xBBB8], NFC: [0xBBB8], NFD: [0x1106, 0x1172, 0x11BB], NFKC: [0xBBB8], NFKD: [0x1106, 0x1172, 0x11BB] }, +{ source: [0xBBB9], NFC: [0xBBB9], NFD: [0x1106, 0x1172, 0x11BC], NFKC: [0xBBB9], NFKD: [0x1106, 0x1172, 0x11BC] }, +{ source: [0xBBBA], NFC: [0xBBBA], NFD: [0x1106, 0x1172, 0x11BD], NFKC: [0xBBBA], NFKD: [0x1106, 0x1172, 0x11BD] }, +{ source: [0xBBBB], NFC: [0xBBBB], NFD: [0x1106, 0x1172, 0x11BE], NFKC: [0xBBBB], NFKD: [0x1106, 0x1172, 0x11BE] }, +{ source: [0xBBBC], NFC: [0xBBBC], NFD: [0x1106, 0x1172, 0x11BF], NFKC: [0xBBBC], NFKD: [0x1106, 0x1172, 0x11BF] }, +{ source: [0xBBBD], NFC: [0xBBBD], NFD: [0x1106, 0x1172, 0x11C0], NFKC: [0xBBBD], NFKD: [0x1106, 0x1172, 0x11C0] }, +{ source: [0xBBBE], NFC: [0xBBBE], NFD: [0x1106, 0x1172, 0x11C1], NFKC: [0xBBBE], NFKD: [0x1106, 0x1172, 0x11C1] }, +{ source: [0xBBBF], NFC: [0xBBBF], NFD: [0x1106, 0x1172, 0x11C2], NFKC: [0xBBBF], NFKD: [0x1106, 0x1172, 0x11C2] }, +{ source: [0xBBC0], NFC: [0xBBC0], NFD: [0x1106, 0x1173], NFKC: [0xBBC0], NFKD: [0x1106, 0x1173] }, +{ source: [0xBBC1], NFC: [0xBBC1], NFD: [0x1106, 0x1173, 0x11A8], NFKC: [0xBBC1], NFKD: [0x1106, 0x1173, 0x11A8] }, +{ source: [0xBBC2], NFC: [0xBBC2], NFD: [0x1106, 0x1173, 0x11A9], NFKC: [0xBBC2], NFKD: [0x1106, 0x1173, 0x11A9] }, +{ source: [0xBBC3], NFC: [0xBBC3], NFD: [0x1106, 0x1173, 0x11AA], NFKC: [0xBBC3], NFKD: [0x1106, 0x1173, 0x11AA] }, +{ source: [0xBBC4], NFC: [0xBBC4], NFD: [0x1106, 0x1173, 0x11AB], NFKC: [0xBBC4], NFKD: [0x1106, 0x1173, 0x11AB] }, +{ source: [0xBBC5], NFC: [0xBBC5], NFD: [0x1106, 0x1173, 0x11AC], NFKC: [0xBBC5], NFKD: [0x1106, 0x1173, 0x11AC] }, +{ source: [0xBBC6], NFC: [0xBBC6], NFD: [0x1106, 0x1173, 0x11AD], NFKC: [0xBBC6], NFKD: [0x1106, 0x1173, 0x11AD] }, +{ source: [0xBBC7], NFC: [0xBBC7], NFD: [0x1106, 0x1173, 0x11AE], NFKC: [0xBBC7], NFKD: [0x1106, 0x1173, 0x11AE] }, +{ source: [0xBBC8], NFC: [0xBBC8], NFD: [0x1106, 0x1173, 0x11AF], NFKC: [0xBBC8], NFKD: [0x1106, 0x1173, 0x11AF] }, +{ source: [0xBBC9], NFC: [0xBBC9], NFD: [0x1106, 0x1173, 0x11B0], NFKC: [0xBBC9], NFKD: [0x1106, 0x1173, 0x11B0] }, +{ source: [0xBBCA], NFC: [0xBBCA], NFD: [0x1106, 0x1173, 0x11B1], NFKC: [0xBBCA], NFKD: [0x1106, 0x1173, 0x11B1] }, +{ source: [0xBBCB], NFC: [0xBBCB], NFD: [0x1106, 0x1173, 0x11B2], NFKC: [0xBBCB], NFKD: [0x1106, 0x1173, 0x11B2] }, +{ source: [0xBBCC], NFC: [0xBBCC], NFD: [0x1106, 0x1173, 0x11B3], NFKC: [0xBBCC], NFKD: [0x1106, 0x1173, 0x11B3] }, +{ source: [0xBBCD], NFC: [0xBBCD], NFD: [0x1106, 0x1173, 0x11B4], NFKC: [0xBBCD], NFKD: [0x1106, 0x1173, 0x11B4] }, +{ source: [0xBBCE], NFC: [0xBBCE], NFD: [0x1106, 0x1173, 0x11B5], NFKC: [0xBBCE], NFKD: [0x1106, 0x1173, 0x11B5] }, +{ source: [0xBBCF], NFC: [0xBBCF], NFD: [0x1106, 0x1173, 0x11B6], NFKC: [0xBBCF], NFKD: [0x1106, 0x1173, 0x11B6] }, +{ source: [0xBBD0], NFC: [0xBBD0], NFD: [0x1106, 0x1173, 0x11B7], NFKC: [0xBBD0], NFKD: [0x1106, 0x1173, 0x11B7] }, +{ source: [0xBBD1], NFC: [0xBBD1], NFD: [0x1106, 0x1173, 0x11B8], NFKC: [0xBBD1], NFKD: [0x1106, 0x1173, 0x11B8] }, +{ source: [0xBBD2], NFC: [0xBBD2], NFD: [0x1106, 0x1173, 0x11B9], NFKC: [0xBBD2], NFKD: [0x1106, 0x1173, 0x11B9] }, +{ source: [0xBBD3], NFC: [0xBBD3], NFD: [0x1106, 0x1173, 0x11BA], NFKC: [0xBBD3], NFKD: [0x1106, 0x1173, 0x11BA] }, +{ source: [0xBBD4], NFC: [0xBBD4], NFD: [0x1106, 0x1173, 0x11BB], NFKC: [0xBBD4], NFKD: [0x1106, 0x1173, 0x11BB] }, +{ source: [0xBBD5], NFC: [0xBBD5], NFD: [0x1106, 0x1173, 0x11BC], NFKC: [0xBBD5], NFKD: [0x1106, 0x1173, 0x11BC] }, +{ source: [0xBBD6], NFC: [0xBBD6], NFD: [0x1106, 0x1173, 0x11BD], NFKC: [0xBBD6], NFKD: [0x1106, 0x1173, 0x11BD] }, +{ source: [0xBBD7], NFC: [0xBBD7], NFD: [0x1106, 0x1173, 0x11BE], NFKC: [0xBBD7], NFKD: [0x1106, 0x1173, 0x11BE] }, +{ source: [0xBBD8], NFC: [0xBBD8], NFD: [0x1106, 0x1173, 0x11BF], NFKC: [0xBBD8], NFKD: [0x1106, 0x1173, 0x11BF] }, +{ source: [0xBBD9], NFC: [0xBBD9], NFD: [0x1106, 0x1173, 0x11C0], NFKC: [0xBBD9], NFKD: [0x1106, 0x1173, 0x11C0] }, +{ source: [0xBBDA], NFC: [0xBBDA], NFD: [0x1106, 0x1173, 0x11C1], NFKC: [0xBBDA], NFKD: [0x1106, 0x1173, 0x11C1] }, +{ source: [0xBBDB], NFC: [0xBBDB], NFD: [0x1106, 0x1173, 0x11C2], NFKC: [0xBBDB], NFKD: [0x1106, 0x1173, 0x11C2] }, +{ source: [0xBBDC], NFC: [0xBBDC], NFD: [0x1106, 0x1174], NFKC: [0xBBDC], NFKD: [0x1106, 0x1174] }, +{ source: [0xBBDD], NFC: [0xBBDD], NFD: [0x1106, 0x1174, 0x11A8], NFKC: [0xBBDD], NFKD: [0x1106, 0x1174, 0x11A8] }, +{ source: [0xBBDE], NFC: [0xBBDE], NFD: [0x1106, 0x1174, 0x11A9], NFKC: [0xBBDE], NFKD: [0x1106, 0x1174, 0x11A9] }, +{ source: [0xBBDF], NFC: [0xBBDF], NFD: [0x1106, 0x1174, 0x11AA], NFKC: [0xBBDF], NFKD: [0x1106, 0x1174, 0x11AA] }, +{ source: [0xBBE0], NFC: [0xBBE0], NFD: [0x1106, 0x1174, 0x11AB], NFKC: [0xBBE0], NFKD: [0x1106, 0x1174, 0x11AB] }, +{ source: [0xBBE1], NFC: [0xBBE1], NFD: [0x1106, 0x1174, 0x11AC], NFKC: [0xBBE1], NFKD: [0x1106, 0x1174, 0x11AC] }, +{ source: [0xBBE2], NFC: [0xBBE2], NFD: [0x1106, 0x1174, 0x11AD], NFKC: [0xBBE2], NFKD: [0x1106, 0x1174, 0x11AD] }, +{ source: [0xBBE3], NFC: [0xBBE3], NFD: [0x1106, 0x1174, 0x11AE], NFKC: [0xBBE3], NFKD: [0x1106, 0x1174, 0x11AE] }, +{ source: [0xBBE4], NFC: [0xBBE4], NFD: [0x1106, 0x1174, 0x11AF], NFKC: [0xBBE4], NFKD: [0x1106, 0x1174, 0x11AF] }, +{ source: [0xBBE5], NFC: [0xBBE5], NFD: [0x1106, 0x1174, 0x11B0], NFKC: [0xBBE5], NFKD: [0x1106, 0x1174, 0x11B0] }, +{ source: [0xBBE6], NFC: [0xBBE6], NFD: [0x1106, 0x1174, 0x11B1], NFKC: [0xBBE6], NFKD: [0x1106, 0x1174, 0x11B1] }, +{ source: [0xBBE7], NFC: [0xBBE7], NFD: [0x1106, 0x1174, 0x11B2], NFKC: [0xBBE7], NFKD: [0x1106, 0x1174, 0x11B2] }, +{ source: [0xBBE8], NFC: [0xBBE8], NFD: [0x1106, 0x1174, 0x11B3], NFKC: [0xBBE8], NFKD: [0x1106, 0x1174, 0x11B3] }, +{ source: [0xBBE9], NFC: [0xBBE9], NFD: [0x1106, 0x1174, 0x11B4], NFKC: [0xBBE9], NFKD: [0x1106, 0x1174, 0x11B4] }, +{ source: [0xBBEA], NFC: [0xBBEA], NFD: [0x1106, 0x1174, 0x11B5], NFKC: [0xBBEA], NFKD: [0x1106, 0x1174, 0x11B5] }, +{ source: [0xBBEB], NFC: [0xBBEB], NFD: [0x1106, 0x1174, 0x11B6], NFKC: [0xBBEB], NFKD: [0x1106, 0x1174, 0x11B6] }, +{ source: [0xBBEC], NFC: [0xBBEC], NFD: [0x1106, 0x1174, 0x11B7], NFKC: [0xBBEC], NFKD: [0x1106, 0x1174, 0x11B7] }, +{ source: [0xBBED], NFC: [0xBBED], NFD: [0x1106, 0x1174, 0x11B8], NFKC: [0xBBED], NFKD: [0x1106, 0x1174, 0x11B8] }, +{ source: [0xBBEE], NFC: [0xBBEE], NFD: [0x1106, 0x1174, 0x11B9], NFKC: [0xBBEE], NFKD: [0x1106, 0x1174, 0x11B9] }, +{ source: [0xBBEF], NFC: [0xBBEF], NFD: [0x1106, 0x1174, 0x11BA], NFKC: [0xBBEF], NFKD: [0x1106, 0x1174, 0x11BA] }, +{ source: [0xBBF0], NFC: [0xBBF0], NFD: [0x1106, 0x1174, 0x11BB], NFKC: [0xBBF0], NFKD: [0x1106, 0x1174, 0x11BB] }, +{ source: [0xBBF1], NFC: [0xBBF1], NFD: [0x1106, 0x1174, 0x11BC], NFKC: [0xBBF1], NFKD: [0x1106, 0x1174, 0x11BC] }, +{ source: [0xBBF2], NFC: [0xBBF2], NFD: [0x1106, 0x1174, 0x11BD], NFKC: [0xBBF2], NFKD: [0x1106, 0x1174, 0x11BD] }, +{ source: [0xBBF3], NFC: [0xBBF3], NFD: [0x1106, 0x1174, 0x11BE], NFKC: [0xBBF3], NFKD: [0x1106, 0x1174, 0x11BE] }, +{ source: [0xBBF4], NFC: [0xBBF4], NFD: [0x1106, 0x1174, 0x11BF], NFKC: [0xBBF4], NFKD: [0x1106, 0x1174, 0x11BF] }, +{ source: [0xBBF5], NFC: [0xBBF5], NFD: [0x1106, 0x1174, 0x11C0], NFKC: [0xBBF5], NFKD: [0x1106, 0x1174, 0x11C0] }, +{ source: [0xBBF6], NFC: [0xBBF6], NFD: [0x1106, 0x1174, 0x11C1], NFKC: [0xBBF6], NFKD: [0x1106, 0x1174, 0x11C1] }, +{ source: [0xBBF7], NFC: [0xBBF7], NFD: [0x1106, 0x1174, 0x11C2], NFKC: [0xBBF7], NFKD: [0x1106, 0x1174, 0x11C2] }, +{ source: [0xBBF8], NFC: [0xBBF8], NFD: [0x1106, 0x1175], NFKC: [0xBBF8], NFKD: [0x1106, 0x1175] }, +{ source: [0xBBF9], NFC: [0xBBF9], NFD: [0x1106, 0x1175, 0x11A8], NFKC: [0xBBF9], NFKD: [0x1106, 0x1175, 0x11A8] }, +{ source: [0xBBFA], NFC: [0xBBFA], NFD: [0x1106, 0x1175, 0x11A9], NFKC: [0xBBFA], NFKD: [0x1106, 0x1175, 0x11A9] }, +{ source: [0xBBFB], NFC: [0xBBFB], NFD: [0x1106, 0x1175, 0x11AA], NFKC: [0xBBFB], NFKD: [0x1106, 0x1175, 0x11AA] }, +{ source: [0xBBFC], NFC: [0xBBFC], NFD: [0x1106, 0x1175, 0x11AB], NFKC: [0xBBFC], NFKD: [0x1106, 0x1175, 0x11AB] }, +{ source: [0xBBFD], NFC: [0xBBFD], NFD: [0x1106, 0x1175, 0x11AC], NFKC: [0xBBFD], NFKD: [0x1106, 0x1175, 0x11AC] }, +{ source: [0xBBFE], NFC: [0xBBFE], NFD: [0x1106, 0x1175, 0x11AD], NFKC: [0xBBFE], NFKD: [0x1106, 0x1175, 0x11AD] }, +{ source: [0xBBFF], NFC: [0xBBFF], NFD: [0x1106, 0x1175, 0x11AE], NFKC: [0xBBFF], NFKD: [0x1106, 0x1175, 0x11AE] }, +{ source: [0xBC00], NFC: [0xBC00], NFD: [0x1106, 0x1175, 0x11AF], NFKC: [0xBC00], NFKD: [0x1106, 0x1175, 0x11AF] }, +{ source: [0xBC01], NFC: [0xBC01], NFD: [0x1106, 0x1175, 0x11B0], NFKC: [0xBC01], NFKD: [0x1106, 0x1175, 0x11B0] }, +{ source: [0xBC02], NFC: [0xBC02], NFD: [0x1106, 0x1175, 0x11B1], NFKC: [0xBC02], NFKD: [0x1106, 0x1175, 0x11B1] }, +{ source: [0xBC03], NFC: [0xBC03], NFD: [0x1106, 0x1175, 0x11B2], NFKC: [0xBC03], NFKD: [0x1106, 0x1175, 0x11B2] }, +{ source: [0xBC04], NFC: [0xBC04], NFD: [0x1106, 0x1175, 0x11B3], NFKC: [0xBC04], NFKD: [0x1106, 0x1175, 0x11B3] }, +{ source: [0xBC05], NFC: [0xBC05], NFD: [0x1106, 0x1175, 0x11B4], NFKC: [0xBC05], NFKD: [0x1106, 0x1175, 0x11B4] }, +{ source: [0xBC06], NFC: [0xBC06], NFD: [0x1106, 0x1175, 0x11B5], NFKC: [0xBC06], NFKD: [0x1106, 0x1175, 0x11B5] }, +{ source: [0xBC07], NFC: [0xBC07], NFD: [0x1106, 0x1175, 0x11B6], NFKC: [0xBC07], NFKD: [0x1106, 0x1175, 0x11B6] }, +{ source: [0xBC08], NFC: [0xBC08], NFD: [0x1106, 0x1175, 0x11B7], NFKC: [0xBC08], NFKD: [0x1106, 0x1175, 0x11B7] }, +{ source: [0xBC09], NFC: [0xBC09], NFD: [0x1106, 0x1175, 0x11B8], NFKC: [0xBC09], NFKD: [0x1106, 0x1175, 0x11B8] }, +{ source: [0xBC0A], NFC: [0xBC0A], NFD: [0x1106, 0x1175, 0x11B9], NFKC: [0xBC0A], NFKD: [0x1106, 0x1175, 0x11B9] }, +{ source: [0xBC0B], NFC: [0xBC0B], NFD: [0x1106, 0x1175, 0x11BA], NFKC: [0xBC0B], NFKD: [0x1106, 0x1175, 0x11BA] }, +{ source: [0xBC0C], NFC: [0xBC0C], NFD: [0x1106, 0x1175, 0x11BB], NFKC: [0xBC0C], NFKD: [0x1106, 0x1175, 0x11BB] }, +{ source: [0xBC0D], NFC: [0xBC0D], NFD: [0x1106, 0x1175, 0x11BC], NFKC: [0xBC0D], NFKD: [0x1106, 0x1175, 0x11BC] }, +{ source: [0xBC0E], NFC: [0xBC0E], NFD: [0x1106, 0x1175, 0x11BD], NFKC: [0xBC0E], NFKD: [0x1106, 0x1175, 0x11BD] }, +{ source: [0xBC0F], NFC: [0xBC0F], NFD: [0x1106, 0x1175, 0x11BE], NFKC: [0xBC0F], NFKD: [0x1106, 0x1175, 0x11BE] }, +{ source: [0xBC10], NFC: [0xBC10], NFD: [0x1106, 0x1175, 0x11BF], NFKC: [0xBC10], NFKD: [0x1106, 0x1175, 0x11BF] }, +{ source: [0xBC11], NFC: [0xBC11], NFD: [0x1106, 0x1175, 0x11C0], NFKC: [0xBC11], NFKD: [0x1106, 0x1175, 0x11C0] }, +{ source: [0xBC12], NFC: [0xBC12], NFD: [0x1106, 0x1175, 0x11C1], NFKC: [0xBC12], NFKD: [0x1106, 0x1175, 0x11C1] }, +{ source: [0xBC13], NFC: [0xBC13], NFD: [0x1106, 0x1175, 0x11C2], NFKC: [0xBC13], NFKD: [0x1106, 0x1175, 0x11C2] }, +{ source: [0xBC14], NFC: [0xBC14], NFD: [0x1107, 0x1161], NFKC: [0xBC14], NFKD: [0x1107, 0x1161] }, +{ source: [0xBC15], NFC: [0xBC15], NFD: [0x1107, 0x1161, 0x11A8], NFKC: [0xBC15], NFKD: [0x1107, 0x1161, 0x11A8] }, +{ source: [0xBC16], NFC: [0xBC16], NFD: [0x1107, 0x1161, 0x11A9], NFKC: [0xBC16], NFKD: [0x1107, 0x1161, 0x11A9] }, +{ source: [0xBC17], NFC: [0xBC17], NFD: [0x1107, 0x1161, 0x11AA], NFKC: [0xBC17], NFKD: [0x1107, 0x1161, 0x11AA] }, +{ source: [0xBC18], NFC: [0xBC18], NFD: [0x1107, 0x1161, 0x11AB], NFKC: [0xBC18], NFKD: [0x1107, 0x1161, 0x11AB] }, +{ source: [0xBC19], NFC: [0xBC19], NFD: [0x1107, 0x1161, 0x11AC], NFKC: [0xBC19], NFKD: [0x1107, 0x1161, 0x11AC] }, +{ source: [0xBC1A], NFC: [0xBC1A], NFD: [0x1107, 0x1161, 0x11AD], NFKC: [0xBC1A], NFKD: [0x1107, 0x1161, 0x11AD] }, +{ source: [0xBC1B], NFC: [0xBC1B], NFD: [0x1107, 0x1161, 0x11AE], NFKC: [0xBC1B], NFKD: [0x1107, 0x1161, 0x11AE] }, +{ source: [0xBC1C], NFC: [0xBC1C], NFD: [0x1107, 0x1161, 0x11AF], NFKC: [0xBC1C], NFKD: [0x1107, 0x1161, 0x11AF] }, +{ source: [0xBC1D], NFC: [0xBC1D], NFD: [0x1107, 0x1161, 0x11B0], NFKC: [0xBC1D], NFKD: [0x1107, 0x1161, 0x11B0] }, +{ source: [0xBC1E], NFC: [0xBC1E], NFD: [0x1107, 0x1161, 0x11B1], NFKC: [0xBC1E], NFKD: [0x1107, 0x1161, 0x11B1] }, +{ source: [0xBC1F], NFC: [0xBC1F], NFD: [0x1107, 0x1161, 0x11B2], NFKC: [0xBC1F], NFKD: [0x1107, 0x1161, 0x11B2] }, +{ source: [0xBC20], NFC: [0xBC20], NFD: [0x1107, 0x1161, 0x11B3], NFKC: [0xBC20], NFKD: [0x1107, 0x1161, 0x11B3] }, +{ source: [0xBC21], NFC: [0xBC21], NFD: [0x1107, 0x1161, 0x11B4], NFKC: [0xBC21], NFKD: [0x1107, 0x1161, 0x11B4] }, +{ source: [0xBC22], NFC: [0xBC22], NFD: [0x1107, 0x1161, 0x11B5], NFKC: [0xBC22], NFKD: [0x1107, 0x1161, 0x11B5] }, +{ source: [0xBC23], NFC: [0xBC23], NFD: [0x1107, 0x1161, 0x11B6], NFKC: [0xBC23], NFKD: [0x1107, 0x1161, 0x11B6] }, +{ source: [0xBC24], NFC: [0xBC24], NFD: [0x1107, 0x1161, 0x11B7], NFKC: [0xBC24], NFKD: [0x1107, 0x1161, 0x11B7] }, +{ source: [0xBC25], NFC: [0xBC25], NFD: [0x1107, 0x1161, 0x11B8], NFKC: [0xBC25], NFKD: [0x1107, 0x1161, 0x11B8] }, +{ source: [0xBC26], NFC: [0xBC26], NFD: [0x1107, 0x1161, 0x11B9], NFKC: [0xBC26], NFKD: [0x1107, 0x1161, 0x11B9] }, +{ source: [0xBC27], NFC: [0xBC27], NFD: [0x1107, 0x1161, 0x11BA], NFKC: [0xBC27], NFKD: [0x1107, 0x1161, 0x11BA] }, +{ source: [0xBC28], NFC: [0xBC28], NFD: [0x1107, 0x1161, 0x11BB], NFKC: [0xBC28], NFKD: [0x1107, 0x1161, 0x11BB] }, +{ source: [0xBC29], NFC: [0xBC29], NFD: [0x1107, 0x1161, 0x11BC], NFKC: [0xBC29], NFKD: [0x1107, 0x1161, 0x11BC] }, +{ source: [0xBC2A], NFC: [0xBC2A], NFD: [0x1107, 0x1161, 0x11BD], NFKC: [0xBC2A], NFKD: [0x1107, 0x1161, 0x11BD] }, +{ source: [0xBC2B], NFC: [0xBC2B], NFD: [0x1107, 0x1161, 0x11BE], NFKC: [0xBC2B], NFKD: [0x1107, 0x1161, 0x11BE] }, +{ source: [0xBC2C], NFC: [0xBC2C], NFD: [0x1107, 0x1161, 0x11BF], NFKC: [0xBC2C], NFKD: [0x1107, 0x1161, 0x11BF] }, +{ source: [0xBC2D], NFC: [0xBC2D], NFD: [0x1107, 0x1161, 0x11C0], NFKC: [0xBC2D], NFKD: [0x1107, 0x1161, 0x11C0] }, +{ source: [0xBC2E], NFC: [0xBC2E], NFD: [0x1107, 0x1161, 0x11C1], NFKC: [0xBC2E], NFKD: [0x1107, 0x1161, 0x11C1] }, +{ source: [0xBC2F], NFC: [0xBC2F], NFD: [0x1107, 0x1161, 0x11C2], NFKC: [0xBC2F], NFKD: [0x1107, 0x1161, 0x11C2] }, +{ source: [0xBC30], NFC: [0xBC30], NFD: [0x1107, 0x1162], NFKC: [0xBC30], NFKD: [0x1107, 0x1162] }, +{ source: [0xBC31], NFC: [0xBC31], NFD: [0x1107, 0x1162, 0x11A8], NFKC: [0xBC31], NFKD: [0x1107, 0x1162, 0x11A8] }, +{ source: [0xBC32], NFC: [0xBC32], NFD: [0x1107, 0x1162, 0x11A9], NFKC: [0xBC32], NFKD: [0x1107, 0x1162, 0x11A9] }, +{ source: [0xBC33], NFC: [0xBC33], NFD: [0x1107, 0x1162, 0x11AA], NFKC: [0xBC33], NFKD: [0x1107, 0x1162, 0x11AA] }, +{ source: [0xBC34], NFC: [0xBC34], NFD: [0x1107, 0x1162, 0x11AB], NFKC: [0xBC34], NFKD: [0x1107, 0x1162, 0x11AB] }, +{ source: [0xBC35], NFC: [0xBC35], NFD: [0x1107, 0x1162, 0x11AC], NFKC: [0xBC35], NFKD: [0x1107, 0x1162, 0x11AC] }, +{ source: [0xBC36], NFC: [0xBC36], NFD: [0x1107, 0x1162, 0x11AD], NFKC: [0xBC36], NFKD: [0x1107, 0x1162, 0x11AD] }, +{ source: [0xBC37], NFC: [0xBC37], NFD: [0x1107, 0x1162, 0x11AE], NFKC: [0xBC37], NFKD: [0x1107, 0x1162, 0x11AE] }, +{ source: [0xBC38], NFC: [0xBC38], NFD: [0x1107, 0x1162, 0x11AF], NFKC: [0xBC38], NFKD: [0x1107, 0x1162, 0x11AF] }, +{ source: [0xBC39], NFC: [0xBC39], NFD: [0x1107, 0x1162, 0x11B0], NFKC: [0xBC39], NFKD: [0x1107, 0x1162, 0x11B0] }, +{ source: [0xBC3A], NFC: [0xBC3A], NFD: [0x1107, 0x1162, 0x11B1], NFKC: [0xBC3A], NFKD: [0x1107, 0x1162, 0x11B1] }, +{ source: [0xBC3B], NFC: [0xBC3B], NFD: [0x1107, 0x1162, 0x11B2], NFKC: [0xBC3B], NFKD: [0x1107, 0x1162, 0x11B2] }, +{ source: [0xBC3C], NFC: [0xBC3C], NFD: [0x1107, 0x1162, 0x11B3], NFKC: [0xBC3C], NFKD: [0x1107, 0x1162, 0x11B3] }, +{ source: [0xBC3D], NFC: [0xBC3D], NFD: [0x1107, 0x1162, 0x11B4], NFKC: [0xBC3D], NFKD: [0x1107, 0x1162, 0x11B4] }, +{ source: [0xBC3E], NFC: [0xBC3E], NFD: [0x1107, 0x1162, 0x11B5], NFKC: [0xBC3E], NFKD: [0x1107, 0x1162, 0x11B5] }, +{ source: [0xBC3F], NFC: [0xBC3F], NFD: [0x1107, 0x1162, 0x11B6], NFKC: [0xBC3F], NFKD: [0x1107, 0x1162, 0x11B6] }, +{ source: [0xBC40], NFC: [0xBC40], NFD: [0x1107, 0x1162, 0x11B7], NFKC: [0xBC40], NFKD: [0x1107, 0x1162, 0x11B7] }, +{ source: [0xBC41], NFC: [0xBC41], NFD: [0x1107, 0x1162, 0x11B8], NFKC: [0xBC41], NFKD: [0x1107, 0x1162, 0x11B8] }, +{ source: [0xBC42], NFC: [0xBC42], NFD: [0x1107, 0x1162, 0x11B9], NFKC: [0xBC42], NFKD: [0x1107, 0x1162, 0x11B9] }, +{ source: [0xBC43], NFC: [0xBC43], NFD: [0x1107, 0x1162, 0x11BA], NFKC: [0xBC43], NFKD: [0x1107, 0x1162, 0x11BA] }, +{ source: [0xBC44], NFC: [0xBC44], NFD: [0x1107, 0x1162, 0x11BB], NFKC: [0xBC44], NFKD: [0x1107, 0x1162, 0x11BB] }, +{ source: [0xBC45], NFC: [0xBC45], NFD: [0x1107, 0x1162, 0x11BC], NFKC: [0xBC45], NFKD: [0x1107, 0x1162, 0x11BC] }, +{ source: [0xBC46], NFC: [0xBC46], NFD: [0x1107, 0x1162, 0x11BD], NFKC: [0xBC46], NFKD: [0x1107, 0x1162, 0x11BD] }, +{ source: [0xBC47], NFC: [0xBC47], NFD: [0x1107, 0x1162, 0x11BE], NFKC: [0xBC47], NFKD: [0x1107, 0x1162, 0x11BE] }, +{ source: [0xBC48], NFC: [0xBC48], NFD: [0x1107, 0x1162, 0x11BF], NFKC: [0xBC48], NFKD: [0x1107, 0x1162, 0x11BF] }, +{ source: [0xBC49], NFC: [0xBC49], NFD: [0x1107, 0x1162, 0x11C0], NFKC: [0xBC49], NFKD: [0x1107, 0x1162, 0x11C0] }, +{ source: [0xBC4A], NFC: [0xBC4A], NFD: [0x1107, 0x1162, 0x11C1], NFKC: [0xBC4A], NFKD: [0x1107, 0x1162, 0x11C1] }, +{ source: [0xBC4B], NFC: [0xBC4B], NFD: [0x1107, 0x1162, 0x11C2], NFKC: [0xBC4B], NFKD: [0x1107, 0x1162, 0x11C2] }, +{ source: [0xBC4C], NFC: [0xBC4C], NFD: [0x1107, 0x1163], NFKC: [0xBC4C], NFKD: [0x1107, 0x1163] }, +{ source: [0xBC4D], NFC: [0xBC4D], NFD: [0x1107, 0x1163, 0x11A8], NFKC: [0xBC4D], NFKD: [0x1107, 0x1163, 0x11A8] }, +{ source: [0xBC4E], NFC: [0xBC4E], NFD: [0x1107, 0x1163, 0x11A9], NFKC: [0xBC4E], NFKD: [0x1107, 0x1163, 0x11A9] }, +{ source: [0xBC4F], NFC: [0xBC4F], NFD: [0x1107, 0x1163, 0x11AA], NFKC: [0xBC4F], NFKD: [0x1107, 0x1163, 0x11AA] }, +{ source: [0xBC50], NFC: [0xBC50], NFD: [0x1107, 0x1163, 0x11AB], NFKC: [0xBC50], NFKD: [0x1107, 0x1163, 0x11AB] }, +{ source: [0xBC51], NFC: [0xBC51], NFD: [0x1107, 0x1163, 0x11AC], NFKC: [0xBC51], NFKD: [0x1107, 0x1163, 0x11AC] }, +{ source: [0xBC52], NFC: [0xBC52], NFD: [0x1107, 0x1163, 0x11AD], NFKC: [0xBC52], NFKD: [0x1107, 0x1163, 0x11AD] }, +{ source: [0xBC53], NFC: [0xBC53], NFD: [0x1107, 0x1163, 0x11AE], NFKC: [0xBC53], NFKD: [0x1107, 0x1163, 0x11AE] }, +{ source: [0xBC54], NFC: [0xBC54], NFD: [0x1107, 0x1163, 0x11AF], NFKC: [0xBC54], NFKD: [0x1107, 0x1163, 0x11AF] }, +{ source: [0xBC55], NFC: [0xBC55], NFD: [0x1107, 0x1163, 0x11B0], NFKC: [0xBC55], NFKD: [0x1107, 0x1163, 0x11B0] }, +{ source: [0xBC56], NFC: [0xBC56], NFD: [0x1107, 0x1163, 0x11B1], NFKC: [0xBC56], NFKD: [0x1107, 0x1163, 0x11B1] }, +{ source: [0xBC57], NFC: [0xBC57], NFD: [0x1107, 0x1163, 0x11B2], NFKC: [0xBC57], NFKD: [0x1107, 0x1163, 0x11B2] }, +{ source: [0xBC58], NFC: [0xBC58], NFD: [0x1107, 0x1163, 0x11B3], NFKC: [0xBC58], NFKD: [0x1107, 0x1163, 0x11B3] }, +{ source: [0xBC59], NFC: [0xBC59], NFD: [0x1107, 0x1163, 0x11B4], NFKC: [0xBC59], NFKD: [0x1107, 0x1163, 0x11B4] }, +{ source: [0xBC5A], NFC: [0xBC5A], NFD: [0x1107, 0x1163, 0x11B5], NFKC: [0xBC5A], NFKD: [0x1107, 0x1163, 0x11B5] }, +{ source: [0xBC5B], NFC: [0xBC5B], NFD: [0x1107, 0x1163, 0x11B6], NFKC: [0xBC5B], NFKD: [0x1107, 0x1163, 0x11B6] }, +{ source: [0xBC5C], NFC: [0xBC5C], NFD: [0x1107, 0x1163, 0x11B7], NFKC: [0xBC5C], NFKD: [0x1107, 0x1163, 0x11B7] }, +{ source: [0xBC5D], NFC: [0xBC5D], NFD: [0x1107, 0x1163, 0x11B8], NFKC: [0xBC5D], NFKD: [0x1107, 0x1163, 0x11B8] }, +{ source: [0xBC5E], NFC: [0xBC5E], NFD: [0x1107, 0x1163, 0x11B9], NFKC: [0xBC5E], NFKD: [0x1107, 0x1163, 0x11B9] }, +{ source: [0xBC5F], NFC: [0xBC5F], NFD: [0x1107, 0x1163, 0x11BA], NFKC: [0xBC5F], NFKD: [0x1107, 0x1163, 0x11BA] }, +{ source: [0xBC60], NFC: [0xBC60], NFD: [0x1107, 0x1163, 0x11BB], NFKC: [0xBC60], NFKD: [0x1107, 0x1163, 0x11BB] }, +{ source: [0xBC61], NFC: [0xBC61], NFD: [0x1107, 0x1163, 0x11BC], NFKC: [0xBC61], NFKD: [0x1107, 0x1163, 0x11BC] }, +{ source: [0xBC62], NFC: [0xBC62], NFD: [0x1107, 0x1163, 0x11BD], NFKC: [0xBC62], NFKD: [0x1107, 0x1163, 0x11BD] }, +{ source: [0xBC63], NFC: [0xBC63], NFD: [0x1107, 0x1163, 0x11BE], NFKC: [0xBC63], NFKD: [0x1107, 0x1163, 0x11BE] }, +{ source: [0xBC64], NFC: [0xBC64], NFD: [0x1107, 0x1163, 0x11BF], NFKC: [0xBC64], NFKD: [0x1107, 0x1163, 0x11BF] }, +{ source: [0xBC65], NFC: [0xBC65], NFD: [0x1107, 0x1163, 0x11C0], NFKC: [0xBC65], NFKD: [0x1107, 0x1163, 0x11C0] }, +{ source: [0xBC66], NFC: [0xBC66], NFD: [0x1107, 0x1163, 0x11C1], NFKC: [0xBC66], NFKD: [0x1107, 0x1163, 0x11C1] }, +{ source: [0xBC67], NFC: [0xBC67], NFD: [0x1107, 0x1163, 0x11C2], NFKC: [0xBC67], NFKD: [0x1107, 0x1163, 0x11C2] }, +{ source: [0xBC68], NFC: [0xBC68], NFD: [0x1107, 0x1164], NFKC: [0xBC68], NFKD: [0x1107, 0x1164] }, +{ source: [0xBC69], NFC: [0xBC69], NFD: [0x1107, 0x1164, 0x11A8], NFKC: [0xBC69], NFKD: [0x1107, 0x1164, 0x11A8] }, +{ source: [0xBC6A], NFC: [0xBC6A], NFD: [0x1107, 0x1164, 0x11A9], NFKC: [0xBC6A], NFKD: [0x1107, 0x1164, 0x11A9] }, +{ source: [0xBC6B], NFC: [0xBC6B], NFD: [0x1107, 0x1164, 0x11AA], NFKC: [0xBC6B], NFKD: [0x1107, 0x1164, 0x11AA] }, +{ source: [0xBC6C], NFC: [0xBC6C], NFD: [0x1107, 0x1164, 0x11AB], NFKC: [0xBC6C], NFKD: [0x1107, 0x1164, 0x11AB] }, +{ source: [0xBC6D], NFC: [0xBC6D], NFD: [0x1107, 0x1164, 0x11AC], NFKC: [0xBC6D], NFKD: [0x1107, 0x1164, 0x11AC] }, +{ source: [0xBC6E], NFC: [0xBC6E], NFD: [0x1107, 0x1164, 0x11AD], NFKC: [0xBC6E], NFKD: [0x1107, 0x1164, 0x11AD] }, +{ source: [0xBC6F], NFC: [0xBC6F], NFD: [0x1107, 0x1164, 0x11AE], NFKC: [0xBC6F], NFKD: [0x1107, 0x1164, 0x11AE] }, +{ source: [0xBC70], NFC: [0xBC70], NFD: [0x1107, 0x1164, 0x11AF], NFKC: [0xBC70], NFKD: [0x1107, 0x1164, 0x11AF] }, +{ source: [0xBC71], NFC: [0xBC71], NFD: [0x1107, 0x1164, 0x11B0], NFKC: [0xBC71], NFKD: [0x1107, 0x1164, 0x11B0] }, +{ source: [0xBC72], NFC: [0xBC72], NFD: [0x1107, 0x1164, 0x11B1], NFKC: [0xBC72], NFKD: [0x1107, 0x1164, 0x11B1] }, +{ source: [0xBC73], NFC: [0xBC73], NFD: [0x1107, 0x1164, 0x11B2], NFKC: [0xBC73], NFKD: [0x1107, 0x1164, 0x11B2] }, +{ source: [0xBC74], NFC: [0xBC74], NFD: [0x1107, 0x1164, 0x11B3], NFKC: [0xBC74], NFKD: [0x1107, 0x1164, 0x11B3] }, +{ source: [0xBC75], NFC: [0xBC75], NFD: [0x1107, 0x1164, 0x11B4], NFKC: [0xBC75], NFKD: [0x1107, 0x1164, 0x11B4] }, +{ source: [0xBC76], NFC: [0xBC76], NFD: [0x1107, 0x1164, 0x11B5], NFKC: [0xBC76], NFKD: [0x1107, 0x1164, 0x11B5] }, +{ source: [0xBC77], NFC: [0xBC77], NFD: [0x1107, 0x1164, 0x11B6], NFKC: [0xBC77], NFKD: [0x1107, 0x1164, 0x11B6] }, +{ source: [0xBC78], NFC: [0xBC78], NFD: [0x1107, 0x1164, 0x11B7], NFKC: [0xBC78], NFKD: [0x1107, 0x1164, 0x11B7] }, +{ source: [0xBC79], NFC: [0xBC79], NFD: [0x1107, 0x1164, 0x11B8], NFKC: [0xBC79], NFKD: [0x1107, 0x1164, 0x11B8] }, +{ source: [0xBC7A], NFC: [0xBC7A], NFD: [0x1107, 0x1164, 0x11B9], NFKC: [0xBC7A], NFKD: [0x1107, 0x1164, 0x11B9] }, +{ source: [0xBC7B], NFC: [0xBC7B], NFD: [0x1107, 0x1164, 0x11BA], NFKC: [0xBC7B], NFKD: [0x1107, 0x1164, 0x11BA] }, +{ source: [0xBC7C], NFC: [0xBC7C], NFD: [0x1107, 0x1164, 0x11BB], NFKC: [0xBC7C], NFKD: [0x1107, 0x1164, 0x11BB] }, +{ source: [0xBC7D], NFC: [0xBC7D], NFD: [0x1107, 0x1164, 0x11BC], NFKC: [0xBC7D], NFKD: [0x1107, 0x1164, 0x11BC] }, +{ source: [0xBC7E], NFC: [0xBC7E], NFD: [0x1107, 0x1164, 0x11BD], NFKC: [0xBC7E], NFKD: [0x1107, 0x1164, 0x11BD] }, +{ source: [0xBC7F], NFC: [0xBC7F], NFD: [0x1107, 0x1164, 0x11BE], NFKC: [0xBC7F], NFKD: [0x1107, 0x1164, 0x11BE] }, +{ source: [0xBC80], NFC: [0xBC80], NFD: [0x1107, 0x1164, 0x11BF], NFKC: [0xBC80], NFKD: [0x1107, 0x1164, 0x11BF] }, +{ source: [0xBC81], NFC: [0xBC81], NFD: [0x1107, 0x1164, 0x11C0], NFKC: [0xBC81], NFKD: [0x1107, 0x1164, 0x11C0] }, +{ source: [0xBC82], NFC: [0xBC82], NFD: [0x1107, 0x1164, 0x11C1], NFKC: [0xBC82], NFKD: [0x1107, 0x1164, 0x11C1] }, +{ source: [0xBC83], NFC: [0xBC83], NFD: [0x1107, 0x1164, 0x11C2], NFKC: [0xBC83], NFKD: [0x1107, 0x1164, 0x11C2] }, +{ source: [0xBC84], NFC: [0xBC84], NFD: [0x1107, 0x1165], NFKC: [0xBC84], NFKD: [0x1107, 0x1165] }, +{ source: [0xBC85], NFC: [0xBC85], NFD: [0x1107, 0x1165, 0x11A8], NFKC: [0xBC85], NFKD: [0x1107, 0x1165, 0x11A8] }, +{ source: [0xBC86], NFC: [0xBC86], NFD: [0x1107, 0x1165, 0x11A9], NFKC: [0xBC86], NFKD: [0x1107, 0x1165, 0x11A9] }, +{ source: [0xBC87], NFC: [0xBC87], NFD: [0x1107, 0x1165, 0x11AA], NFKC: [0xBC87], NFKD: [0x1107, 0x1165, 0x11AA] }, +{ source: [0xBC88], NFC: [0xBC88], NFD: [0x1107, 0x1165, 0x11AB], NFKC: [0xBC88], NFKD: [0x1107, 0x1165, 0x11AB] }, +{ source: [0xBC89], NFC: [0xBC89], NFD: [0x1107, 0x1165, 0x11AC], NFKC: [0xBC89], NFKD: [0x1107, 0x1165, 0x11AC] }, +{ source: [0xBC8A], NFC: [0xBC8A], NFD: [0x1107, 0x1165, 0x11AD], NFKC: [0xBC8A], NFKD: [0x1107, 0x1165, 0x11AD] }, +{ source: [0xBC8B], NFC: [0xBC8B], NFD: [0x1107, 0x1165, 0x11AE], NFKC: [0xBC8B], NFKD: [0x1107, 0x1165, 0x11AE] }, +{ source: [0xBC8C], NFC: [0xBC8C], NFD: [0x1107, 0x1165, 0x11AF], NFKC: [0xBC8C], NFKD: [0x1107, 0x1165, 0x11AF] }, +{ source: [0xBC8D], NFC: [0xBC8D], NFD: [0x1107, 0x1165, 0x11B0], NFKC: [0xBC8D], NFKD: [0x1107, 0x1165, 0x11B0] }, +{ source: [0xBC8E], NFC: [0xBC8E], NFD: [0x1107, 0x1165, 0x11B1], NFKC: [0xBC8E], NFKD: [0x1107, 0x1165, 0x11B1] }, +{ source: [0xBC8F], NFC: [0xBC8F], NFD: [0x1107, 0x1165, 0x11B2], NFKC: [0xBC8F], NFKD: [0x1107, 0x1165, 0x11B2] }, +{ source: [0xBC90], NFC: [0xBC90], NFD: [0x1107, 0x1165, 0x11B3], NFKC: [0xBC90], NFKD: [0x1107, 0x1165, 0x11B3] }, +{ source: [0xBC91], NFC: [0xBC91], NFD: [0x1107, 0x1165, 0x11B4], NFKC: [0xBC91], NFKD: [0x1107, 0x1165, 0x11B4] }, +{ source: [0xBC92], NFC: [0xBC92], NFD: [0x1107, 0x1165, 0x11B5], NFKC: [0xBC92], NFKD: [0x1107, 0x1165, 0x11B5] }, +{ source: [0xBC93], NFC: [0xBC93], NFD: [0x1107, 0x1165, 0x11B6], NFKC: [0xBC93], NFKD: [0x1107, 0x1165, 0x11B6] }, +{ source: [0xBC94], NFC: [0xBC94], NFD: [0x1107, 0x1165, 0x11B7], NFKC: [0xBC94], NFKD: [0x1107, 0x1165, 0x11B7] }, +{ source: [0xBC95], NFC: [0xBC95], NFD: [0x1107, 0x1165, 0x11B8], NFKC: [0xBC95], NFKD: [0x1107, 0x1165, 0x11B8] }, +{ source: [0xBC96], NFC: [0xBC96], NFD: [0x1107, 0x1165, 0x11B9], NFKC: [0xBC96], NFKD: [0x1107, 0x1165, 0x11B9] }, +{ source: [0xBC97], NFC: [0xBC97], NFD: [0x1107, 0x1165, 0x11BA], NFKC: [0xBC97], NFKD: [0x1107, 0x1165, 0x11BA] }, +{ source: [0xBC98], NFC: [0xBC98], NFD: [0x1107, 0x1165, 0x11BB], NFKC: [0xBC98], NFKD: [0x1107, 0x1165, 0x11BB] }, +{ source: [0xBC99], NFC: [0xBC99], NFD: [0x1107, 0x1165, 0x11BC], NFKC: [0xBC99], NFKD: [0x1107, 0x1165, 0x11BC] }, +{ source: [0xBC9A], NFC: [0xBC9A], NFD: [0x1107, 0x1165, 0x11BD], NFKC: [0xBC9A], NFKD: [0x1107, 0x1165, 0x11BD] }, +{ source: [0xBC9B], NFC: [0xBC9B], NFD: [0x1107, 0x1165, 0x11BE], NFKC: [0xBC9B], NFKD: [0x1107, 0x1165, 0x11BE] }, +{ source: [0xBC9C], NFC: [0xBC9C], NFD: [0x1107, 0x1165, 0x11BF], NFKC: [0xBC9C], NFKD: [0x1107, 0x1165, 0x11BF] }, +{ source: [0xBC9D], NFC: [0xBC9D], NFD: [0x1107, 0x1165, 0x11C0], NFKC: [0xBC9D], NFKD: [0x1107, 0x1165, 0x11C0] }, +{ source: [0xBC9E], NFC: [0xBC9E], NFD: [0x1107, 0x1165, 0x11C1], NFKC: [0xBC9E], NFKD: [0x1107, 0x1165, 0x11C1] }, +{ source: [0xBC9F], NFC: [0xBC9F], NFD: [0x1107, 0x1165, 0x11C2], NFKC: [0xBC9F], NFKD: [0x1107, 0x1165, 0x11C2] }, +{ source: [0xBCA0], NFC: [0xBCA0], NFD: [0x1107, 0x1166], NFKC: [0xBCA0], NFKD: [0x1107, 0x1166] }, +{ source: [0xBCA1], NFC: [0xBCA1], NFD: [0x1107, 0x1166, 0x11A8], NFKC: [0xBCA1], NFKD: [0x1107, 0x1166, 0x11A8] }, +{ source: [0xBCA2], NFC: [0xBCA2], NFD: [0x1107, 0x1166, 0x11A9], NFKC: [0xBCA2], NFKD: [0x1107, 0x1166, 0x11A9] }, +{ source: [0xBCA3], NFC: [0xBCA3], NFD: [0x1107, 0x1166, 0x11AA], NFKC: [0xBCA3], NFKD: [0x1107, 0x1166, 0x11AA] }, +{ source: [0xBCA4], NFC: [0xBCA4], NFD: [0x1107, 0x1166, 0x11AB], NFKC: [0xBCA4], NFKD: [0x1107, 0x1166, 0x11AB] }, +{ source: [0xBCA5], NFC: [0xBCA5], NFD: [0x1107, 0x1166, 0x11AC], NFKC: [0xBCA5], NFKD: [0x1107, 0x1166, 0x11AC] }, +{ source: [0xBCA6], NFC: [0xBCA6], NFD: [0x1107, 0x1166, 0x11AD], NFKC: [0xBCA6], NFKD: [0x1107, 0x1166, 0x11AD] }, +{ source: [0xBCA7], NFC: [0xBCA7], NFD: [0x1107, 0x1166, 0x11AE], NFKC: [0xBCA7], NFKD: [0x1107, 0x1166, 0x11AE] }, +{ source: [0xBCA8], NFC: [0xBCA8], NFD: [0x1107, 0x1166, 0x11AF], NFKC: [0xBCA8], NFKD: [0x1107, 0x1166, 0x11AF] }, +{ source: [0xBCA9], NFC: [0xBCA9], NFD: [0x1107, 0x1166, 0x11B0], NFKC: [0xBCA9], NFKD: [0x1107, 0x1166, 0x11B0] }, +{ source: [0xBCAA], NFC: [0xBCAA], NFD: [0x1107, 0x1166, 0x11B1], NFKC: [0xBCAA], NFKD: [0x1107, 0x1166, 0x11B1] }, +{ source: [0xBCAB], NFC: [0xBCAB], NFD: [0x1107, 0x1166, 0x11B2], NFKC: [0xBCAB], NFKD: [0x1107, 0x1166, 0x11B2] }, +{ source: [0xBCAC], NFC: [0xBCAC], NFD: [0x1107, 0x1166, 0x11B3], NFKC: [0xBCAC], NFKD: [0x1107, 0x1166, 0x11B3] }, +{ source: [0xBCAD], NFC: [0xBCAD], NFD: [0x1107, 0x1166, 0x11B4], NFKC: [0xBCAD], NFKD: [0x1107, 0x1166, 0x11B4] }, +{ source: [0xBCAE], NFC: [0xBCAE], NFD: [0x1107, 0x1166, 0x11B5], NFKC: [0xBCAE], NFKD: [0x1107, 0x1166, 0x11B5] }, +{ source: [0xBCAF], NFC: [0xBCAF], NFD: [0x1107, 0x1166, 0x11B6], NFKC: [0xBCAF], NFKD: [0x1107, 0x1166, 0x11B6] }, +{ source: [0xBCB0], NFC: [0xBCB0], NFD: [0x1107, 0x1166, 0x11B7], NFKC: [0xBCB0], NFKD: [0x1107, 0x1166, 0x11B7] }, +{ source: [0xBCB1], NFC: [0xBCB1], NFD: [0x1107, 0x1166, 0x11B8], NFKC: [0xBCB1], NFKD: [0x1107, 0x1166, 0x11B8] }, +{ source: [0xBCB2], NFC: [0xBCB2], NFD: [0x1107, 0x1166, 0x11B9], NFKC: [0xBCB2], NFKD: [0x1107, 0x1166, 0x11B9] }, +{ source: [0xBCB3], NFC: [0xBCB3], NFD: [0x1107, 0x1166, 0x11BA], NFKC: [0xBCB3], NFKD: [0x1107, 0x1166, 0x11BA] }, +{ source: [0xBCB4], NFC: [0xBCB4], NFD: [0x1107, 0x1166, 0x11BB], NFKC: [0xBCB4], NFKD: [0x1107, 0x1166, 0x11BB] }, +{ source: [0xBCB5], NFC: [0xBCB5], NFD: [0x1107, 0x1166, 0x11BC], NFKC: [0xBCB5], NFKD: [0x1107, 0x1166, 0x11BC] }, +{ source: [0xBCB6], NFC: [0xBCB6], NFD: [0x1107, 0x1166, 0x11BD], NFKC: [0xBCB6], NFKD: [0x1107, 0x1166, 0x11BD] }, +{ source: [0xBCB7], NFC: [0xBCB7], NFD: [0x1107, 0x1166, 0x11BE], NFKC: [0xBCB7], NFKD: [0x1107, 0x1166, 0x11BE] }, +{ source: [0xBCB8], NFC: [0xBCB8], NFD: [0x1107, 0x1166, 0x11BF], NFKC: [0xBCB8], NFKD: [0x1107, 0x1166, 0x11BF] }, +{ source: [0xBCB9], NFC: [0xBCB9], NFD: [0x1107, 0x1166, 0x11C0], NFKC: [0xBCB9], NFKD: [0x1107, 0x1166, 0x11C0] }, +{ source: [0xBCBA], NFC: [0xBCBA], NFD: [0x1107, 0x1166, 0x11C1], NFKC: [0xBCBA], NFKD: [0x1107, 0x1166, 0x11C1] }, +{ source: [0xBCBB], NFC: [0xBCBB], NFD: [0x1107, 0x1166, 0x11C2], NFKC: [0xBCBB], NFKD: [0x1107, 0x1166, 0x11C2] }, +{ source: [0xBCBC], NFC: [0xBCBC], NFD: [0x1107, 0x1167], NFKC: [0xBCBC], NFKD: [0x1107, 0x1167] }, +{ source: [0xBCBD], NFC: [0xBCBD], NFD: [0x1107, 0x1167, 0x11A8], NFKC: [0xBCBD], NFKD: [0x1107, 0x1167, 0x11A8] }, +{ source: [0xBCBE], NFC: [0xBCBE], NFD: [0x1107, 0x1167, 0x11A9], NFKC: [0xBCBE], NFKD: [0x1107, 0x1167, 0x11A9] }, +{ source: [0xBCBF], NFC: [0xBCBF], NFD: [0x1107, 0x1167, 0x11AA], NFKC: [0xBCBF], NFKD: [0x1107, 0x1167, 0x11AA] }, +{ source: [0xBCC0], NFC: [0xBCC0], NFD: [0x1107, 0x1167, 0x11AB], NFKC: [0xBCC0], NFKD: [0x1107, 0x1167, 0x11AB] }, +{ source: [0xBCC1], NFC: [0xBCC1], NFD: [0x1107, 0x1167, 0x11AC], NFKC: [0xBCC1], NFKD: [0x1107, 0x1167, 0x11AC] }, +{ source: [0xBCC2], NFC: [0xBCC2], NFD: [0x1107, 0x1167, 0x11AD], NFKC: [0xBCC2], NFKD: [0x1107, 0x1167, 0x11AD] }, +{ source: [0xBCC3], NFC: [0xBCC3], NFD: [0x1107, 0x1167, 0x11AE], NFKC: [0xBCC3], NFKD: [0x1107, 0x1167, 0x11AE] }, +{ source: [0xBCC4], NFC: [0xBCC4], NFD: [0x1107, 0x1167, 0x11AF], NFKC: [0xBCC4], NFKD: [0x1107, 0x1167, 0x11AF] }, +{ source: [0xBCC5], NFC: [0xBCC5], NFD: [0x1107, 0x1167, 0x11B0], NFKC: [0xBCC5], NFKD: [0x1107, 0x1167, 0x11B0] }, +{ source: [0xBCC6], NFC: [0xBCC6], NFD: [0x1107, 0x1167, 0x11B1], NFKC: [0xBCC6], NFKD: [0x1107, 0x1167, 0x11B1] }, +{ source: [0xBCC7], NFC: [0xBCC7], NFD: [0x1107, 0x1167, 0x11B2], NFKC: [0xBCC7], NFKD: [0x1107, 0x1167, 0x11B2] }, +{ source: [0xBCC8], NFC: [0xBCC8], NFD: [0x1107, 0x1167, 0x11B3], NFKC: [0xBCC8], NFKD: [0x1107, 0x1167, 0x11B3] }, +{ source: [0xBCC9], NFC: [0xBCC9], NFD: [0x1107, 0x1167, 0x11B4], NFKC: [0xBCC9], NFKD: [0x1107, 0x1167, 0x11B4] }, +{ source: [0xBCCA], NFC: [0xBCCA], NFD: [0x1107, 0x1167, 0x11B5], NFKC: [0xBCCA], NFKD: [0x1107, 0x1167, 0x11B5] }, +{ source: [0xBCCB], NFC: [0xBCCB], NFD: [0x1107, 0x1167, 0x11B6], NFKC: [0xBCCB], NFKD: [0x1107, 0x1167, 0x11B6] }, +{ source: [0xBCCC], NFC: [0xBCCC], NFD: [0x1107, 0x1167, 0x11B7], NFKC: [0xBCCC], NFKD: [0x1107, 0x1167, 0x11B7] }, +{ source: [0xBCCD], NFC: [0xBCCD], NFD: [0x1107, 0x1167, 0x11B8], NFKC: [0xBCCD], NFKD: [0x1107, 0x1167, 0x11B8] }, +{ source: [0xBCCE], NFC: [0xBCCE], NFD: [0x1107, 0x1167, 0x11B9], NFKC: [0xBCCE], NFKD: [0x1107, 0x1167, 0x11B9] }, +{ source: [0xBCCF], NFC: [0xBCCF], NFD: [0x1107, 0x1167, 0x11BA], NFKC: [0xBCCF], NFKD: [0x1107, 0x1167, 0x11BA] }, +{ source: [0xBCD0], NFC: [0xBCD0], NFD: [0x1107, 0x1167, 0x11BB], NFKC: [0xBCD0], NFKD: [0x1107, 0x1167, 0x11BB] }, +{ source: [0xBCD1], NFC: [0xBCD1], NFD: [0x1107, 0x1167, 0x11BC], NFKC: [0xBCD1], NFKD: [0x1107, 0x1167, 0x11BC] }, +{ source: [0xBCD2], NFC: [0xBCD2], NFD: [0x1107, 0x1167, 0x11BD], NFKC: [0xBCD2], NFKD: [0x1107, 0x1167, 0x11BD] }, +{ source: [0xBCD3], NFC: [0xBCD3], NFD: [0x1107, 0x1167, 0x11BE], NFKC: [0xBCD3], NFKD: [0x1107, 0x1167, 0x11BE] }, +{ source: [0xBCD4], NFC: [0xBCD4], NFD: [0x1107, 0x1167, 0x11BF], NFKC: [0xBCD4], NFKD: [0x1107, 0x1167, 0x11BF] }, +{ source: [0xBCD5], NFC: [0xBCD5], NFD: [0x1107, 0x1167, 0x11C0], NFKC: [0xBCD5], NFKD: [0x1107, 0x1167, 0x11C0] }, +{ source: [0xBCD6], NFC: [0xBCD6], NFD: [0x1107, 0x1167, 0x11C1], NFKC: [0xBCD6], NFKD: [0x1107, 0x1167, 0x11C1] }, +{ source: [0xBCD7], NFC: [0xBCD7], NFD: [0x1107, 0x1167, 0x11C2], NFKC: [0xBCD7], NFKD: [0x1107, 0x1167, 0x11C2] }, +{ source: [0xBCD8], NFC: [0xBCD8], NFD: [0x1107, 0x1168], NFKC: [0xBCD8], NFKD: [0x1107, 0x1168] }, +{ source: [0xBCD9], NFC: [0xBCD9], NFD: [0x1107, 0x1168, 0x11A8], NFKC: [0xBCD9], NFKD: [0x1107, 0x1168, 0x11A8] }, +{ source: [0xBCDA], NFC: [0xBCDA], NFD: [0x1107, 0x1168, 0x11A9], NFKC: [0xBCDA], NFKD: [0x1107, 0x1168, 0x11A9] }, +{ source: [0xBCDB], NFC: [0xBCDB], NFD: [0x1107, 0x1168, 0x11AA], NFKC: [0xBCDB], NFKD: [0x1107, 0x1168, 0x11AA] }, +{ source: [0xBCDC], NFC: [0xBCDC], NFD: [0x1107, 0x1168, 0x11AB], NFKC: [0xBCDC], NFKD: [0x1107, 0x1168, 0x11AB] }, +{ source: [0xBCDD], NFC: [0xBCDD], NFD: [0x1107, 0x1168, 0x11AC], NFKC: [0xBCDD], NFKD: [0x1107, 0x1168, 0x11AC] }, +{ source: [0xBCDE], NFC: [0xBCDE], NFD: [0x1107, 0x1168, 0x11AD], NFKC: [0xBCDE], NFKD: [0x1107, 0x1168, 0x11AD] }, +{ source: [0xBCDF], NFC: [0xBCDF], NFD: [0x1107, 0x1168, 0x11AE], NFKC: [0xBCDF], NFKD: [0x1107, 0x1168, 0x11AE] }, +{ source: [0xBCE0], NFC: [0xBCE0], NFD: [0x1107, 0x1168, 0x11AF], NFKC: [0xBCE0], NFKD: [0x1107, 0x1168, 0x11AF] }, +{ source: [0xBCE1], NFC: [0xBCE1], NFD: [0x1107, 0x1168, 0x11B0], NFKC: [0xBCE1], NFKD: [0x1107, 0x1168, 0x11B0] }, +{ source: [0xBCE2], NFC: [0xBCE2], NFD: [0x1107, 0x1168, 0x11B1], NFKC: [0xBCE2], NFKD: [0x1107, 0x1168, 0x11B1] }, +{ source: [0xBCE3], NFC: [0xBCE3], NFD: [0x1107, 0x1168, 0x11B2], NFKC: [0xBCE3], NFKD: [0x1107, 0x1168, 0x11B2] }, +{ source: [0xBCE4], NFC: [0xBCE4], NFD: [0x1107, 0x1168, 0x11B3], NFKC: [0xBCE4], NFKD: [0x1107, 0x1168, 0x11B3] }, +{ source: [0xBCE5], NFC: [0xBCE5], NFD: [0x1107, 0x1168, 0x11B4], NFKC: [0xBCE5], NFKD: [0x1107, 0x1168, 0x11B4] }, +{ source: [0xBCE6], NFC: [0xBCE6], NFD: [0x1107, 0x1168, 0x11B5], NFKC: [0xBCE6], NFKD: [0x1107, 0x1168, 0x11B5] }, +{ source: [0xBCE7], NFC: [0xBCE7], NFD: [0x1107, 0x1168, 0x11B6], NFKC: [0xBCE7], NFKD: [0x1107, 0x1168, 0x11B6] }, +{ source: [0xBCE8], NFC: [0xBCE8], NFD: [0x1107, 0x1168, 0x11B7], NFKC: [0xBCE8], NFKD: [0x1107, 0x1168, 0x11B7] }, +{ source: [0xBCE9], NFC: [0xBCE9], NFD: [0x1107, 0x1168, 0x11B8], NFKC: [0xBCE9], NFKD: [0x1107, 0x1168, 0x11B8] }, +{ source: [0xBCEA], NFC: [0xBCEA], NFD: [0x1107, 0x1168, 0x11B9], NFKC: [0xBCEA], NFKD: [0x1107, 0x1168, 0x11B9] }, +{ source: [0xBCEB], NFC: [0xBCEB], NFD: [0x1107, 0x1168, 0x11BA], NFKC: [0xBCEB], NFKD: [0x1107, 0x1168, 0x11BA] }, +{ source: [0xBCEC], NFC: [0xBCEC], NFD: [0x1107, 0x1168, 0x11BB], NFKC: [0xBCEC], NFKD: [0x1107, 0x1168, 0x11BB] }, +{ source: [0xBCED], NFC: [0xBCED], NFD: [0x1107, 0x1168, 0x11BC], NFKC: [0xBCED], NFKD: [0x1107, 0x1168, 0x11BC] }, +{ source: [0xBCEE], NFC: [0xBCEE], NFD: [0x1107, 0x1168, 0x11BD], NFKC: [0xBCEE], NFKD: [0x1107, 0x1168, 0x11BD] }, +{ source: [0xBCEF], NFC: [0xBCEF], NFD: [0x1107, 0x1168, 0x11BE], NFKC: [0xBCEF], NFKD: [0x1107, 0x1168, 0x11BE] }, +{ source: [0xBCF0], NFC: [0xBCF0], NFD: [0x1107, 0x1168, 0x11BF], NFKC: [0xBCF0], NFKD: [0x1107, 0x1168, 0x11BF] }, +{ source: [0xBCF1], NFC: [0xBCF1], NFD: [0x1107, 0x1168, 0x11C0], NFKC: [0xBCF1], NFKD: [0x1107, 0x1168, 0x11C0] }, +{ source: [0xBCF2], NFC: [0xBCF2], NFD: [0x1107, 0x1168, 0x11C1], NFKC: [0xBCF2], NFKD: [0x1107, 0x1168, 0x11C1] }, +{ source: [0xBCF3], NFC: [0xBCF3], NFD: [0x1107, 0x1168, 0x11C2], NFKC: [0xBCF3], NFKD: [0x1107, 0x1168, 0x11C2] }, +{ source: [0xBCF4], NFC: [0xBCF4], NFD: [0x1107, 0x1169], NFKC: [0xBCF4], NFKD: [0x1107, 0x1169] }, +{ source: [0xBCF5], NFC: [0xBCF5], NFD: [0x1107, 0x1169, 0x11A8], NFKC: [0xBCF5], NFKD: [0x1107, 0x1169, 0x11A8] }, +{ source: [0xBCF6], NFC: [0xBCF6], NFD: [0x1107, 0x1169, 0x11A9], NFKC: [0xBCF6], NFKD: [0x1107, 0x1169, 0x11A9] }, +{ source: [0xBCF7], NFC: [0xBCF7], NFD: [0x1107, 0x1169, 0x11AA], NFKC: [0xBCF7], NFKD: [0x1107, 0x1169, 0x11AA] }, +{ source: [0xBCF8], NFC: [0xBCF8], NFD: [0x1107, 0x1169, 0x11AB], NFKC: [0xBCF8], NFKD: [0x1107, 0x1169, 0x11AB] }, +{ source: [0xBCF9], NFC: [0xBCF9], NFD: [0x1107, 0x1169, 0x11AC], NFKC: [0xBCF9], NFKD: [0x1107, 0x1169, 0x11AC] }, +{ source: [0xBCFA], NFC: [0xBCFA], NFD: [0x1107, 0x1169, 0x11AD], NFKC: [0xBCFA], NFKD: [0x1107, 0x1169, 0x11AD] }, +{ source: [0xBCFB], NFC: [0xBCFB], NFD: [0x1107, 0x1169, 0x11AE], NFKC: [0xBCFB], NFKD: [0x1107, 0x1169, 0x11AE] }, +{ source: [0xBCFC], NFC: [0xBCFC], NFD: [0x1107, 0x1169, 0x11AF], NFKC: [0xBCFC], NFKD: [0x1107, 0x1169, 0x11AF] }, +{ source: [0xBCFD], NFC: [0xBCFD], NFD: [0x1107, 0x1169, 0x11B0], NFKC: [0xBCFD], NFKD: [0x1107, 0x1169, 0x11B0] }, +{ source: [0xBCFE], NFC: [0xBCFE], NFD: [0x1107, 0x1169, 0x11B1], NFKC: [0xBCFE], NFKD: [0x1107, 0x1169, 0x11B1] }, +{ source: [0xBCFF], NFC: [0xBCFF], NFD: [0x1107, 0x1169, 0x11B2], NFKC: [0xBCFF], NFKD: [0x1107, 0x1169, 0x11B2] }, +{ source: [0xBD00], NFC: [0xBD00], NFD: [0x1107, 0x1169, 0x11B3], NFKC: [0xBD00], NFKD: [0x1107, 0x1169, 0x11B3] }, +{ source: [0xBD01], NFC: [0xBD01], NFD: [0x1107, 0x1169, 0x11B4], NFKC: [0xBD01], NFKD: [0x1107, 0x1169, 0x11B4] }, +{ source: [0xBD02], NFC: [0xBD02], NFD: [0x1107, 0x1169, 0x11B5], NFKC: [0xBD02], NFKD: [0x1107, 0x1169, 0x11B5] }, +{ source: [0xBD03], NFC: [0xBD03], NFD: [0x1107, 0x1169, 0x11B6], NFKC: [0xBD03], NFKD: [0x1107, 0x1169, 0x11B6] }, +{ source: [0xBD04], NFC: [0xBD04], NFD: [0x1107, 0x1169, 0x11B7], NFKC: [0xBD04], NFKD: [0x1107, 0x1169, 0x11B7] }, +{ source: [0xBD05], NFC: [0xBD05], NFD: [0x1107, 0x1169, 0x11B8], NFKC: [0xBD05], NFKD: [0x1107, 0x1169, 0x11B8] }, +{ source: [0xBD06], NFC: [0xBD06], NFD: [0x1107, 0x1169, 0x11B9], NFKC: [0xBD06], NFKD: [0x1107, 0x1169, 0x11B9] }, +{ source: [0xBD07], NFC: [0xBD07], NFD: [0x1107, 0x1169, 0x11BA], NFKC: [0xBD07], NFKD: [0x1107, 0x1169, 0x11BA] }, +{ source: [0xBD08], NFC: [0xBD08], NFD: [0x1107, 0x1169, 0x11BB], NFKC: [0xBD08], NFKD: [0x1107, 0x1169, 0x11BB] }, +{ source: [0xBD09], NFC: [0xBD09], NFD: [0x1107, 0x1169, 0x11BC], NFKC: [0xBD09], NFKD: [0x1107, 0x1169, 0x11BC] }, +{ source: [0xBD0A], NFC: [0xBD0A], NFD: [0x1107, 0x1169, 0x11BD], NFKC: [0xBD0A], NFKD: [0x1107, 0x1169, 0x11BD] }, +{ source: [0xBD0B], NFC: [0xBD0B], NFD: [0x1107, 0x1169, 0x11BE], NFKC: [0xBD0B], NFKD: [0x1107, 0x1169, 0x11BE] }, +{ source: [0xBD0C], NFC: [0xBD0C], NFD: [0x1107, 0x1169, 0x11BF], NFKC: [0xBD0C], NFKD: [0x1107, 0x1169, 0x11BF] }, +{ source: [0xBD0D], NFC: [0xBD0D], NFD: [0x1107, 0x1169, 0x11C0], NFKC: [0xBD0D], NFKD: [0x1107, 0x1169, 0x11C0] }, +{ source: [0xBD0E], NFC: [0xBD0E], NFD: [0x1107, 0x1169, 0x11C1], NFKC: [0xBD0E], NFKD: [0x1107, 0x1169, 0x11C1] }, +{ source: [0xBD0F], NFC: [0xBD0F], NFD: [0x1107, 0x1169, 0x11C2], NFKC: [0xBD0F], NFKD: [0x1107, 0x1169, 0x11C2] }, +{ source: [0xBD10], NFC: [0xBD10], NFD: [0x1107, 0x116A], NFKC: [0xBD10], NFKD: [0x1107, 0x116A] }, +{ source: [0xBD11], NFC: [0xBD11], NFD: [0x1107, 0x116A, 0x11A8], NFKC: [0xBD11], NFKD: [0x1107, 0x116A, 0x11A8] }, +{ source: [0xBD12], NFC: [0xBD12], NFD: [0x1107, 0x116A, 0x11A9], NFKC: [0xBD12], NFKD: [0x1107, 0x116A, 0x11A9] }, +{ source: [0xBD13], NFC: [0xBD13], NFD: [0x1107, 0x116A, 0x11AA], NFKC: [0xBD13], NFKD: [0x1107, 0x116A, 0x11AA] }, +{ source: [0xBD14], NFC: [0xBD14], NFD: [0x1107, 0x116A, 0x11AB], NFKC: [0xBD14], NFKD: [0x1107, 0x116A, 0x11AB] }, +{ source: [0xBD15], NFC: [0xBD15], NFD: [0x1107, 0x116A, 0x11AC], NFKC: [0xBD15], NFKD: [0x1107, 0x116A, 0x11AC] }, +{ source: [0xBD16], NFC: [0xBD16], NFD: [0x1107, 0x116A, 0x11AD], NFKC: [0xBD16], NFKD: [0x1107, 0x116A, 0x11AD] }, +{ source: [0xBD17], NFC: [0xBD17], NFD: [0x1107, 0x116A, 0x11AE], NFKC: [0xBD17], NFKD: [0x1107, 0x116A, 0x11AE] }, +{ source: [0xBD18], NFC: [0xBD18], NFD: [0x1107, 0x116A, 0x11AF], NFKC: [0xBD18], NFKD: [0x1107, 0x116A, 0x11AF] }, +{ source: [0xBD19], NFC: [0xBD19], NFD: [0x1107, 0x116A, 0x11B0], NFKC: [0xBD19], NFKD: [0x1107, 0x116A, 0x11B0] }, +{ source: [0xBD1A], NFC: [0xBD1A], NFD: [0x1107, 0x116A, 0x11B1], NFKC: [0xBD1A], NFKD: [0x1107, 0x116A, 0x11B1] }, +{ source: [0xBD1B], NFC: [0xBD1B], NFD: [0x1107, 0x116A, 0x11B2], NFKC: [0xBD1B], NFKD: [0x1107, 0x116A, 0x11B2] }, +{ source: [0xBD1C], NFC: [0xBD1C], NFD: [0x1107, 0x116A, 0x11B3], NFKC: [0xBD1C], NFKD: [0x1107, 0x116A, 0x11B3] }, +{ source: [0xBD1D], NFC: [0xBD1D], NFD: [0x1107, 0x116A, 0x11B4], NFKC: [0xBD1D], NFKD: [0x1107, 0x116A, 0x11B4] }, +{ source: [0xBD1E], NFC: [0xBD1E], NFD: [0x1107, 0x116A, 0x11B5], NFKC: [0xBD1E], NFKD: [0x1107, 0x116A, 0x11B5] }, +{ source: [0xBD1F], NFC: [0xBD1F], NFD: [0x1107, 0x116A, 0x11B6], NFKC: [0xBD1F], NFKD: [0x1107, 0x116A, 0x11B6] }, +{ source: [0xBD20], NFC: [0xBD20], NFD: [0x1107, 0x116A, 0x11B7], NFKC: [0xBD20], NFKD: [0x1107, 0x116A, 0x11B7] }, +{ source: [0xBD21], NFC: [0xBD21], NFD: [0x1107, 0x116A, 0x11B8], NFKC: [0xBD21], NFKD: [0x1107, 0x116A, 0x11B8] }, +{ source: [0xBD22], NFC: [0xBD22], NFD: [0x1107, 0x116A, 0x11B9], NFKC: [0xBD22], NFKD: [0x1107, 0x116A, 0x11B9] }, +{ source: [0xBD23], NFC: [0xBD23], NFD: [0x1107, 0x116A, 0x11BA], NFKC: [0xBD23], NFKD: [0x1107, 0x116A, 0x11BA] }, +{ source: [0xBD24], NFC: [0xBD24], NFD: [0x1107, 0x116A, 0x11BB], NFKC: [0xBD24], NFKD: [0x1107, 0x116A, 0x11BB] }, +{ source: [0xBD25], NFC: [0xBD25], NFD: [0x1107, 0x116A, 0x11BC], NFKC: [0xBD25], NFKD: [0x1107, 0x116A, 0x11BC] }, +{ source: [0xBD26], NFC: [0xBD26], NFD: [0x1107, 0x116A, 0x11BD], NFKC: [0xBD26], NFKD: [0x1107, 0x116A, 0x11BD] }, +{ source: [0xBD27], NFC: [0xBD27], NFD: [0x1107, 0x116A, 0x11BE], NFKC: [0xBD27], NFKD: [0x1107, 0x116A, 0x11BE] }, +{ source: [0xBD28], NFC: [0xBD28], NFD: [0x1107, 0x116A, 0x11BF], NFKC: [0xBD28], NFKD: [0x1107, 0x116A, 0x11BF] }, +{ source: [0xBD29], NFC: [0xBD29], NFD: [0x1107, 0x116A, 0x11C0], NFKC: [0xBD29], NFKD: [0x1107, 0x116A, 0x11C0] }, +{ source: [0xBD2A], NFC: [0xBD2A], NFD: [0x1107, 0x116A, 0x11C1], NFKC: [0xBD2A], NFKD: [0x1107, 0x116A, 0x11C1] }, +{ source: [0xBD2B], NFC: [0xBD2B], NFD: [0x1107, 0x116A, 0x11C2], NFKC: [0xBD2B], NFKD: [0x1107, 0x116A, 0x11C2] }, +{ source: [0xBD2C], NFC: [0xBD2C], NFD: [0x1107, 0x116B], NFKC: [0xBD2C], NFKD: [0x1107, 0x116B] }, +{ source: [0xBD2D], NFC: [0xBD2D], NFD: [0x1107, 0x116B, 0x11A8], NFKC: [0xBD2D], NFKD: [0x1107, 0x116B, 0x11A8] }, +{ source: [0xBD2E], NFC: [0xBD2E], NFD: [0x1107, 0x116B, 0x11A9], NFKC: [0xBD2E], NFKD: [0x1107, 0x116B, 0x11A9] }, +{ source: [0xBD2F], NFC: [0xBD2F], NFD: [0x1107, 0x116B, 0x11AA], NFKC: [0xBD2F], NFKD: [0x1107, 0x116B, 0x11AA] }, +{ source: [0xBD30], NFC: [0xBD30], NFD: [0x1107, 0x116B, 0x11AB], NFKC: [0xBD30], NFKD: [0x1107, 0x116B, 0x11AB] }, +{ source: [0xBD31], NFC: [0xBD31], NFD: [0x1107, 0x116B, 0x11AC], NFKC: [0xBD31], NFKD: [0x1107, 0x116B, 0x11AC] }, +{ source: [0xBD32], NFC: [0xBD32], NFD: [0x1107, 0x116B, 0x11AD], NFKC: [0xBD32], NFKD: [0x1107, 0x116B, 0x11AD] }, +{ source: [0xBD33], NFC: [0xBD33], NFD: [0x1107, 0x116B, 0x11AE], NFKC: [0xBD33], NFKD: [0x1107, 0x116B, 0x11AE] }, +{ source: [0xBD34], NFC: [0xBD34], NFD: [0x1107, 0x116B, 0x11AF], NFKC: [0xBD34], NFKD: [0x1107, 0x116B, 0x11AF] }, +{ source: [0xBD35], NFC: [0xBD35], NFD: [0x1107, 0x116B, 0x11B0], NFKC: [0xBD35], NFKD: [0x1107, 0x116B, 0x11B0] }, +{ source: [0xBD36], NFC: [0xBD36], NFD: [0x1107, 0x116B, 0x11B1], NFKC: [0xBD36], NFKD: [0x1107, 0x116B, 0x11B1] }, +{ source: [0xBD37], NFC: [0xBD37], NFD: [0x1107, 0x116B, 0x11B2], NFKC: [0xBD37], NFKD: [0x1107, 0x116B, 0x11B2] }, +{ source: [0xBD38], NFC: [0xBD38], NFD: [0x1107, 0x116B, 0x11B3], NFKC: [0xBD38], NFKD: [0x1107, 0x116B, 0x11B3] }, +{ source: [0xBD39], NFC: [0xBD39], NFD: [0x1107, 0x116B, 0x11B4], NFKC: [0xBD39], NFKD: [0x1107, 0x116B, 0x11B4] }, +{ source: [0xBD3A], NFC: [0xBD3A], NFD: [0x1107, 0x116B, 0x11B5], NFKC: [0xBD3A], NFKD: [0x1107, 0x116B, 0x11B5] }, +{ source: [0xBD3B], NFC: [0xBD3B], NFD: [0x1107, 0x116B, 0x11B6], NFKC: [0xBD3B], NFKD: [0x1107, 0x116B, 0x11B6] }, +{ source: [0xBD3C], NFC: [0xBD3C], NFD: [0x1107, 0x116B, 0x11B7], NFKC: [0xBD3C], NFKD: [0x1107, 0x116B, 0x11B7] }, +{ source: [0xBD3D], NFC: [0xBD3D], NFD: [0x1107, 0x116B, 0x11B8], NFKC: [0xBD3D], NFKD: [0x1107, 0x116B, 0x11B8] }, +{ source: [0xBD3E], NFC: [0xBD3E], NFD: [0x1107, 0x116B, 0x11B9], NFKC: [0xBD3E], NFKD: [0x1107, 0x116B, 0x11B9] }, +{ source: [0xBD3F], NFC: [0xBD3F], NFD: [0x1107, 0x116B, 0x11BA], NFKC: [0xBD3F], NFKD: [0x1107, 0x116B, 0x11BA] }, +{ source: [0xBD40], NFC: [0xBD40], NFD: [0x1107, 0x116B, 0x11BB], NFKC: [0xBD40], NFKD: [0x1107, 0x116B, 0x11BB] }, +{ source: [0xBD41], NFC: [0xBD41], NFD: [0x1107, 0x116B, 0x11BC], NFKC: [0xBD41], NFKD: [0x1107, 0x116B, 0x11BC] }, +{ source: [0xBD42], NFC: [0xBD42], NFD: [0x1107, 0x116B, 0x11BD], NFKC: [0xBD42], NFKD: [0x1107, 0x116B, 0x11BD] }, +{ source: [0xBD43], NFC: [0xBD43], NFD: [0x1107, 0x116B, 0x11BE], NFKC: [0xBD43], NFKD: [0x1107, 0x116B, 0x11BE] }, +{ source: [0xBD44], NFC: [0xBD44], NFD: [0x1107, 0x116B, 0x11BF], NFKC: [0xBD44], NFKD: [0x1107, 0x116B, 0x11BF] }, +{ source: [0xBD45], NFC: [0xBD45], NFD: [0x1107, 0x116B, 0x11C0], NFKC: [0xBD45], NFKD: [0x1107, 0x116B, 0x11C0] }, +{ source: [0xBD46], NFC: [0xBD46], NFD: [0x1107, 0x116B, 0x11C1], NFKC: [0xBD46], NFKD: [0x1107, 0x116B, 0x11C1] }, +{ source: [0xBD47], NFC: [0xBD47], NFD: [0x1107, 0x116B, 0x11C2], NFKC: [0xBD47], NFKD: [0x1107, 0x116B, 0x11C2] }, +{ source: [0xBD48], NFC: [0xBD48], NFD: [0x1107, 0x116C], NFKC: [0xBD48], NFKD: [0x1107, 0x116C] }, +{ source: [0xBD49], NFC: [0xBD49], NFD: [0x1107, 0x116C, 0x11A8], NFKC: [0xBD49], NFKD: [0x1107, 0x116C, 0x11A8] }, +{ source: [0xBD4A], NFC: [0xBD4A], NFD: [0x1107, 0x116C, 0x11A9], NFKC: [0xBD4A], NFKD: [0x1107, 0x116C, 0x11A9] }, +{ source: [0xBD4B], NFC: [0xBD4B], NFD: [0x1107, 0x116C, 0x11AA], NFKC: [0xBD4B], NFKD: [0x1107, 0x116C, 0x11AA] }, +{ source: [0xBD4C], NFC: [0xBD4C], NFD: [0x1107, 0x116C, 0x11AB], NFKC: [0xBD4C], NFKD: [0x1107, 0x116C, 0x11AB] }, +{ source: [0xBD4D], NFC: [0xBD4D], NFD: [0x1107, 0x116C, 0x11AC], NFKC: [0xBD4D], NFKD: [0x1107, 0x116C, 0x11AC] }, +{ source: [0xBD4E], NFC: [0xBD4E], NFD: [0x1107, 0x116C, 0x11AD], NFKC: [0xBD4E], NFKD: [0x1107, 0x116C, 0x11AD] }, +{ source: [0xBD4F], NFC: [0xBD4F], NFD: [0x1107, 0x116C, 0x11AE], NFKC: [0xBD4F], NFKD: [0x1107, 0x116C, 0x11AE] }, +{ source: [0xBD50], NFC: [0xBD50], NFD: [0x1107, 0x116C, 0x11AF], NFKC: [0xBD50], NFKD: [0x1107, 0x116C, 0x11AF] }, +{ source: [0xBD51], NFC: [0xBD51], NFD: [0x1107, 0x116C, 0x11B0], NFKC: [0xBD51], NFKD: [0x1107, 0x116C, 0x11B0] }, +{ source: [0xBD52], NFC: [0xBD52], NFD: [0x1107, 0x116C, 0x11B1], NFKC: [0xBD52], NFKD: [0x1107, 0x116C, 0x11B1] }, +{ source: [0xBD53], NFC: [0xBD53], NFD: [0x1107, 0x116C, 0x11B2], NFKC: [0xBD53], NFKD: [0x1107, 0x116C, 0x11B2] }, +{ source: [0xBD54], NFC: [0xBD54], NFD: [0x1107, 0x116C, 0x11B3], NFKC: [0xBD54], NFKD: [0x1107, 0x116C, 0x11B3] }, +{ source: [0xBD55], NFC: [0xBD55], NFD: [0x1107, 0x116C, 0x11B4], NFKC: [0xBD55], NFKD: [0x1107, 0x116C, 0x11B4] }, +{ source: [0xBD56], NFC: [0xBD56], NFD: [0x1107, 0x116C, 0x11B5], NFKC: [0xBD56], NFKD: [0x1107, 0x116C, 0x11B5] }, +{ source: [0xBD57], NFC: [0xBD57], NFD: [0x1107, 0x116C, 0x11B6], NFKC: [0xBD57], NFKD: [0x1107, 0x116C, 0x11B6] }, +{ source: [0xBD58], NFC: [0xBD58], NFD: [0x1107, 0x116C, 0x11B7], NFKC: [0xBD58], NFKD: [0x1107, 0x116C, 0x11B7] }, +{ source: [0xBD59], NFC: [0xBD59], NFD: [0x1107, 0x116C, 0x11B8], NFKC: [0xBD59], NFKD: [0x1107, 0x116C, 0x11B8] }, +{ source: [0xBD5A], NFC: [0xBD5A], NFD: [0x1107, 0x116C, 0x11B9], NFKC: [0xBD5A], NFKD: [0x1107, 0x116C, 0x11B9] }, +{ source: [0xBD5B], NFC: [0xBD5B], NFD: [0x1107, 0x116C, 0x11BA], NFKC: [0xBD5B], NFKD: [0x1107, 0x116C, 0x11BA] }, +{ source: [0xBD5C], NFC: [0xBD5C], NFD: [0x1107, 0x116C, 0x11BB], NFKC: [0xBD5C], NFKD: [0x1107, 0x116C, 0x11BB] }, +{ source: [0xBD5D], NFC: [0xBD5D], NFD: [0x1107, 0x116C, 0x11BC], NFKC: [0xBD5D], NFKD: [0x1107, 0x116C, 0x11BC] }, +{ source: [0xBD5E], NFC: [0xBD5E], NFD: [0x1107, 0x116C, 0x11BD], NFKC: [0xBD5E], NFKD: [0x1107, 0x116C, 0x11BD] }, +{ source: [0xBD5F], NFC: [0xBD5F], NFD: [0x1107, 0x116C, 0x11BE], NFKC: [0xBD5F], NFKD: [0x1107, 0x116C, 0x11BE] }, +{ source: [0xBD60], NFC: [0xBD60], NFD: [0x1107, 0x116C, 0x11BF], NFKC: [0xBD60], NFKD: [0x1107, 0x116C, 0x11BF] }, +{ source: [0xBD61], NFC: [0xBD61], NFD: [0x1107, 0x116C, 0x11C0], NFKC: [0xBD61], NFKD: [0x1107, 0x116C, 0x11C0] }, +{ source: [0xBD62], NFC: [0xBD62], NFD: [0x1107, 0x116C, 0x11C1], NFKC: [0xBD62], NFKD: [0x1107, 0x116C, 0x11C1] }, +{ source: [0xBD63], NFC: [0xBD63], NFD: [0x1107, 0x116C, 0x11C2], NFKC: [0xBD63], NFKD: [0x1107, 0x116C, 0x11C2] }, +{ source: [0xBD64], NFC: [0xBD64], NFD: [0x1107, 0x116D], NFKC: [0xBD64], NFKD: [0x1107, 0x116D] }, +{ source: [0xBD65], NFC: [0xBD65], NFD: [0x1107, 0x116D, 0x11A8], NFKC: [0xBD65], NFKD: [0x1107, 0x116D, 0x11A8] }, +{ source: [0xBD66], NFC: [0xBD66], NFD: [0x1107, 0x116D, 0x11A9], NFKC: [0xBD66], NFKD: [0x1107, 0x116D, 0x11A9] }, +{ source: [0xBD67], NFC: [0xBD67], NFD: [0x1107, 0x116D, 0x11AA], NFKC: [0xBD67], NFKD: [0x1107, 0x116D, 0x11AA] }, +{ source: [0xBD68], NFC: [0xBD68], NFD: [0x1107, 0x116D, 0x11AB], NFKC: [0xBD68], NFKD: [0x1107, 0x116D, 0x11AB] }, +{ source: [0xBD69], NFC: [0xBD69], NFD: [0x1107, 0x116D, 0x11AC], NFKC: [0xBD69], NFKD: [0x1107, 0x116D, 0x11AC] }, +{ source: [0xBD6A], NFC: [0xBD6A], NFD: [0x1107, 0x116D, 0x11AD], NFKC: [0xBD6A], NFKD: [0x1107, 0x116D, 0x11AD] }, +{ source: [0xBD6B], NFC: [0xBD6B], NFD: [0x1107, 0x116D, 0x11AE], NFKC: [0xBD6B], NFKD: [0x1107, 0x116D, 0x11AE] }, +{ source: [0xBD6C], NFC: [0xBD6C], NFD: [0x1107, 0x116D, 0x11AF], NFKC: [0xBD6C], NFKD: [0x1107, 0x116D, 0x11AF] }, +{ source: [0xBD6D], NFC: [0xBD6D], NFD: [0x1107, 0x116D, 0x11B0], NFKC: [0xBD6D], NFKD: [0x1107, 0x116D, 0x11B0] }, +{ source: [0xBD6E], NFC: [0xBD6E], NFD: [0x1107, 0x116D, 0x11B1], NFKC: [0xBD6E], NFKD: [0x1107, 0x116D, 0x11B1] }, +{ source: [0xBD6F], NFC: [0xBD6F], NFD: [0x1107, 0x116D, 0x11B2], NFKC: [0xBD6F], NFKD: [0x1107, 0x116D, 0x11B2] }, +{ source: [0xBD70], NFC: [0xBD70], NFD: [0x1107, 0x116D, 0x11B3], NFKC: [0xBD70], NFKD: [0x1107, 0x116D, 0x11B3] }, +{ source: [0xBD71], NFC: [0xBD71], NFD: [0x1107, 0x116D, 0x11B4], NFKC: [0xBD71], NFKD: [0x1107, 0x116D, 0x11B4] }, +{ source: [0xBD72], NFC: [0xBD72], NFD: [0x1107, 0x116D, 0x11B5], NFKC: [0xBD72], NFKD: [0x1107, 0x116D, 0x11B5] }, +{ source: [0xBD73], NFC: [0xBD73], NFD: [0x1107, 0x116D, 0x11B6], NFKC: [0xBD73], NFKD: [0x1107, 0x116D, 0x11B6] }, +{ source: [0xBD74], NFC: [0xBD74], NFD: [0x1107, 0x116D, 0x11B7], NFKC: [0xBD74], NFKD: [0x1107, 0x116D, 0x11B7] }, +{ source: [0xBD75], NFC: [0xBD75], NFD: [0x1107, 0x116D, 0x11B8], NFKC: [0xBD75], NFKD: [0x1107, 0x116D, 0x11B8] }, +{ source: [0xBD76], NFC: [0xBD76], NFD: [0x1107, 0x116D, 0x11B9], NFKC: [0xBD76], NFKD: [0x1107, 0x116D, 0x11B9] }, +{ source: [0xBD77], NFC: [0xBD77], NFD: [0x1107, 0x116D, 0x11BA], NFKC: [0xBD77], NFKD: [0x1107, 0x116D, 0x11BA] }, +{ source: [0xBD78], NFC: [0xBD78], NFD: [0x1107, 0x116D, 0x11BB], NFKC: [0xBD78], NFKD: [0x1107, 0x116D, 0x11BB] }, +{ source: [0xBD79], NFC: [0xBD79], NFD: [0x1107, 0x116D, 0x11BC], NFKC: [0xBD79], NFKD: [0x1107, 0x116D, 0x11BC] }, +{ source: [0xBD7A], NFC: [0xBD7A], NFD: [0x1107, 0x116D, 0x11BD], NFKC: [0xBD7A], NFKD: [0x1107, 0x116D, 0x11BD] }, +{ source: [0xBD7B], NFC: [0xBD7B], NFD: [0x1107, 0x116D, 0x11BE], NFKC: [0xBD7B], NFKD: [0x1107, 0x116D, 0x11BE] }, +{ source: [0xBD7C], NFC: [0xBD7C], NFD: [0x1107, 0x116D, 0x11BF], NFKC: [0xBD7C], NFKD: [0x1107, 0x116D, 0x11BF] }, +{ source: [0xBD7D], NFC: [0xBD7D], NFD: [0x1107, 0x116D, 0x11C0], NFKC: [0xBD7D], NFKD: [0x1107, 0x116D, 0x11C0] }, +{ source: [0xBD7E], NFC: [0xBD7E], NFD: [0x1107, 0x116D, 0x11C1], NFKC: [0xBD7E], NFKD: [0x1107, 0x116D, 0x11C1] }, +{ source: [0xBD7F], NFC: [0xBD7F], NFD: [0x1107, 0x116D, 0x11C2], NFKC: [0xBD7F], NFKD: [0x1107, 0x116D, 0x11C2] }, +{ source: [0xBD80], NFC: [0xBD80], NFD: [0x1107, 0x116E], NFKC: [0xBD80], NFKD: [0x1107, 0x116E] }, +{ source: [0xBD81], NFC: [0xBD81], NFD: [0x1107, 0x116E, 0x11A8], NFKC: [0xBD81], NFKD: [0x1107, 0x116E, 0x11A8] }, +{ source: [0xBD82], NFC: [0xBD82], NFD: [0x1107, 0x116E, 0x11A9], NFKC: [0xBD82], NFKD: [0x1107, 0x116E, 0x11A9] }, +{ source: [0xBD83], NFC: [0xBD83], NFD: [0x1107, 0x116E, 0x11AA], NFKC: [0xBD83], NFKD: [0x1107, 0x116E, 0x11AA] }, +{ source: [0xBD84], NFC: [0xBD84], NFD: [0x1107, 0x116E, 0x11AB], NFKC: [0xBD84], NFKD: [0x1107, 0x116E, 0x11AB] }, +{ source: [0xBD85], NFC: [0xBD85], NFD: [0x1107, 0x116E, 0x11AC], NFKC: [0xBD85], NFKD: [0x1107, 0x116E, 0x11AC] }, +{ source: [0xBD86], NFC: [0xBD86], NFD: [0x1107, 0x116E, 0x11AD], NFKC: [0xBD86], NFKD: [0x1107, 0x116E, 0x11AD] }, +{ source: [0xBD87], NFC: [0xBD87], NFD: [0x1107, 0x116E, 0x11AE], NFKC: [0xBD87], NFKD: [0x1107, 0x116E, 0x11AE] }, +{ source: [0xBD88], NFC: [0xBD88], NFD: [0x1107, 0x116E, 0x11AF], NFKC: [0xBD88], NFKD: [0x1107, 0x116E, 0x11AF] }, +{ source: [0xBD89], NFC: [0xBD89], NFD: [0x1107, 0x116E, 0x11B0], NFKC: [0xBD89], NFKD: [0x1107, 0x116E, 0x11B0] }, +{ source: [0xBD8A], NFC: [0xBD8A], NFD: [0x1107, 0x116E, 0x11B1], NFKC: [0xBD8A], NFKD: [0x1107, 0x116E, 0x11B1] }, +{ source: [0xBD8B], NFC: [0xBD8B], NFD: [0x1107, 0x116E, 0x11B2], NFKC: [0xBD8B], NFKD: [0x1107, 0x116E, 0x11B2] }, +{ source: [0xBD8C], NFC: [0xBD8C], NFD: [0x1107, 0x116E, 0x11B3], NFKC: [0xBD8C], NFKD: [0x1107, 0x116E, 0x11B3] }, +{ source: [0xBD8D], NFC: [0xBD8D], NFD: [0x1107, 0x116E, 0x11B4], NFKC: [0xBD8D], NFKD: [0x1107, 0x116E, 0x11B4] }, +{ source: [0xBD8E], NFC: [0xBD8E], NFD: [0x1107, 0x116E, 0x11B5], NFKC: [0xBD8E], NFKD: [0x1107, 0x116E, 0x11B5] }, +{ source: [0xBD8F], NFC: [0xBD8F], NFD: [0x1107, 0x116E, 0x11B6], NFKC: [0xBD8F], NFKD: [0x1107, 0x116E, 0x11B6] }, +{ source: [0xBD90], NFC: [0xBD90], NFD: [0x1107, 0x116E, 0x11B7], NFKC: [0xBD90], NFKD: [0x1107, 0x116E, 0x11B7] }, +{ source: [0xBD91], NFC: [0xBD91], NFD: [0x1107, 0x116E, 0x11B8], NFKC: [0xBD91], NFKD: [0x1107, 0x116E, 0x11B8] }, +{ source: [0xBD92], NFC: [0xBD92], NFD: [0x1107, 0x116E, 0x11B9], NFKC: [0xBD92], NFKD: [0x1107, 0x116E, 0x11B9] }, +{ source: [0xBD93], NFC: [0xBD93], NFD: [0x1107, 0x116E, 0x11BA], NFKC: [0xBD93], NFKD: [0x1107, 0x116E, 0x11BA] }, +{ source: [0xBD94], NFC: [0xBD94], NFD: [0x1107, 0x116E, 0x11BB], NFKC: [0xBD94], NFKD: [0x1107, 0x116E, 0x11BB] }, +{ source: [0xBD95], NFC: [0xBD95], NFD: [0x1107, 0x116E, 0x11BC], NFKC: [0xBD95], NFKD: [0x1107, 0x116E, 0x11BC] }, +{ source: [0xBD96], NFC: [0xBD96], NFD: [0x1107, 0x116E, 0x11BD], NFKC: [0xBD96], NFKD: [0x1107, 0x116E, 0x11BD] }, +{ source: [0xBD97], NFC: [0xBD97], NFD: [0x1107, 0x116E, 0x11BE], NFKC: [0xBD97], NFKD: [0x1107, 0x116E, 0x11BE] }, +{ source: [0xBD98], NFC: [0xBD98], NFD: [0x1107, 0x116E, 0x11BF], NFKC: [0xBD98], NFKD: [0x1107, 0x116E, 0x11BF] }, +{ source: [0xBD99], NFC: [0xBD99], NFD: [0x1107, 0x116E, 0x11C0], NFKC: [0xBD99], NFKD: [0x1107, 0x116E, 0x11C0] }, +{ source: [0xBD9A], NFC: [0xBD9A], NFD: [0x1107, 0x116E, 0x11C1], NFKC: [0xBD9A], NFKD: [0x1107, 0x116E, 0x11C1] }, +{ source: [0xBD9B], NFC: [0xBD9B], NFD: [0x1107, 0x116E, 0x11C2], NFKC: [0xBD9B], NFKD: [0x1107, 0x116E, 0x11C2] }, +{ source: [0xBD9C], NFC: [0xBD9C], NFD: [0x1107, 0x116F], NFKC: [0xBD9C], NFKD: [0x1107, 0x116F] }, +{ source: [0xBD9D], NFC: [0xBD9D], NFD: [0x1107, 0x116F, 0x11A8], NFKC: [0xBD9D], NFKD: [0x1107, 0x116F, 0x11A8] }, +{ source: [0xBD9E], NFC: [0xBD9E], NFD: [0x1107, 0x116F, 0x11A9], NFKC: [0xBD9E], NFKD: [0x1107, 0x116F, 0x11A9] }, +{ source: [0xBD9F], NFC: [0xBD9F], NFD: [0x1107, 0x116F, 0x11AA], NFKC: [0xBD9F], NFKD: [0x1107, 0x116F, 0x11AA] }, +{ source: [0xBDA0], NFC: [0xBDA0], NFD: [0x1107, 0x116F, 0x11AB], NFKC: [0xBDA0], NFKD: [0x1107, 0x116F, 0x11AB] }, +{ source: [0xBDA1], NFC: [0xBDA1], NFD: [0x1107, 0x116F, 0x11AC], NFKC: [0xBDA1], NFKD: [0x1107, 0x116F, 0x11AC] }, +{ source: [0xBDA2], NFC: [0xBDA2], NFD: [0x1107, 0x116F, 0x11AD], NFKC: [0xBDA2], NFKD: [0x1107, 0x116F, 0x11AD] }, +{ source: [0xBDA3], NFC: [0xBDA3], NFD: [0x1107, 0x116F, 0x11AE], NFKC: [0xBDA3], NFKD: [0x1107, 0x116F, 0x11AE] }, +{ source: [0xBDA4], NFC: [0xBDA4], NFD: [0x1107, 0x116F, 0x11AF], NFKC: [0xBDA4], NFKD: [0x1107, 0x116F, 0x11AF] }, +{ source: [0xBDA5], NFC: [0xBDA5], NFD: [0x1107, 0x116F, 0x11B0], NFKC: [0xBDA5], NFKD: [0x1107, 0x116F, 0x11B0] }, +{ source: [0xBDA6], NFC: [0xBDA6], NFD: [0x1107, 0x116F, 0x11B1], NFKC: [0xBDA6], NFKD: [0x1107, 0x116F, 0x11B1] }, +{ source: [0xBDA7], NFC: [0xBDA7], NFD: [0x1107, 0x116F, 0x11B2], NFKC: [0xBDA7], NFKD: [0x1107, 0x116F, 0x11B2] }, +{ source: [0xBDA8], NFC: [0xBDA8], NFD: [0x1107, 0x116F, 0x11B3], NFKC: [0xBDA8], NFKD: [0x1107, 0x116F, 0x11B3] }, +{ source: [0xBDA9], NFC: [0xBDA9], NFD: [0x1107, 0x116F, 0x11B4], NFKC: [0xBDA9], NFKD: [0x1107, 0x116F, 0x11B4] }, +{ source: [0xBDAA], NFC: [0xBDAA], NFD: [0x1107, 0x116F, 0x11B5], NFKC: [0xBDAA], NFKD: [0x1107, 0x116F, 0x11B5] }, +{ source: [0xBDAB], NFC: [0xBDAB], NFD: [0x1107, 0x116F, 0x11B6], NFKC: [0xBDAB], NFKD: [0x1107, 0x116F, 0x11B6] }, +{ source: [0xBDAC], NFC: [0xBDAC], NFD: [0x1107, 0x116F, 0x11B7], NFKC: [0xBDAC], NFKD: [0x1107, 0x116F, 0x11B7] }, +{ source: [0xBDAD], NFC: [0xBDAD], NFD: [0x1107, 0x116F, 0x11B8], NFKC: [0xBDAD], NFKD: [0x1107, 0x116F, 0x11B8] }, +{ source: [0xBDAE], NFC: [0xBDAE], NFD: [0x1107, 0x116F, 0x11B9], NFKC: [0xBDAE], NFKD: [0x1107, 0x116F, 0x11B9] }, +{ source: [0xBDAF], NFC: [0xBDAF], NFD: [0x1107, 0x116F, 0x11BA], NFKC: [0xBDAF], NFKD: [0x1107, 0x116F, 0x11BA] }, +{ source: [0xBDB0], NFC: [0xBDB0], NFD: [0x1107, 0x116F, 0x11BB], NFKC: [0xBDB0], NFKD: [0x1107, 0x116F, 0x11BB] }, +{ source: [0xBDB1], NFC: [0xBDB1], NFD: [0x1107, 0x116F, 0x11BC], NFKC: [0xBDB1], NFKD: [0x1107, 0x116F, 0x11BC] }, +{ source: [0xBDB2], NFC: [0xBDB2], NFD: [0x1107, 0x116F, 0x11BD], NFKC: [0xBDB2], NFKD: [0x1107, 0x116F, 0x11BD] }, +{ source: [0xBDB3], NFC: [0xBDB3], NFD: [0x1107, 0x116F, 0x11BE], NFKC: [0xBDB3], NFKD: [0x1107, 0x116F, 0x11BE] }, +{ source: [0xBDB4], NFC: [0xBDB4], NFD: [0x1107, 0x116F, 0x11BF], NFKC: [0xBDB4], NFKD: [0x1107, 0x116F, 0x11BF] }, +{ source: [0xBDB5], NFC: [0xBDB5], NFD: [0x1107, 0x116F, 0x11C0], NFKC: [0xBDB5], NFKD: [0x1107, 0x116F, 0x11C0] }, +{ source: [0xBDB6], NFC: [0xBDB6], NFD: [0x1107, 0x116F, 0x11C1], NFKC: [0xBDB6], NFKD: [0x1107, 0x116F, 0x11C1] }, +{ source: [0xBDB7], NFC: [0xBDB7], NFD: [0x1107, 0x116F, 0x11C2], NFKC: [0xBDB7], NFKD: [0x1107, 0x116F, 0x11C2] }, +{ source: [0xBDB8], NFC: [0xBDB8], NFD: [0x1107, 0x1170], NFKC: [0xBDB8], NFKD: [0x1107, 0x1170] }, +{ source: [0xBDB9], NFC: [0xBDB9], NFD: [0x1107, 0x1170, 0x11A8], NFKC: [0xBDB9], NFKD: [0x1107, 0x1170, 0x11A8] }, +{ source: [0xBDBA], NFC: [0xBDBA], NFD: [0x1107, 0x1170, 0x11A9], NFKC: [0xBDBA], NFKD: [0x1107, 0x1170, 0x11A9] }, +{ source: [0xBDBB], NFC: [0xBDBB], NFD: [0x1107, 0x1170, 0x11AA], NFKC: [0xBDBB], NFKD: [0x1107, 0x1170, 0x11AA] }, +{ source: [0xBDBC], NFC: [0xBDBC], NFD: [0x1107, 0x1170, 0x11AB], NFKC: [0xBDBC], NFKD: [0x1107, 0x1170, 0x11AB] }, +{ source: [0xBDBD], NFC: [0xBDBD], NFD: [0x1107, 0x1170, 0x11AC], NFKC: [0xBDBD], NFKD: [0x1107, 0x1170, 0x11AC] }, +{ source: [0xBDBE], NFC: [0xBDBE], NFD: [0x1107, 0x1170, 0x11AD], NFKC: [0xBDBE], NFKD: [0x1107, 0x1170, 0x11AD] }, +{ source: [0xBDBF], NFC: [0xBDBF], NFD: [0x1107, 0x1170, 0x11AE], NFKC: [0xBDBF], NFKD: [0x1107, 0x1170, 0x11AE] }, +{ source: [0xBDC0], NFC: [0xBDC0], NFD: [0x1107, 0x1170, 0x11AF], NFKC: [0xBDC0], NFKD: [0x1107, 0x1170, 0x11AF] }, +{ source: [0xBDC1], NFC: [0xBDC1], NFD: [0x1107, 0x1170, 0x11B0], NFKC: [0xBDC1], NFKD: [0x1107, 0x1170, 0x11B0] }, +{ source: [0xBDC2], NFC: [0xBDC2], NFD: [0x1107, 0x1170, 0x11B1], NFKC: [0xBDC2], NFKD: [0x1107, 0x1170, 0x11B1] }, +{ source: [0xBDC3], NFC: [0xBDC3], NFD: [0x1107, 0x1170, 0x11B2], NFKC: [0xBDC3], NFKD: [0x1107, 0x1170, 0x11B2] }, +{ source: [0xBDC4], NFC: [0xBDC4], NFD: [0x1107, 0x1170, 0x11B3], NFKC: [0xBDC4], NFKD: [0x1107, 0x1170, 0x11B3] }, +{ source: [0xBDC5], NFC: [0xBDC5], NFD: [0x1107, 0x1170, 0x11B4], NFKC: [0xBDC5], NFKD: [0x1107, 0x1170, 0x11B4] }, +{ source: [0xBDC6], NFC: [0xBDC6], NFD: [0x1107, 0x1170, 0x11B5], NFKC: [0xBDC6], NFKD: [0x1107, 0x1170, 0x11B5] }, +{ source: [0xBDC7], NFC: [0xBDC7], NFD: [0x1107, 0x1170, 0x11B6], NFKC: [0xBDC7], NFKD: [0x1107, 0x1170, 0x11B6] }, +{ source: [0xBDC8], NFC: [0xBDC8], NFD: [0x1107, 0x1170, 0x11B7], NFKC: [0xBDC8], NFKD: [0x1107, 0x1170, 0x11B7] }, +{ source: [0xBDC9], NFC: [0xBDC9], NFD: [0x1107, 0x1170, 0x11B8], NFKC: [0xBDC9], NFKD: [0x1107, 0x1170, 0x11B8] }, +{ source: [0xBDCA], NFC: [0xBDCA], NFD: [0x1107, 0x1170, 0x11B9], NFKC: [0xBDCA], NFKD: [0x1107, 0x1170, 0x11B9] }, +{ source: [0xBDCB], NFC: [0xBDCB], NFD: [0x1107, 0x1170, 0x11BA], NFKC: [0xBDCB], NFKD: [0x1107, 0x1170, 0x11BA] }, +{ source: [0xBDCC], NFC: [0xBDCC], NFD: [0x1107, 0x1170, 0x11BB], NFKC: [0xBDCC], NFKD: [0x1107, 0x1170, 0x11BB] }, +{ source: [0xBDCD], NFC: [0xBDCD], NFD: [0x1107, 0x1170, 0x11BC], NFKC: [0xBDCD], NFKD: [0x1107, 0x1170, 0x11BC] }, +{ source: [0xBDCE], NFC: [0xBDCE], NFD: [0x1107, 0x1170, 0x11BD], NFKC: [0xBDCE], NFKD: [0x1107, 0x1170, 0x11BD] }, +{ source: [0xBDCF], NFC: [0xBDCF], NFD: [0x1107, 0x1170, 0x11BE], NFKC: [0xBDCF], NFKD: [0x1107, 0x1170, 0x11BE] }, +{ source: [0xBDD0], NFC: [0xBDD0], NFD: [0x1107, 0x1170, 0x11BF], NFKC: [0xBDD0], NFKD: [0x1107, 0x1170, 0x11BF] }, +{ source: [0xBDD1], NFC: [0xBDD1], NFD: [0x1107, 0x1170, 0x11C0], NFKC: [0xBDD1], NFKD: [0x1107, 0x1170, 0x11C0] }, +{ source: [0xBDD2], NFC: [0xBDD2], NFD: [0x1107, 0x1170, 0x11C1], NFKC: [0xBDD2], NFKD: [0x1107, 0x1170, 0x11C1] }, +{ source: [0xBDD3], NFC: [0xBDD3], NFD: [0x1107, 0x1170, 0x11C2], NFKC: [0xBDD3], NFKD: [0x1107, 0x1170, 0x11C2] }, +{ source: [0xBDD4], NFC: [0xBDD4], NFD: [0x1107, 0x1171], NFKC: [0xBDD4], NFKD: [0x1107, 0x1171] }, +{ source: [0xBDD5], NFC: [0xBDD5], NFD: [0x1107, 0x1171, 0x11A8], NFKC: [0xBDD5], NFKD: [0x1107, 0x1171, 0x11A8] }, +{ source: [0xBDD6], NFC: [0xBDD6], NFD: [0x1107, 0x1171, 0x11A9], NFKC: [0xBDD6], NFKD: [0x1107, 0x1171, 0x11A9] }, +{ source: [0xBDD7], NFC: [0xBDD7], NFD: [0x1107, 0x1171, 0x11AA], NFKC: [0xBDD7], NFKD: [0x1107, 0x1171, 0x11AA] }, +{ source: [0xBDD8], NFC: [0xBDD8], NFD: [0x1107, 0x1171, 0x11AB], NFKC: [0xBDD8], NFKD: [0x1107, 0x1171, 0x11AB] }, +{ source: [0xBDD9], NFC: [0xBDD9], NFD: [0x1107, 0x1171, 0x11AC], NFKC: [0xBDD9], NFKD: [0x1107, 0x1171, 0x11AC] }, +{ source: [0xBDDA], NFC: [0xBDDA], NFD: [0x1107, 0x1171, 0x11AD], NFKC: [0xBDDA], NFKD: [0x1107, 0x1171, 0x11AD] }, +{ source: [0xBDDB], NFC: [0xBDDB], NFD: [0x1107, 0x1171, 0x11AE], NFKC: [0xBDDB], NFKD: [0x1107, 0x1171, 0x11AE] }, +{ source: [0xBDDC], NFC: [0xBDDC], NFD: [0x1107, 0x1171, 0x11AF], NFKC: [0xBDDC], NFKD: [0x1107, 0x1171, 0x11AF] }, +{ source: [0xBDDD], NFC: [0xBDDD], NFD: [0x1107, 0x1171, 0x11B0], NFKC: [0xBDDD], NFKD: [0x1107, 0x1171, 0x11B0] }, +{ source: [0xBDDE], NFC: [0xBDDE], NFD: [0x1107, 0x1171, 0x11B1], NFKC: [0xBDDE], NFKD: [0x1107, 0x1171, 0x11B1] }, +{ source: [0xBDDF], NFC: [0xBDDF], NFD: [0x1107, 0x1171, 0x11B2], NFKC: [0xBDDF], NFKD: [0x1107, 0x1171, 0x11B2] }, +{ source: [0xBDE0], NFC: [0xBDE0], NFD: [0x1107, 0x1171, 0x11B3], NFKC: [0xBDE0], NFKD: [0x1107, 0x1171, 0x11B3] }, +{ source: [0xBDE1], NFC: [0xBDE1], NFD: [0x1107, 0x1171, 0x11B4], NFKC: [0xBDE1], NFKD: [0x1107, 0x1171, 0x11B4] }, +{ source: [0xBDE2], NFC: [0xBDE2], NFD: [0x1107, 0x1171, 0x11B5], NFKC: [0xBDE2], NFKD: [0x1107, 0x1171, 0x11B5] }, +{ source: [0xBDE3], NFC: [0xBDE3], NFD: [0x1107, 0x1171, 0x11B6], NFKC: [0xBDE3], NFKD: [0x1107, 0x1171, 0x11B6] }, +{ source: [0xBDE4], NFC: [0xBDE4], NFD: [0x1107, 0x1171, 0x11B7], NFKC: [0xBDE4], NFKD: [0x1107, 0x1171, 0x11B7] }, +{ source: [0xBDE5], NFC: [0xBDE5], NFD: [0x1107, 0x1171, 0x11B8], NFKC: [0xBDE5], NFKD: [0x1107, 0x1171, 0x11B8] }, +{ source: [0xBDE6], NFC: [0xBDE6], NFD: [0x1107, 0x1171, 0x11B9], NFKC: [0xBDE6], NFKD: [0x1107, 0x1171, 0x11B9] }, +{ source: [0xBDE7], NFC: [0xBDE7], NFD: [0x1107, 0x1171, 0x11BA], NFKC: [0xBDE7], NFKD: [0x1107, 0x1171, 0x11BA] }, +{ source: [0xBDE8], NFC: [0xBDE8], NFD: [0x1107, 0x1171, 0x11BB], NFKC: [0xBDE8], NFKD: [0x1107, 0x1171, 0x11BB] }, +{ source: [0xBDE9], NFC: [0xBDE9], NFD: [0x1107, 0x1171, 0x11BC], NFKC: [0xBDE9], NFKD: [0x1107, 0x1171, 0x11BC] }, +{ source: [0xBDEA], NFC: [0xBDEA], NFD: [0x1107, 0x1171, 0x11BD], NFKC: [0xBDEA], NFKD: [0x1107, 0x1171, 0x11BD] }, +{ source: [0xBDEB], NFC: [0xBDEB], NFD: [0x1107, 0x1171, 0x11BE], NFKC: [0xBDEB], NFKD: [0x1107, 0x1171, 0x11BE] }, +{ source: [0xBDEC], NFC: [0xBDEC], NFD: [0x1107, 0x1171, 0x11BF], NFKC: [0xBDEC], NFKD: [0x1107, 0x1171, 0x11BF] }, +{ source: [0xBDED], NFC: [0xBDED], NFD: [0x1107, 0x1171, 0x11C0], NFKC: [0xBDED], NFKD: [0x1107, 0x1171, 0x11C0] }, +{ source: [0xBDEE], NFC: [0xBDEE], NFD: [0x1107, 0x1171, 0x11C1], NFKC: [0xBDEE], NFKD: [0x1107, 0x1171, 0x11C1] }, +{ source: [0xBDEF], NFC: [0xBDEF], NFD: [0x1107, 0x1171, 0x11C2], NFKC: [0xBDEF], NFKD: [0x1107, 0x1171, 0x11C2] }, +{ source: [0xBDF0], NFC: [0xBDF0], NFD: [0x1107, 0x1172], NFKC: [0xBDF0], NFKD: [0x1107, 0x1172] }, +{ source: [0xBDF1], NFC: [0xBDF1], NFD: [0x1107, 0x1172, 0x11A8], NFKC: [0xBDF1], NFKD: [0x1107, 0x1172, 0x11A8] }, +{ source: [0xBDF2], NFC: [0xBDF2], NFD: [0x1107, 0x1172, 0x11A9], NFKC: [0xBDF2], NFKD: [0x1107, 0x1172, 0x11A9] }, +{ source: [0xBDF3], NFC: [0xBDF3], NFD: [0x1107, 0x1172, 0x11AA], NFKC: [0xBDF3], NFKD: [0x1107, 0x1172, 0x11AA] }, +{ source: [0xBDF4], NFC: [0xBDF4], NFD: [0x1107, 0x1172, 0x11AB], NFKC: [0xBDF4], NFKD: [0x1107, 0x1172, 0x11AB] }, +{ source: [0xBDF5], NFC: [0xBDF5], NFD: [0x1107, 0x1172, 0x11AC], NFKC: [0xBDF5], NFKD: [0x1107, 0x1172, 0x11AC] }, +{ source: [0xBDF6], NFC: [0xBDF6], NFD: [0x1107, 0x1172, 0x11AD], NFKC: [0xBDF6], NFKD: [0x1107, 0x1172, 0x11AD] }, +{ source: [0xBDF7], NFC: [0xBDF7], NFD: [0x1107, 0x1172, 0x11AE], NFKC: [0xBDF7], NFKD: [0x1107, 0x1172, 0x11AE] }, +{ source: [0xBDF8], NFC: [0xBDF8], NFD: [0x1107, 0x1172, 0x11AF], NFKC: [0xBDF8], NFKD: [0x1107, 0x1172, 0x11AF] }, +{ source: [0xBDF9], NFC: [0xBDF9], NFD: [0x1107, 0x1172, 0x11B0], NFKC: [0xBDF9], NFKD: [0x1107, 0x1172, 0x11B0] }, +{ source: [0xBDFA], NFC: [0xBDFA], NFD: [0x1107, 0x1172, 0x11B1], NFKC: [0xBDFA], NFKD: [0x1107, 0x1172, 0x11B1] }, +{ source: [0xBDFB], NFC: [0xBDFB], NFD: [0x1107, 0x1172, 0x11B2], NFKC: [0xBDFB], NFKD: [0x1107, 0x1172, 0x11B2] }, +{ source: [0xBDFC], NFC: [0xBDFC], NFD: [0x1107, 0x1172, 0x11B3], NFKC: [0xBDFC], NFKD: [0x1107, 0x1172, 0x11B3] }, +{ source: [0xBDFD], NFC: [0xBDFD], NFD: [0x1107, 0x1172, 0x11B4], NFKC: [0xBDFD], NFKD: [0x1107, 0x1172, 0x11B4] }, +{ source: [0xBDFE], NFC: [0xBDFE], NFD: [0x1107, 0x1172, 0x11B5], NFKC: [0xBDFE], NFKD: [0x1107, 0x1172, 0x11B5] }, +{ source: [0xBDFF], NFC: [0xBDFF], NFD: [0x1107, 0x1172, 0x11B6], NFKC: [0xBDFF], NFKD: [0x1107, 0x1172, 0x11B6] }, +{ source: [0xBE00], NFC: [0xBE00], NFD: [0x1107, 0x1172, 0x11B7], NFKC: [0xBE00], NFKD: [0x1107, 0x1172, 0x11B7] }, +{ source: [0xBE01], NFC: [0xBE01], NFD: [0x1107, 0x1172, 0x11B8], NFKC: [0xBE01], NFKD: [0x1107, 0x1172, 0x11B8] }, +{ source: [0xBE02], NFC: [0xBE02], NFD: [0x1107, 0x1172, 0x11B9], NFKC: [0xBE02], NFKD: [0x1107, 0x1172, 0x11B9] }, +{ source: [0xBE03], NFC: [0xBE03], NFD: [0x1107, 0x1172, 0x11BA], NFKC: [0xBE03], NFKD: [0x1107, 0x1172, 0x11BA] }, +{ source: [0xBE04], NFC: [0xBE04], NFD: [0x1107, 0x1172, 0x11BB], NFKC: [0xBE04], NFKD: [0x1107, 0x1172, 0x11BB] }, +{ source: [0xBE05], NFC: [0xBE05], NFD: [0x1107, 0x1172, 0x11BC], NFKC: [0xBE05], NFKD: [0x1107, 0x1172, 0x11BC] }, +{ source: [0xBE06], NFC: [0xBE06], NFD: [0x1107, 0x1172, 0x11BD], NFKC: [0xBE06], NFKD: [0x1107, 0x1172, 0x11BD] }, +{ source: [0xBE07], NFC: [0xBE07], NFD: [0x1107, 0x1172, 0x11BE], NFKC: [0xBE07], NFKD: [0x1107, 0x1172, 0x11BE] }, +{ source: [0xBE08], NFC: [0xBE08], NFD: [0x1107, 0x1172, 0x11BF], NFKC: [0xBE08], NFKD: [0x1107, 0x1172, 0x11BF] }, +{ source: [0xBE09], NFC: [0xBE09], NFD: [0x1107, 0x1172, 0x11C0], NFKC: [0xBE09], NFKD: [0x1107, 0x1172, 0x11C0] }, +{ source: [0xBE0A], NFC: [0xBE0A], NFD: [0x1107, 0x1172, 0x11C1], NFKC: [0xBE0A], NFKD: [0x1107, 0x1172, 0x11C1] }, +{ source: [0xBE0B], NFC: [0xBE0B], NFD: [0x1107, 0x1172, 0x11C2], NFKC: [0xBE0B], NFKD: [0x1107, 0x1172, 0x11C2] }, +{ source: [0xBE0C], NFC: [0xBE0C], NFD: [0x1107, 0x1173], NFKC: [0xBE0C], NFKD: [0x1107, 0x1173] }, +{ source: [0xBE0D], NFC: [0xBE0D], NFD: [0x1107, 0x1173, 0x11A8], NFKC: [0xBE0D], NFKD: [0x1107, 0x1173, 0x11A8] }, +{ source: [0xBE0E], NFC: [0xBE0E], NFD: [0x1107, 0x1173, 0x11A9], NFKC: [0xBE0E], NFKD: [0x1107, 0x1173, 0x11A9] }, +{ source: [0xBE0F], NFC: [0xBE0F], NFD: [0x1107, 0x1173, 0x11AA], NFKC: [0xBE0F], NFKD: [0x1107, 0x1173, 0x11AA] }, +{ source: [0xBE10], NFC: [0xBE10], NFD: [0x1107, 0x1173, 0x11AB], NFKC: [0xBE10], NFKD: [0x1107, 0x1173, 0x11AB] }, +{ source: [0xBE11], NFC: [0xBE11], NFD: [0x1107, 0x1173, 0x11AC], NFKC: [0xBE11], NFKD: [0x1107, 0x1173, 0x11AC] }, +{ source: [0xBE12], NFC: [0xBE12], NFD: [0x1107, 0x1173, 0x11AD], NFKC: [0xBE12], NFKD: [0x1107, 0x1173, 0x11AD] }, +{ source: [0xBE13], NFC: [0xBE13], NFD: [0x1107, 0x1173, 0x11AE], NFKC: [0xBE13], NFKD: [0x1107, 0x1173, 0x11AE] }, +{ source: [0xBE14], NFC: [0xBE14], NFD: [0x1107, 0x1173, 0x11AF], NFKC: [0xBE14], NFKD: [0x1107, 0x1173, 0x11AF] }, +{ source: [0xBE15], NFC: [0xBE15], NFD: [0x1107, 0x1173, 0x11B0], NFKC: [0xBE15], NFKD: [0x1107, 0x1173, 0x11B0] }, +{ source: [0xBE16], NFC: [0xBE16], NFD: [0x1107, 0x1173, 0x11B1], NFKC: [0xBE16], NFKD: [0x1107, 0x1173, 0x11B1] }, +{ source: [0xBE17], NFC: [0xBE17], NFD: [0x1107, 0x1173, 0x11B2], NFKC: [0xBE17], NFKD: [0x1107, 0x1173, 0x11B2] }, +{ source: [0xBE18], NFC: [0xBE18], NFD: [0x1107, 0x1173, 0x11B3], NFKC: [0xBE18], NFKD: [0x1107, 0x1173, 0x11B3] }, +{ source: [0xBE19], NFC: [0xBE19], NFD: [0x1107, 0x1173, 0x11B4], NFKC: [0xBE19], NFKD: [0x1107, 0x1173, 0x11B4] }, +{ source: [0xBE1A], NFC: [0xBE1A], NFD: [0x1107, 0x1173, 0x11B5], NFKC: [0xBE1A], NFKD: [0x1107, 0x1173, 0x11B5] }, +{ source: [0xBE1B], NFC: [0xBE1B], NFD: [0x1107, 0x1173, 0x11B6], NFKC: [0xBE1B], NFKD: [0x1107, 0x1173, 0x11B6] }, +{ source: [0xBE1C], NFC: [0xBE1C], NFD: [0x1107, 0x1173, 0x11B7], NFKC: [0xBE1C], NFKD: [0x1107, 0x1173, 0x11B7] }, +{ source: [0xBE1D], NFC: [0xBE1D], NFD: [0x1107, 0x1173, 0x11B8], NFKC: [0xBE1D], NFKD: [0x1107, 0x1173, 0x11B8] }, +{ source: [0xBE1E], NFC: [0xBE1E], NFD: [0x1107, 0x1173, 0x11B9], NFKC: [0xBE1E], NFKD: [0x1107, 0x1173, 0x11B9] }, +{ source: [0xBE1F], NFC: [0xBE1F], NFD: [0x1107, 0x1173, 0x11BA], NFKC: [0xBE1F], NFKD: [0x1107, 0x1173, 0x11BA] }, +{ source: [0xBE20], NFC: [0xBE20], NFD: [0x1107, 0x1173, 0x11BB], NFKC: [0xBE20], NFKD: [0x1107, 0x1173, 0x11BB] }, +{ source: [0xBE21], NFC: [0xBE21], NFD: [0x1107, 0x1173, 0x11BC], NFKC: [0xBE21], NFKD: [0x1107, 0x1173, 0x11BC] }, +{ source: [0xBE22], NFC: [0xBE22], NFD: [0x1107, 0x1173, 0x11BD], NFKC: [0xBE22], NFKD: [0x1107, 0x1173, 0x11BD] }, +{ source: [0xBE23], NFC: [0xBE23], NFD: [0x1107, 0x1173, 0x11BE], NFKC: [0xBE23], NFKD: [0x1107, 0x1173, 0x11BE] }, +{ source: [0xBE24], NFC: [0xBE24], NFD: [0x1107, 0x1173, 0x11BF], NFKC: [0xBE24], NFKD: [0x1107, 0x1173, 0x11BF] }, +{ source: [0xBE25], NFC: [0xBE25], NFD: [0x1107, 0x1173, 0x11C0], NFKC: [0xBE25], NFKD: [0x1107, 0x1173, 0x11C0] }, +{ source: [0xBE26], NFC: [0xBE26], NFD: [0x1107, 0x1173, 0x11C1], NFKC: [0xBE26], NFKD: [0x1107, 0x1173, 0x11C1] }, +{ source: [0xBE27], NFC: [0xBE27], NFD: [0x1107, 0x1173, 0x11C2], NFKC: [0xBE27], NFKD: [0x1107, 0x1173, 0x11C2] }, +{ source: [0xBE28], NFC: [0xBE28], NFD: [0x1107, 0x1174], NFKC: [0xBE28], NFKD: [0x1107, 0x1174] }, +{ source: [0xBE29], NFC: [0xBE29], NFD: [0x1107, 0x1174, 0x11A8], NFKC: [0xBE29], NFKD: [0x1107, 0x1174, 0x11A8] }, +{ source: [0xBE2A], NFC: [0xBE2A], NFD: [0x1107, 0x1174, 0x11A9], NFKC: [0xBE2A], NFKD: [0x1107, 0x1174, 0x11A9] }, +{ source: [0xBE2B], NFC: [0xBE2B], NFD: [0x1107, 0x1174, 0x11AA], NFKC: [0xBE2B], NFKD: [0x1107, 0x1174, 0x11AA] }, +{ source: [0xBE2C], NFC: [0xBE2C], NFD: [0x1107, 0x1174, 0x11AB], NFKC: [0xBE2C], NFKD: [0x1107, 0x1174, 0x11AB] }, +{ source: [0xBE2D], NFC: [0xBE2D], NFD: [0x1107, 0x1174, 0x11AC], NFKC: [0xBE2D], NFKD: [0x1107, 0x1174, 0x11AC] }, +{ source: [0xBE2E], NFC: [0xBE2E], NFD: [0x1107, 0x1174, 0x11AD], NFKC: [0xBE2E], NFKD: [0x1107, 0x1174, 0x11AD] }, +{ source: [0xBE2F], NFC: [0xBE2F], NFD: [0x1107, 0x1174, 0x11AE], NFKC: [0xBE2F], NFKD: [0x1107, 0x1174, 0x11AE] }, +{ source: [0xBE30], NFC: [0xBE30], NFD: [0x1107, 0x1174, 0x11AF], NFKC: [0xBE30], NFKD: [0x1107, 0x1174, 0x11AF] }, +{ source: [0xBE31], NFC: [0xBE31], NFD: [0x1107, 0x1174, 0x11B0], NFKC: [0xBE31], NFKD: [0x1107, 0x1174, 0x11B0] }, +{ source: [0xBE32], NFC: [0xBE32], NFD: [0x1107, 0x1174, 0x11B1], NFKC: [0xBE32], NFKD: [0x1107, 0x1174, 0x11B1] }, +{ source: [0xBE33], NFC: [0xBE33], NFD: [0x1107, 0x1174, 0x11B2], NFKC: [0xBE33], NFKD: [0x1107, 0x1174, 0x11B2] }, +{ source: [0xBE34], NFC: [0xBE34], NFD: [0x1107, 0x1174, 0x11B3], NFKC: [0xBE34], NFKD: [0x1107, 0x1174, 0x11B3] }, +{ source: [0xBE35], NFC: [0xBE35], NFD: [0x1107, 0x1174, 0x11B4], NFKC: [0xBE35], NFKD: [0x1107, 0x1174, 0x11B4] }, +{ source: [0xBE36], NFC: [0xBE36], NFD: [0x1107, 0x1174, 0x11B5], NFKC: [0xBE36], NFKD: [0x1107, 0x1174, 0x11B5] }, +{ source: [0xBE37], NFC: [0xBE37], NFD: [0x1107, 0x1174, 0x11B6], NFKC: [0xBE37], NFKD: [0x1107, 0x1174, 0x11B6] }, +{ source: [0xBE38], NFC: [0xBE38], NFD: [0x1107, 0x1174, 0x11B7], NFKC: [0xBE38], NFKD: [0x1107, 0x1174, 0x11B7] }, +{ source: [0xBE39], NFC: [0xBE39], NFD: [0x1107, 0x1174, 0x11B8], NFKC: [0xBE39], NFKD: [0x1107, 0x1174, 0x11B8] }, +{ source: [0xBE3A], NFC: [0xBE3A], NFD: [0x1107, 0x1174, 0x11B9], NFKC: [0xBE3A], NFKD: [0x1107, 0x1174, 0x11B9] }, +{ source: [0xBE3B], NFC: [0xBE3B], NFD: [0x1107, 0x1174, 0x11BA], NFKC: [0xBE3B], NFKD: [0x1107, 0x1174, 0x11BA] }, +{ source: [0xBE3C], NFC: [0xBE3C], NFD: [0x1107, 0x1174, 0x11BB], NFKC: [0xBE3C], NFKD: [0x1107, 0x1174, 0x11BB] }, +{ source: [0xBE3D], NFC: [0xBE3D], NFD: [0x1107, 0x1174, 0x11BC], NFKC: [0xBE3D], NFKD: [0x1107, 0x1174, 0x11BC] }, +{ source: [0xBE3E], NFC: [0xBE3E], NFD: [0x1107, 0x1174, 0x11BD], NFKC: [0xBE3E], NFKD: [0x1107, 0x1174, 0x11BD] }, +{ source: [0xBE3F], NFC: [0xBE3F], NFD: [0x1107, 0x1174, 0x11BE], NFKC: [0xBE3F], NFKD: [0x1107, 0x1174, 0x11BE] }, +{ source: [0xBE40], NFC: [0xBE40], NFD: [0x1107, 0x1174, 0x11BF], NFKC: [0xBE40], NFKD: [0x1107, 0x1174, 0x11BF] }, +{ source: [0xBE41], NFC: [0xBE41], NFD: [0x1107, 0x1174, 0x11C0], NFKC: [0xBE41], NFKD: [0x1107, 0x1174, 0x11C0] }, +{ source: [0xBE42], NFC: [0xBE42], NFD: [0x1107, 0x1174, 0x11C1], NFKC: [0xBE42], NFKD: [0x1107, 0x1174, 0x11C1] }, +{ source: [0xBE43], NFC: [0xBE43], NFD: [0x1107, 0x1174, 0x11C2], NFKC: [0xBE43], NFKD: [0x1107, 0x1174, 0x11C2] }, +{ source: [0xBE44], NFC: [0xBE44], NFD: [0x1107, 0x1175], NFKC: [0xBE44], NFKD: [0x1107, 0x1175] }, +{ source: [0xBE45], NFC: [0xBE45], NFD: [0x1107, 0x1175, 0x11A8], NFKC: [0xBE45], NFKD: [0x1107, 0x1175, 0x11A8] }, +{ source: [0xBE46], NFC: [0xBE46], NFD: [0x1107, 0x1175, 0x11A9], NFKC: [0xBE46], NFKD: [0x1107, 0x1175, 0x11A9] }, +{ source: [0xBE47], NFC: [0xBE47], NFD: [0x1107, 0x1175, 0x11AA], NFKC: [0xBE47], NFKD: [0x1107, 0x1175, 0x11AA] }, +{ source: [0xBE48], NFC: [0xBE48], NFD: [0x1107, 0x1175, 0x11AB], NFKC: [0xBE48], NFKD: [0x1107, 0x1175, 0x11AB] }, +{ source: [0xBE49], NFC: [0xBE49], NFD: [0x1107, 0x1175, 0x11AC], NFKC: [0xBE49], NFKD: [0x1107, 0x1175, 0x11AC] }, +{ source: [0xBE4A], NFC: [0xBE4A], NFD: [0x1107, 0x1175, 0x11AD], NFKC: [0xBE4A], NFKD: [0x1107, 0x1175, 0x11AD] }, +{ source: [0xBE4B], NFC: [0xBE4B], NFD: [0x1107, 0x1175, 0x11AE], NFKC: [0xBE4B], NFKD: [0x1107, 0x1175, 0x11AE] }, +{ source: [0xBE4C], NFC: [0xBE4C], NFD: [0x1107, 0x1175, 0x11AF], NFKC: [0xBE4C], NFKD: [0x1107, 0x1175, 0x11AF] }, +{ source: [0xBE4D], NFC: [0xBE4D], NFD: [0x1107, 0x1175, 0x11B0], NFKC: [0xBE4D], NFKD: [0x1107, 0x1175, 0x11B0] }, +{ source: [0xBE4E], NFC: [0xBE4E], NFD: [0x1107, 0x1175, 0x11B1], NFKC: [0xBE4E], NFKD: [0x1107, 0x1175, 0x11B1] }, +{ source: [0xBE4F], NFC: [0xBE4F], NFD: [0x1107, 0x1175, 0x11B2], NFKC: [0xBE4F], NFKD: [0x1107, 0x1175, 0x11B2] }, +{ source: [0xBE50], NFC: [0xBE50], NFD: [0x1107, 0x1175, 0x11B3], NFKC: [0xBE50], NFKD: [0x1107, 0x1175, 0x11B3] }, +{ source: [0xBE51], NFC: [0xBE51], NFD: [0x1107, 0x1175, 0x11B4], NFKC: [0xBE51], NFKD: [0x1107, 0x1175, 0x11B4] }, +{ source: [0xBE52], NFC: [0xBE52], NFD: [0x1107, 0x1175, 0x11B5], NFKC: [0xBE52], NFKD: [0x1107, 0x1175, 0x11B5] }, +{ source: [0xBE53], NFC: [0xBE53], NFD: [0x1107, 0x1175, 0x11B6], NFKC: [0xBE53], NFKD: [0x1107, 0x1175, 0x11B6] }, +{ source: [0xBE54], NFC: [0xBE54], NFD: [0x1107, 0x1175, 0x11B7], NFKC: [0xBE54], NFKD: [0x1107, 0x1175, 0x11B7] }, +{ source: [0xBE55], NFC: [0xBE55], NFD: [0x1107, 0x1175, 0x11B8], NFKC: [0xBE55], NFKD: [0x1107, 0x1175, 0x11B8] }, +{ source: [0xBE56], NFC: [0xBE56], NFD: [0x1107, 0x1175, 0x11B9], NFKC: [0xBE56], NFKD: [0x1107, 0x1175, 0x11B9] }, +{ source: [0xBE57], NFC: [0xBE57], NFD: [0x1107, 0x1175, 0x11BA], NFKC: [0xBE57], NFKD: [0x1107, 0x1175, 0x11BA] }, +{ source: [0xBE58], NFC: [0xBE58], NFD: [0x1107, 0x1175, 0x11BB], NFKC: [0xBE58], NFKD: [0x1107, 0x1175, 0x11BB] }, +{ source: [0xBE59], NFC: [0xBE59], NFD: [0x1107, 0x1175, 0x11BC], NFKC: [0xBE59], NFKD: [0x1107, 0x1175, 0x11BC] }, +{ source: [0xBE5A], NFC: [0xBE5A], NFD: [0x1107, 0x1175, 0x11BD], NFKC: [0xBE5A], NFKD: [0x1107, 0x1175, 0x11BD] }, +{ source: [0xBE5B], NFC: [0xBE5B], NFD: [0x1107, 0x1175, 0x11BE], NFKC: [0xBE5B], NFKD: [0x1107, 0x1175, 0x11BE] }, +{ source: [0xBE5C], NFC: [0xBE5C], NFD: [0x1107, 0x1175, 0x11BF], NFKC: [0xBE5C], NFKD: [0x1107, 0x1175, 0x11BF] }, +{ source: [0xBE5D], NFC: [0xBE5D], NFD: [0x1107, 0x1175, 0x11C0], NFKC: [0xBE5D], NFKD: [0x1107, 0x1175, 0x11C0] }, +{ source: [0xBE5E], NFC: [0xBE5E], NFD: [0x1107, 0x1175, 0x11C1], NFKC: [0xBE5E], NFKD: [0x1107, 0x1175, 0x11C1] }, +{ source: [0xBE5F], NFC: [0xBE5F], NFD: [0x1107, 0x1175, 0x11C2], NFKC: [0xBE5F], NFKD: [0x1107, 0x1175, 0x11C2] }, +{ source: [0xBE60], NFC: [0xBE60], NFD: [0x1108, 0x1161], NFKC: [0xBE60], NFKD: [0x1108, 0x1161] }, +{ source: [0xBE61], NFC: [0xBE61], NFD: [0x1108, 0x1161, 0x11A8], NFKC: [0xBE61], NFKD: [0x1108, 0x1161, 0x11A8] }, +{ source: [0xBE62], NFC: [0xBE62], NFD: [0x1108, 0x1161, 0x11A9], NFKC: [0xBE62], NFKD: [0x1108, 0x1161, 0x11A9] }, +{ source: [0xBE63], NFC: [0xBE63], NFD: [0x1108, 0x1161, 0x11AA], NFKC: [0xBE63], NFKD: [0x1108, 0x1161, 0x11AA] }, +{ source: [0xBE64], NFC: [0xBE64], NFD: [0x1108, 0x1161, 0x11AB], NFKC: [0xBE64], NFKD: [0x1108, 0x1161, 0x11AB] }, +{ source: [0xBE65], NFC: [0xBE65], NFD: [0x1108, 0x1161, 0x11AC], NFKC: [0xBE65], NFKD: [0x1108, 0x1161, 0x11AC] }, +{ source: [0xBE66], NFC: [0xBE66], NFD: [0x1108, 0x1161, 0x11AD], NFKC: [0xBE66], NFKD: [0x1108, 0x1161, 0x11AD] }, +{ source: [0xBE67], NFC: [0xBE67], NFD: [0x1108, 0x1161, 0x11AE], NFKC: [0xBE67], NFKD: [0x1108, 0x1161, 0x11AE] }, +{ source: [0xBE68], NFC: [0xBE68], NFD: [0x1108, 0x1161, 0x11AF], NFKC: [0xBE68], NFKD: [0x1108, 0x1161, 0x11AF] }, +{ source: [0xBE69], NFC: [0xBE69], NFD: [0x1108, 0x1161, 0x11B0], NFKC: [0xBE69], NFKD: [0x1108, 0x1161, 0x11B0] }, +{ source: [0xBE6A], NFC: [0xBE6A], NFD: [0x1108, 0x1161, 0x11B1], NFKC: [0xBE6A], NFKD: [0x1108, 0x1161, 0x11B1] }, +{ source: [0xBE6B], NFC: [0xBE6B], NFD: [0x1108, 0x1161, 0x11B2], NFKC: [0xBE6B], NFKD: [0x1108, 0x1161, 0x11B2] }, +{ source: [0xBE6C], NFC: [0xBE6C], NFD: [0x1108, 0x1161, 0x11B3], NFKC: [0xBE6C], NFKD: [0x1108, 0x1161, 0x11B3] }, +{ source: [0xBE6D], NFC: [0xBE6D], NFD: [0x1108, 0x1161, 0x11B4], NFKC: [0xBE6D], NFKD: [0x1108, 0x1161, 0x11B4] }, +{ source: [0xBE6E], NFC: [0xBE6E], NFD: [0x1108, 0x1161, 0x11B5], NFKC: [0xBE6E], NFKD: [0x1108, 0x1161, 0x11B5] }, +{ source: [0xBE6F], NFC: [0xBE6F], NFD: [0x1108, 0x1161, 0x11B6], NFKC: [0xBE6F], NFKD: [0x1108, 0x1161, 0x11B6] }, +{ source: [0xBE70], NFC: [0xBE70], NFD: [0x1108, 0x1161, 0x11B7], NFKC: [0xBE70], NFKD: [0x1108, 0x1161, 0x11B7] }, +{ source: [0xBE71], NFC: [0xBE71], NFD: [0x1108, 0x1161, 0x11B8], NFKC: [0xBE71], NFKD: [0x1108, 0x1161, 0x11B8] }, +{ source: [0xBE72], NFC: [0xBE72], NFD: [0x1108, 0x1161, 0x11B9], NFKC: [0xBE72], NFKD: [0x1108, 0x1161, 0x11B9] }, +{ source: [0xBE73], NFC: [0xBE73], NFD: [0x1108, 0x1161, 0x11BA], NFKC: [0xBE73], NFKD: [0x1108, 0x1161, 0x11BA] }, +{ source: [0xBE74], NFC: [0xBE74], NFD: [0x1108, 0x1161, 0x11BB], NFKC: [0xBE74], NFKD: [0x1108, 0x1161, 0x11BB] }, +{ source: [0xBE75], NFC: [0xBE75], NFD: [0x1108, 0x1161, 0x11BC], NFKC: [0xBE75], NFKD: [0x1108, 0x1161, 0x11BC] }, +{ source: [0xBE76], NFC: [0xBE76], NFD: [0x1108, 0x1161, 0x11BD], NFKC: [0xBE76], NFKD: [0x1108, 0x1161, 0x11BD] }, +{ source: [0xBE77], NFC: [0xBE77], NFD: [0x1108, 0x1161, 0x11BE], NFKC: [0xBE77], NFKD: [0x1108, 0x1161, 0x11BE] }, +{ source: [0xBE78], NFC: [0xBE78], NFD: [0x1108, 0x1161, 0x11BF], NFKC: [0xBE78], NFKD: [0x1108, 0x1161, 0x11BF] }, +{ source: [0xBE79], NFC: [0xBE79], NFD: [0x1108, 0x1161, 0x11C0], NFKC: [0xBE79], NFKD: [0x1108, 0x1161, 0x11C0] }, +{ source: [0xBE7A], NFC: [0xBE7A], NFD: [0x1108, 0x1161, 0x11C1], NFKC: [0xBE7A], NFKD: [0x1108, 0x1161, 0x11C1] }, +{ source: [0xBE7B], NFC: [0xBE7B], NFD: [0x1108, 0x1161, 0x11C2], NFKC: [0xBE7B], NFKD: [0x1108, 0x1161, 0x11C2] }, +{ source: [0xBE7C], NFC: [0xBE7C], NFD: [0x1108, 0x1162], NFKC: [0xBE7C], NFKD: [0x1108, 0x1162] }, +{ source: [0xBE7D], NFC: [0xBE7D], NFD: [0x1108, 0x1162, 0x11A8], NFKC: [0xBE7D], NFKD: [0x1108, 0x1162, 0x11A8] }, +{ source: [0xBE7E], NFC: [0xBE7E], NFD: [0x1108, 0x1162, 0x11A9], NFKC: [0xBE7E], NFKD: [0x1108, 0x1162, 0x11A9] }, +{ source: [0xBE7F], NFC: [0xBE7F], NFD: [0x1108, 0x1162, 0x11AA], NFKC: [0xBE7F], NFKD: [0x1108, 0x1162, 0x11AA] }, +{ source: [0xBE80], NFC: [0xBE80], NFD: [0x1108, 0x1162, 0x11AB], NFKC: [0xBE80], NFKD: [0x1108, 0x1162, 0x11AB] }, +{ source: [0xBE81], NFC: [0xBE81], NFD: [0x1108, 0x1162, 0x11AC], NFKC: [0xBE81], NFKD: [0x1108, 0x1162, 0x11AC] }, +{ source: [0xBE82], NFC: [0xBE82], NFD: [0x1108, 0x1162, 0x11AD], NFKC: [0xBE82], NFKD: [0x1108, 0x1162, 0x11AD] }, +{ source: [0xBE83], NFC: [0xBE83], NFD: [0x1108, 0x1162, 0x11AE], NFKC: [0xBE83], NFKD: [0x1108, 0x1162, 0x11AE] }, +{ source: [0xBE84], NFC: [0xBE84], NFD: [0x1108, 0x1162, 0x11AF], NFKC: [0xBE84], NFKD: [0x1108, 0x1162, 0x11AF] }, +{ source: [0xBE85], NFC: [0xBE85], NFD: [0x1108, 0x1162, 0x11B0], NFKC: [0xBE85], NFKD: [0x1108, 0x1162, 0x11B0] }, +{ source: [0xBE86], NFC: [0xBE86], NFD: [0x1108, 0x1162, 0x11B1], NFKC: [0xBE86], NFKD: [0x1108, 0x1162, 0x11B1] }, +{ source: [0xBE87], NFC: [0xBE87], NFD: [0x1108, 0x1162, 0x11B2], NFKC: [0xBE87], NFKD: [0x1108, 0x1162, 0x11B2] }, +{ source: [0xBE88], NFC: [0xBE88], NFD: [0x1108, 0x1162, 0x11B3], NFKC: [0xBE88], NFKD: [0x1108, 0x1162, 0x11B3] }, +{ source: [0xBE89], NFC: [0xBE89], NFD: [0x1108, 0x1162, 0x11B4], NFKC: [0xBE89], NFKD: [0x1108, 0x1162, 0x11B4] }, +{ source: [0xBE8A], NFC: [0xBE8A], NFD: [0x1108, 0x1162, 0x11B5], NFKC: [0xBE8A], NFKD: [0x1108, 0x1162, 0x11B5] }, +{ source: [0xBE8B], NFC: [0xBE8B], NFD: [0x1108, 0x1162, 0x11B6], NFKC: [0xBE8B], NFKD: [0x1108, 0x1162, 0x11B6] }, +{ source: [0xBE8C], NFC: [0xBE8C], NFD: [0x1108, 0x1162, 0x11B7], NFKC: [0xBE8C], NFKD: [0x1108, 0x1162, 0x11B7] }, +{ source: [0xBE8D], NFC: [0xBE8D], NFD: [0x1108, 0x1162, 0x11B8], NFKC: [0xBE8D], NFKD: [0x1108, 0x1162, 0x11B8] }, +{ source: [0xBE8E], NFC: [0xBE8E], NFD: [0x1108, 0x1162, 0x11B9], NFKC: [0xBE8E], NFKD: [0x1108, 0x1162, 0x11B9] }, +{ source: [0xBE8F], NFC: [0xBE8F], NFD: [0x1108, 0x1162, 0x11BA], NFKC: [0xBE8F], NFKD: [0x1108, 0x1162, 0x11BA] }, +{ source: [0xBE90], NFC: [0xBE90], NFD: [0x1108, 0x1162, 0x11BB], NFKC: [0xBE90], NFKD: [0x1108, 0x1162, 0x11BB] }, +{ source: [0xBE91], NFC: [0xBE91], NFD: [0x1108, 0x1162, 0x11BC], NFKC: [0xBE91], NFKD: [0x1108, 0x1162, 0x11BC] }, +{ source: [0xBE92], NFC: [0xBE92], NFD: [0x1108, 0x1162, 0x11BD], NFKC: [0xBE92], NFKD: [0x1108, 0x1162, 0x11BD] }, +{ source: [0xBE93], NFC: [0xBE93], NFD: [0x1108, 0x1162, 0x11BE], NFKC: [0xBE93], NFKD: [0x1108, 0x1162, 0x11BE] }, +{ source: [0xBE94], NFC: [0xBE94], NFD: [0x1108, 0x1162, 0x11BF], NFKC: [0xBE94], NFKD: [0x1108, 0x1162, 0x11BF] }, +{ source: [0xBE95], NFC: [0xBE95], NFD: [0x1108, 0x1162, 0x11C0], NFKC: [0xBE95], NFKD: [0x1108, 0x1162, 0x11C0] }, +{ source: [0xBE96], NFC: [0xBE96], NFD: [0x1108, 0x1162, 0x11C1], NFKC: [0xBE96], NFKD: [0x1108, 0x1162, 0x11C1] }, +{ source: [0xBE97], NFC: [0xBE97], NFD: [0x1108, 0x1162, 0x11C2], NFKC: [0xBE97], NFKD: [0x1108, 0x1162, 0x11C2] }, +{ source: [0xBE98], NFC: [0xBE98], NFD: [0x1108, 0x1163], NFKC: [0xBE98], NFKD: [0x1108, 0x1163] }, +{ source: [0xBE99], NFC: [0xBE99], NFD: [0x1108, 0x1163, 0x11A8], NFKC: [0xBE99], NFKD: [0x1108, 0x1163, 0x11A8] }, +{ source: [0xBE9A], NFC: [0xBE9A], NFD: [0x1108, 0x1163, 0x11A9], NFKC: [0xBE9A], NFKD: [0x1108, 0x1163, 0x11A9] }, +{ source: [0xBE9B], NFC: [0xBE9B], NFD: [0x1108, 0x1163, 0x11AA], NFKC: [0xBE9B], NFKD: [0x1108, 0x1163, 0x11AA] }, +{ source: [0xBE9C], NFC: [0xBE9C], NFD: [0x1108, 0x1163, 0x11AB], NFKC: [0xBE9C], NFKD: [0x1108, 0x1163, 0x11AB] }, +{ source: [0xBE9D], NFC: [0xBE9D], NFD: [0x1108, 0x1163, 0x11AC], NFKC: [0xBE9D], NFKD: [0x1108, 0x1163, 0x11AC] }, +{ source: [0xBE9E], NFC: [0xBE9E], NFD: [0x1108, 0x1163, 0x11AD], NFKC: [0xBE9E], NFKD: [0x1108, 0x1163, 0x11AD] }, +{ source: [0xBE9F], NFC: [0xBE9F], NFD: [0x1108, 0x1163, 0x11AE], NFKC: [0xBE9F], NFKD: [0x1108, 0x1163, 0x11AE] }, +{ source: [0xBEA0], NFC: [0xBEA0], NFD: [0x1108, 0x1163, 0x11AF], NFKC: [0xBEA0], NFKD: [0x1108, 0x1163, 0x11AF] }, +{ source: [0xBEA1], NFC: [0xBEA1], NFD: [0x1108, 0x1163, 0x11B0], NFKC: [0xBEA1], NFKD: [0x1108, 0x1163, 0x11B0] }, +{ source: [0xBEA2], NFC: [0xBEA2], NFD: [0x1108, 0x1163, 0x11B1], NFKC: [0xBEA2], NFKD: [0x1108, 0x1163, 0x11B1] }, +{ source: [0xBEA3], NFC: [0xBEA3], NFD: [0x1108, 0x1163, 0x11B2], NFKC: [0xBEA3], NFKD: [0x1108, 0x1163, 0x11B2] }, +{ source: [0xBEA4], NFC: [0xBEA4], NFD: [0x1108, 0x1163, 0x11B3], NFKC: [0xBEA4], NFKD: [0x1108, 0x1163, 0x11B3] }, +{ source: [0xBEA5], NFC: [0xBEA5], NFD: [0x1108, 0x1163, 0x11B4], NFKC: [0xBEA5], NFKD: [0x1108, 0x1163, 0x11B4] }, +{ source: [0xBEA6], NFC: [0xBEA6], NFD: [0x1108, 0x1163, 0x11B5], NFKC: [0xBEA6], NFKD: [0x1108, 0x1163, 0x11B5] }, +{ source: [0xBEA7], NFC: [0xBEA7], NFD: [0x1108, 0x1163, 0x11B6], NFKC: [0xBEA7], NFKD: [0x1108, 0x1163, 0x11B6] }, +{ source: [0xBEA8], NFC: [0xBEA8], NFD: [0x1108, 0x1163, 0x11B7], NFKC: [0xBEA8], NFKD: [0x1108, 0x1163, 0x11B7] }, +{ source: [0xBEA9], NFC: [0xBEA9], NFD: [0x1108, 0x1163, 0x11B8], NFKC: [0xBEA9], NFKD: [0x1108, 0x1163, 0x11B8] }, +{ source: [0xBEAA], NFC: [0xBEAA], NFD: [0x1108, 0x1163, 0x11B9], NFKC: [0xBEAA], NFKD: [0x1108, 0x1163, 0x11B9] }, +{ source: [0xBEAB], NFC: [0xBEAB], NFD: [0x1108, 0x1163, 0x11BA], NFKC: [0xBEAB], NFKD: [0x1108, 0x1163, 0x11BA] }, +{ source: [0xBEAC], NFC: [0xBEAC], NFD: [0x1108, 0x1163, 0x11BB], NFKC: [0xBEAC], NFKD: [0x1108, 0x1163, 0x11BB] }, +{ source: [0xBEAD], NFC: [0xBEAD], NFD: [0x1108, 0x1163, 0x11BC], NFKC: [0xBEAD], NFKD: [0x1108, 0x1163, 0x11BC] }, +{ source: [0xBEAE], NFC: [0xBEAE], NFD: [0x1108, 0x1163, 0x11BD], NFKC: [0xBEAE], NFKD: [0x1108, 0x1163, 0x11BD] }, +{ source: [0xBEAF], NFC: [0xBEAF], NFD: [0x1108, 0x1163, 0x11BE], NFKC: [0xBEAF], NFKD: [0x1108, 0x1163, 0x11BE] }, +{ source: [0xBEB0], NFC: [0xBEB0], NFD: [0x1108, 0x1163, 0x11BF], NFKC: [0xBEB0], NFKD: [0x1108, 0x1163, 0x11BF] }, +{ source: [0xBEB1], NFC: [0xBEB1], NFD: [0x1108, 0x1163, 0x11C0], NFKC: [0xBEB1], NFKD: [0x1108, 0x1163, 0x11C0] }, +{ source: [0xBEB2], NFC: [0xBEB2], NFD: [0x1108, 0x1163, 0x11C1], NFKC: [0xBEB2], NFKD: [0x1108, 0x1163, 0x11C1] }, +{ source: [0xBEB3], NFC: [0xBEB3], NFD: [0x1108, 0x1163, 0x11C2], NFKC: [0xBEB3], NFKD: [0x1108, 0x1163, 0x11C2] }, +{ source: [0xBEB4], NFC: [0xBEB4], NFD: [0x1108, 0x1164], NFKC: [0xBEB4], NFKD: [0x1108, 0x1164] }, +{ source: [0xBEB5], NFC: [0xBEB5], NFD: [0x1108, 0x1164, 0x11A8], NFKC: [0xBEB5], NFKD: [0x1108, 0x1164, 0x11A8] }, +{ source: [0xBEB6], NFC: [0xBEB6], NFD: [0x1108, 0x1164, 0x11A9], NFKC: [0xBEB6], NFKD: [0x1108, 0x1164, 0x11A9] }, +{ source: [0xBEB7], NFC: [0xBEB7], NFD: [0x1108, 0x1164, 0x11AA], NFKC: [0xBEB7], NFKD: [0x1108, 0x1164, 0x11AA] }, +{ source: [0xBEB8], NFC: [0xBEB8], NFD: [0x1108, 0x1164, 0x11AB], NFKC: [0xBEB8], NFKD: [0x1108, 0x1164, 0x11AB] }, +{ source: [0xBEB9], NFC: [0xBEB9], NFD: [0x1108, 0x1164, 0x11AC], NFKC: [0xBEB9], NFKD: [0x1108, 0x1164, 0x11AC] }, +{ source: [0xBEBA], NFC: [0xBEBA], NFD: [0x1108, 0x1164, 0x11AD], NFKC: [0xBEBA], NFKD: [0x1108, 0x1164, 0x11AD] }, +{ source: [0xBEBB], NFC: [0xBEBB], NFD: [0x1108, 0x1164, 0x11AE], NFKC: [0xBEBB], NFKD: [0x1108, 0x1164, 0x11AE] }, +{ source: [0xBEBC], NFC: [0xBEBC], NFD: [0x1108, 0x1164, 0x11AF], NFKC: [0xBEBC], NFKD: [0x1108, 0x1164, 0x11AF] }, +{ source: [0xBEBD], NFC: [0xBEBD], NFD: [0x1108, 0x1164, 0x11B0], NFKC: [0xBEBD], NFKD: [0x1108, 0x1164, 0x11B0] }, +{ source: [0xBEBE], NFC: [0xBEBE], NFD: [0x1108, 0x1164, 0x11B1], NFKC: [0xBEBE], NFKD: [0x1108, 0x1164, 0x11B1] }, +{ source: [0xBEBF], NFC: [0xBEBF], NFD: [0x1108, 0x1164, 0x11B2], NFKC: [0xBEBF], NFKD: [0x1108, 0x1164, 0x11B2] }, +{ source: [0xBEC0], NFC: [0xBEC0], NFD: [0x1108, 0x1164, 0x11B3], NFKC: [0xBEC0], NFKD: [0x1108, 0x1164, 0x11B3] }, +{ source: [0xBEC1], NFC: [0xBEC1], NFD: [0x1108, 0x1164, 0x11B4], NFKC: [0xBEC1], NFKD: [0x1108, 0x1164, 0x11B4] }, +{ source: [0xBEC2], NFC: [0xBEC2], NFD: [0x1108, 0x1164, 0x11B5], NFKC: [0xBEC2], NFKD: [0x1108, 0x1164, 0x11B5] }, +{ source: [0xBEC3], NFC: [0xBEC3], NFD: [0x1108, 0x1164, 0x11B6], NFKC: [0xBEC3], NFKD: [0x1108, 0x1164, 0x11B6] }, +{ source: [0xBEC4], NFC: [0xBEC4], NFD: [0x1108, 0x1164, 0x11B7], NFKC: [0xBEC4], NFKD: [0x1108, 0x1164, 0x11B7] }, +{ source: [0xBEC5], NFC: [0xBEC5], NFD: [0x1108, 0x1164, 0x11B8], NFKC: [0xBEC5], NFKD: [0x1108, 0x1164, 0x11B8] }, +{ source: [0xBEC6], NFC: [0xBEC6], NFD: [0x1108, 0x1164, 0x11B9], NFKC: [0xBEC6], NFKD: [0x1108, 0x1164, 0x11B9] }, +{ source: [0xBEC7], NFC: [0xBEC7], NFD: [0x1108, 0x1164, 0x11BA], NFKC: [0xBEC7], NFKD: [0x1108, 0x1164, 0x11BA] }, +{ source: [0xBEC8], NFC: [0xBEC8], NFD: [0x1108, 0x1164, 0x11BB], NFKC: [0xBEC8], NFKD: [0x1108, 0x1164, 0x11BB] }, +{ source: [0xBEC9], NFC: [0xBEC9], NFD: [0x1108, 0x1164, 0x11BC], NFKC: [0xBEC9], NFKD: [0x1108, 0x1164, 0x11BC] }, +{ source: [0xBECA], NFC: [0xBECA], NFD: [0x1108, 0x1164, 0x11BD], NFKC: [0xBECA], NFKD: [0x1108, 0x1164, 0x11BD] }, +{ source: [0xBECB], NFC: [0xBECB], NFD: [0x1108, 0x1164, 0x11BE], NFKC: [0xBECB], NFKD: [0x1108, 0x1164, 0x11BE] }, +{ source: [0xBECC], NFC: [0xBECC], NFD: [0x1108, 0x1164, 0x11BF], NFKC: [0xBECC], NFKD: [0x1108, 0x1164, 0x11BF] }, +{ source: [0xBECD], NFC: [0xBECD], NFD: [0x1108, 0x1164, 0x11C0], NFKC: [0xBECD], NFKD: [0x1108, 0x1164, 0x11C0] }, +{ source: [0xBECE], NFC: [0xBECE], NFD: [0x1108, 0x1164, 0x11C1], NFKC: [0xBECE], NFKD: [0x1108, 0x1164, 0x11C1] }, +{ source: [0xBECF], NFC: [0xBECF], NFD: [0x1108, 0x1164, 0x11C2], NFKC: [0xBECF], NFKD: [0x1108, 0x1164, 0x11C2] }, +{ source: [0xBED0], NFC: [0xBED0], NFD: [0x1108, 0x1165], NFKC: [0xBED0], NFKD: [0x1108, 0x1165] }, +{ source: [0xBED1], NFC: [0xBED1], NFD: [0x1108, 0x1165, 0x11A8], NFKC: [0xBED1], NFKD: [0x1108, 0x1165, 0x11A8] }, +{ source: [0xBED2], NFC: [0xBED2], NFD: [0x1108, 0x1165, 0x11A9], NFKC: [0xBED2], NFKD: [0x1108, 0x1165, 0x11A9] }, +{ source: [0xBED3], NFC: [0xBED3], NFD: [0x1108, 0x1165, 0x11AA], NFKC: [0xBED3], NFKD: [0x1108, 0x1165, 0x11AA] }, +{ source: [0xBED4], NFC: [0xBED4], NFD: [0x1108, 0x1165, 0x11AB], NFKC: [0xBED4], NFKD: [0x1108, 0x1165, 0x11AB] }, +{ source: [0xBED5], NFC: [0xBED5], NFD: [0x1108, 0x1165, 0x11AC], NFKC: [0xBED5], NFKD: [0x1108, 0x1165, 0x11AC] }, +{ source: [0xBED6], NFC: [0xBED6], NFD: [0x1108, 0x1165, 0x11AD], NFKC: [0xBED6], NFKD: [0x1108, 0x1165, 0x11AD] }, +{ source: [0xBED7], NFC: [0xBED7], NFD: [0x1108, 0x1165, 0x11AE], NFKC: [0xBED7], NFKD: [0x1108, 0x1165, 0x11AE] }, +{ source: [0xBED8], NFC: [0xBED8], NFD: [0x1108, 0x1165, 0x11AF], NFKC: [0xBED8], NFKD: [0x1108, 0x1165, 0x11AF] }, +{ source: [0xBED9], NFC: [0xBED9], NFD: [0x1108, 0x1165, 0x11B0], NFKC: [0xBED9], NFKD: [0x1108, 0x1165, 0x11B0] }, +{ source: [0xBEDA], NFC: [0xBEDA], NFD: [0x1108, 0x1165, 0x11B1], NFKC: [0xBEDA], NFKD: [0x1108, 0x1165, 0x11B1] }, +{ source: [0xBEDB], NFC: [0xBEDB], NFD: [0x1108, 0x1165, 0x11B2], NFKC: [0xBEDB], NFKD: [0x1108, 0x1165, 0x11B2] }, +{ source: [0xBEDC], NFC: [0xBEDC], NFD: [0x1108, 0x1165, 0x11B3], NFKC: [0xBEDC], NFKD: [0x1108, 0x1165, 0x11B3] }, +{ source: [0xBEDD], NFC: [0xBEDD], NFD: [0x1108, 0x1165, 0x11B4], NFKC: [0xBEDD], NFKD: [0x1108, 0x1165, 0x11B4] }, +{ source: [0xBEDE], NFC: [0xBEDE], NFD: [0x1108, 0x1165, 0x11B5], NFKC: [0xBEDE], NFKD: [0x1108, 0x1165, 0x11B5] }, +{ source: [0xBEDF], NFC: [0xBEDF], NFD: [0x1108, 0x1165, 0x11B6], NFKC: [0xBEDF], NFKD: [0x1108, 0x1165, 0x11B6] }, +{ source: [0xBEE0], NFC: [0xBEE0], NFD: [0x1108, 0x1165, 0x11B7], NFKC: [0xBEE0], NFKD: [0x1108, 0x1165, 0x11B7] }, +{ source: [0xBEE1], NFC: [0xBEE1], NFD: [0x1108, 0x1165, 0x11B8], NFKC: [0xBEE1], NFKD: [0x1108, 0x1165, 0x11B8] }, +{ source: [0xBEE2], NFC: [0xBEE2], NFD: [0x1108, 0x1165, 0x11B9], NFKC: [0xBEE2], NFKD: [0x1108, 0x1165, 0x11B9] }, +{ source: [0xBEE3], NFC: [0xBEE3], NFD: [0x1108, 0x1165, 0x11BA], NFKC: [0xBEE3], NFKD: [0x1108, 0x1165, 0x11BA] }, +{ source: [0xBEE4], NFC: [0xBEE4], NFD: [0x1108, 0x1165, 0x11BB], NFKC: [0xBEE4], NFKD: [0x1108, 0x1165, 0x11BB] }, +{ source: [0xBEE5], NFC: [0xBEE5], NFD: [0x1108, 0x1165, 0x11BC], NFKC: [0xBEE5], NFKD: [0x1108, 0x1165, 0x11BC] }, +{ source: [0xBEE6], NFC: [0xBEE6], NFD: [0x1108, 0x1165, 0x11BD], NFKC: [0xBEE6], NFKD: [0x1108, 0x1165, 0x11BD] }, +{ source: [0xBEE7], NFC: [0xBEE7], NFD: [0x1108, 0x1165, 0x11BE], NFKC: [0xBEE7], NFKD: [0x1108, 0x1165, 0x11BE] }, +{ source: [0xBEE8], NFC: [0xBEE8], NFD: [0x1108, 0x1165, 0x11BF], NFKC: [0xBEE8], NFKD: [0x1108, 0x1165, 0x11BF] }, +{ source: [0xBEE9], NFC: [0xBEE9], NFD: [0x1108, 0x1165, 0x11C0], NFKC: [0xBEE9], NFKD: [0x1108, 0x1165, 0x11C0] }, +{ source: [0xBEEA], NFC: [0xBEEA], NFD: [0x1108, 0x1165, 0x11C1], NFKC: [0xBEEA], NFKD: [0x1108, 0x1165, 0x11C1] }, +{ source: [0xBEEB], NFC: [0xBEEB], NFD: [0x1108, 0x1165, 0x11C2], NFKC: [0xBEEB], NFKD: [0x1108, 0x1165, 0x11C2] }, +{ source: [0xBEEC], NFC: [0xBEEC], NFD: [0x1108, 0x1166], NFKC: [0xBEEC], NFKD: [0x1108, 0x1166] }, +{ source: [0xBEED], NFC: [0xBEED], NFD: [0x1108, 0x1166, 0x11A8], NFKC: [0xBEED], NFKD: [0x1108, 0x1166, 0x11A8] }, +{ source: [0xBEEE], NFC: [0xBEEE], NFD: [0x1108, 0x1166, 0x11A9], NFKC: [0xBEEE], NFKD: [0x1108, 0x1166, 0x11A9] }, +{ source: [0xBEEF], NFC: [0xBEEF], NFD: [0x1108, 0x1166, 0x11AA], NFKC: [0xBEEF], NFKD: [0x1108, 0x1166, 0x11AA] }, +{ source: [0xBEF0], NFC: [0xBEF0], NFD: [0x1108, 0x1166, 0x11AB], NFKC: [0xBEF0], NFKD: [0x1108, 0x1166, 0x11AB] }, +{ source: [0xBEF1], NFC: [0xBEF1], NFD: [0x1108, 0x1166, 0x11AC], NFKC: [0xBEF1], NFKD: [0x1108, 0x1166, 0x11AC] }, +{ source: [0xBEF2], NFC: [0xBEF2], NFD: [0x1108, 0x1166, 0x11AD], NFKC: [0xBEF2], NFKD: [0x1108, 0x1166, 0x11AD] }, +{ source: [0xBEF3], NFC: [0xBEF3], NFD: [0x1108, 0x1166, 0x11AE], NFKC: [0xBEF3], NFKD: [0x1108, 0x1166, 0x11AE] }, +{ source: [0xBEF4], NFC: [0xBEF4], NFD: [0x1108, 0x1166, 0x11AF], NFKC: [0xBEF4], NFKD: [0x1108, 0x1166, 0x11AF] }, +{ source: [0xBEF5], NFC: [0xBEF5], NFD: [0x1108, 0x1166, 0x11B0], NFKC: [0xBEF5], NFKD: [0x1108, 0x1166, 0x11B0] }, +{ source: [0xBEF6], NFC: [0xBEF6], NFD: [0x1108, 0x1166, 0x11B1], NFKC: [0xBEF6], NFKD: [0x1108, 0x1166, 0x11B1] }, +{ source: [0xBEF7], NFC: [0xBEF7], NFD: [0x1108, 0x1166, 0x11B2], NFKC: [0xBEF7], NFKD: [0x1108, 0x1166, 0x11B2] }, +{ source: [0xBEF8], NFC: [0xBEF8], NFD: [0x1108, 0x1166, 0x11B3], NFKC: [0xBEF8], NFKD: [0x1108, 0x1166, 0x11B3] }, +{ source: [0xBEF9], NFC: [0xBEF9], NFD: [0x1108, 0x1166, 0x11B4], NFKC: [0xBEF9], NFKD: [0x1108, 0x1166, 0x11B4] }, +{ source: [0xBEFA], NFC: [0xBEFA], NFD: [0x1108, 0x1166, 0x11B5], NFKC: [0xBEFA], NFKD: [0x1108, 0x1166, 0x11B5] }, +{ source: [0xBEFB], NFC: [0xBEFB], NFD: [0x1108, 0x1166, 0x11B6], NFKC: [0xBEFB], NFKD: [0x1108, 0x1166, 0x11B6] }, +{ source: [0xBEFC], NFC: [0xBEFC], NFD: [0x1108, 0x1166, 0x11B7], NFKC: [0xBEFC], NFKD: [0x1108, 0x1166, 0x11B7] }, +{ source: [0xBEFD], NFC: [0xBEFD], NFD: [0x1108, 0x1166, 0x11B8], NFKC: [0xBEFD], NFKD: [0x1108, 0x1166, 0x11B8] }, +{ source: [0xBEFE], NFC: [0xBEFE], NFD: [0x1108, 0x1166, 0x11B9], NFKC: [0xBEFE], NFKD: [0x1108, 0x1166, 0x11B9] }, +{ source: [0xBEFF], NFC: [0xBEFF], NFD: [0x1108, 0x1166, 0x11BA], NFKC: [0xBEFF], NFKD: [0x1108, 0x1166, 0x11BA] }, +{ source: [0xBF00], NFC: [0xBF00], NFD: [0x1108, 0x1166, 0x11BB], NFKC: [0xBF00], NFKD: [0x1108, 0x1166, 0x11BB] }, +{ source: [0xBF01], NFC: [0xBF01], NFD: [0x1108, 0x1166, 0x11BC], NFKC: [0xBF01], NFKD: [0x1108, 0x1166, 0x11BC] }, +{ source: [0xBF02], NFC: [0xBF02], NFD: [0x1108, 0x1166, 0x11BD], NFKC: [0xBF02], NFKD: [0x1108, 0x1166, 0x11BD] }, +{ source: [0xBF03], NFC: [0xBF03], NFD: [0x1108, 0x1166, 0x11BE], NFKC: [0xBF03], NFKD: [0x1108, 0x1166, 0x11BE] }, +{ source: [0xBF04], NFC: [0xBF04], NFD: [0x1108, 0x1166, 0x11BF], NFKC: [0xBF04], NFKD: [0x1108, 0x1166, 0x11BF] }, +{ source: [0xBF05], NFC: [0xBF05], NFD: [0x1108, 0x1166, 0x11C0], NFKC: [0xBF05], NFKD: [0x1108, 0x1166, 0x11C0] }, +{ source: [0xBF06], NFC: [0xBF06], NFD: [0x1108, 0x1166, 0x11C1], NFKC: [0xBF06], NFKD: [0x1108, 0x1166, 0x11C1] }, +{ source: [0xBF07], NFC: [0xBF07], NFD: [0x1108, 0x1166, 0x11C2], NFKC: [0xBF07], NFKD: [0x1108, 0x1166, 0x11C2] }, +{ source: [0xBF08], NFC: [0xBF08], NFD: [0x1108, 0x1167], NFKC: [0xBF08], NFKD: [0x1108, 0x1167] }, +{ source: [0xBF09], NFC: [0xBF09], NFD: [0x1108, 0x1167, 0x11A8], NFKC: [0xBF09], NFKD: [0x1108, 0x1167, 0x11A8] }, +{ source: [0xBF0A], NFC: [0xBF0A], NFD: [0x1108, 0x1167, 0x11A9], NFKC: [0xBF0A], NFKD: [0x1108, 0x1167, 0x11A9] }, +{ source: [0xBF0B], NFC: [0xBF0B], NFD: [0x1108, 0x1167, 0x11AA], NFKC: [0xBF0B], NFKD: [0x1108, 0x1167, 0x11AA] }, +{ source: [0xBF0C], NFC: [0xBF0C], NFD: [0x1108, 0x1167, 0x11AB], NFKC: [0xBF0C], NFKD: [0x1108, 0x1167, 0x11AB] }, +{ source: [0xBF0D], NFC: [0xBF0D], NFD: [0x1108, 0x1167, 0x11AC], NFKC: [0xBF0D], NFKD: [0x1108, 0x1167, 0x11AC] }, +{ source: [0xBF0E], NFC: [0xBF0E], NFD: [0x1108, 0x1167, 0x11AD], NFKC: [0xBF0E], NFKD: [0x1108, 0x1167, 0x11AD] }, +{ source: [0xBF0F], NFC: [0xBF0F], NFD: [0x1108, 0x1167, 0x11AE], NFKC: [0xBF0F], NFKD: [0x1108, 0x1167, 0x11AE] }, +{ source: [0xBF10], NFC: [0xBF10], NFD: [0x1108, 0x1167, 0x11AF], NFKC: [0xBF10], NFKD: [0x1108, 0x1167, 0x11AF] }, +{ source: [0xBF11], NFC: [0xBF11], NFD: [0x1108, 0x1167, 0x11B0], NFKC: [0xBF11], NFKD: [0x1108, 0x1167, 0x11B0] }, +{ source: [0xBF12], NFC: [0xBF12], NFD: [0x1108, 0x1167, 0x11B1], NFKC: [0xBF12], NFKD: [0x1108, 0x1167, 0x11B1] }, +{ source: [0xBF13], NFC: [0xBF13], NFD: [0x1108, 0x1167, 0x11B2], NFKC: [0xBF13], NFKD: [0x1108, 0x1167, 0x11B2] }, +{ source: [0xBF14], NFC: [0xBF14], NFD: [0x1108, 0x1167, 0x11B3], NFKC: [0xBF14], NFKD: [0x1108, 0x1167, 0x11B3] }, +{ source: [0xBF15], NFC: [0xBF15], NFD: [0x1108, 0x1167, 0x11B4], NFKC: [0xBF15], NFKD: [0x1108, 0x1167, 0x11B4] }, +{ source: [0xBF16], NFC: [0xBF16], NFD: [0x1108, 0x1167, 0x11B5], NFKC: [0xBF16], NFKD: [0x1108, 0x1167, 0x11B5] }, +{ source: [0xBF17], NFC: [0xBF17], NFD: [0x1108, 0x1167, 0x11B6], NFKC: [0xBF17], NFKD: [0x1108, 0x1167, 0x11B6] }, +{ source: [0xBF18], NFC: [0xBF18], NFD: [0x1108, 0x1167, 0x11B7], NFKC: [0xBF18], NFKD: [0x1108, 0x1167, 0x11B7] }, +{ source: [0xBF19], NFC: [0xBF19], NFD: [0x1108, 0x1167, 0x11B8], NFKC: [0xBF19], NFKD: [0x1108, 0x1167, 0x11B8] }, +{ source: [0xBF1A], NFC: [0xBF1A], NFD: [0x1108, 0x1167, 0x11B9], NFKC: [0xBF1A], NFKD: [0x1108, 0x1167, 0x11B9] }, +{ source: [0xBF1B], NFC: [0xBF1B], NFD: [0x1108, 0x1167, 0x11BA], NFKC: [0xBF1B], NFKD: [0x1108, 0x1167, 0x11BA] }, +{ source: [0xBF1C], NFC: [0xBF1C], NFD: [0x1108, 0x1167, 0x11BB], NFKC: [0xBF1C], NFKD: [0x1108, 0x1167, 0x11BB] }, +{ source: [0xBF1D], NFC: [0xBF1D], NFD: [0x1108, 0x1167, 0x11BC], NFKC: [0xBF1D], NFKD: [0x1108, 0x1167, 0x11BC] }, +{ source: [0xBF1E], NFC: [0xBF1E], NFD: [0x1108, 0x1167, 0x11BD], NFKC: [0xBF1E], NFKD: [0x1108, 0x1167, 0x11BD] }, +{ source: [0xBF1F], NFC: [0xBF1F], NFD: [0x1108, 0x1167, 0x11BE], NFKC: [0xBF1F], NFKD: [0x1108, 0x1167, 0x11BE] }, +{ source: [0xBF20], NFC: [0xBF20], NFD: [0x1108, 0x1167, 0x11BF], NFKC: [0xBF20], NFKD: [0x1108, 0x1167, 0x11BF] }, +{ source: [0xBF21], NFC: [0xBF21], NFD: [0x1108, 0x1167, 0x11C0], NFKC: [0xBF21], NFKD: [0x1108, 0x1167, 0x11C0] }, +{ source: [0xBF22], NFC: [0xBF22], NFD: [0x1108, 0x1167, 0x11C1], NFKC: [0xBF22], NFKD: [0x1108, 0x1167, 0x11C1] }, +{ source: [0xBF23], NFC: [0xBF23], NFD: [0x1108, 0x1167, 0x11C2], NFKC: [0xBF23], NFKD: [0x1108, 0x1167, 0x11C2] }, +{ source: [0xBF24], NFC: [0xBF24], NFD: [0x1108, 0x1168], NFKC: [0xBF24], NFKD: [0x1108, 0x1168] }, +{ source: [0xBF25], NFC: [0xBF25], NFD: [0x1108, 0x1168, 0x11A8], NFKC: [0xBF25], NFKD: [0x1108, 0x1168, 0x11A8] }, +{ source: [0xBF26], NFC: [0xBF26], NFD: [0x1108, 0x1168, 0x11A9], NFKC: [0xBF26], NFKD: [0x1108, 0x1168, 0x11A9] }, +{ source: [0xBF27], NFC: [0xBF27], NFD: [0x1108, 0x1168, 0x11AA], NFKC: [0xBF27], NFKD: [0x1108, 0x1168, 0x11AA] }, +{ source: [0xBF28], NFC: [0xBF28], NFD: [0x1108, 0x1168, 0x11AB], NFKC: [0xBF28], NFKD: [0x1108, 0x1168, 0x11AB] }, +{ source: [0xBF29], NFC: [0xBF29], NFD: [0x1108, 0x1168, 0x11AC], NFKC: [0xBF29], NFKD: [0x1108, 0x1168, 0x11AC] }, +{ source: [0xBF2A], NFC: [0xBF2A], NFD: [0x1108, 0x1168, 0x11AD], NFKC: [0xBF2A], NFKD: [0x1108, 0x1168, 0x11AD] }, +{ source: [0xBF2B], NFC: [0xBF2B], NFD: [0x1108, 0x1168, 0x11AE], NFKC: [0xBF2B], NFKD: [0x1108, 0x1168, 0x11AE] }, +{ source: [0xBF2C], NFC: [0xBF2C], NFD: [0x1108, 0x1168, 0x11AF], NFKC: [0xBF2C], NFKD: [0x1108, 0x1168, 0x11AF] }, +{ source: [0xBF2D], NFC: [0xBF2D], NFD: [0x1108, 0x1168, 0x11B0], NFKC: [0xBF2D], NFKD: [0x1108, 0x1168, 0x11B0] }, +{ source: [0xBF2E], NFC: [0xBF2E], NFD: [0x1108, 0x1168, 0x11B1], NFKC: [0xBF2E], NFKD: [0x1108, 0x1168, 0x11B1] }, +{ source: [0xBF2F], NFC: [0xBF2F], NFD: [0x1108, 0x1168, 0x11B2], NFKC: [0xBF2F], NFKD: [0x1108, 0x1168, 0x11B2] }, +{ source: [0xBF30], NFC: [0xBF30], NFD: [0x1108, 0x1168, 0x11B3], NFKC: [0xBF30], NFKD: [0x1108, 0x1168, 0x11B3] }, +{ source: [0xBF31], NFC: [0xBF31], NFD: [0x1108, 0x1168, 0x11B4], NFKC: [0xBF31], NFKD: [0x1108, 0x1168, 0x11B4] }, +{ source: [0xBF32], NFC: [0xBF32], NFD: [0x1108, 0x1168, 0x11B5], NFKC: [0xBF32], NFKD: [0x1108, 0x1168, 0x11B5] }, +{ source: [0xBF33], NFC: [0xBF33], NFD: [0x1108, 0x1168, 0x11B6], NFKC: [0xBF33], NFKD: [0x1108, 0x1168, 0x11B6] }, +{ source: [0xBF34], NFC: [0xBF34], NFD: [0x1108, 0x1168, 0x11B7], NFKC: [0xBF34], NFKD: [0x1108, 0x1168, 0x11B7] }, +{ source: [0xBF35], NFC: [0xBF35], NFD: [0x1108, 0x1168, 0x11B8], NFKC: [0xBF35], NFKD: [0x1108, 0x1168, 0x11B8] }, +{ source: [0xBF36], NFC: [0xBF36], NFD: [0x1108, 0x1168, 0x11B9], NFKC: [0xBF36], NFKD: [0x1108, 0x1168, 0x11B9] }, +{ source: [0xBF37], NFC: [0xBF37], NFD: [0x1108, 0x1168, 0x11BA], NFKC: [0xBF37], NFKD: [0x1108, 0x1168, 0x11BA] }, +{ source: [0xBF38], NFC: [0xBF38], NFD: [0x1108, 0x1168, 0x11BB], NFKC: [0xBF38], NFKD: [0x1108, 0x1168, 0x11BB] }, +{ source: [0xBF39], NFC: [0xBF39], NFD: [0x1108, 0x1168, 0x11BC], NFKC: [0xBF39], NFKD: [0x1108, 0x1168, 0x11BC] }, +{ source: [0xBF3A], NFC: [0xBF3A], NFD: [0x1108, 0x1168, 0x11BD], NFKC: [0xBF3A], NFKD: [0x1108, 0x1168, 0x11BD] }, +{ source: [0xBF3B], NFC: [0xBF3B], NFD: [0x1108, 0x1168, 0x11BE], NFKC: [0xBF3B], NFKD: [0x1108, 0x1168, 0x11BE] }, +{ source: [0xBF3C], NFC: [0xBF3C], NFD: [0x1108, 0x1168, 0x11BF], NFKC: [0xBF3C], NFKD: [0x1108, 0x1168, 0x11BF] }, +{ source: [0xBF3D], NFC: [0xBF3D], NFD: [0x1108, 0x1168, 0x11C0], NFKC: [0xBF3D], NFKD: [0x1108, 0x1168, 0x11C0] }, +{ source: [0xBF3E], NFC: [0xBF3E], NFD: [0x1108, 0x1168, 0x11C1], NFKC: [0xBF3E], NFKD: [0x1108, 0x1168, 0x11C1] }, +{ source: [0xBF3F], NFC: [0xBF3F], NFD: [0x1108, 0x1168, 0x11C2], NFKC: [0xBF3F], NFKD: [0x1108, 0x1168, 0x11C2] }, +{ source: [0xBF40], NFC: [0xBF40], NFD: [0x1108, 0x1169], NFKC: [0xBF40], NFKD: [0x1108, 0x1169] }, +{ source: [0xBF41], NFC: [0xBF41], NFD: [0x1108, 0x1169, 0x11A8], NFKC: [0xBF41], NFKD: [0x1108, 0x1169, 0x11A8] }, +{ source: [0xBF42], NFC: [0xBF42], NFD: [0x1108, 0x1169, 0x11A9], NFKC: [0xBF42], NFKD: [0x1108, 0x1169, 0x11A9] }, +{ source: [0xBF43], NFC: [0xBF43], NFD: [0x1108, 0x1169, 0x11AA], NFKC: [0xBF43], NFKD: [0x1108, 0x1169, 0x11AA] }, +{ source: [0xBF44], NFC: [0xBF44], NFD: [0x1108, 0x1169, 0x11AB], NFKC: [0xBF44], NFKD: [0x1108, 0x1169, 0x11AB] }, +{ source: [0xBF45], NFC: [0xBF45], NFD: [0x1108, 0x1169, 0x11AC], NFKC: [0xBF45], NFKD: [0x1108, 0x1169, 0x11AC] }, +{ source: [0xBF46], NFC: [0xBF46], NFD: [0x1108, 0x1169, 0x11AD], NFKC: [0xBF46], NFKD: [0x1108, 0x1169, 0x11AD] }, +{ source: [0xBF47], NFC: [0xBF47], NFD: [0x1108, 0x1169, 0x11AE], NFKC: [0xBF47], NFKD: [0x1108, 0x1169, 0x11AE] }, +{ source: [0xBF48], NFC: [0xBF48], NFD: [0x1108, 0x1169, 0x11AF], NFKC: [0xBF48], NFKD: [0x1108, 0x1169, 0x11AF] }, +{ source: [0xBF49], NFC: [0xBF49], NFD: [0x1108, 0x1169, 0x11B0], NFKC: [0xBF49], NFKD: [0x1108, 0x1169, 0x11B0] }, +{ source: [0xBF4A], NFC: [0xBF4A], NFD: [0x1108, 0x1169, 0x11B1], NFKC: [0xBF4A], NFKD: [0x1108, 0x1169, 0x11B1] }, +{ source: [0xBF4B], NFC: [0xBF4B], NFD: [0x1108, 0x1169, 0x11B2], NFKC: [0xBF4B], NFKD: [0x1108, 0x1169, 0x11B2] }, +{ source: [0xBF4C], NFC: [0xBF4C], NFD: [0x1108, 0x1169, 0x11B3], NFKC: [0xBF4C], NFKD: [0x1108, 0x1169, 0x11B3] }, +{ source: [0xBF4D], NFC: [0xBF4D], NFD: [0x1108, 0x1169, 0x11B4], NFKC: [0xBF4D], NFKD: [0x1108, 0x1169, 0x11B4] }, +{ source: [0xBF4E], NFC: [0xBF4E], NFD: [0x1108, 0x1169, 0x11B5], NFKC: [0xBF4E], NFKD: [0x1108, 0x1169, 0x11B5] }, +{ source: [0xBF4F], NFC: [0xBF4F], NFD: [0x1108, 0x1169, 0x11B6], NFKC: [0xBF4F], NFKD: [0x1108, 0x1169, 0x11B6] }, +{ source: [0xBF50], NFC: [0xBF50], NFD: [0x1108, 0x1169, 0x11B7], NFKC: [0xBF50], NFKD: [0x1108, 0x1169, 0x11B7] }, +{ source: [0xBF51], NFC: [0xBF51], NFD: [0x1108, 0x1169, 0x11B8], NFKC: [0xBF51], NFKD: [0x1108, 0x1169, 0x11B8] }, +{ source: [0xBF52], NFC: [0xBF52], NFD: [0x1108, 0x1169, 0x11B9], NFKC: [0xBF52], NFKD: [0x1108, 0x1169, 0x11B9] }, +{ source: [0xBF53], NFC: [0xBF53], NFD: [0x1108, 0x1169, 0x11BA], NFKC: [0xBF53], NFKD: [0x1108, 0x1169, 0x11BA] }, +{ source: [0xBF54], NFC: [0xBF54], NFD: [0x1108, 0x1169, 0x11BB], NFKC: [0xBF54], NFKD: [0x1108, 0x1169, 0x11BB] }, +{ source: [0xBF55], NFC: [0xBF55], NFD: [0x1108, 0x1169, 0x11BC], NFKC: [0xBF55], NFKD: [0x1108, 0x1169, 0x11BC] }, +{ source: [0xBF56], NFC: [0xBF56], NFD: [0x1108, 0x1169, 0x11BD], NFKC: [0xBF56], NFKD: [0x1108, 0x1169, 0x11BD] }, +{ source: [0xBF57], NFC: [0xBF57], NFD: [0x1108, 0x1169, 0x11BE], NFKC: [0xBF57], NFKD: [0x1108, 0x1169, 0x11BE] }, +{ source: [0xBF58], NFC: [0xBF58], NFD: [0x1108, 0x1169, 0x11BF], NFKC: [0xBF58], NFKD: [0x1108, 0x1169, 0x11BF] }, +{ source: [0xBF59], NFC: [0xBF59], NFD: [0x1108, 0x1169, 0x11C0], NFKC: [0xBF59], NFKD: [0x1108, 0x1169, 0x11C0] }, +{ source: [0xBF5A], NFC: [0xBF5A], NFD: [0x1108, 0x1169, 0x11C1], NFKC: [0xBF5A], NFKD: [0x1108, 0x1169, 0x11C1] }, +{ source: [0xBF5B], NFC: [0xBF5B], NFD: [0x1108, 0x1169, 0x11C2], NFKC: [0xBF5B], NFKD: [0x1108, 0x1169, 0x11C2] }, +{ source: [0xBF5C], NFC: [0xBF5C], NFD: [0x1108, 0x116A], NFKC: [0xBF5C], NFKD: [0x1108, 0x116A] }, +{ source: [0xBF5D], NFC: [0xBF5D], NFD: [0x1108, 0x116A, 0x11A8], NFKC: [0xBF5D], NFKD: [0x1108, 0x116A, 0x11A8] }, +{ source: [0xBF5E], NFC: [0xBF5E], NFD: [0x1108, 0x116A, 0x11A9], NFKC: [0xBF5E], NFKD: [0x1108, 0x116A, 0x11A9] }, +{ source: [0xBF5F], NFC: [0xBF5F], NFD: [0x1108, 0x116A, 0x11AA], NFKC: [0xBF5F], NFKD: [0x1108, 0x116A, 0x11AA] }, +{ source: [0xBF60], NFC: [0xBF60], NFD: [0x1108, 0x116A, 0x11AB], NFKC: [0xBF60], NFKD: [0x1108, 0x116A, 0x11AB] }, +{ source: [0xBF61], NFC: [0xBF61], NFD: [0x1108, 0x116A, 0x11AC], NFKC: [0xBF61], NFKD: [0x1108, 0x116A, 0x11AC] }, +{ source: [0xBF62], NFC: [0xBF62], NFD: [0x1108, 0x116A, 0x11AD], NFKC: [0xBF62], NFKD: [0x1108, 0x116A, 0x11AD] }, +{ source: [0xBF63], NFC: [0xBF63], NFD: [0x1108, 0x116A, 0x11AE], NFKC: [0xBF63], NFKD: [0x1108, 0x116A, 0x11AE] }, +{ source: [0xBF64], NFC: [0xBF64], NFD: [0x1108, 0x116A, 0x11AF], NFKC: [0xBF64], NFKD: [0x1108, 0x116A, 0x11AF] }, +{ source: [0xBF65], NFC: [0xBF65], NFD: [0x1108, 0x116A, 0x11B0], NFKC: [0xBF65], NFKD: [0x1108, 0x116A, 0x11B0] }, +{ source: [0xBF66], NFC: [0xBF66], NFD: [0x1108, 0x116A, 0x11B1], NFKC: [0xBF66], NFKD: [0x1108, 0x116A, 0x11B1] }, +{ source: [0xBF67], NFC: [0xBF67], NFD: [0x1108, 0x116A, 0x11B2], NFKC: [0xBF67], NFKD: [0x1108, 0x116A, 0x11B2] }, +{ source: [0xBF68], NFC: [0xBF68], NFD: [0x1108, 0x116A, 0x11B3], NFKC: [0xBF68], NFKD: [0x1108, 0x116A, 0x11B3] }, +{ source: [0xBF69], NFC: [0xBF69], NFD: [0x1108, 0x116A, 0x11B4], NFKC: [0xBF69], NFKD: [0x1108, 0x116A, 0x11B4] }, +{ source: [0xBF6A], NFC: [0xBF6A], NFD: [0x1108, 0x116A, 0x11B5], NFKC: [0xBF6A], NFKD: [0x1108, 0x116A, 0x11B5] }, +{ source: [0xBF6B], NFC: [0xBF6B], NFD: [0x1108, 0x116A, 0x11B6], NFKC: [0xBF6B], NFKD: [0x1108, 0x116A, 0x11B6] }, +{ source: [0xBF6C], NFC: [0xBF6C], NFD: [0x1108, 0x116A, 0x11B7], NFKC: [0xBF6C], NFKD: [0x1108, 0x116A, 0x11B7] }, +{ source: [0xBF6D], NFC: [0xBF6D], NFD: [0x1108, 0x116A, 0x11B8], NFKC: [0xBF6D], NFKD: [0x1108, 0x116A, 0x11B8] }, +{ source: [0xBF6E], NFC: [0xBF6E], NFD: [0x1108, 0x116A, 0x11B9], NFKC: [0xBF6E], NFKD: [0x1108, 0x116A, 0x11B9] }, +{ source: [0xBF6F], NFC: [0xBF6F], NFD: [0x1108, 0x116A, 0x11BA], NFKC: [0xBF6F], NFKD: [0x1108, 0x116A, 0x11BA] }, +{ source: [0xBF70], NFC: [0xBF70], NFD: [0x1108, 0x116A, 0x11BB], NFKC: [0xBF70], NFKD: [0x1108, 0x116A, 0x11BB] }, +{ source: [0xBF71], NFC: [0xBF71], NFD: [0x1108, 0x116A, 0x11BC], NFKC: [0xBF71], NFKD: [0x1108, 0x116A, 0x11BC] }, +{ source: [0xBF72], NFC: [0xBF72], NFD: [0x1108, 0x116A, 0x11BD], NFKC: [0xBF72], NFKD: [0x1108, 0x116A, 0x11BD] }, +{ source: [0xBF73], NFC: [0xBF73], NFD: [0x1108, 0x116A, 0x11BE], NFKC: [0xBF73], NFKD: [0x1108, 0x116A, 0x11BE] }, +{ source: [0xBF74], NFC: [0xBF74], NFD: [0x1108, 0x116A, 0x11BF], NFKC: [0xBF74], NFKD: [0x1108, 0x116A, 0x11BF] }, +{ source: [0xBF75], NFC: [0xBF75], NFD: [0x1108, 0x116A, 0x11C0], NFKC: [0xBF75], NFKD: [0x1108, 0x116A, 0x11C0] }, +{ source: [0xBF76], NFC: [0xBF76], NFD: [0x1108, 0x116A, 0x11C1], NFKC: [0xBF76], NFKD: [0x1108, 0x116A, 0x11C1] }, +{ source: [0xBF77], NFC: [0xBF77], NFD: [0x1108, 0x116A, 0x11C2], NFKC: [0xBF77], NFKD: [0x1108, 0x116A, 0x11C2] }, +{ source: [0xBF78], NFC: [0xBF78], NFD: [0x1108, 0x116B], NFKC: [0xBF78], NFKD: [0x1108, 0x116B] }, +{ source: [0xBF79], NFC: [0xBF79], NFD: [0x1108, 0x116B, 0x11A8], NFKC: [0xBF79], NFKD: [0x1108, 0x116B, 0x11A8] }, +{ source: [0xBF7A], NFC: [0xBF7A], NFD: [0x1108, 0x116B, 0x11A9], NFKC: [0xBF7A], NFKD: [0x1108, 0x116B, 0x11A9] }, +{ source: [0xBF7B], NFC: [0xBF7B], NFD: [0x1108, 0x116B, 0x11AA], NFKC: [0xBF7B], NFKD: [0x1108, 0x116B, 0x11AA] }, +{ source: [0xBF7C], NFC: [0xBF7C], NFD: [0x1108, 0x116B, 0x11AB], NFKC: [0xBF7C], NFKD: [0x1108, 0x116B, 0x11AB] }, +{ source: [0xBF7D], NFC: [0xBF7D], NFD: [0x1108, 0x116B, 0x11AC], NFKC: [0xBF7D], NFKD: [0x1108, 0x116B, 0x11AC] }, +{ source: [0xBF7E], NFC: [0xBF7E], NFD: [0x1108, 0x116B, 0x11AD], NFKC: [0xBF7E], NFKD: [0x1108, 0x116B, 0x11AD] }, +{ source: [0xBF7F], NFC: [0xBF7F], NFD: [0x1108, 0x116B, 0x11AE], NFKC: [0xBF7F], NFKD: [0x1108, 0x116B, 0x11AE] }, +{ source: [0xBF80], NFC: [0xBF80], NFD: [0x1108, 0x116B, 0x11AF], NFKC: [0xBF80], NFKD: [0x1108, 0x116B, 0x11AF] }, +{ source: [0xBF81], NFC: [0xBF81], NFD: [0x1108, 0x116B, 0x11B0], NFKC: [0xBF81], NFKD: [0x1108, 0x116B, 0x11B0] }, +{ source: [0xBF82], NFC: [0xBF82], NFD: [0x1108, 0x116B, 0x11B1], NFKC: [0xBF82], NFKD: [0x1108, 0x116B, 0x11B1] }, +{ source: [0xBF83], NFC: [0xBF83], NFD: [0x1108, 0x116B, 0x11B2], NFKC: [0xBF83], NFKD: [0x1108, 0x116B, 0x11B2] }, +{ source: [0xBF84], NFC: [0xBF84], NFD: [0x1108, 0x116B, 0x11B3], NFKC: [0xBF84], NFKD: [0x1108, 0x116B, 0x11B3] }, +{ source: [0xBF85], NFC: [0xBF85], NFD: [0x1108, 0x116B, 0x11B4], NFKC: [0xBF85], NFKD: [0x1108, 0x116B, 0x11B4] }, +{ source: [0xBF86], NFC: [0xBF86], NFD: [0x1108, 0x116B, 0x11B5], NFKC: [0xBF86], NFKD: [0x1108, 0x116B, 0x11B5] }, +{ source: [0xBF87], NFC: [0xBF87], NFD: [0x1108, 0x116B, 0x11B6], NFKC: [0xBF87], NFKD: [0x1108, 0x116B, 0x11B6] }, +{ source: [0xBF88], NFC: [0xBF88], NFD: [0x1108, 0x116B, 0x11B7], NFKC: [0xBF88], NFKD: [0x1108, 0x116B, 0x11B7] }, +{ source: [0xBF89], NFC: [0xBF89], NFD: [0x1108, 0x116B, 0x11B8], NFKC: [0xBF89], NFKD: [0x1108, 0x116B, 0x11B8] }, +{ source: [0xBF8A], NFC: [0xBF8A], NFD: [0x1108, 0x116B, 0x11B9], NFKC: [0xBF8A], NFKD: [0x1108, 0x116B, 0x11B9] }, +{ source: [0xBF8B], NFC: [0xBF8B], NFD: [0x1108, 0x116B, 0x11BA], NFKC: [0xBF8B], NFKD: [0x1108, 0x116B, 0x11BA] }, +{ source: [0xBF8C], NFC: [0xBF8C], NFD: [0x1108, 0x116B, 0x11BB], NFKC: [0xBF8C], NFKD: [0x1108, 0x116B, 0x11BB] }, +{ source: [0xBF8D], NFC: [0xBF8D], NFD: [0x1108, 0x116B, 0x11BC], NFKC: [0xBF8D], NFKD: [0x1108, 0x116B, 0x11BC] }, +{ source: [0xBF8E], NFC: [0xBF8E], NFD: [0x1108, 0x116B, 0x11BD], NFKC: [0xBF8E], NFKD: [0x1108, 0x116B, 0x11BD] }, +{ source: [0xBF8F], NFC: [0xBF8F], NFD: [0x1108, 0x116B, 0x11BE], NFKC: [0xBF8F], NFKD: [0x1108, 0x116B, 0x11BE] }, +{ source: [0xBF90], NFC: [0xBF90], NFD: [0x1108, 0x116B, 0x11BF], NFKC: [0xBF90], NFKD: [0x1108, 0x116B, 0x11BF] }, +{ source: [0xBF91], NFC: [0xBF91], NFD: [0x1108, 0x116B, 0x11C0], NFKC: [0xBF91], NFKD: [0x1108, 0x116B, 0x11C0] }, +{ source: [0xBF92], NFC: [0xBF92], NFD: [0x1108, 0x116B, 0x11C1], NFKC: [0xBF92], NFKD: [0x1108, 0x116B, 0x11C1] }, +{ source: [0xBF93], NFC: [0xBF93], NFD: [0x1108, 0x116B, 0x11C2], NFKC: [0xBF93], NFKD: [0x1108, 0x116B, 0x11C2] }, +{ source: [0xBF94], NFC: [0xBF94], NFD: [0x1108, 0x116C], NFKC: [0xBF94], NFKD: [0x1108, 0x116C] }, +{ source: [0xBF95], NFC: [0xBF95], NFD: [0x1108, 0x116C, 0x11A8], NFKC: [0xBF95], NFKD: [0x1108, 0x116C, 0x11A8] }, +{ source: [0xBF96], NFC: [0xBF96], NFD: [0x1108, 0x116C, 0x11A9], NFKC: [0xBF96], NFKD: [0x1108, 0x116C, 0x11A9] }, +{ source: [0xBF97], NFC: [0xBF97], NFD: [0x1108, 0x116C, 0x11AA], NFKC: [0xBF97], NFKD: [0x1108, 0x116C, 0x11AA] }, +{ source: [0xBF98], NFC: [0xBF98], NFD: [0x1108, 0x116C, 0x11AB], NFKC: [0xBF98], NFKD: [0x1108, 0x116C, 0x11AB] }, +{ source: [0xBF99], NFC: [0xBF99], NFD: [0x1108, 0x116C, 0x11AC], NFKC: [0xBF99], NFKD: [0x1108, 0x116C, 0x11AC] }, +{ source: [0xBF9A], NFC: [0xBF9A], NFD: [0x1108, 0x116C, 0x11AD], NFKC: [0xBF9A], NFKD: [0x1108, 0x116C, 0x11AD] }, +{ source: [0xBF9B], NFC: [0xBF9B], NFD: [0x1108, 0x116C, 0x11AE], NFKC: [0xBF9B], NFKD: [0x1108, 0x116C, 0x11AE] }, +{ source: [0xBF9C], NFC: [0xBF9C], NFD: [0x1108, 0x116C, 0x11AF], NFKC: [0xBF9C], NFKD: [0x1108, 0x116C, 0x11AF] }, +{ source: [0xBF9D], NFC: [0xBF9D], NFD: [0x1108, 0x116C, 0x11B0], NFKC: [0xBF9D], NFKD: [0x1108, 0x116C, 0x11B0] }, +{ source: [0xBF9E], NFC: [0xBF9E], NFD: [0x1108, 0x116C, 0x11B1], NFKC: [0xBF9E], NFKD: [0x1108, 0x116C, 0x11B1] }, +{ source: [0xBF9F], NFC: [0xBF9F], NFD: [0x1108, 0x116C, 0x11B2], NFKC: [0xBF9F], NFKD: [0x1108, 0x116C, 0x11B2] }, +{ source: [0xBFA0], NFC: [0xBFA0], NFD: [0x1108, 0x116C, 0x11B3], NFKC: [0xBFA0], NFKD: [0x1108, 0x116C, 0x11B3] }, +{ source: [0xBFA1], NFC: [0xBFA1], NFD: [0x1108, 0x116C, 0x11B4], NFKC: [0xBFA1], NFKD: [0x1108, 0x116C, 0x11B4] }, +{ source: [0xBFA2], NFC: [0xBFA2], NFD: [0x1108, 0x116C, 0x11B5], NFKC: [0xBFA2], NFKD: [0x1108, 0x116C, 0x11B5] }, +{ source: [0xBFA3], NFC: [0xBFA3], NFD: [0x1108, 0x116C, 0x11B6], NFKC: [0xBFA3], NFKD: [0x1108, 0x116C, 0x11B6] }, +{ source: [0xBFA4], NFC: [0xBFA4], NFD: [0x1108, 0x116C, 0x11B7], NFKC: [0xBFA4], NFKD: [0x1108, 0x116C, 0x11B7] }, +{ source: [0xBFA5], NFC: [0xBFA5], NFD: [0x1108, 0x116C, 0x11B8], NFKC: [0xBFA5], NFKD: [0x1108, 0x116C, 0x11B8] }, +{ source: [0xBFA6], NFC: [0xBFA6], NFD: [0x1108, 0x116C, 0x11B9], NFKC: [0xBFA6], NFKD: [0x1108, 0x116C, 0x11B9] }, +{ source: [0xBFA7], NFC: [0xBFA7], NFD: [0x1108, 0x116C, 0x11BA], NFKC: [0xBFA7], NFKD: [0x1108, 0x116C, 0x11BA] }, +{ source: [0xBFA8], NFC: [0xBFA8], NFD: [0x1108, 0x116C, 0x11BB], NFKC: [0xBFA8], NFKD: [0x1108, 0x116C, 0x11BB] }, +{ source: [0xBFA9], NFC: [0xBFA9], NFD: [0x1108, 0x116C, 0x11BC], NFKC: [0xBFA9], NFKD: [0x1108, 0x116C, 0x11BC] }, +{ source: [0xBFAA], NFC: [0xBFAA], NFD: [0x1108, 0x116C, 0x11BD], NFKC: [0xBFAA], NFKD: [0x1108, 0x116C, 0x11BD] }, +{ source: [0xBFAB], NFC: [0xBFAB], NFD: [0x1108, 0x116C, 0x11BE], NFKC: [0xBFAB], NFKD: [0x1108, 0x116C, 0x11BE] }, +{ source: [0xBFAC], NFC: [0xBFAC], NFD: [0x1108, 0x116C, 0x11BF], NFKC: [0xBFAC], NFKD: [0x1108, 0x116C, 0x11BF] }, +{ source: [0xBFAD], NFC: [0xBFAD], NFD: [0x1108, 0x116C, 0x11C0], NFKC: [0xBFAD], NFKD: [0x1108, 0x116C, 0x11C0] }, +{ source: [0xBFAE], NFC: [0xBFAE], NFD: [0x1108, 0x116C, 0x11C1], NFKC: [0xBFAE], NFKD: [0x1108, 0x116C, 0x11C1] }, +{ source: [0xBFAF], NFC: [0xBFAF], NFD: [0x1108, 0x116C, 0x11C2], NFKC: [0xBFAF], NFKD: [0x1108, 0x116C, 0x11C2] }, +{ source: [0xBFB0], NFC: [0xBFB0], NFD: [0x1108, 0x116D], NFKC: [0xBFB0], NFKD: [0x1108, 0x116D] }, +{ source: [0xBFB1], NFC: [0xBFB1], NFD: [0x1108, 0x116D, 0x11A8], NFKC: [0xBFB1], NFKD: [0x1108, 0x116D, 0x11A8] }, +{ source: [0xBFB2], NFC: [0xBFB2], NFD: [0x1108, 0x116D, 0x11A9], NFKC: [0xBFB2], NFKD: [0x1108, 0x116D, 0x11A9] }, +{ source: [0xBFB3], NFC: [0xBFB3], NFD: [0x1108, 0x116D, 0x11AA], NFKC: [0xBFB3], NFKD: [0x1108, 0x116D, 0x11AA] }, +{ source: [0xBFB4], NFC: [0xBFB4], NFD: [0x1108, 0x116D, 0x11AB], NFKC: [0xBFB4], NFKD: [0x1108, 0x116D, 0x11AB] }, +{ source: [0xBFB5], NFC: [0xBFB5], NFD: [0x1108, 0x116D, 0x11AC], NFKC: [0xBFB5], NFKD: [0x1108, 0x116D, 0x11AC] }, +{ source: [0xBFB6], NFC: [0xBFB6], NFD: [0x1108, 0x116D, 0x11AD], NFKC: [0xBFB6], NFKD: [0x1108, 0x116D, 0x11AD] }, +{ source: [0xBFB7], NFC: [0xBFB7], NFD: [0x1108, 0x116D, 0x11AE], NFKC: [0xBFB7], NFKD: [0x1108, 0x116D, 0x11AE] }, +{ source: [0xBFB8], NFC: [0xBFB8], NFD: [0x1108, 0x116D, 0x11AF], NFKC: [0xBFB8], NFKD: [0x1108, 0x116D, 0x11AF] }, +{ source: [0xBFB9], NFC: [0xBFB9], NFD: [0x1108, 0x116D, 0x11B0], NFKC: [0xBFB9], NFKD: [0x1108, 0x116D, 0x11B0] }, +{ source: [0xBFBA], NFC: [0xBFBA], NFD: [0x1108, 0x116D, 0x11B1], NFKC: [0xBFBA], NFKD: [0x1108, 0x116D, 0x11B1] }, +{ source: [0xBFBB], NFC: [0xBFBB], NFD: [0x1108, 0x116D, 0x11B2], NFKC: [0xBFBB], NFKD: [0x1108, 0x116D, 0x11B2] }, +{ source: [0xBFBC], NFC: [0xBFBC], NFD: [0x1108, 0x116D, 0x11B3], NFKC: [0xBFBC], NFKD: [0x1108, 0x116D, 0x11B3] }, +{ source: [0xBFBD], NFC: [0xBFBD], NFD: [0x1108, 0x116D, 0x11B4], NFKC: [0xBFBD], NFKD: [0x1108, 0x116D, 0x11B4] }, +{ source: [0xBFBE], NFC: [0xBFBE], NFD: [0x1108, 0x116D, 0x11B5], NFKC: [0xBFBE], NFKD: [0x1108, 0x116D, 0x11B5] }, +{ source: [0xBFBF], NFC: [0xBFBF], NFD: [0x1108, 0x116D, 0x11B6], NFKC: [0xBFBF], NFKD: [0x1108, 0x116D, 0x11B6] }, +{ source: [0xBFC0], NFC: [0xBFC0], NFD: [0x1108, 0x116D, 0x11B7], NFKC: [0xBFC0], NFKD: [0x1108, 0x116D, 0x11B7] }, +{ source: [0xBFC1], NFC: [0xBFC1], NFD: [0x1108, 0x116D, 0x11B8], NFKC: [0xBFC1], NFKD: [0x1108, 0x116D, 0x11B8] }, +{ source: [0xBFC2], NFC: [0xBFC2], NFD: [0x1108, 0x116D, 0x11B9], NFKC: [0xBFC2], NFKD: [0x1108, 0x116D, 0x11B9] }, +{ source: [0xBFC3], NFC: [0xBFC3], NFD: [0x1108, 0x116D, 0x11BA], NFKC: [0xBFC3], NFKD: [0x1108, 0x116D, 0x11BA] }, +{ source: [0xBFC4], NFC: [0xBFC4], NFD: [0x1108, 0x116D, 0x11BB], NFKC: [0xBFC4], NFKD: [0x1108, 0x116D, 0x11BB] }, +{ source: [0xBFC5], NFC: [0xBFC5], NFD: [0x1108, 0x116D, 0x11BC], NFKC: [0xBFC5], NFKD: [0x1108, 0x116D, 0x11BC] }, +{ source: [0xBFC6], NFC: [0xBFC6], NFD: [0x1108, 0x116D, 0x11BD], NFKC: [0xBFC6], NFKD: [0x1108, 0x116D, 0x11BD] }, +{ source: [0xBFC7], NFC: [0xBFC7], NFD: [0x1108, 0x116D, 0x11BE], NFKC: [0xBFC7], NFKD: [0x1108, 0x116D, 0x11BE] }, +{ source: [0xBFC8], NFC: [0xBFC8], NFD: [0x1108, 0x116D, 0x11BF], NFKC: [0xBFC8], NFKD: [0x1108, 0x116D, 0x11BF] }, +{ source: [0xBFC9], NFC: [0xBFC9], NFD: [0x1108, 0x116D, 0x11C0], NFKC: [0xBFC9], NFKD: [0x1108, 0x116D, 0x11C0] }, +{ source: [0xBFCA], NFC: [0xBFCA], NFD: [0x1108, 0x116D, 0x11C1], NFKC: [0xBFCA], NFKD: [0x1108, 0x116D, 0x11C1] }, +{ source: [0xBFCB], NFC: [0xBFCB], NFD: [0x1108, 0x116D, 0x11C2], NFKC: [0xBFCB], NFKD: [0x1108, 0x116D, 0x11C2] }, +{ source: [0xBFCC], NFC: [0xBFCC], NFD: [0x1108, 0x116E], NFKC: [0xBFCC], NFKD: [0x1108, 0x116E] }, +{ source: [0xBFCD], NFC: [0xBFCD], NFD: [0x1108, 0x116E, 0x11A8], NFKC: [0xBFCD], NFKD: [0x1108, 0x116E, 0x11A8] }, +{ source: [0xBFCE], NFC: [0xBFCE], NFD: [0x1108, 0x116E, 0x11A9], NFKC: [0xBFCE], NFKD: [0x1108, 0x116E, 0x11A9] }, +{ source: [0xBFCF], NFC: [0xBFCF], NFD: [0x1108, 0x116E, 0x11AA], NFKC: [0xBFCF], NFKD: [0x1108, 0x116E, 0x11AA] }, +{ source: [0xBFD0], NFC: [0xBFD0], NFD: [0x1108, 0x116E, 0x11AB], NFKC: [0xBFD0], NFKD: [0x1108, 0x116E, 0x11AB] }, +{ source: [0xBFD1], NFC: [0xBFD1], NFD: [0x1108, 0x116E, 0x11AC], NFKC: [0xBFD1], NFKD: [0x1108, 0x116E, 0x11AC] }, +{ source: [0xBFD2], NFC: [0xBFD2], NFD: [0x1108, 0x116E, 0x11AD], NFKC: [0xBFD2], NFKD: [0x1108, 0x116E, 0x11AD] }, +{ source: [0xBFD3], NFC: [0xBFD3], NFD: [0x1108, 0x116E, 0x11AE], NFKC: [0xBFD3], NFKD: [0x1108, 0x116E, 0x11AE] }, +{ source: [0xBFD4], NFC: [0xBFD4], NFD: [0x1108, 0x116E, 0x11AF], NFKC: [0xBFD4], NFKD: [0x1108, 0x116E, 0x11AF] }, +{ source: [0xBFD5], NFC: [0xBFD5], NFD: [0x1108, 0x116E, 0x11B0], NFKC: [0xBFD5], NFKD: [0x1108, 0x116E, 0x11B0] }, +{ source: [0xBFD6], NFC: [0xBFD6], NFD: [0x1108, 0x116E, 0x11B1], NFKC: [0xBFD6], NFKD: [0x1108, 0x116E, 0x11B1] }, +{ source: [0xBFD7], NFC: [0xBFD7], NFD: [0x1108, 0x116E, 0x11B2], NFKC: [0xBFD7], NFKD: [0x1108, 0x116E, 0x11B2] }, +{ source: [0xBFD8], NFC: [0xBFD8], NFD: [0x1108, 0x116E, 0x11B3], NFKC: [0xBFD8], NFKD: [0x1108, 0x116E, 0x11B3] }, +{ source: [0xBFD9], NFC: [0xBFD9], NFD: [0x1108, 0x116E, 0x11B4], NFKC: [0xBFD9], NFKD: [0x1108, 0x116E, 0x11B4] }, +{ source: [0xBFDA], NFC: [0xBFDA], NFD: [0x1108, 0x116E, 0x11B5], NFKC: [0xBFDA], NFKD: [0x1108, 0x116E, 0x11B5] }, +{ source: [0xBFDB], NFC: [0xBFDB], NFD: [0x1108, 0x116E, 0x11B6], NFKC: [0xBFDB], NFKD: [0x1108, 0x116E, 0x11B6] }, +{ source: [0xBFDC], NFC: [0xBFDC], NFD: [0x1108, 0x116E, 0x11B7], NFKC: [0xBFDC], NFKD: [0x1108, 0x116E, 0x11B7] }, +{ source: [0xBFDD], NFC: [0xBFDD], NFD: [0x1108, 0x116E, 0x11B8], NFKC: [0xBFDD], NFKD: [0x1108, 0x116E, 0x11B8] }, +{ source: [0xBFDE], NFC: [0xBFDE], NFD: [0x1108, 0x116E, 0x11B9], NFKC: [0xBFDE], NFKD: [0x1108, 0x116E, 0x11B9] }, +{ source: [0xBFDF], NFC: [0xBFDF], NFD: [0x1108, 0x116E, 0x11BA], NFKC: [0xBFDF], NFKD: [0x1108, 0x116E, 0x11BA] }, +{ source: [0xBFE0], NFC: [0xBFE0], NFD: [0x1108, 0x116E, 0x11BB], NFKC: [0xBFE0], NFKD: [0x1108, 0x116E, 0x11BB] }, +{ source: [0xBFE1], NFC: [0xBFE1], NFD: [0x1108, 0x116E, 0x11BC], NFKC: [0xBFE1], NFKD: [0x1108, 0x116E, 0x11BC] }, +{ source: [0xBFE2], NFC: [0xBFE2], NFD: [0x1108, 0x116E, 0x11BD], NFKC: [0xBFE2], NFKD: [0x1108, 0x116E, 0x11BD] }, +{ source: [0xBFE3], NFC: [0xBFE3], NFD: [0x1108, 0x116E, 0x11BE], NFKC: [0xBFE3], NFKD: [0x1108, 0x116E, 0x11BE] }, +{ source: [0xBFE4], NFC: [0xBFE4], NFD: [0x1108, 0x116E, 0x11BF], NFKC: [0xBFE4], NFKD: [0x1108, 0x116E, 0x11BF] }, +{ source: [0xBFE5], NFC: [0xBFE5], NFD: [0x1108, 0x116E, 0x11C0], NFKC: [0xBFE5], NFKD: [0x1108, 0x116E, 0x11C0] }, +{ source: [0xBFE6], NFC: [0xBFE6], NFD: [0x1108, 0x116E, 0x11C1], NFKC: [0xBFE6], NFKD: [0x1108, 0x116E, 0x11C1] }, +{ source: [0xBFE7], NFC: [0xBFE7], NFD: [0x1108, 0x116E, 0x11C2], NFKC: [0xBFE7], NFKD: [0x1108, 0x116E, 0x11C2] }, +{ source: [0xBFE8], NFC: [0xBFE8], NFD: [0x1108, 0x116F], NFKC: [0xBFE8], NFKD: [0x1108, 0x116F] }, +{ source: [0xBFE9], NFC: [0xBFE9], NFD: [0x1108, 0x116F, 0x11A8], NFKC: [0xBFE9], NFKD: [0x1108, 0x116F, 0x11A8] }, +{ source: [0xBFEA], NFC: [0xBFEA], NFD: [0x1108, 0x116F, 0x11A9], NFKC: [0xBFEA], NFKD: [0x1108, 0x116F, 0x11A9] }, +{ source: [0xBFEB], NFC: [0xBFEB], NFD: [0x1108, 0x116F, 0x11AA], NFKC: [0xBFEB], NFKD: [0x1108, 0x116F, 0x11AA] }, +{ source: [0xBFEC], NFC: [0xBFEC], NFD: [0x1108, 0x116F, 0x11AB], NFKC: [0xBFEC], NFKD: [0x1108, 0x116F, 0x11AB] }, +{ source: [0xBFED], NFC: [0xBFED], NFD: [0x1108, 0x116F, 0x11AC], NFKC: [0xBFED], NFKD: [0x1108, 0x116F, 0x11AC] }, +{ source: [0xBFEE], NFC: [0xBFEE], NFD: [0x1108, 0x116F, 0x11AD], NFKC: [0xBFEE], NFKD: [0x1108, 0x116F, 0x11AD] }, +{ source: [0xBFEF], NFC: [0xBFEF], NFD: [0x1108, 0x116F, 0x11AE], NFKC: [0xBFEF], NFKD: [0x1108, 0x116F, 0x11AE] }, +{ source: [0xBFF0], NFC: [0xBFF0], NFD: [0x1108, 0x116F, 0x11AF], NFKC: [0xBFF0], NFKD: [0x1108, 0x116F, 0x11AF] }, +{ source: [0xBFF1], NFC: [0xBFF1], NFD: [0x1108, 0x116F, 0x11B0], NFKC: [0xBFF1], NFKD: [0x1108, 0x116F, 0x11B0] }, +{ source: [0xBFF2], NFC: [0xBFF2], NFD: [0x1108, 0x116F, 0x11B1], NFKC: [0xBFF2], NFKD: [0x1108, 0x116F, 0x11B1] }, +{ source: [0xBFF3], NFC: [0xBFF3], NFD: [0x1108, 0x116F, 0x11B2], NFKC: [0xBFF3], NFKD: [0x1108, 0x116F, 0x11B2] }, +{ source: [0xBFF4], NFC: [0xBFF4], NFD: [0x1108, 0x116F, 0x11B3], NFKC: [0xBFF4], NFKD: [0x1108, 0x116F, 0x11B3] }, +{ source: [0xBFF5], NFC: [0xBFF5], NFD: [0x1108, 0x116F, 0x11B4], NFKC: [0xBFF5], NFKD: [0x1108, 0x116F, 0x11B4] }, +{ source: [0xBFF6], NFC: [0xBFF6], NFD: [0x1108, 0x116F, 0x11B5], NFKC: [0xBFF6], NFKD: [0x1108, 0x116F, 0x11B5] }, +{ source: [0xBFF7], NFC: [0xBFF7], NFD: [0x1108, 0x116F, 0x11B6], NFKC: [0xBFF7], NFKD: [0x1108, 0x116F, 0x11B6] }, +{ source: [0xBFF8], NFC: [0xBFF8], NFD: [0x1108, 0x116F, 0x11B7], NFKC: [0xBFF8], NFKD: [0x1108, 0x116F, 0x11B7] }, +{ source: [0xBFF9], NFC: [0xBFF9], NFD: [0x1108, 0x116F, 0x11B8], NFKC: [0xBFF9], NFKD: [0x1108, 0x116F, 0x11B8] }, +{ source: [0xBFFA], NFC: [0xBFFA], NFD: [0x1108, 0x116F, 0x11B9], NFKC: [0xBFFA], NFKD: [0x1108, 0x116F, 0x11B9] }, +{ source: [0xBFFB], NFC: [0xBFFB], NFD: [0x1108, 0x116F, 0x11BA], NFKC: [0xBFFB], NFKD: [0x1108, 0x116F, 0x11BA] }, +{ source: [0xBFFC], NFC: [0xBFFC], NFD: [0x1108, 0x116F, 0x11BB], NFKC: [0xBFFC], NFKD: [0x1108, 0x116F, 0x11BB] }, +{ source: [0xBFFD], NFC: [0xBFFD], NFD: [0x1108, 0x116F, 0x11BC], NFKC: [0xBFFD], NFKD: [0x1108, 0x116F, 0x11BC] }, +{ source: [0xBFFE], NFC: [0xBFFE], NFD: [0x1108, 0x116F, 0x11BD], NFKC: [0xBFFE], NFKD: [0x1108, 0x116F, 0x11BD] }, +{ source: [0xBFFF], NFC: [0xBFFF], NFD: [0x1108, 0x116F, 0x11BE], NFKC: [0xBFFF], NFKD: [0x1108, 0x116F, 0x11BE] }, +{ source: [0xC000], NFC: [0xC000], NFD: [0x1108, 0x116F, 0x11BF], NFKC: [0xC000], NFKD: [0x1108, 0x116F, 0x11BF] }, +{ source: [0xC001], NFC: [0xC001], NFD: [0x1108, 0x116F, 0x11C0], NFKC: [0xC001], NFKD: [0x1108, 0x116F, 0x11C0] }, +{ source: [0xC002], NFC: [0xC002], NFD: [0x1108, 0x116F, 0x11C1], NFKC: [0xC002], NFKD: [0x1108, 0x116F, 0x11C1] }, +{ source: [0xC003], NFC: [0xC003], NFD: [0x1108, 0x116F, 0x11C2], NFKC: [0xC003], NFKD: [0x1108, 0x116F, 0x11C2] }, +{ source: [0xC004], NFC: [0xC004], NFD: [0x1108, 0x1170], NFKC: [0xC004], NFKD: [0x1108, 0x1170] }, +{ source: [0xC005], NFC: [0xC005], NFD: [0x1108, 0x1170, 0x11A8], NFKC: [0xC005], NFKD: [0x1108, 0x1170, 0x11A8] }, +{ source: [0xC006], NFC: [0xC006], NFD: [0x1108, 0x1170, 0x11A9], NFKC: [0xC006], NFKD: [0x1108, 0x1170, 0x11A9] }, +{ source: [0xC007], NFC: [0xC007], NFD: [0x1108, 0x1170, 0x11AA], NFKC: [0xC007], NFKD: [0x1108, 0x1170, 0x11AA] }, +{ source: [0xC008], NFC: [0xC008], NFD: [0x1108, 0x1170, 0x11AB], NFKC: [0xC008], NFKD: [0x1108, 0x1170, 0x11AB] }, +{ source: [0xC009], NFC: [0xC009], NFD: [0x1108, 0x1170, 0x11AC], NFKC: [0xC009], NFKD: [0x1108, 0x1170, 0x11AC] }, +{ source: [0xC00A], NFC: [0xC00A], NFD: [0x1108, 0x1170, 0x11AD], NFKC: [0xC00A], NFKD: [0x1108, 0x1170, 0x11AD] }, +{ source: [0xC00B], NFC: [0xC00B], NFD: [0x1108, 0x1170, 0x11AE], NFKC: [0xC00B], NFKD: [0x1108, 0x1170, 0x11AE] }, +{ source: [0xC00C], NFC: [0xC00C], NFD: [0x1108, 0x1170, 0x11AF], NFKC: [0xC00C], NFKD: [0x1108, 0x1170, 0x11AF] }, +{ source: [0xC00D], NFC: [0xC00D], NFD: [0x1108, 0x1170, 0x11B0], NFKC: [0xC00D], NFKD: [0x1108, 0x1170, 0x11B0] }, +{ source: [0xC00E], NFC: [0xC00E], NFD: [0x1108, 0x1170, 0x11B1], NFKC: [0xC00E], NFKD: [0x1108, 0x1170, 0x11B1] }, +{ source: [0xC00F], NFC: [0xC00F], NFD: [0x1108, 0x1170, 0x11B2], NFKC: [0xC00F], NFKD: [0x1108, 0x1170, 0x11B2] }, +{ source: [0xC010], NFC: [0xC010], NFD: [0x1108, 0x1170, 0x11B3], NFKC: [0xC010], NFKD: [0x1108, 0x1170, 0x11B3] }, +{ source: [0xC011], NFC: [0xC011], NFD: [0x1108, 0x1170, 0x11B4], NFKC: [0xC011], NFKD: [0x1108, 0x1170, 0x11B4] }, +{ source: [0xC012], NFC: [0xC012], NFD: [0x1108, 0x1170, 0x11B5], NFKC: [0xC012], NFKD: [0x1108, 0x1170, 0x11B5] }, +{ source: [0xC013], NFC: [0xC013], NFD: [0x1108, 0x1170, 0x11B6], NFKC: [0xC013], NFKD: [0x1108, 0x1170, 0x11B6] }, +{ source: [0xC014], NFC: [0xC014], NFD: [0x1108, 0x1170, 0x11B7], NFKC: [0xC014], NFKD: [0x1108, 0x1170, 0x11B7] }, +{ source: [0xC015], NFC: [0xC015], NFD: [0x1108, 0x1170, 0x11B8], NFKC: [0xC015], NFKD: [0x1108, 0x1170, 0x11B8] }, +{ source: [0xC016], NFC: [0xC016], NFD: [0x1108, 0x1170, 0x11B9], NFKC: [0xC016], NFKD: [0x1108, 0x1170, 0x11B9] }, +{ source: [0xC017], NFC: [0xC017], NFD: [0x1108, 0x1170, 0x11BA], NFKC: [0xC017], NFKD: [0x1108, 0x1170, 0x11BA] }, +{ source: [0xC018], NFC: [0xC018], NFD: [0x1108, 0x1170, 0x11BB], NFKC: [0xC018], NFKD: [0x1108, 0x1170, 0x11BB] }, +{ source: [0xC019], NFC: [0xC019], NFD: [0x1108, 0x1170, 0x11BC], NFKC: [0xC019], NFKD: [0x1108, 0x1170, 0x11BC] }, +{ source: [0xC01A], NFC: [0xC01A], NFD: [0x1108, 0x1170, 0x11BD], NFKC: [0xC01A], NFKD: [0x1108, 0x1170, 0x11BD] }, +{ source: [0xC01B], NFC: [0xC01B], NFD: [0x1108, 0x1170, 0x11BE], NFKC: [0xC01B], NFKD: [0x1108, 0x1170, 0x11BE] }, +{ source: [0xC01C], NFC: [0xC01C], NFD: [0x1108, 0x1170, 0x11BF], NFKC: [0xC01C], NFKD: [0x1108, 0x1170, 0x11BF] }, +{ source: [0xC01D], NFC: [0xC01D], NFD: [0x1108, 0x1170, 0x11C0], NFKC: [0xC01D], NFKD: [0x1108, 0x1170, 0x11C0] }, +{ source: [0xC01E], NFC: [0xC01E], NFD: [0x1108, 0x1170, 0x11C1], NFKC: [0xC01E], NFKD: [0x1108, 0x1170, 0x11C1] }, +{ source: [0xC01F], NFC: [0xC01F], NFD: [0x1108, 0x1170, 0x11C2], NFKC: [0xC01F], NFKD: [0x1108, 0x1170, 0x11C2] }, +{ source: [0xC020], NFC: [0xC020], NFD: [0x1108, 0x1171], NFKC: [0xC020], NFKD: [0x1108, 0x1171] }, +{ source: [0xC021], NFC: [0xC021], NFD: [0x1108, 0x1171, 0x11A8], NFKC: [0xC021], NFKD: [0x1108, 0x1171, 0x11A8] }, +{ source: [0xC022], NFC: [0xC022], NFD: [0x1108, 0x1171, 0x11A9], NFKC: [0xC022], NFKD: [0x1108, 0x1171, 0x11A9] }, +{ source: [0xC023], NFC: [0xC023], NFD: [0x1108, 0x1171, 0x11AA], NFKC: [0xC023], NFKD: [0x1108, 0x1171, 0x11AA] }, +{ source: [0xC024], NFC: [0xC024], NFD: [0x1108, 0x1171, 0x11AB], NFKC: [0xC024], NFKD: [0x1108, 0x1171, 0x11AB] }, +{ source: [0xC025], NFC: [0xC025], NFD: [0x1108, 0x1171, 0x11AC], NFKC: [0xC025], NFKD: [0x1108, 0x1171, 0x11AC] }, +{ source: [0xC026], NFC: [0xC026], NFD: [0x1108, 0x1171, 0x11AD], NFKC: [0xC026], NFKD: [0x1108, 0x1171, 0x11AD] }, +{ source: [0xC027], NFC: [0xC027], NFD: [0x1108, 0x1171, 0x11AE], NFKC: [0xC027], NFKD: [0x1108, 0x1171, 0x11AE] }, +{ source: [0xC028], NFC: [0xC028], NFD: [0x1108, 0x1171, 0x11AF], NFKC: [0xC028], NFKD: [0x1108, 0x1171, 0x11AF] }, +{ source: [0xC029], NFC: [0xC029], NFD: [0x1108, 0x1171, 0x11B0], NFKC: [0xC029], NFKD: [0x1108, 0x1171, 0x11B0] }, +{ source: [0xC02A], NFC: [0xC02A], NFD: [0x1108, 0x1171, 0x11B1], NFKC: [0xC02A], NFKD: [0x1108, 0x1171, 0x11B1] }, +{ source: [0xC02B], NFC: [0xC02B], NFD: [0x1108, 0x1171, 0x11B2], NFKC: [0xC02B], NFKD: [0x1108, 0x1171, 0x11B2] }, +{ source: [0xC02C], NFC: [0xC02C], NFD: [0x1108, 0x1171, 0x11B3], NFKC: [0xC02C], NFKD: [0x1108, 0x1171, 0x11B3] }, +{ source: [0xC02D], NFC: [0xC02D], NFD: [0x1108, 0x1171, 0x11B4], NFKC: [0xC02D], NFKD: [0x1108, 0x1171, 0x11B4] }, +{ source: [0xC02E], NFC: [0xC02E], NFD: [0x1108, 0x1171, 0x11B5], NFKC: [0xC02E], NFKD: [0x1108, 0x1171, 0x11B5] }, +{ source: [0xC02F], NFC: [0xC02F], NFD: [0x1108, 0x1171, 0x11B6], NFKC: [0xC02F], NFKD: [0x1108, 0x1171, 0x11B6] }, +{ source: [0xC030], NFC: [0xC030], NFD: [0x1108, 0x1171, 0x11B7], NFKC: [0xC030], NFKD: [0x1108, 0x1171, 0x11B7] }, +{ source: [0xC031], NFC: [0xC031], NFD: [0x1108, 0x1171, 0x11B8], NFKC: [0xC031], NFKD: [0x1108, 0x1171, 0x11B8] }, +{ source: [0xC032], NFC: [0xC032], NFD: [0x1108, 0x1171, 0x11B9], NFKC: [0xC032], NFKD: [0x1108, 0x1171, 0x11B9] }, +{ source: [0xC033], NFC: [0xC033], NFD: [0x1108, 0x1171, 0x11BA], NFKC: [0xC033], NFKD: [0x1108, 0x1171, 0x11BA] }, +{ source: [0xC034], NFC: [0xC034], NFD: [0x1108, 0x1171, 0x11BB], NFKC: [0xC034], NFKD: [0x1108, 0x1171, 0x11BB] }, +{ source: [0xC035], NFC: [0xC035], NFD: [0x1108, 0x1171, 0x11BC], NFKC: [0xC035], NFKD: [0x1108, 0x1171, 0x11BC] }, +{ source: [0xC036], NFC: [0xC036], NFD: [0x1108, 0x1171, 0x11BD], NFKC: [0xC036], NFKD: [0x1108, 0x1171, 0x11BD] }, +{ source: [0xC037], NFC: [0xC037], NFD: [0x1108, 0x1171, 0x11BE], NFKC: [0xC037], NFKD: [0x1108, 0x1171, 0x11BE] }, +{ source: [0xC038], NFC: [0xC038], NFD: [0x1108, 0x1171, 0x11BF], NFKC: [0xC038], NFKD: [0x1108, 0x1171, 0x11BF] }, +{ source: [0xC039], NFC: [0xC039], NFD: [0x1108, 0x1171, 0x11C0], NFKC: [0xC039], NFKD: [0x1108, 0x1171, 0x11C0] }, +{ source: [0xC03A], NFC: [0xC03A], NFD: [0x1108, 0x1171, 0x11C1], NFKC: [0xC03A], NFKD: [0x1108, 0x1171, 0x11C1] }, +{ source: [0xC03B], NFC: [0xC03B], NFD: [0x1108, 0x1171, 0x11C2], NFKC: [0xC03B], NFKD: [0x1108, 0x1171, 0x11C2] }, +{ source: [0xC03C], NFC: [0xC03C], NFD: [0x1108, 0x1172], NFKC: [0xC03C], NFKD: [0x1108, 0x1172] }, +{ source: [0xC03D], NFC: [0xC03D], NFD: [0x1108, 0x1172, 0x11A8], NFKC: [0xC03D], NFKD: [0x1108, 0x1172, 0x11A8] }, +{ source: [0xC03E], NFC: [0xC03E], NFD: [0x1108, 0x1172, 0x11A9], NFKC: [0xC03E], NFKD: [0x1108, 0x1172, 0x11A9] }, +{ source: [0xC03F], NFC: [0xC03F], NFD: [0x1108, 0x1172, 0x11AA], NFKC: [0xC03F], NFKD: [0x1108, 0x1172, 0x11AA] }, +{ source: [0xC040], NFC: [0xC040], NFD: [0x1108, 0x1172, 0x11AB], NFKC: [0xC040], NFKD: [0x1108, 0x1172, 0x11AB] }, +{ source: [0xC041], NFC: [0xC041], NFD: [0x1108, 0x1172, 0x11AC], NFKC: [0xC041], NFKD: [0x1108, 0x1172, 0x11AC] }, +{ source: [0xC042], NFC: [0xC042], NFD: [0x1108, 0x1172, 0x11AD], NFKC: [0xC042], NFKD: [0x1108, 0x1172, 0x11AD] }, +{ source: [0xC043], NFC: [0xC043], NFD: [0x1108, 0x1172, 0x11AE], NFKC: [0xC043], NFKD: [0x1108, 0x1172, 0x11AE] }, +{ source: [0xC044], NFC: [0xC044], NFD: [0x1108, 0x1172, 0x11AF], NFKC: [0xC044], NFKD: [0x1108, 0x1172, 0x11AF] }, +{ source: [0xC045], NFC: [0xC045], NFD: [0x1108, 0x1172, 0x11B0], NFKC: [0xC045], NFKD: [0x1108, 0x1172, 0x11B0] }, +{ source: [0xC046], NFC: [0xC046], NFD: [0x1108, 0x1172, 0x11B1], NFKC: [0xC046], NFKD: [0x1108, 0x1172, 0x11B1] }, +{ source: [0xC047], NFC: [0xC047], NFD: [0x1108, 0x1172, 0x11B2], NFKC: [0xC047], NFKD: [0x1108, 0x1172, 0x11B2] }, +{ source: [0xC048], NFC: [0xC048], NFD: [0x1108, 0x1172, 0x11B3], NFKC: [0xC048], NFKD: [0x1108, 0x1172, 0x11B3] }, +{ source: [0xC049], NFC: [0xC049], NFD: [0x1108, 0x1172, 0x11B4], NFKC: [0xC049], NFKD: [0x1108, 0x1172, 0x11B4] }, +{ source: [0xC04A], NFC: [0xC04A], NFD: [0x1108, 0x1172, 0x11B5], NFKC: [0xC04A], NFKD: [0x1108, 0x1172, 0x11B5] }, +{ source: [0xC04B], NFC: [0xC04B], NFD: [0x1108, 0x1172, 0x11B6], NFKC: [0xC04B], NFKD: [0x1108, 0x1172, 0x11B6] }, +{ source: [0xC04C], NFC: [0xC04C], NFD: [0x1108, 0x1172, 0x11B7], NFKC: [0xC04C], NFKD: [0x1108, 0x1172, 0x11B7] }, +{ source: [0xC04D], NFC: [0xC04D], NFD: [0x1108, 0x1172, 0x11B8], NFKC: [0xC04D], NFKD: [0x1108, 0x1172, 0x11B8] }, +{ source: [0xC04E], NFC: [0xC04E], NFD: [0x1108, 0x1172, 0x11B9], NFKC: [0xC04E], NFKD: [0x1108, 0x1172, 0x11B9] }, +{ source: [0xC04F], NFC: [0xC04F], NFD: [0x1108, 0x1172, 0x11BA], NFKC: [0xC04F], NFKD: [0x1108, 0x1172, 0x11BA] }, +{ source: [0xC050], NFC: [0xC050], NFD: [0x1108, 0x1172, 0x11BB], NFKC: [0xC050], NFKD: [0x1108, 0x1172, 0x11BB] }, +{ source: [0xC051], NFC: [0xC051], NFD: [0x1108, 0x1172, 0x11BC], NFKC: [0xC051], NFKD: [0x1108, 0x1172, 0x11BC] }, +{ source: [0xC052], NFC: [0xC052], NFD: [0x1108, 0x1172, 0x11BD], NFKC: [0xC052], NFKD: [0x1108, 0x1172, 0x11BD] }, +{ source: [0xC053], NFC: [0xC053], NFD: [0x1108, 0x1172, 0x11BE], NFKC: [0xC053], NFKD: [0x1108, 0x1172, 0x11BE] }, +{ source: [0xC054], NFC: [0xC054], NFD: [0x1108, 0x1172, 0x11BF], NFKC: [0xC054], NFKD: [0x1108, 0x1172, 0x11BF] }, +{ source: [0xC055], NFC: [0xC055], NFD: [0x1108, 0x1172, 0x11C0], NFKC: [0xC055], NFKD: [0x1108, 0x1172, 0x11C0] }, +{ source: [0xC056], NFC: [0xC056], NFD: [0x1108, 0x1172, 0x11C1], NFKC: [0xC056], NFKD: [0x1108, 0x1172, 0x11C1] }, +{ source: [0xC057], NFC: [0xC057], NFD: [0x1108, 0x1172, 0x11C2], NFKC: [0xC057], NFKD: [0x1108, 0x1172, 0x11C2] }, +{ source: [0xC058], NFC: [0xC058], NFD: [0x1108, 0x1173], NFKC: [0xC058], NFKD: [0x1108, 0x1173] }, +{ source: [0xC059], NFC: [0xC059], NFD: [0x1108, 0x1173, 0x11A8], NFKC: [0xC059], NFKD: [0x1108, 0x1173, 0x11A8] }, +{ source: [0xC05A], NFC: [0xC05A], NFD: [0x1108, 0x1173, 0x11A9], NFKC: [0xC05A], NFKD: [0x1108, 0x1173, 0x11A9] }, +{ source: [0xC05B], NFC: [0xC05B], NFD: [0x1108, 0x1173, 0x11AA], NFKC: [0xC05B], NFKD: [0x1108, 0x1173, 0x11AA] }, +{ source: [0xC05C], NFC: [0xC05C], NFD: [0x1108, 0x1173, 0x11AB], NFKC: [0xC05C], NFKD: [0x1108, 0x1173, 0x11AB] }, +{ source: [0xC05D], NFC: [0xC05D], NFD: [0x1108, 0x1173, 0x11AC], NFKC: [0xC05D], NFKD: [0x1108, 0x1173, 0x11AC] }, +{ source: [0xC05E], NFC: [0xC05E], NFD: [0x1108, 0x1173, 0x11AD], NFKC: [0xC05E], NFKD: [0x1108, 0x1173, 0x11AD] }, +{ source: [0xC05F], NFC: [0xC05F], NFD: [0x1108, 0x1173, 0x11AE], NFKC: [0xC05F], NFKD: [0x1108, 0x1173, 0x11AE] }, +{ source: [0xC060], NFC: [0xC060], NFD: [0x1108, 0x1173, 0x11AF], NFKC: [0xC060], NFKD: [0x1108, 0x1173, 0x11AF] }, +{ source: [0xC061], NFC: [0xC061], NFD: [0x1108, 0x1173, 0x11B0], NFKC: [0xC061], NFKD: [0x1108, 0x1173, 0x11B0] }, +{ source: [0xC062], NFC: [0xC062], NFD: [0x1108, 0x1173, 0x11B1], NFKC: [0xC062], NFKD: [0x1108, 0x1173, 0x11B1] }, +{ source: [0xC063], NFC: [0xC063], NFD: [0x1108, 0x1173, 0x11B2], NFKC: [0xC063], NFKD: [0x1108, 0x1173, 0x11B2] }, +{ source: [0xC064], NFC: [0xC064], NFD: [0x1108, 0x1173, 0x11B3], NFKC: [0xC064], NFKD: [0x1108, 0x1173, 0x11B3] }, +{ source: [0xC065], NFC: [0xC065], NFD: [0x1108, 0x1173, 0x11B4], NFKC: [0xC065], NFKD: [0x1108, 0x1173, 0x11B4] }, +{ source: [0xC066], NFC: [0xC066], NFD: [0x1108, 0x1173, 0x11B5], NFKC: [0xC066], NFKD: [0x1108, 0x1173, 0x11B5] }, +{ source: [0xC067], NFC: [0xC067], NFD: [0x1108, 0x1173, 0x11B6], NFKC: [0xC067], NFKD: [0x1108, 0x1173, 0x11B6] }, +{ source: [0xC068], NFC: [0xC068], NFD: [0x1108, 0x1173, 0x11B7], NFKC: [0xC068], NFKD: [0x1108, 0x1173, 0x11B7] }, +{ source: [0xC069], NFC: [0xC069], NFD: [0x1108, 0x1173, 0x11B8], NFKC: [0xC069], NFKD: [0x1108, 0x1173, 0x11B8] }, +{ source: [0xC06A], NFC: [0xC06A], NFD: [0x1108, 0x1173, 0x11B9], NFKC: [0xC06A], NFKD: [0x1108, 0x1173, 0x11B9] }, +{ source: [0xC06B], NFC: [0xC06B], NFD: [0x1108, 0x1173, 0x11BA], NFKC: [0xC06B], NFKD: [0x1108, 0x1173, 0x11BA] }, +{ source: [0xC06C], NFC: [0xC06C], NFD: [0x1108, 0x1173, 0x11BB], NFKC: [0xC06C], NFKD: [0x1108, 0x1173, 0x11BB] }, +{ source: [0xC06D], NFC: [0xC06D], NFD: [0x1108, 0x1173, 0x11BC], NFKC: [0xC06D], NFKD: [0x1108, 0x1173, 0x11BC] }, +{ source: [0xC06E], NFC: [0xC06E], NFD: [0x1108, 0x1173, 0x11BD], NFKC: [0xC06E], NFKD: [0x1108, 0x1173, 0x11BD] }, +{ source: [0xC06F], NFC: [0xC06F], NFD: [0x1108, 0x1173, 0x11BE], NFKC: [0xC06F], NFKD: [0x1108, 0x1173, 0x11BE] }, +{ source: [0xC070], NFC: [0xC070], NFD: [0x1108, 0x1173, 0x11BF], NFKC: [0xC070], NFKD: [0x1108, 0x1173, 0x11BF] }, +{ source: [0xC071], NFC: [0xC071], NFD: [0x1108, 0x1173, 0x11C0], NFKC: [0xC071], NFKD: [0x1108, 0x1173, 0x11C0] }, +{ source: [0xC072], NFC: [0xC072], NFD: [0x1108, 0x1173, 0x11C1], NFKC: [0xC072], NFKD: [0x1108, 0x1173, 0x11C1] }, +{ source: [0xC073], NFC: [0xC073], NFD: [0x1108, 0x1173, 0x11C2], NFKC: [0xC073], NFKD: [0x1108, 0x1173, 0x11C2] }, +{ source: [0xC074], NFC: [0xC074], NFD: [0x1108, 0x1174], NFKC: [0xC074], NFKD: [0x1108, 0x1174] }, +{ source: [0xC075], NFC: [0xC075], NFD: [0x1108, 0x1174, 0x11A8], NFKC: [0xC075], NFKD: [0x1108, 0x1174, 0x11A8] }, +{ source: [0xC076], NFC: [0xC076], NFD: [0x1108, 0x1174, 0x11A9], NFKC: [0xC076], NFKD: [0x1108, 0x1174, 0x11A9] }, +{ source: [0xC077], NFC: [0xC077], NFD: [0x1108, 0x1174, 0x11AA], NFKC: [0xC077], NFKD: [0x1108, 0x1174, 0x11AA] }, +{ source: [0xC078], NFC: [0xC078], NFD: [0x1108, 0x1174, 0x11AB], NFKC: [0xC078], NFKD: [0x1108, 0x1174, 0x11AB] }, +{ source: [0xC079], NFC: [0xC079], NFD: [0x1108, 0x1174, 0x11AC], NFKC: [0xC079], NFKD: [0x1108, 0x1174, 0x11AC] }, +{ source: [0xC07A], NFC: [0xC07A], NFD: [0x1108, 0x1174, 0x11AD], NFKC: [0xC07A], NFKD: [0x1108, 0x1174, 0x11AD] }, +{ source: [0xC07B], NFC: [0xC07B], NFD: [0x1108, 0x1174, 0x11AE], NFKC: [0xC07B], NFKD: [0x1108, 0x1174, 0x11AE] }, +{ source: [0xC07C], NFC: [0xC07C], NFD: [0x1108, 0x1174, 0x11AF], NFKC: [0xC07C], NFKD: [0x1108, 0x1174, 0x11AF] }, +{ source: [0xC07D], NFC: [0xC07D], NFD: [0x1108, 0x1174, 0x11B0], NFKC: [0xC07D], NFKD: [0x1108, 0x1174, 0x11B0] }, +{ source: [0xC07E], NFC: [0xC07E], NFD: [0x1108, 0x1174, 0x11B1], NFKC: [0xC07E], NFKD: [0x1108, 0x1174, 0x11B1] }, +{ source: [0xC07F], NFC: [0xC07F], NFD: [0x1108, 0x1174, 0x11B2], NFKC: [0xC07F], NFKD: [0x1108, 0x1174, 0x11B2] }, +{ source: [0xC080], NFC: [0xC080], NFD: [0x1108, 0x1174, 0x11B3], NFKC: [0xC080], NFKD: [0x1108, 0x1174, 0x11B3] }, +{ source: [0xC081], NFC: [0xC081], NFD: [0x1108, 0x1174, 0x11B4], NFKC: [0xC081], NFKD: [0x1108, 0x1174, 0x11B4] }, +{ source: [0xC082], NFC: [0xC082], NFD: [0x1108, 0x1174, 0x11B5], NFKC: [0xC082], NFKD: [0x1108, 0x1174, 0x11B5] }, +{ source: [0xC083], NFC: [0xC083], NFD: [0x1108, 0x1174, 0x11B6], NFKC: [0xC083], NFKD: [0x1108, 0x1174, 0x11B6] }, +{ source: [0xC084], NFC: [0xC084], NFD: [0x1108, 0x1174, 0x11B7], NFKC: [0xC084], NFKD: [0x1108, 0x1174, 0x11B7] }, +{ source: [0xC085], NFC: [0xC085], NFD: [0x1108, 0x1174, 0x11B8], NFKC: [0xC085], NFKD: [0x1108, 0x1174, 0x11B8] }, +{ source: [0xC086], NFC: [0xC086], NFD: [0x1108, 0x1174, 0x11B9], NFKC: [0xC086], NFKD: [0x1108, 0x1174, 0x11B9] }, +{ source: [0xC087], NFC: [0xC087], NFD: [0x1108, 0x1174, 0x11BA], NFKC: [0xC087], NFKD: [0x1108, 0x1174, 0x11BA] }, +{ source: [0xC088], NFC: [0xC088], NFD: [0x1108, 0x1174, 0x11BB], NFKC: [0xC088], NFKD: [0x1108, 0x1174, 0x11BB] }, +{ source: [0xC089], NFC: [0xC089], NFD: [0x1108, 0x1174, 0x11BC], NFKC: [0xC089], NFKD: [0x1108, 0x1174, 0x11BC] }, +{ source: [0xC08A], NFC: [0xC08A], NFD: [0x1108, 0x1174, 0x11BD], NFKC: [0xC08A], NFKD: [0x1108, 0x1174, 0x11BD] }, +{ source: [0xC08B], NFC: [0xC08B], NFD: [0x1108, 0x1174, 0x11BE], NFKC: [0xC08B], NFKD: [0x1108, 0x1174, 0x11BE] }, +{ source: [0xC08C], NFC: [0xC08C], NFD: [0x1108, 0x1174, 0x11BF], NFKC: [0xC08C], NFKD: [0x1108, 0x1174, 0x11BF] }, +{ source: [0xC08D], NFC: [0xC08D], NFD: [0x1108, 0x1174, 0x11C0], NFKC: [0xC08D], NFKD: [0x1108, 0x1174, 0x11C0] }, +{ source: [0xC08E], NFC: [0xC08E], NFD: [0x1108, 0x1174, 0x11C1], NFKC: [0xC08E], NFKD: [0x1108, 0x1174, 0x11C1] }, +{ source: [0xC08F], NFC: [0xC08F], NFD: [0x1108, 0x1174, 0x11C2], NFKC: [0xC08F], NFKD: [0x1108, 0x1174, 0x11C2] }, +{ source: [0xC090], NFC: [0xC090], NFD: [0x1108, 0x1175], NFKC: [0xC090], NFKD: [0x1108, 0x1175] }, +{ source: [0xC091], NFC: [0xC091], NFD: [0x1108, 0x1175, 0x11A8], NFKC: [0xC091], NFKD: [0x1108, 0x1175, 0x11A8] }, +{ source: [0xC092], NFC: [0xC092], NFD: [0x1108, 0x1175, 0x11A9], NFKC: [0xC092], NFKD: [0x1108, 0x1175, 0x11A9] }, +{ source: [0xC093], NFC: [0xC093], NFD: [0x1108, 0x1175, 0x11AA], NFKC: [0xC093], NFKD: [0x1108, 0x1175, 0x11AA] }, +{ source: [0xC094], NFC: [0xC094], NFD: [0x1108, 0x1175, 0x11AB], NFKC: [0xC094], NFKD: [0x1108, 0x1175, 0x11AB] }, +{ source: [0xC095], NFC: [0xC095], NFD: [0x1108, 0x1175, 0x11AC], NFKC: [0xC095], NFKD: [0x1108, 0x1175, 0x11AC] }, +{ source: [0xC096], NFC: [0xC096], NFD: [0x1108, 0x1175, 0x11AD], NFKC: [0xC096], NFKD: [0x1108, 0x1175, 0x11AD] }, +{ source: [0xC097], NFC: [0xC097], NFD: [0x1108, 0x1175, 0x11AE], NFKC: [0xC097], NFKD: [0x1108, 0x1175, 0x11AE] }, +{ source: [0xC098], NFC: [0xC098], NFD: [0x1108, 0x1175, 0x11AF], NFKC: [0xC098], NFKD: [0x1108, 0x1175, 0x11AF] }, +{ source: [0xC099], NFC: [0xC099], NFD: [0x1108, 0x1175, 0x11B0], NFKC: [0xC099], NFKD: [0x1108, 0x1175, 0x11B0] }, +{ source: [0xC09A], NFC: [0xC09A], NFD: [0x1108, 0x1175, 0x11B1], NFKC: [0xC09A], NFKD: [0x1108, 0x1175, 0x11B1] }, +{ source: [0xC09B], NFC: [0xC09B], NFD: [0x1108, 0x1175, 0x11B2], NFKC: [0xC09B], NFKD: [0x1108, 0x1175, 0x11B2] }, +{ source: [0xC09C], NFC: [0xC09C], NFD: [0x1108, 0x1175, 0x11B3], NFKC: [0xC09C], NFKD: [0x1108, 0x1175, 0x11B3] }, +{ source: [0xC09D], NFC: [0xC09D], NFD: [0x1108, 0x1175, 0x11B4], NFKC: [0xC09D], NFKD: [0x1108, 0x1175, 0x11B4] }, +{ source: [0xC09E], NFC: [0xC09E], NFD: [0x1108, 0x1175, 0x11B5], NFKC: [0xC09E], NFKD: [0x1108, 0x1175, 0x11B5] }, +{ source: [0xC09F], NFC: [0xC09F], NFD: [0x1108, 0x1175, 0x11B6], NFKC: [0xC09F], NFKD: [0x1108, 0x1175, 0x11B6] }, +{ source: [0xC0A0], NFC: [0xC0A0], NFD: [0x1108, 0x1175, 0x11B7], NFKC: [0xC0A0], NFKD: [0x1108, 0x1175, 0x11B7] }, +{ source: [0xC0A1], NFC: [0xC0A1], NFD: [0x1108, 0x1175, 0x11B8], NFKC: [0xC0A1], NFKD: [0x1108, 0x1175, 0x11B8] }, +{ source: [0xC0A2], NFC: [0xC0A2], NFD: [0x1108, 0x1175, 0x11B9], NFKC: [0xC0A2], NFKD: [0x1108, 0x1175, 0x11B9] }, +{ source: [0xC0A3], NFC: [0xC0A3], NFD: [0x1108, 0x1175, 0x11BA], NFKC: [0xC0A3], NFKD: [0x1108, 0x1175, 0x11BA] }, +{ source: [0xC0A4], NFC: [0xC0A4], NFD: [0x1108, 0x1175, 0x11BB], NFKC: [0xC0A4], NFKD: [0x1108, 0x1175, 0x11BB] }, +{ source: [0xC0A5], NFC: [0xC0A5], NFD: [0x1108, 0x1175, 0x11BC], NFKC: [0xC0A5], NFKD: [0x1108, 0x1175, 0x11BC] }, +{ source: [0xC0A6], NFC: [0xC0A6], NFD: [0x1108, 0x1175, 0x11BD], NFKC: [0xC0A6], NFKD: [0x1108, 0x1175, 0x11BD] }, +{ source: [0xC0A7], NFC: [0xC0A7], NFD: [0x1108, 0x1175, 0x11BE], NFKC: [0xC0A7], NFKD: [0x1108, 0x1175, 0x11BE] }, +{ source: [0xC0A8], NFC: [0xC0A8], NFD: [0x1108, 0x1175, 0x11BF], NFKC: [0xC0A8], NFKD: [0x1108, 0x1175, 0x11BF] }, +{ source: [0xC0A9], NFC: [0xC0A9], NFD: [0x1108, 0x1175, 0x11C0], NFKC: [0xC0A9], NFKD: [0x1108, 0x1175, 0x11C0] }, +{ source: [0xC0AA], NFC: [0xC0AA], NFD: [0x1108, 0x1175, 0x11C1], NFKC: [0xC0AA], NFKD: [0x1108, 0x1175, 0x11C1] }, +{ source: [0xC0AB], NFC: [0xC0AB], NFD: [0x1108, 0x1175, 0x11C2], NFKC: [0xC0AB], NFKD: [0x1108, 0x1175, 0x11C2] }, +{ source: [0xC0AC], NFC: [0xC0AC], NFD: [0x1109, 0x1161], NFKC: [0xC0AC], NFKD: [0x1109, 0x1161] }, +{ source: [0xC0AD], NFC: [0xC0AD], NFD: [0x1109, 0x1161, 0x11A8], NFKC: [0xC0AD], NFKD: [0x1109, 0x1161, 0x11A8] }, +{ source: [0xC0AE], NFC: [0xC0AE], NFD: [0x1109, 0x1161, 0x11A9], NFKC: [0xC0AE], NFKD: [0x1109, 0x1161, 0x11A9] }, +{ source: [0xC0AF], NFC: [0xC0AF], NFD: [0x1109, 0x1161, 0x11AA], NFKC: [0xC0AF], NFKD: [0x1109, 0x1161, 0x11AA] }, +{ source: [0xC0B0], NFC: [0xC0B0], NFD: [0x1109, 0x1161, 0x11AB], NFKC: [0xC0B0], NFKD: [0x1109, 0x1161, 0x11AB] }, +{ source: [0xC0B1], NFC: [0xC0B1], NFD: [0x1109, 0x1161, 0x11AC], NFKC: [0xC0B1], NFKD: [0x1109, 0x1161, 0x11AC] }, +{ source: [0xC0B2], NFC: [0xC0B2], NFD: [0x1109, 0x1161, 0x11AD], NFKC: [0xC0B2], NFKD: [0x1109, 0x1161, 0x11AD] }, +{ source: [0xC0B3], NFC: [0xC0B3], NFD: [0x1109, 0x1161, 0x11AE], NFKC: [0xC0B3], NFKD: [0x1109, 0x1161, 0x11AE] }, +{ source: [0xC0B4], NFC: [0xC0B4], NFD: [0x1109, 0x1161, 0x11AF], NFKC: [0xC0B4], NFKD: [0x1109, 0x1161, 0x11AF] }, +{ source: [0xC0B5], NFC: [0xC0B5], NFD: [0x1109, 0x1161, 0x11B0], NFKC: [0xC0B5], NFKD: [0x1109, 0x1161, 0x11B0] }, +{ source: [0xC0B6], NFC: [0xC0B6], NFD: [0x1109, 0x1161, 0x11B1], NFKC: [0xC0B6], NFKD: [0x1109, 0x1161, 0x11B1] }, +{ source: [0xC0B7], NFC: [0xC0B7], NFD: [0x1109, 0x1161, 0x11B2], NFKC: [0xC0B7], NFKD: [0x1109, 0x1161, 0x11B2] }, +{ source: [0xC0B8], NFC: [0xC0B8], NFD: [0x1109, 0x1161, 0x11B3], NFKC: [0xC0B8], NFKD: [0x1109, 0x1161, 0x11B3] }, +{ source: [0xC0B9], NFC: [0xC0B9], NFD: [0x1109, 0x1161, 0x11B4], NFKC: [0xC0B9], NFKD: [0x1109, 0x1161, 0x11B4] }, +{ source: [0xC0BA], NFC: [0xC0BA], NFD: [0x1109, 0x1161, 0x11B5], NFKC: [0xC0BA], NFKD: [0x1109, 0x1161, 0x11B5] }, +{ source: [0xC0BB], NFC: [0xC0BB], NFD: [0x1109, 0x1161, 0x11B6], NFKC: [0xC0BB], NFKD: [0x1109, 0x1161, 0x11B6] }, +{ source: [0xC0BC], NFC: [0xC0BC], NFD: [0x1109, 0x1161, 0x11B7], NFKC: [0xC0BC], NFKD: [0x1109, 0x1161, 0x11B7] }, +{ source: [0xC0BD], NFC: [0xC0BD], NFD: [0x1109, 0x1161, 0x11B8], NFKC: [0xC0BD], NFKD: [0x1109, 0x1161, 0x11B8] }, +{ source: [0xC0BE], NFC: [0xC0BE], NFD: [0x1109, 0x1161, 0x11B9], NFKC: [0xC0BE], NFKD: [0x1109, 0x1161, 0x11B9] }, +{ source: [0xC0BF], NFC: [0xC0BF], NFD: [0x1109, 0x1161, 0x11BA], NFKC: [0xC0BF], NFKD: [0x1109, 0x1161, 0x11BA] }, +{ source: [0xC0C0], NFC: [0xC0C0], NFD: [0x1109, 0x1161, 0x11BB], NFKC: [0xC0C0], NFKD: [0x1109, 0x1161, 0x11BB] }, +{ source: [0xC0C1], NFC: [0xC0C1], NFD: [0x1109, 0x1161, 0x11BC], NFKC: [0xC0C1], NFKD: [0x1109, 0x1161, 0x11BC] }, +{ source: [0xC0C2], NFC: [0xC0C2], NFD: [0x1109, 0x1161, 0x11BD], NFKC: [0xC0C2], NFKD: [0x1109, 0x1161, 0x11BD] }, +{ source: [0xC0C3], NFC: [0xC0C3], NFD: [0x1109, 0x1161, 0x11BE], NFKC: [0xC0C3], NFKD: [0x1109, 0x1161, 0x11BE] }, +{ source: [0xC0C4], NFC: [0xC0C4], NFD: [0x1109, 0x1161, 0x11BF], NFKC: [0xC0C4], NFKD: [0x1109, 0x1161, 0x11BF] }, +{ source: [0xC0C5], NFC: [0xC0C5], NFD: [0x1109, 0x1161, 0x11C0], NFKC: [0xC0C5], NFKD: [0x1109, 0x1161, 0x11C0] }, +{ source: [0xC0C6], NFC: [0xC0C6], NFD: [0x1109, 0x1161, 0x11C1], NFKC: [0xC0C6], NFKD: [0x1109, 0x1161, 0x11C1] }, +{ source: [0xC0C7], NFC: [0xC0C7], NFD: [0x1109, 0x1161, 0x11C2], NFKC: [0xC0C7], NFKD: [0x1109, 0x1161, 0x11C2] }, +{ source: [0xC0C8], NFC: [0xC0C8], NFD: [0x1109, 0x1162], NFKC: [0xC0C8], NFKD: [0x1109, 0x1162] }, +{ source: [0xC0C9], NFC: [0xC0C9], NFD: [0x1109, 0x1162, 0x11A8], NFKC: [0xC0C9], NFKD: [0x1109, 0x1162, 0x11A8] }, +{ source: [0xC0CA], NFC: [0xC0CA], NFD: [0x1109, 0x1162, 0x11A9], NFKC: [0xC0CA], NFKD: [0x1109, 0x1162, 0x11A9] }, +{ source: [0xC0CB], NFC: [0xC0CB], NFD: [0x1109, 0x1162, 0x11AA], NFKC: [0xC0CB], NFKD: [0x1109, 0x1162, 0x11AA] }, +{ source: [0xC0CC], NFC: [0xC0CC], NFD: [0x1109, 0x1162, 0x11AB], NFKC: [0xC0CC], NFKD: [0x1109, 0x1162, 0x11AB] }, +{ source: [0xC0CD], NFC: [0xC0CD], NFD: [0x1109, 0x1162, 0x11AC], NFKC: [0xC0CD], NFKD: [0x1109, 0x1162, 0x11AC] }, +{ source: [0xC0CE], NFC: [0xC0CE], NFD: [0x1109, 0x1162, 0x11AD], NFKC: [0xC0CE], NFKD: [0x1109, 0x1162, 0x11AD] }, +{ source: [0xC0CF], NFC: [0xC0CF], NFD: [0x1109, 0x1162, 0x11AE], NFKC: [0xC0CF], NFKD: [0x1109, 0x1162, 0x11AE] }, +{ source: [0xC0D0], NFC: [0xC0D0], NFD: [0x1109, 0x1162, 0x11AF], NFKC: [0xC0D0], NFKD: [0x1109, 0x1162, 0x11AF] }, +{ source: [0xC0D1], NFC: [0xC0D1], NFD: [0x1109, 0x1162, 0x11B0], NFKC: [0xC0D1], NFKD: [0x1109, 0x1162, 0x11B0] }, +{ source: [0xC0D2], NFC: [0xC0D2], NFD: [0x1109, 0x1162, 0x11B1], NFKC: [0xC0D2], NFKD: [0x1109, 0x1162, 0x11B1] }, +{ source: [0xC0D3], NFC: [0xC0D3], NFD: [0x1109, 0x1162, 0x11B2], NFKC: [0xC0D3], NFKD: [0x1109, 0x1162, 0x11B2] }, +{ source: [0xC0D4], NFC: [0xC0D4], NFD: [0x1109, 0x1162, 0x11B3], NFKC: [0xC0D4], NFKD: [0x1109, 0x1162, 0x11B3] }, +{ source: [0xC0D5], NFC: [0xC0D5], NFD: [0x1109, 0x1162, 0x11B4], NFKC: [0xC0D5], NFKD: [0x1109, 0x1162, 0x11B4] }, +{ source: [0xC0D6], NFC: [0xC0D6], NFD: [0x1109, 0x1162, 0x11B5], NFKC: [0xC0D6], NFKD: [0x1109, 0x1162, 0x11B5] }, +{ source: [0xC0D7], NFC: [0xC0D7], NFD: [0x1109, 0x1162, 0x11B6], NFKC: [0xC0D7], NFKD: [0x1109, 0x1162, 0x11B6] }, +{ source: [0xC0D8], NFC: [0xC0D8], NFD: [0x1109, 0x1162, 0x11B7], NFKC: [0xC0D8], NFKD: [0x1109, 0x1162, 0x11B7] }, +{ source: [0xC0D9], NFC: [0xC0D9], NFD: [0x1109, 0x1162, 0x11B8], NFKC: [0xC0D9], NFKD: [0x1109, 0x1162, 0x11B8] }, +{ source: [0xC0DA], NFC: [0xC0DA], NFD: [0x1109, 0x1162, 0x11B9], NFKC: [0xC0DA], NFKD: [0x1109, 0x1162, 0x11B9] }, +{ source: [0xC0DB], NFC: [0xC0DB], NFD: [0x1109, 0x1162, 0x11BA], NFKC: [0xC0DB], NFKD: [0x1109, 0x1162, 0x11BA] }, +{ source: [0xC0DC], NFC: [0xC0DC], NFD: [0x1109, 0x1162, 0x11BB], NFKC: [0xC0DC], NFKD: [0x1109, 0x1162, 0x11BB] }, +{ source: [0xC0DD], NFC: [0xC0DD], NFD: [0x1109, 0x1162, 0x11BC], NFKC: [0xC0DD], NFKD: [0x1109, 0x1162, 0x11BC] }, +{ source: [0xC0DE], NFC: [0xC0DE], NFD: [0x1109, 0x1162, 0x11BD], NFKC: [0xC0DE], NFKD: [0x1109, 0x1162, 0x11BD] }, +{ source: [0xC0DF], NFC: [0xC0DF], NFD: [0x1109, 0x1162, 0x11BE], NFKC: [0xC0DF], NFKD: [0x1109, 0x1162, 0x11BE] }, +{ source: [0xC0E0], NFC: [0xC0E0], NFD: [0x1109, 0x1162, 0x11BF], NFKC: [0xC0E0], NFKD: [0x1109, 0x1162, 0x11BF] }, +{ source: [0xC0E1], NFC: [0xC0E1], NFD: [0x1109, 0x1162, 0x11C0], NFKC: [0xC0E1], NFKD: [0x1109, 0x1162, 0x11C0] }, +{ source: [0xC0E2], NFC: [0xC0E2], NFD: [0x1109, 0x1162, 0x11C1], NFKC: [0xC0E2], NFKD: [0x1109, 0x1162, 0x11C1] }, +{ source: [0xC0E3], NFC: [0xC0E3], NFD: [0x1109, 0x1162, 0x11C2], NFKC: [0xC0E3], NFKD: [0x1109, 0x1162, 0x11C2] }, +{ source: [0xC0E4], NFC: [0xC0E4], NFD: [0x1109, 0x1163], NFKC: [0xC0E4], NFKD: [0x1109, 0x1163] }, +{ source: [0xC0E5], NFC: [0xC0E5], NFD: [0x1109, 0x1163, 0x11A8], NFKC: [0xC0E5], NFKD: [0x1109, 0x1163, 0x11A8] }, +{ source: [0xC0E6], NFC: [0xC0E6], NFD: [0x1109, 0x1163, 0x11A9], NFKC: [0xC0E6], NFKD: [0x1109, 0x1163, 0x11A9] }, +{ source: [0xC0E7], NFC: [0xC0E7], NFD: [0x1109, 0x1163, 0x11AA], NFKC: [0xC0E7], NFKD: [0x1109, 0x1163, 0x11AA] }, +{ source: [0xC0E8], NFC: [0xC0E8], NFD: [0x1109, 0x1163, 0x11AB], NFKC: [0xC0E8], NFKD: [0x1109, 0x1163, 0x11AB] }, +{ source: [0xC0E9], NFC: [0xC0E9], NFD: [0x1109, 0x1163, 0x11AC], NFKC: [0xC0E9], NFKD: [0x1109, 0x1163, 0x11AC] }, +{ source: [0xC0EA], NFC: [0xC0EA], NFD: [0x1109, 0x1163, 0x11AD], NFKC: [0xC0EA], NFKD: [0x1109, 0x1163, 0x11AD] }, +{ source: [0xC0EB], NFC: [0xC0EB], NFD: [0x1109, 0x1163, 0x11AE], NFKC: [0xC0EB], NFKD: [0x1109, 0x1163, 0x11AE] }, +{ source: [0xC0EC], NFC: [0xC0EC], NFD: [0x1109, 0x1163, 0x11AF], NFKC: [0xC0EC], NFKD: [0x1109, 0x1163, 0x11AF] }, +{ source: [0xC0ED], NFC: [0xC0ED], NFD: [0x1109, 0x1163, 0x11B0], NFKC: [0xC0ED], NFKD: [0x1109, 0x1163, 0x11B0] }, +{ source: [0xC0EE], NFC: [0xC0EE], NFD: [0x1109, 0x1163, 0x11B1], NFKC: [0xC0EE], NFKD: [0x1109, 0x1163, 0x11B1] }, +{ source: [0xC0EF], NFC: [0xC0EF], NFD: [0x1109, 0x1163, 0x11B2], NFKC: [0xC0EF], NFKD: [0x1109, 0x1163, 0x11B2] }, +{ source: [0xC0F0], NFC: [0xC0F0], NFD: [0x1109, 0x1163, 0x11B3], NFKC: [0xC0F0], NFKD: [0x1109, 0x1163, 0x11B3] }, +{ source: [0xC0F1], NFC: [0xC0F1], NFD: [0x1109, 0x1163, 0x11B4], NFKC: [0xC0F1], NFKD: [0x1109, 0x1163, 0x11B4] }, +{ source: [0xC0F2], NFC: [0xC0F2], NFD: [0x1109, 0x1163, 0x11B5], NFKC: [0xC0F2], NFKD: [0x1109, 0x1163, 0x11B5] }, +{ source: [0xC0F3], NFC: [0xC0F3], NFD: [0x1109, 0x1163, 0x11B6], NFKC: [0xC0F3], NFKD: [0x1109, 0x1163, 0x11B6] }, +{ source: [0xC0F4], NFC: [0xC0F4], NFD: [0x1109, 0x1163, 0x11B7], NFKC: [0xC0F4], NFKD: [0x1109, 0x1163, 0x11B7] }, +{ source: [0xC0F5], NFC: [0xC0F5], NFD: [0x1109, 0x1163, 0x11B8], NFKC: [0xC0F5], NFKD: [0x1109, 0x1163, 0x11B8] }, +{ source: [0xC0F6], NFC: [0xC0F6], NFD: [0x1109, 0x1163, 0x11B9], NFKC: [0xC0F6], NFKD: [0x1109, 0x1163, 0x11B9] }, +{ source: [0xC0F7], NFC: [0xC0F7], NFD: [0x1109, 0x1163, 0x11BA], NFKC: [0xC0F7], NFKD: [0x1109, 0x1163, 0x11BA] }, +{ source: [0xC0F8], NFC: [0xC0F8], NFD: [0x1109, 0x1163, 0x11BB], NFKC: [0xC0F8], NFKD: [0x1109, 0x1163, 0x11BB] }, +{ source: [0xC0F9], NFC: [0xC0F9], NFD: [0x1109, 0x1163, 0x11BC], NFKC: [0xC0F9], NFKD: [0x1109, 0x1163, 0x11BC] }, +{ source: [0xC0FA], NFC: [0xC0FA], NFD: [0x1109, 0x1163, 0x11BD], NFKC: [0xC0FA], NFKD: [0x1109, 0x1163, 0x11BD] }, +{ source: [0xC0FB], NFC: [0xC0FB], NFD: [0x1109, 0x1163, 0x11BE], NFKC: [0xC0FB], NFKD: [0x1109, 0x1163, 0x11BE] }, +{ source: [0xC0FC], NFC: [0xC0FC], NFD: [0x1109, 0x1163, 0x11BF], NFKC: [0xC0FC], NFKD: [0x1109, 0x1163, 0x11BF] }, +{ source: [0xC0FD], NFC: [0xC0FD], NFD: [0x1109, 0x1163, 0x11C0], NFKC: [0xC0FD], NFKD: [0x1109, 0x1163, 0x11C0] }, +{ source: [0xC0FE], NFC: [0xC0FE], NFD: [0x1109, 0x1163, 0x11C1], NFKC: [0xC0FE], NFKD: [0x1109, 0x1163, 0x11C1] }, +{ source: [0xC0FF], NFC: [0xC0FF], NFD: [0x1109, 0x1163, 0x11C2], NFKC: [0xC0FF], NFKD: [0x1109, 0x1163, 0x11C2] }, +{ source: [0xC100], NFC: [0xC100], NFD: [0x1109, 0x1164], NFKC: [0xC100], NFKD: [0x1109, 0x1164] }, +{ source: [0xC101], NFC: [0xC101], NFD: [0x1109, 0x1164, 0x11A8], NFKC: [0xC101], NFKD: [0x1109, 0x1164, 0x11A8] }, +{ source: [0xC102], NFC: [0xC102], NFD: [0x1109, 0x1164, 0x11A9], NFKC: [0xC102], NFKD: [0x1109, 0x1164, 0x11A9] }, +{ source: [0xC103], NFC: [0xC103], NFD: [0x1109, 0x1164, 0x11AA], NFKC: [0xC103], NFKD: [0x1109, 0x1164, 0x11AA] }, +{ source: [0xC104], NFC: [0xC104], NFD: [0x1109, 0x1164, 0x11AB], NFKC: [0xC104], NFKD: [0x1109, 0x1164, 0x11AB] }, +{ source: [0xC105], NFC: [0xC105], NFD: [0x1109, 0x1164, 0x11AC], NFKC: [0xC105], NFKD: [0x1109, 0x1164, 0x11AC] }, +{ source: [0xC106], NFC: [0xC106], NFD: [0x1109, 0x1164, 0x11AD], NFKC: [0xC106], NFKD: [0x1109, 0x1164, 0x11AD] }, +{ source: [0xC107], NFC: [0xC107], NFD: [0x1109, 0x1164, 0x11AE], NFKC: [0xC107], NFKD: [0x1109, 0x1164, 0x11AE] }, +{ source: [0xC108], NFC: [0xC108], NFD: [0x1109, 0x1164, 0x11AF], NFKC: [0xC108], NFKD: [0x1109, 0x1164, 0x11AF] }, +{ source: [0xC109], NFC: [0xC109], NFD: [0x1109, 0x1164, 0x11B0], NFKC: [0xC109], NFKD: [0x1109, 0x1164, 0x11B0] }, +{ source: [0xC10A], NFC: [0xC10A], NFD: [0x1109, 0x1164, 0x11B1], NFKC: [0xC10A], NFKD: [0x1109, 0x1164, 0x11B1] }, +{ source: [0xC10B], NFC: [0xC10B], NFD: [0x1109, 0x1164, 0x11B2], NFKC: [0xC10B], NFKD: [0x1109, 0x1164, 0x11B2] }, +{ source: [0xC10C], NFC: [0xC10C], NFD: [0x1109, 0x1164, 0x11B3], NFKC: [0xC10C], NFKD: [0x1109, 0x1164, 0x11B3] }, +{ source: [0xC10D], NFC: [0xC10D], NFD: [0x1109, 0x1164, 0x11B4], NFKC: [0xC10D], NFKD: [0x1109, 0x1164, 0x11B4] }, +{ source: [0xC10E], NFC: [0xC10E], NFD: [0x1109, 0x1164, 0x11B5], NFKC: [0xC10E], NFKD: [0x1109, 0x1164, 0x11B5] }, +{ source: [0xC10F], NFC: [0xC10F], NFD: [0x1109, 0x1164, 0x11B6], NFKC: [0xC10F], NFKD: [0x1109, 0x1164, 0x11B6] }, +{ source: [0xC110], NFC: [0xC110], NFD: [0x1109, 0x1164, 0x11B7], NFKC: [0xC110], NFKD: [0x1109, 0x1164, 0x11B7] }, +{ source: [0xC111], NFC: [0xC111], NFD: [0x1109, 0x1164, 0x11B8], NFKC: [0xC111], NFKD: [0x1109, 0x1164, 0x11B8] }, +{ source: [0xC112], NFC: [0xC112], NFD: [0x1109, 0x1164, 0x11B9], NFKC: [0xC112], NFKD: [0x1109, 0x1164, 0x11B9] }, +{ source: [0xC113], NFC: [0xC113], NFD: [0x1109, 0x1164, 0x11BA], NFKC: [0xC113], NFKD: [0x1109, 0x1164, 0x11BA] }, +{ source: [0xC114], NFC: [0xC114], NFD: [0x1109, 0x1164, 0x11BB], NFKC: [0xC114], NFKD: [0x1109, 0x1164, 0x11BB] }, +{ source: [0xC115], NFC: [0xC115], NFD: [0x1109, 0x1164, 0x11BC], NFKC: [0xC115], NFKD: [0x1109, 0x1164, 0x11BC] }, +{ source: [0xC116], NFC: [0xC116], NFD: [0x1109, 0x1164, 0x11BD], NFKC: [0xC116], NFKD: [0x1109, 0x1164, 0x11BD] }, +{ source: [0xC117], NFC: [0xC117], NFD: [0x1109, 0x1164, 0x11BE], NFKC: [0xC117], NFKD: [0x1109, 0x1164, 0x11BE] }, +{ source: [0xC118], NFC: [0xC118], NFD: [0x1109, 0x1164, 0x11BF], NFKC: [0xC118], NFKD: [0x1109, 0x1164, 0x11BF] }, +{ source: [0xC119], NFC: [0xC119], NFD: [0x1109, 0x1164, 0x11C0], NFKC: [0xC119], NFKD: [0x1109, 0x1164, 0x11C0] }, +{ source: [0xC11A], NFC: [0xC11A], NFD: [0x1109, 0x1164, 0x11C1], NFKC: [0xC11A], NFKD: [0x1109, 0x1164, 0x11C1] }, +{ source: [0xC11B], NFC: [0xC11B], NFD: [0x1109, 0x1164, 0x11C2], NFKC: [0xC11B], NFKD: [0x1109, 0x1164, 0x11C2] }, +{ source: [0xC11C], NFC: [0xC11C], NFD: [0x1109, 0x1165], NFKC: [0xC11C], NFKD: [0x1109, 0x1165] }, +{ source: [0xC11D], NFC: [0xC11D], NFD: [0x1109, 0x1165, 0x11A8], NFKC: [0xC11D], NFKD: [0x1109, 0x1165, 0x11A8] }, +{ source: [0xC11E], NFC: [0xC11E], NFD: [0x1109, 0x1165, 0x11A9], NFKC: [0xC11E], NFKD: [0x1109, 0x1165, 0x11A9] }, +{ source: [0xC11F], NFC: [0xC11F], NFD: [0x1109, 0x1165, 0x11AA], NFKC: [0xC11F], NFKD: [0x1109, 0x1165, 0x11AA] }, +{ source: [0xC120], NFC: [0xC120], NFD: [0x1109, 0x1165, 0x11AB], NFKC: [0xC120], NFKD: [0x1109, 0x1165, 0x11AB] }, +{ source: [0xC121], NFC: [0xC121], NFD: [0x1109, 0x1165, 0x11AC], NFKC: [0xC121], NFKD: [0x1109, 0x1165, 0x11AC] }, +{ source: [0xC122], NFC: [0xC122], NFD: [0x1109, 0x1165, 0x11AD], NFKC: [0xC122], NFKD: [0x1109, 0x1165, 0x11AD] }, +{ source: [0xC123], NFC: [0xC123], NFD: [0x1109, 0x1165, 0x11AE], NFKC: [0xC123], NFKD: [0x1109, 0x1165, 0x11AE] }, +{ source: [0xC124], NFC: [0xC124], NFD: [0x1109, 0x1165, 0x11AF], NFKC: [0xC124], NFKD: [0x1109, 0x1165, 0x11AF] }, +{ source: [0xC125], NFC: [0xC125], NFD: [0x1109, 0x1165, 0x11B0], NFKC: [0xC125], NFKD: [0x1109, 0x1165, 0x11B0] }, +{ source: [0xC126], NFC: [0xC126], NFD: [0x1109, 0x1165, 0x11B1], NFKC: [0xC126], NFKD: [0x1109, 0x1165, 0x11B1] }, +{ source: [0xC127], NFC: [0xC127], NFD: [0x1109, 0x1165, 0x11B2], NFKC: [0xC127], NFKD: [0x1109, 0x1165, 0x11B2] }, +{ source: [0xC128], NFC: [0xC128], NFD: [0x1109, 0x1165, 0x11B3], NFKC: [0xC128], NFKD: [0x1109, 0x1165, 0x11B3] }, +{ source: [0xC129], NFC: [0xC129], NFD: [0x1109, 0x1165, 0x11B4], NFKC: [0xC129], NFKD: [0x1109, 0x1165, 0x11B4] }, +{ source: [0xC12A], NFC: [0xC12A], NFD: [0x1109, 0x1165, 0x11B5], NFKC: [0xC12A], NFKD: [0x1109, 0x1165, 0x11B5] }, +{ source: [0xC12B], NFC: [0xC12B], NFD: [0x1109, 0x1165, 0x11B6], NFKC: [0xC12B], NFKD: [0x1109, 0x1165, 0x11B6] }, +{ source: [0xC12C], NFC: [0xC12C], NFD: [0x1109, 0x1165, 0x11B7], NFKC: [0xC12C], NFKD: [0x1109, 0x1165, 0x11B7] }, +{ source: [0xC12D], NFC: [0xC12D], NFD: [0x1109, 0x1165, 0x11B8], NFKC: [0xC12D], NFKD: [0x1109, 0x1165, 0x11B8] }, +{ source: [0xC12E], NFC: [0xC12E], NFD: [0x1109, 0x1165, 0x11B9], NFKC: [0xC12E], NFKD: [0x1109, 0x1165, 0x11B9] }, +{ source: [0xC12F], NFC: [0xC12F], NFD: [0x1109, 0x1165, 0x11BA], NFKC: [0xC12F], NFKD: [0x1109, 0x1165, 0x11BA] }, +{ source: [0xC130], NFC: [0xC130], NFD: [0x1109, 0x1165, 0x11BB], NFKC: [0xC130], NFKD: [0x1109, 0x1165, 0x11BB] }, +{ source: [0xC131], NFC: [0xC131], NFD: [0x1109, 0x1165, 0x11BC], NFKC: [0xC131], NFKD: [0x1109, 0x1165, 0x11BC] }, +{ source: [0xC132], NFC: [0xC132], NFD: [0x1109, 0x1165, 0x11BD], NFKC: [0xC132], NFKD: [0x1109, 0x1165, 0x11BD] }, +{ source: [0xC133], NFC: [0xC133], NFD: [0x1109, 0x1165, 0x11BE], NFKC: [0xC133], NFKD: [0x1109, 0x1165, 0x11BE] }, +{ source: [0xC134], NFC: [0xC134], NFD: [0x1109, 0x1165, 0x11BF], NFKC: [0xC134], NFKD: [0x1109, 0x1165, 0x11BF] }, +{ source: [0xC135], NFC: [0xC135], NFD: [0x1109, 0x1165, 0x11C0], NFKC: [0xC135], NFKD: [0x1109, 0x1165, 0x11C0] }, +{ source: [0xC136], NFC: [0xC136], NFD: [0x1109, 0x1165, 0x11C1], NFKC: [0xC136], NFKD: [0x1109, 0x1165, 0x11C1] }, +{ source: [0xC137], NFC: [0xC137], NFD: [0x1109, 0x1165, 0x11C2], NFKC: [0xC137], NFKD: [0x1109, 0x1165, 0x11C2] }, +{ source: [0xC138], NFC: [0xC138], NFD: [0x1109, 0x1166], NFKC: [0xC138], NFKD: [0x1109, 0x1166] }, +{ source: [0xC139], NFC: [0xC139], NFD: [0x1109, 0x1166, 0x11A8], NFKC: [0xC139], NFKD: [0x1109, 0x1166, 0x11A8] }, +{ source: [0xC13A], NFC: [0xC13A], NFD: [0x1109, 0x1166, 0x11A9], NFKC: [0xC13A], NFKD: [0x1109, 0x1166, 0x11A9] }, +{ source: [0xC13B], NFC: [0xC13B], NFD: [0x1109, 0x1166, 0x11AA], NFKC: [0xC13B], NFKD: [0x1109, 0x1166, 0x11AA] }, +{ source: [0xC13C], NFC: [0xC13C], NFD: [0x1109, 0x1166, 0x11AB], NFKC: [0xC13C], NFKD: [0x1109, 0x1166, 0x11AB] }, +{ source: [0xC13D], NFC: [0xC13D], NFD: [0x1109, 0x1166, 0x11AC], NFKC: [0xC13D], NFKD: [0x1109, 0x1166, 0x11AC] }, +{ source: [0xC13E], NFC: [0xC13E], NFD: [0x1109, 0x1166, 0x11AD], NFKC: [0xC13E], NFKD: [0x1109, 0x1166, 0x11AD] }, +{ source: [0xC13F], NFC: [0xC13F], NFD: [0x1109, 0x1166, 0x11AE], NFKC: [0xC13F], NFKD: [0x1109, 0x1166, 0x11AE] }, +{ source: [0xC140], NFC: [0xC140], NFD: [0x1109, 0x1166, 0x11AF], NFKC: [0xC140], NFKD: [0x1109, 0x1166, 0x11AF] }, +{ source: [0xC141], NFC: [0xC141], NFD: [0x1109, 0x1166, 0x11B0], NFKC: [0xC141], NFKD: [0x1109, 0x1166, 0x11B0] }, +{ source: [0xC142], NFC: [0xC142], NFD: [0x1109, 0x1166, 0x11B1], NFKC: [0xC142], NFKD: [0x1109, 0x1166, 0x11B1] }, +{ source: [0xC143], NFC: [0xC143], NFD: [0x1109, 0x1166, 0x11B2], NFKC: [0xC143], NFKD: [0x1109, 0x1166, 0x11B2] }, +{ source: [0xC144], NFC: [0xC144], NFD: [0x1109, 0x1166, 0x11B3], NFKC: [0xC144], NFKD: [0x1109, 0x1166, 0x11B3] }, +{ source: [0xC145], NFC: [0xC145], NFD: [0x1109, 0x1166, 0x11B4], NFKC: [0xC145], NFKD: [0x1109, 0x1166, 0x11B4] }, +{ source: [0xC146], NFC: [0xC146], NFD: [0x1109, 0x1166, 0x11B5], NFKC: [0xC146], NFKD: [0x1109, 0x1166, 0x11B5] }, +{ source: [0xC147], NFC: [0xC147], NFD: [0x1109, 0x1166, 0x11B6], NFKC: [0xC147], NFKD: [0x1109, 0x1166, 0x11B6] }, +{ source: [0xC148], NFC: [0xC148], NFD: [0x1109, 0x1166, 0x11B7], NFKC: [0xC148], NFKD: [0x1109, 0x1166, 0x11B7] }, +{ source: [0xC149], NFC: [0xC149], NFD: [0x1109, 0x1166, 0x11B8], NFKC: [0xC149], NFKD: [0x1109, 0x1166, 0x11B8] }, +{ source: [0xC14A], NFC: [0xC14A], NFD: [0x1109, 0x1166, 0x11B9], NFKC: [0xC14A], NFKD: [0x1109, 0x1166, 0x11B9] }, +{ source: [0xC14B], NFC: [0xC14B], NFD: [0x1109, 0x1166, 0x11BA], NFKC: [0xC14B], NFKD: [0x1109, 0x1166, 0x11BA] }, +{ source: [0xC14C], NFC: [0xC14C], NFD: [0x1109, 0x1166, 0x11BB], NFKC: [0xC14C], NFKD: [0x1109, 0x1166, 0x11BB] }, +{ source: [0xC14D], NFC: [0xC14D], NFD: [0x1109, 0x1166, 0x11BC], NFKC: [0xC14D], NFKD: [0x1109, 0x1166, 0x11BC] }, +{ source: [0xC14E], NFC: [0xC14E], NFD: [0x1109, 0x1166, 0x11BD], NFKC: [0xC14E], NFKD: [0x1109, 0x1166, 0x11BD] }, +{ source: [0xC14F], NFC: [0xC14F], NFD: [0x1109, 0x1166, 0x11BE], NFKC: [0xC14F], NFKD: [0x1109, 0x1166, 0x11BE] }, +{ source: [0xC150], NFC: [0xC150], NFD: [0x1109, 0x1166, 0x11BF], NFKC: [0xC150], NFKD: [0x1109, 0x1166, 0x11BF] }, +{ source: [0xC151], NFC: [0xC151], NFD: [0x1109, 0x1166, 0x11C0], NFKC: [0xC151], NFKD: [0x1109, 0x1166, 0x11C0] }, +{ source: [0xC152], NFC: [0xC152], NFD: [0x1109, 0x1166, 0x11C1], NFKC: [0xC152], NFKD: [0x1109, 0x1166, 0x11C1] }, +{ source: [0xC153], NFC: [0xC153], NFD: [0x1109, 0x1166, 0x11C2], NFKC: [0xC153], NFKD: [0x1109, 0x1166, 0x11C2] }, +{ source: [0xC154], NFC: [0xC154], NFD: [0x1109, 0x1167], NFKC: [0xC154], NFKD: [0x1109, 0x1167] }, +{ source: [0xC155], NFC: [0xC155], NFD: [0x1109, 0x1167, 0x11A8], NFKC: [0xC155], NFKD: [0x1109, 0x1167, 0x11A8] }, +{ source: [0xC156], NFC: [0xC156], NFD: [0x1109, 0x1167, 0x11A9], NFKC: [0xC156], NFKD: [0x1109, 0x1167, 0x11A9] }, +{ source: [0xC157], NFC: [0xC157], NFD: [0x1109, 0x1167, 0x11AA], NFKC: [0xC157], NFKD: [0x1109, 0x1167, 0x11AA] }, +{ source: [0xC158], NFC: [0xC158], NFD: [0x1109, 0x1167, 0x11AB], NFKC: [0xC158], NFKD: [0x1109, 0x1167, 0x11AB] }, +{ source: [0xC159], NFC: [0xC159], NFD: [0x1109, 0x1167, 0x11AC], NFKC: [0xC159], NFKD: [0x1109, 0x1167, 0x11AC] }, +{ source: [0xC15A], NFC: [0xC15A], NFD: [0x1109, 0x1167, 0x11AD], NFKC: [0xC15A], NFKD: [0x1109, 0x1167, 0x11AD] }, +{ source: [0xC15B], NFC: [0xC15B], NFD: [0x1109, 0x1167, 0x11AE], NFKC: [0xC15B], NFKD: [0x1109, 0x1167, 0x11AE] }, +{ source: [0xC15C], NFC: [0xC15C], NFD: [0x1109, 0x1167, 0x11AF], NFKC: [0xC15C], NFKD: [0x1109, 0x1167, 0x11AF] }, +{ source: [0xC15D], NFC: [0xC15D], NFD: [0x1109, 0x1167, 0x11B0], NFKC: [0xC15D], NFKD: [0x1109, 0x1167, 0x11B0] }, +{ source: [0xC15E], NFC: [0xC15E], NFD: [0x1109, 0x1167, 0x11B1], NFKC: [0xC15E], NFKD: [0x1109, 0x1167, 0x11B1] }, +{ source: [0xC15F], NFC: [0xC15F], NFD: [0x1109, 0x1167, 0x11B2], NFKC: [0xC15F], NFKD: [0x1109, 0x1167, 0x11B2] }, +{ source: [0xC160], NFC: [0xC160], NFD: [0x1109, 0x1167, 0x11B3], NFKC: [0xC160], NFKD: [0x1109, 0x1167, 0x11B3] }, +{ source: [0xC161], NFC: [0xC161], NFD: [0x1109, 0x1167, 0x11B4], NFKC: [0xC161], NFKD: [0x1109, 0x1167, 0x11B4] }, +{ source: [0xC162], NFC: [0xC162], NFD: [0x1109, 0x1167, 0x11B5], NFKC: [0xC162], NFKD: [0x1109, 0x1167, 0x11B5] }, +{ source: [0xC163], NFC: [0xC163], NFD: [0x1109, 0x1167, 0x11B6], NFKC: [0xC163], NFKD: [0x1109, 0x1167, 0x11B6] }, +{ source: [0xC164], NFC: [0xC164], NFD: [0x1109, 0x1167, 0x11B7], NFKC: [0xC164], NFKD: [0x1109, 0x1167, 0x11B7] }, +{ source: [0xC165], NFC: [0xC165], NFD: [0x1109, 0x1167, 0x11B8], NFKC: [0xC165], NFKD: [0x1109, 0x1167, 0x11B8] }, +{ source: [0xC166], NFC: [0xC166], NFD: [0x1109, 0x1167, 0x11B9], NFKC: [0xC166], NFKD: [0x1109, 0x1167, 0x11B9] }, +{ source: [0xC167], NFC: [0xC167], NFD: [0x1109, 0x1167, 0x11BA], NFKC: [0xC167], NFKD: [0x1109, 0x1167, 0x11BA] }, +{ source: [0xC168], NFC: [0xC168], NFD: [0x1109, 0x1167, 0x11BB], NFKC: [0xC168], NFKD: [0x1109, 0x1167, 0x11BB] }, +{ source: [0xC169], NFC: [0xC169], NFD: [0x1109, 0x1167, 0x11BC], NFKC: [0xC169], NFKD: [0x1109, 0x1167, 0x11BC] }, +{ source: [0xC16A], NFC: [0xC16A], NFD: [0x1109, 0x1167, 0x11BD], NFKC: [0xC16A], NFKD: [0x1109, 0x1167, 0x11BD] }, +{ source: [0xC16B], NFC: [0xC16B], NFD: [0x1109, 0x1167, 0x11BE], NFKC: [0xC16B], NFKD: [0x1109, 0x1167, 0x11BE] }, +{ source: [0xC16C], NFC: [0xC16C], NFD: [0x1109, 0x1167, 0x11BF], NFKC: [0xC16C], NFKD: [0x1109, 0x1167, 0x11BF] }, +{ source: [0xC16D], NFC: [0xC16D], NFD: [0x1109, 0x1167, 0x11C0], NFKC: [0xC16D], NFKD: [0x1109, 0x1167, 0x11C0] }, +{ source: [0xC16E], NFC: [0xC16E], NFD: [0x1109, 0x1167, 0x11C1], NFKC: [0xC16E], NFKD: [0x1109, 0x1167, 0x11C1] }, +{ source: [0xC16F], NFC: [0xC16F], NFD: [0x1109, 0x1167, 0x11C2], NFKC: [0xC16F], NFKD: [0x1109, 0x1167, 0x11C2] }, +{ source: [0xC170], NFC: [0xC170], NFD: [0x1109, 0x1168], NFKC: [0xC170], NFKD: [0x1109, 0x1168] }, +{ source: [0xC171], NFC: [0xC171], NFD: [0x1109, 0x1168, 0x11A8], NFKC: [0xC171], NFKD: [0x1109, 0x1168, 0x11A8] }, +{ source: [0xC172], NFC: [0xC172], NFD: [0x1109, 0x1168, 0x11A9], NFKC: [0xC172], NFKD: [0x1109, 0x1168, 0x11A9] }, +{ source: [0xC173], NFC: [0xC173], NFD: [0x1109, 0x1168, 0x11AA], NFKC: [0xC173], NFKD: [0x1109, 0x1168, 0x11AA] }, +{ source: [0xC174], NFC: [0xC174], NFD: [0x1109, 0x1168, 0x11AB], NFKC: [0xC174], NFKD: [0x1109, 0x1168, 0x11AB] }, +{ source: [0xC175], NFC: [0xC175], NFD: [0x1109, 0x1168, 0x11AC], NFKC: [0xC175], NFKD: [0x1109, 0x1168, 0x11AC] }, +{ source: [0xC176], NFC: [0xC176], NFD: [0x1109, 0x1168, 0x11AD], NFKC: [0xC176], NFKD: [0x1109, 0x1168, 0x11AD] }, +{ source: [0xC177], NFC: [0xC177], NFD: [0x1109, 0x1168, 0x11AE], NFKC: [0xC177], NFKD: [0x1109, 0x1168, 0x11AE] }, +{ source: [0xC178], NFC: [0xC178], NFD: [0x1109, 0x1168, 0x11AF], NFKC: [0xC178], NFKD: [0x1109, 0x1168, 0x11AF] }, +{ source: [0xC179], NFC: [0xC179], NFD: [0x1109, 0x1168, 0x11B0], NFKC: [0xC179], NFKD: [0x1109, 0x1168, 0x11B0] }, +{ source: [0xC17A], NFC: [0xC17A], NFD: [0x1109, 0x1168, 0x11B1], NFKC: [0xC17A], NFKD: [0x1109, 0x1168, 0x11B1] }, +{ source: [0xC17B], NFC: [0xC17B], NFD: [0x1109, 0x1168, 0x11B2], NFKC: [0xC17B], NFKD: [0x1109, 0x1168, 0x11B2] }, +{ source: [0xC17C], NFC: [0xC17C], NFD: [0x1109, 0x1168, 0x11B3], NFKC: [0xC17C], NFKD: [0x1109, 0x1168, 0x11B3] }, +{ source: [0xC17D], NFC: [0xC17D], NFD: [0x1109, 0x1168, 0x11B4], NFKC: [0xC17D], NFKD: [0x1109, 0x1168, 0x11B4] }, +{ source: [0xC17E], NFC: [0xC17E], NFD: [0x1109, 0x1168, 0x11B5], NFKC: [0xC17E], NFKD: [0x1109, 0x1168, 0x11B5] }, +{ source: [0xC17F], NFC: [0xC17F], NFD: [0x1109, 0x1168, 0x11B6], NFKC: [0xC17F], NFKD: [0x1109, 0x1168, 0x11B6] }, +{ source: [0xC180], NFC: [0xC180], NFD: [0x1109, 0x1168, 0x11B7], NFKC: [0xC180], NFKD: [0x1109, 0x1168, 0x11B7] }, +{ source: [0xC181], NFC: [0xC181], NFD: [0x1109, 0x1168, 0x11B8], NFKC: [0xC181], NFKD: [0x1109, 0x1168, 0x11B8] }, +{ source: [0xC182], NFC: [0xC182], NFD: [0x1109, 0x1168, 0x11B9], NFKC: [0xC182], NFKD: [0x1109, 0x1168, 0x11B9] }, +{ source: [0xC183], NFC: [0xC183], NFD: [0x1109, 0x1168, 0x11BA], NFKC: [0xC183], NFKD: [0x1109, 0x1168, 0x11BA] }, +{ source: [0xC184], NFC: [0xC184], NFD: [0x1109, 0x1168, 0x11BB], NFKC: [0xC184], NFKD: [0x1109, 0x1168, 0x11BB] }, +{ source: [0xC185], NFC: [0xC185], NFD: [0x1109, 0x1168, 0x11BC], NFKC: [0xC185], NFKD: [0x1109, 0x1168, 0x11BC] }, +{ source: [0xC186], NFC: [0xC186], NFD: [0x1109, 0x1168, 0x11BD], NFKC: [0xC186], NFKD: [0x1109, 0x1168, 0x11BD] }, +{ source: [0xC187], NFC: [0xC187], NFD: [0x1109, 0x1168, 0x11BE], NFKC: [0xC187], NFKD: [0x1109, 0x1168, 0x11BE] }, +{ source: [0xC188], NFC: [0xC188], NFD: [0x1109, 0x1168, 0x11BF], NFKC: [0xC188], NFKD: [0x1109, 0x1168, 0x11BF] }, +{ source: [0xC189], NFC: [0xC189], NFD: [0x1109, 0x1168, 0x11C0], NFKC: [0xC189], NFKD: [0x1109, 0x1168, 0x11C0] }, +{ source: [0xC18A], NFC: [0xC18A], NFD: [0x1109, 0x1168, 0x11C1], NFKC: [0xC18A], NFKD: [0x1109, 0x1168, 0x11C1] }, +{ source: [0xC18B], NFC: [0xC18B], NFD: [0x1109, 0x1168, 0x11C2], NFKC: [0xC18B], NFKD: [0x1109, 0x1168, 0x11C2] }, +{ source: [0xC18C], NFC: [0xC18C], NFD: [0x1109, 0x1169], NFKC: [0xC18C], NFKD: [0x1109, 0x1169] }, +{ source: [0xC18D], NFC: [0xC18D], NFD: [0x1109, 0x1169, 0x11A8], NFKC: [0xC18D], NFKD: [0x1109, 0x1169, 0x11A8] }, +{ source: [0xC18E], NFC: [0xC18E], NFD: [0x1109, 0x1169, 0x11A9], NFKC: [0xC18E], NFKD: [0x1109, 0x1169, 0x11A9] }, +{ source: [0xC18F], NFC: [0xC18F], NFD: [0x1109, 0x1169, 0x11AA], NFKC: [0xC18F], NFKD: [0x1109, 0x1169, 0x11AA] }, +{ source: [0xC190], NFC: [0xC190], NFD: [0x1109, 0x1169, 0x11AB], NFKC: [0xC190], NFKD: [0x1109, 0x1169, 0x11AB] }, +{ source: [0xC191], NFC: [0xC191], NFD: [0x1109, 0x1169, 0x11AC], NFKC: [0xC191], NFKD: [0x1109, 0x1169, 0x11AC] }, +{ source: [0xC192], NFC: [0xC192], NFD: [0x1109, 0x1169, 0x11AD], NFKC: [0xC192], NFKD: [0x1109, 0x1169, 0x11AD] }, +{ source: [0xC193], NFC: [0xC193], NFD: [0x1109, 0x1169, 0x11AE], NFKC: [0xC193], NFKD: [0x1109, 0x1169, 0x11AE] }, +{ source: [0xC194], NFC: [0xC194], NFD: [0x1109, 0x1169, 0x11AF], NFKC: [0xC194], NFKD: [0x1109, 0x1169, 0x11AF] }, +{ source: [0xC195], NFC: [0xC195], NFD: [0x1109, 0x1169, 0x11B0], NFKC: [0xC195], NFKD: [0x1109, 0x1169, 0x11B0] }, +{ source: [0xC196], NFC: [0xC196], NFD: [0x1109, 0x1169, 0x11B1], NFKC: [0xC196], NFKD: [0x1109, 0x1169, 0x11B1] }, +{ source: [0xC197], NFC: [0xC197], NFD: [0x1109, 0x1169, 0x11B2], NFKC: [0xC197], NFKD: [0x1109, 0x1169, 0x11B2] }, +{ source: [0xC198], NFC: [0xC198], NFD: [0x1109, 0x1169, 0x11B3], NFKC: [0xC198], NFKD: [0x1109, 0x1169, 0x11B3] }, +{ source: [0xC199], NFC: [0xC199], NFD: [0x1109, 0x1169, 0x11B4], NFKC: [0xC199], NFKD: [0x1109, 0x1169, 0x11B4] }, +{ source: [0xC19A], NFC: [0xC19A], NFD: [0x1109, 0x1169, 0x11B5], NFKC: [0xC19A], NFKD: [0x1109, 0x1169, 0x11B5] }, +{ source: [0xC19B], NFC: [0xC19B], NFD: [0x1109, 0x1169, 0x11B6], NFKC: [0xC19B], NFKD: [0x1109, 0x1169, 0x11B6] }, +{ source: [0xC19C], NFC: [0xC19C], NFD: [0x1109, 0x1169, 0x11B7], NFKC: [0xC19C], NFKD: [0x1109, 0x1169, 0x11B7] }, +{ source: [0xC19D], NFC: [0xC19D], NFD: [0x1109, 0x1169, 0x11B8], NFKC: [0xC19D], NFKD: [0x1109, 0x1169, 0x11B8] }, +{ source: [0xC19E], NFC: [0xC19E], NFD: [0x1109, 0x1169, 0x11B9], NFKC: [0xC19E], NFKD: [0x1109, 0x1169, 0x11B9] }, +{ source: [0xC19F], NFC: [0xC19F], NFD: [0x1109, 0x1169, 0x11BA], NFKC: [0xC19F], NFKD: [0x1109, 0x1169, 0x11BA] }, +{ source: [0xC1A0], NFC: [0xC1A0], NFD: [0x1109, 0x1169, 0x11BB], NFKC: [0xC1A0], NFKD: [0x1109, 0x1169, 0x11BB] }, +{ source: [0xC1A1], NFC: [0xC1A1], NFD: [0x1109, 0x1169, 0x11BC], NFKC: [0xC1A1], NFKD: [0x1109, 0x1169, 0x11BC] }, +{ source: [0xC1A2], NFC: [0xC1A2], NFD: [0x1109, 0x1169, 0x11BD], NFKC: [0xC1A2], NFKD: [0x1109, 0x1169, 0x11BD] }, +{ source: [0xC1A3], NFC: [0xC1A3], NFD: [0x1109, 0x1169, 0x11BE], NFKC: [0xC1A3], NFKD: [0x1109, 0x1169, 0x11BE] }, +{ source: [0xC1A4], NFC: [0xC1A4], NFD: [0x1109, 0x1169, 0x11BF], NFKC: [0xC1A4], NFKD: [0x1109, 0x1169, 0x11BF] }, +{ source: [0xC1A5], NFC: [0xC1A5], NFD: [0x1109, 0x1169, 0x11C0], NFKC: [0xC1A5], NFKD: [0x1109, 0x1169, 0x11C0] }, +{ source: [0xC1A6], NFC: [0xC1A6], NFD: [0x1109, 0x1169, 0x11C1], NFKC: [0xC1A6], NFKD: [0x1109, 0x1169, 0x11C1] }, +{ source: [0xC1A7], NFC: [0xC1A7], NFD: [0x1109, 0x1169, 0x11C2], NFKC: [0xC1A7], NFKD: [0x1109, 0x1169, 0x11C2] }, +{ source: [0xC1A8], NFC: [0xC1A8], NFD: [0x1109, 0x116A], NFKC: [0xC1A8], NFKD: [0x1109, 0x116A] }, +{ source: [0xC1A9], NFC: [0xC1A9], NFD: [0x1109, 0x116A, 0x11A8], NFKC: [0xC1A9], NFKD: [0x1109, 0x116A, 0x11A8] }, +{ source: [0xC1AA], NFC: [0xC1AA], NFD: [0x1109, 0x116A, 0x11A9], NFKC: [0xC1AA], NFKD: [0x1109, 0x116A, 0x11A9] }, +{ source: [0xC1AB], NFC: [0xC1AB], NFD: [0x1109, 0x116A, 0x11AA], NFKC: [0xC1AB], NFKD: [0x1109, 0x116A, 0x11AA] }, +{ source: [0xC1AC], NFC: [0xC1AC], NFD: [0x1109, 0x116A, 0x11AB], NFKC: [0xC1AC], NFKD: [0x1109, 0x116A, 0x11AB] }, +{ source: [0xC1AD], NFC: [0xC1AD], NFD: [0x1109, 0x116A, 0x11AC], NFKC: [0xC1AD], NFKD: [0x1109, 0x116A, 0x11AC] }, +{ source: [0xC1AE], NFC: [0xC1AE], NFD: [0x1109, 0x116A, 0x11AD], NFKC: [0xC1AE], NFKD: [0x1109, 0x116A, 0x11AD] }, +{ source: [0xC1AF], NFC: [0xC1AF], NFD: [0x1109, 0x116A, 0x11AE], NFKC: [0xC1AF], NFKD: [0x1109, 0x116A, 0x11AE] }, +{ source: [0xC1B0], NFC: [0xC1B0], NFD: [0x1109, 0x116A, 0x11AF], NFKC: [0xC1B0], NFKD: [0x1109, 0x116A, 0x11AF] }, +{ source: [0xC1B1], NFC: [0xC1B1], NFD: [0x1109, 0x116A, 0x11B0], NFKC: [0xC1B1], NFKD: [0x1109, 0x116A, 0x11B0] }, +{ source: [0xC1B2], NFC: [0xC1B2], NFD: [0x1109, 0x116A, 0x11B1], NFKC: [0xC1B2], NFKD: [0x1109, 0x116A, 0x11B1] }, +{ source: [0xC1B3], NFC: [0xC1B3], NFD: [0x1109, 0x116A, 0x11B2], NFKC: [0xC1B3], NFKD: [0x1109, 0x116A, 0x11B2] }, +{ source: [0xC1B4], NFC: [0xC1B4], NFD: [0x1109, 0x116A, 0x11B3], NFKC: [0xC1B4], NFKD: [0x1109, 0x116A, 0x11B3] }, +{ source: [0xC1B5], NFC: [0xC1B5], NFD: [0x1109, 0x116A, 0x11B4], NFKC: [0xC1B5], NFKD: [0x1109, 0x116A, 0x11B4] }, +{ source: [0xC1B6], NFC: [0xC1B6], NFD: [0x1109, 0x116A, 0x11B5], NFKC: [0xC1B6], NFKD: [0x1109, 0x116A, 0x11B5] }, +{ source: [0xC1B7], NFC: [0xC1B7], NFD: [0x1109, 0x116A, 0x11B6], NFKC: [0xC1B7], NFKD: [0x1109, 0x116A, 0x11B6] }, +{ source: [0xC1B8], NFC: [0xC1B8], NFD: [0x1109, 0x116A, 0x11B7], NFKC: [0xC1B8], NFKD: [0x1109, 0x116A, 0x11B7] }, +{ source: [0xC1B9], NFC: [0xC1B9], NFD: [0x1109, 0x116A, 0x11B8], NFKC: [0xC1B9], NFKD: [0x1109, 0x116A, 0x11B8] }, +{ source: [0xC1BA], NFC: [0xC1BA], NFD: [0x1109, 0x116A, 0x11B9], NFKC: [0xC1BA], NFKD: [0x1109, 0x116A, 0x11B9] }, +{ source: [0xC1BB], NFC: [0xC1BB], NFD: [0x1109, 0x116A, 0x11BA], NFKC: [0xC1BB], NFKD: [0x1109, 0x116A, 0x11BA] }, +{ source: [0xC1BC], NFC: [0xC1BC], NFD: [0x1109, 0x116A, 0x11BB], NFKC: [0xC1BC], NFKD: [0x1109, 0x116A, 0x11BB] }, +{ source: [0xC1BD], NFC: [0xC1BD], NFD: [0x1109, 0x116A, 0x11BC], NFKC: [0xC1BD], NFKD: [0x1109, 0x116A, 0x11BC] }, +{ source: [0xC1BE], NFC: [0xC1BE], NFD: [0x1109, 0x116A, 0x11BD], NFKC: [0xC1BE], NFKD: [0x1109, 0x116A, 0x11BD] }, +{ source: [0xC1BF], NFC: [0xC1BF], NFD: [0x1109, 0x116A, 0x11BE], NFKC: [0xC1BF], NFKD: [0x1109, 0x116A, 0x11BE] }, +{ source: [0xC1C0], NFC: [0xC1C0], NFD: [0x1109, 0x116A, 0x11BF], NFKC: [0xC1C0], NFKD: [0x1109, 0x116A, 0x11BF] }, +{ source: [0xC1C1], NFC: [0xC1C1], NFD: [0x1109, 0x116A, 0x11C0], NFKC: [0xC1C1], NFKD: [0x1109, 0x116A, 0x11C0] }, +{ source: [0xC1C2], NFC: [0xC1C2], NFD: [0x1109, 0x116A, 0x11C1], NFKC: [0xC1C2], NFKD: [0x1109, 0x116A, 0x11C1] }, +{ source: [0xC1C3], NFC: [0xC1C3], NFD: [0x1109, 0x116A, 0x11C2], NFKC: [0xC1C3], NFKD: [0x1109, 0x116A, 0x11C2] }, +{ source: [0xC1C4], NFC: [0xC1C4], NFD: [0x1109, 0x116B], NFKC: [0xC1C4], NFKD: [0x1109, 0x116B] }, +{ source: [0xC1C5], NFC: [0xC1C5], NFD: [0x1109, 0x116B, 0x11A8], NFKC: [0xC1C5], NFKD: [0x1109, 0x116B, 0x11A8] }, +{ source: [0xC1C6], NFC: [0xC1C6], NFD: [0x1109, 0x116B, 0x11A9], NFKC: [0xC1C6], NFKD: [0x1109, 0x116B, 0x11A9] }, +{ source: [0xC1C7], NFC: [0xC1C7], NFD: [0x1109, 0x116B, 0x11AA], NFKC: [0xC1C7], NFKD: [0x1109, 0x116B, 0x11AA] }, +{ source: [0xC1C8], NFC: [0xC1C8], NFD: [0x1109, 0x116B, 0x11AB], NFKC: [0xC1C8], NFKD: [0x1109, 0x116B, 0x11AB] }, +{ source: [0xC1C9], NFC: [0xC1C9], NFD: [0x1109, 0x116B, 0x11AC], NFKC: [0xC1C9], NFKD: [0x1109, 0x116B, 0x11AC] }, +{ source: [0xC1CA], NFC: [0xC1CA], NFD: [0x1109, 0x116B, 0x11AD], NFKC: [0xC1CA], NFKD: [0x1109, 0x116B, 0x11AD] }, +{ source: [0xC1CB], NFC: [0xC1CB], NFD: [0x1109, 0x116B, 0x11AE], NFKC: [0xC1CB], NFKD: [0x1109, 0x116B, 0x11AE] }, +{ source: [0xC1CC], NFC: [0xC1CC], NFD: [0x1109, 0x116B, 0x11AF], NFKC: [0xC1CC], NFKD: [0x1109, 0x116B, 0x11AF] }, +{ source: [0xC1CD], NFC: [0xC1CD], NFD: [0x1109, 0x116B, 0x11B0], NFKC: [0xC1CD], NFKD: [0x1109, 0x116B, 0x11B0] }, +{ source: [0xC1CE], NFC: [0xC1CE], NFD: [0x1109, 0x116B, 0x11B1], NFKC: [0xC1CE], NFKD: [0x1109, 0x116B, 0x11B1] }, +{ source: [0xC1CF], NFC: [0xC1CF], NFD: [0x1109, 0x116B, 0x11B2], NFKC: [0xC1CF], NFKD: [0x1109, 0x116B, 0x11B2] }, +{ source: [0xC1D0], NFC: [0xC1D0], NFD: [0x1109, 0x116B, 0x11B3], NFKC: [0xC1D0], NFKD: [0x1109, 0x116B, 0x11B3] }, +{ source: [0xC1D1], NFC: [0xC1D1], NFD: [0x1109, 0x116B, 0x11B4], NFKC: [0xC1D1], NFKD: [0x1109, 0x116B, 0x11B4] }, +{ source: [0xC1D2], NFC: [0xC1D2], NFD: [0x1109, 0x116B, 0x11B5], NFKC: [0xC1D2], NFKD: [0x1109, 0x116B, 0x11B5] }, +{ source: [0xC1D3], NFC: [0xC1D3], NFD: [0x1109, 0x116B, 0x11B6], NFKC: [0xC1D3], NFKD: [0x1109, 0x116B, 0x11B6] }, +{ source: [0xC1D4], NFC: [0xC1D4], NFD: [0x1109, 0x116B, 0x11B7], NFKC: [0xC1D4], NFKD: [0x1109, 0x116B, 0x11B7] }, +{ source: [0xC1D5], NFC: [0xC1D5], NFD: [0x1109, 0x116B, 0x11B8], NFKC: [0xC1D5], NFKD: [0x1109, 0x116B, 0x11B8] }, +{ source: [0xC1D6], NFC: [0xC1D6], NFD: [0x1109, 0x116B, 0x11B9], NFKC: [0xC1D6], NFKD: [0x1109, 0x116B, 0x11B9] }, +{ source: [0xC1D7], NFC: [0xC1D7], NFD: [0x1109, 0x116B, 0x11BA], NFKC: [0xC1D7], NFKD: [0x1109, 0x116B, 0x11BA] }, +{ source: [0xC1D8], NFC: [0xC1D8], NFD: [0x1109, 0x116B, 0x11BB], NFKC: [0xC1D8], NFKD: [0x1109, 0x116B, 0x11BB] }, +{ source: [0xC1D9], NFC: [0xC1D9], NFD: [0x1109, 0x116B, 0x11BC], NFKC: [0xC1D9], NFKD: [0x1109, 0x116B, 0x11BC] }, +{ source: [0xC1DA], NFC: [0xC1DA], NFD: [0x1109, 0x116B, 0x11BD], NFKC: [0xC1DA], NFKD: [0x1109, 0x116B, 0x11BD] }, +{ source: [0xC1DB], NFC: [0xC1DB], NFD: [0x1109, 0x116B, 0x11BE], NFKC: [0xC1DB], NFKD: [0x1109, 0x116B, 0x11BE] }, +{ source: [0xC1DC], NFC: [0xC1DC], NFD: [0x1109, 0x116B, 0x11BF], NFKC: [0xC1DC], NFKD: [0x1109, 0x116B, 0x11BF] }, +{ source: [0xC1DD], NFC: [0xC1DD], NFD: [0x1109, 0x116B, 0x11C0], NFKC: [0xC1DD], NFKD: [0x1109, 0x116B, 0x11C0] }, +{ source: [0xC1DE], NFC: [0xC1DE], NFD: [0x1109, 0x116B, 0x11C1], NFKC: [0xC1DE], NFKD: [0x1109, 0x116B, 0x11C1] }, +{ source: [0xC1DF], NFC: [0xC1DF], NFD: [0x1109, 0x116B, 0x11C2], NFKC: [0xC1DF], NFKD: [0x1109, 0x116B, 0x11C2] }, +{ source: [0xC1E0], NFC: [0xC1E0], NFD: [0x1109, 0x116C], NFKC: [0xC1E0], NFKD: [0x1109, 0x116C] }, +{ source: [0xC1E1], NFC: [0xC1E1], NFD: [0x1109, 0x116C, 0x11A8], NFKC: [0xC1E1], NFKD: [0x1109, 0x116C, 0x11A8] }, +{ source: [0xC1E2], NFC: [0xC1E2], NFD: [0x1109, 0x116C, 0x11A9], NFKC: [0xC1E2], NFKD: [0x1109, 0x116C, 0x11A9] }, +{ source: [0xC1E3], NFC: [0xC1E3], NFD: [0x1109, 0x116C, 0x11AA], NFKC: [0xC1E3], NFKD: [0x1109, 0x116C, 0x11AA] }, +{ source: [0xC1E4], NFC: [0xC1E4], NFD: [0x1109, 0x116C, 0x11AB], NFKC: [0xC1E4], NFKD: [0x1109, 0x116C, 0x11AB] }, +{ source: [0xC1E5], NFC: [0xC1E5], NFD: [0x1109, 0x116C, 0x11AC], NFKC: [0xC1E5], NFKD: [0x1109, 0x116C, 0x11AC] }, +{ source: [0xC1E6], NFC: [0xC1E6], NFD: [0x1109, 0x116C, 0x11AD], NFKC: [0xC1E6], NFKD: [0x1109, 0x116C, 0x11AD] }, +{ source: [0xC1E7], NFC: [0xC1E7], NFD: [0x1109, 0x116C, 0x11AE], NFKC: [0xC1E7], NFKD: [0x1109, 0x116C, 0x11AE] }, +{ source: [0xC1E8], NFC: [0xC1E8], NFD: [0x1109, 0x116C, 0x11AF], NFKC: [0xC1E8], NFKD: [0x1109, 0x116C, 0x11AF] }, +{ source: [0xC1E9], NFC: [0xC1E9], NFD: [0x1109, 0x116C, 0x11B0], NFKC: [0xC1E9], NFKD: [0x1109, 0x116C, 0x11B0] }, +{ source: [0xC1EA], NFC: [0xC1EA], NFD: [0x1109, 0x116C, 0x11B1], NFKC: [0xC1EA], NFKD: [0x1109, 0x116C, 0x11B1] }, +{ source: [0xC1EB], NFC: [0xC1EB], NFD: [0x1109, 0x116C, 0x11B2], NFKC: [0xC1EB], NFKD: [0x1109, 0x116C, 0x11B2] }, +{ source: [0xC1EC], NFC: [0xC1EC], NFD: [0x1109, 0x116C, 0x11B3], NFKC: [0xC1EC], NFKD: [0x1109, 0x116C, 0x11B3] }, +{ source: [0xC1ED], NFC: [0xC1ED], NFD: [0x1109, 0x116C, 0x11B4], NFKC: [0xC1ED], NFKD: [0x1109, 0x116C, 0x11B4] }, +{ source: [0xC1EE], NFC: [0xC1EE], NFD: [0x1109, 0x116C, 0x11B5], NFKC: [0xC1EE], NFKD: [0x1109, 0x116C, 0x11B5] }, +{ source: [0xC1EF], NFC: [0xC1EF], NFD: [0x1109, 0x116C, 0x11B6], NFKC: [0xC1EF], NFKD: [0x1109, 0x116C, 0x11B6] }, +{ source: [0xC1F0], NFC: [0xC1F0], NFD: [0x1109, 0x116C, 0x11B7], NFKC: [0xC1F0], NFKD: [0x1109, 0x116C, 0x11B7] }, +{ source: [0xC1F1], NFC: [0xC1F1], NFD: [0x1109, 0x116C, 0x11B8], NFKC: [0xC1F1], NFKD: [0x1109, 0x116C, 0x11B8] }, +{ source: [0xC1F2], NFC: [0xC1F2], NFD: [0x1109, 0x116C, 0x11B9], NFKC: [0xC1F2], NFKD: [0x1109, 0x116C, 0x11B9] }, +{ source: [0xC1F3], NFC: [0xC1F3], NFD: [0x1109, 0x116C, 0x11BA], NFKC: [0xC1F3], NFKD: [0x1109, 0x116C, 0x11BA] }, +{ source: [0xC1F4], NFC: [0xC1F4], NFD: [0x1109, 0x116C, 0x11BB], NFKC: [0xC1F4], NFKD: [0x1109, 0x116C, 0x11BB] }, +{ source: [0xC1F5], NFC: [0xC1F5], NFD: [0x1109, 0x116C, 0x11BC], NFKC: [0xC1F5], NFKD: [0x1109, 0x116C, 0x11BC] }, +{ source: [0xC1F6], NFC: [0xC1F6], NFD: [0x1109, 0x116C, 0x11BD], NFKC: [0xC1F6], NFKD: [0x1109, 0x116C, 0x11BD] }, +{ source: [0xC1F7], NFC: [0xC1F7], NFD: [0x1109, 0x116C, 0x11BE], NFKC: [0xC1F7], NFKD: [0x1109, 0x116C, 0x11BE] }, +{ source: [0xC1F8], NFC: [0xC1F8], NFD: [0x1109, 0x116C, 0x11BF], NFKC: [0xC1F8], NFKD: [0x1109, 0x116C, 0x11BF] }, +{ source: [0xC1F9], NFC: [0xC1F9], NFD: [0x1109, 0x116C, 0x11C0], NFKC: [0xC1F9], NFKD: [0x1109, 0x116C, 0x11C0] }, +{ source: [0xC1FA], NFC: [0xC1FA], NFD: [0x1109, 0x116C, 0x11C1], NFKC: [0xC1FA], NFKD: [0x1109, 0x116C, 0x11C1] }, +{ source: [0xC1FB], NFC: [0xC1FB], NFD: [0x1109, 0x116C, 0x11C2], NFKC: [0xC1FB], NFKD: [0x1109, 0x116C, 0x11C2] }, +{ source: [0xC1FC], NFC: [0xC1FC], NFD: [0x1109, 0x116D], NFKC: [0xC1FC], NFKD: [0x1109, 0x116D] }, +{ source: [0xC1FD], NFC: [0xC1FD], NFD: [0x1109, 0x116D, 0x11A8], NFKC: [0xC1FD], NFKD: [0x1109, 0x116D, 0x11A8] }, +{ source: [0xC1FE], NFC: [0xC1FE], NFD: [0x1109, 0x116D, 0x11A9], NFKC: [0xC1FE], NFKD: [0x1109, 0x116D, 0x11A9] }, +{ source: [0xC1FF], NFC: [0xC1FF], NFD: [0x1109, 0x116D, 0x11AA], NFKC: [0xC1FF], NFKD: [0x1109, 0x116D, 0x11AA] }, +{ source: [0xC200], NFC: [0xC200], NFD: [0x1109, 0x116D, 0x11AB], NFKC: [0xC200], NFKD: [0x1109, 0x116D, 0x11AB] }, +{ source: [0xC201], NFC: [0xC201], NFD: [0x1109, 0x116D, 0x11AC], NFKC: [0xC201], NFKD: [0x1109, 0x116D, 0x11AC] }, +{ source: [0xC202], NFC: [0xC202], NFD: [0x1109, 0x116D, 0x11AD], NFKC: [0xC202], NFKD: [0x1109, 0x116D, 0x11AD] }, +{ source: [0xC203], NFC: [0xC203], NFD: [0x1109, 0x116D, 0x11AE], NFKC: [0xC203], NFKD: [0x1109, 0x116D, 0x11AE] }, +{ source: [0xC204], NFC: [0xC204], NFD: [0x1109, 0x116D, 0x11AF], NFKC: [0xC204], NFKD: [0x1109, 0x116D, 0x11AF] }, +{ source: [0xC205], NFC: [0xC205], NFD: [0x1109, 0x116D, 0x11B0], NFKC: [0xC205], NFKD: [0x1109, 0x116D, 0x11B0] }, +{ source: [0xC206], NFC: [0xC206], NFD: [0x1109, 0x116D, 0x11B1], NFKC: [0xC206], NFKD: [0x1109, 0x116D, 0x11B1] }, +{ source: [0xC207], NFC: [0xC207], NFD: [0x1109, 0x116D, 0x11B2], NFKC: [0xC207], NFKD: [0x1109, 0x116D, 0x11B2] }, +{ source: [0xC208], NFC: [0xC208], NFD: [0x1109, 0x116D, 0x11B3], NFKC: [0xC208], NFKD: [0x1109, 0x116D, 0x11B3] }, +{ source: [0xC209], NFC: [0xC209], NFD: [0x1109, 0x116D, 0x11B4], NFKC: [0xC209], NFKD: [0x1109, 0x116D, 0x11B4] }, +{ source: [0xC20A], NFC: [0xC20A], NFD: [0x1109, 0x116D, 0x11B5], NFKC: [0xC20A], NFKD: [0x1109, 0x116D, 0x11B5] }, +{ source: [0xC20B], NFC: [0xC20B], NFD: [0x1109, 0x116D, 0x11B6], NFKC: [0xC20B], NFKD: [0x1109, 0x116D, 0x11B6] }, +{ source: [0xC20C], NFC: [0xC20C], NFD: [0x1109, 0x116D, 0x11B7], NFKC: [0xC20C], NFKD: [0x1109, 0x116D, 0x11B7] }, +{ source: [0xC20D], NFC: [0xC20D], NFD: [0x1109, 0x116D, 0x11B8], NFKC: [0xC20D], NFKD: [0x1109, 0x116D, 0x11B8] }, +{ source: [0xC20E], NFC: [0xC20E], NFD: [0x1109, 0x116D, 0x11B9], NFKC: [0xC20E], NFKD: [0x1109, 0x116D, 0x11B9] }, +{ source: [0xC20F], NFC: [0xC20F], NFD: [0x1109, 0x116D, 0x11BA], NFKC: [0xC20F], NFKD: [0x1109, 0x116D, 0x11BA] }, +{ source: [0xC210], NFC: [0xC210], NFD: [0x1109, 0x116D, 0x11BB], NFKC: [0xC210], NFKD: [0x1109, 0x116D, 0x11BB] }, +{ source: [0xC211], NFC: [0xC211], NFD: [0x1109, 0x116D, 0x11BC], NFKC: [0xC211], NFKD: [0x1109, 0x116D, 0x11BC] }, +{ source: [0xC212], NFC: [0xC212], NFD: [0x1109, 0x116D, 0x11BD], NFKC: [0xC212], NFKD: [0x1109, 0x116D, 0x11BD] }, +{ source: [0xC213], NFC: [0xC213], NFD: [0x1109, 0x116D, 0x11BE], NFKC: [0xC213], NFKD: [0x1109, 0x116D, 0x11BE] }, +{ source: [0xC214], NFC: [0xC214], NFD: [0x1109, 0x116D, 0x11BF], NFKC: [0xC214], NFKD: [0x1109, 0x116D, 0x11BF] }, +{ source: [0xC215], NFC: [0xC215], NFD: [0x1109, 0x116D, 0x11C0], NFKC: [0xC215], NFKD: [0x1109, 0x116D, 0x11C0] }, +{ source: [0xC216], NFC: [0xC216], NFD: [0x1109, 0x116D, 0x11C1], NFKC: [0xC216], NFKD: [0x1109, 0x116D, 0x11C1] }, +{ source: [0xC217], NFC: [0xC217], NFD: [0x1109, 0x116D, 0x11C2], NFKC: [0xC217], NFKD: [0x1109, 0x116D, 0x11C2] }, +{ source: [0xC218], NFC: [0xC218], NFD: [0x1109, 0x116E], NFKC: [0xC218], NFKD: [0x1109, 0x116E] }, +{ source: [0xC219], NFC: [0xC219], NFD: [0x1109, 0x116E, 0x11A8], NFKC: [0xC219], NFKD: [0x1109, 0x116E, 0x11A8] }, +{ source: [0xC21A], NFC: [0xC21A], NFD: [0x1109, 0x116E, 0x11A9], NFKC: [0xC21A], NFKD: [0x1109, 0x116E, 0x11A9] }, +{ source: [0xC21B], NFC: [0xC21B], NFD: [0x1109, 0x116E, 0x11AA], NFKC: [0xC21B], NFKD: [0x1109, 0x116E, 0x11AA] }, +{ source: [0xC21C], NFC: [0xC21C], NFD: [0x1109, 0x116E, 0x11AB], NFKC: [0xC21C], NFKD: [0x1109, 0x116E, 0x11AB] }, +{ source: [0xC21D], NFC: [0xC21D], NFD: [0x1109, 0x116E, 0x11AC], NFKC: [0xC21D], NFKD: [0x1109, 0x116E, 0x11AC] }, +{ source: [0xC21E], NFC: [0xC21E], NFD: [0x1109, 0x116E, 0x11AD], NFKC: [0xC21E], NFKD: [0x1109, 0x116E, 0x11AD] }, +{ source: [0xC21F], NFC: [0xC21F], NFD: [0x1109, 0x116E, 0x11AE], NFKC: [0xC21F], NFKD: [0x1109, 0x116E, 0x11AE] }, +{ source: [0xC220], NFC: [0xC220], NFD: [0x1109, 0x116E, 0x11AF], NFKC: [0xC220], NFKD: [0x1109, 0x116E, 0x11AF] }, +{ source: [0xC221], NFC: [0xC221], NFD: [0x1109, 0x116E, 0x11B0], NFKC: [0xC221], NFKD: [0x1109, 0x116E, 0x11B0] }, +{ source: [0xC222], NFC: [0xC222], NFD: [0x1109, 0x116E, 0x11B1], NFKC: [0xC222], NFKD: [0x1109, 0x116E, 0x11B1] }, +{ source: [0xC223], NFC: [0xC223], NFD: [0x1109, 0x116E, 0x11B2], NFKC: [0xC223], NFKD: [0x1109, 0x116E, 0x11B2] }, +{ source: [0xC224], NFC: [0xC224], NFD: [0x1109, 0x116E, 0x11B3], NFKC: [0xC224], NFKD: [0x1109, 0x116E, 0x11B3] }, +{ source: [0xC225], NFC: [0xC225], NFD: [0x1109, 0x116E, 0x11B4], NFKC: [0xC225], NFKD: [0x1109, 0x116E, 0x11B4] }, +{ source: [0xC226], NFC: [0xC226], NFD: [0x1109, 0x116E, 0x11B5], NFKC: [0xC226], NFKD: [0x1109, 0x116E, 0x11B5] }, +{ source: [0xC227], NFC: [0xC227], NFD: [0x1109, 0x116E, 0x11B6], NFKC: [0xC227], NFKD: [0x1109, 0x116E, 0x11B6] }, +{ source: [0xC228], NFC: [0xC228], NFD: [0x1109, 0x116E, 0x11B7], NFKC: [0xC228], NFKD: [0x1109, 0x116E, 0x11B7] }, +{ source: [0xC229], NFC: [0xC229], NFD: [0x1109, 0x116E, 0x11B8], NFKC: [0xC229], NFKD: [0x1109, 0x116E, 0x11B8] }, +{ source: [0xC22A], NFC: [0xC22A], NFD: [0x1109, 0x116E, 0x11B9], NFKC: [0xC22A], NFKD: [0x1109, 0x116E, 0x11B9] }, +{ source: [0xC22B], NFC: [0xC22B], NFD: [0x1109, 0x116E, 0x11BA], NFKC: [0xC22B], NFKD: [0x1109, 0x116E, 0x11BA] }, +{ source: [0xC22C], NFC: [0xC22C], NFD: [0x1109, 0x116E, 0x11BB], NFKC: [0xC22C], NFKD: [0x1109, 0x116E, 0x11BB] }, +{ source: [0xC22D], NFC: [0xC22D], NFD: [0x1109, 0x116E, 0x11BC], NFKC: [0xC22D], NFKD: [0x1109, 0x116E, 0x11BC] }, +{ source: [0xC22E], NFC: [0xC22E], NFD: [0x1109, 0x116E, 0x11BD], NFKC: [0xC22E], NFKD: [0x1109, 0x116E, 0x11BD] }, +{ source: [0xC22F], NFC: [0xC22F], NFD: [0x1109, 0x116E, 0x11BE], NFKC: [0xC22F], NFKD: [0x1109, 0x116E, 0x11BE] }, +{ source: [0xC230], NFC: [0xC230], NFD: [0x1109, 0x116E, 0x11BF], NFKC: [0xC230], NFKD: [0x1109, 0x116E, 0x11BF] }, +{ source: [0xC231], NFC: [0xC231], NFD: [0x1109, 0x116E, 0x11C0], NFKC: [0xC231], NFKD: [0x1109, 0x116E, 0x11C0] }, +{ source: [0xC232], NFC: [0xC232], NFD: [0x1109, 0x116E, 0x11C1], NFKC: [0xC232], NFKD: [0x1109, 0x116E, 0x11C1] }, +{ source: [0xC233], NFC: [0xC233], NFD: [0x1109, 0x116E, 0x11C2], NFKC: [0xC233], NFKD: [0x1109, 0x116E, 0x11C2] }, +{ source: [0xC234], NFC: [0xC234], NFD: [0x1109, 0x116F], NFKC: [0xC234], NFKD: [0x1109, 0x116F] }, +{ source: [0xC235], NFC: [0xC235], NFD: [0x1109, 0x116F, 0x11A8], NFKC: [0xC235], NFKD: [0x1109, 0x116F, 0x11A8] }, +{ source: [0xC236], NFC: [0xC236], NFD: [0x1109, 0x116F, 0x11A9], NFKC: [0xC236], NFKD: [0x1109, 0x116F, 0x11A9] }, +{ source: [0xC237], NFC: [0xC237], NFD: [0x1109, 0x116F, 0x11AA], NFKC: [0xC237], NFKD: [0x1109, 0x116F, 0x11AA] }, +{ source: [0xC238], NFC: [0xC238], NFD: [0x1109, 0x116F, 0x11AB], NFKC: [0xC238], NFKD: [0x1109, 0x116F, 0x11AB] }, +{ source: [0xC239], NFC: [0xC239], NFD: [0x1109, 0x116F, 0x11AC], NFKC: [0xC239], NFKD: [0x1109, 0x116F, 0x11AC] }, +{ source: [0xC23A], NFC: [0xC23A], NFD: [0x1109, 0x116F, 0x11AD], NFKC: [0xC23A], NFKD: [0x1109, 0x116F, 0x11AD] }, +{ source: [0xC23B], NFC: [0xC23B], NFD: [0x1109, 0x116F, 0x11AE], NFKC: [0xC23B], NFKD: [0x1109, 0x116F, 0x11AE] }, +{ source: [0xC23C], NFC: [0xC23C], NFD: [0x1109, 0x116F, 0x11AF], NFKC: [0xC23C], NFKD: [0x1109, 0x116F, 0x11AF] }, +{ source: [0xC23D], NFC: [0xC23D], NFD: [0x1109, 0x116F, 0x11B0], NFKC: [0xC23D], NFKD: [0x1109, 0x116F, 0x11B0] }, +{ source: [0xC23E], NFC: [0xC23E], NFD: [0x1109, 0x116F, 0x11B1], NFKC: [0xC23E], NFKD: [0x1109, 0x116F, 0x11B1] }, +{ source: [0xC23F], NFC: [0xC23F], NFD: [0x1109, 0x116F, 0x11B2], NFKC: [0xC23F], NFKD: [0x1109, 0x116F, 0x11B2] }, +{ source: [0xC240], NFC: [0xC240], NFD: [0x1109, 0x116F, 0x11B3], NFKC: [0xC240], NFKD: [0x1109, 0x116F, 0x11B3] }, +{ source: [0xC241], NFC: [0xC241], NFD: [0x1109, 0x116F, 0x11B4], NFKC: [0xC241], NFKD: [0x1109, 0x116F, 0x11B4] }, +{ source: [0xC242], NFC: [0xC242], NFD: [0x1109, 0x116F, 0x11B5], NFKC: [0xC242], NFKD: [0x1109, 0x116F, 0x11B5] }, +{ source: [0xC243], NFC: [0xC243], NFD: [0x1109, 0x116F, 0x11B6], NFKC: [0xC243], NFKD: [0x1109, 0x116F, 0x11B6] }, +{ source: [0xC244], NFC: [0xC244], NFD: [0x1109, 0x116F, 0x11B7], NFKC: [0xC244], NFKD: [0x1109, 0x116F, 0x11B7] }, +{ source: [0xC245], NFC: [0xC245], NFD: [0x1109, 0x116F, 0x11B8], NFKC: [0xC245], NFKD: [0x1109, 0x116F, 0x11B8] }, +{ source: [0xC246], NFC: [0xC246], NFD: [0x1109, 0x116F, 0x11B9], NFKC: [0xC246], NFKD: [0x1109, 0x116F, 0x11B9] }, +{ source: [0xC247], NFC: [0xC247], NFD: [0x1109, 0x116F, 0x11BA], NFKC: [0xC247], NFKD: [0x1109, 0x116F, 0x11BA] }, +{ source: [0xC248], NFC: [0xC248], NFD: [0x1109, 0x116F, 0x11BB], NFKC: [0xC248], NFKD: [0x1109, 0x116F, 0x11BB] }, +{ source: [0xC249], NFC: [0xC249], NFD: [0x1109, 0x116F, 0x11BC], NFKC: [0xC249], NFKD: [0x1109, 0x116F, 0x11BC] }, +{ source: [0xC24A], NFC: [0xC24A], NFD: [0x1109, 0x116F, 0x11BD], NFKC: [0xC24A], NFKD: [0x1109, 0x116F, 0x11BD] }, +{ source: [0xC24B], NFC: [0xC24B], NFD: [0x1109, 0x116F, 0x11BE], NFKC: [0xC24B], NFKD: [0x1109, 0x116F, 0x11BE] }, +{ source: [0xC24C], NFC: [0xC24C], NFD: [0x1109, 0x116F, 0x11BF], NFKC: [0xC24C], NFKD: [0x1109, 0x116F, 0x11BF] }, +{ source: [0xC24D], NFC: [0xC24D], NFD: [0x1109, 0x116F, 0x11C0], NFKC: [0xC24D], NFKD: [0x1109, 0x116F, 0x11C0] }, +{ source: [0xC24E], NFC: [0xC24E], NFD: [0x1109, 0x116F, 0x11C1], NFKC: [0xC24E], NFKD: [0x1109, 0x116F, 0x11C1] }, +{ source: [0xC24F], NFC: [0xC24F], NFD: [0x1109, 0x116F, 0x11C2], NFKC: [0xC24F], NFKD: [0x1109, 0x116F, 0x11C2] }, +{ source: [0xC250], NFC: [0xC250], NFD: [0x1109, 0x1170], NFKC: [0xC250], NFKD: [0x1109, 0x1170] }, +{ source: [0xC251], NFC: [0xC251], NFD: [0x1109, 0x1170, 0x11A8], NFKC: [0xC251], NFKD: [0x1109, 0x1170, 0x11A8] }, +{ source: [0xC252], NFC: [0xC252], NFD: [0x1109, 0x1170, 0x11A9], NFKC: [0xC252], NFKD: [0x1109, 0x1170, 0x11A9] }, +{ source: [0xC253], NFC: [0xC253], NFD: [0x1109, 0x1170, 0x11AA], NFKC: [0xC253], NFKD: [0x1109, 0x1170, 0x11AA] }, +{ source: [0xC254], NFC: [0xC254], NFD: [0x1109, 0x1170, 0x11AB], NFKC: [0xC254], NFKD: [0x1109, 0x1170, 0x11AB] }, +{ source: [0xC255], NFC: [0xC255], NFD: [0x1109, 0x1170, 0x11AC], NFKC: [0xC255], NFKD: [0x1109, 0x1170, 0x11AC] }, +{ source: [0xC256], NFC: [0xC256], NFD: [0x1109, 0x1170, 0x11AD], NFKC: [0xC256], NFKD: [0x1109, 0x1170, 0x11AD] }, +{ source: [0xC257], NFC: [0xC257], NFD: [0x1109, 0x1170, 0x11AE], NFKC: [0xC257], NFKD: [0x1109, 0x1170, 0x11AE] }, +{ source: [0xC258], NFC: [0xC258], NFD: [0x1109, 0x1170, 0x11AF], NFKC: [0xC258], NFKD: [0x1109, 0x1170, 0x11AF] }, +{ source: [0xC259], NFC: [0xC259], NFD: [0x1109, 0x1170, 0x11B0], NFKC: [0xC259], NFKD: [0x1109, 0x1170, 0x11B0] }, +{ source: [0xC25A], NFC: [0xC25A], NFD: [0x1109, 0x1170, 0x11B1], NFKC: [0xC25A], NFKD: [0x1109, 0x1170, 0x11B1] }, +{ source: [0xC25B], NFC: [0xC25B], NFD: [0x1109, 0x1170, 0x11B2], NFKC: [0xC25B], NFKD: [0x1109, 0x1170, 0x11B2] }, +{ source: [0xC25C], NFC: [0xC25C], NFD: [0x1109, 0x1170, 0x11B3], NFKC: [0xC25C], NFKD: [0x1109, 0x1170, 0x11B3] }, +{ source: [0xC25D], NFC: [0xC25D], NFD: [0x1109, 0x1170, 0x11B4], NFKC: [0xC25D], NFKD: [0x1109, 0x1170, 0x11B4] }, +{ source: [0xC25E], NFC: [0xC25E], NFD: [0x1109, 0x1170, 0x11B5], NFKC: [0xC25E], NFKD: [0x1109, 0x1170, 0x11B5] }, +{ source: [0xC25F], NFC: [0xC25F], NFD: [0x1109, 0x1170, 0x11B6], NFKC: [0xC25F], NFKD: [0x1109, 0x1170, 0x11B6] }, +{ source: [0xC260], NFC: [0xC260], NFD: [0x1109, 0x1170, 0x11B7], NFKC: [0xC260], NFKD: [0x1109, 0x1170, 0x11B7] }, +{ source: [0xC261], NFC: [0xC261], NFD: [0x1109, 0x1170, 0x11B8], NFKC: [0xC261], NFKD: [0x1109, 0x1170, 0x11B8] }, +{ source: [0xC262], NFC: [0xC262], NFD: [0x1109, 0x1170, 0x11B9], NFKC: [0xC262], NFKD: [0x1109, 0x1170, 0x11B9] }, +{ source: [0xC263], NFC: [0xC263], NFD: [0x1109, 0x1170, 0x11BA], NFKC: [0xC263], NFKD: [0x1109, 0x1170, 0x11BA] }, +{ source: [0xC264], NFC: [0xC264], NFD: [0x1109, 0x1170, 0x11BB], NFKC: [0xC264], NFKD: [0x1109, 0x1170, 0x11BB] }, +{ source: [0xC265], NFC: [0xC265], NFD: [0x1109, 0x1170, 0x11BC], NFKC: [0xC265], NFKD: [0x1109, 0x1170, 0x11BC] }, +{ source: [0xC266], NFC: [0xC266], NFD: [0x1109, 0x1170, 0x11BD], NFKC: [0xC266], NFKD: [0x1109, 0x1170, 0x11BD] }, +{ source: [0xC267], NFC: [0xC267], NFD: [0x1109, 0x1170, 0x11BE], NFKC: [0xC267], NFKD: [0x1109, 0x1170, 0x11BE] }, +{ source: [0xC268], NFC: [0xC268], NFD: [0x1109, 0x1170, 0x11BF], NFKC: [0xC268], NFKD: [0x1109, 0x1170, 0x11BF] }, +{ source: [0xC269], NFC: [0xC269], NFD: [0x1109, 0x1170, 0x11C0], NFKC: [0xC269], NFKD: [0x1109, 0x1170, 0x11C0] }, +{ source: [0xC26A], NFC: [0xC26A], NFD: [0x1109, 0x1170, 0x11C1], NFKC: [0xC26A], NFKD: [0x1109, 0x1170, 0x11C1] }, +{ source: [0xC26B], NFC: [0xC26B], NFD: [0x1109, 0x1170, 0x11C2], NFKC: [0xC26B], NFKD: [0x1109, 0x1170, 0x11C2] }, +{ source: [0xC26C], NFC: [0xC26C], NFD: [0x1109, 0x1171], NFKC: [0xC26C], NFKD: [0x1109, 0x1171] }, +{ source: [0xC26D], NFC: [0xC26D], NFD: [0x1109, 0x1171, 0x11A8], NFKC: [0xC26D], NFKD: [0x1109, 0x1171, 0x11A8] }, +{ source: [0xC26E], NFC: [0xC26E], NFD: [0x1109, 0x1171, 0x11A9], NFKC: [0xC26E], NFKD: [0x1109, 0x1171, 0x11A9] }, +{ source: [0xC26F], NFC: [0xC26F], NFD: [0x1109, 0x1171, 0x11AA], NFKC: [0xC26F], NFKD: [0x1109, 0x1171, 0x11AA] }, +{ source: [0xC270], NFC: [0xC270], NFD: [0x1109, 0x1171, 0x11AB], NFKC: [0xC270], NFKD: [0x1109, 0x1171, 0x11AB] }, +{ source: [0xC271], NFC: [0xC271], NFD: [0x1109, 0x1171, 0x11AC], NFKC: [0xC271], NFKD: [0x1109, 0x1171, 0x11AC] }, +{ source: [0xC272], NFC: [0xC272], NFD: [0x1109, 0x1171, 0x11AD], NFKC: [0xC272], NFKD: [0x1109, 0x1171, 0x11AD] }, +{ source: [0xC273], NFC: [0xC273], NFD: [0x1109, 0x1171, 0x11AE], NFKC: [0xC273], NFKD: [0x1109, 0x1171, 0x11AE] }, +{ source: [0xC274], NFC: [0xC274], NFD: [0x1109, 0x1171, 0x11AF], NFKC: [0xC274], NFKD: [0x1109, 0x1171, 0x11AF] }, +{ source: [0xC275], NFC: [0xC275], NFD: [0x1109, 0x1171, 0x11B0], NFKC: [0xC275], NFKD: [0x1109, 0x1171, 0x11B0] }, +{ source: [0xC276], NFC: [0xC276], NFD: [0x1109, 0x1171, 0x11B1], NFKC: [0xC276], NFKD: [0x1109, 0x1171, 0x11B1] }, +{ source: [0xC277], NFC: [0xC277], NFD: [0x1109, 0x1171, 0x11B2], NFKC: [0xC277], NFKD: [0x1109, 0x1171, 0x11B2] }, +{ source: [0xC278], NFC: [0xC278], NFD: [0x1109, 0x1171, 0x11B3], NFKC: [0xC278], NFKD: [0x1109, 0x1171, 0x11B3] }, +{ source: [0xC279], NFC: [0xC279], NFD: [0x1109, 0x1171, 0x11B4], NFKC: [0xC279], NFKD: [0x1109, 0x1171, 0x11B4] }, +{ source: [0xC27A], NFC: [0xC27A], NFD: [0x1109, 0x1171, 0x11B5], NFKC: [0xC27A], NFKD: [0x1109, 0x1171, 0x11B5] }, +{ source: [0xC27B], NFC: [0xC27B], NFD: [0x1109, 0x1171, 0x11B6], NFKC: [0xC27B], NFKD: [0x1109, 0x1171, 0x11B6] }, +{ source: [0xC27C], NFC: [0xC27C], NFD: [0x1109, 0x1171, 0x11B7], NFKC: [0xC27C], NFKD: [0x1109, 0x1171, 0x11B7] }, +{ source: [0xC27D], NFC: [0xC27D], NFD: [0x1109, 0x1171, 0x11B8], NFKC: [0xC27D], NFKD: [0x1109, 0x1171, 0x11B8] }, +{ source: [0xC27E], NFC: [0xC27E], NFD: [0x1109, 0x1171, 0x11B9], NFKC: [0xC27E], NFKD: [0x1109, 0x1171, 0x11B9] }, +{ source: [0xC27F], NFC: [0xC27F], NFD: [0x1109, 0x1171, 0x11BA], NFKC: [0xC27F], NFKD: [0x1109, 0x1171, 0x11BA] }, +{ source: [0xC280], NFC: [0xC280], NFD: [0x1109, 0x1171, 0x11BB], NFKC: [0xC280], NFKD: [0x1109, 0x1171, 0x11BB] }, +{ source: [0xC281], NFC: [0xC281], NFD: [0x1109, 0x1171, 0x11BC], NFKC: [0xC281], NFKD: [0x1109, 0x1171, 0x11BC] }, +{ source: [0xC282], NFC: [0xC282], NFD: [0x1109, 0x1171, 0x11BD], NFKC: [0xC282], NFKD: [0x1109, 0x1171, 0x11BD] }, +{ source: [0xC283], NFC: [0xC283], NFD: [0x1109, 0x1171, 0x11BE], NFKC: [0xC283], NFKD: [0x1109, 0x1171, 0x11BE] }, +{ source: [0xC284], NFC: [0xC284], NFD: [0x1109, 0x1171, 0x11BF], NFKC: [0xC284], NFKD: [0x1109, 0x1171, 0x11BF] }, +{ source: [0xC285], NFC: [0xC285], NFD: [0x1109, 0x1171, 0x11C0], NFKC: [0xC285], NFKD: [0x1109, 0x1171, 0x11C0] }, +{ source: [0xC286], NFC: [0xC286], NFD: [0x1109, 0x1171, 0x11C1], NFKC: [0xC286], NFKD: [0x1109, 0x1171, 0x11C1] }, +{ source: [0xC287], NFC: [0xC287], NFD: [0x1109, 0x1171, 0x11C2], NFKC: [0xC287], NFKD: [0x1109, 0x1171, 0x11C2] }, +{ source: [0xC288], NFC: [0xC288], NFD: [0x1109, 0x1172], NFKC: [0xC288], NFKD: [0x1109, 0x1172] }, +{ source: [0xC289], NFC: [0xC289], NFD: [0x1109, 0x1172, 0x11A8], NFKC: [0xC289], NFKD: [0x1109, 0x1172, 0x11A8] }, +{ source: [0xC28A], NFC: [0xC28A], NFD: [0x1109, 0x1172, 0x11A9], NFKC: [0xC28A], NFKD: [0x1109, 0x1172, 0x11A9] }, +{ source: [0xC28B], NFC: [0xC28B], NFD: [0x1109, 0x1172, 0x11AA], NFKC: [0xC28B], NFKD: [0x1109, 0x1172, 0x11AA] }, +{ source: [0xC28C], NFC: [0xC28C], NFD: [0x1109, 0x1172, 0x11AB], NFKC: [0xC28C], NFKD: [0x1109, 0x1172, 0x11AB] }, +{ source: [0xC28D], NFC: [0xC28D], NFD: [0x1109, 0x1172, 0x11AC], NFKC: [0xC28D], NFKD: [0x1109, 0x1172, 0x11AC] }, +{ source: [0xC28E], NFC: [0xC28E], NFD: [0x1109, 0x1172, 0x11AD], NFKC: [0xC28E], NFKD: [0x1109, 0x1172, 0x11AD] }, +{ source: [0xC28F], NFC: [0xC28F], NFD: [0x1109, 0x1172, 0x11AE], NFKC: [0xC28F], NFKD: [0x1109, 0x1172, 0x11AE] }, +{ source: [0xC290], NFC: [0xC290], NFD: [0x1109, 0x1172, 0x11AF], NFKC: [0xC290], NFKD: [0x1109, 0x1172, 0x11AF] }, +{ source: [0xC291], NFC: [0xC291], NFD: [0x1109, 0x1172, 0x11B0], NFKC: [0xC291], NFKD: [0x1109, 0x1172, 0x11B0] }, +{ source: [0xC292], NFC: [0xC292], NFD: [0x1109, 0x1172, 0x11B1], NFKC: [0xC292], NFKD: [0x1109, 0x1172, 0x11B1] }, +{ source: [0xC293], NFC: [0xC293], NFD: [0x1109, 0x1172, 0x11B2], NFKC: [0xC293], NFKD: [0x1109, 0x1172, 0x11B2] }, +{ source: [0xC294], NFC: [0xC294], NFD: [0x1109, 0x1172, 0x11B3], NFKC: [0xC294], NFKD: [0x1109, 0x1172, 0x11B3] }, +{ source: [0xC295], NFC: [0xC295], NFD: [0x1109, 0x1172, 0x11B4], NFKC: [0xC295], NFKD: [0x1109, 0x1172, 0x11B4] }, +{ source: [0xC296], NFC: [0xC296], NFD: [0x1109, 0x1172, 0x11B5], NFKC: [0xC296], NFKD: [0x1109, 0x1172, 0x11B5] }, +{ source: [0xC297], NFC: [0xC297], NFD: [0x1109, 0x1172, 0x11B6], NFKC: [0xC297], NFKD: [0x1109, 0x1172, 0x11B6] }, +{ source: [0xC298], NFC: [0xC298], NFD: [0x1109, 0x1172, 0x11B7], NFKC: [0xC298], NFKD: [0x1109, 0x1172, 0x11B7] }, +{ source: [0xC299], NFC: [0xC299], NFD: [0x1109, 0x1172, 0x11B8], NFKC: [0xC299], NFKD: [0x1109, 0x1172, 0x11B8] }, +{ source: [0xC29A], NFC: [0xC29A], NFD: [0x1109, 0x1172, 0x11B9], NFKC: [0xC29A], NFKD: [0x1109, 0x1172, 0x11B9] }, +{ source: [0xC29B], NFC: [0xC29B], NFD: [0x1109, 0x1172, 0x11BA], NFKC: [0xC29B], NFKD: [0x1109, 0x1172, 0x11BA] }, +{ source: [0xC29C], NFC: [0xC29C], NFD: [0x1109, 0x1172, 0x11BB], NFKC: [0xC29C], NFKD: [0x1109, 0x1172, 0x11BB] }, +{ source: [0xC29D], NFC: [0xC29D], NFD: [0x1109, 0x1172, 0x11BC], NFKC: [0xC29D], NFKD: [0x1109, 0x1172, 0x11BC] }, +{ source: [0xC29E], NFC: [0xC29E], NFD: [0x1109, 0x1172, 0x11BD], NFKC: [0xC29E], NFKD: [0x1109, 0x1172, 0x11BD] }, +{ source: [0xC29F], NFC: [0xC29F], NFD: [0x1109, 0x1172, 0x11BE], NFKC: [0xC29F], NFKD: [0x1109, 0x1172, 0x11BE] }, +{ source: [0xC2A0], NFC: [0xC2A0], NFD: [0x1109, 0x1172, 0x11BF], NFKC: [0xC2A0], NFKD: [0x1109, 0x1172, 0x11BF] }, +{ source: [0xC2A1], NFC: [0xC2A1], NFD: [0x1109, 0x1172, 0x11C0], NFKC: [0xC2A1], NFKD: [0x1109, 0x1172, 0x11C0] }, +{ source: [0xC2A2], NFC: [0xC2A2], NFD: [0x1109, 0x1172, 0x11C1], NFKC: [0xC2A2], NFKD: [0x1109, 0x1172, 0x11C1] }, +{ source: [0xC2A3], NFC: [0xC2A3], NFD: [0x1109, 0x1172, 0x11C2], NFKC: [0xC2A3], NFKD: [0x1109, 0x1172, 0x11C2] }, +{ source: [0xC2A4], NFC: [0xC2A4], NFD: [0x1109, 0x1173], NFKC: [0xC2A4], NFKD: [0x1109, 0x1173] }, +{ source: [0xC2A5], NFC: [0xC2A5], NFD: [0x1109, 0x1173, 0x11A8], NFKC: [0xC2A5], NFKD: [0x1109, 0x1173, 0x11A8] }, +{ source: [0xC2A6], NFC: [0xC2A6], NFD: [0x1109, 0x1173, 0x11A9], NFKC: [0xC2A6], NFKD: [0x1109, 0x1173, 0x11A9] }, +{ source: [0xC2A7], NFC: [0xC2A7], NFD: [0x1109, 0x1173, 0x11AA], NFKC: [0xC2A7], NFKD: [0x1109, 0x1173, 0x11AA] }, +{ source: [0xC2A8], NFC: [0xC2A8], NFD: [0x1109, 0x1173, 0x11AB], NFKC: [0xC2A8], NFKD: [0x1109, 0x1173, 0x11AB] }, +{ source: [0xC2A9], NFC: [0xC2A9], NFD: [0x1109, 0x1173, 0x11AC], NFKC: [0xC2A9], NFKD: [0x1109, 0x1173, 0x11AC] }, +{ source: [0xC2AA], NFC: [0xC2AA], NFD: [0x1109, 0x1173, 0x11AD], NFKC: [0xC2AA], NFKD: [0x1109, 0x1173, 0x11AD] }, +{ source: [0xC2AB], NFC: [0xC2AB], NFD: [0x1109, 0x1173, 0x11AE], NFKC: [0xC2AB], NFKD: [0x1109, 0x1173, 0x11AE] }, +{ source: [0xC2AC], NFC: [0xC2AC], NFD: [0x1109, 0x1173, 0x11AF], NFKC: [0xC2AC], NFKD: [0x1109, 0x1173, 0x11AF] }, +{ source: [0xC2AD], NFC: [0xC2AD], NFD: [0x1109, 0x1173, 0x11B0], NFKC: [0xC2AD], NFKD: [0x1109, 0x1173, 0x11B0] }, +{ source: [0xC2AE], NFC: [0xC2AE], NFD: [0x1109, 0x1173, 0x11B1], NFKC: [0xC2AE], NFKD: [0x1109, 0x1173, 0x11B1] }, +{ source: [0xC2AF], NFC: [0xC2AF], NFD: [0x1109, 0x1173, 0x11B2], NFKC: [0xC2AF], NFKD: [0x1109, 0x1173, 0x11B2] }, +{ source: [0xC2B0], NFC: [0xC2B0], NFD: [0x1109, 0x1173, 0x11B3], NFKC: [0xC2B0], NFKD: [0x1109, 0x1173, 0x11B3] }, +{ source: [0xC2B1], NFC: [0xC2B1], NFD: [0x1109, 0x1173, 0x11B4], NFKC: [0xC2B1], NFKD: [0x1109, 0x1173, 0x11B4] }, +{ source: [0xC2B2], NFC: [0xC2B2], NFD: [0x1109, 0x1173, 0x11B5], NFKC: [0xC2B2], NFKD: [0x1109, 0x1173, 0x11B5] }, +{ source: [0xC2B3], NFC: [0xC2B3], NFD: [0x1109, 0x1173, 0x11B6], NFKC: [0xC2B3], NFKD: [0x1109, 0x1173, 0x11B6] }, +{ source: [0xC2B4], NFC: [0xC2B4], NFD: [0x1109, 0x1173, 0x11B7], NFKC: [0xC2B4], NFKD: [0x1109, 0x1173, 0x11B7] }, +{ source: [0xC2B5], NFC: [0xC2B5], NFD: [0x1109, 0x1173, 0x11B8], NFKC: [0xC2B5], NFKD: [0x1109, 0x1173, 0x11B8] }, +{ source: [0xC2B6], NFC: [0xC2B6], NFD: [0x1109, 0x1173, 0x11B9], NFKC: [0xC2B6], NFKD: [0x1109, 0x1173, 0x11B9] }, +{ source: [0xC2B7], NFC: [0xC2B7], NFD: [0x1109, 0x1173, 0x11BA], NFKC: [0xC2B7], NFKD: [0x1109, 0x1173, 0x11BA] }, +{ source: [0xC2B8], NFC: [0xC2B8], NFD: [0x1109, 0x1173, 0x11BB], NFKC: [0xC2B8], NFKD: [0x1109, 0x1173, 0x11BB] }, +{ source: [0xC2B9], NFC: [0xC2B9], NFD: [0x1109, 0x1173, 0x11BC], NFKC: [0xC2B9], NFKD: [0x1109, 0x1173, 0x11BC] }, +{ source: [0xC2BA], NFC: [0xC2BA], NFD: [0x1109, 0x1173, 0x11BD], NFKC: [0xC2BA], NFKD: [0x1109, 0x1173, 0x11BD] }, +{ source: [0xC2BB], NFC: [0xC2BB], NFD: [0x1109, 0x1173, 0x11BE], NFKC: [0xC2BB], NFKD: [0x1109, 0x1173, 0x11BE] }, +{ source: [0xC2BC], NFC: [0xC2BC], NFD: [0x1109, 0x1173, 0x11BF], NFKC: [0xC2BC], NFKD: [0x1109, 0x1173, 0x11BF] }, +{ source: [0xC2BD], NFC: [0xC2BD], NFD: [0x1109, 0x1173, 0x11C0], NFKC: [0xC2BD], NFKD: [0x1109, 0x1173, 0x11C0] }, +{ source: [0xC2BE], NFC: [0xC2BE], NFD: [0x1109, 0x1173, 0x11C1], NFKC: [0xC2BE], NFKD: [0x1109, 0x1173, 0x11C1] }, +{ source: [0xC2BF], NFC: [0xC2BF], NFD: [0x1109, 0x1173, 0x11C2], NFKC: [0xC2BF], NFKD: [0x1109, 0x1173, 0x11C2] }, +{ source: [0xC2C0], NFC: [0xC2C0], NFD: [0x1109, 0x1174], NFKC: [0xC2C0], NFKD: [0x1109, 0x1174] }, +{ source: [0xC2C1], NFC: [0xC2C1], NFD: [0x1109, 0x1174, 0x11A8], NFKC: [0xC2C1], NFKD: [0x1109, 0x1174, 0x11A8] }, +{ source: [0xC2C2], NFC: [0xC2C2], NFD: [0x1109, 0x1174, 0x11A9], NFKC: [0xC2C2], NFKD: [0x1109, 0x1174, 0x11A9] }, +{ source: [0xC2C3], NFC: [0xC2C3], NFD: [0x1109, 0x1174, 0x11AA], NFKC: [0xC2C3], NFKD: [0x1109, 0x1174, 0x11AA] }, +{ source: [0xC2C4], NFC: [0xC2C4], NFD: [0x1109, 0x1174, 0x11AB], NFKC: [0xC2C4], NFKD: [0x1109, 0x1174, 0x11AB] }, +{ source: [0xC2C5], NFC: [0xC2C5], NFD: [0x1109, 0x1174, 0x11AC], NFKC: [0xC2C5], NFKD: [0x1109, 0x1174, 0x11AC] }, +{ source: [0xC2C6], NFC: [0xC2C6], NFD: [0x1109, 0x1174, 0x11AD], NFKC: [0xC2C6], NFKD: [0x1109, 0x1174, 0x11AD] }, +{ source: [0xC2C7], NFC: [0xC2C7], NFD: [0x1109, 0x1174, 0x11AE], NFKC: [0xC2C7], NFKD: [0x1109, 0x1174, 0x11AE] }, +{ source: [0xC2C8], NFC: [0xC2C8], NFD: [0x1109, 0x1174, 0x11AF], NFKC: [0xC2C8], NFKD: [0x1109, 0x1174, 0x11AF] }, +{ source: [0xC2C9], NFC: [0xC2C9], NFD: [0x1109, 0x1174, 0x11B0], NFKC: [0xC2C9], NFKD: [0x1109, 0x1174, 0x11B0] }, +{ source: [0xC2CA], NFC: [0xC2CA], NFD: [0x1109, 0x1174, 0x11B1], NFKC: [0xC2CA], NFKD: [0x1109, 0x1174, 0x11B1] }, +{ source: [0xC2CB], NFC: [0xC2CB], NFD: [0x1109, 0x1174, 0x11B2], NFKC: [0xC2CB], NFKD: [0x1109, 0x1174, 0x11B2] }, +{ source: [0xC2CC], NFC: [0xC2CC], NFD: [0x1109, 0x1174, 0x11B3], NFKC: [0xC2CC], NFKD: [0x1109, 0x1174, 0x11B3] }, +{ source: [0xC2CD], NFC: [0xC2CD], NFD: [0x1109, 0x1174, 0x11B4], NFKC: [0xC2CD], NFKD: [0x1109, 0x1174, 0x11B4] }, +{ source: [0xC2CE], NFC: [0xC2CE], NFD: [0x1109, 0x1174, 0x11B5], NFKC: [0xC2CE], NFKD: [0x1109, 0x1174, 0x11B5] }, +{ source: [0xC2CF], NFC: [0xC2CF], NFD: [0x1109, 0x1174, 0x11B6], NFKC: [0xC2CF], NFKD: [0x1109, 0x1174, 0x11B6] }, +{ source: [0xC2D0], NFC: [0xC2D0], NFD: [0x1109, 0x1174, 0x11B7], NFKC: [0xC2D0], NFKD: [0x1109, 0x1174, 0x11B7] }, +{ source: [0xC2D1], NFC: [0xC2D1], NFD: [0x1109, 0x1174, 0x11B8], NFKC: [0xC2D1], NFKD: [0x1109, 0x1174, 0x11B8] }, +{ source: [0xC2D2], NFC: [0xC2D2], NFD: [0x1109, 0x1174, 0x11B9], NFKC: [0xC2D2], NFKD: [0x1109, 0x1174, 0x11B9] }, +{ source: [0xC2D3], NFC: [0xC2D3], NFD: [0x1109, 0x1174, 0x11BA], NFKC: [0xC2D3], NFKD: [0x1109, 0x1174, 0x11BA] }, +{ source: [0xC2D4], NFC: [0xC2D4], NFD: [0x1109, 0x1174, 0x11BB], NFKC: [0xC2D4], NFKD: [0x1109, 0x1174, 0x11BB] }, +{ source: [0xC2D5], NFC: [0xC2D5], NFD: [0x1109, 0x1174, 0x11BC], NFKC: [0xC2D5], NFKD: [0x1109, 0x1174, 0x11BC] }, +{ source: [0xC2D6], NFC: [0xC2D6], NFD: [0x1109, 0x1174, 0x11BD], NFKC: [0xC2D6], NFKD: [0x1109, 0x1174, 0x11BD] }, +{ source: [0xC2D7], NFC: [0xC2D7], NFD: [0x1109, 0x1174, 0x11BE], NFKC: [0xC2D7], NFKD: [0x1109, 0x1174, 0x11BE] }, +{ source: [0xC2D8], NFC: [0xC2D8], NFD: [0x1109, 0x1174, 0x11BF], NFKC: [0xC2D8], NFKD: [0x1109, 0x1174, 0x11BF] }, +{ source: [0xC2D9], NFC: [0xC2D9], NFD: [0x1109, 0x1174, 0x11C0], NFKC: [0xC2D9], NFKD: [0x1109, 0x1174, 0x11C0] }, +{ source: [0xC2DA], NFC: [0xC2DA], NFD: [0x1109, 0x1174, 0x11C1], NFKC: [0xC2DA], NFKD: [0x1109, 0x1174, 0x11C1] }, +{ source: [0xC2DB], NFC: [0xC2DB], NFD: [0x1109, 0x1174, 0x11C2], NFKC: [0xC2DB], NFKD: [0x1109, 0x1174, 0x11C2] }, +{ source: [0xC2DC], NFC: [0xC2DC], NFD: [0x1109, 0x1175], NFKC: [0xC2DC], NFKD: [0x1109, 0x1175] }, +{ source: [0xC2DD], NFC: [0xC2DD], NFD: [0x1109, 0x1175, 0x11A8], NFKC: [0xC2DD], NFKD: [0x1109, 0x1175, 0x11A8] }, +{ source: [0xC2DE], NFC: [0xC2DE], NFD: [0x1109, 0x1175, 0x11A9], NFKC: [0xC2DE], NFKD: [0x1109, 0x1175, 0x11A9] }, +{ source: [0xC2DF], NFC: [0xC2DF], NFD: [0x1109, 0x1175, 0x11AA], NFKC: [0xC2DF], NFKD: [0x1109, 0x1175, 0x11AA] }, +{ source: [0xC2E0], NFC: [0xC2E0], NFD: [0x1109, 0x1175, 0x11AB], NFKC: [0xC2E0], NFKD: [0x1109, 0x1175, 0x11AB] }, +{ source: [0xC2E1], NFC: [0xC2E1], NFD: [0x1109, 0x1175, 0x11AC], NFKC: [0xC2E1], NFKD: [0x1109, 0x1175, 0x11AC] }, +{ source: [0xC2E2], NFC: [0xC2E2], NFD: [0x1109, 0x1175, 0x11AD], NFKC: [0xC2E2], NFKD: [0x1109, 0x1175, 0x11AD] }, +{ source: [0xC2E3], NFC: [0xC2E3], NFD: [0x1109, 0x1175, 0x11AE], NFKC: [0xC2E3], NFKD: [0x1109, 0x1175, 0x11AE] }, +{ source: [0xC2E4], NFC: [0xC2E4], NFD: [0x1109, 0x1175, 0x11AF], NFKC: [0xC2E4], NFKD: [0x1109, 0x1175, 0x11AF] }, +{ source: [0xC2E5], NFC: [0xC2E5], NFD: [0x1109, 0x1175, 0x11B0], NFKC: [0xC2E5], NFKD: [0x1109, 0x1175, 0x11B0] }, +{ source: [0xC2E6], NFC: [0xC2E6], NFD: [0x1109, 0x1175, 0x11B1], NFKC: [0xC2E6], NFKD: [0x1109, 0x1175, 0x11B1] }, +{ source: [0xC2E7], NFC: [0xC2E7], NFD: [0x1109, 0x1175, 0x11B2], NFKC: [0xC2E7], NFKD: [0x1109, 0x1175, 0x11B2] }, +{ source: [0xC2E8], NFC: [0xC2E8], NFD: [0x1109, 0x1175, 0x11B3], NFKC: [0xC2E8], NFKD: [0x1109, 0x1175, 0x11B3] }, +{ source: [0xC2E9], NFC: [0xC2E9], NFD: [0x1109, 0x1175, 0x11B4], NFKC: [0xC2E9], NFKD: [0x1109, 0x1175, 0x11B4] }, +{ source: [0xC2EA], NFC: [0xC2EA], NFD: [0x1109, 0x1175, 0x11B5], NFKC: [0xC2EA], NFKD: [0x1109, 0x1175, 0x11B5] }, +{ source: [0xC2EB], NFC: [0xC2EB], NFD: [0x1109, 0x1175, 0x11B6], NFKC: [0xC2EB], NFKD: [0x1109, 0x1175, 0x11B6] }, +{ source: [0xC2EC], NFC: [0xC2EC], NFD: [0x1109, 0x1175, 0x11B7], NFKC: [0xC2EC], NFKD: [0x1109, 0x1175, 0x11B7] }, +{ source: [0xC2ED], NFC: [0xC2ED], NFD: [0x1109, 0x1175, 0x11B8], NFKC: [0xC2ED], NFKD: [0x1109, 0x1175, 0x11B8] }, +{ source: [0xC2EE], NFC: [0xC2EE], NFD: [0x1109, 0x1175, 0x11B9], NFKC: [0xC2EE], NFKD: [0x1109, 0x1175, 0x11B9] }, +{ source: [0xC2EF], NFC: [0xC2EF], NFD: [0x1109, 0x1175, 0x11BA], NFKC: [0xC2EF], NFKD: [0x1109, 0x1175, 0x11BA] }, +{ source: [0xC2F0], NFC: [0xC2F0], NFD: [0x1109, 0x1175, 0x11BB], NFKC: [0xC2F0], NFKD: [0x1109, 0x1175, 0x11BB] }, +{ source: [0xC2F1], NFC: [0xC2F1], NFD: [0x1109, 0x1175, 0x11BC], NFKC: [0xC2F1], NFKD: [0x1109, 0x1175, 0x11BC] }, +{ source: [0xC2F2], NFC: [0xC2F2], NFD: [0x1109, 0x1175, 0x11BD], NFKC: [0xC2F2], NFKD: [0x1109, 0x1175, 0x11BD] }, +{ source: [0xC2F3], NFC: [0xC2F3], NFD: [0x1109, 0x1175, 0x11BE], NFKC: [0xC2F3], NFKD: [0x1109, 0x1175, 0x11BE] }, +{ source: [0xC2F4], NFC: [0xC2F4], NFD: [0x1109, 0x1175, 0x11BF], NFKC: [0xC2F4], NFKD: [0x1109, 0x1175, 0x11BF] }, +{ source: [0xC2F5], NFC: [0xC2F5], NFD: [0x1109, 0x1175, 0x11C0], NFKC: [0xC2F5], NFKD: [0x1109, 0x1175, 0x11C0] }, +{ source: [0xC2F6], NFC: [0xC2F6], NFD: [0x1109, 0x1175, 0x11C1], NFKC: [0xC2F6], NFKD: [0x1109, 0x1175, 0x11C1] }, +{ source: [0xC2F7], NFC: [0xC2F7], NFD: [0x1109, 0x1175, 0x11C2], NFKC: [0xC2F7], NFKD: [0x1109, 0x1175, 0x11C2] }, +{ source: [0xC2F8], NFC: [0xC2F8], NFD: [0x110A, 0x1161], NFKC: [0xC2F8], NFKD: [0x110A, 0x1161] }, +{ source: [0xC2F9], NFC: [0xC2F9], NFD: [0x110A, 0x1161, 0x11A8], NFKC: [0xC2F9], NFKD: [0x110A, 0x1161, 0x11A8] }, +{ source: [0xC2FA], NFC: [0xC2FA], NFD: [0x110A, 0x1161, 0x11A9], NFKC: [0xC2FA], NFKD: [0x110A, 0x1161, 0x11A9] }, +{ source: [0xC2FB], NFC: [0xC2FB], NFD: [0x110A, 0x1161, 0x11AA], NFKC: [0xC2FB], NFKD: [0x110A, 0x1161, 0x11AA] }, +{ source: [0xC2FC], NFC: [0xC2FC], NFD: [0x110A, 0x1161, 0x11AB], NFKC: [0xC2FC], NFKD: [0x110A, 0x1161, 0x11AB] }, +{ source: [0xC2FD], NFC: [0xC2FD], NFD: [0x110A, 0x1161, 0x11AC], NFKC: [0xC2FD], NFKD: [0x110A, 0x1161, 0x11AC] }, +{ source: [0xC2FE], NFC: [0xC2FE], NFD: [0x110A, 0x1161, 0x11AD], NFKC: [0xC2FE], NFKD: [0x110A, 0x1161, 0x11AD] }, +{ source: [0xC2FF], NFC: [0xC2FF], NFD: [0x110A, 0x1161, 0x11AE], NFKC: [0xC2FF], NFKD: [0x110A, 0x1161, 0x11AE] }, +{ source: [0xC300], NFC: [0xC300], NFD: [0x110A, 0x1161, 0x11AF], NFKC: [0xC300], NFKD: [0x110A, 0x1161, 0x11AF] }, +{ source: [0xC301], NFC: [0xC301], NFD: [0x110A, 0x1161, 0x11B0], NFKC: [0xC301], NFKD: [0x110A, 0x1161, 0x11B0] }, +{ source: [0xC302], NFC: [0xC302], NFD: [0x110A, 0x1161, 0x11B1], NFKC: [0xC302], NFKD: [0x110A, 0x1161, 0x11B1] }, +{ source: [0xC303], NFC: [0xC303], NFD: [0x110A, 0x1161, 0x11B2], NFKC: [0xC303], NFKD: [0x110A, 0x1161, 0x11B2] }, +{ source: [0xC304], NFC: [0xC304], NFD: [0x110A, 0x1161, 0x11B3], NFKC: [0xC304], NFKD: [0x110A, 0x1161, 0x11B3] }, +{ source: [0xC305], NFC: [0xC305], NFD: [0x110A, 0x1161, 0x11B4], NFKC: [0xC305], NFKD: [0x110A, 0x1161, 0x11B4] }, +{ source: [0xC306], NFC: [0xC306], NFD: [0x110A, 0x1161, 0x11B5], NFKC: [0xC306], NFKD: [0x110A, 0x1161, 0x11B5] }, +{ source: [0xC307], NFC: [0xC307], NFD: [0x110A, 0x1161, 0x11B6], NFKC: [0xC307], NFKD: [0x110A, 0x1161, 0x11B6] }, +{ source: [0xC308], NFC: [0xC308], NFD: [0x110A, 0x1161, 0x11B7], NFKC: [0xC308], NFKD: [0x110A, 0x1161, 0x11B7] }, +{ source: [0xC309], NFC: [0xC309], NFD: [0x110A, 0x1161, 0x11B8], NFKC: [0xC309], NFKD: [0x110A, 0x1161, 0x11B8] }, +{ source: [0xC30A], NFC: [0xC30A], NFD: [0x110A, 0x1161, 0x11B9], NFKC: [0xC30A], NFKD: [0x110A, 0x1161, 0x11B9] }, +{ source: [0xC30B], NFC: [0xC30B], NFD: [0x110A, 0x1161, 0x11BA], NFKC: [0xC30B], NFKD: [0x110A, 0x1161, 0x11BA] }, +{ source: [0xC30C], NFC: [0xC30C], NFD: [0x110A, 0x1161, 0x11BB], NFKC: [0xC30C], NFKD: [0x110A, 0x1161, 0x11BB] }, +{ source: [0xC30D], NFC: [0xC30D], NFD: [0x110A, 0x1161, 0x11BC], NFKC: [0xC30D], NFKD: [0x110A, 0x1161, 0x11BC] }, +{ source: [0xC30E], NFC: [0xC30E], NFD: [0x110A, 0x1161, 0x11BD], NFKC: [0xC30E], NFKD: [0x110A, 0x1161, 0x11BD] }, +{ source: [0xC30F], NFC: [0xC30F], NFD: [0x110A, 0x1161, 0x11BE], NFKC: [0xC30F], NFKD: [0x110A, 0x1161, 0x11BE] }, +{ source: [0xC310], NFC: [0xC310], NFD: [0x110A, 0x1161, 0x11BF], NFKC: [0xC310], NFKD: [0x110A, 0x1161, 0x11BF] }, +{ source: [0xC311], NFC: [0xC311], NFD: [0x110A, 0x1161, 0x11C0], NFKC: [0xC311], NFKD: [0x110A, 0x1161, 0x11C0] }, +{ source: [0xC312], NFC: [0xC312], NFD: [0x110A, 0x1161, 0x11C1], NFKC: [0xC312], NFKD: [0x110A, 0x1161, 0x11C1] }, +{ source: [0xC313], NFC: [0xC313], NFD: [0x110A, 0x1161, 0x11C2], NFKC: [0xC313], NFKD: [0x110A, 0x1161, 0x11C2] }, +{ source: [0xC314], NFC: [0xC314], NFD: [0x110A, 0x1162], NFKC: [0xC314], NFKD: [0x110A, 0x1162] }, +{ source: [0xC315], NFC: [0xC315], NFD: [0x110A, 0x1162, 0x11A8], NFKC: [0xC315], NFKD: [0x110A, 0x1162, 0x11A8] }, +{ source: [0xC316], NFC: [0xC316], NFD: [0x110A, 0x1162, 0x11A9], NFKC: [0xC316], NFKD: [0x110A, 0x1162, 0x11A9] }, +{ source: [0xC317], NFC: [0xC317], NFD: [0x110A, 0x1162, 0x11AA], NFKC: [0xC317], NFKD: [0x110A, 0x1162, 0x11AA] }, +{ source: [0xC318], NFC: [0xC318], NFD: [0x110A, 0x1162, 0x11AB], NFKC: [0xC318], NFKD: [0x110A, 0x1162, 0x11AB] }, +{ source: [0xC319], NFC: [0xC319], NFD: [0x110A, 0x1162, 0x11AC], NFKC: [0xC319], NFKD: [0x110A, 0x1162, 0x11AC] }, +{ source: [0xC31A], NFC: [0xC31A], NFD: [0x110A, 0x1162, 0x11AD], NFKC: [0xC31A], NFKD: [0x110A, 0x1162, 0x11AD] }, +{ source: [0xC31B], NFC: [0xC31B], NFD: [0x110A, 0x1162, 0x11AE], NFKC: [0xC31B], NFKD: [0x110A, 0x1162, 0x11AE] }, +{ source: [0xC31C], NFC: [0xC31C], NFD: [0x110A, 0x1162, 0x11AF], NFKC: [0xC31C], NFKD: [0x110A, 0x1162, 0x11AF] }, +{ source: [0xC31D], NFC: [0xC31D], NFD: [0x110A, 0x1162, 0x11B0], NFKC: [0xC31D], NFKD: [0x110A, 0x1162, 0x11B0] }, +{ source: [0xC31E], NFC: [0xC31E], NFD: [0x110A, 0x1162, 0x11B1], NFKC: [0xC31E], NFKD: [0x110A, 0x1162, 0x11B1] }, +{ source: [0xC31F], NFC: [0xC31F], NFD: [0x110A, 0x1162, 0x11B2], NFKC: [0xC31F], NFKD: [0x110A, 0x1162, 0x11B2] }, +{ source: [0xC320], NFC: [0xC320], NFD: [0x110A, 0x1162, 0x11B3], NFKC: [0xC320], NFKD: [0x110A, 0x1162, 0x11B3] }, +{ source: [0xC321], NFC: [0xC321], NFD: [0x110A, 0x1162, 0x11B4], NFKC: [0xC321], NFKD: [0x110A, 0x1162, 0x11B4] }, +{ source: [0xC322], NFC: [0xC322], NFD: [0x110A, 0x1162, 0x11B5], NFKC: [0xC322], NFKD: [0x110A, 0x1162, 0x11B5] }, +{ source: [0xC323], NFC: [0xC323], NFD: [0x110A, 0x1162, 0x11B6], NFKC: [0xC323], NFKD: [0x110A, 0x1162, 0x11B6] }, +{ source: [0xC324], NFC: [0xC324], NFD: [0x110A, 0x1162, 0x11B7], NFKC: [0xC324], NFKD: [0x110A, 0x1162, 0x11B7] }, +{ source: [0xC325], NFC: [0xC325], NFD: [0x110A, 0x1162, 0x11B8], NFKC: [0xC325], NFKD: [0x110A, 0x1162, 0x11B8] }, +{ source: [0xC326], NFC: [0xC326], NFD: [0x110A, 0x1162, 0x11B9], NFKC: [0xC326], NFKD: [0x110A, 0x1162, 0x11B9] }, +{ source: [0xC327], NFC: [0xC327], NFD: [0x110A, 0x1162, 0x11BA], NFKC: [0xC327], NFKD: [0x110A, 0x1162, 0x11BA] }, +{ source: [0xC328], NFC: [0xC328], NFD: [0x110A, 0x1162, 0x11BB], NFKC: [0xC328], NFKD: [0x110A, 0x1162, 0x11BB] }, +{ source: [0xC329], NFC: [0xC329], NFD: [0x110A, 0x1162, 0x11BC], NFKC: [0xC329], NFKD: [0x110A, 0x1162, 0x11BC] }, +{ source: [0xC32A], NFC: [0xC32A], NFD: [0x110A, 0x1162, 0x11BD], NFKC: [0xC32A], NFKD: [0x110A, 0x1162, 0x11BD] }, +{ source: [0xC32B], NFC: [0xC32B], NFD: [0x110A, 0x1162, 0x11BE], NFKC: [0xC32B], NFKD: [0x110A, 0x1162, 0x11BE] }, +{ source: [0xC32C], NFC: [0xC32C], NFD: [0x110A, 0x1162, 0x11BF], NFKC: [0xC32C], NFKD: [0x110A, 0x1162, 0x11BF] }, +{ source: [0xC32D], NFC: [0xC32D], NFD: [0x110A, 0x1162, 0x11C0], NFKC: [0xC32D], NFKD: [0x110A, 0x1162, 0x11C0] }, +{ source: [0xC32E], NFC: [0xC32E], NFD: [0x110A, 0x1162, 0x11C1], NFKC: [0xC32E], NFKD: [0x110A, 0x1162, 0x11C1] }, +{ source: [0xC32F], NFC: [0xC32F], NFD: [0x110A, 0x1162, 0x11C2], NFKC: [0xC32F], NFKD: [0x110A, 0x1162, 0x11C2] }, +{ source: [0xC330], NFC: [0xC330], NFD: [0x110A, 0x1163], NFKC: [0xC330], NFKD: [0x110A, 0x1163] }, +{ source: [0xC331], NFC: [0xC331], NFD: [0x110A, 0x1163, 0x11A8], NFKC: [0xC331], NFKD: [0x110A, 0x1163, 0x11A8] }, +{ source: [0xC332], NFC: [0xC332], NFD: [0x110A, 0x1163, 0x11A9], NFKC: [0xC332], NFKD: [0x110A, 0x1163, 0x11A9] }, +{ source: [0xC333], NFC: [0xC333], NFD: [0x110A, 0x1163, 0x11AA], NFKC: [0xC333], NFKD: [0x110A, 0x1163, 0x11AA] }, +{ source: [0xC334], NFC: [0xC334], NFD: [0x110A, 0x1163, 0x11AB], NFKC: [0xC334], NFKD: [0x110A, 0x1163, 0x11AB] }, +{ source: [0xC335], NFC: [0xC335], NFD: [0x110A, 0x1163, 0x11AC], NFKC: [0xC335], NFKD: [0x110A, 0x1163, 0x11AC] }, +{ source: [0xC336], NFC: [0xC336], NFD: [0x110A, 0x1163, 0x11AD], NFKC: [0xC336], NFKD: [0x110A, 0x1163, 0x11AD] }, +{ source: [0xC337], NFC: [0xC337], NFD: [0x110A, 0x1163, 0x11AE], NFKC: [0xC337], NFKD: [0x110A, 0x1163, 0x11AE] }, +{ source: [0xC338], NFC: [0xC338], NFD: [0x110A, 0x1163, 0x11AF], NFKC: [0xC338], NFKD: [0x110A, 0x1163, 0x11AF] }, +{ source: [0xC339], NFC: [0xC339], NFD: [0x110A, 0x1163, 0x11B0], NFKC: [0xC339], NFKD: [0x110A, 0x1163, 0x11B0] }, +{ source: [0xC33A], NFC: [0xC33A], NFD: [0x110A, 0x1163, 0x11B1], NFKC: [0xC33A], NFKD: [0x110A, 0x1163, 0x11B1] }, +{ source: [0xC33B], NFC: [0xC33B], NFD: [0x110A, 0x1163, 0x11B2], NFKC: [0xC33B], NFKD: [0x110A, 0x1163, 0x11B2] }, +{ source: [0xC33C], NFC: [0xC33C], NFD: [0x110A, 0x1163, 0x11B3], NFKC: [0xC33C], NFKD: [0x110A, 0x1163, 0x11B3] }, +{ source: [0xC33D], NFC: [0xC33D], NFD: [0x110A, 0x1163, 0x11B4], NFKC: [0xC33D], NFKD: [0x110A, 0x1163, 0x11B4] }, +{ source: [0xC33E], NFC: [0xC33E], NFD: [0x110A, 0x1163, 0x11B5], NFKC: [0xC33E], NFKD: [0x110A, 0x1163, 0x11B5] }, +{ source: [0xC33F], NFC: [0xC33F], NFD: [0x110A, 0x1163, 0x11B6], NFKC: [0xC33F], NFKD: [0x110A, 0x1163, 0x11B6] }, +{ source: [0xC340], NFC: [0xC340], NFD: [0x110A, 0x1163, 0x11B7], NFKC: [0xC340], NFKD: [0x110A, 0x1163, 0x11B7] }, +{ source: [0xC341], NFC: [0xC341], NFD: [0x110A, 0x1163, 0x11B8], NFKC: [0xC341], NFKD: [0x110A, 0x1163, 0x11B8] }, +{ source: [0xC342], NFC: [0xC342], NFD: [0x110A, 0x1163, 0x11B9], NFKC: [0xC342], NFKD: [0x110A, 0x1163, 0x11B9] }, +{ source: [0xC343], NFC: [0xC343], NFD: [0x110A, 0x1163, 0x11BA], NFKC: [0xC343], NFKD: [0x110A, 0x1163, 0x11BA] }, +{ source: [0xC344], NFC: [0xC344], NFD: [0x110A, 0x1163, 0x11BB], NFKC: [0xC344], NFKD: [0x110A, 0x1163, 0x11BB] }, +{ source: [0xC345], NFC: [0xC345], NFD: [0x110A, 0x1163, 0x11BC], NFKC: [0xC345], NFKD: [0x110A, 0x1163, 0x11BC] }, +{ source: [0xC346], NFC: [0xC346], NFD: [0x110A, 0x1163, 0x11BD], NFKC: [0xC346], NFKD: [0x110A, 0x1163, 0x11BD] }, +{ source: [0xC347], NFC: [0xC347], NFD: [0x110A, 0x1163, 0x11BE], NFKC: [0xC347], NFKD: [0x110A, 0x1163, 0x11BE] }, +{ source: [0xC348], NFC: [0xC348], NFD: [0x110A, 0x1163, 0x11BF], NFKC: [0xC348], NFKD: [0x110A, 0x1163, 0x11BF] }, +{ source: [0xC349], NFC: [0xC349], NFD: [0x110A, 0x1163, 0x11C0], NFKC: [0xC349], NFKD: [0x110A, 0x1163, 0x11C0] }, +{ source: [0xC34A], NFC: [0xC34A], NFD: [0x110A, 0x1163, 0x11C1], NFKC: [0xC34A], NFKD: [0x110A, 0x1163, 0x11C1] }, +{ source: [0xC34B], NFC: [0xC34B], NFD: [0x110A, 0x1163, 0x11C2], NFKC: [0xC34B], NFKD: [0x110A, 0x1163, 0x11C2] }, +{ source: [0xC34C], NFC: [0xC34C], NFD: [0x110A, 0x1164], NFKC: [0xC34C], NFKD: [0x110A, 0x1164] }, +{ source: [0xC34D], NFC: [0xC34D], NFD: [0x110A, 0x1164, 0x11A8], NFKC: [0xC34D], NFKD: [0x110A, 0x1164, 0x11A8] }, +{ source: [0xC34E], NFC: [0xC34E], NFD: [0x110A, 0x1164, 0x11A9], NFKC: [0xC34E], NFKD: [0x110A, 0x1164, 0x11A9] }, +{ source: [0xC34F], NFC: [0xC34F], NFD: [0x110A, 0x1164, 0x11AA], NFKC: [0xC34F], NFKD: [0x110A, 0x1164, 0x11AA] }, +{ source: [0xC350], NFC: [0xC350], NFD: [0x110A, 0x1164, 0x11AB], NFKC: [0xC350], NFKD: [0x110A, 0x1164, 0x11AB] }, +{ source: [0xC351], NFC: [0xC351], NFD: [0x110A, 0x1164, 0x11AC], NFKC: [0xC351], NFKD: [0x110A, 0x1164, 0x11AC] }, +{ source: [0xC352], NFC: [0xC352], NFD: [0x110A, 0x1164, 0x11AD], NFKC: [0xC352], NFKD: [0x110A, 0x1164, 0x11AD] }, +{ source: [0xC353], NFC: [0xC353], NFD: [0x110A, 0x1164, 0x11AE], NFKC: [0xC353], NFKD: [0x110A, 0x1164, 0x11AE] }, +{ source: [0xC354], NFC: [0xC354], NFD: [0x110A, 0x1164, 0x11AF], NFKC: [0xC354], NFKD: [0x110A, 0x1164, 0x11AF] }, +{ source: [0xC355], NFC: [0xC355], NFD: [0x110A, 0x1164, 0x11B0], NFKC: [0xC355], NFKD: [0x110A, 0x1164, 0x11B0] }, +{ source: [0xC356], NFC: [0xC356], NFD: [0x110A, 0x1164, 0x11B1], NFKC: [0xC356], NFKD: [0x110A, 0x1164, 0x11B1] }, +{ source: [0xC357], NFC: [0xC357], NFD: [0x110A, 0x1164, 0x11B2], NFKC: [0xC357], NFKD: [0x110A, 0x1164, 0x11B2] }, +{ source: [0xC358], NFC: [0xC358], NFD: [0x110A, 0x1164, 0x11B3], NFKC: [0xC358], NFKD: [0x110A, 0x1164, 0x11B3] }, +{ source: [0xC359], NFC: [0xC359], NFD: [0x110A, 0x1164, 0x11B4], NFKC: [0xC359], NFKD: [0x110A, 0x1164, 0x11B4] }, +{ source: [0xC35A], NFC: [0xC35A], NFD: [0x110A, 0x1164, 0x11B5], NFKC: [0xC35A], NFKD: [0x110A, 0x1164, 0x11B5] }, +{ source: [0xC35B], NFC: [0xC35B], NFD: [0x110A, 0x1164, 0x11B6], NFKC: [0xC35B], NFKD: [0x110A, 0x1164, 0x11B6] }, +{ source: [0xC35C], NFC: [0xC35C], NFD: [0x110A, 0x1164, 0x11B7], NFKC: [0xC35C], NFKD: [0x110A, 0x1164, 0x11B7] }, +{ source: [0xC35D], NFC: [0xC35D], NFD: [0x110A, 0x1164, 0x11B8], NFKC: [0xC35D], NFKD: [0x110A, 0x1164, 0x11B8] }, +{ source: [0xC35E], NFC: [0xC35E], NFD: [0x110A, 0x1164, 0x11B9], NFKC: [0xC35E], NFKD: [0x110A, 0x1164, 0x11B9] }, +{ source: [0xC35F], NFC: [0xC35F], NFD: [0x110A, 0x1164, 0x11BA], NFKC: [0xC35F], NFKD: [0x110A, 0x1164, 0x11BA] }, +{ source: [0xC360], NFC: [0xC360], NFD: [0x110A, 0x1164, 0x11BB], NFKC: [0xC360], NFKD: [0x110A, 0x1164, 0x11BB] }, +{ source: [0xC361], NFC: [0xC361], NFD: [0x110A, 0x1164, 0x11BC], NFKC: [0xC361], NFKD: [0x110A, 0x1164, 0x11BC] }, +{ source: [0xC362], NFC: [0xC362], NFD: [0x110A, 0x1164, 0x11BD], NFKC: [0xC362], NFKD: [0x110A, 0x1164, 0x11BD] }, +{ source: [0xC363], NFC: [0xC363], NFD: [0x110A, 0x1164, 0x11BE], NFKC: [0xC363], NFKD: [0x110A, 0x1164, 0x11BE] }, +{ source: [0xC364], NFC: [0xC364], NFD: [0x110A, 0x1164, 0x11BF], NFKC: [0xC364], NFKD: [0x110A, 0x1164, 0x11BF] }, +{ source: [0xC365], NFC: [0xC365], NFD: [0x110A, 0x1164, 0x11C0], NFKC: [0xC365], NFKD: [0x110A, 0x1164, 0x11C0] }, +{ source: [0xC366], NFC: [0xC366], NFD: [0x110A, 0x1164, 0x11C1], NFKC: [0xC366], NFKD: [0x110A, 0x1164, 0x11C1] }, +{ source: [0xC367], NFC: [0xC367], NFD: [0x110A, 0x1164, 0x11C2], NFKC: [0xC367], NFKD: [0x110A, 0x1164, 0x11C2] }, +{ source: [0xC368], NFC: [0xC368], NFD: [0x110A, 0x1165], NFKC: [0xC368], NFKD: [0x110A, 0x1165] }, +{ source: [0xC369], NFC: [0xC369], NFD: [0x110A, 0x1165, 0x11A8], NFKC: [0xC369], NFKD: [0x110A, 0x1165, 0x11A8] }, +{ source: [0xC36A], NFC: [0xC36A], NFD: [0x110A, 0x1165, 0x11A9], NFKC: [0xC36A], NFKD: [0x110A, 0x1165, 0x11A9] }, +{ source: [0xC36B], NFC: [0xC36B], NFD: [0x110A, 0x1165, 0x11AA], NFKC: [0xC36B], NFKD: [0x110A, 0x1165, 0x11AA] }, +{ source: [0xC36C], NFC: [0xC36C], NFD: [0x110A, 0x1165, 0x11AB], NFKC: [0xC36C], NFKD: [0x110A, 0x1165, 0x11AB] }, +{ source: [0xC36D], NFC: [0xC36D], NFD: [0x110A, 0x1165, 0x11AC], NFKC: [0xC36D], NFKD: [0x110A, 0x1165, 0x11AC] }, +{ source: [0xC36E], NFC: [0xC36E], NFD: [0x110A, 0x1165, 0x11AD], NFKC: [0xC36E], NFKD: [0x110A, 0x1165, 0x11AD] }, +{ source: [0xC36F], NFC: [0xC36F], NFD: [0x110A, 0x1165, 0x11AE], NFKC: [0xC36F], NFKD: [0x110A, 0x1165, 0x11AE] }, +{ source: [0xC370], NFC: [0xC370], NFD: [0x110A, 0x1165, 0x11AF], NFKC: [0xC370], NFKD: [0x110A, 0x1165, 0x11AF] }, +{ source: [0xC371], NFC: [0xC371], NFD: [0x110A, 0x1165, 0x11B0], NFKC: [0xC371], NFKD: [0x110A, 0x1165, 0x11B0] }, +{ source: [0xC372], NFC: [0xC372], NFD: [0x110A, 0x1165, 0x11B1], NFKC: [0xC372], NFKD: [0x110A, 0x1165, 0x11B1] }, +{ source: [0xC373], NFC: [0xC373], NFD: [0x110A, 0x1165, 0x11B2], NFKC: [0xC373], NFKD: [0x110A, 0x1165, 0x11B2] }, +{ source: [0xC374], NFC: [0xC374], NFD: [0x110A, 0x1165, 0x11B3], NFKC: [0xC374], NFKD: [0x110A, 0x1165, 0x11B3] }, +{ source: [0xC375], NFC: [0xC375], NFD: [0x110A, 0x1165, 0x11B4], NFKC: [0xC375], NFKD: [0x110A, 0x1165, 0x11B4] }, +{ source: [0xC376], NFC: [0xC376], NFD: [0x110A, 0x1165, 0x11B5], NFKC: [0xC376], NFKD: [0x110A, 0x1165, 0x11B5] }, +{ source: [0xC377], NFC: [0xC377], NFD: [0x110A, 0x1165, 0x11B6], NFKC: [0xC377], NFKD: [0x110A, 0x1165, 0x11B6] }, +{ source: [0xC378], NFC: [0xC378], NFD: [0x110A, 0x1165, 0x11B7], NFKC: [0xC378], NFKD: [0x110A, 0x1165, 0x11B7] }, +{ source: [0xC379], NFC: [0xC379], NFD: [0x110A, 0x1165, 0x11B8], NFKC: [0xC379], NFKD: [0x110A, 0x1165, 0x11B8] }, +{ source: [0xC37A], NFC: [0xC37A], NFD: [0x110A, 0x1165, 0x11B9], NFKC: [0xC37A], NFKD: [0x110A, 0x1165, 0x11B9] }, +{ source: [0xC37B], NFC: [0xC37B], NFD: [0x110A, 0x1165, 0x11BA], NFKC: [0xC37B], NFKD: [0x110A, 0x1165, 0x11BA] }, +{ source: [0xC37C], NFC: [0xC37C], NFD: [0x110A, 0x1165, 0x11BB], NFKC: [0xC37C], NFKD: [0x110A, 0x1165, 0x11BB] }, +{ source: [0xC37D], NFC: [0xC37D], NFD: [0x110A, 0x1165, 0x11BC], NFKC: [0xC37D], NFKD: [0x110A, 0x1165, 0x11BC] }, +{ source: [0xC37E], NFC: [0xC37E], NFD: [0x110A, 0x1165, 0x11BD], NFKC: [0xC37E], NFKD: [0x110A, 0x1165, 0x11BD] }, +{ source: [0xC37F], NFC: [0xC37F], NFD: [0x110A, 0x1165, 0x11BE], NFKC: [0xC37F], NFKD: [0x110A, 0x1165, 0x11BE] }, +{ source: [0xC380], NFC: [0xC380], NFD: [0x110A, 0x1165, 0x11BF], NFKC: [0xC380], NFKD: [0x110A, 0x1165, 0x11BF] }, +{ source: [0xC381], NFC: [0xC381], NFD: [0x110A, 0x1165, 0x11C0], NFKC: [0xC381], NFKD: [0x110A, 0x1165, 0x11C0] }, +{ source: [0xC382], NFC: [0xC382], NFD: [0x110A, 0x1165, 0x11C1], NFKC: [0xC382], NFKD: [0x110A, 0x1165, 0x11C1] }, +{ source: [0xC383], NFC: [0xC383], NFD: [0x110A, 0x1165, 0x11C2], NFKC: [0xC383], NFKD: [0x110A, 0x1165, 0x11C2] }, +{ source: [0xC384], NFC: [0xC384], NFD: [0x110A, 0x1166], NFKC: [0xC384], NFKD: [0x110A, 0x1166] }, +{ source: [0xC385], NFC: [0xC385], NFD: [0x110A, 0x1166, 0x11A8], NFKC: [0xC385], NFKD: [0x110A, 0x1166, 0x11A8] }, +{ source: [0xC386], NFC: [0xC386], NFD: [0x110A, 0x1166, 0x11A9], NFKC: [0xC386], NFKD: [0x110A, 0x1166, 0x11A9] }, +{ source: [0xC387], NFC: [0xC387], NFD: [0x110A, 0x1166, 0x11AA], NFKC: [0xC387], NFKD: [0x110A, 0x1166, 0x11AA] }, +{ source: [0xC388], NFC: [0xC388], NFD: [0x110A, 0x1166, 0x11AB], NFKC: [0xC388], NFKD: [0x110A, 0x1166, 0x11AB] }, +{ source: [0xC389], NFC: [0xC389], NFD: [0x110A, 0x1166, 0x11AC], NFKC: [0xC389], NFKD: [0x110A, 0x1166, 0x11AC] }, +{ source: [0xC38A], NFC: [0xC38A], NFD: [0x110A, 0x1166, 0x11AD], NFKC: [0xC38A], NFKD: [0x110A, 0x1166, 0x11AD] }, +{ source: [0xC38B], NFC: [0xC38B], NFD: [0x110A, 0x1166, 0x11AE], NFKC: [0xC38B], NFKD: [0x110A, 0x1166, 0x11AE] }, +{ source: [0xC38C], NFC: [0xC38C], NFD: [0x110A, 0x1166, 0x11AF], NFKC: [0xC38C], NFKD: [0x110A, 0x1166, 0x11AF] }, +{ source: [0xC38D], NFC: [0xC38D], NFD: [0x110A, 0x1166, 0x11B0], NFKC: [0xC38D], NFKD: [0x110A, 0x1166, 0x11B0] }, +{ source: [0xC38E], NFC: [0xC38E], NFD: [0x110A, 0x1166, 0x11B1], NFKC: [0xC38E], NFKD: [0x110A, 0x1166, 0x11B1] }, +{ source: [0xC38F], NFC: [0xC38F], NFD: [0x110A, 0x1166, 0x11B2], NFKC: [0xC38F], NFKD: [0x110A, 0x1166, 0x11B2] }, +{ source: [0xC390], NFC: [0xC390], NFD: [0x110A, 0x1166, 0x11B3], NFKC: [0xC390], NFKD: [0x110A, 0x1166, 0x11B3] }, +{ source: [0xC391], NFC: [0xC391], NFD: [0x110A, 0x1166, 0x11B4], NFKC: [0xC391], NFKD: [0x110A, 0x1166, 0x11B4] }, +{ source: [0xC392], NFC: [0xC392], NFD: [0x110A, 0x1166, 0x11B5], NFKC: [0xC392], NFKD: [0x110A, 0x1166, 0x11B5] }, +{ source: [0xC393], NFC: [0xC393], NFD: [0x110A, 0x1166, 0x11B6], NFKC: [0xC393], NFKD: [0x110A, 0x1166, 0x11B6] }, +{ source: [0xC394], NFC: [0xC394], NFD: [0x110A, 0x1166, 0x11B7], NFKC: [0xC394], NFKD: [0x110A, 0x1166, 0x11B7] }, +{ source: [0xC395], NFC: [0xC395], NFD: [0x110A, 0x1166, 0x11B8], NFKC: [0xC395], NFKD: [0x110A, 0x1166, 0x11B8] }, +{ source: [0xC396], NFC: [0xC396], NFD: [0x110A, 0x1166, 0x11B9], NFKC: [0xC396], NFKD: [0x110A, 0x1166, 0x11B9] }, +{ source: [0xC397], NFC: [0xC397], NFD: [0x110A, 0x1166, 0x11BA], NFKC: [0xC397], NFKD: [0x110A, 0x1166, 0x11BA] }, +{ source: [0xC398], NFC: [0xC398], NFD: [0x110A, 0x1166, 0x11BB], NFKC: [0xC398], NFKD: [0x110A, 0x1166, 0x11BB] }, +{ source: [0xC399], NFC: [0xC399], NFD: [0x110A, 0x1166, 0x11BC], NFKC: [0xC399], NFKD: [0x110A, 0x1166, 0x11BC] }, +{ source: [0xC39A], NFC: [0xC39A], NFD: [0x110A, 0x1166, 0x11BD], NFKC: [0xC39A], NFKD: [0x110A, 0x1166, 0x11BD] }, +{ source: [0xC39B], NFC: [0xC39B], NFD: [0x110A, 0x1166, 0x11BE], NFKC: [0xC39B], NFKD: [0x110A, 0x1166, 0x11BE] }, +{ source: [0xC39C], NFC: [0xC39C], NFD: [0x110A, 0x1166, 0x11BF], NFKC: [0xC39C], NFKD: [0x110A, 0x1166, 0x11BF] }, +{ source: [0xC39D], NFC: [0xC39D], NFD: [0x110A, 0x1166, 0x11C0], NFKC: [0xC39D], NFKD: [0x110A, 0x1166, 0x11C0] }, +{ source: [0xC39E], NFC: [0xC39E], NFD: [0x110A, 0x1166, 0x11C1], NFKC: [0xC39E], NFKD: [0x110A, 0x1166, 0x11C1] }, +{ source: [0xC39F], NFC: [0xC39F], NFD: [0x110A, 0x1166, 0x11C2], NFKC: [0xC39F], NFKD: [0x110A, 0x1166, 0x11C2] }, +{ source: [0xC3A0], NFC: [0xC3A0], NFD: [0x110A, 0x1167], NFKC: [0xC3A0], NFKD: [0x110A, 0x1167] }, +{ source: [0xC3A1], NFC: [0xC3A1], NFD: [0x110A, 0x1167, 0x11A8], NFKC: [0xC3A1], NFKD: [0x110A, 0x1167, 0x11A8] }, +{ source: [0xC3A2], NFC: [0xC3A2], NFD: [0x110A, 0x1167, 0x11A9], NFKC: [0xC3A2], NFKD: [0x110A, 0x1167, 0x11A9] }, +{ source: [0xC3A3], NFC: [0xC3A3], NFD: [0x110A, 0x1167, 0x11AA], NFKC: [0xC3A3], NFKD: [0x110A, 0x1167, 0x11AA] }, +{ source: [0xC3A4], NFC: [0xC3A4], NFD: [0x110A, 0x1167, 0x11AB], NFKC: [0xC3A4], NFKD: [0x110A, 0x1167, 0x11AB] }, +{ source: [0xC3A5], NFC: [0xC3A5], NFD: [0x110A, 0x1167, 0x11AC], NFKC: [0xC3A5], NFKD: [0x110A, 0x1167, 0x11AC] }, +{ source: [0xC3A6], NFC: [0xC3A6], NFD: [0x110A, 0x1167, 0x11AD], NFKC: [0xC3A6], NFKD: [0x110A, 0x1167, 0x11AD] }, +{ source: [0xC3A7], NFC: [0xC3A7], NFD: [0x110A, 0x1167, 0x11AE], NFKC: [0xC3A7], NFKD: [0x110A, 0x1167, 0x11AE] }, +{ source: [0xC3A8], NFC: [0xC3A8], NFD: [0x110A, 0x1167, 0x11AF], NFKC: [0xC3A8], NFKD: [0x110A, 0x1167, 0x11AF] }, +{ source: [0xC3A9], NFC: [0xC3A9], NFD: [0x110A, 0x1167, 0x11B0], NFKC: [0xC3A9], NFKD: [0x110A, 0x1167, 0x11B0] }, +{ source: [0xC3AA], NFC: [0xC3AA], NFD: [0x110A, 0x1167, 0x11B1], NFKC: [0xC3AA], NFKD: [0x110A, 0x1167, 0x11B1] }, +{ source: [0xC3AB], NFC: [0xC3AB], NFD: [0x110A, 0x1167, 0x11B2], NFKC: [0xC3AB], NFKD: [0x110A, 0x1167, 0x11B2] }, +{ source: [0xC3AC], NFC: [0xC3AC], NFD: [0x110A, 0x1167, 0x11B3], NFKC: [0xC3AC], NFKD: [0x110A, 0x1167, 0x11B3] }, +{ source: [0xC3AD], NFC: [0xC3AD], NFD: [0x110A, 0x1167, 0x11B4], NFKC: [0xC3AD], NFKD: [0x110A, 0x1167, 0x11B4] }, +{ source: [0xC3AE], NFC: [0xC3AE], NFD: [0x110A, 0x1167, 0x11B5], NFKC: [0xC3AE], NFKD: [0x110A, 0x1167, 0x11B5] }, +{ source: [0xC3AF], NFC: [0xC3AF], NFD: [0x110A, 0x1167, 0x11B6], NFKC: [0xC3AF], NFKD: [0x110A, 0x1167, 0x11B6] }, +{ source: [0xC3B0], NFC: [0xC3B0], NFD: [0x110A, 0x1167, 0x11B7], NFKC: [0xC3B0], NFKD: [0x110A, 0x1167, 0x11B7] }, +{ source: [0xC3B1], NFC: [0xC3B1], NFD: [0x110A, 0x1167, 0x11B8], NFKC: [0xC3B1], NFKD: [0x110A, 0x1167, 0x11B8] }, +{ source: [0xC3B2], NFC: [0xC3B2], NFD: [0x110A, 0x1167, 0x11B9], NFKC: [0xC3B2], NFKD: [0x110A, 0x1167, 0x11B9] }, +{ source: [0xC3B3], NFC: [0xC3B3], NFD: [0x110A, 0x1167, 0x11BA], NFKC: [0xC3B3], NFKD: [0x110A, 0x1167, 0x11BA] }, +{ source: [0xC3B4], NFC: [0xC3B4], NFD: [0x110A, 0x1167, 0x11BB], NFKC: [0xC3B4], NFKD: [0x110A, 0x1167, 0x11BB] }, +{ source: [0xC3B5], NFC: [0xC3B5], NFD: [0x110A, 0x1167, 0x11BC], NFKC: [0xC3B5], NFKD: [0x110A, 0x1167, 0x11BC] }, +{ source: [0xC3B6], NFC: [0xC3B6], NFD: [0x110A, 0x1167, 0x11BD], NFKC: [0xC3B6], NFKD: [0x110A, 0x1167, 0x11BD] }, +{ source: [0xC3B7], NFC: [0xC3B7], NFD: [0x110A, 0x1167, 0x11BE], NFKC: [0xC3B7], NFKD: [0x110A, 0x1167, 0x11BE] }, +{ source: [0xC3B8], NFC: [0xC3B8], NFD: [0x110A, 0x1167, 0x11BF], NFKC: [0xC3B8], NFKD: [0x110A, 0x1167, 0x11BF] }, +{ source: [0xC3B9], NFC: [0xC3B9], NFD: [0x110A, 0x1167, 0x11C0], NFKC: [0xC3B9], NFKD: [0x110A, 0x1167, 0x11C0] }, +{ source: [0xC3BA], NFC: [0xC3BA], NFD: [0x110A, 0x1167, 0x11C1], NFKC: [0xC3BA], NFKD: [0x110A, 0x1167, 0x11C1] }, +{ source: [0xC3BB], NFC: [0xC3BB], NFD: [0x110A, 0x1167, 0x11C2], NFKC: [0xC3BB], NFKD: [0x110A, 0x1167, 0x11C2] }, +{ source: [0xC3BC], NFC: [0xC3BC], NFD: [0x110A, 0x1168], NFKC: [0xC3BC], NFKD: [0x110A, 0x1168] }, +{ source: [0xC3BD], NFC: [0xC3BD], NFD: [0x110A, 0x1168, 0x11A8], NFKC: [0xC3BD], NFKD: [0x110A, 0x1168, 0x11A8] }, +{ source: [0xC3BE], NFC: [0xC3BE], NFD: [0x110A, 0x1168, 0x11A9], NFKC: [0xC3BE], NFKD: [0x110A, 0x1168, 0x11A9] }, +{ source: [0xC3BF], NFC: [0xC3BF], NFD: [0x110A, 0x1168, 0x11AA], NFKC: [0xC3BF], NFKD: [0x110A, 0x1168, 0x11AA] }, +{ source: [0xC3C0], NFC: [0xC3C0], NFD: [0x110A, 0x1168, 0x11AB], NFKC: [0xC3C0], NFKD: [0x110A, 0x1168, 0x11AB] }, +{ source: [0xC3C1], NFC: [0xC3C1], NFD: [0x110A, 0x1168, 0x11AC], NFKC: [0xC3C1], NFKD: [0x110A, 0x1168, 0x11AC] }, +{ source: [0xC3C2], NFC: [0xC3C2], NFD: [0x110A, 0x1168, 0x11AD], NFKC: [0xC3C2], NFKD: [0x110A, 0x1168, 0x11AD] }, +{ source: [0xC3C3], NFC: [0xC3C3], NFD: [0x110A, 0x1168, 0x11AE], NFKC: [0xC3C3], NFKD: [0x110A, 0x1168, 0x11AE] }, +{ source: [0xC3C4], NFC: [0xC3C4], NFD: [0x110A, 0x1168, 0x11AF], NFKC: [0xC3C4], NFKD: [0x110A, 0x1168, 0x11AF] }, +{ source: [0xC3C5], NFC: [0xC3C5], NFD: [0x110A, 0x1168, 0x11B0], NFKC: [0xC3C5], NFKD: [0x110A, 0x1168, 0x11B0] }, +{ source: [0xC3C6], NFC: [0xC3C6], NFD: [0x110A, 0x1168, 0x11B1], NFKC: [0xC3C6], NFKD: [0x110A, 0x1168, 0x11B1] }, +{ source: [0xC3C7], NFC: [0xC3C7], NFD: [0x110A, 0x1168, 0x11B2], NFKC: [0xC3C7], NFKD: [0x110A, 0x1168, 0x11B2] }, +{ source: [0xC3C8], NFC: [0xC3C8], NFD: [0x110A, 0x1168, 0x11B3], NFKC: [0xC3C8], NFKD: [0x110A, 0x1168, 0x11B3] }, +{ source: [0xC3C9], NFC: [0xC3C9], NFD: [0x110A, 0x1168, 0x11B4], NFKC: [0xC3C9], NFKD: [0x110A, 0x1168, 0x11B4] }, +{ source: [0xC3CA], NFC: [0xC3CA], NFD: [0x110A, 0x1168, 0x11B5], NFKC: [0xC3CA], NFKD: [0x110A, 0x1168, 0x11B5] }, +{ source: [0xC3CB], NFC: [0xC3CB], NFD: [0x110A, 0x1168, 0x11B6], NFKC: [0xC3CB], NFKD: [0x110A, 0x1168, 0x11B6] }, +{ source: [0xC3CC], NFC: [0xC3CC], NFD: [0x110A, 0x1168, 0x11B7], NFKC: [0xC3CC], NFKD: [0x110A, 0x1168, 0x11B7] }, +{ source: [0xC3CD], NFC: [0xC3CD], NFD: [0x110A, 0x1168, 0x11B8], NFKC: [0xC3CD], NFKD: [0x110A, 0x1168, 0x11B8] }, +{ source: [0xC3CE], NFC: [0xC3CE], NFD: [0x110A, 0x1168, 0x11B9], NFKC: [0xC3CE], NFKD: [0x110A, 0x1168, 0x11B9] }, +{ source: [0xC3CF], NFC: [0xC3CF], NFD: [0x110A, 0x1168, 0x11BA], NFKC: [0xC3CF], NFKD: [0x110A, 0x1168, 0x11BA] }, +{ source: [0xC3D0], NFC: [0xC3D0], NFD: [0x110A, 0x1168, 0x11BB], NFKC: [0xC3D0], NFKD: [0x110A, 0x1168, 0x11BB] }, +{ source: [0xC3D1], NFC: [0xC3D1], NFD: [0x110A, 0x1168, 0x11BC], NFKC: [0xC3D1], NFKD: [0x110A, 0x1168, 0x11BC] }, +{ source: [0xC3D2], NFC: [0xC3D2], NFD: [0x110A, 0x1168, 0x11BD], NFKC: [0xC3D2], NFKD: [0x110A, 0x1168, 0x11BD] }, +{ source: [0xC3D3], NFC: [0xC3D3], NFD: [0x110A, 0x1168, 0x11BE], NFKC: [0xC3D3], NFKD: [0x110A, 0x1168, 0x11BE] }, +{ source: [0xC3D4], NFC: [0xC3D4], NFD: [0x110A, 0x1168, 0x11BF], NFKC: [0xC3D4], NFKD: [0x110A, 0x1168, 0x11BF] }, +{ source: [0xC3D5], NFC: [0xC3D5], NFD: [0x110A, 0x1168, 0x11C0], NFKC: [0xC3D5], NFKD: [0x110A, 0x1168, 0x11C0] }, +{ source: [0xC3D6], NFC: [0xC3D6], NFD: [0x110A, 0x1168, 0x11C1], NFKC: [0xC3D6], NFKD: [0x110A, 0x1168, 0x11C1] }, +{ source: [0xC3D7], NFC: [0xC3D7], NFD: [0x110A, 0x1168, 0x11C2], NFKC: [0xC3D7], NFKD: [0x110A, 0x1168, 0x11C2] }, +{ source: [0xC3D8], NFC: [0xC3D8], NFD: [0x110A, 0x1169], NFKC: [0xC3D8], NFKD: [0x110A, 0x1169] }, +{ source: [0xC3D9], NFC: [0xC3D9], NFD: [0x110A, 0x1169, 0x11A8], NFKC: [0xC3D9], NFKD: [0x110A, 0x1169, 0x11A8] }, +{ source: [0xC3DA], NFC: [0xC3DA], NFD: [0x110A, 0x1169, 0x11A9], NFKC: [0xC3DA], NFKD: [0x110A, 0x1169, 0x11A9] }, +{ source: [0xC3DB], NFC: [0xC3DB], NFD: [0x110A, 0x1169, 0x11AA], NFKC: [0xC3DB], NFKD: [0x110A, 0x1169, 0x11AA] }, +{ source: [0xC3DC], NFC: [0xC3DC], NFD: [0x110A, 0x1169, 0x11AB], NFKC: [0xC3DC], NFKD: [0x110A, 0x1169, 0x11AB] }, +{ source: [0xC3DD], NFC: [0xC3DD], NFD: [0x110A, 0x1169, 0x11AC], NFKC: [0xC3DD], NFKD: [0x110A, 0x1169, 0x11AC] }, +{ source: [0xC3DE], NFC: [0xC3DE], NFD: [0x110A, 0x1169, 0x11AD], NFKC: [0xC3DE], NFKD: [0x110A, 0x1169, 0x11AD] }, +{ source: [0xC3DF], NFC: [0xC3DF], NFD: [0x110A, 0x1169, 0x11AE], NFKC: [0xC3DF], NFKD: [0x110A, 0x1169, 0x11AE] }, +{ source: [0xC3E0], NFC: [0xC3E0], NFD: [0x110A, 0x1169, 0x11AF], NFKC: [0xC3E0], NFKD: [0x110A, 0x1169, 0x11AF] }, +{ source: [0xC3E1], NFC: [0xC3E1], NFD: [0x110A, 0x1169, 0x11B0], NFKC: [0xC3E1], NFKD: [0x110A, 0x1169, 0x11B0] }, +{ source: [0xC3E2], NFC: [0xC3E2], NFD: [0x110A, 0x1169, 0x11B1], NFKC: [0xC3E2], NFKD: [0x110A, 0x1169, 0x11B1] }, +{ source: [0xC3E3], NFC: [0xC3E3], NFD: [0x110A, 0x1169, 0x11B2], NFKC: [0xC3E3], NFKD: [0x110A, 0x1169, 0x11B2] }, +{ source: [0xC3E4], NFC: [0xC3E4], NFD: [0x110A, 0x1169, 0x11B3], NFKC: [0xC3E4], NFKD: [0x110A, 0x1169, 0x11B3] }, +{ source: [0xC3E5], NFC: [0xC3E5], NFD: [0x110A, 0x1169, 0x11B4], NFKC: [0xC3E5], NFKD: [0x110A, 0x1169, 0x11B4] }, +{ source: [0xC3E6], NFC: [0xC3E6], NFD: [0x110A, 0x1169, 0x11B5], NFKC: [0xC3E6], NFKD: [0x110A, 0x1169, 0x11B5] }, +{ source: [0xC3E7], NFC: [0xC3E7], NFD: [0x110A, 0x1169, 0x11B6], NFKC: [0xC3E7], NFKD: [0x110A, 0x1169, 0x11B6] }, +{ source: [0xC3E8], NFC: [0xC3E8], NFD: [0x110A, 0x1169, 0x11B7], NFKC: [0xC3E8], NFKD: [0x110A, 0x1169, 0x11B7] }, +{ source: [0xC3E9], NFC: [0xC3E9], NFD: [0x110A, 0x1169, 0x11B8], NFKC: [0xC3E9], NFKD: [0x110A, 0x1169, 0x11B8] }, +{ source: [0xC3EA], NFC: [0xC3EA], NFD: [0x110A, 0x1169, 0x11B9], NFKC: [0xC3EA], NFKD: [0x110A, 0x1169, 0x11B9] }, +{ source: [0xC3EB], NFC: [0xC3EB], NFD: [0x110A, 0x1169, 0x11BA], NFKC: [0xC3EB], NFKD: [0x110A, 0x1169, 0x11BA] }, +{ source: [0xC3EC], NFC: [0xC3EC], NFD: [0x110A, 0x1169, 0x11BB], NFKC: [0xC3EC], NFKD: [0x110A, 0x1169, 0x11BB] }, +{ source: [0xC3ED], NFC: [0xC3ED], NFD: [0x110A, 0x1169, 0x11BC], NFKC: [0xC3ED], NFKD: [0x110A, 0x1169, 0x11BC] }, +{ source: [0xC3EE], NFC: [0xC3EE], NFD: [0x110A, 0x1169, 0x11BD], NFKC: [0xC3EE], NFKD: [0x110A, 0x1169, 0x11BD] }, +{ source: [0xC3EF], NFC: [0xC3EF], NFD: [0x110A, 0x1169, 0x11BE], NFKC: [0xC3EF], NFKD: [0x110A, 0x1169, 0x11BE] }, +{ source: [0xC3F0], NFC: [0xC3F0], NFD: [0x110A, 0x1169, 0x11BF], NFKC: [0xC3F0], NFKD: [0x110A, 0x1169, 0x11BF] }, +{ source: [0xC3F1], NFC: [0xC3F1], NFD: [0x110A, 0x1169, 0x11C0], NFKC: [0xC3F1], NFKD: [0x110A, 0x1169, 0x11C0] }, +{ source: [0xC3F2], NFC: [0xC3F2], NFD: [0x110A, 0x1169, 0x11C1], NFKC: [0xC3F2], NFKD: [0x110A, 0x1169, 0x11C1] }, +{ source: [0xC3F3], NFC: [0xC3F3], NFD: [0x110A, 0x1169, 0x11C2], NFKC: [0xC3F3], NFKD: [0x110A, 0x1169, 0x11C2] }, +{ source: [0xC3F4], NFC: [0xC3F4], NFD: [0x110A, 0x116A], NFKC: [0xC3F4], NFKD: [0x110A, 0x116A] }, +{ source: [0xC3F5], NFC: [0xC3F5], NFD: [0x110A, 0x116A, 0x11A8], NFKC: [0xC3F5], NFKD: [0x110A, 0x116A, 0x11A8] }, +{ source: [0xC3F6], NFC: [0xC3F6], NFD: [0x110A, 0x116A, 0x11A9], NFKC: [0xC3F6], NFKD: [0x110A, 0x116A, 0x11A9] }, +{ source: [0xC3F7], NFC: [0xC3F7], NFD: [0x110A, 0x116A, 0x11AA], NFKC: [0xC3F7], NFKD: [0x110A, 0x116A, 0x11AA] }, +{ source: [0xC3F8], NFC: [0xC3F8], NFD: [0x110A, 0x116A, 0x11AB], NFKC: [0xC3F8], NFKD: [0x110A, 0x116A, 0x11AB] }, +{ source: [0xC3F9], NFC: [0xC3F9], NFD: [0x110A, 0x116A, 0x11AC], NFKC: [0xC3F9], NFKD: [0x110A, 0x116A, 0x11AC] }, +{ source: [0xC3FA], NFC: [0xC3FA], NFD: [0x110A, 0x116A, 0x11AD], NFKC: [0xC3FA], NFKD: [0x110A, 0x116A, 0x11AD] }, +{ source: [0xC3FB], NFC: [0xC3FB], NFD: [0x110A, 0x116A, 0x11AE], NFKC: [0xC3FB], NFKD: [0x110A, 0x116A, 0x11AE] }, +{ source: [0xC3FC], NFC: [0xC3FC], NFD: [0x110A, 0x116A, 0x11AF], NFKC: [0xC3FC], NFKD: [0x110A, 0x116A, 0x11AF] }, +{ source: [0xC3FD], NFC: [0xC3FD], NFD: [0x110A, 0x116A, 0x11B0], NFKC: [0xC3FD], NFKD: [0x110A, 0x116A, 0x11B0] }, +{ source: [0xC3FE], NFC: [0xC3FE], NFD: [0x110A, 0x116A, 0x11B1], NFKC: [0xC3FE], NFKD: [0x110A, 0x116A, 0x11B1] }, +{ source: [0xC3FF], NFC: [0xC3FF], NFD: [0x110A, 0x116A, 0x11B2], NFKC: [0xC3FF], NFKD: [0x110A, 0x116A, 0x11B2] }, +{ source: [0xC400], NFC: [0xC400], NFD: [0x110A, 0x116A, 0x11B3], NFKC: [0xC400], NFKD: [0x110A, 0x116A, 0x11B3] }, +{ source: [0xC401], NFC: [0xC401], NFD: [0x110A, 0x116A, 0x11B4], NFKC: [0xC401], NFKD: [0x110A, 0x116A, 0x11B4] }, +{ source: [0xC402], NFC: [0xC402], NFD: [0x110A, 0x116A, 0x11B5], NFKC: [0xC402], NFKD: [0x110A, 0x116A, 0x11B5] }, +{ source: [0xC403], NFC: [0xC403], NFD: [0x110A, 0x116A, 0x11B6], NFKC: [0xC403], NFKD: [0x110A, 0x116A, 0x11B6] }, +{ source: [0xC404], NFC: [0xC404], NFD: [0x110A, 0x116A, 0x11B7], NFKC: [0xC404], NFKD: [0x110A, 0x116A, 0x11B7] }, +{ source: [0xC405], NFC: [0xC405], NFD: [0x110A, 0x116A, 0x11B8], NFKC: [0xC405], NFKD: [0x110A, 0x116A, 0x11B8] }, +{ source: [0xC406], NFC: [0xC406], NFD: [0x110A, 0x116A, 0x11B9], NFKC: [0xC406], NFKD: [0x110A, 0x116A, 0x11B9] }, +{ source: [0xC407], NFC: [0xC407], NFD: [0x110A, 0x116A, 0x11BA], NFKC: [0xC407], NFKD: [0x110A, 0x116A, 0x11BA] }, +{ source: [0xC408], NFC: [0xC408], NFD: [0x110A, 0x116A, 0x11BB], NFKC: [0xC408], NFKD: [0x110A, 0x116A, 0x11BB] }, +{ source: [0xC409], NFC: [0xC409], NFD: [0x110A, 0x116A, 0x11BC], NFKC: [0xC409], NFKD: [0x110A, 0x116A, 0x11BC] }, +{ source: [0xC40A], NFC: [0xC40A], NFD: [0x110A, 0x116A, 0x11BD], NFKC: [0xC40A], NFKD: [0x110A, 0x116A, 0x11BD] }, +{ source: [0xC40B], NFC: [0xC40B], NFD: [0x110A, 0x116A, 0x11BE], NFKC: [0xC40B], NFKD: [0x110A, 0x116A, 0x11BE] }, +{ source: [0xC40C], NFC: [0xC40C], NFD: [0x110A, 0x116A, 0x11BF], NFKC: [0xC40C], NFKD: [0x110A, 0x116A, 0x11BF] }, +{ source: [0xC40D], NFC: [0xC40D], NFD: [0x110A, 0x116A, 0x11C0], NFKC: [0xC40D], NFKD: [0x110A, 0x116A, 0x11C0] }, +{ source: [0xC40E], NFC: [0xC40E], NFD: [0x110A, 0x116A, 0x11C1], NFKC: [0xC40E], NFKD: [0x110A, 0x116A, 0x11C1] }, +{ source: [0xC40F], NFC: [0xC40F], NFD: [0x110A, 0x116A, 0x11C2], NFKC: [0xC40F], NFKD: [0x110A, 0x116A, 0x11C2] }, +{ source: [0xC410], NFC: [0xC410], NFD: [0x110A, 0x116B], NFKC: [0xC410], NFKD: [0x110A, 0x116B] }, +{ source: [0xC411], NFC: [0xC411], NFD: [0x110A, 0x116B, 0x11A8], NFKC: [0xC411], NFKD: [0x110A, 0x116B, 0x11A8] }, +{ source: [0xC412], NFC: [0xC412], NFD: [0x110A, 0x116B, 0x11A9], NFKC: [0xC412], NFKD: [0x110A, 0x116B, 0x11A9] }, +{ source: [0xC413], NFC: [0xC413], NFD: [0x110A, 0x116B, 0x11AA], NFKC: [0xC413], NFKD: [0x110A, 0x116B, 0x11AA] }, +{ source: [0xC414], NFC: [0xC414], NFD: [0x110A, 0x116B, 0x11AB], NFKC: [0xC414], NFKD: [0x110A, 0x116B, 0x11AB] }, +{ source: [0xC415], NFC: [0xC415], NFD: [0x110A, 0x116B, 0x11AC], NFKC: [0xC415], NFKD: [0x110A, 0x116B, 0x11AC] }, +{ source: [0xC416], NFC: [0xC416], NFD: [0x110A, 0x116B, 0x11AD], NFKC: [0xC416], NFKD: [0x110A, 0x116B, 0x11AD] }, +{ source: [0xC417], NFC: [0xC417], NFD: [0x110A, 0x116B, 0x11AE], NFKC: [0xC417], NFKD: [0x110A, 0x116B, 0x11AE] }, +{ source: [0xC418], NFC: [0xC418], NFD: [0x110A, 0x116B, 0x11AF], NFKC: [0xC418], NFKD: [0x110A, 0x116B, 0x11AF] }, +{ source: [0xC419], NFC: [0xC419], NFD: [0x110A, 0x116B, 0x11B0], NFKC: [0xC419], NFKD: [0x110A, 0x116B, 0x11B0] }, +{ source: [0xC41A], NFC: [0xC41A], NFD: [0x110A, 0x116B, 0x11B1], NFKC: [0xC41A], NFKD: [0x110A, 0x116B, 0x11B1] }, +{ source: [0xC41B], NFC: [0xC41B], NFD: [0x110A, 0x116B, 0x11B2], NFKC: [0xC41B], NFKD: [0x110A, 0x116B, 0x11B2] }, +{ source: [0xC41C], NFC: [0xC41C], NFD: [0x110A, 0x116B, 0x11B3], NFKC: [0xC41C], NFKD: [0x110A, 0x116B, 0x11B3] }, +{ source: [0xC41D], NFC: [0xC41D], NFD: [0x110A, 0x116B, 0x11B4], NFKC: [0xC41D], NFKD: [0x110A, 0x116B, 0x11B4] }, +{ source: [0xC41E], NFC: [0xC41E], NFD: [0x110A, 0x116B, 0x11B5], NFKC: [0xC41E], NFKD: [0x110A, 0x116B, 0x11B5] }, +{ source: [0xC41F], NFC: [0xC41F], NFD: [0x110A, 0x116B, 0x11B6], NFKC: [0xC41F], NFKD: [0x110A, 0x116B, 0x11B6] }, +{ source: [0xC420], NFC: [0xC420], NFD: [0x110A, 0x116B, 0x11B7], NFKC: [0xC420], NFKD: [0x110A, 0x116B, 0x11B7] }, +{ source: [0xC421], NFC: [0xC421], NFD: [0x110A, 0x116B, 0x11B8], NFKC: [0xC421], NFKD: [0x110A, 0x116B, 0x11B8] }, +{ source: [0xC422], NFC: [0xC422], NFD: [0x110A, 0x116B, 0x11B9], NFKC: [0xC422], NFKD: [0x110A, 0x116B, 0x11B9] }, +{ source: [0xC423], NFC: [0xC423], NFD: [0x110A, 0x116B, 0x11BA], NFKC: [0xC423], NFKD: [0x110A, 0x116B, 0x11BA] }, +{ source: [0xC424], NFC: [0xC424], NFD: [0x110A, 0x116B, 0x11BB], NFKC: [0xC424], NFKD: [0x110A, 0x116B, 0x11BB] }, +{ source: [0xC425], NFC: [0xC425], NFD: [0x110A, 0x116B, 0x11BC], NFKC: [0xC425], NFKD: [0x110A, 0x116B, 0x11BC] }, +{ source: [0xC426], NFC: [0xC426], NFD: [0x110A, 0x116B, 0x11BD], NFKC: [0xC426], NFKD: [0x110A, 0x116B, 0x11BD] }, +{ source: [0xC427], NFC: [0xC427], NFD: [0x110A, 0x116B, 0x11BE], NFKC: [0xC427], NFKD: [0x110A, 0x116B, 0x11BE] }, +{ source: [0xC428], NFC: [0xC428], NFD: [0x110A, 0x116B, 0x11BF], NFKC: [0xC428], NFKD: [0x110A, 0x116B, 0x11BF] }, +{ source: [0xC429], NFC: [0xC429], NFD: [0x110A, 0x116B, 0x11C0], NFKC: [0xC429], NFKD: [0x110A, 0x116B, 0x11C0] }, +{ source: [0xC42A], NFC: [0xC42A], NFD: [0x110A, 0x116B, 0x11C1], NFKC: [0xC42A], NFKD: [0x110A, 0x116B, 0x11C1] }, +{ source: [0xC42B], NFC: [0xC42B], NFD: [0x110A, 0x116B, 0x11C2], NFKC: [0xC42B], NFKD: [0x110A, 0x116B, 0x11C2] }, +{ source: [0xC42C], NFC: [0xC42C], NFD: [0x110A, 0x116C], NFKC: [0xC42C], NFKD: [0x110A, 0x116C] }, +{ source: [0xC42D], NFC: [0xC42D], NFD: [0x110A, 0x116C, 0x11A8], NFKC: [0xC42D], NFKD: [0x110A, 0x116C, 0x11A8] }, +{ source: [0xC42E], NFC: [0xC42E], NFD: [0x110A, 0x116C, 0x11A9], NFKC: [0xC42E], NFKD: [0x110A, 0x116C, 0x11A9] }, +{ source: [0xC42F], NFC: [0xC42F], NFD: [0x110A, 0x116C, 0x11AA], NFKC: [0xC42F], NFKD: [0x110A, 0x116C, 0x11AA] }, +{ source: [0xC430], NFC: [0xC430], NFD: [0x110A, 0x116C, 0x11AB], NFKC: [0xC430], NFKD: [0x110A, 0x116C, 0x11AB] }, +{ source: [0xC431], NFC: [0xC431], NFD: [0x110A, 0x116C, 0x11AC], NFKC: [0xC431], NFKD: [0x110A, 0x116C, 0x11AC] }, +{ source: [0xC432], NFC: [0xC432], NFD: [0x110A, 0x116C, 0x11AD], NFKC: [0xC432], NFKD: [0x110A, 0x116C, 0x11AD] }, +{ source: [0xC433], NFC: [0xC433], NFD: [0x110A, 0x116C, 0x11AE], NFKC: [0xC433], NFKD: [0x110A, 0x116C, 0x11AE] }, +{ source: [0xC434], NFC: [0xC434], NFD: [0x110A, 0x116C, 0x11AF], NFKC: [0xC434], NFKD: [0x110A, 0x116C, 0x11AF] }, +{ source: [0xC435], NFC: [0xC435], NFD: [0x110A, 0x116C, 0x11B0], NFKC: [0xC435], NFKD: [0x110A, 0x116C, 0x11B0] }, +{ source: [0xC436], NFC: [0xC436], NFD: [0x110A, 0x116C, 0x11B1], NFKC: [0xC436], NFKD: [0x110A, 0x116C, 0x11B1] }, +{ source: [0xC437], NFC: [0xC437], NFD: [0x110A, 0x116C, 0x11B2], NFKC: [0xC437], NFKD: [0x110A, 0x116C, 0x11B2] }, +{ source: [0xC438], NFC: [0xC438], NFD: [0x110A, 0x116C, 0x11B3], NFKC: [0xC438], NFKD: [0x110A, 0x116C, 0x11B3] }, +{ source: [0xC439], NFC: [0xC439], NFD: [0x110A, 0x116C, 0x11B4], NFKC: [0xC439], NFKD: [0x110A, 0x116C, 0x11B4] }, +{ source: [0xC43A], NFC: [0xC43A], NFD: [0x110A, 0x116C, 0x11B5], NFKC: [0xC43A], NFKD: [0x110A, 0x116C, 0x11B5] }, +{ source: [0xC43B], NFC: [0xC43B], NFD: [0x110A, 0x116C, 0x11B6], NFKC: [0xC43B], NFKD: [0x110A, 0x116C, 0x11B6] }, +{ source: [0xC43C], NFC: [0xC43C], NFD: [0x110A, 0x116C, 0x11B7], NFKC: [0xC43C], NFKD: [0x110A, 0x116C, 0x11B7] }, +{ source: [0xC43D], NFC: [0xC43D], NFD: [0x110A, 0x116C, 0x11B8], NFKC: [0xC43D], NFKD: [0x110A, 0x116C, 0x11B8] }, +{ source: [0xC43E], NFC: [0xC43E], NFD: [0x110A, 0x116C, 0x11B9], NFKC: [0xC43E], NFKD: [0x110A, 0x116C, 0x11B9] }, +{ source: [0xC43F], NFC: [0xC43F], NFD: [0x110A, 0x116C, 0x11BA], NFKC: [0xC43F], NFKD: [0x110A, 0x116C, 0x11BA] }, +{ source: [0xC440], NFC: [0xC440], NFD: [0x110A, 0x116C, 0x11BB], NFKC: [0xC440], NFKD: [0x110A, 0x116C, 0x11BB] }, +{ source: [0xC441], NFC: [0xC441], NFD: [0x110A, 0x116C, 0x11BC], NFKC: [0xC441], NFKD: [0x110A, 0x116C, 0x11BC] }, +{ source: [0xC442], NFC: [0xC442], NFD: [0x110A, 0x116C, 0x11BD], NFKC: [0xC442], NFKD: [0x110A, 0x116C, 0x11BD] }, +{ source: [0xC443], NFC: [0xC443], NFD: [0x110A, 0x116C, 0x11BE], NFKC: [0xC443], NFKD: [0x110A, 0x116C, 0x11BE] }, +{ source: [0xC444], NFC: [0xC444], NFD: [0x110A, 0x116C, 0x11BF], NFKC: [0xC444], NFKD: [0x110A, 0x116C, 0x11BF] }, +{ source: [0xC445], NFC: [0xC445], NFD: [0x110A, 0x116C, 0x11C0], NFKC: [0xC445], NFKD: [0x110A, 0x116C, 0x11C0] }, +{ source: [0xC446], NFC: [0xC446], NFD: [0x110A, 0x116C, 0x11C1], NFKC: [0xC446], NFKD: [0x110A, 0x116C, 0x11C1] }, +{ source: [0xC447], NFC: [0xC447], NFD: [0x110A, 0x116C, 0x11C2], NFKC: [0xC447], NFKD: [0x110A, 0x116C, 0x11C2] }, +{ source: [0xC448], NFC: [0xC448], NFD: [0x110A, 0x116D], NFKC: [0xC448], NFKD: [0x110A, 0x116D] }, +{ source: [0xC449], NFC: [0xC449], NFD: [0x110A, 0x116D, 0x11A8], NFKC: [0xC449], NFKD: [0x110A, 0x116D, 0x11A8] }, +{ source: [0xC44A], NFC: [0xC44A], NFD: [0x110A, 0x116D, 0x11A9], NFKC: [0xC44A], NFKD: [0x110A, 0x116D, 0x11A9] }, +{ source: [0xC44B], NFC: [0xC44B], NFD: [0x110A, 0x116D, 0x11AA], NFKC: [0xC44B], NFKD: [0x110A, 0x116D, 0x11AA] }, +{ source: [0xC44C], NFC: [0xC44C], NFD: [0x110A, 0x116D, 0x11AB], NFKC: [0xC44C], NFKD: [0x110A, 0x116D, 0x11AB] }, +{ source: [0xC44D], NFC: [0xC44D], NFD: [0x110A, 0x116D, 0x11AC], NFKC: [0xC44D], NFKD: [0x110A, 0x116D, 0x11AC] }, +{ source: [0xC44E], NFC: [0xC44E], NFD: [0x110A, 0x116D, 0x11AD], NFKC: [0xC44E], NFKD: [0x110A, 0x116D, 0x11AD] }, +{ source: [0xC44F], NFC: [0xC44F], NFD: [0x110A, 0x116D, 0x11AE], NFKC: [0xC44F], NFKD: [0x110A, 0x116D, 0x11AE] }, +{ source: [0xC450], NFC: [0xC450], NFD: [0x110A, 0x116D, 0x11AF], NFKC: [0xC450], NFKD: [0x110A, 0x116D, 0x11AF] }, +{ source: [0xC451], NFC: [0xC451], NFD: [0x110A, 0x116D, 0x11B0], NFKC: [0xC451], NFKD: [0x110A, 0x116D, 0x11B0] }, +{ source: [0xC452], NFC: [0xC452], NFD: [0x110A, 0x116D, 0x11B1], NFKC: [0xC452], NFKD: [0x110A, 0x116D, 0x11B1] }, +{ source: [0xC453], NFC: [0xC453], NFD: [0x110A, 0x116D, 0x11B2], NFKC: [0xC453], NFKD: [0x110A, 0x116D, 0x11B2] }, +{ source: [0xC454], NFC: [0xC454], NFD: [0x110A, 0x116D, 0x11B3], NFKC: [0xC454], NFKD: [0x110A, 0x116D, 0x11B3] }, +{ source: [0xC455], NFC: [0xC455], NFD: [0x110A, 0x116D, 0x11B4], NFKC: [0xC455], NFKD: [0x110A, 0x116D, 0x11B4] }, +{ source: [0xC456], NFC: [0xC456], NFD: [0x110A, 0x116D, 0x11B5], NFKC: [0xC456], NFKD: [0x110A, 0x116D, 0x11B5] }, +{ source: [0xC457], NFC: [0xC457], NFD: [0x110A, 0x116D, 0x11B6], NFKC: [0xC457], NFKD: [0x110A, 0x116D, 0x11B6] }, +{ source: [0xC458], NFC: [0xC458], NFD: [0x110A, 0x116D, 0x11B7], NFKC: [0xC458], NFKD: [0x110A, 0x116D, 0x11B7] }, +{ source: [0xC459], NFC: [0xC459], NFD: [0x110A, 0x116D, 0x11B8], NFKC: [0xC459], NFKD: [0x110A, 0x116D, 0x11B8] }, +{ source: [0xC45A], NFC: [0xC45A], NFD: [0x110A, 0x116D, 0x11B9], NFKC: [0xC45A], NFKD: [0x110A, 0x116D, 0x11B9] }, +{ source: [0xC45B], NFC: [0xC45B], NFD: [0x110A, 0x116D, 0x11BA], NFKC: [0xC45B], NFKD: [0x110A, 0x116D, 0x11BA] }, +{ source: [0xC45C], NFC: [0xC45C], NFD: [0x110A, 0x116D, 0x11BB], NFKC: [0xC45C], NFKD: [0x110A, 0x116D, 0x11BB] }, +{ source: [0xC45D], NFC: [0xC45D], NFD: [0x110A, 0x116D, 0x11BC], NFKC: [0xC45D], NFKD: [0x110A, 0x116D, 0x11BC] }, +{ source: [0xC45E], NFC: [0xC45E], NFD: [0x110A, 0x116D, 0x11BD], NFKC: [0xC45E], NFKD: [0x110A, 0x116D, 0x11BD] }, +{ source: [0xC45F], NFC: [0xC45F], NFD: [0x110A, 0x116D, 0x11BE], NFKC: [0xC45F], NFKD: [0x110A, 0x116D, 0x11BE] }, +{ source: [0xC460], NFC: [0xC460], NFD: [0x110A, 0x116D, 0x11BF], NFKC: [0xC460], NFKD: [0x110A, 0x116D, 0x11BF] }, +{ source: [0xC461], NFC: [0xC461], NFD: [0x110A, 0x116D, 0x11C0], NFKC: [0xC461], NFKD: [0x110A, 0x116D, 0x11C0] }, +{ source: [0xC462], NFC: [0xC462], NFD: [0x110A, 0x116D, 0x11C1], NFKC: [0xC462], NFKD: [0x110A, 0x116D, 0x11C1] }, +{ source: [0xC463], NFC: [0xC463], NFD: [0x110A, 0x116D, 0x11C2], NFKC: [0xC463], NFKD: [0x110A, 0x116D, 0x11C2] }, +{ source: [0xC464], NFC: [0xC464], NFD: [0x110A, 0x116E], NFKC: [0xC464], NFKD: [0x110A, 0x116E] }, +{ source: [0xC465], NFC: [0xC465], NFD: [0x110A, 0x116E, 0x11A8], NFKC: [0xC465], NFKD: [0x110A, 0x116E, 0x11A8] }, +{ source: [0xC466], NFC: [0xC466], NFD: [0x110A, 0x116E, 0x11A9], NFKC: [0xC466], NFKD: [0x110A, 0x116E, 0x11A9] }, +{ source: [0xC467], NFC: [0xC467], NFD: [0x110A, 0x116E, 0x11AA], NFKC: [0xC467], NFKD: [0x110A, 0x116E, 0x11AA] }, +{ source: [0xC468], NFC: [0xC468], NFD: [0x110A, 0x116E, 0x11AB], NFKC: [0xC468], NFKD: [0x110A, 0x116E, 0x11AB] }, +{ source: [0xC469], NFC: [0xC469], NFD: [0x110A, 0x116E, 0x11AC], NFKC: [0xC469], NFKD: [0x110A, 0x116E, 0x11AC] }, +{ source: [0xC46A], NFC: [0xC46A], NFD: [0x110A, 0x116E, 0x11AD], NFKC: [0xC46A], NFKD: [0x110A, 0x116E, 0x11AD] }, +{ source: [0xC46B], NFC: [0xC46B], NFD: [0x110A, 0x116E, 0x11AE], NFKC: [0xC46B], NFKD: [0x110A, 0x116E, 0x11AE] }, +{ source: [0xC46C], NFC: [0xC46C], NFD: [0x110A, 0x116E, 0x11AF], NFKC: [0xC46C], NFKD: [0x110A, 0x116E, 0x11AF] }, +{ source: [0xC46D], NFC: [0xC46D], NFD: [0x110A, 0x116E, 0x11B0], NFKC: [0xC46D], NFKD: [0x110A, 0x116E, 0x11B0] }, +{ source: [0xC46E], NFC: [0xC46E], NFD: [0x110A, 0x116E, 0x11B1], NFKC: [0xC46E], NFKD: [0x110A, 0x116E, 0x11B1] }, +{ source: [0xC46F], NFC: [0xC46F], NFD: [0x110A, 0x116E, 0x11B2], NFKC: [0xC46F], NFKD: [0x110A, 0x116E, 0x11B2] }, +{ source: [0xC470], NFC: [0xC470], NFD: [0x110A, 0x116E, 0x11B3], NFKC: [0xC470], NFKD: [0x110A, 0x116E, 0x11B3] }, +{ source: [0xC471], NFC: [0xC471], NFD: [0x110A, 0x116E, 0x11B4], NFKC: [0xC471], NFKD: [0x110A, 0x116E, 0x11B4] }, +{ source: [0xC472], NFC: [0xC472], NFD: [0x110A, 0x116E, 0x11B5], NFKC: [0xC472], NFKD: [0x110A, 0x116E, 0x11B5] }, +{ source: [0xC473], NFC: [0xC473], NFD: [0x110A, 0x116E, 0x11B6], NFKC: [0xC473], NFKD: [0x110A, 0x116E, 0x11B6] }, +{ source: [0xC474], NFC: [0xC474], NFD: [0x110A, 0x116E, 0x11B7], NFKC: [0xC474], NFKD: [0x110A, 0x116E, 0x11B7] }, +{ source: [0xC475], NFC: [0xC475], NFD: [0x110A, 0x116E, 0x11B8], NFKC: [0xC475], NFKD: [0x110A, 0x116E, 0x11B8] }, +{ source: [0xC476], NFC: [0xC476], NFD: [0x110A, 0x116E, 0x11B9], NFKC: [0xC476], NFKD: [0x110A, 0x116E, 0x11B9] }, +{ source: [0xC477], NFC: [0xC477], NFD: [0x110A, 0x116E, 0x11BA], NFKC: [0xC477], NFKD: [0x110A, 0x116E, 0x11BA] }, +{ source: [0xC478], NFC: [0xC478], NFD: [0x110A, 0x116E, 0x11BB], NFKC: [0xC478], NFKD: [0x110A, 0x116E, 0x11BB] }, +{ source: [0xC479], NFC: [0xC479], NFD: [0x110A, 0x116E, 0x11BC], NFKC: [0xC479], NFKD: [0x110A, 0x116E, 0x11BC] }, +{ source: [0xC47A], NFC: [0xC47A], NFD: [0x110A, 0x116E, 0x11BD], NFKC: [0xC47A], NFKD: [0x110A, 0x116E, 0x11BD] }, +{ source: [0xC47B], NFC: [0xC47B], NFD: [0x110A, 0x116E, 0x11BE], NFKC: [0xC47B], NFKD: [0x110A, 0x116E, 0x11BE] }, +{ source: [0xC47C], NFC: [0xC47C], NFD: [0x110A, 0x116E, 0x11BF], NFKC: [0xC47C], NFKD: [0x110A, 0x116E, 0x11BF] }, +{ source: [0xC47D], NFC: [0xC47D], NFD: [0x110A, 0x116E, 0x11C0], NFKC: [0xC47D], NFKD: [0x110A, 0x116E, 0x11C0] }, +{ source: [0xC47E], NFC: [0xC47E], NFD: [0x110A, 0x116E, 0x11C1], NFKC: [0xC47E], NFKD: [0x110A, 0x116E, 0x11C1] }, +{ source: [0xC47F], NFC: [0xC47F], NFD: [0x110A, 0x116E, 0x11C2], NFKC: [0xC47F], NFKD: [0x110A, 0x116E, 0x11C2] }, +{ source: [0xC480], NFC: [0xC480], NFD: [0x110A, 0x116F], NFKC: [0xC480], NFKD: [0x110A, 0x116F] }, +{ source: [0xC481], NFC: [0xC481], NFD: [0x110A, 0x116F, 0x11A8], NFKC: [0xC481], NFKD: [0x110A, 0x116F, 0x11A8] }, +{ source: [0xC482], NFC: [0xC482], NFD: [0x110A, 0x116F, 0x11A9], NFKC: [0xC482], NFKD: [0x110A, 0x116F, 0x11A9] }, +{ source: [0xC483], NFC: [0xC483], NFD: [0x110A, 0x116F, 0x11AA], NFKC: [0xC483], NFKD: [0x110A, 0x116F, 0x11AA] }, +{ source: [0xC484], NFC: [0xC484], NFD: [0x110A, 0x116F, 0x11AB], NFKC: [0xC484], NFKD: [0x110A, 0x116F, 0x11AB] }, +{ source: [0xC485], NFC: [0xC485], NFD: [0x110A, 0x116F, 0x11AC], NFKC: [0xC485], NFKD: [0x110A, 0x116F, 0x11AC] }, +{ source: [0xC486], NFC: [0xC486], NFD: [0x110A, 0x116F, 0x11AD], NFKC: [0xC486], NFKD: [0x110A, 0x116F, 0x11AD] }, +{ source: [0xC487], NFC: [0xC487], NFD: [0x110A, 0x116F, 0x11AE], NFKC: [0xC487], NFKD: [0x110A, 0x116F, 0x11AE] }, +{ source: [0xC488], NFC: [0xC488], NFD: [0x110A, 0x116F, 0x11AF], NFKC: [0xC488], NFKD: [0x110A, 0x116F, 0x11AF] }, +{ source: [0xC489], NFC: [0xC489], NFD: [0x110A, 0x116F, 0x11B0], NFKC: [0xC489], NFKD: [0x110A, 0x116F, 0x11B0] }, +{ source: [0xC48A], NFC: [0xC48A], NFD: [0x110A, 0x116F, 0x11B1], NFKC: [0xC48A], NFKD: [0x110A, 0x116F, 0x11B1] }, +{ source: [0xC48B], NFC: [0xC48B], NFD: [0x110A, 0x116F, 0x11B2], NFKC: [0xC48B], NFKD: [0x110A, 0x116F, 0x11B2] }, +{ source: [0xC48C], NFC: [0xC48C], NFD: [0x110A, 0x116F, 0x11B3], NFKC: [0xC48C], NFKD: [0x110A, 0x116F, 0x11B3] }, +{ source: [0xC48D], NFC: [0xC48D], NFD: [0x110A, 0x116F, 0x11B4], NFKC: [0xC48D], NFKD: [0x110A, 0x116F, 0x11B4] }, +{ source: [0xC48E], NFC: [0xC48E], NFD: [0x110A, 0x116F, 0x11B5], NFKC: [0xC48E], NFKD: [0x110A, 0x116F, 0x11B5] }, +{ source: [0xC48F], NFC: [0xC48F], NFD: [0x110A, 0x116F, 0x11B6], NFKC: [0xC48F], NFKD: [0x110A, 0x116F, 0x11B6] }, +{ source: [0xC490], NFC: [0xC490], NFD: [0x110A, 0x116F, 0x11B7], NFKC: [0xC490], NFKD: [0x110A, 0x116F, 0x11B7] }, +{ source: [0xC491], NFC: [0xC491], NFD: [0x110A, 0x116F, 0x11B8], NFKC: [0xC491], NFKD: [0x110A, 0x116F, 0x11B8] }, +{ source: [0xC492], NFC: [0xC492], NFD: [0x110A, 0x116F, 0x11B9], NFKC: [0xC492], NFKD: [0x110A, 0x116F, 0x11B9] }, +{ source: [0xC493], NFC: [0xC493], NFD: [0x110A, 0x116F, 0x11BA], NFKC: [0xC493], NFKD: [0x110A, 0x116F, 0x11BA] }, +{ source: [0xC494], NFC: [0xC494], NFD: [0x110A, 0x116F, 0x11BB], NFKC: [0xC494], NFKD: [0x110A, 0x116F, 0x11BB] }, +{ source: [0xC495], NFC: [0xC495], NFD: [0x110A, 0x116F, 0x11BC], NFKC: [0xC495], NFKD: [0x110A, 0x116F, 0x11BC] }, +{ source: [0xC496], NFC: [0xC496], NFD: [0x110A, 0x116F, 0x11BD], NFKC: [0xC496], NFKD: [0x110A, 0x116F, 0x11BD] }, +{ source: [0xC497], NFC: [0xC497], NFD: [0x110A, 0x116F, 0x11BE], NFKC: [0xC497], NFKD: [0x110A, 0x116F, 0x11BE] }, +{ source: [0xC498], NFC: [0xC498], NFD: [0x110A, 0x116F, 0x11BF], NFKC: [0xC498], NFKD: [0x110A, 0x116F, 0x11BF] }, +{ source: [0xC499], NFC: [0xC499], NFD: [0x110A, 0x116F, 0x11C0], NFKC: [0xC499], NFKD: [0x110A, 0x116F, 0x11C0] }, +{ source: [0xC49A], NFC: [0xC49A], NFD: [0x110A, 0x116F, 0x11C1], NFKC: [0xC49A], NFKD: [0x110A, 0x116F, 0x11C1] }, +{ source: [0xC49B], NFC: [0xC49B], NFD: [0x110A, 0x116F, 0x11C2], NFKC: [0xC49B], NFKD: [0x110A, 0x116F, 0x11C2] }, +{ source: [0xC49C], NFC: [0xC49C], NFD: [0x110A, 0x1170], NFKC: [0xC49C], NFKD: [0x110A, 0x1170] }, +{ source: [0xC49D], NFC: [0xC49D], NFD: [0x110A, 0x1170, 0x11A8], NFKC: [0xC49D], NFKD: [0x110A, 0x1170, 0x11A8] }, +{ source: [0xC49E], NFC: [0xC49E], NFD: [0x110A, 0x1170, 0x11A9], NFKC: [0xC49E], NFKD: [0x110A, 0x1170, 0x11A9] }, +{ source: [0xC49F], NFC: [0xC49F], NFD: [0x110A, 0x1170, 0x11AA], NFKC: [0xC49F], NFKD: [0x110A, 0x1170, 0x11AA] }, +{ source: [0xC4A0], NFC: [0xC4A0], NFD: [0x110A, 0x1170, 0x11AB], NFKC: [0xC4A0], NFKD: [0x110A, 0x1170, 0x11AB] }, +{ source: [0xC4A1], NFC: [0xC4A1], NFD: [0x110A, 0x1170, 0x11AC], NFKC: [0xC4A1], NFKD: [0x110A, 0x1170, 0x11AC] }, +{ source: [0xC4A2], NFC: [0xC4A2], NFD: [0x110A, 0x1170, 0x11AD], NFKC: [0xC4A2], NFKD: [0x110A, 0x1170, 0x11AD] }, +{ source: [0xC4A3], NFC: [0xC4A3], NFD: [0x110A, 0x1170, 0x11AE], NFKC: [0xC4A3], NFKD: [0x110A, 0x1170, 0x11AE] }, +{ source: [0xC4A4], NFC: [0xC4A4], NFD: [0x110A, 0x1170, 0x11AF], NFKC: [0xC4A4], NFKD: [0x110A, 0x1170, 0x11AF] }, +{ source: [0xC4A5], NFC: [0xC4A5], NFD: [0x110A, 0x1170, 0x11B0], NFKC: [0xC4A5], NFKD: [0x110A, 0x1170, 0x11B0] }, +{ source: [0xC4A6], NFC: [0xC4A6], NFD: [0x110A, 0x1170, 0x11B1], NFKC: [0xC4A6], NFKD: [0x110A, 0x1170, 0x11B1] }, +{ source: [0xC4A7], NFC: [0xC4A7], NFD: [0x110A, 0x1170, 0x11B2], NFKC: [0xC4A7], NFKD: [0x110A, 0x1170, 0x11B2] }, +{ source: [0xC4A8], NFC: [0xC4A8], NFD: [0x110A, 0x1170, 0x11B3], NFKC: [0xC4A8], NFKD: [0x110A, 0x1170, 0x11B3] }, +{ source: [0xC4A9], NFC: [0xC4A9], NFD: [0x110A, 0x1170, 0x11B4], NFKC: [0xC4A9], NFKD: [0x110A, 0x1170, 0x11B4] }, +{ source: [0xC4AA], NFC: [0xC4AA], NFD: [0x110A, 0x1170, 0x11B5], NFKC: [0xC4AA], NFKD: [0x110A, 0x1170, 0x11B5] }, +{ source: [0xC4AB], NFC: [0xC4AB], NFD: [0x110A, 0x1170, 0x11B6], NFKC: [0xC4AB], NFKD: [0x110A, 0x1170, 0x11B6] }, +{ source: [0xC4AC], NFC: [0xC4AC], NFD: [0x110A, 0x1170, 0x11B7], NFKC: [0xC4AC], NFKD: [0x110A, 0x1170, 0x11B7] }, +{ source: [0xC4AD], NFC: [0xC4AD], NFD: [0x110A, 0x1170, 0x11B8], NFKC: [0xC4AD], NFKD: [0x110A, 0x1170, 0x11B8] }, +{ source: [0xC4AE], NFC: [0xC4AE], NFD: [0x110A, 0x1170, 0x11B9], NFKC: [0xC4AE], NFKD: [0x110A, 0x1170, 0x11B9] }, +{ source: [0xC4AF], NFC: [0xC4AF], NFD: [0x110A, 0x1170, 0x11BA], NFKC: [0xC4AF], NFKD: [0x110A, 0x1170, 0x11BA] }, +{ source: [0xC4B0], NFC: [0xC4B0], NFD: [0x110A, 0x1170, 0x11BB], NFKC: [0xC4B0], NFKD: [0x110A, 0x1170, 0x11BB] }, +{ source: [0xC4B1], NFC: [0xC4B1], NFD: [0x110A, 0x1170, 0x11BC], NFKC: [0xC4B1], NFKD: [0x110A, 0x1170, 0x11BC] }, +{ source: [0xC4B2], NFC: [0xC4B2], NFD: [0x110A, 0x1170, 0x11BD], NFKC: [0xC4B2], NFKD: [0x110A, 0x1170, 0x11BD] }, +{ source: [0xC4B3], NFC: [0xC4B3], NFD: [0x110A, 0x1170, 0x11BE], NFKC: [0xC4B3], NFKD: [0x110A, 0x1170, 0x11BE] }, +{ source: [0xC4B4], NFC: [0xC4B4], NFD: [0x110A, 0x1170, 0x11BF], NFKC: [0xC4B4], NFKD: [0x110A, 0x1170, 0x11BF] }, +{ source: [0xC4B5], NFC: [0xC4B5], NFD: [0x110A, 0x1170, 0x11C0], NFKC: [0xC4B5], NFKD: [0x110A, 0x1170, 0x11C0] }, +{ source: [0xC4B6], NFC: [0xC4B6], NFD: [0x110A, 0x1170, 0x11C1], NFKC: [0xC4B6], NFKD: [0x110A, 0x1170, 0x11C1] }, +{ source: [0xC4B7], NFC: [0xC4B7], NFD: [0x110A, 0x1170, 0x11C2], NFKC: [0xC4B7], NFKD: [0x110A, 0x1170, 0x11C2] }, +{ source: [0xC4B8], NFC: [0xC4B8], NFD: [0x110A, 0x1171], NFKC: [0xC4B8], NFKD: [0x110A, 0x1171] }, +{ source: [0xC4B9], NFC: [0xC4B9], NFD: [0x110A, 0x1171, 0x11A8], NFKC: [0xC4B9], NFKD: [0x110A, 0x1171, 0x11A8] }, +{ source: [0xC4BA], NFC: [0xC4BA], NFD: [0x110A, 0x1171, 0x11A9], NFKC: [0xC4BA], NFKD: [0x110A, 0x1171, 0x11A9] }, +{ source: [0xC4BB], NFC: [0xC4BB], NFD: [0x110A, 0x1171, 0x11AA], NFKC: [0xC4BB], NFKD: [0x110A, 0x1171, 0x11AA] }, +{ source: [0xC4BC], NFC: [0xC4BC], NFD: [0x110A, 0x1171, 0x11AB], NFKC: [0xC4BC], NFKD: [0x110A, 0x1171, 0x11AB] }, +{ source: [0xC4BD], NFC: [0xC4BD], NFD: [0x110A, 0x1171, 0x11AC], NFKC: [0xC4BD], NFKD: [0x110A, 0x1171, 0x11AC] }, +{ source: [0xC4BE], NFC: [0xC4BE], NFD: [0x110A, 0x1171, 0x11AD], NFKC: [0xC4BE], NFKD: [0x110A, 0x1171, 0x11AD] }, +{ source: [0xC4BF], NFC: [0xC4BF], NFD: [0x110A, 0x1171, 0x11AE], NFKC: [0xC4BF], NFKD: [0x110A, 0x1171, 0x11AE] }, +{ source: [0xC4C0], NFC: [0xC4C0], NFD: [0x110A, 0x1171, 0x11AF], NFKC: [0xC4C0], NFKD: [0x110A, 0x1171, 0x11AF] }, +{ source: [0xC4C1], NFC: [0xC4C1], NFD: [0x110A, 0x1171, 0x11B0], NFKC: [0xC4C1], NFKD: [0x110A, 0x1171, 0x11B0] }, +{ source: [0xC4C2], NFC: [0xC4C2], NFD: [0x110A, 0x1171, 0x11B1], NFKC: [0xC4C2], NFKD: [0x110A, 0x1171, 0x11B1] }, +{ source: [0xC4C3], NFC: [0xC4C3], NFD: [0x110A, 0x1171, 0x11B2], NFKC: [0xC4C3], NFKD: [0x110A, 0x1171, 0x11B2] }, +{ source: [0xC4C4], NFC: [0xC4C4], NFD: [0x110A, 0x1171, 0x11B3], NFKC: [0xC4C4], NFKD: [0x110A, 0x1171, 0x11B3] }, +{ source: [0xC4C5], NFC: [0xC4C5], NFD: [0x110A, 0x1171, 0x11B4], NFKC: [0xC4C5], NFKD: [0x110A, 0x1171, 0x11B4] }, +{ source: [0xC4C6], NFC: [0xC4C6], NFD: [0x110A, 0x1171, 0x11B5], NFKC: [0xC4C6], NFKD: [0x110A, 0x1171, 0x11B5] }, +{ source: [0xC4C7], NFC: [0xC4C7], NFD: [0x110A, 0x1171, 0x11B6], NFKC: [0xC4C7], NFKD: [0x110A, 0x1171, 0x11B6] }, +{ source: [0xC4C8], NFC: [0xC4C8], NFD: [0x110A, 0x1171, 0x11B7], NFKC: [0xC4C8], NFKD: [0x110A, 0x1171, 0x11B7] }, +{ source: [0xC4C9], NFC: [0xC4C9], NFD: [0x110A, 0x1171, 0x11B8], NFKC: [0xC4C9], NFKD: [0x110A, 0x1171, 0x11B8] }, +{ source: [0xC4CA], NFC: [0xC4CA], NFD: [0x110A, 0x1171, 0x11B9], NFKC: [0xC4CA], NFKD: [0x110A, 0x1171, 0x11B9] }, +{ source: [0xC4CB], NFC: [0xC4CB], NFD: [0x110A, 0x1171, 0x11BA], NFKC: [0xC4CB], NFKD: [0x110A, 0x1171, 0x11BA] }, +{ source: [0xC4CC], NFC: [0xC4CC], NFD: [0x110A, 0x1171, 0x11BB], NFKC: [0xC4CC], NFKD: [0x110A, 0x1171, 0x11BB] }, +{ source: [0xC4CD], NFC: [0xC4CD], NFD: [0x110A, 0x1171, 0x11BC], NFKC: [0xC4CD], NFKD: [0x110A, 0x1171, 0x11BC] }, +{ source: [0xC4CE], NFC: [0xC4CE], NFD: [0x110A, 0x1171, 0x11BD], NFKC: [0xC4CE], NFKD: [0x110A, 0x1171, 0x11BD] }, +{ source: [0xC4CF], NFC: [0xC4CF], NFD: [0x110A, 0x1171, 0x11BE], NFKC: [0xC4CF], NFKD: [0x110A, 0x1171, 0x11BE] }, +{ source: [0xC4D0], NFC: [0xC4D0], NFD: [0x110A, 0x1171, 0x11BF], NFKC: [0xC4D0], NFKD: [0x110A, 0x1171, 0x11BF] }, +{ source: [0xC4D1], NFC: [0xC4D1], NFD: [0x110A, 0x1171, 0x11C0], NFKC: [0xC4D1], NFKD: [0x110A, 0x1171, 0x11C0] }, +{ source: [0xC4D2], NFC: [0xC4D2], NFD: [0x110A, 0x1171, 0x11C1], NFKC: [0xC4D2], NFKD: [0x110A, 0x1171, 0x11C1] }, +{ source: [0xC4D3], NFC: [0xC4D3], NFD: [0x110A, 0x1171, 0x11C2], NFKC: [0xC4D3], NFKD: [0x110A, 0x1171, 0x11C2] }, +{ source: [0xC4D4], NFC: [0xC4D4], NFD: [0x110A, 0x1172], NFKC: [0xC4D4], NFKD: [0x110A, 0x1172] }, +{ source: [0xC4D5], NFC: [0xC4D5], NFD: [0x110A, 0x1172, 0x11A8], NFKC: [0xC4D5], NFKD: [0x110A, 0x1172, 0x11A8] }, +{ source: [0xC4D6], NFC: [0xC4D6], NFD: [0x110A, 0x1172, 0x11A9], NFKC: [0xC4D6], NFKD: [0x110A, 0x1172, 0x11A9] }, +{ source: [0xC4D7], NFC: [0xC4D7], NFD: [0x110A, 0x1172, 0x11AA], NFKC: [0xC4D7], NFKD: [0x110A, 0x1172, 0x11AA] }, +{ source: [0xC4D8], NFC: [0xC4D8], NFD: [0x110A, 0x1172, 0x11AB], NFKC: [0xC4D8], NFKD: [0x110A, 0x1172, 0x11AB] }, +{ source: [0xC4D9], NFC: [0xC4D9], NFD: [0x110A, 0x1172, 0x11AC], NFKC: [0xC4D9], NFKD: [0x110A, 0x1172, 0x11AC] }, +{ source: [0xC4DA], NFC: [0xC4DA], NFD: [0x110A, 0x1172, 0x11AD], NFKC: [0xC4DA], NFKD: [0x110A, 0x1172, 0x11AD] }, +{ source: [0xC4DB], NFC: [0xC4DB], NFD: [0x110A, 0x1172, 0x11AE], NFKC: [0xC4DB], NFKD: [0x110A, 0x1172, 0x11AE] }, +{ source: [0xC4DC], NFC: [0xC4DC], NFD: [0x110A, 0x1172, 0x11AF], NFKC: [0xC4DC], NFKD: [0x110A, 0x1172, 0x11AF] }, +{ source: [0xC4DD], NFC: [0xC4DD], NFD: [0x110A, 0x1172, 0x11B0], NFKC: [0xC4DD], NFKD: [0x110A, 0x1172, 0x11B0] }, +{ source: [0xC4DE], NFC: [0xC4DE], NFD: [0x110A, 0x1172, 0x11B1], NFKC: [0xC4DE], NFKD: [0x110A, 0x1172, 0x11B1] }, +{ source: [0xC4DF], NFC: [0xC4DF], NFD: [0x110A, 0x1172, 0x11B2], NFKC: [0xC4DF], NFKD: [0x110A, 0x1172, 0x11B2] }, +{ source: [0xC4E0], NFC: [0xC4E0], NFD: [0x110A, 0x1172, 0x11B3], NFKC: [0xC4E0], NFKD: [0x110A, 0x1172, 0x11B3] }, +{ source: [0xC4E1], NFC: [0xC4E1], NFD: [0x110A, 0x1172, 0x11B4], NFKC: [0xC4E1], NFKD: [0x110A, 0x1172, 0x11B4] }, +{ source: [0xC4E2], NFC: [0xC4E2], NFD: [0x110A, 0x1172, 0x11B5], NFKC: [0xC4E2], NFKD: [0x110A, 0x1172, 0x11B5] }, +{ source: [0xC4E3], NFC: [0xC4E3], NFD: [0x110A, 0x1172, 0x11B6], NFKC: [0xC4E3], NFKD: [0x110A, 0x1172, 0x11B6] }, +{ source: [0xC4E4], NFC: [0xC4E4], NFD: [0x110A, 0x1172, 0x11B7], NFKC: [0xC4E4], NFKD: [0x110A, 0x1172, 0x11B7] }, +{ source: [0xC4E5], NFC: [0xC4E5], NFD: [0x110A, 0x1172, 0x11B8], NFKC: [0xC4E5], NFKD: [0x110A, 0x1172, 0x11B8] }, +{ source: [0xC4E6], NFC: [0xC4E6], NFD: [0x110A, 0x1172, 0x11B9], NFKC: [0xC4E6], NFKD: [0x110A, 0x1172, 0x11B9] }, +{ source: [0xC4E7], NFC: [0xC4E7], NFD: [0x110A, 0x1172, 0x11BA], NFKC: [0xC4E7], NFKD: [0x110A, 0x1172, 0x11BA] }, +{ source: [0xC4E8], NFC: [0xC4E8], NFD: [0x110A, 0x1172, 0x11BB], NFKC: [0xC4E8], NFKD: [0x110A, 0x1172, 0x11BB] }, +{ source: [0xC4E9], NFC: [0xC4E9], NFD: [0x110A, 0x1172, 0x11BC], NFKC: [0xC4E9], NFKD: [0x110A, 0x1172, 0x11BC] }, +{ source: [0xC4EA], NFC: [0xC4EA], NFD: [0x110A, 0x1172, 0x11BD], NFKC: [0xC4EA], NFKD: [0x110A, 0x1172, 0x11BD] }, +{ source: [0xC4EB], NFC: [0xC4EB], NFD: [0x110A, 0x1172, 0x11BE], NFKC: [0xC4EB], NFKD: [0x110A, 0x1172, 0x11BE] }, +{ source: [0xC4EC], NFC: [0xC4EC], NFD: [0x110A, 0x1172, 0x11BF], NFKC: [0xC4EC], NFKD: [0x110A, 0x1172, 0x11BF] }, +{ source: [0xC4ED], NFC: [0xC4ED], NFD: [0x110A, 0x1172, 0x11C0], NFKC: [0xC4ED], NFKD: [0x110A, 0x1172, 0x11C0] }, +{ source: [0xC4EE], NFC: [0xC4EE], NFD: [0x110A, 0x1172, 0x11C1], NFKC: [0xC4EE], NFKD: [0x110A, 0x1172, 0x11C1] }, +{ source: [0xC4EF], NFC: [0xC4EF], NFD: [0x110A, 0x1172, 0x11C2], NFKC: [0xC4EF], NFKD: [0x110A, 0x1172, 0x11C2] }, +{ source: [0xC4F0], NFC: [0xC4F0], NFD: [0x110A, 0x1173], NFKC: [0xC4F0], NFKD: [0x110A, 0x1173] }, +{ source: [0xC4F1], NFC: [0xC4F1], NFD: [0x110A, 0x1173, 0x11A8], NFKC: [0xC4F1], NFKD: [0x110A, 0x1173, 0x11A8] }, +{ source: [0xC4F2], NFC: [0xC4F2], NFD: [0x110A, 0x1173, 0x11A9], NFKC: [0xC4F2], NFKD: [0x110A, 0x1173, 0x11A9] }, +{ source: [0xC4F3], NFC: [0xC4F3], NFD: [0x110A, 0x1173, 0x11AA], NFKC: [0xC4F3], NFKD: [0x110A, 0x1173, 0x11AA] }, +{ source: [0xC4F4], NFC: [0xC4F4], NFD: [0x110A, 0x1173, 0x11AB], NFKC: [0xC4F4], NFKD: [0x110A, 0x1173, 0x11AB] }, +{ source: [0xC4F5], NFC: [0xC4F5], NFD: [0x110A, 0x1173, 0x11AC], NFKC: [0xC4F5], NFKD: [0x110A, 0x1173, 0x11AC] }, +{ source: [0xC4F6], NFC: [0xC4F6], NFD: [0x110A, 0x1173, 0x11AD], NFKC: [0xC4F6], NFKD: [0x110A, 0x1173, 0x11AD] }, +{ source: [0xC4F7], NFC: [0xC4F7], NFD: [0x110A, 0x1173, 0x11AE], NFKC: [0xC4F7], NFKD: [0x110A, 0x1173, 0x11AE] }, +{ source: [0xC4F8], NFC: [0xC4F8], NFD: [0x110A, 0x1173, 0x11AF], NFKC: [0xC4F8], NFKD: [0x110A, 0x1173, 0x11AF] }, +{ source: [0xC4F9], NFC: [0xC4F9], NFD: [0x110A, 0x1173, 0x11B0], NFKC: [0xC4F9], NFKD: [0x110A, 0x1173, 0x11B0] }, +{ source: [0xC4FA], NFC: [0xC4FA], NFD: [0x110A, 0x1173, 0x11B1], NFKC: [0xC4FA], NFKD: [0x110A, 0x1173, 0x11B1] }, +{ source: [0xC4FB], NFC: [0xC4FB], NFD: [0x110A, 0x1173, 0x11B2], NFKC: [0xC4FB], NFKD: [0x110A, 0x1173, 0x11B2] }, +{ source: [0xC4FC], NFC: [0xC4FC], NFD: [0x110A, 0x1173, 0x11B3], NFKC: [0xC4FC], NFKD: [0x110A, 0x1173, 0x11B3] }, +{ source: [0xC4FD], NFC: [0xC4FD], NFD: [0x110A, 0x1173, 0x11B4], NFKC: [0xC4FD], NFKD: [0x110A, 0x1173, 0x11B4] }, +{ source: [0xC4FE], NFC: [0xC4FE], NFD: [0x110A, 0x1173, 0x11B5], NFKC: [0xC4FE], NFKD: [0x110A, 0x1173, 0x11B5] }, +{ source: [0xC4FF], NFC: [0xC4FF], NFD: [0x110A, 0x1173, 0x11B6], NFKC: [0xC4FF], NFKD: [0x110A, 0x1173, 0x11B6] }, +{ source: [0xC500], NFC: [0xC500], NFD: [0x110A, 0x1173, 0x11B7], NFKC: [0xC500], NFKD: [0x110A, 0x1173, 0x11B7] }, +{ source: [0xC501], NFC: [0xC501], NFD: [0x110A, 0x1173, 0x11B8], NFKC: [0xC501], NFKD: [0x110A, 0x1173, 0x11B8] }, +{ source: [0xC502], NFC: [0xC502], NFD: [0x110A, 0x1173, 0x11B9], NFKC: [0xC502], NFKD: [0x110A, 0x1173, 0x11B9] }, +{ source: [0xC503], NFC: [0xC503], NFD: [0x110A, 0x1173, 0x11BA], NFKC: [0xC503], NFKD: [0x110A, 0x1173, 0x11BA] }, +{ source: [0xC504], NFC: [0xC504], NFD: [0x110A, 0x1173, 0x11BB], NFKC: [0xC504], NFKD: [0x110A, 0x1173, 0x11BB] }, +{ source: [0xC505], NFC: [0xC505], NFD: [0x110A, 0x1173, 0x11BC], NFKC: [0xC505], NFKD: [0x110A, 0x1173, 0x11BC] }, +{ source: [0xC506], NFC: [0xC506], NFD: [0x110A, 0x1173, 0x11BD], NFKC: [0xC506], NFKD: [0x110A, 0x1173, 0x11BD] }, +{ source: [0xC507], NFC: [0xC507], NFD: [0x110A, 0x1173, 0x11BE], NFKC: [0xC507], NFKD: [0x110A, 0x1173, 0x11BE] }, +{ source: [0xC508], NFC: [0xC508], NFD: [0x110A, 0x1173, 0x11BF], NFKC: [0xC508], NFKD: [0x110A, 0x1173, 0x11BF] }, +{ source: [0xC509], NFC: [0xC509], NFD: [0x110A, 0x1173, 0x11C0], NFKC: [0xC509], NFKD: [0x110A, 0x1173, 0x11C0] }, +{ source: [0xC50A], NFC: [0xC50A], NFD: [0x110A, 0x1173, 0x11C1], NFKC: [0xC50A], NFKD: [0x110A, 0x1173, 0x11C1] }, +{ source: [0xC50B], NFC: [0xC50B], NFD: [0x110A, 0x1173, 0x11C2], NFKC: [0xC50B], NFKD: [0x110A, 0x1173, 0x11C2] }, +{ source: [0xC50C], NFC: [0xC50C], NFD: [0x110A, 0x1174], NFKC: [0xC50C], NFKD: [0x110A, 0x1174] }, +{ source: [0xC50D], NFC: [0xC50D], NFD: [0x110A, 0x1174, 0x11A8], NFKC: [0xC50D], NFKD: [0x110A, 0x1174, 0x11A8] }, +{ source: [0xC50E], NFC: [0xC50E], NFD: [0x110A, 0x1174, 0x11A9], NFKC: [0xC50E], NFKD: [0x110A, 0x1174, 0x11A9] }, +{ source: [0xC50F], NFC: [0xC50F], NFD: [0x110A, 0x1174, 0x11AA], NFKC: [0xC50F], NFKD: [0x110A, 0x1174, 0x11AA] }, +{ source: [0xC510], NFC: [0xC510], NFD: [0x110A, 0x1174, 0x11AB], NFKC: [0xC510], NFKD: [0x110A, 0x1174, 0x11AB] }, +{ source: [0xC511], NFC: [0xC511], NFD: [0x110A, 0x1174, 0x11AC], NFKC: [0xC511], NFKD: [0x110A, 0x1174, 0x11AC] }, +{ source: [0xC512], NFC: [0xC512], NFD: [0x110A, 0x1174, 0x11AD], NFKC: [0xC512], NFKD: [0x110A, 0x1174, 0x11AD] }, +{ source: [0xC513], NFC: [0xC513], NFD: [0x110A, 0x1174, 0x11AE], NFKC: [0xC513], NFKD: [0x110A, 0x1174, 0x11AE] }, +{ source: [0xC514], NFC: [0xC514], NFD: [0x110A, 0x1174, 0x11AF], NFKC: [0xC514], NFKD: [0x110A, 0x1174, 0x11AF] }, +{ source: [0xC515], NFC: [0xC515], NFD: [0x110A, 0x1174, 0x11B0], NFKC: [0xC515], NFKD: [0x110A, 0x1174, 0x11B0] }, +{ source: [0xC516], NFC: [0xC516], NFD: [0x110A, 0x1174, 0x11B1], NFKC: [0xC516], NFKD: [0x110A, 0x1174, 0x11B1] }, +{ source: [0xC517], NFC: [0xC517], NFD: [0x110A, 0x1174, 0x11B2], NFKC: [0xC517], NFKD: [0x110A, 0x1174, 0x11B2] }, +{ source: [0xC518], NFC: [0xC518], NFD: [0x110A, 0x1174, 0x11B3], NFKC: [0xC518], NFKD: [0x110A, 0x1174, 0x11B3] }, +{ source: [0xC519], NFC: [0xC519], NFD: [0x110A, 0x1174, 0x11B4], NFKC: [0xC519], NFKD: [0x110A, 0x1174, 0x11B4] }, +{ source: [0xC51A], NFC: [0xC51A], NFD: [0x110A, 0x1174, 0x11B5], NFKC: [0xC51A], NFKD: [0x110A, 0x1174, 0x11B5] }, +{ source: [0xC51B], NFC: [0xC51B], NFD: [0x110A, 0x1174, 0x11B6], NFKC: [0xC51B], NFKD: [0x110A, 0x1174, 0x11B6] }, +{ source: [0xC51C], NFC: [0xC51C], NFD: [0x110A, 0x1174, 0x11B7], NFKC: [0xC51C], NFKD: [0x110A, 0x1174, 0x11B7] }, +{ source: [0xC51D], NFC: [0xC51D], NFD: [0x110A, 0x1174, 0x11B8], NFKC: [0xC51D], NFKD: [0x110A, 0x1174, 0x11B8] }, +{ source: [0xC51E], NFC: [0xC51E], NFD: [0x110A, 0x1174, 0x11B9], NFKC: [0xC51E], NFKD: [0x110A, 0x1174, 0x11B9] }, +{ source: [0xC51F], NFC: [0xC51F], NFD: [0x110A, 0x1174, 0x11BA], NFKC: [0xC51F], NFKD: [0x110A, 0x1174, 0x11BA] }, +{ source: [0xC520], NFC: [0xC520], NFD: [0x110A, 0x1174, 0x11BB], NFKC: [0xC520], NFKD: [0x110A, 0x1174, 0x11BB] }, +{ source: [0xC521], NFC: [0xC521], NFD: [0x110A, 0x1174, 0x11BC], NFKC: [0xC521], NFKD: [0x110A, 0x1174, 0x11BC] }, +{ source: [0xC522], NFC: [0xC522], NFD: [0x110A, 0x1174, 0x11BD], NFKC: [0xC522], NFKD: [0x110A, 0x1174, 0x11BD] }, +{ source: [0xC523], NFC: [0xC523], NFD: [0x110A, 0x1174, 0x11BE], NFKC: [0xC523], NFKD: [0x110A, 0x1174, 0x11BE] }, +{ source: [0xC524], NFC: [0xC524], NFD: [0x110A, 0x1174, 0x11BF], NFKC: [0xC524], NFKD: [0x110A, 0x1174, 0x11BF] }, +{ source: [0xC525], NFC: [0xC525], NFD: [0x110A, 0x1174, 0x11C0], NFKC: [0xC525], NFKD: [0x110A, 0x1174, 0x11C0] }, +{ source: [0xC526], NFC: [0xC526], NFD: [0x110A, 0x1174, 0x11C1], NFKC: [0xC526], NFKD: [0x110A, 0x1174, 0x11C1] }, +{ source: [0xC527], NFC: [0xC527], NFD: [0x110A, 0x1174, 0x11C2], NFKC: [0xC527], NFKD: [0x110A, 0x1174, 0x11C2] }, +{ source: [0xC528], NFC: [0xC528], NFD: [0x110A, 0x1175], NFKC: [0xC528], NFKD: [0x110A, 0x1175] }, +{ source: [0xC529], NFC: [0xC529], NFD: [0x110A, 0x1175, 0x11A8], NFKC: [0xC529], NFKD: [0x110A, 0x1175, 0x11A8] }, +{ source: [0xC52A], NFC: [0xC52A], NFD: [0x110A, 0x1175, 0x11A9], NFKC: [0xC52A], NFKD: [0x110A, 0x1175, 0x11A9] }, +{ source: [0xC52B], NFC: [0xC52B], NFD: [0x110A, 0x1175, 0x11AA], NFKC: [0xC52B], NFKD: [0x110A, 0x1175, 0x11AA] }, +{ source: [0xC52C], NFC: [0xC52C], NFD: [0x110A, 0x1175, 0x11AB], NFKC: [0xC52C], NFKD: [0x110A, 0x1175, 0x11AB] }, +{ source: [0xC52D], NFC: [0xC52D], NFD: [0x110A, 0x1175, 0x11AC], NFKC: [0xC52D], NFKD: [0x110A, 0x1175, 0x11AC] }, +{ source: [0xC52E], NFC: [0xC52E], NFD: [0x110A, 0x1175, 0x11AD], NFKC: [0xC52E], NFKD: [0x110A, 0x1175, 0x11AD] }, +{ source: [0xC52F], NFC: [0xC52F], NFD: [0x110A, 0x1175, 0x11AE], NFKC: [0xC52F], NFKD: [0x110A, 0x1175, 0x11AE] }, +{ source: [0xC530], NFC: [0xC530], NFD: [0x110A, 0x1175, 0x11AF], NFKC: [0xC530], NFKD: [0x110A, 0x1175, 0x11AF] }, +{ source: [0xC531], NFC: [0xC531], NFD: [0x110A, 0x1175, 0x11B0], NFKC: [0xC531], NFKD: [0x110A, 0x1175, 0x11B0] }, +{ source: [0xC532], NFC: [0xC532], NFD: [0x110A, 0x1175, 0x11B1], NFKC: [0xC532], NFKD: [0x110A, 0x1175, 0x11B1] }, +{ source: [0xC533], NFC: [0xC533], NFD: [0x110A, 0x1175, 0x11B2], NFKC: [0xC533], NFKD: [0x110A, 0x1175, 0x11B2] }, +{ source: [0xC534], NFC: [0xC534], NFD: [0x110A, 0x1175, 0x11B3], NFKC: [0xC534], NFKD: [0x110A, 0x1175, 0x11B3] }, +{ source: [0xC535], NFC: [0xC535], NFD: [0x110A, 0x1175, 0x11B4], NFKC: [0xC535], NFKD: [0x110A, 0x1175, 0x11B4] }, +{ source: [0xC536], NFC: [0xC536], NFD: [0x110A, 0x1175, 0x11B5], NFKC: [0xC536], NFKD: [0x110A, 0x1175, 0x11B5] }, +{ source: [0xC537], NFC: [0xC537], NFD: [0x110A, 0x1175, 0x11B6], NFKC: [0xC537], NFKD: [0x110A, 0x1175, 0x11B6] }, +{ source: [0xC538], NFC: [0xC538], NFD: [0x110A, 0x1175, 0x11B7], NFKC: [0xC538], NFKD: [0x110A, 0x1175, 0x11B7] }, +{ source: [0xC539], NFC: [0xC539], NFD: [0x110A, 0x1175, 0x11B8], NFKC: [0xC539], NFKD: [0x110A, 0x1175, 0x11B8] }, +{ source: [0xC53A], NFC: [0xC53A], NFD: [0x110A, 0x1175, 0x11B9], NFKC: [0xC53A], NFKD: [0x110A, 0x1175, 0x11B9] }, +{ source: [0xC53B], NFC: [0xC53B], NFD: [0x110A, 0x1175, 0x11BA], NFKC: [0xC53B], NFKD: [0x110A, 0x1175, 0x11BA] }, +{ source: [0xC53C], NFC: [0xC53C], NFD: [0x110A, 0x1175, 0x11BB], NFKC: [0xC53C], NFKD: [0x110A, 0x1175, 0x11BB] }, +{ source: [0xC53D], NFC: [0xC53D], NFD: [0x110A, 0x1175, 0x11BC], NFKC: [0xC53D], NFKD: [0x110A, 0x1175, 0x11BC] }, +{ source: [0xC53E], NFC: [0xC53E], NFD: [0x110A, 0x1175, 0x11BD], NFKC: [0xC53E], NFKD: [0x110A, 0x1175, 0x11BD] }, +{ source: [0xC53F], NFC: [0xC53F], NFD: [0x110A, 0x1175, 0x11BE], NFKC: [0xC53F], NFKD: [0x110A, 0x1175, 0x11BE] }, +{ source: [0xC540], NFC: [0xC540], NFD: [0x110A, 0x1175, 0x11BF], NFKC: [0xC540], NFKD: [0x110A, 0x1175, 0x11BF] }, +{ source: [0xC541], NFC: [0xC541], NFD: [0x110A, 0x1175, 0x11C0], NFKC: [0xC541], NFKD: [0x110A, 0x1175, 0x11C0] }, +{ source: [0xC542], NFC: [0xC542], NFD: [0x110A, 0x1175, 0x11C1], NFKC: [0xC542], NFKD: [0x110A, 0x1175, 0x11C1] }, +{ source: [0xC543], NFC: [0xC543], NFD: [0x110A, 0x1175, 0x11C2], NFKC: [0xC543], NFKD: [0x110A, 0x1175, 0x11C2] }, +{ source: [0xC544], NFC: [0xC544], NFD: [0x110B, 0x1161], NFKC: [0xC544], NFKD: [0x110B, 0x1161] }, +{ source: [0xC545], NFC: [0xC545], NFD: [0x110B, 0x1161, 0x11A8], NFKC: [0xC545], NFKD: [0x110B, 0x1161, 0x11A8] }, +{ source: [0xC546], NFC: [0xC546], NFD: [0x110B, 0x1161, 0x11A9], NFKC: [0xC546], NFKD: [0x110B, 0x1161, 0x11A9] }, +{ source: [0xC547], NFC: [0xC547], NFD: [0x110B, 0x1161, 0x11AA], NFKC: [0xC547], NFKD: [0x110B, 0x1161, 0x11AA] }, +{ source: [0xC548], NFC: [0xC548], NFD: [0x110B, 0x1161, 0x11AB], NFKC: [0xC548], NFKD: [0x110B, 0x1161, 0x11AB] }, +{ source: [0xC549], NFC: [0xC549], NFD: [0x110B, 0x1161, 0x11AC], NFKC: [0xC549], NFKD: [0x110B, 0x1161, 0x11AC] }, +{ source: [0xC54A], NFC: [0xC54A], NFD: [0x110B, 0x1161, 0x11AD], NFKC: [0xC54A], NFKD: [0x110B, 0x1161, 0x11AD] }, +{ source: [0xC54B], NFC: [0xC54B], NFD: [0x110B, 0x1161, 0x11AE], NFKC: [0xC54B], NFKD: [0x110B, 0x1161, 0x11AE] }, +{ source: [0xC54C], NFC: [0xC54C], NFD: [0x110B, 0x1161, 0x11AF], NFKC: [0xC54C], NFKD: [0x110B, 0x1161, 0x11AF] }, +{ source: [0xC54D], NFC: [0xC54D], NFD: [0x110B, 0x1161, 0x11B0], NFKC: [0xC54D], NFKD: [0x110B, 0x1161, 0x11B0] }, +{ source: [0xC54E], NFC: [0xC54E], NFD: [0x110B, 0x1161, 0x11B1], NFKC: [0xC54E], NFKD: [0x110B, 0x1161, 0x11B1] }, +{ source: [0xC54F], NFC: [0xC54F], NFD: [0x110B, 0x1161, 0x11B2], NFKC: [0xC54F], NFKD: [0x110B, 0x1161, 0x11B2] }, +{ source: [0xC550], NFC: [0xC550], NFD: [0x110B, 0x1161, 0x11B3], NFKC: [0xC550], NFKD: [0x110B, 0x1161, 0x11B3] }, +{ source: [0xC551], NFC: [0xC551], NFD: [0x110B, 0x1161, 0x11B4], NFKC: [0xC551], NFKD: [0x110B, 0x1161, 0x11B4] }, +{ source: [0xC552], NFC: [0xC552], NFD: [0x110B, 0x1161, 0x11B5], NFKC: [0xC552], NFKD: [0x110B, 0x1161, 0x11B5] }, +{ source: [0xC553], NFC: [0xC553], NFD: [0x110B, 0x1161, 0x11B6], NFKC: [0xC553], NFKD: [0x110B, 0x1161, 0x11B6] }, +{ source: [0xC554], NFC: [0xC554], NFD: [0x110B, 0x1161, 0x11B7], NFKC: [0xC554], NFKD: [0x110B, 0x1161, 0x11B7] }, +{ source: [0xC555], NFC: [0xC555], NFD: [0x110B, 0x1161, 0x11B8], NFKC: [0xC555], NFKD: [0x110B, 0x1161, 0x11B8] }, +{ source: [0xC556], NFC: [0xC556], NFD: [0x110B, 0x1161, 0x11B9], NFKC: [0xC556], NFKD: [0x110B, 0x1161, 0x11B9] }, +{ source: [0xC557], NFC: [0xC557], NFD: [0x110B, 0x1161, 0x11BA], NFKC: [0xC557], NFKD: [0x110B, 0x1161, 0x11BA] }, +{ source: [0xC558], NFC: [0xC558], NFD: [0x110B, 0x1161, 0x11BB], NFKC: [0xC558], NFKD: [0x110B, 0x1161, 0x11BB] }, +{ source: [0xC559], NFC: [0xC559], NFD: [0x110B, 0x1161, 0x11BC], NFKC: [0xC559], NFKD: [0x110B, 0x1161, 0x11BC] }, +{ source: [0xC55A], NFC: [0xC55A], NFD: [0x110B, 0x1161, 0x11BD], NFKC: [0xC55A], NFKD: [0x110B, 0x1161, 0x11BD] }, +{ source: [0xC55B], NFC: [0xC55B], NFD: [0x110B, 0x1161, 0x11BE], NFKC: [0xC55B], NFKD: [0x110B, 0x1161, 0x11BE] }, +{ source: [0xC55C], NFC: [0xC55C], NFD: [0x110B, 0x1161, 0x11BF], NFKC: [0xC55C], NFKD: [0x110B, 0x1161, 0x11BF] }, +{ source: [0xC55D], NFC: [0xC55D], NFD: [0x110B, 0x1161, 0x11C0], NFKC: [0xC55D], NFKD: [0x110B, 0x1161, 0x11C0] }, +{ source: [0xC55E], NFC: [0xC55E], NFD: [0x110B, 0x1161, 0x11C1], NFKC: [0xC55E], NFKD: [0x110B, 0x1161, 0x11C1] }, +{ source: [0xC55F], NFC: [0xC55F], NFD: [0x110B, 0x1161, 0x11C2], NFKC: [0xC55F], NFKD: [0x110B, 0x1161, 0x11C2] }, +{ source: [0xC560], NFC: [0xC560], NFD: [0x110B, 0x1162], NFKC: [0xC560], NFKD: [0x110B, 0x1162] }, +{ source: [0xC561], NFC: [0xC561], NFD: [0x110B, 0x1162, 0x11A8], NFKC: [0xC561], NFKD: [0x110B, 0x1162, 0x11A8] }, +{ source: [0xC562], NFC: [0xC562], NFD: [0x110B, 0x1162, 0x11A9], NFKC: [0xC562], NFKD: [0x110B, 0x1162, 0x11A9] }, +{ source: [0xC563], NFC: [0xC563], NFD: [0x110B, 0x1162, 0x11AA], NFKC: [0xC563], NFKD: [0x110B, 0x1162, 0x11AA] }, +{ source: [0xC564], NFC: [0xC564], NFD: [0x110B, 0x1162, 0x11AB], NFKC: [0xC564], NFKD: [0x110B, 0x1162, 0x11AB] }, +{ source: [0xC565], NFC: [0xC565], NFD: [0x110B, 0x1162, 0x11AC], NFKC: [0xC565], NFKD: [0x110B, 0x1162, 0x11AC] }, +{ source: [0xC566], NFC: [0xC566], NFD: [0x110B, 0x1162, 0x11AD], NFKC: [0xC566], NFKD: [0x110B, 0x1162, 0x11AD] }, +{ source: [0xC567], NFC: [0xC567], NFD: [0x110B, 0x1162, 0x11AE], NFKC: [0xC567], NFKD: [0x110B, 0x1162, 0x11AE] }, +{ source: [0xC568], NFC: [0xC568], NFD: [0x110B, 0x1162, 0x11AF], NFKC: [0xC568], NFKD: [0x110B, 0x1162, 0x11AF] }, +{ source: [0xC569], NFC: [0xC569], NFD: [0x110B, 0x1162, 0x11B0], NFKC: [0xC569], NFKD: [0x110B, 0x1162, 0x11B0] }, +{ source: [0xC56A], NFC: [0xC56A], NFD: [0x110B, 0x1162, 0x11B1], NFKC: [0xC56A], NFKD: [0x110B, 0x1162, 0x11B1] }, +{ source: [0xC56B], NFC: [0xC56B], NFD: [0x110B, 0x1162, 0x11B2], NFKC: [0xC56B], NFKD: [0x110B, 0x1162, 0x11B2] }, +{ source: [0xC56C], NFC: [0xC56C], NFD: [0x110B, 0x1162, 0x11B3], NFKC: [0xC56C], NFKD: [0x110B, 0x1162, 0x11B3] }, +{ source: [0xC56D], NFC: [0xC56D], NFD: [0x110B, 0x1162, 0x11B4], NFKC: [0xC56D], NFKD: [0x110B, 0x1162, 0x11B4] }, +{ source: [0xC56E], NFC: [0xC56E], NFD: [0x110B, 0x1162, 0x11B5], NFKC: [0xC56E], NFKD: [0x110B, 0x1162, 0x11B5] }, +{ source: [0xC56F], NFC: [0xC56F], NFD: [0x110B, 0x1162, 0x11B6], NFKC: [0xC56F], NFKD: [0x110B, 0x1162, 0x11B6] }, +{ source: [0xC570], NFC: [0xC570], NFD: [0x110B, 0x1162, 0x11B7], NFKC: [0xC570], NFKD: [0x110B, 0x1162, 0x11B7] }, +{ source: [0xC571], NFC: [0xC571], NFD: [0x110B, 0x1162, 0x11B8], NFKC: [0xC571], NFKD: [0x110B, 0x1162, 0x11B8] }, +{ source: [0xC572], NFC: [0xC572], NFD: [0x110B, 0x1162, 0x11B9], NFKC: [0xC572], NFKD: [0x110B, 0x1162, 0x11B9] }, +{ source: [0xC573], NFC: [0xC573], NFD: [0x110B, 0x1162, 0x11BA], NFKC: [0xC573], NFKD: [0x110B, 0x1162, 0x11BA] }, +{ source: [0xC574], NFC: [0xC574], NFD: [0x110B, 0x1162, 0x11BB], NFKC: [0xC574], NFKD: [0x110B, 0x1162, 0x11BB] }, +{ source: [0xC575], NFC: [0xC575], NFD: [0x110B, 0x1162, 0x11BC], NFKC: [0xC575], NFKD: [0x110B, 0x1162, 0x11BC] }, +{ source: [0xC576], NFC: [0xC576], NFD: [0x110B, 0x1162, 0x11BD], NFKC: [0xC576], NFKD: [0x110B, 0x1162, 0x11BD] }, +{ source: [0xC577], NFC: [0xC577], NFD: [0x110B, 0x1162, 0x11BE], NFKC: [0xC577], NFKD: [0x110B, 0x1162, 0x11BE] }, +{ source: [0xC578], NFC: [0xC578], NFD: [0x110B, 0x1162, 0x11BF], NFKC: [0xC578], NFKD: [0x110B, 0x1162, 0x11BF] }, +{ source: [0xC579], NFC: [0xC579], NFD: [0x110B, 0x1162, 0x11C0], NFKC: [0xC579], NFKD: [0x110B, 0x1162, 0x11C0] }, +{ source: [0xC57A], NFC: [0xC57A], NFD: [0x110B, 0x1162, 0x11C1], NFKC: [0xC57A], NFKD: [0x110B, 0x1162, 0x11C1] }, +{ source: [0xC57B], NFC: [0xC57B], NFD: [0x110B, 0x1162, 0x11C2], NFKC: [0xC57B], NFKD: [0x110B, 0x1162, 0x11C2] }, +{ source: [0xC57C], NFC: [0xC57C], NFD: [0x110B, 0x1163], NFKC: [0xC57C], NFKD: [0x110B, 0x1163] }, +{ source: [0xC57D], NFC: [0xC57D], NFD: [0x110B, 0x1163, 0x11A8], NFKC: [0xC57D], NFKD: [0x110B, 0x1163, 0x11A8] }, +{ source: [0xC57E], NFC: [0xC57E], NFD: [0x110B, 0x1163, 0x11A9], NFKC: [0xC57E], NFKD: [0x110B, 0x1163, 0x11A9] }, +{ source: [0xC57F], NFC: [0xC57F], NFD: [0x110B, 0x1163, 0x11AA], NFKC: [0xC57F], NFKD: [0x110B, 0x1163, 0x11AA] }, +{ source: [0xC580], NFC: [0xC580], NFD: [0x110B, 0x1163, 0x11AB], NFKC: [0xC580], NFKD: [0x110B, 0x1163, 0x11AB] }, +{ source: [0xC581], NFC: [0xC581], NFD: [0x110B, 0x1163, 0x11AC], NFKC: [0xC581], NFKD: [0x110B, 0x1163, 0x11AC] }, +{ source: [0xC582], NFC: [0xC582], NFD: [0x110B, 0x1163, 0x11AD], NFKC: [0xC582], NFKD: [0x110B, 0x1163, 0x11AD] }, +{ source: [0xC583], NFC: [0xC583], NFD: [0x110B, 0x1163, 0x11AE], NFKC: [0xC583], NFKD: [0x110B, 0x1163, 0x11AE] }, +{ source: [0xC584], NFC: [0xC584], NFD: [0x110B, 0x1163, 0x11AF], NFKC: [0xC584], NFKD: [0x110B, 0x1163, 0x11AF] }, +{ source: [0xC585], NFC: [0xC585], NFD: [0x110B, 0x1163, 0x11B0], NFKC: [0xC585], NFKD: [0x110B, 0x1163, 0x11B0] }, +{ source: [0xC586], NFC: [0xC586], NFD: [0x110B, 0x1163, 0x11B1], NFKC: [0xC586], NFKD: [0x110B, 0x1163, 0x11B1] }, +{ source: [0xC587], NFC: [0xC587], NFD: [0x110B, 0x1163, 0x11B2], NFKC: [0xC587], NFKD: [0x110B, 0x1163, 0x11B2] }, +{ source: [0xC588], NFC: [0xC588], NFD: [0x110B, 0x1163, 0x11B3], NFKC: [0xC588], NFKD: [0x110B, 0x1163, 0x11B3] }, +{ source: [0xC589], NFC: [0xC589], NFD: [0x110B, 0x1163, 0x11B4], NFKC: [0xC589], NFKD: [0x110B, 0x1163, 0x11B4] }, +{ source: [0xC58A], NFC: [0xC58A], NFD: [0x110B, 0x1163, 0x11B5], NFKC: [0xC58A], NFKD: [0x110B, 0x1163, 0x11B5] }, +{ source: [0xC58B], NFC: [0xC58B], NFD: [0x110B, 0x1163, 0x11B6], NFKC: [0xC58B], NFKD: [0x110B, 0x1163, 0x11B6] }, +{ source: [0xC58C], NFC: [0xC58C], NFD: [0x110B, 0x1163, 0x11B7], NFKC: [0xC58C], NFKD: [0x110B, 0x1163, 0x11B7] }, +{ source: [0xC58D], NFC: [0xC58D], NFD: [0x110B, 0x1163, 0x11B8], NFKC: [0xC58D], NFKD: [0x110B, 0x1163, 0x11B8] }, +{ source: [0xC58E], NFC: [0xC58E], NFD: [0x110B, 0x1163, 0x11B9], NFKC: [0xC58E], NFKD: [0x110B, 0x1163, 0x11B9] }, +{ source: [0xC58F], NFC: [0xC58F], NFD: [0x110B, 0x1163, 0x11BA], NFKC: [0xC58F], NFKD: [0x110B, 0x1163, 0x11BA] }, +{ source: [0xC590], NFC: [0xC590], NFD: [0x110B, 0x1163, 0x11BB], NFKC: [0xC590], NFKD: [0x110B, 0x1163, 0x11BB] }, +{ source: [0xC591], NFC: [0xC591], NFD: [0x110B, 0x1163, 0x11BC], NFKC: [0xC591], NFKD: [0x110B, 0x1163, 0x11BC] }, +{ source: [0xC592], NFC: [0xC592], NFD: [0x110B, 0x1163, 0x11BD], NFKC: [0xC592], NFKD: [0x110B, 0x1163, 0x11BD] }, +{ source: [0xC593], NFC: [0xC593], NFD: [0x110B, 0x1163, 0x11BE], NFKC: [0xC593], NFKD: [0x110B, 0x1163, 0x11BE] }, +{ source: [0xC594], NFC: [0xC594], NFD: [0x110B, 0x1163, 0x11BF], NFKC: [0xC594], NFKD: [0x110B, 0x1163, 0x11BF] }, +{ source: [0xC595], NFC: [0xC595], NFD: [0x110B, 0x1163, 0x11C0], NFKC: [0xC595], NFKD: [0x110B, 0x1163, 0x11C0] }, +{ source: [0xC596], NFC: [0xC596], NFD: [0x110B, 0x1163, 0x11C1], NFKC: [0xC596], NFKD: [0x110B, 0x1163, 0x11C1] }, +{ source: [0xC597], NFC: [0xC597], NFD: [0x110B, 0x1163, 0x11C2], NFKC: [0xC597], NFKD: [0x110B, 0x1163, 0x11C2] }, +{ source: [0xC598], NFC: [0xC598], NFD: [0x110B, 0x1164], NFKC: [0xC598], NFKD: [0x110B, 0x1164] }, +{ source: [0xC599], NFC: [0xC599], NFD: [0x110B, 0x1164, 0x11A8], NFKC: [0xC599], NFKD: [0x110B, 0x1164, 0x11A8] }, +{ source: [0xC59A], NFC: [0xC59A], NFD: [0x110B, 0x1164, 0x11A9], NFKC: [0xC59A], NFKD: [0x110B, 0x1164, 0x11A9] }, +{ source: [0xC59B], NFC: [0xC59B], NFD: [0x110B, 0x1164, 0x11AA], NFKC: [0xC59B], NFKD: [0x110B, 0x1164, 0x11AA] }, +{ source: [0xC59C], NFC: [0xC59C], NFD: [0x110B, 0x1164, 0x11AB], NFKC: [0xC59C], NFKD: [0x110B, 0x1164, 0x11AB] }, +{ source: [0xC59D], NFC: [0xC59D], NFD: [0x110B, 0x1164, 0x11AC], NFKC: [0xC59D], NFKD: [0x110B, 0x1164, 0x11AC] }, +{ source: [0xC59E], NFC: [0xC59E], NFD: [0x110B, 0x1164, 0x11AD], NFKC: [0xC59E], NFKD: [0x110B, 0x1164, 0x11AD] }, +{ source: [0xC59F], NFC: [0xC59F], NFD: [0x110B, 0x1164, 0x11AE], NFKC: [0xC59F], NFKD: [0x110B, 0x1164, 0x11AE] }, +{ source: [0xC5A0], NFC: [0xC5A0], NFD: [0x110B, 0x1164, 0x11AF], NFKC: [0xC5A0], NFKD: [0x110B, 0x1164, 0x11AF] }, +{ source: [0xC5A1], NFC: [0xC5A1], NFD: [0x110B, 0x1164, 0x11B0], NFKC: [0xC5A1], NFKD: [0x110B, 0x1164, 0x11B0] }, +{ source: [0xC5A2], NFC: [0xC5A2], NFD: [0x110B, 0x1164, 0x11B1], NFKC: [0xC5A2], NFKD: [0x110B, 0x1164, 0x11B1] }, +{ source: [0xC5A3], NFC: [0xC5A3], NFD: [0x110B, 0x1164, 0x11B2], NFKC: [0xC5A3], NFKD: [0x110B, 0x1164, 0x11B2] }, +{ source: [0xC5A4], NFC: [0xC5A4], NFD: [0x110B, 0x1164, 0x11B3], NFKC: [0xC5A4], NFKD: [0x110B, 0x1164, 0x11B3] }, +{ source: [0xC5A5], NFC: [0xC5A5], NFD: [0x110B, 0x1164, 0x11B4], NFKC: [0xC5A5], NFKD: [0x110B, 0x1164, 0x11B4] }, +{ source: [0xC5A6], NFC: [0xC5A6], NFD: [0x110B, 0x1164, 0x11B5], NFKC: [0xC5A6], NFKD: [0x110B, 0x1164, 0x11B5] }, +{ source: [0xC5A7], NFC: [0xC5A7], NFD: [0x110B, 0x1164, 0x11B6], NFKC: [0xC5A7], NFKD: [0x110B, 0x1164, 0x11B6] }, +{ source: [0xC5A8], NFC: [0xC5A8], NFD: [0x110B, 0x1164, 0x11B7], NFKC: [0xC5A8], NFKD: [0x110B, 0x1164, 0x11B7] }, +{ source: [0xC5A9], NFC: [0xC5A9], NFD: [0x110B, 0x1164, 0x11B8], NFKC: [0xC5A9], NFKD: [0x110B, 0x1164, 0x11B8] }, +{ source: [0xC5AA], NFC: [0xC5AA], NFD: [0x110B, 0x1164, 0x11B9], NFKC: [0xC5AA], NFKD: [0x110B, 0x1164, 0x11B9] }, +{ source: [0xC5AB], NFC: [0xC5AB], NFD: [0x110B, 0x1164, 0x11BA], NFKC: [0xC5AB], NFKD: [0x110B, 0x1164, 0x11BA] }, +{ source: [0xC5AC], NFC: [0xC5AC], NFD: [0x110B, 0x1164, 0x11BB], NFKC: [0xC5AC], NFKD: [0x110B, 0x1164, 0x11BB] }, +{ source: [0xC5AD], NFC: [0xC5AD], NFD: [0x110B, 0x1164, 0x11BC], NFKC: [0xC5AD], NFKD: [0x110B, 0x1164, 0x11BC] }, +{ source: [0xC5AE], NFC: [0xC5AE], NFD: [0x110B, 0x1164, 0x11BD], NFKC: [0xC5AE], NFKD: [0x110B, 0x1164, 0x11BD] }, +{ source: [0xC5AF], NFC: [0xC5AF], NFD: [0x110B, 0x1164, 0x11BE], NFKC: [0xC5AF], NFKD: [0x110B, 0x1164, 0x11BE] }, +{ source: [0xC5B0], NFC: [0xC5B0], NFD: [0x110B, 0x1164, 0x11BF], NFKC: [0xC5B0], NFKD: [0x110B, 0x1164, 0x11BF] }, +{ source: [0xC5B1], NFC: [0xC5B1], NFD: [0x110B, 0x1164, 0x11C0], NFKC: [0xC5B1], NFKD: [0x110B, 0x1164, 0x11C0] }, +{ source: [0xC5B2], NFC: [0xC5B2], NFD: [0x110B, 0x1164, 0x11C1], NFKC: [0xC5B2], NFKD: [0x110B, 0x1164, 0x11C1] }, +{ source: [0xC5B3], NFC: [0xC5B3], NFD: [0x110B, 0x1164, 0x11C2], NFKC: [0xC5B3], NFKD: [0x110B, 0x1164, 0x11C2] }, +{ source: [0xC5B4], NFC: [0xC5B4], NFD: [0x110B, 0x1165], NFKC: [0xC5B4], NFKD: [0x110B, 0x1165] }, +{ source: [0xC5B5], NFC: [0xC5B5], NFD: [0x110B, 0x1165, 0x11A8], NFKC: [0xC5B5], NFKD: [0x110B, 0x1165, 0x11A8] }, +{ source: [0xC5B6], NFC: [0xC5B6], NFD: [0x110B, 0x1165, 0x11A9], NFKC: [0xC5B6], NFKD: [0x110B, 0x1165, 0x11A9] }, +{ source: [0xC5B7], NFC: [0xC5B7], NFD: [0x110B, 0x1165, 0x11AA], NFKC: [0xC5B7], NFKD: [0x110B, 0x1165, 0x11AA] }, +{ source: [0xC5B8], NFC: [0xC5B8], NFD: [0x110B, 0x1165, 0x11AB], NFKC: [0xC5B8], NFKD: [0x110B, 0x1165, 0x11AB] }, +{ source: [0xC5B9], NFC: [0xC5B9], NFD: [0x110B, 0x1165, 0x11AC], NFKC: [0xC5B9], NFKD: [0x110B, 0x1165, 0x11AC] }, +{ source: [0xC5BA], NFC: [0xC5BA], NFD: [0x110B, 0x1165, 0x11AD], NFKC: [0xC5BA], NFKD: [0x110B, 0x1165, 0x11AD] }, +{ source: [0xC5BB], NFC: [0xC5BB], NFD: [0x110B, 0x1165, 0x11AE], NFKC: [0xC5BB], NFKD: [0x110B, 0x1165, 0x11AE] }, +{ source: [0xC5BC], NFC: [0xC5BC], NFD: [0x110B, 0x1165, 0x11AF], NFKC: [0xC5BC], NFKD: [0x110B, 0x1165, 0x11AF] }, +{ source: [0xC5BD], NFC: [0xC5BD], NFD: [0x110B, 0x1165, 0x11B0], NFKC: [0xC5BD], NFKD: [0x110B, 0x1165, 0x11B0] }, +{ source: [0xC5BE], NFC: [0xC5BE], NFD: [0x110B, 0x1165, 0x11B1], NFKC: [0xC5BE], NFKD: [0x110B, 0x1165, 0x11B1] }, +{ source: [0xC5BF], NFC: [0xC5BF], NFD: [0x110B, 0x1165, 0x11B2], NFKC: [0xC5BF], NFKD: [0x110B, 0x1165, 0x11B2] }, +{ source: [0xC5C0], NFC: [0xC5C0], NFD: [0x110B, 0x1165, 0x11B3], NFKC: [0xC5C0], NFKD: [0x110B, 0x1165, 0x11B3] }, +{ source: [0xC5C1], NFC: [0xC5C1], NFD: [0x110B, 0x1165, 0x11B4], NFKC: [0xC5C1], NFKD: [0x110B, 0x1165, 0x11B4] }, +{ source: [0xC5C2], NFC: [0xC5C2], NFD: [0x110B, 0x1165, 0x11B5], NFKC: [0xC5C2], NFKD: [0x110B, 0x1165, 0x11B5] }, +{ source: [0xC5C3], NFC: [0xC5C3], NFD: [0x110B, 0x1165, 0x11B6], NFKC: [0xC5C3], NFKD: [0x110B, 0x1165, 0x11B6] }, +{ source: [0xC5C4], NFC: [0xC5C4], NFD: [0x110B, 0x1165, 0x11B7], NFKC: [0xC5C4], NFKD: [0x110B, 0x1165, 0x11B7] }, +{ source: [0xC5C5], NFC: [0xC5C5], NFD: [0x110B, 0x1165, 0x11B8], NFKC: [0xC5C5], NFKD: [0x110B, 0x1165, 0x11B8] }, +{ source: [0xC5C6], NFC: [0xC5C6], NFD: [0x110B, 0x1165, 0x11B9], NFKC: [0xC5C6], NFKD: [0x110B, 0x1165, 0x11B9] }, +{ source: [0xC5C7], NFC: [0xC5C7], NFD: [0x110B, 0x1165, 0x11BA], NFKC: [0xC5C7], NFKD: [0x110B, 0x1165, 0x11BA] }, +{ source: [0xC5C8], NFC: [0xC5C8], NFD: [0x110B, 0x1165, 0x11BB], NFKC: [0xC5C8], NFKD: [0x110B, 0x1165, 0x11BB] }, +{ source: [0xC5C9], NFC: [0xC5C9], NFD: [0x110B, 0x1165, 0x11BC], NFKC: [0xC5C9], NFKD: [0x110B, 0x1165, 0x11BC] }, +{ source: [0xC5CA], NFC: [0xC5CA], NFD: [0x110B, 0x1165, 0x11BD], NFKC: [0xC5CA], NFKD: [0x110B, 0x1165, 0x11BD] }, +{ source: [0xC5CB], NFC: [0xC5CB], NFD: [0x110B, 0x1165, 0x11BE], NFKC: [0xC5CB], NFKD: [0x110B, 0x1165, 0x11BE] }, +{ source: [0xC5CC], NFC: [0xC5CC], NFD: [0x110B, 0x1165, 0x11BF], NFKC: [0xC5CC], NFKD: [0x110B, 0x1165, 0x11BF] }, +{ source: [0xC5CD], NFC: [0xC5CD], NFD: [0x110B, 0x1165, 0x11C0], NFKC: [0xC5CD], NFKD: [0x110B, 0x1165, 0x11C0] }, +{ source: [0xC5CE], NFC: [0xC5CE], NFD: [0x110B, 0x1165, 0x11C1], NFKC: [0xC5CE], NFKD: [0x110B, 0x1165, 0x11C1] }, +{ source: [0xC5CF], NFC: [0xC5CF], NFD: [0x110B, 0x1165, 0x11C2], NFKC: [0xC5CF], NFKD: [0x110B, 0x1165, 0x11C2] }, +{ source: [0xC5D0], NFC: [0xC5D0], NFD: [0x110B, 0x1166], NFKC: [0xC5D0], NFKD: [0x110B, 0x1166] }, +{ source: [0xC5D1], NFC: [0xC5D1], NFD: [0x110B, 0x1166, 0x11A8], NFKC: [0xC5D1], NFKD: [0x110B, 0x1166, 0x11A8] }, +{ source: [0xC5D2], NFC: [0xC5D2], NFD: [0x110B, 0x1166, 0x11A9], NFKC: [0xC5D2], NFKD: [0x110B, 0x1166, 0x11A9] }, +{ source: [0xC5D3], NFC: [0xC5D3], NFD: [0x110B, 0x1166, 0x11AA], NFKC: [0xC5D3], NFKD: [0x110B, 0x1166, 0x11AA] }, +{ source: [0xC5D4], NFC: [0xC5D4], NFD: [0x110B, 0x1166, 0x11AB], NFKC: [0xC5D4], NFKD: [0x110B, 0x1166, 0x11AB] }, +{ source: [0xC5D5], NFC: [0xC5D5], NFD: [0x110B, 0x1166, 0x11AC], NFKC: [0xC5D5], NFKD: [0x110B, 0x1166, 0x11AC] }, +{ source: [0xC5D6], NFC: [0xC5D6], NFD: [0x110B, 0x1166, 0x11AD], NFKC: [0xC5D6], NFKD: [0x110B, 0x1166, 0x11AD] }, +{ source: [0xC5D7], NFC: [0xC5D7], NFD: [0x110B, 0x1166, 0x11AE], NFKC: [0xC5D7], NFKD: [0x110B, 0x1166, 0x11AE] }, +{ source: [0xC5D8], NFC: [0xC5D8], NFD: [0x110B, 0x1166, 0x11AF], NFKC: [0xC5D8], NFKD: [0x110B, 0x1166, 0x11AF] }, +{ source: [0xC5D9], NFC: [0xC5D9], NFD: [0x110B, 0x1166, 0x11B0], NFKC: [0xC5D9], NFKD: [0x110B, 0x1166, 0x11B0] }, +{ source: [0xC5DA], NFC: [0xC5DA], NFD: [0x110B, 0x1166, 0x11B1], NFKC: [0xC5DA], NFKD: [0x110B, 0x1166, 0x11B1] }, +{ source: [0xC5DB], NFC: [0xC5DB], NFD: [0x110B, 0x1166, 0x11B2], NFKC: [0xC5DB], NFKD: [0x110B, 0x1166, 0x11B2] }, +{ source: [0xC5DC], NFC: [0xC5DC], NFD: [0x110B, 0x1166, 0x11B3], NFKC: [0xC5DC], NFKD: [0x110B, 0x1166, 0x11B3] }, +{ source: [0xC5DD], NFC: [0xC5DD], NFD: [0x110B, 0x1166, 0x11B4], NFKC: [0xC5DD], NFKD: [0x110B, 0x1166, 0x11B4] }, +{ source: [0xC5DE], NFC: [0xC5DE], NFD: [0x110B, 0x1166, 0x11B5], NFKC: [0xC5DE], NFKD: [0x110B, 0x1166, 0x11B5] }, +{ source: [0xC5DF], NFC: [0xC5DF], NFD: [0x110B, 0x1166, 0x11B6], NFKC: [0xC5DF], NFKD: [0x110B, 0x1166, 0x11B6] }, +{ source: [0xC5E0], NFC: [0xC5E0], NFD: [0x110B, 0x1166, 0x11B7], NFKC: [0xC5E0], NFKD: [0x110B, 0x1166, 0x11B7] }, +{ source: [0xC5E1], NFC: [0xC5E1], NFD: [0x110B, 0x1166, 0x11B8], NFKC: [0xC5E1], NFKD: [0x110B, 0x1166, 0x11B8] }, +{ source: [0xC5E2], NFC: [0xC5E2], NFD: [0x110B, 0x1166, 0x11B9], NFKC: [0xC5E2], NFKD: [0x110B, 0x1166, 0x11B9] }, +{ source: [0xC5E3], NFC: [0xC5E3], NFD: [0x110B, 0x1166, 0x11BA], NFKC: [0xC5E3], NFKD: [0x110B, 0x1166, 0x11BA] }, +{ source: [0xC5E4], NFC: [0xC5E4], NFD: [0x110B, 0x1166, 0x11BB], NFKC: [0xC5E4], NFKD: [0x110B, 0x1166, 0x11BB] }, +{ source: [0xC5E5], NFC: [0xC5E5], NFD: [0x110B, 0x1166, 0x11BC], NFKC: [0xC5E5], NFKD: [0x110B, 0x1166, 0x11BC] }, +{ source: [0xC5E6], NFC: [0xC5E6], NFD: [0x110B, 0x1166, 0x11BD], NFKC: [0xC5E6], NFKD: [0x110B, 0x1166, 0x11BD] }, +{ source: [0xC5E7], NFC: [0xC5E7], NFD: [0x110B, 0x1166, 0x11BE], NFKC: [0xC5E7], NFKD: [0x110B, 0x1166, 0x11BE] }, +{ source: [0xC5E8], NFC: [0xC5E8], NFD: [0x110B, 0x1166, 0x11BF], NFKC: [0xC5E8], NFKD: [0x110B, 0x1166, 0x11BF] }, +{ source: [0xC5E9], NFC: [0xC5E9], NFD: [0x110B, 0x1166, 0x11C0], NFKC: [0xC5E9], NFKD: [0x110B, 0x1166, 0x11C0] }, +{ source: [0xC5EA], NFC: [0xC5EA], NFD: [0x110B, 0x1166, 0x11C1], NFKC: [0xC5EA], NFKD: [0x110B, 0x1166, 0x11C1] }, +{ source: [0xC5EB], NFC: [0xC5EB], NFD: [0x110B, 0x1166, 0x11C2], NFKC: [0xC5EB], NFKD: [0x110B, 0x1166, 0x11C2] }, +{ source: [0xC5EC], NFC: [0xC5EC], NFD: [0x110B, 0x1167], NFKC: [0xC5EC], NFKD: [0x110B, 0x1167] }, +{ source: [0xC5ED], NFC: [0xC5ED], NFD: [0x110B, 0x1167, 0x11A8], NFKC: [0xC5ED], NFKD: [0x110B, 0x1167, 0x11A8] }, +{ source: [0xC5EE], NFC: [0xC5EE], NFD: [0x110B, 0x1167, 0x11A9], NFKC: [0xC5EE], NFKD: [0x110B, 0x1167, 0x11A9] }, +{ source: [0xC5EF], NFC: [0xC5EF], NFD: [0x110B, 0x1167, 0x11AA], NFKC: [0xC5EF], NFKD: [0x110B, 0x1167, 0x11AA] }, +{ source: [0xC5F0], NFC: [0xC5F0], NFD: [0x110B, 0x1167, 0x11AB], NFKC: [0xC5F0], NFKD: [0x110B, 0x1167, 0x11AB] }, +{ source: [0xC5F1], NFC: [0xC5F1], NFD: [0x110B, 0x1167, 0x11AC], NFKC: [0xC5F1], NFKD: [0x110B, 0x1167, 0x11AC] }, +{ source: [0xC5F2], NFC: [0xC5F2], NFD: [0x110B, 0x1167, 0x11AD], NFKC: [0xC5F2], NFKD: [0x110B, 0x1167, 0x11AD] }, +{ source: [0xC5F3], NFC: [0xC5F3], NFD: [0x110B, 0x1167, 0x11AE], NFKC: [0xC5F3], NFKD: [0x110B, 0x1167, 0x11AE] }, +{ source: [0xC5F4], NFC: [0xC5F4], NFD: [0x110B, 0x1167, 0x11AF], NFKC: [0xC5F4], NFKD: [0x110B, 0x1167, 0x11AF] }, +{ source: [0xC5F5], NFC: [0xC5F5], NFD: [0x110B, 0x1167, 0x11B0], NFKC: [0xC5F5], NFKD: [0x110B, 0x1167, 0x11B0] }, +{ source: [0xC5F6], NFC: [0xC5F6], NFD: [0x110B, 0x1167, 0x11B1], NFKC: [0xC5F6], NFKD: [0x110B, 0x1167, 0x11B1] }, +{ source: [0xC5F7], NFC: [0xC5F7], NFD: [0x110B, 0x1167, 0x11B2], NFKC: [0xC5F7], NFKD: [0x110B, 0x1167, 0x11B2] }, +{ source: [0xC5F8], NFC: [0xC5F8], NFD: [0x110B, 0x1167, 0x11B3], NFKC: [0xC5F8], NFKD: [0x110B, 0x1167, 0x11B3] }, +{ source: [0xC5F9], NFC: [0xC5F9], NFD: [0x110B, 0x1167, 0x11B4], NFKC: [0xC5F9], NFKD: [0x110B, 0x1167, 0x11B4] }, +{ source: [0xC5FA], NFC: [0xC5FA], NFD: [0x110B, 0x1167, 0x11B5], NFKC: [0xC5FA], NFKD: [0x110B, 0x1167, 0x11B5] }, +{ source: [0xC5FB], NFC: [0xC5FB], NFD: [0x110B, 0x1167, 0x11B6], NFKC: [0xC5FB], NFKD: [0x110B, 0x1167, 0x11B6] }, +{ source: [0xC5FC], NFC: [0xC5FC], NFD: [0x110B, 0x1167, 0x11B7], NFKC: [0xC5FC], NFKD: [0x110B, 0x1167, 0x11B7] }, +{ source: [0xC5FD], NFC: [0xC5FD], NFD: [0x110B, 0x1167, 0x11B8], NFKC: [0xC5FD], NFKD: [0x110B, 0x1167, 0x11B8] }, +{ source: [0xC5FE], NFC: [0xC5FE], NFD: [0x110B, 0x1167, 0x11B9], NFKC: [0xC5FE], NFKD: [0x110B, 0x1167, 0x11B9] }, +{ source: [0xC5FF], NFC: [0xC5FF], NFD: [0x110B, 0x1167, 0x11BA], NFKC: [0xC5FF], NFKD: [0x110B, 0x1167, 0x11BA] }, +{ source: [0xC600], NFC: [0xC600], NFD: [0x110B, 0x1167, 0x11BB], NFKC: [0xC600], NFKD: [0x110B, 0x1167, 0x11BB] }, +{ source: [0xC601], NFC: [0xC601], NFD: [0x110B, 0x1167, 0x11BC], NFKC: [0xC601], NFKD: [0x110B, 0x1167, 0x11BC] }, +{ source: [0xC602], NFC: [0xC602], NFD: [0x110B, 0x1167, 0x11BD], NFKC: [0xC602], NFKD: [0x110B, 0x1167, 0x11BD] }, +{ source: [0xC603], NFC: [0xC603], NFD: [0x110B, 0x1167, 0x11BE], NFKC: [0xC603], NFKD: [0x110B, 0x1167, 0x11BE] }, +{ source: [0xC604], NFC: [0xC604], NFD: [0x110B, 0x1167, 0x11BF], NFKC: [0xC604], NFKD: [0x110B, 0x1167, 0x11BF] }, +{ source: [0xC605], NFC: [0xC605], NFD: [0x110B, 0x1167, 0x11C0], NFKC: [0xC605], NFKD: [0x110B, 0x1167, 0x11C0] }, +{ source: [0xC606], NFC: [0xC606], NFD: [0x110B, 0x1167, 0x11C1], NFKC: [0xC606], NFKD: [0x110B, 0x1167, 0x11C1] }, +{ source: [0xC607], NFC: [0xC607], NFD: [0x110B, 0x1167, 0x11C2], NFKC: [0xC607], NFKD: [0x110B, 0x1167, 0x11C2] }, +{ source: [0xC608], NFC: [0xC608], NFD: [0x110B, 0x1168], NFKC: [0xC608], NFKD: [0x110B, 0x1168] }, +{ source: [0xC609], NFC: [0xC609], NFD: [0x110B, 0x1168, 0x11A8], NFKC: [0xC609], NFKD: [0x110B, 0x1168, 0x11A8] }, +{ source: [0xC60A], NFC: [0xC60A], NFD: [0x110B, 0x1168, 0x11A9], NFKC: [0xC60A], NFKD: [0x110B, 0x1168, 0x11A9] }, +{ source: [0xC60B], NFC: [0xC60B], NFD: [0x110B, 0x1168, 0x11AA], NFKC: [0xC60B], NFKD: [0x110B, 0x1168, 0x11AA] }, +{ source: [0xC60C], NFC: [0xC60C], NFD: [0x110B, 0x1168, 0x11AB], NFKC: [0xC60C], NFKD: [0x110B, 0x1168, 0x11AB] }, +{ source: [0xC60D], NFC: [0xC60D], NFD: [0x110B, 0x1168, 0x11AC], NFKC: [0xC60D], NFKD: [0x110B, 0x1168, 0x11AC] }, +{ source: [0xC60E], NFC: [0xC60E], NFD: [0x110B, 0x1168, 0x11AD], NFKC: [0xC60E], NFKD: [0x110B, 0x1168, 0x11AD] }, +{ source: [0xC60F], NFC: [0xC60F], NFD: [0x110B, 0x1168, 0x11AE], NFKC: [0xC60F], NFKD: [0x110B, 0x1168, 0x11AE] }, +{ source: [0xC610], NFC: [0xC610], NFD: [0x110B, 0x1168, 0x11AF], NFKC: [0xC610], NFKD: [0x110B, 0x1168, 0x11AF] }, +{ source: [0xC611], NFC: [0xC611], NFD: [0x110B, 0x1168, 0x11B0], NFKC: [0xC611], NFKD: [0x110B, 0x1168, 0x11B0] }, +{ source: [0xC612], NFC: [0xC612], NFD: [0x110B, 0x1168, 0x11B1], NFKC: [0xC612], NFKD: [0x110B, 0x1168, 0x11B1] }, +{ source: [0xC613], NFC: [0xC613], NFD: [0x110B, 0x1168, 0x11B2], NFKC: [0xC613], NFKD: [0x110B, 0x1168, 0x11B2] }, +{ source: [0xC614], NFC: [0xC614], NFD: [0x110B, 0x1168, 0x11B3], NFKC: [0xC614], NFKD: [0x110B, 0x1168, 0x11B3] }, +{ source: [0xC615], NFC: [0xC615], NFD: [0x110B, 0x1168, 0x11B4], NFKC: [0xC615], NFKD: [0x110B, 0x1168, 0x11B4] }, +{ source: [0xC616], NFC: [0xC616], NFD: [0x110B, 0x1168, 0x11B5], NFKC: [0xC616], NFKD: [0x110B, 0x1168, 0x11B5] }, +{ source: [0xC617], NFC: [0xC617], NFD: [0x110B, 0x1168, 0x11B6], NFKC: [0xC617], NFKD: [0x110B, 0x1168, 0x11B6] }, +{ source: [0xC618], NFC: [0xC618], NFD: [0x110B, 0x1168, 0x11B7], NFKC: [0xC618], NFKD: [0x110B, 0x1168, 0x11B7] }, +{ source: [0xC619], NFC: [0xC619], NFD: [0x110B, 0x1168, 0x11B8], NFKC: [0xC619], NFKD: [0x110B, 0x1168, 0x11B8] }, +{ source: [0xC61A], NFC: [0xC61A], NFD: [0x110B, 0x1168, 0x11B9], NFKC: [0xC61A], NFKD: [0x110B, 0x1168, 0x11B9] }, +{ source: [0xC61B], NFC: [0xC61B], NFD: [0x110B, 0x1168, 0x11BA], NFKC: [0xC61B], NFKD: [0x110B, 0x1168, 0x11BA] }, +{ source: [0xC61C], NFC: [0xC61C], NFD: [0x110B, 0x1168, 0x11BB], NFKC: [0xC61C], NFKD: [0x110B, 0x1168, 0x11BB] }, +{ source: [0xC61D], NFC: [0xC61D], NFD: [0x110B, 0x1168, 0x11BC], NFKC: [0xC61D], NFKD: [0x110B, 0x1168, 0x11BC] }, +{ source: [0xC61E], NFC: [0xC61E], NFD: [0x110B, 0x1168, 0x11BD], NFKC: [0xC61E], NFKD: [0x110B, 0x1168, 0x11BD] }, +{ source: [0xC61F], NFC: [0xC61F], NFD: [0x110B, 0x1168, 0x11BE], NFKC: [0xC61F], NFKD: [0x110B, 0x1168, 0x11BE] }, +{ source: [0xC620], NFC: [0xC620], NFD: [0x110B, 0x1168, 0x11BF], NFKC: [0xC620], NFKD: [0x110B, 0x1168, 0x11BF] }, +{ source: [0xC621], NFC: [0xC621], NFD: [0x110B, 0x1168, 0x11C0], NFKC: [0xC621], NFKD: [0x110B, 0x1168, 0x11C0] }, +{ source: [0xC622], NFC: [0xC622], NFD: [0x110B, 0x1168, 0x11C1], NFKC: [0xC622], NFKD: [0x110B, 0x1168, 0x11C1] }, +{ source: [0xC623], NFC: [0xC623], NFD: [0x110B, 0x1168, 0x11C2], NFKC: [0xC623], NFKD: [0x110B, 0x1168, 0x11C2] }, +{ source: [0xC624], NFC: [0xC624], NFD: [0x110B, 0x1169], NFKC: [0xC624], NFKD: [0x110B, 0x1169] }, +{ source: [0xC625], NFC: [0xC625], NFD: [0x110B, 0x1169, 0x11A8], NFKC: [0xC625], NFKD: [0x110B, 0x1169, 0x11A8] }, +{ source: [0xC626], NFC: [0xC626], NFD: [0x110B, 0x1169, 0x11A9], NFKC: [0xC626], NFKD: [0x110B, 0x1169, 0x11A9] }, +{ source: [0xC627], NFC: [0xC627], NFD: [0x110B, 0x1169, 0x11AA], NFKC: [0xC627], NFKD: [0x110B, 0x1169, 0x11AA] }, +{ source: [0xC628], NFC: [0xC628], NFD: [0x110B, 0x1169, 0x11AB], NFKC: [0xC628], NFKD: [0x110B, 0x1169, 0x11AB] }, +{ source: [0xC629], NFC: [0xC629], NFD: [0x110B, 0x1169, 0x11AC], NFKC: [0xC629], NFKD: [0x110B, 0x1169, 0x11AC] }, +{ source: [0xC62A], NFC: [0xC62A], NFD: [0x110B, 0x1169, 0x11AD], NFKC: [0xC62A], NFKD: [0x110B, 0x1169, 0x11AD] }, +{ source: [0xC62B], NFC: [0xC62B], NFD: [0x110B, 0x1169, 0x11AE], NFKC: [0xC62B], NFKD: [0x110B, 0x1169, 0x11AE] }, +{ source: [0xC62C], NFC: [0xC62C], NFD: [0x110B, 0x1169, 0x11AF], NFKC: [0xC62C], NFKD: [0x110B, 0x1169, 0x11AF] }, +{ source: [0xC62D], NFC: [0xC62D], NFD: [0x110B, 0x1169, 0x11B0], NFKC: [0xC62D], NFKD: [0x110B, 0x1169, 0x11B0] }, +{ source: [0xC62E], NFC: [0xC62E], NFD: [0x110B, 0x1169, 0x11B1], NFKC: [0xC62E], NFKD: [0x110B, 0x1169, 0x11B1] }, +{ source: [0xC62F], NFC: [0xC62F], NFD: [0x110B, 0x1169, 0x11B2], NFKC: [0xC62F], NFKD: [0x110B, 0x1169, 0x11B2] }, +{ source: [0xC630], NFC: [0xC630], NFD: [0x110B, 0x1169, 0x11B3], NFKC: [0xC630], NFKD: [0x110B, 0x1169, 0x11B3] }, +{ source: [0xC631], NFC: [0xC631], NFD: [0x110B, 0x1169, 0x11B4], NFKC: [0xC631], NFKD: [0x110B, 0x1169, 0x11B4] }, +{ source: [0xC632], NFC: [0xC632], NFD: [0x110B, 0x1169, 0x11B5], NFKC: [0xC632], NFKD: [0x110B, 0x1169, 0x11B5] }, +{ source: [0xC633], NFC: [0xC633], NFD: [0x110B, 0x1169, 0x11B6], NFKC: [0xC633], NFKD: [0x110B, 0x1169, 0x11B6] }, +{ source: [0xC634], NFC: [0xC634], NFD: [0x110B, 0x1169, 0x11B7], NFKC: [0xC634], NFKD: [0x110B, 0x1169, 0x11B7] }, +{ source: [0xC635], NFC: [0xC635], NFD: [0x110B, 0x1169, 0x11B8], NFKC: [0xC635], NFKD: [0x110B, 0x1169, 0x11B8] }, +{ source: [0xC636], NFC: [0xC636], NFD: [0x110B, 0x1169, 0x11B9], NFKC: [0xC636], NFKD: [0x110B, 0x1169, 0x11B9] }, +{ source: [0xC637], NFC: [0xC637], NFD: [0x110B, 0x1169, 0x11BA], NFKC: [0xC637], NFKD: [0x110B, 0x1169, 0x11BA] }, +{ source: [0xC638], NFC: [0xC638], NFD: [0x110B, 0x1169, 0x11BB], NFKC: [0xC638], NFKD: [0x110B, 0x1169, 0x11BB] }, +{ source: [0xC639], NFC: [0xC639], NFD: [0x110B, 0x1169, 0x11BC], NFKC: [0xC639], NFKD: [0x110B, 0x1169, 0x11BC] }, +{ source: [0xC63A], NFC: [0xC63A], NFD: [0x110B, 0x1169, 0x11BD], NFKC: [0xC63A], NFKD: [0x110B, 0x1169, 0x11BD] }, +{ source: [0xC63B], NFC: [0xC63B], NFD: [0x110B, 0x1169, 0x11BE], NFKC: [0xC63B], NFKD: [0x110B, 0x1169, 0x11BE] }, +{ source: [0xC63C], NFC: [0xC63C], NFD: [0x110B, 0x1169, 0x11BF], NFKC: [0xC63C], NFKD: [0x110B, 0x1169, 0x11BF] }, +{ source: [0xC63D], NFC: [0xC63D], NFD: [0x110B, 0x1169, 0x11C0], NFKC: [0xC63D], NFKD: [0x110B, 0x1169, 0x11C0] }, +{ source: [0xC63E], NFC: [0xC63E], NFD: [0x110B, 0x1169, 0x11C1], NFKC: [0xC63E], NFKD: [0x110B, 0x1169, 0x11C1] }, +{ source: [0xC63F], NFC: [0xC63F], NFD: [0x110B, 0x1169, 0x11C2], NFKC: [0xC63F], NFKD: [0x110B, 0x1169, 0x11C2] }, +{ source: [0xC640], NFC: [0xC640], NFD: [0x110B, 0x116A], NFKC: [0xC640], NFKD: [0x110B, 0x116A] }, +{ source: [0xC641], NFC: [0xC641], NFD: [0x110B, 0x116A, 0x11A8], NFKC: [0xC641], NFKD: [0x110B, 0x116A, 0x11A8] }, +{ source: [0xC642], NFC: [0xC642], NFD: [0x110B, 0x116A, 0x11A9], NFKC: [0xC642], NFKD: [0x110B, 0x116A, 0x11A9] }, +{ source: [0xC643], NFC: [0xC643], NFD: [0x110B, 0x116A, 0x11AA], NFKC: [0xC643], NFKD: [0x110B, 0x116A, 0x11AA] }, +{ source: [0xC644], NFC: [0xC644], NFD: [0x110B, 0x116A, 0x11AB], NFKC: [0xC644], NFKD: [0x110B, 0x116A, 0x11AB] }, +{ source: [0xC645], NFC: [0xC645], NFD: [0x110B, 0x116A, 0x11AC], NFKC: [0xC645], NFKD: [0x110B, 0x116A, 0x11AC] }, +{ source: [0xC646], NFC: [0xC646], NFD: [0x110B, 0x116A, 0x11AD], NFKC: [0xC646], NFKD: [0x110B, 0x116A, 0x11AD] }, +{ source: [0xC647], NFC: [0xC647], NFD: [0x110B, 0x116A, 0x11AE], NFKC: [0xC647], NFKD: [0x110B, 0x116A, 0x11AE] }, +{ source: [0xC648], NFC: [0xC648], NFD: [0x110B, 0x116A, 0x11AF], NFKC: [0xC648], NFKD: [0x110B, 0x116A, 0x11AF] }, +{ source: [0xC649], NFC: [0xC649], NFD: [0x110B, 0x116A, 0x11B0], NFKC: [0xC649], NFKD: [0x110B, 0x116A, 0x11B0] }, +{ source: [0xC64A], NFC: [0xC64A], NFD: [0x110B, 0x116A, 0x11B1], NFKC: [0xC64A], NFKD: [0x110B, 0x116A, 0x11B1] }, +{ source: [0xC64B], NFC: [0xC64B], NFD: [0x110B, 0x116A, 0x11B2], NFKC: [0xC64B], NFKD: [0x110B, 0x116A, 0x11B2] }, +{ source: [0xC64C], NFC: [0xC64C], NFD: [0x110B, 0x116A, 0x11B3], NFKC: [0xC64C], NFKD: [0x110B, 0x116A, 0x11B3] }, +{ source: [0xC64D], NFC: [0xC64D], NFD: [0x110B, 0x116A, 0x11B4], NFKC: [0xC64D], NFKD: [0x110B, 0x116A, 0x11B4] }, +{ source: [0xC64E], NFC: [0xC64E], NFD: [0x110B, 0x116A, 0x11B5], NFKC: [0xC64E], NFKD: [0x110B, 0x116A, 0x11B5] }, +{ source: [0xC64F], NFC: [0xC64F], NFD: [0x110B, 0x116A, 0x11B6], NFKC: [0xC64F], NFKD: [0x110B, 0x116A, 0x11B6] }, +{ source: [0xC650], NFC: [0xC650], NFD: [0x110B, 0x116A, 0x11B7], NFKC: [0xC650], NFKD: [0x110B, 0x116A, 0x11B7] }, +{ source: [0xC651], NFC: [0xC651], NFD: [0x110B, 0x116A, 0x11B8], NFKC: [0xC651], NFKD: [0x110B, 0x116A, 0x11B8] }, +{ source: [0xC652], NFC: [0xC652], NFD: [0x110B, 0x116A, 0x11B9], NFKC: [0xC652], NFKD: [0x110B, 0x116A, 0x11B9] }, +{ source: [0xC653], NFC: [0xC653], NFD: [0x110B, 0x116A, 0x11BA], NFKC: [0xC653], NFKD: [0x110B, 0x116A, 0x11BA] }, +{ source: [0xC654], NFC: [0xC654], NFD: [0x110B, 0x116A, 0x11BB], NFKC: [0xC654], NFKD: [0x110B, 0x116A, 0x11BB] }, +{ source: [0xC655], NFC: [0xC655], NFD: [0x110B, 0x116A, 0x11BC], NFKC: [0xC655], NFKD: [0x110B, 0x116A, 0x11BC] }, +{ source: [0xC656], NFC: [0xC656], NFD: [0x110B, 0x116A, 0x11BD], NFKC: [0xC656], NFKD: [0x110B, 0x116A, 0x11BD] }, +{ source: [0xC657], NFC: [0xC657], NFD: [0x110B, 0x116A, 0x11BE], NFKC: [0xC657], NFKD: [0x110B, 0x116A, 0x11BE] }, +{ source: [0xC658], NFC: [0xC658], NFD: [0x110B, 0x116A, 0x11BF], NFKC: [0xC658], NFKD: [0x110B, 0x116A, 0x11BF] }, +{ source: [0xC659], NFC: [0xC659], NFD: [0x110B, 0x116A, 0x11C0], NFKC: [0xC659], NFKD: [0x110B, 0x116A, 0x11C0] }, +{ source: [0xC65A], NFC: [0xC65A], NFD: [0x110B, 0x116A, 0x11C1], NFKC: [0xC65A], NFKD: [0x110B, 0x116A, 0x11C1] }, +{ source: [0xC65B], NFC: [0xC65B], NFD: [0x110B, 0x116A, 0x11C2], NFKC: [0xC65B], NFKD: [0x110B, 0x116A, 0x11C2] }, +{ source: [0xC65C], NFC: [0xC65C], NFD: [0x110B, 0x116B], NFKC: [0xC65C], NFKD: [0x110B, 0x116B] }, +{ source: [0xC65D], NFC: [0xC65D], NFD: [0x110B, 0x116B, 0x11A8], NFKC: [0xC65D], NFKD: [0x110B, 0x116B, 0x11A8] }, +{ source: [0xC65E], NFC: [0xC65E], NFD: [0x110B, 0x116B, 0x11A9], NFKC: [0xC65E], NFKD: [0x110B, 0x116B, 0x11A9] }, +{ source: [0xC65F], NFC: [0xC65F], NFD: [0x110B, 0x116B, 0x11AA], NFKC: [0xC65F], NFKD: [0x110B, 0x116B, 0x11AA] }, +{ source: [0xC660], NFC: [0xC660], NFD: [0x110B, 0x116B, 0x11AB], NFKC: [0xC660], NFKD: [0x110B, 0x116B, 0x11AB] }, +{ source: [0xC661], NFC: [0xC661], NFD: [0x110B, 0x116B, 0x11AC], NFKC: [0xC661], NFKD: [0x110B, 0x116B, 0x11AC] }, +{ source: [0xC662], NFC: [0xC662], NFD: [0x110B, 0x116B, 0x11AD], NFKC: [0xC662], NFKD: [0x110B, 0x116B, 0x11AD] }, +{ source: [0xC663], NFC: [0xC663], NFD: [0x110B, 0x116B, 0x11AE], NFKC: [0xC663], NFKD: [0x110B, 0x116B, 0x11AE] }, +{ source: [0xC664], NFC: [0xC664], NFD: [0x110B, 0x116B, 0x11AF], NFKC: [0xC664], NFKD: [0x110B, 0x116B, 0x11AF] }, +{ source: [0xC665], NFC: [0xC665], NFD: [0x110B, 0x116B, 0x11B0], NFKC: [0xC665], NFKD: [0x110B, 0x116B, 0x11B0] }, +{ source: [0xC666], NFC: [0xC666], NFD: [0x110B, 0x116B, 0x11B1], NFKC: [0xC666], NFKD: [0x110B, 0x116B, 0x11B1] }, +{ source: [0xC667], NFC: [0xC667], NFD: [0x110B, 0x116B, 0x11B2], NFKC: [0xC667], NFKD: [0x110B, 0x116B, 0x11B2] }, +{ source: [0xC668], NFC: [0xC668], NFD: [0x110B, 0x116B, 0x11B3], NFKC: [0xC668], NFKD: [0x110B, 0x116B, 0x11B3] }, +{ source: [0xC669], NFC: [0xC669], NFD: [0x110B, 0x116B, 0x11B4], NFKC: [0xC669], NFKD: [0x110B, 0x116B, 0x11B4] }, +{ source: [0xC66A], NFC: [0xC66A], NFD: [0x110B, 0x116B, 0x11B5], NFKC: [0xC66A], NFKD: [0x110B, 0x116B, 0x11B5] }, +{ source: [0xC66B], NFC: [0xC66B], NFD: [0x110B, 0x116B, 0x11B6], NFKC: [0xC66B], NFKD: [0x110B, 0x116B, 0x11B6] }, +{ source: [0xC66C], NFC: [0xC66C], NFD: [0x110B, 0x116B, 0x11B7], NFKC: [0xC66C], NFKD: [0x110B, 0x116B, 0x11B7] }, +{ source: [0xC66D], NFC: [0xC66D], NFD: [0x110B, 0x116B, 0x11B8], NFKC: [0xC66D], NFKD: [0x110B, 0x116B, 0x11B8] }, +{ source: [0xC66E], NFC: [0xC66E], NFD: [0x110B, 0x116B, 0x11B9], NFKC: [0xC66E], NFKD: [0x110B, 0x116B, 0x11B9] }, +{ source: [0xC66F], NFC: [0xC66F], NFD: [0x110B, 0x116B, 0x11BA], NFKC: [0xC66F], NFKD: [0x110B, 0x116B, 0x11BA] }, +{ source: [0xC670], NFC: [0xC670], NFD: [0x110B, 0x116B, 0x11BB], NFKC: [0xC670], NFKD: [0x110B, 0x116B, 0x11BB] }, +{ source: [0xC671], NFC: [0xC671], NFD: [0x110B, 0x116B, 0x11BC], NFKC: [0xC671], NFKD: [0x110B, 0x116B, 0x11BC] }, +{ source: [0xC672], NFC: [0xC672], NFD: [0x110B, 0x116B, 0x11BD], NFKC: [0xC672], NFKD: [0x110B, 0x116B, 0x11BD] }, +{ source: [0xC673], NFC: [0xC673], NFD: [0x110B, 0x116B, 0x11BE], NFKC: [0xC673], NFKD: [0x110B, 0x116B, 0x11BE] }, +{ source: [0xC674], NFC: [0xC674], NFD: [0x110B, 0x116B, 0x11BF], NFKC: [0xC674], NFKD: [0x110B, 0x116B, 0x11BF] }, +{ source: [0xC675], NFC: [0xC675], NFD: [0x110B, 0x116B, 0x11C0], NFKC: [0xC675], NFKD: [0x110B, 0x116B, 0x11C0] }, +{ source: [0xC676], NFC: [0xC676], NFD: [0x110B, 0x116B, 0x11C1], NFKC: [0xC676], NFKD: [0x110B, 0x116B, 0x11C1] }, +{ source: [0xC677], NFC: [0xC677], NFD: [0x110B, 0x116B, 0x11C2], NFKC: [0xC677], NFKD: [0x110B, 0x116B, 0x11C2] }, +{ source: [0xC678], NFC: [0xC678], NFD: [0x110B, 0x116C], NFKC: [0xC678], NFKD: [0x110B, 0x116C] }, +{ source: [0xC679], NFC: [0xC679], NFD: [0x110B, 0x116C, 0x11A8], NFKC: [0xC679], NFKD: [0x110B, 0x116C, 0x11A8] }, +{ source: [0xC67A], NFC: [0xC67A], NFD: [0x110B, 0x116C, 0x11A9], NFKC: [0xC67A], NFKD: [0x110B, 0x116C, 0x11A9] }, +{ source: [0xC67B], NFC: [0xC67B], NFD: [0x110B, 0x116C, 0x11AA], NFKC: [0xC67B], NFKD: [0x110B, 0x116C, 0x11AA] }, +{ source: [0xC67C], NFC: [0xC67C], NFD: [0x110B, 0x116C, 0x11AB], NFKC: [0xC67C], NFKD: [0x110B, 0x116C, 0x11AB] }, +{ source: [0xC67D], NFC: [0xC67D], NFD: [0x110B, 0x116C, 0x11AC], NFKC: [0xC67D], NFKD: [0x110B, 0x116C, 0x11AC] }, +{ source: [0xC67E], NFC: [0xC67E], NFD: [0x110B, 0x116C, 0x11AD], NFKC: [0xC67E], NFKD: [0x110B, 0x116C, 0x11AD] }, +{ source: [0xC67F], NFC: [0xC67F], NFD: [0x110B, 0x116C, 0x11AE], NFKC: [0xC67F], NFKD: [0x110B, 0x116C, 0x11AE] }, +{ source: [0xC680], NFC: [0xC680], NFD: [0x110B, 0x116C, 0x11AF], NFKC: [0xC680], NFKD: [0x110B, 0x116C, 0x11AF] }, +{ source: [0xC681], NFC: [0xC681], NFD: [0x110B, 0x116C, 0x11B0], NFKC: [0xC681], NFKD: [0x110B, 0x116C, 0x11B0] }, +{ source: [0xC682], NFC: [0xC682], NFD: [0x110B, 0x116C, 0x11B1], NFKC: [0xC682], NFKD: [0x110B, 0x116C, 0x11B1] }, +{ source: [0xC683], NFC: [0xC683], NFD: [0x110B, 0x116C, 0x11B2], NFKC: [0xC683], NFKD: [0x110B, 0x116C, 0x11B2] }, +{ source: [0xC684], NFC: [0xC684], NFD: [0x110B, 0x116C, 0x11B3], NFKC: [0xC684], NFKD: [0x110B, 0x116C, 0x11B3] }, +{ source: [0xC685], NFC: [0xC685], NFD: [0x110B, 0x116C, 0x11B4], NFKC: [0xC685], NFKD: [0x110B, 0x116C, 0x11B4] }, +{ source: [0xC686], NFC: [0xC686], NFD: [0x110B, 0x116C, 0x11B5], NFKC: [0xC686], NFKD: [0x110B, 0x116C, 0x11B5] }, +{ source: [0xC687], NFC: [0xC687], NFD: [0x110B, 0x116C, 0x11B6], NFKC: [0xC687], NFKD: [0x110B, 0x116C, 0x11B6] }, +{ source: [0xC688], NFC: [0xC688], NFD: [0x110B, 0x116C, 0x11B7], NFKC: [0xC688], NFKD: [0x110B, 0x116C, 0x11B7] }, +{ source: [0xC689], NFC: [0xC689], NFD: [0x110B, 0x116C, 0x11B8], NFKC: [0xC689], NFKD: [0x110B, 0x116C, 0x11B8] }, +{ source: [0xC68A], NFC: [0xC68A], NFD: [0x110B, 0x116C, 0x11B9], NFKC: [0xC68A], NFKD: [0x110B, 0x116C, 0x11B9] }, +{ source: [0xC68B], NFC: [0xC68B], NFD: [0x110B, 0x116C, 0x11BA], NFKC: [0xC68B], NFKD: [0x110B, 0x116C, 0x11BA] }, +{ source: [0xC68C], NFC: [0xC68C], NFD: [0x110B, 0x116C, 0x11BB], NFKC: [0xC68C], NFKD: [0x110B, 0x116C, 0x11BB] }, +{ source: [0xC68D], NFC: [0xC68D], NFD: [0x110B, 0x116C, 0x11BC], NFKC: [0xC68D], NFKD: [0x110B, 0x116C, 0x11BC] }, +{ source: [0xC68E], NFC: [0xC68E], NFD: [0x110B, 0x116C, 0x11BD], NFKC: [0xC68E], NFKD: [0x110B, 0x116C, 0x11BD] }, +{ source: [0xC68F], NFC: [0xC68F], NFD: [0x110B, 0x116C, 0x11BE], NFKC: [0xC68F], NFKD: [0x110B, 0x116C, 0x11BE] }, +{ source: [0xC690], NFC: [0xC690], NFD: [0x110B, 0x116C, 0x11BF], NFKC: [0xC690], NFKD: [0x110B, 0x116C, 0x11BF] }, +{ source: [0xC691], NFC: [0xC691], NFD: [0x110B, 0x116C, 0x11C0], NFKC: [0xC691], NFKD: [0x110B, 0x116C, 0x11C0] }, +{ source: [0xC692], NFC: [0xC692], NFD: [0x110B, 0x116C, 0x11C1], NFKC: [0xC692], NFKD: [0x110B, 0x116C, 0x11C1] }, +{ source: [0xC693], NFC: [0xC693], NFD: [0x110B, 0x116C, 0x11C2], NFKC: [0xC693], NFKD: [0x110B, 0x116C, 0x11C2] }, +{ source: [0xC694], NFC: [0xC694], NFD: [0x110B, 0x116D], NFKC: [0xC694], NFKD: [0x110B, 0x116D] }, +{ source: [0xC695], NFC: [0xC695], NFD: [0x110B, 0x116D, 0x11A8], NFKC: [0xC695], NFKD: [0x110B, 0x116D, 0x11A8] }, +{ source: [0xC696], NFC: [0xC696], NFD: [0x110B, 0x116D, 0x11A9], NFKC: [0xC696], NFKD: [0x110B, 0x116D, 0x11A9] }, +{ source: [0xC697], NFC: [0xC697], NFD: [0x110B, 0x116D, 0x11AA], NFKC: [0xC697], NFKD: [0x110B, 0x116D, 0x11AA] }, +{ source: [0xC698], NFC: [0xC698], NFD: [0x110B, 0x116D, 0x11AB], NFKC: [0xC698], NFKD: [0x110B, 0x116D, 0x11AB] }, +{ source: [0xC699], NFC: [0xC699], NFD: [0x110B, 0x116D, 0x11AC], NFKC: [0xC699], NFKD: [0x110B, 0x116D, 0x11AC] }, +{ source: [0xC69A], NFC: [0xC69A], NFD: [0x110B, 0x116D, 0x11AD], NFKC: [0xC69A], NFKD: [0x110B, 0x116D, 0x11AD] }, +{ source: [0xC69B], NFC: [0xC69B], NFD: [0x110B, 0x116D, 0x11AE], NFKC: [0xC69B], NFKD: [0x110B, 0x116D, 0x11AE] }, +{ source: [0xC69C], NFC: [0xC69C], NFD: [0x110B, 0x116D, 0x11AF], NFKC: [0xC69C], NFKD: [0x110B, 0x116D, 0x11AF] }, +{ source: [0xC69D], NFC: [0xC69D], NFD: [0x110B, 0x116D, 0x11B0], NFKC: [0xC69D], NFKD: [0x110B, 0x116D, 0x11B0] }, +{ source: [0xC69E], NFC: [0xC69E], NFD: [0x110B, 0x116D, 0x11B1], NFKC: [0xC69E], NFKD: [0x110B, 0x116D, 0x11B1] }, +{ source: [0xC69F], NFC: [0xC69F], NFD: [0x110B, 0x116D, 0x11B2], NFKC: [0xC69F], NFKD: [0x110B, 0x116D, 0x11B2] }, +{ source: [0xC6A0], NFC: [0xC6A0], NFD: [0x110B, 0x116D, 0x11B3], NFKC: [0xC6A0], NFKD: [0x110B, 0x116D, 0x11B3] }, +{ source: [0xC6A1], NFC: [0xC6A1], NFD: [0x110B, 0x116D, 0x11B4], NFKC: [0xC6A1], NFKD: [0x110B, 0x116D, 0x11B4] }, +{ source: [0xC6A2], NFC: [0xC6A2], NFD: [0x110B, 0x116D, 0x11B5], NFKC: [0xC6A2], NFKD: [0x110B, 0x116D, 0x11B5] }, +{ source: [0xC6A3], NFC: [0xC6A3], NFD: [0x110B, 0x116D, 0x11B6], NFKC: [0xC6A3], NFKD: [0x110B, 0x116D, 0x11B6] }, +{ source: [0xC6A4], NFC: [0xC6A4], NFD: [0x110B, 0x116D, 0x11B7], NFKC: [0xC6A4], NFKD: [0x110B, 0x116D, 0x11B7] }, +{ source: [0xC6A5], NFC: [0xC6A5], NFD: [0x110B, 0x116D, 0x11B8], NFKC: [0xC6A5], NFKD: [0x110B, 0x116D, 0x11B8] }, +{ source: [0xC6A6], NFC: [0xC6A6], NFD: [0x110B, 0x116D, 0x11B9], NFKC: [0xC6A6], NFKD: [0x110B, 0x116D, 0x11B9] }, +{ source: [0xC6A7], NFC: [0xC6A7], NFD: [0x110B, 0x116D, 0x11BA], NFKC: [0xC6A7], NFKD: [0x110B, 0x116D, 0x11BA] }, +{ source: [0xC6A8], NFC: [0xC6A8], NFD: [0x110B, 0x116D, 0x11BB], NFKC: [0xC6A8], NFKD: [0x110B, 0x116D, 0x11BB] }, +{ source: [0xC6A9], NFC: [0xC6A9], NFD: [0x110B, 0x116D, 0x11BC], NFKC: [0xC6A9], NFKD: [0x110B, 0x116D, 0x11BC] }, +{ source: [0xC6AA], NFC: [0xC6AA], NFD: [0x110B, 0x116D, 0x11BD], NFKC: [0xC6AA], NFKD: [0x110B, 0x116D, 0x11BD] }, +{ source: [0xC6AB], NFC: [0xC6AB], NFD: [0x110B, 0x116D, 0x11BE], NFKC: [0xC6AB], NFKD: [0x110B, 0x116D, 0x11BE] }, +{ source: [0xC6AC], NFC: [0xC6AC], NFD: [0x110B, 0x116D, 0x11BF], NFKC: [0xC6AC], NFKD: [0x110B, 0x116D, 0x11BF] }, +{ source: [0xC6AD], NFC: [0xC6AD], NFD: [0x110B, 0x116D, 0x11C0], NFKC: [0xC6AD], NFKD: [0x110B, 0x116D, 0x11C0] }, +{ source: [0xC6AE], NFC: [0xC6AE], NFD: [0x110B, 0x116D, 0x11C1], NFKC: [0xC6AE], NFKD: [0x110B, 0x116D, 0x11C1] }, +{ source: [0xC6AF], NFC: [0xC6AF], NFD: [0x110B, 0x116D, 0x11C2], NFKC: [0xC6AF], NFKD: [0x110B, 0x116D, 0x11C2] }, +{ source: [0xC6B0], NFC: [0xC6B0], NFD: [0x110B, 0x116E], NFKC: [0xC6B0], NFKD: [0x110B, 0x116E] }, +{ source: [0xC6B1], NFC: [0xC6B1], NFD: [0x110B, 0x116E, 0x11A8], NFKC: [0xC6B1], NFKD: [0x110B, 0x116E, 0x11A8] }, +{ source: [0xC6B2], NFC: [0xC6B2], NFD: [0x110B, 0x116E, 0x11A9], NFKC: [0xC6B2], NFKD: [0x110B, 0x116E, 0x11A9] }, +{ source: [0xC6B3], NFC: [0xC6B3], NFD: [0x110B, 0x116E, 0x11AA], NFKC: [0xC6B3], NFKD: [0x110B, 0x116E, 0x11AA] }, +{ source: [0xC6B4], NFC: [0xC6B4], NFD: [0x110B, 0x116E, 0x11AB], NFKC: [0xC6B4], NFKD: [0x110B, 0x116E, 0x11AB] }, +{ source: [0xC6B5], NFC: [0xC6B5], NFD: [0x110B, 0x116E, 0x11AC], NFKC: [0xC6B5], NFKD: [0x110B, 0x116E, 0x11AC] }, +{ source: [0xC6B6], NFC: [0xC6B6], NFD: [0x110B, 0x116E, 0x11AD], NFKC: [0xC6B6], NFKD: [0x110B, 0x116E, 0x11AD] }, +{ source: [0xC6B7], NFC: [0xC6B7], NFD: [0x110B, 0x116E, 0x11AE], NFKC: [0xC6B7], NFKD: [0x110B, 0x116E, 0x11AE] }, +{ source: [0xC6B8], NFC: [0xC6B8], NFD: [0x110B, 0x116E, 0x11AF], NFKC: [0xC6B8], NFKD: [0x110B, 0x116E, 0x11AF] }, +{ source: [0xC6B9], NFC: [0xC6B9], NFD: [0x110B, 0x116E, 0x11B0], NFKC: [0xC6B9], NFKD: [0x110B, 0x116E, 0x11B0] }, +{ source: [0xC6BA], NFC: [0xC6BA], NFD: [0x110B, 0x116E, 0x11B1], NFKC: [0xC6BA], NFKD: [0x110B, 0x116E, 0x11B1] }, +{ source: [0xC6BB], NFC: [0xC6BB], NFD: [0x110B, 0x116E, 0x11B2], NFKC: [0xC6BB], NFKD: [0x110B, 0x116E, 0x11B2] }, +{ source: [0xC6BC], NFC: [0xC6BC], NFD: [0x110B, 0x116E, 0x11B3], NFKC: [0xC6BC], NFKD: [0x110B, 0x116E, 0x11B3] }, +{ source: [0xC6BD], NFC: [0xC6BD], NFD: [0x110B, 0x116E, 0x11B4], NFKC: [0xC6BD], NFKD: [0x110B, 0x116E, 0x11B4] }, +{ source: [0xC6BE], NFC: [0xC6BE], NFD: [0x110B, 0x116E, 0x11B5], NFKC: [0xC6BE], NFKD: [0x110B, 0x116E, 0x11B5] }, +{ source: [0xC6BF], NFC: [0xC6BF], NFD: [0x110B, 0x116E, 0x11B6], NFKC: [0xC6BF], NFKD: [0x110B, 0x116E, 0x11B6] }, +{ source: [0xC6C0], NFC: [0xC6C0], NFD: [0x110B, 0x116E, 0x11B7], NFKC: [0xC6C0], NFKD: [0x110B, 0x116E, 0x11B7] }, +{ source: [0xC6C1], NFC: [0xC6C1], NFD: [0x110B, 0x116E, 0x11B8], NFKC: [0xC6C1], NFKD: [0x110B, 0x116E, 0x11B8] }, +{ source: [0xC6C2], NFC: [0xC6C2], NFD: [0x110B, 0x116E, 0x11B9], NFKC: [0xC6C2], NFKD: [0x110B, 0x116E, 0x11B9] }, +{ source: [0xC6C3], NFC: [0xC6C3], NFD: [0x110B, 0x116E, 0x11BA], NFKC: [0xC6C3], NFKD: [0x110B, 0x116E, 0x11BA] }, +{ source: [0xC6C4], NFC: [0xC6C4], NFD: [0x110B, 0x116E, 0x11BB], NFKC: [0xC6C4], NFKD: [0x110B, 0x116E, 0x11BB] }, +{ source: [0xC6C5], NFC: [0xC6C5], NFD: [0x110B, 0x116E, 0x11BC], NFKC: [0xC6C5], NFKD: [0x110B, 0x116E, 0x11BC] }, +{ source: [0xC6C6], NFC: [0xC6C6], NFD: [0x110B, 0x116E, 0x11BD], NFKC: [0xC6C6], NFKD: [0x110B, 0x116E, 0x11BD] }, +{ source: [0xC6C7], NFC: [0xC6C7], NFD: [0x110B, 0x116E, 0x11BE], NFKC: [0xC6C7], NFKD: [0x110B, 0x116E, 0x11BE] }, +{ source: [0xC6C8], NFC: [0xC6C8], NFD: [0x110B, 0x116E, 0x11BF], NFKC: [0xC6C8], NFKD: [0x110B, 0x116E, 0x11BF] }, +{ source: [0xC6C9], NFC: [0xC6C9], NFD: [0x110B, 0x116E, 0x11C0], NFKC: [0xC6C9], NFKD: [0x110B, 0x116E, 0x11C0] }, +{ source: [0xC6CA], NFC: [0xC6CA], NFD: [0x110B, 0x116E, 0x11C1], NFKC: [0xC6CA], NFKD: [0x110B, 0x116E, 0x11C1] }, +{ source: [0xC6CB], NFC: [0xC6CB], NFD: [0x110B, 0x116E, 0x11C2], NFKC: [0xC6CB], NFKD: [0x110B, 0x116E, 0x11C2] }, +{ source: [0xC6CC], NFC: [0xC6CC], NFD: [0x110B, 0x116F], NFKC: [0xC6CC], NFKD: [0x110B, 0x116F] }, +{ source: [0xC6CD], NFC: [0xC6CD], NFD: [0x110B, 0x116F, 0x11A8], NFKC: [0xC6CD], NFKD: [0x110B, 0x116F, 0x11A8] }, +{ source: [0xC6CE], NFC: [0xC6CE], NFD: [0x110B, 0x116F, 0x11A9], NFKC: [0xC6CE], NFKD: [0x110B, 0x116F, 0x11A9] }, +{ source: [0xC6CF], NFC: [0xC6CF], NFD: [0x110B, 0x116F, 0x11AA], NFKC: [0xC6CF], NFKD: [0x110B, 0x116F, 0x11AA] }, +{ source: [0xC6D0], NFC: [0xC6D0], NFD: [0x110B, 0x116F, 0x11AB], NFKC: [0xC6D0], NFKD: [0x110B, 0x116F, 0x11AB] }, +{ source: [0xC6D1], NFC: [0xC6D1], NFD: [0x110B, 0x116F, 0x11AC], NFKC: [0xC6D1], NFKD: [0x110B, 0x116F, 0x11AC] }, +{ source: [0xC6D2], NFC: [0xC6D2], NFD: [0x110B, 0x116F, 0x11AD], NFKC: [0xC6D2], NFKD: [0x110B, 0x116F, 0x11AD] }, +{ source: [0xC6D3], NFC: [0xC6D3], NFD: [0x110B, 0x116F, 0x11AE], NFKC: [0xC6D3], NFKD: [0x110B, 0x116F, 0x11AE] }, +{ source: [0xC6D4], NFC: [0xC6D4], NFD: [0x110B, 0x116F, 0x11AF], NFKC: [0xC6D4], NFKD: [0x110B, 0x116F, 0x11AF] }, +{ source: [0xC6D5], NFC: [0xC6D5], NFD: [0x110B, 0x116F, 0x11B0], NFKC: [0xC6D5], NFKD: [0x110B, 0x116F, 0x11B0] }, +{ source: [0xC6D6], NFC: [0xC6D6], NFD: [0x110B, 0x116F, 0x11B1], NFKC: [0xC6D6], NFKD: [0x110B, 0x116F, 0x11B1] }, +{ source: [0xC6D7], NFC: [0xC6D7], NFD: [0x110B, 0x116F, 0x11B2], NFKC: [0xC6D7], NFKD: [0x110B, 0x116F, 0x11B2] }, +{ source: [0xC6D8], NFC: [0xC6D8], NFD: [0x110B, 0x116F, 0x11B3], NFKC: [0xC6D8], NFKD: [0x110B, 0x116F, 0x11B3] }, +{ source: [0xC6D9], NFC: [0xC6D9], NFD: [0x110B, 0x116F, 0x11B4], NFKC: [0xC6D9], NFKD: [0x110B, 0x116F, 0x11B4] }, +{ source: [0xC6DA], NFC: [0xC6DA], NFD: [0x110B, 0x116F, 0x11B5], NFKC: [0xC6DA], NFKD: [0x110B, 0x116F, 0x11B5] }, +{ source: [0xC6DB], NFC: [0xC6DB], NFD: [0x110B, 0x116F, 0x11B6], NFKC: [0xC6DB], NFKD: [0x110B, 0x116F, 0x11B6] }, +{ source: [0xC6DC], NFC: [0xC6DC], NFD: [0x110B, 0x116F, 0x11B7], NFKC: [0xC6DC], NFKD: [0x110B, 0x116F, 0x11B7] }, +{ source: [0xC6DD], NFC: [0xC6DD], NFD: [0x110B, 0x116F, 0x11B8], NFKC: [0xC6DD], NFKD: [0x110B, 0x116F, 0x11B8] }, +{ source: [0xC6DE], NFC: [0xC6DE], NFD: [0x110B, 0x116F, 0x11B9], NFKC: [0xC6DE], NFKD: [0x110B, 0x116F, 0x11B9] }, +{ source: [0xC6DF], NFC: [0xC6DF], NFD: [0x110B, 0x116F, 0x11BA], NFKC: [0xC6DF], NFKD: [0x110B, 0x116F, 0x11BA] }, +{ source: [0xC6E0], NFC: [0xC6E0], NFD: [0x110B, 0x116F, 0x11BB], NFKC: [0xC6E0], NFKD: [0x110B, 0x116F, 0x11BB] }, +{ source: [0xC6E1], NFC: [0xC6E1], NFD: [0x110B, 0x116F, 0x11BC], NFKC: [0xC6E1], NFKD: [0x110B, 0x116F, 0x11BC] }, +{ source: [0xC6E2], NFC: [0xC6E2], NFD: [0x110B, 0x116F, 0x11BD], NFKC: [0xC6E2], NFKD: [0x110B, 0x116F, 0x11BD] }, +{ source: [0xC6E3], NFC: [0xC6E3], NFD: [0x110B, 0x116F, 0x11BE], NFKC: [0xC6E3], NFKD: [0x110B, 0x116F, 0x11BE] }, +{ source: [0xC6E4], NFC: [0xC6E4], NFD: [0x110B, 0x116F, 0x11BF], NFKC: [0xC6E4], NFKD: [0x110B, 0x116F, 0x11BF] }, +{ source: [0xC6E5], NFC: [0xC6E5], NFD: [0x110B, 0x116F, 0x11C0], NFKC: [0xC6E5], NFKD: [0x110B, 0x116F, 0x11C0] }, +{ source: [0xC6E6], NFC: [0xC6E6], NFD: [0x110B, 0x116F, 0x11C1], NFKC: [0xC6E6], NFKD: [0x110B, 0x116F, 0x11C1] }, +{ source: [0xC6E7], NFC: [0xC6E7], NFD: [0x110B, 0x116F, 0x11C2], NFKC: [0xC6E7], NFKD: [0x110B, 0x116F, 0x11C2] }, +{ source: [0xC6E8], NFC: [0xC6E8], NFD: [0x110B, 0x1170], NFKC: [0xC6E8], NFKD: [0x110B, 0x1170] }, +{ source: [0xC6E9], NFC: [0xC6E9], NFD: [0x110B, 0x1170, 0x11A8], NFKC: [0xC6E9], NFKD: [0x110B, 0x1170, 0x11A8] }, +{ source: [0xC6EA], NFC: [0xC6EA], NFD: [0x110B, 0x1170, 0x11A9], NFKC: [0xC6EA], NFKD: [0x110B, 0x1170, 0x11A9] }, +{ source: [0xC6EB], NFC: [0xC6EB], NFD: [0x110B, 0x1170, 0x11AA], NFKC: [0xC6EB], NFKD: [0x110B, 0x1170, 0x11AA] }, +{ source: [0xC6EC], NFC: [0xC6EC], NFD: [0x110B, 0x1170, 0x11AB], NFKC: [0xC6EC], NFKD: [0x110B, 0x1170, 0x11AB] }, +{ source: [0xC6ED], NFC: [0xC6ED], NFD: [0x110B, 0x1170, 0x11AC], NFKC: [0xC6ED], NFKD: [0x110B, 0x1170, 0x11AC] }, +{ source: [0xC6EE], NFC: [0xC6EE], NFD: [0x110B, 0x1170, 0x11AD], NFKC: [0xC6EE], NFKD: [0x110B, 0x1170, 0x11AD] }, +{ source: [0xC6EF], NFC: [0xC6EF], NFD: [0x110B, 0x1170, 0x11AE], NFKC: [0xC6EF], NFKD: [0x110B, 0x1170, 0x11AE] }, +{ source: [0xC6F0], NFC: [0xC6F0], NFD: [0x110B, 0x1170, 0x11AF], NFKC: [0xC6F0], NFKD: [0x110B, 0x1170, 0x11AF] }, +{ source: [0xC6F1], NFC: [0xC6F1], NFD: [0x110B, 0x1170, 0x11B0], NFKC: [0xC6F1], NFKD: [0x110B, 0x1170, 0x11B0] }, +{ source: [0xC6F2], NFC: [0xC6F2], NFD: [0x110B, 0x1170, 0x11B1], NFKC: [0xC6F2], NFKD: [0x110B, 0x1170, 0x11B1] }, +{ source: [0xC6F3], NFC: [0xC6F3], NFD: [0x110B, 0x1170, 0x11B2], NFKC: [0xC6F3], NFKD: [0x110B, 0x1170, 0x11B2] }, +{ source: [0xC6F4], NFC: [0xC6F4], NFD: [0x110B, 0x1170, 0x11B3], NFKC: [0xC6F4], NFKD: [0x110B, 0x1170, 0x11B3] }, +{ source: [0xC6F5], NFC: [0xC6F5], NFD: [0x110B, 0x1170, 0x11B4], NFKC: [0xC6F5], NFKD: [0x110B, 0x1170, 0x11B4] }, +{ source: [0xC6F6], NFC: [0xC6F6], NFD: [0x110B, 0x1170, 0x11B5], NFKC: [0xC6F6], NFKD: [0x110B, 0x1170, 0x11B5] }, +{ source: [0xC6F7], NFC: [0xC6F7], NFD: [0x110B, 0x1170, 0x11B6], NFKC: [0xC6F7], NFKD: [0x110B, 0x1170, 0x11B6] }, +{ source: [0xC6F8], NFC: [0xC6F8], NFD: [0x110B, 0x1170, 0x11B7], NFKC: [0xC6F8], NFKD: [0x110B, 0x1170, 0x11B7] }, +{ source: [0xC6F9], NFC: [0xC6F9], NFD: [0x110B, 0x1170, 0x11B8], NFKC: [0xC6F9], NFKD: [0x110B, 0x1170, 0x11B8] }, +{ source: [0xC6FA], NFC: [0xC6FA], NFD: [0x110B, 0x1170, 0x11B9], NFKC: [0xC6FA], NFKD: [0x110B, 0x1170, 0x11B9] }, +{ source: [0xC6FB], NFC: [0xC6FB], NFD: [0x110B, 0x1170, 0x11BA], NFKC: [0xC6FB], NFKD: [0x110B, 0x1170, 0x11BA] }, +{ source: [0xC6FC], NFC: [0xC6FC], NFD: [0x110B, 0x1170, 0x11BB], NFKC: [0xC6FC], NFKD: [0x110B, 0x1170, 0x11BB] }, +{ source: [0xC6FD], NFC: [0xC6FD], NFD: [0x110B, 0x1170, 0x11BC], NFKC: [0xC6FD], NFKD: [0x110B, 0x1170, 0x11BC] }, +{ source: [0xC6FE], NFC: [0xC6FE], NFD: [0x110B, 0x1170, 0x11BD], NFKC: [0xC6FE], NFKD: [0x110B, 0x1170, 0x11BD] }, +{ source: [0xC6FF], NFC: [0xC6FF], NFD: [0x110B, 0x1170, 0x11BE], NFKC: [0xC6FF], NFKD: [0x110B, 0x1170, 0x11BE] }, +{ source: [0xC700], NFC: [0xC700], NFD: [0x110B, 0x1170, 0x11BF], NFKC: [0xC700], NFKD: [0x110B, 0x1170, 0x11BF] }, +{ source: [0xC701], NFC: [0xC701], NFD: [0x110B, 0x1170, 0x11C0], NFKC: [0xC701], NFKD: [0x110B, 0x1170, 0x11C0] }, +{ source: [0xC702], NFC: [0xC702], NFD: [0x110B, 0x1170, 0x11C1], NFKC: [0xC702], NFKD: [0x110B, 0x1170, 0x11C1] }, +{ source: [0xC703], NFC: [0xC703], NFD: [0x110B, 0x1170, 0x11C2], NFKC: [0xC703], NFKD: [0x110B, 0x1170, 0x11C2] }, +{ source: [0xC704], NFC: [0xC704], NFD: [0x110B, 0x1171], NFKC: [0xC704], NFKD: [0x110B, 0x1171] }, +{ source: [0xC705], NFC: [0xC705], NFD: [0x110B, 0x1171, 0x11A8], NFKC: [0xC705], NFKD: [0x110B, 0x1171, 0x11A8] }, +{ source: [0xC706], NFC: [0xC706], NFD: [0x110B, 0x1171, 0x11A9], NFKC: [0xC706], NFKD: [0x110B, 0x1171, 0x11A9] }, +{ source: [0xC707], NFC: [0xC707], NFD: [0x110B, 0x1171, 0x11AA], NFKC: [0xC707], NFKD: [0x110B, 0x1171, 0x11AA] }, +{ source: [0xC708], NFC: [0xC708], NFD: [0x110B, 0x1171, 0x11AB], NFKC: [0xC708], NFKD: [0x110B, 0x1171, 0x11AB] }, +{ source: [0xC709], NFC: [0xC709], NFD: [0x110B, 0x1171, 0x11AC], NFKC: [0xC709], NFKD: [0x110B, 0x1171, 0x11AC] }, +{ source: [0xC70A], NFC: [0xC70A], NFD: [0x110B, 0x1171, 0x11AD], NFKC: [0xC70A], NFKD: [0x110B, 0x1171, 0x11AD] }, +{ source: [0xC70B], NFC: [0xC70B], NFD: [0x110B, 0x1171, 0x11AE], NFKC: [0xC70B], NFKD: [0x110B, 0x1171, 0x11AE] }, +{ source: [0xC70C], NFC: [0xC70C], NFD: [0x110B, 0x1171, 0x11AF], NFKC: [0xC70C], NFKD: [0x110B, 0x1171, 0x11AF] }, +{ source: [0xC70D], NFC: [0xC70D], NFD: [0x110B, 0x1171, 0x11B0], NFKC: [0xC70D], NFKD: [0x110B, 0x1171, 0x11B0] }, +{ source: [0xC70E], NFC: [0xC70E], NFD: [0x110B, 0x1171, 0x11B1], NFKC: [0xC70E], NFKD: [0x110B, 0x1171, 0x11B1] }, +{ source: [0xC70F], NFC: [0xC70F], NFD: [0x110B, 0x1171, 0x11B2], NFKC: [0xC70F], NFKD: [0x110B, 0x1171, 0x11B2] }, +{ source: [0xC710], NFC: [0xC710], NFD: [0x110B, 0x1171, 0x11B3], NFKC: [0xC710], NFKD: [0x110B, 0x1171, 0x11B3] }, +{ source: [0xC711], NFC: [0xC711], NFD: [0x110B, 0x1171, 0x11B4], NFKC: [0xC711], NFKD: [0x110B, 0x1171, 0x11B4] }, +{ source: [0xC712], NFC: [0xC712], NFD: [0x110B, 0x1171, 0x11B5], NFKC: [0xC712], NFKD: [0x110B, 0x1171, 0x11B5] }, +{ source: [0xC713], NFC: [0xC713], NFD: [0x110B, 0x1171, 0x11B6], NFKC: [0xC713], NFKD: [0x110B, 0x1171, 0x11B6] }, +{ source: [0xC714], NFC: [0xC714], NFD: [0x110B, 0x1171, 0x11B7], NFKC: [0xC714], NFKD: [0x110B, 0x1171, 0x11B7] }, +{ source: [0xC715], NFC: [0xC715], NFD: [0x110B, 0x1171, 0x11B8], NFKC: [0xC715], NFKD: [0x110B, 0x1171, 0x11B8] }, +{ source: [0xC716], NFC: [0xC716], NFD: [0x110B, 0x1171, 0x11B9], NFKC: [0xC716], NFKD: [0x110B, 0x1171, 0x11B9] }, +{ source: [0xC717], NFC: [0xC717], NFD: [0x110B, 0x1171, 0x11BA], NFKC: [0xC717], NFKD: [0x110B, 0x1171, 0x11BA] }, +{ source: [0xC718], NFC: [0xC718], NFD: [0x110B, 0x1171, 0x11BB], NFKC: [0xC718], NFKD: [0x110B, 0x1171, 0x11BB] }, +{ source: [0xC719], NFC: [0xC719], NFD: [0x110B, 0x1171, 0x11BC], NFKC: [0xC719], NFKD: [0x110B, 0x1171, 0x11BC] }, +{ source: [0xC71A], NFC: [0xC71A], NFD: [0x110B, 0x1171, 0x11BD], NFKC: [0xC71A], NFKD: [0x110B, 0x1171, 0x11BD] }, +{ source: [0xC71B], NFC: [0xC71B], NFD: [0x110B, 0x1171, 0x11BE], NFKC: [0xC71B], NFKD: [0x110B, 0x1171, 0x11BE] }, +{ source: [0xC71C], NFC: [0xC71C], NFD: [0x110B, 0x1171, 0x11BF], NFKC: [0xC71C], NFKD: [0x110B, 0x1171, 0x11BF] }, +{ source: [0xC71D], NFC: [0xC71D], NFD: [0x110B, 0x1171, 0x11C0], NFKC: [0xC71D], NFKD: [0x110B, 0x1171, 0x11C0] }, +{ source: [0xC71E], NFC: [0xC71E], NFD: [0x110B, 0x1171, 0x11C1], NFKC: [0xC71E], NFKD: [0x110B, 0x1171, 0x11C1] }, +{ source: [0xC71F], NFC: [0xC71F], NFD: [0x110B, 0x1171, 0x11C2], NFKC: [0xC71F], NFKD: [0x110B, 0x1171, 0x11C2] }, +{ source: [0xC720], NFC: [0xC720], NFD: [0x110B, 0x1172], NFKC: [0xC720], NFKD: [0x110B, 0x1172] }, +{ source: [0xC721], NFC: [0xC721], NFD: [0x110B, 0x1172, 0x11A8], NFKC: [0xC721], NFKD: [0x110B, 0x1172, 0x11A8] }, +{ source: [0xC722], NFC: [0xC722], NFD: [0x110B, 0x1172, 0x11A9], NFKC: [0xC722], NFKD: [0x110B, 0x1172, 0x11A9] }, +{ source: [0xC723], NFC: [0xC723], NFD: [0x110B, 0x1172, 0x11AA], NFKC: [0xC723], NFKD: [0x110B, 0x1172, 0x11AA] }, +{ source: [0xC724], NFC: [0xC724], NFD: [0x110B, 0x1172, 0x11AB], NFKC: [0xC724], NFKD: [0x110B, 0x1172, 0x11AB] }, +{ source: [0xC725], NFC: [0xC725], NFD: [0x110B, 0x1172, 0x11AC], NFKC: [0xC725], NFKD: [0x110B, 0x1172, 0x11AC] }, +{ source: [0xC726], NFC: [0xC726], NFD: [0x110B, 0x1172, 0x11AD], NFKC: [0xC726], NFKD: [0x110B, 0x1172, 0x11AD] }, +{ source: [0xC727], NFC: [0xC727], NFD: [0x110B, 0x1172, 0x11AE], NFKC: [0xC727], NFKD: [0x110B, 0x1172, 0x11AE] }, +{ source: [0xC728], NFC: [0xC728], NFD: [0x110B, 0x1172, 0x11AF], NFKC: [0xC728], NFKD: [0x110B, 0x1172, 0x11AF] }, +{ source: [0xC729], NFC: [0xC729], NFD: [0x110B, 0x1172, 0x11B0], NFKC: [0xC729], NFKD: [0x110B, 0x1172, 0x11B0] }, +{ source: [0xC72A], NFC: [0xC72A], NFD: [0x110B, 0x1172, 0x11B1], NFKC: [0xC72A], NFKD: [0x110B, 0x1172, 0x11B1] }, +{ source: [0xC72B], NFC: [0xC72B], NFD: [0x110B, 0x1172, 0x11B2], NFKC: [0xC72B], NFKD: [0x110B, 0x1172, 0x11B2] }, +{ source: [0xC72C], NFC: [0xC72C], NFD: [0x110B, 0x1172, 0x11B3], NFKC: [0xC72C], NFKD: [0x110B, 0x1172, 0x11B3] }, +{ source: [0xC72D], NFC: [0xC72D], NFD: [0x110B, 0x1172, 0x11B4], NFKC: [0xC72D], NFKD: [0x110B, 0x1172, 0x11B4] }, +{ source: [0xC72E], NFC: [0xC72E], NFD: [0x110B, 0x1172, 0x11B5], NFKC: [0xC72E], NFKD: [0x110B, 0x1172, 0x11B5] }, +{ source: [0xC72F], NFC: [0xC72F], NFD: [0x110B, 0x1172, 0x11B6], NFKC: [0xC72F], NFKD: [0x110B, 0x1172, 0x11B6] }, +{ source: [0xC730], NFC: [0xC730], NFD: [0x110B, 0x1172, 0x11B7], NFKC: [0xC730], NFKD: [0x110B, 0x1172, 0x11B7] }, +{ source: [0xC731], NFC: [0xC731], NFD: [0x110B, 0x1172, 0x11B8], NFKC: [0xC731], NFKD: [0x110B, 0x1172, 0x11B8] }, +{ source: [0xC732], NFC: [0xC732], NFD: [0x110B, 0x1172, 0x11B9], NFKC: [0xC732], NFKD: [0x110B, 0x1172, 0x11B9] }, +{ source: [0xC733], NFC: [0xC733], NFD: [0x110B, 0x1172, 0x11BA], NFKC: [0xC733], NFKD: [0x110B, 0x1172, 0x11BA] }, +{ source: [0xC734], NFC: [0xC734], NFD: [0x110B, 0x1172, 0x11BB], NFKC: [0xC734], NFKD: [0x110B, 0x1172, 0x11BB] }, +{ source: [0xC735], NFC: [0xC735], NFD: [0x110B, 0x1172, 0x11BC], NFKC: [0xC735], NFKD: [0x110B, 0x1172, 0x11BC] }, +{ source: [0xC736], NFC: [0xC736], NFD: [0x110B, 0x1172, 0x11BD], NFKC: [0xC736], NFKD: [0x110B, 0x1172, 0x11BD] }, +{ source: [0xC737], NFC: [0xC737], NFD: [0x110B, 0x1172, 0x11BE], NFKC: [0xC737], NFKD: [0x110B, 0x1172, 0x11BE] }, +{ source: [0xC738], NFC: [0xC738], NFD: [0x110B, 0x1172, 0x11BF], NFKC: [0xC738], NFKD: [0x110B, 0x1172, 0x11BF] }, +{ source: [0xC739], NFC: [0xC739], NFD: [0x110B, 0x1172, 0x11C0], NFKC: [0xC739], NFKD: [0x110B, 0x1172, 0x11C0] }, +{ source: [0xC73A], NFC: [0xC73A], NFD: [0x110B, 0x1172, 0x11C1], NFKC: [0xC73A], NFKD: [0x110B, 0x1172, 0x11C1] }, +{ source: [0xC73B], NFC: [0xC73B], NFD: [0x110B, 0x1172, 0x11C2], NFKC: [0xC73B], NFKD: [0x110B, 0x1172, 0x11C2] }, +{ source: [0xC73C], NFC: [0xC73C], NFD: [0x110B, 0x1173], NFKC: [0xC73C], NFKD: [0x110B, 0x1173] }, +{ source: [0xC73D], NFC: [0xC73D], NFD: [0x110B, 0x1173, 0x11A8], NFKC: [0xC73D], NFKD: [0x110B, 0x1173, 0x11A8] }, +{ source: [0xC73E], NFC: [0xC73E], NFD: [0x110B, 0x1173, 0x11A9], NFKC: [0xC73E], NFKD: [0x110B, 0x1173, 0x11A9] }, +{ source: [0xC73F], NFC: [0xC73F], NFD: [0x110B, 0x1173, 0x11AA], NFKC: [0xC73F], NFKD: [0x110B, 0x1173, 0x11AA] }, +{ source: [0xC740], NFC: [0xC740], NFD: [0x110B, 0x1173, 0x11AB], NFKC: [0xC740], NFKD: [0x110B, 0x1173, 0x11AB] }, +{ source: [0xC741], NFC: [0xC741], NFD: [0x110B, 0x1173, 0x11AC], NFKC: [0xC741], NFKD: [0x110B, 0x1173, 0x11AC] }, +{ source: [0xC742], NFC: [0xC742], NFD: [0x110B, 0x1173, 0x11AD], NFKC: [0xC742], NFKD: [0x110B, 0x1173, 0x11AD] }, +{ source: [0xC743], NFC: [0xC743], NFD: [0x110B, 0x1173, 0x11AE], NFKC: [0xC743], NFKD: [0x110B, 0x1173, 0x11AE] }, +{ source: [0xC744], NFC: [0xC744], NFD: [0x110B, 0x1173, 0x11AF], NFKC: [0xC744], NFKD: [0x110B, 0x1173, 0x11AF] }, +{ source: [0xC745], NFC: [0xC745], NFD: [0x110B, 0x1173, 0x11B0], NFKC: [0xC745], NFKD: [0x110B, 0x1173, 0x11B0] }, +{ source: [0xC746], NFC: [0xC746], NFD: [0x110B, 0x1173, 0x11B1], NFKC: [0xC746], NFKD: [0x110B, 0x1173, 0x11B1] }, +{ source: [0xC747], NFC: [0xC747], NFD: [0x110B, 0x1173, 0x11B2], NFKC: [0xC747], NFKD: [0x110B, 0x1173, 0x11B2] }, +{ source: [0xC748], NFC: [0xC748], NFD: [0x110B, 0x1173, 0x11B3], NFKC: [0xC748], NFKD: [0x110B, 0x1173, 0x11B3] }, +{ source: [0xC749], NFC: [0xC749], NFD: [0x110B, 0x1173, 0x11B4], NFKC: [0xC749], NFKD: [0x110B, 0x1173, 0x11B4] }, +{ source: [0xC74A], NFC: [0xC74A], NFD: [0x110B, 0x1173, 0x11B5], NFKC: [0xC74A], NFKD: [0x110B, 0x1173, 0x11B5] }, +{ source: [0xC74B], NFC: [0xC74B], NFD: [0x110B, 0x1173, 0x11B6], NFKC: [0xC74B], NFKD: [0x110B, 0x1173, 0x11B6] }, +{ source: [0xC74C], NFC: [0xC74C], NFD: [0x110B, 0x1173, 0x11B7], NFKC: [0xC74C], NFKD: [0x110B, 0x1173, 0x11B7] }, +{ source: [0xC74D], NFC: [0xC74D], NFD: [0x110B, 0x1173, 0x11B8], NFKC: [0xC74D], NFKD: [0x110B, 0x1173, 0x11B8] }, +{ source: [0xC74E], NFC: [0xC74E], NFD: [0x110B, 0x1173, 0x11B9], NFKC: [0xC74E], NFKD: [0x110B, 0x1173, 0x11B9] }, +{ source: [0xC74F], NFC: [0xC74F], NFD: [0x110B, 0x1173, 0x11BA], NFKC: [0xC74F], NFKD: [0x110B, 0x1173, 0x11BA] }, +{ source: [0xC750], NFC: [0xC750], NFD: [0x110B, 0x1173, 0x11BB], NFKC: [0xC750], NFKD: [0x110B, 0x1173, 0x11BB] }, +{ source: [0xC751], NFC: [0xC751], NFD: [0x110B, 0x1173, 0x11BC], NFKC: [0xC751], NFKD: [0x110B, 0x1173, 0x11BC] }, +{ source: [0xC752], NFC: [0xC752], NFD: [0x110B, 0x1173, 0x11BD], NFKC: [0xC752], NFKD: [0x110B, 0x1173, 0x11BD] }, +{ source: [0xC753], NFC: [0xC753], NFD: [0x110B, 0x1173, 0x11BE], NFKC: [0xC753], NFKD: [0x110B, 0x1173, 0x11BE] }, +{ source: [0xC754], NFC: [0xC754], NFD: [0x110B, 0x1173, 0x11BF], NFKC: [0xC754], NFKD: [0x110B, 0x1173, 0x11BF] }, +{ source: [0xC755], NFC: [0xC755], NFD: [0x110B, 0x1173, 0x11C0], NFKC: [0xC755], NFKD: [0x110B, 0x1173, 0x11C0] }, +{ source: [0xC756], NFC: [0xC756], NFD: [0x110B, 0x1173, 0x11C1], NFKC: [0xC756], NFKD: [0x110B, 0x1173, 0x11C1] }, +{ source: [0xC757], NFC: [0xC757], NFD: [0x110B, 0x1173, 0x11C2], NFKC: [0xC757], NFKD: [0x110B, 0x1173, 0x11C2] }, +{ source: [0xC758], NFC: [0xC758], NFD: [0x110B, 0x1174], NFKC: [0xC758], NFKD: [0x110B, 0x1174] }, +{ source: [0xC759], NFC: [0xC759], NFD: [0x110B, 0x1174, 0x11A8], NFKC: [0xC759], NFKD: [0x110B, 0x1174, 0x11A8] }, +{ source: [0xC75A], NFC: [0xC75A], NFD: [0x110B, 0x1174, 0x11A9], NFKC: [0xC75A], NFKD: [0x110B, 0x1174, 0x11A9] }, +{ source: [0xC75B], NFC: [0xC75B], NFD: [0x110B, 0x1174, 0x11AA], NFKC: [0xC75B], NFKD: [0x110B, 0x1174, 0x11AA] }, +{ source: [0xC75C], NFC: [0xC75C], NFD: [0x110B, 0x1174, 0x11AB], NFKC: [0xC75C], NFKD: [0x110B, 0x1174, 0x11AB] }, +{ source: [0xC75D], NFC: [0xC75D], NFD: [0x110B, 0x1174, 0x11AC], NFKC: [0xC75D], NFKD: [0x110B, 0x1174, 0x11AC] }, +{ source: [0xC75E], NFC: [0xC75E], NFD: [0x110B, 0x1174, 0x11AD], NFKC: [0xC75E], NFKD: [0x110B, 0x1174, 0x11AD] }, +{ source: [0xC75F], NFC: [0xC75F], NFD: [0x110B, 0x1174, 0x11AE], NFKC: [0xC75F], NFKD: [0x110B, 0x1174, 0x11AE] }, +{ source: [0xC760], NFC: [0xC760], NFD: [0x110B, 0x1174, 0x11AF], NFKC: [0xC760], NFKD: [0x110B, 0x1174, 0x11AF] }, +{ source: [0xC761], NFC: [0xC761], NFD: [0x110B, 0x1174, 0x11B0], NFKC: [0xC761], NFKD: [0x110B, 0x1174, 0x11B0] }, +{ source: [0xC762], NFC: [0xC762], NFD: [0x110B, 0x1174, 0x11B1], NFKC: [0xC762], NFKD: [0x110B, 0x1174, 0x11B1] }, +{ source: [0xC763], NFC: [0xC763], NFD: [0x110B, 0x1174, 0x11B2], NFKC: [0xC763], NFKD: [0x110B, 0x1174, 0x11B2] }, +{ source: [0xC764], NFC: [0xC764], NFD: [0x110B, 0x1174, 0x11B3], NFKC: [0xC764], NFKD: [0x110B, 0x1174, 0x11B3] }, +{ source: [0xC765], NFC: [0xC765], NFD: [0x110B, 0x1174, 0x11B4], NFKC: [0xC765], NFKD: [0x110B, 0x1174, 0x11B4] }, +{ source: [0xC766], NFC: [0xC766], NFD: [0x110B, 0x1174, 0x11B5], NFKC: [0xC766], NFKD: [0x110B, 0x1174, 0x11B5] }, +{ source: [0xC767], NFC: [0xC767], NFD: [0x110B, 0x1174, 0x11B6], NFKC: [0xC767], NFKD: [0x110B, 0x1174, 0x11B6] }, +{ source: [0xC768], NFC: [0xC768], NFD: [0x110B, 0x1174, 0x11B7], NFKC: [0xC768], NFKD: [0x110B, 0x1174, 0x11B7] }, +{ source: [0xC769], NFC: [0xC769], NFD: [0x110B, 0x1174, 0x11B8], NFKC: [0xC769], NFKD: [0x110B, 0x1174, 0x11B8] }, +{ source: [0xC76A], NFC: [0xC76A], NFD: [0x110B, 0x1174, 0x11B9], NFKC: [0xC76A], NFKD: [0x110B, 0x1174, 0x11B9] }, +{ source: [0xC76B], NFC: [0xC76B], NFD: [0x110B, 0x1174, 0x11BA], NFKC: [0xC76B], NFKD: [0x110B, 0x1174, 0x11BA] }, +{ source: [0xC76C], NFC: [0xC76C], NFD: [0x110B, 0x1174, 0x11BB], NFKC: [0xC76C], NFKD: [0x110B, 0x1174, 0x11BB] }, +{ source: [0xC76D], NFC: [0xC76D], NFD: [0x110B, 0x1174, 0x11BC], NFKC: [0xC76D], NFKD: [0x110B, 0x1174, 0x11BC] }, +{ source: [0xC76E], NFC: [0xC76E], NFD: [0x110B, 0x1174, 0x11BD], NFKC: [0xC76E], NFKD: [0x110B, 0x1174, 0x11BD] }, +{ source: [0xC76F], NFC: [0xC76F], NFD: [0x110B, 0x1174, 0x11BE], NFKC: [0xC76F], NFKD: [0x110B, 0x1174, 0x11BE] }, +{ source: [0xC770], NFC: [0xC770], NFD: [0x110B, 0x1174, 0x11BF], NFKC: [0xC770], NFKD: [0x110B, 0x1174, 0x11BF] }, +{ source: [0xC771], NFC: [0xC771], NFD: [0x110B, 0x1174, 0x11C0], NFKC: [0xC771], NFKD: [0x110B, 0x1174, 0x11C0] }, +{ source: [0xC772], NFC: [0xC772], NFD: [0x110B, 0x1174, 0x11C1], NFKC: [0xC772], NFKD: [0x110B, 0x1174, 0x11C1] }, +{ source: [0xC773], NFC: [0xC773], NFD: [0x110B, 0x1174, 0x11C2], NFKC: [0xC773], NFKD: [0x110B, 0x1174, 0x11C2] }, +{ source: [0xC774], NFC: [0xC774], NFD: [0x110B, 0x1175], NFKC: [0xC774], NFKD: [0x110B, 0x1175] }, +{ source: [0xC775], NFC: [0xC775], NFD: [0x110B, 0x1175, 0x11A8], NFKC: [0xC775], NFKD: [0x110B, 0x1175, 0x11A8] }, +{ source: [0xC776], NFC: [0xC776], NFD: [0x110B, 0x1175, 0x11A9], NFKC: [0xC776], NFKD: [0x110B, 0x1175, 0x11A9] }, +{ source: [0xC777], NFC: [0xC777], NFD: [0x110B, 0x1175, 0x11AA], NFKC: [0xC777], NFKD: [0x110B, 0x1175, 0x11AA] }, +{ source: [0xC778], NFC: [0xC778], NFD: [0x110B, 0x1175, 0x11AB], NFKC: [0xC778], NFKD: [0x110B, 0x1175, 0x11AB] }, +{ source: [0xC779], NFC: [0xC779], NFD: [0x110B, 0x1175, 0x11AC], NFKC: [0xC779], NFKD: [0x110B, 0x1175, 0x11AC] }, +{ source: [0xC77A], NFC: [0xC77A], NFD: [0x110B, 0x1175, 0x11AD], NFKC: [0xC77A], NFKD: [0x110B, 0x1175, 0x11AD] }, +{ source: [0xC77B], NFC: [0xC77B], NFD: [0x110B, 0x1175, 0x11AE], NFKC: [0xC77B], NFKD: [0x110B, 0x1175, 0x11AE] }, +{ source: [0xC77C], NFC: [0xC77C], NFD: [0x110B, 0x1175, 0x11AF], NFKC: [0xC77C], NFKD: [0x110B, 0x1175, 0x11AF] }, +{ source: [0xC77D], NFC: [0xC77D], NFD: [0x110B, 0x1175, 0x11B0], NFKC: [0xC77D], NFKD: [0x110B, 0x1175, 0x11B0] }, +{ source: [0xC77E], NFC: [0xC77E], NFD: [0x110B, 0x1175, 0x11B1], NFKC: [0xC77E], NFKD: [0x110B, 0x1175, 0x11B1] }, +{ source: [0xC77F], NFC: [0xC77F], NFD: [0x110B, 0x1175, 0x11B2], NFKC: [0xC77F], NFKD: [0x110B, 0x1175, 0x11B2] }, +{ source: [0xC780], NFC: [0xC780], NFD: [0x110B, 0x1175, 0x11B3], NFKC: [0xC780], NFKD: [0x110B, 0x1175, 0x11B3] }, +{ source: [0xC781], NFC: [0xC781], NFD: [0x110B, 0x1175, 0x11B4], NFKC: [0xC781], NFKD: [0x110B, 0x1175, 0x11B4] }, +{ source: [0xC782], NFC: [0xC782], NFD: [0x110B, 0x1175, 0x11B5], NFKC: [0xC782], NFKD: [0x110B, 0x1175, 0x11B5] }, +{ source: [0xC783], NFC: [0xC783], NFD: [0x110B, 0x1175, 0x11B6], NFKC: [0xC783], NFKD: [0x110B, 0x1175, 0x11B6] }, +{ source: [0xC784], NFC: [0xC784], NFD: [0x110B, 0x1175, 0x11B7], NFKC: [0xC784], NFKD: [0x110B, 0x1175, 0x11B7] }, +{ source: [0xC785], NFC: [0xC785], NFD: [0x110B, 0x1175, 0x11B8], NFKC: [0xC785], NFKD: [0x110B, 0x1175, 0x11B8] }, +{ source: [0xC786], NFC: [0xC786], NFD: [0x110B, 0x1175, 0x11B9], NFKC: [0xC786], NFKD: [0x110B, 0x1175, 0x11B9] }, +{ source: [0xC787], NFC: [0xC787], NFD: [0x110B, 0x1175, 0x11BA], NFKC: [0xC787], NFKD: [0x110B, 0x1175, 0x11BA] }, +{ source: [0xC788], NFC: [0xC788], NFD: [0x110B, 0x1175, 0x11BB], NFKC: [0xC788], NFKD: [0x110B, 0x1175, 0x11BB] }, +{ source: [0xC789], NFC: [0xC789], NFD: [0x110B, 0x1175, 0x11BC], NFKC: [0xC789], NFKD: [0x110B, 0x1175, 0x11BC] }, +{ source: [0xC78A], NFC: [0xC78A], NFD: [0x110B, 0x1175, 0x11BD], NFKC: [0xC78A], NFKD: [0x110B, 0x1175, 0x11BD] }, +{ source: [0xC78B], NFC: [0xC78B], NFD: [0x110B, 0x1175, 0x11BE], NFKC: [0xC78B], NFKD: [0x110B, 0x1175, 0x11BE] }, +{ source: [0xC78C], NFC: [0xC78C], NFD: [0x110B, 0x1175, 0x11BF], NFKC: [0xC78C], NFKD: [0x110B, 0x1175, 0x11BF] }, +{ source: [0xC78D], NFC: [0xC78D], NFD: [0x110B, 0x1175, 0x11C0], NFKC: [0xC78D], NFKD: [0x110B, 0x1175, 0x11C0] }, +{ source: [0xC78E], NFC: [0xC78E], NFD: [0x110B, 0x1175, 0x11C1], NFKC: [0xC78E], NFKD: [0x110B, 0x1175, 0x11C1] }, +{ source: [0xC78F], NFC: [0xC78F], NFD: [0x110B, 0x1175, 0x11C2], NFKC: [0xC78F], NFKD: [0x110B, 0x1175, 0x11C2] }, +{ source: [0xC790], NFC: [0xC790], NFD: [0x110C, 0x1161], NFKC: [0xC790], NFKD: [0x110C, 0x1161] }, +{ source: [0xC791], NFC: [0xC791], NFD: [0x110C, 0x1161, 0x11A8], NFKC: [0xC791], NFKD: [0x110C, 0x1161, 0x11A8] }, +{ source: [0xC792], NFC: [0xC792], NFD: [0x110C, 0x1161, 0x11A9], NFKC: [0xC792], NFKD: [0x110C, 0x1161, 0x11A9] }, +{ source: [0xC793], NFC: [0xC793], NFD: [0x110C, 0x1161, 0x11AA], NFKC: [0xC793], NFKD: [0x110C, 0x1161, 0x11AA] }, +{ source: [0xC794], NFC: [0xC794], NFD: [0x110C, 0x1161, 0x11AB], NFKC: [0xC794], NFKD: [0x110C, 0x1161, 0x11AB] }, +{ source: [0xC795], NFC: [0xC795], NFD: [0x110C, 0x1161, 0x11AC], NFKC: [0xC795], NFKD: [0x110C, 0x1161, 0x11AC] }, +{ source: [0xC796], NFC: [0xC796], NFD: [0x110C, 0x1161, 0x11AD], NFKC: [0xC796], NFKD: [0x110C, 0x1161, 0x11AD] }, +{ source: [0xC797], NFC: [0xC797], NFD: [0x110C, 0x1161, 0x11AE], NFKC: [0xC797], NFKD: [0x110C, 0x1161, 0x11AE] }, +{ source: [0xC798], NFC: [0xC798], NFD: [0x110C, 0x1161, 0x11AF], NFKC: [0xC798], NFKD: [0x110C, 0x1161, 0x11AF] }, +{ source: [0xC799], NFC: [0xC799], NFD: [0x110C, 0x1161, 0x11B0], NFKC: [0xC799], NFKD: [0x110C, 0x1161, 0x11B0] }, +{ source: [0xC79A], NFC: [0xC79A], NFD: [0x110C, 0x1161, 0x11B1], NFKC: [0xC79A], NFKD: [0x110C, 0x1161, 0x11B1] }, +{ source: [0xC79B], NFC: [0xC79B], NFD: [0x110C, 0x1161, 0x11B2], NFKC: [0xC79B], NFKD: [0x110C, 0x1161, 0x11B2] }, +{ source: [0xC79C], NFC: [0xC79C], NFD: [0x110C, 0x1161, 0x11B3], NFKC: [0xC79C], NFKD: [0x110C, 0x1161, 0x11B3] }, +{ source: [0xC79D], NFC: [0xC79D], NFD: [0x110C, 0x1161, 0x11B4], NFKC: [0xC79D], NFKD: [0x110C, 0x1161, 0x11B4] }, +{ source: [0xC79E], NFC: [0xC79E], NFD: [0x110C, 0x1161, 0x11B5], NFKC: [0xC79E], NFKD: [0x110C, 0x1161, 0x11B5] }, +{ source: [0xC79F], NFC: [0xC79F], NFD: [0x110C, 0x1161, 0x11B6], NFKC: [0xC79F], NFKD: [0x110C, 0x1161, 0x11B6] }, +{ source: [0xC7A0], NFC: [0xC7A0], NFD: [0x110C, 0x1161, 0x11B7], NFKC: [0xC7A0], NFKD: [0x110C, 0x1161, 0x11B7] }, +{ source: [0xC7A1], NFC: [0xC7A1], NFD: [0x110C, 0x1161, 0x11B8], NFKC: [0xC7A1], NFKD: [0x110C, 0x1161, 0x11B8] }, +{ source: [0xC7A2], NFC: [0xC7A2], NFD: [0x110C, 0x1161, 0x11B9], NFKC: [0xC7A2], NFKD: [0x110C, 0x1161, 0x11B9] }, +{ source: [0xC7A3], NFC: [0xC7A3], NFD: [0x110C, 0x1161, 0x11BA], NFKC: [0xC7A3], NFKD: [0x110C, 0x1161, 0x11BA] }, +{ source: [0xC7A4], NFC: [0xC7A4], NFD: [0x110C, 0x1161, 0x11BB], NFKC: [0xC7A4], NFKD: [0x110C, 0x1161, 0x11BB] }, +{ source: [0xC7A5], NFC: [0xC7A5], NFD: [0x110C, 0x1161, 0x11BC], NFKC: [0xC7A5], NFKD: [0x110C, 0x1161, 0x11BC] }, +{ source: [0xC7A6], NFC: [0xC7A6], NFD: [0x110C, 0x1161, 0x11BD], NFKC: [0xC7A6], NFKD: [0x110C, 0x1161, 0x11BD] }, +{ source: [0xC7A7], NFC: [0xC7A7], NFD: [0x110C, 0x1161, 0x11BE], NFKC: [0xC7A7], NFKD: [0x110C, 0x1161, 0x11BE] }, +{ source: [0xC7A8], NFC: [0xC7A8], NFD: [0x110C, 0x1161, 0x11BF], NFKC: [0xC7A8], NFKD: [0x110C, 0x1161, 0x11BF] }, +{ source: [0xC7A9], NFC: [0xC7A9], NFD: [0x110C, 0x1161, 0x11C0], NFKC: [0xC7A9], NFKD: [0x110C, 0x1161, 0x11C0] }, +{ source: [0xC7AA], NFC: [0xC7AA], NFD: [0x110C, 0x1161, 0x11C1], NFKC: [0xC7AA], NFKD: [0x110C, 0x1161, 0x11C1] }, +{ source: [0xC7AB], NFC: [0xC7AB], NFD: [0x110C, 0x1161, 0x11C2], NFKC: [0xC7AB], NFKD: [0x110C, 0x1161, 0x11C2] }, +{ source: [0xC7AC], NFC: [0xC7AC], NFD: [0x110C, 0x1162], NFKC: [0xC7AC], NFKD: [0x110C, 0x1162] }, +{ source: [0xC7AD], NFC: [0xC7AD], NFD: [0x110C, 0x1162, 0x11A8], NFKC: [0xC7AD], NFKD: [0x110C, 0x1162, 0x11A8] }, +{ source: [0xC7AE], NFC: [0xC7AE], NFD: [0x110C, 0x1162, 0x11A9], NFKC: [0xC7AE], NFKD: [0x110C, 0x1162, 0x11A9] }, +{ source: [0xC7AF], NFC: [0xC7AF], NFD: [0x110C, 0x1162, 0x11AA], NFKC: [0xC7AF], NFKD: [0x110C, 0x1162, 0x11AA] }, +{ source: [0xC7B0], NFC: [0xC7B0], NFD: [0x110C, 0x1162, 0x11AB], NFKC: [0xC7B0], NFKD: [0x110C, 0x1162, 0x11AB] }, +{ source: [0xC7B1], NFC: [0xC7B1], NFD: [0x110C, 0x1162, 0x11AC], NFKC: [0xC7B1], NFKD: [0x110C, 0x1162, 0x11AC] }, +{ source: [0xC7B2], NFC: [0xC7B2], NFD: [0x110C, 0x1162, 0x11AD], NFKC: [0xC7B2], NFKD: [0x110C, 0x1162, 0x11AD] }, +{ source: [0xC7B3], NFC: [0xC7B3], NFD: [0x110C, 0x1162, 0x11AE], NFKC: [0xC7B3], NFKD: [0x110C, 0x1162, 0x11AE] }, +{ source: [0xC7B4], NFC: [0xC7B4], NFD: [0x110C, 0x1162, 0x11AF], NFKC: [0xC7B4], NFKD: [0x110C, 0x1162, 0x11AF] }, +{ source: [0xC7B5], NFC: [0xC7B5], NFD: [0x110C, 0x1162, 0x11B0], NFKC: [0xC7B5], NFKD: [0x110C, 0x1162, 0x11B0] }, +{ source: [0xC7B6], NFC: [0xC7B6], NFD: [0x110C, 0x1162, 0x11B1], NFKC: [0xC7B6], NFKD: [0x110C, 0x1162, 0x11B1] }, +{ source: [0xC7B7], NFC: [0xC7B7], NFD: [0x110C, 0x1162, 0x11B2], NFKC: [0xC7B7], NFKD: [0x110C, 0x1162, 0x11B2] }, +{ source: [0xC7B8], NFC: [0xC7B8], NFD: [0x110C, 0x1162, 0x11B3], NFKC: [0xC7B8], NFKD: [0x110C, 0x1162, 0x11B3] }, +{ source: [0xC7B9], NFC: [0xC7B9], NFD: [0x110C, 0x1162, 0x11B4], NFKC: [0xC7B9], NFKD: [0x110C, 0x1162, 0x11B4] }, +{ source: [0xC7BA], NFC: [0xC7BA], NFD: [0x110C, 0x1162, 0x11B5], NFKC: [0xC7BA], NFKD: [0x110C, 0x1162, 0x11B5] }, +{ source: [0xC7BB], NFC: [0xC7BB], NFD: [0x110C, 0x1162, 0x11B6], NFKC: [0xC7BB], NFKD: [0x110C, 0x1162, 0x11B6] }, +{ source: [0xC7BC], NFC: [0xC7BC], NFD: [0x110C, 0x1162, 0x11B7], NFKC: [0xC7BC], NFKD: [0x110C, 0x1162, 0x11B7] }, +{ source: [0xC7BD], NFC: [0xC7BD], NFD: [0x110C, 0x1162, 0x11B8], NFKC: [0xC7BD], NFKD: [0x110C, 0x1162, 0x11B8] }, +{ source: [0xC7BE], NFC: [0xC7BE], NFD: [0x110C, 0x1162, 0x11B9], NFKC: [0xC7BE], NFKD: [0x110C, 0x1162, 0x11B9] }, +{ source: [0xC7BF], NFC: [0xC7BF], NFD: [0x110C, 0x1162, 0x11BA], NFKC: [0xC7BF], NFKD: [0x110C, 0x1162, 0x11BA] }, +{ source: [0xC7C0], NFC: [0xC7C0], NFD: [0x110C, 0x1162, 0x11BB], NFKC: [0xC7C0], NFKD: [0x110C, 0x1162, 0x11BB] }, +{ source: [0xC7C1], NFC: [0xC7C1], NFD: [0x110C, 0x1162, 0x11BC], NFKC: [0xC7C1], NFKD: [0x110C, 0x1162, 0x11BC] }, +{ source: [0xC7C2], NFC: [0xC7C2], NFD: [0x110C, 0x1162, 0x11BD], NFKC: [0xC7C2], NFKD: [0x110C, 0x1162, 0x11BD] }, +{ source: [0xC7C3], NFC: [0xC7C3], NFD: [0x110C, 0x1162, 0x11BE], NFKC: [0xC7C3], NFKD: [0x110C, 0x1162, 0x11BE] }, +{ source: [0xC7C4], NFC: [0xC7C4], NFD: [0x110C, 0x1162, 0x11BF], NFKC: [0xC7C4], NFKD: [0x110C, 0x1162, 0x11BF] }, +{ source: [0xC7C5], NFC: [0xC7C5], NFD: [0x110C, 0x1162, 0x11C0], NFKC: [0xC7C5], NFKD: [0x110C, 0x1162, 0x11C0] }, +{ source: [0xC7C6], NFC: [0xC7C6], NFD: [0x110C, 0x1162, 0x11C1], NFKC: [0xC7C6], NFKD: [0x110C, 0x1162, 0x11C1] }, +{ source: [0xC7C7], NFC: [0xC7C7], NFD: [0x110C, 0x1162, 0x11C2], NFKC: [0xC7C7], NFKD: [0x110C, 0x1162, 0x11C2] }, +{ source: [0xC7C8], NFC: [0xC7C8], NFD: [0x110C, 0x1163], NFKC: [0xC7C8], NFKD: [0x110C, 0x1163] }, +{ source: [0xC7C9], NFC: [0xC7C9], NFD: [0x110C, 0x1163, 0x11A8], NFKC: [0xC7C9], NFKD: [0x110C, 0x1163, 0x11A8] }, +{ source: [0xC7CA], NFC: [0xC7CA], NFD: [0x110C, 0x1163, 0x11A9], NFKC: [0xC7CA], NFKD: [0x110C, 0x1163, 0x11A9] }, +{ source: [0xC7CB], NFC: [0xC7CB], NFD: [0x110C, 0x1163, 0x11AA], NFKC: [0xC7CB], NFKD: [0x110C, 0x1163, 0x11AA] }, +{ source: [0xC7CC], NFC: [0xC7CC], NFD: [0x110C, 0x1163, 0x11AB], NFKC: [0xC7CC], NFKD: [0x110C, 0x1163, 0x11AB] }, +{ source: [0xC7CD], NFC: [0xC7CD], NFD: [0x110C, 0x1163, 0x11AC], NFKC: [0xC7CD], NFKD: [0x110C, 0x1163, 0x11AC] }, +{ source: [0xC7CE], NFC: [0xC7CE], NFD: [0x110C, 0x1163, 0x11AD], NFKC: [0xC7CE], NFKD: [0x110C, 0x1163, 0x11AD] }, +{ source: [0xC7CF], NFC: [0xC7CF], NFD: [0x110C, 0x1163, 0x11AE], NFKC: [0xC7CF], NFKD: [0x110C, 0x1163, 0x11AE] }, +{ source: [0xC7D0], NFC: [0xC7D0], NFD: [0x110C, 0x1163, 0x11AF], NFKC: [0xC7D0], NFKD: [0x110C, 0x1163, 0x11AF] }, +{ source: [0xC7D1], NFC: [0xC7D1], NFD: [0x110C, 0x1163, 0x11B0], NFKC: [0xC7D1], NFKD: [0x110C, 0x1163, 0x11B0] }, +{ source: [0xC7D2], NFC: [0xC7D2], NFD: [0x110C, 0x1163, 0x11B1], NFKC: [0xC7D2], NFKD: [0x110C, 0x1163, 0x11B1] }, +{ source: [0xC7D3], NFC: [0xC7D3], NFD: [0x110C, 0x1163, 0x11B2], NFKC: [0xC7D3], NFKD: [0x110C, 0x1163, 0x11B2] }, +{ source: [0xC7D4], NFC: [0xC7D4], NFD: [0x110C, 0x1163, 0x11B3], NFKC: [0xC7D4], NFKD: [0x110C, 0x1163, 0x11B3] }, +{ source: [0xC7D5], NFC: [0xC7D5], NFD: [0x110C, 0x1163, 0x11B4], NFKC: [0xC7D5], NFKD: [0x110C, 0x1163, 0x11B4] }, +{ source: [0xC7D6], NFC: [0xC7D6], NFD: [0x110C, 0x1163, 0x11B5], NFKC: [0xC7D6], NFKD: [0x110C, 0x1163, 0x11B5] }, +{ source: [0xC7D7], NFC: [0xC7D7], NFD: [0x110C, 0x1163, 0x11B6], NFKC: [0xC7D7], NFKD: [0x110C, 0x1163, 0x11B6] }, +{ source: [0xC7D8], NFC: [0xC7D8], NFD: [0x110C, 0x1163, 0x11B7], NFKC: [0xC7D8], NFKD: [0x110C, 0x1163, 0x11B7] }, +{ source: [0xC7D9], NFC: [0xC7D9], NFD: [0x110C, 0x1163, 0x11B8], NFKC: [0xC7D9], NFKD: [0x110C, 0x1163, 0x11B8] }, +{ source: [0xC7DA], NFC: [0xC7DA], NFD: [0x110C, 0x1163, 0x11B9], NFKC: [0xC7DA], NFKD: [0x110C, 0x1163, 0x11B9] }, +{ source: [0xC7DB], NFC: [0xC7DB], NFD: [0x110C, 0x1163, 0x11BA], NFKC: [0xC7DB], NFKD: [0x110C, 0x1163, 0x11BA] }, +{ source: [0xC7DC], NFC: [0xC7DC], NFD: [0x110C, 0x1163, 0x11BB], NFKC: [0xC7DC], NFKD: [0x110C, 0x1163, 0x11BB] }, +{ source: [0xC7DD], NFC: [0xC7DD], NFD: [0x110C, 0x1163, 0x11BC], NFKC: [0xC7DD], NFKD: [0x110C, 0x1163, 0x11BC] }, +{ source: [0xC7DE], NFC: [0xC7DE], NFD: [0x110C, 0x1163, 0x11BD], NFKC: [0xC7DE], NFKD: [0x110C, 0x1163, 0x11BD] }, +{ source: [0xC7DF], NFC: [0xC7DF], NFD: [0x110C, 0x1163, 0x11BE], NFKC: [0xC7DF], NFKD: [0x110C, 0x1163, 0x11BE] }, +{ source: [0xC7E0], NFC: [0xC7E0], NFD: [0x110C, 0x1163, 0x11BF], NFKC: [0xC7E0], NFKD: [0x110C, 0x1163, 0x11BF] }, +{ source: [0xC7E1], NFC: [0xC7E1], NFD: [0x110C, 0x1163, 0x11C0], NFKC: [0xC7E1], NFKD: [0x110C, 0x1163, 0x11C0] }, +{ source: [0xC7E2], NFC: [0xC7E2], NFD: [0x110C, 0x1163, 0x11C1], NFKC: [0xC7E2], NFKD: [0x110C, 0x1163, 0x11C1] }, +{ source: [0xC7E3], NFC: [0xC7E3], NFD: [0x110C, 0x1163, 0x11C2], NFKC: [0xC7E3], NFKD: [0x110C, 0x1163, 0x11C2] }, +{ source: [0xC7E4], NFC: [0xC7E4], NFD: [0x110C, 0x1164], NFKC: [0xC7E4], NFKD: [0x110C, 0x1164] }, +{ source: [0xC7E5], NFC: [0xC7E5], NFD: [0x110C, 0x1164, 0x11A8], NFKC: [0xC7E5], NFKD: [0x110C, 0x1164, 0x11A8] }, +{ source: [0xC7E6], NFC: [0xC7E6], NFD: [0x110C, 0x1164, 0x11A9], NFKC: [0xC7E6], NFKD: [0x110C, 0x1164, 0x11A9] }, +{ source: [0xC7E7], NFC: [0xC7E7], NFD: [0x110C, 0x1164, 0x11AA], NFKC: [0xC7E7], NFKD: [0x110C, 0x1164, 0x11AA] }, +{ source: [0xC7E8], NFC: [0xC7E8], NFD: [0x110C, 0x1164, 0x11AB], NFKC: [0xC7E8], NFKD: [0x110C, 0x1164, 0x11AB] }, +{ source: [0xC7E9], NFC: [0xC7E9], NFD: [0x110C, 0x1164, 0x11AC], NFKC: [0xC7E9], NFKD: [0x110C, 0x1164, 0x11AC] }, +{ source: [0xC7EA], NFC: [0xC7EA], NFD: [0x110C, 0x1164, 0x11AD], NFKC: [0xC7EA], NFKD: [0x110C, 0x1164, 0x11AD] }, +{ source: [0xC7EB], NFC: [0xC7EB], NFD: [0x110C, 0x1164, 0x11AE], NFKC: [0xC7EB], NFKD: [0x110C, 0x1164, 0x11AE] }, +{ source: [0xC7EC], NFC: [0xC7EC], NFD: [0x110C, 0x1164, 0x11AF], NFKC: [0xC7EC], NFKD: [0x110C, 0x1164, 0x11AF] }, +{ source: [0xC7ED], NFC: [0xC7ED], NFD: [0x110C, 0x1164, 0x11B0], NFKC: [0xC7ED], NFKD: [0x110C, 0x1164, 0x11B0] }, +{ source: [0xC7EE], NFC: [0xC7EE], NFD: [0x110C, 0x1164, 0x11B1], NFKC: [0xC7EE], NFKD: [0x110C, 0x1164, 0x11B1] }, +{ source: [0xC7EF], NFC: [0xC7EF], NFD: [0x110C, 0x1164, 0x11B2], NFKC: [0xC7EF], NFKD: [0x110C, 0x1164, 0x11B2] }, +{ source: [0xC7F0], NFC: [0xC7F0], NFD: [0x110C, 0x1164, 0x11B3], NFKC: [0xC7F0], NFKD: [0x110C, 0x1164, 0x11B3] }, +{ source: [0xC7F1], NFC: [0xC7F1], NFD: [0x110C, 0x1164, 0x11B4], NFKC: [0xC7F1], NFKD: [0x110C, 0x1164, 0x11B4] }, +{ source: [0xC7F2], NFC: [0xC7F2], NFD: [0x110C, 0x1164, 0x11B5], NFKC: [0xC7F2], NFKD: [0x110C, 0x1164, 0x11B5] }, +{ source: [0xC7F3], NFC: [0xC7F3], NFD: [0x110C, 0x1164, 0x11B6], NFKC: [0xC7F3], NFKD: [0x110C, 0x1164, 0x11B6] }, +{ source: [0xC7F4], NFC: [0xC7F4], NFD: [0x110C, 0x1164, 0x11B7], NFKC: [0xC7F4], NFKD: [0x110C, 0x1164, 0x11B7] }, +{ source: [0xC7F5], NFC: [0xC7F5], NFD: [0x110C, 0x1164, 0x11B8], NFKC: [0xC7F5], NFKD: [0x110C, 0x1164, 0x11B8] }, +{ source: [0xC7F6], NFC: [0xC7F6], NFD: [0x110C, 0x1164, 0x11B9], NFKC: [0xC7F6], NFKD: [0x110C, 0x1164, 0x11B9] }, +{ source: [0xC7F7], NFC: [0xC7F7], NFD: [0x110C, 0x1164, 0x11BA], NFKC: [0xC7F7], NFKD: [0x110C, 0x1164, 0x11BA] }, +{ source: [0xC7F8], NFC: [0xC7F8], NFD: [0x110C, 0x1164, 0x11BB], NFKC: [0xC7F8], NFKD: [0x110C, 0x1164, 0x11BB] }, +{ source: [0xC7F9], NFC: [0xC7F9], NFD: [0x110C, 0x1164, 0x11BC], NFKC: [0xC7F9], NFKD: [0x110C, 0x1164, 0x11BC] }, +{ source: [0xC7FA], NFC: [0xC7FA], NFD: [0x110C, 0x1164, 0x11BD], NFKC: [0xC7FA], NFKD: [0x110C, 0x1164, 0x11BD] }, +{ source: [0xC7FB], NFC: [0xC7FB], NFD: [0x110C, 0x1164, 0x11BE], NFKC: [0xC7FB], NFKD: [0x110C, 0x1164, 0x11BE] }, +{ source: [0xC7FC], NFC: [0xC7FC], NFD: [0x110C, 0x1164, 0x11BF], NFKC: [0xC7FC], NFKD: [0x110C, 0x1164, 0x11BF] }, +{ source: [0xC7FD], NFC: [0xC7FD], NFD: [0x110C, 0x1164, 0x11C0], NFKC: [0xC7FD], NFKD: [0x110C, 0x1164, 0x11C0] }, +{ source: [0xC7FE], NFC: [0xC7FE], NFD: [0x110C, 0x1164, 0x11C1], NFKC: [0xC7FE], NFKD: [0x110C, 0x1164, 0x11C1] }, +{ source: [0xC7FF], NFC: [0xC7FF], NFD: [0x110C, 0x1164, 0x11C2], NFKC: [0xC7FF], NFKD: [0x110C, 0x1164, 0x11C2] }, +{ source: [0xC800], NFC: [0xC800], NFD: [0x110C, 0x1165], NFKC: [0xC800], NFKD: [0x110C, 0x1165] }, +{ source: [0xC801], NFC: [0xC801], NFD: [0x110C, 0x1165, 0x11A8], NFKC: [0xC801], NFKD: [0x110C, 0x1165, 0x11A8] }, +{ source: [0xC802], NFC: [0xC802], NFD: [0x110C, 0x1165, 0x11A9], NFKC: [0xC802], NFKD: [0x110C, 0x1165, 0x11A9] }, +{ source: [0xC803], NFC: [0xC803], NFD: [0x110C, 0x1165, 0x11AA], NFKC: [0xC803], NFKD: [0x110C, 0x1165, 0x11AA] }, +{ source: [0xC804], NFC: [0xC804], NFD: [0x110C, 0x1165, 0x11AB], NFKC: [0xC804], NFKD: [0x110C, 0x1165, 0x11AB] }, +{ source: [0xC805], NFC: [0xC805], NFD: [0x110C, 0x1165, 0x11AC], NFKC: [0xC805], NFKD: [0x110C, 0x1165, 0x11AC] }, +{ source: [0xC806], NFC: [0xC806], NFD: [0x110C, 0x1165, 0x11AD], NFKC: [0xC806], NFKD: [0x110C, 0x1165, 0x11AD] }, +{ source: [0xC807], NFC: [0xC807], NFD: [0x110C, 0x1165, 0x11AE], NFKC: [0xC807], NFKD: [0x110C, 0x1165, 0x11AE] }, +{ source: [0xC808], NFC: [0xC808], NFD: [0x110C, 0x1165, 0x11AF], NFKC: [0xC808], NFKD: [0x110C, 0x1165, 0x11AF] }, +{ source: [0xC809], NFC: [0xC809], NFD: [0x110C, 0x1165, 0x11B0], NFKC: [0xC809], NFKD: [0x110C, 0x1165, 0x11B0] }, +{ source: [0xC80A], NFC: [0xC80A], NFD: [0x110C, 0x1165, 0x11B1], NFKC: [0xC80A], NFKD: [0x110C, 0x1165, 0x11B1] }, +{ source: [0xC80B], NFC: [0xC80B], NFD: [0x110C, 0x1165, 0x11B2], NFKC: [0xC80B], NFKD: [0x110C, 0x1165, 0x11B2] }, +{ source: [0xC80C], NFC: [0xC80C], NFD: [0x110C, 0x1165, 0x11B3], NFKC: [0xC80C], NFKD: [0x110C, 0x1165, 0x11B3] }, +{ source: [0xC80D], NFC: [0xC80D], NFD: [0x110C, 0x1165, 0x11B4], NFKC: [0xC80D], NFKD: [0x110C, 0x1165, 0x11B4] }, +{ source: [0xC80E], NFC: [0xC80E], NFD: [0x110C, 0x1165, 0x11B5], NFKC: [0xC80E], NFKD: [0x110C, 0x1165, 0x11B5] }, +{ source: [0xC80F], NFC: [0xC80F], NFD: [0x110C, 0x1165, 0x11B6], NFKC: [0xC80F], NFKD: [0x110C, 0x1165, 0x11B6] }, +{ source: [0xC810], NFC: [0xC810], NFD: [0x110C, 0x1165, 0x11B7], NFKC: [0xC810], NFKD: [0x110C, 0x1165, 0x11B7] }, +{ source: [0xC811], NFC: [0xC811], NFD: [0x110C, 0x1165, 0x11B8], NFKC: [0xC811], NFKD: [0x110C, 0x1165, 0x11B8] }, +{ source: [0xC812], NFC: [0xC812], NFD: [0x110C, 0x1165, 0x11B9], NFKC: [0xC812], NFKD: [0x110C, 0x1165, 0x11B9] }, +{ source: [0xC813], NFC: [0xC813], NFD: [0x110C, 0x1165, 0x11BA], NFKC: [0xC813], NFKD: [0x110C, 0x1165, 0x11BA] }, +{ source: [0xC814], NFC: [0xC814], NFD: [0x110C, 0x1165, 0x11BB], NFKC: [0xC814], NFKD: [0x110C, 0x1165, 0x11BB] }, +{ source: [0xC815], NFC: [0xC815], NFD: [0x110C, 0x1165, 0x11BC], NFKC: [0xC815], NFKD: [0x110C, 0x1165, 0x11BC] }, +{ source: [0xC816], NFC: [0xC816], NFD: [0x110C, 0x1165, 0x11BD], NFKC: [0xC816], NFKD: [0x110C, 0x1165, 0x11BD] }, +{ source: [0xC817], NFC: [0xC817], NFD: [0x110C, 0x1165, 0x11BE], NFKC: [0xC817], NFKD: [0x110C, 0x1165, 0x11BE] }, +{ source: [0xC818], NFC: [0xC818], NFD: [0x110C, 0x1165, 0x11BF], NFKC: [0xC818], NFKD: [0x110C, 0x1165, 0x11BF] }, +{ source: [0xC819], NFC: [0xC819], NFD: [0x110C, 0x1165, 0x11C0], NFKC: [0xC819], NFKD: [0x110C, 0x1165, 0x11C0] }, +{ source: [0xC81A], NFC: [0xC81A], NFD: [0x110C, 0x1165, 0x11C1], NFKC: [0xC81A], NFKD: [0x110C, 0x1165, 0x11C1] }, +{ source: [0xC81B], NFC: [0xC81B], NFD: [0x110C, 0x1165, 0x11C2], NFKC: [0xC81B], NFKD: [0x110C, 0x1165, 0x11C2] }, +{ source: [0xC81C], NFC: [0xC81C], NFD: [0x110C, 0x1166], NFKC: [0xC81C], NFKD: [0x110C, 0x1166] }, +{ source: [0xC81D], NFC: [0xC81D], NFD: [0x110C, 0x1166, 0x11A8], NFKC: [0xC81D], NFKD: [0x110C, 0x1166, 0x11A8] }, +{ source: [0xC81E], NFC: [0xC81E], NFD: [0x110C, 0x1166, 0x11A9], NFKC: [0xC81E], NFKD: [0x110C, 0x1166, 0x11A9] }, +{ source: [0xC81F], NFC: [0xC81F], NFD: [0x110C, 0x1166, 0x11AA], NFKC: [0xC81F], NFKD: [0x110C, 0x1166, 0x11AA] }, +{ source: [0xC820], NFC: [0xC820], NFD: [0x110C, 0x1166, 0x11AB], NFKC: [0xC820], NFKD: [0x110C, 0x1166, 0x11AB] }, +{ source: [0xC821], NFC: [0xC821], NFD: [0x110C, 0x1166, 0x11AC], NFKC: [0xC821], NFKD: [0x110C, 0x1166, 0x11AC] }, +{ source: [0xC822], NFC: [0xC822], NFD: [0x110C, 0x1166, 0x11AD], NFKC: [0xC822], NFKD: [0x110C, 0x1166, 0x11AD] }, +{ source: [0xC823], NFC: [0xC823], NFD: [0x110C, 0x1166, 0x11AE], NFKC: [0xC823], NFKD: [0x110C, 0x1166, 0x11AE] }, +{ source: [0xC824], NFC: [0xC824], NFD: [0x110C, 0x1166, 0x11AF], NFKC: [0xC824], NFKD: [0x110C, 0x1166, 0x11AF] }, +{ source: [0xC825], NFC: [0xC825], NFD: [0x110C, 0x1166, 0x11B0], NFKC: [0xC825], NFKD: [0x110C, 0x1166, 0x11B0] }, +{ source: [0xC826], NFC: [0xC826], NFD: [0x110C, 0x1166, 0x11B1], NFKC: [0xC826], NFKD: [0x110C, 0x1166, 0x11B1] }, +{ source: [0xC827], NFC: [0xC827], NFD: [0x110C, 0x1166, 0x11B2], NFKC: [0xC827], NFKD: [0x110C, 0x1166, 0x11B2] }, +{ source: [0xC828], NFC: [0xC828], NFD: [0x110C, 0x1166, 0x11B3], NFKC: [0xC828], NFKD: [0x110C, 0x1166, 0x11B3] }, +{ source: [0xC829], NFC: [0xC829], NFD: [0x110C, 0x1166, 0x11B4], NFKC: [0xC829], NFKD: [0x110C, 0x1166, 0x11B4] }, +{ source: [0xC82A], NFC: [0xC82A], NFD: [0x110C, 0x1166, 0x11B5], NFKC: [0xC82A], NFKD: [0x110C, 0x1166, 0x11B5] }, +{ source: [0xC82B], NFC: [0xC82B], NFD: [0x110C, 0x1166, 0x11B6], NFKC: [0xC82B], NFKD: [0x110C, 0x1166, 0x11B6] }, +{ source: [0xC82C], NFC: [0xC82C], NFD: [0x110C, 0x1166, 0x11B7], NFKC: [0xC82C], NFKD: [0x110C, 0x1166, 0x11B7] }, +{ source: [0xC82D], NFC: [0xC82D], NFD: [0x110C, 0x1166, 0x11B8], NFKC: [0xC82D], NFKD: [0x110C, 0x1166, 0x11B8] }, +{ source: [0xC82E], NFC: [0xC82E], NFD: [0x110C, 0x1166, 0x11B9], NFKC: [0xC82E], NFKD: [0x110C, 0x1166, 0x11B9] }, +{ source: [0xC82F], NFC: [0xC82F], NFD: [0x110C, 0x1166, 0x11BA], NFKC: [0xC82F], NFKD: [0x110C, 0x1166, 0x11BA] }, +{ source: [0xC830], NFC: [0xC830], NFD: [0x110C, 0x1166, 0x11BB], NFKC: [0xC830], NFKD: [0x110C, 0x1166, 0x11BB] }, +{ source: [0xC831], NFC: [0xC831], NFD: [0x110C, 0x1166, 0x11BC], NFKC: [0xC831], NFKD: [0x110C, 0x1166, 0x11BC] }, +{ source: [0xC832], NFC: [0xC832], NFD: [0x110C, 0x1166, 0x11BD], NFKC: [0xC832], NFKD: [0x110C, 0x1166, 0x11BD] }, +{ source: [0xC833], NFC: [0xC833], NFD: [0x110C, 0x1166, 0x11BE], NFKC: [0xC833], NFKD: [0x110C, 0x1166, 0x11BE] }, +{ source: [0xC834], NFC: [0xC834], NFD: [0x110C, 0x1166, 0x11BF], NFKC: [0xC834], NFKD: [0x110C, 0x1166, 0x11BF] }, +{ source: [0xC835], NFC: [0xC835], NFD: [0x110C, 0x1166, 0x11C0], NFKC: [0xC835], NFKD: [0x110C, 0x1166, 0x11C0] }, +{ source: [0xC836], NFC: [0xC836], NFD: [0x110C, 0x1166, 0x11C1], NFKC: [0xC836], NFKD: [0x110C, 0x1166, 0x11C1] }, +{ source: [0xC837], NFC: [0xC837], NFD: [0x110C, 0x1166, 0x11C2], NFKC: [0xC837], NFKD: [0x110C, 0x1166, 0x11C2] }, +{ source: [0xC838], NFC: [0xC838], NFD: [0x110C, 0x1167], NFKC: [0xC838], NFKD: [0x110C, 0x1167] }, +{ source: [0xC839], NFC: [0xC839], NFD: [0x110C, 0x1167, 0x11A8], NFKC: [0xC839], NFKD: [0x110C, 0x1167, 0x11A8] }, +{ source: [0xC83A], NFC: [0xC83A], NFD: [0x110C, 0x1167, 0x11A9], NFKC: [0xC83A], NFKD: [0x110C, 0x1167, 0x11A9] }, +{ source: [0xC83B], NFC: [0xC83B], NFD: [0x110C, 0x1167, 0x11AA], NFKC: [0xC83B], NFKD: [0x110C, 0x1167, 0x11AA] }, +{ source: [0xC83C], NFC: [0xC83C], NFD: [0x110C, 0x1167, 0x11AB], NFKC: [0xC83C], NFKD: [0x110C, 0x1167, 0x11AB] }, +{ source: [0xC83D], NFC: [0xC83D], NFD: [0x110C, 0x1167, 0x11AC], NFKC: [0xC83D], NFKD: [0x110C, 0x1167, 0x11AC] }, +{ source: [0xC83E], NFC: [0xC83E], NFD: [0x110C, 0x1167, 0x11AD], NFKC: [0xC83E], NFKD: [0x110C, 0x1167, 0x11AD] }, +{ source: [0xC83F], NFC: [0xC83F], NFD: [0x110C, 0x1167, 0x11AE], NFKC: [0xC83F], NFKD: [0x110C, 0x1167, 0x11AE] }, +{ source: [0xC840], NFC: [0xC840], NFD: [0x110C, 0x1167, 0x11AF], NFKC: [0xC840], NFKD: [0x110C, 0x1167, 0x11AF] }, +{ source: [0xC841], NFC: [0xC841], NFD: [0x110C, 0x1167, 0x11B0], NFKC: [0xC841], NFKD: [0x110C, 0x1167, 0x11B0] }, +{ source: [0xC842], NFC: [0xC842], NFD: [0x110C, 0x1167, 0x11B1], NFKC: [0xC842], NFKD: [0x110C, 0x1167, 0x11B1] }, +{ source: [0xC843], NFC: [0xC843], NFD: [0x110C, 0x1167, 0x11B2], NFKC: [0xC843], NFKD: [0x110C, 0x1167, 0x11B2] }, +{ source: [0xC844], NFC: [0xC844], NFD: [0x110C, 0x1167, 0x11B3], NFKC: [0xC844], NFKD: [0x110C, 0x1167, 0x11B3] }, +{ source: [0xC845], NFC: [0xC845], NFD: [0x110C, 0x1167, 0x11B4], NFKC: [0xC845], NFKD: [0x110C, 0x1167, 0x11B4] }, +{ source: [0xC846], NFC: [0xC846], NFD: [0x110C, 0x1167, 0x11B5], NFKC: [0xC846], NFKD: [0x110C, 0x1167, 0x11B5] }, +{ source: [0xC847], NFC: [0xC847], NFD: [0x110C, 0x1167, 0x11B6], NFKC: [0xC847], NFKD: [0x110C, 0x1167, 0x11B6] }, +{ source: [0xC848], NFC: [0xC848], NFD: [0x110C, 0x1167, 0x11B7], NFKC: [0xC848], NFKD: [0x110C, 0x1167, 0x11B7] }, +{ source: [0xC849], NFC: [0xC849], NFD: [0x110C, 0x1167, 0x11B8], NFKC: [0xC849], NFKD: [0x110C, 0x1167, 0x11B8] }, +{ source: [0xC84A], NFC: [0xC84A], NFD: [0x110C, 0x1167, 0x11B9], NFKC: [0xC84A], NFKD: [0x110C, 0x1167, 0x11B9] }, +{ source: [0xC84B], NFC: [0xC84B], NFD: [0x110C, 0x1167, 0x11BA], NFKC: [0xC84B], NFKD: [0x110C, 0x1167, 0x11BA] }, +{ source: [0xC84C], NFC: [0xC84C], NFD: [0x110C, 0x1167, 0x11BB], NFKC: [0xC84C], NFKD: [0x110C, 0x1167, 0x11BB] }, +{ source: [0xC84D], NFC: [0xC84D], NFD: [0x110C, 0x1167, 0x11BC], NFKC: [0xC84D], NFKD: [0x110C, 0x1167, 0x11BC] }, +{ source: [0xC84E], NFC: [0xC84E], NFD: [0x110C, 0x1167, 0x11BD], NFKC: [0xC84E], NFKD: [0x110C, 0x1167, 0x11BD] }, +{ source: [0xC84F], NFC: [0xC84F], NFD: [0x110C, 0x1167, 0x11BE], NFKC: [0xC84F], NFKD: [0x110C, 0x1167, 0x11BE] }, +{ source: [0xC850], NFC: [0xC850], NFD: [0x110C, 0x1167, 0x11BF], NFKC: [0xC850], NFKD: [0x110C, 0x1167, 0x11BF] }, +{ source: [0xC851], NFC: [0xC851], NFD: [0x110C, 0x1167, 0x11C0], NFKC: [0xC851], NFKD: [0x110C, 0x1167, 0x11C0] }, +{ source: [0xC852], NFC: [0xC852], NFD: [0x110C, 0x1167, 0x11C1], NFKC: [0xC852], NFKD: [0x110C, 0x1167, 0x11C1] }, +{ source: [0xC853], NFC: [0xC853], NFD: [0x110C, 0x1167, 0x11C2], NFKC: [0xC853], NFKD: [0x110C, 0x1167, 0x11C2] }, +{ source: [0xC854], NFC: [0xC854], NFD: [0x110C, 0x1168], NFKC: [0xC854], NFKD: [0x110C, 0x1168] }, +{ source: [0xC855], NFC: [0xC855], NFD: [0x110C, 0x1168, 0x11A8], NFKC: [0xC855], NFKD: [0x110C, 0x1168, 0x11A8] }, +{ source: [0xC856], NFC: [0xC856], NFD: [0x110C, 0x1168, 0x11A9], NFKC: [0xC856], NFKD: [0x110C, 0x1168, 0x11A9] }, +{ source: [0xC857], NFC: [0xC857], NFD: [0x110C, 0x1168, 0x11AA], NFKC: [0xC857], NFKD: [0x110C, 0x1168, 0x11AA] }, +{ source: [0xC858], NFC: [0xC858], NFD: [0x110C, 0x1168, 0x11AB], NFKC: [0xC858], NFKD: [0x110C, 0x1168, 0x11AB] }, +{ source: [0xC859], NFC: [0xC859], NFD: [0x110C, 0x1168, 0x11AC], NFKC: [0xC859], NFKD: [0x110C, 0x1168, 0x11AC] }, +{ source: [0xC85A], NFC: [0xC85A], NFD: [0x110C, 0x1168, 0x11AD], NFKC: [0xC85A], NFKD: [0x110C, 0x1168, 0x11AD] }, +{ source: [0xC85B], NFC: [0xC85B], NFD: [0x110C, 0x1168, 0x11AE], NFKC: [0xC85B], NFKD: [0x110C, 0x1168, 0x11AE] }, +{ source: [0xC85C], NFC: [0xC85C], NFD: [0x110C, 0x1168, 0x11AF], NFKC: [0xC85C], NFKD: [0x110C, 0x1168, 0x11AF] }, +{ source: [0xC85D], NFC: [0xC85D], NFD: [0x110C, 0x1168, 0x11B0], NFKC: [0xC85D], NFKD: [0x110C, 0x1168, 0x11B0] }, +{ source: [0xC85E], NFC: [0xC85E], NFD: [0x110C, 0x1168, 0x11B1], NFKC: [0xC85E], NFKD: [0x110C, 0x1168, 0x11B1] }, +{ source: [0xC85F], NFC: [0xC85F], NFD: [0x110C, 0x1168, 0x11B2], NFKC: [0xC85F], NFKD: [0x110C, 0x1168, 0x11B2] }, +{ source: [0xC860], NFC: [0xC860], NFD: [0x110C, 0x1168, 0x11B3], NFKC: [0xC860], NFKD: [0x110C, 0x1168, 0x11B3] }, +{ source: [0xC861], NFC: [0xC861], NFD: [0x110C, 0x1168, 0x11B4], NFKC: [0xC861], NFKD: [0x110C, 0x1168, 0x11B4] }, +{ source: [0xC862], NFC: [0xC862], NFD: [0x110C, 0x1168, 0x11B5], NFKC: [0xC862], NFKD: [0x110C, 0x1168, 0x11B5] }, +{ source: [0xC863], NFC: [0xC863], NFD: [0x110C, 0x1168, 0x11B6], NFKC: [0xC863], NFKD: [0x110C, 0x1168, 0x11B6] }, +{ source: [0xC864], NFC: [0xC864], NFD: [0x110C, 0x1168, 0x11B7], NFKC: [0xC864], NFKD: [0x110C, 0x1168, 0x11B7] }, +{ source: [0xC865], NFC: [0xC865], NFD: [0x110C, 0x1168, 0x11B8], NFKC: [0xC865], NFKD: [0x110C, 0x1168, 0x11B8] }, +{ source: [0xC866], NFC: [0xC866], NFD: [0x110C, 0x1168, 0x11B9], NFKC: [0xC866], NFKD: [0x110C, 0x1168, 0x11B9] }, +{ source: [0xC867], NFC: [0xC867], NFD: [0x110C, 0x1168, 0x11BA], NFKC: [0xC867], NFKD: [0x110C, 0x1168, 0x11BA] }, +{ source: [0xC868], NFC: [0xC868], NFD: [0x110C, 0x1168, 0x11BB], NFKC: [0xC868], NFKD: [0x110C, 0x1168, 0x11BB] }, +{ source: [0xC869], NFC: [0xC869], NFD: [0x110C, 0x1168, 0x11BC], NFKC: [0xC869], NFKD: [0x110C, 0x1168, 0x11BC] }, +{ source: [0xC86A], NFC: [0xC86A], NFD: [0x110C, 0x1168, 0x11BD], NFKC: [0xC86A], NFKD: [0x110C, 0x1168, 0x11BD] }, +{ source: [0xC86B], NFC: [0xC86B], NFD: [0x110C, 0x1168, 0x11BE], NFKC: [0xC86B], NFKD: [0x110C, 0x1168, 0x11BE] }, +{ source: [0xC86C], NFC: [0xC86C], NFD: [0x110C, 0x1168, 0x11BF], NFKC: [0xC86C], NFKD: [0x110C, 0x1168, 0x11BF] }, +{ source: [0xC86D], NFC: [0xC86D], NFD: [0x110C, 0x1168, 0x11C0], NFKC: [0xC86D], NFKD: [0x110C, 0x1168, 0x11C0] }, +{ source: [0xC86E], NFC: [0xC86E], NFD: [0x110C, 0x1168, 0x11C1], NFKC: [0xC86E], NFKD: [0x110C, 0x1168, 0x11C1] }, +{ source: [0xC86F], NFC: [0xC86F], NFD: [0x110C, 0x1168, 0x11C2], NFKC: [0xC86F], NFKD: [0x110C, 0x1168, 0x11C2] }, +{ source: [0xC870], NFC: [0xC870], NFD: [0x110C, 0x1169], NFKC: [0xC870], NFKD: [0x110C, 0x1169] }, +{ source: [0xC871], NFC: [0xC871], NFD: [0x110C, 0x1169, 0x11A8], NFKC: [0xC871], NFKD: [0x110C, 0x1169, 0x11A8] }, +{ source: [0xC872], NFC: [0xC872], NFD: [0x110C, 0x1169, 0x11A9], NFKC: [0xC872], NFKD: [0x110C, 0x1169, 0x11A9] }, +{ source: [0xC873], NFC: [0xC873], NFD: [0x110C, 0x1169, 0x11AA], NFKC: [0xC873], NFKD: [0x110C, 0x1169, 0x11AA] }, +{ source: [0xC874], NFC: [0xC874], NFD: [0x110C, 0x1169, 0x11AB], NFKC: [0xC874], NFKD: [0x110C, 0x1169, 0x11AB] }, +{ source: [0xC875], NFC: [0xC875], NFD: [0x110C, 0x1169, 0x11AC], NFKC: [0xC875], NFKD: [0x110C, 0x1169, 0x11AC] }, +{ source: [0xC876], NFC: [0xC876], NFD: [0x110C, 0x1169, 0x11AD], NFKC: [0xC876], NFKD: [0x110C, 0x1169, 0x11AD] }, +{ source: [0xC877], NFC: [0xC877], NFD: [0x110C, 0x1169, 0x11AE], NFKC: [0xC877], NFKD: [0x110C, 0x1169, 0x11AE] }, +{ source: [0xC878], NFC: [0xC878], NFD: [0x110C, 0x1169, 0x11AF], NFKC: [0xC878], NFKD: [0x110C, 0x1169, 0x11AF] }, +{ source: [0xC879], NFC: [0xC879], NFD: [0x110C, 0x1169, 0x11B0], NFKC: [0xC879], NFKD: [0x110C, 0x1169, 0x11B0] }, +{ source: [0xC87A], NFC: [0xC87A], NFD: [0x110C, 0x1169, 0x11B1], NFKC: [0xC87A], NFKD: [0x110C, 0x1169, 0x11B1] }, +{ source: [0xC87B], NFC: [0xC87B], NFD: [0x110C, 0x1169, 0x11B2], NFKC: [0xC87B], NFKD: [0x110C, 0x1169, 0x11B2] }, +{ source: [0xC87C], NFC: [0xC87C], NFD: [0x110C, 0x1169, 0x11B3], NFKC: [0xC87C], NFKD: [0x110C, 0x1169, 0x11B3] }, +{ source: [0xC87D], NFC: [0xC87D], NFD: [0x110C, 0x1169, 0x11B4], NFKC: [0xC87D], NFKD: [0x110C, 0x1169, 0x11B4] }, +{ source: [0xC87E], NFC: [0xC87E], NFD: [0x110C, 0x1169, 0x11B5], NFKC: [0xC87E], NFKD: [0x110C, 0x1169, 0x11B5] }, +{ source: [0xC87F], NFC: [0xC87F], NFD: [0x110C, 0x1169, 0x11B6], NFKC: [0xC87F], NFKD: [0x110C, 0x1169, 0x11B6] }, +{ source: [0xC880], NFC: [0xC880], NFD: [0x110C, 0x1169, 0x11B7], NFKC: [0xC880], NFKD: [0x110C, 0x1169, 0x11B7] }, +{ source: [0xC881], NFC: [0xC881], NFD: [0x110C, 0x1169, 0x11B8], NFKC: [0xC881], NFKD: [0x110C, 0x1169, 0x11B8] }, +{ source: [0xC882], NFC: [0xC882], NFD: [0x110C, 0x1169, 0x11B9], NFKC: [0xC882], NFKD: [0x110C, 0x1169, 0x11B9] }, +{ source: [0xC883], NFC: [0xC883], NFD: [0x110C, 0x1169, 0x11BA], NFKC: [0xC883], NFKD: [0x110C, 0x1169, 0x11BA] }, +{ source: [0xC884], NFC: [0xC884], NFD: [0x110C, 0x1169, 0x11BB], NFKC: [0xC884], NFKD: [0x110C, 0x1169, 0x11BB] }, +{ source: [0xC885], NFC: [0xC885], NFD: [0x110C, 0x1169, 0x11BC], NFKC: [0xC885], NFKD: [0x110C, 0x1169, 0x11BC] }, +{ source: [0xC886], NFC: [0xC886], NFD: [0x110C, 0x1169, 0x11BD], NFKC: [0xC886], NFKD: [0x110C, 0x1169, 0x11BD] }, +{ source: [0xC887], NFC: [0xC887], NFD: [0x110C, 0x1169, 0x11BE], NFKC: [0xC887], NFKD: [0x110C, 0x1169, 0x11BE] }, +{ source: [0xC888], NFC: [0xC888], NFD: [0x110C, 0x1169, 0x11BF], NFKC: [0xC888], NFKD: [0x110C, 0x1169, 0x11BF] }, +{ source: [0xC889], NFC: [0xC889], NFD: [0x110C, 0x1169, 0x11C0], NFKC: [0xC889], NFKD: [0x110C, 0x1169, 0x11C0] }, +{ source: [0xC88A], NFC: [0xC88A], NFD: [0x110C, 0x1169, 0x11C1], NFKC: [0xC88A], NFKD: [0x110C, 0x1169, 0x11C1] }, +{ source: [0xC88B], NFC: [0xC88B], NFD: [0x110C, 0x1169, 0x11C2], NFKC: [0xC88B], NFKD: [0x110C, 0x1169, 0x11C2] }, +{ source: [0xC88C], NFC: [0xC88C], NFD: [0x110C, 0x116A], NFKC: [0xC88C], NFKD: [0x110C, 0x116A] }, +{ source: [0xC88D], NFC: [0xC88D], NFD: [0x110C, 0x116A, 0x11A8], NFKC: [0xC88D], NFKD: [0x110C, 0x116A, 0x11A8] }, +{ source: [0xC88E], NFC: [0xC88E], NFD: [0x110C, 0x116A, 0x11A9], NFKC: [0xC88E], NFKD: [0x110C, 0x116A, 0x11A9] }, +{ source: [0xC88F], NFC: [0xC88F], NFD: [0x110C, 0x116A, 0x11AA], NFKC: [0xC88F], NFKD: [0x110C, 0x116A, 0x11AA] }, +{ source: [0xC890], NFC: [0xC890], NFD: [0x110C, 0x116A, 0x11AB], NFKC: [0xC890], NFKD: [0x110C, 0x116A, 0x11AB] }, +{ source: [0xC891], NFC: [0xC891], NFD: [0x110C, 0x116A, 0x11AC], NFKC: [0xC891], NFKD: [0x110C, 0x116A, 0x11AC] }, +{ source: [0xC892], NFC: [0xC892], NFD: [0x110C, 0x116A, 0x11AD], NFKC: [0xC892], NFKD: [0x110C, 0x116A, 0x11AD] }, +{ source: [0xC893], NFC: [0xC893], NFD: [0x110C, 0x116A, 0x11AE], NFKC: [0xC893], NFKD: [0x110C, 0x116A, 0x11AE] }, +{ source: [0xC894], NFC: [0xC894], NFD: [0x110C, 0x116A, 0x11AF], NFKC: [0xC894], NFKD: [0x110C, 0x116A, 0x11AF] }, +{ source: [0xC895], NFC: [0xC895], NFD: [0x110C, 0x116A, 0x11B0], NFKC: [0xC895], NFKD: [0x110C, 0x116A, 0x11B0] }, +{ source: [0xC896], NFC: [0xC896], NFD: [0x110C, 0x116A, 0x11B1], NFKC: [0xC896], NFKD: [0x110C, 0x116A, 0x11B1] }, +{ source: [0xC897], NFC: [0xC897], NFD: [0x110C, 0x116A, 0x11B2], NFKC: [0xC897], NFKD: [0x110C, 0x116A, 0x11B2] }, +{ source: [0xC898], NFC: [0xC898], NFD: [0x110C, 0x116A, 0x11B3], NFKC: [0xC898], NFKD: [0x110C, 0x116A, 0x11B3] }, +{ source: [0xC899], NFC: [0xC899], NFD: [0x110C, 0x116A, 0x11B4], NFKC: [0xC899], NFKD: [0x110C, 0x116A, 0x11B4] }, +{ source: [0xC89A], NFC: [0xC89A], NFD: [0x110C, 0x116A, 0x11B5], NFKC: [0xC89A], NFKD: [0x110C, 0x116A, 0x11B5] }, +{ source: [0xC89B], NFC: [0xC89B], NFD: [0x110C, 0x116A, 0x11B6], NFKC: [0xC89B], NFKD: [0x110C, 0x116A, 0x11B6] }, +{ source: [0xC89C], NFC: [0xC89C], NFD: [0x110C, 0x116A, 0x11B7], NFKC: [0xC89C], NFKD: [0x110C, 0x116A, 0x11B7] }, +{ source: [0xC89D], NFC: [0xC89D], NFD: [0x110C, 0x116A, 0x11B8], NFKC: [0xC89D], NFKD: [0x110C, 0x116A, 0x11B8] }, +{ source: [0xC89E], NFC: [0xC89E], NFD: [0x110C, 0x116A, 0x11B9], NFKC: [0xC89E], NFKD: [0x110C, 0x116A, 0x11B9] }, +{ source: [0xC89F], NFC: [0xC89F], NFD: [0x110C, 0x116A, 0x11BA], NFKC: [0xC89F], NFKD: [0x110C, 0x116A, 0x11BA] }, +{ source: [0xC8A0], NFC: [0xC8A0], NFD: [0x110C, 0x116A, 0x11BB], NFKC: [0xC8A0], NFKD: [0x110C, 0x116A, 0x11BB] }, +{ source: [0xC8A1], NFC: [0xC8A1], NFD: [0x110C, 0x116A, 0x11BC], NFKC: [0xC8A1], NFKD: [0x110C, 0x116A, 0x11BC] }, +{ source: [0xC8A2], NFC: [0xC8A2], NFD: [0x110C, 0x116A, 0x11BD], NFKC: [0xC8A2], NFKD: [0x110C, 0x116A, 0x11BD] }, +{ source: [0xC8A3], NFC: [0xC8A3], NFD: [0x110C, 0x116A, 0x11BE], NFKC: [0xC8A3], NFKD: [0x110C, 0x116A, 0x11BE] }, +{ source: [0xC8A4], NFC: [0xC8A4], NFD: [0x110C, 0x116A, 0x11BF], NFKC: [0xC8A4], NFKD: [0x110C, 0x116A, 0x11BF] }, +{ source: [0xC8A5], NFC: [0xC8A5], NFD: [0x110C, 0x116A, 0x11C0], NFKC: [0xC8A5], NFKD: [0x110C, 0x116A, 0x11C0] }, +{ source: [0xC8A6], NFC: [0xC8A6], NFD: [0x110C, 0x116A, 0x11C1], NFKC: [0xC8A6], NFKD: [0x110C, 0x116A, 0x11C1] }, +{ source: [0xC8A7], NFC: [0xC8A7], NFD: [0x110C, 0x116A, 0x11C2], NFKC: [0xC8A7], NFKD: [0x110C, 0x116A, 0x11C2] }, +{ source: [0xC8A8], NFC: [0xC8A8], NFD: [0x110C, 0x116B], NFKC: [0xC8A8], NFKD: [0x110C, 0x116B] }, +{ source: [0xC8A9], NFC: [0xC8A9], NFD: [0x110C, 0x116B, 0x11A8], NFKC: [0xC8A9], NFKD: [0x110C, 0x116B, 0x11A8] }, +{ source: [0xC8AA], NFC: [0xC8AA], NFD: [0x110C, 0x116B, 0x11A9], NFKC: [0xC8AA], NFKD: [0x110C, 0x116B, 0x11A9] }, +{ source: [0xC8AB], NFC: [0xC8AB], NFD: [0x110C, 0x116B, 0x11AA], NFKC: [0xC8AB], NFKD: [0x110C, 0x116B, 0x11AA] }, +{ source: [0xC8AC], NFC: [0xC8AC], NFD: [0x110C, 0x116B, 0x11AB], NFKC: [0xC8AC], NFKD: [0x110C, 0x116B, 0x11AB] }, +{ source: [0xC8AD], NFC: [0xC8AD], NFD: [0x110C, 0x116B, 0x11AC], NFKC: [0xC8AD], NFKD: [0x110C, 0x116B, 0x11AC] }, +{ source: [0xC8AE], NFC: [0xC8AE], NFD: [0x110C, 0x116B, 0x11AD], NFKC: [0xC8AE], NFKD: [0x110C, 0x116B, 0x11AD] }, +{ source: [0xC8AF], NFC: [0xC8AF], NFD: [0x110C, 0x116B, 0x11AE], NFKC: [0xC8AF], NFKD: [0x110C, 0x116B, 0x11AE] }, +{ source: [0xC8B0], NFC: [0xC8B0], NFD: [0x110C, 0x116B, 0x11AF], NFKC: [0xC8B0], NFKD: [0x110C, 0x116B, 0x11AF] }, +{ source: [0xC8B1], NFC: [0xC8B1], NFD: [0x110C, 0x116B, 0x11B0], NFKC: [0xC8B1], NFKD: [0x110C, 0x116B, 0x11B0] }, +{ source: [0xC8B2], NFC: [0xC8B2], NFD: [0x110C, 0x116B, 0x11B1], NFKC: [0xC8B2], NFKD: [0x110C, 0x116B, 0x11B1] }, +{ source: [0xC8B3], NFC: [0xC8B3], NFD: [0x110C, 0x116B, 0x11B2], NFKC: [0xC8B3], NFKD: [0x110C, 0x116B, 0x11B2] }, +{ source: [0xC8B4], NFC: [0xC8B4], NFD: [0x110C, 0x116B, 0x11B3], NFKC: [0xC8B4], NFKD: [0x110C, 0x116B, 0x11B3] }, +{ source: [0xC8B5], NFC: [0xC8B5], NFD: [0x110C, 0x116B, 0x11B4], NFKC: [0xC8B5], NFKD: [0x110C, 0x116B, 0x11B4] }, +{ source: [0xC8B6], NFC: [0xC8B6], NFD: [0x110C, 0x116B, 0x11B5], NFKC: [0xC8B6], NFKD: [0x110C, 0x116B, 0x11B5] }, +{ source: [0xC8B7], NFC: [0xC8B7], NFD: [0x110C, 0x116B, 0x11B6], NFKC: [0xC8B7], NFKD: [0x110C, 0x116B, 0x11B6] }, +{ source: [0xC8B8], NFC: [0xC8B8], NFD: [0x110C, 0x116B, 0x11B7], NFKC: [0xC8B8], NFKD: [0x110C, 0x116B, 0x11B7] }, +{ source: [0xC8B9], NFC: [0xC8B9], NFD: [0x110C, 0x116B, 0x11B8], NFKC: [0xC8B9], NFKD: [0x110C, 0x116B, 0x11B8] }, +{ source: [0xC8BA], NFC: [0xC8BA], NFD: [0x110C, 0x116B, 0x11B9], NFKC: [0xC8BA], NFKD: [0x110C, 0x116B, 0x11B9] }, +{ source: [0xC8BB], NFC: [0xC8BB], NFD: [0x110C, 0x116B, 0x11BA], NFKC: [0xC8BB], NFKD: [0x110C, 0x116B, 0x11BA] }, +{ source: [0xC8BC], NFC: [0xC8BC], NFD: [0x110C, 0x116B, 0x11BB], NFKC: [0xC8BC], NFKD: [0x110C, 0x116B, 0x11BB] }, +{ source: [0xC8BD], NFC: [0xC8BD], NFD: [0x110C, 0x116B, 0x11BC], NFKC: [0xC8BD], NFKD: [0x110C, 0x116B, 0x11BC] }, +{ source: [0xC8BE], NFC: [0xC8BE], NFD: [0x110C, 0x116B, 0x11BD], NFKC: [0xC8BE], NFKD: [0x110C, 0x116B, 0x11BD] }, +{ source: [0xC8BF], NFC: [0xC8BF], NFD: [0x110C, 0x116B, 0x11BE], NFKC: [0xC8BF], NFKD: [0x110C, 0x116B, 0x11BE] }, +{ source: [0xC8C0], NFC: [0xC8C0], NFD: [0x110C, 0x116B, 0x11BF], NFKC: [0xC8C0], NFKD: [0x110C, 0x116B, 0x11BF] }, +{ source: [0xC8C1], NFC: [0xC8C1], NFD: [0x110C, 0x116B, 0x11C0], NFKC: [0xC8C1], NFKD: [0x110C, 0x116B, 0x11C0] }, +{ source: [0xC8C2], NFC: [0xC8C2], NFD: [0x110C, 0x116B, 0x11C1], NFKC: [0xC8C2], NFKD: [0x110C, 0x116B, 0x11C1] }, +{ source: [0xC8C3], NFC: [0xC8C3], NFD: [0x110C, 0x116B, 0x11C2], NFKC: [0xC8C3], NFKD: [0x110C, 0x116B, 0x11C2] }, +{ source: [0xC8C4], NFC: [0xC8C4], NFD: [0x110C, 0x116C], NFKC: [0xC8C4], NFKD: [0x110C, 0x116C] }, +{ source: [0xC8C5], NFC: [0xC8C5], NFD: [0x110C, 0x116C, 0x11A8], NFKC: [0xC8C5], NFKD: [0x110C, 0x116C, 0x11A8] }, +{ source: [0xC8C6], NFC: [0xC8C6], NFD: [0x110C, 0x116C, 0x11A9], NFKC: [0xC8C6], NFKD: [0x110C, 0x116C, 0x11A9] }, +{ source: [0xC8C7], NFC: [0xC8C7], NFD: [0x110C, 0x116C, 0x11AA], NFKC: [0xC8C7], NFKD: [0x110C, 0x116C, 0x11AA] }, +{ source: [0xC8C8], NFC: [0xC8C8], NFD: [0x110C, 0x116C, 0x11AB], NFKC: [0xC8C8], NFKD: [0x110C, 0x116C, 0x11AB] }, +{ source: [0xC8C9], NFC: [0xC8C9], NFD: [0x110C, 0x116C, 0x11AC], NFKC: [0xC8C9], NFKD: [0x110C, 0x116C, 0x11AC] }, +{ source: [0xC8CA], NFC: [0xC8CA], NFD: [0x110C, 0x116C, 0x11AD], NFKC: [0xC8CA], NFKD: [0x110C, 0x116C, 0x11AD] }, +{ source: [0xC8CB], NFC: [0xC8CB], NFD: [0x110C, 0x116C, 0x11AE], NFKC: [0xC8CB], NFKD: [0x110C, 0x116C, 0x11AE] }, +{ source: [0xC8CC], NFC: [0xC8CC], NFD: [0x110C, 0x116C, 0x11AF], NFKC: [0xC8CC], NFKD: [0x110C, 0x116C, 0x11AF] }, +{ source: [0xC8CD], NFC: [0xC8CD], NFD: [0x110C, 0x116C, 0x11B0], NFKC: [0xC8CD], NFKD: [0x110C, 0x116C, 0x11B0] }, +{ source: [0xC8CE], NFC: [0xC8CE], NFD: [0x110C, 0x116C, 0x11B1], NFKC: [0xC8CE], NFKD: [0x110C, 0x116C, 0x11B1] }, +{ source: [0xC8CF], NFC: [0xC8CF], NFD: [0x110C, 0x116C, 0x11B2], NFKC: [0xC8CF], NFKD: [0x110C, 0x116C, 0x11B2] }, +{ source: [0xC8D0], NFC: [0xC8D0], NFD: [0x110C, 0x116C, 0x11B3], NFKC: [0xC8D0], NFKD: [0x110C, 0x116C, 0x11B3] }, +{ source: [0xC8D1], NFC: [0xC8D1], NFD: [0x110C, 0x116C, 0x11B4], NFKC: [0xC8D1], NFKD: [0x110C, 0x116C, 0x11B4] }, +{ source: [0xC8D2], NFC: [0xC8D2], NFD: [0x110C, 0x116C, 0x11B5], NFKC: [0xC8D2], NFKD: [0x110C, 0x116C, 0x11B5] }, +{ source: [0xC8D3], NFC: [0xC8D3], NFD: [0x110C, 0x116C, 0x11B6], NFKC: [0xC8D3], NFKD: [0x110C, 0x116C, 0x11B6] }, +{ source: [0xC8D4], NFC: [0xC8D4], NFD: [0x110C, 0x116C, 0x11B7], NFKC: [0xC8D4], NFKD: [0x110C, 0x116C, 0x11B7] }, +{ source: [0xC8D5], NFC: [0xC8D5], NFD: [0x110C, 0x116C, 0x11B8], NFKC: [0xC8D5], NFKD: [0x110C, 0x116C, 0x11B8] }, +{ source: [0xC8D6], NFC: [0xC8D6], NFD: [0x110C, 0x116C, 0x11B9], NFKC: [0xC8D6], NFKD: [0x110C, 0x116C, 0x11B9] }, +{ source: [0xC8D7], NFC: [0xC8D7], NFD: [0x110C, 0x116C, 0x11BA], NFKC: [0xC8D7], NFKD: [0x110C, 0x116C, 0x11BA] }, +{ source: [0xC8D8], NFC: [0xC8D8], NFD: [0x110C, 0x116C, 0x11BB], NFKC: [0xC8D8], NFKD: [0x110C, 0x116C, 0x11BB] }, +{ source: [0xC8D9], NFC: [0xC8D9], NFD: [0x110C, 0x116C, 0x11BC], NFKC: [0xC8D9], NFKD: [0x110C, 0x116C, 0x11BC] }, +{ source: [0xC8DA], NFC: [0xC8DA], NFD: [0x110C, 0x116C, 0x11BD], NFKC: [0xC8DA], NFKD: [0x110C, 0x116C, 0x11BD] }, +{ source: [0xC8DB], NFC: [0xC8DB], NFD: [0x110C, 0x116C, 0x11BE], NFKC: [0xC8DB], NFKD: [0x110C, 0x116C, 0x11BE] }, +{ source: [0xC8DC], NFC: [0xC8DC], NFD: [0x110C, 0x116C, 0x11BF], NFKC: [0xC8DC], NFKD: [0x110C, 0x116C, 0x11BF] }, +{ source: [0xC8DD], NFC: [0xC8DD], NFD: [0x110C, 0x116C, 0x11C0], NFKC: [0xC8DD], NFKD: [0x110C, 0x116C, 0x11C0] }, +{ source: [0xC8DE], NFC: [0xC8DE], NFD: [0x110C, 0x116C, 0x11C1], NFKC: [0xC8DE], NFKD: [0x110C, 0x116C, 0x11C1] }, +{ source: [0xC8DF], NFC: [0xC8DF], NFD: [0x110C, 0x116C, 0x11C2], NFKC: [0xC8DF], NFKD: [0x110C, 0x116C, 0x11C2] }, +{ source: [0xC8E0], NFC: [0xC8E0], NFD: [0x110C, 0x116D], NFKC: [0xC8E0], NFKD: [0x110C, 0x116D] }, +{ source: [0xC8E1], NFC: [0xC8E1], NFD: [0x110C, 0x116D, 0x11A8], NFKC: [0xC8E1], NFKD: [0x110C, 0x116D, 0x11A8] }, +{ source: [0xC8E2], NFC: [0xC8E2], NFD: [0x110C, 0x116D, 0x11A9], NFKC: [0xC8E2], NFKD: [0x110C, 0x116D, 0x11A9] }, +{ source: [0xC8E3], NFC: [0xC8E3], NFD: [0x110C, 0x116D, 0x11AA], NFKC: [0xC8E3], NFKD: [0x110C, 0x116D, 0x11AA] }, +{ source: [0xC8E4], NFC: [0xC8E4], NFD: [0x110C, 0x116D, 0x11AB], NFKC: [0xC8E4], NFKD: [0x110C, 0x116D, 0x11AB] }, +{ source: [0xC8E5], NFC: [0xC8E5], NFD: [0x110C, 0x116D, 0x11AC], NFKC: [0xC8E5], NFKD: [0x110C, 0x116D, 0x11AC] }, +{ source: [0xC8E6], NFC: [0xC8E6], NFD: [0x110C, 0x116D, 0x11AD], NFKC: [0xC8E6], NFKD: [0x110C, 0x116D, 0x11AD] }, +{ source: [0xC8E7], NFC: [0xC8E7], NFD: [0x110C, 0x116D, 0x11AE], NFKC: [0xC8E7], NFKD: [0x110C, 0x116D, 0x11AE] }, +{ source: [0xC8E8], NFC: [0xC8E8], NFD: [0x110C, 0x116D, 0x11AF], NFKC: [0xC8E8], NFKD: [0x110C, 0x116D, 0x11AF] }, +{ source: [0xC8E9], NFC: [0xC8E9], NFD: [0x110C, 0x116D, 0x11B0], NFKC: [0xC8E9], NFKD: [0x110C, 0x116D, 0x11B0] }, +{ source: [0xC8EA], NFC: [0xC8EA], NFD: [0x110C, 0x116D, 0x11B1], NFKC: [0xC8EA], NFKD: [0x110C, 0x116D, 0x11B1] }, +{ source: [0xC8EB], NFC: [0xC8EB], NFD: [0x110C, 0x116D, 0x11B2], NFKC: [0xC8EB], NFKD: [0x110C, 0x116D, 0x11B2] }, +{ source: [0xC8EC], NFC: [0xC8EC], NFD: [0x110C, 0x116D, 0x11B3], NFKC: [0xC8EC], NFKD: [0x110C, 0x116D, 0x11B3] }, +{ source: [0xC8ED], NFC: [0xC8ED], NFD: [0x110C, 0x116D, 0x11B4], NFKC: [0xC8ED], NFKD: [0x110C, 0x116D, 0x11B4] }, +{ source: [0xC8EE], NFC: [0xC8EE], NFD: [0x110C, 0x116D, 0x11B5], NFKC: [0xC8EE], NFKD: [0x110C, 0x116D, 0x11B5] }, +{ source: [0xC8EF], NFC: [0xC8EF], NFD: [0x110C, 0x116D, 0x11B6], NFKC: [0xC8EF], NFKD: [0x110C, 0x116D, 0x11B6] }, +{ source: [0xC8F0], NFC: [0xC8F0], NFD: [0x110C, 0x116D, 0x11B7], NFKC: [0xC8F0], NFKD: [0x110C, 0x116D, 0x11B7] }, +{ source: [0xC8F1], NFC: [0xC8F1], NFD: [0x110C, 0x116D, 0x11B8], NFKC: [0xC8F1], NFKD: [0x110C, 0x116D, 0x11B8] }, +{ source: [0xC8F2], NFC: [0xC8F2], NFD: [0x110C, 0x116D, 0x11B9], NFKC: [0xC8F2], NFKD: [0x110C, 0x116D, 0x11B9] }, +{ source: [0xC8F3], NFC: [0xC8F3], NFD: [0x110C, 0x116D, 0x11BA], NFKC: [0xC8F3], NFKD: [0x110C, 0x116D, 0x11BA] }, +{ source: [0xC8F4], NFC: [0xC8F4], NFD: [0x110C, 0x116D, 0x11BB], NFKC: [0xC8F4], NFKD: [0x110C, 0x116D, 0x11BB] }, +{ source: [0xC8F5], NFC: [0xC8F5], NFD: [0x110C, 0x116D, 0x11BC], NFKC: [0xC8F5], NFKD: [0x110C, 0x116D, 0x11BC] }, +{ source: [0xC8F6], NFC: [0xC8F6], NFD: [0x110C, 0x116D, 0x11BD], NFKC: [0xC8F6], NFKD: [0x110C, 0x116D, 0x11BD] }, +{ source: [0xC8F7], NFC: [0xC8F7], NFD: [0x110C, 0x116D, 0x11BE], NFKC: [0xC8F7], NFKD: [0x110C, 0x116D, 0x11BE] }, +{ source: [0xC8F8], NFC: [0xC8F8], NFD: [0x110C, 0x116D, 0x11BF], NFKC: [0xC8F8], NFKD: [0x110C, 0x116D, 0x11BF] }, +{ source: [0xC8F9], NFC: [0xC8F9], NFD: [0x110C, 0x116D, 0x11C0], NFKC: [0xC8F9], NFKD: [0x110C, 0x116D, 0x11C0] }, +{ source: [0xC8FA], NFC: [0xC8FA], NFD: [0x110C, 0x116D, 0x11C1], NFKC: [0xC8FA], NFKD: [0x110C, 0x116D, 0x11C1] }, +{ source: [0xC8FB], NFC: [0xC8FB], NFD: [0x110C, 0x116D, 0x11C2], NFKC: [0xC8FB], NFKD: [0x110C, 0x116D, 0x11C2] }, +{ source: [0xC8FC], NFC: [0xC8FC], NFD: [0x110C, 0x116E], NFKC: [0xC8FC], NFKD: [0x110C, 0x116E] }, +{ source: [0xC8FD], NFC: [0xC8FD], NFD: [0x110C, 0x116E, 0x11A8], NFKC: [0xC8FD], NFKD: [0x110C, 0x116E, 0x11A8] }, +{ source: [0xC8FE], NFC: [0xC8FE], NFD: [0x110C, 0x116E, 0x11A9], NFKC: [0xC8FE], NFKD: [0x110C, 0x116E, 0x11A9] }, +{ source: [0xC8FF], NFC: [0xC8FF], NFD: [0x110C, 0x116E, 0x11AA], NFKC: [0xC8FF], NFKD: [0x110C, 0x116E, 0x11AA] }, +{ source: [0xC900], NFC: [0xC900], NFD: [0x110C, 0x116E, 0x11AB], NFKC: [0xC900], NFKD: [0x110C, 0x116E, 0x11AB] }, +{ source: [0xC901], NFC: [0xC901], NFD: [0x110C, 0x116E, 0x11AC], NFKC: [0xC901], NFKD: [0x110C, 0x116E, 0x11AC] }, +{ source: [0xC902], NFC: [0xC902], NFD: [0x110C, 0x116E, 0x11AD], NFKC: [0xC902], NFKD: [0x110C, 0x116E, 0x11AD] }, +{ source: [0xC903], NFC: [0xC903], NFD: [0x110C, 0x116E, 0x11AE], NFKC: [0xC903], NFKD: [0x110C, 0x116E, 0x11AE] }, +{ source: [0xC904], NFC: [0xC904], NFD: [0x110C, 0x116E, 0x11AF], NFKC: [0xC904], NFKD: [0x110C, 0x116E, 0x11AF] }, +{ source: [0xC905], NFC: [0xC905], NFD: [0x110C, 0x116E, 0x11B0], NFKC: [0xC905], NFKD: [0x110C, 0x116E, 0x11B0] }, +{ source: [0xC906], NFC: [0xC906], NFD: [0x110C, 0x116E, 0x11B1], NFKC: [0xC906], NFKD: [0x110C, 0x116E, 0x11B1] }, +{ source: [0xC907], NFC: [0xC907], NFD: [0x110C, 0x116E, 0x11B2], NFKC: [0xC907], NFKD: [0x110C, 0x116E, 0x11B2] }, +{ source: [0xC908], NFC: [0xC908], NFD: [0x110C, 0x116E, 0x11B3], NFKC: [0xC908], NFKD: [0x110C, 0x116E, 0x11B3] }, +{ source: [0xC909], NFC: [0xC909], NFD: [0x110C, 0x116E, 0x11B4], NFKC: [0xC909], NFKD: [0x110C, 0x116E, 0x11B4] }, +{ source: [0xC90A], NFC: [0xC90A], NFD: [0x110C, 0x116E, 0x11B5], NFKC: [0xC90A], NFKD: [0x110C, 0x116E, 0x11B5] }, +{ source: [0xC90B], NFC: [0xC90B], NFD: [0x110C, 0x116E, 0x11B6], NFKC: [0xC90B], NFKD: [0x110C, 0x116E, 0x11B6] }, +{ source: [0xC90C], NFC: [0xC90C], NFD: [0x110C, 0x116E, 0x11B7], NFKC: [0xC90C], NFKD: [0x110C, 0x116E, 0x11B7] }, +{ source: [0xC90D], NFC: [0xC90D], NFD: [0x110C, 0x116E, 0x11B8], NFKC: [0xC90D], NFKD: [0x110C, 0x116E, 0x11B8] }, +{ source: [0xC90E], NFC: [0xC90E], NFD: [0x110C, 0x116E, 0x11B9], NFKC: [0xC90E], NFKD: [0x110C, 0x116E, 0x11B9] }, +{ source: [0xC90F], NFC: [0xC90F], NFD: [0x110C, 0x116E, 0x11BA], NFKC: [0xC90F], NFKD: [0x110C, 0x116E, 0x11BA] }, +{ source: [0xC910], NFC: [0xC910], NFD: [0x110C, 0x116E, 0x11BB], NFKC: [0xC910], NFKD: [0x110C, 0x116E, 0x11BB] }, +{ source: [0xC911], NFC: [0xC911], NFD: [0x110C, 0x116E, 0x11BC], NFKC: [0xC911], NFKD: [0x110C, 0x116E, 0x11BC] }, +{ source: [0xC912], NFC: [0xC912], NFD: [0x110C, 0x116E, 0x11BD], NFKC: [0xC912], NFKD: [0x110C, 0x116E, 0x11BD] }, +{ source: [0xC913], NFC: [0xC913], NFD: [0x110C, 0x116E, 0x11BE], NFKC: [0xC913], NFKD: [0x110C, 0x116E, 0x11BE] }, +{ source: [0xC914], NFC: [0xC914], NFD: [0x110C, 0x116E, 0x11BF], NFKC: [0xC914], NFKD: [0x110C, 0x116E, 0x11BF] }, +{ source: [0xC915], NFC: [0xC915], NFD: [0x110C, 0x116E, 0x11C0], NFKC: [0xC915], NFKD: [0x110C, 0x116E, 0x11C0] }, +{ source: [0xC916], NFC: [0xC916], NFD: [0x110C, 0x116E, 0x11C1], NFKC: [0xC916], NFKD: [0x110C, 0x116E, 0x11C1] }, +{ source: [0xC917], NFC: [0xC917], NFD: [0x110C, 0x116E, 0x11C2], NFKC: [0xC917], NFKD: [0x110C, 0x116E, 0x11C2] }, +{ source: [0xC918], NFC: [0xC918], NFD: [0x110C, 0x116F], NFKC: [0xC918], NFKD: [0x110C, 0x116F] }, +{ source: [0xC919], NFC: [0xC919], NFD: [0x110C, 0x116F, 0x11A8], NFKC: [0xC919], NFKD: [0x110C, 0x116F, 0x11A8] }, +{ source: [0xC91A], NFC: [0xC91A], NFD: [0x110C, 0x116F, 0x11A9], NFKC: [0xC91A], NFKD: [0x110C, 0x116F, 0x11A9] }, +{ source: [0xC91B], NFC: [0xC91B], NFD: [0x110C, 0x116F, 0x11AA], NFKC: [0xC91B], NFKD: [0x110C, 0x116F, 0x11AA] }, +{ source: [0xC91C], NFC: [0xC91C], NFD: [0x110C, 0x116F, 0x11AB], NFKC: [0xC91C], NFKD: [0x110C, 0x116F, 0x11AB] }, +{ source: [0xC91D], NFC: [0xC91D], NFD: [0x110C, 0x116F, 0x11AC], NFKC: [0xC91D], NFKD: [0x110C, 0x116F, 0x11AC] }, +{ source: [0xC91E], NFC: [0xC91E], NFD: [0x110C, 0x116F, 0x11AD], NFKC: [0xC91E], NFKD: [0x110C, 0x116F, 0x11AD] }, +{ source: [0xC91F], NFC: [0xC91F], NFD: [0x110C, 0x116F, 0x11AE], NFKC: [0xC91F], NFKD: [0x110C, 0x116F, 0x11AE] }, +{ source: [0xC920], NFC: [0xC920], NFD: [0x110C, 0x116F, 0x11AF], NFKC: [0xC920], NFKD: [0x110C, 0x116F, 0x11AF] }, +{ source: [0xC921], NFC: [0xC921], NFD: [0x110C, 0x116F, 0x11B0], NFKC: [0xC921], NFKD: [0x110C, 0x116F, 0x11B0] }, +{ source: [0xC922], NFC: [0xC922], NFD: [0x110C, 0x116F, 0x11B1], NFKC: [0xC922], NFKD: [0x110C, 0x116F, 0x11B1] }, +{ source: [0xC923], NFC: [0xC923], NFD: [0x110C, 0x116F, 0x11B2], NFKC: [0xC923], NFKD: [0x110C, 0x116F, 0x11B2] }, +{ source: [0xC924], NFC: [0xC924], NFD: [0x110C, 0x116F, 0x11B3], NFKC: [0xC924], NFKD: [0x110C, 0x116F, 0x11B3] }, +{ source: [0xC925], NFC: [0xC925], NFD: [0x110C, 0x116F, 0x11B4], NFKC: [0xC925], NFKD: [0x110C, 0x116F, 0x11B4] }, +{ source: [0xC926], NFC: [0xC926], NFD: [0x110C, 0x116F, 0x11B5], NFKC: [0xC926], NFKD: [0x110C, 0x116F, 0x11B5] }, +{ source: [0xC927], NFC: [0xC927], NFD: [0x110C, 0x116F, 0x11B6], NFKC: [0xC927], NFKD: [0x110C, 0x116F, 0x11B6] }, +{ source: [0xC928], NFC: [0xC928], NFD: [0x110C, 0x116F, 0x11B7], NFKC: [0xC928], NFKD: [0x110C, 0x116F, 0x11B7] }, +{ source: [0xC929], NFC: [0xC929], NFD: [0x110C, 0x116F, 0x11B8], NFKC: [0xC929], NFKD: [0x110C, 0x116F, 0x11B8] }, +{ source: [0xC92A], NFC: [0xC92A], NFD: [0x110C, 0x116F, 0x11B9], NFKC: [0xC92A], NFKD: [0x110C, 0x116F, 0x11B9] }, +{ source: [0xC92B], NFC: [0xC92B], NFD: [0x110C, 0x116F, 0x11BA], NFKC: [0xC92B], NFKD: [0x110C, 0x116F, 0x11BA] }, +{ source: [0xC92C], NFC: [0xC92C], NFD: [0x110C, 0x116F, 0x11BB], NFKC: [0xC92C], NFKD: [0x110C, 0x116F, 0x11BB] }, +{ source: [0xC92D], NFC: [0xC92D], NFD: [0x110C, 0x116F, 0x11BC], NFKC: [0xC92D], NFKD: [0x110C, 0x116F, 0x11BC] }, +{ source: [0xC92E], NFC: [0xC92E], NFD: [0x110C, 0x116F, 0x11BD], NFKC: [0xC92E], NFKD: [0x110C, 0x116F, 0x11BD] }, +{ source: [0xC92F], NFC: [0xC92F], NFD: [0x110C, 0x116F, 0x11BE], NFKC: [0xC92F], NFKD: [0x110C, 0x116F, 0x11BE] }, +{ source: [0xC930], NFC: [0xC930], NFD: [0x110C, 0x116F, 0x11BF], NFKC: [0xC930], NFKD: [0x110C, 0x116F, 0x11BF] }, +{ source: [0xC931], NFC: [0xC931], NFD: [0x110C, 0x116F, 0x11C0], NFKC: [0xC931], NFKD: [0x110C, 0x116F, 0x11C0] }, +{ source: [0xC932], NFC: [0xC932], NFD: [0x110C, 0x116F, 0x11C1], NFKC: [0xC932], NFKD: [0x110C, 0x116F, 0x11C1] }, +{ source: [0xC933], NFC: [0xC933], NFD: [0x110C, 0x116F, 0x11C2], NFKC: [0xC933], NFKD: [0x110C, 0x116F, 0x11C2] }, +{ source: [0xC934], NFC: [0xC934], NFD: [0x110C, 0x1170], NFKC: [0xC934], NFKD: [0x110C, 0x1170] }, +{ source: [0xC935], NFC: [0xC935], NFD: [0x110C, 0x1170, 0x11A8], NFKC: [0xC935], NFKD: [0x110C, 0x1170, 0x11A8] }, +{ source: [0xC936], NFC: [0xC936], NFD: [0x110C, 0x1170, 0x11A9], NFKC: [0xC936], NFKD: [0x110C, 0x1170, 0x11A9] }, +{ source: [0xC937], NFC: [0xC937], NFD: [0x110C, 0x1170, 0x11AA], NFKC: [0xC937], NFKD: [0x110C, 0x1170, 0x11AA] }, +{ source: [0xC938], NFC: [0xC938], NFD: [0x110C, 0x1170, 0x11AB], NFKC: [0xC938], NFKD: [0x110C, 0x1170, 0x11AB] }, +{ source: [0xC939], NFC: [0xC939], NFD: [0x110C, 0x1170, 0x11AC], NFKC: [0xC939], NFKD: [0x110C, 0x1170, 0x11AC] }, +{ source: [0xC93A], NFC: [0xC93A], NFD: [0x110C, 0x1170, 0x11AD], NFKC: [0xC93A], NFKD: [0x110C, 0x1170, 0x11AD] }, +{ source: [0xC93B], NFC: [0xC93B], NFD: [0x110C, 0x1170, 0x11AE], NFKC: [0xC93B], NFKD: [0x110C, 0x1170, 0x11AE] }, +{ source: [0xC93C], NFC: [0xC93C], NFD: [0x110C, 0x1170, 0x11AF], NFKC: [0xC93C], NFKD: [0x110C, 0x1170, 0x11AF] }, +{ source: [0xC93D], NFC: [0xC93D], NFD: [0x110C, 0x1170, 0x11B0], NFKC: [0xC93D], NFKD: [0x110C, 0x1170, 0x11B0] }, +{ source: [0xC93E], NFC: [0xC93E], NFD: [0x110C, 0x1170, 0x11B1], NFKC: [0xC93E], NFKD: [0x110C, 0x1170, 0x11B1] }, +{ source: [0xC93F], NFC: [0xC93F], NFD: [0x110C, 0x1170, 0x11B2], NFKC: [0xC93F], NFKD: [0x110C, 0x1170, 0x11B2] }, +{ source: [0xC940], NFC: [0xC940], NFD: [0x110C, 0x1170, 0x11B3], NFKC: [0xC940], NFKD: [0x110C, 0x1170, 0x11B3] }, +{ source: [0xC941], NFC: [0xC941], NFD: [0x110C, 0x1170, 0x11B4], NFKC: [0xC941], NFKD: [0x110C, 0x1170, 0x11B4] }, +{ source: [0xC942], NFC: [0xC942], NFD: [0x110C, 0x1170, 0x11B5], NFKC: [0xC942], NFKD: [0x110C, 0x1170, 0x11B5] }, +{ source: [0xC943], NFC: [0xC943], NFD: [0x110C, 0x1170, 0x11B6], NFKC: [0xC943], NFKD: [0x110C, 0x1170, 0x11B6] }, +{ source: [0xC944], NFC: [0xC944], NFD: [0x110C, 0x1170, 0x11B7], NFKC: [0xC944], NFKD: [0x110C, 0x1170, 0x11B7] }, +{ source: [0xC945], NFC: [0xC945], NFD: [0x110C, 0x1170, 0x11B8], NFKC: [0xC945], NFKD: [0x110C, 0x1170, 0x11B8] }, +{ source: [0xC946], NFC: [0xC946], NFD: [0x110C, 0x1170, 0x11B9], NFKC: [0xC946], NFKD: [0x110C, 0x1170, 0x11B9] }, +{ source: [0xC947], NFC: [0xC947], NFD: [0x110C, 0x1170, 0x11BA], NFKC: [0xC947], NFKD: [0x110C, 0x1170, 0x11BA] }, +{ source: [0xC948], NFC: [0xC948], NFD: [0x110C, 0x1170, 0x11BB], NFKC: [0xC948], NFKD: [0x110C, 0x1170, 0x11BB] }, +{ source: [0xC949], NFC: [0xC949], NFD: [0x110C, 0x1170, 0x11BC], NFKC: [0xC949], NFKD: [0x110C, 0x1170, 0x11BC] }, +{ source: [0xC94A], NFC: [0xC94A], NFD: [0x110C, 0x1170, 0x11BD], NFKC: [0xC94A], NFKD: [0x110C, 0x1170, 0x11BD] }, +{ source: [0xC94B], NFC: [0xC94B], NFD: [0x110C, 0x1170, 0x11BE], NFKC: [0xC94B], NFKD: [0x110C, 0x1170, 0x11BE] }, +{ source: [0xC94C], NFC: [0xC94C], NFD: [0x110C, 0x1170, 0x11BF], NFKC: [0xC94C], NFKD: [0x110C, 0x1170, 0x11BF] }, +{ source: [0xC94D], NFC: [0xC94D], NFD: [0x110C, 0x1170, 0x11C0], NFKC: [0xC94D], NFKD: [0x110C, 0x1170, 0x11C0] }, +{ source: [0xC94E], NFC: [0xC94E], NFD: [0x110C, 0x1170, 0x11C1], NFKC: [0xC94E], NFKD: [0x110C, 0x1170, 0x11C1] }, +{ source: [0xC94F], NFC: [0xC94F], NFD: [0x110C, 0x1170, 0x11C2], NFKC: [0xC94F], NFKD: [0x110C, 0x1170, 0x11C2] }, +{ source: [0xC950], NFC: [0xC950], NFD: [0x110C, 0x1171], NFKC: [0xC950], NFKD: [0x110C, 0x1171] }, +{ source: [0xC951], NFC: [0xC951], NFD: [0x110C, 0x1171, 0x11A8], NFKC: [0xC951], NFKD: [0x110C, 0x1171, 0x11A8] }, +{ source: [0xC952], NFC: [0xC952], NFD: [0x110C, 0x1171, 0x11A9], NFKC: [0xC952], NFKD: [0x110C, 0x1171, 0x11A9] }, +{ source: [0xC953], NFC: [0xC953], NFD: [0x110C, 0x1171, 0x11AA], NFKC: [0xC953], NFKD: [0x110C, 0x1171, 0x11AA] }, +{ source: [0xC954], NFC: [0xC954], NFD: [0x110C, 0x1171, 0x11AB], NFKC: [0xC954], NFKD: [0x110C, 0x1171, 0x11AB] }, +{ source: [0xC955], NFC: [0xC955], NFD: [0x110C, 0x1171, 0x11AC], NFKC: [0xC955], NFKD: [0x110C, 0x1171, 0x11AC] }, +{ source: [0xC956], NFC: [0xC956], NFD: [0x110C, 0x1171, 0x11AD], NFKC: [0xC956], NFKD: [0x110C, 0x1171, 0x11AD] }, +{ source: [0xC957], NFC: [0xC957], NFD: [0x110C, 0x1171, 0x11AE], NFKC: [0xC957], NFKD: [0x110C, 0x1171, 0x11AE] }, +{ source: [0xC958], NFC: [0xC958], NFD: [0x110C, 0x1171, 0x11AF], NFKC: [0xC958], NFKD: [0x110C, 0x1171, 0x11AF] }, +{ source: [0xC959], NFC: [0xC959], NFD: [0x110C, 0x1171, 0x11B0], NFKC: [0xC959], NFKD: [0x110C, 0x1171, 0x11B0] }, +{ source: [0xC95A], NFC: [0xC95A], NFD: [0x110C, 0x1171, 0x11B1], NFKC: [0xC95A], NFKD: [0x110C, 0x1171, 0x11B1] }, +{ source: [0xC95B], NFC: [0xC95B], NFD: [0x110C, 0x1171, 0x11B2], NFKC: [0xC95B], NFKD: [0x110C, 0x1171, 0x11B2] }, +{ source: [0xC95C], NFC: [0xC95C], NFD: [0x110C, 0x1171, 0x11B3], NFKC: [0xC95C], NFKD: [0x110C, 0x1171, 0x11B3] }, +{ source: [0xC95D], NFC: [0xC95D], NFD: [0x110C, 0x1171, 0x11B4], NFKC: [0xC95D], NFKD: [0x110C, 0x1171, 0x11B4] }, +{ source: [0xC95E], NFC: [0xC95E], NFD: [0x110C, 0x1171, 0x11B5], NFKC: [0xC95E], NFKD: [0x110C, 0x1171, 0x11B5] }, +{ source: [0xC95F], NFC: [0xC95F], NFD: [0x110C, 0x1171, 0x11B6], NFKC: [0xC95F], NFKD: [0x110C, 0x1171, 0x11B6] }, +{ source: [0xC960], NFC: [0xC960], NFD: [0x110C, 0x1171, 0x11B7], NFKC: [0xC960], NFKD: [0x110C, 0x1171, 0x11B7] }, +{ source: [0xC961], NFC: [0xC961], NFD: [0x110C, 0x1171, 0x11B8], NFKC: [0xC961], NFKD: [0x110C, 0x1171, 0x11B8] }, +{ source: [0xC962], NFC: [0xC962], NFD: [0x110C, 0x1171, 0x11B9], NFKC: [0xC962], NFKD: [0x110C, 0x1171, 0x11B9] }, +{ source: [0xC963], NFC: [0xC963], NFD: [0x110C, 0x1171, 0x11BA], NFKC: [0xC963], NFKD: [0x110C, 0x1171, 0x11BA] }, +{ source: [0xC964], NFC: [0xC964], NFD: [0x110C, 0x1171, 0x11BB], NFKC: [0xC964], NFKD: [0x110C, 0x1171, 0x11BB] }, +{ source: [0xC965], NFC: [0xC965], NFD: [0x110C, 0x1171, 0x11BC], NFKC: [0xC965], NFKD: [0x110C, 0x1171, 0x11BC] }, +{ source: [0xC966], NFC: [0xC966], NFD: [0x110C, 0x1171, 0x11BD], NFKC: [0xC966], NFKD: [0x110C, 0x1171, 0x11BD] }, +{ source: [0xC967], NFC: [0xC967], NFD: [0x110C, 0x1171, 0x11BE], NFKC: [0xC967], NFKD: [0x110C, 0x1171, 0x11BE] }, +{ source: [0xC968], NFC: [0xC968], NFD: [0x110C, 0x1171, 0x11BF], NFKC: [0xC968], NFKD: [0x110C, 0x1171, 0x11BF] }, +{ source: [0xC969], NFC: [0xC969], NFD: [0x110C, 0x1171, 0x11C0], NFKC: [0xC969], NFKD: [0x110C, 0x1171, 0x11C0] }, +{ source: [0xC96A], NFC: [0xC96A], NFD: [0x110C, 0x1171, 0x11C1], NFKC: [0xC96A], NFKD: [0x110C, 0x1171, 0x11C1] }, +{ source: [0xC96B], NFC: [0xC96B], NFD: [0x110C, 0x1171, 0x11C2], NFKC: [0xC96B], NFKD: [0x110C, 0x1171, 0x11C2] }, +{ source: [0xC96C], NFC: [0xC96C], NFD: [0x110C, 0x1172], NFKC: [0xC96C], NFKD: [0x110C, 0x1172] }, +{ source: [0xC96D], NFC: [0xC96D], NFD: [0x110C, 0x1172, 0x11A8], NFKC: [0xC96D], NFKD: [0x110C, 0x1172, 0x11A8] }, +{ source: [0xC96E], NFC: [0xC96E], NFD: [0x110C, 0x1172, 0x11A9], NFKC: [0xC96E], NFKD: [0x110C, 0x1172, 0x11A9] }, +{ source: [0xC96F], NFC: [0xC96F], NFD: [0x110C, 0x1172, 0x11AA], NFKC: [0xC96F], NFKD: [0x110C, 0x1172, 0x11AA] }, +{ source: [0xC970], NFC: [0xC970], NFD: [0x110C, 0x1172, 0x11AB], NFKC: [0xC970], NFKD: [0x110C, 0x1172, 0x11AB] }, +{ source: [0xC971], NFC: [0xC971], NFD: [0x110C, 0x1172, 0x11AC], NFKC: [0xC971], NFKD: [0x110C, 0x1172, 0x11AC] }, +{ source: [0xC972], NFC: [0xC972], NFD: [0x110C, 0x1172, 0x11AD], NFKC: [0xC972], NFKD: [0x110C, 0x1172, 0x11AD] }, +{ source: [0xC973], NFC: [0xC973], NFD: [0x110C, 0x1172, 0x11AE], NFKC: [0xC973], NFKD: [0x110C, 0x1172, 0x11AE] }, +{ source: [0xC974], NFC: [0xC974], NFD: [0x110C, 0x1172, 0x11AF], NFKC: [0xC974], NFKD: [0x110C, 0x1172, 0x11AF] }, +{ source: [0xC975], NFC: [0xC975], NFD: [0x110C, 0x1172, 0x11B0], NFKC: [0xC975], NFKD: [0x110C, 0x1172, 0x11B0] }, +{ source: [0xC976], NFC: [0xC976], NFD: [0x110C, 0x1172, 0x11B1], NFKC: [0xC976], NFKD: [0x110C, 0x1172, 0x11B1] }, +{ source: [0xC977], NFC: [0xC977], NFD: [0x110C, 0x1172, 0x11B2], NFKC: [0xC977], NFKD: [0x110C, 0x1172, 0x11B2] }, +{ source: [0xC978], NFC: [0xC978], NFD: [0x110C, 0x1172, 0x11B3], NFKC: [0xC978], NFKD: [0x110C, 0x1172, 0x11B3] }, +{ source: [0xC979], NFC: [0xC979], NFD: [0x110C, 0x1172, 0x11B4], NFKC: [0xC979], NFKD: [0x110C, 0x1172, 0x11B4] }, +{ source: [0xC97A], NFC: [0xC97A], NFD: [0x110C, 0x1172, 0x11B5], NFKC: [0xC97A], NFKD: [0x110C, 0x1172, 0x11B5] }, +{ source: [0xC97B], NFC: [0xC97B], NFD: [0x110C, 0x1172, 0x11B6], NFKC: [0xC97B], NFKD: [0x110C, 0x1172, 0x11B6] }, +{ source: [0xC97C], NFC: [0xC97C], NFD: [0x110C, 0x1172, 0x11B7], NFKC: [0xC97C], NFKD: [0x110C, 0x1172, 0x11B7] }, +{ source: [0xC97D], NFC: [0xC97D], NFD: [0x110C, 0x1172, 0x11B8], NFKC: [0xC97D], NFKD: [0x110C, 0x1172, 0x11B8] }, +{ source: [0xC97E], NFC: [0xC97E], NFD: [0x110C, 0x1172, 0x11B9], NFKC: [0xC97E], NFKD: [0x110C, 0x1172, 0x11B9] }, +{ source: [0xC97F], NFC: [0xC97F], NFD: [0x110C, 0x1172, 0x11BA], NFKC: [0xC97F], NFKD: [0x110C, 0x1172, 0x11BA] }, +{ source: [0xC980], NFC: [0xC980], NFD: [0x110C, 0x1172, 0x11BB], NFKC: [0xC980], NFKD: [0x110C, 0x1172, 0x11BB] }, +{ source: [0xC981], NFC: [0xC981], NFD: [0x110C, 0x1172, 0x11BC], NFKC: [0xC981], NFKD: [0x110C, 0x1172, 0x11BC] }, +{ source: [0xC982], NFC: [0xC982], NFD: [0x110C, 0x1172, 0x11BD], NFKC: [0xC982], NFKD: [0x110C, 0x1172, 0x11BD] }, +{ source: [0xC983], NFC: [0xC983], NFD: [0x110C, 0x1172, 0x11BE], NFKC: [0xC983], NFKD: [0x110C, 0x1172, 0x11BE] }, +{ source: [0xC984], NFC: [0xC984], NFD: [0x110C, 0x1172, 0x11BF], NFKC: [0xC984], NFKD: [0x110C, 0x1172, 0x11BF] }, +{ source: [0xC985], NFC: [0xC985], NFD: [0x110C, 0x1172, 0x11C0], NFKC: [0xC985], NFKD: [0x110C, 0x1172, 0x11C0] }, +{ source: [0xC986], NFC: [0xC986], NFD: [0x110C, 0x1172, 0x11C1], NFKC: [0xC986], NFKD: [0x110C, 0x1172, 0x11C1] }, +{ source: [0xC987], NFC: [0xC987], NFD: [0x110C, 0x1172, 0x11C2], NFKC: [0xC987], NFKD: [0x110C, 0x1172, 0x11C2] }, +{ source: [0xC988], NFC: [0xC988], NFD: [0x110C, 0x1173], NFKC: [0xC988], NFKD: [0x110C, 0x1173] }, +{ source: [0xC989], NFC: [0xC989], NFD: [0x110C, 0x1173, 0x11A8], NFKC: [0xC989], NFKD: [0x110C, 0x1173, 0x11A8] }, +{ source: [0xC98A], NFC: [0xC98A], NFD: [0x110C, 0x1173, 0x11A9], NFKC: [0xC98A], NFKD: [0x110C, 0x1173, 0x11A9] }, +{ source: [0xC98B], NFC: [0xC98B], NFD: [0x110C, 0x1173, 0x11AA], NFKC: [0xC98B], NFKD: [0x110C, 0x1173, 0x11AA] }, +{ source: [0xC98C], NFC: [0xC98C], NFD: [0x110C, 0x1173, 0x11AB], NFKC: [0xC98C], NFKD: [0x110C, 0x1173, 0x11AB] }, +{ source: [0xC98D], NFC: [0xC98D], NFD: [0x110C, 0x1173, 0x11AC], NFKC: [0xC98D], NFKD: [0x110C, 0x1173, 0x11AC] }, +{ source: [0xC98E], NFC: [0xC98E], NFD: [0x110C, 0x1173, 0x11AD], NFKC: [0xC98E], NFKD: [0x110C, 0x1173, 0x11AD] }, +{ source: [0xC98F], NFC: [0xC98F], NFD: [0x110C, 0x1173, 0x11AE], NFKC: [0xC98F], NFKD: [0x110C, 0x1173, 0x11AE] }, +{ source: [0xC990], NFC: [0xC990], NFD: [0x110C, 0x1173, 0x11AF], NFKC: [0xC990], NFKD: [0x110C, 0x1173, 0x11AF] }, +{ source: [0xC991], NFC: [0xC991], NFD: [0x110C, 0x1173, 0x11B0], NFKC: [0xC991], NFKD: [0x110C, 0x1173, 0x11B0] }, +{ source: [0xC992], NFC: [0xC992], NFD: [0x110C, 0x1173, 0x11B1], NFKC: [0xC992], NFKD: [0x110C, 0x1173, 0x11B1] }, +{ source: [0xC993], NFC: [0xC993], NFD: [0x110C, 0x1173, 0x11B2], NFKC: [0xC993], NFKD: [0x110C, 0x1173, 0x11B2] }, +{ source: [0xC994], NFC: [0xC994], NFD: [0x110C, 0x1173, 0x11B3], NFKC: [0xC994], NFKD: [0x110C, 0x1173, 0x11B3] }, +{ source: [0xC995], NFC: [0xC995], NFD: [0x110C, 0x1173, 0x11B4], NFKC: [0xC995], NFKD: [0x110C, 0x1173, 0x11B4] }, +{ source: [0xC996], NFC: [0xC996], NFD: [0x110C, 0x1173, 0x11B5], NFKC: [0xC996], NFKD: [0x110C, 0x1173, 0x11B5] }, +{ source: [0xC997], NFC: [0xC997], NFD: [0x110C, 0x1173, 0x11B6], NFKC: [0xC997], NFKD: [0x110C, 0x1173, 0x11B6] }, +{ source: [0xC998], NFC: [0xC998], NFD: [0x110C, 0x1173, 0x11B7], NFKC: [0xC998], NFKD: [0x110C, 0x1173, 0x11B7] }, +{ source: [0xC999], NFC: [0xC999], NFD: [0x110C, 0x1173, 0x11B8], NFKC: [0xC999], NFKD: [0x110C, 0x1173, 0x11B8] }, +{ source: [0xC99A], NFC: [0xC99A], NFD: [0x110C, 0x1173, 0x11B9], NFKC: [0xC99A], NFKD: [0x110C, 0x1173, 0x11B9] }, +{ source: [0xC99B], NFC: [0xC99B], NFD: [0x110C, 0x1173, 0x11BA], NFKC: [0xC99B], NFKD: [0x110C, 0x1173, 0x11BA] }, +{ source: [0xC99C], NFC: [0xC99C], NFD: [0x110C, 0x1173, 0x11BB], NFKC: [0xC99C], NFKD: [0x110C, 0x1173, 0x11BB] }, +{ source: [0xC99D], NFC: [0xC99D], NFD: [0x110C, 0x1173, 0x11BC], NFKC: [0xC99D], NFKD: [0x110C, 0x1173, 0x11BC] }, +{ source: [0xC99E], NFC: [0xC99E], NFD: [0x110C, 0x1173, 0x11BD], NFKC: [0xC99E], NFKD: [0x110C, 0x1173, 0x11BD] }, +{ source: [0xC99F], NFC: [0xC99F], NFD: [0x110C, 0x1173, 0x11BE], NFKC: [0xC99F], NFKD: [0x110C, 0x1173, 0x11BE] }, +{ source: [0xC9A0], NFC: [0xC9A0], NFD: [0x110C, 0x1173, 0x11BF], NFKC: [0xC9A0], NFKD: [0x110C, 0x1173, 0x11BF] }, +{ source: [0xC9A1], NFC: [0xC9A1], NFD: [0x110C, 0x1173, 0x11C0], NFKC: [0xC9A1], NFKD: [0x110C, 0x1173, 0x11C0] }, +{ source: [0xC9A2], NFC: [0xC9A2], NFD: [0x110C, 0x1173, 0x11C1], NFKC: [0xC9A2], NFKD: [0x110C, 0x1173, 0x11C1] }, +{ source: [0xC9A3], NFC: [0xC9A3], NFD: [0x110C, 0x1173, 0x11C2], NFKC: [0xC9A3], NFKD: [0x110C, 0x1173, 0x11C2] }, +{ source: [0xC9A4], NFC: [0xC9A4], NFD: [0x110C, 0x1174], NFKC: [0xC9A4], NFKD: [0x110C, 0x1174] }, +{ source: [0xC9A5], NFC: [0xC9A5], NFD: [0x110C, 0x1174, 0x11A8], NFKC: [0xC9A5], NFKD: [0x110C, 0x1174, 0x11A8] }, +{ source: [0xC9A6], NFC: [0xC9A6], NFD: [0x110C, 0x1174, 0x11A9], NFKC: [0xC9A6], NFKD: [0x110C, 0x1174, 0x11A9] }, +{ source: [0xC9A7], NFC: [0xC9A7], NFD: [0x110C, 0x1174, 0x11AA], NFKC: [0xC9A7], NFKD: [0x110C, 0x1174, 0x11AA] }, +{ source: [0xC9A8], NFC: [0xC9A8], NFD: [0x110C, 0x1174, 0x11AB], NFKC: [0xC9A8], NFKD: [0x110C, 0x1174, 0x11AB] }, +{ source: [0xC9A9], NFC: [0xC9A9], NFD: [0x110C, 0x1174, 0x11AC], NFKC: [0xC9A9], NFKD: [0x110C, 0x1174, 0x11AC] }, +{ source: [0xC9AA], NFC: [0xC9AA], NFD: [0x110C, 0x1174, 0x11AD], NFKC: [0xC9AA], NFKD: [0x110C, 0x1174, 0x11AD] }, +{ source: [0xC9AB], NFC: [0xC9AB], NFD: [0x110C, 0x1174, 0x11AE], NFKC: [0xC9AB], NFKD: [0x110C, 0x1174, 0x11AE] }, +{ source: [0xC9AC], NFC: [0xC9AC], NFD: [0x110C, 0x1174, 0x11AF], NFKC: [0xC9AC], NFKD: [0x110C, 0x1174, 0x11AF] }, +{ source: [0xC9AD], NFC: [0xC9AD], NFD: [0x110C, 0x1174, 0x11B0], NFKC: [0xC9AD], NFKD: [0x110C, 0x1174, 0x11B0] }, +{ source: [0xC9AE], NFC: [0xC9AE], NFD: [0x110C, 0x1174, 0x11B1], NFKC: [0xC9AE], NFKD: [0x110C, 0x1174, 0x11B1] }, +{ source: [0xC9AF], NFC: [0xC9AF], NFD: [0x110C, 0x1174, 0x11B2], NFKC: [0xC9AF], NFKD: [0x110C, 0x1174, 0x11B2] }, +{ source: [0xC9B0], NFC: [0xC9B0], NFD: [0x110C, 0x1174, 0x11B3], NFKC: [0xC9B0], NFKD: [0x110C, 0x1174, 0x11B3] }, +{ source: [0xC9B1], NFC: [0xC9B1], NFD: [0x110C, 0x1174, 0x11B4], NFKC: [0xC9B1], NFKD: [0x110C, 0x1174, 0x11B4] }, +{ source: [0xC9B2], NFC: [0xC9B2], NFD: [0x110C, 0x1174, 0x11B5], NFKC: [0xC9B2], NFKD: [0x110C, 0x1174, 0x11B5] }, +{ source: [0xC9B3], NFC: [0xC9B3], NFD: [0x110C, 0x1174, 0x11B6], NFKC: [0xC9B3], NFKD: [0x110C, 0x1174, 0x11B6] }, +{ source: [0xC9B4], NFC: [0xC9B4], NFD: [0x110C, 0x1174, 0x11B7], NFKC: [0xC9B4], NFKD: [0x110C, 0x1174, 0x11B7] }, +{ source: [0xC9B5], NFC: [0xC9B5], NFD: [0x110C, 0x1174, 0x11B8], NFKC: [0xC9B5], NFKD: [0x110C, 0x1174, 0x11B8] }, +{ source: [0xC9B6], NFC: [0xC9B6], NFD: [0x110C, 0x1174, 0x11B9], NFKC: [0xC9B6], NFKD: [0x110C, 0x1174, 0x11B9] }, +{ source: [0xC9B7], NFC: [0xC9B7], NFD: [0x110C, 0x1174, 0x11BA], NFKC: [0xC9B7], NFKD: [0x110C, 0x1174, 0x11BA] }, +{ source: [0xC9B8], NFC: [0xC9B8], NFD: [0x110C, 0x1174, 0x11BB], NFKC: [0xC9B8], NFKD: [0x110C, 0x1174, 0x11BB] }, +{ source: [0xC9B9], NFC: [0xC9B9], NFD: [0x110C, 0x1174, 0x11BC], NFKC: [0xC9B9], NFKD: [0x110C, 0x1174, 0x11BC] }, +{ source: [0xC9BA], NFC: [0xC9BA], NFD: [0x110C, 0x1174, 0x11BD], NFKC: [0xC9BA], NFKD: [0x110C, 0x1174, 0x11BD] }, +{ source: [0xC9BB], NFC: [0xC9BB], NFD: [0x110C, 0x1174, 0x11BE], NFKC: [0xC9BB], NFKD: [0x110C, 0x1174, 0x11BE] }, +{ source: [0xC9BC], NFC: [0xC9BC], NFD: [0x110C, 0x1174, 0x11BF], NFKC: [0xC9BC], NFKD: [0x110C, 0x1174, 0x11BF] }, +{ source: [0xC9BD], NFC: [0xC9BD], NFD: [0x110C, 0x1174, 0x11C0], NFKC: [0xC9BD], NFKD: [0x110C, 0x1174, 0x11C0] }, +{ source: [0xC9BE], NFC: [0xC9BE], NFD: [0x110C, 0x1174, 0x11C1], NFKC: [0xC9BE], NFKD: [0x110C, 0x1174, 0x11C1] }, +{ source: [0xC9BF], NFC: [0xC9BF], NFD: [0x110C, 0x1174, 0x11C2], NFKC: [0xC9BF], NFKD: [0x110C, 0x1174, 0x11C2] }, +{ source: [0xC9C0], NFC: [0xC9C0], NFD: [0x110C, 0x1175], NFKC: [0xC9C0], NFKD: [0x110C, 0x1175] }, +{ source: [0xC9C1], NFC: [0xC9C1], NFD: [0x110C, 0x1175, 0x11A8], NFKC: [0xC9C1], NFKD: [0x110C, 0x1175, 0x11A8] }, +{ source: [0xC9C2], NFC: [0xC9C2], NFD: [0x110C, 0x1175, 0x11A9], NFKC: [0xC9C2], NFKD: [0x110C, 0x1175, 0x11A9] }, +{ source: [0xC9C3], NFC: [0xC9C3], NFD: [0x110C, 0x1175, 0x11AA], NFKC: [0xC9C3], NFKD: [0x110C, 0x1175, 0x11AA] }, +{ source: [0xC9C4], NFC: [0xC9C4], NFD: [0x110C, 0x1175, 0x11AB], NFKC: [0xC9C4], NFKD: [0x110C, 0x1175, 0x11AB] }, +{ source: [0xC9C5], NFC: [0xC9C5], NFD: [0x110C, 0x1175, 0x11AC], NFKC: [0xC9C5], NFKD: [0x110C, 0x1175, 0x11AC] }, +{ source: [0xC9C6], NFC: [0xC9C6], NFD: [0x110C, 0x1175, 0x11AD], NFKC: [0xC9C6], NFKD: [0x110C, 0x1175, 0x11AD] }, +{ source: [0xC9C7], NFC: [0xC9C7], NFD: [0x110C, 0x1175, 0x11AE], NFKC: [0xC9C7], NFKD: [0x110C, 0x1175, 0x11AE] }, +{ source: [0xC9C8], NFC: [0xC9C8], NFD: [0x110C, 0x1175, 0x11AF], NFKC: [0xC9C8], NFKD: [0x110C, 0x1175, 0x11AF] }, +{ source: [0xC9C9], NFC: [0xC9C9], NFD: [0x110C, 0x1175, 0x11B0], NFKC: [0xC9C9], NFKD: [0x110C, 0x1175, 0x11B0] }, +{ source: [0xC9CA], NFC: [0xC9CA], NFD: [0x110C, 0x1175, 0x11B1], NFKC: [0xC9CA], NFKD: [0x110C, 0x1175, 0x11B1] }, +{ source: [0xC9CB], NFC: [0xC9CB], NFD: [0x110C, 0x1175, 0x11B2], NFKC: [0xC9CB], NFKD: [0x110C, 0x1175, 0x11B2] }, +{ source: [0xC9CC], NFC: [0xC9CC], NFD: [0x110C, 0x1175, 0x11B3], NFKC: [0xC9CC], NFKD: [0x110C, 0x1175, 0x11B3] }, +{ source: [0xC9CD], NFC: [0xC9CD], NFD: [0x110C, 0x1175, 0x11B4], NFKC: [0xC9CD], NFKD: [0x110C, 0x1175, 0x11B4] }, +{ source: [0xC9CE], NFC: [0xC9CE], NFD: [0x110C, 0x1175, 0x11B5], NFKC: [0xC9CE], NFKD: [0x110C, 0x1175, 0x11B5] }, +{ source: [0xC9CF], NFC: [0xC9CF], NFD: [0x110C, 0x1175, 0x11B6], NFKC: [0xC9CF], NFKD: [0x110C, 0x1175, 0x11B6] }, +{ source: [0xC9D0], NFC: [0xC9D0], NFD: [0x110C, 0x1175, 0x11B7], NFKC: [0xC9D0], NFKD: [0x110C, 0x1175, 0x11B7] }, +{ source: [0xC9D1], NFC: [0xC9D1], NFD: [0x110C, 0x1175, 0x11B8], NFKC: [0xC9D1], NFKD: [0x110C, 0x1175, 0x11B8] }, +{ source: [0xC9D2], NFC: [0xC9D2], NFD: [0x110C, 0x1175, 0x11B9], NFKC: [0xC9D2], NFKD: [0x110C, 0x1175, 0x11B9] }, +{ source: [0xC9D3], NFC: [0xC9D3], NFD: [0x110C, 0x1175, 0x11BA], NFKC: [0xC9D3], NFKD: [0x110C, 0x1175, 0x11BA] }, +{ source: [0xC9D4], NFC: [0xC9D4], NFD: [0x110C, 0x1175, 0x11BB], NFKC: [0xC9D4], NFKD: [0x110C, 0x1175, 0x11BB] }, +{ source: [0xC9D5], NFC: [0xC9D5], NFD: [0x110C, 0x1175, 0x11BC], NFKC: [0xC9D5], NFKD: [0x110C, 0x1175, 0x11BC] }, +{ source: [0xC9D6], NFC: [0xC9D6], NFD: [0x110C, 0x1175, 0x11BD], NFKC: [0xC9D6], NFKD: [0x110C, 0x1175, 0x11BD] }, +{ source: [0xC9D7], NFC: [0xC9D7], NFD: [0x110C, 0x1175, 0x11BE], NFKC: [0xC9D7], NFKD: [0x110C, 0x1175, 0x11BE] }, +{ source: [0xC9D8], NFC: [0xC9D8], NFD: [0x110C, 0x1175, 0x11BF], NFKC: [0xC9D8], NFKD: [0x110C, 0x1175, 0x11BF] }, +{ source: [0xC9D9], NFC: [0xC9D9], NFD: [0x110C, 0x1175, 0x11C0], NFKC: [0xC9D9], NFKD: [0x110C, 0x1175, 0x11C0] }, +{ source: [0xC9DA], NFC: [0xC9DA], NFD: [0x110C, 0x1175, 0x11C1], NFKC: [0xC9DA], NFKD: [0x110C, 0x1175, 0x11C1] }, +{ source: [0xC9DB], NFC: [0xC9DB], NFD: [0x110C, 0x1175, 0x11C2], NFKC: [0xC9DB], NFKD: [0x110C, 0x1175, 0x11C2] }, +{ source: [0xC9DC], NFC: [0xC9DC], NFD: [0x110D, 0x1161], NFKC: [0xC9DC], NFKD: [0x110D, 0x1161] }, +{ source: [0xC9DD], NFC: [0xC9DD], NFD: [0x110D, 0x1161, 0x11A8], NFKC: [0xC9DD], NFKD: [0x110D, 0x1161, 0x11A8] }, +{ source: [0xC9DE], NFC: [0xC9DE], NFD: [0x110D, 0x1161, 0x11A9], NFKC: [0xC9DE], NFKD: [0x110D, 0x1161, 0x11A9] }, +{ source: [0xC9DF], NFC: [0xC9DF], NFD: [0x110D, 0x1161, 0x11AA], NFKC: [0xC9DF], NFKD: [0x110D, 0x1161, 0x11AA] }, +{ source: [0xC9E0], NFC: [0xC9E0], NFD: [0x110D, 0x1161, 0x11AB], NFKC: [0xC9E0], NFKD: [0x110D, 0x1161, 0x11AB] }, +{ source: [0xC9E1], NFC: [0xC9E1], NFD: [0x110D, 0x1161, 0x11AC], NFKC: [0xC9E1], NFKD: [0x110D, 0x1161, 0x11AC] }, +{ source: [0xC9E2], NFC: [0xC9E2], NFD: [0x110D, 0x1161, 0x11AD], NFKC: [0xC9E2], NFKD: [0x110D, 0x1161, 0x11AD] }, +{ source: [0xC9E3], NFC: [0xC9E3], NFD: [0x110D, 0x1161, 0x11AE], NFKC: [0xC9E3], NFKD: [0x110D, 0x1161, 0x11AE] }, +{ source: [0xC9E4], NFC: [0xC9E4], NFD: [0x110D, 0x1161, 0x11AF], NFKC: [0xC9E4], NFKD: [0x110D, 0x1161, 0x11AF] }, +{ source: [0xC9E5], NFC: [0xC9E5], NFD: [0x110D, 0x1161, 0x11B0], NFKC: [0xC9E5], NFKD: [0x110D, 0x1161, 0x11B0] }, +{ source: [0xC9E6], NFC: [0xC9E6], NFD: [0x110D, 0x1161, 0x11B1], NFKC: [0xC9E6], NFKD: [0x110D, 0x1161, 0x11B1] }, +{ source: [0xC9E7], NFC: [0xC9E7], NFD: [0x110D, 0x1161, 0x11B2], NFKC: [0xC9E7], NFKD: [0x110D, 0x1161, 0x11B2] }, +{ source: [0xC9E8], NFC: [0xC9E8], NFD: [0x110D, 0x1161, 0x11B3], NFKC: [0xC9E8], NFKD: [0x110D, 0x1161, 0x11B3] }, +{ source: [0xC9E9], NFC: [0xC9E9], NFD: [0x110D, 0x1161, 0x11B4], NFKC: [0xC9E9], NFKD: [0x110D, 0x1161, 0x11B4] }, +{ source: [0xC9EA], NFC: [0xC9EA], NFD: [0x110D, 0x1161, 0x11B5], NFKC: [0xC9EA], NFKD: [0x110D, 0x1161, 0x11B5] }, +{ source: [0xC9EB], NFC: [0xC9EB], NFD: [0x110D, 0x1161, 0x11B6], NFKC: [0xC9EB], NFKD: [0x110D, 0x1161, 0x11B6] }, +{ source: [0xC9EC], NFC: [0xC9EC], NFD: [0x110D, 0x1161, 0x11B7], NFKC: [0xC9EC], NFKD: [0x110D, 0x1161, 0x11B7] }, +{ source: [0xC9ED], NFC: [0xC9ED], NFD: [0x110D, 0x1161, 0x11B8], NFKC: [0xC9ED], NFKD: [0x110D, 0x1161, 0x11B8] }, +{ source: [0xC9EE], NFC: [0xC9EE], NFD: [0x110D, 0x1161, 0x11B9], NFKC: [0xC9EE], NFKD: [0x110D, 0x1161, 0x11B9] }, +{ source: [0xC9EF], NFC: [0xC9EF], NFD: [0x110D, 0x1161, 0x11BA], NFKC: [0xC9EF], NFKD: [0x110D, 0x1161, 0x11BA] }, +{ source: [0xC9F0], NFC: [0xC9F0], NFD: [0x110D, 0x1161, 0x11BB], NFKC: [0xC9F0], NFKD: [0x110D, 0x1161, 0x11BB] }, +{ source: [0xC9F1], NFC: [0xC9F1], NFD: [0x110D, 0x1161, 0x11BC], NFKC: [0xC9F1], NFKD: [0x110D, 0x1161, 0x11BC] }, +{ source: [0xC9F2], NFC: [0xC9F2], NFD: [0x110D, 0x1161, 0x11BD], NFKC: [0xC9F2], NFKD: [0x110D, 0x1161, 0x11BD] }, +{ source: [0xC9F3], NFC: [0xC9F3], NFD: [0x110D, 0x1161, 0x11BE], NFKC: [0xC9F3], NFKD: [0x110D, 0x1161, 0x11BE] }, +{ source: [0xC9F4], NFC: [0xC9F4], NFD: [0x110D, 0x1161, 0x11BF], NFKC: [0xC9F4], NFKD: [0x110D, 0x1161, 0x11BF] }, +{ source: [0xC9F5], NFC: [0xC9F5], NFD: [0x110D, 0x1161, 0x11C0], NFKC: [0xC9F5], NFKD: [0x110D, 0x1161, 0x11C0] }, +{ source: [0xC9F6], NFC: [0xC9F6], NFD: [0x110D, 0x1161, 0x11C1], NFKC: [0xC9F6], NFKD: [0x110D, 0x1161, 0x11C1] }, +{ source: [0xC9F7], NFC: [0xC9F7], NFD: [0x110D, 0x1161, 0x11C2], NFKC: [0xC9F7], NFKD: [0x110D, 0x1161, 0x11C2] }, +{ source: [0xC9F8], NFC: [0xC9F8], NFD: [0x110D, 0x1162], NFKC: [0xC9F8], NFKD: [0x110D, 0x1162] }, +{ source: [0xC9F9], NFC: [0xC9F9], NFD: [0x110D, 0x1162, 0x11A8], NFKC: [0xC9F9], NFKD: [0x110D, 0x1162, 0x11A8] }, +{ source: [0xC9FA], NFC: [0xC9FA], NFD: [0x110D, 0x1162, 0x11A9], NFKC: [0xC9FA], NFKD: [0x110D, 0x1162, 0x11A9] }, +{ source: [0xC9FB], NFC: [0xC9FB], NFD: [0x110D, 0x1162, 0x11AA], NFKC: [0xC9FB], NFKD: [0x110D, 0x1162, 0x11AA] }, +{ source: [0xC9FC], NFC: [0xC9FC], NFD: [0x110D, 0x1162, 0x11AB], NFKC: [0xC9FC], NFKD: [0x110D, 0x1162, 0x11AB] }, +{ source: [0xC9FD], NFC: [0xC9FD], NFD: [0x110D, 0x1162, 0x11AC], NFKC: [0xC9FD], NFKD: [0x110D, 0x1162, 0x11AC] }, +{ source: [0xC9FE], NFC: [0xC9FE], NFD: [0x110D, 0x1162, 0x11AD], NFKC: [0xC9FE], NFKD: [0x110D, 0x1162, 0x11AD] }, +{ source: [0xC9FF], NFC: [0xC9FF], NFD: [0x110D, 0x1162, 0x11AE], NFKC: [0xC9FF], NFKD: [0x110D, 0x1162, 0x11AE] }, +{ source: [0xCA00], NFC: [0xCA00], NFD: [0x110D, 0x1162, 0x11AF], NFKC: [0xCA00], NFKD: [0x110D, 0x1162, 0x11AF] }, +{ source: [0xCA01], NFC: [0xCA01], NFD: [0x110D, 0x1162, 0x11B0], NFKC: [0xCA01], NFKD: [0x110D, 0x1162, 0x11B0] }, +{ source: [0xCA02], NFC: [0xCA02], NFD: [0x110D, 0x1162, 0x11B1], NFKC: [0xCA02], NFKD: [0x110D, 0x1162, 0x11B1] }, +{ source: [0xCA03], NFC: [0xCA03], NFD: [0x110D, 0x1162, 0x11B2], NFKC: [0xCA03], NFKD: [0x110D, 0x1162, 0x11B2] }, +{ source: [0xCA04], NFC: [0xCA04], NFD: [0x110D, 0x1162, 0x11B3], NFKC: [0xCA04], NFKD: [0x110D, 0x1162, 0x11B3] }, +{ source: [0xCA05], NFC: [0xCA05], NFD: [0x110D, 0x1162, 0x11B4], NFKC: [0xCA05], NFKD: [0x110D, 0x1162, 0x11B4] }, +{ source: [0xCA06], NFC: [0xCA06], NFD: [0x110D, 0x1162, 0x11B5], NFKC: [0xCA06], NFKD: [0x110D, 0x1162, 0x11B5] }, +{ source: [0xCA07], NFC: [0xCA07], NFD: [0x110D, 0x1162, 0x11B6], NFKC: [0xCA07], NFKD: [0x110D, 0x1162, 0x11B6] }, +{ source: [0xCA08], NFC: [0xCA08], NFD: [0x110D, 0x1162, 0x11B7], NFKC: [0xCA08], NFKD: [0x110D, 0x1162, 0x11B7] }, +{ source: [0xCA09], NFC: [0xCA09], NFD: [0x110D, 0x1162, 0x11B8], NFKC: [0xCA09], NFKD: [0x110D, 0x1162, 0x11B8] }, +{ source: [0xCA0A], NFC: [0xCA0A], NFD: [0x110D, 0x1162, 0x11B9], NFKC: [0xCA0A], NFKD: [0x110D, 0x1162, 0x11B9] }, +{ source: [0xCA0B], NFC: [0xCA0B], NFD: [0x110D, 0x1162, 0x11BA], NFKC: [0xCA0B], NFKD: [0x110D, 0x1162, 0x11BA] }, +{ source: [0xCA0C], NFC: [0xCA0C], NFD: [0x110D, 0x1162, 0x11BB], NFKC: [0xCA0C], NFKD: [0x110D, 0x1162, 0x11BB] }, +{ source: [0xCA0D], NFC: [0xCA0D], NFD: [0x110D, 0x1162, 0x11BC], NFKC: [0xCA0D], NFKD: [0x110D, 0x1162, 0x11BC] }, +{ source: [0xCA0E], NFC: [0xCA0E], NFD: [0x110D, 0x1162, 0x11BD], NFKC: [0xCA0E], NFKD: [0x110D, 0x1162, 0x11BD] }, +{ source: [0xCA0F], NFC: [0xCA0F], NFD: [0x110D, 0x1162, 0x11BE], NFKC: [0xCA0F], NFKD: [0x110D, 0x1162, 0x11BE] }, +{ source: [0xCA10], NFC: [0xCA10], NFD: [0x110D, 0x1162, 0x11BF], NFKC: [0xCA10], NFKD: [0x110D, 0x1162, 0x11BF] }, +{ source: [0xCA11], NFC: [0xCA11], NFD: [0x110D, 0x1162, 0x11C0], NFKC: [0xCA11], NFKD: [0x110D, 0x1162, 0x11C0] }, +{ source: [0xCA12], NFC: [0xCA12], NFD: [0x110D, 0x1162, 0x11C1], NFKC: [0xCA12], NFKD: [0x110D, 0x1162, 0x11C1] }, +{ source: [0xCA13], NFC: [0xCA13], NFD: [0x110D, 0x1162, 0x11C2], NFKC: [0xCA13], NFKD: [0x110D, 0x1162, 0x11C2] }, +{ source: [0xCA14], NFC: [0xCA14], NFD: [0x110D, 0x1163], NFKC: [0xCA14], NFKD: [0x110D, 0x1163] }, +{ source: [0xCA15], NFC: [0xCA15], NFD: [0x110D, 0x1163, 0x11A8], NFKC: [0xCA15], NFKD: [0x110D, 0x1163, 0x11A8] }, +{ source: [0xCA16], NFC: [0xCA16], NFD: [0x110D, 0x1163, 0x11A9], NFKC: [0xCA16], NFKD: [0x110D, 0x1163, 0x11A9] }, +{ source: [0xCA17], NFC: [0xCA17], NFD: [0x110D, 0x1163, 0x11AA], NFKC: [0xCA17], NFKD: [0x110D, 0x1163, 0x11AA] }, +{ source: [0xCA18], NFC: [0xCA18], NFD: [0x110D, 0x1163, 0x11AB], NFKC: [0xCA18], NFKD: [0x110D, 0x1163, 0x11AB] }, +{ source: [0xCA19], NFC: [0xCA19], NFD: [0x110D, 0x1163, 0x11AC], NFKC: [0xCA19], NFKD: [0x110D, 0x1163, 0x11AC] }, +{ source: [0xCA1A], NFC: [0xCA1A], NFD: [0x110D, 0x1163, 0x11AD], NFKC: [0xCA1A], NFKD: [0x110D, 0x1163, 0x11AD] }, +{ source: [0xCA1B], NFC: [0xCA1B], NFD: [0x110D, 0x1163, 0x11AE], NFKC: [0xCA1B], NFKD: [0x110D, 0x1163, 0x11AE] }, +{ source: [0xCA1C], NFC: [0xCA1C], NFD: [0x110D, 0x1163, 0x11AF], NFKC: [0xCA1C], NFKD: [0x110D, 0x1163, 0x11AF] }, +{ source: [0xCA1D], NFC: [0xCA1D], NFD: [0x110D, 0x1163, 0x11B0], NFKC: [0xCA1D], NFKD: [0x110D, 0x1163, 0x11B0] }, +{ source: [0xCA1E], NFC: [0xCA1E], NFD: [0x110D, 0x1163, 0x11B1], NFKC: [0xCA1E], NFKD: [0x110D, 0x1163, 0x11B1] }, +{ source: [0xCA1F], NFC: [0xCA1F], NFD: [0x110D, 0x1163, 0x11B2], NFKC: [0xCA1F], NFKD: [0x110D, 0x1163, 0x11B2] }, +{ source: [0xCA20], NFC: [0xCA20], NFD: [0x110D, 0x1163, 0x11B3], NFKC: [0xCA20], NFKD: [0x110D, 0x1163, 0x11B3] }, +{ source: [0xCA21], NFC: [0xCA21], NFD: [0x110D, 0x1163, 0x11B4], NFKC: [0xCA21], NFKD: [0x110D, 0x1163, 0x11B4] }, +{ source: [0xCA22], NFC: [0xCA22], NFD: [0x110D, 0x1163, 0x11B5], NFKC: [0xCA22], NFKD: [0x110D, 0x1163, 0x11B5] }, +{ source: [0xCA23], NFC: [0xCA23], NFD: [0x110D, 0x1163, 0x11B6], NFKC: [0xCA23], NFKD: [0x110D, 0x1163, 0x11B6] }, +{ source: [0xCA24], NFC: [0xCA24], NFD: [0x110D, 0x1163, 0x11B7], NFKC: [0xCA24], NFKD: [0x110D, 0x1163, 0x11B7] }, +{ source: [0xCA25], NFC: [0xCA25], NFD: [0x110D, 0x1163, 0x11B8], NFKC: [0xCA25], NFKD: [0x110D, 0x1163, 0x11B8] }, +{ source: [0xCA26], NFC: [0xCA26], NFD: [0x110D, 0x1163, 0x11B9], NFKC: [0xCA26], NFKD: [0x110D, 0x1163, 0x11B9] }, +{ source: [0xCA27], NFC: [0xCA27], NFD: [0x110D, 0x1163, 0x11BA], NFKC: [0xCA27], NFKD: [0x110D, 0x1163, 0x11BA] }, +{ source: [0xCA28], NFC: [0xCA28], NFD: [0x110D, 0x1163, 0x11BB], NFKC: [0xCA28], NFKD: [0x110D, 0x1163, 0x11BB] }, +{ source: [0xCA29], NFC: [0xCA29], NFD: [0x110D, 0x1163, 0x11BC], NFKC: [0xCA29], NFKD: [0x110D, 0x1163, 0x11BC] }, +{ source: [0xCA2A], NFC: [0xCA2A], NFD: [0x110D, 0x1163, 0x11BD], NFKC: [0xCA2A], NFKD: [0x110D, 0x1163, 0x11BD] }, +{ source: [0xCA2B], NFC: [0xCA2B], NFD: [0x110D, 0x1163, 0x11BE], NFKC: [0xCA2B], NFKD: [0x110D, 0x1163, 0x11BE] }, +{ source: [0xCA2C], NFC: [0xCA2C], NFD: [0x110D, 0x1163, 0x11BF], NFKC: [0xCA2C], NFKD: [0x110D, 0x1163, 0x11BF] }, +{ source: [0xCA2D], NFC: [0xCA2D], NFD: [0x110D, 0x1163, 0x11C0], NFKC: [0xCA2D], NFKD: [0x110D, 0x1163, 0x11C0] }, +{ source: [0xCA2E], NFC: [0xCA2E], NFD: [0x110D, 0x1163, 0x11C1], NFKC: [0xCA2E], NFKD: [0x110D, 0x1163, 0x11C1] }, +{ source: [0xCA2F], NFC: [0xCA2F], NFD: [0x110D, 0x1163, 0x11C2], NFKC: [0xCA2F], NFKD: [0x110D, 0x1163, 0x11C2] }, +{ source: [0xCA30], NFC: [0xCA30], NFD: [0x110D, 0x1164], NFKC: [0xCA30], NFKD: [0x110D, 0x1164] }, +{ source: [0xCA31], NFC: [0xCA31], NFD: [0x110D, 0x1164, 0x11A8], NFKC: [0xCA31], NFKD: [0x110D, 0x1164, 0x11A8] }, +{ source: [0xCA32], NFC: [0xCA32], NFD: [0x110D, 0x1164, 0x11A9], NFKC: [0xCA32], NFKD: [0x110D, 0x1164, 0x11A9] }, +{ source: [0xCA33], NFC: [0xCA33], NFD: [0x110D, 0x1164, 0x11AA], NFKC: [0xCA33], NFKD: [0x110D, 0x1164, 0x11AA] }, +{ source: [0xCA34], NFC: [0xCA34], NFD: [0x110D, 0x1164, 0x11AB], NFKC: [0xCA34], NFKD: [0x110D, 0x1164, 0x11AB] }, +{ source: [0xCA35], NFC: [0xCA35], NFD: [0x110D, 0x1164, 0x11AC], NFKC: [0xCA35], NFKD: [0x110D, 0x1164, 0x11AC] }, +{ source: [0xCA36], NFC: [0xCA36], NFD: [0x110D, 0x1164, 0x11AD], NFKC: [0xCA36], NFKD: [0x110D, 0x1164, 0x11AD] }, +{ source: [0xCA37], NFC: [0xCA37], NFD: [0x110D, 0x1164, 0x11AE], NFKC: [0xCA37], NFKD: [0x110D, 0x1164, 0x11AE] }, +{ source: [0xCA38], NFC: [0xCA38], NFD: [0x110D, 0x1164, 0x11AF], NFKC: [0xCA38], NFKD: [0x110D, 0x1164, 0x11AF] }, +{ source: [0xCA39], NFC: [0xCA39], NFD: [0x110D, 0x1164, 0x11B0], NFKC: [0xCA39], NFKD: [0x110D, 0x1164, 0x11B0] }, +{ source: [0xCA3A], NFC: [0xCA3A], NFD: [0x110D, 0x1164, 0x11B1], NFKC: [0xCA3A], NFKD: [0x110D, 0x1164, 0x11B1] }, +{ source: [0xCA3B], NFC: [0xCA3B], NFD: [0x110D, 0x1164, 0x11B2], NFKC: [0xCA3B], NFKD: [0x110D, 0x1164, 0x11B2] }, +{ source: [0xCA3C], NFC: [0xCA3C], NFD: [0x110D, 0x1164, 0x11B3], NFKC: [0xCA3C], NFKD: [0x110D, 0x1164, 0x11B3] }, +{ source: [0xCA3D], NFC: [0xCA3D], NFD: [0x110D, 0x1164, 0x11B4], NFKC: [0xCA3D], NFKD: [0x110D, 0x1164, 0x11B4] }, +{ source: [0xCA3E], NFC: [0xCA3E], NFD: [0x110D, 0x1164, 0x11B5], NFKC: [0xCA3E], NFKD: [0x110D, 0x1164, 0x11B5] }, +{ source: [0xCA3F], NFC: [0xCA3F], NFD: [0x110D, 0x1164, 0x11B6], NFKC: [0xCA3F], NFKD: [0x110D, 0x1164, 0x11B6] }, +{ source: [0xCA40], NFC: [0xCA40], NFD: [0x110D, 0x1164, 0x11B7], NFKC: [0xCA40], NFKD: [0x110D, 0x1164, 0x11B7] }, +{ source: [0xCA41], NFC: [0xCA41], NFD: [0x110D, 0x1164, 0x11B8], NFKC: [0xCA41], NFKD: [0x110D, 0x1164, 0x11B8] }, +{ source: [0xCA42], NFC: [0xCA42], NFD: [0x110D, 0x1164, 0x11B9], NFKC: [0xCA42], NFKD: [0x110D, 0x1164, 0x11B9] }, +{ source: [0xCA43], NFC: [0xCA43], NFD: [0x110D, 0x1164, 0x11BA], NFKC: [0xCA43], NFKD: [0x110D, 0x1164, 0x11BA] }, +{ source: [0xCA44], NFC: [0xCA44], NFD: [0x110D, 0x1164, 0x11BB], NFKC: [0xCA44], NFKD: [0x110D, 0x1164, 0x11BB] }, +{ source: [0xCA45], NFC: [0xCA45], NFD: [0x110D, 0x1164, 0x11BC], NFKC: [0xCA45], NFKD: [0x110D, 0x1164, 0x11BC] }, +{ source: [0xCA46], NFC: [0xCA46], NFD: [0x110D, 0x1164, 0x11BD], NFKC: [0xCA46], NFKD: [0x110D, 0x1164, 0x11BD] }, +{ source: [0xCA47], NFC: [0xCA47], NFD: [0x110D, 0x1164, 0x11BE], NFKC: [0xCA47], NFKD: [0x110D, 0x1164, 0x11BE] }, +{ source: [0xCA48], NFC: [0xCA48], NFD: [0x110D, 0x1164, 0x11BF], NFKC: [0xCA48], NFKD: [0x110D, 0x1164, 0x11BF] }, +{ source: [0xCA49], NFC: [0xCA49], NFD: [0x110D, 0x1164, 0x11C0], NFKC: [0xCA49], NFKD: [0x110D, 0x1164, 0x11C0] }, +{ source: [0xCA4A], NFC: [0xCA4A], NFD: [0x110D, 0x1164, 0x11C1], NFKC: [0xCA4A], NFKD: [0x110D, 0x1164, 0x11C1] }, +{ source: [0xCA4B], NFC: [0xCA4B], NFD: [0x110D, 0x1164, 0x11C2], NFKC: [0xCA4B], NFKD: [0x110D, 0x1164, 0x11C2] }, +{ source: [0xCA4C], NFC: [0xCA4C], NFD: [0x110D, 0x1165], NFKC: [0xCA4C], NFKD: [0x110D, 0x1165] }, +{ source: [0xCA4D], NFC: [0xCA4D], NFD: [0x110D, 0x1165, 0x11A8], NFKC: [0xCA4D], NFKD: [0x110D, 0x1165, 0x11A8] }, +{ source: [0xCA4E], NFC: [0xCA4E], NFD: [0x110D, 0x1165, 0x11A9], NFKC: [0xCA4E], NFKD: [0x110D, 0x1165, 0x11A9] }, +{ source: [0xCA4F], NFC: [0xCA4F], NFD: [0x110D, 0x1165, 0x11AA], NFKC: [0xCA4F], NFKD: [0x110D, 0x1165, 0x11AA] }, +{ source: [0xCA50], NFC: [0xCA50], NFD: [0x110D, 0x1165, 0x11AB], NFKC: [0xCA50], NFKD: [0x110D, 0x1165, 0x11AB] }, +{ source: [0xCA51], NFC: [0xCA51], NFD: [0x110D, 0x1165, 0x11AC], NFKC: [0xCA51], NFKD: [0x110D, 0x1165, 0x11AC] }, +{ source: [0xCA52], NFC: [0xCA52], NFD: [0x110D, 0x1165, 0x11AD], NFKC: [0xCA52], NFKD: [0x110D, 0x1165, 0x11AD] }, +{ source: [0xCA53], NFC: [0xCA53], NFD: [0x110D, 0x1165, 0x11AE], NFKC: [0xCA53], NFKD: [0x110D, 0x1165, 0x11AE] }, +{ source: [0xCA54], NFC: [0xCA54], NFD: [0x110D, 0x1165, 0x11AF], NFKC: [0xCA54], NFKD: [0x110D, 0x1165, 0x11AF] }, +{ source: [0xCA55], NFC: [0xCA55], NFD: [0x110D, 0x1165, 0x11B0], NFKC: [0xCA55], NFKD: [0x110D, 0x1165, 0x11B0] }, +{ source: [0xCA56], NFC: [0xCA56], NFD: [0x110D, 0x1165, 0x11B1], NFKC: [0xCA56], NFKD: [0x110D, 0x1165, 0x11B1] }, +{ source: [0xCA57], NFC: [0xCA57], NFD: [0x110D, 0x1165, 0x11B2], NFKC: [0xCA57], NFKD: [0x110D, 0x1165, 0x11B2] }, +{ source: [0xCA58], NFC: [0xCA58], NFD: [0x110D, 0x1165, 0x11B3], NFKC: [0xCA58], NFKD: [0x110D, 0x1165, 0x11B3] }, +{ source: [0xCA59], NFC: [0xCA59], NFD: [0x110D, 0x1165, 0x11B4], NFKC: [0xCA59], NFKD: [0x110D, 0x1165, 0x11B4] }, +{ source: [0xCA5A], NFC: [0xCA5A], NFD: [0x110D, 0x1165, 0x11B5], NFKC: [0xCA5A], NFKD: [0x110D, 0x1165, 0x11B5] }, +{ source: [0xCA5B], NFC: [0xCA5B], NFD: [0x110D, 0x1165, 0x11B6], NFKC: [0xCA5B], NFKD: [0x110D, 0x1165, 0x11B6] }, +{ source: [0xCA5C], NFC: [0xCA5C], NFD: [0x110D, 0x1165, 0x11B7], NFKC: [0xCA5C], NFKD: [0x110D, 0x1165, 0x11B7] }, +{ source: [0xCA5D], NFC: [0xCA5D], NFD: [0x110D, 0x1165, 0x11B8], NFKC: [0xCA5D], NFKD: [0x110D, 0x1165, 0x11B8] }, +{ source: [0xCA5E], NFC: [0xCA5E], NFD: [0x110D, 0x1165, 0x11B9], NFKC: [0xCA5E], NFKD: [0x110D, 0x1165, 0x11B9] }, +{ source: [0xCA5F], NFC: [0xCA5F], NFD: [0x110D, 0x1165, 0x11BA], NFKC: [0xCA5F], NFKD: [0x110D, 0x1165, 0x11BA] }, +{ source: [0xCA60], NFC: [0xCA60], NFD: [0x110D, 0x1165, 0x11BB], NFKC: [0xCA60], NFKD: [0x110D, 0x1165, 0x11BB] }, +{ source: [0xCA61], NFC: [0xCA61], NFD: [0x110D, 0x1165, 0x11BC], NFKC: [0xCA61], NFKD: [0x110D, 0x1165, 0x11BC] }, +{ source: [0xCA62], NFC: [0xCA62], NFD: [0x110D, 0x1165, 0x11BD], NFKC: [0xCA62], NFKD: [0x110D, 0x1165, 0x11BD] }, +{ source: [0xCA63], NFC: [0xCA63], NFD: [0x110D, 0x1165, 0x11BE], NFKC: [0xCA63], NFKD: [0x110D, 0x1165, 0x11BE] }, +{ source: [0xCA64], NFC: [0xCA64], NFD: [0x110D, 0x1165, 0x11BF], NFKC: [0xCA64], NFKD: [0x110D, 0x1165, 0x11BF] }, +{ source: [0xCA65], NFC: [0xCA65], NFD: [0x110D, 0x1165, 0x11C0], NFKC: [0xCA65], NFKD: [0x110D, 0x1165, 0x11C0] }, +{ source: [0xCA66], NFC: [0xCA66], NFD: [0x110D, 0x1165, 0x11C1], NFKC: [0xCA66], NFKD: [0x110D, 0x1165, 0x11C1] }, +{ source: [0xCA67], NFC: [0xCA67], NFD: [0x110D, 0x1165, 0x11C2], NFKC: [0xCA67], NFKD: [0x110D, 0x1165, 0x11C2] }, +{ source: [0xCA68], NFC: [0xCA68], NFD: [0x110D, 0x1166], NFKC: [0xCA68], NFKD: [0x110D, 0x1166] }, +{ source: [0xCA69], NFC: [0xCA69], NFD: [0x110D, 0x1166, 0x11A8], NFKC: [0xCA69], NFKD: [0x110D, 0x1166, 0x11A8] }, +{ source: [0xCA6A], NFC: [0xCA6A], NFD: [0x110D, 0x1166, 0x11A9], NFKC: [0xCA6A], NFKD: [0x110D, 0x1166, 0x11A9] }, +{ source: [0xCA6B], NFC: [0xCA6B], NFD: [0x110D, 0x1166, 0x11AA], NFKC: [0xCA6B], NFKD: [0x110D, 0x1166, 0x11AA] }, +{ source: [0xCA6C], NFC: [0xCA6C], NFD: [0x110D, 0x1166, 0x11AB], NFKC: [0xCA6C], NFKD: [0x110D, 0x1166, 0x11AB] }, +{ source: [0xCA6D], NFC: [0xCA6D], NFD: [0x110D, 0x1166, 0x11AC], NFKC: [0xCA6D], NFKD: [0x110D, 0x1166, 0x11AC] }, +{ source: [0xCA6E], NFC: [0xCA6E], NFD: [0x110D, 0x1166, 0x11AD], NFKC: [0xCA6E], NFKD: [0x110D, 0x1166, 0x11AD] }, +{ source: [0xCA6F], NFC: [0xCA6F], NFD: [0x110D, 0x1166, 0x11AE], NFKC: [0xCA6F], NFKD: [0x110D, 0x1166, 0x11AE] }, +{ source: [0xCA70], NFC: [0xCA70], NFD: [0x110D, 0x1166, 0x11AF], NFKC: [0xCA70], NFKD: [0x110D, 0x1166, 0x11AF] }, +{ source: [0xCA71], NFC: [0xCA71], NFD: [0x110D, 0x1166, 0x11B0], NFKC: [0xCA71], NFKD: [0x110D, 0x1166, 0x11B0] }, +{ source: [0xCA72], NFC: [0xCA72], NFD: [0x110D, 0x1166, 0x11B1], NFKC: [0xCA72], NFKD: [0x110D, 0x1166, 0x11B1] }, +{ source: [0xCA73], NFC: [0xCA73], NFD: [0x110D, 0x1166, 0x11B2], NFKC: [0xCA73], NFKD: [0x110D, 0x1166, 0x11B2] }, +{ source: [0xCA74], NFC: [0xCA74], NFD: [0x110D, 0x1166, 0x11B3], NFKC: [0xCA74], NFKD: [0x110D, 0x1166, 0x11B3] }, +{ source: [0xCA75], NFC: [0xCA75], NFD: [0x110D, 0x1166, 0x11B4], NFKC: [0xCA75], NFKD: [0x110D, 0x1166, 0x11B4] }, +{ source: [0xCA76], NFC: [0xCA76], NFD: [0x110D, 0x1166, 0x11B5], NFKC: [0xCA76], NFKD: [0x110D, 0x1166, 0x11B5] }, +{ source: [0xCA77], NFC: [0xCA77], NFD: [0x110D, 0x1166, 0x11B6], NFKC: [0xCA77], NFKD: [0x110D, 0x1166, 0x11B6] }, +{ source: [0xCA78], NFC: [0xCA78], NFD: [0x110D, 0x1166, 0x11B7], NFKC: [0xCA78], NFKD: [0x110D, 0x1166, 0x11B7] }, +{ source: [0xCA79], NFC: [0xCA79], NFD: [0x110D, 0x1166, 0x11B8], NFKC: [0xCA79], NFKD: [0x110D, 0x1166, 0x11B8] }, +{ source: [0xCA7A], NFC: [0xCA7A], NFD: [0x110D, 0x1166, 0x11B9], NFKC: [0xCA7A], NFKD: [0x110D, 0x1166, 0x11B9] }, +{ source: [0xCA7B], NFC: [0xCA7B], NFD: [0x110D, 0x1166, 0x11BA], NFKC: [0xCA7B], NFKD: [0x110D, 0x1166, 0x11BA] }, +{ source: [0xCA7C], NFC: [0xCA7C], NFD: [0x110D, 0x1166, 0x11BB], NFKC: [0xCA7C], NFKD: [0x110D, 0x1166, 0x11BB] }, +{ source: [0xCA7D], NFC: [0xCA7D], NFD: [0x110D, 0x1166, 0x11BC], NFKC: [0xCA7D], NFKD: [0x110D, 0x1166, 0x11BC] }, +{ source: [0xCA7E], NFC: [0xCA7E], NFD: [0x110D, 0x1166, 0x11BD], NFKC: [0xCA7E], NFKD: [0x110D, 0x1166, 0x11BD] }, +{ source: [0xCA7F], NFC: [0xCA7F], NFD: [0x110D, 0x1166, 0x11BE], NFKC: [0xCA7F], NFKD: [0x110D, 0x1166, 0x11BE] }, +{ source: [0xCA80], NFC: [0xCA80], NFD: [0x110D, 0x1166, 0x11BF], NFKC: [0xCA80], NFKD: [0x110D, 0x1166, 0x11BF] }, +{ source: [0xCA81], NFC: [0xCA81], NFD: [0x110D, 0x1166, 0x11C0], NFKC: [0xCA81], NFKD: [0x110D, 0x1166, 0x11C0] }, +{ source: [0xCA82], NFC: [0xCA82], NFD: [0x110D, 0x1166, 0x11C1], NFKC: [0xCA82], NFKD: [0x110D, 0x1166, 0x11C1] }, +{ source: [0xCA83], NFC: [0xCA83], NFD: [0x110D, 0x1166, 0x11C2], NFKC: [0xCA83], NFKD: [0x110D, 0x1166, 0x11C2] }, +{ source: [0xCA84], NFC: [0xCA84], NFD: [0x110D, 0x1167], NFKC: [0xCA84], NFKD: [0x110D, 0x1167] }, +{ source: [0xCA85], NFC: [0xCA85], NFD: [0x110D, 0x1167, 0x11A8], NFKC: [0xCA85], NFKD: [0x110D, 0x1167, 0x11A8] }, +{ source: [0xCA86], NFC: [0xCA86], NFD: [0x110D, 0x1167, 0x11A9], NFKC: [0xCA86], NFKD: [0x110D, 0x1167, 0x11A9] }, +{ source: [0xCA87], NFC: [0xCA87], NFD: [0x110D, 0x1167, 0x11AA], NFKC: [0xCA87], NFKD: [0x110D, 0x1167, 0x11AA] }, +{ source: [0xCA88], NFC: [0xCA88], NFD: [0x110D, 0x1167, 0x11AB], NFKC: [0xCA88], NFKD: [0x110D, 0x1167, 0x11AB] }, +{ source: [0xCA89], NFC: [0xCA89], NFD: [0x110D, 0x1167, 0x11AC], NFKC: [0xCA89], NFKD: [0x110D, 0x1167, 0x11AC] }, +{ source: [0xCA8A], NFC: [0xCA8A], NFD: [0x110D, 0x1167, 0x11AD], NFKC: [0xCA8A], NFKD: [0x110D, 0x1167, 0x11AD] }, +{ source: [0xCA8B], NFC: [0xCA8B], NFD: [0x110D, 0x1167, 0x11AE], NFKC: [0xCA8B], NFKD: [0x110D, 0x1167, 0x11AE] }, +{ source: [0xCA8C], NFC: [0xCA8C], NFD: [0x110D, 0x1167, 0x11AF], NFKC: [0xCA8C], NFKD: [0x110D, 0x1167, 0x11AF] }, +{ source: [0xCA8D], NFC: [0xCA8D], NFD: [0x110D, 0x1167, 0x11B0], NFKC: [0xCA8D], NFKD: [0x110D, 0x1167, 0x11B0] }, +{ source: [0xCA8E], NFC: [0xCA8E], NFD: [0x110D, 0x1167, 0x11B1], NFKC: [0xCA8E], NFKD: [0x110D, 0x1167, 0x11B1] }, +{ source: [0xCA8F], NFC: [0xCA8F], NFD: [0x110D, 0x1167, 0x11B2], NFKC: [0xCA8F], NFKD: [0x110D, 0x1167, 0x11B2] }, +{ source: [0xCA90], NFC: [0xCA90], NFD: [0x110D, 0x1167, 0x11B3], NFKC: [0xCA90], NFKD: [0x110D, 0x1167, 0x11B3] }, +{ source: [0xCA91], NFC: [0xCA91], NFD: [0x110D, 0x1167, 0x11B4], NFKC: [0xCA91], NFKD: [0x110D, 0x1167, 0x11B4] }, +{ source: [0xCA92], NFC: [0xCA92], NFD: [0x110D, 0x1167, 0x11B5], NFKC: [0xCA92], NFKD: [0x110D, 0x1167, 0x11B5] }, +{ source: [0xCA93], NFC: [0xCA93], NFD: [0x110D, 0x1167, 0x11B6], NFKC: [0xCA93], NFKD: [0x110D, 0x1167, 0x11B6] }, +{ source: [0xCA94], NFC: [0xCA94], NFD: [0x110D, 0x1167, 0x11B7], NFKC: [0xCA94], NFKD: [0x110D, 0x1167, 0x11B7] }, +{ source: [0xCA95], NFC: [0xCA95], NFD: [0x110D, 0x1167, 0x11B8], NFKC: [0xCA95], NFKD: [0x110D, 0x1167, 0x11B8] }, +{ source: [0xCA96], NFC: [0xCA96], NFD: [0x110D, 0x1167, 0x11B9], NFKC: [0xCA96], NFKD: [0x110D, 0x1167, 0x11B9] }, +{ source: [0xCA97], NFC: [0xCA97], NFD: [0x110D, 0x1167, 0x11BA], NFKC: [0xCA97], NFKD: [0x110D, 0x1167, 0x11BA] }, +{ source: [0xCA98], NFC: [0xCA98], NFD: [0x110D, 0x1167, 0x11BB], NFKC: [0xCA98], NFKD: [0x110D, 0x1167, 0x11BB] }, +{ source: [0xCA99], NFC: [0xCA99], NFD: [0x110D, 0x1167, 0x11BC], NFKC: [0xCA99], NFKD: [0x110D, 0x1167, 0x11BC] }, +{ source: [0xCA9A], NFC: [0xCA9A], NFD: [0x110D, 0x1167, 0x11BD], NFKC: [0xCA9A], NFKD: [0x110D, 0x1167, 0x11BD] }, +{ source: [0xCA9B], NFC: [0xCA9B], NFD: [0x110D, 0x1167, 0x11BE], NFKC: [0xCA9B], NFKD: [0x110D, 0x1167, 0x11BE] }, +{ source: [0xCA9C], NFC: [0xCA9C], NFD: [0x110D, 0x1167, 0x11BF], NFKC: [0xCA9C], NFKD: [0x110D, 0x1167, 0x11BF] }, +{ source: [0xCA9D], NFC: [0xCA9D], NFD: [0x110D, 0x1167, 0x11C0], NFKC: [0xCA9D], NFKD: [0x110D, 0x1167, 0x11C0] }, +{ source: [0xCA9E], NFC: [0xCA9E], NFD: [0x110D, 0x1167, 0x11C1], NFKC: [0xCA9E], NFKD: [0x110D, 0x1167, 0x11C1] }, +{ source: [0xCA9F], NFC: [0xCA9F], NFD: [0x110D, 0x1167, 0x11C2], NFKC: [0xCA9F], NFKD: [0x110D, 0x1167, 0x11C2] }, +{ source: [0xCAA0], NFC: [0xCAA0], NFD: [0x110D, 0x1168], NFKC: [0xCAA0], NFKD: [0x110D, 0x1168] }, +{ source: [0xCAA1], NFC: [0xCAA1], NFD: [0x110D, 0x1168, 0x11A8], NFKC: [0xCAA1], NFKD: [0x110D, 0x1168, 0x11A8] }, +{ source: [0xCAA2], NFC: [0xCAA2], NFD: [0x110D, 0x1168, 0x11A9], NFKC: [0xCAA2], NFKD: [0x110D, 0x1168, 0x11A9] }, +{ source: [0xCAA3], NFC: [0xCAA3], NFD: [0x110D, 0x1168, 0x11AA], NFKC: [0xCAA3], NFKD: [0x110D, 0x1168, 0x11AA] }, +{ source: [0xCAA4], NFC: [0xCAA4], NFD: [0x110D, 0x1168, 0x11AB], NFKC: [0xCAA4], NFKD: [0x110D, 0x1168, 0x11AB] }, +{ source: [0xCAA5], NFC: [0xCAA5], NFD: [0x110D, 0x1168, 0x11AC], NFKC: [0xCAA5], NFKD: [0x110D, 0x1168, 0x11AC] }, +{ source: [0xCAA6], NFC: [0xCAA6], NFD: [0x110D, 0x1168, 0x11AD], NFKC: [0xCAA6], NFKD: [0x110D, 0x1168, 0x11AD] }, +{ source: [0xCAA7], NFC: [0xCAA7], NFD: [0x110D, 0x1168, 0x11AE], NFKC: [0xCAA7], NFKD: [0x110D, 0x1168, 0x11AE] }, +{ source: [0xCAA8], NFC: [0xCAA8], NFD: [0x110D, 0x1168, 0x11AF], NFKC: [0xCAA8], NFKD: [0x110D, 0x1168, 0x11AF] }, +{ source: [0xCAA9], NFC: [0xCAA9], NFD: [0x110D, 0x1168, 0x11B0], NFKC: [0xCAA9], NFKD: [0x110D, 0x1168, 0x11B0] }, +{ source: [0xCAAA], NFC: [0xCAAA], NFD: [0x110D, 0x1168, 0x11B1], NFKC: [0xCAAA], NFKD: [0x110D, 0x1168, 0x11B1] }, +{ source: [0xCAAB], NFC: [0xCAAB], NFD: [0x110D, 0x1168, 0x11B2], NFKC: [0xCAAB], NFKD: [0x110D, 0x1168, 0x11B2] }, +{ source: [0xCAAC], NFC: [0xCAAC], NFD: [0x110D, 0x1168, 0x11B3], NFKC: [0xCAAC], NFKD: [0x110D, 0x1168, 0x11B3] }, +{ source: [0xCAAD], NFC: [0xCAAD], NFD: [0x110D, 0x1168, 0x11B4], NFKC: [0xCAAD], NFKD: [0x110D, 0x1168, 0x11B4] }, +{ source: [0xCAAE], NFC: [0xCAAE], NFD: [0x110D, 0x1168, 0x11B5], NFKC: [0xCAAE], NFKD: [0x110D, 0x1168, 0x11B5] }, +{ source: [0xCAAF], NFC: [0xCAAF], NFD: [0x110D, 0x1168, 0x11B6], NFKC: [0xCAAF], NFKD: [0x110D, 0x1168, 0x11B6] }, +{ source: [0xCAB0], NFC: [0xCAB0], NFD: [0x110D, 0x1168, 0x11B7], NFKC: [0xCAB0], NFKD: [0x110D, 0x1168, 0x11B7] }, +{ source: [0xCAB1], NFC: [0xCAB1], NFD: [0x110D, 0x1168, 0x11B8], NFKC: [0xCAB1], NFKD: [0x110D, 0x1168, 0x11B8] }, +{ source: [0xCAB2], NFC: [0xCAB2], NFD: [0x110D, 0x1168, 0x11B9], NFKC: [0xCAB2], NFKD: [0x110D, 0x1168, 0x11B9] }, +{ source: [0xCAB3], NFC: [0xCAB3], NFD: [0x110D, 0x1168, 0x11BA], NFKC: [0xCAB3], NFKD: [0x110D, 0x1168, 0x11BA] }, +{ source: [0xCAB4], NFC: [0xCAB4], NFD: [0x110D, 0x1168, 0x11BB], NFKC: [0xCAB4], NFKD: [0x110D, 0x1168, 0x11BB] }, +{ source: [0xCAB5], NFC: [0xCAB5], NFD: [0x110D, 0x1168, 0x11BC], NFKC: [0xCAB5], NFKD: [0x110D, 0x1168, 0x11BC] }, +{ source: [0xCAB6], NFC: [0xCAB6], NFD: [0x110D, 0x1168, 0x11BD], NFKC: [0xCAB6], NFKD: [0x110D, 0x1168, 0x11BD] }, +{ source: [0xCAB7], NFC: [0xCAB7], NFD: [0x110D, 0x1168, 0x11BE], NFKC: [0xCAB7], NFKD: [0x110D, 0x1168, 0x11BE] }, +{ source: [0xCAB8], NFC: [0xCAB8], NFD: [0x110D, 0x1168, 0x11BF], NFKC: [0xCAB8], NFKD: [0x110D, 0x1168, 0x11BF] }, +{ source: [0xCAB9], NFC: [0xCAB9], NFD: [0x110D, 0x1168, 0x11C0], NFKC: [0xCAB9], NFKD: [0x110D, 0x1168, 0x11C0] }, +{ source: [0xCABA], NFC: [0xCABA], NFD: [0x110D, 0x1168, 0x11C1], NFKC: [0xCABA], NFKD: [0x110D, 0x1168, 0x11C1] }, +{ source: [0xCABB], NFC: [0xCABB], NFD: [0x110D, 0x1168, 0x11C2], NFKC: [0xCABB], NFKD: [0x110D, 0x1168, 0x11C2] }, +{ source: [0xCABC], NFC: [0xCABC], NFD: [0x110D, 0x1169], NFKC: [0xCABC], NFKD: [0x110D, 0x1169] }, +{ source: [0xCABD], NFC: [0xCABD], NFD: [0x110D, 0x1169, 0x11A8], NFKC: [0xCABD], NFKD: [0x110D, 0x1169, 0x11A8] }, +{ source: [0xCABE], NFC: [0xCABE], NFD: [0x110D, 0x1169, 0x11A9], NFKC: [0xCABE], NFKD: [0x110D, 0x1169, 0x11A9] }, +{ source: [0xCABF], NFC: [0xCABF], NFD: [0x110D, 0x1169, 0x11AA], NFKC: [0xCABF], NFKD: [0x110D, 0x1169, 0x11AA] }, +{ source: [0xCAC0], NFC: [0xCAC0], NFD: [0x110D, 0x1169, 0x11AB], NFKC: [0xCAC0], NFKD: [0x110D, 0x1169, 0x11AB] }, +{ source: [0xCAC1], NFC: [0xCAC1], NFD: [0x110D, 0x1169, 0x11AC], NFKC: [0xCAC1], NFKD: [0x110D, 0x1169, 0x11AC] }, +{ source: [0xCAC2], NFC: [0xCAC2], NFD: [0x110D, 0x1169, 0x11AD], NFKC: [0xCAC2], NFKD: [0x110D, 0x1169, 0x11AD] }, +{ source: [0xCAC3], NFC: [0xCAC3], NFD: [0x110D, 0x1169, 0x11AE], NFKC: [0xCAC3], NFKD: [0x110D, 0x1169, 0x11AE] }, +{ source: [0xCAC4], NFC: [0xCAC4], NFD: [0x110D, 0x1169, 0x11AF], NFKC: [0xCAC4], NFKD: [0x110D, 0x1169, 0x11AF] }, +{ source: [0xCAC5], NFC: [0xCAC5], NFD: [0x110D, 0x1169, 0x11B0], NFKC: [0xCAC5], NFKD: [0x110D, 0x1169, 0x11B0] }, +{ source: [0xCAC6], NFC: [0xCAC6], NFD: [0x110D, 0x1169, 0x11B1], NFKC: [0xCAC6], NFKD: [0x110D, 0x1169, 0x11B1] }, +{ source: [0xCAC7], NFC: [0xCAC7], NFD: [0x110D, 0x1169, 0x11B2], NFKC: [0xCAC7], NFKD: [0x110D, 0x1169, 0x11B2] }, +{ source: [0xCAC8], NFC: [0xCAC8], NFD: [0x110D, 0x1169, 0x11B3], NFKC: [0xCAC8], NFKD: [0x110D, 0x1169, 0x11B3] }, +{ source: [0xCAC9], NFC: [0xCAC9], NFD: [0x110D, 0x1169, 0x11B4], NFKC: [0xCAC9], NFKD: [0x110D, 0x1169, 0x11B4] }, +{ source: [0xCACA], NFC: [0xCACA], NFD: [0x110D, 0x1169, 0x11B5], NFKC: [0xCACA], NFKD: [0x110D, 0x1169, 0x11B5] }, +{ source: [0xCACB], NFC: [0xCACB], NFD: [0x110D, 0x1169, 0x11B6], NFKC: [0xCACB], NFKD: [0x110D, 0x1169, 0x11B6] }, +{ source: [0xCACC], NFC: [0xCACC], NFD: [0x110D, 0x1169, 0x11B7], NFKC: [0xCACC], NFKD: [0x110D, 0x1169, 0x11B7] }, +{ source: [0xCACD], NFC: [0xCACD], NFD: [0x110D, 0x1169, 0x11B8], NFKC: [0xCACD], NFKD: [0x110D, 0x1169, 0x11B8] }, +{ source: [0xCACE], NFC: [0xCACE], NFD: [0x110D, 0x1169, 0x11B9], NFKC: [0xCACE], NFKD: [0x110D, 0x1169, 0x11B9] }, +{ source: [0xCACF], NFC: [0xCACF], NFD: [0x110D, 0x1169, 0x11BA], NFKC: [0xCACF], NFKD: [0x110D, 0x1169, 0x11BA] }, +{ source: [0xCAD0], NFC: [0xCAD0], NFD: [0x110D, 0x1169, 0x11BB], NFKC: [0xCAD0], NFKD: [0x110D, 0x1169, 0x11BB] }, +{ source: [0xCAD1], NFC: [0xCAD1], NFD: [0x110D, 0x1169, 0x11BC], NFKC: [0xCAD1], NFKD: [0x110D, 0x1169, 0x11BC] }, +{ source: [0xCAD2], NFC: [0xCAD2], NFD: [0x110D, 0x1169, 0x11BD], NFKC: [0xCAD2], NFKD: [0x110D, 0x1169, 0x11BD] }, +{ source: [0xCAD3], NFC: [0xCAD3], NFD: [0x110D, 0x1169, 0x11BE], NFKC: [0xCAD3], NFKD: [0x110D, 0x1169, 0x11BE] }, +{ source: [0xCAD4], NFC: [0xCAD4], NFD: [0x110D, 0x1169, 0x11BF], NFKC: [0xCAD4], NFKD: [0x110D, 0x1169, 0x11BF] }, +{ source: [0xCAD5], NFC: [0xCAD5], NFD: [0x110D, 0x1169, 0x11C0], NFKC: [0xCAD5], NFKD: [0x110D, 0x1169, 0x11C0] }, +{ source: [0xCAD6], NFC: [0xCAD6], NFD: [0x110D, 0x1169, 0x11C1], NFKC: [0xCAD6], NFKD: [0x110D, 0x1169, 0x11C1] }, +{ source: [0xCAD7], NFC: [0xCAD7], NFD: [0x110D, 0x1169, 0x11C2], NFKC: [0xCAD7], NFKD: [0x110D, 0x1169, 0x11C2] }, +{ source: [0xCAD8], NFC: [0xCAD8], NFD: [0x110D, 0x116A], NFKC: [0xCAD8], NFKD: [0x110D, 0x116A] }, +{ source: [0xCAD9], NFC: [0xCAD9], NFD: [0x110D, 0x116A, 0x11A8], NFKC: [0xCAD9], NFKD: [0x110D, 0x116A, 0x11A8] }, +{ source: [0xCADA], NFC: [0xCADA], NFD: [0x110D, 0x116A, 0x11A9], NFKC: [0xCADA], NFKD: [0x110D, 0x116A, 0x11A9] }, +{ source: [0xCADB], NFC: [0xCADB], NFD: [0x110D, 0x116A, 0x11AA], NFKC: [0xCADB], NFKD: [0x110D, 0x116A, 0x11AA] }, +{ source: [0xCADC], NFC: [0xCADC], NFD: [0x110D, 0x116A, 0x11AB], NFKC: [0xCADC], NFKD: [0x110D, 0x116A, 0x11AB] }, +{ source: [0xCADD], NFC: [0xCADD], NFD: [0x110D, 0x116A, 0x11AC], NFKC: [0xCADD], NFKD: [0x110D, 0x116A, 0x11AC] }, +{ source: [0xCADE], NFC: [0xCADE], NFD: [0x110D, 0x116A, 0x11AD], NFKC: [0xCADE], NFKD: [0x110D, 0x116A, 0x11AD] }, +{ source: [0xCADF], NFC: [0xCADF], NFD: [0x110D, 0x116A, 0x11AE], NFKC: [0xCADF], NFKD: [0x110D, 0x116A, 0x11AE] }, +{ source: [0xCAE0], NFC: [0xCAE0], NFD: [0x110D, 0x116A, 0x11AF], NFKC: [0xCAE0], NFKD: [0x110D, 0x116A, 0x11AF] }, +{ source: [0xCAE1], NFC: [0xCAE1], NFD: [0x110D, 0x116A, 0x11B0], NFKC: [0xCAE1], NFKD: [0x110D, 0x116A, 0x11B0] }, +{ source: [0xCAE2], NFC: [0xCAE2], NFD: [0x110D, 0x116A, 0x11B1], NFKC: [0xCAE2], NFKD: [0x110D, 0x116A, 0x11B1] }, +{ source: [0xCAE3], NFC: [0xCAE3], NFD: [0x110D, 0x116A, 0x11B2], NFKC: [0xCAE3], NFKD: [0x110D, 0x116A, 0x11B2] }, +{ source: [0xCAE4], NFC: [0xCAE4], NFD: [0x110D, 0x116A, 0x11B3], NFKC: [0xCAE4], NFKD: [0x110D, 0x116A, 0x11B3] }, +{ source: [0xCAE5], NFC: [0xCAE5], NFD: [0x110D, 0x116A, 0x11B4], NFKC: [0xCAE5], NFKD: [0x110D, 0x116A, 0x11B4] }, +{ source: [0xCAE6], NFC: [0xCAE6], NFD: [0x110D, 0x116A, 0x11B5], NFKC: [0xCAE6], NFKD: [0x110D, 0x116A, 0x11B5] }, +{ source: [0xCAE7], NFC: [0xCAE7], NFD: [0x110D, 0x116A, 0x11B6], NFKC: [0xCAE7], NFKD: [0x110D, 0x116A, 0x11B6] }, +{ source: [0xCAE8], NFC: [0xCAE8], NFD: [0x110D, 0x116A, 0x11B7], NFKC: [0xCAE8], NFKD: [0x110D, 0x116A, 0x11B7] }, +{ source: [0xCAE9], NFC: [0xCAE9], NFD: [0x110D, 0x116A, 0x11B8], NFKC: [0xCAE9], NFKD: [0x110D, 0x116A, 0x11B8] }, +{ source: [0xCAEA], NFC: [0xCAEA], NFD: [0x110D, 0x116A, 0x11B9], NFKC: [0xCAEA], NFKD: [0x110D, 0x116A, 0x11B9] }, +{ source: [0xCAEB], NFC: [0xCAEB], NFD: [0x110D, 0x116A, 0x11BA], NFKC: [0xCAEB], NFKD: [0x110D, 0x116A, 0x11BA] }, +{ source: [0xCAEC], NFC: [0xCAEC], NFD: [0x110D, 0x116A, 0x11BB], NFKC: [0xCAEC], NFKD: [0x110D, 0x116A, 0x11BB] }, +{ source: [0xCAED], NFC: [0xCAED], NFD: [0x110D, 0x116A, 0x11BC], NFKC: [0xCAED], NFKD: [0x110D, 0x116A, 0x11BC] }, +{ source: [0xCAEE], NFC: [0xCAEE], NFD: [0x110D, 0x116A, 0x11BD], NFKC: [0xCAEE], NFKD: [0x110D, 0x116A, 0x11BD] }, +{ source: [0xCAEF], NFC: [0xCAEF], NFD: [0x110D, 0x116A, 0x11BE], NFKC: [0xCAEF], NFKD: [0x110D, 0x116A, 0x11BE] }, +{ source: [0xCAF0], NFC: [0xCAF0], NFD: [0x110D, 0x116A, 0x11BF], NFKC: [0xCAF0], NFKD: [0x110D, 0x116A, 0x11BF] }, +{ source: [0xCAF1], NFC: [0xCAF1], NFD: [0x110D, 0x116A, 0x11C0], NFKC: [0xCAF1], NFKD: [0x110D, 0x116A, 0x11C0] }, +{ source: [0xCAF2], NFC: [0xCAF2], NFD: [0x110D, 0x116A, 0x11C1], NFKC: [0xCAF2], NFKD: [0x110D, 0x116A, 0x11C1] }, +{ source: [0xCAF3], NFC: [0xCAF3], NFD: [0x110D, 0x116A, 0x11C2], NFKC: [0xCAF3], NFKD: [0x110D, 0x116A, 0x11C2] }, +{ source: [0xCAF4], NFC: [0xCAF4], NFD: [0x110D, 0x116B], NFKC: [0xCAF4], NFKD: [0x110D, 0x116B] }, +{ source: [0xCAF5], NFC: [0xCAF5], NFD: [0x110D, 0x116B, 0x11A8], NFKC: [0xCAF5], NFKD: [0x110D, 0x116B, 0x11A8] }, +{ source: [0xCAF6], NFC: [0xCAF6], NFD: [0x110D, 0x116B, 0x11A9], NFKC: [0xCAF6], NFKD: [0x110D, 0x116B, 0x11A9] }, +{ source: [0xCAF7], NFC: [0xCAF7], NFD: [0x110D, 0x116B, 0x11AA], NFKC: [0xCAF7], NFKD: [0x110D, 0x116B, 0x11AA] }, +{ source: [0xCAF8], NFC: [0xCAF8], NFD: [0x110D, 0x116B, 0x11AB], NFKC: [0xCAF8], NFKD: [0x110D, 0x116B, 0x11AB] }, +{ source: [0xCAF9], NFC: [0xCAF9], NFD: [0x110D, 0x116B, 0x11AC], NFKC: [0xCAF9], NFKD: [0x110D, 0x116B, 0x11AC] }, +{ source: [0xCAFA], NFC: [0xCAFA], NFD: [0x110D, 0x116B, 0x11AD], NFKC: [0xCAFA], NFKD: [0x110D, 0x116B, 0x11AD] }, +{ source: [0xCAFB], NFC: [0xCAFB], NFD: [0x110D, 0x116B, 0x11AE], NFKC: [0xCAFB], NFKD: [0x110D, 0x116B, 0x11AE] }, +{ source: [0xCAFC], NFC: [0xCAFC], NFD: [0x110D, 0x116B, 0x11AF], NFKC: [0xCAFC], NFKD: [0x110D, 0x116B, 0x11AF] }, +{ source: [0xCAFD], NFC: [0xCAFD], NFD: [0x110D, 0x116B, 0x11B0], NFKC: [0xCAFD], NFKD: [0x110D, 0x116B, 0x11B0] }, +{ source: [0xCAFE], NFC: [0xCAFE], NFD: [0x110D, 0x116B, 0x11B1], NFKC: [0xCAFE], NFKD: [0x110D, 0x116B, 0x11B1] }, +{ source: [0xCAFF], NFC: [0xCAFF], NFD: [0x110D, 0x116B, 0x11B2], NFKC: [0xCAFF], NFKD: [0x110D, 0x116B, 0x11B2] }, +{ source: [0xCB00], NFC: [0xCB00], NFD: [0x110D, 0x116B, 0x11B3], NFKC: [0xCB00], NFKD: [0x110D, 0x116B, 0x11B3] }, +{ source: [0xCB01], NFC: [0xCB01], NFD: [0x110D, 0x116B, 0x11B4], NFKC: [0xCB01], NFKD: [0x110D, 0x116B, 0x11B4] }, +{ source: [0xCB02], NFC: [0xCB02], NFD: [0x110D, 0x116B, 0x11B5], NFKC: [0xCB02], NFKD: [0x110D, 0x116B, 0x11B5] }, +{ source: [0xCB03], NFC: [0xCB03], NFD: [0x110D, 0x116B, 0x11B6], NFKC: [0xCB03], NFKD: [0x110D, 0x116B, 0x11B6] }, +{ source: [0xCB04], NFC: [0xCB04], NFD: [0x110D, 0x116B, 0x11B7], NFKC: [0xCB04], NFKD: [0x110D, 0x116B, 0x11B7] }, +{ source: [0xCB05], NFC: [0xCB05], NFD: [0x110D, 0x116B, 0x11B8], NFKC: [0xCB05], NFKD: [0x110D, 0x116B, 0x11B8] }, +{ source: [0xCB06], NFC: [0xCB06], NFD: [0x110D, 0x116B, 0x11B9], NFKC: [0xCB06], NFKD: [0x110D, 0x116B, 0x11B9] }, +{ source: [0xCB07], NFC: [0xCB07], NFD: [0x110D, 0x116B, 0x11BA], NFKC: [0xCB07], NFKD: [0x110D, 0x116B, 0x11BA] }, +{ source: [0xCB08], NFC: [0xCB08], NFD: [0x110D, 0x116B, 0x11BB], NFKC: [0xCB08], NFKD: [0x110D, 0x116B, 0x11BB] }, +{ source: [0xCB09], NFC: [0xCB09], NFD: [0x110D, 0x116B, 0x11BC], NFKC: [0xCB09], NFKD: [0x110D, 0x116B, 0x11BC] }, +{ source: [0xCB0A], NFC: [0xCB0A], NFD: [0x110D, 0x116B, 0x11BD], NFKC: [0xCB0A], NFKD: [0x110D, 0x116B, 0x11BD] }, +{ source: [0xCB0B], NFC: [0xCB0B], NFD: [0x110D, 0x116B, 0x11BE], NFKC: [0xCB0B], NFKD: [0x110D, 0x116B, 0x11BE] }, +{ source: [0xCB0C], NFC: [0xCB0C], NFD: [0x110D, 0x116B, 0x11BF], NFKC: [0xCB0C], NFKD: [0x110D, 0x116B, 0x11BF] }, +{ source: [0xCB0D], NFC: [0xCB0D], NFD: [0x110D, 0x116B, 0x11C0], NFKC: [0xCB0D], NFKD: [0x110D, 0x116B, 0x11C0] }, +{ source: [0xCB0E], NFC: [0xCB0E], NFD: [0x110D, 0x116B, 0x11C1], NFKC: [0xCB0E], NFKD: [0x110D, 0x116B, 0x11C1] }, +{ source: [0xCB0F], NFC: [0xCB0F], NFD: [0x110D, 0x116B, 0x11C2], NFKC: [0xCB0F], NFKD: [0x110D, 0x116B, 0x11C2] }, +{ source: [0xCB10], NFC: [0xCB10], NFD: [0x110D, 0x116C], NFKC: [0xCB10], NFKD: [0x110D, 0x116C] }, +{ source: [0xCB11], NFC: [0xCB11], NFD: [0x110D, 0x116C, 0x11A8], NFKC: [0xCB11], NFKD: [0x110D, 0x116C, 0x11A8] }, +{ source: [0xCB12], NFC: [0xCB12], NFD: [0x110D, 0x116C, 0x11A9], NFKC: [0xCB12], NFKD: [0x110D, 0x116C, 0x11A9] }, +{ source: [0xCB13], NFC: [0xCB13], NFD: [0x110D, 0x116C, 0x11AA], NFKC: [0xCB13], NFKD: [0x110D, 0x116C, 0x11AA] }, +{ source: [0xCB14], NFC: [0xCB14], NFD: [0x110D, 0x116C, 0x11AB], NFKC: [0xCB14], NFKD: [0x110D, 0x116C, 0x11AB] }, +{ source: [0xCB15], NFC: [0xCB15], NFD: [0x110D, 0x116C, 0x11AC], NFKC: [0xCB15], NFKD: [0x110D, 0x116C, 0x11AC] }, +{ source: [0xCB16], NFC: [0xCB16], NFD: [0x110D, 0x116C, 0x11AD], NFKC: [0xCB16], NFKD: [0x110D, 0x116C, 0x11AD] }, +{ source: [0xCB17], NFC: [0xCB17], NFD: [0x110D, 0x116C, 0x11AE], NFKC: [0xCB17], NFKD: [0x110D, 0x116C, 0x11AE] }, +{ source: [0xCB18], NFC: [0xCB18], NFD: [0x110D, 0x116C, 0x11AF], NFKC: [0xCB18], NFKD: [0x110D, 0x116C, 0x11AF] }, +{ source: [0xCB19], NFC: [0xCB19], NFD: [0x110D, 0x116C, 0x11B0], NFKC: [0xCB19], NFKD: [0x110D, 0x116C, 0x11B0] }, +{ source: [0xCB1A], NFC: [0xCB1A], NFD: [0x110D, 0x116C, 0x11B1], NFKC: [0xCB1A], NFKD: [0x110D, 0x116C, 0x11B1] }, +{ source: [0xCB1B], NFC: [0xCB1B], NFD: [0x110D, 0x116C, 0x11B2], NFKC: [0xCB1B], NFKD: [0x110D, 0x116C, 0x11B2] }, +{ source: [0xCB1C], NFC: [0xCB1C], NFD: [0x110D, 0x116C, 0x11B3], NFKC: [0xCB1C], NFKD: [0x110D, 0x116C, 0x11B3] }, +{ source: [0xCB1D], NFC: [0xCB1D], NFD: [0x110D, 0x116C, 0x11B4], NFKC: [0xCB1D], NFKD: [0x110D, 0x116C, 0x11B4] }, +{ source: [0xCB1E], NFC: [0xCB1E], NFD: [0x110D, 0x116C, 0x11B5], NFKC: [0xCB1E], NFKD: [0x110D, 0x116C, 0x11B5] }, +{ source: [0xCB1F], NFC: [0xCB1F], NFD: [0x110D, 0x116C, 0x11B6], NFKC: [0xCB1F], NFKD: [0x110D, 0x116C, 0x11B6] }, +{ source: [0xCB20], NFC: [0xCB20], NFD: [0x110D, 0x116C, 0x11B7], NFKC: [0xCB20], NFKD: [0x110D, 0x116C, 0x11B7] }, +{ source: [0xCB21], NFC: [0xCB21], NFD: [0x110D, 0x116C, 0x11B8], NFKC: [0xCB21], NFKD: [0x110D, 0x116C, 0x11B8] }, +{ source: [0xCB22], NFC: [0xCB22], NFD: [0x110D, 0x116C, 0x11B9], NFKC: [0xCB22], NFKD: [0x110D, 0x116C, 0x11B9] }, +{ source: [0xCB23], NFC: [0xCB23], NFD: [0x110D, 0x116C, 0x11BA], NFKC: [0xCB23], NFKD: [0x110D, 0x116C, 0x11BA] }, +{ source: [0xCB24], NFC: [0xCB24], NFD: [0x110D, 0x116C, 0x11BB], NFKC: [0xCB24], NFKD: [0x110D, 0x116C, 0x11BB] }, +{ source: [0xCB25], NFC: [0xCB25], NFD: [0x110D, 0x116C, 0x11BC], NFKC: [0xCB25], NFKD: [0x110D, 0x116C, 0x11BC] }, +{ source: [0xCB26], NFC: [0xCB26], NFD: [0x110D, 0x116C, 0x11BD], NFKC: [0xCB26], NFKD: [0x110D, 0x116C, 0x11BD] }, +{ source: [0xCB27], NFC: [0xCB27], NFD: [0x110D, 0x116C, 0x11BE], NFKC: [0xCB27], NFKD: [0x110D, 0x116C, 0x11BE] }, +{ source: [0xCB28], NFC: [0xCB28], NFD: [0x110D, 0x116C, 0x11BF], NFKC: [0xCB28], NFKD: [0x110D, 0x116C, 0x11BF] }, +{ source: [0xCB29], NFC: [0xCB29], NFD: [0x110D, 0x116C, 0x11C0], NFKC: [0xCB29], NFKD: [0x110D, 0x116C, 0x11C0] }, +{ source: [0xCB2A], NFC: [0xCB2A], NFD: [0x110D, 0x116C, 0x11C1], NFKC: [0xCB2A], NFKD: [0x110D, 0x116C, 0x11C1] }, +{ source: [0xCB2B], NFC: [0xCB2B], NFD: [0x110D, 0x116C, 0x11C2], NFKC: [0xCB2B], NFKD: [0x110D, 0x116C, 0x11C2] }, +{ source: [0xCB2C], NFC: [0xCB2C], NFD: [0x110D, 0x116D], NFKC: [0xCB2C], NFKD: [0x110D, 0x116D] }, +{ source: [0xCB2D], NFC: [0xCB2D], NFD: [0x110D, 0x116D, 0x11A8], NFKC: [0xCB2D], NFKD: [0x110D, 0x116D, 0x11A8] }, +{ source: [0xCB2E], NFC: [0xCB2E], NFD: [0x110D, 0x116D, 0x11A9], NFKC: [0xCB2E], NFKD: [0x110D, 0x116D, 0x11A9] }, +{ source: [0xCB2F], NFC: [0xCB2F], NFD: [0x110D, 0x116D, 0x11AA], NFKC: [0xCB2F], NFKD: [0x110D, 0x116D, 0x11AA] }, +{ source: [0xCB30], NFC: [0xCB30], NFD: [0x110D, 0x116D, 0x11AB], NFKC: [0xCB30], NFKD: [0x110D, 0x116D, 0x11AB] }, +{ source: [0xCB31], NFC: [0xCB31], NFD: [0x110D, 0x116D, 0x11AC], NFKC: [0xCB31], NFKD: [0x110D, 0x116D, 0x11AC] }, +{ source: [0xCB32], NFC: [0xCB32], NFD: [0x110D, 0x116D, 0x11AD], NFKC: [0xCB32], NFKD: [0x110D, 0x116D, 0x11AD] }, +{ source: [0xCB33], NFC: [0xCB33], NFD: [0x110D, 0x116D, 0x11AE], NFKC: [0xCB33], NFKD: [0x110D, 0x116D, 0x11AE] }, +{ source: [0xCB34], NFC: [0xCB34], NFD: [0x110D, 0x116D, 0x11AF], NFKC: [0xCB34], NFKD: [0x110D, 0x116D, 0x11AF] }, +{ source: [0xCB35], NFC: [0xCB35], NFD: [0x110D, 0x116D, 0x11B0], NFKC: [0xCB35], NFKD: [0x110D, 0x116D, 0x11B0] }, +{ source: [0xCB36], NFC: [0xCB36], NFD: [0x110D, 0x116D, 0x11B1], NFKC: [0xCB36], NFKD: [0x110D, 0x116D, 0x11B1] }, +{ source: [0xCB37], NFC: [0xCB37], NFD: [0x110D, 0x116D, 0x11B2], NFKC: [0xCB37], NFKD: [0x110D, 0x116D, 0x11B2] }, +{ source: [0xCB38], NFC: [0xCB38], NFD: [0x110D, 0x116D, 0x11B3], NFKC: [0xCB38], NFKD: [0x110D, 0x116D, 0x11B3] }, +{ source: [0xCB39], NFC: [0xCB39], NFD: [0x110D, 0x116D, 0x11B4], NFKC: [0xCB39], NFKD: [0x110D, 0x116D, 0x11B4] }, +{ source: [0xCB3A], NFC: [0xCB3A], NFD: [0x110D, 0x116D, 0x11B5], NFKC: [0xCB3A], NFKD: [0x110D, 0x116D, 0x11B5] }, +{ source: [0xCB3B], NFC: [0xCB3B], NFD: [0x110D, 0x116D, 0x11B6], NFKC: [0xCB3B], NFKD: [0x110D, 0x116D, 0x11B6] }, +{ source: [0xCB3C], NFC: [0xCB3C], NFD: [0x110D, 0x116D, 0x11B7], NFKC: [0xCB3C], NFKD: [0x110D, 0x116D, 0x11B7] }, +{ source: [0xCB3D], NFC: [0xCB3D], NFD: [0x110D, 0x116D, 0x11B8], NFKC: [0xCB3D], NFKD: [0x110D, 0x116D, 0x11B8] }, +{ source: [0xCB3E], NFC: [0xCB3E], NFD: [0x110D, 0x116D, 0x11B9], NFKC: [0xCB3E], NFKD: [0x110D, 0x116D, 0x11B9] }, +{ source: [0xCB3F], NFC: [0xCB3F], NFD: [0x110D, 0x116D, 0x11BA], NFKC: [0xCB3F], NFKD: [0x110D, 0x116D, 0x11BA] }, +{ source: [0xCB40], NFC: [0xCB40], NFD: [0x110D, 0x116D, 0x11BB], NFKC: [0xCB40], NFKD: [0x110D, 0x116D, 0x11BB] }, +{ source: [0xCB41], NFC: [0xCB41], NFD: [0x110D, 0x116D, 0x11BC], NFKC: [0xCB41], NFKD: [0x110D, 0x116D, 0x11BC] }, +{ source: [0xCB42], NFC: [0xCB42], NFD: [0x110D, 0x116D, 0x11BD], NFKC: [0xCB42], NFKD: [0x110D, 0x116D, 0x11BD] }, +{ source: [0xCB43], NFC: [0xCB43], NFD: [0x110D, 0x116D, 0x11BE], NFKC: [0xCB43], NFKD: [0x110D, 0x116D, 0x11BE] }, +{ source: [0xCB44], NFC: [0xCB44], NFD: [0x110D, 0x116D, 0x11BF], NFKC: [0xCB44], NFKD: [0x110D, 0x116D, 0x11BF] }, +{ source: [0xCB45], NFC: [0xCB45], NFD: [0x110D, 0x116D, 0x11C0], NFKC: [0xCB45], NFKD: [0x110D, 0x116D, 0x11C0] }, +{ source: [0xCB46], NFC: [0xCB46], NFD: [0x110D, 0x116D, 0x11C1], NFKC: [0xCB46], NFKD: [0x110D, 0x116D, 0x11C1] }, +{ source: [0xCB47], NFC: [0xCB47], NFD: [0x110D, 0x116D, 0x11C2], NFKC: [0xCB47], NFKD: [0x110D, 0x116D, 0x11C2] }, +{ source: [0xCB48], NFC: [0xCB48], NFD: [0x110D, 0x116E], NFKC: [0xCB48], NFKD: [0x110D, 0x116E] }, +{ source: [0xCB49], NFC: [0xCB49], NFD: [0x110D, 0x116E, 0x11A8], NFKC: [0xCB49], NFKD: [0x110D, 0x116E, 0x11A8] }, +{ source: [0xCB4A], NFC: [0xCB4A], NFD: [0x110D, 0x116E, 0x11A9], NFKC: [0xCB4A], NFKD: [0x110D, 0x116E, 0x11A9] }, +{ source: [0xCB4B], NFC: [0xCB4B], NFD: [0x110D, 0x116E, 0x11AA], NFKC: [0xCB4B], NFKD: [0x110D, 0x116E, 0x11AA] }, +{ source: [0xCB4C], NFC: [0xCB4C], NFD: [0x110D, 0x116E, 0x11AB], NFKC: [0xCB4C], NFKD: [0x110D, 0x116E, 0x11AB] }, +{ source: [0xCB4D], NFC: [0xCB4D], NFD: [0x110D, 0x116E, 0x11AC], NFKC: [0xCB4D], NFKD: [0x110D, 0x116E, 0x11AC] }, +{ source: [0xCB4E], NFC: [0xCB4E], NFD: [0x110D, 0x116E, 0x11AD], NFKC: [0xCB4E], NFKD: [0x110D, 0x116E, 0x11AD] }, +{ source: [0xCB4F], NFC: [0xCB4F], NFD: [0x110D, 0x116E, 0x11AE], NFKC: [0xCB4F], NFKD: [0x110D, 0x116E, 0x11AE] }, +{ source: [0xCB50], NFC: [0xCB50], NFD: [0x110D, 0x116E, 0x11AF], NFKC: [0xCB50], NFKD: [0x110D, 0x116E, 0x11AF] }, +{ source: [0xCB51], NFC: [0xCB51], NFD: [0x110D, 0x116E, 0x11B0], NFKC: [0xCB51], NFKD: [0x110D, 0x116E, 0x11B0] }, +{ source: [0xCB52], NFC: [0xCB52], NFD: [0x110D, 0x116E, 0x11B1], NFKC: [0xCB52], NFKD: [0x110D, 0x116E, 0x11B1] }, +{ source: [0xCB53], NFC: [0xCB53], NFD: [0x110D, 0x116E, 0x11B2], NFKC: [0xCB53], NFKD: [0x110D, 0x116E, 0x11B2] }, +{ source: [0xCB54], NFC: [0xCB54], NFD: [0x110D, 0x116E, 0x11B3], NFKC: [0xCB54], NFKD: [0x110D, 0x116E, 0x11B3] }, +{ source: [0xCB55], NFC: [0xCB55], NFD: [0x110D, 0x116E, 0x11B4], NFKC: [0xCB55], NFKD: [0x110D, 0x116E, 0x11B4] }, +{ source: [0xCB56], NFC: [0xCB56], NFD: [0x110D, 0x116E, 0x11B5], NFKC: [0xCB56], NFKD: [0x110D, 0x116E, 0x11B5] }, +{ source: [0xCB57], NFC: [0xCB57], NFD: [0x110D, 0x116E, 0x11B6], NFKC: [0xCB57], NFKD: [0x110D, 0x116E, 0x11B6] }, +{ source: [0xCB58], NFC: [0xCB58], NFD: [0x110D, 0x116E, 0x11B7], NFKC: [0xCB58], NFKD: [0x110D, 0x116E, 0x11B7] }, +{ source: [0xCB59], NFC: [0xCB59], NFD: [0x110D, 0x116E, 0x11B8], NFKC: [0xCB59], NFKD: [0x110D, 0x116E, 0x11B8] }, +{ source: [0xCB5A], NFC: [0xCB5A], NFD: [0x110D, 0x116E, 0x11B9], NFKC: [0xCB5A], NFKD: [0x110D, 0x116E, 0x11B9] }, +{ source: [0xCB5B], NFC: [0xCB5B], NFD: [0x110D, 0x116E, 0x11BA], NFKC: [0xCB5B], NFKD: [0x110D, 0x116E, 0x11BA] }, +{ source: [0xCB5C], NFC: [0xCB5C], NFD: [0x110D, 0x116E, 0x11BB], NFKC: [0xCB5C], NFKD: [0x110D, 0x116E, 0x11BB] }, +{ source: [0xCB5D], NFC: [0xCB5D], NFD: [0x110D, 0x116E, 0x11BC], NFKC: [0xCB5D], NFKD: [0x110D, 0x116E, 0x11BC] }, +{ source: [0xCB5E], NFC: [0xCB5E], NFD: [0x110D, 0x116E, 0x11BD], NFKC: [0xCB5E], NFKD: [0x110D, 0x116E, 0x11BD] }, +{ source: [0xCB5F], NFC: [0xCB5F], NFD: [0x110D, 0x116E, 0x11BE], NFKC: [0xCB5F], NFKD: [0x110D, 0x116E, 0x11BE] }, +{ source: [0xCB60], NFC: [0xCB60], NFD: [0x110D, 0x116E, 0x11BF], NFKC: [0xCB60], NFKD: [0x110D, 0x116E, 0x11BF] }, +{ source: [0xCB61], NFC: [0xCB61], NFD: [0x110D, 0x116E, 0x11C0], NFKC: [0xCB61], NFKD: [0x110D, 0x116E, 0x11C0] }, +{ source: [0xCB62], NFC: [0xCB62], NFD: [0x110D, 0x116E, 0x11C1], NFKC: [0xCB62], NFKD: [0x110D, 0x116E, 0x11C1] }, +{ source: [0xCB63], NFC: [0xCB63], NFD: [0x110D, 0x116E, 0x11C2], NFKC: [0xCB63], NFKD: [0x110D, 0x116E, 0x11C2] }, +{ source: [0xCB64], NFC: [0xCB64], NFD: [0x110D, 0x116F], NFKC: [0xCB64], NFKD: [0x110D, 0x116F] }, +{ source: [0xCB65], NFC: [0xCB65], NFD: [0x110D, 0x116F, 0x11A8], NFKC: [0xCB65], NFKD: [0x110D, 0x116F, 0x11A8] }, +{ source: [0xCB66], NFC: [0xCB66], NFD: [0x110D, 0x116F, 0x11A9], NFKC: [0xCB66], NFKD: [0x110D, 0x116F, 0x11A9] }, +{ source: [0xCB67], NFC: [0xCB67], NFD: [0x110D, 0x116F, 0x11AA], NFKC: [0xCB67], NFKD: [0x110D, 0x116F, 0x11AA] }, +{ source: [0xCB68], NFC: [0xCB68], NFD: [0x110D, 0x116F, 0x11AB], NFKC: [0xCB68], NFKD: [0x110D, 0x116F, 0x11AB] }, +{ source: [0xCB69], NFC: [0xCB69], NFD: [0x110D, 0x116F, 0x11AC], NFKC: [0xCB69], NFKD: [0x110D, 0x116F, 0x11AC] }, +{ source: [0xCB6A], NFC: [0xCB6A], NFD: [0x110D, 0x116F, 0x11AD], NFKC: [0xCB6A], NFKD: [0x110D, 0x116F, 0x11AD] }, +{ source: [0xCB6B], NFC: [0xCB6B], NFD: [0x110D, 0x116F, 0x11AE], NFKC: [0xCB6B], NFKD: [0x110D, 0x116F, 0x11AE] }, +{ source: [0xCB6C], NFC: [0xCB6C], NFD: [0x110D, 0x116F, 0x11AF], NFKC: [0xCB6C], NFKD: [0x110D, 0x116F, 0x11AF] }, +{ source: [0xCB6D], NFC: [0xCB6D], NFD: [0x110D, 0x116F, 0x11B0], NFKC: [0xCB6D], NFKD: [0x110D, 0x116F, 0x11B0] }, +{ source: [0xCB6E], NFC: [0xCB6E], NFD: [0x110D, 0x116F, 0x11B1], NFKC: [0xCB6E], NFKD: [0x110D, 0x116F, 0x11B1] }, +{ source: [0xCB6F], NFC: [0xCB6F], NFD: [0x110D, 0x116F, 0x11B2], NFKC: [0xCB6F], NFKD: [0x110D, 0x116F, 0x11B2] }, +{ source: [0xCB70], NFC: [0xCB70], NFD: [0x110D, 0x116F, 0x11B3], NFKC: [0xCB70], NFKD: [0x110D, 0x116F, 0x11B3] }, +{ source: [0xCB71], NFC: [0xCB71], NFD: [0x110D, 0x116F, 0x11B4], NFKC: [0xCB71], NFKD: [0x110D, 0x116F, 0x11B4] }, +{ source: [0xCB72], NFC: [0xCB72], NFD: [0x110D, 0x116F, 0x11B5], NFKC: [0xCB72], NFKD: [0x110D, 0x116F, 0x11B5] }, +{ source: [0xCB73], NFC: [0xCB73], NFD: [0x110D, 0x116F, 0x11B6], NFKC: [0xCB73], NFKD: [0x110D, 0x116F, 0x11B6] }, +{ source: [0xCB74], NFC: [0xCB74], NFD: [0x110D, 0x116F, 0x11B7], NFKC: [0xCB74], NFKD: [0x110D, 0x116F, 0x11B7] }, +{ source: [0xCB75], NFC: [0xCB75], NFD: [0x110D, 0x116F, 0x11B8], NFKC: [0xCB75], NFKD: [0x110D, 0x116F, 0x11B8] }, +{ source: [0xCB76], NFC: [0xCB76], NFD: [0x110D, 0x116F, 0x11B9], NFKC: [0xCB76], NFKD: [0x110D, 0x116F, 0x11B9] }, +{ source: [0xCB77], NFC: [0xCB77], NFD: [0x110D, 0x116F, 0x11BA], NFKC: [0xCB77], NFKD: [0x110D, 0x116F, 0x11BA] }, +{ source: [0xCB78], NFC: [0xCB78], NFD: [0x110D, 0x116F, 0x11BB], NFKC: [0xCB78], NFKD: [0x110D, 0x116F, 0x11BB] }, +{ source: [0xCB79], NFC: [0xCB79], NFD: [0x110D, 0x116F, 0x11BC], NFKC: [0xCB79], NFKD: [0x110D, 0x116F, 0x11BC] }, +{ source: [0xCB7A], NFC: [0xCB7A], NFD: [0x110D, 0x116F, 0x11BD], NFKC: [0xCB7A], NFKD: [0x110D, 0x116F, 0x11BD] }, +{ source: [0xCB7B], NFC: [0xCB7B], NFD: [0x110D, 0x116F, 0x11BE], NFKC: [0xCB7B], NFKD: [0x110D, 0x116F, 0x11BE] }, +{ source: [0xCB7C], NFC: [0xCB7C], NFD: [0x110D, 0x116F, 0x11BF], NFKC: [0xCB7C], NFKD: [0x110D, 0x116F, 0x11BF] }, +{ source: [0xCB7D], NFC: [0xCB7D], NFD: [0x110D, 0x116F, 0x11C0], NFKC: [0xCB7D], NFKD: [0x110D, 0x116F, 0x11C0] }, +{ source: [0xCB7E], NFC: [0xCB7E], NFD: [0x110D, 0x116F, 0x11C1], NFKC: [0xCB7E], NFKD: [0x110D, 0x116F, 0x11C1] }, +{ source: [0xCB7F], NFC: [0xCB7F], NFD: [0x110D, 0x116F, 0x11C2], NFKC: [0xCB7F], NFKD: [0x110D, 0x116F, 0x11C2] }, +{ source: [0xCB80], NFC: [0xCB80], NFD: [0x110D, 0x1170], NFKC: [0xCB80], NFKD: [0x110D, 0x1170] }, +{ source: [0xCB81], NFC: [0xCB81], NFD: [0x110D, 0x1170, 0x11A8], NFKC: [0xCB81], NFKD: [0x110D, 0x1170, 0x11A8] }, +{ source: [0xCB82], NFC: [0xCB82], NFD: [0x110D, 0x1170, 0x11A9], NFKC: [0xCB82], NFKD: [0x110D, 0x1170, 0x11A9] }, +{ source: [0xCB83], NFC: [0xCB83], NFD: [0x110D, 0x1170, 0x11AA], NFKC: [0xCB83], NFKD: [0x110D, 0x1170, 0x11AA] }, +{ source: [0xCB84], NFC: [0xCB84], NFD: [0x110D, 0x1170, 0x11AB], NFKC: [0xCB84], NFKD: [0x110D, 0x1170, 0x11AB] }, +{ source: [0xCB85], NFC: [0xCB85], NFD: [0x110D, 0x1170, 0x11AC], NFKC: [0xCB85], NFKD: [0x110D, 0x1170, 0x11AC] }, +{ source: [0xCB86], NFC: [0xCB86], NFD: [0x110D, 0x1170, 0x11AD], NFKC: [0xCB86], NFKD: [0x110D, 0x1170, 0x11AD] }, +{ source: [0xCB87], NFC: [0xCB87], NFD: [0x110D, 0x1170, 0x11AE], NFKC: [0xCB87], NFKD: [0x110D, 0x1170, 0x11AE] }, +{ source: [0xCB88], NFC: [0xCB88], NFD: [0x110D, 0x1170, 0x11AF], NFKC: [0xCB88], NFKD: [0x110D, 0x1170, 0x11AF] }, +{ source: [0xCB89], NFC: [0xCB89], NFD: [0x110D, 0x1170, 0x11B0], NFKC: [0xCB89], NFKD: [0x110D, 0x1170, 0x11B0] }, +{ source: [0xCB8A], NFC: [0xCB8A], NFD: [0x110D, 0x1170, 0x11B1], NFKC: [0xCB8A], NFKD: [0x110D, 0x1170, 0x11B1] }, +{ source: [0xCB8B], NFC: [0xCB8B], NFD: [0x110D, 0x1170, 0x11B2], NFKC: [0xCB8B], NFKD: [0x110D, 0x1170, 0x11B2] }, +{ source: [0xCB8C], NFC: [0xCB8C], NFD: [0x110D, 0x1170, 0x11B3], NFKC: [0xCB8C], NFKD: [0x110D, 0x1170, 0x11B3] }, +{ source: [0xCB8D], NFC: [0xCB8D], NFD: [0x110D, 0x1170, 0x11B4], NFKC: [0xCB8D], NFKD: [0x110D, 0x1170, 0x11B4] }, +{ source: [0xCB8E], NFC: [0xCB8E], NFD: [0x110D, 0x1170, 0x11B5], NFKC: [0xCB8E], NFKD: [0x110D, 0x1170, 0x11B5] }, +{ source: [0xCB8F], NFC: [0xCB8F], NFD: [0x110D, 0x1170, 0x11B6], NFKC: [0xCB8F], NFKD: [0x110D, 0x1170, 0x11B6] }, +{ source: [0xCB90], NFC: [0xCB90], NFD: [0x110D, 0x1170, 0x11B7], NFKC: [0xCB90], NFKD: [0x110D, 0x1170, 0x11B7] }, +{ source: [0xCB91], NFC: [0xCB91], NFD: [0x110D, 0x1170, 0x11B8], NFKC: [0xCB91], NFKD: [0x110D, 0x1170, 0x11B8] }, +{ source: [0xCB92], NFC: [0xCB92], NFD: [0x110D, 0x1170, 0x11B9], NFKC: [0xCB92], NFKD: [0x110D, 0x1170, 0x11B9] }, +{ source: [0xCB93], NFC: [0xCB93], NFD: [0x110D, 0x1170, 0x11BA], NFKC: [0xCB93], NFKD: [0x110D, 0x1170, 0x11BA] }, +{ source: [0xCB94], NFC: [0xCB94], NFD: [0x110D, 0x1170, 0x11BB], NFKC: [0xCB94], NFKD: [0x110D, 0x1170, 0x11BB] }, +{ source: [0xCB95], NFC: [0xCB95], NFD: [0x110D, 0x1170, 0x11BC], NFKC: [0xCB95], NFKD: [0x110D, 0x1170, 0x11BC] }, +{ source: [0xCB96], NFC: [0xCB96], NFD: [0x110D, 0x1170, 0x11BD], NFKC: [0xCB96], NFKD: [0x110D, 0x1170, 0x11BD] }, +{ source: [0xCB97], NFC: [0xCB97], NFD: [0x110D, 0x1170, 0x11BE], NFKC: [0xCB97], NFKD: [0x110D, 0x1170, 0x11BE] }, +{ source: [0xCB98], NFC: [0xCB98], NFD: [0x110D, 0x1170, 0x11BF], NFKC: [0xCB98], NFKD: [0x110D, 0x1170, 0x11BF] }, +{ source: [0xCB99], NFC: [0xCB99], NFD: [0x110D, 0x1170, 0x11C0], NFKC: [0xCB99], NFKD: [0x110D, 0x1170, 0x11C0] }, +{ source: [0xCB9A], NFC: [0xCB9A], NFD: [0x110D, 0x1170, 0x11C1], NFKC: [0xCB9A], NFKD: [0x110D, 0x1170, 0x11C1] }, +{ source: [0xCB9B], NFC: [0xCB9B], NFD: [0x110D, 0x1170, 0x11C2], NFKC: [0xCB9B], NFKD: [0x110D, 0x1170, 0x11C2] }, +{ source: [0xCB9C], NFC: [0xCB9C], NFD: [0x110D, 0x1171], NFKC: [0xCB9C], NFKD: [0x110D, 0x1171] }, +{ source: [0xCB9D], NFC: [0xCB9D], NFD: [0x110D, 0x1171, 0x11A8], NFKC: [0xCB9D], NFKD: [0x110D, 0x1171, 0x11A8] }, +{ source: [0xCB9E], NFC: [0xCB9E], NFD: [0x110D, 0x1171, 0x11A9], NFKC: [0xCB9E], NFKD: [0x110D, 0x1171, 0x11A9] }, +{ source: [0xCB9F], NFC: [0xCB9F], NFD: [0x110D, 0x1171, 0x11AA], NFKC: [0xCB9F], NFKD: [0x110D, 0x1171, 0x11AA] }, +{ source: [0xCBA0], NFC: [0xCBA0], NFD: [0x110D, 0x1171, 0x11AB], NFKC: [0xCBA0], NFKD: [0x110D, 0x1171, 0x11AB] }, +{ source: [0xCBA1], NFC: [0xCBA1], NFD: [0x110D, 0x1171, 0x11AC], NFKC: [0xCBA1], NFKD: [0x110D, 0x1171, 0x11AC] }, +{ source: [0xCBA2], NFC: [0xCBA2], NFD: [0x110D, 0x1171, 0x11AD], NFKC: [0xCBA2], NFKD: [0x110D, 0x1171, 0x11AD] }, +{ source: [0xCBA3], NFC: [0xCBA3], NFD: [0x110D, 0x1171, 0x11AE], NFKC: [0xCBA3], NFKD: [0x110D, 0x1171, 0x11AE] }, +{ source: [0xCBA4], NFC: [0xCBA4], NFD: [0x110D, 0x1171, 0x11AF], NFKC: [0xCBA4], NFKD: [0x110D, 0x1171, 0x11AF] }, +{ source: [0xCBA5], NFC: [0xCBA5], NFD: [0x110D, 0x1171, 0x11B0], NFKC: [0xCBA5], NFKD: [0x110D, 0x1171, 0x11B0] }, +{ source: [0xCBA6], NFC: [0xCBA6], NFD: [0x110D, 0x1171, 0x11B1], NFKC: [0xCBA6], NFKD: [0x110D, 0x1171, 0x11B1] }, +{ source: [0xCBA7], NFC: [0xCBA7], NFD: [0x110D, 0x1171, 0x11B2], NFKC: [0xCBA7], NFKD: [0x110D, 0x1171, 0x11B2] }, +{ source: [0xCBA8], NFC: [0xCBA8], NFD: [0x110D, 0x1171, 0x11B3], NFKC: [0xCBA8], NFKD: [0x110D, 0x1171, 0x11B3] }, +{ source: [0xCBA9], NFC: [0xCBA9], NFD: [0x110D, 0x1171, 0x11B4], NFKC: [0xCBA9], NFKD: [0x110D, 0x1171, 0x11B4] }, +{ source: [0xCBAA], NFC: [0xCBAA], NFD: [0x110D, 0x1171, 0x11B5], NFKC: [0xCBAA], NFKD: [0x110D, 0x1171, 0x11B5] }, +{ source: [0xCBAB], NFC: [0xCBAB], NFD: [0x110D, 0x1171, 0x11B6], NFKC: [0xCBAB], NFKD: [0x110D, 0x1171, 0x11B6] }, +{ source: [0xCBAC], NFC: [0xCBAC], NFD: [0x110D, 0x1171, 0x11B7], NFKC: [0xCBAC], NFKD: [0x110D, 0x1171, 0x11B7] }, +{ source: [0xCBAD], NFC: [0xCBAD], NFD: [0x110D, 0x1171, 0x11B8], NFKC: [0xCBAD], NFKD: [0x110D, 0x1171, 0x11B8] }, +{ source: [0xCBAE], NFC: [0xCBAE], NFD: [0x110D, 0x1171, 0x11B9], NFKC: [0xCBAE], NFKD: [0x110D, 0x1171, 0x11B9] }, +{ source: [0xCBAF], NFC: [0xCBAF], NFD: [0x110D, 0x1171, 0x11BA], NFKC: [0xCBAF], NFKD: [0x110D, 0x1171, 0x11BA] }, +{ source: [0xCBB0], NFC: [0xCBB0], NFD: [0x110D, 0x1171, 0x11BB], NFKC: [0xCBB0], NFKD: [0x110D, 0x1171, 0x11BB] }, +{ source: [0xCBB1], NFC: [0xCBB1], NFD: [0x110D, 0x1171, 0x11BC], NFKC: [0xCBB1], NFKD: [0x110D, 0x1171, 0x11BC] }, +{ source: [0xCBB2], NFC: [0xCBB2], NFD: [0x110D, 0x1171, 0x11BD], NFKC: [0xCBB2], NFKD: [0x110D, 0x1171, 0x11BD] }, +{ source: [0xCBB3], NFC: [0xCBB3], NFD: [0x110D, 0x1171, 0x11BE], NFKC: [0xCBB3], NFKD: [0x110D, 0x1171, 0x11BE] }, +{ source: [0xCBB4], NFC: [0xCBB4], NFD: [0x110D, 0x1171, 0x11BF], NFKC: [0xCBB4], NFKD: [0x110D, 0x1171, 0x11BF] }, +{ source: [0xCBB5], NFC: [0xCBB5], NFD: [0x110D, 0x1171, 0x11C0], NFKC: [0xCBB5], NFKD: [0x110D, 0x1171, 0x11C0] }, +{ source: [0xCBB6], NFC: [0xCBB6], NFD: [0x110D, 0x1171, 0x11C1], NFKC: [0xCBB6], NFKD: [0x110D, 0x1171, 0x11C1] }, +{ source: [0xCBB7], NFC: [0xCBB7], NFD: [0x110D, 0x1171, 0x11C2], NFKC: [0xCBB7], NFKD: [0x110D, 0x1171, 0x11C2] }, +{ source: [0xCBB8], NFC: [0xCBB8], NFD: [0x110D, 0x1172], NFKC: [0xCBB8], NFKD: [0x110D, 0x1172] }, +{ source: [0xCBB9], NFC: [0xCBB9], NFD: [0x110D, 0x1172, 0x11A8], NFKC: [0xCBB9], NFKD: [0x110D, 0x1172, 0x11A8] }, +{ source: [0xCBBA], NFC: [0xCBBA], NFD: [0x110D, 0x1172, 0x11A9], NFKC: [0xCBBA], NFKD: [0x110D, 0x1172, 0x11A9] }, +{ source: [0xCBBB], NFC: [0xCBBB], NFD: [0x110D, 0x1172, 0x11AA], NFKC: [0xCBBB], NFKD: [0x110D, 0x1172, 0x11AA] }, +{ source: [0xCBBC], NFC: [0xCBBC], NFD: [0x110D, 0x1172, 0x11AB], NFKC: [0xCBBC], NFKD: [0x110D, 0x1172, 0x11AB] }, +{ source: [0xCBBD], NFC: [0xCBBD], NFD: [0x110D, 0x1172, 0x11AC], NFKC: [0xCBBD], NFKD: [0x110D, 0x1172, 0x11AC] }, +{ source: [0xCBBE], NFC: [0xCBBE], NFD: [0x110D, 0x1172, 0x11AD], NFKC: [0xCBBE], NFKD: [0x110D, 0x1172, 0x11AD] }, +{ source: [0xCBBF], NFC: [0xCBBF], NFD: [0x110D, 0x1172, 0x11AE], NFKC: [0xCBBF], NFKD: [0x110D, 0x1172, 0x11AE] }, +{ source: [0xCBC0], NFC: [0xCBC0], NFD: [0x110D, 0x1172, 0x11AF], NFKC: [0xCBC0], NFKD: [0x110D, 0x1172, 0x11AF] }, +{ source: [0xCBC1], NFC: [0xCBC1], NFD: [0x110D, 0x1172, 0x11B0], NFKC: [0xCBC1], NFKD: [0x110D, 0x1172, 0x11B0] }, +{ source: [0xCBC2], NFC: [0xCBC2], NFD: [0x110D, 0x1172, 0x11B1], NFKC: [0xCBC2], NFKD: [0x110D, 0x1172, 0x11B1] }, +{ source: [0xCBC3], NFC: [0xCBC3], NFD: [0x110D, 0x1172, 0x11B2], NFKC: [0xCBC3], NFKD: [0x110D, 0x1172, 0x11B2] }, +{ source: [0xCBC4], NFC: [0xCBC4], NFD: [0x110D, 0x1172, 0x11B3], NFKC: [0xCBC4], NFKD: [0x110D, 0x1172, 0x11B3] }, +{ source: [0xCBC5], NFC: [0xCBC5], NFD: [0x110D, 0x1172, 0x11B4], NFKC: [0xCBC5], NFKD: [0x110D, 0x1172, 0x11B4] }, +{ source: [0xCBC6], NFC: [0xCBC6], NFD: [0x110D, 0x1172, 0x11B5], NFKC: [0xCBC6], NFKD: [0x110D, 0x1172, 0x11B5] }, +{ source: [0xCBC7], NFC: [0xCBC7], NFD: [0x110D, 0x1172, 0x11B6], NFKC: [0xCBC7], NFKD: [0x110D, 0x1172, 0x11B6] }, +{ source: [0xCBC8], NFC: [0xCBC8], NFD: [0x110D, 0x1172, 0x11B7], NFKC: [0xCBC8], NFKD: [0x110D, 0x1172, 0x11B7] }, +{ source: [0xCBC9], NFC: [0xCBC9], NFD: [0x110D, 0x1172, 0x11B8], NFKC: [0xCBC9], NFKD: [0x110D, 0x1172, 0x11B8] }, +{ source: [0xCBCA], NFC: [0xCBCA], NFD: [0x110D, 0x1172, 0x11B9], NFKC: [0xCBCA], NFKD: [0x110D, 0x1172, 0x11B9] }, +{ source: [0xCBCB], NFC: [0xCBCB], NFD: [0x110D, 0x1172, 0x11BA], NFKC: [0xCBCB], NFKD: [0x110D, 0x1172, 0x11BA] }, +{ source: [0xCBCC], NFC: [0xCBCC], NFD: [0x110D, 0x1172, 0x11BB], NFKC: [0xCBCC], NFKD: [0x110D, 0x1172, 0x11BB] }, +{ source: [0xCBCD], NFC: [0xCBCD], NFD: [0x110D, 0x1172, 0x11BC], NFKC: [0xCBCD], NFKD: [0x110D, 0x1172, 0x11BC] }, +{ source: [0xCBCE], NFC: [0xCBCE], NFD: [0x110D, 0x1172, 0x11BD], NFKC: [0xCBCE], NFKD: [0x110D, 0x1172, 0x11BD] }, +{ source: [0xCBCF], NFC: [0xCBCF], NFD: [0x110D, 0x1172, 0x11BE], NFKC: [0xCBCF], NFKD: [0x110D, 0x1172, 0x11BE] }, +{ source: [0xCBD0], NFC: [0xCBD0], NFD: [0x110D, 0x1172, 0x11BF], NFKC: [0xCBD0], NFKD: [0x110D, 0x1172, 0x11BF] }, +{ source: [0xCBD1], NFC: [0xCBD1], NFD: [0x110D, 0x1172, 0x11C0], NFKC: [0xCBD1], NFKD: [0x110D, 0x1172, 0x11C0] }, +{ source: [0xCBD2], NFC: [0xCBD2], NFD: [0x110D, 0x1172, 0x11C1], NFKC: [0xCBD2], NFKD: [0x110D, 0x1172, 0x11C1] }, +{ source: [0xCBD3], NFC: [0xCBD3], NFD: [0x110D, 0x1172, 0x11C2], NFKC: [0xCBD3], NFKD: [0x110D, 0x1172, 0x11C2] }, +{ source: [0xCBD4], NFC: [0xCBD4], NFD: [0x110D, 0x1173], NFKC: [0xCBD4], NFKD: [0x110D, 0x1173] }, +{ source: [0xCBD5], NFC: [0xCBD5], NFD: [0x110D, 0x1173, 0x11A8], NFKC: [0xCBD5], NFKD: [0x110D, 0x1173, 0x11A8] }, +{ source: [0xCBD6], NFC: [0xCBD6], NFD: [0x110D, 0x1173, 0x11A9], NFKC: [0xCBD6], NFKD: [0x110D, 0x1173, 0x11A9] }, +{ source: [0xCBD7], NFC: [0xCBD7], NFD: [0x110D, 0x1173, 0x11AA], NFKC: [0xCBD7], NFKD: [0x110D, 0x1173, 0x11AA] }, +{ source: [0xCBD8], NFC: [0xCBD8], NFD: [0x110D, 0x1173, 0x11AB], NFKC: [0xCBD8], NFKD: [0x110D, 0x1173, 0x11AB] }, +{ source: [0xCBD9], NFC: [0xCBD9], NFD: [0x110D, 0x1173, 0x11AC], NFKC: [0xCBD9], NFKD: [0x110D, 0x1173, 0x11AC] }, +{ source: [0xCBDA], NFC: [0xCBDA], NFD: [0x110D, 0x1173, 0x11AD], NFKC: [0xCBDA], NFKD: [0x110D, 0x1173, 0x11AD] }, +{ source: [0xCBDB], NFC: [0xCBDB], NFD: [0x110D, 0x1173, 0x11AE], NFKC: [0xCBDB], NFKD: [0x110D, 0x1173, 0x11AE] }, +{ source: [0xCBDC], NFC: [0xCBDC], NFD: [0x110D, 0x1173, 0x11AF], NFKC: [0xCBDC], NFKD: [0x110D, 0x1173, 0x11AF] }, +{ source: [0xCBDD], NFC: [0xCBDD], NFD: [0x110D, 0x1173, 0x11B0], NFKC: [0xCBDD], NFKD: [0x110D, 0x1173, 0x11B0] }, +{ source: [0xCBDE], NFC: [0xCBDE], NFD: [0x110D, 0x1173, 0x11B1], NFKC: [0xCBDE], NFKD: [0x110D, 0x1173, 0x11B1] }, +{ source: [0xCBDF], NFC: [0xCBDF], NFD: [0x110D, 0x1173, 0x11B2], NFKC: [0xCBDF], NFKD: [0x110D, 0x1173, 0x11B2] }, +{ source: [0xCBE0], NFC: [0xCBE0], NFD: [0x110D, 0x1173, 0x11B3], NFKC: [0xCBE0], NFKD: [0x110D, 0x1173, 0x11B3] }, +{ source: [0xCBE1], NFC: [0xCBE1], NFD: [0x110D, 0x1173, 0x11B4], NFKC: [0xCBE1], NFKD: [0x110D, 0x1173, 0x11B4] }, +{ source: [0xCBE2], NFC: [0xCBE2], NFD: [0x110D, 0x1173, 0x11B5], NFKC: [0xCBE2], NFKD: [0x110D, 0x1173, 0x11B5] }, +{ source: [0xCBE3], NFC: [0xCBE3], NFD: [0x110D, 0x1173, 0x11B6], NFKC: [0xCBE3], NFKD: [0x110D, 0x1173, 0x11B6] }, +{ source: [0xCBE4], NFC: [0xCBE4], NFD: [0x110D, 0x1173, 0x11B7], NFKC: [0xCBE4], NFKD: [0x110D, 0x1173, 0x11B7] }, +{ source: [0xCBE5], NFC: [0xCBE5], NFD: [0x110D, 0x1173, 0x11B8], NFKC: [0xCBE5], NFKD: [0x110D, 0x1173, 0x11B8] }, +{ source: [0xCBE6], NFC: [0xCBE6], NFD: [0x110D, 0x1173, 0x11B9], NFKC: [0xCBE6], NFKD: [0x110D, 0x1173, 0x11B9] }, +{ source: [0xCBE7], NFC: [0xCBE7], NFD: [0x110D, 0x1173, 0x11BA], NFKC: [0xCBE7], NFKD: [0x110D, 0x1173, 0x11BA] }, +{ source: [0xCBE8], NFC: [0xCBE8], NFD: [0x110D, 0x1173, 0x11BB], NFKC: [0xCBE8], NFKD: [0x110D, 0x1173, 0x11BB] }, +{ source: [0xCBE9], NFC: [0xCBE9], NFD: [0x110D, 0x1173, 0x11BC], NFKC: [0xCBE9], NFKD: [0x110D, 0x1173, 0x11BC] }, +{ source: [0xCBEA], NFC: [0xCBEA], NFD: [0x110D, 0x1173, 0x11BD], NFKC: [0xCBEA], NFKD: [0x110D, 0x1173, 0x11BD] }, +{ source: [0xCBEB], NFC: [0xCBEB], NFD: [0x110D, 0x1173, 0x11BE], NFKC: [0xCBEB], NFKD: [0x110D, 0x1173, 0x11BE] }, +{ source: [0xCBEC], NFC: [0xCBEC], NFD: [0x110D, 0x1173, 0x11BF], NFKC: [0xCBEC], NFKD: [0x110D, 0x1173, 0x11BF] }, +{ source: [0xCBED], NFC: [0xCBED], NFD: [0x110D, 0x1173, 0x11C0], NFKC: [0xCBED], NFKD: [0x110D, 0x1173, 0x11C0] }, +{ source: [0xCBEE], NFC: [0xCBEE], NFD: [0x110D, 0x1173, 0x11C1], NFKC: [0xCBEE], NFKD: [0x110D, 0x1173, 0x11C1] }, +{ source: [0xCBEF], NFC: [0xCBEF], NFD: [0x110D, 0x1173, 0x11C2], NFKC: [0xCBEF], NFKD: [0x110D, 0x1173, 0x11C2] }, +{ source: [0xCBF0], NFC: [0xCBF0], NFD: [0x110D, 0x1174], NFKC: [0xCBF0], NFKD: [0x110D, 0x1174] }, +{ source: [0xCBF1], NFC: [0xCBF1], NFD: [0x110D, 0x1174, 0x11A8], NFKC: [0xCBF1], NFKD: [0x110D, 0x1174, 0x11A8] }, +{ source: [0xCBF2], NFC: [0xCBF2], NFD: [0x110D, 0x1174, 0x11A9], NFKC: [0xCBF2], NFKD: [0x110D, 0x1174, 0x11A9] }, +{ source: [0xCBF3], NFC: [0xCBF3], NFD: [0x110D, 0x1174, 0x11AA], NFKC: [0xCBF3], NFKD: [0x110D, 0x1174, 0x11AA] }, +{ source: [0xCBF4], NFC: [0xCBF4], NFD: [0x110D, 0x1174, 0x11AB], NFKC: [0xCBF4], NFKD: [0x110D, 0x1174, 0x11AB] }, +{ source: [0xCBF5], NFC: [0xCBF5], NFD: [0x110D, 0x1174, 0x11AC], NFKC: [0xCBF5], NFKD: [0x110D, 0x1174, 0x11AC] }, +{ source: [0xCBF6], NFC: [0xCBF6], NFD: [0x110D, 0x1174, 0x11AD], NFKC: [0xCBF6], NFKD: [0x110D, 0x1174, 0x11AD] }, +{ source: [0xCBF7], NFC: [0xCBF7], NFD: [0x110D, 0x1174, 0x11AE], NFKC: [0xCBF7], NFKD: [0x110D, 0x1174, 0x11AE] }, +{ source: [0xCBF8], NFC: [0xCBF8], NFD: [0x110D, 0x1174, 0x11AF], NFKC: [0xCBF8], NFKD: [0x110D, 0x1174, 0x11AF] }, +{ source: [0xCBF9], NFC: [0xCBF9], NFD: [0x110D, 0x1174, 0x11B0], NFKC: [0xCBF9], NFKD: [0x110D, 0x1174, 0x11B0] }, +{ source: [0xCBFA], NFC: [0xCBFA], NFD: [0x110D, 0x1174, 0x11B1], NFKC: [0xCBFA], NFKD: [0x110D, 0x1174, 0x11B1] }, +{ source: [0xCBFB], NFC: [0xCBFB], NFD: [0x110D, 0x1174, 0x11B2], NFKC: [0xCBFB], NFKD: [0x110D, 0x1174, 0x11B2] }, +{ source: [0xCBFC], NFC: [0xCBFC], NFD: [0x110D, 0x1174, 0x11B3], NFKC: [0xCBFC], NFKD: [0x110D, 0x1174, 0x11B3] }, +{ source: [0xCBFD], NFC: [0xCBFD], NFD: [0x110D, 0x1174, 0x11B4], NFKC: [0xCBFD], NFKD: [0x110D, 0x1174, 0x11B4] }, +{ source: [0xCBFE], NFC: [0xCBFE], NFD: [0x110D, 0x1174, 0x11B5], NFKC: [0xCBFE], NFKD: [0x110D, 0x1174, 0x11B5] }, +{ source: [0xCBFF], NFC: [0xCBFF], NFD: [0x110D, 0x1174, 0x11B6], NFKC: [0xCBFF], NFKD: [0x110D, 0x1174, 0x11B6] }, +{ source: [0xCC00], NFC: [0xCC00], NFD: [0x110D, 0x1174, 0x11B7], NFKC: [0xCC00], NFKD: [0x110D, 0x1174, 0x11B7] }, +{ source: [0xCC01], NFC: [0xCC01], NFD: [0x110D, 0x1174, 0x11B8], NFKC: [0xCC01], NFKD: [0x110D, 0x1174, 0x11B8] }, +{ source: [0xCC02], NFC: [0xCC02], NFD: [0x110D, 0x1174, 0x11B9], NFKC: [0xCC02], NFKD: [0x110D, 0x1174, 0x11B9] }, +{ source: [0xCC03], NFC: [0xCC03], NFD: [0x110D, 0x1174, 0x11BA], NFKC: [0xCC03], NFKD: [0x110D, 0x1174, 0x11BA] }, +{ source: [0xCC04], NFC: [0xCC04], NFD: [0x110D, 0x1174, 0x11BB], NFKC: [0xCC04], NFKD: [0x110D, 0x1174, 0x11BB] }, +{ source: [0xCC05], NFC: [0xCC05], NFD: [0x110D, 0x1174, 0x11BC], NFKC: [0xCC05], NFKD: [0x110D, 0x1174, 0x11BC] }, +{ source: [0xCC06], NFC: [0xCC06], NFD: [0x110D, 0x1174, 0x11BD], NFKC: [0xCC06], NFKD: [0x110D, 0x1174, 0x11BD] }, +{ source: [0xCC07], NFC: [0xCC07], NFD: [0x110D, 0x1174, 0x11BE], NFKC: [0xCC07], NFKD: [0x110D, 0x1174, 0x11BE] }, +{ source: [0xCC08], NFC: [0xCC08], NFD: [0x110D, 0x1174, 0x11BF], NFKC: [0xCC08], NFKD: [0x110D, 0x1174, 0x11BF] }, +{ source: [0xCC09], NFC: [0xCC09], NFD: [0x110D, 0x1174, 0x11C0], NFKC: [0xCC09], NFKD: [0x110D, 0x1174, 0x11C0] }, +{ source: [0xCC0A], NFC: [0xCC0A], NFD: [0x110D, 0x1174, 0x11C1], NFKC: [0xCC0A], NFKD: [0x110D, 0x1174, 0x11C1] }, +{ source: [0xCC0B], NFC: [0xCC0B], NFD: [0x110D, 0x1174, 0x11C2], NFKC: [0xCC0B], NFKD: [0x110D, 0x1174, 0x11C2] }, +{ source: [0xCC0C], NFC: [0xCC0C], NFD: [0x110D, 0x1175], NFKC: [0xCC0C], NFKD: [0x110D, 0x1175] }, +{ source: [0xCC0D], NFC: [0xCC0D], NFD: [0x110D, 0x1175, 0x11A8], NFKC: [0xCC0D], NFKD: [0x110D, 0x1175, 0x11A8] }, +{ source: [0xCC0E], NFC: [0xCC0E], NFD: [0x110D, 0x1175, 0x11A9], NFKC: [0xCC0E], NFKD: [0x110D, 0x1175, 0x11A9] }, +{ source: [0xCC0F], NFC: [0xCC0F], NFD: [0x110D, 0x1175, 0x11AA], NFKC: [0xCC0F], NFKD: [0x110D, 0x1175, 0x11AA] }, +{ source: [0xCC10], NFC: [0xCC10], NFD: [0x110D, 0x1175, 0x11AB], NFKC: [0xCC10], NFKD: [0x110D, 0x1175, 0x11AB] }, +{ source: [0xCC11], NFC: [0xCC11], NFD: [0x110D, 0x1175, 0x11AC], NFKC: [0xCC11], NFKD: [0x110D, 0x1175, 0x11AC] }, +{ source: [0xCC12], NFC: [0xCC12], NFD: [0x110D, 0x1175, 0x11AD], NFKC: [0xCC12], NFKD: [0x110D, 0x1175, 0x11AD] }, +{ source: [0xCC13], NFC: [0xCC13], NFD: [0x110D, 0x1175, 0x11AE], NFKC: [0xCC13], NFKD: [0x110D, 0x1175, 0x11AE] }, +{ source: [0xCC14], NFC: [0xCC14], NFD: [0x110D, 0x1175, 0x11AF], NFKC: [0xCC14], NFKD: [0x110D, 0x1175, 0x11AF] }, +{ source: [0xCC15], NFC: [0xCC15], NFD: [0x110D, 0x1175, 0x11B0], NFKC: [0xCC15], NFKD: [0x110D, 0x1175, 0x11B0] }, +{ source: [0xCC16], NFC: [0xCC16], NFD: [0x110D, 0x1175, 0x11B1], NFKC: [0xCC16], NFKD: [0x110D, 0x1175, 0x11B1] }, +{ source: [0xCC17], NFC: [0xCC17], NFD: [0x110D, 0x1175, 0x11B2], NFKC: [0xCC17], NFKD: [0x110D, 0x1175, 0x11B2] }, +{ source: [0xCC18], NFC: [0xCC18], NFD: [0x110D, 0x1175, 0x11B3], NFKC: [0xCC18], NFKD: [0x110D, 0x1175, 0x11B3] }, +{ source: [0xCC19], NFC: [0xCC19], NFD: [0x110D, 0x1175, 0x11B4], NFKC: [0xCC19], NFKD: [0x110D, 0x1175, 0x11B4] }, +{ source: [0xCC1A], NFC: [0xCC1A], NFD: [0x110D, 0x1175, 0x11B5], NFKC: [0xCC1A], NFKD: [0x110D, 0x1175, 0x11B5] }, +{ source: [0xCC1B], NFC: [0xCC1B], NFD: [0x110D, 0x1175, 0x11B6], NFKC: [0xCC1B], NFKD: [0x110D, 0x1175, 0x11B6] }, +{ source: [0xCC1C], NFC: [0xCC1C], NFD: [0x110D, 0x1175, 0x11B7], NFKC: [0xCC1C], NFKD: [0x110D, 0x1175, 0x11B7] }, +{ source: [0xCC1D], NFC: [0xCC1D], NFD: [0x110D, 0x1175, 0x11B8], NFKC: [0xCC1D], NFKD: [0x110D, 0x1175, 0x11B8] }, +{ source: [0xCC1E], NFC: [0xCC1E], NFD: [0x110D, 0x1175, 0x11B9], NFKC: [0xCC1E], NFKD: [0x110D, 0x1175, 0x11B9] }, +{ source: [0xCC1F], NFC: [0xCC1F], NFD: [0x110D, 0x1175, 0x11BA], NFKC: [0xCC1F], NFKD: [0x110D, 0x1175, 0x11BA] }, +{ source: [0xCC20], NFC: [0xCC20], NFD: [0x110D, 0x1175, 0x11BB], NFKC: [0xCC20], NFKD: [0x110D, 0x1175, 0x11BB] }, +{ source: [0xCC21], NFC: [0xCC21], NFD: [0x110D, 0x1175, 0x11BC], NFKC: [0xCC21], NFKD: [0x110D, 0x1175, 0x11BC] }, +{ source: [0xCC22], NFC: [0xCC22], NFD: [0x110D, 0x1175, 0x11BD], NFKC: [0xCC22], NFKD: [0x110D, 0x1175, 0x11BD] }, +{ source: [0xCC23], NFC: [0xCC23], NFD: [0x110D, 0x1175, 0x11BE], NFKC: [0xCC23], NFKD: [0x110D, 0x1175, 0x11BE] }, +{ source: [0xCC24], NFC: [0xCC24], NFD: [0x110D, 0x1175, 0x11BF], NFKC: [0xCC24], NFKD: [0x110D, 0x1175, 0x11BF] }, +{ source: [0xCC25], NFC: [0xCC25], NFD: [0x110D, 0x1175, 0x11C0], NFKC: [0xCC25], NFKD: [0x110D, 0x1175, 0x11C0] }, +{ source: [0xCC26], NFC: [0xCC26], NFD: [0x110D, 0x1175, 0x11C1], NFKC: [0xCC26], NFKD: [0x110D, 0x1175, 0x11C1] }, +{ source: [0xCC27], NFC: [0xCC27], NFD: [0x110D, 0x1175, 0x11C2], NFKC: [0xCC27], NFKD: [0x110D, 0x1175, 0x11C2] }, +{ source: [0xCC28], NFC: [0xCC28], NFD: [0x110E, 0x1161], NFKC: [0xCC28], NFKD: [0x110E, 0x1161] }, +{ source: [0xCC29], NFC: [0xCC29], NFD: [0x110E, 0x1161, 0x11A8], NFKC: [0xCC29], NFKD: [0x110E, 0x1161, 0x11A8] }, +{ source: [0xCC2A], NFC: [0xCC2A], NFD: [0x110E, 0x1161, 0x11A9], NFKC: [0xCC2A], NFKD: [0x110E, 0x1161, 0x11A9] }, +{ source: [0xCC2B], NFC: [0xCC2B], NFD: [0x110E, 0x1161, 0x11AA], NFKC: [0xCC2B], NFKD: [0x110E, 0x1161, 0x11AA] }, +{ source: [0xCC2C], NFC: [0xCC2C], NFD: [0x110E, 0x1161, 0x11AB], NFKC: [0xCC2C], NFKD: [0x110E, 0x1161, 0x11AB] }, +{ source: [0xCC2D], NFC: [0xCC2D], NFD: [0x110E, 0x1161, 0x11AC], NFKC: [0xCC2D], NFKD: [0x110E, 0x1161, 0x11AC] }, +{ source: [0xCC2E], NFC: [0xCC2E], NFD: [0x110E, 0x1161, 0x11AD], NFKC: [0xCC2E], NFKD: [0x110E, 0x1161, 0x11AD] }, +{ source: [0xCC2F], NFC: [0xCC2F], NFD: [0x110E, 0x1161, 0x11AE], NFKC: [0xCC2F], NFKD: [0x110E, 0x1161, 0x11AE] }, +{ source: [0xCC30], NFC: [0xCC30], NFD: [0x110E, 0x1161, 0x11AF], NFKC: [0xCC30], NFKD: [0x110E, 0x1161, 0x11AF] }, +{ source: [0xCC31], NFC: [0xCC31], NFD: [0x110E, 0x1161, 0x11B0], NFKC: [0xCC31], NFKD: [0x110E, 0x1161, 0x11B0] }, +{ source: [0xCC32], NFC: [0xCC32], NFD: [0x110E, 0x1161, 0x11B1], NFKC: [0xCC32], NFKD: [0x110E, 0x1161, 0x11B1] }, +{ source: [0xCC33], NFC: [0xCC33], NFD: [0x110E, 0x1161, 0x11B2], NFKC: [0xCC33], NFKD: [0x110E, 0x1161, 0x11B2] }, +{ source: [0xCC34], NFC: [0xCC34], NFD: [0x110E, 0x1161, 0x11B3], NFKC: [0xCC34], NFKD: [0x110E, 0x1161, 0x11B3] }, +{ source: [0xCC35], NFC: [0xCC35], NFD: [0x110E, 0x1161, 0x11B4], NFKC: [0xCC35], NFKD: [0x110E, 0x1161, 0x11B4] }, +{ source: [0xCC36], NFC: [0xCC36], NFD: [0x110E, 0x1161, 0x11B5], NFKC: [0xCC36], NFKD: [0x110E, 0x1161, 0x11B5] }, +{ source: [0xCC37], NFC: [0xCC37], NFD: [0x110E, 0x1161, 0x11B6], NFKC: [0xCC37], NFKD: [0x110E, 0x1161, 0x11B6] }, +{ source: [0xCC38], NFC: [0xCC38], NFD: [0x110E, 0x1161, 0x11B7], NFKC: [0xCC38], NFKD: [0x110E, 0x1161, 0x11B7] }, +{ source: [0xCC39], NFC: [0xCC39], NFD: [0x110E, 0x1161, 0x11B8], NFKC: [0xCC39], NFKD: [0x110E, 0x1161, 0x11B8] }, +{ source: [0xCC3A], NFC: [0xCC3A], NFD: [0x110E, 0x1161, 0x11B9], NFKC: [0xCC3A], NFKD: [0x110E, 0x1161, 0x11B9] }, +{ source: [0xCC3B], NFC: [0xCC3B], NFD: [0x110E, 0x1161, 0x11BA], NFKC: [0xCC3B], NFKD: [0x110E, 0x1161, 0x11BA] }, +{ source: [0xCC3C], NFC: [0xCC3C], NFD: [0x110E, 0x1161, 0x11BB], NFKC: [0xCC3C], NFKD: [0x110E, 0x1161, 0x11BB] }, +{ source: [0xCC3D], NFC: [0xCC3D], NFD: [0x110E, 0x1161, 0x11BC], NFKC: [0xCC3D], NFKD: [0x110E, 0x1161, 0x11BC] }, +{ source: [0xCC3E], NFC: [0xCC3E], NFD: [0x110E, 0x1161, 0x11BD], NFKC: [0xCC3E], NFKD: [0x110E, 0x1161, 0x11BD] }, +{ source: [0xCC3F], NFC: [0xCC3F], NFD: [0x110E, 0x1161, 0x11BE], NFKC: [0xCC3F], NFKD: [0x110E, 0x1161, 0x11BE] }, +{ source: [0xCC40], NFC: [0xCC40], NFD: [0x110E, 0x1161, 0x11BF], NFKC: [0xCC40], NFKD: [0x110E, 0x1161, 0x11BF] }, +{ source: [0xCC41], NFC: [0xCC41], NFD: [0x110E, 0x1161, 0x11C0], NFKC: [0xCC41], NFKD: [0x110E, 0x1161, 0x11C0] }, +{ source: [0xCC42], NFC: [0xCC42], NFD: [0x110E, 0x1161, 0x11C1], NFKC: [0xCC42], NFKD: [0x110E, 0x1161, 0x11C1] }, +{ source: [0xCC43], NFC: [0xCC43], NFD: [0x110E, 0x1161, 0x11C2], NFKC: [0xCC43], NFKD: [0x110E, 0x1161, 0x11C2] }, +{ source: [0xCC44], NFC: [0xCC44], NFD: [0x110E, 0x1162], NFKC: [0xCC44], NFKD: [0x110E, 0x1162] }, +{ source: [0xCC45], NFC: [0xCC45], NFD: [0x110E, 0x1162, 0x11A8], NFKC: [0xCC45], NFKD: [0x110E, 0x1162, 0x11A8] }, +{ source: [0xCC46], NFC: [0xCC46], NFD: [0x110E, 0x1162, 0x11A9], NFKC: [0xCC46], NFKD: [0x110E, 0x1162, 0x11A9] }, +{ source: [0xCC47], NFC: [0xCC47], NFD: [0x110E, 0x1162, 0x11AA], NFKC: [0xCC47], NFKD: [0x110E, 0x1162, 0x11AA] }, +{ source: [0xCC48], NFC: [0xCC48], NFD: [0x110E, 0x1162, 0x11AB], NFKC: [0xCC48], NFKD: [0x110E, 0x1162, 0x11AB] }, +{ source: [0xCC49], NFC: [0xCC49], NFD: [0x110E, 0x1162, 0x11AC], NFKC: [0xCC49], NFKD: [0x110E, 0x1162, 0x11AC] }, +{ source: [0xCC4A], NFC: [0xCC4A], NFD: [0x110E, 0x1162, 0x11AD], NFKC: [0xCC4A], NFKD: [0x110E, 0x1162, 0x11AD] }, +{ source: [0xCC4B], NFC: [0xCC4B], NFD: [0x110E, 0x1162, 0x11AE], NFKC: [0xCC4B], NFKD: [0x110E, 0x1162, 0x11AE] }, +{ source: [0xCC4C], NFC: [0xCC4C], NFD: [0x110E, 0x1162, 0x11AF], NFKC: [0xCC4C], NFKD: [0x110E, 0x1162, 0x11AF] }, +{ source: [0xCC4D], NFC: [0xCC4D], NFD: [0x110E, 0x1162, 0x11B0], NFKC: [0xCC4D], NFKD: [0x110E, 0x1162, 0x11B0] }, +{ source: [0xCC4E], NFC: [0xCC4E], NFD: [0x110E, 0x1162, 0x11B1], NFKC: [0xCC4E], NFKD: [0x110E, 0x1162, 0x11B1] }, +{ source: [0xCC4F], NFC: [0xCC4F], NFD: [0x110E, 0x1162, 0x11B2], NFKC: [0xCC4F], NFKD: [0x110E, 0x1162, 0x11B2] }, +{ source: [0xCC50], NFC: [0xCC50], NFD: [0x110E, 0x1162, 0x11B3], NFKC: [0xCC50], NFKD: [0x110E, 0x1162, 0x11B3] }, +{ source: [0xCC51], NFC: [0xCC51], NFD: [0x110E, 0x1162, 0x11B4], NFKC: [0xCC51], NFKD: [0x110E, 0x1162, 0x11B4] }, +{ source: [0xCC52], NFC: [0xCC52], NFD: [0x110E, 0x1162, 0x11B5], NFKC: [0xCC52], NFKD: [0x110E, 0x1162, 0x11B5] }, +{ source: [0xCC53], NFC: [0xCC53], NFD: [0x110E, 0x1162, 0x11B6], NFKC: [0xCC53], NFKD: [0x110E, 0x1162, 0x11B6] }, +{ source: [0xCC54], NFC: [0xCC54], NFD: [0x110E, 0x1162, 0x11B7], NFKC: [0xCC54], NFKD: [0x110E, 0x1162, 0x11B7] }, +{ source: [0xCC55], NFC: [0xCC55], NFD: [0x110E, 0x1162, 0x11B8], NFKC: [0xCC55], NFKD: [0x110E, 0x1162, 0x11B8] }, +{ source: [0xCC56], NFC: [0xCC56], NFD: [0x110E, 0x1162, 0x11B9], NFKC: [0xCC56], NFKD: [0x110E, 0x1162, 0x11B9] }, +{ source: [0xCC57], NFC: [0xCC57], NFD: [0x110E, 0x1162, 0x11BA], NFKC: [0xCC57], NFKD: [0x110E, 0x1162, 0x11BA] }, +{ source: [0xCC58], NFC: [0xCC58], NFD: [0x110E, 0x1162, 0x11BB], NFKC: [0xCC58], NFKD: [0x110E, 0x1162, 0x11BB] }, +{ source: [0xCC59], NFC: [0xCC59], NFD: [0x110E, 0x1162, 0x11BC], NFKC: [0xCC59], NFKD: [0x110E, 0x1162, 0x11BC] }, +{ source: [0xCC5A], NFC: [0xCC5A], NFD: [0x110E, 0x1162, 0x11BD], NFKC: [0xCC5A], NFKD: [0x110E, 0x1162, 0x11BD] }, +{ source: [0xCC5B], NFC: [0xCC5B], NFD: [0x110E, 0x1162, 0x11BE], NFKC: [0xCC5B], NFKD: [0x110E, 0x1162, 0x11BE] }, +{ source: [0xCC5C], NFC: [0xCC5C], NFD: [0x110E, 0x1162, 0x11BF], NFKC: [0xCC5C], NFKD: [0x110E, 0x1162, 0x11BF] }, +{ source: [0xCC5D], NFC: [0xCC5D], NFD: [0x110E, 0x1162, 0x11C0], NFKC: [0xCC5D], NFKD: [0x110E, 0x1162, 0x11C0] }, +{ source: [0xCC5E], NFC: [0xCC5E], NFD: [0x110E, 0x1162, 0x11C1], NFKC: [0xCC5E], NFKD: [0x110E, 0x1162, 0x11C1] }, +{ source: [0xCC5F], NFC: [0xCC5F], NFD: [0x110E, 0x1162, 0x11C2], NFKC: [0xCC5F], NFKD: [0x110E, 0x1162, 0x11C2] }, +{ source: [0xCC60], NFC: [0xCC60], NFD: [0x110E, 0x1163], NFKC: [0xCC60], NFKD: [0x110E, 0x1163] }, +{ source: [0xCC61], NFC: [0xCC61], NFD: [0x110E, 0x1163, 0x11A8], NFKC: [0xCC61], NFKD: [0x110E, 0x1163, 0x11A8] }, +{ source: [0xCC62], NFC: [0xCC62], NFD: [0x110E, 0x1163, 0x11A9], NFKC: [0xCC62], NFKD: [0x110E, 0x1163, 0x11A9] }, +{ source: [0xCC63], NFC: [0xCC63], NFD: [0x110E, 0x1163, 0x11AA], NFKC: [0xCC63], NFKD: [0x110E, 0x1163, 0x11AA] }, +{ source: [0xCC64], NFC: [0xCC64], NFD: [0x110E, 0x1163, 0x11AB], NFKC: [0xCC64], NFKD: [0x110E, 0x1163, 0x11AB] }, +{ source: [0xCC65], NFC: [0xCC65], NFD: [0x110E, 0x1163, 0x11AC], NFKC: [0xCC65], NFKD: [0x110E, 0x1163, 0x11AC] }, +{ source: [0xCC66], NFC: [0xCC66], NFD: [0x110E, 0x1163, 0x11AD], NFKC: [0xCC66], NFKD: [0x110E, 0x1163, 0x11AD] }, +{ source: [0xCC67], NFC: [0xCC67], NFD: [0x110E, 0x1163, 0x11AE], NFKC: [0xCC67], NFKD: [0x110E, 0x1163, 0x11AE] }, +{ source: [0xCC68], NFC: [0xCC68], NFD: [0x110E, 0x1163, 0x11AF], NFKC: [0xCC68], NFKD: [0x110E, 0x1163, 0x11AF] }, +{ source: [0xCC69], NFC: [0xCC69], NFD: [0x110E, 0x1163, 0x11B0], NFKC: [0xCC69], NFKD: [0x110E, 0x1163, 0x11B0] }, +{ source: [0xCC6A], NFC: [0xCC6A], NFD: [0x110E, 0x1163, 0x11B1], NFKC: [0xCC6A], NFKD: [0x110E, 0x1163, 0x11B1] }, +{ source: [0xCC6B], NFC: [0xCC6B], NFD: [0x110E, 0x1163, 0x11B2], NFKC: [0xCC6B], NFKD: [0x110E, 0x1163, 0x11B2] }, +{ source: [0xCC6C], NFC: [0xCC6C], NFD: [0x110E, 0x1163, 0x11B3], NFKC: [0xCC6C], NFKD: [0x110E, 0x1163, 0x11B3] }, +{ source: [0xCC6D], NFC: [0xCC6D], NFD: [0x110E, 0x1163, 0x11B4], NFKC: [0xCC6D], NFKD: [0x110E, 0x1163, 0x11B4] }, +{ source: [0xCC6E], NFC: [0xCC6E], NFD: [0x110E, 0x1163, 0x11B5], NFKC: [0xCC6E], NFKD: [0x110E, 0x1163, 0x11B5] }, +{ source: [0xCC6F], NFC: [0xCC6F], NFD: [0x110E, 0x1163, 0x11B6], NFKC: [0xCC6F], NFKD: [0x110E, 0x1163, 0x11B6] }, +{ source: [0xCC70], NFC: [0xCC70], NFD: [0x110E, 0x1163, 0x11B7], NFKC: [0xCC70], NFKD: [0x110E, 0x1163, 0x11B7] }, +{ source: [0xCC71], NFC: [0xCC71], NFD: [0x110E, 0x1163, 0x11B8], NFKC: [0xCC71], NFKD: [0x110E, 0x1163, 0x11B8] }, +{ source: [0xCC72], NFC: [0xCC72], NFD: [0x110E, 0x1163, 0x11B9], NFKC: [0xCC72], NFKD: [0x110E, 0x1163, 0x11B9] }, +{ source: [0xCC73], NFC: [0xCC73], NFD: [0x110E, 0x1163, 0x11BA], NFKC: [0xCC73], NFKD: [0x110E, 0x1163, 0x11BA] }, +{ source: [0xCC74], NFC: [0xCC74], NFD: [0x110E, 0x1163, 0x11BB], NFKC: [0xCC74], NFKD: [0x110E, 0x1163, 0x11BB] }, +{ source: [0xCC75], NFC: [0xCC75], NFD: [0x110E, 0x1163, 0x11BC], NFKC: [0xCC75], NFKD: [0x110E, 0x1163, 0x11BC] }, +{ source: [0xCC76], NFC: [0xCC76], NFD: [0x110E, 0x1163, 0x11BD], NFKC: [0xCC76], NFKD: [0x110E, 0x1163, 0x11BD] }, +{ source: [0xCC77], NFC: [0xCC77], NFD: [0x110E, 0x1163, 0x11BE], NFKC: [0xCC77], NFKD: [0x110E, 0x1163, 0x11BE] }, +{ source: [0xCC78], NFC: [0xCC78], NFD: [0x110E, 0x1163, 0x11BF], NFKC: [0xCC78], NFKD: [0x110E, 0x1163, 0x11BF] }, +{ source: [0xCC79], NFC: [0xCC79], NFD: [0x110E, 0x1163, 0x11C0], NFKC: [0xCC79], NFKD: [0x110E, 0x1163, 0x11C0] }, +{ source: [0xCC7A], NFC: [0xCC7A], NFD: [0x110E, 0x1163, 0x11C1], NFKC: [0xCC7A], NFKD: [0x110E, 0x1163, 0x11C1] }, +{ source: [0xCC7B], NFC: [0xCC7B], NFD: [0x110E, 0x1163, 0x11C2], NFKC: [0xCC7B], NFKD: [0x110E, 0x1163, 0x11C2] }, +{ source: [0xCC7C], NFC: [0xCC7C], NFD: [0x110E, 0x1164], NFKC: [0xCC7C], NFKD: [0x110E, 0x1164] }, +{ source: [0xCC7D], NFC: [0xCC7D], NFD: [0x110E, 0x1164, 0x11A8], NFKC: [0xCC7D], NFKD: [0x110E, 0x1164, 0x11A8] }, +{ source: [0xCC7E], NFC: [0xCC7E], NFD: [0x110E, 0x1164, 0x11A9], NFKC: [0xCC7E], NFKD: [0x110E, 0x1164, 0x11A9] }, +{ source: [0xCC7F], NFC: [0xCC7F], NFD: [0x110E, 0x1164, 0x11AA], NFKC: [0xCC7F], NFKD: [0x110E, 0x1164, 0x11AA] }, +{ source: [0xCC80], NFC: [0xCC80], NFD: [0x110E, 0x1164, 0x11AB], NFKC: [0xCC80], NFKD: [0x110E, 0x1164, 0x11AB] }, +{ source: [0xCC81], NFC: [0xCC81], NFD: [0x110E, 0x1164, 0x11AC], NFKC: [0xCC81], NFKD: [0x110E, 0x1164, 0x11AC] }, +{ source: [0xCC82], NFC: [0xCC82], NFD: [0x110E, 0x1164, 0x11AD], NFKC: [0xCC82], NFKD: [0x110E, 0x1164, 0x11AD] }, +{ source: [0xCC83], NFC: [0xCC83], NFD: [0x110E, 0x1164, 0x11AE], NFKC: [0xCC83], NFKD: [0x110E, 0x1164, 0x11AE] }, +{ source: [0xCC84], NFC: [0xCC84], NFD: [0x110E, 0x1164, 0x11AF], NFKC: [0xCC84], NFKD: [0x110E, 0x1164, 0x11AF] }, +{ source: [0xCC85], NFC: [0xCC85], NFD: [0x110E, 0x1164, 0x11B0], NFKC: [0xCC85], NFKD: [0x110E, 0x1164, 0x11B0] }, +{ source: [0xCC86], NFC: [0xCC86], NFD: [0x110E, 0x1164, 0x11B1], NFKC: [0xCC86], NFKD: [0x110E, 0x1164, 0x11B1] }, +{ source: [0xCC87], NFC: [0xCC87], NFD: [0x110E, 0x1164, 0x11B2], NFKC: [0xCC87], NFKD: [0x110E, 0x1164, 0x11B2] }, +{ source: [0xCC88], NFC: [0xCC88], NFD: [0x110E, 0x1164, 0x11B3], NFKC: [0xCC88], NFKD: [0x110E, 0x1164, 0x11B3] }, +{ source: [0xCC89], NFC: [0xCC89], NFD: [0x110E, 0x1164, 0x11B4], NFKC: [0xCC89], NFKD: [0x110E, 0x1164, 0x11B4] }, +{ source: [0xCC8A], NFC: [0xCC8A], NFD: [0x110E, 0x1164, 0x11B5], NFKC: [0xCC8A], NFKD: [0x110E, 0x1164, 0x11B5] }, +{ source: [0xCC8B], NFC: [0xCC8B], NFD: [0x110E, 0x1164, 0x11B6], NFKC: [0xCC8B], NFKD: [0x110E, 0x1164, 0x11B6] }, +{ source: [0xCC8C], NFC: [0xCC8C], NFD: [0x110E, 0x1164, 0x11B7], NFKC: [0xCC8C], NFKD: [0x110E, 0x1164, 0x11B7] }, +{ source: [0xCC8D], NFC: [0xCC8D], NFD: [0x110E, 0x1164, 0x11B8], NFKC: [0xCC8D], NFKD: [0x110E, 0x1164, 0x11B8] }, +{ source: [0xCC8E], NFC: [0xCC8E], NFD: [0x110E, 0x1164, 0x11B9], NFKC: [0xCC8E], NFKD: [0x110E, 0x1164, 0x11B9] }, +{ source: [0xCC8F], NFC: [0xCC8F], NFD: [0x110E, 0x1164, 0x11BA], NFKC: [0xCC8F], NFKD: [0x110E, 0x1164, 0x11BA] }, +{ source: [0xCC90], NFC: [0xCC90], NFD: [0x110E, 0x1164, 0x11BB], NFKC: [0xCC90], NFKD: [0x110E, 0x1164, 0x11BB] }, +{ source: [0xCC91], NFC: [0xCC91], NFD: [0x110E, 0x1164, 0x11BC], NFKC: [0xCC91], NFKD: [0x110E, 0x1164, 0x11BC] }, +{ source: [0xCC92], NFC: [0xCC92], NFD: [0x110E, 0x1164, 0x11BD], NFKC: [0xCC92], NFKD: [0x110E, 0x1164, 0x11BD] }, +{ source: [0xCC93], NFC: [0xCC93], NFD: [0x110E, 0x1164, 0x11BE], NFKC: [0xCC93], NFKD: [0x110E, 0x1164, 0x11BE] }, +{ source: [0xCC94], NFC: [0xCC94], NFD: [0x110E, 0x1164, 0x11BF], NFKC: [0xCC94], NFKD: [0x110E, 0x1164, 0x11BF] }, +{ source: [0xCC95], NFC: [0xCC95], NFD: [0x110E, 0x1164, 0x11C0], NFKC: [0xCC95], NFKD: [0x110E, 0x1164, 0x11C0] }, +{ source: [0xCC96], NFC: [0xCC96], NFD: [0x110E, 0x1164, 0x11C1], NFKC: [0xCC96], NFKD: [0x110E, 0x1164, 0x11C1] }, +{ source: [0xCC97], NFC: [0xCC97], NFD: [0x110E, 0x1164, 0x11C2], NFKC: [0xCC97], NFKD: [0x110E, 0x1164, 0x11C2] }, +{ source: [0xCC98], NFC: [0xCC98], NFD: [0x110E, 0x1165], NFKC: [0xCC98], NFKD: [0x110E, 0x1165] }, +{ source: [0xCC99], NFC: [0xCC99], NFD: [0x110E, 0x1165, 0x11A8], NFKC: [0xCC99], NFKD: [0x110E, 0x1165, 0x11A8] }, +{ source: [0xCC9A], NFC: [0xCC9A], NFD: [0x110E, 0x1165, 0x11A9], NFKC: [0xCC9A], NFKD: [0x110E, 0x1165, 0x11A9] }, +{ source: [0xCC9B], NFC: [0xCC9B], NFD: [0x110E, 0x1165, 0x11AA], NFKC: [0xCC9B], NFKD: [0x110E, 0x1165, 0x11AA] }, +{ source: [0xCC9C], NFC: [0xCC9C], NFD: [0x110E, 0x1165, 0x11AB], NFKC: [0xCC9C], NFKD: [0x110E, 0x1165, 0x11AB] }, +{ source: [0xCC9D], NFC: [0xCC9D], NFD: [0x110E, 0x1165, 0x11AC], NFKC: [0xCC9D], NFKD: [0x110E, 0x1165, 0x11AC] }, +{ source: [0xCC9E], NFC: [0xCC9E], NFD: [0x110E, 0x1165, 0x11AD], NFKC: [0xCC9E], NFKD: [0x110E, 0x1165, 0x11AD] }, +{ source: [0xCC9F], NFC: [0xCC9F], NFD: [0x110E, 0x1165, 0x11AE], NFKC: [0xCC9F], NFKD: [0x110E, 0x1165, 0x11AE] }, +{ source: [0xCCA0], NFC: [0xCCA0], NFD: [0x110E, 0x1165, 0x11AF], NFKC: [0xCCA0], NFKD: [0x110E, 0x1165, 0x11AF] }, +{ source: [0xCCA1], NFC: [0xCCA1], NFD: [0x110E, 0x1165, 0x11B0], NFKC: [0xCCA1], NFKD: [0x110E, 0x1165, 0x11B0] }, +{ source: [0xCCA2], NFC: [0xCCA2], NFD: [0x110E, 0x1165, 0x11B1], NFKC: [0xCCA2], NFKD: [0x110E, 0x1165, 0x11B1] }, +{ source: [0xCCA3], NFC: [0xCCA3], NFD: [0x110E, 0x1165, 0x11B2], NFKC: [0xCCA3], NFKD: [0x110E, 0x1165, 0x11B2] }, +{ source: [0xCCA4], NFC: [0xCCA4], NFD: [0x110E, 0x1165, 0x11B3], NFKC: [0xCCA4], NFKD: [0x110E, 0x1165, 0x11B3] }, +{ source: [0xCCA5], NFC: [0xCCA5], NFD: [0x110E, 0x1165, 0x11B4], NFKC: [0xCCA5], NFKD: [0x110E, 0x1165, 0x11B4] }, +{ source: [0xCCA6], NFC: [0xCCA6], NFD: [0x110E, 0x1165, 0x11B5], NFKC: [0xCCA6], NFKD: [0x110E, 0x1165, 0x11B5] }, +{ source: [0xCCA7], NFC: [0xCCA7], NFD: [0x110E, 0x1165, 0x11B6], NFKC: [0xCCA7], NFKD: [0x110E, 0x1165, 0x11B6] }, +{ source: [0xCCA8], NFC: [0xCCA8], NFD: [0x110E, 0x1165, 0x11B7], NFKC: [0xCCA8], NFKD: [0x110E, 0x1165, 0x11B7] }, +{ source: [0xCCA9], NFC: [0xCCA9], NFD: [0x110E, 0x1165, 0x11B8], NFKC: [0xCCA9], NFKD: [0x110E, 0x1165, 0x11B8] }, +{ source: [0xCCAA], NFC: [0xCCAA], NFD: [0x110E, 0x1165, 0x11B9], NFKC: [0xCCAA], NFKD: [0x110E, 0x1165, 0x11B9] }, +{ source: [0xCCAB], NFC: [0xCCAB], NFD: [0x110E, 0x1165, 0x11BA], NFKC: [0xCCAB], NFKD: [0x110E, 0x1165, 0x11BA] }, +{ source: [0xCCAC], NFC: [0xCCAC], NFD: [0x110E, 0x1165, 0x11BB], NFKC: [0xCCAC], NFKD: [0x110E, 0x1165, 0x11BB] }, +{ source: [0xCCAD], NFC: [0xCCAD], NFD: [0x110E, 0x1165, 0x11BC], NFKC: [0xCCAD], NFKD: [0x110E, 0x1165, 0x11BC] }, +{ source: [0xCCAE], NFC: [0xCCAE], NFD: [0x110E, 0x1165, 0x11BD], NFKC: [0xCCAE], NFKD: [0x110E, 0x1165, 0x11BD] }, +{ source: [0xCCAF], NFC: [0xCCAF], NFD: [0x110E, 0x1165, 0x11BE], NFKC: [0xCCAF], NFKD: [0x110E, 0x1165, 0x11BE] }, +{ source: [0xCCB0], NFC: [0xCCB0], NFD: [0x110E, 0x1165, 0x11BF], NFKC: [0xCCB0], NFKD: [0x110E, 0x1165, 0x11BF] }, +{ source: [0xCCB1], NFC: [0xCCB1], NFD: [0x110E, 0x1165, 0x11C0], NFKC: [0xCCB1], NFKD: [0x110E, 0x1165, 0x11C0] }, +{ source: [0xCCB2], NFC: [0xCCB2], NFD: [0x110E, 0x1165, 0x11C1], NFKC: [0xCCB2], NFKD: [0x110E, 0x1165, 0x11C1] }, +{ source: [0xCCB3], NFC: [0xCCB3], NFD: [0x110E, 0x1165, 0x11C2], NFKC: [0xCCB3], NFKD: [0x110E, 0x1165, 0x11C2] }, +{ source: [0xCCB4], NFC: [0xCCB4], NFD: [0x110E, 0x1166], NFKC: [0xCCB4], NFKD: [0x110E, 0x1166] }, +{ source: [0xCCB5], NFC: [0xCCB5], NFD: [0x110E, 0x1166, 0x11A8], NFKC: [0xCCB5], NFKD: [0x110E, 0x1166, 0x11A8] }, +{ source: [0xCCB6], NFC: [0xCCB6], NFD: [0x110E, 0x1166, 0x11A9], NFKC: [0xCCB6], NFKD: [0x110E, 0x1166, 0x11A9] }, +{ source: [0xCCB7], NFC: [0xCCB7], NFD: [0x110E, 0x1166, 0x11AA], NFKC: [0xCCB7], NFKD: [0x110E, 0x1166, 0x11AA] }, +{ source: [0xCCB8], NFC: [0xCCB8], NFD: [0x110E, 0x1166, 0x11AB], NFKC: [0xCCB8], NFKD: [0x110E, 0x1166, 0x11AB] }, +{ source: [0xCCB9], NFC: [0xCCB9], NFD: [0x110E, 0x1166, 0x11AC], NFKC: [0xCCB9], NFKD: [0x110E, 0x1166, 0x11AC] }, +{ source: [0xCCBA], NFC: [0xCCBA], NFD: [0x110E, 0x1166, 0x11AD], NFKC: [0xCCBA], NFKD: [0x110E, 0x1166, 0x11AD] }, +{ source: [0xCCBB], NFC: [0xCCBB], NFD: [0x110E, 0x1166, 0x11AE], NFKC: [0xCCBB], NFKD: [0x110E, 0x1166, 0x11AE] }, +{ source: [0xCCBC], NFC: [0xCCBC], NFD: [0x110E, 0x1166, 0x11AF], NFKC: [0xCCBC], NFKD: [0x110E, 0x1166, 0x11AF] }, +{ source: [0xCCBD], NFC: [0xCCBD], NFD: [0x110E, 0x1166, 0x11B0], NFKC: [0xCCBD], NFKD: [0x110E, 0x1166, 0x11B0] }, +{ source: [0xCCBE], NFC: [0xCCBE], NFD: [0x110E, 0x1166, 0x11B1], NFKC: [0xCCBE], NFKD: [0x110E, 0x1166, 0x11B1] }, +{ source: [0xCCBF], NFC: [0xCCBF], NFD: [0x110E, 0x1166, 0x11B2], NFKC: [0xCCBF], NFKD: [0x110E, 0x1166, 0x11B2] }, +{ source: [0xCCC0], NFC: [0xCCC0], NFD: [0x110E, 0x1166, 0x11B3], NFKC: [0xCCC0], NFKD: [0x110E, 0x1166, 0x11B3] }, +{ source: [0xCCC1], NFC: [0xCCC1], NFD: [0x110E, 0x1166, 0x11B4], NFKC: [0xCCC1], NFKD: [0x110E, 0x1166, 0x11B4] }, +{ source: [0xCCC2], NFC: [0xCCC2], NFD: [0x110E, 0x1166, 0x11B5], NFKC: [0xCCC2], NFKD: [0x110E, 0x1166, 0x11B5] }, +{ source: [0xCCC3], NFC: [0xCCC3], NFD: [0x110E, 0x1166, 0x11B6], NFKC: [0xCCC3], NFKD: [0x110E, 0x1166, 0x11B6] }, +{ source: [0xCCC4], NFC: [0xCCC4], NFD: [0x110E, 0x1166, 0x11B7], NFKC: [0xCCC4], NFKD: [0x110E, 0x1166, 0x11B7] }, +{ source: [0xCCC5], NFC: [0xCCC5], NFD: [0x110E, 0x1166, 0x11B8], NFKC: [0xCCC5], NFKD: [0x110E, 0x1166, 0x11B8] }, +{ source: [0xCCC6], NFC: [0xCCC6], NFD: [0x110E, 0x1166, 0x11B9], NFKC: [0xCCC6], NFKD: [0x110E, 0x1166, 0x11B9] }, +{ source: [0xCCC7], NFC: [0xCCC7], NFD: [0x110E, 0x1166, 0x11BA], NFKC: [0xCCC7], NFKD: [0x110E, 0x1166, 0x11BA] }, +{ source: [0xCCC8], NFC: [0xCCC8], NFD: [0x110E, 0x1166, 0x11BB], NFKC: [0xCCC8], NFKD: [0x110E, 0x1166, 0x11BB] }, +{ source: [0xCCC9], NFC: [0xCCC9], NFD: [0x110E, 0x1166, 0x11BC], NFKC: [0xCCC9], NFKD: [0x110E, 0x1166, 0x11BC] }, +{ source: [0xCCCA], NFC: [0xCCCA], NFD: [0x110E, 0x1166, 0x11BD], NFKC: [0xCCCA], NFKD: [0x110E, 0x1166, 0x11BD] }, +{ source: [0xCCCB], NFC: [0xCCCB], NFD: [0x110E, 0x1166, 0x11BE], NFKC: [0xCCCB], NFKD: [0x110E, 0x1166, 0x11BE] }, +{ source: [0xCCCC], NFC: [0xCCCC], NFD: [0x110E, 0x1166, 0x11BF], NFKC: [0xCCCC], NFKD: [0x110E, 0x1166, 0x11BF] }, +{ source: [0xCCCD], NFC: [0xCCCD], NFD: [0x110E, 0x1166, 0x11C0], NFKC: [0xCCCD], NFKD: [0x110E, 0x1166, 0x11C0] }, +{ source: [0xCCCE], NFC: [0xCCCE], NFD: [0x110E, 0x1166, 0x11C1], NFKC: [0xCCCE], NFKD: [0x110E, 0x1166, 0x11C1] }, +{ source: [0xCCCF], NFC: [0xCCCF], NFD: [0x110E, 0x1166, 0x11C2], NFKC: [0xCCCF], NFKD: [0x110E, 0x1166, 0x11C2] }, +{ source: [0xCCD0], NFC: [0xCCD0], NFD: [0x110E, 0x1167], NFKC: [0xCCD0], NFKD: [0x110E, 0x1167] }, +{ source: [0xCCD1], NFC: [0xCCD1], NFD: [0x110E, 0x1167, 0x11A8], NFKC: [0xCCD1], NFKD: [0x110E, 0x1167, 0x11A8] }, +{ source: [0xCCD2], NFC: [0xCCD2], NFD: [0x110E, 0x1167, 0x11A9], NFKC: [0xCCD2], NFKD: [0x110E, 0x1167, 0x11A9] }, +{ source: [0xCCD3], NFC: [0xCCD3], NFD: [0x110E, 0x1167, 0x11AA], NFKC: [0xCCD3], NFKD: [0x110E, 0x1167, 0x11AA] }, +{ source: [0xCCD4], NFC: [0xCCD4], NFD: [0x110E, 0x1167, 0x11AB], NFKC: [0xCCD4], NFKD: [0x110E, 0x1167, 0x11AB] }, +{ source: [0xCCD5], NFC: [0xCCD5], NFD: [0x110E, 0x1167, 0x11AC], NFKC: [0xCCD5], NFKD: [0x110E, 0x1167, 0x11AC] }, +{ source: [0xCCD6], NFC: [0xCCD6], NFD: [0x110E, 0x1167, 0x11AD], NFKC: [0xCCD6], NFKD: [0x110E, 0x1167, 0x11AD] }, +{ source: [0xCCD7], NFC: [0xCCD7], NFD: [0x110E, 0x1167, 0x11AE], NFKC: [0xCCD7], NFKD: [0x110E, 0x1167, 0x11AE] }, +{ source: [0xCCD8], NFC: [0xCCD8], NFD: [0x110E, 0x1167, 0x11AF], NFKC: [0xCCD8], NFKD: [0x110E, 0x1167, 0x11AF] }, +{ source: [0xCCD9], NFC: [0xCCD9], NFD: [0x110E, 0x1167, 0x11B0], NFKC: [0xCCD9], NFKD: [0x110E, 0x1167, 0x11B0] }, +{ source: [0xCCDA], NFC: [0xCCDA], NFD: [0x110E, 0x1167, 0x11B1], NFKC: [0xCCDA], NFKD: [0x110E, 0x1167, 0x11B1] }, +{ source: [0xCCDB], NFC: [0xCCDB], NFD: [0x110E, 0x1167, 0x11B2], NFKC: [0xCCDB], NFKD: [0x110E, 0x1167, 0x11B2] }, +{ source: [0xCCDC], NFC: [0xCCDC], NFD: [0x110E, 0x1167, 0x11B3], NFKC: [0xCCDC], NFKD: [0x110E, 0x1167, 0x11B3] }, +{ source: [0xCCDD], NFC: [0xCCDD], NFD: [0x110E, 0x1167, 0x11B4], NFKC: [0xCCDD], NFKD: [0x110E, 0x1167, 0x11B4] }, +{ source: [0xCCDE], NFC: [0xCCDE], NFD: [0x110E, 0x1167, 0x11B5], NFKC: [0xCCDE], NFKD: [0x110E, 0x1167, 0x11B5] }, +{ source: [0xCCDF], NFC: [0xCCDF], NFD: [0x110E, 0x1167, 0x11B6], NFKC: [0xCCDF], NFKD: [0x110E, 0x1167, 0x11B6] }, +{ source: [0xCCE0], NFC: [0xCCE0], NFD: [0x110E, 0x1167, 0x11B7], NFKC: [0xCCE0], NFKD: [0x110E, 0x1167, 0x11B7] }, +{ source: [0xCCE1], NFC: [0xCCE1], NFD: [0x110E, 0x1167, 0x11B8], NFKC: [0xCCE1], NFKD: [0x110E, 0x1167, 0x11B8] }, +{ source: [0xCCE2], NFC: [0xCCE2], NFD: [0x110E, 0x1167, 0x11B9], NFKC: [0xCCE2], NFKD: [0x110E, 0x1167, 0x11B9] }, +{ source: [0xCCE3], NFC: [0xCCE3], NFD: [0x110E, 0x1167, 0x11BA], NFKC: [0xCCE3], NFKD: [0x110E, 0x1167, 0x11BA] }, +{ source: [0xCCE4], NFC: [0xCCE4], NFD: [0x110E, 0x1167, 0x11BB], NFKC: [0xCCE4], NFKD: [0x110E, 0x1167, 0x11BB] }, +{ source: [0xCCE5], NFC: [0xCCE5], NFD: [0x110E, 0x1167, 0x11BC], NFKC: [0xCCE5], NFKD: [0x110E, 0x1167, 0x11BC] }, +{ source: [0xCCE6], NFC: [0xCCE6], NFD: [0x110E, 0x1167, 0x11BD], NFKC: [0xCCE6], NFKD: [0x110E, 0x1167, 0x11BD] }, +{ source: [0xCCE7], NFC: [0xCCE7], NFD: [0x110E, 0x1167, 0x11BE], NFKC: [0xCCE7], NFKD: [0x110E, 0x1167, 0x11BE] }, +{ source: [0xCCE8], NFC: [0xCCE8], NFD: [0x110E, 0x1167, 0x11BF], NFKC: [0xCCE8], NFKD: [0x110E, 0x1167, 0x11BF] }, +{ source: [0xCCE9], NFC: [0xCCE9], NFD: [0x110E, 0x1167, 0x11C0], NFKC: [0xCCE9], NFKD: [0x110E, 0x1167, 0x11C0] }, +{ source: [0xCCEA], NFC: [0xCCEA], NFD: [0x110E, 0x1167, 0x11C1], NFKC: [0xCCEA], NFKD: [0x110E, 0x1167, 0x11C1] }, +{ source: [0xCCEB], NFC: [0xCCEB], NFD: [0x110E, 0x1167, 0x11C2], NFKC: [0xCCEB], NFKD: [0x110E, 0x1167, 0x11C2] }, +{ source: [0xCCEC], NFC: [0xCCEC], NFD: [0x110E, 0x1168], NFKC: [0xCCEC], NFKD: [0x110E, 0x1168] }, +{ source: [0xCCED], NFC: [0xCCED], NFD: [0x110E, 0x1168, 0x11A8], NFKC: [0xCCED], NFKD: [0x110E, 0x1168, 0x11A8] }, +{ source: [0xCCEE], NFC: [0xCCEE], NFD: [0x110E, 0x1168, 0x11A9], NFKC: [0xCCEE], NFKD: [0x110E, 0x1168, 0x11A9] }, +{ source: [0xCCEF], NFC: [0xCCEF], NFD: [0x110E, 0x1168, 0x11AA], NFKC: [0xCCEF], NFKD: [0x110E, 0x1168, 0x11AA] }, +{ source: [0xCCF0], NFC: [0xCCF0], NFD: [0x110E, 0x1168, 0x11AB], NFKC: [0xCCF0], NFKD: [0x110E, 0x1168, 0x11AB] }, +{ source: [0xCCF1], NFC: [0xCCF1], NFD: [0x110E, 0x1168, 0x11AC], NFKC: [0xCCF1], NFKD: [0x110E, 0x1168, 0x11AC] }, +{ source: [0xCCF2], NFC: [0xCCF2], NFD: [0x110E, 0x1168, 0x11AD], NFKC: [0xCCF2], NFKD: [0x110E, 0x1168, 0x11AD] }, +{ source: [0xCCF3], NFC: [0xCCF3], NFD: [0x110E, 0x1168, 0x11AE], NFKC: [0xCCF3], NFKD: [0x110E, 0x1168, 0x11AE] }, +{ source: [0xCCF4], NFC: [0xCCF4], NFD: [0x110E, 0x1168, 0x11AF], NFKC: [0xCCF4], NFKD: [0x110E, 0x1168, 0x11AF] }, +{ source: [0xCCF5], NFC: [0xCCF5], NFD: [0x110E, 0x1168, 0x11B0], NFKC: [0xCCF5], NFKD: [0x110E, 0x1168, 0x11B0] }, +{ source: [0xCCF6], NFC: [0xCCF6], NFD: [0x110E, 0x1168, 0x11B1], NFKC: [0xCCF6], NFKD: [0x110E, 0x1168, 0x11B1] }, +{ source: [0xCCF7], NFC: [0xCCF7], NFD: [0x110E, 0x1168, 0x11B2], NFKC: [0xCCF7], NFKD: [0x110E, 0x1168, 0x11B2] }, +{ source: [0xCCF8], NFC: [0xCCF8], NFD: [0x110E, 0x1168, 0x11B3], NFKC: [0xCCF8], NFKD: [0x110E, 0x1168, 0x11B3] }, +{ source: [0xCCF9], NFC: [0xCCF9], NFD: [0x110E, 0x1168, 0x11B4], NFKC: [0xCCF9], NFKD: [0x110E, 0x1168, 0x11B4] }, +{ source: [0xCCFA], NFC: [0xCCFA], NFD: [0x110E, 0x1168, 0x11B5], NFKC: [0xCCFA], NFKD: [0x110E, 0x1168, 0x11B5] }, +{ source: [0xCCFB], NFC: [0xCCFB], NFD: [0x110E, 0x1168, 0x11B6], NFKC: [0xCCFB], NFKD: [0x110E, 0x1168, 0x11B6] }, +{ source: [0xCCFC], NFC: [0xCCFC], NFD: [0x110E, 0x1168, 0x11B7], NFKC: [0xCCFC], NFKD: [0x110E, 0x1168, 0x11B7] }, +{ source: [0xCCFD], NFC: [0xCCFD], NFD: [0x110E, 0x1168, 0x11B8], NFKC: [0xCCFD], NFKD: [0x110E, 0x1168, 0x11B8] }, +{ source: [0xCCFE], NFC: [0xCCFE], NFD: [0x110E, 0x1168, 0x11B9], NFKC: [0xCCFE], NFKD: [0x110E, 0x1168, 0x11B9] }, +{ source: [0xCCFF], NFC: [0xCCFF], NFD: [0x110E, 0x1168, 0x11BA], NFKC: [0xCCFF], NFKD: [0x110E, 0x1168, 0x11BA] }, +{ source: [0xCD00], NFC: [0xCD00], NFD: [0x110E, 0x1168, 0x11BB], NFKC: [0xCD00], NFKD: [0x110E, 0x1168, 0x11BB] }, +{ source: [0xCD01], NFC: [0xCD01], NFD: [0x110E, 0x1168, 0x11BC], NFKC: [0xCD01], NFKD: [0x110E, 0x1168, 0x11BC] }, +{ source: [0xCD02], NFC: [0xCD02], NFD: [0x110E, 0x1168, 0x11BD], NFKC: [0xCD02], NFKD: [0x110E, 0x1168, 0x11BD] }, +{ source: [0xCD03], NFC: [0xCD03], NFD: [0x110E, 0x1168, 0x11BE], NFKC: [0xCD03], NFKD: [0x110E, 0x1168, 0x11BE] }, +{ source: [0xCD04], NFC: [0xCD04], NFD: [0x110E, 0x1168, 0x11BF], NFKC: [0xCD04], NFKD: [0x110E, 0x1168, 0x11BF] }, +{ source: [0xCD05], NFC: [0xCD05], NFD: [0x110E, 0x1168, 0x11C0], NFKC: [0xCD05], NFKD: [0x110E, 0x1168, 0x11C0] }, +{ source: [0xCD06], NFC: [0xCD06], NFD: [0x110E, 0x1168, 0x11C1], NFKC: [0xCD06], NFKD: [0x110E, 0x1168, 0x11C1] }, +{ source: [0xCD07], NFC: [0xCD07], NFD: [0x110E, 0x1168, 0x11C2], NFKC: [0xCD07], NFKD: [0x110E, 0x1168, 0x11C2] }, +{ source: [0xCD08], NFC: [0xCD08], NFD: [0x110E, 0x1169], NFKC: [0xCD08], NFKD: [0x110E, 0x1169] }, +{ source: [0xCD09], NFC: [0xCD09], NFD: [0x110E, 0x1169, 0x11A8], NFKC: [0xCD09], NFKD: [0x110E, 0x1169, 0x11A8] }, +{ source: [0xCD0A], NFC: [0xCD0A], NFD: [0x110E, 0x1169, 0x11A9], NFKC: [0xCD0A], NFKD: [0x110E, 0x1169, 0x11A9] }, +{ source: [0xCD0B], NFC: [0xCD0B], NFD: [0x110E, 0x1169, 0x11AA], NFKC: [0xCD0B], NFKD: [0x110E, 0x1169, 0x11AA] }, +{ source: [0xCD0C], NFC: [0xCD0C], NFD: [0x110E, 0x1169, 0x11AB], NFKC: [0xCD0C], NFKD: [0x110E, 0x1169, 0x11AB] }, +{ source: [0xCD0D], NFC: [0xCD0D], NFD: [0x110E, 0x1169, 0x11AC], NFKC: [0xCD0D], NFKD: [0x110E, 0x1169, 0x11AC] }, +{ source: [0xCD0E], NFC: [0xCD0E], NFD: [0x110E, 0x1169, 0x11AD], NFKC: [0xCD0E], NFKD: [0x110E, 0x1169, 0x11AD] }, +{ source: [0xCD0F], NFC: [0xCD0F], NFD: [0x110E, 0x1169, 0x11AE], NFKC: [0xCD0F], NFKD: [0x110E, 0x1169, 0x11AE] }, +{ source: [0xCD10], NFC: [0xCD10], NFD: [0x110E, 0x1169, 0x11AF], NFKC: [0xCD10], NFKD: [0x110E, 0x1169, 0x11AF] }, +{ source: [0xCD11], NFC: [0xCD11], NFD: [0x110E, 0x1169, 0x11B0], NFKC: [0xCD11], NFKD: [0x110E, 0x1169, 0x11B0] }, +{ source: [0xCD12], NFC: [0xCD12], NFD: [0x110E, 0x1169, 0x11B1], NFKC: [0xCD12], NFKD: [0x110E, 0x1169, 0x11B1] }, +{ source: [0xCD13], NFC: [0xCD13], NFD: [0x110E, 0x1169, 0x11B2], NFKC: [0xCD13], NFKD: [0x110E, 0x1169, 0x11B2] }, +{ source: [0xCD14], NFC: [0xCD14], NFD: [0x110E, 0x1169, 0x11B3], NFKC: [0xCD14], NFKD: [0x110E, 0x1169, 0x11B3] }, +{ source: [0xCD15], NFC: [0xCD15], NFD: [0x110E, 0x1169, 0x11B4], NFKC: [0xCD15], NFKD: [0x110E, 0x1169, 0x11B4] }, +{ source: [0xCD16], NFC: [0xCD16], NFD: [0x110E, 0x1169, 0x11B5], NFKC: [0xCD16], NFKD: [0x110E, 0x1169, 0x11B5] }, +{ source: [0xCD17], NFC: [0xCD17], NFD: [0x110E, 0x1169, 0x11B6], NFKC: [0xCD17], NFKD: [0x110E, 0x1169, 0x11B6] }, +{ source: [0xCD18], NFC: [0xCD18], NFD: [0x110E, 0x1169, 0x11B7], NFKC: [0xCD18], NFKD: [0x110E, 0x1169, 0x11B7] }, +{ source: [0xCD19], NFC: [0xCD19], NFD: [0x110E, 0x1169, 0x11B8], NFKC: [0xCD19], NFKD: [0x110E, 0x1169, 0x11B8] }, +{ source: [0xCD1A], NFC: [0xCD1A], NFD: [0x110E, 0x1169, 0x11B9], NFKC: [0xCD1A], NFKD: [0x110E, 0x1169, 0x11B9] }, +{ source: [0xCD1B], NFC: [0xCD1B], NFD: [0x110E, 0x1169, 0x11BA], NFKC: [0xCD1B], NFKD: [0x110E, 0x1169, 0x11BA] }, +{ source: [0xCD1C], NFC: [0xCD1C], NFD: [0x110E, 0x1169, 0x11BB], NFKC: [0xCD1C], NFKD: [0x110E, 0x1169, 0x11BB] }, +{ source: [0xCD1D], NFC: [0xCD1D], NFD: [0x110E, 0x1169, 0x11BC], NFKC: [0xCD1D], NFKD: [0x110E, 0x1169, 0x11BC] }, +{ source: [0xCD1E], NFC: [0xCD1E], NFD: [0x110E, 0x1169, 0x11BD], NFKC: [0xCD1E], NFKD: [0x110E, 0x1169, 0x11BD] }, +{ source: [0xCD1F], NFC: [0xCD1F], NFD: [0x110E, 0x1169, 0x11BE], NFKC: [0xCD1F], NFKD: [0x110E, 0x1169, 0x11BE] }, +{ source: [0xCD20], NFC: [0xCD20], NFD: [0x110E, 0x1169, 0x11BF], NFKC: [0xCD20], NFKD: [0x110E, 0x1169, 0x11BF] }, +{ source: [0xCD21], NFC: [0xCD21], NFD: [0x110E, 0x1169, 0x11C0], NFKC: [0xCD21], NFKD: [0x110E, 0x1169, 0x11C0] }, +{ source: [0xCD22], NFC: [0xCD22], NFD: [0x110E, 0x1169, 0x11C1], NFKC: [0xCD22], NFKD: [0x110E, 0x1169, 0x11C1] }, +{ source: [0xCD23], NFC: [0xCD23], NFD: [0x110E, 0x1169, 0x11C2], NFKC: [0xCD23], NFKD: [0x110E, 0x1169, 0x11C2] }, +{ source: [0xCD24], NFC: [0xCD24], NFD: [0x110E, 0x116A], NFKC: [0xCD24], NFKD: [0x110E, 0x116A] }, +{ source: [0xCD25], NFC: [0xCD25], NFD: [0x110E, 0x116A, 0x11A8], NFKC: [0xCD25], NFKD: [0x110E, 0x116A, 0x11A8] }, +{ source: [0xCD26], NFC: [0xCD26], NFD: [0x110E, 0x116A, 0x11A9], NFKC: [0xCD26], NFKD: [0x110E, 0x116A, 0x11A9] }, +{ source: [0xCD27], NFC: [0xCD27], NFD: [0x110E, 0x116A, 0x11AA], NFKC: [0xCD27], NFKD: [0x110E, 0x116A, 0x11AA] }, +{ source: [0xCD28], NFC: [0xCD28], NFD: [0x110E, 0x116A, 0x11AB], NFKC: [0xCD28], NFKD: [0x110E, 0x116A, 0x11AB] }, +{ source: [0xCD29], NFC: [0xCD29], NFD: [0x110E, 0x116A, 0x11AC], NFKC: [0xCD29], NFKD: [0x110E, 0x116A, 0x11AC] }, +{ source: [0xCD2A], NFC: [0xCD2A], NFD: [0x110E, 0x116A, 0x11AD], NFKC: [0xCD2A], NFKD: [0x110E, 0x116A, 0x11AD] }, +{ source: [0xCD2B], NFC: [0xCD2B], NFD: [0x110E, 0x116A, 0x11AE], NFKC: [0xCD2B], NFKD: [0x110E, 0x116A, 0x11AE] }, +{ source: [0xCD2C], NFC: [0xCD2C], NFD: [0x110E, 0x116A, 0x11AF], NFKC: [0xCD2C], NFKD: [0x110E, 0x116A, 0x11AF] }, +{ source: [0xCD2D], NFC: [0xCD2D], NFD: [0x110E, 0x116A, 0x11B0], NFKC: [0xCD2D], NFKD: [0x110E, 0x116A, 0x11B0] }, +{ source: [0xCD2E], NFC: [0xCD2E], NFD: [0x110E, 0x116A, 0x11B1], NFKC: [0xCD2E], NFKD: [0x110E, 0x116A, 0x11B1] }, +{ source: [0xCD2F], NFC: [0xCD2F], NFD: [0x110E, 0x116A, 0x11B2], NFKC: [0xCD2F], NFKD: [0x110E, 0x116A, 0x11B2] }, +{ source: [0xCD30], NFC: [0xCD30], NFD: [0x110E, 0x116A, 0x11B3], NFKC: [0xCD30], NFKD: [0x110E, 0x116A, 0x11B3] }, +{ source: [0xCD31], NFC: [0xCD31], NFD: [0x110E, 0x116A, 0x11B4], NFKC: [0xCD31], NFKD: [0x110E, 0x116A, 0x11B4] }, +{ source: [0xCD32], NFC: [0xCD32], NFD: [0x110E, 0x116A, 0x11B5], NFKC: [0xCD32], NFKD: [0x110E, 0x116A, 0x11B5] }, +{ source: [0xCD33], NFC: [0xCD33], NFD: [0x110E, 0x116A, 0x11B6], NFKC: [0xCD33], NFKD: [0x110E, 0x116A, 0x11B6] }, +{ source: [0xCD34], NFC: [0xCD34], NFD: [0x110E, 0x116A, 0x11B7], NFKC: [0xCD34], NFKD: [0x110E, 0x116A, 0x11B7] }, +{ source: [0xCD35], NFC: [0xCD35], NFD: [0x110E, 0x116A, 0x11B8], NFKC: [0xCD35], NFKD: [0x110E, 0x116A, 0x11B8] }, +{ source: [0xCD36], NFC: [0xCD36], NFD: [0x110E, 0x116A, 0x11B9], NFKC: [0xCD36], NFKD: [0x110E, 0x116A, 0x11B9] }, +{ source: [0xCD37], NFC: [0xCD37], NFD: [0x110E, 0x116A, 0x11BA], NFKC: [0xCD37], NFKD: [0x110E, 0x116A, 0x11BA] }, +{ source: [0xCD38], NFC: [0xCD38], NFD: [0x110E, 0x116A, 0x11BB], NFKC: [0xCD38], NFKD: [0x110E, 0x116A, 0x11BB] }, +{ source: [0xCD39], NFC: [0xCD39], NFD: [0x110E, 0x116A, 0x11BC], NFKC: [0xCD39], NFKD: [0x110E, 0x116A, 0x11BC] }, +{ source: [0xCD3A], NFC: [0xCD3A], NFD: [0x110E, 0x116A, 0x11BD], NFKC: [0xCD3A], NFKD: [0x110E, 0x116A, 0x11BD] }, +{ source: [0xCD3B], NFC: [0xCD3B], NFD: [0x110E, 0x116A, 0x11BE], NFKC: [0xCD3B], NFKD: [0x110E, 0x116A, 0x11BE] }, +{ source: [0xCD3C], NFC: [0xCD3C], NFD: [0x110E, 0x116A, 0x11BF], NFKC: [0xCD3C], NFKD: [0x110E, 0x116A, 0x11BF] }, +{ source: [0xCD3D], NFC: [0xCD3D], NFD: [0x110E, 0x116A, 0x11C0], NFKC: [0xCD3D], NFKD: [0x110E, 0x116A, 0x11C0] }, +{ source: [0xCD3E], NFC: [0xCD3E], NFD: [0x110E, 0x116A, 0x11C1], NFKC: [0xCD3E], NFKD: [0x110E, 0x116A, 0x11C1] }, +{ source: [0xCD3F], NFC: [0xCD3F], NFD: [0x110E, 0x116A, 0x11C2], NFKC: [0xCD3F], NFKD: [0x110E, 0x116A, 0x11C2] }, +{ source: [0xCD40], NFC: [0xCD40], NFD: [0x110E, 0x116B], NFKC: [0xCD40], NFKD: [0x110E, 0x116B] }, +{ source: [0xCD41], NFC: [0xCD41], NFD: [0x110E, 0x116B, 0x11A8], NFKC: [0xCD41], NFKD: [0x110E, 0x116B, 0x11A8] }, +{ source: [0xCD42], NFC: [0xCD42], NFD: [0x110E, 0x116B, 0x11A9], NFKC: [0xCD42], NFKD: [0x110E, 0x116B, 0x11A9] }, +{ source: [0xCD43], NFC: [0xCD43], NFD: [0x110E, 0x116B, 0x11AA], NFKC: [0xCD43], NFKD: [0x110E, 0x116B, 0x11AA] }, +{ source: [0xCD44], NFC: [0xCD44], NFD: [0x110E, 0x116B, 0x11AB], NFKC: [0xCD44], NFKD: [0x110E, 0x116B, 0x11AB] }, +{ source: [0xCD45], NFC: [0xCD45], NFD: [0x110E, 0x116B, 0x11AC], NFKC: [0xCD45], NFKD: [0x110E, 0x116B, 0x11AC] }, +{ source: [0xCD46], NFC: [0xCD46], NFD: [0x110E, 0x116B, 0x11AD], NFKC: [0xCD46], NFKD: [0x110E, 0x116B, 0x11AD] }, +{ source: [0xCD47], NFC: [0xCD47], NFD: [0x110E, 0x116B, 0x11AE], NFKC: [0xCD47], NFKD: [0x110E, 0x116B, 0x11AE] }, +{ source: [0xCD48], NFC: [0xCD48], NFD: [0x110E, 0x116B, 0x11AF], NFKC: [0xCD48], NFKD: [0x110E, 0x116B, 0x11AF] }, +{ source: [0xCD49], NFC: [0xCD49], NFD: [0x110E, 0x116B, 0x11B0], NFKC: [0xCD49], NFKD: [0x110E, 0x116B, 0x11B0] }, +{ source: [0xCD4A], NFC: [0xCD4A], NFD: [0x110E, 0x116B, 0x11B1], NFKC: [0xCD4A], NFKD: [0x110E, 0x116B, 0x11B1] }, +{ source: [0xCD4B], NFC: [0xCD4B], NFD: [0x110E, 0x116B, 0x11B2], NFKC: [0xCD4B], NFKD: [0x110E, 0x116B, 0x11B2] }, +{ source: [0xCD4C], NFC: [0xCD4C], NFD: [0x110E, 0x116B, 0x11B3], NFKC: [0xCD4C], NFKD: [0x110E, 0x116B, 0x11B3] }, +{ source: [0xCD4D], NFC: [0xCD4D], NFD: [0x110E, 0x116B, 0x11B4], NFKC: [0xCD4D], NFKD: [0x110E, 0x116B, 0x11B4] }, +{ source: [0xCD4E], NFC: [0xCD4E], NFD: [0x110E, 0x116B, 0x11B5], NFKC: [0xCD4E], NFKD: [0x110E, 0x116B, 0x11B5] }, +{ source: [0xCD4F], NFC: [0xCD4F], NFD: [0x110E, 0x116B, 0x11B6], NFKC: [0xCD4F], NFKD: [0x110E, 0x116B, 0x11B6] }, +{ source: [0xCD50], NFC: [0xCD50], NFD: [0x110E, 0x116B, 0x11B7], NFKC: [0xCD50], NFKD: [0x110E, 0x116B, 0x11B7] }, +{ source: [0xCD51], NFC: [0xCD51], NFD: [0x110E, 0x116B, 0x11B8], NFKC: [0xCD51], NFKD: [0x110E, 0x116B, 0x11B8] }, +{ source: [0xCD52], NFC: [0xCD52], NFD: [0x110E, 0x116B, 0x11B9], NFKC: [0xCD52], NFKD: [0x110E, 0x116B, 0x11B9] }, +{ source: [0xCD53], NFC: [0xCD53], NFD: [0x110E, 0x116B, 0x11BA], NFKC: [0xCD53], NFKD: [0x110E, 0x116B, 0x11BA] }, +{ source: [0xCD54], NFC: [0xCD54], NFD: [0x110E, 0x116B, 0x11BB], NFKC: [0xCD54], NFKD: [0x110E, 0x116B, 0x11BB] }, +{ source: [0xCD55], NFC: [0xCD55], NFD: [0x110E, 0x116B, 0x11BC], NFKC: [0xCD55], NFKD: [0x110E, 0x116B, 0x11BC] }, +{ source: [0xCD56], NFC: [0xCD56], NFD: [0x110E, 0x116B, 0x11BD], NFKC: [0xCD56], NFKD: [0x110E, 0x116B, 0x11BD] }, +{ source: [0xCD57], NFC: [0xCD57], NFD: [0x110E, 0x116B, 0x11BE], NFKC: [0xCD57], NFKD: [0x110E, 0x116B, 0x11BE] }, +{ source: [0xCD58], NFC: [0xCD58], NFD: [0x110E, 0x116B, 0x11BF], NFKC: [0xCD58], NFKD: [0x110E, 0x116B, 0x11BF] }, +{ source: [0xCD59], NFC: [0xCD59], NFD: [0x110E, 0x116B, 0x11C0], NFKC: [0xCD59], NFKD: [0x110E, 0x116B, 0x11C0] }, +{ source: [0xCD5A], NFC: [0xCD5A], NFD: [0x110E, 0x116B, 0x11C1], NFKC: [0xCD5A], NFKD: [0x110E, 0x116B, 0x11C1] }, +{ source: [0xCD5B], NFC: [0xCD5B], NFD: [0x110E, 0x116B, 0x11C2], NFKC: [0xCD5B], NFKD: [0x110E, 0x116B, 0x11C2] }, +{ source: [0xCD5C], NFC: [0xCD5C], NFD: [0x110E, 0x116C], NFKC: [0xCD5C], NFKD: [0x110E, 0x116C] }, +{ source: [0xCD5D], NFC: [0xCD5D], NFD: [0x110E, 0x116C, 0x11A8], NFKC: [0xCD5D], NFKD: [0x110E, 0x116C, 0x11A8] }, +{ source: [0xCD5E], NFC: [0xCD5E], NFD: [0x110E, 0x116C, 0x11A9], NFKC: [0xCD5E], NFKD: [0x110E, 0x116C, 0x11A9] }, +{ source: [0xCD5F], NFC: [0xCD5F], NFD: [0x110E, 0x116C, 0x11AA], NFKC: [0xCD5F], NFKD: [0x110E, 0x116C, 0x11AA] }, +{ source: [0xCD60], NFC: [0xCD60], NFD: [0x110E, 0x116C, 0x11AB], NFKC: [0xCD60], NFKD: [0x110E, 0x116C, 0x11AB] }, +{ source: [0xCD61], NFC: [0xCD61], NFD: [0x110E, 0x116C, 0x11AC], NFKC: [0xCD61], NFKD: [0x110E, 0x116C, 0x11AC] }, +{ source: [0xCD62], NFC: [0xCD62], NFD: [0x110E, 0x116C, 0x11AD], NFKC: [0xCD62], NFKD: [0x110E, 0x116C, 0x11AD] }, +{ source: [0xCD63], NFC: [0xCD63], NFD: [0x110E, 0x116C, 0x11AE], NFKC: [0xCD63], NFKD: [0x110E, 0x116C, 0x11AE] }, +{ source: [0xCD64], NFC: [0xCD64], NFD: [0x110E, 0x116C, 0x11AF], NFKC: [0xCD64], NFKD: [0x110E, 0x116C, 0x11AF] }, +{ source: [0xCD65], NFC: [0xCD65], NFD: [0x110E, 0x116C, 0x11B0], NFKC: [0xCD65], NFKD: [0x110E, 0x116C, 0x11B0] }, +{ source: [0xCD66], NFC: [0xCD66], NFD: [0x110E, 0x116C, 0x11B1], NFKC: [0xCD66], NFKD: [0x110E, 0x116C, 0x11B1] }, +{ source: [0xCD67], NFC: [0xCD67], NFD: [0x110E, 0x116C, 0x11B2], NFKC: [0xCD67], NFKD: [0x110E, 0x116C, 0x11B2] }, +{ source: [0xCD68], NFC: [0xCD68], NFD: [0x110E, 0x116C, 0x11B3], NFKC: [0xCD68], NFKD: [0x110E, 0x116C, 0x11B3] }, +{ source: [0xCD69], NFC: [0xCD69], NFD: [0x110E, 0x116C, 0x11B4], NFKC: [0xCD69], NFKD: [0x110E, 0x116C, 0x11B4] }, +{ source: [0xCD6A], NFC: [0xCD6A], NFD: [0x110E, 0x116C, 0x11B5], NFKC: [0xCD6A], NFKD: [0x110E, 0x116C, 0x11B5] }, +{ source: [0xCD6B], NFC: [0xCD6B], NFD: [0x110E, 0x116C, 0x11B6], NFKC: [0xCD6B], NFKD: [0x110E, 0x116C, 0x11B6] }, +{ source: [0xCD6C], NFC: [0xCD6C], NFD: [0x110E, 0x116C, 0x11B7], NFKC: [0xCD6C], NFKD: [0x110E, 0x116C, 0x11B7] }, +{ source: [0xCD6D], NFC: [0xCD6D], NFD: [0x110E, 0x116C, 0x11B8], NFKC: [0xCD6D], NFKD: [0x110E, 0x116C, 0x11B8] }, +{ source: [0xCD6E], NFC: [0xCD6E], NFD: [0x110E, 0x116C, 0x11B9], NFKC: [0xCD6E], NFKD: [0x110E, 0x116C, 0x11B9] }, +{ source: [0xCD6F], NFC: [0xCD6F], NFD: [0x110E, 0x116C, 0x11BA], NFKC: [0xCD6F], NFKD: [0x110E, 0x116C, 0x11BA] }, +{ source: [0xCD70], NFC: [0xCD70], NFD: [0x110E, 0x116C, 0x11BB], NFKC: [0xCD70], NFKD: [0x110E, 0x116C, 0x11BB] }, +{ source: [0xCD71], NFC: [0xCD71], NFD: [0x110E, 0x116C, 0x11BC], NFKC: [0xCD71], NFKD: [0x110E, 0x116C, 0x11BC] }, +{ source: [0xCD72], NFC: [0xCD72], NFD: [0x110E, 0x116C, 0x11BD], NFKC: [0xCD72], NFKD: [0x110E, 0x116C, 0x11BD] }, +{ source: [0xCD73], NFC: [0xCD73], NFD: [0x110E, 0x116C, 0x11BE], NFKC: [0xCD73], NFKD: [0x110E, 0x116C, 0x11BE] }, +{ source: [0xCD74], NFC: [0xCD74], NFD: [0x110E, 0x116C, 0x11BF], NFKC: [0xCD74], NFKD: [0x110E, 0x116C, 0x11BF] }, +{ source: [0xCD75], NFC: [0xCD75], NFD: [0x110E, 0x116C, 0x11C0], NFKC: [0xCD75], NFKD: [0x110E, 0x116C, 0x11C0] }, +{ source: [0xCD76], NFC: [0xCD76], NFD: [0x110E, 0x116C, 0x11C1], NFKC: [0xCD76], NFKD: [0x110E, 0x116C, 0x11C1] }, +{ source: [0xCD77], NFC: [0xCD77], NFD: [0x110E, 0x116C, 0x11C2], NFKC: [0xCD77], NFKD: [0x110E, 0x116C, 0x11C2] }, +{ source: [0xCD78], NFC: [0xCD78], NFD: [0x110E, 0x116D], NFKC: [0xCD78], NFKD: [0x110E, 0x116D] }, +{ source: [0xCD79], NFC: [0xCD79], NFD: [0x110E, 0x116D, 0x11A8], NFKC: [0xCD79], NFKD: [0x110E, 0x116D, 0x11A8] }, +{ source: [0xCD7A], NFC: [0xCD7A], NFD: [0x110E, 0x116D, 0x11A9], NFKC: [0xCD7A], NFKD: [0x110E, 0x116D, 0x11A9] }, +{ source: [0xCD7B], NFC: [0xCD7B], NFD: [0x110E, 0x116D, 0x11AA], NFKC: [0xCD7B], NFKD: [0x110E, 0x116D, 0x11AA] }, +{ source: [0xCD7C], NFC: [0xCD7C], NFD: [0x110E, 0x116D, 0x11AB], NFKC: [0xCD7C], NFKD: [0x110E, 0x116D, 0x11AB] }, +{ source: [0xCD7D], NFC: [0xCD7D], NFD: [0x110E, 0x116D, 0x11AC], NFKC: [0xCD7D], NFKD: [0x110E, 0x116D, 0x11AC] }, +{ source: [0xCD7E], NFC: [0xCD7E], NFD: [0x110E, 0x116D, 0x11AD], NFKC: [0xCD7E], NFKD: [0x110E, 0x116D, 0x11AD] }, +{ source: [0xCD7F], NFC: [0xCD7F], NFD: [0x110E, 0x116D, 0x11AE], NFKC: [0xCD7F], NFKD: [0x110E, 0x116D, 0x11AE] }, +{ source: [0xCD80], NFC: [0xCD80], NFD: [0x110E, 0x116D, 0x11AF], NFKC: [0xCD80], NFKD: [0x110E, 0x116D, 0x11AF] }, +{ source: [0xCD81], NFC: [0xCD81], NFD: [0x110E, 0x116D, 0x11B0], NFKC: [0xCD81], NFKD: [0x110E, 0x116D, 0x11B0] }, +{ source: [0xCD82], NFC: [0xCD82], NFD: [0x110E, 0x116D, 0x11B1], NFKC: [0xCD82], NFKD: [0x110E, 0x116D, 0x11B1] }, +{ source: [0xCD83], NFC: [0xCD83], NFD: [0x110E, 0x116D, 0x11B2], NFKC: [0xCD83], NFKD: [0x110E, 0x116D, 0x11B2] }, +{ source: [0xCD84], NFC: [0xCD84], NFD: [0x110E, 0x116D, 0x11B3], NFKC: [0xCD84], NFKD: [0x110E, 0x116D, 0x11B3] }, +{ source: [0xCD85], NFC: [0xCD85], NFD: [0x110E, 0x116D, 0x11B4], NFKC: [0xCD85], NFKD: [0x110E, 0x116D, 0x11B4] }, +{ source: [0xCD86], NFC: [0xCD86], NFD: [0x110E, 0x116D, 0x11B5], NFKC: [0xCD86], NFKD: [0x110E, 0x116D, 0x11B5] }, +{ source: [0xCD87], NFC: [0xCD87], NFD: [0x110E, 0x116D, 0x11B6], NFKC: [0xCD87], NFKD: [0x110E, 0x116D, 0x11B6] }, +{ source: [0xCD88], NFC: [0xCD88], NFD: [0x110E, 0x116D, 0x11B7], NFKC: [0xCD88], NFKD: [0x110E, 0x116D, 0x11B7] }, +{ source: [0xCD89], NFC: [0xCD89], NFD: [0x110E, 0x116D, 0x11B8], NFKC: [0xCD89], NFKD: [0x110E, 0x116D, 0x11B8] }, +{ source: [0xCD8A], NFC: [0xCD8A], NFD: [0x110E, 0x116D, 0x11B9], NFKC: [0xCD8A], NFKD: [0x110E, 0x116D, 0x11B9] }, +{ source: [0xCD8B], NFC: [0xCD8B], NFD: [0x110E, 0x116D, 0x11BA], NFKC: [0xCD8B], NFKD: [0x110E, 0x116D, 0x11BA] }, +{ source: [0xCD8C], NFC: [0xCD8C], NFD: [0x110E, 0x116D, 0x11BB], NFKC: [0xCD8C], NFKD: [0x110E, 0x116D, 0x11BB] }, +{ source: [0xCD8D], NFC: [0xCD8D], NFD: [0x110E, 0x116D, 0x11BC], NFKC: [0xCD8D], NFKD: [0x110E, 0x116D, 0x11BC] }, +{ source: [0xCD8E], NFC: [0xCD8E], NFD: [0x110E, 0x116D, 0x11BD], NFKC: [0xCD8E], NFKD: [0x110E, 0x116D, 0x11BD] }, +{ source: [0xCD8F], NFC: [0xCD8F], NFD: [0x110E, 0x116D, 0x11BE], NFKC: [0xCD8F], NFKD: [0x110E, 0x116D, 0x11BE] }, +{ source: [0xCD90], NFC: [0xCD90], NFD: [0x110E, 0x116D, 0x11BF], NFKC: [0xCD90], NFKD: [0x110E, 0x116D, 0x11BF] }, +{ source: [0xCD91], NFC: [0xCD91], NFD: [0x110E, 0x116D, 0x11C0], NFKC: [0xCD91], NFKD: [0x110E, 0x116D, 0x11C0] }, +{ source: [0xCD92], NFC: [0xCD92], NFD: [0x110E, 0x116D, 0x11C1], NFKC: [0xCD92], NFKD: [0x110E, 0x116D, 0x11C1] }, +{ source: [0xCD93], NFC: [0xCD93], NFD: [0x110E, 0x116D, 0x11C2], NFKC: [0xCD93], NFKD: [0x110E, 0x116D, 0x11C2] }, +{ source: [0xCD94], NFC: [0xCD94], NFD: [0x110E, 0x116E], NFKC: [0xCD94], NFKD: [0x110E, 0x116E] }, +{ source: [0xCD95], NFC: [0xCD95], NFD: [0x110E, 0x116E, 0x11A8], NFKC: [0xCD95], NFKD: [0x110E, 0x116E, 0x11A8] }, +{ source: [0xCD96], NFC: [0xCD96], NFD: [0x110E, 0x116E, 0x11A9], NFKC: [0xCD96], NFKD: [0x110E, 0x116E, 0x11A9] }, +{ source: [0xCD97], NFC: [0xCD97], NFD: [0x110E, 0x116E, 0x11AA], NFKC: [0xCD97], NFKD: [0x110E, 0x116E, 0x11AA] }, +{ source: [0xCD98], NFC: [0xCD98], NFD: [0x110E, 0x116E, 0x11AB], NFKC: [0xCD98], NFKD: [0x110E, 0x116E, 0x11AB] }, +{ source: [0xCD99], NFC: [0xCD99], NFD: [0x110E, 0x116E, 0x11AC], NFKC: [0xCD99], NFKD: [0x110E, 0x116E, 0x11AC] }, +{ source: [0xCD9A], NFC: [0xCD9A], NFD: [0x110E, 0x116E, 0x11AD], NFKC: [0xCD9A], NFKD: [0x110E, 0x116E, 0x11AD] }, +{ source: [0xCD9B], NFC: [0xCD9B], NFD: [0x110E, 0x116E, 0x11AE], NFKC: [0xCD9B], NFKD: [0x110E, 0x116E, 0x11AE] }, +{ source: [0xCD9C], NFC: [0xCD9C], NFD: [0x110E, 0x116E, 0x11AF], NFKC: [0xCD9C], NFKD: [0x110E, 0x116E, 0x11AF] }, +{ source: [0xCD9D], NFC: [0xCD9D], NFD: [0x110E, 0x116E, 0x11B0], NFKC: [0xCD9D], NFKD: [0x110E, 0x116E, 0x11B0] }, +{ source: [0xCD9E], NFC: [0xCD9E], NFD: [0x110E, 0x116E, 0x11B1], NFKC: [0xCD9E], NFKD: [0x110E, 0x116E, 0x11B1] }, +{ source: [0xCD9F], NFC: [0xCD9F], NFD: [0x110E, 0x116E, 0x11B2], NFKC: [0xCD9F], NFKD: [0x110E, 0x116E, 0x11B2] }, +{ source: [0xCDA0], NFC: [0xCDA0], NFD: [0x110E, 0x116E, 0x11B3], NFKC: [0xCDA0], NFKD: [0x110E, 0x116E, 0x11B3] }, +{ source: [0xCDA1], NFC: [0xCDA1], NFD: [0x110E, 0x116E, 0x11B4], NFKC: [0xCDA1], NFKD: [0x110E, 0x116E, 0x11B4] }, +{ source: [0xCDA2], NFC: [0xCDA2], NFD: [0x110E, 0x116E, 0x11B5], NFKC: [0xCDA2], NFKD: [0x110E, 0x116E, 0x11B5] }, +{ source: [0xCDA3], NFC: [0xCDA3], NFD: [0x110E, 0x116E, 0x11B6], NFKC: [0xCDA3], NFKD: [0x110E, 0x116E, 0x11B6] }, +{ source: [0xCDA4], NFC: [0xCDA4], NFD: [0x110E, 0x116E, 0x11B7], NFKC: [0xCDA4], NFKD: [0x110E, 0x116E, 0x11B7] }, +{ source: [0xCDA5], NFC: [0xCDA5], NFD: [0x110E, 0x116E, 0x11B8], NFKC: [0xCDA5], NFKD: [0x110E, 0x116E, 0x11B8] }, +{ source: [0xCDA6], NFC: [0xCDA6], NFD: [0x110E, 0x116E, 0x11B9], NFKC: [0xCDA6], NFKD: [0x110E, 0x116E, 0x11B9] }, +{ source: [0xCDA7], NFC: [0xCDA7], NFD: [0x110E, 0x116E, 0x11BA], NFKC: [0xCDA7], NFKD: [0x110E, 0x116E, 0x11BA] }, +{ source: [0xCDA8], NFC: [0xCDA8], NFD: [0x110E, 0x116E, 0x11BB], NFKC: [0xCDA8], NFKD: [0x110E, 0x116E, 0x11BB] }, +{ source: [0xCDA9], NFC: [0xCDA9], NFD: [0x110E, 0x116E, 0x11BC], NFKC: [0xCDA9], NFKD: [0x110E, 0x116E, 0x11BC] }, +{ source: [0xCDAA], NFC: [0xCDAA], NFD: [0x110E, 0x116E, 0x11BD], NFKC: [0xCDAA], NFKD: [0x110E, 0x116E, 0x11BD] }, +{ source: [0xCDAB], NFC: [0xCDAB], NFD: [0x110E, 0x116E, 0x11BE], NFKC: [0xCDAB], NFKD: [0x110E, 0x116E, 0x11BE] }, +{ source: [0xCDAC], NFC: [0xCDAC], NFD: [0x110E, 0x116E, 0x11BF], NFKC: [0xCDAC], NFKD: [0x110E, 0x116E, 0x11BF] }, +{ source: [0xCDAD], NFC: [0xCDAD], NFD: [0x110E, 0x116E, 0x11C0], NFKC: [0xCDAD], NFKD: [0x110E, 0x116E, 0x11C0] }, +{ source: [0xCDAE], NFC: [0xCDAE], NFD: [0x110E, 0x116E, 0x11C1], NFKC: [0xCDAE], NFKD: [0x110E, 0x116E, 0x11C1] }, +{ source: [0xCDAF], NFC: [0xCDAF], NFD: [0x110E, 0x116E, 0x11C2], NFKC: [0xCDAF], NFKD: [0x110E, 0x116E, 0x11C2] }, +{ source: [0xCDB0], NFC: [0xCDB0], NFD: [0x110E, 0x116F], NFKC: [0xCDB0], NFKD: [0x110E, 0x116F] }, +{ source: [0xCDB1], NFC: [0xCDB1], NFD: [0x110E, 0x116F, 0x11A8], NFKC: [0xCDB1], NFKD: [0x110E, 0x116F, 0x11A8] }, +{ source: [0xCDB2], NFC: [0xCDB2], NFD: [0x110E, 0x116F, 0x11A9], NFKC: [0xCDB2], NFKD: [0x110E, 0x116F, 0x11A9] }, +{ source: [0xCDB3], NFC: [0xCDB3], NFD: [0x110E, 0x116F, 0x11AA], NFKC: [0xCDB3], NFKD: [0x110E, 0x116F, 0x11AA] }, +{ source: [0xCDB4], NFC: [0xCDB4], NFD: [0x110E, 0x116F, 0x11AB], NFKC: [0xCDB4], NFKD: [0x110E, 0x116F, 0x11AB] }, +{ source: [0xCDB5], NFC: [0xCDB5], NFD: [0x110E, 0x116F, 0x11AC], NFKC: [0xCDB5], NFKD: [0x110E, 0x116F, 0x11AC] }, +{ source: [0xCDB6], NFC: [0xCDB6], NFD: [0x110E, 0x116F, 0x11AD], NFKC: [0xCDB6], NFKD: [0x110E, 0x116F, 0x11AD] }, +{ source: [0xCDB7], NFC: [0xCDB7], NFD: [0x110E, 0x116F, 0x11AE], NFKC: [0xCDB7], NFKD: [0x110E, 0x116F, 0x11AE] }, +{ source: [0xCDB8], NFC: [0xCDB8], NFD: [0x110E, 0x116F, 0x11AF], NFKC: [0xCDB8], NFKD: [0x110E, 0x116F, 0x11AF] }, +{ source: [0xCDB9], NFC: [0xCDB9], NFD: [0x110E, 0x116F, 0x11B0], NFKC: [0xCDB9], NFKD: [0x110E, 0x116F, 0x11B0] }, +{ source: [0xCDBA], NFC: [0xCDBA], NFD: [0x110E, 0x116F, 0x11B1], NFKC: [0xCDBA], NFKD: [0x110E, 0x116F, 0x11B1] }, +{ source: [0xCDBB], NFC: [0xCDBB], NFD: [0x110E, 0x116F, 0x11B2], NFKC: [0xCDBB], NFKD: [0x110E, 0x116F, 0x11B2] }, +{ source: [0xCDBC], NFC: [0xCDBC], NFD: [0x110E, 0x116F, 0x11B3], NFKC: [0xCDBC], NFKD: [0x110E, 0x116F, 0x11B3] }, +{ source: [0xCDBD], NFC: [0xCDBD], NFD: [0x110E, 0x116F, 0x11B4], NFKC: [0xCDBD], NFKD: [0x110E, 0x116F, 0x11B4] }, +{ source: [0xCDBE], NFC: [0xCDBE], NFD: [0x110E, 0x116F, 0x11B5], NFKC: [0xCDBE], NFKD: [0x110E, 0x116F, 0x11B5] }, +{ source: [0xCDBF], NFC: [0xCDBF], NFD: [0x110E, 0x116F, 0x11B6], NFKC: [0xCDBF], NFKD: [0x110E, 0x116F, 0x11B6] }, +{ source: [0xCDC0], NFC: [0xCDC0], NFD: [0x110E, 0x116F, 0x11B7], NFKC: [0xCDC0], NFKD: [0x110E, 0x116F, 0x11B7] }, +{ source: [0xCDC1], NFC: [0xCDC1], NFD: [0x110E, 0x116F, 0x11B8], NFKC: [0xCDC1], NFKD: [0x110E, 0x116F, 0x11B8] }, +{ source: [0xCDC2], NFC: [0xCDC2], NFD: [0x110E, 0x116F, 0x11B9], NFKC: [0xCDC2], NFKD: [0x110E, 0x116F, 0x11B9] }, +{ source: [0xCDC3], NFC: [0xCDC3], NFD: [0x110E, 0x116F, 0x11BA], NFKC: [0xCDC3], NFKD: [0x110E, 0x116F, 0x11BA] }, +{ source: [0xCDC4], NFC: [0xCDC4], NFD: [0x110E, 0x116F, 0x11BB], NFKC: [0xCDC4], NFKD: [0x110E, 0x116F, 0x11BB] }, +{ source: [0xCDC5], NFC: [0xCDC5], NFD: [0x110E, 0x116F, 0x11BC], NFKC: [0xCDC5], NFKD: [0x110E, 0x116F, 0x11BC] }, +{ source: [0xCDC6], NFC: [0xCDC6], NFD: [0x110E, 0x116F, 0x11BD], NFKC: [0xCDC6], NFKD: [0x110E, 0x116F, 0x11BD] }, +{ source: [0xCDC7], NFC: [0xCDC7], NFD: [0x110E, 0x116F, 0x11BE], NFKC: [0xCDC7], NFKD: [0x110E, 0x116F, 0x11BE] }, +{ source: [0xCDC8], NFC: [0xCDC8], NFD: [0x110E, 0x116F, 0x11BF], NFKC: [0xCDC8], NFKD: [0x110E, 0x116F, 0x11BF] }, +{ source: [0xCDC9], NFC: [0xCDC9], NFD: [0x110E, 0x116F, 0x11C0], NFKC: [0xCDC9], NFKD: [0x110E, 0x116F, 0x11C0] }, +{ source: [0xCDCA], NFC: [0xCDCA], NFD: [0x110E, 0x116F, 0x11C1], NFKC: [0xCDCA], NFKD: [0x110E, 0x116F, 0x11C1] }, +{ source: [0xCDCB], NFC: [0xCDCB], NFD: [0x110E, 0x116F, 0x11C2], NFKC: [0xCDCB], NFKD: [0x110E, 0x116F, 0x11C2] }, +{ source: [0xCDCC], NFC: [0xCDCC], NFD: [0x110E, 0x1170], NFKC: [0xCDCC], NFKD: [0x110E, 0x1170] }, +{ source: [0xCDCD], NFC: [0xCDCD], NFD: [0x110E, 0x1170, 0x11A8], NFKC: [0xCDCD], NFKD: [0x110E, 0x1170, 0x11A8] }, +{ source: [0xCDCE], NFC: [0xCDCE], NFD: [0x110E, 0x1170, 0x11A9], NFKC: [0xCDCE], NFKD: [0x110E, 0x1170, 0x11A9] }, +{ source: [0xCDCF], NFC: [0xCDCF], NFD: [0x110E, 0x1170, 0x11AA], NFKC: [0xCDCF], NFKD: [0x110E, 0x1170, 0x11AA] }, +{ source: [0xCDD0], NFC: [0xCDD0], NFD: [0x110E, 0x1170, 0x11AB], NFKC: [0xCDD0], NFKD: [0x110E, 0x1170, 0x11AB] }, +{ source: [0xCDD1], NFC: [0xCDD1], NFD: [0x110E, 0x1170, 0x11AC], NFKC: [0xCDD1], NFKD: [0x110E, 0x1170, 0x11AC] }, +{ source: [0xCDD2], NFC: [0xCDD2], NFD: [0x110E, 0x1170, 0x11AD], NFKC: [0xCDD2], NFKD: [0x110E, 0x1170, 0x11AD] }, +{ source: [0xCDD3], NFC: [0xCDD3], NFD: [0x110E, 0x1170, 0x11AE], NFKC: [0xCDD3], NFKD: [0x110E, 0x1170, 0x11AE] }, +{ source: [0xCDD4], NFC: [0xCDD4], NFD: [0x110E, 0x1170, 0x11AF], NFKC: [0xCDD4], NFKD: [0x110E, 0x1170, 0x11AF] }, +{ source: [0xCDD5], NFC: [0xCDD5], NFD: [0x110E, 0x1170, 0x11B0], NFKC: [0xCDD5], NFKD: [0x110E, 0x1170, 0x11B0] }, +{ source: [0xCDD6], NFC: [0xCDD6], NFD: [0x110E, 0x1170, 0x11B1], NFKC: [0xCDD6], NFKD: [0x110E, 0x1170, 0x11B1] }, +{ source: [0xCDD7], NFC: [0xCDD7], NFD: [0x110E, 0x1170, 0x11B2], NFKC: [0xCDD7], NFKD: [0x110E, 0x1170, 0x11B2] }, +{ source: [0xCDD8], NFC: [0xCDD8], NFD: [0x110E, 0x1170, 0x11B3], NFKC: [0xCDD8], NFKD: [0x110E, 0x1170, 0x11B3] }, +{ source: [0xCDD9], NFC: [0xCDD9], NFD: [0x110E, 0x1170, 0x11B4], NFKC: [0xCDD9], NFKD: [0x110E, 0x1170, 0x11B4] }, +{ source: [0xCDDA], NFC: [0xCDDA], NFD: [0x110E, 0x1170, 0x11B5], NFKC: [0xCDDA], NFKD: [0x110E, 0x1170, 0x11B5] }, +{ source: [0xCDDB], NFC: [0xCDDB], NFD: [0x110E, 0x1170, 0x11B6], NFKC: [0xCDDB], NFKD: [0x110E, 0x1170, 0x11B6] }, +{ source: [0xCDDC], NFC: [0xCDDC], NFD: [0x110E, 0x1170, 0x11B7], NFKC: [0xCDDC], NFKD: [0x110E, 0x1170, 0x11B7] }, +{ source: [0xCDDD], NFC: [0xCDDD], NFD: [0x110E, 0x1170, 0x11B8], NFKC: [0xCDDD], NFKD: [0x110E, 0x1170, 0x11B8] }, +{ source: [0xCDDE], NFC: [0xCDDE], NFD: [0x110E, 0x1170, 0x11B9], NFKC: [0xCDDE], NFKD: [0x110E, 0x1170, 0x11B9] }, +{ source: [0xCDDF], NFC: [0xCDDF], NFD: [0x110E, 0x1170, 0x11BA], NFKC: [0xCDDF], NFKD: [0x110E, 0x1170, 0x11BA] }, +{ source: [0xCDE0], NFC: [0xCDE0], NFD: [0x110E, 0x1170, 0x11BB], NFKC: [0xCDE0], NFKD: [0x110E, 0x1170, 0x11BB] }, +{ source: [0xCDE1], NFC: [0xCDE1], NFD: [0x110E, 0x1170, 0x11BC], NFKC: [0xCDE1], NFKD: [0x110E, 0x1170, 0x11BC] }, +{ source: [0xCDE2], NFC: [0xCDE2], NFD: [0x110E, 0x1170, 0x11BD], NFKC: [0xCDE2], NFKD: [0x110E, 0x1170, 0x11BD] }, +{ source: [0xCDE3], NFC: [0xCDE3], NFD: [0x110E, 0x1170, 0x11BE], NFKC: [0xCDE3], NFKD: [0x110E, 0x1170, 0x11BE] }, +{ source: [0xCDE4], NFC: [0xCDE4], NFD: [0x110E, 0x1170, 0x11BF], NFKC: [0xCDE4], NFKD: [0x110E, 0x1170, 0x11BF] }, +{ source: [0xCDE5], NFC: [0xCDE5], NFD: [0x110E, 0x1170, 0x11C0], NFKC: [0xCDE5], NFKD: [0x110E, 0x1170, 0x11C0] }, +{ source: [0xCDE6], NFC: [0xCDE6], NFD: [0x110E, 0x1170, 0x11C1], NFKC: [0xCDE6], NFKD: [0x110E, 0x1170, 0x11C1] }, +{ source: [0xCDE7], NFC: [0xCDE7], NFD: [0x110E, 0x1170, 0x11C2], NFKC: [0xCDE7], NFKD: [0x110E, 0x1170, 0x11C2] }, +{ source: [0xCDE8], NFC: [0xCDE8], NFD: [0x110E, 0x1171], NFKC: [0xCDE8], NFKD: [0x110E, 0x1171] }, +{ source: [0xCDE9], NFC: [0xCDE9], NFD: [0x110E, 0x1171, 0x11A8], NFKC: [0xCDE9], NFKD: [0x110E, 0x1171, 0x11A8] }, +{ source: [0xCDEA], NFC: [0xCDEA], NFD: [0x110E, 0x1171, 0x11A9], NFKC: [0xCDEA], NFKD: [0x110E, 0x1171, 0x11A9] }, +{ source: [0xCDEB], NFC: [0xCDEB], NFD: [0x110E, 0x1171, 0x11AA], NFKC: [0xCDEB], NFKD: [0x110E, 0x1171, 0x11AA] }, +{ source: [0xCDEC], NFC: [0xCDEC], NFD: [0x110E, 0x1171, 0x11AB], NFKC: [0xCDEC], NFKD: [0x110E, 0x1171, 0x11AB] }, +{ source: [0xCDED], NFC: [0xCDED], NFD: [0x110E, 0x1171, 0x11AC], NFKC: [0xCDED], NFKD: [0x110E, 0x1171, 0x11AC] }, +{ source: [0xCDEE], NFC: [0xCDEE], NFD: [0x110E, 0x1171, 0x11AD], NFKC: [0xCDEE], NFKD: [0x110E, 0x1171, 0x11AD] }, +{ source: [0xCDEF], NFC: [0xCDEF], NFD: [0x110E, 0x1171, 0x11AE], NFKC: [0xCDEF], NFKD: [0x110E, 0x1171, 0x11AE] }, +{ source: [0xCDF0], NFC: [0xCDF0], NFD: [0x110E, 0x1171, 0x11AF], NFKC: [0xCDF0], NFKD: [0x110E, 0x1171, 0x11AF] }, +{ source: [0xCDF1], NFC: [0xCDF1], NFD: [0x110E, 0x1171, 0x11B0], NFKC: [0xCDF1], NFKD: [0x110E, 0x1171, 0x11B0] }, +{ source: [0xCDF2], NFC: [0xCDF2], NFD: [0x110E, 0x1171, 0x11B1], NFKC: [0xCDF2], NFKD: [0x110E, 0x1171, 0x11B1] }, +{ source: [0xCDF3], NFC: [0xCDF3], NFD: [0x110E, 0x1171, 0x11B2], NFKC: [0xCDF3], NFKD: [0x110E, 0x1171, 0x11B2] }, +{ source: [0xCDF4], NFC: [0xCDF4], NFD: [0x110E, 0x1171, 0x11B3], NFKC: [0xCDF4], NFKD: [0x110E, 0x1171, 0x11B3] }, +{ source: [0xCDF5], NFC: [0xCDF5], NFD: [0x110E, 0x1171, 0x11B4], NFKC: [0xCDF5], NFKD: [0x110E, 0x1171, 0x11B4] }, +{ source: [0xCDF6], NFC: [0xCDF6], NFD: [0x110E, 0x1171, 0x11B5], NFKC: [0xCDF6], NFKD: [0x110E, 0x1171, 0x11B5] }, +{ source: [0xCDF7], NFC: [0xCDF7], NFD: [0x110E, 0x1171, 0x11B6], NFKC: [0xCDF7], NFKD: [0x110E, 0x1171, 0x11B6] }, +{ source: [0xCDF8], NFC: [0xCDF8], NFD: [0x110E, 0x1171, 0x11B7], NFKC: [0xCDF8], NFKD: [0x110E, 0x1171, 0x11B7] }, +{ source: [0xCDF9], NFC: [0xCDF9], NFD: [0x110E, 0x1171, 0x11B8], NFKC: [0xCDF9], NFKD: [0x110E, 0x1171, 0x11B8] }, +{ source: [0xCDFA], NFC: [0xCDFA], NFD: [0x110E, 0x1171, 0x11B9], NFKC: [0xCDFA], NFKD: [0x110E, 0x1171, 0x11B9] }, +{ source: [0xCDFB], NFC: [0xCDFB], NFD: [0x110E, 0x1171, 0x11BA], NFKC: [0xCDFB], NFKD: [0x110E, 0x1171, 0x11BA] }, +{ source: [0xCDFC], NFC: [0xCDFC], NFD: [0x110E, 0x1171, 0x11BB], NFKC: [0xCDFC], NFKD: [0x110E, 0x1171, 0x11BB] }, +{ source: [0xCDFD], NFC: [0xCDFD], NFD: [0x110E, 0x1171, 0x11BC], NFKC: [0xCDFD], NFKD: [0x110E, 0x1171, 0x11BC] }, +{ source: [0xCDFE], NFC: [0xCDFE], NFD: [0x110E, 0x1171, 0x11BD], NFKC: [0xCDFE], NFKD: [0x110E, 0x1171, 0x11BD] }, +{ source: [0xCDFF], NFC: [0xCDFF], NFD: [0x110E, 0x1171, 0x11BE], NFKC: [0xCDFF], NFKD: [0x110E, 0x1171, 0x11BE] }, +{ source: [0xCE00], NFC: [0xCE00], NFD: [0x110E, 0x1171, 0x11BF], NFKC: [0xCE00], NFKD: [0x110E, 0x1171, 0x11BF] }, +{ source: [0xCE01], NFC: [0xCE01], NFD: [0x110E, 0x1171, 0x11C0], NFKC: [0xCE01], NFKD: [0x110E, 0x1171, 0x11C0] }, +{ source: [0xCE02], NFC: [0xCE02], NFD: [0x110E, 0x1171, 0x11C1], NFKC: [0xCE02], NFKD: [0x110E, 0x1171, 0x11C1] }, +{ source: [0xCE03], NFC: [0xCE03], NFD: [0x110E, 0x1171, 0x11C2], NFKC: [0xCE03], NFKD: [0x110E, 0x1171, 0x11C2] }, +{ source: [0xCE04], NFC: [0xCE04], NFD: [0x110E, 0x1172], NFKC: [0xCE04], NFKD: [0x110E, 0x1172] }, +{ source: [0xCE05], NFC: [0xCE05], NFD: [0x110E, 0x1172, 0x11A8], NFKC: [0xCE05], NFKD: [0x110E, 0x1172, 0x11A8] }, +{ source: [0xCE06], NFC: [0xCE06], NFD: [0x110E, 0x1172, 0x11A9], NFKC: [0xCE06], NFKD: [0x110E, 0x1172, 0x11A9] }, +{ source: [0xCE07], NFC: [0xCE07], NFD: [0x110E, 0x1172, 0x11AA], NFKC: [0xCE07], NFKD: [0x110E, 0x1172, 0x11AA] }, +{ source: [0xCE08], NFC: [0xCE08], NFD: [0x110E, 0x1172, 0x11AB], NFKC: [0xCE08], NFKD: [0x110E, 0x1172, 0x11AB] }, +{ source: [0xCE09], NFC: [0xCE09], NFD: [0x110E, 0x1172, 0x11AC], NFKC: [0xCE09], NFKD: [0x110E, 0x1172, 0x11AC] }, +{ source: [0xCE0A], NFC: [0xCE0A], NFD: [0x110E, 0x1172, 0x11AD], NFKC: [0xCE0A], NFKD: [0x110E, 0x1172, 0x11AD] }, +{ source: [0xCE0B], NFC: [0xCE0B], NFD: [0x110E, 0x1172, 0x11AE], NFKC: [0xCE0B], NFKD: [0x110E, 0x1172, 0x11AE] }, +{ source: [0xCE0C], NFC: [0xCE0C], NFD: [0x110E, 0x1172, 0x11AF], NFKC: [0xCE0C], NFKD: [0x110E, 0x1172, 0x11AF] }, +{ source: [0xCE0D], NFC: [0xCE0D], NFD: [0x110E, 0x1172, 0x11B0], NFKC: [0xCE0D], NFKD: [0x110E, 0x1172, 0x11B0] }, +{ source: [0xCE0E], NFC: [0xCE0E], NFD: [0x110E, 0x1172, 0x11B1], NFKC: [0xCE0E], NFKD: [0x110E, 0x1172, 0x11B1] }, +{ source: [0xCE0F], NFC: [0xCE0F], NFD: [0x110E, 0x1172, 0x11B2], NFKC: [0xCE0F], NFKD: [0x110E, 0x1172, 0x11B2] }, +{ source: [0xCE10], NFC: [0xCE10], NFD: [0x110E, 0x1172, 0x11B3], NFKC: [0xCE10], NFKD: [0x110E, 0x1172, 0x11B3] }, +{ source: [0xCE11], NFC: [0xCE11], NFD: [0x110E, 0x1172, 0x11B4], NFKC: [0xCE11], NFKD: [0x110E, 0x1172, 0x11B4] }, +{ source: [0xCE12], NFC: [0xCE12], NFD: [0x110E, 0x1172, 0x11B5], NFKC: [0xCE12], NFKD: [0x110E, 0x1172, 0x11B5] }, +{ source: [0xCE13], NFC: [0xCE13], NFD: [0x110E, 0x1172, 0x11B6], NFKC: [0xCE13], NFKD: [0x110E, 0x1172, 0x11B6] }, +{ source: [0xCE14], NFC: [0xCE14], NFD: [0x110E, 0x1172, 0x11B7], NFKC: [0xCE14], NFKD: [0x110E, 0x1172, 0x11B7] }, +{ source: [0xCE15], NFC: [0xCE15], NFD: [0x110E, 0x1172, 0x11B8], NFKC: [0xCE15], NFKD: [0x110E, 0x1172, 0x11B8] }, +{ source: [0xCE16], NFC: [0xCE16], NFD: [0x110E, 0x1172, 0x11B9], NFKC: [0xCE16], NFKD: [0x110E, 0x1172, 0x11B9] }, +{ source: [0xCE17], NFC: [0xCE17], NFD: [0x110E, 0x1172, 0x11BA], NFKC: [0xCE17], NFKD: [0x110E, 0x1172, 0x11BA] }, +{ source: [0xCE18], NFC: [0xCE18], NFD: [0x110E, 0x1172, 0x11BB], NFKC: [0xCE18], NFKD: [0x110E, 0x1172, 0x11BB] }, +{ source: [0xCE19], NFC: [0xCE19], NFD: [0x110E, 0x1172, 0x11BC], NFKC: [0xCE19], NFKD: [0x110E, 0x1172, 0x11BC] }, +{ source: [0xCE1A], NFC: [0xCE1A], NFD: [0x110E, 0x1172, 0x11BD], NFKC: [0xCE1A], NFKD: [0x110E, 0x1172, 0x11BD] }, +{ source: [0xCE1B], NFC: [0xCE1B], NFD: [0x110E, 0x1172, 0x11BE], NFKC: [0xCE1B], NFKD: [0x110E, 0x1172, 0x11BE] }, +{ source: [0xCE1C], NFC: [0xCE1C], NFD: [0x110E, 0x1172, 0x11BF], NFKC: [0xCE1C], NFKD: [0x110E, 0x1172, 0x11BF] }, +{ source: [0xCE1D], NFC: [0xCE1D], NFD: [0x110E, 0x1172, 0x11C0], NFKC: [0xCE1D], NFKD: [0x110E, 0x1172, 0x11C0] }, +{ source: [0xCE1E], NFC: [0xCE1E], NFD: [0x110E, 0x1172, 0x11C1], NFKC: [0xCE1E], NFKD: [0x110E, 0x1172, 0x11C1] }, +{ source: [0xCE1F], NFC: [0xCE1F], NFD: [0x110E, 0x1172, 0x11C2], NFKC: [0xCE1F], NFKD: [0x110E, 0x1172, 0x11C2] }, +{ source: [0xCE20], NFC: [0xCE20], NFD: [0x110E, 0x1173], NFKC: [0xCE20], NFKD: [0x110E, 0x1173] }, +{ source: [0xCE21], NFC: [0xCE21], NFD: [0x110E, 0x1173, 0x11A8], NFKC: [0xCE21], NFKD: [0x110E, 0x1173, 0x11A8] }, +{ source: [0xCE22], NFC: [0xCE22], NFD: [0x110E, 0x1173, 0x11A9], NFKC: [0xCE22], NFKD: [0x110E, 0x1173, 0x11A9] }, +{ source: [0xCE23], NFC: [0xCE23], NFD: [0x110E, 0x1173, 0x11AA], NFKC: [0xCE23], NFKD: [0x110E, 0x1173, 0x11AA] }, +{ source: [0xCE24], NFC: [0xCE24], NFD: [0x110E, 0x1173, 0x11AB], NFKC: [0xCE24], NFKD: [0x110E, 0x1173, 0x11AB] }, +{ source: [0xCE25], NFC: [0xCE25], NFD: [0x110E, 0x1173, 0x11AC], NFKC: [0xCE25], NFKD: [0x110E, 0x1173, 0x11AC] }, +{ source: [0xCE26], NFC: [0xCE26], NFD: [0x110E, 0x1173, 0x11AD], NFKC: [0xCE26], NFKD: [0x110E, 0x1173, 0x11AD] }, +{ source: [0xCE27], NFC: [0xCE27], NFD: [0x110E, 0x1173, 0x11AE], NFKC: [0xCE27], NFKD: [0x110E, 0x1173, 0x11AE] }, +{ source: [0xCE28], NFC: [0xCE28], NFD: [0x110E, 0x1173, 0x11AF], NFKC: [0xCE28], NFKD: [0x110E, 0x1173, 0x11AF] }, +{ source: [0xCE29], NFC: [0xCE29], NFD: [0x110E, 0x1173, 0x11B0], NFKC: [0xCE29], NFKD: [0x110E, 0x1173, 0x11B0] }, +{ source: [0xCE2A], NFC: [0xCE2A], NFD: [0x110E, 0x1173, 0x11B1], NFKC: [0xCE2A], NFKD: [0x110E, 0x1173, 0x11B1] }, +{ source: [0xCE2B], NFC: [0xCE2B], NFD: [0x110E, 0x1173, 0x11B2], NFKC: [0xCE2B], NFKD: [0x110E, 0x1173, 0x11B2] }, +{ source: [0xCE2C], NFC: [0xCE2C], NFD: [0x110E, 0x1173, 0x11B3], NFKC: [0xCE2C], NFKD: [0x110E, 0x1173, 0x11B3] }, +{ source: [0xCE2D], NFC: [0xCE2D], NFD: [0x110E, 0x1173, 0x11B4], NFKC: [0xCE2D], NFKD: [0x110E, 0x1173, 0x11B4] }, +{ source: [0xCE2E], NFC: [0xCE2E], NFD: [0x110E, 0x1173, 0x11B5], NFKC: [0xCE2E], NFKD: [0x110E, 0x1173, 0x11B5] }, +{ source: [0xCE2F], NFC: [0xCE2F], NFD: [0x110E, 0x1173, 0x11B6], NFKC: [0xCE2F], NFKD: [0x110E, 0x1173, 0x11B6] }, +{ source: [0xCE30], NFC: [0xCE30], NFD: [0x110E, 0x1173, 0x11B7], NFKC: [0xCE30], NFKD: [0x110E, 0x1173, 0x11B7] }, +{ source: [0xCE31], NFC: [0xCE31], NFD: [0x110E, 0x1173, 0x11B8], NFKC: [0xCE31], NFKD: [0x110E, 0x1173, 0x11B8] }, +{ source: [0xCE32], NFC: [0xCE32], NFD: [0x110E, 0x1173, 0x11B9], NFKC: [0xCE32], NFKD: [0x110E, 0x1173, 0x11B9] }, +{ source: [0xCE33], NFC: [0xCE33], NFD: [0x110E, 0x1173, 0x11BA], NFKC: [0xCE33], NFKD: [0x110E, 0x1173, 0x11BA] }, +{ source: [0xCE34], NFC: [0xCE34], NFD: [0x110E, 0x1173, 0x11BB], NFKC: [0xCE34], NFKD: [0x110E, 0x1173, 0x11BB] }, +{ source: [0xCE35], NFC: [0xCE35], NFD: [0x110E, 0x1173, 0x11BC], NFKC: [0xCE35], NFKD: [0x110E, 0x1173, 0x11BC] }, +{ source: [0xCE36], NFC: [0xCE36], NFD: [0x110E, 0x1173, 0x11BD], NFKC: [0xCE36], NFKD: [0x110E, 0x1173, 0x11BD] }, +{ source: [0xCE37], NFC: [0xCE37], NFD: [0x110E, 0x1173, 0x11BE], NFKC: [0xCE37], NFKD: [0x110E, 0x1173, 0x11BE] }, +{ source: [0xCE38], NFC: [0xCE38], NFD: [0x110E, 0x1173, 0x11BF], NFKC: [0xCE38], NFKD: [0x110E, 0x1173, 0x11BF] }, +{ source: [0xCE39], NFC: [0xCE39], NFD: [0x110E, 0x1173, 0x11C0], NFKC: [0xCE39], NFKD: [0x110E, 0x1173, 0x11C0] }, +{ source: [0xCE3A], NFC: [0xCE3A], NFD: [0x110E, 0x1173, 0x11C1], NFKC: [0xCE3A], NFKD: [0x110E, 0x1173, 0x11C1] }, +{ source: [0xCE3B], NFC: [0xCE3B], NFD: [0x110E, 0x1173, 0x11C2], NFKC: [0xCE3B], NFKD: [0x110E, 0x1173, 0x11C2] }, +{ source: [0xCE3C], NFC: [0xCE3C], NFD: [0x110E, 0x1174], NFKC: [0xCE3C], NFKD: [0x110E, 0x1174] }, +{ source: [0xCE3D], NFC: [0xCE3D], NFD: [0x110E, 0x1174, 0x11A8], NFKC: [0xCE3D], NFKD: [0x110E, 0x1174, 0x11A8] }, +{ source: [0xCE3E], NFC: [0xCE3E], NFD: [0x110E, 0x1174, 0x11A9], NFKC: [0xCE3E], NFKD: [0x110E, 0x1174, 0x11A9] }, +{ source: [0xCE3F], NFC: [0xCE3F], NFD: [0x110E, 0x1174, 0x11AA], NFKC: [0xCE3F], NFKD: [0x110E, 0x1174, 0x11AA] }, +{ source: [0xCE40], NFC: [0xCE40], NFD: [0x110E, 0x1174, 0x11AB], NFKC: [0xCE40], NFKD: [0x110E, 0x1174, 0x11AB] }, +{ source: [0xCE41], NFC: [0xCE41], NFD: [0x110E, 0x1174, 0x11AC], NFKC: [0xCE41], NFKD: [0x110E, 0x1174, 0x11AC] }, +{ source: [0xCE42], NFC: [0xCE42], NFD: [0x110E, 0x1174, 0x11AD], NFKC: [0xCE42], NFKD: [0x110E, 0x1174, 0x11AD] }, +{ source: [0xCE43], NFC: [0xCE43], NFD: [0x110E, 0x1174, 0x11AE], NFKC: [0xCE43], NFKD: [0x110E, 0x1174, 0x11AE] }, +{ source: [0xCE44], NFC: [0xCE44], NFD: [0x110E, 0x1174, 0x11AF], NFKC: [0xCE44], NFKD: [0x110E, 0x1174, 0x11AF] }, +{ source: [0xCE45], NFC: [0xCE45], NFD: [0x110E, 0x1174, 0x11B0], NFKC: [0xCE45], NFKD: [0x110E, 0x1174, 0x11B0] }, +{ source: [0xCE46], NFC: [0xCE46], NFD: [0x110E, 0x1174, 0x11B1], NFKC: [0xCE46], NFKD: [0x110E, 0x1174, 0x11B1] }, +{ source: [0xCE47], NFC: [0xCE47], NFD: [0x110E, 0x1174, 0x11B2], NFKC: [0xCE47], NFKD: [0x110E, 0x1174, 0x11B2] }, +{ source: [0xCE48], NFC: [0xCE48], NFD: [0x110E, 0x1174, 0x11B3], NFKC: [0xCE48], NFKD: [0x110E, 0x1174, 0x11B3] }, +{ source: [0xCE49], NFC: [0xCE49], NFD: [0x110E, 0x1174, 0x11B4], NFKC: [0xCE49], NFKD: [0x110E, 0x1174, 0x11B4] }, +{ source: [0xCE4A], NFC: [0xCE4A], NFD: [0x110E, 0x1174, 0x11B5], NFKC: [0xCE4A], NFKD: [0x110E, 0x1174, 0x11B5] }, +{ source: [0xCE4B], NFC: [0xCE4B], NFD: [0x110E, 0x1174, 0x11B6], NFKC: [0xCE4B], NFKD: [0x110E, 0x1174, 0x11B6] }, +{ source: [0xCE4C], NFC: [0xCE4C], NFD: [0x110E, 0x1174, 0x11B7], NFKC: [0xCE4C], NFKD: [0x110E, 0x1174, 0x11B7] }, +{ source: [0xCE4D], NFC: [0xCE4D], NFD: [0x110E, 0x1174, 0x11B8], NFKC: [0xCE4D], NFKD: [0x110E, 0x1174, 0x11B8] }, +{ source: [0xCE4E], NFC: [0xCE4E], NFD: [0x110E, 0x1174, 0x11B9], NFKC: [0xCE4E], NFKD: [0x110E, 0x1174, 0x11B9] }, +{ source: [0xCE4F], NFC: [0xCE4F], NFD: [0x110E, 0x1174, 0x11BA], NFKC: [0xCE4F], NFKD: [0x110E, 0x1174, 0x11BA] }, +{ source: [0xCE50], NFC: [0xCE50], NFD: [0x110E, 0x1174, 0x11BB], NFKC: [0xCE50], NFKD: [0x110E, 0x1174, 0x11BB] }, +{ source: [0xCE51], NFC: [0xCE51], NFD: [0x110E, 0x1174, 0x11BC], NFKC: [0xCE51], NFKD: [0x110E, 0x1174, 0x11BC] }, +{ source: [0xCE52], NFC: [0xCE52], NFD: [0x110E, 0x1174, 0x11BD], NFKC: [0xCE52], NFKD: [0x110E, 0x1174, 0x11BD] }, +{ source: [0xCE53], NFC: [0xCE53], NFD: [0x110E, 0x1174, 0x11BE], NFKC: [0xCE53], NFKD: [0x110E, 0x1174, 0x11BE] }, +{ source: [0xCE54], NFC: [0xCE54], NFD: [0x110E, 0x1174, 0x11BF], NFKC: [0xCE54], NFKD: [0x110E, 0x1174, 0x11BF] }, +{ source: [0xCE55], NFC: [0xCE55], NFD: [0x110E, 0x1174, 0x11C0], NFKC: [0xCE55], NFKD: [0x110E, 0x1174, 0x11C0] }, +{ source: [0xCE56], NFC: [0xCE56], NFD: [0x110E, 0x1174, 0x11C1], NFKC: [0xCE56], NFKD: [0x110E, 0x1174, 0x11C1] }, +{ source: [0xCE57], NFC: [0xCE57], NFD: [0x110E, 0x1174, 0x11C2], NFKC: [0xCE57], NFKD: [0x110E, 0x1174, 0x11C2] }, +{ source: [0xCE58], NFC: [0xCE58], NFD: [0x110E, 0x1175], NFKC: [0xCE58], NFKD: [0x110E, 0x1175] }, +{ source: [0xCE59], NFC: [0xCE59], NFD: [0x110E, 0x1175, 0x11A8], NFKC: [0xCE59], NFKD: [0x110E, 0x1175, 0x11A8] }, +{ source: [0xCE5A], NFC: [0xCE5A], NFD: [0x110E, 0x1175, 0x11A9], NFKC: [0xCE5A], NFKD: [0x110E, 0x1175, 0x11A9] }, +{ source: [0xCE5B], NFC: [0xCE5B], NFD: [0x110E, 0x1175, 0x11AA], NFKC: [0xCE5B], NFKD: [0x110E, 0x1175, 0x11AA] }, +{ source: [0xCE5C], NFC: [0xCE5C], NFD: [0x110E, 0x1175, 0x11AB], NFKC: [0xCE5C], NFKD: [0x110E, 0x1175, 0x11AB] }, +{ source: [0xCE5D], NFC: [0xCE5D], NFD: [0x110E, 0x1175, 0x11AC], NFKC: [0xCE5D], NFKD: [0x110E, 0x1175, 0x11AC] }, +{ source: [0xCE5E], NFC: [0xCE5E], NFD: [0x110E, 0x1175, 0x11AD], NFKC: [0xCE5E], NFKD: [0x110E, 0x1175, 0x11AD] }, +{ source: [0xCE5F], NFC: [0xCE5F], NFD: [0x110E, 0x1175, 0x11AE], NFKC: [0xCE5F], NFKD: [0x110E, 0x1175, 0x11AE] }, +{ source: [0xCE60], NFC: [0xCE60], NFD: [0x110E, 0x1175, 0x11AF], NFKC: [0xCE60], NFKD: [0x110E, 0x1175, 0x11AF] }, +{ source: [0xCE61], NFC: [0xCE61], NFD: [0x110E, 0x1175, 0x11B0], NFKC: [0xCE61], NFKD: [0x110E, 0x1175, 0x11B0] }, +{ source: [0xCE62], NFC: [0xCE62], NFD: [0x110E, 0x1175, 0x11B1], NFKC: [0xCE62], NFKD: [0x110E, 0x1175, 0x11B1] }, +{ source: [0xCE63], NFC: [0xCE63], NFD: [0x110E, 0x1175, 0x11B2], NFKC: [0xCE63], NFKD: [0x110E, 0x1175, 0x11B2] }, +{ source: [0xCE64], NFC: [0xCE64], NFD: [0x110E, 0x1175, 0x11B3], NFKC: [0xCE64], NFKD: [0x110E, 0x1175, 0x11B3] }, +{ source: [0xCE65], NFC: [0xCE65], NFD: [0x110E, 0x1175, 0x11B4], NFKC: [0xCE65], NFKD: [0x110E, 0x1175, 0x11B4] }, +{ source: [0xCE66], NFC: [0xCE66], NFD: [0x110E, 0x1175, 0x11B5], NFKC: [0xCE66], NFKD: [0x110E, 0x1175, 0x11B5] }, +{ source: [0xCE67], NFC: [0xCE67], NFD: [0x110E, 0x1175, 0x11B6], NFKC: [0xCE67], NFKD: [0x110E, 0x1175, 0x11B6] }, +{ source: [0xCE68], NFC: [0xCE68], NFD: [0x110E, 0x1175, 0x11B7], NFKC: [0xCE68], NFKD: [0x110E, 0x1175, 0x11B7] }, +{ source: [0xCE69], NFC: [0xCE69], NFD: [0x110E, 0x1175, 0x11B8], NFKC: [0xCE69], NFKD: [0x110E, 0x1175, 0x11B8] }, +{ source: [0xCE6A], NFC: [0xCE6A], NFD: [0x110E, 0x1175, 0x11B9], NFKC: [0xCE6A], NFKD: [0x110E, 0x1175, 0x11B9] }, +{ source: [0xCE6B], NFC: [0xCE6B], NFD: [0x110E, 0x1175, 0x11BA], NFKC: [0xCE6B], NFKD: [0x110E, 0x1175, 0x11BA] }, +{ source: [0xCE6C], NFC: [0xCE6C], NFD: [0x110E, 0x1175, 0x11BB], NFKC: [0xCE6C], NFKD: [0x110E, 0x1175, 0x11BB] }, +{ source: [0xCE6D], NFC: [0xCE6D], NFD: [0x110E, 0x1175, 0x11BC], NFKC: [0xCE6D], NFKD: [0x110E, 0x1175, 0x11BC] }, +{ source: [0xCE6E], NFC: [0xCE6E], NFD: [0x110E, 0x1175, 0x11BD], NFKC: [0xCE6E], NFKD: [0x110E, 0x1175, 0x11BD] }, +{ source: [0xCE6F], NFC: [0xCE6F], NFD: [0x110E, 0x1175, 0x11BE], NFKC: [0xCE6F], NFKD: [0x110E, 0x1175, 0x11BE] }, +{ source: [0xCE70], NFC: [0xCE70], NFD: [0x110E, 0x1175, 0x11BF], NFKC: [0xCE70], NFKD: [0x110E, 0x1175, 0x11BF] }, +{ source: [0xCE71], NFC: [0xCE71], NFD: [0x110E, 0x1175, 0x11C0], NFKC: [0xCE71], NFKD: [0x110E, 0x1175, 0x11C0] }, +{ source: [0xCE72], NFC: [0xCE72], NFD: [0x110E, 0x1175, 0x11C1], NFKC: [0xCE72], NFKD: [0x110E, 0x1175, 0x11C1] }, +{ source: [0xCE73], NFC: [0xCE73], NFD: [0x110E, 0x1175, 0x11C2], NFKC: [0xCE73], NFKD: [0x110E, 0x1175, 0x11C2] }, +{ source: [0xCE74], NFC: [0xCE74], NFD: [0x110F, 0x1161], NFKC: [0xCE74], NFKD: [0x110F, 0x1161] }, +{ source: [0xCE75], NFC: [0xCE75], NFD: [0x110F, 0x1161, 0x11A8], NFKC: [0xCE75], NFKD: [0x110F, 0x1161, 0x11A8] }, +{ source: [0xCE76], NFC: [0xCE76], NFD: [0x110F, 0x1161, 0x11A9], NFKC: [0xCE76], NFKD: [0x110F, 0x1161, 0x11A9] }, +{ source: [0xCE77], NFC: [0xCE77], NFD: [0x110F, 0x1161, 0x11AA], NFKC: [0xCE77], NFKD: [0x110F, 0x1161, 0x11AA] }, +{ source: [0xCE78], NFC: [0xCE78], NFD: [0x110F, 0x1161, 0x11AB], NFKC: [0xCE78], NFKD: [0x110F, 0x1161, 0x11AB] }, +{ source: [0xCE79], NFC: [0xCE79], NFD: [0x110F, 0x1161, 0x11AC], NFKC: [0xCE79], NFKD: [0x110F, 0x1161, 0x11AC] }, +{ source: [0xCE7A], NFC: [0xCE7A], NFD: [0x110F, 0x1161, 0x11AD], NFKC: [0xCE7A], NFKD: [0x110F, 0x1161, 0x11AD] }, +{ source: [0xCE7B], NFC: [0xCE7B], NFD: [0x110F, 0x1161, 0x11AE], NFKC: [0xCE7B], NFKD: [0x110F, 0x1161, 0x11AE] }, +{ source: [0xCE7C], NFC: [0xCE7C], NFD: [0x110F, 0x1161, 0x11AF], NFKC: [0xCE7C], NFKD: [0x110F, 0x1161, 0x11AF] }, +{ source: [0xCE7D], NFC: [0xCE7D], NFD: [0x110F, 0x1161, 0x11B0], NFKC: [0xCE7D], NFKD: [0x110F, 0x1161, 0x11B0] }, +{ source: [0xCE7E], NFC: [0xCE7E], NFD: [0x110F, 0x1161, 0x11B1], NFKC: [0xCE7E], NFKD: [0x110F, 0x1161, 0x11B1] }, +{ source: [0xCE7F], NFC: [0xCE7F], NFD: [0x110F, 0x1161, 0x11B2], NFKC: [0xCE7F], NFKD: [0x110F, 0x1161, 0x11B2] }, +{ source: [0xCE80], NFC: [0xCE80], NFD: [0x110F, 0x1161, 0x11B3], NFKC: [0xCE80], NFKD: [0x110F, 0x1161, 0x11B3] }, +{ source: [0xCE81], NFC: [0xCE81], NFD: [0x110F, 0x1161, 0x11B4], NFKC: [0xCE81], NFKD: [0x110F, 0x1161, 0x11B4] }, +{ source: [0xCE82], NFC: [0xCE82], NFD: [0x110F, 0x1161, 0x11B5], NFKC: [0xCE82], NFKD: [0x110F, 0x1161, 0x11B5] }, +{ source: [0xCE83], NFC: [0xCE83], NFD: [0x110F, 0x1161, 0x11B6], NFKC: [0xCE83], NFKD: [0x110F, 0x1161, 0x11B6] }, +{ source: [0xCE84], NFC: [0xCE84], NFD: [0x110F, 0x1161, 0x11B7], NFKC: [0xCE84], NFKD: [0x110F, 0x1161, 0x11B7] }, +{ source: [0xCE85], NFC: [0xCE85], NFD: [0x110F, 0x1161, 0x11B8], NFKC: [0xCE85], NFKD: [0x110F, 0x1161, 0x11B8] }, +{ source: [0xCE86], NFC: [0xCE86], NFD: [0x110F, 0x1161, 0x11B9], NFKC: [0xCE86], NFKD: [0x110F, 0x1161, 0x11B9] }, +{ source: [0xCE87], NFC: [0xCE87], NFD: [0x110F, 0x1161, 0x11BA], NFKC: [0xCE87], NFKD: [0x110F, 0x1161, 0x11BA] }, +{ source: [0xCE88], NFC: [0xCE88], NFD: [0x110F, 0x1161, 0x11BB], NFKC: [0xCE88], NFKD: [0x110F, 0x1161, 0x11BB] }, +{ source: [0xCE89], NFC: [0xCE89], NFD: [0x110F, 0x1161, 0x11BC], NFKC: [0xCE89], NFKD: [0x110F, 0x1161, 0x11BC] }, +{ source: [0xCE8A], NFC: [0xCE8A], NFD: [0x110F, 0x1161, 0x11BD], NFKC: [0xCE8A], NFKD: [0x110F, 0x1161, 0x11BD] }, +{ source: [0xCE8B], NFC: [0xCE8B], NFD: [0x110F, 0x1161, 0x11BE], NFKC: [0xCE8B], NFKD: [0x110F, 0x1161, 0x11BE] }, +{ source: [0xCE8C], NFC: [0xCE8C], NFD: [0x110F, 0x1161, 0x11BF], NFKC: [0xCE8C], NFKD: [0x110F, 0x1161, 0x11BF] }, +{ source: [0xCE8D], NFC: [0xCE8D], NFD: [0x110F, 0x1161, 0x11C0], NFKC: [0xCE8D], NFKD: [0x110F, 0x1161, 0x11C0] }, +{ source: [0xCE8E], NFC: [0xCE8E], NFD: [0x110F, 0x1161, 0x11C1], NFKC: [0xCE8E], NFKD: [0x110F, 0x1161, 0x11C1] }, +{ source: [0xCE8F], NFC: [0xCE8F], NFD: [0x110F, 0x1161, 0x11C2], NFKC: [0xCE8F], NFKD: [0x110F, 0x1161, 0x11C2] }, +{ source: [0xCE90], NFC: [0xCE90], NFD: [0x110F, 0x1162], NFKC: [0xCE90], NFKD: [0x110F, 0x1162] }, +{ source: [0xCE91], NFC: [0xCE91], NFD: [0x110F, 0x1162, 0x11A8], NFKC: [0xCE91], NFKD: [0x110F, 0x1162, 0x11A8] }, +{ source: [0xCE92], NFC: [0xCE92], NFD: [0x110F, 0x1162, 0x11A9], NFKC: [0xCE92], NFKD: [0x110F, 0x1162, 0x11A9] }, +{ source: [0xCE93], NFC: [0xCE93], NFD: [0x110F, 0x1162, 0x11AA], NFKC: [0xCE93], NFKD: [0x110F, 0x1162, 0x11AA] }, +{ source: [0xCE94], NFC: [0xCE94], NFD: [0x110F, 0x1162, 0x11AB], NFKC: [0xCE94], NFKD: [0x110F, 0x1162, 0x11AB] }, +{ source: [0xCE95], NFC: [0xCE95], NFD: [0x110F, 0x1162, 0x11AC], NFKC: [0xCE95], NFKD: [0x110F, 0x1162, 0x11AC] }, +{ source: [0xCE96], NFC: [0xCE96], NFD: [0x110F, 0x1162, 0x11AD], NFKC: [0xCE96], NFKD: [0x110F, 0x1162, 0x11AD] }, +{ source: [0xCE97], NFC: [0xCE97], NFD: [0x110F, 0x1162, 0x11AE], NFKC: [0xCE97], NFKD: [0x110F, 0x1162, 0x11AE] }, +{ source: [0xCE98], NFC: [0xCE98], NFD: [0x110F, 0x1162, 0x11AF], NFKC: [0xCE98], NFKD: [0x110F, 0x1162, 0x11AF] }, +{ source: [0xCE99], NFC: [0xCE99], NFD: [0x110F, 0x1162, 0x11B0], NFKC: [0xCE99], NFKD: [0x110F, 0x1162, 0x11B0] }, +{ source: [0xCE9A], NFC: [0xCE9A], NFD: [0x110F, 0x1162, 0x11B1], NFKC: [0xCE9A], NFKD: [0x110F, 0x1162, 0x11B1] }, +{ source: [0xCE9B], NFC: [0xCE9B], NFD: [0x110F, 0x1162, 0x11B2], NFKC: [0xCE9B], NFKD: [0x110F, 0x1162, 0x11B2] }, +{ source: [0xCE9C], NFC: [0xCE9C], NFD: [0x110F, 0x1162, 0x11B3], NFKC: [0xCE9C], NFKD: [0x110F, 0x1162, 0x11B3] }, +{ source: [0xCE9D], NFC: [0xCE9D], NFD: [0x110F, 0x1162, 0x11B4], NFKC: [0xCE9D], NFKD: [0x110F, 0x1162, 0x11B4] }, +{ source: [0xCE9E], NFC: [0xCE9E], NFD: [0x110F, 0x1162, 0x11B5], NFKC: [0xCE9E], NFKD: [0x110F, 0x1162, 0x11B5] }, +{ source: [0xCE9F], NFC: [0xCE9F], NFD: [0x110F, 0x1162, 0x11B6], NFKC: [0xCE9F], NFKD: [0x110F, 0x1162, 0x11B6] }, +{ source: [0xCEA0], NFC: [0xCEA0], NFD: [0x110F, 0x1162, 0x11B7], NFKC: [0xCEA0], NFKD: [0x110F, 0x1162, 0x11B7] }, +{ source: [0xCEA1], NFC: [0xCEA1], NFD: [0x110F, 0x1162, 0x11B8], NFKC: [0xCEA1], NFKD: [0x110F, 0x1162, 0x11B8] }, +{ source: [0xCEA2], NFC: [0xCEA2], NFD: [0x110F, 0x1162, 0x11B9], NFKC: [0xCEA2], NFKD: [0x110F, 0x1162, 0x11B9] }, +{ source: [0xCEA3], NFC: [0xCEA3], NFD: [0x110F, 0x1162, 0x11BA], NFKC: [0xCEA3], NFKD: [0x110F, 0x1162, 0x11BA] }, +{ source: [0xCEA4], NFC: [0xCEA4], NFD: [0x110F, 0x1162, 0x11BB], NFKC: [0xCEA4], NFKD: [0x110F, 0x1162, 0x11BB] }, +{ source: [0xCEA5], NFC: [0xCEA5], NFD: [0x110F, 0x1162, 0x11BC], NFKC: [0xCEA5], NFKD: [0x110F, 0x1162, 0x11BC] }, +{ source: [0xCEA6], NFC: [0xCEA6], NFD: [0x110F, 0x1162, 0x11BD], NFKC: [0xCEA6], NFKD: [0x110F, 0x1162, 0x11BD] }, +{ source: [0xCEA7], NFC: [0xCEA7], NFD: [0x110F, 0x1162, 0x11BE], NFKC: [0xCEA7], NFKD: [0x110F, 0x1162, 0x11BE] }, +{ source: [0xCEA8], NFC: [0xCEA8], NFD: [0x110F, 0x1162, 0x11BF], NFKC: [0xCEA8], NFKD: [0x110F, 0x1162, 0x11BF] }, +{ source: [0xCEA9], NFC: [0xCEA9], NFD: [0x110F, 0x1162, 0x11C0], NFKC: [0xCEA9], NFKD: [0x110F, 0x1162, 0x11C0] }, +{ source: [0xCEAA], NFC: [0xCEAA], NFD: [0x110F, 0x1162, 0x11C1], NFKC: [0xCEAA], NFKD: [0x110F, 0x1162, 0x11C1] }, +{ source: [0xCEAB], NFC: [0xCEAB], NFD: [0x110F, 0x1162, 0x11C2], NFKC: [0xCEAB], NFKD: [0x110F, 0x1162, 0x11C2] }, +{ source: [0xCEAC], NFC: [0xCEAC], NFD: [0x110F, 0x1163], NFKC: [0xCEAC], NFKD: [0x110F, 0x1163] }, +{ source: [0xCEAD], NFC: [0xCEAD], NFD: [0x110F, 0x1163, 0x11A8], NFKC: [0xCEAD], NFKD: [0x110F, 0x1163, 0x11A8] }, +{ source: [0xCEAE], NFC: [0xCEAE], NFD: [0x110F, 0x1163, 0x11A9], NFKC: [0xCEAE], NFKD: [0x110F, 0x1163, 0x11A9] }, +{ source: [0xCEAF], NFC: [0xCEAF], NFD: [0x110F, 0x1163, 0x11AA], NFKC: [0xCEAF], NFKD: [0x110F, 0x1163, 0x11AA] }, +{ source: [0xCEB0], NFC: [0xCEB0], NFD: [0x110F, 0x1163, 0x11AB], NFKC: [0xCEB0], NFKD: [0x110F, 0x1163, 0x11AB] }, +{ source: [0xCEB1], NFC: [0xCEB1], NFD: [0x110F, 0x1163, 0x11AC], NFKC: [0xCEB1], NFKD: [0x110F, 0x1163, 0x11AC] }, +{ source: [0xCEB2], NFC: [0xCEB2], NFD: [0x110F, 0x1163, 0x11AD], NFKC: [0xCEB2], NFKD: [0x110F, 0x1163, 0x11AD] }, +{ source: [0xCEB3], NFC: [0xCEB3], NFD: [0x110F, 0x1163, 0x11AE], NFKC: [0xCEB3], NFKD: [0x110F, 0x1163, 0x11AE] }, +{ source: [0xCEB4], NFC: [0xCEB4], NFD: [0x110F, 0x1163, 0x11AF], NFKC: [0xCEB4], NFKD: [0x110F, 0x1163, 0x11AF] }, +{ source: [0xCEB5], NFC: [0xCEB5], NFD: [0x110F, 0x1163, 0x11B0], NFKC: [0xCEB5], NFKD: [0x110F, 0x1163, 0x11B0] }, +{ source: [0xCEB6], NFC: [0xCEB6], NFD: [0x110F, 0x1163, 0x11B1], NFKC: [0xCEB6], NFKD: [0x110F, 0x1163, 0x11B1] }, +{ source: [0xCEB7], NFC: [0xCEB7], NFD: [0x110F, 0x1163, 0x11B2], NFKC: [0xCEB7], NFKD: [0x110F, 0x1163, 0x11B2] }, +{ source: [0xCEB8], NFC: [0xCEB8], NFD: [0x110F, 0x1163, 0x11B3], NFKC: [0xCEB8], NFKD: [0x110F, 0x1163, 0x11B3] }, +{ source: [0xCEB9], NFC: [0xCEB9], NFD: [0x110F, 0x1163, 0x11B4], NFKC: [0xCEB9], NFKD: [0x110F, 0x1163, 0x11B4] }, +{ source: [0xCEBA], NFC: [0xCEBA], NFD: [0x110F, 0x1163, 0x11B5], NFKC: [0xCEBA], NFKD: [0x110F, 0x1163, 0x11B5] }, +{ source: [0xCEBB], NFC: [0xCEBB], NFD: [0x110F, 0x1163, 0x11B6], NFKC: [0xCEBB], NFKD: [0x110F, 0x1163, 0x11B6] }, +{ source: [0xCEBC], NFC: [0xCEBC], NFD: [0x110F, 0x1163, 0x11B7], NFKC: [0xCEBC], NFKD: [0x110F, 0x1163, 0x11B7] }, +{ source: [0xCEBD], NFC: [0xCEBD], NFD: [0x110F, 0x1163, 0x11B8], NFKC: [0xCEBD], NFKD: [0x110F, 0x1163, 0x11B8] }, +{ source: [0xCEBE], NFC: [0xCEBE], NFD: [0x110F, 0x1163, 0x11B9], NFKC: [0xCEBE], NFKD: [0x110F, 0x1163, 0x11B9] }, +{ source: [0xCEBF], NFC: [0xCEBF], NFD: [0x110F, 0x1163, 0x11BA], NFKC: [0xCEBF], NFKD: [0x110F, 0x1163, 0x11BA] }, +{ source: [0xCEC0], NFC: [0xCEC0], NFD: [0x110F, 0x1163, 0x11BB], NFKC: [0xCEC0], NFKD: [0x110F, 0x1163, 0x11BB] }, +{ source: [0xCEC1], NFC: [0xCEC1], NFD: [0x110F, 0x1163, 0x11BC], NFKC: [0xCEC1], NFKD: [0x110F, 0x1163, 0x11BC] }, +{ source: [0xCEC2], NFC: [0xCEC2], NFD: [0x110F, 0x1163, 0x11BD], NFKC: [0xCEC2], NFKD: [0x110F, 0x1163, 0x11BD] }, +{ source: [0xCEC3], NFC: [0xCEC3], NFD: [0x110F, 0x1163, 0x11BE], NFKC: [0xCEC3], NFKD: [0x110F, 0x1163, 0x11BE] }, +{ source: [0xCEC4], NFC: [0xCEC4], NFD: [0x110F, 0x1163, 0x11BF], NFKC: [0xCEC4], NFKD: [0x110F, 0x1163, 0x11BF] }, +{ source: [0xCEC5], NFC: [0xCEC5], NFD: [0x110F, 0x1163, 0x11C0], NFKC: [0xCEC5], NFKD: [0x110F, 0x1163, 0x11C0] }, +{ source: [0xCEC6], NFC: [0xCEC6], NFD: [0x110F, 0x1163, 0x11C1], NFKC: [0xCEC6], NFKD: [0x110F, 0x1163, 0x11C1] }, +{ source: [0xCEC7], NFC: [0xCEC7], NFD: [0x110F, 0x1163, 0x11C2], NFKC: [0xCEC7], NFKD: [0x110F, 0x1163, 0x11C2] }, +{ source: [0xCEC8], NFC: [0xCEC8], NFD: [0x110F, 0x1164], NFKC: [0xCEC8], NFKD: [0x110F, 0x1164] }, +{ source: [0xCEC9], NFC: [0xCEC9], NFD: [0x110F, 0x1164, 0x11A8], NFKC: [0xCEC9], NFKD: [0x110F, 0x1164, 0x11A8] }, +{ source: [0xCECA], NFC: [0xCECA], NFD: [0x110F, 0x1164, 0x11A9], NFKC: [0xCECA], NFKD: [0x110F, 0x1164, 0x11A9] }, +{ source: [0xCECB], NFC: [0xCECB], NFD: [0x110F, 0x1164, 0x11AA], NFKC: [0xCECB], NFKD: [0x110F, 0x1164, 0x11AA] }, +{ source: [0xCECC], NFC: [0xCECC], NFD: [0x110F, 0x1164, 0x11AB], NFKC: [0xCECC], NFKD: [0x110F, 0x1164, 0x11AB] }, +{ source: [0xCECD], NFC: [0xCECD], NFD: [0x110F, 0x1164, 0x11AC], NFKC: [0xCECD], NFKD: [0x110F, 0x1164, 0x11AC] }, +{ source: [0xCECE], NFC: [0xCECE], NFD: [0x110F, 0x1164, 0x11AD], NFKC: [0xCECE], NFKD: [0x110F, 0x1164, 0x11AD] }, +{ source: [0xCECF], NFC: [0xCECF], NFD: [0x110F, 0x1164, 0x11AE], NFKC: [0xCECF], NFKD: [0x110F, 0x1164, 0x11AE] }, +{ source: [0xCED0], NFC: [0xCED0], NFD: [0x110F, 0x1164, 0x11AF], NFKC: [0xCED0], NFKD: [0x110F, 0x1164, 0x11AF] }, +{ source: [0xCED1], NFC: [0xCED1], NFD: [0x110F, 0x1164, 0x11B0], NFKC: [0xCED1], NFKD: [0x110F, 0x1164, 0x11B0] }, +{ source: [0xCED2], NFC: [0xCED2], NFD: [0x110F, 0x1164, 0x11B1], NFKC: [0xCED2], NFKD: [0x110F, 0x1164, 0x11B1] }, +{ source: [0xCED3], NFC: [0xCED3], NFD: [0x110F, 0x1164, 0x11B2], NFKC: [0xCED3], NFKD: [0x110F, 0x1164, 0x11B2] }, +{ source: [0xCED4], NFC: [0xCED4], NFD: [0x110F, 0x1164, 0x11B3], NFKC: [0xCED4], NFKD: [0x110F, 0x1164, 0x11B3] }, +{ source: [0xCED5], NFC: [0xCED5], NFD: [0x110F, 0x1164, 0x11B4], NFKC: [0xCED5], NFKD: [0x110F, 0x1164, 0x11B4] }, +{ source: [0xCED6], NFC: [0xCED6], NFD: [0x110F, 0x1164, 0x11B5], NFKC: [0xCED6], NFKD: [0x110F, 0x1164, 0x11B5] }, +{ source: [0xCED7], NFC: [0xCED7], NFD: [0x110F, 0x1164, 0x11B6], NFKC: [0xCED7], NFKD: [0x110F, 0x1164, 0x11B6] }, +{ source: [0xCED8], NFC: [0xCED8], NFD: [0x110F, 0x1164, 0x11B7], NFKC: [0xCED8], NFKD: [0x110F, 0x1164, 0x11B7] }, +{ source: [0xCED9], NFC: [0xCED9], NFD: [0x110F, 0x1164, 0x11B8], NFKC: [0xCED9], NFKD: [0x110F, 0x1164, 0x11B8] }, +{ source: [0xCEDA], NFC: [0xCEDA], NFD: [0x110F, 0x1164, 0x11B9], NFKC: [0xCEDA], NFKD: [0x110F, 0x1164, 0x11B9] }, +{ source: [0xCEDB], NFC: [0xCEDB], NFD: [0x110F, 0x1164, 0x11BA], NFKC: [0xCEDB], NFKD: [0x110F, 0x1164, 0x11BA] }, +{ source: [0xCEDC], NFC: [0xCEDC], NFD: [0x110F, 0x1164, 0x11BB], NFKC: [0xCEDC], NFKD: [0x110F, 0x1164, 0x11BB] }, +{ source: [0xCEDD], NFC: [0xCEDD], NFD: [0x110F, 0x1164, 0x11BC], NFKC: [0xCEDD], NFKD: [0x110F, 0x1164, 0x11BC] }, +{ source: [0xCEDE], NFC: [0xCEDE], NFD: [0x110F, 0x1164, 0x11BD], NFKC: [0xCEDE], NFKD: [0x110F, 0x1164, 0x11BD] }, +{ source: [0xCEDF], NFC: [0xCEDF], NFD: [0x110F, 0x1164, 0x11BE], NFKC: [0xCEDF], NFKD: [0x110F, 0x1164, 0x11BE] }, +{ source: [0xCEE0], NFC: [0xCEE0], NFD: [0x110F, 0x1164, 0x11BF], NFKC: [0xCEE0], NFKD: [0x110F, 0x1164, 0x11BF] }, +{ source: [0xCEE1], NFC: [0xCEE1], NFD: [0x110F, 0x1164, 0x11C0], NFKC: [0xCEE1], NFKD: [0x110F, 0x1164, 0x11C0] }, +{ source: [0xCEE2], NFC: [0xCEE2], NFD: [0x110F, 0x1164, 0x11C1], NFKC: [0xCEE2], NFKD: [0x110F, 0x1164, 0x11C1] }, +{ source: [0xCEE3], NFC: [0xCEE3], NFD: [0x110F, 0x1164, 0x11C2], NFKC: [0xCEE3], NFKD: [0x110F, 0x1164, 0x11C2] }, +{ source: [0xCEE4], NFC: [0xCEE4], NFD: [0x110F, 0x1165], NFKC: [0xCEE4], NFKD: [0x110F, 0x1165] }, +{ source: [0xCEE5], NFC: [0xCEE5], NFD: [0x110F, 0x1165, 0x11A8], NFKC: [0xCEE5], NFKD: [0x110F, 0x1165, 0x11A8] }, +{ source: [0xCEE6], NFC: [0xCEE6], NFD: [0x110F, 0x1165, 0x11A9], NFKC: [0xCEE6], NFKD: [0x110F, 0x1165, 0x11A9] }, +{ source: [0xCEE7], NFC: [0xCEE7], NFD: [0x110F, 0x1165, 0x11AA], NFKC: [0xCEE7], NFKD: [0x110F, 0x1165, 0x11AA] }, +{ source: [0xCEE8], NFC: [0xCEE8], NFD: [0x110F, 0x1165, 0x11AB], NFKC: [0xCEE8], NFKD: [0x110F, 0x1165, 0x11AB] }, +{ source: [0xCEE9], NFC: [0xCEE9], NFD: [0x110F, 0x1165, 0x11AC], NFKC: [0xCEE9], NFKD: [0x110F, 0x1165, 0x11AC] }, +{ source: [0xCEEA], NFC: [0xCEEA], NFD: [0x110F, 0x1165, 0x11AD], NFKC: [0xCEEA], NFKD: [0x110F, 0x1165, 0x11AD] }, +{ source: [0xCEEB], NFC: [0xCEEB], NFD: [0x110F, 0x1165, 0x11AE], NFKC: [0xCEEB], NFKD: [0x110F, 0x1165, 0x11AE] }, +{ source: [0xCEEC], NFC: [0xCEEC], NFD: [0x110F, 0x1165, 0x11AF], NFKC: [0xCEEC], NFKD: [0x110F, 0x1165, 0x11AF] }, +{ source: [0xCEED], NFC: [0xCEED], NFD: [0x110F, 0x1165, 0x11B0], NFKC: [0xCEED], NFKD: [0x110F, 0x1165, 0x11B0] }, +{ source: [0xCEEE], NFC: [0xCEEE], NFD: [0x110F, 0x1165, 0x11B1], NFKC: [0xCEEE], NFKD: [0x110F, 0x1165, 0x11B1] }, +{ source: [0xCEEF], NFC: [0xCEEF], NFD: [0x110F, 0x1165, 0x11B2], NFKC: [0xCEEF], NFKD: [0x110F, 0x1165, 0x11B2] }, +{ source: [0xCEF0], NFC: [0xCEF0], NFD: [0x110F, 0x1165, 0x11B3], NFKC: [0xCEF0], NFKD: [0x110F, 0x1165, 0x11B3] }, +{ source: [0xCEF1], NFC: [0xCEF1], NFD: [0x110F, 0x1165, 0x11B4], NFKC: [0xCEF1], NFKD: [0x110F, 0x1165, 0x11B4] }, +{ source: [0xCEF2], NFC: [0xCEF2], NFD: [0x110F, 0x1165, 0x11B5], NFKC: [0xCEF2], NFKD: [0x110F, 0x1165, 0x11B5] }, +{ source: [0xCEF3], NFC: [0xCEF3], NFD: [0x110F, 0x1165, 0x11B6], NFKC: [0xCEF3], NFKD: [0x110F, 0x1165, 0x11B6] }, +{ source: [0xCEF4], NFC: [0xCEF4], NFD: [0x110F, 0x1165, 0x11B7], NFKC: [0xCEF4], NFKD: [0x110F, 0x1165, 0x11B7] }, +{ source: [0xCEF5], NFC: [0xCEF5], NFD: [0x110F, 0x1165, 0x11B8], NFKC: [0xCEF5], NFKD: [0x110F, 0x1165, 0x11B8] }, +{ source: [0xCEF6], NFC: [0xCEF6], NFD: [0x110F, 0x1165, 0x11B9], NFKC: [0xCEF6], NFKD: [0x110F, 0x1165, 0x11B9] }, +{ source: [0xCEF7], NFC: [0xCEF7], NFD: [0x110F, 0x1165, 0x11BA], NFKC: [0xCEF7], NFKD: [0x110F, 0x1165, 0x11BA] }, +{ source: [0xCEF8], NFC: [0xCEF8], NFD: [0x110F, 0x1165, 0x11BB], NFKC: [0xCEF8], NFKD: [0x110F, 0x1165, 0x11BB] }, +{ source: [0xCEF9], NFC: [0xCEF9], NFD: [0x110F, 0x1165, 0x11BC], NFKC: [0xCEF9], NFKD: [0x110F, 0x1165, 0x11BC] }, +{ source: [0xCEFA], NFC: [0xCEFA], NFD: [0x110F, 0x1165, 0x11BD], NFKC: [0xCEFA], NFKD: [0x110F, 0x1165, 0x11BD] }, +{ source: [0xCEFB], NFC: [0xCEFB], NFD: [0x110F, 0x1165, 0x11BE], NFKC: [0xCEFB], NFKD: [0x110F, 0x1165, 0x11BE] }, +{ source: [0xCEFC], NFC: [0xCEFC], NFD: [0x110F, 0x1165, 0x11BF], NFKC: [0xCEFC], NFKD: [0x110F, 0x1165, 0x11BF] }, +{ source: [0xCEFD], NFC: [0xCEFD], NFD: [0x110F, 0x1165, 0x11C0], NFKC: [0xCEFD], NFKD: [0x110F, 0x1165, 0x11C0] }, +{ source: [0xCEFE], NFC: [0xCEFE], NFD: [0x110F, 0x1165, 0x11C1], NFKC: [0xCEFE], NFKD: [0x110F, 0x1165, 0x11C1] }, +{ source: [0xCEFF], NFC: [0xCEFF], NFD: [0x110F, 0x1165, 0x11C2], NFKC: [0xCEFF], NFKD: [0x110F, 0x1165, 0x11C2] }, +{ source: [0xCF00], NFC: [0xCF00], NFD: [0x110F, 0x1166], NFKC: [0xCF00], NFKD: [0x110F, 0x1166] }, +{ source: [0xCF01], NFC: [0xCF01], NFD: [0x110F, 0x1166, 0x11A8], NFKC: [0xCF01], NFKD: [0x110F, 0x1166, 0x11A8] }, +{ source: [0xCF02], NFC: [0xCF02], NFD: [0x110F, 0x1166, 0x11A9], NFKC: [0xCF02], NFKD: [0x110F, 0x1166, 0x11A9] }, +{ source: [0xCF03], NFC: [0xCF03], NFD: [0x110F, 0x1166, 0x11AA], NFKC: [0xCF03], NFKD: [0x110F, 0x1166, 0x11AA] }, +{ source: [0xCF04], NFC: [0xCF04], NFD: [0x110F, 0x1166, 0x11AB], NFKC: [0xCF04], NFKD: [0x110F, 0x1166, 0x11AB] }, +{ source: [0xCF05], NFC: [0xCF05], NFD: [0x110F, 0x1166, 0x11AC], NFKC: [0xCF05], NFKD: [0x110F, 0x1166, 0x11AC] }, +{ source: [0xCF06], NFC: [0xCF06], NFD: [0x110F, 0x1166, 0x11AD], NFKC: [0xCF06], NFKD: [0x110F, 0x1166, 0x11AD] }, +{ source: [0xCF07], NFC: [0xCF07], NFD: [0x110F, 0x1166, 0x11AE], NFKC: [0xCF07], NFKD: [0x110F, 0x1166, 0x11AE] }, +{ source: [0xCF08], NFC: [0xCF08], NFD: [0x110F, 0x1166, 0x11AF], NFKC: [0xCF08], NFKD: [0x110F, 0x1166, 0x11AF] }, +{ source: [0xCF09], NFC: [0xCF09], NFD: [0x110F, 0x1166, 0x11B0], NFKC: [0xCF09], NFKD: [0x110F, 0x1166, 0x11B0] }, +{ source: [0xCF0A], NFC: [0xCF0A], NFD: [0x110F, 0x1166, 0x11B1], NFKC: [0xCF0A], NFKD: [0x110F, 0x1166, 0x11B1] }, +{ source: [0xCF0B], NFC: [0xCF0B], NFD: [0x110F, 0x1166, 0x11B2], NFKC: [0xCF0B], NFKD: [0x110F, 0x1166, 0x11B2] }, +{ source: [0xCF0C], NFC: [0xCF0C], NFD: [0x110F, 0x1166, 0x11B3], NFKC: [0xCF0C], NFKD: [0x110F, 0x1166, 0x11B3] }, +{ source: [0xCF0D], NFC: [0xCF0D], NFD: [0x110F, 0x1166, 0x11B4], NFKC: [0xCF0D], NFKD: [0x110F, 0x1166, 0x11B4] }, +{ source: [0xCF0E], NFC: [0xCF0E], NFD: [0x110F, 0x1166, 0x11B5], NFKC: [0xCF0E], NFKD: [0x110F, 0x1166, 0x11B5] }, +{ source: [0xCF0F], NFC: [0xCF0F], NFD: [0x110F, 0x1166, 0x11B6], NFKC: [0xCF0F], NFKD: [0x110F, 0x1166, 0x11B6] }, +{ source: [0xCF10], NFC: [0xCF10], NFD: [0x110F, 0x1166, 0x11B7], NFKC: [0xCF10], NFKD: [0x110F, 0x1166, 0x11B7] }, +{ source: [0xCF11], NFC: [0xCF11], NFD: [0x110F, 0x1166, 0x11B8], NFKC: [0xCF11], NFKD: [0x110F, 0x1166, 0x11B8] }, +{ source: [0xCF12], NFC: [0xCF12], NFD: [0x110F, 0x1166, 0x11B9], NFKC: [0xCF12], NFKD: [0x110F, 0x1166, 0x11B9] }, +{ source: [0xCF13], NFC: [0xCF13], NFD: [0x110F, 0x1166, 0x11BA], NFKC: [0xCF13], NFKD: [0x110F, 0x1166, 0x11BA] }, +{ source: [0xCF14], NFC: [0xCF14], NFD: [0x110F, 0x1166, 0x11BB], NFKC: [0xCF14], NFKD: [0x110F, 0x1166, 0x11BB] }, +{ source: [0xCF15], NFC: [0xCF15], NFD: [0x110F, 0x1166, 0x11BC], NFKC: [0xCF15], NFKD: [0x110F, 0x1166, 0x11BC] }, +{ source: [0xCF16], NFC: [0xCF16], NFD: [0x110F, 0x1166, 0x11BD], NFKC: [0xCF16], NFKD: [0x110F, 0x1166, 0x11BD] }, +{ source: [0xCF17], NFC: [0xCF17], NFD: [0x110F, 0x1166, 0x11BE], NFKC: [0xCF17], NFKD: [0x110F, 0x1166, 0x11BE] }, +{ source: [0xCF18], NFC: [0xCF18], NFD: [0x110F, 0x1166, 0x11BF], NFKC: [0xCF18], NFKD: [0x110F, 0x1166, 0x11BF] }, +{ source: [0xCF19], NFC: [0xCF19], NFD: [0x110F, 0x1166, 0x11C0], NFKC: [0xCF19], NFKD: [0x110F, 0x1166, 0x11C0] }, +{ source: [0xCF1A], NFC: [0xCF1A], NFD: [0x110F, 0x1166, 0x11C1], NFKC: [0xCF1A], NFKD: [0x110F, 0x1166, 0x11C1] }, +{ source: [0xCF1B], NFC: [0xCF1B], NFD: [0x110F, 0x1166, 0x11C2], NFKC: [0xCF1B], NFKD: [0x110F, 0x1166, 0x11C2] }, +{ source: [0xCF1C], NFC: [0xCF1C], NFD: [0x110F, 0x1167], NFKC: [0xCF1C], NFKD: [0x110F, 0x1167] }, +{ source: [0xCF1D], NFC: [0xCF1D], NFD: [0x110F, 0x1167, 0x11A8], NFKC: [0xCF1D], NFKD: [0x110F, 0x1167, 0x11A8] }, +{ source: [0xCF1E], NFC: [0xCF1E], NFD: [0x110F, 0x1167, 0x11A9], NFKC: [0xCF1E], NFKD: [0x110F, 0x1167, 0x11A9] }, +{ source: [0xCF1F], NFC: [0xCF1F], NFD: [0x110F, 0x1167, 0x11AA], NFKC: [0xCF1F], NFKD: [0x110F, 0x1167, 0x11AA] }, +{ source: [0xCF20], NFC: [0xCF20], NFD: [0x110F, 0x1167, 0x11AB], NFKC: [0xCF20], NFKD: [0x110F, 0x1167, 0x11AB] }, +{ source: [0xCF21], NFC: [0xCF21], NFD: [0x110F, 0x1167, 0x11AC], NFKC: [0xCF21], NFKD: [0x110F, 0x1167, 0x11AC] }, +{ source: [0xCF22], NFC: [0xCF22], NFD: [0x110F, 0x1167, 0x11AD], NFKC: [0xCF22], NFKD: [0x110F, 0x1167, 0x11AD] }, +{ source: [0xCF23], NFC: [0xCF23], NFD: [0x110F, 0x1167, 0x11AE], NFKC: [0xCF23], NFKD: [0x110F, 0x1167, 0x11AE] }, +{ source: [0xCF24], NFC: [0xCF24], NFD: [0x110F, 0x1167, 0x11AF], NFKC: [0xCF24], NFKD: [0x110F, 0x1167, 0x11AF] }, +{ source: [0xCF25], NFC: [0xCF25], NFD: [0x110F, 0x1167, 0x11B0], NFKC: [0xCF25], NFKD: [0x110F, 0x1167, 0x11B0] }, +{ source: [0xCF26], NFC: [0xCF26], NFD: [0x110F, 0x1167, 0x11B1], NFKC: [0xCF26], NFKD: [0x110F, 0x1167, 0x11B1] }, +{ source: [0xCF27], NFC: [0xCF27], NFD: [0x110F, 0x1167, 0x11B2], NFKC: [0xCF27], NFKD: [0x110F, 0x1167, 0x11B2] }, +{ source: [0xCF28], NFC: [0xCF28], NFD: [0x110F, 0x1167, 0x11B3], NFKC: [0xCF28], NFKD: [0x110F, 0x1167, 0x11B3] }, +{ source: [0xCF29], NFC: [0xCF29], NFD: [0x110F, 0x1167, 0x11B4], NFKC: [0xCF29], NFKD: [0x110F, 0x1167, 0x11B4] }, +{ source: [0xCF2A], NFC: [0xCF2A], NFD: [0x110F, 0x1167, 0x11B5], NFKC: [0xCF2A], NFKD: [0x110F, 0x1167, 0x11B5] }, +{ source: [0xCF2B], NFC: [0xCF2B], NFD: [0x110F, 0x1167, 0x11B6], NFKC: [0xCF2B], NFKD: [0x110F, 0x1167, 0x11B6] }, +{ source: [0xCF2C], NFC: [0xCF2C], NFD: [0x110F, 0x1167, 0x11B7], NFKC: [0xCF2C], NFKD: [0x110F, 0x1167, 0x11B7] }, +{ source: [0xCF2D], NFC: [0xCF2D], NFD: [0x110F, 0x1167, 0x11B8], NFKC: [0xCF2D], NFKD: [0x110F, 0x1167, 0x11B8] }, +{ source: [0xCF2E], NFC: [0xCF2E], NFD: [0x110F, 0x1167, 0x11B9], NFKC: [0xCF2E], NFKD: [0x110F, 0x1167, 0x11B9] }, +{ source: [0xCF2F], NFC: [0xCF2F], NFD: [0x110F, 0x1167, 0x11BA], NFKC: [0xCF2F], NFKD: [0x110F, 0x1167, 0x11BA] }, +{ source: [0xCF30], NFC: [0xCF30], NFD: [0x110F, 0x1167, 0x11BB], NFKC: [0xCF30], NFKD: [0x110F, 0x1167, 0x11BB] }, +{ source: [0xCF31], NFC: [0xCF31], NFD: [0x110F, 0x1167, 0x11BC], NFKC: [0xCF31], NFKD: [0x110F, 0x1167, 0x11BC] }, +{ source: [0xCF32], NFC: [0xCF32], NFD: [0x110F, 0x1167, 0x11BD], NFKC: [0xCF32], NFKD: [0x110F, 0x1167, 0x11BD] }, +{ source: [0xCF33], NFC: [0xCF33], NFD: [0x110F, 0x1167, 0x11BE], NFKC: [0xCF33], NFKD: [0x110F, 0x1167, 0x11BE] }, +{ source: [0xCF34], NFC: [0xCF34], NFD: [0x110F, 0x1167, 0x11BF], NFKC: [0xCF34], NFKD: [0x110F, 0x1167, 0x11BF] }, +{ source: [0xCF35], NFC: [0xCF35], NFD: [0x110F, 0x1167, 0x11C0], NFKC: [0xCF35], NFKD: [0x110F, 0x1167, 0x11C0] }, +{ source: [0xCF36], NFC: [0xCF36], NFD: [0x110F, 0x1167, 0x11C1], NFKC: [0xCF36], NFKD: [0x110F, 0x1167, 0x11C1] }, +{ source: [0xCF37], NFC: [0xCF37], NFD: [0x110F, 0x1167, 0x11C2], NFKC: [0xCF37], NFKD: [0x110F, 0x1167, 0x11C2] }, +{ source: [0xCF38], NFC: [0xCF38], NFD: [0x110F, 0x1168], NFKC: [0xCF38], NFKD: [0x110F, 0x1168] }, +{ source: [0xCF39], NFC: [0xCF39], NFD: [0x110F, 0x1168, 0x11A8], NFKC: [0xCF39], NFKD: [0x110F, 0x1168, 0x11A8] }, +{ source: [0xCF3A], NFC: [0xCF3A], NFD: [0x110F, 0x1168, 0x11A9], NFKC: [0xCF3A], NFKD: [0x110F, 0x1168, 0x11A9] }, +{ source: [0xCF3B], NFC: [0xCF3B], NFD: [0x110F, 0x1168, 0x11AA], NFKC: [0xCF3B], NFKD: [0x110F, 0x1168, 0x11AA] }, +{ source: [0xCF3C], NFC: [0xCF3C], NFD: [0x110F, 0x1168, 0x11AB], NFKC: [0xCF3C], NFKD: [0x110F, 0x1168, 0x11AB] }, +{ source: [0xCF3D], NFC: [0xCF3D], NFD: [0x110F, 0x1168, 0x11AC], NFKC: [0xCF3D], NFKD: [0x110F, 0x1168, 0x11AC] }, +{ source: [0xCF3E], NFC: [0xCF3E], NFD: [0x110F, 0x1168, 0x11AD], NFKC: [0xCF3E], NFKD: [0x110F, 0x1168, 0x11AD] }, +{ source: [0xCF3F], NFC: [0xCF3F], NFD: [0x110F, 0x1168, 0x11AE], NFKC: [0xCF3F], NFKD: [0x110F, 0x1168, 0x11AE] }, +{ source: [0xCF40], NFC: [0xCF40], NFD: [0x110F, 0x1168, 0x11AF], NFKC: [0xCF40], NFKD: [0x110F, 0x1168, 0x11AF] }, +{ source: [0xCF41], NFC: [0xCF41], NFD: [0x110F, 0x1168, 0x11B0], NFKC: [0xCF41], NFKD: [0x110F, 0x1168, 0x11B0] }, +{ source: [0xCF42], NFC: [0xCF42], NFD: [0x110F, 0x1168, 0x11B1], NFKC: [0xCF42], NFKD: [0x110F, 0x1168, 0x11B1] }, +{ source: [0xCF43], NFC: [0xCF43], NFD: [0x110F, 0x1168, 0x11B2], NFKC: [0xCF43], NFKD: [0x110F, 0x1168, 0x11B2] }, +{ source: [0xCF44], NFC: [0xCF44], NFD: [0x110F, 0x1168, 0x11B3], NFKC: [0xCF44], NFKD: [0x110F, 0x1168, 0x11B3] }, +{ source: [0xCF45], NFC: [0xCF45], NFD: [0x110F, 0x1168, 0x11B4], NFKC: [0xCF45], NFKD: [0x110F, 0x1168, 0x11B4] }, +{ source: [0xCF46], NFC: [0xCF46], NFD: [0x110F, 0x1168, 0x11B5], NFKC: [0xCF46], NFKD: [0x110F, 0x1168, 0x11B5] }, +{ source: [0xCF47], NFC: [0xCF47], NFD: [0x110F, 0x1168, 0x11B6], NFKC: [0xCF47], NFKD: [0x110F, 0x1168, 0x11B6] }, +{ source: [0xCF48], NFC: [0xCF48], NFD: [0x110F, 0x1168, 0x11B7], NFKC: [0xCF48], NFKD: [0x110F, 0x1168, 0x11B7] }, +{ source: [0xCF49], NFC: [0xCF49], NFD: [0x110F, 0x1168, 0x11B8], NFKC: [0xCF49], NFKD: [0x110F, 0x1168, 0x11B8] }, +{ source: [0xCF4A], NFC: [0xCF4A], NFD: [0x110F, 0x1168, 0x11B9], NFKC: [0xCF4A], NFKD: [0x110F, 0x1168, 0x11B9] }, +{ source: [0xCF4B], NFC: [0xCF4B], NFD: [0x110F, 0x1168, 0x11BA], NFKC: [0xCF4B], NFKD: [0x110F, 0x1168, 0x11BA] }, +{ source: [0xCF4C], NFC: [0xCF4C], NFD: [0x110F, 0x1168, 0x11BB], NFKC: [0xCF4C], NFKD: [0x110F, 0x1168, 0x11BB] }, +{ source: [0xCF4D], NFC: [0xCF4D], NFD: [0x110F, 0x1168, 0x11BC], NFKC: [0xCF4D], NFKD: [0x110F, 0x1168, 0x11BC] }, +{ source: [0xCF4E], NFC: [0xCF4E], NFD: [0x110F, 0x1168, 0x11BD], NFKC: [0xCF4E], NFKD: [0x110F, 0x1168, 0x11BD] }, +{ source: [0xCF4F], NFC: [0xCF4F], NFD: [0x110F, 0x1168, 0x11BE], NFKC: [0xCF4F], NFKD: [0x110F, 0x1168, 0x11BE] }, +{ source: [0xCF50], NFC: [0xCF50], NFD: [0x110F, 0x1168, 0x11BF], NFKC: [0xCF50], NFKD: [0x110F, 0x1168, 0x11BF] }, +{ source: [0xCF51], NFC: [0xCF51], NFD: [0x110F, 0x1168, 0x11C0], NFKC: [0xCF51], NFKD: [0x110F, 0x1168, 0x11C0] }, +{ source: [0xCF52], NFC: [0xCF52], NFD: [0x110F, 0x1168, 0x11C1], NFKC: [0xCF52], NFKD: [0x110F, 0x1168, 0x11C1] }, +{ source: [0xCF53], NFC: [0xCF53], NFD: [0x110F, 0x1168, 0x11C2], NFKC: [0xCF53], NFKD: [0x110F, 0x1168, 0x11C2] }, +{ source: [0xCF54], NFC: [0xCF54], NFD: [0x110F, 0x1169], NFKC: [0xCF54], NFKD: [0x110F, 0x1169] }, +{ source: [0xCF55], NFC: [0xCF55], NFD: [0x110F, 0x1169, 0x11A8], NFKC: [0xCF55], NFKD: [0x110F, 0x1169, 0x11A8] }, +{ source: [0xCF56], NFC: [0xCF56], NFD: [0x110F, 0x1169, 0x11A9], NFKC: [0xCF56], NFKD: [0x110F, 0x1169, 0x11A9] }, +{ source: [0xCF57], NFC: [0xCF57], NFD: [0x110F, 0x1169, 0x11AA], NFKC: [0xCF57], NFKD: [0x110F, 0x1169, 0x11AA] }, +{ source: [0xCF58], NFC: [0xCF58], NFD: [0x110F, 0x1169, 0x11AB], NFKC: [0xCF58], NFKD: [0x110F, 0x1169, 0x11AB] }, +{ source: [0xCF59], NFC: [0xCF59], NFD: [0x110F, 0x1169, 0x11AC], NFKC: [0xCF59], NFKD: [0x110F, 0x1169, 0x11AC] }, +{ source: [0xCF5A], NFC: [0xCF5A], NFD: [0x110F, 0x1169, 0x11AD], NFKC: [0xCF5A], NFKD: [0x110F, 0x1169, 0x11AD] }, +{ source: [0xCF5B], NFC: [0xCF5B], NFD: [0x110F, 0x1169, 0x11AE], NFKC: [0xCF5B], NFKD: [0x110F, 0x1169, 0x11AE] }, +{ source: [0xCF5C], NFC: [0xCF5C], NFD: [0x110F, 0x1169, 0x11AF], NFKC: [0xCF5C], NFKD: [0x110F, 0x1169, 0x11AF] }, +{ source: [0xCF5D], NFC: [0xCF5D], NFD: [0x110F, 0x1169, 0x11B0], NFKC: [0xCF5D], NFKD: [0x110F, 0x1169, 0x11B0] }, +{ source: [0xCF5E], NFC: [0xCF5E], NFD: [0x110F, 0x1169, 0x11B1], NFKC: [0xCF5E], NFKD: [0x110F, 0x1169, 0x11B1] }, +{ source: [0xCF5F], NFC: [0xCF5F], NFD: [0x110F, 0x1169, 0x11B2], NFKC: [0xCF5F], NFKD: [0x110F, 0x1169, 0x11B2] }, +{ source: [0xCF60], NFC: [0xCF60], NFD: [0x110F, 0x1169, 0x11B3], NFKC: [0xCF60], NFKD: [0x110F, 0x1169, 0x11B3] }, +{ source: [0xCF61], NFC: [0xCF61], NFD: [0x110F, 0x1169, 0x11B4], NFKC: [0xCF61], NFKD: [0x110F, 0x1169, 0x11B4] }, +{ source: [0xCF62], NFC: [0xCF62], NFD: [0x110F, 0x1169, 0x11B5], NFKC: [0xCF62], NFKD: [0x110F, 0x1169, 0x11B5] }, +{ source: [0xCF63], NFC: [0xCF63], NFD: [0x110F, 0x1169, 0x11B6], NFKC: [0xCF63], NFKD: [0x110F, 0x1169, 0x11B6] }, +{ source: [0xCF64], NFC: [0xCF64], NFD: [0x110F, 0x1169, 0x11B7], NFKC: [0xCF64], NFKD: [0x110F, 0x1169, 0x11B7] }, +{ source: [0xCF65], NFC: [0xCF65], NFD: [0x110F, 0x1169, 0x11B8], NFKC: [0xCF65], NFKD: [0x110F, 0x1169, 0x11B8] }, +{ source: [0xCF66], NFC: [0xCF66], NFD: [0x110F, 0x1169, 0x11B9], NFKC: [0xCF66], NFKD: [0x110F, 0x1169, 0x11B9] }, +{ source: [0xCF67], NFC: [0xCF67], NFD: [0x110F, 0x1169, 0x11BA], NFKC: [0xCF67], NFKD: [0x110F, 0x1169, 0x11BA] }, +{ source: [0xCF68], NFC: [0xCF68], NFD: [0x110F, 0x1169, 0x11BB], NFKC: [0xCF68], NFKD: [0x110F, 0x1169, 0x11BB] }, +{ source: [0xCF69], NFC: [0xCF69], NFD: [0x110F, 0x1169, 0x11BC], NFKC: [0xCF69], NFKD: [0x110F, 0x1169, 0x11BC] }, +{ source: [0xCF6A], NFC: [0xCF6A], NFD: [0x110F, 0x1169, 0x11BD], NFKC: [0xCF6A], NFKD: [0x110F, 0x1169, 0x11BD] }, +{ source: [0xCF6B], NFC: [0xCF6B], NFD: [0x110F, 0x1169, 0x11BE], NFKC: [0xCF6B], NFKD: [0x110F, 0x1169, 0x11BE] }, +{ source: [0xCF6C], NFC: [0xCF6C], NFD: [0x110F, 0x1169, 0x11BF], NFKC: [0xCF6C], NFKD: [0x110F, 0x1169, 0x11BF] }, +{ source: [0xCF6D], NFC: [0xCF6D], NFD: [0x110F, 0x1169, 0x11C0], NFKC: [0xCF6D], NFKD: [0x110F, 0x1169, 0x11C0] }, +{ source: [0xCF6E], NFC: [0xCF6E], NFD: [0x110F, 0x1169, 0x11C1], NFKC: [0xCF6E], NFKD: [0x110F, 0x1169, 0x11C1] }, +{ source: [0xCF6F], NFC: [0xCF6F], NFD: [0x110F, 0x1169, 0x11C2], NFKC: [0xCF6F], NFKD: [0x110F, 0x1169, 0x11C2] }, +{ source: [0xCF70], NFC: [0xCF70], NFD: [0x110F, 0x116A], NFKC: [0xCF70], NFKD: [0x110F, 0x116A] }, +{ source: [0xCF71], NFC: [0xCF71], NFD: [0x110F, 0x116A, 0x11A8], NFKC: [0xCF71], NFKD: [0x110F, 0x116A, 0x11A8] }, +{ source: [0xCF72], NFC: [0xCF72], NFD: [0x110F, 0x116A, 0x11A9], NFKC: [0xCF72], NFKD: [0x110F, 0x116A, 0x11A9] }, +{ source: [0xCF73], NFC: [0xCF73], NFD: [0x110F, 0x116A, 0x11AA], NFKC: [0xCF73], NFKD: [0x110F, 0x116A, 0x11AA] }, +{ source: [0xCF74], NFC: [0xCF74], NFD: [0x110F, 0x116A, 0x11AB], NFKC: [0xCF74], NFKD: [0x110F, 0x116A, 0x11AB] }, +{ source: [0xCF75], NFC: [0xCF75], NFD: [0x110F, 0x116A, 0x11AC], NFKC: [0xCF75], NFKD: [0x110F, 0x116A, 0x11AC] }, +{ source: [0xCF76], NFC: [0xCF76], NFD: [0x110F, 0x116A, 0x11AD], NFKC: [0xCF76], NFKD: [0x110F, 0x116A, 0x11AD] }, +{ source: [0xCF77], NFC: [0xCF77], NFD: [0x110F, 0x116A, 0x11AE], NFKC: [0xCF77], NFKD: [0x110F, 0x116A, 0x11AE] }, +{ source: [0xCF78], NFC: [0xCF78], NFD: [0x110F, 0x116A, 0x11AF], NFKC: [0xCF78], NFKD: [0x110F, 0x116A, 0x11AF] }, +{ source: [0xCF79], NFC: [0xCF79], NFD: [0x110F, 0x116A, 0x11B0], NFKC: [0xCF79], NFKD: [0x110F, 0x116A, 0x11B0] }, +{ source: [0xCF7A], NFC: [0xCF7A], NFD: [0x110F, 0x116A, 0x11B1], NFKC: [0xCF7A], NFKD: [0x110F, 0x116A, 0x11B1] }, +{ source: [0xCF7B], NFC: [0xCF7B], NFD: [0x110F, 0x116A, 0x11B2], NFKC: [0xCF7B], NFKD: [0x110F, 0x116A, 0x11B2] }, +{ source: [0xCF7C], NFC: [0xCF7C], NFD: [0x110F, 0x116A, 0x11B3], NFKC: [0xCF7C], NFKD: [0x110F, 0x116A, 0x11B3] }, +{ source: [0xCF7D], NFC: [0xCF7D], NFD: [0x110F, 0x116A, 0x11B4], NFKC: [0xCF7D], NFKD: [0x110F, 0x116A, 0x11B4] }, +{ source: [0xCF7E], NFC: [0xCF7E], NFD: [0x110F, 0x116A, 0x11B5], NFKC: [0xCF7E], NFKD: [0x110F, 0x116A, 0x11B5] }, +{ source: [0xCF7F], NFC: [0xCF7F], NFD: [0x110F, 0x116A, 0x11B6], NFKC: [0xCF7F], NFKD: [0x110F, 0x116A, 0x11B6] }, +{ source: [0xCF80], NFC: [0xCF80], NFD: [0x110F, 0x116A, 0x11B7], NFKC: [0xCF80], NFKD: [0x110F, 0x116A, 0x11B7] }, +{ source: [0xCF81], NFC: [0xCF81], NFD: [0x110F, 0x116A, 0x11B8], NFKC: [0xCF81], NFKD: [0x110F, 0x116A, 0x11B8] }, +{ source: [0xCF82], NFC: [0xCF82], NFD: [0x110F, 0x116A, 0x11B9], NFKC: [0xCF82], NFKD: [0x110F, 0x116A, 0x11B9] }, +{ source: [0xCF83], NFC: [0xCF83], NFD: [0x110F, 0x116A, 0x11BA], NFKC: [0xCF83], NFKD: [0x110F, 0x116A, 0x11BA] }, +{ source: [0xCF84], NFC: [0xCF84], NFD: [0x110F, 0x116A, 0x11BB], NFKC: [0xCF84], NFKD: [0x110F, 0x116A, 0x11BB] }, +{ source: [0xCF85], NFC: [0xCF85], NFD: [0x110F, 0x116A, 0x11BC], NFKC: [0xCF85], NFKD: [0x110F, 0x116A, 0x11BC] }, +{ source: [0xCF86], NFC: [0xCF86], NFD: [0x110F, 0x116A, 0x11BD], NFKC: [0xCF86], NFKD: [0x110F, 0x116A, 0x11BD] }, +{ source: [0xCF87], NFC: [0xCF87], NFD: [0x110F, 0x116A, 0x11BE], NFKC: [0xCF87], NFKD: [0x110F, 0x116A, 0x11BE] }, +{ source: [0xCF88], NFC: [0xCF88], NFD: [0x110F, 0x116A, 0x11BF], NFKC: [0xCF88], NFKD: [0x110F, 0x116A, 0x11BF] }, +{ source: [0xCF89], NFC: [0xCF89], NFD: [0x110F, 0x116A, 0x11C0], NFKC: [0xCF89], NFKD: [0x110F, 0x116A, 0x11C0] }, +{ source: [0xCF8A], NFC: [0xCF8A], NFD: [0x110F, 0x116A, 0x11C1], NFKC: [0xCF8A], NFKD: [0x110F, 0x116A, 0x11C1] }, +{ source: [0xCF8B], NFC: [0xCF8B], NFD: [0x110F, 0x116A, 0x11C2], NFKC: [0xCF8B], NFKD: [0x110F, 0x116A, 0x11C2] }, +{ source: [0xCF8C], NFC: [0xCF8C], NFD: [0x110F, 0x116B], NFKC: [0xCF8C], NFKD: [0x110F, 0x116B] }, +{ source: [0xCF8D], NFC: [0xCF8D], NFD: [0x110F, 0x116B, 0x11A8], NFKC: [0xCF8D], NFKD: [0x110F, 0x116B, 0x11A8] }, +{ source: [0xCF8E], NFC: [0xCF8E], NFD: [0x110F, 0x116B, 0x11A9], NFKC: [0xCF8E], NFKD: [0x110F, 0x116B, 0x11A9] }, +{ source: [0xCF8F], NFC: [0xCF8F], NFD: [0x110F, 0x116B, 0x11AA], NFKC: [0xCF8F], NFKD: [0x110F, 0x116B, 0x11AA] }, +{ source: [0xCF90], NFC: [0xCF90], NFD: [0x110F, 0x116B, 0x11AB], NFKC: [0xCF90], NFKD: [0x110F, 0x116B, 0x11AB] }, +{ source: [0xCF91], NFC: [0xCF91], NFD: [0x110F, 0x116B, 0x11AC], NFKC: [0xCF91], NFKD: [0x110F, 0x116B, 0x11AC] }, +{ source: [0xCF92], NFC: [0xCF92], NFD: [0x110F, 0x116B, 0x11AD], NFKC: [0xCF92], NFKD: [0x110F, 0x116B, 0x11AD] }, +{ source: [0xCF93], NFC: [0xCF93], NFD: [0x110F, 0x116B, 0x11AE], NFKC: [0xCF93], NFKD: [0x110F, 0x116B, 0x11AE] }, +{ source: [0xCF94], NFC: [0xCF94], NFD: [0x110F, 0x116B, 0x11AF], NFKC: [0xCF94], NFKD: [0x110F, 0x116B, 0x11AF] }, +{ source: [0xCF95], NFC: [0xCF95], NFD: [0x110F, 0x116B, 0x11B0], NFKC: [0xCF95], NFKD: [0x110F, 0x116B, 0x11B0] }, +{ source: [0xCF96], NFC: [0xCF96], NFD: [0x110F, 0x116B, 0x11B1], NFKC: [0xCF96], NFKD: [0x110F, 0x116B, 0x11B1] }, +{ source: [0xCF97], NFC: [0xCF97], NFD: [0x110F, 0x116B, 0x11B2], NFKC: [0xCF97], NFKD: [0x110F, 0x116B, 0x11B2] }, +{ source: [0xCF98], NFC: [0xCF98], NFD: [0x110F, 0x116B, 0x11B3], NFKC: [0xCF98], NFKD: [0x110F, 0x116B, 0x11B3] }, +{ source: [0xCF99], NFC: [0xCF99], NFD: [0x110F, 0x116B, 0x11B4], NFKC: [0xCF99], NFKD: [0x110F, 0x116B, 0x11B4] }, +{ source: [0xCF9A], NFC: [0xCF9A], NFD: [0x110F, 0x116B, 0x11B5], NFKC: [0xCF9A], NFKD: [0x110F, 0x116B, 0x11B5] }, +{ source: [0xCF9B], NFC: [0xCF9B], NFD: [0x110F, 0x116B, 0x11B6], NFKC: [0xCF9B], NFKD: [0x110F, 0x116B, 0x11B6] }, +{ source: [0xCF9C], NFC: [0xCF9C], NFD: [0x110F, 0x116B, 0x11B7], NFKC: [0xCF9C], NFKD: [0x110F, 0x116B, 0x11B7] }, +{ source: [0xCF9D], NFC: [0xCF9D], NFD: [0x110F, 0x116B, 0x11B8], NFKC: [0xCF9D], NFKD: [0x110F, 0x116B, 0x11B8] }, +{ source: [0xCF9E], NFC: [0xCF9E], NFD: [0x110F, 0x116B, 0x11B9], NFKC: [0xCF9E], NFKD: [0x110F, 0x116B, 0x11B9] }, +{ source: [0xCF9F], NFC: [0xCF9F], NFD: [0x110F, 0x116B, 0x11BA], NFKC: [0xCF9F], NFKD: [0x110F, 0x116B, 0x11BA] }, +{ source: [0xCFA0], NFC: [0xCFA0], NFD: [0x110F, 0x116B, 0x11BB], NFKC: [0xCFA0], NFKD: [0x110F, 0x116B, 0x11BB] }, +{ source: [0xCFA1], NFC: [0xCFA1], NFD: [0x110F, 0x116B, 0x11BC], NFKC: [0xCFA1], NFKD: [0x110F, 0x116B, 0x11BC] }, +{ source: [0xCFA2], NFC: [0xCFA2], NFD: [0x110F, 0x116B, 0x11BD], NFKC: [0xCFA2], NFKD: [0x110F, 0x116B, 0x11BD] }, +{ source: [0xCFA3], NFC: [0xCFA3], NFD: [0x110F, 0x116B, 0x11BE], NFKC: [0xCFA3], NFKD: [0x110F, 0x116B, 0x11BE] }, +{ source: [0xCFA4], NFC: [0xCFA4], NFD: [0x110F, 0x116B, 0x11BF], NFKC: [0xCFA4], NFKD: [0x110F, 0x116B, 0x11BF] }, +{ source: [0xCFA5], NFC: [0xCFA5], NFD: [0x110F, 0x116B, 0x11C0], NFKC: [0xCFA5], NFKD: [0x110F, 0x116B, 0x11C0] }, +{ source: [0xCFA6], NFC: [0xCFA6], NFD: [0x110F, 0x116B, 0x11C1], NFKC: [0xCFA6], NFKD: [0x110F, 0x116B, 0x11C1] }, +{ source: [0xCFA7], NFC: [0xCFA7], NFD: [0x110F, 0x116B, 0x11C2], NFKC: [0xCFA7], NFKD: [0x110F, 0x116B, 0x11C2] }, +{ source: [0xCFA8], NFC: [0xCFA8], NFD: [0x110F, 0x116C], NFKC: [0xCFA8], NFKD: [0x110F, 0x116C] }, +{ source: [0xCFA9], NFC: [0xCFA9], NFD: [0x110F, 0x116C, 0x11A8], NFKC: [0xCFA9], NFKD: [0x110F, 0x116C, 0x11A8] }, +{ source: [0xCFAA], NFC: [0xCFAA], NFD: [0x110F, 0x116C, 0x11A9], NFKC: [0xCFAA], NFKD: [0x110F, 0x116C, 0x11A9] }, +{ source: [0xCFAB], NFC: [0xCFAB], NFD: [0x110F, 0x116C, 0x11AA], NFKC: [0xCFAB], NFKD: [0x110F, 0x116C, 0x11AA] }, +{ source: [0xCFAC], NFC: [0xCFAC], NFD: [0x110F, 0x116C, 0x11AB], NFKC: [0xCFAC], NFKD: [0x110F, 0x116C, 0x11AB] }, +{ source: [0xCFAD], NFC: [0xCFAD], NFD: [0x110F, 0x116C, 0x11AC], NFKC: [0xCFAD], NFKD: [0x110F, 0x116C, 0x11AC] }, +{ source: [0xCFAE], NFC: [0xCFAE], NFD: [0x110F, 0x116C, 0x11AD], NFKC: [0xCFAE], NFKD: [0x110F, 0x116C, 0x11AD] }, +{ source: [0xCFAF], NFC: [0xCFAF], NFD: [0x110F, 0x116C, 0x11AE], NFKC: [0xCFAF], NFKD: [0x110F, 0x116C, 0x11AE] }, +{ source: [0xCFB0], NFC: [0xCFB0], NFD: [0x110F, 0x116C, 0x11AF], NFKC: [0xCFB0], NFKD: [0x110F, 0x116C, 0x11AF] }, +{ source: [0xCFB1], NFC: [0xCFB1], NFD: [0x110F, 0x116C, 0x11B0], NFKC: [0xCFB1], NFKD: [0x110F, 0x116C, 0x11B0] }, +{ source: [0xCFB2], NFC: [0xCFB2], NFD: [0x110F, 0x116C, 0x11B1], NFKC: [0xCFB2], NFKD: [0x110F, 0x116C, 0x11B1] }, +{ source: [0xCFB3], NFC: [0xCFB3], NFD: [0x110F, 0x116C, 0x11B2], NFKC: [0xCFB3], NFKD: [0x110F, 0x116C, 0x11B2] }, +{ source: [0xCFB4], NFC: [0xCFB4], NFD: [0x110F, 0x116C, 0x11B3], NFKC: [0xCFB4], NFKD: [0x110F, 0x116C, 0x11B3] }, +{ source: [0xCFB5], NFC: [0xCFB5], NFD: [0x110F, 0x116C, 0x11B4], NFKC: [0xCFB5], NFKD: [0x110F, 0x116C, 0x11B4] }, +{ source: [0xCFB6], NFC: [0xCFB6], NFD: [0x110F, 0x116C, 0x11B5], NFKC: [0xCFB6], NFKD: [0x110F, 0x116C, 0x11B5] }, +{ source: [0xCFB7], NFC: [0xCFB7], NFD: [0x110F, 0x116C, 0x11B6], NFKC: [0xCFB7], NFKD: [0x110F, 0x116C, 0x11B6] }, +{ source: [0xCFB8], NFC: [0xCFB8], NFD: [0x110F, 0x116C, 0x11B7], NFKC: [0xCFB8], NFKD: [0x110F, 0x116C, 0x11B7] }, +{ source: [0xCFB9], NFC: [0xCFB9], NFD: [0x110F, 0x116C, 0x11B8], NFKC: [0xCFB9], NFKD: [0x110F, 0x116C, 0x11B8] }, +{ source: [0xCFBA], NFC: [0xCFBA], NFD: [0x110F, 0x116C, 0x11B9], NFKC: [0xCFBA], NFKD: [0x110F, 0x116C, 0x11B9] }, +{ source: [0xCFBB], NFC: [0xCFBB], NFD: [0x110F, 0x116C, 0x11BA], NFKC: [0xCFBB], NFKD: [0x110F, 0x116C, 0x11BA] }, +{ source: [0xCFBC], NFC: [0xCFBC], NFD: [0x110F, 0x116C, 0x11BB], NFKC: [0xCFBC], NFKD: [0x110F, 0x116C, 0x11BB] }, +{ source: [0xCFBD], NFC: [0xCFBD], NFD: [0x110F, 0x116C, 0x11BC], NFKC: [0xCFBD], NFKD: [0x110F, 0x116C, 0x11BC] }, +{ source: [0xCFBE], NFC: [0xCFBE], NFD: [0x110F, 0x116C, 0x11BD], NFKC: [0xCFBE], NFKD: [0x110F, 0x116C, 0x11BD] }, +{ source: [0xCFBF], NFC: [0xCFBF], NFD: [0x110F, 0x116C, 0x11BE], NFKC: [0xCFBF], NFKD: [0x110F, 0x116C, 0x11BE] }, +{ source: [0xCFC0], NFC: [0xCFC0], NFD: [0x110F, 0x116C, 0x11BF], NFKC: [0xCFC0], NFKD: [0x110F, 0x116C, 0x11BF] }, +{ source: [0xCFC1], NFC: [0xCFC1], NFD: [0x110F, 0x116C, 0x11C0], NFKC: [0xCFC1], NFKD: [0x110F, 0x116C, 0x11C0] }, +{ source: [0xCFC2], NFC: [0xCFC2], NFD: [0x110F, 0x116C, 0x11C1], NFKC: [0xCFC2], NFKD: [0x110F, 0x116C, 0x11C1] }, +{ source: [0xCFC3], NFC: [0xCFC3], NFD: [0x110F, 0x116C, 0x11C2], NFKC: [0xCFC3], NFKD: [0x110F, 0x116C, 0x11C2] }, +{ source: [0xCFC4], NFC: [0xCFC4], NFD: [0x110F, 0x116D], NFKC: [0xCFC4], NFKD: [0x110F, 0x116D] }, +{ source: [0xCFC5], NFC: [0xCFC5], NFD: [0x110F, 0x116D, 0x11A8], NFKC: [0xCFC5], NFKD: [0x110F, 0x116D, 0x11A8] }, +{ source: [0xCFC6], NFC: [0xCFC6], NFD: [0x110F, 0x116D, 0x11A9], NFKC: [0xCFC6], NFKD: [0x110F, 0x116D, 0x11A9] }, +{ source: [0xCFC7], NFC: [0xCFC7], NFD: [0x110F, 0x116D, 0x11AA], NFKC: [0xCFC7], NFKD: [0x110F, 0x116D, 0x11AA] }, +{ source: [0xCFC8], NFC: [0xCFC8], NFD: [0x110F, 0x116D, 0x11AB], NFKC: [0xCFC8], NFKD: [0x110F, 0x116D, 0x11AB] }, +{ source: [0xCFC9], NFC: [0xCFC9], NFD: [0x110F, 0x116D, 0x11AC], NFKC: [0xCFC9], NFKD: [0x110F, 0x116D, 0x11AC] }, +{ source: [0xCFCA], NFC: [0xCFCA], NFD: [0x110F, 0x116D, 0x11AD], NFKC: [0xCFCA], NFKD: [0x110F, 0x116D, 0x11AD] }, +{ source: [0xCFCB], NFC: [0xCFCB], NFD: [0x110F, 0x116D, 0x11AE], NFKC: [0xCFCB], NFKD: [0x110F, 0x116D, 0x11AE] }, +{ source: [0xCFCC], NFC: [0xCFCC], NFD: [0x110F, 0x116D, 0x11AF], NFKC: [0xCFCC], NFKD: [0x110F, 0x116D, 0x11AF] }, +{ source: [0xCFCD], NFC: [0xCFCD], NFD: [0x110F, 0x116D, 0x11B0], NFKC: [0xCFCD], NFKD: [0x110F, 0x116D, 0x11B0] }, +{ source: [0xCFCE], NFC: [0xCFCE], NFD: [0x110F, 0x116D, 0x11B1], NFKC: [0xCFCE], NFKD: [0x110F, 0x116D, 0x11B1] }, +{ source: [0xCFCF], NFC: [0xCFCF], NFD: [0x110F, 0x116D, 0x11B2], NFKC: [0xCFCF], NFKD: [0x110F, 0x116D, 0x11B2] }, +{ source: [0xCFD0], NFC: [0xCFD0], NFD: [0x110F, 0x116D, 0x11B3], NFKC: [0xCFD0], NFKD: [0x110F, 0x116D, 0x11B3] }, +{ source: [0xCFD1], NFC: [0xCFD1], NFD: [0x110F, 0x116D, 0x11B4], NFKC: [0xCFD1], NFKD: [0x110F, 0x116D, 0x11B4] }, +{ source: [0xCFD2], NFC: [0xCFD2], NFD: [0x110F, 0x116D, 0x11B5], NFKC: [0xCFD2], NFKD: [0x110F, 0x116D, 0x11B5] }, +{ source: [0xCFD3], NFC: [0xCFD3], NFD: [0x110F, 0x116D, 0x11B6], NFKC: [0xCFD3], NFKD: [0x110F, 0x116D, 0x11B6] }, +{ source: [0xCFD4], NFC: [0xCFD4], NFD: [0x110F, 0x116D, 0x11B7], NFKC: [0xCFD4], NFKD: [0x110F, 0x116D, 0x11B7] }, +{ source: [0xCFD5], NFC: [0xCFD5], NFD: [0x110F, 0x116D, 0x11B8], NFKC: [0xCFD5], NFKD: [0x110F, 0x116D, 0x11B8] }, +{ source: [0xCFD6], NFC: [0xCFD6], NFD: [0x110F, 0x116D, 0x11B9], NFKC: [0xCFD6], NFKD: [0x110F, 0x116D, 0x11B9] }, +{ source: [0xCFD7], NFC: [0xCFD7], NFD: [0x110F, 0x116D, 0x11BA], NFKC: [0xCFD7], NFKD: [0x110F, 0x116D, 0x11BA] }, +{ source: [0xCFD8], NFC: [0xCFD8], NFD: [0x110F, 0x116D, 0x11BB], NFKC: [0xCFD8], NFKD: [0x110F, 0x116D, 0x11BB] }, +{ source: [0xCFD9], NFC: [0xCFD9], NFD: [0x110F, 0x116D, 0x11BC], NFKC: [0xCFD9], NFKD: [0x110F, 0x116D, 0x11BC] }, +{ source: [0xCFDA], NFC: [0xCFDA], NFD: [0x110F, 0x116D, 0x11BD], NFKC: [0xCFDA], NFKD: [0x110F, 0x116D, 0x11BD] }, +{ source: [0xCFDB], NFC: [0xCFDB], NFD: [0x110F, 0x116D, 0x11BE], NFKC: [0xCFDB], NFKD: [0x110F, 0x116D, 0x11BE] }, +{ source: [0xCFDC], NFC: [0xCFDC], NFD: [0x110F, 0x116D, 0x11BF], NFKC: [0xCFDC], NFKD: [0x110F, 0x116D, 0x11BF] }, +{ source: [0xCFDD], NFC: [0xCFDD], NFD: [0x110F, 0x116D, 0x11C0], NFKC: [0xCFDD], NFKD: [0x110F, 0x116D, 0x11C0] }, +{ source: [0xCFDE], NFC: [0xCFDE], NFD: [0x110F, 0x116D, 0x11C1], NFKC: [0xCFDE], NFKD: [0x110F, 0x116D, 0x11C1] }, +{ source: [0xCFDF], NFC: [0xCFDF], NFD: [0x110F, 0x116D, 0x11C2], NFKC: [0xCFDF], NFKD: [0x110F, 0x116D, 0x11C2] }, +{ source: [0xCFE0], NFC: [0xCFE0], NFD: [0x110F, 0x116E], NFKC: [0xCFE0], NFKD: [0x110F, 0x116E] }, +{ source: [0xCFE1], NFC: [0xCFE1], NFD: [0x110F, 0x116E, 0x11A8], NFKC: [0xCFE1], NFKD: [0x110F, 0x116E, 0x11A8] }, +{ source: [0xCFE2], NFC: [0xCFE2], NFD: [0x110F, 0x116E, 0x11A9], NFKC: [0xCFE2], NFKD: [0x110F, 0x116E, 0x11A9] }, +{ source: [0xCFE3], NFC: [0xCFE3], NFD: [0x110F, 0x116E, 0x11AA], NFKC: [0xCFE3], NFKD: [0x110F, 0x116E, 0x11AA] }, +{ source: [0xCFE4], NFC: [0xCFE4], NFD: [0x110F, 0x116E, 0x11AB], NFKC: [0xCFE4], NFKD: [0x110F, 0x116E, 0x11AB] }, +{ source: [0xCFE5], NFC: [0xCFE5], NFD: [0x110F, 0x116E, 0x11AC], NFKC: [0xCFE5], NFKD: [0x110F, 0x116E, 0x11AC] }, +{ source: [0xCFE6], NFC: [0xCFE6], NFD: [0x110F, 0x116E, 0x11AD], NFKC: [0xCFE6], NFKD: [0x110F, 0x116E, 0x11AD] }, +{ source: [0xCFE7], NFC: [0xCFE7], NFD: [0x110F, 0x116E, 0x11AE], NFKC: [0xCFE7], NFKD: [0x110F, 0x116E, 0x11AE] }, +{ source: [0xCFE8], NFC: [0xCFE8], NFD: [0x110F, 0x116E, 0x11AF], NFKC: [0xCFE8], NFKD: [0x110F, 0x116E, 0x11AF] }, +{ source: [0xCFE9], NFC: [0xCFE9], NFD: [0x110F, 0x116E, 0x11B0], NFKC: [0xCFE9], NFKD: [0x110F, 0x116E, 0x11B0] }, +{ source: [0xCFEA], NFC: [0xCFEA], NFD: [0x110F, 0x116E, 0x11B1], NFKC: [0xCFEA], NFKD: [0x110F, 0x116E, 0x11B1] }, +{ source: [0xCFEB], NFC: [0xCFEB], NFD: [0x110F, 0x116E, 0x11B2], NFKC: [0xCFEB], NFKD: [0x110F, 0x116E, 0x11B2] }, +{ source: [0xCFEC], NFC: [0xCFEC], NFD: [0x110F, 0x116E, 0x11B3], NFKC: [0xCFEC], NFKD: [0x110F, 0x116E, 0x11B3] }, +{ source: [0xCFED], NFC: [0xCFED], NFD: [0x110F, 0x116E, 0x11B4], NFKC: [0xCFED], NFKD: [0x110F, 0x116E, 0x11B4] }, +{ source: [0xCFEE], NFC: [0xCFEE], NFD: [0x110F, 0x116E, 0x11B5], NFKC: [0xCFEE], NFKD: [0x110F, 0x116E, 0x11B5] }, +{ source: [0xCFEF], NFC: [0xCFEF], NFD: [0x110F, 0x116E, 0x11B6], NFKC: [0xCFEF], NFKD: [0x110F, 0x116E, 0x11B6] }, +{ source: [0xCFF0], NFC: [0xCFF0], NFD: [0x110F, 0x116E, 0x11B7], NFKC: [0xCFF0], NFKD: [0x110F, 0x116E, 0x11B7] }, +{ source: [0xCFF1], NFC: [0xCFF1], NFD: [0x110F, 0x116E, 0x11B8], NFKC: [0xCFF1], NFKD: [0x110F, 0x116E, 0x11B8] }, +{ source: [0xCFF2], NFC: [0xCFF2], NFD: [0x110F, 0x116E, 0x11B9], NFKC: [0xCFF2], NFKD: [0x110F, 0x116E, 0x11B9] }, +{ source: [0xCFF3], NFC: [0xCFF3], NFD: [0x110F, 0x116E, 0x11BA], NFKC: [0xCFF3], NFKD: [0x110F, 0x116E, 0x11BA] }, +{ source: [0xCFF4], NFC: [0xCFF4], NFD: [0x110F, 0x116E, 0x11BB], NFKC: [0xCFF4], NFKD: [0x110F, 0x116E, 0x11BB] }, +{ source: [0xCFF5], NFC: [0xCFF5], NFD: [0x110F, 0x116E, 0x11BC], NFKC: [0xCFF5], NFKD: [0x110F, 0x116E, 0x11BC] }, +{ source: [0xCFF6], NFC: [0xCFF6], NFD: [0x110F, 0x116E, 0x11BD], NFKC: [0xCFF6], NFKD: [0x110F, 0x116E, 0x11BD] }, +{ source: [0xCFF7], NFC: [0xCFF7], NFD: [0x110F, 0x116E, 0x11BE], NFKC: [0xCFF7], NFKD: [0x110F, 0x116E, 0x11BE] }, +{ source: [0xCFF8], NFC: [0xCFF8], NFD: [0x110F, 0x116E, 0x11BF], NFKC: [0xCFF8], NFKD: [0x110F, 0x116E, 0x11BF] }, +{ source: [0xCFF9], NFC: [0xCFF9], NFD: [0x110F, 0x116E, 0x11C0], NFKC: [0xCFF9], NFKD: [0x110F, 0x116E, 0x11C0] }, +{ source: [0xCFFA], NFC: [0xCFFA], NFD: [0x110F, 0x116E, 0x11C1], NFKC: [0xCFFA], NFKD: [0x110F, 0x116E, 0x11C1] }, +{ source: [0xCFFB], NFC: [0xCFFB], NFD: [0x110F, 0x116E, 0x11C2], NFKC: [0xCFFB], NFKD: [0x110F, 0x116E, 0x11C2] }, +{ source: [0xCFFC], NFC: [0xCFFC], NFD: [0x110F, 0x116F], NFKC: [0xCFFC], NFKD: [0x110F, 0x116F] }, +{ source: [0xCFFD], NFC: [0xCFFD], NFD: [0x110F, 0x116F, 0x11A8], NFKC: [0xCFFD], NFKD: [0x110F, 0x116F, 0x11A8] }, +{ source: [0xCFFE], NFC: [0xCFFE], NFD: [0x110F, 0x116F, 0x11A9], NFKC: [0xCFFE], NFKD: [0x110F, 0x116F, 0x11A9] }, +{ source: [0xCFFF], NFC: [0xCFFF], NFD: [0x110F, 0x116F, 0x11AA], NFKC: [0xCFFF], NFKD: [0x110F, 0x116F, 0x11AA] }, +{ source: [0xD000], NFC: [0xD000], NFD: [0x110F, 0x116F, 0x11AB], NFKC: [0xD000], NFKD: [0x110F, 0x116F, 0x11AB] }, +{ source: [0xD001], NFC: [0xD001], NFD: [0x110F, 0x116F, 0x11AC], NFKC: [0xD001], NFKD: [0x110F, 0x116F, 0x11AC] }, +{ source: [0xD002], NFC: [0xD002], NFD: [0x110F, 0x116F, 0x11AD], NFKC: [0xD002], NFKD: [0x110F, 0x116F, 0x11AD] }, +{ source: [0xD003], NFC: [0xD003], NFD: [0x110F, 0x116F, 0x11AE], NFKC: [0xD003], NFKD: [0x110F, 0x116F, 0x11AE] }, +{ source: [0xD004], NFC: [0xD004], NFD: [0x110F, 0x116F, 0x11AF], NFKC: [0xD004], NFKD: [0x110F, 0x116F, 0x11AF] }, +{ source: [0xD005], NFC: [0xD005], NFD: [0x110F, 0x116F, 0x11B0], NFKC: [0xD005], NFKD: [0x110F, 0x116F, 0x11B0] }, +{ source: [0xD006], NFC: [0xD006], NFD: [0x110F, 0x116F, 0x11B1], NFKC: [0xD006], NFKD: [0x110F, 0x116F, 0x11B1] }, +{ source: [0xD007], NFC: [0xD007], NFD: [0x110F, 0x116F, 0x11B2], NFKC: [0xD007], NFKD: [0x110F, 0x116F, 0x11B2] }, +{ source: [0xD008], NFC: [0xD008], NFD: [0x110F, 0x116F, 0x11B3], NFKC: [0xD008], NFKD: [0x110F, 0x116F, 0x11B3] }, +{ source: [0xD009], NFC: [0xD009], NFD: [0x110F, 0x116F, 0x11B4], NFKC: [0xD009], NFKD: [0x110F, 0x116F, 0x11B4] }, +{ source: [0xD00A], NFC: [0xD00A], NFD: [0x110F, 0x116F, 0x11B5], NFKC: [0xD00A], NFKD: [0x110F, 0x116F, 0x11B5] }, +{ source: [0xD00B], NFC: [0xD00B], NFD: [0x110F, 0x116F, 0x11B6], NFKC: [0xD00B], NFKD: [0x110F, 0x116F, 0x11B6] }, +{ source: [0xD00C], NFC: [0xD00C], NFD: [0x110F, 0x116F, 0x11B7], NFKC: [0xD00C], NFKD: [0x110F, 0x116F, 0x11B7] }, +{ source: [0xD00D], NFC: [0xD00D], NFD: [0x110F, 0x116F, 0x11B8], NFKC: [0xD00D], NFKD: [0x110F, 0x116F, 0x11B8] }, +{ source: [0xD00E], NFC: [0xD00E], NFD: [0x110F, 0x116F, 0x11B9], NFKC: [0xD00E], NFKD: [0x110F, 0x116F, 0x11B9] }, +{ source: [0xD00F], NFC: [0xD00F], NFD: [0x110F, 0x116F, 0x11BA], NFKC: [0xD00F], NFKD: [0x110F, 0x116F, 0x11BA] }, +{ source: [0xD010], NFC: [0xD010], NFD: [0x110F, 0x116F, 0x11BB], NFKC: [0xD010], NFKD: [0x110F, 0x116F, 0x11BB] }, +{ source: [0xD011], NFC: [0xD011], NFD: [0x110F, 0x116F, 0x11BC], NFKC: [0xD011], NFKD: [0x110F, 0x116F, 0x11BC] }, +{ source: [0xD012], NFC: [0xD012], NFD: [0x110F, 0x116F, 0x11BD], NFKC: [0xD012], NFKD: [0x110F, 0x116F, 0x11BD] }, +{ source: [0xD013], NFC: [0xD013], NFD: [0x110F, 0x116F, 0x11BE], NFKC: [0xD013], NFKD: [0x110F, 0x116F, 0x11BE] }, +{ source: [0xD014], NFC: [0xD014], NFD: [0x110F, 0x116F, 0x11BF], NFKC: [0xD014], NFKD: [0x110F, 0x116F, 0x11BF] }, +{ source: [0xD015], NFC: [0xD015], NFD: [0x110F, 0x116F, 0x11C0], NFKC: [0xD015], NFKD: [0x110F, 0x116F, 0x11C0] }, +{ source: [0xD016], NFC: [0xD016], NFD: [0x110F, 0x116F, 0x11C1], NFKC: [0xD016], NFKD: [0x110F, 0x116F, 0x11C1] }, +{ source: [0xD017], NFC: [0xD017], NFD: [0x110F, 0x116F, 0x11C2], NFKC: [0xD017], NFKD: [0x110F, 0x116F, 0x11C2] }, +{ source: [0xD018], NFC: [0xD018], NFD: [0x110F, 0x1170], NFKC: [0xD018], NFKD: [0x110F, 0x1170] }, +{ source: [0xD019], NFC: [0xD019], NFD: [0x110F, 0x1170, 0x11A8], NFKC: [0xD019], NFKD: [0x110F, 0x1170, 0x11A8] }, +{ source: [0xD01A], NFC: [0xD01A], NFD: [0x110F, 0x1170, 0x11A9], NFKC: [0xD01A], NFKD: [0x110F, 0x1170, 0x11A9] }, +{ source: [0xD01B], NFC: [0xD01B], NFD: [0x110F, 0x1170, 0x11AA], NFKC: [0xD01B], NFKD: [0x110F, 0x1170, 0x11AA] }, +{ source: [0xD01C], NFC: [0xD01C], NFD: [0x110F, 0x1170, 0x11AB], NFKC: [0xD01C], NFKD: [0x110F, 0x1170, 0x11AB] }, +{ source: [0xD01D], NFC: [0xD01D], NFD: [0x110F, 0x1170, 0x11AC], NFKC: [0xD01D], NFKD: [0x110F, 0x1170, 0x11AC] }, +{ source: [0xD01E], NFC: [0xD01E], NFD: [0x110F, 0x1170, 0x11AD], NFKC: [0xD01E], NFKD: [0x110F, 0x1170, 0x11AD] }, +{ source: [0xD01F], NFC: [0xD01F], NFD: [0x110F, 0x1170, 0x11AE], NFKC: [0xD01F], NFKD: [0x110F, 0x1170, 0x11AE] }, +{ source: [0xD020], NFC: [0xD020], NFD: [0x110F, 0x1170, 0x11AF], NFKC: [0xD020], NFKD: [0x110F, 0x1170, 0x11AF] }, +{ source: [0xD021], NFC: [0xD021], NFD: [0x110F, 0x1170, 0x11B0], NFKC: [0xD021], NFKD: [0x110F, 0x1170, 0x11B0] }, +{ source: [0xD022], NFC: [0xD022], NFD: [0x110F, 0x1170, 0x11B1], NFKC: [0xD022], NFKD: [0x110F, 0x1170, 0x11B1] }, +{ source: [0xD023], NFC: [0xD023], NFD: [0x110F, 0x1170, 0x11B2], NFKC: [0xD023], NFKD: [0x110F, 0x1170, 0x11B2] }, +{ source: [0xD024], NFC: [0xD024], NFD: [0x110F, 0x1170, 0x11B3], NFKC: [0xD024], NFKD: [0x110F, 0x1170, 0x11B3] }, +{ source: [0xD025], NFC: [0xD025], NFD: [0x110F, 0x1170, 0x11B4], NFKC: [0xD025], NFKD: [0x110F, 0x1170, 0x11B4] }, +{ source: [0xD026], NFC: [0xD026], NFD: [0x110F, 0x1170, 0x11B5], NFKC: [0xD026], NFKD: [0x110F, 0x1170, 0x11B5] }, +{ source: [0xD027], NFC: [0xD027], NFD: [0x110F, 0x1170, 0x11B6], NFKC: [0xD027], NFKD: [0x110F, 0x1170, 0x11B6] }, +{ source: [0xD028], NFC: [0xD028], NFD: [0x110F, 0x1170, 0x11B7], NFKC: [0xD028], NFKD: [0x110F, 0x1170, 0x11B7] }, +{ source: [0xD029], NFC: [0xD029], NFD: [0x110F, 0x1170, 0x11B8], NFKC: [0xD029], NFKD: [0x110F, 0x1170, 0x11B8] }, +{ source: [0xD02A], NFC: [0xD02A], NFD: [0x110F, 0x1170, 0x11B9], NFKC: [0xD02A], NFKD: [0x110F, 0x1170, 0x11B9] }, +{ source: [0xD02B], NFC: [0xD02B], NFD: [0x110F, 0x1170, 0x11BA], NFKC: [0xD02B], NFKD: [0x110F, 0x1170, 0x11BA] }, +{ source: [0xD02C], NFC: [0xD02C], NFD: [0x110F, 0x1170, 0x11BB], NFKC: [0xD02C], NFKD: [0x110F, 0x1170, 0x11BB] }, +{ source: [0xD02D], NFC: [0xD02D], NFD: [0x110F, 0x1170, 0x11BC], NFKC: [0xD02D], NFKD: [0x110F, 0x1170, 0x11BC] }, +{ source: [0xD02E], NFC: [0xD02E], NFD: [0x110F, 0x1170, 0x11BD], NFKC: [0xD02E], NFKD: [0x110F, 0x1170, 0x11BD] }, +{ source: [0xD02F], NFC: [0xD02F], NFD: [0x110F, 0x1170, 0x11BE], NFKC: [0xD02F], NFKD: [0x110F, 0x1170, 0x11BE] }, +{ source: [0xD030], NFC: [0xD030], NFD: [0x110F, 0x1170, 0x11BF], NFKC: [0xD030], NFKD: [0x110F, 0x1170, 0x11BF] }, +{ source: [0xD031], NFC: [0xD031], NFD: [0x110F, 0x1170, 0x11C0], NFKC: [0xD031], NFKD: [0x110F, 0x1170, 0x11C0] }, +{ source: [0xD032], NFC: [0xD032], NFD: [0x110F, 0x1170, 0x11C1], NFKC: [0xD032], NFKD: [0x110F, 0x1170, 0x11C1] }, +{ source: [0xD033], NFC: [0xD033], NFD: [0x110F, 0x1170, 0x11C2], NFKC: [0xD033], NFKD: [0x110F, 0x1170, 0x11C2] }, +{ source: [0xD034], NFC: [0xD034], NFD: [0x110F, 0x1171], NFKC: [0xD034], NFKD: [0x110F, 0x1171] }, +{ source: [0xD035], NFC: [0xD035], NFD: [0x110F, 0x1171, 0x11A8], NFKC: [0xD035], NFKD: [0x110F, 0x1171, 0x11A8] }, +{ source: [0xD036], NFC: [0xD036], NFD: [0x110F, 0x1171, 0x11A9], NFKC: [0xD036], NFKD: [0x110F, 0x1171, 0x11A9] }, +{ source: [0xD037], NFC: [0xD037], NFD: [0x110F, 0x1171, 0x11AA], NFKC: [0xD037], NFKD: [0x110F, 0x1171, 0x11AA] }, +{ source: [0xD038], NFC: [0xD038], NFD: [0x110F, 0x1171, 0x11AB], NFKC: [0xD038], NFKD: [0x110F, 0x1171, 0x11AB] }, +{ source: [0xD039], NFC: [0xD039], NFD: [0x110F, 0x1171, 0x11AC], NFKC: [0xD039], NFKD: [0x110F, 0x1171, 0x11AC] }, +{ source: [0xD03A], NFC: [0xD03A], NFD: [0x110F, 0x1171, 0x11AD], NFKC: [0xD03A], NFKD: [0x110F, 0x1171, 0x11AD] }, +{ source: [0xD03B], NFC: [0xD03B], NFD: [0x110F, 0x1171, 0x11AE], NFKC: [0xD03B], NFKD: [0x110F, 0x1171, 0x11AE] }, +{ source: [0xD03C], NFC: [0xD03C], NFD: [0x110F, 0x1171, 0x11AF], NFKC: [0xD03C], NFKD: [0x110F, 0x1171, 0x11AF] }, +{ source: [0xD03D], NFC: [0xD03D], NFD: [0x110F, 0x1171, 0x11B0], NFKC: [0xD03D], NFKD: [0x110F, 0x1171, 0x11B0] }, +{ source: [0xD03E], NFC: [0xD03E], NFD: [0x110F, 0x1171, 0x11B1], NFKC: [0xD03E], NFKD: [0x110F, 0x1171, 0x11B1] }, +{ source: [0xD03F], NFC: [0xD03F], NFD: [0x110F, 0x1171, 0x11B2], NFKC: [0xD03F], NFKD: [0x110F, 0x1171, 0x11B2] }, +{ source: [0xD040], NFC: [0xD040], NFD: [0x110F, 0x1171, 0x11B3], NFKC: [0xD040], NFKD: [0x110F, 0x1171, 0x11B3] }, +{ source: [0xD041], NFC: [0xD041], NFD: [0x110F, 0x1171, 0x11B4], NFKC: [0xD041], NFKD: [0x110F, 0x1171, 0x11B4] }, +{ source: [0xD042], NFC: [0xD042], NFD: [0x110F, 0x1171, 0x11B5], NFKC: [0xD042], NFKD: [0x110F, 0x1171, 0x11B5] }, +{ source: [0xD043], NFC: [0xD043], NFD: [0x110F, 0x1171, 0x11B6], NFKC: [0xD043], NFKD: [0x110F, 0x1171, 0x11B6] }, +{ source: [0xD044], NFC: [0xD044], NFD: [0x110F, 0x1171, 0x11B7], NFKC: [0xD044], NFKD: [0x110F, 0x1171, 0x11B7] }, +{ source: [0xD045], NFC: [0xD045], NFD: [0x110F, 0x1171, 0x11B8], NFKC: [0xD045], NFKD: [0x110F, 0x1171, 0x11B8] }, +{ source: [0xD046], NFC: [0xD046], NFD: [0x110F, 0x1171, 0x11B9], NFKC: [0xD046], NFKD: [0x110F, 0x1171, 0x11B9] }, +{ source: [0xD047], NFC: [0xD047], NFD: [0x110F, 0x1171, 0x11BA], NFKC: [0xD047], NFKD: [0x110F, 0x1171, 0x11BA] }, +{ source: [0xD048], NFC: [0xD048], NFD: [0x110F, 0x1171, 0x11BB], NFKC: [0xD048], NFKD: [0x110F, 0x1171, 0x11BB] }, +{ source: [0xD049], NFC: [0xD049], NFD: [0x110F, 0x1171, 0x11BC], NFKC: [0xD049], NFKD: [0x110F, 0x1171, 0x11BC] }, +{ source: [0xD04A], NFC: [0xD04A], NFD: [0x110F, 0x1171, 0x11BD], NFKC: [0xD04A], NFKD: [0x110F, 0x1171, 0x11BD] }, +{ source: [0xD04B], NFC: [0xD04B], NFD: [0x110F, 0x1171, 0x11BE], NFKC: [0xD04B], NFKD: [0x110F, 0x1171, 0x11BE] }, +{ source: [0xD04C], NFC: [0xD04C], NFD: [0x110F, 0x1171, 0x11BF], NFKC: [0xD04C], NFKD: [0x110F, 0x1171, 0x11BF] }, +{ source: [0xD04D], NFC: [0xD04D], NFD: [0x110F, 0x1171, 0x11C0], NFKC: [0xD04D], NFKD: [0x110F, 0x1171, 0x11C0] }, +{ source: [0xD04E], NFC: [0xD04E], NFD: [0x110F, 0x1171, 0x11C1], NFKC: [0xD04E], NFKD: [0x110F, 0x1171, 0x11C1] }, +{ source: [0xD04F], NFC: [0xD04F], NFD: [0x110F, 0x1171, 0x11C2], NFKC: [0xD04F], NFKD: [0x110F, 0x1171, 0x11C2] }, +{ source: [0xD050], NFC: [0xD050], NFD: [0x110F, 0x1172], NFKC: [0xD050], NFKD: [0x110F, 0x1172] }, +{ source: [0xD051], NFC: [0xD051], NFD: [0x110F, 0x1172, 0x11A8], NFKC: [0xD051], NFKD: [0x110F, 0x1172, 0x11A8] }, +{ source: [0xD052], NFC: [0xD052], NFD: [0x110F, 0x1172, 0x11A9], NFKC: [0xD052], NFKD: [0x110F, 0x1172, 0x11A9] }, +{ source: [0xD053], NFC: [0xD053], NFD: [0x110F, 0x1172, 0x11AA], NFKC: [0xD053], NFKD: [0x110F, 0x1172, 0x11AA] }, +{ source: [0xD054], NFC: [0xD054], NFD: [0x110F, 0x1172, 0x11AB], NFKC: [0xD054], NFKD: [0x110F, 0x1172, 0x11AB] }, +{ source: [0xD055], NFC: [0xD055], NFD: [0x110F, 0x1172, 0x11AC], NFKC: [0xD055], NFKD: [0x110F, 0x1172, 0x11AC] }, +{ source: [0xD056], NFC: [0xD056], NFD: [0x110F, 0x1172, 0x11AD], NFKC: [0xD056], NFKD: [0x110F, 0x1172, 0x11AD] }, +{ source: [0xD057], NFC: [0xD057], NFD: [0x110F, 0x1172, 0x11AE], NFKC: [0xD057], NFKD: [0x110F, 0x1172, 0x11AE] }, +{ source: [0xD058], NFC: [0xD058], NFD: [0x110F, 0x1172, 0x11AF], NFKC: [0xD058], NFKD: [0x110F, 0x1172, 0x11AF] }, +{ source: [0xD059], NFC: [0xD059], NFD: [0x110F, 0x1172, 0x11B0], NFKC: [0xD059], NFKD: [0x110F, 0x1172, 0x11B0] }, +{ source: [0xD05A], NFC: [0xD05A], NFD: [0x110F, 0x1172, 0x11B1], NFKC: [0xD05A], NFKD: [0x110F, 0x1172, 0x11B1] }, +{ source: [0xD05B], NFC: [0xD05B], NFD: [0x110F, 0x1172, 0x11B2], NFKC: [0xD05B], NFKD: [0x110F, 0x1172, 0x11B2] }, +{ source: [0xD05C], NFC: [0xD05C], NFD: [0x110F, 0x1172, 0x11B3], NFKC: [0xD05C], NFKD: [0x110F, 0x1172, 0x11B3] }, +{ source: [0xD05D], NFC: [0xD05D], NFD: [0x110F, 0x1172, 0x11B4], NFKC: [0xD05D], NFKD: [0x110F, 0x1172, 0x11B4] }, +{ source: [0xD05E], NFC: [0xD05E], NFD: [0x110F, 0x1172, 0x11B5], NFKC: [0xD05E], NFKD: [0x110F, 0x1172, 0x11B5] }, +{ source: [0xD05F], NFC: [0xD05F], NFD: [0x110F, 0x1172, 0x11B6], NFKC: [0xD05F], NFKD: [0x110F, 0x1172, 0x11B6] }, +{ source: [0xD060], NFC: [0xD060], NFD: [0x110F, 0x1172, 0x11B7], NFKC: [0xD060], NFKD: [0x110F, 0x1172, 0x11B7] }, +{ source: [0xD061], NFC: [0xD061], NFD: [0x110F, 0x1172, 0x11B8], NFKC: [0xD061], NFKD: [0x110F, 0x1172, 0x11B8] }, +{ source: [0xD062], NFC: [0xD062], NFD: [0x110F, 0x1172, 0x11B9], NFKC: [0xD062], NFKD: [0x110F, 0x1172, 0x11B9] }, +{ source: [0xD063], NFC: [0xD063], NFD: [0x110F, 0x1172, 0x11BA], NFKC: [0xD063], NFKD: [0x110F, 0x1172, 0x11BA] }, +{ source: [0xD064], NFC: [0xD064], NFD: [0x110F, 0x1172, 0x11BB], NFKC: [0xD064], NFKD: [0x110F, 0x1172, 0x11BB] }, +{ source: [0xD065], NFC: [0xD065], NFD: [0x110F, 0x1172, 0x11BC], NFKC: [0xD065], NFKD: [0x110F, 0x1172, 0x11BC] }, +{ source: [0xD066], NFC: [0xD066], NFD: [0x110F, 0x1172, 0x11BD], NFKC: [0xD066], NFKD: [0x110F, 0x1172, 0x11BD] }, +{ source: [0xD067], NFC: [0xD067], NFD: [0x110F, 0x1172, 0x11BE], NFKC: [0xD067], NFKD: [0x110F, 0x1172, 0x11BE] }, +{ source: [0xD068], NFC: [0xD068], NFD: [0x110F, 0x1172, 0x11BF], NFKC: [0xD068], NFKD: [0x110F, 0x1172, 0x11BF] }, +{ source: [0xD069], NFC: [0xD069], NFD: [0x110F, 0x1172, 0x11C0], NFKC: [0xD069], NFKD: [0x110F, 0x1172, 0x11C0] }, +{ source: [0xD06A], NFC: [0xD06A], NFD: [0x110F, 0x1172, 0x11C1], NFKC: [0xD06A], NFKD: [0x110F, 0x1172, 0x11C1] }, +{ source: [0xD06B], NFC: [0xD06B], NFD: [0x110F, 0x1172, 0x11C2], NFKC: [0xD06B], NFKD: [0x110F, 0x1172, 0x11C2] }, +{ source: [0xD06C], NFC: [0xD06C], NFD: [0x110F, 0x1173], NFKC: [0xD06C], NFKD: [0x110F, 0x1173] }, +{ source: [0xD06D], NFC: [0xD06D], NFD: [0x110F, 0x1173, 0x11A8], NFKC: [0xD06D], NFKD: [0x110F, 0x1173, 0x11A8] }, +{ source: [0xD06E], NFC: [0xD06E], NFD: [0x110F, 0x1173, 0x11A9], NFKC: [0xD06E], NFKD: [0x110F, 0x1173, 0x11A9] }, +{ source: [0xD06F], NFC: [0xD06F], NFD: [0x110F, 0x1173, 0x11AA], NFKC: [0xD06F], NFKD: [0x110F, 0x1173, 0x11AA] }, +{ source: [0xD070], NFC: [0xD070], NFD: [0x110F, 0x1173, 0x11AB], NFKC: [0xD070], NFKD: [0x110F, 0x1173, 0x11AB] }, +{ source: [0xD071], NFC: [0xD071], NFD: [0x110F, 0x1173, 0x11AC], NFKC: [0xD071], NFKD: [0x110F, 0x1173, 0x11AC] }, +{ source: [0xD072], NFC: [0xD072], NFD: [0x110F, 0x1173, 0x11AD], NFKC: [0xD072], NFKD: [0x110F, 0x1173, 0x11AD] }, +{ source: [0xD073], NFC: [0xD073], NFD: [0x110F, 0x1173, 0x11AE], NFKC: [0xD073], NFKD: [0x110F, 0x1173, 0x11AE] }, +{ source: [0xD074], NFC: [0xD074], NFD: [0x110F, 0x1173, 0x11AF], NFKC: [0xD074], NFKD: [0x110F, 0x1173, 0x11AF] }, +{ source: [0xD075], NFC: [0xD075], NFD: [0x110F, 0x1173, 0x11B0], NFKC: [0xD075], NFKD: [0x110F, 0x1173, 0x11B0] }, +{ source: [0xD076], NFC: [0xD076], NFD: [0x110F, 0x1173, 0x11B1], NFKC: [0xD076], NFKD: [0x110F, 0x1173, 0x11B1] }, +{ source: [0xD077], NFC: [0xD077], NFD: [0x110F, 0x1173, 0x11B2], NFKC: [0xD077], NFKD: [0x110F, 0x1173, 0x11B2] }, +{ source: [0xD078], NFC: [0xD078], NFD: [0x110F, 0x1173, 0x11B3], NFKC: [0xD078], NFKD: [0x110F, 0x1173, 0x11B3] }, +{ source: [0xD079], NFC: [0xD079], NFD: [0x110F, 0x1173, 0x11B4], NFKC: [0xD079], NFKD: [0x110F, 0x1173, 0x11B4] }, +{ source: [0xD07A], NFC: [0xD07A], NFD: [0x110F, 0x1173, 0x11B5], NFKC: [0xD07A], NFKD: [0x110F, 0x1173, 0x11B5] }, +{ source: [0xD07B], NFC: [0xD07B], NFD: [0x110F, 0x1173, 0x11B6], NFKC: [0xD07B], NFKD: [0x110F, 0x1173, 0x11B6] }, +{ source: [0xD07C], NFC: [0xD07C], NFD: [0x110F, 0x1173, 0x11B7], NFKC: [0xD07C], NFKD: [0x110F, 0x1173, 0x11B7] }, +{ source: [0xD07D], NFC: [0xD07D], NFD: [0x110F, 0x1173, 0x11B8], NFKC: [0xD07D], NFKD: [0x110F, 0x1173, 0x11B8] }, +{ source: [0xD07E], NFC: [0xD07E], NFD: [0x110F, 0x1173, 0x11B9], NFKC: [0xD07E], NFKD: [0x110F, 0x1173, 0x11B9] }, +{ source: [0xD07F], NFC: [0xD07F], NFD: [0x110F, 0x1173, 0x11BA], NFKC: [0xD07F], NFKD: [0x110F, 0x1173, 0x11BA] }, +{ source: [0xD080], NFC: [0xD080], NFD: [0x110F, 0x1173, 0x11BB], NFKC: [0xD080], NFKD: [0x110F, 0x1173, 0x11BB] }, +{ source: [0xD081], NFC: [0xD081], NFD: [0x110F, 0x1173, 0x11BC], NFKC: [0xD081], NFKD: [0x110F, 0x1173, 0x11BC] }, +{ source: [0xD082], NFC: [0xD082], NFD: [0x110F, 0x1173, 0x11BD], NFKC: [0xD082], NFKD: [0x110F, 0x1173, 0x11BD] }, +{ source: [0xD083], NFC: [0xD083], NFD: [0x110F, 0x1173, 0x11BE], NFKC: [0xD083], NFKD: [0x110F, 0x1173, 0x11BE] }, +{ source: [0xD084], NFC: [0xD084], NFD: [0x110F, 0x1173, 0x11BF], NFKC: [0xD084], NFKD: [0x110F, 0x1173, 0x11BF] }, +{ source: [0xD085], NFC: [0xD085], NFD: [0x110F, 0x1173, 0x11C0], NFKC: [0xD085], NFKD: [0x110F, 0x1173, 0x11C0] }, +{ source: [0xD086], NFC: [0xD086], NFD: [0x110F, 0x1173, 0x11C1], NFKC: [0xD086], NFKD: [0x110F, 0x1173, 0x11C1] }, +{ source: [0xD087], NFC: [0xD087], NFD: [0x110F, 0x1173, 0x11C2], NFKC: [0xD087], NFKD: [0x110F, 0x1173, 0x11C2] }, +{ source: [0xD088], NFC: [0xD088], NFD: [0x110F, 0x1174], NFKC: [0xD088], NFKD: [0x110F, 0x1174] }, +{ source: [0xD089], NFC: [0xD089], NFD: [0x110F, 0x1174, 0x11A8], NFKC: [0xD089], NFKD: [0x110F, 0x1174, 0x11A8] }, +{ source: [0xD08A], NFC: [0xD08A], NFD: [0x110F, 0x1174, 0x11A9], NFKC: [0xD08A], NFKD: [0x110F, 0x1174, 0x11A9] }, +{ source: [0xD08B], NFC: [0xD08B], NFD: [0x110F, 0x1174, 0x11AA], NFKC: [0xD08B], NFKD: [0x110F, 0x1174, 0x11AA] }, +{ source: [0xD08C], NFC: [0xD08C], NFD: [0x110F, 0x1174, 0x11AB], NFKC: [0xD08C], NFKD: [0x110F, 0x1174, 0x11AB] }, +{ source: [0xD08D], NFC: [0xD08D], NFD: [0x110F, 0x1174, 0x11AC], NFKC: [0xD08D], NFKD: [0x110F, 0x1174, 0x11AC] }, +{ source: [0xD08E], NFC: [0xD08E], NFD: [0x110F, 0x1174, 0x11AD], NFKC: [0xD08E], NFKD: [0x110F, 0x1174, 0x11AD] }, +{ source: [0xD08F], NFC: [0xD08F], NFD: [0x110F, 0x1174, 0x11AE], NFKC: [0xD08F], NFKD: [0x110F, 0x1174, 0x11AE] }, +{ source: [0xD090], NFC: [0xD090], NFD: [0x110F, 0x1174, 0x11AF], NFKC: [0xD090], NFKD: [0x110F, 0x1174, 0x11AF] }, +{ source: [0xD091], NFC: [0xD091], NFD: [0x110F, 0x1174, 0x11B0], NFKC: [0xD091], NFKD: [0x110F, 0x1174, 0x11B0] }, +{ source: [0xD092], NFC: [0xD092], NFD: [0x110F, 0x1174, 0x11B1], NFKC: [0xD092], NFKD: [0x110F, 0x1174, 0x11B1] }, +{ source: [0xD093], NFC: [0xD093], NFD: [0x110F, 0x1174, 0x11B2], NFKC: [0xD093], NFKD: [0x110F, 0x1174, 0x11B2] }, +{ source: [0xD094], NFC: [0xD094], NFD: [0x110F, 0x1174, 0x11B3], NFKC: [0xD094], NFKD: [0x110F, 0x1174, 0x11B3] }, +{ source: [0xD095], NFC: [0xD095], NFD: [0x110F, 0x1174, 0x11B4], NFKC: [0xD095], NFKD: [0x110F, 0x1174, 0x11B4] }, +{ source: [0xD096], NFC: [0xD096], NFD: [0x110F, 0x1174, 0x11B5], NFKC: [0xD096], NFKD: [0x110F, 0x1174, 0x11B5] }, +{ source: [0xD097], NFC: [0xD097], NFD: [0x110F, 0x1174, 0x11B6], NFKC: [0xD097], NFKD: [0x110F, 0x1174, 0x11B6] }, +{ source: [0xD098], NFC: [0xD098], NFD: [0x110F, 0x1174, 0x11B7], NFKC: [0xD098], NFKD: [0x110F, 0x1174, 0x11B7] }, +{ source: [0xD099], NFC: [0xD099], NFD: [0x110F, 0x1174, 0x11B8], NFKC: [0xD099], NFKD: [0x110F, 0x1174, 0x11B8] }, +{ source: [0xD09A], NFC: [0xD09A], NFD: [0x110F, 0x1174, 0x11B9], NFKC: [0xD09A], NFKD: [0x110F, 0x1174, 0x11B9] }, +{ source: [0xD09B], NFC: [0xD09B], NFD: [0x110F, 0x1174, 0x11BA], NFKC: [0xD09B], NFKD: [0x110F, 0x1174, 0x11BA] }, +{ source: [0xD09C], NFC: [0xD09C], NFD: [0x110F, 0x1174, 0x11BB], NFKC: [0xD09C], NFKD: [0x110F, 0x1174, 0x11BB] }, +{ source: [0xD09D], NFC: [0xD09D], NFD: [0x110F, 0x1174, 0x11BC], NFKC: [0xD09D], NFKD: [0x110F, 0x1174, 0x11BC] }, +{ source: [0xD09E], NFC: [0xD09E], NFD: [0x110F, 0x1174, 0x11BD], NFKC: [0xD09E], NFKD: [0x110F, 0x1174, 0x11BD] }, +{ source: [0xD09F], NFC: [0xD09F], NFD: [0x110F, 0x1174, 0x11BE], NFKC: [0xD09F], NFKD: [0x110F, 0x1174, 0x11BE] }, +{ source: [0xD0A0], NFC: [0xD0A0], NFD: [0x110F, 0x1174, 0x11BF], NFKC: [0xD0A0], NFKD: [0x110F, 0x1174, 0x11BF] }, +{ source: [0xD0A1], NFC: [0xD0A1], NFD: [0x110F, 0x1174, 0x11C0], NFKC: [0xD0A1], NFKD: [0x110F, 0x1174, 0x11C0] }, +{ source: [0xD0A2], NFC: [0xD0A2], NFD: [0x110F, 0x1174, 0x11C1], NFKC: [0xD0A2], NFKD: [0x110F, 0x1174, 0x11C1] }, +{ source: [0xD0A3], NFC: [0xD0A3], NFD: [0x110F, 0x1174, 0x11C2], NFKC: [0xD0A3], NFKD: [0x110F, 0x1174, 0x11C2] }, +{ source: [0xD0A4], NFC: [0xD0A4], NFD: [0x110F, 0x1175], NFKC: [0xD0A4], NFKD: [0x110F, 0x1175] }, +{ source: [0xD0A5], NFC: [0xD0A5], NFD: [0x110F, 0x1175, 0x11A8], NFKC: [0xD0A5], NFKD: [0x110F, 0x1175, 0x11A8] }, +{ source: [0xD0A6], NFC: [0xD0A6], NFD: [0x110F, 0x1175, 0x11A9], NFKC: [0xD0A6], NFKD: [0x110F, 0x1175, 0x11A9] }, +{ source: [0xD0A7], NFC: [0xD0A7], NFD: [0x110F, 0x1175, 0x11AA], NFKC: [0xD0A7], NFKD: [0x110F, 0x1175, 0x11AA] }, +{ source: [0xD0A8], NFC: [0xD0A8], NFD: [0x110F, 0x1175, 0x11AB], NFKC: [0xD0A8], NFKD: [0x110F, 0x1175, 0x11AB] }, +{ source: [0xD0A9], NFC: [0xD0A9], NFD: [0x110F, 0x1175, 0x11AC], NFKC: [0xD0A9], NFKD: [0x110F, 0x1175, 0x11AC] }, +{ source: [0xD0AA], NFC: [0xD0AA], NFD: [0x110F, 0x1175, 0x11AD], NFKC: [0xD0AA], NFKD: [0x110F, 0x1175, 0x11AD] }, +{ source: [0xD0AB], NFC: [0xD0AB], NFD: [0x110F, 0x1175, 0x11AE], NFKC: [0xD0AB], NFKD: [0x110F, 0x1175, 0x11AE] }, +{ source: [0xD0AC], NFC: [0xD0AC], NFD: [0x110F, 0x1175, 0x11AF], NFKC: [0xD0AC], NFKD: [0x110F, 0x1175, 0x11AF] }, +{ source: [0xD0AD], NFC: [0xD0AD], NFD: [0x110F, 0x1175, 0x11B0], NFKC: [0xD0AD], NFKD: [0x110F, 0x1175, 0x11B0] }, +{ source: [0xD0AE], NFC: [0xD0AE], NFD: [0x110F, 0x1175, 0x11B1], NFKC: [0xD0AE], NFKD: [0x110F, 0x1175, 0x11B1] }, +{ source: [0xD0AF], NFC: [0xD0AF], NFD: [0x110F, 0x1175, 0x11B2], NFKC: [0xD0AF], NFKD: [0x110F, 0x1175, 0x11B2] }, +{ source: [0xD0B0], NFC: [0xD0B0], NFD: [0x110F, 0x1175, 0x11B3], NFKC: [0xD0B0], NFKD: [0x110F, 0x1175, 0x11B3] }, +{ source: [0xD0B1], NFC: [0xD0B1], NFD: [0x110F, 0x1175, 0x11B4], NFKC: [0xD0B1], NFKD: [0x110F, 0x1175, 0x11B4] }, +{ source: [0xD0B2], NFC: [0xD0B2], NFD: [0x110F, 0x1175, 0x11B5], NFKC: [0xD0B2], NFKD: [0x110F, 0x1175, 0x11B5] }, +{ source: [0xD0B3], NFC: [0xD0B3], NFD: [0x110F, 0x1175, 0x11B6], NFKC: [0xD0B3], NFKD: [0x110F, 0x1175, 0x11B6] }, +{ source: [0xD0B4], NFC: [0xD0B4], NFD: [0x110F, 0x1175, 0x11B7], NFKC: [0xD0B4], NFKD: [0x110F, 0x1175, 0x11B7] }, +{ source: [0xD0B5], NFC: [0xD0B5], NFD: [0x110F, 0x1175, 0x11B8], NFKC: [0xD0B5], NFKD: [0x110F, 0x1175, 0x11B8] }, +{ source: [0xD0B6], NFC: [0xD0B6], NFD: [0x110F, 0x1175, 0x11B9], NFKC: [0xD0B6], NFKD: [0x110F, 0x1175, 0x11B9] }, +{ source: [0xD0B7], NFC: [0xD0B7], NFD: [0x110F, 0x1175, 0x11BA], NFKC: [0xD0B7], NFKD: [0x110F, 0x1175, 0x11BA] }, +{ source: [0xD0B8], NFC: [0xD0B8], NFD: [0x110F, 0x1175, 0x11BB], NFKC: [0xD0B8], NFKD: [0x110F, 0x1175, 0x11BB] }, +{ source: [0xD0B9], NFC: [0xD0B9], NFD: [0x110F, 0x1175, 0x11BC], NFKC: [0xD0B9], NFKD: [0x110F, 0x1175, 0x11BC] }, +{ source: [0xD0BA], NFC: [0xD0BA], NFD: [0x110F, 0x1175, 0x11BD], NFKC: [0xD0BA], NFKD: [0x110F, 0x1175, 0x11BD] }, +{ source: [0xD0BB], NFC: [0xD0BB], NFD: [0x110F, 0x1175, 0x11BE], NFKC: [0xD0BB], NFKD: [0x110F, 0x1175, 0x11BE] }, +{ source: [0xD0BC], NFC: [0xD0BC], NFD: [0x110F, 0x1175, 0x11BF], NFKC: [0xD0BC], NFKD: [0x110F, 0x1175, 0x11BF] }, +{ source: [0xD0BD], NFC: [0xD0BD], NFD: [0x110F, 0x1175, 0x11C0], NFKC: [0xD0BD], NFKD: [0x110F, 0x1175, 0x11C0] }, +{ source: [0xD0BE], NFC: [0xD0BE], NFD: [0x110F, 0x1175, 0x11C1], NFKC: [0xD0BE], NFKD: [0x110F, 0x1175, 0x11C1] }, +{ source: [0xD0BF], NFC: [0xD0BF], NFD: [0x110F, 0x1175, 0x11C2], NFKC: [0xD0BF], NFKD: [0x110F, 0x1175, 0x11C2] }, +{ source: [0xD0C0], NFC: [0xD0C0], NFD: [0x1110, 0x1161], NFKC: [0xD0C0], NFKD: [0x1110, 0x1161] }, +{ source: [0xD0C1], NFC: [0xD0C1], NFD: [0x1110, 0x1161, 0x11A8], NFKC: [0xD0C1], NFKD: [0x1110, 0x1161, 0x11A8] }, +{ source: [0xD0C2], NFC: [0xD0C2], NFD: [0x1110, 0x1161, 0x11A9], NFKC: [0xD0C2], NFKD: [0x1110, 0x1161, 0x11A9] }, +{ source: [0xD0C3], NFC: [0xD0C3], NFD: [0x1110, 0x1161, 0x11AA], NFKC: [0xD0C3], NFKD: [0x1110, 0x1161, 0x11AA] }, +{ source: [0xD0C4], NFC: [0xD0C4], NFD: [0x1110, 0x1161, 0x11AB], NFKC: [0xD0C4], NFKD: [0x1110, 0x1161, 0x11AB] }, +{ source: [0xD0C5], NFC: [0xD0C5], NFD: [0x1110, 0x1161, 0x11AC], NFKC: [0xD0C5], NFKD: [0x1110, 0x1161, 0x11AC] }, +{ source: [0xD0C6], NFC: [0xD0C6], NFD: [0x1110, 0x1161, 0x11AD], NFKC: [0xD0C6], NFKD: [0x1110, 0x1161, 0x11AD] }, +{ source: [0xD0C7], NFC: [0xD0C7], NFD: [0x1110, 0x1161, 0x11AE], NFKC: [0xD0C7], NFKD: [0x1110, 0x1161, 0x11AE] }, +{ source: [0xD0C8], NFC: [0xD0C8], NFD: [0x1110, 0x1161, 0x11AF], NFKC: [0xD0C8], NFKD: [0x1110, 0x1161, 0x11AF] }, +{ source: [0xD0C9], NFC: [0xD0C9], NFD: [0x1110, 0x1161, 0x11B0], NFKC: [0xD0C9], NFKD: [0x1110, 0x1161, 0x11B0] }, +{ source: [0xD0CA], NFC: [0xD0CA], NFD: [0x1110, 0x1161, 0x11B1], NFKC: [0xD0CA], NFKD: [0x1110, 0x1161, 0x11B1] }, +{ source: [0xD0CB], NFC: [0xD0CB], NFD: [0x1110, 0x1161, 0x11B2], NFKC: [0xD0CB], NFKD: [0x1110, 0x1161, 0x11B2] }, +{ source: [0xD0CC], NFC: [0xD0CC], NFD: [0x1110, 0x1161, 0x11B3], NFKC: [0xD0CC], NFKD: [0x1110, 0x1161, 0x11B3] }, +{ source: [0xD0CD], NFC: [0xD0CD], NFD: [0x1110, 0x1161, 0x11B4], NFKC: [0xD0CD], NFKD: [0x1110, 0x1161, 0x11B4] }, +{ source: [0xD0CE], NFC: [0xD0CE], NFD: [0x1110, 0x1161, 0x11B5], NFKC: [0xD0CE], NFKD: [0x1110, 0x1161, 0x11B5] }, +{ source: [0xD0CF], NFC: [0xD0CF], NFD: [0x1110, 0x1161, 0x11B6], NFKC: [0xD0CF], NFKD: [0x1110, 0x1161, 0x11B6] }, +{ source: [0xD0D0], NFC: [0xD0D0], NFD: [0x1110, 0x1161, 0x11B7], NFKC: [0xD0D0], NFKD: [0x1110, 0x1161, 0x11B7] }, +{ source: [0xD0D1], NFC: [0xD0D1], NFD: [0x1110, 0x1161, 0x11B8], NFKC: [0xD0D1], NFKD: [0x1110, 0x1161, 0x11B8] }, +{ source: [0xD0D2], NFC: [0xD0D2], NFD: [0x1110, 0x1161, 0x11B9], NFKC: [0xD0D2], NFKD: [0x1110, 0x1161, 0x11B9] }, +{ source: [0xD0D3], NFC: [0xD0D3], NFD: [0x1110, 0x1161, 0x11BA], NFKC: [0xD0D3], NFKD: [0x1110, 0x1161, 0x11BA] }, +{ source: [0xD0D4], NFC: [0xD0D4], NFD: [0x1110, 0x1161, 0x11BB], NFKC: [0xD0D4], NFKD: [0x1110, 0x1161, 0x11BB] }, +{ source: [0xD0D5], NFC: [0xD0D5], NFD: [0x1110, 0x1161, 0x11BC], NFKC: [0xD0D5], NFKD: [0x1110, 0x1161, 0x11BC] }, +{ source: [0xD0D6], NFC: [0xD0D6], NFD: [0x1110, 0x1161, 0x11BD], NFKC: [0xD0D6], NFKD: [0x1110, 0x1161, 0x11BD] }, +{ source: [0xD0D7], NFC: [0xD0D7], NFD: [0x1110, 0x1161, 0x11BE], NFKC: [0xD0D7], NFKD: [0x1110, 0x1161, 0x11BE] }, +{ source: [0xD0D8], NFC: [0xD0D8], NFD: [0x1110, 0x1161, 0x11BF], NFKC: [0xD0D8], NFKD: [0x1110, 0x1161, 0x11BF] }, +{ source: [0xD0D9], NFC: [0xD0D9], NFD: [0x1110, 0x1161, 0x11C0], NFKC: [0xD0D9], NFKD: [0x1110, 0x1161, 0x11C0] }, +{ source: [0xD0DA], NFC: [0xD0DA], NFD: [0x1110, 0x1161, 0x11C1], NFKC: [0xD0DA], NFKD: [0x1110, 0x1161, 0x11C1] }, +{ source: [0xD0DB], NFC: [0xD0DB], NFD: [0x1110, 0x1161, 0x11C2], NFKC: [0xD0DB], NFKD: [0x1110, 0x1161, 0x11C2] }, +{ source: [0xD0DC], NFC: [0xD0DC], NFD: [0x1110, 0x1162], NFKC: [0xD0DC], NFKD: [0x1110, 0x1162] }, +{ source: [0xD0DD], NFC: [0xD0DD], NFD: [0x1110, 0x1162, 0x11A8], NFKC: [0xD0DD], NFKD: [0x1110, 0x1162, 0x11A8] }, +{ source: [0xD0DE], NFC: [0xD0DE], NFD: [0x1110, 0x1162, 0x11A9], NFKC: [0xD0DE], NFKD: [0x1110, 0x1162, 0x11A9] }, +{ source: [0xD0DF], NFC: [0xD0DF], NFD: [0x1110, 0x1162, 0x11AA], NFKC: [0xD0DF], NFKD: [0x1110, 0x1162, 0x11AA] }, +{ source: [0xD0E0], NFC: [0xD0E0], NFD: [0x1110, 0x1162, 0x11AB], NFKC: [0xD0E0], NFKD: [0x1110, 0x1162, 0x11AB] }, +{ source: [0xD0E1], NFC: [0xD0E1], NFD: [0x1110, 0x1162, 0x11AC], NFKC: [0xD0E1], NFKD: [0x1110, 0x1162, 0x11AC] }, +{ source: [0xD0E2], NFC: [0xD0E2], NFD: [0x1110, 0x1162, 0x11AD], NFKC: [0xD0E2], NFKD: [0x1110, 0x1162, 0x11AD] }, +{ source: [0xD0E3], NFC: [0xD0E3], NFD: [0x1110, 0x1162, 0x11AE], NFKC: [0xD0E3], NFKD: [0x1110, 0x1162, 0x11AE] }, +{ source: [0xD0E4], NFC: [0xD0E4], NFD: [0x1110, 0x1162, 0x11AF], NFKC: [0xD0E4], NFKD: [0x1110, 0x1162, 0x11AF] }, +{ source: [0xD0E5], NFC: [0xD0E5], NFD: [0x1110, 0x1162, 0x11B0], NFKC: [0xD0E5], NFKD: [0x1110, 0x1162, 0x11B0] }, +{ source: [0xD0E6], NFC: [0xD0E6], NFD: [0x1110, 0x1162, 0x11B1], NFKC: [0xD0E6], NFKD: [0x1110, 0x1162, 0x11B1] }, +{ source: [0xD0E7], NFC: [0xD0E7], NFD: [0x1110, 0x1162, 0x11B2], NFKC: [0xD0E7], NFKD: [0x1110, 0x1162, 0x11B2] }, +{ source: [0xD0E8], NFC: [0xD0E8], NFD: [0x1110, 0x1162, 0x11B3], NFKC: [0xD0E8], NFKD: [0x1110, 0x1162, 0x11B3] }, +{ source: [0xD0E9], NFC: [0xD0E9], NFD: [0x1110, 0x1162, 0x11B4], NFKC: [0xD0E9], NFKD: [0x1110, 0x1162, 0x11B4] }, +{ source: [0xD0EA], NFC: [0xD0EA], NFD: [0x1110, 0x1162, 0x11B5], NFKC: [0xD0EA], NFKD: [0x1110, 0x1162, 0x11B5] }, +{ source: [0xD0EB], NFC: [0xD0EB], NFD: [0x1110, 0x1162, 0x11B6], NFKC: [0xD0EB], NFKD: [0x1110, 0x1162, 0x11B6] }, +{ source: [0xD0EC], NFC: [0xD0EC], NFD: [0x1110, 0x1162, 0x11B7], NFKC: [0xD0EC], NFKD: [0x1110, 0x1162, 0x11B7] }, +{ source: [0xD0ED], NFC: [0xD0ED], NFD: [0x1110, 0x1162, 0x11B8], NFKC: [0xD0ED], NFKD: [0x1110, 0x1162, 0x11B8] }, +{ source: [0xD0EE], NFC: [0xD0EE], NFD: [0x1110, 0x1162, 0x11B9], NFKC: [0xD0EE], NFKD: [0x1110, 0x1162, 0x11B9] }, +{ source: [0xD0EF], NFC: [0xD0EF], NFD: [0x1110, 0x1162, 0x11BA], NFKC: [0xD0EF], NFKD: [0x1110, 0x1162, 0x11BA] }, +{ source: [0xD0F0], NFC: [0xD0F0], NFD: [0x1110, 0x1162, 0x11BB], NFKC: [0xD0F0], NFKD: [0x1110, 0x1162, 0x11BB] }, +{ source: [0xD0F1], NFC: [0xD0F1], NFD: [0x1110, 0x1162, 0x11BC], NFKC: [0xD0F1], NFKD: [0x1110, 0x1162, 0x11BC] }, +{ source: [0xD0F2], NFC: [0xD0F2], NFD: [0x1110, 0x1162, 0x11BD], NFKC: [0xD0F2], NFKD: [0x1110, 0x1162, 0x11BD] }, +{ source: [0xD0F3], NFC: [0xD0F3], NFD: [0x1110, 0x1162, 0x11BE], NFKC: [0xD0F3], NFKD: [0x1110, 0x1162, 0x11BE] }, +{ source: [0xD0F4], NFC: [0xD0F4], NFD: [0x1110, 0x1162, 0x11BF], NFKC: [0xD0F4], NFKD: [0x1110, 0x1162, 0x11BF] }, +{ source: [0xD0F5], NFC: [0xD0F5], NFD: [0x1110, 0x1162, 0x11C0], NFKC: [0xD0F5], NFKD: [0x1110, 0x1162, 0x11C0] }, +{ source: [0xD0F6], NFC: [0xD0F6], NFD: [0x1110, 0x1162, 0x11C1], NFKC: [0xD0F6], NFKD: [0x1110, 0x1162, 0x11C1] }, +{ source: [0xD0F7], NFC: [0xD0F7], NFD: [0x1110, 0x1162, 0x11C2], NFKC: [0xD0F7], NFKD: [0x1110, 0x1162, 0x11C2] }, +{ source: [0xD0F8], NFC: [0xD0F8], NFD: [0x1110, 0x1163], NFKC: [0xD0F8], NFKD: [0x1110, 0x1163] }, +{ source: [0xD0F9], NFC: [0xD0F9], NFD: [0x1110, 0x1163, 0x11A8], NFKC: [0xD0F9], NFKD: [0x1110, 0x1163, 0x11A8] }, +{ source: [0xD0FA], NFC: [0xD0FA], NFD: [0x1110, 0x1163, 0x11A9], NFKC: [0xD0FA], NFKD: [0x1110, 0x1163, 0x11A9] }, +{ source: [0xD0FB], NFC: [0xD0FB], NFD: [0x1110, 0x1163, 0x11AA], NFKC: [0xD0FB], NFKD: [0x1110, 0x1163, 0x11AA] }, +{ source: [0xD0FC], NFC: [0xD0FC], NFD: [0x1110, 0x1163, 0x11AB], NFKC: [0xD0FC], NFKD: [0x1110, 0x1163, 0x11AB] }, +{ source: [0xD0FD], NFC: [0xD0FD], NFD: [0x1110, 0x1163, 0x11AC], NFKC: [0xD0FD], NFKD: [0x1110, 0x1163, 0x11AC] }, +{ source: [0xD0FE], NFC: [0xD0FE], NFD: [0x1110, 0x1163, 0x11AD], NFKC: [0xD0FE], NFKD: [0x1110, 0x1163, 0x11AD] }, +{ source: [0xD0FF], NFC: [0xD0FF], NFD: [0x1110, 0x1163, 0x11AE], NFKC: [0xD0FF], NFKD: [0x1110, 0x1163, 0x11AE] }, +{ source: [0xD100], NFC: [0xD100], NFD: [0x1110, 0x1163, 0x11AF], NFKC: [0xD100], NFKD: [0x1110, 0x1163, 0x11AF] }, +{ source: [0xD101], NFC: [0xD101], NFD: [0x1110, 0x1163, 0x11B0], NFKC: [0xD101], NFKD: [0x1110, 0x1163, 0x11B0] }, +{ source: [0xD102], NFC: [0xD102], NFD: [0x1110, 0x1163, 0x11B1], NFKC: [0xD102], NFKD: [0x1110, 0x1163, 0x11B1] }, +{ source: [0xD103], NFC: [0xD103], NFD: [0x1110, 0x1163, 0x11B2], NFKC: [0xD103], NFKD: [0x1110, 0x1163, 0x11B2] }, +{ source: [0xD104], NFC: [0xD104], NFD: [0x1110, 0x1163, 0x11B3], NFKC: [0xD104], NFKD: [0x1110, 0x1163, 0x11B3] }, +{ source: [0xD105], NFC: [0xD105], NFD: [0x1110, 0x1163, 0x11B4], NFKC: [0xD105], NFKD: [0x1110, 0x1163, 0x11B4] }, +{ source: [0xD106], NFC: [0xD106], NFD: [0x1110, 0x1163, 0x11B5], NFKC: [0xD106], NFKD: [0x1110, 0x1163, 0x11B5] }, +{ source: [0xD107], NFC: [0xD107], NFD: [0x1110, 0x1163, 0x11B6], NFKC: [0xD107], NFKD: [0x1110, 0x1163, 0x11B6] }, +{ source: [0xD108], NFC: [0xD108], NFD: [0x1110, 0x1163, 0x11B7], NFKC: [0xD108], NFKD: [0x1110, 0x1163, 0x11B7] }, +{ source: [0xD109], NFC: [0xD109], NFD: [0x1110, 0x1163, 0x11B8], NFKC: [0xD109], NFKD: [0x1110, 0x1163, 0x11B8] }, +{ source: [0xD10A], NFC: [0xD10A], NFD: [0x1110, 0x1163, 0x11B9], NFKC: [0xD10A], NFKD: [0x1110, 0x1163, 0x11B9] }, +{ source: [0xD10B], NFC: [0xD10B], NFD: [0x1110, 0x1163, 0x11BA], NFKC: [0xD10B], NFKD: [0x1110, 0x1163, 0x11BA] }, +{ source: [0xD10C], NFC: [0xD10C], NFD: [0x1110, 0x1163, 0x11BB], NFKC: [0xD10C], NFKD: [0x1110, 0x1163, 0x11BB] }, +{ source: [0xD10D], NFC: [0xD10D], NFD: [0x1110, 0x1163, 0x11BC], NFKC: [0xD10D], NFKD: [0x1110, 0x1163, 0x11BC] }, +{ source: [0xD10E], NFC: [0xD10E], NFD: [0x1110, 0x1163, 0x11BD], NFKC: [0xD10E], NFKD: [0x1110, 0x1163, 0x11BD] }, +{ source: [0xD10F], NFC: [0xD10F], NFD: [0x1110, 0x1163, 0x11BE], NFKC: [0xD10F], NFKD: [0x1110, 0x1163, 0x11BE] }, +{ source: [0xD110], NFC: [0xD110], NFD: [0x1110, 0x1163, 0x11BF], NFKC: [0xD110], NFKD: [0x1110, 0x1163, 0x11BF] }, +{ source: [0xD111], NFC: [0xD111], NFD: [0x1110, 0x1163, 0x11C0], NFKC: [0xD111], NFKD: [0x1110, 0x1163, 0x11C0] }, +{ source: [0xD112], NFC: [0xD112], NFD: [0x1110, 0x1163, 0x11C1], NFKC: [0xD112], NFKD: [0x1110, 0x1163, 0x11C1] }, +{ source: [0xD113], NFC: [0xD113], NFD: [0x1110, 0x1163, 0x11C2], NFKC: [0xD113], NFKD: [0x1110, 0x1163, 0x11C2] }, +{ source: [0xD114], NFC: [0xD114], NFD: [0x1110, 0x1164], NFKC: [0xD114], NFKD: [0x1110, 0x1164] }, +{ source: [0xD115], NFC: [0xD115], NFD: [0x1110, 0x1164, 0x11A8], NFKC: [0xD115], NFKD: [0x1110, 0x1164, 0x11A8] }, +{ source: [0xD116], NFC: [0xD116], NFD: [0x1110, 0x1164, 0x11A9], NFKC: [0xD116], NFKD: [0x1110, 0x1164, 0x11A9] }, +{ source: [0xD117], NFC: [0xD117], NFD: [0x1110, 0x1164, 0x11AA], NFKC: [0xD117], NFKD: [0x1110, 0x1164, 0x11AA] }, +{ source: [0xD118], NFC: [0xD118], NFD: [0x1110, 0x1164, 0x11AB], NFKC: [0xD118], NFKD: [0x1110, 0x1164, 0x11AB] }, +{ source: [0xD119], NFC: [0xD119], NFD: [0x1110, 0x1164, 0x11AC], NFKC: [0xD119], NFKD: [0x1110, 0x1164, 0x11AC] }, +{ source: [0xD11A], NFC: [0xD11A], NFD: [0x1110, 0x1164, 0x11AD], NFKC: [0xD11A], NFKD: [0x1110, 0x1164, 0x11AD] }, +{ source: [0xD11B], NFC: [0xD11B], NFD: [0x1110, 0x1164, 0x11AE], NFKC: [0xD11B], NFKD: [0x1110, 0x1164, 0x11AE] }, +{ source: [0xD11C], NFC: [0xD11C], NFD: [0x1110, 0x1164, 0x11AF], NFKC: [0xD11C], NFKD: [0x1110, 0x1164, 0x11AF] }, +{ source: [0xD11D], NFC: [0xD11D], NFD: [0x1110, 0x1164, 0x11B0], NFKC: [0xD11D], NFKD: [0x1110, 0x1164, 0x11B0] }, +{ source: [0xD11E], NFC: [0xD11E], NFD: [0x1110, 0x1164, 0x11B1], NFKC: [0xD11E], NFKD: [0x1110, 0x1164, 0x11B1] }, +{ source: [0xD11F], NFC: [0xD11F], NFD: [0x1110, 0x1164, 0x11B2], NFKC: [0xD11F], NFKD: [0x1110, 0x1164, 0x11B2] }, +{ source: [0xD120], NFC: [0xD120], NFD: [0x1110, 0x1164, 0x11B3], NFKC: [0xD120], NFKD: [0x1110, 0x1164, 0x11B3] }, +{ source: [0xD121], NFC: [0xD121], NFD: [0x1110, 0x1164, 0x11B4], NFKC: [0xD121], NFKD: [0x1110, 0x1164, 0x11B4] }, +{ source: [0xD122], NFC: [0xD122], NFD: [0x1110, 0x1164, 0x11B5], NFKC: [0xD122], NFKD: [0x1110, 0x1164, 0x11B5] }, +{ source: [0xD123], NFC: [0xD123], NFD: [0x1110, 0x1164, 0x11B6], NFKC: [0xD123], NFKD: [0x1110, 0x1164, 0x11B6] }, +{ source: [0xD124], NFC: [0xD124], NFD: [0x1110, 0x1164, 0x11B7], NFKC: [0xD124], NFKD: [0x1110, 0x1164, 0x11B7] }, +{ source: [0xD125], NFC: [0xD125], NFD: [0x1110, 0x1164, 0x11B8], NFKC: [0xD125], NFKD: [0x1110, 0x1164, 0x11B8] }, +{ source: [0xD126], NFC: [0xD126], NFD: [0x1110, 0x1164, 0x11B9], NFKC: [0xD126], NFKD: [0x1110, 0x1164, 0x11B9] }, +{ source: [0xD127], NFC: [0xD127], NFD: [0x1110, 0x1164, 0x11BA], NFKC: [0xD127], NFKD: [0x1110, 0x1164, 0x11BA] }, +{ source: [0xD128], NFC: [0xD128], NFD: [0x1110, 0x1164, 0x11BB], NFKC: [0xD128], NFKD: [0x1110, 0x1164, 0x11BB] }, +{ source: [0xD129], NFC: [0xD129], NFD: [0x1110, 0x1164, 0x11BC], NFKC: [0xD129], NFKD: [0x1110, 0x1164, 0x11BC] }, +{ source: [0xD12A], NFC: [0xD12A], NFD: [0x1110, 0x1164, 0x11BD], NFKC: [0xD12A], NFKD: [0x1110, 0x1164, 0x11BD] }, +{ source: [0xD12B], NFC: [0xD12B], NFD: [0x1110, 0x1164, 0x11BE], NFKC: [0xD12B], NFKD: [0x1110, 0x1164, 0x11BE] }, +{ source: [0xD12C], NFC: [0xD12C], NFD: [0x1110, 0x1164, 0x11BF], NFKC: [0xD12C], NFKD: [0x1110, 0x1164, 0x11BF] }, +{ source: [0xD12D], NFC: [0xD12D], NFD: [0x1110, 0x1164, 0x11C0], NFKC: [0xD12D], NFKD: [0x1110, 0x1164, 0x11C0] }, +{ source: [0xD12E], NFC: [0xD12E], NFD: [0x1110, 0x1164, 0x11C1], NFKC: [0xD12E], NFKD: [0x1110, 0x1164, 0x11C1] }, +{ source: [0xD12F], NFC: [0xD12F], NFD: [0x1110, 0x1164, 0x11C2], NFKC: [0xD12F], NFKD: [0x1110, 0x1164, 0x11C2] }, +{ source: [0xD130], NFC: [0xD130], NFD: [0x1110, 0x1165], NFKC: [0xD130], NFKD: [0x1110, 0x1165] }, +{ source: [0xD131], NFC: [0xD131], NFD: [0x1110, 0x1165, 0x11A8], NFKC: [0xD131], NFKD: [0x1110, 0x1165, 0x11A8] }, +{ source: [0xD132], NFC: [0xD132], NFD: [0x1110, 0x1165, 0x11A9], NFKC: [0xD132], NFKD: [0x1110, 0x1165, 0x11A9] }, +{ source: [0xD133], NFC: [0xD133], NFD: [0x1110, 0x1165, 0x11AA], NFKC: [0xD133], NFKD: [0x1110, 0x1165, 0x11AA] }, +{ source: [0xD134], NFC: [0xD134], NFD: [0x1110, 0x1165, 0x11AB], NFKC: [0xD134], NFKD: [0x1110, 0x1165, 0x11AB] }, +{ source: [0xD135], NFC: [0xD135], NFD: [0x1110, 0x1165, 0x11AC], NFKC: [0xD135], NFKD: [0x1110, 0x1165, 0x11AC] }, +{ source: [0xD136], NFC: [0xD136], NFD: [0x1110, 0x1165, 0x11AD], NFKC: [0xD136], NFKD: [0x1110, 0x1165, 0x11AD] }, +{ source: [0xD137], NFC: [0xD137], NFD: [0x1110, 0x1165, 0x11AE], NFKC: [0xD137], NFKD: [0x1110, 0x1165, 0x11AE] }, +{ source: [0xD138], NFC: [0xD138], NFD: [0x1110, 0x1165, 0x11AF], NFKC: [0xD138], NFKD: [0x1110, 0x1165, 0x11AF] }, +{ source: [0xD139], NFC: [0xD139], NFD: [0x1110, 0x1165, 0x11B0], NFKC: [0xD139], NFKD: [0x1110, 0x1165, 0x11B0] }, +{ source: [0xD13A], NFC: [0xD13A], NFD: [0x1110, 0x1165, 0x11B1], NFKC: [0xD13A], NFKD: [0x1110, 0x1165, 0x11B1] }, +{ source: [0xD13B], NFC: [0xD13B], NFD: [0x1110, 0x1165, 0x11B2], NFKC: [0xD13B], NFKD: [0x1110, 0x1165, 0x11B2] }, +{ source: [0xD13C], NFC: [0xD13C], NFD: [0x1110, 0x1165, 0x11B3], NFKC: [0xD13C], NFKD: [0x1110, 0x1165, 0x11B3] }, +{ source: [0xD13D], NFC: [0xD13D], NFD: [0x1110, 0x1165, 0x11B4], NFKC: [0xD13D], NFKD: [0x1110, 0x1165, 0x11B4] }, +{ source: [0xD13E], NFC: [0xD13E], NFD: [0x1110, 0x1165, 0x11B5], NFKC: [0xD13E], NFKD: [0x1110, 0x1165, 0x11B5] }, +{ source: [0xD13F], NFC: [0xD13F], NFD: [0x1110, 0x1165, 0x11B6], NFKC: [0xD13F], NFKD: [0x1110, 0x1165, 0x11B6] }, +{ source: [0xD140], NFC: [0xD140], NFD: [0x1110, 0x1165, 0x11B7], NFKC: [0xD140], NFKD: [0x1110, 0x1165, 0x11B7] }, +{ source: [0xD141], NFC: [0xD141], NFD: [0x1110, 0x1165, 0x11B8], NFKC: [0xD141], NFKD: [0x1110, 0x1165, 0x11B8] }, +{ source: [0xD142], NFC: [0xD142], NFD: [0x1110, 0x1165, 0x11B9], NFKC: [0xD142], NFKD: [0x1110, 0x1165, 0x11B9] }, +{ source: [0xD143], NFC: [0xD143], NFD: [0x1110, 0x1165, 0x11BA], NFKC: [0xD143], NFKD: [0x1110, 0x1165, 0x11BA] }, +{ source: [0xD144], NFC: [0xD144], NFD: [0x1110, 0x1165, 0x11BB], NFKC: [0xD144], NFKD: [0x1110, 0x1165, 0x11BB] }, +{ source: [0xD145], NFC: [0xD145], NFD: [0x1110, 0x1165, 0x11BC], NFKC: [0xD145], NFKD: [0x1110, 0x1165, 0x11BC] }, +{ source: [0xD146], NFC: [0xD146], NFD: [0x1110, 0x1165, 0x11BD], NFKC: [0xD146], NFKD: [0x1110, 0x1165, 0x11BD] }, +{ source: [0xD147], NFC: [0xD147], NFD: [0x1110, 0x1165, 0x11BE], NFKC: [0xD147], NFKD: [0x1110, 0x1165, 0x11BE] }, +{ source: [0xD148], NFC: [0xD148], NFD: [0x1110, 0x1165, 0x11BF], NFKC: [0xD148], NFKD: [0x1110, 0x1165, 0x11BF] }, +{ source: [0xD149], NFC: [0xD149], NFD: [0x1110, 0x1165, 0x11C0], NFKC: [0xD149], NFKD: [0x1110, 0x1165, 0x11C0] }, +{ source: [0xD14A], NFC: [0xD14A], NFD: [0x1110, 0x1165, 0x11C1], NFKC: [0xD14A], NFKD: [0x1110, 0x1165, 0x11C1] }, +{ source: [0xD14B], NFC: [0xD14B], NFD: [0x1110, 0x1165, 0x11C2], NFKC: [0xD14B], NFKD: [0x1110, 0x1165, 0x11C2] }, +{ source: [0xD14C], NFC: [0xD14C], NFD: [0x1110, 0x1166], NFKC: [0xD14C], NFKD: [0x1110, 0x1166] }, +{ source: [0xD14D], NFC: [0xD14D], NFD: [0x1110, 0x1166, 0x11A8], NFKC: [0xD14D], NFKD: [0x1110, 0x1166, 0x11A8] }, +{ source: [0xD14E], NFC: [0xD14E], NFD: [0x1110, 0x1166, 0x11A9], NFKC: [0xD14E], NFKD: [0x1110, 0x1166, 0x11A9] }, +{ source: [0xD14F], NFC: [0xD14F], NFD: [0x1110, 0x1166, 0x11AA], NFKC: [0xD14F], NFKD: [0x1110, 0x1166, 0x11AA] }, +{ source: [0xD150], NFC: [0xD150], NFD: [0x1110, 0x1166, 0x11AB], NFKC: [0xD150], NFKD: [0x1110, 0x1166, 0x11AB] }, +{ source: [0xD151], NFC: [0xD151], NFD: [0x1110, 0x1166, 0x11AC], NFKC: [0xD151], NFKD: [0x1110, 0x1166, 0x11AC] }, +{ source: [0xD152], NFC: [0xD152], NFD: [0x1110, 0x1166, 0x11AD], NFKC: [0xD152], NFKD: [0x1110, 0x1166, 0x11AD] }, +{ source: [0xD153], NFC: [0xD153], NFD: [0x1110, 0x1166, 0x11AE], NFKC: [0xD153], NFKD: [0x1110, 0x1166, 0x11AE] }, +{ source: [0xD154], NFC: [0xD154], NFD: [0x1110, 0x1166, 0x11AF], NFKC: [0xD154], NFKD: [0x1110, 0x1166, 0x11AF] }, +{ source: [0xD155], NFC: [0xD155], NFD: [0x1110, 0x1166, 0x11B0], NFKC: [0xD155], NFKD: [0x1110, 0x1166, 0x11B0] }, +{ source: [0xD156], NFC: [0xD156], NFD: [0x1110, 0x1166, 0x11B1], NFKC: [0xD156], NFKD: [0x1110, 0x1166, 0x11B1] }, +{ source: [0xD157], NFC: [0xD157], NFD: [0x1110, 0x1166, 0x11B2], NFKC: [0xD157], NFKD: [0x1110, 0x1166, 0x11B2] }, +{ source: [0xD158], NFC: [0xD158], NFD: [0x1110, 0x1166, 0x11B3], NFKC: [0xD158], NFKD: [0x1110, 0x1166, 0x11B3] }, +{ source: [0xD159], NFC: [0xD159], NFD: [0x1110, 0x1166, 0x11B4], NFKC: [0xD159], NFKD: [0x1110, 0x1166, 0x11B4] }, +{ source: [0xD15A], NFC: [0xD15A], NFD: [0x1110, 0x1166, 0x11B5], NFKC: [0xD15A], NFKD: [0x1110, 0x1166, 0x11B5] }, +{ source: [0xD15B], NFC: [0xD15B], NFD: [0x1110, 0x1166, 0x11B6], NFKC: [0xD15B], NFKD: [0x1110, 0x1166, 0x11B6] }, +{ source: [0xD15C], NFC: [0xD15C], NFD: [0x1110, 0x1166, 0x11B7], NFKC: [0xD15C], NFKD: [0x1110, 0x1166, 0x11B7] }, +{ source: [0xD15D], NFC: [0xD15D], NFD: [0x1110, 0x1166, 0x11B8], NFKC: [0xD15D], NFKD: [0x1110, 0x1166, 0x11B8] }, +{ source: [0xD15E], NFC: [0xD15E], NFD: [0x1110, 0x1166, 0x11B9], NFKC: [0xD15E], NFKD: [0x1110, 0x1166, 0x11B9] }, +{ source: [0xD15F], NFC: [0xD15F], NFD: [0x1110, 0x1166, 0x11BA], NFKC: [0xD15F], NFKD: [0x1110, 0x1166, 0x11BA] }, +{ source: [0xD160], NFC: [0xD160], NFD: [0x1110, 0x1166, 0x11BB], NFKC: [0xD160], NFKD: [0x1110, 0x1166, 0x11BB] }, +{ source: [0xD161], NFC: [0xD161], NFD: [0x1110, 0x1166, 0x11BC], NFKC: [0xD161], NFKD: [0x1110, 0x1166, 0x11BC] }, +{ source: [0xD162], NFC: [0xD162], NFD: [0x1110, 0x1166, 0x11BD], NFKC: [0xD162], NFKD: [0x1110, 0x1166, 0x11BD] }, +{ source: [0xD163], NFC: [0xD163], NFD: [0x1110, 0x1166, 0x11BE], NFKC: [0xD163], NFKD: [0x1110, 0x1166, 0x11BE] }, +{ source: [0xD164], NFC: [0xD164], NFD: [0x1110, 0x1166, 0x11BF], NFKC: [0xD164], NFKD: [0x1110, 0x1166, 0x11BF] }, +{ source: [0xD165], NFC: [0xD165], NFD: [0x1110, 0x1166, 0x11C0], NFKC: [0xD165], NFKD: [0x1110, 0x1166, 0x11C0] }, +{ source: [0xD166], NFC: [0xD166], NFD: [0x1110, 0x1166, 0x11C1], NFKC: [0xD166], NFKD: [0x1110, 0x1166, 0x11C1] }, +{ source: [0xD167], NFC: [0xD167], NFD: [0x1110, 0x1166, 0x11C2], NFKC: [0xD167], NFKD: [0x1110, 0x1166, 0x11C2] }, +{ source: [0xD168], NFC: [0xD168], NFD: [0x1110, 0x1167], NFKC: [0xD168], NFKD: [0x1110, 0x1167] }, +{ source: [0xD169], NFC: [0xD169], NFD: [0x1110, 0x1167, 0x11A8], NFKC: [0xD169], NFKD: [0x1110, 0x1167, 0x11A8] }, +{ source: [0xD16A], NFC: [0xD16A], NFD: [0x1110, 0x1167, 0x11A9], NFKC: [0xD16A], NFKD: [0x1110, 0x1167, 0x11A9] }, +{ source: [0xD16B], NFC: [0xD16B], NFD: [0x1110, 0x1167, 0x11AA], NFKC: [0xD16B], NFKD: [0x1110, 0x1167, 0x11AA] }, +{ source: [0xD16C], NFC: [0xD16C], NFD: [0x1110, 0x1167, 0x11AB], NFKC: [0xD16C], NFKD: [0x1110, 0x1167, 0x11AB] }, +{ source: [0xD16D], NFC: [0xD16D], NFD: [0x1110, 0x1167, 0x11AC], NFKC: [0xD16D], NFKD: [0x1110, 0x1167, 0x11AC] }, +{ source: [0xD16E], NFC: [0xD16E], NFD: [0x1110, 0x1167, 0x11AD], NFKC: [0xD16E], NFKD: [0x1110, 0x1167, 0x11AD] }, +{ source: [0xD16F], NFC: [0xD16F], NFD: [0x1110, 0x1167, 0x11AE], NFKC: [0xD16F], NFKD: [0x1110, 0x1167, 0x11AE] }, +{ source: [0xD170], NFC: [0xD170], NFD: [0x1110, 0x1167, 0x11AF], NFKC: [0xD170], NFKD: [0x1110, 0x1167, 0x11AF] }, +{ source: [0xD171], NFC: [0xD171], NFD: [0x1110, 0x1167, 0x11B0], NFKC: [0xD171], NFKD: [0x1110, 0x1167, 0x11B0] }, +{ source: [0xD172], NFC: [0xD172], NFD: [0x1110, 0x1167, 0x11B1], NFKC: [0xD172], NFKD: [0x1110, 0x1167, 0x11B1] }, +{ source: [0xD173], NFC: [0xD173], NFD: [0x1110, 0x1167, 0x11B2], NFKC: [0xD173], NFKD: [0x1110, 0x1167, 0x11B2] }, +{ source: [0xD174], NFC: [0xD174], NFD: [0x1110, 0x1167, 0x11B3], NFKC: [0xD174], NFKD: [0x1110, 0x1167, 0x11B3] }, +{ source: [0xD175], NFC: [0xD175], NFD: [0x1110, 0x1167, 0x11B4], NFKC: [0xD175], NFKD: [0x1110, 0x1167, 0x11B4] }, +{ source: [0xD176], NFC: [0xD176], NFD: [0x1110, 0x1167, 0x11B5], NFKC: [0xD176], NFKD: [0x1110, 0x1167, 0x11B5] }, +{ source: [0xD177], NFC: [0xD177], NFD: [0x1110, 0x1167, 0x11B6], NFKC: [0xD177], NFKD: [0x1110, 0x1167, 0x11B6] }, +{ source: [0xD178], NFC: [0xD178], NFD: [0x1110, 0x1167, 0x11B7], NFKC: [0xD178], NFKD: [0x1110, 0x1167, 0x11B7] }, +{ source: [0xD179], NFC: [0xD179], NFD: [0x1110, 0x1167, 0x11B8], NFKC: [0xD179], NFKD: [0x1110, 0x1167, 0x11B8] }, +{ source: [0xD17A], NFC: [0xD17A], NFD: [0x1110, 0x1167, 0x11B9], NFKC: [0xD17A], NFKD: [0x1110, 0x1167, 0x11B9] }, +{ source: [0xD17B], NFC: [0xD17B], NFD: [0x1110, 0x1167, 0x11BA], NFKC: [0xD17B], NFKD: [0x1110, 0x1167, 0x11BA] }, +{ source: [0xD17C], NFC: [0xD17C], NFD: [0x1110, 0x1167, 0x11BB], NFKC: [0xD17C], NFKD: [0x1110, 0x1167, 0x11BB] }, +{ source: [0xD17D], NFC: [0xD17D], NFD: [0x1110, 0x1167, 0x11BC], NFKC: [0xD17D], NFKD: [0x1110, 0x1167, 0x11BC] }, +{ source: [0xD17E], NFC: [0xD17E], NFD: [0x1110, 0x1167, 0x11BD], NFKC: [0xD17E], NFKD: [0x1110, 0x1167, 0x11BD] }, +{ source: [0xD17F], NFC: [0xD17F], NFD: [0x1110, 0x1167, 0x11BE], NFKC: [0xD17F], NFKD: [0x1110, 0x1167, 0x11BE] }, +{ source: [0xD180], NFC: [0xD180], NFD: [0x1110, 0x1167, 0x11BF], NFKC: [0xD180], NFKD: [0x1110, 0x1167, 0x11BF] }, +{ source: [0xD181], NFC: [0xD181], NFD: [0x1110, 0x1167, 0x11C0], NFKC: [0xD181], NFKD: [0x1110, 0x1167, 0x11C0] }, +{ source: [0xD182], NFC: [0xD182], NFD: [0x1110, 0x1167, 0x11C1], NFKC: [0xD182], NFKD: [0x1110, 0x1167, 0x11C1] }, +{ source: [0xD183], NFC: [0xD183], NFD: [0x1110, 0x1167, 0x11C2], NFKC: [0xD183], NFKD: [0x1110, 0x1167, 0x11C2] }, +{ source: [0xD184], NFC: [0xD184], NFD: [0x1110, 0x1168], NFKC: [0xD184], NFKD: [0x1110, 0x1168] }, +{ source: [0xD185], NFC: [0xD185], NFD: [0x1110, 0x1168, 0x11A8], NFKC: [0xD185], NFKD: [0x1110, 0x1168, 0x11A8] }, +{ source: [0xD186], NFC: [0xD186], NFD: [0x1110, 0x1168, 0x11A9], NFKC: [0xD186], NFKD: [0x1110, 0x1168, 0x11A9] }, +{ source: [0xD187], NFC: [0xD187], NFD: [0x1110, 0x1168, 0x11AA], NFKC: [0xD187], NFKD: [0x1110, 0x1168, 0x11AA] }, +{ source: [0xD188], NFC: [0xD188], NFD: [0x1110, 0x1168, 0x11AB], NFKC: [0xD188], NFKD: [0x1110, 0x1168, 0x11AB] }, +{ source: [0xD189], NFC: [0xD189], NFD: [0x1110, 0x1168, 0x11AC], NFKC: [0xD189], NFKD: [0x1110, 0x1168, 0x11AC] }, +{ source: [0xD18A], NFC: [0xD18A], NFD: [0x1110, 0x1168, 0x11AD], NFKC: [0xD18A], NFKD: [0x1110, 0x1168, 0x11AD] }, +{ source: [0xD18B], NFC: [0xD18B], NFD: [0x1110, 0x1168, 0x11AE], NFKC: [0xD18B], NFKD: [0x1110, 0x1168, 0x11AE] }, +{ source: [0xD18C], NFC: [0xD18C], NFD: [0x1110, 0x1168, 0x11AF], NFKC: [0xD18C], NFKD: [0x1110, 0x1168, 0x11AF] }, +{ source: [0xD18D], NFC: [0xD18D], NFD: [0x1110, 0x1168, 0x11B0], NFKC: [0xD18D], NFKD: [0x1110, 0x1168, 0x11B0] }, +{ source: [0xD18E], NFC: [0xD18E], NFD: [0x1110, 0x1168, 0x11B1], NFKC: [0xD18E], NFKD: [0x1110, 0x1168, 0x11B1] }, +{ source: [0xD18F], NFC: [0xD18F], NFD: [0x1110, 0x1168, 0x11B2], NFKC: [0xD18F], NFKD: [0x1110, 0x1168, 0x11B2] }, +{ source: [0xD190], NFC: [0xD190], NFD: [0x1110, 0x1168, 0x11B3], NFKC: [0xD190], NFKD: [0x1110, 0x1168, 0x11B3] }, +{ source: [0xD191], NFC: [0xD191], NFD: [0x1110, 0x1168, 0x11B4], NFKC: [0xD191], NFKD: [0x1110, 0x1168, 0x11B4] }, +{ source: [0xD192], NFC: [0xD192], NFD: [0x1110, 0x1168, 0x11B5], NFKC: [0xD192], NFKD: [0x1110, 0x1168, 0x11B5] }, +{ source: [0xD193], NFC: [0xD193], NFD: [0x1110, 0x1168, 0x11B6], NFKC: [0xD193], NFKD: [0x1110, 0x1168, 0x11B6] }, +{ source: [0xD194], NFC: [0xD194], NFD: [0x1110, 0x1168, 0x11B7], NFKC: [0xD194], NFKD: [0x1110, 0x1168, 0x11B7] }, +{ source: [0xD195], NFC: [0xD195], NFD: [0x1110, 0x1168, 0x11B8], NFKC: [0xD195], NFKD: [0x1110, 0x1168, 0x11B8] }, +{ source: [0xD196], NFC: [0xD196], NFD: [0x1110, 0x1168, 0x11B9], NFKC: [0xD196], NFKD: [0x1110, 0x1168, 0x11B9] }, +{ source: [0xD197], NFC: [0xD197], NFD: [0x1110, 0x1168, 0x11BA], NFKC: [0xD197], NFKD: [0x1110, 0x1168, 0x11BA] }, +{ source: [0xD198], NFC: [0xD198], NFD: [0x1110, 0x1168, 0x11BB], NFKC: [0xD198], NFKD: [0x1110, 0x1168, 0x11BB] }, +{ source: [0xD199], NFC: [0xD199], NFD: [0x1110, 0x1168, 0x11BC], NFKC: [0xD199], NFKD: [0x1110, 0x1168, 0x11BC] }, +{ source: [0xD19A], NFC: [0xD19A], NFD: [0x1110, 0x1168, 0x11BD], NFKC: [0xD19A], NFKD: [0x1110, 0x1168, 0x11BD] }, +{ source: [0xD19B], NFC: [0xD19B], NFD: [0x1110, 0x1168, 0x11BE], NFKC: [0xD19B], NFKD: [0x1110, 0x1168, 0x11BE] }, +{ source: [0xD19C], NFC: [0xD19C], NFD: [0x1110, 0x1168, 0x11BF], NFKC: [0xD19C], NFKD: [0x1110, 0x1168, 0x11BF] }, +{ source: [0xD19D], NFC: [0xD19D], NFD: [0x1110, 0x1168, 0x11C0], NFKC: [0xD19D], NFKD: [0x1110, 0x1168, 0x11C0] }, +{ source: [0xD19E], NFC: [0xD19E], NFD: [0x1110, 0x1168, 0x11C1], NFKC: [0xD19E], NFKD: [0x1110, 0x1168, 0x11C1] }, +{ source: [0xD19F], NFC: [0xD19F], NFD: [0x1110, 0x1168, 0x11C2], NFKC: [0xD19F], NFKD: [0x1110, 0x1168, 0x11C2] }, +{ source: [0xD1A0], NFC: [0xD1A0], NFD: [0x1110, 0x1169], NFKC: [0xD1A0], NFKD: [0x1110, 0x1169] }, +{ source: [0xD1A1], NFC: [0xD1A1], NFD: [0x1110, 0x1169, 0x11A8], NFKC: [0xD1A1], NFKD: [0x1110, 0x1169, 0x11A8] }, +{ source: [0xD1A2], NFC: [0xD1A2], NFD: [0x1110, 0x1169, 0x11A9], NFKC: [0xD1A2], NFKD: [0x1110, 0x1169, 0x11A9] }, +{ source: [0xD1A3], NFC: [0xD1A3], NFD: [0x1110, 0x1169, 0x11AA], NFKC: [0xD1A3], NFKD: [0x1110, 0x1169, 0x11AA] }, +{ source: [0xD1A4], NFC: [0xD1A4], NFD: [0x1110, 0x1169, 0x11AB], NFKC: [0xD1A4], NFKD: [0x1110, 0x1169, 0x11AB] }, +{ source: [0xD1A5], NFC: [0xD1A5], NFD: [0x1110, 0x1169, 0x11AC], NFKC: [0xD1A5], NFKD: [0x1110, 0x1169, 0x11AC] }, +{ source: [0xD1A6], NFC: [0xD1A6], NFD: [0x1110, 0x1169, 0x11AD], NFKC: [0xD1A6], NFKD: [0x1110, 0x1169, 0x11AD] }, +{ source: [0xD1A7], NFC: [0xD1A7], NFD: [0x1110, 0x1169, 0x11AE], NFKC: [0xD1A7], NFKD: [0x1110, 0x1169, 0x11AE] }, +{ source: [0xD1A8], NFC: [0xD1A8], NFD: [0x1110, 0x1169, 0x11AF], NFKC: [0xD1A8], NFKD: [0x1110, 0x1169, 0x11AF] }, +{ source: [0xD1A9], NFC: [0xD1A9], NFD: [0x1110, 0x1169, 0x11B0], NFKC: [0xD1A9], NFKD: [0x1110, 0x1169, 0x11B0] }, +{ source: [0xD1AA], NFC: [0xD1AA], NFD: [0x1110, 0x1169, 0x11B1], NFKC: [0xD1AA], NFKD: [0x1110, 0x1169, 0x11B1] }, +{ source: [0xD1AB], NFC: [0xD1AB], NFD: [0x1110, 0x1169, 0x11B2], NFKC: [0xD1AB], NFKD: [0x1110, 0x1169, 0x11B2] }, +{ source: [0xD1AC], NFC: [0xD1AC], NFD: [0x1110, 0x1169, 0x11B3], NFKC: [0xD1AC], NFKD: [0x1110, 0x1169, 0x11B3] }, +{ source: [0xD1AD], NFC: [0xD1AD], NFD: [0x1110, 0x1169, 0x11B4], NFKC: [0xD1AD], NFKD: [0x1110, 0x1169, 0x11B4] }, +{ source: [0xD1AE], NFC: [0xD1AE], NFD: [0x1110, 0x1169, 0x11B5], NFKC: [0xD1AE], NFKD: [0x1110, 0x1169, 0x11B5] }, +{ source: [0xD1AF], NFC: [0xD1AF], NFD: [0x1110, 0x1169, 0x11B6], NFKC: [0xD1AF], NFKD: [0x1110, 0x1169, 0x11B6] }, +{ source: [0xD1B0], NFC: [0xD1B0], NFD: [0x1110, 0x1169, 0x11B7], NFKC: [0xD1B0], NFKD: [0x1110, 0x1169, 0x11B7] }, +{ source: [0xD1B1], NFC: [0xD1B1], NFD: [0x1110, 0x1169, 0x11B8], NFKC: [0xD1B1], NFKD: [0x1110, 0x1169, 0x11B8] }, +{ source: [0xD1B2], NFC: [0xD1B2], NFD: [0x1110, 0x1169, 0x11B9], NFKC: [0xD1B2], NFKD: [0x1110, 0x1169, 0x11B9] }, +{ source: [0xD1B3], NFC: [0xD1B3], NFD: [0x1110, 0x1169, 0x11BA], NFKC: [0xD1B3], NFKD: [0x1110, 0x1169, 0x11BA] }, +{ source: [0xD1B4], NFC: [0xD1B4], NFD: [0x1110, 0x1169, 0x11BB], NFKC: [0xD1B4], NFKD: [0x1110, 0x1169, 0x11BB] }, +{ source: [0xD1B5], NFC: [0xD1B5], NFD: [0x1110, 0x1169, 0x11BC], NFKC: [0xD1B5], NFKD: [0x1110, 0x1169, 0x11BC] }, +{ source: [0xD1B6], NFC: [0xD1B6], NFD: [0x1110, 0x1169, 0x11BD], NFKC: [0xD1B6], NFKD: [0x1110, 0x1169, 0x11BD] }, +{ source: [0xD1B7], NFC: [0xD1B7], NFD: [0x1110, 0x1169, 0x11BE], NFKC: [0xD1B7], NFKD: [0x1110, 0x1169, 0x11BE] }, +{ source: [0xD1B8], NFC: [0xD1B8], NFD: [0x1110, 0x1169, 0x11BF], NFKC: [0xD1B8], NFKD: [0x1110, 0x1169, 0x11BF] }, +{ source: [0xD1B9], NFC: [0xD1B9], NFD: [0x1110, 0x1169, 0x11C0], NFKC: [0xD1B9], NFKD: [0x1110, 0x1169, 0x11C0] }, +{ source: [0xD1BA], NFC: [0xD1BA], NFD: [0x1110, 0x1169, 0x11C1], NFKC: [0xD1BA], NFKD: [0x1110, 0x1169, 0x11C1] }, +{ source: [0xD1BB], NFC: [0xD1BB], NFD: [0x1110, 0x1169, 0x11C2], NFKC: [0xD1BB], NFKD: [0x1110, 0x1169, 0x11C2] }, +{ source: [0xD1BC], NFC: [0xD1BC], NFD: [0x1110, 0x116A], NFKC: [0xD1BC], NFKD: [0x1110, 0x116A] }, +{ source: [0xD1BD], NFC: [0xD1BD], NFD: [0x1110, 0x116A, 0x11A8], NFKC: [0xD1BD], NFKD: [0x1110, 0x116A, 0x11A8] }, +{ source: [0xD1BE], NFC: [0xD1BE], NFD: [0x1110, 0x116A, 0x11A9], NFKC: [0xD1BE], NFKD: [0x1110, 0x116A, 0x11A9] }, +{ source: [0xD1BF], NFC: [0xD1BF], NFD: [0x1110, 0x116A, 0x11AA], NFKC: [0xD1BF], NFKD: [0x1110, 0x116A, 0x11AA] }, +{ source: [0xD1C0], NFC: [0xD1C0], NFD: [0x1110, 0x116A, 0x11AB], NFKC: [0xD1C0], NFKD: [0x1110, 0x116A, 0x11AB] }, +{ source: [0xD1C1], NFC: [0xD1C1], NFD: [0x1110, 0x116A, 0x11AC], NFKC: [0xD1C1], NFKD: [0x1110, 0x116A, 0x11AC] }, +{ source: [0xD1C2], NFC: [0xD1C2], NFD: [0x1110, 0x116A, 0x11AD], NFKC: [0xD1C2], NFKD: [0x1110, 0x116A, 0x11AD] }, +{ source: [0xD1C3], NFC: [0xD1C3], NFD: [0x1110, 0x116A, 0x11AE], NFKC: [0xD1C3], NFKD: [0x1110, 0x116A, 0x11AE] }, +{ source: [0xD1C4], NFC: [0xD1C4], NFD: [0x1110, 0x116A, 0x11AF], NFKC: [0xD1C4], NFKD: [0x1110, 0x116A, 0x11AF] }, +{ source: [0xD1C5], NFC: [0xD1C5], NFD: [0x1110, 0x116A, 0x11B0], NFKC: [0xD1C5], NFKD: [0x1110, 0x116A, 0x11B0] }, +{ source: [0xD1C6], NFC: [0xD1C6], NFD: [0x1110, 0x116A, 0x11B1], NFKC: [0xD1C6], NFKD: [0x1110, 0x116A, 0x11B1] }, +{ source: [0xD1C7], NFC: [0xD1C7], NFD: [0x1110, 0x116A, 0x11B2], NFKC: [0xD1C7], NFKD: [0x1110, 0x116A, 0x11B2] }, +{ source: [0xD1C8], NFC: [0xD1C8], NFD: [0x1110, 0x116A, 0x11B3], NFKC: [0xD1C8], NFKD: [0x1110, 0x116A, 0x11B3] }, +{ source: [0xD1C9], NFC: [0xD1C9], NFD: [0x1110, 0x116A, 0x11B4], NFKC: [0xD1C9], NFKD: [0x1110, 0x116A, 0x11B4] }, +{ source: [0xD1CA], NFC: [0xD1CA], NFD: [0x1110, 0x116A, 0x11B5], NFKC: [0xD1CA], NFKD: [0x1110, 0x116A, 0x11B5] }, +{ source: [0xD1CB], NFC: [0xD1CB], NFD: [0x1110, 0x116A, 0x11B6], NFKC: [0xD1CB], NFKD: [0x1110, 0x116A, 0x11B6] }, +{ source: [0xD1CC], NFC: [0xD1CC], NFD: [0x1110, 0x116A, 0x11B7], NFKC: [0xD1CC], NFKD: [0x1110, 0x116A, 0x11B7] }, +{ source: [0xD1CD], NFC: [0xD1CD], NFD: [0x1110, 0x116A, 0x11B8], NFKC: [0xD1CD], NFKD: [0x1110, 0x116A, 0x11B8] }, +{ source: [0xD1CE], NFC: [0xD1CE], NFD: [0x1110, 0x116A, 0x11B9], NFKC: [0xD1CE], NFKD: [0x1110, 0x116A, 0x11B9] }, +{ source: [0xD1CF], NFC: [0xD1CF], NFD: [0x1110, 0x116A, 0x11BA], NFKC: [0xD1CF], NFKD: [0x1110, 0x116A, 0x11BA] }, +{ source: [0xD1D0], NFC: [0xD1D0], NFD: [0x1110, 0x116A, 0x11BB], NFKC: [0xD1D0], NFKD: [0x1110, 0x116A, 0x11BB] }, +{ source: [0xD1D1], NFC: [0xD1D1], NFD: [0x1110, 0x116A, 0x11BC], NFKC: [0xD1D1], NFKD: [0x1110, 0x116A, 0x11BC] }, +{ source: [0xD1D2], NFC: [0xD1D2], NFD: [0x1110, 0x116A, 0x11BD], NFKC: [0xD1D2], NFKD: [0x1110, 0x116A, 0x11BD] }, +{ source: [0xD1D3], NFC: [0xD1D3], NFD: [0x1110, 0x116A, 0x11BE], NFKC: [0xD1D3], NFKD: [0x1110, 0x116A, 0x11BE] }, +{ source: [0xD1D4], NFC: [0xD1D4], NFD: [0x1110, 0x116A, 0x11BF], NFKC: [0xD1D4], NFKD: [0x1110, 0x116A, 0x11BF] }, +{ source: [0xD1D5], NFC: [0xD1D5], NFD: [0x1110, 0x116A, 0x11C0], NFKC: [0xD1D5], NFKD: [0x1110, 0x116A, 0x11C0] }, +{ source: [0xD1D6], NFC: [0xD1D6], NFD: [0x1110, 0x116A, 0x11C1], NFKC: [0xD1D6], NFKD: [0x1110, 0x116A, 0x11C1] }, +{ source: [0xD1D7], NFC: [0xD1D7], NFD: [0x1110, 0x116A, 0x11C2], NFKC: [0xD1D7], NFKD: [0x1110, 0x116A, 0x11C2] }, +{ source: [0xD1D8], NFC: [0xD1D8], NFD: [0x1110, 0x116B], NFKC: [0xD1D8], NFKD: [0x1110, 0x116B] }, +{ source: [0xD1D9], NFC: [0xD1D9], NFD: [0x1110, 0x116B, 0x11A8], NFKC: [0xD1D9], NFKD: [0x1110, 0x116B, 0x11A8] }, +{ source: [0xD1DA], NFC: [0xD1DA], NFD: [0x1110, 0x116B, 0x11A9], NFKC: [0xD1DA], NFKD: [0x1110, 0x116B, 0x11A9] }, +{ source: [0xD1DB], NFC: [0xD1DB], NFD: [0x1110, 0x116B, 0x11AA], NFKC: [0xD1DB], NFKD: [0x1110, 0x116B, 0x11AA] }, +{ source: [0xD1DC], NFC: [0xD1DC], NFD: [0x1110, 0x116B, 0x11AB], NFKC: [0xD1DC], NFKD: [0x1110, 0x116B, 0x11AB] }, +{ source: [0xD1DD], NFC: [0xD1DD], NFD: [0x1110, 0x116B, 0x11AC], NFKC: [0xD1DD], NFKD: [0x1110, 0x116B, 0x11AC] }, +{ source: [0xD1DE], NFC: [0xD1DE], NFD: [0x1110, 0x116B, 0x11AD], NFKC: [0xD1DE], NFKD: [0x1110, 0x116B, 0x11AD] }, +{ source: [0xD1DF], NFC: [0xD1DF], NFD: [0x1110, 0x116B, 0x11AE], NFKC: [0xD1DF], NFKD: [0x1110, 0x116B, 0x11AE] }, +{ source: [0xD1E0], NFC: [0xD1E0], NFD: [0x1110, 0x116B, 0x11AF], NFKC: [0xD1E0], NFKD: [0x1110, 0x116B, 0x11AF] }, +{ source: [0xD1E1], NFC: [0xD1E1], NFD: [0x1110, 0x116B, 0x11B0], NFKC: [0xD1E1], NFKD: [0x1110, 0x116B, 0x11B0] }, +{ source: [0xD1E2], NFC: [0xD1E2], NFD: [0x1110, 0x116B, 0x11B1], NFKC: [0xD1E2], NFKD: [0x1110, 0x116B, 0x11B1] }, +{ source: [0xD1E3], NFC: [0xD1E3], NFD: [0x1110, 0x116B, 0x11B2], NFKC: [0xD1E3], NFKD: [0x1110, 0x116B, 0x11B2] }, +{ source: [0xD1E4], NFC: [0xD1E4], NFD: [0x1110, 0x116B, 0x11B3], NFKC: [0xD1E4], NFKD: [0x1110, 0x116B, 0x11B3] }, +{ source: [0xD1E5], NFC: [0xD1E5], NFD: [0x1110, 0x116B, 0x11B4], NFKC: [0xD1E5], NFKD: [0x1110, 0x116B, 0x11B4] }, +{ source: [0xD1E6], NFC: [0xD1E6], NFD: [0x1110, 0x116B, 0x11B5], NFKC: [0xD1E6], NFKD: [0x1110, 0x116B, 0x11B5] }, +{ source: [0xD1E7], NFC: [0xD1E7], NFD: [0x1110, 0x116B, 0x11B6], NFKC: [0xD1E7], NFKD: [0x1110, 0x116B, 0x11B6] }, +{ source: [0xD1E8], NFC: [0xD1E8], NFD: [0x1110, 0x116B, 0x11B7], NFKC: [0xD1E8], NFKD: [0x1110, 0x116B, 0x11B7] }, +{ source: [0xD1E9], NFC: [0xD1E9], NFD: [0x1110, 0x116B, 0x11B8], NFKC: [0xD1E9], NFKD: [0x1110, 0x116B, 0x11B8] }, +{ source: [0xD1EA], NFC: [0xD1EA], NFD: [0x1110, 0x116B, 0x11B9], NFKC: [0xD1EA], NFKD: [0x1110, 0x116B, 0x11B9] }, +{ source: [0xD1EB], NFC: [0xD1EB], NFD: [0x1110, 0x116B, 0x11BA], NFKC: [0xD1EB], NFKD: [0x1110, 0x116B, 0x11BA] }, +{ source: [0xD1EC], NFC: [0xD1EC], NFD: [0x1110, 0x116B, 0x11BB], NFKC: [0xD1EC], NFKD: [0x1110, 0x116B, 0x11BB] }, +{ source: [0xD1ED], NFC: [0xD1ED], NFD: [0x1110, 0x116B, 0x11BC], NFKC: [0xD1ED], NFKD: [0x1110, 0x116B, 0x11BC] }, +{ source: [0xD1EE], NFC: [0xD1EE], NFD: [0x1110, 0x116B, 0x11BD], NFKC: [0xD1EE], NFKD: [0x1110, 0x116B, 0x11BD] }, +{ source: [0xD1EF], NFC: [0xD1EF], NFD: [0x1110, 0x116B, 0x11BE], NFKC: [0xD1EF], NFKD: [0x1110, 0x116B, 0x11BE] }, +{ source: [0xD1F0], NFC: [0xD1F0], NFD: [0x1110, 0x116B, 0x11BF], NFKC: [0xD1F0], NFKD: [0x1110, 0x116B, 0x11BF] }, +{ source: [0xD1F1], NFC: [0xD1F1], NFD: [0x1110, 0x116B, 0x11C0], NFKC: [0xD1F1], NFKD: [0x1110, 0x116B, 0x11C0] }, +{ source: [0xD1F2], NFC: [0xD1F2], NFD: [0x1110, 0x116B, 0x11C1], NFKC: [0xD1F2], NFKD: [0x1110, 0x116B, 0x11C1] }, +{ source: [0xD1F3], NFC: [0xD1F3], NFD: [0x1110, 0x116B, 0x11C2], NFKC: [0xD1F3], NFKD: [0x1110, 0x116B, 0x11C2] }, +{ source: [0xD1F4], NFC: [0xD1F4], NFD: [0x1110, 0x116C], NFKC: [0xD1F4], NFKD: [0x1110, 0x116C] }, +{ source: [0xD1F5], NFC: [0xD1F5], NFD: [0x1110, 0x116C, 0x11A8], NFKC: [0xD1F5], NFKD: [0x1110, 0x116C, 0x11A8] }, +{ source: [0xD1F6], NFC: [0xD1F6], NFD: [0x1110, 0x116C, 0x11A9], NFKC: [0xD1F6], NFKD: [0x1110, 0x116C, 0x11A9] }, +{ source: [0xD1F7], NFC: [0xD1F7], NFD: [0x1110, 0x116C, 0x11AA], NFKC: [0xD1F7], NFKD: [0x1110, 0x116C, 0x11AA] }, +{ source: [0xD1F8], NFC: [0xD1F8], NFD: [0x1110, 0x116C, 0x11AB], NFKC: [0xD1F8], NFKD: [0x1110, 0x116C, 0x11AB] }, +{ source: [0xD1F9], NFC: [0xD1F9], NFD: [0x1110, 0x116C, 0x11AC], NFKC: [0xD1F9], NFKD: [0x1110, 0x116C, 0x11AC] }, +{ source: [0xD1FA], NFC: [0xD1FA], NFD: [0x1110, 0x116C, 0x11AD], NFKC: [0xD1FA], NFKD: [0x1110, 0x116C, 0x11AD] }, +{ source: [0xD1FB], NFC: [0xD1FB], NFD: [0x1110, 0x116C, 0x11AE], NFKC: [0xD1FB], NFKD: [0x1110, 0x116C, 0x11AE] }, +{ source: [0xD1FC], NFC: [0xD1FC], NFD: [0x1110, 0x116C, 0x11AF], NFKC: [0xD1FC], NFKD: [0x1110, 0x116C, 0x11AF] }, +{ source: [0xD1FD], NFC: [0xD1FD], NFD: [0x1110, 0x116C, 0x11B0], NFKC: [0xD1FD], NFKD: [0x1110, 0x116C, 0x11B0] }, +{ source: [0xD1FE], NFC: [0xD1FE], NFD: [0x1110, 0x116C, 0x11B1], NFKC: [0xD1FE], NFKD: [0x1110, 0x116C, 0x11B1] }, +{ source: [0xD1FF], NFC: [0xD1FF], NFD: [0x1110, 0x116C, 0x11B2], NFKC: [0xD1FF], NFKD: [0x1110, 0x116C, 0x11B2] }, +{ source: [0xD200], NFC: [0xD200], NFD: [0x1110, 0x116C, 0x11B3], NFKC: [0xD200], NFKD: [0x1110, 0x116C, 0x11B3] }, +{ source: [0xD201], NFC: [0xD201], NFD: [0x1110, 0x116C, 0x11B4], NFKC: [0xD201], NFKD: [0x1110, 0x116C, 0x11B4] }, +{ source: [0xD202], NFC: [0xD202], NFD: [0x1110, 0x116C, 0x11B5], NFKC: [0xD202], NFKD: [0x1110, 0x116C, 0x11B5] }, +{ source: [0xD203], NFC: [0xD203], NFD: [0x1110, 0x116C, 0x11B6], NFKC: [0xD203], NFKD: [0x1110, 0x116C, 0x11B6] }, +{ source: [0xD204], NFC: [0xD204], NFD: [0x1110, 0x116C, 0x11B7], NFKC: [0xD204], NFKD: [0x1110, 0x116C, 0x11B7] }, +{ source: [0xD205], NFC: [0xD205], NFD: [0x1110, 0x116C, 0x11B8], NFKC: [0xD205], NFKD: [0x1110, 0x116C, 0x11B8] }, +{ source: [0xD206], NFC: [0xD206], NFD: [0x1110, 0x116C, 0x11B9], NFKC: [0xD206], NFKD: [0x1110, 0x116C, 0x11B9] }, +{ source: [0xD207], NFC: [0xD207], NFD: [0x1110, 0x116C, 0x11BA], NFKC: [0xD207], NFKD: [0x1110, 0x116C, 0x11BA] }, +{ source: [0xD208], NFC: [0xD208], NFD: [0x1110, 0x116C, 0x11BB], NFKC: [0xD208], NFKD: [0x1110, 0x116C, 0x11BB] }, +{ source: [0xD209], NFC: [0xD209], NFD: [0x1110, 0x116C, 0x11BC], NFKC: [0xD209], NFKD: [0x1110, 0x116C, 0x11BC] }, +{ source: [0xD20A], NFC: [0xD20A], NFD: [0x1110, 0x116C, 0x11BD], NFKC: [0xD20A], NFKD: [0x1110, 0x116C, 0x11BD] }, +{ source: [0xD20B], NFC: [0xD20B], NFD: [0x1110, 0x116C, 0x11BE], NFKC: [0xD20B], NFKD: [0x1110, 0x116C, 0x11BE] }, +{ source: [0xD20C], NFC: [0xD20C], NFD: [0x1110, 0x116C, 0x11BF], NFKC: [0xD20C], NFKD: [0x1110, 0x116C, 0x11BF] }, +{ source: [0xD20D], NFC: [0xD20D], NFD: [0x1110, 0x116C, 0x11C0], NFKC: [0xD20D], NFKD: [0x1110, 0x116C, 0x11C0] }, +{ source: [0xD20E], NFC: [0xD20E], NFD: [0x1110, 0x116C, 0x11C1], NFKC: [0xD20E], NFKD: [0x1110, 0x116C, 0x11C1] }, +{ source: [0xD20F], NFC: [0xD20F], NFD: [0x1110, 0x116C, 0x11C2], NFKC: [0xD20F], NFKD: [0x1110, 0x116C, 0x11C2] }, +{ source: [0xD210], NFC: [0xD210], NFD: [0x1110, 0x116D], NFKC: [0xD210], NFKD: [0x1110, 0x116D] }, +{ source: [0xD211], NFC: [0xD211], NFD: [0x1110, 0x116D, 0x11A8], NFKC: [0xD211], NFKD: [0x1110, 0x116D, 0x11A8] }, +{ source: [0xD212], NFC: [0xD212], NFD: [0x1110, 0x116D, 0x11A9], NFKC: [0xD212], NFKD: [0x1110, 0x116D, 0x11A9] }, +{ source: [0xD213], NFC: [0xD213], NFD: [0x1110, 0x116D, 0x11AA], NFKC: [0xD213], NFKD: [0x1110, 0x116D, 0x11AA] }, +{ source: [0xD214], NFC: [0xD214], NFD: [0x1110, 0x116D, 0x11AB], NFKC: [0xD214], NFKD: [0x1110, 0x116D, 0x11AB] }, +{ source: [0xD215], NFC: [0xD215], NFD: [0x1110, 0x116D, 0x11AC], NFKC: [0xD215], NFKD: [0x1110, 0x116D, 0x11AC] }, +{ source: [0xD216], NFC: [0xD216], NFD: [0x1110, 0x116D, 0x11AD], NFKC: [0xD216], NFKD: [0x1110, 0x116D, 0x11AD] }, +{ source: [0xD217], NFC: [0xD217], NFD: [0x1110, 0x116D, 0x11AE], NFKC: [0xD217], NFKD: [0x1110, 0x116D, 0x11AE] }, +{ source: [0xD218], NFC: [0xD218], NFD: [0x1110, 0x116D, 0x11AF], NFKC: [0xD218], NFKD: [0x1110, 0x116D, 0x11AF] }, +{ source: [0xD219], NFC: [0xD219], NFD: [0x1110, 0x116D, 0x11B0], NFKC: [0xD219], NFKD: [0x1110, 0x116D, 0x11B0] }, +{ source: [0xD21A], NFC: [0xD21A], NFD: [0x1110, 0x116D, 0x11B1], NFKC: [0xD21A], NFKD: [0x1110, 0x116D, 0x11B1] }, +{ source: [0xD21B], NFC: [0xD21B], NFD: [0x1110, 0x116D, 0x11B2], NFKC: [0xD21B], NFKD: [0x1110, 0x116D, 0x11B2] }, +{ source: [0xD21C], NFC: [0xD21C], NFD: [0x1110, 0x116D, 0x11B3], NFKC: [0xD21C], NFKD: [0x1110, 0x116D, 0x11B3] }, +{ source: [0xD21D], NFC: [0xD21D], NFD: [0x1110, 0x116D, 0x11B4], NFKC: [0xD21D], NFKD: [0x1110, 0x116D, 0x11B4] }, +{ source: [0xD21E], NFC: [0xD21E], NFD: [0x1110, 0x116D, 0x11B5], NFKC: [0xD21E], NFKD: [0x1110, 0x116D, 0x11B5] }, +{ source: [0xD21F], NFC: [0xD21F], NFD: [0x1110, 0x116D, 0x11B6], NFKC: [0xD21F], NFKD: [0x1110, 0x116D, 0x11B6] }, +{ source: [0xD220], NFC: [0xD220], NFD: [0x1110, 0x116D, 0x11B7], NFKC: [0xD220], NFKD: [0x1110, 0x116D, 0x11B7] }, +{ source: [0xD221], NFC: [0xD221], NFD: [0x1110, 0x116D, 0x11B8], NFKC: [0xD221], NFKD: [0x1110, 0x116D, 0x11B8] }, +{ source: [0xD222], NFC: [0xD222], NFD: [0x1110, 0x116D, 0x11B9], NFKC: [0xD222], NFKD: [0x1110, 0x116D, 0x11B9] }, +{ source: [0xD223], NFC: [0xD223], NFD: [0x1110, 0x116D, 0x11BA], NFKC: [0xD223], NFKD: [0x1110, 0x116D, 0x11BA] }, +{ source: [0xD224], NFC: [0xD224], NFD: [0x1110, 0x116D, 0x11BB], NFKC: [0xD224], NFKD: [0x1110, 0x116D, 0x11BB] }, +{ source: [0xD225], NFC: [0xD225], NFD: [0x1110, 0x116D, 0x11BC], NFKC: [0xD225], NFKD: [0x1110, 0x116D, 0x11BC] }, +{ source: [0xD226], NFC: [0xD226], NFD: [0x1110, 0x116D, 0x11BD], NFKC: [0xD226], NFKD: [0x1110, 0x116D, 0x11BD] }, +{ source: [0xD227], NFC: [0xD227], NFD: [0x1110, 0x116D, 0x11BE], NFKC: [0xD227], NFKD: [0x1110, 0x116D, 0x11BE] }, +{ source: [0xD228], NFC: [0xD228], NFD: [0x1110, 0x116D, 0x11BF], NFKC: [0xD228], NFKD: [0x1110, 0x116D, 0x11BF] }, +{ source: [0xD229], NFC: [0xD229], NFD: [0x1110, 0x116D, 0x11C0], NFKC: [0xD229], NFKD: [0x1110, 0x116D, 0x11C0] }, +{ source: [0xD22A], NFC: [0xD22A], NFD: [0x1110, 0x116D, 0x11C1], NFKC: [0xD22A], NFKD: [0x1110, 0x116D, 0x11C1] }, +{ source: [0xD22B], NFC: [0xD22B], NFD: [0x1110, 0x116D, 0x11C2], NFKC: [0xD22B], NFKD: [0x1110, 0x116D, 0x11C2] }, +{ source: [0xD22C], NFC: [0xD22C], NFD: [0x1110, 0x116E], NFKC: [0xD22C], NFKD: [0x1110, 0x116E] }, +{ source: [0xD22D], NFC: [0xD22D], NFD: [0x1110, 0x116E, 0x11A8], NFKC: [0xD22D], NFKD: [0x1110, 0x116E, 0x11A8] }, +{ source: [0xD22E], NFC: [0xD22E], NFD: [0x1110, 0x116E, 0x11A9], NFKC: [0xD22E], NFKD: [0x1110, 0x116E, 0x11A9] }, +{ source: [0xD22F], NFC: [0xD22F], NFD: [0x1110, 0x116E, 0x11AA], NFKC: [0xD22F], NFKD: [0x1110, 0x116E, 0x11AA] }, +{ source: [0xD230], NFC: [0xD230], NFD: [0x1110, 0x116E, 0x11AB], NFKC: [0xD230], NFKD: [0x1110, 0x116E, 0x11AB] }, +{ source: [0xD231], NFC: [0xD231], NFD: [0x1110, 0x116E, 0x11AC], NFKC: [0xD231], NFKD: [0x1110, 0x116E, 0x11AC] }, +{ source: [0xD232], NFC: [0xD232], NFD: [0x1110, 0x116E, 0x11AD], NFKC: [0xD232], NFKD: [0x1110, 0x116E, 0x11AD] }, +{ source: [0xD233], NFC: [0xD233], NFD: [0x1110, 0x116E, 0x11AE], NFKC: [0xD233], NFKD: [0x1110, 0x116E, 0x11AE] }, +{ source: [0xD234], NFC: [0xD234], NFD: [0x1110, 0x116E, 0x11AF], NFKC: [0xD234], NFKD: [0x1110, 0x116E, 0x11AF] }, +{ source: [0xD235], NFC: [0xD235], NFD: [0x1110, 0x116E, 0x11B0], NFKC: [0xD235], NFKD: [0x1110, 0x116E, 0x11B0] }, +{ source: [0xD236], NFC: [0xD236], NFD: [0x1110, 0x116E, 0x11B1], NFKC: [0xD236], NFKD: [0x1110, 0x116E, 0x11B1] }, +{ source: [0xD237], NFC: [0xD237], NFD: [0x1110, 0x116E, 0x11B2], NFKC: [0xD237], NFKD: [0x1110, 0x116E, 0x11B2] }, +{ source: [0xD238], NFC: [0xD238], NFD: [0x1110, 0x116E, 0x11B3], NFKC: [0xD238], NFKD: [0x1110, 0x116E, 0x11B3] }, +{ source: [0xD239], NFC: [0xD239], NFD: [0x1110, 0x116E, 0x11B4], NFKC: [0xD239], NFKD: [0x1110, 0x116E, 0x11B4] }, +{ source: [0xD23A], NFC: [0xD23A], NFD: [0x1110, 0x116E, 0x11B5], NFKC: [0xD23A], NFKD: [0x1110, 0x116E, 0x11B5] }, +{ source: [0xD23B], NFC: [0xD23B], NFD: [0x1110, 0x116E, 0x11B6], NFKC: [0xD23B], NFKD: [0x1110, 0x116E, 0x11B6] }, +{ source: [0xD23C], NFC: [0xD23C], NFD: [0x1110, 0x116E, 0x11B7], NFKC: [0xD23C], NFKD: [0x1110, 0x116E, 0x11B7] }, +{ source: [0xD23D], NFC: [0xD23D], NFD: [0x1110, 0x116E, 0x11B8], NFKC: [0xD23D], NFKD: [0x1110, 0x116E, 0x11B8] }, +{ source: [0xD23E], NFC: [0xD23E], NFD: [0x1110, 0x116E, 0x11B9], NFKC: [0xD23E], NFKD: [0x1110, 0x116E, 0x11B9] }, +{ source: [0xD23F], NFC: [0xD23F], NFD: [0x1110, 0x116E, 0x11BA], NFKC: [0xD23F], NFKD: [0x1110, 0x116E, 0x11BA] }, +{ source: [0xD240], NFC: [0xD240], NFD: [0x1110, 0x116E, 0x11BB], NFKC: [0xD240], NFKD: [0x1110, 0x116E, 0x11BB] }, +{ source: [0xD241], NFC: [0xD241], NFD: [0x1110, 0x116E, 0x11BC], NFKC: [0xD241], NFKD: [0x1110, 0x116E, 0x11BC] }, +{ source: [0xD242], NFC: [0xD242], NFD: [0x1110, 0x116E, 0x11BD], NFKC: [0xD242], NFKD: [0x1110, 0x116E, 0x11BD] }, +{ source: [0xD243], NFC: [0xD243], NFD: [0x1110, 0x116E, 0x11BE], NFKC: [0xD243], NFKD: [0x1110, 0x116E, 0x11BE] }, +{ source: [0xD244], NFC: [0xD244], NFD: [0x1110, 0x116E, 0x11BF], NFKC: [0xD244], NFKD: [0x1110, 0x116E, 0x11BF] }, +{ source: [0xD245], NFC: [0xD245], NFD: [0x1110, 0x116E, 0x11C0], NFKC: [0xD245], NFKD: [0x1110, 0x116E, 0x11C0] }, +{ source: [0xD246], NFC: [0xD246], NFD: [0x1110, 0x116E, 0x11C1], NFKC: [0xD246], NFKD: [0x1110, 0x116E, 0x11C1] }, +{ source: [0xD247], NFC: [0xD247], NFD: [0x1110, 0x116E, 0x11C2], NFKC: [0xD247], NFKD: [0x1110, 0x116E, 0x11C2] }, +{ source: [0xD248], NFC: [0xD248], NFD: [0x1110, 0x116F], NFKC: [0xD248], NFKD: [0x1110, 0x116F] }, +{ source: [0xD249], NFC: [0xD249], NFD: [0x1110, 0x116F, 0x11A8], NFKC: [0xD249], NFKD: [0x1110, 0x116F, 0x11A8] }, +{ source: [0xD24A], NFC: [0xD24A], NFD: [0x1110, 0x116F, 0x11A9], NFKC: [0xD24A], NFKD: [0x1110, 0x116F, 0x11A9] }, +{ source: [0xD24B], NFC: [0xD24B], NFD: [0x1110, 0x116F, 0x11AA], NFKC: [0xD24B], NFKD: [0x1110, 0x116F, 0x11AA] }, +{ source: [0xD24C], NFC: [0xD24C], NFD: [0x1110, 0x116F, 0x11AB], NFKC: [0xD24C], NFKD: [0x1110, 0x116F, 0x11AB] }, +{ source: [0xD24D], NFC: [0xD24D], NFD: [0x1110, 0x116F, 0x11AC], NFKC: [0xD24D], NFKD: [0x1110, 0x116F, 0x11AC] }, +{ source: [0xD24E], NFC: [0xD24E], NFD: [0x1110, 0x116F, 0x11AD], NFKC: [0xD24E], NFKD: [0x1110, 0x116F, 0x11AD] }, +{ source: [0xD24F], NFC: [0xD24F], NFD: [0x1110, 0x116F, 0x11AE], NFKC: [0xD24F], NFKD: [0x1110, 0x116F, 0x11AE] }, +{ source: [0xD250], NFC: [0xD250], NFD: [0x1110, 0x116F, 0x11AF], NFKC: [0xD250], NFKD: [0x1110, 0x116F, 0x11AF] }, +{ source: [0xD251], NFC: [0xD251], NFD: [0x1110, 0x116F, 0x11B0], NFKC: [0xD251], NFKD: [0x1110, 0x116F, 0x11B0] }, +{ source: [0xD252], NFC: [0xD252], NFD: [0x1110, 0x116F, 0x11B1], NFKC: [0xD252], NFKD: [0x1110, 0x116F, 0x11B1] }, +{ source: [0xD253], NFC: [0xD253], NFD: [0x1110, 0x116F, 0x11B2], NFKC: [0xD253], NFKD: [0x1110, 0x116F, 0x11B2] }, +{ source: [0xD254], NFC: [0xD254], NFD: [0x1110, 0x116F, 0x11B3], NFKC: [0xD254], NFKD: [0x1110, 0x116F, 0x11B3] }, +{ source: [0xD255], NFC: [0xD255], NFD: [0x1110, 0x116F, 0x11B4], NFKC: [0xD255], NFKD: [0x1110, 0x116F, 0x11B4] }, +{ source: [0xD256], NFC: [0xD256], NFD: [0x1110, 0x116F, 0x11B5], NFKC: [0xD256], NFKD: [0x1110, 0x116F, 0x11B5] }, +{ source: [0xD257], NFC: [0xD257], NFD: [0x1110, 0x116F, 0x11B6], NFKC: [0xD257], NFKD: [0x1110, 0x116F, 0x11B6] }, +{ source: [0xD258], NFC: [0xD258], NFD: [0x1110, 0x116F, 0x11B7], NFKC: [0xD258], NFKD: [0x1110, 0x116F, 0x11B7] }, +{ source: [0xD259], NFC: [0xD259], NFD: [0x1110, 0x116F, 0x11B8], NFKC: [0xD259], NFKD: [0x1110, 0x116F, 0x11B8] }, +{ source: [0xD25A], NFC: [0xD25A], NFD: [0x1110, 0x116F, 0x11B9], NFKC: [0xD25A], NFKD: [0x1110, 0x116F, 0x11B9] }, +{ source: [0xD25B], NFC: [0xD25B], NFD: [0x1110, 0x116F, 0x11BA], NFKC: [0xD25B], NFKD: [0x1110, 0x116F, 0x11BA] }, +{ source: [0xD25C], NFC: [0xD25C], NFD: [0x1110, 0x116F, 0x11BB], NFKC: [0xD25C], NFKD: [0x1110, 0x116F, 0x11BB] }, +{ source: [0xD25D], NFC: [0xD25D], NFD: [0x1110, 0x116F, 0x11BC], NFKC: [0xD25D], NFKD: [0x1110, 0x116F, 0x11BC] }, +{ source: [0xD25E], NFC: [0xD25E], NFD: [0x1110, 0x116F, 0x11BD], NFKC: [0xD25E], NFKD: [0x1110, 0x116F, 0x11BD] }, +{ source: [0xD25F], NFC: [0xD25F], NFD: [0x1110, 0x116F, 0x11BE], NFKC: [0xD25F], NFKD: [0x1110, 0x116F, 0x11BE] }, +{ source: [0xD260], NFC: [0xD260], NFD: [0x1110, 0x116F, 0x11BF], NFKC: [0xD260], NFKD: [0x1110, 0x116F, 0x11BF] }, +{ source: [0xD261], NFC: [0xD261], NFD: [0x1110, 0x116F, 0x11C0], NFKC: [0xD261], NFKD: [0x1110, 0x116F, 0x11C0] }, +{ source: [0xD262], NFC: [0xD262], NFD: [0x1110, 0x116F, 0x11C1], NFKC: [0xD262], NFKD: [0x1110, 0x116F, 0x11C1] }, +{ source: [0xD263], NFC: [0xD263], NFD: [0x1110, 0x116F, 0x11C2], NFKC: [0xD263], NFKD: [0x1110, 0x116F, 0x11C2] }, +{ source: [0xD264], NFC: [0xD264], NFD: [0x1110, 0x1170], NFKC: [0xD264], NFKD: [0x1110, 0x1170] }, +{ source: [0xD265], NFC: [0xD265], NFD: [0x1110, 0x1170, 0x11A8], NFKC: [0xD265], NFKD: [0x1110, 0x1170, 0x11A8] }, +{ source: [0xD266], NFC: [0xD266], NFD: [0x1110, 0x1170, 0x11A9], NFKC: [0xD266], NFKD: [0x1110, 0x1170, 0x11A9] }, +{ source: [0xD267], NFC: [0xD267], NFD: [0x1110, 0x1170, 0x11AA], NFKC: [0xD267], NFKD: [0x1110, 0x1170, 0x11AA] }, +{ source: [0xD268], NFC: [0xD268], NFD: [0x1110, 0x1170, 0x11AB], NFKC: [0xD268], NFKD: [0x1110, 0x1170, 0x11AB] }, +{ source: [0xD269], NFC: [0xD269], NFD: [0x1110, 0x1170, 0x11AC], NFKC: [0xD269], NFKD: [0x1110, 0x1170, 0x11AC] }, +{ source: [0xD26A], NFC: [0xD26A], NFD: [0x1110, 0x1170, 0x11AD], NFKC: [0xD26A], NFKD: [0x1110, 0x1170, 0x11AD] }, +{ source: [0xD26B], NFC: [0xD26B], NFD: [0x1110, 0x1170, 0x11AE], NFKC: [0xD26B], NFKD: [0x1110, 0x1170, 0x11AE] }, +{ source: [0xD26C], NFC: [0xD26C], NFD: [0x1110, 0x1170, 0x11AF], NFKC: [0xD26C], NFKD: [0x1110, 0x1170, 0x11AF] }, +{ source: [0xD26D], NFC: [0xD26D], NFD: [0x1110, 0x1170, 0x11B0], NFKC: [0xD26D], NFKD: [0x1110, 0x1170, 0x11B0] }, +{ source: [0xD26E], NFC: [0xD26E], NFD: [0x1110, 0x1170, 0x11B1], NFKC: [0xD26E], NFKD: [0x1110, 0x1170, 0x11B1] }, +{ source: [0xD26F], NFC: [0xD26F], NFD: [0x1110, 0x1170, 0x11B2], NFKC: [0xD26F], NFKD: [0x1110, 0x1170, 0x11B2] }, +{ source: [0xD270], NFC: [0xD270], NFD: [0x1110, 0x1170, 0x11B3], NFKC: [0xD270], NFKD: [0x1110, 0x1170, 0x11B3] }, +{ source: [0xD271], NFC: [0xD271], NFD: [0x1110, 0x1170, 0x11B4], NFKC: [0xD271], NFKD: [0x1110, 0x1170, 0x11B4] }, +{ source: [0xD272], NFC: [0xD272], NFD: [0x1110, 0x1170, 0x11B5], NFKC: [0xD272], NFKD: [0x1110, 0x1170, 0x11B5] }, +{ source: [0xD273], NFC: [0xD273], NFD: [0x1110, 0x1170, 0x11B6], NFKC: [0xD273], NFKD: [0x1110, 0x1170, 0x11B6] }, +{ source: [0xD274], NFC: [0xD274], NFD: [0x1110, 0x1170, 0x11B7], NFKC: [0xD274], NFKD: [0x1110, 0x1170, 0x11B7] }, +{ source: [0xD275], NFC: [0xD275], NFD: [0x1110, 0x1170, 0x11B8], NFKC: [0xD275], NFKD: [0x1110, 0x1170, 0x11B8] }, +{ source: [0xD276], NFC: [0xD276], NFD: [0x1110, 0x1170, 0x11B9], NFKC: [0xD276], NFKD: [0x1110, 0x1170, 0x11B9] }, +{ source: [0xD277], NFC: [0xD277], NFD: [0x1110, 0x1170, 0x11BA], NFKC: [0xD277], NFKD: [0x1110, 0x1170, 0x11BA] }, +{ source: [0xD278], NFC: [0xD278], NFD: [0x1110, 0x1170, 0x11BB], NFKC: [0xD278], NFKD: [0x1110, 0x1170, 0x11BB] }, +{ source: [0xD279], NFC: [0xD279], NFD: [0x1110, 0x1170, 0x11BC], NFKC: [0xD279], NFKD: [0x1110, 0x1170, 0x11BC] }, +{ source: [0xD27A], NFC: [0xD27A], NFD: [0x1110, 0x1170, 0x11BD], NFKC: [0xD27A], NFKD: [0x1110, 0x1170, 0x11BD] }, +{ source: [0xD27B], NFC: [0xD27B], NFD: [0x1110, 0x1170, 0x11BE], NFKC: [0xD27B], NFKD: [0x1110, 0x1170, 0x11BE] }, +{ source: [0xD27C], NFC: [0xD27C], NFD: [0x1110, 0x1170, 0x11BF], NFKC: [0xD27C], NFKD: [0x1110, 0x1170, 0x11BF] }, +{ source: [0xD27D], NFC: [0xD27D], NFD: [0x1110, 0x1170, 0x11C0], NFKC: [0xD27D], NFKD: [0x1110, 0x1170, 0x11C0] }, +{ source: [0xD27E], NFC: [0xD27E], NFD: [0x1110, 0x1170, 0x11C1], NFKC: [0xD27E], NFKD: [0x1110, 0x1170, 0x11C1] }, +{ source: [0xD27F], NFC: [0xD27F], NFD: [0x1110, 0x1170, 0x11C2], NFKC: [0xD27F], NFKD: [0x1110, 0x1170, 0x11C2] }, +{ source: [0xD280], NFC: [0xD280], NFD: [0x1110, 0x1171], NFKC: [0xD280], NFKD: [0x1110, 0x1171] }, +{ source: [0xD281], NFC: [0xD281], NFD: [0x1110, 0x1171, 0x11A8], NFKC: [0xD281], NFKD: [0x1110, 0x1171, 0x11A8] }, +{ source: [0xD282], NFC: [0xD282], NFD: [0x1110, 0x1171, 0x11A9], NFKC: [0xD282], NFKD: [0x1110, 0x1171, 0x11A9] }, +{ source: [0xD283], NFC: [0xD283], NFD: [0x1110, 0x1171, 0x11AA], NFKC: [0xD283], NFKD: [0x1110, 0x1171, 0x11AA] }, +{ source: [0xD284], NFC: [0xD284], NFD: [0x1110, 0x1171, 0x11AB], NFKC: [0xD284], NFKD: [0x1110, 0x1171, 0x11AB] }, +{ source: [0xD285], NFC: [0xD285], NFD: [0x1110, 0x1171, 0x11AC], NFKC: [0xD285], NFKD: [0x1110, 0x1171, 0x11AC] }, +{ source: [0xD286], NFC: [0xD286], NFD: [0x1110, 0x1171, 0x11AD], NFKC: [0xD286], NFKD: [0x1110, 0x1171, 0x11AD] }, +{ source: [0xD287], NFC: [0xD287], NFD: [0x1110, 0x1171, 0x11AE], NFKC: [0xD287], NFKD: [0x1110, 0x1171, 0x11AE] }, +{ source: [0xD288], NFC: [0xD288], NFD: [0x1110, 0x1171, 0x11AF], NFKC: [0xD288], NFKD: [0x1110, 0x1171, 0x11AF] }, +{ source: [0xD289], NFC: [0xD289], NFD: [0x1110, 0x1171, 0x11B0], NFKC: [0xD289], NFKD: [0x1110, 0x1171, 0x11B0] }, +{ source: [0xD28A], NFC: [0xD28A], NFD: [0x1110, 0x1171, 0x11B1], NFKC: [0xD28A], NFKD: [0x1110, 0x1171, 0x11B1] }, +{ source: [0xD28B], NFC: [0xD28B], NFD: [0x1110, 0x1171, 0x11B2], NFKC: [0xD28B], NFKD: [0x1110, 0x1171, 0x11B2] }, +{ source: [0xD28C], NFC: [0xD28C], NFD: [0x1110, 0x1171, 0x11B3], NFKC: [0xD28C], NFKD: [0x1110, 0x1171, 0x11B3] }, +{ source: [0xD28D], NFC: [0xD28D], NFD: [0x1110, 0x1171, 0x11B4], NFKC: [0xD28D], NFKD: [0x1110, 0x1171, 0x11B4] }, +{ source: [0xD28E], NFC: [0xD28E], NFD: [0x1110, 0x1171, 0x11B5], NFKC: [0xD28E], NFKD: [0x1110, 0x1171, 0x11B5] }, +{ source: [0xD28F], NFC: [0xD28F], NFD: [0x1110, 0x1171, 0x11B6], NFKC: [0xD28F], NFKD: [0x1110, 0x1171, 0x11B6] }, +{ source: [0xD290], NFC: [0xD290], NFD: [0x1110, 0x1171, 0x11B7], NFKC: [0xD290], NFKD: [0x1110, 0x1171, 0x11B7] }, +{ source: [0xD291], NFC: [0xD291], NFD: [0x1110, 0x1171, 0x11B8], NFKC: [0xD291], NFKD: [0x1110, 0x1171, 0x11B8] }, +{ source: [0xD292], NFC: [0xD292], NFD: [0x1110, 0x1171, 0x11B9], NFKC: [0xD292], NFKD: [0x1110, 0x1171, 0x11B9] }, +{ source: [0xD293], NFC: [0xD293], NFD: [0x1110, 0x1171, 0x11BA], NFKC: [0xD293], NFKD: [0x1110, 0x1171, 0x11BA] }, +{ source: [0xD294], NFC: [0xD294], NFD: [0x1110, 0x1171, 0x11BB], NFKC: [0xD294], NFKD: [0x1110, 0x1171, 0x11BB] }, +{ source: [0xD295], NFC: [0xD295], NFD: [0x1110, 0x1171, 0x11BC], NFKC: [0xD295], NFKD: [0x1110, 0x1171, 0x11BC] }, +{ source: [0xD296], NFC: [0xD296], NFD: [0x1110, 0x1171, 0x11BD], NFKC: [0xD296], NFKD: [0x1110, 0x1171, 0x11BD] }, +{ source: [0xD297], NFC: [0xD297], NFD: [0x1110, 0x1171, 0x11BE], NFKC: [0xD297], NFKD: [0x1110, 0x1171, 0x11BE] }, +{ source: [0xD298], NFC: [0xD298], NFD: [0x1110, 0x1171, 0x11BF], NFKC: [0xD298], NFKD: [0x1110, 0x1171, 0x11BF] }, +{ source: [0xD299], NFC: [0xD299], NFD: [0x1110, 0x1171, 0x11C0], NFKC: [0xD299], NFKD: [0x1110, 0x1171, 0x11C0] }, +{ source: [0xD29A], NFC: [0xD29A], NFD: [0x1110, 0x1171, 0x11C1], NFKC: [0xD29A], NFKD: [0x1110, 0x1171, 0x11C1] }, +{ source: [0xD29B], NFC: [0xD29B], NFD: [0x1110, 0x1171, 0x11C2], NFKC: [0xD29B], NFKD: [0x1110, 0x1171, 0x11C2] }, +{ source: [0xD29C], NFC: [0xD29C], NFD: [0x1110, 0x1172], NFKC: [0xD29C], NFKD: [0x1110, 0x1172] }, +{ source: [0xD29D], NFC: [0xD29D], NFD: [0x1110, 0x1172, 0x11A8], NFKC: [0xD29D], NFKD: [0x1110, 0x1172, 0x11A8] }, +{ source: [0xD29E], NFC: [0xD29E], NFD: [0x1110, 0x1172, 0x11A9], NFKC: [0xD29E], NFKD: [0x1110, 0x1172, 0x11A9] }, +{ source: [0xD29F], NFC: [0xD29F], NFD: [0x1110, 0x1172, 0x11AA], NFKC: [0xD29F], NFKD: [0x1110, 0x1172, 0x11AA] }, +{ source: [0xD2A0], NFC: [0xD2A0], NFD: [0x1110, 0x1172, 0x11AB], NFKC: [0xD2A0], NFKD: [0x1110, 0x1172, 0x11AB] }, +{ source: [0xD2A1], NFC: [0xD2A1], NFD: [0x1110, 0x1172, 0x11AC], NFKC: [0xD2A1], NFKD: [0x1110, 0x1172, 0x11AC] }, +{ source: [0xD2A2], NFC: [0xD2A2], NFD: [0x1110, 0x1172, 0x11AD], NFKC: [0xD2A2], NFKD: [0x1110, 0x1172, 0x11AD] }, +{ source: [0xD2A3], NFC: [0xD2A3], NFD: [0x1110, 0x1172, 0x11AE], NFKC: [0xD2A3], NFKD: [0x1110, 0x1172, 0x11AE] }, +{ source: [0xD2A4], NFC: [0xD2A4], NFD: [0x1110, 0x1172, 0x11AF], NFKC: [0xD2A4], NFKD: [0x1110, 0x1172, 0x11AF] }, +{ source: [0xD2A5], NFC: [0xD2A5], NFD: [0x1110, 0x1172, 0x11B0], NFKC: [0xD2A5], NFKD: [0x1110, 0x1172, 0x11B0] }, +{ source: [0xD2A6], NFC: [0xD2A6], NFD: [0x1110, 0x1172, 0x11B1], NFKC: [0xD2A6], NFKD: [0x1110, 0x1172, 0x11B1] }, +{ source: [0xD2A7], NFC: [0xD2A7], NFD: [0x1110, 0x1172, 0x11B2], NFKC: [0xD2A7], NFKD: [0x1110, 0x1172, 0x11B2] }, +{ source: [0xD2A8], NFC: [0xD2A8], NFD: [0x1110, 0x1172, 0x11B3], NFKC: [0xD2A8], NFKD: [0x1110, 0x1172, 0x11B3] }, +{ source: [0xD2A9], NFC: [0xD2A9], NFD: [0x1110, 0x1172, 0x11B4], NFKC: [0xD2A9], NFKD: [0x1110, 0x1172, 0x11B4] }, +{ source: [0xD2AA], NFC: [0xD2AA], NFD: [0x1110, 0x1172, 0x11B5], NFKC: [0xD2AA], NFKD: [0x1110, 0x1172, 0x11B5] }, +{ source: [0xD2AB], NFC: [0xD2AB], NFD: [0x1110, 0x1172, 0x11B6], NFKC: [0xD2AB], NFKD: [0x1110, 0x1172, 0x11B6] }, +{ source: [0xD2AC], NFC: [0xD2AC], NFD: [0x1110, 0x1172, 0x11B7], NFKC: [0xD2AC], NFKD: [0x1110, 0x1172, 0x11B7] }, +{ source: [0xD2AD], NFC: [0xD2AD], NFD: [0x1110, 0x1172, 0x11B8], NFKC: [0xD2AD], NFKD: [0x1110, 0x1172, 0x11B8] }, +{ source: [0xD2AE], NFC: [0xD2AE], NFD: [0x1110, 0x1172, 0x11B9], NFKC: [0xD2AE], NFKD: [0x1110, 0x1172, 0x11B9] }, +{ source: [0xD2AF], NFC: [0xD2AF], NFD: [0x1110, 0x1172, 0x11BA], NFKC: [0xD2AF], NFKD: [0x1110, 0x1172, 0x11BA] }, +{ source: [0xD2B0], NFC: [0xD2B0], NFD: [0x1110, 0x1172, 0x11BB], NFKC: [0xD2B0], NFKD: [0x1110, 0x1172, 0x11BB] }, +{ source: [0xD2B1], NFC: [0xD2B1], NFD: [0x1110, 0x1172, 0x11BC], NFKC: [0xD2B1], NFKD: [0x1110, 0x1172, 0x11BC] }, +{ source: [0xD2B2], NFC: [0xD2B2], NFD: [0x1110, 0x1172, 0x11BD], NFKC: [0xD2B2], NFKD: [0x1110, 0x1172, 0x11BD] }, +{ source: [0xD2B3], NFC: [0xD2B3], NFD: [0x1110, 0x1172, 0x11BE], NFKC: [0xD2B3], NFKD: [0x1110, 0x1172, 0x11BE] }, +{ source: [0xD2B4], NFC: [0xD2B4], NFD: [0x1110, 0x1172, 0x11BF], NFKC: [0xD2B4], NFKD: [0x1110, 0x1172, 0x11BF] }, +{ source: [0xD2B5], NFC: [0xD2B5], NFD: [0x1110, 0x1172, 0x11C0], NFKC: [0xD2B5], NFKD: [0x1110, 0x1172, 0x11C0] }, +{ source: [0xD2B6], NFC: [0xD2B6], NFD: [0x1110, 0x1172, 0x11C1], NFKC: [0xD2B6], NFKD: [0x1110, 0x1172, 0x11C1] }, +{ source: [0xD2B7], NFC: [0xD2B7], NFD: [0x1110, 0x1172, 0x11C2], NFKC: [0xD2B7], NFKD: [0x1110, 0x1172, 0x11C2] }, +{ source: [0xD2B8], NFC: [0xD2B8], NFD: [0x1110, 0x1173], NFKC: [0xD2B8], NFKD: [0x1110, 0x1173] }, +{ source: [0xD2B9], NFC: [0xD2B9], NFD: [0x1110, 0x1173, 0x11A8], NFKC: [0xD2B9], NFKD: [0x1110, 0x1173, 0x11A8] }, +{ source: [0xD2BA], NFC: [0xD2BA], NFD: [0x1110, 0x1173, 0x11A9], NFKC: [0xD2BA], NFKD: [0x1110, 0x1173, 0x11A9] }, +{ source: [0xD2BB], NFC: [0xD2BB], NFD: [0x1110, 0x1173, 0x11AA], NFKC: [0xD2BB], NFKD: [0x1110, 0x1173, 0x11AA] }, +{ source: [0xD2BC], NFC: [0xD2BC], NFD: [0x1110, 0x1173, 0x11AB], NFKC: [0xD2BC], NFKD: [0x1110, 0x1173, 0x11AB] }, +{ source: [0xD2BD], NFC: [0xD2BD], NFD: [0x1110, 0x1173, 0x11AC], NFKC: [0xD2BD], NFKD: [0x1110, 0x1173, 0x11AC] }, +{ source: [0xD2BE], NFC: [0xD2BE], NFD: [0x1110, 0x1173, 0x11AD], NFKC: [0xD2BE], NFKD: [0x1110, 0x1173, 0x11AD] }, +{ source: [0xD2BF], NFC: [0xD2BF], NFD: [0x1110, 0x1173, 0x11AE], NFKC: [0xD2BF], NFKD: [0x1110, 0x1173, 0x11AE] }, +{ source: [0xD2C0], NFC: [0xD2C0], NFD: [0x1110, 0x1173, 0x11AF], NFKC: [0xD2C0], NFKD: [0x1110, 0x1173, 0x11AF] }, +{ source: [0xD2C1], NFC: [0xD2C1], NFD: [0x1110, 0x1173, 0x11B0], NFKC: [0xD2C1], NFKD: [0x1110, 0x1173, 0x11B0] }, +{ source: [0xD2C2], NFC: [0xD2C2], NFD: [0x1110, 0x1173, 0x11B1], NFKC: [0xD2C2], NFKD: [0x1110, 0x1173, 0x11B1] }, +{ source: [0xD2C3], NFC: [0xD2C3], NFD: [0x1110, 0x1173, 0x11B2], NFKC: [0xD2C3], NFKD: [0x1110, 0x1173, 0x11B2] }, +{ source: [0xD2C4], NFC: [0xD2C4], NFD: [0x1110, 0x1173, 0x11B3], NFKC: [0xD2C4], NFKD: [0x1110, 0x1173, 0x11B3] }, +{ source: [0xD2C5], NFC: [0xD2C5], NFD: [0x1110, 0x1173, 0x11B4], NFKC: [0xD2C5], NFKD: [0x1110, 0x1173, 0x11B4] }, +{ source: [0xD2C6], NFC: [0xD2C6], NFD: [0x1110, 0x1173, 0x11B5], NFKC: [0xD2C6], NFKD: [0x1110, 0x1173, 0x11B5] }, +{ source: [0xD2C7], NFC: [0xD2C7], NFD: [0x1110, 0x1173, 0x11B6], NFKC: [0xD2C7], NFKD: [0x1110, 0x1173, 0x11B6] }, +{ source: [0xD2C8], NFC: [0xD2C8], NFD: [0x1110, 0x1173, 0x11B7], NFKC: [0xD2C8], NFKD: [0x1110, 0x1173, 0x11B7] }, +{ source: [0xD2C9], NFC: [0xD2C9], NFD: [0x1110, 0x1173, 0x11B8], NFKC: [0xD2C9], NFKD: [0x1110, 0x1173, 0x11B8] }, +{ source: [0xD2CA], NFC: [0xD2CA], NFD: [0x1110, 0x1173, 0x11B9], NFKC: [0xD2CA], NFKD: [0x1110, 0x1173, 0x11B9] }, +{ source: [0xD2CB], NFC: [0xD2CB], NFD: [0x1110, 0x1173, 0x11BA], NFKC: [0xD2CB], NFKD: [0x1110, 0x1173, 0x11BA] }, +{ source: [0xD2CC], NFC: [0xD2CC], NFD: [0x1110, 0x1173, 0x11BB], NFKC: [0xD2CC], NFKD: [0x1110, 0x1173, 0x11BB] }, +{ source: [0xD2CD], NFC: [0xD2CD], NFD: [0x1110, 0x1173, 0x11BC], NFKC: [0xD2CD], NFKD: [0x1110, 0x1173, 0x11BC] }, +{ source: [0xD2CE], NFC: [0xD2CE], NFD: [0x1110, 0x1173, 0x11BD], NFKC: [0xD2CE], NFKD: [0x1110, 0x1173, 0x11BD] }, +{ source: [0xD2CF], NFC: [0xD2CF], NFD: [0x1110, 0x1173, 0x11BE], NFKC: [0xD2CF], NFKD: [0x1110, 0x1173, 0x11BE] }, +{ source: [0xD2D0], NFC: [0xD2D0], NFD: [0x1110, 0x1173, 0x11BF], NFKC: [0xD2D0], NFKD: [0x1110, 0x1173, 0x11BF] }, +{ source: [0xD2D1], NFC: [0xD2D1], NFD: [0x1110, 0x1173, 0x11C0], NFKC: [0xD2D1], NFKD: [0x1110, 0x1173, 0x11C0] }, +{ source: [0xD2D2], NFC: [0xD2D2], NFD: [0x1110, 0x1173, 0x11C1], NFKC: [0xD2D2], NFKD: [0x1110, 0x1173, 0x11C1] }, +{ source: [0xD2D3], NFC: [0xD2D3], NFD: [0x1110, 0x1173, 0x11C2], NFKC: [0xD2D3], NFKD: [0x1110, 0x1173, 0x11C2] }, +{ source: [0xD2D4], NFC: [0xD2D4], NFD: [0x1110, 0x1174], NFKC: [0xD2D4], NFKD: [0x1110, 0x1174] }, +{ source: [0xD2D5], NFC: [0xD2D5], NFD: [0x1110, 0x1174, 0x11A8], NFKC: [0xD2D5], NFKD: [0x1110, 0x1174, 0x11A8] }, +{ source: [0xD2D6], NFC: [0xD2D6], NFD: [0x1110, 0x1174, 0x11A9], NFKC: [0xD2D6], NFKD: [0x1110, 0x1174, 0x11A9] }, +{ source: [0xD2D7], NFC: [0xD2D7], NFD: [0x1110, 0x1174, 0x11AA], NFKC: [0xD2D7], NFKD: [0x1110, 0x1174, 0x11AA] }, +{ source: [0xD2D8], NFC: [0xD2D8], NFD: [0x1110, 0x1174, 0x11AB], NFKC: [0xD2D8], NFKD: [0x1110, 0x1174, 0x11AB] }, +{ source: [0xD2D9], NFC: [0xD2D9], NFD: [0x1110, 0x1174, 0x11AC], NFKC: [0xD2D9], NFKD: [0x1110, 0x1174, 0x11AC] }, +{ source: [0xD2DA], NFC: [0xD2DA], NFD: [0x1110, 0x1174, 0x11AD], NFKC: [0xD2DA], NFKD: [0x1110, 0x1174, 0x11AD] }, +{ source: [0xD2DB], NFC: [0xD2DB], NFD: [0x1110, 0x1174, 0x11AE], NFKC: [0xD2DB], NFKD: [0x1110, 0x1174, 0x11AE] }, +{ source: [0xD2DC], NFC: [0xD2DC], NFD: [0x1110, 0x1174, 0x11AF], NFKC: [0xD2DC], NFKD: [0x1110, 0x1174, 0x11AF] }, +{ source: [0xD2DD], NFC: [0xD2DD], NFD: [0x1110, 0x1174, 0x11B0], NFKC: [0xD2DD], NFKD: [0x1110, 0x1174, 0x11B0] }, +{ source: [0xD2DE], NFC: [0xD2DE], NFD: [0x1110, 0x1174, 0x11B1], NFKC: [0xD2DE], NFKD: [0x1110, 0x1174, 0x11B1] }, +{ source: [0xD2DF], NFC: [0xD2DF], NFD: [0x1110, 0x1174, 0x11B2], NFKC: [0xD2DF], NFKD: [0x1110, 0x1174, 0x11B2] }, +{ source: [0xD2E0], NFC: [0xD2E0], NFD: [0x1110, 0x1174, 0x11B3], NFKC: [0xD2E0], NFKD: [0x1110, 0x1174, 0x11B3] }, +{ source: [0xD2E1], NFC: [0xD2E1], NFD: [0x1110, 0x1174, 0x11B4], NFKC: [0xD2E1], NFKD: [0x1110, 0x1174, 0x11B4] }, +{ source: [0xD2E2], NFC: [0xD2E2], NFD: [0x1110, 0x1174, 0x11B5], NFKC: [0xD2E2], NFKD: [0x1110, 0x1174, 0x11B5] }, +{ source: [0xD2E3], NFC: [0xD2E3], NFD: [0x1110, 0x1174, 0x11B6], NFKC: [0xD2E3], NFKD: [0x1110, 0x1174, 0x11B6] }, +{ source: [0xD2E4], NFC: [0xD2E4], NFD: [0x1110, 0x1174, 0x11B7], NFKC: [0xD2E4], NFKD: [0x1110, 0x1174, 0x11B7] }, +{ source: [0xD2E5], NFC: [0xD2E5], NFD: [0x1110, 0x1174, 0x11B8], NFKC: [0xD2E5], NFKD: [0x1110, 0x1174, 0x11B8] }, +{ source: [0xD2E6], NFC: [0xD2E6], NFD: [0x1110, 0x1174, 0x11B9], NFKC: [0xD2E6], NFKD: [0x1110, 0x1174, 0x11B9] }, +{ source: [0xD2E7], NFC: [0xD2E7], NFD: [0x1110, 0x1174, 0x11BA], NFKC: [0xD2E7], NFKD: [0x1110, 0x1174, 0x11BA] }, +{ source: [0xD2E8], NFC: [0xD2E8], NFD: [0x1110, 0x1174, 0x11BB], NFKC: [0xD2E8], NFKD: [0x1110, 0x1174, 0x11BB] }, +{ source: [0xD2E9], NFC: [0xD2E9], NFD: [0x1110, 0x1174, 0x11BC], NFKC: [0xD2E9], NFKD: [0x1110, 0x1174, 0x11BC] }, +{ source: [0xD2EA], NFC: [0xD2EA], NFD: [0x1110, 0x1174, 0x11BD], NFKC: [0xD2EA], NFKD: [0x1110, 0x1174, 0x11BD] }, +{ source: [0xD2EB], NFC: [0xD2EB], NFD: [0x1110, 0x1174, 0x11BE], NFKC: [0xD2EB], NFKD: [0x1110, 0x1174, 0x11BE] }, +{ source: [0xD2EC], NFC: [0xD2EC], NFD: [0x1110, 0x1174, 0x11BF], NFKC: [0xD2EC], NFKD: [0x1110, 0x1174, 0x11BF] }, +{ source: [0xD2ED], NFC: [0xD2ED], NFD: [0x1110, 0x1174, 0x11C0], NFKC: [0xD2ED], NFKD: [0x1110, 0x1174, 0x11C0] }, +{ source: [0xD2EE], NFC: [0xD2EE], NFD: [0x1110, 0x1174, 0x11C1], NFKC: [0xD2EE], NFKD: [0x1110, 0x1174, 0x11C1] }, +{ source: [0xD2EF], NFC: [0xD2EF], NFD: [0x1110, 0x1174, 0x11C2], NFKC: [0xD2EF], NFKD: [0x1110, 0x1174, 0x11C2] }, +{ source: [0xD2F0], NFC: [0xD2F0], NFD: [0x1110, 0x1175], NFKC: [0xD2F0], NFKD: [0x1110, 0x1175] }, +{ source: [0xD2F1], NFC: [0xD2F1], NFD: [0x1110, 0x1175, 0x11A8], NFKC: [0xD2F1], NFKD: [0x1110, 0x1175, 0x11A8] }, +{ source: [0xD2F2], NFC: [0xD2F2], NFD: [0x1110, 0x1175, 0x11A9], NFKC: [0xD2F2], NFKD: [0x1110, 0x1175, 0x11A9] }, +{ source: [0xD2F3], NFC: [0xD2F3], NFD: [0x1110, 0x1175, 0x11AA], NFKC: [0xD2F3], NFKD: [0x1110, 0x1175, 0x11AA] }, +{ source: [0xD2F4], NFC: [0xD2F4], NFD: [0x1110, 0x1175, 0x11AB], NFKC: [0xD2F4], NFKD: [0x1110, 0x1175, 0x11AB] }, +{ source: [0xD2F5], NFC: [0xD2F5], NFD: [0x1110, 0x1175, 0x11AC], NFKC: [0xD2F5], NFKD: [0x1110, 0x1175, 0x11AC] }, +{ source: [0xD2F6], NFC: [0xD2F6], NFD: [0x1110, 0x1175, 0x11AD], NFKC: [0xD2F6], NFKD: [0x1110, 0x1175, 0x11AD] }, +{ source: [0xD2F7], NFC: [0xD2F7], NFD: [0x1110, 0x1175, 0x11AE], NFKC: [0xD2F7], NFKD: [0x1110, 0x1175, 0x11AE] }, +{ source: [0xD2F8], NFC: [0xD2F8], NFD: [0x1110, 0x1175, 0x11AF], NFKC: [0xD2F8], NFKD: [0x1110, 0x1175, 0x11AF] }, +{ source: [0xD2F9], NFC: [0xD2F9], NFD: [0x1110, 0x1175, 0x11B0], NFKC: [0xD2F9], NFKD: [0x1110, 0x1175, 0x11B0] }, +{ source: [0xD2FA], NFC: [0xD2FA], NFD: [0x1110, 0x1175, 0x11B1], NFKC: [0xD2FA], NFKD: [0x1110, 0x1175, 0x11B1] }, +{ source: [0xD2FB], NFC: [0xD2FB], NFD: [0x1110, 0x1175, 0x11B2], NFKC: [0xD2FB], NFKD: [0x1110, 0x1175, 0x11B2] }, +{ source: [0xD2FC], NFC: [0xD2FC], NFD: [0x1110, 0x1175, 0x11B3], NFKC: [0xD2FC], NFKD: [0x1110, 0x1175, 0x11B3] }, +{ source: [0xD2FD], NFC: [0xD2FD], NFD: [0x1110, 0x1175, 0x11B4], NFKC: [0xD2FD], NFKD: [0x1110, 0x1175, 0x11B4] }, +{ source: [0xD2FE], NFC: [0xD2FE], NFD: [0x1110, 0x1175, 0x11B5], NFKC: [0xD2FE], NFKD: [0x1110, 0x1175, 0x11B5] }, +{ source: [0xD2FF], NFC: [0xD2FF], NFD: [0x1110, 0x1175, 0x11B6], NFKC: [0xD2FF], NFKD: [0x1110, 0x1175, 0x11B6] }, +{ source: [0xD300], NFC: [0xD300], NFD: [0x1110, 0x1175, 0x11B7], NFKC: [0xD300], NFKD: [0x1110, 0x1175, 0x11B7] }, +{ source: [0xD301], NFC: [0xD301], NFD: [0x1110, 0x1175, 0x11B8], NFKC: [0xD301], NFKD: [0x1110, 0x1175, 0x11B8] }, +{ source: [0xD302], NFC: [0xD302], NFD: [0x1110, 0x1175, 0x11B9], NFKC: [0xD302], NFKD: [0x1110, 0x1175, 0x11B9] }, +{ source: [0xD303], NFC: [0xD303], NFD: [0x1110, 0x1175, 0x11BA], NFKC: [0xD303], NFKD: [0x1110, 0x1175, 0x11BA] }, +{ source: [0xD304], NFC: [0xD304], NFD: [0x1110, 0x1175, 0x11BB], NFKC: [0xD304], NFKD: [0x1110, 0x1175, 0x11BB] }, +{ source: [0xD305], NFC: [0xD305], NFD: [0x1110, 0x1175, 0x11BC], NFKC: [0xD305], NFKD: [0x1110, 0x1175, 0x11BC] }, +{ source: [0xD306], NFC: [0xD306], NFD: [0x1110, 0x1175, 0x11BD], NFKC: [0xD306], NFKD: [0x1110, 0x1175, 0x11BD] }, +{ source: [0xD307], NFC: [0xD307], NFD: [0x1110, 0x1175, 0x11BE], NFKC: [0xD307], NFKD: [0x1110, 0x1175, 0x11BE] }, +{ source: [0xD308], NFC: [0xD308], NFD: [0x1110, 0x1175, 0x11BF], NFKC: [0xD308], NFKD: [0x1110, 0x1175, 0x11BF] }, +{ source: [0xD309], NFC: [0xD309], NFD: [0x1110, 0x1175, 0x11C0], NFKC: [0xD309], NFKD: [0x1110, 0x1175, 0x11C0] }, +{ source: [0xD30A], NFC: [0xD30A], NFD: [0x1110, 0x1175, 0x11C1], NFKC: [0xD30A], NFKD: [0x1110, 0x1175, 0x11C1] }, +{ source: [0xD30B], NFC: [0xD30B], NFD: [0x1110, 0x1175, 0x11C2], NFKC: [0xD30B], NFKD: [0x1110, 0x1175, 0x11C2] }, +{ source: [0xD30C], NFC: [0xD30C], NFD: [0x1111, 0x1161], NFKC: [0xD30C], NFKD: [0x1111, 0x1161] }, +{ source: [0xD30D], NFC: [0xD30D], NFD: [0x1111, 0x1161, 0x11A8], NFKC: [0xD30D], NFKD: [0x1111, 0x1161, 0x11A8] }, +{ source: [0xD30E], NFC: [0xD30E], NFD: [0x1111, 0x1161, 0x11A9], NFKC: [0xD30E], NFKD: [0x1111, 0x1161, 0x11A9] }, +{ source: [0xD30F], NFC: [0xD30F], NFD: [0x1111, 0x1161, 0x11AA], NFKC: [0xD30F], NFKD: [0x1111, 0x1161, 0x11AA] }, +{ source: [0xD310], NFC: [0xD310], NFD: [0x1111, 0x1161, 0x11AB], NFKC: [0xD310], NFKD: [0x1111, 0x1161, 0x11AB] }, +{ source: [0xD311], NFC: [0xD311], NFD: [0x1111, 0x1161, 0x11AC], NFKC: [0xD311], NFKD: [0x1111, 0x1161, 0x11AC] }, +{ source: [0xD312], NFC: [0xD312], NFD: [0x1111, 0x1161, 0x11AD], NFKC: [0xD312], NFKD: [0x1111, 0x1161, 0x11AD] }, +{ source: [0xD313], NFC: [0xD313], NFD: [0x1111, 0x1161, 0x11AE], NFKC: [0xD313], NFKD: [0x1111, 0x1161, 0x11AE] }, +{ source: [0xD314], NFC: [0xD314], NFD: [0x1111, 0x1161, 0x11AF], NFKC: [0xD314], NFKD: [0x1111, 0x1161, 0x11AF] }, +{ source: [0xD315], NFC: [0xD315], NFD: [0x1111, 0x1161, 0x11B0], NFKC: [0xD315], NFKD: [0x1111, 0x1161, 0x11B0] }, +{ source: [0xD316], NFC: [0xD316], NFD: [0x1111, 0x1161, 0x11B1], NFKC: [0xD316], NFKD: [0x1111, 0x1161, 0x11B1] }, +{ source: [0xD317], NFC: [0xD317], NFD: [0x1111, 0x1161, 0x11B2], NFKC: [0xD317], NFKD: [0x1111, 0x1161, 0x11B2] }, +{ source: [0xD318], NFC: [0xD318], NFD: [0x1111, 0x1161, 0x11B3], NFKC: [0xD318], NFKD: [0x1111, 0x1161, 0x11B3] }, +{ source: [0xD319], NFC: [0xD319], NFD: [0x1111, 0x1161, 0x11B4], NFKC: [0xD319], NFKD: [0x1111, 0x1161, 0x11B4] }, +{ source: [0xD31A], NFC: [0xD31A], NFD: [0x1111, 0x1161, 0x11B5], NFKC: [0xD31A], NFKD: [0x1111, 0x1161, 0x11B5] }, +{ source: [0xD31B], NFC: [0xD31B], NFD: [0x1111, 0x1161, 0x11B6], NFKC: [0xD31B], NFKD: [0x1111, 0x1161, 0x11B6] }, +{ source: [0xD31C], NFC: [0xD31C], NFD: [0x1111, 0x1161, 0x11B7], NFKC: [0xD31C], NFKD: [0x1111, 0x1161, 0x11B7] }, +{ source: [0xD31D], NFC: [0xD31D], NFD: [0x1111, 0x1161, 0x11B8], NFKC: [0xD31D], NFKD: [0x1111, 0x1161, 0x11B8] }, +{ source: [0xD31E], NFC: [0xD31E], NFD: [0x1111, 0x1161, 0x11B9], NFKC: [0xD31E], NFKD: [0x1111, 0x1161, 0x11B9] }, +{ source: [0xD31F], NFC: [0xD31F], NFD: [0x1111, 0x1161, 0x11BA], NFKC: [0xD31F], NFKD: [0x1111, 0x1161, 0x11BA] }, +{ source: [0xD320], NFC: [0xD320], NFD: [0x1111, 0x1161, 0x11BB], NFKC: [0xD320], NFKD: [0x1111, 0x1161, 0x11BB] }, +{ source: [0xD321], NFC: [0xD321], NFD: [0x1111, 0x1161, 0x11BC], NFKC: [0xD321], NFKD: [0x1111, 0x1161, 0x11BC] }, +{ source: [0xD322], NFC: [0xD322], NFD: [0x1111, 0x1161, 0x11BD], NFKC: [0xD322], NFKD: [0x1111, 0x1161, 0x11BD] }, +{ source: [0xD323], NFC: [0xD323], NFD: [0x1111, 0x1161, 0x11BE], NFKC: [0xD323], NFKD: [0x1111, 0x1161, 0x11BE] }, +{ source: [0xD324], NFC: [0xD324], NFD: [0x1111, 0x1161, 0x11BF], NFKC: [0xD324], NFKD: [0x1111, 0x1161, 0x11BF] }, +{ source: [0xD325], NFC: [0xD325], NFD: [0x1111, 0x1161, 0x11C0], NFKC: [0xD325], NFKD: [0x1111, 0x1161, 0x11C0] }, +{ source: [0xD326], NFC: [0xD326], NFD: [0x1111, 0x1161, 0x11C1], NFKC: [0xD326], NFKD: [0x1111, 0x1161, 0x11C1] }, +{ source: [0xD327], NFC: [0xD327], NFD: [0x1111, 0x1161, 0x11C2], NFKC: [0xD327], NFKD: [0x1111, 0x1161, 0x11C2] }, +{ source: [0xD328], NFC: [0xD328], NFD: [0x1111, 0x1162], NFKC: [0xD328], NFKD: [0x1111, 0x1162] }, +{ source: [0xD329], NFC: [0xD329], NFD: [0x1111, 0x1162, 0x11A8], NFKC: [0xD329], NFKD: [0x1111, 0x1162, 0x11A8] }, +{ source: [0xD32A], NFC: [0xD32A], NFD: [0x1111, 0x1162, 0x11A9], NFKC: [0xD32A], NFKD: [0x1111, 0x1162, 0x11A9] }, +{ source: [0xD32B], NFC: [0xD32B], NFD: [0x1111, 0x1162, 0x11AA], NFKC: [0xD32B], NFKD: [0x1111, 0x1162, 0x11AA] }, +{ source: [0xD32C], NFC: [0xD32C], NFD: [0x1111, 0x1162, 0x11AB], NFKC: [0xD32C], NFKD: [0x1111, 0x1162, 0x11AB] }, +{ source: [0xD32D], NFC: [0xD32D], NFD: [0x1111, 0x1162, 0x11AC], NFKC: [0xD32D], NFKD: [0x1111, 0x1162, 0x11AC] }, +{ source: [0xD32E], NFC: [0xD32E], NFD: [0x1111, 0x1162, 0x11AD], NFKC: [0xD32E], NFKD: [0x1111, 0x1162, 0x11AD] }, +{ source: [0xD32F], NFC: [0xD32F], NFD: [0x1111, 0x1162, 0x11AE], NFKC: [0xD32F], NFKD: [0x1111, 0x1162, 0x11AE] }, +{ source: [0xD330], NFC: [0xD330], NFD: [0x1111, 0x1162, 0x11AF], NFKC: [0xD330], NFKD: [0x1111, 0x1162, 0x11AF] }, +{ source: [0xD331], NFC: [0xD331], NFD: [0x1111, 0x1162, 0x11B0], NFKC: [0xD331], NFKD: [0x1111, 0x1162, 0x11B0] }, +{ source: [0xD332], NFC: [0xD332], NFD: [0x1111, 0x1162, 0x11B1], NFKC: [0xD332], NFKD: [0x1111, 0x1162, 0x11B1] }, +{ source: [0xD333], NFC: [0xD333], NFD: [0x1111, 0x1162, 0x11B2], NFKC: [0xD333], NFKD: [0x1111, 0x1162, 0x11B2] }, +{ source: [0xD334], NFC: [0xD334], NFD: [0x1111, 0x1162, 0x11B3], NFKC: [0xD334], NFKD: [0x1111, 0x1162, 0x11B3] }, +{ source: [0xD335], NFC: [0xD335], NFD: [0x1111, 0x1162, 0x11B4], NFKC: [0xD335], NFKD: [0x1111, 0x1162, 0x11B4] }, +{ source: [0xD336], NFC: [0xD336], NFD: [0x1111, 0x1162, 0x11B5], NFKC: [0xD336], NFKD: [0x1111, 0x1162, 0x11B5] }, +{ source: [0xD337], NFC: [0xD337], NFD: [0x1111, 0x1162, 0x11B6], NFKC: [0xD337], NFKD: [0x1111, 0x1162, 0x11B6] }, +{ source: [0xD338], NFC: [0xD338], NFD: [0x1111, 0x1162, 0x11B7], NFKC: [0xD338], NFKD: [0x1111, 0x1162, 0x11B7] }, +{ source: [0xD339], NFC: [0xD339], NFD: [0x1111, 0x1162, 0x11B8], NFKC: [0xD339], NFKD: [0x1111, 0x1162, 0x11B8] }, +{ source: [0xD33A], NFC: [0xD33A], NFD: [0x1111, 0x1162, 0x11B9], NFKC: [0xD33A], NFKD: [0x1111, 0x1162, 0x11B9] }, +{ source: [0xD33B], NFC: [0xD33B], NFD: [0x1111, 0x1162, 0x11BA], NFKC: [0xD33B], NFKD: [0x1111, 0x1162, 0x11BA] }, +{ source: [0xD33C], NFC: [0xD33C], NFD: [0x1111, 0x1162, 0x11BB], NFKC: [0xD33C], NFKD: [0x1111, 0x1162, 0x11BB] }, +{ source: [0xD33D], NFC: [0xD33D], NFD: [0x1111, 0x1162, 0x11BC], NFKC: [0xD33D], NFKD: [0x1111, 0x1162, 0x11BC] }, +{ source: [0xD33E], NFC: [0xD33E], NFD: [0x1111, 0x1162, 0x11BD], NFKC: [0xD33E], NFKD: [0x1111, 0x1162, 0x11BD] }, +{ source: [0xD33F], NFC: [0xD33F], NFD: [0x1111, 0x1162, 0x11BE], NFKC: [0xD33F], NFKD: [0x1111, 0x1162, 0x11BE] }, +{ source: [0xD340], NFC: [0xD340], NFD: [0x1111, 0x1162, 0x11BF], NFKC: [0xD340], NFKD: [0x1111, 0x1162, 0x11BF] }, +{ source: [0xD341], NFC: [0xD341], NFD: [0x1111, 0x1162, 0x11C0], NFKC: [0xD341], NFKD: [0x1111, 0x1162, 0x11C0] }, +{ source: [0xD342], NFC: [0xD342], NFD: [0x1111, 0x1162, 0x11C1], NFKC: [0xD342], NFKD: [0x1111, 0x1162, 0x11C1] }, +{ source: [0xD343], NFC: [0xD343], NFD: [0x1111, 0x1162, 0x11C2], NFKC: [0xD343], NFKD: [0x1111, 0x1162, 0x11C2] }, +{ source: [0xD344], NFC: [0xD344], NFD: [0x1111, 0x1163], NFKC: [0xD344], NFKD: [0x1111, 0x1163] }, +{ source: [0xD345], NFC: [0xD345], NFD: [0x1111, 0x1163, 0x11A8], NFKC: [0xD345], NFKD: [0x1111, 0x1163, 0x11A8] }, +{ source: [0xD346], NFC: [0xD346], NFD: [0x1111, 0x1163, 0x11A9], NFKC: [0xD346], NFKD: [0x1111, 0x1163, 0x11A9] }, +{ source: [0xD347], NFC: [0xD347], NFD: [0x1111, 0x1163, 0x11AA], NFKC: [0xD347], NFKD: [0x1111, 0x1163, 0x11AA] }, +{ source: [0xD348], NFC: [0xD348], NFD: [0x1111, 0x1163, 0x11AB], NFKC: [0xD348], NFKD: [0x1111, 0x1163, 0x11AB] }, +{ source: [0xD349], NFC: [0xD349], NFD: [0x1111, 0x1163, 0x11AC], NFKC: [0xD349], NFKD: [0x1111, 0x1163, 0x11AC] }, +{ source: [0xD34A], NFC: [0xD34A], NFD: [0x1111, 0x1163, 0x11AD], NFKC: [0xD34A], NFKD: [0x1111, 0x1163, 0x11AD] }, +{ source: [0xD34B], NFC: [0xD34B], NFD: [0x1111, 0x1163, 0x11AE], NFKC: [0xD34B], NFKD: [0x1111, 0x1163, 0x11AE] }, +{ source: [0xD34C], NFC: [0xD34C], NFD: [0x1111, 0x1163, 0x11AF], NFKC: [0xD34C], NFKD: [0x1111, 0x1163, 0x11AF] }, +{ source: [0xD34D], NFC: [0xD34D], NFD: [0x1111, 0x1163, 0x11B0], NFKC: [0xD34D], NFKD: [0x1111, 0x1163, 0x11B0] }, +{ source: [0xD34E], NFC: [0xD34E], NFD: [0x1111, 0x1163, 0x11B1], NFKC: [0xD34E], NFKD: [0x1111, 0x1163, 0x11B1] }, +{ source: [0xD34F], NFC: [0xD34F], NFD: [0x1111, 0x1163, 0x11B2], NFKC: [0xD34F], NFKD: [0x1111, 0x1163, 0x11B2] }, +{ source: [0xD350], NFC: [0xD350], NFD: [0x1111, 0x1163, 0x11B3], NFKC: [0xD350], NFKD: [0x1111, 0x1163, 0x11B3] }, +{ source: [0xD351], NFC: [0xD351], NFD: [0x1111, 0x1163, 0x11B4], NFKC: [0xD351], NFKD: [0x1111, 0x1163, 0x11B4] }, +{ source: [0xD352], NFC: [0xD352], NFD: [0x1111, 0x1163, 0x11B5], NFKC: [0xD352], NFKD: [0x1111, 0x1163, 0x11B5] }, +{ source: [0xD353], NFC: [0xD353], NFD: [0x1111, 0x1163, 0x11B6], NFKC: [0xD353], NFKD: [0x1111, 0x1163, 0x11B6] }, +{ source: [0xD354], NFC: [0xD354], NFD: [0x1111, 0x1163, 0x11B7], NFKC: [0xD354], NFKD: [0x1111, 0x1163, 0x11B7] }, +{ source: [0xD355], NFC: [0xD355], NFD: [0x1111, 0x1163, 0x11B8], NFKC: [0xD355], NFKD: [0x1111, 0x1163, 0x11B8] }, +{ source: [0xD356], NFC: [0xD356], NFD: [0x1111, 0x1163, 0x11B9], NFKC: [0xD356], NFKD: [0x1111, 0x1163, 0x11B9] }, +{ source: [0xD357], NFC: [0xD357], NFD: [0x1111, 0x1163, 0x11BA], NFKC: [0xD357], NFKD: [0x1111, 0x1163, 0x11BA] }, +{ source: [0xD358], NFC: [0xD358], NFD: [0x1111, 0x1163, 0x11BB], NFKC: [0xD358], NFKD: [0x1111, 0x1163, 0x11BB] }, +{ source: [0xD359], NFC: [0xD359], NFD: [0x1111, 0x1163, 0x11BC], NFKC: [0xD359], NFKD: [0x1111, 0x1163, 0x11BC] }, +{ source: [0xD35A], NFC: [0xD35A], NFD: [0x1111, 0x1163, 0x11BD], NFKC: [0xD35A], NFKD: [0x1111, 0x1163, 0x11BD] }, +{ source: [0xD35B], NFC: [0xD35B], NFD: [0x1111, 0x1163, 0x11BE], NFKC: [0xD35B], NFKD: [0x1111, 0x1163, 0x11BE] }, +{ source: [0xD35C], NFC: [0xD35C], NFD: [0x1111, 0x1163, 0x11BF], NFKC: [0xD35C], NFKD: [0x1111, 0x1163, 0x11BF] }, +{ source: [0xD35D], NFC: [0xD35D], NFD: [0x1111, 0x1163, 0x11C0], NFKC: [0xD35D], NFKD: [0x1111, 0x1163, 0x11C0] }, +{ source: [0xD35E], NFC: [0xD35E], NFD: [0x1111, 0x1163, 0x11C1], NFKC: [0xD35E], NFKD: [0x1111, 0x1163, 0x11C1] }, +{ source: [0xD35F], NFC: [0xD35F], NFD: [0x1111, 0x1163, 0x11C2], NFKC: [0xD35F], NFKD: [0x1111, 0x1163, 0x11C2] }, +{ source: [0xD360], NFC: [0xD360], NFD: [0x1111, 0x1164], NFKC: [0xD360], NFKD: [0x1111, 0x1164] }, +{ source: [0xD361], NFC: [0xD361], NFD: [0x1111, 0x1164, 0x11A8], NFKC: [0xD361], NFKD: [0x1111, 0x1164, 0x11A8] }, +{ source: [0xD362], NFC: [0xD362], NFD: [0x1111, 0x1164, 0x11A9], NFKC: [0xD362], NFKD: [0x1111, 0x1164, 0x11A9] }, +{ source: [0xD363], NFC: [0xD363], NFD: [0x1111, 0x1164, 0x11AA], NFKC: [0xD363], NFKD: [0x1111, 0x1164, 0x11AA] }, +{ source: [0xD364], NFC: [0xD364], NFD: [0x1111, 0x1164, 0x11AB], NFKC: [0xD364], NFKD: [0x1111, 0x1164, 0x11AB] }, +{ source: [0xD365], NFC: [0xD365], NFD: [0x1111, 0x1164, 0x11AC], NFKC: [0xD365], NFKD: [0x1111, 0x1164, 0x11AC] }, +{ source: [0xD366], NFC: [0xD366], NFD: [0x1111, 0x1164, 0x11AD], NFKC: [0xD366], NFKD: [0x1111, 0x1164, 0x11AD] }, +{ source: [0xD367], NFC: [0xD367], NFD: [0x1111, 0x1164, 0x11AE], NFKC: [0xD367], NFKD: [0x1111, 0x1164, 0x11AE] }, +{ source: [0xD368], NFC: [0xD368], NFD: [0x1111, 0x1164, 0x11AF], NFKC: [0xD368], NFKD: [0x1111, 0x1164, 0x11AF] }, +{ source: [0xD369], NFC: [0xD369], NFD: [0x1111, 0x1164, 0x11B0], NFKC: [0xD369], NFKD: [0x1111, 0x1164, 0x11B0] }, +{ source: [0xD36A], NFC: [0xD36A], NFD: [0x1111, 0x1164, 0x11B1], NFKC: [0xD36A], NFKD: [0x1111, 0x1164, 0x11B1] }, +{ source: [0xD36B], NFC: [0xD36B], NFD: [0x1111, 0x1164, 0x11B2], NFKC: [0xD36B], NFKD: [0x1111, 0x1164, 0x11B2] }, +{ source: [0xD36C], NFC: [0xD36C], NFD: [0x1111, 0x1164, 0x11B3], NFKC: [0xD36C], NFKD: [0x1111, 0x1164, 0x11B3] }, +{ source: [0xD36D], NFC: [0xD36D], NFD: [0x1111, 0x1164, 0x11B4], NFKC: [0xD36D], NFKD: [0x1111, 0x1164, 0x11B4] }, +{ source: [0xD36E], NFC: [0xD36E], NFD: [0x1111, 0x1164, 0x11B5], NFKC: [0xD36E], NFKD: [0x1111, 0x1164, 0x11B5] }, +{ source: [0xD36F], NFC: [0xD36F], NFD: [0x1111, 0x1164, 0x11B6], NFKC: [0xD36F], NFKD: [0x1111, 0x1164, 0x11B6] }, +{ source: [0xD370], NFC: [0xD370], NFD: [0x1111, 0x1164, 0x11B7], NFKC: [0xD370], NFKD: [0x1111, 0x1164, 0x11B7] }, +{ source: [0xD371], NFC: [0xD371], NFD: [0x1111, 0x1164, 0x11B8], NFKC: [0xD371], NFKD: [0x1111, 0x1164, 0x11B8] }, +{ source: [0xD372], NFC: [0xD372], NFD: [0x1111, 0x1164, 0x11B9], NFKC: [0xD372], NFKD: [0x1111, 0x1164, 0x11B9] }, +{ source: [0xD373], NFC: [0xD373], NFD: [0x1111, 0x1164, 0x11BA], NFKC: [0xD373], NFKD: [0x1111, 0x1164, 0x11BA] }, +{ source: [0xD374], NFC: [0xD374], NFD: [0x1111, 0x1164, 0x11BB], NFKC: [0xD374], NFKD: [0x1111, 0x1164, 0x11BB] }, +{ source: [0xD375], NFC: [0xD375], NFD: [0x1111, 0x1164, 0x11BC], NFKC: [0xD375], NFKD: [0x1111, 0x1164, 0x11BC] }, +{ source: [0xD376], NFC: [0xD376], NFD: [0x1111, 0x1164, 0x11BD], NFKC: [0xD376], NFKD: [0x1111, 0x1164, 0x11BD] }, +{ source: [0xD377], NFC: [0xD377], NFD: [0x1111, 0x1164, 0x11BE], NFKC: [0xD377], NFKD: [0x1111, 0x1164, 0x11BE] }, +{ source: [0xD378], NFC: [0xD378], NFD: [0x1111, 0x1164, 0x11BF], NFKC: [0xD378], NFKD: [0x1111, 0x1164, 0x11BF] }, +{ source: [0xD379], NFC: [0xD379], NFD: [0x1111, 0x1164, 0x11C0], NFKC: [0xD379], NFKD: [0x1111, 0x1164, 0x11C0] }, +{ source: [0xD37A], NFC: [0xD37A], NFD: [0x1111, 0x1164, 0x11C1], NFKC: [0xD37A], NFKD: [0x1111, 0x1164, 0x11C1] }, +{ source: [0xD37B], NFC: [0xD37B], NFD: [0x1111, 0x1164, 0x11C2], NFKC: [0xD37B], NFKD: [0x1111, 0x1164, 0x11C2] }, +{ source: [0xD37C], NFC: [0xD37C], NFD: [0x1111, 0x1165], NFKC: [0xD37C], NFKD: [0x1111, 0x1165] }, +{ source: [0xD37D], NFC: [0xD37D], NFD: [0x1111, 0x1165, 0x11A8], NFKC: [0xD37D], NFKD: [0x1111, 0x1165, 0x11A8] }, +{ source: [0xD37E], NFC: [0xD37E], NFD: [0x1111, 0x1165, 0x11A9], NFKC: [0xD37E], NFKD: [0x1111, 0x1165, 0x11A9] }, +{ source: [0xD37F], NFC: [0xD37F], NFD: [0x1111, 0x1165, 0x11AA], NFKC: [0xD37F], NFKD: [0x1111, 0x1165, 0x11AA] }, +{ source: [0xD380], NFC: [0xD380], NFD: [0x1111, 0x1165, 0x11AB], NFKC: [0xD380], NFKD: [0x1111, 0x1165, 0x11AB] }, +{ source: [0xD381], NFC: [0xD381], NFD: [0x1111, 0x1165, 0x11AC], NFKC: [0xD381], NFKD: [0x1111, 0x1165, 0x11AC] }, +{ source: [0xD382], NFC: [0xD382], NFD: [0x1111, 0x1165, 0x11AD], NFKC: [0xD382], NFKD: [0x1111, 0x1165, 0x11AD] }, +{ source: [0xD383], NFC: [0xD383], NFD: [0x1111, 0x1165, 0x11AE], NFKC: [0xD383], NFKD: [0x1111, 0x1165, 0x11AE] }, +{ source: [0xD384], NFC: [0xD384], NFD: [0x1111, 0x1165, 0x11AF], NFKC: [0xD384], NFKD: [0x1111, 0x1165, 0x11AF] }, +{ source: [0xD385], NFC: [0xD385], NFD: [0x1111, 0x1165, 0x11B0], NFKC: [0xD385], NFKD: [0x1111, 0x1165, 0x11B0] }, +{ source: [0xD386], NFC: [0xD386], NFD: [0x1111, 0x1165, 0x11B1], NFKC: [0xD386], NFKD: [0x1111, 0x1165, 0x11B1] }, +{ source: [0xD387], NFC: [0xD387], NFD: [0x1111, 0x1165, 0x11B2], NFKC: [0xD387], NFKD: [0x1111, 0x1165, 0x11B2] }, +{ source: [0xD388], NFC: [0xD388], NFD: [0x1111, 0x1165, 0x11B3], NFKC: [0xD388], NFKD: [0x1111, 0x1165, 0x11B3] }, +{ source: [0xD389], NFC: [0xD389], NFD: [0x1111, 0x1165, 0x11B4], NFKC: [0xD389], NFKD: [0x1111, 0x1165, 0x11B4] }, +{ source: [0xD38A], NFC: [0xD38A], NFD: [0x1111, 0x1165, 0x11B5], NFKC: [0xD38A], NFKD: [0x1111, 0x1165, 0x11B5] }, +{ source: [0xD38B], NFC: [0xD38B], NFD: [0x1111, 0x1165, 0x11B6], NFKC: [0xD38B], NFKD: [0x1111, 0x1165, 0x11B6] }, +{ source: [0xD38C], NFC: [0xD38C], NFD: [0x1111, 0x1165, 0x11B7], NFKC: [0xD38C], NFKD: [0x1111, 0x1165, 0x11B7] }, +{ source: [0xD38D], NFC: [0xD38D], NFD: [0x1111, 0x1165, 0x11B8], NFKC: [0xD38D], NFKD: [0x1111, 0x1165, 0x11B8] }, +{ source: [0xD38E], NFC: [0xD38E], NFD: [0x1111, 0x1165, 0x11B9], NFKC: [0xD38E], NFKD: [0x1111, 0x1165, 0x11B9] }, +{ source: [0xD38F], NFC: [0xD38F], NFD: [0x1111, 0x1165, 0x11BA], NFKC: [0xD38F], NFKD: [0x1111, 0x1165, 0x11BA] }, +{ source: [0xD390], NFC: [0xD390], NFD: [0x1111, 0x1165, 0x11BB], NFKC: [0xD390], NFKD: [0x1111, 0x1165, 0x11BB] }, +{ source: [0xD391], NFC: [0xD391], NFD: [0x1111, 0x1165, 0x11BC], NFKC: [0xD391], NFKD: [0x1111, 0x1165, 0x11BC] }, +{ source: [0xD392], NFC: [0xD392], NFD: [0x1111, 0x1165, 0x11BD], NFKC: [0xD392], NFKD: [0x1111, 0x1165, 0x11BD] }, +{ source: [0xD393], NFC: [0xD393], NFD: [0x1111, 0x1165, 0x11BE], NFKC: [0xD393], NFKD: [0x1111, 0x1165, 0x11BE] }, +{ source: [0xD394], NFC: [0xD394], NFD: [0x1111, 0x1165, 0x11BF], NFKC: [0xD394], NFKD: [0x1111, 0x1165, 0x11BF] }, +{ source: [0xD395], NFC: [0xD395], NFD: [0x1111, 0x1165, 0x11C0], NFKC: [0xD395], NFKD: [0x1111, 0x1165, 0x11C0] }, +{ source: [0xD396], NFC: [0xD396], NFD: [0x1111, 0x1165, 0x11C1], NFKC: [0xD396], NFKD: [0x1111, 0x1165, 0x11C1] }, +{ source: [0xD397], NFC: [0xD397], NFD: [0x1111, 0x1165, 0x11C2], NFKC: [0xD397], NFKD: [0x1111, 0x1165, 0x11C2] }, +{ source: [0xD398], NFC: [0xD398], NFD: [0x1111, 0x1166], NFKC: [0xD398], NFKD: [0x1111, 0x1166] }, +{ source: [0xD399], NFC: [0xD399], NFD: [0x1111, 0x1166, 0x11A8], NFKC: [0xD399], NFKD: [0x1111, 0x1166, 0x11A8] }, +{ source: [0xD39A], NFC: [0xD39A], NFD: [0x1111, 0x1166, 0x11A9], NFKC: [0xD39A], NFKD: [0x1111, 0x1166, 0x11A9] }, +{ source: [0xD39B], NFC: [0xD39B], NFD: [0x1111, 0x1166, 0x11AA], NFKC: [0xD39B], NFKD: [0x1111, 0x1166, 0x11AA] }, +{ source: [0xD39C], NFC: [0xD39C], NFD: [0x1111, 0x1166, 0x11AB], NFKC: [0xD39C], NFKD: [0x1111, 0x1166, 0x11AB] }, +{ source: [0xD39D], NFC: [0xD39D], NFD: [0x1111, 0x1166, 0x11AC], NFKC: [0xD39D], NFKD: [0x1111, 0x1166, 0x11AC] }, +{ source: [0xD39E], NFC: [0xD39E], NFD: [0x1111, 0x1166, 0x11AD], NFKC: [0xD39E], NFKD: [0x1111, 0x1166, 0x11AD] }, +{ source: [0xD39F], NFC: [0xD39F], NFD: [0x1111, 0x1166, 0x11AE], NFKC: [0xD39F], NFKD: [0x1111, 0x1166, 0x11AE] }, +{ source: [0xD3A0], NFC: [0xD3A0], NFD: [0x1111, 0x1166, 0x11AF], NFKC: [0xD3A0], NFKD: [0x1111, 0x1166, 0x11AF] }, +{ source: [0xD3A1], NFC: [0xD3A1], NFD: [0x1111, 0x1166, 0x11B0], NFKC: [0xD3A1], NFKD: [0x1111, 0x1166, 0x11B0] }, +{ source: [0xD3A2], NFC: [0xD3A2], NFD: [0x1111, 0x1166, 0x11B1], NFKC: [0xD3A2], NFKD: [0x1111, 0x1166, 0x11B1] }, +{ source: [0xD3A3], NFC: [0xD3A3], NFD: [0x1111, 0x1166, 0x11B2], NFKC: [0xD3A3], NFKD: [0x1111, 0x1166, 0x11B2] }, +{ source: [0xD3A4], NFC: [0xD3A4], NFD: [0x1111, 0x1166, 0x11B3], NFKC: [0xD3A4], NFKD: [0x1111, 0x1166, 0x11B3] }, +{ source: [0xD3A5], NFC: [0xD3A5], NFD: [0x1111, 0x1166, 0x11B4], NFKC: [0xD3A5], NFKD: [0x1111, 0x1166, 0x11B4] }, +{ source: [0xD3A6], NFC: [0xD3A6], NFD: [0x1111, 0x1166, 0x11B5], NFKC: [0xD3A6], NFKD: [0x1111, 0x1166, 0x11B5] }, +{ source: [0xD3A7], NFC: [0xD3A7], NFD: [0x1111, 0x1166, 0x11B6], NFKC: [0xD3A7], NFKD: [0x1111, 0x1166, 0x11B6] }, +{ source: [0xD3A8], NFC: [0xD3A8], NFD: [0x1111, 0x1166, 0x11B7], NFKC: [0xD3A8], NFKD: [0x1111, 0x1166, 0x11B7] }, +{ source: [0xD3A9], NFC: [0xD3A9], NFD: [0x1111, 0x1166, 0x11B8], NFKC: [0xD3A9], NFKD: [0x1111, 0x1166, 0x11B8] }, +{ source: [0xD3AA], NFC: [0xD3AA], NFD: [0x1111, 0x1166, 0x11B9], NFKC: [0xD3AA], NFKD: [0x1111, 0x1166, 0x11B9] }, +{ source: [0xD3AB], NFC: [0xD3AB], NFD: [0x1111, 0x1166, 0x11BA], NFKC: [0xD3AB], NFKD: [0x1111, 0x1166, 0x11BA] }, +{ source: [0xD3AC], NFC: [0xD3AC], NFD: [0x1111, 0x1166, 0x11BB], NFKC: [0xD3AC], NFKD: [0x1111, 0x1166, 0x11BB] }, +{ source: [0xD3AD], NFC: [0xD3AD], NFD: [0x1111, 0x1166, 0x11BC], NFKC: [0xD3AD], NFKD: [0x1111, 0x1166, 0x11BC] }, +{ source: [0xD3AE], NFC: [0xD3AE], NFD: [0x1111, 0x1166, 0x11BD], NFKC: [0xD3AE], NFKD: [0x1111, 0x1166, 0x11BD] }, +{ source: [0xD3AF], NFC: [0xD3AF], NFD: [0x1111, 0x1166, 0x11BE], NFKC: [0xD3AF], NFKD: [0x1111, 0x1166, 0x11BE] }, +{ source: [0xD3B0], NFC: [0xD3B0], NFD: [0x1111, 0x1166, 0x11BF], NFKC: [0xD3B0], NFKD: [0x1111, 0x1166, 0x11BF] }, +{ source: [0xD3B1], NFC: [0xD3B1], NFD: [0x1111, 0x1166, 0x11C0], NFKC: [0xD3B1], NFKD: [0x1111, 0x1166, 0x11C0] }, +{ source: [0xD3B2], NFC: [0xD3B2], NFD: [0x1111, 0x1166, 0x11C1], NFKC: [0xD3B2], NFKD: [0x1111, 0x1166, 0x11C1] }, +{ source: [0xD3B3], NFC: [0xD3B3], NFD: [0x1111, 0x1166, 0x11C2], NFKC: [0xD3B3], NFKD: [0x1111, 0x1166, 0x11C2] }, +{ source: [0xD3B4], NFC: [0xD3B4], NFD: [0x1111, 0x1167], NFKC: [0xD3B4], NFKD: [0x1111, 0x1167] }, +{ source: [0xD3B5], NFC: [0xD3B5], NFD: [0x1111, 0x1167, 0x11A8], NFKC: [0xD3B5], NFKD: [0x1111, 0x1167, 0x11A8] }, +{ source: [0xD3B6], NFC: [0xD3B6], NFD: [0x1111, 0x1167, 0x11A9], NFKC: [0xD3B6], NFKD: [0x1111, 0x1167, 0x11A9] }, +{ source: [0xD3B7], NFC: [0xD3B7], NFD: [0x1111, 0x1167, 0x11AA], NFKC: [0xD3B7], NFKD: [0x1111, 0x1167, 0x11AA] }, +{ source: [0xD3B8], NFC: [0xD3B8], NFD: [0x1111, 0x1167, 0x11AB], NFKC: [0xD3B8], NFKD: [0x1111, 0x1167, 0x11AB] }, +{ source: [0xD3B9], NFC: [0xD3B9], NFD: [0x1111, 0x1167, 0x11AC], NFKC: [0xD3B9], NFKD: [0x1111, 0x1167, 0x11AC] }, +{ source: [0xD3BA], NFC: [0xD3BA], NFD: [0x1111, 0x1167, 0x11AD], NFKC: [0xD3BA], NFKD: [0x1111, 0x1167, 0x11AD] }, +{ source: [0xD3BB], NFC: [0xD3BB], NFD: [0x1111, 0x1167, 0x11AE], NFKC: [0xD3BB], NFKD: [0x1111, 0x1167, 0x11AE] }, +{ source: [0xD3BC], NFC: [0xD3BC], NFD: [0x1111, 0x1167, 0x11AF], NFKC: [0xD3BC], NFKD: [0x1111, 0x1167, 0x11AF] }, +{ source: [0xD3BD], NFC: [0xD3BD], NFD: [0x1111, 0x1167, 0x11B0], NFKC: [0xD3BD], NFKD: [0x1111, 0x1167, 0x11B0] }, +{ source: [0xD3BE], NFC: [0xD3BE], NFD: [0x1111, 0x1167, 0x11B1], NFKC: [0xD3BE], NFKD: [0x1111, 0x1167, 0x11B1] }, +{ source: [0xD3BF], NFC: [0xD3BF], NFD: [0x1111, 0x1167, 0x11B2], NFKC: [0xD3BF], NFKD: [0x1111, 0x1167, 0x11B2] }, +{ source: [0xD3C0], NFC: [0xD3C0], NFD: [0x1111, 0x1167, 0x11B3], NFKC: [0xD3C0], NFKD: [0x1111, 0x1167, 0x11B3] }, +{ source: [0xD3C1], NFC: [0xD3C1], NFD: [0x1111, 0x1167, 0x11B4], NFKC: [0xD3C1], NFKD: [0x1111, 0x1167, 0x11B4] }, +{ source: [0xD3C2], NFC: [0xD3C2], NFD: [0x1111, 0x1167, 0x11B5], NFKC: [0xD3C2], NFKD: [0x1111, 0x1167, 0x11B5] }, +{ source: [0xD3C3], NFC: [0xD3C3], NFD: [0x1111, 0x1167, 0x11B6], NFKC: [0xD3C3], NFKD: [0x1111, 0x1167, 0x11B6] }, +{ source: [0xD3C4], NFC: [0xD3C4], NFD: [0x1111, 0x1167, 0x11B7], NFKC: [0xD3C4], NFKD: [0x1111, 0x1167, 0x11B7] }, +{ source: [0xD3C5], NFC: [0xD3C5], NFD: [0x1111, 0x1167, 0x11B8], NFKC: [0xD3C5], NFKD: [0x1111, 0x1167, 0x11B8] }, +{ source: [0xD3C6], NFC: [0xD3C6], NFD: [0x1111, 0x1167, 0x11B9], NFKC: [0xD3C6], NFKD: [0x1111, 0x1167, 0x11B9] }, +{ source: [0xD3C7], NFC: [0xD3C7], NFD: [0x1111, 0x1167, 0x11BA], NFKC: [0xD3C7], NFKD: [0x1111, 0x1167, 0x11BA] }, +{ source: [0xD3C8], NFC: [0xD3C8], NFD: [0x1111, 0x1167, 0x11BB], NFKC: [0xD3C8], NFKD: [0x1111, 0x1167, 0x11BB] }, +{ source: [0xD3C9], NFC: [0xD3C9], NFD: [0x1111, 0x1167, 0x11BC], NFKC: [0xD3C9], NFKD: [0x1111, 0x1167, 0x11BC] }, +{ source: [0xD3CA], NFC: [0xD3CA], NFD: [0x1111, 0x1167, 0x11BD], NFKC: [0xD3CA], NFKD: [0x1111, 0x1167, 0x11BD] }, +{ source: [0xD3CB], NFC: [0xD3CB], NFD: [0x1111, 0x1167, 0x11BE], NFKC: [0xD3CB], NFKD: [0x1111, 0x1167, 0x11BE] }, +{ source: [0xD3CC], NFC: [0xD3CC], NFD: [0x1111, 0x1167, 0x11BF], NFKC: [0xD3CC], NFKD: [0x1111, 0x1167, 0x11BF] }, +{ source: [0xD3CD], NFC: [0xD3CD], NFD: [0x1111, 0x1167, 0x11C0], NFKC: [0xD3CD], NFKD: [0x1111, 0x1167, 0x11C0] }, +{ source: [0xD3CE], NFC: [0xD3CE], NFD: [0x1111, 0x1167, 0x11C1], NFKC: [0xD3CE], NFKD: [0x1111, 0x1167, 0x11C1] }, +{ source: [0xD3CF], NFC: [0xD3CF], NFD: [0x1111, 0x1167, 0x11C2], NFKC: [0xD3CF], NFKD: [0x1111, 0x1167, 0x11C2] }, +{ source: [0xD3D0], NFC: [0xD3D0], NFD: [0x1111, 0x1168], NFKC: [0xD3D0], NFKD: [0x1111, 0x1168] }, +{ source: [0xD3D1], NFC: [0xD3D1], NFD: [0x1111, 0x1168, 0x11A8], NFKC: [0xD3D1], NFKD: [0x1111, 0x1168, 0x11A8] }, +{ source: [0xD3D2], NFC: [0xD3D2], NFD: [0x1111, 0x1168, 0x11A9], NFKC: [0xD3D2], NFKD: [0x1111, 0x1168, 0x11A9] }, +{ source: [0xD3D3], NFC: [0xD3D3], NFD: [0x1111, 0x1168, 0x11AA], NFKC: [0xD3D3], NFKD: [0x1111, 0x1168, 0x11AA] }, +{ source: [0xD3D4], NFC: [0xD3D4], NFD: [0x1111, 0x1168, 0x11AB], NFKC: [0xD3D4], NFKD: [0x1111, 0x1168, 0x11AB] }, +{ source: [0xD3D5], NFC: [0xD3D5], NFD: [0x1111, 0x1168, 0x11AC], NFKC: [0xD3D5], NFKD: [0x1111, 0x1168, 0x11AC] }, +{ source: [0xD3D6], NFC: [0xD3D6], NFD: [0x1111, 0x1168, 0x11AD], NFKC: [0xD3D6], NFKD: [0x1111, 0x1168, 0x11AD] }, +{ source: [0xD3D7], NFC: [0xD3D7], NFD: [0x1111, 0x1168, 0x11AE], NFKC: [0xD3D7], NFKD: [0x1111, 0x1168, 0x11AE] }, +{ source: [0xD3D8], NFC: [0xD3D8], NFD: [0x1111, 0x1168, 0x11AF], NFKC: [0xD3D8], NFKD: [0x1111, 0x1168, 0x11AF] }, +{ source: [0xD3D9], NFC: [0xD3D9], NFD: [0x1111, 0x1168, 0x11B0], NFKC: [0xD3D9], NFKD: [0x1111, 0x1168, 0x11B0] }, +{ source: [0xD3DA], NFC: [0xD3DA], NFD: [0x1111, 0x1168, 0x11B1], NFKC: [0xD3DA], NFKD: [0x1111, 0x1168, 0x11B1] }, +{ source: [0xD3DB], NFC: [0xD3DB], NFD: [0x1111, 0x1168, 0x11B2], NFKC: [0xD3DB], NFKD: [0x1111, 0x1168, 0x11B2] }, +{ source: [0xD3DC], NFC: [0xD3DC], NFD: [0x1111, 0x1168, 0x11B3], NFKC: [0xD3DC], NFKD: [0x1111, 0x1168, 0x11B3] }, +{ source: [0xD3DD], NFC: [0xD3DD], NFD: [0x1111, 0x1168, 0x11B4], NFKC: [0xD3DD], NFKD: [0x1111, 0x1168, 0x11B4] }, +{ source: [0xD3DE], NFC: [0xD3DE], NFD: [0x1111, 0x1168, 0x11B5], NFKC: [0xD3DE], NFKD: [0x1111, 0x1168, 0x11B5] }, +{ source: [0xD3DF], NFC: [0xD3DF], NFD: [0x1111, 0x1168, 0x11B6], NFKC: [0xD3DF], NFKD: [0x1111, 0x1168, 0x11B6] }, +{ source: [0xD3E0], NFC: [0xD3E0], NFD: [0x1111, 0x1168, 0x11B7], NFKC: [0xD3E0], NFKD: [0x1111, 0x1168, 0x11B7] }, +{ source: [0xD3E1], NFC: [0xD3E1], NFD: [0x1111, 0x1168, 0x11B8], NFKC: [0xD3E1], NFKD: [0x1111, 0x1168, 0x11B8] }, +{ source: [0xD3E2], NFC: [0xD3E2], NFD: [0x1111, 0x1168, 0x11B9], NFKC: [0xD3E2], NFKD: [0x1111, 0x1168, 0x11B9] }, +{ source: [0xD3E3], NFC: [0xD3E3], NFD: [0x1111, 0x1168, 0x11BA], NFKC: [0xD3E3], NFKD: [0x1111, 0x1168, 0x11BA] }, +{ source: [0xD3E4], NFC: [0xD3E4], NFD: [0x1111, 0x1168, 0x11BB], NFKC: [0xD3E4], NFKD: [0x1111, 0x1168, 0x11BB] }, +{ source: [0xD3E5], NFC: [0xD3E5], NFD: [0x1111, 0x1168, 0x11BC], NFKC: [0xD3E5], NFKD: [0x1111, 0x1168, 0x11BC] }, +{ source: [0xD3E6], NFC: [0xD3E6], NFD: [0x1111, 0x1168, 0x11BD], NFKC: [0xD3E6], NFKD: [0x1111, 0x1168, 0x11BD] }, +{ source: [0xD3E7], NFC: [0xD3E7], NFD: [0x1111, 0x1168, 0x11BE], NFKC: [0xD3E7], NFKD: [0x1111, 0x1168, 0x11BE] }, +{ source: [0xD3E8], NFC: [0xD3E8], NFD: [0x1111, 0x1168, 0x11BF], NFKC: [0xD3E8], NFKD: [0x1111, 0x1168, 0x11BF] }, +{ source: [0xD3E9], NFC: [0xD3E9], NFD: [0x1111, 0x1168, 0x11C0], NFKC: [0xD3E9], NFKD: [0x1111, 0x1168, 0x11C0] }, +{ source: [0xD3EA], NFC: [0xD3EA], NFD: [0x1111, 0x1168, 0x11C1], NFKC: [0xD3EA], NFKD: [0x1111, 0x1168, 0x11C1] }, +{ source: [0xD3EB], NFC: [0xD3EB], NFD: [0x1111, 0x1168, 0x11C2], NFKC: [0xD3EB], NFKD: [0x1111, 0x1168, 0x11C2] }, +{ source: [0xD3EC], NFC: [0xD3EC], NFD: [0x1111, 0x1169], NFKC: [0xD3EC], NFKD: [0x1111, 0x1169] }, +{ source: [0xD3ED], NFC: [0xD3ED], NFD: [0x1111, 0x1169, 0x11A8], NFKC: [0xD3ED], NFKD: [0x1111, 0x1169, 0x11A8] }, +{ source: [0xD3EE], NFC: [0xD3EE], NFD: [0x1111, 0x1169, 0x11A9], NFKC: [0xD3EE], NFKD: [0x1111, 0x1169, 0x11A9] }, +{ source: [0xD3EF], NFC: [0xD3EF], NFD: [0x1111, 0x1169, 0x11AA], NFKC: [0xD3EF], NFKD: [0x1111, 0x1169, 0x11AA] }, +{ source: [0xD3F0], NFC: [0xD3F0], NFD: [0x1111, 0x1169, 0x11AB], NFKC: [0xD3F0], NFKD: [0x1111, 0x1169, 0x11AB] }, +{ source: [0xD3F1], NFC: [0xD3F1], NFD: [0x1111, 0x1169, 0x11AC], NFKC: [0xD3F1], NFKD: [0x1111, 0x1169, 0x11AC] }, +{ source: [0xD3F2], NFC: [0xD3F2], NFD: [0x1111, 0x1169, 0x11AD], NFKC: [0xD3F2], NFKD: [0x1111, 0x1169, 0x11AD] }, +{ source: [0xD3F3], NFC: [0xD3F3], NFD: [0x1111, 0x1169, 0x11AE], NFKC: [0xD3F3], NFKD: [0x1111, 0x1169, 0x11AE] }, +{ source: [0xD3F4], NFC: [0xD3F4], NFD: [0x1111, 0x1169, 0x11AF], NFKC: [0xD3F4], NFKD: [0x1111, 0x1169, 0x11AF] }, +{ source: [0xD3F5], NFC: [0xD3F5], NFD: [0x1111, 0x1169, 0x11B0], NFKC: [0xD3F5], NFKD: [0x1111, 0x1169, 0x11B0] }, +{ source: [0xD3F6], NFC: [0xD3F6], NFD: [0x1111, 0x1169, 0x11B1], NFKC: [0xD3F6], NFKD: [0x1111, 0x1169, 0x11B1] }, +{ source: [0xD3F7], NFC: [0xD3F7], NFD: [0x1111, 0x1169, 0x11B2], NFKC: [0xD3F7], NFKD: [0x1111, 0x1169, 0x11B2] }, +{ source: [0xD3F8], NFC: [0xD3F8], NFD: [0x1111, 0x1169, 0x11B3], NFKC: [0xD3F8], NFKD: [0x1111, 0x1169, 0x11B3] }, +{ source: [0xD3F9], NFC: [0xD3F9], NFD: [0x1111, 0x1169, 0x11B4], NFKC: [0xD3F9], NFKD: [0x1111, 0x1169, 0x11B4] }, +{ source: [0xD3FA], NFC: [0xD3FA], NFD: [0x1111, 0x1169, 0x11B5], NFKC: [0xD3FA], NFKD: [0x1111, 0x1169, 0x11B5] }, +{ source: [0xD3FB], NFC: [0xD3FB], NFD: [0x1111, 0x1169, 0x11B6], NFKC: [0xD3FB], NFKD: [0x1111, 0x1169, 0x11B6] }, +{ source: [0xD3FC], NFC: [0xD3FC], NFD: [0x1111, 0x1169, 0x11B7], NFKC: [0xD3FC], NFKD: [0x1111, 0x1169, 0x11B7] }, +{ source: [0xD3FD], NFC: [0xD3FD], NFD: [0x1111, 0x1169, 0x11B8], NFKC: [0xD3FD], NFKD: [0x1111, 0x1169, 0x11B8] }, +{ source: [0xD3FE], NFC: [0xD3FE], NFD: [0x1111, 0x1169, 0x11B9], NFKC: [0xD3FE], NFKD: [0x1111, 0x1169, 0x11B9] }, +{ source: [0xD3FF], NFC: [0xD3FF], NFD: [0x1111, 0x1169, 0x11BA], NFKC: [0xD3FF], NFKD: [0x1111, 0x1169, 0x11BA] }, +{ source: [0xD400], NFC: [0xD400], NFD: [0x1111, 0x1169, 0x11BB], NFKC: [0xD400], NFKD: [0x1111, 0x1169, 0x11BB] }, +{ source: [0xD401], NFC: [0xD401], NFD: [0x1111, 0x1169, 0x11BC], NFKC: [0xD401], NFKD: [0x1111, 0x1169, 0x11BC] }, +{ source: [0xD402], NFC: [0xD402], NFD: [0x1111, 0x1169, 0x11BD], NFKC: [0xD402], NFKD: [0x1111, 0x1169, 0x11BD] }, +{ source: [0xD403], NFC: [0xD403], NFD: [0x1111, 0x1169, 0x11BE], NFKC: [0xD403], NFKD: [0x1111, 0x1169, 0x11BE] }, +{ source: [0xD404], NFC: [0xD404], NFD: [0x1111, 0x1169, 0x11BF], NFKC: [0xD404], NFKD: [0x1111, 0x1169, 0x11BF] }, +{ source: [0xD405], NFC: [0xD405], NFD: [0x1111, 0x1169, 0x11C0], NFKC: [0xD405], NFKD: [0x1111, 0x1169, 0x11C0] }, +{ source: [0xD406], NFC: [0xD406], NFD: [0x1111, 0x1169, 0x11C1], NFKC: [0xD406], NFKD: [0x1111, 0x1169, 0x11C1] }, +{ source: [0xD407], NFC: [0xD407], NFD: [0x1111, 0x1169, 0x11C2], NFKC: [0xD407], NFKD: [0x1111, 0x1169, 0x11C2] }, +{ source: [0xD408], NFC: [0xD408], NFD: [0x1111, 0x116A], NFKC: [0xD408], NFKD: [0x1111, 0x116A] }, +{ source: [0xD409], NFC: [0xD409], NFD: [0x1111, 0x116A, 0x11A8], NFKC: [0xD409], NFKD: [0x1111, 0x116A, 0x11A8] }, +{ source: [0xD40A], NFC: [0xD40A], NFD: [0x1111, 0x116A, 0x11A9], NFKC: [0xD40A], NFKD: [0x1111, 0x116A, 0x11A9] }, +{ source: [0xD40B], NFC: [0xD40B], NFD: [0x1111, 0x116A, 0x11AA], NFKC: [0xD40B], NFKD: [0x1111, 0x116A, 0x11AA] }, +{ source: [0xD40C], NFC: [0xD40C], NFD: [0x1111, 0x116A, 0x11AB], NFKC: [0xD40C], NFKD: [0x1111, 0x116A, 0x11AB] }, +{ source: [0xD40D], NFC: [0xD40D], NFD: [0x1111, 0x116A, 0x11AC], NFKC: [0xD40D], NFKD: [0x1111, 0x116A, 0x11AC] }, +{ source: [0xD40E], NFC: [0xD40E], NFD: [0x1111, 0x116A, 0x11AD], NFKC: [0xD40E], NFKD: [0x1111, 0x116A, 0x11AD] }, +{ source: [0xD40F], NFC: [0xD40F], NFD: [0x1111, 0x116A, 0x11AE], NFKC: [0xD40F], NFKD: [0x1111, 0x116A, 0x11AE] }, +{ source: [0xD410], NFC: [0xD410], NFD: [0x1111, 0x116A, 0x11AF], NFKC: [0xD410], NFKD: [0x1111, 0x116A, 0x11AF] }, +{ source: [0xD411], NFC: [0xD411], NFD: [0x1111, 0x116A, 0x11B0], NFKC: [0xD411], NFKD: [0x1111, 0x116A, 0x11B0] }, +{ source: [0xD412], NFC: [0xD412], NFD: [0x1111, 0x116A, 0x11B1], NFKC: [0xD412], NFKD: [0x1111, 0x116A, 0x11B1] }, +{ source: [0xD413], NFC: [0xD413], NFD: [0x1111, 0x116A, 0x11B2], NFKC: [0xD413], NFKD: [0x1111, 0x116A, 0x11B2] }, +{ source: [0xD414], NFC: [0xD414], NFD: [0x1111, 0x116A, 0x11B3], NFKC: [0xD414], NFKD: [0x1111, 0x116A, 0x11B3] }, +{ source: [0xD415], NFC: [0xD415], NFD: [0x1111, 0x116A, 0x11B4], NFKC: [0xD415], NFKD: [0x1111, 0x116A, 0x11B4] }, +{ source: [0xD416], NFC: [0xD416], NFD: [0x1111, 0x116A, 0x11B5], NFKC: [0xD416], NFKD: [0x1111, 0x116A, 0x11B5] }, +{ source: [0xD417], NFC: [0xD417], NFD: [0x1111, 0x116A, 0x11B6], NFKC: [0xD417], NFKD: [0x1111, 0x116A, 0x11B6] }, +{ source: [0xD418], NFC: [0xD418], NFD: [0x1111, 0x116A, 0x11B7], NFKC: [0xD418], NFKD: [0x1111, 0x116A, 0x11B7] }, +{ source: [0xD419], NFC: [0xD419], NFD: [0x1111, 0x116A, 0x11B8], NFKC: [0xD419], NFKD: [0x1111, 0x116A, 0x11B8] }, +{ source: [0xD41A], NFC: [0xD41A], NFD: [0x1111, 0x116A, 0x11B9], NFKC: [0xD41A], NFKD: [0x1111, 0x116A, 0x11B9] }, +{ source: [0xD41B], NFC: [0xD41B], NFD: [0x1111, 0x116A, 0x11BA], NFKC: [0xD41B], NFKD: [0x1111, 0x116A, 0x11BA] }, +{ source: [0xD41C], NFC: [0xD41C], NFD: [0x1111, 0x116A, 0x11BB], NFKC: [0xD41C], NFKD: [0x1111, 0x116A, 0x11BB] }, +{ source: [0xD41D], NFC: [0xD41D], NFD: [0x1111, 0x116A, 0x11BC], NFKC: [0xD41D], NFKD: [0x1111, 0x116A, 0x11BC] }, +{ source: [0xD41E], NFC: [0xD41E], NFD: [0x1111, 0x116A, 0x11BD], NFKC: [0xD41E], NFKD: [0x1111, 0x116A, 0x11BD] }, +{ source: [0xD41F], NFC: [0xD41F], NFD: [0x1111, 0x116A, 0x11BE], NFKC: [0xD41F], NFKD: [0x1111, 0x116A, 0x11BE] }, +{ source: [0xD420], NFC: [0xD420], NFD: [0x1111, 0x116A, 0x11BF], NFKC: [0xD420], NFKD: [0x1111, 0x116A, 0x11BF] }, +{ source: [0xD421], NFC: [0xD421], NFD: [0x1111, 0x116A, 0x11C0], NFKC: [0xD421], NFKD: [0x1111, 0x116A, 0x11C0] }, +{ source: [0xD422], NFC: [0xD422], NFD: [0x1111, 0x116A, 0x11C1], NFKC: [0xD422], NFKD: [0x1111, 0x116A, 0x11C1] }, +{ source: [0xD423], NFC: [0xD423], NFD: [0x1111, 0x116A, 0x11C2], NFKC: [0xD423], NFKD: [0x1111, 0x116A, 0x11C2] }, +{ source: [0xD424], NFC: [0xD424], NFD: [0x1111, 0x116B], NFKC: [0xD424], NFKD: [0x1111, 0x116B] }, +{ source: [0xD425], NFC: [0xD425], NFD: [0x1111, 0x116B, 0x11A8], NFKC: [0xD425], NFKD: [0x1111, 0x116B, 0x11A8] }, +{ source: [0xD426], NFC: [0xD426], NFD: [0x1111, 0x116B, 0x11A9], NFKC: [0xD426], NFKD: [0x1111, 0x116B, 0x11A9] }, +{ source: [0xD427], NFC: [0xD427], NFD: [0x1111, 0x116B, 0x11AA], NFKC: [0xD427], NFKD: [0x1111, 0x116B, 0x11AA] }, +{ source: [0xD428], NFC: [0xD428], NFD: [0x1111, 0x116B, 0x11AB], NFKC: [0xD428], NFKD: [0x1111, 0x116B, 0x11AB] }, +{ source: [0xD429], NFC: [0xD429], NFD: [0x1111, 0x116B, 0x11AC], NFKC: [0xD429], NFKD: [0x1111, 0x116B, 0x11AC] }, +{ source: [0xD42A], NFC: [0xD42A], NFD: [0x1111, 0x116B, 0x11AD], NFKC: [0xD42A], NFKD: [0x1111, 0x116B, 0x11AD] }, +{ source: [0xD42B], NFC: [0xD42B], NFD: [0x1111, 0x116B, 0x11AE], NFKC: [0xD42B], NFKD: [0x1111, 0x116B, 0x11AE] }, +{ source: [0xD42C], NFC: [0xD42C], NFD: [0x1111, 0x116B, 0x11AF], NFKC: [0xD42C], NFKD: [0x1111, 0x116B, 0x11AF] }, +{ source: [0xD42D], NFC: [0xD42D], NFD: [0x1111, 0x116B, 0x11B0], NFKC: [0xD42D], NFKD: [0x1111, 0x116B, 0x11B0] }, +{ source: [0xD42E], NFC: [0xD42E], NFD: [0x1111, 0x116B, 0x11B1], NFKC: [0xD42E], NFKD: [0x1111, 0x116B, 0x11B1] }, +{ source: [0xD42F], NFC: [0xD42F], NFD: [0x1111, 0x116B, 0x11B2], NFKC: [0xD42F], NFKD: [0x1111, 0x116B, 0x11B2] }, +{ source: [0xD430], NFC: [0xD430], NFD: [0x1111, 0x116B, 0x11B3], NFKC: [0xD430], NFKD: [0x1111, 0x116B, 0x11B3] }, +{ source: [0xD431], NFC: [0xD431], NFD: [0x1111, 0x116B, 0x11B4], NFKC: [0xD431], NFKD: [0x1111, 0x116B, 0x11B4] }, +{ source: [0xD432], NFC: [0xD432], NFD: [0x1111, 0x116B, 0x11B5], NFKC: [0xD432], NFKD: [0x1111, 0x116B, 0x11B5] }, +{ source: [0xD433], NFC: [0xD433], NFD: [0x1111, 0x116B, 0x11B6], NFKC: [0xD433], NFKD: [0x1111, 0x116B, 0x11B6] }, +{ source: [0xD434], NFC: [0xD434], NFD: [0x1111, 0x116B, 0x11B7], NFKC: [0xD434], NFKD: [0x1111, 0x116B, 0x11B7] }, +{ source: [0xD435], NFC: [0xD435], NFD: [0x1111, 0x116B, 0x11B8], NFKC: [0xD435], NFKD: [0x1111, 0x116B, 0x11B8] }, +{ source: [0xD436], NFC: [0xD436], NFD: [0x1111, 0x116B, 0x11B9], NFKC: [0xD436], NFKD: [0x1111, 0x116B, 0x11B9] }, +{ source: [0xD437], NFC: [0xD437], NFD: [0x1111, 0x116B, 0x11BA], NFKC: [0xD437], NFKD: [0x1111, 0x116B, 0x11BA] }, +{ source: [0xD438], NFC: [0xD438], NFD: [0x1111, 0x116B, 0x11BB], NFKC: [0xD438], NFKD: [0x1111, 0x116B, 0x11BB] }, +{ source: [0xD439], NFC: [0xD439], NFD: [0x1111, 0x116B, 0x11BC], NFKC: [0xD439], NFKD: [0x1111, 0x116B, 0x11BC] }, +{ source: [0xD43A], NFC: [0xD43A], NFD: [0x1111, 0x116B, 0x11BD], NFKC: [0xD43A], NFKD: [0x1111, 0x116B, 0x11BD] }, +{ source: [0xD43B], NFC: [0xD43B], NFD: [0x1111, 0x116B, 0x11BE], NFKC: [0xD43B], NFKD: [0x1111, 0x116B, 0x11BE] }, +{ source: [0xD43C], NFC: [0xD43C], NFD: [0x1111, 0x116B, 0x11BF], NFKC: [0xD43C], NFKD: [0x1111, 0x116B, 0x11BF] }, +{ source: [0xD43D], NFC: [0xD43D], NFD: [0x1111, 0x116B, 0x11C0], NFKC: [0xD43D], NFKD: [0x1111, 0x116B, 0x11C0] }, +{ source: [0xD43E], NFC: [0xD43E], NFD: [0x1111, 0x116B, 0x11C1], NFKC: [0xD43E], NFKD: [0x1111, 0x116B, 0x11C1] }, +{ source: [0xD43F], NFC: [0xD43F], NFD: [0x1111, 0x116B, 0x11C2], NFKC: [0xD43F], NFKD: [0x1111, 0x116B, 0x11C2] }, +{ source: [0xD440], NFC: [0xD440], NFD: [0x1111, 0x116C], NFKC: [0xD440], NFKD: [0x1111, 0x116C] }, +{ source: [0xD441], NFC: [0xD441], NFD: [0x1111, 0x116C, 0x11A8], NFKC: [0xD441], NFKD: [0x1111, 0x116C, 0x11A8] }, +{ source: [0xD442], NFC: [0xD442], NFD: [0x1111, 0x116C, 0x11A9], NFKC: [0xD442], NFKD: [0x1111, 0x116C, 0x11A9] }, +{ source: [0xD443], NFC: [0xD443], NFD: [0x1111, 0x116C, 0x11AA], NFKC: [0xD443], NFKD: [0x1111, 0x116C, 0x11AA] }, +{ source: [0xD444], NFC: [0xD444], NFD: [0x1111, 0x116C, 0x11AB], NFKC: [0xD444], NFKD: [0x1111, 0x116C, 0x11AB] }, +{ source: [0xD445], NFC: [0xD445], NFD: [0x1111, 0x116C, 0x11AC], NFKC: [0xD445], NFKD: [0x1111, 0x116C, 0x11AC] }, +{ source: [0xD446], NFC: [0xD446], NFD: [0x1111, 0x116C, 0x11AD], NFKC: [0xD446], NFKD: [0x1111, 0x116C, 0x11AD] }, +{ source: [0xD447], NFC: [0xD447], NFD: [0x1111, 0x116C, 0x11AE], NFKC: [0xD447], NFKD: [0x1111, 0x116C, 0x11AE] }, +{ source: [0xD448], NFC: [0xD448], NFD: [0x1111, 0x116C, 0x11AF], NFKC: [0xD448], NFKD: [0x1111, 0x116C, 0x11AF] }, +{ source: [0xD449], NFC: [0xD449], NFD: [0x1111, 0x116C, 0x11B0], NFKC: [0xD449], NFKD: [0x1111, 0x116C, 0x11B0] }, +{ source: [0xD44A], NFC: [0xD44A], NFD: [0x1111, 0x116C, 0x11B1], NFKC: [0xD44A], NFKD: [0x1111, 0x116C, 0x11B1] }, +{ source: [0xD44B], NFC: [0xD44B], NFD: [0x1111, 0x116C, 0x11B2], NFKC: [0xD44B], NFKD: [0x1111, 0x116C, 0x11B2] }, +{ source: [0xD44C], NFC: [0xD44C], NFD: [0x1111, 0x116C, 0x11B3], NFKC: [0xD44C], NFKD: [0x1111, 0x116C, 0x11B3] }, +{ source: [0xD44D], NFC: [0xD44D], NFD: [0x1111, 0x116C, 0x11B4], NFKC: [0xD44D], NFKD: [0x1111, 0x116C, 0x11B4] }, +{ source: [0xD44E], NFC: [0xD44E], NFD: [0x1111, 0x116C, 0x11B5], NFKC: [0xD44E], NFKD: [0x1111, 0x116C, 0x11B5] }, +{ source: [0xD44F], NFC: [0xD44F], NFD: [0x1111, 0x116C, 0x11B6], NFKC: [0xD44F], NFKD: [0x1111, 0x116C, 0x11B6] }, +{ source: [0xD450], NFC: [0xD450], NFD: [0x1111, 0x116C, 0x11B7], NFKC: [0xD450], NFKD: [0x1111, 0x116C, 0x11B7] }, +{ source: [0xD451], NFC: [0xD451], NFD: [0x1111, 0x116C, 0x11B8], NFKC: [0xD451], NFKD: [0x1111, 0x116C, 0x11B8] }, +{ source: [0xD452], NFC: [0xD452], NFD: [0x1111, 0x116C, 0x11B9], NFKC: [0xD452], NFKD: [0x1111, 0x116C, 0x11B9] }, +{ source: [0xD453], NFC: [0xD453], NFD: [0x1111, 0x116C, 0x11BA], NFKC: [0xD453], NFKD: [0x1111, 0x116C, 0x11BA] }, +{ source: [0xD454], NFC: [0xD454], NFD: [0x1111, 0x116C, 0x11BB], NFKC: [0xD454], NFKD: [0x1111, 0x116C, 0x11BB] }, +{ source: [0xD455], NFC: [0xD455], NFD: [0x1111, 0x116C, 0x11BC], NFKC: [0xD455], NFKD: [0x1111, 0x116C, 0x11BC] }, +{ source: [0xD456], NFC: [0xD456], NFD: [0x1111, 0x116C, 0x11BD], NFKC: [0xD456], NFKD: [0x1111, 0x116C, 0x11BD] }, +{ source: [0xD457], NFC: [0xD457], NFD: [0x1111, 0x116C, 0x11BE], NFKC: [0xD457], NFKD: [0x1111, 0x116C, 0x11BE] }, +{ source: [0xD458], NFC: [0xD458], NFD: [0x1111, 0x116C, 0x11BF], NFKC: [0xD458], NFKD: [0x1111, 0x116C, 0x11BF] }, +{ source: [0xD459], NFC: [0xD459], NFD: [0x1111, 0x116C, 0x11C0], NFKC: [0xD459], NFKD: [0x1111, 0x116C, 0x11C0] }, +{ source: [0xD45A], NFC: [0xD45A], NFD: [0x1111, 0x116C, 0x11C1], NFKC: [0xD45A], NFKD: [0x1111, 0x116C, 0x11C1] }, +{ source: [0xD45B], NFC: [0xD45B], NFD: [0x1111, 0x116C, 0x11C2], NFKC: [0xD45B], NFKD: [0x1111, 0x116C, 0x11C2] }, +{ source: [0xD45C], NFC: [0xD45C], NFD: [0x1111, 0x116D], NFKC: [0xD45C], NFKD: [0x1111, 0x116D] }, +{ source: [0xD45D], NFC: [0xD45D], NFD: [0x1111, 0x116D, 0x11A8], NFKC: [0xD45D], NFKD: [0x1111, 0x116D, 0x11A8] }, +{ source: [0xD45E], NFC: [0xD45E], NFD: [0x1111, 0x116D, 0x11A9], NFKC: [0xD45E], NFKD: [0x1111, 0x116D, 0x11A9] }, +{ source: [0xD45F], NFC: [0xD45F], NFD: [0x1111, 0x116D, 0x11AA], NFKC: [0xD45F], NFKD: [0x1111, 0x116D, 0x11AA] }, +{ source: [0xD460], NFC: [0xD460], NFD: [0x1111, 0x116D, 0x11AB], NFKC: [0xD460], NFKD: [0x1111, 0x116D, 0x11AB] }, +{ source: [0xD461], NFC: [0xD461], NFD: [0x1111, 0x116D, 0x11AC], NFKC: [0xD461], NFKD: [0x1111, 0x116D, 0x11AC] }, +{ source: [0xD462], NFC: [0xD462], NFD: [0x1111, 0x116D, 0x11AD], NFKC: [0xD462], NFKD: [0x1111, 0x116D, 0x11AD] }, +{ source: [0xD463], NFC: [0xD463], NFD: [0x1111, 0x116D, 0x11AE], NFKC: [0xD463], NFKD: [0x1111, 0x116D, 0x11AE] }, +{ source: [0xD464], NFC: [0xD464], NFD: [0x1111, 0x116D, 0x11AF], NFKC: [0xD464], NFKD: [0x1111, 0x116D, 0x11AF] }, +{ source: [0xD465], NFC: [0xD465], NFD: [0x1111, 0x116D, 0x11B0], NFKC: [0xD465], NFKD: [0x1111, 0x116D, 0x11B0] }, +{ source: [0xD466], NFC: [0xD466], NFD: [0x1111, 0x116D, 0x11B1], NFKC: [0xD466], NFKD: [0x1111, 0x116D, 0x11B1] }, +{ source: [0xD467], NFC: [0xD467], NFD: [0x1111, 0x116D, 0x11B2], NFKC: [0xD467], NFKD: [0x1111, 0x116D, 0x11B2] }, +{ source: [0xD468], NFC: [0xD468], NFD: [0x1111, 0x116D, 0x11B3], NFKC: [0xD468], NFKD: [0x1111, 0x116D, 0x11B3] }, +{ source: [0xD469], NFC: [0xD469], NFD: [0x1111, 0x116D, 0x11B4], NFKC: [0xD469], NFKD: [0x1111, 0x116D, 0x11B4] }, +{ source: [0xD46A], NFC: [0xD46A], NFD: [0x1111, 0x116D, 0x11B5], NFKC: [0xD46A], NFKD: [0x1111, 0x116D, 0x11B5] }, +{ source: [0xD46B], NFC: [0xD46B], NFD: [0x1111, 0x116D, 0x11B6], NFKC: [0xD46B], NFKD: [0x1111, 0x116D, 0x11B6] }, +{ source: [0xD46C], NFC: [0xD46C], NFD: [0x1111, 0x116D, 0x11B7], NFKC: [0xD46C], NFKD: [0x1111, 0x116D, 0x11B7] }, +{ source: [0xD46D], NFC: [0xD46D], NFD: [0x1111, 0x116D, 0x11B8], NFKC: [0xD46D], NFKD: [0x1111, 0x116D, 0x11B8] }, +{ source: [0xD46E], NFC: [0xD46E], NFD: [0x1111, 0x116D, 0x11B9], NFKC: [0xD46E], NFKD: [0x1111, 0x116D, 0x11B9] }, +{ source: [0xD46F], NFC: [0xD46F], NFD: [0x1111, 0x116D, 0x11BA], NFKC: [0xD46F], NFKD: [0x1111, 0x116D, 0x11BA] }, +{ source: [0xD470], NFC: [0xD470], NFD: [0x1111, 0x116D, 0x11BB], NFKC: [0xD470], NFKD: [0x1111, 0x116D, 0x11BB] }, +{ source: [0xD471], NFC: [0xD471], NFD: [0x1111, 0x116D, 0x11BC], NFKC: [0xD471], NFKD: [0x1111, 0x116D, 0x11BC] }, +{ source: [0xD472], NFC: [0xD472], NFD: [0x1111, 0x116D, 0x11BD], NFKC: [0xD472], NFKD: [0x1111, 0x116D, 0x11BD] }, +{ source: [0xD473], NFC: [0xD473], NFD: [0x1111, 0x116D, 0x11BE], NFKC: [0xD473], NFKD: [0x1111, 0x116D, 0x11BE] }, +{ source: [0xD474], NFC: [0xD474], NFD: [0x1111, 0x116D, 0x11BF], NFKC: [0xD474], NFKD: [0x1111, 0x116D, 0x11BF] }, +{ source: [0xD475], NFC: [0xD475], NFD: [0x1111, 0x116D, 0x11C0], NFKC: [0xD475], NFKD: [0x1111, 0x116D, 0x11C0] }, +{ source: [0xD476], NFC: [0xD476], NFD: [0x1111, 0x116D, 0x11C1], NFKC: [0xD476], NFKD: [0x1111, 0x116D, 0x11C1] }, +{ source: [0xD477], NFC: [0xD477], NFD: [0x1111, 0x116D, 0x11C2], NFKC: [0xD477], NFKD: [0x1111, 0x116D, 0x11C2] }, +{ source: [0xD478], NFC: [0xD478], NFD: [0x1111, 0x116E], NFKC: [0xD478], NFKD: [0x1111, 0x116E] }, +{ source: [0xD479], NFC: [0xD479], NFD: [0x1111, 0x116E, 0x11A8], NFKC: [0xD479], NFKD: [0x1111, 0x116E, 0x11A8] }, +{ source: [0xD47A], NFC: [0xD47A], NFD: [0x1111, 0x116E, 0x11A9], NFKC: [0xD47A], NFKD: [0x1111, 0x116E, 0x11A9] }, +{ source: [0xD47B], NFC: [0xD47B], NFD: [0x1111, 0x116E, 0x11AA], NFKC: [0xD47B], NFKD: [0x1111, 0x116E, 0x11AA] }, +{ source: [0xD47C], NFC: [0xD47C], NFD: [0x1111, 0x116E, 0x11AB], NFKC: [0xD47C], NFKD: [0x1111, 0x116E, 0x11AB] }, +{ source: [0xD47D], NFC: [0xD47D], NFD: [0x1111, 0x116E, 0x11AC], NFKC: [0xD47D], NFKD: [0x1111, 0x116E, 0x11AC] }, +{ source: [0xD47E], NFC: [0xD47E], NFD: [0x1111, 0x116E, 0x11AD], NFKC: [0xD47E], NFKD: [0x1111, 0x116E, 0x11AD] }, +{ source: [0xD47F], NFC: [0xD47F], NFD: [0x1111, 0x116E, 0x11AE], NFKC: [0xD47F], NFKD: [0x1111, 0x116E, 0x11AE] }, +{ source: [0xD480], NFC: [0xD480], NFD: [0x1111, 0x116E, 0x11AF], NFKC: [0xD480], NFKD: [0x1111, 0x116E, 0x11AF] }, +{ source: [0xD481], NFC: [0xD481], NFD: [0x1111, 0x116E, 0x11B0], NFKC: [0xD481], NFKD: [0x1111, 0x116E, 0x11B0] }, +{ source: [0xD482], NFC: [0xD482], NFD: [0x1111, 0x116E, 0x11B1], NFKC: [0xD482], NFKD: [0x1111, 0x116E, 0x11B1] }, +{ source: [0xD483], NFC: [0xD483], NFD: [0x1111, 0x116E, 0x11B2], NFKC: [0xD483], NFKD: [0x1111, 0x116E, 0x11B2] }, +{ source: [0xD484], NFC: [0xD484], NFD: [0x1111, 0x116E, 0x11B3], NFKC: [0xD484], NFKD: [0x1111, 0x116E, 0x11B3] }, +{ source: [0xD485], NFC: [0xD485], NFD: [0x1111, 0x116E, 0x11B4], NFKC: [0xD485], NFKD: [0x1111, 0x116E, 0x11B4] }, +{ source: [0xD486], NFC: [0xD486], NFD: [0x1111, 0x116E, 0x11B5], NFKC: [0xD486], NFKD: [0x1111, 0x116E, 0x11B5] }, +{ source: [0xD487], NFC: [0xD487], NFD: [0x1111, 0x116E, 0x11B6], NFKC: [0xD487], NFKD: [0x1111, 0x116E, 0x11B6] }, +{ source: [0xD488], NFC: [0xD488], NFD: [0x1111, 0x116E, 0x11B7], NFKC: [0xD488], NFKD: [0x1111, 0x116E, 0x11B7] }, +{ source: [0xD489], NFC: [0xD489], NFD: [0x1111, 0x116E, 0x11B8], NFKC: [0xD489], NFKD: [0x1111, 0x116E, 0x11B8] }, +{ source: [0xD48A], NFC: [0xD48A], NFD: [0x1111, 0x116E, 0x11B9], NFKC: [0xD48A], NFKD: [0x1111, 0x116E, 0x11B9] }, +{ source: [0xD48B], NFC: [0xD48B], NFD: [0x1111, 0x116E, 0x11BA], NFKC: [0xD48B], NFKD: [0x1111, 0x116E, 0x11BA] }, +{ source: [0xD48C], NFC: [0xD48C], NFD: [0x1111, 0x116E, 0x11BB], NFKC: [0xD48C], NFKD: [0x1111, 0x116E, 0x11BB] }, +{ source: [0xD48D], NFC: [0xD48D], NFD: [0x1111, 0x116E, 0x11BC], NFKC: [0xD48D], NFKD: [0x1111, 0x116E, 0x11BC] }, +{ source: [0xD48E], NFC: [0xD48E], NFD: [0x1111, 0x116E, 0x11BD], NFKC: [0xD48E], NFKD: [0x1111, 0x116E, 0x11BD] }, +{ source: [0xD48F], NFC: [0xD48F], NFD: [0x1111, 0x116E, 0x11BE], NFKC: [0xD48F], NFKD: [0x1111, 0x116E, 0x11BE] }, +{ source: [0xD490], NFC: [0xD490], NFD: [0x1111, 0x116E, 0x11BF], NFKC: [0xD490], NFKD: [0x1111, 0x116E, 0x11BF] }, +{ source: [0xD491], NFC: [0xD491], NFD: [0x1111, 0x116E, 0x11C0], NFKC: [0xD491], NFKD: [0x1111, 0x116E, 0x11C0] }, +{ source: [0xD492], NFC: [0xD492], NFD: [0x1111, 0x116E, 0x11C1], NFKC: [0xD492], NFKD: [0x1111, 0x116E, 0x11C1] }, +{ source: [0xD493], NFC: [0xD493], NFD: [0x1111, 0x116E, 0x11C2], NFKC: [0xD493], NFKD: [0x1111, 0x116E, 0x11C2] }, +{ source: [0xD494], NFC: [0xD494], NFD: [0x1111, 0x116F], NFKC: [0xD494], NFKD: [0x1111, 0x116F] }, +{ source: [0xD495], NFC: [0xD495], NFD: [0x1111, 0x116F, 0x11A8], NFKC: [0xD495], NFKD: [0x1111, 0x116F, 0x11A8] }, +{ source: [0xD496], NFC: [0xD496], NFD: [0x1111, 0x116F, 0x11A9], NFKC: [0xD496], NFKD: [0x1111, 0x116F, 0x11A9] }, +{ source: [0xD497], NFC: [0xD497], NFD: [0x1111, 0x116F, 0x11AA], NFKC: [0xD497], NFKD: [0x1111, 0x116F, 0x11AA] }, +{ source: [0xD498], NFC: [0xD498], NFD: [0x1111, 0x116F, 0x11AB], NFKC: [0xD498], NFKD: [0x1111, 0x116F, 0x11AB] }, +{ source: [0xD499], NFC: [0xD499], NFD: [0x1111, 0x116F, 0x11AC], NFKC: [0xD499], NFKD: [0x1111, 0x116F, 0x11AC] }, +{ source: [0xD49A], NFC: [0xD49A], NFD: [0x1111, 0x116F, 0x11AD], NFKC: [0xD49A], NFKD: [0x1111, 0x116F, 0x11AD] }, +{ source: [0xD49B], NFC: [0xD49B], NFD: [0x1111, 0x116F, 0x11AE], NFKC: [0xD49B], NFKD: [0x1111, 0x116F, 0x11AE] }, +{ source: [0xD49C], NFC: [0xD49C], NFD: [0x1111, 0x116F, 0x11AF], NFKC: [0xD49C], NFKD: [0x1111, 0x116F, 0x11AF] }, +{ source: [0xD49D], NFC: [0xD49D], NFD: [0x1111, 0x116F, 0x11B0], NFKC: [0xD49D], NFKD: [0x1111, 0x116F, 0x11B0] }, +{ source: [0xD49E], NFC: [0xD49E], NFD: [0x1111, 0x116F, 0x11B1], NFKC: [0xD49E], NFKD: [0x1111, 0x116F, 0x11B1] }, +{ source: [0xD49F], NFC: [0xD49F], NFD: [0x1111, 0x116F, 0x11B2], NFKC: [0xD49F], NFKD: [0x1111, 0x116F, 0x11B2] }, +{ source: [0xD4A0], NFC: [0xD4A0], NFD: [0x1111, 0x116F, 0x11B3], NFKC: [0xD4A0], NFKD: [0x1111, 0x116F, 0x11B3] }, +{ source: [0xD4A1], NFC: [0xD4A1], NFD: [0x1111, 0x116F, 0x11B4], NFKC: [0xD4A1], NFKD: [0x1111, 0x116F, 0x11B4] }, +{ source: [0xD4A2], NFC: [0xD4A2], NFD: [0x1111, 0x116F, 0x11B5], NFKC: [0xD4A2], NFKD: [0x1111, 0x116F, 0x11B5] }, +{ source: [0xD4A3], NFC: [0xD4A3], NFD: [0x1111, 0x116F, 0x11B6], NFKC: [0xD4A3], NFKD: [0x1111, 0x116F, 0x11B6] }, +{ source: [0xD4A4], NFC: [0xD4A4], NFD: [0x1111, 0x116F, 0x11B7], NFKC: [0xD4A4], NFKD: [0x1111, 0x116F, 0x11B7] }, +{ source: [0xD4A5], NFC: [0xD4A5], NFD: [0x1111, 0x116F, 0x11B8], NFKC: [0xD4A5], NFKD: [0x1111, 0x116F, 0x11B8] }, +{ source: [0xD4A6], NFC: [0xD4A6], NFD: [0x1111, 0x116F, 0x11B9], NFKC: [0xD4A6], NFKD: [0x1111, 0x116F, 0x11B9] }, +{ source: [0xD4A7], NFC: [0xD4A7], NFD: [0x1111, 0x116F, 0x11BA], NFKC: [0xD4A7], NFKD: [0x1111, 0x116F, 0x11BA] }, +{ source: [0xD4A8], NFC: [0xD4A8], NFD: [0x1111, 0x116F, 0x11BB], NFKC: [0xD4A8], NFKD: [0x1111, 0x116F, 0x11BB] }, +{ source: [0xD4A9], NFC: [0xD4A9], NFD: [0x1111, 0x116F, 0x11BC], NFKC: [0xD4A9], NFKD: [0x1111, 0x116F, 0x11BC] }, +{ source: [0xD4AA], NFC: [0xD4AA], NFD: [0x1111, 0x116F, 0x11BD], NFKC: [0xD4AA], NFKD: [0x1111, 0x116F, 0x11BD] }, +{ source: [0xD4AB], NFC: [0xD4AB], NFD: [0x1111, 0x116F, 0x11BE], NFKC: [0xD4AB], NFKD: [0x1111, 0x116F, 0x11BE] }, +{ source: [0xD4AC], NFC: [0xD4AC], NFD: [0x1111, 0x116F, 0x11BF], NFKC: [0xD4AC], NFKD: [0x1111, 0x116F, 0x11BF] }, +{ source: [0xD4AD], NFC: [0xD4AD], NFD: [0x1111, 0x116F, 0x11C0], NFKC: [0xD4AD], NFKD: [0x1111, 0x116F, 0x11C0] }, +{ source: [0xD4AE], NFC: [0xD4AE], NFD: [0x1111, 0x116F, 0x11C1], NFKC: [0xD4AE], NFKD: [0x1111, 0x116F, 0x11C1] }, +{ source: [0xD4AF], NFC: [0xD4AF], NFD: [0x1111, 0x116F, 0x11C2], NFKC: [0xD4AF], NFKD: [0x1111, 0x116F, 0x11C2] }, +{ source: [0xD4B0], NFC: [0xD4B0], NFD: [0x1111, 0x1170], NFKC: [0xD4B0], NFKD: [0x1111, 0x1170] }, +{ source: [0xD4B1], NFC: [0xD4B1], NFD: [0x1111, 0x1170, 0x11A8], NFKC: [0xD4B1], NFKD: [0x1111, 0x1170, 0x11A8] }, +{ source: [0xD4B2], NFC: [0xD4B2], NFD: [0x1111, 0x1170, 0x11A9], NFKC: [0xD4B2], NFKD: [0x1111, 0x1170, 0x11A9] }, +{ source: [0xD4B3], NFC: [0xD4B3], NFD: [0x1111, 0x1170, 0x11AA], NFKC: [0xD4B3], NFKD: [0x1111, 0x1170, 0x11AA] }, +{ source: [0xD4B4], NFC: [0xD4B4], NFD: [0x1111, 0x1170, 0x11AB], NFKC: [0xD4B4], NFKD: [0x1111, 0x1170, 0x11AB] }, +{ source: [0xD4B5], NFC: [0xD4B5], NFD: [0x1111, 0x1170, 0x11AC], NFKC: [0xD4B5], NFKD: [0x1111, 0x1170, 0x11AC] }, +{ source: [0xD4B6], NFC: [0xD4B6], NFD: [0x1111, 0x1170, 0x11AD], NFKC: [0xD4B6], NFKD: [0x1111, 0x1170, 0x11AD] }, +{ source: [0xD4B7], NFC: [0xD4B7], NFD: [0x1111, 0x1170, 0x11AE], NFKC: [0xD4B7], NFKD: [0x1111, 0x1170, 0x11AE] }, +{ source: [0xD4B8], NFC: [0xD4B8], NFD: [0x1111, 0x1170, 0x11AF], NFKC: [0xD4B8], NFKD: [0x1111, 0x1170, 0x11AF] }, +{ source: [0xD4B9], NFC: [0xD4B9], NFD: [0x1111, 0x1170, 0x11B0], NFKC: [0xD4B9], NFKD: [0x1111, 0x1170, 0x11B0] }, +{ source: [0xD4BA], NFC: [0xD4BA], NFD: [0x1111, 0x1170, 0x11B1], NFKC: [0xD4BA], NFKD: [0x1111, 0x1170, 0x11B1] }, +{ source: [0xD4BB], NFC: [0xD4BB], NFD: [0x1111, 0x1170, 0x11B2], NFKC: [0xD4BB], NFKD: [0x1111, 0x1170, 0x11B2] }, +{ source: [0xD4BC], NFC: [0xD4BC], NFD: [0x1111, 0x1170, 0x11B3], NFKC: [0xD4BC], NFKD: [0x1111, 0x1170, 0x11B3] }, +{ source: [0xD4BD], NFC: [0xD4BD], NFD: [0x1111, 0x1170, 0x11B4], NFKC: [0xD4BD], NFKD: [0x1111, 0x1170, 0x11B4] }, +{ source: [0xD4BE], NFC: [0xD4BE], NFD: [0x1111, 0x1170, 0x11B5], NFKC: [0xD4BE], NFKD: [0x1111, 0x1170, 0x11B5] }, +{ source: [0xD4BF], NFC: [0xD4BF], NFD: [0x1111, 0x1170, 0x11B6], NFKC: [0xD4BF], NFKD: [0x1111, 0x1170, 0x11B6] }, +{ source: [0xD4C0], NFC: [0xD4C0], NFD: [0x1111, 0x1170, 0x11B7], NFKC: [0xD4C0], NFKD: [0x1111, 0x1170, 0x11B7] }, +{ source: [0xD4C1], NFC: [0xD4C1], NFD: [0x1111, 0x1170, 0x11B8], NFKC: [0xD4C1], NFKD: [0x1111, 0x1170, 0x11B8] }, +{ source: [0xD4C2], NFC: [0xD4C2], NFD: [0x1111, 0x1170, 0x11B9], NFKC: [0xD4C2], NFKD: [0x1111, 0x1170, 0x11B9] }, +{ source: [0xD4C3], NFC: [0xD4C3], NFD: [0x1111, 0x1170, 0x11BA], NFKC: [0xD4C3], NFKD: [0x1111, 0x1170, 0x11BA] }, +{ source: [0xD4C4], NFC: [0xD4C4], NFD: [0x1111, 0x1170, 0x11BB], NFKC: [0xD4C4], NFKD: [0x1111, 0x1170, 0x11BB] }, +{ source: [0xD4C5], NFC: [0xD4C5], NFD: [0x1111, 0x1170, 0x11BC], NFKC: [0xD4C5], NFKD: [0x1111, 0x1170, 0x11BC] }, +{ source: [0xD4C6], NFC: [0xD4C6], NFD: [0x1111, 0x1170, 0x11BD], NFKC: [0xD4C6], NFKD: [0x1111, 0x1170, 0x11BD] }, +{ source: [0xD4C7], NFC: [0xD4C7], NFD: [0x1111, 0x1170, 0x11BE], NFKC: [0xD4C7], NFKD: [0x1111, 0x1170, 0x11BE] }, +{ source: [0xD4C8], NFC: [0xD4C8], NFD: [0x1111, 0x1170, 0x11BF], NFKC: [0xD4C8], NFKD: [0x1111, 0x1170, 0x11BF] }, +{ source: [0xD4C9], NFC: [0xD4C9], NFD: [0x1111, 0x1170, 0x11C0], NFKC: [0xD4C9], NFKD: [0x1111, 0x1170, 0x11C0] }, +{ source: [0xD4CA], NFC: [0xD4CA], NFD: [0x1111, 0x1170, 0x11C1], NFKC: [0xD4CA], NFKD: [0x1111, 0x1170, 0x11C1] }, +{ source: [0xD4CB], NFC: [0xD4CB], NFD: [0x1111, 0x1170, 0x11C2], NFKC: [0xD4CB], NFKD: [0x1111, 0x1170, 0x11C2] }, +{ source: [0xD4CC], NFC: [0xD4CC], NFD: [0x1111, 0x1171], NFKC: [0xD4CC], NFKD: [0x1111, 0x1171] }, +{ source: [0xD4CD], NFC: [0xD4CD], NFD: [0x1111, 0x1171, 0x11A8], NFKC: [0xD4CD], NFKD: [0x1111, 0x1171, 0x11A8] }, +{ source: [0xD4CE], NFC: [0xD4CE], NFD: [0x1111, 0x1171, 0x11A9], NFKC: [0xD4CE], NFKD: [0x1111, 0x1171, 0x11A9] }, +{ source: [0xD4CF], NFC: [0xD4CF], NFD: [0x1111, 0x1171, 0x11AA], NFKC: [0xD4CF], NFKD: [0x1111, 0x1171, 0x11AA] }, +{ source: [0xD4D0], NFC: [0xD4D0], NFD: [0x1111, 0x1171, 0x11AB], NFKC: [0xD4D0], NFKD: [0x1111, 0x1171, 0x11AB] }, +{ source: [0xD4D1], NFC: [0xD4D1], NFD: [0x1111, 0x1171, 0x11AC], NFKC: [0xD4D1], NFKD: [0x1111, 0x1171, 0x11AC] }, +{ source: [0xD4D2], NFC: [0xD4D2], NFD: [0x1111, 0x1171, 0x11AD], NFKC: [0xD4D2], NFKD: [0x1111, 0x1171, 0x11AD] }, +{ source: [0xD4D3], NFC: [0xD4D3], NFD: [0x1111, 0x1171, 0x11AE], NFKC: [0xD4D3], NFKD: [0x1111, 0x1171, 0x11AE] }, +{ source: [0xD4D4], NFC: [0xD4D4], NFD: [0x1111, 0x1171, 0x11AF], NFKC: [0xD4D4], NFKD: [0x1111, 0x1171, 0x11AF] }, +{ source: [0xD4D5], NFC: [0xD4D5], NFD: [0x1111, 0x1171, 0x11B0], NFKC: [0xD4D5], NFKD: [0x1111, 0x1171, 0x11B0] }, +{ source: [0xD4D6], NFC: [0xD4D6], NFD: [0x1111, 0x1171, 0x11B1], NFKC: [0xD4D6], NFKD: [0x1111, 0x1171, 0x11B1] }, +{ source: [0xD4D7], NFC: [0xD4D7], NFD: [0x1111, 0x1171, 0x11B2], NFKC: [0xD4D7], NFKD: [0x1111, 0x1171, 0x11B2] }, +{ source: [0xD4D8], NFC: [0xD4D8], NFD: [0x1111, 0x1171, 0x11B3], NFKC: [0xD4D8], NFKD: [0x1111, 0x1171, 0x11B3] }, +{ source: [0xD4D9], NFC: [0xD4D9], NFD: [0x1111, 0x1171, 0x11B4], NFKC: [0xD4D9], NFKD: [0x1111, 0x1171, 0x11B4] }, +{ source: [0xD4DA], NFC: [0xD4DA], NFD: [0x1111, 0x1171, 0x11B5], NFKC: [0xD4DA], NFKD: [0x1111, 0x1171, 0x11B5] }, +{ source: [0xD4DB], NFC: [0xD4DB], NFD: [0x1111, 0x1171, 0x11B6], NFKC: [0xD4DB], NFKD: [0x1111, 0x1171, 0x11B6] }, +{ source: [0xD4DC], NFC: [0xD4DC], NFD: [0x1111, 0x1171, 0x11B7], NFKC: [0xD4DC], NFKD: [0x1111, 0x1171, 0x11B7] }, +{ source: [0xD4DD], NFC: [0xD4DD], NFD: [0x1111, 0x1171, 0x11B8], NFKC: [0xD4DD], NFKD: [0x1111, 0x1171, 0x11B8] }, +{ source: [0xD4DE], NFC: [0xD4DE], NFD: [0x1111, 0x1171, 0x11B9], NFKC: [0xD4DE], NFKD: [0x1111, 0x1171, 0x11B9] }, +{ source: [0xD4DF], NFC: [0xD4DF], NFD: [0x1111, 0x1171, 0x11BA], NFKC: [0xD4DF], NFKD: [0x1111, 0x1171, 0x11BA] }, +{ source: [0xD4E0], NFC: [0xD4E0], NFD: [0x1111, 0x1171, 0x11BB], NFKC: [0xD4E0], NFKD: [0x1111, 0x1171, 0x11BB] }, +{ source: [0xD4E1], NFC: [0xD4E1], NFD: [0x1111, 0x1171, 0x11BC], NFKC: [0xD4E1], NFKD: [0x1111, 0x1171, 0x11BC] }, +{ source: [0xD4E2], NFC: [0xD4E2], NFD: [0x1111, 0x1171, 0x11BD], NFKC: [0xD4E2], NFKD: [0x1111, 0x1171, 0x11BD] }, +{ source: [0xD4E3], NFC: [0xD4E3], NFD: [0x1111, 0x1171, 0x11BE], NFKC: [0xD4E3], NFKD: [0x1111, 0x1171, 0x11BE] }, +{ source: [0xD4E4], NFC: [0xD4E4], NFD: [0x1111, 0x1171, 0x11BF], NFKC: [0xD4E4], NFKD: [0x1111, 0x1171, 0x11BF] }, +{ source: [0xD4E5], NFC: [0xD4E5], NFD: [0x1111, 0x1171, 0x11C0], NFKC: [0xD4E5], NFKD: [0x1111, 0x1171, 0x11C0] }, +{ source: [0xD4E6], NFC: [0xD4E6], NFD: [0x1111, 0x1171, 0x11C1], NFKC: [0xD4E6], NFKD: [0x1111, 0x1171, 0x11C1] }, +{ source: [0xD4E7], NFC: [0xD4E7], NFD: [0x1111, 0x1171, 0x11C2], NFKC: [0xD4E7], NFKD: [0x1111, 0x1171, 0x11C2] }, +{ source: [0xD4E8], NFC: [0xD4E8], NFD: [0x1111, 0x1172], NFKC: [0xD4E8], NFKD: [0x1111, 0x1172] }, +{ source: [0xD4E9], NFC: [0xD4E9], NFD: [0x1111, 0x1172, 0x11A8], NFKC: [0xD4E9], NFKD: [0x1111, 0x1172, 0x11A8] }, +{ source: [0xD4EA], NFC: [0xD4EA], NFD: [0x1111, 0x1172, 0x11A9], NFKC: [0xD4EA], NFKD: [0x1111, 0x1172, 0x11A9] }, +{ source: [0xD4EB], NFC: [0xD4EB], NFD: [0x1111, 0x1172, 0x11AA], NFKC: [0xD4EB], NFKD: [0x1111, 0x1172, 0x11AA] }, +{ source: [0xD4EC], NFC: [0xD4EC], NFD: [0x1111, 0x1172, 0x11AB], NFKC: [0xD4EC], NFKD: [0x1111, 0x1172, 0x11AB] }, +{ source: [0xD4ED], NFC: [0xD4ED], NFD: [0x1111, 0x1172, 0x11AC], NFKC: [0xD4ED], NFKD: [0x1111, 0x1172, 0x11AC] }, +{ source: [0xD4EE], NFC: [0xD4EE], NFD: [0x1111, 0x1172, 0x11AD], NFKC: [0xD4EE], NFKD: [0x1111, 0x1172, 0x11AD] }, +{ source: [0xD4EF], NFC: [0xD4EF], NFD: [0x1111, 0x1172, 0x11AE], NFKC: [0xD4EF], NFKD: [0x1111, 0x1172, 0x11AE] }, +{ source: [0xD4F0], NFC: [0xD4F0], NFD: [0x1111, 0x1172, 0x11AF], NFKC: [0xD4F0], NFKD: [0x1111, 0x1172, 0x11AF] }, +{ source: [0xD4F1], NFC: [0xD4F1], NFD: [0x1111, 0x1172, 0x11B0], NFKC: [0xD4F1], NFKD: [0x1111, 0x1172, 0x11B0] }, +{ source: [0xD4F2], NFC: [0xD4F2], NFD: [0x1111, 0x1172, 0x11B1], NFKC: [0xD4F2], NFKD: [0x1111, 0x1172, 0x11B1] }, +{ source: [0xD4F3], NFC: [0xD4F3], NFD: [0x1111, 0x1172, 0x11B2], NFKC: [0xD4F3], NFKD: [0x1111, 0x1172, 0x11B2] }, +{ source: [0xD4F4], NFC: [0xD4F4], NFD: [0x1111, 0x1172, 0x11B3], NFKC: [0xD4F4], NFKD: [0x1111, 0x1172, 0x11B3] }, +{ source: [0xD4F5], NFC: [0xD4F5], NFD: [0x1111, 0x1172, 0x11B4], NFKC: [0xD4F5], NFKD: [0x1111, 0x1172, 0x11B4] }, +{ source: [0xD4F6], NFC: [0xD4F6], NFD: [0x1111, 0x1172, 0x11B5], NFKC: [0xD4F6], NFKD: [0x1111, 0x1172, 0x11B5] }, +{ source: [0xD4F7], NFC: [0xD4F7], NFD: [0x1111, 0x1172, 0x11B6], NFKC: [0xD4F7], NFKD: [0x1111, 0x1172, 0x11B6] }, +{ source: [0xD4F8], NFC: [0xD4F8], NFD: [0x1111, 0x1172, 0x11B7], NFKC: [0xD4F8], NFKD: [0x1111, 0x1172, 0x11B7] }, +{ source: [0xD4F9], NFC: [0xD4F9], NFD: [0x1111, 0x1172, 0x11B8], NFKC: [0xD4F9], NFKD: [0x1111, 0x1172, 0x11B8] }, +{ source: [0xD4FA], NFC: [0xD4FA], NFD: [0x1111, 0x1172, 0x11B9], NFKC: [0xD4FA], NFKD: [0x1111, 0x1172, 0x11B9] }, +{ source: [0xD4FB], NFC: [0xD4FB], NFD: [0x1111, 0x1172, 0x11BA], NFKC: [0xD4FB], NFKD: [0x1111, 0x1172, 0x11BA] }, +{ source: [0xD4FC], NFC: [0xD4FC], NFD: [0x1111, 0x1172, 0x11BB], NFKC: [0xD4FC], NFKD: [0x1111, 0x1172, 0x11BB] }, +{ source: [0xD4FD], NFC: [0xD4FD], NFD: [0x1111, 0x1172, 0x11BC], NFKC: [0xD4FD], NFKD: [0x1111, 0x1172, 0x11BC] }, +{ source: [0xD4FE], NFC: [0xD4FE], NFD: [0x1111, 0x1172, 0x11BD], NFKC: [0xD4FE], NFKD: [0x1111, 0x1172, 0x11BD] }, +{ source: [0xD4FF], NFC: [0xD4FF], NFD: [0x1111, 0x1172, 0x11BE], NFKC: [0xD4FF], NFKD: [0x1111, 0x1172, 0x11BE] }, +{ source: [0xD500], NFC: [0xD500], NFD: [0x1111, 0x1172, 0x11BF], NFKC: [0xD500], NFKD: [0x1111, 0x1172, 0x11BF] }, +{ source: [0xD501], NFC: [0xD501], NFD: [0x1111, 0x1172, 0x11C0], NFKC: [0xD501], NFKD: [0x1111, 0x1172, 0x11C0] }, +{ source: [0xD502], NFC: [0xD502], NFD: [0x1111, 0x1172, 0x11C1], NFKC: [0xD502], NFKD: [0x1111, 0x1172, 0x11C1] }, +{ source: [0xD503], NFC: [0xD503], NFD: [0x1111, 0x1172, 0x11C2], NFKC: [0xD503], NFKD: [0x1111, 0x1172, 0x11C2] }, +{ source: [0xD504], NFC: [0xD504], NFD: [0x1111, 0x1173], NFKC: [0xD504], NFKD: [0x1111, 0x1173] }, +{ source: [0xD505], NFC: [0xD505], NFD: [0x1111, 0x1173, 0x11A8], NFKC: [0xD505], NFKD: [0x1111, 0x1173, 0x11A8] }, +{ source: [0xD506], NFC: [0xD506], NFD: [0x1111, 0x1173, 0x11A9], NFKC: [0xD506], NFKD: [0x1111, 0x1173, 0x11A9] }, +{ source: [0xD507], NFC: [0xD507], NFD: [0x1111, 0x1173, 0x11AA], NFKC: [0xD507], NFKD: [0x1111, 0x1173, 0x11AA] }, +{ source: [0xD508], NFC: [0xD508], NFD: [0x1111, 0x1173, 0x11AB], NFKC: [0xD508], NFKD: [0x1111, 0x1173, 0x11AB] }, +{ source: [0xD509], NFC: [0xD509], NFD: [0x1111, 0x1173, 0x11AC], NFKC: [0xD509], NFKD: [0x1111, 0x1173, 0x11AC] }, +{ source: [0xD50A], NFC: [0xD50A], NFD: [0x1111, 0x1173, 0x11AD], NFKC: [0xD50A], NFKD: [0x1111, 0x1173, 0x11AD] }, +{ source: [0xD50B], NFC: [0xD50B], NFD: [0x1111, 0x1173, 0x11AE], NFKC: [0xD50B], NFKD: [0x1111, 0x1173, 0x11AE] }, +{ source: [0xD50C], NFC: [0xD50C], NFD: [0x1111, 0x1173, 0x11AF], NFKC: [0xD50C], NFKD: [0x1111, 0x1173, 0x11AF] }, +{ source: [0xD50D], NFC: [0xD50D], NFD: [0x1111, 0x1173, 0x11B0], NFKC: [0xD50D], NFKD: [0x1111, 0x1173, 0x11B0] }, +{ source: [0xD50E], NFC: [0xD50E], NFD: [0x1111, 0x1173, 0x11B1], NFKC: [0xD50E], NFKD: [0x1111, 0x1173, 0x11B1] }, +{ source: [0xD50F], NFC: [0xD50F], NFD: [0x1111, 0x1173, 0x11B2], NFKC: [0xD50F], NFKD: [0x1111, 0x1173, 0x11B2] }, +{ source: [0xD510], NFC: [0xD510], NFD: [0x1111, 0x1173, 0x11B3], NFKC: [0xD510], NFKD: [0x1111, 0x1173, 0x11B3] }, +{ source: [0xD511], NFC: [0xD511], NFD: [0x1111, 0x1173, 0x11B4], NFKC: [0xD511], NFKD: [0x1111, 0x1173, 0x11B4] }, +{ source: [0xD512], NFC: [0xD512], NFD: [0x1111, 0x1173, 0x11B5], NFKC: [0xD512], NFKD: [0x1111, 0x1173, 0x11B5] }, +{ source: [0xD513], NFC: [0xD513], NFD: [0x1111, 0x1173, 0x11B6], NFKC: [0xD513], NFKD: [0x1111, 0x1173, 0x11B6] }, +{ source: [0xD514], NFC: [0xD514], NFD: [0x1111, 0x1173, 0x11B7], NFKC: [0xD514], NFKD: [0x1111, 0x1173, 0x11B7] }, +{ source: [0xD515], NFC: [0xD515], NFD: [0x1111, 0x1173, 0x11B8], NFKC: [0xD515], NFKD: [0x1111, 0x1173, 0x11B8] }, +{ source: [0xD516], NFC: [0xD516], NFD: [0x1111, 0x1173, 0x11B9], NFKC: [0xD516], NFKD: [0x1111, 0x1173, 0x11B9] }, +{ source: [0xD517], NFC: [0xD517], NFD: [0x1111, 0x1173, 0x11BA], NFKC: [0xD517], NFKD: [0x1111, 0x1173, 0x11BA] }, +{ source: [0xD518], NFC: [0xD518], NFD: [0x1111, 0x1173, 0x11BB], NFKC: [0xD518], NFKD: [0x1111, 0x1173, 0x11BB] }, +{ source: [0xD519], NFC: [0xD519], NFD: [0x1111, 0x1173, 0x11BC], NFKC: [0xD519], NFKD: [0x1111, 0x1173, 0x11BC] }, +{ source: [0xD51A], NFC: [0xD51A], NFD: [0x1111, 0x1173, 0x11BD], NFKC: [0xD51A], NFKD: [0x1111, 0x1173, 0x11BD] }, +{ source: [0xD51B], NFC: [0xD51B], NFD: [0x1111, 0x1173, 0x11BE], NFKC: [0xD51B], NFKD: [0x1111, 0x1173, 0x11BE] }, +{ source: [0xD51C], NFC: [0xD51C], NFD: [0x1111, 0x1173, 0x11BF], NFKC: [0xD51C], NFKD: [0x1111, 0x1173, 0x11BF] }, +{ source: [0xD51D], NFC: [0xD51D], NFD: [0x1111, 0x1173, 0x11C0], NFKC: [0xD51D], NFKD: [0x1111, 0x1173, 0x11C0] }, +{ source: [0xD51E], NFC: [0xD51E], NFD: [0x1111, 0x1173, 0x11C1], NFKC: [0xD51E], NFKD: [0x1111, 0x1173, 0x11C1] }, +{ source: [0xD51F], NFC: [0xD51F], NFD: [0x1111, 0x1173, 0x11C2], NFKC: [0xD51F], NFKD: [0x1111, 0x1173, 0x11C2] }, +{ source: [0xD520], NFC: [0xD520], NFD: [0x1111, 0x1174], NFKC: [0xD520], NFKD: [0x1111, 0x1174] }, +{ source: [0xD521], NFC: [0xD521], NFD: [0x1111, 0x1174, 0x11A8], NFKC: [0xD521], NFKD: [0x1111, 0x1174, 0x11A8] }, +{ source: [0xD522], NFC: [0xD522], NFD: [0x1111, 0x1174, 0x11A9], NFKC: [0xD522], NFKD: [0x1111, 0x1174, 0x11A9] }, +{ source: [0xD523], NFC: [0xD523], NFD: [0x1111, 0x1174, 0x11AA], NFKC: [0xD523], NFKD: [0x1111, 0x1174, 0x11AA] }, +{ source: [0xD524], NFC: [0xD524], NFD: [0x1111, 0x1174, 0x11AB], NFKC: [0xD524], NFKD: [0x1111, 0x1174, 0x11AB] }, +{ source: [0xD525], NFC: [0xD525], NFD: [0x1111, 0x1174, 0x11AC], NFKC: [0xD525], NFKD: [0x1111, 0x1174, 0x11AC] }, +{ source: [0xD526], NFC: [0xD526], NFD: [0x1111, 0x1174, 0x11AD], NFKC: [0xD526], NFKD: [0x1111, 0x1174, 0x11AD] }, +{ source: [0xD527], NFC: [0xD527], NFD: [0x1111, 0x1174, 0x11AE], NFKC: [0xD527], NFKD: [0x1111, 0x1174, 0x11AE] }, +{ source: [0xD528], NFC: [0xD528], NFD: [0x1111, 0x1174, 0x11AF], NFKC: [0xD528], NFKD: [0x1111, 0x1174, 0x11AF] }, +{ source: [0xD529], NFC: [0xD529], NFD: [0x1111, 0x1174, 0x11B0], NFKC: [0xD529], NFKD: [0x1111, 0x1174, 0x11B0] }, +{ source: [0xD52A], NFC: [0xD52A], NFD: [0x1111, 0x1174, 0x11B1], NFKC: [0xD52A], NFKD: [0x1111, 0x1174, 0x11B1] }, +{ source: [0xD52B], NFC: [0xD52B], NFD: [0x1111, 0x1174, 0x11B2], NFKC: [0xD52B], NFKD: [0x1111, 0x1174, 0x11B2] }, +{ source: [0xD52C], NFC: [0xD52C], NFD: [0x1111, 0x1174, 0x11B3], NFKC: [0xD52C], NFKD: [0x1111, 0x1174, 0x11B3] }, +{ source: [0xD52D], NFC: [0xD52D], NFD: [0x1111, 0x1174, 0x11B4], NFKC: [0xD52D], NFKD: [0x1111, 0x1174, 0x11B4] }, +{ source: [0xD52E], NFC: [0xD52E], NFD: [0x1111, 0x1174, 0x11B5], NFKC: [0xD52E], NFKD: [0x1111, 0x1174, 0x11B5] }, +{ source: [0xD52F], NFC: [0xD52F], NFD: [0x1111, 0x1174, 0x11B6], NFKC: [0xD52F], NFKD: [0x1111, 0x1174, 0x11B6] }, +{ source: [0xD530], NFC: [0xD530], NFD: [0x1111, 0x1174, 0x11B7], NFKC: [0xD530], NFKD: [0x1111, 0x1174, 0x11B7] }, +{ source: [0xD531], NFC: [0xD531], NFD: [0x1111, 0x1174, 0x11B8], NFKC: [0xD531], NFKD: [0x1111, 0x1174, 0x11B8] }, +{ source: [0xD532], NFC: [0xD532], NFD: [0x1111, 0x1174, 0x11B9], NFKC: [0xD532], NFKD: [0x1111, 0x1174, 0x11B9] }, +{ source: [0xD533], NFC: [0xD533], NFD: [0x1111, 0x1174, 0x11BA], NFKC: [0xD533], NFKD: [0x1111, 0x1174, 0x11BA] }, +{ source: [0xD534], NFC: [0xD534], NFD: [0x1111, 0x1174, 0x11BB], NFKC: [0xD534], NFKD: [0x1111, 0x1174, 0x11BB] }, +{ source: [0xD535], NFC: [0xD535], NFD: [0x1111, 0x1174, 0x11BC], NFKC: [0xD535], NFKD: [0x1111, 0x1174, 0x11BC] }, +{ source: [0xD536], NFC: [0xD536], NFD: [0x1111, 0x1174, 0x11BD], NFKC: [0xD536], NFKD: [0x1111, 0x1174, 0x11BD] }, +{ source: [0xD537], NFC: [0xD537], NFD: [0x1111, 0x1174, 0x11BE], NFKC: [0xD537], NFKD: [0x1111, 0x1174, 0x11BE] }, +{ source: [0xD538], NFC: [0xD538], NFD: [0x1111, 0x1174, 0x11BF], NFKC: [0xD538], NFKD: [0x1111, 0x1174, 0x11BF] }, +{ source: [0xD539], NFC: [0xD539], NFD: [0x1111, 0x1174, 0x11C0], NFKC: [0xD539], NFKD: [0x1111, 0x1174, 0x11C0] }, +{ source: [0xD53A], NFC: [0xD53A], NFD: [0x1111, 0x1174, 0x11C1], NFKC: [0xD53A], NFKD: [0x1111, 0x1174, 0x11C1] }, +{ source: [0xD53B], NFC: [0xD53B], NFD: [0x1111, 0x1174, 0x11C2], NFKC: [0xD53B], NFKD: [0x1111, 0x1174, 0x11C2] }, +{ source: [0xD53C], NFC: [0xD53C], NFD: [0x1111, 0x1175], NFKC: [0xD53C], NFKD: [0x1111, 0x1175] }, +{ source: [0xD53D], NFC: [0xD53D], NFD: [0x1111, 0x1175, 0x11A8], NFKC: [0xD53D], NFKD: [0x1111, 0x1175, 0x11A8] }, +{ source: [0xD53E], NFC: [0xD53E], NFD: [0x1111, 0x1175, 0x11A9], NFKC: [0xD53E], NFKD: [0x1111, 0x1175, 0x11A9] }, +{ source: [0xD53F], NFC: [0xD53F], NFD: [0x1111, 0x1175, 0x11AA], NFKC: [0xD53F], NFKD: [0x1111, 0x1175, 0x11AA] }, +{ source: [0xD540], NFC: [0xD540], NFD: [0x1111, 0x1175, 0x11AB], NFKC: [0xD540], NFKD: [0x1111, 0x1175, 0x11AB] }, +{ source: [0xD541], NFC: [0xD541], NFD: [0x1111, 0x1175, 0x11AC], NFKC: [0xD541], NFKD: [0x1111, 0x1175, 0x11AC] }, +{ source: [0xD542], NFC: [0xD542], NFD: [0x1111, 0x1175, 0x11AD], NFKC: [0xD542], NFKD: [0x1111, 0x1175, 0x11AD] }, +{ source: [0xD543], NFC: [0xD543], NFD: [0x1111, 0x1175, 0x11AE], NFKC: [0xD543], NFKD: [0x1111, 0x1175, 0x11AE] }, +{ source: [0xD544], NFC: [0xD544], NFD: [0x1111, 0x1175, 0x11AF], NFKC: [0xD544], NFKD: [0x1111, 0x1175, 0x11AF] }, +{ source: [0xD545], NFC: [0xD545], NFD: [0x1111, 0x1175, 0x11B0], NFKC: [0xD545], NFKD: [0x1111, 0x1175, 0x11B0] }, +{ source: [0xD546], NFC: [0xD546], NFD: [0x1111, 0x1175, 0x11B1], NFKC: [0xD546], NFKD: [0x1111, 0x1175, 0x11B1] }, +{ source: [0xD547], NFC: [0xD547], NFD: [0x1111, 0x1175, 0x11B2], NFKC: [0xD547], NFKD: [0x1111, 0x1175, 0x11B2] }, +{ source: [0xD548], NFC: [0xD548], NFD: [0x1111, 0x1175, 0x11B3], NFKC: [0xD548], NFKD: [0x1111, 0x1175, 0x11B3] }, +{ source: [0xD549], NFC: [0xD549], NFD: [0x1111, 0x1175, 0x11B4], NFKC: [0xD549], NFKD: [0x1111, 0x1175, 0x11B4] }, +{ source: [0xD54A], NFC: [0xD54A], NFD: [0x1111, 0x1175, 0x11B5], NFKC: [0xD54A], NFKD: [0x1111, 0x1175, 0x11B5] }, +{ source: [0xD54B], NFC: [0xD54B], NFD: [0x1111, 0x1175, 0x11B6], NFKC: [0xD54B], NFKD: [0x1111, 0x1175, 0x11B6] }, +{ source: [0xD54C], NFC: [0xD54C], NFD: [0x1111, 0x1175, 0x11B7], NFKC: [0xD54C], NFKD: [0x1111, 0x1175, 0x11B7] }, +{ source: [0xD54D], NFC: [0xD54D], NFD: [0x1111, 0x1175, 0x11B8], NFKC: [0xD54D], NFKD: [0x1111, 0x1175, 0x11B8] }, +{ source: [0xD54E], NFC: [0xD54E], NFD: [0x1111, 0x1175, 0x11B9], NFKC: [0xD54E], NFKD: [0x1111, 0x1175, 0x11B9] }, +{ source: [0xD54F], NFC: [0xD54F], NFD: [0x1111, 0x1175, 0x11BA], NFKC: [0xD54F], NFKD: [0x1111, 0x1175, 0x11BA] }, +{ source: [0xD550], NFC: [0xD550], NFD: [0x1111, 0x1175, 0x11BB], NFKC: [0xD550], NFKD: [0x1111, 0x1175, 0x11BB] }, +{ source: [0xD551], NFC: [0xD551], NFD: [0x1111, 0x1175, 0x11BC], NFKC: [0xD551], NFKD: [0x1111, 0x1175, 0x11BC] }, +{ source: [0xD552], NFC: [0xD552], NFD: [0x1111, 0x1175, 0x11BD], NFKC: [0xD552], NFKD: [0x1111, 0x1175, 0x11BD] }, +{ source: [0xD553], NFC: [0xD553], NFD: [0x1111, 0x1175, 0x11BE], NFKC: [0xD553], NFKD: [0x1111, 0x1175, 0x11BE] }, +{ source: [0xD554], NFC: [0xD554], NFD: [0x1111, 0x1175, 0x11BF], NFKC: [0xD554], NFKD: [0x1111, 0x1175, 0x11BF] }, +{ source: [0xD555], NFC: [0xD555], NFD: [0x1111, 0x1175, 0x11C0], NFKC: [0xD555], NFKD: [0x1111, 0x1175, 0x11C0] }, +{ source: [0xD556], NFC: [0xD556], NFD: [0x1111, 0x1175, 0x11C1], NFKC: [0xD556], NFKD: [0x1111, 0x1175, 0x11C1] }, +{ source: [0xD557], NFC: [0xD557], NFD: [0x1111, 0x1175, 0x11C2], NFKC: [0xD557], NFKD: [0x1111, 0x1175, 0x11C2] }, +{ source: [0xD558], NFC: [0xD558], NFD: [0x1112, 0x1161], NFKC: [0xD558], NFKD: [0x1112, 0x1161] }, +{ source: [0xD559], NFC: [0xD559], NFD: [0x1112, 0x1161, 0x11A8], NFKC: [0xD559], NFKD: [0x1112, 0x1161, 0x11A8] }, +{ source: [0xD55A], NFC: [0xD55A], NFD: [0x1112, 0x1161, 0x11A9], NFKC: [0xD55A], NFKD: [0x1112, 0x1161, 0x11A9] }, +{ source: [0xD55B], NFC: [0xD55B], NFD: [0x1112, 0x1161, 0x11AA], NFKC: [0xD55B], NFKD: [0x1112, 0x1161, 0x11AA] }, +{ source: [0xD55C], NFC: [0xD55C], NFD: [0x1112, 0x1161, 0x11AB], NFKC: [0xD55C], NFKD: [0x1112, 0x1161, 0x11AB] }, +{ source: [0xD55D], NFC: [0xD55D], NFD: [0x1112, 0x1161, 0x11AC], NFKC: [0xD55D], NFKD: [0x1112, 0x1161, 0x11AC] }, +{ source: [0xD55E], NFC: [0xD55E], NFD: [0x1112, 0x1161, 0x11AD], NFKC: [0xD55E], NFKD: [0x1112, 0x1161, 0x11AD] }, +{ source: [0xD55F], NFC: [0xD55F], NFD: [0x1112, 0x1161, 0x11AE], NFKC: [0xD55F], NFKD: [0x1112, 0x1161, 0x11AE] }, +{ source: [0xD560], NFC: [0xD560], NFD: [0x1112, 0x1161, 0x11AF], NFKC: [0xD560], NFKD: [0x1112, 0x1161, 0x11AF] }, +{ source: [0xD561], NFC: [0xD561], NFD: [0x1112, 0x1161, 0x11B0], NFKC: [0xD561], NFKD: [0x1112, 0x1161, 0x11B0] }, +{ source: [0xD562], NFC: [0xD562], NFD: [0x1112, 0x1161, 0x11B1], NFKC: [0xD562], NFKD: [0x1112, 0x1161, 0x11B1] }, +{ source: [0xD563], NFC: [0xD563], NFD: [0x1112, 0x1161, 0x11B2], NFKC: [0xD563], NFKD: [0x1112, 0x1161, 0x11B2] }, +{ source: [0xD564], NFC: [0xD564], NFD: [0x1112, 0x1161, 0x11B3], NFKC: [0xD564], NFKD: [0x1112, 0x1161, 0x11B3] }, +{ source: [0xD565], NFC: [0xD565], NFD: [0x1112, 0x1161, 0x11B4], NFKC: [0xD565], NFKD: [0x1112, 0x1161, 0x11B4] }, +{ source: [0xD566], NFC: [0xD566], NFD: [0x1112, 0x1161, 0x11B5], NFKC: [0xD566], NFKD: [0x1112, 0x1161, 0x11B5] }, +{ source: [0xD567], NFC: [0xD567], NFD: [0x1112, 0x1161, 0x11B6], NFKC: [0xD567], NFKD: [0x1112, 0x1161, 0x11B6] }, +{ source: [0xD568], NFC: [0xD568], NFD: [0x1112, 0x1161, 0x11B7], NFKC: [0xD568], NFKD: [0x1112, 0x1161, 0x11B7] }, +{ source: [0xD569], NFC: [0xD569], NFD: [0x1112, 0x1161, 0x11B8], NFKC: [0xD569], NFKD: [0x1112, 0x1161, 0x11B8] }, +{ source: [0xD56A], NFC: [0xD56A], NFD: [0x1112, 0x1161, 0x11B9], NFKC: [0xD56A], NFKD: [0x1112, 0x1161, 0x11B9] }, +{ source: [0xD56B], NFC: [0xD56B], NFD: [0x1112, 0x1161, 0x11BA], NFKC: [0xD56B], NFKD: [0x1112, 0x1161, 0x11BA] }, +{ source: [0xD56C], NFC: [0xD56C], NFD: [0x1112, 0x1161, 0x11BB], NFKC: [0xD56C], NFKD: [0x1112, 0x1161, 0x11BB] }, +{ source: [0xD56D], NFC: [0xD56D], NFD: [0x1112, 0x1161, 0x11BC], NFKC: [0xD56D], NFKD: [0x1112, 0x1161, 0x11BC] }, +{ source: [0xD56E], NFC: [0xD56E], NFD: [0x1112, 0x1161, 0x11BD], NFKC: [0xD56E], NFKD: [0x1112, 0x1161, 0x11BD] }, +{ source: [0xD56F], NFC: [0xD56F], NFD: [0x1112, 0x1161, 0x11BE], NFKC: [0xD56F], NFKD: [0x1112, 0x1161, 0x11BE] }, +{ source: [0xD570], NFC: [0xD570], NFD: [0x1112, 0x1161, 0x11BF], NFKC: [0xD570], NFKD: [0x1112, 0x1161, 0x11BF] }, +{ source: [0xD571], NFC: [0xD571], NFD: [0x1112, 0x1161, 0x11C0], NFKC: [0xD571], NFKD: [0x1112, 0x1161, 0x11C0] }, +{ source: [0xD572], NFC: [0xD572], NFD: [0x1112, 0x1161, 0x11C1], NFKC: [0xD572], NFKD: [0x1112, 0x1161, 0x11C1] }, +{ source: [0xD573], NFC: [0xD573], NFD: [0x1112, 0x1161, 0x11C2], NFKC: [0xD573], NFKD: [0x1112, 0x1161, 0x11C2] }, +{ source: [0xD574], NFC: [0xD574], NFD: [0x1112, 0x1162], NFKC: [0xD574], NFKD: [0x1112, 0x1162] }, +{ source: [0xD575], NFC: [0xD575], NFD: [0x1112, 0x1162, 0x11A8], NFKC: [0xD575], NFKD: [0x1112, 0x1162, 0x11A8] }, +{ source: [0xD576], NFC: [0xD576], NFD: [0x1112, 0x1162, 0x11A9], NFKC: [0xD576], NFKD: [0x1112, 0x1162, 0x11A9] }, +{ source: [0xD577], NFC: [0xD577], NFD: [0x1112, 0x1162, 0x11AA], NFKC: [0xD577], NFKD: [0x1112, 0x1162, 0x11AA] }, +{ source: [0xD578], NFC: [0xD578], NFD: [0x1112, 0x1162, 0x11AB], NFKC: [0xD578], NFKD: [0x1112, 0x1162, 0x11AB] }, +{ source: [0xD579], NFC: [0xD579], NFD: [0x1112, 0x1162, 0x11AC], NFKC: [0xD579], NFKD: [0x1112, 0x1162, 0x11AC] }, +{ source: [0xD57A], NFC: [0xD57A], NFD: [0x1112, 0x1162, 0x11AD], NFKC: [0xD57A], NFKD: [0x1112, 0x1162, 0x11AD] }, +{ source: [0xD57B], NFC: [0xD57B], NFD: [0x1112, 0x1162, 0x11AE], NFKC: [0xD57B], NFKD: [0x1112, 0x1162, 0x11AE] }, +{ source: [0xD57C], NFC: [0xD57C], NFD: [0x1112, 0x1162, 0x11AF], NFKC: [0xD57C], NFKD: [0x1112, 0x1162, 0x11AF] }, +{ source: [0xD57D], NFC: [0xD57D], NFD: [0x1112, 0x1162, 0x11B0], NFKC: [0xD57D], NFKD: [0x1112, 0x1162, 0x11B0] }, +{ source: [0xD57E], NFC: [0xD57E], NFD: [0x1112, 0x1162, 0x11B1], NFKC: [0xD57E], NFKD: [0x1112, 0x1162, 0x11B1] }, +{ source: [0xD57F], NFC: [0xD57F], NFD: [0x1112, 0x1162, 0x11B2], NFKC: [0xD57F], NFKD: [0x1112, 0x1162, 0x11B2] }, +{ source: [0xD580], NFC: [0xD580], NFD: [0x1112, 0x1162, 0x11B3], NFKC: [0xD580], NFKD: [0x1112, 0x1162, 0x11B3] }, +{ source: [0xD581], NFC: [0xD581], NFD: [0x1112, 0x1162, 0x11B4], NFKC: [0xD581], NFKD: [0x1112, 0x1162, 0x11B4] }, +{ source: [0xD582], NFC: [0xD582], NFD: [0x1112, 0x1162, 0x11B5], NFKC: [0xD582], NFKD: [0x1112, 0x1162, 0x11B5] }, +{ source: [0xD583], NFC: [0xD583], NFD: [0x1112, 0x1162, 0x11B6], NFKC: [0xD583], NFKD: [0x1112, 0x1162, 0x11B6] }, +{ source: [0xD584], NFC: [0xD584], NFD: [0x1112, 0x1162, 0x11B7], NFKC: [0xD584], NFKD: [0x1112, 0x1162, 0x11B7] }, +{ source: [0xD585], NFC: [0xD585], NFD: [0x1112, 0x1162, 0x11B8], NFKC: [0xD585], NFKD: [0x1112, 0x1162, 0x11B8] }, +{ source: [0xD586], NFC: [0xD586], NFD: [0x1112, 0x1162, 0x11B9], NFKC: [0xD586], NFKD: [0x1112, 0x1162, 0x11B9] }, +{ source: [0xD587], NFC: [0xD587], NFD: [0x1112, 0x1162, 0x11BA], NFKC: [0xD587], NFKD: [0x1112, 0x1162, 0x11BA] }, +{ source: [0xD588], NFC: [0xD588], NFD: [0x1112, 0x1162, 0x11BB], NFKC: [0xD588], NFKD: [0x1112, 0x1162, 0x11BB] }, +{ source: [0xD589], NFC: [0xD589], NFD: [0x1112, 0x1162, 0x11BC], NFKC: [0xD589], NFKD: [0x1112, 0x1162, 0x11BC] }, +{ source: [0xD58A], NFC: [0xD58A], NFD: [0x1112, 0x1162, 0x11BD], NFKC: [0xD58A], NFKD: [0x1112, 0x1162, 0x11BD] }, +{ source: [0xD58B], NFC: [0xD58B], NFD: [0x1112, 0x1162, 0x11BE], NFKC: [0xD58B], NFKD: [0x1112, 0x1162, 0x11BE] }, +{ source: [0xD58C], NFC: [0xD58C], NFD: [0x1112, 0x1162, 0x11BF], NFKC: [0xD58C], NFKD: [0x1112, 0x1162, 0x11BF] }, +{ source: [0xD58D], NFC: [0xD58D], NFD: [0x1112, 0x1162, 0x11C0], NFKC: [0xD58D], NFKD: [0x1112, 0x1162, 0x11C0] }, +{ source: [0xD58E], NFC: [0xD58E], NFD: [0x1112, 0x1162, 0x11C1], NFKC: [0xD58E], NFKD: [0x1112, 0x1162, 0x11C1] }, +{ source: [0xD58F], NFC: [0xD58F], NFD: [0x1112, 0x1162, 0x11C2], NFKC: [0xD58F], NFKD: [0x1112, 0x1162, 0x11C2] }, +{ source: [0xD590], NFC: [0xD590], NFD: [0x1112, 0x1163], NFKC: [0xD590], NFKD: [0x1112, 0x1163] }, +{ source: [0xD591], NFC: [0xD591], NFD: [0x1112, 0x1163, 0x11A8], NFKC: [0xD591], NFKD: [0x1112, 0x1163, 0x11A8] }, +{ source: [0xD592], NFC: [0xD592], NFD: [0x1112, 0x1163, 0x11A9], NFKC: [0xD592], NFKD: [0x1112, 0x1163, 0x11A9] }, +{ source: [0xD593], NFC: [0xD593], NFD: [0x1112, 0x1163, 0x11AA], NFKC: [0xD593], NFKD: [0x1112, 0x1163, 0x11AA] }, +{ source: [0xD594], NFC: [0xD594], NFD: [0x1112, 0x1163, 0x11AB], NFKC: [0xD594], NFKD: [0x1112, 0x1163, 0x11AB] }, +{ source: [0xD595], NFC: [0xD595], NFD: [0x1112, 0x1163, 0x11AC], NFKC: [0xD595], NFKD: [0x1112, 0x1163, 0x11AC] }, +{ source: [0xD596], NFC: [0xD596], NFD: [0x1112, 0x1163, 0x11AD], NFKC: [0xD596], NFKD: [0x1112, 0x1163, 0x11AD] }, +{ source: [0xD597], NFC: [0xD597], NFD: [0x1112, 0x1163, 0x11AE], NFKC: [0xD597], NFKD: [0x1112, 0x1163, 0x11AE] }, +{ source: [0xD598], NFC: [0xD598], NFD: [0x1112, 0x1163, 0x11AF], NFKC: [0xD598], NFKD: [0x1112, 0x1163, 0x11AF] }, +{ source: [0xD599], NFC: [0xD599], NFD: [0x1112, 0x1163, 0x11B0], NFKC: [0xD599], NFKD: [0x1112, 0x1163, 0x11B0] }, +{ source: [0xD59A], NFC: [0xD59A], NFD: [0x1112, 0x1163, 0x11B1], NFKC: [0xD59A], NFKD: [0x1112, 0x1163, 0x11B1] }, +{ source: [0xD59B], NFC: [0xD59B], NFD: [0x1112, 0x1163, 0x11B2], NFKC: [0xD59B], NFKD: [0x1112, 0x1163, 0x11B2] }, +{ source: [0xD59C], NFC: [0xD59C], NFD: [0x1112, 0x1163, 0x11B3], NFKC: [0xD59C], NFKD: [0x1112, 0x1163, 0x11B3] }, +{ source: [0xD59D], NFC: [0xD59D], NFD: [0x1112, 0x1163, 0x11B4], NFKC: [0xD59D], NFKD: [0x1112, 0x1163, 0x11B4] }, +{ source: [0xD59E], NFC: [0xD59E], NFD: [0x1112, 0x1163, 0x11B5], NFKC: [0xD59E], NFKD: [0x1112, 0x1163, 0x11B5] }, +{ source: [0xD59F], NFC: [0xD59F], NFD: [0x1112, 0x1163, 0x11B6], NFKC: [0xD59F], NFKD: [0x1112, 0x1163, 0x11B6] }, +{ source: [0xD5A0], NFC: [0xD5A0], NFD: [0x1112, 0x1163, 0x11B7], NFKC: [0xD5A0], NFKD: [0x1112, 0x1163, 0x11B7] }, +{ source: [0xD5A1], NFC: [0xD5A1], NFD: [0x1112, 0x1163, 0x11B8], NFKC: [0xD5A1], NFKD: [0x1112, 0x1163, 0x11B8] }, +{ source: [0xD5A2], NFC: [0xD5A2], NFD: [0x1112, 0x1163, 0x11B9], NFKC: [0xD5A2], NFKD: [0x1112, 0x1163, 0x11B9] }, +{ source: [0xD5A3], NFC: [0xD5A3], NFD: [0x1112, 0x1163, 0x11BA], NFKC: [0xD5A3], NFKD: [0x1112, 0x1163, 0x11BA] }, +{ source: [0xD5A4], NFC: [0xD5A4], NFD: [0x1112, 0x1163, 0x11BB], NFKC: [0xD5A4], NFKD: [0x1112, 0x1163, 0x11BB] }, +{ source: [0xD5A5], NFC: [0xD5A5], NFD: [0x1112, 0x1163, 0x11BC], NFKC: [0xD5A5], NFKD: [0x1112, 0x1163, 0x11BC] }, +{ source: [0xD5A6], NFC: [0xD5A6], NFD: [0x1112, 0x1163, 0x11BD], NFKC: [0xD5A6], NFKD: [0x1112, 0x1163, 0x11BD] }, +{ source: [0xD5A7], NFC: [0xD5A7], NFD: [0x1112, 0x1163, 0x11BE], NFKC: [0xD5A7], NFKD: [0x1112, 0x1163, 0x11BE] }, +{ source: [0xD5A8], NFC: [0xD5A8], NFD: [0x1112, 0x1163, 0x11BF], NFKC: [0xD5A8], NFKD: [0x1112, 0x1163, 0x11BF] }, +{ source: [0xD5A9], NFC: [0xD5A9], NFD: [0x1112, 0x1163, 0x11C0], NFKC: [0xD5A9], NFKD: [0x1112, 0x1163, 0x11C0] }, +{ source: [0xD5AA], NFC: [0xD5AA], NFD: [0x1112, 0x1163, 0x11C1], NFKC: [0xD5AA], NFKD: [0x1112, 0x1163, 0x11C1] }, +{ source: [0xD5AB], NFC: [0xD5AB], NFD: [0x1112, 0x1163, 0x11C2], NFKC: [0xD5AB], NFKD: [0x1112, 0x1163, 0x11C2] }, +{ source: [0xD5AC], NFC: [0xD5AC], NFD: [0x1112, 0x1164], NFKC: [0xD5AC], NFKD: [0x1112, 0x1164] }, +{ source: [0xD5AD], NFC: [0xD5AD], NFD: [0x1112, 0x1164, 0x11A8], NFKC: [0xD5AD], NFKD: [0x1112, 0x1164, 0x11A8] }, +{ source: [0xD5AE], NFC: [0xD5AE], NFD: [0x1112, 0x1164, 0x11A9], NFKC: [0xD5AE], NFKD: [0x1112, 0x1164, 0x11A9] }, +{ source: [0xD5AF], NFC: [0xD5AF], NFD: [0x1112, 0x1164, 0x11AA], NFKC: [0xD5AF], NFKD: [0x1112, 0x1164, 0x11AA] }, +{ source: [0xD5B0], NFC: [0xD5B0], NFD: [0x1112, 0x1164, 0x11AB], NFKC: [0xD5B0], NFKD: [0x1112, 0x1164, 0x11AB] }, +{ source: [0xD5B1], NFC: [0xD5B1], NFD: [0x1112, 0x1164, 0x11AC], NFKC: [0xD5B1], NFKD: [0x1112, 0x1164, 0x11AC] }, +{ source: [0xD5B2], NFC: [0xD5B2], NFD: [0x1112, 0x1164, 0x11AD], NFKC: [0xD5B2], NFKD: [0x1112, 0x1164, 0x11AD] }, +{ source: [0xD5B3], NFC: [0xD5B3], NFD: [0x1112, 0x1164, 0x11AE], NFKC: [0xD5B3], NFKD: [0x1112, 0x1164, 0x11AE] }, +{ source: [0xD5B4], NFC: [0xD5B4], NFD: [0x1112, 0x1164, 0x11AF], NFKC: [0xD5B4], NFKD: [0x1112, 0x1164, 0x11AF] }, +{ source: [0xD5B5], NFC: [0xD5B5], NFD: [0x1112, 0x1164, 0x11B0], NFKC: [0xD5B5], NFKD: [0x1112, 0x1164, 0x11B0] }, +{ source: [0xD5B6], NFC: [0xD5B6], NFD: [0x1112, 0x1164, 0x11B1], NFKC: [0xD5B6], NFKD: [0x1112, 0x1164, 0x11B1] }, +{ source: [0xD5B7], NFC: [0xD5B7], NFD: [0x1112, 0x1164, 0x11B2], NFKC: [0xD5B7], NFKD: [0x1112, 0x1164, 0x11B2] }, +{ source: [0xD5B8], NFC: [0xD5B8], NFD: [0x1112, 0x1164, 0x11B3], NFKC: [0xD5B8], NFKD: [0x1112, 0x1164, 0x11B3] }, +{ source: [0xD5B9], NFC: [0xD5B9], NFD: [0x1112, 0x1164, 0x11B4], NFKC: [0xD5B9], NFKD: [0x1112, 0x1164, 0x11B4] }, +{ source: [0xD5BA], NFC: [0xD5BA], NFD: [0x1112, 0x1164, 0x11B5], NFKC: [0xD5BA], NFKD: [0x1112, 0x1164, 0x11B5] }, +{ source: [0xD5BB], NFC: [0xD5BB], NFD: [0x1112, 0x1164, 0x11B6], NFKC: [0xD5BB], NFKD: [0x1112, 0x1164, 0x11B6] }, +{ source: [0xD5BC], NFC: [0xD5BC], NFD: [0x1112, 0x1164, 0x11B7], NFKC: [0xD5BC], NFKD: [0x1112, 0x1164, 0x11B7] }, +{ source: [0xD5BD], NFC: [0xD5BD], NFD: [0x1112, 0x1164, 0x11B8], NFKC: [0xD5BD], NFKD: [0x1112, 0x1164, 0x11B8] }, +{ source: [0xD5BE], NFC: [0xD5BE], NFD: [0x1112, 0x1164, 0x11B9], NFKC: [0xD5BE], NFKD: [0x1112, 0x1164, 0x11B9] }, +{ source: [0xD5BF], NFC: [0xD5BF], NFD: [0x1112, 0x1164, 0x11BA], NFKC: [0xD5BF], NFKD: [0x1112, 0x1164, 0x11BA] }, +{ source: [0xD5C0], NFC: [0xD5C0], NFD: [0x1112, 0x1164, 0x11BB], NFKC: [0xD5C0], NFKD: [0x1112, 0x1164, 0x11BB] }, +{ source: [0xD5C1], NFC: [0xD5C1], NFD: [0x1112, 0x1164, 0x11BC], NFKC: [0xD5C1], NFKD: [0x1112, 0x1164, 0x11BC] }, +{ source: [0xD5C2], NFC: [0xD5C2], NFD: [0x1112, 0x1164, 0x11BD], NFKC: [0xD5C2], NFKD: [0x1112, 0x1164, 0x11BD] }, +{ source: [0xD5C3], NFC: [0xD5C3], NFD: [0x1112, 0x1164, 0x11BE], NFKC: [0xD5C3], NFKD: [0x1112, 0x1164, 0x11BE] }, +{ source: [0xD5C4], NFC: [0xD5C4], NFD: [0x1112, 0x1164, 0x11BF], NFKC: [0xD5C4], NFKD: [0x1112, 0x1164, 0x11BF] }, +{ source: [0xD5C5], NFC: [0xD5C5], NFD: [0x1112, 0x1164, 0x11C0], NFKC: [0xD5C5], NFKD: [0x1112, 0x1164, 0x11C0] }, +{ source: [0xD5C6], NFC: [0xD5C6], NFD: [0x1112, 0x1164, 0x11C1], NFKC: [0xD5C6], NFKD: [0x1112, 0x1164, 0x11C1] }, +{ source: [0xD5C7], NFC: [0xD5C7], NFD: [0x1112, 0x1164, 0x11C2], NFKC: [0xD5C7], NFKD: [0x1112, 0x1164, 0x11C2] }, +{ source: [0xD5C8], NFC: [0xD5C8], NFD: [0x1112, 0x1165], NFKC: [0xD5C8], NFKD: [0x1112, 0x1165] }, +{ source: [0xD5C9], NFC: [0xD5C9], NFD: [0x1112, 0x1165, 0x11A8], NFKC: [0xD5C9], NFKD: [0x1112, 0x1165, 0x11A8] }, +{ source: [0xD5CA], NFC: [0xD5CA], NFD: [0x1112, 0x1165, 0x11A9], NFKC: [0xD5CA], NFKD: [0x1112, 0x1165, 0x11A9] }, +{ source: [0xD5CB], NFC: [0xD5CB], NFD: [0x1112, 0x1165, 0x11AA], NFKC: [0xD5CB], NFKD: [0x1112, 0x1165, 0x11AA] }, +{ source: [0xD5CC], NFC: [0xD5CC], NFD: [0x1112, 0x1165, 0x11AB], NFKC: [0xD5CC], NFKD: [0x1112, 0x1165, 0x11AB] }, +{ source: [0xD5CD], NFC: [0xD5CD], NFD: [0x1112, 0x1165, 0x11AC], NFKC: [0xD5CD], NFKD: [0x1112, 0x1165, 0x11AC] }, +{ source: [0xD5CE], NFC: [0xD5CE], NFD: [0x1112, 0x1165, 0x11AD], NFKC: [0xD5CE], NFKD: [0x1112, 0x1165, 0x11AD] }, +{ source: [0xD5CF], NFC: [0xD5CF], NFD: [0x1112, 0x1165, 0x11AE], NFKC: [0xD5CF], NFKD: [0x1112, 0x1165, 0x11AE] }, +{ source: [0xD5D0], NFC: [0xD5D0], NFD: [0x1112, 0x1165, 0x11AF], NFKC: [0xD5D0], NFKD: [0x1112, 0x1165, 0x11AF] }, +{ source: [0xD5D1], NFC: [0xD5D1], NFD: [0x1112, 0x1165, 0x11B0], NFKC: [0xD5D1], NFKD: [0x1112, 0x1165, 0x11B0] }, +{ source: [0xD5D2], NFC: [0xD5D2], NFD: [0x1112, 0x1165, 0x11B1], NFKC: [0xD5D2], NFKD: [0x1112, 0x1165, 0x11B1] }, +{ source: [0xD5D3], NFC: [0xD5D3], NFD: [0x1112, 0x1165, 0x11B2], NFKC: [0xD5D3], NFKD: [0x1112, 0x1165, 0x11B2] }, +{ source: [0xD5D4], NFC: [0xD5D4], NFD: [0x1112, 0x1165, 0x11B3], NFKC: [0xD5D4], NFKD: [0x1112, 0x1165, 0x11B3] }, +{ source: [0xD5D5], NFC: [0xD5D5], NFD: [0x1112, 0x1165, 0x11B4], NFKC: [0xD5D5], NFKD: [0x1112, 0x1165, 0x11B4] }, +{ source: [0xD5D6], NFC: [0xD5D6], NFD: [0x1112, 0x1165, 0x11B5], NFKC: [0xD5D6], NFKD: [0x1112, 0x1165, 0x11B5] }, +{ source: [0xD5D7], NFC: [0xD5D7], NFD: [0x1112, 0x1165, 0x11B6], NFKC: [0xD5D7], NFKD: [0x1112, 0x1165, 0x11B6] }, +{ source: [0xD5D8], NFC: [0xD5D8], NFD: [0x1112, 0x1165, 0x11B7], NFKC: [0xD5D8], NFKD: [0x1112, 0x1165, 0x11B7] }, +{ source: [0xD5D9], NFC: [0xD5D9], NFD: [0x1112, 0x1165, 0x11B8], NFKC: [0xD5D9], NFKD: [0x1112, 0x1165, 0x11B8] }, +{ source: [0xD5DA], NFC: [0xD5DA], NFD: [0x1112, 0x1165, 0x11B9], NFKC: [0xD5DA], NFKD: [0x1112, 0x1165, 0x11B9] }, +{ source: [0xD5DB], NFC: [0xD5DB], NFD: [0x1112, 0x1165, 0x11BA], NFKC: [0xD5DB], NFKD: [0x1112, 0x1165, 0x11BA] }, +{ source: [0xD5DC], NFC: [0xD5DC], NFD: [0x1112, 0x1165, 0x11BB], NFKC: [0xD5DC], NFKD: [0x1112, 0x1165, 0x11BB] }, +{ source: [0xD5DD], NFC: [0xD5DD], NFD: [0x1112, 0x1165, 0x11BC], NFKC: [0xD5DD], NFKD: [0x1112, 0x1165, 0x11BC] }, +{ source: [0xD5DE], NFC: [0xD5DE], NFD: [0x1112, 0x1165, 0x11BD], NFKC: [0xD5DE], NFKD: [0x1112, 0x1165, 0x11BD] }, +{ source: [0xD5DF], NFC: [0xD5DF], NFD: [0x1112, 0x1165, 0x11BE], NFKC: [0xD5DF], NFKD: [0x1112, 0x1165, 0x11BE] }, +{ source: [0xD5E0], NFC: [0xD5E0], NFD: [0x1112, 0x1165, 0x11BF], NFKC: [0xD5E0], NFKD: [0x1112, 0x1165, 0x11BF] }, +{ source: [0xD5E1], NFC: [0xD5E1], NFD: [0x1112, 0x1165, 0x11C0], NFKC: [0xD5E1], NFKD: [0x1112, 0x1165, 0x11C0] }, +{ source: [0xD5E2], NFC: [0xD5E2], NFD: [0x1112, 0x1165, 0x11C1], NFKC: [0xD5E2], NFKD: [0x1112, 0x1165, 0x11C1] }, +{ source: [0xD5E3], NFC: [0xD5E3], NFD: [0x1112, 0x1165, 0x11C2], NFKC: [0xD5E3], NFKD: [0x1112, 0x1165, 0x11C2] }, +{ source: [0xD5E4], NFC: [0xD5E4], NFD: [0x1112, 0x1166], NFKC: [0xD5E4], NFKD: [0x1112, 0x1166] }, +{ source: [0xD5E5], NFC: [0xD5E5], NFD: [0x1112, 0x1166, 0x11A8], NFKC: [0xD5E5], NFKD: [0x1112, 0x1166, 0x11A8] }, +{ source: [0xD5E6], NFC: [0xD5E6], NFD: [0x1112, 0x1166, 0x11A9], NFKC: [0xD5E6], NFKD: [0x1112, 0x1166, 0x11A9] }, +{ source: [0xD5E7], NFC: [0xD5E7], NFD: [0x1112, 0x1166, 0x11AA], NFKC: [0xD5E7], NFKD: [0x1112, 0x1166, 0x11AA] }, +{ source: [0xD5E8], NFC: [0xD5E8], NFD: [0x1112, 0x1166, 0x11AB], NFKC: [0xD5E8], NFKD: [0x1112, 0x1166, 0x11AB] }, +{ source: [0xD5E9], NFC: [0xD5E9], NFD: [0x1112, 0x1166, 0x11AC], NFKC: [0xD5E9], NFKD: [0x1112, 0x1166, 0x11AC] }, +{ source: [0xD5EA], NFC: [0xD5EA], NFD: [0x1112, 0x1166, 0x11AD], NFKC: [0xD5EA], NFKD: [0x1112, 0x1166, 0x11AD] }, +{ source: [0xD5EB], NFC: [0xD5EB], NFD: [0x1112, 0x1166, 0x11AE], NFKC: [0xD5EB], NFKD: [0x1112, 0x1166, 0x11AE] }, +{ source: [0xD5EC], NFC: [0xD5EC], NFD: [0x1112, 0x1166, 0x11AF], NFKC: [0xD5EC], NFKD: [0x1112, 0x1166, 0x11AF] }, +{ source: [0xD5ED], NFC: [0xD5ED], NFD: [0x1112, 0x1166, 0x11B0], NFKC: [0xD5ED], NFKD: [0x1112, 0x1166, 0x11B0] }, +{ source: [0xD5EE], NFC: [0xD5EE], NFD: [0x1112, 0x1166, 0x11B1], NFKC: [0xD5EE], NFKD: [0x1112, 0x1166, 0x11B1] }, +{ source: [0xD5EF], NFC: [0xD5EF], NFD: [0x1112, 0x1166, 0x11B2], NFKC: [0xD5EF], NFKD: [0x1112, 0x1166, 0x11B2] }, +{ source: [0xD5F0], NFC: [0xD5F0], NFD: [0x1112, 0x1166, 0x11B3], NFKC: [0xD5F0], NFKD: [0x1112, 0x1166, 0x11B3] }, +{ source: [0xD5F1], NFC: [0xD5F1], NFD: [0x1112, 0x1166, 0x11B4], NFKC: [0xD5F1], NFKD: [0x1112, 0x1166, 0x11B4] }, +{ source: [0xD5F2], NFC: [0xD5F2], NFD: [0x1112, 0x1166, 0x11B5], NFKC: [0xD5F2], NFKD: [0x1112, 0x1166, 0x11B5] }, +{ source: [0xD5F3], NFC: [0xD5F3], NFD: [0x1112, 0x1166, 0x11B6], NFKC: [0xD5F3], NFKD: [0x1112, 0x1166, 0x11B6] }, +{ source: [0xD5F4], NFC: [0xD5F4], NFD: [0x1112, 0x1166, 0x11B7], NFKC: [0xD5F4], NFKD: [0x1112, 0x1166, 0x11B7] }, +{ source: [0xD5F5], NFC: [0xD5F5], NFD: [0x1112, 0x1166, 0x11B8], NFKC: [0xD5F5], NFKD: [0x1112, 0x1166, 0x11B8] }, +{ source: [0xD5F6], NFC: [0xD5F6], NFD: [0x1112, 0x1166, 0x11B9], NFKC: [0xD5F6], NFKD: [0x1112, 0x1166, 0x11B9] }, +{ source: [0xD5F7], NFC: [0xD5F7], NFD: [0x1112, 0x1166, 0x11BA], NFKC: [0xD5F7], NFKD: [0x1112, 0x1166, 0x11BA] }, +{ source: [0xD5F8], NFC: [0xD5F8], NFD: [0x1112, 0x1166, 0x11BB], NFKC: [0xD5F8], NFKD: [0x1112, 0x1166, 0x11BB] }, +{ source: [0xD5F9], NFC: [0xD5F9], NFD: [0x1112, 0x1166, 0x11BC], NFKC: [0xD5F9], NFKD: [0x1112, 0x1166, 0x11BC] }, +{ source: [0xD5FA], NFC: [0xD5FA], NFD: [0x1112, 0x1166, 0x11BD], NFKC: [0xD5FA], NFKD: [0x1112, 0x1166, 0x11BD] }, +{ source: [0xD5FB], NFC: [0xD5FB], NFD: [0x1112, 0x1166, 0x11BE], NFKC: [0xD5FB], NFKD: [0x1112, 0x1166, 0x11BE] }, +{ source: [0xD5FC], NFC: [0xD5FC], NFD: [0x1112, 0x1166, 0x11BF], NFKC: [0xD5FC], NFKD: [0x1112, 0x1166, 0x11BF] }, +{ source: [0xD5FD], NFC: [0xD5FD], NFD: [0x1112, 0x1166, 0x11C0], NFKC: [0xD5FD], NFKD: [0x1112, 0x1166, 0x11C0] }, +{ source: [0xD5FE], NFC: [0xD5FE], NFD: [0x1112, 0x1166, 0x11C1], NFKC: [0xD5FE], NFKD: [0x1112, 0x1166, 0x11C1] }, +{ source: [0xD5FF], NFC: [0xD5FF], NFD: [0x1112, 0x1166, 0x11C2], NFKC: [0xD5FF], NFKD: [0x1112, 0x1166, 0x11C2] }, +{ source: [0xD600], NFC: [0xD600], NFD: [0x1112, 0x1167], NFKC: [0xD600], NFKD: [0x1112, 0x1167] }, +{ source: [0xD601], NFC: [0xD601], NFD: [0x1112, 0x1167, 0x11A8], NFKC: [0xD601], NFKD: [0x1112, 0x1167, 0x11A8] }, +{ source: [0xD602], NFC: [0xD602], NFD: [0x1112, 0x1167, 0x11A9], NFKC: [0xD602], NFKD: [0x1112, 0x1167, 0x11A9] }, +{ source: [0xD603], NFC: [0xD603], NFD: [0x1112, 0x1167, 0x11AA], NFKC: [0xD603], NFKD: [0x1112, 0x1167, 0x11AA] }, +{ source: [0xD604], NFC: [0xD604], NFD: [0x1112, 0x1167, 0x11AB], NFKC: [0xD604], NFKD: [0x1112, 0x1167, 0x11AB] }, +{ source: [0xD605], NFC: [0xD605], NFD: [0x1112, 0x1167, 0x11AC], NFKC: [0xD605], NFKD: [0x1112, 0x1167, 0x11AC] }, +{ source: [0xD606], NFC: [0xD606], NFD: [0x1112, 0x1167, 0x11AD], NFKC: [0xD606], NFKD: [0x1112, 0x1167, 0x11AD] }, +{ source: [0xD607], NFC: [0xD607], NFD: [0x1112, 0x1167, 0x11AE], NFKC: [0xD607], NFKD: [0x1112, 0x1167, 0x11AE] }, +{ source: [0xD608], NFC: [0xD608], NFD: [0x1112, 0x1167, 0x11AF], NFKC: [0xD608], NFKD: [0x1112, 0x1167, 0x11AF] }, +{ source: [0xD609], NFC: [0xD609], NFD: [0x1112, 0x1167, 0x11B0], NFKC: [0xD609], NFKD: [0x1112, 0x1167, 0x11B0] }, +{ source: [0xD60A], NFC: [0xD60A], NFD: [0x1112, 0x1167, 0x11B1], NFKC: [0xD60A], NFKD: [0x1112, 0x1167, 0x11B1] }, +{ source: [0xD60B], NFC: [0xD60B], NFD: [0x1112, 0x1167, 0x11B2], NFKC: [0xD60B], NFKD: [0x1112, 0x1167, 0x11B2] }, +{ source: [0xD60C], NFC: [0xD60C], NFD: [0x1112, 0x1167, 0x11B3], NFKC: [0xD60C], NFKD: [0x1112, 0x1167, 0x11B3] }, +{ source: [0xD60D], NFC: [0xD60D], NFD: [0x1112, 0x1167, 0x11B4], NFKC: [0xD60D], NFKD: [0x1112, 0x1167, 0x11B4] }, +{ source: [0xD60E], NFC: [0xD60E], NFD: [0x1112, 0x1167, 0x11B5], NFKC: [0xD60E], NFKD: [0x1112, 0x1167, 0x11B5] }, +{ source: [0xD60F], NFC: [0xD60F], NFD: [0x1112, 0x1167, 0x11B6], NFKC: [0xD60F], NFKD: [0x1112, 0x1167, 0x11B6] }, +{ source: [0xD610], NFC: [0xD610], NFD: [0x1112, 0x1167, 0x11B7], NFKC: [0xD610], NFKD: [0x1112, 0x1167, 0x11B7] }, +{ source: [0xD611], NFC: [0xD611], NFD: [0x1112, 0x1167, 0x11B8], NFKC: [0xD611], NFKD: [0x1112, 0x1167, 0x11B8] }, +{ source: [0xD612], NFC: [0xD612], NFD: [0x1112, 0x1167, 0x11B9], NFKC: [0xD612], NFKD: [0x1112, 0x1167, 0x11B9] }, +{ source: [0xD613], NFC: [0xD613], NFD: [0x1112, 0x1167, 0x11BA], NFKC: [0xD613], NFKD: [0x1112, 0x1167, 0x11BA] }, +{ source: [0xD614], NFC: [0xD614], NFD: [0x1112, 0x1167, 0x11BB], NFKC: [0xD614], NFKD: [0x1112, 0x1167, 0x11BB] }, +{ source: [0xD615], NFC: [0xD615], NFD: [0x1112, 0x1167, 0x11BC], NFKC: [0xD615], NFKD: [0x1112, 0x1167, 0x11BC] }, +{ source: [0xD616], NFC: [0xD616], NFD: [0x1112, 0x1167, 0x11BD], NFKC: [0xD616], NFKD: [0x1112, 0x1167, 0x11BD] }, +{ source: [0xD617], NFC: [0xD617], NFD: [0x1112, 0x1167, 0x11BE], NFKC: [0xD617], NFKD: [0x1112, 0x1167, 0x11BE] }, +{ source: [0xD618], NFC: [0xD618], NFD: [0x1112, 0x1167, 0x11BF], NFKC: [0xD618], NFKD: [0x1112, 0x1167, 0x11BF] }, +{ source: [0xD619], NFC: [0xD619], NFD: [0x1112, 0x1167, 0x11C0], NFKC: [0xD619], NFKD: [0x1112, 0x1167, 0x11C0] }, +{ source: [0xD61A], NFC: [0xD61A], NFD: [0x1112, 0x1167, 0x11C1], NFKC: [0xD61A], NFKD: [0x1112, 0x1167, 0x11C1] }, +{ source: [0xD61B], NFC: [0xD61B], NFD: [0x1112, 0x1167, 0x11C2], NFKC: [0xD61B], NFKD: [0x1112, 0x1167, 0x11C2] }, +{ source: [0xD61C], NFC: [0xD61C], NFD: [0x1112, 0x1168], NFKC: [0xD61C], NFKD: [0x1112, 0x1168] }, +{ source: [0xD61D], NFC: [0xD61D], NFD: [0x1112, 0x1168, 0x11A8], NFKC: [0xD61D], NFKD: [0x1112, 0x1168, 0x11A8] }, +{ source: [0xD61E], NFC: [0xD61E], NFD: [0x1112, 0x1168, 0x11A9], NFKC: [0xD61E], NFKD: [0x1112, 0x1168, 0x11A9] }, +{ source: [0xD61F], NFC: [0xD61F], NFD: [0x1112, 0x1168, 0x11AA], NFKC: [0xD61F], NFKD: [0x1112, 0x1168, 0x11AA] }, +{ source: [0xD620], NFC: [0xD620], NFD: [0x1112, 0x1168, 0x11AB], NFKC: [0xD620], NFKD: [0x1112, 0x1168, 0x11AB] }, +{ source: [0xD621], NFC: [0xD621], NFD: [0x1112, 0x1168, 0x11AC], NFKC: [0xD621], NFKD: [0x1112, 0x1168, 0x11AC] }, +{ source: [0xD622], NFC: [0xD622], NFD: [0x1112, 0x1168, 0x11AD], NFKC: [0xD622], NFKD: [0x1112, 0x1168, 0x11AD] }, +{ source: [0xD623], NFC: [0xD623], NFD: [0x1112, 0x1168, 0x11AE], NFKC: [0xD623], NFKD: [0x1112, 0x1168, 0x11AE] }, +{ source: [0xD624], NFC: [0xD624], NFD: [0x1112, 0x1168, 0x11AF], NFKC: [0xD624], NFKD: [0x1112, 0x1168, 0x11AF] }, +{ source: [0xD625], NFC: [0xD625], NFD: [0x1112, 0x1168, 0x11B0], NFKC: [0xD625], NFKD: [0x1112, 0x1168, 0x11B0] }, +{ source: [0xD626], NFC: [0xD626], NFD: [0x1112, 0x1168, 0x11B1], NFKC: [0xD626], NFKD: [0x1112, 0x1168, 0x11B1] }, +{ source: [0xD627], NFC: [0xD627], NFD: [0x1112, 0x1168, 0x11B2], NFKC: [0xD627], NFKD: [0x1112, 0x1168, 0x11B2] }, +{ source: [0xD628], NFC: [0xD628], NFD: [0x1112, 0x1168, 0x11B3], NFKC: [0xD628], NFKD: [0x1112, 0x1168, 0x11B3] }, +{ source: [0xD629], NFC: [0xD629], NFD: [0x1112, 0x1168, 0x11B4], NFKC: [0xD629], NFKD: [0x1112, 0x1168, 0x11B4] }, +{ source: [0xD62A], NFC: [0xD62A], NFD: [0x1112, 0x1168, 0x11B5], NFKC: [0xD62A], NFKD: [0x1112, 0x1168, 0x11B5] }, +{ source: [0xD62B], NFC: [0xD62B], NFD: [0x1112, 0x1168, 0x11B6], NFKC: [0xD62B], NFKD: [0x1112, 0x1168, 0x11B6] }, +{ source: [0xD62C], NFC: [0xD62C], NFD: [0x1112, 0x1168, 0x11B7], NFKC: [0xD62C], NFKD: [0x1112, 0x1168, 0x11B7] }, +{ source: [0xD62D], NFC: [0xD62D], NFD: [0x1112, 0x1168, 0x11B8], NFKC: [0xD62D], NFKD: [0x1112, 0x1168, 0x11B8] }, +{ source: [0xD62E], NFC: [0xD62E], NFD: [0x1112, 0x1168, 0x11B9], NFKC: [0xD62E], NFKD: [0x1112, 0x1168, 0x11B9] }, +{ source: [0xD62F], NFC: [0xD62F], NFD: [0x1112, 0x1168, 0x11BA], NFKC: [0xD62F], NFKD: [0x1112, 0x1168, 0x11BA] }, +{ source: [0xD630], NFC: [0xD630], NFD: [0x1112, 0x1168, 0x11BB], NFKC: [0xD630], NFKD: [0x1112, 0x1168, 0x11BB] }, +{ source: [0xD631], NFC: [0xD631], NFD: [0x1112, 0x1168, 0x11BC], NFKC: [0xD631], NFKD: [0x1112, 0x1168, 0x11BC] }, +{ source: [0xD632], NFC: [0xD632], NFD: [0x1112, 0x1168, 0x11BD], NFKC: [0xD632], NFKD: [0x1112, 0x1168, 0x11BD] }, +{ source: [0xD633], NFC: [0xD633], NFD: [0x1112, 0x1168, 0x11BE], NFKC: [0xD633], NFKD: [0x1112, 0x1168, 0x11BE] }, +{ source: [0xD634], NFC: [0xD634], NFD: [0x1112, 0x1168, 0x11BF], NFKC: [0xD634], NFKD: [0x1112, 0x1168, 0x11BF] }, +{ source: [0xD635], NFC: [0xD635], NFD: [0x1112, 0x1168, 0x11C0], NFKC: [0xD635], NFKD: [0x1112, 0x1168, 0x11C0] }, +{ source: [0xD636], NFC: [0xD636], NFD: [0x1112, 0x1168, 0x11C1], NFKC: [0xD636], NFKD: [0x1112, 0x1168, 0x11C1] }, +{ source: [0xD637], NFC: [0xD637], NFD: [0x1112, 0x1168, 0x11C2], NFKC: [0xD637], NFKD: [0x1112, 0x1168, 0x11C2] }, +{ source: [0xD638], NFC: [0xD638], NFD: [0x1112, 0x1169], NFKC: [0xD638], NFKD: [0x1112, 0x1169] }, +{ source: [0xD639], NFC: [0xD639], NFD: [0x1112, 0x1169, 0x11A8], NFKC: [0xD639], NFKD: [0x1112, 0x1169, 0x11A8] }, +{ source: [0xD63A], NFC: [0xD63A], NFD: [0x1112, 0x1169, 0x11A9], NFKC: [0xD63A], NFKD: [0x1112, 0x1169, 0x11A9] }, +{ source: [0xD63B], NFC: [0xD63B], NFD: [0x1112, 0x1169, 0x11AA], NFKC: [0xD63B], NFKD: [0x1112, 0x1169, 0x11AA] }, +{ source: [0xD63C], NFC: [0xD63C], NFD: [0x1112, 0x1169, 0x11AB], NFKC: [0xD63C], NFKD: [0x1112, 0x1169, 0x11AB] }, +{ source: [0xD63D], NFC: [0xD63D], NFD: [0x1112, 0x1169, 0x11AC], NFKC: [0xD63D], NFKD: [0x1112, 0x1169, 0x11AC] }, +{ source: [0xD63E], NFC: [0xD63E], NFD: [0x1112, 0x1169, 0x11AD], NFKC: [0xD63E], NFKD: [0x1112, 0x1169, 0x11AD] }, +{ source: [0xD63F], NFC: [0xD63F], NFD: [0x1112, 0x1169, 0x11AE], NFKC: [0xD63F], NFKD: [0x1112, 0x1169, 0x11AE] }, +{ source: [0xD640], NFC: [0xD640], NFD: [0x1112, 0x1169, 0x11AF], NFKC: [0xD640], NFKD: [0x1112, 0x1169, 0x11AF] }, +{ source: [0xD641], NFC: [0xD641], NFD: [0x1112, 0x1169, 0x11B0], NFKC: [0xD641], NFKD: [0x1112, 0x1169, 0x11B0] }, +{ source: [0xD642], NFC: [0xD642], NFD: [0x1112, 0x1169, 0x11B1], NFKC: [0xD642], NFKD: [0x1112, 0x1169, 0x11B1] }, +{ source: [0xD643], NFC: [0xD643], NFD: [0x1112, 0x1169, 0x11B2], NFKC: [0xD643], NFKD: [0x1112, 0x1169, 0x11B2] }, +{ source: [0xD644], NFC: [0xD644], NFD: [0x1112, 0x1169, 0x11B3], NFKC: [0xD644], NFKD: [0x1112, 0x1169, 0x11B3] }, +{ source: [0xD645], NFC: [0xD645], NFD: [0x1112, 0x1169, 0x11B4], NFKC: [0xD645], NFKD: [0x1112, 0x1169, 0x11B4] }, +{ source: [0xD646], NFC: [0xD646], NFD: [0x1112, 0x1169, 0x11B5], NFKC: [0xD646], NFKD: [0x1112, 0x1169, 0x11B5] }, +{ source: [0xD647], NFC: [0xD647], NFD: [0x1112, 0x1169, 0x11B6], NFKC: [0xD647], NFKD: [0x1112, 0x1169, 0x11B6] }, +{ source: [0xD648], NFC: [0xD648], NFD: [0x1112, 0x1169, 0x11B7], NFKC: [0xD648], NFKD: [0x1112, 0x1169, 0x11B7] }, +{ source: [0xD649], NFC: [0xD649], NFD: [0x1112, 0x1169, 0x11B8], NFKC: [0xD649], NFKD: [0x1112, 0x1169, 0x11B8] }, +{ source: [0xD64A], NFC: [0xD64A], NFD: [0x1112, 0x1169, 0x11B9], NFKC: [0xD64A], NFKD: [0x1112, 0x1169, 0x11B9] }, +{ source: [0xD64B], NFC: [0xD64B], NFD: [0x1112, 0x1169, 0x11BA], NFKC: [0xD64B], NFKD: [0x1112, 0x1169, 0x11BA] }, +{ source: [0xD64C], NFC: [0xD64C], NFD: [0x1112, 0x1169, 0x11BB], NFKC: [0xD64C], NFKD: [0x1112, 0x1169, 0x11BB] }, +{ source: [0xD64D], NFC: [0xD64D], NFD: [0x1112, 0x1169, 0x11BC], NFKC: [0xD64D], NFKD: [0x1112, 0x1169, 0x11BC] }, +{ source: [0xD64E], NFC: [0xD64E], NFD: [0x1112, 0x1169, 0x11BD], NFKC: [0xD64E], NFKD: [0x1112, 0x1169, 0x11BD] }, +{ source: [0xD64F], NFC: [0xD64F], NFD: [0x1112, 0x1169, 0x11BE], NFKC: [0xD64F], NFKD: [0x1112, 0x1169, 0x11BE] }, +{ source: [0xD650], NFC: [0xD650], NFD: [0x1112, 0x1169, 0x11BF], NFKC: [0xD650], NFKD: [0x1112, 0x1169, 0x11BF] }, +{ source: [0xD651], NFC: [0xD651], NFD: [0x1112, 0x1169, 0x11C0], NFKC: [0xD651], NFKD: [0x1112, 0x1169, 0x11C0] }, +{ source: [0xD652], NFC: [0xD652], NFD: [0x1112, 0x1169, 0x11C1], NFKC: [0xD652], NFKD: [0x1112, 0x1169, 0x11C1] }, +{ source: [0xD653], NFC: [0xD653], NFD: [0x1112, 0x1169, 0x11C2], NFKC: [0xD653], NFKD: [0x1112, 0x1169, 0x11C2] }, +{ source: [0xD654], NFC: [0xD654], NFD: [0x1112, 0x116A], NFKC: [0xD654], NFKD: [0x1112, 0x116A] }, +{ source: [0xD655], NFC: [0xD655], NFD: [0x1112, 0x116A, 0x11A8], NFKC: [0xD655], NFKD: [0x1112, 0x116A, 0x11A8] }, +{ source: [0xD656], NFC: [0xD656], NFD: [0x1112, 0x116A, 0x11A9], NFKC: [0xD656], NFKD: [0x1112, 0x116A, 0x11A9] }, +{ source: [0xD657], NFC: [0xD657], NFD: [0x1112, 0x116A, 0x11AA], NFKC: [0xD657], NFKD: [0x1112, 0x116A, 0x11AA] }, +{ source: [0xD658], NFC: [0xD658], NFD: [0x1112, 0x116A, 0x11AB], NFKC: [0xD658], NFKD: [0x1112, 0x116A, 0x11AB] }, +{ source: [0xD659], NFC: [0xD659], NFD: [0x1112, 0x116A, 0x11AC], NFKC: [0xD659], NFKD: [0x1112, 0x116A, 0x11AC] }, +{ source: [0xD65A], NFC: [0xD65A], NFD: [0x1112, 0x116A, 0x11AD], NFKC: [0xD65A], NFKD: [0x1112, 0x116A, 0x11AD] }, +{ source: [0xD65B], NFC: [0xD65B], NFD: [0x1112, 0x116A, 0x11AE], NFKC: [0xD65B], NFKD: [0x1112, 0x116A, 0x11AE] }, +{ source: [0xD65C], NFC: [0xD65C], NFD: [0x1112, 0x116A, 0x11AF], NFKC: [0xD65C], NFKD: [0x1112, 0x116A, 0x11AF] }, +{ source: [0xD65D], NFC: [0xD65D], NFD: [0x1112, 0x116A, 0x11B0], NFKC: [0xD65D], NFKD: [0x1112, 0x116A, 0x11B0] }, +{ source: [0xD65E], NFC: [0xD65E], NFD: [0x1112, 0x116A, 0x11B1], NFKC: [0xD65E], NFKD: [0x1112, 0x116A, 0x11B1] }, +{ source: [0xD65F], NFC: [0xD65F], NFD: [0x1112, 0x116A, 0x11B2], NFKC: [0xD65F], NFKD: [0x1112, 0x116A, 0x11B2] }, +{ source: [0xD660], NFC: [0xD660], NFD: [0x1112, 0x116A, 0x11B3], NFKC: [0xD660], NFKD: [0x1112, 0x116A, 0x11B3] }, +{ source: [0xD661], NFC: [0xD661], NFD: [0x1112, 0x116A, 0x11B4], NFKC: [0xD661], NFKD: [0x1112, 0x116A, 0x11B4] }, +{ source: [0xD662], NFC: [0xD662], NFD: [0x1112, 0x116A, 0x11B5], NFKC: [0xD662], NFKD: [0x1112, 0x116A, 0x11B5] }, +{ source: [0xD663], NFC: [0xD663], NFD: [0x1112, 0x116A, 0x11B6], NFKC: [0xD663], NFKD: [0x1112, 0x116A, 0x11B6] }, +{ source: [0xD664], NFC: [0xD664], NFD: [0x1112, 0x116A, 0x11B7], NFKC: [0xD664], NFKD: [0x1112, 0x116A, 0x11B7] }, +{ source: [0xD665], NFC: [0xD665], NFD: [0x1112, 0x116A, 0x11B8], NFKC: [0xD665], NFKD: [0x1112, 0x116A, 0x11B8] }, +{ source: [0xD666], NFC: [0xD666], NFD: [0x1112, 0x116A, 0x11B9], NFKC: [0xD666], NFKD: [0x1112, 0x116A, 0x11B9] }, +{ source: [0xD667], NFC: [0xD667], NFD: [0x1112, 0x116A, 0x11BA], NFKC: [0xD667], NFKD: [0x1112, 0x116A, 0x11BA] }, +{ source: [0xD668], NFC: [0xD668], NFD: [0x1112, 0x116A, 0x11BB], NFKC: [0xD668], NFKD: [0x1112, 0x116A, 0x11BB] }, +{ source: [0xD669], NFC: [0xD669], NFD: [0x1112, 0x116A, 0x11BC], NFKC: [0xD669], NFKD: [0x1112, 0x116A, 0x11BC] }, +{ source: [0xD66A], NFC: [0xD66A], NFD: [0x1112, 0x116A, 0x11BD], NFKC: [0xD66A], NFKD: [0x1112, 0x116A, 0x11BD] }, +{ source: [0xD66B], NFC: [0xD66B], NFD: [0x1112, 0x116A, 0x11BE], NFKC: [0xD66B], NFKD: [0x1112, 0x116A, 0x11BE] }, +{ source: [0xD66C], NFC: [0xD66C], NFD: [0x1112, 0x116A, 0x11BF], NFKC: [0xD66C], NFKD: [0x1112, 0x116A, 0x11BF] }, +{ source: [0xD66D], NFC: [0xD66D], NFD: [0x1112, 0x116A, 0x11C0], NFKC: [0xD66D], NFKD: [0x1112, 0x116A, 0x11C0] }, +{ source: [0xD66E], NFC: [0xD66E], NFD: [0x1112, 0x116A, 0x11C1], NFKC: [0xD66E], NFKD: [0x1112, 0x116A, 0x11C1] }, +{ source: [0xD66F], NFC: [0xD66F], NFD: [0x1112, 0x116A, 0x11C2], NFKC: [0xD66F], NFKD: [0x1112, 0x116A, 0x11C2] }, +{ source: [0xD670], NFC: [0xD670], NFD: [0x1112, 0x116B], NFKC: [0xD670], NFKD: [0x1112, 0x116B] }, +{ source: [0xD671], NFC: [0xD671], NFD: [0x1112, 0x116B, 0x11A8], NFKC: [0xD671], NFKD: [0x1112, 0x116B, 0x11A8] }, +{ source: [0xD672], NFC: [0xD672], NFD: [0x1112, 0x116B, 0x11A9], NFKC: [0xD672], NFKD: [0x1112, 0x116B, 0x11A9] }, +{ source: [0xD673], NFC: [0xD673], NFD: [0x1112, 0x116B, 0x11AA], NFKC: [0xD673], NFKD: [0x1112, 0x116B, 0x11AA] }, +{ source: [0xD674], NFC: [0xD674], NFD: [0x1112, 0x116B, 0x11AB], NFKC: [0xD674], NFKD: [0x1112, 0x116B, 0x11AB] }, +{ source: [0xD675], NFC: [0xD675], NFD: [0x1112, 0x116B, 0x11AC], NFKC: [0xD675], NFKD: [0x1112, 0x116B, 0x11AC] }, +{ source: [0xD676], NFC: [0xD676], NFD: [0x1112, 0x116B, 0x11AD], NFKC: [0xD676], NFKD: [0x1112, 0x116B, 0x11AD] }, +{ source: [0xD677], NFC: [0xD677], NFD: [0x1112, 0x116B, 0x11AE], NFKC: [0xD677], NFKD: [0x1112, 0x116B, 0x11AE] }, +{ source: [0xD678], NFC: [0xD678], NFD: [0x1112, 0x116B, 0x11AF], NFKC: [0xD678], NFKD: [0x1112, 0x116B, 0x11AF] }, +{ source: [0xD679], NFC: [0xD679], NFD: [0x1112, 0x116B, 0x11B0], NFKC: [0xD679], NFKD: [0x1112, 0x116B, 0x11B0] }, +{ source: [0xD67A], NFC: [0xD67A], NFD: [0x1112, 0x116B, 0x11B1], NFKC: [0xD67A], NFKD: [0x1112, 0x116B, 0x11B1] }, +{ source: [0xD67B], NFC: [0xD67B], NFD: [0x1112, 0x116B, 0x11B2], NFKC: [0xD67B], NFKD: [0x1112, 0x116B, 0x11B2] }, +{ source: [0xD67C], NFC: [0xD67C], NFD: [0x1112, 0x116B, 0x11B3], NFKC: [0xD67C], NFKD: [0x1112, 0x116B, 0x11B3] }, +{ source: [0xD67D], NFC: [0xD67D], NFD: [0x1112, 0x116B, 0x11B4], NFKC: [0xD67D], NFKD: [0x1112, 0x116B, 0x11B4] }, +{ source: [0xD67E], NFC: [0xD67E], NFD: [0x1112, 0x116B, 0x11B5], NFKC: [0xD67E], NFKD: [0x1112, 0x116B, 0x11B5] }, +{ source: [0xD67F], NFC: [0xD67F], NFD: [0x1112, 0x116B, 0x11B6], NFKC: [0xD67F], NFKD: [0x1112, 0x116B, 0x11B6] }, +{ source: [0xD680], NFC: [0xD680], NFD: [0x1112, 0x116B, 0x11B7], NFKC: [0xD680], NFKD: [0x1112, 0x116B, 0x11B7] }, +{ source: [0xD681], NFC: [0xD681], NFD: [0x1112, 0x116B, 0x11B8], NFKC: [0xD681], NFKD: [0x1112, 0x116B, 0x11B8] }, +{ source: [0xD682], NFC: [0xD682], NFD: [0x1112, 0x116B, 0x11B9], NFKC: [0xD682], NFKD: [0x1112, 0x116B, 0x11B9] }, +{ source: [0xD683], NFC: [0xD683], NFD: [0x1112, 0x116B, 0x11BA], NFKC: [0xD683], NFKD: [0x1112, 0x116B, 0x11BA] }, +{ source: [0xD684], NFC: [0xD684], NFD: [0x1112, 0x116B, 0x11BB], NFKC: [0xD684], NFKD: [0x1112, 0x116B, 0x11BB] }, +{ source: [0xD685], NFC: [0xD685], NFD: [0x1112, 0x116B, 0x11BC], NFKC: [0xD685], NFKD: [0x1112, 0x116B, 0x11BC] }, +{ source: [0xD686], NFC: [0xD686], NFD: [0x1112, 0x116B, 0x11BD], NFKC: [0xD686], NFKD: [0x1112, 0x116B, 0x11BD] }, +{ source: [0xD687], NFC: [0xD687], NFD: [0x1112, 0x116B, 0x11BE], NFKC: [0xD687], NFKD: [0x1112, 0x116B, 0x11BE] }, +{ source: [0xD688], NFC: [0xD688], NFD: [0x1112, 0x116B, 0x11BF], NFKC: [0xD688], NFKD: [0x1112, 0x116B, 0x11BF] }, +{ source: [0xD689], NFC: [0xD689], NFD: [0x1112, 0x116B, 0x11C0], NFKC: [0xD689], NFKD: [0x1112, 0x116B, 0x11C0] }, +{ source: [0xD68A], NFC: [0xD68A], NFD: [0x1112, 0x116B, 0x11C1], NFKC: [0xD68A], NFKD: [0x1112, 0x116B, 0x11C1] }, +{ source: [0xD68B], NFC: [0xD68B], NFD: [0x1112, 0x116B, 0x11C2], NFKC: [0xD68B], NFKD: [0x1112, 0x116B, 0x11C2] }, +{ source: [0xD68C], NFC: [0xD68C], NFD: [0x1112, 0x116C], NFKC: [0xD68C], NFKD: [0x1112, 0x116C] }, +{ source: [0xD68D], NFC: [0xD68D], NFD: [0x1112, 0x116C, 0x11A8], NFKC: [0xD68D], NFKD: [0x1112, 0x116C, 0x11A8] }, +{ source: [0xD68E], NFC: [0xD68E], NFD: [0x1112, 0x116C, 0x11A9], NFKC: [0xD68E], NFKD: [0x1112, 0x116C, 0x11A9] }, +{ source: [0xD68F], NFC: [0xD68F], NFD: [0x1112, 0x116C, 0x11AA], NFKC: [0xD68F], NFKD: [0x1112, 0x116C, 0x11AA] }, +{ source: [0xD690], NFC: [0xD690], NFD: [0x1112, 0x116C, 0x11AB], NFKC: [0xD690], NFKD: [0x1112, 0x116C, 0x11AB] }, +{ source: [0xD691], NFC: [0xD691], NFD: [0x1112, 0x116C, 0x11AC], NFKC: [0xD691], NFKD: [0x1112, 0x116C, 0x11AC] }, +{ source: [0xD692], NFC: [0xD692], NFD: [0x1112, 0x116C, 0x11AD], NFKC: [0xD692], NFKD: [0x1112, 0x116C, 0x11AD] }, +{ source: [0xD693], NFC: [0xD693], NFD: [0x1112, 0x116C, 0x11AE], NFKC: [0xD693], NFKD: [0x1112, 0x116C, 0x11AE] }, +{ source: [0xD694], NFC: [0xD694], NFD: [0x1112, 0x116C, 0x11AF], NFKC: [0xD694], NFKD: [0x1112, 0x116C, 0x11AF] }, +{ source: [0xD695], NFC: [0xD695], NFD: [0x1112, 0x116C, 0x11B0], NFKC: [0xD695], NFKD: [0x1112, 0x116C, 0x11B0] }, +{ source: [0xD696], NFC: [0xD696], NFD: [0x1112, 0x116C, 0x11B1], NFKC: [0xD696], NFKD: [0x1112, 0x116C, 0x11B1] }, +{ source: [0xD697], NFC: [0xD697], NFD: [0x1112, 0x116C, 0x11B2], NFKC: [0xD697], NFKD: [0x1112, 0x116C, 0x11B2] }, +{ source: [0xD698], NFC: [0xD698], NFD: [0x1112, 0x116C, 0x11B3], NFKC: [0xD698], NFKD: [0x1112, 0x116C, 0x11B3] }, +{ source: [0xD699], NFC: [0xD699], NFD: [0x1112, 0x116C, 0x11B4], NFKC: [0xD699], NFKD: [0x1112, 0x116C, 0x11B4] }, +{ source: [0xD69A], NFC: [0xD69A], NFD: [0x1112, 0x116C, 0x11B5], NFKC: [0xD69A], NFKD: [0x1112, 0x116C, 0x11B5] }, +{ source: [0xD69B], NFC: [0xD69B], NFD: [0x1112, 0x116C, 0x11B6], NFKC: [0xD69B], NFKD: [0x1112, 0x116C, 0x11B6] }, +{ source: [0xD69C], NFC: [0xD69C], NFD: [0x1112, 0x116C, 0x11B7], NFKC: [0xD69C], NFKD: [0x1112, 0x116C, 0x11B7] }, +{ source: [0xD69D], NFC: [0xD69D], NFD: [0x1112, 0x116C, 0x11B8], NFKC: [0xD69D], NFKD: [0x1112, 0x116C, 0x11B8] }, +{ source: [0xD69E], NFC: [0xD69E], NFD: [0x1112, 0x116C, 0x11B9], NFKC: [0xD69E], NFKD: [0x1112, 0x116C, 0x11B9] }, +{ source: [0xD69F], NFC: [0xD69F], NFD: [0x1112, 0x116C, 0x11BA], NFKC: [0xD69F], NFKD: [0x1112, 0x116C, 0x11BA] }, +{ source: [0xD6A0], NFC: [0xD6A0], NFD: [0x1112, 0x116C, 0x11BB], NFKC: [0xD6A0], NFKD: [0x1112, 0x116C, 0x11BB] }, +{ source: [0xD6A1], NFC: [0xD6A1], NFD: [0x1112, 0x116C, 0x11BC], NFKC: [0xD6A1], NFKD: [0x1112, 0x116C, 0x11BC] }, +{ source: [0xD6A2], NFC: [0xD6A2], NFD: [0x1112, 0x116C, 0x11BD], NFKC: [0xD6A2], NFKD: [0x1112, 0x116C, 0x11BD] }, +{ source: [0xD6A3], NFC: [0xD6A3], NFD: [0x1112, 0x116C, 0x11BE], NFKC: [0xD6A3], NFKD: [0x1112, 0x116C, 0x11BE] }, +{ source: [0xD6A4], NFC: [0xD6A4], NFD: [0x1112, 0x116C, 0x11BF], NFKC: [0xD6A4], NFKD: [0x1112, 0x116C, 0x11BF] }, +{ source: [0xD6A5], NFC: [0xD6A5], NFD: [0x1112, 0x116C, 0x11C0], NFKC: [0xD6A5], NFKD: [0x1112, 0x116C, 0x11C0] }, +{ source: [0xD6A6], NFC: [0xD6A6], NFD: [0x1112, 0x116C, 0x11C1], NFKC: [0xD6A6], NFKD: [0x1112, 0x116C, 0x11C1] }, +{ source: [0xD6A7], NFC: [0xD6A7], NFD: [0x1112, 0x116C, 0x11C2], NFKC: [0xD6A7], NFKD: [0x1112, 0x116C, 0x11C2] }, +{ source: [0xD6A8], NFC: [0xD6A8], NFD: [0x1112, 0x116D], NFKC: [0xD6A8], NFKD: [0x1112, 0x116D] }, +{ source: [0xD6A9], NFC: [0xD6A9], NFD: [0x1112, 0x116D, 0x11A8], NFKC: [0xD6A9], NFKD: [0x1112, 0x116D, 0x11A8] }, +{ source: [0xD6AA], NFC: [0xD6AA], NFD: [0x1112, 0x116D, 0x11A9], NFKC: [0xD6AA], NFKD: [0x1112, 0x116D, 0x11A9] }, +{ source: [0xD6AB], NFC: [0xD6AB], NFD: [0x1112, 0x116D, 0x11AA], NFKC: [0xD6AB], NFKD: [0x1112, 0x116D, 0x11AA] }, +{ source: [0xD6AC], NFC: [0xD6AC], NFD: [0x1112, 0x116D, 0x11AB], NFKC: [0xD6AC], NFKD: [0x1112, 0x116D, 0x11AB] }, +{ source: [0xD6AD], NFC: [0xD6AD], NFD: [0x1112, 0x116D, 0x11AC], NFKC: [0xD6AD], NFKD: [0x1112, 0x116D, 0x11AC] }, +{ source: [0xD6AE], NFC: [0xD6AE], NFD: [0x1112, 0x116D, 0x11AD], NFKC: [0xD6AE], NFKD: [0x1112, 0x116D, 0x11AD] }, +{ source: [0xD6AF], NFC: [0xD6AF], NFD: [0x1112, 0x116D, 0x11AE], NFKC: [0xD6AF], NFKD: [0x1112, 0x116D, 0x11AE] }, +{ source: [0xD6B0], NFC: [0xD6B0], NFD: [0x1112, 0x116D, 0x11AF], NFKC: [0xD6B0], NFKD: [0x1112, 0x116D, 0x11AF] }, +{ source: [0xD6B1], NFC: [0xD6B1], NFD: [0x1112, 0x116D, 0x11B0], NFKC: [0xD6B1], NFKD: [0x1112, 0x116D, 0x11B0] }, +{ source: [0xD6B2], NFC: [0xD6B2], NFD: [0x1112, 0x116D, 0x11B1], NFKC: [0xD6B2], NFKD: [0x1112, 0x116D, 0x11B1] }, +{ source: [0xD6B3], NFC: [0xD6B3], NFD: [0x1112, 0x116D, 0x11B2], NFKC: [0xD6B3], NFKD: [0x1112, 0x116D, 0x11B2] }, +{ source: [0xD6B4], NFC: [0xD6B4], NFD: [0x1112, 0x116D, 0x11B3], NFKC: [0xD6B4], NFKD: [0x1112, 0x116D, 0x11B3] }, +{ source: [0xD6B5], NFC: [0xD6B5], NFD: [0x1112, 0x116D, 0x11B4], NFKC: [0xD6B5], NFKD: [0x1112, 0x116D, 0x11B4] }, +{ source: [0xD6B6], NFC: [0xD6B6], NFD: [0x1112, 0x116D, 0x11B5], NFKC: [0xD6B6], NFKD: [0x1112, 0x116D, 0x11B5] }, +{ source: [0xD6B7], NFC: [0xD6B7], NFD: [0x1112, 0x116D, 0x11B6], NFKC: [0xD6B7], NFKD: [0x1112, 0x116D, 0x11B6] }, +{ source: [0xD6B8], NFC: [0xD6B8], NFD: [0x1112, 0x116D, 0x11B7], NFKC: [0xD6B8], NFKD: [0x1112, 0x116D, 0x11B7] }, +{ source: [0xD6B9], NFC: [0xD6B9], NFD: [0x1112, 0x116D, 0x11B8], NFKC: [0xD6B9], NFKD: [0x1112, 0x116D, 0x11B8] }, +{ source: [0xD6BA], NFC: [0xD6BA], NFD: [0x1112, 0x116D, 0x11B9], NFKC: [0xD6BA], NFKD: [0x1112, 0x116D, 0x11B9] }, +{ source: [0xD6BB], NFC: [0xD6BB], NFD: [0x1112, 0x116D, 0x11BA], NFKC: [0xD6BB], NFKD: [0x1112, 0x116D, 0x11BA] }, +{ source: [0xD6BC], NFC: [0xD6BC], NFD: [0x1112, 0x116D, 0x11BB], NFKC: [0xD6BC], NFKD: [0x1112, 0x116D, 0x11BB] }, +{ source: [0xD6BD], NFC: [0xD6BD], NFD: [0x1112, 0x116D, 0x11BC], NFKC: [0xD6BD], NFKD: [0x1112, 0x116D, 0x11BC] }, +{ source: [0xD6BE], NFC: [0xD6BE], NFD: [0x1112, 0x116D, 0x11BD], NFKC: [0xD6BE], NFKD: [0x1112, 0x116D, 0x11BD] }, +{ source: [0xD6BF], NFC: [0xD6BF], NFD: [0x1112, 0x116D, 0x11BE], NFKC: [0xD6BF], NFKD: [0x1112, 0x116D, 0x11BE] }, +{ source: [0xD6C0], NFC: [0xD6C0], NFD: [0x1112, 0x116D, 0x11BF], NFKC: [0xD6C0], NFKD: [0x1112, 0x116D, 0x11BF] }, +{ source: [0xD6C1], NFC: [0xD6C1], NFD: [0x1112, 0x116D, 0x11C0], NFKC: [0xD6C1], NFKD: [0x1112, 0x116D, 0x11C0] }, +{ source: [0xD6C2], NFC: [0xD6C2], NFD: [0x1112, 0x116D, 0x11C1], NFKC: [0xD6C2], NFKD: [0x1112, 0x116D, 0x11C1] }, +{ source: [0xD6C3], NFC: [0xD6C3], NFD: [0x1112, 0x116D, 0x11C2], NFKC: [0xD6C3], NFKD: [0x1112, 0x116D, 0x11C2] }, +{ source: [0xD6C4], NFC: [0xD6C4], NFD: [0x1112, 0x116E], NFKC: [0xD6C4], NFKD: [0x1112, 0x116E] }, +{ source: [0xD6C5], NFC: [0xD6C5], NFD: [0x1112, 0x116E, 0x11A8], NFKC: [0xD6C5], NFKD: [0x1112, 0x116E, 0x11A8] }, +{ source: [0xD6C6], NFC: [0xD6C6], NFD: [0x1112, 0x116E, 0x11A9], NFKC: [0xD6C6], NFKD: [0x1112, 0x116E, 0x11A9] }, +{ source: [0xD6C7], NFC: [0xD6C7], NFD: [0x1112, 0x116E, 0x11AA], NFKC: [0xD6C7], NFKD: [0x1112, 0x116E, 0x11AA] }, +{ source: [0xD6C8], NFC: [0xD6C8], NFD: [0x1112, 0x116E, 0x11AB], NFKC: [0xD6C8], NFKD: [0x1112, 0x116E, 0x11AB] }, +{ source: [0xD6C9], NFC: [0xD6C9], NFD: [0x1112, 0x116E, 0x11AC], NFKC: [0xD6C9], NFKD: [0x1112, 0x116E, 0x11AC] }, +{ source: [0xD6CA], NFC: [0xD6CA], NFD: [0x1112, 0x116E, 0x11AD], NFKC: [0xD6CA], NFKD: [0x1112, 0x116E, 0x11AD] }, +{ source: [0xD6CB], NFC: [0xD6CB], NFD: [0x1112, 0x116E, 0x11AE], NFKC: [0xD6CB], NFKD: [0x1112, 0x116E, 0x11AE] }, +{ source: [0xD6CC], NFC: [0xD6CC], NFD: [0x1112, 0x116E, 0x11AF], NFKC: [0xD6CC], NFKD: [0x1112, 0x116E, 0x11AF] }, +{ source: [0xD6CD], NFC: [0xD6CD], NFD: [0x1112, 0x116E, 0x11B0], NFKC: [0xD6CD], NFKD: [0x1112, 0x116E, 0x11B0] }, +{ source: [0xD6CE], NFC: [0xD6CE], NFD: [0x1112, 0x116E, 0x11B1], NFKC: [0xD6CE], NFKD: [0x1112, 0x116E, 0x11B1] }, +{ source: [0xD6CF], NFC: [0xD6CF], NFD: [0x1112, 0x116E, 0x11B2], NFKC: [0xD6CF], NFKD: [0x1112, 0x116E, 0x11B2] }, +{ source: [0xD6D0], NFC: [0xD6D0], NFD: [0x1112, 0x116E, 0x11B3], NFKC: [0xD6D0], NFKD: [0x1112, 0x116E, 0x11B3] }, +{ source: [0xD6D1], NFC: [0xD6D1], NFD: [0x1112, 0x116E, 0x11B4], NFKC: [0xD6D1], NFKD: [0x1112, 0x116E, 0x11B4] }, +{ source: [0xD6D2], NFC: [0xD6D2], NFD: [0x1112, 0x116E, 0x11B5], NFKC: [0xD6D2], NFKD: [0x1112, 0x116E, 0x11B5] }, +{ source: [0xD6D3], NFC: [0xD6D3], NFD: [0x1112, 0x116E, 0x11B6], NFKC: [0xD6D3], NFKD: [0x1112, 0x116E, 0x11B6] }, +{ source: [0xD6D4], NFC: [0xD6D4], NFD: [0x1112, 0x116E, 0x11B7], NFKC: [0xD6D4], NFKD: [0x1112, 0x116E, 0x11B7] }, +{ source: [0xD6D5], NFC: [0xD6D5], NFD: [0x1112, 0x116E, 0x11B8], NFKC: [0xD6D5], NFKD: [0x1112, 0x116E, 0x11B8] }, +{ source: [0xD6D6], NFC: [0xD6D6], NFD: [0x1112, 0x116E, 0x11B9], NFKC: [0xD6D6], NFKD: [0x1112, 0x116E, 0x11B9] }, +{ source: [0xD6D7], NFC: [0xD6D7], NFD: [0x1112, 0x116E, 0x11BA], NFKC: [0xD6D7], NFKD: [0x1112, 0x116E, 0x11BA] }, +{ source: [0xD6D8], NFC: [0xD6D8], NFD: [0x1112, 0x116E, 0x11BB], NFKC: [0xD6D8], NFKD: [0x1112, 0x116E, 0x11BB] }, +{ source: [0xD6D9], NFC: [0xD6D9], NFD: [0x1112, 0x116E, 0x11BC], NFKC: [0xD6D9], NFKD: [0x1112, 0x116E, 0x11BC] }, +{ source: [0xD6DA], NFC: [0xD6DA], NFD: [0x1112, 0x116E, 0x11BD], NFKC: [0xD6DA], NFKD: [0x1112, 0x116E, 0x11BD] }, +{ source: [0xD6DB], NFC: [0xD6DB], NFD: [0x1112, 0x116E, 0x11BE], NFKC: [0xD6DB], NFKD: [0x1112, 0x116E, 0x11BE] }, +{ source: [0xD6DC], NFC: [0xD6DC], NFD: [0x1112, 0x116E, 0x11BF], NFKC: [0xD6DC], NFKD: [0x1112, 0x116E, 0x11BF] }, +{ source: [0xD6DD], NFC: [0xD6DD], NFD: [0x1112, 0x116E, 0x11C0], NFKC: [0xD6DD], NFKD: [0x1112, 0x116E, 0x11C0] }, +{ source: [0xD6DE], NFC: [0xD6DE], NFD: [0x1112, 0x116E, 0x11C1], NFKC: [0xD6DE], NFKD: [0x1112, 0x116E, 0x11C1] }, +{ source: [0xD6DF], NFC: [0xD6DF], NFD: [0x1112, 0x116E, 0x11C2], NFKC: [0xD6DF], NFKD: [0x1112, 0x116E, 0x11C2] }, +{ source: [0xD6E0], NFC: [0xD6E0], NFD: [0x1112, 0x116F], NFKC: [0xD6E0], NFKD: [0x1112, 0x116F] }, +{ source: [0xD6E1], NFC: [0xD6E1], NFD: [0x1112, 0x116F, 0x11A8], NFKC: [0xD6E1], NFKD: [0x1112, 0x116F, 0x11A8] }, +{ source: [0xD6E2], NFC: [0xD6E2], NFD: [0x1112, 0x116F, 0x11A9], NFKC: [0xD6E2], NFKD: [0x1112, 0x116F, 0x11A9] }, +{ source: [0xD6E3], NFC: [0xD6E3], NFD: [0x1112, 0x116F, 0x11AA], NFKC: [0xD6E3], NFKD: [0x1112, 0x116F, 0x11AA] }, +{ source: [0xD6E4], NFC: [0xD6E4], NFD: [0x1112, 0x116F, 0x11AB], NFKC: [0xD6E4], NFKD: [0x1112, 0x116F, 0x11AB] }, +{ source: [0xD6E5], NFC: [0xD6E5], NFD: [0x1112, 0x116F, 0x11AC], NFKC: [0xD6E5], NFKD: [0x1112, 0x116F, 0x11AC] }, +{ source: [0xD6E6], NFC: [0xD6E6], NFD: [0x1112, 0x116F, 0x11AD], NFKC: [0xD6E6], NFKD: [0x1112, 0x116F, 0x11AD] }, +{ source: [0xD6E7], NFC: [0xD6E7], NFD: [0x1112, 0x116F, 0x11AE], NFKC: [0xD6E7], NFKD: [0x1112, 0x116F, 0x11AE] }, +{ source: [0xD6E8], NFC: [0xD6E8], NFD: [0x1112, 0x116F, 0x11AF], NFKC: [0xD6E8], NFKD: [0x1112, 0x116F, 0x11AF] }, +{ source: [0xD6E9], NFC: [0xD6E9], NFD: [0x1112, 0x116F, 0x11B0], NFKC: [0xD6E9], NFKD: [0x1112, 0x116F, 0x11B0] }, +{ source: [0xD6EA], NFC: [0xD6EA], NFD: [0x1112, 0x116F, 0x11B1], NFKC: [0xD6EA], NFKD: [0x1112, 0x116F, 0x11B1] }, +{ source: [0xD6EB], NFC: [0xD6EB], NFD: [0x1112, 0x116F, 0x11B2], NFKC: [0xD6EB], NFKD: [0x1112, 0x116F, 0x11B2] }, +{ source: [0xD6EC], NFC: [0xD6EC], NFD: [0x1112, 0x116F, 0x11B3], NFKC: [0xD6EC], NFKD: [0x1112, 0x116F, 0x11B3] }, +{ source: [0xD6ED], NFC: [0xD6ED], NFD: [0x1112, 0x116F, 0x11B4], NFKC: [0xD6ED], NFKD: [0x1112, 0x116F, 0x11B4] }, +{ source: [0xD6EE], NFC: [0xD6EE], NFD: [0x1112, 0x116F, 0x11B5], NFKC: [0xD6EE], NFKD: [0x1112, 0x116F, 0x11B5] }, +{ source: [0xD6EF], NFC: [0xD6EF], NFD: [0x1112, 0x116F, 0x11B6], NFKC: [0xD6EF], NFKD: [0x1112, 0x116F, 0x11B6] }, +{ source: [0xD6F0], NFC: [0xD6F0], NFD: [0x1112, 0x116F, 0x11B7], NFKC: [0xD6F0], NFKD: [0x1112, 0x116F, 0x11B7] }, +{ source: [0xD6F1], NFC: [0xD6F1], NFD: [0x1112, 0x116F, 0x11B8], NFKC: [0xD6F1], NFKD: [0x1112, 0x116F, 0x11B8] }, +{ source: [0xD6F2], NFC: [0xD6F2], NFD: [0x1112, 0x116F, 0x11B9], NFKC: [0xD6F2], NFKD: [0x1112, 0x116F, 0x11B9] }, +{ source: [0xD6F3], NFC: [0xD6F3], NFD: [0x1112, 0x116F, 0x11BA], NFKC: [0xD6F3], NFKD: [0x1112, 0x116F, 0x11BA] }, +{ source: [0xD6F4], NFC: [0xD6F4], NFD: [0x1112, 0x116F, 0x11BB], NFKC: [0xD6F4], NFKD: [0x1112, 0x116F, 0x11BB] }, +{ source: [0xD6F5], NFC: [0xD6F5], NFD: [0x1112, 0x116F, 0x11BC], NFKC: [0xD6F5], NFKD: [0x1112, 0x116F, 0x11BC] }, +{ source: [0xD6F6], NFC: [0xD6F6], NFD: [0x1112, 0x116F, 0x11BD], NFKC: [0xD6F6], NFKD: [0x1112, 0x116F, 0x11BD] }, +{ source: [0xD6F7], NFC: [0xD6F7], NFD: [0x1112, 0x116F, 0x11BE], NFKC: [0xD6F7], NFKD: [0x1112, 0x116F, 0x11BE] }, +{ source: [0xD6F8], NFC: [0xD6F8], NFD: [0x1112, 0x116F, 0x11BF], NFKC: [0xD6F8], NFKD: [0x1112, 0x116F, 0x11BF] }, +{ source: [0xD6F9], NFC: [0xD6F9], NFD: [0x1112, 0x116F, 0x11C0], NFKC: [0xD6F9], NFKD: [0x1112, 0x116F, 0x11C0] }, +{ source: [0xD6FA], NFC: [0xD6FA], NFD: [0x1112, 0x116F, 0x11C1], NFKC: [0xD6FA], NFKD: [0x1112, 0x116F, 0x11C1] }, +{ source: [0xD6FB], NFC: [0xD6FB], NFD: [0x1112, 0x116F, 0x11C2], NFKC: [0xD6FB], NFKD: [0x1112, 0x116F, 0x11C2] }, +{ source: [0xD6FC], NFC: [0xD6FC], NFD: [0x1112, 0x1170], NFKC: [0xD6FC], NFKD: [0x1112, 0x1170] }, +{ source: [0xD6FD], NFC: [0xD6FD], NFD: [0x1112, 0x1170, 0x11A8], NFKC: [0xD6FD], NFKD: [0x1112, 0x1170, 0x11A8] }, +{ source: [0xD6FE], NFC: [0xD6FE], NFD: [0x1112, 0x1170, 0x11A9], NFKC: [0xD6FE], NFKD: [0x1112, 0x1170, 0x11A9] }, +{ source: [0xD6FF], NFC: [0xD6FF], NFD: [0x1112, 0x1170, 0x11AA], NFKC: [0xD6FF], NFKD: [0x1112, 0x1170, 0x11AA] }, +{ source: [0xD700], NFC: [0xD700], NFD: [0x1112, 0x1170, 0x11AB], NFKC: [0xD700], NFKD: [0x1112, 0x1170, 0x11AB] }, +{ source: [0xD701], NFC: [0xD701], NFD: [0x1112, 0x1170, 0x11AC], NFKC: [0xD701], NFKD: [0x1112, 0x1170, 0x11AC] }, +{ source: [0xD702], NFC: [0xD702], NFD: [0x1112, 0x1170, 0x11AD], NFKC: [0xD702], NFKD: [0x1112, 0x1170, 0x11AD] }, +{ source: [0xD703], NFC: [0xD703], NFD: [0x1112, 0x1170, 0x11AE], NFKC: [0xD703], NFKD: [0x1112, 0x1170, 0x11AE] }, +{ source: [0xD704], NFC: [0xD704], NFD: [0x1112, 0x1170, 0x11AF], NFKC: [0xD704], NFKD: [0x1112, 0x1170, 0x11AF] }, +{ source: [0xD705], NFC: [0xD705], NFD: [0x1112, 0x1170, 0x11B0], NFKC: [0xD705], NFKD: [0x1112, 0x1170, 0x11B0] }, +{ source: [0xD706], NFC: [0xD706], NFD: [0x1112, 0x1170, 0x11B1], NFKC: [0xD706], NFKD: [0x1112, 0x1170, 0x11B1] }, +{ source: [0xD707], NFC: [0xD707], NFD: [0x1112, 0x1170, 0x11B2], NFKC: [0xD707], NFKD: [0x1112, 0x1170, 0x11B2] }, +{ source: [0xD708], NFC: [0xD708], NFD: [0x1112, 0x1170, 0x11B3], NFKC: [0xD708], NFKD: [0x1112, 0x1170, 0x11B3] }, +{ source: [0xD709], NFC: [0xD709], NFD: [0x1112, 0x1170, 0x11B4], NFKC: [0xD709], NFKD: [0x1112, 0x1170, 0x11B4] }, +{ source: [0xD70A], NFC: [0xD70A], NFD: [0x1112, 0x1170, 0x11B5], NFKC: [0xD70A], NFKD: [0x1112, 0x1170, 0x11B5] }, +{ source: [0xD70B], NFC: [0xD70B], NFD: [0x1112, 0x1170, 0x11B6], NFKC: [0xD70B], NFKD: [0x1112, 0x1170, 0x11B6] }, +{ source: [0xD70C], NFC: [0xD70C], NFD: [0x1112, 0x1170, 0x11B7], NFKC: [0xD70C], NFKD: [0x1112, 0x1170, 0x11B7] }, +{ source: [0xD70D], NFC: [0xD70D], NFD: [0x1112, 0x1170, 0x11B8], NFKC: [0xD70D], NFKD: [0x1112, 0x1170, 0x11B8] }, +{ source: [0xD70E], NFC: [0xD70E], NFD: [0x1112, 0x1170, 0x11B9], NFKC: [0xD70E], NFKD: [0x1112, 0x1170, 0x11B9] }, +{ source: [0xD70F], NFC: [0xD70F], NFD: [0x1112, 0x1170, 0x11BA], NFKC: [0xD70F], NFKD: [0x1112, 0x1170, 0x11BA] }, +{ source: [0xD710], NFC: [0xD710], NFD: [0x1112, 0x1170, 0x11BB], NFKC: [0xD710], NFKD: [0x1112, 0x1170, 0x11BB] }, +{ source: [0xD711], NFC: [0xD711], NFD: [0x1112, 0x1170, 0x11BC], NFKC: [0xD711], NFKD: [0x1112, 0x1170, 0x11BC] }, +{ source: [0xD712], NFC: [0xD712], NFD: [0x1112, 0x1170, 0x11BD], NFKC: [0xD712], NFKD: [0x1112, 0x1170, 0x11BD] }, +{ source: [0xD713], NFC: [0xD713], NFD: [0x1112, 0x1170, 0x11BE], NFKC: [0xD713], NFKD: [0x1112, 0x1170, 0x11BE] }, +{ source: [0xD714], NFC: [0xD714], NFD: [0x1112, 0x1170, 0x11BF], NFKC: [0xD714], NFKD: [0x1112, 0x1170, 0x11BF] }, +{ source: [0xD715], NFC: [0xD715], NFD: [0x1112, 0x1170, 0x11C0], NFKC: [0xD715], NFKD: [0x1112, 0x1170, 0x11C0] }, +{ source: [0xD716], NFC: [0xD716], NFD: [0x1112, 0x1170, 0x11C1], NFKC: [0xD716], NFKD: [0x1112, 0x1170, 0x11C1] }, +{ source: [0xD717], NFC: [0xD717], NFD: [0x1112, 0x1170, 0x11C2], NFKC: [0xD717], NFKD: [0x1112, 0x1170, 0x11C2] }, +{ source: [0xD718], NFC: [0xD718], NFD: [0x1112, 0x1171], NFKC: [0xD718], NFKD: [0x1112, 0x1171] }, +{ source: [0xD719], NFC: [0xD719], NFD: [0x1112, 0x1171, 0x11A8], NFKC: [0xD719], NFKD: [0x1112, 0x1171, 0x11A8] }, +{ source: [0xD71A], NFC: [0xD71A], NFD: [0x1112, 0x1171, 0x11A9], NFKC: [0xD71A], NFKD: [0x1112, 0x1171, 0x11A9] }, +{ source: [0xD71B], NFC: [0xD71B], NFD: [0x1112, 0x1171, 0x11AA], NFKC: [0xD71B], NFKD: [0x1112, 0x1171, 0x11AA] }, +{ source: [0xD71C], NFC: [0xD71C], NFD: [0x1112, 0x1171, 0x11AB], NFKC: [0xD71C], NFKD: [0x1112, 0x1171, 0x11AB] }, +{ source: [0xD71D], NFC: [0xD71D], NFD: [0x1112, 0x1171, 0x11AC], NFKC: [0xD71D], NFKD: [0x1112, 0x1171, 0x11AC] }, +{ source: [0xD71E], NFC: [0xD71E], NFD: [0x1112, 0x1171, 0x11AD], NFKC: [0xD71E], NFKD: [0x1112, 0x1171, 0x11AD] }, +{ source: [0xD71F], NFC: [0xD71F], NFD: [0x1112, 0x1171, 0x11AE], NFKC: [0xD71F], NFKD: [0x1112, 0x1171, 0x11AE] }, +{ source: [0xD720], NFC: [0xD720], NFD: [0x1112, 0x1171, 0x11AF], NFKC: [0xD720], NFKD: [0x1112, 0x1171, 0x11AF] }, +{ source: [0xD721], NFC: [0xD721], NFD: [0x1112, 0x1171, 0x11B0], NFKC: [0xD721], NFKD: [0x1112, 0x1171, 0x11B0] }, +{ source: [0xD722], NFC: [0xD722], NFD: [0x1112, 0x1171, 0x11B1], NFKC: [0xD722], NFKD: [0x1112, 0x1171, 0x11B1] }, +{ source: [0xD723], NFC: [0xD723], NFD: [0x1112, 0x1171, 0x11B2], NFKC: [0xD723], NFKD: [0x1112, 0x1171, 0x11B2] }, +{ source: [0xD724], NFC: [0xD724], NFD: [0x1112, 0x1171, 0x11B3], NFKC: [0xD724], NFKD: [0x1112, 0x1171, 0x11B3] }, +{ source: [0xD725], NFC: [0xD725], NFD: [0x1112, 0x1171, 0x11B4], NFKC: [0xD725], NFKD: [0x1112, 0x1171, 0x11B4] }, +{ source: [0xD726], NFC: [0xD726], NFD: [0x1112, 0x1171, 0x11B5], NFKC: [0xD726], NFKD: [0x1112, 0x1171, 0x11B5] }, +{ source: [0xD727], NFC: [0xD727], NFD: [0x1112, 0x1171, 0x11B6], NFKC: [0xD727], NFKD: [0x1112, 0x1171, 0x11B6] }, +{ source: [0xD728], NFC: [0xD728], NFD: [0x1112, 0x1171, 0x11B7], NFKC: [0xD728], NFKD: [0x1112, 0x1171, 0x11B7] }, +{ source: [0xD729], NFC: [0xD729], NFD: [0x1112, 0x1171, 0x11B8], NFKC: [0xD729], NFKD: [0x1112, 0x1171, 0x11B8] }, +{ source: [0xD72A], NFC: [0xD72A], NFD: [0x1112, 0x1171, 0x11B9], NFKC: [0xD72A], NFKD: [0x1112, 0x1171, 0x11B9] }, +{ source: [0xD72B], NFC: [0xD72B], NFD: [0x1112, 0x1171, 0x11BA], NFKC: [0xD72B], NFKD: [0x1112, 0x1171, 0x11BA] }, +{ source: [0xD72C], NFC: [0xD72C], NFD: [0x1112, 0x1171, 0x11BB], NFKC: [0xD72C], NFKD: [0x1112, 0x1171, 0x11BB] }, +{ source: [0xD72D], NFC: [0xD72D], NFD: [0x1112, 0x1171, 0x11BC], NFKC: [0xD72D], NFKD: [0x1112, 0x1171, 0x11BC] }, +{ source: [0xD72E], NFC: [0xD72E], NFD: [0x1112, 0x1171, 0x11BD], NFKC: [0xD72E], NFKD: [0x1112, 0x1171, 0x11BD] }, +{ source: [0xD72F], NFC: [0xD72F], NFD: [0x1112, 0x1171, 0x11BE], NFKC: [0xD72F], NFKD: [0x1112, 0x1171, 0x11BE] }, +{ source: [0xD730], NFC: [0xD730], NFD: [0x1112, 0x1171, 0x11BF], NFKC: [0xD730], NFKD: [0x1112, 0x1171, 0x11BF] }, +{ source: [0xD731], NFC: [0xD731], NFD: [0x1112, 0x1171, 0x11C0], NFKC: [0xD731], NFKD: [0x1112, 0x1171, 0x11C0] }, +{ source: [0xD732], NFC: [0xD732], NFD: [0x1112, 0x1171, 0x11C1], NFKC: [0xD732], NFKD: [0x1112, 0x1171, 0x11C1] }, +{ source: [0xD733], NFC: [0xD733], NFD: [0x1112, 0x1171, 0x11C2], NFKC: [0xD733], NFKD: [0x1112, 0x1171, 0x11C2] }, +{ source: [0xD734], NFC: [0xD734], NFD: [0x1112, 0x1172], NFKC: [0xD734], NFKD: [0x1112, 0x1172] }, +{ source: [0xD735], NFC: [0xD735], NFD: [0x1112, 0x1172, 0x11A8], NFKC: [0xD735], NFKD: [0x1112, 0x1172, 0x11A8] }, +{ source: [0xD736], NFC: [0xD736], NFD: [0x1112, 0x1172, 0x11A9], NFKC: [0xD736], NFKD: [0x1112, 0x1172, 0x11A9] }, +{ source: [0xD737], NFC: [0xD737], NFD: [0x1112, 0x1172, 0x11AA], NFKC: [0xD737], NFKD: [0x1112, 0x1172, 0x11AA] }, +{ source: [0xD738], NFC: [0xD738], NFD: [0x1112, 0x1172, 0x11AB], NFKC: [0xD738], NFKD: [0x1112, 0x1172, 0x11AB] }, +{ source: [0xD739], NFC: [0xD739], NFD: [0x1112, 0x1172, 0x11AC], NFKC: [0xD739], NFKD: [0x1112, 0x1172, 0x11AC] }, +{ source: [0xD73A], NFC: [0xD73A], NFD: [0x1112, 0x1172, 0x11AD], NFKC: [0xD73A], NFKD: [0x1112, 0x1172, 0x11AD] }, +{ source: [0xD73B], NFC: [0xD73B], NFD: [0x1112, 0x1172, 0x11AE], NFKC: [0xD73B], NFKD: [0x1112, 0x1172, 0x11AE] }, +{ source: [0xD73C], NFC: [0xD73C], NFD: [0x1112, 0x1172, 0x11AF], NFKC: [0xD73C], NFKD: [0x1112, 0x1172, 0x11AF] }, +{ source: [0xD73D], NFC: [0xD73D], NFD: [0x1112, 0x1172, 0x11B0], NFKC: [0xD73D], NFKD: [0x1112, 0x1172, 0x11B0] }, +{ source: [0xD73E], NFC: [0xD73E], NFD: [0x1112, 0x1172, 0x11B1], NFKC: [0xD73E], NFKD: [0x1112, 0x1172, 0x11B1] }, +{ source: [0xD73F], NFC: [0xD73F], NFD: [0x1112, 0x1172, 0x11B2], NFKC: [0xD73F], NFKD: [0x1112, 0x1172, 0x11B2] }, +{ source: [0xD740], NFC: [0xD740], NFD: [0x1112, 0x1172, 0x11B3], NFKC: [0xD740], NFKD: [0x1112, 0x1172, 0x11B3] }, +{ source: [0xD741], NFC: [0xD741], NFD: [0x1112, 0x1172, 0x11B4], NFKC: [0xD741], NFKD: [0x1112, 0x1172, 0x11B4] }, +{ source: [0xD742], NFC: [0xD742], NFD: [0x1112, 0x1172, 0x11B5], NFKC: [0xD742], NFKD: [0x1112, 0x1172, 0x11B5] }, +{ source: [0xD743], NFC: [0xD743], NFD: [0x1112, 0x1172, 0x11B6], NFKC: [0xD743], NFKD: [0x1112, 0x1172, 0x11B6] }, +{ source: [0xD744], NFC: [0xD744], NFD: [0x1112, 0x1172, 0x11B7], NFKC: [0xD744], NFKD: [0x1112, 0x1172, 0x11B7] }, +{ source: [0xD745], NFC: [0xD745], NFD: [0x1112, 0x1172, 0x11B8], NFKC: [0xD745], NFKD: [0x1112, 0x1172, 0x11B8] }, +{ source: [0xD746], NFC: [0xD746], NFD: [0x1112, 0x1172, 0x11B9], NFKC: [0xD746], NFKD: [0x1112, 0x1172, 0x11B9] }, +{ source: [0xD747], NFC: [0xD747], NFD: [0x1112, 0x1172, 0x11BA], NFKC: [0xD747], NFKD: [0x1112, 0x1172, 0x11BA] }, +{ source: [0xD748], NFC: [0xD748], NFD: [0x1112, 0x1172, 0x11BB], NFKC: [0xD748], NFKD: [0x1112, 0x1172, 0x11BB] }, +{ source: [0xD749], NFC: [0xD749], NFD: [0x1112, 0x1172, 0x11BC], NFKC: [0xD749], NFKD: [0x1112, 0x1172, 0x11BC] }, +{ source: [0xD74A], NFC: [0xD74A], NFD: [0x1112, 0x1172, 0x11BD], NFKC: [0xD74A], NFKD: [0x1112, 0x1172, 0x11BD] }, +{ source: [0xD74B], NFC: [0xD74B], NFD: [0x1112, 0x1172, 0x11BE], NFKC: [0xD74B], NFKD: [0x1112, 0x1172, 0x11BE] }, +{ source: [0xD74C], NFC: [0xD74C], NFD: [0x1112, 0x1172, 0x11BF], NFKC: [0xD74C], NFKD: [0x1112, 0x1172, 0x11BF] }, +{ source: [0xD74D], NFC: [0xD74D], NFD: [0x1112, 0x1172, 0x11C0], NFKC: [0xD74D], NFKD: [0x1112, 0x1172, 0x11C0] }, +{ source: [0xD74E], NFC: [0xD74E], NFD: [0x1112, 0x1172, 0x11C1], NFKC: [0xD74E], NFKD: [0x1112, 0x1172, 0x11C1] }, +{ source: [0xD74F], NFC: [0xD74F], NFD: [0x1112, 0x1172, 0x11C2], NFKC: [0xD74F], NFKD: [0x1112, 0x1172, 0x11C2] }, +{ source: [0xD750], NFC: [0xD750], NFD: [0x1112, 0x1173], NFKC: [0xD750], NFKD: [0x1112, 0x1173] }, +{ source: [0xD751], NFC: [0xD751], NFD: [0x1112, 0x1173, 0x11A8], NFKC: [0xD751], NFKD: [0x1112, 0x1173, 0x11A8] }, +{ source: [0xD752], NFC: [0xD752], NFD: [0x1112, 0x1173, 0x11A9], NFKC: [0xD752], NFKD: [0x1112, 0x1173, 0x11A9] }, +{ source: [0xD753], NFC: [0xD753], NFD: [0x1112, 0x1173, 0x11AA], NFKC: [0xD753], NFKD: [0x1112, 0x1173, 0x11AA] }, +{ source: [0xD754], NFC: [0xD754], NFD: [0x1112, 0x1173, 0x11AB], NFKC: [0xD754], NFKD: [0x1112, 0x1173, 0x11AB] }, +{ source: [0xD755], NFC: [0xD755], NFD: [0x1112, 0x1173, 0x11AC], NFKC: [0xD755], NFKD: [0x1112, 0x1173, 0x11AC] }, +{ source: [0xD756], NFC: [0xD756], NFD: [0x1112, 0x1173, 0x11AD], NFKC: [0xD756], NFKD: [0x1112, 0x1173, 0x11AD] }, +{ source: [0xD757], NFC: [0xD757], NFD: [0x1112, 0x1173, 0x11AE], NFKC: [0xD757], NFKD: [0x1112, 0x1173, 0x11AE] }, +{ source: [0xD758], NFC: [0xD758], NFD: [0x1112, 0x1173, 0x11AF], NFKC: [0xD758], NFKD: [0x1112, 0x1173, 0x11AF] }, +{ source: [0xD759], NFC: [0xD759], NFD: [0x1112, 0x1173, 0x11B0], NFKC: [0xD759], NFKD: [0x1112, 0x1173, 0x11B0] }, +{ source: [0xD75A], NFC: [0xD75A], NFD: [0x1112, 0x1173, 0x11B1], NFKC: [0xD75A], NFKD: [0x1112, 0x1173, 0x11B1] }, +{ source: [0xD75B], NFC: [0xD75B], NFD: [0x1112, 0x1173, 0x11B2], NFKC: [0xD75B], NFKD: [0x1112, 0x1173, 0x11B2] }, +{ source: [0xD75C], NFC: [0xD75C], NFD: [0x1112, 0x1173, 0x11B3], NFKC: [0xD75C], NFKD: [0x1112, 0x1173, 0x11B3] }, +{ source: [0xD75D], NFC: [0xD75D], NFD: [0x1112, 0x1173, 0x11B4], NFKC: [0xD75D], NFKD: [0x1112, 0x1173, 0x11B4] }, +{ source: [0xD75E], NFC: [0xD75E], NFD: [0x1112, 0x1173, 0x11B5], NFKC: [0xD75E], NFKD: [0x1112, 0x1173, 0x11B5] }, +{ source: [0xD75F], NFC: [0xD75F], NFD: [0x1112, 0x1173, 0x11B6], NFKC: [0xD75F], NFKD: [0x1112, 0x1173, 0x11B6] }, +{ source: [0xD760], NFC: [0xD760], NFD: [0x1112, 0x1173, 0x11B7], NFKC: [0xD760], NFKD: [0x1112, 0x1173, 0x11B7] }, +{ source: [0xD761], NFC: [0xD761], NFD: [0x1112, 0x1173, 0x11B8], NFKC: [0xD761], NFKD: [0x1112, 0x1173, 0x11B8] }, +{ source: [0xD762], NFC: [0xD762], NFD: [0x1112, 0x1173, 0x11B9], NFKC: [0xD762], NFKD: [0x1112, 0x1173, 0x11B9] }, +{ source: [0xD763], NFC: [0xD763], NFD: [0x1112, 0x1173, 0x11BA], NFKC: [0xD763], NFKD: [0x1112, 0x1173, 0x11BA] }, +{ source: [0xD764], NFC: [0xD764], NFD: [0x1112, 0x1173, 0x11BB], NFKC: [0xD764], NFKD: [0x1112, 0x1173, 0x11BB] }, +{ source: [0xD765], NFC: [0xD765], NFD: [0x1112, 0x1173, 0x11BC], NFKC: [0xD765], NFKD: [0x1112, 0x1173, 0x11BC] }, +{ source: [0xD766], NFC: [0xD766], NFD: [0x1112, 0x1173, 0x11BD], NFKC: [0xD766], NFKD: [0x1112, 0x1173, 0x11BD] }, +{ source: [0xD767], NFC: [0xD767], NFD: [0x1112, 0x1173, 0x11BE], NFKC: [0xD767], NFKD: [0x1112, 0x1173, 0x11BE] }, +{ source: [0xD768], NFC: [0xD768], NFD: [0x1112, 0x1173, 0x11BF], NFKC: [0xD768], NFKD: [0x1112, 0x1173, 0x11BF] }, +{ source: [0xD769], NFC: [0xD769], NFD: [0x1112, 0x1173, 0x11C0], NFKC: [0xD769], NFKD: [0x1112, 0x1173, 0x11C0] }, +{ source: [0xD76A], NFC: [0xD76A], NFD: [0x1112, 0x1173, 0x11C1], NFKC: [0xD76A], NFKD: [0x1112, 0x1173, 0x11C1] }, +{ source: [0xD76B], NFC: [0xD76B], NFD: [0x1112, 0x1173, 0x11C2], NFKC: [0xD76B], NFKD: [0x1112, 0x1173, 0x11C2] }, +{ source: [0xD76C], NFC: [0xD76C], NFD: [0x1112, 0x1174], NFKC: [0xD76C], NFKD: [0x1112, 0x1174] }, +{ source: [0xD76D], NFC: [0xD76D], NFD: [0x1112, 0x1174, 0x11A8], NFKC: [0xD76D], NFKD: [0x1112, 0x1174, 0x11A8] }, +{ source: [0xD76E], NFC: [0xD76E], NFD: [0x1112, 0x1174, 0x11A9], NFKC: [0xD76E], NFKD: [0x1112, 0x1174, 0x11A9] }, +{ source: [0xD76F], NFC: [0xD76F], NFD: [0x1112, 0x1174, 0x11AA], NFKC: [0xD76F], NFKD: [0x1112, 0x1174, 0x11AA] }, +{ source: [0xD770], NFC: [0xD770], NFD: [0x1112, 0x1174, 0x11AB], NFKC: [0xD770], NFKD: [0x1112, 0x1174, 0x11AB] }, +{ source: [0xD771], NFC: [0xD771], NFD: [0x1112, 0x1174, 0x11AC], NFKC: [0xD771], NFKD: [0x1112, 0x1174, 0x11AC] }, +{ source: [0xD772], NFC: [0xD772], NFD: [0x1112, 0x1174, 0x11AD], NFKC: [0xD772], NFKD: [0x1112, 0x1174, 0x11AD] }, +{ source: [0xD773], NFC: [0xD773], NFD: [0x1112, 0x1174, 0x11AE], NFKC: [0xD773], NFKD: [0x1112, 0x1174, 0x11AE] }, +{ source: [0xD774], NFC: [0xD774], NFD: [0x1112, 0x1174, 0x11AF], NFKC: [0xD774], NFKD: [0x1112, 0x1174, 0x11AF] }, +{ source: [0xD775], NFC: [0xD775], NFD: [0x1112, 0x1174, 0x11B0], NFKC: [0xD775], NFKD: [0x1112, 0x1174, 0x11B0] }, +{ source: [0xD776], NFC: [0xD776], NFD: [0x1112, 0x1174, 0x11B1], NFKC: [0xD776], NFKD: [0x1112, 0x1174, 0x11B1] }, +{ source: [0xD777], NFC: [0xD777], NFD: [0x1112, 0x1174, 0x11B2], NFKC: [0xD777], NFKD: [0x1112, 0x1174, 0x11B2] }, +{ source: [0xD778], NFC: [0xD778], NFD: [0x1112, 0x1174, 0x11B3], NFKC: [0xD778], NFKD: [0x1112, 0x1174, 0x11B3] }, +{ source: [0xD779], NFC: [0xD779], NFD: [0x1112, 0x1174, 0x11B4], NFKC: [0xD779], NFKD: [0x1112, 0x1174, 0x11B4] }, +{ source: [0xD77A], NFC: [0xD77A], NFD: [0x1112, 0x1174, 0x11B5], NFKC: [0xD77A], NFKD: [0x1112, 0x1174, 0x11B5] }, +{ source: [0xD77B], NFC: [0xD77B], NFD: [0x1112, 0x1174, 0x11B6], NFKC: [0xD77B], NFKD: [0x1112, 0x1174, 0x11B6] }, +{ source: [0xD77C], NFC: [0xD77C], NFD: [0x1112, 0x1174, 0x11B7], NFKC: [0xD77C], NFKD: [0x1112, 0x1174, 0x11B7] }, +{ source: [0xD77D], NFC: [0xD77D], NFD: [0x1112, 0x1174, 0x11B8], NFKC: [0xD77D], NFKD: [0x1112, 0x1174, 0x11B8] }, +{ source: [0xD77E], NFC: [0xD77E], NFD: [0x1112, 0x1174, 0x11B9], NFKC: [0xD77E], NFKD: [0x1112, 0x1174, 0x11B9] }, +{ source: [0xD77F], NFC: [0xD77F], NFD: [0x1112, 0x1174, 0x11BA], NFKC: [0xD77F], NFKD: [0x1112, 0x1174, 0x11BA] }, +{ source: [0xD780], NFC: [0xD780], NFD: [0x1112, 0x1174, 0x11BB], NFKC: [0xD780], NFKD: [0x1112, 0x1174, 0x11BB] }, +{ source: [0xD781], NFC: [0xD781], NFD: [0x1112, 0x1174, 0x11BC], NFKC: [0xD781], NFKD: [0x1112, 0x1174, 0x11BC] }, +{ source: [0xD782], NFC: [0xD782], NFD: [0x1112, 0x1174, 0x11BD], NFKC: [0xD782], NFKD: [0x1112, 0x1174, 0x11BD] }, +{ source: [0xD783], NFC: [0xD783], NFD: [0x1112, 0x1174, 0x11BE], NFKC: [0xD783], NFKD: [0x1112, 0x1174, 0x11BE] }, +{ source: [0xD784], NFC: [0xD784], NFD: [0x1112, 0x1174, 0x11BF], NFKC: [0xD784], NFKD: [0x1112, 0x1174, 0x11BF] }, +{ source: [0xD785], NFC: [0xD785], NFD: [0x1112, 0x1174, 0x11C0], NFKC: [0xD785], NFKD: [0x1112, 0x1174, 0x11C0] }, +{ source: [0xD786], NFC: [0xD786], NFD: [0x1112, 0x1174, 0x11C1], NFKC: [0xD786], NFKD: [0x1112, 0x1174, 0x11C1] }, +{ source: [0xD787], NFC: [0xD787], NFD: [0x1112, 0x1174, 0x11C2], NFKC: [0xD787], NFKD: [0x1112, 0x1174, 0x11C2] }, +{ source: [0xD788], NFC: [0xD788], NFD: [0x1112, 0x1175], NFKC: [0xD788], NFKD: [0x1112, 0x1175] }, +{ source: [0xD789], NFC: [0xD789], NFD: [0x1112, 0x1175, 0x11A8], NFKC: [0xD789], NFKD: [0x1112, 0x1175, 0x11A8] }, +{ source: [0xD78A], NFC: [0xD78A], NFD: [0x1112, 0x1175, 0x11A9], NFKC: [0xD78A], NFKD: [0x1112, 0x1175, 0x11A9] }, +{ source: [0xD78B], NFC: [0xD78B], NFD: [0x1112, 0x1175, 0x11AA], NFKC: [0xD78B], NFKD: [0x1112, 0x1175, 0x11AA] }, +{ source: [0xD78C], NFC: [0xD78C], NFD: [0x1112, 0x1175, 0x11AB], NFKC: [0xD78C], NFKD: [0x1112, 0x1175, 0x11AB] }, +{ source: [0xD78D], NFC: [0xD78D], NFD: [0x1112, 0x1175, 0x11AC], NFKC: [0xD78D], NFKD: [0x1112, 0x1175, 0x11AC] }, +{ source: [0xD78E], NFC: [0xD78E], NFD: [0x1112, 0x1175, 0x11AD], NFKC: [0xD78E], NFKD: [0x1112, 0x1175, 0x11AD] }, +{ source: [0xD78F], NFC: [0xD78F], NFD: [0x1112, 0x1175, 0x11AE], NFKC: [0xD78F], NFKD: [0x1112, 0x1175, 0x11AE] }, +{ source: [0xD790], NFC: [0xD790], NFD: [0x1112, 0x1175, 0x11AF], NFKC: [0xD790], NFKD: [0x1112, 0x1175, 0x11AF] }, +{ source: [0xD791], NFC: [0xD791], NFD: [0x1112, 0x1175, 0x11B0], NFKC: [0xD791], NFKD: [0x1112, 0x1175, 0x11B0] }, +{ source: [0xD792], NFC: [0xD792], NFD: [0x1112, 0x1175, 0x11B1], NFKC: [0xD792], NFKD: [0x1112, 0x1175, 0x11B1] }, +{ source: [0xD793], NFC: [0xD793], NFD: [0x1112, 0x1175, 0x11B2], NFKC: [0xD793], NFKD: [0x1112, 0x1175, 0x11B2] }, +{ source: [0xD794], NFC: [0xD794], NFD: [0x1112, 0x1175, 0x11B3], NFKC: [0xD794], NFKD: [0x1112, 0x1175, 0x11B3] }, +{ source: [0xD795], NFC: [0xD795], NFD: [0x1112, 0x1175, 0x11B4], NFKC: [0xD795], NFKD: [0x1112, 0x1175, 0x11B4] }, +{ source: [0xD796], NFC: [0xD796], NFD: [0x1112, 0x1175, 0x11B5], NFKC: [0xD796], NFKD: [0x1112, 0x1175, 0x11B5] }, +{ source: [0xD797], NFC: [0xD797], NFD: [0x1112, 0x1175, 0x11B6], NFKC: [0xD797], NFKD: [0x1112, 0x1175, 0x11B6] }, +{ source: [0xD798], NFC: [0xD798], NFD: [0x1112, 0x1175, 0x11B7], NFKC: [0xD798], NFKD: [0x1112, 0x1175, 0x11B7] }, +{ source: [0xD799], NFC: [0xD799], NFD: [0x1112, 0x1175, 0x11B8], NFKC: [0xD799], NFKD: [0x1112, 0x1175, 0x11B8] }, +{ source: [0xD79A], NFC: [0xD79A], NFD: [0x1112, 0x1175, 0x11B9], NFKC: [0xD79A], NFKD: [0x1112, 0x1175, 0x11B9] }, +{ source: [0xD79B], NFC: [0xD79B], NFD: [0x1112, 0x1175, 0x11BA], NFKC: [0xD79B], NFKD: [0x1112, 0x1175, 0x11BA] }, +{ source: [0xD79C], NFC: [0xD79C], NFD: [0x1112, 0x1175, 0x11BB], NFKC: [0xD79C], NFKD: [0x1112, 0x1175, 0x11BB] }, +{ source: [0xD79D], NFC: [0xD79D], NFD: [0x1112, 0x1175, 0x11BC], NFKC: [0xD79D], NFKD: [0x1112, 0x1175, 0x11BC] }, +{ source: [0xD79E], NFC: [0xD79E], NFD: [0x1112, 0x1175, 0x11BD], NFKC: [0xD79E], NFKD: [0x1112, 0x1175, 0x11BD] }, +{ source: [0xD79F], NFC: [0xD79F], NFD: [0x1112, 0x1175, 0x11BE], NFKC: [0xD79F], NFKD: [0x1112, 0x1175, 0x11BE] }, +{ source: [0xD7A0], NFC: [0xD7A0], NFD: [0x1112, 0x1175, 0x11BF], NFKC: [0xD7A0], NFKD: [0x1112, 0x1175, 0x11BF] }, +{ source: [0xD7A1], NFC: [0xD7A1], NFD: [0x1112, 0x1175, 0x11C0], NFKC: [0xD7A1], NFKD: [0x1112, 0x1175, 0x11C0] }, +{ source: [0xD7A2], NFC: [0xD7A2], NFD: [0x1112, 0x1175, 0x11C1], NFKC: [0xD7A2], NFKD: [0x1112, 0x1175, 0x11C1] }, +{ source: [0xD7A3], NFC: [0xD7A3], NFD: [0x1112, 0x1175, 0x11C2], NFKC: [0xD7A3], NFKD: [0x1112, 0x1175, 0x11C2] }, +{ source: [0xF900], NFC: [0x8C48], NFD: [0x8C48], NFKC: [0x8C48], NFKD: [0x8C48] }, +{ source: [0xF901], NFC: [0x66F4], NFD: [0x66F4], NFKC: [0x66F4], NFKD: [0x66F4] }, +{ source: [0xF902], NFC: [0x8ECA], NFD: [0x8ECA], NFKC: [0x8ECA], NFKD: [0x8ECA] }, +{ source: [0xF903], NFC: [0x8CC8], NFD: [0x8CC8], NFKC: [0x8CC8], NFKD: [0x8CC8] }, +{ source: [0xF904], NFC: [0x6ED1], NFD: [0x6ED1], NFKC: [0x6ED1], NFKD: [0x6ED1] }, +{ source: [0xF905], NFC: [0x4E32], NFD: [0x4E32], NFKC: [0x4E32], NFKD: [0x4E32] }, +{ source: [0xF906], NFC: [0x53E5], NFD: [0x53E5], NFKC: [0x53E5], NFKD: [0x53E5] }, +{ source: [0xF907], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0xF908], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0xF909], NFC: [0x5951], NFD: [0x5951], NFKC: [0x5951], NFKD: [0x5951] }, +{ source: [0xF90A], NFC: [0x91D1], NFD: [0x91D1], NFKC: [0x91D1], NFKD: [0x91D1] }, +{ source: [0xF90B], NFC: [0x5587], NFD: [0x5587], NFKC: [0x5587], NFKD: [0x5587] }, +{ source: [0xF90C], NFC: [0x5948], NFD: [0x5948], NFKC: [0x5948], NFKD: [0x5948] }, +{ source: [0xF90D], NFC: [0x61F6], NFD: [0x61F6], NFKC: [0x61F6], NFKD: [0x61F6] }, +{ source: [0xF90E], NFC: [0x7669], NFD: [0x7669], NFKC: [0x7669], NFKD: [0x7669] }, +{ source: [0xF90F], NFC: [0x7F85], NFD: [0x7F85], NFKC: [0x7F85], NFKD: [0x7F85] }, +{ source: [0xF910], NFC: [0x863F], NFD: [0x863F], NFKC: [0x863F], NFKD: [0x863F] }, +{ source: [0xF911], NFC: [0x87BA], NFD: [0x87BA], NFKC: [0x87BA], NFKD: [0x87BA] }, +{ source: [0xF912], NFC: [0x88F8], NFD: [0x88F8], NFKC: [0x88F8], NFKD: [0x88F8] }, +{ source: [0xF913], NFC: [0x908F], NFD: [0x908F], NFKC: [0x908F], NFKD: [0x908F] }, +{ source: [0xF914], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] }, +{ source: [0xF915], NFC: [0x6D1B], NFD: [0x6D1B], NFKC: [0x6D1B], NFKD: [0x6D1B] }, +{ source: [0xF916], NFC: [0x70D9], NFD: [0x70D9], NFKC: [0x70D9], NFKD: [0x70D9] }, +{ source: [0xF917], NFC: [0x73DE], NFD: [0x73DE], NFKC: [0x73DE], NFKD: [0x73DE] }, +{ source: [0xF918], NFC: [0x843D], NFD: [0x843D], NFKC: [0x843D], NFKD: [0x843D] }, +{ source: [0xF919], NFC: [0x916A], NFD: [0x916A], NFKC: [0x916A], NFKD: [0x916A] }, +{ source: [0xF91A], NFC: [0x99F1], NFD: [0x99F1], NFKC: [0x99F1], NFKD: [0x99F1] }, +{ source: [0xF91B], NFC: [0x4E82], NFD: [0x4E82], NFKC: [0x4E82], NFKD: [0x4E82] }, +{ source: [0xF91C], NFC: [0x5375], NFD: [0x5375], NFKC: [0x5375], NFKD: [0x5375] }, +{ source: [0xF91D], NFC: [0x6B04], NFD: [0x6B04], NFKC: [0x6B04], NFKD: [0x6B04] }, +{ source: [0xF91E], NFC: [0x721B], NFD: [0x721B], NFKC: [0x721B], NFKD: [0x721B] }, +{ source: [0xF91F], NFC: [0x862D], NFD: [0x862D], NFKC: [0x862D], NFKD: [0x862D] }, +{ source: [0xF920], NFC: [0x9E1E], NFD: [0x9E1E], NFKC: [0x9E1E], NFKD: [0x9E1E] }, +{ source: [0xF921], NFC: [0x5D50], NFD: [0x5D50], NFKC: [0x5D50], NFKD: [0x5D50] }, +{ source: [0xF922], NFC: [0x6FEB], NFD: [0x6FEB], NFKC: [0x6FEB], NFKD: [0x6FEB] }, +{ source: [0xF923], NFC: [0x85CD], NFD: [0x85CD], NFKC: [0x85CD], NFKD: [0x85CD] }, +{ source: [0xF924], NFC: [0x8964], NFD: [0x8964], NFKC: [0x8964], NFKD: [0x8964] }, +{ source: [0xF925], NFC: [0x62C9], NFD: [0x62C9], NFKC: [0x62C9], NFKD: [0x62C9] }, +{ source: [0xF926], NFC: [0x81D8], NFD: [0x81D8], NFKC: [0x81D8], NFKD: [0x81D8] }, +{ source: [0xF927], NFC: [0x881F], NFD: [0x881F], NFKC: [0x881F], NFKD: [0x881F] }, +{ source: [0xF928], NFC: [0x5ECA], NFD: [0x5ECA], NFKC: [0x5ECA], NFKD: [0x5ECA] }, +{ source: [0xF929], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] }, +{ source: [0xF92A], NFC: [0x6D6A], NFD: [0x6D6A], NFKC: [0x6D6A], NFKD: [0x6D6A] }, +{ source: [0xF92B], NFC: [0x72FC], NFD: [0x72FC], NFKC: [0x72FC], NFKD: [0x72FC] }, +{ source: [0xF92C], NFC: [0x90CE], NFD: [0x90CE], NFKC: [0x90CE], NFKD: [0x90CE] }, +{ source: [0xF92D], NFC: [0x4F86], NFD: [0x4F86], NFKC: [0x4F86], NFKD: [0x4F86] }, +{ source: [0xF92E], NFC: [0x51B7], NFD: [0x51B7], NFKC: [0x51B7], NFKD: [0x51B7] }, +{ source: [0xF92F], NFC: [0x52DE], NFD: [0x52DE], NFKC: [0x52DE], NFKD: [0x52DE] }, +{ source: [0xF930], NFC: [0x64C4], NFD: [0x64C4], NFKC: [0x64C4], NFKD: [0x64C4] }, +{ source: [0xF931], NFC: [0x6AD3], NFD: [0x6AD3], NFKC: [0x6AD3], NFKD: [0x6AD3] }, +{ source: [0xF932], NFC: [0x7210], NFD: [0x7210], NFKC: [0x7210], NFKD: [0x7210] }, +{ source: [0xF933], NFC: [0x76E7], NFD: [0x76E7], NFKC: [0x76E7], NFKD: [0x76E7] }, +{ source: [0xF934], NFC: [0x8001], NFD: [0x8001], NFKC: [0x8001], NFKD: [0x8001] }, +{ source: [0xF935], NFC: [0x8606], NFD: [0x8606], NFKC: [0x8606], NFKD: [0x8606] }, +{ source: [0xF936], NFC: [0x865C], NFD: [0x865C], NFKC: [0x865C], NFKD: [0x865C] }, +{ source: [0xF937], NFC: [0x8DEF], NFD: [0x8DEF], NFKC: [0x8DEF], NFKD: [0x8DEF] }, +{ source: [0xF938], NFC: [0x9732], NFD: [0x9732], NFKC: [0x9732], NFKD: [0x9732] }, +{ source: [0xF939], NFC: [0x9B6F], NFD: [0x9B6F], NFKC: [0x9B6F], NFKD: [0x9B6F] }, +{ source: [0xF93A], NFC: [0x9DFA], NFD: [0x9DFA], NFKC: [0x9DFA], NFKD: [0x9DFA] }, +{ source: [0xF93B], NFC: [0x788C], NFD: [0x788C], NFKC: [0x788C], NFKD: [0x788C] }, +{ source: [0xF93C], NFC: [0x797F], NFD: [0x797F], NFKC: [0x797F], NFKD: [0x797F] }, +{ source: [0xF93D], NFC: [0x7DA0], NFD: [0x7DA0], NFKC: [0x7DA0], NFKD: [0x7DA0] }, +{ source: [0xF93E], NFC: [0x83C9], NFD: [0x83C9], NFKC: [0x83C9], NFKD: [0x83C9] }, +{ source: [0xF93F], NFC: [0x9304], NFD: [0x9304], NFKC: [0x9304], NFKD: [0x9304] }, +{ source: [0xF940], NFC: [0x9E7F], NFD: [0x9E7F], NFKC: [0x9E7F], NFKD: [0x9E7F] }, +{ source: [0xF941], NFC: [0x8AD6], NFD: [0x8AD6], NFKC: [0x8AD6], NFKD: [0x8AD6] }, +{ source: [0xF942], NFC: [0x58DF], NFD: [0x58DF], NFKC: [0x58DF], NFKD: [0x58DF] }, +{ source: [0xF943], NFC: [0x5F04], NFD: [0x5F04], NFKC: [0x5F04], NFKD: [0x5F04] }, +{ source: [0xF944], NFC: [0x7C60], NFD: [0x7C60], NFKC: [0x7C60], NFKD: [0x7C60] }, +{ source: [0xF945], NFC: [0x807E], NFD: [0x807E], NFKC: [0x807E], NFKD: [0x807E] }, +{ source: [0xF946], NFC: [0x7262], NFD: [0x7262], NFKC: [0x7262], NFKD: [0x7262] }, +{ source: [0xF947], NFC: [0x78CA], NFD: [0x78CA], NFKC: [0x78CA], NFKD: [0x78CA] }, +{ source: [0xF948], NFC: [0x8CC2], NFD: [0x8CC2], NFKC: [0x8CC2], NFKD: [0x8CC2] }, +{ source: [0xF949], NFC: [0x96F7], NFD: [0x96F7], NFKC: [0x96F7], NFKD: [0x96F7] }, +{ source: [0xF94A], NFC: [0x58D8], NFD: [0x58D8], NFKC: [0x58D8], NFKD: [0x58D8] }, +{ source: [0xF94B], NFC: [0x5C62], NFD: [0x5C62], NFKC: [0x5C62], NFKD: [0x5C62] }, +{ source: [0xF94C], NFC: [0x6A13], NFD: [0x6A13], NFKC: [0x6A13], NFKD: [0x6A13] }, +{ source: [0xF94D], NFC: [0x6DDA], NFD: [0x6DDA], NFKC: [0x6DDA], NFKD: [0x6DDA] }, +{ source: [0xF94E], NFC: [0x6F0F], NFD: [0x6F0F], NFKC: [0x6F0F], NFKD: [0x6F0F] }, +{ source: [0xF94F], NFC: [0x7D2F], NFD: [0x7D2F], NFKC: [0x7D2F], NFKD: [0x7D2F] }, +{ source: [0xF950], NFC: [0x7E37], NFD: [0x7E37], NFKC: [0x7E37], NFKD: [0x7E37] }, +{ source: [0xF951], NFC: [0x964B], NFD: [0x964B], NFKC: [0x964B], NFKD: [0x964B] }, +{ source: [0xF952], NFC: [0x52D2], NFD: [0x52D2], NFKC: [0x52D2], NFKD: [0x52D2] }, +{ source: [0xF953], NFC: [0x808B], NFD: [0x808B], NFKC: [0x808B], NFKD: [0x808B] }, +{ source: [0xF954], NFC: [0x51DC], NFD: [0x51DC], NFKC: [0x51DC], NFKD: [0x51DC] }, +{ source: [0xF955], NFC: [0x51CC], NFD: [0x51CC], NFKC: [0x51CC], NFKD: [0x51CC] }, +{ source: [0xF956], NFC: [0x7A1C], NFD: [0x7A1C], NFKC: [0x7A1C], NFKD: [0x7A1C] }, +{ source: [0xF957], NFC: [0x7DBE], NFD: [0x7DBE], NFKC: [0x7DBE], NFKD: [0x7DBE] }, +{ source: [0xF958], NFC: [0x83F1], NFD: [0x83F1], NFKC: [0x83F1], NFKD: [0x83F1] }, +{ source: [0xF959], NFC: [0x9675], NFD: [0x9675], NFKC: [0x9675], NFKD: [0x9675] }, +{ source: [0xF95A], NFC: [0x8B80], NFD: [0x8B80], NFKC: [0x8B80], NFKD: [0x8B80] }, +{ source: [0xF95B], NFC: [0x62CF], NFD: [0x62CF], NFKC: [0x62CF], NFKD: [0x62CF] }, +{ source: [0xF95C], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] }, +{ source: [0xF95D], NFC: [0x8AFE], NFD: [0x8AFE], NFKC: [0x8AFE], NFKD: [0x8AFE] }, +{ source: [0xF95E], NFC: [0x4E39], NFD: [0x4E39], NFKC: [0x4E39], NFKD: [0x4E39] }, +{ source: [0xF95F], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] }, +{ source: [0xF960], NFC: [0x6012], NFD: [0x6012], NFKC: [0x6012], NFKD: [0x6012] }, +{ source: [0xF961], NFC: [0x7387], NFD: [0x7387], NFKC: [0x7387], NFKD: [0x7387] }, +{ source: [0xF962], NFC: [0x7570], NFD: [0x7570], NFKC: [0x7570], NFKD: [0x7570] }, +{ source: [0xF963], NFC: [0x5317], NFD: [0x5317], NFKC: [0x5317], NFKD: [0x5317] }, +{ source: [0xF964], NFC: [0x78FB], NFD: [0x78FB], NFKC: [0x78FB], NFKD: [0x78FB] }, +{ source: [0xF965], NFC: [0x4FBF], NFD: [0x4FBF], NFKC: [0x4FBF], NFKD: [0x4FBF] }, +{ source: [0xF966], NFC: [0x5FA9], NFD: [0x5FA9], NFKC: [0x5FA9], NFKD: [0x5FA9] }, +{ source: [0xF967], NFC: [0x4E0D], NFD: [0x4E0D], NFKC: [0x4E0D], NFKD: [0x4E0D] }, +{ source: [0xF968], NFC: [0x6CCC], NFD: [0x6CCC], NFKC: [0x6CCC], NFKD: [0x6CCC] }, +{ source: [0xF969], NFC: [0x6578], NFD: [0x6578], NFKC: [0x6578], NFKD: [0x6578] }, +{ source: [0xF96A], NFC: [0x7D22], NFD: [0x7D22], NFKC: [0x7D22], NFKD: [0x7D22] }, +{ source: [0xF96B], NFC: [0x53C3], NFD: [0x53C3], NFKC: [0x53C3], NFKD: [0x53C3] }, +{ source: [0xF96C], NFC: [0x585E], NFD: [0x585E], NFKC: [0x585E], NFKD: [0x585E] }, +{ source: [0xF96D], NFC: [0x7701], NFD: [0x7701], NFKC: [0x7701], NFKD: [0x7701] }, +{ source: [0xF96E], NFC: [0x8449], NFD: [0x8449], NFKC: [0x8449], NFKD: [0x8449] }, +{ source: [0xF96F], NFC: [0x8AAA], NFD: [0x8AAA], NFKC: [0x8AAA], NFKD: [0x8AAA] }, +{ source: [0xF970], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] }, +{ source: [0xF971], NFC: [0x8FB0], NFD: [0x8FB0], NFKC: [0x8FB0], NFKD: [0x8FB0] }, +{ source: [0xF972], NFC: [0x6C88], NFD: [0x6C88], NFKC: [0x6C88], NFKD: [0x6C88] }, +{ source: [0xF973], NFC: [0x62FE], NFD: [0x62FE], NFKC: [0x62FE], NFKD: [0x62FE] }, +{ source: [0xF974], NFC: [0x82E5], NFD: [0x82E5], NFKC: [0x82E5], NFKD: [0x82E5] }, +{ source: [0xF975], NFC: [0x63A0], NFD: [0x63A0], NFKC: [0x63A0], NFKD: [0x63A0] }, +{ source: [0xF976], NFC: [0x7565], NFD: [0x7565], NFKC: [0x7565], NFKD: [0x7565] }, +{ source: [0xF977], NFC: [0x4EAE], NFD: [0x4EAE], NFKC: [0x4EAE], NFKD: [0x4EAE] }, +{ source: [0xF978], NFC: [0x5169], NFD: [0x5169], NFKC: [0x5169], NFKD: [0x5169] }, +{ source: [0xF979], NFC: [0x51C9], NFD: [0x51C9], NFKC: [0x51C9], NFKD: [0x51C9] }, +{ source: [0xF97A], NFC: [0x6881], NFD: [0x6881], NFKC: [0x6881], NFKD: [0x6881] }, +{ source: [0xF97B], NFC: [0x7CE7], NFD: [0x7CE7], NFKC: [0x7CE7], NFKD: [0x7CE7] }, +{ source: [0xF97C], NFC: [0x826F], NFD: [0x826F], NFKC: [0x826F], NFKD: [0x826F] }, +{ source: [0xF97D], NFC: [0x8AD2], NFD: [0x8AD2], NFKC: [0x8AD2], NFKD: [0x8AD2] }, +{ source: [0xF97E], NFC: [0x91CF], NFD: [0x91CF], NFKC: [0x91CF], NFKD: [0x91CF] }, +{ source: [0xF97F], NFC: [0x52F5], NFD: [0x52F5], NFKC: [0x52F5], NFKD: [0x52F5] }, +{ source: [0xF980], NFC: [0x5442], NFD: [0x5442], NFKC: [0x5442], NFKD: [0x5442] }, +{ source: [0xF981], NFC: [0x5973], NFD: [0x5973], NFKC: [0x5973], NFKD: [0x5973] }, +{ source: [0xF982], NFC: [0x5EEC], NFD: [0x5EEC], NFKC: [0x5EEC], NFKD: [0x5EEC] }, +{ source: [0xF983], NFC: [0x65C5], NFD: [0x65C5], NFKC: [0x65C5], NFKD: [0x65C5] }, +{ source: [0xF984], NFC: [0x6FFE], NFD: [0x6FFE], NFKC: [0x6FFE], NFKD: [0x6FFE] }, +{ source: [0xF985], NFC: [0x792A], NFD: [0x792A], NFKC: [0x792A], NFKD: [0x792A] }, +{ source: [0xF986], NFC: [0x95AD], NFD: [0x95AD], NFKC: [0x95AD], NFKD: [0x95AD] }, +{ source: [0xF987], NFC: [0x9A6A], NFD: [0x9A6A], NFKC: [0x9A6A], NFKD: [0x9A6A] }, +{ source: [0xF988], NFC: [0x9E97], NFD: [0x9E97], NFKC: [0x9E97], NFKD: [0x9E97] }, +{ source: [0xF989], NFC: [0x9ECE], NFD: [0x9ECE], NFKC: [0x9ECE], NFKD: [0x9ECE] }, +{ source: [0xF98A], NFC: [0x529B], NFD: [0x529B], NFKC: [0x529B], NFKD: [0x529B] }, +{ source: [0xF98B], NFC: [0x66C6], NFD: [0x66C6], NFKC: [0x66C6], NFKD: [0x66C6] }, +{ source: [0xF98C], NFC: [0x6B77], NFD: [0x6B77], NFKC: [0x6B77], NFKD: [0x6B77] }, +{ source: [0xF98D], NFC: [0x8F62], NFD: [0x8F62], NFKC: [0x8F62], NFKD: [0x8F62] }, +{ source: [0xF98E], NFC: [0x5E74], NFD: [0x5E74], NFKC: [0x5E74], NFKD: [0x5E74] }, +{ source: [0xF98F], NFC: [0x6190], NFD: [0x6190], NFKC: [0x6190], NFKD: [0x6190] }, +{ source: [0xF990], NFC: [0x6200], NFD: [0x6200], NFKC: [0x6200], NFKD: [0x6200] }, +{ source: [0xF991], NFC: [0x649A], NFD: [0x649A], NFKC: [0x649A], NFKD: [0x649A] }, +{ source: [0xF992], NFC: [0x6F23], NFD: [0x6F23], NFKC: [0x6F23], NFKD: [0x6F23] }, +{ source: [0xF993], NFC: [0x7149], NFD: [0x7149], NFKC: [0x7149], NFKD: [0x7149] }, +{ source: [0xF994], NFC: [0x7489], NFD: [0x7489], NFKC: [0x7489], NFKD: [0x7489] }, +{ source: [0xF995], NFC: [0x79CA], NFD: [0x79CA], NFKC: [0x79CA], NFKD: [0x79CA] }, +{ source: [0xF996], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] }, +{ source: [0xF997], NFC: [0x806F], NFD: [0x806F], NFKC: [0x806F], NFKD: [0x806F] }, +{ source: [0xF998], NFC: [0x8F26], NFD: [0x8F26], NFKC: [0x8F26], NFKD: [0x8F26] }, +{ source: [0xF999], NFC: [0x84EE], NFD: [0x84EE], NFKC: [0x84EE], NFKD: [0x84EE] }, +{ source: [0xF99A], NFC: [0x9023], NFD: [0x9023], NFKC: [0x9023], NFKD: [0x9023] }, +{ source: [0xF99B], NFC: [0x934A], NFD: [0x934A], NFKC: [0x934A], NFKD: [0x934A] }, +{ source: [0xF99C], NFC: [0x5217], NFD: [0x5217], NFKC: [0x5217], NFKD: [0x5217] }, +{ source: [0xF99D], NFC: [0x52A3], NFD: [0x52A3], NFKC: [0x52A3], NFKD: [0x52A3] }, +{ source: [0xF99E], NFC: [0x54BD], NFD: [0x54BD], NFKC: [0x54BD], NFKD: [0x54BD] }, +{ source: [0xF99F], NFC: [0x70C8], NFD: [0x70C8], NFKC: [0x70C8], NFKD: [0x70C8] }, +{ source: [0xF9A0], NFC: [0x88C2], NFD: [0x88C2], NFKC: [0x88C2], NFKD: [0x88C2] }, +{ source: [0xF9A1], NFC: [0x8AAA], NFD: [0x8AAA], NFKC: [0x8AAA], NFKD: [0x8AAA] }, +{ source: [0xF9A2], NFC: [0x5EC9], NFD: [0x5EC9], NFKC: [0x5EC9], NFKD: [0x5EC9] }, +{ source: [0xF9A3], NFC: [0x5FF5], NFD: [0x5FF5], NFKC: [0x5FF5], NFKD: [0x5FF5] }, +{ source: [0xF9A4], NFC: [0x637B], NFD: [0x637B], NFKC: [0x637B], NFKD: [0x637B] }, +{ source: [0xF9A5], NFC: [0x6BAE], NFD: [0x6BAE], NFKC: [0x6BAE], NFKD: [0x6BAE] }, +{ source: [0xF9A6], NFC: [0x7C3E], NFD: [0x7C3E], NFKC: [0x7C3E], NFKD: [0x7C3E] }, +{ source: [0xF9A7], NFC: [0x7375], NFD: [0x7375], NFKC: [0x7375], NFKD: [0x7375] }, +{ source: [0xF9A8], NFC: [0x4EE4], NFD: [0x4EE4], NFKC: [0x4EE4], NFKD: [0x4EE4] }, +{ source: [0xF9A9], NFC: [0x56F9], NFD: [0x56F9], NFKC: [0x56F9], NFKD: [0x56F9] }, +{ source: [0xF9AA], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] }, +{ source: [0xF9AB], NFC: [0x5DBA], NFD: [0x5DBA], NFKC: [0x5DBA], NFKD: [0x5DBA] }, +{ source: [0xF9AC], NFC: [0x601C], NFD: [0x601C], NFKC: [0x601C], NFKD: [0x601C] }, +{ source: [0xF9AD], NFC: [0x73B2], NFD: [0x73B2], NFKC: [0x73B2], NFKD: [0x73B2] }, +{ source: [0xF9AE], NFC: [0x7469], NFD: [0x7469], NFKC: [0x7469], NFKD: [0x7469] }, +{ source: [0xF9AF], NFC: [0x7F9A], NFD: [0x7F9A], NFKC: [0x7F9A], NFKD: [0x7F9A] }, +{ source: [0xF9B0], NFC: [0x8046], NFD: [0x8046], NFKC: [0x8046], NFKD: [0x8046] }, +{ source: [0xF9B1], NFC: [0x9234], NFD: [0x9234], NFKC: [0x9234], NFKD: [0x9234] }, +{ source: [0xF9B2], NFC: [0x96F6], NFD: [0x96F6], NFKC: [0x96F6], NFKD: [0x96F6] }, +{ source: [0xF9B3], NFC: [0x9748], NFD: [0x9748], NFKC: [0x9748], NFKD: [0x9748] }, +{ source: [0xF9B4], NFC: [0x9818], NFD: [0x9818], NFKC: [0x9818], NFKD: [0x9818] }, +{ source: [0xF9B5], NFC: [0x4F8B], NFD: [0x4F8B], NFKC: [0x4F8B], NFKD: [0x4F8B] }, +{ source: [0xF9B6], NFC: [0x79AE], NFD: [0x79AE], NFKC: [0x79AE], NFKD: [0x79AE] }, +{ source: [0xF9B7], NFC: [0x91B4], NFD: [0x91B4], NFKC: [0x91B4], NFKD: [0x91B4] }, +{ source: [0xF9B8], NFC: [0x96B8], NFD: [0x96B8], NFKC: [0x96B8], NFKD: [0x96B8] }, +{ source: [0xF9B9], NFC: [0x60E1], NFD: [0x60E1], NFKC: [0x60E1], NFKD: [0x60E1] }, +{ source: [0xF9BA], NFC: [0x4E86], NFD: [0x4E86], NFKC: [0x4E86], NFKD: [0x4E86] }, +{ source: [0xF9BB], NFC: [0x50DA], NFD: [0x50DA], NFKC: [0x50DA], NFKD: [0x50DA] }, +{ source: [0xF9BC], NFC: [0x5BEE], NFD: [0x5BEE], NFKC: [0x5BEE], NFKD: [0x5BEE] }, +{ source: [0xF9BD], NFC: [0x5C3F], NFD: [0x5C3F], NFKC: [0x5C3F], NFKD: [0x5C3F] }, +{ source: [0xF9BE], NFC: [0x6599], NFD: [0x6599], NFKC: [0x6599], NFKD: [0x6599] }, +{ source: [0xF9BF], NFC: [0x6A02], NFD: [0x6A02], NFKC: [0x6A02], NFKD: [0x6A02] }, +{ source: [0xF9C0], NFC: [0x71CE], NFD: [0x71CE], NFKC: [0x71CE], NFKD: [0x71CE] }, +{ source: [0xF9C1], NFC: [0x7642], NFD: [0x7642], NFKC: [0x7642], NFKD: [0x7642] }, +{ source: [0xF9C2], NFC: [0x84FC], NFD: [0x84FC], NFKC: [0x84FC], NFKD: [0x84FC] }, +{ source: [0xF9C3], NFC: [0x907C], NFD: [0x907C], NFKC: [0x907C], NFKD: [0x907C] }, +{ source: [0xF9C4], NFC: [0x9F8D], NFD: [0x9F8D], NFKC: [0x9F8D], NFKD: [0x9F8D] }, +{ source: [0xF9C5], NFC: [0x6688], NFD: [0x6688], NFKC: [0x6688], NFKD: [0x6688] }, +{ source: [0xF9C6], NFC: [0x962E], NFD: [0x962E], NFKC: [0x962E], NFKD: [0x962E] }, +{ source: [0xF9C7], NFC: [0x5289], NFD: [0x5289], NFKC: [0x5289], NFKD: [0x5289] }, +{ source: [0xF9C8], NFC: [0x677B], NFD: [0x677B], NFKC: [0x677B], NFKD: [0x677B] }, +{ source: [0xF9C9], NFC: [0x67F3], NFD: [0x67F3], NFKC: [0x67F3], NFKD: [0x67F3] }, +{ source: [0xF9CA], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] }, +{ source: [0xF9CB], NFC: [0x6E9C], NFD: [0x6E9C], NFKC: [0x6E9C], NFKD: [0x6E9C] }, +{ source: [0xF9CC], NFC: [0x7409], NFD: [0x7409], NFKC: [0x7409], NFKD: [0x7409] }, +{ source: [0xF9CD], NFC: [0x7559], NFD: [0x7559], NFKC: [0x7559], NFKD: [0x7559] }, +{ source: [0xF9CE], NFC: [0x786B], NFD: [0x786B], NFKC: [0x786B], NFKD: [0x786B] }, +{ source: [0xF9CF], NFC: [0x7D10], NFD: [0x7D10], NFKC: [0x7D10], NFKD: [0x7D10] }, +{ source: [0xF9D0], NFC: [0x985E], NFD: [0x985E], NFKC: [0x985E], NFKD: [0x985E] }, +{ source: [0xF9D1], NFC: [0x516D], NFD: [0x516D], NFKC: [0x516D], NFKD: [0x516D] }, +{ source: [0xF9D2], NFC: [0x622E], NFD: [0x622E], NFKC: [0x622E], NFKD: [0x622E] }, +{ source: [0xF9D3], NFC: [0x9678], NFD: [0x9678], NFKC: [0x9678], NFKD: [0x9678] }, +{ source: [0xF9D4], NFC: [0x502B], NFD: [0x502B], NFKC: [0x502B], NFKD: [0x502B] }, +{ source: [0xF9D5], NFC: [0x5D19], NFD: [0x5D19], NFKC: [0x5D19], NFKD: [0x5D19] }, +{ source: [0xF9D6], NFC: [0x6DEA], NFD: [0x6DEA], NFKC: [0x6DEA], NFKD: [0x6DEA] }, +{ source: [0xF9D7], NFC: [0x8F2A], NFD: [0x8F2A], NFKC: [0x8F2A], NFKD: [0x8F2A] }, +{ source: [0xF9D8], NFC: [0x5F8B], NFD: [0x5F8B], NFKC: [0x5F8B], NFKD: [0x5F8B] }, +{ source: [0xF9D9], NFC: [0x6144], NFD: [0x6144], NFKC: [0x6144], NFKD: [0x6144] }, +{ source: [0xF9DA], NFC: [0x6817], NFD: [0x6817], NFKC: [0x6817], NFKD: [0x6817] }, +{ source: [0xF9DB], NFC: [0x7387], NFD: [0x7387], NFKC: [0x7387], NFKD: [0x7387] }, +{ source: [0xF9DC], NFC: [0x9686], NFD: [0x9686], NFKC: [0x9686], NFKD: [0x9686] }, +{ source: [0xF9DD], NFC: [0x5229], NFD: [0x5229], NFKC: [0x5229], NFKD: [0x5229] }, +{ source: [0xF9DE], NFC: [0x540F], NFD: [0x540F], NFKC: [0x540F], NFKD: [0x540F] }, +{ source: [0xF9DF], NFC: [0x5C65], NFD: [0x5C65], NFKC: [0x5C65], NFKD: [0x5C65] }, +{ source: [0xF9E0], NFC: [0x6613], NFD: [0x6613], NFKC: [0x6613], NFKD: [0x6613] }, +{ source: [0xF9E1], NFC: [0x674E], NFD: [0x674E], NFKC: [0x674E], NFKD: [0x674E] }, +{ source: [0xF9E2], NFC: [0x68A8], NFD: [0x68A8], NFKC: [0x68A8], NFKD: [0x68A8] }, +{ source: [0xF9E3], NFC: [0x6CE5], NFD: [0x6CE5], NFKC: [0x6CE5], NFKD: [0x6CE5] }, +{ source: [0xF9E4], NFC: [0x7406], NFD: [0x7406], NFKC: [0x7406], NFKD: [0x7406] }, +{ source: [0xF9E5], NFC: [0x75E2], NFD: [0x75E2], NFKC: [0x75E2], NFKD: [0x75E2] }, +{ source: [0xF9E6], NFC: [0x7F79], NFD: [0x7F79], NFKC: [0x7F79], NFKD: [0x7F79] }, +{ source: [0xF9E7], NFC: [0x88CF], NFD: [0x88CF], NFKC: [0x88CF], NFKD: [0x88CF] }, +{ source: [0xF9E8], NFC: [0x88E1], NFD: [0x88E1], NFKC: [0x88E1], NFKD: [0x88E1] }, +{ source: [0xF9E9], NFC: [0x91CC], NFD: [0x91CC], NFKC: [0x91CC], NFKD: [0x91CC] }, +{ source: [0xF9EA], NFC: [0x96E2], NFD: [0x96E2], NFKC: [0x96E2], NFKD: [0x96E2] }, +{ source: [0xF9EB], NFC: [0x533F], NFD: [0x533F], NFKC: [0x533F], NFKD: [0x533F] }, +{ source: [0xF9EC], NFC: [0x6EBA], NFD: [0x6EBA], NFKC: [0x6EBA], NFKD: [0x6EBA] }, +{ source: [0xF9ED], NFC: [0x541D], NFD: [0x541D], NFKC: [0x541D], NFKD: [0x541D] }, +{ source: [0xF9EE], NFC: [0x71D0], NFD: [0x71D0], NFKC: [0x71D0], NFKD: [0x71D0] }, +{ source: [0xF9EF], NFC: [0x7498], NFD: [0x7498], NFKC: [0x7498], NFKD: [0x7498] }, +{ source: [0xF9F0], NFC: [0x85FA], NFD: [0x85FA], NFKC: [0x85FA], NFKD: [0x85FA] }, +{ source: [0xF9F1], NFC: [0x96A3], NFD: [0x96A3], NFKC: [0x96A3], NFKD: [0x96A3] }, +{ source: [0xF9F2], NFC: [0x9C57], NFD: [0x9C57], NFKC: [0x9C57], NFKD: [0x9C57] }, +{ source: [0xF9F3], NFC: [0x9E9F], NFD: [0x9E9F], NFKC: [0x9E9F], NFKD: [0x9E9F] }, +{ source: [0xF9F4], NFC: [0x6797], NFD: [0x6797], NFKC: [0x6797], NFKD: [0x6797] }, +{ source: [0xF9F5], NFC: [0x6DCB], NFD: [0x6DCB], NFKC: [0x6DCB], NFKD: [0x6DCB] }, +{ source: [0xF9F6], NFC: [0x81E8], NFD: [0x81E8], NFKC: [0x81E8], NFKD: [0x81E8] }, +{ source: [0xF9F7], NFC: [0x7ACB], NFD: [0x7ACB], NFKC: [0x7ACB], NFKD: [0x7ACB] }, +{ source: [0xF9F8], NFC: [0x7B20], NFD: [0x7B20], NFKC: [0x7B20], NFKD: [0x7B20] }, +{ source: [0xF9F9], NFC: [0x7C92], NFD: [0x7C92], NFKC: [0x7C92], NFKD: [0x7C92] }, +{ source: [0xF9FA], NFC: [0x72C0], NFD: [0x72C0], NFKC: [0x72C0], NFKD: [0x72C0] }, +{ source: [0xF9FB], NFC: [0x7099], NFD: [0x7099], NFKC: [0x7099], NFKD: [0x7099] }, +{ source: [0xF9FC], NFC: [0x8B58], NFD: [0x8B58], NFKC: [0x8B58], NFKD: [0x8B58] }, +{ source: [0xF9FD], NFC: [0x4EC0], NFD: [0x4EC0], NFKC: [0x4EC0], NFKD: [0x4EC0] }, +{ source: [0xF9FE], NFC: [0x8336], NFD: [0x8336], NFKC: [0x8336], NFKD: [0x8336] }, +{ source: [0xF9FF], NFC: [0x523A], NFD: [0x523A], NFKC: [0x523A], NFKD: [0x523A] }, +{ source: [0xFA00], NFC: [0x5207], NFD: [0x5207], NFKC: [0x5207], NFKD: [0x5207] }, +{ source: [0xFA01], NFC: [0x5EA6], NFD: [0x5EA6], NFKC: [0x5EA6], NFKD: [0x5EA6] }, +{ source: [0xFA02], NFC: [0x62D3], NFD: [0x62D3], NFKC: [0x62D3], NFKD: [0x62D3] }, +{ source: [0xFA03], NFC: [0x7CD6], NFD: [0x7CD6], NFKC: [0x7CD6], NFKD: [0x7CD6] }, +{ source: [0xFA04], NFC: [0x5B85], NFD: [0x5B85], NFKC: [0x5B85], NFKD: [0x5B85] }, +{ source: [0xFA05], NFC: [0x6D1E], NFD: [0x6D1E], NFKC: [0x6D1E], NFKD: [0x6D1E] }, +{ source: [0xFA06], NFC: [0x66B4], NFD: [0x66B4], NFKC: [0x66B4], NFKD: [0x66B4] }, +{ source: [0xFA07], NFC: [0x8F3B], NFD: [0x8F3B], NFKC: [0x8F3B], NFKD: [0x8F3B] }, +{ source: [0xFA08], NFC: [0x884C], NFD: [0x884C], NFKC: [0x884C], NFKD: [0x884C] }, +{ source: [0xFA09], NFC: [0x964D], NFD: [0x964D], NFKC: [0x964D], NFKD: [0x964D] }, +{ source: [0xFA0A], NFC: [0x898B], NFD: [0x898B], NFKC: [0x898B], NFKD: [0x898B] }, +{ source: [0xFA0B], NFC: [0x5ED3], NFD: [0x5ED3], NFKC: [0x5ED3], NFKD: [0x5ED3] }, +{ source: [0xFA0C], NFC: [0x5140], NFD: [0x5140], NFKC: [0x5140], NFKD: [0x5140] }, +{ source: [0xFA0D], NFC: [0x55C0], NFD: [0x55C0], NFKC: [0x55C0], NFKD: [0x55C0] }, +{ source: [0xFA10], NFC: [0x585A], NFD: [0x585A], NFKC: [0x585A], NFKD: [0x585A] }, +{ source: [0xFA12], NFC: [0x6674], NFD: [0x6674], NFKC: [0x6674], NFKD: [0x6674] }, +{ source: [0xFA15], NFC: [0x51DE], NFD: [0x51DE], NFKC: [0x51DE], NFKD: [0x51DE] }, +{ source: [0xFA16], NFC: [0x732A], NFD: [0x732A], NFKC: [0x732A], NFKD: [0x732A] }, +{ source: [0xFA17], NFC: [0x76CA], NFD: [0x76CA], NFKC: [0x76CA], NFKD: [0x76CA] }, +{ source: [0xFA18], NFC: [0x793C], NFD: [0x793C], NFKC: [0x793C], NFKD: [0x793C] }, +{ source: [0xFA19], NFC: [0x795E], NFD: [0x795E], NFKC: [0x795E], NFKD: [0x795E] }, +{ source: [0xFA1A], NFC: [0x7965], NFD: [0x7965], NFKC: [0x7965], NFKD: [0x7965] }, +{ source: [0xFA1B], NFC: [0x798F], NFD: [0x798F], NFKC: [0x798F], NFKD: [0x798F] }, +{ source: [0xFA1C], NFC: [0x9756], NFD: [0x9756], NFKC: [0x9756], NFKD: [0x9756] }, +{ source: [0xFA1D], NFC: [0x7CBE], NFD: [0x7CBE], NFKC: [0x7CBE], NFKD: [0x7CBE] }, +{ source: [0xFA1E], NFC: [0x7FBD], NFD: [0x7FBD], NFKC: [0x7FBD], NFKD: [0x7FBD] }, +{ source: [0xFA20], NFC: [0x8612], NFD: [0x8612], NFKC: [0x8612], NFKD: [0x8612] }, +{ source: [0xFA22], NFC: [0x8AF8], NFD: [0x8AF8], NFKC: [0x8AF8], NFKD: [0x8AF8] }, +{ source: [0xFA25], NFC: [0x9038], NFD: [0x9038], NFKC: [0x9038], NFKD: [0x9038] }, +{ source: [0xFA26], NFC: [0x90FD], NFD: [0x90FD], NFKC: [0x90FD], NFKD: [0x90FD] }, +{ source: [0xFA2A], NFC: [0x98EF], NFD: [0x98EF], NFKC: [0x98EF], NFKD: [0x98EF] }, +{ source: [0xFA2B], NFC: [0x98FC], NFD: [0x98FC], NFKC: [0x98FC], NFKD: [0x98FC] }, +{ source: [0xFA2C], NFC: [0x9928], NFD: [0x9928], NFKC: [0x9928], NFKD: [0x9928] }, +{ source: [0xFA2D], NFC: [0x9DB4], NFD: [0x9DB4], NFKC: [0x9DB4], NFKD: [0x9DB4] }, +{ source: [0xFA2E], NFC: [0x90DE], NFD: [0x90DE], NFKC: [0x90DE], NFKD: [0x90DE] }, +{ source: [0xFA2F], NFC: [0x96B7], NFD: [0x96B7], NFKC: [0x96B7], NFKD: [0x96B7] }, +{ source: [0xFA30], NFC: [0x4FAE], NFD: [0x4FAE], NFKC: [0x4FAE], NFKD: [0x4FAE] }, +{ source: [0xFA31], NFC: [0x50E7], NFD: [0x50E7], NFKC: [0x50E7], NFKD: [0x50E7] }, +{ source: [0xFA32], NFC: [0x514D], NFD: [0x514D], NFKC: [0x514D], NFKD: [0x514D] }, +{ source: [0xFA33], NFC: [0x52C9], NFD: [0x52C9], NFKC: [0x52C9], NFKD: [0x52C9] }, +{ source: [0xFA34], NFC: [0x52E4], NFD: [0x52E4], NFKC: [0x52E4], NFKD: [0x52E4] }, +{ source: [0xFA35], NFC: [0x5351], NFD: [0x5351], NFKC: [0x5351], NFKD: [0x5351] }, +{ source: [0xFA36], NFC: [0x559D], NFD: [0x559D], NFKC: [0x559D], NFKD: [0x559D] }, +{ source: [0xFA37], NFC: [0x5606], NFD: [0x5606], NFKC: [0x5606], NFKD: [0x5606] }, +{ source: [0xFA38], NFC: [0x5668], NFD: [0x5668], NFKC: [0x5668], NFKD: [0x5668] }, +{ source: [0xFA39], NFC: [0x5840], NFD: [0x5840], NFKC: [0x5840], NFKD: [0x5840] }, +{ source: [0xFA3A], NFC: [0x58A8], NFD: [0x58A8], NFKC: [0x58A8], NFKD: [0x58A8] }, +{ source: [0xFA3B], NFC: [0x5C64], NFD: [0x5C64], NFKC: [0x5C64], NFKD: [0x5C64] }, +{ source: [0xFA3C], NFC: [0x5C6E], NFD: [0x5C6E], NFKC: [0x5C6E], NFKD: [0x5C6E] }, +{ source: [0xFA3D], NFC: [0x6094], NFD: [0x6094], NFKC: [0x6094], NFKD: [0x6094] }, +{ source: [0xFA3E], NFC: [0x6168], NFD: [0x6168], NFKC: [0x6168], NFKD: [0x6168] }, +{ source: [0xFA3F], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] }, +{ source: [0xFA40], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] }, +{ source: [0xFA41], NFC: [0x654F], NFD: [0x654F], NFKC: [0x654F], NFKD: [0x654F] }, +{ source: [0xFA42], NFC: [0x65E2], NFD: [0x65E2], NFKC: [0x65E2], NFKD: [0x65E2] }, +{ source: [0xFA43], NFC: [0x6691], NFD: [0x6691], NFKC: [0x6691], NFKD: [0x6691] }, +{ source: [0xFA44], NFC: [0x6885], NFD: [0x6885], NFKC: [0x6885], NFKD: [0x6885] }, +{ source: [0xFA45], NFC: [0x6D77], NFD: [0x6D77], NFKC: [0x6D77], NFKD: [0x6D77] }, +{ source: [0xFA46], NFC: [0x6E1A], NFD: [0x6E1A], NFKC: [0x6E1A], NFKD: [0x6E1A] }, +{ source: [0xFA47], NFC: [0x6F22], NFD: [0x6F22], NFKC: [0x6F22], NFKD: [0x6F22] }, +{ source: [0xFA48], NFC: [0x716E], NFD: [0x716E], NFKC: [0x716E], NFKD: [0x716E] }, +{ source: [0xFA49], NFC: [0x722B], NFD: [0x722B], NFKC: [0x722B], NFKD: [0x722B] }, +{ source: [0xFA4A], NFC: [0x7422], NFD: [0x7422], NFKC: [0x7422], NFKD: [0x7422] }, +{ source: [0xFA4B], NFC: [0x7891], NFD: [0x7891], NFKC: [0x7891], NFKD: [0x7891] }, +{ source: [0xFA4C], NFC: [0x793E], NFD: [0x793E], NFKC: [0x793E], NFKD: [0x793E] }, +{ source: [0xFA4D], NFC: [0x7949], NFD: [0x7949], NFKC: [0x7949], NFKD: [0x7949] }, +{ source: [0xFA4E], NFC: [0x7948], NFD: [0x7948], NFKC: [0x7948], NFKD: [0x7948] }, +{ source: [0xFA4F], NFC: [0x7950], NFD: [0x7950], NFKC: [0x7950], NFKD: [0x7950] }, +{ source: [0xFA50], NFC: [0x7956], NFD: [0x7956], NFKC: [0x7956], NFKD: [0x7956] }, +{ source: [0xFA51], NFC: [0x795D], NFD: [0x795D], NFKC: [0x795D], NFKD: [0x795D] }, +{ source: [0xFA52], NFC: [0x798D], NFD: [0x798D], NFKC: [0x798D], NFKD: [0x798D] }, +{ source: [0xFA53], NFC: [0x798E], NFD: [0x798E], NFKC: [0x798E], NFKD: [0x798E] }, +{ source: [0xFA54], NFC: [0x7A40], NFD: [0x7A40], NFKC: [0x7A40], NFKD: [0x7A40] }, +{ source: [0xFA55], NFC: [0x7A81], NFD: [0x7A81], NFKC: [0x7A81], NFKD: [0x7A81] }, +{ source: [0xFA56], NFC: [0x7BC0], NFD: [0x7BC0], NFKC: [0x7BC0], NFKD: [0x7BC0] }, +{ source: [0xFA57], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] }, +{ source: [0xFA58], NFC: [0x7E09], NFD: [0x7E09], NFKC: [0x7E09], NFKD: [0x7E09] }, +{ source: [0xFA59], NFC: [0x7E41], NFD: [0x7E41], NFKC: [0x7E41], NFKD: [0x7E41] }, +{ source: [0xFA5A], NFC: [0x7F72], NFD: [0x7F72], NFKC: [0x7F72], NFKD: [0x7F72] }, +{ source: [0xFA5B], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] }, +{ source: [0xFA5C], NFC: [0x81ED], NFD: [0x81ED], NFKC: [0x81ED], NFKD: [0x81ED] }, +{ source: [0xFA5D], NFC: [0x8279], NFD: [0x8279], NFKC: [0x8279], NFKD: [0x8279] }, +{ source: [0xFA5E], NFC: [0x8279], NFD: [0x8279], NFKC: [0x8279], NFKD: [0x8279] }, +{ source: [0xFA5F], NFC: [0x8457], NFD: [0x8457], NFKC: [0x8457], NFKD: [0x8457] }, +{ source: [0xFA60], NFC: [0x8910], NFD: [0x8910], NFKC: [0x8910], NFKD: [0x8910] }, +{ source: [0xFA61], NFC: [0x8996], NFD: [0x8996], NFKC: [0x8996], NFKD: [0x8996] }, +{ source: [0xFA62], NFC: [0x8B01], NFD: [0x8B01], NFKC: [0x8B01], NFKD: [0x8B01] }, +{ source: [0xFA63], NFC: [0x8B39], NFD: [0x8B39], NFKC: [0x8B39], NFKD: [0x8B39] }, +{ source: [0xFA64], NFC: [0x8CD3], NFD: [0x8CD3], NFKC: [0x8CD3], NFKD: [0x8CD3] }, +{ source: [0xFA65], NFC: [0x8D08], NFD: [0x8D08], NFKC: [0x8D08], NFKD: [0x8D08] }, +{ source: [0xFA66], NFC: [0x8FB6], NFD: [0x8FB6], NFKC: [0x8FB6], NFKD: [0x8FB6] }, +{ source: [0xFA67], NFC: [0x9038], NFD: [0x9038], NFKC: [0x9038], NFKD: [0x9038] }, +{ source: [0xFA68], NFC: [0x96E3], NFD: [0x96E3], NFKC: [0x96E3], NFKD: [0x96E3] }, +{ source: [0xFA69], NFC: [0x97FF], NFD: [0x97FF], NFKC: [0x97FF], NFKD: [0x97FF] }, +{ source: [0xFA6A], NFC: [0x983B], NFD: [0x983B], NFKC: [0x983B], NFKD: [0x983B] }, +{ source: [0xFA6B], NFC: [0x6075], NFD: [0x6075], NFKC: [0x6075], NFKD: [0x6075] }, +{ source: [0xFA6C], NFC: [0x242EE], NFD: [0x242EE], NFKC: [0x242EE], NFKD: [0x242EE] }, +{ source: [0xFA6D], NFC: [0x8218], NFD: [0x8218], NFKC: [0x8218], NFKD: [0x8218] }, +{ source: [0xFA70], NFC: [0x4E26], NFD: [0x4E26], NFKC: [0x4E26], NFKD: [0x4E26] }, +{ source: [0xFA71], NFC: [0x51B5], NFD: [0x51B5], NFKC: [0x51B5], NFKD: [0x51B5] }, +{ source: [0xFA72], NFC: [0x5168], NFD: [0x5168], NFKC: [0x5168], NFKD: [0x5168] }, +{ source: [0xFA73], NFC: [0x4F80], NFD: [0x4F80], NFKC: [0x4F80], NFKD: [0x4F80] }, +{ source: [0xFA74], NFC: [0x5145], NFD: [0x5145], NFKC: [0x5145], NFKD: [0x5145] }, +{ source: [0xFA75], NFC: [0x5180], NFD: [0x5180], NFKC: [0x5180], NFKD: [0x5180] }, +{ source: [0xFA76], NFC: [0x52C7], NFD: [0x52C7], NFKC: [0x52C7], NFKD: [0x52C7] }, +{ source: [0xFA77], NFC: [0x52FA], NFD: [0x52FA], NFKC: [0x52FA], NFKD: [0x52FA] }, +{ source: [0xFA78], NFC: [0x559D], NFD: [0x559D], NFKC: [0x559D], NFKD: [0x559D] }, +{ source: [0xFA79], NFC: [0x5555], NFD: [0x5555], NFKC: [0x5555], NFKD: [0x5555] }, +{ source: [0xFA7A], NFC: [0x5599], NFD: [0x5599], NFKC: [0x5599], NFKD: [0x5599] }, +{ source: [0xFA7B], NFC: [0x55E2], NFD: [0x55E2], NFKC: [0x55E2], NFKD: [0x55E2] }, +{ source: [0xFA7C], NFC: [0x585A], NFD: [0x585A], NFKC: [0x585A], NFKD: [0x585A] }, +{ source: [0xFA7D], NFC: [0x58B3], NFD: [0x58B3], NFKC: [0x58B3], NFKD: [0x58B3] }, +{ source: [0xFA7E], NFC: [0x5944], NFD: [0x5944], NFKC: [0x5944], NFKD: [0x5944] }, +{ source: [0xFA7F], NFC: [0x5954], NFD: [0x5954], NFKC: [0x5954], NFKD: [0x5954] }, +{ source: [0xFA80], NFC: [0x5A62], NFD: [0x5A62], NFKC: [0x5A62], NFKD: [0x5A62] }, +{ source: [0xFA81], NFC: [0x5B28], NFD: [0x5B28], NFKC: [0x5B28], NFKD: [0x5B28] }, +{ source: [0xFA82], NFC: [0x5ED2], NFD: [0x5ED2], NFKC: [0x5ED2], NFKD: [0x5ED2] }, +{ source: [0xFA83], NFC: [0x5ED9], NFD: [0x5ED9], NFKC: [0x5ED9], NFKD: [0x5ED9] }, +{ source: [0xFA84], NFC: [0x5F69], NFD: [0x5F69], NFKC: [0x5F69], NFKD: [0x5F69] }, +{ source: [0xFA85], NFC: [0x5FAD], NFD: [0x5FAD], NFKC: [0x5FAD], NFKD: [0x5FAD] }, +{ source: [0xFA86], NFC: [0x60D8], NFD: [0x60D8], NFKC: [0x60D8], NFKD: [0x60D8] }, +{ source: [0xFA87], NFC: [0x614E], NFD: [0x614E], NFKC: [0x614E], NFKD: [0x614E] }, +{ source: [0xFA88], NFC: [0x6108], NFD: [0x6108], NFKC: [0x6108], NFKD: [0x6108] }, +{ source: [0xFA89], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] }, +{ source: [0xFA8A], NFC: [0x6160], NFD: [0x6160], NFKC: [0x6160], NFKD: [0x6160] }, +{ source: [0xFA8B], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] }, +{ source: [0xFA8C], NFC: [0x6234], NFD: [0x6234], NFKC: [0x6234], NFKD: [0x6234] }, +{ source: [0xFA8D], NFC: [0x63C4], NFD: [0x63C4], NFKC: [0x63C4], NFKD: [0x63C4] }, +{ source: [0xFA8E], NFC: [0x641C], NFD: [0x641C], NFKC: [0x641C], NFKD: [0x641C] }, +{ source: [0xFA8F], NFC: [0x6452], NFD: [0x6452], NFKC: [0x6452], NFKD: [0x6452] }, +{ source: [0xFA90], NFC: [0x6556], NFD: [0x6556], NFKC: [0x6556], NFKD: [0x6556] }, +{ source: [0xFA91], NFC: [0x6674], NFD: [0x6674], NFKC: [0x6674], NFKD: [0x6674] }, +{ source: [0xFA92], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] }, +{ source: [0xFA93], NFC: [0x671B], NFD: [0x671B], NFKC: [0x671B], NFKD: [0x671B] }, +{ source: [0xFA94], NFC: [0x6756], NFD: [0x6756], NFKC: [0x6756], NFKD: [0x6756] }, +{ source: [0xFA95], NFC: [0x6B79], NFD: [0x6B79], NFKC: [0x6B79], NFKD: [0x6B79] }, +{ source: [0xFA96], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] }, +{ source: [0xFA97], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] }, +{ source: [0xFA98], NFC: [0x6EDB], NFD: [0x6EDB], NFKC: [0x6EDB], NFKD: [0x6EDB] }, +{ source: [0xFA99], NFC: [0x6ECB], NFD: [0x6ECB], NFKC: [0x6ECB], NFKD: [0x6ECB] }, +{ source: [0xFA9A], NFC: [0x6F22], NFD: [0x6F22], NFKC: [0x6F22], NFKD: [0x6F22] }, +{ source: [0xFA9B], NFC: [0x701E], NFD: [0x701E], NFKC: [0x701E], NFKD: [0x701E] }, +{ source: [0xFA9C], NFC: [0x716E], NFD: [0x716E], NFKC: [0x716E], NFKD: [0x716E] }, +{ source: [0xFA9D], NFC: [0x77A7], NFD: [0x77A7], NFKC: [0x77A7], NFKD: [0x77A7] }, +{ source: [0xFA9E], NFC: [0x7235], NFD: [0x7235], NFKC: [0x7235], NFKD: [0x7235] }, +{ source: [0xFA9F], NFC: [0x72AF], NFD: [0x72AF], NFKC: [0x72AF], NFKD: [0x72AF] }, +{ source: [0xFAA0], NFC: [0x732A], NFD: [0x732A], NFKC: [0x732A], NFKD: [0x732A] }, +{ source: [0xFAA1], NFC: [0x7471], NFD: [0x7471], NFKC: [0x7471], NFKD: [0x7471] }, +{ source: [0xFAA2], NFC: [0x7506], NFD: [0x7506], NFKC: [0x7506], NFKD: [0x7506] }, +{ source: [0xFAA3], NFC: [0x753B], NFD: [0x753B], NFKC: [0x753B], NFKD: [0x753B] }, +{ source: [0xFAA4], NFC: [0x761D], NFD: [0x761D], NFKC: [0x761D], NFKD: [0x761D] }, +{ source: [0xFAA5], NFC: [0x761F], NFD: [0x761F], NFKC: [0x761F], NFKD: [0x761F] }, +{ source: [0xFAA6], NFC: [0x76CA], NFD: [0x76CA], NFKC: [0x76CA], NFKD: [0x76CA] }, +{ source: [0xFAA7], NFC: [0x76DB], NFD: [0x76DB], NFKC: [0x76DB], NFKD: [0x76DB] }, +{ source: [0xFAA8], NFC: [0x76F4], NFD: [0x76F4], NFKC: [0x76F4], NFKD: [0x76F4] }, +{ source: [0xFAA9], NFC: [0x774A], NFD: [0x774A], NFKC: [0x774A], NFKD: [0x774A] }, +{ source: [0xFAAA], NFC: [0x7740], NFD: [0x7740], NFKC: [0x7740], NFKD: [0x7740] }, +{ source: [0xFAAB], NFC: [0x78CC], NFD: [0x78CC], NFKC: [0x78CC], NFKD: [0x78CC] }, +{ source: [0xFAAC], NFC: [0x7AB1], NFD: [0x7AB1], NFKC: [0x7AB1], NFKD: [0x7AB1] }, +{ source: [0xFAAD], NFC: [0x7BC0], NFD: [0x7BC0], NFKC: [0x7BC0], NFKD: [0x7BC0] }, +{ source: [0xFAAE], NFC: [0x7C7B], NFD: [0x7C7B], NFKC: [0x7C7B], NFKD: [0x7C7B] }, +{ source: [0xFAAF], NFC: [0x7D5B], NFD: [0x7D5B], NFKC: [0x7D5B], NFKD: [0x7D5B] }, +{ source: [0xFAB0], NFC: [0x7DF4], NFD: [0x7DF4], NFKC: [0x7DF4], NFKD: [0x7DF4] }, +{ source: [0xFAB1], NFC: [0x7F3E], NFD: [0x7F3E], NFKC: [0x7F3E], NFKD: [0x7F3E] }, +{ source: [0xFAB2], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] }, +{ source: [0xFAB3], NFC: [0x8352], NFD: [0x8352], NFKC: [0x8352], NFKD: [0x8352] }, +{ source: [0xFAB4], NFC: [0x83EF], NFD: [0x83EF], NFKC: [0x83EF], NFKD: [0x83EF] }, +{ source: [0xFAB5], NFC: [0x8779], NFD: [0x8779], NFKC: [0x8779], NFKD: [0x8779] }, +{ source: [0xFAB6], NFC: [0x8941], NFD: [0x8941], NFKC: [0x8941], NFKD: [0x8941] }, +{ source: [0xFAB7], NFC: [0x8986], NFD: [0x8986], NFKC: [0x8986], NFKD: [0x8986] }, +{ source: [0xFAB8], NFC: [0x8996], NFD: [0x8996], NFKC: [0x8996], NFKD: [0x8996] }, +{ source: [0xFAB9], NFC: [0x8ABF], NFD: [0x8ABF], NFKC: [0x8ABF], NFKD: [0x8ABF] }, +{ source: [0xFABA], NFC: [0x8AF8], NFD: [0x8AF8], NFKC: [0x8AF8], NFKD: [0x8AF8] }, +{ source: [0xFABB], NFC: [0x8ACB], NFD: [0x8ACB], NFKC: [0x8ACB], NFKD: [0x8ACB] }, +{ source: [0xFABC], NFC: [0x8B01], NFD: [0x8B01], NFKC: [0x8B01], NFKD: [0x8B01] }, +{ source: [0xFABD], NFC: [0x8AFE], NFD: [0x8AFE], NFKC: [0x8AFE], NFKD: [0x8AFE] }, +{ source: [0xFABE], NFC: [0x8AED], NFD: [0x8AED], NFKC: [0x8AED], NFKD: [0x8AED] }, +{ source: [0xFABF], NFC: [0x8B39], NFD: [0x8B39], NFKC: [0x8B39], NFKD: [0x8B39] }, +{ source: [0xFAC0], NFC: [0x8B8A], NFD: [0x8B8A], NFKC: [0x8B8A], NFKD: [0x8B8A] }, +{ source: [0xFAC1], NFC: [0x8D08], NFD: [0x8D08], NFKC: [0x8D08], NFKD: [0x8D08] }, +{ source: [0xFAC2], NFC: [0x8F38], NFD: [0x8F38], NFKC: [0x8F38], NFKD: [0x8F38] }, +{ source: [0xFAC3], NFC: [0x9072], NFD: [0x9072], NFKC: [0x9072], NFKD: [0x9072] }, +{ source: [0xFAC4], NFC: [0x9199], NFD: [0x9199], NFKC: [0x9199], NFKD: [0x9199] }, +{ source: [0xFAC5], NFC: [0x9276], NFD: [0x9276], NFKC: [0x9276], NFKD: [0x9276] }, +{ source: [0xFAC6], NFC: [0x967C], NFD: [0x967C], NFKC: [0x967C], NFKD: [0x967C] }, +{ source: [0xFAC7], NFC: [0x96E3], NFD: [0x96E3], NFKC: [0x96E3], NFKD: [0x96E3] }, +{ source: [0xFAC8], NFC: [0x9756], NFD: [0x9756], NFKC: [0x9756], NFKD: [0x9756] }, +{ source: [0xFAC9], NFC: [0x97DB], NFD: [0x97DB], NFKC: [0x97DB], NFKD: [0x97DB] }, +{ source: [0xFACA], NFC: [0x97FF], NFD: [0x97FF], NFKC: [0x97FF], NFKD: [0x97FF] }, +{ source: [0xFACB], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] }, +{ source: [0xFACC], NFC: [0x983B], NFD: [0x983B], NFKC: [0x983B], NFKD: [0x983B] }, +{ source: [0xFACD], NFC: [0x9B12], NFD: [0x9B12], NFKC: [0x9B12], NFKD: [0x9B12] }, +{ source: [0xFACE], NFC: [0x9F9C], NFD: [0x9F9C], NFKC: [0x9F9C], NFKD: [0x9F9C] }, +{ source: [0xFACF], NFC: [0x2284A], NFD: [0x2284A], NFKC: [0x2284A], NFKD: [0x2284A] }, +{ source: [0xFAD0], NFC: [0x22844], NFD: [0x22844], NFKC: [0x22844], NFKD: [0x22844] }, +{ source: [0xFAD1], NFC: [0x233D5], NFD: [0x233D5], NFKC: [0x233D5], NFKD: [0x233D5] }, +{ source: [0xFAD2], NFC: [0x3B9D], NFD: [0x3B9D], NFKC: [0x3B9D], NFKD: [0x3B9D] }, +{ source: [0xFAD3], NFC: [0x4018], NFD: [0x4018], NFKC: [0x4018], NFKD: [0x4018] }, +{ source: [0xFAD4], NFC: [0x4039], NFD: [0x4039], NFKC: [0x4039], NFKD: [0x4039] }, +{ source: [0xFAD5], NFC: [0x25249], NFD: [0x25249], NFKC: [0x25249], NFKD: [0x25249] }, +{ source: [0xFAD6], NFC: [0x25CD0], NFD: [0x25CD0], NFKC: [0x25CD0], NFKD: [0x25CD0] }, +{ source: [0xFAD7], NFC: [0x27ED3], NFD: [0x27ED3], NFKC: [0x27ED3], NFKD: [0x27ED3] }, +{ source: [0xFAD8], NFC: [0x9F43], NFD: [0x9F43], NFKC: [0x9F43], NFKD: [0x9F43] }, +{ source: [0xFAD9], NFC: [0x9F8E], NFD: [0x9F8E], NFKC: [0x9F8E], NFKD: [0x9F8E] }, +{ source: [0xFB00], NFC: [0xFB00], NFD: [0xFB00], NFKC: [0x0066, 0x0066], NFKD: [0x0066, 0x0066] }, +{ source: [0xFB01], NFC: [0xFB01], NFD: [0xFB01], NFKC: [0x0066, 0x0069], NFKD: [0x0066, 0x0069] }, +{ source: [0xFB02], NFC: [0xFB02], NFD: [0xFB02], NFKC: [0x0066, 0x006C], NFKD: [0x0066, 0x006C] }, +{ source: [0xFB03], NFC: [0xFB03], NFD: [0xFB03], NFKC: [0x0066, 0x0066, 0x0069], NFKD: [0x0066, 0x0066, 0x0069] }, +{ source: [0xFB04], NFC: [0xFB04], NFD: [0xFB04], NFKC: [0x0066, 0x0066, 0x006C], NFKD: [0x0066, 0x0066, 0x006C] }, +{ source: [0xFB05], NFC: [0xFB05], NFD: [0xFB05], NFKC: [0x0073, 0x0074], NFKD: [0x0073, 0x0074] }, +{ source: [0xFB06], NFC: [0xFB06], NFD: [0xFB06], NFKC: [0x0073, 0x0074], NFKD: [0x0073, 0x0074] }, +{ source: [0xFB13], NFC: [0xFB13], NFD: [0xFB13], NFKC: [0x0574, 0x0576], NFKD: [0x0574, 0x0576] }, +{ source: [0xFB14], NFC: [0xFB14], NFD: [0xFB14], NFKC: [0x0574, 0x0565], NFKD: [0x0574, 0x0565] }, +{ source: [0xFB15], NFC: [0xFB15], NFD: [0xFB15], NFKC: [0x0574, 0x056B], NFKD: [0x0574, 0x056B] }, +{ source: [0xFB16], NFC: [0xFB16], NFD: [0xFB16], NFKC: [0x057E, 0x0576], NFKD: [0x057E, 0x0576] }, +{ source: [0xFB17], NFC: [0xFB17], NFD: [0xFB17], NFKC: [0x0574, 0x056D], NFKD: [0x0574, 0x056D] }, +{ source: [0xFB1D], NFC: [0x05D9, 0x05B4], NFD: [0x05D9, 0x05B4], NFKC: [0x05D9, 0x05B4], NFKD: [0x05D9, 0x05B4] }, +{ source: [0xFB1F], NFC: [0x05F2, 0x05B7], NFD: [0x05F2, 0x05B7], NFKC: [0x05F2, 0x05B7], NFKD: [0x05F2, 0x05B7] }, +{ source: [0xFB20], NFC: [0xFB20], NFD: [0xFB20], NFKC: [0x05E2], NFKD: [0x05E2] }, +{ source: [0xFB21], NFC: [0xFB21], NFD: [0xFB21], NFKC: [0x05D0], NFKD: [0x05D0] }, +{ source: [0xFB22], NFC: [0xFB22], NFD: [0xFB22], NFKC: [0x05D3], NFKD: [0x05D3] }, +{ source: [0xFB23], NFC: [0xFB23], NFD: [0xFB23], NFKC: [0x05D4], NFKD: [0x05D4] }, +{ source: [0xFB24], NFC: [0xFB24], NFD: [0xFB24], NFKC: [0x05DB], NFKD: [0x05DB] }, +{ source: [0xFB25], NFC: [0xFB25], NFD: [0xFB25], NFKC: [0x05DC], NFKD: [0x05DC] }, +{ source: [0xFB26], NFC: [0xFB26], NFD: [0xFB26], NFKC: [0x05DD], NFKD: [0x05DD] }, +{ source: [0xFB27], NFC: [0xFB27], NFD: [0xFB27], NFKC: [0x05E8], NFKD: [0x05E8] }, +{ source: [0xFB28], NFC: [0xFB28], NFD: [0xFB28], NFKC: [0x05EA], NFKD: [0x05EA] }, +{ source: [0xFB29], NFC: [0xFB29], NFD: [0xFB29], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0xFB2A], NFC: [0x05E9, 0x05C1], NFD: [0x05E9, 0x05C1], NFKC: [0x05E9, 0x05C1], NFKD: [0x05E9, 0x05C1] }, +{ source: [0xFB2B], NFC: [0x05E9, 0x05C2], NFD: [0x05E9, 0x05C2], NFKC: [0x05E9, 0x05C2], NFKD: [0x05E9, 0x05C2] }, +{ source: [0xFB2C], NFC: [0x05E9, 0x05BC, 0x05C1], NFD: [0x05E9, 0x05BC, 0x05C1], NFKC: [0x05E9, 0x05BC, 0x05C1], NFKD: [0x05E9, 0x05BC, 0x05C1] }, +{ source: [0xFB2D], NFC: [0x05E9, 0x05BC, 0x05C2], NFD: [0x05E9, 0x05BC, 0x05C2], NFKC: [0x05E9, 0x05BC, 0x05C2], NFKD: [0x05E9, 0x05BC, 0x05C2] }, +{ source: [0xFB2E], NFC: [0x05D0, 0x05B7], NFD: [0x05D0, 0x05B7], NFKC: [0x05D0, 0x05B7], NFKD: [0x05D0, 0x05B7] }, +{ source: [0xFB2F], NFC: [0x05D0, 0x05B8], NFD: [0x05D0, 0x05B8], NFKC: [0x05D0, 0x05B8], NFKD: [0x05D0, 0x05B8] }, +{ source: [0xFB30], NFC: [0x05D0, 0x05BC], NFD: [0x05D0, 0x05BC], NFKC: [0x05D0, 0x05BC], NFKD: [0x05D0, 0x05BC] }, +{ source: [0xFB31], NFC: [0x05D1, 0x05BC], NFD: [0x05D1, 0x05BC], NFKC: [0x05D1, 0x05BC], NFKD: [0x05D1, 0x05BC] }, +{ source: [0xFB32], NFC: [0x05D2, 0x05BC], NFD: [0x05D2, 0x05BC], NFKC: [0x05D2, 0x05BC], NFKD: [0x05D2, 0x05BC] }, +{ source: [0xFB33], NFC: [0x05D3, 0x05BC], NFD: [0x05D3, 0x05BC], NFKC: [0x05D3, 0x05BC], NFKD: [0x05D3, 0x05BC] }, +{ source: [0xFB34], NFC: [0x05D4, 0x05BC], NFD: [0x05D4, 0x05BC], NFKC: [0x05D4, 0x05BC], NFKD: [0x05D4, 0x05BC] }, +{ source: [0xFB35], NFC: [0x05D5, 0x05BC], NFD: [0x05D5, 0x05BC], NFKC: [0x05D5, 0x05BC], NFKD: [0x05D5, 0x05BC] }, +{ source: [0xFB36], NFC: [0x05D6, 0x05BC], NFD: [0x05D6, 0x05BC], NFKC: [0x05D6, 0x05BC], NFKD: [0x05D6, 0x05BC] }, +{ source: [0xFB38], NFC: [0x05D8, 0x05BC], NFD: [0x05D8, 0x05BC], NFKC: [0x05D8, 0x05BC], NFKD: [0x05D8, 0x05BC] }, +{ source: [0xFB39], NFC: [0x05D9, 0x05BC], NFD: [0x05D9, 0x05BC], NFKC: [0x05D9, 0x05BC], NFKD: [0x05D9, 0x05BC] }, +{ source: [0xFB3A], NFC: [0x05DA, 0x05BC], NFD: [0x05DA, 0x05BC], NFKC: [0x05DA, 0x05BC], NFKD: [0x05DA, 0x05BC] }, +{ source: [0xFB3B], NFC: [0x05DB, 0x05BC], NFD: [0x05DB, 0x05BC], NFKC: [0x05DB, 0x05BC], NFKD: [0x05DB, 0x05BC] }, +{ source: [0xFB3C], NFC: [0x05DC, 0x05BC], NFD: [0x05DC, 0x05BC], NFKC: [0x05DC, 0x05BC], NFKD: [0x05DC, 0x05BC] }, +{ source: [0xFB3E], NFC: [0x05DE, 0x05BC], NFD: [0x05DE, 0x05BC], NFKC: [0x05DE, 0x05BC], NFKD: [0x05DE, 0x05BC] }, +{ source: [0xFB40], NFC: [0x05E0, 0x05BC], NFD: [0x05E0, 0x05BC], NFKC: [0x05E0, 0x05BC], NFKD: [0x05E0, 0x05BC] }, +{ source: [0xFB41], NFC: [0x05E1, 0x05BC], NFD: [0x05E1, 0x05BC], NFKC: [0x05E1, 0x05BC], NFKD: [0x05E1, 0x05BC] }, +{ source: [0xFB43], NFC: [0x05E3, 0x05BC], NFD: [0x05E3, 0x05BC], NFKC: [0x05E3, 0x05BC], NFKD: [0x05E3, 0x05BC] }, +{ source: [0xFB44], NFC: [0x05E4, 0x05BC], NFD: [0x05E4, 0x05BC], NFKC: [0x05E4, 0x05BC], NFKD: [0x05E4, 0x05BC] }, +{ source: [0xFB46], NFC: [0x05E6, 0x05BC], NFD: [0x05E6, 0x05BC], NFKC: [0x05E6, 0x05BC], NFKD: [0x05E6, 0x05BC] }, +{ source: [0xFB47], NFC: [0x05E7, 0x05BC], NFD: [0x05E7, 0x05BC], NFKC: [0x05E7, 0x05BC], NFKD: [0x05E7, 0x05BC] }, +{ source: [0xFB48], NFC: [0x05E8, 0x05BC], NFD: [0x05E8, 0x05BC], NFKC: [0x05E8, 0x05BC], NFKD: [0x05E8, 0x05BC] }, +{ source: [0xFB49], NFC: [0x05E9, 0x05BC], NFD: [0x05E9, 0x05BC], NFKC: [0x05E9, 0x05BC], NFKD: [0x05E9, 0x05BC] }, +{ source: [0xFB4A], NFC: [0x05EA, 0x05BC], NFD: [0x05EA, 0x05BC], NFKC: [0x05EA, 0x05BC], NFKD: [0x05EA, 0x05BC] }, +{ source: [0xFB4B], NFC: [0x05D5, 0x05B9], NFD: [0x05D5, 0x05B9], NFKC: [0x05D5, 0x05B9], NFKD: [0x05D5, 0x05B9] }, +{ source: [0xFB4C], NFC: [0x05D1, 0x05BF], NFD: [0x05D1, 0x05BF], NFKC: [0x05D1, 0x05BF], NFKD: [0x05D1, 0x05BF] }, +{ source: [0xFB4D], NFC: [0x05DB, 0x05BF], NFD: [0x05DB, 0x05BF], NFKC: [0x05DB, 0x05BF], NFKD: [0x05DB, 0x05BF] }, +{ source: [0xFB4E], NFC: [0x05E4, 0x05BF], NFD: [0x05E4, 0x05BF], NFKC: [0x05E4, 0x05BF], NFKD: [0x05E4, 0x05BF] }, +{ source: [0xFB4F], NFC: [0xFB4F], NFD: [0xFB4F], NFKC: [0x05D0, 0x05DC], NFKD: [0x05D0, 0x05DC] }, +{ source: [0xFB50], NFC: [0xFB50], NFD: [0xFB50], NFKC: [0x0671], NFKD: [0x0671] }, +{ source: [0xFB51], NFC: [0xFB51], NFD: [0xFB51], NFKC: [0x0671], NFKD: [0x0671] }, +{ source: [0xFB52], NFC: [0xFB52], NFD: [0xFB52], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB53], NFC: [0xFB53], NFD: [0xFB53], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB54], NFC: [0xFB54], NFD: [0xFB54], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB55], NFC: [0xFB55], NFD: [0xFB55], NFKC: [0x067B], NFKD: [0x067B] }, +{ source: [0xFB56], NFC: [0xFB56], NFD: [0xFB56], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB57], NFC: [0xFB57], NFD: [0xFB57], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB58], NFC: [0xFB58], NFD: [0xFB58], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB59], NFC: [0xFB59], NFD: [0xFB59], NFKC: [0x067E], NFKD: [0x067E] }, +{ source: [0xFB5A], NFC: [0xFB5A], NFD: [0xFB5A], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5B], NFC: [0xFB5B], NFD: [0xFB5B], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5C], NFC: [0xFB5C], NFD: [0xFB5C], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5D], NFC: [0xFB5D], NFD: [0xFB5D], NFKC: [0x0680], NFKD: [0x0680] }, +{ source: [0xFB5E], NFC: [0xFB5E], NFD: [0xFB5E], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB5F], NFC: [0xFB5F], NFD: [0xFB5F], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB60], NFC: [0xFB60], NFD: [0xFB60], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB61], NFC: [0xFB61], NFD: [0xFB61], NFKC: [0x067A], NFKD: [0x067A] }, +{ source: [0xFB62], NFC: [0xFB62], NFD: [0xFB62], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB63], NFC: [0xFB63], NFD: [0xFB63], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB64], NFC: [0xFB64], NFD: [0xFB64], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB65], NFC: [0xFB65], NFD: [0xFB65], NFKC: [0x067F], NFKD: [0x067F] }, +{ source: [0xFB66], NFC: [0xFB66], NFD: [0xFB66], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB67], NFC: [0xFB67], NFD: [0xFB67], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB68], NFC: [0xFB68], NFD: [0xFB68], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB69], NFC: [0xFB69], NFD: [0xFB69], NFKC: [0x0679], NFKD: [0x0679] }, +{ source: [0xFB6A], NFC: [0xFB6A], NFD: [0xFB6A], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6B], NFC: [0xFB6B], NFD: [0xFB6B], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6C], NFC: [0xFB6C], NFD: [0xFB6C], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6D], NFC: [0xFB6D], NFD: [0xFB6D], NFKC: [0x06A4], NFKD: [0x06A4] }, +{ source: [0xFB6E], NFC: [0xFB6E], NFD: [0xFB6E], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB6F], NFC: [0xFB6F], NFD: [0xFB6F], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB70], NFC: [0xFB70], NFD: [0xFB70], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB71], NFC: [0xFB71], NFD: [0xFB71], NFKC: [0x06A6], NFKD: [0x06A6] }, +{ source: [0xFB72], NFC: [0xFB72], NFD: [0xFB72], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB73], NFC: [0xFB73], NFD: [0xFB73], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB74], NFC: [0xFB74], NFD: [0xFB74], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB75], NFC: [0xFB75], NFD: [0xFB75], NFKC: [0x0684], NFKD: [0x0684] }, +{ source: [0xFB76], NFC: [0xFB76], NFD: [0xFB76], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB77], NFC: [0xFB77], NFD: [0xFB77], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB78], NFC: [0xFB78], NFD: [0xFB78], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB79], NFC: [0xFB79], NFD: [0xFB79], NFKC: [0x0683], NFKD: [0x0683] }, +{ source: [0xFB7A], NFC: [0xFB7A], NFD: [0xFB7A], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7B], NFC: [0xFB7B], NFD: [0xFB7B], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7C], NFC: [0xFB7C], NFD: [0xFB7C], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7D], NFC: [0xFB7D], NFD: [0xFB7D], NFKC: [0x0686], NFKD: [0x0686] }, +{ source: [0xFB7E], NFC: [0xFB7E], NFD: [0xFB7E], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB7F], NFC: [0xFB7F], NFD: [0xFB7F], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB80], NFC: [0xFB80], NFD: [0xFB80], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB81], NFC: [0xFB81], NFD: [0xFB81], NFKC: [0x0687], NFKD: [0x0687] }, +{ source: [0xFB82], NFC: [0xFB82], NFD: [0xFB82], NFKC: [0x068D], NFKD: [0x068D] }, +{ source: [0xFB83], NFC: [0xFB83], NFD: [0xFB83], NFKC: [0x068D], NFKD: [0x068D] }, +{ source: [0xFB84], NFC: [0xFB84], NFD: [0xFB84], NFKC: [0x068C], NFKD: [0x068C] }, +{ source: [0xFB85], NFC: [0xFB85], NFD: [0xFB85], NFKC: [0x068C], NFKD: [0x068C] }, +{ source: [0xFB86], NFC: [0xFB86], NFD: [0xFB86], NFKC: [0x068E], NFKD: [0x068E] }, +{ source: [0xFB87], NFC: [0xFB87], NFD: [0xFB87], NFKC: [0x068E], NFKD: [0x068E] }, +{ source: [0xFB88], NFC: [0xFB88], NFD: [0xFB88], NFKC: [0x0688], NFKD: [0x0688] }, +{ source: [0xFB89], NFC: [0xFB89], NFD: [0xFB89], NFKC: [0x0688], NFKD: [0x0688] }, +{ source: [0xFB8A], NFC: [0xFB8A], NFD: [0xFB8A], NFKC: [0x0698], NFKD: [0x0698] }, +{ source: [0xFB8B], NFC: [0xFB8B], NFD: [0xFB8B], NFKC: [0x0698], NFKD: [0x0698] }, +{ source: [0xFB8C], NFC: [0xFB8C], NFD: [0xFB8C], NFKC: [0x0691], NFKD: [0x0691] }, +{ source: [0xFB8D], NFC: [0xFB8D], NFD: [0xFB8D], NFKC: [0x0691], NFKD: [0x0691] }, +{ source: [0xFB8E], NFC: [0xFB8E], NFD: [0xFB8E], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB8F], NFC: [0xFB8F], NFD: [0xFB8F], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB90], NFC: [0xFB90], NFD: [0xFB90], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB91], NFC: [0xFB91], NFD: [0xFB91], NFKC: [0x06A9], NFKD: [0x06A9] }, +{ source: [0xFB92], NFC: [0xFB92], NFD: [0xFB92], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB93], NFC: [0xFB93], NFD: [0xFB93], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB94], NFC: [0xFB94], NFD: [0xFB94], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB95], NFC: [0xFB95], NFD: [0xFB95], NFKC: [0x06AF], NFKD: [0x06AF] }, +{ source: [0xFB96], NFC: [0xFB96], NFD: [0xFB96], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB97], NFC: [0xFB97], NFD: [0xFB97], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB98], NFC: [0xFB98], NFD: [0xFB98], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB99], NFC: [0xFB99], NFD: [0xFB99], NFKC: [0x06B3], NFKD: [0x06B3] }, +{ source: [0xFB9A], NFC: [0xFB9A], NFD: [0xFB9A], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9B], NFC: [0xFB9B], NFD: [0xFB9B], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9C], NFC: [0xFB9C], NFD: [0xFB9C], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9D], NFC: [0xFB9D], NFD: [0xFB9D], NFKC: [0x06B1], NFKD: [0x06B1] }, +{ source: [0xFB9E], NFC: [0xFB9E], NFD: [0xFB9E], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0xFB9F], NFC: [0xFB9F], NFD: [0xFB9F], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0xFBA0], NFC: [0xFBA0], NFD: [0xFBA0], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA1], NFC: [0xFBA1], NFD: [0xFBA1], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA2], NFC: [0xFBA2], NFD: [0xFBA2], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA3], NFC: [0xFBA3], NFD: [0xFBA3], NFKC: [0x06BB], NFKD: [0x06BB] }, +{ source: [0xFBA4], NFC: [0xFBA4], NFD: [0xFBA4], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] }, +{ source: [0xFBA5], NFC: [0xFBA5], NFD: [0xFBA5], NFKC: [0x06C0], NFKD: [0x06D5, 0x0654] }, +{ source: [0xFBA6], NFC: [0xFBA6], NFD: [0xFBA6], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBA7], NFC: [0xFBA7], NFD: [0xFBA7], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBA8], NFC: [0xFBA8], NFD: [0xFBA8], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBA9], NFC: [0xFBA9], NFD: [0xFBA9], NFKC: [0x06C1], NFKD: [0x06C1] }, +{ source: [0xFBAA], NFC: [0xFBAA], NFD: [0xFBAA], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAB], NFC: [0xFBAB], NFD: [0xFBAB], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAC], NFC: [0xFBAC], NFD: [0xFBAC], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAD], NFC: [0xFBAD], NFD: [0xFBAD], NFKC: [0x06BE], NFKD: [0x06BE] }, +{ source: [0xFBAE], NFC: [0xFBAE], NFD: [0xFBAE], NFKC: [0x06D2], NFKD: [0x06D2] }, +{ source: [0xFBAF], NFC: [0xFBAF], NFD: [0xFBAF], NFKC: [0x06D2], NFKD: [0x06D2] }, +{ source: [0xFBB0], NFC: [0xFBB0], NFD: [0xFBB0], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] }, +{ source: [0xFBB1], NFC: [0xFBB1], NFD: [0xFBB1], NFKC: [0x06D3], NFKD: [0x06D2, 0x0654] }, +{ source: [0xFBD3], NFC: [0xFBD3], NFD: [0xFBD3], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD4], NFC: [0xFBD4], NFD: [0xFBD4], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD5], NFC: [0xFBD5], NFD: [0xFBD5], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD6], NFC: [0xFBD6], NFD: [0xFBD6], NFKC: [0x06AD], NFKD: [0x06AD] }, +{ source: [0xFBD7], NFC: [0xFBD7], NFD: [0xFBD7], NFKC: [0x06C7], NFKD: [0x06C7] }, +{ source: [0xFBD8], NFC: [0xFBD8], NFD: [0xFBD8], NFKC: [0x06C7], NFKD: [0x06C7] }, +{ source: [0xFBD9], NFC: [0xFBD9], NFD: [0xFBD9], NFKC: [0x06C6], NFKD: [0x06C6] }, +{ source: [0xFBDA], NFC: [0xFBDA], NFD: [0xFBDA], NFKC: [0x06C6], NFKD: [0x06C6] }, +{ source: [0xFBDB], NFC: [0xFBDB], NFD: [0xFBDB], NFKC: [0x06C8], NFKD: [0x06C8] }, +{ source: [0xFBDC], NFC: [0xFBDC], NFD: [0xFBDC], NFKC: [0x06C8], NFKD: [0x06C8] }, +{ source: [0xFBDD], NFC: [0xFBDD], NFD: [0xFBDD], NFKC: [0x06C7, 0x0674], NFKD: [0x06C7, 0x0674] }, +{ source: [0xFBDE], NFC: [0xFBDE], NFD: [0xFBDE], NFKC: [0x06CB], NFKD: [0x06CB] }, +{ source: [0xFBDF], NFC: [0xFBDF], NFD: [0xFBDF], NFKC: [0x06CB], NFKD: [0x06CB] }, +{ source: [0xFBE0], NFC: [0xFBE0], NFD: [0xFBE0], NFKC: [0x06C5], NFKD: [0x06C5] }, +{ source: [0xFBE1], NFC: [0xFBE1], NFD: [0xFBE1], NFKC: [0x06C5], NFKD: [0x06C5] }, +{ source: [0xFBE2], NFC: [0xFBE2], NFD: [0xFBE2], NFKC: [0x06C9], NFKD: [0x06C9] }, +{ source: [0xFBE3], NFC: [0xFBE3], NFD: [0xFBE3], NFKC: [0x06C9], NFKD: [0x06C9] }, +{ source: [0xFBE4], NFC: [0xFBE4], NFD: [0xFBE4], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE5], NFC: [0xFBE5], NFD: [0xFBE5], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE6], NFC: [0xFBE6], NFD: [0xFBE6], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE7], NFC: [0xFBE7], NFD: [0xFBE7], NFKC: [0x06D0], NFKD: [0x06D0] }, +{ source: [0xFBE8], NFC: [0xFBE8], NFD: [0xFBE8], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFBE9], NFC: [0xFBE9], NFD: [0xFBE9], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFBEA], NFC: [0xFBEA], NFD: [0xFBEA], NFKC: [0x0626, 0x0627], NFKD: [0x064A, 0x0654, 0x0627] }, +{ source: [0xFBEB], NFC: [0xFBEB], NFD: [0xFBEB], NFKC: [0x0626, 0x0627], NFKD: [0x064A, 0x0654, 0x0627] }, +{ source: [0xFBEC], NFC: [0xFBEC], NFD: [0xFBEC], NFKC: [0x0626, 0x06D5], NFKD: [0x064A, 0x0654, 0x06D5] }, +{ source: [0xFBED], NFC: [0xFBED], NFD: [0xFBED], NFKC: [0x0626, 0x06D5], NFKD: [0x064A, 0x0654, 0x06D5] }, +{ source: [0xFBEE], NFC: [0xFBEE], NFD: [0xFBEE], NFKC: [0x0626, 0x0648], NFKD: [0x064A, 0x0654, 0x0648] }, +{ source: [0xFBEF], NFC: [0xFBEF], NFD: [0xFBEF], NFKC: [0x0626, 0x0648], NFKD: [0x064A, 0x0654, 0x0648] }, +{ source: [0xFBF0], NFC: [0xFBF0], NFD: [0xFBF0], NFKC: [0x0626, 0x06C7], NFKD: [0x064A, 0x0654, 0x06C7] }, +{ source: [0xFBF1], NFC: [0xFBF1], NFD: [0xFBF1], NFKC: [0x0626, 0x06C7], NFKD: [0x064A, 0x0654, 0x06C7] }, +{ source: [0xFBF2], NFC: [0xFBF2], NFD: [0xFBF2], NFKC: [0x0626, 0x06C6], NFKD: [0x064A, 0x0654, 0x06C6] }, +{ source: [0xFBF3], NFC: [0xFBF3], NFD: [0xFBF3], NFKC: [0x0626, 0x06C6], NFKD: [0x064A, 0x0654, 0x06C6] }, +{ source: [0xFBF4], NFC: [0xFBF4], NFD: [0xFBF4], NFKC: [0x0626, 0x06C8], NFKD: [0x064A, 0x0654, 0x06C8] }, +{ source: [0xFBF5], NFC: [0xFBF5], NFD: [0xFBF5], NFKC: [0x0626, 0x06C8], NFKD: [0x064A, 0x0654, 0x06C8] }, +{ source: [0xFBF6], NFC: [0xFBF6], NFD: [0xFBF6], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] }, +{ source: [0xFBF7], NFC: [0xFBF7], NFD: [0xFBF7], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] }, +{ source: [0xFBF8], NFC: [0xFBF8], NFD: [0xFBF8], NFKC: [0x0626, 0x06D0], NFKD: [0x064A, 0x0654, 0x06D0] }, +{ source: [0xFBF9], NFC: [0xFBF9], NFD: [0xFBF9], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFBFA], NFC: [0xFBFA], NFD: [0xFBFA], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFBFB], NFC: [0xFBFB], NFD: [0xFBFB], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFBFC], NFC: [0xFBFC], NFD: [0xFBFC], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFBFD], NFC: [0xFBFD], NFD: [0xFBFD], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFBFE], NFC: [0xFBFE], NFD: [0xFBFE], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFBFF], NFC: [0xFBFF], NFD: [0xFBFF], NFKC: [0x06CC], NFKD: [0x06CC] }, +{ source: [0xFC00], NFC: [0xFC00], NFD: [0xFC00], NFKC: [0x0626, 0x062C], NFKD: [0x064A, 0x0654, 0x062C] }, +{ source: [0xFC01], NFC: [0xFC01], NFD: [0xFC01], NFKC: [0x0626, 0x062D], NFKD: [0x064A, 0x0654, 0x062D] }, +{ source: [0xFC02], NFC: [0xFC02], NFD: [0xFC02], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFC03], NFC: [0xFC03], NFD: [0xFC03], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFC04], NFC: [0xFC04], NFD: [0xFC04], NFKC: [0x0626, 0x064A], NFKD: [0x064A, 0x0654, 0x064A] }, +{ source: [0xFC05], NFC: [0xFC05], NFD: [0xFC05], NFKC: [0x0628, 0x062C], NFKD: [0x0628, 0x062C] }, +{ source: [0xFC06], NFC: [0xFC06], NFD: [0xFC06], NFKC: [0x0628, 0x062D], NFKD: [0x0628, 0x062D] }, +{ source: [0xFC07], NFC: [0xFC07], NFD: [0xFC07], NFKC: [0x0628, 0x062E], NFKD: [0x0628, 0x062E] }, +{ source: [0xFC08], NFC: [0xFC08], NFD: [0xFC08], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFC09], NFC: [0xFC09], NFD: [0xFC09], NFKC: [0x0628, 0x0649], NFKD: [0x0628, 0x0649] }, +{ source: [0xFC0A], NFC: [0xFC0A], NFD: [0xFC0A], NFKC: [0x0628, 0x064A], NFKD: [0x0628, 0x064A] }, +{ source: [0xFC0B], NFC: [0xFC0B], NFD: [0xFC0B], NFKC: [0x062A, 0x062C], NFKD: [0x062A, 0x062C] }, +{ source: [0xFC0C], NFC: [0xFC0C], NFD: [0xFC0C], NFKC: [0x062A, 0x062D], NFKD: [0x062A, 0x062D] }, +{ source: [0xFC0D], NFC: [0xFC0D], NFD: [0xFC0D], NFKC: [0x062A, 0x062E], NFKD: [0x062A, 0x062E] }, +{ source: [0xFC0E], NFC: [0xFC0E], NFD: [0xFC0E], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFC0F], NFC: [0xFC0F], NFD: [0xFC0F], NFKC: [0x062A, 0x0649], NFKD: [0x062A, 0x0649] }, +{ source: [0xFC10], NFC: [0xFC10], NFD: [0xFC10], NFKC: [0x062A, 0x064A], NFKD: [0x062A, 0x064A] }, +{ source: [0xFC11], NFC: [0xFC11], NFD: [0xFC11], NFKC: [0x062B, 0x062C], NFKD: [0x062B, 0x062C] }, +{ source: [0xFC12], NFC: [0xFC12], NFD: [0xFC12], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFC13], NFC: [0xFC13], NFD: [0xFC13], NFKC: [0x062B, 0x0649], NFKD: [0x062B, 0x0649] }, +{ source: [0xFC14], NFC: [0xFC14], NFD: [0xFC14], NFKC: [0x062B, 0x064A], NFKD: [0x062B, 0x064A] }, +{ source: [0xFC15], NFC: [0xFC15], NFD: [0xFC15], NFKC: [0x062C, 0x062D], NFKD: [0x062C, 0x062D] }, +{ source: [0xFC16], NFC: [0xFC16], NFD: [0xFC16], NFKC: [0x062C, 0x0645], NFKD: [0x062C, 0x0645] }, +{ source: [0xFC17], NFC: [0xFC17], NFD: [0xFC17], NFKC: [0x062D, 0x062C], NFKD: [0x062D, 0x062C] }, +{ source: [0xFC18], NFC: [0xFC18], NFD: [0xFC18], NFKC: [0x062D, 0x0645], NFKD: [0x062D, 0x0645] }, +{ source: [0xFC19], NFC: [0xFC19], NFD: [0xFC19], NFKC: [0x062E, 0x062C], NFKD: [0x062E, 0x062C] }, +{ source: [0xFC1A], NFC: [0xFC1A], NFD: [0xFC1A], NFKC: [0x062E, 0x062D], NFKD: [0x062E, 0x062D] }, +{ source: [0xFC1B], NFC: [0xFC1B], NFD: [0xFC1B], NFKC: [0x062E, 0x0645], NFKD: [0x062E, 0x0645] }, +{ source: [0xFC1C], NFC: [0xFC1C], NFD: [0xFC1C], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] }, +{ source: [0xFC1D], NFC: [0xFC1D], NFD: [0xFC1D], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] }, +{ source: [0xFC1E], NFC: [0xFC1E], NFD: [0xFC1E], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] }, +{ source: [0xFC1F], NFC: [0xFC1F], NFD: [0xFC1F], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] }, +{ source: [0xFC20], NFC: [0xFC20], NFD: [0xFC20], NFKC: [0x0635, 0x062D], NFKD: [0x0635, 0x062D] }, +{ source: [0xFC21], NFC: [0xFC21], NFD: [0xFC21], NFKC: [0x0635, 0x0645], NFKD: [0x0635, 0x0645] }, +{ source: [0xFC22], NFC: [0xFC22], NFD: [0xFC22], NFKC: [0x0636, 0x062C], NFKD: [0x0636, 0x062C] }, +{ source: [0xFC23], NFC: [0xFC23], NFD: [0xFC23], NFKC: [0x0636, 0x062D], NFKD: [0x0636, 0x062D] }, +{ source: [0xFC24], NFC: [0xFC24], NFD: [0xFC24], NFKC: [0x0636, 0x062E], NFKD: [0x0636, 0x062E] }, +{ source: [0xFC25], NFC: [0xFC25], NFD: [0xFC25], NFKC: [0x0636, 0x0645], NFKD: [0x0636, 0x0645] }, +{ source: [0xFC26], NFC: [0xFC26], NFD: [0xFC26], NFKC: [0x0637, 0x062D], NFKD: [0x0637, 0x062D] }, +{ source: [0xFC27], NFC: [0xFC27], NFD: [0xFC27], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] }, +{ source: [0xFC28], NFC: [0xFC28], NFD: [0xFC28], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] }, +{ source: [0xFC29], NFC: [0xFC29], NFD: [0xFC29], NFKC: [0x0639, 0x062C], NFKD: [0x0639, 0x062C] }, +{ source: [0xFC2A], NFC: [0xFC2A], NFD: [0xFC2A], NFKC: [0x0639, 0x0645], NFKD: [0x0639, 0x0645] }, +{ source: [0xFC2B], NFC: [0xFC2B], NFD: [0xFC2B], NFKC: [0x063A, 0x062C], NFKD: [0x063A, 0x062C] }, +{ source: [0xFC2C], NFC: [0xFC2C], NFD: [0xFC2C], NFKC: [0x063A, 0x0645], NFKD: [0x063A, 0x0645] }, +{ source: [0xFC2D], NFC: [0xFC2D], NFD: [0xFC2D], NFKC: [0x0641, 0x062C], NFKD: [0x0641, 0x062C] }, +{ source: [0xFC2E], NFC: [0xFC2E], NFD: [0xFC2E], NFKC: [0x0641, 0x062D], NFKD: [0x0641, 0x062D] }, +{ source: [0xFC2F], NFC: [0xFC2F], NFD: [0xFC2F], NFKC: [0x0641, 0x062E], NFKD: [0x0641, 0x062E] }, +{ source: [0xFC30], NFC: [0xFC30], NFD: [0xFC30], NFKC: [0x0641, 0x0645], NFKD: [0x0641, 0x0645] }, +{ source: [0xFC31], NFC: [0xFC31], NFD: [0xFC31], NFKC: [0x0641, 0x0649], NFKD: [0x0641, 0x0649] }, +{ source: [0xFC32], NFC: [0xFC32], NFD: [0xFC32], NFKC: [0x0641, 0x064A], NFKD: [0x0641, 0x064A] }, +{ source: [0xFC33], NFC: [0xFC33], NFD: [0xFC33], NFKC: [0x0642, 0x062D], NFKD: [0x0642, 0x062D] }, +{ source: [0xFC34], NFC: [0xFC34], NFD: [0xFC34], NFKC: [0x0642, 0x0645], NFKD: [0x0642, 0x0645] }, +{ source: [0xFC35], NFC: [0xFC35], NFD: [0xFC35], NFKC: [0x0642, 0x0649], NFKD: [0x0642, 0x0649] }, +{ source: [0xFC36], NFC: [0xFC36], NFD: [0xFC36], NFKC: [0x0642, 0x064A], NFKD: [0x0642, 0x064A] }, +{ source: [0xFC37], NFC: [0xFC37], NFD: [0xFC37], NFKC: [0x0643, 0x0627], NFKD: [0x0643, 0x0627] }, +{ source: [0xFC38], NFC: [0xFC38], NFD: [0xFC38], NFKC: [0x0643, 0x062C], NFKD: [0x0643, 0x062C] }, +{ source: [0xFC39], NFC: [0xFC39], NFD: [0xFC39], NFKC: [0x0643, 0x062D], NFKD: [0x0643, 0x062D] }, +{ source: [0xFC3A], NFC: [0xFC3A], NFD: [0xFC3A], NFKC: [0x0643, 0x062E], NFKD: [0x0643, 0x062E] }, +{ source: [0xFC3B], NFC: [0xFC3B], NFD: [0xFC3B], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFC3C], NFC: [0xFC3C], NFD: [0xFC3C], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFC3D], NFC: [0xFC3D], NFD: [0xFC3D], NFKC: [0x0643, 0x0649], NFKD: [0x0643, 0x0649] }, +{ source: [0xFC3E], NFC: [0xFC3E], NFD: [0xFC3E], NFKC: [0x0643, 0x064A], NFKD: [0x0643, 0x064A] }, +{ source: [0xFC3F], NFC: [0xFC3F], NFD: [0xFC3F], NFKC: [0x0644, 0x062C], NFKD: [0x0644, 0x062C] }, +{ source: [0xFC40], NFC: [0xFC40], NFD: [0xFC40], NFKC: [0x0644, 0x062D], NFKD: [0x0644, 0x062D] }, +{ source: [0xFC41], NFC: [0xFC41], NFD: [0xFC41], NFKC: [0x0644, 0x062E], NFKD: [0x0644, 0x062E] }, +{ source: [0xFC42], NFC: [0xFC42], NFD: [0xFC42], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFC43], NFC: [0xFC43], NFD: [0xFC43], NFKC: [0x0644, 0x0649], NFKD: [0x0644, 0x0649] }, +{ source: [0xFC44], NFC: [0xFC44], NFD: [0xFC44], NFKC: [0x0644, 0x064A], NFKD: [0x0644, 0x064A] }, +{ source: [0xFC45], NFC: [0xFC45], NFD: [0xFC45], NFKC: [0x0645, 0x062C], NFKD: [0x0645, 0x062C] }, +{ source: [0xFC46], NFC: [0xFC46], NFD: [0xFC46], NFKC: [0x0645, 0x062D], NFKD: [0x0645, 0x062D] }, +{ source: [0xFC47], NFC: [0xFC47], NFD: [0xFC47], NFKC: [0x0645, 0x062E], NFKD: [0x0645, 0x062E] }, +{ source: [0xFC48], NFC: [0xFC48], NFD: [0xFC48], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] }, +{ source: [0xFC49], NFC: [0xFC49], NFD: [0xFC49], NFKC: [0x0645, 0x0649], NFKD: [0x0645, 0x0649] }, +{ source: [0xFC4A], NFC: [0xFC4A], NFD: [0xFC4A], NFKC: [0x0645, 0x064A], NFKD: [0x0645, 0x064A] }, +{ source: [0xFC4B], NFC: [0xFC4B], NFD: [0xFC4B], NFKC: [0x0646, 0x062C], NFKD: [0x0646, 0x062C] }, +{ source: [0xFC4C], NFC: [0xFC4C], NFD: [0xFC4C], NFKC: [0x0646, 0x062D], NFKD: [0x0646, 0x062D] }, +{ source: [0xFC4D], NFC: [0xFC4D], NFD: [0xFC4D], NFKC: [0x0646, 0x062E], NFKD: [0x0646, 0x062E] }, +{ source: [0xFC4E], NFC: [0xFC4E], NFD: [0xFC4E], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFC4F], NFC: [0xFC4F], NFD: [0xFC4F], NFKC: [0x0646, 0x0649], NFKD: [0x0646, 0x0649] }, +{ source: [0xFC50], NFC: [0xFC50], NFD: [0xFC50], NFKC: [0x0646, 0x064A], NFKD: [0x0646, 0x064A] }, +{ source: [0xFC51], NFC: [0xFC51], NFD: [0xFC51], NFKC: [0x0647, 0x062C], NFKD: [0x0647, 0x062C] }, +{ source: [0xFC52], NFC: [0xFC52], NFD: [0xFC52], NFKC: [0x0647, 0x0645], NFKD: [0x0647, 0x0645] }, +{ source: [0xFC53], NFC: [0xFC53], NFD: [0xFC53], NFKC: [0x0647, 0x0649], NFKD: [0x0647, 0x0649] }, +{ source: [0xFC54], NFC: [0xFC54], NFD: [0xFC54], NFKC: [0x0647, 0x064A], NFKD: [0x0647, 0x064A] }, +{ source: [0xFC55], NFC: [0xFC55], NFD: [0xFC55], NFKC: [0x064A, 0x062C], NFKD: [0x064A, 0x062C] }, +{ source: [0xFC56], NFC: [0xFC56], NFD: [0xFC56], NFKC: [0x064A, 0x062D], NFKD: [0x064A, 0x062D] }, +{ source: [0xFC57], NFC: [0xFC57], NFD: [0xFC57], NFKC: [0x064A, 0x062E], NFKD: [0x064A, 0x062E] }, +{ source: [0xFC58], NFC: [0xFC58], NFD: [0xFC58], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFC59], NFC: [0xFC59], NFD: [0xFC59], NFKC: [0x064A, 0x0649], NFKD: [0x064A, 0x0649] }, +{ source: [0xFC5A], NFC: [0xFC5A], NFD: [0xFC5A], NFKC: [0x064A, 0x064A], NFKD: [0x064A, 0x064A] }, +{ source: [0xFC5B], NFC: [0xFC5B], NFD: [0xFC5B], NFKC: [0x0630, 0x0670], NFKD: [0x0630, 0x0670] }, +{ source: [0xFC5C], NFC: [0xFC5C], NFD: [0xFC5C], NFKC: [0x0631, 0x0670], NFKD: [0x0631, 0x0670] }, +{ source: [0xFC5D], NFC: [0xFC5D], NFD: [0xFC5D], NFKC: [0x0649, 0x0670], NFKD: [0x0649, 0x0670] }, +{ source: [0xFC5E], NFC: [0xFC5E], NFD: [0xFC5E], NFKC: [0x0020, 0x064C, 0x0651], NFKD: [0x0020, 0x064C, 0x0651] }, +{ source: [0xFC5F], NFC: [0xFC5F], NFD: [0xFC5F], NFKC: [0x0020, 0x064D, 0x0651], NFKD: [0x0020, 0x064D, 0x0651] }, +{ source: [0xFC60], NFC: [0xFC60], NFD: [0xFC60], NFKC: [0x0020, 0x064E, 0x0651], NFKD: [0x0020, 0x064E, 0x0651] }, +{ source: [0xFC61], NFC: [0xFC61], NFD: [0xFC61], NFKC: [0x0020, 0x064F, 0x0651], NFKD: [0x0020, 0x064F, 0x0651] }, +{ source: [0xFC62], NFC: [0xFC62], NFD: [0xFC62], NFKC: [0x0020, 0x0650, 0x0651], NFKD: [0x0020, 0x0650, 0x0651] }, +{ source: [0xFC63], NFC: [0xFC63], NFD: [0xFC63], NFKC: [0x0020, 0x0651, 0x0670], NFKD: [0x0020, 0x0651, 0x0670] }, +{ source: [0xFC64], NFC: [0xFC64], NFD: [0xFC64], NFKC: [0x0626, 0x0631], NFKD: [0x064A, 0x0654, 0x0631] }, +{ source: [0xFC65], NFC: [0xFC65], NFD: [0xFC65], NFKC: [0x0626, 0x0632], NFKD: [0x064A, 0x0654, 0x0632] }, +{ source: [0xFC66], NFC: [0xFC66], NFD: [0xFC66], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFC67], NFC: [0xFC67], NFD: [0xFC67], NFKC: [0x0626, 0x0646], NFKD: [0x064A, 0x0654, 0x0646] }, +{ source: [0xFC68], NFC: [0xFC68], NFD: [0xFC68], NFKC: [0x0626, 0x0649], NFKD: [0x064A, 0x0654, 0x0649] }, +{ source: [0xFC69], NFC: [0xFC69], NFD: [0xFC69], NFKC: [0x0626, 0x064A], NFKD: [0x064A, 0x0654, 0x064A] }, +{ source: [0xFC6A], NFC: [0xFC6A], NFD: [0xFC6A], NFKC: [0x0628, 0x0631], NFKD: [0x0628, 0x0631] }, +{ source: [0xFC6B], NFC: [0xFC6B], NFD: [0xFC6B], NFKC: [0x0628, 0x0632], NFKD: [0x0628, 0x0632] }, +{ source: [0xFC6C], NFC: [0xFC6C], NFD: [0xFC6C], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFC6D], NFC: [0xFC6D], NFD: [0xFC6D], NFKC: [0x0628, 0x0646], NFKD: [0x0628, 0x0646] }, +{ source: [0xFC6E], NFC: [0xFC6E], NFD: [0xFC6E], NFKC: [0x0628, 0x0649], NFKD: [0x0628, 0x0649] }, +{ source: [0xFC6F], NFC: [0xFC6F], NFD: [0xFC6F], NFKC: [0x0628, 0x064A], NFKD: [0x0628, 0x064A] }, +{ source: [0xFC70], NFC: [0xFC70], NFD: [0xFC70], NFKC: [0x062A, 0x0631], NFKD: [0x062A, 0x0631] }, +{ source: [0xFC71], NFC: [0xFC71], NFD: [0xFC71], NFKC: [0x062A, 0x0632], NFKD: [0x062A, 0x0632] }, +{ source: [0xFC72], NFC: [0xFC72], NFD: [0xFC72], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFC73], NFC: [0xFC73], NFD: [0xFC73], NFKC: [0x062A, 0x0646], NFKD: [0x062A, 0x0646] }, +{ source: [0xFC74], NFC: [0xFC74], NFD: [0xFC74], NFKC: [0x062A, 0x0649], NFKD: [0x062A, 0x0649] }, +{ source: [0xFC75], NFC: [0xFC75], NFD: [0xFC75], NFKC: [0x062A, 0x064A], NFKD: [0x062A, 0x064A] }, +{ source: [0xFC76], NFC: [0xFC76], NFD: [0xFC76], NFKC: [0x062B, 0x0631], NFKD: [0x062B, 0x0631] }, +{ source: [0xFC77], NFC: [0xFC77], NFD: [0xFC77], NFKC: [0x062B, 0x0632], NFKD: [0x062B, 0x0632] }, +{ source: [0xFC78], NFC: [0xFC78], NFD: [0xFC78], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFC79], NFC: [0xFC79], NFD: [0xFC79], NFKC: [0x062B, 0x0646], NFKD: [0x062B, 0x0646] }, +{ source: [0xFC7A], NFC: [0xFC7A], NFD: [0xFC7A], NFKC: [0x062B, 0x0649], NFKD: [0x062B, 0x0649] }, +{ source: [0xFC7B], NFC: [0xFC7B], NFD: [0xFC7B], NFKC: [0x062B, 0x064A], NFKD: [0x062B, 0x064A] }, +{ source: [0xFC7C], NFC: [0xFC7C], NFD: [0xFC7C], NFKC: [0x0641, 0x0649], NFKD: [0x0641, 0x0649] }, +{ source: [0xFC7D], NFC: [0xFC7D], NFD: [0xFC7D], NFKC: [0x0641, 0x064A], NFKD: [0x0641, 0x064A] }, +{ source: [0xFC7E], NFC: [0xFC7E], NFD: [0xFC7E], NFKC: [0x0642, 0x0649], NFKD: [0x0642, 0x0649] }, +{ source: [0xFC7F], NFC: [0xFC7F], NFD: [0xFC7F], NFKC: [0x0642, 0x064A], NFKD: [0x0642, 0x064A] }, +{ source: [0xFC80], NFC: [0xFC80], NFD: [0xFC80], NFKC: [0x0643, 0x0627], NFKD: [0x0643, 0x0627] }, +{ source: [0xFC81], NFC: [0xFC81], NFD: [0xFC81], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFC82], NFC: [0xFC82], NFD: [0xFC82], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFC83], NFC: [0xFC83], NFD: [0xFC83], NFKC: [0x0643, 0x0649], NFKD: [0x0643, 0x0649] }, +{ source: [0xFC84], NFC: [0xFC84], NFD: [0xFC84], NFKC: [0x0643, 0x064A], NFKD: [0x0643, 0x064A] }, +{ source: [0xFC85], NFC: [0xFC85], NFD: [0xFC85], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFC86], NFC: [0xFC86], NFD: [0xFC86], NFKC: [0x0644, 0x0649], NFKD: [0x0644, 0x0649] }, +{ source: [0xFC87], NFC: [0xFC87], NFD: [0xFC87], NFKC: [0x0644, 0x064A], NFKD: [0x0644, 0x064A] }, +{ source: [0xFC88], NFC: [0xFC88], NFD: [0xFC88], NFKC: [0x0645, 0x0627], NFKD: [0x0645, 0x0627] }, +{ source: [0xFC89], NFC: [0xFC89], NFD: [0xFC89], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] }, +{ source: [0xFC8A], NFC: [0xFC8A], NFD: [0xFC8A], NFKC: [0x0646, 0x0631], NFKD: [0x0646, 0x0631] }, +{ source: [0xFC8B], NFC: [0xFC8B], NFD: [0xFC8B], NFKC: [0x0646, 0x0632], NFKD: [0x0646, 0x0632] }, +{ source: [0xFC8C], NFC: [0xFC8C], NFD: [0xFC8C], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFC8D], NFC: [0xFC8D], NFD: [0xFC8D], NFKC: [0x0646, 0x0646], NFKD: [0x0646, 0x0646] }, +{ source: [0xFC8E], NFC: [0xFC8E], NFD: [0xFC8E], NFKC: [0x0646, 0x0649], NFKD: [0x0646, 0x0649] }, +{ source: [0xFC8F], NFC: [0xFC8F], NFD: [0xFC8F], NFKC: [0x0646, 0x064A], NFKD: [0x0646, 0x064A] }, +{ source: [0xFC90], NFC: [0xFC90], NFD: [0xFC90], NFKC: [0x0649, 0x0670], NFKD: [0x0649, 0x0670] }, +{ source: [0xFC91], NFC: [0xFC91], NFD: [0xFC91], NFKC: [0x064A, 0x0631], NFKD: [0x064A, 0x0631] }, +{ source: [0xFC92], NFC: [0xFC92], NFD: [0xFC92], NFKC: [0x064A, 0x0632], NFKD: [0x064A, 0x0632] }, +{ source: [0xFC93], NFC: [0xFC93], NFD: [0xFC93], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFC94], NFC: [0xFC94], NFD: [0xFC94], NFKC: [0x064A, 0x0646], NFKD: [0x064A, 0x0646] }, +{ source: [0xFC95], NFC: [0xFC95], NFD: [0xFC95], NFKC: [0x064A, 0x0649], NFKD: [0x064A, 0x0649] }, +{ source: [0xFC96], NFC: [0xFC96], NFD: [0xFC96], NFKC: [0x064A, 0x064A], NFKD: [0x064A, 0x064A] }, +{ source: [0xFC97], NFC: [0xFC97], NFD: [0xFC97], NFKC: [0x0626, 0x062C], NFKD: [0x064A, 0x0654, 0x062C] }, +{ source: [0xFC98], NFC: [0xFC98], NFD: [0xFC98], NFKC: [0x0626, 0x062D], NFKD: [0x064A, 0x0654, 0x062D] }, +{ source: [0xFC99], NFC: [0xFC99], NFD: [0xFC99], NFKC: [0x0626, 0x062E], NFKD: [0x064A, 0x0654, 0x062E] }, +{ source: [0xFC9A], NFC: [0xFC9A], NFD: [0xFC9A], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFC9B], NFC: [0xFC9B], NFD: [0xFC9B], NFKC: [0x0626, 0x0647], NFKD: [0x064A, 0x0654, 0x0647] }, +{ source: [0xFC9C], NFC: [0xFC9C], NFD: [0xFC9C], NFKC: [0x0628, 0x062C], NFKD: [0x0628, 0x062C] }, +{ source: [0xFC9D], NFC: [0xFC9D], NFD: [0xFC9D], NFKC: [0x0628, 0x062D], NFKD: [0x0628, 0x062D] }, +{ source: [0xFC9E], NFC: [0xFC9E], NFD: [0xFC9E], NFKC: [0x0628, 0x062E], NFKD: [0x0628, 0x062E] }, +{ source: [0xFC9F], NFC: [0xFC9F], NFD: [0xFC9F], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFCA0], NFC: [0xFCA0], NFD: [0xFCA0], NFKC: [0x0628, 0x0647], NFKD: [0x0628, 0x0647] }, +{ source: [0xFCA1], NFC: [0xFCA1], NFD: [0xFCA1], NFKC: [0x062A, 0x062C], NFKD: [0x062A, 0x062C] }, +{ source: [0xFCA2], NFC: [0xFCA2], NFD: [0xFCA2], NFKC: [0x062A, 0x062D], NFKD: [0x062A, 0x062D] }, +{ source: [0xFCA3], NFC: [0xFCA3], NFD: [0xFCA3], NFKC: [0x062A, 0x062E], NFKD: [0x062A, 0x062E] }, +{ source: [0xFCA4], NFC: [0xFCA4], NFD: [0xFCA4], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFCA5], NFC: [0xFCA5], NFD: [0xFCA5], NFKC: [0x062A, 0x0647], NFKD: [0x062A, 0x0647] }, +{ source: [0xFCA6], NFC: [0xFCA6], NFD: [0xFCA6], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFCA7], NFC: [0xFCA7], NFD: [0xFCA7], NFKC: [0x062C, 0x062D], NFKD: [0x062C, 0x062D] }, +{ source: [0xFCA8], NFC: [0xFCA8], NFD: [0xFCA8], NFKC: [0x062C, 0x0645], NFKD: [0x062C, 0x0645] }, +{ source: [0xFCA9], NFC: [0xFCA9], NFD: [0xFCA9], NFKC: [0x062D, 0x062C], NFKD: [0x062D, 0x062C] }, +{ source: [0xFCAA], NFC: [0xFCAA], NFD: [0xFCAA], NFKC: [0x062D, 0x0645], NFKD: [0x062D, 0x0645] }, +{ source: [0xFCAB], NFC: [0xFCAB], NFD: [0xFCAB], NFKC: [0x062E, 0x062C], NFKD: [0x062E, 0x062C] }, +{ source: [0xFCAC], NFC: [0xFCAC], NFD: [0xFCAC], NFKC: [0x062E, 0x0645], NFKD: [0x062E, 0x0645] }, +{ source: [0xFCAD], NFC: [0xFCAD], NFD: [0xFCAD], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] }, +{ source: [0xFCAE], NFC: [0xFCAE], NFD: [0xFCAE], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] }, +{ source: [0xFCAF], NFC: [0xFCAF], NFD: [0xFCAF], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] }, +{ source: [0xFCB0], NFC: [0xFCB0], NFD: [0xFCB0], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] }, +{ source: [0xFCB1], NFC: [0xFCB1], NFD: [0xFCB1], NFKC: [0x0635, 0x062D], NFKD: [0x0635, 0x062D] }, +{ source: [0xFCB2], NFC: [0xFCB2], NFD: [0xFCB2], NFKC: [0x0635, 0x062E], NFKD: [0x0635, 0x062E] }, +{ source: [0xFCB3], NFC: [0xFCB3], NFD: [0xFCB3], NFKC: [0x0635, 0x0645], NFKD: [0x0635, 0x0645] }, +{ source: [0xFCB4], NFC: [0xFCB4], NFD: [0xFCB4], NFKC: [0x0636, 0x062C], NFKD: [0x0636, 0x062C] }, +{ source: [0xFCB5], NFC: [0xFCB5], NFD: [0xFCB5], NFKC: [0x0636, 0x062D], NFKD: [0x0636, 0x062D] }, +{ source: [0xFCB6], NFC: [0xFCB6], NFD: [0xFCB6], NFKC: [0x0636, 0x062E], NFKD: [0x0636, 0x062E] }, +{ source: [0xFCB7], NFC: [0xFCB7], NFD: [0xFCB7], NFKC: [0x0636, 0x0645], NFKD: [0x0636, 0x0645] }, +{ source: [0xFCB8], NFC: [0xFCB8], NFD: [0xFCB8], NFKC: [0x0637, 0x062D], NFKD: [0x0637, 0x062D] }, +{ source: [0xFCB9], NFC: [0xFCB9], NFD: [0xFCB9], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] }, +{ source: [0xFCBA], NFC: [0xFCBA], NFD: [0xFCBA], NFKC: [0x0639, 0x062C], NFKD: [0x0639, 0x062C] }, +{ source: [0xFCBB], NFC: [0xFCBB], NFD: [0xFCBB], NFKC: [0x0639, 0x0645], NFKD: [0x0639, 0x0645] }, +{ source: [0xFCBC], NFC: [0xFCBC], NFD: [0xFCBC], NFKC: [0x063A, 0x062C], NFKD: [0x063A, 0x062C] }, +{ source: [0xFCBD], NFC: [0xFCBD], NFD: [0xFCBD], NFKC: [0x063A, 0x0645], NFKD: [0x063A, 0x0645] }, +{ source: [0xFCBE], NFC: [0xFCBE], NFD: [0xFCBE], NFKC: [0x0641, 0x062C], NFKD: [0x0641, 0x062C] }, +{ source: [0xFCBF], NFC: [0xFCBF], NFD: [0xFCBF], NFKC: [0x0641, 0x062D], NFKD: [0x0641, 0x062D] }, +{ source: [0xFCC0], NFC: [0xFCC0], NFD: [0xFCC0], NFKC: [0x0641, 0x062E], NFKD: [0x0641, 0x062E] }, +{ source: [0xFCC1], NFC: [0xFCC1], NFD: [0xFCC1], NFKC: [0x0641, 0x0645], NFKD: [0x0641, 0x0645] }, +{ source: [0xFCC2], NFC: [0xFCC2], NFD: [0xFCC2], NFKC: [0x0642, 0x062D], NFKD: [0x0642, 0x062D] }, +{ source: [0xFCC3], NFC: [0xFCC3], NFD: [0xFCC3], NFKC: [0x0642, 0x0645], NFKD: [0x0642, 0x0645] }, +{ source: [0xFCC4], NFC: [0xFCC4], NFD: [0xFCC4], NFKC: [0x0643, 0x062C], NFKD: [0x0643, 0x062C] }, +{ source: [0xFCC5], NFC: [0xFCC5], NFD: [0xFCC5], NFKC: [0x0643, 0x062D], NFKD: [0x0643, 0x062D] }, +{ source: [0xFCC6], NFC: [0xFCC6], NFD: [0xFCC6], NFKC: [0x0643, 0x062E], NFKD: [0x0643, 0x062E] }, +{ source: [0xFCC7], NFC: [0xFCC7], NFD: [0xFCC7], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFCC8], NFC: [0xFCC8], NFD: [0xFCC8], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFCC9], NFC: [0xFCC9], NFD: [0xFCC9], NFKC: [0x0644, 0x062C], NFKD: [0x0644, 0x062C] }, +{ source: [0xFCCA], NFC: [0xFCCA], NFD: [0xFCCA], NFKC: [0x0644, 0x062D], NFKD: [0x0644, 0x062D] }, +{ source: [0xFCCB], NFC: [0xFCCB], NFD: [0xFCCB], NFKC: [0x0644, 0x062E], NFKD: [0x0644, 0x062E] }, +{ source: [0xFCCC], NFC: [0xFCCC], NFD: [0xFCCC], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFCCD], NFC: [0xFCCD], NFD: [0xFCCD], NFKC: [0x0644, 0x0647], NFKD: [0x0644, 0x0647] }, +{ source: [0xFCCE], NFC: [0xFCCE], NFD: [0xFCCE], NFKC: [0x0645, 0x062C], NFKD: [0x0645, 0x062C] }, +{ source: [0xFCCF], NFC: [0xFCCF], NFD: [0xFCCF], NFKC: [0x0645, 0x062D], NFKD: [0x0645, 0x062D] }, +{ source: [0xFCD0], NFC: [0xFCD0], NFD: [0xFCD0], NFKC: [0x0645, 0x062E], NFKD: [0x0645, 0x062E] }, +{ source: [0xFCD1], NFC: [0xFCD1], NFD: [0xFCD1], NFKC: [0x0645, 0x0645], NFKD: [0x0645, 0x0645] }, +{ source: [0xFCD2], NFC: [0xFCD2], NFD: [0xFCD2], NFKC: [0x0646, 0x062C], NFKD: [0x0646, 0x062C] }, +{ source: [0xFCD3], NFC: [0xFCD3], NFD: [0xFCD3], NFKC: [0x0646, 0x062D], NFKD: [0x0646, 0x062D] }, +{ source: [0xFCD4], NFC: [0xFCD4], NFD: [0xFCD4], NFKC: [0x0646, 0x062E], NFKD: [0x0646, 0x062E] }, +{ source: [0xFCD5], NFC: [0xFCD5], NFD: [0xFCD5], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFCD6], NFC: [0xFCD6], NFD: [0xFCD6], NFKC: [0x0646, 0x0647], NFKD: [0x0646, 0x0647] }, +{ source: [0xFCD7], NFC: [0xFCD7], NFD: [0xFCD7], NFKC: [0x0647, 0x062C], NFKD: [0x0647, 0x062C] }, +{ source: [0xFCD8], NFC: [0xFCD8], NFD: [0xFCD8], NFKC: [0x0647, 0x0645], NFKD: [0x0647, 0x0645] }, +{ source: [0xFCD9], NFC: [0xFCD9], NFD: [0xFCD9], NFKC: [0x0647, 0x0670], NFKD: [0x0647, 0x0670] }, +{ source: [0xFCDA], NFC: [0xFCDA], NFD: [0xFCDA], NFKC: [0x064A, 0x062C], NFKD: [0x064A, 0x062C] }, +{ source: [0xFCDB], NFC: [0xFCDB], NFD: [0xFCDB], NFKC: [0x064A, 0x062D], NFKD: [0x064A, 0x062D] }, +{ source: [0xFCDC], NFC: [0xFCDC], NFD: [0xFCDC], NFKC: [0x064A, 0x062E], NFKD: [0x064A, 0x062E] }, +{ source: [0xFCDD], NFC: [0xFCDD], NFD: [0xFCDD], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFCDE], NFC: [0xFCDE], NFD: [0xFCDE], NFKC: [0x064A, 0x0647], NFKD: [0x064A, 0x0647] }, +{ source: [0xFCDF], NFC: [0xFCDF], NFD: [0xFCDF], NFKC: [0x0626, 0x0645], NFKD: [0x064A, 0x0654, 0x0645] }, +{ source: [0xFCE0], NFC: [0xFCE0], NFD: [0xFCE0], NFKC: [0x0626, 0x0647], NFKD: [0x064A, 0x0654, 0x0647] }, +{ source: [0xFCE1], NFC: [0xFCE1], NFD: [0xFCE1], NFKC: [0x0628, 0x0645], NFKD: [0x0628, 0x0645] }, +{ source: [0xFCE2], NFC: [0xFCE2], NFD: [0xFCE2], NFKC: [0x0628, 0x0647], NFKD: [0x0628, 0x0647] }, +{ source: [0xFCE3], NFC: [0xFCE3], NFD: [0xFCE3], NFKC: [0x062A, 0x0645], NFKD: [0x062A, 0x0645] }, +{ source: [0xFCE4], NFC: [0xFCE4], NFD: [0xFCE4], NFKC: [0x062A, 0x0647], NFKD: [0x062A, 0x0647] }, +{ source: [0xFCE5], NFC: [0xFCE5], NFD: [0xFCE5], NFKC: [0x062B, 0x0645], NFKD: [0x062B, 0x0645] }, +{ source: [0xFCE6], NFC: [0xFCE6], NFD: [0xFCE6], NFKC: [0x062B, 0x0647], NFKD: [0x062B, 0x0647] }, +{ source: [0xFCE7], NFC: [0xFCE7], NFD: [0xFCE7], NFKC: [0x0633, 0x0645], NFKD: [0x0633, 0x0645] }, +{ source: [0xFCE8], NFC: [0xFCE8], NFD: [0xFCE8], NFKC: [0x0633, 0x0647], NFKD: [0x0633, 0x0647] }, +{ source: [0xFCE9], NFC: [0xFCE9], NFD: [0xFCE9], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFCEA], NFC: [0xFCEA], NFD: [0xFCEA], NFKC: [0x0634, 0x0647], NFKD: [0x0634, 0x0647] }, +{ source: [0xFCEB], NFC: [0xFCEB], NFD: [0xFCEB], NFKC: [0x0643, 0x0644], NFKD: [0x0643, 0x0644] }, +{ source: [0xFCEC], NFC: [0xFCEC], NFD: [0xFCEC], NFKC: [0x0643, 0x0645], NFKD: [0x0643, 0x0645] }, +{ source: [0xFCED], NFC: [0xFCED], NFD: [0xFCED], NFKC: [0x0644, 0x0645], NFKD: [0x0644, 0x0645] }, +{ source: [0xFCEE], NFC: [0xFCEE], NFD: [0xFCEE], NFKC: [0x0646, 0x0645], NFKD: [0x0646, 0x0645] }, +{ source: [0xFCEF], NFC: [0xFCEF], NFD: [0xFCEF], NFKC: [0x0646, 0x0647], NFKD: [0x0646, 0x0647] }, +{ source: [0xFCF0], NFC: [0xFCF0], NFD: [0xFCF0], NFKC: [0x064A, 0x0645], NFKD: [0x064A, 0x0645] }, +{ source: [0xFCF1], NFC: [0xFCF1], NFD: [0xFCF1], NFKC: [0x064A, 0x0647], NFKD: [0x064A, 0x0647] }, +{ source: [0xFCF2], NFC: [0xFCF2], NFD: [0xFCF2], NFKC: [0x0640, 0x064E, 0x0651], NFKD: [0x0640, 0x064E, 0x0651] }, +{ source: [0xFCF3], NFC: [0xFCF3], NFD: [0xFCF3], NFKC: [0x0640, 0x064F, 0x0651], NFKD: [0x0640, 0x064F, 0x0651] }, +{ source: [0xFCF4], NFC: [0xFCF4], NFD: [0xFCF4], NFKC: [0x0640, 0x0650, 0x0651], NFKD: [0x0640, 0x0650, 0x0651] }, +{ source: [0xFCF5], NFC: [0xFCF5], NFD: [0xFCF5], NFKC: [0x0637, 0x0649], NFKD: [0x0637, 0x0649] }, +{ source: [0xFCF6], NFC: [0xFCF6], NFD: [0xFCF6], NFKC: [0x0637, 0x064A], NFKD: [0x0637, 0x064A] }, +{ source: [0xFCF7], NFC: [0xFCF7], NFD: [0xFCF7], NFKC: [0x0639, 0x0649], NFKD: [0x0639, 0x0649] }, +{ source: [0xFCF8], NFC: [0xFCF8], NFD: [0xFCF8], NFKC: [0x0639, 0x064A], NFKD: [0x0639, 0x064A] }, +{ source: [0xFCF9], NFC: [0xFCF9], NFD: [0xFCF9], NFKC: [0x063A, 0x0649], NFKD: [0x063A, 0x0649] }, +{ source: [0xFCFA], NFC: [0xFCFA], NFD: [0xFCFA], NFKC: [0x063A, 0x064A], NFKD: [0x063A, 0x064A] }, +{ source: [0xFCFB], NFC: [0xFCFB], NFD: [0xFCFB], NFKC: [0x0633, 0x0649], NFKD: [0x0633, 0x0649] }, +{ source: [0xFCFC], NFC: [0xFCFC], NFD: [0xFCFC], NFKC: [0x0633, 0x064A], NFKD: [0x0633, 0x064A] }, +{ source: [0xFCFD], NFC: [0xFCFD], NFD: [0xFCFD], NFKC: [0x0634, 0x0649], NFKD: [0x0634, 0x0649] }, +{ source: [0xFCFE], NFC: [0xFCFE], NFD: [0xFCFE], NFKC: [0x0634, 0x064A], NFKD: [0x0634, 0x064A] }, +{ source: [0xFCFF], NFC: [0xFCFF], NFD: [0xFCFF], NFKC: [0x062D, 0x0649], NFKD: [0x062D, 0x0649] }, +{ source: [0xFD00], NFC: [0xFD00], NFD: [0xFD00], NFKC: [0x062D, 0x064A], NFKD: [0x062D, 0x064A] }, +{ source: [0xFD01], NFC: [0xFD01], NFD: [0xFD01], NFKC: [0x062C, 0x0649], NFKD: [0x062C, 0x0649] }, +{ source: [0xFD02], NFC: [0xFD02], NFD: [0xFD02], NFKC: [0x062C, 0x064A], NFKD: [0x062C, 0x064A] }, +{ source: [0xFD03], NFC: [0xFD03], NFD: [0xFD03], NFKC: [0x062E, 0x0649], NFKD: [0x062E, 0x0649] }, +{ source: [0xFD04], NFC: [0xFD04], NFD: [0xFD04], NFKC: [0x062E, 0x064A], NFKD: [0x062E, 0x064A] }, +{ source: [0xFD05], NFC: [0xFD05], NFD: [0xFD05], NFKC: [0x0635, 0x0649], NFKD: [0x0635, 0x0649] }, +{ source: [0xFD06], NFC: [0xFD06], NFD: [0xFD06], NFKC: [0x0635, 0x064A], NFKD: [0x0635, 0x064A] }, +{ source: [0xFD07], NFC: [0xFD07], NFD: [0xFD07], NFKC: [0x0636, 0x0649], NFKD: [0x0636, 0x0649] }, +{ source: [0xFD08], NFC: [0xFD08], NFD: [0xFD08], NFKC: [0x0636, 0x064A], NFKD: [0x0636, 0x064A] }, +{ source: [0xFD09], NFC: [0xFD09], NFD: [0xFD09], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD0A], NFC: [0xFD0A], NFD: [0xFD0A], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD0B], NFC: [0xFD0B], NFD: [0xFD0B], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD0C], NFC: [0xFD0C], NFD: [0xFD0C], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFD0D], NFC: [0xFD0D], NFD: [0xFD0D], NFKC: [0x0634, 0x0631], NFKD: [0x0634, 0x0631] }, +{ source: [0xFD0E], NFC: [0xFD0E], NFD: [0xFD0E], NFKC: [0x0633, 0x0631], NFKD: [0x0633, 0x0631] }, +{ source: [0xFD0F], NFC: [0xFD0F], NFD: [0xFD0F], NFKC: [0x0635, 0x0631], NFKD: [0x0635, 0x0631] }, +{ source: [0xFD10], NFC: [0xFD10], NFD: [0xFD10], NFKC: [0x0636, 0x0631], NFKD: [0x0636, 0x0631] }, +{ source: [0xFD11], NFC: [0xFD11], NFD: [0xFD11], NFKC: [0x0637, 0x0649], NFKD: [0x0637, 0x0649] }, +{ source: [0xFD12], NFC: [0xFD12], NFD: [0xFD12], NFKC: [0x0637, 0x064A], NFKD: [0x0637, 0x064A] }, +{ source: [0xFD13], NFC: [0xFD13], NFD: [0xFD13], NFKC: [0x0639, 0x0649], NFKD: [0x0639, 0x0649] }, +{ source: [0xFD14], NFC: [0xFD14], NFD: [0xFD14], NFKC: [0x0639, 0x064A], NFKD: [0x0639, 0x064A] }, +{ source: [0xFD15], NFC: [0xFD15], NFD: [0xFD15], NFKC: [0x063A, 0x0649], NFKD: [0x063A, 0x0649] }, +{ source: [0xFD16], NFC: [0xFD16], NFD: [0xFD16], NFKC: [0x063A, 0x064A], NFKD: [0x063A, 0x064A] }, +{ source: [0xFD17], NFC: [0xFD17], NFD: [0xFD17], NFKC: [0x0633, 0x0649], NFKD: [0x0633, 0x0649] }, +{ source: [0xFD18], NFC: [0xFD18], NFD: [0xFD18], NFKC: [0x0633, 0x064A], NFKD: [0x0633, 0x064A] }, +{ source: [0xFD19], NFC: [0xFD19], NFD: [0xFD19], NFKC: [0x0634, 0x0649], NFKD: [0x0634, 0x0649] }, +{ source: [0xFD1A], NFC: [0xFD1A], NFD: [0xFD1A], NFKC: [0x0634, 0x064A], NFKD: [0x0634, 0x064A] }, +{ source: [0xFD1B], NFC: [0xFD1B], NFD: [0xFD1B], NFKC: [0x062D, 0x0649], NFKD: [0x062D, 0x0649] }, +{ source: [0xFD1C], NFC: [0xFD1C], NFD: [0xFD1C], NFKC: [0x062D, 0x064A], NFKD: [0x062D, 0x064A] }, +{ source: [0xFD1D], NFC: [0xFD1D], NFD: [0xFD1D], NFKC: [0x062C, 0x0649], NFKD: [0x062C, 0x0649] }, +{ source: [0xFD1E], NFC: [0xFD1E], NFD: [0xFD1E], NFKC: [0x062C, 0x064A], NFKD: [0x062C, 0x064A] }, +{ source: [0xFD1F], NFC: [0xFD1F], NFD: [0xFD1F], NFKC: [0x062E, 0x0649], NFKD: [0x062E, 0x0649] }, +{ source: [0xFD20], NFC: [0xFD20], NFD: [0xFD20], NFKC: [0x062E, 0x064A], NFKD: [0x062E, 0x064A] }, +{ source: [0xFD21], NFC: [0xFD21], NFD: [0xFD21], NFKC: [0x0635, 0x0649], NFKD: [0x0635, 0x0649] }, +{ source: [0xFD22], NFC: [0xFD22], NFD: [0xFD22], NFKC: [0x0635, 0x064A], NFKD: [0x0635, 0x064A] }, +{ source: [0xFD23], NFC: [0xFD23], NFD: [0xFD23], NFKC: [0x0636, 0x0649], NFKD: [0x0636, 0x0649] }, +{ source: [0xFD24], NFC: [0xFD24], NFD: [0xFD24], NFKC: [0x0636, 0x064A], NFKD: [0x0636, 0x064A] }, +{ source: [0xFD25], NFC: [0xFD25], NFD: [0xFD25], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD26], NFC: [0xFD26], NFD: [0xFD26], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD27], NFC: [0xFD27], NFD: [0xFD27], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD28], NFC: [0xFD28], NFD: [0xFD28], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFD29], NFC: [0xFD29], NFD: [0xFD29], NFKC: [0x0634, 0x0631], NFKD: [0x0634, 0x0631] }, +{ source: [0xFD2A], NFC: [0xFD2A], NFD: [0xFD2A], NFKC: [0x0633, 0x0631], NFKD: [0x0633, 0x0631] }, +{ source: [0xFD2B], NFC: [0xFD2B], NFD: [0xFD2B], NFKC: [0x0635, 0x0631], NFKD: [0x0635, 0x0631] }, +{ source: [0xFD2C], NFC: [0xFD2C], NFD: [0xFD2C], NFKC: [0x0636, 0x0631], NFKD: [0x0636, 0x0631] }, +{ source: [0xFD2D], NFC: [0xFD2D], NFD: [0xFD2D], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD2E], NFC: [0xFD2E], NFD: [0xFD2E], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD2F], NFC: [0xFD2F], NFD: [0xFD2F], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD30], NFC: [0xFD30], NFD: [0xFD30], NFKC: [0x0634, 0x0645], NFKD: [0x0634, 0x0645] }, +{ source: [0xFD31], NFC: [0xFD31], NFD: [0xFD31], NFKC: [0x0633, 0x0647], NFKD: [0x0633, 0x0647] }, +{ source: [0xFD32], NFC: [0xFD32], NFD: [0xFD32], NFKC: [0x0634, 0x0647], NFKD: [0x0634, 0x0647] }, +{ source: [0xFD33], NFC: [0xFD33], NFD: [0xFD33], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] }, +{ source: [0xFD34], NFC: [0xFD34], NFD: [0xFD34], NFKC: [0x0633, 0x062C], NFKD: [0x0633, 0x062C] }, +{ source: [0xFD35], NFC: [0xFD35], NFD: [0xFD35], NFKC: [0x0633, 0x062D], NFKD: [0x0633, 0x062D] }, +{ source: [0xFD36], NFC: [0xFD36], NFD: [0xFD36], NFKC: [0x0633, 0x062E], NFKD: [0x0633, 0x062E] }, +{ source: [0xFD37], NFC: [0xFD37], NFD: [0xFD37], NFKC: [0x0634, 0x062C], NFKD: [0x0634, 0x062C] }, +{ source: [0xFD38], NFC: [0xFD38], NFD: [0xFD38], NFKC: [0x0634, 0x062D], NFKD: [0x0634, 0x062D] }, +{ source: [0xFD39], NFC: [0xFD39], NFD: [0xFD39], NFKC: [0x0634, 0x062E], NFKD: [0x0634, 0x062E] }, +{ source: [0xFD3A], NFC: [0xFD3A], NFD: [0xFD3A], NFKC: [0x0637, 0x0645], NFKD: [0x0637, 0x0645] }, +{ source: [0xFD3B], NFC: [0xFD3B], NFD: [0xFD3B], NFKC: [0x0638, 0x0645], NFKD: [0x0638, 0x0645] }, +{ source: [0xFD3C], NFC: [0xFD3C], NFD: [0xFD3C], NFKC: [0x0627, 0x064B], NFKD: [0x0627, 0x064B] }, +{ source: [0xFD3D], NFC: [0xFD3D], NFD: [0xFD3D], NFKC: [0x0627, 0x064B], NFKD: [0x0627, 0x064B] }, +{ source: [0xFD50], NFC: [0xFD50], NFD: [0xFD50], NFKC: [0x062A, 0x062C, 0x0645], NFKD: [0x062A, 0x062C, 0x0645] }, +{ source: [0xFD51], NFC: [0xFD51], NFD: [0xFD51], NFKC: [0x062A, 0x062D, 0x062C], NFKD: [0x062A, 0x062D, 0x062C] }, +{ source: [0xFD52], NFC: [0xFD52], NFD: [0xFD52], NFKC: [0x062A, 0x062D, 0x062C], NFKD: [0x062A, 0x062D, 0x062C] }, +{ source: [0xFD53], NFC: [0xFD53], NFD: [0xFD53], NFKC: [0x062A, 0x062D, 0x0645], NFKD: [0x062A, 0x062D, 0x0645] }, +{ source: [0xFD54], NFC: [0xFD54], NFD: [0xFD54], NFKC: [0x062A, 0x062E, 0x0645], NFKD: [0x062A, 0x062E, 0x0645] }, +{ source: [0xFD55], NFC: [0xFD55], NFD: [0xFD55], NFKC: [0x062A, 0x0645, 0x062C], NFKD: [0x062A, 0x0645, 0x062C] }, +{ source: [0xFD56], NFC: [0xFD56], NFD: [0xFD56], NFKC: [0x062A, 0x0645, 0x062D], NFKD: [0x062A, 0x0645, 0x062D] }, +{ source: [0xFD57], NFC: [0xFD57], NFD: [0xFD57], NFKC: [0x062A, 0x0645, 0x062E], NFKD: [0x062A, 0x0645, 0x062E] }, +{ source: [0xFD58], NFC: [0xFD58], NFD: [0xFD58], NFKC: [0x062C, 0x0645, 0x062D], NFKD: [0x062C, 0x0645, 0x062D] }, +{ source: [0xFD59], NFC: [0xFD59], NFD: [0xFD59], NFKC: [0x062C, 0x0645, 0x062D], NFKD: [0x062C, 0x0645, 0x062D] }, +{ source: [0xFD5A], NFC: [0xFD5A], NFD: [0xFD5A], NFKC: [0x062D, 0x0645, 0x064A], NFKD: [0x062D, 0x0645, 0x064A] }, +{ source: [0xFD5B], NFC: [0xFD5B], NFD: [0xFD5B], NFKC: [0x062D, 0x0645, 0x0649], NFKD: [0x062D, 0x0645, 0x0649] }, +{ source: [0xFD5C], NFC: [0xFD5C], NFD: [0xFD5C], NFKC: [0x0633, 0x062D, 0x062C], NFKD: [0x0633, 0x062D, 0x062C] }, +{ source: [0xFD5D], NFC: [0xFD5D], NFD: [0xFD5D], NFKC: [0x0633, 0x062C, 0x062D], NFKD: [0x0633, 0x062C, 0x062D] }, +{ source: [0xFD5E], NFC: [0xFD5E], NFD: [0xFD5E], NFKC: [0x0633, 0x062C, 0x0649], NFKD: [0x0633, 0x062C, 0x0649] }, +{ source: [0xFD5F], NFC: [0xFD5F], NFD: [0xFD5F], NFKC: [0x0633, 0x0645, 0x062D], NFKD: [0x0633, 0x0645, 0x062D] }, +{ source: [0xFD60], NFC: [0xFD60], NFD: [0xFD60], NFKC: [0x0633, 0x0645, 0x062D], NFKD: [0x0633, 0x0645, 0x062D] }, +{ source: [0xFD61], NFC: [0xFD61], NFD: [0xFD61], NFKC: [0x0633, 0x0645, 0x062C], NFKD: [0x0633, 0x0645, 0x062C] }, +{ source: [0xFD62], NFC: [0xFD62], NFD: [0xFD62], NFKC: [0x0633, 0x0645, 0x0645], NFKD: [0x0633, 0x0645, 0x0645] }, +{ source: [0xFD63], NFC: [0xFD63], NFD: [0xFD63], NFKC: [0x0633, 0x0645, 0x0645], NFKD: [0x0633, 0x0645, 0x0645] }, +{ source: [0xFD64], NFC: [0xFD64], NFD: [0xFD64], NFKC: [0x0635, 0x062D, 0x062D], NFKD: [0x0635, 0x062D, 0x062D] }, +{ source: [0xFD65], NFC: [0xFD65], NFD: [0xFD65], NFKC: [0x0635, 0x062D, 0x062D], NFKD: [0x0635, 0x062D, 0x062D] }, +{ source: [0xFD66], NFC: [0xFD66], NFD: [0xFD66], NFKC: [0x0635, 0x0645, 0x0645], NFKD: [0x0635, 0x0645, 0x0645] }, +{ source: [0xFD67], NFC: [0xFD67], NFD: [0xFD67], NFKC: [0x0634, 0x062D, 0x0645], NFKD: [0x0634, 0x062D, 0x0645] }, +{ source: [0xFD68], NFC: [0xFD68], NFD: [0xFD68], NFKC: [0x0634, 0x062D, 0x0645], NFKD: [0x0634, 0x062D, 0x0645] }, +{ source: [0xFD69], NFC: [0xFD69], NFD: [0xFD69], NFKC: [0x0634, 0x062C, 0x064A], NFKD: [0x0634, 0x062C, 0x064A] }, +{ source: [0xFD6A], NFC: [0xFD6A], NFD: [0xFD6A], NFKC: [0x0634, 0x0645, 0x062E], NFKD: [0x0634, 0x0645, 0x062E] }, +{ source: [0xFD6B], NFC: [0xFD6B], NFD: [0xFD6B], NFKC: [0x0634, 0x0645, 0x062E], NFKD: [0x0634, 0x0645, 0x062E] }, +{ source: [0xFD6C], NFC: [0xFD6C], NFD: [0xFD6C], NFKC: [0x0634, 0x0645, 0x0645], NFKD: [0x0634, 0x0645, 0x0645] }, +{ source: [0xFD6D], NFC: [0xFD6D], NFD: [0xFD6D], NFKC: [0x0634, 0x0645, 0x0645], NFKD: [0x0634, 0x0645, 0x0645] }, +{ source: [0xFD6E], NFC: [0xFD6E], NFD: [0xFD6E], NFKC: [0x0636, 0x062D, 0x0649], NFKD: [0x0636, 0x062D, 0x0649] }, +{ source: [0xFD6F], NFC: [0xFD6F], NFD: [0xFD6F], NFKC: [0x0636, 0x062E, 0x0645], NFKD: [0x0636, 0x062E, 0x0645] }, +{ source: [0xFD70], NFC: [0xFD70], NFD: [0xFD70], NFKC: [0x0636, 0x062E, 0x0645], NFKD: [0x0636, 0x062E, 0x0645] }, +{ source: [0xFD71], NFC: [0xFD71], NFD: [0xFD71], NFKC: [0x0637, 0x0645, 0x062D], NFKD: [0x0637, 0x0645, 0x062D] }, +{ source: [0xFD72], NFC: [0xFD72], NFD: [0xFD72], NFKC: [0x0637, 0x0645, 0x062D], NFKD: [0x0637, 0x0645, 0x062D] }, +{ source: [0xFD73], NFC: [0xFD73], NFD: [0xFD73], NFKC: [0x0637, 0x0645, 0x0645], NFKD: [0x0637, 0x0645, 0x0645] }, +{ source: [0xFD74], NFC: [0xFD74], NFD: [0xFD74], NFKC: [0x0637, 0x0645, 0x064A], NFKD: [0x0637, 0x0645, 0x064A] }, +{ source: [0xFD75], NFC: [0xFD75], NFD: [0xFD75], NFKC: [0x0639, 0x062C, 0x0645], NFKD: [0x0639, 0x062C, 0x0645] }, +{ source: [0xFD76], NFC: [0xFD76], NFD: [0xFD76], NFKC: [0x0639, 0x0645, 0x0645], NFKD: [0x0639, 0x0645, 0x0645] }, +{ source: [0xFD77], NFC: [0xFD77], NFD: [0xFD77], NFKC: [0x0639, 0x0645, 0x0645], NFKD: [0x0639, 0x0645, 0x0645] }, +{ source: [0xFD78], NFC: [0xFD78], NFD: [0xFD78], NFKC: [0x0639, 0x0645, 0x0649], NFKD: [0x0639, 0x0645, 0x0649] }, +{ source: [0xFD79], NFC: [0xFD79], NFD: [0xFD79], NFKC: [0x063A, 0x0645, 0x0645], NFKD: [0x063A, 0x0645, 0x0645] }, +{ source: [0xFD7A], NFC: [0xFD7A], NFD: [0xFD7A], NFKC: [0x063A, 0x0645, 0x064A], NFKD: [0x063A, 0x0645, 0x064A] }, +{ source: [0xFD7B], NFC: [0xFD7B], NFD: [0xFD7B], NFKC: [0x063A, 0x0645, 0x0649], NFKD: [0x063A, 0x0645, 0x0649] }, +{ source: [0xFD7C], NFC: [0xFD7C], NFD: [0xFD7C], NFKC: [0x0641, 0x062E, 0x0645], NFKD: [0x0641, 0x062E, 0x0645] }, +{ source: [0xFD7D], NFC: [0xFD7D], NFD: [0xFD7D], NFKC: [0x0641, 0x062E, 0x0645], NFKD: [0x0641, 0x062E, 0x0645] }, +{ source: [0xFD7E], NFC: [0xFD7E], NFD: [0xFD7E], NFKC: [0x0642, 0x0645, 0x062D], NFKD: [0x0642, 0x0645, 0x062D] }, +{ source: [0xFD7F], NFC: [0xFD7F], NFD: [0xFD7F], NFKC: [0x0642, 0x0645, 0x0645], NFKD: [0x0642, 0x0645, 0x0645] }, +{ source: [0xFD80], NFC: [0xFD80], NFD: [0xFD80], NFKC: [0x0644, 0x062D, 0x0645], NFKD: [0x0644, 0x062D, 0x0645] }, +{ source: [0xFD81], NFC: [0xFD81], NFD: [0xFD81], NFKC: [0x0644, 0x062D, 0x064A], NFKD: [0x0644, 0x062D, 0x064A] }, +{ source: [0xFD82], NFC: [0xFD82], NFD: [0xFD82], NFKC: [0x0644, 0x062D, 0x0649], NFKD: [0x0644, 0x062D, 0x0649] }, +{ source: [0xFD83], NFC: [0xFD83], NFD: [0xFD83], NFKC: [0x0644, 0x062C, 0x062C], NFKD: [0x0644, 0x062C, 0x062C] }, +{ source: [0xFD84], NFC: [0xFD84], NFD: [0xFD84], NFKC: [0x0644, 0x062C, 0x062C], NFKD: [0x0644, 0x062C, 0x062C] }, +{ source: [0xFD85], NFC: [0xFD85], NFD: [0xFD85], NFKC: [0x0644, 0x062E, 0x0645], NFKD: [0x0644, 0x062E, 0x0645] }, +{ source: [0xFD86], NFC: [0xFD86], NFD: [0xFD86], NFKC: [0x0644, 0x062E, 0x0645], NFKD: [0x0644, 0x062E, 0x0645] }, +{ source: [0xFD87], NFC: [0xFD87], NFD: [0xFD87], NFKC: [0x0644, 0x0645, 0x062D], NFKD: [0x0644, 0x0645, 0x062D] }, +{ source: [0xFD88], NFC: [0xFD88], NFD: [0xFD88], NFKC: [0x0644, 0x0645, 0x062D], NFKD: [0x0644, 0x0645, 0x062D] }, +{ source: [0xFD89], NFC: [0xFD89], NFD: [0xFD89], NFKC: [0x0645, 0x062D, 0x062C], NFKD: [0x0645, 0x062D, 0x062C] }, +{ source: [0xFD8A], NFC: [0xFD8A], NFD: [0xFD8A], NFKC: [0x0645, 0x062D, 0x0645], NFKD: [0x0645, 0x062D, 0x0645] }, +{ source: [0xFD8B], NFC: [0xFD8B], NFD: [0xFD8B], NFKC: [0x0645, 0x062D, 0x064A], NFKD: [0x0645, 0x062D, 0x064A] }, +{ source: [0xFD8C], NFC: [0xFD8C], NFD: [0xFD8C], NFKC: [0x0645, 0x062C, 0x062D], NFKD: [0x0645, 0x062C, 0x062D] }, +{ source: [0xFD8D], NFC: [0xFD8D], NFD: [0xFD8D], NFKC: [0x0645, 0x062C, 0x0645], NFKD: [0x0645, 0x062C, 0x0645] }, +{ source: [0xFD8E], NFC: [0xFD8E], NFD: [0xFD8E], NFKC: [0x0645, 0x062E, 0x062C], NFKD: [0x0645, 0x062E, 0x062C] }, +{ source: [0xFD8F], NFC: [0xFD8F], NFD: [0xFD8F], NFKC: [0x0645, 0x062E, 0x0645], NFKD: [0x0645, 0x062E, 0x0645] }, +{ source: [0xFD92], NFC: [0xFD92], NFD: [0xFD92], NFKC: [0x0645, 0x062C, 0x062E], NFKD: [0x0645, 0x062C, 0x062E] }, +{ source: [0xFD93], NFC: [0xFD93], NFD: [0xFD93], NFKC: [0x0647, 0x0645, 0x062C], NFKD: [0x0647, 0x0645, 0x062C] }, +{ source: [0xFD94], NFC: [0xFD94], NFD: [0xFD94], NFKC: [0x0647, 0x0645, 0x0645], NFKD: [0x0647, 0x0645, 0x0645] }, +{ source: [0xFD95], NFC: [0xFD95], NFD: [0xFD95], NFKC: [0x0646, 0x062D, 0x0645], NFKD: [0x0646, 0x062D, 0x0645] }, +{ source: [0xFD96], NFC: [0xFD96], NFD: [0xFD96], NFKC: [0x0646, 0x062D, 0x0649], NFKD: [0x0646, 0x062D, 0x0649] }, +{ source: [0xFD97], NFC: [0xFD97], NFD: [0xFD97], NFKC: [0x0646, 0x062C, 0x0645], NFKD: [0x0646, 0x062C, 0x0645] }, +{ source: [0xFD98], NFC: [0xFD98], NFD: [0xFD98], NFKC: [0x0646, 0x062C, 0x0645], NFKD: [0x0646, 0x062C, 0x0645] }, +{ source: [0xFD99], NFC: [0xFD99], NFD: [0xFD99], NFKC: [0x0646, 0x062C, 0x0649], NFKD: [0x0646, 0x062C, 0x0649] }, +{ source: [0xFD9A], NFC: [0xFD9A], NFD: [0xFD9A], NFKC: [0x0646, 0x0645, 0x064A], NFKD: [0x0646, 0x0645, 0x064A] }, +{ source: [0xFD9B], NFC: [0xFD9B], NFD: [0xFD9B], NFKC: [0x0646, 0x0645, 0x0649], NFKD: [0x0646, 0x0645, 0x0649] }, +{ source: [0xFD9C], NFC: [0xFD9C], NFD: [0xFD9C], NFKC: [0x064A, 0x0645, 0x0645], NFKD: [0x064A, 0x0645, 0x0645] }, +{ source: [0xFD9D], NFC: [0xFD9D], NFD: [0xFD9D], NFKC: [0x064A, 0x0645, 0x0645], NFKD: [0x064A, 0x0645, 0x0645] }, +{ source: [0xFD9E], NFC: [0xFD9E], NFD: [0xFD9E], NFKC: [0x0628, 0x062E, 0x064A], NFKD: [0x0628, 0x062E, 0x064A] }, +{ source: [0xFD9F], NFC: [0xFD9F], NFD: [0xFD9F], NFKC: [0x062A, 0x062C, 0x064A], NFKD: [0x062A, 0x062C, 0x064A] }, +{ source: [0xFDA0], NFC: [0xFDA0], NFD: [0xFDA0], NFKC: [0x062A, 0x062C, 0x0649], NFKD: [0x062A, 0x062C, 0x0649] }, +{ source: [0xFDA1], NFC: [0xFDA1], NFD: [0xFDA1], NFKC: [0x062A, 0x062E, 0x064A], NFKD: [0x062A, 0x062E, 0x064A] }, +{ source: [0xFDA2], NFC: [0xFDA2], NFD: [0xFDA2], NFKC: [0x062A, 0x062E, 0x0649], NFKD: [0x062A, 0x062E, 0x0649] }, +{ source: [0xFDA3], NFC: [0xFDA3], NFD: [0xFDA3], NFKC: [0x062A, 0x0645, 0x064A], NFKD: [0x062A, 0x0645, 0x064A] }, +{ source: [0xFDA4], NFC: [0xFDA4], NFD: [0xFDA4], NFKC: [0x062A, 0x0645, 0x0649], NFKD: [0x062A, 0x0645, 0x0649] }, +{ source: [0xFDA5], NFC: [0xFDA5], NFD: [0xFDA5], NFKC: [0x062C, 0x0645, 0x064A], NFKD: [0x062C, 0x0645, 0x064A] }, +{ source: [0xFDA6], NFC: [0xFDA6], NFD: [0xFDA6], NFKC: [0x062C, 0x062D, 0x0649], NFKD: [0x062C, 0x062D, 0x0649] }, +{ source: [0xFDA7], NFC: [0xFDA7], NFD: [0xFDA7], NFKC: [0x062C, 0x0645, 0x0649], NFKD: [0x062C, 0x0645, 0x0649] }, +{ source: [0xFDA8], NFC: [0xFDA8], NFD: [0xFDA8], NFKC: [0x0633, 0x062E, 0x0649], NFKD: [0x0633, 0x062E, 0x0649] }, +{ source: [0xFDA9], NFC: [0xFDA9], NFD: [0xFDA9], NFKC: [0x0635, 0x062D, 0x064A], NFKD: [0x0635, 0x062D, 0x064A] }, +{ source: [0xFDAA], NFC: [0xFDAA], NFD: [0xFDAA], NFKC: [0x0634, 0x062D, 0x064A], NFKD: [0x0634, 0x062D, 0x064A] }, +{ source: [0xFDAB], NFC: [0xFDAB], NFD: [0xFDAB], NFKC: [0x0636, 0x062D, 0x064A], NFKD: [0x0636, 0x062D, 0x064A] }, +{ source: [0xFDAC], NFC: [0xFDAC], NFD: [0xFDAC], NFKC: [0x0644, 0x062C, 0x064A], NFKD: [0x0644, 0x062C, 0x064A] }, +{ source: [0xFDAD], NFC: [0xFDAD], NFD: [0xFDAD], NFKC: [0x0644, 0x0645, 0x064A], NFKD: [0x0644, 0x0645, 0x064A] }, +{ source: [0xFDAE], NFC: [0xFDAE], NFD: [0xFDAE], NFKC: [0x064A, 0x062D, 0x064A], NFKD: [0x064A, 0x062D, 0x064A] }, +{ source: [0xFDAF], NFC: [0xFDAF], NFD: [0xFDAF], NFKC: [0x064A, 0x062C, 0x064A], NFKD: [0x064A, 0x062C, 0x064A] }, +{ source: [0xFDB0], NFC: [0xFDB0], NFD: [0xFDB0], NFKC: [0x064A, 0x0645, 0x064A], NFKD: [0x064A, 0x0645, 0x064A] }, +{ source: [0xFDB1], NFC: [0xFDB1], NFD: [0xFDB1], NFKC: [0x0645, 0x0645, 0x064A], NFKD: [0x0645, 0x0645, 0x064A] }, +{ source: [0xFDB2], NFC: [0xFDB2], NFD: [0xFDB2], NFKC: [0x0642, 0x0645, 0x064A], NFKD: [0x0642, 0x0645, 0x064A] }, +{ source: [0xFDB3], NFC: [0xFDB3], NFD: [0xFDB3], NFKC: [0x0646, 0x062D, 0x064A], NFKD: [0x0646, 0x062D, 0x064A] }, +{ source: [0xFDB4], NFC: [0xFDB4], NFD: [0xFDB4], NFKC: [0x0642, 0x0645, 0x062D], NFKD: [0x0642, 0x0645, 0x062D] }, +{ source: [0xFDB5], NFC: [0xFDB5], NFD: [0xFDB5], NFKC: [0x0644, 0x062D, 0x0645], NFKD: [0x0644, 0x062D, 0x0645] }, +{ source: [0xFDB6], NFC: [0xFDB6], NFD: [0xFDB6], NFKC: [0x0639, 0x0645, 0x064A], NFKD: [0x0639, 0x0645, 0x064A] }, +{ source: [0xFDB7], NFC: [0xFDB7], NFD: [0xFDB7], NFKC: [0x0643, 0x0645, 0x064A], NFKD: [0x0643, 0x0645, 0x064A] }, +{ source: [0xFDB8], NFC: [0xFDB8], NFD: [0xFDB8], NFKC: [0x0646, 0x062C, 0x062D], NFKD: [0x0646, 0x062C, 0x062D] }, +{ source: [0xFDB9], NFC: [0xFDB9], NFD: [0xFDB9], NFKC: [0x0645, 0x062E, 0x064A], NFKD: [0x0645, 0x062E, 0x064A] }, +{ source: [0xFDBA], NFC: [0xFDBA], NFD: [0xFDBA], NFKC: [0x0644, 0x062C, 0x0645], NFKD: [0x0644, 0x062C, 0x0645] }, +{ source: [0xFDBB], NFC: [0xFDBB], NFD: [0xFDBB], NFKC: [0x0643, 0x0645, 0x0645], NFKD: [0x0643, 0x0645, 0x0645] }, +{ source: [0xFDBC], NFC: [0xFDBC], NFD: [0xFDBC], NFKC: [0x0644, 0x062C, 0x0645], NFKD: [0x0644, 0x062C, 0x0645] }, +{ source: [0xFDBD], NFC: [0xFDBD], NFD: [0xFDBD], NFKC: [0x0646, 0x062C, 0x062D], NFKD: [0x0646, 0x062C, 0x062D] }, +{ source: [0xFDBE], NFC: [0xFDBE], NFD: [0xFDBE], NFKC: [0x062C, 0x062D, 0x064A], NFKD: [0x062C, 0x062D, 0x064A] }, +{ source: [0xFDBF], NFC: [0xFDBF], NFD: [0xFDBF], NFKC: [0x062D, 0x062C, 0x064A], NFKD: [0x062D, 0x062C, 0x064A] }, +{ source: [0xFDC0], NFC: [0xFDC0], NFD: [0xFDC0], NFKC: [0x0645, 0x062C, 0x064A], NFKD: [0x0645, 0x062C, 0x064A] }, +{ source: [0xFDC1], NFC: [0xFDC1], NFD: [0xFDC1], NFKC: [0x0641, 0x0645, 0x064A], NFKD: [0x0641, 0x0645, 0x064A] }, +{ source: [0xFDC2], NFC: [0xFDC2], NFD: [0xFDC2], NFKC: [0x0628, 0x062D, 0x064A], NFKD: [0x0628, 0x062D, 0x064A] }, +{ source: [0xFDC3], NFC: [0xFDC3], NFD: [0xFDC3], NFKC: [0x0643, 0x0645, 0x0645], NFKD: [0x0643, 0x0645, 0x0645] }, +{ source: [0xFDC4], NFC: [0xFDC4], NFD: [0xFDC4], NFKC: [0x0639, 0x062C, 0x0645], NFKD: [0x0639, 0x062C, 0x0645] }, +{ source: [0xFDC5], NFC: [0xFDC5], NFD: [0xFDC5], NFKC: [0x0635, 0x0645, 0x0645], NFKD: [0x0635, 0x0645, 0x0645] }, +{ source: [0xFDC6], NFC: [0xFDC6], NFD: [0xFDC6], NFKC: [0x0633, 0x062E, 0x064A], NFKD: [0x0633, 0x062E, 0x064A] }, +{ source: [0xFDC7], NFC: [0xFDC7], NFD: [0xFDC7], NFKC: [0x0646, 0x062C, 0x064A], NFKD: [0x0646, 0x062C, 0x064A] }, +{ source: [0xFDF0], NFC: [0xFDF0], NFD: [0xFDF0], NFKC: [0x0635, 0x0644, 0x06D2], NFKD: [0x0635, 0x0644, 0x06D2] }, +{ source: [0xFDF1], NFC: [0xFDF1], NFD: [0xFDF1], NFKC: [0x0642, 0x0644, 0x06D2], NFKD: [0x0642, 0x0644, 0x06D2] }, +{ source: [0xFDF2], NFC: [0xFDF2], NFD: [0xFDF2], NFKC: [0x0627, 0x0644, 0x0644, 0x0647], NFKD: [0x0627, 0x0644, 0x0644, 0x0647] }, +{ source: [0xFDF3], NFC: [0xFDF3], NFD: [0xFDF3], NFKC: [0x0627, 0x0643, 0x0628, 0x0631], NFKD: [0x0627, 0x0643, 0x0628, 0x0631] }, +{ source: [0xFDF4], NFC: [0xFDF4], NFD: [0xFDF4], NFKC: [0x0645, 0x062D, 0x0645, 0x062F], NFKD: [0x0645, 0x062D, 0x0645, 0x062F] }, +{ source: [0xFDF5], NFC: [0xFDF5], NFD: [0xFDF5], NFKC: [0x0635, 0x0644, 0x0639, 0x0645], NFKD: [0x0635, 0x0644, 0x0639, 0x0645] }, +{ source: [0xFDF6], NFC: [0xFDF6], NFD: [0xFDF6], NFKC: [0x0631, 0x0633, 0x0648, 0x0644], NFKD: [0x0631, 0x0633, 0x0648, 0x0644] }, +{ source: [0xFDF7], NFC: [0xFDF7], NFD: [0xFDF7], NFKC: [0x0639, 0x0644, 0x064A, 0x0647], NFKD: [0x0639, 0x0644, 0x064A, 0x0647] }, +{ source: [0xFDF8], NFC: [0xFDF8], NFD: [0xFDF8], NFKC: [0x0648, 0x0633, 0x0644, 0x0645], NFKD: [0x0648, 0x0633, 0x0644, 0x0645] }, +{ source: [0xFDF9], NFC: [0xFDF9], NFD: [0xFDF9], NFKC: [0x0635, 0x0644, 0x0649], NFKD: [0x0635, 0x0644, 0x0649] }, +{ source: [0xFDFA], NFC: [0xFDFA], NFD: [0xFDFA], NFKC: [0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645], NFKD: [0x0635, 0x0644, 0x0649, 0x0020, 0x0627, 0x0644, 0x0644, 0x0647, 0x0020, 0x0639, 0x0644, 0x064A, 0x0647, 0x0020, 0x0648, 0x0633, 0x0644, 0x0645] }, +{ source: [0xFDFB], NFC: [0xFDFB], NFD: [0xFDFB], NFKC: [0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647], NFKD: [0x062C, 0x0644, 0x0020, 0x062C, 0x0644, 0x0627, 0x0644, 0x0647] }, +{ source: [0xFDFC], NFC: [0xFDFC], NFD: [0xFDFC], NFKC: [0x0631, 0x06CC, 0x0627, 0x0644], NFKD: [0x0631, 0x06CC, 0x0627, 0x0644] }, +{ source: [0xFE10], NFC: [0xFE10], NFD: [0xFE10], NFKC: [0x002C], NFKD: [0x002C] }, +{ source: [0xFE11], NFC: [0xFE11], NFD: [0xFE11], NFKC: [0x3001], NFKD: [0x3001] }, +{ source: [0xFE12], NFC: [0xFE12], NFD: [0xFE12], NFKC: [0x3002], NFKD: [0x3002] }, +{ source: [0xFE13], NFC: [0xFE13], NFD: [0xFE13], NFKC: [0x003A], NFKD: [0x003A] }, +{ source: [0xFE14], NFC: [0xFE14], NFD: [0xFE14], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0xFE15], NFC: [0xFE15], NFD: [0xFE15], NFKC: [0x0021], NFKD: [0x0021] }, +{ source: [0xFE16], NFC: [0xFE16], NFD: [0xFE16], NFKC: [0x003F], NFKD: [0x003F] }, +{ source: [0xFE17], NFC: [0xFE17], NFD: [0xFE17], NFKC: [0x3016], NFKD: [0x3016] }, +{ source: [0xFE18], NFC: [0xFE18], NFD: [0xFE18], NFKC: [0x3017], NFKD: [0x3017] }, +{ source: [0xFE19], NFC: [0xFE19], NFD: [0xFE19], NFKC: [0x002E, 0x002E, 0x002E], NFKD: [0x002E, 0x002E, 0x002E] }, +{ source: [0xFE30], NFC: [0xFE30], NFD: [0xFE30], NFKC: [0x002E, 0x002E], NFKD: [0x002E, 0x002E] }, +{ source: [0xFE31], NFC: [0xFE31], NFD: [0xFE31], NFKC: [0x2014], NFKD: [0x2014] }, +{ source: [0xFE32], NFC: [0xFE32], NFD: [0xFE32], NFKC: [0x2013], NFKD: [0x2013] }, +{ source: [0xFE33], NFC: [0xFE33], NFD: [0xFE33], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE34], NFC: [0xFE34], NFD: [0xFE34], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE35], NFC: [0xFE35], NFD: [0xFE35], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0xFE36], NFC: [0xFE36], NFD: [0xFE36], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0xFE37], NFC: [0xFE37], NFD: [0xFE37], NFKC: [0x007B], NFKD: [0x007B] }, +{ source: [0xFE38], NFC: [0xFE38], NFD: [0xFE38], NFKC: [0x007D], NFKD: [0x007D] }, +{ source: [0xFE39], NFC: [0xFE39], NFD: [0xFE39], NFKC: [0x3014], NFKD: [0x3014] }, +{ source: [0xFE3A], NFC: [0xFE3A], NFD: [0xFE3A], NFKC: [0x3015], NFKD: [0x3015] }, +{ source: [0xFE3B], NFC: [0xFE3B], NFD: [0xFE3B], NFKC: [0x3010], NFKD: [0x3010] }, +{ source: [0xFE3C], NFC: [0xFE3C], NFD: [0xFE3C], NFKC: [0x3011], NFKD: [0x3011] }, +{ source: [0xFE3D], NFC: [0xFE3D], NFD: [0xFE3D], NFKC: [0x300A], NFKD: [0x300A] }, +{ source: [0xFE3E], NFC: [0xFE3E], NFD: [0xFE3E], NFKC: [0x300B], NFKD: [0x300B] }, +{ source: [0xFE3F], NFC: [0xFE3F], NFD: [0xFE3F], NFKC: [0x3008], NFKD: [0x3008] }, +{ source: [0xFE40], NFC: [0xFE40], NFD: [0xFE40], NFKC: [0x3009], NFKD: [0x3009] }, +{ source: [0xFE41], NFC: [0xFE41], NFD: [0xFE41], NFKC: [0x300C], NFKD: [0x300C] }, +{ source: [0xFE42], NFC: [0xFE42], NFD: [0xFE42], NFKC: [0x300D], NFKD: [0x300D] }, +{ source: [0xFE43], NFC: [0xFE43], NFD: [0xFE43], NFKC: [0x300E], NFKD: [0x300E] }, +{ source: [0xFE44], NFC: [0xFE44], NFD: [0xFE44], NFKC: [0x300F], NFKD: [0x300F] }, +{ source: [0xFE47], NFC: [0xFE47], NFD: [0xFE47], NFKC: [0x005B], NFKD: [0x005B] }, +{ source: [0xFE48], NFC: [0xFE48], NFD: [0xFE48], NFKC: [0x005D], NFKD: [0x005D] }, +{ source: [0xFE49], NFC: [0xFE49], NFD: [0xFE49], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4A], NFC: [0xFE4A], NFD: [0xFE4A], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4B], NFC: [0xFE4B], NFD: [0xFE4B], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4C], NFC: [0xFE4C], NFD: [0xFE4C], NFKC: [0x0020, 0x0305], NFKD: [0x0020, 0x0305] }, +{ source: [0xFE4D], NFC: [0xFE4D], NFD: [0xFE4D], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE4E], NFC: [0xFE4E], NFD: [0xFE4E], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE4F], NFC: [0xFE4F], NFD: [0xFE4F], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFE50], NFC: [0xFE50], NFD: [0xFE50], NFKC: [0x002C], NFKD: [0x002C] }, +{ source: [0xFE51], NFC: [0xFE51], NFD: [0xFE51], NFKC: [0x3001], NFKD: [0x3001] }, +{ source: [0xFE52], NFC: [0xFE52], NFD: [0xFE52], NFKC: [0x002E], NFKD: [0x002E] }, +{ source: [0xFE54], NFC: [0xFE54], NFD: [0xFE54], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0xFE55], NFC: [0xFE55], NFD: [0xFE55], NFKC: [0x003A], NFKD: [0x003A] }, +{ source: [0xFE56], NFC: [0xFE56], NFD: [0xFE56], NFKC: [0x003F], NFKD: [0x003F] }, +{ source: [0xFE57], NFC: [0xFE57], NFD: [0xFE57], NFKC: [0x0021], NFKD: [0x0021] }, +{ source: [0xFE58], NFC: [0xFE58], NFD: [0xFE58], NFKC: [0x2014], NFKD: [0x2014] }, +{ source: [0xFE59], NFC: [0xFE59], NFD: [0xFE59], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0xFE5A], NFC: [0xFE5A], NFD: [0xFE5A], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0xFE5B], NFC: [0xFE5B], NFD: [0xFE5B], NFKC: [0x007B], NFKD: [0x007B] }, +{ source: [0xFE5C], NFC: [0xFE5C], NFD: [0xFE5C], NFKC: [0x007D], NFKD: [0x007D] }, +{ source: [0xFE5D], NFC: [0xFE5D], NFD: [0xFE5D], NFKC: [0x3014], NFKD: [0x3014] }, +{ source: [0xFE5E], NFC: [0xFE5E], NFD: [0xFE5E], NFKC: [0x3015], NFKD: [0x3015] }, +{ source: [0xFE5F], NFC: [0xFE5F], NFD: [0xFE5F], NFKC: [0x0023], NFKD: [0x0023] }, +{ source: [0xFE60], NFC: [0xFE60], NFD: [0xFE60], NFKC: [0x0026], NFKD: [0x0026] }, +{ source: [0xFE61], NFC: [0xFE61], NFD: [0xFE61], NFKC: [0x002A], NFKD: [0x002A] }, +{ source: [0xFE62], NFC: [0xFE62], NFD: [0xFE62], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0xFE63], NFC: [0xFE63], NFD: [0xFE63], NFKC: [0x002D], NFKD: [0x002D] }, +{ source: [0xFE64], NFC: [0xFE64], NFD: [0xFE64], NFKC: [0x003C], NFKD: [0x003C] }, +{ source: [0xFE65], NFC: [0xFE65], NFD: [0xFE65], NFKC: [0x003E], NFKD: [0x003E] }, +{ source: [0xFE66], NFC: [0xFE66], NFD: [0xFE66], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0xFE68], NFC: [0xFE68], NFD: [0xFE68], NFKC: [0x005C], NFKD: [0x005C] }, +{ source: [0xFE69], NFC: [0xFE69], NFD: [0xFE69], NFKC: [0x0024], NFKD: [0x0024] }, +{ source: [0xFE6A], NFC: [0xFE6A], NFD: [0xFE6A], NFKC: [0x0025], NFKD: [0x0025] }, +{ source: [0xFE6B], NFC: [0xFE6B], NFD: [0xFE6B], NFKC: [0x0040], NFKD: [0x0040] }, +{ source: [0xFE70], NFC: [0xFE70], NFD: [0xFE70], NFKC: [0x0020, 0x064B], NFKD: [0x0020, 0x064B] }, +{ source: [0xFE71], NFC: [0xFE71], NFD: [0xFE71], NFKC: [0x0640, 0x064B], NFKD: [0x0640, 0x064B] }, +{ source: [0xFE72], NFC: [0xFE72], NFD: [0xFE72], NFKC: [0x0020, 0x064C], NFKD: [0x0020, 0x064C] }, +{ source: [0xFE74], NFC: [0xFE74], NFD: [0xFE74], NFKC: [0x0020, 0x064D], NFKD: [0x0020, 0x064D] }, +{ source: [0xFE76], NFC: [0xFE76], NFD: [0xFE76], NFKC: [0x0020, 0x064E], NFKD: [0x0020, 0x064E] }, +{ source: [0xFE77], NFC: [0xFE77], NFD: [0xFE77], NFKC: [0x0640, 0x064E], NFKD: [0x0640, 0x064E] }, +{ source: [0xFE78], NFC: [0xFE78], NFD: [0xFE78], NFKC: [0x0020, 0x064F], NFKD: [0x0020, 0x064F] }, +{ source: [0xFE79], NFC: [0xFE79], NFD: [0xFE79], NFKC: [0x0640, 0x064F], NFKD: [0x0640, 0x064F] }, +{ source: [0xFE7A], NFC: [0xFE7A], NFD: [0xFE7A], NFKC: [0x0020, 0x0650], NFKD: [0x0020, 0x0650] }, +{ source: [0xFE7B], NFC: [0xFE7B], NFD: [0xFE7B], NFKC: [0x0640, 0x0650], NFKD: [0x0640, 0x0650] }, +{ source: [0xFE7C], NFC: [0xFE7C], NFD: [0xFE7C], NFKC: [0x0020, 0x0651], NFKD: [0x0020, 0x0651] }, +{ source: [0xFE7D], NFC: [0xFE7D], NFD: [0xFE7D], NFKC: [0x0640, 0x0651], NFKD: [0x0640, 0x0651] }, +{ source: [0xFE7E], NFC: [0xFE7E], NFD: [0xFE7E], NFKC: [0x0020, 0x0652], NFKD: [0x0020, 0x0652] }, +{ source: [0xFE7F], NFC: [0xFE7F], NFD: [0xFE7F], NFKC: [0x0640, 0x0652], NFKD: [0x0640, 0x0652] }, +{ source: [0xFE80], NFC: [0xFE80], NFD: [0xFE80], NFKC: [0x0621], NFKD: [0x0621] }, +{ source: [0xFE81], NFC: [0xFE81], NFD: [0xFE81], NFKC: [0x0622], NFKD: [0x0627, 0x0653] }, +{ source: [0xFE82], NFC: [0xFE82], NFD: [0xFE82], NFKC: [0x0622], NFKD: [0x0627, 0x0653] }, +{ source: [0xFE83], NFC: [0xFE83], NFD: [0xFE83], NFKC: [0x0623], NFKD: [0x0627, 0x0654] }, +{ source: [0xFE84], NFC: [0xFE84], NFD: [0xFE84], NFKC: [0x0623], NFKD: [0x0627, 0x0654] }, +{ source: [0xFE85], NFC: [0xFE85], NFD: [0xFE85], NFKC: [0x0624], NFKD: [0x0648, 0x0654] }, +{ source: [0xFE86], NFC: [0xFE86], NFD: [0xFE86], NFKC: [0x0624], NFKD: [0x0648, 0x0654] }, +{ source: [0xFE87], NFC: [0xFE87], NFD: [0xFE87], NFKC: [0x0625], NFKD: [0x0627, 0x0655] }, +{ source: [0xFE88], NFC: [0xFE88], NFD: [0xFE88], NFKC: [0x0625], NFKD: [0x0627, 0x0655] }, +{ source: [0xFE89], NFC: [0xFE89], NFD: [0xFE89], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8A], NFC: [0xFE8A], NFD: [0xFE8A], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8B], NFC: [0xFE8B], NFD: [0xFE8B], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8C], NFC: [0xFE8C], NFD: [0xFE8C], NFKC: [0x0626], NFKD: [0x064A, 0x0654] }, +{ source: [0xFE8D], NFC: [0xFE8D], NFD: [0xFE8D], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0xFE8E], NFC: [0xFE8E], NFD: [0xFE8E], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0xFE8F], NFC: [0xFE8F], NFD: [0xFE8F], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE90], NFC: [0xFE90], NFD: [0xFE90], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE91], NFC: [0xFE91], NFD: [0xFE91], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE92], NFC: [0xFE92], NFD: [0xFE92], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0xFE93], NFC: [0xFE93], NFD: [0xFE93], NFKC: [0x0629], NFKD: [0x0629] }, +{ source: [0xFE94], NFC: [0xFE94], NFD: [0xFE94], NFKC: [0x0629], NFKD: [0x0629] }, +{ source: [0xFE95], NFC: [0xFE95], NFD: [0xFE95], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE96], NFC: [0xFE96], NFD: [0xFE96], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE97], NFC: [0xFE97], NFD: [0xFE97], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE98], NFC: [0xFE98], NFD: [0xFE98], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0xFE99], NFC: [0xFE99], NFD: [0xFE99], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9A], NFC: [0xFE9A], NFD: [0xFE9A], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9B], NFC: [0xFE9B], NFD: [0xFE9B], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9C], NFC: [0xFE9C], NFD: [0xFE9C], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0xFE9D], NFC: [0xFE9D], NFD: [0xFE9D], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFE9E], NFC: [0xFE9E], NFD: [0xFE9E], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFE9F], NFC: [0xFE9F], NFD: [0xFE9F], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFEA0], NFC: [0xFEA0], NFD: [0xFEA0], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0xFEA1], NFC: [0xFEA1], NFD: [0xFEA1], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA2], NFC: [0xFEA2], NFD: [0xFEA2], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA3], NFC: [0xFEA3], NFD: [0xFEA3], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA4], NFC: [0xFEA4], NFD: [0xFEA4], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0xFEA5], NFC: [0xFEA5], NFD: [0xFEA5], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA6], NFC: [0xFEA6], NFD: [0xFEA6], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA7], NFC: [0xFEA7], NFD: [0xFEA7], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA8], NFC: [0xFEA8], NFD: [0xFEA8], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0xFEA9], NFC: [0xFEA9], NFD: [0xFEA9], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0xFEAA], NFC: [0xFEAA], NFD: [0xFEAA], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0xFEAB], NFC: [0xFEAB], NFD: [0xFEAB], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0xFEAC], NFC: [0xFEAC], NFD: [0xFEAC], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0xFEAD], NFC: [0xFEAD], NFD: [0xFEAD], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0xFEAE], NFC: [0xFEAE], NFD: [0xFEAE], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0xFEAF], NFC: [0xFEAF], NFD: [0xFEAF], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0xFEB0], NFC: [0xFEB0], NFD: [0xFEB0], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0xFEB1], NFC: [0xFEB1], NFD: [0xFEB1], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB2], NFC: [0xFEB2], NFD: [0xFEB2], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB3], NFC: [0xFEB3], NFD: [0xFEB3], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB4], NFC: [0xFEB4], NFD: [0xFEB4], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0xFEB5], NFC: [0xFEB5], NFD: [0xFEB5], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB6], NFC: [0xFEB6], NFD: [0xFEB6], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB7], NFC: [0xFEB7], NFD: [0xFEB7], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB8], NFC: [0xFEB8], NFD: [0xFEB8], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0xFEB9], NFC: [0xFEB9], NFD: [0xFEB9], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBA], NFC: [0xFEBA], NFD: [0xFEBA], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBB], NFC: [0xFEBB], NFD: [0xFEBB], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBC], NFC: [0xFEBC], NFD: [0xFEBC], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0xFEBD], NFC: [0xFEBD], NFD: [0xFEBD], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEBE], NFC: [0xFEBE], NFD: [0xFEBE], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEBF], NFC: [0xFEBF], NFD: [0xFEBF], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEC0], NFC: [0xFEC0], NFD: [0xFEC0], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0xFEC1], NFC: [0xFEC1], NFD: [0xFEC1], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC2], NFC: [0xFEC2], NFD: [0xFEC2], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC3], NFC: [0xFEC3], NFD: [0xFEC3], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC4], NFC: [0xFEC4], NFD: [0xFEC4], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0xFEC5], NFC: [0xFEC5], NFD: [0xFEC5], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC6], NFC: [0xFEC6], NFD: [0xFEC6], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC7], NFC: [0xFEC7], NFD: [0xFEC7], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC8], NFC: [0xFEC8], NFD: [0xFEC8], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0xFEC9], NFC: [0xFEC9], NFD: [0xFEC9], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECA], NFC: [0xFECA], NFD: [0xFECA], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECB], NFC: [0xFECB], NFD: [0xFECB], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECC], NFC: [0xFECC], NFD: [0xFECC], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0xFECD], NFC: [0xFECD], NFD: [0xFECD], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFECE], NFC: [0xFECE], NFD: [0xFECE], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFECF], NFC: [0xFECF], NFD: [0xFECF], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFED0], NFC: [0xFED0], NFD: [0xFED0], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0xFED1], NFC: [0xFED1], NFD: [0xFED1], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED2], NFC: [0xFED2], NFD: [0xFED2], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED3], NFC: [0xFED3], NFD: [0xFED3], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED4], NFC: [0xFED4], NFD: [0xFED4], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0xFED5], NFC: [0xFED5], NFD: [0xFED5], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED6], NFC: [0xFED6], NFD: [0xFED6], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED7], NFC: [0xFED7], NFD: [0xFED7], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED8], NFC: [0xFED8], NFD: [0xFED8], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0xFED9], NFC: [0xFED9], NFD: [0xFED9], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDA], NFC: [0xFEDA], NFD: [0xFEDA], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDB], NFC: [0xFEDB], NFD: [0xFEDB], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDC], NFC: [0xFEDC], NFD: [0xFEDC], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0xFEDD], NFC: [0xFEDD], NFD: [0xFEDD], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEDE], NFC: [0xFEDE], NFD: [0xFEDE], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEDF], NFC: [0xFEDF], NFD: [0xFEDF], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEE0], NFC: [0xFEE0], NFD: [0xFEE0], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0xFEE1], NFC: [0xFEE1], NFD: [0xFEE1], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE2], NFC: [0xFEE2], NFD: [0xFEE2], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE3], NFC: [0xFEE3], NFD: [0xFEE3], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE4], NFC: [0xFEE4], NFD: [0xFEE4], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0xFEE5], NFC: [0xFEE5], NFD: [0xFEE5], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE6], NFC: [0xFEE6], NFD: [0xFEE6], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE7], NFC: [0xFEE7], NFD: [0xFEE7], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE8], NFC: [0xFEE8], NFD: [0xFEE8], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0xFEE9], NFC: [0xFEE9], NFD: [0xFEE9], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEEA], NFC: [0xFEEA], NFD: [0xFEEA], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEEB], NFC: [0xFEEB], NFD: [0xFEEB], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEEC], NFC: [0xFEEC], NFD: [0xFEEC], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0xFEED], NFC: [0xFEED], NFD: [0xFEED], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0xFEEE], NFC: [0xFEEE], NFD: [0xFEEE], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0xFEEF], NFC: [0xFEEF], NFD: [0xFEEF], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFEF0], NFC: [0xFEF0], NFD: [0xFEF0], NFKC: [0x0649], NFKD: [0x0649] }, +{ source: [0xFEF1], NFC: [0xFEF1], NFD: [0xFEF1], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF2], NFC: [0xFEF2], NFD: [0xFEF2], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF3], NFC: [0xFEF3], NFD: [0xFEF3], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF4], NFC: [0xFEF4], NFD: [0xFEF4], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0xFEF5], NFC: [0xFEF5], NFD: [0xFEF5], NFKC: [0x0644, 0x0622], NFKD: [0x0644, 0x0627, 0x0653] }, +{ source: [0xFEF6], NFC: [0xFEF6], NFD: [0xFEF6], NFKC: [0x0644, 0x0622], NFKD: [0x0644, 0x0627, 0x0653] }, +{ source: [0xFEF7], NFC: [0xFEF7], NFD: [0xFEF7], NFKC: [0x0644, 0x0623], NFKD: [0x0644, 0x0627, 0x0654] }, +{ source: [0xFEF8], NFC: [0xFEF8], NFD: [0xFEF8], NFKC: [0x0644, 0x0623], NFKD: [0x0644, 0x0627, 0x0654] }, +{ source: [0xFEF9], NFC: [0xFEF9], NFD: [0xFEF9], NFKC: [0x0644, 0x0625], NFKD: [0x0644, 0x0627, 0x0655] }, +{ source: [0xFEFA], NFC: [0xFEFA], NFD: [0xFEFA], NFKC: [0x0644, 0x0625], NFKD: [0x0644, 0x0627, 0x0655] }, +{ source: [0xFEFB], NFC: [0xFEFB], NFD: [0xFEFB], NFKC: [0x0644, 0x0627], NFKD: [0x0644, 0x0627] }, +{ source: [0xFEFC], NFC: [0xFEFC], NFD: [0xFEFC], NFKC: [0x0644, 0x0627], NFKD: [0x0644, 0x0627] }, +{ source: [0xFF01], NFC: [0xFF01], NFD: [0xFF01], NFKC: [0x0021], NFKD: [0x0021] }, +{ source: [0xFF02], NFC: [0xFF02], NFD: [0xFF02], NFKC: [0x0022], NFKD: [0x0022] }, +{ source: [0xFF03], NFC: [0xFF03], NFD: [0xFF03], NFKC: [0x0023], NFKD: [0x0023] }, +{ source: [0xFF04], NFC: [0xFF04], NFD: [0xFF04], NFKC: [0x0024], NFKD: [0x0024] }, +{ source: [0xFF05], NFC: [0xFF05], NFD: [0xFF05], NFKC: [0x0025], NFKD: [0x0025] }, +{ source: [0xFF06], NFC: [0xFF06], NFD: [0xFF06], NFKC: [0x0026], NFKD: [0x0026] }, +{ source: [0xFF07], NFC: [0xFF07], NFD: [0xFF07], NFKC: [0x0027], NFKD: [0x0027] }, +{ source: [0xFF08], NFC: [0xFF08], NFD: [0xFF08], NFKC: [0x0028], NFKD: [0x0028] }, +{ source: [0xFF09], NFC: [0xFF09], NFD: [0xFF09], NFKC: [0x0029], NFKD: [0x0029] }, +{ source: [0xFF0A], NFC: [0xFF0A], NFD: [0xFF0A], NFKC: [0x002A], NFKD: [0x002A] }, +{ source: [0xFF0B], NFC: [0xFF0B], NFD: [0xFF0B], NFKC: [0x002B], NFKD: [0x002B] }, +{ source: [0xFF0C], NFC: [0xFF0C], NFD: [0xFF0C], NFKC: [0x002C], NFKD: [0x002C] }, +{ source: [0xFF0D], NFC: [0xFF0D], NFD: [0xFF0D], NFKC: [0x002D], NFKD: [0x002D] }, +{ source: [0xFF0E], NFC: [0xFF0E], NFD: [0xFF0E], NFKC: [0x002E], NFKD: [0x002E] }, +{ source: [0xFF0F], NFC: [0xFF0F], NFD: [0xFF0F], NFKC: [0x002F], NFKD: [0x002F] }, +{ source: [0xFF10], NFC: [0xFF10], NFD: [0xFF10], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0xFF11], NFC: [0xFF11], NFD: [0xFF11], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0xFF12], NFC: [0xFF12], NFD: [0xFF12], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0xFF13], NFC: [0xFF13], NFD: [0xFF13], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0xFF14], NFC: [0xFF14], NFD: [0xFF14], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0xFF15], NFC: [0xFF15], NFD: [0xFF15], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0xFF16], NFC: [0xFF16], NFD: [0xFF16], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0xFF17], NFC: [0xFF17], NFD: [0xFF17], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0xFF18], NFC: [0xFF18], NFD: [0xFF18], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0xFF19], NFC: [0xFF19], NFD: [0xFF19], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0xFF1A], NFC: [0xFF1A], NFD: [0xFF1A], NFKC: [0x003A], NFKD: [0x003A] }, +{ source: [0xFF1B], NFC: [0xFF1B], NFD: [0xFF1B], NFKC: [0x003B], NFKD: [0x003B] }, +{ source: [0xFF1C], NFC: [0xFF1C], NFD: [0xFF1C], NFKC: [0x003C], NFKD: [0x003C] }, +{ source: [0xFF1D], NFC: [0xFF1D], NFD: [0xFF1D], NFKC: [0x003D], NFKD: [0x003D] }, +{ source: [0xFF1E], NFC: [0xFF1E], NFD: [0xFF1E], NFKC: [0x003E], NFKD: [0x003E] }, +{ source: [0xFF1F], NFC: [0xFF1F], NFD: [0xFF1F], NFKC: [0x003F], NFKD: [0x003F] }, +{ source: [0xFF20], NFC: [0xFF20], NFD: [0xFF20], NFKC: [0x0040], NFKD: [0x0040] }, +{ source: [0xFF21], NFC: [0xFF21], NFD: [0xFF21], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0xFF22], NFC: [0xFF22], NFD: [0xFF22], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0xFF23], NFC: [0xFF23], NFD: [0xFF23], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0xFF24], NFC: [0xFF24], NFD: [0xFF24], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0xFF25], NFC: [0xFF25], NFD: [0xFF25], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0xFF26], NFC: [0xFF26], NFD: [0xFF26], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0xFF27], NFC: [0xFF27], NFD: [0xFF27], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0xFF28], NFC: [0xFF28], NFD: [0xFF28], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0xFF29], NFC: [0xFF29], NFD: [0xFF29], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0xFF2A], NFC: [0xFF2A], NFD: [0xFF2A], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0xFF2B], NFC: [0xFF2B], NFD: [0xFF2B], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0xFF2C], NFC: [0xFF2C], NFD: [0xFF2C], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0xFF2D], NFC: [0xFF2D], NFD: [0xFF2D], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0xFF2E], NFC: [0xFF2E], NFD: [0xFF2E], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0xFF2F], NFC: [0xFF2F], NFD: [0xFF2F], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0xFF30], NFC: [0xFF30], NFD: [0xFF30], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0xFF31], NFC: [0xFF31], NFD: [0xFF31], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0xFF32], NFC: [0xFF32], NFD: [0xFF32], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0xFF33], NFC: [0xFF33], NFD: [0xFF33], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0xFF34], NFC: [0xFF34], NFD: [0xFF34], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0xFF35], NFC: [0xFF35], NFD: [0xFF35], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0xFF36], NFC: [0xFF36], NFD: [0xFF36], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0xFF37], NFC: [0xFF37], NFD: [0xFF37], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0xFF38], NFC: [0xFF38], NFD: [0xFF38], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0xFF39], NFC: [0xFF39], NFD: [0xFF39], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0xFF3A], NFC: [0xFF3A], NFD: [0xFF3A], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0xFF3B], NFC: [0xFF3B], NFD: [0xFF3B], NFKC: [0x005B], NFKD: [0x005B] }, +{ source: [0xFF3C], NFC: [0xFF3C], NFD: [0xFF3C], NFKC: [0x005C], NFKD: [0x005C] }, +{ source: [0xFF3D], NFC: [0xFF3D], NFD: [0xFF3D], NFKC: [0x005D], NFKD: [0x005D] }, +{ source: [0xFF3E], NFC: [0xFF3E], NFD: [0xFF3E], NFKC: [0x005E], NFKD: [0x005E] }, +{ source: [0xFF3F], NFC: [0xFF3F], NFD: [0xFF3F], NFKC: [0x005F], NFKD: [0x005F] }, +{ source: [0xFF40], NFC: [0xFF40], NFD: [0xFF40], NFKC: [0x0060], NFKD: [0x0060] }, +{ source: [0xFF41], NFC: [0xFF41], NFD: [0xFF41], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0xFF42], NFC: [0xFF42], NFD: [0xFF42], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0xFF43], NFC: [0xFF43], NFD: [0xFF43], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0xFF44], NFC: [0xFF44], NFD: [0xFF44], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0xFF45], NFC: [0xFF45], NFD: [0xFF45], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0xFF46], NFC: [0xFF46], NFD: [0xFF46], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0xFF47], NFC: [0xFF47], NFD: [0xFF47], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0xFF48], NFC: [0xFF48], NFD: [0xFF48], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0xFF49], NFC: [0xFF49], NFD: [0xFF49], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0xFF4A], NFC: [0xFF4A], NFD: [0xFF4A], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0xFF4B], NFC: [0xFF4B], NFD: [0xFF4B], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0xFF4C], NFC: [0xFF4C], NFD: [0xFF4C], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0xFF4D], NFC: [0xFF4D], NFD: [0xFF4D], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0xFF4E], NFC: [0xFF4E], NFD: [0xFF4E], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0xFF4F], NFC: [0xFF4F], NFD: [0xFF4F], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0xFF50], NFC: [0xFF50], NFD: [0xFF50], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0xFF51], NFC: [0xFF51], NFD: [0xFF51], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0xFF52], NFC: [0xFF52], NFD: [0xFF52], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0xFF53], NFC: [0xFF53], NFD: [0xFF53], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0xFF54], NFC: [0xFF54], NFD: [0xFF54], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0xFF55], NFC: [0xFF55], NFD: [0xFF55], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0xFF56], NFC: [0xFF56], NFD: [0xFF56], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0xFF57], NFC: [0xFF57], NFD: [0xFF57], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0xFF58], NFC: [0xFF58], NFD: [0xFF58], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0xFF59], NFC: [0xFF59], NFD: [0xFF59], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0xFF5A], NFC: [0xFF5A], NFD: [0xFF5A], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0xFF5B], NFC: [0xFF5B], NFD: [0xFF5B], NFKC: [0x007B], NFKD: [0x007B] }, +{ source: [0xFF5C], NFC: [0xFF5C], NFD: [0xFF5C], NFKC: [0x007C], NFKD: [0x007C] }, +{ source: [0xFF5D], NFC: [0xFF5D], NFD: [0xFF5D], NFKC: [0x007D], NFKD: [0x007D] }, +{ source: [0xFF5E], NFC: [0xFF5E], NFD: [0xFF5E], NFKC: [0x007E], NFKD: [0x007E] }, +{ source: [0xFF5F], NFC: [0xFF5F], NFD: [0xFF5F], NFKC: [0x2985], NFKD: [0x2985] }, +{ source: [0xFF60], NFC: [0xFF60], NFD: [0xFF60], NFKC: [0x2986], NFKD: [0x2986] }, +{ source: [0xFF61], NFC: [0xFF61], NFD: [0xFF61], NFKC: [0x3002], NFKD: [0x3002] }, +{ source: [0xFF62], NFC: [0xFF62], NFD: [0xFF62], NFKC: [0x300C], NFKD: [0x300C] }, +{ source: [0xFF63], NFC: [0xFF63], NFD: [0xFF63], NFKC: [0x300D], NFKD: [0x300D] }, +{ source: [0xFF64], NFC: [0xFF64], NFD: [0xFF64], NFKC: [0x3001], NFKD: [0x3001] }, +{ source: [0xFF65], NFC: [0xFF65], NFD: [0xFF65], NFKC: [0x30FB], NFKD: [0x30FB] }, +{ source: [0xFF66], NFC: [0xFF66], NFD: [0xFF66], NFKC: [0x30F2], NFKD: [0x30F2] }, +{ source: [0xFF67], NFC: [0xFF67], NFD: [0xFF67], NFKC: [0x30A1], NFKD: [0x30A1] }, +{ source: [0xFF68], NFC: [0xFF68], NFD: [0xFF68], NFKC: [0x30A3], NFKD: [0x30A3] }, +{ source: [0xFF69], NFC: [0xFF69], NFD: [0xFF69], NFKC: [0x30A5], NFKD: [0x30A5] }, +{ source: [0xFF6A], NFC: [0xFF6A], NFD: [0xFF6A], NFKC: [0x30A7], NFKD: [0x30A7] }, +{ source: [0xFF6B], NFC: [0xFF6B], NFD: [0xFF6B], NFKC: [0x30A9], NFKD: [0x30A9] }, +{ source: [0xFF6C], NFC: [0xFF6C], NFD: [0xFF6C], NFKC: [0x30E3], NFKD: [0x30E3] }, +{ source: [0xFF6D], NFC: [0xFF6D], NFD: [0xFF6D], NFKC: [0x30E5], NFKD: [0x30E5] }, +{ source: [0xFF6E], NFC: [0xFF6E], NFD: [0xFF6E], NFKC: [0x30E7], NFKD: [0x30E7] }, +{ source: [0xFF6F], NFC: [0xFF6F], NFD: [0xFF6F], NFKC: [0x30C3], NFKD: [0x30C3] }, +{ source: [0xFF70], NFC: [0xFF70], NFD: [0xFF70], NFKC: [0x30FC], NFKD: [0x30FC] }, +{ source: [0xFF71], NFC: [0xFF71], NFD: [0xFF71], NFKC: [0x30A2], NFKD: [0x30A2] }, +{ source: [0xFF72], NFC: [0xFF72], NFD: [0xFF72], NFKC: [0x30A4], NFKD: [0x30A4] }, +{ source: [0xFF73], NFC: [0xFF73], NFD: [0xFF73], NFKC: [0x30A6], NFKD: [0x30A6] }, +{ source: [0xFF74], NFC: [0xFF74], NFD: [0xFF74], NFKC: [0x30A8], NFKD: [0x30A8] }, +{ source: [0xFF75], NFC: [0xFF75], NFD: [0xFF75], NFKC: [0x30AA], NFKD: [0x30AA] }, +{ source: [0xFF76], NFC: [0xFF76], NFD: [0xFF76], NFKC: [0x30AB], NFKD: [0x30AB] }, +{ source: [0xFF77], NFC: [0xFF77], NFD: [0xFF77], NFKC: [0x30AD], NFKD: [0x30AD] }, +{ source: [0xFF78], NFC: [0xFF78], NFD: [0xFF78], NFKC: [0x30AF], NFKD: [0x30AF] }, +{ source: [0xFF79], NFC: [0xFF79], NFD: [0xFF79], NFKC: [0x30B1], NFKD: [0x30B1] }, +{ source: [0xFF7A], NFC: [0xFF7A], NFD: [0xFF7A], NFKC: [0x30B3], NFKD: [0x30B3] }, +{ source: [0xFF7B], NFC: [0xFF7B], NFD: [0xFF7B], NFKC: [0x30B5], NFKD: [0x30B5] }, +{ source: [0xFF7C], NFC: [0xFF7C], NFD: [0xFF7C], NFKC: [0x30B7], NFKD: [0x30B7] }, +{ source: [0xFF7D], NFC: [0xFF7D], NFD: [0xFF7D], NFKC: [0x30B9], NFKD: [0x30B9] }, +{ source: [0xFF7E], NFC: [0xFF7E], NFD: [0xFF7E], NFKC: [0x30BB], NFKD: [0x30BB] }, +{ source: [0xFF7F], NFC: [0xFF7F], NFD: [0xFF7F], NFKC: [0x30BD], NFKD: [0x30BD] }, +{ source: [0xFF80], NFC: [0xFF80], NFD: [0xFF80], NFKC: [0x30BF], NFKD: [0x30BF] }, +{ source: [0xFF81], NFC: [0xFF81], NFD: [0xFF81], NFKC: [0x30C1], NFKD: [0x30C1] }, +{ source: [0xFF82], NFC: [0xFF82], NFD: [0xFF82], NFKC: [0x30C4], NFKD: [0x30C4] }, +{ source: [0xFF83], NFC: [0xFF83], NFD: [0xFF83], NFKC: [0x30C6], NFKD: [0x30C6] }, +{ source: [0xFF84], NFC: [0xFF84], NFD: [0xFF84], NFKC: [0x30C8], NFKD: [0x30C8] }, +{ source: [0xFF85], NFC: [0xFF85], NFD: [0xFF85], NFKC: [0x30CA], NFKD: [0x30CA] }, +{ source: [0xFF86], NFC: [0xFF86], NFD: [0xFF86], NFKC: [0x30CB], NFKD: [0x30CB] }, +{ source: [0xFF87], NFC: [0xFF87], NFD: [0xFF87], NFKC: [0x30CC], NFKD: [0x30CC] }, +{ source: [0xFF88], NFC: [0xFF88], NFD: [0xFF88], NFKC: [0x30CD], NFKD: [0x30CD] }, +{ source: [0xFF89], NFC: [0xFF89], NFD: [0xFF89], NFKC: [0x30CE], NFKD: [0x30CE] }, +{ source: [0xFF8A], NFC: [0xFF8A], NFD: [0xFF8A], NFKC: [0x30CF], NFKD: [0x30CF] }, +{ source: [0xFF8B], NFC: [0xFF8B], NFD: [0xFF8B], NFKC: [0x30D2], NFKD: [0x30D2] }, +{ source: [0xFF8C], NFC: [0xFF8C], NFD: [0xFF8C], NFKC: [0x30D5], NFKD: [0x30D5] }, +{ source: [0xFF8D], NFC: [0xFF8D], NFD: [0xFF8D], NFKC: [0x30D8], NFKD: [0x30D8] }, +{ source: [0xFF8E], NFC: [0xFF8E], NFD: [0xFF8E], NFKC: [0x30DB], NFKD: [0x30DB] }, +{ source: [0xFF8F], NFC: [0xFF8F], NFD: [0xFF8F], NFKC: [0x30DE], NFKD: [0x30DE] }, +{ source: [0xFF90], NFC: [0xFF90], NFD: [0xFF90], NFKC: [0x30DF], NFKD: [0x30DF] }, +{ source: [0xFF91], NFC: [0xFF91], NFD: [0xFF91], NFKC: [0x30E0], NFKD: [0x30E0] }, +{ source: [0xFF92], NFC: [0xFF92], NFD: [0xFF92], NFKC: [0x30E1], NFKD: [0x30E1] }, +{ source: [0xFF93], NFC: [0xFF93], NFD: [0xFF93], NFKC: [0x30E2], NFKD: [0x30E2] }, +{ source: [0xFF94], NFC: [0xFF94], NFD: [0xFF94], NFKC: [0x30E4], NFKD: [0x30E4] }, +{ source: [0xFF95], NFC: [0xFF95], NFD: [0xFF95], NFKC: [0x30E6], NFKD: [0x30E6] }, +{ source: [0xFF96], NFC: [0xFF96], NFD: [0xFF96], NFKC: [0x30E8], NFKD: [0x30E8] }, +{ source: [0xFF97], NFC: [0xFF97], NFD: [0xFF97], NFKC: [0x30E9], NFKD: [0x30E9] }, +{ source: [0xFF98], NFC: [0xFF98], NFD: [0xFF98], NFKC: [0x30EA], NFKD: [0x30EA] }, +{ source: [0xFF99], NFC: [0xFF99], NFD: [0xFF99], NFKC: [0x30EB], NFKD: [0x30EB] }, +{ source: [0xFF9A], NFC: [0xFF9A], NFD: [0xFF9A], NFKC: [0x30EC], NFKD: [0x30EC] }, +{ source: [0xFF9B], NFC: [0xFF9B], NFD: [0xFF9B], NFKC: [0x30ED], NFKD: [0x30ED] }, +{ source: [0xFF9C], NFC: [0xFF9C], NFD: [0xFF9C], NFKC: [0x30EF], NFKD: [0x30EF] }, +{ source: [0xFF9D], NFC: [0xFF9D], NFD: [0xFF9D], NFKC: [0x30F3], NFKD: [0x30F3] }, +{ source: [0xFF9E], NFC: [0xFF9E], NFD: [0xFF9E], NFKC: [0x3099], NFKD: [0x3099] }, +{ source: [0xFF9F], NFC: [0xFF9F], NFD: [0xFF9F], NFKC: [0x309A], NFKD: [0x309A] }, +{ source: [0xFFA0], NFC: [0xFFA0], NFD: [0xFFA0], NFKC: [0x1160], NFKD: [0x1160] }, +{ source: [0xFFA1], NFC: [0xFFA1], NFD: [0xFFA1], NFKC: [0x1100], NFKD: [0x1100] }, +{ source: [0xFFA2], NFC: [0xFFA2], NFD: [0xFFA2], NFKC: [0x1101], NFKD: [0x1101] }, +{ source: [0xFFA3], NFC: [0xFFA3], NFD: [0xFFA3], NFKC: [0x11AA], NFKD: [0x11AA] }, +{ source: [0xFFA4], NFC: [0xFFA4], NFD: [0xFFA4], NFKC: [0x1102], NFKD: [0x1102] }, +{ source: [0xFFA5], NFC: [0xFFA5], NFD: [0xFFA5], NFKC: [0x11AC], NFKD: [0x11AC] }, +{ source: [0xFFA6], NFC: [0xFFA6], NFD: [0xFFA6], NFKC: [0x11AD], NFKD: [0x11AD] }, +{ source: [0xFFA7], NFC: [0xFFA7], NFD: [0xFFA7], NFKC: [0x1103], NFKD: [0x1103] }, +{ source: [0xFFA8], NFC: [0xFFA8], NFD: [0xFFA8], NFKC: [0x1104], NFKD: [0x1104] }, +{ source: [0xFFA9], NFC: [0xFFA9], NFD: [0xFFA9], NFKC: [0x1105], NFKD: [0x1105] }, +{ source: [0xFFAA], NFC: [0xFFAA], NFD: [0xFFAA], NFKC: [0x11B0], NFKD: [0x11B0] }, +{ source: [0xFFAB], NFC: [0xFFAB], NFD: [0xFFAB], NFKC: [0x11B1], NFKD: [0x11B1] }, +{ source: [0xFFAC], NFC: [0xFFAC], NFD: [0xFFAC], NFKC: [0x11B2], NFKD: [0x11B2] }, +{ source: [0xFFAD], NFC: [0xFFAD], NFD: [0xFFAD], NFKC: [0x11B3], NFKD: [0x11B3] }, +{ source: [0xFFAE], NFC: [0xFFAE], NFD: [0xFFAE], NFKC: [0x11B4], NFKD: [0x11B4] }, +{ source: [0xFFAF], NFC: [0xFFAF], NFD: [0xFFAF], NFKC: [0x11B5], NFKD: [0x11B5] }, +{ source: [0xFFB0], NFC: [0xFFB0], NFD: [0xFFB0], NFKC: [0x111A], NFKD: [0x111A] }, +{ source: [0xFFB1], NFC: [0xFFB1], NFD: [0xFFB1], NFKC: [0x1106], NFKD: [0x1106] }, +{ source: [0xFFB2], NFC: [0xFFB2], NFD: [0xFFB2], NFKC: [0x1107], NFKD: [0x1107] }, +{ source: [0xFFB3], NFC: [0xFFB3], NFD: [0xFFB3], NFKC: [0x1108], NFKD: [0x1108] }, +{ source: [0xFFB4], NFC: [0xFFB4], NFD: [0xFFB4], NFKC: [0x1121], NFKD: [0x1121] }, +{ source: [0xFFB5], NFC: [0xFFB5], NFD: [0xFFB5], NFKC: [0x1109], NFKD: [0x1109] }, +{ source: [0xFFB6], NFC: [0xFFB6], NFD: [0xFFB6], NFKC: [0x110A], NFKD: [0x110A] }, +{ source: [0xFFB7], NFC: [0xFFB7], NFD: [0xFFB7], NFKC: [0x110B], NFKD: [0x110B] }, +{ source: [0xFFB8], NFC: [0xFFB8], NFD: [0xFFB8], NFKC: [0x110C], NFKD: [0x110C] }, +{ source: [0xFFB9], NFC: [0xFFB9], NFD: [0xFFB9], NFKC: [0x110D], NFKD: [0x110D] }, +{ source: [0xFFBA], NFC: [0xFFBA], NFD: [0xFFBA], NFKC: [0x110E], NFKD: [0x110E] }, +{ source: [0xFFBB], NFC: [0xFFBB], NFD: [0xFFBB], NFKC: [0x110F], NFKD: [0x110F] }, +{ source: [0xFFBC], NFC: [0xFFBC], NFD: [0xFFBC], NFKC: [0x1110], NFKD: [0x1110] }, +{ source: [0xFFBD], NFC: [0xFFBD], NFD: [0xFFBD], NFKC: [0x1111], NFKD: [0x1111] }, +{ source: [0xFFBE], NFC: [0xFFBE], NFD: [0xFFBE], NFKC: [0x1112], NFKD: [0x1112] }, +{ source: [0xFFC2], NFC: [0xFFC2], NFD: [0xFFC2], NFKC: [0x1161], NFKD: [0x1161] }, +{ source: [0xFFC3], NFC: [0xFFC3], NFD: [0xFFC3], NFKC: [0x1162], NFKD: [0x1162] }, +{ source: [0xFFC4], NFC: [0xFFC4], NFD: [0xFFC4], NFKC: [0x1163], NFKD: [0x1163] }, +{ source: [0xFFC5], NFC: [0xFFC5], NFD: [0xFFC5], NFKC: [0x1164], NFKD: [0x1164] }, +{ source: [0xFFC6], NFC: [0xFFC6], NFD: [0xFFC6], NFKC: [0x1165], NFKD: [0x1165] }, +{ source: [0xFFC7], NFC: [0xFFC7], NFD: [0xFFC7], NFKC: [0x1166], NFKD: [0x1166] }, +{ source: [0xFFCA], NFC: [0xFFCA], NFD: [0xFFCA], NFKC: [0x1167], NFKD: [0x1167] }, +{ source: [0xFFCB], NFC: [0xFFCB], NFD: [0xFFCB], NFKC: [0x1168], NFKD: [0x1168] }, +{ source: [0xFFCC], NFC: [0xFFCC], NFD: [0xFFCC], NFKC: [0x1169], NFKD: [0x1169] }, +{ source: [0xFFCD], NFC: [0xFFCD], NFD: [0xFFCD], NFKC: [0x116A], NFKD: [0x116A] }, +{ source: [0xFFCE], NFC: [0xFFCE], NFD: [0xFFCE], NFKC: [0x116B], NFKD: [0x116B] }, +{ source: [0xFFCF], NFC: [0xFFCF], NFD: [0xFFCF], NFKC: [0x116C], NFKD: [0x116C] }, +{ source: [0xFFD2], NFC: [0xFFD2], NFD: [0xFFD2], NFKC: [0x116D], NFKD: [0x116D] }, +{ source: [0xFFD3], NFC: [0xFFD3], NFD: [0xFFD3], NFKC: [0x116E], NFKD: [0x116E] }, +{ source: [0xFFD4], NFC: [0xFFD4], NFD: [0xFFD4], NFKC: [0x116F], NFKD: [0x116F] }, +{ source: [0xFFD5], NFC: [0xFFD5], NFD: [0xFFD5], NFKC: [0x1170], NFKD: [0x1170] }, +{ source: [0xFFD6], NFC: [0xFFD6], NFD: [0xFFD6], NFKC: [0x1171], NFKD: [0x1171] }, +{ source: [0xFFD7], NFC: [0xFFD7], NFD: [0xFFD7], NFKC: [0x1172], NFKD: [0x1172] }, +{ source: [0xFFDA], NFC: [0xFFDA], NFD: [0xFFDA], NFKC: [0x1173], NFKD: [0x1173] }, +{ source: [0xFFDB], NFC: [0xFFDB], NFD: [0xFFDB], NFKC: [0x1174], NFKD: [0x1174] }, +{ source: [0xFFDC], NFC: [0xFFDC], NFD: [0xFFDC], NFKC: [0x1175], NFKD: [0x1175] }, +{ source: [0xFFE0], NFC: [0xFFE0], NFD: [0xFFE0], NFKC: [0x00A2], NFKD: [0x00A2] }, +{ source: [0xFFE1], NFC: [0xFFE1], NFD: [0xFFE1], NFKC: [0x00A3], NFKD: [0x00A3] }, +{ source: [0xFFE2], NFC: [0xFFE2], NFD: [0xFFE2], NFKC: [0x00AC], NFKD: [0x00AC] }, +{ source: [0xFFE3], NFC: [0xFFE3], NFD: [0xFFE3], NFKC: [0x0020, 0x0304], NFKD: [0x0020, 0x0304] }, +{ source: [0xFFE4], NFC: [0xFFE4], NFD: [0xFFE4], NFKC: [0x00A6], NFKD: [0x00A6] }, +{ source: [0xFFE5], NFC: [0xFFE5], NFD: [0xFFE5], NFKC: [0x00A5], NFKD: [0x00A5] }, +{ source: [0xFFE6], NFC: [0xFFE6], NFD: [0xFFE6], NFKC: [0x20A9], NFKD: [0x20A9] }, +{ source: [0xFFE8], NFC: [0xFFE8], NFD: [0xFFE8], NFKC: [0x2502], NFKD: [0x2502] }, +{ source: [0xFFE9], NFC: [0xFFE9], NFD: [0xFFE9], NFKC: [0x2190], NFKD: [0x2190] }, +{ source: [0xFFEA], NFC: [0xFFEA], NFD: [0xFFEA], NFKC: [0x2191], NFKD: [0x2191] }, +{ source: [0xFFEB], NFC: [0xFFEB], NFD: [0xFFEB], NFKC: [0x2192], NFKD: [0x2192] }, +{ source: [0xFFEC], NFC: [0xFFEC], NFD: [0xFFEC], NFKC: [0x2193], NFKD: [0x2193] }, +{ source: [0xFFED], NFC: [0xFFED], NFD: [0xFFED], NFKC: [0x25A0], NFKD: [0x25A0] }, +{ source: [0xFFEE], NFC: [0xFFEE], NFD: [0xFFEE], NFKC: [0x25CB], NFKD: [0x25CB] }, +{ source: [0x1109A], NFC: [0x1109A], NFD: [0x11099, 0x110BA], NFKC: [0x1109A], NFKD: [0x11099, 0x110BA] }, +{ source: [0x1109C], NFC: [0x1109C], NFD: [0x1109B, 0x110BA], NFKC: [0x1109C], NFKD: [0x1109B, 0x110BA] }, +{ source: [0x110AB], NFC: [0x110AB], NFD: [0x110A5, 0x110BA], NFKC: [0x110AB], NFKD: [0x110A5, 0x110BA] }, +{ source: [0x1112E], NFC: [0x1112E], NFD: [0x11131, 0x11127], NFKC: [0x1112E], NFKD: [0x11131, 0x11127] }, +{ source: [0x1112F], NFC: [0x1112F], NFD: [0x11132, 0x11127], NFKC: [0x1112F], NFKD: [0x11132, 0x11127] }, +{ source: [0x1D15E], NFC: [0x1D157, 0x1D165], NFD: [0x1D157, 0x1D165], NFKC: [0x1D157, 0x1D165], NFKD: [0x1D157, 0x1D165] }, +{ source: [0x1D15F], NFC: [0x1D158, 0x1D165], NFD: [0x1D158, 0x1D165], NFKC: [0x1D158, 0x1D165], NFKD: [0x1D158, 0x1D165] }, +{ source: [0x1D160], NFC: [0x1D158, 0x1D165, 0x1D16E], NFD: [0x1D158, 0x1D165, 0x1D16E], NFKC: [0x1D158, 0x1D165, 0x1D16E], NFKD: [0x1D158, 0x1D165, 0x1D16E] }, +{ source: [0x1D161], NFC: [0x1D158, 0x1D165, 0x1D16F], NFD: [0x1D158, 0x1D165, 0x1D16F], NFKC: [0x1D158, 0x1D165, 0x1D16F], NFKD: [0x1D158, 0x1D165, 0x1D16F] }, +{ source: [0x1D162], NFC: [0x1D158, 0x1D165, 0x1D170], NFD: [0x1D158, 0x1D165, 0x1D170], NFKC: [0x1D158, 0x1D165, 0x1D170], NFKD: [0x1D158, 0x1D165, 0x1D170] }, +{ source: [0x1D163], NFC: [0x1D158, 0x1D165, 0x1D171], NFD: [0x1D158, 0x1D165, 0x1D171], NFKC: [0x1D158, 0x1D165, 0x1D171], NFKD: [0x1D158, 0x1D165, 0x1D171] }, +{ source: [0x1D164], NFC: [0x1D158, 0x1D165, 0x1D172], NFD: [0x1D158, 0x1D165, 0x1D172], NFKC: [0x1D158, 0x1D165, 0x1D172], NFKD: [0x1D158, 0x1D165, 0x1D172] }, +{ source: [0x1D1BB], NFC: [0x1D1B9, 0x1D165], NFD: [0x1D1B9, 0x1D165], NFKC: [0x1D1B9, 0x1D165], NFKD: [0x1D1B9, 0x1D165] }, +{ source: [0x1D1BC], NFC: [0x1D1BA, 0x1D165], NFD: [0x1D1BA, 0x1D165], NFKC: [0x1D1BA, 0x1D165], NFKD: [0x1D1BA, 0x1D165] }, +{ source: [0x1D1BD], NFC: [0x1D1B9, 0x1D165, 0x1D16E], NFD: [0x1D1B9, 0x1D165, 0x1D16E], NFKC: [0x1D1B9, 0x1D165, 0x1D16E], NFKD: [0x1D1B9, 0x1D165, 0x1D16E] }, +{ source: [0x1D1BE], NFC: [0x1D1BA, 0x1D165, 0x1D16E], NFD: [0x1D1BA, 0x1D165, 0x1D16E], NFKC: [0x1D1BA, 0x1D165, 0x1D16E], NFKD: [0x1D1BA, 0x1D165, 0x1D16E] }, +{ source: [0x1D1BF], NFC: [0x1D1B9, 0x1D165, 0x1D16F], NFD: [0x1D1B9, 0x1D165, 0x1D16F], NFKC: [0x1D1B9, 0x1D165, 0x1D16F], NFKD: [0x1D1B9, 0x1D165, 0x1D16F] }, +{ source: [0x1D1C0], NFC: [0x1D1BA, 0x1D165, 0x1D16F], NFD: [0x1D1BA, 0x1D165, 0x1D16F], NFKC: [0x1D1BA, 0x1D165, 0x1D16F], NFKD: [0x1D1BA, 0x1D165, 0x1D16F] }, +{ source: [0x1D400], NFC: [0x1D400], NFD: [0x1D400], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D401], NFC: [0x1D401], NFD: [0x1D401], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D402], NFC: [0x1D402], NFD: [0x1D402], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D403], NFC: [0x1D403], NFD: [0x1D403], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D404], NFC: [0x1D404], NFD: [0x1D404], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D405], NFC: [0x1D405], NFD: [0x1D405], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D406], NFC: [0x1D406], NFD: [0x1D406], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D407], NFC: [0x1D407], NFD: [0x1D407], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D408], NFC: [0x1D408], NFD: [0x1D408], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D409], NFC: [0x1D409], NFD: [0x1D409], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D40A], NFC: [0x1D40A], NFD: [0x1D40A], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D40B], NFC: [0x1D40B], NFD: [0x1D40B], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D40C], NFC: [0x1D40C], NFD: [0x1D40C], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D40D], NFC: [0x1D40D], NFD: [0x1D40D], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D40E], NFC: [0x1D40E], NFD: [0x1D40E], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D40F], NFC: [0x1D40F], NFD: [0x1D40F], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D410], NFC: [0x1D410], NFD: [0x1D410], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D411], NFC: [0x1D411], NFD: [0x1D411], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D412], NFC: [0x1D412], NFD: [0x1D412], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D413], NFC: [0x1D413], NFD: [0x1D413], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D414], NFC: [0x1D414], NFD: [0x1D414], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D415], NFC: [0x1D415], NFD: [0x1D415], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D416], NFC: [0x1D416], NFD: [0x1D416], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D417], NFC: [0x1D417], NFD: [0x1D417], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D418], NFC: [0x1D418], NFD: [0x1D418], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D419], NFC: [0x1D419], NFD: [0x1D419], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D41A], NFC: [0x1D41A], NFD: [0x1D41A], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D41B], NFC: [0x1D41B], NFD: [0x1D41B], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D41C], NFC: [0x1D41C], NFD: [0x1D41C], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D41D], NFC: [0x1D41D], NFD: [0x1D41D], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D41E], NFC: [0x1D41E], NFD: [0x1D41E], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D41F], NFC: [0x1D41F], NFD: [0x1D41F], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D420], NFC: [0x1D420], NFD: [0x1D420], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D421], NFC: [0x1D421], NFD: [0x1D421], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D422], NFC: [0x1D422], NFD: [0x1D422], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D423], NFC: [0x1D423], NFD: [0x1D423], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D424], NFC: [0x1D424], NFD: [0x1D424], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D425], NFC: [0x1D425], NFD: [0x1D425], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D426], NFC: [0x1D426], NFD: [0x1D426], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D427], NFC: [0x1D427], NFD: [0x1D427], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D428], NFC: [0x1D428], NFD: [0x1D428], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D429], NFC: [0x1D429], NFD: [0x1D429], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D42A], NFC: [0x1D42A], NFD: [0x1D42A], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D42B], NFC: [0x1D42B], NFD: [0x1D42B], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D42C], NFC: [0x1D42C], NFD: [0x1D42C], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D42D], NFC: [0x1D42D], NFD: [0x1D42D], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D42E], NFC: [0x1D42E], NFD: [0x1D42E], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D42F], NFC: [0x1D42F], NFD: [0x1D42F], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D430], NFC: [0x1D430], NFD: [0x1D430], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D431], NFC: [0x1D431], NFD: [0x1D431], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D432], NFC: [0x1D432], NFD: [0x1D432], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D433], NFC: [0x1D433], NFD: [0x1D433], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D434], NFC: [0x1D434], NFD: [0x1D434], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D435], NFC: [0x1D435], NFD: [0x1D435], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D436], NFC: [0x1D436], NFD: [0x1D436], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D437], NFC: [0x1D437], NFD: [0x1D437], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D438], NFC: [0x1D438], NFD: [0x1D438], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D439], NFC: [0x1D439], NFD: [0x1D439], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D43A], NFC: [0x1D43A], NFD: [0x1D43A], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D43B], NFC: [0x1D43B], NFD: [0x1D43B], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D43C], NFC: [0x1D43C], NFD: [0x1D43C], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D43D], NFC: [0x1D43D], NFD: [0x1D43D], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D43E], NFC: [0x1D43E], NFD: [0x1D43E], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D43F], NFC: [0x1D43F], NFD: [0x1D43F], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D440], NFC: [0x1D440], NFD: [0x1D440], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D441], NFC: [0x1D441], NFD: [0x1D441], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D442], NFC: [0x1D442], NFD: [0x1D442], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D443], NFC: [0x1D443], NFD: [0x1D443], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D444], NFC: [0x1D444], NFD: [0x1D444], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D445], NFC: [0x1D445], NFD: [0x1D445], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D446], NFC: [0x1D446], NFD: [0x1D446], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D447], NFC: [0x1D447], NFD: [0x1D447], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D448], NFC: [0x1D448], NFD: [0x1D448], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D449], NFC: [0x1D449], NFD: [0x1D449], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D44A], NFC: [0x1D44A], NFD: [0x1D44A], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D44B], NFC: [0x1D44B], NFD: [0x1D44B], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D44C], NFC: [0x1D44C], NFD: [0x1D44C], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D44D], NFC: [0x1D44D], NFD: [0x1D44D], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D44E], NFC: [0x1D44E], NFD: [0x1D44E], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D44F], NFC: [0x1D44F], NFD: [0x1D44F], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D450], NFC: [0x1D450], NFD: [0x1D450], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D451], NFC: [0x1D451], NFD: [0x1D451], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D452], NFC: [0x1D452], NFD: [0x1D452], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D453], NFC: [0x1D453], NFD: [0x1D453], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D454], NFC: [0x1D454], NFD: [0x1D454], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D456], NFC: [0x1D456], NFD: [0x1D456], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D457], NFC: [0x1D457], NFD: [0x1D457], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D458], NFC: [0x1D458], NFD: [0x1D458], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D459], NFC: [0x1D459], NFD: [0x1D459], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D45A], NFC: [0x1D45A], NFD: [0x1D45A], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D45B], NFC: [0x1D45B], NFD: [0x1D45B], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D45C], NFC: [0x1D45C], NFD: [0x1D45C], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D45D], NFC: [0x1D45D], NFD: [0x1D45D], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D45E], NFC: [0x1D45E], NFD: [0x1D45E], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D45F], NFC: [0x1D45F], NFD: [0x1D45F], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D460], NFC: [0x1D460], NFD: [0x1D460], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D461], NFC: [0x1D461], NFD: [0x1D461], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D462], NFC: [0x1D462], NFD: [0x1D462], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D463], NFC: [0x1D463], NFD: [0x1D463], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D464], NFC: [0x1D464], NFD: [0x1D464], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D465], NFC: [0x1D465], NFD: [0x1D465], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D466], NFC: [0x1D466], NFD: [0x1D466], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D467], NFC: [0x1D467], NFD: [0x1D467], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D468], NFC: [0x1D468], NFD: [0x1D468], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D469], NFC: [0x1D469], NFD: [0x1D469], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D46A], NFC: [0x1D46A], NFD: [0x1D46A], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D46B], NFC: [0x1D46B], NFD: [0x1D46B], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D46C], NFC: [0x1D46C], NFD: [0x1D46C], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D46D], NFC: [0x1D46D], NFD: [0x1D46D], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D46E], NFC: [0x1D46E], NFD: [0x1D46E], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D46F], NFC: [0x1D46F], NFD: [0x1D46F], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D470], NFC: [0x1D470], NFD: [0x1D470], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D471], NFC: [0x1D471], NFD: [0x1D471], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D472], NFC: [0x1D472], NFD: [0x1D472], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D473], NFC: [0x1D473], NFD: [0x1D473], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D474], NFC: [0x1D474], NFD: [0x1D474], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D475], NFC: [0x1D475], NFD: [0x1D475], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D476], NFC: [0x1D476], NFD: [0x1D476], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D477], NFC: [0x1D477], NFD: [0x1D477], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D478], NFC: [0x1D478], NFD: [0x1D478], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D479], NFC: [0x1D479], NFD: [0x1D479], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D47A], NFC: [0x1D47A], NFD: [0x1D47A], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D47B], NFC: [0x1D47B], NFD: [0x1D47B], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D47C], NFC: [0x1D47C], NFD: [0x1D47C], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D47D], NFC: [0x1D47D], NFD: [0x1D47D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D47E], NFC: [0x1D47E], NFD: [0x1D47E], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D47F], NFC: [0x1D47F], NFD: [0x1D47F], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D480], NFC: [0x1D480], NFD: [0x1D480], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D481], NFC: [0x1D481], NFD: [0x1D481], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D482], NFC: [0x1D482], NFD: [0x1D482], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D483], NFC: [0x1D483], NFD: [0x1D483], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D484], NFC: [0x1D484], NFD: [0x1D484], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D485], NFC: [0x1D485], NFD: [0x1D485], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D486], NFC: [0x1D486], NFD: [0x1D486], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D487], NFC: [0x1D487], NFD: [0x1D487], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D488], NFC: [0x1D488], NFD: [0x1D488], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D489], NFC: [0x1D489], NFD: [0x1D489], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D48A], NFC: [0x1D48A], NFD: [0x1D48A], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D48B], NFC: [0x1D48B], NFD: [0x1D48B], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D48C], NFC: [0x1D48C], NFD: [0x1D48C], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D48D], NFC: [0x1D48D], NFD: [0x1D48D], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D48E], NFC: [0x1D48E], NFD: [0x1D48E], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D48F], NFC: [0x1D48F], NFD: [0x1D48F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D490], NFC: [0x1D490], NFD: [0x1D490], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D491], NFC: [0x1D491], NFD: [0x1D491], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D492], NFC: [0x1D492], NFD: [0x1D492], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D493], NFC: [0x1D493], NFD: [0x1D493], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D494], NFC: [0x1D494], NFD: [0x1D494], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D495], NFC: [0x1D495], NFD: [0x1D495], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D496], NFC: [0x1D496], NFD: [0x1D496], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D497], NFC: [0x1D497], NFD: [0x1D497], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D498], NFC: [0x1D498], NFD: [0x1D498], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D499], NFC: [0x1D499], NFD: [0x1D499], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D49A], NFC: [0x1D49A], NFD: [0x1D49A], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D49B], NFC: [0x1D49B], NFD: [0x1D49B], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D49C], NFC: [0x1D49C], NFD: [0x1D49C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D49E], NFC: [0x1D49E], NFD: [0x1D49E], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D49F], NFC: [0x1D49F], NFD: [0x1D49F], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D4A2], NFC: [0x1D4A2], NFD: [0x1D4A2], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D4A5], NFC: [0x1D4A5], NFD: [0x1D4A5], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D4A6], NFC: [0x1D4A6], NFD: [0x1D4A6], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D4A9], NFC: [0x1D4A9], NFD: [0x1D4A9], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D4AA], NFC: [0x1D4AA], NFD: [0x1D4AA], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D4AB], NFC: [0x1D4AB], NFD: [0x1D4AB], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D4AC], NFC: [0x1D4AC], NFD: [0x1D4AC], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D4AE], NFC: [0x1D4AE], NFD: [0x1D4AE], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D4AF], NFC: [0x1D4AF], NFD: [0x1D4AF], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D4B0], NFC: [0x1D4B0], NFD: [0x1D4B0], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D4B1], NFC: [0x1D4B1], NFD: [0x1D4B1], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D4B2], NFC: [0x1D4B2], NFD: [0x1D4B2], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D4B3], NFC: [0x1D4B3], NFD: [0x1D4B3], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D4B4], NFC: [0x1D4B4], NFD: [0x1D4B4], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D4B5], NFC: [0x1D4B5], NFD: [0x1D4B5], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D4B6], NFC: [0x1D4B6], NFD: [0x1D4B6], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D4B7], NFC: [0x1D4B7], NFD: [0x1D4B7], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D4B8], NFC: [0x1D4B8], NFD: [0x1D4B8], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D4B9], NFC: [0x1D4B9], NFD: [0x1D4B9], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D4BB], NFC: [0x1D4BB], NFD: [0x1D4BB], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D4BD], NFC: [0x1D4BD], NFD: [0x1D4BD], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D4BE], NFC: [0x1D4BE], NFD: [0x1D4BE], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D4BF], NFC: [0x1D4BF], NFD: [0x1D4BF], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D4C0], NFC: [0x1D4C0], NFD: [0x1D4C0], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D4C1], NFC: [0x1D4C1], NFD: [0x1D4C1], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D4C2], NFC: [0x1D4C2], NFD: [0x1D4C2], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D4C3], NFC: [0x1D4C3], NFD: [0x1D4C3], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D4C5], NFC: [0x1D4C5], NFD: [0x1D4C5], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D4C6], NFC: [0x1D4C6], NFD: [0x1D4C6], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D4C7], NFC: [0x1D4C7], NFD: [0x1D4C7], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D4C8], NFC: [0x1D4C8], NFD: [0x1D4C8], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D4C9], NFC: [0x1D4C9], NFD: [0x1D4C9], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D4CA], NFC: [0x1D4CA], NFD: [0x1D4CA], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D4CB], NFC: [0x1D4CB], NFD: [0x1D4CB], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D4CC], NFC: [0x1D4CC], NFD: [0x1D4CC], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D4CD], NFC: [0x1D4CD], NFD: [0x1D4CD], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D4CE], NFC: [0x1D4CE], NFD: [0x1D4CE], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D4CF], NFC: [0x1D4CF], NFD: [0x1D4CF], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D4D0], NFC: [0x1D4D0], NFD: [0x1D4D0], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D4D1], NFC: [0x1D4D1], NFD: [0x1D4D1], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D4D2], NFC: [0x1D4D2], NFD: [0x1D4D2], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D4D3], NFC: [0x1D4D3], NFD: [0x1D4D3], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D4D4], NFC: [0x1D4D4], NFD: [0x1D4D4], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D4D5], NFC: [0x1D4D5], NFD: [0x1D4D5], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D4D6], NFC: [0x1D4D6], NFD: [0x1D4D6], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D4D7], NFC: [0x1D4D7], NFD: [0x1D4D7], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D4D8], NFC: [0x1D4D8], NFD: [0x1D4D8], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D4D9], NFC: [0x1D4D9], NFD: [0x1D4D9], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D4DA], NFC: [0x1D4DA], NFD: [0x1D4DA], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D4DB], NFC: [0x1D4DB], NFD: [0x1D4DB], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D4DC], NFC: [0x1D4DC], NFD: [0x1D4DC], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D4DD], NFC: [0x1D4DD], NFD: [0x1D4DD], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D4DE], NFC: [0x1D4DE], NFD: [0x1D4DE], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D4DF], NFC: [0x1D4DF], NFD: [0x1D4DF], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D4E0], NFC: [0x1D4E0], NFD: [0x1D4E0], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D4E1], NFC: [0x1D4E1], NFD: [0x1D4E1], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D4E2], NFC: [0x1D4E2], NFD: [0x1D4E2], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D4E3], NFC: [0x1D4E3], NFD: [0x1D4E3], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D4E4], NFC: [0x1D4E4], NFD: [0x1D4E4], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D4E5], NFC: [0x1D4E5], NFD: [0x1D4E5], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D4E6], NFC: [0x1D4E6], NFD: [0x1D4E6], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D4E7], NFC: [0x1D4E7], NFD: [0x1D4E7], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D4E8], NFC: [0x1D4E8], NFD: [0x1D4E8], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D4E9], NFC: [0x1D4E9], NFD: [0x1D4E9], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D4EA], NFC: [0x1D4EA], NFD: [0x1D4EA], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D4EB], NFC: [0x1D4EB], NFD: [0x1D4EB], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D4EC], NFC: [0x1D4EC], NFD: [0x1D4EC], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D4ED], NFC: [0x1D4ED], NFD: [0x1D4ED], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D4EE], NFC: [0x1D4EE], NFD: [0x1D4EE], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D4EF], NFC: [0x1D4EF], NFD: [0x1D4EF], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D4F0], NFC: [0x1D4F0], NFD: [0x1D4F0], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D4F1], NFC: [0x1D4F1], NFD: [0x1D4F1], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D4F2], NFC: [0x1D4F2], NFD: [0x1D4F2], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D4F3], NFC: [0x1D4F3], NFD: [0x1D4F3], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D4F4], NFC: [0x1D4F4], NFD: [0x1D4F4], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D4F5], NFC: [0x1D4F5], NFD: [0x1D4F5], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D4F6], NFC: [0x1D4F6], NFD: [0x1D4F6], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D4F7], NFC: [0x1D4F7], NFD: [0x1D4F7], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D4F8], NFC: [0x1D4F8], NFD: [0x1D4F8], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D4F9], NFC: [0x1D4F9], NFD: [0x1D4F9], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D4FA], NFC: [0x1D4FA], NFD: [0x1D4FA], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D4FB], NFC: [0x1D4FB], NFD: [0x1D4FB], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D4FC], NFC: [0x1D4FC], NFD: [0x1D4FC], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D4FD], NFC: [0x1D4FD], NFD: [0x1D4FD], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D4FE], NFC: [0x1D4FE], NFD: [0x1D4FE], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D4FF], NFC: [0x1D4FF], NFD: [0x1D4FF], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D500], NFC: [0x1D500], NFD: [0x1D500], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D501], NFC: [0x1D501], NFD: [0x1D501], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D502], NFC: [0x1D502], NFD: [0x1D502], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D503], NFC: [0x1D503], NFD: [0x1D503], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D504], NFC: [0x1D504], NFD: [0x1D504], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D505], NFC: [0x1D505], NFD: [0x1D505], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D507], NFC: [0x1D507], NFD: [0x1D507], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D508], NFC: [0x1D508], NFD: [0x1D508], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D509], NFC: [0x1D509], NFD: [0x1D509], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D50A], NFC: [0x1D50A], NFD: [0x1D50A], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D50D], NFC: [0x1D50D], NFD: [0x1D50D], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D50E], NFC: [0x1D50E], NFD: [0x1D50E], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D50F], NFC: [0x1D50F], NFD: [0x1D50F], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D510], NFC: [0x1D510], NFD: [0x1D510], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D511], NFC: [0x1D511], NFD: [0x1D511], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D512], NFC: [0x1D512], NFD: [0x1D512], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D513], NFC: [0x1D513], NFD: [0x1D513], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D514], NFC: [0x1D514], NFD: [0x1D514], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D516], NFC: [0x1D516], NFD: [0x1D516], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D517], NFC: [0x1D517], NFD: [0x1D517], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D518], NFC: [0x1D518], NFD: [0x1D518], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D519], NFC: [0x1D519], NFD: [0x1D519], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D51A], NFC: [0x1D51A], NFD: [0x1D51A], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D51B], NFC: [0x1D51B], NFD: [0x1D51B], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D51C], NFC: [0x1D51C], NFD: [0x1D51C], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D51E], NFC: [0x1D51E], NFD: [0x1D51E], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D51F], NFC: [0x1D51F], NFD: [0x1D51F], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D520], NFC: [0x1D520], NFD: [0x1D520], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D521], NFC: [0x1D521], NFD: [0x1D521], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D522], NFC: [0x1D522], NFD: [0x1D522], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D523], NFC: [0x1D523], NFD: [0x1D523], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D524], NFC: [0x1D524], NFD: [0x1D524], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D525], NFC: [0x1D525], NFD: [0x1D525], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D526], NFC: [0x1D526], NFD: [0x1D526], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D527], NFC: [0x1D527], NFD: [0x1D527], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D528], NFC: [0x1D528], NFD: [0x1D528], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D529], NFC: [0x1D529], NFD: [0x1D529], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D52A], NFC: [0x1D52A], NFD: [0x1D52A], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D52B], NFC: [0x1D52B], NFD: [0x1D52B], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D52C], NFC: [0x1D52C], NFD: [0x1D52C], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D52D], NFC: [0x1D52D], NFD: [0x1D52D], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D52E], NFC: [0x1D52E], NFD: [0x1D52E], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D52F], NFC: [0x1D52F], NFD: [0x1D52F], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D530], NFC: [0x1D530], NFD: [0x1D530], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D531], NFC: [0x1D531], NFD: [0x1D531], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D532], NFC: [0x1D532], NFD: [0x1D532], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D533], NFC: [0x1D533], NFD: [0x1D533], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D534], NFC: [0x1D534], NFD: [0x1D534], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D535], NFC: [0x1D535], NFD: [0x1D535], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D536], NFC: [0x1D536], NFD: [0x1D536], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D537], NFC: [0x1D537], NFD: [0x1D537], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D538], NFC: [0x1D538], NFD: [0x1D538], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D539], NFC: [0x1D539], NFD: [0x1D539], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D53B], NFC: [0x1D53B], NFD: [0x1D53B], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D53C], NFC: [0x1D53C], NFD: [0x1D53C], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D53D], NFC: [0x1D53D], NFD: [0x1D53D], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D53E], NFC: [0x1D53E], NFD: [0x1D53E], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D540], NFC: [0x1D540], NFD: [0x1D540], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D541], NFC: [0x1D541], NFD: [0x1D541], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D542], NFC: [0x1D542], NFD: [0x1D542], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D543], NFC: [0x1D543], NFD: [0x1D543], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D544], NFC: [0x1D544], NFD: [0x1D544], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D546], NFC: [0x1D546], NFD: [0x1D546], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D54A], NFC: [0x1D54A], NFD: [0x1D54A], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D54B], NFC: [0x1D54B], NFD: [0x1D54B], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D54C], NFC: [0x1D54C], NFD: [0x1D54C], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D54D], NFC: [0x1D54D], NFD: [0x1D54D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D54E], NFC: [0x1D54E], NFD: [0x1D54E], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D54F], NFC: [0x1D54F], NFD: [0x1D54F], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D550], NFC: [0x1D550], NFD: [0x1D550], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D552], NFC: [0x1D552], NFD: [0x1D552], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D553], NFC: [0x1D553], NFD: [0x1D553], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D554], NFC: [0x1D554], NFD: [0x1D554], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D555], NFC: [0x1D555], NFD: [0x1D555], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D556], NFC: [0x1D556], NFD: [0x1D556], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D557], NFC: [0x1D557], NFD: [0x1D557], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D558], NFC: [0x1D558], NFD: [0x1D558], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D559], NFC: [0x1D559], NFD: [0x1D559], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D55A], NFC: [0x1D55A], NFD: [0x1D55A], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D55B], NFC: [0x1D55B], NFD: [0x1D55B], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D55C], NFC: [0x1D55C], NFD: [0x1D55C], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D55D], NFC: [0x1D55D], NFD: [0x1D55D], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D55E], NFC: [0x1D55E], NFD: [0x1D55E], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D55F], NFC: [0x1D55F], NFD: [0x1D55F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D560], NFC: [0x1D560], NFD: [0x1D560], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D561], NFC: [0x1D561], NFD: [0x1D561], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D562], NFC: [0x1D562], NFD: [0x1D562], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D563], NFC: [0x1D563], NFD: [0x1D563], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D564], NFC: [0x1D564], NFD: [0x1D564], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D565], NFC: [0x1D565], NFD: [0x1D565], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D566], NFC: [0x1D566], NFD: [0x1D566], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D567], NFC: [0x1D567], NFD: [0x1D567], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D568], NFC: [0x1D568], NFD: [0x1D568], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D569], NFC: [0x1D569], NFD: [0x1D569], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D56A], NFC: [0x1D56A], NFD: [0x1D56A], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D56B], NFC: [0x1D56B], NFD: [0x1D56B], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D56C], NFC: [0x1D56C], NFD: [0x1D56C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D56D], NFC: [0x1D56D], NFD: [0x1D56D], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D56E], NFC: [0x1D56E], NFD: [0x1D56E], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D56F], NFC: [0x1D56F], NFD: [0x1D56F], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D570], NFC: [0x1D570], NFD: [0x1D570], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D571], NFC: [0x1D571], NFD: [0x1D571], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D572], NFC: [0x1D572], NFD: [0x1D572], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D573], NFC: [0x1D573], NFD: [0x1D573], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D574], NFC: [0x1D574], NFD: [0x1D574], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D575], NFC: [0x1D575], NFD: [0x1D575], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D576], NFC: [0x1D576], NFD: [0x1D576], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D577], NFC: [0x1D577], NFD: [0x1D577], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D578], NFC: [0x1D578], NFD: [0x1D578], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D579], NFC: [0x1D579], NFD: [0x1D579], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D57A], NFC: [0x1D57A], NFD: [0x1D57A], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D57B], NFC: [0x1D57B], NFD: [0x1D57B], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D57C], NFC: [0x1D57C], NFD: [0x1D57C], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D57D], NFC: [0x1D57D], NFD: [0x1D57D], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D57E], NFC: [0x1D57E], NFD: [0x1D57E], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D57F], NFC: [0x1D57F], NFD: [0x1D57F], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D580], NFC: [0x1D580], NFD: [0x1D580], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D581], NFC: [0x1D581], NFD: [0x1D581], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D582], NFC: [0x1D582], NFD: [0x1D582], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D583], NFC: [0x1D583], NFD: [0x1D583], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D584], NFC: [0x1D584], NFD: [0x1D584], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D585], NFC: [0x1D585], NFD: [0x1D585], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D586], NFC: [0x1D586], NFD: [0x1D586], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D587], NFC: [0x1D587], NFD: [0x1D587], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D588], NFC: [0x1D588], NFD: [0x1D588], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D589], NFC: [0x1D589], NFD: [0x1D589], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D58A], NFC: [0x1D58A], NFD: [0x1D58A], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D58B], NFC: [0x1D58B], NFD: [0x1D58B], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D58C], NFC: [0x1D58C], NFD: [0x1D58C], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D58D], NFC: [0x1D58D], NFD: [0x1D58D], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D58E], NFC: [0x1D58E], NFD: [0x1D58E], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D58F], NFC: [0x1D58F], NFD: [0x1D58F], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D590], NFC: [0x1D590], NFD: [0x1D590], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D591], NFC: [0x1D591], NFD: [0x1D591], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D592], NFC: [0x1D592], NFD: [0x1D592], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D593], NFC: [0x1D593], NFD: [0x1D593], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D594], NFC: [0x1D594], NFD: [0x1D594], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D595], NFC: [0x1D595], NFD: [0x1D595], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D596], NFC: [0x1D596], NFD: [0x1D596], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D597], NFC: [0x1D597], NFD: [0x1D597], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D598], NFC: [0x1D598], NFD: [0x1D598], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D599], NFC: [0x1D599], NFD: [0x1D599], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D59A], NFC: [0x1D59A], NFD: [0x1D59A], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D59B], NFC: [0x1D59B], NFD: [0x1D59B], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D59C], NFC: [0x1D59C], NFD: [0x1D59C], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D59D], NFC: [0x1D59D], NFD: [0x1D59D], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D59E], NFC: [0x1D59E], NFD: [0x1D59E], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D59F], NFC: [0x1D59F], NFD: [0x1D59F], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D5A0], NFC: [0x1D5A0], NFD: [0x1D5A0], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D5A1], NFC: [0x1D5A1], NFD: [0x1D5A1], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D5A2], NFC: [0x1D5A2], NFD: [0x1D5A2], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D5A3], NFC: [0x1D5A3], NFD: [0x1D5A3], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D5A4], NFC: [0x1D5A4], NFD: [0x1D5A4], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D5A5], NFC: [0x1D5A5], NFD: [0x1D5A5], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D5A6], NFC: [0x1D5A6], NFD: [0x1D5A6], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D5A7], NFC: [0x1D5A7], NFD: [0x1D5A7], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D5A8], NFC: [0x1D5A8], NFD: [0x1D5A8], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D5A9], NFC: [0x1D5A9], NFD: [0x1D5A9], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D5AA], NFC: [0x1D5AA], NFD: [0x1D5AA], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D5AB], NFC: [0x1D5AB], NFD: [0x1D5AB], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D5AC], NFC: [0x1D5AC], NFD: [0x1D5AC], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D5AD], NFC: [0x1D5AD], NFD: [0x1D5AD], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D5AE], NFC: [0x1D5AE], NFD: [0x1D5AE], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D5AF], NFC: [0x1D5AF], NFD: [0x1D5AF], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D5B0], NFC: [0x1D5B0], NFD: [0x1D5B0], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D5B1], NFC: [0x1D5B1], NFD: [0x1D5B1], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D5B2], NFC: [0x1D5B2], NFD: [0x1D5B2], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D5B3], NFC: [0x1D5B3], NFD: [0x1D5B3], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D5B4], NFC: [0x1D5B4], NFD: [0x1D5B4], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D5B5], NFC: [0x1D5B5], NFD: [0x1D5B5], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D5B6], NFC: [0x1D5B6], NFD: [0x1D5B6], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D5B7], NFC: [0x1D5B7], NFD: [0x1D5B7], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D5B8], NFC: [0x1D5B8], NFD: [0x1D5B8], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D5B9], NFC: [0x1D5B9], NFD: [0x1D5B9], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D5BA], NFC: [0x1D5BA], NFD: [0x1D5BA], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D5BB], NFC: [0x1D5BB], NFD: [0x1D5BB], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D5BC], NFC: [0x1D5BC], NFD: [0x1D5BC], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D5BD], NFC: [0x1D5BD], NFD: [0x1D5BD], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D5BE], NFC: [0x1D5BE], NFD: [0x1D5BE], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D5BF], NFC: [0x1D5BF], NFD: [0x1D5BF], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D5C0], NFC: [0x1D5C0], NFD: [0x1D5C0], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D5C1], NFC: [0x1D5C1], NFD: [0x1D5C1], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D5C2], NFC: [0x1D5C2], NFD: [0x1D5C2], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D5C3], NFC: [0x1D5C3], NFD: [0x1D5C3], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D5C4], NFC: [0x1D5C4], NFD: [0x1D5C4], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D5C5], NFC: [0x1D5C5], NFD: [0x1D5C5], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D5C6], NFC: [0x1D5C6], NFD: [0x1D5C6], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D5C7], NFC: [0x1D5C7], NFD: [0x1D5C7], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D5C8], NFC: [0x1D5C8], NFD: [0x1D5C8], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D5C9], NFC: [0x1D5C9], NFD: [0x1D5C9], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D5CA], NFC: [0x1D5CA], NFD: [0x1D5CA], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D5CB], NFC: [0x1D5CB], NFD: [0x1D5CB], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D5CC], NFC: [0x1D5CC], NFD: [0x1D5CC], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D5CD], NFC: [0x1D5CD], NFD: [0x1D5CD], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D5CE], NFC: [0x1D5CE], NFD: [0x1D5CE], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D5CF], NFC: [0x1D5CF], NFD: [0x1D5CF], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D5D0], NFC: [0x1D5D0], NFD: [0x1D5D0], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D5D1], NFC: [0x1D5D1], NFD: [0x1D5D1], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D5D2], NFC: [0x1D5D2], NFD: [0x1D5D2], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D5D3], NFC: [0x1D5D3], NFD: [0x1D5D3], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D5D4], NFC: [0x1D5D4], NFD: [0x1D5D4], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D5D5], NFC: [0x1D5D5], NFD: [0x1D5D5], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D5D6], NFC: [0x1D5D6], NFD: [0x1D5D6], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D5D7], NFC: [0x1D5D7], NFD: [0x1D5D7], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D5D8], NFC: [0x1D5D8], NFD: [0x1D5D8], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D5D9], NFC: [0x1D5D9], NFD: [0x1D5D9], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D5DA], NFC: [0x1D5DA], NFD: [0x1D5DA], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D5DB], NFC: [0x1D5DB], NFD: [0x1D5DB], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D5DC], NFC: [0x1D5DC], NFD: [0x1D5DC], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D5DD], NFC: [0x1D5DD], NFD: [0x1D5DD], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D5DE], NFC: [0x1D5DE], NFD: [0x1D5DE], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D5DF], NFC: [0x1D5DF], NFD: [0x1D5DF], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D5E0], NFC: [0x1D5E0], NFD: [0x1D5E0], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D5E1], NFC: [0x1D5E1], NFD: [0x1D5E1], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D5E2], NFC: [0x1D5E2], NFD: [0x1D5E2], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D5E3], NFC: [0x1D5E3], NFD: [0x1D5E3], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D5E4], NFC: [0x1D5E4], NFD: [0x1D5E4], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D5E5], NFC: [0x1D5E5], NFD: [0x1D5E5], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D5E6], NFC: [0x1D5E6], NFD: [0x1D5E6], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D5E7], NFC: [0x1D5E7], NFD: [0x1D5E7], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D5E8], NFC: [0x1D5E8], NFD: [0x1D5E8], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D5E9], NFC: [0x1D5E9], NFD: [0x1D5E9], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D5EA], NFC: [0x1D5EA], NFD: [0x1D5EA], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D5EB], NFC: [0x1D5EB], NFD: [0x1D5EB], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D5EC], NFC: [0x1D5EC], NFD: [0x1D5EC], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D5ED], NFC: [0x1D5ED], NFD: [0x1D5ED], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D5EE], NFC: [0x1D5EE], NFD: [0x1D5EE], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D5EF], NFC: [0x1D5EF], NFD: [0x1D5EF], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D5F0], NFC: [0x1D5F0], NFD: [0x1D5F0], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D5F1], NFC: [0x1D5F1], NFD: [0x1D5F1], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D5F2], NFC: [0x1D5F2], NFD: [0x1D5F2], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D5F3], NFC: [0x1D5F3], NFD: [0x1D5F3], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D5F4], NFC: [0x1D5F4], NFD: [0x1D5F4], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D5F5], NFC: [0x1D5F5], NFD: [0x1D5F5], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D5F6], NFC: [0x1D5F6], NFD: [0x1D5F6], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D5F7], NFC: [0x1D5F7], NFD: [0x1D5F7], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D5F8], NFC: [0x1D5F8], NFD: [0x1D5F8], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D5F9], NFC: [0x1D5F9], NFD: [0x1D5F9], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D5FA], NFC: [0x1D5FA], NFD: [0x1D5FA], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D5FB], NFC: [0x1D5FB], NFD: [0x1D5FB], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D5FC], NFC: [0x1D5FC], NFD: [0x1D5FC], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D5FD], NFC: [0x1D5FD], NFD: [0x1D5FD], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D5FE], NFC: [0x1D5FE], NFD: [0x1D5FE], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D5FF], NFC: [0x1D5FF], NFD: [0x1D5FF], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D600], NFC: [0x1D600], NFD: [0x1D600], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D601], NFC: [0x1D601], NFD: [0x1D601], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D602], NFC: [0x1D602], NFD: [0x1D602], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D603], NFC: [0x1D603], NFD: [0x1D603], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D604], NFC: [0x1D604], NFD: [0x1D604], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D605], NFC: [0x1D605], NFD: [0x1D605], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D606], NFC: [0x1D606], NFD: [0x1D606], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D607], NFC: [0x1D607], NFD: [0x1D607], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D608], NFC: [0x1D608], NFD: [0x1D608], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D609], NFC: [0x1D609], NFD: [0x1D609], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D60A], NFC: [0x1D60A], NFD: [0x1D60A], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D60B], NFC: [0x1D60B], NFD: [0x1D60B], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D60C], NFC: [0x1D60C], NFD: [0x1D60C], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D60D], NFC: [0x1D60D], NFD: [0x1D60D], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D60E], NFC: [0x1D60E], NFD: [0x1D60E], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D60F], NFC: [0x1D60F], NFD: [0x1D60F], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D610], NFC: [0x1D610], NFD: [0x1D610], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D611], NFC: [0x1D611], NFD: [0x1D611], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D612], NFC: [0x1D612], NFD: [0x1D612], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D613], NFC: [0x1D613], NFD: [0x1D613], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D614], NFC: [0x1D614], NFD: [0x1D614], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D615], NFC: [0x1D615], NFD: [0x1D615], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D616], NFC: [0x1D616], NFD: [0x1D616], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D617], NFC: [0x1D617], NFD: [0x1D617], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D618], NFC: [0x1D618], NFD: [0x1D618], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D619], NFC: [0x1D619], NFD: [0x1D619], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D61A], NFC: [0x1D61A], NFD: [0x1D61A], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D61B], NFC: [0x1D61B], NFD: [0x1D61B], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D61C], NFC: [0x1D61C], NFD: [0x1D61C], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D61D], NFC: [0x1D61D], NFD: [0x1D61D], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D61E], NFC: [0x1D61E], NFD: [0x1D61E], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D61F], NFC: [0x1D61F], NFD: [0x1D61F], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D620], NFC: [0x1D620], NFD: [0x1D620], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D621], NFC: [0x1D621], NFD: [0x1D621], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D622], NFC: [0x1D622], NFD: [0x1D622], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D623], NFC: [0x1D623], NFD: [0x1D623], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D624], NFC: [0x1D624], NFD: [0x1D624], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D625], NFC: [0x1D625], NFD: [0x1D625], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D626], NFC: [0x1D626], NFD: [0x1D626], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D627], NFC: [0x1D627], NFD: [0x1D627], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D628], NFC: [0x1D628], NFD: [0x1D628], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D629], NFC: [0x1D629], NFD: [0x1D629], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D62A], NFC: [0x1D62A], NFD: [0x1D62A], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D62B], NFC: [0x1D62B], NFD: [0x1D62B], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D62C], NFC: [0x1D62C], NFD: [0x1D62C], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D62D], NFC: [0x1D62D], NFD: [0x1D62D], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D62E], NFC: [0x1D62E], NFD: [0x1D62E], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D62F], NFC: [0x1D62F], NFD: [0x1D62F], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D630], NFC: [0x1D630], NFD: [0x1D630], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D631], NFC: [0x1D631], NFD: [0x1D631], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D632], NFC: [0x1D632], NFD: [0x1D632], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D633], NFC: [0x1D633], NFD: [0x1D633], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D634], NFC: [0x1D634], NFD: [0x1D634], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D635], NFC: [0x1D635], NFD: [0x1D635], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D636], NFC: [0x1D636], NFD: [0x1D636], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D637], NFC: [0x1D637], NFD: [0x1D637], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D638], NFC: [0x1D638], NFD: [0x1D638], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D639], NFC: [0x1D639], NFD: [0x1D639], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D63A], NFC: [0x1D63A], NFD: [0x1D63A], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D63B], NFC: [0x1D63B], NFD: [0x1D63B], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D63C], NFC: [0x1D63C], NFD: [0x1D63C], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D63D], NFC: [0x1D63D], NFD: [0x1D63D], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D63E], NFC: [0x1D63E], NFD: [0x1D63E], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D63F], NFC: [0x1D63F], NFD: [0x1D63F], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D640], NFC: [0x1D640], NFD: [0x1D640], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D641], NFC: [0x1D641], NFD: [0x1D641], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D642], NFC: [0x1D642], NFD: [0x1D642], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D643], NFC: [0x1D643], NFD: [0x1D643], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D644], NFC: [0x1D644], NFD: [0x1D644], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D645], NFC: [0x1D645], NFD: [0x1D645], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D646], NFC: [0x1D646], NFD: [0x1D646], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D647], NFC: [0x1D647], NFD: [0x1D647], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D648], NFC: [0x1D648], NFD: [0x1D648], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D649], NFC: [0x1D649], NFD: [0x1D649], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D64A], NFC: [0x1D64A], NFD: [0x1D64A], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D64B], NFC: [0x1D64B], NFD: [0x1D64B], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D64C], NFC: [0x1D64C], NFD: [0x1D64C], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D64D], NFC: [0x1D64D], NFD: [0x1D64D], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D64E], NFC: [0x1D64E], NFD: [0x1D64E], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D64F], NFC: [0x1D64F], NFD: [0x1D64F], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D650], NFC: [0x1D650], NFD: [0x1D650], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D651], NFC: [0x1D651], NFD: [0x1D651], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D652], NFC: [0x1D652], NFD: [0x1D652], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D653], NFC: [0x1D653], NFD: [0x1D653], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D654], NFC: [0x1D654], NFD: [0x1D654], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D655], NFC: [0x1D655], NFD: [0x1D655], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D656], NFC: [0x1D656], NFD: [0x1D656], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D657], NFC: [0x1D657], NFD: [0x1D657], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D658], NFC: [0x1D658], NFD: [0x1D658], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D659], NFC: [0x1D659], NFD: [0x1D659], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D65A], NFC: [0x1D65A], NFD: [0x1D65A], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D65B], NFC: [0x1D65B], NFD: [0x1D65B], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D65C], NFC: [0x1D65C], NFD: [0x1D65C], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D65D], NFC: [0x1D65D], NFD: [0x1D65D], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D65E], NFC: [0x1D65E], NFD: [0x1D65E], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D65F], NFC: [0x1D65F], NFD: [0x1D65F], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D660], NFC: [0x1D660], NFD: [0x1D660], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D661], NFC: [0x1D661], NFD: [0x1D661], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D662], NFC: [0x1D662], NFD: [0x1D662], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D663], NFC: [0x1D663], NFD: [0x1D663], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D664], NFC: [0x1D664], NFD: [0x1D664], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D665], NFC: [0x1D665], NFD: [0x1D665], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D666], NFC: [0x1D666], NFD: [0x1D666], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D667], NFC: [0x1D667], NFD: [0x1D667], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D668], NFC: [0x1D668], NFD: [0x1D668], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D669], NFC: [0x1D669], NFD: [0x1D669], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D66A], NFC: [0x1D66A], NFD: [0x1D66A], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D66B], NFC: [0x1D66B], NFD: [0x1D66B], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D66C], NFC: [0x1D66C], NFD: [0x1D66C], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D66D], NFC: [0x1D66D], NFD: [0x1D66D], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D66E], NFC: [0x1D66E], NFD: [0x1D66E], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D66F], NFC: [0x1D66F], NFD: [0x1D66F], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D670], NFC: [0x1D670], NFD: [0x1D670], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1D671], NFC: [0x1D671], NFD: [0x1D671], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1D672], NFC: [0x1D672], NFD: [0x1D672], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1D673], NFC: [0x1D673], NFD: [0x1D673], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1D674], NFC: [0x1D674], NFD: [0x1D674], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1D675], NFC: [0x1D675], NFD: [0x1D675], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1D676], NFC: [0x1D676], NFD: [0x1D676], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1D677], NFC: [0x1D677], NFD: [0x1D677], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1D678], NFC: [0x1D678], NFD: [0x1D678], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1D679], NFC: [0x1D679], NFD: [0x1D679], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1D67A], NFC: [0x1D67A], NFD: [0x1D67A], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1D67B], NFC: [0x1D67B], NFD: [0x1D67B], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1D67C], NFC: [0x1D67C], NFD: [0x1D67C], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1D67D], NFC: [0x1D67D], NFD: [0x1D67D], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1D67E], NFC: [0x1D67E], NFD: [0x1D67E], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1D67F], NFC: [0x1D67F], NFD: [0x1D67F], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1D680], NFC: [0x1D680], NFD: [0x1D680], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1D681], NFC: [0x1D681], NFD: [0x1D681], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1D682], NFC: [0x1D682], NFD: [0x1D682], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1D683], NFC: [0x1D683], NFD: [0x1D683], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1D684], NFC: [0x1D684], NFD: [0x1D684], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1D685], NFC: [0x1D685], NFD: [0x1D685], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1D686], NFC: [0x1D686], NFD: [0x1D686], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1D687], NFC: [0x1D687], NFD: [0x1D687], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1D688], NFC: [0x1D688], NFD: [0x1D688], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1D689], NFC: [0x1D689], NFD: [0x1D689], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1D68A], NFC: [0x1D68A], NFD: [0x1D68A], NFKC: [0x0061], NFKD: [0x0061] }, +{ source: [0x1D68B], NFC: [0x1D68B], NFD: [0x1D68B], NFKC: [0x0062], NFKD: [0x0062] }, +{ source: [0x1D68C], NFC: [0x1D68C], NFD: [0x1D68C], NFKC: [0x0063], NFKD: [0x0063] }, +{ source: [0x1D68D], NFC: [0x1D68D], NFD: [0x1D68D], NFKC: [0x0064], NFKD: [0x0064] }, +{ source: [0x1D68E], NFC: [0x1D68E], NFD: [0x1D68E], NFKC: [0x0065], NFKD: [0x0065] }, +{ source: [0x1D68F], NFC: [0x1D68F], NFD: [0x1D68F], NFKC: [0x0066], NFKD: [0x0066] }, +{ source: [0x1D690], NFC: [0x1D690], NFD: [0x1D690], NFKC: [0x0067], NFKD: [0x0067] }, +{ source: [0x1D691], NFC: [0x1D691], NFD: [0x1D691], NFKC: [0x0068], NFKD: [0x0068] }, +{ source: [0x1D692], NFC: [0x1D692], NFD: [0x1D692], NFKC: [0x0069], NFKD: [0x0069] }, +{ source: [0x1D693], NFC: [0x1D693], NFD: [0x1D693], NFKC: [0x006A], NFKD: [0x006A] }, +{ source: [0x1D694], NFC: [0x1D694], NFD: [0x1D694], NFKC: [0x006B], NFKD: [0x006B] }, +{ source: [0x1D695], NFC: [0x1D695], NFD: [0x1D695], NFKC: [0x006C], NFKD: [0x006C] }, +{ source: [0x1D696], NFC: [0x1D696], NFD: [0x1D696], NFKC: [0x006D], NFKD: [0x006D] }, +{ source: [0x1D697], NFC: [0x1D697], NFD: [0x1D697], NFKC: [0x006E], NFKD: [0x006E] }, +{ source: [0x1D698], NFC: [0x1D698], NFD: [0x1D698], NFKC: [0x006F], NFKD: [0x006F] }, +{ source: [0x1D699], NFC: [0x1D699], NFD: [0x1D699], NFKC: [0x0070], NFKD: [0x0070] }, +{ source: [0x1D69A], NFC: [0x1D69A], NFD: [0x1D69A], NFKC: [0x0071], NFKD: [0x0071] }, +{ source: [0x1D69B], NFC: [0x1D69B], NFD: [0x1D69B], NFKC: [0x0072], NFKD: [0x0072] }, +{ source: [0x1D69C], NFC: [0x1D69C], NFD: [0x1D69C], NFKC: [0x0073], NFKD: [0x0073] }, +{ source: [0x1D69D], NFC: [0x1D69D], NFD: [0x1D69D], NFKC: [0x0074], NFKD: [0x0074] }, +{ source: [0x1D69E], NFC: [0x1D69E], NFD: [0x1D69E], NFKC: [0x0075], NFKD: [0x0075] }, +{ source: [0x1D69F], NFC: [0x1D69F], NFD: [0x1D69F], NFKC: [0x0076], NFKD: [0x0076] }, +{ source: [0x1D6A0], NFC: [0x1D6A0], NFD: [0x1D6A0], NFKC: [0x0077], NFKD: [0x0077] }, +{ source: [0x1D6A1], NFC: [0x1D6A1], NFD: [0x1D6A1], NFKC: [0x0078], NFKD: [0x0078] }, +{ source: [0x1D6A2], NFC: [0x1D6A2], NFD: [0x1D6A2], NFKC: [0x0079], NFKD: [0x0079] }, +{ source: [0x1D6A3], NFC: [0x1D6A3], NFD: [0x1D6A3], NFKC: [0x007A], NFKD: [0x007A] }, +{ source: [0x1D6A4], NFC: [0x1D6A4], NFD: [0x1D6A4], NFKC: [0x0131], NFKD: [0x0131] }, +{ source: [0x1D6A5], NFC: [0x1D6A5], NFD: [0x1D6A5], NFKC: [0x0237], NFKD: [0x0237] }, +{ source: [0x1D6A8], NFC: [0x1D6A8], NFD: [0x1D6A8], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D6A9], NFC: [0x1D6A9], NFD: [0x1D6A9], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D6AA], NFC: [0x1D6AA], NFD: [0x1D6AA], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D6AB], NFC: [0x1D6AB], NFD: [0x1D6AB], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D6AC], NFC: [0x1D6AC], NFD: [0x1D6AC], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D6AD], NFC: [0x1D6AD], NFD: [0x1D6AD], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D6AE], NFC: [0x1D6AE], NFD: [0x1D6AE], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D6AF], NFC: [0x1D6AF], NFD: [0x1D6AF], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6B0], NFC: [0x1D6B0], NFD: [0x1D6B0], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D6B1], NFC: [0x1D6B1], NFD: [0x1D6B1], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D6B2], NFC: [0x1D6B2], NFD: [0x1D6B2], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D6B3], NFC: [0x1D6B3], NFD: [0x1D6B3], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D6B4], NFC: [0x1D6B4], NFD: [0x1D6B4], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D6B5], NFC: [0x1D6B5], NFD: [0x1D6B5], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D6B6], NFC: [0x1D6B6], NFD: [0x1D6B6], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D6B7], NFC: [0x1D6B7], NFD: [0x1D6B7], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D6B8], NFC: [0x1D6B8], NFD: [0x1D6B8], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D6B9], NFC: [0x1D6B9], NFD: [0x1D6B9], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6BA], NFC: [0x1D6BA], NFD: [0x1D6BA], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D6BB], NFC: [0x1D6BB], NFD: [0x1D6BB], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D6BC], NFC: [0x1D6BC], NFD: [0x1D6BC], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D6BD], NFC: [0x1D6BD], NFD: [0x1D6BD], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D6BE], NFC: [0x1D6BE], NFD: [0x1D6BE], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D6BF], NFC: [0x1D6BF], NFD: [0x1D6BF], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D6C0], NFC: [0x1D6C0], NFD: [0x1D6C0], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D6C1], NFC: [0x1D6C1], NFD: [0x1D6C1], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D6C2], NFC: [0x1D6C2], NFD: [0x1D6C2], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D6C3], NFC: [0x1D6C3], NFD: [0x1D6C3], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D6C4], NFC: [0x1D6C4], NFD: [0x1D6C4], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D6C5], NFC: [0x1D6C5], NFD: [0x1D6C5], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D6C6], NFC: [0x1D6C6], NFD: [0x1D6C6], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D6C7], NFC: [0x1D6C7], NFD: [0x1D6C7], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D6C8], NFC: [0x1D6C8], NFD: [0x1D6C8], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D6C9], NFC: [0x1D6C9], NFD: [0x1D6C9], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D6CA], NFC: [0x1D6CA], NFD: [0x1D6CA], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D6CB], NFC: [0x1D6CB], NFD: [0x1D6CB], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D6CC], NFC: [0x1D6CC], NFD: [0x1D6CC], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D6CD], NFC: [0x1D6CD], NFD: [0x1D6CD], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D6CE], NFC: [0x1D6CE], NFD: [0x1D6CE], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D6CF], NFC: [0x1D6CF], NFD: [0x1D6CF], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D6D0], NFC: [0x1D6D0], NFD: [0x1D6D0], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D6D1], NFC: [0x1D6D1], NFD: [0x1D6D1], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D6D2], NFC: [0x1D6D2], NFD: [0x1D6D2], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D6D3], NFC: [0x1D6D3], NFD: [0x1D6D3], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D6D4], NFC: [0x1D6D4], NFD: [0x1D6D4], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D6D5], NFC: [0x1D6D5], NFD: [0x1D6D5], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D6D6], NFC: [0x1D6D6], NFD: [0x1D6D6], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D6D7], NFC: [0x1D6D7], NFD: [0x1D6D7], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D6D8], NFC: [0x1D6D8], NFD: [0x1D6D8], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D6D9], NFC: [0x1D6D9], NFD: [0x1D6D9], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D6DA], NFC: [0x1D6DA], NFD: [0x1D6DA], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D6DB], NFC: [0x1D6DB], NFD: [0x1D6DB], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D6DC], NFC: [0x1D6DC], NFD: [0x1D6DC], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D6DD], NFC: [0x1D6DD], NFD: [0x1D6DD], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D6DE], NFC: [0x1D6DE], NFD: [0x1D6DE], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D6DF], NFC: [0x1D6DF], NFD: [0x1D6DF], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D6E0], NFC: [0x1D6E0], NFD: [0x1D6E0], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D6E1], NFC: [0x1D6E1], NFD: [0x1D6E1], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D6E2], NFC: [0x1D6E2], NFD: [0x1D6E2], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D6E3], NFC: [0x1D6E3], NFD: [0x1D6E3], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D6E4], NFC: [0x1D6E4], NFD: [0x1D6E4], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D6E5], NFC: [0x1D6E5], NFD: [0x1D6E5], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D6E6], NFC: [0x1D6E6], NFD: [0x1D6E6], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D6E7], NFC: [0x1D6E7], NFD: [0x1D6E7], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D6E8], NFC: [0x1D6E8], NFD: [0x1D6E8], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D6E9], NFC: [0x1D6E9], NFD: [0x1D6E9], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6EA], NFC: [0x1D6EA], NFD: [0x1D6EA], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D6EB], NFC: [0x1D6EB], NFD: [0x1D6EB], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D6EC], NFC: [0x1D6EC], NFD: [0x1D6EC], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D6ED], NFC: [0x1D6ED], NFD: [0x1D6ED], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D6EE], NFC: [0x1D6EE], NFD: [0x1D6EE], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D6EF], NFC: [0x1D6EF], NFD: [0x1D6EF], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D6F0], NFC: [0x1D6F0], NFD: [0x1D6F0], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D6F1], NFC: [0x1D6F1], NFD: [0x1D6F1], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D6F2], NFC: [0x1D6F2], NFD: [0x1D6F2], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D6F3], NFC: [0x1D6F3], NFD: [0x1D6F3], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D6F4], NFC: [0x1D6F4], NFD: [0x1D6F4], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D6F5], NFC: [0x1D6F5], NFD: [0x1D6F5], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D6F6], NFC: [0x1D6F6], NFD: [0x1D6F6], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D6F7], NFC: [0x1D6F7], NFD: [0x1D6F7], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D6F8], NFC: [0x1D6F8], NFD: [0x1D6F8], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D6F9], NFC: [0x1D6F9], NFD: [0x1D6F9], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D6FA], NFC: [0x1D6FA], NFD: [0x1D6FA], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D6FB], NFC: [0x1D6FB], NFD: [0x1D6FB], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D6FC], NFC: [0x1D6FC], NFD: [0x1D6FC], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D6FD], NFC: [0x1D6FD], NFD: [0x1D6FD], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D6FE], NFC: [0x1D6FE], NFD: [0x1D6FE], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D6FF], NFC: [0x1D6FF], NFD: [0x1D6FF], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D700], NFC: [0x1D700], NFD: [0x1D700], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D701], NFC: [0x1D701], NFD: [0x1D701], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D702], NFC: [0x1D702], NFD: [0x1D702], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D703], NFC: [0x1D703], NFD: [0x1D703], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D704], NFC: [0x1D704], NFD: [0x1D704], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D705], NFC: [0x1D705], NFD: [0x1D705], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D706], NFC: [0x1D706], NFD: [0x1D706], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D707], NFC: [0x1D707], NFD: [0x1D707], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D708], NFC: [0x1D708], NFD: [0x1D708], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D709], NFC: [0x1D709], NFD: [0x1D709], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D70A], NFC: [0x1D70A], NFD: [0x1D70A], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D70B], NFC: [0x1D70B], NFD: [0x1D70B], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D70C], NFC: [0x1D70C], NFD: [0x1D70C], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D70D], NFC: [0x1D70D], NFD: [0x1D70D], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D70E], NFC: [0x1D70E], NFD: [0x1D70E], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D70F], NFC: [0x1D70F], NFD: [0x1D70F], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D710], NFC: [0x1D710], NFD: [0x1D710], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D711], NFC: [0x1D711], NFD: [0x1D711], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D712], NFC: [0x1D712], NFD: [0x1D712], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D713], NFC: [0x1D713], NFD: [0x1D713], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D714], NFC: [0x1D714], NFD: [0x1D714], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D715], NFC: [0x1D715], NFD: [0x1D715], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D716], NFC: [0x1D716], NFD: [0x1D716], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D717], NFC: [0x1D717], NFD: [0x1D717], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D718], NFC: [0x1D718], NFD: [0x1D718], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D719], NFC: [0x1D719], NFD: [0x1D719], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D71A], NFC: [0x1D71A], NFD: [0x1D71A], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D71B], NFC: [0x1D71B], NFD: [0x1D71B], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D71C], NFC: [0x1D71C], NFD: [0x1D71C], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D71D], NFC: [0x1D71D], NFD: [0x1D71D], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D71E], NFC: [0x1D71E], NFD: [0x1D71E], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D71F], NFC: [0x1D71F], NFD: [0x1D71F], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D720], NFC: [0x1D720], NFD: [0x1D720], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D721], NFC: [0x1D721], NFD: [0x1D721], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D722], NFC: [0x1D722], NFD: [0x1D722], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D723], NFC: [0x1D723], NFD: [0x1D723], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D724], NFC: [0x1D724], NFD: [0x1D724], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D725], NFC: [0x1D725], NFD: [0x1D725], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D726], NFC: [0x1D726], NFD: [0x1D726], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D727], NFC: [0x1D727], NFD: [0x1D727], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D728], NFC: [0x1D728], NFD: [0x1D728], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D729], NFC: [0x1D729], NFD: [0x1D729], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D72A], NFC: [0x1D72A], NFD: [0x1D72A], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D72B], NFC: [0x1D72B], NFD: [0x1D72B], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D72C], NFC: [0x1D72C], NFD: [0x1D72C], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D72D], NFC: [0x1D72D], NFD: [0x1D72D], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D72E], NFC: [0x1D72E], NFD: [0x1D72E], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D72F], NFC: [0x1D72F], NFD: [0x1D72F], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D730], NFC: [0x1D730], NFD: [0x1D730], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D731], NFC: [0x1D731], NFD: [0x1D731], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D732], NFC: [0x1D732], NFD: [0x1D732], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D733], NFC: [0x1D733], NFD: [0x1D733], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D734], NFC: [0x1D734], NFD: [0x1D734], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D735], NFC: [0x1D735], NFD: [0x1D735], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D736], NFC: [0x1D736], NFD: [0x1D736], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D737], NFC: [0x1D737], NFD: [0x1D737], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D738], NFC: [0x1D738], NFD: [0x1D738], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D739], NFC: [0x1D739], NFD: [0x1D739], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D73A], NFC: [0x1D73A], NFD: [0x1D73A], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D73B], NFC: [0x1D73B], NFD: [0x1D73B], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D73C], NFC: [0x1D73C], NFD: [0x1D73C], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D73D], NFC: [0x1D73D], NFD: [0x1D73D], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D73E], NFC: [0x1D73E], NFD: [0x1D73E], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D73F], NFC: [0x1D73F], NFD: [0x1D73F], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D740], NFC: [0x1D740], NFD: [0x1D740], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D741], NFC: [0x1D741], NFD: [0x1D741], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D742], NFC: [0x1D742], NFD: [0x1D742], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D743], NFC: [0x1D743], NFD: [0x1D743], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D744], NFC: [0x1D744], NFD: [0x1D744], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D745], NFC: [0x1D745], NFD: [0x1D745], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D746], NFC: [0x1D746], NFD: [0x1D746], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D747], NFC: [0x1D747], NFD: [0x1D747], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D748], NFC: [0x1D748], NFD: [0x1D748], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D749], NFC: [0x1D749], NFD: [0x1D749], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D74A], NFC: [0x1D74A], NFD: [0x1D74A], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D74B], NFC: [0x1D74B], NFD: [0x1D74B], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D74C], NFC: [0x1D74C], NFD: [0x1D74C], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D74D], NFC: [0x1D74D], NFD: [0x1D74D], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D74E], NFC: [0x1D74E], NFD: [0x1D74E], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D74F], NFC: [0x1D74F], NFD: [0x1D74F], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D750], NFC: [0x1D750], NFD: [0x1D750], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D751], NFC: [0x1D751], NFD: [0x1D751], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D752], NFC: [0x1D752], NFD: [0x1D752], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D753], NFC: [0x1D753], NFD: [0x1D753], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D754], NFC: [0x1D754], NFD: [0x1D754], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D755], NFC: [0x1D755], NFD: [0x1D755], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D756], NFC: [0x1D756], NFD: [0x1D756], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D757], NFC: [0x1D757], NFD: [0x1D757], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D758], NFC: [0x1D758], NFD: [0x1D758], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D759], NFC: [0x1D759], NFD: [0x1D759], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D75A], NFC: [0x1D75A], NFD: [0x1D75A], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D75B], NFC: [0x1D75B], NFD: [0x1D75B], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D75C], NFC: [0x1D75C], NFD: [0x1D75C], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D75D], NFC: [0x1D75D], NFD: [0x1D75D], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D75E], NFC: [0x1D75E], NFD: [0x1D75E], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D75F], NFC: [0x1D75F], NFD: [0x1D75F], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D760], NFC: [0x1D760], NFD: [0x1D760], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D761], NFC: [0x1D761], NFD: [0x1D761], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D762], NFC: [0x1D762], NFD: [0x1D762], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D763], NFC: [0x1D763], NFD: [0x1D763], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D764], NFC: [0x1D764], NFD: [0x1D764], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D765], NFC: [0x1D765], NFD: [0x1D765], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D766], NFC: [0x1D766], NFD: [0x1D766], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D767], NFC: [0x1D767], NFD: [0x1D767], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D768], NFC: [0x1D768], NFD: [0x1D768], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D769], NFC: [0x1D769], NFD: [0x1D769], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D76A], NFC: [0x1D76A], NFD: [0x1D76A], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D76B], NFC: [0x1D76B], NFD: [0x1D76B], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D76C], NFC: [0x1D76C], NFD: [0x1D76C], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D76D], NFC: [0x1D76D], NFD: [0x1D76D], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D76E], NFC: [0x1D76E], NFD: [0x1D76E], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D76F], NFC: [0x1D76F], NFD: [0x1D76F], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D770], NFC: [0x1D770], NFD: [0x1D770], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D771], NFC: [0x1D771], NFD: [0x1D771], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D772], NFC: [0x1D772], NFD: [0x1D772], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D773], NFC: [0x1D773], NFD: [0x1D773], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D774], NFC: [0x1D774], NFD: [0x1D774], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D775], NFC: [0x1D775], NFD: [0x1D775], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D776], NFC: [0x1D776], NFD: [0x1D776], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D777], NFC: [0x1D777], NFD: [0x1D777], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D778], NFC: [0x1D778], NFD: [0x1D778], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D779], NFC: [0x1D779], NFD: [0x1D779], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D77A], NFC: [0x1D77A], NFD: [0x1D77A], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D77B], NFC: [0x1D77B], NFD: [0x1D77B], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D77C], NFC: [0x1D77C], NFD: [0x1D77C], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D77D], NFC: [0x1D77D], NFD: [0x1D77D], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D77E], NFC: [0x1D77E], NFD: [0x1D77E], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D77F], NFC: [0x1D77F], NFD: [0x1D77F], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D780], NFC: [0x1D780], NFD: [0x1D780], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D781], NFC: [0x1D781], NFD: [0x1D781], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D782], NFC: [0x1D782], NFD: [0x1D782], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D783], NFC: [0x1D783], NFD: [0x1D783], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D784], NFC: [0x1D784], NFD: [0x1D784], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D785], NFC: [0x1D785], NFD: [0x1D785], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D786], NFC: [0x1D786], NFD: [0x1D786], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D787], NFC: [0x1D787], NFD: [0x1D787], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D788], NFC: [0x1D788], NFD: [0x1D788], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D789], NFC: [0x1D789], NFD: [0x1D789], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D78A], NFC: [0x1D78A], NFD: [0x1D78A], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D78B], NFC: [0x1D78B], NFD: [0x1D78B], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D78C], NFC: [0x1D78C], NFD: [0x1D78C], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D78D], NFC: [0x1D78D], NFD: [0x1D78D], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D78E], NFC: [0x1D78E], NFD: [0x1D78E], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D78F], NFC: [0x1D78F], NFD: [0x1D78F], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D790], NFC: [0x1D790], NFD: [0x1D790], NFKC: [0x0391], NFKD: [0x0391] }, +{ source: [0x1D791], NFC: [0x1D791], NFD: [0x1D791], NFKC: [0x0392], NFKD: [0x0392] }, +{ source: [0x1D792], NFC: [0x1D792], NFD: [0x1D792], NFKC: [0x0393], NFKD: [0x0393] }, +{ source: [0x1D793], NFC: [0x1D793], NFD: [0x1D793], NFKC: [0x0394], NFKD: [0x0394] }, +{ source: [0x1D794], NFC: [0x1D794], NFD: [0x1D794], NFKC: [0x0395], NFKD: [0x0395] }, +{ source: [0x1D795], NFC: [0x1D795], NFD: [0x1D795], NFKC: [0x0396], NFKD: [0x0396] }, +{ source: [0x1D796], NFC: [0x1D796], NFD: [0x1D796], NFKC: [0x0397], NFKD: [0x0397] }, +{ source: [0x1D797], NFC: [0x1D797], NFD: [0x1D797], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D798], NFC: [0x1D798], NFD: [0x1D798], NFKC: [0x0399], NFKD: [0x0399] }, +{ source: [0x1D799], NFC: [0x1D799], NFD: [0x1D799], NFKC: [0x039A], NFKD: [0x039A] }, +{ source: [0x1D79A], NFC: [0x1D79A], NFD: [0x1D79A], NFKC: [0x039B], NFKD: [0x039B] }, +{ source: [0x1D79B], NFC: [0x1D79B], NFD: [0x1D79B], NFKC: [0x039C], NFKD: [0x039C] }, +{ source: [0x1D79C], NFC: [0x1D79C], NFD: [0x1D79C], NFKC: [0x039D], NFKD: [0x039D] }, +{ source: [0x1D79D], NFC: [0x1D79D], NFD: [0x1D79D], NFKC: [0x039E], NFKD: [0x039E] }, +{ source: [0x1D79E], NFC: [0x1D79E], NFD: [0x1D79E], NFKC: [0x039F], NFKD: [0x039F] }, +{ source: [0x1D79F], NFC: [0x1D79F], NFD: [0x1D79F], NFKC: [0x03A0], NFKD: [0x03A0] }, +{ source: [0x1D7A0], NFC: [0x1D7A0], NFD: [0x1D7A0], NFKC: [0x03A1], NFKD: [0x03A1] }, +{ source: [0x1D7A1], NFC: [0x1D7A1], NFD: [0x1D7A1], NFKC: [0x0398], NFKD: [0x0398] }, +{ source: [0x1D7A2], NFC: [0x1D7A2], NFD: [0x1D7A2], NFKC: [0x03A3], NFKD: [0x03A3] }, +{ source: [0x1D7A3], NFC: [0x1D7A3], NFD: [0x1D7A3], NFKC: [0x03A4], NFKD: [0x03A4] }, +{ source: [0x1D7A4], NFC: [0x1D7A4], NFD: [0x1D7A4], NFKC: [0x03A5], NFKD: [0x03A5] }, +{ source: [0x1D7A5], NFC: [0x1D7A5], NFD: [0x1D7A5], NFKC: [0x03A6], NFKD: [0x03A6] }, +{ source: [0x1D7A6], NFC: [0x1D7A6], NFD: [0x1D7A6], NFKC: [0x03A7], NFKD: [0x03A7] }, +{ source: [0x1D7A7], NFC: [0x1D7A7], NFD: [0x1D7A7], NFKC: [0x03A8], NFKD: [0x03A8] }, +{ source: [0x1D7A8], NFC: [0x1D7A8], NFD: [0x1D7A8], NFKC: [0x03A9], NFKD: [0x03A9] }, +{ source: [0x1D7A9], NFC: [0x1D7A9], NFD: [0x1D7A9], NFKC: [0x2207], NFKD: [0x2207] }, +{ source: [0x1D7AA], NFC: [0x1D7AA], NFD: [0x1D7AA], NFKC: [0x03B1], NFKD: [0x03B1] }, +{ source: [0x1D7AB], NFC: [0x1D7AB], NFD: [0x1D7AB], NFKC: [0x03B2], NFKD: [0x03B2] }, +{ source: [0x1D7AC], NFC: [0x1D7AC], NFD: [0x1D7AC], NFKC: [0x03B3], NFKD: [0x03B3] }, +{ source: [0x1D7AD], NFC: [0x1D7AD], NFD: [0x1D7AD], NFKC: [0x03B4], NFKD: [0x03B4] }, +{ source: [0x1D7AE], NFC: [0x1D7AE], NFD: [0x1D7AE], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D7AF], NFC: [0x1D7AF], NFD: [0x1D7AF], NFKC: [0x03B6], NFKD: [0x03B6] }, +{ source: [0x1D7B0], NFC: [0x1D7B0], NFD: [0x1D7B0], NFKC: [0x03B7], NFKD: [0x03B7] }, +{ source: [0x1D7B1], NFC: [0x1D7B1], NFD: [0x1D7B1], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D7B2], NFC: [0x1D7B2], NFD: [0x1D7B2], NFKC: [0x03B9], NFKD: [0x03B9] }, +{ source: [0x1D7B3], NFC: [0x1D7B3], NFD: [0x1D7B3], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D7B4], NFC: [0x1D7B4], NFD: [0x1D7B4], NFKC: [0x03BB], NFKD: [0x03BB] }, +{ source: [0x1D7B5], NFC: [0x1D7B5], NFD: [0x1D7B5], NFKC: [0x03BC], NFKD: [0x03BC] }, +{ source: [0x1D7B6], NFC: [0x1D7B6], NFD: [0x1D7B6], NFKC: [0x03BD], NFKD: [0x03BD] }, +{ source: [0x1D7B7], NFC: [0x1D7B7], NFD: [0x1D7B7], NFKC: [0x03BE], NFKD: [0x03BE] }, +{ source: [0x1D7B8], NFC: [0x1D7B8], NFD: [0x1D7B8], NFKC: [0x03BF], NFKD: [0x03BF] }, +{ source: [0x1D7B9], NFC: [0x1D7B9], NFD: [0x1D7B9], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D7BA], NFC: [0x1D7BA], NFD: [0x1D7BA], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D7BB], NFC: [0x1D7BB], NFD: [0x1D7BB], NFKC: [0x03C2], NFKD: [0x03C2] }, +{ source: [0x1D7BC], NFC: [0x1D7BC], NFD: [0x1D7BC], NFKC: [0x03C3], NFKD: [0x03C3] }, +{ source: [0x1D7BD], NFC: [0x1D7BD], NFD: [0x1D7BD], NFKC: [0x03C4], NFKD: [0x03C4] }, +{ source: [0x1D7BE], NFC: [0x1D7BE], NFD: [0x1D7BE], NFKC: [0x03C5], NFKD: [0x03C5] }, +{ source: [0x1D7BF], NFC: [0x1D7BF], NFD: [0x1D7BF], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D7C0], NFC: [0x1D7C0], NFD: [0x1D7C0], NFKC: [0x03C7], NFKD: [0x03C7] }, +{ source: [0x1D7C1], NFC: [0x1D7C1], NFD: [0x1D7C1], NFKC: [0x03C8], NFKD: [0x03C8] }, +{ source: [0x1D7C2], NFC: [0x1D7C2], NFD: [0x1D7C2], NFKC: [0x03C9], NFKD: [0x03C9] }, +{ source: [0x1D7C3], NFC: [0x1D7C3], NFD: [0x1D7C3], NFKC: [0x2202], NFKD: [0x2202] }, +{ source: [0x1D7C4], NFC: [0x1D7C4], NFD: [0x1D7C4], NFKC: [0x03B5], NFKD: [0x03B5] }, +{ source: [0x1D7C5], NFC: [0x1D7C5], NFD: [0x1D7C5], NFKC: [0x03B8], NFKD: [0x03B8] }, +{ source: [0x1D7C6], NFC: [0x1D7C6], NFD: [0x1D7C6], NFKC: [0x03BA], NFKD: [0x03BA] }, +{ source: [0x1D7C7], NFC: [0x1D7C7], NFD: [0x1D7C7], NFKC: [0x03C6], NFKD: [0x03C6] }, +{ source: [0x1D7C8], NFC: [0x1D7C8], NFD: [0x1D7C8], NFKC: [0x03C1], NFKD: [0x03C1] }, +{ source: [0x1D7C9], NFC: [0x1D7C9], NFD: [0x1D7C9], NFKC: [0x03C0], NFKD: [0x03C0] }, +{ source: [0x1D7CA], NFC: [0x1D7CA], NFD: [0x1D7CA], NFKC: [0x03DC], NFKD: [0x03DC] }, +{ source: [0x1D7CB], NFC: [0x1D7CB], NFD: [0x1D7CB], NFKC: [0x03DD], NFKD: [0x03DD] }, +{ source: [0x1D7CE], NFC: [0x1D7CE], NFD: [0x1D7CE], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7CF], NFC: [0x1D7CF], NFD: [0x1D7CF], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7D0], NFC: [0x1D7D0], NFD: [0x1D7D0], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7D1], NFC: [0x1D7D1], NFD: [0x1D7D1], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7D2], NFC: [0x1D7D2], NFD: [0x1D7D2], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7D3], NFC: [0x1D7D3], NFD: [0x1D7D3], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7D4], NFC: [0x1D7D4], NFD: [0x1D7D4], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7D5], NFC: [0x1D7D5], NFD: [0x1D7D5], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7D6], NFC: [0x1D7D6], NFD: [0x1D7D6], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7D7], NFC: [0x1D7D7], NFD: [0x1D7D7], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7D8], NFC: [0x1D7D8], NFD: [0x1D7D8], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7D9], NFC: [0x1D7D9], NFD: [0x1D7D9], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7DA], NFC: [0x1D7DA], NFD: [0x1D7DA], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7DB], NFC: [0x1D7DB], NFD: [0x1D7DB], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7DC], NFC: [0x1D7DC], NFD: [0x1D7DC], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7DD], NFC: [0x1D7DD], NFD: [0x1D7DD], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7DE], NFC: [0x1D7DE], NFD: [0x1D7DE], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7DF], NFC: [0x1D7DF], NFD: [0x1D7DF], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7E0], NFC: [0x1D7E0], NFD: [0x1D7E0], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7E1], NFC: [0x1D7E1], NFD: [0x1D7E1], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7E2], NFC: [0x1D7E2], NFD: [0x1D7E2], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7E3], NFC: [0x1D7E3], NFD: [0x1D7E3], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7E4], NFC: [0x1D7E4], NFD: [0x1D7E4], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7E5], NFC: [0x1D7E5], NFD: [0x1D7E5], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7E6], NFC: [0x1D7E6], NFD: [0x1D7E6], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7E7], NFC: [0x1D7E7], NFD: [0x1D7E7], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7E8], NFC: [0x1D7E8], NFD: [0x1D7E8], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7E9], NFC: [0x1D7E9], NFD: [0x1D7E9], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7EA], NFC: [0x1D7EA], NFD: [0x1D7EA], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7EB], NFC: [0x1D7EB], NFD: [0x1D7EB], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7EC], NFC: [0x1D7EC], NFD: [0x1D7EC], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7ED], NFC: [0x1D7ED], NFD: [0x1D7ED], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7EE], NFC: [0x1D7EE], NFD: [0x1D7EE], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7EF], NFC: [0x1D7EF], NFD: [0x1D7EF], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7F0], NFC: [0x1D7F0], NFD: [0x1D7F0], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7F1], NFC: [0x1D7F1], NFD: [0x1D7F1], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7F2], NFC: [0x1D7F2], NFD: [0x1D7F2], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7F3], NFC: [0x1D7F3], NFD: [0x1D7F3], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7F4], NFC: [0x1D7F4], NFD: [0x1D7F4], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7F5], NFC: [0x1D7F5], NFD: [0x1D7F5], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1D7F6], NFC: [0x1D7F6], NFD: [0x1D7F6], NFKC: [0x0030], NFKD: [0x0030] }, +{ source: [0x1D7F7], NFC: [0x1D7F7], NFD: [0x1D7F7], NFKC: [0x0031], NFKD: [0x0031] }, +{ source: [0x1D7F8], NFC: [0x1D7F8], NFD: [0x1D7F8], NFKC: [0x0032], NFKD: [0x0032] }, +{ source: [0x1D7F9], NFC: [0x1D7F9], NFD: [0x1D7F9], NFKC: [0x0033], NFKD: [0x0033] }, +{ source: [0x1D7FA], NFC: [0x1D7FA], NFD: [0x1D7FA], NFKC: [0x0034], NFKD: [0x0034] }, +{ source: [0x1D7FB], NFC: [0x1D7FB], NFD: [0x1D7FB], NFKC: [0x0035], NFKD: [0x0035] }, +{ source: [0x1D7FC], NFC: [0x1D7FC], NFD: [0x1D7FC], NFKC: [0x0036], NFKD: [0x0036] }, +{ source: [0x1D7FD], NFC: [0x1D7FD], NFD: [0x1D7FD], NFKC: [0x0037], NFKD: [0x0037] }, +{ source: [0x1D7FE], NFC: [0x1D7FE], NFD: [0x1D7FE], NFKC: [0x0038], NFKD: [0x0038] }, +{ source: [0x1D7FF], NFC: [0x1D7FF], NFD: [0x1D7FF], NFKC: [0x0039], NFKD: [0x0039] }, +{ source: [0x1EE00], NFC: [0x1EE00], NFD: [0x1EE00], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0x1EE01], NFC: [0x1EE01], NFD: [0x1EE01], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE02], NFC: [0x1EE02], NFD: [0x1EE02], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE03], NFC: [0x1EE03], NFD: [0x1EE03], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0x1EE05], NFC: [0x1EE05], NFD: [0x1EE05], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0x1EE06], NFC: [0x1EE06], NFD: [0x1EE06], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0x1EE07], NFC: [0x1EE07], NFD: [0x1EE07], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE08], NFC: [0x1EE08], NFD: [0x1EE08], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EE09], NFC: [0x1EE09], NFD: [0x1EE09], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE0A], NFC: [0x1EE0A], NFD: [0x1EE0A], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0x1EE0B], NFC: [0x1EE0B], NFD: [0x1EE0B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE0C], NFC: [0x1EE0C], NFD: [0x1EE0C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE0D], NFC: [0x1EE0D], NFD: [0x1EE0D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE0E], NFC: [0x1EE0E], NFD: [0x1EE0E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE0F], NFC: [0x1EE0F], NFD: [0x1EE0F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE10], NFC: [0x1EE10], NFD: [0x1EE10], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE11], NFC: [0x1EE11], NFD: [0x1EE11], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE12], NFC: [0x1EE12], NFD: [0x1EE12], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE13], NFC: [0x1EE13], NFD: [0x1EE13], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0x1EE14], NFC: [0x1EE14], NFD: [0x1EE14], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE15], NFC: [0x1EE15], NFD: [0x1EE15], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE16], NFC: [0x1EE16], NFD: [0x1EE16], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE17], NFC: [0x1EE17], NFD: [0x1EE17], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE18], NFC: [0x1EE18], NFD: [0x1EE18], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0x1EE19], NFC: [0x1EE19], NFD: [0x1EE19], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE1A], NFC: [0x1EE1A], NFD: [0x1EE1A], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EE1B], NFC: [0x1EE1B], NFD: [0x1EE1B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE1C], NFC: [0x1EE1C], NFD: [0x1EE1C], NFKC: [0x066E], NFKD: [0x066E] }, +{ source: [0x1EE1D], NFC: [0x1EE1D], NFD: [0x1EE1D], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0x1EE1E], NFC: [0x1EE1E], NFD: [0x1EE1E], NFKC: [0x06A1], NFKD: [0x06A1] }, +{ source: [0x1EE1F], NFC: [0x1EE1F], NFD: [0x1EE1F], NFKC: [0x066F], NFKD: [0x066F] }, +{ source: [0x1EE21], NFC: [0x1EE21], NFD: [0x1EE21], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE22], NFC: [0x1EE22], NFD: [0x1EE22], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE24], NFC: [0x1EE24], NFD: [0x1EE24], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0x1EE27], NFC: [0x1EE27], NFD: [0x1EE27], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE29], NFC: [0x1EE29], NFD: [0x1EE29], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE2A], NFC: [0x1EE2A], NFD: [0x1EE2A], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0x1EE2B], NFC: [0x1EE2B], NFD: [0x1EE2B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE2C], NFC: [0x1EE2C], NFD: [0x1EE2C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE2D], NFC: [0x1EE2D], NFD: [0x1EE2D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE2E], NFC: [0x1EE2E], NFD: [0x1EE2E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE2F], NFC: [0x1EE2F], NFD: [0x1EE2F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE30], NFC: [0x1EE30], NFD: [0x1EE30], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE31], NFC: [0x1EE31], NFD: [0x1EE31], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE32], NFC: [0x1EE32], NFD: [0x1EE32], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE34], NFC: [0x1EE34], NFD: [0x1EE34], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE35], NFC: [0x1EE35], NFD: [0x1EE35], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE36], NFC: [0x1EE36], NFD: [0x1EE36], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE37], NFC: [0x1EE37], NFD: [0x1EE37], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE39], NFC: [0x1EE39], NFD: [0x1EE39], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE3B], NFC: [0x1EE3B], NFD: [0x1EE3B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE42], NFC: [0x1EE42], NFD: [0x1EE42], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE47], NFC: [0x1EE47], NFD: [0x1EE47], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE49], NFC: [0x1EE49], NFD: [0x1EE49], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE4B], NFC: [0x1EE4B], NFD: [0x1EE4B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE4D], NFC: [0x1EE4D], NFD: [0x1EE4D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE4E], NFC: [0x1EE4E], NFD: [0x1EE4E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE4F], NFC: [0x1EE4F], NFD: [0x1EE4F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE51], NFC: [0x1EE51], NFD: [0x1EE51], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE52], NFC: [0x1EE52], NFD: [0x1EE52], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE54], NFC: [0x1EE54], NFD: [0x1EE54], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE57], NFC: [0x1EE57], NFD: [0x1EE57], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE59], NFC: [0x1EE59], NFD: [0x1EE59], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE5B], NFC: [0x1EE5B], NFD: [0x1EE5B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE5D], NFC: [0x1EE5D], NFD: [0x1EE5D], NFKC: [0x06BA], NFKD: [0x06BA] }, +{ source: [0x1EE5F], NFC: [0x1EE5F], NFD: [0x1EE5F], NFKC: [0x066F], NFKD: [0x066F] }, +{ source: [0x1EE61], NFC: [0x1EE61], NFD: [0x1EE61], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE62], NFC: [0x1EE62], NFD: [0x1EE62], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE64], NFC: [0x1EE64], NFD: [0x1EE64], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0x1EE67], NFC: [0x1EE67], NFD: [0x1EE67], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE68], NFC: [0x1EE68], NFD: [0x1EE68], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EE69], NFC: [0x1EE69], NFD: [0x1EE69], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE6A], NFC: [0x1EE6A], NFD: [0x1EE6A], NFKC: [0x0643], NFKD: [0x0643] }, +{ source: [0x1EE6C], NFC: [0x1EE6C], NFD: [0x1EE6C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE6D], NFC: [0x1EE6D], NFD: [0x1EE6D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE6E], NFC: [0x1EE6E], NFD: [0x1EE6E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE6F], NFC: [0x1EE6F], NFD: [0x1EE6F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE70], NFC: [0x1EE70], NFD: [0x1EE70], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE71], NFC: [0x1EE71], NFD: [0x1EE71], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE72], NFC: [0x1EE72], NFD: [0x1EE72], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE74], NFC: [0x1EE74], NFD: [0x1EE74], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE75], NFC: [0x1EE75], NFD: [0x1EE75], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE76], NFC: [0x1EE76], NFD: [0x1EE76], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE77], NFC: [0x1EE77], NFD: [0x1EE77], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE79], NFC: [0x1EE79], NFD: [0x1EE79], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE7A], NFC: [0x1EE7A], NFD: [0x1EE7A], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EE7B], NFC: [0x1EE7B], NFD: [0x1EE7B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EE7C], NFC: [0x1EE7C], NFD: [0x1EE7C], NFKC: [0x066E], NFKD: [0x066E] }, +{ source: [0x1EE7E], NFC: [0x1EE7E], NFD: [0x1EE7E], NFKC: [0x06A1], NFKD: [0x06A1] }, +{ source: [0x1EE80], NFC: [0x1EE80], NFD: [0x1EE80], NFKC: [0x0627], NFKD: [0x0627] }, +{ source: [0x1EE81], NFC: [0x1EE81], NFD: [0x1EE81], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EE82], NFC: [0x1EE82], NFD: [0x1EE82], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EE83], NFC: [0x1EE83], NFD: [0x1EE83], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0x1EE84], NFC: [0x1EE84], NFD: [0x1EE84], NFKC: [0x0647], NFKD: [0x0647] }, +{ source: [0x1EE85], NFC: [0x1EE85], NFD: [0x1EE85], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0x1EE86], NFC: [0x1EE86], NFD: [0x1EE86], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0x1EE87], NFC: [0x1EE87], NFD: [0x1EE87], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EE88], NFC: [0x1EE88], NFD: [0x1EE88], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EE89], NFC: [0x1EE89], NFD: [0x1EE89], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EE8B], NFC: [0x1EE8B], NFD: [0x1EE8B], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EE8C], NFC: [0x1EE8C], NFD: [0x1EE8C], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EE8D], NFC: [0x1EE8D], NFD: [0x1EE8D], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EE8E], NFC: [0x1EE8E], NFD: [0x1EE8E], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EE8F], NFC: [0x1EE8F], NFD: [0x1EE8F], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EE90], NFC: [0x1EE90], NFD: [0x1EE90], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EE91], NFC: [0x1EE91], NFD: [0x1EE91], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EE92], NFC: [0x1EE92], NFD: [0x1EE92], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EE93], NFC: [0x1EE93], NFD: [0x1EE93], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0x1EE94], NFC: [0x1EE94], NFD: [0x1EE94], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EE95], NFC: [0x1EE95], NFD: [0x1EE95], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EE96], NFC: [0x1EE96], NFD: [0x1EE96], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EE97], NFC: [0x1EE97], NFD: [0x1EE97], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EE98], NFC: [0x1EE98], NFD: [0x1EE98], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0x1EE99], NFC: [0x1EE99], NFD: [0x1EE99], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EE9A], NFC: [0x1EE9A], NFD: [0x1EE9A], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EE9B], NFC: [0x1EE9B], NFD: [0x1EE9B], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1EEA1], NFC: [0x1EEA1], NFD: [0x1EEA1], NFKC: [0x0628], NFKD: [0x0628] }, +{ source: [0x1EEA2], NFC: [0x1EEA2], NFD: [0x1EEA2], NFKC: [0x062C], NFKD: [0x062C] }, +{ source: [0x1EEA3], NFC: [0x1EEA3], NFD: [0x1EEA3], NFKC: [0x062F], NFKD: [0x062F] }, +{ source: [0x1EEA5], NFC: [0x1EEA5], NFD: [0x1EEA5], NFKC: [0x0648], NFKD: [0x0648] }, +{ source: [0x1EEA6], NFC: [0x1EEA6], NFD: [0x1EEA6], NFKC: [0x0632], NFKD: [0x0632] }, +{ source: [0x1EEA7], NFC: [0x1EEA7], NFD: [0x1EEA7], NFKC: [0x062D], NFKD: [0x062D] }, +{ source: [0x1EEA8], NFC: [0x1EEA8], NFD: [0x1EEA8], NFKC: [0x0637], NFKD: [0x0637] }, +{ source: [0x1EEA9], NFC: [0x1EEA9], NFD: [0x1EEA9], NFKC: [0x064A], NFKD: [0x064A] }, +{ source: [0x1EEAB], NFC: [0x1EEAB], NFD: [0x1EEAB], NFKC: [0x0644], NFKD: [0x0644] }, +{ source: [0x1EEAC], NFC: [0x1EEAC], NFD: [0x1EEAC], NFKC: [0x0645], NFKD: [0x0645] }, +{ source: [0x1EEAD], NFC: [0x1EEAD], NFD: [0x1EEAD], NFKC: [0x0646], NFKD: [0x0646] }, +{ source: [0x1EEAE], NFC: [0x1EEAE], NFD: [0x1EEAE], NFKC: [0x0633], NFKD: [0x0633] }, +{ source: [0x1EEAF], NFC: [0x1EEAF], NFD: [0x1EEAF], NFKC: [0x0639], NFKD: [0x0639] }, +{ source: [0x1EEB0], NFC: [0x1EEB0], NFD: [0x1EEB0], NFKC: [0x0641], NFKD: [0x0641] }, +{ source: [0x1EEB1], NFC: [0x1EEB1], NFD: [0x1EEB1], NFKC: [0x0635], NFKD: [0x0635] }, +{ source: [0x1EEB2], NFC: [0x1EEB2], NFD: [0x1EEB2], NFKC: [0x0642], NFKD: [0x0642] }, +{ source: [0x1EEB3], NFC: [0x1EEB3], NFD: [0x1EEB3], NFKC: [0x0631], NFKD: [0x0631] }, +{ source: [0x1EEB4], NFC: [0x1EEB4], NFD: [0x1EEB4], NFKC: [0x0634], NFKD: [0x0634] }, +{ source: [0x1EEB5], NFC: [0x1EEB5], NFD: [0x1EEB5], NFKC: [0x062A], NFKD: [0x062A] }, +{ source: [0x1EEB6], NFC: [0x1EEB6], NFD: [0x1EEB6], NFKC: [0x062B], NFKD: [0x062B] }, +{ source: [0x1EEB7], NFC: [0x1EEB7], NFD: [0x1EEB7], NFKC: [0x062E], NFKD: [0x062E] }, +{ source: [0x1EEB8], NFC: [0x1EEB8], NFD: [0x1EEB8], NFKC: [0x0630], NFKD: [0x0630] }, +{ source: [0x1EEB9], NFC: [0x1EEB9], NFD: [0x1EEB9], NFKC: [0x0636], NFKD: [0x0636] }, +{ source: [0x1EEBA], NFC: [0x1EEBA], NFD: [0x1EEBA], NFKC: [0x0638], NFKD: [0x0638] }, +{ source: [0x1EEBB], NFC: [0x1EEBB], NFD: [0x1EEBB], NFKC: [0x063A], NFKD: [0x063A] }, +{ source: [0x1F100], NFC: [0x1F100], NFD: [0x1F100], NFKC: [0x0030, 0x002E], NFKD: [0x0030, 0x002E] }, +{ source: [0x1F101], NFC: [0x1F101], NFD: [0x1F101], NFKC: [0x0030, 0x002C], NFKD: [0x0030, 0x002C] }, +{ source: [0x1F102], NFC: [0x1F102], NFD: [0x1F102], NFKC: [0x0031, 0x002C], NFKD: [0x0031, 0x002C] }, +{ source: [0x1F103], NFC: [0x1F103], NFD: [0x1F103], NFKC: [0x0032, 0x002C], NFKD: [0x0032, 0x002C] }, +{ source: [0x1F104], NFC: [0x1F104], NFD: [0x1F104], NFKC: [0x0033, 0x002C], NFKD: [0x0033, 0x002C] }, +{ source: [0x1F105], NFC: [0x1F105], NFD: [0x1F105], NFKC: [0x0034, 0x002C], NFKD: [0x0034, 0x002C] }, +{ source: [0x1F106], NFC: [0x1F106], NFD: [0x1F106], NFKC: [0x0035, 0x002C], NFKD: [0x0035, 0x002C] }, +{ source: [0x1F107], NFC: [0x1F107], NFD: [0x1F107], NFKC: [0x0036, 0x002C], NFKD: [0x0036, 0x002C] }, +{ source: [0x1F108], NFC: [0x1F108], NFD: [0x1F108], NFKC: [0x0037, 0x002C], NFKD: [0x0037, 0x002C] }, +{ source: [0x1F109], NFC: [0x1F109], NFD: [0x1F109], NFKC: [0x0038, 0x002C], NFKD: [0x0038, 0x002C] }, +{ source: [0x1F10A], NFC: [0x1F10A], NFD: [0x1F10A], NFKC: [0x0039, 0x002C], NFKD: [0x0039, 0x002C] }, +{ source: [0x1F110], NFC: [0x1F110], NFD: [0x1F110], NFKC: [0x0028, 0x0041, 0x0029], NFKD: [0x0028, 0x0041, 0x0029] }, +{ source: [0x1F111], NFC: [0x1F111], NFD: [0x1F111], NFKC: [0x0028, 0x0042, 0x0029], NFKD: [0x0028, 0x0042, 0x0029] }, +{ source: [0x1F112], NFC: [0x1F112], NFD: [0x1F112], NFKC: [0x0028, 0x0043, 0x0029], NFKD: [0x0028, 0x0043, 0x0029] }, +{ source: [0x1F113], NFC: [0x1F113], NFD: [0x1F113], NFKC: [0x0028, 0x0044, 0x0029], NFKD: [0x0028, 0x0044, 0x0029] }, +{ source: [0x1F114], NFC: [0x1F114], NFD: [0x1F114], NFKC: [0x0028, 0x0045, 0x0029], NFKD: [0x0028, 0x0045, 0x0029] }, +{ source: [0x1F115], NFC: [0x1F115], NFD: [0x1F115], NFKC: [0x0028, 0x0046, 0x0029], NFKD: [0x0028, 0x0046, 0x0029] }, +{ source: [0x1F116], NFC: [0x1F116], NFD: [0x1F116], NFKC: [0x0028, 0x0047, 0x0029], NFKD: [0x0028, 0x0047, 0x0029] }, +{ source: [0x1F117], NFC: [0x1F117], NFD: [0x1F117], NFKC: [0x0028, 0x0048, 0x0029], NFKD: [0x0028, 0x0048, 0x0029] }, +{ source: [0x1F118], NFC: [0x1F118], NFD: [0x1F118], NFKC: [0x0028, 0x0049, 0x0029], NFKD: [0x0028, 0x0049, 0x0029] }, +{ source: [0x1F119], NFC: [0x1F119], NFD: [0x1F119], NFKC: [0x0028, 0x004A, 0x0029], NFKD: [0x0028, 0x004A, 0x0029] }, +{ source: [0x1F11A], NFC: [0x1F11A], NFD: [0x1F11A], NFKC: [0x0028, 0x004B, 0x0029], NFKD: [0x0028, 0x004B, 0x0029] }, +{ source: [0x1F11B], NFC: [0x1F11B], NFD: [0x1F11B], NFKC: [0x0028, 0x004C, 0x0029], NFKD: [0x0028, 0x004C, 0x0029] }, +{ source: [0x1F11C], NFC: [0x1F11C], NFD: [0x1F11C], NFKC: [0x0028, 0x004D, 0x0029], NFKD: [0x0028, 0x004D, 0x0029] }, +{ source: [0x1F11D], NFC: [0x1F11D], NFD: [0x1F11D], NFKC: [0x0028, 0x004E, 0x0029], NFKD: [0x0028, 0x004E, 0x0029] }, +{ source: [0x1F11E], NFC: [0x1F11E], NFD: [0x1F11E], NFKC: [0x0028, 0x004F, 0x0029], NFKD: [0x0028, 0x004F, 0x0029] }, +{ source: [0x1F11F], NFC: [0x1F11F], NFD: [0x1F11F], NFKC: [0x0028, 0x0050, 0x0029], NFKD: [0x0028, 0x0050, 0x0029] }, +{ source: [0x1F120], NFC: [0x1F120], NFD: [0x1F120], NFKC: [0x0028, 0x0051, 0x0029], NFKD: [0x0028, 0x0051, 0x0029] }, +{ source: [0x1F121], NFC: [0x1F121], NFD: [0x1F121], NFKC: [0x0028, 0x0052, 0x0029], NFKD: [0x0028, 0x0052, 0x0029] }, +{ source: [0x1F122], NFC: [0x1F122], NFD: [0x1F122], NFKC: [0x0028, 0x0053, 0x0029], NFKD: [0x0028, 0x0053, 0x0029] }, +{ source: [0x1F123], NFC: [0x1F123], NFD: [0x1F123], NFKC: [0x0028, 0x0054, 0x0029], NFKD: [0x0028, 0x0054, 0x0029] }, +{ source: [0x1F124], NFC: [0x1F124], NFD: [0x1F124], NFKC: [0x0028, 0x0055, 0x0029], NFKD: [0x0028, 0x0055, 0x0029] }, +{ source: [0x1F125], NFC: [0x1F125], NFD: [0x1F125], NFKC: [0x0028, 0x0056, 0x0029], NFKD: [0x0028, 0x0056, 0x0029] }, +{ source: [0x1F126], NFC: [0x1F126], NFD: [0x1F126], NFKC: [0x0028, 0x0057, 0x0029], NFKD: [0x0028, 0x0057, 0x0029] }, +{ source: [0x1F127], NFC: [0x1F127], NFD: [0x1F127], NFKC: [0x0028, 0x0058, 0x0029], NFKD: [0x0028, 0x0058, 0x0029] }, +{ source: [0x1F128], NFC: [0x1F128], NFD: [0x1F128], NFKC: [0x0028, 0x0059, 0x0029], NFKD: [0x0028, 0x0059, 0x0029] }, +{ source: [0x1F129], NFC: [0x1F129], NFD: [0x1F129], NFKC: [0x0028, 0x005A, 0x0029], NFKD: [0x0028, 0x005A, 0x0029] }, +{ source: [0x1F12A], NFC: [0x1F12A], NFD: [0x1F12A], NFKC: [0x3014, 0x0053, 0x3015], NFKD: [0x3014, 0x0053, 0x3015] }, +{ source: [0x1F12B], NFC: [0x1F12B], NFD: [0x1F12B], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1F12C], NFC: [0x1F12C], NFD: [0x1F12C], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1F12D], NFC: [0x1F12D], NFD: [0x1F12D], NFKC: [0x0043, 0x0044], NFKD: [0x0043, 0x0044] }, +{ source: [0x1F12E], NFC: [0x1F12E], NFD: [0x1F12E], NFKC: [0x0057, 0x005A], NFKD: [0x0057, 0x005A] }, +{ source: [0x1F130], NFC: [0x1F130], NFD: [0x1F130], NFKC: [0x0041], NFKD: [0x0041] }, +{ source: [0x1F131], NFC: [0x1F131], NFD: [0x1F131], NFKC: [0x0042], NFKD: [0x0042] }, +{ source: [0x1F132], NFC: [0x1F132], NFD: [0x1F132], NFKC: [0x0043], NFKD: [0x0043] }, +{ source: [0x1F133], NFC: [0x1F133], NFD: [0x1F133], NFKC: [0x0044], NFKD: [0x0044] }, +{ source: [0x1F134], NFC: [0x1F134], NFD: [0x1F134], NFKC: [0x0045], NFKD: [0x0045] }, +{ source: [0x1F135], NFC: [0x1F135], NFD: [0x1F135], NFKC: [0x0046], NFKD: [0x0046] }, +{ source: [0x1F136], NFC: [0x1F136], NFD: [0x1F136], NFKC: [0x0047], NFKD: [0x0047] }, +{ source: [0x1F137], NFC: [0x1F137], NFD: [0x1F137], NFKC: [0x0048], NFKD: [0x0048] }, +{ source: [0x1F138], NFC: [0x1F138], NFD: [0x1F138], NFKC: [0x0049], NFKD: [0x0049] }, +{ source: [0x1F139], NFC: [0x1F139], NFD: [0x1F139], NFKC: [0x004A], NFKD: [0x004A] }, +{ source: [0x1F13A], NFC: [0x1F13A], NFD: [0x1F13A], NFKC: [0x004B], NFKD: [0x004B] }, +{ source: [0x1F13B], NFC: [0x1F13B], NFD: [0x1F13B], NFKC: [0x004C], NFKD: [0x004C] }, +{ source: [0x1F13C], NFC: [0x1F13C], NFD: [0x1F13C], NFKC: [0x004D], NFKD: [0x004D] }, +{ source: [0x1F13D], NFC: [0x1F13D], NFD: [0x1F13D], NFKC: [0x004E], NFKD: [0x004E] }, +{ source: [0x1F13E], NFC: [0x1F13E], NFD: [0x1F13E], NFKC: [0x004F], NFKD: [0x004F] }, +{ source: [0x1F13F], NFC: [0x1F13F], NFD: [0x1F13F], NFKC: [0x0050], NFKD: [0x0050] }, +{ source: [0x1F140], NFC: [0x1F140], NFD: [0x1F140], NFKC: [0x0051], NFKD: [0x0051] }, +{ source: [0x1F141], NFC: [0x1F141], NFD: [0x1F141], NFKC: [0x0052], NFKD: [0x0052] }, +{ source: [0x1F142], NFC: [0x1F142], NFD: [0x1F142], NFKC: [0x0053], NFKD: [0x0053] }, +{ source: [0x1F143], NFC: [0x1F143], NFD: [0x1F143], NFKC: [0x0054], NFKD: [0x0054] }, +{ source: [0x1F144], NFC: [0x1F144], NFD: [0x1F144], NFKC: [0x0055], NFKD: [0x0055] }, +{ source: [0x1F145], NFC: [0x1F145], NFD: [0x1F145], NFKC: [0x0056], NFKD: [0x0056] }, +{ source: [0x1F146], NFC: [0x1F146], NFD: [0x1F146], NFKC: [0x0057], NFKD: [0x0057] }, +{ source: [0x1F147], NFC: [0x1F147], NFD: [0x1F147], NFKC: [0x0058], NFKD: [0x0058] }, +{ source: [0x1F148], NFC: [0x1F148], NFD: [0x1F148], NFKC: [0x0059], NFKD: [0x0059] }, +{ source: [0x1F149], NFC: [0x1F149], NFD: [0x1F149], NFKC: [0x005A], NFKD: [0x005A] }, +{ source: [0x1F14A], NFC: [0x1F14A], NFD: [0x1F14A], NFKC: [0x0048, 0x0056], NFKD: [0x0048, 0x0056] }, +{ source: [0x1F14B], NFC: [0x1F14B], NFD: [0x1F14B], NFKC: [0x004D, 0x0056], NFKD: [0x004D, 0x0056] }, +{ source: [0x1F14C], NFC: [0x1F14C], NFD: [0x1F14C], NFKC: [0x0053, 0x0044], NFKD: [0x0053, 0x0044] }, +{ source: [0x1F14D], NFC: [0x1F14D], NFD: [0x1F14D], NFKC: [0x0053, 0x0053], NFKD: [0x0053, 0x0053] }, +{ source: [0x1F14E], NFC: [0x1F14E], NFD: [0x1F14E], NFKC: [0x0050, 0x0050, 0x0056], NFKD: [0x0050, 0x0050, 0x0056] }, +{ source: [0x1F14F], NFC: [0x1F14F], NFD: [0x1F14F], NFKC: [0x0057, 0x0043], NFKD: [0x0057, 0x0043] }, +{ source: [0x1F16A], NFC: [0x1F16A], NFD: [0x1F16A], NFKC: [0x004D, 0x0043], NFKD: [0x004D, 0x0043] }, +{ source: [0x1F16B], NFC: [0x1F16B], NFD: [0x1F16B], NFKC: [0x004D, 0x0044], NFKD: [0x004D, 0x0044] }, +{ source: [0x1F190], NFC: [0x1F190], NFD: [0x1F190], NFKC: [0x0044, 0x004A], NFKD: [0x0044, 0x004A] }, +{ source: [0x1F200], NFC: [0x1F200], NFD: [0x1F200], NFKC: [0x307B, 0x304B], NFKD: [0x307B, 0x304B] }, +{ source: [0x1F201], NFC: [0x1F201], NFD: [0x1F201], NFKC: [0x30B3, 0x30B3], NFKD: [0x30B3, 0x30B3] }, +{ source: [0x1F202], NFC: [0x1F202], NFD: [0x1F202], NFKC: [0x30B5], NFKD: [0x30B5] }, +{ source: [0x1F210], NFC: [0x1F210], NFD: [0x1F210], NFKC: [0x624B], NFKD: [0x624B] }, +{ source: [0x1F211], NFC: [0x1F211], NFD: [0x1F211], NFKC: [0x5B57], NFKD: [0x5B57] }, +{ source: [0x1F212], NFC: [0x1F212], NFD: [0x1F212], NFKC: [0x53CC], NFKD: [0x53CC] }, +{ source: [0x1F213], NFC: [0x1F213], NFD: [0x1F213], NFKC: [0x30C7], NFKD: [0x30C6, 0x3099] }, +{ source: [0x1F214], NFC: [0x1F214], NFD: [0x1F214], NFKC: [0x4E8C], NFKD: [0x4E8C] }, +{ source: [0x1F215], NFC: [0x1F215], NFD: [0x1F215], NFKC: [0x591A], NFKD: [0x591A] }, +{ source: [0x1F216], NFC: [0x1F216], NFD: [0x1F216], NFKC: [0x89E3], NFKD: [0x89E3] }, +{ source: [0x1F217], NFC: [0x1F217], NFD: [0x1F217], NFKC: [0x5929], NFKD: [0x5929] }, +{ source: [0x1F218], NFC: [0x1F218], NFD: [0x1F218], NFKC: [0x4EA4], NFKD: [0x4EA4] }, +{ source: [0x1F219], NFC: [0x1F219], NFD: [0x1F219], NFKC: [0x6620], NFKD: [0x6620] }, +{ source: [0x1F21A], NFC: [0x1F21A], NFD: [0x1F21A], NFKC: [0x7121], NFKD: [0x7121] }, +{ source: [0x1F21B], NFC: [0x1F21B], NFD: [0x1F21B], NFKC: [0x6599], NFKD: [0x6599] }, +{ source: [0x1F21C], NFC: [0x1F21C], NFD: [0x1F21C], NFKC: [0x524D], NFKD: [0x524D] }, +{ source: [0x1F21D], NFC: [0x1F21D], NFD: [0x1F21D], NFKC: [0x5F8C], NFKD: [0x5F8C] }, +{ source: [0x1F21E], NFC: [0x1F21E], NFD: [0x1F21E], NFKC: [0x518D], NFKD: [0x518D] }, +{ source: [0x1F21F], NFC: [0x1F21F], NFD: [0x1F21F], NFKC: [0x65B0], NFKD: [0x65B0] }, +{ source: [0x1F220], NFC: [0x1F220], NFD: [0x1F220], NFKC: [0x521D], NFKD: [0x521D] }, +{ source: [0x1F221], NFC: [0x1F221], NFD: [0x1F221], NFKC: [0x7D42], NFKD: [0x7D42] }, +{ source: [0x1F222], NFC: [0x1F222], NFD: [0x1F222], NFKC: [0x751F], NFKD: [0x751F] }, +{ source: [0x1F223], NFC: [0x1F223], NFD: [0x1F223], NFKC: [0x8CA9], NFKD: [0x8CA9] }, +{ source: [0x1F224], NFC: [0x1F224], NFD: [0x1F224], NFKC: [0x58F0], NFKD: [0x58F0] }, +{ source: [0x1F225], NFC: [0x1F225], NFD: [0x1F225], NFKC: [0x5439], NFKD: [0x5439] }, +{ source: [0x1F226], NFC: [0x1F226], NFD: [0x1F226], NFKC: [0x6F14], NFKD: [0x6F14] }, +{ source: [0x1F227], NFC: [0x1F227], NFD: [0x1F227], NFKC: [0x6295], NFKD: [0x6295] }, +{ source: [0x1F228], NFC: [0x1F228], NFD: [0x1F228], NFKC: [0x6355], NFKD: [0x6355] }, +{ source: [0x1F229], NFC: [0x1F229], NFD: [0x1F229], NFKC: [0x4E00], NFKD: [0x4E00] }, +{ source: [0x1F22A], NFC: [0x1F22A], NFD: [0x1F22A], NFKC: [0x4E09], NFKD: [0x4E09] }, +{ source: [0x1F22B], NFC: [0x1F22B], NFD: [0x1F22B], NFKC: [0x904A], NFKD: [0x904A] }, +{ source: [0x1F22C], NFC: [0x1F22C], NFD: [0x1F22C], NFKC: [0x5DE6], NFKD: [0x5DE6] }, +{ source: [0x1F22D], NFC: [0x1F22D], NFD: [0x1F22D], NFKC: [0x4E2D], NFKD: [0x4E2D] }, +{ source: [0x1F22E], NFC: [0x1F22E], NFD: [0x1F22E], NFKC: [0x53F3], NFKD: [0x53F3] }, +{ source: [0x1F22F], NFC: [0x1F22F], NFD: [0x1F22F], NFKC: [0x6307], NFKD: [0x6307] }, +{ source: [0x1F230], NFC: [0x1F230], NFD: [0x1F230], NFKC: [0x8D70], NFKD: [0x8D70] }, +{ source: [0x1F231], NFC: [0x1F231], NFD: [0x1F231], NFKC: [0x6253], NFKD: [0x6253] }, +{ source: [0x1F232], NFC: [0x1F232], NFD: [0x1F232], NFKC: [0x7981], NFKD: [0x7981] }, +{ source: [0x1F233], NFC: [0x1F233], NFD: [0x1F233], NFKC: [0x7A7A], NFKD: [0x7A7A] }, +{ source: [0x1F234], NFC: [0x1F234], NFD: [0x1F234], NFKC: [0x5408], NFKD: [0x5408] }, +{ source: [0x1F235], NFC: [0x1F235], NFD: [0x1F235], NFKC: [0x6E80], NFKD: [0x6E80] }, +{ source: [0x1F236], NFC: [0x1F236], NFD: [0x1F236], NFKC: [0x6709], NFKD: [0x6709] }, +{ source: [0x1F237], NFC: [0x1F237], NFD: [0x1F237], NFKC: [0x6708], NFKD: [0x6708] }, +{ source: [0x1F238], NFC: [0x1F238], NFD: [0x1F238], NFKC: [0x7533], NFKD: [0x7533] }, +{ source: [0x1F239], NFC: [0x1F239], NFD: [0x1F239], NFKC: [0x5272], NFKD: [0x5272] }, +{ source: [0x1F23A], NFC: [0x1F23A], NFD: [0x1F23A], NFKC: [0x55B6], NFKD: [0x55B6] }, +{ source: [0x1F240], NFC: [0x1F240], NFD: [0x1F240], NFKC: [0x3014, 0x672C, 0x3015], NFKD: [0x3014, 0x672C, 0x3015] }, +{ source: [0x1F241], NFC: [0x1F241], NFD: [0x1F241], NFKC: [0x3014, 0x4E09, 0x3015], NFKD: [0x3014, 0x4E09, 0x3015] }, +{ source: [0x1F242], NFC: [0x1F242], NFD: [0x1F242], NFKC: [0x3014, 0x4E8C, 0x3015], NFKD: [0x3014, 0x4E8C, 0x3015] }, +{ source: [0x1F243], NFC: [0x1F243], NFD: [0x1F243], NFKC: [0x3014, 0x5B89, 0x3015], NFKD: [0x3014, 0x5B89, 0x3015] }, +{ source: [0x1F244], NFC: [0x1F244], NFD: [0x1F244], NFKC: [0x3014, 0x70B9, 0x3015], NFKD: [0x3014, 0x70B9, 0x3015] }, +{ source: [0x1F245], NFC: [0x1F245], NFD: [0x1F245], NFKC: [0x3014, 0x6253, 0x3015], NFKD: [0x3014, 0x6253, 0x3015] }, +{ source: [0x1F246], NFC: [0x1F246], NFD: [0x1F246], NFKC: [0x3014, 0x76D7, 0x3015], NFKD: [0x3014, 0x76D7, 0x3015] }, +{ source: [0x1F247], NFC: [0x1F247], NFD: [0x1F247], NFKC: [0x3014, 0x52DD, 0x3015], NFKD: [0x3014, 0x52DD, 0x3015] }, +{ source: [0x1F248], NFC: [0x1F248], NFD: [0x1F248], NFKC: [0x3014, 0x6557, 0x3015], NFKD: [0x3014, 0x6557, 0x3015] }, +{ source: [0x1F250], NFC: [0x1F250], NFD: [0x1F250], NFKC: [0x5F97], NFKD: [0x5F97] }, +{ source: [0x1F251], NFC: [0x1F251], NFD: [0x1F251], NFKC: [0x53EF], NFKD: [0x53EF] }, +{ source: [0x2F800], NFC: [0x4E3D], NFD: [0x4E3D], NFKC: [0x4E3D], NFKD: [0x4E3D] }, +{ source: [0x2F801], NFC: [0x4E38], NFD: [0x4E38], NFKC: [0x4E38], NFKD: [0x4E38] }, +{ source: [0x2F802], NFC: [0x4E41], NFD: [0x4E41], NFKC: [0x4E41], NFKD: [0x4E41] }, +{ source: [0x2F803], NFC: [0x20122], NFD: [0x20122], NFKC: [0x20122], NFKD: [0x20122] }, +{ source: [0x2F804], NFC: [0x4F60], NFD: [0x4F60], NFKC: [0x4F60], NFKD: [0x4F60] }, +{ source: [0x2F805], NFC: [0x4FAE], NFD: [0x4FAE], NFKC: [0x4FAE], NFKD: [0x4FAE] }, +{ source: [0x2F806], NFC: [0x4FBB], NFD: [0x4FBB], NFKC: [0x4FBB], NFKD: [0x4FBB] }, +{ source: [0x2F807], NFC: [0x5002], NFD: [0x5002], NFKC: [0x5002], NFKD: [0x5002] }, +{ source: [0x2F808], NFC: [0x507A], NFD: [0x507A], NFKC: [0x507A], NFKD: [0x507A] }, +{ source: [0x2F809], NFC: [0x5099], NFD: [0x5099], NFKC: [0x5099], NFKD: [0x5099] }, +{ source: [0x2F80A], NFC: [0x50E7], NFD: [0x50E7], NFKC: [0x50E7], NFKD: [0x50E7] }, +{ source: [0x2F80B], NFC: [0x50CF], NFD: [0x50CF], NFKC: [0x50CF], NFKD: [0x50CF] }, +{ source: [0x2F80C], NFC: [0x349E], NFD: [0x349E], NFKC: [0x349E], NFKD: [0x349E] }, +{ source: [0x2F80D], NFC: [0x2063A], NFD: [0x2063A], NFKC: [0x2063A], NFKD: [0x2063A] }, +{ source: [0x2F80E], NFC: [0x514D], NFD: [0x514D], NFKC: [0x514D], NFKD: [0x514D] }, +{ source: [0x2F80F], NFC: [0x5154], NFD: [0x5154], NFKC: [0x5154], NFKD: [0x5154] }, +{ source: [0x2F810], NFC: [0x5164], NFD: [0x5164], NFKC: [0x5164], NFKD: [0x5164] }, +{ source: [0x2F811], NFC: [0x5177], NFD: [0x5177], NFKC: [0x5177], NFKD: [0x5177] }, +{ source: [0x2F812], NFC: [0x2051C], NFD: [0x2051C], NFKC: [0x2051C], NFKD: [0x2051C] }, +{ source: [0x2F813], NFC: [0x34B9], NFD: [0x34B9], NFKC: [0x34B9], NFKD: [0x34B9] }, +{ source: [0x2F814], NFC: [0x5167], NFD: [0x5167], NFKC: [0x5167], NFKD: [0x5167] }, +{ source: [0x2F815], NFC: [0x518D], NFD: [0x518D], NFKC: [0x518D], NFKD: [0x518D] }, +{ source: [0x2F816], NFC: [0x2054B], NFD: [0x2054B], NFKC: [0x2054B], NFKD: [0x2054B] }, +{ source: [0x2F817], NFC: [0x5197], NFD: [0x5197], NFKC: [0x5197], NFKD: [0x5197] }, +{ source: [0x2F818], NFC: [0x51A4], NFD: [0x51A4], NFKC: [0x51A4], NFKD: [0x51A4] }, +{ source: [0x2F819], NFC: [0x4ECC], NFD: [0x4ECC], NFKC: [0x4ECC], NFKD: [0x4ECC] }, +{ source: [0x2F81A], NFC: [0x51AC], NFD: [0x51AC], NFKC: [0x51AC], NFKD: [0x51AC] }, +{ source: [0x2F81B], NFC: [0x51B5], NFD: [0x51B5], NFKC: [0x51B5], NFKD: [0x51B5] }, +{ source: [0x2F81C], NFC: [0x291DF], NFD: [0x291DF], NFKC: [0x291DF], NFKD: [0x291DF] }, +{ source: [0x2F81D], NFC: [0x51F5], NFD: [0x51F5], NFKC: [0x51F5], NFKD: [0x51F5] }, +{ source: [0x2F81E], NFC: [0x5203], NFD: [0x5203], NFKC: [0x5203], NFKD: [0x5203] }, +{ source: [0x2F81F], NFC: [0x34DF], NFD: [0x34DF], NFKC: [0x34DF], NFKD: [0x34DF] }, +{ source: [0x2F820], NFC: [0x523B], NFD: [0x523B], NFKC: [0x523B], NFKD: [0x523B] }, +{ source: [0x2F821], NFC: [0x5246], NFD: [0x5246], NFKC: [0x5246], NFKD: [0x5246] }, +{ source: [0x2F822], NFC: [0x5272], NFD: [0x5272], NFKC: [0x5272], NFKD: [0x5272] }, +{ source: [0x2F823], NFC: [0x5277], NFD: [0x5277], NFKC: [0x5277], NFKD: [0x5277] }, +{ source: [0x2F824], NFC: [0x3515], NFD: [0x3515], NFKC: [0x3515], NFKD: [0x3515] }, +{ source: [0x2F825], NFC: [0x52C7], NFD: [0x52C7], NFKC: [0x52C7], NFKD: [0x52C7] }, +{ source: [0x2F826], NFC: [0x52C9], NFD: [0x52C9], NFKC: [0x52C9], NFKD: [0x52C9] }, +{ source: [0x2F827], NFC: [0x52E4], NFD: [0x52E4], NFKC: [0x52E4], NFKD: [0x52E4] }, +{ source: [0x2F828], NFC: [0x52FA], NFD: [0x52FA], NFKC: [0x52FA], NFKD: [0x52FA] }, +{ source: [0x2F829], NFC: [0x5305], NFD: [0x5305], NFKC: [0x5305], NFKD: [0x5305] }, +{ source: [0x2F82A], NFC: [0x5306], NFD: [0x5306], NFKC: [0x5306], NFKD: [0x5306] }, +{ source: [0x2F82B], NFC: [0x5317], NFD: [0x5317], NFKC: [0x5317], NFKD: [0x5317] }, +{ source: [0x2F82C], NFC: [0x5349], NFD: [0x5349], NFKC: [0x5349], NFKD: [0x5349] }, +{ source: [0x2F82D], NFC: [0x5351], NFD: [0x5351], NFKC: [0x5351], NFKD: [0x5351] }, +{ source: [0x2F82E], NFC: [0x535A], NFD: [0x535A], NFKC: [0x535A], NFKD: [0x535A] }, +{ source: [0x2F82F], NFC: [0x5373], NFD: [0x5373], NFKC: [0x5373], NFKD: [0x5373] }, +{ source: [0x2F830], NFC: [0x537D], NFD: [0x537D], NFKC: [0x537D], NFKD: [0x537D] }, +{ source: [0x2F831], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] }, +{ source: [0x2F832], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] }, +{ source: [0x2F833], NFC: [0x537F], NFD: [0x537F], NFKC: [0x537F], NFKD: [0x537F] }, +{ source: [0x2F834], NFC: [0x20A2C], NFD: [0x20A2C], NFKC: [0x20A2C], NFKD: [0x20A2C] }, +{ source: [0x2F835], NFC: [0x7070], NFD: [0x7070], NFKC: [0x7070], NFKD: [0x7070] }, +{ source: [0x2F836], NFC: [0x53CA], NFD: [0x53CA], NFKC: [0x53CA], NFKD: [0x53CA] }, +{ source: [0x2F837], NFC: [0x53DF], NFD: [0x53DF], NFKC: [0x53DF], NFKD: [0x53DF] }, +{ source: [0x2F838], NFC: [0x20B63], NFD: [0x20B63], NFKC: [0x20B63], NFKD: [0x20B63] }, +{ source: [0x2F839], NFC: [0x53EB], NFD: [0x53EB], NFKC: [0x53EB], NFKD: [0x53EB] }, +{ source: [0x2F83A], NFC: [0x53F1], NFD: [0x53F1], NFKC: [0x53F1], NFKD: [0x53F1] }, +{ source: [0x2F83B], NFC: [0x5406], NFD: [0x5406], NFKC: [0x5406], NFKD: [0x5406] }, +{ source: [0x2F83C], NFC: [0x549E], NFD: [0x549E], NFKC: [0x549E], NFKD: [0x549E] }, +{ source: [0x2F83D], NFC: [0x5438], NFD: [0x5438], NFKC: [0x5438], NFKD: [0x5438] }, +{ source: [0x2F83E], NFC: [0x5448], NFD: [0x5448], NFKC: [0x5448], NFKD: [0x5448] }, +{ source: [0x2F83F], NFC: [0x5468], NFD: [0x5468], NFKC: [0x5468], NFKD: [0x5468] }, +{ source: [0x2F840], NFC: [0x54A2], NFD: [0x54A2], NFKC: [0x54A2], NFKD: [0x54A2] }, +{ source: [0x2F841], NFC: [0x54F6], NFD: [0x54F6], NFKC: [0x54F6], NFKD: [0x54F6] }, +{ source: [0x2F842], NFC: [0x5510], NFD: [0x5510], NFKC: [0x5510], NFKD: [0x5510] }, +{ source: [0x2F843], NFC: [0x5553], NFD: [0x5553], NFKC: [0x5553], NFKD: [0x5553] }, +{ source: [0x2F844], NFC: [0x5563], NFD: [0x5563], NFKC: [0x5563], NFKD: [0x5563] }, +{ source: [0x2F845], NFC: [0x5584], NFD: [0x5584], NFKC: [0x5584], NFKD: [0x5584] }, +{ source: [0x2F846], NFC: [0x5584], NFD: [0x5584], NFKC: [0x5584], NFKD: [0x5584] }, +{ source: [0x2F847], NFC: [0x5599], NFD: [0x5599], NFKC: [0x5599], NFKD: [0x5599] }, +{ source: [0x2F848], NFC: [0x55AB], NFD: [0x55AB], NFKC: [0x55AB], NFKD: [0x55AB] }, +{ source: [0x2F849], NFC: [0x55B3], NFD: [0x55B3], NFKC: [0x55B3], NFKD: [0x55B3] }, +{ source: [0x2F84A], NFC: [0x55C2], NFD: [0x55C2], NFKC: [0x55C2], NFKD: [0x55C2] }, +{ source: [0x2F84B], NFC: [0x5716], NFD: [0x5716], NFKC: [0x5716], NFKD: [0x5716] }, +{ source: [0x2F84C], NFC: [0x5606], NFD: [0x5606], NFKC: [0x5606], NFKD: [0x5606] }, +{ source: [0x2F84D], NFC: [0x5717], NFD: [0x5717], NFKC: [0x5717], NFKD: [0x5717] }, +{ source: [0x2F84E], NFC: [0x5651], NFD: [0x5651], NFKC: [0x5651], NFKD: [0x5651] }, +{ source: [0x2F84F], NFC: [0x5674], NFD: [0x5674], NFKC: [0x5674], NFKD: [0x5674] }, +{ source: [0x2F850], NFC: [0x5207], NFD: [0x5207], NFKC: [0x5207], NFKD: [0x5207] }, +{ source: [0x2F851], NFC: [0x58EE], NFD: [0x58EE], NFKC: [0x58EE], NFKD: [0x58EE] }, +{ source: [0x2F852], NFC: [0x57CE], NFD: [0x57CE], NFKC: [0x57CE], NFKD: [0x57CE] }, +{ source: [0x2F853], NFC: [0x57F4], NFD: [0x57F4], NFKC: [0x57F4], NFKD: [0x57F4] }, +{ source: [0x2F854], NFC: [0x580D], NFD: [0x580D], NFKC: [0x580D], NFKD: [0x580D] }, +{ source: [0x2F855], NFC: [0x578B], NFD: [0x578B], NFKC: [0x578B], NFKD: [0x578B] }, +{ source: [0x2F856], NFC: [0x5832], NFD: [0x5832], NFKC: [0x5832], NFKD: [0x5832] }, +{ source: [0x2F857], NFC: [0x5831], NFD: [0x5831], NFKC: [0x5831], NFKD: [0x5831] }, +{ source: [0x2F858], NFC: [0x58AC], NFD: [0x58AC], NFKC: [0x58AC], NFKD: [0x58AC] }, +{ source: [0x2F859], NFC: [0x214E4], NFD: [0x214E4], NFKC: [0x214E4], NFKD: [0x214E4] }, +{ source: [0x2F85A], NFC: [0x58F2], NFD: [0x58F2], NFKC: [0x58F2], NFKD: [0x58F2] }, +{ source: [0x2F85B], NFC: [0x58F7], NFD: [0x58F7], NFKC: [0x58F7], NFKD: [0x58F7] }, +{ source: [0x2F85C], NFC: [0x5906], NFD: [0x5906], NFKC: [0x5906], NFKD: [0x5906] }, +{ source: [0x2F85D], NFC: [0x591A], NFD: [0x591A], NFKC: [0x591A], NFKD: [0x591A] }, +{ source: [0x2F85E], NFC: [0x5922], NFD: [0x5922], NFKC: [0x5922], NFKD: [0x5922] }, +{ source: [0x2F85F], NFC: [0x5962], NFD: [0x5962], NFKC: [0x5962], NFKD: [0x5962] }, +{ source: [0x2F860], NFC: [0x216A8], NFD: [0x216A8], NFKC: [0x216A8], NFKD: [0x216A8] }, +{ source: [0x2F861], NFC: [0x216EA], NFD: [0x216EA], NFKC: [0x216EA], NFKD: [0x216EA] }, +{ source: [0x2F862], NFC: [0x59EC], NFD: [0x59EC], NFKC: [0x59EC], NFKD: [0x59EC] }, +{ source: [0x2F863], NFC: [0x5A1B], NFD: [0x5A1B], NFKC: [0x5A1B], NFKD: [0x5A1B] }, +{ source: [0x2F864], NFC: [0x5A27], NFD: [0x5A27], NFKC: [0x5A27], NFKD: [0x5A27] }, +{ source: [0x2F865], NFC: [0x59D8], NFD: [0x59D8], NFKC: [0x59D8], NFKD: [0x59D8] }, +{ source: [0x2F866], NFC: [0x5A66], NFD: [0x5A66], NFKC: [0x5A66], NFKD: [0x5A66] }, +{ source: [0x2F867], NFC: [0x36EE], NFD: [0x36EE], NFKC: [0x36EE], NFKD: [0x36EE] }, +{ source: [0x2F868], NFC: [0x36FC], NFD: [0x36FC], NFKC: [0x36FC], NFKD: [0x36FC] }, +{ source: [0x2F869], NFC: [0x5B08], NFD: [0x5B08], NFKC: [0x5B08], NFKD: [0x5B08] }, +{ source: [0x2F86A], NFC: [0x5B3E], NFD: [0x5B3E], NFKC: [0x5B3E], NFKD: [0x5B3E] }, +{ source: [0x2F86B], NFC: [0x5B3E], NFD: [0x5B3E], NFKC: [0x5B3E], NFKD: [0x5B3E] }, +{ source: [0x2F86C], NFC: [0x219C8], NFD: [0x219C8], NFKC: [0x219C8], NFKD: [0x219C8] }, +{ source: [0x2F86D], NFC: [0x5BC3], NFD: [0x5BC3], NFKC: [0x5BC3], NFKD: [0x5BC3] }, +{ source: [0x2F86E], NFC: [0x5BD8], NFD: [0x5BD8], NFKC: [0x5BD8], NFKD: [0x5BD8] }, +{ source: [0x2F86F], NFC: [0x5BE7], NFD: [0x5BE7], NFKC: [0x5BE7], NFKD: [0x5BE7] }, +{ source: [0x2F870], NFC: [0x5BF3], NFD: [0x5BF3], NFKC: [0x5BF3], NFKD: [0x5BF3] }, +{ source: [0x2F871], NFC: [0x21B18], NFD: [0x21B18], NFKC: [0x21B18], NFKD: [0x21B18] }, +{ source: [0x2F872], NFC: [0x5BFF], NFD: [0x5BFF], NFKC: [0x5BFF], NFKD: [0x5BFF] }, +{ source: [0x2F873], NFC: [0x5C06], NFD: [0x5C06], NFKC: [0x5C06], NFKD: [0x5C06] }, +{ source: [0x2F874], NFC: [0x5F53], NFD: [0x5F53], NFKC: [0x5F53], NFKD: [0x5F53] }, +{ source: [0x2F875], NFC: [0x5C22], NFD: [0x5C22], NFKC: [0x5C22], NFKD: [0x5C22] }, +{ source: [0x2F876], NFC: [0x3781], NFD: [0x3781], NFKC: [0x3781], NFKD: [0x3781] }, +{ source: [0x2F877], NFC: [0x5C60], NFD: [0x5C60], NFKC: [0x5C60], NFKD: [0x5C60] }, +{ source: [0x2F878], NFC: [0x5C6E], NFD: [0x5C6E], NFKC: [0x5C6E], NFKD: [0x5C6E] }, +{ source: [0x2F879], NFC: [0x5CC0], NFD: [0x5CC0], NFKC: [0x5CC0], NFKD: [0x5CC0] }, +{ source: [0x2F87A], NFC: [0x5C8D], NFD: [0x5C8D], NFKC: [0x5C8D], NFKD: [0x5C8D] }, +{ source: [0x2F87B], NFC: [0x21DE4], NFD: [0x21DE4], NFKC: [0x21DE4], NFKD: [0x21DE4] }, +{ source: [0x2F87C], NFC: [0x5D43], NFD: [0x5D43], NFKC: [0x5D43], NFKD: [0x5D43] }, +{ source: [0x2F87D], NFC: [0x21DE6], NFD: [0x21DE6], NFKC: [0x21DE6], NFKD: [0x21DE6] }, +{ source: [0x2F87E], NFC: [0x5D6E], NFD: [0x5D6E], NFKC: [0x5D6E], NFKD: [0x5D6E] }, +{ source: [0x2F87F], NFC: [0x5D6B], NFD: [0x5D6B], NFKC: [0x5D6B], NFKD: [0x5D6B] }, +{ source: [0x2F880], NFC: [0x5D7C], NFD: [0x5D7C], NFKC: [0x5D7C], NFKD: [0x5D7C] }, +{ source: [0x2F881], NFC: [0x5DE1], NFD: [0x5DE1], NFKC: [0x5DE1], NFKD: [0x5DE1] }, +{ source: [0x2F882], NFC: [0x5DE2], NFD: [0x5DE2], NFKC: [0x5DE2], NFKD: [0x5DE2] }, +{ source: [0x2F883], NFC: [0x382F], NFD: [0x382F], NFKC: [0x382F], NFKD: [0x382F] }, +{ source: [0x2F884], NFC: [0x5DFD], NFD: [0x5DFD], NFKC: [0x5DFD], NFKD: [0x5DFD] }, +{ source: [0x2F885], NFC: [0x5E28], NFD: [0x5E28], NFKC: [0x5E28], NFKD: [0x5E28] }, +{ source: [0x2F886], NFC: [0x5E3D], NFD: [0x5E3D], NFKC: [0x5E3D], NFKD: [0x5E3D] }, +{ source: [0x2F887], NFC: [0x5E69], NFD: [0x5E69], NFKC: [0x5E69], NFKD: [0x5E69] }, +{ source: [0x2F888], NFC: [0x3862], NFD: [0x3862], NFKC: [0x3862], NFKD: [0x3862] }, +{ source: [0x2F889], NFC: [0x22183], NFD: [0x22183], NFKC: [0x22183], NFKD: [0x22183] }, +{ source: [0x2F88A], NFC: [0x387C], NFD: [0x387C], NFKC: [0x387C], NFKD: [0x387C] }, +{ source: [0x2F88B], NFC: [0x5EB0], NFD: [0x5EB0], NFKC: [0x5EB0], NFKD: [0x5EB0] }, +{ source: [0x2F88C], NFC: [0x5EB3], NFD: [0x5EB3], NFKC: [0x5EB3], NFKD: [0x5EB3] }, +{ source: [0x2F88D], NFC: [0x5EB6], NFD: [0x5EB6], NFKC: [0x5EB6], NFKD: [0x5EB6] }, +{ source: [0x2F88E], NFC: [0x5ECA], NFD: [0x5ECA], NFKC: [0x5ECA], NFKD: [0x5ECA] }, +{ source: [0x2F88F], NFC: [0x2A392], NFD: [0x2A392], NFKC: [0x2A392], NFKD: [0x2A392] }, +{ source: [0x2F890], NFC: [0x5EFE], NFD: [0x5EFE], NFKC: [0x5EFE], NFKD: [0x5EFE] }, +{ source: [0x2F891], NFC: [0x22331], NFD: [0x22331], NFKC: [0x22331], NFKD: [0x22331] }, +{ source: [0x2F892], NFC: [0x22331], NFD: [0x22331], NFKC: [0x22331], NFKD: [0x22331] }, +{ source: [0x2F893], NFC: [0x8201], NFD: [0x8201], NFKC: [0x8201], NFKD: [0x8201] }, +{ source: [0x2F894], NFC: [0x5F22], NFD: [0x5F22], NFKC: [0x5F22], NFKD: [0x5F22] }, +{ source: [0x2F895], NFC: [0x5F22], NFD: [0x5F22], NFKC: [0x5F22], NFKD: [0x5F22] }, +{ source: [0x2F896], NFC: [0x38C7], NFD: [0x38C7], NFKC: [0x38C7], NFKD: [0x38C7] }, +{ source: [0x2F897], NFC: [0x232B8], NFD: [0x232B8], NFKC: [0x232B8], NFKD: [0x232B8] }, +{ source: [0x2F898], NFC: [0x261DA], NFD: [0x261DA], NFKC: [0x261DA], NFKD: [0x261DA] }, +{ source: [0x2F899], NFC: [0x5F62], NFD: [0x5F62], NFKC: [0x5F62], NFKD: [0x5F62] }, +{ source: [0x2F89A], NFC: [0x5F6B], NFD: [0x5F6B], NFKC: [0x5F6B], NFKD: [0x5F6B] }, +{ source: [0x2F89B], NFC: [0x38E3], NFD: [0x38E3], NFKC: [0x38E3], NFKD: [0x38E3] }, +{ source: [0x2F89C], NFC: [0x5F9A], NFD: [0x5F9A], NFKC: [0x5F9A], NFKD: [0x5F9A] }, +{ source: [0x2F89D], NFC: [0x5FCD], NFD: [0x5FCD], NFKC: [0x5FCD], NFKD: [0x5FCD] }, +{ source: [0x2F89E], NFC: [0x5FD7], NFD: [0x5FD7], NFKC: [0x5FD7], NFKD: [0x5FD7] }, +{ source: [0x2F89F], NFC: [0x5FF9], NFD: [0x5FF9], NFKC: [0x5FF9], NFKD: [0x5FF9] }, +{ source: [0x2F8A0], NFC: [0x6081], NFD: [0x6081], NFKC: [0x6081], NFKD: [0x6081] }, +{ source: [0x2F8A1], NFC: [0x393A], NFD: [0x393A], NFKC: [0x393A], NFKD: [0x393A] }, +{ source: [0x2F8A2], NFC: [0x391C], NFD: [0x391C], NFKC: [0x391C], NFKD: [0x391C] }, +{ source: [0x2F8A3], NFC: [0x6094], NFD: [0x6094], NFKC: [0x6094], NFKD: [0x6094] }, +{ source: [0x2F8A4], NFC: [0x226D4], NFD: [0x226D4], NFKC: [0x226D4], NFKD: [0x226D4] }, +{ source: [0x2F8A5], NFC: [0x60C7], NFD: [0x60C7], NFKC: [0x60C7], NFKD: [0x60C7] }, +{ source: [0x2F8A6], NFC: [0x6148], NFD: [0x6148], NFKC: [0x6148], NFKD: [0x6148] }, +{ source: [0x2F8A7], NFC: [0x614C], NFD: [0x614C], NFKC: [0x614C], NFKD: [0x614C] }, +{ source: [0x2F8A8], NFC: [0x614E], NFD: [0x614E], NFKC: [0x614E], NFKD: [0x614E] }, +{ source: [0x2F8A9], NFC: [0x614C], NFD: [0x614C], NFKC: [0x614C], NFKD: [0x614C] }, +{ source: [0x2F8AA], NFC: [0x617A], NFD: [0x617A], NFKC: [0x617A], NFKD: [0x617A] }, +{ source: [0x2F8AB], NFC: [0x618E], NFD: [0x618E], NFKC: [0x618E], NFKD: [0x618E] }, +{ source: [0x2F8AC], NFC: [0x61B2], NFD: [0x61B2], NFKC: [0x61B2], NFKD: [0x61B2] }, +{ source: [0x2F8AD], NFC: [0x61A4], NFD: [0x61A4], NFKC: [0x61A4], NFKD: [0x61A4] }, +{ source: [0x2F8AE], NFC: [0x61AF], NFD: [0x61AF], NFKC: [0x61AF], NFKD: [0x61AF] }, +{ source: [0x2F8AF], NFC: [0x61DE], NFD: [0x61DE], NFKC: [0x61DE], NFKD: [0x61DE] }, +{ source: [0x2F8B0], NFC: [0x61F2], NFD: [0x61F2], NFKC: [0x61F2], NFKD: [0x61F2] }, +{ source: [0x2F8B1], NFC: [0x61F6], NFD: [0x61F6], NFKC: [0x61F6], NFKD: [0x61F6] }, +{ source: [0x2F8B2], NFC: [0x6210], NFD: [0x6210], NFKC: [0x6210], NFKD: [0x6210] }, +{ source: [0x2F8B3], NFC: [0x621B], NFD: [0x621B], NFKC: [0x621B], NFKD: [0x621B] }, +{ source: [0x2F8B4], NFC: [0x625D], NFD: [0x625D], NFKC: [0x625D], NFKD: [0x625D] }, +{ source: [0x2F8B5], NFC: [0x62B1], NFD: [0x62B1], NFKC: [0x62B1], NFKD: [0x62B1] }, +{ source: [0x2F8B6], NFC: [0x62D4], NFD: [0x62D4], NFKC: [0x62D4], NFKD: [0x62D4] }, +{ source: [0x2F8B7], NFC: [0x6350], NFD: [0x6350], NFKC: [0x6350], NFKD: [0x6350] }, +{ source: [0x2F8B8], NFC: [0x22B0C], NFD: [0x22B0C], NFKC: [0x22B0C], NFKD: [0x22B0C] }, +{ source: [0x2F8B9], NFC: [0x633D], NFD: [0x633D], NFKC: [0x633D], NFKD: [0x633D] }, +{ source: [0x2F8BA], NFC: [0x62FC], NFD: [0x62FC], NFKC: [0x62FC], NFKD: [0x62FC] }, +{ source: [0x2F8BB], NFC: [0x6368], NFD: [0x6368], NFKC: [0x6368], NFKD: [0x6368] }, +{ source: [0x2F8BC], NFC: [0x6383], NFD: [0x6383], NFKC: [0x6383], NFKD: [0x6383] }, +{ source: [0x2F8BD], NFC: [0x63E4], NFD: [0x63E4], NFKC: [0x63E4], NFKD: [0x63E4] }, +{ source: [0x2F8BE], NFC: [0x22BF1], NFD: [0x22BF1], NFKC: [0x22BF1], NFKD: [0x22BF1] }, +{ source: [0x2F8BF], NFC: [0x6422], NFD: [0x6422], NFKC: [0x6422], NFKD: [0x6422] }, +{ source: [0x2F8C0], NFC: [0x63C5], NFD: [0x63C5], NFKC: [0x63C5], NFKD: [0x63C5] }, +{ source: [0x2F8C1], NFC: [0x63A9], NFD: [0x63A9], NFKC: [0x63A9], NFKD: [0x63A9] }, +{ source: [0x2F8C2], NFC: [0x3A2E], NFD: [0x3A2E], NFKC: [0x3A2E], NFKD: [0x3A2E] }, +{ source: [0x2F8C3], NFC: [0x6469], NFD: [0x6469], NFKC: [0x6469], NFKD: [0x6469] }, +{ source: [0x2F8C4], NFC: [0x647E], NFD: [0x647E], NFKC: [0x647E], NFKD: [0x647E] }, +{ source: [0x2F8C5], NFC: [0x649D], NFD: [0x649D], NFKC: [0x649D], NFKD: [0x649D] }, +{ source: [0x2F8C6], NFC: [0x6477], NFD: [0x6477], NFKC: [0x6477], NFKD: [0x6477] }, +{ source: [0x2F8C7], NFC: [0x3A6C], NFD: [0x3A6C], NFKC: [0x3A6C], NFKD: [0x3A6C] }, +{ source: [0x2F8C8], NFC: [0x654F], NFD: [0x654F], NFKC: [0x654F], NFKD: [0x654F] }, +{ source: [0x2F8C9], NFC: [0x656C], NFD: [0x656C], NFKC: [0x656C], NFKD: [0x656C] }, +{ source: [0x2F8CA], NFC: [0x2300A], NFD: [0x2300A], NFKC: [0x2300A], NFKD: [0x2300A] }, +{ source: [0x2F8CB], NFC: [0x65E3], NFD: [0x65E3], NFKC: [0x65E3], NFKD: [0x65E3] }, +{ source: [0x2F8CC], NFC: [0x66F8], NFD: [0x66F8], NFKC: [0x66F8], NFKD: [0x66F8] }, +{ source: [0x2F8CD], NFC: [0x6649], NFD: [0x6649], NFKC: [0x6649], NFKD: [0x6649] }, +{ source: [0x2F8CE], NFC: [0x3B19], NFD: [0x3B19], NFKC: [0x3B19], NFKD: [0x3B19] }, +{ source: [0x2F8CF], NFC: [0x6691], NFD: [0x6691], NFKC: [0x6691], NFKD: [0x6691] }, +{ source: [0x2F8D0], NFC: [0x3B08], NFD: [0x3B08], NFKC: [0x3B08], NFKD: [0x3B08] }, +{ source: [0x2F8D1], NFC: [0x3AE4], NFD: [0x3AE4], NFKC: [0x3AE4], NFKD: [0x3AE4] }, +{ source: [0x2F8D2], NFC: [0x5192], NFD: [0x5192], NFKC: [0x5192], NFKD: [0x5192] }, +{ source: [0x2F8D3], NFC: [0x5195], NFD: [0x5195], NFKC: [0x5195], NFKD: [0x5195] }, +{ source: [0x2F8D4], NFC: [0x6700], NFD: [0x6700], NFKC: [0x6700], NFKD: [0x6700] }, +{ source: [0x2F8D5], NFC: [0x669C], NFD: [0x669C], NFKC: [0x669C], NFKD: [0x669C] }, +{ source: [0x2F8D6], NFC: [0x80AD], NFD: [0x80AD], NFKC: [0x80AD], NFKD: [0x80AD] }, +{ source: [0x2F8D7], NFC: [0x43D9], NFD: [0x43D9], NFKC: [0x43D9], NFKD: [0x43D9] }, +{ source: [0x2F8D8], NFC: [0x6717], NFD: [0x6717], NFKC: [0x6717], NFKD: [0x6717] }, +{ source: [0x2F8D9], NFC: [0x671B], NFD: [0x671B], NFKC: [0x671B], NFKD: [0x671B] }, +{ source: [0x2F8DA], NFC: [0x6721], NFD: [0x6721], NFKC: [0x6721], NFKD: [0x6721] }, +{ source: [0x2F8DB], NFC: [0x675E], NFD: [0x675E], NFKC: [0x675E], NFKD: [0x675E] }, +{ source: [0x2F8DC], NFC: [0x6753], NFD: [0x6753], NFKC: [0x6753], NFKD: [0x6753] }, +{ source: [0x2F8DD], NFC: [0x233C3], NFD: [0x233C3], NFKC: [0x233C3], NFKD: [0x233C3] }, +{ source: [0x2F8DE], NFC: [0x3B49], NFD: [0x3B49], NFKC: [0x3B49], NFKD: [0x3B49] }, +{ source: [0x2F8DF], NFC: [0x67FA], NFD: [0x67FA], NFKC: [0x67FA], NFKD: [0x67FA] }, +{ source: [0x2F8E0], NFC: [0x6785], NFD: [0x6785], NFKC: [0x6785], NFKD: [0x6785] }, +{ source: [0x2F8E1], NFC: [0x6852], NFD: [0x6852], NFKC: [0x6852], NFKD: [0x6852] }, +{ source: [0x2F8E2], NFC: [0x6885], NFD: [0x6885], NFKC: [0x6885], NFKD: [0x6885] }, +{ source: [0x2F8E3], NFC: [0x2346D], NFD: [0x2346D], NFKC: [0x2346D], NFKD: [0x2346D] }, +{ source: [0x2F8E4], NFC: [0x688E], NFD: [0x688E], NFKC: [0x688E], NFKD: [0x688E] }, +{ source: [0x2F8E5], NFC: [0x681F], NFD: [0x681F], NFKC: [0x681F], NFKD: [0x681F] }, +{ source: [0x2F8E6], NFC: [0x6914], NFD: [0x6914], NFKC: [0x6914], NFKD: [0x6914] }, +{ source: [0x2F8E7], NFC: [0x3B9D], NFD: [0x3B9D], NFKC: [0x3B9D], NFKD: [0x3B9D] }, +{ source: [0x2F8E8], NFC: [0x6942], NFD: [0x6942], NFKC: [0x6942], NFKD: [0x6942] }, +{ source: [0x2F8E9], NFC: [0x69A3], NFD: [0x69A3], NFKC: [0x69A3], NFKD: [0x69A3] }, +{ source: [0x2F8EA], NFC: [0x69EA], NFD: [0x69EA], NFKC: [0x69EA], NFKD: [0x69EA] }, +{ source: [0x2F8EB], NFC: [0x6AA8], NFD: [0x6AA8], NFKC: [0x6AA8], NFKD: [0x6AA8] }, +{ source: [0x2F8EC], NFC: [0x236A3], NFD: [0x236A3], NFKC: [0x236A3], NFKD: [0x236A3] }, +{ source: [0x2F8ED], NFC: [0x6ADB], NFD: [0x6ADB], NFKC: [0x6ADB], NFKD: [0x6ADB] }, +{ source: [0x2F8EE], NFC: [0x3C18], NFD: [0x3C18], NFKC: [0x3C18], NFKD: [0x3C18] }, +{ source: [0x2F8EF], NFC: [0x6B21], NFD: [0x6B21], NFKC: [0x6B21], NFKD: [0x6B21] }, +{ source: [0x2F8F0], NFC: [0x238A7], NFD: [0x238A7], NFKC: [0x238A7], NFKD: [0x238A7] }, +{ source: [0x2F8F1], NFC: [0x6B54], NFD: [0x6B54], NFKC: [0x6B54], NFKD: [0x6B54] }, +{ source: [0x2F8F2], NFC: [0x3C4E], NFD: [0x3C4E], NFKC: [0x3C4E], NFKD: [0x3C4E] }, +{ source: [0x2F8F3], NFC: [0x6B72], NFD: [0x6B72], NFKC: [0x6B72], NFKD: [0x6B72] }, +{ source: [0x2F8F4], NFC: [0x6B9F], NFD: [0x6B9F], NFKC: [0x6B9F], NFKD: [0x6B9F] }, +{ source: [0x2F8F5], NFC: [0x6BBA], NFD: [0x6BBA], NFKC: [0x6BBA], NFKD: [0x6BBA] }, +{ source: [0x2F8F6], NFC: [0x6BBB], NFD: [0x6BBB], NFKC: [0x6BBB], NFKD: [0x6BBB] }, +{ source: [0x2F8F7], NFC: [0x23A8D], NFD: [0x23A8D], NFKC: [0x23A8D], NFKD: [0x23A8D] }, +{ source: [0x2F8F8], NFC: [0x21D0B], NFD: [0x21D0B], NFKC: [0x21D0B], NFKD: [0x21D0B] }, +{ source: [0x2F8F9], NFC: [0x23AFA], NFD: [0x23AFA], NFKC: [0x23AFA], NFKD: [0x23AFA] }, +{ source: [0x2F8FA], NFC: [0x6C4E], NFD: [0x6C4E], NFKC: [0x6C4E], NFKD: [0x6C4E] }, +{ source: [0x2F8FB], NFC: [0x23CBC], NFD: [0x23CBC], NFKC: [0x23CBC], NFKD: [0x23CBC] }, +{ source: [0x2F8FC], NFC: [0x6CBF], NFD: [0x6CBF], NFKC: [0x6CBF], NFKD: [0x6CBF] }, +{ source: [0x2F8FD], NFC: [0x6CCD], NFD: [0x6CCD], NFKC: [0x6CCD], NFKD: [0x6CCD] }, +{ source: [0x2F8FE], NFC: [0x6C67], NFD: [0x6C67], NFKC: [0x6C67], NFKD: [0x6C67] }, +{ source: [0x2F8FF], NFC: [0x6D16], NFD: [0x6D16], NFKC: [0x6D16], NFKD: [0x6D16] }, +{ source: [0x2F900], NFC: [0x6D3E], NFD: [0x6D3E], NFKC: [0x6D3E], NFKD: [0x6D3E] }, +{ source: [0x2F901], NFC: [0x6D77], NFD: [0x6D77], NFKC: [0x6D77], NFKD: [0x6D77] }, +{ source: [0x2F902], NFC: [0x6D41], NFD: [0x6D41], NFKC: [0x6D41], NFKD: [0x6D41] }, +{ source: [0x2F903], NFC: [0x6D69], NFD: [0x6D69], NFKC: [0x6D69], NFKD: [0x6D69] }, +{ source: [0x2F904], NFC: [0x6D78], NFD: [0x6D78], NFKC: [0x6D78], NFKD: [0x6D78] }, +{ source: [0x2F905], NFC: [0x6D85], NFD: [0x6D85], NFKC: [0x6D85], NFKD: [0x6D85] }, +{ source: [0x2F906], NFC: [0x23D1E], NFD: [0x23D1E], NFKC: [0x23D1E], NFKD: [0x23D1E] }, +{ source: [0x2F907], NFC: [0x6D34], NFD: [0x6D34], NFKC: [0x6D34], NFKD: [0x6D34] }, +{ source: [0x2F908], NFC: [0x6E2F], NFD: [0x6E2F], NFKC: [0x6E2F], NFKD: [0x6E2F] }, +{ source: [0x2F909], NFC: [0x6E6E], NFD: [0x6E6E], NFKC: [0x6E6E], NFKD: [0x6E6E] }, +{ source: [0x2F90A], NFC: [0x3D33], NFD: [0x3D33], NFKC: [0x3D33], NFKD: [0x3D33] }, +{ source: [0x2F90B], NFC: [0x6ECB], NFD: [0x6ECB], NFKC: [0x6ECB], NFKD: [0x6ECB] }, +{ source: [0x2F90C], NFC: [0x6EC7], NFD: [0x6EC7], NFKC: [0x6EC7], NFKD: [0x6EC7] }, +{ source: [0x2F90D], NFC: [0x23ED1], NFD: [0x23ED1], NFKC: [0x23ED1], NFKD: [0x23ED1] }, +{ source: [0x2F90E], NFC: [0x6DF9], NFD: [0x6DF9], NFKC: [0x6DF9], NFKD: [0x6DF9] }, +{ source: [0x2F90F], NFC: [0x6F6E], NFD: [0x6F6E], NFKC: [0x6F6E], NFKD: [0x6F6E] }, +{ source: [0x2F910], NFC: [0x23F5E], NFD: [0x23F5E], NFKC: [0x23F5E], NFKD: [0x23F5E] }, +{ source: [0x2F911], NFC: [0x23F8E], NFD: [0x23F8E], NFKC: [0x23F8E], NFKD: [0x23F8E] }, +{ source: [0x2F912], NFC: [0x6FC6], NFD: [0x6FC6], NFKC: [0x6FC6], NFKD: [0x6FC6] }, +{ source: [0x2F913], NFC: [0x7039], NFD: [0x7039], NFKC: [0x7039], NFKD: [0x7039] }, +{ source: [0x2F914], NFC: [0x701E], NFD: [0x701E], NFKC: [0x701E], NFKD: [0x701E] }, +{ source: [0x2F915], NFC: [0x701B], NFD: [0x701B], NFKC: [0x701B], NFKD: [0x701B] }, +{ source: [0x2F916], NFC: [0x3D96], NFD: [0x3D96], NFKC: [0x3D96], NFKD: [0x3D96] }, +{ source: [0x2F917], NFC: [0x704A], NFD: [0x704A], NFKC: [0x704A], NFKD: [0x704A] }, +{ source: [0x2F918], NFC: [0x707D], NFD: [0x707D], NFKC: [0x707D], NFKD: [0x707D] }, +{ source: [0x2F919], NFC: [0x7077], NFD: [0x7077], NFKC: [0x7077], NFKD: [0x7077] }, +{ source: [0x2F91A], NFC: [0x70AD], NFD: [0x70AD], NFKC: [0x70AD], NFKD: [0x70AD] }, +{ source: [0x2F91B], NFC: [0x20525], NFD: [0x20525], NFKC: [0x20525], NFKD: [0x20525] }, +{ source: [0x2F91C], NFC: [0x7145], NFD: [0x7145], NFKC: [0x7145], NFKD: [0x7145] }, +{ source: [0x2F91D], NFC: [0x24263], NFD: [0x24263], NFKC: [0x24263], NFKD: [0x24263] }, +{ source: [0x2F91E], NFC: [0x719C], NFD: [0x719C], NFKC: [0x719C], NFKD: [0x719C] }, +{ source: [0x2F91F], NFC: [0x243AB], NFD: [0x243AB], NFKC: [0x243AB], NFKD: [0x243AB] }, +{ source: [0x2F920], NFC: [0x7228], NFD: [0x7228], NFKC: [0x7228], NFKD: [0x7228] }, +{ source: [0x2F921], NFC: [0x7235], NFD: [0x7235], NFKC: [0x7235], NFKD: [0x7235] }, +{ source: [0x2F922], NFC: [0x7250], NFD: [0x7250], NFKC: [0x7250], NFKD: [0x7250] }, +{ source: [0x2F923], NFC: [0x24608], NFD: [0x24608], NFKC: [0x24608], NFKD: [0x24608] }, +{ source: [0x2F924], NFC: [0x7280], NFD: [0x7280], NFKC: [0x7280], NFKD: [0x7280] }, +{ source: [0x2F925], NFC: [0x7295], NFD: [0x7295], NFKC: [0x7295], NFKD: [0x7295] }, +{ source: [0x2F926], NFC: [0x24735], NFD: [0x24735], NFKC: [0x24735], NFKD: [0x24735] }, +{ source: [0x2F927], NFC: [0x24814], NFD: [0x24814], NFKC: [0x24814], NFKD: [0x24814] }, +{ source: [0x2F928], NFC: [0x737A], NFD: [0x737A], NFKC: [0x737A], NFKD: [0x737A] }, +{ source: [0x2F929], NFC: [0x738B], NFD: [0x738B], NFKC: [0x738B], NFKD: [0x738B] }, +{ source: [0x2F92A], NFC: [0x3EAC], NFD: [0x3EAC], NFKC: [0x3EAC], NFKD: [0x3EAC] }, +{ source: [0x2F92B], NFC: [0x73A5], NFD: [0x73A5], NFKC: [0x73A5], NFKD: [0x73A5] }, +{ source: [0x2F92C], NFC: [0x3EB8], NFD: [0x3EB8], NFKC: [0x3EB8], NFKD: [0x3EB8] }, +{ source: [0x2F92D], NFC: [0x3EB8], NFD: [0x3EB8], NFKC: [0x3EB8], NFKD: [0x3EB8] }, +{ source: [0x2F92E], NFC: [0x7447], NFD: [0x7447], NFKC: [0x7447], NFKD: [0x7447] }, +{ source: [0x2F92F], NFC: [0x745C], NFD: [0x745C], NFKC: [0x745C], NFKD: [0x745C] }, +{ source: [0x2F930], NFC: [0x7471], NFD: [0x7471], NFKC: [0x7471], NFKD: [0x7471] }, +{ source: [0x2F931], NFC: [0x7485], NFD: [0x7485], NFKC: [0x7485], NFKD: [0x7485] }, +{ source: [0x2F932], NFC: [0x74CA], NFD: [0x74CA], NFKC: [0x74CA], NFKD: [0x74CA] }, +{ source: [0x2F933], NFC: [0x3F1B], NFD: [0x3F1B], NFKC: [0x3F1B], NFKD: [0x3F1B] }, +{ source: [0x2F934], NFC: [0x7524], NFD: [0x7524], NFKC: [0x7524], NFKD: [0x7524] }, +{ source: [0x2F935], NFC: [0x24C36], NFD: [0x24C36], NFKC: [0x24C36], NFKD: [0x24C36] }, +{ source: [0x2F936], NFC: [0x753E], NFD: [0x753E], NFKC: [0x753E], NFKD: [0x753E] }, +{ source: [0x2F937], NFC: [0x24C92], NFD: [0x24C92], NFKC: [0x24C92], NFKD: [0x24C92] }, +{ source: [0x2F938], NFC: [0x7570], NFD: [0x7570], NFKC: [0x7570], NFKD: [0x7570] }, +{ source: [0x2F939], NFC: [0x2219F], NFD: [0x2219F], NFKC: [0x2219F], NFKD: [0x2219F] }, +{ source: [0x2F93A], NFC: [0x7610], NFD: [0x7610], NFKC: [0x7610], NFKD: [0x7610] }, +{ source: [0x2F93B], NFC: [0x24FA1], NFD: [0x24FA1], NFKC: [0x24FA1], NFKD: [0x24FA1] }, +{ source: [0x2F93C], NFC: [0x24FB8], NFD: [0x24FB8], NFKC: [0x24FB8], NFKD: [0x24FB8] }, +{ source: [0x2F93D], NFC: [0x25044], NFD: [0x25044], NFKC: [0x25044], NFKD: [0x25044] }, +{ source: [0x2F93E], NFC: [0x3FFC], NFD: [0x3FFC], NFKC: [0x3FFC], NFKD: [0x3FFC] }, +{ source: [0x2F93F], NFC: [0x4008], NFD: [0x4008], NFKC: [0x4008], NFKD: [0x4008] }, +{ source: [0x2F940], NFC: [0x76F4], NFD: [0x76F4], NFKC: [0x76F4], NFKD: [0x76F4] }, +{ source: [0x2F941], NFC: [0x250F3], NFD: [0x250F3], NFKC: [0x250F3], NFKD: [0x250F3] }, +{ source: [0x2F942], NFC: [0x250F2], NFD: [0x250F2], NFKC: [0x250F2], NFKD: [0x250F2] }, +{ source: [0x2F943], NFC: [0x25119], NFD: [0x25119], NFKC: [0x25119], NFKD: [0x25119] }, +{ source: [0x2F944], NFC: [0x25133], NFD: [0x25133], NFKC: [0x25133], NFKD: [0x25133] }, +{ source: [0x2F945], NFC: [0x771E], NFD: [0x771E], NFKC: [0x771E], NFKD: [0x771E] }, +{ source: [0x2F946], NFC: [0x771F], NFD: [0x771F], NFKC: [0x771F], NFKD: [0x771F] }, +{ source: [0x2F947], NFC: [0x771F], NFD: [0x771F], NFKC: [0x771F], NFKD: [0x771F] }, +{ source: [0x2F948], NFC: [0x774A], NFD: [0x774A], NFKC: [0x774A], NFKD: [0x774A] }, +{ source: [0x2F949], NFC: [0x4039], NFD: [0x4039], NFKC: [0x4039], NFKD: [0x4039] }, +{ source: [0x2F94A], NFC: [0x778B], NFD: [0x778B], NFKC: [0x778B], NFKD: [0x778B] }, +{ source: [0x2F94B], NFC: [0x4046], NFD: [0x4046], NFKC: [0x4046], NFKD: [0x4046] }, +{ source: [0x2F94C], NFC: [0x4096], NFD: [0x4096], NFKC: [0x4096], NFKD: [0x4096] }, +{ source: [0x2F94D], NFC: [0x2541D], NFD: [0x2541D], NFKC: [0x2541D], NFKD: [0x2541D] }, +{ source: [0x2F94E], NFC: [0x784E], NFD: [0x784E], NFKC: [0x784E], NFKD: [0x784E] }, +{ source: [0x2F94F], NFC: [0x788C], NFD: [0x788C], NFKC: [0x788C], NFKD: [0x788C] }, +{ source: [0x2F950], NFC: [0x78CC], NFD: [0x78CC], NFKC: [0x78CC], NFKD: [0x78CC] }, +{ source: [0x2F951], NFC: [0x40E3], NFD: [0x40E3], NFKC: [0x40E3], NFKD: [0x40E3] }, +{ source: [0x2F952], NFC: [0x25626], NFD: [0x25626], NFKC: [0x25626], NFKD: [0x25626] }, +{ source: [0x2F953], NFC: [0x7956], NFD: [0x7956], NFKC: [0x7956], NFKD: [0x7956] }, +{ source: [0x2F954], NFC: [0x2569A], NFD: [0x2569A], NFKC: [0x2569A], NFKD: [0x2569A] }, +{ source: [0x2F955], NFC: [0x256C5], NFD: [0x256C5], NFKC: [0x256C5], NFKD: [0x256C5] }, +{ source: [0x2F956], NFC: [0x798F], NFD: [0x798F], NFKC: [0x798F], NFKD: [0x798F] }, +{ source: [0x2F957], NFC: [0x79EB], NFD: [0x79EB], NFKC: [0x79EB], NFKD: [0x79EB] }, +{ source: [0x2F958], NFC: [0x412F], NFD: [0x412F], NFKC: [0x412F], NFKD: [0x412F] }, +{ source: [0x2F959], NFC: [0x7A40], NFD: [0x7A40], NFKC: [0x7A40], NFKD: [0x7A40] }, +{ source: [0x2F95A], NFC: [0x7A4A], NFD: [0x7A4A], NFKC: [0x7A4A], NFKD: [0x7A4A] }, +{ source: [0x2F95B], NFC: [0x7A4F], NFD: [0x7A4F], NFKC: [0x7A4F], NFKD: [0x7A4F] }, +{ source: [0x2F95C], NFC: [0x2597C], NFD: [0x2597C], NFKC: [0x2597C], NFKD: [0x2597C] }, +{ source: [0x2F95D], NFC: [0x25AA7], NFD: [0x25AA7], NFKC: [0x25AA7], NFKD: [0x25AA7] }, +{ source: [0x2F95E], NFC: [0x25AA7], NFD: [0x25AA7], NFKC: [0x25AA7], NFKD: [0x25AA7] }, +{ source: [0x2F95F], NFC: [0x7AEE], NFD: [0x7AEE], NFKC: [0x7AEE], NFKD: [0x7AEE] }, +{ source: [0x2F960], NFC: [0x4202], NFD: [0x4202], NFKC: [0x4202], NFKD: [0x4202] }, +{ source: [0x2F961], NFC: [0x25BAB], NFD: [0x25BAB], NFKC: [0x25BAB], NFKD: [0x25BAB] }, +{ source: [0x2F962], NFC: [0x7BC6], NFD: [0x7BC6], NFKC: [0x7BC6], NFKD: [0x7BC6] }, +{ source: [0x2F963], NFC: [0x7BC9], NFD: [0x7BC9], NFKC: [0x7BC9], NFKD: [0x7BC9] }, +{ source: [0x2F964], NFC: [0x4227], NFD: [0x4227], NFKC: [0x4227], NFKD: [0x4227] }, +{ source: [0x2F965], NFC: [0x25C80], NFD: [0x25C80], NFKC: [0x25C80], NFKD: [0x25C80] }, +{ source: [0x2F966], NFC: [0x7CD2], NFD: [0x7CD2], NFKC: [0x7CD2], NFKD: [0x7CD2] }, +{ source: [0x2F967], NFC: [0x42A0], NFD: [0x42A0], NFKC: [0x42A0], NFKD: [0x42A0] }, +{ source: [0x2F968], NFC: [0x7CE8], NFD: [0x7CE8], NFKC: [0x7CE8], NFKD: [0x7CE8] }, +{ source: [0x2F969], NFC: [0x7CE3], NFD: [0x7CE3], NFKC: [0x7CE3], NFKD: [0x7CE3] }, +{ source: [0x2F96A], NFC: [0x7D00], NFD: [0x7D00], NFKC: [0x7D00], NFKD: [0x7D00] }, +{ source: [0x2F96B], NFC: [0x25F86], NFD: [0x25F86], NFKC: [0x25F86], NFKD: [0x25F86] }, +{ source: [0x2F96C], NFC: [0x7D63], NFD: [0x7D63], NFKC: [0x7D63], NFKD: [0x7D63] }, +{ source: [0x2F96D], NFC: [0x4301], NFD: [0x4301], NFKC: [0x4301], NFKD: [0x4301] }, +{ source: [0x2F96E], NFC: [0x7DC7], NFD: [0x7DC7], NFKC: [0x7DC7], NFKD: [0x7DC7] }, +{ source: [0x2F96F], NFC: [0x7E02], NFD: [0x7E02], NFKC: [0x7E02], NFKD: [0x7E02] }, +{ source: [0x2F970], NFC: [0x7E45], NFD: [0x7E45], NFKC: [0x7E45], NFKD: [0x7E45] }, +{ source: [0x2F971], NFC: [0x4334], NFD: [0x4334], NFKC: [0x4334], NFKD: [0x4334] }, +{ source: [0x2F972], NFC: [0x26228], NFD: [0x26228], NFKC: [0x26228], NFKD: [0x26228] }, +{ source: [0x2F973], NFC: [0x26247], NFD: [0x26247], NFKC: [0x26247], NFKD: [0x26247] }, +{ source: [0x2F974], NFC: [0x4359], NFD: [0x4359], NFKC: [0x4359], NFKD: [0x4359] }, +{ source: [0x2F975], NFC: [0x262D9], NFD: [0x262D9], NFKC: [0x262D9], NFKD: [0x262D9] }, +{ source: [0x2F976], NFC: [0x7F7A], NFD: [0x7F7A], NFKC: [0x7F7A], NFKD: [0x7F7A] }, +{ source: [0x2F977], NFC: [0x2633E], NFD: [0x2633E], NFKC: [0x2633E], NFKD: [0x2633E] }, +{ source: [0x2F978], NFC: [0x7F95], NFD: [0x7F95], NFKC: [0x7F95], NFKD: [0x7F95] }, +{ source: [0x2F979], NFC: [0x7FFA], NFD: [0x7FFA], NFKC: [0x7FFA], NFKD: [0x7FFA] }, +{ source: [0x2F97A], NFC: [0x8005], NFD: [0x8005], NFKC: [0x8005], NFKD: [0x8005] }, +{ source: [0x2F97B], NFC: [0x264DA], NFD: [0x264DA], NFKC: [0x264DA], NFKD: [0x264DA] }, +{ source: [0x2F97C], NFC: [0x26523], NFD: [0x26523], NFKC: [0x26523], NFKD: [0x26523] }, +{ source: [0x2F97D], NFC: [0x8060], NFD: [0x8060], NFKC: [0x8060], NFKD: [0x8060] }, +{ source: [0x2F97E], NFC: [0x265A8], NFD: [0x265A8], NFKC: [0x265A8], NFKD: [0x265A8] }, +{ source: [0x2F97F], NFC: [0x8070], NFD: [0x8070], NFKC: [0x8070], NFKD: [0x8070] }, +{ source: [0x2F980], NFC: [0x2335F], NFD: [0x2335F], NFKC: [0x2335F], NFKD: [0x2335F] }, +{ source: [0x2F981], NFC: [0x43D5], NFD: [0x43D5], NFKC: [0x43D5], NFKD: [0x43D5] }, +{ source: [0x2F982], NFC: [0x80B2], NFD: [0x80B2], NFKC: [0x80B2], NFKD: [0x80B2] }, +{ source: [0x2F983], NFC: [0x8103], NFD: [0x8103], NFKC: [0x8103], NFKD: [0x8103] }, +{ source: [0x2F984], NFC: [0x440B], NFD: [0x440B], NFKC: [0x440B], NFKD: [0x440B] }, +{ source: [0x2F985], NFC: [0x813E], NFD: [0x813E], NFKC: [0x813E], NFKD: [0x813E] }, +{ source: [0x2F986], NFC: [0x5AB5], NFD: [0x5AB5], NFKC: [0x5AB5], NFKD: [0x5AB5] }, +{ source: [0x2F987], NFC: [0x267A7], NFD: [0x267A7], NFKC: [0x267A7], NFKD: [0x267A7] }, +{ source: [0x2F988], NFC: [0x267B5], NFD: [0x267B5], NFKC: [0x267B5], NFKD: [0x267B5] }, +{ source: [0x2F989], NFC: [0x23393], NFD: [0x23393], NFKC: [0x23393], NFKD: [0x23393] }, +{ source: [0x2F98A], NFC: [0x2339C], NFD: [0x2339C], NFKC: [0x2339C], NFKD: [0x2339C] }, +{ source: [0x2F98B], NFC: [0x8201], NFD: [0x8201], NFKC: [0x8201], NFKD: [0x8201] }, +{ source: [0x2F98C], NFC: [0x8204], NFD: [0x8204], NFKC: [0x8204], NFKD: [0x8204] }, +{ source: [0x2F98D], NFC: [0x8F9E], NFD: [0x8F9E], NFKC: [0x8F9E], NFKD: [0x8F9E] }, +{ source: [0x2F98E], NFC: [0x446B], NFD: [0x446B], NFKC: [0x446B], NFKD: [0x446B] }, +{ source: [0x2F98F], NFC: [0x8291], NFD: [0x8291], NFKC: [0x8291], NFKD: [0x8291] }, +{ source: [0x2F990], NFC: [0x828B], NFD: [0x828B], NFKC: [0x828B], NFKD: [0x828B] }, +{ source: [0x2F991], NFC: [0x829D], NFD: [0x829D], NFKC: [0x829D], NFKD: [0x829D] }, +{ source: [0x2F992], NFC: [0x52B3], NFD: [0x52B3], NFKC: [0x52B3], NFKD: [0x52B3] }, +{ source: [0x2F993], NFC: [0x82B1], NFD: [0x82B1], NFKC: [0x82B1], NFKD: [0x82B1] }, +{ source: [0x2F994], NFC: [0x82B3], NFD: [0x82B3], NFKC: [0x82B3], NFKD: [0x82B3] }, +{ source: [0x2F995], NFC: [0x82BD], NFD: [0x82BD], NFKC: [0x82BD], NFKD: [0x82BD] }, +{ source: [0x2F996], NFC: [0x82E6], NFD: [0x82E6], NFKC: [0x82E6], NFKD: [0x82E6] }, +{ source: [0x2F997], NFC: [0x26B3C], NFD: [0x26B3C], NFKC: [0x26B3C], NFKD: [0x26B3C] }, +{ source: [0x2F998], NFC: [0x82E5], NFD: [0x82E5], NFKC: [0x82E5], NFKD: [0x82E5] }, +{ source: [0x2F999], NFC: [0x831D], NFD: [0x831D], NFKC: [0x831D], NFKD: [0x831D] }, +{ source: [0x2F99A], NFC: [0x8363], NFD: [0x8363], NFKC: [0x8363], NFKD: [0x8363] }, +{ source: [0x2F99B], NFC: [0x83AD], NFD: [0x83AD], NFKC: [0x83AD], NFKD: [0x83AD] }, +{ source: [0x2F99C], NFC: [0x8323], NFD: [0x8323], NFKC: [0x8323], NFKD: [0x8323] }, +{ source: [0x2F99D], NFC: [0x83BD], NFD: [0x83BD], NFKC: [0x83BD], NFKD: [0x83BD] }, +{ source: [0x2F99E], NFC: [0x83E7], NFD: [0x83E7], NFKC: [0x83E7], NFKD: [0x83E7] }, +{ source: [0x2F99F], NFC: [0x8457], NFD: [0x8457], NFKC: [0x8457], NFKD: [0x8457] }, +{ source: [0x2F9A0], NFC: [0x8353], NFD: [0x8353], NFKC: [0x8353], NFKD: [0x8353] }, +{ source: [0x2F9A1], NFC: [0x83CA], NFD: [0x83CA], NFKC: [0x83CA], NFKD: [0x83CA] }, +{ source: [0x2F9A2], NFC: [0x83CC], NFD: [0x83CC], NFKC: [0x83CC], NFKD: [0x83CC] }, +{ source: [0x2F9A3], NFC: [0x83DC], NFD: [0x83DC], NFKC: [0x83DC], NFKD: [0x83DC] }, +{ source: [0x2F9A4], NFC: [0x26C36], NFD: [0x26C36], NFKC: [0x26C36], NFKD: [0x26C36] }, +{ source: [0x2F9A5], NFC: [0x26D6B], NFD: [0x26D6B], NFKC: [0x26D6B], NFKD: [0x26D6B] }, +{ source: [0x2F9A6], NFC: [0x26CD5], NFD: [0x26CD5], NFKC: [0x26CD5], NFKD: [0x26CD5] }, +{ source: [0x2F9A7], NFC: [0x452B], NFD: [0x452B], NFKC: [0x452B], NFKD: [0x452B] }, +{ source: [0x2F9A8], NFC: [0x84F1], NFD: [0x84F1], NFKC: [0x84F1], NFKD: [0x84F1] }, +{ source: [0x2F9A9], NFC: [0x84F3], NFD: [0x84F3], NFKC: [0x84F3], NFKD: [0x84F3] }, +{ source: [0x2F9AA], NFC: [0x8516], NFD: [0x8516], NFKC: [0x8516], NFKD: [0x8516] }, +{ source: [0x2F9AB], NFC: [0x273CA], NFD: [0x273CA], NFKC: [0x273CA], NFKD: [0x273CA] }, +{ source: [0x2F9AC], NFC: [0x8564], NFD: [0x8564], NFKC: [0x8564], NFKD: [0x8564] }, +{ source: [0x2F9AD], NFC: [0x26F2C], NFD: [0x26F2C], NFKC: [0x26F2C], NFKD: [0x26F2C] }, +{ source: [0x2F9AE], NFC: [0x455D], NFD: [0x455D], NFKC: [0x455D], NFKD: [0x455D] }, +{ source: [0x2F9AF], NFC: [0x4561], NFD: [0x4561], NFKC: [0x4561], NFKD: [0x4561] }, +{ source: [0x2F9B0], NFC: [0x26FB1], NFD: [0x26FB1], NFKC: [0x26FB1], NFKD: [0x26FB1] }, +{ source: [0x2F9B1], NFC: [0x270D2], NFD: [0x270D2], NFKC: [0x270D2], NFKD: [0x270D2] }, +{ source: [0x2F9B2], NFC: [0x456B], NFD: [0x456B], NFKC: [0x456B], NFKD: [0x456B] }, +{ source: [0x2F9B3], NFC: [0x8650], NFD: [0x8650], NFKC: [0x8650], NFKD: [0x8650] }, +{ source: [0x2F9B4], NFC: [0x865C], NFD: [0x865C], NFKC: [0x865C], NFKD: [0x865C] }, +{ source: [0x2F9B5], NFC: [0x8667], NFD: [0x8667], NFKC: [0x8667], NFKD: [0x8667] }, +{ source: [0x2F9B6], NFC: [0x8669], NFD: [0x8669], NFKC: [0x8669], NFKD: [0x8669] }, +{ source: [0x2F9B7], NFC: [0x86A9], NFD: [0x86A9], NFKC: [0x86A9], NFKD: [0x86A9] }, +{ source: [0x2F9B8], NFC: [0x8688], NFD: [0x8688], NFKC: [0x8688], NFKD: [0x8688] }, +{ source: [0x2F9B9], NFC: [0x870E], NFD: [0x870E], NFKC: [0x870E], NFKD: [0x870E] }, +{ source: [0x2F9BA], NFC: [0x86E2], NFD: [0x86E2], NFKC: [0x86E2], NFKD: [0x86E2] }, +{ source: [0x2F9BB], NFC: [0x8779], NFD: [0x8779], NFKC: [0x8779], NFKD: [0x8779] }, +{ source: [0x2F9BC], NFC: [0x8728], NFD: [0x8728], NFKC: [0x8728], NFKD: [0x8728] }, +{ source: [0x2F9BD], NFC: [0x876B], NFD: [0x876B], NFKC: [0x876B], NFKD: [0x876B] }, +{ source: [0x2F9BE], NFC: [0x8786], NFD: [0x8786], NFKC: [0x8786], NFKD: [0x8786] }, +{ source: [0x2F9BF], NFC: [0x45D7], NFD: [0x45D7], NFKC: [0x45D7], NFKD: [0x45D7] }, +{ source: [0x2F9C0], NFC: [0x87E1], NFD: [0x87E1], NFKC: [0x87E1], NFKD: [0x87E1] }, +{ source: [0x2F9C1], NFC: [0x8801], NFD: [0x8801], NFKC: [0x8801], NFKD: [0x8801] }, +{ source: [0x2F9C2], NFC: [0x45F9], NFD: [0x45F9], NFKC: [0x45F9], NFKD: [0x45F9] }, +{ source: [0x2F9C3], NFC: [0x8860], NFD: [0x8860], NFKC: [0x8860], NFKD: [0x8860] }, +{ source: [0x2F9C4], NFC: [0x8863], NFD: [0x8863], NFKC: [0x8863], NFKD: [0x8863] }, +{ source: [0x2F9C5], NFC: [0x27667], NFD: [0x27667], NFKC: [0x27667], NFKD: [0x27667] }, +{ source: [0x2F9C6], NFC: [0x88D7], NFD: [0x88D7], NFKC: [0x88D7], NFKD: [0x88D7] }, +{ source: [0x2F9C7], NFC: [0x88DE], NFD: [0x88DE], NFKC: [0x88DE], NFKD: [0x88DE] }, +{ source: [0x2F9C8], NFC: [0x4635], NFD: [0x4635], NFKC: [0x4635], NFKD: [0x4635] }, +{ source: [0x2F9C9], NFC: [0x88FA], NFD: [0x88FA], NFKC: [0x88FA], NFKD: [0x88FA] }, +{ source: [0x2F9CA], NFC: [0x34BB], NFD: [0x34BB], NFKC: [0x34BB], NFKD: [0x34BB] }, +{ source: [0x2F9CB], NFC: [0x278AE], NFD: [0x278AE], NFKC: [0x278AE], NFKD: [0x278AE] }, +{ source: [0x2F9CC], NFC: [0x27966], NFD: [0x27966], NFKC: [0x27966], NFKD: [0x27966] }, +{ source: [0x2F9CD], NFC: [0x46BE], NFD: [0x46BE], NFKC: [0x46BE], NFKD: [0x46BE] }, +{ source: [0x2F9CE], NFC: [0x46C7], NFD: [0x46C7], NFKC: [0x46C7], NFKD: [0x46C7] }, +{ source: [0x2F9CF], NFC: [0x8AA0], NFD: [0x8AA0], NFKC: [0x8AA0], NFKD: [0x8AA0] }, +{ source: [0x2F9D0], NFC: [0x8AED], NFD: [0x8AED], NFKC: [0x8AED], NFKD: [0x8AED] }, +{ source: [0x2F9D1], NFC: [0x8B8A], NFD: [0x8B8A], NFKC: [0x8B8A], NFKD: [0x8B8A] }, +{ source: [0x2F9D2], NFC: [0x8C55], NFD: [0x8C55], NFKC: [0x8C55], NFKD: [0x8C55] }, +{ source: [0x2F9D3], NFC: [0x27CA8], NFD: [0x27CA8], NFKC: [0x27CA8], NFKD: [0x27CA8] }, +{ source: [0x2F9D4], NFC: [0x8CAB], NFD: [0x8CAB], NFKC: [0x8CAB], NFKD: [0x8CAB] }, +{ source: [0x2F9D5], NFC: [0x8CC1], NFD: [0x8CC1], NFKC: [0x8CC1], NFKD: [0x8CC1] }, +{ source: [0x2F9D6], NFC: [0x8D1B], NFD: [0x8D1B], NFKC: [0x8D1B], NFKD: [0x8D1B] }, +{ source: [0x2F9D7], NFC: [0x8D77], NFD: [0x8D77], NFKC: [0x8D77], NFKD: [0x8D77] }, +{ source: [0x2F9D8], NFC: [0x27F2F], NFD: [0x27F2F], NFKC: [0x27F2F], NFKD: [0x27F2F] }, +{ source: [0x2F9D9], NFC: [0x20804], NFD: [0x20804], NFKC: [0x20804], NFKD: [0x20804] }, +{ source: [0x2F9DA], NFC: [0x8DCB], NFD: [0x8DCB], NFKC: [0x8DCB], NFKD: [0x8DCB] }, +{ source: [0x2F9DB], NFC: [0x8DBC], NFD: [0x8DBC], NFKC: [0x8DBC], NFKD: [0x8DBC] }, +{ source: [0x2F9DC], NFC: [0x8DF0], NFD: [0x8DF0], NFKC: [0x8DF0], NFKD: [0x8DF0] }, +{ source: [0x2F9DD], NFC: [0x208DE], NFD: [0x208DE], NFKC: [0x208DE], NFKD: [0x208DE] }, +{ source: [0x2F9DE], NFC: [0x8ED4], NFD: [0x8ED4], NFKC: [0x8ED4], NFKD: [0x8ED4] }, +{ source: [0x2F9DF], NFC: [0x8F38], NFD: [0x8F38], NFKC: [0x8F38], NFKD: [0x8F38] }, +{ source: [0x2F9E0], NFC: [0x285D2], NFD: [0x285D2], NFKC: [0x285D2], NFKD: [0x285D2] }, +{ source: [0x2F9E1], NFC: [0x285ED], NFD: [0x285ED], NFKC: [0x285ED], NFKD: [0x285ED] }, +{ source: [0x2F9E2], NFC: [0x9094], NFD: [0x9094], NFKC: [0x9094], NFKD: [0x9094] }, +{ source: [0x2F9E3], NFC: [0x90F1], NFD: [0x90F1], NFKC: [0x90F1], NFKD: [0x90F1] }, +{ source: [0x2F9E4], NFC: [0x9111], NFD: [0x9111], NFKC: [0x9111], NFKD: [0x9111] }, +{ source: [0x2F9E5], NFC: [0x2872E], NFD: [0x2872E], NFKC: [0x2872E], NFKD: [0x2872E] }, +{ source: [0x2F9E6], NFC: [0x911B], NFD: [0x911B], NFKC: [0x911B], NFKD: [0x911B] }, +{ source: [0x2F9E7], NFC: [0x9238], NFD: [0x9238], NFKC: [0x9238], NFKD: [0x9238] }, +{ source: [0x2F9E8], NFC: [0x92D7], NFD: [0x92D7], NFKC: [0x92D7], NFKD: [0x92D7] }, +{ source: [0x2F9E9], NFC: [0x92D8], NFD: [0x92D8], NFKC: [0x92D8], NFKD: [0x92D8] }, +{ source: [0x2F9EA], NFC: [0x927C], NFD: [0x927C], NFKC: [0x927C], NFKD: [0x927C] }, +{ source: [0x2F9EB], NFC: [0x93F9], NFD: [0x93F9], NFKC: [0x93F9], NFKD: [0x93F9] }, +{ source: [0x2F9EC], NFC: [0x9415], NFD: [0x9415], NFKC: [0x9415], NFKD: [0x9415] }, +{ source: [0x2F9ED], NFC: [0x28BFA], NFD: [0x28BFA], NFKC: [0x28BFA], NFKD: [0x28BFA] }, +{ source: [0x2F9EE], NFC: [0x958B], NFD: [0x958B], NFKC: [0x958B], NFKD: [0x958B] }, +{ source: [0x2F9EF], NFC: [0x4995], NFD: [0x4995], NFKC: [0x4995], NFKD: [0x4995] }, +{ source: [0x2F9F0], NFC: [0x95B7], NFD: [0x95B7], NFKC: [0x95B7], NFKD: [0x95B7] }, +{ source: [0x2F9F1], NFC: [0x28D77], NFD: [0x28D77], NFKC: [0x28D77], NFKD: [0x28D77] }, +{ source: [0x2F9F2], NFC: [0x49E6], NFD: [0x49E6], NFKC: [0x49E6], NFKD: [0x49E6] }, +{ source: [0x2F9F3], NFC: [0x96C3], NFD: [0x96C3], NFKC: [0x96C3], NFKD: [0x96C3] }, +{ source: [0x2F9F4], NFC: [0x5DB2], NFD: [0x5DB2], NFKC: [0x5DB2], NFKD: [0x5DB2] }, +{ source: [0x2F9F5], NFC: [0x9723], NFD: [0x9723], NFKC: [0x9723], NFKD: [0x9723] }, +{ source: [0x2F9F6], NFC: [0x29145], NFD: [0x29145], NFKC: [0x29145], NFKD: [0x29145] }, +{ source: [0x2F9F7], NFC: [0x2921A], NFD: [0x2921A], NFKC: [0x2921A], NFKD: [0x2921A] }, +{ source: [0x2F9F8], NFC: [0x4A6E], NFD: [0x4A6E], NFKC: [0x4A6E], NFKD: [0x4A6E] }, +{ source: [0x2F9F9], NFC: [0x4A76], NFD: [0x4A76], NFKC: [0x4A76], NFKD: [0x4A76] }, +{ source: [0x2F9FA], NFC: [0x97E0], NFD: [0x97E0], NFKC: [0x97E0], NFKD: [0x97E0] }, +{ source: [0x2F9FB], NFC: [0x2940A], NFD: [0x2940A], NFKC: [0x2940A], NFKD: [0x2940A] }, +{ source: [0x2F9FC], NFC: [0x4AB2], NFD: [0x4AB2], NFKC: [0x4AB2], NFKD: [0x4AB2] }, +{ source: [0x2F9FD], NFC: [0x29496], NFD: [0x29496], NFKC: [0x29496], NFKD: [0x29496] }, +{ source: [0x2F9FE], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] }, +{ source: [0x2F9FF], NFC: [0x980B], NFD: [0x980B], NFKC: [0x980B], NFKD: [0x980B] }, +{ source: [0x2FA00], NFC: [0x9829], NFD: [0x9829], NFKC: [0x9829], NFKD: [0x9829] }, +{ source: [0x2FA01], NFC: [0x295B6], NFD: [0x295B6], NFKC: [0x295B6], NFKD: [0x295B6] }, +{ source: [0x2FA02], NFC: [0x98E2], NFD: [0x98E2], NFKC: [0x98E2], NFKD: [0x98E2] }, +{ source: [0x2FA03], NFC: [0x4B33], NFD: [0x4B33], NFKC: [0x4B33], NFKD: [0x4B33] }, +{ source: [0x2FA04], NFC: [0x9929], NFD: [0x9929], NFKC: [0x9929], NFKD: [0x9929] }, +{ source: [0x2FA05], NFC: [0x99A7], NFD: [0x99A7], NFKC: [0x99A7], NFKD: [0x99A7] }, +{ source: [0x2FA06], NFC: [0x99C2], NFD: [0x99C2], NFKC: [0x99C2], NFKD: [0x99C2] }, +{ source: [0x2FA07], NFC: [0x99FE], NFD: [0x99FE], NFKC: [0x99FE], NFKD: [0x99FE] }, +{ source: [0x2FA08], NFC: [0x4BCE], NFD: [0x4BCE], NFKC: [0x4BCE], NFKD: [0x4BCE] }, +{ source: [0x2FA09], NFC: [0x29B30], NFD: [0x29B30], NFKC: [0x29B30], NFKD: [0x29B30] }, +{ source: [0x2FA0A], NFC: [0x9B12], NFD: [0x9B12], NFKC: [0x9B12], NFKD: [0x9B12] }, +{ source: [0x2FA0B], NFC: [0x9C40], NFD: [0x9C40], NFKC: [0x9C40], NFKD: [0x9C40] }, +{ source: [0x2FA0C], NFC: [0x9CFD], NFD: [0x9CFD], NFKC: [0x9CFD], NFKD: [0x9CFD] }, +{ source: [0x2FA0D], NFC: [0x4CCE], NFD: [0x4CCE], NFKC: [0x4CCE], NFKD: [0x4CCE] }, +{ source: [0x2FA0E], NFC: [0x4CED], NFD: [0x4CED], NFKC: [0x4CED], NFKD: [0x4CED] }, +{ source: [0x2FA0F], NFC: [0x9D67], NFD: [0x9D67], NFKC: [0x9D67], NFKD: [0x9D67] }, +{ source: [0x2FA10], NFC: [0x2A0CE], NFD: [0x2A0CE], NFKC: [0x2A0CE], NFKD: [0x2A0CE] }, +{ source: [0x2FA11], NFC: [0x4CF8], NFD: [0x4CF8], NFKC: [0x4CF8], NFKD: [0x4CF8] }, +{ source: [0x2FA12], NFC: [0x2A105], NFD: [0x2A105], NFKC: [0x2A105], NFKD: [0x2A105] }, +{ source: [0x2FA13], NFC: [0x2A20E], NFD: [0x2A20E], NFKC: [0x2A20E], NFKD: [0x2A20E] }, +{ source: [0x2FA14], NFC: [0x2A291], NFD: [0x2A291], NFKC: [0x2A291], NFKD: [0x2A291] }, +{ source: [0x2FA15], NFC: [0x9EBB], NFD: [0x9EBB], NFKC: [0x9EBB], NFKD: [0x9EBB] }, +{ source: [0x2FA16], NFC: [0x4D56], NFD: [0x4D56], NFKC: [0x4D56], NFKD: [0x4D56] }, +{ source: [0x2FA17], NFC: [0x9EF9], NFD: [0x9EF9], NFKC: [0x9EF9], NFKD: [0x9EF9] }, +{ source: [0x2FA18], NFC: [0x9EFE], NFD: [0x9EFE], NFKC: [0x9EFE], NFKD: [0x9EFE] }, +{ source: [0x2FA19], NFC: [0x9F05], NFD: [0x9F05], NFKC: [0x9F05], NFKD: [0x9F05] }, +{ source: [0x2FA1A], NFC: [0x9F0F], NFD: [0x9F0F], NFKC: [0x9F0F], NFKD: [0x9F0F] }, +{ source: [0x2FA1B], NFC: [0x9F16], NFD: [0x9F16], NFKC: [0x9F16], NFKD: [0x9F16] }, +{ source: [0x2FA1C], NFC: [0x9F3B], NFD: [0x9F3B], NFKC: [0x9F3B], NFKD: [0x9F3B] }, +{ source: [0x2FA1D], NFC: [0x2A600], NFD: [0x2A600], NFKC: [0x2A600], NFKD: [0x2A600] } +]; +/* Part2 # Canonical Order Test */ +var tests_part2 = [ +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0300, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0300, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0301, 0x0062], NFC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0301, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0302, 0x0062], NFC: [0x00E0, 0x05AE, 0x0302, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0302, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0302, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0302, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0302, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EA7, 0x05AE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0302, 0x0300, 0x0315, 0x0062], NFKC: [0x1EA7, 0x05AE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0302, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0303, 0x0062], NFC: [0x00E0, 0x05AE, 0x0303, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0303, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0303, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0303, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0303, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E3, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0303, 0x0300, 0x0315, 0x0062], NFKC: [0x00E3, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0303, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0304, 0x0062], NFC: [0x00E0, 0x05AE, 0x0304, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0304, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0304, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0304, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0304, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0101, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0304, 0x0300, 0x0315, 0x0062], NFKC: [0x0101, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0304, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0305, 0x0062], NFC: [0x00E0, 0x05AE, 0x0305, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0305, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0305, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0305, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0305, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0305, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0306, 0x0062], NFC: [0x00E0, 0x05AE, 0x0306, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0306, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0306, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0306, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0306, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EB1, 0x05AE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0306, 0x0300, 0x0315, 0x0062], NFKC: [0x1EB1, 0x05AE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0306, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0307, 0x0062], NFC: [0x00E0, 0x05AE, 0x0307, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0307, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0307, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0307, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0307, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0227, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0307, 0x0300, 0x0315, 0x0062], NFKC: [0x0227, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0307, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0308, 0x0062], NFC: [0x00E0, 0x05AE, 0x0308, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0308, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0308, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E4, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0308, 0x0300, 0x0315, 0x0062], NFKC: [0x00E4, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0308, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0309, 0x0062], NFC: [0x00E0, 0x05AE, 0x0309, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0309, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0309, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0309, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0309, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x1EA3, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0309, 0x0300, 0x0315, 0x0062], NFKC: [0x1EA3, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0309, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030A, 0x0062], NFC: [0x00E0, 0x05AE, 0x030A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E5, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030A, 0x0300, 0x0315, 0x0062], NFKC: [0x00E5, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030B, 0x0062], NFC: [0x00E0, 0x05AE, 0x030B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030C, 0x0062], NFC: [0x00E0, 0x05AE, 0x030C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x01CE, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030C, 0x0300, 0x0315, 0x0062], NFKC: [0x01CE, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030D, 0x0062], NFC: [0x00E0, 0x05AE, 0x030D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030E, 0x0062], NFC: [0x00E0, 0x05AE, 0x030E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x030F, 0x0062], NFC: [0x00E0, 0x05AE, 0x030F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x030F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x030F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x030F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x030F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0201, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x030F, 0x0300, 0x0315, 0x0062], NFKC: [0x0201, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x030F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0310, 0x0062], NFC: [0x00E0, 0x05AE, 0x0310, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0310, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0310, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0310, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0310, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0310, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0311, 0x0062], NFC: [0x00E0, 0x05AE, 0x0311, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0311, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0311, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0311, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0311, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0203, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0311, 0x0300, 0x0315, 0x0062], NFKC: [0x0203, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0311, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0312, 0x0062], NFC: [0x00E0, 0x05AE, 0x0312, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0312, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0312, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0312, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0312, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0312, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0313, 0x0062], NFC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0313, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0314, 0x0062], NFC: [0x00E0, 0x05AE, 0x0314, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0314, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0314, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0314, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0314, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0314, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x0315, 0x0062], NFC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x0315, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0316, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0316, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0317, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0317, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0317, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0317, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0318, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0318, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0318, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0318, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0319, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0319, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0319, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0319, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x031A, 0x0062], NFC: [0x00E0, 0x0315, 0x031A, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x031A, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x031A, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x031A, 0x035C, 0x0062] }, +{ source: [0x0061, 0x031A, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x031A, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x031A, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x031A, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x031A, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x031B, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x031B, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x031F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x031F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x031F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x031F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0320, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0320, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0320, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0320, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0321, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0321, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0322, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0322, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0322, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0322, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0323, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0323, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0323, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x1EA1, 0x302A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0323, 0x0316, 0x059A, 0x0062], NFKC: [0x1EA1, 0x302A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0323, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0324, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0324, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0324, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0324, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0325, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0325, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0325, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x1E01, 0x302A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0325, 0x0316, 0x059A, 0x0062], NFKC: [0x1E01, 0x302A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0325, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0326, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0326, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0326, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0326, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0327, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0327, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0327, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0327, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x0328, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x0328, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0328, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0105, 0x0F74, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0328, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0105, 0x0F74, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0328, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0329, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0329, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0329, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0329, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x032F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x032F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x032F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x032F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0330, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0330, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0330, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0330, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0331, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0331, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0331, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0331, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0332, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0332, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0332, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0332, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0333, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0333, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0333, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0333, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0334, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x0335, 0x0062], NFC: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0335, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0335, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0335, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x0336, 0x0062], NFC: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0336, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0336, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0336, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x0337, 0x0062], NFC: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0337, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0337, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0337, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x0338, 0x0062], NFC: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x0338, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0338, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x0338, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0339, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0339, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0339, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0339, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x033A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x033A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x033A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x033A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x033B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x033B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x033B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x033B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x033C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x033C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x033C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x033C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033D, 0x0062], NFC: [0x00E0, 0x05AE, 0x033D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x033D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033E, 0x0062], NFC: [0x00E0, 0x05AE, 0x033E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x033E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x033F, 0x0062], NFC: [0x00E0, 0x05AE, 0x033F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x033F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x033F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x033F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x033F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x033F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0340, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0340, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0341, 0x0062], NFC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0301, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0341, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E1, 0x05AE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0342, 0x0062], NFC: [0x00E0, 0x05AE, 0x0342, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0342, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0342, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0342, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0342, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0342, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0343, 0x0062], NFC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0313, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0313, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0343, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0313, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0344, 0x0062], NFC: [0x00E0, 0x05AE, 0x0308, 0x0301, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0301, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0308, 0x0301, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0308, 0x0301, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0344, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x00E4, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0308, 0x0301, 0x0300, 0x0315, 0x0062], NFKC: [0x00E4, 0x05AE, 0x0301, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0308, 0x0301, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x0345, 0x0062], NFC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0345, 0x0345, 0x035D, 0x0062], NFC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKC: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062], NFKD: [0x0061, 0x035D, 0x0345, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0346, 0x0062], NFC: [0x00E0, 0x05AE, 0x0346, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0346, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0346, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0346, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0346, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0346, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0347, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0347, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0347, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0347, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0348, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0348, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0348, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0348, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0349, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0349, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0349, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0349, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034A, 0x0062], NFC: [0x00E0, 0x05AE, 0x034A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x034A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034B, 0x0062], NFC: [0x00E0, 0x05AE, 0x034B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x034B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x034C, 0x0062], NFC: [0x00E0, 0x05AE, 0x034C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x034C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x034C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x034C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x034C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x034C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x034D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x034D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x034D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x034D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x034E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x034E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x034E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x034E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0350, 0x0062], NFC: [0x00E0, 0x05AE, 0x0350, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0350, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0350, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0350, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0350, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0350, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0351, 0x0062], NFC: [0x00E0, 0x05AE, 0x0351, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0351, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0351, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0351, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0351, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0351, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0352, 0x0062], NFC: [0x00E0, 0x05AE, 0x0352, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0352, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0352, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0352, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0352, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0352, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0353, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0353, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0353, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0353, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0354, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0354, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0354, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0354, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0355, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0355, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0355, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0355, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0356, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0356, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0356, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0356, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0357, 0x0062], NFC: [0x00E0, 0x05AE, 0x0357, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0357, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0357, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0357, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0357, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0357, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x0358, 0x0062], NFC: [0x00E0, 0x0315, 0x0358, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x0358, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x0358, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x0358, 0x035C, 0x0062] }, +{ source: [0x0061, 0x0358, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x0358, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0358, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x0358, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0358, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0359, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0359, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0359, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0359, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x035A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x035A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x035A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x035A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x035B, 0x0062], NFC: [0x00E0, 0x05AE, 0x035B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x035B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x035B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x035B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x035B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x035C, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x035C, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x035D, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035D, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x035E, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x035E, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035E, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035E, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x035F, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x035F, 0x035D, 0x0062] }, +{ source: [0x0061, 0x035F, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035F, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x0360, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x0360, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0360, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x0360, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x0361, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x0361, 0x0345, 0x0062] }, +{ source: [0x0061, 0x0361, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x0361, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x0362, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x0362, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0362, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x0362, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0363, 0x0062], NFC: [0x00E0, 0x05AE, 0x0363, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0363, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0363, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0363, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0363, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0363, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0364, 0x0062], NFC: [0x00E0, 0x05AE, 0x0364, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0364, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0364, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0364, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0364, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0364, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0365, 0x0062], NFC: [0x00E0, 0x05AE, 0x0365, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0365, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0365, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0365, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0365, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0365, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0366, 0x0062], NFC: [0x00E0, 0x05AE, 0x0366, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0366, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0366, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0366, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0366, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0366, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0367, 0x0062], NFC: [0x00E0, 0x05AE, 0x0367, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0367, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0367, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0367, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0367, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0367, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0368, 0x0062], NFC: [0x00E0, 0x05AE, 0x0368, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0368, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0368, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0368, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0368, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0368, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0369, 0x0062], NFC: [0x00E0, 0x05AE, 0x0369, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0369, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0369, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0369, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0369, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0369, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036A, 0x0062], NFC: [0x00E0, 0x05AE, 0x036A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036B, 0x0062], NFC: [0x00E0, 0x05AE, 0x036B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036C, 0x0062], NFC: [0x00E0, 0x05AE, 0x036C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036D, 0x0062], NFC: [0x00E0, 0x05AE, 0x036D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036E, 0x0062], NFC: [0x00E0, 0x05AE, 0x036E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x036F, 0x0062], NFC: [0x00E0, 0x05AE, 0x036F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x036F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x036F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x036F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x036F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x036F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0483, 0x0062], NFC: [0x00E0, 0x05AE, 0x0483, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0483, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0483, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0483, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0483, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0483, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0484, 0x0062], NFC: [0x00E0, 0x05AE, 0x0484, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0484, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0484, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0484, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0484, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0484, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0485, 0x0062], NFC: [0x00E0, 0x05AE, 0x0485, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0485, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0485, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0485, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0485, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0485, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0486, 0x0062], NFC: [0x00E0, 0x05AE, 0x0486, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0486, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0486, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0486, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0486, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0486, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0487, 0x0062], NFC: [0x00E0, 0x05AE, 0x0487, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0487, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0487, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0487, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0487, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0487, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0591, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0591, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0591, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0591, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0592, 0x0062], NFC: [0x00E0, 0x05AE, 0x0592, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0592, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0592, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0592, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0592, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0592, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0593, 0x0062], NFC: [0x00E0, 0x05AE, 0x0593, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0593, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0593, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0593, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0593, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0593, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0594, 0x0062], NFC: [0x00E0, 0x05AE, 0x0594, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0594, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0594, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0594, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0594, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0594, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0595, 0x0062], NFC: [0x00E0, 0x05AE, 0x0595, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0595, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0595, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0595, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0595, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0595, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0596, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0596, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0596, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0596, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0597, 0x0062], NFC: [0x00E0, 0x05AE, 0x0597, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0597, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0597, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0597, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0597, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0597, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0598, 0x0062], NFC: [0x00E0, 0x05AE, 0x0598, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0598, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0598, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0598, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0598, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0598, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0599, 0x0062], NFC: [0x00E0, 0x05AE, 0x0599, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0599, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0599, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0599, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0599, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0599, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x059A, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x059A, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x059B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x059B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x059B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059C, 0x0062], NFC: [0x00E0, 0x05AE, 0x059C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059D, 0x0062], NFC: [0x00E0, 0x05AE, 0x059D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059E, 0x0062], NFC: [0x00E0, 0x05AE, 0x059E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x059F, 0x0062], NFC: [0x00E0, 0x05AE, 0x059F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x059F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x059F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x059F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x059F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A0, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A1, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A2, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A2, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A3, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A3, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A4, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A4, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A4, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A4, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05A7, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05A7, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05A7, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05A7, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A8, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05A9, 0x0062], NFC: [0x00E0, 0x05AE, 0x05A9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05A9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05A9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05A9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05A9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05A9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05AA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05AA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05AA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05AA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AB, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05AB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AC, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05AC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x05AD, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x05AD, 0x302E, 0x0062] }, +{ source: [0x0061, 0x05AD, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x05AD, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x05AE, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x05AE, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05AF, 0x0062], NFC: [0x00E0, 0x05AE, 0x05AF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05AF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05AF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05AF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05AF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05AF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B1, 0x05B0, 0x094D, 0x05B0, 0x0062], NFC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x05B1, 0x05B0, 0x094D, 0x0062], NFC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKC: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062], NFKD: [0x0061, 0x094D, 0x05B0, 0x05B0, 0x05B1, 0x0062] }, +{ source: [0x0061, 0x05B2, 0x05B1, 0x05B0, 0x05B1, 0x0062], NFC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062] }, +{ source: [0x0061, 0x05B1, 0x05B2, 0x05B1, 0x05B0, 0x0062], NFC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKC: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062], NFKD: [0x0061, 0x05B0, 0x05B1, 0x05B1, 0x05B2, 0x0062] }, +{ source: [0x0061, 0x05B3, 0x05B2, 0x05B1, 0x05B2, 0x0062], NFC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062] }, +{ source: [0x0061, 0x05B2, 0x05B3, 0x05B2, 0x05B1, 0x0062], NFC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKC: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062], NFKD: [0x0061, 0x05B1, 0x05B2, 0x05B2, 0x05B3, 0x0062] }, +{ source: [0x0061, 0x05B4, 0x05B3, 0x05B2, 0x05B3, 0x0062], NFC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062] }, +{ source: [0x0061, 0x05B3, 0x05B4, 0x05B3, 0x05B2, 0x0062], NFC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKC: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062], NFKD: [0x0061, 0x05B2, 0x05B3, 0x05B3, 0x05B4, 0x0062] }, +{ source: [0x0061, 0x05B5, 0x05B4, 0x05B3, 0x05B4, 0x0062], NFC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062] }, +{ source: [0x0061, 0x05B4, 0x05B5, 0x05B4, 0x05B3, 0x0062], NFC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKC: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062], NFKD: [0x0061, 0x05B3, 0x05B4, 0x05B4, 0x05B5, 0x0062] }, +{ source: [0x0061, 0x05B6, 0x05B5, 0x05B4, 0x05B5, 0x0062], NFC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062] }, +{ source: [0x0061, 0x05B5, 0x05B6, 0x05B5, 0x05B4, 0x0062], NFC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKC: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062], NFKD: [0x0061, 0x05B4, 0x05B5, 0x05B5, 0x05B6, 0x0062] }, +{ source: [0x0061, 0x05B7, 0x05B6, 0x05B5, 0x05B6, 0x0062], NFC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062] }, +{ source: [0x0061, 0x05B6, 0x05B7, 0x05B6, 0x05B5, 0x0062], NFC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKC: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062], NFKD: [0x0061, 0x05B5, 0x05B6, 0x05B6, 0x05B7, 0x0062] }, +{ source: [0x0061, 0x05B8, 0x05B7, 0x05B6, 0x05B7, 0x0062], NFC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062] }, +{ source: [0x0061, 0x05B7, 0x05B8, 0x05B7, 0x05B6, 0x0062], NFC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKC: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062], NFKD: [0x0061, 0x05B6, 0x05B7, 0x05B7, 0x05B8, 0x0062] }, +{ source: [0x0061, 0x05B9, 0x05B8, 0x05B7, 0x05B8, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x05B8, 0x05B9, 0x05B8, 0x05B7, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05B8, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x05BB, 0x05B9, 0x05B8, 0x05B9, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05B9, 0x05BB, 0x05B9, 0x05B8, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05B9, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05BB, 0x05B9, 0x05B8, 0x05BA, 0x0062], NFC: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05B9, 0x05BA, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05BA, 0x05BB, 0x05B9, 0x05B8, 0x0062], NFC: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFD: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFKC: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062], NFKD: [0x0061, 0x05B8, 0x05BA, 0x05B9, 0x05BB, 0x0062] }, +{ source: [0x0061, 0x05BC, 0x05BB, 0x05B9, 0x05BB, 0x0062], NFC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062] }, +{ source: [0x0061, 0x05BB, 0x05BC, 0x05BB, 0x05B9, 0x0062], NFC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKC: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062], NFKD: [0x0061, 0x05B9, 0x05BB, 0x05BB, 0x05BC, 0x0062] }, +{ source: [0x0061, 0x05BD, 0x05BC, 0x05BB, 0x05BC, 0x0062], NFC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062] }, +{ source: [0x0061, 0x05BC, 0x05BD, 0x05BC, 0x05BB, 0x0062], NFC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKC: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062], NFKD: [0x0061, 0x05BB, 0x05BC, 0x05BC, 0x05BD, 0x0062] }, +{ source: [0x0061, 0x05BF, 0x05BD, 0x05BC, 0x05BD, 0x0062], NFC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062] }, +{ source: [0x0061, 0x05BD, 0x05BF, 0x05BD, 0x05BC, 0x0062], NFC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKC: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062], NFKD: [0x0061, 0x05BC, 0x05BD, 0x05BD, 0x05BF, 0x0062] }, +{ source: [0x0061, 0x05C1, 0x05BF, 0x05BD, 0x05BF, 0x0062], NFC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062] }, +{ source: [0x0061, 0x05BF, 0x05C1, 0x05BF, 0x05BD, 0x0062], NFC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKC: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062], NFKD: [0x0061, 0x05BD, 0x05BF, 0x05BF, 0x05C1, 0x0062] }, +{ source: [0x0061, 0x05C2, 0x05C1, 0x05BF, 0x05C1, 0x0062], NFC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062] }, +{ source: [0x0061, 0x05C1, 0x05C2, 0x05C1, 0x05BF, 0x0062], NFC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKC: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062], NFKD: [0x0061, 0x05BF, 0x05C1, 0x05C1, 0x05C2, 0x0062] }, +{ source: [0x0061, 0xFB1E, 0x05C2, 0x05C1, 0x05C2, 0x0062], NFC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062] }, +{ source: [0x0061, 0x05C2, 0xFB1E, 0x05C2, 0x05C1, 0x0062], NFC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKC: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062], NFKD: [0x0061, 0x05C1, 0x05C2, 0x05C2, 0xFB1E, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x05C4, 0x0062], NFC: [0x00E0, 0x05AE, 0x05C4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x05C4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x05C4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x05C4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05C4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x05C4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x05C5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x05C5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05C5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x05C5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B9, 0x05B8, 0x05B7, 0x05C7, 0x0062], NFC: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05B8, 0x05C7, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x05C7, 0x05B9, 0x05B8, 0x05B7, 0x0062], NFC: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFD: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFKC: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062], NFKD: [0x0061, 0x05B7, 0x05C7, 0x05B8, 0x05B9, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0610, 0x0062], NFC: [0x00E0, 0x05AE, 0x0610, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0610, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0610, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0610, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0610, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0610, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0611, 0x0062], NFC: [0x00E0, 0x05AE, 0x0611, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0611, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0611, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0611, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0611, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0611, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0612, 0x0062], NFC: [0x00E0, 0x05AE, 0x0612, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0612, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0612, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0612, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0612, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0612, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0613, 0x0062], NFC: [0x00E0, 0x05AE, 0x0613, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0613, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0613, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0613, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0613, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0613, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0614, 0x0062], NFC: [0x00E0, 0x05AE, 0x0614, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0614, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0614, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0614, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0614, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0614, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0615, 0x0062], NFC: [0x00E0, 0x05AE, 0x0615, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0615, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0615, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0615, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0615, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0615, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0616, 0x0062], NFC: [0x00E0, 0x05AE, 0x0616, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0616, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0616, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0616, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0616, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0616, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0617, 0x0062], NFC: [0x00E0, 0x05AE, 0x0617, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0617, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0617, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0617, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0617, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0617, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0619, 0x0618, 0x064D, 0x0618, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062] }, +{ source: [0x0061, 0x0618, 0x0619, 0x0618, 0x064D, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x0618, 0x0619, 0x0062] }, +{ source: [0x0061, 0x061A, 0x0619, 0x0618, 0x0619, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062] }, +{ source: [0x0061, 0x0619, 0x061A, 0x0619, 0x0618, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x0619, 0x061A, 0x0062] }, +{ source: [0x0061, 0x0651, 0x061A, 0x0619, 0x061A, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062] }, +{ source: [0x0061, 0x061A, 0x0651, 0x061A, 0x0619, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x061A, 0x0651, 0x0062] }, +{ source: [0x0061, 0x064C, 0x064B, 0xFB1E, 0x064B, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062] }, +{ source: [0x0061, 0x064B, 0x064C, 0x064B, 0xFB1E, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x064B, 0x064C, 0x0062] }, +{ source: [0x0061, 0x064D, 0x064C, 0x064B, 0x064C, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062] }, +{ source: [0x0061, 0x064C, 0x064D, 0x064C, 0x064B, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x064C, 0x064D, 0x0062] }, +{ source: [0x0061, 0x0618, 0x064D, 0x064C, 0x064D, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062] }, +{ source: [0x0061, 0x064D, 0x0618, 0x064D, 0x064C, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x064D, 0x0618, 0x0062] }, +{ source: [0x0061, 0x0619, 0x0618, 0x064D, 0x064E, 0x0062], NFC: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x0618, 0x064E, 0x0619, 0x0062] }, +{ source: [0x0061, 0x064E, 0x0619, 0x0618, 0x064D, 0x0062], NFC: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFD: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFKC: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062], NFKD: [0x0061, 0x064D, 0x064E, 0x0618, 0x0619, 0x0062] }, +{ source: [0x0061, 0x061A, 0x0619, 0x0618, 0x064F, 0x0062], NFC: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x0619, 0x064F, 0x061A, 0x0062] }, +{ source: [0x0061, 0x064F, 0x061A, 0x0619, 0x0618, 0x0062], NFC: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFD: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFKC: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062], NFKD: [0x0061, 0x0618, 0x064F, 0x0619, 0x061A, 0x0062] }, +{ source: [0x0061, 0x0651, 0x061A, 0x0619, 0x0650, 0x0062], NFC: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x061A, 0x0650, 0x0651, 0x0062] }, +{ source: [0x0061, 0x0650, 0x0651, 0x061A, 0x0619, 0x0062], NFC: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFD: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFKC: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062], NFKD: [0x0061, 0x0619, 0x0650, 0x061A, 0x0651, 0x0062] }, +{ source: [0x0061, 0x0652, 0x0651, 0x061A, 0x0651, 0x0062], NFC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062] }, +{ source: [0x0061, 0x0651, 0x0652, 0x0651, 0x061A, 0x0062], NFC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKC: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062], NFKD: [0x0061, 0x061A, 0x0651, 0x0651, 0x0652, 0x0062] }, +{ source: [0x0061, 0x0670, 0x0652, 0x0651, 0x0652, 0x0062], NFC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062] }, +{ source: [0x0061, 0x0652, 0x0670, 0x0652, 0x0651, 0x0062], NFC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKC: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062], NFKD: [0x0061, 0x0651, 0x0652, 0x0652, 0x0670, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0653, 0x0062], NFC: [0x00E0, 0x05AE, 0x0653, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0653, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0653, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0653, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0653, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0653, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0654, 0x0062], NFC: [0x00E0, 0x05AE, 0x0654, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0654, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0654, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0654, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0654, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0654, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0655, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0655, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0655, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0655, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0656, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0656, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0656, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0656, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0657, 0x0062], NFC: [0x00E0, 0x05AE, 0x0657, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0657, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0657, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0657, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0657, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0657, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0658, 0x0062], NFC: [0x00E0, 0x05AE, 0x0658, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0658, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0658, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0658, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0658, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0658, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0659, 0x0062], NFC: [0x00E0, 0x05AE, 0x0659, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0659, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0659, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0659, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0659, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0659, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065A, 0x0062], NFC: [0x00E0, 0x05AE, 0x065A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065B, 0x0062], NFC: [0x00E0, 0x05AE, 0x065B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x065C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x065C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x065C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x065C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065D, 0x0062], NFC: [0x00E0, 0x05AE, 0x065D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x065E, 0x0062], NFC: [0x00E0, 0x05AE, 0x065E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x065E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x065E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x065E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x065E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x065E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x065F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x065F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x065F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x065F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0711, 0x0670, 0x0652, 0x0670, 0x0062], NFC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062] }, +{ source: [0x0061, 0x0670, 0x0711, 0x0670, 0x0652, 0x0062], NFC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKC: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062], NFKD: [0x0061, 0x0652, 0x0670, 0x0670, 0x0711, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D8, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06D9, 0x0062], NFC: [0x00E0, 0x05AE, 0x06D9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06D9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06D9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06D9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06D9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06D9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DA, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06DF, 0x0062], NFC: [0x00E0, 0x05AE, 0x06DF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06DF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06DF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06DF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06DF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06DF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E0, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E2, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x06E3, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x06E3, 0x059A, 0x0062] }, +{ source: [0x0061, 0x06E3, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x06E3, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E4, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06E8, 0x0062], NFC: [0x00E0, 0x05AE, 0x06E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06E8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06E8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x06EA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x06EA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x06EA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x06EA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x06EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x06EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x06EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x06EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x06EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x06EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x06EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x06EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x06ED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x06ED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x06ED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x06ED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0C55, 0x0711, 0x0670, 0x0711, 0x0062], NFC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062] }, +{ source: [0x0061, 0x0711, 0x0C55, 0x0711, 0x0670, 0x0062], NFC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKC: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062], NFKD: [0x0061, 0x0670, 0x0711, 0x0711, 0x0C55, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0730, 0x0062], NFC: [0x00E0, 0x05AE, 0x0730, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0730, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0730, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0730, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0730, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0730, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0731, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0731, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0731, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0731, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0732, 0x0062], NFC: [0x00E0, 0x05AE, 0x0732, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0732, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0732, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0732, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0732, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0732, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0733, 0x0062], NFC: [0x00E0, 0x05AE, 0x0733, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0733, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0733, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0733, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0733, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0733, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0734, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0734, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0734, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0734, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0735, 0x0062], NFC: [0x00E0, 0x05AE, 0x0735, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0735, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0735, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0735, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0735, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0735, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0736, 0x0062], NFC: [0x00E0, 0x05AE, 0x0736, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0736, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0736, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0736, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0736, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0736, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0737, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0737, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0737, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0737, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0738, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0738, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0738, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0738, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0739, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0739, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0739, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0739, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073A, 0x0062], NFC: [0x00E0, 0x05AE, 0x073A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x073A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x073B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x073B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x073B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x073B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x073C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x073C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x073C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x073C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073D, 0x0062], NFC: [0x00E0, 0x05AE, 0x073D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x073D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x073E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x073E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x073E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x073E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x073F, 0x0062], NFC: [0x00E0, 0x05AE, 0x073F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x073F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x073F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x073F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x073F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x073F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0740, 0x0062], NFC: [0x00E0, 0x05AE, 0x0740, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0740, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0740, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0740, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0740, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0740, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0741, 0x0062], NFC: [0x00E0, 0x05AE, 0x0741, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0741, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0741, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0741, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0741, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0741, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0742, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0742, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0742, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0742, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0743, 0x0062], NFC: [0x00E0, 0x05AE, 0x0743, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0743, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0743, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0743, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0743, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0743, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0744, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0744, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0744, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0744, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0745, 0x0062], NFC: [0x00E0, 0x05AE, 0x0745, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0745, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0745, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0745, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0745, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0745, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0746, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0746, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0746, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0746, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0747, 0x0062], NFC: [0x00E0, 0x05AE, 0x0747, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0747, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0747, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0747, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0747, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0747, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0748, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0748, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0748, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0748, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0749, 0x0062], NFC: [0x00E0, 0x05AE, 0x0749, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0749, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0749, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0749, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0749, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0749, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x074A, 0x0062], NFC: [0x00E0, 0x05AE, 0x074A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x074A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x074A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x074A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x074A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x074A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07ED, 0x0062], NFC: [0x00E0, 0x05AE, 0x07ED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07ED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07ED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07ED, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07ED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07ED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EE, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07EF, 0x0062], NFC: [0x00E0, 0x05AE, 0x07EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07EF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07EF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F0, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F1, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x07F2, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x07F2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x07F2, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x07F2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x07F3, 0x0062], NFC: [0x00E0, 0x05AE, 0x07F3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x07F3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x07F3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x07F3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x07F3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x07F3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0816, 0x0062], NFC: [0x00E0, 0x05AE, 0x0816, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0816, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0816, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0816, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0816, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0816, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0817, 0x0062], NFC: [0x00E0, 0x05AE, 0x0817, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0817, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0817, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0817, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0817, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0817, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0818, 0x0062], NFC: [0x00E0, 0x05AE, 0x0818, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0818, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0818, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0818, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0818, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0818, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0819, 0x0062], NFC: [0x00E0, 0x05AE, 0x0819, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0819, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0819, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0819, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0819, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0819, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081B, 0x0062], NFC: [0x00E0, 0x05AE, 0x081B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081C, 0x0062], NFC: [0x00E0, 0x05AE, 0x081C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081D, 0x0062], NFC: [0x00E0, 0x05AE, 0x081D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081E, 0x0062], NFC: [0x00E0, 0x05AE, 0x081E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x081F, 0x0062], NFC: [0x00E0, 0x05AE, 0x081F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x081F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x081F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x081F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x081F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x081F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0820, 0x0062], NFC: [0x00E0, 0x05AE, 0x0820, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0820, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0820, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0820, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0820, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0820, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0821, 0x0062], NFC: [0x00E0, 0x05AE, 0x0821, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0821, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0821, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0821, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0821, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0821, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0822, 0x0062], NFC: [0x00E0, 0x05AE, 0x0822, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0822, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0822, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0822, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0822, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0822, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0823, 0x0062], NFC: [0x00E0, 0x05AE, 0x0823, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0823, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0823, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0823, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0823, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0823, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0825, 0x0062], NFC: [0x00E0, 0x05AE, 0x0825, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0825, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0825, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0825, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0825, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0825, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0826, 0x0062], NFC: [0x00E0, 0x05AE, 0x0826, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0826, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0826, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0826, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0826, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0826, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0827, 0x0062], NFC: [0x00E0, 0x05AE, 0x0827, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0827, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0827, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0827, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0827, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0827, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0829, 0x0062], NFC: [0x00E0, 0x05AE, 0x0829, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0829, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0829, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0829, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0829, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0829, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082A, 0x0062], NFC: [0x00E0, 0x05AE, 0x082A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082B, 0x0062], NFC: [0x00E0, 0x05AE, 0x082B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082C, 0x0062], NFC: [0x00E0, 0x05AE, 0x082C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x082D, 0x0062], NFC: [0x00E0, 0x05AE, 0x082D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x082D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x082D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x082D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x082D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x082D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0859, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0859, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0859, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0859, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x085A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x085A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x085A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x085A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x085B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x085B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x085B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x085B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08E6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08E6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08E6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08E6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08E8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08E8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08E8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08E9, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08E9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08E9, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08E9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EA, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08EA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08EC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08ED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08ED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08ED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08ED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08EE, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08EE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08EE, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08EE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08EF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08EF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08EF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08EF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x064C, 0x064B, 0xFB1E, 0x08F0, 0x0062], NFC: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x064B, 0x08F0, 0x064C, 0x0062] }, +{ source: [0x0061, 0x08F0, 0x064C, 0x064B, 0xFB1E, 0x0062], NFC: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFD: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFKC: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062], NFKD: [0x0061, 0xFB1E, 0x08F0, 0x064B, 0x064C, 0x0062] }, +{ source: [0x0061, 0x064D, 0x064C, 0x064B, 0x08F1, 0x0062], NFC: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x064C, 0x08F1, 0x064D, 0x0062] }, +{ source: [0x0061, 0x08F1, 0x064D, 0x064C, 0x064B, 0x0062], NFC: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFD: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFKC: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062], NFKD: [0x0061, 0x064B, 0x08F1, 0x064C, 0x064D, 0x0062] }, +{ source: [0x0061, 0x0618, 0x064D, 0x064C, 0x08F2, 0x0062], NFC: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x064D, 0x08F2, 0x0618, 0x0062] }, +{ source: [0x0061, 0x08F2, 0x0618, 0x064D, 0x064C, 0x0062], NFC: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFD: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFKC: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062], NFKD: [0x0061, 0x064C, 0x08F2, 0x064D, 0x0618, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F3, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F4, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F5, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08F6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08F6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08F6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08F6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F7, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08F8, 0x0062], NFC: [0x00E0, 0x05AE, 0x08F8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08F8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08F8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08F8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08F8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08F8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08F9, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08F9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08F9, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08F9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x08FA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x08FA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x08FA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x08FA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FB, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FC, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FD, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x08FE, 0x0062], NFC: [0x00E0, 0x05AE, 0x08FE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x08FE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x08FE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x08FE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x08FE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x08FE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x093C, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x093C, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x094D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x094D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0951, 0x0062], NFC: [0x00E0, 0x05AE, 0x0951, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0951, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0951, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0951, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0951, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0951, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0952, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0952, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0952, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0952, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0953, 0x0062], NFC: [0x00E0, 0x05AE, 0x0953, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0953, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0953, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0953, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0953, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0953, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0954, 0x0062], NFC: [0x00E0, 0x05AE, 0x0954, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0954, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0954, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0954, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0954, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0954, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x09BC, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x09BC, 0x3099, 0x0062] }, +{ source: [0x0061, 0x09BC, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x09BC, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x09CD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x09CD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x09CD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x09CD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0A3C, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0A3C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0A3C, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0A3C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0A4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0A4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0A4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0A4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0ABC, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0ABC, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0ABC, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0ABC, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0ACD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0ACD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0ACD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0ACD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0B3C, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0B3C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0B3C, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0B3C, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0B4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0B4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0B4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0B4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0BCD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0BCD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0BCD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0BCD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0C4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0C4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0C4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0C4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0C56, 0x0C55, 0x0711, 0x0C55, 0x0062], NFC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062] }, +{ source: [0x0061, 0x0C55, 0x0C56, 0x0C55, 0x0711, 0x0062], NFC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKC: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062], NFKD: [0x0061, 0x0711, 0x0C55, 0x0C55, 0x0C56, 0x0062] }, +{ source: [0x0061, 0x0E38, 0x0C56, 0x0C55, 0x0C56, 0x0062], NFC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062] }, +{ source: [0x0061, 0x0C56, 0x0E38, 0x0C56, 0x0C55, 0x0062], NFC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKC: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062], NFKD: [0x0061, 0x0C55, 0x0C56, 0x0C56, 0x0E38, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x0CBC, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x0CBC, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0CBC, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x0CBC, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0CCD, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0CCD, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0CCD, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0CCD, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0D4D, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0D4D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0D4D, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0D4D, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0DCA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0DCA, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0DCA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0DCA, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0E48, 0x0E38, 0x0C56, 0x0E38, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x0E38, 0x0E48, 0x0E38, 0x0C56, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E38, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x0E48, 0x0E38, 0x0C56, 0x0E39, 0x0062], NFC: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E38, 0x0E39, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x0E39, 0x0E48, 0x0E38, 0x0C56, 0x0062], NFC: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFD: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFKC: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062], NFKD: [0x0061, 0x0C56, 0x0E39, 0x0E38, 0x0E48, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0E3A, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0E3A, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0E3A, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0E3A, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E48, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E48, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E49, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E49, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E49, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E49, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E4A, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E4A, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E4A, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E4A, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0E48, 0x0E38, 0x0E4B, 0x0062], NFC: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E48, 0x0E4B, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0E4B, 0x0EB8, 0x0E48, 0x0E38, 0x0062], NFC: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFD: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFKC: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062], NFKD: [0x0061, 0x0E38, 0x0E4B, 0x0E48, 0x0EB8, 0x0062] }, +{ source: [0x0061, 0x0EC8, 0x0EB8, 0x0E48, 0x0EB8, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x0EB8, 0x0EC8, 0x0EB8, 0x0E48, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB8, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x0EC8, 0x0EB8, 0x0E48, 0x0EB9, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB8, 0x0EB9, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x0EB9, 0x0EC8, 0x0EB8, 0x0E48, 0x0062], NFC: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFD: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFKC: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062], NFKD: [0x0061, 0x0E48, 0x0EB9, 0x0EB8, 0x0EC8, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0EC8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0EC8, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0EC9, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0EC9, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0EC9, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC9, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0ECA, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECA, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0ECA, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0ECA, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0EC8, 0x0EB8, 0x0ECB, 0x0062], NFC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0EC8, 0x0ECB, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x0ECB, 0x0F71, 0x0EC8, 0x0EB8, 0x0062], NFC: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFD: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFKC: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062], NFKD: [0x0061, 0x0EB8, 0x0ECB, 0x0EC8, 0x0F71, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F18, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F18, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F18, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F18, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F19, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F19, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F19, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F19, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F35, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F35, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F35, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F35, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0F37, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0F37, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0F37, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0F37, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x0F39, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x0F39, 0x302A, 0x0062] }, +{ source: [0x0061, 0x0F39, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x0F39, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x0F72, 0x0F71, 0x0EC8, 0x0F71, 0x0062], NFC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062] }, +{ source: [0x0061, 0x0F71, 0x0F72, 0x0F71, 0x0EC8, 0x0062], NFC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKC: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062], NFKD: [0x0061, 0x0EC8, 0x0F71, 0x0F71, 0x0F72, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F72, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F72, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0321, 0x0F74, 0x0F72, 0x0F74, 0x0062], NFC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0321, 0x0F74, 0x0F72, 0x0062], NFC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKC: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062], NFKD: [0x0061, 0x0F72, 0x0F74, 0x0F74, 0x0321, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7A, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7A, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7A, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7A, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7B, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7B, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7B, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7B, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7C, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7C, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7C, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7C, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F7D, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F7D, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F7D, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F7D, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F74, 0x0F72, 0x0F71, 0x0F80, 0x0062], NFC: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F72, 0x0F80, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0F80, 0x0F74, 0x0F72, 0x0F71, 0x0062], NFC: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFD: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFKC: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062], NFKD: [0x0061, 0x0F71, 0x0F80, 0x0F72, 0x0F74, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F82, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F82, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F82, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F82, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F82, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F82, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F82, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F83, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F83, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F83, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F83, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F83, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F83, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F83, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x0F84, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x0F84, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0F84, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x0F84, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F86, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F86, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F86, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F86, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F86, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F86, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F86, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x0F87, 0x0062], NFC: [0x00E0, 0x05AE, 0x0F87, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x0F87, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x0F87, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x0F87, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0F87, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0F87, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x0FC6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x0FC6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0FC6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0FC6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1037, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1037, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1037, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1037, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1039, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1039, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1039, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1039, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x103A, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x103A, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x103A, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x103A, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x108D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x108D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x108D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x108D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135D, 0x0062], NFC: [0x00E0, 0x05AE, 0x135D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x135D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135E, 0x0062], NFC: [0x00E0, 0x05AE, 0x135E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x135E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x135F, 0x0062], NFC: [0x00E0, 0x05AE, 0x135F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x135F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x135F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x135F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x135F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x135F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1714, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1714, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1714, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1714, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1734, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1734, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1734, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1734, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x17D2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x17D2, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x17D2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x17D2, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x17DD, 0x0062], NFC: [0x00E0, 0x05AE, 0x17DD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x17DD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x17DD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x17DD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x17DD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x17DD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x18A9, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x18A9, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x18A9, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x18A9, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x18A9, 0x0300, 0x0062] }, +{ source: [0x0061, 0x18A9, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x18A9, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x18A9, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x18A9, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x18A9, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x1939, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x1939, 0x302E, 0x0062] }, +{ source: [0x0061, 0x1939, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x1939, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x193A, 0x0062], NFC: [0x00E0, 0x05AE, 0x193A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x193A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x193A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x193A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x193A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x193A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x193B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x193B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x193B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x193B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A17, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A17, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A17, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A17, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A17, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A17, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A17, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1A18, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1A18, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1A18, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1A18, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1A60, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1A60, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1A60, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1A60, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A75, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A75, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A75, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A75, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A75, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A75, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A75, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A76, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A76, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A76, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A76, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A76, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A76, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A76, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A77, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A77, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A77, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A77, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A77, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A77, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A77, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A78, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A78, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A78, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A78, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A78, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A78, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A78, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A79, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A79, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A79, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A79, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A79, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A79, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A79, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7A, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7A, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A7A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A7B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1A7C, 0x0062], NFC: [0x00E0, 0x05AE, 0x1A7C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1A7C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1A7C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1A7C, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1A7C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1A7C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1A7F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1A7F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1A7F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1A7F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1B34, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1B34, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1B34, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1B34, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1B44, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1B44, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1B44, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1B44, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6B, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6B, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1B6C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1B6C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1B6C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1B6C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6D, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6D, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6E, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6E, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6E, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6E, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6E, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6E, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6E, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B6F, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B6F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B6F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B6F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B6F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B6F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B6F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B70, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B70, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B70, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B70, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B70, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B70, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B70, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B71, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B71, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B71, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B71, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B71, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B71, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B71, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B72, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B72, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B72, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B72, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B72, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B72, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B72, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1B73, 0x0062], NFC: [0x00E0, 0x05AE, 0x1B73, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1B73, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1B73, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1B73, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1B73, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1B73, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BAA, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BAA, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BAA, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BAA, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BAB, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BAB, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BAB, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BAB, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1BE6, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1BE6, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1BE6, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1BE6, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BF2, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BF2, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BF2, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BF2, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x1BF3, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x1BF3, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x1BF3, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x1BF3, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x1C37, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x1C37, 0x3099, 0x0062] }, +{ source: [0x0061, 0x1C37, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x1C37, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CD0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CD1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CD2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CD2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CD2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CD2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CD2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CD2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CD2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CD4, 0x0062], NFC: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CD4, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CD4, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CD4, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD5, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD5, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD5, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD5, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD6, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD6, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD6, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD6, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD7, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD7, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD7, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD7, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD8, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD8, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD8, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD8, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CD9, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CD9, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CD9, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CD9, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CDA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CDA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CDA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CDA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CDA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CDA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CDA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CDB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CDB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CDB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CDB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CDB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CDB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CDB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDC, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDC, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDC, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDC, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDD, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDD, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDE, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDE, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CDF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CDF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CDF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CDF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CE0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CE0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CE2, 0x0062], NFC: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE2, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CE2, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE2, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CE3, 0x0062], NFC: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE3, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CE3, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE3, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CE4, 0x0062], NFC: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE4, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CE4, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE4, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CE5, 0x0062], NFC: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE5, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CE5, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE5, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CE6, 0x0062], NFC: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE6, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CE6, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE6, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CE7, 0x0062], NFC: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE7, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CE7, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE7, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1CE8, 0x0062], NFC: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1CE8, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1CE8, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1CE8, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1CED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1CED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1CED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1CED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1CF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1CF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1CF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1CF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1CF4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1CF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1CF4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DC2, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DC2, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DC2, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DC2, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DC9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DC9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DC9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DC9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DC9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DC9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DC9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DCA, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DCA, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCA, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DCA, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DCB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DCB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DCB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DCB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DCB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DCB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DCB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DCC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DCC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DCC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DCC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DCC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DCC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DCC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0345, 0x035D, 0x035C, 0x1DCD, 0x0062], NFC: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x035D, 0x1DCD, 0x0345, 0x0062] }, +{ source: [0x0061, 0x1DCD, 0x0345, 0x035D, 0x035C, 0x0062], NFC: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFD: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFKC: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062], NFKD: [0x0061, 0x035C, 0x1DCD, 0x035D, 0x0345, 0x0062] }, +{ source: [0x0061, 0x031B, 0x1DCE, 0x0321, 0x1DCE, 0x0062], NFC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x031B, 0x1DCE, 0x0321, 0x0062], NFC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKC: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062], NFKD: [0x0061, 0x0321, 0x1DCE, 0x1DCE, 0x031B, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DCF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DCF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DCF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DCE, 0x0321, 0x0F74, 0x1DD0, 0x0062], NFC: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x0321, 0x1DD0, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x1DD0, 0x1DCE, 0x0321, 0x0F74, 0x0062], NFC: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFD: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFKC: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062], NFKD: [0x0061, 0x0F74, 0x1DD0, 0x0321, 0x1DCE, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD7, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD8, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DD9, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DD9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DD9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DD9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DD9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DD9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DD9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDD, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DDF, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DDF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DDF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DDF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DDF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DDF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DDF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE1, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE2, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE3, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE4, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DE6, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DE6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DE6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DE6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DE6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DE6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DE6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x035D, 0x035C, 0x0315, 0x1DFC, 0x0062], NFC: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x035C, 0x1DFC, 0x035D, 0x0062] }, +{ source: [0x0061, 0x1DFC, 0x035D, 0x035C, 0x0315, 0x0062], NFC: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFD: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFKC: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062], NFKD: [0x0061, 0x0315, 0x1DFC, 0x035C, 0x035D, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DFD, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DFD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DFD, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DFD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1DFE, 0x0062], NFC: [0x00E0, 0x05AE, 0x1DFE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1DFE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1DFE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1DFE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1DFE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1DFE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1DFF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1DFF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1DFF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1DFF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D0, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D1, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20D2, 0x0062], NFC: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D2, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20D2, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D2, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20D3, 0x0062], NFC: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D3, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20D3, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D3, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D4, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D5, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D6, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20D7, 0x0062], NFC: [0x00E0, 0x05AE, 0x20D7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20D7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20D7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20D7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20D7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20D7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20D8, 0x0062], NFC: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D8, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20D8, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D8, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20D9, 0x0062], NFC: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20D9, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20D9, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20D9, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20DA, 0x0062], NFC: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20DA, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20DA, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20DA, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20DB, 0x0062], NFC: [0x00E0, 0x05AE, 0x20DB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20DB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20DB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20DB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20DB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20DB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20DC, 0x0062], NFC: [0x00E0, 0x05AE, 0x20DC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20DC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20DC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20DC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20DC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20DC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E1, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20E5, 0x0062], NFC: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20E5, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20E5, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20E5, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20E6, 0x0062], NFC: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20E6, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20E6, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20E6, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E7, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20E8, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20E8, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20E8, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20E8, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20E9, 0x0062], NFC: [0x00E0, 0x05AE, 0x20E9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20E9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20E9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20E9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20E9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20E9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20EA, 0x0062], NFC: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20EA, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20EA, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20EA, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x20EB, 0x0062], NFC: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x20EB, 0x093C, 0x0062] }, +{ source: [0x0061, 0x20EB, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x20EB, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20EC, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20EC, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20EC, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20EC, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20ED, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20ED, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20ED, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20ED, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20EE, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20EE, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20EE, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20EE, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x20EF, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x20EF, 0x059A, 0x0062] }, +{ source: [0x0061, 0x20EF, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x20EF, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x20F0, 0x0062], NFC: [0x00E0, 0x05AE, 0x20F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x20F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x20F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x20F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x20F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x20F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CEF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2CEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CEF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CF0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2CF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CF0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2CF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2CF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2CF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2CF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2CF1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2CF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2CF1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x2D7F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x2D7F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x2D7F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x2D7F, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE2, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE3, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE4, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE5, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE6, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE7, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE8, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DE9, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DE9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DE9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DE9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DE9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DE9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DE9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEA, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEB, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEC, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DED, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DED, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEE, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DEF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DEF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DEF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DEF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DEF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DEF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DEF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF0, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF0, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF1, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF1, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF2, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF2, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF3, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF3, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF4, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF4, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF5, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF5, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF6, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF6, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF7, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF7, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF8, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF8, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DF9, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DF9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DF9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DF9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DF9, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DF9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DF9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFA, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFB, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFC, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFD, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFE, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFE, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x2DFF, 0x0062], NFC: [0x00E0, 0x05AE, 0x2DFF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x2DFF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x2DFF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x2DFF, 0x0315, 0x0062] }, +{ source: [0x0061, 0x2DFF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x2DFF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0316, 0x302A, 0x031B, 0x302A, 0x0062], NFC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062] }, +{ source: [0x0061, 0x302A, 0x0316, 0x302A, 0x031B, 0x0062], NFC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKC: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062], NFKD: [0x0061, 0x031B, 0x302A, 0x302A, 0x0316, 0x0062] }, +{ source: [0x0061, 0x0300, 0x05AE, 0x1D16D, 0x302B, 0x0062], NFC: [0x00E0, 0x1D16D, 0x05AE, 0x302B, 0x0062], NFD: [0x0061, 0x1D16D, 0x05AE, 0x302B, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x05AE, 0x302B, 0x0062], NFKD: [0x0061, 0x1D16D, 0x05AE, 0x302B, 0x0300, 0x0062] }, +{ source: [0x0061, 0x302B, 0x0300, 0x05AE, 0x1D16D, 0x0062], NFC: [0x00E0, 0x1D16D, 0x302B, 0x05AE, 0x0062], NFD: [0x0061, 0x1D16D, 0x302B, 0x05AE, 0x0300, 0x0062], NFKC: [0x00E0, 0x1D16D, 0x302B, 0x05AE, 0x0062], NFKD: [0x0061, 0x1D16D, 0x302B, 0x05AE, 0x0300, 0x0062] }, +{ source: [0x0061, 0x035C, 0x0315, 0x0300, 0x302C, 0x0062], NFC: [0x00E0, 0x0315, 0x302C, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x0315, 0x302C, 0x035C, 0x0062], NFKC: [0x00E0, 0x0315, 0x302C, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x0315, 0x302C, 0x035C, 0x0062] }, +{ source: [0x0061, 0x302C, 0x035C, 0x0315, 0x0300, 0x0062], NFC: [0x00E0, 0x302C, 0x0315, 0x035C, 0x0062], NFD: [0x0061, 0x0300, 0x302C, 0x0315, 0x035C, 0x0062], NFKC: [0x00E0, 0x302C, 0x0315, 0x035C, 0x0062], NFKD: [0x0061, 0x0300, 0x302C, 0x0315, 0x035C, 0x0062] }, +{ source: [0x0061, 0x302E, 0x059A, 0x0316, 0x302D, 0x0062], NFC: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x059A, 0x302D, 0x302E, 0x0062] }, +{ source: [0x0061, 0x302D, 0x302E, 0x059A, 0x0316, 0x0062], NFC: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFD: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFKC: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062], NFKD: [0x0061, 0x0316, 0x302D, 0x059A, 0x302E, 0x0062] }, +{ source: [0x0061, 0x1D16D, 0x302E, 0x059A, 0x302E, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x302E, 0x1D16D, 0x302E, 0x059A, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302E, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x1D16D, 0x302E, 0x059A, 0x302F, 0x0062], NFC: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302E, 0x302F, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x302F, 0x1D16D, 0x302E, 0x059A, 0x0062], NFC: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFD: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFKC: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062], NFKD: [0x0061, 0x059A, 0x302F, 0x302E, 0x1D16D, 0x0062] }, +{ source: [0x0061, 0x094D, 0x3099, 0x093C, 0x3099, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062] }, +{ source: [0x0061, 0x3099, 0x094D, 0x3099, 0x093C, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x3099, 0x094D, 0x0062] }, +{ source: [0x0061, 0x094D, 0x3099, 0x093C, 0x309A, 0x0062], NFC: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x3099, 0x309A, 0x094D, 0x0062] }, +{ source: [0x0061, 0x309A, 0x094D, 0x3099, 0x093C, 0x0062], NFC: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFD: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFKC: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062], NFKD: [0x0061, 0x093C, 0x309A, 0x3099, 0x094D, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA66F, 0x0062], NFC: [0x00E0, 0x05AE, 0xA66F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA66F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA66F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA66F, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA66F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA66F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA674, 0x0062], NFC: [0x00E0, 0x05AE, 0xA674, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA674, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA674, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA674, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA674, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA674, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA675, 0x0062], NFC: [0x00E0, 0x05AE, 0xA675, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA675, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA675, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA675, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA675, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA675, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA676, 0x0062], NFC: [0x00E0, 0x05AE, 0xA676, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA676, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA676, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA676, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA676, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA676, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA677, 0x0062], NFC: [0x00E0, 0x05AE, 0xA677, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA677, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA677, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA677, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA677, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA677, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA678, 0x0062], NFC: [0x00E0, 0x05AE, 0xA678, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA678, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA678, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA678, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA678, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA678, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA679, 0x0062], NFC: [0x00E0, 0x05AE, 0xA679, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA679, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA679, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA679, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA679, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA679, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67A, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67A, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67A, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67A, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67A, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67A, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67A, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67B, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67B, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67B, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67B, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67B, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67B, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67B, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67C, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67C, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67C, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67C, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67C, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67C, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67C, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA67D, 0x0062], NFC: [0x00E0, 0x05AE, 0xA67D, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA67D, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA67D, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA67D, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA67D, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA67D, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA69F, 0x0062], NFC: [0x00E0, 0x05AE, 0xA69F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA69F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA69F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA69F, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA69F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA69F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA6F0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA6F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA6F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA6F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA6F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA6F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA6F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA6F1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA6F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA6F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA6F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA6F1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA6F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA6F1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA806, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA806, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA806, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA806, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA8C4, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA8C4, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA8C4, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA8C4, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E2, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E2, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E3, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E3, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E4, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E4, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E4, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E4, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E4, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E4, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E4, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E5, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E5, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E5, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E5, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E5, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E5, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E5, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E6, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E6, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E6, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E6, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E6, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E6, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E6, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E7, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E7, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E8, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E8, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8E9, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8E9, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8E9, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8E9, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8E9, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8E9, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8E9, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EA, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EA, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EB, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EB, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EC, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EC, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8ED, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8ED, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8ED, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8ED, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8ED, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8ED, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8ED, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EE, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EE, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8EF, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8EF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8EF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8EF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8EF, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8EF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8EF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8F0, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8F0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8F0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8F0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8F0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8F0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8F0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xA8F1, 0x0062], NFC: [0x00E0, 0x05AE, 0xA8F1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xA8F1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xA8F1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xA8F1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xA8F1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xA8F1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xA92B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xA92B, 0x059A, 0x0062] }, +{ source: [0x0061, 0xA92B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xA92B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xA92C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xA92C, 0x059A, 0x0062] }, +{ source: [0x0061, 0xA92C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xA92C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xA92D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xA92D, 0x059A, 0x0062] }, +{ source: [0x0061, 0xA92D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xA92D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA953, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA953, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA953, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA953, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0xA9B3, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0xA9B3, 0x3099, 0x0062] }, +{ source: [0x0061, 0xA9B3, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0xA9B3, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xA9C0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xA9C0, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xA9C0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xA9C0, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB0, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB0, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB0, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB0, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB0, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB0, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB0, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB2, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB2, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB2, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB2, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB2, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB2, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB2, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB3, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB3, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB3, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB3, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB3, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB3, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB3, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0xAAB4, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0xAAB4, 0x059A, 0x0062] }, +{ source: [0x0061, 0xAAB4, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0xAAB4, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB7, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB7, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB7, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB7, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB7, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB7, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB7, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAB8, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAB8, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAB8, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAB8, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAB8, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAB8, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAB8, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAABE, 0x0062], NFC: [0x00E0, 0x05AE, 0xAABE, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAABE, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAABE, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAABE, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAABE, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAABE, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAABF, 0x0062], NFC: [0x00E0, 0x05AE, 0xAABF, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAABF, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAABF, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAABF, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAABF, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAABF, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xAAC1, 0x0062], NFC: [0x00E0, 0x05AE, 0xAAC1, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xAAC1, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xAAC1, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xAAC1, 0x0315, 0x0062] }, +{ source: [0x0061, 0xAAC1, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xAAC1, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xAAF6, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xAAF6, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xAAF6, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xAAF6, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0xABED, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0xABED, 0x05B0, 0x0062] }, +{ source: [0x0061, 0xABED, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0xABED, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x064B, 0xFB1E, 0x05C2, 0xFB1E, 0x0062], NFC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062] }, +{ source: [0x0061, 0xFB1E, 0x064B, 0xFB1E, 0x05C2, 0x0062], NFC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKC: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062], NFKD: [0x0061, 0x05C2, 0xFB1E, 0xFB1E, 0x064B, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE20, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE20, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE20, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE20, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE20, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE20, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE20, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE21, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE21, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE21, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE21, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE21, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE21, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE21, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE22, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE22, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE22, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE22, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE22, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE22, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE22, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE23, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE23, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE23, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE23, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE23, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE23, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE23, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE24, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE24, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE24, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE24, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE24, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE24, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE24, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE25, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE25, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE25, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE25, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE25, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE25, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE25, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0xFE26, 0x0062], NFC: [0x00E0, 0x05AE, 0xFE26, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0xFE26, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0xFE26, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0xFE26, 0x0315, 0x0062] }, +{ source: [0x0061, 0xFE26, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0xFE26, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x101FD, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x101FD, 0x059A, 0x0062] }, +{ source: [0x0061, 0x101FD, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x101FD, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x10A0D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x10A0D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10A0D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x10A0D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10A0F, 0x0062], NFC: [0x00E0, 0x05AE, 0x10A0F, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10A0F, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10A0F, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10A0F, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10A0F, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10A0F, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x10A38, 0x0062], NFC: [0x00E0, 0x05AE, 0x10A38, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x10A38, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x10A38, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x10A38, 0x0315, 0x0062] }, +{ source: [0x0061, 0x10A38, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x10A38, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x10A39, 0x0062], NFC: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x10A39, 0x093C, 0x0062] }, +{ source: [0x0061, 0x10A39, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x10A39, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x10A3A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x10A3A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x10A3A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x10A3A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x10A3F, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x10A3F, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x10A3F, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x10A3F, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11046, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11046, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11046, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11046, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x110B9, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x110B9, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x110B9, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x110B9, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x110BA, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x110BA, 0x3099, 0x0062] }, +{ source: [0x0061, 0x110BA, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x110BA, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11100, 0x0062], NFC: [0x00E0, 0x05AE, 0x11100, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11100, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11100, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11100, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11100, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11100, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11101, 0x0062], NFC: [0x00E0, 0x05AE, 0x11101, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11101, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11101, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11101, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11101, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11101, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x11102, 0x0062], NFC: [0x00E0, 0x05AE, 0x11102, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x11102, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x11102, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x11102, 0x0315, 0x0062] }, +{ source: [0x0061, 0x11102, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x11102, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11133, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11133, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11133, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11133, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x11134, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x11134, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x11134, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x11134, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x111C0, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x111C0, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x111C0, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x111C0, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x05B0, 0x094D, 0x3099, 0x116B6, 0x0062], NFC: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x094D, 0x116B6, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x116B6, 0x05B0, 0x094D, 0x3099, 0x0062], NFC: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFD: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFKC: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062], NFKD: [0x0061, 0x3099, 0x116B6, 0x094D, 0x05B0, 0x0062] }, +{ source: [0x0061, 0x3099, 0x093C, 0x0334, 0x116B7, 0x0062], NFC: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x093C, 0x116B7, 0x3099, 0x0062] }, +{ source: [0x0061, 0x116B7, 0x3099, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062], NFD: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062], NFKC: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062], NFKD: [0x0061, 0x0334, 0x116B7, 0x093C, 0x3099, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D165, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D165, 0x302A, 0x0062] }, +{ source: [0x0061, 0x1D165, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D165, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D166, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D166, 0x302A, 0x0062] }, +{ source: [0x0061, 0x1D166, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D166, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1D167, 0x0062], NFC: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1D167, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1D167, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1D167, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1D168, 0x0062], NFC: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1D168, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1D168, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1D168, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x093C, 0x0334, 0x1D169, 0x0062], NFC: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062], NFD: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062], NFKC: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062], NFKD: [0x0061, 0x0334, 0x1D169, 0x093C, 0x0062] }, +{ source: [0x0061, 0x1D169, 0x093C, 0x0334, 0x0062], NFC: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062], NFD: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062], NFKC: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062], NFKD: [0x0061, 0x1D169, 0x0334, 0x093C, 0x0062] }, +{ source: [0x0061, 0x05AE, 0x1D16D, 0x302E, 0x1D16D, 0x0062], NFC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062] }, +{ source: [0x0061, 0x1D16D, 0x05AE, 0x1D16D, 0x302E, 0x0062], NFC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKC: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062], NFKD: [0x0061, 0x302E, 0x1D16D, 0x1D16D, 0x05AE, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D16E, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D16E, 0x302A, 0x0062] }, +{ source: [0x0061, 0x1D16E, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D16E, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D16F, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D16F, 0x302A, 0x0062] }, +{ source: [0x0061, 0x1D16F, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D16F, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D170, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D170, 0x302A, 0x0062] }, +{ source: [0x0061, 0x1D170, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D170, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D171, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D171, 0x302A, 0x0062] }, +{ source: [0x0061, 0x1D171, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D171, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x302A, 0x031B, 0x1DCE, 0x1D172, 0x0062], NFC: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x031B, 0x1D172, 0x302A, 0x0062] }, +{ source: [0x0061, 0x1D172, 0x302A, 0x031B, 0x1DCE, 0x0062], NFC: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062], NFD: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062], NFKC: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062], NFKD: [0x0061, 0x1DCE, 0x1D172, 0x031B, 0x302A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17C, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17C, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17C, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17C, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17D, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17D, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17D, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17D, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17E, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17E, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17E, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17E, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D17F, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D17F, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D17F, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D17F, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D180, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D180, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D180, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D180, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D181, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D181, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D181, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D181, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D182, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D182, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D182, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D182, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D185, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D185, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D185, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D185, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D185, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D185, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D185, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D186, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D186, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D186, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D186, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D186, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D186, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D186, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D187, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D187, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D187, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D187, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D187, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D187, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D187, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D188, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D188, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D188, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D188, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D188, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D188, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D188, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D189, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D189, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D189, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D189, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D189, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D189, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D189, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D18A, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D18A, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D18A, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D18A, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x059A, 0x0316, 0x302A, 0x1D18B, 0x0062], NFC: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x0316, 0x1D18B, 0x059A, 0x0062] }, +{ source: [0x0061, 0x1D18B, 0x059A, 0x0316, 0x302A, 0x0062], NFC: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062], NFD: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062], NFKC: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062], NFKD: [0x0061, 0x302A, 0x1D18B, 0x0316, 0x059A, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AA, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AA, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AA, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AA, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AA, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AA, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AA, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AB, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AB, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AB, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AB, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AB, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AB, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AB, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AC, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AC, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AC, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AC, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AC, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AC, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AC, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D1AD, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D1AD, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D1AD, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D1AD, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D1AD, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D1AD, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D1AD, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D242, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D242, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D242, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D242, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D242, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D242, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D242, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D243, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D243, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D243, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D243, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D243, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D243, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D243, 0x0300, 0x0315, 0x0062] }, +{ source: [0x0061, 0x0315, 0x0300, 0x05AE, 0x1D244, 0x0062], NFC: [0x00E0, 0x05AE, 0x1D244, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x0300, 0x1D244, 0x0315, 0x0062], NFKC: [0x00E0, 0x05AE, 0x1D244, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x0300, 0x1D244, 0x0315, 0x0062] }, +{ source: [0x0061, 0x1D244, 0x0315, 0x0300, 0x05AE, 0x0062], NFC: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFD: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFKC: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062], NFKD: [0x0061, 0x05AE, 0x1D244, 0x0300, 0x0315, 0x0062] } +]; +/* Part3 # PRI #29 Test */ +var tests_part3 = [ +{ source: [0x09C7, 0x0334, 0x09BE], NFC: [0x09C7, 0x0334, 0x09BE], NFD: [0x09C7, 0x0334, 0x09BE], NFKC: [0x09C7, 0x0334, 0x09BE], NFKD: [0x09C7, 0x0334, 0x09BE] }, +{ source: [0x09C7, 0x0334, 0x09D7], NFC: [0x09C7, 0x0334, 0x09D7], NFD: [0x09C7, 0x0334, 0x09D7], NFKC: [0x09C7, 0x0334, 0x09D7], NFKD: [0x09C7, 0x0334, 0x09D7] }, +{ source: [0x0B47, 0x0334, 0x0B3E], NFC: [0x0B47, 0x0334, 0x0B3E], NFD: [0x0B47, 0x0334, 0x0B3E], NFKC: [0x0B47, 0x0334, 0x0B3E], NFKD: [0x0B47, 0x0334, 0x0B3E] }, +{ source: [0x0B47, 0x0334, 0x0B56], NFC: [0x0B47, 0x0334, 0x0B56], NFD: [0x0B47, 0x0334, 0x0B56], NFKC: [0x0B47, 0x0334, 0x0B56], NFKD: [0x0B47, 0x0334, 0x0B56] }, +{ source: [0x0B47, 0x0334, 0x0B57], NFC: [0x0B47, 0x0334, 0x0B57], NFD: [0x0B47, 0x0334, 0x0B57], NFKC: [0x0B47, 0x0334, 0x0B57], NFKD: [0x0B47, 0x0334, 0x0B57] }, +{ source: [0x0B92, 0x0334, 0x0BD7], NFC: [0x0B92, 0x0334, 0x0BD7], NFD: [0x0B92, 0x0334, 0x0BD7], NFKC: [0x0B92, 0x0334, 0x0BD7], NFKD: [0x0B92, 0x0334, 0x0BD7] }, +{ source: [0x0BC6, 0x0334, 0x0BBE], NFC: [0x0BC6, 0x0334, 0x0BBE], NFD: [0x0BC6, 0x0334, 0x0BBE], NFKC: [0x0BC6, 0x0334, 0x0BBE], NFKD: [0x0BC6, 0x0334, 0x0BBE] }, +{ source: [0x0BC6, 0x0334, 0x0BD7], NFC: [0x0BC6, 0x0334, 0x0BD7], NFD: [0x0BC6, 0x0334, 0x0BD7], NFKC: [0x0BC6, 0x0334, 0x0BD7], NFKD: [0x0BC6, 0x0334, 0x0BD7] }, +{ source: [0x0BC7, 0x0334, 0x0BBE], NFC: [0x0BC7, 0x0334, 0x0BBE], NFD: [0x0BC7, 0x0334, 0x0BBE], NFKC: [0x0BC7, 0x0334, 0x0BBE], NFKD: [0x0BC7, 0x0334, 0x0BBE] }, +{ source: [0x0CBF, 0x0334, 0x0CD5], NFC: [0x0CBF, 0x0334, 0x0CD5], NFD: [0x0CBF, 0x0334, 0x0CD5], NFKC: [0x0CBF, 0x0334, 0x0CD5], NFKD: [0x0CBF, 0x0334, 0x0CD5] }, +{ source: [0x0CC6, 0x0334, 0x0CC2], NFC: [0x0CC6, 0x0334, 0x0CC2], NFD: [0x0CC6, 0x0334, 0x0CC2], NFKC: [0x0CC6, 0x0334, 0x0CC2], NFKD: [0x0CC6, 0x0334, 0x0CC2] }, +{ source: [0x0CC6, 0x0334, 0x0CD5], NFC: [0x0CC6, 0x0334, 0x0CD5], NFD: [0x0CC6, 0x0334, 0x0CD5], NFKC: [0x0CC6, 0x0334, 0x0CD5], NFKD: [0x0CC6, 0x0334, 0x0CD5] }, +{ source: [0x0CC6, 0x0334, 0x0CD6], NFC: [0x0CC6, 0x0334, 0x0CD6], NFD: [0x0CC6, 0x0334, 0x0CD6], NFKC: [0x0CC6, 0x0334, 0x0CD6], NFKD: [0x0CC6, 0x0334, 0x0CD6] }, +{ source: [0x0CCA, 0x0334, 0x0CD5], NFC: [0x0CCA, 0x0334, 0x0CD5], NFD: [0x0CC6, 0x0CC2, 0x0334, 0x0CD5], NFKC: [0x0CCA, 0x0334, 0x0CD5], NFKD: [0x0CC6, 0x0CC2, 0x0334, 0x0CD5] }, +{ source: [0x0D46, 0x0334, 0x0D3E], NFC: [0x0D46, 0x0334, 0x0D3E], NFD: [0x0D46, 0x0334, 0x0D3E], NFKC: [0x0D46, 0x0334, 0x0D3E], NFKD: [0x0D46, 0x0334, 0x0D3E] }, +{ source: [0x0D46, 0x0334, 0x0D57], NFC: [0x0D46, 0x0334, 0x0D57], NFD: [0x0D46, 0x0334, 0x0D57], NFKC: [0x0D46, 0x0334, 0x0D57], NFKD: [0x0D46, 0x0334, 0x0D57] }, +{ source: [0x0D47, 0x0334, 0x0D3E], NFC: [0x0D47, 0x0334, 0x0D3E], NFD: [0x0D47, 0x0334, 0x0D3E], NFKC: [0x0D47, 0x0334, 0x0D3E], NFKD: [0x0D47, 0x0334, 0x0D3E] }, +{ source: [0x0DD9, 0x0334, 0x0DCF], NFC: [0x0DD9, 0x0334, 0x0DCF], NFD: [0x0DD9, 0x0334, 0x0DCF], NFKC: [0x0DD9, 0x0334, 0x0DCF], NFKD: [0x0DD9, 0x0334, 0x0DCF] }, +{ source: [0x0DD9, 0x0334, 0x0DDF], NFC: [0x0DD9, 0x0334, 0x0DDF], NFD: [0x0DD9, 0x0334, 0x0DDF], NFKC: [0x0DD9, 0x0334, 0x0DDF], NFKD: [0x0DD9, 0x0334, 0x0DDF] }, +{ source: [0x0F40, 0x0334, 0x0FB5], NFC: [0x0F40, 0x0334, 0x0FB5], NFD: [0x0F40, 0x0334, 0x0FB5], NFKC: [0x0F40, 0x0334, 0x0FB5], NFKD: [0x0F40, 0x0334, 0x0FB5] }, +{ source: [0x0F42, 0x0334, 0x0FB7], NFC: [0x0F42, 0x0334, 0x0FB7], NFD: [0x0F42, 0x0334, 0x0FB7], NFKC: [0x0F42, 0x0334, 0x0FB7], NFKD: [0x0F42, 0x0334, 0x0FB7] }, +{ source: [0x0F4C, 0x0334, 0x0FB7], NFC: [0x0F4C, 0x0334, 0x0FB7], NFD: [0x0F4C, 0x0334, 0x0FB7], NFKC: [0x0F4C, 0x0334, 0x0FB7], NFKD: [0x0F4C, 0x0334, 0x0FB7] }, +{ source: [0x0F51, 0x0334, 0x0FB7], NFC: [0x0F51, 0x0334, 0x0FB7], NFD: [0x0F51, 0x0334, 0x0FB7], NFKC: [0x0F51, 0x0334, 0x0FB7], NFKD: [0x0F51, 0x0334, 0x0FB7] }, +{ source: [0x0F56, 0x0334, 0x0FB7], NFC: [0x0F56, 0x0334, 0x0FB7], NFD: [0x0F56, 0x0334, 0x0FB7], NFKC: [0x0F56, 0x0334, 0x0FB7], NFKD: [0x0F56, 0x0334, 0x0FB7] }, +{ source: [0x0F5B, 0x0334, 0x0FB7], NFC: [0x0F5B, 0x0334, 0x0FB7], NFD: [0x0F5B, 0x0334, 0x0FB7], NFKC: [0x0F5B, 0x0334, 0x0FB7], NFKD: [0x0F5B, 0x0334, 0x0FB7] }, +{ source: [0x0F90, 0x0334, 0x0FB5], NFC: [0x0F90, 0x0334, 0x0FB5], NFD: [0x0F90, 0x0334, 0x0FB5], NFKC: [0x0F90, 0x0334, 0x0FB5], NFKD: [0x0F90, 0x0334, 0x0FB5] }, +{ source: [0x0F92, 0x0334, 0x0FB7], NFC: [0x0F92, 0x0334, 0x0FB7], NFD: [0x0F92, 0x0334, 0x0FB7], NFKC: [0x0F92, 0x0334, 0x0FB7], NFKD: [0x0F92, 0x0334, 0x0FB7] }, +{ source: [0x0F9C, 0x0334, 0x0FB7], NFC: [0x0F9C, 0x0334, 0x0FB7], NFD: [0x0F9C, 0x0334, 0x0FB7], NFKC: [0x0F9C, 0x0334, 0x0FB7], NFKD: [0x0F9C, 0x0334, 0x0FB7] }, +{ source: [0x0FA1, 0x0334, 0x0FB7], NFC: [0x0FA1, 0x0334, 0x0FB7], NFD: [0x0FA1, 0x0334, 0x0FB7], NFKC: [0x0FA1, 0x0334, 0x0FB7], NFKD: [0x0FA1, 0x0334, 0x0FB7] }, +{ source: [0x0FA6, 0x0334, 0x0FB7], NFC: [0x0FA6, 0x0334, 0x0FB7], NFD: [0x0FA6, 0x0334, 0x0FB7], NFKC: [0x0FA6, 0x0334, 0x0FB7], NFKD: [0x0FA6, 0x0334, 0x0FB7] }, +{ source: [0x0FAB, 0x0334, 0x0FB7], NFC: [0x0FAB, 0x0334, 0x0FB7], NFD: [0x0FAB, 0x0334, 0x0FB7], NFKC: [0x0FAB, 0x0334, 0x0FB7], NFKD: [0x0FAB, 0x0334, 0x0FB7] }, +{ source: [0x1025, 0x0334, 0x102E], NFC: [0x1025, 0x0334, 0x102E], NFD: [0x1025, 0x0334, 0x102E], NFKC: [0x1025, 0x0334, 0x102E], NFKD: [0x1025, 0x0334, 0x102E] }, +{ source: [0x1100, 0x0334, 0x1161], NFC: [0x1100, 0x0334, 0x1161], NFD: [0x1100, 0x0334, 0x1161], NFKC: [0x1100, 0x0334, 0x1161], NFKD: [0x1100, 0x0334, 0x1161] }, +{ source: [0x1100, 0x0334, 0x116E], NFC: [0x1100, 0x0334, 0x116E], NFD: [0x1100, 0x0334, 0x116E], NFKC: [0x1100, 0x0334, 0x116E], NFKD: [0x1100, 0x0334, 0x116E] }, +{ source: [0x1101, 0x0334, 0x1166], NFC: [0x1101, 0x0334, 0x1166], NFD: [0x1101, 0x0334, 0x1166], NFKC: [0x1101, 0x0334, 0x1166], NFKD: [0x1101, 0x0334, 0x1166] }, +{ source: [0x1101, 0x0334, 0x1173], NFC: [0x1101, 0x0334, 0x1173], NFD: [0x1101, 0x0334, 0x1173], NFKC: [0x1101, 0x0334, 0x1173], NFKD: [0x1101, 0x0334, 0x1173] }, +{ source: [0x1102, 0x0334, 0x116B], NFC: [0x1102, 0x0334, 0x116B], NFD: [0x1102, 0x0334, 0x116B], NFKC: [0x1102, 0x0334, 0x116B], NFKD: [0x1102, 0x0334, 0x116B] }, +{ source: [0x1103, 0x0334, 0x1163], NFC: [0x1103, 0x0334, 0x1163], NFD: [0x1103, 0x0334, 0x1163], NFKC: [0x1103, 0x0334, 0x1163], NFKD: [0x1103, 0x0334, 0x1163] }, +{ source: [0x1103, 0x0334, 0x1170], NFC: [0x1103, 0x0334, 0x1170], NFD: [0x1103, 0x0334, 0x1170], NFKC: [0x1103, 0x0334, 0x1170], NFKD: [0x1103, 0x0334, 0x1170] }, +{ source: [0x1104, 0x0334, 0x1168], NFC: [0x1104, 0x0334, 0x1168], NFD: [0x1104, 0x0334, 0x1168], NFKC: [0x1104, 0x0334, 0x1168], NFKD: [0x1104, 0x0334, 0x1168] }, +{ source: [0x1104, 0x0334, 0x1175], NFC: [0x1104, 0x0334, 0x1175], NFD: [0x1104, 0x0334, 0x1175], NFKC: [0x1104, 0x0334, 0x1175], NFKD: [0x1104, 0x0334, 0x1175] }, +{ source: [0x1105, 0x0334, 0x116D], NFC: [0x1105, 0x0334, 0x116D], NFD: [0x1105, 0x0334, 0x116D], NFKC: [0x1105, 0x0334, 0x116D], NFKD: [0x1105, 0x0334, 0x116D] }, +{ source: [0x1106, 0x0334, 0x1165], NFC: [0x1106, 0x0334, 0x1165], NFD: [0x1106, 0x0334, 0x1165], NFKC: [0x1106, 0x0334, 0x1165], NFKD: [0x1106, 0x0334, 0x1165] }, +{ source: [0x1106, 0x0334, 0x1172], NFC: [0x1106, 0x0334, 0x1172], NFD: [0x1106, 0x0334, 0x1172], NFKC: [0x1106, 0x0334, 0x1172], NFKD: [0x1106, 0x0334, 0x1172] }, +{ source: [0x1107, 0x0334, 0x116A], NFC: [0x1107, 0x0334, 0x116A], NFD: [0x1107, 0x0334, 0x116A], NFKC: [0x1107, 0x0334, 0x116A], NFKD: [0x1107, 0x0334, 0x116A] }, +{ source: [0x1108, 0x0334, 0x1162], NFC: [0x1108, 0x0334, 0x1162], NFD: [0x1108, 0x0334, 0x1162], NFKC: [0x1108, 0x0334, 0x1162], NFKD: [0x1108, 0x0334, 0x1162] }, +{ source: [0x1108, 0x0334, 0x116F], NFC: [0x1108, 0x0334, 0x116F], NFD: [0x1108, 0x0334, 0x116F], NFKC: [0x1108, 0x0334, 0x116F], NFKD: [0x1108, 0x0334, 0x116F] }, +{ source: [0x1109, 0x0334, 0x1167], NFC: [0x1109, 0x0334, 0x1167], NFD: [0x1109, 0x0334, 0x1167], NFKC: [0x1109, 0x0334, 0x1167], NFKD: [0x1109, 0x0334, 0x1167] }, +{ source: [0x1109, 0x0334, 0x1174], NFC: [0x1109, 0x0334, 0x1174], NFD: [0x1109, 0x0334, 0x1174], NFKC: [0x1109, 0x0334, 0x1174], NFKD: [0x1109, 0x0334, 0x1174] }, +{ source: [0x110A, 0x0334, 0x116C], NFC: [0x110A, 0x0334, 0x116C], NFD: [0x110A, 0x0334, 0x116C], NFKC: [0x110A, 0x0334, 0x116C], NFKD: [0x110A, 0x0334, 0x116C] }, +{ source: [0x110B, 0x0334, 0x1164], NFC: [0x110B, 0x0334, 0x1164], NFD: [0x110B, 0x0334, 0x1164], NFKC: [0x110B, 0x0334, 0x1164], NFKD: [0x110B, 0x0334, 0x1164] }, +{ source: [0x110B, 0x0334, 0x1171], NFC: [0x110B, 0x0334, 0x1171], NFD: [0x110B, 0x0334, 0x1171], NFKC: [0x110B, 0x0334, 0x1171], NFKD: [0x110B, 0x0334, 0x1171] }, +{ source: [0x110C, 0x0334, 0x1169], NFC: [0x110C, 0x0334, 0x1169], NFD: [0x110C, 0x0334, 0x1169], NFKC: [0x110C, 0x0334, 0x1169], NFKD: [0x110C, 0x0334, 0x1169] }, +{ source: [0x110D, 0x0334, 0x1161], NFC: [0x110D, 0x0334, 0x1161], NFD: [0x110D, 0x0334, 0x1161], NFKC: [0x110D, 0x0334, 0x1161], NFKD: [0x110D, 0x0334, 0x1161] }, +{ source: [0x110D, 0x0334, 0x116E], NFC: [0x110D, 0x0334, 0x116E], NFD: [0x110D, 0x0334, 0x116E], NFKC: [0x110D, 0x0334, 0x116E], NFKD: [0x110D, 0x0334, 0x116E] }, +{ source: [0x110E, 0x0334, 0x1166], NFC: [0x110E, 0x0334, 0x1166], NFD: [0x110E, 0x0334, 0x1166], NFKC: [0x110E, 0x0334, 0x1166], NFKD: [0x110E, 0x0334, 0x1166] }, +{ source: [0x110E, 0x0334, 0x1173], NFC: [0x110E, 0x0334, 0x1173], NFD: [0x110E, 0x0334, 0x1173], NFKC: [0x110E, 0x0334, 0x1173], NFKD: [0x110E, 0x0334, 0x1173] }, +{ source: [0x110F, 0x0334, 0x116B], NFC: [0x110F, 0x0334, 0x116B], NFD: [0x110F, 0x0334, 0x116B], NFKC: [0x110F, 0x0334, 0x116B], NFKD: [0x110F, 0x0334, 0x116B] }, +{ source: [0x1110, 0x0334, 0x1163], NFC: [0x1110, 0x0334, 0x1163], NFD: [0x1110, 0x0334, 0x1163], NFKC: [0x1110, 0x0334, 0x1163], NFKD: [0x1110, 0x0334, 0x1163] }, +{ source: [0x1110, 0x0334, 0x1170], NFC: [0x1110, 0x0334, 0x1170], NFD: [0x1110, 0x0334, 0x1170], NFKC: [0x1110, 0x0334, 0x1170], NFKD: [0x1110, 0x0334, 0x1170] }, +{ source: [0x1111, 0x0334, 0x1168], NFC: [0x1111, 0x0334, 0x1168], NFD: [0x1111, 0x0334, 0x1168], NFKC: [0x1111, 0x0334, 0x1168], NFKD: [0x1111, 0x0334, 0x1168] }, +{ source: [0x1111, 0x0334, 0x1175], NFC: [0x1111, 0x0334, 0x1175], NFD: [0x1111, 0x0334, 0x1175], NFKC: [0x1111, 0x0334, 0x1175], NFKD: [0x1111, 0x0334, 0x1175] }, +{ source: [0x1112, 0x0334, 0x116D], NFC: [0x1112, 0x0334, 0x116D], NFD: [0x1112, 0x0334, 0x116D], NFKC: [0x1112, 0x0334, 0x116D], NFKD: [0x1112, 0x0334, 0x116D] }, +{ source: [0x1B05, 0x0334, 0x1B35], NFC: [0x1B05, 0x0334, 0x1B35], NFD: [0x1B05, 0x0334, 0x1B35], NFKC: [0x1B05, 0x0334, 0x1B35], NFKD: [0x1B05, 0x0334, 0x1B35] }, +{ source: [0x1B07, 0x0334, 0x1B35], NFC: [0x1B07, 0x0334, 0x1B35], NFD: [0x1B07, 0x0334, 0x1B35], NFKC: [0x1B07, 0x0334, 0x1B35], NFKD: [0x1B07, 0x0334, 0x1B35] }, +{ source: [0x1B09, 0x0334, 0x1B35], NFC: [0x1B09, 0x0334, 0x1B35], NFD: [0x1B09, 0x0334, 0x1B35], NFKC: [0x1B09, 0x0334, 0x1B35], NFKD: [0x1B09, 0x0334, 0x1B35] }, +{ source: [0x1B0B, 0x0334, 0x1B35], NFC: [0x1B0B, 0x0334, 0x1B35], NFD: [0x1B0B, 0x0334, 0x1B35], NFKC: [0x1B0B, 0x0334, 0x1B35], NFKD: [0x1B0B, 0x0334, 0x1B35] }, +{ source: [0x1B0D, 0x0334, 0x1B35], NFC: [0x1B0D, 0x0334, 0x1B35], NFD: [0x1B0D, 0x0334, 0x1B35], NFKC: [0x1B0D, 0x0334, 0x1B35], NFKD: [0x1B0D, 0x0334, 0x1B35] }, +{ source: [0x1B11, 0x0334, 0x1B35], NFC: [0x1B11, 0x0334, 0x1B35], NFD: [0x1B11, 0x0334, 0x1B35], NFKC: [0x1B11, 0x0334, 0x1B35], NFKD: [0x1B11, 0x0334, 0x1B35] }, +{ source: [0x1B3A, 0x0334, 0x1B35], NFC: [0x1B3A, 0x0334, 0x1B35], NFD: [0x1B3A, 0x0334, 0x1B35], NFKC: [0x1B3A, 0x0334, 0x1B35], NFKD: [0x1B3A, 0x0334, 0x1B35] }, +{ source: [0x1B3C, 0x0334, 0x1B35], NFC: [0x1B3C, 0x0334, 0x1B35], NFD: [0x1B3C, 0x0334, 0x1B35], NFKC: [0x1B3C, 0x0334, 0x1B35], NFKD: [0x1B3C, 0x0334, 0x1B35] }, +{ source: [0x1B3E, 0x0334, 0x1B35], NFC: [0x1B3E, 0x0334, 0x1B35], NFD: [0x1B3E, 0x0334, 0x1B35], NFKC: [0x1B3E, 0x0334, 0x1B35], NFKD: [0x1B3E, 0x0334, 0x1B35] }, +{ source: [0x1B3F, 0x0334, 0x1B35], NFC: [0x1B3F, 0x0334, 0x1B35], NFD: [0x1B3F, 0x0334, 0x1B35], NFKC: [0x1B3F, 0x0334, 0x1B35], NFKD: [0x1B3F, 0x0334, 0x1B35] }, +{ source: [0x1B42, 0x0334, 0x1B35], NFC: [0x1B42, 0x0334, 0x1B35], NFD: [0x1B42, 0x0334, 0x1B35], NFKC: [0x1B42, 0x0334, 0x1B35], NFKD: [0x1B42, 0x0334, 0x1B35] }, +{ source: [0xAC54, 0x0334, 0x11AE], NFC: [0xAC54, 0x0334, 0x11AE], NFD: [0x1100, 0x1164, 0x0334, 0x11AE], NFKC: [0xAC54, 0x0334, 0x11AE], NFKD: [0x1100, 0x1164, 0x0334, 0x11AE] }, +{ source: [0xACA8, 0x0334, 0x11B5], NFC: [0xACA8, 0x0334, 0x11B5], NFD: [0x1100, 0x1167, 0x0334, 0x11B5], NFKC: [0xACA8, 0x0334, 0x11B5], NFKD: [0x1100, 0x1167, 0x0334, 0x11B5] }, +{ source: [0xACFC, 0x0334, 0x11BC], NFC: [0xACFC, 0x0334, 0x11BC], NFD: [0x1100, 0x116A, 0x0334, 0x11BC], NFKC: [0xACFC, 0x0334, 0x11BC], NFKD: [0x1100, 0x116A, 0x0334, 0x11BC] }, +{ source: [0xADC0, 0x0334, 0x11AE], NFC: [0xADC0, 0x0334, 0x11AE], NFD: [0x1100, 0x1171, 0x0334, 0x11AE], NFKC: [0xADC0, 0x0334, 0x11AE], NFKD: [0x1100, 0x1171, 0x0334, 0x11AE] }, +{ source: [0xAE14, 0x0334, 0x11B5], NFC: [0xAE14, 0x0334, 0x11B5], NFD: [0x1100, 0x1174, 0x0334, 0x11B5], NFKC: [0xAE14, 0x0334, 0x11B5], NFKD: [0x1100, 0x1174, 0x0334, 0x11B5] }, +{ source: [0xAE68, 0x0334, 0x11BC], NFC: [0xAE68, 0x0334, 0x11BC], NFD: [0x1101, 0x1162, 0x0334, 0x11BC], NFKC: [0xAE68, 0x0334, 0x11BC], NFKD: [0x1101, 0x1162, 0x0334, 0x11BC] }, +{ source: [0xAF2C, 0x0334, 0x11AE], NFC: [0xAF2C, 0x0334, 0x11AE], NFD: [0x1101, 0x1169, 0x0334, 0x11AE], NFKC: [0xAF2C, 0x0334, 0x11AE], NFKD: [0x1101, 0x1169, 0x0334, 0x11AE] }, +{ source: [0xAF80, 0x0334, 0x11B5], NFC: [0xAF80, 0x0334, 0x11B5], NFD: [0x1101, 0x116C, 0x0334, 0x11B5], NFKC: [0xAF80, 0x0334, 0x11B5], NFKD: [0x1101, 0x116C, 0x0334, 0x11B5] }, +{ source: [0xAFD4, 0x0334, 0x11BC], NFC: [0xAFD4, 0x0334, 0x11BC], NFD: [0x1101, 0x116F, 0x0334, 0x11BC], NFKC: [0xAFD4, 0x0334, 0x11BC], NFKD: [0x1101, 0x116F, 0x0334, 0x11BC] }, +{ source: [0xB098, 0x0334, 0x11AE], NFC: [0xB098, 0x0334, 0x11AE], NFD: [0x1102, 0x1161, 0x0334, 0x11AE], NFKC: [0xB098, 0x0334, 0x11AE], NFKD: [0x1102, 0x1161, 0x0334, 0x11AE] }, +{ source: [0xB0EC, 0x0334, 0x11B5], NFC: [0xB0EC, 0x0334, 0x11B5], NFD: [0x1102, 0x1164, 0x0334, 0x11B5], NFKC: [0xB0EC, 0x0334, 0x11B5], NFKD: [0x1102, 0x1164, 0x0334, 0x11B5] }, +{ source: [0xB140, 0x0334, 0x11BC], NFC: [0xB140, 0x0334, 0x11BC], NFD: [0x1102, 0x1167, 0x0334, 0x11BC], NFKC: [0xB140, 0x0334, 0x11BC], NFKD: [0x1102, 0x1167, 0x0334, 0x11BC] }, +{ source: [0xB204, 0x0334, 0x11AE], NFC: [0xB204, 0x0334, 0x11AE], NFD: [0x1102, 0x116E, 0x0334, 0x11AE], NFKC: [0xB204, 0x0334, 0x11AE], NFKD: [0x1102, 0x116E, 0x0334, 0x11AE] }, +{ source: [0xB258, 0x0334, 0x11B5], NFC: [0xB258, 0x0334, 0x11B5], NFD: [0x1102, 0x1171, 0x0334, 0x11B5], NFKC: [0xB258, 0x0334, 0x11B5], NFKD: [0x1102, 0x1171, 0x0334, 0x11B5] }, +{ source: [0xB2AC, 0x0334, 0x11BC], NFC: [0xB2AC, 0x0334, 0x11BC], NFD: [0x1102, 0x1174, 0x0334, 0x11BC], NFKC: [0xB2AC, 0x0334, 0x11BC], NFKD: [0x1102, 0x1174, 0x0334, 0x11BC] }, +{ source: [0xB370, 0x0334, 0x11AE], NFC: [0xB370, 0x0334, 0x11AE], NFD: [0x1103, 0x1166, 0x0334, 0x11AE], NFKC: [0xB370, 0x0334, 0x11AE], NFKD: [0x1103, 0x1166, 0x0334, 0x11AE] }, +{ source: [0xB3C4, 0x0334, 0x11B5], NFC: [0xB3C4, 0x0334, 0x11B5], NFD: [0x1103, 0x1169, 0x0334, 0x11B5], NFKC: [0xB3C4, 0x0334, 0x11B5], NFKD: [0x1103, 0x1169, 0x0334, 0x11B5] }, +{ source: [0xB418, 0x0334, 0x11BC], NFC: [0xB418, 0x0334, 0x11BC], NFD: [0x1103, 0x116C, 0x0334, 0x11BC], NFKC: [0xB418, 0x0334, 0x11BC], NFKD: [0x1103, 0x116C, 0x0334, 0x11BC] }, +{ source: [0xB4DC, 0x0334, 0x11AE], NFC: [0xB4DC, 0x0334, 0x11AE], NFD: [0x1103, 0x1173, 0x0334, 0x11AE], NFKC: [0xB4DC, 0x0334, 0x11AE], NFKD: [0x1103, 0x1173, 0x0334, 0x11AE] }, +{ source: [0xB530, 0x0334, 0x11B5], NFC: [0xB530, 0x0334, 0x11B5], NFD: [0x1104, 0x1161, 0x0334, 0x11B5], NFKC: [0xB530, 0x0334, 0x11B5], NFKD: [0x1104, 0x1161, 0x0334, 0x11B5] }, +{ source: [0xB584, 0x0334, 0x11BC], NFC: [0xB584, 0x0334, 0x11BC], NFD: [0x1104, 0x1164, 0x0334, 0x11BC], NFKC: [0xB584, 0x0334, 0x11BC], NFKD: [0x1104, 0x1164, 0x0334, 0x11BC] }, +{ source: [0xB648, 0x0334, 0x11AE], NFC: [0xB648, 0x0334, 0x11AE], NFD: [0x1104, 0x116B, 0x0334, 0x11AE], NFKC: [0xB648, 0x0334, 0x11AE], NFKD: [0x1104, 0x116B, 0x0334, 0x11AE] }, +{ source: [0xB69C, 0x0334, 0x11B5], NFC: [0xB69C, 0x0334, 0x11B5], NFD: [0x1104, 0x116E, 0x0334, 0x11B5], NFKC: [0xB69C, 0x0334, 0x11B5], NFKD: [0x1104, 0x116E, 0x0334, 0x11B5] }, +{ source: [0xB6F0, 0x0334, 0x11BC], NFC: [0xB6F0, 0x0334, 0x11BC], NFD: [0x1104, 0x1171, 0x0334, 0x11BC], NFKC: [0xB6F0, 0x0334, 0x11BC], NFKD: [0x1104, 0x1171, 0x0334, 0x11BC] }, +{ source: [0xB7B4, 0x0334, 0x11AE], NFC: [0xB7B4, 0x0334, 0x11AE], NFD: [0x1105, 0x1163, 0x0334, 0x11AE], NFKC: [0xB7B4, 0x0334, 0x11AE], NFKD: [0x1105, 0x1163, 0x0334, 0x11AE] }, +{ source: [0xB808, 0x0334, 0x11B5], NFC: [0xB808, 0x0334, 0x11B5], NFD: [0x1105, 0x1166, 0x0334, 0x11B5], NFKC: [0xB808, 0x0334, 0x11B5], NFKD: [0x1105, 0x1166, 0x0334, 0x11B5] }, +{ source: [0xB85C, 0x0334, 0x11BC], NFC: [0xB85C, 0x0334, 0x11BC], NFD: [0x1105, 0x1169, 0x0334, 0x11BC], NFKC: [0xB85C, 0x0334, 0x11BC], NFKD: [0x1105, 0x1169, 0x0334, 0x11BC] }, +{ source: [0xB920, 0x0334, 0x11AE], NFC: [0xB920, 0x0334, 0x11AE], NFD: [0x1105, 0x1170, 0x0334, 0x11AE], NFKC: [0xB920, 0x0334, 0x11AE], NFKD: [0x1105, 0x1170, 0x0334, 0x11AE] }, +{ source: [0xB974, 0x0334, 0x11B5], NFC: [0xB974, 0x0334, 0x11B5], NFD: [0x1105, 0x1173, 0x0334, 0x11B5], NFKC: [0xB974, 0x0334, 0x11B5], NFKD: [0x1105, 0x1173, 0x0334, 0x11B5] }, +{ source: [0xB9C8, 0x0334, 0x11BC], NFC: [0xB9C8, 0x0334, 0x11BC], NFD: [0x1106, 0x1161, 0x0334, 0x11BC], NFKC: [0xB9C8, 0x0334, 0x11BC], NFKD: [0x1106, 0x1161, 0x0334, 0x11BC] }, +{ source: [0xBA8C, 0x0334, 0x11AE], NFC: [0xBA8C, 0x0334, 0x11AE], NFD: [0x1106, 0x1168, 0x0334, 0x11AE], NFKC: [0xBA8C, 0x0334, 0x11AE], NFKD: [0x1106, 0x1168, 0x0334, 0x11AE] }, +{ source: [0xBAE0, 0x0334, 0x11B5], NFC: [0xBAE0, 0x0334, 0x11B5], NFD: [0x1106, 0x116B, 0x0334, 0x11B5], NFKC: [0xBAE0, 0x0334, 0x11B5], NFKD: [0x1106, 0x116B, 0x0334, 0x11B5] }, +{ source: [0xBB34, 0x0334, 0x11BC], NFC: [0xBB34, 0x0334, 0x11BC], NFD: [0x1106, 0x116E, 0x0334, 0x11BC], NFKC: [0xBB34, 0x0334, 0x11BC], NFKD: [0x1106, 0x116E, 0x0334, 0x11BC] }, +{ source: [0xBBF8, 0x0334, 0x11AE], NFC: [0xBBF8, 0x0334, 0x11AE], NFD: [0x1106, 0x1175, 0x0334, 0x11AE], NFKC: [0xBBF8, 0x0334, 0x11AE], NFKD: [0x1106, 0x1175, 0x0334, 0x11AE] }, +{ source: [0xBC4C, 0x0334, 0x11B5], NFC: [0xBC4C, 0x0334, 0x11B5], NFD: [0x1107, 0x1163, 0x0334, 0x11B5], NFKC: [0xBC4C, 0x0334, 0x11B5], NFKD: [0x1107, 0x1163, 0x0334, 0x11B5] }, +{ source: [0xBCA0, 0x0334, 0x11BC], NFC: [0xBCA0, 0x0334, 0x11BC], NFD: [0x1107, 0x1166, 0x0334, 0x11BC], NFKC: [0xBCA0, 0x0334, 0x11BC], NFKD: [0x1107, 0x1166, 0x0334, 0x11BC] }, +{ source: [0xBD64, 0x0334, 0x11AE], NFC: [0xBD64, 0x0334, 0x11AE], NFD: [0x1107, 0x116D, 0x0334, 0x11AE], NFKC: [0xBD64, 0x0334, 0x11AE], NFKD: [0x1107, 0x116D, 0x0334, 0x11AE] }, +{ source: [0xBDB8, 0x0334, 0x11B5], NFC: [0xBDB8, 0x0334, 0x11B5], NFD: [0x1107, 0x1170, 0x0334, 0x11B5], NFKC: [0xBDB8, 0x0334, 0x11B5], NFKD: [0x1107, 0x1170, 0x0334, 0x11B5] }, +{ source: [0xBE0C, 0x0334, 0x11BC], NFC: [0xBE0C, 0x0334, 0x11BC], NFD: [0x1107, 0x1173, 0x0334, 0x11BC], NFKC: [0xBE0C, 0x0334, 0x11BC], NFKD: [0x1107, 0x1173, 0x0334, 0x11BC] }, +{ source: [0xBED0, 0x0334, 0x11AE], NFC: [0xBED0, 0x0334, 0x11AE], NFD: [0x1108, 0x1165, 0x0334, 0x11AE], NFKC: [0xBED0, 0x0334, 0x11AE], NFKD: [0x1108, 0x1165, 0x0334, 0x11AE] }, +{ source: [0xBF24, 0x0334, 0x11B5], NFC: [0xBF24, 0x0334, 0x11B5], NFD: [0x1108, 0x1168, 0x0334, 0x11B5], NFKC: [0xBF24, 0x0334, 0x11B5], NFKD: [0x1108, 0x1168, 0x0334, 0x11B5] }, +{ source: [0xBF78, 0x0334, 0x11BC], NFC: [0xBF78, 0x0334, 0x11BC], NFD: [0x1108, 0x116B, 0x0334, 0x11BC], NFKC: [0xBF78, 0x0334, 0x11BC], NFKD: [0x1108, 0x116B, 0x0334, 0x11BC] }, +{ source: [0xC03C, 0x0334, 0x11AE], NFC: [0xC03C, 0x0334, 0x11AE], NFD: [0x1108, 0x1172, 0x0334, 0x11AE], NFKC: [0xC03C, 0x0334, 0x11AE], NFKD: [0x1108, 0x1172, 0x0334, 0x11AE] }, +{ source: [0xC090, 0x0334, 0x11B5], NFC: [0xC090, 0x0334, 0x11B5], NFD: [0x1108, 0x1175, 0x0334, 0x11B5], NFKC: [0xC090, 0x0334, 0x11B5], NFKD: [0x1108, 0x1175, 0x0334, 0x11B5] }, +{ source: [0xC0E4, 0x0334, 0x11BC], NFC: [0xC0E4, 0x0334, 0x11BC], NFD: [0x1109, 0x1163, 0x0334, 0x11BC], NFKC: [0xC0E4, 0x0334, 0x11BC], NFKD: [0x1109, 0x1163, 0x0334, 0x11BC] }, +{ source: [0xC1A8, 0x0334, 0x11AE], NFC: [0xC1A8, 0x0334, 0x11AE], NFD: [0x1109, 0x116A, 0x0334, 0x11AE], NFKC: [0xC1A8, 0x0334, 0x11AE], NFKD: [0x1109, 0x116A, 0x0334, 0x11AE] }, +{ source: [0xC1FC, 0x0334, 0x11B5], NFC: [0xC1FC, 0x0334, 0x11B5], NFD: [0x1109, 0x116D, 0x0334, 0x11B5], NFKC: [0xC1FC, 0x0334, 0x11B5], NFKD: [0x1109, 0x116D, 0x0334, 0x11B5] }, +{ source: [0xC250, 0x0334, 0x11BC], NFC: [0xC250, 0x0334, 0x11BC], NFD: [0x1109, 0x1170, 0x0334, 0x11BC], NFKC: [0xC250, 0x0334, 0x11BC], NFKD: [0x1109, 0x1170, 0x0334, 0x11BC] }, +{ source: [0xC314, 0x0334, 0x11AE], NFC: [0xC314, 0x0334, 0x11AE], NFD: [0x110A, 0x1162, 0x0334, 0x11AE], NFKC: [0xC314, 0x0334, 0x11AE], NFKD: [0x110A, 0x1162, 0x0334, 0x11AE] }, +{ source: [0xC368, 0x0334, 0x11B5], NFC: [0xC368, 0x0334, 0x11B5], NFD: [0x110A, 0x1165, 0x0334, 0x11B5], NFKC: [0xC368, 0x0334, 0x11B5], NFKD: [0x110A, 0x1165, 0x0334, 0x11B5] }, +{ source: [0xC3BC, 0x0334, 0x11BC], NFC: [0xC3BC, 0x0334, 0x11BC], NFD: [0x110A, 0x1168, 0x0334, 0x11BC], NFKC: [0xC3BC, 0x0334, 0x11BC], NFKD: [0x110A, 0x1168, 0x0334, 0x11BC] }, +{ source: [0xC480, 0x0334, 0x11AE], NFC: [0xC480, 0x0334, 0x11AE], NFD: [0x110A, 0x116F, 0x0334, 0x11AE], NFKC: [0xC480, 0x0334, 0x11AE], NFKD: [0x110A, 0x116F, 0x0334, 0x11AE] }, +{ source: [0xC4D4, 0x0334, 0x11B5], NFC: [0xC4D4, 0x0334, 0x11B5], NFD: [0x110A, 0x1172, 0x0334, 0x11B5], NFKC: [0xC4D4, 0x0334, 0x11B5], NFKD: [0x110A, 0x1172, 0x0334, 0x11B5] }, +{ source: [0xC528, 0x0334, 0x11BC], NFC: [0xC528, 0x0334, 0x11BC], NFD: [0x110A, 0x1175, 0x0334, 0x11BC], NFKC: [0xC528, 0x0334, 0x11BC], NFKD: [0x110A, 0x1175, 0x0334, 0x11BC] }, +{ source: [0xC5EC, 0x0334, 0x11AE], NFC: [0xC5EC, 0x0334, 0x11AE], NFD: [0x110B, 0x1167, 0x0334, 0x11AE], NFKC: [0xC5EC, 0x0334, 0x11AE], NFKD: [0x110B, 0x1167, 0x0334, 0x11AE] }, +{ source: [0xC640, 0x0334, 0x11B5], NFC: [0xC640, 0x0334, 0x11B5], NFD: [0x110B, 0x116A, 0x0334, 0x11B5], NFKC: [0xC640, 0x0334, 0x11B5], NFKD: [0x110B, 0x116A, 0x0334, 0x11B5] }, +{ source: [0xC694, 0x0334, 0x11BC], NFC: [0xC694, 0x0334, 0x11BC], NFD: [0x110B, 0x116D, 0x0334, 0x11BC], NFKC: [0xC694, 0x0334, 0x11BC], NFKD: [0x110B, 0x116D, 0x0334, 0x11BC] }, +{ source: [0xC758, 0x0334, 0x11AE], NFC: [0xC758, 0x0334, 0x11AE], NFD: [0x110B, 0x1174, 0x0334, 0x11AE], NFKC: [0xC758, 0x0334, 0x11AE], NFKD: [0x110B, 0x1174, 0x0334, 0x11AE] }, +{ source: [0xC7AC, 0x0334, 0x11B5], NFC: [0xC7AC, 0x0334, 0x11B5], NFD: [0x110C, 0x1162, 0x0334, 0x11B5], NFKC: [0xC7AC, 0x0334, 0x11B5], NFKD: [0x110C, 0x1162, 0x0334, 0x11B5] }, +{ source: [0xC800, 0x0334, 0x11BC], NFC: [0xC800, 0x0334, 0x11BC], NFD: [0x110C, 0x1165, 0x0334, 0x11BC], NFKC: [0xC800, 0x0334, 0x11BC], NFKD: [0x110C, 0x1165, 0x0334, 0x11BC] }, +{ source: [0xC8C4, 0x0334, 0x11AE], NFC: [0xC8C4, 0x0334, 0x11AE], NFD: [0x110C, 0x116C, 0x0334, 0x11AE], NFKC: [0xC8C4, 0x0334, 0x11AE], NFKD: [0x110C, 0x116C, 0x0334, 0x11AE] }, +{ source: [0xC918, 0x0334, 0x11B5], NFC: [0xC918, 0x0334, 0x11B5], NFD: [0x110C, 0x116F, 0x0334, 0x11B5], NFKC: [0xC918, 0x0334, 0x11B5], NFKD: [0x110C, 0x116F, 0x0334, 0x11B5] }, +{ source: [0xC96C, 0x0334, 0x11BC], NFC: [0xC96C, 0x0334, 0x11BC], NFD: [0x110C, 0x1172, 0x0334, 0x11BC], NFKC: [0xC96C, 0x0334, 0x11BC], NFKD: [0x110C, 0x1172, 0x0334, 0x11BC] }, +{ source: [0xCA30, 0x0334, 0x11AE], NFC: [0xCA30, 0x0334, 0x11AE], NFD: [0x110D, 0x1164, 0x0334, 0x11AE], NFKC: [0xCA30, 0x0334, 0x11AE], NFKD: [0x110D, 0x1164, 0x0334, 0x11AE] }, +{ source: [0xCA84, 0x0334, 0x11B5], NFC: [0xCA84, 0x0334, 0x11B5], NFD: [0x110D, 0x1167, 0x0334, 0x11B5], NFKC: [0xCA84, 0x0334, 0x11B5], NFKD: [0x110D, 0x1167, 0x0334, 0x11B5] }, +{ source: [0xCAD8, 0x0334, 0x11BC], NFC: [0xCAD8, 0x0334, 0x11BC], NFD: [0x110D, 0x116A, 0x0334, 0x11BC], NFKC: [0xCAD8, 0x0334, 0x11BC], NFKD: [0x110D, 0x116A, 0x0334, 0x11BC] }, +{ source: [0xCB9C, 0x0334, 0x11AE], NFC: [0xCB9C, 0x0334, 0x11AE], NFD: [0x110D, 0x1171, 0x0334, 0x11AE], NFKC: [0xCB9C, 0x0334, 0x11AE], NFKD: [0x110D, 0x1171, 0x0334, 0x11AE] }, +{ source: [0xCBF0, 0x0334, 0x11B5], NFC: [0xCBF0, 0x0334, 0x11B5], NFD: [0x110D, 0x1174, 0x0334, 0x11B5], NFKC: [0xCBF0, 0x0334, 0x11B5], NFKD: [0x110D, 0x1174, 0x0334, 0x11B5] }, +{ source: [0xCC44, 0x0334, 0x11BC], NFC: [0xCC44, 0x0334, 0x11BC], NFD: [0x110E, 0x1162, 0x0334, 0x11BC], NFKC: [0xCC44, 0x0334, 0x11BC], NFKD: [0x110E, 0x1162, 0x0334, 0x11BC] }, +{ source: [0xCD08, 0x0334, 0x11AE], NFC: [0xCD08, 0x0334, 0x11AE], NFD: [0x110E, 0x1169, 0x0334, 0x11AE], NFKC: [0xCD08, 0x0334, 0x11AE], NFKD: [0x110E, 0x1169, 0x0334, 0x11AE] }, +{ source: [0xCD5C, 0x0334, 0x11B5], NFC: [0xCD5C, 0x0334, 0x11B5], NFD: [0x110E, 0x116C, 0x0334, 0x11B5], NFKC: [0xCD5C, 0x0334, 0x11B5], NFKD: [0x110E, 0x116C, 0x0334, 0x11B5] }, +{ source: [0xCDB0, 0x0334, 0x11BC], NFC: [0xCDB0, 0x0334, 0x11BC], NFD: [0x110E, 0x116F, 0x0334, 0x11BC], NFKC: [0xCDB0, 0x0334, 0x11BC], NFKD: [0x110E, 0x116F, 0x0334, 0x11BC] }, +{ source: [0xCE74, 0x0334, 0x11AE], NFC: [0xCE74, 0x0334, 0x11AE], NFD: [0x110F, 0x1161, 0x0334, 0x11AE], NFKC: [0xCE74, 0x0334, 0x11AE], NFKD: [0x110F, 0x1161, 0x0334, 0x11AE] }, +{ source: [0xCEC8, 0x0334, 0x11B5], NFC: [0xCEC8, 0x0334, 0x11B5], NFD: [0x110F, 0x1164, 0x0334, 0x11B5], NFKC: [0xCEC8, 0x0334, 0x11B5], NFKD: [0x110F, 0x1164, 0x0334, 0x11B5] }, +{ source: [0xCF1C, 0x0334, 0x11BC], NFC: [0xCF1C, 0x0334, 0x11BC], NFD: [0x110F, 0x1167, 0x0334, 0x11BC], NFKC: [0xCF1C, 0x0334, 0x11BC], NFKD: [0x110F, 0x1167, 0x0334, 0x11BC] }, +{ source: [0xCFE0, 0x0334, 0x11AE], NFC: [0xCFE0, 0x0334, 0x11AE], NFD: [0x110F, 0x116E, 0x0334, 0x11AE], NFKC: [0xCFE0, 0x0334, 0x11AE], NFKD: [0x110F, 0x116E, 0x0334, 0x11AE] }, +{ source: [0xD034, 0x0334, 0x11B5], NFC: [0xD034, 0x0334, 0x11B5], NFD: [0x110F, 0x1171, 0x0334, 0x11B5], NFKC: [0xD034, 0x0334, 0x11B5], NFKD: [0x110F, 0x1171, 0x0334, 0x11B5] }, +{ source: [0xD088, 0x0334, 0x11BC], NFC: [0xD088, 0x0334, 0x11BC], NFD: [0x110F, 0x1174, 0x0334, 0x11BC], NFKC: [0xD088, 0x0334, 0x11BC], NFKD: [0x110F, 0x1174, 0x0334, 0x11BC] }, +{ source: [0xD14C, 0x0334, 0x11AE], NFC: [0xD14C, 0x0334, 0x11AE], NFD: [0x1110, 0x1166, 0x0334, 0x11AE], NFKC: [0xD14C, 0x0334, 0x11AE], NFKD: [0x1110, 0x1166, 0x0334, 0x11AE] }, +{ source: [0xD1A0, 0x0334, 0x11B5], NFC: [0xD1A0, 0x0334, 0x11B5], NFD: [0x1110, 0x1169, 0x0334, 0x11B5], NFKC: [0xD1A0, 0x0334, 0x11B5], NFKD: [0x1110, 0x1169, 0x0334, 0x11B5] }, +{ source: [0xD1F4, 0x0334, 0x11BC], NFC: [0xD1F4, 0x0334, 0x11BC], NFD: [0x1110, 0x116C, 0x0334, 0x11BC], NFKC: [0xD1F4, 0x0334, 0x11BC], NFKD: [0x1110, 0x116C, 0x0334, 0x11BC] }, +{ source: [0xD2B8, 0x0334, 0x11AE], NFC: [0xD2B8, 0x0334, 0x11AE], NFD: [0x1110, 0x1173, 0x0334, 0x11AE], NFKC: [0xD2B8, 0x0334, 0x11AE], NFKD: [0x1110, 0x1173, 0x0334, 0x11AE] }, +{ source: [0xD30C, 0x0334, 0x11B5], NFC: [0xD30C, 0x0334, 0x11B5], NFD: [0x1111, 0x1161, 0x0334, 0x11B5], NFKC: [0xD30C, 0x0334, 0x11B5], NFKD: [0x1111, 0x1161, 0x0334, 0x11B5] }, +{ source: [0xD360, 0x0334, 0x11BC], NFC: [0xD360, 0x0334, 0x11BC], NFD: [0x1111, 0x1164, 0x0334, 0x11BC], NFKC: [0xD360, 0x0334, 0x11BC], NFKD: [0x1111, 0x1164, 0x0334, 0x11BC] }, +{ source: [0xD424, 0x0334, 0x11AE], NFC: [0xD424, 0x0334, 0x11AE], NFD: [0x1111, 0x116B, 0x0334, 0x11AE], NFKC: [0xD424, 0x0334, 0x11AE], NFKD: [0x1111, 0x116B, 0x0334, 0x11AE] }, +{ source: [0xD478, 0x0334, 0x11B5], NFC: [0xD478, 0x0334, 0x11B5], NFD: [0x1111, 0x116E, 0x0334, 0x11B5], NFKC: [0xD478, 0x0334, 0x11B5], NFKD: [0x1111, 0x116E, 0x0334, 0x11B5] }, +{ source: [0xD4CC, 0x0334, 0x11BC], NFC: [0xD4CC, 0x0334, 0x11BC], NFD: [0x1111, 0x1171, 0x0334, 0x11BC], NFKC: [0xD4CC, 0x0334, 0x11BC], NFKD: [0x1111, 0x1171, 0x0334, 0x11BC] }, +{ source: [0xD590, 0x0334, 0x11AE], NFC: [0xD590, 0x0334, 0x11AE], NFD: [0x1112, 0x1163, 0x0334, 0x11AE], NFKC: [0xD590, 0x0334, 0x11AE], NFKD: [0x1112, 0x1163, 0x0334, 0x11AE] }, +{ source: [0xD5E4, 0x0334, 0x11B5], NFC: [0xD5E4, 0x0334, 0x11B5], NFD: [0x1112, 0x1166, 0x0334, 0x11B5], NFKC: [0xD5E4, 0x0334, 0x11B5], NFKD: [0x1112, 0x1166, 0x0334, 0x11B5] }, +{ source: [0xD638, 0x0334, 0x11BC], NFC: [0xD638, 0x0334, 0x11BC], NFD: [0x1112, 0x1169, 0x0334, 0x11BC], NFKC: [0xD638, 0x0334, 0x11BC], NFKD: [0x1112, 0x1169, 0x0334, 0x11BC] }, +{ source: [0xD6FC, 0x0334, 0x11AE], NFC: [0xD6FC, 0x0334, 0x11AE], NFD: [0x1112, 0x1170, 0x0334, 0x11AE], NFKC: [0xD6FC, 0x0334, 0x11AE], NFKD: [0x1112, 0x1170, 0x0334, 0x11AE] }, +{ source: [0xD750, 0x0334, 0x11B5], NFC: [0xD750, 0x0334, 0x11B5], NFD: [0x1112, 0x1173, 0x0334, 0x11B5], NFKC: [0xD750, 0x0334, 0x11B5], NFKD: [0x1112, 0x1173, 0x0334, 0x11B5] }, +{ source: [0x11131, 0x0334, 0x11127], NFC: [0x11131, 0x0334, 0x11127], NFD: [0x11131, 0x0334, 0x11127], NFKC: [0x11131, 0x0334, 0x11127], NFKD: [0x11131, 0x0334, 0x11127] }, +{ source: [0x11132, 0x0334, 0x11127], NFC: [0x11132, 0x0334, 0x11127], NFD: [0x11132, 0x0334, 0x11127], NFKC: [0x11132, 0x0334, 0x11127], NFKD: [0x11132, 0x0334, 0x11127] } +]; diff --git a/source/spidermonkey-tests/ecma_6/String/normalize-generateddata.js b/source/spidermonkey-tests/ecma_6/String/normalize-generateddata.js new file mode 100644 index 00000000..e5c19d97 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/String/normalize-generateddata.js @@ -0,0 +1,126 @@ +// |reftest| skip-if(!xulRuntime.shell||!("normalize"in(String.prototype))) -- uses shell load() function, String.prototype.normalize is not enabled in all builds +var BUGNUMBER = 918987; +var summary = 'String.prototype.normalize'; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +load('ecma_6/String/normalize-generateddata-input.js'); + +function codePointsToString(points) { + return points.map(x => String.fromCodePoint(x)).join(""); +} +function stringify(points) { + return points.map(x => x.toString(16)).join(); +} + +function runTest(test) { + var source = codePointsToString(test.source); + var NFC = codePointsToString(test.NFC); + var NFD = codePointsToString(test.NFD); + var NFKC = codePointsToString(test.NFKC); + var NFKD = codePointsToString(test.NFKD); + var sourceStr = stringify(test.source); + var nfcStr = stringify(test.NFC); + var nfdStr = stringify(test.NFD); + var nfkcStr = stringify(test.NFKC); + var nfkdStr = stringify(test.NFKD); + + /* NFC */ + assertEq(source.normalize(), NFC, "NFC of " + sourceStr); + assertEq(NFC.normalize(), NFC, "NFC of " + nfcStr); + assertEq(NFD.normalize(), NFC, "NFC of " + nfdStr); + assertEq(NFKC.normalize(), NFKC, "NFC of " + nfkcStr); + assertEq(NFKD.normalize(), NFKC, "NFC of " + nfkdStr); + + assertEq(source.normalize(undefined), NFC, "NFC of " + sourceStr); + assertEq(NFC.normalize(undefined), NFC, "NFC of " + nfcStr); + assertEq(NFD.normalize(undefined), NFC, "NFC of " + nfdStr); + assertEq(NFKC.normalize(undefined), NFKC, "NFC of " + nfkcStr); + assertEq(NFKD.normalize(undefined), NFKC, "NFC of " + nfkdStr); + + assertEq(source.normalize("NFC"), NFC, "NFC of " + sourceStr); + assertEq(NFC.normalize("NFC"), NFC, "NFC of " + nfcStr); + assertEq(NFD.normalize("NFC"), NFC, "NFC of " + nfdStr); + assertEq(NFKC.normalize("NFC"), NFKC, "NFC of " + nfkcStr); + assertEq(NFKD.normalize("NFC"), NFKC, "NFC of " + nfkdStr); + + /* NFD */ + assertEq(source.normalize("NFD"), NFD, "NFD of " + sourceStr); + assertEq(NFC.normalize("NFD"), NFD, "NFD of " + nfcStr); + assertEq(NFD.normalize("NFD"), NFD, "NFD of " + nfdStr); + assertEq(NFKC.normalize("NFD"), NFKD, "NFD of " + nfkcStr); + assertEq(NFKD.normalize("NFD"), NFKD, "NFD of " + nfkdStr); + + /* NFKC */ + assertEq(source.normalize("NFKC"), NFKC, "NFKC of " + sourceStr); + assertEq(NFC.normalize("NFKC"), NFKC, "NFKC of " + nfcStr); + assertEq(NFD.normalize("NFKC"), NFKC, "NFKC of " + nfdStr); + assertEq(NFKC.normalize("NFKC"), NFKC, "NFKC of " + nfkcStr); + assertEq(NFKD.normalize("NFKC"), NFKC, "NFKC of " + nfkdStr); + + /* NFKD */ + assertEq(source.normalize("NFKD"), NFKD, "NFKD of " + sourceStr); + assertEq(NFC.normalize("NFKD"), NFKD, "NFKD of " + nfcStr); + assertEq(NFD.normalize("NFKD"), NFKD, "NFKD of " + nfdStr); + assertEq(NFKC.normalize("NFKD"), NFKD, "NFKD of " + nfkcStr); + assertEq(NFKD.normalize("NFKD"), NFKD, "NFKD of " + nfkdStr); +} + +for (var test0 of tests_part0) { + runTest(test0); +} +var part1 = new Set(); +for (var test1 of tests_part1) { + part1.add(test1.source[0]); + runTest(test1); +} +for (var test2 of tests_part2) { + runTest(test2); +} +for (var test3 of tests_part3) { + runTest(test3); +} + +/* not listed in Part 1 */ +for (var x = 0; x <= 0x2FFFF; x++) { + if (part1.has(x)) { + continue; + } + var xstr = x.toString(16); + var c = String.fromCodePoint(x); + assertEq(c.normalize(), c, "NFC of " + xstr); + assertEq(c.normalize(undefined), c, "NFC of " + xstr); + assertEq(c.normalize("NFC"), c, "NFC of " + xstr); + assertEq(c.normalize("NFD"), c, "NFD of " + xstr); + assertEq(c.normalize("NFKC"), c, "NFKC of " + xstr); + assertEq(c.normalize("NFKD"), c, "NFKD of " + xstr); +} + +var myobj = {toString : (function () "a\u0301"), normalize : String.prototype.normalize}; +assertEq(myobj.normalize(), "\u00E1"); + +assertThrowsInstanceOf(function() { + "abc".normalize("NFE"); + }, RangeError, + "String.prototype.normalize should raise RangeError on invalid form"); + +assertEq("".normalize(), ""); + +/* JSRope test */ +var a = ""; +var b = ""; +for (var i = 0; i < 100; i++) { + a += "\u0100"; + b += "\u0041\u0304"; +} +assertEq(a.normalize("NFD"), b); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/String/raw.js b/source/spidermonkey-tests/ecma_6/String/raw.js new file mode 100644 index 00000000..1472185a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/String/raw.js @@ -0,0 +1,55 @@ +var BUGNUMBER = 1039774; +var summary = 'String.raw'; + +print(BUGNUMBER + ": " + summary); + +assertThrowsInstanceOf(function() { String.raw(); }, TypeError); + +assertEq(String.raw.length, 1); + +var cooked = []; +assertThrowsInstanceOf(function() { String.raw(cooked); }, TypeError); + +cooked.raw = {}; +assertEq(String.raw(cooked), ""); + +cooked.raw = {lengt: 0}; +assertEq(String.raw(cooked), ""); + +cooked.raw = {length: 0}; +assertEq(String.raw(cooked), ""); + +cooked.raw = {length: -1}; +assertEq(String.raw(cooked), ""); + +cooked.raw = []; +assertEq(String.raw(cooked), ""); + +cooked.raw = ["a"]; +assertEq(String.raw(cooked), "a"); + +cooked.raw = ["a", "b"]; +assertEq(String.raw(cooked, "x"), "axb"); + +cooked.raw = ["a", "b"]; +assertEq(String.raw(cooked, "x", "y"), "axb"); + +cooked.raw = ["a", "b", "c"]; +assertEq(String.raw(cooked, "x"), "axbc"); + +cooked.raw = ["a", "b", "c"]; +assertEq(String.raw(cooked, "x", "y"), "axbyc"); + +cooked.raw = ["\n", "\r\n", "\r"]; +assertEq(String.raw(cooked, "x", "y"), "\nx\r\ny\r"); + +cooked.raw = ["\n", "\r\n", "\r"]; +assertEq(String.raw(cooked, "\r\r", "\n"), "\n\r\r\r\n\n\r"); + +cooked.raw = {length: 2, '0':"a", '1':"b", '2':"c"}; +assertEq(String.raw(cooked, "x", "y"), "axb"); + +cooked.raw = {length: 4, '0':"a", '1':"b", '2':"c"}; +assertEq(String.raw(cooked, "x", "y"), "axbycundefined"); + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/String/shell.js b/source/spidermonkey-tests/ecma_6/String/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Symbol/as-base-value.js b/source/spidermonkey-tests/ecma_6/Symbol/as-base-value.js new file mode 100644 index 00000000..f3ccb880 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/as-base-value.js @@ -0,0 +1,91 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Like other primitives, symbols can be treated as objects, using object-like + // syntax: `symbol.prop` or `symbol[key]`. + // + // In ECMAScript spec jargon, this creates a Reference whose base value is a + // primitive Symbol value. + + var symbols = [ + Symbol(), + Symbol("ponies"), + Symbol.for("sym"), + Symbol.iterator + ]; + + // Test accessor property, used below. + var gets, sets; + Object.defineProperty(Symbol.prototype, "prop", { + get: function () { + "use strict"; + gets++; + assertEq(typeof this, "object"); + assertEq(this instanceof Symbol, true); + assertEq(this.valueOf(), sym); + return "got"; + }, + set: function (v) { + "use strict"; + sets++; + assertEq(typeof this, "object"); + assertEq(this instanceof Symbol, true); + assertEq(this.valueOf(), sym); + assertEq(v, "newvalue"); + } + }); + + for (var sym of symbols) { + assertEq(sym.constructor, Symbol); + + // method on Object.prototype + assertEq(sym.hasOwnProperty("constructor"), false); + assertEq(sym.toLocaleString(), sym.toString()); // once .toString() exists + + // custom method monkeypatched onto Symbol.prototype + Symbol.prototype.nonStrictMethod = function (arg) { + assertEq(arg, "ok"); + assertEq(this instanceof Symbol, true); + assertEq(this.valueOf(), sym); + return 13; + }; + assertEq(sym.nonStrictMethod("ok"), 13); + + // the same, but strict mode + Symbol.prototype.strictMethod = function (arg) { + "use strict"; + assertEq(arg, "ok2"); + assertEq(this, sym); + return 14; + }; + assertEq(sym.strictMethod("ok2"), 14); + + // getter/setter on Symbol.prototype + gets = 0; + sets = 0; + var propname = "prop"; + + assertEq(sym.prop, "got"); + assertEq(gets, 1); + assertEq(sym[propname], "got"); + assertEq(gets, 2); + + assertEq(sym.prop = "newvalue", "newvalue"); + assertEq(sets, 1); + assertEq(sym[propname] = "newvalue", "newvalue"); + assertEq(sets, 2); + + // non-existent property + assertEq(sym.noSuchProp, undefined); + var noSuchPropName = "nonesuch"; + assertEq(sym[noSuchPropName], undefined); + + // non-existent method + assertThrowsInstanceOf(() => sym.noSuchProp(), TypeError); + assertThrowsInstanceOf(() => sym[noSuchPropName](), TypeError); + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/browser.js b/source/spidermonkey-tests/ecma_6/Symbol/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Symbol/comparisons.js b/source/spidermonkey-tests/ecma_6/Symbol/comparisons.js new file mode 100644 index 00000000..311245aa --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/comparisons.js @@ -0,0 +1,36 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + var symbols = [ + Symbol(), + Symbol("0"), + Symbol.for("snowman"), + Symbol.iterator + ]; + + var values = [ + undefined, null, 0, 3.14, -0, NaN, "", "alphabet", Symbol("0"), + {}, [] + ]; + + for (var comparator of ["==", "!=", "===", "!=="]) { + var f = Function("a, b", "return a " + comparator + " b;"); + var expected = (comparator[0] == '!'); + for (var a of symbols) { + for (var b of values) + assertEq(f(a, b), expected); + } + } + + for (var comparator of ["<", "<=", ">", ">="]) { + var f = Function("a, b", "return a " + comparator + " b;"); + for (var a of symbols) { + for (var b of values) + assertThrowsInstanceOf(() => f(a, b), TypeError); + } + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/constructor.js b/source/spidermonkey-tests/ecma_6/Symbol/constructor.js new file mode 100644 index 00000000..784c3869 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/constructor.js @@ -0,0 +1,37 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Symbol(symbol) throws a TypeError. + var sym = Symbol(); + assertThrowsInstanceOf(() => Symbol(sym), TypeError); + + // Symbol(undefined) is equivalent to Symbol(). + assertEq(Symbol(undefined).toString(), "Symbol()"); + + // Otherwise, Symbol(v) means Symbol(ToString(v)). + assertEq(Symbol(7).toString(), "Symbol(7)"); + assertEq(Symbol(true).toString(), "Symbol(true)"); + assertEq(Symbol(null).toString(), "Symbol(null)"); + assertEq(Symbol([1, 2]).toString(), "Symbol(1,2)"); + var symobj = Object(sym); + assertThrowsInstanceOf(() => Symbol(symobj), TypeError); + + var hits = 0; + var obj = { + toString: function () { + hits++; + return "ponies"; + } + }; + assertEq(Symbol(obj).toString(), "Symbol(ponies)"); + assertEq(hits, 1); + + assertEq(Object.getPrototypeOf(Symbol.prototype), Object.prototype); + + // Symbol.prototype is not itself a Symbol object. + assertThrowsInstanceOf(() => Symbol.prototype.valueOf(), TypeError); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/conversions.js b/source/spidermonkey-tests/ecma_6/Symbol/conversions.js new file mode 100644 index 00000000..ec0e00fd --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/conversions.js @@ -0,0 +1,68 @@ +// Section numbers cite ES6 rev 24 (2014 April 27). + +if (typeof Symbol === "function") { + var symbols = [ + Symbol(), + Symbol("one"), + Symbol.for("two"), + Symbol.iterator + ]; + + if (Symbol.toPrimitive in Symbol.prototype) { + // We should test that deleting Symbol.prototype[@@toPrimitive] changes the + // behavior of ToPrimitive on Symbol objects, but @@toPrimitive is not + // implemented yet. + throw new Error("Congratulations on implementing @@toPrimitive! Please update this test."); + } + + for (var sym of symbols) { + // 7.1.1 ToPrimitive + var symobj = Object(sym); + assertThrowsInstanceOf(() => Number(symobj), TypeError); + assertThrowsInstanceOf(() => String(symobj), TypeError); + assertThrowsInstanceOf(() => symobj < 0, TypeError); + assertThrowsInstanceOf(() => 0 < symobj, TypeError); + assertThrowsInstanceOf(() => symobj + 1, TypeError); + assertThrowsInstanceOf(() => "" + symobj, TypeError); + assertEq(sym == symobj, true); + assertEq(sym === symobj, false); + assertEq(symobj == 0, false); + assertEq(0 != symobj, true); + + // 7.1.2 ToBoolean + assertEq(Boolean(sym), true); + assertEq(!sym, false); + assertEq(sym || 13, sym); + assertEq(sym && 13, 13); + + // 7.1.3 ToNumber + assertThrowsInstanceOf(() => +sym, TypeError); + assertThrowsInstanceOf(() => sym | 0, TypeError); + + // 7.1.12 ToString + assertThrowsInstanceOf(() => "" + sym, TypeError); + assertThrowsInstanceOf(() => sym + "", TypeError); + assertThrowsInstanceOf(() => "" + [1, 2, Symbol()], TypeError); + assertThrowsInstanceOf(() => ["simple", "thimble", Symbol()].join(), TypeError); + + // 21.1.1.1 String() + assertEq(String(sym), sym.toString()); + assertThrowsInstanceOf(() => String(Object(sym)), TypeError); + + // 21.1.1.2 new String() + assertThrowsInstanceOf(() => new String(sym), TypeError); + + // 7.1.13 ToObject + var obj = Object(sym); + assertEq(typeof obj, "object"); + assertEq(Object.prototype.toString.call(obj), "[object Symbol]"); + assertEq(Object.getPrototypeOf(obj), Symbol.prototype); + assertEq(Object.getOwnPropertyNames(obj).length, 0); + assertEq(Object(sym) === Object(sym), false); // new object each time + var f = function () { return this; }; + assertEq(f.call(sym) === f.call(sym), false); // new object each time + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/enumeration-order.js b/source/spidermonkey-tests/ecma_6/Symbol/enumeration-order.js new file mode 100644 index 00000000..5b2d1e58 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/enumeration-order.js @@ -0,0 +1,43 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +var log; +function LoggingProxy() { + return new Proxy({}, { + defineProperty: (t, key, desc) => { + log.push(key); + return true; + } + }); +} + +function test(descsObj) { + log = []; + Object.defineProperties(LoggingProxy(), descs); + assertEq(log.length, keys.length); + assertDeepEq(log.map(k => typeof k), ["string", "string", "string", "symbol", "symbol", "symbol"]); + for (var key of keys) + assertEq(log.indexOf(key) !== -1, true); +} + +if (typeof Symbol === "function") { + // ES6 draft rev 25 (2014 May 22), 9.1.12 "[[OwnPropertyKeys]] ()": + + var keys = [ + "before", + Symbol(), + "during", + Symbol.for("during"), + Symbol.iterator, + "after" + ]; + var descs = {}; + for (var k of keys) + descs[k] = {configurable: true, value: 0}; + + test(descs); + test(new Proxy(descs, {})); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/enumeration.js b/source/spidermonkey-tests/ecma_6/Symbol/enumeration.js new file mode 100644 index 00000000..6401483a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/enumeration.js @@ -0,0 +1,54 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // for-in loops skip properties with symbol keys, even enumerable properties. + var obj = {}; + obj[Symbol.for("moon")] = "sun"; + obj[Symbol("asleep")] = "awake"; + obj[Symbol.iterator] = "List"; + for (var x in obj) + throw "FAIL: " + uneval(x); + + // This includes inherited properties. + var obj2 = Object.create(obj); + for (var x in obj2) + throw "FAIL: " + uneval(x); + + // The same goes for proxies. + var p = new Proxy(obj, {}); + for (var x in p) + throw "FAIL: " + uneval(x); + var p2 = new Proxy(obj2, {}); + for (var x in p2) + throw "FAIL: " + uneval(x); + + // Object.keys() and .getOwnPropertyNames() also skip symbols. + assertEq(Object.keys(obj).length, 0); + assertEq(Object.keys(p).length, 0); + assertEq(Object.keys(obj2).length, 0); + assertEq(Object.keys(p2).length, 0); + assertEq(Object.getOwnPropertyNames(obj).length, 0); + assertEq(Object.getOwnPropertyNames(p).length, 0); + assertEq(Object.getOwnPropertyNames(obj2).length, 0); + assertEq(Object.getOwnPropertyNames(p2).length, 0); + + // Test interaction of Object.keys(), proxies, and symbol property keys. + var log = []; + var h = { + ownKeys: (t) => { + log.push("ownKeys"); + return ["a", "0", Symbol.for("moon"), Symbol("asleep"), Symbol.iterator]; + }, + getOwnPropertyDescriptor: (t, key) => { + log.push("gopd", key); + return {configurable: true, enumerable: true, value: 0, writable: true}; + } + }; + p = new Proxy({}, h); + assertDeepEq(Object.keys(p), ["a", "0"]); + assertDeepEq(log, ["ownKeys", "gopd", "a", "gopd", "0"]); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/equality.js b/source/spidermonkey-tests/ecma_6/Symbol/equality.js new file mode 100644 index 00000000..66eaa790 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/equality.js @@ -0,0 +1,32 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Symbol.for returns the same symbol whenever the same argument is passed. + assertEq(Symbol.for("q") === Symbol.for("q"), true); + + // Several distinct Symbol values. + var symbols = [ + Symbol(), + Symbol("Symbol.iterator"), + Symbol("Symbol.iterator"), // distinct new symbol with the same description + Symbol.for("Symbol.iterator"), + Symbol.iterator + ]; + + // Distinct symbols are never equal to each other, even if they have the same + // description. + for (var i = 0; i < symbols.length; i++) { + for (var j = i; j < symbols.length; j++) { + var expected = (i === j); + assertEq(symbols[i] == symbols[j], expected); + assertEq(symbols[i] != symbols[j], !expected); + assertEq(symbols[i] === symbols[j], expected); + assertEq(symbols[i] !== symbols[j], !expected); + assertEq(Object.is(symbols[i], symbols[j]), expected); + } + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/errors.js b/source/spidermonkey-tests/ecma_6/Symbol/errors.js new file mode 100644 index 00000000..64e53567 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/errors.js @@ -0,0 +1,19 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Section numbers cite ES6 rev 24 (2014 April 27). + + var sym = Symbol(); + + // 7.2.2 IsCallable + assertThrowsInstanceOf(() => sym(), TypeError); + assertThrowsInstanceOf(() => Function.prototype.call.call(sym), TypeError); + + // 7.2.5 IsConstructor + assertThrowsInstanceOf(() => new sym(), TypeError); + assertThrowsInstanceOf(() => new Symbol(), TypeError); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/for-in-order.js b/source/spidermonkey-tests/ecma_6/Symbol/for-in-order.js new file mode 100644 index 00000000..c3969b9d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/for-in-order.js @@ -0,0 +1,35 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // ES6 does not specify enumeration order, but implementations mostly retain + // property insertion order -- and must, for web compatibility. This test checks + // that symbol-keyed properties do not interfere with that order. + + var obj = {}; + obj[Symbol("moon")] = 0; + obj.x = 1; + obj[Symbol.for("y")] = 2 + obj.y = 3; + obj[Symbol.iterator] = function* () { yield 4; }; + obj.z = 5; + Object.prototype[Symbol.for("comet")] = 6; + + var keys = []; + for (var k in obj) + keys.push(k); + assertDeepEq(keys, ["x", "y", "z"]); + assertDeepEq(Object.keys(obj), ["x", "y", "z"]); + + // Test with more properties. + for (var i = 0; i < 1000; i++) + obj[Symbol(i)] = i; + obj.w = 1000; + keys = [] + for (var k in obj) + keys.push(k); + assertDeepEq(keys, ["x", "y", "z", "w"]); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/for.js b/source/spidermonkey-tests/ecma_6/Symbol/for.js new file mode 100644 index 00000000..7c9f0703 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/for.js @@ -0,0 +1,33 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Symbol.for called twice with the same argument returns the same symbol. + assertEq(Symbol.for("ponies"), Symbol.for("ponies")); + + // Called twice with equal strings: still the same result. + var one = Array(64+1).join("x"); + var two = Array(8+1).join(Array(8+1).join("x")); + assertEq(Symbol.for(one), Symbol.for(two)); + + // Symbols created by calling Symbol() are not in the symbol registry. + var sym = Symbol("123"); + assertEq(Symbol.for("123") !== sym, true); + + // Empty string is fine. + assertEq(typeof Symbol.for(""), "symbol"); + + // Primitive arguments. + assertEq(Symbol.for(3), Symbol.for("3")); + assertEq(Symbol.for(null), Symbol.for("null")); + assertEq(Symbol.for(undefined), Symbol.for("undefined")); + assertEq(Symbol.for(), Symbol.for("undefined")); + + // Symbol.for ignores the 'this' value. + var foo = Symbol.for("foo"); + assertEq(Symbol.for.call(String, "foo"), foo); + assertEq(Symbol.for.call(3.14, "foo"), foo); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/json-stringify-keys.js b/source/spidermonkey-tests/ecma_6/Symbol/json-stringify-keys.js new file mode 100644 index 00000000..3ff1a138 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/json-stringify-keys.js @@ -0,0 +1,21 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // JSON.stringify ignores symbol-keyed properties, even enumerable ones. + + var obj = {a: 1}; + obj[Symbol.for("ponies")] = {toJSON: function () { throw "fit"; }}; + obj[Symbol.iterator] = {toJSON: function () { throw "fit"; }}; + assertEq(JSON.stringify(obj), '{"a":1}'); + + var replacer = function (k, v) { + if (typeof k === "symbol") + throw "fit"; + return v; + }; + assertEq(JSON.stringify(obj, replacer), '{"a":1}'); +} + +if (typeof reportCompare === 'function') + reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/json-stringify-values.js b/source/spidermonkey-tests/ecma_6/Symbol/json-stringify-values.js new file mode 100644 index 00000000..1e85ff2d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/json-stringify-values.js @@ -0,0 +1,35 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // To JSON.stringify, symbols are the same as undefined. + + var symbols = [ + Symbol(), + Symbol.for("ponies"), + Symbol.iterator + ]; + + for (var sym of symbols) { + assertEq(JSON.stringify(sym), undefined); + assertEq(JSON.stringify([sym]), "[null]"); + + // JSON.stringify skips symbol-valued properties! + assertEq(JSON.stringify({x: sym}), '{}'); + + // However such properties are passed to the replacerFunction if any. + var replacer = function (key, val) { + assertEq(typeof this, "object"); + if (typeof val === "symbol") { + assertEq(val, sym); + return "ding"; + } + return val; + }; + assertEq(JSON.stringify(sym, replacer), '"ding"'); + assertEq(JSON.stringify({x: sym}, replacer), '{"x":"ding"}'); + } +} + +if (typeof reportCompare === 'function') + reportCompare(0, 0, 'ok'); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/keyFor.js b/source/spidermonkey-tests/ecma_6/Symbol/keyFor.js new file mode 100644 index 00000000..3a4b8a00 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/keyFor.js @@ -0,0 +1,17 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + assertEq(Symbol.keyFor(Symbol.for("moon")), "moon"); + assertEq(Symbol.keyFor(Symbol.for("")), ""); + assertEq(Symbol.keyFor(Symbol("moon")), undefined); + assertEq(Symbol.keyFor(Symbol.iterator), undefined); + + assertThrowsInstanceOf(() => Symbol.keyFor(), TypeError); + assertThrowsInstanceOf(() => Symbol.keyFor(Object(Symbol("moon"))), TypeError); + + assertEq(Symbol.keyFor.length, 1); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/property-accessor.js b/source/spidermonkey-tests/ecma_6/Symbol/property-accessor.js new file mode 100644 index 00000000..90db8758 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/property-accessor.js @@ -0,0 +1,41 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + var obj = {}; + var sym = Symbol(); + + var gets = 0; + var sets = []; + Object.defineProperty(obj, sym, { + get: function () { return ++gets; }, + set: function (v) { sets.push(v); } + }); + + // getter + for (var i = 1; i < 9; i++) + assertEq(obj[sym], i); + + // setter + var expected = []; + for (var i = 0; i < 9; i++) { + assertEq(obj[sym] = i, i); + expected.push(i); + } + assertDeepEq(sets, expected); + + // increment operator + gets = 0; + sets = []; + assertEq(obj[sym]++, 1); + assertDeepEq(sets, [2]); + + // assignment + gets = 0; + sets = []; + assertEq(obj[sym] *= 12, 12); + assertDeepEq(sets, [12]); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/property-basics.js b/source/spidermonkey-tests/ecma_6/Symbol/property-basics.js new file mode 100644 index 00000000..9d9ec8e3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/property-basics.js @@ -0,0 +1,46 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + var symbols = [ + Symbol(), + Symbol("one"), + Symbol.for("two"), + Symbol.iterator, + Object(Symbol()) + ]; + + for (var sym of symbols) { + var obj = {}; + + // access a nonexistent property + assertEq(sym in obj, false); + assertEq(obj.hasOwnProperty(sym), false); + assertEq(obj[sym], undefined); + assertEq(typeof obj[sym], "undefined"); + assertEq(Object.getOwnPropertyDescriptor(obj, sym), undefined); + + // assign, then try accessing again + obj[sym] = "ok"; + assertEq(sym in obj, true); + assertEq(obj.hasOwnProperty(sym), true); + assertEq(obj[sym], "ok"); + assertDeepEq(Object.getOwnPropertyDescriptor(obj, sym), { + configurable: true, + enumerable: true, + value: "ok", + writable: true + }); + + // assign again, observe value is overwritten + obj[sym] = 12; + assertEq(obj[sym], 12); + + // increment + assertEq(obj[sym]++, 12); + assertEq(obj[sym], 13); + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/property-inheritance.js b/source/spidermonkey-tests/ecma_6/Symbol/property-inheritance.js new file mode 100644 index 00000000..d0aa51ab --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/property-inheritance.js @@ -0,0 +1,53 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +function F() {} + +if (typeof Symbol === "function") { + var sym = Symbol.for("hello"); + var f = new F(); + + // inherited data property + F.prototype[sym] = "world"; + assertEq(sym in f, true); + assertEq(f.hasOwnProperty(sym), false); + assertEq(f[sym], "world"); + + // shadowing assignment + f[sym] = "kitty"; + assertEq(f[sym], "kitty"); + assertEq(F.prototype[sym], "world"); + + // deletion, revealing previously shadowed property + assertEq(delete f[sym], true); + assertEq(f.hasOwnProperty(sym), false); + assertEq(f[sym], "world"); + + // inherited accessor property + var value = undefined; + Object.defineProperty(F.prototype, sym, { + configurable: true, + get: function () { return 23; }, + set: function (v) { value = v; } + }); + assertEq(sym in f, true); + assertEq(f.hasOwnProperty(sym), false); + assertEq(f[sym], 23); + f[sym] = "gravity"; + assertEq(value, "gravity"); + + // inherited accessor property with no setter + Object.defineProperty(F.prototype, sym, { + set: undefined + }); + assertThrowsInstanceOf(function () { "use strict"; f[sym] = 0; }, TypeError); + + // deeply inherited accessor property + var g = Object.create(f); + for (var i = 0; i < 100; i++) + g = Object.create(g); + assertEq(g[sym], 23); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/property-nonwritable.js b/source/spidermonkey-tests/ecma_6/Symbol/property-nonwritable.js new file mode 100644 index 00000000..221684e8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/property-nonwritable.js @@ -0,0 +1,34 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +function checkNotWritable(obj) { + // In sloppy mode, assigning to a nonwritable property silently fails. + obj[sym] = "portals"; + assertEq(obj[sym], "cheese"); + + // In strict mode code, it throws. + assertThrowsInstanceOf(function () { "use strict"; obj[sym] = "robots"; }, TypeError); + assertEq(obj[sym], "cheese"); +} + +if (typeof Symbol === "function") { + var sym = Symbol.for("moon"); + + var x = {}; + Object.defineProperty(x, sym, { + configurable: true, + enumerable: true, + value: "cheese", + writable: false + }); + + checkNotWritable(x); + + // Assignment can't shadow inherited nonwritable properties either. + var y = Object.create(x); + checkNotWritable(y); + checkNotWritable(Object.create(y)); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/property-reflection.js b/source/spidermonkey-tests/ecma_6/Symbol/property-reflection.js new file mode 100644 index 00000000..c2a6ac6d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/property-reflection.js @@ -0,0 +1,139 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +function F() {} +function D() {} + +if (typeof Symbol === "function") { + // Basic tests for standard Object APIs interacting with symbols. + + // Object.defineProperty + var f = new F; + Object.defineProperty(f, Symbol.for("name"), { + configurable: true, + value: "eff" + }); + assertEq("name" in f, false); + assertEq("Symbol(name)" in f, false); + assertEq(Symbol.for("name") in f, true); + assertEq(f[Symbol.for("name")], "eff"); + + // Object.defineProperties + var descs = new D; + var s1 = Symbol("s1"); + var hits = 0; + descs[s1] = { + configurable: true, + enumerable: true, + get: () => hits++, + set: undefined + }; + var s2 = Symbol("s2"); + descs[s2] = { + configurable: true, + enumerable: false, + value: {}, + writable: true + }; + var s3 = Symbol("s3"); + D.prototype[s3] = {value: "FAIL"}; + assertEq(Object.defineProperties(f, descs), f); + assertEq(s1 in f, true); + assertEq(f[s1], 0); + assertEq(hits, 1); + assertEq(s2 in f, true); + assertEq(f[s2], descs[s2].value); + assertEq(s3 in f, false); + + // Object.create + var n = Object.create({}, descs); + assertEq(s1 in n, true); + assertEq(n[s1], 1); + assertEq(hits, 2); + assertEq(s2 in n, true); + assertEq(n[s2], descs[s2].value); + assertEq(s3 in n, false); + + // Object.getOwnPropertyDescriptor + var desc = Object.getOwnPropertyDescriptor(n, s1); + assertDeepEq(desc, descs[s1]); + assertEq(desc.get, descs[s1].get); + desc = Object.getOwnPropertyDescriptor(n, s2); + assertDeepEq(desc, descs[s2]); + assertEq(desc.value, descs[s2].value); + + // Object.prototype.hasOwnProperty + assertEq(descs.hasOwnProperty(s1), true); + assertEq(descs.hasOwnProperty(s2), true); + assertEq(descs.hasOwnProperty(s3), false); + assertEq([].hasOwnProperty(std_iterator), false); + assertEq(Array.prototype.hasOwnProperty(std_iterator), true); + + // Object.prototype.propertyIsEnumerable + assertEq(n.propertyIsEnumerable(s1), true); + assertEq(n.propertyIsEnumerable(s2), false); + assertEq(n.propertyIsEnumerable(s3), false); // no such property + assertEq(D.prototype.propertyIsEnumerable(s3), true); + assertEq(descs.propertyIsEnumerable(s3), false); // inherited properties are not considered + + // Object.preventExtensions + var obj = {}; + obj[s1] = 1; + assertEq(Object.preventExtensions(obj), obj); + assertThrowsInstanceOf(function () { "use strict"; obj[s2] = 2; }, TypeError); + obj[s2] = 2; // still no effect + assertEq(s2 in obj, false); + + // Object.isSealed, Object.isFrozen + assertEq(Object.isSealed(obj), false); + assertEq(Object.isFrozen(obj), false); + assertEq(delete obj[s1], true); + assertEq(Object.isSealed(obj), true); + assertEq(Object.isFrozen(obj), true); + + obj = {}; + obj[s1] = 1; + Object.preventExtensions(obj); + Object.defineProperty(obj, s1, {configurable: false}); // still writable + assertEq(Object.isSealed(obj), true); + assertEq(Object.isFrozen(obj), false); + obj[s1] = 2; + assertEq(obj[s1], 2); + Object.defineProperty(obj, s1, {writable: false}); + assertEq(Object.isFrozen(obj), true); + + // Object.seal, Object.freeze + var obj = {}; + obj[s1] = 1; + Object.seal(obj); + desc = Object.getOwnPropertyDescriptor(obj, s1); + assertEq(desc.configurable, false); + assertEq(desc.writable, true); + Object.freeze(obj); + assertEq(Object.getOwnPropertyDescriptor(obj, s1).writable, false); + + // Object.setPrototypeOf purges caches for symbol-keyed properties. + var proto = {}; + proto[s1] = 1; + Object.defineProperty(proto, s2, { + get: () => 2, + set: v => undefined + }); + var obj = Object.create(proto); + var last1, last2; + var N = 9; + for (var i = 0; i < N; i++) { + last1 = obj[s1]; + last2 = obj[s2]; + obj[s2] = "marker"; + if (i === N - 2) + Object.setPrototypeOf(obj, {}); + } + assertEq(last1, undefined); + assertEq(last2, undefined); + assertEq(obj.hasOwnProperty(s2), true); + assertEq(obj[s2], "marker"); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/realms.js b/source/spidermonkey-tests/ecma_6/Symbol/realms.js new file mode 100644 index 00000000..b4d98eaa --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/realms.js @@ -0,0 +1,38 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Symbols can be shared across realms. + + if (typeof Reflect !== "undefined" && typeof Reflect.Realm === "function") { + throw new Error("Congratulations on implementing Reflect.Realm! " + + "Please update this test to use it."); + } + if (typeof newGlobal === "function") { + var g = newGlobal(); + var gj = g.eval("jones = Symbol('jones')"); + assertEq(typeof gj, "symbol"); + assertEq(g.jones, g.jones); + assertEq(gj, g.jones); + assertEq(gj !== Symbol("jones"), true); + + // A symbol can be round-tripped to another realm and back; + // the result is the original symbol. + var smith = Symbol("smith"); + g.smith = smith; // put smith into the realm + assertEq(g.smith, smith); // pull it back out + + // Spot-check that non-generic methods can be applied to symbols and Symbol + // objects from other realms. + assertEq(Symbol.prototype.toString.call(gj), "Symbol(jones)"); + assertEq(Symbol.prototype.toString.call(g.eval("Object(Symbol('brown'))")), + "Symbol(brown)"); + + // Symbol.for functions share a symbol registry across all realms. + assertEq(g.Symbol.for("ponies"), Symbol.for("ponies")); + assertEq(g.eval("Symbol.for('rainbows')"), Symbol.for("rainbows")); + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/shell.js b/source/spidermonkey-tests/ecma_6/Symbol/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/Symbol/surfaces.js b/source/spidermonkey-tests/ecma_6/Symbol/surfaces.js new file mode 100644 index 00000000..c318a939 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/surfaces.js @@ -0,0 +1,36 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Test superficial properties of the Symbol constructor and prototype. + + var desc = Object.getOwnPropertyDescriptor(this, "Symbol"); + assertEq(desc.configurable, true); + assertEq(desc.enumerable, false); + assertEq(desc.writable, true); + assertEq(typeof Symbol, "function"); + assertEq(Symbol.length, 1); + + desc = Object.getOwnPropertyDescriptor(Symbol, "prototype"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, false); + assertEq(desc.writable, false); + + assertEq(Symbol.prototype.constructor, Symbol); + desc = Object.getOwnPropertyDescriptor(Symbol.prototype, "constructor"); + assertEq(desc.configurable, true); + assertEq(desc.enumerable, false); + assertEq(desc.writable, true); + + desc = Object.getOwnPropertyDescriptor(Symbol, "iterator"); + assertEq(desc.configurable, false); + assertEq(desc.enumerable, false); + assertEq(desc.writable, false); + + assertEq(Symbol.for.length, 1); + assertEq(Symbol.prototype.toString.length, 0); + assertEq(Symbol.prototype.valueOf.length, 0); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/toString.js b/source/spidermonkey-tests/ecma_6/Symbol/toString.js new file mode 100644 index 00000000..7835dbe0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/toString.js @@ -0,0 +1,29 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + var cases = [ + {sym: Symbol(), str: "Symbol()"}, + {sym: Symbol("ok"), str: "Symbol(ok)"}, + {sym: Symbol("\0"), str: "Symbol(\0)"}, + {sym: Symbol.iterator, str: "Symbol(Symbol.iterator)"}, + {sym: Symbol.for("dummies"), str: "Symbol(dummies)"} + ]; + + // Symbol.prototype.toString works on both primitive symbols and Symbol + // objects. + for (var test of cases) { + assertEq(test.sym.toString(), test.str); + assertEq(Object(test.sym).toString(), test.str); + } + + // Any other value throws. + var nonsymbols = [ + undefined, null, "not-ok", new String("still-not-ok"), {}, [] + ]; + for (var nonsym of nonsymbols) + assertThrowsInstanceOf(() => Symbol.prototype.toString.call(nonsym), TypeError); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/typed-arrays.js b/source/spidermonkey-tests/ecma_6/Symbol/typed-arrays.js new file mode 100644 index 00000000..4b1dce95 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/typed-arrays.js @@ -0,0 +1,19 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Symbol-to-number type conversions involving typed arrays. + + for (var T of [Uint8Array, Uint8ClampedArray, Int16Array, Float32Array]) { + // Typed array constructors convert symbols using ToNumber(), which throws. + assertThrowsInstanceOf(() => new T([Symbol("a")]), TypeError); + + // Assignment does the same. + var arr = new T([1]); + assertThrowsInstanceOf(() => { arr[0] = Symbol.iterator; }, TypeError); + assertEq(arr[0], 1); + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/typeof.js b/source/spidermonkey-tests/ecma_6/Symbol/typeof.js new file mode 100644 index 00000000..61688ed2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/typeof.js @@ -0,0 +1,13 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + assertEq(typeof Symbol(), "symbol"); + assertEq(typeof Symbol("ponies"), "symbol"); + assertEq(typeof Symbol.for("ponies"), "symbol"); + + assertEq(typeof Object(Symbol()), "object"); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/valueOf.js b/source/spidermonkey-tests/ecma_6/Symbol/valueOf.js new file mode 100644 index 00000000..3f6653a3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/valueOf.js @@ -0,0 +1,24 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + var symbols = [ + Symbol(), + Symbol("ok"), + Symbol.for("dummies"), + Symbol.iterator + ]; + + for (var sym of symbols) { + assertEq(sym.valueOf(), sym); + assertEq(Object(sym).valueOf(), sym); + } + + // Any other value throws. + var nonsymbols = [undefined, null, NaN, {}, Symbol.prototype]; + for (var nonsym of nonsymbols) + assertThrowsInstanceOf(() => Symbol.prototype.valueOf.call(nonsym), TypeError); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/Symbol/well-known.js b/source/spidermonkey-tests/ecma_6/Symbol/well-known.js new file mode 100644 index 00000000..b7002585 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/Symbol/well-known.js @@ -0,0 +1,21 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Well-known symbols exist. + assertEq(typeof Symbol.iterator, "symbol"); + + // They are never in the registry. + assertEq(Symbol.iterator !== Symbol.for("Symbol.iterator"), true); + + // They are shared across realms. + if (typeof Realm === 'function') + throw new Error("please update this test to use Realms"); + if (typeof newGlobal === 'function') { + var g = newGlobal(); + assertEq(Symbol.iterator, g.Symbol.iterator); + } +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/TemplateStrings/browser.js b/source/spidermonkey-tests/ecma_6/TemplateStrings/browser.js new file mode 100644 index 00000000..139597f9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TemplateStrings/browser.js @@ -0,0 +1,2 @@ + + diff --git a/source/spidermonkey-tests/ecma_6/TemplateStrings/debugLineNumber.js b/source/spidermonkey-tests/ecma_6/TemplateStrings/debugLineNumber.js new file mode 100644 index 00000000..2cf41cd9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TemplateStrings/debugLineNumber.js @@ -0,0 +1,50 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// TEST BEGIN + +// verify debugger line numbers are accurate +try { + ` + a + b + c + `; + throw Error("error"); +} catch (e) { + assertEq(e.lineNumber, 14); +} + +try { + function tagThatThrows(...args) { throw new Error(); } + + tagThatThrows` + multi-line + template + string`; +} catch (e) { + var stackLines = e.stack.split('\n'); + var firstLine = stackLines[0].split(':'); + var secondLine = stackLines[1].split(':'); + var firstLineSize = firstLine.length; + var secondLineSize = secondLine.length; + assertEq(firstLine[firstLineSize - 2], "20"); + assertEq(firstLine[firstLineSize - 1], "45"); + assertEq(secondLine[secondLineSize - 2], "22"); + assertEq(secondLine[secondLineSize - 1], "5"); +} + +try { + ` multi-line + template + with + ${substitutionThatThrows()}` + +} catch (e) { + assertEq(e.lineNumber, 42); +} + + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/TemplateStrings/noSubst.js b/source/spidermonkey-tests/ecma_6/TemplateStrings/noSubst.js new file mode 100644 index 00000000..730275fd --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TemplateStrings/noSubst.js @@ -0,0 +1,148 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// This test case is weird in the sense the actual work happens at the eval +// at the end. If template strings are not enabled, the test cases would throw +// a syntax error and we'd have failure reported. To avoid that, the entire +// test case is commented out and is part of a function. We use toString to +// get the string version, obtain the actual lines to run, and then use eval to +// do the actual evaluation. + +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e.name === "SyntaxError") { + return; + } + } + throw "Expected syntax error: " + script; +} + +// TEST BEGIN + +// unterminated quasi literal +syntaxError("`"); +syntaxError("`$"); +syntaxError("`${"); +syntaxError("`${}"); +syntaxError("`${1}"); +syntaxError("`${1 + 2}"); + +// almost template substitutions +assertEq("$", `$`); +assertEq("$}", `$}`); +assertEq("}", `}`); +assertEq("{", `{`); + + +// character escape sequence (single escape character) +assertEq("\'", `\'`); +assertEq("\"", `\"`); +assertEq("\\", `\\`); +assertEq("\b", `\b`); +assertEq("\f", `\f`); +assertEq("\n", `\n`); +assertEq("\r", `\r`); +assertEq("\t", `\t`); +assertEq("\v", `\v`); +assertEq("\r\n", `\r\n`); + + +assertEq("\0", eval("`\\" + String.fromCharCode(0) + "`")); +assertEq("$", `\$`); +assertEq(".", `\.`); +assertEq("A", `\A`); +assertEq("a", `\a`); + + +// digit escape sequence +assertEq("\0", `\0`); +syntaxError("`\\1`"); +syntaxError("`\\2`"); +syntaxError("`\\3`"); +syntaxError("`\\4`"); +syntaxError("`\\5`"); +syntaxError("`\\6`"); +syntaxError("`\\7`"); +syntaxError("`\\01`"); +syntaxError("`\\001`"); +syntaxError("`\\00`"); + +// hex escape sequence +syntaxError("`\\x`"); +syntaxError("`\\x0`"); +syntaxError("`\\x0Z`"); +syntaxError("`\\xZ`"); + +assertEq("\0", `\x00`); +assertEq("$", `\x24`); +assertEq(".", `\x2E`); +assertEq("A", `\x41`); +assertEq("a", `\x61`); +assertEq("AB", `\x41B`); +assertEq(String.fromCharCode(0xFF), `\xFF`); + + +// unicode escape sequence + +assertEq("\0", `\u0000`); +assertEq("$", `\u0024`); +assertEq(".", `\u002E`); +assertEq("A", `\u0041`); +assertEq("a", `\u0061`); +assertEq("AB", `\u0041B`); +assertEq(String.fromCharCode(0xFFFF), `\uFFFF`); + + +// line continuation +assertEq("", eval("`\\\n`")); +assertEq("", eval("`\\\r`")); +assertEq("", eval("`\\\u2028`")); +assertEq("", eval("`\\\u2029`")); +assertEq("\u2028", eval("`\u2028`")); +assertEq("\u2029", eval("`\u2029`")); + +assertEq("a\nb", eval("`a\rb`")) +assertEq("a\nb", eval("`a\r\nb`")) +assertEq("a\n\nb", eval("`a\r\rb`")) + + +// source character +for (var i = 0; i < 0xFF; ++i) { + var c = String.fromCharCode(i); + if (c == "`" || c == "\\" || c == "\r") continue; + assertEq(c, eval("`" + c + "`")); +} + +assertEq("", ``); +assertEq("`", `\``); +assertEq("$", `$`); +assertEq("$$", `$$`); +assertEq("$$}", `$$}`); + +// multi-line +assertEq(`hey +there`, "hey\nthere"); + +// differences between strings and template strings +syntaxError("var obj = { `illegal`: 1}"); + +// test for JSON.parse +assertThrowsInstanceOf(() => JSON.parse('[1, `false`]'), SyntaxError); + +syntaxError('({get `name`() { return 10; }});'); + +// test for "use strict" directive +assertEq(5, Function("`use strict`; return 05;")()); +var func = function f() { + `ignored string`; + "use strict"; + return 06; +} +assertEq(6, func()); +syntaxError("\"use strict\"; return 06;"); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/TemplateStrings/shell.js b/source/spidermonkey-tests/ecma_6/TemplateStrings/shell.js new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TemplateStrings/shell.js @@ -0,0 +1 @@ + diff --git a/source/spidermonkey-tests/ecma_6/TemplateStrings/tagTempl.js b/source/spidermonkey-tests/ecma_6/TemplateStrings/tagTempl.js new file mode 100644 index 00000000..1e3f52bf --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TemplateStrings/tagTempl.js @@ -0,0 +1,291 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// This test case is weird in the sense the actual work happens at the eval +// at the end. If template strings are not enabled, the test cases would throw +// a syntax error and we'd have failure reported. To avoid that, the entire +// test case is commented out and is part of a function. We use toString to +// get the string version, obtain the actual lines to run, and then use eval to +// do the actual evaluation. + +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e.name === "SyntaxError") { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + +// function definitions +function check(actual, expected) { + assertEq(actual.length, expected.length); + for (var i = 0; i < expected.length; i++) + assertEq(actual[i], expected[i]); +} + +function cooked(cs) { return cs; } +function raw(cs) { return cs.raw; } +function args(cs, ...rest) { return rest; } + + +// TEST BEGIN + +// Literals +check(raw``, [""]); +check(raw`${4}a`, ["","a"]); +check(raw`${4}`, ["",""]); +check(raw`a${4}`, ["a",""]); +check(raw`a${4}b`, ["a","b"]); +check(raw`a${4}b${3}`, ["a","b",""]); +check(raw`a${4}b${3}c`, ["a","b","c"]); +check(raw`a${4}${3}c`, ["a","","c"]); +check(raw`${4}${3}`, ["","",""]); +check(raw`${4}\r\r${3}`, ["","\\r\\r",""]); +check(raw`${4}${3}c`, ["","","c"]); +check(raw`zyx${4}wvut${3}c`, ["zyx","wvut","c"]); +check(raw`zyx${4}wvut${3}\r\n`, ["zyx","wvut","\\r\\n"]); + +check(raw`hey`, ["hey"]); +check(raw`he\r\ny`, ["he\\r\\ny"]); +check(raw`he\ry`, ["he\\ry"]); +check(raw`he\r\ry`, ["he\\r\\ry"]); +check(raw`he\ny`, ["he\\ny"]); +check(raw`he\n\ny`, ["he\\n\\ny"]); + +check(cooked`hey`, ["hey"]); +check(cooked`he\r\ny`, ["he\r\ny"]); +check(cooked`he\ry`, ["he\ry"]); +check(cooked`he\r\ry`, ["he\r\ry"]); +check(cooked`he\ny`, ["he\ny"]); +check(cooked`he\n\ny`, ["he\n\ny"]); + +check(eval("raw`\r`"), ["\n"]); +check(eval("raw`\r\n`"), ["\n"]); +check(eval("raw`\r\r\n`"), ["\n\n"]); +check(eval("raw`he\r\ny`"), ["he\ny"]); +check(eval("raw`he\ry`"), ["he\ny"]); +check(eval("raw`he\r\ry`"), ["he\n\ny"]); +check(eval("raw`he\r\r\ny`"), ["he\n\ny"]); + + +check(eval("cooked`\r`"), ["\n"]); +check(eval("cooked`\r\n`"), ["\n"]); +check(eval("cooked`\r\r\n`"), ["\n\n"]); +check(eval("cooked`he\r\ny`"), ["he\ny"]); +check(eval("cooked`he\ry`"), ["he\ny"]); +check(eval("cooked`he\r\ry`"), ["he\n\ny"]); +check(eval("cooked`he\r\r\ny`"), ["he\n\ny"]); + +// Expressions +check(args`hey${"there"}now`, ["there"]); +check(args`hey${4}now`, [4]); +check(args`hey${4}`, [4]); +check(args`${4}`, [4]); +check(args`${4}${5}`, [4,5]); +check(args`a${4}${5}`, [4,5]); +check(args`a${4}b${5}`, [4,5]); +check(args`a${4}b${5}c`, [4,5]); +check(args`${4}b${5}c`, [4,5]); +check(args`${4}${5}c`, [4,5]); + +var a = 10; +var b = 15; +check(args`${4 + a}${5 + b}c`, [14,20]); +check(args`${4 + a}${a + b}c`, [14,25]); +check(args`${b + a}${5 + b}c`, [25,20]); +check(args`${4 + a}${a + b}c${"a"}`, [14,25,"a"]); +check(args`a${"b"}${"c"}${"d"}`, ["b","c","d"]); +check(args`a${"b"}${"c"}${a + b}`, ["b","c",25]); +check(args`a${"b"}`, ["b"]); + +// Expressions - complex substitutions +check(args`${`hey ${b + a} there`}${5 + b}c`, ["hey 25 there",20]); +check(args`${`hey ${`my ${b + a} good`} there`}${5 + b}c`, ["hey my 25 good there",20]); + +syntaxError("args`${}`"); +syntaxError("args`${`"); +syntaxError("args`${\\n}`"); +syntaxError("args`${yield 0}`"); +syntaxError("args`"); +syntaxError("args`$"); +syntaxError("args`${"); +syntaxError("args.``"); + +// Template substitution tests in the context of tagged templates +// Extra whitespace inside a template substitution is ignored. +check(args`a${ +0 +}`, [0]); + +// Extra whitespace between tag and template is ignored +check(args +`a +${ +0 +}`, [0]); + + +check(args`${5}${ // Comments work in template substitutions. +// Even comments that look like code: +// 0}`, "FAIL"); /* NOTE: This whole line is a comment. +0}`, [5,0]); + +check(args // Comments work in template substitutions. +// Even comments that look like code: +// 0}`, "FAIL"); /* NOTE: This whole line is a comment. +`${5}${0}`, [5,0]); + + +// Template substitutions are expressions, not statements. +syntaxError("args`${0;}`"); +check(args`${ + function f() { + return "ok"; + }() +}`, ["ok"]); + +// Template substitutions can have side effects. +var x = 0; +check(args`${x += 1}`, [1]); +assertEq(x, 1); + +// The production for a template substitution is Expression, not +// AssignmentExpression. +x = 0; +check(args`${++x, "o"}k`, ["o"]); +assertEq(x, 1); + + +// --> is not a comment inside a template. +check(cooked` +--> this is text +`, ["\n--> this is text\n"]); + +// reentrancy +function f(n) { + if (n === 0) + return ""; + var res = args`${n}${f(n - 1)}`; + return res[0] + res[1] + ""; +} +assertEq(f(9), "987654321"); + +// Template string substitutions in generator functions can yield. +function* g() { + var res = args`${yield 1} ${yield 2}`; + return res[0] + res[1] + ""; +} + +var it = g(); +var next = it.next(); +assertEq(next.done, false); +assertEq(next.value, 1); +next = it.next("hello"); +assertEq(next.done, false); +assertEq(next.value, 2); +next = it.next("world"); +assertEq(next.done, true); +assertEq(next.value, "helloworld"); + +// undefined +assertEq(args`${void 0}`[0] + "", "undefined"); +assertEq(args`${Object.doesNotHaveThisProperty}`[0] + "", "undefined"); + +var callSiteObj = []; +callSiteObj[0] = cooked`aa${4}bb`; +for (var i = 1; i < 3; i++) + callSiteObj[i] = cooked`aa${4}bb`; + +// Same call site object behavior +assertEq(callSiteObj[1], callSiteObj[2]); +assertEq(callSiteObj[0] !== callSiteObj[1], true); +assertEq("raw" in callSiteObj[0], true); + +// Array length +assertEq(callSiteObj[0].raw.length, 2); +assertEq(callSiteObj[0].length, 2); + +// Frozen objects +assertEq(Object.isFrozen(callSiteObj[0]), true); +assertEq(Object.isFrozen(callSiteObj[0].raw), true); + +// Raw not enumerable +assertEq(callSiteObj[0].propertyIsEnumerable(callSiteObj[0].raw), false); + +// Allow call syntax +check(new ((cs, sub) => function(){ return sub }) `${[1, 2, 3]}`, [1,2,3]); + +var a = []; +function test() { + var x = callSite => callSite; + for (var i = 0; i < 2; i++) + a[i] = eval("x``"); +} +test(); +assertEq(a[0] !== a[1], true); + +// Test that |obj.method`template`| works +var newObj = { + methodRetThis : function () { + return this; + }, + methodRetCooked : function (a) { + return a; + }, + methodRetRaw : function (a) { + return a.raw; + }, + methodRetArgs : function (a, ...args) { + return args; + } +} + +assertEq(newObj.methodRetThis`abc${4}`, newObj); +check(newObj.methodRetCooked`abc${4}\r`, ["abc","\r"]); +check(eval("newObj.methodRetCooked`abc${4}\r`"), ["abc","\n"]); +check(newObj.methodRetRaw`abc${4}\r`, ["abc","\\r"]); +check(eval("newObj.methodRetRaw`abc${4}\r`"), ["abc","\n"]); +check(eval("newObj.methodRetArgs`abc${4}${5}\r${6}`"), [4,5,6]); + +// Chained calls +function func(a) { + if (a[0] === "hey") { + return function(a) { + if (a[0] === "there") { + return function(a) { + if (a[0] === "mine") + return "was mine"; + else + return "was not mine"; + } + } else { + return function(a) { + return "was not there"; + } + } + } + } else { + return function(a) { + return function(a) { + return "was not hey"; + } + } + } +} + +assertEq(func`hey``there``mine`, "was mine"); +assertEq(func`hey``there``amine`, "was not mine"); +assertEq(func`hey``tshere``amine`, "was not there"); +assertEq(func`heys``there``mine`, "was not hey"); + +// String.raw +assertEq(String.raw`h\r\ney${4}there\n`, "h\\r\\ney4there\\n"); +assertEq(String.raw`hey`, "hey"); +assertEq(String.raw``, ""); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/TemplateStrings/templLit.js b/source/spidermonkey-tests/ecma_6/TemplateStrings/templLit.js new file mode 100644 index 00000000..0b85ad7d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TemplateStrings/templLit.js @@ -0,0 +1,118 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// This test case is weird in the sense the actual work happens at the eval +// at the end. If template strings are not enabled, the test cases would throw +// a syntax error and we'd have failure reported. To avoid that, the entire +// test case is commented out and is part of a function. We use toString to +// get the string version, obtain the actual lines to run, and then use eval to +// do the actual evaluation. + +function syntaxError (script) { + try { + Function(script); + } catch (e) { + if (e.name === "SyntaxError") { + return; + } + } + throw new Error('Expected syntax error: ' + script); +} + +// TEST BEGIN + + + +// combinations of substitutions +assertEq("abcdef", `ab${"cd"}ef`); +assertEq("ab9ef", `ab${4+5}ef`); +assertEq("cdef", `${"cd"}ef`); +assertEq("abcd", `ab${"cd"}`); +assertEq("cd", `${"cd"}`); +assertEq("", `${""}`); +assertEq("4", `${4}`); + +// multiple substitutions +assertEq("abcdef", `ab${"cd"}e${"f"}`); +assertEq("abcdef", `ab${"cd"}${"e"}f`); +assertEq("abcdef", `a${"b"}${"cd"}e${"f"}`); +assertEq("abcdef", `${"ab"}${"cd"}${"ef"}`); + +// inception +assertEq("abcdef", `a${`b${"cd"}e${"f"}`}`); + +syntaxError("`${}`"); +syntaxError("`${`"); +syntaxError("`${\\n}`"); +syntaxError("`${yield 0}`"); + +// Extra whitespace inside a template substitution is ignored. +assertEq(`${ +0 +}`, "0"); + +assertEq(`${ // Comments work in template substitutions. +// Even comments that look like code: +// 0}`, "FAIL"); /* NOTE: This whole line is a comment. +0}`, "0"); + +// Template substitutions are expressions, not statements. +syntaxError("`${0;}`"); +assertEq(`${{}}`, "[object Object]"); +assertEq(`${ + function f() { + return "ok"; + }() +}`, "ok"); + +// Template substitutions can have side effects. +var x = 0; +assertEq(`= ${x += 1}`, "= 1"); +assertEq(x, 1); + +// The production for a template substitution is Expression, not +// AssignmentExpression. +x = 0; +assertEq(`${++x, "o"}k`, "ok"); +assertEq(x, 1); + +// --> is not a comment inside a template. +assertEq(` +--> this is text +`, "\n--> this is text\n"); + +// reentrancy +function f(n) { + if (n === 0) + return ""; + return `${n}${f(n - 1)}`; +} +assertEq(f(9), "987654321"); + +// Template string substitutions in generator functions can yield. +function* g() { + return `${yield 1} ${yield 2}`; +} + +var it = g(); +var next = it.next(); +assertEq(next.done, false); +assertEq(next.value, 1); +next = it.next("hello"); +assertEq(next.done, false); +assertEq(next.value, 2); +next = it.next("world"); +assertEq(next.done, true); +assertEq(next.value, "hello world"); + +// undefined +assertEq(`${void 0}`, "undefined"); +assertEq(`${Object.doesNotHaveThisProperty}`, "undefined"); + +// toString behavior +assertEq("", `${{valueOf: () => "", toString: () => ""}}`); +assertEq("Hi 42", Function("try {`${{toString: () => { throw 42;}}}`} catch(e) {return \"Hi \" + e;}")()); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/ecma_6/TypedArray/browser.js b/source/spidermonkey-tests/ecma_6/TypedArray/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/TypedArray/element-setting-converts-using-ToNumber.js b/source/spidermonkey-tests/ecma_6/TypedArray/element-setting-converts-using-ToNumber.js new file mode 100644 index 00000000..e5c84636 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedArray/element-setting-converts-using-ToNumber.js @@ -0,0 +1,94 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = 'element-setting-converts-using-ToNumber.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 985733; +var summary = + "Typed array element-setting should convert to target type using ToNumber " + "followed by an element-type-specific truncation function"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var ctors = [Int8Array, Uint8Array, Uint8ClampedArray, + Int16Array, Uint16Array, + Int32Array, Uint32Array, + Float32Array, Float64Array]; +ctors.forEach(function(TypedArray) { + var ta = new TypedArray(1); + assertEq(ta[0], 0); + + var count = 0; + function setToObject() + { + for (var i = 0; i < 1e4; i++) + { + assertEq(count, i); + ta[0] = { valueOf: function() { count++; return 17; } }; + } + } + setToObject(); + assertEq(count, 1e4); + assertEq(ta[0], 17); + + function setToString() + { + for (var i = 0; i < 2e4; i++) + ta[0] = "17.0000000000000000000000000000000000000000000000000000001"; + } + setToString(); + assertEq(ta[0], 17); + + count = 0; + var arrayConstructed = + new TypedArray([{ valueOf: function() { count++; return 17; } }, + "17.0000000000000000000000000000000000000000000000000001"]); + assertEq(count, 1); + assertEq(arrayConstructed[0], 17); + assertEq(arrayConstructed[1], 17); + + count = 0; + var arraySet = new TypedArray(5); + arraySet.set({ 0: 17, + 1: "17.000000000000000000000000000000000000000000000000000", + get 2() { + return { valueOf: undefined, + toString: function() { count++; return 42; } }; + }, + get 3() { return true; }, + set 3(v) { throw "FAIL"; }, + 4: { valueOf: function() { count++; return 127; } }, + length: 5 }); + assertEq(count, 2); + assertEq(arraySet[0], 17); + assertEq(arraySet[1], 17); + assertEq(arraySet[2], 42); + assertEq(arraySet[3], 1); + assertEq(arraySet[4], 127); + + var bigLen = 1e4; + var big = new TypedArray(bigLen); + function initBig() + { + for (var i = 0; i < bigLen; i++) + big[i] = (i % 2) ? 3 : { valueOf: function() { return 3; } }; + } + initBig(); + for (var i = 0; i < bigLen; i++) + { + assertEq(big[i], 3, + "(" + Object.prototype.toString.call(big) + ")"); + } +}); + +/******************************************************************************/ + +reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/TypedArray/prototype-constructor-identity.js b/source/spidermonkey-tests/ecma_6/TypedArray/prototype-constructor-identity.js new file mode 100644 index 00000000..63bba94e --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedArray/prototype-constructor-identity.js @@ -0,0 +1,59 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var gTestfile = 'prototype-constructor-identity.js'; +//----------------------------------------------------------------------------- +var BUGNUMBER = 896116; +var summary = + "Typed array prototypes/constructors should be largely empty, inheriting " + "most functionality from %TypedArray% and %TypedArray%.prototype"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var TypedArray = Object.getPrototypeOf(Int8Array); + +assertEq(TypedArray !== Function.prototype, true, + "%TypedArray% should be in constructors' [[Prototype]] chains"); +assertEq(Object.getPrototypeOf(TypedArray), Function.prototype, + "%TypedArray%.prototype should inherit from Function.prototype"); + +assertEq(TypedArray.prototype.constructor, TypedArray, + "bad %TypedArray%.prototype.constructor"); + +// Check a few different functions we implement are here, as a sanity check. +var typedArrayProps = Object.getOwnPropertyNames(TypedArray.prototype); +assertEq(typedArrayProps.indexOf("copyWithin") >= 0, true); +assertEq(typedArrayProps.indexOf("subarray") >= 0, true); +assertEq(typedArrayProps.indexOf("set") >= 0, true); + +var ctors = [Int8Array, Uint8Array, Uint8ClampedArray, + Int16Array, Uint16Array, + Int32Array, Uint32Array, + Float32Array, Float64Array]; +ctors.forEach(function(ctor) { + assertEq(Object.getPrototypeOf(ctor), TypedArray); + + var proto = ctor.prototype; + + // Inherited functions aren't present. + var props = Object.getOwnPropertyNames(proto).sort(); + assertEq(props[0], "BYTES_PER_ELEMENT"); + assertEq(props[1], "constructor"); + assertEq(props.length, 2); + + // The inheritance chain should be set up properly. + assertEq(Object.getPrototypeOf(proto), TypedArray.prototype, + "prototype should inherit from %TypedArray%.prototype"); +}); + +/******************************************************************************/ + +reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/TypedArray/set-same-buffer-different-source-target-types.js b/source/spidermonkey-tests/ecma_6/TypedArray/set-same-buffer-different-source-target-types.js new file mode 100644 index 00000000..9084ce88 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedArray/set-same-buffer-different-source-target-types.js @@ -0,0 +1,41 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var gTestfile = "set-same-buffer-different-source-target-types.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 896116; +var summary = + "When setting a typed array from an overlapping typed array of different " + + "element type, copy the source elements into properly-sized temporary " + + "memory, and properly copy them into the target without overflow (of " + + "either source *or* target) when finished"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +// smallest 2**n triggering segfaults in a pre-patch build locally, then +// quadrupled in case the boundary ever changes, or is different in some other +// memory-allocating implementation +var srclen = 65536; + +var ta = new Uint8Array(srclen * Float64Array.BYTES_PER_ELEMENT); +var ta2 = new Float64Array(ta.buffer, 0, srclen); +ta.set(ta2); + +// This test mostly exists to check for no crash above, but it's worth testing +// for no uninitialized memory (in case of buffer overflow) being copied into +// the array, too. +for (var i = 0, len = ta.length; i < len; i++) + assertEq(ta[i], 0, "zero-bits double should convert to zero"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/TypedArray/shell.js b/source/spidermonkey-tests/ecma_6/TypedArray/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/architecture.js b/source/spidermonkey-tests/ecma_6/TypedObject/architecture.js new file mode 100644 index 00000000..4ebaaa9c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/architecture.js @@ -0,0 +1,55 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) + +var BUGNUMBER = 578700; +var summary = 'Binary Data class diagram'; + +function assertNotEq(a, b) { + var ok = false; + try { + assertEq(a, b); + } catch(exc) { + ok = true; + } + + if (!ok) + throw new TypeError("Assertion failed: assertNotEq(" + a + " " + b + ")"); +} + +function assertThrows(f) { + var ok = false; + try { + f(); + } catch (exc) { + ok = true; + } + if (!ok) + throw new TypeError("Assertion failed: " + f + " did not throw as expected"); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + var ArrayType = TypedObject.ArrayType; + var StructType = TypedObject.StructType; + + assertEq(ArrayType instanceof Function, true); + assertEq(ArrayType.prototype instanceof Function, true); + + assertEq(ArrayType.__proto__, Function.__proto__); + assertEq(ArrayType.prototype.__proto__, Function.__proto__); + + assertEq(StructType instanceof Function, true); + assertEq(StructType.prototype instanceof Function, true); + + assertEq(Object.getPrototypeOf(StructType), + Object.getPrototypeOf(Function)); + assertEq(Object.getPrototypeOf(StructType.prototype), + Object.getPrototypeOf(Function)); + + if (typeof reportCompare === "function") + reportCompare(true, true); + + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/arraybuffer_isview.js b/source/spidermonkey-tests/ecma_6/TypedObject/arraybuffer_isview.js new file mode 100644 index 00000000..ca897887 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/arraybuffer_isview.js @@ -0,0 +1,25 @@ +var BUGNUMBER = 896105; +var summary = 'ArrayBuffer.isView'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function runTests() { + assertEq(ArrayBuffer.isView(), false); + assertEq(ArrayBuffer.isView(undefined), false); + assertEq(ArrayBuffer.isView(null), false); + assertEq(ArrayBuffer.isView("primitive"), false); + assertEq(ArrayBuffer.isView({}), false); + assertEq(ArrayBuffer.isView([]), false); + assertEq(ArrayBuffer.isView(new ArrayBuffer(10)), false); + assertEq(ArrayBuffer.isView(new Int8Array(10)), true); + assertEq(ArrayBuffer.isView(new Int8Array(10).subarray(0, 3)), true); + + if (typeof reportCompare !== 'undefined') + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/arrayequiv.js b/source/spidermonkey-tests/ecma_6/TypedObject/arrayequiv.js new file mode 100644 index 00000000..e6a89586 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/arrayequiv.js @@ -0,0 +1,59 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 922216; +var summary = 'TypedObjects Equivalent ArrayTypes'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function assertEquivalent(t1, t2) { + assertEq(true, t1.equivalent(t2)); + assertEq(true, t2.equivalent(t1)); +} + +function assertNotEquivalent(t1, t2) { + assertEq(false, t1.equivalent(t2)); + assertEq(false, t2.equivalent(t1)); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + // Create a line: + var PixelType1 = new StructType({x: uint8, y: uint8}); + var PixelsType1 = PixelType1.array(22); + + // Sanity checks about type equivalence: + assertEquivalent(PixelType1, PixelType1); + assertEquivalent(PixelsType1, PixelsType1); + assertNotEquivalent(PixelType1, PixelsType1); + + // Define the same two types again. Equivalent. + var PixelType2 = new StructType({x: uint8, y: uint8}); + var PixelsType2 = PixelType2.array(22); + assertEquivalent(PixelType1, PixelType2); + assertEquivalent(PixelsType1, PixelsType2); + + // Define the pixel type with field order reversed. Not equivalent. + var PixelType3 = new StructType({y: uint8, x: uint8}); + var PixelsType3 = PixelType3.array(22); + assertNotEquivalent(PixelType1, PixelType3); + assertNotEquivalent(PixelsType1, PixelsType3); + + // Define the pixels type with different number of elements. Not equivalent. + var PixelsType3 = PixelType1.array(23); + assertNotEquivalent(PixelsType1, PixelsType3); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/arrayofstructs.js b/source/spidermonkey-tests/ecma_6/TypedObject/arrayofstructs.js new file mode 100644 index 00000000..e437bd7a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/arrayofstructs.js @@ -0,0 +1,29 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects StructType prototype chains'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var float32 = TypedObject.float32; + +function runTests() { + var Point = new ArrayType(float32, 3); + var Line = new StructType({from: Point, to: Point}); + var Lines = new ArrayType(Line, 3); + + var lines = new Lines([ + {from: [1, 2, 3], to: [4, 5, 6]}, + {from: [7, 8, 9], to: [10, 11, 12]}, + {from: [13, 14, 15], to: [16, 17, 18]} + ]); + + assertEq(lines[1].to[1], 11); + assertEqArray(lines[2].from, [13, 14, 15]); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); + + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/arraytype.js b/source/spidermonkey-tests/ecma_6/TypedObject/arraytype.js new file mode 100644 index 00000000..a72d4007 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/arraytype.js @@ -0,0 +1,136 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects ArrayType implementation'; + +function assertThrows(f) { + var ok = false; + try { + f(); + } catch (exc) { + ok = true; + } + if (!ok) + throw new TypeError("Assertion failed: " + f + " did not throw as expected"); +} + +var ArrayType = TypedObject.ArrayType; +var uint8 = TypedObject.uint8; +var float32 = TypedObject.float32; +var uint32 = TypedObject.uint32; + +function runTests() { + print(BUGNUMBER + ": " + summary); + + assertEq(typeof ArrayType.prototype.prototype.forEach == "function", true); + + assertThrows(function() ArrayType(uint8, 10)); + assertThrows(function() new ArrayType()); + assertThrows(function() new ArrayType("")); + assertThrows(function() new ArrayType(5)); + assertThrows(function() new ArrayType(uint8).dimension(-1)); + var A = new ArrayType(uint8, 10); + //assertEq(A.__proto__.__proto__, ArrayType.prototype); + assertEq(A.length, 10); + assertEq(A.elementType, uint8); + assertEq(A.byteLength, 10); + assertEq(A.toSource(), "new ArrayType(uint8, 10)"); + + //assertEq(A.prototype.__proto__.__proto__, ArrayType.prototype.prototype); + + var a = new A(); + assertEq(a.__proto__, A.prototype); + assertEq(a.length, 10); + + assertThrows(function() a.length = 2); + + for (var i = 0; i < a.length; i++) + a[i] = i*2; + + for (var i = 0; i < a.length; i++) + assertEq(a[i], i*2); + + a.forEach(function(val, i) { + assertEq(val, i*2); + assertEq(arguments[2], a); + }); + + // Range. + assertThrows(function() a[i] = 5); + + assertEq(a[a.length], undefined); + + // constructor takes initial value + var b = new A(a); + for (var i = 0; i < a.length; i++) + assertEq(b[i], i*2); + + + var b = new A([0, 1, 0, 1, 0, 1, 0, 1, 0, 1]); + for (var i = 0; i < b.length; i++) + assertEq(b[i], i%2); + + assertThrows(function() new A(5)); + assertThrows(function() new A(/fail/)); + // Length different + assertThrows(function() new A([0, 1, 0, 1, 0, 1, 0, 1, 0])); + + var Vec3 = new ArrayType(float32, 3); + var Sprite = new ArrayType(Vec3, 3); // say for position, velocity, and direction + assertEq(Sprite.elementType, Vec3); + assertEq(Sprite.elementType.elementType, float32); + + + var mario = new Sprite(); + // setting using binary data + mario[0] = new Vec3([1, 0, 0]); + // setting using JS array conversion + mario[1] = [1, 1.414, 3.14]; + + assertEq(mario[0].length, 3); + assertEq(mario[0][0], 1); + assertEq(mario[0][1], 0); + assertEq(mario[0][2], 0); + + assertThrows(function() mario[1] = 5); + mario[1][1] = {}; + assertEq(Number.isNaN(mario[1][1]), true); + + // ok this is just for kicks + var AllSprites = new ArrayType(Sprite, 65536); + var as = new AllSprites(); + assertEq(as.length, 65536); + + var indexPropDesc = Object.getOwnPropertyDescriptor(as, '0'); + assertEq(typeof indexPropDesc == "undefined", false); + assertEq(indexPropDesc.configurable, false); + assertEq(indexPropDesc.enumerable, true); + assertEq(indexPropDesc.writable, true); + + var lengthPropDesc = Object.getOwnPropertyDescriptor(as, 'length'); + assertEq(typeof lengthPropDesc == "undefined", false); + assertEq(lengthPropDesc.configurable, false); + assertEq(lengthPropDesc.enumerable, false); + assertEq(lengthPropDesc.writable, false); + + var counter = 0; + for (var nm in as) { + assertEq(+nm, counter++); + } + assertEq(counter, as.length); + + assertThrows(function() Object.defineProperty(o, "foo", { value: "bar" })); + + // check if a reference acts the way it should + var AA = uint8.array(5, 5); + var aa = new AA(); + var aa0 = aa[0]; + aa[0] = [0,1,2,3,4]; + for (var i = 0; i < aa0.length; i++) + assertEq(aa0[i], i); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/arrayzerolen.js b/source/spidermonkey-tests/ecma_6/TypedObject/arrayzerolen.js new file mode 100644 index 00000000..c8cdf2f5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/arrayzerolen.js @@ -0,0 +1,17 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 926401; +var summary = 'TypedObjects ArrayType implementation'; + +// Test creation of zero-length array + +function runTest() { + var T = TypedObject; + var Color = new T.StructType({'r': T.uint8, 'g': T.uint8, 'b': T.uint8}); + var Rainbow = Color.array(0); + var theOneISawWasJustBlack = new Rainbow([]); + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTest(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/atopbuffer.js b/source/spidermonkey-tests/ecma_6/TypedObject/atopbuffer.js new file mode 100644 index 00000000..6385edd9 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/atopbuffer.js @@ -0,0 +1,27 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 898356; + +var {StructType, uint32, Object, Any, storage, objectType} = TypedObject; + +function main() { // once a C programmer, always a C programmer. + print(BUGNUMBER + ": " + summary); + + var Uints = new StructType({f: uint32, g: uint32}); + + var anArray = new Uint32Array(2); + anArray[0] = 22; + anArray[1] = 44; + + var uints = new Uints(anArray.buffer); + assertEq(storage(uints).buffer, anArray.buffer); + assertEq(uints.f, 22); + assertEq(uints.g, 44); + + uints.f++; + assertEq(anArray[0], 23); + + reportCompare(true, true); + print("Tests complete"); +} + +main(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/atopbufferwithoffset.js b/source/spidermonkey-tests/ecma_6/TypedObject/atopbufferwithoffset.js new file mode 100644 index 00000000..a4e3af08 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/atopbufferwithoffset.js @@ -0,0 +1,51 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 898356; + +var {StructType, uint32, Object, Any, storage, objectType} = TypedObject; + +function main() { // once a C programmer, always a C programmer. + print(BUGNUMBER + ": " + summary); + + var Uints = new StructType({f: uint32, g: uint32}); + + var anArray = new Uint32Array(4); + anArray[1] = 22; + anArray[2] = 44; + + var uints = new Uints(anArray.buffer, 4); + assertEq(storage(uints).buffer, anArray.buffer); + assertEq(uints.f, 22); + assertEq(uints.g, 44); + uints.f++; + assertEq(anArray[1], 23); + + // No misaligned byte offsets or offsets that would stretch past the end: + assertThrows(() => new Uints(anArray.buffer, -4)); // negative + assertThrows(() => new Uints(anArray.buffer, -3)); // negative + assertThrows(() => new Uints(anArray.buffer, -2)); // negative + assertThrows(() => new Uints(anArray.buffer, -1)); // negative + new Uints(anArray.buffer, 0); // ok + assertThrows(() => new Uints(anArray.buffer, 1)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 2)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 3)); // misaligned + new Uints(anArray.buffer, 4); // ok + assertThrows(() => new Uints(anArray.buffer, 5)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 6)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 7)); // misaligned + new Uints(anArray.buffer, 8); // ok + assertThrows(() => new Uints(anArray.buffer, 9)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 10)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 11)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 12)); // would extend past end + assertThrows(() => new Uints(anArray.buffer, 13)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 14)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 15)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 16)); // would extend past end + assertThrows(() => new Uints(anArray.buffer, 17)); // misaligned + assertThrows(() => new Uints(anArray.buffer, 4294967292)); // overflows int + + reportCompare(true, true); + print("Tests complete"); +} + +main(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/map-neutered-midway.js b/source/spidermonkey-tests/ecma_6/TypedObject/map-neutered-midway.js new file mode 100644 index 00000000..b5b8e0a7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/map-neutered-midway.js @@ -0,0 +1,43 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")||!xulRuntime.shell) -- needs TypedObject, neuter() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 991981; +var summary = + "Behavior of mapping from an array neutered midway through mapping"; + +function mapOneDimArrayOfUint8(dataHandling) +{ + var FourByteArray = TypedObject.uint8.array(4); + var FourByteArrayArray = FourByteArray.array(4); + + var buf = new ArrayBuffer(16); + var arr = new FourByteArrayArray(buf); + + var count = 0; + assertThrowsInstanceOf(function() + { + arr.map(function(v) + { + if (count++ > 0) + neuter(buf, dataHandling); + return new FourByteArray(); + }); + }, TypeError, "mapping of a neutered object worked?"); +} + +function runTests() +{ + print(BUGNUMBER + ": " + summary); + + mapOneDimArrayOfUint8("change-data"); + mapOneDimArrayOfUint8("same-data"); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/memory.js b/source/spidermonkey-tests/ecma_6/TypedObject/memory.js new file mode 100644 index 00000000..24212417 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/memory.js @@ -0,0 +1,97 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects memory check'; + +function spin() { + for (var i = 0; i < 10000; i++) + ; +} + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + + +function runTests() { + print(BUGNUMBER + ": " + summary); + + var AA = uint8.array(5, 5); + var aa = new AA(); + var aa0 = aa[0]; + aa[0] = [0,1,2,3,4]; + + aa = null; + + gc(); + spin(); + + for (var i = 0; i < aa0.length; i++) + assertEq(aa0[i], i); + + var AAA = AA.array(5); + var aaa = new AAA(); + var a0 = aaa[0][0]; + + for (var i = 0; i < a0.length; i++) + assertEq(a0[i], 0); + + aaa[0] = [[0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4]]; + + aaa = null; + + gc(); + spin(); + for (var i = 0; i < a0.length; i++) + assertEq(a0[i], i); + + var Color = new StructType({'r': uint8, 'g': uint8, 'b': uint8}); + var Rainbow = Color.array(7); + + var theOneISawWasJustBlack = new Rainbow([ + {'r': 0, 'g': 0, 'b': 0}, + {'r': 0, 'g': 0, 'b': 0}, + {'r': 0, 'g': 0, 'b': 0}, + {'r': 0, 'g': 0, 'b': 0}, + {'r': 0, 'g': 0, 'b': 0}, + {'r': 0, 'g': 0, 'b': 0}, + {'r': 0, 'g': 0, 'b': 0}]); + + var middleBand = theOneISawWasJustBlack[3]; + theOneISawWasJustBlack = null; + gc(); + spin(); + assertEq(middleBand['r'] == 0 && middleBand['g'] == 0 && middleBand['b'] == 0, true); + middleBand.r = 255; + middleBand.g = 207; + middleBand.b = 142; + assertEq(middleBand['r'] == 255 && middleBand['g'] == 207 && middleBand['b'] == 142, true); + + var scopedType = function() { + var Point = new StructType({'x': int32, 'y': int32}); + var aPoint = new Point(); + aPoint.x = 4; + aPoint.y = 5; + return aPoint; + } + + var point = scopedType(); + gc(); + spin(); + gc(); + assertEq(point.constructor.fieldTypes.x, int32); + assertEq(point.constructor.fieldTypes.y, int32); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/method_build.js b/source/spidermonkey-tests/ecma_6/TypedObject/method_build.js new file mode 100644 index 00000000..c23f629c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/method_build.js @@ -0,0 +1,141 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 939715; +var summary = 'method type.build'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function oneDimensionalArrayOfUints() { + var grain = uint32; + var type = grain.array(4); + var r1 = type.build(x => x * 2); + assertTypedEqual(type, r1, new type([0, 2, 4, 6])); +} + +function oneDimensionalArrayOfStructs() { + var grain = new StructType({f: uint32}); + var type = grain.array(4); + var r1 = type.build(x => new grain({f: x * 2})); + var r2 = type.build((x, out) => { out.f = x * 2; }); + assertTypedEqual(type, r1, new type([{f:0}, {f:2}, + {f:4}, {f:6}])); + assertTypedEqual(type, r1, r2); +} + +// At an attempt at readability, the tests below all try to build up +// numbers where there is a one-to-one mapping between input dimension +// and base-10 digit in the output. +// +// (Note that leading zeros must be elided in the expected-values to +// avoid inadvertantly interpreting the numbers as octal constants.) + +function twoDimensionalArrayOfStructsWithDepth2() { + var grain = new StructType({f: uint32}); + var type = grain.array(2, 2); + + var r1 = type.build(2, (x, y) => { + return new grain({f: x * 10 + y}); + }); + + var r2 = type.build(2, (x, y, out) => { + out.f = x * 10 + y; + }); + + assertTypedEqual(type, r1, new type([[{f: 0}, {f: 1}], + [{f:10}, {f:11}]])); + assertTypedEqual(type, r1, r2); +} + +function twoDimensionalArrayOfStructsWithDepth1() { + var grain = new StructType({f: uint32}).array(2); + var type = grain.array(2); + + var r1 = type.build((x) => { + return new grain([{f: x * 10}, + {f: x * 10 + 1}]); + }); + + var r2 = type.build(1, (x, out) => { + out[0].f = x * 10 + 0; + out[1].f = x * 10 + 1; + }); + + assertTypedEqual(type, r1, new type([[{f: 0}, {f: 1}], + [{f:10}, {f:11}]])); + assertTypedEqual(type, r1, r2); +} + +function threeDimensionalArrayOfUintsWithDepth3() { + var grain = uint32; + var type = grain.array(2).array(2).array(2); + var r1 = type.build(3, (x,y,z) => x * 100 + y * 10 + z); + assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]], + [[100, 101], [110, 111]]])); +} + +function threeDimensionalArrayOfUintsWithDepth2() { + var grain = uint32.array(2); + var type = grain.array(2).array(2); + var r1 = type.build(2, (x,y) => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1]); + var r1b = type.build(2, (x,y) => grain.build(z => x * 100 + y * 10 + z)); + var r1c = type.build(2, (x,y) => grain.build(1, z => x * 100 + y * 10 + z)); + + var r2 = type.build(2, (x,y, out) => { out[0] = x * 100 + y * 10 + 0; + out[1] = x * 100 + y * 10 + 1; + }); + assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]], + [[100, 101], [110, 111]]])); + assertTypedEqual(type, r1, r1b); + assertTypedEqual(type, r1, r1c); + assertTypedEqual(type, r1, r2); +} + +function threeDimensionalArrayOfUintsWithDepth1() { + var grain = uint32.array(2).array(2); + var type = grain.array(2); + var r1 = type.build(1, (x) => grain.build(y => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1])); + var r1b = type.build(1, (x) => grain.build(1, y => [x * 100 + y * 10 + 0, x * 100 + y * 10 + 1])); + var r1c = type.build(1, (x) => grain.build(2, (y,z) => x * 100 + y * 10 + z)); + var r2 = type.build(1, (x, out) => { out[0][0] = x * 100 + 0 * 10 + 0; + out[0][1] = x * 100 + 0 * 10 + 1; + out[1][0] = x * 100 + 1 * 10 + 0; + out[1][1] = x * 100 + 1 * 10 + 1; + }); + assertTypedEqual(type, r1, new type([[[ 0, 1], [ 10, 11]], + [[100, 101], [110, 111]]])); + assertTypedEqual(type, r1, r1b); + assertTypedEqual(type, r1, r1c); + assertTypedEqual(type, r1, r2); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + oneDimensionalArrayOfUints(); + oneDimensionalArrayOfStructs(); + twoDimensionalArrayOfStructsWithDepth2(); + twoDimensionalArrayOfStructsWithDepth1(); + threeDimensionalArrayOfUintsWithDepth3(); + threeDimensionalArrayOfUintsWithDepth2(); + threeDimensionalArrayOfUintsWithDepth1(); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/method_filter.js b/source/spidermonkey-tests/ecma_6/TypedObject/method_filter.js new file mode 100644 index 00000000..37cd445a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/method_filter.js @@ -0,0 +1,47 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 939715; +var summary = 'method instance.filter'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +var objectType = TypedObject.objectType; + +function filterOdds() { + var length = 100; + var Uint32s = new ArrayType(uint32, 100); + var uint32s = new Uint32s(); + for (var i = 0; i < length; i++) + uint32s[i] = i; + + var odds = uint32s.filter(i => (i % 2) != 0); + assertEq(50, odds.length); + for (var i = 0, j = 1; j < length; i++, j += 2) + assertEq(odds[i], j); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + filterOdds(); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/method_from.js b/source/spidermonkey-tests/ecma_6/TypedObject/method_from.js new file mode 100644 index 00000000..6f0aab19 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/method_from.js @@ -0,0 +1,221 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 939715; +var summary = 'method type.from'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +// Test name format: + +// fromDimArrayOfsTos where is a positive integer (or its +// equivalent word in English) and and are both grain types +// (potentially an array themselves.) + +function fromOneDimArrayOfUint8ToUint32s() { + var intype = uint8.array(4); + var type = uint32.array(4); + var i1 = intype.build(i => i); + var r1 = type.from(i1, j => j*2); + var r2 = type.from(i1, 1, j => j*2); + assertTypedEqual(type, r1, new type([0, 2, 4, 6])); + assertTypedEqual(type, r1, r2); +} + +function fromOneDimArrayOfUint32ToUint8s() { + var intype = uint32.array(4); + var type = uint8.array(4); + var i1 = intype.build(i => i); + var r1 = type.from(i1, j => j*200); + var r2 = type.from(i1, 1, j => j*200); + assertTypedEqual(type, r1, new type([0, 200, 400 % 256, 600 % 256])); + assertTypedEqual(type, r1, r2); +} + +function fromTwoDimArrayOfUint8ToUint32s() { + var intype = uint8.array(4).array(4); + var rowtype = uint32.array(4); + var type = rowtype.array(4); + var i1 = new type([[10, 11, 12, 13], + [20, 21, 22, 23], + [30, 31, 32, 33], + [40, 41, 42, 43]]); + + var r1 = type.from(i1, 2, x => x*2); + var r2 = type.from(i1, 1, a => rowtype.from(a, 1, x => x*2)); + var r3 = type.from(i1, 1, (a, j, c, out) => { out[0] = a[0]*2; + out[1] = a[1]*2; + out[2] = a[2]*2; + out[3] = a[3]*2; }); + assertTypedEqual(type, r1, new type([[20, 22, 24, 26], + [40, 42, 44, 46], + [60, 62, 64, 66], + [80, 82, 84, 86]])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +function fromTwoDimArrayOfUint32ToUint8s() { + var intype = uint32.array(4).array(4); + var rowtype = uint8.array(4); + var type = rowtype.array(4); + var i1 = new type([[10, 11, 12, 13], + [20, 21, 22, 23], + [30, 31, 32, 33], + [40, 41, 42, 43]]); + + var r1 = type.from(i1, 2, x => x*2); + var r2 = type.from(i1, 1, a => rowtype.from(a, 1, x => x*2)); + var r3 = type.from(i1, 1, (a, j, c, out) => { out[0] = a[0]*2; + out[1] = a[1]*2; + out[2] = a[2]*2; + out[3] = a[3]*2; }); + assertTypedEqual(type, r1, new type([[20, 22, 24, 26], + [40, 42, 44, 46], + [60, 62, 64, 66], + [80, 82, 84, 86]])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +function fromOneDimArrayOfArrayOfUint8ToUint32s() { + var intype = uint8.array(4).array(4); + var type = uint32.array(4); + var i1 = new intype([[0xdd, 0xcc, 0xbb, 0xaa], + [0x09, 0x08, 0x07, 0x06], + [0x15, 0x14, 0x13, 0x12], + [0x23, 0x32, 0x41, 0x50]]); + + function combine(a,b,c,d) { return a << 24 | b << 16 | c << 8 | d; } + + var r1 = type.from(i1, x => combine(x[0], x[1], x[2], x[3])); + assertTypedEqual(type, r1, new type([0xddccbbaa, + 0x09080706, + 0x15141312, + 0x23324150])); +} + +function fromOneDimArrayOfUint32ToArrayOfUint8s() { + var intype = uint32.array(4); + var type = uint8.array(4).array(4); + var i1 = new intype([0xddccbbaa, + 0x09080706, + 0x15141312, + 0x23324150]); + + function divide(a) { return [a >> 24 & 0xFF, a >> 16 & 0xFF, a >> 8 & 0xFF, a & 0xFF]; } + + var r1 = type.from(i1, x => divide(x)); + var r2 = type.from(i1, 1, (x, i, c, out) => { + var [a,b,c,d] = divide(x); + out[0] = a; out[1] = b; out[2] = c; out[3] = d; + }); + assertTypedEqual(type, r1, new type([[0xdd, 0xcc, 0xbb, 0xaa], + [0x09, 0x08, 0x07, 0x06], + [0x15, 0x14, 0x13, 0x12], + [0x23, 0x32, 0x41, 0x50]])); + assertTypedEqual(type, r1, r2); +} + +var Grain = new StructType({f: uint32}); +function wrapG(v) { return new Grain({f: v}); } +function doubleG(g) { return new Grain({f: g.f * 2}); } +function tenG(x, y) { return new Grain({f: x * 10 + y}); } + +function fromOneDimArrayOfStructsToStructs() { + var type = Grain.array(4); + var i1 = type.build(wrapG); + var r1 = type.from(i1, doubleG); + var r2 = type.from(i1, 1, doubleG); + var r3 = type.from(i1, 1, (g, j, c, out) => { out.f = g.f * 2; }); + assertTypedEqual(type, r1, new type([{f:0}, {f:2}, + {f:4}, {f:6}])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +function fromTwoDimArrayOfStructsToStructs() { + var rowtype = Grain.array(2); + var type = rowtype.array(2); + var i1 = type.build(2, tenG); + var r1 = type.from(i1, 2, doubleG); + var r2 = type.from(i1, 1, (m) => rowtype.from(m, 1, doubleG)); + var r3 = type.from(i1, 1, + (m, j, c, out) => { out[0].f = m[0].f * 2; out[1].f = m[1].f * 2; }); + assertTypedEqual(type, r1, new type([[{f:00}, {f:02}], + [{f:20}, {f:22}]])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +function fromOneDimArrayOfStructsToArrayOfStructs() { + var Line = Grain.array(2); + var Box = Line.array(2); + var i1 = Line.build(wrapG); + var r1 = Box.from(i1, (g) => Line.build((y) => tenG(g.f, y))); + var r2 = Box.from(i1, (g) => Line.from(i1, (y) => tenG(g.f, y.f))); + var r3 = Box.from(i1, + (g, j, c, out) => { out[0] = tenG(g.f, 0); out[1] = tenG(g.f, 1); }); + assertTypedEqual(Box, r1, new Box([[{f:00}, {f:01}], + [{f:10}, {f:11}]])); + assertTypedEqual(Box, r1, r2); + assertTypedEqual(Box, r1, r3); +} + +function fromUntypedArrayToUint32s() { + var type = uint32.array(4); + var i1 = Array.build(4, i => i); + var r1 = type.from(i1, j => j*2); + var r2 = type.from(i1, 1, j => j*2); + assertTypedEqual(type, r1, new type([0, 2, 4, 6])); + assertTypedEqual(type, r1, r2); +} + +function fromUntypedArrayToUint8s() { + var type = uint8.array(4); + var i1 = Array.build(4, i => i); + var r1 = type.from(i1, j => j*200); + var r2 = type.from(i1, 1, j => j*200); + assertTypedEqual(type, r1, new type([0, 200, 400 % 256, 600 % 256])); + assertTypedEqual(type, r1, r2); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + fromOneDimArrayOfUint8ToUint32s(); + fromOneDimArrayOfUint32ToUint8s(); + + fromTwoDimArrayOfUint8ToUint32s(); + fromTwoDimArrayOfUint32ToUint8s(); + + fromOneDimArrayOfArrayOfUint8ToUint32s(); + fromOneDimArrayOfUint32ToArrayOfUint8s(); + + fromOneDimArrayOfStructsToStructs(); + fromTwoDimArrayOfStructsToStructs(); + + fromOneDimArrayOfStructsToArrayOfStructs(); + + fromUntypedArrayToUint32s(); + fromUntypedArrayToUint8s(); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/method_map.js b/source/spidermonkey-tests/ecma_6/TypedObject/method_map.js new file mode 100644 index 00000000..e5bf9b3e --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/method_map.js @@ -0,0 +1,136 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 939715; +var summary = 'method instance.map'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +// Test name format: + +// mapDimArrayOfsTos where is a positive integer (or its +// equivalent word in English) and and are both grain types +// (potentially an array themselves.) + +function mapOneDimArrayOfUint8() { + var type = uint8.array(4); + var i1 = type.build(i => i); + var r1 = i1.map(j => j*200); + var r2 = i1.map(1, j => j*200); + assertTypedEqual(type, r1, new type([0, 200, 400 % 256, 600 % 256])); + assertTypedEqual(type, r1, r2); +} + +function mapOneDimArrayOfUint32() { + var type = uint32.array(4); + var i1 = type.build(i => i); + var r1 = i1.map(j => j*200); + var r2 = i1.map(1, j => j*200); + assertTypedEqual(type, r1, new type([0, 200, 400, 600])); + assertTypedEqual(type, r1, r2); +} + +function mapTwoDimArrayOfUint8() { + var type = uint8.array(4).array(4); + var i1 = new type([[10, 11, 12, 13], + [20, 21, 22, 23], + [30, 31, 32, 33], + [40, 41, 42, 43]]); + + var r1 = i1.map(2, x => x*2); + var r2 = i1.map(1, a => a.map(1, x => x*2)); + var r3 = i1.map(1, (a, j, c, out) => { out[0] = a[0]*2; + out[1] = a[1]*2; + out[2] = a[2]*2; + out[3] = a[3]*2; }); + assertTypedEqual(type, r1, new type([[20, 22, 24, 26], + [40, 42, 44, 46], + [60, 62, 64, 66], + [80, 82, 84, 86]])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +function mapTwoDimArrayOfUint32() { + var type = uint32.array(4).array(4); + var i1 = new type([[10, 11, 12, 13], + [20, 21, 22, 23], + [30, 31, 32, 33], + [40, 41, 42, 43]]); + + var r1 = i1.map(2, x => x*2); + var r2 = i1.map(1, a => a.map(1, x => x*2)); + var r3 = i1.map(1, (a, j, c, out) => { out[0] = a[0]*2; + out[1] = a[1]*2; + out[2] = a[2]*2; + out[3] = a[3]*2; }); + assertTypedEqual(type, r1, new type([[20, 22, 24, 26], + [40, 42, 44, 46], + [60, 62, 64, 66], + [80, 82, 84, 86]])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +var Grain = new StructType({f: uint32}); +function wrapG(v) { return new Grain({f: v}); } +function doubleG(g) { return new Grain({f: g.f * 2}); } +function tenG(x, y) { return new Grain({f: x * 10 + y}); } + +function mapOneDimArrayOfStructs() { + var type = Grain.array(4); + var i1 = type.build(wrapG); + var r1 = i1.map(doubleG); + var r2 = i1.map(1, doubleG); + var r3 = i1.map(1, (g, j, c, out) => { out.f = g.f * 2; }); + assertTypedEqual(type, r1, new type([{f:0}, {f:2}, + {f:4}, {f:6}])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +function mapTwoDimArrayOfStructs() { + var rowtype = Grain.array(2); + var type = rowtype.array(2); + var i1 = type.build(2, tenG); + var r1 = i1.map(2, doubleG); + var r2 = i1.map(1, (m) => m.map(1, doubleG)); + var r3 = i1.map(1, (m, j, c, out) => { out[0].f = m[0].f * 2; + out[1].f = m[1].f * 2; }); + assertTypedEqual(type, r1, new type([[{f:00}, {f:02}], + [{f:20}, {f:22}]])); + assertTypedEqual(type, r1, r2); + assertTypedEqual(type, r1, r3); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + mapOneDimArrayOfUint8(); + mapOneDimArrayOfUint32(); + + mapTwoDimArrayOfUint8(); + mapTwoDimArrayOfUint32(); + + mapOneDimArrayOfStructs(); + mapTwoDimArrayOfStructs(); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/method_reduce.js b/source/spidermonkey-tests/ecma_6/TypedObject/method_reduce.js new file mode 100644 index 00000000..7e710d62 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/method_reduce.js @@ -0,0 +1,91 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 939715; +var summary = 'method instance.reduce'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function reduceUint8s() { + var uint8Array = uint8.array(5); + var array = new uint8Array([128, 129, 130, 131, 132]); + + var sum = array.reduce((a, b) => a + b); + assertEq(sum, (128+129+130+131+132) % 256); + + var f64Array = float64.array(5); + var floats = new f64Array([128.0, 129.0, 130.0, 131.0, 132.0]); + + // (Note that floating point add is not associative in general; + // we should double-check that the result below is robust.) + var fsum = floats.reduce((a, b) => a + b); + assertEq(fsum, 128.0+129.0+130.0+131.0+132.0); +} + +function reduceVectors() { + var VectorType = uint32.array(3); + var VectorsType = VectorType.array(3); + var array = new VectorsType([[1, 2, 3], + [4, 5, 6], + [7, 8, 9]]); + + var sum = array.reduce(vectorAdd); + assertTypedEqual(VectorType, + sum, + new VectorType([1+4+7, + 2+5+8, + 3+6+9])); + + // The mutated accumulator does not alias the input. + assertTypedEqual(VectorsType, + array, + new VectorsType([[1, 2, 3], + [4, 5, 6], + [7, 8, 9]])); + + var sum = array.reduce(vectorAddFunctional); + assertTypedEqual(VectorType, + sum, + new VectorType([1+4+7, + 2+5+8, + 3+6+9])); + + function vectorAdd(l, r) { + assertEq(l.length, r.length); + for (var i = 0; i < l.length; i++) + l[i] += r[i]; + return l; + } + + function vectorAddFunctional(l, r) { + assertEq(l.length, r.length); + return VectorType.build(1, i => l[i] + r[i]); + } + +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + reduceUint8s(); + reduceVectors(); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/method_scatter.js b/source/spidermonkey-tests/ecma_6/TypedObject/method_scatter.js new file mode 100644 index 00000000..e685f5a0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/method_scatter.js @@ -0,0 +1,95 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 939715; +var summary = 'method instance.scatter'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function scatterUint8sPermute() { + var uint8Array = uint8.array(5); + var array = new uint8Array([124, 120, 122, 123, 121]); + + var perm = array.scatter(uint8Array, [4, 0, 2, 3, 1]); + assertTypedEqual(uint8Array, perm, [120, 121, 122, 123, 124]); +} + +function scatterUint8sPermuteIncomplete() { + var uint8Array4 = uint8.array(4); + var uint8Array5 = uint8.array(5); + var array = new uint8Array4([124, 120, 122, 123]); + + var perm; + perm = array.scatter(uint8Array5, [4, 0, 2, 3]); + assertTypedEqual(uint8Array5, perm, [120, 0, 122, 123, 124]); + + perm = array.scatter(uint8Array5, [4, 0, 2, 3], 77); + assertTypedEqual(uint8Array5, perm, [120, 77, 122, 123, 124]); +} + +function scatterUint8sHistogram() { + var uint32Array5 = uint32.array(5); + var uint32Array3 = uint32.array(3); + var array = new uint32Array5([1, 10, 100, 1000, 10000]); + + var hist = array.scatter(uint32Array3, [1, 1, 2, 1, 0], 0, (a,b) => a+b); + assertTypedEqual(uint32Array3, hist, [10000, 1011, 100]); +} + +function scatterUint8sCollisionThrows() { + var uint32Array5 = uint32.array(5); + var uint32Array3 = uint32.array(3); + var array = new uint32Array5([1, 10, 100, 1000, 10000]); + + var unset_nonce = new Object(); + var unset = unset_nonce; + try { + unset = array.scatter(uint32Array3, [1, 1, 2, 1, 0], 0); + } catch (e) { + assertEq(unset, unset_nonce); + } +} + +function scatterUint8sConflictIsAssocNonCommute() { + var uint32Array5 = uint32.array(5); + var uint32Array3 = uint32.array(3); + var array = new uint32Array5([1, 10, 100, 1000, 10000]); + + // FIXME strawman spec says conflict must be associative, but does + // not dictate commutative. Yet, strawman spec does not appear to + // specify operation order; must address incongruence. + + var lfts = array.scatter(uint32Array3, [1, 1, 2, 1, 0], 0, (a,b) => a); + assertTypedEqual(uint32Array3, lfts, [10000, 1, 100]); + var rgts = array.scatter(uint32Array3, [1, 1, 2, 1, 0], 0, (a,b) => b); + assertTypedEqual(uint32Array3, rgts, [10000, 1000, 100]); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + scatterUint8sPermute(); + scatterUint8sPermuteIncomplete(); + scatterUint8sHistogram(); + scatterUint8sCollisionThrows(); + scatterUint8sConflictIsAssocNonCommute(); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/numerictypes.js b/source/spidermonkey-tests/ecma_6/TypedObject/numerictypes.js new file mode 100644 index 00000000..3146eef6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/numerictypes.js @@ -0,0 +1,189 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects numeric types'; +var actual = ''; +var expect = ''; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function runTests() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + var TestPassCount = 0; + var TestFailCount = 0; + var TestTodoCount = 0; + + var TODO = 1; + + function check(fun, todo) { + var thrown = null; + var success = false; + try { + success = fun(); + } catch (x) { + thrown = x; + } + + if (thrown) + success = false; + + if (todo) { + TestTodoCount++; + + if (success) { + var ex = new Error; + print ("=== TODO but PASSED? ==="); + print (ex.stack); + print ("========================"); + } + + return; + } + + if (success) { + TestPassCount++; + } else { + TestFailCount++; + + var ex = new Error; + print ("=== FAILED ==="); + print (ex.stack); + if (thrown) { + print (" threw exception:"); + print (thrown); + } + print ("=============="); + } + } + + function checkThrows(fun, todo) { + var thrown = false; + try { + fun(); + } catch (x) { + thrown = true; + } + + check(function() thrown, todo); + } + + var types = [uint8, uint16, uint32, int8, int16, int32]; + var strings = ["uint8", "uint16", "uint32", "int8", "int16", "int32"]; + for (var i = 0; i < types.length; i++) { + var type = types[i]; + + check(function() type(true) === 1); + check(function() type(false) === 0); + check(function() type(+Infinity) === 0); + check(function() type(-Infinity) === 0); + check(function() type(NaN) === 0); + check(function() type.toSource() === strings[i]); + check(function() type(null) == 0); + check(function() type(undefined) == 0); + check(function() type([]) == 0); + check(function() type({}) == 0); + check(function() type(/abcd/) == 0); + + checkThrows(function() new type()); + checkThrows(function() type()); + } + + var floatTypes = [float32, float64]; + var floatStrings = ["float32", "float64"]; + for (var i = 0; i < floatTypes.length; i++) { + var type = floatTypes[i]; + + check(function() type(true) === 1); + check(function() type(false) === 0); + check(function() type(+Infinity) === Infinity); + check(function() type(-Infinity) === -Infinity); + check(function() Number.isNaN(type(NaN))); + check(function() type.toSource() === floatStrings[i]); + check(function() type(null) == 0); + check(function() Number.isNaN(type(undefined))); + check(function() type([]) == 0); + check(function() Number.isNaN(type({}))); + check(function() Number.isNaN(type(/abcd/))); + + checkThrows(function() new type()); + checkThrows(function() type()); + } + + ///// test ranges and creation + /// uint8 + // valid + check(function() uint8(0) == 0); + check(function() uint8(-0) == 0); + check(function() uint8(129) == 129); + check(function() uint8(255) == 255); + + // overflow is allowed for explicit conversions + check(function() uint8(-1) == 255); + check(function() uint8(-255) == 1); + check(function() uint8(256) == 0); + check(function() uint8(2345678) == 206); + check(function() uint8(3.14) == 3); + check(function() uint8(342.56) == 86); + check(function() uint8(-342.56) == 170); + + /// uint8clamped + // valid + check(function() uint8Clamped(0) == 0); + check(function() uint8Clamped(-0) == 0); + check(function() uint8Clamped(129) == 129); + check(function() uint8Clamped(-30) == 0); + check(function() uint8Clamped(254.5) == 254); + check(function() uint8Clamped(257) == 255); + check(function() uint8Clamped(513) == 255); + check(function() uint8Clamped(60000) == 255); + + // strings + check(function() uint8("0") == 0); + check(function() uint8("255") == 255); + check(function() uint8("256") == 0); + check(function() uint8("0x0f") == 15); + check(function() uint8("0x00") == 0); + check(function() uint8("0xff") == 255); + check(function() uint8("0x1ff") == 255); + // in JS, string literals with leading zeroes are interpreted as decimal + check(function() uint8("-0777") == 247); + check(function() uint8("-0xff") == 0); + + /// uint16 + // valid + check(function() uint16(65535) == 65535); + + // overflow is allowed for explicit conversions + check(function() uint16(-1) == 65535); + check(function() uint16(-65535) == 1); + check(function() uint16(-65536) == 0); + check(function() uint16(65536) == 0); + + // strings + check(function() uint16("0x1234") == 0x1234); + check(function() uint16("0x00") == 0); + check(function() uint16("0xffff") == 65535); + check(function() uint16("-0xffff") == 0); + check(function() uint16("0xffffff") == 0xffff); + + // wrong types + check(function() uint16(3.14) == 3); // c-like casts in explicit conversion + + print("done"); + + reportCompare(0, TestFailCount, "TypedObjects numeric type tests"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/objecttype.js b/source/spidermonkey-tests/ecma_6/TypedObject/objecttype.js new file mode 100644 index 00000000..3f0f3747 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/objecttype.js @@ -0,0 +1,38 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 917454; +var summary = 'objecttype'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var T = TypedObject; + +function runTests() { + var Point = T.float32.array(3); + var Line = new T.StructType({from: Point, to: Point}); + var Lines = Line.array(3); + + var lines = new Lines([ + {from: [1, 2, 3], to: [4, 5, 6]}, + {from: [7, 8, 9], to: [10, 11, 12]}, + {from: [13, 14, 15], to: [16, 17, 18]} + ]); + + assertEq(T.objectType(lines), Lines); + assertEq(T.objectType(lines[0]), Line); + assertEq(T.objectType(lines[0].from[0]), T.float64); + assertEq(T.objectType(""), T.String); + assertEq(T.objectType({}), T.Object); + assertEq(T.objectType([]), T.Object); + assertEq(T.objectType(function() { }), T.Object); + assertEq(T.objectType(undefined), T.Any); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); + + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/redimension.js b/source/spidermonkey-tests/ecma_6/TypedObject/redimension.js new file mode 100644 index 00000000..c061f5a2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/redimension.js @@ -0,0 +1,57 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 922172; +var summary = 'redimension method'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var T = TypedObject; + +function runTests() { + var counter; + + // create an array of 40 bytes with some initial data + var Bytes40 = T.uint8.array(40); + var bytes40 = new Bytes40(); + for (var i = 0, counter = 0; i < 40; i++) + bytes40[i] = counter++; + + // redimension to an array of 10x4 bytes, check data is unchanged + var Bytes10times4 = T.uint8.array(10, 4); + var bytes10times4 = bytes40.redimension(Bytes10times4); + counter = 0; + for (var i = 0; i < 10; i++) + for (var j = 0; j < 4; j++) + assertEq(counter++, bytes10times4[i][j]); + + // redimension to an array of 2x5x2x2, check data is unchanged + var Bytes2times5times2times2 = T.uint8.array(2, 5, 2, 2); + var bytes2times5times2times2 = bytes10times4.redimension(Bytes2times5times2times2); + counter = 0; + for (var i = 0; i < 2; i++) + for (var j = 0; j < 5; j++) + for (var k = 0; k < 2; k++) + for (var l = 0; l < 2; l++) + assertEq(counter++, bytes2times5times2times2[i][j][k][l]); + + // test what happens if number of elements does not match + assertThrowsInstanceOf(() => { + var Bytes10times5 = T.uint8.array(10, 5); + bytes40.redimension(Bytes10times5); + }, TypeError); + + // test what happens if inner type does not match, even if size is the same + assertThrowsInstanceOf(() => { + var Words40 = T.uint8Clamped.array(40); + bytes40.redimension(Words40); + }, TypeError); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); + + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/referencetypealiasing.js b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypealiasing.js new file mode 100644 index 00000000..66e6e16a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypealiasing.js @@ -0,0 +1,33 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 898359; +var summary = 'TypedObjects reference type aliasing'; +var actual = ''; +var expect = ''; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var Any = TypedObject.Any; +var Object = TypedObject.Object; +var string = TypedObject.string; + +function runTests() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + var MyType = new StructType({f: Object}); + + // Test aliasing + var myInstance = new MyType({f: {a: 22}}); + var anotherInstance = new MyType({f: myInstance.f}); + assertEq(myInstance.f.a, 22); + assertEq(myInstance.f.a, anotherInstance.f.a); + + myInstance.f.a += 1; + assertEq(myInstance.f.a, 23); + assertEq(myInstance.f.a, anotherInstance.f.a); + + reportCompare(true, true, "TypedObjects reference type aliasing tests"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/referencetypecoercions.js b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypecoercions.js new file mode 100644 index 00000000..0a62b07f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypecoercions.js @@ -0,0 +1,70 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 898359; +var summary = 'TypedObjects reference type coercions'; +var actual = ''; +var expect = ''; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var Any = TypedObject.Any; +var Object = TypedObject.Object; +var string = TypedObject.string; + +function TestValues(type, values) { + for (var i = 0; i < values.length; i++) { + compare(type(values[i].input), values[i]); + } + + var Struct = new StructType({f: type}); + for (var i = 0; i < values.length; i++) { + var struct = new Struct({f: values[i].input}); + compare(struct.f, values[i]); + } + + for (var i = 0; i < values.length; i++) { + var struct = new Struct(); + struct.f = values[i].input; + compare(struct.f, values[i]); + } + + var Array = new ArrayType(type, 1); + for (var i = 0; i < values.length; i++) { + var array = new Array(); + array[0] = values[i].input; + compare(array[0], values[i]); + } + + function compare(v, spec) { + if (spec.source) + v = v.toSource(); + assertEq(v, spec.output); + } +} + +function runTests() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + var x = {}; + + TestValues(Any, [{input: undefined, output: undefined}, + {input: x, output: x}, + {input: 22.22, output: 22.22}, + {input: true, output: true}]); + + TestValues(string, [{input: undefined, output: "undefined"}, + {input: x, output: x.toString()}, + {input: 22.22, output: "22.22"}, + {input: true, output: "true"}]); + + assertThrows(() => Object(undefined)); + + TestValues(Object, [{input: x, output: x}, + {input: 22.22, source: true, output: "(new Number(22.22))"}, + {input: true, source: true, output: "(new Boolean(true))"}]); + + reportCompare(true, true, "TypedObjects reference type tests"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/referencetypemultiple.js b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypemultiple.js new file mode 100644 index 00000000..f5fc5489 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypemultiple.js @@ -0,0 +1,22 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 898359; +var summary = 'TypedObjects reference type coercions'; +var actual = ''; +var expect = ''; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var Any = TypedObject.Any; +var Object = TypedObject.Object; +var string = TypedObject.string; + + +function runTests() +{ + var S = new StructType({f: Any, g: Any}); + var s = new S({f: "Hello", g: "Hello"}); + assertEq(s.f, s.g); + reportCompare(true, true, "TypedObjects trace tests"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/referencetypetrace.js b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypetrace.js new file mode 100644 index 00000000..e0fa2217 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypetrace.js @@ -0,0 +1,93 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")||!this.hasOwnProperty("countHeap")) +var BUGNUMBER = 898359; +var summary = 'TypedObjects reference type trace'; +var actual = ''; +var expect = ''; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var Any = TypedObject.Any; +var Object = TypedObject.Object; +var string = TypedObject.string; + +function assertCanReach(from, target, times) { + times = times || 1; + var count1 = countHeap(from, "specific", target); + print("canReach:", count1, times, from.toSource(), target.toSource()); + assertEq(count1, times); +} + +function assertCannotReach(from, target) { + var count1 = countHeap(from, "specific", target); + print("cannotReach:", count1, from.toSource(), target.toSource()); + assertEq(count1, 0); +} + +function TestStructFields(RefType) { + var rabbit = {}; + var S1 = new StructType({f: RefType}); + var s1 = new S1({f: rabbit}); + assertCanReach(s1, rabbit); + s1.f = null; + assertCannotReach(s1, rabbit); +} + +function TestArrayElements(RefType) { + var rabbit = {}; + var S1 = new ArrayType(RefType, 1); + var s1 = new S1([rabbit]); + assertCanReach(s1, rabbit); + s1[0] = null; + assertCannotReach(s1, rabbit); +} + +function TestStructInArray(RefType) { + var rabbit = {}; + var S2 = new StructType({f: RefType, g: RefType}); + var S1 = new ArrayType(S2, 1); + var s1 = new S1([{f: rabbit, g: {}}]); + assertCanReach(s1, rabbit); + s1[0].f = null; + assertCannotReach(s1, rabbit); +} + +function TestStringInStruct() { + // Rather subtle hair-pullingly maddening testing phenomena: If you + // just use a constant string here, it's always reachable via the + // atoms table. Same is true of "Hello" + "1" (an earlier + // attempt) due to parser constant folding. So we have to make a + // rabbit that's not constant foldable. But don't just use + // Math.random(), since small integers are atoms already. + var rabbit = "Hello" + Math.random(); + var S1 = new StructType({f: string}); + var s1 = new S1({f: rabbit}); + assertCanReach(s1, rabbit); + s1.f = "World"; + assertCannotReach(s1, rabbit); +} + +function runTests() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + TestStructFields(Object); + TestStructFields(Any); + + TestArrayElements(Object); + TestArrayElements(Any); + + TestStructInArray(Object); + TestStructInArray(Any); + + TestStringInStruct(); + + reportCompare(true, true, "TypedObjects trace tests"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/referencetypeuninit.js b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypeuninit.js new file mode 100644 index 00000000..86e8d7a6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/referencetypeuninit.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 898359; +var summary = 'TypedObjects reference type default values'; +var actual = ''; +var expect = ''; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var Any = TypedObject.Any; +var Object = TypedObject.Object; +var string = TypedObject.string; + +function runTests() +{ + printBugNumber(BUGNUMBER); + printStatus(summary); + + var S = new StructType({any: Any, + object: Object, + string: string}); + var s = new S(); + + assertEq(s.any, undefined); + assertEq(s.object, null); + assertEq(s.string, ""); + + reportCompare(true, true, "TypedObjects ref type uninit"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/scalar_types.js b/source/spidermonkey-tests/ecma_6/TypedObject/scalar_types.js new file mode 100644 index 00000000..5d5ea5c0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/scalar_types.js @@ -0,0 +1,68 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) + +var BUGNUMBER = 578700; +var summary = 'Byte-sized type conversion'; + +var T = TypedObject; + +function check(results, ctor) { + print("ctor = ", ctor.toSource()); + + // check applying the ctor directly + for (var i = 0; i < results.length; i++) + assertEq(results[i][0], ctor(results[i][1])); + + // check writing and reading from a struct + var S = new T.StructType({f: ctor}); + for (var i = 0; i < results.length; i++) { + var s = new S({f: results[i][1]}); + assertEq(results[i][0], s.f); + } +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + var int8results = [ + [22, 22], + [-128, 128], + [-1, 255], + [-128, -128], + [127, -129], + [0x75, 0x7575], + [-123, 0x7585] + ]; + check(int8results, T.int8); + + var uint8results = [ + [22, 22], + [128, 128], + [255, 255], + [0, 256], + [128, -128], + [127, -129], + [129, 129], + [0x75, 0x7575], + [0x85, 0x7585] + ]; + check(uint8results, T.uint8); + + var uint8clampedresults = [ + [22, 22], + [128, 128], + [255, 255], + [0, -128], + [0, -129], + [129, 129], + [255, 0x7575], + [255, 0x7585] + ]; + check(uint8clampedresults, T.uint8Clamped); + + if (typeof reportCompare === "function") + reportCompare(true, true); + + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/shell.js b/source/spidermonkey-tests/ecma_6/TypedObject/shell.js new file mode 100644 index 00000000..a0471778 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/shell.js @@ -0,0 +1,29 @@ +// Checks that |a_orig| and |b_orig| are: +// 1. Both instances of |type|, and +// 2. Are structurally equivalent (as dictated by the structure of |type|). +function assertTypedEqual(type, a_orig, b_orig) { + try { + recur(type, a_orig, b_orig); + } catch (e) { + print("failure during "+ + "assertTypedEqual("+type.toSource()+", "+a_orig.toSource()+", "+b_orig.toSource()+")"); + throw e; + } + + function recur(type, a, b) { + if (type instanceof ArrayType) { + assertEq(a.length, type.length); + assertEq(b.length, type.length); + for (var i = 0; i < type.length; i++) + recur(type.elementType, a[i], b[i]); + } else if (type instanceof StructType) { + var fieldNames = Object.getOwnPropertyNames(type.fieldTypes); + for (var i = 0; i < fieldNames.length; i++) { + var fieldName = fieldNames[i]; + recur(type.fieldTypes[fieldName], a[fieldName], b[fieldName]); + } + } else { + assertEq(a, b); + } + } +} diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/bug1023145.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/bug1023145.js new file mode 100644 index 00000000..5cc94513 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/bug1023145.js @@ -0,0 +1,17 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 1023145; +var summary = "Use the original getPrototypeOf in self-hosted code"; + +delete Object.prototype.__proto__; +var int32x4 = SIMD.int32x4; +var ar = int32x4.array(1); +var array = new ar([int32x4(1, 2, 3, 4)]); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/bug953270.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/bug953270.js new file mode 100644 index 00000000..bc591a9f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/bug953270.js @@ -0,0 +1,27 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var BUGNUMBER = 953270; +var summary = 'Handles'; + +// Check that NaN normalization is applied when extracting the x lane +// out, after bit conversion has occurred. + +var int32x4 = SIMD.int32x4; +var a = int32x4((4294967295), 200, 300, 400); +var c = SIMD.float32x4.fromInt32x4Bits(a); + +// NaN canonicalization occurs when extracting out x lane: +assertEq(c.x, NaN); + +// but underlying bits are faithfully transmitted +// (though reinterpreted as a signed integer): +var d = SIMD.int32x4.fromFloat32x4Bits(c); +assertEq(d.x, -1); + +reportCompare(true, true); +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/coercions.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/coercions.js new file mode 100644 index 00000000..06c34cca --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/coercions.js @@ -0,0 +1,66 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 1061229; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var {StructType, int32} = TypedObject; +var summary = 'constructors used as coercions'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function assertCaught(f) { + var caught = false; + var args = Array.slice(arguments, 1); + try { + f.apply(null, args); + } catch (e) { + caught = true; + print(e) + } + assertEq(caught, true); +} + +function test() { + var x = int32x4(1, 2, 3, 4); + var y = int32x4(x); + + assertEq(x, y); + + assertEq(y.x, x.x); + assertEq(y.x, 1); + assertEq(y.y, x.y); + assertEq(y.y, 2); + assertEq(y.z, x.z); + assertEq(y.z, 3); + assertEq(y.w, x.w); + assertEq(y.w, 4); + + assertCaught(int32x4, 3); + assertCaught(int32x4, float32x4(1, 2, 3, 4)); + assertCaught(int32x4, 'pony x 4'); + + var x = float32x4(NaN, 13.37, -Infinity, 4); + var y = float32x4(x); + + assertEq(x, y); + + assertEq(y.x, x.x); + assertEq(y.x, Math.fround(NaN)); + assertEq(y.y, x.y); + assertEq(y.y, Math.fround(13.37)); + assertEq(y.z, x.z); + assertEq(y.z, Math.fround(-Infinity)); + assertEq(y.w, x.w); + assertEq(y.w, Math.fround(4)); + + assertCaught(float32x4, 3); + assertCaught(float32x4, int32x4(1, 2, 3, 4)); + assertCaught(float32x4, 'pony x 4'); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4abs.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4abs.js new file mode 100644 index 00000000..5009bca4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4abs.js @@ -0,0 +1,36 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 abs'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(-1, 2, -3, 4); + var c = SIMD.float32x4.abs(a); + assertEq(c.x, 1); + assertEq(c.y, 2); + assertEq(c.z, 3); + assertEq(c.w, 4); + + var d = float32x4(-1.63, 2.46, -3.17, 4.94); + var f = SIMD.float32x4.abs(d); + assertEq(f.x, Math.fround(1.63)); + assertEq(f.y, Math.fround(2.46)); + assertEq(f.z, Math.fround(3.17)); + assertEq(f.w, Math.fround(4.94)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.abs(g); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, Infinity); + assertEq(i.w, Infinity); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4add.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4add.js new file mode 100644 index 00000000..e35f8386 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4add.js @@ -0,0 +1,43 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 add'; + +function addf(a, b) { + return Math.fround(Math.fround(a) + Math.fround(b)); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var b = float32x4(10, 20, 30, 40); + var c = SIMD.float32x4.add(a, b); + assertEq(c.x, 11); + assertEq(c.y, 22); + assertEq(c.z, 33); + assertEq(c.w, 44); + + var d = float32x4(1.57, 2.27, 3.57, 4.19); + var e = float32x4(10.31, 20.49, 30.41, 40.72); + var f = SIMD.float32x4.add(d, e); + assertEq(f.x, addf(1.57, 10.31)); + assertEq(f.y, addf(2.27, 20.49)); + assertEq(f.z, addf(3.57, 30.41)); + assertEq(f.w, addf(4.19, 40.72)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(0, -0, -Infinity, -Infinity); + var i = SIMD.float32x4.add(g, h); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, NaN); + assertEq(i.w, -Infinity); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4alignment.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4alignment.js new file mode 100644 index 00000000..388fc763 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4alignment.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'float32x4 alignment'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; + +function test() { + print(BUGNUMBER + ": " + summary); + + assertEq(float32x4.byteLength, 16); + assertEq(float32x4.byteAlignment, 16); + + var Compound = new StructType({c: uint8, d: uint8, f: float32x4}); + assertEq(Compound.fieldOffsets["c"], 0); + assertEq(Compound.fieldOffsets["d"], 1); + assertEq(Compound.fieldOffsets["f"], 16); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4and.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4and.js new file mode 100644 index 00000000..a3196612 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4and.js @@ -0,0 +1,51 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 and'; + +var andf = (function() { + var i = new Int32Array(3); + var f = new Float32Array(i.buffer); + return function(x, y) { + f[0] = x; + f[1] = y; + i[2] = i[0] & i[1]; + return f[2]; + } +})(); + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var b = float32x4(10, 20, 30, 40); + var c = SIMD.float32x4.and(a, b); + assertEq(c.x, andf(1, 10)); + assertEq(c.y, andf(2, 20)); + assertEq(c.z, andf(3, 30)); + assertEq(c.w, andf(4, 40)); + + var d = float32x4(1.51, 2.98, 3.65, 4.34); + var e = float32x4(10.29, 20.12, 30.79, 40.41); + var f = SIMD.float32x4.and(d, e); + assertEq(f.x, andf(1.51, 10.29)); + assertEq(f.y, andf(2.98, 20.12)); + assertEq(f.z, andf(3.65, 30.79)); + assertEq(f.w, andf(4.34, 40.41)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(NaN, -0, -Infinity, Infinity); + var i = SIMD.float32x4.and(g, h); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, Infinity); + assertEq(i.w, Infinity); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4clamp.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4clamp.js new file mode 100644 index 00000000..fc2e2de8 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4clamp.js @@ -0,0 +1,45 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 clamp'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(-20, 10, 30, 0.5); + var lower = float32x4(2, 1, 50, 0); + var upper = float32x4(2.5, 5, 55, 1); + var c = SIMD.float32x4.clamp(a, lower, upper); + assertEq(c.x, 2); + assertEq(c.y, 5); + assertEq(c.z, 50); + assertEq(c.w, 0.5); + + var d = float32x4(-13.37, 10.46, 31.79, 0.54); + var lower1 = float32x4(2.1, 1.1, 50.13, 0.0); + var upper1 = float32x4(2.56, 5.55, 55.93, 1.1); + var f = SIMD.float32x4.clamp(d, lower1, upper1); + assertEq(f.x, Math.fround(2.1)); + assertEq(f.y, Math.fround(5.55)); + assertEq(f.z, Math.fround(50.13)); + assertEq(f.w, Math.fround(0.54)); + + var g = float32x4(4, -Infinity, 10, -10); + var lower2 = float32x4(5, -Infinity, -Infinity, -Infinity); + var upper2 = float32x4(Infinity, 5, Infinity, Infinity); + var i = SIMD.float32x4.clamp(g, lower2, upper2); + assertEq(i.x, 5); + assertEq(i.y, -Infinity); + assertEq(i.z, 10); + assertEq(i.w, -10); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4div.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4div.js new file mode 100644 index 00000000..30046d35 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4div.js @@ -0,0 +1,43 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 div'; + +function divf(a, b) { + return Math.fround(Math.fround(a) / Math.fround(b)); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var b = float32x4(10, 20, 30, 40); + var c = SIMD.float32x4.div(b, a); + assertEq(c.x, 10); + assertEq(c.y, 10); + assertEq(c.z, 10); + assertEq(c.w, 10); + + var d = float32x4(1.26, 2.03, 3.17, 4.59); + var e = float32x4(11.025, 17.3768, 29.1957, 46.4049); + var f = SIMD.float32x4.div(e, d); + assertEq(f.x, divf(11.025, 1.26)); + assertEq(f.y, divf(17.3768, 2.03)); + assertEq(f.z, divf(29.1957, 3.17)); + assertEq(f.w, divf(46.4049, 4.59)); + + var g = float32x4(0, -0, Infinity, -Infinity); + var h = float32x4(1, 1, -Infinity, Infinity); + var i = SIMD.float32x4.div(h, g); + assertEq(i.x, Infinity); + assertEq(i.y, -Infinity); + assertEq(i.z, NaN); + assertEq(i.w, NaN); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4equal.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4equal.js new file mode 100644 index 00000000..9ad89e46 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4equal.js @@ -0,0 +1,34 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 equal'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of NaN/-0/Infinity/-Infinity border cases. + + var a = float32x4(1, 20, 30, 40); + var b = float32x4(10, 20, 30, 4); + var c = SIMD.float32x4.equal(a, b); + assertEq(c.x, 0); + assertEq(c.y, -1); + assertEq(c.z, -1); + assertEq(c.w, 0); + + var d = float32x4(1.89, 20.51, 30.46, 40.12); + var e = float32x4(10.89, 20.51, Math.fround(30.46), 4.12); + var f = SIMD.float32x4.equal(d, e); + assertEq(c.x, 0); + assertEq(c.y, -1); + assertEq(c.z, -1); + assertEq(c.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4fromint32x4.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4fromint32x4.js new file mode 100644 index 00000000..c6c50fa2 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4fromint32x4.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 fromInt32x4'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var a = int32x4(1, 2, 3, 4); + var c = SIMD.float32x4.fromInt32x4(a); + assertEq(c.x, 1); + assertEq(c.y, 2); + assertEq(c.z, 3); + assertEq(c.w, 4); + + var value1 = Math.pow(2, 30) - 1; + var value2 = -Math.pow(2, 30); + var d = int32x4(INT32_MIN, INT32_MAX, value1, value2); + var f = float32x4.fromInt32x4(d); + assertEq(f.x, Math.fround(INT32_MIN)); + assertEq(f.y, Math.fround(INT32_MAX)); + assertEq(f.z, Math.fround(value1)); + assertEq(f.w, Math.fround(value2)); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4fromint32x4bits.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4fromint32x4bits.js new file mode 100644 index 00000000..64a9fb1b --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4fromint32x4bits.js @@ -0,0 +1,33 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 fromInt32x4Bits'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var a = int32x4(100, 200, 300, 400); + var c = SIMD.float32x4.fromInt32x4Bits(a); + assertEq(c.x, 1.401298464324817e-43); + assertEq(c.y, 2.802596928649634e-43); + assertEq(c.z, 4.203895392974451e-43); + assertEq(c.w, 5.605193857299268e-43); + + var d = int32x4(INT32_MIN, INT32_MAX, 0, 0); + var f = float32x4.fromInt32x4Bits(d); + assertEq(f.x, -0); + assertEq(f.y, NaN); + assertEq(f.z, 0); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4getters.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4getters.js new file mode 100644 index 00000000..36c4b327 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4getters.js @@ -0,0 +1,50 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'float32x4 getters'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function test() { + print(BUGNUMBER + ": " + summary); + + // Create a float32x4 and check that the getters work: + var f = float32x4(11, 22, 33, 44); + assertEq(f.x, 11); + assertEq(f.y, 22); + assertEq(f.z, 33); + assertEq(f.w, 44); + + // Test that the getters work when called reflectively: + var g = f.__lookupGetter__("x"); + assertEq(g.call(f), 11); + + // Test that getters cannot be applied to various incorrect things: + assertThrowsInstanceOf(function() { + g.call({}) + }, TypeError, "Getter applicable to random objects"); + assertThrowsInstanceOf(function() { + g.call(0xDEADBEEF) + }, TypeError, "Getter applicable to integers"); + assertThrowsInstanceOf(function() { + var T = new TypedObject.StructType({x: TypedObject.float32, + y: TypedObject.float32, + z: TypedObject.float32, + w: TypedObject.float32}); + var v = new T({x: 11, y: 22, z: 33, w: 44}); + g.call(v) + }, TypeError, "Getter applicable to structs"); + assertThrowsInstanceOf(function() { + var t = new int32x4(1, 2, 3, 4); + g.call(t) + }, TypeError, "Getter applicable to int32x4"); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4greaterthan.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4greaterthan.js new file mode 100644 index 00000000..6fe4e243 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4greaterthan.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 greaterThan'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(1, 20, 3, 40); + var b = float32x4(10, 2, 30, 4); + var c = SIMD.float32x4.greaterThan(b, a); + assertEq(c.x, -1); + assertEq(c.y, 0); + assertEq(c.z, -1); + assertEq(c.w, 0); + + var d = float32x4(10.8399, 20.37, 3.07, 4.6802); + var e = float32x4(10.8401, 20.367, 3.1, 4.6801); + var f = float32x4.greaterThan(e, d); + assertEq(f.x, -1); + assertEq(f.y, 0); + assertEq(f.z, -1); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4greaterthanorequal.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4greaterthanorequal.js new file mode 100644 index 00000000..e1963c3a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4greaterthanorequal.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 greaterThanOrEqual'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(1, 20, 30, 40); + var b = float32x4(10, 20, 30, 4); + var c = SIMD.float32x4.greaterThanOrEqual(b, a); + assertEq(c.x, -1); + assertEq(c.y, -1); + assertEq(c.z, -1); + assertEq(c.w, 0); + + var d = float32x4(10.029, 20.87, 30.56, 4.7); + var e = float32x4(10.03, 20.87, 30.56, 4.698); + var f = float32x4.greaterThanOrEqual(e, d); + assertEq(f.x, -1); + assertEq(f.y, -1); + assertEq(f.z, -1); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4handle.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4handle.js new file mode 100644 index 00000000..20caf500 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4handle.js @@ -0,0 +1,50 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'float32x4 handles'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; + +var float32 = TypedObject.float32; +var Handle = TypedObject.Handle; + +function test() { + print(BUGNUMBER + ": " + summary); + + var Array = float32x4.array(3); + var array = new Array([float32x4(1, 2, 3, 4), + float32x4(5, 6, 7, 8), + float32x4(9, 10, 11, 12)]); + + // Test that trying to create handle into the interior of a + // float32x4 fails. + + assertThrowsInstanceOf(function() { + var h = float32.handle(array, 1, "w"); + }, TypeError, "Creating a float32 handle to prop via ctor"); + + assertThrowsInstanceOf(function() { + var h = float32.handle(); + Handle.move(h, array, 1, "w"); + }, TypeError, "Creating a float32 handle to prop via move"); + + assertThrowsInstanceOf(function() { + var h = float32.handle(array, 1, 0); + }, TypeError, "Creating a float32 handle to elem via ctor"); + + assertThrowsInstanceOf(function() { + var h = float32.handle(); + Handle.move(h, array, 1, 0); + }, TypeError, "Creating a float32 handle to elem via move"); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4lessthan.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4lessthan.js new file mode 100644 index 00000000..199babf0 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4lessthan.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 lessThan'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(1, 20, 3, 40); + var b = float32x4(10, 2, 30, 4); + var c = SIMD.float32x4.lessThan(a, b); + assertEq(c.x, -1); + assertEq(c.y, 0); + assertEq(c.z, -1); + assertEq(c.w, 0); + + var d = float32x4(1.5399, 20.001, 30.045, 4.74); + var e = float32x4(1.54, 19.999, 30.05, 4.72); + var f = float32x4.lessThan(a, b); + assertEq(f.x, -1); + assertEq(f.y, 0); + assertEq(f.z, -1); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4lessthanorequal.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4lessthanorequal.js new file mode 100644 index 00000000..7c9d9d30 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4lessthanorequal.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 lessThanOrEqual'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(1, 20, 30, 40); + var b = float32x4(10, 20, 30, 4); + var c = SIMD.float32x4.lessThanOrEqual(a, b); + assertEq(c.x, -1); + assertEq(c.y, -1); + assertEq(c.z, -1); + assertEq(c.w, 0); + + var d = float32x4(9.999, 20.78, 30.14, 40.1235); + var e = float32x4(10, 20.78, 30.14, 40.123); + var f = float32x4.lessThanOrEqual(d, e); + assertEq(f.x, -1); + assertEq(f.y, -1); + assertEq(f.z, -1); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4max.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4max.js new file mode 100644 index 00000000..5eb7f1ef --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4max.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 max'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(1, 20, 30, 4); + var b = float32x4(10, 2, 3, 40); + var c = SIMD.float32x4.max(a, b); + assertEq(c.x, 10); + assertEq(c.y, 20); + assertEq(c.z, 30); + assertEq(c.w, 40); + + var d = float32x4(9.999, 2.1234, 30.4443, 4); + var e = float32x4(10, 2.1233, 30.4444, 4.0001); + var f = float32x4.max(d, e); + assertEq(f.x, 10); + assertEq(f.y, Math.fround(2.1234)); + assertEq(f.z, Math.fround(30.4444)); + assertEq(f.w, Math.fround(4.0001)); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4min.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4min.js new file mode 100644 index 00000000..659e5ad4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4min.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 min'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of -0/Infinity/-Infinity border cases. + // FIXME -- Bug 1068028: Amend to check for correctness of NaN border cases once the semantics are defined. + + var a = float32x4(1, 20, 3, 40); + var b = float32x4(10, 2, 30, 4); + var c = SIMD.float32x4.min(a, b); + assertEq(c.x, 1); + assertEq(c.y, 2); + assertEq(c.z, 3); + assertEq(c.w, 4); + + var d = float32x4(1.4321, 20.5567, 30.8999, 4.0002); + var e = float32x4(1.432, 20.5568, 30.8998, 4.0001); + var f = float32x4.min(d, e); + assertEq(f.x, Math.fround(1.432)); + assertEq(f.y, Math.fround(20.5567)); + assertEq(f.z, Math.fround(30.8998)); + assertEq(f.w, Math.fround(4.0001)); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4mul.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4mul.js new file mode 100644 index 00000000..53d34001 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4mul.js @@ -0,0 +1,43 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 mul'; + +function mulf(a, b) { + return Math.fround(Math.fround(a) * Math.fround(b)); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var b = float32x4(10, 20, 30, 40); + var c = SIMD.float32x4.mul(a, b); + assertEq(c.x, 10); + assertEq(c.y, 40); + assertEq(c.z, 90); + assertEq(c.w, 160); + + var d = float32x4(1.66, 2.57, 3.73, 4.12); + var e = float32x4(10.67, 20.68, 30.02, 40.58); + var f = SIMD.float32x4.mul(d, e); + assertEq(f.x, mulf(1.66, 10.67)); + assertEq(f.y, mulf(2.57, 20.68)); + assertEq(f.z, mulf(3.73, 30.02)); + assertEq(f.w, mulf(4.12, 40.58)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(NaN, -0, -Infinity, 0); + var i = SIMD.float32x4.mul(g, h); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, -Infinity); + assertEq(i.w, NaN); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4neg.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4neg.js new file mode 100644 index 00000000..b391734f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4neg.js @@ -0,0 +1,37 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 neg'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var c = SIMD.float32x4.neg(a); + assertEq(c.x, -1); + assertEq(c.y, -2); + assertEq(c.z, -3); + assertEq(c.w, -4); + + var d = float32x4(0.999, -0.001, 3.78, 4.05); + var f = SIMD.float32x4.neg(d); + assertEq(f.x, Math.fround(-0.999)); + assertEq(f.y, Math.fround(0.001)); + assertEq(f.z, Math.fround(-3.78)); + assertEq(f.w, Math.fround(-4.05)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.neg(g); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, -Infinity); + assertEq(i.w, Infinity); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4not.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4not.js new file mode 100644 index 00000000..df65ad78 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4not.js @@ -0,0 +1,47 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 not'; + +var notf = (function() { + var i = new Int32Array(1); + var f = new Float32Array(i.buffer); + return function(x) { + f[0] = x; + i[0] = ~i[0]; + return f[0]; + } +})(); + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(2, 13, -37, 4.2); + var c = SIMD.float32x4.not(a); + assertEq(c.x, notf(2)); + assertEq(c.y, notf(13)); + assertEq(c.z, notf(-37)); + assertEq(c.w, notf(4.2)); + + var d = float32x4(2.897, 13.245, -37.781, 5.28); + var f = SIMD.float32x4.not(d); + assertEq(f.x, notf(2.897)); + assertEq(f.y, notf(13.245)); + assertEq(f.z, notf(-37.781)); + assertEq(f.w, notf(5.28)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.not(g); + assertEq(i.x, notf(NaN)); + assertEq(i.y, notf(-0)); + assertEq(i.z, notf(Infinity)); + assertEq(i.w, notf(-Infinity)); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4notequal.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4notequal.js new file mode 100644 index 00000000..c46bcba5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4notequal.js @@ -0,0 +1,34 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 notEqual'; + +function test() { + print(BUGNUMBER + ": " + summary); + + // FIXME -- Bug 1081697: Amend to check for correctness of NaN/-0/Infinity/-Infinity border cases. + + var a = float32x4(1, 20, 30, 40); + var b = float32x4(10, 20, 30, 4); + var c = SIMD.float32x4.notEqual(a, b); + assertEq(c.x, -1); + assertEq(c.y, 0); + assertEq(c.z, 0); + assertEq(c.w, -1); + + var d = float32x4(9.98, 20.65, 30.14, 4.235); + var e = float32x4(9.99, 20.65, Math.fround(30.14), 4.23); + var f = SIMD.float32x4.notEqual(d, e); + assertEq(f.x, -1); + assertEq(f.y, 0); + assertEq(f.z, 0); + assertEq(f.w, -1); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4or.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4or.js new file mode 100644 index 00000000..b896efaf --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4or.js @@ -0,0 +1,51 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 and'; + +var orf = (function() { + var i = new Int32Array(3); + var f = new Float32Array(i.buffer); + return function(x, y) { + f[0] = x; + f[1] = y; + i[2] = i[0] | i[1]; + return f[2]; + } +})(); + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var b = float32x4(10, 20, 30, 40); + var c = SIMD.float32x4.or(a, b); + assertEq(c.x, orf(1, 10)); + assertEq(c.y, orf(2, 20)); + assertEq(c.z, orf(3, 30)); + assertEq(c.w, orf(4, 40)); + + var d = float32x4(1.12, 2.39, 3.83, 4.57); + var e = float32x4(10.76, 20.41, 30.96, 40.23); + var f = SIMD.float32x4.or(d, e); + assertEq(f.x, orf(1.12, 10.76)); + assertEq(f.y, orf(2.39, 20.41)); + assertEq(f.z, orf(3.83, 30.96)); + assertEq(f.w, orf(4.57, 40.23)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(5, 5, -Infinity, Infinity); + var i = SIMD.float32x4.or(g, h); + assertEq(i.x, orf(NaN, 5)); + assertEq(i.y, orf(-0, 5)); + assertEq(i.z, orf(Infinity, -Infinity)); + assertEq(i.w, orf(-Infinity, Infinity)); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reciprocal.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reciprocal.js new file mode 100644 index 00000000..43f1acf7 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reciprocal.js @@ -0,0 +1,41 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 reciprocal'; + +function reciprocalf(a) { + return Math.fround(1 / Math.fround(a)); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 0.5, 0.25, 0.125); + var c = SIMD.float32x4.reciprocal(a); + assertEq(c.x, 1); + assertEq(c.y, 2); + assertEq(c.z, 4); + assertEq(c.w, 8); + + var d = float32x4(1.6, 0.8, 0.4, 0.2); + var f = SIMD.float32x4.reciprocal(d); + assertEq(f.x, reciprocalf(1.6)); + assertEq(f.y, reciprocalf(0.8)); + assertEq(f.z, reciprocalf(0.4)); + assertEq(f.w, reciprocalf(0.2)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.reciprocal(g); + assertEq(i.x, NaN); + assertEq(i.y, -Infinity); + assertEq(i.z, 0); + assertEq(i.w, -0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reciprocalsqrt.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reciprocalsqrt.js new file mode 100644 index 00000000..8bd6750d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reciprocalsqrt.js @@ -0,0 +1,41 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 reciprocalSqrt'; + +function reciprocalsqrtf(a) { + return Math.fround(Math.sqrt(1 / Math.fround(a))); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 1, 0.25, 0.25); + var c = SIMD.float32x4.reciprocalSqrt(a); + assertEq(c.x, 1); + assertEq(c.y, 1); + assertEq(c.z, 2); + assertEq(c.w, 2); + + var d = float32x4(25, 16, 6.25, 1.5625); + var f = SIMD.float32x4.reciprocalSqrt(d); + assertEq(f.x, reciprocalsqrtf(25)); + assertEq(f.y, reciprocalsqrtf(16)); + assertEq(f.z, reciprocalsqrtf(6.25)); + assertEq(f.w, reciprocalsqrtf(1.5625)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.reciprocalSqrt(g); + assertEq(i.x, NaN); + assertEq(i.y, -Infinity); + assertEq(i.z, 0); + assertEq(i.w, NaN); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reify.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reify.js new file mode 100644 index 00000000..25563e93 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4reify.js @@ -0,0 +1,36 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'float32x4 reify'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; + +function test() { + print(BUGNUMBER + ": " + summary); + + var Array = float32x4.array(3); + var array = new Array([float32x4(1, 2, 3, 4), + float32x4(5, 6, 7, 8), + float32x4(9, 10, 11, 12)]); + + // Test that reading array[1] produces a *copy* of float32x4, not an + // alias into the array. + + var f = array[1]; + assertEq(f.w, 8); + assertEq(array[1].w, 8); + array[1] = float32x4(15, 16, 17, 18); + assertEq(f.w, 8); + assertEq(array[1].w, 18); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4scale.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4scale.js new file mode 100644 index 00000000..923c878f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4scale.js @@ -0,0 +1,41 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 scale'; + +function mulf(a, b) { + return Math.fround(Math.fround(a) * Math.fround(b)); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var c = SIMD.float32x4.scale(a, 2); + assertEq(c.x, 2); + assertEq(c.y, 4); + assertEq(c.z, 6); + assertEq(c.w, 8); + + var d = float32x4(1.34, 2.76, 3.21, 4.09); + var f = float32x4.scale(d, 2.54); + assertEq(f.x, mulf(1.34, 2.54)); + assertEq(f.y, mulf(2.76, 2.54)); + assertEq(f.z, mulf(3.21, 2.54)); + assertEq(f.w, mulf(4.09, 2.54)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = float32x4.scale(g, 2.54); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, Infinity); + assertEq(i.w, -Infinity); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4select.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4select.js new file mode 100644 index 00000000..4ab4f71c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4select.js @@ -0,0 +1,38 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 1060437; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 select'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(0.125,4.25,9.75,16.125); + var b = float32x4(1.5,2.75,3.25,4.5); + var sel_ttff = int32x4.bool(true, true, false, false); + var c = SIMD.float32x4.select(sel_ttff,a,b); + assertEq(c.x, 0.125); + assertEq(c.y, 4.25); + assertEq(c.z, 3.25); + assertEq(c.w, 4.5); + + var b2 = float32x4(1.5,2.75,NaN,Infinity); + var c = SIMD.float32x4.select(sel_ttff,a,b2); + assertEq(c.x, 0.125); + assertEq(c.y, 4.25); + assertEq(c.z, NaN); + assertEq(c.w, Infinity); + + var a2 = float32x4(-NaN,-Infinity,9.75,16.125); + var c = SIMD.float32x4.select(sel_ttff,a2,b2); + assertEq(c.x, -NaN); + assertEq(c.y, -Infinity); + assertEq(c.z, NaN); + assertEq(c.w, Infinity); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4setter.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4setter.js new file mode 100644 index 00000000..d2518159 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4setter.js @@ -0,0 +1,45 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'float32x4 setting'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; + +function test() { + print(BUGNUMBER + ": " + summary); + + var Array = float32x4.array(3); + var array = new Array([float32x4(1, 2, 3, 4), + float32x4(5, 6, 7, 8), + float32x4(9, 10, 11, 12)]); + assertEq(array[1].w, 8); + + // Test that we are allowed to write float32x4 values into array, + // but not other things. + + array[1] = float32x4(15, 16, 17, 18); + assertEq(array[1].w, 18); + + assertThrowsInstanceOf(function() { + array[1] = {x: 15, y: 16, z: 17, w: 18}; + }, TypeError, "Setting float32x4 from an object"); + + assertThrowsInstanceOf(function() { + array[1] = [15, 16, 17, 18]; + }, TypeError, "Setting float32x4 from an array"); + + assertThrowsInstanceOf(function() { + array[1] = 22; + }, TypeError, "Setting float32x4 from a number"); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4sqrt.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4sqrt.js new file mode 100644 index 00000000..f8fbbb24 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4sqrt.js @@ -0,0 +1,41 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 sqrt'; + +function sqrtf(a) { + return Math.fround(Math.sqrt(Math.fround(a))); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 4, 9, 16); + var c = SIMD.float32x4.sqrt(a); + assertEq(c.x, 1); + assertEq(c.y, 2); + assertEq(c.z, 3); + assertEq(c.w, 4); + + var d = float32x4(2.7225, 7.3441, 9.4249, -1); + var f = SIMD.float32x4.sqrt(d); + assertEq(f.x, sqrtf(2.7225)); + assertEq(f.y, sqrtf(7.3441)); + assertEq(f.z, sqrtf(9.4249)); + assertEq(f.w, NaN); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.sqrt(g); + assertEq(i.x, NaN); + assertEq(i.y, -0); + assertEq(i.z, Infinity); + assertEq(i.w, NaN); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4sub.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4sub.js new file mode 100644 index 00000000..759284e6 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4sub.js @@ -0,0 +1,44 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 sub'; + +function subf(a, b) { + return Math.fround(Math.fround(a) - Math.fround(b)); +} + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var b = float32x4(10, 20, 30, 40); + var c = SIMD.float32x4.sub(b, a); + assertEq(c.x, 9); + assertEq(c.y, 18); + assertEq(c.z, 27); + assertEq(c.w, 36); + + var d = float32x4(1.34, 2.95, 3.17, 4.29); + var e = float32x4(10.18, 20.43, 30.63, 40.38); + var f = SIMD.float32x4.sub(e, d); + assertEq(f.x, subf(10.18, 1.34)); + assertEq(f.y, subf(20.43, 2.95)); + assertEq(f.z, subf(30.63, 3.17)); + assertEq(f.w, subf(40.38, 4.29)); + + var g = float32x4(NaN, -0, -Infinity, -Infinity); + var h = float32x4(NaN, -0, Infinity, -Infinity); + var i = SIMD.float32x4.sub(h, g); + assertEq(i.x, NaN); + assertEq(i.y, 0); + assertEq(i.z, Infinity); + assertEq(i.w, NaN); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4with.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4with.js new file mode 100644 index 00000000..24a2bda5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4with.js @@ -0,0 +1,91 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 with'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var x = SIMD.float32x4.withX(a, 5); + var y = SIMD.float32x4.withY(a, 5); + var z = SIMD.float32x4.withZ(a, 5); + var w = SIMD.float32x4.withW(a, 5); + assertEq(x.x, 5); + assertEq(x.y, 2); + assertEq(x.z, 3); + assertEq(x.w, 4); + + assertEq(y.x, 1); + assertEq(y.y, 5); + assertEq(y.z, 3); + assertEq(y.w, 4); + + assertEq(z.x, 1); + assertEq(z.y, 2); + assertEq(z.z, 5); + assertEq(z.w, 4); + + assertEq(w.x, 1); + assertEq(w.y, 2); + assertEq(w.z, 3); + assertEq(w.w, 5); + + var b = float32x4(1.87, 2.08, 3.84, 4.17); + var x1 = SIMD.float32x4.withX(b, 5.38); + var y1 = SIMD.float32x4.withY(b, 5.19); + var z1 = SIMD.float32x4.withZ(b, 5.11); + var w1 = SIMD.float32x4.withW(b, 5.07); + assertEq(x1.x, Math.fround(5.38)); + assertEq(x1.y, Math.fround(2.08)); + assertEq(x1.z, Math.fround(3.84)); + assertEq(x1.w, Math.fround(4.17)); + + assertEq(y1.x, Math.fround(1.87)); + assertEq(y1.y, Math.fround(5.19)); + assertEq(y1.z, Math.fround(3.84)); + assertEq(y1.w, Math.fround(4.17)); + + assertEq(z1.x, Math.fround(1.87)); + assertEq(z1.y, Math.fround(2.08)); + assertEq(z1.z, Math.fround(5.11)); + assertEq(z1.w, Math.fround(4.17)); + + assertEq(w1.x, Math.fround(1.87)); + assertEq(w1.y, Math.fround(2.08)); + assertEq(w1.z, Math.fround(3.84)); + assertEq(w1.w, Math.fround(5.07)); + + var c = float32x4(NaN, -0, Infinity, -Infinity); + var x2 = SIMD.float32x4.withX(c, 0); + var y2 = SIMD.float32x4.withY(c, 0); + var z2 = SIMD.float32x4.withZ(c, 0); + var w2 = SIMD.float32x4.withW(c, 0); + assertEq(x2.x, 0); + assertEq(x2.y, -0); + assertEq(x2.z, Infinity); + assertEq(x2.w, -Infinity); + + assertEq(y2.x, NaN); + assertEq(y2.y, 0); + assertEq(y2.z, Infinity); + assertEq(y2.w, -Infinity); + + assertEq(z2.x, NaN); + assertEq(z2.y, -0); + assertEq(z2.z, 0); + assertEq(z2.w, -Infinity); + + assertEq(w2.x, NaN); + assertEq(w2.y, -0); + assertEq(w2.z, Infinity); + assertEq(w2.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4xor.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4xor.js new file mode 100644 index 00000000..31c61efc --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/float32x4xor.js @@ -0,0 +1,51 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'float32x4 and'; + +var xorf = (function() { + var i = new Int32Array(3); + var f = new Float32Array(i.buffer); + return function(x, y) { + f[0] = x; + f[1] = y; + i[2] = i[0] ^ i[1]; + return f[2]; + } +})(); + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var b = float32x4(10, 20, 30, 40); + var c = SIMD.float32x4.xor(a, b); + assertEq(c.x, xorf(1, 10)); + assertEq(c.y, xorf(2, 20)); + assertEq(c.z, xorf(3, 30)); + assertEq(c.w, xorf(4, 40)); + + var d = float32x4(1.07, 2.62, 3.79, 4.15); + var e = float32x4(10.38, 20.47, 30.44, 40.16); + var f = SIMD.float32x4.xor(d, e); + assertEq(f.x, xorf(1.07, 10.38)); + assertEq(f.y, xorf(2.62, 20.47)); + assertEq(f.z, xorf(3.79, 30.44)); + assertEq(f.w, xorf(4.15, 40.16)); + + var g = float32x4(NaN, -0, Infinity, -Infinity); + var h = float32x4(-0, Infinity, -Infinity, NaN); + var i = SIMD.float32x4.xor(g, h); + assertEq(i.x, xorf(NaN, -0)); + assertEq(i.y, xorf(-0, Infinity)); + assertEq(i.z, xorf(Infinity, -Infinity)); + assertEq(i.w, xorf(-Infinity, NaN)); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4add.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4add.js new file mode 100644 index 00000000..3682bbdd --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4add.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 add'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var b = int32x4(10, 20, 30, 40); + var c = SIMD.int32x4.add(a, b); + assertEq(c.x, 11); + assertEq(c.y, 22); + assertEq(c.z, 33); + assertEq(c.w, 44); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var e = int32x4(1, -1, 0, 0); + var f = SIMD.int32x4.add(d, e); + assertEq(f.x, INT32_MIN); + assertEq(f.y, INT32_MAX); + assertEq(f.z, INT32_MAX); + assertEq(f.w, INT32_MIN); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4alignment.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4alignment.js new file mode 100644 index 00000000..e0b16988 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4alignment.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'int32x4 alignment'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; + +function test() { + print(BUGNUMBER + ": " + summary); + + assertEq(int32x4.byteLength, 16); + assertEq(int32x4.byteAlignment, 16); + + var Compound = new StructType({c: uint8, d: uint8, f: int32x4}); + assertEq(Compound.fieldOffsets["c"], 0); + assertEq(Compound.fieldOffsets["d"], 1); + assertEq(Compound.fieldOffsets["f"], 16); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4and.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4and.js new file mode 100644 index 00000000..fb3a0edc --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4and.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 and'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var b = int32x4(10, 20, 30, 40); + var c = SIMD.int32x4.and(a, b); + assertEq(c.x, 0); + assertEq(c.y, 0); + assertEq(c.z, 2); + assertEq(c.w, 0); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var e = int32x4(INT32_MIN, INT32_MAX, INT32_MAX, INT32_MIN); + var f = SIMD.int32x4.and(d, e); + assertEq(f.x, (INT32_MAX & INT32_MIN) | 0); + assertEq(f.y, (INT32_MIN & INT32_MAX) | 0); + assertEq(f.z, (INT32_MAX & INT32_MAX) | 0); + assertEq(f.w, (INT32_MIN & INT32_MIN) | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4equal.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4equal.js new file mode 100644 index 00000000..693e7a2c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4equal.js @@ -0,0 +1,24 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 equal'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 20, 30, 40); + var b = int32x4(10, 20, 30, 4); + var c = SIMD.int32x4.equal(a, b); + assertEq(c.x, 0); + assertEq(c.y, -1); + assertEq(c.z, -1); + assertEq(c.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4fromfloat32x4.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4fromfloat32x4.js new file mode 100644 index 00000000..0028a441 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4fromfloat32x4.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 fromFloat32x4'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1.1, 2.2, 3.3, 4.6); + var c = SIMD.int32x4.fromFloat32x4(a); + assertEq(c.x, 1); + assertEq(c.y, 2); + assertEq(c.z, 3); + assertEq(c.w, 4); + + var d = float32x4(NaN, -0, Infinity, -Infinity); + var f = SIMD.int32x4.fromFloat32x4(d); + assertEq(f.x, 0); + assertEq(f.y, 0); + assertEq(f.z, 0); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4fromfloat32x4bits.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4fromfloat32x4bits.js new file mode 100644 index 00000000..da1b7b37 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4fromfloat32x4bits.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 fromFloat32x4Bits'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = float32x4(1, 2, 3, 4); + var c = SIMD.int32x4.fromFloat32x4Bits(a); + assertEq(c.x, 0x3f800000 | 0); + assertEq(c.y, 0x40000000 | 0); + assertEq(c.z, 0x40400000 | 0); + assertEq(c.w, 0x40800000 | 0); + + var d = float32x4(NaN, -0, Infinity, -Infinity); + var f = SIMD.int32x4.fromFloat32x4Bits(d); + assertEq(f.x, 0x7fc00000 | 0); + assertEq(f.y, 0x80000000 | 0); + assertEq(f.z, 0x7f800000 | 0); + assertEq(f.w, 0xff800000 | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4getters.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4getters.js new file mode 100644 index 00000000..0c5dfc4a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4getters.js @@ -0,0 +1,48 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var {StructType, int32} = TypedObject; +var summary = 'int32x4 getters'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +function test() { + print(BUGNUMBER + ": " + summary); + + // Create a int32x4 and check that the getters work: + var f = int32x4(11, 22, 33, 44); + assertEq(f.x, 11); + assertEq(f.y, 22); + assertEq(f.z, 33); + assertEq(f.w, 44); + + // Test that the getters work when called reflectively: + var g = f.__lookupGetter__("x"); + assertEq(g.call(f), 11); + + // Test that getters cannot be applied to various incorrect things: + assertThrowsInstanceOf(function() { + g.call({}) + }, TypeError, "Getter applicable to random objects"); + assertThrowsInstanceOf(function() { + g.call(0xDEADBEEF) + }, TypeError, "Getter applicable to integers"); + assertThrowsInstanceOf(function() { + var T = new StructType({x: int32, y: int32, z: int32, w: int32}); + var v = new T({x: 11, y: 22, z: 33, w: 44}); + g.call(v) + }, TypeError, "Getter applicable to structs"); + assertThrowsInstanceOf(function() { + var t = new float32x4(1, 2, 3, 4); + g.call(t) + }, TypeError, "Getter applicable to float32x4"); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4greaterthan.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4greaterthan.js new file mode 100644 index 00000000..74c82a05 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4greaterthan.js @@ -0,0 +1,24 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 greaterThan'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 20, 3, 40); + var b = int32x4(10, 2, 30, 4); + var c = SIMD.int32x4.greaterThan(b,a); + assertEq(c.x, -1); + assertEq(c.y, 0); + assertEq(c.z, -1); + assertEq(c.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4handle.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4handle.js new file mode 100644 index 00000000..5646cdd4 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4handle.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'int32x4 handles'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; +var int32 = TypedObject.int32; +var Handle = TypedObject.Handle; + +function test() { + print(BUGNUMBER + ": " + summary); + + var Array = int32x4.array(3); + var array = new Array([int32x4(1, 2, 3, 4), + int32x4(5, 6, 7, 8), + int32x4(9, 10, 11, 12)]); + + // Test that trying to create handle into the interior of a + // int32x4 fails. + + assertThrowsInstanceOf(function() { + var h = int32.handle(array, 1, "w"); + }, TypeError, "Creating a int32 handle to prop via ctor"); + + assertThrowsInstanceOf(function() { + var h = int32.handle(); + Handle.move(h, array, 1, "w"); + }, TypeError, "Creating a int32 handle to prop via move"); + + assertThrowsInstanceOf(function() { + var h = int32.handle(array, 1, 0); + }, TypeError, "Creating a int32 handle to elem via ctor"); + + assertThrowsInstanceOf(function() { + var h = int32.handle(); + Handle.move(h, array, 1, 0); + }, TypeError, "Creating a int32 handle to elem via move"); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4lessthan.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4lessthan.js new file mode 100644 index 00000000..1f2a2a63 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4lessthan.js @@ -0,0 +1,24 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 lessThan'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 20, 3, 40); + var b = int32x4(10, 2, 30, 4); + var c = SIMD.int32x4.lessThan(a, b); + assertEq(c.x, -1); + assertEq(c.y, 0); + assertEq(c.z, -1); + assertEq(c.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4lsh.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4lsh.js new file mode 100644 index 00000000..17a4465c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4lsh.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 lsh'; + +function test() { + print(BUGNUMBER + ": " + summary); + + for (var bits = 0; bits < 32; bits++) { + var a = int32x4(-1, 2, -3, 4); + var c = SIMD.int32x4.shiftLeft(a, bits); + assertEq(c.x, -1 << bits); + assertEq(c.y, 2 << bits); + assertEq(c.z, -3 << bits); + assertEq(c.w, 4 << bits); + } + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var f = SIMD.int32x4.shiftLeft(d, 1); + assertEq(f.x, (INT32_MAX << 1) | 0); + assertEq(f.y, (INT32_MIN << 1) | 0); + assertEq(f.z, (INT32_MAX << 1) | 0); + assertEq(f.w, (INT32_MIN << 1) | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4mul.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4mul.js new file mode 100644 index 00000000..3a39eb3c --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4mul.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 mul'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var b = int32x4(10, 20, 30, 40); + var c = SIMD.int32x4.mul(a, b); + assertEq(c.x, 10); + assertEq(c.y, 40); + assertEq(c.z, 90); + assertEq(c.w, 160); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var e = int32x4(-1, -1, INT32_MIN, INT32_MIN); + var f = SIMD.int32x4.mul(d, e); + assertEq(f.x, (INT32_MAX * -1) | 0); + assertEq(f.y, (INT32_MIN * -1) | 0); + assertEq(f.z, (INT32_MAX * INT32_MIN) | 0); + assertEq(f.w, (INT32_MIN * INT32_MIN) | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4neg.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4neg.js new file mode 100644 index 00000000..967c6a81 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4neg.js @@ -0,0 +1,33 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 neg'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var c = SIMD.int32x4.neg(a); + assertEq(c.x, -1); + assertEq(c.y, -2); + assertEq(c.z, -3); + assertEq(c.w, -4); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, -0, 0); + var f = SIMD.int32x4.neg(d); + assertEq(f.x, -INT32_MAX | 0); + assertEq(f.y, -INT32_MIN | 0); + assertEq(f.z, 0); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4not.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4not.js new file mode 100644 index 00000000..febb3e9f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4not.js @@ -0,0 +1,33 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 not'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var c = SIMD.int32x4.not(a); + assertEq(c.x, -2); + assertEq(c.y, -3); + assertEq(c.z, -4); + assertEq(c.w, -5); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, 0, 0); + var f = SIMD.int32x4.not(d); + assertEq(f.x, ~INT32_MAX | 0); + assertEq(f.y, ~INT32_MIN | 0); + assertEq(f.z, ~0 | 0); + assertEq(f.w, ~0 | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4or.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4or.js new file mode 100644 index 00000000..55208240 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4or.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 or'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var b = int32x4(10, 20, 30, 40); + var c = SIMD.int32x4.or(a, b); + assertEq(c.x, 11); + assertEq(c.y, 22); + assertEq(c.z, 31); + assertEq(c.w, 44); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var e = int32x4(INT32_MIN, INT32_MAX, INT32_MAX, INT32_MIN); + var f = SIMD.int32x4.or(d, e); + assertEq(f.x, (INT32_MAX | INT32_MIN) | 0); + assertEq(f.y, (INT32_MIN | INT32_MAX) | 0); + assertEq(f.z, (INT32_MAX | INT32_MAX) | 0); + assertEq(f.w, (INT32_MIN | INT32_MIN) | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4reify.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4reify.js new file mode 100644 index 00000000..77d069c5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4reify.js @@ -0,0 +1,36 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'int32x4 reify'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; + +function test() { + print(BUGNUMBER + ": " + summary); + + var Array = int32x4.array(3); + var array = new Array([int32x4(1, 2, 3, 4), + int32x4(5, 6, 7, 8), + int32x4(9, 10, 11, 12)]); + + // Test that reading array[1] produces a *copy* of int32x4, not an + // alias into the array. + + var f = array[1]; + assertEq(f.w, 8); + assertEq(array[1].w, 8); + array[1] = int32x4(15, 16, 17, 18); + assertEq(f.w, 8); + assertEq(array[1].w, 18); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4rsh.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4rsh.js new file mode 100644 index 00000000..f785adc5 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4rsh.js @@ -0,0 +1,34 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 rsh'; + +function test() { + print(BUGNUMBER + ": " + summary); + + for (var bits = 0; bits < 32; bits++) { + var a = int32x4(-1, 2, -3, 4); + var c = SIMD.int32x4.shiftRight(a, bits); + assertEq(c.x, -1 >> bits); + assertEq(c.y, 2 >> bits); + assertEq(c.z, -3 >> bits); + assertEq(c.w, 4 >> bits); + } + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var f = SIMD.int32x4.shiftRight(d, 1); + assertEq(f.x, INT32_MAX >> 1); + assertEq(f.y, INT32_MIN >> 1); + assertEq(f.z, INT32_MAX >> 1); + assertEq(f.w, INT32_MIN >> 1); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4select.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4select.js new file mode 100644 index 00000000..fbba6ff3 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4select.js @@ -0,0 +1,40 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 1060437; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 select'; + +const INT32_MAX = Math.pow(2, 31) - 1; +const INT32_MIN = INT32_MAX + 1 | 0; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(0,4,9,16) + var b = int32x4(1,2,3,4) + var sel_ttff = int32x4.bool(true, true, false, false); + var c = SIMD.int32x4.select(sel_ttff,a,b); + assertEq(c.x, 0); + assertEq(c.y, 4); + assertEq(c.z, 3); + assertEq(c.w, 4); + + var a2 = int32x4(INT32_MAX,INT32_MIN,9,16) + var c = SIMD.int32x4.select(sel_ttff,a2,b); + assertEq(c.x, INT32_MAX); + assertEq(c.y, INT32_MIN); + assertEq(c.z, 3); + assertEq(c.w, 4); + + var b2 = int32x4(1,2,INT32_MAX,INT32_MIN) + var c = SIMD.int32x4.select(sel_ttff,a2,b2); + assertEq(c.x, INT32_MAX); + assertEq(c.y, INT32_MIN); + assertEq(c.z, INT32_MAX); + assertEq(c.w, INT32_MIN); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4setter.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4setter.js new file mode 100644 index 00000000..f4bd334d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4setter.js @@ -0,0 +1,45 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 938728; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; +var summary = 'int32x4 setting'; + +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var ArrayType = TypedObject.ArrayType; + +function test() { + print(BUGNUMBER + ": " + summary); + + var Array = int32x4.array(3); + var array = new Array([int32x4(1, 2, 3, 4), + int32x4(5, 6, 7, 8), + int32x4(9, 10, 11, 12)]); + assertEq(array[1].w, 8); + + // Test that we are allowed to write int32x4 values into array, + // but not other things. + + array[1] = int32x4(15, 16, 17, 18); + assertEq(array[1].w, 18); + + assertThrowsInstanceOf(function() { + array[1] = {x: 15, y: 16, z: 17, w: 18}; + }, TypeError, "Setting int32x4 from an object"); + + assertThrowsInstanceOf(function() { + array[1] = [15, 16, 17, 18]; + }, TypeError, "Setting int32x4 from an array"); + + assertThrowsInstanceOf(function() { + array[1] = 22; + }, TypeError, "Setting int32x4 from a number"); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4sub.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4sub.js new file mode 100644 index 00000000..f76c1830 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4sub.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 sub'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var b = int32x4(10, 20, 30, 40); + var c = SIMD.int32x4.sub(b,a); + assertEq(c.x, 9); + assertEq(c.y, 18); + assertEq(c.z, 27); + assertEq(c.w, 36); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(-1, 1, INT32_MAX, INT32_MIN); + var e = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var f = SIMD.int32x4.sub(e, d); + assertEq(f.x, (INT32_MAX - -1) | 0); + assertEq(f.y, (INT32_MIN - 1) | 0); + assertEq(f.z, 0); + assertEq(f.w, 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4ursh.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4ursh.js new file mode 100644 index 00000000..6a16d31a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4ursh.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 996076; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 ursh'; + +function test() { + print(BUGNUMBER + ": " + summary); + + for (var bits = 0; bits < 32; bits++) { + var a = int32x4(-1, 2, -3, 4); + var c = SIMD.int32x4.shiftRightLogical(a, bits); + assertEq(c.x >>> 0, -1 >>> bits); + assertEq(c.y >>> 0, 2 >>> bits); + assertEq(c.z >>> 0, -3 >>> bits); + assertEq(c.w >>> 0, 4 >>> bits); + } + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var f = SIMD.int32x4.shiftRightLogical(d, 0); + assertEq(f.x, (INT32_MAX >>> 0) | 0); + assertEq(f.y, (INT32_MIN >>> 0) | 0); + assertEq(f.z, (INT32_MAX >>> 0) | 0); + assertEq(f.w, (INT32_MIN >>> 0) | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4with.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4with.js new file mode 100644 index 00000000..ccfa9bab --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4with.js @@ -0,0 +1,28 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 with'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var INT32_MAX = Math.pow(2, 31) - 1; + + var a = int32x4(1, 2, 3, 4); + var x = SIMD.int32x4.withX(a, 5); + var y = SIMD.int32x4.withY(a, 5); + var z = SIMD.int32x4.withZ(a, 5); + var w = SIMD.int32x4.withW(a, INT32_MAX + 1); + assertEq(x.x, 5); + assertEq(y.y, 5); + assertEq(z.z, 5); + assertEq(w.w, (INT32_MAX + 1) | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4withflag.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4withflag.js new file mode 100644 index 00000000..7263dc5f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4withflag.js @@ -0,0 +1,26 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 with'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var x = SIMD.int32x4.withFlagX(a, true); + var y = SIMD.int32x4.withFlagY(a, false); + var z = SIMD.int32x4.withFlagZ(a, false); + var w = SIMD.int32x4.withFlagW(a, true); + assertEq(x.x, -1); + assertEq(y.y, 0); + assertEq(z.z, 0); + assertEq(w.w, -1); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4xor.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4xor.js new file mode 100644 index 00000000..ddaa418f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/int32x4xor.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) +var BUGNUMBER = 946042; +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +var summary = 'int32x4 xor'; + +function test() { + print(BUGNUMBER + ": " + summary); + + var a = int32x4(1, 2, 3, 4); + var b = int32x4(10, 20, 30, 40); + var c = SIMD.int32x4.xor(a, b); + assertEq(c.x, 11); + assertEq(c.y, 22); + assertEq(c.z, 29); + assertEq(c.w, 44); + + var INT32_MAX = Math.pow(2, 31) - 1; + var INT32_MIN = -Math.pow(2, 31); + + var d = int32x4(INT32_MAX, INT32_MIN, INT32_MAX, INT32_MIN); + var e = int32x4(INT32_MIN, INT32_MAX, INT32_MAX, INT32_MIN); + var f = SIMD.int32x4.xor(d, e); + assertEq(f.x, (INT32_MAX ^ INT32_MIN) | 0); + assertEq(f.y, (INT32_MIN ^ INT32_MAX) | 0); + assertEq(f.z, (INT32_MAX ^ INT32_MAX) | 0); + assertEq(f.w, (INT32_MIN ^ INT32_MIN) | 0); + + if (typeof reportCompare === "function") + reportCompare(true, true); +} + +test(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/shell.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simd/swizzle-shuffle.js b/source/spidermonkey-tests/ecma_6/TypedObject/simd/swizzle-shuffle.js new file mode 100644 index 00000000..3df22f3a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simd/swizzle-shuffle.js @@ -0,0 +1,149 @@ +// |reftest| skip-if(!this.hasOwnProperty("SIMD")) + +/* + * Any copyright is dedicated to the Public Domain. + * https://creativecommons.org/publicdomain/zero/1.0/ + */ + +var float32x4 = SIMD.float32x4; +var int32x4 = SIMD.int32x4; + +function assertEq4(v, arr) { + assertEq(v.x, arr[0]); + assertEq(v.y, arr[1]); + assertEq(v.z, arr[2]); + assertEq(v.w, arr[3]); +} + +function simdToArray(v) { + return [v.x, v.y, v.z, v.w]; +} + +function swizzle(arr, x, y, z, w) { + return [arr[x], arr[y], arr[z], arr[w]]; +} + +function testSwizzleForType(type) { + var v = type(1,2,3,4); + + assertThrowsInstanceOf(() => type.swizzle() , TypeError); + assertThrowsInstanceOf(() => type.swizzle(v, 0) , TypeError); + assertThrowsInstanceOf(() => type.swizzle(v, 0, 1) , TypeError); + assertThrowsInstanceOf(() => type.swizzle(v, 0, 1, 2) , TypeError); + assertThrowsInstanceOf(() => type.swizzle(v, 0, 1, 2, 4) , TypeError); + assertThrowsInstanceOf(() => type.swizzle(v, 0, 1, 2, -1) , TypeError); + assertThrowsInstanceOf(() => type.swizzle(0, 1, 2, 3, v) , TypeError); + + // Test all possible swizzles. + var x, y, z, w; + for (var i = 0; i < Math.pow(4, 4); i++) { + [x, y, z, w] = [i & 3, (i >> 2) & 3, (i >> 4) & 3, (i >> 6) & 3]; + assertEq4(type.swizzle(v, x, y, z, w), swizzle(simdToArray(v), x, y, z, w)); + } + + // Test that the lane inputs are converted into an int32. + // n.b, order of evaluation of args is left-to-right. + var obj = { + x: 0, + valueOf: function() { return this.x++ } + }; + assertEq4(type.swizzle(v, obj, obj, obj, obj), swizzle(simdToArray(v), 0, 1, 2, 3)); + + // Object for which ToInt32 will fail. + obj = { + valueOf: function() { throw new Error; } + }; + assertThrowsInstanceOf(() => type.swizzle(v, 0, 1, 2, obj), Error); +} + +function testSwizzleInt32x4() { + var v = int32x4(1, 2, 3, 4); + + assertThrowsInstanceOf(function() { + float32x4.swizzle(v, 0, 0, 0, 0); + }, TypeError); + + testSwizzleForType(int32x4); +} + +function testSwizzleFloat32x4() { + var v = float32x4(1, 2, 3, 4); + + assertThrowsInstanceOf(function() { + int32x4.swizzle(v, 0, 0, 0, 0); + }, TypeError); + + testSwizzleForType(float32x4); +} + +function shuffle(lhsa, rhsa, x, y, z, w) { + return [(x < 4 ? lhsa : rhsa)[x % 4], + (y < 4 ? lhsa : rhsa)[y % 4], + (z < 4 ? lhsa : rhsa)[z % 4], + (w < 4 ? lhsa : rhsa)[w % 4]]; +} + +function testShuffleForType(type) { + var lhs = type(1,2,3,4); + var rhs = type(5,6,7,8); + + assertThrowsInstanceOf(() => type.shuffle(lhs) , TypeError); + assertThrowsInstanceOf(() => type.shuffle(lhs, rhs) , TypeError); + assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0) , TypeError); + assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 1) , TypeError); + assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 1, 2) , TypeError); + assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 1, 2, -1) , TypeError); + assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 1, 2, 8) , TypeError); + assertThrowsInstanceOf(() => type.shuffle(lhs, 0, 1, 2, 7, rhs) , TypeError); + + // Test all possible shuffles. + var x, y, z, w; + for (var i = 0; i < Math.pow(8, 4); i++) { + [x, y, z, w] = [i & 7, (i >> 3) & 7, (i >> 6) & 7, (i >> 9) & 7]; + assertEq4(type.shuffle(lhs, rhs, x, y, z, w), + shuffle(simdToArray(lhs), simdToArray(rhs), x, y, z, w)); + } + + // Test that the lane inputs are converted into an int32. + // n.b, order of evaluation of args is left-to-right. + var obj = { + x: 0, + valueOf: function() { return this.x++ } + }; + assertEq4(type.shuffle(lhs, rhs, obj, obj, obj, obj), + shuffle(simdToArray(lhs),simdToArray(rhs), 0, 1, 2, 3)); + + // Object for which ToInt32 will fail. + obj = { + valueOf: function() { throw new Error; } + }; + assertThrowsInstanceOf(() => type.shuffle(lhs, rhs, 0, 1, 2, obj), Error); +} + +function testShuffleInt32x4() { + var v = int32x4(1, 2, 3, 4); + + assertThrowsInstanceOf(function() { + float32x4.shuffle(v, v, 0, 0, 0, 0); + }, TypeError); + + testShuffleForType(int32x4); +} + +function testShuffleFloat32x4() { + var v = float32x4(1, 2, 3, 4); + + assertThrowsInstanceOf(function() { + int32x4.shuffle(v, v, 0, 0, 0, 0); + }, TypeError); + + testShuffleForType(float32x4); +} + +testSwizzleInt32x4(); +testSwizzleFloat32x4(); +testShuffleInt32x4(); +testShuffleFloat32x4(); + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/simpleequiv.js b/source/spidermonkey-tests/ecma_6/TypedObject/simpleequiv.js new file mode 100644 index 00000000..14431526 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/simpleequiv.js @@ -0,0 +1,25 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 922216; +var summary = 'TypedObjects Equivalent Numeric Types'; + +var T = TypedObject; + +function runTests() { + print(BUGNUMBER + ": " + summary); + + var simpleTypes = [ + T.int8, T.int16, T.int32, + T.uint8, T.uint16, T.uint32, + T.float32, T.float64, + T.Object, T.Any, T.string + ]; + + for (var i = 0; i < simpleTypes.length; i++) + for (var j = 0; j < simpleTypes.length; j++) + assertEq(i == j, simpleTypes[i].equivalent(simpleTypes[j])); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/size_and_alignment.js b/source/spidermonkey-tests/ecma_6/TypedObject/size_and_alignment.js new file mode 100644 index 00000000..c01dc957 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/size_and_alignment.js @@ -0,0 +1,61 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'Size and Alignment of TypedObjects types'; +var actual = ''; +var expect = ''; + + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + + +function runTests() { + printBugNumber(BUGNUMBER); + printStatus(summary); + + var typesAndAlignments = [ + {type: uint8, size: 1, alignment: 1}, + {type: uint8Clamped, size: 1, alignment: 1}, + {type: uint16, size: 2, alignment: 2}, + {type: uint32, size: 4, alignment: 4}, + + {type: int8, size: 1, alignment: 1}, + {type: int16, size: 2, alignment: 2}, + {type: int32, size: 4, alignment: 4}, + + {type: float32, size: 4, alignment: 4}, + {type: float64, size: 8, alignment: 8}, + + {type: new StructType({a: uint8, b: uint16, c: uint8}), size: 6, alignment: 2}, + + {type: new StructType({a: uint8, b: uint8, c: uint16}), size: 4, alignment: 2}, + + {type: new ArrayType(uint8, 32), size: 32, alignment: 1}, + {type: new ArrayType(uint16, 16), size: 32, alignment: 2}, + {type: new ArrayType(uint32, 8), size: 32, alignment: 4}, + ]; + + for (var i = 0; i < typesAndAlignments.length; i++) { + var test = typesAndAlignments[i]; + print("Type:", test.type.toSource(), + "Size:", test.type.byteLength, + "Alignment:", test.type.byteAlignment); + assertEq(test.type.byteLength, test.size); + assertEq(test.type.byteAlignment, test.alignment); + } + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/storageopaque.js b/source/spidermonkey-tests/ecma_6/TypedObject/storageopaque.js new file mode 100644 index 00000000..b90bd9b1 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/storageopaque.js @@ -0,0 +1,33 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 898356; + +var {StructType, uint32, Object, Any, storage, objectType} = TypedObject; + +function main() { // once a C programmer, always a C programmer. + print(BUGNUMBER + ": " + summary); + + var Uints = new StructType({f: uint32, g: uint32}); + var uints = new Uints({f: 0, g: 1}); + assertEq(storage(uints) != null, true); + + var Objects = new StructType({f: Object, g: Object}); + var objects = new Objects({f: 0, g: 1}); + assertEq(storage(objects), null); + + var Anys = new StructType({f: Any, g: Any}); + var anys = new Anys({f: 0, g: 1}); + assertEq(storage(anys), null); + + // Note: test that `mixed.g`, when derived from an opaque buffer, + // remains opaque. + var Mixed = new StructType({f: Object, g: Uints}); + var mixed = new Mixed({f: 0, g: {f: 22, g: 44}}); + assertEq(storage(mixed), null); + assertEq(objectType(mixed.g), Uints); + assertEq(storage(mixed.g), null); + + reportCompare(true, true); + print("Tests complete"); +} + +main(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/structequiv.js b/source/spidermonkey-tests/ecma_6/TypedObject/structequiv.js new file mode 100644 index 00000000..6881e3ba --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/structequiv.js @@ -0,0 +1,61 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 922216; +var summary = 'TypedObjects Equivalent StructTypes'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function assertEquivalent(t1, t2) { + assertEq(true, t1.equivalent(t2)); + assertEq(true, t2.equivalent(t1)); +} + +function assertNotEquivalent(t1, t2) { + assertEq(false, t1.equivalent(t2)); + assertEq(false, t2.equivalent(t1)); +} + +function runTests() { + print(BUGNUMBER + ": " + summary); + + // Create a line: + var PixelType1 = new StructType({x: uint8, y: uint8}); + var LineType1 = new StructType({from: PixelType1, to: PixelType1}); + + // Sanity checks about type equivalence: + assertEquivalent(PixelType1, PixelType1); + assertEquivalent(LineType1, LineType1); + assertNotEquivalent(PixelType1, LineType1); + + // Define the same two types again. Equivalent. + var PixelType2 = new StructType({x: uint8, y: uint8}); + var LineType2 = new StructType({from: PixelType2, to: PixelType2}); + assertEquivalent(PixelType1, PixelType2); + assertEquivalent(LineType1, LineType2); + + // Define the pixel type with field order reversed. Not equivalent. + var PixelType3 = new StructType({y: uint8, x: uint8}); + var LineType3 = new StructType({from: PixelType3, to: PixelType3}); + assertNotEquivalent(PixelType1, PixelType3); + assertNotEquivalent(LineType1, LineType3); + + // Define the line type with field order reversed. Not equivalent. + var PixelType4 = new StructType({x: uint8, y: uint8}); + var LineType4 = new StructType({to: PixelType4, from: PixelType4}); + assertEquivalent(PixelType1, PixelType4); + assertNotEquivalent(LineType1, LineType4); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/structtypeenumerate.js b/source/spidermonkey-tests/ecma_6/TypedObject/structtypeenumerate.js new file mode 100644 index 00000000..3c7bd91a --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/structtypeenumerate.js @@ -0,0 +1,36 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects StructType propery enumeration'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function runTests() { + var RgbColor = new StructType({r: uint8, g: uint8, b: uint8}); + var Fade = new StructType({from: RgbColor, to: RgbColor}); + + var white = new RgbColor({r: 255, g: 255, b: 255}); + var gray = new RgbColor({r: 129, g: 128, b: 127}); + var fade = new Fade({from: white, to: gray}); + + var keys = Object.keys(gray); + assertEqArray(keys, ["r", "g", "b"]); + + var keys = Object.keys(fade); + assertEqArray(keys, ["from", "to"]); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/structtypeindexedfields.js b/source/spidermonkey-tests/ecma_6/TypedObject/structtypeindexedfields.js new file mode 100644 index 00000000..e94be3cf --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/structtypeindexedfields.js @@ -0,0 +1,31 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects: indexed properties are illegal in a StructType'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function runTests() { + print(BUGNUMBER + ": " + summary); + + var failed; + try { + new StructType({1: int32, 2: uint8, 3: float64}); + failed = false; + } catch (e) { + failed = true; + } + reportCompare(failed, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/structtypeprototype.js b/source/spidermonkey-tests/ecma_6/TypedObject/structtypeprototype.js new file mode 100644 index 00000000..b54ff424 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/structtypeprototype.js @@ -0,0 +1,80 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects StructType prototype chains'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function runTests() { + var RgbColor1 = new StructType({r: uint8, g: uint8, b: uint8}); + var RgbColor2 = new StructType({r: uint8, g: uint8, b: uint8}); + var Fade1 = new StructType({from: RgbColor1, to: RgbColor1}); + var Fade2 = new StructType({from: RgbColor2, to: RgbColor2}); + + // Available on all struct types (even though it would only make + // sense on a RgbColor1 or RgbColor2 instance) + StructType.prototype.prototype.sub = function(c) { + this.r -= c; + this.g -= c; + this.b -= c; + }; + + // Available on `RgbColor2` instances only + RgbColor2.prototype.add = function(c) { + this.r += c; + this.g += c; + this.b += c; + }; + + var black = new RgbColor1({r: 0, g: 0, b: 0}); + var gray = new RgbColor2({r: 129, g: 128, b: 127}); + + // `add` works on `RgbColor2` + assertThrows(function() { black.add(1); }); + gray.add(1); + assertEq(130, gray.r); + assertEq(129, gray.g); + assertEq(128, gray.b); + + // `add` fails (for both!) when accessed via `fade1` + var fade1 = new Fade1({from: black, to: gray}); + assertThrows(function() { fade1.from.add(1); }); + assertThrows(function() { fade1.to.add(1); }); + + // `sub` works on both + black.sub(1); + assertEq(black.r, 255); + assertEq(black.g, 255); + assertEq(black.b, 255); + gray.sub(1); + assertEq(gray.r, 129); + assertEq(gray.g, 128); + assertEq(gray.b, 127); + + // `add` works (for both!) when accessed via `fade2` + var fade2 = new Fade2(fade1); + fade2.from.add(1); + assertEq(fade2.from.r, 1); + assertEq(fade2.from.g, 1); + assertEq(fade2.from.b, 1); + fade2.to.add(1); + assertEq(fade2.to.r, 131); + assertEq(fade2.to.g, 130); + assertEq(fade2.to.b, 129); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); + + diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/structtypereflection.js b/source/spidermonkey-tests/ecma_6/TypedObject/structtypereflection.js new file mode 100644 index 00000000..0904401e --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/structtypereflection.js @@ -0,0 +1,47 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects: check reflection on StructType objects'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function runTests() { + print(BUGNUMBER + ": " + summary); + + var S = new StructType({x: int32, y: uint8, z: float64}); + assertEq(S.__proto__, StructType.prototype); + assertEq(S.prototype.__proto__, StructType.prototype.prototype); + assertEq(S.toSource(), "new StructType({x: int32, y: uint8, z: float64})"); + assertEq(S.byteLength, 16); + assertEq(S.byteAlignment, 8); + var fieldNames = Object.getOwnPropertyNames(S.fieldTypes); + assertEq(fieldNames[0], "x"); + assertEq(fieldNames[1], "y"); + assertEq(fieldNames[2], "z"); + assertEq(fieldNames.length, 3); + assertEq(S.fieldTypes.x, int32); + assertEq(S.fieldTypes.y, uint8); + assertEq(S.fieldTypes.z, float64); + assertEq(S.fieldOffsets.x, 0); + assertEq(S.fieldOffsets.y, 4); + assertEq(S.fieldOffsets.z, 8); + + // fieldTypes and fieldOffsets should be frozen + assertEq(Object.isFrozen(S.fieldTypes), true); + assertEq(Object.isFrozen(S.fieldOffsets), true); + + if (typeof reportCompare === "function") + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/TypedObject/structtypestructuralassign.js b/source/spidermonkey-tests/ecma_6/TypedObject/structtypestructuralassign.js new file mode 100644 index 00000000..b1690109 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/TypedObject/structtypestructuralassign.js @@ -0,0 +1,94 @@ +// |reftest| skip-if(!this.hasOwnProperty("TypedObject")) +var BUGNUMBER = 578700; +var summary = 'TypedObjects StructType structural assignment'; + +var ArrayType = TypedObject.ArrayType; +var StructType = TypedObject.StructType; +var uint8 = TypedObject.uint8; +var uint16 = TypedObject.uint16; +var uint32 = TypedObject.uint32; +var uint8Clamped = TypedObject.uint8Clamped; +var int8 = TypedObject.int8; +var int16 = TypedObject.int16; +var int32 = TypedObject.int32; +var float32 = TypedObject.float32; +var float64 = TypedObject.float64; + +function assertEqColor(c1, c2) { + assertEq(c1.r, c2.r); + assertEq(c1.g, c2.g); + assertEq(c1.b, c2.b); +} + +function runTests() { + var RgbColor = new StructType({r: uint8, g: uint8, b: uint8}); + var Fade = new StructType({from: RgbColor, to: RgbColor}); + + var white = new RgbColor({r: 255, g: 255, b: 255}); + var gray = new RgbColor({r: 129, g: 128, b: 127}); + var black = new RgbColor({r: 0, g: 0, b: 0}); + + var fade = new Fade({from: white, to: white}); + assertEqColor(white, fade.from); + assertEqColor(white, fade.to); + + fade.to = gray; + assertEqColor(white, fade.from); + assertEqColor(gray, fade.to); + + fade.to = black; + assertEqColor(white, fade.from); + assertEqColor(black, fade.to); + + fade.to = {r: 129, g: 128, b: 127}; + assertEqColor(white, fade.from); + assertEqColor(gray, fade.to); + + fade.from = {r: 0, g: 0, b: 0}; + assertEqColor(black, fade.from); + assertEqColor(gray, fade.to); + + // Create a variation of color which is still binary data but the + // properties are in the wrong order. This will prevent a simple + // memcopy, but it should still work, just on the "slow path". + var BrgColor = new StructType({b: uint8, r: uint8, g: uint8}); + var brgGray = new BrgColor(gray); + assertEqColor(gray, brgGray); + + fade.from = brgGray; + assertEqColor(gray, fade.from); + + // One last test where we have to recursively adapt: + var BrgFade = new StructType({from: BrgColor, to: BrgColor}); + var brgFade = new BrgFade(fade); + assertEqColor(brgFade.from, fade.from); + assertEqColor(brgFade.to, fade.to); + + // Test that extra and missing properties are ok: + fade.from = {r: 129, g: 128, b: 127, a: 126}; + assertEqColor(fade.from, gray); + + // Missing properties are just treated as undefined: + fade.from = {r: 129, g: 128}; + assertEq(fade.from.r, 129); + assertEq(fade.from.g, 128); + assertEq(fade.from.b, 0); + + // Which means weird stuff like this is legal: + fade.from = []; + assertEqColor(fade.from, black); + fade.from = {}; + assertEqColor(fade.from, black); + + // But assignment from a scalar is NOT: + var failed = false; + try { + civic.color = 5; + } catch(e) { failed = true; } + if (!failed) throw new Exception("Should have thrown"); + + reportCompare(true, true); + print("Tests complete"); +} + +runTests(); diff --git a/source/spidermonkey-tests/ecma_6/WeakMap/browser.js b/source/spidermonkey-tests/ecma_6/WeakMap/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/WeakMap/shell.js b/source/spidermonkey-tests/ecma_6/WeakMap/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/WeakMap/symbols.js b/source/spidermonkey-tests/ecma_6/WeakMap/symbols.js new file mode 100644 index 00000000..ae49ccda --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/WeakMap/symbols.js @@ -0,0 +1,12 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ */ + +if (typeof Symbol === "function") { + // Symbols can't be WeakMap keys. + var m = new WeakMap; + var sym = Symbol(); + assertThrowsInstanceOf(() => m.set(sym, 0), TypeError); +} + +if (typeof reportCompare === "function") + reportCompare(0, 0); diff --git a/source/spidermonkey-tests/ecma_6/browser.js b/source/spidermonkey-tests/ecma_6/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/extensions/ArrayBuffer-slice-arguments-neutering.js b/source/spidermonkey-tests/ecma_6/extensions/ArrayBuffer-slice-arguments-neutering.js new file mode 100644 index 00000000..0651df62 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/extensions/ArrayBuffer-slice-arguments-neutering.js @@ -0,0 +1,83 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs neuter() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "ArrayBuffer-slice-arguments-neutering.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "ArrayBuffer.prototype.slice shouldn't misbehave horribly if " + + "index-argument conversion neuters the ArrayBuffer being sliced"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testStart(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var start = + { + valueOf: function() + { + neuter(ab, dataType); + gc(); + return 0x800; + } + }; + + var ok = false; + try + { + ab.slice(start); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "start weirdness should have thrown"); + assertEq(ab.byteLength, 0, "neutering should work for start weirdness"); +} +testStart("change-data"); +testStart("same-data"); + +function testEnd(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var end = + { + valueOf: function() + { + neuter(ab, dataType); + gc(); + return 0x1000; + } + }; + + var ok = false; + try + { + ab.slice(0x800, end); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "byteLength weirdness should have thrown"); + assertEq(ab.byteLength, 0, "neutering should work for byteLength weirdness"); +} +testEnd("change-data"); +testEnd("same-data"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/extensions/DataView-construct-arguments-neutering.js b/source/spidermonkey-tests/ecma_6/extensions/DataView-construct-arguments-neutering.js new file mode 100644 index 00000000..7bd55f1f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/extensions/DataView-construct-arguments-neutering.js @@ -0,0 +1,83 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs neuter() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "DataView-construct-arguments-neutering.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "new DataView(...) shouldn't misbehave horribly if index-argument " + + "conversion neuters the ArrayBuffer to be viewed"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testByteOffset(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var start = + { + valueOf: function() + { + neuter(ab, dataType); + gc(); + return 0x800; + } + }; + + var ok = false; + try + { + new DataView(ab, start); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "byteOffset weirdness should have thrown"); + assertEq(ab.byteLength, 0, "neutering should work for byteOffset weirdness"); +} +testByteOffset("change-data"); +testByteOffset("same-data"); + +function testByteLength(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var len = + { + valueOf: function() + { + neuter(ab, dataType); + gc(); + return 0x800; + } + }; + + var ok = false; + try + { + new DataView(ab, 0x800, len); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "byteLength weirdness should have thrown"); + assertEq(ab.byteLength, 0, "neutering should work for byteLength weirdness"); +} +testByteLength("change-data"); +testByteLength("same-data"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/extensions/DataView-set-arguments-neutering.js b/source/spidermonkey-tests/ecma_6/extensions/DataView-set-arguments-neutering.js new file mode 100644 index 00000000..fe7f9511 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/extensions/DataView-set-arguments-neutering.js @@ -0,0 +1,87 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs neuter() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "DataView-set-arguments-neutering.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "DataView.prototype.set* methods shouldn't misbehave horribly if " + + "index-argument conversion neuters the ArrayBuffer being modified"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testIndex(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var dv = new DataView(ab); + + var start = + { + valueOf: function() + { + neuter(ab, dataType); + gc(); + return 0xFFF; + } + }; + + var ok = false; + try + { + dv.setUint8(start, 0x42); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "should have thrown"); + assertEq(ab.byteLength, 0, "should have been neutered correctly"); +} +testIndex("change-data"); +testIndex("same-data"); + +function testValue(dataType) +{ + var ab = new ArrayBuffer(0x100000); + + var dv = new DataView(ab); + + var value = + { + valueOf: function() + { + neuter(ab, dataType); + gc(); + return 0x42; + } + }; + + var ok = false; + try + { + dv.setUint8(0xFFFFF, value); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "should have thrown"); + assertEq(ab.byteLength, 0, "should have been neutered correctly"); +} +testValue("change-data"); +testValue("same-data"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/extensions/TypedArray-set-object-funky-length-neuters.js b/source/spidermonkey-tests/ecma_6/extensions/TypedArray-set-object-funky-length-neuters.js new file mode 100644 index 00000000..768a1e70 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/extensions/TypedArray-set-object-funky-length-neuters.js @@ -0,0 +1,67 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs neuter() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "set-object-funky-length-neuters.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "%TypedArray.set(object with funky length property, numeric offset) " + + "shouldn't misbehave if the funky length property neuters this typed array"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var ctors = [Int8Array, Uint8Array, Uint8ClampedArray, + Int16Array, Uint16Array, + Int32Array, Uint32Array, + Float32Array, Float64Array]; +ctors.forEach(function(TypedArray) { + ["change-data", "same-data"].forEach(function(dataHandling) { + var buf = new ArrayBuffer(512 * 1024); + var ta = new TypedArray(buf); + + var arraylike = + { + 0: 17, + 1: 42, + 2: 3, + 3: 99, + 4: 37, + 5: 9, + 6: 72, + 7: 31, + 8: 22, + 9: 0, + get length() + { + neuter(buf, dataHandling); + return 10; + } + }; + + var passed = false; + try + { + ta.set(arraylike, 0x1234); + } + catch (e) + { + passed = true; + } + + assertEq(passed, true); + }); +}); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/extensions/TypedArray-subarray-arguments-neutering.js b/source/spidermonkey-tests/ecma_6/extensions/TypedArray-subarray-arguments-neutering.js new file mode 100644 index 00000000..faff6f13 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/extensions/TypedArray-subarray-arguments-neutering.js @@ -0,0 +1,115 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs neuter() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "TypedArray-subarray-arguments-neutering.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 991981; +var summary = + "%TypedArray.prototype.subarray shouldn't misbehave horribly if " + + "index-argument conversion neuters the underlying ArrayBuffer"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +function testBegin(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var begin = + { + valueOf: function() + { + neuter(ab, dataType); + return 0x800; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.subarray(begin); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "start weirdness should have thrown"); + assertEq(ab.byteLength, 0, "neutering should work for start weirdness"); +} +testBegin("change-data"); +testBegin("same-data"); + +function testBeginWithEnd(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var begin = + { + valueOf: function() + { + neuter(ab, dataType); + return 0x800; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.subarray(begin, 0x1000); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "start weirdness should have thrown"); + assertEq(ab.byteLength, 0, "neutering should work for start weirdness"); +} +testBeginWithEnd("change-data"); +testBeginWithEnd("same-data"); + +function testEnd(dataType) +{ + var ab = new ArrayBuffer(0x1000); + + var end = + { + valueOf: function() + { + neuter(ab, dataType); + return 0x1000; + } + }; + + var ta = new Uint8Array(ab); + + var ok = false; + try + { + ta.subarray(0x800, end); + } + catch (e) + { + ok = true; + } + assertEq(ok, true, "start weirdness should have thrown"); + assertEq(ab.byteLength, 0, "neutering should work for start weirdness"); +} +testEnd("change-data"); +testEnd("same-data"); + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/extensions/browser.js b/source/spidermonkey-tests/ecma_6/extensions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/extensions/indirect-proxy-preventExtensions-error-realm.js b/source/spidermonkey-tests/ecma_6/extensions/indirect-proxy-preventExtensions-error-realm.js new file mode 100644 index 00000000..0d03d421 --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/extensions/indirect-proxy-preventExtensions-error-realm.js @@ -0,0 +1,75 @@ +// |reftest| skip-if(!xulRuntime.shell) -- needs newGlobal() +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +var gTestfile = "indirect-proxy-preventExtensions-error-realm.js"; +var BUGNUMBER = 1085566; +var summary = + "The preventExtensions trap should return success/failure (with the " + + "outermost preventExtension caller deciding what to do in response), " + + "rather than throwing a TypeError itself"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +var g = newGlobal(); + +// Someday indirect proxies will be thrown into the lake of fire and sulfur +// alongside the beast and the false prophet, to be tormented day and night for +// ever and ever. When that happens, this test will need to be updated. +// +// The requirements for |p| are that 1) it be a cross-compartment wrapper, 2) to +// a proxy, 3) whose C++ preventExtensions handler method returns true while +// setting |*succeeded = false|. The other options when this test was written) +// were a global scope polluter (WindowNamedPropertiesHandler), a window object +// (nsOuterWindowProxy), a DOM proxy (DOMProxyHandler), a SecurityWrapper, a +// DebugScopeProxy (seemingly never directly exposed to script), and an +// XrayWrapper. Sadly none of these are simply available in both shell and +// browser, so indirect proxies are it. +// +// (The other option would be to do this with a jsapi-test that defines a custom +// proxy, but this was easier to write. Maybe in the future, if no other such +// proxies arise before indirect proxies die.) +var p = g.Proxy.create({}, {}); + +try +{ + // What we expect to happen is this: + // + // * Object.preventExtensions delegates to + // * cross-compartment wrapper preventExtensions trap, which delegates to + // * indirect proxy preventExtensions trap, which sets |*succeeded = false| + // *and does not throw or return false (in the JSAPI sense)* + // + // Returning false does not immediately create an error. Instead that bubbles + // backward through the layers to the initial [[PreventExtensions]] call, made + // by Object.preventExtensions. That function then creates and throws a + // TypeError in response to that false result -- from its realm, not from the + // indirect proxy's realm. + Object.preventExtensions(p); + + throw new Error("didn't throw at all"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "expected a TypeError from this global, instead got " + e + + ", from " + + (e.constructor === TypeError + ? "this global" + : e.constructor === g.TypeError + ? "the proxy's global" + : "somewhere else (!!!)")); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/extensions/setImmutablePrototype.js b/source/spidermonkey-tests/ecma_6/extensions/setImmutablePrototype.js new file mode 100644 index 00000000..ea3c052d --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/extensions/setImmutablePrototype.js @@ -0,0 +1,215 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var gTestfile = "setImmutablePrototype.js"; +//----------------------------------------------------------------------------- +var BUGNUMBER = 1052139; +var summary = + "Implement JSAPI and a shell function to prevent modifying an extensible " + + "object's [[Prototype]]"; + +print(BUGNUMBER + ": " + summary); + +/************** + * BEGIN TEST * + **************/ + +if (typeof evaluate !== "function") +{ + // Not totally faithful semantics, but approximately close enough for this + // test's purposes. + evaluate = eval; +} + +var usingRealSetImmutablePrototype = true; + +if (typeof setImmutablePrototype !== "function") +{ + usingRealSetImmutablePrototype = false; + + if (typeof SpecialPowers !== "undefined") + { + setImmutablePrototype = + SpecialPowers.Cu.getJSTestingFunctions().setImmutablePrototype; + } +} + +if (typeof wrap !== "function") +{ + // good enough + wrap = function(x) { return x; }; +} + +function setViaProtoSetter(obj, newProto) +{ + var setter = + Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set; + setter.call(obj, newProto); +} + +function checkPrototypeMutationFailure(obj, desc) +{ + var initialProto = Object.getPrototypeOf(obj); + + // disconnected from any [[Prototype]] chains for use on any object at all + var newProto = Object.create(null); + + function tryMutate(func, method) + { + try + { + func(obj, newProto); + throw new Error(desc + ": no error thrown, prototype " + + (Object.getPrototypeOf(obj) === initialProto + ? "wasn't" + : "was") + + " changed"); + } + catch (e) + { + // Note: This is always a TypeError from *this* global object, because + // Object.setPrototypeOf and the __proto__ setter come from *this* + // global object. + assertEq(e instanceof TypeError, true, + desc + ": should have thrown TypeError setting [[Prototype]] " + + "via " + method + ", got " + e); + assertEq(Object.getPrototypeOf(obj), initialProto, + desc + ": shouldn't observe [[Prototype]] change"); + } + } + + tryMutate(Object.setPrototypeOf, "Object.setPrototypeOf"); + tryMutate(setViaProtoSetter, "__proto__ setter"); +} + +function runNormalTests(global) +{ + if (typeof setImmutablePrototype !== "function") + { + print("no usable setImmutablePrototype function available, skipping tests"); + return; + } + + // regular old object, non-null [[Prototype]] + + var emptyLiteral = global.evaluate("({})"); + assertEq(setImmutablePrototype(emptyLiteral), true); + checkPrototypeMutationFailure(emptyLiteral, "empty literal"); + + // regular old object, null [[Prototype]] + + var nullProto = global.Object.create(null); + assertEq(setImmutablePrototype(nullProto), true); + checkPrototypeMutationFailure(nullProto, "nullProto"); + + // Shocker: SpecialPowers's little mind doesn't understand proxies. Abort. + if (!usingRealSetImmutablePrototype) + return; + + // direct proxies + + var emptyTarget = global.evaluate("({})"); + var directProxy = new global.Proxy(emptyTarget, {}); + assertEq(setImmutablePrototype(directProxy), true); + checkPrototypeMutationFailure(directProxy, "direct proxy to empty target"); + checkPrototypeMutationFailure(emptyTarget, "empty target"); + + var anotherTarget = global.evaluate("({})"); + var anotherDirectProxy = new global.Proxy(anotherTarget, {}); + assertEq(setImmutablePrototype(anotherTarget), true); + checkPrototypeMutationFailure(anotherDirectProxy, "another direct proxy to empty target"); + checkPrototypeMutationFailure(anotherTarget, "another empty target"); + + var nestedTarget = global.evaluate("({})"); + var nestedProxy = new global.Proxy(new Proxy(nestedTarget, {}), {}); + assertEq(setImmutablePrototype(nestedProxy), true); + checkPrototypeMutationFailure(nestedProxy, "nested proxy to empty target"); + checkPrototypeMutationFailure(nestedTarget, "nested target"); + + // revocable proxies + + var revocableTarget = global.evaluate("({})"); + var revocable = global.Proxy.revocable(revocableTarget, {}); + assertEq(setImmutablePrototype(revocable.proxy), true); + checkPrototypeMutationFailure(revocableTarget, "revocable target"); + checkPrototypeMutationFailure(revocable.proxy, "revocable proxy"); + + assertEq(revocable.revoke(), undefined); + try + { + setImmutablePrototype(revocable.proxy); + throw new Error("expected to throw on revoked proxy"); + } + catch (e) + { + // Note: This is a TypeError from |global|, because the proxy's + // |setImmutablePrototype| method is what actually throws here. + // (Usually the method simply sets |*succeeded| to false and the + // caller handles or throws as needed after that. But not here.) + assertEq(e instanceof global.TypeError, true, + "expected TypeError, instead threw " + e); + } + + var anotherRevocableTarget = global.evaluate("({})"); + assertEq(setImmutablePrototype(anotherRevocableTarget), true); + checkPrototypeMutationFailure(anotherRevocableTarget, "another revocable target"); + + var anotherRevocable = global.Proxy.revocable(anotherRevocableTarget, {}); + checkPrototypeMutationFailure(anotherRevocable.proxy, "another revocable target"); + + assertEq(anotherRevocable.revoke(), undefined); + try + { + var rv = setImmutablePrototype(anotherRevocable.proxy); + throw new Error("expected to throw on another revoked proxy, returned " + rv); + } + catch (e) + { + // NOTE: Again from |global|, as above. + assertEq(e instanceof global.TypeError, true, + "expected TypeError, instead threw " + e); + } + + // hated indirect proxies + var oldProto = {}; + var indirectProxy = global.Proxy.create({}, oldProto); + assertEq(setImmutablePrototype(indirectProxy), true); + assertEq(Object.getPrototypeOf(indirectProxy), oldProto); + checkPrototypeMutationFailure(indirectProxy, "indirectProxy"); + + var indirectFunctionProxy = global.Proxy.createFunction({}, function call() {}); + assertEq(setImmutablePrototype(indirectFunctionProxy), true); + assertEq(Object.getPrototypeOf(indirectFunctionProxy), global.Function.prototype); + checkPrototypeMutationFailure(indirectFunctionProxy, "indirectFunctionProxy"); + + // more-hated wrap() + + var wrappedTarget = {}; + var wrappedProxy = global.wrap(wrappedTarget); + + assertEq(setImmutablePrototype(wrappedProxy), true); + checkPrototypeMutationFailure(wrappedProxy, "wrapped proxy"); +} + +var global = this; +runNormalTests(global); // same-global + +if (typeof newGlobal === "function") +{ + var otherGlobal = newGlobal(); + var subsumingNothing = newGlobal({ principal: 0 }); + var subsumingEverything = newGlobal({ principal: ~0 }); + + runNormalTests(otherGlobal); // cross-global + runNormalTests(subsumingNothing); + runNormalTests(subsumingEverything); +} + +/******************************************************************************/ + +if (typeof reportCompare === "function") + reportCompare(true, true); + +print("Tests complete"); diff --git a/source/spidermonkey-tests/ecma_6/extensions/shell.js b/source/spidermonkey-tests/ecma_6/extensions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/ecma_6/shell.js b/source/spidermonkey-tests/ecma_6/shell.js new file mode 100644 index 00000000..8bdcb71f --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/shell.js @@ -0,0 +1,205 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +if (typeof assertThrowsInstanceOf === 'undefined') { + var assertThrowsInstanceOf = function assertThrowsInstanceOf(f, ctor, msg) { + var fullmsg; + try { + f(); + } catch (exc) { + if (exc instanceof ctor) + return; + fullmsg = "Assertion failed: expected exception " + ctor.name + ", got " + exc; + } + if (fullmsg === undefined) + fullmsg = "Assertion failed: expected exception " + ctor.name + ", no exception thrown"; + if (msg !== undefined) + fullmsg += " - " + msg; + throw new Error(fullmsg); + }; +} + +if (typeof assertThrowsValue === 'undefined') { + var assertThrowsValue = function assertThrowsValue(f, val, msg) { + var fullmsg; + try { + f(); + } catch (exc) { + if ((exc === val) === (val === val) && (val !== 0 || 1 / exc === 1 / val)) + return; + fullmsg = "Assertion failed: expected exception " + val + ", got " + exc; + } + if (fullmsg === undefined) + fullmsg = "Assertion failed: expected exception " + val + ", no exception thrown"; + if (msg !== undefined) + fullmsg += " - " + msg; + throw new Error(fullmsg); + }; +} + +if (typeof assertDeepEq === 'undefined') { + var assertDeepEq = (function(){ + var call = Function.prototype.call, + Array_isArray = Array.isArray, + Map_ = Map, + Error_ = Error, + Map_has = call.bind(Map.prototype.has), + Map_get = call.bind(Map.prototype.get), + Map_set = call.bind(Map.prototype.set), + Object_toString = call.bind(Object.prototype.toString), + Function_toString = call.bind(Function.prototype.toString), + Object_getPrototypeOf = Object.getPrototypeOf, + Object_hasOwnProperty = call.bind(Object.prototype.hasOwnProperty), + Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor, + Object_isExtensible = Object.isExtensible, + Object_getOwnPropertyNames = Object.getOwnPropertyNames, + uneval_ = uneval; + + // Return true iff ES6 Type(v) isn't Object. + // Note that `typeof document.all === "undefined"`. + function isPrimitive(v) { + return (v === null || + v === undefined || + typeof v === "boolean" || + typeof v === "number" || + typeof v === "string" || + typeof v === "symbol"); + } + + function assertSameValue(a, b, msg) { + try { + assertEq(a, b); + } catch (exc) { + throw Error_(exc.message + (msg ? " " + msg : "")); + } + } + + function assertSameClass(a, b, msg) { + var ac = Object_toString(a), bc = Object_toString(b); + assertSameValue(ac, bc, msg); + switch (ac) { + case "[object Function]": + assertSameValue(Function_toString(a), Function_toString(b), msg); + } + } + + function at(prevmsg, segment) { + return prevmsg ? prevmsg + segment : "at _" + segment; + } + + // Assert that the arguments a and b are thoroughly structurally equivalent. + // + // For the sake of speed, we cut a corner: + // var x = {}, y = {}, ax = [x]; + // assertDeepEq([ax, x], [ax, y]); // passes (?!) + // + // Technically this should fail, since the two object graphs are different. + // (The graph of [ax, y] contains one more object than the graph of [ax, x].) + // + // To get technically correct behavior, pass {strictEquivalence: true}. + // This is slower because we have to walk the entire graph, and Object.prototype + // is big. + // + return function assertDeepEq(a, b, options) { + var strictEquivalence = options ? options.strictEquivalence : false; + + function assertSameProto(a, b, msg) { + check(Object_getPrototypeOf(a), Object_getPrototypeOf(b), at(msg, ".__proto__")); + } + + function failPropList(na, nb, msg) { + throw Error_("got own properties " + uneval_(na) + ", expected " + uneval_(nb) + + (msg ? " " + msg : "")); + } + + function assertSameProps(a, b, msg) { + var na = Object_getOwnPropertyNames(a), + nb = Object_getOwnPropertyNames(b); + if (na.length !== nb.length) + failPropList(na, nb, msg); + + // Ignore differences in whether Array elements are stored densely. + if (Array_isArray(a)) { + na.sort(); + nb.sort(); + } + + for (var i = 0; i < na.length; i++) { + var name = na[i]; + if (name !== nb[i]) + failPropList(na, nb, msg); + var da = Object_getOwnPropertyDescriptor(a, name), + db = Object_getOwnPropertyDescriptor(b, name); + var pmsg = at(msg, /^[_$A-Za-z0-9]+$/.test(name) + ? /0|[1-9][0-9]*/.test(name) ? "[" + name + "]" : "." + name + : "[" + uneval_(name) + "]"); + assertSameValue(da.configurable, db.configurable, at(pmsg, ".[[Configurable]]")); + assertSameValue(da.enumerable, db.enumerable, at(pmsg, ".[[Enumerable]]")); + if (Object_hasOwnProperty(da, "value")) { + if (!Object_hasOwnProperty(db, "value")) + throw Error_("got data property, expected accessor property" + pmsg); + check(da.value, db.value, pmsg); + } else { + if (Object_hasOwnProperty(db, "value")) + throw Error_("got accessor property, expected data property" + pmsg); + check(da.get, db.get, at(pmsg, ".[[Get]]")); + check(da.set, db.set, at(pmsg, ".[[Set]]")); + } + } + }; + + var ab = Map_(); + var bpath = Map_(); + + function check(a, b, path) { + if (typeof a === "symbol") { + // Symbols are primitives, but they have identity. + // Symbol("x") !== Symbol("x") but + // assertDeepEq(Symbol("x"), Symbol("x")) should pass. + if (typeof b !== "symbol") { + throw Error_("got " + uneval_(a) + ", expected " + uneval_(b) + " " + path); + } else if (uneval_(a) !== uneval_(b)) { + // We lamely use uneval_ to distinguish well-known symbols + // from user-created symbols. The standard doesn't offer + // a convenient way to do it. + throw Error_("got " + uneval_(a) + ", expected " + uneval_(b) + " " + path); + } else if (Map_has(ab, a)) { + assertSameValue(Map_get(ab, a), b, path); + } else if (Map_has(bpath, b)) { + var bPrevPath = Map_get(bpath, b) || "_"; + throw Error_("got distinct symbols " + at(path, "") + " and " + + at(bPrevPath, "") + ", expected the same symbol both places"); + } else { + Map_set(ab, a, b); + Map_set(bpath, b, path); + } + } else if (isPrimitive(a)) { + assertSameValue(a, b, path); + } else if (isPrimitive(b)) { + throw Error_("got " + Object_toString(a) + ", expected " + uneval_(b) + " " + path); + } else if (Map_has(ab, a)) { + assertSameValue(Map_get(ab, a), b, path); + } else if (Map_has(bpath, b)) { + var bPrevPath = Map_get(bpath, b) || "_"; + throw Error_("got distinct objects " + at(path, "") + " and " + at(bPrevPath, "") + + ", expected the same object both places"); + } else { + Map_set(ab, a, b); + Map_set(bpath, b, path); + if (a !== b || strictEquivalence) { + assertSameClass(a, b, path); + assertSameProto(a, b, path); + assertSameProps(a, b, path); + assertSameValue(Object_isExtensible(a), + Object_isExtensible(b), + at(path, ".[[Extensible]]")); + } + } + } + + check(a, b, ""); + }; + })(); +} diff --git a/source/spidermonkey-tests/ecma_6/toLength.js b/source/spidermonkey-tests/ecma_6/toLength.js new file mode 100644 index 00000000..f2216e7b --- /dev/null +++ b/source/spidermonkey-tests/ecma_6/toLength.js @@ -0,0 +1,41 @@ +// |reftest| skip-if(!xulRuntime.shell) +var BUGNUMBER = 1040196; +var summary = 'ToLength'; + +print(BUGNUMBER + ": " + summary); + +var ToLength = getSelfHostedValue('ToLength'); + +// Negative operands +assertEq(ToLength(-0), 0); +assertEq(ToLength(-1), 0); +assertEq(ToLength(-2), 0); +assertEq(ToLength(-1 * Math.pow(2, 56)), 0); +assertEq(ToLength(-1 * Math.pow(2, 56) - 2), 0); +assertEq(ToLength(-1 * Math.pow(2, 56) - 2.4444), 0); +assertEq(ToLength(-Infinity), 0); + +// Small non-negative operands +assertEq(ToLength(0), 0); +assertEq(ToLength(1), 1); +assertEq(ToLength(2), 2); +assertEq(ToLength(3.3), 3); +assertEq(ToLength(10/3), 3); + +// Large non-negative operands +var maxLength = Math.pow(2, 53) - 1; +assertEq(ToLength(maxLength - 1), maxLength - 1); +assertEq(ToLength(maxLength - 0.0000001), maxLength); +assertEq(ToLength(maxLength), maxLength); +assertEq(ToLength(maxLength + 0.00000000000001), maxLength); +assertEq(ToLength(maxLength + 1), maxLength); +assertEq(ToLength(maxLength + 2), maxLength); +assertEq(ToLength(Math.pow(2,54)), maxLength); +assertEq(ToLength(Math.pow(2,64)), maxLength); +assertEq(ToLength(Infinity), maxLength); + +// NaN operand +assertEq(ToLength(NaN), 0); + + +reportCompare(0, 0, "ok"); diff --git a/source/spidermonkey-tests/function-arguments-caller-changes.diff b/source/spidermonkey-tests/function-arguments-caller-changes.diff new file mode 100644 index 00000000..5c9cc0cf --- /dev/null +++ b/source/spidermonkey-tests/function-arguments-caller-changes.diff @@ -0,0 +1,234 @@ +diff --git a/js/src/tests/test262/ch13/13.2/13.2-29-s.js b/js/src/tests/test262/ch13/13.2/13.2-29-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-29-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-29-s.js +@@ -8,12 +8,12 @@ + * @description StrictMode - property named 'caller' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { + function foo() {"use strict";} +- return ! Object.getOwnPropertyDescriptor(foo, +- "caller").configurable; ++ return Object.getOwnPropertyDescriptor(foo, ++ "caller") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/13.2-30-s.js b/js/src/tests/test262/ch13/13.2/13.2-30-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-30-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-30-s.js +@@ -7,12 +7,12 @@ + * @path ch13/13.2/13.2-30-s.js + * @description StrictMode - property named 'caller' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { +- return ! Object.getOwnPropertyDescriptor(Function("'use strict';"), +- "caller").configurable; ++ return Object.getOwnPropertyDescriptor(Function("'use strict';"), ++ "caller") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/13.2-31-s.js b/js/src/tests/test262/ch13/13.2/13.2-31-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-31-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-31-s.js +@@ -7,12 +7,12 @@ + * @path ch13/13.2/13.2-31-s.js + * @description StrictMode - property named 'caller' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { +- return ! Object.getOwnPropertyDescriptor(new Function("'use strict';"), +- "caller").configurable; ++ return Object.getOwnPropertyDescriptor(new Function("'use strict';"), ++ "caller") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/13.2-32-s.js b/js/src/tests/test262/ch13/13.2/13.2-32-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-32-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-32-s.js +@@ -8,12 +8,12 @@ + * @description StrictMode - property named 'caller' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { + var funcExpr = function () { "use strict";}; +- return ! Object.getOwnPropertyDescriptor(funcExpr, +- "caller").configurable; ++ return Object.getOwnPropertyDescriptor(funcExpr, ++ "caller") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/13.2-33-s.js b/js/src/tests/test262/ch13/13.2/13.2-33-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-33-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-33-s.js +@@ -8,12 +8,12 @@ + * @description StrictMode - property named 'arguments' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { + function foo() {"use strict";} +- return ! Object.getOwnPropertyDescriptor(foo, +- "arguments").configurable; ++ return Object.getOwnPropertyDescriptor(foo, ++ "arguments") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/13.2-34-s.js b/js/src/tests/test262/ch13/13.2/13.2-34-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-34-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-34-s.js +@@ -7,12 +7,12 @@ + * @path ch13/13.2/13.2-34-s.js + * @description StrictMode - property named 'arguments' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { +- return ! Object.getOwnPropertyDescriptor(Function("'use strict';"), +- "arguments").configurable; ++ return Object.getOwnPropertyDescriptor(Function("'use strict';"), ++ "arguments") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/13.2-35-s.js b/js/src/tests/test262/ch13/13.2/13.2-35-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-35-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-35-s.js +@@ -7,12 +7,12 @@ + * @path ch13/13.2/13.2-35-s.js + * @description StrictMode - property named 'arguments' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { +- return ! Object.getOwnPropertyDescriptor(new Function("'use strict';"), +- "arguments").configurable; ++ return Object.getOwnPropertyDescriptor(new Function("'use strict';"), ++ "arguments") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/13.2-36-s.js b/js/src/tests/test262/ch13/13.2/13.2-36-s.js +--- a/js/src/tests/test262/ch13/13.2/13.2-36-s.js ++++ b/js/src/tests/test262/ch13/13.2/13.2-36-s.js +@@ -8,12 +8,12 @@ + * @description StrictMode - property named 'arguments' of function objects is not configurable + * @onlyStrict + */ + + + + function testcase() { + var funcExpr = function () { "use strict";}; +- return ! Object.getOwnPropertyDescriptor(funcExpr, +- "arguments").configurable; ++ return Object.getOwnPropertyDescriptor(funcExpr, ++ "arguments") === undefined; + } +-runTestCase(testcase); +\ No newline at end of file ++runTestCase(testcase); +diff --git a/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js +--- a/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js ++++ b/js/src/tests/test262/ch13/13.2/S13.2.3_A1.js +@@ -1,49 +1,61 @@ + // Copyright 2011 Google Inc. All rights reserved. + // This code is governed by the BSD license found in the LICENSE file. + + /** + * @path ch13/13.2/S13.2.3_A1.js +- * @description check that all poisoning use the [[ThrowTypeError]] ++ * @description check that strict mode functions/arguments have ++ * [[ThrowTypeError]]-like behavior + * function object. + * @onlyStrict + */ + + "use strict"; +-var poison = Object.getOwnPropertyDescriptor(function() {}, 'caller').get; ++var poison = Object.getOwnPropertyDescriptor(Function.prototype, 'caller').get; + + if (typeof poison !== 'function') { + $ERROR("#1: A strict function's .caller should be poisoned with a function"); + } + var threw = null; + try { +- poison(); ++ poison.call(function() {}); + } catch (err) { + threw = err; + } + if (!threw || !(threw instanceof TypeError)) { + $ERROR("#2: Poisoned property should throw TypeError"); + } + ++function checkNotPresent(obj, name) { ++ var desc = Object.getOwnPropertyDescriptor(obj, name); ++ if (desc !== undefined) { ++ $ERROR("#3: " + name + " should not appear as a descriptor"); ++ } ++} ++ ++var argumentsPoison = ++ Object.getOwnPropertyDescriptor(function() { return arguments; }(), ++ "callee").get; ++ + function checkPoison(obj, name) { + var desc = Object.getOwnPropertyDescriptor(obj, name); + if (desc.enumerable) { + $ERROR("#3: Poisoned " + name + " should not be enumerable"); + } + if (desc.configurable) { + $ERROR("#4: Poisoned " + name + " should not be configurable"); + } +- if (poison !== desc.get) { ++ if (argumentsPoison !== desc.get) { + $ERROR("#5: " + name + "'s getter not poisoned with same poison"); + } +- if (poison !== desc.set) { ++ if (argumentsPoison !== desc.set) { + $ERROR("#6: " + name + "'s setter not poisoned with same poison"); + } + } + +-checkPoison(function() {}, 'caller'); +-checkPoison(function() {}, 'arguments'); ++checkNotPresent(function() {}, 'caller'); ++checkNotPresent(function() {}, 'arguments'); + checkPoison((function() { return arguments; })(), 'caller'); + checkPoison((function() { return arguments; })(), 'callee'); +-checkPoison((function() {}).bind(null), 'caller'); +-checkPoison((function() {}).bind(null), 'arguments'); ++checkNotPresent((function() {}).bind(null), 'caller'); ++checkNotPresent((function() {}).bind(null), 'arguments'); + diff --git a/source/spidermonkey-tests/js-test-driver-begin.js b/source/spidermonkey-tests/js-test-driver-begin.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js-test-driver-end.js b/source/spidermonkey-tests/js-test-driver-end.js new file mode 100644 index 00000000..19a910c3 --- /dev/null +++ b/source/spidermonkey-tests/js-test-driver-end.js @@ -0,0 +1,3 @@ +jsTestDriverEnd(); + + diff --git a/source/spidermonkey-tests/js1_1/README b/source/spidermonkey-tests/js1_1/README new file mode 100644 index 00000000..eb5b5cc9 --- /dev/null +++ b/source/spidermonkey-tests/js1_1/README @@ -0,0 +1 @@ +JavaScript 1.1 diff --git a/source/spidermonkey-tests/js1_1/browser.js b/source/spidermonkey-tests/js1_1/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_1/jsref.js b/source/spidermonkey-tests/js1_1/jsref.js new file mode 100644 index 00000000..1e82e8c5 --- /dev/null +++ b/source/spidermonkey-tests/js1_1/jsref.js @@ -0,0 +1,167 @@ +var completed = false; +var testcases; + +var BUGNUMBER=""; +var EXCLUDE = ""; + +var TT = ""; +var TT_ = ""; +var BR = ""; +var NBSP = " "; +var CR = "\n"; +var FONT = ""; +var FONT_ = ""; +var FONT_RED = ""; +var FONT_GREEN = ""; +var B = ""; +var B_ = "" +var H2 = ""; +var H2_ = ""; +var HR = ""; + +var PASSED = " PASSED!" +var FAILED = " FAILED! expected: "; + +version( 110 ); + +function test() { + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ + testcases[tc].actual ); + + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); +} + +function TestCase( n, d, e, a ) { + this.name = n; + this.description = d; + this.expect = e; + this.actual = a; + this.passed = true; + this.reason = ""; + this.bugnumber = BUGNUMBER; + + this.passed = getTestCaseResult( this.expect, this.actual ); +} +function startTest() { +/* + // JavaScript 1.3 is supposed to be compliant ecma version 1.0 + if ( VERSION == "ECMA_1" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.3" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.2" ) { + version ( "120" ); + } + if ( VERSION == "JS_1.1" ) { + version ( "110" ); + } + // for ecma version 2.0, we will leave the javascript version to + // the default ( for now ). +*/ +} +function getTestCaseResult( expect, actual ) { + // because ( NaN == NaN ) always returns false, need to do + // a special compare to see if we got the right result. + if ( actual != actual ) { + if ( typeof actual == "object" ) { + actual = "NaN object"; + } else { + actual = "NaN number"; + } + } + if ( expect != expect ) { + if ( typeof expect == "object" ) { + expect = "NaN object"; + } else { + expect = "NaN number"; + } + } + + var passed = ( expect == actual ) ? true : false; + + // if both objects are numbers, give a little leeway for rounding. + if ( !passed + && typeof(actual) == "number" + && typeof(expect) == "number" + ) { + if ( Math.abs(actual-expect) < 0.0000001 ) { + passed = true; + } + } + + // verify type is the same + if ( typeof(expect) != typeof(actual) ) { + passed = false; + } + + return passed; +} +function writeTestCaseResult( expect, actual, string ) { + var passed = getTestCaseResult( expect, actual ); + writeFormattedResult( expect, actual, string, passed ); + return passed; +} +function writeFormattedResult( expect, actual, string, passed ) { + var s = TT + string ; + + for ( k = 0; + k < (60 - string.length >= 0 ? 60 - string.length : 5) ; + k++ ) { +// s += NBSP; + } + + s += B ; + s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ; + + print( s + FONT_ + B_ + TT_ ); + + return passed; +} + +function writeHeaderToLog( string ) { + print( H2 + string + H2_ ); +} +function stopTest() { + var sizeTag = "<#TEST CASES SIZE>"; + var doneTag = "<#TEST CASES DONE>"; + var beginTag = "<#TEST CASE "; + var endTag = ">"; + + print(sizeTag); + print(testcases.length); + for (tc = 0; tc < testcases.length; tc++) + { + print(beginTag + 'PASSED' + endTag); + print(testcases[tc].passed); + print(beginTag + 'NAME' + endTag); + print(testcases[tc].name); + print(beginTag + 'EXPECTED' + endTag); + print(testcases[tc].expect); + print(beginTag + 'ACTUAL' + endTag); + print(testcases[tc].actual); + print(beginTag + 'DESCRIPTION' + endTag); + print(testcases[tc].description); + print(beginTag + 'REASON' + endTag); + print(( testcases[tc].passed ) ? "" : "wrong value "); + print(beginTag + 'BUGNUMBER' + endTag); + print( BUGNUMBER ); + } + print(doneTag); + gc(); +} +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} diff --git a/source/spidermonkey-tests/js1_1/regress/browser.js b/source/spidermonkey-tests/js1_1/regress/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_1/regress/function-001.js b/source/spidermonkey-tests/js1_1/regress/function-001.js new file mode 100644 index 00000000..37d2335d --- /dev/null +++ b/source/spidermonkey-tests/js1_1/regress/function-001.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: boolean-001.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232 + * + * eval("function f(){}function g(){}") at top level is an error for JS1.2 + and above (missing ; between named function expressions), but declares f + and g as functions below 1.2. + * + * Fails to produce error regardless of version: + * js> version(100) + 120 + js> eval("function f(){}function g(){}") + js> version(120); + 100 + js> eval("function f(){}function g(){}") + js> + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "function-001.js"; +var VERSION = "JS1_1"; +var TITLE = "functions not separated by semicolons are not errors in version 110 "; +var BUGNUMBER="99232"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +result = "passed"; + +new TestCase( + SECTION, + "eval(\"function f(){}function g(){}\")", + void 0, + eval("function f(){}function g(){}") ); + +test(); + diff --git a/source/spidermonkey-tests/js1_1/regress/perfect.js b/source/spidermonkey-tests/js1_1/regress/perfect.js new file mode 100644 index 00000000..ceb340d7 --- /dev/null +++ b/source/spidermonkey-tests/js1_1/regress/perfect.js @@ -0,0 +1,47 @@ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +// Some simple testing of new, eval and some string stuff. + +// constructor -- expression array initialization +function ExprArray(n,v) +{ + // Initializes n values to v coerced to a string. + for (var i = 0; i < n; i++) { + this[i] = "" + v; + } +} + + +// Print the perfect numbers up to n and the sum expression for n's divisors. +function perfect(n) +{ + print("The perfect numbers up to " + n + " are:"); + var results = []; + + // We build sumOfDivisors[i] to hold a string expression for + // the sum of the divisors of i, excluding i itself. + var sumOfDivisors = new ExprArray(n+1,1); + for (var divisor = 2; divisor <= n; divisor++) { + for (var j = divisor + divisor; j <= n; j += divisor) { + sumOfDivisors[j] += " + " + divisor; + } + // At this point everything up to 'divisor' has its sumOfDivisors + // expression calculated, so we can determine whether it's perfect + // already by evaluating. + if (eval(sumOfDivisors[divisor]) == divisor) { + print("" + divisor + " = " + sumOfDivisors[divisor]); + results.push(divisor); + } + } + print("That's all."); + return results; +} + + +print("\nA number is 'perfect' if it is equal to the sum of its") +print("divisors (excluding itself).\n"); + +reportCompare(perfect(500).join(), "6,28,496"); diff --git a/source/spidermonkey-tests/js1_1/regress/shell.js b/source/spidermonkey-tests/js1_1/regress/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_1/shell.js b/source/spidermonkey-tests/js1_1/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/Array/array_split_1.js b/source/spidermonkey-tests/js1_2/Array/array_split_1.js new file mode 100644 index 00000000..8461d1b8 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/array_split_1.js @@ -0,0 +1,53 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: array_split_1.js + ECMA Section: Array.split() + Description: + + These are tests from free perl suite. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "Free Perl"; +var VERSION = "JS1_2"; +var TITLE = "Array.split()"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + + +new TestCase( SECTION, + "('a,b,c'.split(',')).length", + 3, + ('a,b,c'.split(',')).length ); + +new TestCase( SECTION, + "('a,b'.split(',')).length", + 2, + ('a,b'.split(',')).length ); + +new TestCase( SECTION, + "('a'.split(',')).length", + 1, + ('a'.split(',')).length ); + +/* + * Deviate from ECMA by never splitting an empty string by any separator + * string into a non-empty array (an array of length 1 that contains the + * empty string). + */ +new TestCase( SECTION, + "(''.split(',')).length", + 0, + (''.split(',')).length ); + +test(); diff --git a/source/spidermonkey-tests/js1_2/Array/browser.js b/source/spidermonkey-tests/js1_2/Array/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/Array/general1.js b/source/spidermonkey-tests/js1_2/Array/general1.js new file mode 100644 index 00000000..2ebb39d7 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/general1.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: general1.js + Description: 'This tests out some of the functionality on methods on the Array objects' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String:push,unshift,shift'; + +writeHeaderToLog('Executing script: general1.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var array1 = []; + +array1.push(123); //array1 = [123] +array1.push("dog"); //array1 = [123,dog] +array1.push(-99); //array1 = [123,dog,-99] +array1.push("cat"); //array1 = [123,dog,-99,cat] +new TestCase( SECTION, "array1.pop()", array1.pop(),'cat'); +//array1 = [123,dog,-99] +array1.push("mouse"); //array1 = [123,dog,-99,mouse] +new TestCase( SECTION, "array1.shift()", array1.shift(),123); +//array1 = [dog,-99,mouse] +array1.unshift(96); //array1 = [96,dog,-99,mouse] +new TestCase( SECTION, "state of array", String([96,"dog",-99,"mouse"]), String(array1)); +new TestCase( SECTION, "array1.length", array1.length,4); +array1.shift(); //array1 = [dog,-99,mouse] +array1.shift(); //array1 = [-99,mouse] +array1.shift(); //array1 = [mouse] +new TestCase( SECTION, "array1.shift()", array1.shift(),"mouse"); +new TestCase( SECTION, "array1.shift()", "undefined", String(array1.shift())); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/Array/general2.js b/source/spidermonkey-tests/js1_2/Array/general2.js new file mode 100644 index 00000000..07779b72 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/general2.js @@ -0,0 +1,59 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: general2.js + Description: 'This tests out some of the functionality on methods on the Array objects' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String:push,splice,concat,unshift,sort'; + +writeHeaderToLog('Executing script: general2.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +array1 = new Array(); +array2 = []; +size = 10; + +// this for loop populates array1 and array2 as follows: +// array1 = [0,1,2,3,4,....,size - 2,size - 1] +// array2 = [size - 1, size - 2,...,4,3,2,1,0] +for (var i = 0; i < size; i++) +{ + array1.push(i); + array2.push(size - 1 - i); +} + +// the following for loop reverses the order of array1 so +// that it should be similarly ordered to array2 +for (i = array1.length; i > 0; i--) +{ + array3 = array1.slice(1,i); + array1.splice(1,i-1); + array1 = array3.concat(array1); +} + +// the following for loop reverses the order of array1 +// and array2 +for (i = 0; i < size; i++) +{ + array1.push(array1.shift()); + array2.unshift(array2.pop()); +} + +new TestCase( SECTION, "Array.push,pop,shift,unshift,slice,splice", true,String(array1) == String(array2)); +array1.sort(); +array2.sort(); +new TestCase( SECTION, "Array.sort", true,String(array1) == String(array2)); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/Array/shell.js b/source/spidermonkey-tests/js1_2/Array/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/Array/slice.js b/source/spidermonkey-tests/js1_2/Array/slice.js new file mode 100644 index 00000000..8f95aa18 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/slice.js @@ -0,0 +1,89 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: slice.js + Description: 'This tests out some of the functionality on methods on the Array objects' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String:slice'; + +writeHeaderToLog('Executing script: slice.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']]; +var b = [1,2,3,4,5,6,7,8,9,0]; + +exhaustiveSliceTest("exhaustive slice test 1", a); +exhaustiveSliceTest("exhaustive slice test 2", b); + +test(); + +function mySlice(a, from, to) +{ + var from2 = from; + var to2 = to; + var returnArray = []; + var i; + + if (from2 < 0) from2 = a.length + from; + if (to2 < 0) to2 = a.length + to; + + if ((to2 > from2)&&(to2 > 0)&&(from2 < a.length)) + { + if (from2 < 0) from2 = 0; + if (to2 > a.length) to2 = a.length; + + for (i = from2; i < to2; ++i) returnArray.push(a[i]); + } + return returnArray; +} + +// This function tests the slice command on an Array +// passed in. The arguments passed into slice range in +// value from -5 to the length of the array + 4. Every +// combination of the two arguments is tested. The expected +// result of the slice(...) method is calculated and +// compared to the actual result from the slice(...) method. +// If the Arrays are not similar false is returned. +function exhaustiveSliceTest(testname, a) +{ + var x = 0; + var y = 0; + var errorMessage; + var reason = ""; + var passed = true; + + for (x = -(2 + a.length); x <= (2 + a.length); x++) + for (y = (2 + a.length); y >= -(2 + a.length); y--) + { + var b = a.slice(x,y); + var c = mySlice(a,x,y); + + if (String(b) != String(c)) + { + errorMessage = + "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" + + " test: " + "a.slice(" + x + "," + y + ")\n" + + " a: " + String(a) + "\n" + + " actual result: " + String(b) + "\n" + + " expected result: " + String(c) + "\n"; + writeHeaderToLog(errorMessage); + reason = reason + errorMessage; + passed = false; + } + } + var testCase = new TestCase(SECTION, testname, true, passed); + if (passed == false) + testCase.reason = reason; + return testCase; +} diff --git a/source/spidermonkey-tests/js1_2/Array/splice1.js b/source/spidermonkey-tests/js1_2/Array/splice1.js new file mode 100644 index 00000000..37f36e19 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/splice1.js @@ -0,0 +1,119 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: splice1.js + Description: 'Tests Array.splice(x,y) w/no var args' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'String:splice 1'; +var BUGNUMBER="123795"; + +startTest(); +writeHeaderToLog('Executing script: splice1.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']]; +var b = [1,2,3,4,5,6,7,8,9,0]; + +exhaustiveSpliceTest("exhaustive splice w/no optional args 1",a); +exhaustiveSpliceTest("exhaustive splice w/no optional args 1",b); + +test(); + + +function mySplice(testArray, splicedArray, first, len, elements) +{ + var removedArray = []; + var adjustedFirst = first; + var adjustedLen = len; + + if (adjustedFirst < 0) adjustedFirst = testArray.length + first; + if (adjustedFirst < 0) adjustedFirst = 0; + + if (adjustedLen < 0) adjustedLen = 0; + + for (i = 0; (i < adjustedFirst)&&(i < testArray.length); ++i) + splicedArray.push(testArray[i]); + + if (adjustedFirst < testArray.length) + for (i = adjustedFirst; (i < adjustedFirst + adjustedLen) && + (i < testArray.length); ++i) + { + removedArray.push(testArray[i]); + } + + for (i = 0; i < elements.length; i++) splicedArray.push(elements[i]); + + for (i = adjustedFirst + adjustedLen; i < testArray.length; i++) + splicedArray.push(testArray[i]); + + return removedArray; +} + +function exhaustiveSpliceTest(testname, testArray) +{ + var errorMessage; + var passed = true; + var reason = ""; + + for (var first = -(testArray.length+2); first <= 2 + testArray.length; first++) + { + var actualSpliced = []; + var expectedSpliced = []; + var actualRemoved = []; + var expectedRemoved = []; + + for (var len = 0; len < testArray.length + 2; len++) + { + actualSpliced = []; + expectedSpliced = []; + + for (var i = 0; i < testArray.length; ++i) + actualSpliced.push(testArray[i]); + + actualRemoved = actualSpliced.splice(first,len); + expectedRemoved = mySplice(testArray,expectedSpliced,first,len,[]); + + var adjustedFirst = first; + if (adjustedFirst < 0) adjustedFirst = testArray.length + first; + if (adjustedFirst < 0) adjustedFirst = 0; + + if ( (String(actualSpliced) != String(expectedSpliced)) + ||(String(actualRemoved) != String(expectedRemoved))) + { + if ( (String(actualSpliced) == String(expectedSpliced)) + &&(String(actualRemoved) != String(expectedRemoved)) ) + { + if ( (expectedRemoved.length == 1) + &&(String(actualRemoved) == String(expectedRemoved[0]))) continue; + if ( expectedRemoved.length == 0 && actualRemoved == void 0) continue; + } + + errorMessage = + "ERROR: 'TEST FAILED'\n" + + " test: " + "a.splice(" + first + "," + len + ",-97,new String('test arg'),[],9.8)\n" + + " a: " + String(testArray) + "\n" + + " actual spliced: " + String(actualSpliced) + "\n" + + " expected spliced: " + String(expectedSpliced) + "\n" + + " actual removed: " + String(actualRemoved) + "\n" + + " expected removed: " + String(expectedRemoved) + "\n"; + writeHeaderToLog(errorMessage); + reason = reason + errorMessage; + passed = false; + } + } + } + var testcase = new TestCase( SECTION, testname, true, passed); + if (!passed) + testcase.reason = reason; + return testcase; +} diff --git a/source/spidermonkey-tests/js1_2/Array/splice2.js b/source/spidermonkey-tests/js1_2/Array/splice2.js new file mode 100644 index 00000000..9295d554 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/splice2.js @@ -0,0 +1,116 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: splice2.js + Description: 'Tests Array.splice(x,y) w/4 var args' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'String:splice 2'; +var BUGNUMBER="123795"; + +startTest(); +writeHeaderToLog('Executing script: splice2.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = ['a','test string',456,9.34,new String("string object"),[],['h','i','j','k']]; +var b = [1,2,3,4,5,6,7,8,9,0]; + +exhaustiveSpliceTestWithArgs("exhaustive splice w/2 optional args 1",a); +exhaustiveSpliceTestWithArgs("exhaustive splice w/2 optional args 2",b); + +test(); + + +function mySplice(testArray, splicedArray, first, len, elements) +{ + var removedArray = []; + var adjustedFirst = first; + var adjustedLen = len; + + if (adjustedFirst < 0) adjustedFirst = testArray.length + first; + if (adjustedFirst < 0) adjustedFirst = 0; + + if (adjustedLen < 0) adjustedLen = 0; + + for (i = 0; (i < adjustedFirst)&&(i < testArray.length); ++i) + splicedArray.push(testArray[i]); + + if (adjustedFirst < testArray.length) + for (i = adjustedFirst; (i < adjustedFirst + adjustedLen) && (i < testArray.length); ++i) + removedArray.push(testArray[i]); + + for (i = 0; i < elements.length; i++) splicedArray.push(elements[i]); + + for (i = adjustedFirst + adjustedLen; i < testArray.length; i++) + splicedArray.push(testArray[i]); + + return removedArray; +} + +function exhaustiveSpliceTestWithArgs(testname, testArray) +{ + var passed = true; + var errorMessage; + var reason = ""; + for (var first = -(testArray.length+2); first <= 2 + testArray.length; first++) + { + var actualSpliced = []; + var expectedSpliced = []; + var actualRemoved = []; + var expectedRemoved = []; + + for (var len = 0; len < testArray.length + 2; len++) + { + actualSpliced = []; + expectedSpliced = []; + + for (var i = 0; i < testArray.length; ++i) + actualSpliced.push(testArray[i]); + + actualRemoved = actualSpliced.splice(first,len,-97,new String("test arg"),[],9.8); + expectedRemoved = mySplice(testArray,expectedSpliced,first,len,[-97,new String("test arg"),[],9.8]); + + var adjustedFirst = first; + if (adjustedFirst < 0) adjustedFirst = testArray.length + first; + if (adjustedFirst < 0) adjustedFirst = 0; + + + if ( (String(actualSpliced) != String(expectedSpliced)) + ||(String(actualRemoved) != String(expectedRemoved))) + { + if ( (String(actualSpliced) == String(expectedSpliced)) + &&(String(actualRemoved) != String(expectedRemoved)) ) + { + + if ( (expectedRemoved.length == 1) + &&(String(actualRemoved) == String(expectedRemoved[0]))) continue; + if ( expectedRemoved.length == 0 && actualRemoved == void 0 ) continue; + } + + errorMessage = + "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" + + " test: " + "a.splice(" + first + "," + len + ",-97,new String('test arg'),[],9.8)\n" + + " a: " + String(testArray) + "\n" + + " actual spliced: " + String(actualSpliced) + "\n" + + " expected spliced: " + String(expectedSpliced) + "\n" + + " actual removed: " + String(actualRemoved) + "\n" + + " expected removed: " + String(expectedRemoved); + reason = reason + errorMessage; + writeHeaderToLog(errorMessage); + passed = false; + } + } + } + var testcase = new TestCase(SECTION, testname, true, passed); + if (!passed) testcase.reason = reason; + return testcase; +} diff --git a/source/spidermonkey-tests/js1_2/Array/tostring_1.js b/source/spidermonkey-tests/js1_2/Array/tostring_1.js new file mode 100644 index 00000000..55c74956 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/tostring_1.js @@ -0,0 +1,93 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: tostring_1.js + ECMA Section: Array.toString() + Description: + + This checks the ToString value of Array objects under JavaScript 1.2. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "JS1_2"; +var VERSION = "JS1_2"; +startTest(); +var TITLE = "Array.toString()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = new Array(); + +var VERSION = 0; + +if ( version() == 120 ) { + VERSION = "120"; +} else { + VERSION = ""; +} + +new TestCase ( SECTION, + "var a = new Array(); a.toString()", + ( VERSION == "120" ? "[]" : "" ), + a.toString() ); + +a[0] = void 0; + +new TestCase ( SECTION, + "a[0] = void 0; a.toString()", + ( VERSION == "120" ? "[, ]" : "" ), + a.toString() ); + + +new TestCase( SECTION, + "a.length", + 1, + a.length ); + +a[1] = void 0; + +new TestCase( SECTION, + "a[1] = void 0; a.toString()", + ( VERSION == "120" ? "[, , ]" : "," ), + a.toString() ); + +a[1] = "hi"; + +new TestCase( SECTION, + "a[1] = \"hi\"; a.toString()", + ( VERSION == "120" ? "[, \"hi\"]" : ",hi" ), + a.toString() ); + +a[2] = void 0; + +new TestCase( SECTION, + "a[2] = void 0; a.toString()", + ( VERSION == "120" ?"[, \"hi\", , ]":",hi,"), + a.toString() ); + +var b = new Array(1000); +var bstring = ""; +for ( blen=0; blen<999; blen++) { + bstring += ","; +} + + +new TestCase ( SECTION, + "var b = new Array(1000); b.toString()", + ( VERSION == "120" ? "[1000]" : bstring ), + b.toString() ); + + +new TestCase( SECTION, + "b.length", + ( VERSION == "120" ? 1 : 1000 ), + b.length ); + +test(); diff --git a/source/spidermonkey-tests/js1_2/Array/tostring_2.js b/source/spidermonkey-tests/js1_2/Array/tostring_2.js new file mode 100644 index 00000000..db963992 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Array/tostring_2.js @@ -0,0 +1,49 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: tostring_2.js + Reference: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=114564 + Description: toString in version 120 + + + Author: christine@netscape.com + Date: 15 June 1998 +*/ + +var SECTION = "Array/tostring_2.js"; +var VERSION = "JS_12"; +startTest(); +var TITLE = "Array.toString"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = []; + + +if ( version() == 120 ) { + VERSION = "120"; +} else { + VERSION = ""; +} + +new TestCase ( SECTION, + "a.toString()", + ( VERSION == "120" ? "[]" : "" ), + a.toString() ); + +new TestCase ( SECTION, + "String( a )", + ( VERSION == "120" ? "[]" : "" ), + String( a ) ); + +new TestCase ( SECTION, + "a +''", + ( VERSION == "120" ? "[]" : "" ), + a+"" ); + +test(); diff --git a/source/spidermonkey-tests/js1_2/Objects/browser.js b/source/spidermonkey-tests/js1_2/Objects/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/Objects/shell.js b/source/spidermonkey-tests/js1_2/Objects/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/Objects/toString-001.js b/source/spidermonkey-tests/js1_2/Objects/toString-001.js new file mode 100644 index 00000000..085cba0b --- /dev/null +++ b/source/spidermonkey-tests/js1_2/Objects/toString-001.js @@ -0,0 +1,87 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: toString_1.js + ECMA Section: Object.toString() + Description: + + This checks the ToString value of Object objects under JavaScript 1.2. + + In JavaScript 1.2, Object.toString() + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "JS1_2"; +var VERSION = "JS1_2"; +startTest(); +var TITLE = "Object.toString()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var o = new Object(); + +new TestCase( SECTION, + "var o = new Object(); o.toString()", + "{}", + o.toString() ); + +o = {}; + +new TestCase( SECTION, + "o = {}; o.toString()", + "{}", + o.toString() ); + +o = { name:"object", length:0, value:"hello" } + + new TestCase( SECTION, + "o = { name:\"object\", length:0, value:\"hello\" }; o.toString()", + true, + checkObjectToString(o.toString(), ['name:"object"', 'length:0', + 'value:"hello"'])); + +o = { name:"object", length:0, value:"hello", + toString:new Function( "return this.value+''" ) } + + new TestCase( SECTION, + "o = { name:\"object\", length:0, value:\"hello\", "+ + "toString:new Function( \"return this.value+''\" ) }; o.toString()", + "hello", + o.toString() ); + + + +test(); + +/** + * checkObjectToString + * + * In JS1.2, Object.prototype.toString returns a representation of the + * object's properties as a string. However, the order of the properties + * in the resulting string is not specified. This function compares the + * resulting string with an array of strings to make sure that the + * resulting string is some permutation of the strings in the array. + */ +function checkObjectToString(s, a) { + var m = /^\{(.*)\}$/(s); + if (!m) + return false; // should begin and end with curly brackets + var a2 = m[1].split(", "); + if (a.length != a2.length) + return false; // should be same length + a.sort(); + a2.sort(); + for (var i=0; i < a.length; i++) { + if (a[i] != a2[i]) + return false; // should have identical elements + } + return true; +} + diff --git a/source/spidermonkey-tests/js1_2/README b/source/spidermonkey-tests/js1_2/README new file mode 100644 index 00000000..550890ec --- /dev/null +++ b/source/spidermonkey-tests/js1_2/README @@ -0,0 +1 @@ +JavaScript 1.2 diff --git a/source/spidermonkey-tests/js1_2/String/browser.js b/source/spidermonkey-tests/js1_2/String/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/String/charCodeAt.js b/source/spidermonkey-tests/js1_2/String/charCodeAt.js new file mode 100644 index 00000000..b746a06f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/String/charCodeAt.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: charCodeAt.js + Description: 'This tests new String object method: charCodeAt' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String:charCodeAt'; + +writeHeaderToLog('Executing script: charCodeAt.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var aString = new String("tEs5"); + +new TestCase( SECTION, "aString.charCodeAt(-2)", NaN, aString.charCodeAt(-2)); +new TestCase( SECTION, "aString.charCodeAt(-1)", NaN, aString.charCodeAt(-1)); +new TestCase( SECTION, "aString.charCodeAt( 0)", 116, aString.charCodeAt( 0)); +new TestCase( SECTION, "aString.charCodeAt( 1)", 69, aString.charCodeAt( 1)); +new TestCase( SECTION, "aString.charCodeAt( 2)", 115, aString.charCodeAt( 2)); +new TestCase( SECTION, "aString.charCodeAt( 3)", 53, aString.charCodeAt( 3)); +new TestCase( SECTION, "aString.charCodeAt( 4)", NaN, aString.charCodeAt( 4)); +new TestCase( SECTION, "aString.charCodeAt( 5)", NaN, aString.charCodeAt( 5)); +new TestCase( SECTION, "aString.charCodeAt( Infinity)", NaN, aString.charCodeAt( Infinity)); +new TestCase( SECTION, "aString.charCodeAt(-Infinity)", NaN, aString.charCodeAt(-Infinity)); +//new TestCase( SECTION, "aString.charCodeAt( )", 116, aString.charCodeAt( )); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/String/concat.js b/source/spidermonkey-tests/js1_2/String/concat.js new file mode 100644 index 00000000..a0828cf1 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/String/concat.js @@ -0,0 +1,50 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: concat.js + Description: 'This tests the new String object method: concat' + + Author: NickLerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String:concat'; + +writeHeaderToLog('Executing script: concat.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var aString = new String("test string"); +var bString = new String(" another "); + +new TestCase( SECTION, "aString.concat(' more')", "test string more", aString.concat(' more').toString()); +new TestCase( SECTION, "aString.concat(bString)", "test string another ", aString.concat(bString).toString()); +new TestCase( SECTION, "aString ", "test string", aString.toString()); +new TestCase( SECTION, "bString ", " another ", bString.toString()); +new TestCase( SECTION, "aString.concat(345) ", "test string345", aString.concat(345).toString()); +new TestCase( SECTION, "aString.concat(true) ", "test stringtrue", aString.concat(true).toString()); +new TestCase( SECTION, "aString.concat(null) ", "test stringnull", aString.concat(null).toString()); +new TestCase( SECTION, "aString.concat([]) ", "test string[]", aString.concat([]).toString()); +new TestCase( SECTION, "aString.concat([1,2,3])", "test string[1, 2, 3]", aString.concat([1,2,3]).toString()); + +new TestCase( SECTION, "'abcde'.concat(' more')", "abcde more", 'abcde'.concat(' more').toString()); +new TestCase( SECTION, "'abcde'.concat(bString)", "abcde another ", 'abcde'.concat(bString).toString()); +new TestCase( SECTION, "'abcde' ", "abcde", 'abcde'); +new TestCase( SECTION, "'abcde'.concat(345) ", "abcde345", 'abcde'.concat(345).toString()); +new TestCase( SECTION, "'abcde'.concat(true) ", "abcdetrue", 'abcde'.concat(true).toString()); +new TestCase( SECTION, "'abcde'.concat(null) ", "abcdenull", 'abcde'.concat(null).toString()); +new TestCase( SECTION, "'abcde'.concat([]) ", "abcde[]", 'abcde'.concat([]).toString()); +new TestCase( SECTION, "'abcde'.concat([1,2,3])", "abcde[1, 2, 3]", 'abcde'.concat([1,2,3]).toString()); + +//what should this do: +new TestCase( SECTION, "'abcde'.concat() ", "abcde", 'abcde'.concat().toString()); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/String/match.js b/source/spidermonkey-tests/js1_2/String/match.js new file mode 100644 index 00000000..ef4df16f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/String/match.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: match.js + Description: 'This tests the new String object method: match' + + Author: NickLerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String:match'; + +writeHeaderToLog('Executing script: match.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var aString = new String("this is a test string"); + +new TestCase( SECTION, "aString.match(/is.*test/) ", String(["is is a test"]), String(aString.match(/is.*test/))); +new TestCase( SECTION, "aString.match(/s.*s/) ", String(["s is a test s"]), String(aString.match(/s.*s/))); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/String/shell.js b/source/spidermonkey-tests/js1_2/String/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/String/slice.js b/source/spidermonkey-tests/js1_2/String/slice.js new file mode 100644 index 00000000..e939434a --- /dev/null +++ b/source/spidermonkey-tests/js1_2/String/slice.js @@ -0,0 +1,90 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: slice.js + Description: 'This tests the String object method: slice' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String.slice'; + +writeHeaderToLog('Executing script: slice.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var a = new String("abcdefghijklmnopqrstuvwxyz1234567890"); +var b = new String("this is a test string"); + +exhaustiveStringSliceTest("exhaustive String.slice test 1", a); +exhaustiveStringSliceTest("exhaustive String.slice test 2", b); + +test(); + + +function myStringSlice(a, from, to) +{ + var from2 = from; + var to2 = to; + var returnString = new String(""); + var i; + + if (from2 < 0) from2 = a.length + from; + if (to2 < 0) to2 = a.length + to; + + if ((to2 > from2)&&(to2 > 0)&&(from2 < a.length)) + { + if (from2 < 0) from2 = 0; + if (to2 > a.length) to2 = a.length; + + for (i = from2; i < to2; ++i) returnString += a.charAt(i); + } + return returnString; +} + +// This function tests the slice command on a String +// passed in. The arguments passed into slice range in +// value from -5 to the length of the array + 4. Every +// combination of the two arguments is tested. The expected +// result of the slice(...) method is calculated and +// compared to the actual result from the slice(...) method. +// If the Strings are not similar false is returned. +function exhaustiveStringSliceTest(testname, a) +{ + var x = 0; + var y = 0; + var errorMessage; + var reason = ""; + var passed = true; + + for (x = -(2 + a.length); x <= (2 + a.length); x++) + for (y = (2 + a.length); y >= -(2 + a.length); y--) + { + var b = a.slice(x,y); + var c = myStringSlice(a,x,y); + + if (String(b) != String(c)) + { + errorMessage = + "ERROR: 'TEST FAILED' ERROR: 'TEST FAILED' ERROR: 'TEST FAILED'\n" + + " test: " + "a.slice(" + x + "," + y + ")\n" + + " a: " + String(a) + "\n" + + " actual result: " + String(b) + "\n" + + " expected result: " + String(c) + "\n"; + writeHeaderToLog(errorMessage); + reason = reason + errorMessage; + passed = false; + } + } + var testCase = new TestCase(SECTION, testname, true, passed); + if (passed == false) + testCase.reason = reason; + return testCase; +} diff --git a/source/spidermonkey-tests/js1_2/browser.js b/source/spidermonkey-tests/js1_2/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/function/Function_object.js b/source/spidermonkey-tests/js1_2/function/Function_object.js new file mode 100644 index 00000000..a6af708e --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/Function_object.js @@ -0,0 +1,54 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: Function_object.js + Description: 'Testing Function objects' + + Author: Nick Lerissa + Date: April 17, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'functions: Function_object'; + +writeHeaderToLog('Executing script: Function_object.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +function a_test_function(a,b,c) +{ + return a + b + c; +} + +f = a_test_function; + + +new TestCase( SECTION, "f.name", + 'a_test_function', f.name); + +new TestCase( SECTION, "f.length", + 3, f.length); + +new TestCase( SECTION, "f.arity", + 3, f.arity); + +new TestCase( SECTION, "f(2,3,4)", + 9, f(2,3,4)); + +var fnName = (version() == 120) ? '' : 'anonymous'; + +new TestCase( SECTION, "(new Function()).name", + fnName, (new Function()).name); + +new TestCase( SECTION, "(new Function()).toString()", + 'function ' + fnName + '() {\n}', (new Function()).toString()); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/Number.js b/source/spidermonkey-tests/js1_2/function/Number.js new file mode 100644 index 00000000..fa5288ac --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/Number.js @@ -0,0 +1,52 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: Number.js + Description: 'This tests the function Number(Object)' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'functions: Number'; +var BUGNUMBER="123435"; + +startTest(); +writeHeaderToLog('Executing script: Number.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +date = new Date(2200); + +new TestCase( SECTION, "Number(new Date(2200)) ", + 2200, (Number(date))); +new TestCase( SECTION, "Number(true) ", + 1, (Number(true))); +new TestCase( SECTION, "Number(false) ", + 0, (Number(false))); +new TestCase( SECTION, "Number('124') ", + 124, (Number('124'))); +new TestCase( SECTION, "Number('1.23') ", + 1.23, (Number('1.23'))); +new TestCase( SECTION, "Number({p:1}) ", + NaN, (Number({p:1}))); +new TestCase( SECTION, "Number(null) ", + 0, (Number(null))); +new TestCase( SECTION, "Number(-45) ", + -45, (Number(-45))); + +// http://scopus.mcom.com/bugsplat/show_bug.cgi?id=123435 +// under js1.2, Number([1,2,3]) should return 3. + +new TestCase( SECTION, "Number([1,2,3]) ", + 3, (Number([1,2,3]))); + + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/String.js b/source/spidermonkey-tests/js1_2/function/String.js new file mode 100644 index 00000000..6f182d8f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/String.js @@ -0,0 +1,40 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: String.js + Description: 'This tests the function String(Object)' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'functions: String'; + +writeHeaderToLog('Executing script: String.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "String(true) ", + 'true', (String(true))); +new TestCase( SECTION, "String(false) ", + 'false', (String(false))); +new TestCase( SECTION, "String(-124) ", + '-124', (String(-124))); +new TestCase( SECTION, "String(1.23) ", + '1.23', (String(1.23))); +new TestCase( SECTION, "String({p:1}) ", + '{p:1}', (String({p:1}))); +new TestCase( SECTION, "String(null) ", + 'null', (String(null))); +new TestCase( SECTION, "String([1,2,3]) ", + '[1, 2, 3]', (String([1,2,3]))); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/browser.js b/source/spidermonkey-tests/js1_2/function/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/function/definition-1.js b/source/spidermonkey-tests/js1_2/function/definition-1.js new file mode 100644 index 00000000..bffd7590 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/definition-1.js @@ -0,0 +1,43 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: definition-1.js + Reference: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=111284 + Description: Regression test for declaring functions. + + Author: christine@netscape.com + Date: 15 June 1998 +*/ + +var SECTION = "function/definition-1.js"; +var VERSION = "JS_12"; +startTest(); +var TITLE = "Regression test for 111284"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +f1 = function() { return "passed!" } + + function f2() { f3 = function() { return "passed!" }; return f3(); } + +new TestCase( SECTION, + 'f1 = function() { return "passed!" }; f1()', + "passed!", + f1() ); + +new TestCase( SECTION, + 'function f2() { f3 = function { return "passed!" }; return f3() }; f2()', + "passed!", + f2() ); + +new TestCase( SECTION, + 'f3()', + "passed!", + f3() ); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/function-001-n.js b/source/spidermonkey-tests/js1_2/function/function-001-n.js new file mode 100644 index 00000000..fe547aa6 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/function-001-n.js @@ -0,0 +1,44 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: boolean-001.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232 + * + * eval("function f(){}function g(){}") at top level is an error for JS1.2 + * and above (missing ; between named function expressions), but declares f + * and g as functions below 1.2. + * + * Fails to produce error regardless of version: + * js> version(100) + * 120 + * js> eval("function f(){}function g(){}") + * js> version(120); + * 100 + * js> eval("function f(){}function g(){}") + * js> + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "function-001.js"; +var VERSION = "JS1_1"; +var TITLE = "functions not separated by semicolons are errors in version 120 and higher"; +var BUGNUMBER="99232"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( + SECTION, + "eval(\"function f(){}function g(){}\")", + "error", + eval("function f(){}function g(){}") ); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/length.js b/source/spidermonkey-tests/js1_2/function/length.js new file mode 100644 index 00000000..f679aa14 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/length.js @@ -0,0 +1,63 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: 15.3.5.1.js + ECMA Section: Function.length + Description: + + The value of the length property is usually an integer that indicates the + "typical" number of arguments expected by the function. However, the + language permits the function to be invoked with some other number of + arguments. The behavior of a function when invoked on a number of arguments + other than the number specified by its length property depends on the function. + + This checks the pre-ecma behavior Function.length. + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104204 + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "function/length.js"; +var VERSION = "ECMA_1"; +var TITLE = "Function.length"; +var BUGNUMBER="104204"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var f = new Function( "a","b", "c", "return f.length"); + +if ( version() <= 120 ) { + + new TestCase( SECTION, + 'var f = new Function( "a","b", "c", "return f.length"); f()', + 0, + f() ); + + new TestCase( SECTION, + 'var f = new Function( "a","b", "c", "return f.length"); f(1,2,3,4,5)', + 5, + f(1,2,3,4,5) ); +} else { + + new TestCase( SECTION, + 'var f = new Function( "a","b", "c", "return f.length"); f()', + 3, + f() ); + + new TestCase( SECTION, + 'var f = new Function( "a","b", "c", "return f.length"); f(1,2,3,4,5)', + 3, + f(1,2,3,4,5) ); + + +} +test(); diff --git a/source/spidermonkey-tests/js1_2/function/nesting-1.js b/source/spidermonkey-tests/js1_2/function/nesting-1.js new file mode 100644 index 00000000..334f1521 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/nesting-1.js @@ -0,0 +1,31 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: nesting-1.js + Reference: http://scopus.mcom.com/bugsplat/show_bug.cgi?id=122040 + Description: Regression test for a nested function + + Author: christine@netscape.com + Date: 15 June 1998 +*/ + +var SECTION = "function/nesting-1.js"; +var VERSION = "JS_12"; +startTest(); +var TITLE = "Regression test for 122040"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +function f(a) {function g(b) {return a+b;}; return g;}; f(7); + +new TestCase( SECTION, + 'function f(a) {function g(b) {return a+b;}; return g;}; typeof f(7)', + "function", + typeof f(7) ); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/nesting.js b/source/spidermonkey-tests/js1_2/function/nesting.js new file mode 100644 index 00000000..1e1f18dc --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/nesting.js @@ -0,0 +1,50 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: nesting.js + Description: 'This tests the nesting of functions' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'functions: nesting'; + +writeHeaderToLog('Executing script: nesting.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +function outer_func(x) +{ + var y = "outer"; + + new TestCase( SECTION, "outer:x ", + 1111, x); + new TestCase( SECTION, "outer:y ", + 'outer', y); + function inner_func(x) + { + var y = "inner"; + new TestCase( SECTION, "inner:x ", + 2222, x); + new TestCase( SECTION, "inner:y ", + 'inner', y); + }; + + inner_func(2222); + new TestCase( SECTION, "outer:x ", + 1111, x); + new TestCase( SECTION, "outer:y ", + 'outer', y); +} + +outer_func(1111); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/regexparg-1.js b/source/spidermonkey-tests/js1_2/function/regexparg-1.js new file mode 100644 index 00000000..16c25bf9 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/regexparg-1.js @@ -0,0 +1,71 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: regexparg-1.js + Description: + + Regression test for + http://scopus/bugsplat/show_bug.cgi?id=122787 + Passing a regular expression as the first constructor argument fails + + Author: christine@netscape.com + Date: 15 June 1998 +*/ + +var SECTION = "JS_1.2"; +var VERSION = "JS_1.2"; +startTest(); +var TITLE = "The variable statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +print("Note: Bug 61911 changed the behavior of typeof regexp in Gecko 1.9."); +print("Prior to Gecko 1.9, typeof regexp returned 'function'."); +print("However in Gecko 1.9 and later, typeof regexp will return 'object'."); + +function f(x) {return x;} + +x = f(/abc/); + +new TestCase( SECTION, + "function f(x) {return x;}; f()", + void 0, + f() ); + +new TestCase( SECTION, + "f(\"hi\")", + "hi", + f("hi") ); + +new TestCase( SECTION, + "new f(/abc/) +''", + "/abc/", + new f(/abc/) +"" ); + +new TestCase( SECTION, + "f(/abc/)+'')", + "/abc/", + f(/abc/) +''); + +new TestCase( SECTION, + "typeof f(/abc/)", + "object", + typeof f(/abc/) ); + +new TestCase( SECTION, + "typeof new f(/abc/)", + "object", + typeof new f(/abc/) ); + +new TestCase( SECTION, + "x = new f(/abc/); x.exec(\"hi\")", + null, + x.exec("hi") ); + + +// js> x() +test(); diff --git a/source/spidermonkey-tests/js1_2/function/regexparg-2-n.js b/source/spidermonkey-tests/js1_2/function/regexparg-2-n.js new file mode 100644 index 00000000..f0f862db --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/regexparg-2-n.js @@ -0,0 +1,40 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: regexparg-1.js + Description: + + Regression test for + http://scopus/bugsplat/show_bug.cgi?id=122787 + Passing a regular expression as the first constructor argument fails + + Author: christine@netscape.com + Date: 15 June 1998 +*/ + +var SECTION = "JS_1.2"; +var VERSION = "JS_1.2"; +startTest(); +var TITLE = "The variable statement"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +function f(x) {return x;} + +x = f(/abc/); + +DESCRIPTION = "function f(x) {return x;}; x = f(/abc/); x()"; +EXPECTED = "error"; + +new TestCase( SECTION, + "function f(x) {return x;}; x = f(/abc/); x()", + "error", + x() ); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/function/shell.js b/source/spidermonkey-tests/js1_2/function/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/function/tostring-1.js b/source/spidermonkey-tests/js1_2/function/tostring-1.js new file mode 100644 index 00000000..2f883410 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/tostring-1.js @@ -0,0 +1,112 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: tostring-1.js + Section: Function.toString + Description: + + Since the behavior of Function.toString() is implementation-dependent, + toString tests for function are not in the ECMA suite. + + Currently, an attempt to parse the toString output for some functions + and verify that the result is something reasonable. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "tostring-1"; +var VERSION = "JS1_2"; +startTest(); +var TITLE = "Function.toString()"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +var tab = " "; + +t1 = new TestFunction( "stub", "value", tab + "return value;" ); + +t2 = new TestFunction( "ToString", "object", tab+"return object + \"\";" ); + +t3 = new TestFunction( "Add", "a, b, c, d, e", tab +"var s = a + b + c + d + e;\n" + + tab + "return s;" ); + +t4 = new TestFunction( "noop", "value" ); + +t5 = new TestFunction( "anonymous", "", tab+"return \"hello!\";" ); + +var f = new Function( "return \"hello!\""); + +new TestCase( SECTION, + "stub.toString()", + t1.valueOf(), + stub.toString() ); + +new TestCase( SECTION, + "ToString.toString()", + t2.valueOf(), + ToString.toString() ); + +new TestCase( SECTION, + "Add.toString()", + t3.valueOf(), + Add.toString() ); + +new TestCase( SECTION, + "noop.toString()", + t4.toString(), + noop.toString() ); + +new TestCase( SECTION, + "f.toString()", + t5.toString(), + f.toString() ); +test(); + +function noop( value ) { +} +function Add( a, b, c, d, e ) { + var s = a + b + c + d + e; + return s; +} +function stub( value ) { + return value; +} +function ToString( object ) { + return object + ""; +} + +function ToBoolean( value ) { + if ( value == 0 || value == NaN || value == false ) { + return false; + } else { + return true; + } +} + +function TestFunction( name, args, body ) { + if ( name == "anonymous" && version() == 120 ) { + name = ""; + } + + this.name = name; + this.arguments = args.toString(); + this.body = body; + + /* the format of Function.toString() in JavaScript 1.2 is: + function name ( arguments ) { + body + } + */ + this.value = "function " + (name ? name : "" )+ + "("+args+") {\n"+ (( body ) ? body +"\n" : "") + "}"; + + this.toString = new Function( "return this.value" ); + this.valueOf = new Function( "return this.value" ); + return this; +} diff --git a/source/spidermonkey-tests/js1_2/function/tostring-2.js b/source/spidermonkey-tests/js1_2/function/tostring-2.js new file mode 100644 index 00000000..feb22d70 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/function/tostring-2.js @@ -0,0 +1,155 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: tostring-1.js + Section: Function.toString + Description: + + Since the behavior of Function.toString() is implementation-dependent, + toString tests for function are not in the ECMA suite. + + Currently, an attempt to parse the toString output for some functions + and verify that the result is something reasonable. + + This verifies + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99212 + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "tostring-2"; +var VERSION = "JS1_2"; +var TITLE = "Function.toString()"; +var BUGNUMBER="123444"; +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var tab = " "; + + +var equals = new TestFunction( "Equals", "a, b", tab+ "return a == b;" ); +function Equals (a, b) { + return a == b; +} + +var reallyequals = new TestFunction( "ReallyEquals", "a, b", + ( version() <= 120 ) ? tab +"return a == b;" : tab +"return a === b;" ); +function ReallyEquals( a, b ) { + return a === b; +} + +var doesntequal = new TestFunction( "DoesntEqual", "a, b", tab + "return a != b;" ); +function DoesntEqual( a, b ) { + return a != b; +} + +var reallydoesntequal = new TestFunction( "ReallyDoesntEqual", "a, b", + ( version() <= 120 ) ? tab +"return a != b;" : tab +"return a !== b;" ); +function ReallyDoesntEqual( a, b ) { + return a !== b; +} + +var testor = new TestFunction( "TestOr", "a", tab+"if (a == null || a == void 0) {\n"+ + tab +tab+"return 0;\n"+tab+"} else {\n"+tab+tab+"return a;\n"+tab+"}" ); +function TestOr( a ) { + if ( a == null || a == void 0 ) + return 0; + else + return a; +} + +var testand = new TestFunction( "TestAnd", "a", tab+"if (a != null && a != void 0) {\n"+ + tab+tab+"return a;\n" + tab+ "} else {\n"+tab+tab+"return 0;\n"+tab+"}" ); +function TestAnd( a ) { + if ( a != null && a != void 0 ) + return a; + else + return 0; +} + +var or = new TestFunction( "Or", "a, b", tab + "return a | b;" ); +function Or( a, b ) { + return a | b; +} + +var and = new TestFunction( "And", "a, b", tab + "return a & b;" ); +function And( a, b ) { + return a & b; +} + +var xor = new TestFunction( "XOr", "a, b", tab + "return a ^ b;" ); +function XOr( a, b ) { + return a ^ b; +} + +new TestCase( SECTION, + "Equals.toString()", + equals.valueOf(), + Equals.toString() ); + +new TestCase( SECTION, + "ReallyEquals.toString()", + reallyequals.valueOf(), + ReallyEquals.toString() ); + +new TestCase( SECTION, + "DoesntEqual.toString()", + doesntequal.valueOf(), + DoesntEqual.toString() ); + +new TestCase( SECTION, + "ReallyDoesntEqual.toString()", + reallydoesntequal.valueOf(), + ReallyDoesntEqual.toString() ); + +new TestCase( SECTION, + "TestOr.toString()", + testor.valueOf(), + TestOr.toString() ); + +new TestCase( SECTION, + "TestAnd.toString()", + testand.valueOf(), + TestAnd.toString() ); + +new TestCase( SECTION, + "Or.toString()", + or.valueOf(), + Or.toString() ); + +new TestCase( SECTION, + "And.toString()", + and.valueOf(), + And.toString() ); + +new TestCase( SECTION, + "XOr.toString()", + xor.valueOf(), + XOr.toString() ); + +test(); + +function TestFunction( name, args, body ) { + this.name = name; + this.arguments = args.toString(); + this.body = body; + + /* the format of Function.toString() in JavaScript 1.2 is: + function name ( arguments ) { + body + } + */ + this.value = "function " + (name ? name : "anonymous" )+ + "("+args+") {\n"+ (( body ) ? body +"\n" : "") + "}"; + + this.toString = new Function( "return this.value" ); + this.valueOf = new Function( "return this.value" ); + return this; +} diff --git a/source/spidermonkey-tests/js1_2/jsref.js b/source/spidermonkey-tests/js1_2/jsref.js new file mode 100644 index 00000000..8cc21e5f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/jsref.js @@ -0,0 +1,195 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +var completed = false; +var testcases; +var tc = 0; + +SECTION = ""; +VERSION = ""; +BUGNUMBER = ""; +EXCLUDE = ""; + +/* + * constant strings + */ +var GLOBAL = "[object global]"; +var PASSED = " PASSED!" +var FAILED = " FAILED! expected: "; + +var DEBUG = false; + +version("120"); +/* + * change this for date tests if you're not in PST + */ + +TZ_DIFF = -8; +/* wrapper for test cas constructor that doesn't require the SECTION + * argument. + */ + +function AddTestCase( description, expect, actual ) { + testcases[tc++] = new TestCase( SECTION, description, expect, actual ); +} +function TestCase( n, d, e, a ) { + this.name = n; + this.description = d; + this.expect = e; + this.actual = a; + this.passed = true; + this.reason = ""; + this.bugnumber = BUGNUMBER; + + this.passed = getTestCaseResult( this.expect, this.actual ); +} +function startTest() { + version(120); + + // for ecma version 2.0, we will leave the javascript version to + // the default ( for now ). + // print out bugnumber + + if ( BUGNUMBER ) { + print ("BUGNUMBER: " + BUGNUMBER ); + } + + testcases = new Array(); + tc = 0; + +} +function test() { + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ + testcases[tc].actual ); + + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); +} +function getTestCaseResult( expect, actual ) { + // because ( NaN == NaN ) always returns false, need to do + // a special compare to see if we got the right result. + if ( actual != actual ) { + if ( typeof actual == "object" ) { + actual = "NaN object"; + } else { + actual = "NaN number"; + } + } + if ( expect != expect ) { + if ( typeof expect == "object" ) { + expect = "NaN object"; + } else { + expect = "NaN number"; + } + } + + var passed = ( expect == actual ) ? true : false; + + // if both objects are numbers, give a little leeway for rounding. + if ( !passed + && typeof(actual) == "number" + && typeof(expect) == "number" + ) { + if ( Math.abs(actual-expect) < 0.0000001 ) { + passed = true; + } + } + + // verify type is the same + if ( typeof(expect) != typeof(actual) ) { + passed = false; + } + + return passed; +} +/* + * Begin printing functions. These functions use the shell's + * print function. When running tests in the browser, these + * functions, override these functions with functions that use + * document.write. + */ + +function writeTestCaseResult( expect, actual, string ) { + var passed = getTestCaseResult( expect, actual ); + writeFormattedResult( expect, actual, string, passed ); + return passed; +} +function writeFormattedResult( expect, actual, string, passed ) { + var s = string ; + s += ( passed ) ? PASSED : FAILED + expect; + print( s); + return passed; +} + +function writeHeaderToLog( string ) { + print( string ); +} +/* end of print functions */ + + +function stopTest() { + var sizeTag = "<#TEST CASES SIZE>"; + var doneTag = "<#TEST CASES DONE>"; + var beginTag = "<#TEST CASE "; + var endTag = ">"; + + print(sizeTag); + print(testcases.length); + for (tc = 0; tc < testcases.length; tc++) + { + print(beginTag + 'PASSED' + endTag); + print(testcases[tc].passed); + print(beginTag + 'NAME' + endTag); + print(testcases[tc].name); + print(beginTag + 'EXPECTED' + endTag); + print(testcases[tc].expect); + print(beginTag + 'ACTUAL' + endTag); + print(testcases[tc].actual); + print(beginTag + 'DESCRIPTION' + endTag); + print(testcases[tc].description); + print(beginTag + 'REASON' + endTag); + print(( testcases[tc].passed ) ? "" : "wrong value "); + print(beginTag + 'BUGNUMBER' + endTag); + print( BUGNUMBER ); + } + print(doneTag); + gc(); +} + +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} +function err( msg, page, line ) { + testcases[tc].actual = "error"; + testcases[tc].reason = msg; + writeTestCaseResult( testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ testcases[tc].actual + + ": " + testcases[tc].reason ); + stopTest(); + return true; +} +function Enumerate ( o ) { + var p; + for ( p in o ) { + print( p +": " + o[p] ); + } +} +function GetContext() { + return Packages.com.netscape.javascript.Context.getCurrentContext(); +} +function OptLevel( i ) { + i = Number(i); + var cx = GetContext(); + cx.setOptimizationLevel(i); +} diff --git a/source/spidermonkey-tests/js1_2/operator/browser.js b/source/spidermonkey-tests/js1_2/operator/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/operator/equality.js b/source/spidermonkey-tests/js1_2/operator/equality.js new file mode 100644 index 00000000..facc0113 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/operator/equality.js @@ -0,0 +1,39 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: equality.js + Description: 'This tests the operator ==' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'operator "=="'; + +writeHeaderToLog('Executing script: equality.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// the following two tests are incorrect +//new TestCase( SECTION, "(new String('') == new String('')) ", +// true, (new String('') == new String(''))); + +//new TestCase( SECTION, "(new Boolean(true) == new Boolean(true)) ", +// true, (new Boolean(true) == new Boolean(true))); + +new TestCase( SECTION, "(new String('x') == 'x') ", + false, (new String('x') == 'x')); + +new TestCase( SECTION, "('x' == new String('x')) ", + false, ('x' == new String('x'))); + + +test(); + diff --git a/source/spidermonkey-tests/js1_2/operator/shell.js b/source/spidermonkey-tests/js1_2/operator/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/operator/strictEquality.js b/source/spidermonkey-tests/js1_2/operator/strictEquality.js new file mode 100644 index 00000000..1bbbe046 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/operator/strictEquality.js @@ -0,0 +1,59 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: strictEquality.js + Description: 'This tests the operator ===' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'operator "==="'; + +writeHeaderToLog('Executing script: strictEquality.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( SECTION, "('8' === 8) ", + false, ('8' === 8)); + +new TestCase( SECTION, "(8 === 8) ", + true, (8 === 8)); + +new TestCase( SECTION, "(8 === true) ", + false, (8 === true)); + +new TestCase( SECTION, "(new String('') === new String('')) ", + false, (new String('') === new String(''))); + +new TestCase( SECTION, "(new Boolean(true) === new Boolean(true))", + false, (new Boolean(true) === new Boolean(true))); + +var anObject = { one:1 , two:2 }; + +new TestCase( SECTION, "(anObject === anObject) ", + true, (anObject === anObject)); + +new TestCase( SECTION, "(anObject === { one:1 , two:2 }) ", + false, (anObject === { one:1 , two:2 })); + +new TestCase( SECTION, "({ one:1 , two:2 } === anObject) ", + false, ({ one:1 , two:2 } === anObject)); + +new TestCase( SECTION, "(null === null) ", + true, (null === null)); + +new TestCase( SECTION, "(null === 0) ", + false, (null === 0)); + +new TestCase( SECTION, "(true === !false) ", + true, (true === !false)); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_dollar_number.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_dollar_number.js new file mode 100644 index 00000000..5bc1c8e5 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_dollar_number.js @@ -0,0 +1,77 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_dollar_number.js + Description: 'Tests RegExps $1, ..., $9 properties' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "What\'s new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'RegExp: $1, ..., $9'; +var BUGNUMBER="123802"; + +startTest(); +writeHeaderToLog('Executing script: RegExp_dollar_number.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$1 +'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); +new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$1", + 'abcdefghi', RegExp.$1); + +// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$2 +new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$2", + 'bcdefgh', RegExp.$2); + +// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$3 +new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$3", + 'cdefg', RegExp.$3); + +// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$4 +new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$4", + 'def', RegExp.$4); + +// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$5 +new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$5", + 'e', RegExp.$5); + +// 'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$6 +new TestCase ( SECTION, "'abcdefghi'.match(/(a(b(c(d(e)f)g)h)i)/); RegExp.$6", + '', RegExp.$6); + +var a_to_z = 'abcdefghijklmnopqrstuvwxyz'; +var regexp1 = /(a)b(c)d(e)f(g)h(i)j(k)l(m)n(o)p(q)r(s)t(u)v(w)x(y)z/ + // 'abcdefghijklmnopqrstuvwxyz'.match(/(a)b(c)d(e)f(g)h(i)j(k)l(m)n(o)p(q)r(s)t(u)v(w)x(y)z/); RegExp.$1 + a_to_z.match(regexp1); + +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$1", + 'a', RegExp.$1); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$2", + 'c', RegExp.$2); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$3", + 'e', RegExp.$3); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$4", + 'g', RegExp.$4); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$5", + 'i', RegExp.$5); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$6", + 'k', RegExp.$6); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$7", + 'm', RegExp.$7); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$8", + 'o', RegExp.$8); +new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$9", + 'q', RegExp.$9); +/* + new TestCase ( SECTION, "'" + a_to_z + "'.match((a)b(c)....(y)z); RegExp.$10", + 's', RegExp.$10); +*/ +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_input.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_input.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_input_as_array.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_input_as_array.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_lastIndex.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastIndex.js new file mode 100644 index 00000000..a8ace254 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastIndex.js @@ -0,0 +1,52 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_lastIndex.js + Description: 'Tests RegExps lastIndex property' + + Author: Nick Lerissa + Date: March 17, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'RegExp: lastIndex'; +var BUGNUMBER="123802"; + +startTest(); +writeHeaderToLog('Executing script: RegExp_lastIndex.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// re=/x./g; re.lastIndex=4; re.exec('xyabcdxa'); +re=/x./g; +re.lastIndex=4; +new TestCase ( SECTION, "re=/x./g; re.lastIndex=4; re.exec('xyabcdxa')", + '["xa"]', String(re.exec('xyabcdxa'))); + +// re.lastIndex +new TestCase ( SECTION, "re.lastIndex", + 8, re.lastIndex); + +// re.exec('xyabcdef'); +new TestCase ( SECTION, "re.exec('xyabcdef')", + null, re.exec('xyabcdef')); + +// re.lastIndex +new TestCase ( SECTION, "re.lastIndex", + 0, re.lastIndex); + +// re.exec('xyabcdef'); +new TestCase ( SECTION, "re.exec('xyabcdef')", + '["xy"]', String(re.exec('xyabcdef'))); + +// re.lastIndex=30; re.exec('123xaxbxc456'); +re.lastIndex=30; +new TestCase ( SECTION, "re.lastIndex=30; re.exec('123xaxbxc456')", + null, re.exec('123xaxbxc456')); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_lastMatch.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastMatch.js new file mode 100644 index 00000000..a525d1cb --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastMatch.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_lastMatch.js + Description: 'Tests RegExps lastMatch property' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: lastMatch'; + +writeHeaderToLog('Executing script: RegExp_lastMatch.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'foo'.match(/foo/); RegExp.lastMatch +'foo'.match(/foo/); +new TestCase ( SECTION, "'foo'.match(/foo/); RegExp.lastMatch", + 'foo', RegExp.lastMatch); + +// 'foo'.match(new RegExp('foo')); RegExp.lastMatch +'foo'.match(new RegExp('foo')); +new TestCase ( SECTION, "'foo'.match(new RegExp('foo')); RegExp.lastMatch", + 'foo', RegExp.lastMatch); + +// 'xxx'.match(/bar/); RegExp.lastMatch +'xxx'.match(/bar/); +new TestCase ( SECTION, "'xxx'.match(/bar/); RegExp.lastMatch", + 'foo', RegExp.lastMatch); + +// 'xxx'.match(/$/); RegExp.lastMatch +'xxx'.match(/$/); +new TestCase ( SECTION, "'xxx'.match(/$/); RegExp.lastMatch", + '', RegExp.lastMatch); + +// 'abcdefg'.match(/^..(cd)[a-z]+/); RegExp.lastMatch +'abcdefg'.match(/^..(cd)[a-z]+/); +new TestCase ( SECTION, "'abcdefg'.match(/^..(cd)[a-z]+/); RegExp.lastMatch", + 'abcdefg', RegExp.lastMatch); + +// 'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); RegExp.lastMatch +'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); +new TestCase ( SECTION, "'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\\1/); RegExp.lastMatch", + 'abcdefgabcdefg', RegExp.lastMatch); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_lastMatch_as_array.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastMatch_as_array.js new file mode 100644 index 00000000..48405ae6 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastMatch_as_array.js @@ -0,0 +1,54 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_lastMatch_as_array.js + Description: 'Tests RegExps $& property (same tests as RegExp_lastMatch.js but using $&)' + + Author: Nick Lerissa + Date: March 13, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: $&'; + +writeHeaderToLog('Executing script: RegExp_lastMatch_as_array.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'foo'.match(/foo/); RegExp['$&'] +'foo'.match(/foo/); +new TestCase ( SECTION, "'foo'.match(/foo/); RegExp['$&']", + 'foo', RegExp['$&']); + +// 'foo'.match(new RegExp('foo')); RegExp['$&'] +'foo'.match(new RegExp('foo')); +new TestCase ( SECTION, "'foo'.match(new RegExp('foo')); RegExp['$&']", + 'foo', RegExp['$&']); + +// 'xxx'.match(/bar/); RegExp['$&'] +'xxx'.match(/bar/); +new TestCase ( SECTION, "'xxx'.match(/bar/); RegExp['$&']", + 'foo', RegExp['$&']); + +// 'xxx'.match(/$/); RegExp['$&'] +'xxx'.match(/$/); +new TestCase ( SECTION, "'xxx'.match(/$/); RegExp['$&']", + '', RegExp['$&']); + +// 'abcdefg'.match(/^..(cd)[a-z]+/); RegExp['$&'] +'abcdefg'.match(/^..(cd)[a-z]+/); +new TestCase ( SECTION, "'abcdefg'.match(/^..(cd)[a-z]+/); RegExp['$&']", + 'abcdefg', RegExp['$&']); + +// 'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); RegExp['$&'] +'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\1/); +new TestCase ( SECTION, "'abcdefgabcdefg'.match(/(a(b(c(d)e)f)g)\\1/); RegExp['$&']", + 'abcdefgabcdefg', RegExp['$&']); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_lastParen.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastParen.js new file mode 100644 index 00000000..81c106ab --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastParen.js @@ -0,0 +1,68 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_lastParen.js + Description: 'Tests RegExps lastParen property' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: lastParen'; + +writeHeaderToLog('Executing script: RegExp_lastParen.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abcd'.match(/(abc)d/); RegExp.lastParen +'abcd'.match(/(abc)d/); +new TestCase ( SECTION, "'abcd'.match(/(abc)d/); RegExp.lastParen", + 'abc', RegExp.lastParen); + +// 'abcd'.match(new RegExp('(abc)d')); RegExp.lastParen +'abcd'.match(new RegExp('(abc)d')); +new TestCase ( SECTION, "'abcd'.match(new RegExp('(abc)d')); RegExp.lastParen", + 'abc', RegExp.lastParen); + +// 'abcd'.match(/(bcd)e/); RegExp.lastParen +'abcd'.match(/(bcd)e/); +new TestCase ( SECTION, "'abcd'.match(/(bcd)e/); RegExp.lastParen", + 'abc', RegExp.lastParen); + +// 'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp.lastParen +'abcdefg'.match(/(a(b(c(d)e)f)g)/); +new TestCase ( SECTION, "'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp.lastParen", + 'd', RegExp.lastParen); + +// 'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp.lastParen +'abcdefg'.match(/(a(b)c)(d(e)f)/); +new TestCase ( SECTION, "'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp.lastParen", + 'e', RegExp.lastParen); + +// 'abcdefg'.match(/(^)abc/); RegExp.lastParen +'abcdefg'.match(/(^)abc/); +new TestCase ( SECTION, "'abcdefg'.match(/(^)abc/); RegExp.lastParen", + '', RegExp.lastParen); + +// 'abcdefg'.match(/(^a)bc/); RegExp.lastParen +'abcdefg'.match(/(^a)bc/); +new TestCase ( SECTION, "'abcdefg'.match(/(^a)bc/); RegExp.lastParen", + 'a', RegExp.lastParen); + +// 'abcdefg'.match(new RegExp('(^a)bc')); RegExp.lastParen +'abcdefg'.match(new RegExp('(^a)bc')); +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(^a)bc')); RegExp.lastParen", + 'a', RegExp.lastParen); + +// 'abcdefg'.match(/bc/); RegExp.lastParen +'abcdefg'.match(/bc/); +new TestCase ( SECTION, "'abcdefg'.match(/bc/); RegExp.lastParen", + '', RegExp.lastParen); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_lastParen_as_array.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastParen_as_array.js new file mode 100644 index 00000000..68bf3502 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_lastParen_as_array.js @@ -0,0 +1,68 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_lastParen_as_array.js + Description: 'Tests RegExps $+ property (same tests as RegExp_lastParen.js but using $+)' + + Author: Nick Lerissa + Date: March 13, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: $+'; + +writeHeaderToLog('Executing script: RegExp_lastParen_as_array.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abcd'.match(/(abc)d/); RegExp['$+'] +'abcd'.match(/(abc)d/); +new TestCase ( SECTION, "'abcd'.match(/(abc)d/); RegExp['$+']", + 'abc', RegExp['$+']); + +// 'abcd'.match(/(bcd)e/); RegExp['$+'] +'abcd'.match(/(bcd)e/); +new TestCase ( SECTION, "'abcd'.match(/(bcd)e/); RegExp['$+']", + 'abc', RegExp['$+']); + +// 'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp['$+'] +'abcdefg'.match(/(a(b(c(d)e)f)g)/); +new TestCase ( SECTION, "'abcdefg'.match(/(a(b(c(d)e)f)g)/); RegExp['$+']", + 'd', RegExp['$+']); + +// 'abcdefg'.match(new RegExp('(a(b(c(d)e)f)g)')); RegExp['$+'] +'abcdefg'.match(new RegExp('(a(b(c(d)e)f)g)')); +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(a(b(c(d)e)f)g)')); RegExp['$+']", + 'd', RegExp['$+']); + +// 'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp['$+'] +'abcdefg'.match(/(a(b)c)(d(e)f)/); +new TestCase ( SECTION, "'abcdefg'.match(/(a(b)c)(d(e)f)/); RegExp['$+']", + 'e', RegExp['$+']); + +// 'abcdefg'.match(/(^)abc/); RegExp['$+'] +'abcdefg'.match(/(^)abc/); +new TestCase ( SECTION, "'abcdefg'.match(/(^)abc/); RegExp['$+']", + '', RegExp['$+']); + +// 'abcdefg'.match(/(^a)bc/); RegExp['$+'] +'abcdefg'.match(/(^a)bc/); +new TestCase ( SECTION, "'abcdefg'.match(/(^a)bc/); RegExp['$+']", + 'a', RegExp['$+']); + +// 'abcdefg'.match(new RegExp('(^a)bc')); RegExp['$+'] +'abcdefg'.match(new RegExp('(^a)bc')); +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(^a)bc')); RegExp['$+']", + 'a', RegExp['$+']); + +// 'abcdefg'.match(/bc/); RegExp['$+'] +'abcdefg'.match(/bc/); +new TestCase ( SECTION, "'abcdefg'.match(/bc/); RegExp['$+']", + '', RegExp['$+']); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_leftContext.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_leftContext.js new file mode 100644 index 00000000..2fdb3897 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_leftContext.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_leftContext.js + Description: 'Tests RegExps leftContext property' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: leftContext'; + +writeHeaderToLog('Executing script: RegExp_leftContext.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abc123xyz'.match(/123/); RegExp.leftContext +'abc123xyz'.match(/123/); +new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp.leftContext", + 'abc', RegExp.leftContext); + +// 'abc123xyz'.match(/456/); RegExp.leftContext +'abc123xyz'.match(/456/); +new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp.leftContext", + 'abc', RegExp.leftContext); + +// 'abc123xyz'.match(/abc123xyz/); RegExp.leftContext +'abc123xyz'.match(/abc123xyz/); +new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp.leftContext", + '', RegExp.leftContext); + +// 'xxxx'.match(/$/); RegExp.leftContext +'xxxx'.match(/$/); +new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp.leftContext", + 'xxxx', RegExp.leftContext); + +// 'test'.match(/^/); RegExp.leftContext +'test'.match(/^/); +new TestCase ( SECTION, "'test'.match(/^/); RegExp.leftContext", + '', RegExp.leftContext); + +// 'xxxx'.match(new RegExp('$')); RegExp.leftContext +'xxxx'.match(new RegExp('$')); +new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp.leftContext", + 'xxxx', RegExp.leftContext); + +// 'test'.match(new RegExp('^')); RegExp.leftContext +'test'.match(new RegExp('^')); +new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp.leftContext", + '', RegExp.leftContext); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_leftContext_as_array.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_leftContext_as_array.js new file mode 100644 index 00000000..ffde0f7c --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_leftContext_as_array.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_leftContext_as_array.js + Description: 'Tests RegExps leftContext property (same tests as RegExp_leftContext.js but using $`)' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: $`'; + +writeHeaderToLog('Executing script: RegExp_leftContext_as_array.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abc123xyz'.match(/123/); RegExp['$`'] +'abc123xyz'.match(/123/); +new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp['$`']", + 'abc', RegExp['$`']); + +// 'abc123xyz'.match(/456/); RegExp['$`'] +'abc123xyz'.match(/456/); +new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp['$`']", + 'abc', RegExp['$`']); + +// 'abc123xyz'.match(/abc123xyz/); RegExp['$`'] +'abc123xyz'.match(/abc123xyz/); +new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp['$`']", + '', RegExp['$`']); + +// 'xxxx'.match(/$/); RegExp['$`'] +'xxxx'.match(/$/); +new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp['$`']", + 'xxxx', RegExp['$`']); + +// 'test'.match(/^/); RegExp['$`'] +'test'.match(/^/); +new TestCase ( SECTION, "'test'.match(/^/); RegExp['$`']", + '', RegExp['$`']); + +// 'xxxx'.match(new RegExp('$')); RegExp['$`'] +'xxxx'.match(new RegExp('$')); +new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp['$`']", + 'xxxx', RegExp['$`']); + +// 'test'.match(new RegExp('^')); RegExp['$`'] +'test'.match(new RegExp('^')); +new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp['$`']", + '', RegExp['$`']); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_multiline.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_multiline.js new file mode 100644 index 00000000..5866e215 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_multiline.js @@ -0,0 +1,97 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_multiline.js + Description: 'Tests RegExps multiline property' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: multiline'; + +writeHeaderToLog('Executing script: RegExp_multiline.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// First we do a series of tests with RegExp.multiline set to false (default value) +// Following this we do the same tests with RegExp.multiline set true(**). +// RegExp.multiline +new TestCase ( SECTION, "RegExp.multiline", + false, RegExp.multiline); + +// (multiline == false) '123\n456'.match(/^4../) +new TestCase ( SECTION, "(multiline == false) '123\\n456'.match(/^4../)", + null, '123\n456'.match(/^4../)); + +// (multiline == false) 'a11\na22\na23\na24'.match(/^a../g) +new TestCase ( SECTION, "(multiline == false) 'a11\\na22\\na23\\na24'.match(/^a../g)", + String(['a11']), String('a11\na22\na23\na24'.match(/^a../g))); + +// (multiline == false) 'a11\na22'.match(/^.+^./) +new TestCase ( SECTION, "(multiline == false) 'a11\na22'.match(/^.+^./)", + null, 'a11\na22'.match(/^.+^./)); + +// (multiline == false) '123\n456'.match(/.3$/) +new TestCase ( SECTION, "(multiline == false) '123\\n456'.match(/.3$/)", + null, '123\n456'.match(/.3$/)); + +// (multiline == false) 'a11\na22\na23\na24'.match(/a..$/g) +new TestCase ( SECTION, "(multiline == false) 'a11\\na22\\na23\\na24'.match(/a..$/g)", + String(['a24']), String('a11\na22\na23\na24'.match(/a..$/g))); + +// (multiline == false) 'abc\ndef'.match(/c$...$/) +new TestCase ( SECTION, "(multiline == false) 'abc\ndef'.match(/c$...$/)", + null, 'abc\ndef'.match(/c$...$/)); + +// (multiline == false) 'a11\na22\na23\na24'.match(new RegExp('a..$','g')) +new TestCase ( SECTION, "(multiline == false) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))", + String(['a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g')))); + +// (multiline == false) 'abc\ndef'.match(new RegExp('c$...$')) +new TestCase ( SECTION, "(multiline == false) 'abc\ndef'.match(new RegExp('c$...$'))", + null, 'abc\ndef'.match(new RegExp('c$...$'))); + +// **Now we do the tests with RegExp.multiline set to true +// RegExp.multiline = true; RegExp.multiline +RegExp.multiline = true; +new TestCase ( SECTION, "RegExp.multiline = true; RegExp.multiline", + true, RegExp.multiline); + +// (multiline == true) '123\n456'.match(/^4../) +new TestCase ( SECTION, "(multiline == true) '123\\n456'.match(/^4../)", + String(['456']), String('123\n456'.match(/^4../))); + +// (multiline == true) 'a11\na22\na23\na24'.match(/^a../g) +new TestCase ( SECTION, "(multiline == true) 'a11\\na22\\na23\\na24'.match(/^a../g)", + String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/^a../g))); + +// (multiline == true) 'a11\na22'.match(/^.+^./) +//new TestCase ( SECTION, "(multiline == true) 'a11\na22'.match(/^.+^./)", +// String(['a11\na']), String('a11\na22'.match(/^.+^./))); + +// (multiline == true) '123\n456'.match(/.3$/) +new TestCase ( SECTION, "(multiline == true) '123\\n456'.match(/.3$/)", + String(['23']), String('123\n456'.match(/.3$/))); + +// (multiline == true) 'a11\na22\na23\na24'.match(/a..$/g) +new TestCase ( SECTION, "(multiline == true) 'a11\\na22\\na23\\na24'.match(/a..$/g)", + String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/a..$/g))); + +// (multiline == true) 'a11\na22\na23\na24'.match(new RegExp('a..$','g')) +new TestCase ( SECTION, "(multiline == true) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))", + String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g')))); + +// (multiline == true) 'abc\ndef'.match(/c$....$/) +//new TestCase ( SECTION, "(multiline == true) 'abc\ndef'.match(/c$.+$/)", +// 'c\ndef', String('abc\ndef'.match(/c$.+$/))); + +RegExp.multiline = false; + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_multiline_as_array.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_multiline_as_array.js new file mode 100644 index 00000000..08d8796b --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_multiline_as_array.js @@ -0,0 +1,98 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_multiline_as_array.js + Description: 'Tests RegExps $* property (same tests as RegExp_multiline.js but using $*)' + + Author: Nick Lerissa + Date: March 13, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: $*'; + +writeHeaderToLog('Executing script: RegExp_multiline_as_array.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// First we do a series of tests with RegExp['$*'] set to false (default value) +// Following this we do the same tests with RegExp['$*'] set true(**). +// RegExp['$*'] +new TestCase ( SECTION, "RegExp['$*']", + false, RegExp['$*']); + +// (['$*'] == false) '123\n456'.match(/^4../) +new TestCase ( SECTION, "(['$*'] == false) '123\\n456'.match(/^4../)", + null, '123\n456'.match(/^4../)); + +// (['$*'] == false) 'a11\na22\na23\na24'.match(/^a../g) +new TestCase ( SECTION, "(['$*'] == false) 'a11\\na22\\na23\\na24'.match(/^a../g)", + String(['a11']), String('a11\na22\na23\na24'.match(/^a../g))); + +// (['$*'] == false) 'a11\na22'.match(/^.+^./) +new TestCase ( SECTION, "(['$*'] == false) 'a11\na22'.match(/^.+^./)", + null, 'a11\na22'.match(/^.+^./)); + +// (['$*'] == false) '123\n456'.match(/.3$/) +new TestCase ( SECTION, "(['$*'] == false) '123\\n456'.match(/.3$/)", + null, '123\n456'.match(/.3$/)); + +// (['$*'] == false) 'a11\na22\na23\na24'.match(/a..$/g) +new TestCase ( SECTION, "(['$*'] == false) 'a11\\na22\\na23\\na24'.match(/a..$/g)", + String(['a24']), String('a11\na22\na23\na24'.match(/a..$/g))); + +// (['$*'] == false) 'abc\ndef'.match(/c$...$/) +new TestCase ( SECTION, "(['$*'] == false) 'abc\ndef'.match(/c$...$/)", + null, 'abc\ndef'.match(/c$...$/)); + +// (['$*'] == false) 'a11\na22\na23\na24'.match(new RegExp('a..$','g')) +new TestCase ( SECTION, "(['$*'] == false) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))", + String(['a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g')))); + +// (['$*'] == false) 'abc\ndef'.match(new RegExp('c$...$')) +new TestCase ( SECTION, "(['$*'] == false) 'abc\ndef'.match(new RegExp('c$...$'))", + null, 'abc\ndef'.match(new RegExp('c$...$'))); + +// **Now we do the tests with RegExp['$*'] set to true +// RegExp['$*'] = true; RegExp['$*'] +RegExp['$*'] = true; +new TestCase ( SECTION, "RegExp['$*'] = true; RegExp['$*']", + true, RegExp['$*']); + +// (['$*'] == true) '123\n456'.match(/^4../) +new TestCase ( SECTION, "(['$*'] == true) '123\\n456'.match(/^4../)", + String(['456']), String('123\n456'.match(/^4../))); + +// (['$*'] == true) 'a11\na22\na23\na24'.match(/^a../g) +new TestCase ( SECTION, "(['$*'] == true) 'a11\\na22\\na23\\na24'.match(/^a../g)", + String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/^a../g))); + +// (['$*'] == true) 'a11\na22'.match(/^.+^./) +//new TestCase ( SECTION, "(['$*'] == true) 'a11\na22'.match(/^.+^./)", +// String(['a11\na']), String('a11\na22'.match(/^.+^./))); + +// (['$*'] == true) '123\n456'.match(/.3$/) +new TestCase ( SECTION, "(['$*'] == true) '123\\n456'.match(/.3$/)", + String(['23']), String('123\n456'.match(/.3$/))); + +// (['$*'] == true) 'a11\na22\na23\na24'.match(/a..$/g) +new TestCase ( SECTION, "(['$*'] == true) 'a11\\na22\\na23\\na24'.match(/a..$/g)", + String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(/a..$/g))); + +// (['$*'] == true) 'a11\na22\na23\na24'.match(new RegExp('a..$','g')) +new TestCase ( SECTION, "(['$*'] == true) 'a11\\na22\\na23\\na24'.match(new RegExp('a..$','g'))", + String(['a11','a22','a23','a24']), String('a11\na22\na23\na24'.match(new RegExp('a..$','g')))); + +// (['$*'] == true) 'abc\ndef'.match(/c$....$/) +//new TestCase ( SECTION, "(['$*'] == true) 'abc\ndef'.match(/c$.+$/)", +// 'c\ndef', String('abc\ndef'.match(/c$.+$/))); + +RegExp['$*'] = false; + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_object.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_object.js new file mode 100644 index 00000000..4c39474e --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_object.js @@ -0,0 +1,56 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_object.js + Description: 'Tests regular expressions creating RexExp Objects' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: object'; + +writeHeaderToLog('Executing script: RegExp_object.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var SSN_pattern = new RegExp("\\d{3}-\\d{2}-\\d{4}"); + +// testing SSN pattern +new TestCase ( SECTION, "'Test SSN is 123-34-4567'.match(SSN_pattern))", + String(["123-34-4567"]), String('Test SSN is 123-34-4567'.match(SSN_pattern))); + +// testing SSN pattern +new TestCase ( SECTION, "'Test SSN is 123-34-4567'.match(SSN_pattern))", + String(["123-34-4567"]), String('Test SSN is 123-34-4567'.match(SSN_pattern))); + +var PHONE_pattern = new RegExp("\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})"); +// testing PHONE pattern +new TestCase ( SECTION, "'Our phone number is (408)345-2345.'.match(PHONE_pattern))", + String(["(408)345-2345","408","345","2345"]), String('Our phone number is (408)345-2345.'.match(PHONE_pattern))); + +// testing PHONE pattern +new TestCase ( SECTION, "'The phone number is 408-345-2345!'.match(PHONE_pattern))", + String(["408-345-2345","408","345","2345"]), String('The phone number is 408-345-2345!'.match(PHONE_pattern))); + +// testing PHONE pattern +new TestCase ( SECTION, "String(PHONE_pattern.toString())", + "/\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})/", String(PHONE_pattern.toString())); + +// testing conversion to String +new TestCase ( SECTION, "PHONE_pattern + ' is the string'", + "/\\(?(\\d{3})\\)?-?(\\d{3})-(\\d{4})/ is the string",PHONE_pattern + ' is the string'); + +// testing conversion to int +new TestCase ( SECTION, "SSN_pattern - 8", + NaN,SSN_pattern - 8); + +var testPattern = new RegExp("(\\d+)45(\\d+)90"); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_rightContext.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_rightContext.js new file mode 100644 index 00000000..f618cedf --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_rightContext.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_rightContext.js + Description: 'Tests RegExps rightContext property' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: rightContext'; + +writeHeaderToLog('Executing script: RegExp_rightContext.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abc123xyz'.match(/123/); RegExp.rightContext +'abc123xyz'.match(/123/); +new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp.rightContext", + 'xyz', RegExp.rightContext); + +// 'abc123xyz'.match(/456/); RegExp.rightContext +'abc123xyz'.match(/456/); +new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp.rightContext", + 'xyz', RegExp.rightContext); + +// 'abc123xyz'.match(/abc123xyz/); RegExp.rightContext +'abc123xyz'.match(/abc123xyz/); +new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp.rightContext", + '', RegExp.rightContext); + +// 'xxxx'.match(/$/); RegExp.rightContext +'xxxx'.match(/$/); +new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp.rightContext", + '', RegExp.rightContext); + +// 'test'.match(/^/); RegExp.rightContext +'test'.match(/^/); +new TestCase ( SECTION, "'test'.match(/^/); RegExp.rightContext", + 'test', RegExp.rightContext); + +// 'xxxx'.match(new RegExp('$')); RegExp.rightContext +'xxxx'.match(new RegExp('$')); +new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp.rightContext", + '', RegExp.rightContext); + +// 'test'.match(new RegExp('^')); RegExp.rightContext +'test'.match(new RegExp('^')); +new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp.rightContext", + 'test', RegExp.rightContext); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/RegExp_rightContext_as_array.js b/source/spidermonkey-tests/js1_2/regexp/RegExp_rightContext_as_array.js new file mode 100644 index 00000000..24c4ae06 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/RegExp_rightContext_as_array.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: RegExp_rightContext_as_array.js + Description: 'Tests RegExps $\' property (same tests as RegExp_rightContext.js but using $\)' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: $\''; + +writeHeaderToLog('Executing script: RegExp_rightContext.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abc123xyz'.match(/123/); RegExp['$\''] +'abc123xyz'.match(/123/); +new TestCase ( SECTION, "'abc123xyz'.match(/123/); RegExp['$\'']", + 'xyz', RegExp['$\'']); + +// 'abc123xyz'.match(/456/); RegExp['$\''] +'abc123xyz'.match(/456/); +new TestCase ( SECTION, "'abc123xyz'.match(/456/); RegExp['$\'']", + 'xyz', RegExp['$\'']); + +// 'abc123xyz'.match(/abc123xyz/); RegExp['$\''] +'abc123xyz'.match(/abc123xyz/); +new TestCase ( SECTION, "'abc123xyz'.match(/abc123xyz/); RegExp['$\'']", + '', RegExp['$\'']); + +// 'xxxx'.match(/$/); RegExp['$\''] +'xxxx'.match(/$/); +new TestCase ( SECTION, "'xxxx'.match(/$/); RegExp['$\'']", + '', RegExp['$\'']); + +// 'test'.match(/^/); RegExp['$\''] +'test'.match(/^/); +new TestCase ( SECTION, "'test'.match(/^/); RegExp['$\'']", + 'test', RegExp['$\'']); + +// 'xxxx'.match(new RegExp('$')); RegExp['$\''] +'xxxx'.match(new RegExp('$')); +new TestCase ( SECTION, "'xxxx'.match(new RegExp('$')); RegExp['$\'']", + '', RegExp['$\'']); + +// 'test'.match(new RegExp('^')); RegExp['$\''] +'test'.match(new RegExp('^')); +new TestCase ( SECTION, "'test'.match(new RegExp('^')); RegExp['$\'']", + 'test', RegExp['$\'']); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/alphanumeric.js b/source/spidermonkey-tests/js1_2/regexp/alphanumeric.js new file mode 100644 index 00000000..1dc3fb2e --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/alphanumeric.js @@ -0,0 +1,97 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: alphanumeric.js + Description: 'Tests regular expressions with \w and \W special characters' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: \\w and \\W'; + +writeHeaderToLog('Executing script: alphanumeric.js'); +writeHeaderToLog( SECTION + " " + TITLE); + +var non_alphanumeric = "~`!@#$%^&*()-+={[}]|\\:;'<,>./?\f\n\r\t\v " + '"'; +var alphanumeric = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + +// be sure all alphanumerics are matched by \w +new TestCase ( SECTION, + "'" + alphanumeric + "'.match(new RegExp('\\w+'))", + String([alphanumeric]), String(alphanumeric.match(new RegExp('\\w+')))); + +// be sure all non-alphanumerics are matched by \W +new TestCase ( SECTION, + "'" + non_alphanumeric + "'.match(new RegExp('\\W+'))", + String([non_alphanumeric]), String(non_alphanumeric.match(new RegExp('\\W+')))); + +// be sure all non-alphanumerics are not matched by \w +new TestCase ( SECTION, + "'" + non_alphanumeric + "'.match(new RegExp('\\w'))", + null, non_alphanumeric.match(new RegExp('\\w'))); + +// be sure all alphanumerics are not matched by \W +new TestCase ( SECTION, + "'" + alphanumeric + "'.match(new RegExp('\\W'))", + null, alphanumeric.match(new RegExp('\\W'))); + +var s = non_alphanumeric + alphanumeric; + +// be sure all alphanumerics are matched by \w +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\w+'))", + String([alphanumeric]), String(s.match(new RegExp('\\w+')))); + +s = alphanumeric + non_alphanumeric; + +// be sure all non-alphanumerics are matched by \W +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\W+'))", + String([non_alphanumeric]), String(s.match(new RegExp('\\W+')))); + +// be sure all alphanumerics are matched by \w (using literals) +new TestCase ( SECTION, + "'" + s + "'.match(/\w+/)", + String([alphanumeric]), String(s.match(/\w+/))); + +s = alphanumeric + non_alphanumeric; + +// be sure all non-alphanumerics are matched by \W (using literals) +new TestCase ( SECTION, + "'" + s + "'.match(/\W+/)", + String([non_alphanumeric]), String(s.match(/\W+/))); + +s = 'abcd*&^%$$'; +// be sure the following test behaves consistently +new TestCase ( SECTION, + "'" + s + "'.match(/(\w+)...(\W+)/)", + String([s , 'abcd' , '%$$']), String(s.match(/(\w+)...(\W+)/))); + +var i; + +// be sure all alphanumeric characters match individually +for (i = 0; i < alphanumeric.length; ++i) +{ + s = '#$' + alphanumeric[i] + '%^'; + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\w'))", + String([alphanumeric[i]]), String(s.match(new RegExp('\\w')))); +} +// be sure all non_alphanumeric characters match individually +for (i = 0; i < non_alphanumeric.length; ++i) +{ + s = 'sd' + non_alphanumeric[i] + String((i+10) * (i+10) - 2 * (i+10)); + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\W'))", + String([non_alphanumeric[i]]), String(s.match(new RegExp('\\W')))); +} + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/asterisk.js b/source/spidermonkey-tests/js1_2/regexp/asterisk.js new file mode 100644 index 00000000..373c9554 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/asterisk.js @@ -0,0 +1,73 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: asterisk.js + Description: 'Tests regular expressions containing *' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: *'; + +writeHeaderToLog('Executing script: aterisk.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abcddddefg'.match(new RegExp('d*')) +new TestCase ( SECTION, "'abcddddefg'.match(new RegExp('d*'))", + String([""]), String('abcddddefg'.match(new RegExp('d*')))); + +// 'abcddddefg'.match(new RegExp('cd*')) +new TestCase ( SECTION, "'abcddddefg'.match(new RegExp('cd*'))", + String(["cdddd"]), String('abcddddefg'.match(new RegExp('cd*')))); + +// 'abcdefg'.match(new RegExp('cx*d')) +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('cx*d'))", + String(["cd"]), String('abcdefg'.match(new RegExp('cx*d')))); + +// 'xxxxxxx'.match(new RegExp('(x*)(x+)')) +new TestCase ( SECTION, "'xxxxxxx'.match(new RegExp('(x*)(x+)'))", + String(["xxxxxxx","xxxxxx","x"]), String('xxxxxxx'.match(new RegExp('(x*)(x+)')))); + +// '1234567890'.match(new RegExp('(\\d*)(\\d+)')) +new TestCase ( SECTION, "'1234567890'.match(new RegExp('(\\d*)(\\d+)'))", + String(["1234567890","123456789","0"]), + String('1234567890'.match(new RegExp('(\\d*)(\\d+)')))); + +// '1234567890'.match(new RegExp('(\\d*)\\d(\\d+)')) +new TestCase ( SECTION, "'1234567890'.match(new RegExp('(\\d*)\\d(\\d+)'))", + String(["1234567890","12345678","0"]), + String('1234567890'.match(new RegExp('(\\d*)\\d(\\d+)')))); + +// 'xxxxxxx'.match(new RegExp('(x+)(x*)')) +new TestCase ( SECTION, "'xxxxxxx'.match(new RegExp('(x+)(x*)'))", + String(["xxxxxxx","xxxxxxx",""]), String('xxxxxxx'.match(new RegExp('(x+)(x*)')))); + +// 'xxxxxxyyyyyy'.match(new RegExp('x*y+$')) +new TestCase ( SECTION, "'xxxxxxyyyyyy'.match(new RegExp('x*y+$'))", + String(["xxxxxxyyyyyy"]), String('xxxxxxyyyyyy'.match(new RegExp('x*y+$')))); + +// 'abcdef'.match(/[\d]*[\s]*bc./) +new TestCase ( SECTION, "'abcdef'.match(/[\\d]*[\\s]*bc./)", + String(["bcd"]), String('abcdef'.match(/[\d]*[\s]*bc./))); + +// 'abcdef'.match(/bc..[\d]*[\s]*/) +new TestCase ( SECTION, "'abcdef'.match(/bc..[\\d]*[\\s]*/)", + String(["bcde"]), String('abcdef'.match(/bc..[\d]*[\s]*/))); + +// 'a1b2c3'.match(/.*/) +new TestCase ( SECTION, "'a1b2c3'.match(/.*/)", + String(["a1b2c3"]), String('a1b2c3'.match(/.*/))); + +// 'a0.b2.c3'.match(/[xyz]*1/) +new TestCase ( SECTION, "'a0.b2.c3'.match(/[xyz]*1/)", + null, 'a0.b2.c3'.match(/[xyz]*1/)); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/backslash.js b/source/spidermonkey-tests/js1_2/regexp/backslash.js new file mode 100644 index 00000000..6ad35809 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/backslash.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: backslash.js + Description: 'Tests regular expressions containing \' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: \\'; + +writeHeaderToLog('Executing script: backslash.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abcde'.match(new RegExp('\e')) +new TestCase ( SECTION, "'abcde'.match(new RegExp('\e'))", + String(["e"]), String('abcde'.match(new RegExp('\e')))); + +// 'ab\\cde'.match(new RegExp('\\\\')) +new TestCase ( SECTION, "'ab\\cde'.match(new RegExp('\\\\'))", + String(["\\"]), String('ab\\cde'.match(new RegExp('\\\\')))); + +// 'ab\\cde'.match(/\\/) (using literal) +new TestCase ( SECTION, "'ab\\cde'.match(/\\\\/)", + String(["\\"]), String('ab\\cde'.match(/\\/))); + +// 'before ^$*+?.()|{}[] after'.match(new RegExp('\^\$\*\+\?\.\(\)\|\{\}\[\]')) +new TestCase ( SECTION, + "'before ^$*+?.()|{}[] after'.match(new RegExp('\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]'))", + String(["^$*+?.()|{}[]"]), + String('before ^$*+?.()|{}[] after'.match(new RegExp('\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]')))); + +// 'before ^$*+?.()|{}[] after'.match(/\^\$\*\+\?\.\(\)\|\{\}\[\]/) (using literal) +new TestCase ( SECTION, + "'before ^$*+?.()|{}[] after'.match(/\\^\\$\\*\\+\\?\\.\\(\\)\\|\\{\\}\\[\\]/)", + String(["^$*+?.()|{}[]"]), + String('before ^$*+?.()|{}[] after'.match(/\^\$\*\+\?\.\(\)\|\{\}\[\]/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/backspace.js b/source/spidermonkey-tests/js1_2/regexp/backspace.js new file mode 100644 index 00000000..3e7a0003 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/backspace.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: backspace.js + Description: 'Tests regular expressions containing [\b]' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: [\b]'; + +writeHeaderToLog('Executing script: backspace.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abc\bdef'.match(new RegExp('.[\b].')) +new TestCase ( SECTION, "'abc\bdef'.match(new RegExp('.[\\b].'))", + String(["c\bd"]), String('abc\bdef'.match(new RegExp('.[\\b].')))); + +// 'abc\\bdef'.match(new RegExp('.[\b].')) +new TestCase ( SECTION, "'abc\\bdef'.match(new RegExp('.[\\b].'))", + null, 'abc\\bdef'.match(new RegExp('.[\\b].'))); + +// 'abc\b\b\bdef'.match(new RegExp('c[\b]{3}d')) +new TestCase ( SECTION, "'abc\b\b\bdef'.match(new RegExp('c[\\b]{3}d'))", + String(["c\b\b\bd"]), String('abc\b\b\bdef'.match(new RegExp('c[\\b]{3}d')))); + +// 'abc\bdef'.match(new RegExp('[^\\[\b\\]]+')) +new TestCase ( SECTION, "'abc\bdef'.match(new RegExp('[^\\[\\b\\]]+'))", + String(["abc"]), String('abc\bdef'.match(new RegExp('[^\\[\\b\\]]+')))); + +// 'abcdef'.match(new RegExp('[^\\[\b\\]]+')) +new TestCase ( SECTION, "'abcdef'.match(new RegExp('[^\\[\\b\\]]+'))", + String(["abcdef"]), String('abcdef'.match(new RegExp('[^\\[\\b\\]]+')))); + +// 'abcdef'.match(/[^\[\b\]]+/) +new TestCase ( SECTION, "'abcdef'.match(/[^\\[\\b\\]]+/)", + String(["abcdef"]), String('abcdef'.match(/[^\[\b\]]+/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/beginLine.js b/source/spidermonkey-tests/js1_2/regexp/beginLine.js new file mode 100644 index 00000000..64ea4de9 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/beginLine.js @@ -0,0 +1,49 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: beginLine.js + Description: 'Tests regular expressions containing ^' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: ^'; + +writeHeaderToLog('Executing script: beginLine.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'abcde'.match(new RegExp('^ab')) +new TestCase ( SECTION, "'abcde'.match(new RegExp('^ab'))", + String(["ab"]), String('abcde'.match(new RegExp('^ab')))); + +// 'ab\ncde'.match(new RegExp('^..^e')) +new TestCase ( SECTION, "'ab\ncde'.match(new RegExp('^..^e'))", + null, 'ab\ncde'.match(new RegExp('^..^e'))); + +// 'yyyyy'.match(new RegExp('^xxx')) +new TestCase ( SECTION, "'yyyyy'.match(new RegExp('^xxx'))", + null, 'yyyyy'.match(new RegExp('^xxx'))); + +// '^^^x'.match(new RegExp('^\\^+')) +new TestCase ( SECTION, "'^^^x'.match(new RegExp('^\\^+'))", + String(['^^^']), String('^^^x'.match(new RegExp('^\\^+')))); + +// '^^^x'.match(/^\^+/) +new TestCase ( SECTION, "'^^^x'.match(/^\\^+/)", + String(['^^^']), String('^^^x'.match(/^\^+/))); + +RegExp.multiline = true; +// 'abc\n123xyz'.match(new RegExp('^\d+')) +new TestCase ( SECTION, "'abc\n123xyz'.match(new RegExp('^\\d+'))", + String(['123']), String('abc\n123xyz'.match(new RegExp('^\\d+')))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/browser.js b/source/spidermonkey-tests/js1_2/regexp/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/regexp/character_class.js b/source/spidermonkey-tests/js1_2/regexp/character_class.js new file mode 100644 index 00000000..800de9a0 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/character_class.js @@ -0,0 +1,76 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: character_class.js + Description: 'Tests regular expressions containing []' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: []'; + +writeHeaderToLog('Executing script: character_class.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'abcde'.match(new RegExp('ab[ercst]de')) +new TestCase ( SECTION, "'abcde'.match(new RegExp('ab[ercst]de'))", + String(["abcde"]), String('abcde'.match(new RegExp('ab[ercst]de')))); + +// 'abcde'.match(new RegExp('ab[erst]de')) +new TestCase ( SECTION, "'abcde'.match(new RegExp('ab[erst]de'))", + null, 'abcde'.match(new RegExp('ab[erst]de'))); + +// 'abcdefghijkl'.match(new RegExp('[d-h]+')) +new TestCase ( SECTION, "'abcdefghijkl'.match(new RegExp('[d-h]+'))", + String(["defgh"]), String('abcdefghijkl'.match(new RegExp('[d-h]+')))); + +// 'abc6defghijkl'.match(new RegExp('[1234567].{2}')) +new TestCase ( SECTION, "'abc6defghijkl'.match(new RegExp('[1234567].{2}'))", + String(["6de"]), String('abc6defghijkl'.match(new RegExp('[1234567].{2}')))); + +// '\n\n\abc324234\n'.match(new RegExp('[a-c\d]+')) +new TestCase ( SECTION, "'\n\n\abc324234\n'.match(new RegExp('[a-c\\d]+'))", + String(["abc324234"]), String('\n\n\abc324234\n'.match(new RegExp('[a-c\\d]+')))); + +// 'abc'.match(new RegExp('ab[.]?c')) +new TestCase ( SECTION, "'abc'.match(new RegExp('ab[.]?c'))", + String(["abc"]), String('abc'.match(new RegExp('ab[.]?c')))); + +// 'abc'.match(new RegExp('a[b]c')) +new TestCase ( SECTION, "'abc'.match(new RegExp('a[b]c'))", + String(["abc"]), String('abc'.match(new RegExp('a[b]c')))); + +// 'a1b b2c c3d def f4g'.match(new RegExp('[a-z][^1-9][a-z]')) +new TestCase ( SECTION, "'a1b b2c c3d def f4g'.match(new RegExp('[a-z][^1-9][a-z]'))", + String(["def"]), String('a1b b2c c3d def f4g'.match(new RegExp('[a-z][^1-9][a-z]')))); + +// '123*&$abc'.match(new RegExp('[*&$]{3}')) +new TestCase ( SECTION, "'123*&$abc'.match(new RegExp('[*&$]{3}'))", + String(["*&$"]), String('123*&$abc'.match(new RegExp('[*&$]{3}')))); + +// 'abc'.match(new RegExp('a[^1-9]c')) +new TestCase ( SECTION, "'abc'.match(new RegExp('a[^1-9]c'))", + String(["abc"]), String('abc'.match(new RegExp('a[^1-9]c')))); + +// 'abc'.match(new RegExp('a[^b]c')) +new TestCase ( SECTION, "'abc'.match(new RegExp('a[^b]c'))", + null, 'abc'.match(new RegExp('a[^b]c'))); + +// 'abc#$%def%&*@ghi)(*&'.match(new RegExp('[^a-z]{4}')) +new TestCase ( SECTION, "'abc#$%def%&*@ghi)(*&'.match(new RegExp('[^a-z]{4}'))", + String(["%&*@"]), String('abc#$%def%&*@ghi)(*&'.match(new RegExp('[^a-z]{4}')))); + +// 'abc#$%def%&*@ghi)(*&'.match(/[^a-z]{4}/) +new TestCase ( SECTION, "'abc#$%def%&*@ghi)(*&'.match(/[^a-z]{4}/)", + String(["%&*@"]), String('abc#$%def%&*@ghi)(*&'.match(/[^a-z]{4}/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/compile.js b/source/spidermonkey-tests/js1_2/regexp/compile.js new file mode 100644 index 00000000..c1d4acc8 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/compile.js @@ -0,0 +1,62 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: compile.js + Description: 'Tests regular expressions method compile' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: compile'; + +writeHeaderToLog('Executing script: compile.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var regularExpression = new RegExp(); + +regularExpression.compile("[0-9]{3}x[0-9]{4}","i"); + +new TestCase ( SECTION, + "(compile '[0-9]{3}x[0-9]{4}','i')", + String(["456X7890"]), String('234X456X7890'.match(regularExpression))); + +new TestCase ( SECTION, + "source of (compile '[0-9]{3}x[0-9]{4}','i')", + "[0-9]{3}x[0-9]{4}", regularExpression.source); + +new TestCase ( SECTION, + "global of (compile '[0-9]{3}x[0-9]{4}','i')", + false, regularExpression.global); + +new TestCase ( SECTION, + "ignoreCase of (compile '[0-9]{3}x[0-9]{4}','i')", + true, regularExpression.ignoreCase); + +regularExpression.compile("[0-9]{3}X[0-9]{3}","g"); + +new TestCase ( SECTION, + "(compile '[0-9]{3}X[0-9]{3}','g')", + String(["234X456"]), String('234X456X7890'.match(regularExpression))); + +new TestCase ( SECTION, + "source of (compile '[0-9]{3}X[0-9]{3}','g')", + "[0-9]{3}X[0-9]{3}", regularExpression.source); + +new TestCase ( SECTION, + "global of (compile '[0-9]{3}X[0-9]{3}','g')", + true, regularExpression.global); + +new TestCase ( SECTION, + "ignoreCase of (compile '[0-9]{3}X[0-9]{3}','g')", + false, regularExpression.ignoreCase); + + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/control_characters.js b/source/spidermonkey-tests/js1_2/regexp/control_characters.js new file mode 100644 index 00000000..82857e6f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/control_characters.js @@ -0,0 +1,40 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: control_characters.js + Description: 'Tests regular expressions containing .' + + Author: Nick Lerissa + Date: April 8, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'RegExp: .'; +var BUGNUMBER="123802"; + +startTest(); +writeHeaderToLog('Executing script: control_characters.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'àOÐ ê:i¢Ø'.match(new RegExp('.+')) +new TestCase ( SECTION, "'àOÐ ê:i¢Ø'.match(new RegExp('.+'))", + String(['àOÐ ê:i¢Ø']), String('àOÐ ê:i¢Ø'.match(new RegExp('.+')))); + +// string1.match(new RegExp(string1)) +var string1 = 'àOÐ ê:i¢Ø'; +new TestCase ( SECTION, "string1 = " + string1 + " string1.match(string1)", + String([string1]), String(string1.match(string1))); + +string1 = ""; +for (var i = 0; i < 32; i++) + string1 += String.fromCharCode(i); +new TestCase ( SECTION, "string1 = " + string1 + " string1.match(string1)", + String([string1]), String(string1.match(string1))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/digit.js b/source/spidermonkey-tests/js1_2/regexp/digit.js new file mode 100644 index 00000000..ce3c6554 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/digit.js @@ -0,0 +1,86 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: digit.js + Description: 'Tests regular expressions containing \d' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: \\d'; + +writeHeaderToLog('Executing script: digit.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var non_digits = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"'; + +var digits = "1234567890"; + +// be sure all digits are matched by \d +new TestCase ( SECTION, + "'" + digits + "'.match(new RegExp('\\d+'))", + String([digits]), String(digits.match(new RegExp('\\d+')))); + +// be sure all non-digits are matched by \D +new TestCase ( SECTION, + "'" + non_digits + "'.match(new RegExp('\\D+'))", + String([non_digits]), String(non_digits.match(new RegExp('\\D+')))); + +// be sure all non-digits are not matched by \d +new TestCase ( SECTION, + "'" + non_digits + "'.match(new RegExp('\\d'))", + null, non_digits.match(new RegExp('\\d'))); + +// be sure all digits are not matched by \D +new TestCase ( SECTION, + "'" + digits + "'.match(new RegExp('\\D'))", + null, digits.match(new RegExp('\\D'))); + +var s = non_digits + digits; + +// be sure all digits are matched by \d +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\d+'))", + String([digits]), String(s.match(new RegExp('\\d+')))); + +var s = digits + non_digits; + +// be sure all non-digits are matched by \D +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\D+'))", + String([non_digits]), String(s.match(new RegExp('\\D+')))); + +var i; + +// be sure all digits match individually +for (i = 0; i < digits.length; ++i) +{ + s = 'ab' + digits[i] + 'cd'; + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\d'))", + String([digits[i]]), String(s.match(new RegExp('\\d')))); + new TestCase ( SECTION, + "'" + s + "'.match(/\\d/)", + String([digits[i]]), String(s.match(/\d/))); +} +// be sure all non_digits match individually +for (i = 0; i < non_digits.length; ++i) +{ + s = '12' + non_digits[i] + '34'; + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\D'))", + String([non_digits[i]]), String(s.match(new RegExp('\\D')))); + new TestCase ( SECTION, + "'" + s + "'.match(/\\D/)", + String([non_digits[i]]), String(s.match(/\D/))); +} + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/dot.js b/source/spidermonkey-tests/js1_2/regexp/dot.js new file mode 100644 index 00000000..9bcb9dfc --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/dot.js @@ -0,0 +1,64 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: dot.js + Description: 'Tests regular expressions containing .' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: .'; + +writeHeaderToLog('Executing script: dot.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'abcde'.match(new RegExp('ab.de')) +new TestCase ( SECTION, "'abcde'.match(new RegExp('ab.de'))", + String(["abcde"]), String('abcde'.match(new RegExp('ab.de')))); + +// 'line 1\nline 2'.match(new RegExp('.+')) +new TestCase ( SECTION, "'line 1\nline 2'.match(new RegExp('.+'))", + String(["line 1"]), String('line 1\nline 2'.match(new RegExp('.+')))); + +// 'this is a test'.match(new RegExp('.*a.*')) +new TestCase ( SECTION, "'this is a test'.match(new RegExp('.*a.*'))", + String(["this is a test"]), String('this is a test'.match(new RegExp('.*a.*')))); + +// 'this is a *&^%$# test'.match(new RegExp('.+')) +new TestCase ( SECTION, "'this is a *&^%$# test'.match(new RegExp('.+'))", + String(["this is a *&^%$# test"]), String('this is a *&^%$# test'.match(new RegExp('.+')))); + +// '....'.match(new RegExp('.+')) +new TestCase ( SECTION, "'....'.match(new RegExp('.+'))", + String(["...."]), String('....'.match(new RegExp('.+')))); + +// 'abcdefghijklmnopqrstuvwxyz'.match(new RegExp('.+')) +new TestCase ( SECTION, "'abcdefghijklmnopqrstuvwxyz'.match(new RegExp('.+'))", + String(["abcdefghijklmnopqrstuvwxyz"]), String('abcdefghijklmnopqrstuvwxyz'.match(new RegExp('.+')))); + +// 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.match(new RegExp('.+')) +new TestCase ( SECTION, "'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.match(new RegExp('.+'))", + String(["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]), String('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.match(new RegExp('.+')))); + +// '`1234567890-=~!@#$%^&*()_+'.match(new RegExp('.+')) +new TestCase ( SECTION, "'`1234567890-=~!@#$%^&*()_+'.match(new RegExp('.+'))", + String(["`1234567890-=~!@#$%^&*()_+"]), String('`1234567890-=~!@#$%^&*()_+'.match(new RegExp('.+')))); + +// '|\\[{]};:"\',<>.?/'.match(new RegExp('.+')) +new TestCase ( SECTION, "'|\\[{]};:\"\',<>.?/'.match(new RegExp('.+'))", + String(["|\\[{]};:\"\',<>.?/"]), String('|\\[{]};:\"\',<>.?/'.match(new RegExp('.+')))); + +// '|\\[{]};:"\',<>.?/'.match(/.+/) +new TestCase ( SECTION, "'|\\[{]};:\"\',<>.?/'.match(/.+/)", + String(["|\\[{]};:\"\',<>.?/"]), String('|\\[{]};:\"\',<>.?/'.match(/.+/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/endLine.js b/source/spidermonkey-tests/js1_2/regexp/endLine.js new file mode 100644 index 00000000..76d9f072 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/endLine.js @@ -0,0 +1,49 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: endLine.js + Description: 'Tests regular expressions containing $' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: $'; + +writeHeaderToLog('Executing script: endLine.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'abcde'.match(new RegExp('de$')) +new TestCase ( SECTION, "'abcde'.match(new RegExp('de$'))", + String(["de"]), String('abcde'.match(new RegExp('de$')))); + +// 'ab\ncde'.match(new RegExp('..$e$')) +new TestCase ( SECTION, "'ab\ncde'.match(new RegExp('..$e$'))", + null, 'ab\ncde'.match(new RegExp('..$e$'))); + +// 'yyyyy'.match(new RegExp('xxx$')) +new TestCase ( SECTION, "'yyyyy'.match(new RegExp('xxx$'))", + null, 'yyyyy'.match(new RegExp('xxx$'))); + +// 'a$$$'.match(new RegExp('\\$+$')) +new TestCase ( SECTION, "'a$$$'.match(new RegExp('\\$+$'))", + String(['$$$']), String('a$$$'.match(new RegExp('\\$+$')))); + +// 'a$$$'.match(/\$+$/) +new TestCase ( SECTION, "'a$$$'.match(/\\$+$/)", + String(['$$$']), String('a$$$'.match(/\$+$/))); + +RegExp.multiline = true; +// 'abc\n123xyz890\nxyz'.match(new RegExp('\d+$')) +new TestCase ( SECTION, "'abc\n123xyz890\nxyz'.match(new RegExp('\\d+$'))", + String(['890']), String('abc\n123xyz890\nxyz'.match(new RegExp('\\d+$')))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/everything.js b/source/spidermonkey-tests/js1_2/regexp/everything.js new file mode 100644 index 00000000..c1947a39 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/everything.js @@ -0,0 +1,49 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: everything.js + Description: 'Tests regular expressions' + + Author: Nick Lerissa + Date: March 24, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp'; + +writeHeaderToLog('Executing script: everything.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'Sally and Fred are sure to come.'.match(/^[a-z\s]*/i) +new TestCase ( SECTION, "'Sally and Fred are sure to come'.match(/^[a-z\\s]*/i)", + String(["Sally and Fred are sure to come"]), String('Sally and Fred are sure to come'.match(/^[a-z\s]*/i))); + +// 'test123W+xyz'.match(new RegExp('^[a-z]*[0-9]+[A-Z]?.(123|xyz)$')) +new TestCase ( SECTION, "'test123W+xyz'.match(new RegExp('^[a-z]*[0-9]+[A-Z]?.(123|xyz)$'))", + String(["test123W+xyz","xyz"]), String('test123W+xyz'.match(new RegExp('^[a-z]*[0-9]+[A-Z]?.(123|xyz)$')))); + +// 'number one 12365 number two 9898'.match(/(\d+)\D+(\d+)/) +new TestCase ( SECTION, "'number one 12365 number two 9898'.match(/(\d+)\D+(\d+)/)", + String(["12365 number two 9898","12365","9898"]), String('number one 12365 number two 9898'.match(/(\d+)\D+(\d+)/))); + +var simpleSentence = /(\s?[^\!\?\.]+[\!\?\.])+/; +// 'See Spot run.'.match(simpleSentence) +new TestCase ( SECTION, "'See Spot run.'.match(simpleSentence)", + String(["See Spot run.","See Spot run."]), String('See Spot run.'.match(simpleSentence))); + +// 'I like it. What's up? I said NO!'.match(simpleSentence) +new TestCase ( SECTION, "'I like it. What's up? I said NO!'.match(simpleSentence)", + String(["I like it. What's up? I said NO!",' I said NO!']), String('I like it. What\'s up? I said NO!'.match(simpleSentence))); + +// 'the quick brown fox jumped over the lazy dogs'.match(/((\w+)\s*)+/) +new TestCase ( SECTION, "'the quick brown fox jumped over the lazy dogs'.match(/((\\w+)\\s*)+/)", + String(['the quick brown fox jumped over the lazy dogs','dogs','dogs']),String('the quick brown fox jumped over the lazy dogs'.match(/((\w+)\s*)+/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/exec.js b/source/spidermonkey-tests/js1_2/regexp/exec.js new file mode 100644 index 00000000..78326014 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/exec.js @@ -0,0 +1,45 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: exec.js + Description: 'Tests regular expressions exec compile' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: exec'; + +writeHeaderToLog('Executing script: exec.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase ( SECTION, + "/[0-9]{3}/.exec('23 2 34 678 9 09')", + String(["678"]), String(/[0-9]{3}/.exec('23 2 34 678 9 09'))); + +new TestCase ( SECTION, + "/3.{4}8/.exec('23 2 34 678 9 09')", + String(["34 678"]), String(/3.{4}8/.exec('23 2 34 678 9 09'))); + +var re = new RegExp('3.{4}8'); +new TestCase ( SECTION, + "re.exec('23 2 34 678 9 09')", + String(["34 678"]), String(re.exec('23 2 34 678 9 09'))); + +new TestCase ( SECTION, + "(/3.{4}8/.exec('23 2 34 678 9 09').length", + 1, (/3.{4}8/.exec('23 2 34 678 9 09')).length); + +re = new RegExp('3.{4}8'); +new TestCase ( SECTION, + "(re.exec('23 2 34 678 9 09').length", + 1, (re.exec('23 2 34 678 9 09')).length); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/flags.js b/source/spidermonkey-tests/js1_2/regexp/flags.js new file mode 100644 index 00000000..e2529a84 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/flags.js @@ -0,0 +1,53 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: regexp.js + Description: 'Tests regular expressions using flags "i" and "g"' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'regular expression flags with flags "i" and "g"'; + +writeHeaderToLog('Executing script: flags.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// testing optional flag 'i' +new TestCase ( SECTION, "'aBCdEfGHijKLmno'.match(/fghijk/i)", + String(["fGHijK"]), String('aBCdEfGHijKLmno'.match(/fghijk/i))); + +new TestCase ( SECTION, "'aBCdEfGHijKLmno'.match(new RegExp('fghijk','i'))", + String(["fGHijK"]), String('aBCdEfGHijKLmno'.match(new RegExp("fghijk","i")))); + +// testing optional flag 'g' +new TestCase ( SECTION, "'xa xb xc xd xe xf'.match(/x./g)", + String(["xa","xb","xc","xd","xe","xf"]), String('xa xb xc xd xe xf'.match(/x./g))); + +new TestCase ( SECTION, "'xa xb xc xd xe xf'.match(new RegExp('x.','g'))", + String(["xa","xb","xc","xd","xe","xf"]), String('xa xb xc xd xe xf'.match(new RegExp('x.','g')))); + +// testing optional flags 'g' and 'i' +new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(/x./gi)", + String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(/x./gi))); + +new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(new RegExp('x.','gi'))", + String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(new RegExp('x.','gi')))); + +new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(/x./ig)", + String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(/x./ig))); + +new TestCase ( SECTION, "'xa Xb xc xd Xe xf'.match(new RegExp('x.','ig'))", + String(["xa","Xb","xc","xd","Xe","xf"]), String('xa Xb xc xd Xe xf'.match(new RegExp('x.','ig')))); + + +test(); + diff --git a/source/spidermonkey-tests/js1_2/regexp/global.js b/source/spidermonkey-tests/js1_2/regexp/global.js new file mode 100644 index 00000000..442374cd --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/global.js @@ -0,0 +1,63 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: global.js + Description: 'Tests RegExp attribute global' + + Author: Nick Lerissa + Date: March 13, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: global'; + +writeHeaderToLog('Executing script: global.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// /xyz/g.global +new TestCase ( SECTION, "/xyz/g.global", + true, /xyz/g.global); + +// /xyz/.global +new TestCase ( SECTION, "/xyz/.global", + false, /xyz/.global); + +// '123 456 789'.match(/\d+/g) +new TestCase ( SECTION, "'123 456 789'.match(/\\d+/g)", + String(["123","456","789"]), String('123 456 789'.match(/\d+/g))); + +// '123 456 789'.match(/(\d+)/g) +new TestCase ( SECTION, "'123 456 789'.match(/(\\d+)/g)", + String(["123","456","789"]), String('123 456 789'.match(/(\d+)/g))); + +// '123 456 789'.match(/\d+/) +new TestCase ( SECTION, "'123 456 789'.match(/\\d+/)", + String(["123"]), String('123 456 789'.match(/\d+/))); + +// (new RegExp('[a-z]','g')).global +new TestCase ( SECTION, "(new RegExp('[a-z]','g')).global", + true, (new RegExp('[a-z]','g')).global); + +// (new RegExp('[a-z]','i')).global +new TestCase ( SECTION, "(new RegExp('[a-z]','i')).global", + false, (new RegExp('[a-z]','i')).global); + +// '123 456 789'.match(new RegExp('\\d+','g')) +new TestCase ( SECTION, "'123 456 789'.match(new RegExp('\\\\d+','g'))", + String(["123","456","789"]), String('123 456 789'.match(new RegExp('\\d+','g')))); + +// '123 456 789'.match(new RegExp('(\\d+)','g')) +new TestCase ( SECTION, "'123 456 789'.match(new RegExp('(\\\\d+)','g'))", + String(["123","456","789"]), String('123 456 789'.match(new RegExp('(\\d+)','g')))); + +// '123 456 789'.match(new RegExp('\\d+','i')) +new TestCase ( SECTION, "'123 456 789'.match(new RegExp('\\\\d+','i'))", + String(["123"]), String('123 456 789'.match(new RegExp('\\d+','i')))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/hexadecimal.js b/source/spidermonkey-tests/js1_2/regexp/hexadecimal.js new file mode 100644 index 00000000..09ecea77 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/hexadecimal.js @@ -0,0 +1,75 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: hexadecimal.js + Description: 'Tests regular expressions containing \ ' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: \\x# (hex) '; + +writeHeaderToLog('Executing script: hexadecimal.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var testPattern = '\\x41\\x42\\x43\\x44\\x45\\x46\\x47\\x48\\x49\\x4A\\x4B\\x4C\\x4D\\x4E\\x4F\\x50\\x51\\x52\\x53\\x54\\x55\\x56\\x57\\x58\\x59\\x5A'; + +var testString = "12345ABCDEFGHIJKLMNOPQRSTUVWXYZ67890"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\x61\\x62\\x63\\x64\\x65\\x66\\x67\\x68\\x69\\x6A\\x6B\\x6C\\x6D\\x6E\\x6F\\x70\\x71\\x72\\x73\\x74\\x75\\x76\\x77\\x78\\x79\\x7A'; + +testString = "12345AabcdefghijklmnopqrstuvwxyzZ67890"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["abcdefghijklmnopqrstuvwxyz"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\x20\\x21\\x22\\x23\\x24\\x25\\x26\\x27\\x28\\x29\\x2A\\x2B\\x2C\\x2D\\x2E\\x2F\\x30\\x31\\x32\\x33'; + +testString = "abc !\"#$%&'()*+,-./0123ZBC"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String([" !\"#$%&'()*+,-./0123"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\x34\\x35\\x36\\x37\\x38\\x39\\x3A\\x3B\\x3C\\x3D\\x3E\\x3F\\x40'; + +testString = "123456789:;<=>?@ABC"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["456789:;<=>?@"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\x7B\\x7C\\x7D\\x7E'; + +testString = "1234{|}~ABC"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["{|}~"]), String(testString.match(new RegExp(testPattern)))); + +new TestCase ( SECTION, + "'canthisbeFOUND'.match(new RegExp('[A-\\x5A]+'))", + String(["FOUND"]), String('canthisbeFOUND'.match(new RegExp('[A-\\x5A]+')))); + +new TestCase ( SECTION, + "'canthisbeFOUND'.match(new RegExp('[\\x61-\\x7A]+'))", + String(["canthisbe"]), String('canthisbeFOUND'.match(new RegExp('[\\x61-\\x7A]+')))); + +new TestCase ( SECTION, + "'canthisbeFOUND'.match(/[\\x61-\\x7A]+/)", + String(["canthisbe"]), String('canthisbeFOUND'.match(/[\x61-\x7A]+/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/ignoreCase.js b/source/spidermonkey-tests/js1_2/regexp/ignoreCase.js new file mode 100644 index 00000000..f02ba91b --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/ignoreCase.js @@ -0,0 +1,80 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: ignoreCase.js + Description: 'Tests RegExp attribute ignoreCase' + + Author: Nick Lerissa + Date: March 13, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: ignoreCase'; + +writeHeaderToLog('Executing script: ignoreCase.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// /xyz/i.ignoreCase +new TestCase ( SECTION, "/xyz/i.ignoreCase", + true, /xyz/i.ignoreCase); + +// /xyz/.ignoreCase +new TestCase ( SECTION, "/xyz/.ignoreCase", + false, /xyz/.ignoreCase); + +// 'ABC def ghi'.match(/[a-z]+/ig) +new TestCase ( SECTION, "'ABC def ghi'.match(/[a-z]+/ig)", + String(["ABC","def","ghi"]), String('ABC def ghi'.match(/[a-z]+/ig))); + +// 'ABC def ghi'.match(/[a-z]+/i) +new TestCase ( SECTION, "'ABC def ghi'.match(/[a-z]+/i)", + String(["ABC"]), String('ABC def ghi'.match(/[a-z]+/i))); + +// 'ABC def ghi'.match(/([a-z]+)/ig) +new TestCase ( SECTION, "'ABC def ghi'.match(/([a-z]+)/ig)", + String(["ABC","def","ghi"]), String('ABC def ghi'.match(/([a-z]+)/ig))); + +// 'ABC def ghi'.match(/([a-z]+)/i) +new TestCase ( SECTION, "'ABC def ghi'.match(/([a-z]+)/i)", + String(["ABC","ABC"]), String('ABC def ghi'.match(/([a-z]+)/i))); + +// 'ABC def ghi'.match(/[a-z]+/) +new TestCase ( SECTION, "'ABC def ghi'.match(/[a-z]+/)", + String(["def"]), String('ABC def ghi'.match(/[a-z]+/))); + +// (new RegExp('xyz','i')).ignoreCase +new TestCase ( SECTION, "(new RegExp('xyz','i')).ignoreCase", + true, (new RegExp('xyz','i')).ignoreCase); + +// (new RegExp('xyz')).ignoreCase +new TestCase ( SECTION, "(new RegExp('xyz')).ignoreCase", + false, (new RegExp('xyz')).ignoreCase); + +// 'ABC def ghi'.match(new RegExp('[a-z]+','ig')) +new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('[a-z]+','ig'))", + String(["ABC","def","ghi"]), String('ABC def ghi'.match(new RegExp('[a-z]+','ig')))); + +// 'ABC def ghi'.match(new RegExp('[a-z]+','i')) +new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('[a-z]+','i'))", + String(["ABC"]), String('ABC def ghi'.match(new RegExp('[a-z]+','i')))); + +// 'ABC def ghi'.match(new RegExp('([a-z]+)','ig')) +new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('([a-z]+)','ig'))", + String(["ABC","def","ghi"]), String('ABC def ghi'.match(new RegExp('([a-z]+)','ig')))); + +// 'ABC def ghi'.match(new RegExp('([a-z]+)','i')) +new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('([a-z]+)','i'))", + String(["ABC","ABC"]), String('ABC def ghi'.match(new RegExp('([a-z]+)','i')))); + +// 'ABC def ghi'.match(new RegExp('[a-z]+')) +new TestCase ( SECTION, "'ABC def ghi'.match(new RegExp('[a-z]+'))", + String(["def"]), String('ABC def ghi'.match(new RegExp('[a-z]+')))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/interval.js b/source/spidermonkey-tests/js1_2/regexp/interval.js new file mode 100644 index 00000000..1cd68181 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/interval.js @@ -0,0 +1,83 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: interval.js + Description: 'Tests regular expressions containing {}' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: {}'; + +writeHeaderToLog('Executing script: interval.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{2}c')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{2}c'))", + String(["bbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{2}c')))); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8}')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{8}'))", + null, 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8}'))); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,}c')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,}c'))", + String(["bbbbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{2,}c')))); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8,}c')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{8,}c'))", + null, 'aaabbbbcccddeeeefffff'.match(new RegExp('b{8,}c'))); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,3}c')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{2,3}c'))", + String(["bbbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{2,3}c')))); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{42,93}c')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{42,93}c'))", + null, 'aaabbbbcccddeeeefffff'.match(new RegExp('b{42,93}c'))); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('b{0,93}c')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('b{0,93}c'))", + String(["bbbbc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('b{0,93}c')))); + +// 'aaabbbbcccddeeeefffff'.match(new RegExp('bx{0,93}c')) +new TestCase ( SECTION, "'aaabbbbcccddeeeefffff'.match(new RegExp('bx{0,93}c'))", + String(["bc"]), String('aaabbbbcccddeeeefffff'.match(new RegExp('bx{0,93}c')))); + +// 'weirwerdf'.match(new RegExp('.{0,93}')) +new TestCase ( SECTION, "'weirwerdf'.match(new RegExp('.{0,93}'))", + String(["weirwerdf"]), String('weirwerdf'.match(new RegExp('.{0,93}')))); + +// 'wqe456646dsff'.match(new RegExp('\d{1,}')) +new TestCase ( SECTION, "'wqe456646dsff'.match(new RegExp('\\d{1,}'))", + String(["456646"]), String('wqe456646dsff'.match(new RegExp('\\d{1,}')))); + +// '123123'.match(new RegExp('(123){1,}')) +new TestCase ( SECTION, "'123123'.match(new RegExp('(123){1,}'))", + String(["123123","123"]), String('123123'.match(new RegExp('(123){1,}')))); + +// '123123x123'.match(new RegExp('(123){1,}x\1')) +new TestCase ( SECTION, "'123123x123'.match(new RegExp('(123){1,}x\\1'))", + String(["123123x123","123"]), String('123123x123'.match(new RegExp('(123){1,}x\\1')))); + +// '123123x123'.match(/(123){1,}x\1/) +new TestCase ( SECTION, "'123123x123'.match(/(123){1,}x\\1/)", + String(["123123x123","123"]), String('123123x123'.match(/(123){1,}x\1/))); + +// 'xxxxxxx'.match(new RegExp('x{1,2}x{1,}')) +new TestCase ( SECTION, "'xxxxxxx'.match(new RegExp('x{1,2}x{1,}'))", + String(["xxxxxxx"]), String('xxxxxxx'.match(new RegExp('x{1,2}x{1,}')))); + +// 'xxxxxxx'.match(/x{1,2}x{1,}/) +new TestCase ( SECTION, "'xxxxxxx'.match(/x{1,2}x{1,}/)", + String(["xxxxxxx"]), String('xxxxxxx'.match(/x{1,2}x{1,}/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/octal.js b/source/spidermonkey-tests/js1_2/regexp/octal.js new file mode 100644 index 00000000..79228428 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/octal.js @@ -0,0 +1,75 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: octal.js + Description: 'Tests regular expressions containing \ ' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: \# (octal) '; + +writeHeaderToLog('Executing script: octal.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var testPattern = '\\101\\102\\103\\104\\105\\106\\107\\110\\111\\112\\113\\114\\115\\116\\117\\120\\121\\122\\123\\124\\125\\126\\127\\130\\131\\132'; + +var testString = "12345ABCDEFGHIJKLMNOPQRSTUVWXYZ67890"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["ABCDEFGHIJKLMNOPQRSTUVWXYZ"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\141\\142\\143\\144\\145\\146\\147\\150\\151\\152\\153\\154\\155\\156\\157\\160\\161\\162\\163\\164\\165\\166\\167\\170\\171\\172'; + +testString = "12345AabcdefghijklmnopqrstuvwxyzZ67890"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["abcdefghijklmnopqrstuvwxyz"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\40\\41\\42\\43\\44\\45\\46\\47\\50\\51\\52\\53\\54\\55\\56\\57\\60\\61\\62\\63'; + +testString = "abc !\"#$%&'()*+,-./0123ZBC"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String([" !\"#$%&'()*+,-./0123"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\64\\65\\66\\67\\70\\71\\72\\73\\74\\75\\76\\77\\100'; + +testString = "123456789:;<=>?@ABC"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["456789:;<=>?@"]), String(testString.match(new RegExp(testPattern)))); + +testPattern = '\\173\\174\\175\\176'; + +testString = "1234{|}~ABC"; + +new TestCase ( SECTION, + "'" + testString + "'.match(new RegExp('" + testPattern + "'))", + String(["{|}~"]), String(testString.match(new RegExp(testPattern)))); + +new TestCase ( SECTION, + "'canthisbeFOUND'.match(new RegExp('[A-\\132]+'))", + String(["FOUND"]), String('canthisbeFOUND'.match(new RegExp('[A-\\132]+')))); + +new TestCase ( SECTION, + "'canthisbeFOUND'.match(new RegExp('[\\141-\\172]+'))", + String(["canthisbe"]), String('canthisbeFOUND'.match(new RegExp('[\\141-\\172]+')))); + +new TestCase ( SECTION, + "'canthisbeFOUND'.match(/[\\141-\\172]+/)", + String(["canthisbe"]), String('canthisbeFOUND'.match(/[\141-\172]+/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/parentheses.js b/source/spidermonkey-tests/js1_2/regexp/parentheses.js new file mode 100644 index 00000000..90209cf0 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/parentheses.js @@ -0,0 +1,75 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: parentheses.js + Description: 'Tests regular expressions containing ()' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: ()'; + +writeHeaderToLog('Executing script: parentheses.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abc'.match(new RegExp('(abc)')) +new TestCase ( SECTION, "'abc'.match(new RegExp('(abc)'))", + String(["abc","abc"]), String('abc'.match(new RegExp('(abc)')))); + +// 'abcdefg'.match(new RegExp('a(bc)d(ef)g')) +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('a(bc)d(ef)g'))", + String(["abcdefg","bc","ef"]), String('abcdefg'.match(new RegExp('a(bc)d(ef)g')))); + +// 'abcdefg'.match(new RegExp('(.{3})(.{4})')) +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('(.{3})(.{4})'))", + String(["abcdefg","abc","defg"]), String('abcdefg'.match(new RegExp('(.{3})(.{4})')))); + +// 'aabcdaabcd'.match(new RegExp('(aa)bcd\1')) +new TestCase ( SECTION, "'aabcdaabcd'.match(new RegExp('(aa)bcd\\1'))", + String(["aabcdaa","aa"]), String('aabcdaabcd'.match(new RegExp('(aa)bcd\\1')))); + +// 'aabcdaabcd'.match(new RegExp('(aa).+\1')) +new TestCase ( SECTION, "'aabcdaabcd'.match(new RegExp('(aa).+\\1'))", + String(["aabcdaa","aa"]), String('aabcdaabcd'.match(new RegExp('(aa).+\\1')))); + +// 'aabcdaabcd'.match(new RegExp('(.{2}).+\1')) +new TestCase ( SECTION, "'aabcdaabcd'.match(new RegExp('(.{2}).+\\1'))", + String(["aabcdaa","aa"]), String('aabcdaabcd'.match(new RegExp('(.{2}).+\\1')))); + +// '123456123456'.match(new RegExp('(\d{3})(\d{3})\1\2')) +new TestCase ( SECTION, "'123456123456'.match(new RegExp('(\\d{3})(\\d{3})\\1\\2'))", + String(["123456123456","123","456"]), String('123456123456'.match(new RegExp('(\\d{3})(\\d{3})\\1\\2')))); + +// 'abcdefg'.match(new RegExp('a(..(..)..)')) +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('a(..(..)..)'))", + String(["abcdefg","bcdefg","de"]), String('abcdefg'.match(new RegExp('a(..(..)..)')))); + +// 'abcdefg'.match(/a(..(..)..)/) +new TestCase ( SECTION, "'abcdefg'.match(/a(..(..)..)/)", + String(["abcdefg","bcdefg","de"]), String('abcdefg'.match(/a(..(..)..)/))); + +// 'xabcdefg'.match(new RegExp('(a(b(c)))(d(e(f)))')) +new TestCase ( SECTION, "'xabcdefg'.match(new RegExp('(a(b(c)))(d(e(f)))'))", + String(["abcdef","abc","bc","c","def","ef","f"]), String('xabcdefg'.match(new RegExp('(a(b(c)))(d(e(f)))')))); + +// 'xabcdefbcefg'.match(new RegExp('(a(b(c)))(d(e(f)))\2\5')) +new TestCase ( SECTION, "'xabcdefbcefg'.match(new RegExp('(a(b(c)))(d(e(f)))\\2\\5'))", + String(["abcdefbcef","abc","bc","c","def","ef","f"]), String('xabcdefbcefg'.match(new RegExp('(a(b(c)))(d(e(f)))\\2\\5')))); + +// 'abcd'.match(new RegExp('a(.?)b\1c\1d\1')) +new TestCase ( SECTION, "'abcd'.match(new RegExp('a(.?)b\\1c\\1d\\1'))", + String(["abcd",""]), String('abcd'.match(new RegExp('a(.?)b\\1c\\1d\\1')))); + +// 'abcd'.match(/a(.?)b\1c\1d\1/) +new TestCase ( SECTION, "'abcd'.match(/a(.?)b\\1c\\1d\\1/)", + String(["abcd",""]), String('abcd'.match(/a(.?)b\1c\1d\1/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/plus.js b/source/spidermonkey-tests/js1_2/regexp/plus.js new file mode 100644 index 00000000..0d5c40f3 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/plus.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: plus.js + Description: 'Tests regular expressions containing +' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: +'; + +writeHeaderToLog('Executing script: plus.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abcdddddefg'.match(new RegExp('d+')) +new TestCase ( SECTION, "'abcdddddefg'.match(new RegExp('d+'))", + String(["ddddd"]), String('abcdddddefg'.match(new RegExp('d+')))); + +// 'abcdefg'.match(new RegExp('o+')) +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('o+'))", + null, 'abcdefg'.match(new RegExp('o+'))); + +// 'abcdefg'.match(new RegExp('d+')) +new TestCase ( SECTION, "'abcdefg'.match(new RegExp('d+'))", + String(['d']), String('abcdefg'.match(new RegExp('d+')))); + +// 'abbbbbbbc'.match(new RegExp('(b+)(b+)(b+)')) +new TestCase ( SECTION, "'abbbbbbbc'.match(new RegExp('(b+)(b+)(b+)'))", + String(["bbbbbbb","bbbbb","b","b"]), String('abbbbbbbc'.match(new RegExp('(b+)(b+)(b+)')))); + +// 'abbbbbbbc'.match(new RegExp('(b+)(b*)')) +new TestCase ( SECTION, "'abbbbbbbc'.match(new RegExp('(b+)(b*)'))", + String(["bbbbbbb","bbbbbbb",""]), String('abbbbbbbc'.match(new RegExp('(b+)(b*)')))); + +// 'abbbbbbbc'.match(new RegExp('b*b+')) +new TestCase ( SECTION, "'abbbbbbbc'.match(new RegExp('b*b+'))", + String(['bbbbbbb']), String('abbbbbbbc'.match(new RegExp('b*b+')))); + +// 'abbbbbbbc'.match(/(b+)(b*)/) +new TestCase ( SECTION, "'abbbbbbbc'.match(/(b+)(b*)/)", + String(["bbbbbbb","bbbbbbb",""]), String('abbbbbbbc'.match(/(b+)(b*)/))); + +// 'abbbbbbbc'.match(new RegExp('b*b+')) +new TestCase ( SECTION, "'abbbbbbbc'.match(/b*b+/)", + String(['bbbbbbb']), String('abbbbbbbc'.match(/b*b+/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/question_mark.js b/source/spidermonkey-tests/js1_2/regexp/question_mark.js new file mode 100644 index 00000000..e159be8b --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/question_mark.js @@ -0,0 +1,67 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: question_mark.js + Description: 'Tests regular expressions containing ?' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: ?'; + +writeHeaderToLog('Executing script: question_mark.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abcdef'.match(new RegExp('cd?e')) +new TestCase ( SECTION, "'abcdef'.match(new RegExp('cd?e'))", + String(["cde"]), String('abcdef'.match(new RegExp('cd?e')))); + +// 'abcdef'.match(new RegExp('cdx?e')) +new TestCase ( SECTION, "'abcdef'.match(new RegExp('cdx?e'))", + String(["cde"]), String('abcdef'.match(new RegExp('cdx?e')))); + +// 'pqrstuvw'.match(new RegExp('o?pqrst')) +new TestCase ( SECTION, "'pqrstuvw'.match(new RegExp('o?pqrst'))", + String(["pqrst"]), String('pqrstuvw'.match(new RegExp('o?pqrst')))); + +// 'abcd'.match(new RegExp('x?y?z?')) +new TestCase ( SECTION, "'abcd'.match(new RegExp('x?y?z?'))", + String([""]), String('abcd'.match(new RegExp('x?y?z?')))); + +// 'abcd'.match(new RegExp('x?ay?bz?c')) +new TestCase ( SECTION, "'abcd'.match(new RegExp('x?ay?bz?c'))", + String(["abc"]), String('abcd'.match(new RegExp('x?ay?bz?c')))); + +// 'abcd'.match(/x?ay?bz?c/) +new TestCase ( SECTION, "'abcd'.match(/x?ay?bz?c/)", + String(["abc"]), String('abcd'.match(/x?ay?bz?c/))); + +// 'abbbbc'.match(new RegExp('b?b?b?b')) +new TestCase ( SECTION, "'abbbbc'.match(new RegExp('b?b?b?b'))", + String(["bbbb"]), String('abbbbc'.match(new RegExp('b?b?b?b')))); + +// '123az789'.match(new RegExp('ab?c?d?x?y?z')) +new TestCase ( SECTION, "'123az789'.match(new RegExp('ab?c?d?x?y?z'))", + String(["az"]), String('123az789'.match(new RegExp('ab?c?d?x?y?z')))); + +// '123az789'.match(/ab?c?d?x?y?z/) +new TestCase ( SECTION, "'123az789'.match(/ab?c?d?x?y?z/)", + String(["az"]), String('123az789'.match(/ab?c?d?x?y?z/))); + +// '?????'.match(new RegExp('\\??\\??\\??\\??\\??')) +new TestCase ( SECTION, "'?????'.match(new RegExp('\\??\\??\\??\\??\\??'))", + String(["?????"]), String('?????'.match(new RegExp('\\??\\??\\??\\??\\??')))); + +// 'test'.match(new RegExp('.?.?.?.?.?.?.?')) +new TestCase ( SECTION, "'test'.match(new RegExp('.?.?.?.?.?.?.?'))", + String(["test"]), String('test'.match(new RegExp('.?.?.?.?.?.?.?')))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/regress-6359.js b/source/spidermonkey-tests/js1_2/regexp/regress-6359.js new file mode 100644 index 00000000..5a63f0ac --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/regress-6359.js @@ -0,0 +1,53 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: regress-6359.js + * Reference: ** replace with bugzilla URL or document reference ** + * Description: ** replace with description of test ** + * Author: ** replace with your e-mail address ** + */ + +var SECTION = "js1_2"; // provide a document reference (ie, ECMA section) +var VERSION = "ECMA_2"; // Version of JavaScript or ECMA +var TITLE = "Regression test for bugzilla # 6359"; // Provide ECMA section title or a description +var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=6359"; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + +/* + * Calls to AddTestCase here. AddTestCase is a function that is defined + * in shell.js and takes three arguments: + * - a string representation of what is being tested + * - the expected result + * - the actual result + * + * For example, a test might look like this: + * + * var zip = /[\d]{5}$/; + * + * AddTestCase( + * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test + * "02134", // expected result + * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result + * + */ + +AddTestCase( '/(a*)b\1+/.exec("baaac").length', + 2, + /(a*)b\1+/.exec("baaac").length ); + +AddTestCase( '/(a*)b\1+/.exec("baaac")[0]', + "b", + /(a*)b\1+/.exec("baaac")[0]); + +AddTestCase( '/(a*)b\1+/.exec("baaac")[1]', + "", + /(a*)b\1+/.exec("baaac")[1]); + + +test(); // leave this alone. this executes the test cases and +// displays results. diff --git a/source/spidermonkey-tests/js1_2/regexp/regress-9141.js b/source/spidermonkey-tests/js1_2/regexp/regress-9141.js new file mode 100644 index 00000000..987995fe --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/regress-9141.js @@ -0,0 +1,72 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + + +/** + * File Name: regress-9141.js + * Reference: "http://bugzilla.mozilla.org/show_bug.cgi?id=9141"; + * Description: + * From waldemar@netscape.com: + * + * The following page crashes the system: + * + * + * + * + * + * + * + * + */ + +var SECTION = "js1_2"; // provide a document reference (ie, ECMA section) +var VERSION = "ECMA_2"; // Version of JavaScript or ECMA +var TITLE = "Regression test for bugzilla # 9141"; // Provide ECMA section title or a description +var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=9141"; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + +/* + * Calls to AddTestCase here. AddTestCase is a function that is defined + * in shell.js and takes three arguments: + * - a string representation of what is being tested + * - the expected result + * - the actual result + * + * For example, a test might look like this: + * + * var zip = /[\d]{5}$/; + * + * AddTestCase( + * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test + * "02134", // expected result + * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result + * + */ + +var s = "x"; +for (var i = 0; i != 13; i++) s += s; +var a = /(?:xx|x)*/.exec(s); +var b = /(xx|x)*/.exec(s); + +AddTestCase( "var s = 'x'; for (var i = 0; i != 13; i++) s += s; " + + "a = /(?:xx|x)*/.exec(s); a.length", + 1, + a.length ); + +AddTestCase( "var b = /(xx|x)*/.exec(s); b.length", + 2, + b.length ); + +test(); // leave this alone. this executes the test cases and +// displays results. diff --git a/source/spidermonkey-tests/js1_2/regexp/shell.js b/source/spidermonkey-tests/js1_2/regexp/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/regexp/simple_form.js b/source/spidermonkey-tests/js1_2/regexp/simple_form.js new file mode 100644 index 00000000..3c3e98da --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/simple_form.js @@ -0,0 +1,58 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: simple_form.js + Description: 'Tests regular expressions using simple form: re.exec(...)' + + Author: Nick Lerissa + Date: March 19, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: simple form'; + +writeHeaderToLog('Executing script: simple_form.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase ( SECTION, + "/[0-9]{3}/.exec('23 2 34 678 9 09')", + String(["678"]), String(/[0-9]{3}/.exec('23 2 34 678 9 09'))); + +new TestCase ( SECTION, + "/3.{4}8/.exec('23 2 34 678 9 09')", + String(["34 678"]), String(/3.{4}8/.exec('23 2 34 678 9 09'))); + +new TestCase ( SECTION, + "(/3.{4}8/.exec('23 2 34 678 9 09').length", + 1, (/3.{4}8/.exec('23 2 34 678 9 09')).length); + +var re = /[0-9]{3}/; +new TestCase ( SECTION, + "re.exec('23 2 34 678 9 09')", + String(["678"]), String(re.exec('23 2 34 678 9 09'))); + +re = /3.{4}8/; +new TestCase ( SECTION, + "re.exec('23 2 34 678 9 09')", + String(["34 678"]), String(re.exec('23 2 34 678 9 09'))); + +new TestCase ( SECTION, + "/3.{4}8/.exec('23 2 34 678 9 09')", + String(["34 678"]), String(/3.{4}8/.exec('23 2 34 678 9 09'))); + +re =/3.{4}8/; +new TestCase ( SECTION, + "(re.exec('23 2 34 678 9 09').length", + 1, (re.exec('23 2 34 678 9 09')).length); + +new TestCase ( SECTION, + "(/3.{4}8/.exec('23 2 34 678 9 09').length", + 1, (/3.{4}8/.exec('23 2 34 678 9 09')).length); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/source.js b/source/spidermonkey-tests/js1_2/regexp/source.js new file mode 100644 index 00000000..84b226a4 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/source.js @@ -0,0 +1,56 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: source.js + Description: 'Tests RegExp attribute source' + + Author: Nick Lerissa + Date: March 13, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: source'; + +writeHeaderToLog('Executing script: source.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// /xyz/g.source +new TestCase ( SECTION, "/xyz/g.source", + "xyz", /xyz/g.source); + +// /xyz/.source +new TestCase ( SECTION, "/xyz/.source", + "xyz", /xyz/.source); + +// /abc\\def/.source +new TestCase ( SECTION, "/abc\\\\def/.source", + "abc\\\\def", /abc\\def/.source); + +// /abc[\b]def/.source +new TestCase ( SECTION, "/abc[\\b]def/.source", + "abc[\\b]def", /abc[\b]def/.source); + +// (new RegExp('xyz')).source +new TestCase ( SECTION, "(new RegExp('xyz')).source", + "xyz", (new RegExp('xyz')).source); + +// (new RegExp('xyz','g')).source +new TestCase ( SECTION, "(new RegExp('xyz','g')).source", + "xyz", (new RegExp('xyz','g')).source); + +// (new RegExp('abc\\\\def')).source +new TestCase ( SECTION, "(new RegExp('abc\\\\\\\\def')).source", + "abc\\\\def", (new RegExp('abc\\\\def')).source); + +// (new RegExp('abc[\\b]def')).source +new TestCase ( SECTION, "(new RegExp('abc[\\\\b]def')).source", + "abc[\\b]def", (new RegExp('abc[\\b]def')).source); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/special_characters.js b/source/spidermonkey-tests/js1_2/regexp/special_characters.js new file mode 100644 index 00000000..1e40eb69 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/special_characters.js @@ -0,0 +1,126 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: special_characters.js + Description: 'Tests regular expressions containing special characters' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: special_charaters'; + +writeHeaderToLog('Executing script: special_characters.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// testing backslash '\' +new TestCase ( SECTION, "'^abcdefghi'.match(/\^abc/)", String(["^abc"]), String('^abcdefghi'.match(/\^abc/))); + +// testing beginning of line '^' +new TestCase ( SECTION, "'abcdefghi'.match(/^abc/)", String(["abc"]), String('abcdefghi'.match(/^abc/))); + +// testing end of line '$' +new TestCase ( SECTION, "'abcdefghi'.match(/fghi$/)", String(["ghi"]), String('abcdefghi'.match(/ghi$/))); + +// testing repeat '*' +new TestCase ( SECTION, "'eeeefghi'.match(/e*/)", String(["eeee"]), String('eeeefghi'.match(/e*/))); + +// testing repeat 1 or more times '+' +new TestCase ( SECTION, "'abcdeeeefghi'.match(/e+/)", String(["eeee"]), String('abcdeeeefghi'.match(/e+/))); + +// testing repeat 0 or 1 time '?' +new TestCase ( SECTION, "'abcdefghi'.match(/abc?de/)", String(["abcde"]), String('abcdefghi'.match(/abc?de/))); + +// testing any character '.' +new TestCase ( SECTION, "'abcdefghi'.match(/c.e/)", String(["cde"]), String('abcdefghi'.match(/c.e/))); + +// testing remembering () +new TestCase ( SECTION, "'abcewirjskjdabciewjsdf'.match(/(abc).+\\1'/)", + String(["abcewirjskjdabc","abc"]), String('abcewirjskjdabciewjsdf'.match(/(abc).+\1/))); + +// testing or match '|' +new TestCase ( SECTION, "'abcdefghi'.match(/xyz|def/)", String(["def"]), String('abcdefghi'.match(/xyz|def/))); + +// testing repeat n {n} +new TestCase ( SECTION, "'abcdeeeefghi'.match(/e{3}/)", String(["eee"]), String('abcdeeeefghi'.match(/e{3}/))); + +// testing min repeat n {n,} +new TestCase ( SECTION, "'abcdeeeefghi'.match(/e{3,}/)", String(["eeee"]), String('abcdeeeefghi'.match(/e{3,}/))); + +// testing min/max repeat {min, max} +new TestCase ( SECTION, "'abcdeeeefghi'.match(/e{2,8}/)", String(["eeee"]), String('abcdeeeefghi'.match(/e{2,8}/))); + +// testing any in set [abc...] +new TestCase ( SECTION, "'abcdefghi'.match(/cd[xey]fgh/)", String(["cdefgh"]), String('abcdefghi'.match(/cd[xey]fgh/))); + +// testing any in set [a-z] +new TestCase ( SECTION, "'netscape inc'.match(/t[r-v]ca/)", String(["tsca"]), String('netscape inc'.match(/t[r-v]ca/))); + +// testing any not in set [^abc...] +new TestCase ( SECTION, "'abcdefghi'.match(/cd[^xy]fgh/)", String(["cdefgh"]), String('abcdefghi'.match(/cd[^xy]fgh/))); + +// testing any not in set [^a-z] +new TestCase ( SECTION, "'netscape inc'.match(/t[^a-c]ca/)", String(["tsca"]), String('netscape inc'.match(/t[^a-c]ca/))); + +// testing backspace [\b] +new TestCase ( SECTION, "'this is b\ba test'.match(/is b[\b]a test/)", + String(["is b\ba test"]), String('this is b\ba test'.match(/is b[\b]a test/))); + +// testing word boundary \b +new TestCase ( SECTION, "'today is now - day is not now'.match(/\bday.*now/)", + String(["day is not now"]), String('today is now - day is not now'.match(/\bday.*now/))); + +// control characters??? + +// testing any digit \d +new TestCase ( SECTION, "'a dog - 1 dog'.match(/\d dog/)", String(["1 dog"]), String('a dog - 1 dog'.match(/\d dog/))); + +// testing any non digit \d +new TestCase ( SECTION, "'a dog - 1 dog'.match(/\D dog/)", String(["a dog"]), String('a dog - 1 dog'.match(/\D dog/))); + +// testing form feed '\f' +new TestCase ( SECTION, "'a b a\fb'.match(/a\fb/)", String(["a\fb"]), String('a b a\fb'.match(/a\fb/))); + +// testing line feed '\n' +new TestCase ( SECTION, "'a b a\nb'.match(/a\nb/)", String(["a\nb"]), String('a b a\nb'.match(/a\nb/))); + +// testing carriage return '\r' +new TestCase ( SECTION, "'a b a\rb'.match(/a\rb/)", String(["a\rb"]), String('a b a\rb'.match(/a\rb/))); + +// testing whitespace '\s' +new TestCase ( SECTION, "'xa\f\n\r\t\vbz'.match(/a\s+b/)", String(["a\f\n\r\t\vb"]), String('xa\f\n\r\t\vbz'.match(/a\s+b/))); + +// testing non whitespace '\S' +new TestCase ( SECTION, "'a\tb a b a-b'.match(/a\Sb/)", String(["a-b"]), String('a\tb a b a-b'.match(/a\Sb/))); + +// testing tab '\t' +new TestCase ( SECTION, "'a\t\tb a b'.match(/a\t{2}/)", String(["a\t\t"]), String('a\t\tb a b'.match(/a\t{2}/))); + +// testing vertical tab '\v' +new TestCase ( SECTION, "'a\v\vb a b'.match(/a\v{2}/)", String(["a\v\v"]), String('a\v\vb a b'.match(/a\v{2}/))); + +// testing alphnumeric characters '\w' +new TestCase ( SECTION, "'%AZaz09_$'.match(/\w+/)", String(["AZaz09_"]), String('%AZaz09_$'.match(/\w+/))); + +// testing non alphnumeric characters '\W' +new TestCase ( SECTION, "'azx$%#@*4534'.match(/\W+/)", String(["$%#@*"]), String('azx$%#@*4534'.match(/\W+/))); + +// testing back references '\' +new TestCase ( SECTION, "'test'.match(/(t)es\\1/)", String(["test","t"]), String('test'.match(/(t)es\1/))); + +// testing hex excaping with '\' +new TestCase ( SECTION, "'abcdef'.match(/\x63\x64/)", String(["cd"]), String('abcdef'.match(/\x63\x64/))); + +// testing oct excaping with '\' +new TestCase ( SECTION, "'abcdef'.match(/\\143\\144/)", String(["cd"]), String('abcdef'.match(/\143\144/))); + +test(); + diff --git a/source/spidermonkey-tests/js1_2/regexp/string_replace.js b/source/spidermonkey-tests/js1_2/regexp/string_replace.js new file mode 100644 index 00000000..1b3c832f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/string_replace.js @@ -0,0 +1,92 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: string_replace.js + Description: 'Tests the replace method on Strings using regular expressions' + + Author: Nick Lerissa + Date: March 11, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String: replace'; + +writeHeaderToLog('Executing script: string_replace.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'adddb'.replace(/ddd/,"XX") +new TestCase ( SECTION, "'adddb'.replace(/ddd/,'XX')", + "aXXb", 'adddb'.replace(/ddd/,'XX')); + +// 'adddb'.replace(/eee/,"XX") +new TestCase ( SECTION, "'adddb'.replace(/eee/,'XX')", + 'adddb', 'adddb'.replace(/eee/,'XX')); + +// '34 56 78b 12'.replace(new RegExp('[0-9]+b'),'**') +new TestCase ( SECTION, "'34 56 78b 12'.replace(new RegExp('[0-9]+b'),'**')", + "34 56 ** 12", '34 56 78b 12'.replace(new RegExp('[0-9]+b'),'**')); + +// '34 56 78b 12'.replace(new RegExp('[0-9]+c'),'XX') +new TestCase ( SECTION, "'34 56 78b 12'.replace(new RegExp('[0-9]+c'),'XX')", + "34 56 78b 12", '34 56 78b 12'.replace(new RegExp('[0-9]+c'),'XX')); + +// 'original'.replace(new RegExp(),'XX') +new TestCase ( SECTION, "'original'.replace(new RegExp(),'XX')", + "XXoriginal", 'original'.replace(new RegExp(),'XX')); + +// 'qwe ert x\t\n 345654AB'.replace(new RegExp('x\s*\d+(..)$'),'****') +new TestCase ( SECTION, "'qwe ert x\t\n 345654AB'.replace(new RegExp('x\\s*\\d+(..)$'),'****')", + "qwe ert ****", 'qwe ert x\t\n 345654AB'.replace(new RegExp('x\\s*\\d+(..)$'),'****')); + + +/* + * Test replacement over ropes. The char to rope node ratio must be sufficiently + * high for the special-case code to be tested. + */ +var stringA = "abcdef"; +var stringB = "ghijk"; +var stringC = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"; +stringC += stringC; +stringC += stringC; +stringC[0]; /* flatten stringC */ +var stringD = "lmn"; + +new TestCase ( SECTION, "(stringA + stringB + stringC).replace('aa', '')", + stringA + stringB + stringC, (stringA + stringB + stringC).replace('aa', '')); + +new TestCase ( SECTION, "(stringA + stringB + stringC).replace('abc', 'AA')", + "AAdefghijk" + stringC, (stringA + stringB + stringC).replace('abc', 'AA')); + +new TestCase ( SECTION, "(stringA + stringB + stringC).replace('def', 'AA')", + "abcAAghijk" + stringC, (stringA + stringB + stringC).replace('def', 'AA')); + +new TestCase ( SECTION, "(stringA + stringB + stringC).replace('efg', 'AA')", + "abcdAAhijk" + stringC, (stringA + stringB + stringC).replace('efg', 'AA')); + +new TestCase ( SECTION, "(stringA + stringB + stringC).replace('fgh', 'AA')", + "abcdeAAijk" + stringC, (stringA + stringB + stringC).replace('fgh', 'AA')); + +new TestCase ( SECTION, "(stringA + stringB + stringC).replace('ghi', 'AA')", + "abcdefAAjk" + stringC, (stringA + stringB + stringC).replace('ghi', 'AA')); + +new TestCase ( SECTION, "(stringC + stringD).replace('lmn', 'AA')", + stringC + "AA", (stringC + stringD).replace('lmn', 'AA')); + +new TestCase ( SECTION, "(stringC + stringD).replace('lmno', 'AA')", + stringC + stringD, (stringC + stringD).replace('lmno', 'AA')); + +new TestCase ( SECTION, "(stringC + stringD).replace('mn', 'AA')", + stringC + "lAA", (stringC + stringD).replace('mn', 'AA')); + +new TestCase ( SECTION, "(stringC + stringD).replace('n', 'AA')", + stringC + "lmAA", (stringC + stringD).replace('n', 'AA')); + + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/string_search.js b/source/spidermonkey-tests/js1_2/regexp/string_search.js new file mode 100644 index 00000000..93c786fb --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/string_search.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: string_search.js + Description: 'Tests the search method on Strings using regular expressions' + + Author: Nick Lerissa + Date: March 12, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String: search'; + +writeHeaderToLog('Executing script: string_search.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +// 'abcdefg'.search(/d/) +new TestCase ( SECTION, "'abcdefg'.search(/d/)", + 3, 'abcdefg'.search(/d/)); + +// 'abcdefg'.search(/x/) +new TestCase ( SECTION, "'abcdefg'.search(/x/)", + -1, 'abcdefg'.search(/x/)); + +// 'abcdefg123456hijklmn'.search(/\d+/) +new TestCase ( SECTION, "'abcdefg123456hijklmn'.search(/\d+/)", + 7, 'abcdefg123456hijklmn'.search(/\d+/)); + +// 'abcdefg123456hijklmn'.search(new RegExp()) +new TestCase ( SECTION, "'abcdefg123456hijklmn'.search(new RegExp())", + 0, 'abcdefg123456hijklmn'.search(new RegExp())); + +// 'abc'.search(new RegExp('$')) +new TestCase ( SECTION, "'abc'.search(new RegExp('$'))", + 3, 'abc'.search(new RegExp('$'))); + +// 'abc'.search(new RegExp('^')) +new TestCase ( SECTION, "'abc'.search(new RegExp('^'))", + 0, 'abc'.search(new RegExp('^'))); + +// 'abc1'.search(/.\d/) +new TestCase ( SECTION, "'abc1'.search(/.\d/)", + 2, 'abc1'.search(/.\d/)); + +// 'abc1'.search(/\d{2}/) +new TestCase ( SECTION, "'abc1'.search(/\d{2}/)", + -1, 'abc1'.search(/\d{2}/)); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/string_split.js b/source/spidermonkey-tests/js1_2/regexp/string_split.js new file mode 100644 index 00000000..c810bff9 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/string_split.js @@ -0,0 +1,61 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: string_split.js + Description: 'Tests the split method on Strings using regular expressions' + + Author: Nick Lerissa + Date: March 11, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'String: split'; + +writeHeaderToLog('Executing script: string_split.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'a b c de f'.split(/\s/) +new TestCase ( SECTION, "'a b c de f'.split(/\s/)", + String(["a","b","c","de","f"]), String('a b c de f'.split(/\s/))); + +// 'a b c de f'.split(/\s/,3) +new TestCase ( SECTION, "'a b c de f'.split(/\s/,3)", + String(["a","b","c"]), String('a b c de f'.split(/\s/,3))); + +// 'a b c de f'.split(/X/) +new TestCase ( SECTION, "'a b c de f'.split(/X/)", + String(["a b c de f"]), String('a b c de f'.split(/X/))); + +// 'dfe23iu 34 =+65--'.split(/\d+/) +new TestCase ( SECTION, "'dfe23iu 34 =+65--'.split(/\d+/)", + String(["dfe","iu "," =+","--"]), String('dfe23iu 34 =+65--'.split(/\d+/))); + +// 'dfe23iu 34 =+65--'.split(new RegExp('\d+')) +new TestCase ( SECTION, "'dfe23iu 34 =+65--'.split(new RegExp('\\d+'))", + String(["dfe","iu "," =+","--"]), String('dfe23iu 34 =+65--'.split(new RegExp('\\d+')))); + +// 'abc'.split(/[a-z]/) +new TestCase ( SECTION, "'abc'.split(/[a-z]/)", + String(["","",""]), String('abc'.split(/[a-z]/))); + +// 'abc'.split(/[a-z]/) +new TestCase ( SECTION, "'abc'.split(/[a-z]/)", + String(["","",""]), String('abc'.split(/[a-z]/))); + +// 'abc'.split(new RegExp('[a-z]')) +new TestCase ( SECTION, "'abc'.split(new RegExp('[a-z]'))", + String(["","",""]), String('abc'.split(new RegExp('[a-z]')))); + +// 'abc'.split(new RegExp('[a-z]')) +new TestCase ( SECTION, "'abc'.split(new RegExp('[a-z]'))", + String(["","",""]), String('abc'.split(new RegExp('[a-z]')))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/test.js b/source/spidermonkey-tests/js1_2/regexp/test.js new file mode 100644 index 00000000..588520eb --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/test.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: test.js + Description: 'Tests regular expressions method compile' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: test'; + +writeHeaderToLog('Executing script: test.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase ( SECTION, + "/[0-9]{3}/.test('23 2 34 678 9 09')", + true, /[0-9]{3}/.test('23 2 34 678 9 09')); + +new TestCase ( SECTION, + "/[0-9]{3}/.test('23 2 34 78 9 09')", + false, /[0-9]{3}/.test('23 2 34 78 9 09')); + +new TestCase ( SECTION, + "/\w+ \w+ \w+/.test('do a test')", + true, /\w+ \w+ \w+/.test("do a test")); + +new TestCase ( SECTION, + "/\w+ \w+ \w+/.test('a test')", + false, /\w+ \w+ \w+/.test("a test")); + +new TestCase ( SECTION, + "(new RegExp('[0-9]{3}')).test('23 2 34 678 9 09')", + true, (new RegExp('[0-9]{3}')).test('23 2 34 678 9 09')); + +new TestCase ( SECTION, + "(new RegExp('[0-9]{3}')).test('23 2 34 78 9 09')", + false, (new RegExp('[0-9]{3}')).test('23 2 34 78 9 09')); + +new TestCase ( SECTION, + "(new RegExp('\\\\w+ \\\\w+ \\\\w+')).test('do a test')", + true, (new RegExp('\\w+ \\w+ \\w+')).test("do a test")); + +new TestCase ( SECTION, + "(new RegExp('\\\\w+ \\\\w+ \\\\w+')).test('a test')", + false, (new RegExp('\\w+ \\w+ \\w+')).test("a test")); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/toString.js b/source/spidermonkey-tests/js1_2/regexp/toString.js new file mode 100644 index 00000000..e6b6cc88 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/toString.js @@ -0,0 +1,47 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: toString.js + Description: 'Tests RegExp method toString' + + Author: Nick Lerissa + Date: March 13, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: toString'; + +writeHeaderToLog('Executing script: toString.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +/* + * var re = new RegExp(); re.toString() For what to expect, + * see http://bugzilla.mozilla.org/show_bug.cgi?id=225343#c7 + */ +var re = new RegExp(); +new TestCase ( SECTION, "var re = new RegExp(); re.toString()", + '/(?:)/', re.toString()); + +// re = /.+/; re.toString(); +re = /.+/; +new TestCase ( SECTION, "re = /.+/; re.toString()", + '/.+/', re.toString()); + +// re = /test/gi; re.toString() +re = /test/gi; +new TestCase ( SECTION, "re = /test/gi; re.toString()", + '/test/gi', re.toString()); + +// re = /test2/ig; re.toString() +re = /test2/ig; +new TestCase ( SECTION, "re = /test2/ig; re.toString()", + '/test2/gi', re.toString()); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/vertical_bar.js b/source/spidermonkey-tests/js1_2/regexp/vertical_bar.js new file mode 100644 index 00000000..636f1c9c --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/vertical_bar.js @@ -0,0 +1,64 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: vertical_bar.js + Description: 'Tests regular expressions containing |' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: |'; + +writeHeaderToLog('Executing script: vertical_bar.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'abc'.match(new RegExp('xyz|abc')) +new TestCase ( SECTION, "'abc'.match(new RegExp('xyz|abc'))", + String(["abc"]), String('abc'.match(new RegExp('xyz|abc')))); + +// 'this is a test'.match(new RegExp('quiz|exam|test|homework')) +new TestCase ( SECTION, "'this is a test'.match(new RegExp('quiz|exam|test|homework'))", + String(["test"]), String('this is a test'.match(new RegExp('quiz|exam|test|homework')))); + +// 'abc'.match(new RegExp('xyz|...')) +new TestCase ( SECTION, "'abc'.match(new RegExp('xyz|...'))", + String(["abc"]), String('abc'.match(new RegExp('xyz|...')))); + +// 'abc'.match(new RegExp('(.)..|abc')) +new TestCase ( SECTION, "'abc'.match(new RegExp('(.)..|abc'))", + String(["abc","a"]), String('abc'.match(new RegExp('(.)..|abc')))); + +// 'color: grey'.match(new RegExp('.+: gr(a|e)y')) +new TestCase ( SECTION, "'color: grey'.match(new RegExp('.+: gr(a|e)y'))", + String(["color: grey","e"]), String('color: grey'.match(new RegExp('.+: gr(a|e)y')))); + +// 'no match'.match(new RegExp('red|white|blue')) +new TestCase ( SECTION, "'no match'.match(new RegExp('red|white|blue'))", + null, 'no match'.match(new RegExp('red|white|blue'))); + +// 'Hi Bob'.match(new RegExp('(Rob)|(Bob)|(Robert)|(Bobby)')) +new TestCase ( SECTION, "'Hi Bob'.match(new RegExp('(Rob)|(Bob)|(Robert)|(Bobby)'))", + String(["Bob",undefined,"Bob", undefined, undefined]), String('Hi Bob'.match(new RegExp('(Rob)|(Bob)|(Robert)|(Bobby)')))); + +// 'abcdef'.match(new RegExp('abc|bcd|cde|def')) +new TestCase ( SECTION, "'abcdef'.match(new RegExp('abc|bcd|cde|def'))", + String(["abc"]), String('abcdef'.match(new RegExp('abc|bcd|cde|def')))); + +// 'Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/) +new TestCase ( SECTION, "'Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/)", + String(["Bob",undefined,"Bob", undefined, undefined]), String('Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/))); + +// 'abcdef'.match(/abc|bcd|cde|def/) +new TestCase ( SECTION, "'abcdef'.match(/abc|bcd|cde|def/)", + String(["abc"]), String('abcdef'.match(/abc|bcd|cde|def/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/whitespace.js b/source/spidermonkey-tests/js1_2/regexp/whitespace.js new file mode 100644 index 00000000..ab99b59d --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/whitespace.js @@ -0,0 +1,91 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: whitespace.js + Description: 'Tests regular expressions containing \f\n\r\t\v\s\S\ ' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: \\f\\n\\r\\t\\v\\s\\S '; + +writeHeaderToLog('Executing script: whitespace.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +var non_whitespace = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~`!@#$%^&*()-+={[}]|\\:;'<,>./?1234567890" + '"'; +var whitespace = "\f\n\r\t\v "; + +// be sure all whitespace is matched by \s +new TestCase ( SECTION, + "'" + whitespace + "'.match(new RegExp('\\s+'))", + String([whitespace]), String(whitespace.match(new RegExp('\\s+')))); + +// be sure all non-whitespace is matched by \S +new TestCase ( SECTION, + "'" + non_whitespace + "'.match(new RegExp('\\S+'))", + String([non_whitespace]), String(non_whitespace.match(new RegExp('\\S+')))); + +// be sure all non-whitespace is not matched by \s +new TestCase ( SECTION, + "'" + non_whitespace + "'.match(new RegExp('\\s'))", + null, non_whitespace.match(new RegExp('\\s'))); + +// be sure all whitespace is not matched by \S +new TestCase ( SECTION, + "'" + whitespace + "'.match(new RegExp('\\S'))", + null, whitespace.match(new RegExp('\\S'))); + +var s = non_whitespace + whitespace; + +// be sure all digits are matched by \s +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\s+'))", + String([whitespace]), String(s.match(new RegExp('\\s+')))); + +s = whitespace + non_whitespace; + +// be sure all non-whitespace are matched by \S +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\S+'))", + String([non_whitespace]), String(s.match(new RegExp('\\S+')))); + +// '1233345find me345'.match(new RegExp('[a-z\\s][a-z\\s]+')) +new TestCase ( SECTION, "'1233345find me345'.match(new RegExp('[a-z\\s][a-z\\s]+'))", + String(["find me"]), String('1233345find me345'.match(new RegExp('[a-z\\s][a-z\\s]+')))); + +var i; + +// be sure all whitespace characters match individually +for (i = 0; i < whitespace.length; ++i) +{ + s = 'ab' + whitespace[i] + 'cd'; + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\\\s'))", + String([whitespace[i]]), String(s.match(new RegExp('\\s')))); + new TestCase ( SECTION, + "'" + s + "'.match(/\s/)", + String([whitespace[i]]), String(s.match(/\s/))); +} +// be sure all non_whitespace characters match individually +for (i = 0; i < non_whitespace.length; ++i) +{ + s = ' ' + non_whitespace[i] + ' '; + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\\\S'))", + String([non_whitespace[i]]), String(s.match(new RegExp('\\S')))); + new TestCase ( SECTION, + "'" + s + "'.match(/\S/)", + String([non_whitespace[i]]), String(s.match(/\S/))); +} + + +test(); diff --git a/source/spidermonkey-tests/js1_2/regexp/word_boundary.js b/source/spidermonkey-tests/js1_2/regexp/word_boundary.js new file mode 100644 index 00000000..ca96081f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regexp/word_boundary.js @@ -0,0 +1,87 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: word_boundary.js + Description: 'Tests regular expressions containing \b and \B' + + Author: Nick Lerissa + Date: March 10, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'RegExp: \\b and \\B'; + +writeHeaderToLog('Executing script: word_boundary.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + + +// 'cowboy boyish boy'.match(new RegExp('\bboy\b')) +new TestCase ( SECTION, "'cowboy boyish boy'.match(new RegExp('\\bboy\\b'))", + String(["boy"]), String('cowboy boyish boy'.match(new RegExp('\\bboy\\b')))); + +var boundary_characters = "\f\n\r\t\v~`!@#$%^&*()-+={[}]|\\:;'<,>./? " + '"'; +var non_boundary_characters = '1234567890_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; +var s = ''; +var i; + +// testing whether all boundary characters are matched when they should be +for (i = 0; i < boundary_characters.length; ++i) +{ + s = '123ab' + boundary_characters.charAt(i) + '123c' + boundary_characters.charAt(i); + + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\b123[a-z]\\b'))", + String(["123c"]), String(s.match(new RegExp('\\b123[a-z]\\b')))); +} + +// testing whether all non-boundary characters are matched when they should be +for (i = 0; i < non_boundary_characters.length; ++i) +{ + s = '123ab' + non_boundary_characters.charAt(i) + '123c' + non_boundary_characters.charAt(i); + + new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\B123[a-z]\\B'))", + String(["123c"]), String(s.match(new RegExp('\\B123[a-z]\\B')))); +} + +s = ''; + +// testing whether all boundary characters are not matched when they should not be +for (i = 0; i < boundary_characters.length; ++i) +{ + s += boundary_characters[i] + "a" + i + "b"; +} +s += "xa1111bx"; + +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\Ba\\d+b\\B'))", + String(["a1111b"]), String(s.match(new RegExp('\\Ba\\d+b\\B')))); + +new TestCase ( SECTION, + "'" + s + "'.match(/\\Ba\\d+b\\B/)", + String(["a1111b"]), String(s.match(/\Ba\d+b\B/))); + +s = ''; + +// testing whether all non-boundary characters are not matched when they should not be +for (i = 0; i < non_boundary_characters.length; ++i) +{ + s += non_boundary_characters[i] + "a" + i + "b"; +} +s += "(a1111b)"; + +new TestCase ( SECTION, + "'" + s + "'.match(new RegExp('\\ba\\d+b\\b'))", + String(["a1111b"]), String(s.match(new RegExp('\\ba\\d+b\\b')))); + +new TestCase ( SECTION, + "'" + s + "'.match(/\\ba\\d+b\\b/)", + String(["a1111b"]), String(s.match(/\ba\d+b\b/))); + +test(); diff --git a/source/spidermonkey-tests/js1_2/regress/browser.js b/source/spidermonkey-tests/js1_2/regress/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/regress/regress-144834.js b/source/spidermonkey-tests/js1_2/regress/regress-144834.js new file mode 100644 index 00000000..1db9baba --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regress/regress-144834.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 05 July 2002 + * SUMMARY: Testing local var having same name as switch label inside function + * + * The code below crashed while compiling in JS1.1 or JS1.2 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=144834 + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 144834; +var summary = 'Local var having same name as switch label inside function'; + +print(BUGNUMBER); +print(summary); + + +function RedrawSched() +{ + var MinBound; + + switch (i) + { + case MinBound : + } +} + + +/* + * Also try eval scope - + */ +var s = ''; +s += 'function RedrawSched()'; +s += '{'; +s += ' var MinBound;'; +s += ''; +s += ' switch (i)'; +s += ' {'; +s += ' case MinBound :'; +s += ' }'; +s += '}'; +eval(s); + +AddTestCase('Do not crash', 'No Crash', 'No Crash'); +test(); diff --git a/source/spidermonkey-tests/js1_2/regress/regress-7703.js b/source/spidermonkey-tests/js1_2/regress/regress-7703.js new file mode 100644 index 00000000..1ea5a34d --- /dev/null +++ b/source/spidermonkey-tests/js1_2/regress/regress-7703.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + + +/** + * File Name: regress-7703.js + * Reference: "http://bugzilla.mozilla.org/show_bug.cgi?id=7703"; + * Description: See the text of the bugnumber above + */ + +var SECTION = "js1_2"; // provide a document reference (ie, ECMA section) +var VERSION = "JS1_2"; // Version of JavaScript or ECMA +var TITLE = "Regression test for bugzilla # 7703"; // Provide ECMA section title or a description +var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=7703"; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + +/* + * Calls to AddTestCase here. AddTestCase is a function that is defined + * in shell.js and takes three arguments: + * - a string representation of what is being tested + * - the expected result + * - the actual result + * + * For example, a test might look like this: + * + * var zip = /[\d]{5}$/; + * + * AddTestCase( + * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test + * "02134", // expected result + * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result + * + */ + +types = []; +function inspect(object) { + for (prop in object) { + var x = object[prop]; + types[types.length] = (typeof x); + } +} + +var o = {a: 1, b: 2}; +inspect(o); + +AddTestCase( "inspect(o),length", 2, types.length ); +AddTestCase( "inspect(o)[0]", "number", types[0] ); +AddTestCase( "inspect(o)[1]", "number", types[1] ); + +types_2 = []; + +function inspect_again(object) { + for (prop in object) { + types_2[types_2.length] = (typeof object[prop]); + } +} + +inspect_again(o); +AddTestCase( "inspect_again(o),length", 2, types.length ); +AddTestCase( "inspect_again(o)[0]", "number", types[0] ); +AddTestCase( "inspect_again(o)[1]", "number", types[1] ); + + +test(); // leave this alone. this executes the test cases and +// displays results. diff --git a/source/spidermonkey-tests/js1_2/regress/shell.js b/source/spidermonkey-tests/js1_2/regress/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/shell.js b/source/spidermonkey-tests/js1_2/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/statements/break.js b/source/spidermonkey-tests/js1_2/statements/break.js new file mode 100644 index 00000000..77c4983d --- /dev/null +++ b/source/spidermonkey-tests/js1_2/statements/break.js @@ -0,0 +1,130 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: break.js + Description: 'Tests the break statement' + + Author: Nick Lerissa + Date: March 18, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'statements: break'; + +writeHeaderToLog("Executing script: break.js"); +writeHeaderToLog( SECTION + " "+ TITLE); + +var i,j; + +for (i = 0; i < 1000; i++) +{ + if (i == 100) break; +} + +// 'breaking out of "for" loop' +new TestCase ( SECTION, 'breaking out of "for" loop', + 100, i); + +j = 2000; + +out1: +for (i = 0; i < 1000; i++) +{ + if (i == 100) + { + out2: + for (j = 0; j < 1000; j++) + { + if (j == 500) break out1; + } + j = 2001; + } + j = 2002; +} + +// 'breaking out of a "for" loop with a "label"' +new TestCase ( SECTION, 'breaking out of a "for" loop with a "label"', + 500, j); + +i = 0; + +while (i < 1000) +{ + if (i == 100) break; + i++; +} + +// 'breaking out of a "while" loop' +new TestCase ( SECTION, 'breaking out of a "while" loop', + 100, i ); + + +j = 2000; +i = 0; + +out3: +while (i < 1000) +{ + if (i == 100) + { + j = 0; + out4: + while (j < 1000) + { + if (j == 500) break out3; + j++; + } + j = 2001; + } + j = 2002; + i++; +} + +// 'breaking out of a "while" loop with a "label"' +new TestCase ( SECTION, 'breaking out of a "while" loop with a "label"', + 500, j); + +i = 0; + +do +{ + if (i == 100) break; + i++; +} while (i < 1000); + +// 'breaking out of a "do" loop' +new TestCase ( SECTION, 'breaking out of a "do" loop', + 100, i ); + +j = 2000; +i = 0; + +out5: +do +{ + if (i == 100) + { + j = 0; + out6: + do + { + if (j == 500) break out5; + j++; + }while (j < 1000); + j = 2001; + } + j = 2002; + i++; +}while (i < 1000); + +// 'breaking out of a "do" loop with a "label"' +new TestCase ( SECTION, 'breaking out of a "do" loop with a "label"', + 500, j); + +test(); diff --git a/source/spidermonkey-tests/js1_2/statements/browser.js b/source/spidermonkey-tests/js1_2/statements/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/statements/continue.js b/source/spidermonkey-tests/js1_2/statements/continue.js new file mode 100644 index 00000000..0017ba88 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/statements/continue.js @@ -0,0 +1,143 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: continue.js + Description: 'Tests the continue statement' + + Author: Nick Lerissa + Date: March 18, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'statements: continue'; + +writeHeaderToLog("Executing script: continue.js"); +writeHeaderToLog( SECTION + " "+ TITLE); + +var i,j; + +j = 0; +for (i = 0; i < 200; i++) +{ + if (i == 100) + continue; + j++; +} + +// '"continue" in a "for" loop' +new TestCase ( SECTION, '"continue" in "for" loop', + 199, j); + + +j = 0; +out1: +for (i = 0; i < 1000; i++) +{ + if (i == 100) + { + out2: + for (var k = 0; k < 1000; k++) + { + if (k == 500) continue out1; + } + j = 3000; + } + j++; +} + +// '"continue" in a "for" loop with a "label"' +new TestCase ( SECTION, '"continue" in "for" loop with a "label"', + 999, j); + +i = 0; +j = 1; + +while (i != j) +{ + i++; + if (i == 100) continue; + j++; +} + +// '"continue" in a "while" loop' +new TestCase ( SECTION, '"continue" in a "while" loop', + 100, j ); + +j = 0; +i = 0; +out3: +while (i < 1000) +{ + if (i == 100) + { + var k = 0; + out4: + while (k < 1000) + { + if (k == 500) + { + i++; + continue out3; + } + k++; + } + j = 3000; + } + j++; + i++; +} + +// '"continue" in a "while" loop with a "label"' +new TestCase ( SECTION, '"continue" in a "while" loop with a "label"', + 999, j); + +i = 0; +j = 1; + +do +{ + i++; + if (i == 100) continue; + j++; +} while (i != j); + + +// '"continue" in a "do" loop' +new TestCase ( SECTION, '"continue" in a "do" loop', + 100, j ); + +j = 0; +i = 0; +out5: +do +{ + if (i == 100) + { + var k = 0; + out6: + do + { + if (k == 500) + { + i++; + continue out5; + } + k++; + }while (k < 1000); + j = 3000; + } + j++; + i++; +}while (i < 1000); + +// '"continue" in a "do" loop with a "label"' +new TestCase ( SECTION, '"continue" in a "do" loop with a "label"', + 999, j); + +test(); diff --git a/source/spidermonkey-tests/js1_2/statements/do_while.js b/source/spidermonkey-tests/js1_2/statements/do_while.js new file mode 100644 index 00000000..90ad5117 --- /dev/null +++ b/source/spidermonkey-tests/js1_2/statements/do_while.js @@ -0,0 +1,35 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: do_while.js + Description: 'This tests the new do_while loop' + + Author: Nick Lerissa + Date: Fri Feb 13 09:58:28 PST 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +startTest(); +var TITLE = 'statements: do_while'; + +writeHeaderToLog('Executing script: do_while.js'); +writeHeaderToLog( SECTION + " "+ TITLE); + +var done = false; +var x = 0; +do +{ + if (x++ == 3) done = true; +} while (!done); + +new TestCase( SECTION, "do_while ", + 4, x); + +//load('d:/javascript/tests/output/statements/do_while.js') +test(); + diff --git a/source/spidermonkey-tests/js1_2/statements/shell.js b/source/spidermonkey-tests/js1_2/statements/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/statements/switch.js b/source/spidermonkey-tests/js1_2/statements/switch.js new file mode 100644 index 00000000..c7d3548d --- /dev/null +++ b/source/spidermonkey-tests/js1_2/statements/switch.js @@ -0,0 +1,96 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: switch.js + Description: 'Tests the switch statement' + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=323696 + + Author: Nick Lerissa + Date: March 19, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'statements: switch'; +var BUGNUMBER="323696"; + +startTest(); +writeHeaderToLog("Executing script: switch.js"); +writeHeaderToLog( SECTION + " "+ TITLE); + + +var var1 = "match string"; +var match1 = false; +var match2 = false; +var match3 = false; + +switch (var1) +{ +case "match string": + match1 = true; +case "bad string 1": + match2 = true; + break; +case "bad string 2": + match3 = true; +} + +new TestCase ( SECTION, 'switch statement', + true, match1); + +new TestCase ( SECTION, 'switch statement', + true, match2); + +new TestCase ( SECTION, 'switch statement', + false, match3); + +var var2 = 3; + +var match1 = false; +var match2 = false; +var match3 = false; +var match4 = false; +var match5 = false; + +switch (var2) +{ +case 1: +/* switch (var1) + { + case "foo": + match1 = true; + break; + case 3: + match2 = true; + break; + }*/ + match3 = true; + break; +case 2: + match4 = true; + break; +case 3: + match5 = true; + break; +} +new TestCase ( SECTION, 'switch statement', + false, match1); + +new TestCase ( SECTION, 'switch statement', + false, match2); + +new TestCase ( SECTION, 'switch statement', + false, match3); + +new TestCase ( SECTION, 'switch statement', + false, match4); + +new TestCase ( SECTION, 'switch statement', + true, match5); + +test(); diff --git a/source/spidermonkey-tests/js1_2/statements/switch2.js b/source/spidermonkey-tests/js1_2/statements/switch2.js new file mode 100644 index 00000000..86b2251f --- /dev/null +++ b/source/spidermonkey-tests/js1_2/statements/switch2.js @@ -0,0 +1,158 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + Filename: switch2.js + Description: 'Tests the switch statement' + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=323696 + + Author: Norris Boyd + Date: July 31, 1998 +*/ + +var SECTION = 'As described in Netscape doc "Whats new in JavaScript 1.2"'; +var VERSION = 'no version'; +var TITLE = 'statements: switch'; +var BUGNUMBER="323626"; + +startTest(); +writeHeaderToLog("Executing script: switch2.js"); +writeHeaderToLog( SECTION + " "+ TITLE); + +// test defaults not at the end; regression test for a bug that +// nearly made it into 4.06 +function f0(i) { + switch(i) { + default: + case "a": + case "b": + return "ab*" + case "c": + return "c"; + case "d": + return "d"; + } + return ""; +} +new TestCase(SECTION, 'switch statement', + f0("a"), "ab*"); + +new TestCase(SECTION, 'switch statement', + f0("b"), "ab*"); + +new TestCase(SECTION, 'switch statement', + f0("*"), "ab*"); + +new TestCase(SECTION, 'switch statement', + f0("c"), "c"); + +new TestCase(SECTION, 'switch statement', + f0("d"), "d"); + +function f1(i) { + switch(i) { + case "a": + case "b": + default: + return "ab*" + case "c": + return "c"; + case "d": + return "d"; + } + return ""; +} + +new TestCase(SECTION, 'switch statement', + f1("a"), "ab*"); + +new TestCase(SECTION, 'switch statement', + f1("b"), "ab*"); + +new TestCase(SECTION, 'switch statement', + f1("*"), "ab*"); + +new TestCase(SECTION, 'switch statement', + f1("c"), "c"); + +new TestCase(SECTION, 'switch statement', + f1("d"), "d"); + +// Switch on integer; will use TABLESWITCH opcode in C engine +function f2(i) { + switch (i) { + case 0: + case 1: + return 1; + case 2: + return 2; + } + // with no default, control will fall through + return 3; +} + +new TestCase(SECTION, 'switch statement', + f2(0), 1); + +new TestCase(SECTION, 'switch statement', + f2(1), 1); + +new TestCase(SECTION, 'switch statement', + f2(2), 2); + +new TestCase(SECTION, 'switch statement', + f2(3), 3); + +// empty switch: make sure expression is evaluated +var se = 0; +switch (se = 1) { +} +new TestCase(SECTION, 'switch statement', + se, 1); + +// only default +se = 0; +switch (se) { +default: + se = 1; +} +new TestCase(SECTION, 'switch statement', + se, 1); + +// in loop, break should only break out of switch +se = 0; +for (var i=0; i < 2; i++) { + switch (i) { + case 0: + case 1: + break; + } + se = 1; +} +new TestCase(SECTION, 'switch statement', + se, 1); + +// test "fall through" +se = 0; +i = 0; +switch (i) { +case 0: + se++; + /* fall through */ +case 1: + se++; + break; +} +new TestCase(SECTION, 'switch statement', + se, 2); +print("hi"); + +test(); + +// Needed: tests for evaluation time of case expressions. +// This issue was under debate at ECMA, so postponing for now. + diff --git a/source/spidermonkey-tests/js1_2/version120/boolean-001.js b/source/spidermonkey-tests/js1_2/version120/boolean-001.js new file mode 100644 index 00000000..180d2c7d --- /dev/null +++ b/source/spidermonkey-tests/js1_2/version120/boolean-001.js @@ -0,0 +1,44 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: boolean-001.js + * Description: + * + * In JavaScript 1.2, new Boolean(false) evaluates to false. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "boolean-001.js"; +var VERSION = "JS1_2"; +startTest(); +var TITLE = "new Boolean(false) should evaluate to false"; + +writeHeaderToLog( SECTION + " "+ TITLE); + +BooleanTest( "new Boolean(true)", new Boolean(true), true ); +BooleanTest( "new Boolean(false)", new Boolean(false), false ); +BooleanTest( "true", true, true ); +BooleanTest( "false", false, false ); + +test(); + +function BooleanTest( string, object, expect ) { + if ( object ) { + result = true; + } else { + result = false; + } + + new TestCase( + SECTION, + string, + expect, + result ); +} + diff --git a/source/spidermonkey-tests/js1_2/version120/browser.js b/source/spidermonkey-tests/js1_2/version120/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_2/version120/regress-99663.js b/source/spidermonkey-tests/js1_2/version120/regress-99663.js new file mode 100644 index 00000000..7da6f6cd --- /dev/null +++ b/source/spidermonkey-tests/js1_2/version120/regress-99663.js @@ -0,0 +1,132 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 99663; +var summary = 'Regression test for Bugzilla bug 99663'; +/* + * This testcase expects error messages containing + * the phrase 'read-only' or something similar - + */ +var READONLY = /read\s*-?\s*only/; +var READONLY_TRUE = 'a "read-only" error'; +var READONLY_FALSE = 'Error: '; +var FAILURE = 'NO ERROR WAS GENERATED!'; +var status = ''; +var actual = ''; +var expect= ''; +var statusitems = []; +var expectedvalues = []; +var actualvalues = []; + + +/* + * These MUST be compiled in JS1.2 or less for the test to work - see above + */ +function f1() +{ + with (it) + { + for (rdonly in this); + } +} + + +function f2() +{ + for (it.rdonly in this); +} + + +function f3(s) +{ + for (it[s] in this); +} + + + +/* + * Begin testing by capturing actual vs. expected values. + * Initialize to FAILURE; this will get reset if all goes well - + */ +actual = FAILURE; +try +{ + f1(); +} +catch(e) +{ + actual = readOnly(e.message); +} +expect= READONLY_TRUE; +status = 'Section 1 of test - got ' + actual; +addThis(); + + +actual = FAILURE; +try +{ + f2(); +} +catch(e) +{ + actual = readOnly(e.message); +} +expect= READONLY_TRUE; +status = 'Section 2 of test - got ' + actual; +addThis(); + + +actual = FAILURE; +try +{ + f3('rdonly'); +} +catch(e) +{ + actual = readOnly(e.message); +} +expect= READONLY_TRUE; +status = 'Section 3 of test - got ' + actual; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function readOnly(msg) +{ + if (msg.match(READONLY)) + return READONLY_TRUE; + return READONLY_FALSE + msg; +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + print ('Bug Number ' + bug); + print ('STATUS: ' + summary); + + for (var i=0; i version(100) + * 120 + * js> eval("function f(){}function g(){}") + * js> version(120); + * 100 + * js> eval("function f(){}function g(){}") + * js> + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "function-001.js"; +var VERSION = "JS_1.3"; +var TITLE = "functions not separated by semicolons are errors in version 120 and higher"; +var BUGNUMBER="10278"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( + SECTION, + "eval(\"function f(){}function g(){}\")", + "error", + eval("function f(){}function g(){}") ); + +test(); + + diff --git a/source/spidermonkey-tests/js1_3/Script/function-002.js b/source/spidermonkey-tests/js1_3/Script/function-002.js new file mode 100644 index 00000000..144e2e4b --- /dev/null +++ b/source/spidermonkey-tests/js1_3/Script/function-002.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: function-002.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=249579 + + function definitions in conditional statements should be allowed. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "function-002"; +var VERSION = "JS1_3"; +var TITLE = "Regression test for 249579"; +var BUGNUMBER="249579"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( + SECTION, + "0?function(){}:0", + 0, + 0?function(){}:0 ); + + +bar = true; +foo = bar ? function () { return true; } : function() { return false; }; + +new TestCase( + SECTION, + "bar = true; foo = bar ? function () { return true; } : function() { return false; }; foo()", + true, + foo() ); + + +test(); + diff --git a/source/spidermonkey-tests/js1_3/Script/in-001.js b/source/spidermonkey-tests/js1_3/Script/in-001.js new file mode 100644 index 00000000..298cf594 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/Script/in-001.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: in-001.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=196109 + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "in-001"; +var VERSION = "JS1_3"; +var TITLE = "Regression test for 196109"; +var BUGNUMBER="196109"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +o = {}; +o.foo = 'sil'; + +new TestCase( + SECTION, + "\"foo\" in o", + true, + "foo" in o ); + +test(); diff --git a/source/spidermonkey-tests/js1_3/Script/new-001.js b/source/spidermonkey-tests/js1_3/Script/new-001.js new file mode 100644 index 00000000..9e7c5c28 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/Script/new-001.js @@ -0,0 +1,89 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: new-001.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=76103 + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "new-001"; +var VERSION = "JS1_3"; +var TITLE = "new-001"; +var BUGNUMBER="31567"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Test_One (x) { + this.v = x+1; + return x*2 + } + +function Test_Two( x, y ) { + this.v = x; + return y; +} + +new TestCase( + SECTION, + "Test_One(18)", + 36, + Test_One(18) ); + +new TestCase( + SECTION, + "new Test_One(18)", + "[object Object]", + new Test_One(18) +"" ); + +new TestCase( + SECTION, + "new Test_One(18).v", + 19, + new Test_One(18).v ); + +new TestCase( + SECTION, + "Test_Two(2,7)", + 7, + Test_Two(2,7) ); + +new TestCase( + SECTION, + "new Test_Two(2,7)", + "[object Object]", + new Test_Two(2,7) +"" ); + +new TestCase( + SECTION, + "new Test_Two(2,7).v", + 2, + new Test_Two(2,7).v ); + +new TestCase( + SECTION, + "new (Function)(\"x\", \"return x+3\")(5,6)", + 8, + new (Function)("x","return x+3")(5,6) ); + +new TestCase( + SECTION, + "new new Test_Two(String, 2).v(0123)", + "83", + new new Test_Two(String, 2).v(0123) +""); + +new TestCase( + SECTION, + "new new Test_Two(String, 2).v(0123).length", + 2, + new new Test_Two(String, 2).v(0123).length ); + +test(); diff --git a/source/spidermonkey-tests/js1_3/Script/shell.js b/source/spidermonkey-tests/js1_3/Script/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/Script/switch-001.js b/source/spidermonkey-tests/js1_3/Script/switch-001.js new file mode 100644 index 00000000..aad1505d --- /dev/null +++ b/source/spidermonkey-tests/js1_3/Script/switch-001.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: switch-001.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315767 + + Verify that switches do not use strict equality in + versions of JavaScript < 1.4 + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "switch-001"; +var VERSION = "JS1_3"; +var TITLE = "switch-001"; +var BUGNUMBER="315767"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +result = "fail: did not enter switch"; + +switch (true) { +case 1: + result = "fail: for backwards compatibility, version 130 use strict equality"; + break; +case true: + result = "pass"; + break; +default: + result = "fail: evaluated default statement"; +} + +new TestCase( + SECTION, + "switch / case should use strict equality in version of JS < 1.4", + "pass", + result ); + + + +test(); + diff --git a/source/spidermonkey-tests/js1_3/browser.js b/source/spidermonkey-tests/js1_3/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/extensions/browser.js b/source/spidermonkey-tests/js1_3/extensions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/extensions/proto_10.js b/source/spidermonkey-tests/js1_3/extensions/proto_10.js new file mode 100644 index 00000000..3cfc919e --- /dev/null +++ b/source/spidermonkey-tests/js1_3/extensions/proto_10.js @@ -0,0 +1,122 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_10.js + Section: + Description: Determining Instance Relationships + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_10"; +var VERSION = "JS1_3"; +var TITLE = "Determining Instance Relationships"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object, constructor ) { + while ( object != null ) { + if ( object == constructor.prototype ) { + return true; + } + object = object.__proto__; + } + return false; +} +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} + +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer ( name, projs, machine ) { + this.base = WorkerBee; + this.base( name, "engineering", projs ) + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + +var pat = new Engineer(); + +new TestCase( SECTION, + "pat.__proto__ == Engineer.prototype", + true, + pat.__proto__ == Engineer.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__ == WorkerBee.prototype", + true, + pat.__proto__.__proto__ == WorkerBee.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__.__proto__ == Employee.prototype", + true, + pat.__proto__.__proto__.__proto__ == Employee.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype", + true, + pat.__proto__.__proto__.__proto__.__proto__ == Object.prototype ); + +new TestCase( SECTION, + "pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null", + true, + pat.__proto__.__proto__.__proto__.__proto__.__proto__ == null ); + + +new TestCase( SECTION, + "InstanceOf( pat, Engineer )", + true, + InstanceOf( pat, Engineer ) ); + +new TestCase( SECTION, + "InstanceOf( pat, WorkerBee )", + true, + InstanceOf( pat, WorkerBee ) ); + +new TestCase( SECTION, + "InstanceOf( pat, Employee )", + true, + InstanceOf( pat, Employee ) ); + +new TestCase( SECTION, + "InstanceOf( pat, Object )", + true, + InstanceOf( pat, Object ) ); + +new TestCase( SECTION, + "InstanceOf( pat, SalesPerson )", + false, + InstanceOf ( pat, SalesPerson ) ); +test(); diff --git a/source/spidermonkey-tests/js1_3/extensions/proto_2.js b/source/spidermonkey-tests/js1_3/extensions/proto_2.js new file mode 100644 index 00000000..7a0446f1 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/extensions/proto_2.js @@ -0,0 +1,91 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_2.js + Section: + Description: new PrototypeObject + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_2"; +var VERSION = "JS1_3"; +var TITLE = "new PrototypeObject"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee () { + this.name = ""; + this.dept = "general"; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee () { + this.projects = new Array(); +} + +WorkerBee.prototype = new Employee; + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee; + +function Engineer () { + this.dept = "engineering"; + this.machine = ""; +} +Engineer.prototype = new WorkerBee; + + +var employee = new Employee(); +var manager = new Manager(); +var workerbee = new WorkerBee(); +var salesperson = new SalesPerson(); +var engineer = new Engineer(); + +new TestCase( SECTION, + "employee.__proto__ == Employee.prototype", + true, + employee.__proto__ == Employee.prototype ); + +new TestCase( SECTION, + "manager.__proto__ == Manager.prototype", + true, + manager.__proto__ == Manager.prototype ); + +new TestCase( SECTION, + "workerbee.__proto__ == WorkerBee.prototype", + true, + workerbee.__proto__ == WorkerBee.prototype ); + +new TestCase( SECTION, + "salesperson.__proto__ == SalesPerson.prototype", + true, + salesperson.__proto__ == SalesPerson.prototype ); + +new TestCase( SECTION, + "engineer.__proto__ == Engineer.prototype", + true, + engineer.__proto__ == Engineer.prototype ); + +test(); + diff --git a/source/spidermonkey-tests/js1_3/extensions/proto_5.js b/source/spidermonkey-tests/js1_3/extensions/proto_5.js new file mode 100644 index 00000000..3255c9e2 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/extensions/proto_5.js @@ -0,0 +1,115 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_5.js + Section: + Description: Logical OR || in Constructors + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + This tests the logical OR opererator || syntax in constructors. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_5"; +var VERSION = "JS1_3"; +var TITLE = "Logical OR || in Constructors"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee ( projs ) { + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer ( machine ) { + this.dept = "engineering"; + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + + +var pat = new Engineer( "indy" ); + +var les = new Engineer(); + +new TestCase( SECTION, + "var pat = new Engineer(\"indy\"); pat.name", + "", + pat.name ); + +new TestCase( SECTION, + "pat.dept", + "engineering", + pat.dept ); + +new TestCase( SECTION, + "pat.projects.length", + 0, + pat.projects.length ); + +new TestCase( SECTION, + "pat.machine", + "indy", + pat.machine ); + +new TestCase( SECTION, + "pat.__proto__ == Engineer.prototype", + true, + pat.__proto__ == Engineer.prototype ); + +new TestCase( SECTION, + "var les = new Engineer(); les.name", + "", + les.name ); + +new TestCase( SECTION, + "les.dept", + "engineering", + les.dept ); + +new TestCase( SECTION, + "les.projects.length", + 0, + les.projects.length ); + +new TestCase( SECTION, + "les.machine", + "", + les.machine ); + +new TestCase( SECTION, + "les.__proto__ == Engineer.prototype", + true, + les.__proto__ == Engineer.prototype ); + + +test(); diff --git a/source/spidermonkey-tests/js1_3/extensions/script-001.js b/source/spidermonkey-tests/js1_3/extensions/script-001.js new file mode 100644 index 00000000..0ff83c8c --- /dev/null +++ b/source/spidermonkey-tests/js1_3/extensions/script-001.js @@ -0,0 +1,140 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: script-001.js + Section: + Description: new NativeScript object + + + js> parseInt(123,"hi") + 123 + js> parseInt(123, "blah") + 123 + js> s + js: s is not defined + js> s = new Script + + undefined; + + + js> s = new Script() + + undefined; + + + js> s.getJSClass + js> s.getJSClass = Object.prototype.toString + function toString() { + [native code] + } + + js> s.getJSClass() + [object Script] + js> s.compile( "return 3+4" ) + js: JavaScript exception: javax.javascript.EvaluatorException: " s.compile( "3+4" ) + + 3 + 4; + + + js> typeof s + function + js> s() + Jit failure! + invalid opcode: 1 + Jit Pass1 Failure! + javax/javascript/gen/c13 initScript (Ljavax/javascript/Scriptable;)V + An internal JIT error has occurred. Please report this with .class + jit-bugs@itools.symantec.com + + 7 + js> s.compile("3+4") + + 3 + 4; + + + js> s() + Jit failure! + invalid opcode: 1 + Jit Pass1 Failure! + javax/javascript/gen/c17 initScript (Ljavax/javascript/Scriptable;)V + An internal JIT error has occurred. Please report this with .class + jit-bugs@itools.symantec.com + + 7 + js> quit() + + C:\src\ns_priv\js\tests\ecma>shell + + C:\src\ns_priv\js\tests\ecma>java -classpath c:\cafe\java\JavaScope; + :\src\ns_priv\js\tests javax.javascript.examples.Shell + Symantec Java! JustInTime Compiler Version 210.054 for JDK 1.1.2 + Copyright (C) 1996-97 Symantec Corporation + + js> s = new Script("3+4") + + 3 + 4; + + + js> s() + 7 + js> s2 = new Script(); + + undefined; + + + js> s.compile( "3+4") + + 3 + 4; + + + js> s() + Jit failure! + invalid opcode: 1 + Jit Pass1 Failure! + javax/javascript/gen/c7 initScript (Ljavax/javascript/Scriptable;)V + An internal JIT error has occurred. Please report this with .class + jit-bugs@itools.symantec.com + + 7 + js> quit() + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "script-001"; +var VERSION = "JS1_3"; +var TITLE = "NativeScript"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); + new TestCase( SECTION, + "var s = new Script(); typeof s", + "Script not supported, test skipped.", + "Script not supported, test skipped." ); +} +else +{ + var s = new Script(); + s.getJSClass = Object.prototype.toString; + + new TestCase( SECTION, + "var s = new Script(); typeof s", + "function", + typeof s ); + + new TestCase( SECTION, + "s.getJSClass()", + "[object Script]", + s.getJSClass() ); +} + +test(); diff --git a/source/spidermonkey-tests/js1_3/extensions/shell.js b/source/spidermonkey-tests/js1_3/extensions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/inherit/browser.js b/source/spidermonkey-tests/js1_3/inherit/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_1.js b/source/spidermonkey-tests/js1_3/inherit/proto_1.js new file mode 100644 index 00000000..79911f34 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_1.js @@ -0,0 +1,136 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_1.js + Section: + Description: new PrototypeObject + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_1"; +var VERSION = "JS1_3"; +var TITLE = "new PrototypeObject"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee () { + this.name = ""; + this.dept = "general"; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee () { + this.projects = new Array(); +} +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer () { + this.dept = "engineering"; + this.machine = ""; +} +Engineer.prototype = new WorkerBee(); + +var jim = new Employee(); + +new TestCase( SECTION, + "jim = new Employee(); jim.name", + "", + jim.name ); + + +new TestCase( SECTION, + "jim = new Employee(); jim.dept", + "general", + jim.dept ); + +var sally = new Manager(); + +new TestCase( SECTION, + "sally = new Manager(); sally.name", + "", + sally.name ); +new TestCase( SECTION, + "sally = new Manager(); sally.dept", + "general", + sally.dept ); + +new TestCase( SECTION, + "sally = new Manager(); sally.reports.length", + 0, + sally.reports.length ); + +new TestCase( SECTION, + "sally = new Manager(); typeof sally.reports", + "object", + typeof sally.reports ); + +var fred = new SalesPerson(); + +new TestCase( SECTION, + "fred = new SalesPerson(); fred.name", + "", + fred.name ); + +new TestCase( SECTION, + "fred = new SalesPerson(); fred.dept", + "sales", + fred.dept ); + +new TestCase( SECTION, + "fred = new SalesPerson(); fred.quota", + 100, + fred.quota ); + +new TestCase( SECTION, + "fred = new SalesPerson(); fred.projects.length", + 0, + fred.projects.length ); + +var jane = new Engineer(); + +new TestCase( SECTION, + "jane = new Engineer(); jane.name", + "", + jane.name ); + +new TestCase( SECTION, + "jane = new Engineer(); jane.dept", + "engineering", + jane.dept ); + +new TestCase( SECTION, + "jane = new Engineer(); jane.projects.length", + 0, + jane.projects.length ); + +new TestCase( SECTION, + "jane = new Engineer(); jane.machine", + "", + jane.machine ); + + +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_10.js b/source/spidermonkey-tests/js1_3/inherit/proto_10.js new file mode 100644 index 00000000..4a671f9c --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_10.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_10.js + Section: + Description: Determining Instance Relationships + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_10"; +var VERSION = "JS1_3"; +var TITLE = "Determining Instance Relationships"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function InstanceOf( object, constructor ) { + return object instanceof constructor; +} +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} + +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer ( name, projs, machine ) { + this.base = WorkerBee; + this.base( name, "engineering", projs ) + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + +var pat = new Engineer(); + +new TestCase( SECTION, + "InstanceOf( pat, Engineer )", + true, + InstanceOf( pat, Engineer ) ); + +new TestCase( SECTION, + "InstanceOf( pat, WorkerBee )", + true, + InstanceOf( pat, WorkerBee ) ); + +new TestCase( SECTION, + "InstanceOf( pat, Employee )", + true, + InstanceOf( pat, Employee ) ); + +new TestCase( SECTION, + "InstanceOf( pat, Object )", + true, + InstanceOf( pat, Object ) ); + +new TestCase( SECTION, + "InstanceOf( pat, SalesPerson )", + false, + InstanceOf ( pat, SalesPerson ) ); +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_11.js b/source/spidermonkey-tests/js1_3/inherit/proto_11.js new file mode 100644 index 00000000..02ea4b47 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_11.js @@ -0,0 +1,86 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_11.js + Section: + Description: Global Information in Constructors + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_11"; +var VERSION = "JS1_3"; +var TITLE = "Global Information in Constructors"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var idCounter = 1; + + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; + this.id = idCounter++; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer ( name, projs, machine ) { + this.base = WorkerBee; + this.base( name, "engineering", projs ) + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + +var pat = new Employee( "Toonces, Pat", "Tech Pubs" ) + var terry = new Employee( "O'Sherry Terry", "Marketing" ); + +var les = new Engineer( "Morris, Les", new Array("JavaScript"), "indy" ); + +new TestCase( SECTION, + "pat.id", + 5, + pat.id ); + +new TestCase( SECTION, + "terry.id", + 6, + terry.id ); + +new TestCase( SECTION, + "les.id", + 7, + les.id ); + + +test(); + diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_12.js b/source/spidermonkey-tests/js1_3/inherit/proto_12.js new file mode 100644 index 00000000..c223bb3f --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_12.js @@ -0,0 +1,112 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_12.js + Section: + Description: new PrototypeObject + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + No Multiple Inheritance + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_12"; +var VERSION = "JS1_3"; +var TITLE = "No Multiple Inheritance"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; + this.id = idCounter++; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Hobbyist( hobby ) { + this.hobby = hobby || "yodeling"; +} + +function Engineer ( name, projs, machine, hobby ) { + this.base1 = WorkerBee; + this.base1( name, "engineering", projs ) + + this.base2 = Hobbyist; + this.base2( hobby ); + + this.projects = projs || new Array(); + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + +var idCounter = 1; + +var les = new Engineer( "Morris, Les", new Array("JavaScript"), "indy" ); + +Hobbyist.prototype.equipment = [ "horn", "mountain", "goat" ]; + +new TestCase( SECTION, + "les.name", + "Morris, Les", + les.name ); + +new TestCase( SECTION, + "les.dept", + "engineering", + les.dept ); + +Array.prototype.getClass = Object.prototype.toString; + +new TestCase( SECTION, + "les.projects.getClass()", + "[object Array]", + les.projects.getClass() ); + +new TestCase( SECTION, + "les.projects[0]", + "JavaScript", + les.projects[0] ); + +new TestCase( SECTION, + "les.machine", + "indy", + les.machine ); + +new TestCase( SECTION, + "les.hobby", + "yodeling", + les.hobby ); + +new TestCase( SECTION, + "les.equpment", + void 0, + les.equipment ); + +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_3.js b/source/spidermonkey-tests/js1_3/inherit/proto_3.js new file mode 100644 index 00000000..0e9183bf --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_3.js @@ -0,0 +1,73 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_3.js + Section: + Description: Adding properties to an instance + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_3"; +var VERSION = "JS1_3"; +var TITLE = "Adding properties to an Instance"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee () { + this.name = ""; + this.dept = "general"; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee () { + this.projects = new Array(); +} + +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer () { + this.dept = "engineering"; + this.machine = ""; +} +Engineer.prototype = new WorkerBee(); + +var jim = new Employee(); +var pat = new Employee(); + +jim.bonus = 300; + +new TestCase( SECTION, + "jim = new Employee(); jim.bonus = 300; jim.bonus", + 300, + jim.bonus ); + + +new TestCase( SECTION, + "pat = new Employee(); pat.bonus", + void 0, + pat.bonus ); +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_4.js b/source/spidermonkey-tests/js1_3/inherit/proto_4.js new file mode 100644 index 00000000..9fe1fe0b --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_4.js @@ -0,0 +1,125 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_4.js + Section: + Description: new PrototypeObject + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + If you add a property to an object in the prototype chain, instances of + objects that derive from that prototype should inherit that property, even + if they were instatiated after the property was added to the prototype object. + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_3"; +var VERSION = "JS1_3"; +var TITLE = "Adding properties to the prototype"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee () { + this.name = ""; + this.dept = "general"; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee () { + this.projects = new Array(); +} + +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer () { + this.dept = "engineering"; + this.machine = ""; +} +Engineer.prototype = new WorkerBee(); + +var jim = new Employee(); +var terry = new Engineer(); +var sean = new SalesPerson(); +var wally = new Manager(); + +Employee.prototype.specialty = "none"; + +var pat = new Employee(); +var leslie = new Engineer(); +var bubbles = new SalesPerson(); +var furry = new Manager(); + +Engineer.prototype.specialty = "code"; + +var chris = new Engineer(); + + +new TestCase( SECTION, + "jim = new Employee(); jim.specialty", + "none", + jim.specialty ); + +new TestCase( SECTION, + "terry = new Engineer(); terry.specialty", + "code", + terry.specialty ); + +new TestCase( SECTION, + "sean = new SalesPerson(); sean.specialty", + "none", + sean.specialty ); + +new TestCase( SECTION, + "wally = new Manager(); wally.specialty", + "none", + wally.specialty ); + +new TestCase( SECTION, + "furry = new Manager(); furry.specialty", + "none", + furry.specialty ); + +new TestCase( SECTION, + "pat = new Employee(); pat.specialty", + "none", + pat.specialty ); + +new TestCase( SECTION, + "leslie = new Engineer(); leslie.specialty", + "code", + leslie.specialty ); + +new TestCase( SECTION, + "bubbles = new SalesPerson(); bubbles.specialty", + "none", + bubbles.specialty ); + + +new TestCase( SECTION, + "chris = new Employee(); chris.specialty", + "code", + chris.specialty ); +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_6.js b/source/spidermonkey-tests/js1_3/inherit/proto_6.js new file mode 100644 index 00000000..3ffc0b43 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_6.js @@ -0,0 +1,140 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_6.js + Section: + Description: Logical OR || in constructors + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + This tests the logical OR opererator || syntax in constructors. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_6"; +var VERSION = "JS1_3"; +var TITLE = "Logical OR || in constructors"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} +function Manager () { + this.reports = []; +} +Manager.prototype = new Employee(); + +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} + +WorkerBee.prototype = new Employee(); + +function SalesPerson () { + this.dept = "sales"; + this.quota = 100; +} +SalesPerson.prototype = new WorkerBee(); + +function Engineer ( name, projs, machine ) { + this.base = WorkerBee; + this.base( name, "engineering", projs ) + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + +var pat = new Engineer( "Toonces, Pat", + ["SpiderMonkey", "Rhino"], + "indy" ); + +var les = new WorkerBee( "Morris, Les", + "Training", + ["Hippo"] ) + + var terry = new Employee( "Boomberi, Terry", + "Marketing" ); + +// Pat, the Engineer + +new TestCase( SECTION, + "pat.name", + "Toonces, Pat", + pat.name ); + +new TestCase( SECTION, + "pat.dept", + "engineering", + pat.dept ); + +new TestCase( SECTION, + "pat.projects.length", + 2, + pat.projects.length ); + +new TestCase( SECTION, + "pat.projects[0]", + "SpiderMonkey", + pat.projects[0] ); + +new TestCase( SECTION, + "pat.projects[1]", + "Rhino", + pat.projects[1] ); + +new TestCase( SECTION, + "pat.machine", + "indy", + pat.machine ); + + +// Les, the WorkerBee + +new TestCase( SECTION, + "les.name", + "Morris, Les", + les.name ); + +new TestCase( SECTION, + "les.dept", + "Training", + les.dept ); + +new TestCase( SECTION, + "les.projects.length", + 1, + les.projects.length ); + +new TestCase( SECTION, + "les.projects[0]", + "Hippo", + les.projects[0] ); + +// Terry, the Employee +new TestCase( SECTION, + "terry.name", + "Boomberi, Terry", + terry.name ); + +new TestCase( SECTION, + "terry.dept", + "Marketing", + terry.dept ); +test(); + diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_7.js b/source/spidermonkey-tests/js1_3/inherit/proto_7.js new file mode 100644 index 00000000..fa52daa5 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_7.js @@ -0,0 +1,95 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_7.js + Section: + Description: Adding Properties to the Prototype Object + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + This tests + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_6"; +var VERSION = "JS1_3"; +var TITLE = "Adding properties to the Prototype Object"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function Engineer ( name, projs, machine ) { + this.base = WorkerBee; + this.base( name, "engineering", projs ) + this.machine = machine || ""; +} +// Engineer.prototype = new WorkerBee(); + +var pat = new Engineer( "Toonces, Pat", + ["SpiderMonkey", "Rhino"], + "indy" ); + +Employee.prototype.specialty = "none"; + + +// Pat, the Engineer + +new TestCase( SECTION, + "pat.name", + "Toonces, Pat", + pat.name ); + +new TestCase( SECTION, + "pat.dept", + "engineering", + pat.dept ); + +new TestCase( SECTION, + "pat.projects.length", + 2, + pat.projects.length ); + +new TestCase( SECTION, + "pat.projects[0]", + "SpiderMonkey", + pat.projects[0] ); + +new TestCase( SECTION, + "pat.projects[1]", + "Rhino", + pat.projects[1] ); + +new TestCase( SECTION, + "pat.machine", + "indy", + pat.machine ); + +new TestCase( SECTION, + "pat.specialty", + void 0, + pat.specialty ); + +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_8.js b/source/spidermonkey-tests/js1_3/inherit/proto_8.js new file mode 100644 index 00000000..98e6a473 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_8.js @@ -0,0 +1,93 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_8.js + Section: + Description: Adding Properties to the Prototype Object + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_8"; +var VERSION = "JS1_3"; +var TITLE = "Adding Properties to the Prototype Object"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} +function WorkerBee ( name, dept, projs ) { + this.base = Employee; + this.base( name, dept) + this.projects = projs || new Array(); +} +WorkerBee.prototype = new Employee(); + +function Engineer ( name, projs, machine ) { + this.base = WorkerBee; + this.base( name, "engineering", projs ) + this.machine = machine || ""; +} +Engineer.prototype = new WorkerBee(); + +var pat = new Engineer( "Toonces, Pat", + ["SpiderMonkey", "Rhino"], + "indy" ); + +Employee.prototype.specialty = "none"; + + +// Pat, the Engineer + +new TestCase( SECTION, + "pat.name", + "Toonces, Pat", + pat.name ); + +new TestCase( SECTION, + "pat.dept", + "engineering", + pat.dept ); + +new TestCase( SECTION, + "pat.projects.length", + 2, + pat.projects.length ); + +new TestCase( SECTION, + "pat.projects[0]", + "SpiderMonkey", + pat.projects[0] ); + +new TestCase( SECTION, + "pat.projects[1]", + "Rhino", + pat.projects[1] ); + +new TestCase( SECTION, + "pat.machine", + "indy", + pat.machine ); + +new TestCase( SECTION, + "pat.specialty", + "none", + pat.specialty ); + +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/proto_9.js b/source/spidermonkey-tests/js1_3/inherit/proto_9.js new file mode 100644 index 00000000..d789afc6 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/inherit/proto_9.js @@ -0,0 +1,71 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: proto_9.js + Section: + Description: Local versus Inherited Values + + This tests Object Hierarchy and Inheritance, as described in the document + Object Hierarchy and Inheritance in JavaScript, last modified on 12/18/97 + 15:19:34 on http://devedge.netscape.com/. Current URL: + http://devedge.netscape.com/docs/manuals/communicator/jsobj/contents.htm + + This tests the syntax ObjectName.prototype = new PrototypeObject using the + Employee example in the document referenced above. + + This tests + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "proto_9"; +var VERSION = "JS1_3"; +var TITLE = "Local versus Inherited Values"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Employee ( name, dept ) { + this.name = name || ""; + this.dept = dept || "general"; +} +function WorkerBee ( name, dept, projs ) { + this.projects = new Array(); +} +WorkerBee.prototype = new Employee(); + +var pat = new WorkerBee() + + Employee.prototype.specialty = "none"; +Employee.prototype.name = "Unknown"; + +Array.prototype.getClass = Object.prototype.toString; + +// Pat, the WorkerBee + +new TestCase( SECTION, + "pat.name", + "", + pat.name ); + +new TestCase( SECTION, + "pat.dept", + "general", + pat.dept ); + +new TestCase( SECTION, + "pat.projects.getClass", + "[object Array]", + pat.projects.getClass() ); + +new TestCase( SECTION, + "pat.projects.length", + 0, + pat.projects.length ); + +test(); diff --git a/source/spidermonkey-tests/js1_3/inherit/shell.js b/source/spidermonkey-tests/js1_3/inherit/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/jsref.js b/source/spidermonkey-tests/js1_3/jsref.js new file mode 100644 index 00000000..3375fe13 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/jsref.js @@ -0,0 +1,195 @@ +var completed = false; +var testcases; + +SECTION = ""; +VERSION = ""; + +BUGNUMBER =""; +var EXCLUDE = ""; + +TZ_DIFF = -8; + +var TT = ""; +var TT_ = ""; +var BR = ""; +var NBSP = " "; +var CR = "\n"; +var FONT = ""; +var FONT_ = ""; +var FONT_RED = ""; +var FONT_GREEN = ""; +var B = ""; +var B_ = "" +var H2 = ""; +var H2_ = ""; +var HR = ""; +var DEBUG = false; + +version(130); + +var PASSED = " PASSED!" +var FAILED = " FAILED! expected: "; + +function test() { + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ + testcases[tc].actual ); + + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); +} + +function TestCase( n, d, e, a ) { + this.name = n; + this.description = d; + this.expect = e; + this.actual = a; + this.passed = true; + this.reason = ""; + + this.bugnumber = BUGNUMBER; + + this.passed = getTestCaseResult( this.expect, this.actual ); + if ( DEBUG ) { + print( "added " + this.description ); + } +} +function startTest() { + // JavaScript 1.3 is supposed to be compliant ecma version 1.0 + if ( VERSION == "ECMA_1" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.3" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.2" ) { + version ( "120" ); + } + if ( VERSION == "JS_1.1" ) { + version ( "110" ); + } + // for ecma version 2.0, we will leave the javascript version to + // the default ( for now ). +} +function getTestCaseResult( expect, actual ) { + // because ( NaN == NaN ) always returns false, need to do + // a special compare to see if we got the right result. + if ( actual != actual ) { + if ( typeof actual == "object" ) { + actual = "NaN object"; + } else { + actual = "NaN number"; + } + } + if ( expect != expect ) { + if ( typeof expect == "object" ) { + expect = "NaN object"; + } else { + expect = "NaN number"; + } + } + + var passed = ( expect == actual ) ? true : false; + + // if both objects are numbers + // need to replace w/ IEEE standard for rounding + if ( !passed + && typeof(actual) == "number" + && typeof(expect) == "number" + ) { + if ( Math.abs(actual-expect) < 0.0000001 ) { + passed = true; + } + } + + // verify type is the same + if ( typeof(expect) != typeof(actual) ) { + passed = false; + } + + return passed; +} +function writeTestCaseResult( expect, actual, string ) { + var passed = getTestCaseResult( expect, actual ); + writeFormattedResult( expect, actual, string, passed ); + return passed; +} +function writeFormattedResult( expect, actual, string, passed ) { + var s = TT + string ; + + for ( k = 0; + k < (60 - string.length >= 0 ? 60 - string.length : 5) ; + k++ ) { + } + + s += B ; + s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ; + + print( s + FONT_ + B_ + TT_ ); + + return passed; +} + +function writeHeaderToLog( string ) { + print( H2 + string + H2_ ); +} +function stopTest() +{ + var sizeTag = "<#TEST CASES SIZE>"; + var doneTag = "<#TEST CASES DONE>"; + var beginTag = "<#TEST CASE "; + var endTag = ">"; + + print(sizeTag); + print(testcases.length); + for (tc = 0; tc < testcases.length; tc++) + { + print(beginTag + 'PASSED' + endTag); + print(testcases[tc].passed); + print(beginTag + 'NAME' + endTag); + print(testcases[tc].name); + print(beginTag + 'EXPECTED' + endTag); + print(testcases[tc].expect); + print(beginTag + 'ACTUAL' + endTag); + print(testcases[tc].actual); + print(beginTag + 'DESCRIPTION' + endTag); + print(testcases[tc].description); + print(beginTag + 'REASON' + endTag); + print(( testcases[tc].passed ) ? "" : "wrong value "); + print(beginTag + 'BUGNUMBER' + endTag); + print( BUGNUMBER ); + } + print(doneTag); + + print( HR ); + gc(); +} +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} +function err( msg, page, line ) { + testcases[tc].actual = "error"; + testcases[tc].reason = msg; + writeTestCaseResult( testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ testcases[tc].actual + + ": " + testcases[tc].reason ); + stopTest(); + return true; +} + +function Enumerate ( o ) { + var p; + for ( p in o ) { + print( p +": " + o[p] ); + } +} diff --git a/source/spidermonkey-tests/js1_3/misc/browser.js b/source/spidermonkey-tests/js1_3/misc/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/misc/shell.js b/source/spidermonkey-tests/js1_3/misc/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/regress/browser.js b/source/spidermonkey-tests/js1_3/regress/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/regress/delete-001.js b/source/spidermonkey-tests/js1_3/regress/delete-001.js new file mode 100644 index 00000000..757204ec --- /dev/null +++ b/source/spidermonkey-tests/js1_3/regress/delete-001.js @@ -0,0 +1,49 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: delete-001.js + Section: regress + Description: + + Regression test for + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=108736 + + Author: christine@netscape.com + Date: 12 november 1997 +*/ + +var SECTION = "JS1_2"; +var VERSION = "JS1_2"; +var TITLE = "The variable statement"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +// delete all properties of the global object +// per ecma, this does not affect variables in the global object declared +// with var or functions + +for ( p in this ) { + delete p; +} + +var result =""; + +for ( p in this ) { + result += String( p ); +} + +// not too picky here... just want to make sure we didn't crash or something + +new TestCase( SECTION, + "delete all properties of the global object", + "PASSED", + result == "" ? "FAILED" : "PASSED" ); + + +test(); + diff --git a/source/spidermonkey-tests/js1_3/regress/function-001-n.js b/source/spidermonkey-tests/js1_3/regress/function-001-n.js new file mode 100644 index 00000000..7d3726d0 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/regress/function-001-n.js @@ -0,0 +1,45 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: boolean-001.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=99232 + * + * eval("function f(){}function g(){}") at top level is an error for JS1.2 + * and above (missing ; between named function expressions), but declares f + * and g as functions below 1.2. + * + * Fails to produce error regardless of version: + * js> version(100) + * 120 + * js> eval("function f(){}function g(){}") + * js> version(120); + * 100 + * js> eval("function f(){}function g(){}") + * js> + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "function-001.js"; +var VERSION = "JS_1.3"; +var TITLE = "functions not separated by semicolons are errors in version 120 and higher"; +var BUGNUMBER="10278"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( + SECTION, + "eval(\"function f(){}function g(){}\")", + "error", + eval("function f(){}function g(){}") ); + +test(); + + diff --git a/source/spidermonkey-tests/js1_3/regress/function-002.js b/source/spidermonkey-tests/js1_3/regress/function-002.js new file mode 100644 index 00000000..144e2e4b --- /dev/null +++ b/source/spidermonkey-tests/js1_3/regress/function-002.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: function-002.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=249579 + + function definitions in conditional statements should be allowed. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "function-002"; +var VERSION = "JS1_3"; +var TITLE = "Regression test for 249579"; +var BUGNUMBER="249579"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( + SECTION, + "0?function(){}:0", + 0, + 0?function(){}:0 ); + + +bar = true; +foo = bar ? function () { return true; } : function() { return false; }; + +new TestCase( + SECTION, + "bar = true; foo = bar ? function () { return true; } : function() { return false; }; foo()", + true, + foo() ); + + +test(); + diff --git a/source/spidermonkey-tests/js1_3/regress/in-001.js b/source/spidermonkey-tests/js1_3/regress/in-001.js new file mode 100644 index 00000000..99f57ae2 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/regress/in-001.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: in-001.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=196109 + + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "in-001"; +var VERSION = "JS1_3"; +var TITLE = "Regression test for 196109"; +var BUGNUMBER="196109"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +o = {}; +o.foo = 'sil'; + +new TestCase( + SECTION, + "\"foo\" in o", + true, + "foo" in o ); + +test(); + diff --git a/source/spidermonkey-tests/js1_3/regress/new-001.js b/source/spidermonkey-tests/js1_3/regress/new-001.js new file mode 100644 index 00000000..9e7c5c28 --- /dev/null +++ b/source/spidermonkey-tests/js1_3/regress/new-001.js @@ -0,0 +1,89 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: new-001.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=76103 + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "new-001"; +var VERSION = "JS1_3"; +var TITLE = "new-001"; +var BUGNUMBER="31567"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +function Test_One (x) { + this.v = x+1; + return x*2 + } + +function Test_Two( x, y ) { + this.v = x; + return y; +} + +new TestCase( + SECTION, + "Test_One(18)", + 36, + Test_One(18) ); + +new TestCase( + SECTION, + "new Test_One(18)", + "[object Object]", + new Test_One(18) +"" ); + +new TestCase( + SECTION, + "new Test_One(18).v", + 19, + new Test_One(18).v ); + +new TestCase( + SECTION, + "Test_Two(2,7)", + 7, + Test_Two(2,7) ); + +new TestCase( + SECTION, + "new Test_Two(2,7)", + "[object Object]", + new Test_Two(2,7) +"" ); + +new TestCase( + SECTION, + "new Test_Two(2,7).v", + 2, + new Test_Two(2,7).v ); + +new TestCase( + SECTION, + "new (Function)(\"x\", \"return x+3\")(5,6)", + 8, + new (Function)("x","return x+3")(5,6) ); + +new TestCase( + SECTION, + "new new Test_Two(String, 2).v(0123)", + "83", + new new Test_Two(String, 2).v(0123) +""); + +new TestCase( + SECTION, + "new new Test_Two(String, 2).v(0123).length", + 2, + new new Test_Two(String, 2).v(0123).length ); + +test(); diff --git a/source/spidermonkey-tests/js1_3/regress/shell.js b/source/spidermonkey-tests/js1_3/regress/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_3/regress/switch-001.js b/source/spidermonkey-tests/js1_3/regress/switch-001.js new file mode 100644 index 00000000..ffd0623e --- /dev/null +++ b/source/spidermonkey-tests/js1_3/regress/switch-001.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + File Name: switch-001.js + Section: + Description: + + http://scopus.mcom.com/bugsplat/show_bug.cgi?id=315767 + + Verify that switches do not use strict equality in + versions of JavaScript < 1.4. It's now been decided that + we won't put in version switches, so all switches will + be ECMA. + + Author: christine@netscape.com + Date: 12 november 1997 +*/ +var SECTION = "switch-001"; +var VERSION = "JS1_3"; +var TITLE = "switch-001"; +var BUGNUMBER="315767"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +result = "fail: did not enter switch"; + +switch (true) { +case 1: + result = "fail: version 130 should force strict equality"; + break; +case true: + result = "pass"; + break; +default: + result = "fail: evaluated default statement"; +} + +new TestCase( + SECTION, + "switch / case should use strict equality in version of JS < 1.4", + "pass", + result ); + +test(); + diff --git a/source/spidermonkey-tests/js1_3/shell.js b/source/spidermonkey-tests/js1_3/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/Eval/browser.js b/source/spidermonkey-tests/js1_4/Eval/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/Eval/eval-001.js b/source/spidermonkey-tests/js1_4/Eval/eval-001.js new file mode 100644 index 00000000..3c4ef94f --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Eval/eval-001.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: eval-001.js + * Original Description: (SEE REVISED DESCRIPTION FURTHER BELOW) + * + * The global eval function may not be accessed indirectly and then called. + * This feature will continue to work in JavaScript 1.3 but will result in an + * error in JavaScript 1.4. This restriction is also in place for the With and + * Closure constructors. + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324451 + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * + * + * REVISION: 05 February 2001 + * Author: pschwartau@netscape.com + * + * Indirect eval IS NOT ILLEGAL per ECMA3!!! See + * + * http://bugzilla.mozilla.org/show_bug.cgi?id=38512 + * + * ------- Additional Comments From Brendan Eich 2001-01-30 17:12 ------- + * ECMA-262 Edition 3 doesn't require implementations to throw EvalError, + * see the short, section-less Chapter 16. It does say an implementation that + * doesn't throw EvalError must allow assignment to eval and indirect calls + * of the evalnative method. + * + */ +var SECTION = "eval-001.js"; +var VERSION = "JS1_4"; +var TITLE = "Calling eval indirectly should NOT fail in version 140"; +var BUGNUMBER="38512"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var MY_EVAL = eval; +var RESULT = ""; +var EXPECT = "abcdefg"; + +MY_EVAL( "RESULT = EXPECT" ); + +new TestCase( + SECTION, + "Call eval indirectly", + EXPECT, + RESULT ); + +test(); + diff --git a/source/spidermonkey-tests/js1_4/Eval/eval-002.js b/source/spidermonkey-tests/js1_4/Eval/eval-002.js new file mode 100644 index 00000000..9f96f6e5 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Eval/eval-002.js @@ -0,0 +1,63 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: eval-002.js + * Description: (SEE REVISED DESCRIPTION FURTHER BELOW) + * + * The global eval function may not be accessed indirectly and then called. + * This feature will continue to work in JavaScript 1.3 but will result in an + * error in JavaScript 1.4. This restriction is also in place for the With and + * Closure constructors. + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324451 + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * + * + * REVISION: 05 February 2001 + * Author: pschwartau@netscape.com + * + * Indirect eval IS NOT ILLEGAL per ECMA3!!! See + * + * http://bugzilla.mozilla.org/show_bug.cgi?id=38512 + * + * ------- Additional Comments From Brendan Eich 2001-01-30 17:12 ------- + * ECMA-262 Edition 3 doesn't require implementations to throw EvalError, + * see the short, section-less Chapter 16. It does say an implementation that + * doesn't throw EvalError must allow assignment to eval and indirect calls + * of the evalnative method. + * + */ +var SECTION = "eval-002.js"; +var VERSION = "JS1_4"; +var TITLE = "Calling eval indirectly should NOT fail in version 140"; +var BUGNUMBER="38512"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var MY_EVAL = eval; +var RESULT = ""; +var EXPECT = 1 + "testString" + + EvalTest(); + +test(); + + +function EvalTest() +{ + MY_EVAL( "RESULT = EXPECT" ); + + new TestCase( + SECTION, + "Call eval indirectly", + EXPECT, + RESULT ); +} + diff --git a/source/spidermonkey-tests/js1_4/Eval/eval-003.js b/source/spidermonkey-tests/js1_4/Eval/eval-003.js new file mode 100644 index 00000000..d7957d32 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Eval/eval-003.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: eval-003.js + * Description: (SEE REVISED DESCRIPTION FURTHER BELOW) + * + * The global eval function may not be accessed indirectly and then called. + * This feature will continue to work in JavaScript 1.3 but will result in an + * error in JavaScript 1.4. This restriction is also in place for the With and + * Closure constructors. + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324451 + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * + * + * REVISION: 05 February 2001 + * Author: pschwartau@netscape.com + * + * Indirect eval IS NOT ILLEGAL per ECMA3!!! See + * + * http://bugzilla.mozilla.org/show_bug.cgi?id=38512 + * + * ------- Additional Comments From Brendan Eich 2001-01-30 17:12 ------- + * ECMA-262 Edition 3 doesn't require implementations to throw EvalError, + * see the short, section-less Chapter 16. It does say an implementation that + * doesn't throw EvalError must allow assignment to eval and indirect calls + * of the evalnative method. + * + */ +var SECTION = "eval-003.js"; +var VERSION = "JS1_4"; +var TITLE = "Calling eval indirectly should NOT fail in version 140"; +var BUGNUMBER="38512"; + +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +var MY_EVAL = eval; +var RESULT = ""; +var EXPECT= ""; +var h = function f(x,y){var g = function(z){return Math.exp(z);}; return g(x+y);}; + + +new EvalTest(); + +test(); + +function EvalTest() +{ + with( this ) { + MY_EVAL( "RESULT = h(-1, 1)" ); + EXPECT = 1; //The base e to the power (-1 + 1), i.e. the power 0, equals 1 .... + + new TestCase( + SECTION, + "Call eval indirectly", + EXPECT, + RESULT ); + } +} + diff --git a/source/spidermonkey-tests/js1_4/Eval/regress-531682.js b/source/spidermonkey-tests/js1_4/Eval/regress-531682.js new file mode 100644 index 00000000..2969b981 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Eval/regress-531682.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 531682; +var summary = 'Checking proper wrapping of scope in eval(source, scope)'; +var actual; +var expect; + +//----------------------------------------------------------------------------- +var x = 0; + +test(); +//----------------------------------------------------------------------------- + +function scope1() { + eval('var x = 1;'); + return function() { return x; } +} + +function test() { + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // The scope chain in eval should be just scope1() and the global object. + actual = eval('x', scope1()); + expect = 0; + reportCompare(expect, actual, summary); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_4/Eval/shell.js b/source/spidermonkey-tests/js1_4/Eval/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/Functions/browser.js b/source/spidermonkey-tests/js1_4/Functions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/Functions/function-001.js b/source/spidermonkey-tests/js1_4/Functions/function-001.js new file mode 100644 index 00000000..e00825e1 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Functions/function-001.js @@ -0,0 +1,89 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: function-001.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=324455 + * + * Earlier versions of JavaScript supported access to the arguments property + * of the function object. This property held the arguments to the function. + * function f() { + * return f.arguments[0]; // deprecated + * } + * var x = f(3); // x will be 3 + * + * This feature is not a part of the final ECMA standard. Instead, scripts + * should simply use just "arguments": + * + * function f() { + * return arguments[0]; // okay + * } + * + * var x = f(3); // x will be 3 + * + * Again, this feature was motivated by performance concerns. Access to the + * arguments property is not threadsafe, which is of particular concern in + * server environments. Also, the compiler can generate better code for + * functions because it can tell when the arguments are being accessed only by + * name and avoid setting up the arguments object. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "function-001.js"; +var VERSION = "JS1_4"; +var TITLE = "Accessing the arguments property of a function object"; +var BUGNUMBER="324455"; +startTest(); +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( + SECTION, + "return function.arguments", + "P", + TestFunction_2("P", "A","S","S")[0] +""); + + +new TestCase( + SECTION, + "return arguments", + "P", + TestFunction_1( "P", "A", "S", "S" )[0] +""); + +new TestCase( + SECTION, + "return arguments when function contains an arguments property", + "PASS", + TestFunction_3( "P", "A", "S", "S" ) +""); + +new TestCase( + SECTION, + "return function.arguments when function contains an arguments property", + "[object Arguments]", + TestFunction_4( "F", "A", "I", "L" ) +""); + +test(); + +function TestFunction_1( a, b, c, d, e ) { + return arguments; +} + +function TestFunction_2( a, b, c, d, e ) { + return TestFunction_2.arguments; +} + +function TestFunction_3( a, b, c, d, e ) { + var arguments = "PASS"; + return arguments; +} + +function TestFunction_4( a, b, c, d, e ) { + var arguments = "FAIL"; + return TestFunction_4.arguments; +} + diff --git a/source/spidermonkey-tests/js1_4/Functions/shell.js b/source/spidermonkey-tests/js1_4/Functions/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/README b/source/spidermonkey-tests/js1_4/README new file mode 100644 index 00000000..53a00cf6 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/README @@ -0,0 +1 @@ +JavaScript 1.4 diff --git a/source/spidermonkey-tests/js1_4/Regress/browser.js b/source/spidermonkey-tests/js1_4/Regress/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/Regress/date-001-n.js b/source/spidermonkey-tests/js1_4/Regress/date-001-n.js new file mode 100644 index 00000000..cf18b33f --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Regress/date-001-n.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: date-001-n.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=299903 + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "date-001-n.js"; +var VERSION = "JS1_4"; +var TITLE = "Regression test case for 299903"; +var BUGNUMBER="299903"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +function MyDate() { + this.foo = "bar"; +} +MyDate.prototype = new Date(); + +DESCRIPTION = + "function MyDate() { this.foo = \"bar\"; }; MyDate.prototype = new Date(); new MyDate().toString()"; +EXPECTED = "error"; + +new TestCase( + SECTION, + "function MyDate() { this.foo = \"bar\"; }; "+ + "MyDate.prototype = new Date(); " + + "new MyDate().toString()", + "error", + new MyDate().toString() ); + +test(); diff --git a/source/spidermonkey-tests/js1_4/Regress/function-001.js b/source/spidermonkey-tests/js1_4/Regress/function-001.js new file mode 100644 index 00000000..43669e9c --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Regress/function-001.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: function-001.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=325843 + * js> function f(a){var a,b;} + * + * causes an an assert on a null 'sprop' in the 'Variables' function in + * jsparse.c This will crash non-debug build. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "function-001.js"; +var VERSION = "JS1_4"; +var TITLE = "Regression test case for 325843"; +var BUGNUMBER="3258435"; +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +eval("function f1 (a){ var a,b; }"); + +function f2( a ) { var a, b; }; + +new TestCase( + SECTION, + "eval(\"function f1 (a){ var a,b; }\"); "+ + "function f2( a ) { var a, b; }; typeof f1", + "function", + typeof f1 ); + +// force a function decompilation + +new TestCase( + SECTION, + "typeof f1.toString()", + "string", + typeof f1.toString() ); + +new TestCase( + SECTION, + "typeof f2", + "function", + typeof f2 ); + +// force a function decompilation + +new TestCase( + SECTION, + "typeof f2.toString()", + "string", + typeof f2.toString() ); + +test(); + diff --git a/source/spidermonkey-tests/js1_4/Regress/function-002.js b/source/spidermonkey-tests/js1_4/Regress/function-002.js new file mode 100644 index 00000000..c1596db7 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Regress/function-002.js @@ -0,0 +1,107 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: function-002.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=330462 + * js> function f(a){var a,b;} + * + * causes an an assert on a null 'sprop' in the 'Variables' function in + * jsparse.c This will crash non-debug build. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + * REVISED: 04 February 2001 + * (changed the comma expressions from trivial to non-trivial) + * Author: pschwartau@netscape.com + * + * Brendan: "The test seemed to require something that ECMA does not + * guarantee, and that JS1.4 didn't either. For example, given + * + * dec2 = "function f2(){1,2}"; + * + * the engine is free to decompile a function object compiled from this source, + * via Function.prototype.toString(), into some other string that compiles to + * an equivalent function. The engine now eliminates the useless comma expression + * 1,2, giving function f2(){}. This should be legal by the testsuite's lights." + * + */ +var SECTION = "function-002.js"; +var VERSION = "JS1_4"; +var TITLE = "Regression test case for 325843"; +var BUGNUMBER="330462"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +dec1 = "function f1(x,y){++x, --y}"; +dec2 = "function f2(){var y; f1(1,2); y=new Date(); print(y.toString())}"; + +eval(dec1); +eval(dec2); + +new TestCase( + SECTION, + "typeof f1", + "function", + typeof f1 ); + + +// force a function decompilation +new TestCase( + SECTION, + "f1.toString() == dec1", + true, + StripSpaces(f1.toString()) == StripSpaces(dec1)); + +new TestCase( + SECTION, + "typeof f2", + "function", + typeof f2 ); + +// force a function decompilation + +new TestCase( + SECTION, + "f2.toString() == dec2", + true, + StripSpaces(f2.toString().replace(/new Date\(\)/g, 'new Date')) == + StripSpaces(dec2.replace(/new Date\(\)/g, 'new Date'))); + +test(); + +function StripSpaces( s ) { + var strippedString = ""; + for ( var currentChar = 0; currentChar < s.length; currentChar++ ) { + if (!IsWhiteSpace(s.charAt(currentChar))) { + strippedString += s.charAt(currentChar); + } + } + return strippedString; +} + +function IsWhiteSpace( string ) { + var cc = string.charCodeAt(0); + + switch (cc) { + case (0x0009): + case (0x000B): + case (0x000C): + case (0x0020): + case (0x000A): + case (0x000D): + case ( 59 ): // let's strip out semicolons, too + return true; + break; + default: + return false; + } +} + diff --git a/source/spidermonkey-tests/js1_4/Regress/function-003.js b/source/spidermonkey-tests/js1_4/Regress/function-003.js new file mode 100644 index 00000000..157e926d --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Regress/function-003.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: function-003.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=104766 + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "toString-001.js"; +var VERSION = "JS1_4"; +var TITLE = "Regression test case for 104766"; +var BUGNUMBER="310514"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +new TestCase( + SECTION, + "StripSpaces(Array.prototype.concat.toString()).substring(0,17)", + "functionconcat(){", + StripSpaces(Array.prototype.concat.toString()).substring(0,17)); + +test(); + +function StripSpaces( s ) { + for ( var currentChar = 0, strippedString=""; + currentChar < s.length; currentChar++ ) + { + if (!IsWhiteSpace(s.charAt(currentChar))) { + strippedString += s.charAt(currentChar); + } + } + return strippedString; +} + +function IsWhiteSpace( string ) { + var cc = string.charCodeAt(0); + switch (cc) { + case (0x0009): + case (0x000B): + case (0x000C): + case (0x0020): + case (0x000A): + case (0x000D): + case ( 59 ): // let's strip out semicolons, too + return true; + break; + default: + return false; + } +} + diff --git a/source/spidermonkey-tests/js1_4/Regress/function-004-n.js b/source/spidermonkey-tests/js1_4/Regress/function-004-n.js new file mode 100644 index 00000000..36d3dbfe --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Regress/function-004-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: function-004.js + * Description: + * + * http://scopus.mcom.com/bugsplat/show_bug.cgi?id=310502 + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "funtion-004-n.js"; +var VERSION = "JS1_4"; +var TITLE = "Regression test case for 310502"; +var BUGNUMBER="310502"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var o = {}; +o.call = Function.prototype.call; + +DESCRIPTION = "var o = {}; o.call = Function.prototype.call; o.call()"; +EXPECTED = "error"; + +new TestCase( + SECTION, + "var o = {}; o.call = Function.prototype.call; o.call()", + "error", + o.call() ); + +test(); diff --git a/source/spidermonkey-tests/js1_4/Regress/regress-7224.js b/source/spidermonkey-tests/js1_4/Regress/regress-7224.js new file mode 100644 index 00000000..fe248f38 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Regress/regress-7224.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: regress-7224.js + * Reference: js1_2 + * Description: Remove support for the arg + * Author: ** replace with your e-mail address ** + */ + +var SECTION = "regress"; // provide a document reference (ie, ECMA section) +var VERSION = "JS1_4"; // Version of JavaScript or ECMA +var TITLE = "Regression test for bugzilla #7224"; // Provide ECMA section title or a description +var BUGNUMBER = "http://bugzilla.mozilla.org/show_bug.cgi?id=7224"; // Provide URL to bugsplat or bugzilla report + +startTest(); // leave this alone + +/* + * Calls to AddTestCase here. AddTestCase is a function that is defined + * in shell.js and takes three arguments: + * - a string representation of what is being tested + * - the expected result + * - the actual result + * + * For example, a test might look like this: + * + * var zip = /[\d]{5}$/; + * + * AddTestCase( + * "zip = /[\d]{5}$/; \"PO Box 12345 Boston, MA 02134\".match(zip)", // description of the test + * "02134", // expected result + * "PO Box 12345 Boston, MA 02134".match(zip) ); // actual result + * + */ + +var f = new Function( "return arguments.caller" ); +var o = {}; + +o.foo = f; +o.foo("a", "b", "c"); + + +AddTestCase( + "var f = new Function( 'return arguments.caller' ); f()", + undefined, + f() ); + +AddTestCase( + "var o = {}; o.foo = f; o.foo('a')", + undefined, + o.foo('a') ); + +test(); // leave this alone. this executes the test cases and +// displays results. diff --git a/source/spidermonkey-tests/js1_4/Regress/shell.js b/source/spidermonkey-tests/js1_4/Regress/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/Regress/toString-001-n.js b/source/spidermonkey-tests/js1_4/Regress/toString-001-n.js new file mode 100644 index 00000000..45abb1f3 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/Regress/toString-001-n.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/** + * File Name: toString-001-n.js + * Description: + * + * Function.prototype.toString is not generic. + * + * Author: christine@netscape.com + * Date: 11 August 1998 + */ +var SECTION = "toString-001.js"; +var VERSION = "JS1_4"; +var TITLE = "Regression test case for 310514"; +var BUGNUMBER="310514"; + +startTest(); + +writeHeaderToLog( SECTION + " "+ TITLE); + +var o = {}; +o.toString = Function.prototype.toString; + +DESCRIPTION = "var o = {}; o.toString = Function.prototype.toString; o.toString();"; +EXPECTED = "error"; + +new TestCase( + SECTION, + "var o = {}; o.toString = Function.prototype.toString; o.toString();", + "error", + o.toString() ); + +test(); diff --git a/source/spidermonkey-tests/js1_4/browser.js b/source/spidermonkey-tests/js1_4/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_4/jsref.js b/source/spidermonkey-tests/js1_4/jsref.js new file mode 100644 index 00000000..91817685 --- /dev/null +++ b/source/spidermonkey-tests/js1_4/jsref.js @@ -0,0 +1,166 @@ +var completed = false; +var testcases; + +var BUGNUMBER=""; +var EXCLUDE = ""; + +var TT = ""; +var TT_ = ""; +var BR = ""; +var NBSP = " "; +var CR = "\n"; +var FONT = ""; +var FONT_ = ""; +var FONT_RED = ""; +var FONT_GREEN = ""; +var B = ""; +var B_ = "" +var H2 = ""; +var H2_ = ""; +var HR = ""; + +var PASSED = " PASSED!" +var FAILED = " FAILED! expected: "; + +version( 140 ); +function test() { + for ( tc=0; tc < testcases.length; tc++ ) { + testcases[tc].passed = writeTestCaseResult( + testcases[tc].expect, + testcases[tc].actual, + testcases[tc].description +" = "+ + testcases[tc].actual ); + + testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; + } + stopTest(); + return ( testcases ); +} +function TestCase( n, d, e, a ) { + this.name = n; + this.description = d; + this.expect = e; + this.actual = a; + this.passed = true; + this.reason = ""; + this.bugnumber = BUGNUMBER; + + this.passed = getTestCaseResult( this.expect, this.actual ); +} +function startTest() { +/* + // JavaScript 1.3 is supposed to be compliant ecma version 1.0 + if ( VERSION == "ECMA_1" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.3" ) { + version ( "130" ); + } + if ( VERSION == "JS_1.2" ) { + version ( "120" ); + } + if ( VERSION == "JS_1.1" ) { + version ( "110" ); + } + // for ecma version 2.0, we will leave the javascript version to + // the default ( for now ). +*/ +} +function getTestCaseResult( expect, actual ) { + // because ( NaN == NaN ) always returns false, need to do + // a special compare to see if we got the right result. + if ( actual != actual ) { + if ( typeof actual == "object" ) { + actual = "NaN object"; + } else { + actual = "NaN number"; + } + } + if ( expect != expect ) { + if ( typeof expect == "object" ) { + expect = "NaN object"; + } else { + expect = "NaN number"; + } + } + + var passed = ( expect == actual ) ? true : false; + + // if both objects are numbers, give a little leeway for rounding. + if ( !passed + && typeof(actual) == "number" + && typeof(expect) == "number" + ) { + if ( Math.abs(actual-expect) < 0.0000001 ) { + passed = true; + } + } + + // verify type is the same + if ( typeof(expect) != typeof(actual) ) { + passed = false; + } + + return passed; +} +function writeTestCaseResult( expect, actual, string ) { + var passed = getTestCaseResult( expect, actual ); + writeFormattedResult( expect, actual, string, passed ); + return passed; +} +function writeFormattedResult( expect, actual, string, passed ) { + var s = TT + string ; + + for ( k = 0; + k < (60 - string.length >= 0 ? 60 - string.length : 5) ; + k++ ) { +// s += NBSP; + } + + s += B ; + s += ( passed ) ? FONT_GREEN + NBSP + PASSED : FONT_RED + NBSP + FAILED + expect + TT_ ; + + print( s + FONT_ + B_ + TT_ ); + + return passed; +} + +function writeHeaderToLog( string ) { + print( H2 + string + H2_ ); +} +function stopTest() { + var sizeTag = "<#TEST CASES SIZE>"; + var doneTag = "<#TEST CASES DONE>"; + var beginTag = "<#TEST CASE "; + var endTag = ">"; + + print(sizeTag); + print(testcases.length); + for (tc = 0; tc < testcases.length; tc++) + { + print(beginTag + 'PASSED' + endTag); + print(testcases[tc].passed); + print(beginTag + 'NAME' + endTag); + print(testcases[tc].name); + print(beginTag + 'EXPECTED' + endTag); + print(testcases[tc].expect); + print(beginTag + 'ACTUAL' + endTag); + print(testcases[tc].actual); + print(beginTag + 'DESCRIPTION' + endTag); + print(testcases[tc].description); + print(beginTag + 'REASON' + endTag); + print(( testcases[tc].passed ) ? "" : "wrong value "); + print(beginTag + 'BUGNUMBER' + endTag); + print( BUGNUMBER ); + + } + print(doneTag); + gc(); +} +function getFailedCases() { + for ( var i = 0; i < testcases.length; i++ ) { + if ( ! testcases[i].passed ) { + print( testcases[i].description +" = " +testcases[i].actual +" expected: "+ testcases[i].expect ); + } + } +} diff --git a/source/spidermonkey-tests/js1_4/shell.js b/source/spidermonkey-tests/js1_4/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/Array/11.1.4.js b/source/spidermonkey-tests/js1_5/Array/11.1.4.js new file mode 100644 index 00000000..7f39c930 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Array/11.1.4.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 260106; +var summary = 'Elisons in Array literals should not be enumed'; +var actual = ''; +var expect = ''; +var status; +var prop; +var array; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' [,1] '; +array = [,1]; +actual = ''; +expect = '1'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' [,,1] '; +array = [,,1]; +actual = ''; +expect = '2'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' [1,] '; +array = [1,]; +actual = ''; +expect = '0'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(4) + ' [1,,] '; +array = [1,,]; +actual = ''; +expect = '0'; +for (prop in array) +{ + if (prop != 'length') + { + actual += prop; + } +} +reportCompare(expect, actual, status); diff --git a/source/spidermonkey-tests/js1_5/Array/array-001.js b/source/spidermonkey-tests/js1_5/Array/array-001.js new file mode 100644 index 00000000..26e1ae25 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Array/array-001.js @@ -0,0 +1,88 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Date: 24 September 2001 + * + * SUMMARY: Truncating arrays that have decimal property names. + * From correspondence with Igor Bukanov : + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Truncating arrays that have decimal property names'; +var BIG_INDEX = 4294967290; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +var arr = Array(BIG_INDEX); +arr[BIG_INDEX - 1] = 'a'; +arr[BIG_INDEX - 10000] = 'b'; +arr[BIG_INDEX - 0.5] = 'c'; // not an array index - but a valid property name +// Truncate the array - +arr.length = BIG_INDEX - 5000; + + +// Enumerate its properties with for..in +var s = ''; +for (var i in arr) +{ + s += arr[i]; +} + + +/* + * We expect s == 'cb' or 'bc' (EcmaScript does not fix the order). + * Note 'c' is included: for..in includes ALL enumerable properties, + * not just array-index properties. The bug was: Rhino gave s == ''. + */ +status = inSection(1); +actual = sortThis(s); +expect = 'bc'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function sortThis(str) +{ + var chars = str.split(''); + chars = chars.sort(); + return chars.join(''); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i var arr = new Array(0xFFFFFFFF) + * js> arr.length + * 4294967295 + * + * js> var arr = new Array(0x100000000) + * RangeError: invalid array length + * + * + * We'll try the largest possible array first, then a couple others. + * We're just testing that we don't crash on Array.sort(). + * + * Try to be good about memory by nulling each array variable after it is + * used. This will tell the garbage collector the memory is no longer needed. + * + * As of 2002-08-13, the JS shell runs out of memory no matter what we do, + * when trying to sort such large arrays. + * + * We only want to test that we don't CRASH on the sort. So it will be OK + * if we get the JS "out of memory" error. Note this terminates the test + * with exit code 3. Therefore we put + * + * |expectExitCode(3);| + * + * The only problem will arise if the JS shell ever DOES have enough memory + * to do the sort. Then this test will terminate with the normal exit code 0 + * and fail. + * + * Right now, I can't see any other way to do this, because "out of memory" + * is not a catchable error: it cannot be trapped with try...catch. + * + * + * FURTHER HEADACHE: Rhino can't seem to handle the largest array: it hangs. + * So we skip this case in Rhino. Here is correspondence with Igor Bukanov. + * He explains that Rhino isn't actually hanging; it's doing the huge sort: + * + * Philip Schwartau wrote: + * + * > Hi, + * > + * > I'm getting a graceful OOM message on trying to sort certain large + * > arrays. But if the array is too big, Rhino simply hangs. Note that ECMA + * > allows array lengths to be anything less than Math.pow(2,32), so the + * > arrays I'm sorting are legal. + * > + * > Note below, I'm getting an instantaneous OOM error on arr.sort() for LEN + * > = Math.pow(2, 30). So shouldn't I also get one for every LEN between + * > that and Math.pow(2, 32)? For some reason, I start to hang with 100% CPU + * > as LEN hits, say, Math.pow(2, 31) and higher. SpiderMonkey gives OOM + * > messages for all of these. Should I file a bug on this? + * + * Igor Bukanov wrote: + * + * This is due to different sorting algorithm Rhino uses when sorting + * arrays with length > Integer.MAX_VALUE. If length can fit Java int, + * Rhino first copies internal spare array to a temporary buffer, and then + * sorts it, otherwise it sorts array directly. In case of very spare + * arrays, that Array(big_number) generates, it is rather inefficient and + * generates OutOfMemory if length fits int. It may be worth in your case + * to optimize sorting to take into account array spareness, but then it + * would be a good idea to file a bug about ineficient sorting of spare + * arrays both in case of Rhino and SpiderMonkey as SM always uses a + * temporary buffer. + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 157652; +var summary = "Testing that Array.sort() doesn't crash on very large arrays"; +var expect = 'No Crash'; +var actual = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus(summary); + +expectExitCode(0); +expectExitCode(5); + +var IN_RHINO = inRhino(); + +try +{ + if (!IN_RHINO) + { + var a1=Array(0xFFFFFFFF); + a1.sort(); + a1 = null; + } + + var a2 = Array(0x40000000); + a2.sort(); + a2=null; + + var a3=Array(0x10000000/4); + a3.sort(); + a3=null; +} +catch(ex) +{ + // handle changed 1.9 branch behavior. see bug 422348 + expect = 'InternalError: allocation size overflow'; + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Array/regress-178722.js b/source/spidermonkey-tests/js1_5/Array/regress-178722.js new file mode 100644 index 00000000..950b1e75 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Array/regress-178722.js @@ -0,0 +1,130 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 06 November 2002 + * SUMMARY: arr.sort() should not output |undefined| when |arr| is empty + * See http://bugzilla.mozilla.org/show_bug.cgi?id=178722 + * + * ECMA-262 Ed.3: 15.4.4.11 Array.prototype.sort (comparefn) + * + * 1. Call the [[Get]] method of this object with argument "length". + * 2. Call ToUint32(Result(1)). + * 3. Perform an implementation-dependent sequence of calls to the [[Get]], + * [[Put]], and [[Delete]] methods of this object, etc. etc. + * 4. Return this object. + * + * + * Note that sort() is done in-place on |arr|. In other words, sort() is a + * "destructive" method rather than a "functional" method. The return value + * of |arr.sort()| and |arr| are the same object. + * + * If |arr| is an empty array, the return value of |arr.sort()| should be + * an empty array, not the value |undefined| as was occurring in bug 178722. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 178722; +var summary = 'arr.sort() should not output |undefined| when |arr| is empty'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var arr; + + +// create empty array or pseudo-array objects in various ways +var arr1 = Array(); +var arr2 = new Array(); +var arr3 = []; +var arr4 = [1]; +arr4.pop(); + + +status = inSection(1); +arr = arr1.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr1; +expect = true; +addThis(); + +status = inSection(2); +arr = arr2.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr2; +expect = true; +addThis(); + +status = inSection(3); +arr = arr3.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr3; +expect = true; +addThis(); + +status = inSection(4); +arr = arr4.sort(); +actual = arr instanceof Array && arr.length === 0 && arr === arr4; +expect = true; +addThis(); + +// now do the same thing, with non-default sorting: +function g() {return 1;} + +status = inSection('1a'); +arr = arr1.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr1; +expect = true; +addThis(); + +status = inSection('2a'); +arr = arr2.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr2; +expect = true; +addThis(); + +status = inSection('3a'); +arr = arr3.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr3; +expect = true; +addThis(); + +status = inSection('4a'); +arr = arr4.sort(g); +actual = arr instanceof Array && arr.length === 0 && arr === arr4; +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i= 0; +reportCompare(expect, actual, summary + ': new Date(208e10)'); + +dt = new Date(209e10); +printStatus(dt+''); +expect = true; +actual = dt.toLocaleString().indexOf('2036') >= 0; +reportCompare(expect, actual, summary + ': new Date(209e10)'); diff --git a/source/spidermonkey-tests/js1_5/Date/regress-301738-01.js b/source/spidermonkey-tests/js1_5/Date/regress-301738-01.js new file mode 100644 index 00000000..8f5ae7d3 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Date/regress-301738-01.js @@ -0,0 +1,97 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 301738; +var summary = 'Date parse compatibilty with MSIE'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/* + Case 1. The input string contains an English month name. + The form of the string can be month f l, or f month l, or + f l month which each evaluate to the same date. + If f and l are both greater than or equal to 70, or + both less than 70, the date is invalid. + The year is taken to be the greater of the values f, l. + If the year is greater than or equal to 70 and less than 100, + it is considered to be the number of years after 1900. +*/ + +var month = 'January'; +var f; +var l; + +f = l = 0; +expect = true; + +actual = isNaN(new Date(month + ' ' + f + ' ' + l)); +reportCompare(expect, actual, 'January 0 0 is invalid'); + +actual = isNaN(new Date(f + ' ' + l + ' ' + month)); +reportCompare(expect, actual, '0 0 January is invalid'); + +actual = isNaN(new Date(f + ' ' + month + ' ' + l)); +reportCompare(expect, actual, '0 January 0 is invalid'); + +f = l = 70; + +actual = isNaN(new Date(month + ' ' + f + ' ' + l)); +reportCompare(expect, actual, 'January 70 70 is invalid'); + +actual = isNaN(new Date(f + ' ' + l + ' ' + month)); +reportCompare(expect, actual, '70 70 January is invalid'); + +actual = isNaN(new Date(f + ' ' + month + ' ' + l)); +reportCompare(expect, actual, '70 January 70 is invalid'); + +f = 100; +l = 15; + +// year, month, day +expect = new Date(f, 0, l).toString(); + +actual = new Date(month + ' ' + f + ' ' + l).toString(); +reportCompare(expect, actual, 'month f l'); + +actual = new Date(f + ' ' + l + ' ' + month).toString(); +reportCompare(expect, actual, 'f l month'); + +actual = new Date(f + ' ' + month + ' ' + l).toString(); +reportCompare(expect, actual, 'f month l'); + +f = 80; +l = 15; + +// year, month, day +expect = (new Date(f, 0, l)).toString(); + +actual = (new Date(month + ' ' + f + ' ' + l)).toString(); +reportCompare(expect, actual, 'month f l'); + +actual = (new Date(f + ' ' + l + ' ' + month)).toString(); +reportCompare(expect, actual, 'f l month'); + +actual = (new Date(f + ' ' + month + ' ' + l)).toString(); +reportCompare(expect, actual, 'f month l'); + +f = 2040; +l = 15; + +// year, month, day +expect = (new Date(f, 0, l)).toString(); + +actual = (new Date(month + ' ' + f + ' ' + l)).toString(); +reportCompare(expect, actual, 'month f l'); + +actual = (new Date(f + ' ' + l + ' ' + month)).toString(); +reportCompare(expect, actual, 'f l month'); + +actual = (new Date(f + ' ' + month + ' ' + l)).toString(); +reportCompare(expect, actual, 'f month l'); + diff --git a/source/spidermonkey-tests/js1_5/Date/regress-301738-02.js b/source/spidermonkey-tests/js1_5/Date/regress-301738-02.js new file mode 100644 index 00000000..97106854 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Date/regress-301738-02.js @@ -0,0 +1,130 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 301738; +var summary = 'Date parse compatibilty with MSIE'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/* + Case 2. The input string is of the form "f/m/l" where f, m and l are + integers, e.g. 7/16/45. + Adjust the mon, mday and year values to achieve 100% MSIE + compatibility. + a. If 0 <= f < 70, f/m/l is interpreted as month/day/year. + i. If year < 100, it is the number of years after 1900 + ii. If year >= 100, it is the number of years after 0. + b. If 70 <= f < 100 + i. If m < 70, f/m/l is interpreted as + year/month/day where year is the number of years after + 1900. + ii. If m >= 70, the date is invalid. + c. If f >= 100 + i. If m < 70, f/m/l is interpreted as + year/month/day where year is the number of years after 0. + ii. If m >= 70, the date is invalid. +*/ + +var f; +var m; +var l; + +function newDate(f, m, l) +{ + return new Date(f + '/' + m + '/' + l); +} + +function newDesc(f, m, l) +{ + return f + '/' + m + '/' + l; +} + +// 2.a.i +f = 0; +m = 0; +l = 0; + +expect = (new Date(l, f-1, m)).toDateString(); +actual = newDate(f, m, l).toDateString(); +reportCompare(expect, actual, newDesc(f, m, l)); + +f = 0; +m = 0; +l = 100; + +expect = (new Date(l, f-1, m)).toDateString(); +actual = newDate(f, m, l).toDateString(); +reportCompare(expect, actual, newDesc(f, m, l)); + +// 2.a.ii +f = 0; +m = 24; +l = 100; + +expect = (new Date(l, f-1, m)).toDateString(); +actual = newDate(f, m, l).toDateString(); +reportCompare(expect, actual, newDesc(f, m, l)); + +f = 0; +m = 24; +l = 2100; + +expect = (new Date(l, f-1, m)).toDateString(); +actual = newDate(f, m, l).toDateString(); +reportCompare(expect, actual, newDesc(f, m, l)); + + +// 2.b.i +f = 70; +m = 24; +l = 100; + +expect = (new Date(f, m-1, l)).toDateString(); +actual = newDate(f, m, l).toDateString(); +reportCompare(expect, actual, newDesc(f, m, l)); + +f = 99; +m = 12; +l = 1; + +expect = (new Date(f, m-1, l)).toDateString(); +actual = newDate(f, m, l).toDateString(); +reportCompare(expect, actual, newDesc(f, m, l)); + +// 2.b.ii. + +f = 99; +m = 70; +l = 1; + +expect = true; +actual = isNaN(newDate(f, m, l)); +reportCompare(expect, actual, newDesc(f, m, l) + ' is an invalid date'); + +// 2.c.i + +f = 100; +m = 12; +l = 1; + +expect = (new Date(f, m-1, l)).toDateString(); +actual = newDate(f, m, l).toDateString(); +reportCompare(expect, actual, newDesc(f, m, l)); + +// 2.c.ii + +f = 100; +m = 70; +l = 1; + +expect = true; +actual = isNaN(newDate(f, m, l)); +reportCompare(expect, actual, newDesc(f, m, l) + ' is an invalid date'); + + diff --git a/source/spidermonkey-tests/js1_5/Date/regress-309925-01.js b/source/spidermonkey-tests/js1_5/Date/regress-309925-01.js new file mode 100644 index 00000000..ee6daaff --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Date/regress-309925-01.js @@ -0,0 +1,15 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 309925; +var summary = 'Correctly parse Date strings with HH:MM'; +var actual = new Date('Sep 24, 11:58 105') + ''; +var expect = new Date('Sep 24, 11:58:00 105') + ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Date/regress-309925-02.js b/source/spidermonkey-tests/js1_5/Date/regress-309925-02.js new file mode 100644 index 00000000..60bbfc33 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Date/regress-309925-02.js @@ -0,0 +1,15 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 309925; +var summary = 'Correctly parse Date strings with HH:MM(comment)'; +var actual = new Date('Sep 24, 11:58(comment) 105') + ''; +var expect = new Date('Sep 24, 11:58:00 (comment) 105') + ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Date/regress-346027.js b/source/spidermonkey-tests/js1_5/Date/regress-346027.js new file mode 100644 index 00000000..0910c5c7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Date/regress-346027.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346027; +var summary = 'Date.prototype.setFullYear()'; +var actual = ''; +var expect = true; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var d = new Date(); + d.setFullYear(); + actual = isNaN(d.getFullYear()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Date/regress-346363.js b/source/spidermonkey-tests/js1_5/Date/regress-346363.js new file mode 100644 index 00000000..a4f44b5d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Date/regress-346363.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346363; +var summary = 'Date.prototype.setFullYear()'; +var actual = ''; +var expect = true; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var d = new Date(); + d.setFullYear(); + d.setFullYear(2006); + actual = d.getFullYear() == 2006; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Date/shell.js b/source/spidermonkey-tests/js1_5/Date/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/Error/browser.js b/source/spidermonkey-tests/js1_5/Error/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/Error/regress-354246.js b/source/spidermonkey-tests/js1_5/Error/regress-354246.js new file mode 100644 index 00000000..a2178c91 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Error/regress-354246.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354246; +var summary = 'calling Error constructor with object with bad toString'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '13'; + + actual += '1'; + try + { + new Error({toString: function() { x.y } }); + } + catch(e) + { + } + actual += '3'; + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Error/regress-412324.js b/source/spidermonkey-tests/js1_5/Error/regress-412324.js new file mode 100644 index 00000000..d9debaa8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Error/regress-412324.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 412324; +var summary = 'Allow function Error(){} for the love of Pete'; +var actual = 'No Error'; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function Error() {} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Error/regress-465377.js b/source/spidermonkey-tests/js1_5/Error/regress-465377.js new file mode 100644 index 00000000..4b880062 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Error/regress-465377.js @@ -0,0 +1,81 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465377; +var summary = 'instanceof relations between Error objects'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Exception'; + + try + { + var list = [ + "Error", + "InternalError", + "EvalError", + "RangeError", + "ReferenceError", + "SyntaxError", + "TypeError", + "URIError" + ]; + var instances = []; + + for (var i = 0; i != list.length; ++i) { + var name = list[i]; + var constructor = this[name]; + var tmp = constructor.name; + if (tmp !== name) + throw "Bad value for "+name+".name: "+uneval(tmp); + instances[i] = new constructor(); + } + + for (var i = 0; i != instances.length; ++i) { + var instance = instances[i]; + var name = instance.name; + var constructor = instance.constructor; + if (constructor !== this[name]) + throw "Bad value of (new "+name+").constructor: "+uneval(tmp); + var tmp = constructor.name; + if (tmp !== name) + throw "Bad value for constructor.name: "+uneval(tmp); + if (!(instance instanceof Object)) + throw "Bad instanceof Object for "+name; + if (!(instance instanceof Error)) + throw "Bad instanceof Error for "+name; + if (!(instance instanceof constructor)) + throw "Bad instanceof constructor for "+name; + if (instance instanceof Function) + throw "Bad instanceof Function for "+name; + for (var j = 1; j != instances.length; ++j) { + if (i != j && instance instanceof instances[j].constructor) { + throw "Unexpected (new "+name+") instanceof "+ instances[j].name; + } + } + } + + print("OK"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Error/shell.js b/source/spidermonkey-tests/js1_5/Error/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/Exceptions/browser.js b/source/spidermonkey-tests/js1_5/Exceptions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/Exceptions/catchguard-002-n.js b/source/spidermonkey-tests/js1_5/Exceptions/catchguard-002-n.js new file mode 100644 index 00000000..64c8ea08 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Exceptions/catchguard-002-n.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "var in catch clause should have caused an error."; +EXPECTED = "error"; + +var expect; +var actual; + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard var declaration negative test."); + + try + { + throw EXCEPTION_DATA; + } + catch (var e) + { + actual = e + ''; + } + + reportCompare(expect, actual, DESCRIPTION); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/js1_5/Exceptions/catchguard-003-n.js b/source/spidermonkey-tests/js1_5/Exceptions/catchguard-003-n.js new file mode 100644 index 00000000..e9e99eb4 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Exceptions/catchguard-003-n.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +DESCRIPTION = "Illegally constructed catchguard should have thrown an exception."; +EXPECTED = "error"; + +var expect; +var actual; + +test(); + +function test() +{ + enterFunc ("test"); + + var EXCEPTION_DATA = "String exception"; + var e; + + printStatus ("Catchguard syntax negative test #2."); + + try + { + throw EXCEPTION_DATA; + } + catch (e) + { + actual = e + ': 1'; + } + catch (e) /* two non-guarded catch statements should generate an error */ + { + actual = e + ': 2'; + } + + reportCompare(expect, actual, DESCRIPTION); + + exitFunc ("test"); +} diff --git a/source/spidermonkey-tests/js1_5/Exceptions/errstack-001.js b/source/spidermonkey-tests/js1_5/Exceptions/errstack-001.js new file mode 100644 index 00000000..834ce037 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Exceptions/errstack-001.js @@ -0,0 +1,245 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 28 Feb 2002 + * SUMMARY: Testing that Error.stack distinguishes between: + * + * A) top-level calls: myFunc(); + * B) no-name function calls: function() { myFunc();} () + * + * The stack frame for A) should begin with '@' + * The stack frame for B) should begin with '()' + * + * This behavior was coded by Brendan during his fix for bug 127136. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=127136#c13 + * + * Note: our function getStackFrames(err) orders the array of stack frames + * so that the 0th element will correspond to the highest frame, i.e. will + * correspond to a line in top-level code. The 1st element will correspond + * to the function that is called first, and so on... + * + * NOTE: At present Rhino does not have an Error.stack property. It is an + * ECMA extension, see http://bugzilla.mozilla.org/show_bug.cgi?id=123177 + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = '(none)'; +var summary = 'Testing Error.stack'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var myErr = ''; +var stackFrames = ''; + + +function A(x,y) +{ + return B(x+1,y+1); +} + +function B(x,z) +{ + return C(x+1,z+1); +} + +function C(x,y) +{ + return D(x+1,y+1); +} + +function D(x,z) +{ + try + { + throw new Error('meep!'); + } + catch (e) + { + return e; + } +} + + +myErr = A(44,13); +stackFrames = getStackFrames(myErr); +status = inSection(1); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(2); +actual = stackFrames[1].substring(0,2); +expect = 'A@'; +addThis(); + +status = inSection(3); +actual = stackFrames[2].substring(0,2); +expect = 'B@'; +addThis(); + +status = inSection(4); +actual = stackFrames[3].substring(0,2); +expect = 'C@'; +addThis(); + +status = inSection(5); +actual = stackFrames[4].substring(0,2); +expect = 'D@'; +addThis(); + + + +myErr = A('44:foo','13:bar'); +stackFrames = getStackFrames(myErr); +status = inSection(6); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(7); +actual = stackFrames[1].substring(0,2); +expect = 'A@'; +addThis(); + +status = inSection(8); +actual = stackFrames[2].substring(0,2); +expect = 'B@'; +addThis(); + +status = inSection(9); +actual = stackFrames[3].substring(0,2); +expect = 'C@'; +addThis(); + +status = inSection(10); +actual = stackFrames[4].substring(0,2); +expect = 'D@';; +addThis(); + + + +/* + * Make the first frame occur in a function with an empty name - + */ +myErr = function() { return A(44,13); } (); +stackFrames = getStackFrames(myErr); +status = inSection(11); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(12); +actual = stackFrames[1].substring(0,7); +expect = 'myErr<@'; +addThis(); + +status = inSection(13); +actual = stackFrames[2].substring(0,2); +expect = 'A@'; +addThis(); + +// etc. for the rest of the frames as above + + + +/* + * Make the first frame occur in a function with name 'anonymous' - + */ +var f = Function('return A(44,13);'); +myErr = f(); +stackFrames = getStackFrames(myErr); +status = inSection(14); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + +status = inSection(15); +actual = stackFrames[1].substring(0,10); +expect = 'anonymous@'; +addThis(); + +status = inSection(16); +actual = stackFrames[2].substring(0,2); +expect = 'A@'; +addThis(); + +// etc. for the rest of the frames as above + + + +/* + * Make a user-defined error via the Error() function - + */ +var message = 'Hi there!'; var fileName = 'file name'; var lineNumber = 0; +myErr = Error(message, fileName, lineNumber); +stackFrames = getStackFrames(myErr); +status = inSection(17); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + + +/* + * Now use the |new| keyword. Re-use the same params - + */ +myErr = new Error(message, fileName, lineNumber); +stackFrames = getStackFrames(myErr); +status = inSection(18); +actual = stackFrames[0].substring(0,1); +expect = '@'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +/* + * Split the string |err.stack| along its '\n' delimiter. + * As of 2002-02-28 |err.stack| ends with the delimiter, so + * the resulting array has an empty string as its last element. + * + * Pop that useless element off before doing anything. + * Then reverse the array, for convenience of indexing - + */ +function getStackFrames(err) +{ + var arr = err.stack.split('\n'); + arr.pop(); + return arr.reverse(); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i0. The bug was filed because we + * were getting i===0; i.e. |i| did not retain the value it had at the + * location of the error. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 121658; +var msg = '"Too much recursion" errors should be safely caught by try...catch'; +var TEST_PASSED = 'i retained the value it had at location of error'; +var TEST_FAILED = 'i did NOT retain this value'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var i; + + +function f() +{ + ++i; + + // try...catch should catch the "too much recursion" error to ensue + try + { + f(); + } + catch(e) + { + } +} + +i=0; +f(); +status = inSection(1); +actual = (i>0); +expect = true; +addThis(); + + + +// Now try in function scope - +function g() +{ + f(); +} + +i=0; +g(); +status = inSection(2); +actual = (i>0); +expect = true; +addThis(); + + + +// Now try in eval scope - +var sEval = 'function h(){++i; try{h();} catch(e){}}; i=0; h();'; +eval(sEval); +status = inSection(3); +actual = (i>0); +expect = true; +addThis(); + + + +// Try in eval scope and mix functions up - +sEval = 'function a(){++i; try{h();} catch(e){}}; i=0; a();'; +eval(sEval); +status = inSection(4); +actual = (i>0); +expect = true; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = formatThis(actual); + expectedvalues[UBound] = formatThis(expect); + UBound++; +} + + +function formatThis(bool) +{ + return bool? TEST_PASSED : TEST_FAILED; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(msg); + + for (var i=0; i Function.prototype.call() ---------> f() + * + * + * The question this bug addresses is, "What should we say |f.caller| is?" + * + * Before this fix, SpiderMonkey said it was |Function.prototype.call|. + * After this fix, SpiderMonkey emulates IE and says |gg| instead. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 222029; +var summary = "Make our f.caller property match IE's wrt f.apply and f.call"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f() +{ + return f.caller.p ; +} + + +/* + * Call |f| directly + */ +function g() +{ + return f(); +} +g.p = "hello"; + + +/* + * Call |f| via |f.call| + */ +function gg() +{ + return f.call(this); +} +gg.p = "hello"; + + +/* + * Call |f| via |f.apply| + */ +function ggg() +{ + return f.apply(this); +} +ggg.p = "hello"; + + +/* + * Shadow |p| on |Function.prototype.call|, |Function.prototype.apply|. + * In Sections 2 and 3 below, we no longer expect to recover this value - + */ +Function.prototype.call.p = "goodbye"; +Function.prototype.apply.p = "goodbye"; + + + +status = inSection(1); +actual = g(); +expect = "hello"; +addThis(); + +status = inSection(2); +actual = gg(); +expect = "hello"; +addThis(); + +status = inSection(3); +actual = ggg(); +expect = "hello"; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i Function.prototype.call() ---------> f() + * + * + * The question this bug addresses is, "What should we say |f.caller| is?" + * + * Before this fix, SpiderMonkey said it was |Function.prototype.call|. + * After this fix, SpiderMonkey emulates IE and says |gg| instead. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 222029; +var summary = "Make our f.caller property match IE's wrt f.apply and f.call"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +/* + * Try to confuse the engine by adding a |p| property to everything! + */ +var p = 'global'; +var o = {p:'object'}; + + +function f(obj) +{ + return f.caller.p ; +} + + +/* + * Call |f| directly + */ +function g(obj) +{ + var p = 'local'; + return f(obj); +} +g.p = "hello"; + + +/* + * Call |f| via |f.call| + */ +function gg(obj) +{ + var p = 'local'; + return f.call(obj, obj); +} +gg.p = "hello"; + + +/* + * Call |f| via |f.apply| + */ +function ggg(obj) +{ + var p = 'local'; + return f.apply(obj, [obj]); +} +ggg.p = "hello"; + + +/* + * Shadow |p| on |Function.prototype.call|, |Function.prototype.apply|. + * In Sections 2 and 3 below, we no longer expect to recover this value - + */ +Function.prototype.call.p = "goodbye"; +Function.prototype.apply.p = "goodbye"; + + + +status = inSection(1); +actual = g(o); +expect = "hello"; +addThis(); + +status = inSection(2); +actual = gg(o); +expect = "hello"; +addThis(); + +status = inSection(3); +actual = ggg(o); +expect = "hello"; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i +var BUGNUMBER = 278725; +var summary = 'Don\'t Crash during GC'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var results = []; +for (var k = 0; k < 600000; k++) { + if (! (k %100000)) { + printStatus('hi'); + if (0) { + results.length = 0; + gc(); + } + } + results.push({}); +} + +actual = 'No Crash'; +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-306788.js b/source/spidermonkey-tests/js1_5/GC/regress-306788.js new file mode 100644 index 00000000..d6e13067 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-306788.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306788; +var summary = 'Do not crash sorting Arrays due to GC'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var array = new Array(); + +for (var i = 0; i < 5000; i++) +{ + array[i] = new Array('1', '2', '3', '4', '5'); +} + +array.sort(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-311497.js b/source/spidermonkey-tests/js1_5/GC/regress-311497.js new file mode 100644 index 00000000..21905a7f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-311497.js @@ -0,0 +1,61 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311497; +var summary = 'Root pivots in js_HeapSort'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function force_gc() +{ + if (this.gc) gc(); + for (var i = 0; i != 30000; ++i) { + var tmp = Math.sin(i); + tmp = null; + } +} + +var array = new Array(10); +for (var i = 0; i != array.length; ++i) { + array[i] = String.fromCharCode(i, i, i); +} + +function cmp(a, b) +{ + for (var i = 0; i != array.length; ++i) { + array[i] = null; + } + force_gc(); + return 0; +} + +array.sort(cmp); + +// Verify that array contains either null or original strings + +var null_count = 0; +var original_string_count = 0; +for (var i = 0; i != array.length; ++i) { + var elem = array[i]; + if (elem === null) { + ++null_count; + } else if (typeof elem == "string" && elem.length == 3) { + var code = elem.charCodeAt(0); + if (0 <= code && code < array.length) { + if (code === elem.charCodeAt(1) && code == elem.charCodeAt(2)) + ++original_string_count; + } + } +} + +var expect = array.length; +var actual = null_count + original_string_count; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-313276.js b/source/spidermonkey-tests/js1_5/GC/regress-313276.js new file mode 100644 index 00000000..7f622fa3 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-313276.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313276; +var summary = 'Root strings'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = { + toString: function() { + return "*TEST*".substr(1, 4); + } +}; + +var TMP = 1e200; + +var likeZero = { + valueOf: function() { + if (typeof gc == "function") gc(); + for (var i = 0; i != 40000; ++i) { + var tmp = 2 / TMP; + tmp = null; + } + return 0; + } +} + + expect = "TEST"; +actual = String.prototype.substr.call(obj, likeZero); + +printStatus("Substring length: "+actual.length); +printStatus((expect === actual).toString()); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-313479.js b/source/spidermonkey-tests/js1_5/GC/regress-313479.js new file mode 100644 index 00000000..a13dba3f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-313479.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 313479; +var summary = 'Root access in jsnum.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var prepared_string = String(1); +String(2); // To remove prepared_string from newborn + +var likeString = { + toString: function() { + var tmp = prepared_string; + prepared_string = null; + return tmp; + } +}; + +var likeNumber = { + valueOf: function() { + gc(); + return 10; + } +} + + var expect = 1; +var actual = parseInt(likeString, likeNumber); +printStatus("expect="+expect+" actual="+actual); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-316885-01.js b/source/spidermonkey-tests/js1_5/GC/regress-316885-01.js new file mode 100644 index 00000000..da814bba --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-316885-01.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 316885; +var summary = 'Unrooted access in jsinterp.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str_with_num = "0.1"; + +var obj = { + get elem() { + return str_with_num; + }, + set elem(value) { + gc(); + } + +}; + +expect = Number(str_with_num); +actual = obj.elem++; + +gc(); + + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-316885-02.js b/source/spidermonkey-tests/js1_5/GC/regress-316885-02.js new file mode 100644 index 00000000..2cdda600 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-316885-02.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 316885; +var summary = 'Unrooted access in jsinterp.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str = "test"; + +var lval = { + valueOf: function() { + return str+"1"; + } +}; + +var ONE = 1; + +var rval = { + valueOf: function() { + // Make sure that the result of the previous lval.valueOf + // is not GC-rooted. + var tmp = "x"+lval; + if (typeof gc == "function") + gc(); + for (var i = 0; i != 40000; ++i) { + tmp = 1e100 / ONE; + } + return str; + } +}; + +expect = (str+"1" > str); +actual = (lval > rval); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-316885-03.js b/source/spidermonkey-tests/js1_5/GC/regress-316885-03.js new file mode 100644 index 00000000..93f632e7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-316885-03.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 316885; +var summary = 'Unrooted access in jsinterp.c'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var str = "test"; + +var lval = { + valueOf: function() { + return str+"1"; + } +}; + +var ONE = 1; + +var rval = { + valueOf: function() { + // Make sure that the result of the previous lval.valueOf + // is not GC-rooted. + var tmp = "x"+lval; + if (typeof gc == "function") + gc(); + for (var i = 0; i != 40000; ++i) { + tmp = 1e100 / ONE; + } + return str; + } +}; + +expect = (str+"1")+str; +actual = lval+rval; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-319980-01.js b/source/spidermonkey-tests/js1_5/GC/regress-319980-01.js new file mode 100644 index 00000000..e9e696c8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-319980-01.js @@ -0,0 +1,127 @@ +// |reftest| skip-if(!xulRuntime.shell) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 319980; +var summary = 'GC not called during non-fatal out of memory'; +var actual = ''; +var expect = 'Normal Exit'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +print ('This test should never fail explicitly. ' + + 'You must view the memory usage during the test. ' + + 'This test fails if memory usage for each subtest grows'); + +var timeOut = 45 * 1000; +var interval = 0.01 * 1000; +var testFuncWatcherId; +var testFuncTimerId; +var maxTests = 5; +var currTest = 0; + +if (typeof setTimeout == 'undefined') +{ + setTimeout = function() {}; + clearTimeout = function() {}; + actual = 'Normal Exit'; + reportCompare(expect, actual, summary); +} +else +{ + // delay start until after js-test-driver-end runs. + // delay test driver end + gDelayTestDriverEnd = true; + + setTimeout(testFuncWatcher, 1000); +} + +function testFuncWatcher() +{ + a = null; + + gc(); + + clearTimeout(testFuncTimerId); + testFuncWatcherId = testFuncTimerId = null; + if (currTest >= maxTests) + { + actual = 'Normal Exit'; + reportCompare(expect, actual, summary); + printStatus('Test Completed'); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + return; + } + ++currTest; + + print('Executing test ' + currTest + '\n'); + + testFuncWatcherId = setTimeout("testFuncWatcher()", timeOut); + testFuncTimerId = setTimeout(testFunc, interval); +} + + +var a; +function testFunc() +{ + + var i; + + switch(currTest) + { + case 1: + a = new Array(100000); + for (i = 0; i < 100000; i++ ) + { + a[i] = i; + } + break; + + case 2: + a = new Array(100000); + for (i = 0; i < 100000; i++) + { + a[i] = new Number(); + a[i] = i; + } + break; + + case 3: + a = new String() ; + a = new Array(100000); + for ( i = 0; i < 100000; i++ ) + { + a[i] = i; + } + + break; + + case 4: + a = new Array(); + a[0] = new Array(100000); + for (i = 0; i < 100000; i++ ) + { + a[0][i] = i; + } + break; + + case 5: + a = new Array(); + for (i = 0; i < 100000; i++ ) + { + a[i] = i; + } + break; + } + + if (testFuncTimerId) + { + testFuncTimerId = setTimeout(testFunc, interval); + } +} + + diff --git a/source/spidermonkey-tests/js1_5/GC/regress-324278.js b/source/spidermonkey-tests/js1_5/GC/regress-324278.js new file mode 100644 index 00000000..56996994 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-324278.js @@ -0,0 +1,63 @@ +// |reftest| skip -- slow, obsoleted by 98409 fix +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 324278; +var summary = 'GC without recursion'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// Number to push native stack size beyond 10MB if GC recurses generating +// segfault on Fedora Core / Ubuntu Linuxes where the stack size by default +// is 10MB/8MB. +var N = 100*1000; + +function build(N) { + // Exploit the fact that (in ES3), regexp literals are shared between + // function invocations. Thus we build the following chain: + // chainTop: function->regexp->function->regexp....->null + // to check how GC would deal with this chain. + + var chainTop = null; + for (var i = 0; i != N; ++i) { + var f = Function('some_arg'+i, ' return /test/;'); + var re = f(); + re.previous = chainTop; + chainTop = f; + } + return chainTop; +} + +function check(chainTop, N) { + for (var i = 0; i != N; ++i) { + var re = chainTop(); + chainTop = re.previous; + } + if (chainTop !== null) + throw "Bad chainTop"; + +} + +if (typeof gc != "function") { + gc = function() { + for (var i = 0; i != 50*1000; ++i) { + var tmp = new Object(); + } + } +} + +var chainTop = build(N); +printStatus("BUILT"); +gc(); +check(chainTop, N); +printStatus("CHECKED"); +chainTop = null; +gc(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-331719.js b/source/spidermonkey-tests/js1_5/GC/regress-331719.js new file mode 100644 index 00000000..3803b3d5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-331719.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 331719; +var summary = 'Problem with String.replace running with WAY_TOO_MUCH_GC'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); +print('This test requires WAY_TOO_MUCH_GC'); + +expect = 'No'; +actual = 'No'.replace(/\&\&/g, '&'); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-338653.js b/source/spidermonkey-tests/js1_5/GC/regress-338653.js new file mode 100644 index 00000000..17ef68de --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-338653.js @@ -0,0 +1,41 @@ +// |reftest| skip -- slow, killed on x86_64 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338653; +var summary = 'Force GC when JSRuntime.gcMallocBytes hits ' + + 'JSRuntime.gcMaxMallocBytes'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +print('This test should never fail explicitly. ' + + 'You must view the memory usage during the test. ' + + 'This test fails if the memory usage repeatedly spikes ' + + 'by several hundred megabytes.'); + +function dosubst() +{ + var f = '0x'; + var s = f; + + for (var i = 0; i < 18; i++) + { + s += s; + } + + var index = s.indexOf(f); + while (index != -1 && index < 10000) { + s = s.substr(0, index) + '1' + s.substr(index + f.length); + index = s.indexOf(f); + } + +} + +dosubst(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-341877-01.js b/source/spidermonkey-tests/js1_5/GC/regress-341877-01.js new file mode 100644 index 00000000..6fc88f3a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-341877-01.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341877; +var summary = 'GC hazard with for-in loop'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = { }; + +var prop = "xsomePropety".substr(1); + +obj.first = "first" + + obj[prop] = 1; + +for (var elem in obj) { + var tmp = elem.toString(); + delete obj[prop]; + // ensure that prop is cut from all roots + prop = "xsomePropety".substr(2); + obj[prop] = 2; + delete obj[prop]; + prop = null; + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } +} + + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-341877-02.js b/source/spidermonkey-tests/js1_5/GC/regress-341877-02.js new file mode 100644 index 00000000..b636ad69 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-341877-02.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341877; +var summary = 'GC hazard with for-in loop'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = { }; + +var prop = "xsomePropety".substr(1); + +obj.first = "first" + + obj[prop] = 1; + +for (var elem in obj) { + var tmp = elem.toString(); + delete obj[prop]; + // ensure that prop is cut from all roots + prop = "xsomePropety".substr(2); + obj[prop] = 2; + delete obj[prop]; + prop = null; + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GC/regress-346794.js b/source/spidermonkey-tests/js1_5/GC/regress-346794.js new file mode 100644 index 00000000..a747642f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-346794.js @@ -0,0 +1,43 @@ +// |reftest| skip -- slow, killed +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346794; +var summary = 'Do not crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // either don't crash or run out of memory + expectExitCode(0); + expectExitCode(3); + + function boo() { + s = ''; + for (;;) { + try { + new RegExp(s + '[\\'); + } catch(e) {} + s += 'q'; + } + } + + boo(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GC/regress-348532.js b/source/spidermonkey-tests/js1_5/GC/regress-348532.js new file mode 100644 index 00000000..cff651a6 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-348532.js @@ -0,0 +1,54 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 348532; +var summary = 'Do not overflow int when constructing Error.stack'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expectExitCode(0); + expectExitCode(3); + actual = 0; + + // construct string of 1<<23 characters + var s = Array((1<<23)+1).join('x'); + + var recursionDepth = 0; + function err() { + try { + return err.apply(this, arguments); + } catch (e) { + if (!(e instanceof InternalError)) + throw e; + } + return new Error(); + } + + // The full stack trace in error would include 64*4 copies of s exceeding + // 2^23 * 256 or 2^31 in length + var error = err(s,s,s,s); + + print(error.stack.length); + + expect = true; + actual = (error.stack.length > 0); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GC/regress-352606.js b/source/spidermonkey-tests/js1_5/GC/regress-352606.js new file mode 100644 index 00000000..b29c501f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-352606.js @@ -0,0 +1,28 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352606; +var summary = 'Do not crash involving post decrement'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + y = ({toString: gc}); new Function("y--;")() + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GC/regress-383269-01.js b/source/spidermonkey-tests/js1_5/GC/regress-383269-01.js new file mode 100644 index 00000000..43f6a15f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-383269-01.js @@ -0,0 +1,62 @@ +// |reftest| skip -- unreliable - based on GC timing +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383269; +var summary = 'Leak related to arguments object'; +var actual = 'No Leak'; +var expect = 'No Leak'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function generate_big_object_graph() + { + var root = {}; + f(root, 17); + return root; + function f(parent, depth) { + if (depth == 0) + return; + --depth; + f(parent.a = {}, depth); + f(parent.b = {}, depth); + } + } + + function outer() { var x = arguments; return function inner() { return x }; } + + function timed_gc() + { + var t1 = Date.now(); + gc(); + return Date.now() - t1; + } + + outer(1); + gc(); + var base_time = timed_gc(); + + var f = outer(generate_big_object_graph()); + f = null; + gc(); + var time = timed_gc(); + + if (time > (base_time + 1) * 3) + actual = "generate_big_object_graph() leaked, base_gc_time="+base_time+", last_gc_time="+time; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GC/regress-383269-02.js b/source/spidermonkey-tests/js1_5/GC/regress-383269-02.js new file mode 100644 index 00000000..9ce0e44a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-383269-02.js @@ -0,0 +1,66 @@ +// |reftest| skip -- unreliable - based on GC timing +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383269; +var summary = 'Leak related to arguments object'; +var actual = 'No Leak'; +var expect = 'No Leak'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function generate_big_object_graph() + { + var root = {}; + f(root, 17); + return root; + function f(parent, depth) { + if (depth == 0) + return; + --depth; + f(parent.a = {}, depth); + f(parent.b = {}, depth); + } + } + + function f(obj) { + with (obj) + return arguments; + } + + function timed_gc() + { + var t1 = Date.now(); + gc(); + return Date.now() - t1; + } + + var x = f({}); + x = null; + gc(); + var base_time = timed_gc(); + + x = f(generate_big_object_graph()); + x = null; + gc(); + var time = timed_gc(); + + if (time > (base_time + 10) * 3) + actual = "generate_big_object_graph() leaked, base_gc_time="+base_time+", last_gc_time="+time; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GC/regress-390078.js b/source/spidermonkey-tests/js1_5/GC/regress-390078.js new file mode 100644 index 00000000..4a86d84f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-390078.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 390078; +var summary = 'GC hazard with JSstackFrame.argv[-1]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var a = new Array(10*1000); + a[0] = { toString: function() { gc(); return ".*9"; }};; + a[1] = "g"; + + for (var i = 0; i != 10*1000; ++i) { + String(new Number(123456789)); + } + + "".match.apply(123456789, a); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GC/regress-418128.js b/source/spidermonkey-tests/js1_5/GC/regress-418128.js new file mode 100644 index 00000000..0642e83d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-418128.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 418128; +var summary = 'GC hazard with ++/--'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj = {}; + var id = { toString: function() { return ""+Math.pow(2, 0.1); } } + obj[id] = { valueOf: unrooter }; + print(obj[id]++); + gc(); + print(uneval(obj)); + + function unrooter() + { + delete obj[id]; + gc(); + return 10; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GC/regress-440558.js b/source/spidermonkey-tests/js1_5/GC/regress-440558.js new file mode 100644 index 00000000..b36d01ba --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GC/regress-440558.js @@ -0,0 +1,37 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 440558; +var summary = 'Do not assert: *flagp != GCF_FINAL'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('Note: this test requires that javascript.options.gczeal ' + + 'be set to 2 prior to the browser start'); + + m = function(a, b) { + if (++i < 10) { + } + }; + e = function(a, b) { + }; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/source/spidermonkey-tests/js1_5/GC/shell.js b/source/spidermonkey-tests/js1_5/GC/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/GetSet/browser.js b/source/spidermonkey-tests/js1_5/GetSet/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/GetSet/getset-002.js b/source/spidermonkey-tests/js1_5/GetSet/getset-002.js new file mode 100644 index 00000000..9790142f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GetSet/getset-002.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +var t = { + _y: "", + + get y() + { + var rv; + if (typeof this._y == "string") + rv = "got " + this._y; + else + rv = this._y; + + return rv; + }, + + set y(newVal) + { + this._y = newVal; + } +} + + + test(t); + +function test(t) +{ + enterFunc ("test"); + + printStatus ("Basic Getter/ Setter test (object literal notation)"); + + reportCompare ("", t._y, "y prototype check"); + + reportCompare ("got ", t.y, "y getter, before set"); + + t.y = "new y"; + reportCompare ("got new y", t.y, "y getter, after set"); + + t.y = 2; + reportCompare (2, t.y, "y getter, after numeric set"); + + var d = new Date(); + t.y = d; + reportCompare (d, t.y, "y getter, after date set"); + +} diff --git a/source/spidermonkey-tests/js1_5/GetSet/regress-353264.js b/source/spidermonkey-tests/js1_5/GetSet/regress-353264.js new file mode 100644 index 00000000..231cda01 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GetSet/regress-353264.js @@ -0,0 +1,18 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 353264; +var summary = 'Do not crash defining getter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.x getter= function () { }; export x; x; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/GetSet/regress-375976.js b/source/spidermonkey-tests/js1_5/GetSet/regress-375976.js new file mode 100644 index 00000000..9d8502d1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/GetSet/regress-375976.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375976; +var summary = 'Do not crash with postincrement custom property'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + this.__defineSetter__('x', gc); + this.__defineGetter__('x', Math.sin); + x = x++; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/GetSet/shell.js b/source/spidermonkey-tests/js1_5/GetSet/shell.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/LexicalConventions/browser.js b/source/spidermonkey-tests/js1_5/LexicalConventions/browser.js new file mode 100644 index 00000000..e69de29b diff --git a/source/spidermonkey-tests/js1_5/LexicalConventions/lexical-001.js b/source/spidermonkey-tests/js1_5/LexicalConventions/lexical-001.js new file mode 100644 index 00000000..47d049aa --- /dev/null +++ b/source/spidermonkey-tests/js1_5/LexicalConventions/lexical-001.js @@ -0,0 +1,149 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +/* + * Date: 26 November 2000 + * + *SUMMARY: Testing numeric literals that begin with 0. + *This test arose from Bugzilla bug 49233. + *The best explanation is from jsscan.c: + * + * "We permit 08 and 09 as decimal numbers, which makes + * our behaviour a superset of the ECMA numeric grammar. + * We might not always be so permissive, so we warn about it." + * + *Thus an expression 010 will evaluate, as always, as an octal (to 8). + *However, 018 will evaluate as a decimal, to 18. Even though the + *user began the expression as an octal, he later used a non-octal + *digit. We forgive this and assume he intended a decimal. If the + *JavaScript "strict" option is set though, we will give a warning. + */ + +//------------------------------------------------------------------------------------------------- +var BUGNUMBER = '49233'; +var summary = 'Testing numeric literals that begin with 0'; +var statprefix = 'Testing '; +var quote = "'"; +var asString = new Array(); +var actual = new Array(); +var expect = new Array(); + + + asString[0]='01' + actual[0]=01 + expect[0]=1 + + asString[1]='07' + actual[1]=07 + expect[1]=7 + + asString[2]='08' + actual[2]=08 + expect[2]=8 + + asString[3]='09' + actual[3]=09 + expect[3]=9 + + asString[4]='010' + actual[4]=010 + expect[4]=8 + + asString[5]='017' + actual[5]=017 + expect[5]=15 + + asString[6]='018' + actual[6]=018 + expect[6]=18 + + asString[7]='019' + actual[7]=019 + expect[7]=19 + + asString[8]='079' + actual[8]=079 + expect[8]=79 + + asString[9]='0079' + actual[9]=0079 + expect[9]=79 + + asString[10]='099' + actual[10]=099 + expect[10]=99 + + asString[11]='0099' + actual[11]=0099 + expect[11]=99 + + asString[12]='000000000077' + actual[12]=000000000077 + expect[12]=63 + + asString[13]='000000000078' + actual[13]=000000000078 + expect[13]=78 + + asString[14]='0000000000770000' + actual[14]=0000000000770000 + expect[14]=258048 + + asString[15]='0000000000780000' + actual[15]=0000000000780000 + expect[15]=780000 + + asString[16]='0765432198' + actual[16]=0765432198 + expect[16]=765432198 + + asString[17]='00076543219800' + actual[17]=00076543219800 + expect[17]=76543219800 + + asString[18]='0000001001007' + actual[18]=0000001001007 + expect[18]=262663 + + asString[19]='0000001001009' + actual[19]=0000001001009 + expect[19]=1001009 + + asString[20]='070' + actual[20]=070 + expect[20]=56 + + asString[21]='080' + actual[21]=080 + expect[21]=80 + + + +//------------------------------------------------------------------------------------------------- + test(); +//------------------------------------------------------------------------------------------------- + + +function showStatus(msg) +{ + return (statprefix + quote + msg + quote); +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + for (i=0; i !=asString.length; i++) + { + reportCompare (expect[i], actual[i], showStatus(asString[i])); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/LexicalConventions/regress-177314.js b/source/spidermonkey-tests/js1_5/LexicalConventions/regress-177314.js new file mode 100644 index 00000000..6f36402b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/LexicalConventions/regress-177314.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 30 Oct 2002 + * SUMMARY: '\400' should lex as a 2-digit octal escape + '0' + * See http://bugzilla.mozilla.org/show_bug.cgi?id=177314 + * + * Bug was that Rhino interpreted '\400' as a 3-digit octal escape. As such + * it is invalid, since octal escapes may only run from '\0' to '\377'. But + * the lexer should interpret this as '\40' + '0' instead, and throw no error. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 177314; +var summary = "'\\" + "400' should lex as a 2-digit octal escape + '0'"; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +// the last valid octal escape is '\377', which should equal hex escape '\xFF' +status = inSection(1); +actual = '\377'; +expect = '\xFF'; +addThis(); + +// now exercise the lexer by going one higher in the last digit +status = inSection(2); +actual = '\378'; +expect = '\37' + '8'; +addThis(); + +// trickier: 400 is a valid octal number, but '\400' isn't a valid octal escape +status = inSection(3); +actual = '\400'; +expect = '\40' + '0'; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i 5) + return sum; + sum += 1; + } + catch (e) + { + sum += 1; + } + } + } + } + finally + { + try + { + sum += 1; + print("In finally block of addValues_5() function: sum = " + sum); + } + catch (e) + { + sum += 1; + print("In finally catch block of addValues_5() function: sum = " + sum + ", e = " + e); + } + finally + { + sum += 1; + print("In finally finally block of addValues_5() function: sum = " + sum); + return sum; + } + } + } +} + +status = inSection(11); +obj = new Object(); +obj.arg1 = 1; +obj.arg2 = 2; +obj.arg3 = new Object(); +obj.arg3.a = 10; +obj.arg3.b = 20; +actual = addValues_5(obj); +expect = 8; +captureThis(); + + + + +function testObj(obj) +{ + var x = 42; + + try + { + with (obj) + { + if (obj.p) + throw obj.p; + x = obj.q; + } + } + finally + { + print("in finally block of testObj() function"); + return 999; + } +} + +status = inSection(12); +obj = {p:43}; +actual = testObj(obj); +expect = 999; +captureThis(); + + + +/* + * Next two cases are from http://bugzilla.mozilla.org/show_bug.cgi?id=120571 + */ +function a120571() +{ + while(0) + { + try + { + } + catch(e) + { + continue; + } + } +} + +// this caused a crash! Test to see that it doesn't now. +print(a120571); + +// Now test that we have a non-null value for a120571.toString() +status = inSection(13); +try +{ + actual = a120571.toString().match(/continue/)[0]; +} +catch(e) +{ + actual = 'FAILED! Did not find "continue" in function body'; +} +expect = 'continue'; +captureThis(); + + + + +function b() +{ + for(;;) + { + try + { + } + catch(e) + { + continue; + } + } +} + +// this caused a crash!!! Test to see that it doesn't now. +print(b); + +// Now test that we have a non-null value for b.toString() +status = inSection(14); +try +{ + actual = b.toString().match(/continue/)[0]; +} +catch(e) +{ + actual = 'FAILED! Did not find "continue" in function body'; +} +expect = 'continue'; +captureThis(); + + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function captureThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i (c) 1998-2000 +// This is version 2.2.6, dated 2000-03-30 + +// The script is freely distributable +// It may be used (and modified) as you wish, but retain this message +// For more information about the menu visit its home page +// http://www.treemenu.com/ + +/****************************************************************************** + * Define the MenuItem object. * + ******************************************************************************/ + +function MTMenuItem(text, url, target,nsearchID, icon) { + this.text = text; + this.url = url ? url : ""; + this.target = target ? target : ""; + this.icon = icon ? icon : ""; + this.nsearchID = nsearchID; + + this.number = MTMSubNumber++; + this.parent = null; + this.submenu = null; + this.expanded = false; + this.selected = false; + this.childSelected = false; + + this.MTMakeSubmenu = MTMakeSubmenu; + +} + +function MTMakeSubmenu(menu) { + this.submenu = menu; + for (var i = 0; i < menu.items.length; i++) + { + menu.items[i].parent = this; + } +} + + + +function getChildrenChecked(item, selected) +{ + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + item.submenu.items[x].selected = selected; + item.submenu.items[x].childSelected = false; + MarkChildren(item.submenu.items[x],selected); + } + } +} + +/****************************************************************************** + * Define the Menu object. * + ******************************************************************************/ + +function MTMenu() { + this.items = new Array(); + this.MTMAddItem = MTMAddItem; +} + +function MTMAddItem(item) { + this.items[this.items.length] = item; +} + +/****************************************************************************** + * Define the icon list, addIcon function and MTMIcon item. * + ******************************************************************************/ + +function IconList() { + this.items = new Array(); + this.addIcon = addIcon; +} + +function addIcon(item) { + this.items[this.items.length] = item; +} + +function MTMIcon(iconfile, match, type) { + this.file = iconfile; + this.match = match; + this.type = type; +} + +/****************************************************************************** + * Global variables. Not to be altered unless you know what you're doing. * + * User-configurable options are at the end of this document. * + ******************************************************************************/ + +var MTMLoaded = false; +var MTMLevel; +var MTMBar = new Array(); +var MTMIndices = new Array(); +var MTMBrowser = null; +var MTMNN3 = false; +var MTMNN4 = false; +var MTMIE4 = false; +var MTMUseStyle = true; + +/* + * (For a standalone JS shell test, we will simply set these as follows:) + */ +MTMBrowser = true; +MTMNN4 = true; + + +var MTMClickedItem = false; +var MTMExpansion = false; + +var MTMSubNumber = 1; +var MTMTrackedItem = false; +var MTMTrack = false; + +var MTMPreHREF = ""; +if(MTMIE4 || MTMNN3) { + MTMPreHREF += ""; // document.location.href.substring(0, document.location.href.lastIndexOf("/") +1); +} + +var MTMFirstRun = true; +var MTMCurrentTime = 0; // for checking timeout. +var MTMUpdating = false; +var MTMWinSize, MTMyval; +var MTMOutputString = ""; + +/****************************************************************************** + * Code that picks up frame names of frames in the parent frameset. * + ******************************************************************************/ + + +/****************************************************************************** + * Dummy function for sub-menus without URLs * + * Thanks to Michel Plungjan for the advice. :) * + ******************************************************************************/ + +function myVoid() { ; } + +/****************************************************************************** + * Functions to draw the menu. * + ******************************************************************************/ + +function MTMSubAction(SubItem, ReturnValue) { + + SubItem.expanded = (SubItem.expanded) ? false : true; + if(SubItem.expanded) { + MTMExpansion = true; + } + + MTMClickedItem = SubItem.number; + + if(MTMTrackedItem && MTMTrackedItem != SubItem.number) { + MTMTrackedItem = false; + } + + if(!ReturnValue) { + setTimeout("MTMDisplayMenu()", 10); + } + + return ReturnValue; +} + + +function MarkChildren(item, selected) +{ + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + item.submenu.items[x].selected = selected; + item.submenu.items[x].childSelected = false; + MarkChildren(item.submenu.items[x],selected); + } + } + +} + +function isAllChildrenSelected(item) +{ + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + if (!item.submenu.items[x].selected) + { + return false; + } + } + } + return true; +} + +function isSomeChildrenSelected(item) +{ + var retValue = false; + + if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + if (item.submenu.items[x].selected || item.submenu.items[x].childSelected) + { + retValue = true; + } + } + } + + return retValue; +} + +function ToggleSelected(item, ReturnValue) { + + item.selected = (item.selected) ? false : true; + item.childSelected = false; + + var currentNode = item; + + while (currentNode.parent) + { + currentNode.parent.selected = isAllChildrenSelected(currentNode.parent); + currentNode.parent.childSelected = isSomeChildrenSelected(currentNode.parent); + currentNode = currentNode.parent; + } + + MarkChildren(item,item.selected); + + if(!ReturnValue) { + setTimeout("MTMDisplayMenu()", 10); + } + + return ReturnValue; +} + + +function MTMStartMenu() { + MTMLoaded = true; + if(MTMFirstRun) { + MTMCurrentTime++; + if(MTMCurrentTime == MTMTimeOut) { // call MTMDisplayMenu + setTimeout("MTMDisplayMenu()",10); + } else { + setTimeout("MTMStartMenu()",100); + } + } +} + +function MTMDisplayMenu() { + if(MTMBrowser && !MTMUpdating) { + MTMUpdating = true; + MTMFirstRun = false; + + if(MTMTrack) { MTMTrackedItem = MTMTrackExpand(menu); } + + if(MTMExpansion && MTMSubsAutoClose) { MTMCloseSubs(menu); } + + MTMLevel = 0; + MTMDoc = parent.frames[MTMenuFrame].document + MTMDoc.open("text/html", "replace"); + MTMOutputString = ''; + if(MTMLinkedSS) { + MTMOutputString += ''; + } else if(MTMUseStyle) { + MTMOutputString += ''; + } + + MTMOutputString += ''; + + MTMOutputString += ''; + MTMOutputString += ''); + + MTMListItems(menu); + MTMDoc.writeln('
'; //REMOVED ROOT ICON '; + if(MTMUseStyle) { + MTMOutputString += ''; //REMOVED ROOT CAPTION  ' + MTMenuText + ''; + } else { + MTMOutputString += ''; //REMOVED ROOT CAPTION ' + MTMenuText + ''; + } + MTMDoc.writeln(MTMOutputString + '
'); + + MTMDoc.writeln(''); + MTMDoc.close(); + + if((MTMClickedItem || MTMTrackedItem) && (MTMNN4 || MTMIE4) && !MTMFirstRun) { + MTMItemName = "sub" + (MTMClickedItem ? MTMClickedItem : MTMTrackedItem); + if(document.layers && parent.frames[MTMenuFrame].scrollbars) { + MTMyval = parent.frames[MTMenuFrame].document.anchors[MTMItemName].y; + MTMWinSize = parent.frames[MTMenuFrame].innerHeight; + } else { + MTMyval = MTMGetPos(parent.frames[MTMenuFrame].document.all[MTMItemName]); + MTMWinSize = parent.frames[MTMenuFrame].document.body.offsetHeight; + } + if(MTMyval > (MTMWinSize - 60)) { + parent.frames[MTMenuFrame].scrollBy(0, parseInt(MTMyval - (MTMWinSize * 1/3))); + } + } + + MTMClickedItem = false; + MTMExpansion = false; + MTMTrack = false; + } + MTMUpdating = false; +} + +function MTMListItems(menu) { + var i, isLast; + for (i = 0; i < menu.items.length; i++) { + MTMIndices[MTMLevel] = i; + isLast = (i == menu.items.length -1); + MTMDisplayItem(menu.items[i], isLast); + + if (menu.items[i].submenu && menu.items[i].expanded) { + MTMBar[MTMLevel] = (isLast) ? false : true; + MTMLevel++; + MTMListItems(menu.items[i].submenu); + MTMLevel--; + } else { + MTMBar[MTMLevel] = false; + } + } + +} + +function MTMDisplayItem(item, last) { + var i, img, more; + + var MTMfrm = "parent.frames['code']"; + var MTMref = '.menu.items[' + MTMIndices[0] + ']'; + + if(item.submenu) { + var MTMouseOverText; + + var MTMClickCmd; + var MTMDblClickCmd = false; + + + if(MTMLevel > 0) { + for(i = 1; i <= MTMLevel; i++) { + MTMref += ".submenu.items[" + MTMIndices[i] + "]"; + } + } + + if(!MTMEmulateWE && !item.expanded && (item.url != "")) { + MTMClickCmd = "return " + MTMfrm + ".MTMSubAction(" + MTMfrm + MTMref + ",true);"; + } else { + MTMClickCmd = "return " + MTMfrm + ".MTMSubAction(" + MTMfrm + MTMref + ",false);"; + } + + if(item.url == "") { + MTMouseOverText = (item.text.indexOf("'") != -1) ? MTMEscapeQuotes(item.text) : item.text; + } else { + MTMouseOverText = "Expand/Collapse"; + } + } + + MTMOutputString = ''; + if(MTMLevel > 0) { + for (i = 0; i < MTMLevel; i++) { + MTMOutputString += (MTMBar[i]) ? MTMakeImage("menu_bar.gif") : MTMakeImage("menu_pixel.gif"); + } + } + + more = false; + if(item.submenu) { + if(MTMSubsGetPlus || MTMEmulateWE) { + more = true; + } else { + for (i = 0; i < item.submenu.items.length; i++) { + if (item.submenu.items[i].submenu) { + more = true; + } + } + } + } + if(!more) { + img = (last) ? "menu_corner.gif" : "menu_tee.gif"; + } else { + if(item.expanded) { + img = (last) ? "menu_corner_minus.gif" : "menu_tee_minus.gif"; + } else { + img = (last) ? "menu_corner_plus.gif" : "menu_tee_plus.gif"; + } + if(item.url == "" || item.expanded || MTMEmulateWE) { + MTMOutputString += MTMakeVoid(item, MTMClickCmd, MTMouseOverText); + } else { + MTMOutputString += MTMakeLink(item, true) + ' onclick="' + MTMClickCmd + '">'; + } + } + MTMOutputString += MTMakeImage(img); +///////////////////////////////////////// + + var MTMCheckRef = '.menu.items[' + MTMIndices[0] + ']'; + if(MTMLevel > 0) { + for(i = 1; i <= MTMLevel; i++) { + MTMCheckRef += ".submenu.items[" + MTMIndices[i] + "]"; + } + } + + MTMOutputString += MTMakeVoid(item, "return " + MTMfrm + ".ToggleSelected(" + MTMfrm + MTMCheckRef + ",false);", "Checked Status") ; + var checkedImage = item.selected ? "checked.gif" : "uchecked.gif"; + if (!item.selected) + { + checkedImage = item.childSelected ? "gchecked.gif" : "uchecked.gif"; + } + MTMOutputString += MTMakeImage(checkedImage); + MTMOutputString += ''; +///////////////////////////////////////////////// + + + if(item.submenu) { + if(MTMEmulateWE && item.url != "") + { + MTMOutputString += '' + MTMakeLink(item, false) + '>'; + } + + img = (item.expanded) ? "menu_folder_open.gif" : "menu_folder_closed.gif"; + + if(!more) { + if(item.url == "" || item.expanded) { + MTMOutputString += MTMakeVoid(item, MTMClickCmd, MTMouseOverText); + } else { + MTMOutputString += MTMakeLink(item, true) + ' onclick="' + MTMClickCmd + '">'; + } + } + MTMOutputString += MTMakeImage(img); + + } else { + MTMOutputString += MTMakeLink(item, true) + '>'; + img = (item.icon != "") ? item.icon : MTMFetchIcon(item.url); + MTMOutputString += MTMakeImage(img); + } + + if(item.submenu && (item.url != "") && (item.expanded && !MTMEmulateWE)) { + MTMOutputString += '' + MTMakeLink(item, false) + '>'; + } + + if(MTMNN3 && !MTMLinkedSS) { + var stringColor; + if(item.submenu && (item.url == "") && (item.number == MTMClickedItem)) { + stringColor = (item.expanded) ? MTMSubExpandColor : MTMSubClosedColor; + } else if(MTMTrackedItem && MTMTrackedItem == item.number) { + stringColor = MTMTrackColor; + } else { + stringColor = MTMLinkColor; + } + MTMOutputString += ''; + } + MTMOutputString += ' ' + item.text + ((MTMNN3 && !MTMLinkedSS) ? '' : '') + '' ; + MTMDoc.writeln(MTMOutputString + ''); +} + +function MTMEscapeQuotes(myString) { + var newString = ""; + var cur_pos = myString.indexOf("'"); + var prev_pos = 0; + while (cur_pos != -1) { + if(cur_pos == 0) { + newString += "\\"; + } else if(myString.charAt(cur_pos-1) != "\\") { + newString += myString.substring(prev_pos, cur_pos) + "\\"; + } else if(myString.charAt(cur_pos-1) == "\\") { + newString += myString.substring(prev_pos, cur_pos); + } + prev_pos = cur_pos++; + cur_pos = myString.indexOf("'", cur_pos); + } + return(newString + myString.substring(prev_pos, myString.length)); +} + +function MTMTrackExpand(thisMenu) { + var i, targetPath; + var foundNumber = false; + for(i = 0; i < thisMenu.items.length; i++) { + if(thisMenu.items[i].url != "" && MTMTrackTarget(thisMenu.items[i].target)) { + targetPath = parent.frames[thisMenu.items[i].target].location.protocol + '//' + parent.frames[thisMenu.items[i].target].location.host + parent.frames[thisMenu.items[i].target].location.pathname; + + if(targetPath.lastIndexOf(thisMenu.items[i].url) != -1 && (targetPath.lastIndexOf(thisMenu.items[i].url) + thisMenu.items[i].url.length) == targetPath.length) { + return(thisMenu.items[i].number); + } + } + if(thisMenu.items[i].submenu) { + foundNumber = MTMTrackExpand(thisMenu.items[i].submenu); + if(foundNumber) { + if(!thisMenu.items[i].expanded) { + thisMenu.items[i].expanded = true; + if(!MTMClickedItem) { MTMClickedItem = thisMenu.items[i].number; } + MTMExpansion = true; + } + return(foundNumber); + } + } + } + return(foundNumber); +} + +function MTMCloseSubs(thisMenu) { + var i, j; + var foundMatch = false; + for(i = 0; i < thisMenu.items.length; i++) { + if(thisMenu.items[i].submenu && thisMenu.items[i].expanded) { + if(thisMenu.items[i].number == MTMClickedItem) { + foundMatch = true; + for(j = 0; j < thisMenu.items[i].submenu.items.length; j++) { + if(thisMenu.items[i].submenu.items[j].expanded) { + thisMenu.items[i].submenu.items[j].expanded = false; + } + } + } else { + if(foundMatch) { + thisMenu.items[i].expanded = false; + } else { + foundMatch = MTMCloseSubs(thisMenu.items[i].submenu); + if(!foundMatch) { + thisMenu.items[i].expanded = false; + } + } + } + } + } + return(foundMatch); +} + +function MTMFetchIcon(testString) { + var i; + for(i = 0; i < MTMIconList.items.length; i++) { + if((MTMIconList.items[i].type == 'any') && (testString.indexOf(MTMIconList.items[i].match) != -1)) { + return(MTMIconList.items[i].file); + } else if((MTMIconList.items[i].type == 'pre') && (testString.indexOf(MTMIconList.items[i].match) == 0)) { + return(MTMIconList.items[i].file); + } else if((MTMIconList.items[i].type == 'post') && (testString.indexOf(MTMIconList.items[i].match) != -1)) { + if((testString.lastIndexOf(MTMIconList.items[i].match) + MTMIconList.items[i].match.length) == testString.length) { + return(MTMIconList.items[i].file); + } + } + } + return("menu_link_default.gif"); +} + +function MTMGetPos(myObj) { + return(myObj.offsetTop + ((myObj.offsetParent) ? MTMGetPos(myObj.offsetParent) : 0)); +} + +function MTMCheckURL(myURL) { + var tempString = ""; + if((myURL.indexOf("http://") == 0) || (myURL.indexOf("https://") == 0) || (myURL.indexOf("mailto:") == 0) || (myURL.indexOf("ftp://") == 0) || (myURL.indexOf("telnet:") == 0) || (myURL.indexOf("news:") == 0) || (myURL.indexOf("gopher:") == 0) || (myURL.indexOf("nntp:") == 0) || (myURL.indexOf("javascript:") == 0)) { + tempString += myURL; + } else { + tempString += MTMPreHREF + myURL; + } + return(tempString); +} + +function MTMakeVoid(thisItem, thisCmd, thisText) { + var tempString = ""; + tempString += ''); +} + +function MTMakeLink(thisItem, addName) { + var tempString = ''); +} + +function MTMakeBackImage(thisImage) { + var tempString = 'transparent url("' + ((MTMPreHREF == "") ? "" : MTMPreHREF); + tempString += MTMenuImageDirectory + thisImage + '")' + return(tempString); +} + +function MTMakeA(thisType, thisText, thisColor) { + var tempString = ""; + tempString += 'a' + ((thisType == "pseudo") ? ':' : '.'); + return(tempString + thisText + '{color:' + thisColor + ';background:' + MTMakeBackground() + ';}'); +} + +function MTMakeBackground() { + return((MTMBackground == "") ? MTMBGColor : 'transparent'); +} + +function MTMTrackTarget(thisTarget) { + if(thisTarget.charAt(0) == "_") { + return false; + } else { + for(i = 0; i < MTMFrameNames.length; i++) { + if(thisTarget == MTMFrameNames[i]) { + return true; + } + } + } + return false; +} + + + + +/****************************************************************************** + * User-configurable options. * + ******************************************************************************/ + +// Menu table width, either a pixel-value (number) or a percentage value. +var MTMTableWidth = "100%"; + +// Name of the frame where the menu is to appear. +var MTMenuFrame = "tocmain"; + +// variable for determining whether a sub-menu always gets a plus-sign +// regardless of whether it holds another sub-menu or not +var MTMSubsGetPlus = true; + + +// variable that defines whether the menu emulates the behaviour of +// Windows Explorer +var MTMEmulateWE = true; + +// Directory of menu images/icons +var MTMenuImageDirectory = "/ndk/doc/docui2k/menu-images/"; + +// Variables for controlling colors in the menu document. +// Regular BODY atttributes as in HTML documents. +var MTMBGColor = "#cc0000"; +var MTMBackground = ""; +var MTMTextColor = "white"; + +// color for all menu items +var MTMLinkColor = "#ffffcc"; + +// Hover color, when the mouse is over a menu link +var MTMAhoverColor = "#FF9933"; + +// Foreground color for the tracking & clicked submenu item +var MTMTrackColor ="#FF9933"; +var MTMSubExpandColor = "#ffffcc"; +var MTMSubClosedColor = "#ffffcc"; + +// All options regarding the root text and it's icon +var MTMRootIcon = "menu_new_root.gif"; +var MTMenuText = "Site contents:"; +var MTMRootColor = "white"; +var MTMRootFont = "Verdana"; +var MTMRootCSSize = "84%"; +var MTMRootFontSize = "-1"; + +// Font for menu items. +var MTMenuFont = "Verdana"; +var MTMenuCSSize = "74%"; +var MTMenuFontSize = "-1"; + +// Variables for style sheet usage +// 'true' means use a linked style sheet. +var MTMLinkedSS = false; +var MTMSSHREF = "style/menu.css"; + +// Whether you want an open sub-menu to close automagically +// when another sub-menu is opened. 'true' means auto-close +var MTMSubsAutoClose = false; + +// This variable controls how long it will take for the menu +// to appear if the tracking code in the content frame has +// failed to display the menu. Number if in tenths of a second +// (1/10) so 10 means "wait 1 second". +var MTMTimeOut = 25; + +/****************************************************************************** + * User-configurable list of icons. * + ******************************************************************************/ + +var MTMIconList = null; +MTMIconList = new IconList(); +// examples: +//MTMIconList.addIcon(new MTMIcon("menu_link_external.gif", "http://", "pre")); +//MTMIconList.addIcon(new MTMIcon("menu_link_pdf.gif", ".pdf", "post")); + +/****************************************************************************** + * User-configurable menu. * + ******************************************************************************/ + + +// navigation link is an object used to store the extracted information from +// the search request. The stored information will be used to build the +// navigation tree. + function navigationLink(title,URL,level,elementIndex,levelIndex,parentIndex,author) + { + var returnArray = new Array(); + returnArray.title = title; + returnArray.URL = URL; + returnArray.level = level; + returnArray.hasChild = false; + returnArray.elementIndex = elementIndex; + returnArray.parentIndex = parentIndex; + returnArray.levelIndex = levelIndex; + returnArray.author = author; + + return returnArray; + } + +// Variables used for tracking state as the search iterates through the list +// of documents returned. + var index = 0; + var currentLevel = 0; + var levelParents = new Array(); + var levelIndexes = new Array(); + var navigationTree = new Array(); + var treeNodes = new Array(); + var levelIndex = 0; + top.printList = ""; + top.printCount = 0; + +// asign the menu handle to the created tree + var menu = null; + + + function getNextChecked(item) + { + // case that root of tree is selected + if ( item.parent == null && item.selected) + { + for (var i = 0 ; i < top.authors.length; i++) + { + var re = /\s$/; + + if (top.titles[i].replace(re,"") == item.text.replace(re,"")) + { + top.printList += (top.authors[i].length + 3) + "_" + top.authors[i].replace(/\s/g,"+") + "+en"; + top.printCount ++; + } + } + } + else if (item.submenu != null) + { + for (var x = 0; x < item.submenu.items.length; x++) + { + if (item.submenu.items[x].selected) + { + var name = item.submenu.items[x].text; + for (var i = 0 ; i < top.authors.length; i++) + { + var re = /\s$/; + if (top.titles[i].replace(re,"") == name.replace(re,"")) + { + top.printList += (top.authors[i].length + 3) + "_" + top.authors[i].replace(/\s/g,"+") + "+en"; + top.printCount ++; + } + } + + } + else + { + getNextChecked(item.submenu.items[x]); + } + } + } + + } + +// Get a URL to pass checked topics to the Print Servlet + + + + function getPrintUrl(menu) + { + top.printList = ""; + top.printCount = 0; + + getNextChecked(menu.items[0]); + top.printList = top.printCount + "_" + top.printList; + + return top.printList; + } + + function setLevels() + { + + // Tracking the parent of the next node. + levelParents[currentLevel + 1] = index; + + // levelIndex is the child index under a branch + if (levelIndexes[currentLevel] == null) + { + levelIndexes[currentLevel] = 0; + } + else + { + levelIndexes[currentLevel] = levelIndexes[currentLevel] + 1; + levelIndexes[currentLevel + 1] = -1; + } + } + + function buildTree() + { + +// Determine which nodes have children and assign the correct property + for (var i = 0; i < navigationTree.length-1; i++) + { + // see if the current node has chilren + var thisLevel = navigationTree[i]["level"]; + var nextLevel = navigationTree[i+1]["level"]; + + if (nextLevel > thisLevel) + { + navigationTree[i]["hasChild"] = true; + } + else + { + navigationTree[i]["hasChild"] = false; + } + } + + +// create tree object nodes. + for( var j = 0; j < navigationTree.length; j++) + { + treeNodes[j] = null; + treeNodes[j] = new MTMenu(); + } + + +// add all items to nodes - +// NOTE, index to add to is the parent index + 1 for node tree offset of root=0 + for( var j3 = 0; j3 < navigationTree.length; j3++) + { + if (navigationTree[j3]["parentIndex"] == null) + { + var nsearchID = navigationTree[j3]["author"]; + treeNodes[0].MTMAddItem(new MTMenuItem(navigationTree[j3]["title"], navigationTree[j3]["URL"].replace(/http...developer.novell.com.ndk/gi,"/ndk") , "content_frame", nsearchID)); + } + else + { + var nsearchID = navigationTree[j3]["author"]; + treeNodes[navigationTree[j3]["parentIndex"] + 1 ].MTMAddItem(new MTMenuItem(navigationTree[j3]["title"], navigationTree[j3]["URL"].replace(/http...developer.novell.com.ndk/gi,"/ndk"), "content_frame",nsearchID)); + } + } + +// create submenu structure +// NOTE: add 1 to parent nodes for root = 0 offset. + for( var j4 = 0; j4 < navigationTree.length; j4++) + { + if (navigationTree[j4]["hasChild"]) + { + var pindex = null; + if (navigationTree[j4]["parentIndex"] == null) + { + + pindex = 0; + } + else + { + pindex = navigationTree[j4]["parentIndex"]+1; + } + + var lindex = navigationTree[j4]["levelIndex"]; + // document.write('treeNodes[' + pindex +'].items['+ lindex +'].MTMakeSubmenu(treeNodes['+(j4+1)+']);
'); + + treeNodes[pindex].items[lindex].MTMakeSubmenu(treeNodes[j4+1]); + } + } + + menu = treeNodes[0]; + +//expand the second item to display the sub contents on first display + if (menu.items[0] != null ) + { + menu.items[0].expanded = true; + + } + + + + } + + + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Libraries for C ","http://developer.novell.com/ndk/doc/ndslib/treetitl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Backup Services ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hevgtl7k.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDSBackupServerData ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSFreeNameList ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk12.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSGetReplicaPartitionNames ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk19.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSIsOnlyServerInTree ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk26.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSSYSVolumeRecovery ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk33.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSVerifyServerInfo ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk40.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Structures ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hqp7vveq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NAMEID_TYPE ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/sdk48.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Values ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hmmmal7s.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Reason Flags ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/h3r99io5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Server Flags ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/hnlckbki.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/dsbk_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Event Services ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hmwiqbwd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Concepts ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hj3udfo7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Event Introduction ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hmgeu8a1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Functions ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hxwcemsz.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Priorities ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hux0tdup.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Data Filtering ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/ha7nqbpy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Event Types ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h741eryw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Global Network Monitoring ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h9alatk4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Tasks ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/huypg52u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Monitoring NDS Events ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hhkihe7f.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registering for NDS Events ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h0xmzt1h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unregistering for NDS Events ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hk3fvwed.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NWDSEConvertEntryName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk28.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalAttrID ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk33.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalAttrName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk39.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalClassID ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk45.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalClassName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk51.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalEntryID ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk57.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEGetLocalEntryName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk63.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSERegisterForEvent ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk69.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSERegisterForEventWithResult ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk75.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSEUnRegisterForEvent ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk81.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Structures ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hqp7vveq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("DSEACL ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk88.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEBackLink ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk92.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEBinderyObjectInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk96.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEBitString ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk100.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEChangeConnState ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk104.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSECIList ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk108.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEDebugInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk112.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEmailAddress ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk116.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEntryInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk120.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEntryInfo2 ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk124.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEEventData ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk128.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEFaxNumber ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk132.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEHold ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk135.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEModuleState ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk139.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSENetAddress ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk143.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEOctetList ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk147.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEPath ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk151.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEReplicaPointer ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk155.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSESEVInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk159.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSETimeStamp ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk163.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSETraceInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk167.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSETypedName ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk172.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEVALData ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk176.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSEValueInfo ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/sdk179.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Values ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hmmmal7s.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Event Priorities ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hlerfllh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Event Types ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/hiz5y84y.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/dsev_enu/data/a6hw6zr.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Technical Overview ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h6tvg4z7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS as the Internet Directory ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h273w870.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Requirements for Networks and the Internet ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a2lh37b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Compliance to X.500 Standard ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h0jj42d7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Compliance with LDAP v3 ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a2b6k5w.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Directory Access Protocols ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a2b6k5x.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Programming Interfaces for NDS ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h2qzzkq8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Architecture ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h6mny7fl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Objects ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hp4dslw5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Names ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h0yh1byj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Types of Information Stored in NDS ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hci52ynf.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieval of Information from NDS ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hwwz5mda.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tree Walking ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h2xhaphc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Object Management ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h3mq2rf0.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Security ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hl8x1zxc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Authentication ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hp901s8a.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Access Control Lists ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hr8sqtoi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Inheritance ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hh9881ul.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NetWare File System ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h64btfhk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Partitions and Replicas ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hmq60r6h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Partitioning ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hqx5hvrp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replication ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hj5l8npv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Distributed Reference Management ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hzap47de.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Operations ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hgbpk7x9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Synchronization ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hsiplgn4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Background Processes ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hz2kcp2e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Bindery Services ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hwug6ytv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Bindery Context ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h8dwby8o.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Context Path ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h6y3yva6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Context Eclipsing ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hwcqk80m.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Bindery Objects ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hq4w9le6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Return Values ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hbjry4gt.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NDS Return Values from the Operating System ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h5h16q77.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Client Return Values ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/he2lvhfy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Agent Return Values ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hcvwzt90.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Directory Services Trace Utilities ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hujirj2n.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Using the DSTrace NLM ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hmg1e5gn.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Using Basic SET DSTrace Commands ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hdn0smja.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Starting Background Processes with SET DSTrace ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/h5pjd8fv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tuning Background Processes ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hhv9cqpk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Enabling DSTrace Messages with SET DSTrace ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/hcah5j8v.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/dsov_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Core Services ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h2y7hdit.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Programming Concepts ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h2x9gqr9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Context Handles ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huynzi7a.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buffer Management ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h9xiygoj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Read Requests for Object Information ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h7d6try4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Search Requests ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h11es6ae.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Developing in a Loosely Consistent Environment ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hsaqomj7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Add Object Requests ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hqjws9hi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Security and Applications ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h3xwyggn.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Authentication of Client Applications ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h0m1k6ck.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Multiple Tree Support ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hu5a8flo.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Effective Rights Function ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/he06edkq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/ha7fzu9h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hpmsr4w7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Read Requests for Schema Information ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h0a2o4v9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Extension Requests ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hrgy5k6e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huypg52u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Context Handle Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hw34ixeu.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buffer Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hb1nkqk4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Authentication and Connection Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huzx6sda.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hddp9m9i.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition and Replica Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hpx2o69b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Tasks ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hp85l75p.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NWDSAbbreviateName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk135.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAbortPartitionOperation ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk144.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddFilterToken ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk153.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk162.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddPartition (obsolete---moved from .h file 11/99) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk171.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddReplica ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk180.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAddSecurityEquiv ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk189.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAllocBuf ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk198.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAllocFilter ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk207.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuditGetObjectID ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk216.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuthenticate ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk225.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuthenticateConn ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk234.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSAuthenticateConnEx ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a3fvxoz.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSBackupObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk243.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSBeginClassItem ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk252.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCanDSAuthenticate ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk261.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCanonicalizeName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk270.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSChangeObjectPassword ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk279.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSChangeReplicaType ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk288.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCIStringsMatch ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk297.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCloseIteration ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk305.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCompare ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk314.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSComputeAttrValSize ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk360.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCreateContext (obsolete---moved from .h file 6/99) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk369.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSCreateContextHandle ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk371.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDefineAttr ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk382.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDefineClass ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk391.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDelFilterToken ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk402.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDuplicateContext (obsolete 03/99) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk412.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSDuplicateContextHandle ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk423.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSExtSyncList ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk434.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSExtSyncRead ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk443.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSExtSyncSearch ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk455.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSFreeBuf ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk465.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSFreeContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk474.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSFreeFilter ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk491.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGenerateObjectKeyPair ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk501.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk511.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk521.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk530.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk540.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrValFlags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk550.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetAttrValModTime ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk558.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetBinderyContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk566.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk603.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassDefCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk691.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassItem ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk769.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetClassItemCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk838.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk919.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetCountByClassAndName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk972.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetCurrentUser ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1031.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetDefNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1041.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetDSIInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1117.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetDSVerInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1209.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetEffectiveRights ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1274.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetMonitoredConnRef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1346.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetNDSInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1425.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1528.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectHostServerAddress ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1604.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1640.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetObjectNameAndInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1700.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionExtInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1781.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionExtInfoPtr ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1830.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk1938.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetPartitionRoot ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2001.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerAddresses (obsolete 3/98) ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2021.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerAddresses2 ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2030.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerDN ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2039.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetServerName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2047.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetSyntaxCount ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2056.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetSyntaxDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2065.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSGetSyntaxID ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2074.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSInitBuf ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2082.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSInspectEntry ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2091.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSJoinPartitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2099.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSList ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2108.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListAttrsEffectiveRights ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2117.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListByClassAndName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2126.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListContainableClasses ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2135.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListContainers ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2144.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListPartitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2153.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSListPartitionsExtInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2162.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSLogin ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2171.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSLoginAsServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2180.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSLogout ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2187.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMapIDToName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2196.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMapNameToID ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2205.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2214.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyDN ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2223.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2232.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSModifyRDN ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2241.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMoveObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2250.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSMutateObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a37nkf6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSOpenConnToNDSServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2259.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSOpenMonitoredConn ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2268.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSOpenStream ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2277.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPartitionReceiveAllUpdates ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2285.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPartitionSendAllUpdates ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2294.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutAttrName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2303.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutAttrNameAndVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2312.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutAttrVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2321.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutChange ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2330.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutChangeAndVal ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2339.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutClassItem ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2348.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutClassName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2357.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutFilter ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2364.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSPutSyntaxName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2373.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRead ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2380.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadAttrDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2389.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2398.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadNDSInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2407.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadObjectDSIInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2416.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadObjectInfo ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2425.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadReferences ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2434.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadSyntaxDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2443.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReadSyntaxes ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2451.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReloadDS ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2459.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveAllTypes ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2467.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveAttrDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2475.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveClassDef ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2484.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2493.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemovePartition ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2501.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemoveReplica ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2510.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRemSecurityEquiv ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2519.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRepairTimeStamps ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2528.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReplaceAttrNameAbbrev ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2536.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSResolveName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2544.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSRestoreObject ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2553.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSReturnBlockOfAvailableTrees ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2562.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSScanConnsForTrees ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2573.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSScanForAvailableTrees ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2582.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSearch ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2591.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2600.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetCurrentUser ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2609.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetDefNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2615.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSetMonitoredConnection ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2624.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSplitPartition ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2633.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSyncPartition ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2642.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSyncReplicaToServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2651.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSSyncSchema ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2660.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSUnlockConnection ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2669.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSVerifyObjectPassword ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2678.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSWhoAmI ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2687.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetDefaultNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2695.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetFileServerUTCTime ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2704.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetNumConnections ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2712.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetNWNetVersion ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2720.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWGetPreferredConnName ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2727.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWIsDSAuthenticated ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2736.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWIsDSServer ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2743.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWNetInit ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2750.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWNetTerm ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2759.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWSetDefaultNameContext ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2767.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWSetPreferredDSTree ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2776.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Structures ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hqp7vveq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Asn1ID_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2785.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attr_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2790.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Back_Link_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2795.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bit_String_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2800.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buf_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2805.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CI_List_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2810.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Class_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2815.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("EMail_Address_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2820.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Fax_Number_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2826.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Filter_Cursor_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2831.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Filter_Node_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2836.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Hold_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2841.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSOSVersion_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2846.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSStatsInfo_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2850.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Net_Address_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2855.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDS_TimeStamp_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2860.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object_ACL_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2865.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2870.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet_List_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2875.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet_String_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2880.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Path_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2885.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica_Pointer_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2890.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Syntax_Info_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2895.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("TimeStamp_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2900.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Typed_Name_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2906.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown_Attr_T ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/sdk2911.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hmmmal7s.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Attribute Constraint Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hudjk3k4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attribute Value Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h6anqw6h.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Buffer Operation Types and Related Functions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h8bn0lfm.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Class Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hpj620k3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Change Types for Modifying Objects ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hc4p686b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Context Keys and Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h1btx3en.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Default Context Key Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hlkcqs3t.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_FLAGS Bit Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/he1wcp92.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_NAME_FORM Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hmd7uuiw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_CONFIDENCE Bit Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h7hy5yg3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DCK_DSI_FLAGS Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/huh0ri39.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSI_ENTRY_FLAGS Values ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hqwiyl1u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Filter Tokens ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h487zxy3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Information Types for Attribute Definitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hdqx1cns.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Information Types for Class Definitions ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hcq403ms.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Information Types for Search and Read ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/ha682lf8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Name Space Types ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hs6qj0yl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Access Control Rights ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h12s89uj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDS Ping Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hf0fdqhd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DSP Replica Information Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hw42a7qg.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Network Address Types ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hniuyp90.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Scope Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h6wfyyfk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Types ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/he290q86.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica States ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/h9br9yt1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Syntax Matching Flags ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hd8fn0rm.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Syntax IDs ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hn1dsa7y.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Example Code ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/hb05g04v.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Context Handle ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2sofgc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object and Attribute ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snp6e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Browsing and Searching ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snu78.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Batch Modification of Objects and Attributes ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snzot.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a2snqyd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/nds__enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Schema Reference ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h4q1mn1i.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Schema Concepts ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h282spjh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Schema Structure ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hpmkggmh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Components ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hvt5bdoi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hbna398k.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Naming Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h9vf1k0r.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Containment Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hh1izaro.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Super Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hmdjysrx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Class Flags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h6rvyaky.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Mandatory and Optional Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h2vnta8j.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Default ACL Templates ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hr9sm1l0.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Auxiliary Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hlh5m1af.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attribute Type Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hotadinr.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Attribute Syntax Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h2m59phc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Schema Extensions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/he5mef3b.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Base Object Class Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hmv2qd15.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("AFP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk75.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Alias ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk83.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("applicationEntity ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk91.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("applicationProcess ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk99.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:File Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk107.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk115.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk123.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("certificationAuthority ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk131.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CommExec ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk139.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Computer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk147.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Country ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk155.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("cRLDistributionPoint ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk163.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dcObject ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk171.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Device ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk179.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Directory Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk187.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("domain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk195.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dSA ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk203.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Entity ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk219.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk227.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a38rj6z.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk243.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk251.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Locality ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk259.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Security Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk267.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Message Routing Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk275.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Messaging Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk283.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NCP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk291.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ndsLoginProperties ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk347.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Certificate Authority ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk355.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Key Material ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk363.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Access Partition ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvd6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvdx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Trusted Root ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvbk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Trusted Root Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2okvcf.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:groupOfCertificates ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk421.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailGroup1 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk445.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailRecipient ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk466.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:NetscapeMailServer5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk474.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:NetscapeServer5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk482.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nginfo3 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk510.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicenseUser ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk518.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organization ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk530.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Person ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk541.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk550.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Unit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk561.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk570.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Person ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk578.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("pkiCA ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk586.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("pkiUser ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk594.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Print Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk602.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk610.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Profile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk618.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk626.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk634.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Security ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk642.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk650.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk658.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("strongAuthenticationUser ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk698.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Template ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk706.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Top ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk714.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tree Root ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk722.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk730.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk738.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userSecurityInformation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk746.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk754.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:LAN Area ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk762.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Novell Object Class Extensions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3fh4x1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Entrust:CRLDistributionPoint ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk211.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("inetOrgPerson ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk235.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Broker ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk299.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Manager ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk307.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk315.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk323.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Master Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk331.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Slave Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk339.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NetSvc ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk379.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk386.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk394.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Product Container ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk412.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:groupOfUniqueNames5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk432.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailGroup5 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk454.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:Nginfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk491.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:Nginfo2 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk502.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("residentialPerson ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3omhcl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Scope Unit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk666.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Directory Agent ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk674.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk682.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SMS SMDR Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk690.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Graphical View of Object Class Inheritance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hzah4ydk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Alias and Bindery Object Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hw8hr9jx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Tree Root, domain, and Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hu1mitlx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Computer, Country, Device, and Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hnf7uif9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("List and Locality ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h48ynbap.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Organizational Role and Partition ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hrfg9w4e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ndsLoginProperties, Organization, and Organizational Unit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hzvb48kg.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ndsLoginProperties, Person, Organizational Person, and User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hknzjmiv.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Directory Map, Profile, Queues, Resource, and Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h8jovuwl.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Servers (AFP, Messaging, NCP, Print) and CommExec ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/ha47y85g.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Entity, Group, and Message Routing Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hds3w6ie.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Base Attribute Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/hf9qbbni.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Aliased Object Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk782.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Account Balance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk788.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk794.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Allow Unlimited Credit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk800.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("associatedName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a7bbra4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("attributeCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk806.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:A Encryption Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk812.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:B Encryption Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk818.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Contents ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk824.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Current Encryption Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk830.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:File Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk836.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Link List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk842.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk848.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk854.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Audit:Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk860.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("authorityRevocationList ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk866.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Authority Revocation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk872.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("AuxClass Object Class Backup ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk878.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Auxiliary Class Flag ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk884.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk890.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Object Restriction ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk896.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Property ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk902.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Restriction Level ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk908.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Bindery Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk914.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("businessCategory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk920.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk932.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("cACertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk938.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CA Private Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk944.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("CA Public Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk950.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Cartridge ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk956.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("certificateRevocationList ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk962.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Certificate Revocation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk968.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Certificate Validity Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk974.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("crossCertificatePair ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk926.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk986.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Convergence ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk998.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Cross Certificate Pair ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1004.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dc ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1034.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Default Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1040.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("deltaRevocationList ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1052.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("departmentNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3on5am.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Description ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1058.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("destinationIndicator ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1064.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Detect Intruder ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1070.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Device ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1076.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dmdName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1082.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dn ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1088.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("dnQualifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1094.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("DS Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1100.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("EMail Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1106.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("employeeType ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3on9iy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("enhancedSearchGuide ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1120.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Equivalent To Me ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1138.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1144.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("External Synchronizer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1150.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Facsimile Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1156.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Full Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1162.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Generational Qualifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1168.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("generationQualifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1174.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1180.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Given Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1186.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1192.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("GUID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1198.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("High Convergence Sync Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1216.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Higher Privileges ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1222.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Home Directory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1228.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Home Directory Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1234.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("homePhone ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onbgn.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("homePostalAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3ondem.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("houseIdentifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1258.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Host Device ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1240.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Host Resource Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1246.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Host Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1252.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Inherited ACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1264.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Initials ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1270.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("internationaliSDNNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1276.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Internet EMail Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1282.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Intruder Attempt Reset Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1288.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Intruder Lockout Reset Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1294.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("knowledgeInformation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1312.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1318.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Language ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1324.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Last Login Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1330.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Last Referenced Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1336.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP ACL v11 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1342.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Allow Clear Text Password ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1348.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Anonymous Identity ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1354.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Attribute Map v11 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1360.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Backup Log Filename ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1366.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Class Map v11 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1378.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Enable SSL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1384.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Enable TCP ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1390.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Enable UDP ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1396.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1402.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Host Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1408.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Log Filename ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1414.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Log Level ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1420.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Log Size Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1426.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Referral ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1432.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Screen Level ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1438.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Search Size Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1444.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Search Time Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1450.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1456.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server Bind Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1462.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server Idle Timeout ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1468.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Server List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1474.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP SSL Port ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1480.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Suffix ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1486.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP TCP Port ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1492.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP UDP Port ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1498.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:bindCatalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1516.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:bindCatalogUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1522.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:keyMaterialName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1546.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:otherReferralUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1552.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:searchCatalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1558.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:searchCatalogUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1564.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:searchReferralUsage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1570.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Locked By Intruder ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1576.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Lockout After Detection ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1582.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Allowed Time Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1588.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Disabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1594.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Expiration Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1600.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Grace Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1606.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Grace Remaining ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1612.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1618.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Attempts ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1624.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1630.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Intruder Reset Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1636.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Maximum Simultaneous ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1642.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Script ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1648.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Login Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1654.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Low Convergence Reset Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1660.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Low Convergence Sync Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1666.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Mailbox ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1672.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Mailbox Location ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1678.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("manager ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onljj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvAuthorizedRange ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1684.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvDefaultRange ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1690.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvDomainPolicy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1696.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvLabel ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1702.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("masvProposedLabel ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1708.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Member ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1726.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Members Of Template ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1732.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Memory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1738.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Message Routing Group ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1744.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Message Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1750.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Messaging Database Location ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1756.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Messaging Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1762.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1768.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Minimum Account Balance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1786.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("mobile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oojmc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Certificate Chain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4104.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Given Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4110.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Key File ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4116.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Key Material DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4122.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Keystore ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknqe.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Not After ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Not Before ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpe.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Parent CA ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4128.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Parent CA DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4134.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Private Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4140.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Public Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4146.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Public Key Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4152.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Cert ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknq2.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknq8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Server DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpq.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:SD Key Struct ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknpw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Subject Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4158.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Tree CA DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4164.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:Trusted Root Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknp8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSPKI:userCertificateInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2oknp2.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Network Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4170.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Network Address Restriction ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4176.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("New Object's DS Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4182.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("New Object's FS Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4188.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("New Object's Self Rights ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4194.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NNS Domain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4338.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notify ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4374.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:administratorContactInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4392.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:adminURL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4398.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAccessDomain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4404.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAlternateAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4410.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAutoReplyMode ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4416.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailAutoReplyText ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4422.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailDeliveryOption ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4428.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailForwardingAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4434.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailHost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4440.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailMessageStore ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4446.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailProgramDeliveryInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4452.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AmailQuota ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4458.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AnsLicenseEndTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4464.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AnsLicensedFor ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4470.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:AnsLicenseStartTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4476.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:employeeNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4482.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:installationTimeStamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4488.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailRoutingAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a2ixy4e.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:memberCertificateDesc ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4554.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mgrpRFC822mailmember ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4560.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:ngcomponentCIS ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4572.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsaclrole ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4578.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nscreator ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4584.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsflags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4590.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsnewsACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4614.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsprettyname ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4620.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverHostName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4626.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverProductName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4632.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverRoot ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4638.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:serverVersionNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4644.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:subtreeACI ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4650.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4656.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Obituary ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4662.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Obituary Notify ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4668.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4674.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Operator ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4680.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Other GUID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4686.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4692.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Owner ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4698.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Page Description Language ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4704.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("pager ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oojmj.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Control ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4716.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Creation Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4722.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Partition Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4728.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Allow Change ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4734.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Expiration Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4740.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Expiration Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4746.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Management ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4752.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Minimum Length ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4758.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Required ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4764.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Password Unique Required ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4770.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Passwords Used ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4776.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4782.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Permanent Config Parms ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4788.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Physical Delivery Office Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4794.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4800.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Code ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4806.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Office Box ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4812.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postmaster ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4818.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("preferredDeliveryMethod ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4824.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("presentationAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4830.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Print Job Configuration ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4848.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Print Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4854.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4860.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Configuration ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4872.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Control ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4878.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Private Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4914.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Profile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4920.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Profile Membership ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4926.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("protocolInformation ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4932.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Public Key ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4944.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Purge Vector ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4950.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Queue ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4956.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Queue Directory ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4962.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Received Up To ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4968.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Reference ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4974.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("registeredAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4980.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5010.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Up To ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5016.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5028.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5064.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Role Occupant ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5070.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("roomNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5076.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Run Setup Script ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5082.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5088.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5094.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAP Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5100.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Security DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5106.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SAS:Service DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5112.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("searchGuide ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5118.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("searchSizeLimit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5124.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("searchTimeLimit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5130.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Security Equals ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5136.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Security Flags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5142.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("See Also ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5148.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Serial Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5154.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5160.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Server Holds ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5166.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Set Password After Create ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5172.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Setup Script ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5178.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5286.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("supportedAlgorithms ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5298.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("supportedApplicationContext ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5304.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Connections ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5310.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Gateway ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5316.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Services ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5322.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Supported Typefaces ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5328.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Surname ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5334.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Synchronization Tolerance ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5358.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Synchronized Up To ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5364.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5370.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5376.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("telexNumber ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5382.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("telexTerminalIdentifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5388.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Timezone ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5394.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Title ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5400.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Transitive Vector ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5406.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Trustees Of New Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5412.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Type Creator Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5418.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink(" ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5424.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("uniqueID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5430.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5436.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown Auxiliary Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5442.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown Base Class ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5448.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Used By ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5454.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5460.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5466.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userPassword ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6m1fnz.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Uses ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5472.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Version ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5478.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5484.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Volume Space Restrictions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5490.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:Cost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5496.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:Default Cost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5502.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:LAN Area Membership ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5508.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("WANMAN:WAN Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5514.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("x121Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5520.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("x500UniqueIdentifier ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5526.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Novell Attribute Extensions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3fh5xp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("audio ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3omwno.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("carLicense ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3on4e7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Client Install Candidate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk980.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Color Supported ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk992.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Database Dir Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1010.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Database Volume Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1016.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Datapool Location ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1022.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Datapool Locations ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1028.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Delivery Methods Installed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1046.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("displayName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oorbo.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Employee ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1114.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Entrust:AttributeCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1126.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Entrust:User ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1132.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("GW API Gateway Directory Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1204.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("GW API Gateway Directory Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1210.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("IPP URI ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1300.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("IPP URI Security Scheme ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1306.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("jpegPhoto ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onfdu.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("labeledUri ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3onkke.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP Class Map ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1372.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("ldapPhoto ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3op8zp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAPUserCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1504.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:ARL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1510.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:caCertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1528.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:CRL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1534.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("LDAP:crossCertificatePair ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1540.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Authorized Range ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2co5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Default Range ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2cob.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Domain Policy ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2coh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Label ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2con.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MASV:Proposed Label ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a9j2cot.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Maximum Speed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1714.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Maximum Speed Units ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1720.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MHS Send Directory Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1774.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("MHS Send Directory Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1780.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Accountant Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1792.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Control Flags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1798.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Database Saved Timestamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1804.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Database Saved Data Image ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1810.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Database Saved Index Image ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1816.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Default Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1822.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Default Public Printer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1828.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Job Configuration ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1834.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Manager Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1840.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Operator Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1846.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Install List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1852.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Install Timestamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1858.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Queue List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1864.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Printer Siblings ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1870.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Public Printer Install List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1876.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS Replace All Client Printers ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1882.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS SMTP Server ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1888.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDPS User Role ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1894.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual All Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1900.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Attribute Count ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1906.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1912.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Base Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1918.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Catalog Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1924.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual End Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1930.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Filter ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1936.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Object Count ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1942.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Return Code ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1948.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Scope ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1954.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Search Aliases ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1960.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Start Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1966.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Actual Value Count ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1972.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:All Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1978.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:AttrDefTbl ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1984.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1990.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Auto Dredge ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk1996.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Base Object ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk2002.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:CatalogDB ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk2008.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Catalog List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk2014.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Dredge Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4008.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Filter ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4014.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:IndexDefTbl ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4020.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Indexes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4026.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Label ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4032.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Log ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4038.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Master Catalog ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4044.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Max Log Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4050.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Max Retries ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4056.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Max Threads ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4062.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Retry Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4068.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Scope ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4074.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Search Aliases ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4080.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Slave Catalog List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4086.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Start Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4092.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NDSCat:Synch Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4098.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Common Certificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4200.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Installed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4206.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Peak Installed ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4212.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Peak Used ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4218.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Current Used ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4224.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Hourly Data Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4230.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Database ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4236.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License ID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4242.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:License Service Provider ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4248.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:LSP Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4254.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Owner ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4260.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Peak Installed Data ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4266.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Peak Used Data ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4272.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Product ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4278.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Publisher ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4284.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Revision ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4290.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Search Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4296.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Summary Update Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4302.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Summary Version ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4308.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Transaction Database ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4314.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Transaction Log Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4320.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Transaction Log Size ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4326.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NLS:Version ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4332.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Consumers ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4344.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Profile ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4350.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Service Enabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4356.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Srvc Net Addr ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4362.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Notification Srvc Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4368.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NRD:Registry Data ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4380.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NRD:Registry Index ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4386.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAccessDomain ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4494.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAlternateAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4500.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAutoReplyMode ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4506.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailAutoReplyText ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4512.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailDeliveryOption ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4518.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailForwardingAddress ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4524.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailHost ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4530.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailMessageStore ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4536.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailProgramDeliveryInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4542.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:mailQuota ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4548.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:ngComponent ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4566.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicenseEndTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4596.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicensedFor ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4602.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NSCP:nsLicenseStartTime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4608.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Page Description Languages ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4710.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("preferredLanguage ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oon3t.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Primary Notification Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4836.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Primary Resource Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4842.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Agent Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4866.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Manufacturer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4884.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Mechanism Types ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4890.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Model ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4896.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4902.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printer to PA ID Mappings ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4908.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("PSM Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4938.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Advertising Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4986.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Service Enabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4992.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Srvc Net Addr ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk4998.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Registry Srvc Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5004.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resolution ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5022.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgmt Srvc Net Addr ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5034.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgmt Srvc Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5040.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgmt Service Enabled ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5046.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgr Database Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5052.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Resource Mgr Database Volume ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5058.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("secretary ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oon40.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Sides Supported ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5184.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Attribute ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5190.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Cache Limit ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5196.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP DA Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5202.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Directory Agent DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5208.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Language ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5214.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Lifetime ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5220.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Scope Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5226.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Scope Unit DN ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5232.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Start Purge Hour ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5238.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Status ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5244.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP SU Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5250.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP SU Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5256.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP Type ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5262.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SLP URL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5268.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SMS Protocol Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5274.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SMS Registered Service ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5280.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SU ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5292.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SvcInfo ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5340.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SvcType ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5346.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("SvcTypeID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5352.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("userSMIMECertificate ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a3oorbh.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("LDAP Operational Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a7lnqjy.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("createTimeStamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3q.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("creatorsName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3f.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("entryFlags ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxcp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("federationBoundary ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fzxsm.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("localEntryID ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fzcam.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("modifiersName ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3j.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("modifyTimeStamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fur3x.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("structuralObjectClass ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxcb.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("subordinateCount ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxci.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("subschemaSubentry ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a6fuxc4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Attribute Syntax Definitions ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/h55cqjqs.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Back Link ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5533.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Boolean ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5540.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Case Exact String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5547.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Case Ignore List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5554.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Case Ignore String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5561.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Class Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5568.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Counter ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5575.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Distinguished Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5582.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("EMail Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5589.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Facsimile Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5596.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Hold ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5603.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Integer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5610.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Interval ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5617.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Net Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5624.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Numeric String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5631.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Object ACL ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5638.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet List ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5645.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Octet String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5652.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Path ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5659.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Postal Address ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5666.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Printable String ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5673.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Replica Pointer ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5680.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Stream ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5687.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Telephone Number ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5694.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Time ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5701.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Timestamp ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5708.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Typed Name ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5715.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Unknown ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/sdk5722.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of Classes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("A through B ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx2.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("C through D ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx3.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("E through K ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx4.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("L through M ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx5.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("N ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx6.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("O ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("P through R ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx8.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("S ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx9.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("T through Z ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx10.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of Attributes ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx11.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("A ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx12.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("B ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx13.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("C ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx14.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("D ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx15.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("E ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx16.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("F through G ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx17.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("H ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx18.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("I through K ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx19.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("L ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx20.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("M ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx21.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("N ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx22.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("O ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx23.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("P ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx24.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Q ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx25.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("R ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx26.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("S ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx27.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("T ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx28.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("U ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx29.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("V through Z ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx30.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of ASN.1 IDs ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx31.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("0 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx32.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("1 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx33.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("2 through 2.4 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx34.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("2.5 through 2.9 ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx35.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Index of LDAP Names ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx36.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("A through B ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx37.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("C ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx38.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("D ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx39.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("E through F ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx40.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("G ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx41.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("H ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx42.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("I through K ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx43.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("L ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx44.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("M ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx45.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("N ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx46.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("O ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx47.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("P ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx48.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Q through R ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx49.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("S ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx50.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("T ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx51.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("U through Z ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/schidx52.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/schm_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Iterator Services ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hnv8aaj7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Concepts ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hj3udfo7.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Iterator Objects ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hwiuqovp.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Creation of an Iterator Object ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hrb7xece.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Iterator Indexes ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hqngpqag.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Positions of an Iterator Object ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/h25zhm0d.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Current Position Movement with Retrieval Functions ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hn9jdbnd.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieval of Data ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hy7j1t07.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Tasks ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/huypg52u.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Creating a Search Iterator Object ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hcyx2utx.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieving and Unpacking Object and Attribute Name Data ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/h9evr0ru.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Retrieving and Unpacking Object, Attribute, and Value Data ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/htq89y7t.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Functions ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/h7qwv271.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("NWDSItrAtEOF ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk29.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrAtFirst ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk36.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrClone ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk43.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrCount ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk50.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrCreateList ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk57.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrCreateSearch ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk64.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrDestroy ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk71.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetCurrent ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk77.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetInfo ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk84.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetNext ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk91.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetPosition ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk98.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrGetPrev ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk105.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrSetPosition ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk112.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrSetPositionFromIterator ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk119.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrSkip ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk126.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("NWDSItrTypeDown ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/sdk133.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("NDS Iterator Example Code ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hw9m9u6o.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + currentLevel++; + + setLevels(); + var navElement = navigationLink("Cloning an Iterator Object: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hur66hmi.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Counting with NDS Iterators: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hgllfzfg.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Creating and Using a List Iterator: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hfnbz1tw.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Creating a Search Iterator and Displaying the Results: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hhe6xegc.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Getting Iterator Information: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hfg59w8k.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Getting and Setting the Iterator's Position: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hh03dp06.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Listing in Reverse Order: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hsj5zfs1.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Positioning the Iterator with Typedown: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/hqvieqdk.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + setLevels(); + var navElement = navigationLink("Skipping Objects in the List: Example ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/ho81tg5d.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + setLevels(); + var navElement = navigationLink("Revision History ","http://developer.novell.com/ndk/doc/ndslib/skds_enu/data/a5i29ah.html",currentLevel,index,levelIndexes[currentLevel],levelParents[currentLevel],""); + navigationTree[index] = navElement; + index++; + + if (currentLevel > 1) currentLevel-- + + if (currentLevel > 1) currentLevel-- + + reportCompare('No Crash', 'No Crash', ''); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-114491.js b/source/spidermonkey-tests/js1_5/Regress/regress-114491.js new file mode 100644 index 00000000..1592b0b5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-114491.js @@ -0,0 +1,72 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 10 December 2001 + * SUMMARY: Regression test for bug 114491 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=114491 + * + * Rhino crashed on this code. It should produce a syntax error, not a crash. + * Using the () operator after a function STATEMENT is incorrect syntax. + * Rhino correctly caught the error when there was no |if (true)|. + * With the |if (true)|, however, Rhino crashed - + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 114491; +var summary = 'Regression test for bug 114491'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +status = inSection(1); +actual = 'Program execution did NOT fall into catch-block'; +expect = 'Program execution fell into into catch-block'; +try +{ + var sEval = 'if (true) function f(){}()'; + eval(sEval); +} +catch(e) +{ + actual = expect; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-114493.js b/source/spidermonkey-tests/js1_5/Regress/regress-114493.js new file mode 100644 index 00000000..03dd6fe9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-114493.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 10 December 2001 + * SUMMARY: Regression test for bug 114493 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=114493 + * + * Rhino crashed on this code. It should produce a syntax error, not a crash. + * Note that "3"[5] === undefined, and Rhino correctly gave an error if you + * tried to use the call operator on |undefined|: + * + * js> undefined(); + * js: TypeError: undefined is not a function. + * + * However, Rhino CRASHED if you tried to do "3"[5](). + * + * Rhino would NOT crash if you tried "3"[0]() or "3"[5]. Only array indices + * that were out of bounds, followed by the call operator, would crash. + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 114493; +var summary = 'Regression test for bug 114493'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var sEval = ''; + + +status = inSection(1); +actual = 'Program execution did NOT fall into catch-block'; +expect = 'Program execution fell into into catch-block'; +try +{ + sEval = '"3"[5]()'; + eval(sEval); +} +catch(e) +{ + actual = expect; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-115436.js b/source/spidermonkey-tests/js1_5/Regress/regress-115436.js new file mode 100644 index 00000000..0949bc64 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-115436.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 115436; +var summary = 'Do not crash javascript warning duplicate arguments'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); + +function x(y,y) +{ + return 3; +} + +var z = x(4,5); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-116228.js b/source/spidermonkey-tests/js1_5/Regress/regress-116228.js new file mode 100644 index 00000000..7556d433 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-116228.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 116228; +var summary = 'Do not crash - JSOP_THIS should null obj register'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var obj = {}; +obj.toString = function() {return this();} + try + { + obj.toString(); + } + catch(e) + { + } +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-118849.js b/source/spidermonkey-tests/js1_5/Regress/regress-118849.js new file mode 100644 index 00000000..49901344 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-118849.js @@ -0,0 +1,152 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 08 Jan 2002 + * SUMMARY: Just testing that we don't crash on this code + * See http://bugzilla.mozilla.org/show_bug.cgi?id=118849 + * + * http://developer.netscape.com:80/docs/manuals/js/core/jsref/function.htm + * The Function constructor: + * Function ([arg1[, arg2[, ... argN]],] functionBody) + * + * Parameters + * arg1, arg2, ... argN + * (Optional) Names to be used by the function as formal argument names. + * Each must be a string that corresponds to a valid JavaScript identifier. + * + * functionBody + * A string containing JS statements comprising the function definition. + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 118849; +var summary = 'Should not crash if we provide Function() with bad arguments' + var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; +var cnFAIL_1 = 'LEGAL call to Function() caused an ERROR!!!'; +var cnFAIL_2 = 'ILLEGAL call to Function() FAILED to cause an error'; +var cnSTRING = 'ASDF'; +var cnNUMBER = 123; + + +/***********************************************************/ +/**** THESE ARE LEGITMATE CALLS AND SHOULD ALL SUCCEED ***/ +/***********************************************************/ +status = inSection(1); +actual = cnFAIL_1; // initialize to failure +try +{ + Function(cnSTRING); + Function(cnNUMBER); // cnNUMBER is a valid functionBody + Function(cnSTRING,cnSTRING); + Function(cnSTRING,cnNUMBER); + Function(cnSTRING,cnSTRING,cnNUMBER); + + new Function(cnSTRING); + new Function(cnNUMBER); + new Function(cnSTRING,cnSTRING); + new Function(cnSTRING,cnNUMBER); + new Function(cnSTRING,cnSTRING,cnNUMBER); + + actual = expect; +} +catch(e) +{ +} +addThis(); + + + +/**********************************************************/ +/*** EACH CASE THAT FOLLOWS SHOULD TRIGGER AN ERROR ***/ +/*** (BUT NOT A CRASH) ***/ +/*** NOTE WE NOW USE cnFAIL_2 INSTEAD OF cnFAIL_1 ***/ +/**********************************************************/ +status = inSection(2); +actual = cnFAIL_2; +try +{ + Function(cnNUMBER,cnNUMBER); // cnNUMBER is an invalid JS identifier name +} +catch(e) +{ + actual = expect; +} +addThis(); + + +status = inSection(3); +actual = cnFAIL_2; +try +{ + Function(cnNUMBER,cnSTRING,cnSTRING); +} +catch(e) +{ + actual = expect; +} +addThis(); + + +status = inSection(4); +actual = cnFAIL_2; +try +{ + new Function(cnNUMBER,cnNUMBER); +} +catch(e) +{ + actual = expect; +} +addThis(); + + +status = inSection(5); +actual = cnFAIL_2; +try +{ + new Function(cnNUMBER,cnSTRING,cnSTRING); +} +catch(e) +{ + actual = expect; +} +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < UBound; i++) + { + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-119719.js b/source/spidermonkey-tests/js1_5/Regress/regress-119719.js new file mode 100644 index 00000000..06a314d0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-119719.js @@ -0,0 +1,26 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 119719; +var summary = 'Rethrown errors should have line number updated.'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var err = new Error('this error was created on line 46'); +try +{ + throw err; // rethrow on line 49 +} +catch(e) +{ + expect = 49; + actual = err.lineNumber; +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-127243.js b/source/spidermonkey-tests/js1_5/Regress/regress-127243.js new file mode 100644 index 00000000..11779f80 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-127243.js @@ -0,0 +1,75 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 127243; +var summary = 'Do not crash on watch'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof window != 'undefined' && typeof document != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + window.addEventListener('load', handleLoad, false); +} +else +{ + printStatus('This test must be run in the browser'); + reportCompare(expect, actual, summary); + +} + +var div; + +function handleLoad() +{ + div = document.createElement('div'); + document.body.appendChild(div); + div.setAttribute('id', 'id1'); + div.style.width = '50px'; + div.style.height = '100px'; + div.style.overflow = 'auto'; + + for (var i = 0; i < 5; i++) + { + var p = document.createElement('p'); + var t = document.createTextNode('blah'); + p.appendChild(t); + div.appendChild(p); + } + + div.watch('scrollTop', wee); + + setTimeout('setScrollTop()', 1000); +} + +function wee(id, oldval, newval) +{ + var t = document.createTextNode('setting ' + id + + ' value ' + div.scrollTop + + ' oldval ' + oldval + + ' newval ' + newval); + var p = document.createElement('p'); + p.appendChild(t); + document.body.appendChild(p); + + return newval; +} + +function setScrollTop() +{ + div.scrollTop = 42; + + reportCompare(expect, actual, summary); + + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-127557.js b/source/spidermonkey-tests/js1_5/Regress/regress-127557.js new file mode 100644 index 00000000..46fc8780 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-127557.js @@ -0,0 +1,82 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 06 Mar 2002 + * SUMMARY: Testing cloned function objects + * See http://bugzilla.mozilla.org/show_bug.cgi?id=127557 + * + * Before this bug was fixed, this testcase would error when run: + * + * ReferenceError: h_peer is not defined + * + * The line |g.prototype = new Object| below is essential: this is + * what was confusing the engine in its attempt to look up h_peer + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 127557; +var summary = 'Testing cloned function objects'; +var cnCOMMA = ','; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + +if (typeof clone == 'function') +{ + status = inSection(1); + var f = evaluate("(function(x, y) {\n" + + " function h() { return h_peer(); }\n" + + " function h_peer() { return (x + cnCOMMA + y); }\n" + + " return h;\n" + + "})", + {compileAndGo: false}); + var g = clone(f); + g.prototype = new Object; + var h = g(5,6); + actual = h(); + expect = '5,6'; + addThis(); +} +else +{ + reportCompare('Test not run', 'Test not run', 'shell only test requires clone()'); +} + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i>> 1); + return buildEval_r(beginLine, middle) + buildEval_r(middle, endLine); +} + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i Qp3[5][kh1+1] && + Qp3[5][kh1][e2k[4]] == Qp3[5][kh1+1][e2k[4]] && + Qp3[5][kh1].substr(kh1,kh1+1) == Qp3[5][kh1+1].substr(kh1,kh1+1)) + Qp3[5][kh1 + 2] = Qp3[5][kh1]; + + +actual = 'PASS'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-176125.js b/source/spidermonkey-tests/js1_5/Regress/regress-176125.js new file mode 100644 index 00000000..8334b2b7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-176125.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 176125; +var summary = 'if() should not return a value'; +var actual = ''; +var expect = 'undefined'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + printStatus('if (test1());'); + actual = typeof eval('if (test1());'); +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': if (test1());'); + +try +{ + printStatus('if (test2());'); + actual = typeof eval('if (test2());'); +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': if (test2());'); + + +function test1() +{ + 'Hi there!'; +} + +function test2() +{ + test1(); + return false; +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-179524.js b/source/spidermonkey-tests/js1_5/Regress/regress-179524.js new file mode 100644 index 00000000..8391b6e0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-179524.js @@ -0,0 +1,334 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 11 Nov 2002 + * SUMMARY: JS shouldn't crash on extraneous args to str.match(), etc. + * See http://bugzilla.mozilla.org/show_bug.cgi?id=179524 + * + * Note that when testing str.replace(), we have to be careful if the first + * argument provided to str.replace() is not a regexp object. ECMA-262 says + * it is NOT converted to one, unlike the case for str.match(), str.search(). + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=83293#c21. This means + * we have to be careful how we test meta-characters in the first argument + * to str.replace(), if that argument is a string - + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 179524; +var summary = "Don't crash on extraneous arguments to str.match(), etc."; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +str = 'ABC abc'; +var re = /z/ig; + +status = inSection(1); +actual = str.match(re); +expect = null; +addThis(); + +status = inSection(2); +actual = str.match(re, 'i'); +expect = null; +addThis(); + +status = inSection(3); +actual = str.match(re, 'g', ''); +expect = null; +addThis(); + +status = inSection(4); +actual = str.match(re, 'z', new Object(), new Date()); +expect = null; +addThis(); + + +/* + * Now try the same thing with str.search() + */ +status = inSection(5); +actual = str.search(re); +expect = -1; +addThis(); + +status = inSection(6); +actual = str.search(re, 'i'); +expect = -1; +addThis(); + +status = inSection(7); +actual = str.search(re, 'g', ''); +expect = -1; +addThis(); + +status = inSection(8); +actual = str.search(re, 'z', new Object(), new Date()); +expect = -1; +addThis(); + + +/* + * Now try the same thing with str.replace() + */ +status = inSection(9); +actual = str.replace(re, 'Z'); +expect = str; +addThis(); + +status = inSection(10); +actual = str.replace(re, 'Z', 'i'); +expect = str; +addThis(); + +status = inSection(11); +actual = str.replace(re, 'Z', 'g', ''); +expect = str; +addThis(); + +status = inSection(12); +actual = str.replace(re, 'Z', 'z', new Object(), new Date()); +expect = str; +addThis(); + + + +/* + * Now test the case where str.match()'s first argument is not a regexp object. + * In that case, JS follows ECMA-262 Ed.3 by converting the 1st argument to a + * regexp object using the argument as a regexp pattern, but then extends ECMA + * by taking any optional 2nd argument to be a regexp flag string (e.g.'ig'). + * + * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c10 + */ +status = inSection(13); +actual = str.match('a').toString(); +expect = str.match(/a/).toString(); +addThis(); + +status = inSection(14); +actual = str.match('a', 'i').toString(); +expect = str.match(/a/i).toString(); +addThis(); + +status = inSection(15); +actual = str.match('a', 'ig').toString(); +expect = str.match(/a/ig).toString(); +addThis(); + +status = inSection(16); +actual = str.match('\\s', 'm').toString(); +expect = str.match(/\s/m).toString(); +addThis(); + + +/* + * Now try the previous three cases with extraneous parameters + */ +status = inSection(17); +actual = str.match('a', 'i', 'g').toString(); +expect = str.match(/a/i).toString(); +addThis(); + +status = inSection(18); +actual = str.match('a', 'ig', new Object()).toString(); +expect = str.match(/a/ig).toString(); +addThis(); + +status = inSection(19); +actual = str.match('\\s', 'm', 999).toString(); +expect = str.match(/\s/m).toString(); +addThis(); + + +/* + * Try an invalid second parameter (i.e. an invalid regexp flag) + */ +status = inSection(20); +try +{ + actual = str.match('a', 'z').toString(); + expect = 'SHOULD HAVE FALLEN INTO CATCH-BLOCK!'; + addThis(); +} +catch (e) +{ + actual = e instanceof SyntaxError; + expect = true; + addThis(); +} + + + +/* + * Now test str.search() where the first argument is not a regexp object. + * The same considerations as above apply - + * + * Reference: http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c16 + */ +status = inSection(21); +actual = str.search('a'); +expect = str.search(/a/); +addThis(); + +status = inSection(22); +actual = str.search('a', 'i'); +expect = str.search(/a/i); +addThis(); + +status = inSection(23); +actual = str.search('a', 'ig'); +expect = str.search(/a/ig); +addThis(); + +status = inSection(24); +actual = str.search('\\s', 'm'); +expect = str.search(/\s/m); +addThis(); + + +/* + * Now try the previous three cases with extraneous parameters + */ +status = inSection(25); +actual = str.search('a', 'i', 'g'); +expect = str.search(/a/i); +addThis(); + +status = inSection(26); +actual = str.search('a', 'ig', new Object()); +expect = str.search(/a/ig); +addThis(); + +status = inSection(27); +actual = str.search('\\s', 'm', 999); +expect = str.search(/\s/m); +addThis(); + + +/* + * Try an invalid second parameter (i.e. an invalid regexp flag) + */ +status = inSection(28); +try +{ + actual = str.search('a', 'z'); + expect = 'SHOULD HAVE FALLEN INTO CATCH-BLOCK!'; + addThis(); +} +catch (e) +{ + actual = e instanceof SyntaxError; + expect = true; + addThis(); +} + + + +/* + * Now test str.replace() where the first argument is not a regexp object. + * The same considerations as above apply, EXCEPT for meta-characters. + * See introduction to testcase above. References: + * + * http://bugzilla.mozilla.org/show_bug.cgi?id=179524#c16 + * http://bugzilla.mozilla.org/show_bug.cgi?id=83293#c21 + */ +status = inSection(29); +actual = str.replace('a', 'Z'); +expect = str.replace(/a/, 'Z'); +addThis(); + +status = inSection(30); +actual = str.replace('a', 'Z', 'i'); +expect = str.replace(/a/i, 'Z'); +addThis(); + +status = inSection(31); +actual = str.replace('a', 'Z', 'ig'); +expect = str.replace(/a/ig, 'Z'); +addThis(); + +status = inSection(32); +actual = str.replace('\\s', 'Z', 'm'); //<--- NO!!! No meta-characters 1st arg! +actual = str.replace(' ', 'Z', 'm'); //<--- Have to do this instead +expect = str.replace(/\s/m, 'Z'); +addThis(); + + +/* + * Now try the previous three cases with extraneous parameters + */ +status = inSection(33); +actual = str.replace('a', 'Z', 'i', 'g'); +expect = str.replace(/a/i, 'Z'); +addThis(); + +status = inSection(34); +actual = str.replace('a', 'Z', 'ig', new Object()); +expect = str.replace(/a/ig, 'Z'); +addThis(); + +status = inSection(35); +actual = str.replace('\\s', 'Z', 'm', 999); //<--- NO meta-characters 1st arg! +actual = str.replace(' ', 'Z', 'm', 999); //<--- Have to do this instead +expect = str.replace(/\s/m, 'Z'); +addThis(); + + +/* + * Try an invalid third parameter (i.e. an invalid regexp flag) + */ +status = inSection(36); +try +{ + actual = str.replace('a', 'Z', 'z'); + expect = 'SHOULD HAVE FALLEN INTO CATCH-BLOCK!'; + addThis(); +} +catch (e) +{ + actual = e instanceof SyntaxError; + expect = true; + addThis(); +} + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i= 47.5 && odd1 <= 52.5) +{ + actual = expect; +} +else +{ + actual = ' is ' + odd1.toFixed(3); +} + +reportCompare(expect, actual, summary); + +if (odd2 >= 47.5 && odd2 <= 52.5) +{ + actual = expect; +} +else +{ + actual = ' is ' + odd2.toFixed(3); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-213482.js b/source/spidermonkey-tests/js1_5/Regress/regress-213482.js new file mode 100644 index 00000000..26ed7e89 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-213482.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 213482; +var summary = 'Do not crash watching property when watcher sets property'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var testobj = {value: 'foo'}; + +function watched (a, b, c) { + testobj.value = (new Date()).getTime(); +} + +function setTest() { + testobj.value = 'b'; +} + +testobj.watch("value", watched); + +setTest(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-214761.js b/source/spidermonkey-tests/js1_5/Regress/regress-214761.js new file mode 100644 index 00000000..ab5a4663 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-214761.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 214761; +var summary = 'Crash Regression from bug 208030'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); + +var code = "var bar1=new Array();\n" + + "bar1[0]='foo';\n" + + "var bar2=document.all&&navigator.userAgent.indexOf('Opera')==-1;\n" + + "var bar3=document.getElementById&&!document.all;\n" + + "var bar4=document.layers;\n" + + "function foo1(){\n" + + "return false;}\n" + + "function foo2(){\n" + + "return false;}\n" + + "function foo3(){\n" + + "return false;}\n" + + "function foo4(){\n" + + "return false;}\n" + + "function foo5(){\n" + + "return false;}\n" + + "function foo6(){\n" + + "return false;}\n" + + "function foo7(){\n" + + "return false;}"; + +try +{ + eval(code); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-216320.js b/source/spidermonkey-tests/js1_5/Regress/regress-216320.js new file mode 100644 index 00000000..01fcea0f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-216320.js @@ -0,0 +1,1006 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 September 2003 + * SUMMARY: Just seeing we don't crash on this code + * See http://bugzilla.mozilla.org/show_bug.cgi?id=216320 + * + */ +//----------------------------------------------------------------------------- +var BUGNUMBER = 216320; +var summary = "Just seeing we don't crash on this code"; + +printBugNumber(BUGNUMBER); +printStatus(summary); + + +/* TESTCASE BEGINS HERE */ +status=0; +ism='NO'; +scf='N'; + +function vol(){ + if(navigator.appName!="Netscape"){ if(!window.navigator.onLine){ alert(pbc0430); return false; } } + return true; } + +function vnid(formfield){ + nid=formfield.value; + if(!nid.match(/^\s*$/)){ + nl=nid.split('/').length; + if(nl!=2&&nl!=3){ + alert(pbc0420); + formfield.focus(); + return false; + }}} + +function vnull(formfield){ + text=formfield.value; + if(text.match(/^\s*$/)){ + alert(pbc0425); + formfield.focus(); + return false; + } + return true; +} + +function vdt(formfield){ + date=formfield.value; +//MM/DD/YYYY +//YYYY/MM/DD + year=date.substring(0,4); + hy1=date.charAt(4); + month=date.substring(5,7); + hy2=date.charAt(7); + day=date.substring(8,10); + today=new Date(); + tdy=today.getDate(); + tmn=today.getMonth()+1; + if(today.getYear()<2000)tyr=today.getYear()+1900; + else tyr=today.getYear(); + if(date.match(/^\s*$/)) {return true; } + + if(hy1!="/"||hy2!="/"){ + alert(pbc0409); + formfield.focus(); + return false; + } + if(month>12||day>31||month<=0||day<=0||(isNaN(month)==true)||(isNaN(day)==true)||(isNaN(year)==true)){ + alert(pbc0409); + formfield.focus(); + return false; + } + + if(((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)||(year%4==0&&month==2&&day>29)||(year%4!=0&&month==2&&day>28)||((month==4||month==6||month==9||month==11)&&day>30)){ + alert(pbc0409); + formfield.focus(); + return false; + } + return true; +} + +function vkdt(formfield){ + date=formfield.value; + year=date.substring(0,4); + hy1=date.charAt(4); + month=date.substring(5,7); + hy2=date.charAt(7); + day=date.substring(8,10); + today=new Date(); + tdy=today.getDate(); + tmn=today.getMonth()+1; + if(today.getYear()<2000)tyr=today.getYear()+1900; + else tyr=today.getYear(); + if(date.match(/^\s*$/)){ + alert(pbc0425); + formfield.focus(); + return false; + } + if(hy1!="/"||hy2!="/"){ + alert(pbc0409); + formfield.focus(); + return false; + } + + if(month>12||day>31||month<=0||day<=0||(isNaN(month)==true)||(isNaN(day)==true)||(isNaN(year)==true)){ + alert(pbc0409); + formfield.focus(); + return false; + } + + if(((month==1||month==3||month==5||month==7||month==8||month==10||month==12)&&day>31)||(year%4==0&&month==2&&day>29)||(year%4!=0&&month==2&&day>28)||((month==4||month==6||month==9||month==11)&&day>30)){ + alert(pbc0409); + formfield.focus(); + return false; + } + return true; +} + +function ddif(month1,day1,year1,month2,day2,year2){ + start = new Date(); + start.setYear(year1); + start.setMonth(month1-1); + start.setDate(day1); + start.setMinutes(0); + start.setHours(0); + start.setSeconds(0); + end = new Date(); + end.setYear(year2); + end.setMonth(month2-1); + end.setDate(day2); + end.setMinutes(0); + end.setHours(0); + end.setSeconds(0); + current =(end.getTime() - start.getTime()); + days = Math.floor(current /(1000 * 60 * 60 * 24)); + return(days); +} + +function vsub(form,status,ism,action){ + if(!vol()){ return false; } + if(status<9||status==12){ + band=form.BAND.options[form.BAND.selectedIndex].value; + if(band=="00"){ + alert(pbc0425); + form.BAND.focus(); + return false; + } + } + + if((status>=0&&status<5)||(status==7)||(status>=5&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vnull(form.PT)) { return false; } + adt1=form.STD; + adt2=form.END; + stdt=adt1.value; + etdt=adt2.value; + syr=stdt.substring(0,4); + start_hy1=stdt.charAt(4); + smon=stdt.substring(5,7); + start_hy2=stdt.charAt(7); + sdy=stdt.substring(8,10); + eyr=etdt.substring(0,4); + end_hy1=etdt.charAt(4); + emon=etdt.substring(5,7); + end_hy2=etdt.charAt(7); + edy=etdt.substring(8,10); + today=new Date(); + date=today.getDate(); + month=today.getMonth()+1; + if(today.getYear()<2000)year=today.getYear()+1900; else year=today.getYear(); + nextYear=year+1; + if(!vnull(form.STD)){ return false; } + if(!vnull(form.END)){ return false; } + if(start_hy1!="/"||start_hy2!="/"){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(end_hy1!="/"||end_hy2!="/"){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(smon>12||sdy>31||smon<=0||sdy<=0||(isNaN(smon)==true)||(isNaN(sdy)==true)||(isNaN(syr)==true)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(emon>12||edy>31||emon<=0||edy<=0||(isNaN(emon)==true)||(isNaN(edy)==true)||(isNaN(eyr)==true)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(((smon==1||smon==3||smon==5||smon==7||smon==8||smon==10||smon==12)&&sdy>31)||(syr%4==0&&smon==2&&sdy>29)||(syr%4!=0&&smon==2&&sdy>28)||((smon==4||smon==6||smon==9||smon==11)&&sdy>30)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(((emon==1||emon==3||emon==5||emon==7||emon==8||emon==10||emon==12)&&edy>31)||(eyr%4==0&&emon==2&&edy>29)||(eyr%4!=0&&emon==2&&edy>28)||((emon==4||emon==6||emon==9||emon==11)&&edy>30)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if ((eyr==nextYear)&&(syr==year)) { + if ((emon>1)||(edy >31)) { + alert(pbc0401); + form.END.focus(); + return false; + } + } else { + + if ((syr!=eyr)){ + alert(pbc0406); + form.STD.focus(); + return false; + } + if(smon>emon||(smon==emon&&sdy>=edy)){ + alert(pbc0402); + form.STD.focus(); + return false; + } + if((eyr!=year)&&(eyr!=year-1)){ + alert(pbc0405); + form.END.focus(); + return false; + } + } + if(ism=='YES'&&(status==5||status==6||status==12)){ + if(ddif(month,date,year,emon,edy,eyr)>31){ + alert(pbc0421); + form.END.focus(); + return false; + } + } + if((status>2&&status<5)||(status==7)||((status>=5&&status<9||status==12)&&ism=="YES")){ + if(status!=5){ + if(!vdt(form.IRD1)){ + return false; + } + if(!vdt(form.IRD2)){ + return false; + } + if(!vdt(form.IRD3)){ + return false; + } + ird1=form.IRD1.value; + ird2=form.IRD2.value; + ird3=form.IRD3.value; + if(((ird1==ird2)&&(!ird1.match(/^\s*$/)))||((ird1==ird3)&&(!ird1.match(/^\s*$/)))){ + alert(pbc0417); + form.IRD1.focus(); + return false; + } + else if((ird2==ird3)&&(!ird2.match(/^\s*$/))){ + alert(pbc0417); + form.IRD2.focus(); + return false; + } + if(!vdt(form.FRD1)){ return false;} + } + if(status==5){ + if(!vdt(form.IRD1)){return false;} + if(!vdt(form.IRD2)){return false;} + if(!vdt(form.IRD3)){return false;} + ird1=form.IRD1.value; + ird2=form.IRD2.value; + ird3=form.IRD3.value; + if(((ird1==ird2)&&(!ird1.match(/^\s*$/)))||((ird1==ird3)&&(!ird1.match(/^\s*$/)))){ + alert(pbc0417); + form.IRD1.focus(); + return false; + } + else if((ird2==ird3)&&(!ird2.match(/^\s*$/))){ + alert(pbc0417); + form.IRD2.focus(); + return false; + } + if(!vkdt(form.FRD1)){ + return false; + } + } + } + } + if((status>=0&&status<2)||(status==3)||(status==7)||(status>=2&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vnull(form.WO)){ + return false; + } + if(!vnull(form.EO)){ + return false; + } + if(!vnull(form.TO)){ + return false; + } + } + if((status==2||status==4)||(status>=5&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vnull(form.WR)){return false;} + if(!vnull(form.ER)){return false;} + if(!vnull(form.TR)){return false;} + } + if((status==5||status==6||status==12)&&ism=="YES"){ + if(!vkdt(form.FRD1)){return false;} + frdt=form.FRD1.value; + fryr=frdt.substring(0,4); + frmn=frdt.substring(5,7); + frdy=frdt.substring(8,10); + if(fryr90){ + if(!confirm(pbc0439+" "+pbc0442)){ + form.SID.focus(); + return false; + }}} else { +// MK/06-20-01 = If Rating Not equals to 4 blank out the sustained improve Date + form.SID.value=""; + } + if(!vnull(form.OAT)){ return false; } + if(form.MSRQ.checked==true){ + if(form.NEW_SIGN_MGR_ID.value.match(/^\s*$/)){ + alert(pbc0418); + form.NEW_SIGN_MGR_ID.focus(); + return false; + } + if(vnid(form.NEW_SIGN_MGR_ID)==false){ return false; } + } else { + if(!form.NEW_SIGN_MGR_ID.value.match(/^\s*$/)){ + alert(pbc0422); + form.NEW_SIGN_MGR_ID.focus(); + return false; + } + if ( (form.TOC.value=="YES") && (form.RSRQ.checked==true) ) { + alert(pbc0429); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + } + } + if(form.RSRQ.checked==true){ + if(form.NEW_SEC_LINE_REV_ID.value.match(/^\s*$/)){ + alert(pbc0418); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + } + if(vnid(form.NEW_SEC_LINE_REV_ID)==false){ return false; } + } else { + if(!form.NEW_SEC_LINE_REV_ID.value.match(/^\s*$/)) { + alert(pbc0423); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + } + if ( (form.TOC.value=="YES") && (form.MSRQ.checked==true) ) { + alert(pbc0431); + form.NEW_SEC_LINE_REV_ID.focus(); + return false; + }}} + if(status!=9){ +/**for returned objectives **/ + if(status==3){ + if(conf(pbc0466) == false) return false; + } + + if(ism=='NO'){ + if(status==0||status==1||status==3||status==7){ + if(conf(pbc0456) == false) return false; + } + + if(status==2||status==4||status==8){ + if(conf(pbc0457) == false) return false; + } + } else if(ism=='YES'){ + if(status==0||status==1||status==3||status==7){ + if(conf(pbc0458) == false)return false; + } + if(status==2||status==4||status==8){ + if(conf(pbc0459) == false)return false; + } + if(status==5||status==6){ + if(form.ESRQ.checked==false){ + if(conf(pbc0460) == false)return false; + } else { + if(conf(pbc0461) == false)return false; + }}}} + if(status==9){ + if(ism=='NO'){ + if(conf(pbc0462) == false)return false; + } else if(ism=='YES'){ + if(conf(pbc0463) == false)return false; + } else if(ism=='REVIEWER'){ + if(conf(pbc0464) == false)return false; + }} + sact(action); + if(status>=9&&status<=11){ snul(); } + form.submit(); + return true; +} + +function vsav(form,status,ism,action) { + if(!vol()){ return false; } + adt1=form.STD; + adt2=form.END; + stdt=adt1.value; + etdt=adt2.value; + syr=stdt.substring(0,4); + start_hy1=stdt.charAt(4); + smon=stdt.substring(5,7); + start_hy2=stdt.charAt(7); + sdy=stdt.substring(8,10); + eyr=etdt.substring(0,4); + end_hy1=etdt.charAt(4); + emon=etdt.substring(5,7); + end_hy2=etdt.charAt(7); + edy=etdt.substring(8,10); + today=new Date(); + date=today.getDate(); + month=today.getMonth()+1; + if(today.getYear()<2000) year=today.getYear()+1900; else year=today.getYear(); + nextYear=year+1; + if(!vnull(form.STD)) return false; + if(!vnull(form.END)) return false; + if(start_hy1!="/"||start_hy2!="/"){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(end_hy1!="/"||end_hy2!="/"){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(smon>12||sdy>31||smon<=0||sdy<=0||(isNaN(smon)==true)||(isNaN(sdy)==true)||(isNaN(syr)==true)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(emon>12||edy>31||emon<=0||edy<=0||(isNaN(emon)==true)||(isNaN(edy)==true)||(isNaN(eyr)==true)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if(((smon==1||smon==3||smon==5||smon==7||smon==8||smon==10||smon==12)&&sdy>31)||(syr%4==0&&smon==2&&sdy>29)||(syr%4!=0&&smon==2&&sdy>28)||((smon==4||smon==6||smon==9||smon==11)&&sdy>30)){ + alert(pbc0409); + form.STD.focus(); + return false; + } + if(((emon==1||emon==3||emon==5||emon==7||emon==8||emon==10||emon==12)&&edy>31)||(eyr%4==0&&emon==2&&edy>29)||(eyr%4!=0&&emon==2&&edy>28)||((emon==4||emon==6||emon==9||emon==11)&&edy>30)){ + alert(pbc0409); + form.END.focus(); + return false; + } + if ((eyr==nextYear)&&(syr==year)) { + if ((emon>1)||(edy >31)) { + alert(pbc0401); + form.END.focus(); + return false; + } + } else { + if ((syryear)) { + alert(pbc0407); + form.STD.focus(); + return false; + } + if((eyr!=year)&&(eyr!=year-1)){ + alert(pbc0405); + form.END.focus(); + return false; + } + if(smon>emon||(smon==emon&&sdy>=edy)){ + alert(pbc0403); + form.STD.focus(); + return false; + } + } + if((status>2&&status<5)||(status>=5&&status<9&&ism=="YES")||(status==12&&ism=="YES")){ + if(!vdt(form.IRD1)){return false;} + if(!vdt(form.IRD2)){return false;} + if(!vdt(form.IRD3)){ return false; } + ird1=form.IRD1.value; + ird2=form.IRD2.value; + ird3=form.IRD3.value; + if(((ird1==ird2)&&(!ird1.match(/^\s*$/)))||((ird1==ird3)&&(!ird1.match(/^\s*$/)))){ + alert(pbc0417); + form.IRD1.focus(); + return false; + } + else if((ird2==ird3)&&(!ird2.match(/^\s*$/))){ + alert(pbc0417); + form.IRD2.focus(); + return false; + } + if(!vdt(form.FRD1)){return false;} + if(ism=="YES"){ + if(!vdt(form.FRD1)){return false;} + } + } + if((status==5||status==6)&&ism=="YES"){ + rating=""; + for(i=0;i=9&&status<=11){ + snul(); + } + form.submit(); + return true; +} +function cft(formfield){ + nid=formfield.value; + if(nid.match(/^\s*$/)){ + alert(pbc0419); + formfield.focus(); + return false; + } + nl=nid.split('/').length; + if(nl!=2&&nl!=3){ + alert(pbc0420); + formfield.focus(); + return false; + } + return true; +} +function dcf(form,pbcId,cnum,sequence,status,atyp,ver){ + if(!vol()){} + dflg=confirm("\n\n<====================== " + pbc0468 + " ======================>\n\n" + pbc0469 + "\n\n<==================================================================>"); + if(dflg==true) { + form.ATYP.value=atyp; + form.PID.value=pbcId; + form.CNUM.value=cnum; + form.SEQ.value=sequence; + form.ST.value=status; + form.VER.value=ver; + form.submit(); + } + +} + + + +function lop(){ +//if(confirm(pbc0447+" "+pbc0451)){ + sck("timer",""); + sck("PBC_AUTH4",""); + sck("IBM004",""); + this.close(); +//} + +} + +function csrlop(){ + top.location="logoff.jsp"; +} +function lof(){ + csr=gck("IBM004"); + if(csr==null){ top.location="logoff.jsp"; } + else if(csr.charAt(0)==3){ window.location="csrlogoff.jsp"; } + else{ top.location="logoff.jsp"; } +} + +function goToHome(){ + top.location="pbcmain.jsp"; +} + +function docsr(){ + sck("IBM004","1^NONE^1"); + window.location="pbcmain.jsp" + } + +function ccd(){ + if(confirm(pbc0434)){ + if(navigator.appName!="Netscape"){ + if(!window.navigator.onLine){ + window.close(); + } + else { + window.location='pbcmain.jsp'; + } + } + else { + window.location='pbcmain.jsp'; + } + } +} + +function crt(form,action){ + if(!vol()){return false;} + band=form.BAND.options[form.BAND.selectedIndex].value; + if(band=="00"){ + alert(pbc0425); + form.BAND.focus(); + return false; + } + if(!confirm(pbc0450)){return false;} + sact(action); + form.submit(); + return true; +} +function cusat(form,action){ + if(!vol()){return false;} + sact(action); + form.action="unsatreq.jsp"; + form.submit(); + return true; +} +function cfrt(form,ism,action){ + if(!vol()){return false;} + sact(action); + if(ism=="NO"){ + if(confirm(pbc0449+" "+pbc0432)){ + snul(); + form.submit(); + return true; + } + } + if(ism=="REVIEWER"){ + if(confirm(pbc0449+" "+pbc0448)){ + snul(); + form.submit(); + return true; + } + } + if(ism=="YES"){ + if(confirm(pbc0440)){ + snul(); + form.submit(); + return true; + } + } +} + +function cces(form){ + if(form.ESRQ.checked==true){ + if(!confirm(pbc0435+" "+pbc0443))form.ESRQ.checked=false; + else {form.ESRQ.checked=true;} + } +} + +function ccms(form){ + if(form.MSRQ.checked==true){ + if(!confirm(pbc0441+" "+pbc0438+" "+pbc0444+" "+pbc0445))form.MSRQ.checked=false; + else { + form.MSRQ.checked=true; + } + } +} + +function ccrs(form){ + if(form.RSRQ.checked==true){ + if(!confirm(pbc0441+" "+pbc0438+" "+pbc0444+" "+pbc0446))form.RSRQ.checked=false; + else { + form.RSRQ.checked=true; + } + } +} + +function seo(){ + alert(pbc0412+" "+pbc0413+" "+pbc0414); +} +function cows(form,action){ + if(!vol()){ + return false; + } + if(confirm(pbc0437)){ + sact(action); + form.submit(); + return true; + } +} + +function srdb(rdb,value) { + for(i=0; i 0) { + for(i=0;i < lbx.options.length;i++) { + if(lbx.options[i].value == value) { + lbx.options[i].selected = true; + return true; + } + } + } + return true; +} + +function ourl(URL,WIN_NAME){ + if(!vol()){ return; } + var emp_win; + if(document.layers) { + child_screenX=window.screenX+50; + child_width=window.innerWidth-75; + child_height=window.innerHeight-75; + emp_win=window.open(URL,WIN_NAME,"screenX="+ child_screenX +",screenY=75,height="+ child_height +",width="+ child_width +",resizable,status,scrollbars"); + } else{ + child_width = screen.width-160; + child_height = screen.height-200; + emp_win=window.open(URL,WIN_NAME,"height="+ child_height +",width="+ child_width +",resizable=yes,status=no,scrollbars=yes"); +//emp_win.moveTo(110,0); + } +//if (URL.indexOf("pbcsitehelp")==-1) { alert("Opened new window."); } + emp_win.focus(); +} + +function dnh(form){ + form.NHS[0].checked=false; + form.NHS[1].checked=false; + form.NHB[0].checked=false; + form.NHB[1].checked=false; +} + +function cnh(form){ + isnh=""; + for(i=0; i"); + var txtValue3 = txtValue2.replace((/</g),"<"); + return txtValue3; +} + +function encodeText(txtValue) { + if (txtValue.match(/^\s*$/)) return txtValue; + var txtValue0 = txtValue.replace((/\r\n/g),'&lf;'); + var txtValue1 = txtValue0.replace((/"/g),'"'); +var txtValue2 = txtValue1.replace((/>/g),'>'); +var txtValue3 = txtValue2.replace((/ in +var BUGNUMBER = 240577; +var summary = 'object.watch execution context'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var createWatcher = function ( watchlabel ) +{ + var watcher = function (property, oldvalue, newvalue) + { + actual += watchlabel; return newvalue; + }; + return watcher; +}; + +var watcher1 = createWatcher('watcher1'); + +var object = {property: 'value'}; + +object.watch('property', watcher1); + +object.property = 'newvalue'; + +expect = 'watcher1'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-243174.js b/source/spidermonkey-tests/js1_5/Regress/regress-243174.js new file mode 100644 index 00000000..4352a9ae --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-243174.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 243174; +var summary = 'Don\'t Crash on Regular Expression'; +var actual = 'Crash'; +var expect = 'No Crash'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var result = "-+16-+59-+66-+67-+80-+82-+143-+170-+176-+189-+308-+363-+364-+365-+377-+393-+404-+405-+419-+430-+641-+732-+754-+783-+786-+972-+977-+980-+982-+1010-+1011-+1027-+1028-+1039-+1040-+1074-+1084-+1086-+1098-+1267-+1296-+1305-+1367-+1371-+1379-+1480-+1481-+1482-+1484-+1510-+1526-+1565-+1568-+1574-+1577-+1604-+1632-+1638-+1643-+1657-+1708-+1722-+1941-+1948-+1955-+1965-+1966-+2027-+2039-+2040-+2041-+2048-+2054-+2059-+2090-+2091-+2092-+2105-+2118-+".match(eval("/\\+(3|4|7|21|47|49|53|54|56|57|58|59|60|61|62|64|67|69|72|73|74|76|78|80|84|91|95|96|99|118|120|141|142|145|147|148|149|151|152|160|164|169|170|171|173|174|175|176|181|183|185|186|188|189|190|191|193|200|201|202|204|205|207|208|209|211|214|216|221|223|226|229|230|231|233|237|239|249|250|252|255|258|260|261|267|269|270|278|280|281|290|291|293|294|295|296|297|298|299|300|301|302|303|306|307|308|309|311|313|317|319|321|322|328|329|338|342|343|345|347|349|352|359|360|364|366|367|368|370|373|376|377|378|379|380|381|384|385|386|387|388|389|390|393|394|396|397|398|399|400|402|403|416|418|419|420|423|424|425|428|429|430|432|440|442|444|445|446|448|449|629|643|646|647|649|652|658|668|680|681|682|683|684|703|706|720|722|731|733|736|737|738|741|744|745|749|752|753|754|755|763|786|803|806|807|808|812|829|831|843|844|845|846|847|848|849|851|854|855|856|858|859|860|861|863|866|867|868|869|870|871|875|876|877|878|879|881|882|883|884|885|886|888|889|890|891|892|893|894|895|896|897|898|900|901|903|904|906|908|910|911|912|913|914|915|916|918|919|921|970|971|972|973|980|986|987|988|991|998|1009|1011|1015|1016|1031|1037|1038|1039|1040|1045|1046|1051|1052|1053|1054|1057|1058|1060|1064|1069|1070|1071|1074|1075|1085|1089|1090|1091|1093|1094|1095|1096|1097|1101|1103|1107|1109|1110|1112|1115|1116|1117|1171|1172|1175|1183|1184|1233|1289|1296|1300|1307|1315|1317|1327|1367|1374|1384|1392|1393|1408|1409|1412|1428|1479|1480|1481|1482|1483|1484|1485|1486|1487|1488|1490|1491|1492|1493|1497|1510|1522|1524|1565|1566|1567|1568|1573|1574|1576|1582|1584|1586|1588|1591|1592|1593|1596|1599|1600|1604|1606|1615|1616|1617|1621|1625|1631|1632|1633|1636|1640|1643|1644|1645|1646|1648|1650|1652|1655|1656|1657|1658|1660|1661|1663|1669|1670|1671|1672|1673|1675|1676|1677|1679|1680|1683|1684|1685|1686|1687|1688|1689|1695|1697|1702|1703|1704|1705|1706|1711|1712|1713|1714|1716|1722|1725|1726|1731|1738|1744|1747|1748|1749|1750|1753|1757|1761|1762|1763|1764|1765|1766|1767|1769|1771|1772|1773|1774|1775|1776|1777|1778|1779|1780|1781|1782|1783|1784|1785|1786|1788|1789|1790|1791|1792|1793|1794|1796|1797|1798|1799|1801|1802|1803|1804|1805|1806|1807|1808|1809|1810|1811|1812|1815|1816|1817|1818|1821|1822|1823|1824|1825|1827|1828|1831|1835|1840|1844|1845|1849|1850|1852|1853|1854|1855|1856|1857|1858|1859|1860|1862|1866|1867|1874|1885|1886|1887|1890|1894|1897|1898|1903|1912|1913|1917|1923|1933|1940|1941|1944|1945|1946|1947|1948|1949|1950|1963|1964|1965|1967|1971|1972|1973|1974|1978|1983|1988|1990|1991|2001|2003|2013|2015|2020|2025|2026|2027|2029|2034|2039|2040|2041|2047|2048|2049|2050|2053|2054|2055|2057|2058|2059|2060|2061|2064|2067|2070|2073|2076|2079|2082|2085|2088|2090|2092|2093|2094|2095|2096|2098|2099|2100|2101|2102|2103|2105|2114|2119|2121|2122|2124|2128|2131|2132|21|170|177|190|191|291|982|1038|1655|1978|2090|2133|1983|783|1582|2102|6|14|53|65|66|67|68|72|85|88|95|96|97|121|126|145|148|154|160|184|188|219|220|258|267|277|289|292|295|297|304|317|318|322|332|342|343|353|354|367|373|378|381|384|398|402|418|419|425|428|438|643|662|665|673|675|705|706|803|876|973|988|1013|1015|1020|1047|1091|1171|1184|1317|1400|1401|1486|1572|1590|1591|1593|1600|1621|1632|1633|1635|1636|1638|1640|1648|1657|1958|1966|1969|1973|1983|2048|2061|2064|2067|2070|2073|2076|2079|2082|2085|2088|2091|2126|2127|2128|1063|986|16|59|66|67|80|82|143|170|176|189|308|363|364|365|377|393|404|405|419|430|641|732|754|783|786|972|977|980|982|1010|1011|1027|1028|1039|1040|1074|1084|1086|1098|1267|1296|1305|1367|1371|1379|1480|1481|1482|1484|1510|1526|1565|1568|1574|1577|1604|1632|1638|1643|1657|1708|1722|1941|1948|1955|1965|1966|2027|2039|2040|2041|2048|2054|2059|2090|2091|2092|2105|2118|1300|971|2047|2050|986|1632|2049|1184|2047)-/g")); + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-243389-n.js b/source/spidermonkey-tests/js1_5/Regress/regress-243389-n.js new file mode 100644 index 00000000..00c11b4c --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-243389-n.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// test from Henrik Gemal +var BUGNUMBER = 243389; +var summary = 'Don\'t crash on Regular Expression'; +var actual = 'Crash'; +var expect = 'error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// this is a syntax error which will fire +// before the framework is ready. therefore the browser based +// version will not appear to run this test if it does not crash +if (/(\\|/)/) { +} + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-243869.js b/source/spidermonkey-tests/js1_5/Regress/regress-243869.js new file mode 100644 index 00000000..483ca2ef --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-243869.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase from Alex Vincent +var BUGNUMBER = 243869; +var summary = 'Rethrown custom Errors should retain file and line number'; +var actual = ''; +var expect = 'Test Location:123'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function bar() +{ + try + { + var f = new Error("Test Error", "Test Location", 123); + throw f; + } + catch(e) + { + throw e; + } +} + +try +{ + bar(); +} +catch(eb) +{ + actual = eb.fileName + ':' + eb.lineNumber + } + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-244470.js b/source/spidermonkey-tests/js1_5/Regress/regress-244470.js new file mode 100644 index 00000000..88b2e7a7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-244470.js @@ -0,0 +1,1079 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 244470; +var summary = 'Don\'t Crash'; +var actual = 'Crash'; +var expect = 'No Crash'; +printBugNumber(BUGNUMBER); +printStatus (summary); + +var g; +for (var i=1; ; ++i) { + + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + g=new Function("ABCDEFGHIJK", "1234"); + + + if (i % 80 == 0) { + printStatus("This doesn't want to crash now, please keep trying."); + break; + } + +} + +// These have to be named functions, using anonymous functions doesn't crash. +// Using just one function here makes the crash much less likely. +function dummy(){} +function dummy2(){} +function dummy3(){} + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-244619.js b/source/spidermonkey-tests/js1_5/Regress/regress-244619.js new file mode 100644 index 00000000..1406535e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-244619.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 244619; +var summary = 'Don\'t Crash'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f1() +{ + var o = new Object(); + eval.call(o, "var a = 'vodka'"); // <- CRASH !!! +} + +// Rhino does not allow indirect eval calls +try +{ + f1(); +} +catch(e) +{ +} + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-245113.js b/source/spidermonkey-tests/js1_5/Regress/regress-245113.js new file mode 100644 index 00000000..abbda6ac --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-245113.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 245113; +var summary = 'instanceof operator should return false for class prototype'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +Date.prototype.test = function() { + return (this instanceof Date); +}; + +String.prototype.test = function() { + return (this instanceof String); +}; + +status = summary + inSection(1); +expect = false; +actual = (Date.prototype.test instanceof Date); +reportCompare(expect, actual, status); + +status = summary + inSection(2); +expect = false; +actual = Date.prototype.test(); +reportCompare(expect, actual, status); + +status = summary + inSection(3); +expect = false; +actual = String.prototype.test(); +reportCompare(expect, actual, status); + +status = summary + inSection(4); +expect = true; +actual = (new Date()).test(); +reportCompare(expect, actual, status); + +status = summary + inSection(5); +expect = true; +actual = (new String()).test(); +reportCompare(expect, actual, status); + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-245308.js b/source/spidermonkey-tests/js1_5/Regress/regress-245308.js new file mode 100644 index 00000000..51c92858 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-245308.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 245308; +var summary = 'Don\'t Crash with nest try catch'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function foo(e) { + try {} + catch(ex) { + try {} + catch(ex) {} + } +} + +foo('foo'); + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-246911.js b/source/spidermonkey-tests/js1_5/Regress/regress-246911.js new file mode 100644 index 00000000..2f35f5fd --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-246911.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 246911; +var summary = 'switch() statement with variable as label'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'PASS'; + +var a = 10; +a = 9; +var b = 10; + +switch(b) +{ +case a: + actual = 'FAIL'; + break; +default: + actual = 'PASS'; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-246964.js b/source/spidermonkey-tests/js1_5/Regress/regress-246964.js new file mode 100644 index 00000000..d95b3c1d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-246964.js @@ -0,0 +1,160 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 246964; +// see also bug 248549, bug 253150, bug 259935 +var summary = 'undetectable document.all'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof document == 'undefined') +{ + expect = actual = 'Test requires browser: skipped'; + reportCompare(expect, actual, summary); +} +else +{ + status = summary + ' ' + inSection(1) + ' if (document.all) '; + expect = false; + actual = false; + if (document.all) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(2) + 'if (isIE) '; + expect = false; + actual = false; + var isIE = document.all; + if (isIE) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(3) + ' if (document.all != undefined) '; + expect = false; + actual = false; + if (document.all != undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + + status = summary + ' ' + inSection(4) + ' if (document.all !== undefined) '; + expect = true; + actual = false; + if (document.all !== undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(5) + ' if (document.all != null) ' ; + expect = false; + actual = false; + if (document.all != null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(6) + ' if (document.all !== null) ' ; + expect = true; + actual = false; + if (document.all !== null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(7) + ' if (document.all == null) '; + expect = true; + actual = false; + if (document.all == null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(8) + ' if (document.all === null) '; + expect = false; + actual = false; + if (document.all === null) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(9) + ' if (document.all == undefined) '; + expect = true; + actual = false; + if (document.all == undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(10) + ' if (document.all === undefined) '; + expect = false; + actual = false; + if (document.all === undefined) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(11) + + ' if (typeof document.all == "undefined") '; + expect = true; + actual = false; + if (typeof document.all == 'undefined') + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(12) + + ' if (typeof document.all != "undefined") '; + expect = false; + actual = false; + if (typeof document.all != 'undefined') + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(13) + ' if ("all" in document) '; + expect = (document.compatMode == 'CSS1Compat') ? false : true; + actual = false; + if ('all' in document) + { + actual = true; + } + reportCompare(expect, actual, status); + + status = summary + ' ' + inSection(14) + ' if (f.ie) '; + var f = new foo(); + + expect = false; + actual = false; + if (f.ie) + { + actual = true; + } + reportCompare(expect, actual, status); + +} + +function foo() +{ + this.ie = document.all; +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-247179.js b/source/spidermonkey-tests/js1_5/Regress/regress-247179.js new file mode 100644 index 00000000..9e01051e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-247179.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 247179; +var summary = 'RegExp \\b should not recognize non-ASCII alphanumerics as word characters'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 3; +actual = "m\ucc44nd".split(/\b/).length; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-248444.js b/source/spidermonkey-tests/js1_5/Regress/regress-248444.js new file mode 100644 index 00000000..bf192c10 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-248444.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 248444; +var summary = 'toString/toSource of RegExp should escape slashes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var re; +expect = '/[^\\/]+$/'; + +status = summary + ' ' + inSection(1); +re = /[^\/]+$/; +actual = re.toString(); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2); +re = RegExp("[^\\\/]+$"); +actual = re.toString(); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3); +re = RegExp("[^\\/]+$"); +actual = re.toString(); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(4); +re = RegExp("[^\/]+$"); +actual = re.toString(); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(5); +re = RegExp("[^/]+$"); +actual = re.toString(); +reportCompare(expect, actual, status); + + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-249211.js b/source/spidermonkey-tests/js1_5/Regress/regress-249211.js new file mode 100644 index 00000000..4fb718ba --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-249211.js @@ -0,0 +1,30 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 249211; +var summary = 'support export and import for 4xp'; +var actual = ''; +var expect = 'no error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + var o = {}; + var f = function(){}; + export *; + import o.*; + actual = 'no error'; +} +catch(e) +{ + actual = 'error'; +} + +reportCompare(expect, actual, summary); + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-252892.js b/source/spidermonkey-tests/js1_5/Regress/regress-252892.js new file mode 100644 index 00000000..363c21e5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-252892.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 252892; +var summary = 'for (var i in o) in heavyweight function f should define i in f\'s activation'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var status; + +var dodis; + +function f1(o){for(var x in o)printStatus(o[x]); return x} +function f2(o){with(this)for(var x in o)printStatus(o[x]); return x} +function f2novar(o){with(this)for(x in o)printStatus(o[x]); return x} +function f3(i,o){for(var x=i in o)printStatus(o[x]); return x} +function f4(i,o){with(this)for(var x=i in o)printStatus(o[x]); return x} + +var t=0; +function assert(c) +{ + ++t; + + status = summary + ' ' + inSection(t); + expect = true; + actual = c; + + if (!c) + { + printStatus(t + " FAILED!"); + } + reportCompare(expect, actual, summary); +} + +assert(f1([]) == undefined); + +assert(f1(['first']) == 0); + +assert(f2([]) == undefined); + +assert(f2(['first']) == 0); + +assert(f3(42, []) == 42); + +assert(f3(42, ['first']) == 0); + +assert(f4(42, []) == 42); + +assert(f4(42, ['first']) == 0); + +this.x = 41; + +assert(f2([]) == undefined); + +assert(f2novar([]) == 41); + +assert(f2(['first']) == undefined); + +assert(f2novar(['first']) == 0); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-253150.js b/source/spidermonkey-tests/js1_5/Regress/regress-253150.js new file mode 100644 index 00000000..dc6a0de1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-253150.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 253150; +var summary = 'Do not warn on detecting properties'; +var actual = ''; +var expect = 'No warning'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var testobject = {}; + +options('strict'); +options('werror'); + +try +{ + var testresult = testobject.foo; + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 1'); + +try +{ + if (testobject.foo) + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 2'); + +try +{ + if (typeof testobject.foo == 'undefined') + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 3'); + +try +{ + if (testobject.foo == null) + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 4'); + +try +{ + if (testobject.foo == undefined) + { + ; + } + actual = 'No warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary + ': 3'); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-254296.js b/source/spidermonkey-tests/js1_5/Regress/regress-254296.js new file mode 100644 index 00000000..041c3876 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-254296.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 254296; +var summary = 'javascript regular expression negative lookahead'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = [3].toString(); +actual = /^\d(?!\.\d)/.exec('3.A'); +if (actual) +{ + actual = actual.toString(); +} + +reportCompare(expect, actual, summary + ' ' + inSection(1)); + +expect = 'AB'; +actual = /(?!AB+D)AB/.exec("AB") + ''; +reportCompare(expect, actual, summary + ' ' + inSection(2)); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-254974.js b/source/spidermonkey-tests/js1_5/Regress/regress-254974.js new file mode 100644 index 00000000..306fafbb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-254974.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// this test originally was only seen if typed into the js shell. +// loading as a script file did not exhibit the problem. +// this test case may not exercise the problem properly. + +var BUGNUMBER = 254974; +var summary = 'all var and arg properties should be JSPROP_SHARED'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function testfunc(tokens) { + function eek(y) {} /* remove function eek and the code will change its behavior */ + return tokens.split(/\]?(?:\[|$)/).shift(); +} +bad=testfunc; +function testfunc(tokens) { + return tokens.split(/\]?(?:\[|$)/).shift(); +} +good=testfunc; + +var goodvalue = good("DIV[@id=\"test\"]"); +var badvalue = bad("DIV[@id=\"test\"]"); + +printStatus(goodvalue); +printStatus(badvalue); + +expect = goodvalue; +actual = badvalue; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-256501.js b/source/spidermonkey-tests/js1_5/Regress/regress-256501.js new file mode 100644 index 00000000..11186d9d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-256501.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 256501; +var summary = 'Check Recursion'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'error'; + +try +{ + var N = 100*1000; + var buffer = new Array(N * 2 + 1); + for (var i = 0; i != N; ++i) + { + buffer[i] = 'do '; + buffer[buffer.length - i - 1] = ' while(0);'; + } + buffer[N] = 'printStatus("TEST");'; + + // text is do do ... do print("TEST"); while(0); while(0); ... while(0); + var text = buffer.join(''); + + eval(text); + actual = 'no error'; +} +catch(e) +{ + actual = 'error'; +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-256617.js b/source/spidermonkey-tests/js1_5/Regress/regress-256617.js new file mode 100644 index 00000000..6dfc44be --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-256617.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// should fail with syntax error. won't run in browser... +var BUGNUMBER = 256617; +var summary = 'throw statement: eol should not be allowed'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'syntax error'; + +try +{ + eval('throw\n1;'); + actual = 'throw ignored'; +} +catch(e) +{ + if (e instanceof SyntaxError) + { + actual = 'syntax error'; + } + else + { + actual = 'no error'; + } +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-256798.js b/source/spidermonkey-tests/js1_5/Regress/regress-256798.js new file mode 100644 index 00000000..3926c40e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-256798.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 256798; +var summary = 'regexp zero-width positive lookahead'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var status; + +status = summary + ' ' + inSection(1); +expect = 'aaaa,a'; +actual = /(?:(a)+)/.exec("baaaa") + ''; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2); +expect = ',aaa'; +actual = /(?=(a+))/.exec("baaabac") + ''; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3); +expect = 'b,aaa'; +actual = /b(?=(a+))/.exec("baaabac") + ''; +reportCompare(expect, actual, status); + +// XXXbc revisit this +status = summary + ' ' + inSection(4); +expect = 'null'; +actual = /b(?=(b+))/.exec("baaabac") + ''; +reportCompare(expect, actual, status); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-259935.js b/source/spidermonkey-tests/js1_5/Regress/regress-259935.js new file mode 100644 index 00000000..0c8a717a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-259935.js @@ -0,0 +1,43 @@ +// |reftest| skip-if(xulRuntime.shell) -- browser only +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 259935; +var summary = 'document.all can be easily detected'; +var actual = ''; +var expect = 'not detected'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof document == 'undefined') +{ + document = {}; +} + +function foo() { + this.ie = document.all; +} + +var f = new foo(); + +if (f.ie) { + actual = 'detected'; +} else { + actual = 'not detected'; +} + +reportCompare(expect, actual, summary); + +f = {ie: document.all}; + +if (f.ie) { + actual = 'detected'; +} else { + actual = 'not detected'; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-260541.js b/source/spidermonkey-tests/js1_5/Regress/regress-260541.js new file mode 100644 index 00000000..fc696ba2 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-260541.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// have not been able to reproduce the crash in any build. +var BUGNUMBER = 260541; +var summary = 'Recursive Error object should not crash'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var myErr = new Error( "Error Text" ); +myErr.name = myErr; + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-261886.js b/source/spidermonkey-tests/js1_5/Regress/regress-261886.js new file mode 100644 index 00000000..45fbf27e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-261886.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 261886; +var summary = 'Always evaluate delete operand expression'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var o = {a:1}; + +expect = 2; +try +{ + delete ++o.a; + actual = o.a; +} +catch(e) +{ + actual = o.a; + summary += ' ' + e; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-261887.js b/source/spidermonkey-tests/js1_5/Regress/regress-261887.js new file mode 100644 index 00000000..28e39392 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-261887.js @@ -0,0 +1,37 @@ +// |reftest| skip -- we violate the spec here with our new iterators +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase from Oscar Fogelberg +var BUGNUMBER = 261887; +var summary = 'deleted properties should not be visited by for in'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var count = 0; +var result = ""; +var value = ""; + +var t = new Object(); +t.one = "one"; +t.two = "two"; +t.three = "three"; +t.four = "four"; + +for (var prop in t) { + if (count==1) delete(t.three); + count++; + value = value + t[prop]; + result = result + prop; +} + +expect = 'onetwofour:onetwofour'; +actual = value + ':' + result; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-271716-n.js b/source/spidermonkey-tests/js1_5/Regress/regress-271716-n.js new file mode 100644 index 00000000..f936d308 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-271716-n.js @@ -0,0 +1,27 @@ +// |reftest| skip -- never terminates +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 271716; +var summary = 'Don\'t Crash on infinite loop creating new Arrays'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + a = new Array(); + while (1) a = new Array(a); + actual = 'No Crash'; +} +catch(e) +{ + actual = 'No Crash'; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-274035.js b/source/spidermonkey-tests/js1_5/Regress/regress-274035.js new file mode 100644 index 00000000..00fcb1a0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-274035.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 274035; +var summary = 'Array.prototype[concat|slice|splice] lengths'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' Array.prototype.concat.length '; +expect = 1; +actual = Array.prototype.concat.length; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' Array.prototype.slice.length '; +expect = 2; +actual = Array.prototype.slice.length; +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(3) + ' Array.prototype.splice.length '; +expect = 2; +actual = Array.prototype.splice.length; +reportCompare(expect, actual, status); + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-274888.js b/source/spidermonkey-tests/js1_5/Regress/regress-274888.js new file mode 100644 index 00000000..1b59b3ea --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-274888.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 274888; +var summary = 'Negative lookahead should match at positions > approx. 64k'; +var actual = ''; +var expect = ''; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +var re; +var status; +var s; + +re = /(?!\d)a/; +status = summary + ' ' + inSection(1) + ' /(?!\\d)a/.text("12345a")'; +s = '12345a'; + +expect = true; +actual = re.test(s); + +reportCompare(expect, actual, status); + +re = /(?!\d)a/; +status = summary + ' ' + inSection(2) + ' ' + '/(?!\\d)a/.text("1...ka")'; +s = '1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329a'; + +expect = true; +actual = re.test(s); + +reportCompare(expect, actual, status); + +exitFunc ('test'); + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-275378.js b/source/spidermonkey-tests/js1_5/Regress/regress-275378.js new file mode 100644 index 00000000..3c699980 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-275378.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase by Martin Zvieger +// if fails, will fail to run in browser due to syntax error +var BUGNUMBER = 275378; +var summary = 'Literal RegExp in case block should not give syntax error'; +var actual = ''; +var expect = ''; + +var status; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var tmpString= "XYZ"; +// works +/ABC/.test(tmpString); +var tmpVal= 1; +if (tmpVal == 1) +{ + // works + /ABC/.test(tmpString); +} +switch(tmpVal) +{ +case 1: +{ + // works + /ABC/.test(tmpString); +} +break; +} +switch(tmpVal) +{ +case 1: + // fails with syntax error + /ABC/.test(tmpString); + break; +} + +expect = actual = 'no error'; +reportCompare(expect, actual, status); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-276103.js b/source/spidermonkey-tests/js1_5/Regress/regress-276103.js new file mode 100644 index 00000000..1242b596 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-276103.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase by Gianugo Rabellino +var BUGNUMBER = 276103; +var summary = 'link foo and null bytes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var testString = "test|string"; +var idx = testString.indexOf("|"); +var link = testString.substring(0, idx); +var desc = testString.substring(idx + 1); + +expect = '
string'; +actual = desc.link(link); + +reportCompare(expect, actual, summary); + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-278873.js b/source/spidermonkey-tests/js1_5/Regress/regress-278873.js new file mode 100644 index 00000000..74215a2c --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-278873.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase by Philipp Vogt +var BUGNUMBER = 278873; +var summary = 'Don\'t Crash'; +var actual = 'Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function SwitchTest( input) { + switch ( input ) { + default: break; + case A: break; + } +} + +printStatus(SwitchTest + ''); + +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-280769-1.js b/source/spidermonkey-tests/js1_5/Regress/regress-280769-1.js new file mode 100644 index 00000000..d17e0997 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-280769-1.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not crash on overflow of 64K boundary of [] offset in regexp search string '; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' (new RegExp("zzz...[AB]").exec("zzz...A") '; + +var N = 100 * 1000; // N should be more then 64K +var a = new Array(N + 1); +var prefix = a.join("z"); // prefix is sequence of N "z", zzz...zzz +var str = prefix+"[AB]"; // str is zzz...zzz[AB] +var re = new RegExp(str); +try { + re.exec(prefix+"A"); + reportCompare(expect, actual, status); +} catch (e) { + reportCompare(true, e instanceof Error, actual, status); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-280769-2.js b/source/spidermonkey-tests/js1_5/Regress/regress-280769-2.js new file mode 100644 index 00000000..78855a14 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-280769-2.js @@ -0,0 +1,44 @@ +// |reftest| skip-if(Android) silentfail +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not overflow 64K boundary in treeDepth'; +var actual = 'No Crash'; +var expect = /No Crash|InternalError: allocation size overflow/; +var status; +var result; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +status = summary + ' ' + inSection(1) + ' (new RegExp("0|...|99999") '; + +try +{ + var N = 100 * 1000; + var a = new Array(N); + for (var i = 0; i != N; ++i) { + a[i] = i; + } + var str = a.join('|'); // str is 0|1|2|3|...| + var re = new RegExp(str); + re.exec(N - 1); +} +catch(ex) +{ + actual = ex + ''; +} + +print('Done: ' + actual); + +reportMatch(expect, actual, summary); + + + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-280769-3.js b/source/spidermonkey-tests/js1_5/Regress/regress-280769-3.js new file mode 100644 index 00000000..23d5c2e5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-280769-3.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not crash on overflow of 64K boundary in number of classes in regexp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var N = 100 * 1000; + +status = summary + ' ' + inSection(3) + ' (new RegExp("[0][1]...[99999]").exec("") '; + +var a = new Array(N); + +for (var i = 0; i != N; ++i) { + a[i] = i; +} + +var str = '['+a.join('][')+']'; // str is [0][1][2]...[] + +try +{ + var re = new RegExp(str); +} +catch(e) +{ + printStatus('Exception creating RegExp: ' + e); +} + +try +{ + re.exec(''); +} +catch(e) +{ + printStatus('Exception executing RegExp: ' + e); +} + +reportCompare(expect, actual, status); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-280769-4.js b/source/spidermonkey-tests/js1_5/Regress/regress-280769-4.js new file mode 100644 index 00000000..eefc6db2 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-280769-4.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not overflow 64K length of char sequence in RegExp []'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + + +var N = 20 * 1000; // It should be that N*6 > 64K and N < 32K + +var prefixes = ["000", "00", "0"]; + +function to_4_hex(i) +{ + var printed = i.toString(16); + if (printed.length < 4) { + printed= prefixes[printed.length - 1]+printed; + } + return printed; + +} + +var a = new Array(N); +for (var i = 0; i != N; ++i) { + a[i] = to_4_hex(2*i); +} + +var str = '[\\u'+a.join('\\u')+']'; +// str is [\u0000\u0002\u0004...\u] + +var re = new RegExp(str); + +var string_to_match = String.fromCharCode(2 * (N - 1)); + +var value = re.exec(string_to_match); + +var expect = string_to_match; +var actual = value ? value[0] : value; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-280769-5.js b/source/spidermonkey-tests/js1_5/Regress/regress-280769-5.js new file mode 100644 index 00000000..930583a0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-280769-5.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not overflow 64K string offset'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var N = 100 * 1000; + +var prefix = new Array(N).join("a"); // prefix is sequence of N "a" + +var suffix = "111"; + +var re = new RegExp(prefix+"0?"+suffix); // re is /aaa...aaa0?111/ + +var str_to_match = prefix+suffix; // str_to_match is "aaa...aaa111" + +try { + var index = str_to_match.search(re); + + expect = 0; + actual = index; + + reportCompare(expect, actual, summary); +} catch (e) { + reportCompare(true, e instanceof Error, actual, summary); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-280769.js b/source/spidermonkey-tests/js1_5/Regress/regress-280769.js new file mode 100644 index 00000000..44873cf8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-280769.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 280769; +var summary = 'Do not crash on overflow of 32K boundary in regexp bytecode jump offset'; +var actual = 'No Crash'; +var expect = 'No Crash'; +var status; +var result; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + ' /1|...|6779/.exec("6777") '; + +var re = /1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255|256|257|258|259|260|261|262|263|264|265|266|267|268|269|270|271|272|273|274|275|276|277|278|279|280|281|282|283|284|285|286|287|288|289|290|291|292|293|294|295|296|297|298|299|300|301|302|303|304|305|306|307|308|309|310|311|312|313|314|315|316|317|318|319|320|321|322|323|324|325|326|327|328|329|330|331|332|333|334|335|336|337|338|339|340|341|342|343|344|345|346|347|348|349|350|351|352|353|354|355|356|357|358|359|360|361|362|363|364|365|366|367|368|369|370|371|372|373|374|375|376|377|378|379|380|381|382|383|384|385|386|387|388|389|390|391|392|393|394|395|396|397|398|399|400|401|402|403|404|405|406|407|408|409|410|411|412|413|414|415|416|417|418|419|420|421|422|423|424|425|426|427|428|429|430|431|432|433|434|435|436|437|438|439|440|441|442|443|444|445|446|447|448|449|450|451|452|453|454|455|456|457|458|459|460|461|462|463|464|465|466|467|468|469|470|471|472|473|474|475|476|477|478|479|480|481|482|483|484|485|486|487|488|489|490|491|492|493|494|495|496|497|498|499|500|501|502|503|504|505|506|507|508|509|510|511|512|513|514|515|516|517|518|519|520|521|522|523|524|525|526|527|528|529|530|531|532|533|534|535|536|537|538|539|540|541|542|543|544|545|546|547|548|549|550|551|552|553|554|555|556|557|558|559|560|561|562|563|564|565|566|567|568|569|570|571|572|573|574|575|576|577|578|579|580|581|582|583|584|585|586|587|588|589|590|591|592|593|594|595|596|597|598|599|600|601|602|603|604|605|606|607|608|609|610|611|612|613|614|615|616|617|618|619|620|621|622|623|624|625|626|627|628|629|630|631|632|633|634|635|636|637|638|639|640|641|642|643|644|645|646|647|648|649|650|651|652|653|654|655|656|657|658|659|660|661|662|663|664|665|666|667|668|669|670|671|672|673|674|675|676|677|678|679|680|681|682|683|684|685|686|687|688|689|690|691|692|693|694|695|696|697|698|699|700|701|702|703|704|705|706|707|708|709|710|711|712|713|714|715|716|717|718|719|720|721|722|723|724|725|726|727|728|729|730|731|732|733|734|735|736|737|738|739|740|741|742|743|744|745|746|747|748|749|750|751|752|753|754|755|756|757|758|759|760|761|762|763|764|765|766|767|768|769|770|771|772|773|774|775|776|777|778|779|780|781|782|783|784|785|786|787|788|789|790|791|792|793|794|795|796|797|798|799|800|801|802|803|804|805|806|807|808|809|810|811|812|813|814|815|816|817|818|819|820|821|822|823|824|825|826|827|828|829|830|831|832|833|834|835|836|837|838|839|840|841|842|843|844|845|846|847|848|849|850|851|852|853|854|855|856|857|858|859|860|861|862|863|864|865|866|867|868|869|870|871|872|873|874|875|876|877|878|879|880|881|882|883|884|885|886|887|888|889|890|891|892|893|894|895|896|897|898|899|900|901|902|903|904|905|906|907|908|909|910|911|912|913|914|915|916|917|918|919|920|921|922|923|924|925|926|927|928|929|930|931|932|933|934|935|936|937|938|939|940|941|942|943|944|945|946|947|948|949|950|951|952|953|954|955|956|957|958|959|960|961|962|963|964|965|966|967|968|969|970|971|972|973|974|975|976|977|978|979|980|981|982|983|984|985|986|987|988|989|990|991|992|993|994|995|996|997|998|999|1000|1001|1002|1003|1004|1005|1006|1007|1008|1009|1010|1011|1012|1013|1014|1015|1016|1017|1018|1019|1020|1021|1022|1023|1024|1025|1026|1027|1028|1029|1030|1031|1032|1033|1034|1035|1036|1037|1038|1039|1040|1041|1042|1043|1044|1045|1046|1047|1048|1049|1050|1051|1052|1053|1054|1055|1056|1057|1058|1059|1060|1061|1062|1063|1064|1065|1066|1067|1068|1069|1070|1071|1072|1073|1074|1075|1076|1077|1078|1079|1080|1081|1082|1083|1084|1085|1086|1087|1088|1089|1090|1091|1092|1093|1094|1095|1096|1097|1098|1099|1100|1101|1102|1103|1104|1105|1106|1107|1108|1109|1110|1111|1112|1113|1114|1115|1116|1117|1118|1119|1120|1121|1122|1123|1124|1125|1126|1127|1128|1129|1130|1131|1132|1133|1134|1135|1136|1137|1138|1139|1140|1141|1142|1143|1144|1145|1146|1147|1148|1149|1150|1151|1152|1153|1154|1155|1156|1157|1158|1159|1160|1161|1162|1163|1164|1165|1166|1167|1168|1169|1170|1171|1172|1173|1174|1175|1176|1177|1178|1179|1180|1181|1182|1183|1184|1185|1186|1187|1188|1189|1190|1191|1192|1193|1194|1195|1196|1197|1198|1199|1200|1201|1202|1203|1204|1205|1206|1207|1208|1209|1210|1211|1212|1213|1214|1215|1216|1217|1218|1219|1220|1221|1222|1223|1224|1225|1226|1227|1228|1229|1230|1231|1232|1233|1234|1235|1236|1237|1238|1239|1240|1241|1242|1243|1244|1245|1246|1247|1248|1249|1250|1251|1252|1253|1254|1255|1256|1257|1258|1259|1260|1261|1262|1263|1264|1265|1266|1267|1268|1269|1270|1271|1272|1273|1274|1275|1276|1277|1278|1279|1280|1281|1282|1283|1284|1285|1286|1287|1288|1289|1290|1291|1292|1293|1294|1295|1296|1297|1298|1299|1300|1301|1302|1303|1304|1305|1306|1307|1308|1309|1310|1311|1312|1313|1314|1315|1316|1317|1318|1319|1320|1321|1322|1323|1324|1325|1326|1327|1328|1329|1330|1331|1332|1333|1334|1335|1336|1337|1338|1339|1340|1341|1342|1343|1344|1345|1346|1347|1348|1349|1350|1351|1352|1353|1354|1355|1356|1357|1358|1359|1360|1361|1362|1363|1364|1365|1366|1367|1368|1369|1370|1371|1372|1373|1374|1375|1376|1377|1378|1379|1380|1381|1382|1383|1384|1385|1386|1387|1388|1389|1390|1391|1392|1393|1394|1395|1396|1397|1398|1399|1400|1401|1402|1403|1404|1405|1406|1407|1408|1409|1410|1411|1412|1413|1414|1415|1416|1417|1418|1419|1420|1421|1422|1423|1424|1425|1426|1427|1428|1429|1430|1431|1432|1433|1434|1435|1436|1437|1438|1439|1440|1441|1442|1443|1444|1445|1446|1447|1448|1449|1450|1451|1452|1453|1454|1455|1456|1457|1458|1459|1460|1461|1462|1463|1464|1465|1466|1467|1468|1469|1470|1471|1472|1473|1474|1475|1476|1477|1478|1479|1480|1481|1482|1483|1484|1485|1486|1487|1488|1489|1490|1491|1492|1493|1494|1495|1496|1497|1498|1499|1500|1501|1502|1503|1504|1505|1506|1507|1508|1509|1510|1511|1512|1513|1514|1515|1516|1517|1518|1519|1520|1521|1522|1523|1524|1525|1526|1527|1528|1529|1530|1531|1532|1533|1534|1535|1536|1537|1538|1539|1540|1541|1542|1543|1544|1545|1546|1547|1548|1549|1550|1551|1552|1553|1554|1555|1556|1557|1558|1559|1560|1561|1562|1563|1564|1565|1566|1567|1568|1569|1570|1571|1572|1573|1574|1575|1576|1577|1578|1579|1580|1581|1582|1583|1584|1585|1586|1587|1588|1589|1590|1591|1592|1593|1594|1595|1596|1597|1598|1599|1600|1601|1602|1603|1604|1605|1606|1607|1608|1609|1610|1611|1612|1613|1614|1615|1616|1617|1618|1619|1620|1621|1622|1623|1624|1625|1626|1627|1628|1629|1630|1631|1632|1633|1634|1635|1636|1637|1638|1639|1640|1641|1642|1643|1644|1645|1646|1647|1648|1649|1650|1651|1652|1653|1654|1655|1656|1657|1658|1659|1660|1661|1662|1663|1664|1665|1666|1667|1668|1669|1670|1671|1672|1673|1674|1675|1676|1677|1678|1679|1680|1681|1682|1683|1684|1685|1686|1687|1688|1689|1690|1691|1692|1693|1694|1695|1696|1697|1698|1699|1700|1701|1702|1703|1704|1705|1706|1707|1708|1709|1710|1711|1712|1713|1714|1715|1716|1717|1718|1719|1720|1721|1722|1723|1724|1725|1726|1727|1728|1729|1730|1731|1732|1733|1734|1735|1736|1737|1738|1739|1740|1741|1742|1743|1744|1745|1746|1747|1748|1749|1750|1751|1752|1753|1754|1755|1756|1757|1758|1759|1760|1761|1762|1763|1764|1765|1766|1767|1768|1769|1770|1771|1772|1773|1774|1775|1776|1777|1778|1779|1780|1781|1782|1783|1784|1785|1786|1787|1788|1789|1790|1791|1792|1793|1794|1795|1796|1797|1798|1799|1800|1801|1802|1803|1804|1805|1806|1807|1808|1809|1810|1811|1812|1813|1814|1815|1816|1817|1818|1819|1820|1821|1822|1823|1824|1825|1826|1827|1828|1829|1830|1831|1832|1833|1834|1835|1836|1837|1838|1839|1840|1841|1842|1843|1844|1845|1846|1847|1848|1849|1850|1851|1852|1853|1854|1855|1856|1857|1858|1859|1860|1861|1862|1863|1864|1865|1866|1867|1868|1869|1870|1871|1872|1873|1874|1875|1876|1877|1878|1879|1880|1881|1882|1883|1884|1885|1886|1887|1888|1889|1890|1891|1892|1893|1894|1895|1896|1897|1898|1899|1900|1901|1902|1903|1904|1905|1906|1907|1908|1909|1910|1911|1912|1913|1914|1915|1916|1917|1918|1919|1920|1921|1922|1923|1924|1925|1926|1927|1928|1929|1930|1931|1932|1933|1934|1935|1936|1937|1938|1939|1940|1941|1942|1943|1944|1945|1946|1947|1948|1949|1950|1951|1952|1953|1954|1955|1956|1957|1958|1959|1960|1961|1962|1963|1964|1965|1966|1967|1968|1969|1970|1971|1972|1973|1974|1975|1976|1977|1978|1979|1980|1981|1982|1983|1984|1985|1986|1987|1988|1989|1990|1991|1992|1993|1994|1995|1996|1997|1998|1999|2000|2001|2002|2003|2004|2005|2006|2007|2008|2009|2010|2011|2012|2013|2014|2015|2016|2017|2018|2019|2020|2021|2022|2023|2024|2025|2026|2027|2028|2029|2030|2031|2032|2033|2034|2035|2036|2037|2038|2039|2040|2041|2042|2043|2044|2045|2046|2047|2048|2049|2050|2051|2052|2053|2054|2055|2056|2057|2058|2059|2060|2061|2062|2063|2064|2065|2066|2067|2068|2069|2070|2071|2072|2073|2074|2075|2076|2077|2078|2079|2080|2081|2082|2083|2084|2085|2086|2087|2088|2089|2090|2091|2092|2093|2094|2095|2096|2097|2098|2099|2100|2101|2102|2103|2104|2105|2106|2107|2108|2109|2110|2111|2112|2113|2114|2115|2116|2117|2118|2119|2120|2121|2122|2123|2124|2125|2126|2127|2128|2129|2130|2131|2132|2133|2134|2135|2136|2137|2138|2139|2140|2141|2142|2143|2144|2145|2146|2147|2148|2149|2150|2151|2152|2153|2154|2155|2156|2157|2158|2159|2160|2161|2162|2163|2164|2165|2166|2167|2168|2169|2170|2171|2172|2173|2174|2175|2176|2177|2178|2179|2180|2181|2182|2183|2184|2185|2186|2187|2188|2189|2190|2191|2192|2193|2194|2195|2196|2197|2198|2199|2200|2201|2202|2203|2204|2205|2206|2207|2208|2209|2210|2211|2212|2213|2214|2215|2216|2217|2218|2219|2220|2221|2222|2223|2224|2225|2226|2227|2228|2229|2230|2231|2232|2233|2234|2235|2236|2237|2238|2239|2240|2241|2242|2243|2244|2245|2246|2247|2248|2249|2250|2251|2252|2253|2254|2255|2256|2257|2258|2259|2260|2261|2262|2263|2264|2265|2266|2267|2268|2269|2270|2271|2272|2273|2274|2275|2276|2277|2278|2279|2280|2281|2282|2283|2284|2285|2286|2287|2288|2289|2290|2291|2292|2293|2294|2295|2296|2297|2298|2299|2300|2301|2302|2303|2304|2305|2306|2307|2308|2309|2310|2311|2312|2313|2314|2315|2316|2317|2318|2319|2320|2321|2322|2323|2324|2325|2326|2327|2328|2329|2330|2331|2332|2333|2334|2335|2336|2337|2338|2339|2340|2341|2342|2343|2344|2345|2346|2347|2348|2349|2350|2351|2352|2353|2354|2355|2356|2357|2358|2359|2360|2361|2362|2363|2364|2365|2366|2367|2368|2369|2370|2371|2372|2373|2374|2375|2376|2377|2378|2379|2380|2381|2382|2383|2384|2385|2386|2387|2388|2389|2390|2391|2392|2393|2394|2395|2396|2397|2398|2399|2400|2401|2402|2403|2404|2405|2406|2407|2408|2409|2410|2411|2412|2413|2414|2415|2416|2417|2418|2419|2420|2421|2422|2423|2424|2425|2426|2427|2428|2429|2430|2431|2432|2433|2434|2435|2436|2437|2438|2439|2440|2441|2442|2443|2444|2445|2446|2447|2448|2449|2450|2451|2452|2453|2454|2455|2456|2457|2458|2459|2460|2461|2462|2463|2464|2465|2466|2467|2468|2469|2470|2471|2472|2473|2474|2475|2476|2477|2478|2479|2480|2481|2482|2483|2484|2485|2486|2487|2488|2489|2490|2491|2492|2493|2494|2495|2496|2497|2498|2499|2500|2501|2502|2503|2504|2505|2506|2507|2508|2509|2510|2511|2512|2513|2514|2515|2516|2517|2518|2519|2520|2521|2522|2523|2524|2525|2526|2527|2528|2529|2530|2531|2532|2533|2534|2535|2536|2537|2538|2539|2540|2541|2542|2543|2544|2545|2546|2547|2548|2549|2550|2551|2552|2553|2554|2555|2556|2557|2558|2559|2560|2561|2562|2563|2564|2565|2566|2567|2568|2569|2570|2571|2572|2573|2574|2575|2576|2577|2578|2579|2580|2581|2582|2583|2584|2585|2586|2587|2588|2589|2590|2591|2592|2593|2594|2595|2596|2597|2598|2599|2600|2601|2602|2603|2604|2605|2606|2607|2608|2609|2610|2611|2612|2613|2614|2615|2616|2617|2618|2619|2620|2621|2622|2623|2624|2625|2626|2627|2628|2629|2630|2631|2632|2633|2634|2635|2636|2637|2638|2639|2640|2641|2642|2643|2644|2645|2646|2647|2648|2649|2650|2651|2652|2653|2654|2655|2656|2657|2658|2659|2660|2661|2662|2663|2664|2665|2666|2667|2668|2669|2670|2671|2672|2673|2674|2675|2676|2677|2678|2679|2680|2681|2682|2683|2684|2685|2686|2687|2688|2689|2690|2691|2692|2693|2694|2695|2696|2697|2698|2699|2700|2701|2702|2703|2704|2705|2706|2707|2708|2709|2710|2711|2712|2713|2714|2715|2716|2717|2718|2719|2720|2721|2722|2723|2724|2725|2726|2727|2728|2729|2730|2731|2732|2733|2734|2735|2736|2737|2738|2739|2740|2741|2742|2743|2744|2745|2746|2747|2748|2749|2750|2751|2752|2753|2754|2755|2756|2757|2758|2759|2760|2761|2762|2763|2764|2765|2766|2767|2768|2769|2770|2771|2772|2773|2774|2775|2776|2777|2778|2779|2780|2781|2782|2783|2784|2785|2786|2787|2788|2789|2790|2791|2792|2793|2794|2795|2796|2797|2798|2799|2800|2801|2802|2803|2804|2805|2806|2807|2808|2809|2810|2811|2812|2813|2814|2815|2816|2817|2818|2819|2820|2821|2822|2823|2824|2825|2826|2827|2828|2829|2830|2831|2832|2833|2834|2835|2836|2837|2838|2839|2840|2841|2842|2843|2844|2845|2846|2847|2848|2849|2850|2851|2852|2853|2854|2855|2856|2857|2858|2859|2860|2861|2862|2863|2864|2865|2866|2867|2868|2869|2870|2871|2872|2873|2874|2875|2876|2877|2878|2879|2880|2881|2882|2883|2884|2885|2886|2887|2888|2889|2890|2891|2892|2893|2894|2895|2896|2897|2898|2899|2900|2901|2902|2903|2904|2905|2906|2907|2908|2909|2910|2911|2912|2913|2914|2915|2916|2917|2918|2919|2920|2921|2922|2923|2924|2925|2926|2927|2928|2929|2930|2931|2932|2933|2934|2935|2936|2937|2938|2939|2940|2941|2942|2943|2944|2945|2946|2947|2948|2949|2950|2951|2952|2953|2954|2955|2956|2957|2958|2959|2960|2961|2962|2963|2964|2965|2966|2967|2968|2969|2970|2971|2972|2973|2974|2975|2976|2977|2978|2979|2980|2981|2982|2983|2984|2985|2986|2987|2988|2989|2990|2991|2992|2993|2994|2995|2996|2997|2998|2999|3000|3001|3002|3003|3004|3005|3006|3007|3008|3009|3010|3011|3012|3013|3014|3015|3016|3017|3018|3019|3020|3021|3022|3023|3024|3025|3026|3027|3028|3029|3030|3031|3032|3033|3034|3035|3036|3037|3038|3039|3040|3041|3042|3043|3044|3045|3046|3047|3048|3049|3050|3051|3052|3053|3054|3055|3056|3057|3058|3059|3060|3061|3062|3063|3064|3065|3066|3067|3068|3069|3070|3071|3072|3073|3074|3075|3076|3077|3078|3079|3080|3081|3082|3083|3084|3085|3086|3087|3088|3089|3090|3091|3092|3093|3094|3095|3096|3097|3098|3099|3100|3101|3102|3103|3104|3105|3106|3107|3108|3109|3110|3111|3112|3113|3114|3115|3116|3117|3118|3119|3120|3121|3122|3123|3124|3125|3126|3127|3128|3129|3130|3131|3132|3133|3134|3135|3136|3137|3138|3139|3140|3141|3142|3143|3144|3145|3146|3147|3148|3149|3150|3151|3152|3153|3154|3155|3156|3157|3158|3159|3160|3161|3162|3163|3164|3165|3166|3167|3168|3169|3170|3171|3172|3173|3174|3175|3176|3177|3178|3179|3180|3181|3182|3183|3184|3185|3186|3187|3188|3189|3190|3191|3192|3193|3194|3195|3196|3197|3198|3199|3200|3201|3202|3203|3204|3205|3206|3207|3208|3209|3210|3211|3212|3213|3214|3215|3216|3217|3218|3219|3220|3221|3222|3223|3224|3225|3226|3227|3228|3229|3230|3231|3232|3233|3234|3235|3236|3237|3238|3239|3240|3241|3242|3243|3244|3245|3246|3247|3248|3249|3250|3251|3252|3253|3254|3255|3256|3257|3258|3259|3260|3261|3262|3263|3264|3265|3266|3267|3268|3269|3270|3271|3272|3273|3274|3275|3276|3277|3278|3279|3280|3281|3282|3283|3284|3285|3286|3287|3288|3289|3290|3291|3292|3293|3294|3295|3296|3297|3298|3299|3300|3301|3302|3303|3304|3305|3306|3307|3308|3309|3310|3311|3312|3313|3314|3315|3316|3317|3318|3319|3320|3321|3322|3323|3324|3325|3326|3327|3328|3329|3330|3331|3332|3333|3334|3335|3336|3337|3338|3339|3340|3341|3342|3343|3344|3345|3346|3347|3348|3349|3350|3351|3352|3353|3354|3355|3356|3357|3358|3359|3360|3361|3362|3363|3364|3365|3366|3367|3368|3369|3370|3371|3372|3373|3374|3375|3376|3377|3378|3379|3380|3381|3382|3383|3384|3385|3386|3387|3388|3389|3390|3391|3392|3393|3394|3395|3396|3397|3398|3399|3400|3401|3402|3403|3404|3405|3406|3407|3408|3409|3410|3411|3412|3413|3414|3415|3416|3417|3418|3419|3420|3421|3422|3423|3424|3425|3426|3427|3428|3429|3430|3431|3432|3433|3434|3435|3436|3437|3438|3439|3440|3441|3442|3443|3444|3445|3446|3447|3448|3449|3450|3451|3452|3453|3454|3455|3456|3457|3458|3459|3460|3461|3462|3463|3464|3465|3466|3467|3468|3469|3470|3471|3472|3473|3474|3475|3476|3477|3478|3479|3480|3481|3482|3483|3484|3485|3486|3487|3488|3489|3490|3491|3492|3493|3494|3495|3496|3497|3498|3499|3500|3501|3502|3503|3504|3505|3506|3507|3508|3509|3510|3511|3512|3513|3514|3515|3516|3517|3518|3519|3520|3521|3522|3523|3524|3525|3526|3527|3528|3529|3530|3531|3532|3533|3534|3535|3536|3537|3538|3539|3540|3541|3542|3543|3544|3545|3546|3547|3548|3549|3550|3551|3552|3553|3554|3555|3556|3557|3558|3559|3560|3561|3562|3563|3564|3565|3566|3567|3568|3569|3570|3571|3572|3573|3574|3575|3576|3577|3578|3579|3580|3581|3582|3583|3584|3585|3586|3587|3588|3589|3590|3591|3592|3593|3594|3595|3596|3597|3598|3599|3600|3601|3602|3603|3604|3605|3606|3607|3608|3609|3610|3611|3612|3613|3614|3615|3616|3617|3618|3619|3620|3621|3622|3623|3624|3625|3626|3627|3628|3629|3630|3631|3632|3633|3634|3635|3636|3637|3638|3639|3640|3641|3642|3643|3644|3645|3646|3647|3648|3649|3650|3651|3652|3653|3654|3655|3656|3657|3658|3659|3660|3661|3662|3663|3664|3665|3666|3667|3668|3669|3670|3671|3672|3673|3674|3675|3676|3677|3678|3679|3680|3681|3682|3683|3684|3685|3686|3687|3688|3689|3690|3691|3692|3693|3694|3695|3696|3697|3698|3699|3700|3701|3702|3703|3704|3705|3706|3707|3708|3709|3710|3711|3712|3713|3714|3715|3716|3717|3718|3719|3720|3721|3722|3723|3724|3725|3726|3727|3728|3729|3730|3731|3732|3733|3734|3735|3736|3737|3738|3739|3740|3741|3742|3743|3744|3745|3746|3747|3748|3749|3750|3751|3752|3753|3754|3755|3756|3757|3758|3759|3760|3761|3762|3763|3764|3765|3766|3767|3768|3769|3770|3771|3772|3773|3774|3775|3776|3777|3778|3779|3780|3781|3782|3783|3784|3785|3786|3787|3788|3789|3790|3791|3792|3793|3794|3795|3796|3797|3798|3799|3800|3801|3802|3803|3804|3805|3806|3807|3808|3809|3810|3811|3812|3813|3814|3815|3816|3817|3818|3819|3820|3821|3822|3823|3824|3825|3826|3827|3828|3829|3830|3831|3832|3833|3834|3835|3836|3837|3838|3839|3840|3841|3842|3843|3844|3845|3846|3847|3848|3849|3850|3851|3852|3853|3854|3855|3856|3857|3858|3859|3860|3861|3862|3863|3864|3865|3866|3867|3868|3869|3870|3871|3872|3873|3874|3875|3876|3877|3878|3879|3880|3881|3882|3883|3884|3885|3886|3887|3888|3889|3890|3891|3892|3893|3894|3895|3896|3897|3898|3899|3900|3901|3902|3903|3904|3905|3906|3907|3908|3909|3910|3911|3912|3913|3914|3915|3916|3917|3918|3919|3920|3921|3922|3923|3924|3925|3926|3927|3928|3929|3930|3931|3932|3933|3934|3935|3936|3937|3938|3939|3940|3941|3942|3943|3944|3945|3946|3947|3948|3949|3950|3951|3952|3953|3954|3955|3956|3957|3958|3959|3960|3961|3962|3963|3964|3965|3966|3967|3968|3969|3970|3971|3972|3973|3974|3975|3976|3977|3978|3979|3980|3981|3982|3983|3984|3985|3986|3987|3988|3989|3990|3991|3992|3993|3994|3995|3996|3997|3998|3999|4000|4001|4002|4003|4004|4005|4006|4007|4008|4009|4010|4011|4012|4013|4014|4015|4016|4017|4018|4019|4020|4021|4022|4023|4024|4025|4026|4027|4028|4029|4030|4031|4032|4033|4034|4035|4036|4037|4038|4039|4040|4041|4042|4043|4044|4045|4046|4047|4048|4049|4050|4051|4052|4053|4054|4055|4056|4057|4058|4059|4060|4061|4062|4063|4064|4065|4066|4067|4068|4069|4070|4071|4072|4073|4074|4075|4076|4077|4078|4079|4080|4081|4082|4083|4084|4085|4086|4087|4088|4089|4090|4091|4092|4093|4094|4095|4096|4097|4098|4099|4100|4101|4102|4103|4104|4105|4106|4107|4108|4109|4110|4111|4112|4113|4114|4115|4116|4117|4118|4119|4120|4121|4122|4123|4124|4125|4126|4127|4128|4129|4130|4131|4132|4133|4134|4135|4136|4137|4138|4139|4140|4141|4142|4143|4144|4145|4146|4147|4148|4149|4150|4151|4152|4153|4154|4155|4156|4157|4158|4159|4160|4161|4162|4163|4164|4165|4166|4167|4168|4169|4170|4171|4172|4173|4174|4175|4176|4177|4178|4179|4180|4181|4182|4183|4184|4185|4186|4187|4188|4189|4190|4191|4192|4193|4194|4195|4196|4197|4198|4199|4200|4201|4202|4203|4204|4205|4206|4207|4208|4209|4210|4211|4212|4213|4214|4215|4216|4217|4218|4219|4220|4221|4222|4223|4224|4225|4226|4227|4228|4229|4230|4231|4232|4233|4234|4235|4236|4237|4238|4239|4240|4241|4242|4243|4244|4245|4246|4247|4248|4249|4250|4251|4252|4253|4254|4255|4256|4257|4258|4259|4260|4261|4262|4263|4264|4265|4266|4267|4268|4269|4270|4271|4272|4273|4274|4275|4276|4277|4278|4279|4280|4281|4282|4283|4284|4285|4286|4287|4288|4289|4290|4291|4292|4293|4294|4295|4296|4297|4298|4299|4300|4301|4302|4303|4304|4305|4306|4307|4308|4309|4310|4311|4312|4313|4314|4315|4316|4317|4318|4319|4320|4321|4322|4323|4324|4325|4326|4327|4328|4329|4330|4331|4332|4333|4334|4335|4336|4337|4338|4339|4340|4341|4342|4343|4344|4345|4346|4347|4348|4349|4350|4351|4352|4353|4354|4355|4356|4357|4358|4359|4360|4361|4362|4363|4364|4365|4366|4367|4368|4369|4370|4371|4372|4373|4374|4375|4376|4377|4378|4379|4380|4381|4382|4383|4384|4385|4386|4387|4388|4389|4390|4391|4392|4393|4394|4395|4396|4397|4398|4399|4400|4401|4402|4403|4404|4405|4406|4407|4408|4409|4410|4411|4412|4413|4414|4415|4416|4417|4418|4419|4420|4421|4422|4423|4424|4425|4426|4427|4428|4429|4430|4431|4432|4433|4434|4435|4436|4437|4438|4439|4440|4441|4442|4443|4444|4445|4446|4447|4448|4449|4450|4451|4452|4453|4454|4455|4456|4457|4458|4459|4460|4461|4462|4463|4464|4465|4466|4467|4468|4469|4470|4471|4472|4473|4474|4475|4476|4477|4478|4479|4480|4481|4482|4483|4484|4485|4486|4487|4488|4489|4490|4491|4492|4493|4494|4495|4496|4497|4498|4499|4500|4501|4502|4503|4504|4505|4506|4507|4508|4509|4510|4511|4512|4513|4514|4515|4516|4517|4518|4519|4520|4521|4522|4523|4524|4525|4526|4527|4528|4529|4530|4531|4532|4533|4534|4535|4536|4537|4538|4539|4540|4541|4542|4543|4544|4545|4546|4547|4548|4549|4550|4551|4552|4553|4554|4555|4556|4557|4558|4559|4560|4561|4562|4563|4564|4565|4566|4567|4568|4569|4570|4571|4572|4573|4574|4575|4576|4577|4578|4579|4580|4581|4582|4583|4584|4585|4586|4587|4588|4589|4590|4591|4592|4593|4594|4595|4596|4597|4598|4599|4600|4601|4602|4603|4604|4605|4606|4607|4608|4609|4610|4611|4612|4613|4614|4615|4616|4617|4618|4619|4620|4621|4622|4623|4624|4625|4626|4627|4628|4629|4630|4631|4632|4633|4634|4635|4636|4637|4638|4639|4640|4641|4642|4643|4644|4645|4646|4647|4648|4649|4650|4651|4652|4653|4654|4655|4656|4657|4658|4659|4660|4661|4662|4663|4664|4665|4666|4667|4668|4669|4670|4671|4672|4673|4674|4675|4676|4677|4678|4679|4680|4681|4682|4683|4684|4685|4686|4687|4688|4689|4690|4691|4692|4693|4694|4695|4696|4697|4698|4699|4700|4701|4702|4703|4704|4705|4706|4707|4708|4709|4710|4711|4712|4713|4714|4715|4716|4717|4718|4719|4720|4721|4722|4723|4724|4725|4726|4727|4728|4729|4730|4731|4732|4733|4734|4735|4736|4737|4738|4739|4740|4741|4742|4743|4744|4745|4746|4747|4748|4749|4750|4751|4752|4753|4754|4755|4756|4757|4758|4759|4760|4761|4762|4763|4764|4765|4766|4767|4768|4769|4770|4771|4772|4773|4774|4775|4776|4777|4778|4779|4780|4781|4782|4783|4784|4785|4786|4787|4788|4789|4790|4791|4792|4793|4794|4795|4796|4797|4798|4799|4800|4801|4802|4803|4804|4805|4806|4807|4808|4809|4810|4811|4812|4813|4814|4815|4816|4817|4818|4819|4820|4821|4822|4823|4824|4825|4826|4827|4828|4829|4830|4831|4832|4833|4834|4835|4836|4837|4838|4839|4840|4841|4842|4843|4844|4845|4846|4847|4848|4849|4850|4851|4852|4853|4854|4855|4856|4857|4858|4859|4860|4861|4862|4863|4864|4865|4866|4867|4868|4869|4870|4871|4872|4873|4874|4875|4876|4877|4878|4879|4880|4881|4882|4883|4884|4885|4886|4887|4888|4889|4890|4891|4892|4893|4894|4895|4896|4897|4898|4899|4900|4901|4902|4903|4904|4905|4906|4907|4908|4909|4910|4911|4912|4913|4914|4915|4916|4917|4918|4919|4920|4921|4922|4923|4924|4925|4926|4927|4928|4929|4930|4931|4932|4933|4934|4935|4936|4937|4938|4939|4940|4941|4942|4943|4944|4945|4946|4947|4948|4949|4950|4951|4952|4953|4954|4955|4956|4957|4958|4959|4960|4961|4962|4963|4964|4965|4966|4967|4968|4969|4970|4971|4972|4973|4974|4975|4976|4977|4978|4979|4980|4981|4982|4983|4984|4985|4986|4987|4988|4989|4990|4991|4992|4993|4994|4995|4996|4997|4998|4999|5000|5001|5002|5003|5004|5005|5006|5007|5008|5009|5010|5011|5012|5013|5014|5015|5016|5017|5018|5019|5020|5021|5022|5023|5024|5025|5026|5027|5028|5029|5030|5031|5032|5033|5034|5035|5036|5037|5038|5039|5040|5041|5042|5043|5044|5045|5046|5047|5048|5049|5050|5051|5052|5053|5054|5055|5056|5057|5058|5059|5060|5061|5062|5063|5064|5065|5066|5067|5068|5069|5070|5071|5072|5073|5074|5075|5076|5077|5078|5079|5080|5081|5082|5083|5084|5085|5086|5087|5088|5089|5090|5091|5092|5093|5094|5095|5096|5097|5098|5099|5100|5101|5102|5103|5104|5105|5106|5107|5108|5109|5110|5111|5112|5113|5114|5115|5116|5117|5118|5119|5120|5121|5122|5123|5124|5125|5126|5127|5128|5129|5130|5131|5132|5133|5134|5135|5136|5137|5138|5139|5140|5141|5142|5143|5144|5145|5146|5147|5148|5149|5150|5151|5152|5153|5154|5155|5156|5157|5158|5159|5160|5161|5162|5163|5164|5165|5166|5167|5168|5169|5170|5171|5172|5173|5174|5175|5176|5177|5178|5179|5180|5181|5182|5183|5184|5185|5186|5187|5188|5189|5190|5191|5192|5193|5194|5195|5196|5197|5198|5199|5200|5201|5202|5203|5204|5205|5206|5207|5208|5209|5210|5211|5212|5213|5214|5215|5216|5217|5218|5219|5220|5221|5222|5223|5224|5225|5226|5227|5228|5229|5230|5231|5232|5233|5234|5235|5236|5237|5238|5239|5240|5241|5242|5243|5244|5245|5246|5247|5248|5249|5250|5251|5252|5253|5254|5255|5256|5257|5258|5259|5260|5261|5262|5263|5264|5265|5266|5267|5268|5269|5270|5271|5272|5273|5274|5275|5276|5277|5278|5279|5280|5281|5282|5283|5284|5285|5286|5287|5288|5289|5290|5291|5292|5293|5294|5295|5296|5297|5298|5299|5300|5301|5302|5303|5304|5305|5306|5307|5308|5309|5310|5311|5312|5313|5314|5315|5316|5317|5318|5319|5320|5321|5322|5323|5324|5325|5326|5327|5328|5329|5330|5331|5332|5333|5334|5335|5336|5337|5338|5339|5340|5341|5342|5343|5344|5345|5346|5347|5348|5349|5350|5351|5352|5353|5354|5355|5356|5357|5358|5359|5360|5361|5362|5363|5364|5365|5366|5367|5368|5369|5370|5371|5372|5373|5374|5375|5376|5377|5378|5379|5380|5381|5382|5383|5384|5385|5386|5387|5388|5389|5390|5391|5392|5393|5394|5395|5396|5397|5398|5399|5400|5401|5402|5403|5404|5405|5406|5407|5408|5409|5410|5411|5412|5413|5414|5415|5416|5417|5418|5419|5420|5421|5422|5423|5424|5425|5426|5427|5428|5429|5430|5431|5432|5433|5434|5435|5436|5437|5438|5439|5440|5441|5442|5443|5444|5445|5446|5447|5448|5449|5450|5451|5452|5453|5454|5455|5456|5457|5458|5459|5460|5461|5462|5463|5464|5465|5466|5467|5468|5469|5470|5471|5472|5473|5474|5475|5476|5477|5478|5479|5480|5481|5482|5483|5484|5485|5486|5487|5488|5489|5490|5491|5492|5493|5494|5495|5496|5497|5498|5499|5500|5501|5502|5503|5504|5505|5506|5507|5508|5509|5510|5511|5512|5513|5514|5515|5516|5517|5518|5519|5520|5521|5522|5523|5524|5525|5526|5527|5528|5529|5530|5531|5532|5533|5534|5535|5536|5537|5538|5539|5540|5541|5542|5543|5544|5545|5546|5547|5548|5549|5550|5551|5552|5553|5554|5555|5556|5557|5558|5559|5560|5561|5562|5563|5564|5565|5566|5567|5568|5569|5570|5571|5572|5573|5574|5575|5576|5577|5578|5579|5580|5581|5582|5583|5584|5585|5586|5587|5588|5589|5590|5591|5592|5593|5594|5595|5596|5597|5598|5599|5600|5601|5602|5603|5604|5605|5606|5607|5608|5609|5610|5611|5612|5613|5614|5615|5616|5617|5618|5619|5620|5621|5622|5623|5624|5625|5626|5627|5628|5629|5630|5631|5632|5633|5634|5635|5636|5637|5638|5639|5640|5641|5642|5643|5644|5645|5646|5647|5648|5649|5650|5651|5652|5653|5654|5655|5656|5657|5658|5659|5660|5661|5662|5663|5664|5665|5666|5667|5668|5669|5670|5671|5672|5673|5674|5675|5676|5677|5678|5679|5680|5681|5682|5683|5684|5685|5686|5687|5688|5689|5690|5691|5692|5693|5694|5695|5696|5697|5698|5699|5700|5701|5702|5703|5704|5705|5706|5707|5708|5709|5710|5711|5712|5713|5714|5715|5716|5717|5718|5719|5720|5721|5722|5723|5724|5725|5726|5727|5728|5729|5730|5731|5732|5733|5734|5735|5736|5737|5738|5739|5740|5741|5742|5743|5744|5745|5746|5747|5748|5749|5750|5751|5752|5753|5754|5755|5756|5757|5758|5759|5760|5761|5762|5763|5764|5765|5766|5767|5768|5769|5770|5771|5772|5773|5774|5775|5776|5777|5778|5779|5780|5781|5782|5783|5784|5785|5786|5787|5788|5789|5790|5791|5792|5793|5794|5795|5796|5797|5798|5799|5800|5801|5802|5803|5804|5805|5806|5807|5808|5809|5810|5811|5812|5813|5814|5815|5816|5817|5818|5819|5820|5821|5822|5823|5824|5825|5826|5827|5828|5829|5830|5831|5832|5833|5834|5835|5836|5837|5838|5839|5840|5841|5842|5843|5844|5845|5846|5847|5848|5849|5850|5851|5852|5853|5854|5855|5856|5857|5858|5859|5860|5861|5862|5863|5864|5865|5866|5867|5868|5869|5870|5871|5872|5873|5874|5875|5876|5877|5878|5879|5880|5881|5882|5883|5884|5885|5886|5887|5888|5889|5890|5891|5892|5893|5894|5895|5896|5897|5898|5899|5900|5901|5902|5903|5904|5905|5906|5907|5908|5909|5910|5911|5912|5913|5914|5915|5916|5917|5918|5919|5920|5921|5922|5923|5924|5925|5926|5927|5928|5929|5930|5931|5932|5933|5934|5935|5936|5937|5938|5939|5940|5941|5942|5943|5944|5945|5946|5947|5948|5949|5950|5951|5952|5953|5954|5955|5956|5957|5958|5959|5960|5961|5962|5963|5964|5965|5966|5967|5968|5969|5970|5971|5972|5973|5974|5975|5976|5977|5978|5979|5980|5981|5982|5983|5984|5985|5986|5987|5988|5989|5990|5991|5992|5993|5994|5995|5996|5997|5998|5999|6000|6001|6002|6003|6004|6005|6006|6007|6008|6009|6010|6011|6012|6013|6014|6015|6016|6017|6018|6019|6020|6021|6022|6023|6024|6025|6026|6027|6028|6029|6030|6031|6032|6033|6034|6035|6036|6037|6038|6039|6040|6041|6042|6043|6044|6045|6046|6047|6048|6049|6050|6051|6052|6053|6054|6055|6056|6057|6058|6059|6060|6061|6062|6063|6064|6065|6066|6067|6068|6069|6070|6071|6072|6073|6074|6075|6076|6077|6078|6079|6080|6081|6082|6083|6084|6085|6086|6087|6088|6089|6090|6091|6092|6093|6094|6095|6096|6097|6098|6099|6100|6101|6102|6103|6104|6105|6106|6107|6108|6109|6110|6111|6112|6113|6114|6115|6116|6117|6118|6119|6120|6121|6122|6123|6124|6125|6126|6127|6128|6129|6130|6131|6132|6133|6134|6135|6136|6137|6138|6139|6140|6141|6142|6143|6144|6145|6146|6147|6148|6149|6150|6151|6152|6153|6154|6155|6156|6157|6158|6159|6160|6161|6162|6163|6164|6165|6166|6167|6168|6169|6170|6171|6172|6173|6174|6175|6176|6177|6178|6179|6180|6181|6182|6183|6184|6185|6186|6187|6188|6189|6190|6191|6192|6193|6194|6195|6196|6197|6198|6199|6200|6201|6202|6203|6204|6205|6206|6207|6208|6209|6210|6211|6212|6213|6214|6215|6216|6217|6218|6219|6220|6221|6222|6223|6224|6225|6226|6227|6228|6229|6230|6231|6232|6233|6234|6235|6236|6237|6238|6239|6240|6241|6242|6243|6244|6245|6246|6247|6248|6249|6250|6251|6252|6253|6254|6255|6256|6257|6258|6259|6260|6261|6262|6263|6264|6265|6266|6267|6268|6269|6270|6271|6272|6273|6274|6275|6276|6277|6278|6279|6280|6281|6282|6283|6284|6285|6286|6287|6288|6289|6290|6291|6292|6293|6294|6295|6296|6297|6298|6299|6300|6301|6302|6303|6304|6305|6306|6307|6308|6309|6310|6311|6312|6313|6314|6315|6316|6317|6318|6319|6320|6321|6322|6323|6324|6325|6326|6327|6328|6329|6330|6331|6332|6333|6334|6335|6336|6337|6338|6339|6340|6341|6342|6343|6344|6345|6346|6347|6348|6349|6350|6351|6352|6353|6354|6355|6356|6357|6358|6359|6360|6361|6362|6363|6364|6365|6366|6367|6368|6369|6370|6371|6372|6373|6374|6375|6376|6377|6378|6379|6380|6381|6382|6383|6384|6385|6386|6387|6388|6389|6390|6391|6392|6393|6394|6395|6396|6397|6398|6399|6400|6401|6402|6403|6404|6405|6406|6407|6408|6409|6410|6411|6412|6413|6414|6415|6416|6417|6418|6419|6420|6421|6422|6423|6424|6425|6426|6427|6428|6429|6430|6431|6432|6433|6434|6435|6436|6437|6438|6439|6440|6441|6442|6443|6444|6445|6446|6447|6448|6449|6450|6451|6452|6453|6454|6455|6456|6457|6458|6459|6460|6461|6462|6463|6464|6465|6466|6467|6468|6469|6470|6471|6472|6473|6474|6475|6476|6477|6478|6479|6480|6481|6482|6483|6484|6485|6486|6487|6488|6489|6490|6491|6492|6493|6494|6495|6496|6497|6498|6499|6500|6501|6502|6503|6504|6505|6506|6507|6508|6509|6510|6511|6512|6513|6514|6515|6516|6517|6518|6519|6520|6521|6522|6523|6524|6525|6526|6527|6528|6529|6530|6531|6532|6533|6534|6535|6536|6537|6538|6539|6540|6541|6542|6543|6544|6545|6546|6547|6548|6549|6550|6551|6552|6553|6554|6555|6556|6557|6558|6559|6560|6561|6562|6563|6564|6565|6566|6567|6568|6569|6570|6571|6572|6573|6574|6575|6576|6577|6578|6579|6580|6581|6582|6583|6584|6585|6586|6587|6588|6589|6590|6591|6592|6593|6594|6595|6596|6597|6598|6599|6600|6601|6602|6603|6604|6605|6606|6607|6608|6609|6610|6611|6612|6613|6614|6615|6616|6617|6618|6619|6620|6621|6622|6623|6624|6625|6626|6627|6628|6629|6630|6631|6632|6633|6634|6635|6636|6637|6638|6639|6640|6641|6642|6643|6644|6645|6646|6647|6648|6649|6650|6651|6652|6653|6654|6655|6656|6657|6658|6659|6660|6661|6662|6663|6664|6665|6666|6667|6668|6669|6670|6671|6672|6673|6674|6675|6676|6677|6678|6679|6680|6681|6682|6683|6684|6685|6686|6687|6688|6689|6690|6691|6692|6693|6694|6695|6696|6697|6698|6699|6700|6701|6702|6703|6704|6705|6706|6707|6708|6709|6710|6711|6712|6713|6714|6715|6716|6717|6718|6719|6720|6721|6722|6723|6724|6725|6726|6727|6728|6729|6730|6731|6732|6733|6734|6735|6736|6737|6738|6739|6740|6741|6742|6743|6744|6745|6746|6747|6748|6749|6750|6751|6752|6753|6754|6755|6756|6757|6758|6759|6760|6761|6762|6763|6764|6765|6766|6767|6768|6769|6770|6771|6772|6773|6774|6775|6776|6777|6778/; + +result = re.exec('6777'); + +reportCompare(expect, actual, summary); + +status = summary + ' ' + inSection(2) + ' (new RegExp("0|...|9999") '; + +var N = 10 * 1000; +var a = new Array(N); +for (var i = 0; i != N; ++i) { + a[i] = i; +} +var str = a.join('|'); // str is 0|1|2|3|...| +var re = new RegExp(str); +re.exec(N - 1); + +reportCompare(expect, actual, summary); + + + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-281606.js b/source/spidermonkey-tests/js1_5/Regress/regress-281606.js new file mode 100644 index 00000000..2f36c150 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-281606.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 281606; +var summary = 'l instanceof r throws TypeError if r does not support [[HasInstance]]'; +var actual = ''; +var expect = ''; +var status; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var o = {}; + +status = summary + ' ' + inSection(1) + ' o instanceof Math '; +expect = 'TypeError'; +try +{ + if (o instanceof Math) + { + } + actual = 'No Error'; +} +catch(e) +{ + actual = e.name; +} +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + ' o instanceof o '; +expect = 'TypeError'; +try +{ + if (o instanceof o) + { + } + actual = 'No Error'; +} +catch(e) +{ + actual = e.name; +} +reportCompare(expect, actual, status); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-281930.js b/source/spidermonkey-tests/js1_5/Regress/regress-281930.js new file mode 100644 index 00000000..2939c8be --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-281930.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 281930; +var summary = 'this reference should point to global object in function expressions'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var global = this; + +actual = function() { return this; }(); +expect = global; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-283477.js b/source/spidermonkey-tests/js1_5/Regress/regress-283477.js new file mode 100644 index 00000000..65fcbb02 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-283477.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 283477; +var summary = 'a.lastIndexOf(b, c) should return -1 when there is no match'; +var actual = ''; +var expect = ''; +var status; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +status = summary + ' ' + inSection(1) + " " + '"".lastIndexOf("hello", 0);'; +expect = -1; +actual = "".lastIndexOf("hello", 0); +reportCompare(expect, actual, status); + +status = summary + ' ' + inSection(2) + " " + ' "".lastIndexOf("hello");'; +expect = -1; +actual = "".lastIndexOf("hello"); +reportCompare(expect, actual, status); + +exitFunc ('test'); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-288688.js b/source/spidermonkey-tests/js1_5/Regress/regress-288688.js new file mode 100644 index 00000000..551b6d97 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-288688.js @@ -0,0 +1,48 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 288688; +var summary = 'x->regExpStatics should be stacked and unstacked around the lambda invocations'; +var actual = ''; +var expect = ''; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + + +function genGluck(str){ + var x = str; + var rx=/end/i; + x = x.replace(rx,function($1){ + $1.match(rx); + return ""; + }); + x = x.replace(/^end/,""); + return x; +} + +expect = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"+ + "XXX"; + +actual = genGluck( expect + "end" ); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-289094.js b/source/spidermonkey-tests/js1_5/Regress/regress-289094.js new file mode 100644 index 00000000..03945f77 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-289094.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 289094; +var summary = 'argument shadowing function property special case for lambdas'; +var actual = ''; +var expect = 'function:function'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function fn() +{ + var o = { + d: function(x,y) {}, + init: function() { this.d.x = function(x) {}; this.d.y = function(y) {}; } + }; + o.init(); + actual = typeof(o.d.x) + ':' + typeof(o.d.y); +} + +fn(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-290575.js b/source/spidermonkey-tests/js1_5/Regress/regress-290575.js new file mode 100644 index 00000000..a63c2874 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-290575.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 290575; +var summary = 'Do not crash calling function with more than 32768 arguments'; +var actual = 'No Crash'; +var expect = 'No Crash'; +printBugNumber(BUGNUMBER); +printStatus (summary); + +function crashMe(n) { + var nasty, fn; + + nasty = []; + while (n--) + nasty.push("a"+n); // Function arguments + nasty.push("void 0"); // Function body + fn = Function.apply(null, nasty); + fn.toString(); +} + +printStatus('crashMe(0x8001)'); + +crashMe(0x8001); + +reportCompare(expect, actual, summary); + +function crashMe2(n) { + var nasty = [], fn + + while (n--) nasty[n] = "a"+n + fn = Function(nasty.join(), "void 0") + fn.toString() + } + +printStatus('crashMe2(0x10000)'); + +summary = 'Syntax Error Function to string when more than 65536 arguments'; +expect = 'Error'; +try +{ + crashMe2(0x10000); + actual = 'No Error'; + reportCompare(expect, actual, summary); +} +catch(e) +{ + actual = 'Error'; + reportCompare(expect, actual, summary); + expect = 'SyntaxError'; + actual = e.name; + reportCompare(expect, actual, summary); +} + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-290656.js b/source/spidermonkey-tests/js1_5/Regress/regress-290656.js new file mode 100644 index 00000000..671304cb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-290656.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 290656; +var summary = 'Regression from bug 254974'; +var actual = 'No Error'; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function foo() { + with(foo) { + this["insert"] = function(){ var node = new bar(); }; + } + function bar() {} +} + +try +{ + var list = new foo(); + list.insert(); +} +catch(e) +{ + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-294191.js b/source/spidermonkey-tests/js1_5/Regress/regress-294191.js new file mode 100644 index 00000000..35eea40a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-294191.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294191; +var summary = 'Do not crash with nested function and "delete" op'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +enterFunc ('test'); +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() +{ + function x() + { + x; + } +} + +f.z=0; + +delete f.x; + +f(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-294195-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-294195-01.js new file mode 100644 index 00000000..273b5055 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-294195-01.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294195; +var summary = 'Do not crash during String replace when accessing methods on backreferences'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var s = 'some text sample'; + +// this first version didn't crash +var result = s.replace(new RegExp('(^|\\s)(text)'), (new String('$1'))); +result = result.substr(0, 1); +reportCompare(expect, actual, inSection(1) + ' ' + summary); + +// the original version however did crash. +result = s.replace(new RegExp('(^|\\s)(text)'), + (new String('$1')).substr(0, 1)); +reportCompare(expect, actual, inSection(2) + ' ' + summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-294195-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-294195-02.js new file mode 100644 index 00000000..c6a3cc81 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-294195-02.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294195; +var summary = 'Do not crash during String replace when accessing methods on backreferences'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var result = "".replace(/()/, "$1".slice(0,1)) + + reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-294302.js b/source/spidermonkey-tests/js1_5/Regress/regress-294302.js new file mode 100644 index 00000000..b4f1ed2f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-294302.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 294302; +var summary = 'JS Shell load should throw catchable exceptions'; +var actual = 'Error not caught'; +var expect = 'Error caught'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + load('foo.js'); +} +catch(ex) +{ + actual = 'Error caught'; + printStatus(actual); +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-295052.js b/source/spidermonkey-tests/js1_5/Regress/regress-295052.js new file mode 100644 index 00000000..a84a1578 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-295052.js @@ -0,0 +1,26 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 295052; +var summary = 'Do not crash when apply method is called on String.prototype.match'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + "".match.apply(); + throw new Error("should have thrown for undefined this"); +} +catch (e) +{ + assertEq(e instanceof TypeError, true, + "No TypeError for String.prototype.match"); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-295666.js b/source/spidermonkey-tests/js1_5/Regress/regress-295666.js new file mode 100644 index 00000000..b527b5ec --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-295666.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 295666; +var summary = 'Check JS only recursion stack overflow'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + throw {toString: parseInt.call}; +} +catch(e) +{ +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-299209.js b/source/spidermonkey-tests/js1_5/Regress/regress-299209.js new file mode 100644 index 00000000..891a4fd3 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-299209.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 299209; +var summary = 'anonymous function expression statement => JS stack overflow'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('for (a = 0; a <= 10000; a++) { function(){("");} }'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-299641.js b/source/spidermonkey-tests/js1_5/Regress/regress-299641.js new file mode 100644 index 00000000..6f844b27 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-299641.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 299641; +var summary = '12.6.4 - LHS for (LHS in expression) execution'; +var actual = ''; +var expect = 0; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() { + var i = 0; + var a = [{x: 42}]; + for (a[i++].x in []) + return(a[i-1].x); + return(i); +} +actual = f(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-303213.js b/source/spidermonkey-tests/js1_5/Regress/regress-303213.js new file mode 100644 index 00000000..d01c28d1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-303213.js @@ -0,0 +1,56 @@ +// |reftest| skip-if(!xulRuntime.shell||Android) -- bug 524731 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 303213; +var summary = 'integer overflow in js'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +printStatus('This bug passes if no crash occurs'); + +expectExitCode(0); +expectExitCode(5); + +try +{ + var s=String.fromCharCode(257); + + var ki=""; + var me=""; + for (i = 0; i < 1024; i++) + { + ki = ki + s; + } + + for (i = 0; i < 1024; i++) + { + me = me + ki; + } + + var ov = s; + + for (i = 0; i < 28; i++) + ov += ov; + + for (i = 0; i < 88; i++) + ov += me; + + printStatus("done generating"); + var eov = escape(ov); + printStatus("done escape"); + printStatus(eov); +} +catch(ex) +{ + // handle changed 1.9 branch behavior. see bug 422348 + expect = 'InternalError: allocation size overflow'; + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-306633.js b/source/spidermonkey-tests/js1_5/Regress/regress-306633.js new file mode 100644 index 00000000..880e4efb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-306633.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306633; +var summary = 'report compile warnings in evald code when strict warnings enabled'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +expect = 'SyntaxError'; + +try +{ + actual = eval('super = 5'); +} +catch(e) +{ + actual = e.name; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-306727.js b/source/spidermonkey-tests/js1_5/Regress/regress-306727.js new file mode 100644 index 00000000..13e3881a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-306727.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306727; +var summary = 'Parsing RegExp of octal expressions in strict mode'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// test with strict off + +try +{ + expect = null; + actual = /.\011/.exec ('a'+String.fromCharCode(0)+'11'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); + +// test with strict on +options('strict'); + +expect = null; +try +{ + actual = /.\011/.exec ('a'+String.fromCharCode(0)+'11'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-306794.js b/source/spidermonkey-tests/js1_5/Regress/regress-306794.js new file mode 100644 index 00000000..178c715e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-306794.js @@ -0,0 +1,25 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 306794; +var summary = 'Do not assert: parsing foo getter'; +var actual = 'No Assertion'; +var expect = 'No Assertion'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('getter\n'); +} +catch(e) +{ +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-308085.js b/source/spidermonkey-tests/js1_5/Regress/regress-308085.js new file mode 100644 index 00000000..d23ff12c --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-308085.js @@ -0,0 +1,569 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 308085; +var summary = 'JavaScript switch statement going to the wrong case'; +var actual = 'fail'; +var expect = 'pass'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +switch (0) { +case 0: + actual = "pass"; + break; +case 1: + // 546 lines each with 30 "1;" statements + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; + 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-308566.js b/source/spidermonkey-tests/js1_5/Regress/regress-308566.js new file mode 100644 index 00000000..d3bc205f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-308566.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 308566; +var summary = 'Do not treat octal sequence as regexp backrefs in strict mode'; +var actual = 'No error'; +var expect = 'No error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); +options('werror'); + +try +{ + var c = eval("/\260/"); +} +catch(e) +{ + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-310295.js b/source/spidermonkey-tests/js1_5/Regress/regress-310295.js new file mode 100644 index 00000000..1e0aaacc --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-310295.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 310295; +var summary = 'Do not crash on JS_ValueToString'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var tmp = 23948730458647527874392837439299837412374859487593; + +tmp = new Number(tmp); +tmp = tmp.valueOf() + tmp = String(tmp); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-310607.js b/source/spidermonkey-tests/js1_5/Regress/regress-310607.js new file mode 100644 index 00000000..13d2449f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-310607.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 310607; +var summary = 'Do not crash iterating over Object.prototype'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var f = new Foo(); +f.go("bar"); + +function Foo() { + this.go = function(prototype) { + printStatus("Start"); + for(var i in Object.prototype) { + printStatus("Here"); + eval("5+4"); + } + printStatus("End"); + }; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-310993.js b/source/spidermonkey-tests/js1_5/Regress/regress-310993.js new file mode 100644 index 00000000..da98bb80 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-310993.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 310993; +var summary = 'treat <! as the start of a comment to end of line'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'foo'; +actual = 'foo'; + +if (false) + actual = 'bar'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-311071.js b/source/spidermonkey-tests/js1_5/Regress/regress-311071.js new file mode 100644 index 00000000..b563f716 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-311071.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311071; +var summary = 'treat <! as the start of a comment to end of line'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = 'foo'; +actual = 'foo'; ; actual = 'bar'; +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-311629.js b/source/spidermonkey-tests/js1_5/Regress/regress-311629.js new file mode 100644 index 00000000..6a425044 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-311629.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 311629; +var summary = 'Prevent recursive death in UnaryExp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +'); +} +catch(e) +{ +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-312260.js b/source/spidermonkey-tests/js1_5/Regress/regress-312260.js new file mode 100644 index 00000000..5e52d626 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-312260.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 312260; +var summary = 'Switch discriminant detecting case should not warn'; +var actual = 'No warning'; +var expect = 'No warning'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); +options('werror'); + +try +{ + switch ({}.foo) {} +} +catch(e) +{ + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-31255.js b/source/spidermonkey-tests/js1_5/Regress/regress-31255.js new file mode 100644 index 00000000..3a644495 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-31255.js @@ -0,0 +1,79 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 09 November 2002 + * SUMMARY: JS should treat --> as a single-line comment indicator. + * Whitespace may occur before the --> on the same line. + * + * See http://bugzilla.mozilla.org/show_bug.cgi?id=31255 + * and http://bugzilla.mozilla.org/show_bug.cgi?id=179366 (Rhino version) + * + * Note: are the HTML multi-line comment opener, closer. + * JS already accepted as a single-line comment indicator'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + + HTML comment end is JS comments until end-of-line +--> but only if it follows a possible whitespace after line start +--> so in the following --> should not be treated as comments +if (x-->0) + x = 2; + +status = inSection(2); +actual = (x == 2); +expect = true; +addThis(); + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i>='); + +try +{ + foo >>>= 1; + actual = "fail"; +} +catch (e) +{ + actual = "pass"; +} + +reportCompare(expect, actual, summary + ': >>>='); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-321874.js b/source/spidermonkey-tests/js1_5/Regress/regress-321874.js new file mode 100644 index 00000000..b542d2e7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-321874.js @@ -0,0 +1,207 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 321874; +var summary = 'lhs must be a reference in (for lhs in rhs) ...'; +var actual = ''; +var expect = ''; +var section; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function a() {} +var b = {foo: 'bar'}; + +printStatus('for-in tests'); + +var v; +section = summary + ': for((v) in b);'; +expect = 'foo'; +printStatus(section); +try +{ + eval('for ((v) in b);'); + actual = v; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = summary + ': function foo(){for((v) in b);};foo();'; +expect = 'foo'; +printStatus(section); +try +{ + eval('function foo(){ for ((v) in b);}; foo();'); + actual = v; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = summary + ': for(a() in b);'; +expect = 'error'; +printStatus(section); +try +{ + eval('for (a() in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = summary + ': function foo(){for(a() in b);};foo();'; +expect = 'error'; +printStatus(section); +try +{ + eval('function foo(){ for (a() in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, section); + +section = ': for(new a() in b);'; +expect = 'error'; +printStatus(section); +try +{ + eval('for (new a() in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +section = ': function foo(){for(new a() in b);};foo();'; +expect = 'error'; +printStatus(section); +try +{ + eval('function foo(){ for (new a() in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +section = ': for(void in b);'; +expect = 'error'; +printStatus(section); +try +{ + eval('for (void in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +section = ': function foo(){for(void in b);};foo();'; +expect = 'error'; +printStatus(section); +try +{ + eval('function foo(){ for (void in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +var d = 1; +var e = 2; +expect = 'error'; +section = ': for((d*e) in b);'; +printStatus(section); +try +{ + eval('for ((d*e) in b);'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +var d = 1; +var e = 2; +expect = 'error'; +section = ': function foo(){for((d*e) in b);};foo();'; +printStatus(section); +try +{ + eval('function foo(){ for ((d*e) in b);};foo();'); + actual = 'no error'; +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +const c = 0; +expect = 0; +section = ': for(c in b);'; +printStatus(section); +try +{ + eval('for (c in b);'); + actual = c; + printStatus('typeof c: ' + (typeof c) + ', c: ' + c); +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); + +expect = 0; +section = ': function foo(){for(c in b);};foo();'; +printStatus(section); +try +{ + eval('function foo(){ for (c in b);};foo();'); + actual = c; + printStatus('typeof c: ' + (typeof c) + ', c: ' + c); +} +catch(ex) +{ + printStatus(ex+''); + actual = 'error'; +} +reportCompare(expect, actual, summary + section); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-321971.js b/source/spidermonkey-tests/js1_5/Regress/regress-321971.js new file mode 100644 index 00000000..c40b1f47 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-321971.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 321971; +var summary = 'JSOP_FINDNAME replaces JSOP_BINDNAME'; +var actual = 'no error'; +var expect = 'no error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var s=''; +for (i=0; i < 1<<16; i++) + s += 'x' + i + '=' + i + ';\n'; + +s += 'foo=' + i + ';\n'; +eval(s); +foo; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-322430.js b/source/spidermonkey-tests/js1_5/Regress/regress-322430.js new file mode 100644 index 00000000..f5fbf304 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-322430.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 322430; +var summary = 'Remove deprecated with statement warning'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +options('strict'); +options('werror'); + +expect = 'No Warning'; + +try +{ + var obj = {foo: 'baz'}; + + // this must either be top level or must be + // evald since there is a bug in older versions + // that suppresses the |with| warning inside of a + // try catch block. doh! + eval('with (obj) { foo; }'); + + actual = 'No Warning'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-323314-1.js b/source/spidermonkey-tests/js1_5/Regress/regress-323314-1.js new file mode 100644 index 00000000..0d3c5496 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-323314-1.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 323314; +var summary = 'JSMSG_EQUAL_AS_ASSIGN in js.msg should be JSEXN_SYNTAXERR'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (!options().match(/strict/)) +{ + options('strict'); +} +if (!options().match(/werror/)) +{ + options('werror'); +} + +var xyzzy; + +expect = 'SyntaxError'; + +try +{ + eval('if (xyzzy=1) printStatus(xyzzy);'); + + actual = 'No Warning'; +} +catch(ex) +{ + actual = ex.name; + printStatus(ex + ''); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-325925.js b/source/spidermonkey-tests/js1_5/Regress/regress-325925.js new file mode 100644 index 00000000..e75415b1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-325925.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 325925; +var summary = 'Do not Assert: c <= cs->length in AddCharacterToCharSet'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +/[\cA]/.exec('\x01'); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-326453.js b/source/spidermonkey-tests/js1_5/Regress/regress-326453.js new file mode 100644 index 00000000..c9e39f9d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-326453.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 326453; +var summary = 'Do not assert: while decompiling'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() { with({})function g() { }; printStatus(); } + +printStatus(f.toString()); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-326467.js b/source/spidermonkey-tests/js1_5/Regress/regress-326467.js new file mode 100644 index 00000000..5dc1f59b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-326467.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 326467; +var summary = 'Do not assert: slot < fp->nvars, at jsinterp.c'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +eval('for(var prop in {1:1})prop;', {}) + + reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-328012.js b/source/spidermonkey-tests/js1_5/Regress/regress-328012.js new file mode 100644 index 00000000..8ccc673b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-328012.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 328012; +var summary = 'Content PropertyIterator should not root in chrome'; +var actual = 'No Error'; +var expect = 'No Error'; + + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof focus != 'undefined' && focus.prototype) +{ + try + { + for (prop in focus.prototype.toString) + ; + } + catch(ex) + { + printStatus(ex + ''); + actual = ex + ''; + } +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-328664.js b/source/spidermonkey-tests/js1_5/Regress/regress-328664.js new file mode 100644 index 00000000..e4638ca6 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-328664.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 328664; +var summary = 'Correct error message for funccall(undefined, undefined.prop)'; +var actual = ''; +var expect = /TypeError: value.parameters (has no properties|is undefined)/; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var value = {}; + +function funccall(a,b) +{ +} + +try +{ + funccall(value[1], value.parameters[1]); +} +catch(ex) +{ + printStatus(ex); + actual = ex + ''; +} + +reportMatch(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-329383.js b/source/spidermonkey-tests/js1_5/Regress/regress-329383.js new file mode 100644 index 00000000..00c7260c --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-329383.js @@ -0,0 +1,83 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 329383; +var summary = 'Math copysign issues'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var inputs = [ + -Infinity, + -10.01, + -9.01, + -8.01, + -7.01, + -6.01, + -5.01, + -4.01, + -Math.PI, + -3.01, + -2.01, + -1.01, + -0.5, + -0.49, + -0.01, + -0, + 0, + +0, + 0.01, + 0.49, + 0.50, + 0, + 1.01, + 2.01, + 3.01, + Math.PI, + 4.01, + 5.01, + 6.01, + 7.01, + 8.01, + 9.01, + 10.01, + Infinity + ]; + +var iinput; + +for (iinput = 0; iinput < inputs.length; iinput++) +{ + var input = inputs[iinput]; + reportCompare(Math.round(input), + emulateRound(input), + summary + ': Math.round(' + input + ')'); +} + +reportCompare(isNaN(Math.round(NaN)), + isNaN(emulateRound(NaN)), + summary + ': Math.round(' + input + ')'); + +function emulateRound(x) +{ + if (!isFinite(x) || x === 0) return x + if (-0.5 <= x && x < 0) return -0 + return Math.floor(x + 0.5) + } + +var z; + +z = Math.min(-0, 0); + +reportCompare(-Math.PI, Math.atan2(z, z), summary + ': Math.atan2(-0, -0)'); +reportCompare(-Infinity, 1/z, summary + ': 1/-0'); + +z = Math.max(-0, 0); + +reportCompare(0, Math.atan2(z, z), summary + ': Math.atan2(0, 0)'); +reportCompare(Infinity, 1/z, summary + ': 1/0'); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-329530.js b/source/spidermonkey-tests/js1_5/Regress/regress-329530.js new file mode 100644 index 00000000..05aa1e78 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-329530.js @@ -0,0 +1,41 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 329530; +var summary = 'Do not crash when calling toString on a deeply nested function'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +var nestingLevel = 1000; + +function buildTestFunction(N) { + var i, funSourceStart = "", funSourceEnd = ""; + for (i=0; i < N; ++i) { + funSourceStart += "function testFoo() {"; + funSourceEnd += "}"; + } + return Function(funSourceStart + funSourceEnd); +} + +try +{ + var testSource = buildTestFunction(nestingLevel).toString(); + printStatus(testSource.length); +} +catch(ex) +{ + printStatus(ex + ''); +} + + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-330352.js b/source/spidermonkey-tests/js1_5/Regress/regress-330352.js new file mode 100644 index 00000000..a33c6176 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-330352.js @@ -0,0 +1,35 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 330352; +var summary = 'Very non-greedy regexp causes crash in jsregexp.c'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +if ("AB".match(/(.*?)*?B/)) +{ + printStatus(RegExp.lastMatch); +} +reportCompare(expect, actual, summary + ': "AB".match(/(.*?)*?B/)'); + +if ("AB".match(/(.*)*?B/)) +{ + printStatus(RegExp.lastMatch); +} +reportCompare(expect, actual, summary + ': "AB".match(/(.*)*?B/)'); + +if ("AB".match(/(.*?)*B/)) +{ + printStatus(RegExp.lastMatch); +} +reportCompare(expect, actual, summary + ': "AB".match(/(.*?)*B/)'); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-330951.js b/source/spidermonkey-tests/js1_5/Regress/regress-330951.js new file mode 100644 index 00000000..a7b21402 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-330951.js @@ -0,0 +1,17 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 330951; +var summary = 'Crash in Array.sort on array with undefined value'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +[undefined,1].sort(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-334807-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-334807-01.js new file mode 100644 index 00000000..977b97fc --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-334807-01.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + (function () { printStatus( arguments.join()); })( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-334807-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-334807-02.js new file mode 100644 index 00000000..59b61669 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-334807-02.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('set Object = Array'); + +Object = Array; + +try +{ + (function () { printStatus( arguments.join()); })( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-334807-03.js b/source/spidermonkey-tests/js1_5/Regress/regress-334807-03.js new file mode 100644 index 00000000..ae4e6a87 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-334807-03.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + 0, function () { printStatus( arguments.join()); }( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-334807-04.js b/source/spidermonkey-tests/js1_5/Regress/regress-334807-04.js new file mode 100644 index 00000000..4c229ceb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-334807-04.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '10.1.8 - arguments prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'TypeError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('set Object = Array'); + +Object = Array; + +try +{ + 0, function () { printStatus( arguments.join()); }( 1, 2, 3 ); +} +catch(ex) +{ + printStatus(ex + ''); + actual = ex.name; +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-334807-05.js b/source/spidermonkey-tests/js1_5/Regress/regress-334807-05.js new file mode 100644 index 00000000..02e698c5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-334807-05.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '12.14 - exception prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + x.y; +} +catch(ex) +{ + try + { + actual = ex.name; + printStatus(ex + ': x.y'); + ex.valueOf(); + } + catch(ex2) + { + printStatus(ex2 + ': ex.valueOf()'); + actual = ex2.name; + } +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-334807-06.js b/source/spidermonkey-tests/js1_5/Regress/regress-334807-06.js new file mode 100644 index 00000000..46ca2c66 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-334807-06.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 334807; +var summary = '12.14 - exception prototype is the original Object prototype.'; +var actual = 'No Error'; +var expect = 'ReferenceError'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +printStatus('set Error = Number'); + +Error = Number; + +try +{ + x.y; +} +catch(ex) +{ + try + { + actual = ex.name; + printStatus(ex + ': x.y'); + ex.valueOf(); + } + catch(ex2) + { + printStatus(ex2 + ': ex.valueOf()'); + actual = ex2.name; + } +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-336100.js b/source/spidermonkey-tests/js1_5/Regress/regress-336100.js new file mode 100644 index 00000000..9f19e761 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-336100.js @@ -0,0 +1,24 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336100; +var summary = 'bug 336100 - arguments regressed'; +var actual = ''; +var expect; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var arguments = []; + +expect = '[object Arguments]'; +actual = (function(){return (arguments + '');})(); +reportCompare(expect, actual, summary); + +// see bug 336100 comment 29 +expect = ''; +actual = (function(){with (this) return(arguments + '');})(); +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-338307.js b/source/spidermonkey-tests/js1_5/Regress/regress-338307.js new file mode 100644 index 00000000..2e35cfd0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-338307.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338307; +var summary = 'for (i in arguments) causes type error (JS_1_7_ALPHA_BRANCH)'; +var actual = ''; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function f() { + for (var i in arguments); +} + +try +{ + f(); + actual = 'No Error'; +} +catch(ex) +{ + actual = ex + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-340369.js b/source/spidermonkey-tests/js1_5/Regress/regress-340369.js new file mode 100644 index 00000000..61dfd2ce --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-340369.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 340369; +var summary = 'Oh for crying out loud.'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +try +{ + eval('return /;'); +} +catch(ex) +{ +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-341360.js b/source/spidermonkey-tests/js1_5/Regress/regress-341360.js new file mode 100644 index 00000000..41fe5a0c --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-341360.js @@ -0,0 +1,55 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341360; +var summary = 'clearInterval broken'; +var actual = ''; +var expect = 'Ok'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function xxx() +{ + if(t != null) + { + print('Clearing interval...'); + window.clearInterval(t); + t = null; + setTimeout('yyy()', 2000); + + } + else { + print('Clearing interval failed...'); + actual = "Broken"; + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); + } +} + +function yyy() +{ + print('Checking result...'); + actual = 'Ok'; + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} + +if (typeof window == 'undefined') +{ + expect = actual = 'Not tested'; + reportCompare(expect, actual, summary); +} +else +{ + print('Start...'); + gDelayTestDriverEnd = true; + var t = window.setInterval(xxx, 1000); +} + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-343713.js b/source/spidermonkey-tests/js1_5/Regress/regress-343713.js new file mode 100644 index 00000000..8d2cd609 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-343713.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 343713; +var summary = 'Do not assert with nested function evaluation'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +with (this) + with (this) { + eval("function outer() { function inner() { " + + "print('inner');} inner(); print('outer');} outer()"); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-343966.js b/source/spidermonkey-tests/js1_5/Regress/regress-343966.js new file mode 100644 index 00000000..a2bb1454 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-343966.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 343966; +var summary = 'ClearScope foo regressed due to bug 343417'; +var actual = 'failed'; +var expect = 'passed'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Function["prototype"].inherits=function(a){}; + function foo(){}; + function bar(){}; + foo.inherits(bar); + actual = "passed"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-344711-n.js b/source/spidermonkey-tests/js1_5/Regress/regress-344711-n.js new file mode 100644 index 00000000..6a23285a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-344711-n.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 344711; +var summary = 'Do not crash compiling when peeking over a newline'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + // exclude from browser as the crash only occurs in shell + // and attempting to trap the error prevents the crash. + var a1 = {abc2 : 1, abc3 : 3}; + var j = eval('a1\\\n.abc2;'); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-344804.js b/source/spidermonkey-tests/js1_5/Regress/regress-344804.js new file mode 100644 index 00000000..fef426ea --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-344804.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 344804; +var summary = 'Do not crash iterating over window.Packages'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window != 'undefined') + { + for (var p in window.Packages) + ; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-344959.js b/source/spidermonkey-tests/js1_5/Regress/regress-344959.js new file mode 100644 index 00000000..e8e264c6 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-344959.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 344959; +var summary = 'Functions should not lose scope chain after exception'; +var actual = ''; +var expect = 'with'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = "global" + + with ({x:"with"}) + actual = (function() { try {} catch(exc) {}; return x }()); + + reportCompare(expect, actual, summary + ': 1'); + + with ({x:"with"}) + actual = (function() { try { throw 1} catch(exc) {}; return x }()); + + reportCompare(expect, actual, summary + ': 2'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-346237.js b/source/spidermonkey-tests/js1_5/Regress/regress-346237.js new file mode 100644 index 00000000..e8ca047f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-346237.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346237; +var summary = 'RegExp - /(|)??x/g.exec("y")'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + /(|)??x/g.exec("y"); + + reportCompare(expect, actual, summary + ': /(|)??x/g.exec("y")'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-346801.js b/source/spidermonkey-tests/js1_5/Regress/regress-346801.js new file mode 100644 index 00000000..0a61cb6f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-346801.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346801; +var summary = 'Hang regression from bug 346021'; +var actual = ''; +var expect = 'No Hang'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + var Class = { + create: function() { + return function() { + this.initialize.apply(this, arguments); + } + } + } + + Object.extend = function(destination, source) { + print("Start"); +// print(destination); +// print(source); + if(destination==source) + print("Same desination and source!"); + var i = 0; + for (property in source) { +// print(" " + property); + destination[property] = source[property]; + ++i; + if (i > 1000) { + throw "Hang"; + } + } + print("Finish"); + return destination; + } + + var Ajax = { + }; + + Ajax.Base = function() {}; + Ajax.Base.prototype = { + responseIsFailure: function() { } + } + + Ajax.Request = Class.create(); + + Ajax.Request.prototype = Object.extend(new Ajax.Base(), {}); + + Ajax.Updater = Class.create(); + + Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype); + actual = 'No Hang'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-349482-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-349482-01.js new file mode 100644 index 00000000..8e2b542b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-349482-01.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 349482; +var summary = 'Decompiling try/catch in for..in should not crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function() { for(p in {}) try{}catch(e){} }; + print(f.toString()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-349482-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-349482-02.js new file mode 100644 index 00000000..4dffe81d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-349482-02.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 349482; +var summary = 'Decompiling try/catch in with() should not crash'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function() { with({}) { try{}catch(e){} } } + print(f.toString()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-349592.js b/source/spidermonkey-tests/js1_5/Regress/regress-349592.js new file mode 100644 index 00000000..64eef344 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-349592.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 349592; +var summary = 'Do not assert with try/finally inside finally'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { try { } finally { try { } finally { } } }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-350253.js b/source/spidermonkey-tests/js1_5/Regress/regress-350253.js new file mode 100644 index 00000000..154c835a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-350253.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350253; +var summary = 'Do not assert on (g()) = 3'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (g()) = 3; + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-350268.js b/source/spidermonkey-tests/js1_5/Regress/regress-350268.js new file mode 100644 index 00000000..78e836b1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-350268.js @@ -0,0 +1,74 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350268; +var summary = 'new Function with unbalanced braces'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("}"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": }"); + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("}}}}}"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": }}}}}"); + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("alert(6); } alert(5);"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": alert(6); } alert(5);"); + + try + { + expect = 'SyntaxError'; + actual = 'No Error'; + f = new Function("} {"); + } + catch(ex) + { + actual = ex.name; + } + reportCompare(expect, actual, summary + ": } {"); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-350312.js b/source/spidermonkey-tests/js1_5/Regress/regress-350312.js new file mode 100644 index 00000000..4b54f1e9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-350312.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var counter = 0; + + function f(x,y) { + + try + { + throw x; + } + catch(e) + { + if (y) + throw e; + } + finally + { + try + { + actual += 'finally,'; + throw 42; + } + catch(e2) + { + actual += e2; + if (++counter > 10) + { + throw 'Infinite loop...'; + } + } + } + return 'returned'; + } + + expect = 'finally,42'; + actual = ''; + + try + { + print('test 1'); + f(2, 1); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + actual = ''; + try + { + print('test 2'); + f(2, 0); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-350415.js b/source/spidermonkey-tests/js1_5/Regress/regress-350415.js new file mode 100644 index 00000000..0775e2b3 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-350415.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350415; +var summary = 'Do not assert with new Function("let /*")'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + new Function("let /*"); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-350529.js b/source/spidermonkey-tests/js1_5/Regress/regress-350529.js new file mode 100644 index 00000000..ae0d6f04 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-350529.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350529; +var summary = "Do not assert: x--'"; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval("x--'"); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-350692.js b/source/spidermonkey-tests/js1_5/Regress/regress-350692.js new file mode 100644 index 00000000..d28d7f54 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-350692.js @@ -0,0 +1,38 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350692; +var summary = 'import x["y"]["z"]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = {y: {z: function() {}}}; + + try + { + import x['y']['z']; + } + catch(ex) + { + reportCompare('TypeError: x["y"]["z"] is not exported', ex + '', summary); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-351116.js b/source/spidermonkey-tests/js1_5/Regress/regress-351116.js new file mode 100644 index 00000000..b5723320 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-351116.js @@ -0,0 +1,30 @@ +// |reftest| skip-if(xulRuntime.OS=="Linux"&&!xulRuntime.shell&&!xulRuntime.XPCOMABI.match(/x86_64/)&&isDebugBuild) -- bug 521549 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351116; +var summary = 'formal parameter and inner function have same name'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function (s) { function s() { } }; + + function g(s) { function s() { } } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-351515.js b/source/spidermonkey-tests/js1_5/Regress/regress-351515.js new file mode 100644 index 00000000..46963660 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-351515.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351515; +var summary = 'js17 features must be enabled by version request'; +var actual = 'No Error'; +var expect = 'No Error'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +yield = 1; +let = 1; + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(yield, let) { return yield+let; } + + var yield = 1; + var let = 1; + + function yield() {} + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-352009.js b/source/spidermonkey-tests/js1_5/Regress/regress-352009.js new file mode 100644 index 00000000..4307f309 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-352009.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352009; +var summary = 'Do not assert [1 for (y in [3])]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + [1 for (y in [3])]; + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-352208.js b/source/spidermonkey-tests/js1_5/Regress/regress-352208.js new file mode 100644 index 00000000..279ba0bb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-352208.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352208; +var summary = 'Do not assert new Function("setter/*\n")'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'SyntaxError: unterminated string literal'; + try + { + eval('new Function("setter/*\n");'); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'new Function("setter/*\n");'); + + try + { + eval('new Function("setter/*\n*/");'); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'new Function("setter/*\n*/");'); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-352604.js b/source/spidermonkey-tests/js1_5/Regress/regress-352604.js new file mode 100644 index 00000000..a0094c58 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-352604.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352604; +var summary = 'Do not assert: !OBJ_GET_PROTO(cx, ctor)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + delete Function; + var x = function () {}; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-354924.js b/source/spidermonkey-tests/js1_5/Regress/regress-354924.js new file mode 100644 index 00000000..8446c90f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-354924.js @@ -0,0 +1,32 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354924; +var summary = 'Do not crash with export/import and setter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + this.x setter= function(){}; + export *; + t = this; + new Function("import t.*; import t.*;")(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-355341.js b/source/spidermonkey-tests/js1_5/Regress/regress-355341.js new file mode 100644 index 00000000..ab2a4b88 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-355341.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355341; +var summary = 'Do not crash with watch and setter'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + Object.defineProperty(this, "x", { set: Function, enumerable: true, configurable: true }); + this.watch('x', function () { }); x = 3; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-355344.js b/source/spidermonkey-tests/js1_5/Regress/regress-355344.js new file mode 100644 index 00000000..00bd3914 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-355344.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355344; +var summary = 'Exceptions thrown by watch point'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var o = {}; + + expect = 'setter: yikes'; + + o.watch('x', function(){throw 'yikes'}); + try + { + o.x = 3; + } + catch(ex) + { + actual = "setter: " + ex; + } + + try + { + eval("") ; + } + catch(e) + { + actual = "eval: " + e; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-355556.js b/source/spidermonkey-tests/js1_5/Regress/regress-355556.js new file mode 100644 index 00000000..be9efb56 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-355556.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355556; +var summary = 'Do not crash with eval(..., arguments)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'TypeError: "foo".b is not a function'; + try + { + (function () { eval("'foo'.b()", arguments) })(); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-355829-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-355829-01.js new file mode 100644 index 00000000..9b7fcf74 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-355829-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355829; +var summary = 'Do not assert: !argc || argv[0].isNull() || argv[0].isUndefined()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + new Object({valueOf: /a/}); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-355829-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-355829-02.js new file mode 100644 index 00000000..f1fb22ea --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-355829-02.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355829; +var summary = 'js_ValueToObject should return the original object if OBJ_DEFAULT_VALUE returns a primitive value'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'Good conversion'; + + var primitiveValues = [ + true, false, 0, 1, -2, 0.1, -2e100, 0/0, 1/0, -1/1, "", "xxx", + undefined, null + ]; + + for (var i = 0; i != primitiveValues.length; ++i) { + var v = primitiveValues[i]; + var obj = { valueOf: function() { return v; } }; + var obj2 = Object(obj); + if (obj !== obj2) + actual = "Bad conversion for '"+v + "'"; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-355829-03.js b/source/spidermonkey-tests/js1_5/Regress/regress-355829-03.js new file mode 100644 index 00000000..449ef02d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-355829-03.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355829; +var summary = 'js_ValueToObject should return the original object if OBJ_DEFAULT_VALUE returns a primitive value'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var a = [ { valueOf: function() { return null; } } ]; + a.toLocaleString(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-356250.js b/source/spidermonkey-tests/js1_5/Regress/regress-356250.js new file mode 100644 index 00000000..a989e07d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-356250.js @@ -0,0 +1,44 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 356250; +var summary = 'Do not assert: !fp->fun || !(fp->fun->flags & JSFUN_HEAVYWEIGHT) || fp->callobj'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +(function() { eval("(function() { })"); })(); +reportCompare(expect, actual, summary + ': nested 0'); + +//----------------------------------------------------------------------------- +test1(); +test2(); +//----------------------------------------------------------------------------- + +function test1() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { eval("(function() { })"); })(); + + reportCompare(expect, actual, summary + ': nested 1'); + + exitFunc ('test'); +} + +function test2() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function () {(function() { eval("(function() { })"); })();})(); + + reportCompare(expect, actual, summary + ': nested 2'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-356693.js b/source/spidermonkey-tests/js1_5/Regress/regress-356693.js new file mode 100644 index 00000000..b9d348f6 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-356693.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 356693; +var summary = 'Do not assert: pn2->pn_op == JSOP_SETCALL'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'ReferenceError: x is not defined'; + try + { + delete (0 ? 3 : x()); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-360969-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-360969-01.js new file mode 100644 index 00000000..9f60fc51 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-360969-01.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: local var'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = new Date(); + var p; + var i; + var limit = 2 << 16; + + for (var i = 0; i < limit; i++) + { + eval('var pv;'); + } + + reportCompare(expect, actual, summary); + + var stop = new Date(); + + print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-360969-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-360969-02.js new file mode 100644 index 00000000..1c4f9f6c --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-360969-02.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: global var'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var start = new Date(); +var p; +var i; +var limit = 2 << 16; + +for (var i = 0; i < limit; i++) +{ + eval('var pv;'); +} + +reportCompare(expect, actual, summary); + +var stop = new Date(); + +print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-360969-03.js b/source/spidermonkey-tests/js1_5/Regress/regress-360969-03.js new file mode 100644 index 00000000..19f29362 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-360969-03.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: local const'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = new Date(); + var p; + var i; + var limit = 2 << 16; + + for (var i = 0; i < limit; i++) + { + eval('const pv' + i + ' = undefined;'); + } + + reportCompare(expect, actual, summary); + + var stop = new Date(); + + print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-360969-04.js b/source/spidermonkey-tests/js1_5/Regress/regress-360969-04.js new file mode 100644 index 00000000..ea53e0eb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-360969-04.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: global const'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var start = new Date(); +var p; +var i; +var limit = 2 << 16; + +for (var i = 0; i < limit; i++) +{ + eval('const pv' + i + ' = undefined;'); +} + +reportCompare(expect, actual, summary); + +var stop = new Date(); + +print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-360969-05.js b/source/spidermonkey-tests/js1_5/Regress/regress-360969-05.js new file mode 100644 index 00000000..f611c2d6 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-360969-05.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: local function'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +//----------------------------------------------------------------------------- +test(); + +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = new Date(); + var p; + var i; + var limit = 2 << 16; + + for (var i = 0; i < limit; i++) + { + eval('function pf' + i + '() {}'); + } + + reportCompare(expect, actual, summary); + + var stop = new Date(); + + print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + + exitFunc ('test'); +} + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-360969-06.js b/source/spidermonkey-tests/js1_5/Regress/regress-360969-06.js new file mode 100644 index 00000000..d9d1c0e4 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-360969-06.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 360969; +var summary = '2^17: global function'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +var global = this; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var start = new Date(); +var p; +var i; +var limit = 2 << 16; + +for (var i = 0; i < limit; i++) +{ + eval('function pf' + i + '() {}'); +} + +reportCompare(expect, actual, summary); + +var stop = new Date(); + +print('Elapsed time: ' + Math.floor((stop - start)/1000) + ' seconds'); + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-361467.js b/source/spidermonkey-tests/js1_5/Regress/regress-361467.js new file mode 100644 index 00000000..371c0a8b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-361467.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361467; +var summary = 'Do not crash with certain watchers'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + + var x; + this.watch('x', print); + x = 5; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-361617.js b/source/spidermonkey-tests/js1_5/Regress/regress-361617.js new file mode 100644 index 00000000..5d20fd78 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-361617.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361617; +var summary = 'Do not crash with getter, watch and gc'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { + Object.defineProperty(this, "x", { get: function(){}, enumerable: true, configurable: true }); + })(); + this.watch('x', print); + Object.defineProperty(this, "x", { get: function(){}, enumerable: true, configurable: true }); + gc(); + this.unwatch('x'); + x; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-362583.js b/source/spidermonkey-tests/js1_5/Regress/regress-362583.js new file mode 100644 index 00000000..389ac539 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-362583.js @@ -0,0 +1,44 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 362583; +var summary = 'Do not assert: caller->fun && !JSFUN_HEAVYWEIGHT_TEST(caller->fun->flags)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + expect = actual = 'Script object not defined, test skipped.'; + } + else + { + try + { + this.x setter= (new Script('')); + this.watch('x', function() { return; import p.q; }); + x = 4; + } + catch(ex) + { + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-3649-n.js b/source/spidermonkey-tests/js1_5/Regress/regress-3649-n.js new file mode 100644 index 00000000..33355163 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-3649-n.js @@ -0,0 +1,33 @@ +// |reftest| skip -- skip test due to random oom related errors. +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +// testcase from bug 2235 mff@research.att.com +var BUGNUMBER = 3649; +var summary = 'gc-checking branch callback.'; +var actual = 'error'; +var expect = 'error'; + +DESCRIPTION = summary; +EXPECTED = expect; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(3); +expectExitCode(5); + +var s = ""; +s = "abcd"; +for (i = 0; i < 100000; i++) { + s += s; +} + +expect = 'No Crash'; +actual = 'No Crash'; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-366122.js b/source/spidermonkey-tests/js1_5/Regress/regress-366122.js new file mode 100644 index 00000000..ef458fe8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-366122.js @@ -0,0 +1,46 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366122; +var summary = 'Compile large script'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + var code = "", obj = {}; + for(var i = 0; i < 0x10000; i++) { + if(i == 10242) { + code += "void 0x10000050505050;\n"; + } else { + code += "void 'x" + i + "';\n"; + } + } + code += "export undefined;\n"; + code += "void 125;\n"; + eval(code); + } + try + { + exploit(); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-366468.js b/source/spidermonkey-tests/js1_5/Regress/regress-366468.js new file mode 100644 index 00000000..457cc0e1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-366468.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366468; +var summary = 'Set property without setter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + function o(){} o.prototype = {get foo() {}}; obj = new o(); obj.foo = 2; + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-366601.js b/source/spidermonkey-tests/js1_5/Regress/regress-366601.js new file mode 100644 index 00000000..5178d9f9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-366601.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 366601; +var summary = 'Switch with more than 64k atoms'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 100*1000; + var src = 'var x = ["'; + var array = Array(N); + for (var i = 0; i != N; ++i) + array[i] = i; + src += array.join('","')+'"];\n'; + src += 'switch (a) { case "a": case "b": case "c": return null; } return x;'; + var f = Function('a', src); + var r = f("a"); + if (r !== null) + throw "Unexpected result: bad switch label"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-367561-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-367561-01.js new file mode 100644 index 00000000..4504cdaa --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-367561-01.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367561; +var summary = 'JSOP_(GET|SET)METHOD and JSOP_SETCONST with > 64K atoms'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 1 << 16; + var src = 'var x = /'; + var array = Array(); + for (var i = 0; i != N/2; ++i) + array[i] = i; + src += array.join('/;x=/')+'/; x="'; + src += array.join('";x="')+'";'; + src += 'y.some_function();'; + var f = Function(src); + var src2 = f.toString(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-367561-03.js b/source/spidermonkey-tests/js1_5/Regress/regress-367561-03.js new file mode 100644 index 00000000..cfb7432e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-367561-03.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 367561; +var summary = 'JSOP_(GET|SET)METHOD and JSOP_SETCONST with > 64K atoms'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 1 << 16; + var src = 'var x = /'; + var array = Array(); + for (var i = 0; i != N/2; ++i) + array[i] = i; + src += array.join('/;x=/')+'/; x="'; + src += array.join('";x="')+'";'; + src += 'const some_const = 10'; + eval(src); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-372364.js b/source/spidermonkey-tests/js1_5/Regress/regress-372364.js new file mode 100644 index 00000000..8117d0c5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-372364.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 372364; +var summary = 'Incorrect error message "() has no properties"'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('See Also bug 365891'); + expect = /TypeError: a\(.+\) (has no properties|is null)/; + try + { + function a(){return null;} a(1)[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportMatch(expect, actual, summary); + + expect = /TypeError: \/a\/.exec\(.+\) (has no properties|is null)/; + try + { + /a/.exec("b")[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportMatch(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-379245.js b/source/spidermonkey-tests/js1_5/Regress/regress-379245.js new file mode 100644 index 00000000..9e4b4685 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-379245.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 379245; +var summary = 'inline calls'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var fThis; + + function f() + { + fThis = this; + return ({x: f}).x; + } + + f()(); + + if (this !== fThis) + throw "bad this"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-383674.js b/source/spidermonkey-tests/js1_5/Regress/regress-383674.js new file mode 100644 index 00000000..c0b01cb7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-383674.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383674; +var summary = 'Statement that implicitly calls toString should not be optimized away as a "useless expression"'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + options("strict"); + options("werror"); + + expect = 'toString called'; + actual = 'toString not called'; + try + { + var x = {toString: function() { + actual = 'toString called'; + print(actual); + } + }; + var f = function() { var j = x; j + ""; } + f(); + reportCompare(expect, actual, summary + ': 1'); + } + catch(ex) + { + reportCompare("No Error", ex + "", summary + ': 1'); + } + + actual = 'toString not called'; + try + { + (function() { const a = + ({toString: function(){ + actual = 'toString called'; print(actual)} }); a += ""; })(); + reportCompare(expect, actual, summary + ': 2'); + } + catch(ex) + { + reportCompare("No Error", ex + "", summary + ': 2'); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-383682.js b/source/spidermonkey-tests/js1_5/Regress/regress-383682.js new file mode 100644 index 00000000..def3c48e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-383682.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 383682; +var summary = 'eval is too dynamic'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(s) { + return this.eval(s); + } + + expect = 'PASS'; + f("function g() { return('PASS'); }"); + actual = g(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-385393-06.js b/source/spidermonkey-tests/js1_5/Regress/regress-385393-06.js new file mode 100644 index 00000000..327103f3 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-385393-06.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385393; +var summary = 'Regression test for bug 385393'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + reportCompare(expect, actual, summary); + + true.watch("x", function(){}); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-387951-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-387951-01.js new file mode 100644 index 00000000..f58892b5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-387951-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 387951; +var summary = 'Do not assert: cg->stackDepth >= 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (delete (0 ? 3 : {})); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-387951-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-387951-02.js new file mode 100644 index 00000000..2c9bf711 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-387951-02.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 387951; +var summary = 'Do not assert: cg->stackDepth >= 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + "" + (function() { if(delete(null?0:{})){[]} }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-387951-03.js b/source/spidermonkey-tests/js1_5/Regress/regress-387951-03.js new file mode 100644 index 00000000..d614fa92 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-387951-03.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 387951; +var summary = 'Do not assert: cg->stackDepth >= 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + switch(delete[null?0:{}]){default:} + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-39309.js b/source/spidermonkey-tests/js1_5/Regress/regress-39309.js new file mode 100644 index 00000000..28e72f4b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-39309.js @@ -0,0 +1,76 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * + * Date: 30 Sep 2003 + * SUMMARY: Testing concatenation of string + number + * See http://bugzilla.mozilla.org/show_bug.cgi?id=39309 + * + */ +//----------------------------------------------------------------------------- +var UBound = 0; +var BUGNUMBER = 39309; +var summary = 'Testing concatenation of string + number'; +var status = ''; +var statusitems = []; +var actual = ''; +var actualvalues = []; +var expect= ''; +var expectedvalues = []; + + +function f(textProp, len) +{ + var i = 0; + while (++i <= len) + { + var name = textProp + i; + actual = name; + } +} + + +status = inSection(1); +f('text', 1); // sets |actual| +expect = 'text1'; +addThis(); + +status = inSection(2); +f('text', 100); // sets |actual| +expect = 'text100'; +addThis(); + + + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + + + +function addThis() +{ + statusitems[UBound] = status; + actualvalues[UBound] = actual; + expectedvalues[UBound] = expect; + UBound++; +} + + +function test() +{ + enterFunc('test'); + printBugNumber(BUGNUMBER); + printStatus(summary); + + for (var i=0; i 2 && time > time2 * 5) + throw "A possible leak is observed"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-406769.js b/source/spidermonkey-tests/js1_5/Regress/regress-406769.js new file mode 100644 index 00000000..b6bd7398 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-406769.js @@ -0,0 +1,155 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 406769; +var summary = 'Regression from bug 398609 caused infinite loop'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + +var a0; +var a1; +var a2; +var a3; +var a4; +var a5; +var a6; +var a7; +var a8; +var a9; +var a10; +var a11; +var a12; +var a13; +var a14; +var a15; +var a16; +var a17; +var a18; +var a19; +var a20; +var a21; +var a22; +var a23; +var a24; +var a25; +var a26; +var a27; +var a28; +var a29; +var a30; +var a31; +var a32; +var a33; +var a34; +var a35; +var a36; +var a37; +var a38; +var a39; +var a40; +var a41; +var a42; +var a43; +var a44; +var a45; +var a46; +var a47; +var a48; +var a49; +var a50; +var a51; +var a52; +var a53; +var a54; +var a55; +var a56; +var a57; +var a58; +var a59; +var a60; +var a61; +var a62; +var a63; +var a64; +var a65; +var a66; +var a67; +var a68; +var a69; +var a70; +var a71; +var a72; +var a73; +var a74; +var a75; +var a76; +var a77; +var a78; +var a79; +var a80; +var a81; +var a82; +var a83; +var a84; +var a85; +var a86; +var a87; +var a88; +var a89; +var a90; +var a91; +var a92; +var a93; +var a94; +var a95; +var a96; +var a97; +var a98; +var a99; +var a100; +var a101; +var a102; +var a103; +var a104; +var a105; +var a106; +var a107; +var a108; +var a109; +var a110; +var a111; +var a112; +var a113; +var a114; +var a115; +var a116; +var a117; +var a118; +var a119; +var a120; +var a121; +var a122; +var a123; +var a124; +var a125; +for (var a126 = 1; a126 < ([1,2,3]).length -1; ++a126) + 1; + + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-407024.js b/source/spidermonkey-tests/js1_5/Regress/regress-407024.js new file mode 100644 index 00000000..7bc4a7c0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-407024.js @@ -0,0 +1,20 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407024; +var summary = 'Do not assert pn3->pn_val.isNumber() || pn3->pn_val.isString() || pn3->pn_val.isBoolean()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +eval("function f(x) { switch (x) { case Array: return 1; }}"); +var result = f(Array); +if (result !== 1) + throw "Unexpected result: "+uneval(result); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-407957.js b/source/spidermonkey-tests/js1_5/Regress/regress-407957.js new file mode 100644 index 00000000..ffd05bd4 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-407957.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407957; +var summary = 'Iterator is mutable.'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj = {}; + var saveIterator = Iterator; + + Iterator = obj; + reportCompare(obj, Iterator, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-410852.js b/source/spidermonkey-tests/js1_5/Regress/regress-410852.js new file mode 100644 index 00000000..04109b46 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-410852.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 410852; +var summary = 'Valgrind errors in jsemit.cpp'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('Note: You must run this test under valgrind to determine if it passes'); + + try + { + eval('function(){if(t)'); + } + catch(ex) + { + assertEq(ex instanceof SyntaxError, true, "wrong error: " + ex); + } + + reportCompare(true, true, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-416628.js b/source/spidermonkey-tests/js1_5/Regress/regress-416628.js new file mode 100644 index 00000000..fd6d1540 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-416628.js @@ -0,0 +1,110 @@ +// |reftest| random -- BigO +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416628; +var summary = 'O(n^2) blowup due to overlong cx->tempPool arena list'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var data = {X:[], Y:[]}; + + Function.prototype.inherits = function(parentCtor) { + moo_inherits(this, parentCtor); + }; + + moo_inherits = function(childCtor, parentCtor) { + /** @constructor */ + function tempCtor() {}; + tempCtor.prototype = parentCtor.prototype; + childCtor.superClass_ = parentCtor.prototype; + childCtor.prototype = new tempCtor(); + childCtor.prototype.constructor = childCtor; + }; + + var jstart = 100; + var jstop = 1000; + var jinterval = (jstop - jstart)/9; + + if (true) { + for (var j = jstart; j < jstop; j += jinterval) + { + data.X.push(j); + var code = ''; + for (var i = 0; i < j; i++) + { + code += createCode(i); + } + gc(); + var start = new Date(); + eval(code); + var stop = new Date(); + data.Y.push(stop - start); + } + } + + var order = BigO(data); + + var msg = ''; + for (var p = 0; p < data.X.length; p++) + { + msg += '(' + data.X[p] + ', ' + data.Y[p] + '); '; + } + printStatus(msg); + printStatus('Order: ' + order); + + reportCompare(true, order < 2, 'BigO ' + order + ' < 2'); + + exitFunc ('test'); +} + +function createCode(i) +{ + var code = ''; + + code += "var str1_" + i + "='This is 1 a test " + i + " string.';"; + code += "var str2_" + i + "='This is 2 a test " + i + " string.';"; + code += "var str3_" + i + "='This is 3 a test " + i + " string.';"; + code += "var str4_" + i + "='This is 4 a test " + i + " string.';"; + code += "var str5_" + i + "='This is 5 a test " + i + " string.';"; + code += "var str6_" + i + "='This is 6 a test " + i + " string.';"; + code += "var str7_" + i + "='This is 7 a test " + i + " string.';"; + code += ""; + code += "var base" + i + " = function() {this.a_=4;this.b_=5};"; + code += "base" + i + ".f1 = function() {this.a_=4;this.b_=5};"; + code += "base" + i + ".prototype.f2 = function() {this.a_=4;this.b_=5};"; + code += "base" + i + ".prototype.f3 = function() {this.a_=4;this.b_=5};"; + code += "base" + i + ".prototype.f4 = function() {this.a_=4;this.b_=5};"; + code += "base" + i + ".prototype.f5 = function() {this.a_=4;this.b_=5};"; + code += ""; + code += "var child" + i + " = function() {this.a_=4;this.b_=5};"; + code += "child" + i + ".inherits(base" + i + ");"; + code += "child" + i + ".f1 = function() {this.a_=4;this.b_=5};"; + code += "child" + i + ".prototype.f2 = function() {this.a_=4;this.b_=5};"; + code += "child" + i + ".prototype.f3 = function() {this.a_=4;this.b_=5};"; + code += "child" + i + ".prototype.f4 = function() {this.a_=4;this.b_=5};"; + code += "child" + i + ".prototype.f5 = function() {this.a_=4;this.b_=5};"; + code += ""; + code += "var gchild" + i + " = function() {this.a_=4;this.b_=5};"; + code += "gchild" + i + ".inherits(child" + i + ");"; + code += "gchild" + i + ".f1 = function() {this.a_=4;this.b_=5};"; + code += "gchild" + i + ".prototype.f2 = function() {this.a_=4;this.b_=5};"; + code += "gchild" + i + ".prototype.f3 = function() {this.a_=4;this.b_=5};"; + code += "gchild" + i + ".prototype.f4 = function() {this.a_=4;this.b_=5};"; + code += "gchild" + i + ".prototype.f5 = function() {this.a_=4;this.b_=5};"; + + return code; +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-416737-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-416737-01.js new file mode 100644 index 00000000..7321d830 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-416737-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416737; +var summary = 'Do not assert: *pc == JSOP_GETARG'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { (function([]){ function n(){} })(1) }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-416737-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-416737-02.js new file mode 100644 index 00000000..1d4c43c5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-416737-02.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 416737; +var summary = 'Do not assert: *pc == JSOP_GETARG'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function([]){ function n(){} }; + if (typeof dis == 'function') + { + dis(f); + } + print(f); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-417893.js b/source/spidermonkey-tests/js1_5/Regress/regress-417893.js new file mode 100644 index 00000000..4a7ce6e1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-417893.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 417893; +var summary = 'Fast natives must use JS_THIS/JS_THIS_OBJECT'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function() { var s = function(){}.prototype.toSource; s(); })(); + } + catch (e) + { + assertEq(e instanceof TypeError, true, + "No TypeError for Object.prototype.toSource"); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-418504.js b/source/spidermonkey-tests/js1_5/Regress/regress-418504.js new file mode 100644 index 00000000..b2797131 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-418504.js @@ -0,0 +1,53 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 418504; +var summary = 'Untagged boolean stored in a jsval in JS_ConvertValue'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = false; + actual = RegExp.multiline; + reportCompare(expect, actual, 'RegExp.multiline'); + + expect = true; + RegExp.multiline = 17; + actual = RegExp.multiline; + reportCompare(expect, actual, 'RegExp.multiline = 17'); + + expect = true; + RegExp.multiline = 17; + actual = RegExp.multiline; + reportCompare(expect, actual, 'RegExp.multiline = 17'); + + expect = true; + RegExp.multiline = 17; + actual = RegExp.multiline; + reportCompare(expect, actual, 'RegExp.multiline = 17'); + + expect = true; + RegExp.multiline = true; + actual = RegExp.multiline; + reportCompare(expect, actual, 'RegExp.multiline = true'); + + expect = true; + RegExp.multiline = 17; + actual = RegExp.multiline; + reportCompare(expect, actual, 'RegExp.multiline = 17'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-418540.js b/source/spidermonkey-tests/js1_5/Regress/regress-418540.js new file mode 100644 index 00000000..f03f98b2 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-418540.js @@ -0,0 +1,62 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 418540; +var summary = 'Do not assert: OBJ_IS_NATIVE(obj)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + expect = actual = 'Browser test only - skipped'; + reportCompare(expect, actual, summary); + } + else + { + gDelayTestDriverEnd = true; + window.onload = boom; + } + + exitFunc ('test'); +} + +function boom() +{ + var p; + var b = document.createElement("body"); + var v = document.createElement("div"); + b.getAttribute("id") + v.getAttribute("id") + for (p in v) { } + for (p in b) { } + b.__proto__ = []; + try { aC(v, null); } catch(e) { } + try { aC(b, null); } catch(e) { } + + setTimeout(check, 1000); +} + +function aC(r, n) { r.appendChild(n); } + +function check() +{ + expect = actual = 'No Crash'; + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-419018.js b/source/spidermonkey-tests/js1_5/Regress/regress-419018.js new file mode 100644 index 00000000..35a4fb83 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-419018.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 419018; +var summary = 'UMR in JSENUMERATE_INIT'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test must be run under valgrind to check if an UMR occurs in slowarray_enumerate'); + + try + { + function parse() { + var a = []; // need array init + a["b"] = 1; // need to set obj property + return a; + } + // var c; // can't declare c + // var d = {}; // can't add this (weird!) + // var d = ""; // nor this + var x = parse(""); // won't crash without string arg (weird!) + // var d = ""; // nor here + for (var o in x) + c[o]; // need to look up o in undefined object + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-419803.js b/source/spidermonkey-tests/js1_5/Regress/regress-419803.js new file mode 100644 index 00000000..765298c7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-419803.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 419803; +var summary = 'Do not assert: sprop->parent == scope->lastProp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i=0; i<2; ++i) ({ p: 5, p: 7 }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-420919.js b/source/spidermonkey-tests/js1_5/Regress/regress-420919.js new file mode 100644 index 00000000..f58b8d99 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-420919.js @@ -0,0 +1,37 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 420919; +var summary = 'this.u.v = 1 should report this.u is undefined'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // 1.8 branch reports no properties, trunk reports undefined + expect = /TypeError: this.u is undefined|TypeError: this.u has no properties/; + + try + { + this.u.v = 1; + } + catch(ex) + { + actual = ex + ''; + } + reportMatch(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-422348.js b/source/spidermonkey-tests/js1_5/Regress/regress-422348.js new file mode 100644 index 00000000..f2443c28 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-422348.js @@ -0,0 +1,38 @@ +// |reftest| skip-if(xulRuntime.XPCOMABI.match(/x86_64/)) -- On 64-bit, takes forever rather than throwing +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 422348; +var summary = 'Proper overflow error reporting'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'InternalError: allocation size overflow'; + try + { + Array(1 << 30).sort(); + actual = 'No Error'; + } + catch (ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-424311.js b/source/spidermonkey-tests/js1_5/Regress/regress-424311.js new file mode 100644 index 00000000..e2d0adea --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-424311.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 424311; +var summary = 'Do not assert: entry->kpc == ((PCVCAP_TAG(entry->vcap) > 1) ? (jsbytecode *) JSID_TO_ATOM(id) : cx->fp->regs->pc)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function(){(function(){ constructor=({}); })()})(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-425360.js b/source/spidermonkey-tests/js1_5/Regress/regress-425360.js new file mode 100644 index 00000000..8d72808a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-425360.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 425360; +var summary = 'Do not assert: !cx->throwing'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +function finishtest() +{ + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} + +function throwBlah() +{ + throw 'blah'; +} + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof window == 'undefined') +{ + expect = actual = 'Not tested. Requires browser.'; + reportCompare(expect, actual, summary); +} +else +{ + gDelayTestDriverEnd = true; + window.onerror = null; + setTimeout('finishtest()', 1000); + window.onload = (function () { setInterval('throwBlah()', 0); }); + setInterval('foo(', 0); +} + + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-426827.js b/source/spidermonkey-tests/js1_5/Regress/regress-426827.js new file mode 100644 index 00000000..78b8e5d7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-426827.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 426827; +var summary = 'Do not assert: !(js_CodeSpec[op2].format & JOF_DEL)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + eval('eval()=delete a;'); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-428366.js b/source/spidermonkey-tests/js1_5/Regress/regress-428366.js new file mode 100644 index 00000000..13a6699f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-428366.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 428366; +var summary = 'Do not assert deleting eval 16 times'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +this.__proto__.x = eval; +for (i = 0; i < 16; ++i) delete eval; +(function w() { x = 1; })(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-438415-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-438415-01.js new file mode 100644 index 00000000..5aa6b6bf --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-438415-01.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 438415; +var summary = 'Do not assert: *vp != JSVAL_HOLE'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + [1,,].pop(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-438415-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-438415-02.js new file mode 100644 index 00000000..24febbc7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-438415-02.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 438415; +var summary = 'Do not assert: *vp != JSVAL_HOLE'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'zero'; + Array.prototype[0] = 'zero'; + var a = []; + a.length = 1; + actual = a.pop(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-440926.js b/source/spidermonkey-tests/js1_5/Regress/regress-440926.js new file mode 100644 index 00000000..ebd90e7b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-440926.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 440926; +var summary = 'Correctly match regexps with special "i" characters'; +var actual = ''; +var expect = 'iI#,iI#;iI#,iI#'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + actual += 'iI\u0130'.replace(/[\u0130]/gi, '#'); + actual += ',' + 'iI\u0130'.replace(/\u0130/gi, '#'); + + jit(true); + actual += ';' + 'iI\u0130'.replace(/[\u0130]/gi, '#'); + actual += ',' + 'iI\u0130'.replace(/\u0130/gi, '#'); + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-449627.js b/source/spidermonkey-tests/js1_5/Regress/regress-449627.js new file mode 100644 index 00000000..a21b4665 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-449627.js @@ -0,0 +1,116 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 449627; +var summary = 'Crash with JIT in js_FillPropertyCache'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +jit(true); + +/************************ BROWSER DETECT (http://www.quirksmode.org/js/detect.html) ************************/ + +if (typeof navigator == 'undefined') +{ + navigator = { + userAgent: "Firefox", + vendor: "Mozilla", + platform: "Mac" + }; +} + +global = this; + +var BrowserDetect = { + init: function _init() + { + this.browser=this.searchString(this.dataBrowser) || "An unknown browser"; + + this.OS= this.searchString(this.dataOS)||"an unknown OS"; + }, + searchString: function _searchString(a) + { + for(var i=0; i < a.length; i++) + { + var b=a[i].string; + var c=a[i].prop; + this.versionSearchString=a[i].versionSearch||a[i].identity; + if(b) + { + if(b.indexOf(a[i].subString)!=-1) + return a[i].identity; + } + else if(c) + return a[i].identity; + } + }, + + searchVersion:function _searchVersion(a) + { + var b=a.indexOf(this.versionSearchString); + if(b==-1) + return; + return parseFloat(a.substring(b+this.versionSearchString.length+1)); + }, + + dataBrowser:[ + { + string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb" + }, + { + string:navigator.vendor,subString:"Apple",identity:"Safari" + }, + { + prop:global.opera,identity:"Opera" + }, + { + string:navigator.vendor,subString:"iCab",identity:"iCab" + }, + { + string:navigator.vendor,subString:"KDE",identity:"Konqueror" + }, + { + string:navigator.userAgent,subString:"Firefox",identity:"Firefox" + }, + { + string:navigator.vendor,subString:"Camino",identity:"Camino" + }, + { + string:navigator.userAgent,subString:"Netscape",identity:"Netscape" + }, + { + string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE" + }, + { + string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv" + }, + { + string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla" + } + ], + dataOS:[ + { + string:navigator.platform,subString:"Win",identity:"Windows" + }, + { + string:navigator.platform,subString:"Mac",identity:"Mac" + }, + { + string:navigator.platform,subString:"Linux",identity:"Linux" + } + ] + }; + +BrowserDetect.init(); + +jit(false); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-449666.js b/source/spidermonkey-tests/js1_5/Regress/regress-449666.js new file mode 100644 index 00000000..8db75cbb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-449666.js @@ -0,0 +1,67 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Robert Sayre + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 449666; +var summary = 'Do not assert: JSSTRING_IS_FLAT(str_)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var global; + + jit(true); + + if (typeof window == 'undefined') { + global = this; + } + else { + global = window; + } + + if (!global['g']) { + global['g'] = {}; + } + + if (!global['g']['l']) { + global['g']['l'] = {}; + (function() { + function k(a,b){ + var c=a.split(/\./); + var d=global; + for(var e=0;e= 0 ? new Date(value) : value; + }); + + This is a reference implementation. You are free to copy, modify, or + redistribute. + + Use your own copy. It is extremely unwise to load third party + code into your pages. +*/ + +/*jslint evil: true */ +/*extern JSON */ + +if (!this.emulatedJSON) { + + emulatedJSON = function () { + + function f(n) { // Format integers to have at least two digits. + return n < 10 ? '0' + n : n; + } + + Date.prototype.toJSON = function () { + +// Eventually, this method will be based on the date.toISOString method. + + return this.getUTCFullYear() + '-' + + f(this.getUTCMonth() + 1) + '-' + + f(this.getUTCDate()) + 'T' + + f(this.getUTCHours()) + ':' + + f(this.getUTCMinutes()) + ':' + + f(this.getUTCSeconds()) + 'Z'; + }; + + + var m = { // table of character substitutions + '\b': '\\b', + '\t': '\\t', + '\n': '\\n', + '\f': '\\f', + '\r': '\\r', + '"' : '\\"', + '\\': '\\\\' + }; + + function stringify(value, whitelist) { + var a, // The array holding the partial texts. + i, // The loop counter. + k, // The member key. + l, // Length. + r = /["\\\x00-\x1f\x7f-\x9f]/g, + v; // The member value. + + switch (typeof value) { + case 'string': + +// If the string contains no control characters, no quote characters, and no +// backslash characters, then we can safely slap some quotes around it. +// Otherwise we must also replace the offending characters with safe sequences. + + return r.test(value) ? + '"' + value.replace(r, function (a) { + var c = m[a]; + if (c) { + return c; + } + c = a.charCodeAt(); + return '\\u00' + Math.floor(c / 16).toString(16) + + (c % 16).toString(16); + }) + '"' : + '"' + value + '"'; + + case 'number': + +// JSON numbers must be finite. Encode non-finite numbers as null. + + return isFinite(value) ? String(value) : 'null'; + + case 'boolean': + case 'null': + return String(value); + + case 'object': + +// Due to a specification blunder in ECMAScript, +// typeof null is 'object', so watch out for that case. + + if (!value) { + return 'null'; + } + +// If the object has a toJSON method, call it, and stringify the result. + + if (typeof value.toJSON === 'function') { + return stringify(value.toJSON()); + } + a = []; + if (typeof value.length === 'number' && + !(value.propertyIsEnumerable('length'))) { + +// The object is an array. Stringify every element. Use null as a placeholder +// for non-JSON values. + + l = value.length; + for (i = 0; i < l; i += 1) { + a.push(stringify(value[i], whitelist) || 'null'); + } + +// Join all of the elements together and wrap them in brackets. + + return '[' + a.join(',') + ']'; + } + if (whitelist) { + +// If a whitelist (array of keys) is provided, use it to select the components +// of the object. + + l = whitelist.length; + for (i = 0; i < l; i += 1) { + k = whitelist[i]; + if (typeof k === 'string') { + v = stringify(value[k], whitelist); + if (v) { + a.push(stringify(k) + ':' + v); + } + } + } + } else { + +// Otherwise, iterate through all of the keys in the object. + + for (k in value) { + if (typeof k === 'string') { + v = stringify(value[k], whitelist); + if (v) { + a.push(stringify(k) + ':' + v); + } + } + } + } + +// Join all of the member texts together and wrap them in braces. + + return '{' + a.join(',') + '}'; + } + return undefined; + } + + return { + stringify: stringify, + parse: function (text, filter) { + var j; + + function walk(k, v) { + var i, n; + if (v && typeof v === 'object') { + for (i in v) { + if (Object.prototype.hasOwnProperty.apply(v, [i])) { + n = walk(i, v[i]); + if (n !== undefined) { + v[i] = n; + } + } + } + } + return filter(k, v); + } + + +// Parsing happens in three stages. In the first stage, we run the text against +// regular expressions that look for non-JSON patterns. We are especially +// concerned with '()' and 'new' because they can cause invocation, and '=' +// because it can cause mutation. But just to be safe, we want to reject all +// unexpected forms. + +// We split the first stage into 4 regexp operations in order to work around +// crippling inefficiencies in IE's and Safari's regexp engines. First we +// replace all backslash pairs with '@' (a non-JSON character). Second, we +// replace all simple value tokens with ']' characters. Third, we delete all +// open brackets that follow a colon or comma or that begin the text. Finally, +// we look to see that the remaining characters are only whitespace or ']' or +// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. + + if (/^[\],:{}\s]*$/.test(text.replace(/\\./g, '@'). +replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(:?[eE][+\-]?\d+)?/g, ']'). +replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { + +// In the second stage we use the eval function to compile the text into a +// JavaScript structure. The '{' operator is subject to a syntactic ambiguity +// in JavaScript: it can begin a block or an object literal. We wrap the text +// in parens to eliminate the ambiguity. + + j = eval('(' + text + ')'); + +// In the optional third stage, we recursively walk the new structure, passing +// each name/value pair to a filter function for possible transformation. + + return typeof filter === 'function' ? walk('', j) : j; + } + +// If the text is not JSON parseable, then a SyntaxError is thrown. + + throw new SyntaxError('parseJSON'); + } + }; + }(); +} + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +jit(false); + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + + var testPairs = [ + ["{}", {}], + ["[]", []], + ['{"foo":"bar"}', {"foo":"bar"}], + ['{"null":null}', {"null":null}], + ['{"five":5}', {"five":5}], + ] + + var a = []; + for (var i=0; i < testPairs.length; i++) { + var pair = testPairs[i]; + var s = emulatedJSON.stringify(pair[1]) + a[i] = s; + } + print(a.join("\n")); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-450833.js b/source/spidermonkey-tests/js1_5/Regress/regress-450833.js new file mode 100644 index 00000000..c47f3be5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-450833.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 450833; +var summary = 'TM: Multiple trees per entry point'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 100; + + jit(true); + + function f(i) { + for (var m = 0; m < 20; ++m) + for (var n = 0; n < 100; n += i) + ; + return n; + } + + print(actual = f(1)); + + jit(false); + + reportCompare(expect, actual, summary); + + jit(true); + + print(actual = f(.5)); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-451322.js b/source/spidermonkey-tests/js1_5/Regress/regress-451322.js new file mode 100755 index 00000000..177f3336 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-451322.js @@ -0,0 +1,39 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451322; +var summary = 'Do not crash with OOM in LirBufWriter'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + function f() { + for (var i = 0; i < 200000; i++) { + var m = new Function("var k = 0; for (var j = 0; j < 5; j++) { k += j * 2 + 8 / (j+3) * k} return k;"); + m(); + } + } + f(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-451884.js b/source/spidermonkey-tests/js1_5/Regress/regress-451884.js new file mode 100644 index 00000000..dbff37c6 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-451884.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451884; +var summary = 'Do not crash [@ QuoteString]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function(k){eval("k.y")})(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-451946.js b/source/spidermonkey-tests/js1_5/Regress/regress-451946.js new file mode 100644 index 00000000..4bddf58a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-451946.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 451946; +var summary = 'Do not crash with SELinux execheap protection'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test is only valid with SELinux targetted policy with exeheap protection'); + + jit(true); + + var i; for (i = 0; i < 2000000; i++) {;} + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452008.js b/source/spidermonkey-tests/js1_5/Regress/regress-452008.js new file mode 100644 index 00000000..4d3eef13 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452008.js @@ -0,0 +1,153 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452008; +var summary = 'Bad math with JIT'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + +// regression test for Bug 452008 - TM: SRP in Clipperz crypto library fails when JIT (TraceMonkey) is enabled. + + var x = [9385, 32112, 25383, 16317, 30138, 14565, 17812, 24500, 2719, 30174, 3546, 9096, 15352, 19120, 20648, 14334, 7426, 0, 0, 0]; + var n = [27875, 25925, 30422, 12227, 27798, 32170, 10873, 21748, 30629, 26296, 20697, 5125, 4815, 2221, 14392, 23369, 5560, 2, 0, 0]; + var np = 18229; + var expected = [18770, 31456, 17999, 32635, 27508, 29131, 2856, 16233, 5439, 27580, 7093, 18192, 30804, 5472, 8529, 28649, 14852, 0, 0, 0]; + +//globals + bpe=0; //bits stored per array element + mask=0; //AND this with an array element to chop it down to bpe bits + +//initialize the global variables + for (bpe=0; (1<<(bpe+1)) > (1<>=1; //bpe=number of bits in one element of the array representing the bigInt + mask=(1<>=bpe; + } + } + +//is x > y? (x and y both nonnegative) + function greater(x,y) { + var i; + var k=(x.length=0;i--) + if (x[i]>y[i]) + return 1; + else if (x[i]0 && n[kn-1]==0;kn--); //ignore leading zeros of n + for (;ky>0 && y[ky-1]==0;ky--); //ignore leading zeros of y + + copyInt_(sa,0); + + //the following loop consumes 95% of the runtime for randTruePrime_() and powMod_() for large keys + for (i=0; i> bpe; + t=x[i]; + + //do sa=(sa+x[i]*y+ui*n)/b where b=2**bpe + for (j=1;j>=bpe; + } + for (;j>=bpe; + } + sa[j-1]=c & mask; + } + + if (!greater(n,sa)) + sub_(sa,n); + copy_(x,sa); + } + + mont_(x, x, n, np); + + var passed = expected.length == x.length; + for (var i = 0; i < expected.length; i++) { + if (passed) + passed = expected[i] == x[i]; + } + print(passed); + + jit(false); + + expect = true; + actual = passed; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452170.js b/source/spidermonkey-tests/js1_5/Regress/regress-452170.js new file mode 100644 index 00000000..2708fd2d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452170.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452170; +var summary = 'Do not assert with JIT: (*m != JSVAL_INT) || isInt32(*vp)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 4; ++j) { (-0).toString(); } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452189.js b/source/spidermonkey-tests/js1_5/Regress/regress-452189.js new file mode 100644 index 00000000..811fe5fb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452189.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Geoff Garen + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452189; +var summary = "Don't shadow a readonly or setter proto-property"; +var expect = "PASS"; +var actual = "FAIL"; + +function c() { + this.x = 3; +} + + +new c; +Object.prototype.__defineSetter__('x', function(){ actual = expect; }) +new c; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452333.js b/source/spidermonkey-tests/js1_5/Regress/regress-452333.js new file mode 100644 index 00000000..cc8bb2d0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452333.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452333; +var summary = 'Do not crash with JIT: @ js_SkipWhiteSpace'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { for (var j = 0; j < 5; ++j) { (typeof 3/0); } })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452336.js b/source/spidermonkey-tests/js1_5/Regress/regress-452336.js new file mode 100644 index 00000000..53cce4a2 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452336.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452336; +var summary = 'Do not assert with JIT: (slot) < (uint32_t)(obj)->dslots[-1]'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 4; ++j) { [1].x++; } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452346.js b/source/spidermonkey-tests/js1_5/Regress/regress-452346.js new file mode 100644 index 00000000..e3aeefe8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452346.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452346; +var summary = 'Do not crash: @ Balloc'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j=0;j<2;++j) (0.1).toPrecision(30); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452495.js b/source/spidermonkey-tests/js1_5/Regress/regress-452495.js new file mode 100644 index 00000000..f2291c97 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452495.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452495; +var summary = 'Do not crash with JIT: @ TraceRecorder::getThis'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +jit(true); + +for (var j = 0; j < 4; ++j) { try { new 1(this); } catch(e) { } } + +jit(false); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452573-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-452573-01.js new file mode 100644 index 00000000..789d566f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452573-01.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452573; +var summary = 'Do not assert with JIT: boxed.isUndefined() || boxed.isBoolean()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for(var j=0;j<5;++j) typeof void /x/; + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452573-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-452573-02.js new file mode 100644 index 00000000..60933410 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452573-02.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452573; +var summary = 'Do not assert with JIT: "(((rmask(rr) & FpRegs) != 0))"'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for(var j=0;j<5;++j) typeof void 1; + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452713.js b/source/spidermonkey-tests/js1_5/Regress/regress-452713.js new file mode 100644 index 00000000..826da011 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452713.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452713; +var summary = 'Do not assert with JIT: "Should not move data from GPR to XMM": false'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 5; ++j) { if (''[-1]) { } } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452724-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-452724-01.js new file mode 100644 index 00000000..e1913bde --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452724-01.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452724; +var summary = 'Do not assert with JIT: (rmask(rr) & FpRegs) != 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { for (var j=0;j<5;++j) { (0/0) in this; } })() + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452724-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-452724-02.js new file mode 100644 index 00000000..08d1c03a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452724-02.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452724; +var summary = 'Do not crash with JIT: @TraceRecorder::getThis'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j=0;j<5;++j) { (0/0) in this; } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452742-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-452742-01.js new file mode 100644 index 00000000..69fdd2ba --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452742-01.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452742; +var summary = 'Do not do overzealous eval inside function optimization in BindNameToSlot'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Error'; + + var obj = { x: -100 }; + + function a(x) + { + var orig_x = x; + var orig_obj_x = obj.x; + + with (obj) { eval("x = x + 10"); } + + if (x !== orig_x) + throw "Unexpected mutation of x: " + x; + if (obj.x !== orig_obj_x + 10) + throw "Unexpected mutation of obj.x: " + obj.x; + } + + try + { + a(0); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452742-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-452742-02.js new file mode 100644 index 00000000..7a5e9a5b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452742-02.js @@ -0,0 +1,56 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452742; +var summary = 'Do not do overzealous eval inside function optimization in BindNameToSlot'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = ''; + + var obj = { arguments: [-100] }; + + function a() + { + with (obj) { return eval("arguments[0]"); } + } + + function b() + { + var result; + eval('with (obj) { result = eval("arguments[0]"); };'); + return result; + } + + try + { + var result = a(); + if (result !== -100) + throw "Bad result " + result; + + var result = b(); + if (result !== -100) + throw "Bad result " + result; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452853.js b/source/spidermonkey-tests/js1_5/Regress/regress-452853.js new file mode 100644 index 00000000..897506f7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452853.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452853; +var summary = 'Do not crash in simple loop with array'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j=0; j<4; ++j) { var a = ["", ""]; a[0] * a[1]; } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452884-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-452884-01.js new file mode 100644 index 00000000..78ae3fdc --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452884-01.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452884; +var summary = 'Do not crash in switch'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j=0;j<5;++j) { switch(1.1) { case NaN: case 2: } } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-452884-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-452884-02.js new file mode 100644 index 00000000..51f6205c --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-452884-02.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 452884; +var summary = 'Do not crash in switch'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j=0;j<5;++j) { switch(1.1) { case 2: case NaN: } } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-453024.js b/source/spidermonkey-tests/js1_5/Regress/regress-453024.js new file mode 100644 index 00000000..f89a4793 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-453024.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453024; +var summary = 'Do not assert: vp + 2 + argc <= (jsval *) cx->stackPool.current->avail'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +if (typeof window == 'undefined') +{ + reportCompare(true, true, summary + ': test requires browser.'); +} +else +{ + gDelayTestDriverEnd = true; + var j = 0; + + function test() + { + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var i = 0; i < 2000; ++i) { + var ns = document.createElementNS("http://www.w3.org/1999/xhtml", "script"); + var nt = document.createTextNode("++j"); + ns.appendChild(nt); + document.body.appendChild(ns); + } + + gDelayTestDriverEnd = false; + + reportCompare(expect, actual, summary); + + jsTestDriverEnd(); + + exitFunc ('test'); + } + + window.addEventListener('load', test, false); + +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-453173.js b/source/spidermonkey-tests/js1_5/Regress/regress-453173.js new file mode 100644 index 00000000..1b1ae730 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-453173.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453173; +var summary = 'Do not Crash with JIT [@ TraceRecorder::record_JSOP_ENDINIT] with "[,]"'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var i; + + jit(true); + + for(i=0;i<4;++i) [,]; + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-453397.js b/source/spidermonkey-tests/js1_5/Regress/regress-453397.js new file mode 100644 index 00000000..2da11161 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-453397.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453397; +var summary = 'Do not assert with JIT: script->main <= target && target < script->code + script->length'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + function computeEscapeSpeed(real) { + for (var j = 1; j < 4; ++j) { + if (real > 2) { + } + } + } + + const numRows = 4; + const numCols = 4; + var realStep = 1.5; + for (var i = 0, curReal = -2.1; + i < numCols; + ++i, curReal += realStep) { + for (var j = 0; j < numRows; ++j) { + computeEscapeSpeed(curReal); + } + } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-453701.js b/source/spidermonkey-tests/js1_5/Regress/regress-453701.js new file mode 100644 index 00000000..91645b2f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-453701.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453701; +var summary = 'Do not assert with JIT: (rmask(rr) & FpRegs) != 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { for (var j = 0; j < 5; ++j) { (1).hasOwnProperty(""); } })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-453747.js b/source/spidermonkey-tests/js1_5/Regress/regress-453747.js new file mode 100644 index 00000000..00877b23 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-453747.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 453747; +var summary = 'Do not assert with JIT: boxed.isUndefined() || boxed.isBoolean()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function(){ + var a = []; + var s = 10; + for (var i = 0; i < s; ++i) + a[i] = 1; + a[4*s-1] = 2; + for (var i = s+1; i < s+4; ++i) + typeof a[i]; + })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-454682.js b/source/spidermonkey-tests/js1_5/Regress/regress-454682.js new file mode 100644 index 00000000..ae136b08 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-454682.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 454682; +var summary = 'Do not crash with JIT in MatchRegExp'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + var a = new String("foo"); + for (i = 0; i < 300; i++) { + a.match(/bar/); + } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-454981.js b/source/spidermonkey-tests/js1_5/Regress/regress-454981.js new file mode 100644 index 00000000..58728611 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-454981.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 454981; +var summary = 'Do not assert with JIT: size_t(p - cx->fp->slots) < cx->fp->script->nslots'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + function f1() { + function f0() { return arguments[0]; } + for (var i = 0; i < 4; i++) f0('a'); + } + f1(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-455605.js b/source/spidermonkey-tests/js1_5/Regress/regress-455605.js new file mode 100644 index 00000000..2d5a07ca --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-455605.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455605; +var summary = 'Do not assert with JIT: "need a way to EOT now, since this is trace end": 0'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 4; ++j) { switch(0/0) { } } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-455748.js b/source/spidermonkey-tests/js1_5/Regress/regress-455748.js new file mode 100644 index 00000000..a7dc0212 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-455748.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455748; +var summary = 'Do not assert with JIT: Should not move data from GPR to XMM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 5; ++j) { if([1][-0]) { } } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-455758-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-455758-01.js new file mode 100644 index 00000000..2c3a904d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-455758-01.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455758; +var summary = 'Do not assert: (m != JSVAL_INT) || isInt32(*vp)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { for (var j = 0; j < 5; ++j) { var t = 3 % (-0); } })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-455758-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-455758-02.js new file mode 100644 index 00000000..a906447f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-455758-02.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455758; +var summary = 'Do not crash: divide by zero'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { for (var j = 0; j < 5; ++j) { 3 % (-0); } })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-455775.js b/source/spidermonkey-tests/js1_5/Regress/regress-455775.js new file mode 100644 index 00000000..03e9f5d4 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-455775.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 455775; +var summary = 'Do not assert: cx->fp->flags & JSFRAME_EVAL'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function() { var c; eval("new (c ? 1 : {});"); })(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-456470.js b/source/spidermonkey-tests/js1_5/Regress/regress-456470.js new file mode 100644 index 00000000..d91c1225 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-456470.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456470; +var summary = 'TM: Make sure JSOP_DEFLOCALFUN pushes the right function object.'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + function x() { + function a() { + return true; + } + return a(); + } + + for (var i = 0; i < 10; ++i) + x(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-456477-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-456477-01.js new file mode 100644 index 00000000..c96e1b06 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-456477-01.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456477; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with (0/0)%(-1)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 5; ++j) { var t = (0 / 0) % (-1); } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-456477-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-456477-02.js new file mode 100644 index 00000000..74a7f04f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-456477-02.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456477; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with (0/0)%(-1)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { for (var j = 0; j < 5; ++j) { (0 / 0) % (-1); } })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-456494.js b/source/spidermonkey-tests/js1_5/Regress/regress-456494.js new file mode 100644 index 00000000..9182a8d0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-456494.js @@ -0,0 +1,50 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456494; +var summary = 'Do not crash with apply and argc > nargs'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + function k(s) + { + } + function f() + { + for (i = 0; i < 10; i++) + { + k.apply(this, arguments); + } + } + f(1); + + jit(false); + + if (typeof this.tracemonkey != 'undefined') + { + for (var p in this.tracemonkey) + { + print(p + ':' + this.tracemonkey[p]); + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-456540-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-456540-01.js new file mode 100644 index 00000000..b2b86606 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-456540-01.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456540; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with ((-1) % ""'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 5; ++j) { var t = ((-1) % "" ); } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-456540-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-456540-02.js new file mode 100644 index 00000000..b35c649e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-456540-02.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 456540; +var summary = 'Do not assert with JIT: (m != JSVAL_INT) || isInt32(*vp)" with ((-1) % ""'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { for (var j = 0; j < 5; ++j) { ((-1) % "" ); } })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-457065-03.js b/source/spidermonkey-tests/js1_5/Regress/regress-457065-03.js new file mode 100644 index 00000000..64274f82 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-457065-03.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 457065; +var summary = 'Do not assert: !fp->callee || fp->thisp == fp->argv[-1].toObjectOrNull()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + (function() { + new function (){ for (var x = 0; x < 3; ++x){} }; + })(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-457456.js b/source/spidermonkey-tests/js1_5/Regress/regress-457456.js new file mode 100644 index 00000000..ffb0555d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-457456.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 457456; +var summary = 'Do not assert with JIT: cond->isCond()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 4; ++j) { if (undefined < false) { } } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-457778.js b/source/spidermonkey-tests/js1_5/Regress/regress-457778.js new file mode 100644 index 00000000..799494da --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-457778.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 457778; +var summary = 'Do not assert with JIT: cond->isCond()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + for (var j = 0; j < 4; ++j) { if (undefined < false) { } } + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-458851.js b/source/spidermonkey-tests/js1_5/Regress/regress-458851.js new file mode 100644 index 00000000..b666e192 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-458851.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 458851; +var summary = 'TM: for-in loops should not skip every other value sometimes'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +jit(true); + +function f() { + var a = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; + var x = 0; + for (var i in a) { + i = parseInt(i); + x++; + } + print(actual = x); +} + +expect = 16; +f(); + +jit(false); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-459085.js b/source/spidermonkey-tests/js1_5/Regress/regress-459085.js new file mode 100644 index 00000000..ef2173ff --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-459085.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Jason Orendorff + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459085; +var summary = 'Do not assert with JIT: Should not move data from GPR to XMM'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + var m = new Number(3); + function foo() { for (var i=0; i<20;i++) m.toString(); } + foo(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-459628.js b/source/spidermonkey-tests/js1_5/Regress/regress-459628.js new file mode 100644 index 00000000..9810fe5d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-459628.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459628; +var summary = 'Do not assert: STOBJ_GET_SLOT(obj, map->freeslot).isUndefined()'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + +(function() { + for (var odjoff = 0; odjoff < 4; ++odjoff) { + new Date()[0] = 3; + } +})(); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-459990.js b/source/spidermonkey-tests/js1_5/Regress/regress-459990.js new file mode 100644 index 00000000..e06b8807 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-459990.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 459990; +var summary = 'Do not crash with if (true && a && b) { }'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + if (true && a && b) { } + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-460024.js b/source/spidermonkey-tests/js1_5/Regress/regress-460024.js new file mode 100644 index 00000000..589fdafa --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-460024.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 460024; +var summary = 'Regression from bug 451154'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'PASS'; + actual = 'FAIL'; + + jit(true); + + var js = 'Function.prototype.inherits = function(a) {' + + ' actual = "PASS";' + + '};' + + 'function f() { }' + + 'f.inherits();'; + function doeval(callback) { callback(js) }; + doeval(eval); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-460117.js b/source/spidermonkey-tests/js1_5/Regress/regress-460117.js new file mode 100644 index 00000000..21ae0c61 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-460117.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 460117; +var summary = 'TM: hasOwnProperty with JIT'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function t(o, proplist) { + var props=proplist.split(/\s+/g); + for (var i=0, len=props.length; i 0;}; + +ygNode.prototype.getHtml = function () { + var sb = []; + sb[sb.length] = "

"; + sb[sb.length] = this.getNodeHtml(); + sb[sb.length] = this.getChildrenHtml(); +}; + +ygNode.prototype.getChildrenHtml = function () { + var sb = []; + if (this.hasChildren(true) && this.expanded) { + sb[sb.length] = this.renderChildren(); + } +}; + +ygNode.prototype.renderChildren = function () {return this.completeRender();}; + +ygNode.prototype.completeRender = function () { + var sb = []; + for (var i = 0; i < this.children.length; ++i) { + sb[sb.length] = this.children[i].getHtml(); + } +}; + +ygRootNode.prototype = new ygNode; + +function ygRootNode(_48) { + this.init(null, null, true); +} + +ygTextNode.prototype = new ygNode; + +function ygTextNode(_49, _50, _51) { + this.init(_49, _50, _51); + this.setUpLabel(_49); +} + +ygTextNode.prototype.setUpLabel = function (_52) { + if (typeof _52 == "string") {} + if (_52.target) {} + this.labelElId = "ygtvlabelel" + this.index; +}; + +ygTextNode.prototype.getNodeHtml = function () { + var sb = new Array; + sb[sb.length] = ""; + sb[sb.length] = ""; + for (i = 0; i < this.depth; ++i) {} + sb[sb.length] = " id=\"" + this.getToggleElId() + "\""; + sb[sb.length] = " class=\"" + this.getStyle() + "\""; + if (this.hasChildren(true)) {} + sb[sb.length] = " id=\"" + this.labelElId + "\""; +}; + +function buildUserTree() { + userTree = new ygTreeView("userTree"); + addMenuNode(userTree, "N", "navheader"); + addMenuNode(userTree, "R", "navheader"); + addMenuNode(userTree, "S", "navheader"); +} + +function addMenuNode(tree, label, styleClass) { + new ygTextNode({}, tree.root, false); +} + +buildUserTree(); +userTree.root.getHtml(); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465013.js b/source/spidermonkey-tests/js1_5/Regress/regress-465013.js new file mode 100644 index 00000000..e2de1f73 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465013.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465013; +var summary = ''; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'bgcolor="dummy" quality="dummy" allowScriptAccess="dummy" '; + + jit(true); + + print((function(x) { + var ja = ""; + var ka = {bgcolor:"#FFFFFF", quality:"high", allowScriptAccess:"always"}; + for (var la in ka) { + ja +=[la] + "=\"" + x/*ka[la]*/ + "\" "; + } + return actual = ja; + })("dummy")); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465132.js b/source/spidermonkey-tests/js1_5/Regress/regress-465132.js new file mode 100644 index 00000000..56c60e4e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465132.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465132; +var summary = 'TM: Mathematical constants should be constant'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + var constants = ['E', 'LN10', 'LN2', 'LOG2E', 'LOG10E', 'PI', 'SQRT1_2', 'SQRT2']; + + for (var j = 0; j < constants.length; j++) + { + expect = Math[constants[j]]; + + for(i=0;i<9;++i) + ++Math[constants[j]]; + + for(i=0;i<9;++i) + eval('++Math.' + constants[j]); + + actual = Math[constants[j]]; + + reportCompare(expect, actual, summary + ' Math.' + constants[j]); + } + + jit(false); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465133.js b/source/spidermonkey-tests/js1_5/Regress/regress-465133.js new file mode 100644 index 00000000..ef59b9a4 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465133.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465133; +var summary = '{} < {}'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'false,false,false,false,false,'; + actual = ''; + + jit(true); + + for (var i=0;i<5;++i) actual += ({} < {}) + ','; + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465135.js b/source/spidermonkey-tests/js1_5/Regress/regress-465135.js new file mode 100644 index 00000000..95776fd9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465135.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465135; +var summary = 'true << true'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '2,2,2,2,2,'; + actual = ''; + + jit(true); + + for (var i=0;i<5;++i) actual += (true << true) + ','; + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465136.js b/source/spidermonkey-tests/js1_5/Regress/regress-465136.js new file mode 100644 index 00000000..0a425593 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465136.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465136; +var summary = 'false == ""'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'true,true,true,true,true,'; + actual = ''; + + jit(true); + + for (var i=0;i<5;++i) actual += (false == '') + ','; + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465137.js b/source/spidermonkey-tests/js1_5/Regress/regress-465137.js new file mode 100644 index 00000000..862c72c5 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465137.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465137; +var summary = '!NaN is not false'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'falsy,falsy,falsy,falsy,falsy,'; + actual = ''; + + jit(true); + + for (var i=0;i<5;++i) actual += (!(NaN) ? "falsy" : "truthy") + ','; + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465262.js b/source/spidermonkey-tests/js1_5/Regress/regress-465262.js new file mode 100644 index 00000000..a6670543 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465262.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465262; +var summary = 'truthiness of (3 > null)'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + expect = 'true,true,true,true,true,'; + + for(j=0;j<5;++j) print(actual += "" + (3 > null) + ',') + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465272.js b/source/spidermonkey-tests/js1_5/Regress/regress-465272.js new file mode 100644 index 00000000..c3ecc4a9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465272.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465272; +var summary = 'subtraction'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + expect = '3,3,3,3,3,'; + + for (j=0;j<5;++j) print(actual += "" + ((5) - 2) + ','); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465347.js b/source/spidermonkey-tests/js1_5/Regress/regress-465347.js new file mode 100644 index 00000000..6a4d6081 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465347.js @@ -0,0 +1,52 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465347; +var summary = 'Test integer to id in js_Int32ToId'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var o; + + o = new Array(); + + expect = undefined; + o[0xffffffff] = 'end'; + actual = o[-1]; + reportCompare(expect, actual, summary + ': 1'); + + expect = 42; + o['42'] = 42; + actual = o[42]; + reportCompare(expect, actual, summary + ': 2'); + + // + + o = new Object(); + + expect = undefined; + o[0xffffffff] = 'end'; + actual = o[-1]; + reportCompare(expect, actual, summary + ': 3'); + + expect = 42; + o['42'] = 42; + actual = o[42]; + reportCompare(expect, actual, summary + ': 4'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-465366.js b/source/spidermonkey-tests/js1_5/Regress/regress-465366.js new file mode 100644 index 00000000..2521fb9e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-465366.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 465366; +var summary = 'TM: JIT: error with multiplicative loop'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + function f() + { + var k = 1; + for (var n = 0; n < 2; n++) { + k = (k * 10); + } + return k; + } + f(); + print(f()); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-466262.js b/source/spidermonkey-tests/js1_5/Regress/regress-466262.js new file mode 100644 index 00000000..33b58225 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-466262.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 466262; +var summary = 'Do not assert: f == f->root'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + var e = 1; + for (var d = 0; d < 3; ++d) { + if (d == 2) { + e = ""; + } + } + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-466747.js b/source/spidermonkey-tests/js1_5/Regress/regress-466747.js new file mode 100644 index 00000000..c37c8630 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-466747.js @@ -0,0 +1,61 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 466747; +var summary = 'TM: Do not assert: fp->slots + fp->script->nfixed + ' + + 'js_ReconstructStackDepth(cx, fp->script, fp->regs->pc) == fp->regs->sp'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof window == 'undefined') + { + expect = actual = 'Test skipped: browser only'; + reportCompare(expect, actual, summary); + } + else + { + gDelayTestDriverEnd = true; + + jit(true); + + function newScriptWithLoop(m) + { + var ns = document.createElement("script"); + var nt = document.createTextNode("for (var q = 0; q < " + m + "; ++q) { }"); + ns.appendChild(nt); + return ns; + } + + function boom() + { + var div = document.createElement("div"); + div.appendChild(newScriptWithLoop(7)); + div.appendChild(newScriptWithLoop(1)); + document.body.appendChild(div); + + jit(false); + + reportCompare(expect, actual, summary); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + } + + window.addEventListener('load', boom, false); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-469044.js b/source/spidermonkey-tests/js1_5/Regress/regress-469044.js new file mode 100644 index 00000000..f41a07ec --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-469044.js @@ -0,0 +1,71 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 469044; +var summary = 'type unstable globals'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '---000---000'; + actual = ''; + + for (var i = 0; i < 2; ++i) { + for (var e = 0; e < 2; ++e) { + } + var c = void 0; + print(actual += "---"); + for (var a = 0; a < 3; ++a) { + c <<= c; + print(actual += "" + c); + } + } + reportCompare(expect, actual, summary + ': 1'); + + expect = '00000000'; + actual = ''; + + print(""); + for (var i = 0; i < 2; ++i) { + for (var e = 0; e < 2; ++e) { + } + var c = void 0; + for (var a = 0; a < 3; ++a) { + c <<= c; + print(actual += "" + c); + } + print(actual += c); + } + reportCompare(expect, actual, summary + ': 2'); + + actual = ''; + print(""); + + for (var i = 0; i < 2; ++i) { + for (var e = 0; e < 2; ++e) { + } + var c = void 0; + for (var a = 0; a < 3; ++a) { + c <<= c; + Math; + print(actual += "" + c); + } + print(actual += c); + } + reportCompare(expect, actual, summary + ': 3'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-470061.js b/source/spidermonkey-tests/js1_5/Regress/regress-470061.js new file mode 100644 index 00000000..836822da --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-470061.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470061; +var summary = 'TM: Do not assert: cx->fp->regs->pc == f->ip && f->root == f'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + function x (w, z) { + var h = 0; + var q = 0; + while (q < 300) { + while (w) { + } + ++q; + if (q % 4 == 1) { + h = Math.ceil(z); + } + } + } + + x(false, 40); + + jit(false); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-470187-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-470187-01.js new file mode 100644 index 00000000..4abaff88 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-470187-01.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470187; +var summary = 'Do not assert: entry->kpc == (jsbytecode*) atoms[index]'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j=0;j<3;++j) ({valueOf: function(){return 2}}) - /x/; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-470187-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-470187-02.js new file mode 100644 index 00000000..c474c769 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-470187-02.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470187; +var summary = 'Do not assert: ATOM_IS_STRING(atom)'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j=0;j<3;++j) ({valueOf: function(){return 2}}) - []; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-470758-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-470758-01.js new file mode 100644 index 00000000..06e06ce2 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-470758-01.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470758; +var summary = 'Do not crash with eval upvars'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + (function() { var k; eval("for (var k in {});") })() + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-470758-02.js b/source/spidermonkey-tests/js1_5/Regress/regress-470758-02.js new file mode 100644 index 00000000..86eb4b44 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-470758-02.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* + * Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/licenses/publicdomain/ + * Contributor: Blake Kaplan + */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 470758; +var summary = 'Promote evald initializer into upvar'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 5; + + (function(){var x;eval("for (x = 0; x < 5; x++);");print(actual = x);})(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-472533.js b/source/spidermonkey-tests/js1_5/Regress/regress-472533.js new file mode 100644 index 00000000..a772f0c3 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-472533.js @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 472533; +var summary = 'Do not crash with loop, replace, regexp'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + for (var j = 0; j < 4; ++j) ''.replace('', /x/); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/Regress/regress-475645-01.js b/source/spidermonkey-tests/js1_5/Regress/regress-475645-01.js new file mode 100644 index 00000000..5d663aeb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/Regress/regress-475645-01.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 475645; +var summary = 'Do not crash @ nanojit::LIns::isop'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + jit(true); + + linkarr = new Array(); + picarr = new Array(); + textarr = new Array(); + var f=161; + var t=27; + var pics = ""; + var links = ""; + var texts = ""; + var s = f+t; + var d = "1"; + picarr[2] = "2"; + for(i=1;i' + + 'for (var i = 0; i != 1000; ++i)' + + ' this["a"+i] = 0;' + + 'eval("var x");' + + 'for (var i = 0; i != 1000; ++i)' + + ' delete this["a"+i];' + + '<\/script>' + ); + + document.write( + '\n' + + '\n' + + '\n'; + + try + { + //.exec(s); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary + ': //.exec(s)'); + + function testre( re, n ) { + for ( var i= 0; i <= n; ++i ) { + re.test( Array( i+1 ).join() ); + } + } + + try + { + testre( /(?:,*)*x/, 22 ); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary + ': testre( /(?:,*)*x/, 22 )'); + + try + { + testre( /(?:,|,)*x/, 22 ); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, summary + ': testre( /(?:,|,)*x/, 22 )'); + + try + { + testre( /(?:,|,|,|,|,)*x/, 10 ); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': testre( /(?:,|,|,|,|,)*x/, 10 )'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-333541.js b/source/spidermonkey-tests/js1_5/extensions/regress-333541.js new file mode 100644 index 00000000..cc868daf --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-333541.js @@ -0,0 +1,57 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 333541; +var summary = '1..toSource()'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +function a(){ + return 1..toSource(); +} + +try +{ + expect = 'function a() {\n return 1..toSource();\n}'; + actual = a.toString(); + compareSource(expect, actual, summary + ': 1'); +} +catch(ex) +{ + actual = ex + ''; + reportCompare(expect, actual, summary + ': 1'); +} + +try +{ + expect = 'function a() {return 1..toSource();}'; + actual = a.toSource(); + compareSource(expect, actual, summary + ': 2'); +} +catch(ex) +{ + actual = ex + ''; + reportCompare(expect, actual, summary + ': 2'); +} + +expect = a; +actual = a.valueOf(); +reportCompare(expect, actual, summary + ': 3'); + +try +{ + expect = 'function a() {\n return 1..toSource();\n}'; + actual = "" + a; + compareSource(expect, actual, summary + ': 4'); +} +catch(ex) +{ + actual = ex + ''; + reportCompare(expect, actual, summary + ': 4'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-336409-1.js b/source/spidermonkey-tests/js1_5/extensions/regress-336409-1.js new file mode 100644 index 00000000..32dbb363 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-336409-1.js @@ -0,0 +1,50 @@ +// |reftest| skip-if(!xulRuntime.shell||Android) slow -- no results reported. +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336409; +var summary = 'Integer overflow in js_obj_toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 64; + printStatus('Creating ' + n + 'MB string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating object'); + var o = {f1: r, f2: r, f3: r,f4: r,f5: r, f6: r, f7: r, f8: r,f9: r}; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + expect = 'InternalError: allocation size overflow'; + actual = ex + ''; + print(actual); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-336409-2.js b/source/spidermonkey-tests/js1_5/extensions/regress-336409-2.js new file mode 100644 index 00000000..b979eb20 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-336409-2.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(!xulRuntime.shell&&((Android||(isDebugBuild&&xulRuntime.OS=="Linux")||xulRuntime.XPCOMABI.match(/x86_64/)))) slow -- can fail silently due to out of memory, bug 615011 - timeouts on slow debug Linux +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336409; +var summary = 'Integer overflow in js_obj_toSource'; +var actual = 'No Crash'; +var expect = /(No Crash|InternalError: allocation size overflow|out of memory)/; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 128; + printStatus('Creating ' + n + 'MB string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating object'); + var o = {f1: r, f2: r, f3: r,f4: r,f5: r, f6: r, f7: r, f8: r,f9: r}; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + actual = ex + ''; + print(actual); +} + +reportMatch(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-336410-1.js b/source/spidermonkey-tests/js1_5/extensions/regress-336410-1.js new file mode 100644 index 00000000..5362d0d9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-336410-1.js @@ -0,0 +1,50 @@ +// |reftest| skip-if(!xulRuntime.shell||Android) slow -- can fail silently due to out of memory +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336410; +var summary = 'Integer overflow in array_toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 64; + printStatus('Creating ' + n + 'M length string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating array'); + var o=[r, r, r, r, r, r, r, r, r]; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + expect = '\(InternalError: allocation size overflow|out of memory\)'; + actual = ex + ''; + print(actual); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-336410-2.js b/source/spidermonkey-tests/js1_5/extensions/regress-336410-2.js new file mode 100644 index 00000000..4ce18b65 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-336410-2.js @@ -0,0 +1,49 @@ +// |reftest| skip-if(!xulRuntime.shell&&((isDebugBuild&&xulRuntime.OS=="Linux")||Android||xulRuntime.XPCOMABI.match(/x86_64/)||xulRuntime.OS=="WINNT")) slow -- can fail silently due to out of memory, bug 621348 - timeouts on slow debug Linux +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 336410; +var summary = 'Integer overflow in array_toSource'; +var actual = 'No Crash'; +var expect = /(No Crash|InternalError: allocation size overflow|out of memory)/; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expectExitCode(0); +expectExitCode(5); + +function createString(n) +{ + var l = n*1024*1024; + var r = 'r'; + + while (r.length < l) + { + r = r + r; + } + return r; +} + +try +{ + var n = 128; + printStatus('Creating ' + n + 'M length string'); + var r = createString(n); + printStatus('Done. length = ' + r.length); + printStatus('Creating array'); + var o=[r, r, r, r, r, r, r, r, r]; + printStatus('object.toSource()'); + var rr = o.toSource(); + printStatus('Done.'); +} +catch(ex) +{ + actual = ex + ''; + print(actual); +} + +reportMatch(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-338804-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-338804-01.js new file mode 100644 index 00000000..9fb3a4a8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-338804-01.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338804; +var summary = 'GC hazards in constructor functions'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +printStatus ('Uses Intel Assembly'); + +// + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-338804-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-338804-02.js new file mode 100644 index 00000000..e1e2a77e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-338804-02.js @@ -0,0 +1,70 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338804; +var summary = 'GC hazards in constructor functions'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); +printStatus ('Uses Intel Assembly'); + +// + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-338804-03.js b/source/spidermonkey-tests/js1_5/extensions/regress-338804-03.js new file mode 100644 index 00000000..b3e75972 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-338804-03.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 338804; +var summary = 'GC hazards in constructor functions'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof Script != 'undefined') +{ + Script({ toString: fillHeap }); +} +RegExp({ toString: fillHeap }); + +function fillHeap() { + if (typeof gc == 'function') gc(); + var x = 1, tmp; + for (var i = 0; i != 50000; ++i) { + tmp = x / 3; + } +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-339685.js b/source/spidermonkey-tests/js1_5/extensions/regress-339685.js new file mode 100644 index 00000000..295a0806 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-339685.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 339685; +var summary = 'Setting __proto__ null should not affect __iterator__'; +var actual = ''; +var expect = 'No Error'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +var d = { a:2, b:3 }; + +d.__proto__ = null; + +try { + for (var p in d) + ; + actual = 'No Error'; +} catch(e) { + actual = e + ''; +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-341956-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-341956-01.js new file mode 100644 index 00000000..be586538 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-341956-01.js @@ -0,0 +1,68 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341956; +var summary = 'GC Hazards in jsarray.c - unshift'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 0xFFFFFFFF; + + var a = []; + a[N - 1] = 1; + a.__defineGetter__(N - 1, function() { + var tmp = []; + tmp[N - 2] = 0; + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + return 10; + }); + + +// The following always-throw getter is to stop unshift from doing +// 2^32 iterations. + var toStop = "stringToStop"; + a[N - 3] = 0; + a.__defineGetter__(N - 3, function() { throw toStop; }); + + var good = false; + + try { + a.unshift(1); + } catch (e) { + if (e === toStop) + good = true; + } + + expect = true; + actual = good; + + reportCompare(expect, actual, summary); + + print('Done'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-341956-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-341956-02.js new file mode 100644 index 00000000..61fe4ff9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-341956-02.js @@ -0,0 +1,55 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341956; +var summary = 'GC Hazards in jsarray.c - pop'; +var actual = ''; +var expect = 'GETTER RESULT'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 0xFFFFFFFF; + var a = []; + a[N - 1] = 0; + + var expected = "GETTER RESULT"; + + a.__defineGetter__(N - 1, function() { + delete a[N - 1]; + var tmp = []; + tmp[N - 2] = 1; + + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + return expected; + }); + + actual = a.pop(); + + reportCompare(expect, actual, summary); + + print('Done'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-341956-03.js b/source/spidermonkey-tests/js1_5/extensions/regress-341956-03.js new file mode 100644 index 00000000..b52f4148 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-341956-03.js @@ -0,0 +1,72 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 341956; +var summary = 'GC Hazards in jsarray.c - reverse'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var N = 0xFFFFFFFF; + var a = []; + a[N - 1] = 0; + + var expected = "GETTER RESULT"; + + a.__defineGetter__(N - 1, function() { + delete a[N - 1]; + var tmp = []; + tmp[N - 2] = 1; + + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + return expected; + }); + +// The following always-throw getter is to stop unshift from doing +// 2^32 iterations. + var toStop = "stringToStop"; + a[N - 3] = 0; + a.__defineGetter__(N - 3, function() { throw toStop; }); + + + var good = false; + + try { + a.reverse(); + } catch (e) { + if (e === toStop) + good = true; + } + + expect = true; + actual = good; + + reportCompare(expect, actual, summary); + + print('Done'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-342960.js b/source/spidermonkey-tests/js1_5/extensions/regress-342960.js new file mode 100644 index 00000000..715427df --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-342960.js @@ -0,0 +1,46 @@ +// |reftest| skip-if(!xulRuntime.shell&&(Android||xulRuntime.OS=="WINNT"||xulRuntime.OS=="Linux")) silentfail slow -- bug 528464 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 342960; +var summary = 'Do not crash on large string toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expectExitCode(0); + expectExitCode(5); + + function v() + { + var meg=""; + var r=""; + var i; + print("don't interrupt the script. let it go."); + for(i=0;i<1024*1024;i++) meg += "v"; + for(i=0;i<1024/8;i++) r += meg; + var o={f1: r, f2: r, f3: r,f4: r,f5: r, f6: r, f7: r, f8: r,f9: r}; + print('done obj'); + var rr=r.toSource(); + print('done toSource()'); + } + + v(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-345967.js b/source/spidermonkey-tests/js1_5/extensions/regress-345967.js new file mode 100644 index 00000000..58b72e3a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-345967.js @@ -0,0 +1,68 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 345967; +var summary = 'Yet another unrooted atom in jsarray.c'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expectExitCode(0); + expectExitCode(3); + + print('This test will probably run out of memory'); + print('This test really should only fail on 64 bit machines'); + + var JSVAL_INT_MAX = (1 << 30) - 1; + + var a = new Array(JSVAL_INT_MAX + 2); + a[JSVAL_INT_MAX] = 0; + a[JSVAL_INT_MAX + 1] = 1; + + a.__defineGetter__(JSVAL_INT_MAX, function() { return 0; }); + + a.__defineSetter__(JSVAL_INT_MAX, function(value) { + delete a[JSVAL_INT_MAX + 1]; + var tmp = []; + tmp[JSVAL_INT_MAX + 2] = 2; + + if (typeof gc == 'function') + gc(); + for (var i = 0; i != 50000; ++i) { + var tmp = 1 / 3; + tmp /= 10; + } + for (var i = 0; i != 1000; ++i) { + // Make string with 11 characters that would take + // (11 + 1) * 2 bytes or sizeof(JSAtom) so eventually + // malloc will ovewrite just freed atoms. + var tmp2 = Array(12).join(' '); + } + }); + + + a.shift(); + + expect = 0; + actual = a[JSVAL_INT_MAX]; + if (expect !== actual) + print("BAD"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-346494-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-346494-01.js new file mode 100644 index 00000000..755c3ddf --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-346494-01.js @@ -0,0 +1,90 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346494; +var summary = 'various try...catch tests'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var pfx = "(function (x) {try {throw x}", + cg1 = " catch (e if e === 42) {var v = 'catch guard 1 ' + e; actual += v + ','; print(v);}" + cg2 = " catch (e if e === 43) {var v = 'catch guard 2 ' + e; actual += v + ','; print(v);}" + cat = " catch (e) {var v = 'catch all ' + e; actual += v + ','; print(v);}" + fin = " finally{var v = 'fin'; actual += v + ','; print(v)}", + end = "})"; + + var exphash = { + pfx: "(function (y) { var result = ''; y = y + ',';", + cg1: "result += (y === '42,') ? ('catch guard 1 ' + y):'';", + cg2: "result += (y === '43,') ? ('catch guard 2 ' + y):'';", + cat: "result += /catch guard/.test(result) ? '': ('catch all ' + y);", + fin: "result += 'fin,';", + end: "return result;})" + }; + + var src = [ + pfx + fin + end, + pfx + cat + end, + pfx + cat + fin + end, + pfx + cg1 + end, + pfx + cg1 + fin + end, + pfx + cg1 + cat + end, + pfx + cg1 + cat + fin + end, + pfx + cg1 + cg2 + end, + pfx + cg1 + cg2 + fin + end, + pfx + cg1 + cg2 + cat + end, + pfx + cg1 + cg2 + cat + fin + end, + ]; + + var expsrc = [ + exphash.pfx + exphash.fin + exphash.end, + exphash.pfx + exphash.cat + exphash.end, + exphash.pfx + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.end, + exphash.pfx + exphash.cg1 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1 + exphash.cg2 + exphash.cat + exphash.fin + exphash.end, + ]; + + for (var i in src) { + print("\n=== " + src[i]); + var f = eval(src[i]); + print(src[i]); + var exp = eval(expsrc[i]); + // dis(f); + print('decompiling: ' + f); + + actual = ''; + try { expect = exp(42); f(42) } catch (e) { print('tried f(42), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(43); f(43) } catch (e) { print('tried f(43), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(44); f(44) } catch (e) { print('tried f(44), caught ' + e) } + reportCompare(expect, actual, summary); + } + + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-346494.js b/source/spidermonkey-tests/js1_5/extensions/regress-346494.js new file mode 100644 index 00000000..bca6c4ec --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-346494.js @@ -0,0 +1,82 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 346494; +var summary = 'try-catch-finally scope'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function g() + { + try + { + throw "foo"; + } + catch(e if e == "bar") + { + } + catch(e if e == "baz") + { + } + finally + { + } + } + + expect = "foo"; + try + { + g(); + actual = 'No Exception'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + function h() + { + try + { + throw "foo"; + } + catch(e if e == "bar") + { + } + catch(e) + { + } + finally + { + } + } + + expect = "No Exception"; + try + { + h(); + actual = 'No Exception'; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-350312-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-350312-01.js new file mode 100644 index 00000000..13ebce63 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-350312-01.js @@ -0,0 +1,50 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var tmp; + + function f() + { + try { + try { + throw 1; + } catch (e) { + throw e; + } finally { + tmp = true; + } + } catch (e) { + return e; + } + } + + var ex = f(); + + var passed = ex === 1; + if (!passed) { + print("Failed!"); + print("ex="+uneval(ex)); + } + reportCompare(true, passed, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-350312-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-350312-02.js new file mode 100644 index 00000000..20bab7e2 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-350312-02.js @@ -0,0 +1,112 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function createPrint(obj) + { + return new Function("actual += " + obj + " + ','; " + + "print(" + obj + ");"); + } + + function createThrow(obj) + { + return new Function("throw " + obj + "; "); + } + + + function f(a, b, c) + { + try { + a(); + } catch (e if e == null) { + b(); + } finally { + c(); + } + } + + print('test 1'); + expect = 'a,c,'; + actual = ''; + try + { + f(createPrint("'a'"), createPrint("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 1'); + + print('test 2'); + expect = 'c,caught a'; + actual = ''; + try + { + f(createThrow("'a'"), createPrint("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 2'); + + print('test 3'); + expect = 'b,c,'; + actual = ''; + try + { + f(createThrow("null"), createPrint("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 3'); + + print('test 4'); + expect = 'a,c,'; + actual = ''; + try + { + f(createPrint("'a'"), createThrow("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 4'); + + print('test 5'); + expect = 'c,caught b'; + actual = ''; + try + { + f(createThrow("null"), createThrow("'b'"), createPrint("'c'")); + } + catch(ex) + { + actual += 'caught ' + ex; + } + reportCompare(expect, actual, summary + ': 5'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-350312-03.js b/source/spidermonkey-tests/js1_5/extensions/regress-350312-03.js new file mode 100644 index 00000000..edf3cb49 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-350312-03.js @@ -0,0 +1,116 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350312; +var summary = 'Accessing wrong stack slot with nested catch/finally'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var pfx = "(function (x) {try {if (x > 41) throw x}", + cg1a = " catch (e if e === 42) {var v = 'catch guard 1 ' + e; actual += v + ',';print(v);}" + cg1b = " catch (e if e === 42) {var v = 'catch guard 1 + throw ' + e; actual += v + ',';print(v); throw e;}" + cg2 = " catch (e if e === 43) {var v = 'catch guard 2 ' + e; actual += v + ',';print(v)}" + cat = " catch (e) {var v = 'catch all ' + e; print(v); if (e == 44) throw e}" + fin = " finally{var v = 'fin'; actual += v + ',';print(v)}", + end = "})"; + + var exphash = { + pfx: "(function (y) { var result = ''; y = y + ',';", + cg1a: " result += (y === '42,') ? ('catch guard 1 ' + y):'';", + cg1b: " result += (y === '42,') ? ('catch guard 1 + throw ' + y):'';", + cg2: " result += (y === '43,') ? ('catch guard 2 ' + y):'';", + cat: " result += (y > 41) ? ('catch all ' + y):'';", + fin: " result += 'fin,';", + end: "return result;})" + }; + + var src = [ + pfx + fin + end, + pfx + cat + end, + pfx + cat + fin + end, + pfx + cg1a + end, + pfx + cg1a + fin + end, + pfx + cg1a + cat + end, + pfx + cg1a + cat + fin + end, + pfx + cg1a + cg2 + end, + pfx + cg1a + cg2 + fin + end, + pfx + cg1a + cg2 + cat + end, + pfx + cg1a + cg2 + cat + fin + end, + pfx + cg1b + end, + pfx + cg1b + fin + end, + pfx + cg1b + cat + end, + pfx + cg1b + cat + fin + end, + pfx + cg1b + cg2 + end, + pfx + cg1b + cg2 + fin + end, + pfx + cg1b + cg2 + cat + end, + pfx + cg1b + cg2 + cat + fin + end, + ]; + + var expsrc = [ + exphash.pfx + exphash.fin + exphash.end, + exphash.pfx + exphash.cat + exphash.end, + exphash.pfx + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.end, + exphash.pfx + exphash.cg1a + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1a + exphash.cg2 + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.end, + exphash.pfx + exphash.cg1b + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cat + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.fin + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.cat + exphash.end, + exphash.pfx + exphash.cg1b + exphash.cg2 + exphash.cat + exphash.fin + exphash.end, + ]; + + for (var i in src) { + print("\n=== " + i + ": " + src[i]); + var f = eval(src[i]); + var exp = eval(expsrc[i]); + // dis(f); + print('decompiling: ' + f); + //print('decompiling exp: ' + exp); + + actual = ''; + try { expect = exp(41); f(41) } catch (e) { print('tried f(41), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(42); f(42) } catch (e) { print('tried f(42), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(43); f(43) } catch (e) { print('tried f(43), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(44); f(44) } catch (e) { print('tried f(44), caught ' + e) } + reportCompare(expect, actual, summary); + + actual = ''; + try { expect = exp(45); f(45) } catch (e) { print('tried f(44), caught ' + e) } + reportCompare(expect, actual, summary); + + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-350531.js b/source/spidermonkey-tests/js1_5/extensions/regress-350531.js new file mode 100644 index 00000000..fcf9c74f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-350531.js @@ -0,0 +1,156 @@ +// |reftest| skip -- slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 350531; +var summary = 'exhaustively test parenthesization of binary operator subsets'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + +// Translated from permcomb.py, found at +// http://biotech.embl-ebi.ac.uk:8400/sw/common/share/python/examples/dstruct/classics/permcomb.py +// by searching for "permcomb.py". +// +// This shows bugs, gaps, and verbosities in JS compared to Python: +// 1. Lack of range([start, ] end[, step]). +// 2. ![] => false, indeed ! => false. +// 3. Missing append or push for strings (if append, then we'd want append for +// arrays too). +// 4. Missing slice operator syntax s[i:j]. +// 5. Lack of + for array concatenation. + + String.prototype.push = function (str) { return this + str; }; + + function permute(list) { + if (!list.length) // shuffle any sequence + return [list]; // empty sequence + var res = []; + for (var i = 0, n = list.length; i < n; i++) { // delete current node + var rest = list.slice(0, i).concat(list.slice(i+1)); + for each (var x in permute(rest)) // permute the others + res.push(list.slice(i, i+1).concat(x)); // add node at front + } + return res; + } + + function subset(list, size) { + if (size == 0 || !list.length) // order matters here + return [list.slice(0, 0)]; // an empty sequence + var result = []; + for (var i = 0, n = list.length; i < n; i++) { + var pick = list.slice(i, i+1); // sequence slice + var rest = list.slice(0, i).concat(list.slice(i+1)); // keep [:i] part + for each (var x in subset(rest, size-1)) + result.push(pick.concat(x)); + } + return result; + } + + function combo(list, size) { + if (size == 0 || !list.length) // order doesn't matter + return [list.slice(0, 0)]; // xyz == yzx + var result = []; + for (var i = 0, n = (list.length - size) + 1; i < n; i++) { + // iff enough left + var pick = list.slice(i, i+1); + var rest = list.slice(i+1); // drop [:i] part + for each (var x in combo(rest, size - 1)) + result.push(pick.concat(x)); + } + return result; + } + + +// Generate all subsets of distinct binary operators and join them from left +// to right, parenthesizing minimally. Decompile, recompile, compress spaces +// and compare to test correct parenthesization. + +// load("permcomb.js"); + + var bops = [ + ["=", "|=", "^=", "&=", "<<=", ">>=", ">>>=", "+=", "-=", "*=", "/=", "%="], + ["||"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "!=", "===", "!=="], + ["<", "<=", ">=", ">", "in", "instanceof"], + ["<<", ">>", ">>>"], + ["+", "-"], + ["*", "/", "%"], + ]; + + var prec = {}; + var aops = []; + + for (var i = 0; i < bops.length; i++) { + for (var j = 0; j < bops[i].length; j++) { + var k = bops[i][j]; + prec[k] = i; + aops.push(k); + } + } + +// Theoretically all subsets of size 2 should be enough to test, but in case +// there's some large-scale bug, try up to 5 (or higher? The cost in memory is +// factorially explosive). +next_subset: + for (i = 2; i < 5; i++) { + var sets = subset(aops, i); + gc(); + + for each (var set in sets) { + //print('for each set in sets: ' + (uneval(set)) ); + var src = "(function () {"; + for (j in set) { + var op = set[j], op2 = set[j-1]; + + // Precedence 0 is for assignment ops, which are right- + // associative, so don't force left associativity using + // parentheses. + if (prec[op] && prec[op] < prec[op2]) + src += "("; + } + src += "x "; + for (j in set) { + var op = set[j], op2 = set[j+1]; + + // Parenthesize only if not right-associative (precedence 0) and + // the next op is higher precedence than current. + var term = (prec[op] && prec[op] < prec[op2]) ? " x)" : " x"; + + src += op + term; + if (j < set.length - 1) + src += " "; + } + src += ";})"; + try { + var ref = uneval(eval(src)).replace(/\s+/g, ' '); + if (ref != src) { + actual += "BROKEN! input: " + src + " output: " + ref + " "; + print("BROKEN! input: " + src + " output: " + ref); + break next_subset; + } + } catch (e) {} + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-351102-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-351102-01.js new file mode 100644 index 00000000..4d569dd8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-351102-01.js @@ -0,0 +1,39 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351102; +var summary = 'try/catch-guard/finally GC issues'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + + f = function () { + try { + throw new Error('bad'); + } catch (e if (e = null, gc(), false)) { + } catch (e) { + // e is dangling now + } + }; + + f(); + + reportCompare(expect, actual, summary + ': 1'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-351102-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-351102-02.js new file mode 100644 index 00000000..ce613da1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-351102-02.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351102; +var summary = 'try/catch-guard/finally GC issues'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + f = function () + { + var a = null; + try { + a(); + } catch (e) { + } + return false; + }; + + try { + throw 1; + } catch (e if f()) { + } catch (e if e == 1) { + print("GOOD"); + } catch (e) { + print("BAD: "+e); + } + + reportCompare(expect, actual, summary + ': 2'); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-351102-06.js b/source/spidermonkey-tests/js1_5/extensions/regress-351102-06.js new file mode 100644 index 00000000..87e897f9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-351102-06.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351102; +var summary = 'try/catch-guard/finally GC issues'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f; + try + { + try { null.a } catch(e if (e = null, gc())) { } + } + catch(ex) + { + } + reportCompare(expect, actual, summary + ': 6'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-351448.js b/source/spidermonkey-tests/js1_5/extensions/regress-351448.js new file mode 100644 index 00000000..0876eef0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-351448.js @@ -0,0 +1,62 @@ +// |reftest| skip -- Yarr doesn't have the same complexity errors at execution time. +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351448; +var summary = 'RegExp - throw InternalError on too complex regular expressions'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var strings = [ + "/.X(.+)+X/.exec('bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+X/.exec('bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+XX/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+XX/.exec('bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X]/.exec('bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X]/.exec('bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X][X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.X(.+)+[X][X]/.exec('bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+X/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+X/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+X/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+[X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.XX(.+)+[X]/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X]/.exec('bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X]/.exec('bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X][X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X](.+)+[X][X]/.exec('bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X][X](.+)+[X]/.exec('bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')", + "/.[X][X](.+)+[X]/.exec('bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')" + ]; + + expect = 'InternalError: regular expression too complex'; + + for (var i = 0; i < strings.length; i++) + { + try + { + eval(strings[i]); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': ' + strings[i]); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-351463-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-351463-01.js new file mode 100644 index 00000000..49e5441d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-351463-01.js @@ -0,0 +1,254 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351463; +var summary = 'Treat hyphens as not special adjacent to CharacterClassEscapes in character classes'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var r; + var s = 'a0- z'; + + r = '([\\d-\\s]+)'; + expect = ['0- ', '0- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\d]+)'; + expect = ['0- ', '0- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\D-\\s]+)'; + expect = ['a', 'a'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\D]+)'; + expect = ['a', 'a'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\d-\\S]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\d]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\D-\\S]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\D]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + +// -- + + r = '([\\w-\\s]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\w]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\W-\\s]+)'; + expect = ['- ', '- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\s-\\W]+)'; + expect = ['- ', '- '] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\w-\\S]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\w]+)'; + expect = ['a0-', 'a0-'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\W-\\S]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + r = '([\\S-\\W]+)'; + expect = ['a0- z', 'a0- z'] + ''; + actual = null; + + try + { + actual = new RegExp(r).exec(s) + ''; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': /' + r + '/.exec("' + s + '")'); + + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-351973.js b/source/spidermonkey-tests/js1_5/extensions/regress-351973.js new file mode 100644 index 00000000..008db635 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-351973.js @@ -0,0 +1,51 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 351973; +var summary = 'GC hazard with unrooted ids in Object.toSource'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function removeAllProperties(o) + { + for (var prop in o) + delete o[prop]; + for (var i = 0; i != 50*1000; ++i) { + var tmp = Math.sqrt(i+0.2); + tmp = 0; + } + if (typeof gc == "function") + gc(); + } + + function run_test() + { + + var o = {}; + o.first = { toSource: function() { removeAllProperties(o); } }; + for (var i = 0; i != 10; ++i) { + o[Math.sqrt(i + 0.1)] = 1; + } + return o.toSource(); + } + + print(run_test()); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-352281.js b/source/spidermonkey-tests/js1_5/extensions/regress-352281.js new file mode 100644 index 00000000..acb07438 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-352281.js @@ -0,0 +1,35 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352281; +var summary = 'decompilation of |while| and function declaration'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f, g; + f = function() { { while(0) function t() { } } } + expect = 'function() { while(0) { function t() { } }}'; + actual = f + ''; + compareSource(expect, actual, summary); + + g = eval(uneval(actual)); + actual = g + ''; + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-352291.js b/source/spidermonkey-tests/js1_5/extensions/regress-352291.js new file mode 100644 index 00000000..a714e9a4 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-352291.js @@ -0,0 +1,41 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352291; +var summary = 'disassembly of regular expression'; +var actual = ''; +var expect = 'TypeError: /g/g is not a function'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof dis != 'function') + { + actual = expect = 'disassembly not supported, test skipped.'; + } + else + { + try + { + dis(/g/g) + } + catch(ex) + { + actual = ex + ''; + } + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-352372.js b/source/spidermonkey-tests/js1_5/extensions/regress-352372.js new file mode 100644 index 00000000..088f5102 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-352372.js @@ -0,0 +1,65 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352372; +var summary = 'Do not assert eval("setter/*...")'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'ReferenceError: setter is not defined'; + try + { + eval("setter/*\n*/;"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/;")'); + + try + { + eval("setter/*\n*/g"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/g")'); + + try + { + eval("setter/*\n*/ ;"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/ ;")'); + + try + { + eval("setter/*\n*/ g"); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'eval("setter/*\n*/ g")'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-352604.js b/source/spidermonkey-tests/js1_5/extensions/regress-352604.js new file mode 100644 index 00000000..c6197f6a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-352604.js @@ -0,0 +1,33 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 352604; +var summary = 'Do not assert: !OBJ_GET_PROTO(cx, ctor)'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f() {} + delete Function; + var g = function () {}; + + expect = f.__proto__; + actual = g.__proto__; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-354297.js b/source/spidermonkey-tests/js1_5/extensions/regress-354297.js new file mode 100644 index 00000000..83a0f22f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-354297.js @@ -0,0 +1,30 @@ +/* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354297; +var summary = 'getter/setter can be on index'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test requires GC_MARK_DEBUG'); + + var o = {}; o.__defineGetter__(1, Math.sin); gc() + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-354541-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-354541-01.js new file mode 100644 index 00000000..c177c3be --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-354541-01.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary + ': top level'); + +String.prototype.trim = function() { print('hallo'); }; + +const S = String; +const Sp = String.prototype; + +expect = 'No Error'; +actual = 'No Error'; + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + var s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; print(String === S); print(String.prototype === Sp); "".trim();'); + s(); +} + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-354541-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-354541-02.js new file mode 100644 index 00000000..83019d55 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-354541-02.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary + ': in function'); + + String.prototype.trim = function() { print('hallo'); }; + + const S = String; + const Sp = String.prototype; + + expect = 'No Error'; + actual = 'No Error'; + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + var s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; print(String === S); print(String.prototype === Sp); "".trim();'); + s(); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-354541-03.js b/source/spidermonkey-tests/js1_5/extensions/regress-354541-03.js new file mode 100644 index 00000000..2468192e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-354541-03.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + + +printBugNumber(BUGNUMBER); +printStatus (summary + ': top level'); + +String.prototype.trim = function() { print('hallo'); }; + +String.prototype.trim = function() { return 'hallo'; }; + +const S = String; +const Sp = String.prototype; + +expect = 'hallo'; +var expectStringInvariant = true + var actualStringInvariant; +var expectStringPrototypeInvariant = true; +var actualStringPrototypeInvariant; + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); + reportCompare("Script not defined, Test skipped.", + "Script not defined, Test skipped.", + summary); +} +else +{ + var s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; actualStringInvariant = (String === S); actualStringPrototypeInvariant = (String.prototype === Sp); actual = "".trim();'); + try + { + s(); + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, 'trim() returned'); + reportCompare(expectStringInvariant, actualStringInvariant, + 'String invariant'); + reportCompare(expectStringPrototypeInvariant, + actualStringPrototypeInvariant, + 'String.prototype invariant'); + +} + diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-354541-04.js b/source/spidermonkey-tests/js1_5/extensions/regress-354541-04.js new file mode 100644 index 00000000..ee68b0a7 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-354541-04.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 354541; +var summary = 'Regression to standard class constructors in case labels'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary + ': in function'); + + String.prototype.trim = function() { return 'hallo'; }; + + const S = String; + const Sp = String.prototype; + + expect = 'hallo'; + var expectStringInvariant = true; + var actualStringInvariant; + var expectStringPrototypeInvariant = true; + var actualStringPrototypeInvariant; + + if (typeof Script == 'undefined') + { + print('Test skipped. Script is not defined'); + reportCompare("Script not defined, Test skipped.", + "Script not defined, Test skipped.", + summary); + } + else + { + s = Script('var tmp = function(o) { switch(o) { case String: case 1: return ""; } }; actualStringInvariant = (String === S); actualStringPrototypeInvariant = (String.prototype === Sp); actual = "".trim();'); + try + { + s(); + } + catch(ex) + { + actual = ex + ''; + } + + reportCompare(expect, actual, 'trim() returned'); + reportCompare(expectStringInvariant, actualStringInvariant, 'String invariant'); + reportCompare(expectStringPrototypeInvariant, + actualStringPrototypeInvariant, + 'String.prototype invariant'); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-355339.js b/source/spidermonkey-tests/js1_5/extensions/regress-355339.js new file mode 100644 index 00000000..9b15bd74 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-355339.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355339; +var summary = 'Do not assert: sprop->setter != js_watch_set'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + o = {}; + o.watch("j", function(a,b,c) { print("*",a,b,c) }); + o.unwatch("j"); + o.watch("j", function(a,b,c) { print("*",a,b,c) }); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-355497.js b/source/spidermonkey-tests/js1_5/extensions/regress-355497.js new file mode 100644 index 00000000..4f69eefb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-355497.js @@ -0,0 +1,60 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355497; +var summary = 'Do not overflow stack with Array.slice, getter'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'InternalError: too much recursion'; + + try + { + var a = { length: 1 }; + a.__defineGetter__(0, [].slice); + a[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 1'); + + try + { + var b = { length: 1 }; + b.__defineGetter__(0, function () { return Array.slice(b);}); + b[0]; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 2'); + + try + { + var c = []; + c.__defineSetter__(0, c.unshift); + c[0] = 1; + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary + ': 3'); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-355622.js b/source/spidermonkey-tests/js1_5/extensions/regress-355622.js new file mode 100644 index 00000000..87224a21 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-355622.js @@ -0,0 +1,34 @@ +// |reftest| skip -- obsolete test +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355622; +var summary = 'Do not assert: overwriting'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (function() { export arguments })(); + } + catch(ex) + { + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-355655.js b/source/spidermonkey-tests/js1_5/extensions/regress-355655.js new file mode 100644 index 00000000..9013cb1b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-355655.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355655; +var summary = 'running script can be recompiled'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + expect = 'TypeError: cannot compile over a script that is currently executing'; + actual = ''; + + try + { + t='1';s=Script('s.compile(t);print(t);');s(); + } + catch(ex) + { + actual = ex + ''; + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-355820.js b/source/spidermonkey-tests/js1_5/extensions/regress-355820.js new file mode 100644 index 00000000..dd5de38e --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-355820.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355820; +var summary = 'Remove non-standard Script object'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + print('This test will fail in gecko prior to 1.9'); + + expect = 'undefined'; + actual = typeof Script; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-355982.js b/source/spidermonkey-tests/js1_5/extensions/regress-355982.js new file mode 100644 index 00000000..815f8af1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-355982.js @@ -0,0 +1,43 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 355982; +var summary = 'Script("") should not fail'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = 'No Error'; + actual = 'No Error'; + try + { + if (typeof Script == 'undefined') + { + print('Test skipped. Script not defined.'); + } + else + { + Script(''); + } + } + catch(ex) + { + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-356402.js b/source/spidermonkey-tests/js1_5/extensions/regress-356402.js new file mode 100644 index 00000000..33e1e663 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-356402.js @@ -0,0 +1,23 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 356402; +var summary = 'Do not assert: slot < fp->nvars'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + (function() { new Script('for(var x in x) { }')(); })(); +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-358594-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-358594-01.js new file mode 100644 index 00000000..db6ea21b --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-358594-01.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // don't crash|assert + function f() { } + f.__proto__ = this; + Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); + uneval(this); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-358594-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-358594-02.js new file mode 100644 index 00000000..d31d93ff --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-358594-02.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// don't crash|assert +function f() { } +f.__proto__ = this; +Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); +uneval(this); +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-358594-03.js b/source/spidermonkey-tests/js1_5/extensions/regress-358594-03.js new file mode 100644 index 00000000..f27c41d2 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-358594-03.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // don't crash|assert + f = function () { }; + f.__proto__ = this; + Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); + uneval(this); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-358594-04.js b/source/spidermonkey-tests/js1_5/extensions/regress-358594-04.js new file mode 100644 index 00000000..5444293d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-358594-04.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// don't crash|assert +f = function () { }; +f.__proto__ = this; +Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); +uneval(this); +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-358594-05.js b/source/spidermonkey-tests/js1_5/extensions/regress-358594-05.js new file mode 100644 index 00000000..0c6f9a1a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-358594-05.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + // don't crash|assert + f = function () { }; + f.hhhhhhhhh = this; + Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); + uneval(this); + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-358594-06.js b/source/spidermonkey-tests/js1_5/extensions/regress-358594-06.js new file mode 100644 index 00000000..b4dc4fcd --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-358594-06.js @@ -0,0 +1,21 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 358594; +var summary = 'Do not crash on uneval(this).'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// don't crash|assert +f = function () { }; +f.hhhhhhhhh = this; +Object.defineProperty(this, "m", { set: f, enumerable: true, configurable: true }); +uneval(this); +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-359024.js b/source/spidermonkey-tests/js1_5/extensions/regress-359024.js new file mode 100644 index 00000000..a2a178cb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-359024.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 359024; +var summary = 'Do not crash with Script...'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof Script == 'undefined') + { + print(expect = actual = 'Test skipped. Script object required.'); + } + else + { + var scri=new Script(" var s=new Date(); var a=0; for(var i=0;i<1024*1024;i++) {a=i } var e=new Date(); print('time2='+(e-s)/1000);"); + scri.compile(); + scri.exec(); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-361346.js b/source/spidermonkey-tests/js1_5/extensions/regress-361346.js new file mode 100644 index 00000000..297c3b1f --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-361346.js @@ -0,0 +1,22 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361346; +var summary = 'Crash with setter, watch, GC'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = actual = 'No Crash'; + +Object.defineProperty(this, "x", { set: new Function, enumerable: true, configurable: true }); +this.watch('x', function(){}); +gc(); +x = {}; + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-361360.js b/source/spidermonkey-tests/js1_5/extensions/regress-361360.js new file mode 100644 index 00000000..98e6575d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-361360.js @@ -0,0 +1,32 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361360; +var summary = 'Do not assert: !caller || caller->pc involving setter and watch'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = actual = 'No Crash'; + + this.__defineSetter__('x', eval); + this.watch('x', function(){}); + x = 3; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-361552.js b/source/spidermonkey-tests/js1_5/extensions/regress-361552.js new file mode 100644 index 00000000..eed54e6d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-361552.js @@ -0,0 +1,27 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361552; +var summary = 'Crash with setter, watch, Script'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = actual = 'No Crash'; + +if (typeof Script == 'undefined') +{ + print('Test skipped. Script not defined.'); +} +else +{ + this.__defineSetter__('x', gc); + this.watch('x', new Script('')); + x = 3; +} +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-361558.js b/source/spidermonkey-tests/js1_5/extensions/regress-361558.js new file mode 100644 index 00000000..a9a3ae72 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-361558.js @@ -0,0 +1,19 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361558; +var summary = 'Do not assert: sprop->setter != js_watch_set'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +expect = actual = 'No Crash'; + +({}.__proto__.watch('x', print)); ({}.watch('x', print)); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-361571.js b/source/spidermonkey-tests/js1_5/extensions/regress-361571.js new file mode 100644 index 00000000..bf89d794 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-361571.js @@ -0,0 +1,38 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361571; +var summary = 'Do not assert: fp->scopeChain == parent'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + o = {}; + o.__defineSetter__('y', eval); + o.watch('y', function () { return "";}); + o.y = 1; + } + catch(ex) + { + printStatus('Note eval can no longer be called directly'); + expect = 'EvalError: function eval must be called directly, and not by way of a function of another name'; + actual = ex + ''; + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-361856.js b/source/spidermonkey-tests/js1_5/extensions/regress-361856.js new file mode 100644 index 00000000..e7e2f675 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-361856.js @@ -0,0 +1,35 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361856; +var summary = 'Do not assert: overwriting @ js_AddScopeProperty'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function testit() { + var obj = {}; + obj.watch("foo", function(){}); + delete obj.foo; + obj = null; + gc(); + } + testit(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-361964.js b/source/spidermonkey-tests/js1_5/extensions/regress-361964.js new file mode 100644 index 00000000..fcb8bba0 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-361964.js @@ -0,0 +1,54 @@ +// |reftest| skip -- slow, alert not dismissed, now busted by harness +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 361964; +var summary = 'Crash [@ MarkGCThingChildren] involving watch and setter'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var doc; + if (typeof document == 'undefined') + { + doc = {}; + } + else + { + doc = document; + } + + if (typeof alert == 'undefined') + { + alert = print; + } + +// Crash: + doc.watch("title", function(a,b,c,d) { + return { toString : function() { alert(1); } }; + }); + doc.title = "xxx"; + +// No crash: + doc.watch("title", function() { + return { toString : function() { alert(1); } }; + }); + doc.title = "xxx"; + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-363258.js b/source/spidermonkey-tests/js1_5/extensions/regress-363258.js new file mode 100644 index 00000000..4e48b126 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-363258.js @@ -0,0 +1,48 @@ +// |reftest| random -- bug 524788 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 363258; +var summary = 'Timer resolution'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var start = 0; + var stop = 0; + var i; + var limit = 0; + var incr = 10; + var resolution = 5; + + while (stop - start == 0) + { + limit += incr; + start = Date.now(); + for (i = 0; i < limit; i++) {} + stop = Date.now(); + } + + print('limit=' + limit + ', resolution=' + resolution + ', time=' + (stop - start)); + + expect = true; + actual = (stop - start <= resolution); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-363988.js b/source/spidermonkey-tests/js1_5/extensions/regress-363988.js new file mode 100644 index 00000000..76f1dccb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-363988.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 363988; +var summary = 'Do not crash at JS_GetPrivate with large script'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function crash() { + var town = new Array; + + for (var i = 0; i < 0x4001; ++i) { + var si = String(i); + town[i] = [ si, "x" + si, "y" + si, "z" + si ]; + } + + return "town=" + uneval(town) + ";function f() {}"; + } + + if (typeof document != "undefined") + { + // this is required to reproduce the crash. + document.write("'); + window.addEventListener('load', crash, false); + } + else + { + reportCompare(expect, actual, summary); + } + + exitFunc ('test'); +} + +function crash() +{ + gDelayTestDriverEnd = false; + reportCompare(expect, actual, summary); + jsTestDriverEnd(); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-369696-01.js b/source/spidermonkey-tests/js1_5/extensions/regress-369696-01.js new file mode 100644 index 00000000..985ae0f3 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-369696-01.js @@ -0,0 +1,31 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 369696; +var summary = 'Do not assert: map->depth > 0" in js_LeaveSharpObject'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + q = []; + q.__defineGetter__("0", q.toString); + q[2] = q; + assertEq(q.toSource(), "[\"\", , []]", "wrong string"); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-369696-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-369696-02.js new file mode 100644 index 00000000..1784d977 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-369696-02.js @@ -0,0 +1,58 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 369696; +var summary = 'Do not assert: map->depth > 0" in js_LeaveSharpObject'; +var actual = ''; +var expect = ''; + +// Bug 762908 requires us to set sp=null; +if (this.window) window.SpecialPowers = null; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function fun() {} + n = fun.prototype; + n.__defineGetter__("prototype", n.toSource); + p = n.__lookupGetter__("prototype"); + n = p; + + assertEq(n, Object.prototype.toSource); + assertEq(p, Object.prototype.toSource); + + n["prototype"] = [n]; + n = p; + + assertEq(n, Object.prototype.toSource); + assertEq(p, Object.prototype.toSource); + + p2 = n["prototype"]; + + assertEq(Array.isArray(p2), true); + assertEq(p2[0], Object.prototype.toSource); + + n = p2; + + assertEq(n.toString, Array.prototype.toString); + n.__defineGetter__("0", n.toString); + n = p; + + assertEq(n, Object.prototype.toSource); + + n.call(this); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-369696-03.js b/source/spidermonkey-tests/js1_5/extensions/regress-369696-03.js new file mode 100644 index 00000000..da52ab8d --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-369696-03.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 369696; +var summary = 'Do not assert: map->depth > 0" in js_LeaveSharpObject'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var x = [[[ { toSource: function() { gc(); }}]]]; + + var a = []; + a[0] = a; + a.toSource = a.toString; + Array.prototype.toSource.call(a); + +//cx->sharpObjectMap.depth == -2 + + (function() { + var tmp = []; + for (var i = 0; i != 30*1000; ++i) { + var tmp2 = []; + tmp.push(tmp2); + tmp2.toSource(); + } + })(); + + gc(); + x.toSource(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-372309.js b/source/spidermonkey-tests/js1_5/extensions/regress-372309.js new file mode 100644 index 00000000..278ee0a8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-372309.js @@ -0,0 +1,47 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 372309; +var summary = 'Root new array objects'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var width = 600; + var height = 600; + + var img1canvas = document.createElement("canvas"); + var img2canvas = document.createElement("canvas"); + + img1canvas.width = img2canvas.width = width; + img1canvas.height = img2canvas.height = height; + img1canvas.getContext("2d").getImageData(0, 0, width, height).data; + img2canvas.getContext("2d").getImageData(0, 0, width, height).data; + + reportCompare(expect, actual, summary); + gDelayTestDriverEnd = false; + jsTestDriverEnd(); + + exitFunc ('test'); +} + +if (typeof window != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + + window.addEventListener("load", test, false); +} +else +{ + reportCompare(expect, actual, summary); +} + diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-374589.js b/source/spidermonkey-tests/js1_5/extensions/regress-374589.js new file mode 100644 index 00000000..829c5dcc --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-374589.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 374589; +var summary = 'Do not assert decompiling try { } catch(x if true) { } ' + + 'catch(y) { } finally { this.a.b; }'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var f = function () { + try { } catch(x if true) { } catch(y) { } finally { this.a.b; } }; + + expect = 'function () { try { } catch(x if true) { } catch(y) { } ' + + 'finally { this.a.b; } }'; + + actual = f + ''; + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-375183.js b/source/spidermonkey-tests/js1_5/extensions/regress-375183.js new file mode 100644 index 00000000..e41751a1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-375183.js @@ -0,0 +1,62 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375183; +var summary = '__noSuchMethod__ should not allocate beyond fp->script->depth'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj = { get __noSuchMethod__() { + print("Executed"); + return new Object(); + }}; + + try + { + obj.x(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary + ':1'); + + obj = { __noSuchMethod__: {} }; + try + { + obj.x(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary + ':2'); + + obj = { } + obj.__noSuchMethod__ = {}; + try + { + obj.x(); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary + ':3'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-375344.js b/source/spidermonkey-tests/js1_5/extensions/regress-375344.js new file mode 100644 index 00000000..41d9eeb1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-375344.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375344; +var summary = 'accessing prototype of DOM objects should throw catchable error'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof HTMLElement != 'undefined') +{ + expect = /TypeError/; + try + { + print(HTMLElement.prototype.nodeName); + } + catch(ex) + { + actual = ex + ''; + print(actual); + } + reportMatch(expect, actual, summary); +} +else +{ + expect = actual = 'Test can only run in a Gecko 1.9 browser or later.'; + print(actual); + reportCompare(expect, actual, summary); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-375801.js b/source/spidermonkey-tests/js1_5/extensions/regress-375801.js new file mode 100644 index 00000000..2ed40ae9 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-375801.js @@ -0,0 +1,36 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 375801; +var summary = 'uneval should use "(void 0)" instead of "undefined"'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '({a: (void 0)})' + actual = uneval({a: undefined}) + compareSource(expect, actual, summary + ': uneval'); + + expect = 'function() {({a: undefined});}'; + actual = (function() {({a: undefined});}).toString(); + compareSource(expect, actual, summary + ': toString'); + + expect = '(function () {({a: undefined});})'; + actual = (function () {({a: undefined});}).toSource(); + compareSource(expect, actual, summary + ': toSource'); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-380581.js b/source/spidermonkey-tests/js1_5/extensions/regress-380581.js new file mode 100644 index 00000000..504a6f79 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-380581.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 380581; +var summary = 'Incorrect uneval with setter in object literal'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '(function() { })'; + actual = uneval(eval("(function() { })")); + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-380889.js b/source/spidermonkey-tests/js1_5/extensions/regress-380889.js new file mode 100644 index 00000000..b0e03d66 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-380889.js @@ -0,0 +1,40 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 380889; +var summary = 'Source disassembler assumes SRC_SWITCH has jump table'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function f(i) + { + switch(i){ + case 1: + case xyzzy: + } + } + + if (typeof dis != 'undefined') + { + dis(f); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-381211.js b/source/spidermonkey-tests/js1_5/extensions/regress-381211.js new file mode 100644 index 00000000..07984333 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-381211.js @@ -0,0 +1,29 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 381211; +var summary = 'uneval with getter'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + expect = '( { get x() {} } )'; + actual = uneval({get x(){}}); + compareSource(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-381304.js b/source/spidermonkey-tests/js1_5/extensions/regress-381304.js new file mode 100644 index 00000000..603b81fb --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-381304.js @@ -0,0 +1,69 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 381304; +var summary = 'getter/setter with keywords'; +var actual = ''; +var expect = ''; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + var obj; + + print('1'); + + obj = { + set inn(value) {this.for = value;}, + get inn() {return this.for;} + }; + + expect = '({get inn() { return this.for; }, set inn(value) { this.for = value; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 1'); + + print('2'); + + obj = { + set in(value) {this.for = value;}, + get in() {return this.for;} + }; + + expect = '({ get in() { return this.for; }, set in(value) { this.for = value; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 2'); + + print('3'); + + obj = { + set inn(value) {this.for = value;}, + get in() {return this.for;} + }; + + expect = '({ set inn(value) { this.for = value; }, get in() { return this.for; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 4'); + + print('4'); + + obj = { + set in(value) {this.for = value;}, + get inn() {return this.for;} + }; + + expect = ' ({ set in(value) { this.for = value; }, get inn() { return this.for; } })'; + actual = obj.toSource(); + compareSource(expect, actual, summary + ': 5'); + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-385134.js b/source/spidermonkey-tests/js1_5/extensions/regress-385134.js new file mode 100644 index 00000000..603ddb30 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-385134.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385134; +var summary = 'Do not crash with setter, watch, uneval'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof this.__defineSetter__ != 'undefined' && + typeof this.watch != 'undefined' && + typeof uneval != 'undefined') + { + this.__defineSetter__(0, function(){}); + this.watch(0, function(){}); + uneval(this); + } + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-385393-02.js b/source/spidermonkey-tests/js1_5/extensions/regress-385393-02.js new file mode 100644 index 00000000..a23efb5a --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-385393-02.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385393; +var summary = 'Regression test for bug 385393'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + try + { + (4).__lookupGetter__("w"); + } + catch(ex) + { + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-385393-09.js b/source/spidermonkey-tests/js1_5/extensions/regress-385393-09.js new file mode 100644 index 00000000..42834824 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-385393-09.js @@ -0,0 +1,18 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 385393; +var summary = 'Regression test for bug 385393'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +eval("this.__defineSetter__('x', gc); this.watch('x', [].slice); x = 1;"); + +reportCompare(expect, actual, summary); diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-390597.js b/source/spidermonkey-tests/js1_5/extensions/regress-390597.js new file mode 100644 index 00000000..9f8596ad --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-390597.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 390597; +var summary = 'watch point + eval-as-setter allows access to dead JSStackFrame'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + try + { + var obj = this, args = null; + obj.__defineSetter__("evil", eval); + obj.watch("evil", function() { return "args = arguments;"; }); + obj.evil = null; + eval("print(args[0]);"); + } + catch(ex) + { + print('Caught ' + ex); + } + } + exploit(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-390598.js b/source/spidermonkey-tests/js1_5/extensions/regress-390598.js new file mode 100644 index 00000000..46167bc8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-390598.js @@ -0,0 +1,34 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 390598; +var summary = 'array_length_setter is exploitable'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + function exploit() { + var fun = function () {}; + fun.__proto__ = []; + fun.length = 0x50505050 >> 1; + fun(); + } + exploit(); + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-394967.js b/source/spidermonkey-tests/js1_5/extensions/regress-394967.js new file mode 100644 index 00000000..e1ed16af --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-394967.js @@ -0,0 +1,42 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 394967; +var summary = 'Do not assert: !vp[1].isPrimitive()'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof evalcx == 'undefined') + { + print('Skipping. This test requires evalcx.'); + } + else + { + var sandbox = evalcx(""); + try + { + evalcx("(1)()", sandbox); + } + catch(ex) + { + } + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-396326.js b/source/spidermonkey-tests/js1_5/extensions/regress-396326.js new file mode 100644 index 00000000..4c927b44 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-396326.js @@ -0,0 +1,48 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + + +//----------------------------------------------------------------------------- +var BUGNUMBER = 396326; +var summary = 'Do not assert trying to disassemble get(var|arg) prop'; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof dis == 'undefined') + { + print('disassembly not supported. test skipped.'); + reportCompare(expect, actual, summary); + } + else + { + function f1() { var v; return v.prop }; + dis(f1); + reportCompare(expect, actual, summary + + ': function f1() { var v; return v.prop };'); + + function f2(arg) { return arg.prop }; + dis(f2); + reportCompare(expect, actual, summary + + ': function f2(arg) { return arg.prop };'); + + function f3() { return this.prop }; + dis(f3); + reportCompare(expect, actual, summary + + ': function f3() { return this.prop };'); + } + + exitFunc ('test'); +} diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-406572.js b/source/spidermonkey-tests/js1_5/extensions/regress-406572.js new file mode 100644 index 00000000..e93448c8 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-406572.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 406572; +var summary = 'JSOP_CLOSURE unconditionally replaces properties of the variable object - Browser only'; +var actual = ''; +var expect = ''; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +if (typeof window != 'undefined') +{ + try { + actual = "FAIL: Unexpected exception thrown"; + + var win = window; + var windowString = String(window); + window = 1; + reportCompare(windowString, String(window), "window should be readonly"); + + actual = ""; // We should reach this line, and throw an exception after it + + if (1) + function window() { return 1; } + + actual = "FAIL: this line should never be reached"; + + // The test harness might rely on window having its original value: + // restore it. + window = win; + } catch (e) { + } +} +else +{ + expect = actual = 'Test can only run in a Gecko 1.9 browser or later.'; + print(actual); +} +reportCompare(expect, actual, summary); + + diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-407501.js b/source/spidermonkey-tests/js1_5/extensions/regress-407501.js new file mode 100644 index 00000000..444f76e1 --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-407501.js @@ -0,0 +1,42 @@ +// |reftest| skip-if(Android) +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407501; +var summary = 'JSOP_NEWINIT lacks SAVE_SP_AND_PC '; +var actual = 'No Crash'; +var expect = 'No Crash'; + + +//----------------------------------------------------------------------------- +test(); +//----------------------------------------------------------------------------- + +function test() +{ + enterFunc ('test'); + printBugNumber(BUGNUMBER); + printStatus (summary); + + if (typeof gczeal == 'function') + { + gczeal(2); + } + + var a = [[[[[[[0]]]]]]]; + if (uneval(a).length == 0) + throw "Unexpected result"; + + if (typeof gczeal == 'function') + { + gczeal(0); + } + + reportCompare(expect, actual, summary); + + exitFunc ('test'); +} + diff --git a/source/spidermonkey-tests/js1_5/extensions/regress-407720.js b/source/spidermonkey-tests/js1_5/extensions/regress-407720.js new file mode 100644 index 00000000..9ecfedfc --- /dev/null +++ b/source/spidermonkey-tests/js1_5/extensions/regress-407720.js @@ -0,0 +1,52 @@ +// |reftest| skip-if(!xulRuntime.shell) slow +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +//----------------------------------------------------------------------------- +var BUGNUMBER = 407720; +var summary = 'js_FindClassObject causes crashes with getter/setter - Browser only'; +var actual = 'No Crash'; +var expect = 'No Crash'; + +printBugNumber(BUGNUMBER); +printStatus (summary); + +// stop the test after 60 seconds +var start = new Date(); + +if (typeof document != 'undefined') +{ + // delay test driver end + gDelayTestDriverEnd = true; + document.write('